home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / NUMBERIO.I < prev    next >
Encoding:
Modula Implementation  |  1990-10-29  |  7.8 KB  |  324 lines

  1. IMPLEMENTATION MODULE NumberIO; (* V#026 *)
  2. (*$Y+,L-,F-*)
  3.  
  4. (*
  5.   18.7.87:  Read... überlesen terminierendes Zeichen - kein UndoRead mehr.
  6.   3.4.88:   Read... korrgiert (rdPrp hat f nur als Word statt Long geladen).
  7.   17.9.88:  ReadNum/LNum korrigiert (las nix ein)
  8.   28.9.88:  chrGet prüft EOF
  9.   20.7.90:  ReadLReal neu
  10.   26.9.90:  $L+ bei ReadReal
  11. *)
  12.  
  13. FROM SYSTEM IMPORT ASSEMBLER, WORD, LONGWORD, ADDRESS;
  14.  
  15. FROM Files IMPORT File, EOF;
  16.  
  17. FROM Text IMPORT Read, WriteString;
  18.  
  19. FROM Convert IMPORT GetInfo;
  20.  
  21. IMPORT Convert;
  22.  
  23.  
  24. PROCEDURE chrGet (VAR info: GetInfo);
  25.   BEGIN
  26.     ASSEMBLER
  27.         ; Read ( File(info.userPtr), info.ch )
  28.         MOVE.L  -(A3),A1
  29.         MOVE.L  GetInfo.userPtr(A1),(A3)+
  30.         LEA     GetInfo.ch(A1),A2
  31.         JSR     EOF             ; A1/A2 werden nicht verändert
  32.         TST     -(A3)
  33.         BNE     iseof
  34.         MOVE.L  A0,(A3)+
  35.         MOVE.L  A2,(A3)+
  36.         JMP     Read
  37.       iseof
  38.         CLR.B   GetInfo.ch(A1)  ; Nullzeichen liefern bei EOF
  39.     END
  40.   END chrGet;
  41.  
  42.  
  43. PROCEDURE rdPrp;
  44.   BEGIN
  45.     ASSEMBLER
  46.         MOVE.L  (A7)+,A1
  47.         LINK    A5,#-6
  48.         MOVE.L  -12(A3),GetInfo.userPtr(A7)
  49.         MOVE.L  -(A3),D0
  50.         MOVE.L  #chrGet,(A3)+
  51.         CLR.L   (A3)+
  52.         MOVE.L  A7,(A3)+
  53.         MOVE.L  D0,(A3)+
  54.         JMP     (A1)
  55.     END
  56.   END rdPrp;
  57.  
  58. PROCEDURE rdPrpN;
  59.   BEGIN
  60.     ASSEMBLER
  61.         MOVE.L  (A7)+,A1
  62.         LINK    A5,#-6
  63.         MOVE.L  -14(A3),GetInfo.userPtr(A7)
  64.         MOVE.L  -(A3),D0
  65.         MOVE.W  -(A3),D1
  66.         MOVE.L  #chrGet,(A3)+
  67.         CLR.L   (A3)+
  68.         MOVE.L  A7,(A3)+
  69.         MOVE.W  D1,(A3)+
  70.         MOVE.L  D0,(A3)+
  71.         JMP     (A1)
  72.     END
  73.   END rdPrpN;
  74.  
  75. PROCEDURE eWord;
  76.   BEGIN
  77.     ASSEMBLER
  78.         MOVE.W  -(A3),D0
  79.         MOVE.L  -(A3),A0
  80.         MOVE.W  D0,(A0)
  81.         SUBQ.L  #4,A3
  82.         UNLK    A5
  83.     END
  84.   END eWord;
  85.  
  86. PROCEDURE eLong;
  87.   BEGIN
  88.     ASSEMBLER
  89.         MOVE.L  -(A3),D0
  90.         MOVE.L  -(A3),A0
  91.         MOVE.L  D0,(A0)
  92.         SUBQ.L  #4,A3
  93.         UNLK    A5
  94.     END
  95.   END eLong;
  96.  
  97. PROCEDURE ReadCard (f: File; VAR card: CARDINAL; VAR success: BOOLEAN);
  98.   BEGIN
  99.     ASSEMBLER
  100.         JSR     rdPrp
  101.         JSR     Convert.ConvToCard
  102.         JMP     eWord
  103.     END
  104.   END ReadCard;
  105.  
  106. PROCEDURE ReadInt (f: File; VAR int: INTEGER; VAR success: BOOLEAN);
  107.   BEGIN
  108.     ASSEMBLER
  109.         JSR     rdPrp
  110.         JSR     Convert.ConvToInt
  111.         JMP     eWord
  112.     END
  113.   END ReadInt;
  114.  
  115. PROCEDURE ReadLCard (f: File; VAR card: LONGCARD; VAR success: BOOLEAN);
  116.   BEGIN
  117.     ASSEMBLER
  118.         JSR     rdPrp
  119.         JSR     Convert.ConvToLCard
  120.         JMP     eLong
  121.     END
  122.   END ReadLCard;
  123.  
  124. PROCEDURE ReadLInt (f: File; VAR int: LONGINT; VAR success: BOOLEAN);
  125.   BEGIN
  126.     ASSEMBLER
  127.         JSR     rdPrp
  128.         JSR     Convert.ConvToLInt
  129.         JMP     eLong
  130.     END
  131.   END ReadLInt;
  132.  
  133. PROCEDURE ReadNum (    f      : File;
  134.                    VAR num    : WORD;
  135.                        base   : CARDINAL; (* [2..36] *)
  136.                    VAR success: BOOLEAN);
  137.   BEGIN
  138.     ASSEMBLER
  139.         JSR     rdPrpN
  140.         JSR     Convert.ConvToNum
  141.         JMP     eWord
  142.     END
  143.   END ReadNum;
  144.  
  145. PROCEDURE ReadLNum (    f      : File;
  146.                     VAR num    : LONGWORD;
  147.                         base   : CARDINAL; (* [2..36] *)
  148.                     VAR success: BOOLEAN);
  149.   BEGIN
  150.     ASSEMBLER
  151.         JSR     rdPrpN
  152.         JSR     Convert.ConvToLNum
  153.         JMP     eLong
  154.     END
  155.   END ReadLNum;
  156.  
  157. PROCEDURE ReadLReal (f: File; VAR r: LONGREAL; VAR success: BOOLEAN);
  158.   BEGIN
  159.     ASSEMBLER
  160.         JSR     rdPrp
  161.         JSR     Convert.ConvToReal
  162.         MOVE.L  -(A3),D1
  163.         MOVE.L  -(A3),D0
  164.         MOVE.L  -(A3),A0
  165.         MOVE.L  D0,(A0)+
  166.         MOVE.L  D1,(A0)
  167.         SUBQ.L  #4,A3
  168.         UNLK    A5
  169.     END
  170.   END ReadLReal;
  171.  
  172. PROCEDURE ReadReal (f: File; VAR r: REAL; VAR success: BOOLEAN);
  173.   (*$L+*)
  174.   VAR r2: LONGREAL;
  175.   BEGIN
  176.     r:= REAL (0);
  177.     ReadLReal (f, r2, success);
  178.     IF success THEN
  179.       IF ABS (r2) > MAX (REAL) THEN
  180.         success:= FALSE;
  181.       ELSE
  182.         r:= r2
  183.       END
  184.     END
  185.   END ReadReal;
  186.   (*$L=*)
  187.  
  188. PROCEDURE wrPrp;
  189.   BEGIN
  190.     ASSEMBLER
  191.         MOVE.L  (A7)+,A1
  192.         LINK    A5,#-80
  193.         MOVE.L  A7,(A3)+
  194.         MOVE.W  #79,(A3)+
  195.         JMP     (A1)
  196.     END
  197.   END wrPrp;
  198.  
  199. PROCEDURE wrOut;
  200.   BEGIN
  201.     ASSEMBLER
  202.         MOVE.L  A7,(A3)+
  203.         MOVE.W  #79,(A3)+
  204.         JSR     WriteString
  205.         UNLK    A5
  206.     END
  207.   END wrOut;
  208.  
  209. PROCEDURE WriteCard (    f      : File;
  210.                          card   : LONGCARD;
  211.                          width  : CARDINAL);
  212.   BEGIN
  213.     ASSEMBLER
  214.         JSR     wrPrp
  215.         JSR     Convert.ConvCard
  216.         JMP     wrOut
  217.     END
  218.   END WriteCard;
  219.  
  220. PROCEDURE WriteInt   (f: File; int : LONGINT;  width: CARDINAL);
  221.   BEGIN
  222.     ASSEMBLER
  223.         JSR     wrPrp
  224.         JSR     Convert.ConvInt
  225.         JMP     wrOut
  226.     END
  227.   END WriteInt;
  228.   
  229. PROCEDURE WriteHex   (f: File; int : WORD;  width: CARDINAL);
  230.   BEGIN
  231.     ASSEMBLER
  232.         JSR     wrPrp
  233.         JSR     Convert.ConvHex
  234.         JMP     wrOut
  235.     END
  236.   END WriteHex;
  237.   
  238. PROCEDURE WriteLHex  (f: File; int : LONGWORD;  width: CARDINAL);
  239.   BEGIN
  240.     ASSEMBLER
  241.         JSR     wrPrp
  242.         JSR     Convert.ConvLHex
  243.         JMP     wrOut
  244.     END
  245.   END WriteLHex;
  246.  
  247. PROCEDURE WriteNum (f      : File;
  248.                     num    : WORD;
  249.                     base   : CARDINAL;  (* [2..26] *)
  250.                     width  : CARDINAL;
  251.                     filler : CHAR);
  252.   BEGIN
  253.     ASSEMBLER
  254.         JSR     wrPrp
  255.         JSR     Convert.ConvNum
  256.         JMP     wrOut
  257.     END
  258.   END WriteNum;
  259.   
  260. PROCEDURE WriteLNum (f      : File;
  261.                      num    : LONGWORD;
  262.                      base   : CARDINAL; (* [2..36] *)
  263.                      width  : CARDINAL;
  264.                      filler : CHAR);
  265.   BEGIN
  266.     ASSEMBLER
  267.         JSR     wrPrp
  268.         JSR     Convert.ConvLNum
  269.         JMP     wrOut
  270.     END
  271.   END WriteLNum;
  272.  
  273. PROCEDURE WriteFix   (f        : File;
  274.                       real     : LONGREAL;
  275.                       width    : CARDINAL;
  276.                       decPlaces: CARDINAL);
  277.   BEGIN
  278.     ASSEMBLER
  279.         JSR     wrPrp
  280.         JSR     Convert.ConvFix
  281.         JMP     wrOut
  282.     END
  283.   END WriteFix;
  284.  
  285. PROCEDURE WriteFloat (f        : File;
  286.                       real     : LONGREAL;
  287.                       width    : CARDINAL;
  288.                       decPlaces: CARDINAL);
  289.   BEGIN
  290.     ASSEMBLER
  291.         JSR     wrPrp
  292.         JSR     Convert.ConvFloat
  293.         JMP     wrOut
  294.     END
  295.   END WriteFloat;
  296.  
  297. PROCEDURE WriteEng   (f        : File;
  298.                       real     : LONGREAL;
  299.                       width    : CARDINAL;
  300.                       decPlaces: CARDINAL);
  301.   BEGIN
  302.     ASSEMBLER
  303.         JSR     wrPrp
  304.         JSR     Convert.ConvEng
  305.         JMP     wrOut
  306.     END
  307.   END WriteEng;
  308.  
  309. PROCEDURE WriteReal  (f        : File;
  310.                       real     : LONGREAL;
  311.                       width    : CARDINAL;
  312.                       decPlaces: CARDINAL);
  313.   BEGIN
  314.     ASSEMBLER
  315.         JSR     wrPrp
  316.         JSR     Convert.ConvReal
  317.         JMP     wrOut
  318.     END
  319.   END WriteReal;
  320.  
  321. END NumberIO.
  322. ə
  323. (* $0000061B$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$00000C55$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$00000FCB$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDAÇ$000004E3T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00000220$00000038$0000040D$0000062A$000004E3$000004EB$000004E3$00000651$00000FCB$00000F9F$0000108F$0000014A$0000015C$00000166$FFED427A$00000164áÇü*)
  324.