#ifndef FOSSIL_H
#define FOSSIL_H

/*--------------------------------------------------------------------*/
/*       f o s s i l . h                                              */
/*                                                                    */
/*       UUPC/extended defines for accessing FOSSIL functions via     */
/*       INT 14 under MS-DOS.                                         */
/*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*/
/*    Changes Copyright (c) 1990-1993 by Kendra Electronic            */
/*    Wonderworks.                                                    */
/*                                                                    */
/*    All rights reserved except those explicitly granted by the      */
/*    UUPC/extended license agreement.                                */
/*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*/
/*                          RCS Information                           */
/*--------------------------------------------------------------------*/

/*
 *    $Id: FOSSIL.H 1.2 1993/05/30 15:27:22 ahd Exp $
 *
 *    Revision history:
 *    $Log: FOSSIL.H $
 * Revision 1.2  1993/05/30  15:27:22  ahd
 * Correct CTS high macro
 *
 * Revision 1.1  1993/05/30  00:16:35  ahd
 * Initial revision
 *
 */

/*--------------------------------------------------------------------*/
/*       FOSSIL function calls, taken from "Fundamentals of FOSSIL    */
/*       Implementation and Use:  Version 5, February 11, 1988 by     */
/*       Rick Moore of Solar Wind Computing.                          */
/*--------------------------------------------------------------------*/

#define FS_INTERRUPT 0x14        // Fossil uses INT 14

/*--------------------------------------------------------------------*/
/*       Function calls numbers, placed in AH before interrupt        */
/*--------------------------------------------------------------------*/

#define FS_SPEED     0x00        // Set speed, parity, stop bits, char len
#define FS_XMIT1     0x01        // Transmit one character (blocking write)
#define FS_RECV1     0x02        // Receive one character (blocking read)
#define FS_STATPORT  0x03        // Return port status
#define FS_OPENPORT  0x04        // Initialize port
#define FS_CLOSPORT  0x05        // Close port
#define FS_DTR       0x06        // Raise/lower DTR
#define FS_TIMESTAT  0x07        // Return system timer parameters
#define FS_XMITWAIT  0x08        // Wait for output queue to transmit
#define FS_XMITPURG  0X09        // Purge output queue w/o transmit
#define FS_RECVPURG  0x0a        // Purge unread input queue
#define FS_XMIT1NOW  0x0b        // Transmit one character (nonblocking)
#define FS_PEEK1     0x0c        // Non-destructive port read
#define FS_KEYBPEEK  0x0d        // Non-destructive keyboard read
#define FS_KEYBREAD  0x0e        // Destructive keyboard read (blocking)
#define FS_FLOWCNTL  0x0f        // Enable/disable flow control
#define FS_CNTLCHEK  0x10        // Enable/disable Cntl-C/Cntl-K checking
#define FS_SCURSOR   0x11        // Set screeen cursor location
#define FS_RCURSOR   0x12        // Read screen cursor location
#define FS_ANSICHAR  0x13        // Write character with ANSI control
#define FS_WATCHDOG  0x14        // Auto-reboot on lost carrier
#define FS_PUTCHAR   0x15        // BIOS level screen put
#define FS_TIMECHN   0x16        // Insert/delete items on timer chain
#define FS_REBOOT    0x17        // Perform Vulcan nerve pinch on system
#define FS_READBLOK  0x18        // Read block of data from port
#define FS_WRITBLOK  0x19        // Write block of data to port
#define FS_BREAK     0x1A        // Enable/disable break on port
#define FS_DRIVINFO  0x1B        // Get driver information

typedef struct _FS_INFO {        // Data returned by FS_DRIVINFO
   short size;                   // Data bytes returned
   char  version;                // FOSSIL specification version used
   char  revision;               // Driver revision level
   char  UUFAR *id;              // Pointer to ASCII driver id
   short inputSize;              // Input buffer size
   short inputFree;              // Bytes free in input queue
   short outputSize;             // Bytes queued for output;
   short outputFree;             // Bytes free in output queue
   char  width;                  // Screen width in characters
   char  height;                 // Screen height in characters
   char  baudmask;               // Baud rate in format used by FS_SPEED
} FS_INFO;

/*--------------------------------------------------------------------*/
/*              Define macros to perform basic functions              */
/*--------------------------------------------------------------------*/

#define FSSetSpeed( speed, parity, stopBits, charLen ) \
         FossilCntl(FS_SPEED, (char) \
                    ((speed << 5) | (parity << 3) | \
                    (stopBits << 2) | charLen))

#define FS_NO_PARITY    0
#define FS_NO_PARITYX   1
#define FS_ODD_PARITY   2
#define FS_EVEN_PARITY  3

#define FS_STOPBIT_1    0
#define FS_STOPBIT_15   1           // For five bit character only
#define FS_STOPBIT_2    1           // For all but five bit characters

#define FS_CHARLEN_5    0
#define FS_CHARLEN_6    1
#define FS_CHARLEN_7    2
#define FS_CHARLEN_8    3

#define FSOpen( )           FossilCntl(FS_OPENPORT, 0)

#define FS_COOKIE    0x1954      // Success result from FS_OPENPORT

#define FSClose( )          FossilCntl(FS_CLOSPORT, 0)

#define FSStatus( )         FossilCntl(FS_STATPORT, 0)

#define FS_STAT_OUTPEMPT   0x4000   // Output buffer empty
#define FS_STAT_OUTPROOM   0x2000   // Output buffer not full
#define FS_STAT_OVERRUN    0x0200   // Input buffer overrun
#define FS_STAT_INQUEUED   0x0100   // Characters in input buffer
#define FS_STAT_DCD        0x0080   // Data carrier detected

#define FSFlushXmit( )      FossilCntl(FS_XMITPURG, 0)

#define FSFlushRecv( )      FossilCntl(FS_RECVPURG, 0)

#define FSFlowControl(type) FossilCntl(FS_FLOWCNTL, (char) (0xf0 | (type)))

#define FS_NOFLOW   0x00
#define FS_XONXMIT  0x01
#define FS_CTSRTS   0x04
#define FS_XONRECV  0x08

#define FSDTR( onoroff )    FossilCntl(FS_DTR, onoroff)

#define FSBreak( onoroff )  FossilCntl(FS_BREAK, onoroff)

/*--------------------------------------------------------------------*/
/*        Define information for routines and data in fossil.c        */
/*--------------------------------------------------------------------*/

extern short portNum;        // Must be set by openline()

short FossilCntl( const char function, const char info );

#endif
