home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / math / pac / defs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-05  |  13.6 KB  |  375 lines

  1. /* defs.h */
  2. /**********************************************************************
  3. *    File Name     : defs.h
  4. *    Function      : definitions, declarations
  5. *                  :    this header is included in all .c files of pac
  6. *    Author        : Istvan Mohos, 1987
  7. ***********************************************************************/
  8.  
  9. #include <curses.h>
  10. #ifdef REALUNIX
  11. #include <fcntl.h>
  12. #else
  13. #include <sys/file.h>
  14. #endif
  15. #include <ctype.h>
  16. #include <signal.h>
  17. #include <math.h>
  18.  
  19. #ifdef TRACE
  20. #define _TR   if (Trace) fprintf(Tf,">%s%s\n",&Ttabs[Tlev--],fid);
  21. #define TR_   if (Trace) fprintf(Tf,"<%s%s\n",&Ttabs[++Tlev],fid);
  22. #else
  23. #define _TR
  24. #define TR_
  25. #endif
  26.  
  27. #define ZERO  (char *)0
  28.  
  29. #define LBOUND    1            /* left (inverse) edge of screen */
  30. #define RBOUND    78           /* right (inverse) edge of screen */
  31. #define TOP       1            /* top (inverse) edge of screen */
  32. #define BOT       23           /* bottom (inverse) edge of screen */
  33. #define UTOP      (TOP + 1)    /* user top of calculator window */
  34. #define UBOT      (TOP + 3)    /* user bottom of calculator window */
  35. #define ACCUM     (TOP + 4)    /* result line under calculator window */
  36. #define ACCUMAX   44           /* max calculator,result width */
  37. #define URIGHT    46           /* right user boundary of calculator */
  38. #define DIGMAX    32           /* max calculator (numeric) digits */
  39. #define ULEFT     3            /* left user calculator boundary */
  40. #define MSG       (TOP + 5)    /* vertical location of error message */
  41. #define MSGLEFT   4            /* left boundary of error message */
  42. #define STACKLEFT 3            /* left boundary of stack (base) */
  43. #define STACKTOP  (TOP + 6)    /* upper boundary of stack */
  44. #define STACKBOT  (TOP + 21)   /* lower boundary of stack */
  45. #define STACKMAX  36           /* max stack width (including base) */
  46. #define STACKDEEP 16           /* max number of stack cells */
  47. #define MYBUF    300           /* scratch display buffer */
  48.  
  49. #define ATOIX      50          /* leftmost char printed into ATOI */
  50. #define AMTY       7           /* vert location of loan AMT */
  51. #define PRCY       8           /* percent */
  52. #define YRY        9           /* years */
  53. #define PAYY      10           /* payment */
  54. #define DATY      11           /* start date */
  55. #define LOANX      44          /* leftmost char printed into LOAN */
  56. #define LOANSIZ    13          /* max width of LOAN line */
  57. #define LOANR      (LOANX + LOANSIZ - 1)
  58. #define STATMSG    44          /* leftmost char printed into STATUS */
  59. #define STATX      54          /* left edge of 3 char status flag */
  60. #define STATY      (TOP + 12)  /* ver location of first status string */
  61.  
  62.                                /* status defaults */
  63. #define PREC_DFLT  2           /* precision (# of digits past dp) */
  64. #define IB_DFLT    10          /* input base */
  65. #define OB_DFLT    10          /* output base */
  66. #define DISA       0
  67. #define ENA        1
  68. #define AP         2
  69. #define STACK_DFLT ENA         /* new result gets pushed on stack */
  70. #define COMMA_      1
  71. #define SPACE_      2
  72. #define FORM_DFLT  SPACE_       /* put commas or spaces in numbers */
  73. #define ED_DFLT    ENA         /* unimplemented */
  74. #define JL         0
  75. #define JF         1
  76. #define JR         2
  77. #define JUS_DFLT   JR          /* right, left, or fixed dp on right */
  78. #define SB_DFLT    DISA        /* radix change effects current string */
  79. #define SHOW_DFLT  DISA        /* don't pfresh until done */
  80. #define FVER       0
  81. #define FTER       1
  82. #define FXTER      2
  83. #define HF_DFLT    FVER        /* file dump verbose, terse or xterse */
  84.  
  85. #define REGLEFT    3           /* leftmost char of stack cell (base) */
  86. #define CONVLEFT   60          /* leftmost char of CONV. labels */
  87. #define KEYLEFT    74          /* leftmost char of CONV. 3 char key */
  88. #define FITCONV    (BOT - TOP - 1) /* max conv strings visible */
  89. #define CONVCOUNT  24          /* number of predefined conversions */
  90. #define FROMTOSIZ  14          /* conv. label size + \0 */
  91. #define KEYSIZ     4           /* conv key size + \0 */
  92. #define CONVMAX    (FROMTOSIZ + KEYSIZ - 1) /* conv string window siz */
  93. #define CENTER     11          /* non_curses pos. in conv window */
  94. #define CONVSEL    (CENTER - 1)/* original (default) selection */
  95.  
  96. #define TREQ       2           /* update requests to print top line */
  97. #define BREQ       9           /* update requests to print bottom line */
  98. #define MSGLEN    13
  99. #define FBOUND    (ULEFT + MSGLEN) /* where the screen fname starts */
  100. #define BUFSTOP   (FBOUND - ULEFT) /* where fname starts in buffer */
  101. #define TITSIZ    (RBOUND - ULEFT + 1)
  102. #define TALYREQ    1
  103. #define FILEREQ    2
  104. #define POSTREQ    3
  105. #define TOTLREQ    4
  106. #define TAPPREQ    5
  107. #define LOANREQ    6
  108. #define CONVREQ    7
  109. #define EDITREQ    8
  110.  
  111. #define NOTINLIST -1           /* not recognized by pac tokenizer */
  112. #define PIPEMAX   4096         /* guaranteed min size by UNIX */
  113. #define WINLINE   81           /* max screen line + \0 */
  114. #define LINEMAX   256          /* rough line size */
  115.  
  116. #define INIT        0          /* prior to curses, to die properly */
  117.  
  118. #define CYX       pyp=CY, pxp=CX
  119. #define PYX       move(CY=pyp, CX=pxp)
  120. /* all functions must return cursor to starting CY, CX coordinates */
  121.  
  122. #define E_SYNTAX    1          /* bc errors */
  123. #define E_DIVBY0    2
  124. #define E_EXPONENT  3
  125. #define E_OVERFLOW  4
  126. #define E_BCEXEC    5
  127.  
  128. struct stk_cell {
  129.     char cell[STACKMAX + 1];
  130.     struct stk_cell *link;
  131. };
  132.  
  133. struct stk_cell *find();
  134. char *pactok();                /* seems to be missing in 4.2BSD */
  135. char *bitwise();
  136. char *substivar();
  137. char *numform();
  138. char *getenv();
  139. char *calloc(), *malloc();
  140. char *ctime();
  141. char *strcat(), *strncat(), *strcpy(), *strncpy();
  142. char *gets();
  143. FILE *fopen();
  144. double atof();                    /* amortization variables */
  145. long time(), lseek();
  146. unsigned alarm();
  147. int  go_away();
  148. int  cdate();
  149.  
  150. #ifdef MAIN                    /* globals are defined in pac.c,
  151.                                   declared as externs elsewhere */
  152.  
  153. FILE *Tf = NULL;
  154. FILE *Dfp = NULL;
  155. char *Home, Rcfile[LINEMAX];      /* pac environment */
  156. int  Rcfd, Rcerr;
  157.  
  158. char *Cb[] = {
  159. "pac          PANEL CALCULATOR                    ATOI    ",
  160. "pac          PANEL CALCULATOR                    ATOI    "
  161. };
  162. char *Sb[] = {
  163. "pac          PANEL CALCULATOR                    ATOI     CONVERSIONS  TO   ",
  164. "pac          PANEL CALCULATOR                    ATOI          TOTAL        "
  165. };
  166. char *Titlq[TREQ];
  167. char *Basq[BREQ];
  168. char *Bb[] = {
  169. "TAB bye  <CTRL> Exit Redraw File Postpend Klock Globals Loan Newconv Total  ",
  170. "<CTRL> File Postpend Toggle_back  copy: a...t  up_down: A...S  transfer: T  ",
  171. "file  write: hardcopy                                                       ",
  172. "file  contd: hardcopy                                                       ",
  173. "total write: hardtotal                                                      ",
  174. "total contd: hardtotal                                                      ",
  175. "amort write: hardamort                                                      ",
  176. "new  value =                                                                ",
  177. "new formula:                                                                "
  178. };
  179. char *Hardname =
  180. "hardcopy                                                       ";
  181. char *Totname =
  182. "hardtotal                                                      ";
  183. char *Amortname =
  184. "hardamort                                                      ";
  185.  
  186. char Spreadbuf[PIPEMAX * 2];      /* expand user input for tokenizing */
  187. char Tokbuf[PIPEMAX];             /* strcomp against key list */
  188. char Mainbuf[PIPEMAX];            /* Mainbuf (result) from bc */
  189. char Convbuf[PIPEMAX];            /* converter result from bc */
  190. char Ubuf[PIPEMAX];               /* unrecognized tokens, to bc */
  191. char Controlbuf[PIPEMAX];         /* recognized tokens effect control */
  192. char *Tokp[PIPEMAX], *Last;       /* Spreadbuf pointers */
  193. char Rebuf[PIPEMAX];              /* work buffers */
  194. char Tmpbuf[PIPEMAX];
  195. char Mop[PIPEMAX];
  196. char Uwin_copy[(UBOT - UTOP + 1) * (URIGHT - ULEFT + 1)];
  197.  
  198. int Context   = INIT;             /* initial status values */
  199. int Justify   = JUS_DFLT;
  200. int Format    = FORM_DFLT;
  201. int Stack     = STACK_DFLT;
  202. int Hide      = 0;
  203. int Dontsave  = 0;
  204. int Clockstat = DISA;
  205. int Show      = SHOW_DFLT;
  206. int Autotime  = DISA;             /* no clock until user asks */
  207. int Hf        = HF_DFLT;
  208. int Ibase     = IB_DFLT;
  209. int Obase     = OB_DFLT;
  210. int Oldib     = IB_DFLT;
  211. int Oldob     = OB_DFLT;
  212. int Lastob    = OB_DFLT;
  213. int Staybase  = DISA;
  214. int Precision = PREC_DFLT;
  215. int Edhelp    = ED_DFLT;
  216. int Autoconv  = DISA;              /* Autoconverter feature */
  217. int Convcount = CONVCOUNT;
  218. int Convsel   = CONVSEL;
  219. int Hardcopy  = DISA;
  220. int Totcopy   = DISA;
  221. int Painted   = FALSE;            /* don't push init vals on Stack */
  222.  
  223. double Amt;
  224. double Years;
  225. double Rate;
  226. double Pymt;
  227. double Showpymt;
  228. double Intrst;
  229. double I_mo;
  230. double Months;
  231.  
  232. int Negative;
  233. int Too_big;
  234. int Has_dp;
  235.  
  236. char *Base_str = "$$23456789 bcdefx";  /* formatting aids */
  237. char *Sp44 = "                                            ";
  238. char *Sp34 = "                                  ";
  239. char *Sp13 = "             ";
  240. char *Fix32 = "00000000000000000000000000000000";
  241. char *Emptycell = "  0                                 ";
  242.  
  243. char Separator = ' ';             /* must agree with FORM_DFLT */
  244.  
  245. int A_ret = 0;
  246. int B_ret = 0;
  247. int A_write[2], A_read[2];        /* main bc process pipes */
  248. int Nread;                        /* main bc process globals */
  249. int B_write[2], B_read[2];        /* bc converter process pipes */
  250. int Hc = -1;                      /* Hardcopy file fd */
  251. int Tc = -1;                      /* Total file fd */
  252. int Tqlev = 0;
  253. char *Thisyear;
  254. int Do_conv, O_conv;              /* activate selected conv function */
  255. int Convread;                     /* bc converter process */
  256. int Topconv;                      /* top conversion of conv vindow */
  257. char *Convhom;                    /* conv malloc pointer */
  258. char Eq_buf[WINLINE];             /* new conv string input by user */
  259. char K_buf[KEYSIZ];               /* 3 char new key input by user */
  260. char L_buf[FROMTOSIZ];            /* new conv label input by user */
  261. unsigned int Convhsiz;
  262.  
  263.                                   /* predefined user conversions */
  264. char *Convlist[256][3] = {
  265. {"km2      acre", "acr", "\\*247.1"},
  266. {"gram avoir_oz", "av ", "\\*.035274"},
  267. {"fahr. celsius", "c  ", "(\\-32)*.55555555555555555555555555555555"},
  268. {"fluid_oz   cc", "cc ", "\\*29.573"},
  269. {"inch       cm", "cm ", "\\*2.54"},
  270. {"radian degree", "deg", "\\*57.295779513082321"},
  271. {"celsius fahr.", "f  ", "\\*1.8+32"},
  272. {"meter    foot", "ft ", "\\*3.2808"},
  273. {"avoir_oz gram", "g  ", "\\*28.3495"},
  274. {"liter  gallon", "gal", "\\*.26418"},
  275. {"cm       inch", "in ", "\\*.3937"},
  276. {"inversion    ", "inv", "1/\\"},
  277. {"pound      kg", "kg ", "\\*.45359"},
  278. {"mile       km", "km ", "\\*1.6093"},
  279. {"acre      km2", "km2", "\\*.004046"},
  280. {"kg      pound", "lb ", "\\*2.2046"},
  281. {"gallon  liter", "lit", "\\*3.7854"},
  282. {"foot    meter", "m  ", "\\*.3048"},
  283. {"km       mile", "mi ", "\\*.6214"},
  284. {"mile nautical", "nau", "\\*.8689784566"},
  285. {"nautical mile", "nmi", "\\*1.150776515"},
  286. {"cc   fluid_oz", "oz ", "\\*.03381"},
  287. {"degree radian", "rad", "\\*.01745329251994329"},
  288. {"sentinel     ", "|||", "1"}};        /* sentinel; do not remove */
  289.  
  290. int Status;                            /* exit for fatal */
  291. int CX, CY;                            /* global cursor control */
  292. char Onebuf[STACKMAX + 1];             /* temp store for 1 stack cell */
  293. int Statopts;                          /* Status display window flag */
  294. struct stk_cell Stk[STACKDEEP + 1];
  295. int Bc_error;
  296. int Trace;
  297. int Tlev;
  298. char Ttabs[] = {"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"};
  299. int (*Save_sig[8])();
  300. char ierbuf[256];
  301.  
  302. #else
  303.  
  304. extern FILE *Tf;
  305. extern FILE *Dfp;
  306. extern char *Titlq[];
  307. extern char *Basq[];
  308. extern char *Cb[], *Sb[];
  309. extern char *Bb[];
  310. extern char Spreadbuf[];
  311. extern char Tokbuf[];
  312. extern char Controlbuf[];
  313. extern char *Tokp[], *Last;
  314. extern int Negative, Too_big, Has_dp;
  315. extern char Rebuf[];
  316. extern char Tmpbuf[];
  317. extern char Mop[];
  318. extern char Uwin_copy[];
  319.  
  320. extern int Context;
  321. extern int Justify;
  322. extern int Format, Stack, Hide, Dontsave;
  323.  
  324. extern int  Ibase, Obase, Oldib, Oldob, Lastob, Staybase, Precision;
  325. extern int  Show, Clockstat, Autotime;
  326. extern char *Base_str;
  327. extern int  CX, CY;
  328. extern char Ubuf[], Mainbuf[], Convbuf[];
  329. extern char *Sp44, *Sp34, *Sp13, *Fix32, *Emptycell;
  330. extern char Separator;
  331. extern int  A_write[], A_read[], A_ret, Nread;
  332. extern int  B_write[], B_read[], B_ret, Convread;
  333. extern int  Status, Painted;
  334. extern char *Home, Rcfile[];
  335. extern int  Rcfd, Rcerr;
  336. extern char Onebuf[STACKMAX + 1];
  337. extern int  Hardcopy, Hc, Hf;
  338. extern char *Hardname;
  339. extern char *Amortname;
  340. extern char *Totname;
  341. extern int  Totcopy, Tc, Tqlev;
  342. extern int  Autoconv;
  343. extern int  Convcount;
  344. extern int  Convsel;
  345. extern int  Do_conv, O_conv;
  346. extern int  Topconv;
  347. extern char *Convlist[][3];
  348. extern char *Convhom;
  349. extern char *Thisyear;
  350. extern char Eq_buf[];
  351. extern char K_buf[], L_buf[];
  352. extern unsigned int Convhsiz;
  353. extern int  Statopts;
  354. extern struct stk_cell Stk[];
  355. extern int  Edhelp;
  356. extern int  Bc_error;
  357. extern int  Trace;
  358. extern int  Tlev;
  359. extern char Ttabs[];
  360.  
  361. extern double atof();
  362. extern double Amt;
  363. extern double Years;
  364. extern double Rate;
  365. extern double Pymt;
  366. extern double Showpymt;
  367. extern double Intrst;
  368. extern double I_mo;
  369. extern double Months;
  370.  
  371. extern int (*Save_sig[])();
  372. extern char ierbuf[];
  373.  
  374. #endif
  375.