home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 April / VPR0104A.BIN / DRIVER / IODATA / RSDV120 / rsdv120.exe / DISK.EXE / DOS / DRVSAMP.C < prev    next >
Text File  |  1995-02-17  |  8KB  |  334 lines

  1. /*
  2. /*  ドライバ使用サンプルプログラム
  3. /*  Copyright (C) 1995 I-O DATA DEVICE,INC
  4. /*
  5. /*    記述言語:Microsoft (R) C Compiler  Version 6.00
  6. /*
  7. /*
  8. /*    1995.02.17 Ver1.00
  9. /*
  10. /*
  11. /*    [注意]
  12. /*
  13. /*     ・BIOSとドライバ(COMA)を組み込んでください。
  14. /*     ・ラージメモリモデルでコンパイルしてください。
  15. /*        cl /AL /J drvsamp.c
  16. /*
  17. /*/
  18. #include <stdio.h>
  19. #include <dos.h>
  20. #include <conio.h>
  21.  
  22.  
  23.  
  24.  
  25. main() {
  26.  
  27.     /* RsIn();        /* Cの関数を使用した受信 */
  28.     /* RsOut();        /* Cの関数を使用した送信 */
  29.  
  30.     /* HandleGet();        /* ハンドルを得る */
  31.     /* DrvRx();        /* 受信 */
  32.     /* DrvTx();        /* 送信    */
  33.     /* BiosStsGet();    /* BIOSの回線情報を得る */
  34.     /* BiosCall_6();    /* BIOSのファンクションを実行する */
  35. }
  36.  
  37.  
  38.  
  39.  
  40. /****************************************************************/
  41. /*  Cの関数を使用した受信                    */
  42. /*                                */
  43. /*                                */
  44. /*                                */
  45. /*                                */
  46. /****************************************************************/
  47. RsIn() {
  48.  
  49.     int c;
  50.     FILE *fp;
  51.  
  52.     if((fp=fopen("COMA","r"))==NULL)
  53.         fprintf(stderr,"オープンできません\n");
  54.     else {
  55.         while((c=getc(fp))!=EOF)
  56.             putchar(c);
  57.         fclose(fp);
  58.     }
  59. }
  60.  
  61.  
  62.  
  63.  
  64. /****************************************************************/
  65. /*  Cの関数を使用した送信                    */
  66. /*                                */
  67. /*                                */
  68. /*                                */
  69. /*                                */
  70. /****************************************************************/
  71. RsOut() {
  72.  
  73.     static char buf[10+1]="RSA-98****";
  74.     int i;
  75.     FILE *fp;
  76.  
  77.     if((fp=fopen("COMA","w"))==NULL)
  78.         fprintf(stderr,"オープンできません\n");
  79.     else {
  80.         for(i=0;i<10;i++)
  81.             putc(buf[i],fp);
  82.  
  83.         fclose(fp);
  84.     }
  85. }
  86.  
  87.  
  88.  
  89.  
  90. /****************************************************************/
  91. /*  ハンドルを得る                        */
  92. /*                                */
  93. /*                                */
  94. /*                                */
  95. /*                                */
  96. /****************************************************************/
  97. HandleGet() {
  98.  
  99.     static char buf[4+1]="COMA";
  100.     union REGS inregs,outregs;
  101.     struct SREGS segregs;
  102.     FILE *fp;
  103.     unsigned long li;
  104.  
  105.     inregs.h.ah=0x3d;
  106.     inregs.h.al=0x02;
  107.     li=(unsigned long)buf;
  108.     inregs.x.dx=li;
  109.     segregs.ds=li>>16;
  110.  
  111.     intdosx(&inregs,&outregs,&segregs);
  112.  
  113.     if(outregs.x.cflag)
  114.         printf("err:ax=%d\n",outregs.x.ax);
  115.     else {
  116.         printf("\nハンドル:%d\n",outregs.x.ax);
  117.  
  118.         inregs.h.ah=0x3e;
  119.         inregs.x.bx=outregs.x.ax;
  120.         intdosx(&inregs,&outregs,&segregs);
  121.     }
  122. }
  123.  
  124.  
  125.  
  126.  
  127. /****************************************************************/
  128. /*  受信                            */
  129. /*                                */
  130. /*                                */
  131. /*                                */
  132. /*                                */
  133. /****************************************************************/
  134. DrvRx() {
  135.  
  136.     char buf[10+1];
  137.     union REGS inregs,outregs;
  138.     struct SREGS segregs;
  139.     FILE *fp;
  140.     unsigned long li;
  141.  
  142.     buf[10]='\0';
  143.  
  144.     if((fp=fopen("COMA","r"))==NULL)
  145.         fprintf(stderr,"オープンできません\n");
  146.     else {
  147.         inregs.h.ah=0x3f;
  148.         inregs.x.bx=fileno(fp);
  149.         inregs.x.cx=10;
  150.         li=(unsigned long)buf;
  151.         inregs.x.dx=li;
  152.         segregs.ds=li>>16;
  153.  
  154.         intdosx(&inregs,&outregs,&segregs);
  155.  
  156.         if(outregs.x.cflag)
  157.             printf("err:ax=%d\n",outregs.x.ax);
  158.         else {
  159.             printf("受信キャラクタ数:%d\n",outregs.x.ax);
  160.             printf("受信文字列   :%s\n",buf);
  161.         }
  162.  
  163.         fclose(fp);
  164.     }
  165. }
  166.  
  167.  
  168.  
  169.  
  170. /****************************************************************/
  171. /*  送信                            */
  172. /*                                */
  173. /*                                */
  174. /*                                */
  175. /*                                */
  176. /****************************************************************/
  177. DrvTx() {
  178.  
  179.     static char buf[10+1]="RSA-98****";
  180.     union REGS inregs,outregs;
  181.     struct SREGS segregs;
  182.     FILE *fp;
  183.     unsigned long li;
  184.  
  185.     if((fp=fopen("COMA","w"))==NULL)
  186.         fprintf(stderr,"オープンできません\n");
  187.     else {
  188.         inregs.h.ah=0x40;
  189.         inregs.x.bx=fileno(fp);
  190.         inregs.x.cx=10;
  191.         li=(unsigned long)buf;
  192.         inregs.x.dx=li;
  193.         segregs.ds=li>>16;
  194.  
  195.         intdosx(&inregs,&outregs,&segregs);
  196.  
  197.         if(outregs.x.cflag)
  198.             printf("err:ax=%d\n",outregs.x.ax);
  199.         else
  200.             printf("送信キャラクタ数:%d\n",outregs.x.ax);
  201.  
  202.         fclose(fp);
  203.     }
  204. }
  205.  
  206.  
  207.  
  208.  
  209. /****************************************************************/
  210. /*  BIOSの回線情報を得る                    */
  211. /*                                */
  212. /*                                */
  213. /*                                */
  214. /*                                */
  215. /****************************************************************/
  216. typedef struct {
  217.     unsigned char openlineno;    /* 回線番号 */
  218.     unsigned char fncint;        /* ソフトウェア割り込み番号 */
  219.     unsigned int baseadr;        /* ベースI/Oアドレス */
  220.     unsigned int reserve1;        /* 9032B 互換のためのリザーブ1 */
  221.     unsigned int reserve2;        /* 9032B 互換のためのリザーブ2 */
  222.     unsigned char mode;        /* 通信モード */
  223.     unsigned char bps;        /* ボーレート */
  224.     unsigned int (*rxbuf)[];    /* 受信バッファアドレス */
  225.     unsigned int rxbuflen;        /* 受信バッファ長 */
  226.     unsigned int txtim;        /* 送信タイムアウト時間 */
  227.     unsigned int rxtim;        /* 受信タイムアウト時間 */
  228.     void (*rxcall)();        /* 受信通知アドレス */
  229.     unsigned char intno;        /* INT割り込み番号 0~6 */
  230.     unsigned char timercount;    /* タイマカウントの設定 1~0ffh (1=1.25ms) */
  231. } BiosStatus;
  232.  
  233. BiosStsGet() {
  234.  
  235.     BiosStatus buf;
  236.     union REGS inregs,outregs;
  237.     struct SREGS segregs;
  238.     FILE *fp;
  239.     unsigned long li;
  240.  
  241.     if((fp=fopen("COMA","r"))==NULL)
  242.         fprintf(stderr,"オープンできません\n");
  243.     else {
  244.         inregs.h.ah=0x44;
  245.         inregs.h.al=0x02;
  246.         inregs.x.bx=fileno(fp);
  247.         inregs.x.cx=26;
  248.         li=(unsigned long)&buf;
  249.         inregs.x.dx=li;
  250.         segregs.ds=li>>16;
  251.  
  252.         intdosx(&inregs,&outregs,&segregs);
  253.  
  254.         printf("回線番号              :%d(10)\n",buf.openlineno);
  255.         printf("ソフトウェア割り込み番号      :%02x(16)\n",buf.fncint);
  256.         printf("ベースI/Oアドレス        :%04x(16)\n",buf.baseadr);
  257.         printf("通信モード             :%02x(16)\n",buf.mode);
  258.         printf("ボーレート             :%02x(16)\n",buf.bps);
  259.         printf("受信バッファアドレス        :%08lx(16)\n",(unsigned long)buf.rxbuf);
  260.         printf("受信バッファ長           :%d(10)\n",buf.rxbuflen);
  261.         printf("送信タイムアウト時間        :%d(10)\n",buf.txtim);
  262.         printf("受信タイムアウト時間        :%d(10)\n",buf.rxtim);
  263.         printf("受信通知アドレス          :%08lx(16)\n",(unsigned long)buf.rxcall);
  264.         printf("INT 割り込み番号          :%d(10)\n",buf.intno);
  265.         printf("受信タイマカウント(1=1.25ms)    :%d(10)\n",buf.timercount);
  266.  
  267.         fclose(fp);
  268.     }
  269. }
  270.  
  271.  
  272.  
  273.  
  274. /****************************************************************/
  275. /*  BIOSのファンクションを実行する                */
  276. /*                                */
  277. /*                                */
  278. /*    BIOSファンクション:6(回線ステータスの読み取り)    */
  279. /*                                */
  280. /****************************************************************/
  281. typedef union {
  282.     struct {
  283.         unsigned char ral;
  284.         unsigned char rah;
  285.         unsigned char rcl;
  286.         unsigned char rch;
  287.         unsigned char rdl;
  288.         unsigned char rdh;
  289.     } h;
  290.     struct {
  291.         unsigned int rax;
  292.         unsigned int rcx;
  293.         unsigned int rdx;
  294.         unsigned int rdi;
  295.         unsigned int res;
  296.     } x;
  297. } BiosPara;
  298.  
  299. BiosCall_6() {
  300.  
  301.     BiosPara buf;
  302.     union REGS inregs,outregs;
  303.     struct SREGS segregs;
  304.     FILE *fp;
  305.     unsigned long li;
  306.  
  307.     if((fp=fopen("COMA","r"))==NULL)
  308.         fprintf(stderr,"オープンできません\n");
  309.     else {
  310.         buf.h.rah=6;
  311.  
  312.         inregs.h.ah=0x44;
  313.         inregs.h.al=0x03;
  314.         inregs.x.bx=fileno(fp);
  315.         inregs.x.cx=10;
  316.         li=(unsigned long)&buf;
  317.         inregs.x.dx=li;
  318.         segregs.ds=li>>16;
  319.  
  320.         intdosx(&inregs,&outregs,&segregs);
  321.  
  322.         if(buf.h.rah)
  323.             printf("error:%d\n",(char)buf.h.rah);
  324.         else {
  325.             printf("モデム制御の状態          :%02x(16)\n",buf.h.rdl);
  326.             printf("Xon/Xoff 制御の状態        :%02x(16)\n",buf.h.rdh);
  327.             printf("ラインステータス          :%02x(16)\n",buf.h.rcl);
  328.             printf("モデムステータス          :%02x(16)\n",buf.h.rch);
  329.         }
  330.         fclose(fp);
  331.     }
  332. }
  333.  
  334.