Category : C Source Code
Archive   : WKERMSRC.ZIP
Filename : AISC.H

 
Output of file : AISC.H contained in archive : WKERMSRC.ZIP
##################################################################
##
## In this file is the source code for the WKERMIT, the "Windows"
## version of Kermit for the IBM PC family.
##
## To use, separate this file into separate files at the lines
## of "#" characters. The name of the file is given on the line
## immediately after the line of "#" characters.
##
##################################################################
##
## Start of PCKERMIT code
##
##################################################################
## ASIC.H
/* include for things that use asi buffer structure
*/
#define N_ASPORTS 2 /* actual number of ports */
#define MAX_ASPORTS 8
#define max_asbuf_len 32000 /* max buffer size - user selectable */

struct AS_FLAGS {
unsigned alert : 1; /* alert when 1 */
unsigned rxempty: 1; /* Rx Buffer Empty */
unsigned rxfull: 1; /* Rx Buffer Full */
unsigned txempty: 1; /* Tx Buffer Empty */
unsigned txfull: 1; /* Tx Buffer Full */
unsigned linerr: 1; /* line error */
unsigned modchg: 1; /* modem status change */
unsigned chkerr: 1; /* checksum error */
unsigned xchrun: 1; /* transmit interrupts are running */
unsigned rchrun: 1; /* receive interrupts are running */
unsigned igalert: 1; /* ignore alert */
unsigned igcts: 1; /* ignore CTS */
unsigned igdsr: 1; /* ignore DTR */
unsigned igcd: 1; /* ignore carrier detect CD */
unsigned igmstat: 1; /* ignore modem status changes */
unsigned igrcver: 1; /* ignore receive errors */
};

/* L I N E S T A T U S B I T S
*
* These are set by the interrupts and status functions. asilrst()
* resets the static portion.
*
* Use the macros (below) to test individual bits.
*/
struct AS_LSTAT { /* First 8 are dynamic */
unsigned dready: 1; /* Rx data ready */
unsigned overrun: 1; /* Overrun Error */
unsigned parerr: 1; /* Parity Error */
unsigned framerr: 1; /* Framing Error */
unsigned breakdet:1; /* Break Signal Detect */
unsigned txhempty:1; /* Tx Holding Reg Empty */
unsigned txsempty:1; /* Tx Shift Reg Empty */
unsigned timeout: 1; /* Timeout (not used) */
unsigned sdready: 1; /* the next 8 are STATIC repeat */
unsigned soverrun:1; /* of the last 8 bits */
unsigned sparerr: 1;
unsigned sframerr: 1;
unsigned sbreakdet:1;
unsigned stxhempty:1;
unsigned stxsempty:1;
unsigned stimeout: 1;
};

/* M O D E M S T A T U S B I T S
*
* These are set by the interrupts and status functions. asimrst() resets
* the static portion.
*
* Use macros (below) to read individual bits.
*/
struct AS_MSTAT { /* first 8 are dynamic */
unsigned dcts: 1; /* delta CTS */
unsigned ddsr: 1; /* delta DSR */
unsigned teri: 1; /* trailing edge of RI */
unsigned drlsd: 1; /* delta CD */
unsigned cts: 1; /* CTS */
unsigned dsr: 1; /* DSR */
unsigned ri: 1; /* RI */
unsigned rlsd: 1; /* CD */
unsigned sdcts: 1; /* the next 8 are static */
unsigned sddsr: 1; /* repeats of last 8 */
unsigned steri: 1;
unsigned sdrlsd: 1;
unsigned scts: 1;
unsigned sdsr: 1;
unsigned sri: 1;
unsigned srlsd: 1;
};

struct CHK_FLAGS {
unsigned no_usef: 7;
unsigned chk2flg: 1; /* Check character 2 has been detected */
unsigned chk1flg: 1; /* Check character 1 has been detected */
unsigned chk0flg: 1; /* Check character 0 has been detected */
unsigned reserve: 6; /* Hands off these */
};

struct ASITABLE {
int port; /* port number 0... */
int intnum; /* interrupt no. 0C... */
unsigned ioaddr; /* base address of 8250 */
unsigned flags; /* major status flags */
unsigned lstat; /* line status */
unsigned mstat; /* modem status */
int mode;
unsigned rseg; /* Rx Buffer segment */
unsigned rbob; /* Beginning of Buf (Rx)*/
unsigned rpi; /* Pointer In (Rx)*/
unsigned rpo; /* Pointer Out (Rx)*/
int rsize; /* size of receive queue */
int rfree; /* free space in receive queue */
unsigned tseg; /* Tx Buffer segment */
unsigned tbob; /* Beginning of Buf (Tx)*/
unsigned tpi; /* Pointer In (Tx)*/
unsigned tpo; /* Pointer Out (Tx)*/
int tsize; /* size of transmit queue */
int tcnt; /* number of bytes in transmit queue */
int xmcount; /* count/is rx active */
unsigned chkflag; /* flags for check characters */
char chkchr0; /* Check character 0 */
char chkchr1; /* Check character 1 */
char chkchr2; /* Check character 2 */
unsigned irq8259; /* Interrupt # in 8259 (com0 = 4) */
unsigned port8259; /* I/O Address of 8259 */
char not_used[15]; /* Pad to 64 bytes */
};

/*
* Structure for Local Parameters for XMODEM functions.
*/
struct XMBUF {
int xblocknum;
char first;
int xstatus;
};

/*
* The next declarations must be exactly as stated.
*
*/
extern int n_asi_ports;
extern struct ASITABLE asi_parms[ N_ASPORTS ];
extern int as_intnums[];
extern int as_port[];
extern int _as_wcts;
extern int as_wtime[];
extern int as_rtime[];
extern int as_8259ports[];
extern int as_8259irq[];

/*
* End of mandatory declarations.
*/

/*
* Macros to define status and flag bits.
*/
/* T E S T IF RECEIVER DETECTED A PARTICULAR CHECK CHARACTER
*
* Use these in conjunction with asirchk().
*/
#define ischk2(x) (asi_parms[x].chkflag&256)?1:0
#define ischk1(x) (asi_parms[x].chkflag&128)?1:0
#define ischk0(x) (asi_parms[x].chkflag&64)?1:0

/* F L A G B I T T E S T S
*
* These just test flag bits. The first 8 are for general applications,
* the next 8 are provided for completeness and to test when the system
* has been told to ignore certain conditions. Never write into these.
*/
#define isalert(x) (asi_parms[x].flags&1)?1:0
#define isrxempty(x) (asi_parms[x].flags&2)?1:0
#define isrxfull(x) (asi_parms[x].flags&4)?1:0
#define istxempty(x) (asi_parms[x].flags&8)?1:0
#define istxfull(x) (asi_parms[x].flags&16)?1:0
#define islnerr(x) (asi_parms[x].flags&32)?1:0
#define ismderr(x) (asi_parms[x].flags&64)?1:0
#define isckerr(x) (asi_parms[x].flags&128)?1:0
#define isxchrun(x) (asi_parms[x].flags&256)?1:0
#define isrchrun(x) (asi_parms[x].flags&512)?1:0
#define isigalert(x) (asi_parms[x].flags&1024)?1:0
#define isigcts(x) (asi_parms[x].flags&2048)?1:0
#define isigdtr(x) (asi_parms[x].flags&4096)?1:0
#define isigcd(x) (asi_parms[x].flags&8192)?1:0
#define isigmstat(x) (asi_parms[x].flags&16384)?1:0
#define isigrcver(x) (asi_parms[x].flags&32768)?1:0

/* Return DYNAMIC Line Status */
#define isdatardy(x) (asi_parms[x].lstat&1)?1:0 /* DATA READY */
#define isoverrun(x) (asi_parms[x].lstat&2)?1:0 /* OVERRUN ERROR */
#define isparityerr(x) (asi_parms[x].lstat&4)?1:0 /* PARITY ERROR */
#define isframerr(x) (asi_parms[x].lstat&8)?1:0 /* FRAMING ERROR */
#define isbreak(x) (asi_parms[x].lstat&16)?1:0 /* BREAK DETECT */
#define ishrempty(x) (asi_parms[x].lstat&32)?1:0 /* TX HOLDING REG */
#define issrempty(x) (asi_parms[x].lstat&64)?1:0 /* TX SHIFT REG */
#define istimeout(x) (asi_parms[x].lstat&128)?1:0 /* NOT USED */

/* Return STATIC Line Status */
#define issdatardy(x) (asi_parms[x].lstat&256)?1:0
#define issoverrun(x) (asi_parms[x].lstat&512)?1:0
#define issparityerr(x) (asi_parms[x].lstat&1024)?1:0
#define issframerr(x) (asi_parms[x].lstat&2048)?1:0
#define issbreak(x) (asi_parms[x].lstat&4096)?1:0
#define isshrempty(x) (asi_parms[x].lstat&8192)?1:0
#define isssrempty(x) (asi_parms[x].lstat&0x4000)?1:0
#define isstimeout(x) (asi_parms[x].lstat&0x8000)?1:0


/* Return DYNAMIC Modem Status */
#define ischgcts(x) (asi_parms[x].mstat&1)?1:0
#define ischgdsr(x) (asi_parms[x].mstat&2)?1:0
#define ischgri(x) (asi_parms[x].mstat&4)?1:0
#define ischgcd(x) (asi_parms[x].mstat&8)?1:0
#define iscts(x) (asi_parms[x].mstat&16)?1:0
#define isdsr(x) (asi_parms[x].mstat&32)?1:0
#define isri(x) (asi_parms[x].mstat&64)?1:0
#define iscd(x) (asi_parms[x].mstat&128)?1:0

/* Return STATIC Modem Status */
#define isschgcts(x) (asi_parms[x].mstat&256)?1:0
#define isschgdsr(x) (asi_parms[x].mstat&512)?1:0
#define isschgri(x) (asi_parms[x].mstat&1024)?1:0
#define isschgcd(x) (asi_parms[x].mstat&2048)?1:0
#define isscts(x) (asi_parms[x].mstat&4096)?1:0
#define issdsr(x) (asi_parms[x].mstat&8192)?1:0
#define issri(x) (asi_parms[x].mstat&0x4000)?1:0
#define isscd(x) (asi_parms[x].mstat&0x8000)?1:0

/* Boolean: Has receiver gotten one or more characters ? */
#define isxmrxing(x) (asi_parms[x].xmcount>0)?1:0

/* Boolean: Has receiver gotten a specified number of characters ? */
#define isxmrxcnt(x,y) (asi_parms[x].xmcount>=y)?1:0

/* Misc. definitions
*/
#define ASIN 1 /* mode = input */
#define ASOUT 2 /* mode = out */
#define ASINOUT 3 /* mode = in,out*/
#define ASCIINONE 1 /* protocol = ASCII, no protocol */
#define ASCIIXM 5 /* protocol = ASCII, XMODEM */
#define BINARYNONE 2 /* protocol = Binary, no protocol */
#define BINARYXM 6 /* protocol = Binary XMODEM */

/* ASCII Protocol Characters
*/
#define NUL 0
#define SOH 1
#define STX 2
#define ETX 3
#define EOT 4
#define ACK 6
#define DLE 0x10
#define DC1 0x11
#define DC2 0x12
#define DC3 0x13
#define DC4 0x14
#define NAK 0x15
#define ETB 0x17
#define XON 0x11
#define XOFF 0x13


  3 Responses to “Category : C Source Code
Archive   : WKERMSRC.ZIP
Filename : AISC.H

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/