CCS Modul   B_DRUCKEN
 
 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 Ûbergabeparameter 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                                              
 <\userdoc> 
                                                                             
 Input:                                                                      
                                                                             
 zeilen_info                                                                 
 zeilen_wert                                                                 
 index1                                                                      
 anzahl                                                                      
                                                                             
 Output:                                                                     
    none                                                                     
                                                                             
 ----------------------------------------------------------                  
 Return Value:                                                               
    = 0:    Successful completion                                            
                                                                             
 ----------------------------------------------------------                  
 Beispiel (optional):                                                        
                                                                             
 ----------------------------------------------------------                  
 History:                                                                    
    $Log: b_drucken.C,v $
    Revision 1.3  2003/04/17 09:36:01  wiese
    $Head -> $Id wegen log_message

 *    Revision 1.2  2003/02/24 12:46:00  keppler
 *    Translated to English
 *
 *    Revision 1.1  2002/03/26 08:15:09  sgc3sa
 *    Anpassungen fuer QT fuer Vectorinterpreter
 *
 *    Revision 1.9  2002/03/25 12:34:32  juilfs
 *    QT
 *
 *    Revision 1.8  2002/01/24 16:11:42  KLM3SA
 *    userdoc for html-page implemented
 *
 *    Revision 1.7  2001/11/23 07:49:04  sgc3sa
 *    BC ausschaltbar mit is_spspam = BC:OFF
 *
 *    Revision 1.6  2000/02/16 12:17:02  klm3sa
 *    *** empty log message ***
 *
 *    Revision 1.5  2000/02/15 10:40:30  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/21 (Stelzig, DCS)                                    
    Anpassung an neuen Syscom                                                
    Revision 1.0  96/11/11 (Stelzig, DCS)                                    
    Erstellt                                                                 
                                                                             
 ----------------------------------------------------------                  
 C4                                                                          
int b_drucken( shm_stringpointer *zeilen_wert, long index1, long anzahl)
{
	static char ident[] = "@(#)$Id: b_drucken.C,v 1.3 2003/04/17 09:36:01 wiese Exp $";
	
	
	 Lokale Variablen 	
	long         j1;                  // Laufvariable fÏr 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=DRUCKEN;", 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_drucken> 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;
}