/*  checks.h -- header file for check register program                       */

/*  copyright (c) 1986 by Jim Woolley and WoolleyWare, San Jose, CA          */

/*  vers. 1.0, 12/85 thru 5/86
 *
 *  vers. 1.2, 7/86
 *  revised ROWS to avoid writing last column of last row w/ auto scrolling
 *  reduced PAGE
 *  added _Keymap, _Leadin, _Funkey, _Newkey, and _Savech
 *  integrated CLEARS using #ifdef
 */

#include    "a:bdscio.h"

#ifdef  CLEARS

#define     BBF             "SUMMARY BROUGHT FORWARD"
#define     USECHEX         "Use CHECKS program to "
#define     ENTRYSIZE       384              /*  max entries (see Entry)     */
#define     MAXFIELD        2                /*  number of displayed fields  */
#define     CLRFIELD        ( MAXFIELD - 1)  /*  Entry->clear field          */
#define     CATFIELD        ( MAXFIELD - 2)  /*  Entry->category field       */

#else   /*  not CLEARS  */

#define     BBF             "BALANCE BROUGHT FORWARD"
#define     ENTRYSIZE       128              /*  max entries (see Entry)     */
#define     MAXFIELD        8                /*  number of displayed fields  */
#define     CLRFIELD        ( MAXFIELD - 1)  /*  Entry->clear field          */
#define     DEPFIELD        ( MAXFIELD - 2)  /*  Entry->deposit field        */
#define     AMTFIELD        ( MAXFIELD - 3)  /*  Entry->amount field         */
#define     CATFIELD        ( MAXFIELD - 4)  /*  Entry->category field       */
#define     PAYFIELD        ( MAXFIELD - 5)  /*  Entry->payee field          */
#define     YYFIELD         ( MAXFIELD - 6)  /*  Entry->year field           */
#define     DDFIELD         ( MAXFIELD - 7)  /*  Entry->date field           */
#define     MMFIELD         ( MAXFIELD - 8)  /*  Entry->month field          */

#endif

#define     PAYEEFILL       '_'         /*  used to fill Payee               */
#define     DEPCLRFIL       "    "      /*  used to fill DEP and CLR         */
#define     DEFCAT          ' '         /*  default category code            */
#define     CLRCOM          "     "     /*  clear command display            */

#define     PAYEESIZE       43          /*  max chars in Entry->payee        */
#define     HASHSIZE        64          /*  size of abrev. hash table        */
#define     FNAMSIZE        15          /*  max chars in Filename            */
#define     CLRSIZE         384         /*  max records in CLR file          */
#define     COLS            80          /*  number of screen columns         */
#define     ROWS            23          /*  number of screen rows minus 1 to */
                                        /*  avoid writing last row and col   */
#define     HEAD            6           /*  number of heading rows           */
#define     LAST            ( ROWS - HEAD - 1)
#define     PAGE            ( ROWS - HEAD - 4)
#define     BALCOL          ( COLS - 9) /*  where Balance display starts     */
#define     AMTCOL          54          /*  where amount display starts      */
#define     DLOOP           250         /*  loops for 100 msec on 4 MHz Z80  */
#define     MAXDOLLAR       999         /*  max dollar entry (see edamount)  */

#define     CTRLA           0x01        /*  ASCII definitions                */
#define     CTRLB           0x02
#define     CTRLC           0x03
#define     CTRLD           0x04
#define     CTRLE           0x05
#define     CTRLF           0x06
#define     CTRLG           0x07
#define     BEL             0x07
#define     CTRLH           0x08
#define     BS              0x08
#define     CTRLI           0x09
#define     HT              0x09
#define     CTRLJ           0x0a
#define     LF              0x0a
#define     CTRLK           0x0b
#define     CTRLL           0x0c
#define     FF              0x0c
#define     CTRLM           0x0d
#define     CR              0x0d
#define     CTRLN           0x0e
#define     CTRLO           0x0f
#define     CTRLP           0x10
#define     CTRLQ           0x11
#define     CTRLR           0x12
#define     CTRLS           0x13
#define     CTRLT           0x14
#define     CTRLU           0x15
#define     CTRLV           0x16
#define     CTRLW           0x17
#define     CTRLX           0x18
#define     CTRLY           0x19
#define     CTRLZ           0x1a
#define     CTRL_           0x1f
#define     ESC             0x1b
#define     DEL             0x7f
#define     CTRLTOA         0x40        /*  offset CTRL to upper case alpha  */

#define     DEFNAM          "CHECKS."   /*  default filename                 */
#define     SCRTYP          "SCR"       /*  screen controls/messages         */
#define     DATTYP          "DAT"       /*  Entry data                       */
#define     BAKTYP          "BAK"       /*  Entry data backup                */
#define     CLRTYP          "CLR"       /*  cleared entries                  */
#define     TMPTYP          "$$$"       /*  temporary file                   */
#define     INFTYP          "INF"       /*  TITLE, ABREV, and AUTOM info     */

#define     NO              FALSE
#define     YES             TRUE

#define     isprint( c)     !iscntrl( c)
#define     FOREVER         for ( ; ; )                /*  loop forever      */

/*  define additional global variables and data structures                   */

struct calendar                         /*  month, day, year                 */
    {
    char mm, dd, yy;
    } Today;

struct money                            /*  example:  $1234.56               */
    {                                   /*      dollar = 12, cent = 3456     */
    int dollar;                         /*  $/100 (range of signed int)      */
    int cent;                           /*  $%100 + cents (-9999 to +9999)   */
    } Memory, Balance[ ENTRYSIZE];

struct record                           /*  one entry                        */
    {
    struct calendar date;
    char payee[ PAYEESIZE], category;
    struct money amount;
    char deposit, clear;
    } Entry[ ENTRYSIZE], Entryundo;

#define     RECSIZ          ( sizeof( Entry[ 0]))

char *alloc(), *index(), *skipspace(), *strsave(), witch(), help();
char putcommand(), putcntrl(), putnext(), doscroll();
char eddate(), edamount(), eddeposit(), edclear(), edcategory(), edpayee();

#ifdef  CLEARS

char Modified, Ctrlyundo, Printing, Inserton, *Usechex;
char Filename[ FNAMSIZE], Ftoc[ MAXFIELD];
char Title[ COLS - FNAMSIZE - 2];       /*  (COLS-1) - (5+2+FNAMSIZE-5) + 1  */

int First, Last, Maxentry, Recno, Field, Oldfield, Speed;
int Dloop;

#else   /*  not CLEARS  */

char Modified, Ctrlyundo, Printing, Inserton;
char Filename[ FNAMSIZE], Savpayee[ PAYEESIZE], Ftoc[ MAXFIELD];
char Title[ COLS - FNAMSIZE - 2];       /*  (COLS-1) - (5+2+FNAMSIZE-5) + 1  */

int First, Last, Maxentry, Recno, Field, Oldfield, Character, Speed, Savrecno;
int Dloop;

struct nlist                            /*  ref. K & R, p. 135               */
    {
    char *abrev, *fullname;
    struct nlist *next;
    } *Hashtab[ HASHSIZE], *install(), *lookup();

#endif

/*  the following global variables mimic WordStar cursor/screen controls     */

char Clead1[ 9], Clead2[ 5], Ctrail[ 5], Cb4flg, Linoff, Coloff, Ascur;
char Eraeol[ 7], Lindel[ 7], Linins[ 7], Ivon[ 7], Ivoff[ 7], Trmini[ 9];

/*  The functions getchar(), ungetch( c), putchar( c), and kbhit() are defined
 *  in checkx.c to provide char I/O without BDOS interaction; therefore, ^C, ^S,
 *  ^Q, and ^P will have no effect during console I/O.  For putchar( c), the
 *  global variable _Outdev MUST be initialized to CONOUT for screen output;
 *  _Outdev may be temporarily set to LSTOUT for printer output, then reset to
 *  CONOUT.  For getchar() and ungetch( c), the global variable _Lastch MUST be
 *  initialized to 0.  Note that getc( 0) may NOT be equivalent to getchar()
 *  and putc( c, 1) may NOT be equivalent to putchar( c); however, each may be
 *  expected to function normally (using BDOS).  The object file checkx.crl MUST
 *  be linked with the Check Register Program.
 */

#define     CONOUT          4           /*  BIOS console output              */
#define     LSTOUT          5           /*  BIOS list output                 */
char        _Outdev;                    /*  global variable for putchar( c)  */
char        _Lastch;                    /*  global for getchar()/ungetch()   */
char        _Keymap[ 32];               /*  CTRL key translation table       */
char        _Leadin;                    /*  function key lead character      */
char        _Funkey[ 10][ 2];           /*  function key table               */
char        _Newkey[ 10][ 2];           /*  result of function key           */
char        _Savech[ 2];                /*  stack of previous characters     */
