home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / m2t-2.zip / ANSWERS / CH14E1.MOD < prev    next >
Text File  |  1989-01-18  |  2KB  |  68 lines

  1.                            (* Chapter 14 - Programming exercise 1 *)
  2.                                         (* Chapter 14 - Program 3 *)
  3. MODULE AdrStuff;
  4.  
  5. FROM InOut   IMPORT WriteString, WriteCard, WriteInt, WriteLn;
  6. FROM SYSTEM  IMPORT ADR, SIZE, TSIZE, ADDRESS;
  7.  
  8. TYPE IntArray = ARRAY[1..8] OF INTEGER;
  9.      BigArray  = ARRAY[1..5] OF IntArray;
  10.  
  11. VAR  Stuff     : BigArray;
  12.      NeatPoint : ADDRESS;
  13.      IncreAmt  : CARDINAL;
  14.      Index     : INTEGER;
  15.      Count     : INTEGER;
  16.      Amount    : INTEGER;
  17.  
  18. BEGIN
  19.                               (* Load the array with nonsense data *)
  20.    FOR Index := 1 TO 8 DO
  21.       FOR Count := 1 TO 5 DO
  22.          Stuff[Count][Index] := Index + 10 * Count;
  23.       END;
  24.    END;
  25.                          (* Perform some simple pointer operations *)
  26.    NeatPoint := ADR(Stuff[1][1]);
  27.    Index := INTEGER(NeatPoint^);
  28.    WriteInt(Index,6);
  29.    IncreAmt := TSIZE(IntArray);
  30.    NeatPoint := NeatPoint + IncreAmt;
  31.    Index := INTEGER(NeatPoint^);
  32.    WriteInt(Index,6);
  33.    WriteLn;
  34.                       (* Perform some pointer operations in a loop *)
  35.    Count := INTEGER(TSIZE(BigArray)) DIV INTEGER(TSIZE(IntArray));
  36.    FOR Index := 1 TO Count DO
  37.       NeatPoint := ADR(Stuff[1][1]) +
  38.                      CARDINAL((Index-1)*(INTEGER(TSIZE(IntArray))));
  39.       Amount := INTEGER(NeatPoint^);
  40.       WriteInt(Amount,6);
  41.    END;
  42.    WriteLn;
  43.  
  44.    IncreAmt := SIZE(Stuff);
  45.    Count := INTEGER(SIZE(NeatPoint));
  46.  
  47.    WriteString("Size of Stuff is     ");
  48.    WriteCard(IncreAmt,5);
  49.    WriteLn;
  50.    WriteString("Size of NeatPoint is ");
  51.    WriteInt(Count,5);
  52.    WriteLn;
  53.  
  54. END AdrStuff.
  55.  
  56.  
  57.  
  58.  
  59. (* Result of execution
  60.  
  61.     11    21
  62.     11    21    31    41    51
  63. Size of Stuff is        80
  64. Size of NeatPoint is     4
  65.  
  66. *)
  67.  
  68.