1 IMPLEMENTATION MODULE TableHandler;
3 FROM InOut IMPORT Write, WriteLn, WriteInt;
4 FROM Storage IMPORT Allocate;
6 CONST TableLength = 3000;
9 TreePtr = POINTER TO Word;
10 ListPtr = POINTER TO Item;
16 key: CARDINAL; (* table index *)
17 first: ListPtr; (* list head *)
23 id: ARRAY [0..WordLength] OF CHAR;
25 asc: ARRAY [0..TableLength-1] OF CHAR;
27 PROCEDURE InitTable(VAR t: Table);
29 Allocate(t, SIZE(Word));
33 PROCEDURE Search(p: TreePtr): TreePtr;
34 (* search node with name equal to id
36 TYPE Relation = (less, equal, greater);
41 PROCEDURE rel(k: CARDINAL): Relation;
42 (* compare id with asc[k]
53 IF CAP(x) # CAP(y) THEN EXIT END;
54 IF x <= " " THEN RETURN R END;
55 IF x < y THEN R := less ELSIF x > y THEN R := greater END;
59 IF CAP(x) > CAP(y) THEN RETURN greater ELSE RETURN less END
68 IF r = equal THEN RETURN p
69 ELSIF r = less THEN q := p^.left
73 Allocate(q, SIZE(Word)); (* not found, hence insert *)
81 IF r = less THEN p^.left := q ELSE p^.right := q END;
82 i := 0; (* copy identifier into asc table *)
84 IF ascinx = TableLength THEN
100 PROCEDURE Record(t: Table; VAR x: ARRAY OF CHAR; n: INTEGER);
109 UNTIL (id[i-1] = " ") OR (i = WordLength);
114 Allocate(q, SIZE(Item));
125 PROCEDURE Tabulate(t: Table);
127 PROCEDURE PrintItem(p: TreePtr);
129 N = (LineWidth - WordLength) DIV L;
165 PROCEDURE TraverseTree(p: TreePtr);
168 TraverseTree(p^.left);
170 TraverseTree(p^.right)
176 TraverseTree(t^.right)
181 id[WordLength] := " ";