Netcompo アプリケーション会話サービス 2.1 LU0会話サービス編 - Solaris -
目次 索引 前ページ次ページ

上へ付録A アプリケーションプログラム例

A.1 同期型アプリケーションの例

/*====================================================================* 
 *     アプリケーションプログラム例  1                               *
 *                                                                    *
 *         (1)  main     :  メイン処理(同期型)                      *
 *         (2)  procend  :  プロセス終了処理                          *
 *                                                                    *
 *====================================================================*/

#include  <sys/types.h>
#include  <stdio.h>
#include  <memory.h>
#include  <signal.h>
#include  <errno.h>

#include  "lu0.h"

/*---------------------------------------------*/
/*      外部参照モジュール                     */
/*---------------------------------------------*/
/*=============  出口関数  ====================*/
extern  void    rcvalrm();                      /* タイマ用           */
extern  void    rcvsig();                       /* ユーザ・シグナル用 */
extern  void    rcvend();                       /* プログラム終了用   */

/*---------------------------------------------*/
/*      エントリモジュール                     */
/*---------------------------------------------*/

void    main();
void    procend();

/*---------------------------------------------*/
/*      ローカル定義                           */
/*---------------------------------------------*/

#define NORMAL  0                             /* マクロ命令復帰値正常 */

/*====================================================================*
 *      function name  :  (1) main                                    *
 *      function       :  メイン処理(同期型)                        *
 *====================================================================*/
void
main()

{     
     struct  sigaction  act;                  /* sigaction用パラメタ  */
     struct  lu0rb      rcb;                  /* rcb               */
     struct  lu0rb     *rcbp;                 /* rcbポインタ       */
     char              *wbufp;                /* 送信バッファポインタ */
     char              *rbufp;                /* 受信バッファポインタ */
     int                rcvdfd;               /* 受信用パイプfd退避域 */
     int                dc;                   /* 送信データ作成用     */

     setbuf( stdout, 0 );
/*=============================================*/
/*   タイマ出口関数登録                        */
/*=============================================*/
     act.sa_handler  =  rcvalrm;              /*                  
     *((int *)(&act.sa_mask))  =  SIGALRM;    /* アラーム・クロック   */
     act.sa_flags  =  NULL;                   /*                      */
     sigaction( SIGALRM, &act, NULL );        /*                      */

/*=============================================*/
/*   シグナル出口関数登録                      */
/*=============================================*/

     signal( SIGUSR1, rcvsig );               /* ユーザ・シグナル1   */
     signal( SIGUSR2, rcvsig );               /* ユーザ・シグナル2   */

     signal( SIGTERM, rcvend );               /* 終了シグナル         */
     signal( SIGBUS,  rcvend );               /* バスエラー           */
     signal( SIGQUIT, rcvend );               /* 中止                 */
     signal( SIGHUP,  rcvend );               /* ハングアップ         */
     signal( SIGINT,  rcvend );               /* 割込み               */
     signal( SIGSEGV, rcvend );               /* セグメントエラー     */

     rcbp  =  &rcb;                           /* rcbアドレス設定   */
     memset( rcbp, 0, sizeof(struct lu0rb) ); /* rcb域クリア       */

/*=============================================*/
/*   lu0open マクロ処理                 */
/*   <<< アプリ登録 >>>                        */
/*=============================================*/

     strcpy( rcbp->l_unit, "lu02" );          /* LU名設定           */
     
     if( lu0open( rcbp )  !=  NORMAL )       /* lu0open正常?       */
     {                                        /*                      */
   printf( "lu0open NG %d \n", rcbp->l_cplt);
          return;                             /* no ->  < 異常終了 >  */
     }                                        /*                      */
   printf( "lu0open OK %d \n", rcbp->l_cplt);


/*=============================================*/
/*   lu0getbマクロ処理                  */
/*   <<< 送信バッファ獲得 >>>                  */
/*=============================================*/

     rcbp->l_bfsiz  =  12288;                 /* 獲得サイズ設定 (12K) */

     if( lu0getb( rcbp )  !=  NORMAL )        /* lu0getb正常?        */
     {                                        /*                      */
          procend( rcbp );                    /* no ---> 終了処理     */
          return;                             /* < 異常終了 >         */
     }                                        /*                      */
     wbufp  =  rcbp->l_bufadr;                /* バッファアドレス退避 */
   printf( "lu0getb OK %d \n", rcbp->l_cplt);

/*=============================================*/
/*   lu0getbマクロ処理                  */
/*   <<< 受信バッファ獲得 >>>                  */
/*=============================================*/

     rcbp->l_bfsiz  =  12288;                 /* 獲得サイズ設定 (12K) */

     if( lu0getb( rcbp )  !=  NORMAL )        /* lu0getb正常?        */
     {                                        /*                      */
          procend( rcbp );                    /* no ---> 終了処理     */
          return;                             /* < 異常終了 >         */
     }                                        /*                      */
     rbufp  =  rcbp->l_bufadr;                /* バッファアドレス退避 */
   printf( "lu0getb OK %d \n", rcbp->l_cplt);

/*=============================================*/
/*   lu0cnctマクロ処理                  */
/*   <<< セション確立 >>>                      */
/*=============================================*/
     
     rcbp->l_mode    =  LU0CACC;              /* ホスト主導型         */
     rcbp->l_rbfp    =  rbufp;                /* 受信バッファアドレス */
     rcbp->l_amode   =  CTLCD;                /* 送信権獲得制御あり   */
     rcbp->l_time    =  60;                   /* タイマ60秒         */
     rcbp->l_cmd1    =  SSCPNTC;              /* SSCPデータ通知有 */
     rcbp->l_cmd2    =  RESPRQT1;             /* タイプ1応答要求     */
     rcbp->l_aplmx   =  12288;                /* 最大利用者データ長12K*/

   printf( "lu0cnct start \n");
     if( lu0cnct( rcbp )  !=  NORMAL )        /* lu0cnct正常?        */
     {                                        /*                      */
   printf( "lu0cnct NG %d \n", rcbp->l_cplt,rcbp->l_errdtl);
          procend( rcbp );                    /* no ---> 終了処理     */
          return;                             /* < 異常終了 >         */
     }                                        /*                      */
   printf( "lu0cnct OK %d \n", rcbp->l_cplt);

/*=============================================*/
/*   lu0checkマクロ処理                */
/*   <<< 受信状態の問い合わせ >>>              */
/*=============================================*/
     
     if( lu0check( rcbp )  !=  NORMAL )       /* lu0check正常?       */
     {                                        /*                      */
   printf( "lu0chek NG %d \n", rcbp->l_cplt,rcbp->l_errdtl);
          procend( rcbp );                    /* no ---> 終了処理     */
          return;                             /* < 異常終了 >         */
     }                                        /*                      */
     rcbp->l_time    =  60;                   /* タイマ値設定         */
     if( rcbp->l_cplt  ==  ELU0RCV )          /* 受信データあり ?    */
     {                                        /*                      */
          rcbp->l_time  =  0;                 /* yes -> タイマ値再設定*/
     }                                        /*                      */
   printf( "lu0chek OK %d \n", rcbp->l_cplt,rcbp->l_errdtl);

/*=============================================*/
/*   lu0readマクロ処理                  */
/*   <<< データ受信 >>>                        */
/*=============================================*/
     
     rcbp->l_rbfp    =  rbufp;                /*                      */

     if( lu0read( rcbp )  !=  NORMAL )        /* lu0read 正常?       */
     {                                        /*                      */
   printf( "lu0read NG %d \n", rcbp->l_cplt,rcbp->l_errdtl);
          procend( rcbp );                    /* no ---> 終了処理     */
          return;                             /* < 異常終了 >         */
     }                                        /*                      */
   printf( "lu0read OK %d \n", rcbp->l_cplt,rcbp->l_errdtl);

/*=============================================*/
/*   lu0writeマクロ処理                */
/*   <<< データ送信 >>>                        */
/*=============================================*/
     
     rcbp->l_wcmd    =  L_DATA;               /* データ送信指定       */
     rcbp->l_wrmd1   =  CD;                   /* 送信権獲得制御あり   */
     rcbp->l_wlng    =  512;                  /* 送信データ長設定     */
     rcbp->l_wbfp    =  wbufp;                /*                      */
     
     for( dc = 0 ; dc < 512 ; dc++, wbufp++)  /* A                    */
     {                                        /* |  送信データ設定    */
          *wbufp  =  dc;                      /* V                    */
     }                                        /*                      */

     if( lu0write( rcbp )  !=  NORMAL )       /* lu0write正常?       */
     {                                        /*                      */
          procend( rcbp );                    /* no ---> 終了処理     */
          return;                             /* < 異常終了 >         */
     }                                        /*                      */

/*=============================================*/
/*   lu0discマクロ処理                  */
/*   <<< セション解放 >>>                      */
/*=============================================*/
     

     if( lu0disc( rcbp )  !=  NORMAL )        /* lu0disc 正常?       */
     {                                        /*                      */
          procend( rcbp );                    /* no ---> 終了処理     */
          return;                             /* < 異常終了 >         */
     }                                        /*                      */

/*=============================================*/
/*   lu0frebマクロ処理                  */
/*   <<< 送信バッファ解放 >>>                  */
/*=============================================*/
     
     rcbp->l_bufadr  =  wbufp;                /*                
     lu0freb( rcbp );                         /* lu0freb発行          */

/*=============================================*/
/*   lu0frebマクロ処理                  */
/*   <<< 受信バッファ解放 >>>                  */
/*=============================================*/
     
     rcbp->l_bufadr  =  rbufp;                /*                
     lu0freb( rcbp );                         /* lu0freb発行          */

/*=============================================*/
/*   lu0closeマクロ処理                */
/*   <<< アプリ登録抹消 >>>                    */
/*=============================================*/
     
     lu0close( rcbp );                        /* lu0close発行         */
                                              /*                      */
     return;                                  /* < 正常終了 >         */
}                                             /*                      */

/*====================================================================*
 *      function name  :  (2) procend                                 *
 *      function       :  プロセス終了処理                            *
 *====================================================================*/
void
procend( rcbp )
struct lu0rb *rcbp;

{                                             /*                      */
/*=============================================*/
/*   lu0closeマクロ処理                */
/*   <<< アプリ登録抹消 >>>                    */
/*=============================================*/
     
     printf( "macro %x NG %d \n", rcbp->l_cplt , rcbp->l_mcode);
     lu0close( rcbp );                        /* lu0close発行         */
                                              /*                      */
     return;                                  /*                      */
}                                             /*                      */

目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2002