/***********************************************************************/ /* */ /* WRITERD : SpoolWTR Writer waiting server for Spool-Writer */ /* */ /* Office Quattro Co.ltd 2003.08.21 10:28:25 created */ /* this program will be waiting for OUTQ: */ /* */ /* create : CRTBNDC SPOOLWTR/WRITERD */ /* */ /***********************************************************************/ #include #include #include #include #include #include #include "QSYSINC/H/CMC" /* CPI-Communications pseudonyms */ #define TRUE 0 #define FALSE -1 char writer[11]; char cmn[4]; /* Communication Type */ char convid[9]; /* Coversation ID */ int sockid; char spool_inf[128]; /********************************************************************/ /* */ /* main : parm 1. writer[10] */ /* parm 2. cmn[1] (TCP or CPC) */ /* parm 3. convid[8] */ /* */ /********************************************************************/ void main(int argc, char *argv[]){ _Decimal(5,0) data_len = 120; _Decimal(5,0) wait = 1; char send_buffer[3000]; CM_INT32 send_length; unsigned char tcp_buffer[3004]; CM_INT32 request_to_send_received; CM_INT32 return_code; int len; typedef struct{ char job[11]; char user[11]; char jobnbr[7]; } JOBINFO; JOBINFO jobinfo; char spoolf[11]; int splnbr; typedef struct{ char outq[11]; char outqlib[11]; } OUTQINFO; OUTQINFO outqinfo; int bSpool; char rcv_buffer[4]; CM_INT32 requested_length; CM_INT32 data_received; CM_INT32 received_length; CM_INT32 status_received; /*-------------------------------------------------------------------*/ /* Copy the input parameters to local variables. */ /*-------------------------------------------------------------------*/ memset(writer, 0, sizeof(writer)); memcpy(writer, argv[1], 10); writer[10] = 0x00; memset(cmn, 0, sizeof(cmn)); memcpy(cmn, argv[2], 3); cmn[3] = 0x00; memset(convid, 0, sizeof(convid)); memcpy(convid, argv[3], 8); convid[8] = 0x00; sockid = atoi(convid); /*[ 1 秒間だけ待つ ]*/ QRCVDTAQ(writer, "QUSRTEMP ", &data_len, spool_inf, wait); if(data_len == 0 || strncmp(spool_inf, "*SPOOL ", 10) != 0){/* データなし */ bSpool = FALSE; memcpy(send_buffer,"CMOK", 4); }/* データなし */ else{/* データあり */ bSpool = TRUE; memcpy(send_buffer,"SPLF", 4); }/* データあり */ send_length = 4; if(cmn[0] == 'C'){/*( CPI-C )*/ CMSEND(convid, send_buffer, &send_length, &request_to_send_received, &return_code);} else{ memset(tcp_buffer, 0, sizeof(tcp_buffer)); memcpy(&tcp_buffer[0], &send_length, 4); memcpy(&tcp_buffer[4], send_buffer, send_length); len = send_length + 4; tcp_buffer[len] = 0x00; return_code = send(sockid, tcp_buffer, len, 0); } if(bSpool == FALSE) return; /* 以下はデータありの処理 */ /*[ 応答の受信 ... の開始 ]*/ if(cmn[0] == 'C'){/*( CPI-C )*/ requested_length = 4; CMRCV(convid, rcv_buffer, &requested_length, &data_received, &received_length, &status_received, &request_to_send_received, &return_code); }/*( CPI-C )*/ else{/*( TCP/IP )*/ recv(sockid, rcv_buffer, 4, 0); }/*( TCP/IP )*/ /*[ 応答の受信 ... の終了 ]*/ memcpy(jobinfo.job, &spool_inf[12], 10); jobinfo.job[10] = 0x00; memcpy(jobinfo.user, &spool_inf[22], 10); jobinfo.user[10] = 0x00; memcpy(jobinfo.jobnbr, &spool_inf[32], 6); jobinfo.jobnbr[6] = 0x00; memcpy(spoolf, &spool_inf[38], 10); spoolf[10] = 0x00; memcpy(&splnbr, &spool_inf[48], 4); memcpy(outqinfo.outq, &spool_inf[52], 10); outqinfo.outq[10] = 0x00; memcpy(outqinfo.outqlib, &spool_inf[62], 10); outqinfo.outqlib[10] = 0x00; send_length = sprintf(send_buffer,"%10s%10s%6s%10s%04d%10s%10s", jobinfo.job, jobinfo.user, jobinfo.jobnbr, spoolf, splnbr, outqinfo.outq, outqinfo.outqlib); if(cmn[0] == 'C'){/*( CPI-C )*/ CMSEND(convid, send_buffer, &send_length, &request_to_send_received, &return_code);} else{ memset(tcp_buffer, 0, sizeof(tcp_buffer)); memcpy(&tcp_buffer[0], &send_length, 4); memcpy(&tcp_buffer[4], send_buffer, send_length); len = send_length + 4; tcp_buffer[len] = 0x00; return_code = send(sockid, tcp_buffer, len, 0); } return; }