907 lines
26 KiB
Plaintext
907 lines
26 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
ProModem RS232 Interrupt Driven Serial Communication Library v1.5
|
||
|
||
|
||
Written By Adrian J. Michaud
|
||
|
||
(C) Interactive Telecommunication Systems 1992-1993
|
||
|
||
Release Date: 01/20/93
|
||
|
||
|
||
|
||
Table Of Contents
|
||
-----------------
|
||
|
||
Page
|
||
|
||
Introduction 1
|
||
Features/Supported Compilers 2
|
||
Registration 3
|
||
Ording Form 4
|
||
|
||
SetupControlBlock() 5
|
||
OpenCom() 6
|
||
CloseCom() 7
|
||
SendCharacter() 8
|
||
CheckQueue() 9
|
||
GetCharacter() 10
|
||
ClearQueue() 11
|
||
GetCarrierDetect() 12
|
||
SetBaudRate() 13
|
||
SetDTR() 14
|
||
DropDTR() 15
|
||
SetDataFormat() 16
|
||
SendString() 17
|
||
SetFIFOMode() 18
|
||
SetFIFOTriggerLevel() 19
|
||
WaitForCharacter() 20
|
||
DisableIRQ() 21
|
||
EnableIRQ() 22
|
||
DisableCTSRTS() 23
|
||
EnableCTSRTS() 24
|
||
GetCTSRTSStatus() 25
|
||
|
||
TERMINAL.C - Example Terminal Program source file 26
|
||
BBS.C - Example Bulletin Board source file 27
|
||
|
||
If you are having trouble using ProModem 28
|
||
|
||
|
||
|
||
Page 1 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
Introduction
|
||
------------
|
||
|
||
ProModem is a High Performance Interrupt Driven RS232 serial
|
||
communication library that can be used for creating a Computerized
|
||
Bulletin Board System, a Terminal program, a RS232 Networking Driver,
|
||
or for RS232 Host to Host communications. ProModem supports the following
|
||
UARTS: PC16550C, NS16550AF, PC16550CF, 16450, and the 8250. ProModem takes
|
||
full advantage of a 16550 by enabling the 16 character FIFO to relieve
|
||
the CPU of excessive software overhead. When using a 16550, internal
|
||
FIFOs are activated allowing 16 bytes (plus 3 bits of error data per
|
||
byte in the RCVR FIFO) to be stored in both receive and transmit modes.
|
||
All the logic is on chip to minimize system overhead and maximize
|
||
system efficiency.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 2 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
Features
|
||
--------
|
||
|
||
|
||
ProModem contains the following features:
|
||
|
||
o Interrupt driven INPUT directly VIA 8259 Peripheral Interrupt Controller.
|
||
o Full 16550 FIFO support with selectable trigger levels.
|
||
o Supports user definable Base Addresses using IRQ3 or IRQ4.
|
||
o Automatic CTS/RTS Hardware Handshaking for Asynchronous Devices.
|
||
o Baud rates up to 115k bits per second.
|
||
o Handles unlimited Open Com Ports using IRQ3 and IRQ4.
|
||
(overruns might occur with slow CPU's or High Baud Rates of course).
|
||
o Supports both ISA (PC AT) and MCA (PS 2) machines
|
||
o Small, (Large, and Huge memory models available to registered users).
|
||
|
||
|
||
'C' Compilers Supported
|
||
-----------------------
|
||
|
||
Microsoft C - v5.1, v6.0, QuickC v2.5, and C/C++ v7.0
|
||
Borland TurboC - v1.0, v2.0, v3.0, v3.1
|
||
|
||
|
||
|
||
Page 3 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
Registration
|
||
------------
|
||
|
||
ProModem is not a public domain program and is not free. ProModem is
|
||
Copyright (C) 1993 by Interactive Telecommunication Systems. Non-registered
|
||
users of this library are granted a limited one month license to ProModem
|
||
to evaluate the libraries suitability for their requirements. Any usage of
|
||
ProModem beyond evaluation time period requires registration of each copy of
|
||
the library used. Use of non-registered copies of ProModem beyond the
|
||
original evaluation period is prohibited.
|
||
|
||
The Shareware version of ProModem has been built with a small model.
|
||
When you register ProModem you will receive FULL printed documentation
|
||
along with a LARGE and a HUGE library for all compilers supported.
|
||
Source code to all memory models for all supported compilers is
|
||
also part of the registration package.
|
||
|
||
There are two ways to register. The first is by sending $25 to
|
||
Interactive Telecommunication Systems along with a registration form.
|
||
Non U.S. residents, please send checks drawn on U.S. funds. We will accept
|
||
non U.S. currency, but you must include an additional $5 (US) to cover
|
||
exchange handling. Also add $5 overseas shipping/handling. See the page 4
|
||
for the ordering form and ordering information.
|
||
|
||
|
||
|
||
Page 4 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
ProModem Ordering Form
|
||
----------------------
|
||
|
||
Please Remit To: Eutecnics
|
||
C/O Adrian J. Michaud - ProModem!
|
||
30 Nagog Pk., Suite 105
|
||
Acton, Ma 01720
|
||
|
||
Qty. Description Each Total
|
||
|
||
____ ProModem Registration with 3.5" diskette $25.00 ________
|
||
Includes ALL memory models with Source
|
||
Code and a printed Manual. MSC & TC.
|
||
|
||
____ ProModem Registration with 5.25" diskette $25.00 ________
|
||
Includes ALL memory models with Source
|
||
Code and a printed Manual. MSC & TC.
|
||
|
||
(U.S. orders add $2 shipping & handling) Shipping ________
|
||
(Foreign orders add $5 shipping)
|
||
|
||
(Add $5 for Foreign Currency Exchange) Misc. Charges ________
|
||
|
||
(MA residents please add 7.25% sales tax) Tax ________
|
||
|
||
TOTAL $________
|
||
|
||
Name: _________________________________________________________________
|
||
|
||
Company: _________________________________________________________________
|
||
|
||
Address: _________________________________________________________________
|
||
|
||
_________________________________________________________________
|
||
|
||
_________________________________________________________________
|
||
|
||
Where did you obtain ProModem? ( ) Friend ( ) Shareware House ( ) Other
|
||
( ) BBS ( ) User Group __________
|
||
|
||
All checks or money orders must be drawn on U.S. Funds in U.S. Dollars.
|
||
Sorry, no C.O.D. orders will be accepted.
|
||
|
||
Make All Checks Payable to: Interactive Telecommunication Systems
|
||
|
||
|
||
|
||
Page 5 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: int SetupControlBlock(AJMS *controlBlock,
|
||
unsigned int baseAddress,
|
||
int irq,
|
||
unsigned int bufferSize);
|
||
|
||
Description: Sets up a control block for a specific com port and IRQ
|
||
number. This is the first function that is always used when
|
||
preparing to communicate to a COM port. Each com port that
|
||
will be opened requires a different control block.
|
||
|
||
Return Value: SUCCESSFUL - Setup was successful.
|
||
TOO_MANY_IRQS - Too many mounted com ports.
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
main()
|
||
{
|
||
AJMS controlBlock;
|
||
|
||
/* This sets up a control block for COM1 (0x3f8), IRQ4, and a
|
||
4096 Byte receive Buffer.
|
||
*/
|
||
|
||
SetupControlBlock(&controlBlock , 0x3f8 , 4 , 4096);/*Init Control Block*/
|
||
OpenCom(&controlBlock); /*Open COM port */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
Page 6 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: int OpenCom(AJMS *controlBlock);
|
||
|
||
Description: Opens a COM port for communication. This function allocates
|
||
an IRQ buffer and sets up the UART for communication.
|
||
DTR (Data Terminal Ready) is turned ON when port is opened.
|
||
CTS (Clear To Send) and RTS (Request To Send) hardware
|
||
handshaking is automaticly turned ON if detected when
|
||
the com port is opened.
|
||
|
||
Return Value: BUFFER_ALLOCATION_ERROR - Could not allocate IRQ buffer.
|
||
COM_ALREADY_OPEN - Port is already open and ready.
|
||
COM_PORT_NOT_READY - Unable to Talk To Serial Device.
|
||
SUCCESSFUL - COM port successfully opened.
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up. */
|
||
|
||
OpenCom(&controlBlock); /* Open COM port */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 7 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: int CloseCom(AJMS *controlBlock);
|
||
|
||
Description: Closes a previously opened COM port. This de-allocates the
|
||
IRQ buffer that was allocated by OpenCom() and restores
|
||
the UART to its previous state before it was opened.
|
||
|
||
Return Value: COM_PORT_NOT_OPEN - COM port was not previously Opened.
|
||
SUCCESSFUL - COM port successfully closed and IRQ
|
||
buffer has been de-allocated.
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
CloseCom(&controlBlock); /*Close COM port */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 8 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: int SendCharacter(AJMS *controlBlock, unsigned char ch);
|
||
|
||
Description: Sends a character to the COM port.
|
||
|
||
Return Value: CARRIER - If there is a carrier.
|
||
NO_CARRIER - If there isn't a carrier.
|
||
|
||
Also see: SendString()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
unsigned char ch; /* Allocate ch on the stack */
|
||
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
ch = (unsigned char)getch(); /* Get a character from the keyboard */
|
||
SendCharacter(&controlBlock, ch); /* Send character to COM port */
|
||
}
|
||
|
||
|
||
|
||
|
||
Page 9 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: int CheckQueue(AJMS *controlBlock);
|
||
|
||
Description: Checks the status of the IRQ receive buffer.
|
||
|
||
Return Value: CHARACTERS_WAITING - If there are characters in queue.
|
||
QUEUE_EMPTY - If queue is empty.
|
||
|
||
Also see: GetCharacter(), ClearQueue(), WaitForCharacter()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
if (CheckQueue(&controlBlock) == CHARACTERS_WAITING) /* Check Queue */
|
||
printf("%c", GetCharacter(&controlBlock)); /* Print one byte from Queue */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 10 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: int GetCharacter(AJMS *controlBlock);
|
||
|
||
Description: Gets a single character from Receive IRQ Queue.
|
||
|
||
Return Value: First Character that was placed in the receive Queue.
|
||
The receive queue expands as more characters are
|
||
received. GetCharacter() takes the first character
|
||
from the queue and returns it as an (int) with the
|
||
high byte masked.
|
||
|
||
Also see: CheckQueue()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
if (CheckQueue(&controlBlock) == CHARACTERS_WAITING) /* Check Queue */
|
||
printf("%c", GetCharacter(&controlBlock)); /* Print one byte from Queue */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 11 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: void ClearQueue(AJMS *controlBlock);
|
||
|
||
Description: Clears the contents of the Receive IRQ Queue.
|
||
This insures that there are no pending characters
|
||
in the Receive IRQ Queue.
|
||
|
||
Return Value: None.
|
||
|
||
Also see: CheckQueue()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
ClearQueue(&controlBlock); /* Clears the Receive IRQ Queue */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 12 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: int GetCarrierDetect(AJMS *controlBlock);
|
||
|
||
Description: Checks the status of the DCD (Data Carrier Detect) line
|
||
on the serial port. This is used to detect if a modem
|
||
has a carrier or not.
|
||
|
||
Return Value: CARRIER - If there is a carrier.
|
||
NO_CARRIER - If there isn't a carrier.
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
if (GetCarrierDetect(&controlBlock) == NO_CARRIER) /* Check DCD */
|
||
printf("\nThere is no Carrier\n"); /* Display Loss of Carrier. */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 13 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: void SetBaudRate(AJMS *controlBlock, unsigned long baudRate);
|
||
|
||
Description: Sets up the baud rate for the serial port.
|
||
|
||
Return Value: None.
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
SetBaudRate(&controlBlock, (unsigned long)38400); /* set to 38.4k Baud */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 14 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: void SetDTR(AJMS *controlBlock);
|
||
|
||
Description: Turns ON the DTR (Data Terminal Ready) line on the
|
||
serial port. OpenCom() automaticly turns on DTR
|
||
when a COM port is initially opened. DTR needs to
|
||
be turned on to talk to a modem.
|
||
|
||
Return Value: None.
|
||
|
||
Also see: DropDTR()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
SetDTR(&controlBlock); /* Turns on DTR (Data Terminal Ready) */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 15 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: void DropDTR(AJMS *controlBlock);
|
||
|
||
Description: Turns OFF the DTR (Data Terminal Ready) line on the
|
||
serial port. CloseCom() does NOT automatically turn
|
||
OFF DTR. Some modems when set up correctly will
|
||
drop carrier when DTR is toggled from ON->OFF->ON.
|
||
Your modem manual will explain more about this
|
||
and how to set up your modem to respond to DTR.
|
||
|
||
Return Value: None.
|
||
|
||
Also see: SetDTR()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
DropDTR(&controlBlock); /* Turns off DTR (Data Terminal Ready) */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 16 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: void SetDataFormat(AJMS *controlBlock, int options);
|
||
|
||
Description: Sets the Data format for a COM port. OpenCom()
|
||
automatically sets the COM port to 8 Bits, 1 stop,
|
||
no parity. To override this, use this function.
|
||
|
||
Return Value: None.
|
||
|
||
Example Usage:
|
||
|
||
/* BITS_7 - Sets COM port for 7 bits */
|
||
/* BITS_6 - Sets COM port for 6 bits */
|
||
/* BITS_7 - Sets COM port for 7 bits */
|
||
/* BITS_8 - Sets COM port for 8 bits */
|
||
/* STOP_BITS_1 - Sets COM port for 1 stop bit */
|
||
/* STOP_BITS_2 - Sets COM port for 2 stop bits */
|
||
/* PARITY_ON - Sets COM port to use parity */
|
||
/* NO_PARITY - Sets COM port not to use a parity bit */
|
||
/* EVEN_PARITY - Sets COM port to use even parity */
|
||
/* ODD_PARITY - Sets COM port to use odd parity */
|
||
/* STICK_PARITY - Sets COM port to use stick parity */
|
||
/* SET_BREAK - Sets COM port to set break */
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
/* Sets COM port for 8-N-1, simply Bitwise OR anything you want. */
|
||
SetDataFormat(&controlBlock, BIT_8 | NO_PARITY | STOP_BITS1);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 17 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: int SendString(AJMS *controlBlock, char *string);
|
||
|
||
Description: Sends a NULL terminated string to the COM port.
|
||
|
||
Return Value: CARRIER - If there was a carrier while sending string.
|
||
NO_CARRIER - If there wasn't a carrier while sending string.
|
||
|
||
Also see: SendCharacter()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
SendString(&controlBlock, "\nHello World!"); /* Send string to COM port */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 18 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: SetFIFOMode(AJMS *controlBlock);
|
||
|
||
Description: Turns on the FIFO buffer for a COM port. This will only
|
||
work with a UART 16550.
|
||
|
||
Return Value: FIFO_ENABLED - The FIFO has been enabled.
|
||
NO_FIFO_PRESENT - No FIFO present (16550 Uarts ONLY)
|
||
|
||
Also see: SetFIFOTriggerLevel()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
/* Try to enable the FIFO */
|
||
if (SetFIFOMode(&controlBlock)==FIFO_ENABLED)
|
||
printf("\nFIFO has been enabled.");
|
||
else
|
||
printf("\nNo FIFO Present, not a 16550.");
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 19 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: SetFIFOTriggerLevel(AJMS *controlBlock, unsigned char mode);
|
||
|
||
Description: Sets the FIFO trigger level for the RCVR FIFO Interrupt.
|
||
This only works with a UART 16550.
|
||
|
||
Return Value: None.
|
||
|
||
Also see: SetFIFOMode()
|
||
|
||
Example Usage:
|
||
|
||
/* FIFO_1_TRIGGER - IRQ will trigger with 1 byte in FIFO buffer */
|
||
/* FIFO_4_TRIGGER - IRQ will trigger with 4 bytes in FIFO buffer */
|
||
/* FIFO_8_TRIGGER - IRQ will trigger with 8 bytes in FIFO buffer */
|
||
/* FIFO_16_TRIGGER - IRQ will trigger with 16 bytes in FIFO buffer */
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
/* Sets FIFO to trigger on 16 characters in RCVR buffer */
|
||
SetFIFOTriggerLevel(&controlBlock, FIFO_16_TRIGGER);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 20 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: int WaitForCharacter(AJMS *controlBlock, double seconds);
|
||
|
||
Description: Waits for a character to be received in the IRQ receive
|
||
queue for a specified number of seconds.
|
||
|
||
Return Value: (int) - Character received (high byte masked)
|
||
WAIT_TIME_OUT - Time out, no character received.
|
||
|
||
Also see: GetCharacter()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
unsigned char ch;
|
||
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
/* wait 3.5 seconds for a character, or timeout */
|
||
ch = WaitForCharacter(&controlBlock, 3.50);
|
||
if (ch==WAIT_TIME_OUT)
|
||
printf("\nTimeout, no character received.\n");
|
||
else
|
||
printf("\nHere is the character '%c'\n", ch);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 21 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: DisableIRQ(AJMS *controlBlock);
|
||
|
||
Description: Turns OFF the IRQ vector and restores it to the
|
||
original vector before the com port was opened.
|
||
This should ALWAYS be done if you are doing any spawning
|
||
that swaps your program to Disk or EMS.
|
||
|
||
Return Value: None.
|
||
|
||
Also see: EnableIRQ()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
DisableIRQ(&controlBlock); /* Restores IRQ vector to original */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 22 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: EnableIRQ(AJMS *controlBlock);
|
||
|
||
Description: Sets up the IRQ vector to point to ProModem's serial
|
||
receive IRQ internal routine. This should only be used
|
||
if DisableIRQ() was previously called. OpenCom()
|
||
automatically sets up the IRQ vector when the com port
|
||
is originally opened.
|
||
|
||
Return Value: None.
|
||
|
||
Also see: DisableIRQ()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
EnableIRQ(&controlBlock); /* Sets IRQ vector to point to ProModem's IRQ */
|
||
}
|
||
|
||
|
||
|
||
|
||
Page 23 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: DisableCTSRTS(AJMS *controlBlock);
|
||
|
||
Description: Turns OFF CTS/RTS Hardware handshaking.
|
||
|
||
Return Value: None.
|
||
|
||
Also see: EnableCTSRTS()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
DisableCTSRTS(&controlBlock); /* Disables CTS/RTS Hardware Handshaking */
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Page 24 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: EnableCTSRTS(AJMS *controlBlock);
|
||
|
||
Description: Turns ON CTS/RTS Hardware handshaking.
|
||
|
||
Return Value: None.
|
||
|
||
Also see: DisableCTSRTS()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
EnableIRQ(&controlBlock); /* Enables CTS/RTS Hardware Handshaking */
|
||
}
|
||
|
||
|
||
|
||
|
||
Page 25 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
|
||
Function: GetCTSRTSStatus(AJMS *controlBlock);
|
||
|
||
Description: Gets the status of the CTS/RTS state.
|
||
|
||
Return Value: ENABLED - CTS/RTS hardware handshaking is enabled.
|
||
DISABLED - CTS/RTS hardware handshaking is disabled.
|
||
|
||
Also see: DisableCTSRTS(), DisableCTSRTS()
|
||
|
||
Example Usage:
|
||
|
||
#include "promodem.h"
|
||
example()
|
||
{
|
||
extern AJMS controlBlock; /* Assumes a control block has previously */
|
||
/* been set up and the COM port is OPEN */
|
||
|
||
if (GetCTSRTSStatus(&controlBlock) == ENABLED) /* Check CTS/RTS */
|
||
printf("\nCTS/RTS is enabled!");
|
||
else
|
||
printf("\nCTS/RTS is disabled!");
|
||
}
|
||
|
||
|
||
|
||
Page 26 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
TERMINAL.C - Example terminal program using ProModem.
|
||
|
||
TERMINAL.C is a demo program written using the routines in the
|
||
ProModem library to demonstrate the library functions.
|
||
|
||
To build the program you need to have the PROMODEM.H file that came in
|
||
the archive and the PROM_TC.LIB or PROM_MSC.LIB to link with.
|
||
Once you have the correct LIBs and .H files in your INCLUDE and
|
||
LIB directories, compile and link:
|
||
|
||
nmake PROMODEM.MAK ;Microsoft QuickC
|
||
cl terminal.c /link PROM_MSC.LIB ;Microsoft C
|
||
tcc terminal.c PROM_TC.LIB ;Turbo C
|
||
|
||
TERMINAL.C is yours to do what you want with.
|
||
|
||
NOTE: With Microsoft compilers, you must <<TURN OFF>> the DEBUG flag
|
||
if it is set.
|
||
|
||
|
||
|
||
Page 27 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
BBS.C - Example Bulletin Board System using ProModem.
|
||
|
||
BBS.C is a demo BBS program written using the routines in the
|
||
ProModem library to demonstrate the library functions.
|
||
|
||
To build the program you need to have the PROMODEM.H file that came in
|
||
the archive and the PROM_TC.LIB or PROM_MSC.LIB to link with.
|
||
Once you have the correct LIBs and .H files in your INCLUDE and
|
||
LIB directories, compile and link:
|
||
|
||
nmake BBS.MAK ;Microsoft QuickC
|
||
cl bbs.c /link PROM_MSC.LIB ;Microsoft C
|
||
tcc bbs.c PROM_TC.LIB ;Turbo C
|
||
|
||
BBS.C is yours to do what you want with.
|
||
|
||
NOTE: With Microsoft compilers, you must <<TURN OFF>> the DEBUG flag
|
||
if it is set.
|
||
|
||
|
||
|
||
|
||
Page 28 - ProModem Users Manual Interactive Telecommunication Systems
|
||
|
||
Having Problems with ProModem?
|
||
------------------------------
|
||
|
||
The original ProModem version 1.0 lacked CTS/RTS hardware handskaking.
|
||
ProModem Version 1.5 now includes support for CTS (Clear To Send)
|
||
and RTS (Request To Send) hardware handshaking. Version 1.5 is the
|
||
latest version of ProModem as of 01/20/93.
|
||
|
||
If you are having trouble getting ProModem to work, or have any questions
|
||
about ProModem, please feel free to call my BBS (written using ProModem)
|
||
at 617-581-1039 (2400 - 14,400 Baud) HST/V.32bis. Leave a message
|
||
stating that you are a ProModem user and would like support. You will then
|
||
be granted an account.
|
||
|
||
I can be reached voice at 617-595-8912 after 8:00 PM EST.
|
||
|