CCS Modul   R_PAM2SERVER
 
 ----------------------------------------------------------                 
 Funktionsbeschreibung:
1 PRUEFSCHRITT
                                                     
            GAUDI Pruefschritt                                              
    ------------------------------
2 POSITION
                                                         
            PAV- Position                                                   
    ------------------------------
3 METHOD
                                                           
            AUDIWFS4:   Senden der PIN und des KEY zum AUDIWFS4 Server      
                        Der Server bucht die Daten in eine Vordatenbank     
                        Von da werden diese über eine Hauptdatenbank zur    
                        die AUDI-FAZIT Datenbank gesendet.                  
                        PIN und KEY können mit r_seedkey generiert werden.  
    ------------------------------
4 VERSION
                                                          
            Versionsnummer                                                  
            Für AUDIWFS4 ist zur Zeit nur 01 implementiert                  
    ------------------------------
5 MODE
                                                             
            Art der Aktion.                                                 
            SEND: Daten zum Server senden                                   
    ------------------------------
6 PS_STRING1
                                                       
            AUDIWFS4: SN,0 von KUNDDAT                                      
    ------------------------------
7 PS_STRING2
                                                       
            AUDIWFS4: PIN 4 Zeichen Hexstring  (2 Bytes)                    
    ------------------------------
8 PS_STRING3
                                                       
            AUDIWFS3: KEY 14 Zeichen Hexstring (7 Bytes)                    
    ------------------------------
9 PS_STRING4
                                                       
            AUDIWFS4: Baugruppennummer der Hardware TTNR                    
    ------------------------------
10 PS_STRING5
                                                      
            AUDIWFS5: Baugruppennummer der Seriennummer                     
    ------------------------------
11 PS_STRING6
                                                       
            AUDIWFS6: Typteilenummer                                        
    ------------------------------
12 PS_STRING7
                                                       
            AUDIWFS7: Containerkennung                                      
    ------------------------------
13 PS_STRING8
                                                       
            AUDIWFS8: Leer                                                  
    ------------------------------
14 PS_STRING9
                                                       
            AUDIWFS9: Leer                                                  
    ------------------------------
15 PS_STRING10
                                                      
            AUDIWFS10: Leer                                                 
    ------------------------------
16 R_ERGEBNIS
                                                       
            Ergebnis. Kann mit GAUDI-Variable gelesen werden                
    ------------------------------
17 ERRORSTRING
                                                      
            Fehlerstring bei Fehler                                         
    ------------------------------
18 ERRORFLAG
                                                        
            := 0 Kein Fehler                                                
            := 1 Fehler                                                     
                                                                            
                                                                            
 Input:  Zeiger auf den relevanten "Wert" einer Zeile der                   
         expandierten Pruefliste;                                           
         Index im entsprechenden Speicherbereich fuer                       
         Moduldaten;                                                        
         Anzahl der Modulparameter;                                         
                                                                            
 Output: none                                                               
                                                                            
 ----------------------------------------------------------                 
 Return Value:                                                              
    = 0:    Successful completion                                           
     -1:    bei Ueberschreitung der Gesamtlaenge von 80 Zeichen;            
                                                                            
 ----------------------------------------------------------                 
 Beispiel (optional):                                                       
                                                                            
 <\userdoc> 
 ----------------------------------------------------------                 
 C4                                                                         
int r_pam2server( shm_stringpointer *zeilen_wert, long index1, long anzahl_parameter )
{
	static char ident[] = "@(#)$Id: r_pam2server.C,v 1.6 2003/05/19 08:33:48 sgc3sa Exp $";
    const int par_errstring      = 16;
    const int par_errflag        = 17;
	
	
	 Lokale Variablen 	
	char         auftrag[80];         // auftrag der ueber Messagequeue versendet wird
	char         quittung[80];        // Quittung auf Auftrag
	unsigned     auftrag_len;         // Laenge Auftrag String
	unsigned     quittung_len = 80;   // Laenge Quittungsstring
	int          error;               // return von msg_send_wait
	long         msgstat;
	long         hispnr;
	long         schritt;
	int          revision = 1;
	
	
	 Schrittbetriebshandler 	
	schritt = schrittbetrieb(zeilen_wert,index1);
	if (schritt!=1) {
		return 0;
	}
	
	 Modulstatus setzen 	
	Ssp_ss->progs[G_mypnr].status = 1;         // Testdatenladen laeuft
	
	 Revision bestimmen 	
	revision = 1;

	// Fehlerflag abfragen
	if ( Ssp_vi->multi[Ssp_vi->test.multiindex].error != 0 ||
		 Ssp_vi->multi[Ssp_vi->test.multiindex].abbruch != 0 ) {
		strcpy(Ssp_ss->progs[G_mypnr].result,JOB_RESULT_GOOD);
		if ( *Ssp_expand_wert->ptr[index1+par_errflag] != "-" )
		{
			*Ssp_expand_wert->ptr[index1+par_errflag] = "0";
		}
		if ( *Ssp_expand_wert->ptr[index1+par_errstring] != "-" )
		{
		   STRING hilf2 = "Not executed";
		   *Ssp_expand_wert->ptr[index1+par_errstring] = hilf2;
		}
		return 0;
	}

	 Message an seedkey 	
	sprintf(auftrag,"INDEX=%d;REVISION=%d;MODUL=PAM2SERVER;", index1, revision );
	auftrag_len = strlen (auftrag) + 1;
	error =  msg_send_wait (SK_SEEDKEY,
							auftrag, auftrag_len,-1,200,
							quittung, &quittung_len,&msgstat,&hispnr);
	
	 Fehlerbehandlung msg_send_wait 	
	if (error!=0) {
		 Fehlermeldung 		
//		error_message (ERR_ERROR, HEADER, __LINE__, "Fehler Aufruf msg_send_wait" );
		error_message (ERR_ERROR, HEADER, __LINE__, "Error calling msg_send_wait" );
		return -1;
	}
	else  {
		 Quittung ausgeben 		
		debug_message(__FILE__,__LINE__,2,"r_pam2server> quittung = %s\n", quittung );
	}
	 Timeout Behandlung 	
	if (msgstat & MSG_R_TIMEOUT) {
		 Fehlertext 		
		ccl_befehl( Ssp_ss->progs[G_mypnr].result, JOB_RESULT, ERROR, RESULT_MAX );
		
		strcat(Ssp_ss->progs[G_mypnr].result,JOB_ERRSTR);
		strcat(Ssp_ss->progs[G_mypnr].result,SEP_GLEICH);
		strcat(Ssp_ss->progs[G_mypnr].result,"Timeout-SK");
		strcat(Ssp_ss->progs[G_mypnr].result,SEP_SEMIKOLON);
		
		return -1;   // Timeout --> Fehler
	}
	
	
	 JOB RESULT 	
	if ( strstr(quittung,JOB_RESULT_ERROR) ) {
		strcpy(Ssp_ss->progs[G_mypnr].result,JOB_RESULT_ERROR);
		strcat(Ssp_ss->progs[G_mypnr].result,JOB_ERRSTR);
		strcat(Ssp_ss->progs[G_mypnr].result,SEP_GLEICH);
		strcat(Ssp_ss->progs[G_mypnr].result,"SK: ");
		
		char *semi = strchr(quittung,';');
		
		if ( semi ) {
			int len = strlen(semi+1);
			if ( len + 5 + strlen(Ssp_ss->progs[G_mypnr].result) >= RESULT_MAX ) {
				len = RESULT_MAX - strlen(Ssp_ss->progs[G_mypnr].result) - 6;
			}
			strncat(Ssp_ss->progs[G_mypnr].result, semi+1, len );
		}
		else  {
			strcat(Ssp_ss->progs[G_mypnr].result, "unknown" );
		}
		strcat(Ssp_ss->progs[G_mypnr].result,SEP_SEMIKOLON);
		return -1;
	}
	return 0;
}