/* Turbo C - (C) Copyright 1987, 1988 by Borland International */ #define S_IREAD 0x0100 /* from SYS\STAT.H */ #define S_IWRITE 0x0080 /* from SYS\STAT.H */ #define TRUE 1 #define FALSE 0 #define MSGHEADER "MICROCALC - A Turbo C Demonstration Program" #define MSGKEYPRESS "Press any key to continue." #define MSGCOMMAND "Press / for the list of commands" #define MSGMEMORY "Memory Available:" #define MSGERROR "ERROR" #define MSGLOMEM "Not enough memory to allocate cell." #define MSGEMPTY "Empty" #define MSGTEXT "Text" #define MSGVALUE "Value" #define MSGFORMULA "Formula" #define MSGAUTOCALC "AutoCalc" #define MSGFORMDISPLAY "Form" #define MSGFILENAME "Enter the file name of the spreadsheet:" #define MSGNAME "Turbo C MicroCalc Spreadsheet" #define MSGCOLWIDTH "Enter the new column width:" #define MSGNOOPEN "Can't open the file." #define MSGOVERWRITE "The file exists. Do you want to overwrite it?" #define MSGFILELOMEM "Not enough memory for entire spreadsheet." #define MSGNOMICROCALC "That is not a Turbo C MicroCalc spreadsheet." #define MSGNOEXIST "The file does not exist." #define MSGGOTO "Enter the cell to go to:" #define MSGBADNUMBER "You must enter a number from %d to %d." #define MSGBADCELL "That is not a legal cell." #define MSGCELL1 "Enter the first cell to format:" #define MSGCELL2 "Enter the last cell to format:" #define MSGDIFFCOLROW "The row or the column must be the same." #define MSGRIGHTJUST "Do you want the cell right-justified?" #define MSGDOLLAR "Do you want numbers in a dollar format?" #define MSGCOMMAS "Do you want commas in numbers?" #define MSGPLACES "How many decimal places should the number be rounded to?" #define MSGCOLUMNS "Do you want to print in 132 columns?" #define MSGPRINT "Enter the file name to print to, or press ENTER to print on the printer." #define MSGBORDER "Print the border?" #define MSGLOADING "Loading..." #define MSGSAVING "Saving..." #define MSGSAVESHEET "Save current spreadsheet?" #define MSGSTACKERROR "Parser stack overflow." #define MENU "Spreadsheet, Format, Delete, Goto, Col, Row, Edit, Utility, Auto, Quit" #define COMMAND "SFDGCREUAQ" #define SMENU "Load, Save, Print, Clear" #define SCOMMAND "LSPC" #define CMENU "Insert, Delete, Width" #define CCOMMAND "IDW" #define RMENU "Insert, Delete" #define RCOMMAND "ID" #define UMENU "Recalc, Formula display" #define UCOMMAND "RF" #define MAXCOLS 100 /* Maximum is 702 */ #define MAXROWS 100 #define LEFTMARGIN 3 #define MINCOLWIDTH 3 #define MAXCOLWIDTH 80 - LEFTMARGIN #define SCREENCOLS (80 - LEFTMARGIN) / MINCOLWIDTH + 1 #define SCREENROWS 20 #define DEFAULTWIDTH 10 #define DEFAULTFORMAT 0X42 #define MAXINPUT 79 #define MAXPLACES 8 #define TOPMARGIN 5 #define PARSERSTACKSIZE 20 #define TEXTCOLOR WHITE #define ERRORCOLOR LIGHTRED + BLINK #define VALUECOLOR LIGHTCYAN #define FORMULACOLOR LIGHTMAGENTA #define BLANKCOLOR BLACK #define HEADERCOLOR WHITE + (RED << 4) #define HIGHLIGHTCOLOR WHITE + (BLUE << 4) #define HIGHLIGHTERRORCOLOR WHITE + (BLUE << 4) + BLINK #define MSGAUTOCALCCOLOR LIGHTCYAN #define MSGFORMDISPLAYCOLOR LIGHTMAGENTA #define MSGMEMORYCOLOR LIGHTGREEN #define MSGHEADERCOLOR LIGHTCYAN #define PROMPTCOLOR YELLOW #define COMMANDCOLOR LIGHTCYAN #define LOWCOMMANDCOLOR WHITE #define MEMORYCOLOR LIGHTRED #define CELLTYPECOLOR LIGHTGREEN #define CELLCONTENTSCOLOR YELLOW #define HIGHLIGHT TRUE #define NOHIGHLIGHT FALSE #define UPDATE TRUE #define NOUPDATE FALSE #define FORMAT TRUE #define NOFORMAT FALSE #define LEFT 0 #define RIGHT 1 #define UP 2 #define DOWN 3 #define TEXT 0 #define VALUE 1 #define FORMULA 2 #define COLADD 0 #define COLDEL 1 #define ROWADD 2 #define ROWDEL 3 #define OVERWRITE 0X80 #define RJUSTIFY 0X40 #define COMMAS 0X20 #define DOLLAR 0X10 struct CELLREC { char attrib; union { char text[MAXINPUT + 1]; double value; struct { double fvalue; char formula[MAXINPUT + 1]; } f; } v; }; typedef struct CELLREC *CELLPTR; #if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__) #define memsize coreleft() - 1000 #define textcellsize(s) (((strlen(s) >> 1) + 3) << 1) #define valuecellsize 12 #define formulacellsize(s) (((strlen(s) >> 1) + 7) << 1) #else #define memsize farcoreleft() - 1000 #define textcellsize(s) (((strlen(s) >> 1) + 5) << 1) #define valuecellsize 16 #define formulacellsize(s) (((strlen(s) >> 1) + 9) << 1) #endif #define BS 8 #define FORMFEED 12 #define CR 13 #define ESC 27 #define HOMEKEY 327 #define ENDKEY 335 #define UPKEY 328 #define DOWNKEY 336 #define PGUPKEY 329 #define PGDNKEY 337 #define LEFTKEY 331 #define INSKEY 338 #define RIGHTKEY 333 #define DELKEY 339 #define CTRLLEFTKEY 371 #define CTRLRIGHTKEY 372 #define F1 315 #define F2 316 #define F3 317 #define F4 318 #define F5 319 #define F6 320 #define F7 321 #define F8 322 #define F9 323 #define F10 324 void initcursor(void); int getkey(void); int editstring(char *s, char *legal, int maxlength); int getint(int *number, int low, int high); void getinput(int c); void setcolor(int color); void scroll(int direction, int lines, int x1, int y1, int x2, int y2, int attrib); void setcursor(unsigned int shape); void writef(int col, int row, int color, int width, va_list arg_list, ...); void printcol(void); void printrow(void); void displaycell(int col, int row, int highlighting, int updating); void displaycol(int col, int updating); void displayrow(int row, int updating); void displayscreen(int updating); void clearinput(void); void changecursor(int insmode); void showcelltype(void); void initcolortable(void); double parse(char *s, int *att); int alloctext(int col, int row, char *s); int allocvalue(int col, int row, double amt); int allocformula(int col, int row, char *s, double amt); void deletecell(int col, int row, int display); void printfreemem(void); void moverowup(void); void moverowdown(void); void movecolleft(void); void movecolright(void); void recalc(void); void changeautocalc(int newmode); void changeformdisplay(int newmode); void errormsg(char *s); void colstring(int col, char *colstr); void centercolstring(int col, char *colstr); void setleftcol(void); void setrightcol(void); void settoprow(void); void setbottomrow(void); void movehighlight(void); void setlastcol(void); void setlastrow(void); void act(char *s); void initvars(void); int getcommand(char *msgstr, char *comstr); void mainmenu(void); void editcell(CELLPTR ecell); int setoflags(int col, int row, int display); void clearoflags(int col, int row, int display); void updateoflags(int col, int row, int display); void loadsheet(char *filename); int getcell(int *col, int *row); char *cellstring(int col, int row, int *color, int formatting); void writeprompt(char *prompt); int getyesno(int *yesno, char *prompt); void swap(int *val1, int *val2); void redrawscreen(void); void checkforsave(void); void savesheet(void); int formulastart(char **input, int *col, int *row); int rowwidth(int row); void fixformula(int col, int row, int action, int place); void clearlastcol(void); void run(void); void gotocell(void); #if !defined(MAIN) extern CELLPTR cell[MAXCOLS][MAXROWS], curcell; extern unsigned char format[MAXCOLS][MAXROWS]; extern unsigned char colwidth[MAXCOLS]; extern unsigned char colstart[SCREENCOLS]; extern char formdisplay; extern char changed; extern char autocalc; extern int leftcol, rightcol, toprow, bottomrow, curcol, currow, lastcol, lastrow, direction; extern long memleft; extern char stop; extern char matherror; extern unsigned int oldcursor, shortcursor, tallcursor, nocursor; #endif