home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Science / Science.zip / BCALCS.ZIP / BIGCALC.H < prev    next >
C/C++ Source or Header  |  1989-02-04  |  14KB  |  408 lines

  1. /*
  2.  *    **************************************************
  3.  *    *                                                *
  4.  *    *                   BIGCALC.H                    *
  5.  *    *                                                *
  6.  *    *          Extended Precision Calculator         *
  7.  *    *                                                *
  8.  *    *     Global Constants & Function Prototypes     *
  9.  *    *                                                *
  10.  *    *              Version 4.3 02-04-89              *
  11.  *    *                                                *
  12.  *    *              Judson D. McClendon               *
  13.  *    *              329 37th Court N.E.               *
  14.  *    *              Birmingham, AL 35215              *
  15.  *    *                 205-853-8440                   *
  16.  *    *            Compuserve [74415,1003]             *
  17.  *    *                                                *
  18.  *    **************************************************
  19.  */
  20.  
  21.  
  22.  
  23. /*
  24.  *    **************************************************
  25.  *    *                                                *
  26.  *    *                   Constants                    *
  27.  *    *                                                *
  28.  *    **************************************************
  29.  */
  30.  
  31. #define TITLE "Extended Precision Calculator 4.3"
  32.  
  33. #define REALMODE                          /* Remove for OS/2 protected mode */
  34.  
  35. #define MINPREC 3                         /* Min nbr of digits  */
  36. #define DEFAULTPREC 50                    /* Default precision  */
  37. #define MAXNORM 1075                      /* Max normal digits  */
  38. #define MAXCOMP (MAXNORM + 9)             /* Max compute digits */
  39. #define MAXWORK (MAXCOMP * 2 + 5)         /* Max work digits    */
  40. #define COMPPREC (normprec + 9)           /* Compute digits     */
  41. #define WORKPREC (compprec * 2 + 5)       /* Work digits        */
  42. #define MAXEXDIGITS 9                     /* Max exponent digits */
  43. #define MINEXP -999999999L                /* Min exponent */
  44. #define MAXEXP  999999999L                /* Max exponent */
  45. #define MINFLOATDSP -50L                  /* Min exp float decimal display */
  46. #define MAXFLOATDSP 65L                   /* Max exp float decimal display */
  47. #define XSIGNROW 18                       /* X sign row */
  48. #define ENTRYSIGNROWBIG 4                 /* Sign row for big X */
  49. #define ENTRYSIGNROWSMALL 18              /* Sign row for small X */
  50. #define SIZEOFSMALL 453                   /* Max size for part screen entry */
  51. #define SIGNDISPCOL 3                     /* Sign column for number display */
  52. #define MINDISPCOL 4                      /* Min column for number display */
  53. #define MAXDISPCOL 68                     /* Max column for number display */
  54. #define SIGNPRTCOL 4                      /* Sign column for number printer */
  55. #define MINPRTCOL 5                       /* Min column for number printer */
  56. #define MAXPRTCOL 63                      /* Max column for number printer */
  57. #define DISPDECIMAL '.'                   /* Display decimal point */
  58. #define PRINTDECIMAL '*'                  /* Print decimal point */
  59.  
  60.  
  61.  
  62. /*
  63.  *    **************************************************
  64.  *    *                                                *
  65.  *    *                    Defines                     *
  66.  *    *                                                *
  67.  *    **************************************************
  68.  */
  69.  
  70. #ifndef TRUE
  71. #define TRUE 1
  72. #endif
  73.  
  74. #ifndef FALSE
  75. #define FALSE 0
  76. #endif
  77.  
  78. #ifndef BOOLEAN
  79. #define BOOLEAN int
  80. #endif
  81.  
  82. #define GETNORMTEMP(n) malloc((n) * sizeof(NORMTYPE))
  83. #define GETCOMPTEMP(n) malloc((n) * sizeof(COMPTYPE))
  84.  
  85.  
  86.  
  87.  
  88. /*
  89.  *    **************************************************
  90.  *    *                                                *
  91.  *    *                   Key Codes                    *
  92.  *    *                                                *
  93.  *    **************************************************
  94.  */
  95.  
  96. #define ESCAPE     27   /* Escape          */
  97. #define BACKSPACE  8    /* Back Space      */
  98. #define CR         '\r' /* Carriage Return */
  99. #define LF         '\n' /* Line Feed       */
  100. #define FF         '\f' /* Form Feed       */
  101.  
  102. #define ADD        43   /*  +          */
  103. #define SUBTRACT   45   /*  -          */
  104. #define MULTIPLY   42   /*  *          */
  105. #define DIVIDE     47   /*  /          */
  106. #define LASTX      76   /*  L          */
  107. #define CLEAR      67   /*  C          */
  108. #define PRINT      80   /*  P          */
  109. #define SCINOT     70   /*  F          */
  110. #define XCHGXREG   88   /*  X          */
  111. #define CHGSIGN    83   /*  S          */
  112. #define PRINTDISK  68   /*  D          */
  113. #define GROUPSIZE  71   /*  G          */
  114. #define MENUROLL   77   /*  M          */
  115. #define VIEWREG    86   /*  V          */
  116. #define CLEARX     8    /* Back Space  */
  117. #define STOREX     1073 /* PgUp        */
  118. #define RECALLREG  1081 /* PgDn        */
  119. #define ENTER      13   /* Enter       */
  120. #define XCHGXY1    1075 /* Left Arrow  */
  121. #define XCHGXY2    1077 /* Right Arrow */
  122. #define ROLLDOWN   1080 /* Down Arrow  */
  123. #define ROLLUP     1072 /* Up Arrow    */
  124. #define HELP       1059 /* F1          */
  125. #define POWER      1060 /* F2          */
  126. #define SQUAREROOT 1061 /* F3          */
  127. #define SQUARE     1062 /* F4          */
  128. #define RECIPROCAL 1063 /* F5          */
  129. #define FACTORIAL  1064 /* F6          */
  130. #define INTEGER    1065 /* F7          */
  131. #define FRACTION   1066 /* F8          */
  132. #define RECALLPI   1067 /* F9          */
  133. #define RECALLE    1068 /* F10         */
  134. #define SIN        1094 /* CTRL-F1     */
  135. #define ARCSIN     1095 /* CTRL-F2     */
  136. #define COS        1096 /* CTRL-F3     */
  137. #define ARCCOS     1097 /* CTRL-F4     */
  138. #define TAN        1098 /* CTRL-F5     */
  139. #define ARCTAN     1099 /* CTRL-F6     */
  140. #define LOG        1100 /* CTRL-F7     */
  141. #define EXP10      1101 /* CTRL-F8     */
  142. #define LN         1102 /* CTRL-F9     */
  143. #define EXPE       1103 /* CTRL-F10    */
  144.  
  145.  
  146.  
  147.  
  148. /*
  149.  *    **************************************************
  150.  *    *                                                *
  151.  *    *                  Data Types                    *
  152.  *    *                                                *
  153.  *    **************************************************
  154.  */
  155.  
  156. typedef char NORMDIGIT;
  157. typedef int  WORKDIGIT;
  158.  
  159. typedef struct {
  160.    long exp;
  161.    int sign;
  162.    int digits;
  163.    NORMDIGIT man[MAXNORM];
  164.    } NORMTYPE;
  165.  
  166. typedef struct {
  167.    long exp;
  168.    int sign;
  169.    int digits;
  170.    WORKDIGIT man[MAXWORK];
  171.    } WORKTYPE;
  172.  
  173. typedef struct {
  174.    long exp;
  175.    int sign;
  176.    int digits;
  177.    WORKDIGIT man[MAXCOMP];
  178.    } COMPTYPE;
  179.  
  180.  
  181.  
  182. /*
  183.  *    **************************************************
  184.  *    *                                                *
  185.  *    *        BIGCALC.C Function Declarations         *
  186.  *    *                                                *
  187.  *    **************************************************
  188.  */
  189.  
  190. extern  void main(int argc,char * *argv);
  191. static  void Initialize(int argc,char *argv);
  192.  
  193. static  void Add(void);
  194. static  void Subtract(void);
  195. static  void Multiply(void);
  196. static  void Divide(void);
  197. static  void Power(void);
  198. static  void SquareRoot(void);
  199. static  void Square(void);
  200. static  void Reciprocal(void);
  201. static  void Factorial(void);
  202. static  void IntegerPart(void);
  203. static  void FractionPart(void);
  204. static  void Sin(void);
  205. static  void ArcSin(void);
  206. static  void Cos(void);
  207. static  void ArcCos(void);
  208. static  void Tan(void);
  209. static  void ArcTan(void);
  210. static  void Log(void);
  211. static  void Exp10(void);
  212. static  void Ln(void);
  213. static  void ExpE(void);
  214. static  void RecallPi(void);
  215. static  void RecallE(void);
  216. static  void RecallLastX(void);
  217. static  void ChangeSign(void);
  218. static  void PrintDisk(void);
  219. static  void GroupSize(void);
  220. static  void MenuRoll(void);
  221. static  void ViewReg(void);
  222. static  void AcceptX(void);
  223. static  void ClearX(void);
  224. static  void Enter(void);
  225. static  void SciNotation(void);
  226. static  void Clear(void);
  227. static  void Print(void);
  228. static  void StoreX(void);
  229. static  void AddXReg(void);
  230. static  void SubtractXReg(void);
  231. static  void MultiplyXReg(void);
  232. static  void DivideXReg(void);
  233. static  void RecallReg(void);
  234. static  void AddRegX(void);
  235. static  void SubtractRegX(void);
  236. static  void MultiplyRegX(void);
  237. static  void DivideRegX(void);
  238. static  void ExchangeXY(void);
  239. static  void ExchangeXReg(void);
  240. static  void RollDown(void);
  241. static  void RollUp(void);
  242. static  void PushStack(void);
  243. static  void DropStack(void);
  244.  
  245.  
  246.  
  247. /*
  248.  *    **************************************************
  249.  *    *                                                *
  250.  *    *         BIGIO.C Function Declarations          *
  251.  *    *                                                *
  252.  *    **************************************************
  253.  */
  254.  
  255. extern  int GetChar(void);
  256. extern  int KeyPressed(void);
  257.  
  258. extern  void ScrInit(void);
  259. extern  void ScrTerm(void);
  260. extern  void ScrClr(void);
  261. extern  void EraEol(void);
  262. extern  void EraEop(void);
  263. extern  void CurPos(int row,int col);
  264. extern  void CurGet(int *row,int *col);
  265. static  void WNChar(int chr,int count);
  266. extern  void WChar(int chr);
  267. extern  void WString(char *str);
  268. extern  void WInteger(long integer);
  269. extern  void WriteAt(int row,int col,char *str);
  270. extern  void WriteCenter(int row,char *msg);
  271. extern  void Message(char *msg);
  272. extern  void MessageWait(char *msg);
  273. extern  void MessageEsc(char *msg);
  274.  
  275. extern  void DisplayChar(int *row,int *col,int chr);
  276. extern  void BackSpace(int *row,int *col);
  277. extern  void DisplayExpChar(int *row,int *col,int chr);
  278. extern  void BackSpaceExp(int *row,int *col);
  279. extern  void DisplayExp(int *row,int *col,int exprow,int expcol,int expsign,long exponent);
  280.  
  281. extern  void PChar(int chr);
  282. extern  void PString(char *str);
  283. extern  void PInteger(long integer);
  284. extern  void NewLine(void);
  285. extern  void NewPage(void);
  286.  
  287. extern  void Beep(void);
  288. extern  long TimerTicks(void);
  289.  
  290.  
  291.  
  292. /*
  293.  *    **************************************************
  294.  *    *                                                *
  295.  *    *        BIGMATH.C Function Declarations         *
  296.  *    *                                                *
  297.  *    **************************************************
  298.  */
  299.  
  300. extern  int ExtendedAdd(void);
  301. extern  int ExtendedSubtract(void);
  302. extern  int ExtendedMultiply(void);
  303. extern  int ExtendedDivide(void);
  304. extern  int ExtendedSquareRoot(void);
  305. extern  int ExtendedPower(void);
  306. extern  int ExtendedSinCos(int scflag);
  307. extern  int ExtendedTan(void);
  308. extern  int ExtendedArcSinCos(int scflag);
  309. extern  int ExtendedArcTan(void);
  310. static  int ResolveAngle(void);
  311. extern  int ExtendedLog(void);
  312. extern  int ExtendedExp10(void);
  313. extern  int ExtendedLn(void);
  314. extern  int ExtendedExpE(void);
  315. extern  int ExtendedReciprocal(void);
  316. extern  int ExtendedFactorial(void);
  317.  
  318.  
  319.  
  320. /*
  321.  *    **************************************************
  322.  *    *                                                *
  323.  *    *        BIGMISC.C Function Declarations         *
  324.  *    *                                                *
  325.  *    **************************************************
  326.  */
  327.  
  328. extern  int Normalize(int w);
  329. extern  int FlipSign(int sign);
  330. extern  int ExtendedRound(int w);
  331. extern  int ExtendedIntegerPart(void);
  332. extern  int ExtendedFractionPart(void);
  333. extern  int ExtendedGetX(void);
  334.  
  335. extern  void ExtendedRecallPi(int dest);
  336. extern  void ExtendedRecallHalfPi(int dest);
  337. extern  void ExtendedRecallE(int dest);
  338. extern  void ExtendedRecallLn10(int dest);
  339. extern  void ExtendedRecallLnP9(int dest);
  340. extern  void ExtendedRecallLnP99(int dest);
  341. extern  void ExtendedRecallLnP999(int dest);
  342. extern  void ExtendedRecallLnP9999(int dest);
  343. extern  void ExtendedRecallLnP99999(int dest);
  344. extern  void ExtendedRecallSinP1(int dest);
  345. extern  void ExtendedRecallSinP01(int dest);
  346. extern  void ExtendedRecallSinP001(int dest);
  347. extern  void ExtendedRecallCosP1(int dest);
  348. extern  void ExtendedRecallCosP01(int dest);
  349. extern  void ExtendedRecallCosP001(int dest);
  350.  
  351. extern  void ClearStack(int lo,int hi);
  352. extern  void ClearReg(int lo,int hi);
  353. extern  void ClearWork(int w);
  354. extern  void ClearTemp(COMPTYPE *temp);
  355. extern  void MoveStackWork(int source,int dest);
  356. extern  void MoveRegWork(int source,int dest);
  357. extern  void MoveWorkStack(int source,int dest);
  358. extern  void MoveWorkReg(int source,int dest);
  359. extern  void MoveWorkWork(int source,int dest);
  360. extern  void MoveWorkTemp(int source,COMPTYPE *dest);
  361. extern  void MoveTempWork(COMPTYPE *source,int dest);
  362. extern  void MoveTempTemp(COMPTYPE *source,COMPTYPE *dest);
  363. extern  void SetWorkInteger(int dest,long integer);
  364. extern  void SetTempInteger(COMPTYPE *dest,long integer);
  365.  
  366.  
  367.  
  368. /*
  369.  *    **************************************************
  370.  *    *                                                *
  371.  *    *       BIGPRINT.C Function Declarations         *
  372.  *    *                                                *
  373.  *    **************************************************
  374.  */
  375.  
  376. extern  void PrintHeading(void);
  377. extern  void PrintReg(int lo,int hi);
  378. extern  void PrintStack(int lo,int hi);
  379. extern  void DisplayReg(int r);
  380. extern  void DisplayStack(int s);
  381. extern  void PrintNumber(NORMTYPE *nbr);
  382. static  void PCharWrap(int chr);
  383. static  void PSign(int sign);
  384. static  void PExponent(long exponent);
  385.  
  386. extern  void WriteReg(int lo,int hi);
  387. extern  void WriteStack(int lo,int hi);
  388. extern  void WriteNumber(NORMTYPE *nbr);
  389. static  void WExponent(long exponent);
  390. extern  int  GetPrompt(void);
  391. extern  void Overflow(void);
  392. extern  void DivideByZero(void);
  393. extern  void ZeroArgument(void);
  394. extern  void NegativeArgument(void);
  395. extern  void ArgumentNotInteger(void);
  396. extern  void ArgumentInvalid(void);
  397. extern  void MemoryError(void);
  398.  
  399. extern  void OnScreenMenu(void);
  400. extern  void InitialScreen(void);
  401. extern  void HelpScreen(void);
  402. extern  void Heading1(void);
  403. extern  void Heading2(void);
  404. static  void HelpScreen1(void);
  405. static  void HelpScreen2(void);
  406. static  void HelpScreen3(void);
  407. extern  void WorkScreen(void);
  408.