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 >
Wrap
Text File
|
1995-02-17
|
8KB
|
334 lines
/*
/* ドライバ使用サンプルプログラム
/* Copyright (C) 1995 I-O DATA DEVICE,INC
/*
/* 記述言語:Microsoft (R) C Compiler Version 6.00
/*
/*
/* 1995.02.17 Ver1.00
/*
/*
/* [注意]
/*
/* ・BIOSとドライバ(COMA)を組み込んでください。
/* ・ラージメモリモデルでコンパイルしてください。
/* cl /AL /J drvsamp.c
/*
/*/
#include <stdio.h>
#include <dos.h>
#include <conio.h>
main() {
/* RsIn(); /* Cの関数を使用した受信 */
/* RsOut(); /* Cの関数を使用した送信 */
/* HandleGet(); /* ハンドルを得る */
/* DrvRx(); /* 受信 */
/* DrvTx(); /* 送信 */
/* BiosStsGet(); /* BIOSの回線情報を得る */
/* BiosCall_6(); /* BIOSのファンクションを実行する */
}
/****************************************************************/
/* Cの関数を使用した受信 */
/* */
/* */
/* */
/* */
/****************************************************************/
RsIn() {
int c;
FILE *fp;
if((fp=fopen("COMA","r"))==NULL)
fprintf(stderr,"オープンできません\n");
else {
while((c=getc(fp))!=EOF)
putchar(c);
fclose(fp);
}
}
/****************************************************************/
/* Cの関数を使用した送信 */
/* */
/* */
/* */
/* */
/****************************************************************/
RsOut() {
static char buf[10+1]="RSA-98****";
int i;
FILE *fp;
if((fp=fopen("COMA","w"))==NULL)
fprintf(stderr,"オープンできません\n");
else {
for(i=0;i<10;i++)
putc(buf[i],fp);
fclose(fp);
}
}
/****************************************************************/
/* ハンドルを得る */
/* */
/* */
/* */
/* */
/****************************************************************/
HandleGet() {
static char buf[4+1]="COMA";
union REGS inregs,outregs;
struct SREGS segregs;
FILE *fp;
unsigned long li;
inregs.h.ah=0x3d;
inregs.h.al=0x02;
li=(unsigned long)buf;
inregs.x.dx=li;
segregs.ds=li>>16;
intdosx(&inregs,&outregs,&segregs);
if(outregs.x.cflag)
printf("err:ax=%d\n",outregs.x.ax);
else {
printf("\nハンドル:%d\n",outregs.x.ax);
inregs.h.ah=0x3e;
inregs.x.bx=outregs.x.ax;
intdosx(&inregs,&outregs,&segregs);
}
}
/****************************************************************/
/* 受信 */
/* */
/* */
/* */
/* */
/****************************************************************/
DrvRx() {
char buf[10+1];
union REGS inregs,outregs;
struct SREGS segregs;
FILE *fp;
unsigned long li;
buf[10]='\0';
if((fp=fopen("COMA","r"))==NULL)
fprintf(stderr,"オープンできません\n");
else {
inregs.h.ah=0x3f;
inregs.x.bx=fileno(fp);
inregs.x.cx=10;
li=(unsigned long)buf;
inregs.x.dx=li;
segregs.ds=li>>16;
intdosx(&inregs,&outregs,&segregs);
if(outregs.x.cflag)
printf("err:ax=%d\n",outregs.x.ax);
else {
printf("受信キャラクタ数:%d\n",outregs.x.ax);
printf("受信文字列 :%s\n",buf);
}
fclose(fp);
}
}
/****************************************************************/
/* 送信 */
/* */
/* */
/* */
/* */
/****************************************************************/
DrvTx() {
static char buf[10+1]="RSA-98****";
union REGS inregs,outregs;
struct SREGS segregs;
FILE *fp;
unsigned long li;
if((fp=fopen("COMA","w"))==NULL)
fprintf(stderr,"オープンできません\n");
else {
inregs.h.ah=0x40;
inregs.x.bx=fileno(fp);
inregs.x.cx=10;
li=(unsigned long)buf;
inregs.x.dx=li;
segregs.ds=li>>16;
intdosx(&inregs,&outregs,&segregs);
if(outregs.x.cflag)
printf("err:ax=%d\n",outregs.x.ax);
else
printf("送信キャラクタ数:%d\n",outregs.x.ax);
fclose(fp);
}
}
/****************************************************************/
/* BIOSの回線情報を得る */
/* */
/* */
/* */
/* */
/****************************************************************/
typedef struct {
unsigned char openlineno; /* 回線番号 */
unsigned char fncint; /* ソフトウェア割り込み番号 */
unsigned int baseadr; /* ベースI/Oアドレス */
unsigned int reserve1; /* 9032B 互換のためのリザーブ1 */
unsigned int reserve2; /* 9032B 互換のためのリザーブ2 */
unsigned char mode; /* 通信モード */
unsigned char bps; /* ボーレート */
unsigned int (*rxbuf)[]; /* 受信バッファアドレス */
unsigned int rxbuflen; /* 受信バッファ長 */
unsigned int txtim; /* 送信タイムアウト時間 */
unsigned int rxtim; /* 受信タイムアウト時間 */
void (*rxcall)(); /* 受信通知アドレス */
unsigned char intno; /* INT割り込み番号 0~6 */
unsigned char timercount; /* タイマカウントの設定 1~0ffh (1=1.25ms) */
} BiosStatus;
BiosStsGet() {
BiosStatus buf;
union REGS inregs,outregs;
struct SREGS segregs;
FILE *fp;
unsigned long li;
if((fp=fopen("COMA","r"))==NULL)
fprintf(stderr,"オープンできません\n");
else {
inregs.h.ah=0x44;
inregs.h.al=0x02;
inregs.x.bx=fileno(fp);
inregs.x.cx=26;
li=(unsigned long)&buf;
inregs.x.dx=li;
segregs.ds=li>>16;
intdosx(&inregs,&outregs,&segregs);
printf("回線番号 :%d(10)\n",buf.openlineno);
printf("ソフトウェア割り込み番号 :%02x(16)\n",buf.fncint);
printf("ベースI/Oアドレス :%04x(16)\n",buf.baseadr);
printf("通信モード :%02x(16)\n",buf.mode);
printf("ボーレート :%02x(16)\n",buf.bps);
printf("受信バッファアドレス :%08lx(16)\n",(unsigned long)buf.rxbuf);
printf("受信バッファ長 :%d(10)\n",buf.rxbuflen);
printf("送信タイムアウト時間 :%d(10)\n",buf.txtim);
printf("受信タイムアウト時間 :%d(10)\n",buf.rxtim);
printf("受信通知アドレス :%08lx(16)\n",(unsigned long)buf.rxcall);
printf("INT 割り込み番号 :%d(10)\n",buf.intno);
printf("受信タイマカウント(1=1.25ms) :%d(10)\n",buf.timercount);
fclose(fp);
}
}
/****************************************************************/
/* BIOSのファンクションを実行する */
/* */
/* */
/* BIOSファンクション:6(回線ステータスの読み取り) */
/* */
/****************************************************************/
typedef union {
struct {
unsigned char ral;
unsigned char rah;
unsigned char rcl;
unsigned char rch;
unsigned char rdl;
unsigned char rdh;
} h;
struct {
unsigned int rax;
unsigned int rcx;
unsigned int rdx;
unsigned int rdi;
unsigned int res;
} x;
} BiosPara;
BiosCall_6() {
BiosPara buf;
union REGS inregs,outregs;
struct SREGS segregs;
FILE *fp;
unsigned long li;
if((fp=fopen("COMA","r"))==NULL)
fprintf(stderr,"オープンできません\n");
else {
buf.h.rah=6;
inregs.h.ah=0x44;
inregs.h.al=0x03;
inregs.x.bx=fileno(fp);
inregs.x.cx=10;
li=(unsigned long)&buf;
inregs.x.dx=li;
segregs.ds=li>>16;
intdosx(&inregs,&outregs,&segregs);
if(buf.h.rah)
printf("error:%d\n",(char)buf.h.rah);
else {
printf("モデム制御の状態 :%02x(16)\n",buf.h.rdl);
printf("Xon/Xoff 制御の状態 :%02x(16)\n",buf.h.rdh);
printf("ラインステータス :%02x(16)\n",buf.h.rcl);
printf("モデムステータス :%02x(16)\n",buf.h.rch);
}
fclose(fp);
}
}