/* Copyright (C) Magna Carta Software, Inc. 1990, 1991. All Rights Reserved C COMMUNICATIONS TOOLKIT COPEN.C -- Device-independent port open/close routines; */ #include #if !defined(__NDPC__) #include #endif #include /* GLOBAL_COM_ERROR -- Global error variable. Valid values: 0 -- no error; -1 -- no COMM_PORT in this member of the array; -2 -- attempt to open an already open port in com_open(); */ short global_com_error = 0; WORD portindex = 0; short use_ctrl_brk = TRUE; short checkdcd = FALSE; /* file xfer routines check for loss of carrier */ /* C_OPEN -- Open a communications port in a way analogous to a file. Return value: 0 Success; PORT_ALREADY_OPEN Error; NO_AVAILABLE_PORT Error; */ short c_open_(COMM_PORT *p) { short i; /* CHECK IF PORT IS ALREADY OPEN */ if (p->open == TRUE) return (PORT_OPEN); /* CHECK THAT WE HAVE NOT EXCEEDED THE MAXIMUM PORT CONFIGURATION */ for (i=0; i< MAX_PORTS; i++) { if (mcport[i] == NULL) { mcport[i] = (COMM_PORT FAR_ *) p; break; } } if (i == MAX_PORTS) return (NO_PORT); p->portnum = i; p->open = TRUE; portindex++; set_loopback(p, OFF); set_dtr(p, p->dtr); set_rts(p, p->rts); set_speed(p, p->speed); set_parity(p, p->parity); set_stopbits(p, p->stopbits); set_databits(p, p->rxdatabits); /* CONSOLE DRIVER */ if (p->con_out == NULL) p->con_out = (short (*)(COMM_PORT *, short)) conoutc; #if (!defined(CTF)) /* INSTALL CTRL-BREAK AND CTRL-C HANDLERS */ if (use_ctrl_brk && portindex == 1) install_ctrl_brk_((void FAR_ *) cct_ctrl_brk_); /* REGISTER THE 'atexit' FUNCTION */ if (!p->portnum) atexit(deinit_all_ports); #endif return (0); } /* C_CLOSE -- Close the designated port. Return values: 0 -- normal return; PORT_CLOSED -- port is already closed; */ short c_close_(COMM_PORT *p) { short ret = PORT_CLOSED; if (p->open == TRUE) { ret = (*p->deinit_port)(p); mcport[p->portnum] = NULL; portindex--; p->open = FALSE; p->portnum = EOF; if (!portindex) { if (cct_warpdrive) set_warpdrive(0); #if !defined(CTF) if (use_ctrl_brk) deinstall_ctrl_brk_((void FAR_ *)cct_ctrl_brk_); #endif } } return (ret); }