C400

130. プリンターの応答メッセージの表示

仮想プリンタ・ドライバを製作しているときにプリンターの用紙替えの
メッセージを出力してその応答を受取りたい場合がある。
このような場合は QMHSNDM や QMHSNDPM で QMHRCVM や QMHRCVPM で
応答を受信すればよいかのように思えるが、実はちゃんと専用の
API : QSPSNDWM (赤字)がOS V3R7M0 から用意されている。

次はそのサンプル・ソースである。


[ TESTPRTM : サンプル・ソース ]

0001.00 #include                                                       
0002.00 #include                                                      
0003.00 #include                                                      
0004.00 #include                                                    
0005.00                                                                         
0006.00 #define TRUE         0                                                  
0007.00 #define FALSE       -1                                                  
0008.00 typedef struct {                                                        
0009.00    int  BYTESPRO;                                                       
0010.00    int  BYTESAVL;                                                       
0011.00    char MSGID[7];                                                       
0012.00    char RESRVD;                                                         
0013.00    char EXCPDATA[100];                                                  
0014.00 } ERRSTRUCTURE;     /* Define the error return structure            */  
0015.00 ERRSTRUCTURE  errcode;/* Error Code Structure for RCVMSG      */        
0016.00 typedef struct {                                                        
0017.00   char DEV[10];                                                         
0018.00   char OUTQ[10];                                                        
0019.00   char OUTLIB[10];                                                      
0020.00   char FormType[10];                                                    
0021.00   char WTR[10];                                                         
0022.00 } FORMMSG;                                                              
0023.00 FORMMSG formmsg;                                                        
0024.00 void ApiError(int LINE, ERRSTRUCTURE* errcode);                        
0025.00                                                                        
0026.00 void main(void){                                                       
0027.00   typedef struct {                                                     
0028.00     Qsp_SNDM0100_t sndm0100;                                           
0029.00     char Message_Reply_Text[132];                                      
0030.00   } SNDM0100;                                                          
0031.00   SNDM0100 sndm0100;                                                   
0032.00   char MSGFFLIB[21], msgdta[132], msgkey[4], WTRHNDL[16], reply[132];  
0033.00   int  msgdtalen, timeout = -1, ccsid = 65535, len;                    
0034.00                                                                        
0035.00   printf("** TESTPRTM :  プリンター・メッセージのテスト **n");        
0036.00   getchar();                                                           
0037.00                                                                        
0038.00   errcode.BYTESPRO = 160;                                              
0039.00   errcode.BYTESAVL = 0;                                                
0040.00   strcpy(MSGFFLIB, "QCPFMSG   QSYS      ");                            
0041.00   memcpy(formmsg.DEV,     "LPRDEV    ", 10);                           
0042.00   memcpy(formmsg.OUTQ,    "LPRDEV    ", 10);                           
0043.00   memcpy(formmsg.OUTLIB,  "QUSRSYS   ", 10);                           
0044.00   memcpy(formmsg.FormType,"*STD      ", 10);                           
0045.00   memcpy(formmsg.WTR,     "LPRDEV    ", 10);                           
0046.00   memcpy(msgdta, (char*)&formmsg, msgdtalen);                          
0047.00   msgdtalen = sizeof(msgdta);                                          
0048.00   QSPSNDWM(&sndm0100, sizeof(sndm0100), "SNDM0100", "CPA3394", MSGFFLIB,    
0049.00            msgdta, msgdtalen, "*INQ      ", timeout, msgkey, WTRHNDL, ccsid,
0050.00            &errcode);                                                       
0051.00   if(errcode.BYTESAVL != 0){/*APIERR*/                                      
0052.00     printf("[%d] APIERR MSGID = %sn", __LINE__, errcode.MSGID);            
0053.00     getchar();                                                              
0054.00     exit(-1);                                                               
0055.00   }/*APIERR*/                                                               
0056.00   printf("[%d] ** RETURNED MSG AS FOLLOWS **n", __LINE__);                 
0057.00   len = sndm0100.sndm0100.Len_Of_Msg_Reply_Text_Avail;                      
0058.00   memcpy(reply,  sndm0100.Message_Reply_Text, len);                         
0059.00   reply[len] = 0x00;                                                        
0060.00   printf("[%d] reply = [%s]n", __LINE__, reply);                           
0061.00   getchar();                                                                
0062.00 }