CCS Modul   B_INIT
 
 Funktionsbeschreibung:                                                      
    Anzahl der Uebergabeparameter und Index der expandierten                 
    Pruefliste im Platz BARCODE_UNIT ablegen. Der Prozess                    
    BC_DRUCKEN greift spaeter auf diese beiden Parameter zu und              
    kopiert die Uebergabeparameter in die lokalen Arrays                     
                                                                             
    Beschreibung der Moduluebergabeparameter:
1 PRUEFSCHRITT
                                                       
         GAUDI Pruefschritt                                                  
    ------------------------------
2 POSITION
                                                           
         PAV- Position                                                       
    ------------------------------
3 MULTIFUNKTIONSCODE
                                                 
         Wird nicht nicht gebraucht                                          
    ------------------------------
4 TYPENSCHILD
                                                        
         Name des Typenschildes                                              
    ------------------------------
5 TYPENSCHILDNUMMER
                                                  
         Nummer des Typenschildes                                            
    ------------------------------
6 DRUCKERDEVICE
                                                      
         Drucker: DRUCKER1, DRUCKER2, DRUCKER3                               
 <\userdoc> 
                                                                             
 Input:                                                                      
                                                                             
 zeilen_info                                                                 
 zeilen_wert                                                                 
 index1                                                                      
 anzahl                                                                      
                                                                             
 Output:                                                                     
    none                                                                     
                                                                             
 ----------------------------------------------------------                  
 Return Value:                                                               
    = 0:    Successful completion                                            
                                                                             
 ----------------------------------------------------------                  
 Beispiel (optional):                                                        
                                                                             
 ----------------------------------------------------------                  
 History:                                                                    
    $Log: b_init.C,v $
    Revision 1.3  2003/04/17 09:36:02  wiese
    $Head -> $Id wegen log_message

 *    Revision 1.2  2003/02/24 12:46:48  keppler
 *    Translated to English
 *
 *    Revision 1.1  2002/03/26 08:15:04  sgc3sa
 *    Anpassungen fuer QT fuer Vectorinterpreter
 *
 *    Revision 1.9  2002/03/25 12:34:31  juilfs
 *    QT
 *
 *    Revision 1.8  2002/01/24 16:11:51  KLM3SA
 *    userdoc for html-page implemented
 *
 *    Revision 1.7  2001/11/23 07:48:53  sgc3sa
 *    BC ausschaltbar mit is_spspam = BC:OFF
 *
 *    Revision 1.6  2000/02/16 12:16:47  klm3sa
 *    *** empty log message ***
 *
 *    Revision 1.5  2000/02/15 10:41:22  KLM3SA
 *    Sourcen aus testsystem_21 kopiert.
 *                                                       
    Revision 7.1  99/10/28  sgc3sa (Stelzig, DCS)                            
    Abkuerzung FO fuer FORCE eingefuehrt                                     
    Revision 7.0  99/08/24  sadcsst (Stelzig, DCS)                           
    Wenn in GAUDI-Parameter QString FORCE vorkommt, dann                      
    wird bei error oder abbruch Normalerauftrag an                           
    barcode_ccs geschickt.                                                   
    Revision 6.4  98/10/23  sadcsst (Stelzig, DCS)                           
    Buffergroesse fuer Kommunikation mit bc_drucken                          
    Revision 6.3  98/09/15  sadcsst (Stelzig, DCS)                           
    Ssp_vi->sg_marking & MARK_BARCODE wird abgefragt                         
    Revision 2.2  97/10/17  sadcsst (Stelzig, DCS)                           
 JOB_RESULT=GOOD wird nicht mehr in Syscom als Result zurueck    geschrieben 
    Revision 2.1  98/09/24 (Stelzig, DCS)                                    
    Wenn Error und Abbruch Handling in vorherigen Pruefschritt               
      dann Return 0                                                          
    Wenn JOB_RESULT=ERROR, dann wird Prueliste abgebrochen                   
    Revision 2.0  97/04/22 (Stelzig, DCS)                                    
    Anpassung an neuen Syscom                                                
    Revision 1.0  96/11/11 (Stelzig, DCS)                                    
    Erstellt                                                                 
                                                                             
 ----------------------------------------------------------                  
 C4                                                                          
int b_init( shm_stringpointer *zeilen_wert, long index1, long anzahl)
{
	static char ident[] = "@(#)$Id: b_init.C,v 1.3 2003/04/17 09:36:02 wiese Exp $";
	
	
	 Lokale Variablen 	
	long         j1;                  // Laufvariable fuer Parameteruebergabe
	char         auftrag[80];         // auftrag der ueber Messagequeue versendet wird
	char         quittung[160];       // Quittung auf Auftrag
	unsigned     auftrag_len;         // Laenge Auftrag QString
	unsigned     quittung_len = 160;  // Laenge Quittungsstring
	int          error;               // return von msg_send_wait
	long         msgstat;
	long         hispnr;
	long         schritt;
	
	
	 Schrittbetriebshandler 	
	schritt = schrittbetrieb(zeilen_wert,index1);
	
	if (schritt!=1) {
		return 0;
	}
	
	// Testen, ob Barcode gedruckt werden soll
	if ( strcmp( Ssp_vi->job.liststate, PREINT ) ) {
	    int len = strlen("BC:OFF");
	    char* pos = strstr( &Ssp_te->pruef.is_spspam[0], "BC:OFF" );
	    if ( pos && pos > Ssp_te->pruef.is_spspam && pos[-1] != ',' ) pos = 0;
	    if ( pos && pos[len] != ',' && pos[len] != '\0' ) pos = 0;
	    if ( pos ) {
		 Daten an Messdatensammler senden 	
		send_string_to_md( JOB_RESULT_GOOD "Barcode von SPS ausgeschaltet", MODULNAME,
		     *zeilen_wert->ptr[index1 + 0], *zeilen_wert->ptr[index1 + 1] );
		return 0;
	    }
	}
	
	 Feststellen, ob FORCE-Mode 	
	QString multifunk         = (const char*) *Ssp_expand_wert->ptr[ index1 + 2 ];
	
	int multifunk_index      = multifunk.find("FORCE");
	int multifunk_index_next = multifunk_index + strlen("FORCE");
	
	if ( multifunk_index < 0 ) {
		multifunk_index      = multifunk.find("FO");
		multifunk_index_next = multifunk_index + strlen("FO");
	
	}
	if ( multifunk.length() >= multifunk_index_next ) {
		multifunk_index_next = -1;
	
	}
	int force = 0;
	
	if ( multifunk_index >= 0 ) {
		if ( multifunk_index == 0 ||
		    (multifunk[multifunk_index-1] == ' ' || multifunk[multifunk_index-1] == ',') ) {
			if ( multifunk_index_next < 0 ||
			     multifunk[multifunk_index_next] == ' ' ||
			     multifunk[multifunk_index_next] == ',' ) {
				force = 1;
			
			}
		}
	}
	
	 Message an bc_drucken 	
	if ( !force && Ssp_vi->multi[Ssp_vi->test.multiindex].error   != 0 ) {
		sprintf( auftrag, "INDEX=%i;AUFTRAG=ERROR;", index1 );
	
	}
	else if ( !force && Ssp_vi->multi[Ssp_vi->test.multiindex].abbruch != 0 ) {
		sprintf( auftrag, "INDEX=%i;AUFTRAG=ABBRUCH;", index1 );
	
	}
	else  {
		sprintf( auftrag, "INDEX=%i;AUFTRAG=INIT;", index1 );
	
	}
	auftrag_len = strlen (auftrag) + 1;
	
	error =  msg_send_wait (BC_DRUCKEN,
	                        auftrag, auftrag_len,-1,160,
	                        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,"b_init> 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-BC");
		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,"BC: ");
		
		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;
	
	}
	
	 Daten an Messdatensammler senden 	
	send_string_to_md( quittung, MODULNAME, *zeilen_wert->ptr[index1 + 0], *zeilen_wert->ptr[index1 + 1] );
	
	return 0;
	
	 -End of file---------------------------------------------------------
	   Historie:
	  

}