home *** CD-ROM | disk | FTP | other *** search
- /* asiinit.c
- *
- * The Greenleaf Comm Library
- *
- * Copyright (C) 1985-1990 Greenleaf Software Inc. All Rights Reserved.
- *
- * int asinit( port, baud, parity, stopbits, wordlength )
- * int port; - Port 0..MAX_PORT-1
- * long baud; - Baud Rate: (50L-9600L,19000L, 38400L, 57600L, 115200L)
- * int parity; - Parity: P_NONE, P_ODD, P_EVEN, P_S_STICK, P_M_STICK
- * int stopbits; - 1 or 2
- * int wordlength; - Number of Data Bits: 5,6,7, or 8
- *
- * Note: If wordlength=5 and stopbits=2, actual # stopbits will be 1.5
- *
- * DESCRIPTION
- * setup operating parameters for an asynchronous communications port.
- *
- * SIDE EFFECTS
- * none
- *
- * RETURNS
- *
- * Value Meaning
- * ------- --------
- * ASSUCCESS port initialized (no error)
- * ASINVPORT Requested port is out of range
- * ASNOTSETUP Requested port not setup with asifirst()
- * ASINVPAR Invalid parameter
- *
- * MODIFICATIONS
- *
- * 10-29-85 ""
- * Modified for release 2.0
- *
- * Mon 05-Jun-1989 13:55:02
- * Added support for 38, 56 and 115 Kbaud.
- */
- #include <stdio.h>
- #include "gf.h"
- #include "asiports.h"
-
- int GF_CONV asiinit( port,baud,parity,stopbits,wordlength )
- int port;
- long baud;
- int parity,stopbits,wordlength;
- {
- struct PORT_TABLE *p;
- int divisor;
-
- if((p=_aschkcnl(port))==NULL)
- return(_aserror);
- if(wordlength<5 || wordlength>8)
- return(ASINVPAR);
- else
- wordlength-=5;
- switch (parity) {
- case P_NONE:
- parity=0;
- break;
- case P_ODD:
- parity=8; /* odd */
- break;
- case P_EVEN:
- parity=0x18; /* even */
- break;
- case P_S_STICK:
- parity=0x28; /* stick space 0 */
- break;
- case P_M_STICK:
- parity=0x38; /* stick mark 1 */
- break;
- default:
- return(ASINVPAR);
- }
- switch (stopbits) {
- case 1:
- stopbits=0;
- break;
- case 2:
- stopbits=4;
- break;
- default:
- return(ASINVPAR);
- }
- if (baud < 10 || baud > 115200L)
- return(ASINVPAR);
- divisor = ( int ) ( 115200L / baud ) ;
- return _asiinit(p->base_8250,divisor,parity|stopbits|wordlength);
- }
-