home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 4 / FreshFish_May-June1994.bin / bbs / mar94 / os20 / util / mcalc.lha / MCalc / Source / MCalcARexx.c < prev    next >
C/C++ Source or Header  |  1993-12-31  |  19KB  |  773 lines

  1. /*
  2. Auto:        smake MCalc
  3. */
  4.  
  5. /* $Revision Header built automatically *************** (do not edit) ************
  6. **
  7. ** © Copyright by GuntherSoft
  8. **
  9. ** File             : SnakeSYS:CPrgs/MUICalc/MCalcARexx.c
  10. ** Created on       : Sunday, 05.12.93 14:37:01
  11. ** Created by       : Kai Iske
  12. ** Current revision : V1.0
  13. **
  14. **
  15. ** Purpose
  16. ** -------
  17. **   - ARexx support for MUIProCalc
  18. **
  19. ** Revision V1.0
  20. ** --------------
  21. ** created on Sunday, 05.12.93 14:37:01  by  Kai Iske.   LogMessage :
  22. **     --- Initial release ---
  23. **
  24. *********************************************************************************/
  25.  
  26.  
  27.  
  28.  
  29.  
  30. /**********************************************************************/
  31. /*                      Routines for that module                      */
  32. /**********************************************************************/
  33. static APTR __saveds __asm DoRXCalc(register __a0 struct Hook *MyHook, register __a2 APTR *MyObject, register __a1 ULONG *Parms);
  34. static APTR __saveds __asm DoRXCalcTeX(register __a0 struct Hook *MyHook, register __a2 APTR *MyObject, register __a1 ULONG *Parms);
  35. static APTR __saveds __asm GetOutput(register __a0 struct Hook *MyHook, register __a2 APTR *MyObject, register __a1 ULONG *Parms);
  36. static APTR __saveds __asm GetTeXOutput(register __a0 struct Hook *MyHook, register __a2 APTR *MyObject, register __a1 ULONG *Parms);
  37. static APTR __saveds __asm GetInput(register __a0 struct Hook *MyHook, register __a2 APTR *MyObject, register __a1 ULONG *Parms);
  38. static APTR __saveds __asm GetTeXInput(register __a0 struct Hook *MyHook, register __a2 APTR *MyObject, register __a1 ULONG *Parms);
  39. static APTR __saveds __asm DoFormatTeX(register __a0 struct Hook *MyHook, register __a2 APTR *MyObject, register __a1 ULONG *Parms);
  40. static APTR __saveds __asm SetMode(register __a0 struct Hook *MyHook, register __a2 APTR *MyObject, register __a1 ULONG *Parms);
  41. static APTR ReturnEntry(UWORD Mode, UWORD OutMode, LONG Pos);
  42. static void FormatTeX(char *Source, char *Dest);
  43.  
  44.  
  45. /**********************************************************************/
  46. /*           external references to main programs variables           */
  47. /**********************************************************************/
  48. extern APTR    AppObject;
  49. extern APTR    InputString;
  50. extern APTR    OutputBox;
  51. extern UWORD    IntType;
  52. extern UWORD    IntBase;
  53. extern UWORD    IntSign;
  54. extern UWORD    IntAngle;
  55.  
  56.  
  57.  
  58.  
  59. /**********************************************************************/
  60. /*                               Hooks                                */
  61. /**********************************************************************/
  62. static struct Hook CalcHook =
  63. {
  64.     {NULL},
  65.     (APTR)DoRXCalc,
  66.     NULL,
  67.     NULL
  68. };
  69.  
  70. static struct Hook CalcTeXHook =
  71. {
  72.     {NULL},
  73.     (APTR)DoRXCalcTeX,
  74.     NULL,
  75.     NULL
  76. };
  77.  
  78. static struct Hook GetOutputHook =
  79. {
  80.     {NULL},
  81.     (APTR)GetOutput,
  82.     NULL,
  83.     NULL
  84. };
  85.  
  86. static struct Hook GetTeXOutputHook =
  87. {
  88.     {NULL},
  89.     (APTR)GetTeXOutput,
  90.     NULL,
  91.     NULL
  92. };
  93.  
  94. static struct Hook GetInputHook =
  95. {
  96.     {NULL},
  97.     (APTR)GetInput,
  98.     NULL,
  99.     NULL
  100. };
  101.  
  102. static struct Hook GetTeXInputHook =
  103. {
  104.     {NULL},
  105.     (APTR)GetTeXInput,
  106.     NULL,
  107.     NULL
  108. };
  109.  
  110. static struct Hook FormatTeXHook =
  111. {
  112.     {NULL},
  113.     (APTR)DoFormatTeX,
  114.     NULL,
  115.     NULL
  116. };
  117.  
  118. static struct Hook SetModeHook =
  119. {
  120.     {NULL},
  121.     (APTR)SetMode,
  122.     NULL,
  123.     NULL
  124. };
  125.  
  126.  
  127.  
  128.  
  129. /**********************************************************************/
  130. /*                       This is for our modes                        */
  131. /**********************************************************************/
  132. UWORD    RXIntType;
  133. UWORD    RXIntBase;
  134. UWORD    RXIntSign;
  135. UWORD    RXIntAngle;
  136.  
  137.  
  138.  
  139.  
  140. /**********************************************************************/
  141. /*               Array of ARexx commands for MUIProCalc               */
  142. /**********************************************************************/
  143. struct    MUI_Command    RXCommands[] =
  144. {
  145.         // Calculate an expression (normal output)
  146.  
  147.     {
  148.         "CALC",
  149.         "EXPRESSION/A/M",
  150.         1,
  151.         &CalcHook
  152.     },
  153.  
  154.         // Calculate an expression (TeX output)
  155.  
  156.     {
  157.         "CALCTEX",
  158.         "EXPRESSION/A/M",
  159.         1,
  160.         &CalcTeXHook
  161.     },
  162.  
  163.         // Select output from history (normal output; as is)
  164.  
  165.     {
  166.         "GETOUTPUT",
  167.         "ENTRYNUM/N",
  168.         1,
  169.         &GetOutputHook
  170.     },
  171.  
  172.         // Select output from history (TeX output)
  173.  
  174.     {
  175.         "GETTEXOUTPUT",
  176.         "ENTRYNUM/N",
  177.         1,
  178.         &GetTeXOutputHook
  179.     },
  180.  
  181.         // Select input from history (normal output; as is)
  182.  
  183.     {
  184.         "GETINPUT",
  185.         "ENTRYNUM/N",
  186.         1,
  187.         &GetInputHook
  188.     },
  189.  
  190.         // Select input from history (TeX output)
  191.  
  192.     {
  193.         "GETTEXINPUT",
  194.         "ENTRYNUM/N",
  195.         1,
  196.         &GetTeXInputHook
  197.     },
  198.  
  199.  
  200.         // Format an expression to TeX format
  201.  
  202.     {
  203.         "FORMATTEX",
  204.         "EXPRESSION/A/M",
  205.         1,
  206.         &FormatTeXHook
  207.     },
  208.  
  209.  
  210.         // Set output mode
  211.  
  212.     {
  213.         "SETMODE",
  214.         "BASE/K,SIZE/K,SIGN/K,ANGLE/K",
  215.         4,
  216.         &SetModeHook
  217.     },
  218.  
  219.  
  220.  
  221.         // Delimiter
  222.  
  223.     {
  224.         NULL, NULL, NULL, NULL
  225.     }
  226. };
  227.  
  228.  
  229.  
  230.  
  231.  
  232. /**********************************************************************/
  233. /*        Let MUIProCalc (normal output) calculate through ARexx      */
  234. /*        ------------------------------------------------------      */
  235. /* Parameters must be :                                               */
  236. /* Expr  = Expression to calculate                                    */
  237. /**********************************************************************/
  238. static APTR __saveds __asm DoRXCalc(register __a0 struct Hook *MyHook, register __a2 APTR *MyObject, register __a1 ULONG *Parms)
  239. {
  240.     UWORD    BackIntType, BackIntBase, BackIntSign, BackIntAngle;
  241.     char    NewBuff[258], **Exprs;
  242.     BOOL    GoOn = TRUE;
  243.  
  244.         // Build expression from partial input
  245.  
  246.     strcpy(NewBuff, "");
  247.     Exprs = (char **)Parms[0];
  248.     while(*Exprs && GoOn)
  249.     {
  250.         if((strlen(*Exprs) + strlen(NewBuff)) < 256)
  251.             strcat(NewBuff, *Exprs);
  252.         else
  253.             GoOn = FALSE;
  254.  
  255.         Exprs++;
  256.     }
  257.  
  258.         // Set input string to current expression
  259.  
  260.     set(InputString, MUIA_String_Contents, NewBuff);
  261.  
  262.         // Calculate expression (with ARexx settings)
  263.  
  264.     BackIntType    = IntType;
  265.     BackIntBase    = IntBase;
  266.     BackIntSign    = IntSign;
  267.     BackIntAngle    = IntAngle;
  268.  
  269.     IntType        = RXIntType;
  270.     IntBase        = RXIntBase;
  271.     IntSign        = RXIntSign;
  272.     IntAngle    = RXIntAngle;
  273.  
  274.     GoOn = FormatOutput(FALSE);
  275.  
  276.     IntType        = BackIntType;
  277.     IntBase        = BackIntBase;
  278.     IntSign        = BackIntSign;
  279.     IntAngle    = BackIntAngle;
  280.  
  281.     if(GoOn)
  282.     {
  283.  
  284.             // Return output
  285.  
  286.         return(ReturnEntry(GET_OUTPUT, NORMAL_OUTPUT, GET_ACTIVE));
  287.     }
  288.     else
  289.         return((APTR)set(AppObject, MUIA_Application_RexxString,  " "));
  290. }
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297. /**********************************************************************/
  298. /*         Let MUIProCalc (TeX output) calculate through ARexx        */
  299. /*         ---------------------------------------------------        */
  300. /* Parameters must be :                                               */
  301. /* Expr  = Expression to calculate                                    */
  302. /**********************************************************************/
  303. static APTR __saveds __asm DoRXCalcTeX(register __a0 struct Hook *MyHook, register __a2 APTR *MyObject, register __a1 ULONG *Parms)
  304. {
  305.     UWORD    BackIntType, BackIntBase, BackIntSign, BackIntAngle;
  306.     char    NewBuff[258], **Exprs;
  307.     BOOL    GoOn = TRUE;
  308.  
  309.         // Build expression from partial input
  310.  
  311.     strcpy(NewBuff, "");
  312.     Exprs = (char **)Parms[0];
  313.     while(*Exprs && GoOn)
  314.     {
  315.         if((strlen(*Exprs) + strlen(NewBuff)) < 256)
  316.             strcat(NewBuff, *Exprs);
  317.         else
  318.             GoOn = FALSE;
  319.  
  320.         Exprs++;
  321.     }
  322.  
  323.         // Set input string to current expression
  324.  
  325.     set(InputString, MUIA_String_Contents, NewBuff);
  326.  
  327.         // Calculate expression (with ARexx settings)
  328.  
  329.     BackIntType    = IntType;
  330.     BackIntBase    = IntBase;
  331.     BackIntSign    = IntSign;
  332.     BackIntAngle    = IntAngle;
  333.  
  334.     IntType        = RXIntType;
  335.     IntBase        = RXIntBase;
  336.     IntSign        = RXIntSign;
  337.     IntAngle    = RXIntAngle;
  338.  
  339.     GoOn = FormatOutput(FALSE);
  340.  
  341.     IntType        = BackIntType;
  342.     IntBase        = BackIntBase;
  343.     IntSign        = BackIntSign;
  344.     IntAngle    = BackIntAngle;
  345.  
  346.     if(GoOn)
  347.     {
  348.  
  349.             // Return output
  350.  
  351.         return(ReturnEntry(GET_OUTPUT, TEX_OUTPUT, GET_ACTIVE));
  352.     }
  353.     else
  354.         return((APTR)set(AppObject, MUIA_Application_RexxString,  " "));
  355. }
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362. /**********************************************************************/
  363. /*               GetOutput (normal output) from History               */
  364. /*               --------------------------------------               */
  365. /* Parameters may be :                                                */
  366. /* n    = Nth entry