home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 229.lha / Calc_v1.01 / sources / Calc.mod < prev    next >
Text File  |  1989-04-04  |  4KB  |  122 lines

  1. MODULE Calc;
  2.  
  3. (*======================================================================*)
  4. (*                        M2Sprint Demo Program                         *)
  5. (*======================================================================*)
  6. (*       Copyright (c) 1989 Martin Taillefer, All Rights Reserved       *)
  7. (*                    This is freely redistributable                    *)
  8. (*======================================================================*)
  9. (*      Version: 1.00           Author : Martin Taillefer               *)
  10. (*      Date   : 20-Mar-89      Changes: Original            *)
  11. (*======================================================================*)
  12. (*      Version: 1.01           Author : Martin Taillefer               *)
  13. (*      Date   : 25-Mar-89      Changes: Memory overwrite bug fixed.    *)
  14. (*                     More keyboard shortcuts.    *)
  15. (*                     Internal layout modifications    *)
  16. (*======================================================================*)
  17.  
  18. (**************************** Notes on Calc *****************************)
  19. (*                                    *)
  20. (* Calc is a full-featured programmer's calculator. See the        *)
  21. (* documentation for the program elsewhere.                *)
  22. (*                                    *)
  23. (* Not only is Calc a very useful program, it is also an invaluable    *)
  24. (* example showing the intended use for many of the M2Sprint Easy    *)
  25. (* modules. It also is an excellent example of Modula-2 programming.    *)
  26. (*                                    *)
  27. (************************************************************************)
  28.  
  29. FROM SYSTEM       IMPORT ADDRESS, ADR, BYTE, SETREG, SHIFT;
  30. FROM Intuition       IMPORT IntuiMessage;
  31. FROM EasyIDCMP       IMPORT ProcTable, ProcessEvents;
  32. FROM CalcMenus       IMPORT InitMenuStuff, HandleMenuPick;
  33. FROM CalcGadgets   IMPORT InitGadgetStuff, HandleGadget, FakeGadget,
  34.                           GadgetType, base, Base;
  35. FROM CalcDisplay   IMPORT PrepareDisplay, KillDisplay, window;
  36. FROM CalcBrains       IMPORT InitBrains;
  37.  
  38.  
  39. VAR
  40.   procTable : ProcTable;
  41.   result    : INTEGER;
  42.  
  43.  
  44. PROCEDURE HandleVanillaKey(VAR intui:IntuiMessage; keyCode:CARDINAL): INTEGER;
  45. VAR
  46.   gad  : GadgetType;
  47.   c    : CHAR;
  48.   good : BOOLEAN;
  49. BEGIN
  50.   c:=CAP(CHR(keyCode));
  51.   good:=TRUE;
  52.   CASE c OF
  53.     |"0".."9" : gad:=VAL(GadgetType,ORD(c)-ORD("0"));
  54.     |"A".."F" : gad:=VAL(GadgetType,ORD(c)-ORD("A")+10);
  55.     |"("      : gad:=LeftParen;
  56.     |")"      : gad:=RightParen;
  57.     |"=",15C  : gad:=Equal;
  58.     |"+"      : gad:=Plus;
  59.     |"-"      : gad:=Minus;
  60.     |"*"      : gad:=Times;
  61.     |"/"      : gad:=Divide;
  62.     |"~","!"  : gad:=Not;
  63.     |"&"      : gad:=And;
  64.     |"|","O"  : gad:=Or;
  65.     |"X"      : gad:=Xor;
  66.     |"<"      : gad:=ShiftLeft;
  67.     |">"      : gad:=ShiftRight;
  68.     |"S"      : gad:=Sto;
  69.     |"R"      : gad:=Rcl;
  70.     |33C      : RETURN 1;  (* ESC = quit *)
  71.     |177C     : gad:=ClearAll;
  72.     |" "      : gad:=ClearEntry;
  73.   ELSE
  74.     good:=FALSE;
  75.   END;
  76.  
  77.   IF good THEN
  78.     IF (gad>=B0) & (gad<=BF) THEN
  79.       good:=(NOT (gad>=B2) & (base=BINA)) OR
  80.             (NOT (gad>=B8) & (base=OCTA)) OR
  81.             (NOT (gad>=BA) & (base=DECI)) OR
  82.             (base=HEXA);
  83.     END;
  84.  
  85.     IF good THEN
  86.       RETURN FakeGadget(gad);
  87.     END;
  88.   END;
  89.  
  90.   RETURN 0;
  91. END HandleVanillaKey;
  92.  
  93.  
  94. PROCEDURE HandleCloseWindow(VAR intui:IntuiMessage): INTEGER;
  95. BEGIN
  96.   RETURN 1;
  97. END HandleCloseWindow;
  98.  
  99.  
  100. PROCEDURE InitIDCMPStuff;
  101. BEGIN
  102.   WITH procTable DO
  103.     WaitForEvent  := TRUE;
  104.     MenuPick      := HandleMenuPick;
  105.     CloseWindow      := HandleCloseWindow;
  106.     GadgetUp      := HandleGadget;
  107.     GadgetDown      := HandleGadget;
  108.     VanillaKey      := HandleVanillaKey;
  109.   END;
  110. END InitIDCMPStuff;
  111.  
  112.  
  113. BEGIN
  114.   IF PrepareDisplay() THEN
  115.     IF InitMenuStuff() & InitGadgetStuff() & InitBrains() THEN
  116.       InitIDCMPStuff;
  117.       result:=ProcessEvents(window,procTable);
  118.     END;
  119.     KillDisplay;
  120.   END;
  121. END Calc.
  122.