home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4608 / en160 / encom.h < prev    next >
Text File  |  1994-05-01  |  30KB  |  707 lines

  1. /****************************************************************************/
  2. /*                                                                          */
  3. /* ENCOM.H                                                                  */
  4. /*                                                                          */
  5. /* This is the main header for ENCOM, containing all the defines, macros,   */
  6. /* typedefs and prototypes for the library.                                 */
  7. /*                                                          Kevin Huck      */
  8. /*                                                          Boyd Gafford    */
  9. /*                                                          04/01/94        */
  10. /****************************************************************************/
  11. #ifndef __ENCOM_H
  12. #define __ENCOM_H
  13.  
  14. #include <stdlib.h>
  15. #include <dos.h>
  16. #include <time.h>
  17. #include <conio.h>
  18.  
  19. #ifndef WN_POPUP
  20. #ifdef M_I86
  21.   #pragma pack(1)
  22. #endif
  23. #if defined(M_I86) || defined(__WATCOMC__)
  24.   #include <stddef.h>
  25.   #include <sys\types.h>
  26.   #define setmem(p,c,v)       memset((p),(v),(c))
  27.   #define movmem(s,d,c)       memmove((d),(s),(c))
  28.   #define getvect(i)          _dos_getvect(i)
  29.   #define setvect(i,hdlr)     _dos_setvect(i,hdlr)
  30.   #define enable              _enable
  31.   #define disable             _disable
  32. #endif
  33.   typedef unsigned char uchar;
  34.   typedef short int sint;
  35.   typedef unsigned short int usint;
  36.   typedef unsigned int  uint;
  37.   typedef unsigned long ulong;
  38. #endif
  39.  
  40. /*---------------------- prevents compatibility problems -------------------*/
  41. #if defined(M_I86) || defined(__WATCOMC__)
  42.   #define outbyte outp
  43.   #define inbyte  inp
  44.   #define outword outpw
  45.   #define inword  inpw
  46. #else
  47.   #define outbyte outportb
  48.   #define inbyte  inportb
  49.   #define outword outport
  50.   #define inword  inport
  51. #endif
  52.  
  53. #ifdef __ZTC__
  54.   #include <int.h>
  55.   #define interrupt
  56.   #define O_TRUNC 0
  57.   #define O_BINARY 0
  58.   #define enable  int_on
  59.   #define disable int_off
  60. #endif
  61.  
  62. /*------------------ Watcom C32/DOS4G compatibility defines ----------------*/
  63. #ifdef __WATCOMC__
  64.   #define EN_FAR
  65.   #define EN_FP_SEG(p)      ((usint) (((ulong) p) >> 4))
  66.   #define EN_FP_OFF(p)      ((usint) (((ulong) p) & 0x000F))
  67.   #define EN_MK_FP(s,o)     ((((s) << 4) | (o)))
  68. #else
  69.   #define EN_FAR    far
  70.   #define EN_FP_SEG(fp)     ((uint)((ulong)((void far *)(fp)) >> 16))
  71.   #define EN_FP_OFF(fp)     ((uint)((void far *)(fp)))
  72.   #define EN_MK_FP(seg,off) ((void far *)(((ulong)(seg)<<16) | (uint)(off)))
  73. #endif
  74.  
  75. extern char  Pause_char, Clear_rx_char, Clear_tx_char;
  76. extern uchar Encrypt_char, End_flag;
  77.  
  78. /*---------------------- common globals with UltraWin ----------------------*/
  79. #if defined(WN_POPUP) || defined(ENCOM)
  80. extern int        (*Idle_func)(void);         /* global function pointer    */
  81. extern ulong      T_cnt, T_hi;
  82. extern volatile   int Uw_timers[4];           /* user timers-decrement to 0 */
  83. extern volatile   int Sys_timers[2];
  84. extern volatile   int Sound_timer;            /* system/sound timers        */
  85. extern int        Clock_init;                 /* 1 if we have clock vector  */
  86. extern int        Sound_on;                   /* 1 when sound is on         */
  87. extern ulong      Tics;                       /* total clock interrupts     */
  88. extern int        Tics_per_sec;
  89. #else
  90. int               (*Idle_func)(void);
  91. ulong             T_cnt, T_hi;
  92. volatile int      Uw_timers[4];
  93. volatile int      Sys_timers[2];
  94. volatile int      Sound_timer;
  95. int               Clock_init;
  96. int               Sound_on;
  97. ulong             Tics;
  98. int               Tics_per_sec;
  99. #endif
  100.  
  101. /*-------------------------- crc definitions -------------------------------*/
  102. #define CRC_UNDEF       0
  103. #define CRC_FORWARD     1
  104. #define CRC_REVERSE     2
  105.  
  106. #define CRCCITT         0x1021
  107. #define CRCCITT_REV     0x8408
  108. #define CRC16           0x8005
  109. #define CRC16_REV       0xa001
  110.  
  111. #define QUOTE_FLAG      0x88
  112. #define QUOTE_MASK      0x11
  113.  
  114. #define MAX_MSG_SIZE    512
  115.  
  116. #define END_FLAG        0x02
  117.  
  118. /*---------------------- constant definitions ------------------------------*/
  119. #define CNTRL           0x43                        /* clock port addresses */
  120. #define TIMER           0x40
  121.  
  122. #define SEC_1           18            /* number of clock tics in 1 second   */
  123.  
  124. #define ON              1
  125. #define OFF             0
  126.  
  127. #define CRC_INIT        0xffff
  128. #define CRC_FCS         0xf0b8
  129.  
  130. #define SOH             0x01
  131. #define STX             0x02
  132. #define ETX             0x03
  133. #define EOT             0x04
  134. #define SYN             0x16
  135. #define CTRL_Z          26
  136.  
  137. #define XON_CHAR        17
  138. #define XOFF_CHAR       19
  139. #define XON_ANY         256
  140. #define XWAIT           1
  141. #define XRELEASE        0
  142. #define RX_XON          1
  143. #define RX_XOFF         2
  144. #define TX_XON          3
  145. #define TX_XOFF         4
  146.  
  147. #define NONE            'N'
  148. #define ODD             'O'
  149. #define EVEN            'E'
  150. #define MARK            'M'
  151. #define SPACE           'S'
  152.  
  153. #define MAX_PORTS       32
  154. enum PORTS
  155. {
  156.     COM1,  COM2,  COM3,  COM4,  COM5,  COM6,  COM7,  COM8,
  157.     COM9,  COM10, COM11, COM12, COM13, COM14, COM15, COM16,
  158.     COM17, COM18, COM19, COM20, COM21, COM22, COM23, COM24,
  159.     COM25, COM26, COM27, COM28, COM29, COM30, COM31, COM32
  160. };
  161.  
  162. #define RX              0x01
  163. #define TX              0x02
  164.  
  165. #define HALF_DUPLEX     0
  166. #define FULL_DUPLEX     1
  167. #define HS_RTS_CTS      2
  168.  
  169. /*-------------------------- uart type defines -----------------------------*/
  170. #define NO_UART         0
  171. #define ID_8250         1
  172. #define ID_16450        2
  173. #define ID_16550        3
  174.  
  175. /*-------------------------- 16650 FIFO control ----------------------------*/
  176. #define FIFO_OFF        0x00                  /* 16550 fifo enable bit off  */
  177. #define FIFO_ON         0x01                  /* 16550 fifo enable bit on   */
  178. #define RX_FIFO_RESET   0x02                  /* 16550 rx fifo reset        */
  179. #define TX_FIFO_RESET   0x04                  /* 16550 tx fifo reset        */
  180. #define RX_TRIG_1       0x00                  /* 16550 rx fifo trigger 1    */
  181. #define RX_TRIG_4       0x40                  /* 16550 rx fifo trigger 4    */
  182. #define RX_TRIG_8       0x80                  /* 16550 rx fifo trigger 8    */
  183. #define RX_TRIG_14      0xc0                  /* 16550 rx fifo trigger 14   */
  184.  
  185. /*-------------------- line status register bit masks ----------------------*/
  186. #define DR              0x01   /* data ready                             0  */
  187. #define OE              0x02   /* overrun error                          1  */
  188. #define PE              0x04   /* parity error                           2  */
  189. #define FE              0x08   /* framing error                          3  */
  190. #define BI              0x10   /* break interrupt                        4  */
  191. #define THRE            0x20   /* transmitter holding register empty     5  */
  192. #define TSRE            0x40   /* transmitter shift   register empty     6  */
  193. #define F_ERR           0x80   /* FIFO error (only for 16550)            7  */
  194.  
  195. /*-------------------- modem status register bit masks ---------------------*/
  196. #define DCTS   0x01             /* delta 0 clear to send                 0  */
  197. #define DDSR   0x02             /* delta data set ready                  1  */
  198. #define TERI   0x04             /* trailing edge ring indicator          2  */
  199. #define DDCD   0x08             /* delta data carrier detect             3  */
  200.  
  201. #define CTS    0x10             /* clear to send                         4  */
  202. #define DSR    0x20             /* data set ready                        5  */
  203. #define RI     0x40             /* ring indicator                        6  */
  204. #define DCD    0x80             /* data carrier detect                   7  */
  205.  
  206. /*-------------------- modem control register bit masks --------------------*/
  207. #define DTR    0x01             /* data terminal ready                   0  */
  208. #define RTS    0x02             /* request to send                       1  */
  209. #define OUT1   0x04             /* out 1                                 2  */
  210. #define OUT2   0x08             /* out 2                                 3  */
  211. #define LOOP   0x10             /* loop                                  4  */
  212.  
  213. /*--------------------- line control register bit masks --------------------*/
  214. #define DATA_BITS_5  0x00       /* data bit control masks                   */
  215. #define DATA_BITS_6  0x01
  216. #define DATA_BITS_7  0x02
  217. #define DATA_BITS_8  0x03
  218.  
  219. #define STOP_BITS_1  0x00       /* stop bit control masks                   */
  220. #define STOP_BITS_2  0x04
  221.  
  222. #define NO_PARITY    0x00       /* parity control masks                     */
  223. #define ODD_PARITY   0x08
  224. #define EVEN_PARITY  0x18
  225. #define MARK_PARITY  0x28
  226. #define SPACE_PARITY 0x38
  227.  
  228. #define BREAK_CTRL   0x40       /* break control bit                        */
  229. #define DLAB         0x80       /* divisor latch access bit                 */
  230.  
  231. /*---------------------- interrupt enable bit masks ------------------------*/
  232. #define DR_IRQ   0x01           /* data ready irq                           */
  233. #define THRE_IRQ 0x02           /* transmitter holding register empty irq   */
  234. #define RLS_IRQ  0x04           /* receiver line status irq                 */
  235. #define MS_IRQ   0x08           /* modem status irq                         */
  236.  
  237. /*-------------------- interrupt identification masks ----------------------*/
  238. #define IIR_LSTAT 0x06          /* serialization error or break             */
  239. #define IIR_RX    0x04          /* received data                            */
  240. #define IIR_TX    0x02          /* Transmit Buffer Empty                    */
  241. #define IIR_CTRL  0x00          /* RS-232 input                             */
  242.  
  243. /*-------------------------- 8250 uart registers ---------------------------*/
  244. /*  { 0x3f8, 0x3f8, 0x3f9, 0x3fa, 0x3fb, 0x3fc, 0x3fd, 0x3fe, 0x3f8, 0x3f9, 0x3ff },*/
  245. #define RBR  0                 /* receiver buffer register (read only)      */
  246. #define THR  1                 /* transmitter holding register (write only) */
  247. #define IER  2                 /* interrupt enable register                 */
  248. #define IIR  3                 /* interrupt id register (read only)         */
  249. #define FCR  3                 /* FIFO control for 16550 (write only)       */
  250. #define LCR  4                 /* line control register                     */
  251. #define MCR  5                 /* modem control register                    */
  252. #define LSR  6                 /* line status register                      */
  253. #define MSR  7                 /* modem status register                     */
  254. #define DLL  8                 /* divisor latch  (low - least significant)  */
  255. #define DLH  9                 /* divisor latch  (high - most significant)  */
  256. #define SCRATCH 10             /* scratch pad register                      */
  257.  
  258.  
  259. /*---------------------------- com port defines ----------------------------*/
  260. typedef struct port
  261. {
  262.   uchar  reg_save[12];         /* saves all uart registers before init      */
  263.  
  264.   sint   rx_on;                /* receiver on or off                        */
  265.   usint  rx_read;              /* receive queue read  pointer               */
  266.   usint  rx_write;             /* recieve queue write pointer               */
  267.   usint  rx_cnt;               /* # of bytes currently in receive queue     */
  268.   usint  rx_size;              /* actual size of receive queue              */
  269.   usint  rx_overflow;          /* count of byte received when queue full    */
  270.   ulong  rx_chars;             /* receive character count                   */
  271.   uchar  *rx_data;             /* pointer to receive queue data area        */
  272.   usint  parity_errs;          /* line status errors                        */
  273.   usint  framing_errs;
  274.   usint  overrun_errs;
  275.   usint  break_cnt;
  276.   sint   que_stat_flag;        /* if 1, status is queued with each byte     */
  277.   usint  msg_cnt;              /* number of messages (match_chars) rx'd     */
  278.   uchar  encrypt_char;         /* character to use for XOR encryption       */
  279.   sint   match_char;           /* rx match char.  When rx'd, msg_cnt incs   */
  280.                                /* Only a call to get_msg decrements         */
  281.  
  282.   sint  tx_on;                 /* transmitter on or off                     */
  283.   usint tx_read;               /* transmit queue read  pointer              */
  284.   usint tx_write;              /* transmit queue write pointer              */
  285.   usint tx_cnt;                /* # of bytes currently in transmit queue    */
  286.   usint tx_size;               /* actual size of transmit queue             */
  287.   usint tx_overflow;           /* count of byte transmit when queue full    */
  288.   ulong tx_chars;              /* transfer character count                  */
  289.   uchar *tx_data;              /* pointer to transmit queue data area       */
  290.  
  291.   sint  uart_type;             /* NO_UART, 8250, 16450, 16550               */
  292.   sint  fifos_enabled;         /* are fifos enabled if 16550                */
  293.   sint  rx_trig_level;         /* rx trigger level, 1, 4, 8, or 14          */
  294.   sint  chan;                  /* com port channel index (0 - MAX_PORTS-1)  */
  295.   sint  *uart;                 /* pointer to array of uart i/o addresses    */
  296.   long  baud;                  /* port baud rate divisor                    */
  297.   sint  data_bits;             /* number of data bits (5,6,7,8)             */
  298.   sint  stop_bits;             /* number of stop bits (1,2)                 */
  299.   sint  parity;                /* parity (NONE, ODD, EVEN, MARK, SPACE)     */
  300.   sint  status;                /* 1 = in use, 0 = not in use                */
  301.  
  302. #if defined(__WATCOMC__)
  303.   void (interrupt far *old_vect)();
  304. #else
  305. #if defined(__ZTC__)
  306.   int (EN_FAR *(old_vect))();
  307. #else
  308. #if defined(M_I86)
  309.   void (interrupt EN_FAR *(old_vect))();
  310. #else
  311. #if defined(__cplusplus)
  312.   void interrupt EN_FAR (*old_vect)(...);
  313. #else
  314. #if defined(__POWERC)
  315.   void interrupt (EN_FAR *old_vect)(...);
  316. #else
  317.   void (interrupt EN_FAR *(old_vect))(void);
  318. #endif
  319. #endif
  320. #endif
  321. #endif
  322. #endif
  323.  
  324.   sint   old_mask;                    /* old com port interrupt mask        */
  325.   sint   old_ier;                     /* old interrupt id register          */
  326.   sint   vect_no;                     /* uart com port vector number        */
  327.   sint   mask;                        /* uart com port interrupt mask       */
  328.  
  329.   sint   xon_xoff_mode;               /* 1 if XON/XOFF handshaking enabled  */
  330.   sint   xon_xoff_state;              /* current state of XON/XOFF (On/OFF) */
  331.   sint   rx_xstate;                   /* 1 if XOFF sent                     */
  332.   sint   tx_xstate;                   /* 1 if XOFF received                 */
  333.   sint   xon_char;                    /* char to trigger XON, >= 256 if any */
  334.   sint   xoff_char;                   /* char to trigger XOFF               */
  335.   usint  highwater;                   /* point where we send XOFF for rx    */
  336.   usint  lowwater;                    /* point where we send XON to release */
  337.  
  338.   sint   rts_cts_mode;                  /* 1 if RTS/CTS handshaking enabled   */
  339.   sint   rts_cts_state;               /* current RTS/CTS state (ON/OFF)     */
  340.  
  341.   sint   dcd_mode;                    /* 1 if CD must be high to rx         */
  342.   sint   dcd_state;                   /* current DCD state                  */
  343.  
  344.   sint   dsr_mode;                    /* 1 if DSR must be high to rx        */
  345.   sint   dsr_state;                   /* current DSR state                  */
  346.  
  347.   sint   sline_status;                /* static line status register        */
  348.   sint   smodem_status;               /* static modem status register       */
  349.  
  350.   sint   edge_trigger;                /* for rare hardware incompatibility  */
  351.  
  352.   void   *usr_ptr;                    /* user expansion pointer             */
  353. } PORT;
  354.  
  355.  
  356. /*--------------------------------- macros ---------------------------------*/
  357. #define lower(x, y)     (((x) < (y)) ? (x) : (y))
  358. #define upper(x, y)     (((x) > (y)) ? (x) : (y))
  359. #define lobyte(c)       (uchar) ((c) & 0x00ff)
  360. #define hibyte(c)       (uchar) ((c) >> 8)
  361. #define range(l,b,h)    ((((b) >= (l)) && ((b) <= (h))))
  362. #define swap( a,b,c)    ( (c) = (a), (a) = (b), (b) = (c) )
  363.  
  364. #ifndef min
  365. #define min(x, y)       (((x) < (y)) ? (x) : (y))
  366. #define max(x, y)       (((x) > (y)) ? (x) : (y))
  367. #endif
  368.  
  369. #ifndef ENQ_DEBUG
  370. #ifndef SOURCE_TRACE
  371. /*------------------------------- com macros -------------------------------*/
  372. #define com_tx_cnt(cp)       ((cp)->tx_cnt)
  373. #define com_rx_cnt(cp)       ((cp)->rx_cnt)
  374. #define com_tx_free(cp)      ((cp)->tx_size - (cp)->tx_cnt)
  375. #define com_rx_free(cp)      ((cp)->rx_size - (cp)->rx_cnt)
  376. #define is_rx_empty(cp)      ((cp)->rx_cnt ? 0 : 1)
  377. #define is_rx_full(cp)       ((cp)->rx_size == (cp)->rx_cnt)
  378. #define is_tx_empty(cp)      ((cp)->tx_cnt ? 0 : 1)
  379. #define is_tx_full(cp)       ((cp)->tx_size == (cp)->tx_cnt)
  380.  
  381. #define set_encrypt(c, cp)   ((cp)->encrypt_char = c)
  382. #define set_match(c, cp)     ((cp)->match_char = c)
  383. #define init_msg(cp)         (End_flag = (uchar)(cp)->match_char, Encrypt_char = (cp)->encrypt_char)
  384.  
  385. #define msg_cnt(cp)          ((cp)->msg_cnt)
  386. #define clear_msg_cnt(cp)    ((cp)->msg_cnt = 0)
  387.  
  388. #define set_que_status(x,cp) ((cp)->que_stat_flag = x)
  389. #define is_que_status(cp)    ((cp)->que_stat_flag)
  390.  
  391. /*----------------------------- flow control -------------------------------*/
  392. #define set_lowwater(l,cp)   ((cp)->lowwater = l)
  393. #define set_highwater(h,cp)  ((cp)->highwater = h)
  394. #define get_lowwater(cp)     ((cp)->lowwater)
  395. #define get_highwater(cp)    ((cp)->highwater)
  396.  
  397. #define set_cts_flow(x,cp)   ((cp)->rts_cts_mode = x)
  398.  
  399. #define is_cts_flow(cp)      ((cp)->rts_cts_mode)
  400. #define is_dcd_flow(cp)      ((cp)->dcd_mode)
  401. #define is_dsr_flow(cp)      ((cp)->dsr_mode)
  402. #define is_xon_flow(cp)      ((cp)->xon_xoff_mode)
  403.  
  404. #define cts_flow_state(cp)   ((cp)->rts_cts_state)
  405. #define dcd_flow_state(cp)   ((cp)->dcd_state)
  406. #define dsr_flow_state(cp)   ((cp)->dsr_state)
  407. #define xon_flow_state(cp)   ((cp)->xon_xoff_state)
  408.  
  409. /*----------------------- 16550 fifo control macro -------------------------*/
  410. #define fifo_enable(cp)   (com_fifo_ctrl( ON,FIFO_ON,(cp)),(cp)->fifos_enabled =  ON)
  411. #define fifo_disable(cp)  (com_fifo_ctrl(OFF,FIFO_ON,(cp)),(cp)->fifos_enabled = OFF)
  412. #define fifo_rx_reset(cp) (com_fifo_ctrl(ON,RX_FIFO_RESET,(cp)))
  413. #define fifo_tx_reset(cp) (com_fifo_ctrl(ON,TX_FIFO_RESET,(cp)))
  414.  
  415. #define is_fifo_enabled(cp)   ((cp)->fifos_enabled)
  416. #define get_trigger_level(cp) ((cp)->rx_trig_level)
  417.  
  418. /*------------------------------ modem macros ------------------------------*/
  419. #define modem_reset(cp)          modem_cmd("ATZ",-1,Tics_per_sec*2,(cp))
  420. #define modem_dial(s,cp)         modem_cmd(s,-1,Tics_per_sec*45,(cp))
  421. #define modem_answer(cp)         modem_cmd("ATA",-1,Tics_per_sec,(cp))
  422. #define modem_hangup(cp)         modem_cmd("+++~~~ATH0",-1,Tics_per_sec*5,(cp))
  423. #define modem_online(cp)         modem_cmd("ATO",-1,Tics_per_sec,(cp))
  424. #define modem_repeat(cp)         modem_cmd("A/",-1,Tics_per_sec,(cp))
  425. #define modem_speaker(x,cp)      modem_cmd("ATM",x,Tics_per_sec,(cp))
  426. #define modem_echo(x,cp)         modem_cmd("ATE",x,Tics_per_sec,(cp))
  427. #define modem_word_reply(x,cp)   modem_cmd("ATV",x,Tics_per_sec,(cp))
  428. #define modem_extend_reply(x,cp) modem_cmd("ATX",x,Tics_per_sec,(cp))
  429. #define modem_duplex(x,cp)       modem_cmd("ATF",x,Tics_per_sec,(cp))
  430. #define modem_quiet(x,cp)        modem_cmd("ATQ",x,Tics_per_sec,(cp))
  431.  
  432. /*-------------------- current modem status macros -------------------------*/
  433. #define is_dcd(cp)           ((inbyte((cp)->uart[MSR]) & DCD) ? 1 : 0)
  434. #define is_cts(cp)           ((inbyte((cp)->uart[MSR]) & CTS) ? 1 : 0)
  435. #define is_dsr(cp)           ((inbyte((cp)->uart[MSR]) & DSR) ? 1 : 0)
  436. #define is_ri(cp)            ((inbyte((cp)->uart[MSR]) & RI ) ? 1 : 0)
  437.  
  438. /*-------------------- static modem status macros --------------------------*/
  439. #define clear_mstatus(cp)     ((cp)->smodem_status = 0)
  440. #define is_sdcd(cp)          (((cp)->smodem_status & DCD)  ? 1 : 0)
  441. #define is_scts(cp)          (((cp)->smodem_status & CTS)  ? 1 : 0)
  442. #define is_sdsr(cp)          (((cp)->smodem_status & DSR)  ? 1 : 0)
  443. #define is_sri(cp)           (((cp)->smodem_status & RI )  ? 1 : 0)
  444.  
  445. #define is_sddcd(cp)         (((cp)->smodem_status & DDCD) ? 1 : 0)
  446. #define is_sdcts(cp)         (((cp)->smodem_status & DCTS) ? 1 : 0)
  447. #define is_sddsr(cp)         (((cp)->smodem_status & DDSR) ? 1 : 0)
  448. #define is_sdri(cp)          (((cp)->smodem_status & TERI) ? 1 : 0)
  449.  
  450. /*-------------------- current line status macros --------------------------*/
  451. #define is_overrun_err(cp)   ((inbyte((cp)->uart[LSR]) & OE)  ? 1 : 0)
  452. #define is_parity_err(cp)    ((inbyte((cp)->uart[LSR]) & PE)  ? 1 : 0)
  453. #define is_framing_err(cp)   ((inbyte((cp)->uart[LSR]) & FE)  ? 1 : 0)
  454. #define is_break(cp)         ((inbyte((cp)->uart[LSR]) & BI)  ? 1 : 0)
  455.  
  456. /*-------------------- static line status macros ---------------------------*/
  457. #define clear_lstatus(cp)     ((cp)->sline_status = 0)
  458. #define is_soverrun_err(cp)  (((cp)->sline_status & OE)  ? 1 : 0)
  459. #define is_sparity_err(cp)   (((cp)->sline_status & PE)  ? 1 : 0)
  460. #define is_sframing_err(cp)  (((cp)->sline_status & FE)  ? 1 : 0)
  461. #define is_sbreak(cp)        (((cp)->sline_status & BI)  ? 1 : 0)
  462.  
  463. /*------------------ current modem control macros --------------------------*/
  464. #define is_dtr(cp)           ((inbyte((cp)->uart[MCR]) & DTR)  ? 1 : 0)
  465. #define is_rts(cp)           ((inbyte((cp)->uart[MCR]) & RTS)  ? 1 : 0)
  466. #define is_out1(cp)          ((inbyte((cp)->uart[MCR]) & OUT1) ? 1 : 0)
  467. #define is_out2(cp)          ((inbyte((cp)->uart[MCR]) & OUT2) ? 1 : 0)
  468. #define is_loop(cp)          ((inbyte((cp)->uart[MCR]) & LOOP) ? 1 : 0)
  469. #endif
  470. #endif
  471.  
  472. /*------------------------- en_main.c prototypes ---------------------------*/
  473. void com_isr( register PORT *cp );
  474.  
  475. #if defined(__WATCOMC__)
  476. void interrupt far com_isra();
  477. void interrupt far com_isrb();
  478. void interrupt far com_isrc();
  479. void interrupt far com_isrd();
  480. void interrupt far com_isrx();
  481. PORT *com_vect_init( void (interrupt far *com_isrp)(), PORT *cp );
  482. #else
  483. #if defined(__ZTC__)
  484. int interrupt EN_FAR com_isra( void );
  485. int interrupt EN_FAR com_isrb( void );
  486. int interrupt EN_FAR com_isrc( void );
  487. int interrupt EN_FAR com_isrd( void );
  488. int interrupt EN_FAR com_isrx( void );
  489. PORT *com_vect_init( int interrupt EN_FAR (*com_isrp)(), PORT *cp );
  490. #else
  491. #if defined(M_I86) || defined(__WATCOMC__)
  492. void interrupt EN_FAR com_isra( void );
  493. void interrupt EN_FAR com_isrb( void );
  494. void interrupt EN_FAR com_isrc( void );
  495. void interrupt EN_FAR com_isrd( void );
  496. void interrupt EN_FAR com_isrx( void );
  497. PORT *com_vect_init( void (interrupt EN_FAR *(com_isrp))(), PORT *cp );
  498. #else
  499. #if defined(__cplusplus)
  500. void interrupt EN_FAR com_isra(...);
  501. void interrupt EN_FAR com_isrb(...);
  502. void interrupt EN_FAR com_isrc(...);
  503. void interrupt EN_FAR com_isrd(...);
  504. void interrupt EN_FAR com_isrx(...);
  505. PORT *com_vect_init( void interrupt EN_FAR (*com_isrp)(...), PORT *cp );
  506. #else
  507. #if defined(__POWERC)
  508. void interrupt EN_FAR com_isra(...);
  509. void interrupt EN_FAR com_isrb(...);
  510. void interrupt EN_FAR com_isrc(...);
  511. void interrupt EN_FAR com_isrd(...);
  512. void interrupt EN_FAR com_isrx(...);
  513. PORT *com_vect_init( void interrupt (EN_FAR *com_isrp)(...), PORT *cp );
  514. #else
  515. void interrupt EN_FAR com_isra( void );
  516. void interrupt EN_FAR com_isrb( void );
  517. void interrupt EN_FAR com_isrc( void );
  518. void interrupt EN_FAR com_isrd( void );
  519. void interrupt EN_FAR com_isrx( void );
  520. PORT *com_vect_init( void interrupt EN_FAR (*com_isrp)(void), PORT *cp );
  521. #endif
  522. #endif
  523. #endif
  524. #endif
  525. #endif
  526. int  com_port_create( int chan, long baud, int parity, int data_bits,
  527.                       int stop_bits, int rx_size, int tx_size, PORT *cp );
  528. int  com_port_init( long baud, int parity, int data_bits, int stop_bits,
  529.                     PORT *cp );
  530. void com_port_destroy( PORT *cp );
  531. void com_clear_que( int mode, PORT *cp );
  532. int  com_getc( PORT *cp );
  533. int  com_ungetc( int c, PORT *cp );
  534. int  com_stuffc( int c, PORT *cp );
  535. int  com_putc( int c, PORT *cp );
  536. void prime_tx( PORT *cp );
  537. int  force_tx( int c, PORT *cp );
  538. int  com_puts( uchar *s, PORT *cp );
  539. int  check_rts( PORT *cp );
  540. int  com_irq_ctrl( int state, int mask, PORT *cp );
  541. int  com_232_ctrl( int state, int mask, PORT *cp );
  542. void read_regs( uchar *s, PORT *cp );
  543. void write_regs( uchar *s, PORT *cp );
  544. int  com_config( int chan, int base_addr, int irq );
  545. int  init_digi( int base_addr, int irq );
  546.  
  547. /*------------------------- en_supp.c prototypes ---------------------------*/
  548. int  com_getc_qty( uchar *data, uint qty, PORT *cp );
  549. int  com_gets( uchar *data, uchar c, uint qty, PORT *cp );
  550. int  check_xon( PORT *cp );
  551. int  com_putc1( int c, PORT *cp );
  552. int  com_putc_qty( uchar *data, uint qty, PORT *cp );
  553. void send_break( int t, PORT *cp );
  554. int  set_xon_flow( int state, int xon_char, int xoff_char,
  555.                    uint highwater, uint lowwater, PORT *cp );
  556. int  set_dcd_flow( int state, PORT *cp );
  557. int  set_dsr_flow( int state, PORT *cp );
  558. void suspend( int t );
  559. int  wait_for_rx( int t, uint cnt, PORT *cp );
  560. int  wait_for_no_rx( int t, PORT *cp );
  561. char *modem_cmd( char *cmd_str, int p, int t, PORT *cp );
  562. int com_fifo_ctrl( int state, int mask, PORT *cp );
  563. int com_fifo_trigger( int level, PORT *cp );
  564.  
  565. /*------------------------- en_supp.c prototypes ---------------------------*/
  566. void encrypt_msg( uchar *msg, uint len );
  567. usint calc_crc( uchar *msg, uint len );
  568. uint fmt_msg( uchar *s, uchar *d, uint len );
  569. uint defmt_msg( uchar *src, uchar *dest );
  570. uint get_msg( uchar *dest, PORT *cp );
  571. void mk_crc_tbl( usint init, usint poly, usint (*crcfn)(usint, usint, usint) );
  572. usint gen_crc(usint data, usint genpoly, usint accum);
  573. usint gen_crc_rev(usint data, usint genpoly, usint accum);
  574.  
  575. /*-------------------------- en_kbd.c prototypes ---------------------------*/
  576. #ifndef WN_POPUP
  577. void init_ctrlc_hdlr(void);
  578. void end_ctrlc_hdlr(void);
  579. void init_clock( uint speed );
  580. void end_clock(void);
  581. void clock_speed( uint speed );
  582. void tone( uint freq, int dur );
  583. void sound_off(void);
  584. void set_idle_func( int (*func_ptr)(void) );
  585. #endif
  586.  
  587. /*-------------------------- en_dbg.c prototypes ---------------------------*/
  588. #if defined(ENQ_DEBUG) || defined(SOURCE_TRACE)
  589. void set_dbg_gchar( void (*func_ptr)(int, int, int, char) );
  590. void enc_dbg_cls(void);
  591. void enc_dbg_putc(int x, int y, int att, char c);
  592. void enc_dbg_plst( int x, int y, char *s );
  593. int  enc_error( int parm1, int parm2, char *s1, char *s2, void *p );
  594. int  enc_cp_vld( char *s, PORT *cp );
  595. int  enc_p_vld( char *s, void *gp );
  596. void enc_dbg__log( char *func_name );
  597. void enc_dbg_push( char *func_name );
  598. void enc_dbg_pop( void );
  599. void enc_linearize_log(void);
  600. int  com_tx_cnt(PORT *cp);
  601. int  com_rx_cnt(PORT *cp);
  602. int  com_tx_free(PORT *cp);
  603. int  com_rx_free(PORT *cp);
  604. int  is_rx_empty(PORT *cp);
  605. int  is_rx_full(PORT *cp);
  606. int  is_tx_empty(PORT *cp);
  607. int  is_tx_full(PORT *cp);
  608. void set_encrypt(uchar c, PORT *cp);
  609. void set_match(uchar c, PORT *cp);
  610. void init_msg(PORT *cp);
  611. int  msg_cnt(PORT *cp);
  612. void clear_msg_cnt(PORT *cp);
  613. void set_que_status(int x, PORT *cp);
  614. int  is_que_status(PORT *cp);
  615. void set_lowwater(uint l, PORT *cp);
  616. void set_highwater(uint h, PORT *cp);
  617. uint get_lowwater(PORT *cp);
  618. uint get_highwater(PORT *cp);
  619. void set_cts_flow(int x, PORT *cp);
  620. int  is_cts_flow(PORT *cp);
  621. int  is_dcd_flow(PORT *cp);
  622. int  is_dsr_flow(PORT *cp);
  623. int  is_xon_flow(PORT *cp);
  624. int  cts_flow_state(PORT *cp);
  625. int  dcd_flow_state(PORT *cp);
  626. int  dsr_flow_state(PORT *cp);
  627. int  xon_flow_state(PORT *cp);
  628. void fifo_enable(PORT *cp);
  629. void fifo_disable(PORT *cp);
  630. void fifo_rx_reset(PORT *cp);
  631. void fifo_tx_reset(PORT *cp);
  632. int  is_fifo_enabled(PORT *cp);
  633. int  get_trigger_level(PORT *cp);
  634. char *modem_reset(PORT *cp);
  635. char *modem_dial(char *s, PORT *cp);
  636. char *modem_answer(PORT *cp);
  637. char *modem_hangup(PORT *cp);
  638. char *modem_online(PORT *cp);
  639. char *modem_repeat(PORT *cp);
  640. char *modem_speaker(int x, PORT *cp);
  641. char *modem_echo(int x, PORT *cp);
  642. char *modem_word_reply(int x, PORT *cp);
  643. char *modem_extend_reply(int x, PORT *cp);
  644. char *modem_duplex(int x, PORT *cp);
  645. char *modem_quiet(int x, PORT *cp);
  646. int  is_dcd(PORT *cp);
  647. int  is_cts(PORT *cp);
  648. int  is_dsr(PORT *cp);
  649. int  is_ri(PORT *cp);
  650. void clear_mstatus(PORT *cp);
  651. int  is_sdcd(PORT *cp);
  652. int  is_scts(PORT *cp);
  653. int  is_sdsr(PORT *cp);
  654. int  is_sri(PORT *cp);
  655. int  is_sddcd(PORT *cp);
  656. int  is_sdcts(PORT *cp);
  657. int  is_sddsr(PORT *cp);
  658. int  is_sdri(PORT *cp);
  659. int  is_overrun_err(PORT *cp);
  660. int  is_parity_err(PORT *cp);
  661. int  is_framing_err(PORT *cp);
  662. int  is_break(PORT *cp);
  663. void clear_lstatus(PORT *cp);
  664. int  is_soverrun_err(PORT *cp);
  665. int  is_sparity_err(PORT *cp);
  666. int  is_sframing_err(PORT *cp);
  667. int  is_sbreak(PORT *cp);
  668. int  is_dtr(PORT *cp);
  669. int  is_rts(PORT *cp);        
  670. int  is_out1(PORT *cp);
  671. int  is_out2(PORT *cp);
  672. int  is_loop(PORT *cp);
  673. #endif
  674.  
  675. /*-------------------------- external debug globals ------------------------*/
  676. #ifdef SOURCE_TRACE
  677. extern int    Enc_dbg_line;
  678. extern char   *Enc_dbg_file;
  679. #endif
  680.  
  681. /*------------------------------ debug defines -----------------------------*/
  682. #ifdef ENQ_DEBUG 
  683. #define ENC_DBG_POP()                     enc_dbg_pop()
  684. #define ENC_ERROR( p1, p2, s1, s2, p )    enc_error( p1, p2, s1, s2, p )
  685. #define ENC_CP_LEVEL( val )               Cp_check_level = val
  686. #define ENC_CP_VLD( s, cp )               enc_cp_vld( s, cp )
  687. #define ENC_P_VLD( s, gp )                enc_p_vld( s, gp )
  688. #define ENC_DBG_LOG( fname )              enc_dbg__log( fname )
  689. #define ENC_DBG_LOG_STATE( state )        Enc_dbg_log_on = state
  690. #define ENC_DBG_STACK_STATE( state )      Enc_dbg_stack_on = state
  691. #else
  692. #define ENC_DBG_POP()
  693. #define ENC_ERROR( p1, p2, s1, s2, p )
  694. #define ENC_CP_LEVEL( val )
  695. #define ENC_CP_VLD( s, cp )
  696. #define ENC_P_VLD( s, gp )
  697. #define ENC_DBG_LOG( fname )
  698. #define ENC_DBG_LOG_STATE( state )
  699. #define ENC_DBG_STACK_STATE( state )
  700. #endif
  701.  
  702. #include "en_dbg.h"
  703.  
  704. #endif     /* __ENCOM_H */
  705.  
  706. /**** END OF FILE ****/
  707.