000000: 45 58 54 45 4E 44 45 44 20 43 50 43 20 44 53 4B EXTENDED CPC DSK
000010: 20 46 69 6C 65 0D 0A 44 69 73 6B 2D 49 6E 66 6F File..Disk-Info
000020: 0D 0A 53 41 4D 64 69 73 6B 31 34 30 33 31 31 00 ..SAMdisk140311.
000030: 28 01 00 00 13 13 13 13 13 13 13 13 13 13 13 13 (...............
000040: 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 ................
000050: 13 13 13 13 13 13 13 13 13 13 13 13 00 00 00 00 ................
000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000100: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
000110: 00 00 01 00 02 09 52 E5 00 00 C9 02 00 00 00 02 ......R.........
000120: 00 00 C5 02 00 00 00 02 00 00 C1 02 00 00 00 02 ................
000130: 00 00 C6 02 00 00 00 02 00 00 C2 02 00 00 00 02 ................
000140: 00 00 C7 02 00 00 00 02 00 00 C3 02 00 00 00 02 ................
000150: 00 00 C8 02 00 00 00 02 00 00 C4 02 00 00 00 02 ................
000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000200: ED 7B 06 00 11 7C 02 CD 3A 01 21 80 00 7E B7 20 .{...|..:.!..~.
000210: 0B 21 E0 02 11 5C 00 01 0C 00 ED B0 11 5C 00 D5 .!...\.......\..
000220: DD E1 DD 7E 01 FE 20 20 16 D5 13 21 E1 02 01 0B ...~.. ...!....
000230: 00 ED B0 D1 18 09 CD 3A 01 C7 0E 09 C3 05 00 AF .......:........
000240: 32 EC 02 32 ED 02 1A 32 EE 02 0E 11 CD 05 00 3C 2..2...2.......<
000250: 20 05 11 A6 02 18 DF F5 3A EE 02 B7 20 09 0E 19 .......:... ...
000260: CD 05 00 3C 32 EE 02 21 00 00 47 37 CB 15 CB 14 ...<2..!..G7....
000270: A7 10 F9 E5 0E 1D CD 05 00 D1 7D A3 6F 7C A2 B5 ..........}£o|..
000280: 28 05 11 98 02 18 AF F1 3D 87 87 87 87 87 5F 16 (.......=....._.
000290: 00 21 80 00 19 CD FB 01 0E 12 CD 05 00 3C 20 E8 .!...........< .
0002A0: 21 EF 02 E5 CD 24 02 3A ED 02 B7 20 1E 11 C9 02 !....$.:... ....
0002B0: CD 3A 01 0E 01 CD 05 00 F6 20 FE 71 28 3C FE 61 .:....... .q(<.a
0002C0: 20 05 32 ED 02 18 04 FE 79 20 03 CD 57 02 F5 11 .2.....y ..W...
0002D0: 95 02 CD 3A 01 F1 E1 FE 70 3A EC 02 28 0C 11 0C ...:....p:..(...
0002E0: 00 19 3D 28 15 32 EC 02 18 B9 11 F4 FF 19 11 EF ..=(.2..........
0002F0: 02 B7 ED 52 19 38 03 3C 18 EB C7 23 E5 11 0C 00 ...R.8.<...#....
000300: 21 00 00 3A EC 02 B7 28 04 47 19 10 FD 11 EF 02 !..:...(.G......
000310: 19 F5 3A EE 02 77 F1 23 D1 EB 01 0B 00 ED B0 3C ..:..w.#.......<
000320: 32 EC 02 C9 7E 23 E5 C6 40 5F 0E 02 CD 05 00 1E 2...~#..@_......
000330: 3A 0E 02 CD 05 00 E1 06 0B E5 C5 3E 03 B8 20 09 :..........>.. .
000340: E5 1E 2E 0E 02 CD 05 00 E1 5E CB BB 0E 02 CD 05 .........^......
000350: 00 C1 E1 23 10 E3 C9 D1 E1 E5 D5 11 5C 00 01 0C ...#........\...
000360: 00 ED B0 11 5C 00 D5 DD E1 DD CB 09 7E 20 07 0E ....\.......~ ..
000370: 13 CD 05 00 3C C0 11 B8 02 C3 3A 01 57 44 45 4C ....<.....:.WDEL
000380: 20 56 32 2E 30 20 28 43 29 20 31 39 38 37 20 48 V2.0 (C) 1987 H
000390: 69 53 6F 66 74 0D 0A 24 44 72 69 76 65 20 69 73 iSoft..$Drive is
0003A0: 20 52 2F 4F 21 24 4E 6F 20 6D 61 74 63 68 69 6E R/O!$No matchin
0003B0: 67 20 66 69 6C 65 73 24 20 20 43 61 6E 6E 6F 74 g files$ Cannot
0003C0: 20 64 65 6C 65 74 65 21 24 20 20 44 65 6C 65 74 delete!$ Delet
0003D0: 65 20 28 59 2F 4E 2F 41 2F 51 2F 50 29 3F 20 24 e (Y/N/A/Q/P)? $
0003E0: 00 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 00 00 00 00 .???????????....
0003F0: FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 ................
000400: 2A 06 00 F9 11 00 FF 19 22 F9 04 11 51 11 A7 ED *......."...Q...
000410: 52 7C 1F 1F E6 3F 3C F5 11 68 04 CD 42 03 CD 38 R|...?<..h..B..8
000420: 04 F1 CD E9 03 3E 4B CD 47 03 11 8F 04 CD 42 03 .....>K.G.....B.
000430: 3A 5C 00 B7 20 03 CD 68 01 32 F3 04 21 6C 00 7E :\.. ..h.2..!l.~
000440: B7 20 1C 23 7E FE 2D 20 13 23 7E FE 51 28 04 FE . .#~.- .#~.Q(..
000450: 42 20 09 23 7E FE 20 20 03 32 6D 00 CD 68 01 32 B .#~. .2m..h.2
000460: F2 04 18 0B CD 42 03 C7 0E 19 CD 05 00 3C C9 11 .....B.......<..
000470: 46 05 01 0B 00 21 6D 00 7E FE 20 20 03 21 E7 04 F....!m.~. .!..
000480: ED B0 11 5C 00 D5 DD E1 DD 7E 01 FE 20 20 0B D5 ...\.....~.. ..
000490: 13 21 E7 04 01 0B 00 ED B0 D1 0E 11 CD 05 00 3C .!.............<
0004A0: 20 05 11 92 04 18 BD 3D 87 87 87 87 87 5F 16 00 ......=....._..
0004B0: 21 80 00 19 3A F4 04 F5 E5 21 51 05 B7 28 07 47 !...:....!Q..(.G
0004C0: 11 0B 00 19 10 FD D1 13 01 0B 00 EB ED B0 F1 3C ...............<
0004D0: 32 F4 04 0E 12 CD 05 00 3C 20 CC 21 51 05 E5 CD 2.......< .!Q...
0004E0: 9B 02 21 FE 04 CD 4C 03 11 C1 04 CD 42 03 21 22 ..!...L.....B.!"
0004F0: 05 E5 CD 4C 03 E1 11 FE 04 06 0C 1A BE 23 13 20 ...L.........#.
000500: 10 10 F8 11 C6 04 CD 42 03 3A FD 04 B7 28 3C 18 .......B.:...(<.
000510: 5B 3A F7 04 B7 20 2D 11 CD 04 CD 42 03 0E 01 CD [:... -....B....
000520: 05 00 F6 20 FE 71 CA 00 00 FE 61 20 05 32 F7 04 ... .q....a .2..
000530: 18 0C FE 62 28 31 FE 77 28 2C FE 79 20 09 3A F5 ...b(1.w(,.y .:.
000540: 04 32 F6 04 CD CC 02 FE 70 28 21 11 8F 04 CD 42 .2......p(!....B
000550: 03 E1 11 0B 00 19 AF 32 FD 04 3A F4 04 3D 28 C6 .......2..:..=(.
000560: 32 F4 04 C3 DE 01 AF 32 F6 04 18 D8 11 8F 04 CD 2......2........
000570: 42 03 E1 11 F5 FF 19 01 51 05 B7 ED 42 09 DA 00 B.......Q...B...
000580: 00 3E 01 32 FD 04 3A F4 04 3C 18 D4 01 23 00 E5 .>.2..:..<...#..
000590: D5 62 6B 13 36 00 ED B0 D1 E1 C9 E5 11 FE 04 CD .bk.6...........
0005A0: 8C 02 3A F3 04 12 13 01 0B 00 ED B0 11 22 05 CD ..:.........."..
0005B0: 8C 02 3A F2 04 12 13 21 46 05 06 0B 7E FE 3F 23 ..:....!F...~.?#
0005C0: E3 20 01 7E 23 E3 12 13 10 F2 E1 C9 11 FE 04 0E . .~#...........
0005D0: 0F CD 05 00 3C 28 68 AF 32 1E 05 3A F6 04 B7 28 ....<(h.2..:...(
0005E0: 34 21 2B 05 7E F5 36 42 23 5E 36 41 23 56 36 4B 4!+.~.6B#^6A#V6K
0005F0: E5 D5 11 22 05 0E 13 CD 05 00 21 23 05 11 33 05 ..."......!#..3.
000600: 00 57 50 20 20 20 20 20 20 43 4F 4D 00 00 00 08 .WP COM....
000610: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000620: 00 53 44 20 20 20 20 20 20 43 4F 4D 00 00 00 07 .SD COM....
000630: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000640: 00 57 44 20 20 20 20 20 20 43 4F 4D 00 00 00 04 .WD COM....
000650: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000660: 00 2D 32 4A 55 4C 59 31 39 38 37 20 00 00 00 00 .-2JULY1987 ....
000670: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000680: 00 2D 42 41 43 4B 55 50 4E 4F 57 21 00 00 00 00 .-BACKUPNOW!....
000690: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0006A0: 00 2D 56 45 52 53 49 4F 4E 31 32 34 00 00 00 00 .-VERSION124....
0006B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0006C0: 00 43 41 54 20 20 20 20 20 4D 4F 44 00 00 00 80 .CAT MOD....
0006D0: 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 ................
0006E0: 00 43 41 54 20 20 20 20 20 4D 4F 44 01 00 00 04 .CAT MOD....
0006F0: 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000700: 00 43 4F 4D 4D 41 4E 44 20 44 45 46 00 00 00 09 .COMMAND DEF....
000710: 16 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000720: 00 43 4F 4D 4D 41 4E 44 20 4D 4F 44 00 00 00 0C .COMMAND MOD....
000730: 18 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000740: 00 43 4F 4D 50 41 52 45 20 4D 4F 44 00 00 00 61 .COMPARE MOD...a
000750: 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 00 00 00 ...... !"#$%&...
000760: 00 43 4F 4D 50 42 49 4E 20 4D 4F 44 00 00 00 0D .COMPBIN MOD....
000770: 27 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '(..............
000780: 00 43 4F 4D 50 44 49 52 20 4D 4F 44 00 00 00 4E .COMPDIR MOD...N
000790: 29 2A 2B 2C 2D 2E 2F 30 31 32 00 00 00 00 00 00 )*+,-./012......
0007A0: 00 46 49 4C 45 4F 50 53 20 44 45 46 00 00 00 04 .FILEOPS DEF....
0007B0: 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3...............
0007C0: 00 46 49 4C 45 4F 50 53 20 4D 4F 44 00 00 00 14 .FILEOPS MOD....
0007D0: 34 35 36 00 00 00 00 00 00 00 00 00 00 00 00 00 456.............
0007E0: 00 47 45 54 46 49 4C 45 53 44 45 46 00 00 00 06 .GETFILESDEF....
0007F0: 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7...............
000800: 01 0B 00 ED B0 D1 E1 72 2B 73 2B F1 77 0E 17 11 .......r+s+.w...
000810: 22 05 CD 05 00 11 22 05 D5 0E 13 CD 05 00 D1 0E ".....".........
000820: 16 CD 05 00 3C 28 18 CD 77 03 C0 11 22 05 D5 0E ....<(..w..."...
000830: 10 CD 05 00 D1 0E 13 CD 05 00 11 A8 04 18 03 11 ................
000840: 9B 04 0E 09 C3 05 00 5F 0E 02 18 F8 7E C6 40 23 ......._....~.@#
000850: E5 CD 47 03 1E 3A CD 48 03 E1 06 0B E5 C5 3E 03 ..G..:.H......>.
000860: B8 20 07 E5 1E 2E CD 48 03 E1 5E CB BB 73 CD 48 . .....H..^..s.H
000870: 03 C1 E1 23 10 E6 C9 AF 32 F8 04 67 6F 22 FB 04 ...#....2..go"..
000880: 11 51 11 D5 0E 1A CD 05 00 11 FE 04 0E 14 CD 05 .Q..............
000890: 00 D1 A7 20 19 2A FB 04 23 22 FB 04 21 80 00 19 ... .*..#"..!...
0008A0: ED 5B F9 04 EB ED 52 30 DA 3E 01 32 F8 04 ED 4B .[....R0.>.2...K
0008B0: FB 04 78 B1 28 23 11 51 11 C5 D5 0E 1A CD 05 00 ..x.(#.Q........
0008C0: 11 22 05 0E 15 CD 05 00 D1 C1 A7 28 02 AF C9 21 .".........(...!
0008D0: 80 00 19 EB 0B 78 B1 20 E0 3A F8 04 A7 20 98 11 .....x. .:... ..
0008E0: 22 05 0E 10 CD 05 00 3C C9 4F AF 21 81 00 1E 02 "......<.O.!....
0008F0: D5 E5 11 0A 00 21 00 00 06 10 CB 11 17 ED 6A ED .....!........j.
000900: 52 30 01 19 3F 10 F3 CB 11 17 55 E1 72 2B D1 1D R0..?.....U.r+..
000910: 20 DE 06 02 CB 81 78 FE 01 20 02 CB C1 23 7E B7 .....x.. ...#~.
000920: 20 08 CB 41 20 04 3E 20 18 04 CB C1 C6 30 E5 C5 ..A .> .....0..
000930: CD 47 03 C1 E1 10 DF C9 AF 32 F7 04 32 F4 04 47 .G.......2..2..G
000940: 3A 80 00 4F 21 81 00 3E 2D ED B1 C0 2B 2B 7E FE :..O!..>-...++~.
000950: 20 23 23 20 F2 7E 23 FE 51 28 08 FE 42 C0 32 F5 ## .~#.Q(..B.2.
000960: 04 18 F2 32 F7 04 18 ED 57 50 20 56 33 2E 30 20 ...2....WP V3.0
000970: 28 43 29 20 31 39 38 37 20 48 69 53 6F 66 74 0D (C) 1987 HiSoft.
000980: 0A 42 75 66 66 65 72 20 73 69 7A 65 3A 20 24 0D .Buffer size: $.
000990: 0A 24 4E 6F 20 66 69 6C 65 73 24 20 4F 70 65 6E .$No files$ Open
0009A0: 20 66 61 69 6C 65 64 24 20 44 69 73 63 20 49 2F failed$ Disc I/
0009B0: 4F 20 65 72 72 6F 72 20 28 46 75 6C 6C 20 3F 29 O error (Full ?)
0009C0: 24 20 74 6F 20 24 20 20 53 61 6D 65 24 20 20 43 $ to $ Same$ C
0009D0: 6F 70 79 20 28 59 2F 4E 2F 41 2F 51 2F 50 2F 42 opy (Y/N/A/Q/P/B
0009E0: 2F 57 29 3F 20 24 00 3F 3F 3F 3F 3F 3F 3F 3F 3F /W)? $.?????????
0009F0: 3F 3F 00 00 00 00 00 00 00 00 00 00 00 00 20 4C ??............ L
000A00: 00 47 45 54 46 49 4C 45 53 4D 4F 44 00 00 00 0F .GETFILESMOD....
000A10: 38 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 89..............
000A20: 00 49 4D 50 4F 52 54 20 20 44 45 46 00 00 00 17 .IMPORT DEF....
000A30: 3A 3B 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 :;<.............
000A40: 00 49 4D 50 4F 52 54 20 20 4D 4F 44 00 00 00 3E .IMPORT MOD...>
000A50: 3D 3E 3F 40 41 42 43 44 00 00 00 00 00 00 00 00 =>?@ABCD........
000A60: 00 4D 41 43 52 4F 53 20 20 4D 42 45 00 00 00 33 .MACROS MBE...3
000A70: 45 46 47 48 49 4A 4B 00 00 00 00 00 00 00 00 00 EFGHIJK.........
000A80: 00 4D 4C 55 20 20 20 20 20 4D 4F 44 00 00 00 64 .MLU MOD...d
000A90: 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 00 00 00 LMNOPQRSTUVWX...
000AA0: 00 50 41 54 54 45 52 4E 20 44 45 46 00 00 00 30 .PATTERN DEF...0
000AB0: 59 5A 5B 5C 5D 5E 00 00 00 00 00 00 00 00 00 00 YZ[\]^..........
000AC0: 00 50 41 54 54 45 52 4E 20 4D 4F 44 00 00 00 35 .PATTERN MOD...5
000AD0: 5F 60 61 62 63 64 65 00 00 00 00 00 00 00 00 00 _`abcde.........
000AE0: 00 53 43 52 45 45 4E 49 4F 45 41 52 00 00 00 55 .SCREENIOEAR...U
000AF0: 66 67 68 69 6A 6B 6C 6D 6E 6F 70 00 00 00 00 00 fghijklmnop.....
000B00: 00 53 43 52 45 45 4E 49 4F 4D 42 45 00 00 00 53 .SCREENIOMBE...S
000B10: 71 72 73 74 75 76 77 78 79 7A 7B 00 00 00 00 00 qrstuvwxyz{.....
000B20: 00 53 43 52 45 45 4E 49 4F 4F 53 42 00 00 00 50 .SCREENIOOSB...P
000B30: 7C 7D 7E 7F 80 81 82 83 84 85 00 00 00 00 00 00 |}~.............
000B40: 00 54 45 53 54 50 41 54 20 4D 4F 44 00 00 00 0C .TESTPAT MOD....
000B50: 86 87 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000B60: 00 45 44 49 54 43 4F 4E 54 44 4D 42 00 00 00 6E .EDITCONTDMB...n
000B70: 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 00 00 ................
000B80: 00 45 44 49 54 44 49 53 50 44 4D 42 00 00 00 35 .EDITDISPDMB...5
000B90: 96 97 98 99 9A 9B 9C 00 00 00 00 00 00 00 00 00 ................
000BA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C00: ED 7B 06 00 11 F3 03 CD 87 01 0E 19 CD 05 00 32 .{.............2
000C10: 5C 04 21 80 00 7E A7 20 0B 21 1F 04 11 5C 00 01 \.!..~. .!...\..
000C20: 0C 00 ED B0 AF 32 55 04 32 5F 04 11 5C 00 D5 DD .....2U.2_..\...
000C30: E1 DD 7E 01 FE 20 20 0B D5 13 21 20 04 01 0B 00 ..~.. ...! ....
000C40: ED B0 D1 1A B7 20 04 3A 5C 04 3C 3D 32 5D 04 5F ..... .:\.<=2]._
000C50: 0E 0E CD 05 00 0E 1F CD 05 00 22 56 04 23 23 23 .........."V.###
000C60: 23 7E 32 58 04 11 5C 00 DD 36 0C 3F 0E 11 CD 05 #~2X..\..6.?....
000C70: 00 3C 20 18 11 41 04 CD 87 01 CD 1B 03 3A 5C 04 .< ..A.......:\.
000C80: 5F 0E 0E CD 05 00 C7 0E 09 C3 05 00 3D 87 87 87 _...........=...
000C90: 87 87 5F 16 00 21 80 00 19 3A 5F 04 F5 E5 21 65 .._..!...:_...!e
000CA0: 04 B7 28 07 47 11 10 00 19 10 FD D1 01 10 00 EB ..(.G...........
000CB0: ED B0 F1 3C 32 5F 04 0E 12 CD 05 00 3C 20 CD CD ...<2_......< ..
000CC0: 65 02 3A 5F 04 47 DD 21 65 04 C5 DD CB 00 7E CC e.:_.G.!e.....~.
000CD0: DC 01 11 10 00 DD 19 C1 10 F0 18 98 CD 41 02 11 .............A..
000CE0: 2E 04 DD CB 0A 7E 28 03 11 2B 04 CD 87 01 11 34 .....~(..+.....4
000CF0: 04 DD CB 09 7E 28 03 11 31 04 CD 87 01 DD 6E 0F ....~(..1.....n.
000D00: DD 66 0E 7D B4 28 13 7D E6 07 20 01 2B CB 3C CB .f.}.(.}.. .+.<.
000D10: 1D CB 3C CB 1D CB 3C CB 1D 23 4D 7C CD A2 03 11 ..<...<..#M|....
000D20: 37 04 CD 87 01 DD 4E 0F DD 7E 0E CD A2 03 11 1A 7.....N..~......
000D30: 04 3A 55 04 EE 01 32 55 04 28 03 11 1D 04 C3 87 .:U...2U.(......
000D40: 01 DD E5 E1 06 0B 23 E5 C5 3E 03 B8 20 09 E5 1E ......#..>.. ...
000D50: 2E 0E 02 CD 05 00 E1 5E CB BB 0E 02 CD 05 00 C1 .......^........
000D60: E1 23 10 E3 C9 DD 21 65 04 3A 5F 04 47 C5 3A 58 .#....!e.:_.G.:X
000D70: 04 DD BE 0C 38 25 DD 7E 0F FE 80 20 1E CD CC 02 ....8%.~... ....
000D80: 28 19 FD CB 00 FE FD 6E 0F FD 66 0E DD 5E 0F DD (......n..f..^..
000D90: 56 0E 19 DD 75 0F DD 74 0E 18 E2 3A 58 04 B7 C4 V...u..t...:X...
000DA0: AB 02 11 10 00 DD 19 C1 10 C3 C9 3C 5F DD 4E 0C ...........<_.N.
000DB0: AF 57 CD DD 03 7D B7 C8 45 DD 6E 0F DD 66 0E 11 .W...}..E.n..f..
000DC0: 80 00 19 10 FD DD 75 0F DD 74 0E C9 FD 21 65 04 ......u..t...!e.
000DD0: C5 3A 5F 04 47 DD E5 FD E5 E1 D1 A7 ED 52 28 09 .:_.G........R(.
000DE0: FD CB 00 7E CC 08 03 28 0A 11 10 00 FD 19 10 E5 ...~...(........
000DF0: AF C1 C9 3A 58 04 B7 28 0B DD E5 FD E5 DD E1 CD ...:X..(........
000E00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000EA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000EB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000EC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000ED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000EE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000EF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001000: AB 02 DD E1 F6 01 C1 C9 DD E5 FD E5 D1 E1 C5 06 ................
001010: 0B 23 13 1A BE 20 02 10 F8 C1 C9 0E 0C CD 05 00 .#... ..........
001020: FE 30 30 50 DD 2A 56 04 DD 6E 05 DD 66 06 22 59 .00P.*V..n..f."Y
001030: 04 DD 7E 02 D6 02 47 AF 37 17 10 FD 32 5B 04 0E ..~...G.7...2[..
001040: 1B CD 05 00 ED 4B 59 04 03 11 00 00 3E 08 32 5E .....KY.....>.2^
001050: 04 CB 16 38 01 13 0B 79 B0 28 09 3A 5E 04 3D 20 ...8...y.(.:^.=
001060: ED 23 18 E8 6B 62 3A 5B 04 47 05 28 03 19 10 FD .#..kb:[.G.(....
001070: 7C 4D 18 23 3A 5D 04 0E 2E 5F CD 05 00 06 03 DD |M.#:]..._......
001080: 21 80 00 DD CB 02 3E DD CB 01 1E DD CB 00 1E 10 !.....>.........
001090: F2 DD 7E 01 DD 4E 00 CD A2 03 3E 4B 5F 0E 02 C3 ..~..N....>K_...
0010A0: 05 00 21 64 04 1E 05 D5 E5 11 0A 00 CD DD 03 55 ..!d...........U
0010B0: E1 72 2B D1 1D 20 F0 06 05 CB 81 78 FE 01 20 02 .r+.. .....x.. .
0010C0: CB C1 23 7E B7 20 08 CB 41 20 04 3E 20 18 04 CB ..#~. ..A .> ...
0010D0: C1 C6 30 E5 C5 CD 9C 03 C1 E1 10 DF C9 21 00 00 ..0..........!..
0010E0: 06 10 CB 11 17 ED 6A ED 52 30 01 19 3F 10 F3 CB ......j.R0..?...
0010F0: 11 17 C9 53 44 20 56 31 2E 30 20 62 79 20 41 64 ...SD V1.0 by Ad
001100: 61 6D 20 44 65 6E 6E 69 6E 67 20 28 43 29 20 48 am Denning (C) H
001110: 69 53 6F 66 74 20 31 39 38 36 0D 0A 24 09 24 00 iSoft 1986..$.$.
001120: 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 20 53 24 20 20 ??????????? S$
001130: 24 52 20 24 20 20 24 4B 20 20 52 65 63 73 3A 20 $R $ $K Recs:
001140: 24 0D 0A 44 69 73 63 20 66 72 65 65 20 73 70 61 $..Disc free spa
001150: 63 65 3A 20 24 66 75 6E 63 74 69 6F 6E F3 20 69 ce: $function. i
001160: EE 20 73 6F 75 72 63 E5 20 61 6E E4 20 4D 61 6E . sourc. an. Man
001170: F8 20 8D 0A 6C 69 62 72 61 72 F9 20 66 6F 72 6D . ..librar. form
001180: 3B 0D 0A 09 6A 2C 6B 3A 49 4E 54 45 47 45 52 3B ;...j,k:INTEGER;
001190: 0D 0A 42 45 47 49 4E 0D 0A 09 6A 3A 3D 33 3B 0D ..BEGIN...j:=3;.
0011A0: 0A 09 57 48 49 4C 45 20 28 6A 3E 30 29 20 41 4E ..WHILE (j>0) AN
0011B0: 44 20 28 69 3C 3E 30 29 20 44 4F 0D 0A 09 09 6B D (i<>0) DO....k
0011C0: 3A 3D 69 20 44 49 56 20 31 30 3B 0D 0A 09 09 54 :=i DIV 10;....T
0011D0: 65 78 74 5B 6A 5D 3A 3D 43 48 52 28 69 2D 31 30 ext[j]:=CHR(i-10
0011E0: 2A 6B 2B 4F 52 44 28 27 30 27 29 29 3B 0D 0A 09 *k+ORD('0'));...
0011F0: 09 69 3A 3D 6B 3B 0D 0A 09 09 6A 3A 3D 6A 2D 31 .i:=k;....j:=j-1
001200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001400: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
001410: 01 00 01 00 02 09 52 E5 01 00 C9 02 00 00 00 02 ......R.........
001420: 01 00 C5 02 00 00 00 02 01 00 C1 02 00 00 00 02 ................
001430: 01 00 C6 02 00 00 00 02 01 00 C2 02 00 00 00 02 ................
001440: 01 00 C7 02 00 00 00 02 01 00 C3 02 00 00 00 02 ................
001450: 01 00 C8 02 00 00 00 02 01 00 C4 02 00 00 00 02 ................
001460: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
001470: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
001480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
001490: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
001500: 64 6F 75 62 6C 65 64 2E 20 42 75 74 20 66 65 77 doubled. But few
001510: 20 66 69 6C 65 73 20 77 69 6C 6C 20 68 61 76 65 files will have
001520: 20 6D 6F 72 65 20 0D 0A 09 20 20 74 68 61 6E 20 more ... than
001530: 32 30 30 30 20 6C 69 6E 65 73 20 69 6E 20 74 68 2000 lines in th
001540: 65 6D 2C 20 73 6F 20 69 74 20 64 69 64 6E 27 74 em, so it didn't
001550: 20 73 65 65 6D 20 77 6F 72 74 68 20 74 68 65 20 seem worth the
001560: 65 78 74 72 61 20 65 66 66 6F 72 74 2E 0D 0A 0D extra effort....
001570: 0A 09 20 20 59 6F 75 20 63 61 6E 20 63 68 61 6E .. You can chan
001580: 67 65 20 74 68 65 20 75 70 70 65 72 20 62 6F 75 ge the upper bou
001590: 6E 64 20 61 74 20 77 69 6C 6C 20 74 6F 20 63 68 nd at will to ch
0015A0: 61 6E 67 65 20 74 68 65 20 73 69 7A 65 20 6F 66 ange the size of
0015B0: 20 74 68 65 0D 0A 09 20 20 74 61 62 6C 65 2E 20 the... table.
0015C0: 20 2A 29 0D 0A 0D 0A 09 48 69 67 68 57 61 74 65 *).....HighWate
0015D0: 72 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 54 68 r:CARDINAL;.(*Th
0015E0: 65 20 74 6F 70 20 65 6E 74 72 79 20 69 6E 20 50 e top entry in P
0015F0: 6F 73 74 61 62 6C 65 20 77 68 69 63 68 20 69 73 ostable which is
001600: 20 76 61 6C 69 64 2A 29 0D 0A 56 41 52 09 4C 69 valid*)..VAR.Li
001610: 6E 65 4F 66 46 69 6C 65 3A 43 41 52 44 49 4E 41 neOfFile:CARDINA
001620: 4C 3B 0D 0A 09 43 6F 6E 74 69 6E 75 61 74 69 6F L;...Continuatio
001630: 6E 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B n:BOOLEAN=FALSE;
001640: 09 28 2A 74 72 75 65 20 69 66 20 6C 69 6E 65 20 .(*true if line
001650: 69 73 20 63 6F 6E 74 69 6E 75 61 74 69 6F 6E 20 is continuation
001660: 6F 66 0D 0A 09 09 09 09 09 20 20 70 72 65 76 69 of....... previ
001670: 6F 75 73 20 6C 69 6E 65 2A 29 0D 0A 0D 0A 50 52 ous line*)....PR
001680: 4F 43 45 44 55 52 45 20 41 64 64 4D 61 72 6B 65 OCEDURE AddMarke
001690: 72 3B 0D 0A 0D 0A 28 2A 09 41 64 64 20 61 20 6D r;....(*.Add a m
0016A0: 61 72 6B 65 72 20 74 6F 20 74 68 65 20 70 6F 73 arker to the pos
0016B0: 69 74 69 6F 6E 20 74 61 62 6C 65 2E 20 20 4C 69 ition table. Li
0016C0: 6E 4F 66 46 69 6C 65 20 67 69 76 65 73 20 6C 69 nOfFile gives li
0016D0: 6E 65 20 6E 75 6D 62 65 72 2A 29 0D 0A 42 45 47 ne number*)..BEG
0016E0: 49 4E 0D 0A 09 49 46 20 28 4C 69 6E 65 4F 66 46 IN...IF (LineOfF
0016F0: 69 6C 65 3C 48 49 47 48 28 50 6F 73 54 61 62 6C ile<HIGH(PosTabl
001700: 52 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B R.reply:INTEGER;
001710: 0D 0A 09 69 2C 6A 3A 49 4E 54 45 47 45 52 3B 0D ...i,j:INTEGER;.
001720: 0A 09 49 6E 66 3A 46 49 4C 45 3B 09 28 2A 69 6E ..Inf:FILE;.(*in
001730: 70 75 74 20 66 69 6C 65 2A 29 0D 0A 0D 0A 09 28 put file*).....(
001740: 2A 09 54 68 65 20 69 6E 70 75 74 20 69 73 20 62 *.The input is b
001750: 75 66 66 65 72 65 64 3A 0D 0A 09 09 42 75 66 66 uffered:....Buff
001760: 65 72 20 20 20 20 20 63 6F 6E 74 61 69 6E 73 20 er contains
001770: 74 68 65 20 74 65 78 74 20 74 6F 20 62 75 66 66 the text to buff
001780: 65 72 0D 0A 09 09 42 6C 6F 63 6B 4E 6F 20 20 20 er....BlockNo
001790: 20 63 6F 6E 74 61 69 6E 73 20 74 68 65 20 6E 75 contains the nu
0017A0: 6D 62 65 72 20 6F 66 20 74 68 65 20 66 69 72 73 mber of the firs
0017B0: 74 20 62 6C 6F 63 6B 20 69 6E 20 74 68 65 20 62 t block in the b
0017C0: 75 66 66 65 72 0D 0A 09 09 09 20 20 20 54 68 69 uffer..... Thi
0017D0: 73 20 76 61 72 69 61 62 6C 65 20 69 73 20 6D 6F s variable is mo
0017E0: 64 69 66 69 65 64 20 62 79 20 74 68 65 20 72 61 dified by the ra
0017F0: 6E 64 6F 6D 20 70 6F 73 69 74 69 6F 6E 69 6E 67 ndom positioning
001800: 0D 0A 09 09 09 20 20 20 63 6F 64 65 20 74 6F 20 ..... code to
001810: 72 65 66 6C 65 63 74 20 63 68 61 6E 67 65 73 20 reflect changes
001820: 69 6E 20 74 68 65 20 66 69 6C 65 20 70 6F 73 69 in the file posi
001830: 74 69 6F 6E 0D 0A 09 09 43 68 61 72 50 6F 73 20 tion....CharPos
001840: 20 20 20 67 69 76 65 73 20 74 68 65 20 63 68 61 gives the cha
001850: 72 61 63 74 65 72 20 6E 75 6D 62 65 72 20 6F 66 racter number of
001860: 20 74 68 65 20 6E 65 78 74 20 63 68 61 72 61 63 the next charac
001870: 74 65 72 20 74 6F 20 0D 0A 09 09 09 20 20 20 62 ter to ..... b
001880: 65 20 6C 69 73 74 65 64 20 66 72 6F 6D 20 74 68 e listed from th
001890: 65 20 62 75 66 66 65 72 0D 0A 09 09 43 68 61 72 e buffer....Char
0018A0: 43 6F 75 6E 74 20 20 67 69 76 65 73 20 6E 75 6D Count gives num
0018B0: 62 65 72 20 6F 66 20 76 61 6C 69 64 20 63 68 61 ber of valid cha
0018C0: 72 61 63 74 65 72 73 20 69 6E 20 74 68 65 20 62 racters in the b
0018D0: 75 66 66 65 72 2C 20 69 74 20 6D 61 79 20 62 65 uffer, it may be
0018E0: 0D 0A 09 09 09 20 20 20 6C 65 73 73 20 74 68 61 ..... less tha
0018F0: 6E 20 74 68 65 20 62 75 66 66 65 72 20 6C 65 6E n the buffer len
001900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B00: 67 74 68 20 77 68 65 6E 20 65 6E 64 2D 6F 66 2D gth when end-of-
001B10: 66 69 6C 65 20 69 73 0D 0A 09 09 09 20 20 20 65 file is..... e
001B20: 6E 63 6F 75 6E 74 65 72 65 64 0D 0A 2A 29 0D 0A ncountered..*)..
001B30: 09 42 75 66 66 65 72 3A 41 52 52 41 59 5B 30 2E .Buffer:ARRAY[0.
001B40: 2E 42 75 66 66 65 72 53 69 7A 65 2D 31 5D 20 4F .BufferSize-1] O
001B50: 46 20 43 48 41 52 3B 0D 0A 09 4E 65 78 74 42 6C F CHAR;...NextBl
001B60: 6F 63 6B 4E 6F 2C 42 6C 6F 63 6B 4E 6F 3A 43 41 ockNo,BlockNo:CA
001B70: 52 44 49 4E 41 4C 3B 0D 0A 09 43 68 61 72 50 6F RDINAL;...CharPo
001B80: 73 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 43 68 s:CARDINAL;...Ch
001B90: 61 72 43 6F 75 6E 74 3A 43 41 52 44 49 4E 41 4C arCount:CARDINAL
001BA0: 3B 0D 0A 09 50 61 67 65 4E 75 6D 62 65 72 3A 49 ;...PageNumber:I
001BB0: 4E 54 45 47 45 52 3B 0D 0A 09 50 61 67 65 4C 65 NTEGER;...PageLe
001BC0: 6E 3A 43 41 52 44 49 4E 41 4C 3D 32 34 3B 0D 0A n:CARDINAL=24;..
001BD0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 61 64 ..PROCEDURE Read
001BE0: 42 75 66 66 65 72 3B 0D 0A 42 45 47 49 4E 0D 0A Buffer;..BEGIN..
001BF0: 09 42 6C 6F 63 6B 4E 6F 3A 3D 4E 65 78 74 42 6C .BlockNo:=NextBl
001C00: 6F 63 6B 4E 6F 3B 09 0D 0A 09 52 65 61 64 42 6C ockNo;....ReadBl
001C10: 6F 63 6B 28 49 6E 66 2C 41 44 52 28 42 75 66 66 ock(Inf,ADR(Buff
001C20: 65 72 29 2C 30 2C 42 75 66 66 65 72 53 69 7A 65 er),0,BufferSize
001C30: 2C 72 65 70 6C 79 29 3B 0D 0A 09 43 68 61 72 43 ,reply);...CharC
001C40: 6F 75 6E 74 3A 3D 72 65 70 6C 79 3B 0D 0A 0D 0A ount:=reply;....
001C50: 09 28 2A 50 61 64 20 72 65 73 74 20 6F 66 20 62 .(*Pad rest of b
001C60: 75 66 66 65 72 20 77 69 74 68 20 65 6E 64 2D 6F uffer with end-o
001C70: 66 2D 66 69 6C 65 20 63 68 61 72 61 63 74 65 72 f-file character
001C80: 73 0D 0A 09 20 20 4E 6F 72 6D 61 6C 6C 79 2C 20 s... Normally,
001C90: 43 68 61 72 43 6F 75 6E 74 20 77 69 6C 6C 20 65 CharCount will e
001CA0: 71 75 61 6C 20 48 49 47 48 28 62 75 66 66 65 72 qual HIGH(buffer
001CB0: 29 2B 31 2C 20 73 6F 20 6E 6F 0D 0A 09 20 20 70 )+1, so no... p
001CC0: 61 64 64 69 6E 67 20 74 61 6B 65 73 20 70 6C 61 adding takes pla
001CD0: 63 65 2A 29 0D 0A 0D 0A 09 46 4F 52 20 43 68 61 ce*).....FOR Cha
001CE0: 72 50 6F 73 3A 3D 43 68 61 72 43 6F 75 6E 74 20 rPos:=CharCount
001CF0: 54 4F 20 48 49 47 48 28 42 75 66 66 65 72 29 20 TO HIGH(Buffer)
001D00: 4D 4F 44 55 4C 45 20 43 61 74 3B 0D 0A 0D 0A 28 MODULE Cat;....(
001D10: 2A 09 4C 69 73 74 20 6F 6E 65 20 6F 66 20 6D 6F *.List one of mo
001D20: 72 65 20 66 69 6C 65 73 20 74 6F 20 74 68 65 20 re files to the
001D30: 74 65 72 6D 69 6E 61 6C 0D 0A 0D 0A 0D 0A 09 43 terminal.......C
001D40: 61 6C 6C 20 69 73 20 43 41 54 20 20 20 3C 28 77 all is CAT <(w
001D50: 69 6C 64 20 63 61 72 64 29 20 66 69 6C 65 20 6E ild card) file n
001D60: 61 6D 65 3E 2C 2E 2E 2E 2E 20 5B 4F 70 74 69 6F ame>,.... [Optio
001D70: 6E 73 0D 0A 0D 0A 09 57 68 65 72 65 20 74 68 65 ns.....Where the
001D80: 20 77 69 6C 64 20 63 61 72 64 20 66 69 6C 65 20 wild card file
001D90: 6E 61 6D 65 73 20 61 72 65 20 74 68 65 20 6E 61 names are the na
001DA0: 6D 65 73 20 6F 66 20 66 69 6C 65 73 20 74 6F 20 mes of files to
001DB0: 6C 69 73 74 0D 0A 09 54 68 65 20 6F 70 74 69 6F list...The optio
001DC0: 6E 73 20 61 72 65 3A 0D 0A 0D 0A 09 09 50 20 2D ns are:......P -
001DD0: 20 72 75 6E 20 69 6E 20 70 61 67 65 20 6D 6F 64 run in page mod
001DE0: 65 0D 0A 09 09 20 20 20 20 69 6E 20 70 61 67 65 e.... in page
001DF0: 20 6D 6F 64 65 2C 20 61 74 20 74 68 65 20 65 6E mode, at the en
001E00: 64 20 6F 66 20 65 61 63 68 20 73 63 72 65 65 6E d of each screen
001E10: 20 6F 66 20 6F 75 74 70 75 74 2C 0D 0A 09 09 20 of output,....
001E20: 20 20 20 61 20 70 72 6F 6D 70 74 20 6C 69 6E 65 a prompt line
001E30: 20 69 73 20 70 72 65 73 65 6E 74 65 64 2E 0D 0A is presented...
001E40: 0D 0A 09 09 20 20 20 50 20 6D 61 79 20 62 65 20 .... P may be
001E50: 66 6F 6C 6C 6F 77 65 64 20 62 79 20 74 68 65 20 followed by the
001E60: 73 63 72 65 65 6E 20 6C 65 6E 67 74 68 20 69 6E screen length in
001E70: 20 6C 69 6E 65 73 0D 0A 09 09 20 20 20 20 20 64 lines.... d
001E80: 65 66 61 75 6C 74 20 69 73 20 32 34 0D 0A 0D 0A efault is 24....
001E90: 09 09 4E 20 2D 20 6F 75 74 70 75 74 20 6C 69 6E ..N - output lin
001EA0: 65 20 6E 75 6D 62 65 72 73 0D 0A 09 09 57 20 2D e numbers....W -
001EB0: 20 77 72 61 70 20 6C 69 6E 65 73 20 6C 6F 6E 67 wrap lines long
001EC0: 65 72 20 74 68 61 6E 20 73 63 72 65 65 6E 20 77 er than screen w
001ED0: 69 64 74 68 0D 0A 09 09 20 20 20 20 57 20 6D 61 idth.... W ma
001EE0: 79 20 62 65 20 66 6F 6C 6C 6F 77 65 64 20 62 79 y be followed by
001EF0: 20 73 63 72 65 65 6E 20 77 69 64 74 68 20 69 6E screen width in
001F00: 44 4F 20 42 75 66 66 65 72 5B 43 68 61 72 50 6F DO Buffer[CharPo
001F10: 73 5D 3A 3D 45 4F 46 20 45 4E 44 3B 0D 0A 09 43 s]:=EOF END;...C
001F20: 68 61 72 50 6F 73 3A 3D 30 3B 0D 0A 0D 0A 09 28 harPos:=0;.....(
001F30: 2A 09 69 6E 63 72 65 6D 65 6E 74 20 4E 65 78 74 *.increment Next
001F40: 42 6C 6F 63 6B 20 74 6F 20 61 6C 6C 6F 77 20 66 Block to allow f
001F50: 6F 72 20 64 61 74 61 20 72 65 61 64 2A 29 0D 0A or data read*)..
001F60: 0D 0A 09 4E 65 78 74 42 6C 6F 63 6B 4E 6F 3A 3D ...NextBlockNo:=
001F70: 49 4E 54 45 47 45 52 28 42 6C 6F 63 6B 4E 6F 29 INTEGER(BlockNo)
001F80: 2B 72 65 70 6C 79 20 44 49 56 20 42 6C 6F 63 6B +reply DIV Block
001F90: 53 69 7A 65 3B 0D 0A 09 45 4E 44 20 52 65 61 64 Size;...END Read
001FA0: 42 75 66 66 65 72 3B 0D 0A 0D 0A 56 41 52 09 63 Buffer;....VAR.c
001FB0: 68 3A 43 48 41 52 3B 09 09 28 2A 6E 65 78 74 20 h:CHAR;..(*next
001FC0: 63 68 61 72 61 63 74 65 72 20 72 65 61 64 2A 29 character read*)
001FD0: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 4E 65 ....PROCEDURE Ne
001FE0: 78 74 43 68 61 72 3B 0D 0A 42 45 47 49 4E 0D 0A xtChar;..BEGIN..
001FF0: 09 49 46 20 43 68 61 72 50 6F 73 3E 3D 43 68 61 .IF CharPos>=Cha
002000: 72 43 6F 75 6E 74 20 54 48 45 4E 20 0D 0A 09 09 rCount THEN ....
002010: 52 65 61 64 42 75 66 66 65 72 3B 0D 0A 09 09 45 ReadBuffer;....E
002020: 4E 44 3B 20 20 28 2A 49 46 20 43 68 61 72 50 6F ND; (*IF CharPo
002030: 73 3E 3D 43 68 61 72 43 6F 75 6E 74 2A 29 0D 0A s>=CharCount*)..
002040: 09 63 68 3A 3D 42 75 66 66 65 72 5B 43 68 61 72 .ch:=Buffer[Char
002050: 50 6F 73 5D 3B 0D 0A 09 49 4E 43 28 43 68 61 72 Pos];...INC(Char
002060: 50 6F 73 29 3B 0D 0A 09 45 4E 44 20 4E 65 78 74 Pos);...END Next
002070: 43 68 61 72 3B 0D 0A 0D 0A 28 2A 09 46 69 6C 65 Char;....(*.File
002080: 20 70 6F 73 69 74 69 6F 6E 69 6E 67 20 72 6F 75 positioning rou
002090: 74 69 6E 65 73 0D 0A 0D 0A 09 59 6F 75 20 63 61 tines.....You ca
0020A0: 6E 20 70 6F 73 69 74 69 6F 6E 20 61 20 66 69 6C n position a fil
0020B0: 65 20 62 79 3A 0D 0A 0D 0A 09 09 69 29 09 47 69 e by:......i).Gi
0020C0: 76 69 6E 67 20 74 68 65 20 6E 75 6D 62 65 72 20 ving the number
0020D0: 6F 66 20 74 68 65 20 6C 69 6E 65 20 74 6F 20 6C of the line to l
0020E0: 69 73 74 20 66 72 6F 6D 0D 0A 09 09 69 69 29 09 ist from....ii).
0020F0: 47 69 76 69 6E 67 20 61 20 73 74 72 69 6E 67 20 Giving a string
002100: 20 63 68 61 72 61 63 74 65 72 73 0D 0A 09 09 20 characters....
002110: 20 20 20 64 65 66 61 75 6C 74 20 69 73 20 38 30 default is 80
002120: 0D 0A 0D 0A 09 09 49 20 2D 20 65 78 70 61 6E 64 ......I - expand
002130: 20 74 61 62 73 20 74 6F 20 73 70 61 63 65 73 0D tabs to spaces.
002140: 0A 0D 0A 0D 0A 0D 0A 09 46 6F 72 20 65 78 61 6D ........For exam
002150: 70 6C 65 3A 0D 0A 0D 0A 09 09 43 41 54 20 62 3A ple:......CAT b:
002160: 2A 2E 64 65 66 20 62 3A 2A 2E 6D 6F 64 20 62 3A *.def b:*.mod b:
002170: 2A 2E 73 75 62 5B 50 31 36 57 31 30 30 4E 0D 0A *.sub[P16W100N..
002180: 0D 0A 0D 0A 0D 0A 09 54 68 69 73 20 69 73 20 61 .......This is a
002190: 20 68 61 63 6B 20 6F 66 20 74 68 65 20 4C 49 53 hack of the LIS
0021A0: 54 20 70 72 6F 67 72 61 6D 20 77 68 69 63 68 20 T program which
0021B0: 63 6F 6D 65 73 20 77 69 74 68 20 6D 79 0D 0A 09 comes with my...
0021C0: 4D 6F 64 75 6C 61 2D 32 20 63 6F 6D 70 69 6C 65 Modula-2 compile
0021D0: 72 2E 20 28 42 75 74 20 68 69 67 68 6C 79 20 6D r. (But highly m
0021E0: 6F 64 69 66 69 65 64 29 0D 0A 0D 0A 09 4C 69 6D odified).....Lim
0021F0: 69 74 61 74 69 6F 6E 73 3A 0D 0A 09 3D 3D 3D 3D itations:...====
002200: 3D 3D 3D 3D 3D 3D 3D 3D 0D 0A 09 09 41 74 20 6D ========....At m
002210: 6F 73 74 20 31 30 20 28 77 69 6C 64 20 63 61 72 ost 10 (wild car
002220: 64 29 20 66 69 6C 65 20 6E 61 6D 65 73 20 63 61 d) file names ca
002230: 6E 20 62 65 20 75 73 65 64 0D 0A 09 09 45 61 63 n be used....Eac
002240: 68 20 77 69 6C 64 20 63 61 72 64 20 73 68 6F 75 h wild card shou
002250: 6C 64 20 6E 6F 74 20 6D 61 74 63 68 20 6D 6F 72 ld not match mor
002260: 65 20 74 68 61 6E 20 31 30 30 20 61 63 74 75 61 e than 100 actua
002270: 6C 20 66 69 6C 65 73 0D 0A 0D 0A 09 44 61 76 65 l files.....Dave
002280: 20 4D 6F 6F 72 65 20 2A 29 0D 0A 0D 0A 46 52 4F Moore *)....FRO
002290: 4D 20 53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 M SYSTEM IMPORT
0022A0: 41 44 44 52 45 53 53 2C 41 44 52 2C 54 53 49 5A ADDRESS,ADR,TSIZ
0022B0: 45 3B 0D 0A 46 52 4F 4D 20 43 6F 6D 6D 61 6E 64 E;..FROM Command
0022C0: 20 49 4D 50 4F 52 54 20 50 61 72 61 6D 65 74 65 IMPORT Paramete
0022D0: 72 2C 50 61 72 63 6C 61 73 73 2C 47 65 74 50 61 r,Parclass,GetPa
0022E0: 72 61 6D 73 3B 0D 0A 46 52 4F 4D 20 46 69 6C 65 rams;..FROM File
0022F0: 73 20 49 4D 50 4F 52 54 20 46 69 6C 65 4E 61 6D s IMPORT FileNam
002300: 74 6F 20 6C 69 73 74 20 69 6E 20 74 68 65 20 66 to list in the f
002310: 6F 72 6D 20 2F 73 74 72 69 6E 67 2F 20 28 77 68 orm /string/ (wh
002320: 65 72 65 0D 0A 09 09 09 2F 20 69 73 20 61 6E 79 ere...../ is any
002330: 20 6E 6F 6E 2D 61 6C 70 68 61 6E 75 6D 65 72 69 non-alphanumeri
002340: 63 20 63 68 61 72 61 63 74 65 72 29 0D 0A 09 09 c character)....
002350: 69 69 69 29 09 41 20 63 6F 6D 62 69 6E 61 74 69 iii).A combinati
002360: 6F 6E 20 6F 66 20 74 68 65 20 74 77 6F 3A 20 31 on of the two: 1
002370: 30 2F 73 74 72 69 6E 67 2F 20 74 6F 20 73 74 61 0/string/ to sta
002380: 72 74 20 73 65 61 72 63 68 0D 0A 09 09 09 61 74 rt search.....at
002390: 20 61 20 67 69 76 65 6E 20 6C 69 6E 65 2E 0D 0A a given line...
0023A0: 2A 29 0D 0A 54 59 50 45 09 50 6F 73 69 74 69 6F *)..TYPE.Positio
0023B0: 6E 3D 52 45 43 4F 52 44 0D 0A 09 09 42 6C 6F 63 n=RECORD....Bloc
0023C0: 6B 4E 75 6D 62 65 72 3A 43 41 52 44 49 4E 41 4C kNumber:CARDINAL
0023D0: 3B 09 09 28 2A 42 6C 6F 63 6B 20 69 6E 20 77 68 ;..(*Block in wh
0023E0: 69 63 68 20 6C 69 6E 65 20 73 74 61 72 74 73 2A ich line starts*
0023F0: 29 0D 0A 09 09 43 68 61 72 4F 66 66 73 65 74 3A )....CharOffset:
002400: 43 41 52 44 49 4E 41 4C 3B 09 09 28 2A 43 68 61 CARDINAL;..(*Cha
002410: 72 61 63 74 65 72 20 6F 66 66 73 65 74 20 69 6E racter offset in
002420: 20 62 75 66 66 65 72 2A 29 0D 0A 09 09 45 4E 44 buffer*)....END
002430: 3B 0D 0A 56 41 52 09 50 6F 73 54 61 62 6C 65 3A ;..VAR.PosTable:
002440: 41 52 52 41 59 5B 31 2E 2E 32 30 30 30 5D 20 4F ARRAY[1..2000] O
002450: 46 20 20 50 6F 73 69 74 69 6F 6E 3B 0D 0A 0D 0A F Position;....
002460: 09 28 2A 54 68 69 73 20 63 6F 64 65 20 63 6F 75 .(*This code cou
002470: 6C 64 20 62 65 20 6D 61 64 65 20 6D 6F 72 65 20 ld be made more
002480: 66 61 6E 63 79 20 62 79 20 68 61 76 69 6E 67 20 fancy by having
002490: 61 6E 20 69 6E 63 72 65 6D 65 6E 74 20 73 69 7A an increment siz
0024A0: 65 0D 0A 09 20 20 73 6F 20 74 68 61 74 20 61 73 e... so that as
0024B0: 20 74 68 65 20 50 6F 73 54 61 62 6C 65 20 62 65 the PosTable be
0024C0: 63 6F 6D 65 73 20 66 75 6C 6C 2C 20 65 76 65 72 comes full, ever
0024D0: 79 20 73 65 63 6F 6E 64 20 65 6E 74 72 79 20 69 y second entry i
0024E0: 73 0D 0A 09 20 20 72 65 6D 6F 76 65 64 20 61 6E s... removed an
0024F0: 64 20 74 68 65 20 69 6E 63 72 65 6D 65 6E 74 20 d the increment
002500: 65 2C 46 49 4C 45 2C 4C 6F 6F 6B 75 70 2C 43 72 e,FILE,Lookup,Cr
002510: 65 61 74 65 2C 52 65 61 64 42 6C 6F 63 6B 2C 53 eate,ReadBlock,S
002520: 65 74 42 6C 6F 63 6B 3B 0D 0A 46 52 4F 4D 20 47 etBlock;..FROM G
002530: 65 74 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 47 etFiles IMPORT G
002540: 65 74 4E 61 6D 65 73 3B 0D 0A 46 52 4F 4D 20 54 etNames;..FROM T
002550: 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 57 erminal IMPORT W
002560: 72 69 74 65 53 74 72 69 6E 67 2C 57 72 69 74 65 riteString,Write
002570: 4C 6E 2C 57 72 69 74 65 2C 52 65 61 64 2C 42 75 Ln,Write,Read,Bu
002580: 73 79 52 65 61 64 2C 43 6C 65 61 72 43 68 61 72 syRead,ClearChar
002590: 42 75 66 66 65 72 3B 0D 0A 46 52 4F 4D 20 53 6F Buffer;..FROM So
0025A0: 72 74 20 49 4D 50 4F 52 54 20 53 6F 72 74 52 65 rt IMPORT SortRe
0025B0: 63 6F 72 64 73 3B 0D 0A 46 52 4F 4D 20 49 6E 74 cords;..FROM Int
0025C0: 4C 6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E Logic IMPORT IAN
0025D0: 44 3B 0D 0A 46 52 4F 4D 20 53 6D 61 6C 6C 49 4F D;..FROM SmallIO
0025E0: 20 49 4D 50 4F 52 54 20 57 72 69 74 65 49 6E 74 IMPORT WriteInt
0025F0: 2C 57 72 69 74 65 48 65 78 2C 57 72 69 74 65 43 ,WriteHex,WriteC
002600: 61 72 64 3B 0D 0A 43 4F 4E 53 54 09 42 75 66 66 ard;..CONST.Buff
002610: 65 72 53 69 7A 65 3D 34 30 39 36 3B 09 09 28 2A erSize=4096;..(*
002620: 42 79 74 65 73 20 74 6F 20 72 65 61 64 20 69 6E Bytes to read in
002630: 20 61 20 73 69 6E 67 6C 65 20 62 6C 6F 63 6B 2A a single block*
002640: 29 0D 0A 09 42 6C 6F 63 6B 53 69 7A 65 3D 31 32 )...BlockSize=12
002650: 38 3B 09 09 09 28 2A 42 6C 6F 63 6B 20 73 69 7A 8;...(*Block siz
002660: 65 20 69 6E 20 62 79 74 65 73 2D 2D 75 73 65 64 e in bytes--used
002670: 20 66 6F 72 20 72 61 6E 64 6F 6D 0D 0A 09 09 09 for random.....
002680: 09 09 20 20 70 6F 73 69 74 69 6F 6E 69 6E 67 2A .. positioning*
002690: 29 0D 0A 0D 0A 09 43 52 3D 30 64 78 3B 0D 0A 09 ).....CR=0dx;...
0026A0: 4C 46 3D 30 61 78 3B 0D 0A 09 54 41 42 3D 30 39 LF=0ax;...TAB=09
0026B0: 78 3B 0D 0A 09 45 4F 46 3D 31 61 78 3B 0D 0A 09 x;...EOF=1ax;...
0026C0: 42 53 3D 30 38 78 3B 0D 0A 09 44 45 4C 3D 37 46 BS=08x;...DEL=7F
0026D0: 78 3B 0D 0A 0D 0A 54 59 50 45 20 09 50 46 69 6C x;....TYPE .PFil
0026E0: 65 4E 61 6D 65 3D 50 4F 49 4E 54 45 52 20 54 4F eName=POINTER TO
0026F0: 20 46 69 6C 65 4E 61 6D 65 3B 0D 0A 0D 0A 56 41 FileName;....VA
002700: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
002710: 02 00 01 00 02 09 52 E5 02 00 C9 02 00 00 00 02 ......R.........
002720: 02 00 C5 02 00 00 00 02 02 00 C1 02 00 00 00 02 ................
002730: 02 00 C6 02 00 00 00 02 02 00 C2 02 00 00 00 02 ................
002740: 02 00 C7 02 00 00 00 02 02 00 C3 02 00 00 00 02 ................
002750: 02 00 C8 02 00 00 00 02 02 00 C4 02 00 00 00 02 ................
002760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002800: 0A 09 50 61 67 65 57 69 64 74 68 3A 43 41 52 44 ..PageWidth:CARD
002810: 49 4E 41 4C 3D 38 30 3B 0D 0A 09 4C 69 6E 65 4E INAL=80;...LineN
002820: 75 6D 62 65 72 3A 43 41 52 44 49 4E 41 4C 3B 0D umber:CARDINAL;.
002830: 0A 0D 0A 0D 0A 56 41 52 09 45 6E 64 4F 66 46 69 .....VAR.EndOfFi
002840: 6C 65 3A 42 4F 4F 4C 45 41 4E 3B 09 09 28 2A 73 le:BOOLEAN;..(*s
002850: 65 74 20 74 72 75 65 20 61 66 74 65 72 20 2A 2A et true after **
002860: 20 45 6E 64 20 6F 66 20 46 69 6C 65 20 2A 2A 20 End of File **
002870: 68 61 73 0D 0A 09 09 09 09 09 20 20 62 65 65 6E has....... been
002880: 20 6F 75 74 70 75 74 20 62 79 20 57 72 69 74 65 output by Write
002890: 4C 69 6E 65 2A 29 0D 0A 0D 0A 28 2A 09 57 72 69 Line*)....(*.Wri
0028A0: 74 65 20 61 20 6C 69 6E 65 20 6F 66 20 6F 75 74 te a line of out
0028B0: 70 75 74 09 0D 0A 09 54 68 65 20 66 69 72 73 74 put....The first
0028C0: 20 63 68 61 72 61 63 74 65 72 20 6F 66 20 74 68 character of th
0028D0: 65 20 6C 69 6E 65 20 74 6F 20 62 65 20 77 72 69 e line to be wri
0028E0: 74 74 65 6E 20 6D 75 73 74 0D 0A 09 62 65 20 61 tten must...be a
0028F0: 76 61 69 6C 61 62 6C 65 20 69 6E 20 74 68 65 20 vailable in the
002900: 76 61 72 69 61 62 6C 65 20 63 68 20 62 65 66 6F variable ch befo
002910: 72 65 20 65 6E 74 72 79 20 74 6F 20 74 68 65 20 re entry to the
002920: 72 6F 75 74 69 6E 65 0D 0A 09 2A 29 0D 0A 0D 0A routine...*)....
002930: 50 52 4F 43 45 44 55 52 45 20 57 72 69 74 65 4C PROCEDURE WriteL
002940: 69 6E 65 3B 0D 0A 56 41 52 09 43 68 61 72 73 57 ine;..VAR.CharsW
002950: 72 69 74 74 65 6E 3A 43 41 52 44 49 4E 41 4C 3B ritten:CARDINAL;
002960: 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 09 43 68 ....BEGIN.....Ch
002970: 61 72 73 57 72 69 74 74 65 6E 3A 3D 30 3B 0D 0A arsWritten:=0;..
002980: 0D 0A 09 49 46 20 4E 75 6D 62 65 72 4C 69 6E 65 ...IF NumberLine
002990: 73 20 54 48 45 4E 0D 0A 09 09 49 46 20 43 6F 6E s THEN....IF Con
0029A0: 74 69 6E 75 61 74 69 6F 6E 20 54 48 45 4E 20 0D tinuation THEN .
0029B0: 0A 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 ....WriteString(
0029C0: 27 20 20 20 20 20 20 27 29 3B 0D 0A 09 09 45 4C ' ');....EL
0029D0: 53 45 09 0D 0A 09 09 09 57 72 69 74 65 49 6E 74 SE......WriteInt
0029E0: 28 4C 69 6E 65 4F 66 46 69 6C 65 2C 35 29 3B 0D (LineOfFile,5);.
0029F0: 0A 09 09 09 57 72 69 74 65 28 27 7C 27 29 3B 0D ....Write('|');.
002A00: 73 20 72 6F 75 74 69 6E 65 20 64 6F 65 73 20 61 s routine does a
002A10: 20 70 6C 61 69 6E 20 73 69 6D 70 6C 65 20 73 65 plain simple se
002A20: 61 72 63 68 2E 20 54 68 65 72 65 20 61 72 65 20 arch. There are
002A30: 6D 75 63 68 0D 0A 09 66 61 73 74 65 72 20 77 61 much...faster wa
002A40: 79 73 20 6F 66 20 64 6F 69 6E 67 20 73 65 61 72 ys of doing sear
002A50: 63 68 65 73 2C 20 62 75 74 20 74 68 65 79 20 61 ches, but they a
002A60: 72 65 20 70 72 6F 62 61 62 6C 79 0D 0A 09 67 6F re probably...go
002A70: 69 6E 67 20 74 6F 20 62 65 20 73 77 61 6D 70 65 ing to be swampe
002A80: 64 20 62 79 20 74 68 65 20 49 4F 20 74 69 6D 65 d by the IO time
002A90: 20 61 6E 79 77 61 79 2A 29 0D 0A 56 41 52 09 73 anyway*)..VAR.s
002AA0: 74 72 69 6E 67 3A 4D 61 74 63 68 53 74 72 69 6E tring:MatchStrin
002AB0: 67 3B 0D 0A 09 6C 65 6E 3A 43 41 52 44 49 4E 41 g;...len:CARDINA
002AC0: 4C 3B 0D 0A 09 6E 63 68 3A 43 48 41 52 3B 0D 0A L;...nch:CHAR;..
002AD0: 09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .i,j:CARDINAL;..
002AE0: 09 50 61 72 74 69 61 6C 50 6F 73 3A 41 52 52 41 .PartialPos:ARRA
002AF0: 59 5B 31 2E 2E 36 30 5D 20 4F 46 20 43 41 52 44 Y[1..60] OF CARD
002B00: 49 4E 41 4C 3B 0D 0A 09 50 61 72 74 69 61 6C 73 INAL;...Partials
002B10: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 :CARDINAL;..BEGI
002B20: 4E 0D 0A 09 6C 65 6E 3A 3D 30 3B 0D 0A 09 4C 4F N...len:=0;...LO
002B30: 4F 50 0D 0A 09 09 52 65 61 64 28 6E 63 68 29 3B OP....Read(nch);
002B40: 0D 0A 09 09 49 46 20 28 6E 63 68 3D 42 53 29 20 ....IF (nch=BS)
002B50: 4F 52 20 28 6E 63 68 3D 44 45 4C 29 20 54 48 45 OR (nch=DEL) THE
002B60: 4E 0D 0A 09 09 09 49 46 20 6C 65 6E 3E 30 20 54 N.....IF len>0 T
002B70: 48 45 4E 20 44 45 43 28 6C 65 6E 29 20 45 4E 44 HEN DEC(len) END
002B80: 3B 0D 0A 09 09 45 4C 53 49 46 20 28 6E 63 68 3D ;....ELSIF (nch=
002B90: 44 65 6C 69 6D 69 74 65 72 29 20 4F 52 20 28 6C Delimiter) OR (l
002BA0: 65 6E 3D 48 49 47 48 28 73 74 72 69 6E 67 29 29 en=HIGH(string))
002BB0: 0D 0A 09 09 09 4F 52 20 28 6E 63 68 3D 43 52 29 .....OR (nch=CR)
002BC0: 20 4F 52 20 28 6E 63 68 3D 4C 46 29 20 54 48 45 OR (nch=LF) THE
002BD0: 4E 0D 0A 09 09 09 45 58 49 54 0D 0A 09 09 45 4C N.....EXIT....EL
002BE0: 53 45 0D 0A 09 09 09 49 4E 43 28 6C 65 6E 29 3B SE.....INC(len);
002BF0: 0D 0A 09 09 09 73 74 72 69 6E 67 5B 6C 65 6E 5D .....string[len]
002C00: 65 29 29 20 41 4E 44 20 28 4C 69 6E 65 4F 66 46 e)) AND (LineOfF
002C10: 69 6C 65 3E 48 69 67 68 57 61 74 65 72 29 20 54 ile>HighWater) T
002C20: 48 45 4E 0D 0A 09 09 48 69 67 68 57 61 74 65 72 HEN....HighWater
002C30: 3A 3D 4C 69 6E 65 4F 66 46 69 6C 65 3B 0D 0A 09 :=LineOfFile;...
002C40: 09 57 49 54 48 20 50 6F 73 54 61 62 6C 65 5B 48 .WITH PosTable[H
002C50: 69 67 68 57 61 74 65 72 5D 20 44 4F 0D 0A 09 09 ighWater] DO....
002C60: 09 42 6C 6F 63 6B 4E 75 6D 62 65 72 3A 3D 42 6C .BlockNumber:=Bl
002C70: 6F 63 6B 4E 6F 3B 0D 0A 09 09 09 43 68 61 72 4F ockNo;.....CharO
002C80: 66 66 73 65 74 3A 3D 43 68 61 72 50 6F 73 0D 0A ffset:=CharPos..
002C90: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D ...END;....END;.
002CA0: 0A 09 45 4E 44 20 41 64 64 4D 61 72 6B 65 72 3B ..END AddMarker;
002CB0: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 ....PROCEDURE Re
002CC0: 70 6F 73 69 74 69 6F 6E 46 69 6C 65 3B 0D 0A 0D positionFile;...
002CD0: 0A 28 2A 09 52 65 70 6F 73 69 74 69 6F 6E 20 66 .(*.Reposition f
002CE0: 69 6C 65 20 74 6F 20 6C 69 6E 65 20 6E 75 6D 62 ile to line numb
002CF0: 65 72 20 67 69 76 65 6E 20 62 79 20 4C 69 6E 65 er given by Line
002D00: 4F 66 46 69 6C 65 2E 0D 0A 0D 0A 09 54 68 69 73 OfFile......This
002D10: 20 6C 69 6E 65 20 6E 75 6D 62 65 72 20 6E 65 65 line number nee
002D20: 64 20 6E 6F 74 20 62 65 20 77 69 74 68 69 6E 20 d not be within
002D30: 74 68 65 20 70 61 72 74 20 6F 66 20 74 68 65 20 the part of the
002D40: 66 69 6C 65 0D 0A 09 61 6C 72 65 61 64 79 20 65 file...already e
002D50: 78 61 6D 69 6E 65 64 20 28 6F 72 20 70 72 65 76 xamined (or prev
002D60: 69 6F 75 73 6C 79 20 73 6B 69 70 70 65 64 29 20 iously skipped)
002D70: 73 6F 20 74 68 61 74 20 69 74 20 6D 61 79 20 62 so that it may b
002D80: 65 0D 0A 09 6E 65 63 65 73 73 61 72 79 20 74 6F e...necessary to
002D90: 20 61 64 76 61 6E 63 65 20 61 73 20 66 61 72 20 advance as far
002DA0: 61 73 20 70 6F 73 73 69 62 6C 65 20 61 6E 64 20 as possible and
002DB0: 74 68 65 6E 20 73 63 61 6E 20 66 6F 72 77 61 72 then scan forwar
002DC0: 64 2E 0D 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74 d......This rout
002DD0: 69 6E 65 20 6F 6E 6C 79 20 68 61 6E 64 6C 65 73 ine only handles
002DE0: 20 70 6F 73 69 74 69 6F 6E 69 6E 67 20 62 79 20 positioning by
002DF0: 6C 69 6E 65 20 6E 75 6D 62 65 72 2D 2D 73 65 65 line number--see
002E00: 3A 3D 6E 63 68 3B 0D 0A 09 09 09 45 4E 44 3B 20 :=nch;.....END;
002E10: 28 2A 49 46 20 63 68 3D 42 53 20 65 74 63 2A 29 (*IF ch=BS etc*)
002E20: 0D 0A 09 09 45 4E 44 3B 28 2A 4C 4F 4F 50 2A 29 ....END;(*LOOP*)
002E30: 0D 0A 0D 0A 09 73 74 72 69 6E 67 5B 6C 65 6E 2B .....string[len+
002E40: 31 5D 3A 3D 30 78 3B 09 28 2A 73 65 74 20 73 6F 1]:=0x;.(*set so
002E50: 20 73 74 72 69 6E 67 20 63 61 6E 20 6C 61 74 65 string can late
002E60: 72 20 62 65 20 70 72 69 6E 74 65 64 2A 29 0D 0A r be printed*)..
002E70: 0D 0A 09 49 46 20 6C 65 6E 3C 3E 30 20 54 48 45 ...IF len<>0 THE
002E80: 4E 0D 0A 09 09 4C 61 73 74 4C 65 6E 3A 3D 6C 65 N....LastLen:=le
002E90: 6E 3B 0D 0A 09 09 4C 61 73 74 53 74 72 69 6E 67 n;....LastString
002EA0: 3A 3D 73 74 72 69 6E 67 3B 0D 0A 09 09 45 4E 44 :=string;....END
002EB0: 3B 0D 0A 09 49 46 20 4C 61 73 74 4C 65 6E 3D 30 ;...IF LastLen=0
002EC0: 20 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 THEN....WriteSt
002ED0: 72 69 6E 67 28 27 20 45 72 72 6F 72 20 2D 20 6E ring(' Error - n
002EE0: 6F 20 70 72 65 76 69 6F 75 73 20 73 65 61 72 63 o previous searc
002EF0: 68 20 73 74 72 69 6E 67 27 29 3B 0D 0A 09 09 57 h string');....W
002F00: 72 69 74 65 4C 6E 3B 0D 0A 09 45 4C 53 45 09 28 riteLn;...ELSE.(
002F10: 2A 73 74 61 72 74 20 6D 61 74 63 68 2A 29 0D 0A *start match*)..
002F20: 09 09 50 61 72 74 69 61 6C 73 3A 3D 30 3B 0D 0A ..Partials:=0;..
002F30: 09 09 4C 4F 4F 50 0D 0A 09 09 09 49 46 20 63 68 ..LOOP.....IF ch
002F40: 3D 45 4F 46 20 54 48 45 4E 20 45 58 49 54 20 45 =EOF THEN EXIT E
002F50: 4E 44 3B 0D 0A 09 09 09 57 48 49 4C 45 20 63 68 ND;.....WHILE ch
002F60: 3D 43 52 20 44 4F 0D 0A 09 09 09 09 4E 65 78 74 =CR DO......Next
002F70: 43 68 61 72 3B 0D 0A 09 09 09 09 49 46 20 63 68 Char;......IF ch
002F80: 3D 4C 46 20 54 48 45 4E 20 4E 65 78 74 43 68 61 =LF THEN NextCha
002F90: 72 20 45 4E 44 3B 0D 0A 09 09 09 09 49 4E 43 28 r END;......INC(
002FA0: 4C 69 6E 65 4F 66 46 69 6C 65 29 3B 0D 0A 09 09 LineOfFile);....
002FB0: 09 09 41 64 64 4D 61 72 6B 65 72 3B 0D 0A 09 09 ..AddMarker;....
002FC0: 09 09 45 4E 44 3B 0D 0A 09 09 09 28 2A 61 64 64 ..END;.....(*add
002FD0: 20 61 20 6E 65 77 20 70 61 72 74 69 61 6C 20 6D a new partial m
002FE0: 61 74 63 68 20 77 68 69 63 68 20 68 61 73 20 6A atch which has j
002FF0: 75 73 74 20 6D 61 74 63 68 65 64 0D 0A 09 09 09 ust matched.....
003000: 20 0D 0A 09 53 65 61 72 63 68 20 66 6F 72 20 70 ...Search for p
003010: 6F 73 69 74 69 6F 6E 69 6E 67 20 62 79 20 73 74 ositioning by st
003020: 72 69 6E 67 20 6D 61 74 63 68 2E 2A 29 0D 0A 0D ring match.*)...
003030: 0A 56 41 52 09 52 65 71 75 69 72 65 64 3A 43 41 .VAR.Required:CA
003040: 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A RDINAL;..BEGIN..
003050: 09 52 65 71 75 69 72 65 64 3A 3D 4C 69 6E 65 4F .Required:=LineO
003060: 66 46 69 6C 65 3B 0D 0A 0D 0A 28 2A 09 20 20 09 fFile;....(*. .
003070: 52 65 63 61 6C 63 75 6C 61 74 65 20 70 61 67 65 Recalculate page
003080: 20 6E 75 6D 62 65 72 20 61 73 73 75 6D 69 6E 67 number assuming
003090: 20 74 68 61 74 20 6E 6F 20 6C 69 6E 65 73 20 6F that no lines o
0030A0: 76 65 72 66 6C 6F 77 65 64 20 28 74 68 61 74 0D verflowed (that.
0030B0: 0A 09 09 69 73 2C 20 74 68 61 74 20 74 68 65 20 ...is, that the
0030C0: 6D 61 78 69 6D 75 6D 20 6E 75 6D 62 65 72 20 6F maximum number o
0030D0: 66 20 6C 69 6E 65 73 20 6F 63 63 75 72 65 64 20 f lines occured
0030E0: 6F 6E 20 65 61 63 68 20 70 61 67 65 29 2E 0D 0A on each page)...
0030F0: 0D 0A 09 20 20 09 4E 6F 74 65 20 74 68 61 74 20 ... .Note that
003100: 74 68 65 20 70 61 67 65 20 6E 75 6D 62 65 72 20 the page number
003110: 69 73 20 61 6C 77 61 79 73 20 69 6E 63 72 65 6D is always increm
003120: 65 6E 74 65 64 20 62 65 66 6F 72 65 20 69 74 20 ented before it
003130: 69 73 0D 0A 09 09 70 72 69 6E 74 65 64 20 73 6F is....printed so
003140: 20 74 68 61 74 20 74 68 69 73 20 63 6F 64 65 20 that this code
003150: 64 6F 65 73 20 6E 6F 74 20 72 65 73 75 6C 74 20 does not result
003160: 69 6E 20 70 61 67 65 20 6E 75 6D 62 65 72 73 20 in page numbers
003170: 74 68 61 74 0D 0A 09 09 61 72 65 20 6F 6E 65 20 that....are one
003180: 74 6F 6F 20 73 6D 61 6C 6C 2E 0D 0A 2A 29 0D 0A too small...*)..
003190: 0D 0A 09 50 61 67 65 4E 75 6D 62 65 72 3A 3D 28 ...PageNumber:=(
0031A0: 4C 69 6E 65 4F 66 46 69 6C 65 2D 31 29 20 44 49 LineOfFile-1) DI
0031B0: 56 20 28 50 61 67 65 4C 65 6E 2D 32 29 3B 0D 0A V (PageLen-2);..
0031C0: 09 49 46 20 4C 69 6E 65 4F 66 46 69 6C 65 3E 48 .IF LineOfFile>H
0031D0: 69 67 68 57 61 74 65 72 20 54 48 45 4E 20 4C 69 ighWater THEN Li
0031E0: 6E 65 4F 66 46 69 6C 65 3A 3D 48 69 67 68 57 61 neOfFile:=HighWa
0031F0: 74 65 72 20 45 4E 44 3B 0D 0A 09 43 6F 6E 74 69 ter END;...Conti
003200: 20 20 74 68 65 20 6E 75 6C 6C 20 73 74 72 69 6E the null strin
003210: 67 2A 29 0D 0A 0D 0A 09 09 09 49 4E 43 28 50 61 g*).......INC(Pa
003220: 72 74 69 61 6C 73 29 3B 0D 0A 09 09 09 50 61 72 rtials);.....Par
003230: 74 69 61 6C 50 6F 73 5B 50 61 72 74 69 61 6C 73 tialPos[Partials
003240: 5D 3A 3D 31 3B 0D 0A 0D 0A 09 09 09 28 2A 74 72 ]:=1;.......(*tr
003250: 79 20 74 6F 20 61 64 76 61 6E 63 65 20 61 6C 6C y to advance all
003260: 20 74 68 65 20 65 78 69 73 74 69 6E 67 20 70 61 the existing pa
003270: 72 74 69 61 6C 6C 79 20 63 6F 6D 70 6C 65 74 65 rtially complete
003280: 64 0D 0A 09 09 09 20 20 6D 61 74 63 68 65 73 2A d..... matches*
003290: 29 0D 0A 0D 0A 09 09 09 6A 3A 3D 30 3B 0D 0A 09 ).......j:=0;...
0032A0: 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 50 61 ..FOR i:=1 TO Pa
0032B0: 72 74 69 61 6C 73 20 44 4F 0D 0A 09 09 09 09 6E rtials DO......n
0032C0: 63 68 3A 3D 4C 61 73 74 53 74 72 69 6E 67 5B 50 ch:=LastString[P
0032D0: 61 72 74 69 61 6C 50 6F 73 5B 69 5D 5D 3B 0D 0A artialPos[i]];..
0032E0: 09 09 09 09 49 46 20 28 6E 63 68 3D 63 68 29 20 ....IF (nch=ch)
0032F0: 4F 52 20 28 43 41 50 28 6E 63 68 29 3D 63 68 29 OR (CAP(nch)=ch)
003300: 20 54 48 45 4E 0D 0A 0D 0A 09 09 09 09 28 2A 20 THEN........(*
003310: 74 68 65 20 74 77 6F 20 63 6F 6E 64 69 74 69 6F the two conditio
003320: 6E 73 20 69 6E 20 74 68 65 20 61 62 6F 76 65 20 ns in the above
003330: 6C 69 6E 65 0D 0A 09 09 09 09 20 20 20 70 72 6F line...... pro
003340: 76 69 64 65 20 66 6F 72 20 6C 6F 77 65 72 20 63 vide for lower c
003350: 61 73 65 20 74 6F 20 69 6E 20 74 68 65 20 6D 61 ase to in the ma
003360: 74 63 68 20 0D 0A 09 09 09 09 20 20 20 73 74 72 tch ...... str
003370: 69 6E 67 20 74 6F 20 6D 61 74 63 68 20 65 69 74 ing to match eit
003380: 68 65 72 20 63 61 73 65 2A 29 0D 0A 0D 0A 09 09 her case*)......
003390: 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 ...INC(j);......
0033A0: 09 50 61 72 74 69 61 6C 50 6F 73 5B 6A 5D 3A 3D .PartialPos[j]:=
0033B0: 50 61 72 74 69 61 6C 50 6F 73 5B 69 5D 2B 31 3B PartialPos[i]+1;
0033C0: 0D 0A 09 09 09 09 09 49 46 20 50 61 72 74 69 61 .......IF Partia
0033D0: 6C 50 6F 73 5B 6A 5D 3E 4C 61 73 74 4C 65 6E 20 lPos[j]>LastLen
0033E0: 54 48 45 4E 20 0D 0A 09 09 09 09 09 09 45 58 49 THEN ........EXI
0033F0: 54 20 20 28 2A 6D 61 74 63 68 20 66 6F 75 6E 64 T (*match found
003400: 6E 75 61 74 69 6F 6E 3A 3D 46 41 4C 53 45 3B 0D nuation:=FALSE;.
003410: 0A 0D 0A 09 49 46 20 4C 69 6E 65 4F 66 46 69 6C ....IF LineOfFil
003420: 65 3E 30 20 54 48 45 4E 0D 0A 09 20 20 20 20 57 e>0 THEN... W
003430: 49 54 48 20 50 6F 73 54 61 62 6C 65 5B 4C 69 6E ITH PosTable[Lin
003440: 65 4F 66 46 69 6C 65 5D 20 44 4F 0D 0A 09 09 49 eOfFile] DO....I
003450: 46 20 42 6C 6F 63 6B 4E 75 6D 62 65 72 3C 3E 42 F BlockNumber<>B
003460: 6C 6F 63 6B 4E 6F 20 54 48 45 4E 0D 0A 09 09 09 lockNo THEN.....
003470: 53 65 74 42 6C 6F 63 6B 28 49 6E 66 2C 42 6C 6F SetBlock(Inf,Blo
003480: 63 6B 4E 75 6D 62 65 72 29 3B 0D 0A 09 09 09 4E ckNumber);.....N
003490: 65 78 74 42 6C 6F 63 6B 4E 6F 3A 3D 42 6C 6F 63 extBlockNo:=Bloc
0034A0: 6B 4E 75 6D 62 65 72 3B 0D 0A 09 09 09 52 65 61 kNumber;.....Rea
0034B0: 64 42 75 66 66 65 72 3B 0D 0A 09 09 09 45 4E 44 dBuffer;.....END
0034C0: 3B 0D 0A 09 09 43 68 61 72 50 6F 73 3A 3D 43 68 ;....CharPos:=Ch
0034D0: 61 72 4F 66 66 73 65 74 2D 31 3B 0D 0A 09 09 4E arOffset-1;....N
0034E0: 65 78 74 43 68 61 72 3B 09 09 28 2A 72 65 2D 70 extChar;..(*re-p
0034F0: 72 69 6D 65 20 63 68 61 72 61 63 74 65 72 20 70 rime character p
003500: 6F 69 6E 74 65 72 2A 29 0D 0A 0D 0A 09 09 28 2A ointer*)......(*
003510: 09 54 68 65 20 72 65 71 75 69 72 65 64 20 63 68 .The required ch
003520: 61 72 61 63 74 65 72 20 69 73 20 6F 6E 65 20 6C aracter is one l
003530: 65 73 73 20 74 68 61 6E 20 74 68 65 20 0D 0A 09 ess than the ...
003540: 09 09 73 61 76 65 64 20 6D 61 72 6B 65 72 20 61 ..saved marker a
003550: 73 20 74 68 65 20 63 68 61 72 61 63 74 65 72 20 s the character
003560: 70 6F 69 6E 74 65 72 20 69 73 0D 0A 09 09 09 69 pointer is.....i
003570: 6E 63 72 65 6D 65 6E 74 65 64 20 61 66 74 65 72 ncremented after
003580: 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61 the first chara
003590: 63 74 65 72 20 6F 66 20 74 68 65 20 6C 69 6E 65 cter of the line
0035A0: 20 69 73 0D 0A 09 09 09 72 65 74 75 72 6E 65 64 is.....returned
0035B0: 2E 20 42 75 74 20 74 68 65 20 62 6C 6F 63 6B 20 . But the block
0035C0: 69 73 20 63 6F 72 72 65 63 74 2C 20 62 65 63 61 is correct, beca
0035D0: 75 73 65 20 74 68 65 0D 0A 09 09 09 27 70 6F 73 use the.....'pos
0035E0: 69 74 69 6F 6E 20 62 65 79 6F 6E 64 20 65 6E 64 ition beyond end
0035F0: 20 6F 66 20 62 6C 6F 63 6B 27 20 69 73 20 6E 6F of block' is no
003600: 2A 29 0D 0A 09 09 09 09 09 09 45 4E 44 3B 0D 0A *)........END;..
003610: 09 09 09 09 09 0D 0A 09 09 09 09 09 45 4E 44 3B ............END;
003620: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 50 ......END;.....P
003630: 61 72 74 69 61 6C 73 3A 3D 6A 3B 0D 0A 09 09 09 artials:=j;.....
003640: 4E 65 78 74 43 68 61 72 3B 0D 0A 09 09 09 45 4E NextChar;.....EN
003650: 44 3B 0D 0A 09 09 28 2A 65 69 74 68 65 72 20 63 D;....(*either c
003660: 68 3D 45 4F 46 20 6F 72 20 61 20 6D 61 74 63 68 h=EOF or a match
003670: 20 68 61 73 20 62 65 65 6E 20 66 6F 75 6E 64 2A has been found*
003680: 29 0D 0A 09 09 49 46 20 63 68 3D 45 4F 46 20 54 )....IF ch=EOF T
003690: 48 45 4E 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B HEN.....WriteLn;
0036A0: 0D 0A 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 .....WriteString
0036B0: 28 4C 61 73 74 53 74 72 69 6E 67 29 3B 0D 0A 09 (LastString);...
0036C0: 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
0036D0: 63 6F 75 6C 64 20 6E 6F 74 20 62 65 20 66 6F 75 could not be fou
0036E0: 6E 64 27 29 3B 0D 0A 09 09 45 4C 53 45 0D 0A 09 nd');....ELSE...
0036F0: 09 09 52 65 70 6F 73 69 74 69 6F 6E 46 69 6C 65 ..RepositionFile
003700: 3B 20 28 2A 74 6F 20 73 74 61 72 74 20 6F 66 20 ; (*to start of
003710: 63 75 72 72 65 6E 74 20 6C 69 6E 65 2A 29 0D 0A current line*)..
003720: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 ...END;....END;(
003730: 2A 73 65 61 72 63 68 20 73 74 72 69 6E 67 20 65 *search string e
003740: 6E 74 65 72 65 64 20 6F 72 20 65 78 69 73 74 65 ntered or existe
003750: 64 2A 29 0D 0A 09 45 4E 44 20 53 65 61 72 63 68 d*)...END Search
003760: 3B 0D 0A 09 0D 0A 28 2A 09 4F 70 74 69 6F 6E 20 ;.....(*.Option
003770: 66 6C 61 67 73 20 61 6E 64 20 73 63 72 65 65 6E flags and screen
003780: 20 64 69 6D 65 6E 73 69 6F 6E 73 2A 29 0D 0A 0D dimensions*)...
003790: 0A 56 41 52 09 50 61 67 65 4D 6F 64 65 3A 42 4F .VAR.PageMode:BO
0037A0: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 4C OLEAN=FALSE;...L
0037B0: 69 6E 65 57 72 61 70 3A 42 4F 4F 4C 45 41 4E 3D ineWrap:BOOLEAN=
0037C0: 46 41 4C 53 45 3B 0D 0A 09 4E 75 6D 62 65 72 4C FALSE;...NumberL
0037D0: 69 6E 65 73 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C ines:BOOLEAN=FAL
0037E0: 53 45 3B 0D 0A 09 45 78 70 61 6E 64 54 61 62 73 SE;...ExpandTabs
0037F0: 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D :BOOLEAN=FALSE;.
003800: 74 20 63 68 65 63 6B 65 64 0D 0A 09 09 09 75 6E t checked.....un
003810: 74 69 6C 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E til the followin
003820: 67 20 63 68 61 72 61 63 74 65 72 20 69 73 20 73 g character is s
003830: 6F 75 67 68 74 2A 29 0D 0A 09 09 45 4E 44 3B 28 ought*)....END;(
003840: 2A 57 49 54 48 2A 29 0D 0A 09 20 20 20 20 45 4E *WITH*)... EN
003850: 44 3B 28 2A 49 46 20 4C 69 6E 65 4F 66 46 69 6C D;(*IF LineOfFil
003860: 65 3E 30 2A 29 0D 0A 09 57 48 49 4C 45 20 4C 69 e>0*)...WHILE Li
003870: 6E 65 4F 66 46 69 6C 65 3C 52 65 71 75 69 72 65 neOfFile<Require
003880: 64 20 44 4F 0D 0A 09 09 57 48 49 4C 45 20 63 68 d DO....WHILE ch
003890: 3C 3E 43 52 20 44 4F 20 4E 65 78 74 43 68 61 72 <>CR DO NextChar
0038A0: 20 45 4E 44 3B 0D 0A 09 09 4E 65 78 74 43 68 61 END;....NextCha
0038B0: 72 3B 0D 0A 09 09 49 46 20 63 68 3D 4C 46 20 54 r;....IF ch=LF T
0038C0: 48 45 4E 20 4E 65 78 74 43 68 61 72 20 45 4E 44 HEN NextChar END
0038D0: 3B 0D 0A 09 09 49 4E 43 28 4C 69 6E 65 4F 66 46 ;....INC(LineOfF
0038E0: 69 6C 65 29 3B 0D 0A 09 09 41 64 64 4D 61 72 6B ile);....AddMark
0038F0: 65 72 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E er;....END;...EN
003900: 44 20 52 65 70 6F 73 69 74 69 6F 6E 46 69 6C 65 D RepositionFile
003910: 3B 0D 0A 0D 0A 54 59 50 45 09 4D 61 74 63 68 53 ;....TYPE.MatchS
003920: 74 72 69 6E 67 3D 41 52 52 41 59 5B 31 2E 2E 36 tring=ARRAY[1..6
003930: 30 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 0D 0A 56 0] OF CHAR;....V
003940: 41 52 09 4C 61 73 74 53 74 72 69 6E 67 3A 4D 61 AR.LastString:Ma
003950: 74 63 68 53 74 72 69 6E 67 3B 0D 0A 09 4C 61 73 tchString;...Las
003960: 74 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3D 30 3B tLen:CARDINAL=0;
003970: 09 28 2A 6C 65 6E 67 74 68 20 6F 66 20 6C 61 73 .(*length of las
003980: 74 20 6D 61 74 63 68 65 64 20 73 74 72 69 6E 67 t matched string
003990: 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 *)....PROCEDURE
0039A0: 53 65 61 72 63 68 28 44 65 6C 69 6D 69 74 65 72 Search(Delimiter
0039B0: 3A 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09 53 65 :CHAR);....(*.Se
0039C0: 61 72 63 68 20 66 6F 72 20 61 20 73 74 72 69 6E arch for a strin
0039D0: 67 20 66 72 6F 6D 20 74 68 65 20 63 75 72 72 65 g from the curre
0039E0: 6E 74 20 70 6F 73 69 74 69 6F 6E 20 69 6E 20 74 nt position in t
0039F0: 68 65 20 66 69 6C 65 0D 0A 09 0D 0A 09 54 68 69 he file......Thi
003A00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
003A10: 03 00 01 00 02 09 52 E5 03 00 C9 02 00 00 00 02 ......R.........
003A20: 03 00 C5 02 00 00 00 02 03 00 C1 02 00 00 00 02 ................
003A30: 03 00 C6 02 00 00 00 02 03 00 C2 02 00 00 00 02 ................
003A40: 03 00 C7 02 00 00 00 02 03 00 C3 02 00 00 00 02 ................
003A50: 03 00 C8 02 00 00 00 02 03 00 C4 02 00 00 00 02 ................
003A60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003A70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003A80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003A90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003B00: 6E 65 73 20 70 65 72 20 70 61 67 65 27 29 3B 0D nes per page');.
003B10: 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 ..WriteLn;...Wri
003B20: 74 65 53 74 72 69 6E 67 28 27 57 36 34 20 20 20 teString('W64
003B30: 20 20 20 20 20 20 20 2D 20 74 6F 67 67 6C 65 20 - toggle
003B40: 6C 69 6E 65 20 77 72 61 70 2C 20 73 65 74 20 36 line wrap, set 6
003B50: 34 20 63 6F 6C 75 6D 6E 73 20 70 65 72 20 6C 69 4 columns per li
003B60: 6E 65 27 29 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B ne');...WriteLn;
003B70: 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
003B80: 49 20 20 20 20 20 20 20 20 20 20 20 20 2D 20 74 I - t
003B90: 6F 67 67 6C 65 20 74 61 62 73 20 65 78 70 61 6E oggle tabs expan
003BA0: 73 69 6F 6E 27 29 3B 0D 0A 09 57 72 69 74 65 4C sion');...WriteL
003BB0: 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 n;...WriteString
003BC0: 28 27 4E 20 20 20 20 20 20 20 20 20 20 20 20 2D ('N -
003BD0: 20 74 6F 67 67 6C 65 20 6C 69 6E 65 20 6E 75 6D toggle line num
003BE0: 62 65 72 69 6E 67 27 29 3B 57 72 69 74 65 4C 6E bering');WriteLn
003BF0: 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 ;...WriteString(
003C00: 27 20 43 6F 6D 6D 61 6E 64 3A 27 29 3B 0D 0A 09 ' Command:');...
003C10: 45 4E 44 20 50 72 69 6E 74 48 65 6C 70 3B 09 0D END PrintHelp;..
003C20: 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 4E 65 77 ...PROCEDURE New
003C30: 56 61 6C 75 65 28 56 41 52 20 64 65 66 61 75 6C Value(VAR defaul
003C40: 74 3A 43 41 52 44 49 4E 41 4C 3B 6C 69 6D 69 74 t:CARDINAL;limit
003C50: 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 56 41 52 :CARDINAL);..VAR
003C60: 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 .i:CARDINAL;..BE
003C70: 47 49 4E 0D 0A 09 52 65 61 64 28 63 68 29 3B 0D GIN...Read(ch);.
003C80: 0A 09 69 3A 3D 4E 75 6D 62 65 72 28 29 3B 0D 0A ..i:=Number();..
003C90: 09 49 46 20 69 3E 3D 6C 69 6D 69 74 20 54 48 45 .IF i>=limit THE
003CA0: 4E 20 64 65 66 61 75 6C 74 3A 3D 69 20 45 4E 44 N default:=i END
003CB0: 0D 0A 09 45 4E 44 20 4E 65 77 56 61 6C 75 65 3B ...END NewValue;
003CC0: 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 45 6E 64 .....BEGIN...End
003CD0: 4F 66 46 69 6C 65 3A 3D 46 41 4C 53 45 3B 0D 0A OfFile:=FALSE;..
003CE0: 09 4E 65 78 74 42 6C 6F 63 6B 4E 6F 3A 3D 30 3B .NextBlockNo:=0;
003CF0: 0D 0A 09 4C 69 6E 65 4E 75 6D 62 65 72 3A 3D 32 ...LineNumber:=2
003D00: 66 69 6C 65 2C 66 69 6C 65 2C 2E 2E 2E 5B 6F 70 file,file,...[op
003D10: 74 69 6F 6E 73 27 29 3B 57 72 69 74 65 4C 6E 3B tions');WriteLn;
003D20: 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
003D30: 20 77 68 65 72 65 20 66 69 6C 65 20 69 73 20 61 where file is a
003D40: 20 66 69 6C 65 20 74 6F 20 6C 69 73 74 20 6F 72 file to list or
003D50: 20 61 20 77 69 6C 64 20 63 61 72 64 20 66 6F 72 a wild card for
003D60: 20 66 69 6C 65 73 20 74 6F 20 6C 69 73 74 27 29 files to list')
003D70: 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 ;...WriteLn;...W
003D80: 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 riteLn;...WriteS
003D90: 74 72 69 6E 67 28 27 20 54 68 65 20 6F 70 74 69 tring(' The opti
003DA0: 6F 6E 73 20 61 72 65 3A 27 29 3B 57 72 69 74 65 ons are:');Write
003DB0: 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E Ln;...WriteStrin
003DC0: 67 28 27 09 09 50 20 2D 20 6F 75 74 70 75 74 20 g('..P - output
003DD0: 69 6E 20 70 61 67 65 20 6D 6F 64 65 27 29 3B 57 in page mode');W
003DE0: 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 riteLn;...WriteS
003DF0: 74 72 69 6E 67 28 27 09 09 4E 20 2D 20 6E 75 6D tring('..N - num
003E00: 62 65 72 20 6C 69 6E 65 73 20 6F 6E 20 6F 75 74 ber lines on out
003E10: 70 75 74 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A put');WriteLn;..
003E20: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 .WriteString('..
003E30: 57 20 2D 20 77 72 61 70 20 6C 6F 6E 67 20 6C 69 W - wrap long li
003E40: 6E 65 73 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A nes');WriteLn;..
003E50: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 .WriteString('..
003E60: 49 20 2D 20 65 78 70 61 6E 64 20 74 61 62 73 20 I - expand tabs
003E70: 74 6F 20 73 70 61 63 65 73 27 29 3B 57 72 69 74 to spaces');Writ
003E80: 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D eLn;...WriteLn;.
003E90: 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
003EA0: 66 6F 72 20 65 78 61 6D 70 6C 65 3A 20 20 43 41 for example: CA
003EB0: 54 20 2A 2E 44 45 46 5B 50 31 36 57 32 30 4E 27 T *.DEF[P16W20N'
003EC0: 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 48 41 4C );WriteLn;...HAL
003ED0: 54 0D 0A 09 45 4E 44 20 55 73 61 67 65 3B 0D 0A T...END Usage;..
003EE0: 0D 0A 0D 0A 0D 0A 0D 0A 56 41 52 09 50 61 72 61 ........VAR.Para
003EF0: 6D 3A 41 52 52 41 59 20 5B 30 2E 2E 31 30 5D 20 m:ARRAY [0..10]
003F00: 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B ....END;....END;
003F10: 0D 0A 09 49 46 20 4E 4F 54 20 43 6F 6E 74 69 6E ...IF NOT Contin
003F20: 75 61 74 69 6F 6E 20 54 48 45 4E 20 0D 0A 09 09 uation THEN ....
003F30: 41 64 64 4D 61 72 6B 65 72 3B 0D 0A 09 09 49 4E AddMarker;....IN
003F40: 43 28 4C 69 6E 65 4F 66 46 69 6C 65 29 3B 0D 0A C(LineOfFile);..
003F50: 09 09 45 4E 44 3B 0D 0A 09 43 6F 6E 74 69 6E 75 ..END;...Continu
003F60: 61 74 69 6F 6E 3A 3D 46 41 4C 53 45 3B 0D 0A 0D ation:=FALSE;...
003F70: 0A 09 4C 4F 4F 50 0D 0A 0D 0A 09 09 28 2A 73 74 ..LOOP......(*st
003F80: 72 69 70 20 74 6F 70 20 62 69 74 20 2D 20 73 68 rip top bit - sh
003F90: 6F 75 6C 64 20 70 72 6F 62 61 62 6C 79 20 62 65 ould probably be
003FA0: 20 6F 70 74 69 6F 6E 20 63 6F 6E 74 72 6F 6C 6C option controll
003FB0: 65 64 2A 29 0D 0A 0D 0A 09 09 49 46 20 43 68 61 ed*)......IF Cha
003FC0: 72 73 57 72 69 74 74 65 6E 3E 3D 50 61 67 65 57 rsWritten>=PageW
003FD0: 69 64 74 68 20 54 48 45 4E 20 0D 0A 09 09 09 43 idth THEN .....C
003FE0: 6F 6E 74 69 6E 75 61 74 69 6F 6E 3A 3D 54 52 55 ontinuation:=TRU
003FF0: 45 3B 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B 0D E;.....WriteLn;.
004000: 0A 09 09 09 52 45 54 55 52 4E 0D 0A 09 09 09 45 ....RETURN.....E
004010: 4E 44 3B 0D 0A 0D 0A 09 09 49 46 20 63 68 3E 38 ND;......IF ch>8
004020: 30 78 20 54 48 45 4E 20 63 68 3A 3D 43 48 52 28 0x THEN ch:=CHR(
004030: 4F 52 44 28 63 68 29 2D 38 30 68 29 20 45 4E 44 ORD(ch)-80h) END
004040: 3B 0D 0A 0D 0A 09 09 43 41 53 45 20 63 68 20 4F ;......CASE ch O
004050: 46 0D 0A 09 09 45 4F 46 3A 09 28 2A 45 6E 64 20 F....EOF:.(*End
004060: 6F 66 20 46 69 6C 65 20 63 68 61 72 61 63 74 65 of File characte
004070: 72 20 66 6F 75 6E 64 2C 0D 0A 09 09 09 20 20 28 r found,..... (
004080: 65 69 74 68 65 72 20 66 72 6F 6D 20 66 69 6C 65 either from file
004090: 20 6F 72 20 67 65 6E 65 72 61 74 65 64 20 62 79 or generated by
0040A0: 20 4E 65 78 74 43 68 61 72 29 0D 0A 09 09 09 20 NextChar).....
0040B0: 20 69 66 20 6E 6F 74 68 69 6E 67 20 68 61 73 20 if nothing has
0040C0: 62 65 65 6E 20 70 72 69 6E 74 65 64 20 6F 6E 20 been printed on
0040D0: 6C 69 6E 65 2C 0D 0A 09 09 09 20 20 6A 75 73 74 line,..... just
0040E0: 20 72 65 74 75 72 6E 20 65 6E 64 20 6F 66 20 66 return end of f
0040F0: 69 6C 65 20 73 74 61 74 75 73 0D 0A 09 09 09 20 ile status.....
004100: 4F 46 20 50 61 72 61 6D 65 74 65 72 3B 0D 0A 09 OF Parameter;...
004110: 43 6F 75 6E 74 3A 49 4E 54 45 47 45 52 3B 0D 0A Count:INTEGER;..
004120: 09 4E 61 6D 65 73 3A 41 52 52 41 59 20 5B 30 2E .Names:ARRAY [0.
004130: 2E 31 30 30 5D 20 4F 46 20 46 69 6C 65 4E 61 6D .100] OF FileNam
004140: 65 3B 0D 0A 09 4E 61 6D 65 43 6F 75 6E 74 20 3A e;...NameCount :
004150: 20 49 4E 54 45 47 45 52 3B 0D 0A 09 43 6F 75 6E INTEGER;...Coun
004160: 74 65 72 20 3A 20 49 4E 54 45 47 45 52 3B 0D 0A ter : INTEGER;..
004170: 09 43 6E 74 65 72 20 3A 20 49 4E 54 45 47 45 52 .Cnter : INTEGER
004180: 3B 0D 0A 0D 0A 28 2A 09 4F 75 74 70 75 74 20 74 ;....(*.Output t
004190: 68 65 20 66 69 6C 65 20 61 6C 72 65 61 64 79 20 he file already
0041A0: 6F 70 65 6E 65 64 2A 29 0D 0A 0D 0A 09 0D 0A 50 opened*).......P
0041B0: 52 4F 43 45 44 55 52 45 20 4F 75 74 70 75 74 46 ROCEDURE OutputF
0041C0: 69 6C 65 28 4E 61 6D 65 3A 41 52 52 41 59 20 4F ile(Name:ARRAY O
0041D0: 46 20 43 48 41 52 29 3B 0D 0A 56 41 52 09 63 68 F CHAR);..VAR.ch
0041E0: 3A 43 48 41 52 3B 0D 0A 09 69 3A 43 41 52 44 49 :CHAR;...i:CARDI
0041F0: 4E 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 NAL;..PROCEDURE
004200: 50 61 67 65 48 65 61 64 65 72 3B 0D 0A 42 45 47 PageHeader;..BEG
004210: 49 4E 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 IN...WriteLn;...
004220: 57 72 69 74 65 53 74 72 69 6E 67 28 4E 61 6D 65 WriteString(Name
004230: 29 3B 0D 0A 0D 0A 09 28 2A 20 49 66 20 74 65 72 );.....(* If ter
004240: 6D 69 6E 61 6C 20 73 75 70 70 6F 72 74 73 20 74 minal supports t
004250: 61 62 73 2C 20 70 75 74 20 70 61 67 65 20 6E 75 abs, put page nu
004260: 6D 62 65 72 20 6F 6E 20 72 69 67 68 74 20 68 61 mber on right ha
004270: 6E 64 20 73 69 64 65 0D 0A 09 6F 66 20 73 63 72 nd side...of scr
004280: 65 65 6E 2C 20 6F 74 68 65 72 77 69 73 65 20 6A een, otherwise j
004290: 75 73 74 20 67 6F 20 69 6E 20 31 30 20 63 68 61 ust go in 10 cha
0042A0: 72 73 20 74 6F 20 73 61 76 65 20 74 69 6D 65 20 rs to save time
0042B0: 6F 6E 0D 0A 09 61 6C 6F 77 20 6C 69 6E 6B 73 2A on...alow links*
0042C0: 29 0D 0A 0D 0A 09 49 46 20 4E 4F 54 20 45 78 70 ).....IF NOT Exp
0042D0: 61 6E 64 54 61 62 73 20 54 48 45 4E 0D 0A 09 09 andTabs THEN....
0042E0: 46 4F 52 20 69 3A 3D 32 37 20 54 4F 20 50 61 67 FOR i:=27 TO Pag
0042F0: 65 57 69 64 74 68 20 42 59 20 38 20 44 4F 20 57 eWidth BY 8 DO W
004300: 20 49 66 20 6C 69 6E 65 20 77 61 73 20 69 6E 63 If line was inc
004310: 6F 6D 70 6C 65 74 65 2C 20 70 72 69 6E 74 20 3C omplete, print <
004320: 45 4F 46 3E 20 61 6E 64 20 0D 0A 09 09 09 20 20 EOF> and .....
004330: 72 65 74 75 72 6E 2A 29 0D 0A 0D 0A 09 09 09 49 return*).......I
004340: 46 20 28 43 68 61 72 73 57 72 69 74 74 65 6E 3D F (CharsWritten=
004350: 30 29 20 54 48 45 4E 0D 0A 09 09 09 09 57 72 69 0) THEN......Wri
004360: 74 65 53 74 72 69 6E 67 28 27 20 20 09 20 20 2A teString(' . *
004370: 2A 20 45 6E 64 20 6F 66 20 46 69 6C 65 20 2A 2A * End of File **
004380: 27 29 3B 0D 0A 09 09 09 09 45 6E 64 4F 66 46 69 ');......EndOfFi
004390: 6C 65 3A 3D 54 52 55 45 3B 0D 0A 09 09 09 45 4C le:=TRUE;.....EL
0043A0: 53 45 0D 0A 09 09 09 09 57 72 69 74 65 53 74 72 SE......WriteStr
0043B0: 69 6E 67 28 27 3C 45 4F 46 3E 27 29 3B 0D 0A 09 ing('<EOF>');...
0043C0: 09 09 09 45 4E 44 3B 0D 0A 09 09 09 52 45 54 55 ...END;.....RETU
0043D0: 52 4E 3B 0D 0A 09 09 09 7C 0D 0A 0D 0A 09 09 43 RN;.....|......C
0043E0: 52 3A 09 28 2A 43 61 72 72 69 61 67 65 20 72 65 R:.(*Carriage re
0043F0: 74 75 72 6E 20 66 6F 75 6E 64 2A 29 0D 0A 09 09 turn found*)....
004400: 09 4E 65 78 74 43 68 61 72 3B 0D 0A 09 09 09 49 .NextChar;.....I
004410: 46 20 28 63 68 3D 4C 46 29 20 54 48 45 4E 20 4E F (ch=LF) THEN N
004420: 65 78 74 43 68 61 72 20 45 4E 44 3B 0D 0A 09 09 extChar END;....
004430: 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 45 58 .WriteLn;.....EX
004440: 49 54 3B 0D 0A 09 09 09 7C 0D 0A 09 09 4C 46 3A IT;.....|....LF:
004450: 09 28 2A 6D 75 73 74 20 62 65 20 61 20 73 74 72 .(*must be a str
004460: 61 79 20 6C 69 6E 65 20 66 65 65 64 2C 20 74 72 ay line feed, tr
004470: 65 61 74 20 61 73 20 61 0D 0A 09 09 09 20 20 6C eat as a..... l
004480: 69 6E 65 20 74 65 72 6D 69 6E 61 74 6F 72 2A 29 ine terminator*)
004490: 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 .....WriteLn;...
0044A0: 09 09 45 58 49 54 3B 0D 0A 09 09 09 7C 0D 0A 09 ..EXIT;.....|...
0044B0: 09 54 41 42 3A 09 52 45 50 45 41 54 0D 0A 09 09 .TAB:.REPEAT....
0044C0: 09 09 49 4E 43 28 43 68 61 72 73 57 72 69 74 74 ..INC(CharsWritt
0044D0: 65 6E 29 3B 0D 0A 09 09 09 09 49 46 20 43 68 61 en);......IF Cha
0044E0: 72 73 57 72 69 74 74 65 6E 3E 3D 50 61 67 65 57 rsWritten>=PageW
0044F0: 69 64 74 68 20 54 48 45 4E 0D 0A 09 09 09 09 09 idth THEN.......
004500: 72 69 74 65 28 54 41 42 29 20 45 4E 44 3B 0D 0A rite(TAB) END;..
004510: 09 45 4C 53 45 0D 0A 09 09 46 4F 52 20 69 3A 3D .ELSE....FOR i:=
004520: 31 20 54 4F 20 31 30 20 44 4F 20 57 72 69 74 65 1 TO 10 DO Write
004530: 28 27 20 27 29 20 45 4E 44 3B 0D 0A 09 09 45 4E (' ') END;....EN
004540: 44 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 D;...WriteString
004550: 28 27 50 61 67 65 3A 20 27 29 3B 0D 0A 09 57 72 ('Page: ');...Wr
004560: 69 74 65 49 6E 74 28 50 61 67 65 4E 75 6D 62 65 iteInt(PageNumbe
004570: 72 2C 35 29 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B r,5);...WriteLn;
004580: 0D 0A 09 45 4E 44 20 50 61 67 65 48 65 61 64 65 ...END PageHeade
004590: 72 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 r;....PROCEDURE
0045A0: 4E 75 6D 62 65 72 28 29 3A 43 41 52 44 49 4E 41 Number():CARDINA
0045B0: 4C 3B 0D 0A 54 59 50 45 09 43 68 61 72 53 65 74 L;..TYPE.CharSet
0045C0: 3D 53 45 54 20 4F 46 20 43 48 41 52 3B 0D 0A 56 =SET OF CHAR;..V
0045D0: 41 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A AR.i:CARDINAL;..
0045E0: 42 45 47 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 BEGIN...i:=0;...
0045F0: 57 48 49 4C 45 20 63 68 20 49 4E 20 43 68 61 72 WHILE ch IN Char
004600: 53 65 74 7B 27 30 27 2E 2E 27 39 27 2C 42 53 2C Set{'0'..'9',BS,
004610: 44 45 4C 7D 20 44 4F 0D 0A 09 09 49 46 20 28 63 DEL} DO....IF (c
004620: 68 3D 42 53 29 20 4F 52 20 28 63 68 3D 44 45 4C h=BS) OR (ch=DEL
004630: 29 20 54 48 45 4E 20 69 3A 3D 69 20 44 49 56 20 ) THEN i:=i DIV
004640: 31 30 0D 0A 09 09 45 4C 53 45 0D 0A 09 09 09 69 10....ELSE.....i
004650: 3A 3D 31 30 2A 69 2B 28 4F 52 44 28 63 68 29 2D :=10*i+(ORD(ch)-
004660: 4F 52 44 28 27 30 27 29 29 3B 0D 0A 09 09 09 45 ORD('0'));.....E
004670: 4E 44 3B 0D 0A 09 09 52 65 61 64 28 63 68 29 3B ND;....Read(ch);
004680: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 ....END;...RETUR
004690: 4E 20 69 0D 0A 09 45 4E 44 20 4E 75 6D 62 65 72 N i...END Number
0046A0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 72 69 ;..PROCEDURE Pri
0046B0: 6E 74 48 65 6C 70 3B 0D 0A 42 45 47 49 4E 0D 0A ntHelp;..BEGIN..
0046C0: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 45 .WriteString(' E
0046D0: 78 61 6D 70 6C 65 73 20 6F 66 20 70 6F 73 73 69 xamples of possi
0046E0: 62 6C 65 20 72 65 73 70 6F 6E 73 65 73 3A 27 29 ble responses:')
0046F0: 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 ;WriteLn;...Writ
004700: 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 09 09 43 WriteLn;.......C
004710: 6F 6E 74 69 6E 75 61 74 69 6F 6E 3A 3D 54 52 55 ontinuation:=TRU
004720: 45 3B 0D 0A 09 09 09 09 09 52 45 54 55 52 4E 09 E;.......RETURN.
004730: 28 2A 6E 6F 74 65 20 74 68 61 74 20 74 61 62 20 (*note that tab
004740: 67 65 74 73 20 70 72 6F 63 65 73 73 65 64 20 61 gets processed a
004750: 67 61 69 6E 0D 0A 09 09 09 09 09 09 20 20 61 74 gain........ at
004760: 20 73 74 61 72 74 20 6F 66 20 6E 65 78 74 20 6C start of next l
004770: 69 6E 65 2A 29 0D 0A 09 09 09 09 09 45 4E 44 3B ine*).......END;
004780: 0D 0A 09 09 09 09 49 46 20 45 78 70 61 6E 64 54 ......IF ExpandT
004790: 61 62 73 20 4F 52 20 4E 75 6D 62 65 72 4C 69 6E abs OR NumberLin
0047A0: 65 73 20 54 48 45 4E 20 57 72 69 74 65 28 27 20 es THEN Write('
0047B0: 27 29 20 45 4E 44 3B 0D 0A 09 09 09 09 55 4E 54 ') END;......UNT
0047C0: 49 4C 20 49 41 4E 44 28 43 68 61 72 73 57 72 69 IL IAND(CharsWri
0047D0: 74 74 65 6E 2C 37 29 3D 37 3B 0D 0A 09 09 09 49 tten,7)=7;.....I
0047E0: 46 20 4E 4F 54 20 28 45 78 70 61 6E 64 54 61 62 F NOT (ExpandTab
0047F0: 73 20 4F 52 20 4E 75 6D 62 65 72 4C 69 6E 65 73 s OR NumberLines
004800: 29 20 54 48 45 4E 20 57 72 69 74 65 28 54 41 42 ) THEN Write(TAB
004810: 29 20 45 4E 44 3B 0D 0A 09 09 09 7C 0D 0A 09 09 ) END;.....|....
004820: 30 78 2E 2E 31 66 78 3A 09 28 2A 6E 6F 6E 2D 70 0x..1fx:.(*non-p
004830: 72 69 6E 74 69 6E 67 20 63 68 61 72 61 63 74 65 rinting characte
004840: 72 73 2E 20 54 68 69 73 20 69 73 20 63 68 65 61 rs. This is chea
004850: 74 69 6E 67 0D 0A 09 09 09 09 20 20 73 6C 69 67 ting...... slig
004860: 68 74 6C 79 20 2D 20 73 68 6F 75 6C 64 20 65 78 htly - should ex
004870: 63 6C 75 64 65 20 43 52 20 4C 46 20 61 6E 64 20 clude CR LF and
004880: 54 41 42 2A 29 0D 0A 09 09 09 49 46 20 43 68 61 TAB*).....IF Cha
004890: 72 73 57 72 69 74 74 65 6E 3E 3D 28 50 61 67 65 rsWritten>=(Page
0048A0: 57 69 64 74 68 2D 34 29 20 54 48 45 4E 0D 0A 09 Width-4) THEN...
0048B0: 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 ...WriteLn;.....
0048C0: 09 43 6F 6E 74 69 6E 75 61 74 69 6F 6E 3A 3D 54 .Continuation:=T
0048D0: 52 55 45 3B 0D 0A 09 09 09 09 52 45 54 55 52 4E RUE;......RETURN
0048E0: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 57 ......END;.....W
0048F0: 72 69 74 65 28 27 3C 27 29 3B 0D 0A 09 09 09 57 rite('<');.....W
004900: 65 53 74 72 69 6E 67 28 27 20 3F 20 20 20 20 20 eString(' ?
004910: 20 20 20 20 20 20 2D 20 54 68 69 73 20 6D 65 73 - This mes
004920: 73 61 67 65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D sage');WriteLn;.
004930: 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
004940: 32 32 37 20 20 20 20 20 20 20 20 20 2D 20 20 6C 227 - l
004950: 69 73 74 20 66 72 6F 6D 20 6C 69 6E 65 20 32 32 ist from line 22
004960: 37 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 7');WriteLn;...W
004970: 72 69 74 65 53 74 72 69 6E 67 28 27 20 2B 32 30 riteString(' +20
004980: 20 6F 72 20 2D 32 30 20 20 2D 20 67 6F 20 66 6F or -20 - go fo
004990: 72 77 61 72 64 20 28 62 61 63 6B 29 20 32 30 20 rward (back) 20
0049A0: 6C 69 6E 65 73 27 29 3B 0D 0A 09 57 72 69 74 65 lines');...Write
0049B0: 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E Ln;...WriteStrin
0049C0: 67 28 27 20 71 20 28 6F 72 20 51 29 20 20 20 20 g(' q (or Q)
0049D0: 2D 20 67 6F 20 74 6F 20 6E 65 78 74 20 66 69 6C - go to next fil
0049E0: 65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 e');WriteLn;...W
0049F0: 72 69 74 65 53 74 72 69 6E 67 28 27 20 43 6F 6E riteString(' Con
004A00: 74 72 6F 6C 20 43 20 20 20 20 20 20 20 2D 20 61 trol C - a
004A10: 62 6F 72 74 20 72 75 6E 27 29 3B 57 72 69 74 65 bort run');Write
004A20: 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E Ln;...WriteStrin
004A30: 67 28 27 2F 73 74 72 69 6E 67 2F 20 20 20 20 20 g('/string/
004A40: 2D 20 6C 69 73 74 20 66 72 6F 6D 20 6E 65 78 74 - list from next
004A50: 20 6F 63 63 75 72 65 6E 63 65 20 6F 66 20 73 74 occurence of st
004A60: 72 69 6E 67 27 29 3B 0D 0A 09 57 72 69 74 65 4C ring');...WriteL
004A70: 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 n;...WriteString
004A80: 28 27 31 30 30 2F 73 74 72 69 6E 67 2F 20 20 2D ('100/string/ -
004A90: 20 6C 69 73 74 20 66 72 6F 6D 20 66 69 72 73 74 list from first
004AA0: 20 6F 63 63 75 72 65 6E 63 65 20 61 66 74 65 72 occurence after
004AB0: 20 6C 69 6E 65 20 31 30 30 27 29 3B 0D 0A 09 57 line 100');...W
004AC0: 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 riteLn;...WriteS
004AD0: 74 72 69 6E 67 28 27 50 32 30 20 20 20 20 20 20 tring('P20
004AE0: 20 20 20 20 2D 20 74 6F 67 67 6C 65 20 70 61 67 - toggle pag
004AF0: 65 20 6D 6F 64 65 20 73 65 74 20 32 30 20 6C 69 e mode set 20 li
004B00: 72 69 74 65 48 65 78 28 4F 52 44 28 63 68 29 2C riteHex(ORD(ch),
004B10: 32 29 3B 0D 0A 09 09 09 57 72 69 74 65 28 27 3E 2);.....Write('>
004B20: 27 29 3B 0D 0A 09 09 09 43 68 61 72 73 57 72 69 ');.....CharsWri
004B30: 74 74 65 6E 3A 3D 43 68 61 72 73 57 72 69 74 74 tten:=CharsWritt
004B40: 65 6E 2B 34 3B 0D 0A 09 09 09 7C 0D 0A 09 09 45 en+4;.....|....E
004B50: 4C 53 45 09 57 72 69 74 65 28 63 68 29 3B 0D 0A LSE.Write(ch);..
004B60: 09 09 09 49 4E 43 28 43 68 61 72 73 57 72 69 74 ...INC(CharsWrit
004B70: 74 65 6E 29 3B 0D 0A 09 09 09 45 4E 44 3B 28 2A ten);.....END;(*
004B80: 43 41 53 45 2A 29 0D 0A 09 09 4E 65 78 74 43 68 CASE*)....NextCh
004B90: 61 72 3B 0D 0A 09 09 45 4E 44 3B 28 2A 4C 4F 4F ar;....END;(*LOO
004BA0: 50 2A 29 0D 0A 09 45 4E 44 20 57 72 69 74 65 4C P*)...END WriteL
004BB0: 69 6E 65 3B 09 09 0D 0A 0D 0A 28 2A 09 54 68 65 ine;......(*.The
004BC0: 20 6E 65 78 74 20 72 6F 75 74 69 6E 65 20 69 73 next routine is
004BD0: 20 75 73 65 64 20 62 79 20 74 68 65 20 73 6F 72 used by the sor
004BE0: 74 20 6D 6F 64 75 6C 65 0D 0A 09 74 6F 20 70 65 t module...to pe
004BF0: 72 66 6F 72 6D 20 6B 65 79 20 63 6F 6D 70 61 72 rform key compar
004C00: 69 73 6F 6E 73 2A 29 0D 0A 0D 0A 50 52 4F 43 45 isons*)....PROCE
004C10: 44 55 52 45 20 43 6F 6D 70 61 72 28 61 2C 62 3A DURE Compar(a,b:
004C20: 41 44 44 52 45 53 53 29 3A 42 4F 4F 4C 45 41 4E ADDRESS):BOOLEAN
004C30: 3B 0D 0A 56 41 52 09 70 2C 71 3A 50 46 69 6C 65 ;..VAR.p,q:PFile
004C40: 4E 61 6D 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 70 Name;..BEGIN...p
004C50: 3A 3D 50 46 69 6C 65 4E 61 6D 65 28 61 29 3B 0D :=PFileName(a);.
004C60: 0A 09 71 3A 3D 50 46 69 6C 65 4E 61 6D 65 28 62 ..q:=PFileName(b
004C70: 29 3B 0D 0A 09 52 45 54 55 52 4E 20 70 5E 3E 71 );...RETURN p^>q
004C80: 5E 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 72 3B 0D ^...END Compar;.
004C90: 0A 50 52 4F 43 45 44 55 52 45 20 55 73 61 67 65 .PROCEDURE Usage
004CA0: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 ;..BEGIN...Write
004CB0: 53 74 72 69 6E 67 28 27 55 73 61 67 65 20 69 73 String('Usage is
004CC0: 3A 20 20 20 43 41 54 20 66 69 6C 65 2C 66 69 6C : CAT file,fil
004CD0: 65 2C 2E 2E 2E 27 29 3B 57 72 69 74 65 4C 6E 3B e,...');WriteLn;
004CE0: 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
004CF0: 20 20 20 20 20 20 6F 72 20 20 20 20 43 41 54 20 or CAT
004D00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
004D10: 04 00 01 00 02 09 52 E5 04 00 C9 02 00 00 00 02 ......R.........
004D20: 04 00 C5 02 00 00 00 02 04 00 C1 02 00 00 00 02 ................
004D30: 04 00 C6 02 00 00 00 02 04 00 C2 02 00 00 00 02 ................
004D40: 04 00 C7 02 00 00 00 02 04 00 C3 02 00 00 00 02 ................
004D50: 04 00 C8 02 00 00 00 02 04 00 C4 02 00 00 00 02 ................
004D60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004D70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004D80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004D90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004E00: 44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C DEFINITION MODUL
004E10: 45 20 43 6F 6D 6D 61 6E 64 3B 0D 0A 0D 0A 28 2A E Command;....(*
004E20: 09 43 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 70 72 .Command line pr
004E30: 6F 63 65 73 73 6F 72 2A 29 0D 0A 46 52 4F 4D 20 ocessor*)..FROM
004E40: 53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 42 59 SYSTEM IMPORT BY
004E50: 54 45 3B 0D 0A 0D 0A 54 59 50 45 0D 0A 09 50 61 TE;....TYPE...Pa
004E60: 72 63 6C 61 73 73 3D 28 6E 61 6D 65 2C 73 74 72 rclass=(name,str
004E70: 69 6E 67 2C 6F 70 74 69 6F 6E 29 3B 0D 0A 0D 0A ing,option);....
004E80: 09 28 2A 09 50 61 72 63 6C 61 73 73 20 69 73 20 .(*.Parclass is
004E90: 61 20 62 65 73 74 20 67 75 65 73 73 20 73 74 79 a best guess sty
004EA0: 6C 65 20 6F 66 20 74 68 69 6E 67 3A 0D 0A 09 09 le of thing:....
004EB0: 49 66 20 74 68 65 20 70 61 72 61 6D 65 74 65 72 If the parameter
004EC0: 20 69 73 20 69 6E 20 71 75 6F 74 65 73 20 69 74 is in quotes it
004ED0: 20 69 73 20 61 20 73 74 72 69 6E 67 0D 0A 09 09 is a string....
004EE0: 49 66 20 69 74 20 66 6F 6C 6C 6F 77 73 20 61 20 If it follows a
004EF0: 27 5B 27 20 6F 72 20 61 20 27 2F 27 20 69 74 20 '[' or a '/' it
004F00: 69 73 20 61 6E 20 6F 70 74 69 6F 6E 0D 0A 09 09 is an option....
004F10: 28 74 68 65 72 65 20 69 73 20 6F 6E 6C 79 20 65 (there is only e
004F20: 76 65 72 20 6F 6E 65 20 6F 70 74 69 6F 6E 20 70 ver one option p
004F30: 61 72 61 6D 65 74 65 72 2E 20 49 74 20 69 73 0D arameter. It is.
004F40: 0A 09 09 61 6C 77 61 79 73 20 6C 61 73 74 2C 20 ...always last,
004F50: 61 6E 64 20 69 74 20 63 6F 6E 74 61 69 6E 73 20 and it contains
004F60: 65 76 65 72 79 74 68 69 6E 67 20 66 72 6F 6D 20 everything from
004F70: 74 68 65 20 2F 20 6F 72 20 0D 0A 09 09 5B 20 6F the / or ....[ o
004F80: 6E 77 61 72 64 73 0D 0A 09 09 45 76 65 72 79 74 nwards....Everyt
004F90: 68 69 6E 67 20 65 6C 73 65 20 69 73 20 61 20 6E hing else is a n
004FA0: 61 6D 65 20 28 6E 6F 20 76 61 6C 69 64 69 74 79 ame (no validity
004FB0: 20 63 68 65 63 6B 69 6E 67 20 70 65 72 66 6F 72 checking perfor
004FC0: 6D 65 64 2A 29 0D 0A 0D 0A 09 54 65 78 74 3D 52 med*).....Text=R
004FD0: 45 43 4F 52 44 0D 0A 09 09 4C 65 6E 67 74 68 3A ECORD....Length:
004FE0: 42 59 54 45 3B 09 09 28 2A 72 65 74 75 72 6E 73 BYTE;..(*returns
004FF0: 20 62 79 74 65 73 20 69 6E 20 70 61 72 61 6D 65 bytes in parame
005000: 4E 0D 0A 09 09 57 49 54 48 20 50 61 72 61 6D 5B N....WITH Param[
005010: 43 6F 75 6E 74 2D 31 5D 5E 20 44 4F 0D 0A 0D 0A Count-1]^ DO....
005020: 09 09 09 28 2A 09 52 65 63 6F 67 6E 69 73 65 20 ...(*.Recognise
005030: 66 6C 61 67 73 2A 29 0D 0A 0D 0A 09 09 09 69 3A flags*).......i:
005040: 3D 30 3B 0D 0A 09 09 09 57 48 49 4C 45 20 69 3C =0;.....WHILE i<
005050: 43 41 52 44 49 4E 41 4C 28 4C 65 6E 67 74 68 29 CARDINAL(Length)
005060: 20 44 4F 0D 0A 09 09 09 09 43 41 53 45 20 43 68 DO......CASE Ch
005070: 61 72 73 5B 69 5D 20 4F 46 0D 0A 09 09 09 09 27 ars[i] OF......'
005080: 49 27 3A 45 78 70 61 6E 64 54 61 62 73 3A 3D 54 I':ExpandTabs:=T
005090: 52 55 45 3B 0D 0A 09 09 09 09 20 20 20 20 49 4E RUE;...... IN
0050A0: 43 28 69 29 7C 0D 0A 09 09 09 09 27 57 27 3A 4C C(i)|......'W':L
0050B0: 69 6E 65 57 72 61 70 3A 3D 54 52 55 45 3B 0D 0A ineWrap:=TRUE;..
0050C0: 09 09 09 09 20 20 20 20 49 4E 43 28 69 29 3B 0D .... INC(i);.
0050D0: 0A 09 09 09 09 20 20 20 20 50 61 67 65 57 69 64 ..... PageWid
0050E0: 74 68 3A 3D 47 65 74 4E 75 6D 28 43 68 61 72 73 th:=GetNum(Chars
0050F0: 2C 69 2C 4F 52 44 28 4C 65 6E 67 74 68 29 29 3B ,i,ORD(Length));
005100: 0D 0A 09 09 09 09 20 20 20 20 49 46 20 50 61 67 ...... IF Pag
005110: 65 57 69 64 74 68 3D 30 20 54 48 45 4E 20 50 61 eWidth=0 THEN Pa
005120: 67 65 57 69 64 74 68 3A 3D 38 30 20 45 4E 44 3B geWidth:=80 END;
005130: 0D 0A 0D 0A 09 09 09 09 09 28 2A 43 68 65 63 6B .........(*Check
005140: 20 70 61 67 65 20 77 69 64 74 68 20 69 73 20 72 page width is r
005150: 65 61 73 6F 6E 61 62 6C 65 2A 29 0D 0A 0D 0A 09 easonable*).....
005160: 09 09 09 20 20 20 20 49 46 20 50 61 67 65 57 69 ... IF PageWi
005170: 64 74 68 3C 33 32 20 54 48 45 4E 0D 0A 09 09 09 dth<32 THEN.....
005180: 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 09 ..WriteLn;......
005190: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 2A .WriteString(' *
0051A0: 2A 2A 20 50 61 67 65 20 77 69 64 74 68 20 74 6F ** Page width to
0051B0: 6F 20 6E 61 72 72 6F 77 20 2A 2A 2A 27 29 3B 0D o narrow ***');.
0051C0: 0A 09 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A ......WriteLn;..
0051D0: 09 09 09 09 09 55 73 61 67 65 3B 0D 0A 09 09 09 .....Usage;.....
0051E0: 09 09 45 4E 44 3B 0D 0A 09 09 09 09 20 20 20 7C ..END;...... |
0051F0: 0D 0A 09 09 09 09 27 4E 27 3A 4E 75 6D 62 65 72 ......'N':Number
005200: 3B 0D 0A 09 4C 69 6E 65 4F 66 46 69 6C 65 3A 3D ;...LineOfFile:=
005210: 31 3B 0D 0A 09 50 61 67 65 4E 75 6D 62 65 72 3A 1;...PageNumber:
005220: 3D 31 3B 0D 0A 09 43 68 61 72 50 6F 73 3A 3D 31 =1;...CharPos:=1
005230: 3B 0D 0A 09 43 68 61 72 43 6F 75 6E 74 3A 3D 30 ;...CharCount:=0
005240: 3B 0D 0A 09 48 69 67 68 57 61 74 65 72 3A 3D 30 ;...HighWater:=0
005250: 3B 0D 0A 09 4E 65 78 74 43 68 61 72 3B 09 28 2A ;...NextChar;.(*
005260: 70 72 69 6D 65 20 6C 6F 6F 6B 2D 61 68 65 61 64 prime look-ahead
005270: 20 63 68 61 72 61 63 74 65 72 2A 29 0D 0A 09 57 character*)...W
005280: 72 69 74 65 4C 6E 3B 0D 0A 09 48 69 67 68 57 61 riteLn;...HighWa
005290: 74 65 72 3A 3D 30 3B 0D 0A 09 49 46 20 50 61 67 ter:=0;...IF Pag
0052A0: 65 4D 6F 64 65 20 54 48 45 4E 0D 0A 09 09 50 61 eMode THEN....Pa
0052B0: 67 65 48 65 61 64 65 72 3B 0D 0A 09 09 45 4E 44 geHeader;....END
0052C0: 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 49 46 20 20 ;...LOOP....IF
0052D0: 45 6E 64 4F 66 46 69 6C 65 20 54 48 45 4E 20 45 EndOfFile THEN E
0052E0: 58 49 54 20 45 4E 44 3B 0D 0A 09 09 57 72 69 74 XIT END;....Writ
0052F0: 65 4C 69 6E 65 3B 0D 0A 09 09 49 4E 43 28 4C 69 eLine;....INC(Li
005300: 6E 65 4E 75 6D 62 65 72 29 3B 0D 0A 0D 0A 09 09 neNumber);......
005310: 28 2A 20 63 68 65 63 6B 20 66 6F 72 20 61 6E 79 (* check for any
005320: 74 68 69 6E 67 20 74 79 70 65 73 20 61 74 20 63 thing types at c
005330: 6F 6E 73 6F 6C 65 0D 0A 09 09 20 20 20 69 66 20 onsole.... if
005340: 63 74 72 6C 20 63 2C 20 74 68 65 20 61 62 6F 72 ctrl c, the abor
005350: 74 2C 20 69 66 20 71 20 6F 72 20 51 2A 29 0D 0A t, if q or Q*)..
005360: 0D 0A 09 09 42 75 73 79 52 65 61 64 28 63 68 29 ....BusyRead(ch)
005370: 3B 0D 0A 09 09 49 46 20 28 50 61 67 65 4D 6F 64 ;....IF (PageMod
005380: 65 20 41 4E 44 20 28 28 4C 69 6E 65 4E 75 6D 62 e AND ((LineNumb
005390: 65 72 3E 3D 50 61 67 65 4C 65 6E 29 20 4F 52 20 er>=PageLen) OR
0053A0: 45 6E 64 4F 66 46 69 6C 65 29 29 20 0D 0A 09 09 EndOfFile)) ....
0053B0: 20 20 20 4F 52 20 28 63 68 3C 3E 30 78 29 20 54 OR (ch<>0x) T
0053C0: 48 45 4E 0D 0A 09 09 09 49 46 20 45 6E 64 4F 66 HEN.....IF EndOf
0053D0: 46 69 6C 65 20 54 48 45 4E 20 44 45 43 28 43 68 File THEN DEC(Ch
0053E0: 61 72 50 6F 73 29 20 45 4E 44 3B 0D 0A 09 09 09 arPos) END;.....
0053F0: 45 6E 64 4F 66 46 69 6C 65 3A 3D 46 41 4C 53 45 EndOfFile:=FALSE
005400: 4C 69 6E 65 73 3A 3D 54 52 55 45 3B 0D 0A 09 09 Lines:=TRUE;....
005410: 09 09 20 20 20 20 49 4E 43 28 69 29 7C 0D 0A 09 .. INC(i)|...
005420: 09 09 09 27 50 27 3A 50 61 67 65 4D 6F 64 65 3A ...'P':PageMode:
005430: 3D 54 52 55 45 3B 0D 0A 09 09 09 09 20 20 20 20 =TRUE;......
005440: 49 4E 43 28 69 29 3B 0D 0A 09 09 09 09 20 20 20 INC(i);......
005450: 20 50 61 67 65 4C 65 6E 3A 3D 47 65 74 4E 75 6D PageLen:=GetNum
005460: 28 43 68 61 72 73 2C 69 2C 4F 52 44 28 4C 65 6E (Chars,i,ORD(Len
005470: 67 74 68 29 29 3B 0D 0A 09 09 09 09 20 20 20 20 gth));......
005480: 49 46 20 50 61 67 65 4C 65 6E 3D 30 20 54 48 45 IF PageLen=0 THE
005490: 4E 20 50 61 67 65 4C 65 6E 3A 3D 32 34 20 45 4E N PageLen:=24 EN
0054A0: 44 3B 0D 0A 0D 0A 09 09 09 09 09 28 2A 43 68 65 D;.........(*Che
0054B0: 63 6B 20 70 61 67 65 20 6C 65 6E 67 74 68 20 69 ck page length i
0054C0: 73 20 72 65 61 73 6F 6E 61 62 6C 65 2A 29 0D 0A s reasonable*)..
0054D0: 0D 0A 09 09 09 09 20 20 20 20 49 46 20 50 61 67 ...... IF Pag
0054E0: 65 4C 65 6E 3C 31 30 20 54 48 45 4E 0D 0A 09 09 eLen<10 THEN....
0054F0: 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 ...WriteLn;.....
005500: 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
005510: 2A 2A 2A 20 50 61 67 65 20 6C 65 6E 67 74 68 20 *** Page length
005520: 74 6F 6F 20 73 68 6F 72 74 20 2A 2A 2A 27 29 3B too short ***');
005530: 0D 0A 09 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D .......WriteLn;.
005540: 0A 09 09 09 09 09 55 73 61 67 65 0D 0A 09 09 09 ......Usage.....
005550: 09 09 45 4E 44 0D 0A 09 09 09 09 20 20 20 20 7C ..END...... |
005560: 0D 0A 09 09 09 09 45 4C 53 45 0D 0A 09 09 09 09 ......ELSE......
005570: 20 20 20 20 55 73 61 67 65 0D 0A 09 09 09 09 20 Usage......
005580: 20 20 20 45 4E 44 3B 28 2A 43 41 53 45 2A 29 0D END;(*CASE*).
005590: 0A 09 09 09 09 45 4E 44 3B 28 2A 57 48 49 4C 45 .....END;(*WHILE
0055A0: 2A 29 0D 0A 09 09 09 45 4E 44 3B 20 28 2A 57 49 *).....END; (*WI
0055B0: 54 48 2A 29 0D 0A 09 09 44 45 43 28 43 6F 75 6E TH*)....DEC(Coun
0055C0: 74 29 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 49 46 t);....END; (*IF
0055D0: 20 6F 70 74 69 6F 6E 2A 29 0D 0A 0D 0A 09 49 46 option*).....IF
0055E0: 20 43 6F 75 6E 74 3D 30 20 54 48 45 4E 20 55 73 Count=0 THEN Us
0055F0: 61 67 65 20 45 4E 44 3B 0D 0A 09 49 46 20 4E 75 age END;...IF Nu
005600: 3B 0D 0A 09 09 09 50 61 67 65 4D 6F 64 65 3A 3D ;.....PageMode:=
005610: 54 52 55 45 3B 0D 0A 09 09 09 57 72 69 74 65 53 TRUE;.....WriteS
005620: 74 72 69 6E 67 28 27 20 43 6F 6D 6D 61 6E 64 20 tring(' Command
005630: 3A 27 29 3B 0D 0A 09 09 09 49 46 20 63 68 3D 30 :');.....IF ch=0
005640: 78 20 54 48 45 4E 20 52 65 61 64 28 63 68 29 20 x THEN Read(ch)
005650: 0D 0A 09 09 09 45 4C 53 45 20 09 57 72 69 74 65 .....ELSE .Write
005660: 28 63 68 29 3B 0D 0A 09 09 09 09 43 6C 65 61 72 (ch);......Clear
005670: 43 68 61 72 42 75 66 66 65 72 0D 0A 09 09 09 09 CharBuffer......
005680: 45 4E 44 3B 0D 0A 09 09 09 4C 4F 4F 50 0D 0A 09 END;.....LOOP...
005690: 09 09 20 20 20 20 43 41 53 45 20 43 41 50 28 63 .. CASE CAP(c
0056A0: 68 29 20 4F 46 0D 0A 09 09 09 09 27 50 27 3A 50 h) OF......'P':P
0056B0: 61 67 65 4D 6F 64 65 3A 3D 4E 4F 54 20 50 61 67 ageMode:=NOT Pag
0056C0: 65 4D 6F 64 65 3B 0D 0A 09 09 09 09 20 20 20 20 eMode;......
0056D0: 4E 65 77 56 61 6C 75 65 28 50 61 67 65 4C 65 6E NewValue(PageLen
0056E0: 2C 31 32 29 7C 0D 0A 09 09 09 09 27 4E 27 3A 4E ,12)|......'N':N
0056F0: 75 6D 62 65 72 4C 69 6E 65 73 3A 3D 4E 4F 54 20 umberLines:=NOT
005700: 4E 75 6D 62 65 72 4C 69 6E 65 73 3B 52 65 61 64 NumberLines;Read
005710: 28 63 68 29 7C 0D 0A 09 09 09 09 27 49 27 3A 45 (ch)|......'I':E
005720: 78 70 61 6E 64 54 61 62 73 3A 3D 4E 4F 54 20 45 xpandTabs:=NOT E
005730: 78 70 61 6E 64 54 61 62 73 3B 52 65 61 64 28 63 xpandTabs;Read(c
005740: 68 29 7C 0D 0A 09 09 09 09 27 57 27 3A 4C 69 6E h)|......'W':Lin
005750: 65 57 72 61 70 3A 3D 4E 4F 54 20 4C 69 6E 65 57 eWrap:=NOT LineW
005760: 72 61 70 3B 0D 0A 09 09 09 09 20 20 20 20 4E 65 rap;...... Ne
005770: 77 56 61 6C 75 65 28 50 61 67 65 57 69 64 74 68 wValue(PageWidth
005780: 2C 34 30 29 7C 0D 0A 09 09 09 09 27 3F 27 3A 50 ,40)|......'?':P
005790: 72 69 6E 74 48 65 6C 70 3B 52 65 61 64 28 63 68 rintHelp;Read(ch
0057A0: 29 7C 0D 0A 09 09 09 09 27 2B 27 3A 52 65 61 64 )|......'+':Read
0057B0: 28 63 68 29 3B 0D 0A 09 09 09 20 09 20 20 20 20 (ch);..... .
0057C0: 4C 69 6E 65 4F 66 46 69 6C 65 3A 3D 4C 69 6E 65 LineOfFile:=Line
0057D0: 4F 66 46 69 6C 65 2B 4E 75 6D 62 65 72 28 29 0D OfFile+Number().
0057E0: 0A 09 09 09 09 20 20 20 20 52 65 70 6F 73 69 74 ..... Reposit
0057F0: 69 6F 6E 46 69 6C 65 7C 0D 0A 09 09 09 09 27 2D ionFile|......'-
005800: 6D 62 65 72 4C 69 6E 65 73 20 54 48 45 4E 20 50 mberLines THEN P
005810: 61 67 65 57 69 64 74 68 3A 3D 50 61 67 65 57 69 ageWidth:=PageWi
005820: 64 74 68 2D 36 20 45 4E 44 3B 0D 0A 0D 0A 09 46 dth-6 END;.....F
005830: 4F 52 20 69 3A 3D 30 20 54 4F 20 43 41 52 44 49 OR i:=0 TO CARDI
005840: 4E 41 4C 28 43 6F 75 6E 74 2D 31 29 20 44 4F 0D NAL(Count-1) DO.
005850: 0A 09 09 47 65 74 4E 61 6D 65 73 28 50 61 72 61 ...GetNames(Para
005860: 6D 5B 69 5D 5E 2E 43 68 61 72 73 2C 4E 61 6D 65 m[i]^.Chars,Name
005870: 73 2C 4E 61 6D 65 43 6F 75 6E 74 29 3B 0D 0A 09 s,NameCount);...
005880: 09 49 46 20 4E 61 6D 65 43 6F 75 6E 74 3E 31 20 .IF NameCount>1
005890: 54 48 45 4E 0D 0A 09 09 09 53 6F 72 74 52 65 63 THEN.....SortRec
0058A0: 6F 72 64 73 28 41 44 52 28 4E 61 6D 65 73 29 2C ords(ADR(Names),
0058B0: 43 41 52 44 49 4E 41 4C 28 4E 61 6D 65 43 6F 75 CARDINAL(NameCou
0058C0: 6E 74 29 2C 0D 0A 09 09 09 09 54 53 49 5A 45 28 nt),......TSIZE(
0058D0: 46 69 6C 65 4E 61 6D 65 29 2C 43 6F 6D 70 61 72 FileName),Compar
0058E0: 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 46 );.....END;....F
0058F0: 4F 52 20 6A 3A 3D 30 20 54 4F 20 4E 61 6D 65 43 OR j:=0 TO NameC
005900: 6F 75 6E 74 2D 31 20 44 4F 0D 0A 09 09 09 4C 6F ount-1 DO.....Lo
005910: 6F 6B 75 70 28 49 6E 66 2C 4E 61 6D 65 73 5B 6A okup(Inf,Names[j
005920: 5D 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 09 49 46 ],reply);.....IF
005930: 20 72 65 70 6C 79 3C 30 20 54 48 45 4E 0D 0A 09 reply<0 THEN...
005940: 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
005950: 20 43 6F 75 6C 64 20 6E 6F 74 20 6F 70 65 6E 20 Could not open
005960: 27 29 3B 0D 0A 09 09 09 09 57 72 69 74 65 53 74 ');......WriteSt
005970: 72 69 6E 67 28 4E 61 6D 65 73 5B 6A 5D 29 3B 0D ring(Names[j]);.
005980: 0A 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 .....WriteLn;...
005990: 09 09 45 4C 53 45 0D 0A 09 09 09 09 4F 75 74 70 ..ELSE......Outp
0059A0: 75 74 46 69 6C 65 28 4E 61 6D 65 73 5B 6A 5D 29 utFile(Names[j])
0059B0: 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 ;......END;.....
0059C0: 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 END;....END;...E
0059D0: 4E 44 20 4C 69 73 74 69 74 3B 09 09 09 0D 0A 42 ND Listit;.....B
0059E0: 45 47 49 4E 0D 0A 09 4C 69 73 74 69 74 3B 0D 0A EGIN...Listit;..
0059F0: 09 45 4E 44 20 43 61 74 2E 0D 0A 1A 1A 1A 1A 1A .END Cat........
005A00: 27 3A 52 65 61 64 28 63 68 29 3B 0D 0A 09 09 09 ':Read(ch);.....
005A10: 09 20 20 20 20 69 3A 3D 4E 75 6D 62 65 72 28 29 . i:=Number()
005A20: 3B 0D 0A 09 09 09 09 20 20 20 20 49 46 20 69 3E ;...... IF i>
005A30: 4C 69 6E 65 4F 66 46 69 6C 65 20 54 48 45 4E 20 LineOfFile THEN
005A40: 4C 69 6E 65 4F 66 46 69 6C 65 3A 3D 31 0D 0A 09 LineOfFile:=1...
005A50: 09 09 09 20 20 20 20 45 4C 53 45 20 4C 69 6E 65 ... ELSE Line
005A60: 4F 66 46 69 6C 65 3A 3D 4C 69 6E 65 4F 66 46 69 OfFile:=LineOfFi
005A70: 6C 65 2D 69 20 45 4E 44 3B 0D 0A 09 09 09 09 20 le-i END;......
005A80: 20 20 20 52 65 70 6F 73 69 74 69 6F 6E 46 69 6C RepositionFil
005A90: 65 0D 0A 09 09 09 09 20 20 20 20 7C 0D 0A 09 09 e...... |....
005AA0: 09 09 27 30 27 2E 2E 27 39 27 3A 4C 69 6E 65 4F ..'0'..'9':LineO
005AB0: 66 46 69 6C 65 3A 3D 4E 75 6D 62 65 72 28 29 3B fFile:=Number();
005AC0: 0D 0A 09 09 09 09 09 20 52 65 70 6F 73 69 74 69 ....... Repositi
005AD0: 6F 6E 46 69 6C 65 7C 0D 0A 09 09 09 09 27 21 27 onFile|......'!'
005AE0: 2E 2E 27 2A 27 2C 27 2C 27 2C 27 2E 27 2C 27 2F ..'*',',','.','/
005AF0: 27 2C 27 3A 27 2E 2E 27 40 27 2C 27 7B 27 2E 2E ',':'..'@','{'..
005B00: 27 7E 27 2C 0D 0A 09 09 09 09 27 5B 27 2E 2E 27 '~',......'['..'
005B10: 60 27 3A 0D 0A 09 09 09 09 09 53 65 61 72 63 68 `':.......Search
005B20: 28 63 68 29 3B 52 65 61 64 28 63 68 29 7C 0D 0A (ch);Read(ch)|..
005B30: 09 09 09 09 0D 0A 09 09 09 09 30 33 78 3A 0D 0A ..........03x:..
005B40: 09 09 09 09 09 48 41 4C 54 7C 0D 0A 09 09 09 09 .....HALT|......
005B50: 45 4C 53 45 20 45 58 49 54 0D 0A 09 09 09 09 45 ELSE EXIT......E
005B60: 4E 44 28 2A 43 41 53 45 2A 29 3B 0D 0A 09 09 09 ND(*CASE*);.....
005B70: 20 20 20 20 45 4E 44 3B 28 2A 4C 4F 4F 50 2A 29 END;(*LOOP*)
005B80: 0D 0A 09 09 09 49 46 20 43 41 50 28 63 68 29 3D .....IF CAP(ch)=
005B90: 27 51 27 20 54 48 45 4E 20 45 58 49 54 20 45 4E 'Q' THEN EXIT EN
005BA0: 44 3B 0D 0A 09 09 09 49 4E 43 28 50 61 67 65 4E D;.....INC(PageN
005BB0: 75 6D 62 65 72 29 3B 0D 0A 09 09 09 50 61 67 65 umber);.....Page
005BC0: 48 65 61 64 65 72 3B 0D 0A 09 09 09 4C 69 6E 65 Header;.....Line
005BD0: 4E 75 6D 62 65 72 3A 3D 32 3B 0D 0A 09 09 09 45 Number:=2;.....E
005BE0: 4E 44 3B 0D 0A 0D 0A 09 09 45 4E 44 3B 0D 0A 09 ND;......END;...
005BF0: 45 4E 44 20 4F 75 74 70 75 74 46 69 6C 65 3B 0D END OutputFile;.
005C00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005C10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005C20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005C30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005C40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005C50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005C60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005C70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005C80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005C90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005CA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005CB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005CC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005CD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005CE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005CF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005D00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005D10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005D20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005D30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005D40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005D50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005D60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005D70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005D80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005D90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005DA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005DB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005DC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005DD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005DE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005DF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
005E00: 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 4C 69 73 ...PROCEDURE Lis
005E10: 74 69 74 3B 0D 0A 56 41 52 09 69 3A 43 41 52 44 tit;..VAR.i:CARD
005E20: 49 4E 41 4C 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 INAL;....PROCEDU
005E30: 52 45 20 47 65 74 4E 75 6D 28 43 68 61 72 73 3A RE GetNum(Chars:
005E40: 41 52 52 41 59 20 4F 46 20 43 48 41 52 3B 56 41 ARRAY OF CHAR;VA
005E50: 52 20 50 6F 73 3A 43 41 52 44 49 4E 41 4C 3B 4C R Pos:CARDINAL;L
005E60: 65 6E 3A 43 41 52 44 49 4E 41 4C 29 3A 43 41 52 en:CARDINAL):CAR
005E70: 44 49 4E 41 4C 3B 0D 0A 0D 0A 28 2A 09 47 65 74 DINAL;....(*.Get
005E80: 20 61 20 6E 75 6D 62 65 72 20 66 72 6F 6D 20 61 a number from a
005E90: 20 70 61 72 61 6D 65 74 65 72 20 69 6E 20 74 68 parameter in th
005EA0: 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 2A 29 e command line*)
005EB0: 0D 0A 54 59 50 45 09 43 68 61 72 53 65 74 3D 53 ..TYPE.CharSet=S
005EC0: 45 54 20 4F 46 20 43 48 41 52 3B 0D 0A 56 41 52 ET OF CHAR;..VAR
005ED0: 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 .i:CARDINAL;..BE
005EE0: 47 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 57 48 GIN...i:=0;...WH
005EF0: 49 4C 45 20 28 50 6F 73 3C 4C 65 6E 29 20 41 4E ILE (Pos<Len) AN
005F00: 44 20 28 43 68 61 72 73 5B 50 6F 73 5D 20 49 4E D (Chars[Pos] IN
005F10: 20 43 68 61 72 53 65 74 7B 27 30 27 2E 2E 27 39 CharSet{'0'..'9
005F20: 27 7D 29 20 44 4F 0D 0A 09 09 69 3A 3D 31 30 2A '}) DO....i:=10*
005F30: 69 2B 4F 52 44 28 43 68 61 72 73 5B 50 6F 73 5D i+ORD(Chars[Pos]
005F40: 29 2D 4F 52 44 28 27 30 27 29 3B 0D 0A 09 09 49 )-ORD('0');....I
005F50: 4E 43 28 50 6F 73 29 3B 0D 0A 09 09 45 4E 44 3B NC(Pos);....END;
005F60: 09 0D 0A 09 52 45 54 55 52 4E 20 69 0D 0A 09 45 ....RETURN i...E
005F70: 4E 44 20 47 65 74 4E 75 6D 3B 0D 0A 42 45 47 49 ND GetNum;..BEGI
005F80: 4E 0D 0A 0D 0A 09 47 65 74 50 61 72 61 6D 73 28 N.....GetParams(
005F90: 50 61 72 61 6D 2C 43 6F 75 6E 74 29 3B 0D 0A 20 Param,Count);..
005FA0: 20 20 20 20 20 20 20 43 6F 75 6E 74 65 72 20 3A Counter :
005FB0: 3D 20 31 3B 0D 0A 20 20 20 20 20 20 20 20 49 46 = 1;.. IF
005FC0: 20 43 6F 75 6E 74 3D 30 20 54 48 45 4E 20 55 73 Count=0 THEN Us
005FD0: 61 67 65 20 45 4E 44 3B 0D 0A 0D 0A 09 49 46 20 age END;.....IF
005FE0: 50 61 72 61 6D 5B 43 6F 75 6E 74 2D 31 5D 5E 2E Param[Count-1]^.
005FF0: 43 6C 61 73 73 3D 6F 70 74 69 6F 6E 20 54 48 45 Class=option THE
006000: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
006010: 05 00 01 00 02 09 52 E5 05 00 C9 02 00 00 00 02 ......R.........
006020: 05 00 C5 02 00 00 00 02 05 00 C1 02 00 00 00 02 ................
006030: 05 00 C6 02 00 00 00 02 05 00 C2 02 00 00 00 02 ................
006040: 05 00 C7 02 00 00 00 02 05 00 C3 02 00 00 00 02 ................
006050: 05 00 C8 02 00 00 00 02 05 00 C4 02 00 00 00 02 ................
006060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
006070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
006080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
006090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
006100: 6F 6D 20 66 69 6C 65 20 28 69 2E 65 2E 20 0D 0A om file (i.e. ..
006110: 09 76 65 72 79 20 6E 65 61 72 20 74 68 65 20 62 .very near the b
006120: 65 67 69 6E 6E 69 6E 67 29 20 45 61 63 68 20 63 eginning) Each c
006130: 6F 6E 74 72 6F 6C 20 63 6F 64 65 20 63 61 6E 20 ontrol code can
006140: 62 65 20 75 70 20 74 6F 20 38 20 63 68 61 72 61 be up to 8 chara
006150: 63 74 65 72 73 20 6C 6F 6E 67 0D 0A 09 61 6E 64 cters long...and
006160: 20 69 73 20 74 65 72 6D 69 6E 61 74 65 64 20 62 is terminated b
006170: 79 20 61 20 76 61 6C 75 65 20 6F 66 20 30 20 69 y a value of 0 i
006180: 66 20 6C 65 73 73 20 74 68 61 6E 20 38 20 63 68 f less than 8 ch
006190: 61 72 61 63 74 65 72 73 20 69 73 20 72 65 71 75 aracters is requ
0061A0: 69 72 65 64 0D 0A 0D 0A 09 54 68 65 20 63 6F 6E ired.....The con
0061B0: 74 72 6F 6C 20 63 68 61 72 61 63 74 65 72 73 20 trol characters
0061C0: 69 6E 20 74 68 65 20 73 75 70 70 6C 69 65 64 20 in the supplied
0061D0: 70 72 6F 67 72 61 6D 20 61 72 65 20 73 65 74 20 program are set
0061E0: 66 6F 72 20 61 20 53 54 41 52 20 44 50 53 35 31 for a STAR DPS51
0061F0: 30 2C 0D 0A 09 77 68 69 63 68 20 69 73 20 73 75 0,...which is su
006200: 70 70 6F 73 65 64 20 74 6F 20 62 65 20 45 70 73 pposed to be Eps
006210: 6F 6E 20 63 6F 6D 70 61 74 69 62 6C 65 2C 20 73 on compatible, s
006220: 6F 20 74 68 65 20 70 72 6F 67 72 61 6D 20 6D 61 o the program ma
006230: 79 20 77 65 6C 6C 20 72 75 6E 20 27 61 73 20 69 y well run 'as i
006240: 73 27 0D 0A 09 6F 6E 20 45 70 73 6F 6E 73 20 61 s'...on Epsons a
006250: 6E 64 20 45 70 73 6F 6E 20 63 6C 6F 6E 65 73 0D nd Epson clones.
006260: 0A 0D 0A 09 54 68 65 20 70 72 6F 67 72 61 6D 20 ....The program
006270: 69 73 20 62 61 73 65 64 20 6F 6E 20 61 20 6D 65 is based on a me
006280: 74 68 6F 64 20 64 65 73 63 72 69 62 65 64 20 62 thod described b
006290: 79 20 50 61 75 6C 20 48 65 63 6B 65 6C 20 27 41 y Paul Heckel 'A
0062A0: 20 54 65 63 68 6E 69 71 75 65 20 66 6F 72 0D 0A Technique for..
0062B0: 09 49 73 6F 6C 61 74 69 6E 67 20 44 69 66 66 65 .Isolating Diffe
0062C0: 72 65 6E 63 65 73 20 62 65 74 77 65 65 6E 20 46 rences between F
0062D0: 69 6C 65 73 27 2C 20 43 6F 6D 6D 75 6E 69 63 61 iles', Communica
0062E0: 74 69 6F 6E 73 20 6F 66 20 74 68 65 20 41 43 4D tions of the ACM
0062F0: 2C 20 56 6F 6C 20 32 31 0D 0A 09 4E 6F 20 34 2C , Vol 21...No 4,
006300: 0D 0A 09 09 43 68 61 72 73 5B 6C 65 6E 5D 3A 3D ....Chars[len]:=
006310: 30 78 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 63 6F 0x;....END;...co
006320: 75 6E 74 3A 3D 63 6F 75 6E 74 2B 31 0D 0A 09 45 unt:=count+1...E
006330: 4E 44 20 42 75 69 6C 64 3B 0D 0A 28 2A 09 63 72 ND Build;..(*.cr
006340: 61 63 6B 20 74 68 65 20 63 6F 6D 6D 61 6E 64 20 ack the command
006350: 6C 69 6E 65 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 line*)..BEGIN...
006360: 69 3A 3D 30 3B 0D 0A 09 63 6F 75 6E 74 3A 3D 30 i:=0;...count:=0
006370: 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 49 46 20 63 ;...LOOP....IF c
006380: 6F 75 6E 74 3E 48 49 47 48 28 70 29 20 54 48 45 ount>HIGH(p) THE
006390: 4E 20 0D 0A 09 09 09 45 58 49 54 20 0D 0A 09 09 N .....EXIT ....
0063A0: 09 45 4E 44 3B 0D 0A 09 09 57 48 49 4C 45 20 28 .END;....WHILE (
0063B0: 69 3C 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C 65 i<INTEGER(CommLe
0063C0: 6E 67 74 68 29 29 20 41 4E 44 20 28 43 6F 6D 6D ngth)) AND (Comm
0063D0: 54 65 78 74 5B 69 5D 3D 27 20 27 29 20 44 4F 0D Text[i]=' ') DO.
0063E0: 0A 09 09 09 49 4E 43 28 69 29 0D 0A 09 09 09 45 ....INC(i).....E
0063F0: 4E 44 3B 0D 0A 09 09 49 46 20 69 3E 3D 49 4E 54 ND;....IF i>=INT
006400: 45 47 45 52 28 43 6F 6D 6D 4C 65 6E 67 74 68 29 EGER(CommLength)
006410: 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D THEN EXIT END;.
006420: 0A 09 09 43 41 53 45 20 43 6F 6D 6D 54 65 78 74 ...CASE CommText
006430: 5B 69 5D 20 4F 46 0D 0A 09 09 27 5B 27 2C 27 2F [i] OF....'[','/
006440: 27 3A 28 2A 4F 70 74 69 6F 6E 20 66 6F 75 6E 64 ':(*Option found
006450: 2A 29 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D 0A *).....INC(i);..
006460: 09 09 09 42 75 69 6C 64 28 49 4E 54 45 47 45 52 ...Build(INTEGER
006470: 28 43 6F 6D 6D 4C 65 6E 67 74 68 29 2D 69 2C 30 (CommLength)-i,0
006480: 64 78 2C 6F 70 74 69 6F 6E 29 3B 0D 0A 09 09 09 dx,option);.....
006490: 45 58 49 54 0D 0A 09 09 09 7C 0D 0A 09 09 27 22 EXIT.....|....'"
0064A0: 27 2C 22 27 22 3A 6A 3A 3D 69 2B 31 3B 0D 0A 09 ',"'":j:=i+1;...
0064B0: 09 09 57 48 49 4C 45 20 28 43 6F 6D 6D 54 65 78 ..WHILE (CommTex
0064C0: 74 5B 69 5D 3C 3E 43 6F 6D 6D 54 65 78 74 5B 6A t[i]<>CommText[j
0064D0: 5D 29 20 0D 0A 09 09 09 09 41 4E 44 20 28 6A 3C ]) ......AND (j<
0064E0: 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C 65 6E 67 INTEGER(CommLeng
0064F0: 74 68 29 29 20 44 4F 0D 0A 09 09 09 09 49 4E 43 th)) DO......INC
006500: 74 65 72 2A 29 0D 0A 09 09 54 65 72 6D 69 6E 61 ter*)....Termina
006510: 74 6F 72 3A 43 48 41 52 3B 09 28 2A 72 65 74 75 tor:CHAR;.(*retu
006520: 72 6E 73 20 6E 65 78 74 20 63 68 61 72 61 63 74 rns next charact
006530: 65 72 2C 20 6F 72 0D 0A 09 09 09 09 09 64 65 6C er, or.......del
006540: 69 6D 69 74 65 72 20 66 6F 72 20 73 74 72 69 6E imiter for strin
006550: 67 73 2A 29 09 0D 0A 09 09 43 6C 61 73 73 3A 50 gs*).....Class:P
006560: 61 72 63 6C 61 73 73 3B 09 09 28 2A 63 6C 61 73 arclass;..(*clas
006570: 73 20 6F 66 20 70 61 72 61 6D 65 74 65 72 2A 29 s of parameter*)
006580: 0D 0A 09 09 43 41 53 45 20 3A 42 4F 4F 4C 45 41 ....CASE :BOOLEA
006590: 4E 20 4F 46 0D 0A 09 09 20 20 20 20 46 41 4C 53 N OF.... FALS
0065A0: 45 3A 46 69 6C 65 50 6F 73 3A 43 41 52 44 49 4E E:FilePos:CARDIN
0065B0: 41 4C 3B 45 72 72 6F 72 4E 6F 3A 43 41 52 44 49 AL;ErrorNo:CARDI
0065C0: 4E 41 4C 7C 0D 0A 09 09 20 20 20 20 54 52 55 45 NAL|.... TRUE
0065D0: 3A 43 68 61 72 73 3A 41 52 52 41 59 5B 30 2E 2E :Chars:ARRAY[0..
0065E0: 31 32 37 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 127] OF CHAR;...
0065F0: 09 20 20 20 20 45 4E 44 0D 0A 09 09 09 09 09 28 . END.......(
006600: 2A 70 61 72 61 6D 65 74 65 72 20 2D 20 61 6C 77 *parameter - alw
006610: 61 79 73 20 74 65 72 6D 69 6E 61 74 65 64 20 62 ays terminated b
006620: 79 0D 0A 09 09 09 09 09 20 20 61 20 7A 65 72 6F y....... a zero
006630: 20 62 79 74 65 2C 20 62 75 74 20 74 68 61 74 20 byte, but that
006640: 62 79 74 65 20 69 73 20 6E 6F 74 0D 0A 09 09 09 byte is not.....
006650: 09 09 20 20 69 6E 63 6C 75 64 65 64 20 69 6E 20 .. included in
006660: 74 68 65 20 6C 65 6E 67 74 68 2A 29 0D 0A 09 09 the length*)....
006670: 45 4E 44 3B 0D 0A 0D 0A 09 50 61 72 61 6D 65 74 END;.....Paramet
006680: 65 72 3D 50 4F 49 4E 54 45 52 20 54 4F 20 54 65 er=POINTER TO Te
006690: 78 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 xt;..PROCEDURE G
0066A0: 65 74 50 61 72 61 6D 73 28 56 41 52 20 70 3A 41 etParams(VAR p:A
0066B0: 52 52 41 59 20 4F 46 20 50 61 72 61 6D 65 74 65 RRAY OF Paramete
0066C0: 72 3B 56 41 52 20 63 6F 75 6E 74 3A 49 4E 54 45 r;VAR count:INTE
0066D0: 47 45 52 29 3B 0D 0A 28 2A 09 63 72 61 63 6B 20 GER);..(*.crack
0066E0: 74 68 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 the command line
0066F0: 2A 29 0D 0A 56 41 52 09 43 6F 6D 6D 4C 65 6E 67 *)..VAR.CommLeng
006700: 28 6A 29 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 (j)......END;...
006710: 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 09 42 75 ..INC(i);.....Bu
006720: 69 6C 64 28 6A 2D 69 2C 43 6F 6D 6D 54 65 78 74 ild(j-i,CommText
006730: 5B 69 2D 31 5D 2C 73 74 72 69 6E 67 29 3B 0D 0A [i-1],string);..
006740: 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 7C ...INC(j);.....|
006750: 0D 0A 09 09 45 4C 53 45 09 6A 3A 3D 69 2B 31 3B ....ELSE.j:=i+1;
006760: 0D 0A 09 09 09 57 48 49 4C 45 20 09 09 28 43 6F .....WHILE ..(Co
006770: 6D 6D 54 65 78 74 5B 6A 5D 3C 3E 27 20 27 29 20 mmText[j]<>' ')
006780: 0D 0A 09 09 09 09 41 4E 44 09 28 43 6F 6D 6D 54 ......AND.(CommT
006790: 65 78 74 5B 6A 5D 3C 3E 27 2C 27 29 20 0D 0A 09 ext[j]<>',') ...
0067A0: 09 09 09 41 4E 44 09 28 43 6F 6D 6D 54 65 78 74 ...AND.(CommText
0067B0: 5B 6A 5D 3C 3E 27 5B 27 29 0D 0A 09 09 09 09 41 [j]<>'[')......A
0067C0: 4E 44 09 28 43 6F 6D 6D 54 65 78 74 5B 6A 5D 3C ND.(CommText[j]<
0067D0: 3E 27 2F 27 29 0D 0A 09 09 09 09 41 4E 44 20 09 >'/')......AND .
0067E0: 28 6A 3C 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C (j<INTEGER(CommL
0067F0: 65 6E 67 74 68 29 29 20 44 4F 0D 0A 09 09 09 09 ength)) DO......
006800: 49 4E 43 28 6A 29 0D 0A 09 09 09 09 45 4E 44 3B INC(j)......END;
006810: 0D 0A 09 09 09 42 75 69 6C 64 28 6A 2D 69 2C 43 .....Build(j-i,C
006820: 6F 6D 6D 54 65 78 74 5B 6A 5D 2C 6E 61 6D 65 29 ommText[j],name)
006830: 3B 0D 0A 09 09 09 45 4E 44 3B 28 2A 63 61 73 65 ;.....END;(*case
006840: 2A 29 0D 0A 09 09 0D 0A 09 09 69 3A 3D 6A 3B 0D *)........i:=j;.
006850: 0A 09 09 49 46 20 43 6F 6D 6D 54 65 78 74 5B 69 ...IF CommText[i
006860: 5D 3D 27 2C 27 20 54 48 45 4E 20 49 4E 43 28 69 ]=',' THEN INC(i
006870: 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28 ) END;....END; (
006880: 2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 47 65 *LOOP*)...END Ge
006890: 74 50 61 72 61 6D 73 3B 0D 0A 09 09 09 09 0D 0A tParams;........
0068A0: 45 4E 44 20 43 6F 6D 6D 61 6E 64 2E 0D 0A 1A 1A END Command.....
0068B0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0068C0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0068D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0068E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0068F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
006900: 74 68 5B 38 30 68 5D 3A 42 59 54 45 3B 0D 0A 09 th[80h]:BYTE;...
006910: 43 6F 6D 6D 54 65 78 74 5B 38 31 68 5D 3A 41 52 CommText[81h]:AR
006920: 52 41 59 5B 30 2E 2E 31 32 36 5D 20 4F 46 20 43 RAY[0..126] OF C
006930: 48 41 52 3B 20 0D 0A 45 4E 44 20 43 6F 6D 6D 61 HAR; ..END Comma
006940: 6E 64 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A nd..............
006950: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
006960: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
006970: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
006980: 64 20 44 4F 0D 0A 09 09 57 48 49 4C 45 20 63 68 d DO....WHILE ch
006990: 3C 3E 43 52 20 44 4F 20 4E 65 78 74 43 68 61 72 <>CR DO NextChar
0069A0: 20 45 4E 44 3B 0D 0A 09 09 4E 65 78 74 43 68 61 END;....NextCha
0069B0: 72 3B 0D 0A 09 09 49 46 20 63 68 3D 4C 46 20 54 r;....IF ch=LF T
0069C0: 48 45 4E 20 4E 65 78 74 43 68 61 72 20 45 4E 44 HEN NextChar END
0069D0: 3B 0D 0A 09 09 49 4E 43 28 4C 69 6E 65 4F 66 46 ;....INC(LineOfF
0069E0: 69 6C 65 29 3B 0D 0A 09 09 41 64 64 4D 61 72 6B ile);....AddMark
0069F0: 65 72 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E er;....END;...EN
006A00: 44 20 52 65 70 6F 73 69 74 69 6F 6E 46 69 6C 65 D RepositionFile
006A10: 3B 0D 0A 0D 0A 54 59 50 45 09 4D 61 74 63 68 53 ;....TYPE.MatchS
006A20: 74 72 69 6E 67 3D 41 52 52 41 59 5B 31 2E 2E 36 tring=ARRAY[1..6
006A30: 30 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 0D 0A 56 0] OF CHAR;....V
006A40: 41 52 09 4C 61 73 74 53 74 72 69 6E 67 3A 4D 61 AR.LastString:Ma
006A50: 74 63 68 53 74 72 69 6E 67 3B 0D 0A 09 4C 61 73 tchString;...Las
006A60: 74 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3D 30 3B tLen:CARDINAL=0;
006A70: 09 28 2A 6C 65 6E 67 74 68 20 6F 66 20 6C 61 73 .(*length of las
006A80: 74 20 6D 61 74 63 68 65 64 20 73 74 72 69 6E 67 t matched string
006A90: 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 *)....PROCEDURE
006AA0: 53 65 61 72 63 68 28 44 65 6C 69 6D 69 74 65 72 Search(Delimiter
006AB0: 3A 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09 53 65 :CHAR);....(*.Se
006AC0: 61 72 63 68 20 66 6F 72 20 61 20 73 74 72 69 6E arch for a strin
006AD0: 67 20 66 72 6F 6D 20 74 68 65 20 63 75 72 72 65 g from the curre
006AE0: 6E 74 20 70 6F 73 69 74 69 6F 6E 20 69 6E 20 74 nt position in t
006AF0: 68 65 20 66 69 6C 65 0D 0A 09 0D 0A 09 54 68 69 he file......Thi
006B00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006B10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006B20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006B30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006B40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006B50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006B60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006B70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006B80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006B90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006BA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006BB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006BC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006BD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006BE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006BF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006C00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006C10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006C20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006C30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006C40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006C50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006C60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006C70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006C80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006C90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006CA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006CB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006CC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006CD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006CE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006CF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006D00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006D10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006D20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006D30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006D40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006D50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006D60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006D70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006D80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006D90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006DA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006DB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006DC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006DD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006DE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006DF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006E00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006E10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006E20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006E30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006E40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006E50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006E60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006E70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006E80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006E90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006EA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006EB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006EC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006ED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006EE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006EF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
006F00: 4D 4F 44 55 4C 45 20 43 6F 6D 70 61 72 65 3B 0D MODULE Compare;.
006F10: 0A 0D 0A 28 2A 09 43 6F 6D 70 61 72 65 20 74 77 ...(*.Compare tw
006F20: 6F 20 66 69 6C 65 73 0D 0A 0D 0A 09 43 61 6C 6C o files.....Call
006F30: 20 69 73 20 43 4F 4D 50 41 52 45 20 20 20 6F 6C is COMPARE ol
006F40: 64 20 66 69 6C 65 2C 6E 65 77 20 66 69 6C 65 2C d file,new file,
006F50: 5B 4C 69 73 74 20 66 69 6C 65 5D 0D 0A 0D 0A 09 [List file].....
006F60: 54 68 65 20 74 77 6F 20 66 69 6C 65 73 20 61 72 The two files ar
006F70: 65 20 63 6F 6D 70 61 72 65 64 20 6C 69 6E 65 20 e compared line
006F80: 62 79 20 6C 69 6E 65 0D 0A 0D 0A 09 6C 69 6E 65 by line.....line
006F90: 73 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65 s which have bee
006FA0: 6E 20 64 65 6C 65 74 65 64 20 66 72 6F 6D 20 74 n deleted from t
006FB0: 68 65 20 6F 6C 64 20 66 69 6C 65 20 61 72 65 20 he old file are
006FC0: 70 72 69 6E 74 65 64 20 69 6E 20 69 74 61 6C 69 printed in itali
006FD0: 63 73 0D 0A 09 6C 69 6E 65 73 20 77 68 69 63 68 cs...lines which
006FE0: 20 68 61 76 65 20 62 65 65 6E 20 69 6E 73 65 72 have been inser
006FF0: 74 65 64 20 61 72 65 20 70 72 69 6E 74 65 64 20 ted are printed
007000: 69 6E 20 65 6D 70 68 61 73 69 73 65 64 20 6D 6F in emphasised mo
007010: 64 65 0D 0A 09 6C 69 6E 65 73 20 77 68 69 63 68 de...lines which
007020: 20 68 61 76 65 20 62 65 65 6E 20 6D 6F 76 65 64 have been moved
007030: 20 74 6F 20 61 20 6E 65 77 20 70 6F 73 69 74 69 to a new positi
007040: 6F 6E 20 61 72 65 20 70 72 69 6E 74 65 64 20 69 on are printed i
007050: 6E 20 74 68 65 69 72 20 6E 65 77 0D 0A 09 70 6F n their new...po
007060: 73 69 74 69 6F 6E 20 77 69 74 68 20 61 20 62 6F sition with a bo
007070: 78 20 73 75 72 72 6F 75 6E 64 69 6E 67 20 74 68 x surrounding th
007080: 65 6D 0D 0A 0D 0A 09 59 6F 75 20 6D 61 79 20 6E em.....You may n
007090: 65 65 64 20 74 6F 20 70 61 74 63 68 20 74 68 65 eed to patch the
0070A0: 20 70 72 69 6E 74 65 72 20 63 6F 6E 74 72 6F 6C printer control
0070B0: 20 63 6F 64 65 73 20 66 6F 72 20 79 6F 75 72 20 codes for your
0070C0: 70 72 69 6E 74 65 72 0D 0A 09 54 68 65 73 65 20 printer...These
0070D0: 63 6F 6E 74 72 6F 6C 20 63 6F 64 65 73 20 61 72 control codes ar
0070E0: 65 20 61 74 20 61 62 6F 75 74 20 61 64 64 72 65 e at about addre
0070F0: 73 73 20 31 30 34 68 20 69 6E 20 74 68 65 20 63 ss 104h in the c
007100: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
007110: 4F 44 55 4C 45 20 43 6F 6D 6D 61 6E 64 3B 0D 0A ODULE Command;..
007120: 0D 0A 0D 0A 28 2A 09 43 6F 6D 6D 61 6E 64 20 6C ....(*.Command l
007130: 69 6E 65 20 70 72 6F 63 65 73 73 6F 72 2A 29 0D ine processor*).
007140: 0A 46 52 4F 4D 20 53 74 6F 72 61 67 65 20 49 4D .FROM Storage IM
007150: 50 4F 52 54 20 41 4C 4C 4F 43 41 54 45 3B 0D 0A PORT ALLOCATE;..
007160: 46 52 4F 4D 20 53 59 53 54 45 4D 20 20 49 4D 50 FROM SYSTEM IMP
007170: 4F 52 54 20 41 44 44 52 45 53 53 3B 0D 0A 56 41 ORT ADDRESS;..VA
007180: 52 09 69 2C 6A 2C 6B 3A 49 4E 54 45 47 45 52 3B R.i,j,k:INTEGER;
007190: 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 50 ..PROCEDURE GetP
0071A0: 61 72 61 6D 73 28 56 41 52 20 70 3A 41 52 52 41 arams(VAR p:ARRA
0071B0: 59 20 4F 46 20 50 61 72 61 6D 65 74 65 72 3B 56 Y OF Parameter;V
0071C0: 41 52 20 63 6F 75 6E 74 3A 49 4E 54 45 47 45 52 AR count:INTEGER
0071D0: 29 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 42 75 );..PROCEDURE Bu
0071E0: 69 6C 64 28 6C 65 6E 3A 49 4E 54 45 47 45 52 3B ild(len:INTEGER;
0071F0: 63 68 3A 43 48 41 52 3B 63 3A 50 61 72 63 6C 61 ch:CHAR;c:Parcla
007200: 73 73 29 3B 0D 0A 56 41 52 09 61 64 3A 41 44 44 ss);..VAR.ad:ADD
007210: 52 45 53 53 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A RESS;..BEGIN....
007220: 09 41 4C 4C 4F 43 41 54 45 28 61 64 2C 6C 65 6E .ALLOCATE(ad,len
007230: 2B 34 29 3B 0D 0A 09 70 5B 63 6F 75 6E 74 5D 3A +4);...p[count]:
007240: 3D 61 64 3B 0D 0A 09 57 49 54 48 20 70 5B 63 6F =ad;...WITH p[co
007250: 75 6E 74 5D 5E 20 44 4F 0D 0A 09 09 49 46 20 6A unt]^ DO....IF j
007260: 3E 3D 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C 65 >=INTEGER(CommLe
007270: 6E 67 74 68 29 54 48 45 4E 20 54 65 72 6D 69 6E ngth)THEN Termin
007280: 61 74 6F 72 3A 3D 30 64 78 0D 0A 09 09 45 4C 53 ator:=0dx....ELS
007290: 45 20 54 65 72 6D 69 6E 61 74 6F 72 3A 3D 63 68 E Terminator:=ch
0072A0: 20 45 4E 44 3B 0D 0A 09 09 4C 65 6E 67 74 68 3A END;....Length:
0072B0: 3D 6C 65 6E 3B 0D 0A 09 09 43 6C 61 73 73 3A 3D =len;....Class:=
0072C0: 63 3B 0D 0A 09 09 46 4F 52 20 6B 3A 3D 30 20 54 c;....FOR k:=0 T
0072D0: 4F 20 6C 65 6E 2D 31 20 44 4F 0D 0A 09 09 09 43 O len-1 DO.....C
0072E0: 68 61 72 73 5B 6B 5D 3A 3D 43 6F 6D 6D 54 65 78 hars[k]:=CommTex
0072F0: 74 5B 69 2B 6B 5D 3B 0D 0A 09 09 09 45 4E 44 3B t[i+k];.....END;
007300: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
007310: 06 00 01 00 02 09 52 E5 06 00 C9 02 00 00 00 02 ......R.........
007320: 06 00 C5 02 00 00 00 02 06 00 C1 02 00 00 00 02 ................
007330: 06 00 C6 02 00 00 00 02 06 00 C2 02 00 00 00 02 ................
007340: 06 00 C7 02 00 00 00 02 06 00 C3 02 00 00 00 02 ................
007350: 06 00 C8 02 00 00 00 02 06 00 C4 02 00 00 00 02 ................
007360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
007370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
007380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
007390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
007400: 09 74 68 65 20 6C 69 6E 65 73 20 61 72 65 20 75 .the lines are u
007410: 6E 69 71 75 65 20 61 6E 64 20 74 68 65 79 20 6D nique and they m
007420: 61 74 63 68 20 2D 20 73 65 74 20 75 70 20 63 72 atch - set up cr
007430: 6F 73 73 20 70 6F 69 6E 74 65 72 73 2A 29 0D 0A oss pointers*)..
007440: 0D 0A 09 09 09 09 4F 6C 64 4C 69 6E 6B 5B 6B 5D ......OldLink[k]
007450: 3A 3D 69 3B 0D 0A 09 09 09 09 4E 65 77 4C 69 6E :=i;......NewLin
007460: 6B 5B 69 5D 3A 3D 6B 3B 0D 0A 09 09 09 09 45 4E k[i]:=k;......EN
007470: 44 3B 0D 0A 09 09 09 45 4E 44 3B 20 28 2A 49 46 D;.....END; (*IF
007480: 20 63 6F 75 6E 74 3D 31 20 28 74 68 65 20 6F 75 count=1 (the ou
007490: 74 65 72 20 6F 6E 65 29 2A 29 0D 0A 09 09 45 4E ter one)*)....EN
0074A0: 44 3B 20 28 2A 46 4F 52 20 69 2A 29 0D 0A 0D 0A D; (*FOR i*)....
0074B0: 09 28 2A 09 61 74 20 74 68 69 73 20 70 6F 69 6E .(*.at this poin
0074C0: 74 2C 20 4E 65 77 4C 69 6E 6B 5B 69 5D 3D 6A 20 t, NewLink[i]=j
0074D0: 3C 3D 3E 20 4F 6C 64 4C 69 6E 65 5B 6A 5D 3D 69 <=> OldLine[j]=i
0074E0: 0D 0A 09 09 54 68 69 73 20 63 6F 6E 64 69 74 69 ....This conditi
0074F0: 6F 6E 20 69 73 20 63 65 6E 74 72 61 6C 20 74 6F on is central to
007500: 20 74 68 65 20 77 68 6F 6C 65 20 70 72 6F 67 72 the whole progr
007510: 61 6D 09 2A 29 20 09 0D 0A 0D 0A 09 28 2A 09 6E am.*) ......(*.n
007520: 6F 77 20 74 68 61 74 20 74 68 65 20 75 6E 69 71 ow that the uniq
007530: 75 65 20 6C 69 6E 65 73 20 61 72 65 20 63 72 6F ue lines are cro
007540: 73 73 2D 6C 69 6E 6B 65 64 2C 20 77 65 20 61 74 ss-linked, we at
007550: 74 65 6D 70 74 20 74 6F 20 27 67 72 6F 77 27 0D tempt to 'grow'.
007560: 0A 09 09 74 68 65 20 6C 69 6E 6B 73 20 6F 75 74 ...the links out
007570: 77 61 72 64 73 20 66 72 6F 6D 20 74 68 65 20 63 wards from the c
007580: 72 6F 73 73 2D 6C 69 6E 6B 65 64 20 6C 69 6E 65 ross-linked line
007590: 73 2A 29 0D 0A 0D 0A 09 6B 3A 3D 31 3B 0D 0A 09 s*).....k:=1;...
0075A0: 57 48 49 4C 45 20 28 6B 3C 3D 4F 6C 64 4C 65 6E WHILE (k<=OldLen
0075B0: 29 20 44 4F 0D 0A 09 09 49 46 20 4E 65 77 4C 69 ) DO....IF NewLi
0075C0: 6E 6B 5B 6B 5D 3C 3E 30 20 54 48 45 4E 20 0D 0A nk[k]<>0 THEN ..
0075D0: 0D 0A 09 09 09 28 2A 67 72 6F 77 20 62 61 63 6B .....(*grow back
0075E0: 77 61 72 64 73 2A 29 0D 0A 0D 0A 09 09 09 6A 3A wards*).......j:
0075F0: 3D 4E 65 77 4C 69 6E 6B 5B 6B 5D 2D 31 3B 0D 0A =NewLink[k]-1;..
007600: 20 77 68 65 6E 20 6F 6E 65 20 6F 66 20 74 68 65 when one of the
007610: 20 66 69 6C 65 73 20 69 73 20 6F 6E 20 61 20 72 files is on a r
007620: 65 6D 6F 74 65 20 6D 61 63 68 69 6E 65 0D 0A 09 emote machine...
007630: 73 69 6E 63 65 20 74 68 65 6E 20 6F 6E 6C 79 20 since then only
007640: 74 68 65 20 68 61 73 68 20 74 6F 74 61 6C 73 20 the hash totals
007650: 61 6E 64 20 74 68 65 20 61 6C 74 65 72 65 64 20 and the altered
007660: 6C 69 6E 65 73 20 6E 65 65 64 20 74 6F 20 62 65 lines need to be
007670: 20 74 72 61 6E 73 6D 69 74 74 65 64 2A 29 0D 0A transmitted*)..
007680: 0D 0A 54 59 50 45 09 48 61 73 68 41 72 72 61 79 ..TYPE.HashArray
007690: 3D 41 52 52 41 59 5B 31 2E 2E 4D 61 78 46 69 6C =ARRAY[1..MaxFil
0076A0: 65 53 69 7A 65 5D 20 4F 46 20 43 41 52 44 49 4E eSize] OF CARDIN
0076B0: 41 4C 3B 0D 0A 56 41 52 09 4F 6C 64 48 61 73 68 AL;..VAR.OldHash
0076C0: 2C 4E 65 77 48 61 73 68 3A 48 61 73 68 41 72 72 ,NewHash:HashArr
0076D0: 61 79 3B 0D 0A 09 4F 6C 64 4C 65 6E 2C 4E 65 77 ay;...OldLen,New
0076E0: 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 50 Len:CARDINAL;..P
0076F0: 52 4F 43 45 44 55 52 45 20 43 61 6C 63 48 61 73 ROCEDURE CalcHas
007700: 68 28 56 41 52 09 54 65 78 74 3A 41 52 52 41 59 h(VAR.Text:ARRAY
007710: 20 4F 46 20 43 48 41 52 29 3A 43 41 52 44 49 4E OF CHAR):CARDIN
007720: 41 4C 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 AL;..VAR.i,j:CAR
007730: 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 DINAL;..BEGIN...
007740: 69 3A 3D 30 3B 0D 0A 09 6A 3A 3D 30 3B 0D 0A 09 i:=0;...j:=0;...
007750: 57 48 49 4C 45 20 28 69 3C 3D 48 49 47 48 28 54 WHILE (i<=HIGH(T
007760: 65 78 74 29 29 20 41 4E 44 20 28 54 65 78 74 5B ext)) AND (Text[
007770: 69 5D 3C 3E 30 78 29 20 44 4F 0D 0A 0D 0A 09 09 i]<>0x) DO......
007780: 28 2A 09 61 64 64 20 79 6F 75 72 20 66 61 76 6F (*.add your favo
007790: 75 72 69 74 65 20 68 61 73 68 69 6E 67 20 66 75 urite hashing fu
0077A0: 6E 63 74 69 6F 6E 20 68 65 72 65 2A 29 0D 0A 0D nction here*)...
0077B0: 0A 09 09 6A 3A 3D 33 2A 6A 2B 4F 52 44 28 54 65 ...j:=3*j+ORD(Te
0077C0: 78 74 5B 69 5D 29 3B 0D 0A 09 09 49 4E 43 28 69 xt[i]);....INC(i
0077D0: 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54 );....END;...RET
0077E0: 55 52 4E 20 6A 3B 0D 0A 09 45 4E 44 20 43 61 6C URN j;...END Cal
0077F0: 63 48 61 73 68 3B 0D 0A 50 52 4F 43 45 44 55 52 cHash;..PROCEDUR
007800: 20 41 70 72 69 6C 20 31 39 37 38 2C 20 70 70 20 April 1978, pp
007810: 32 36 34 2D 32 36 38 2E 20 0D 0A 0D 0A 09 42 61 264-268. .....Ba
007820: 73 69 63 61 6C 6C 79 2C 20 74 68 65 20 74 65 63 sically, the tec
007830: 68 6E 69 71 75 65 20 63 6F 6E 73 69 73 74 73 20 hnique consists
007840: 6F 66 20 63 6F 6D 70 61 72 69 6E 67 20 74 68 65 of comparing the
007850: 20 74 77 6F 20 66 69 6C 65 73 20 74 6F 20 66 69 two files to fi
007860: 6E 64 20 61 6C 6C 0D 0A 09 74 68 65 20 75 6E 69 nd all...the uni
007870: 71 75 65 20 6C 69 6E 65 73 20 69 6E 20 65 61 63 que lines in eac
007880: 68 20 77 68 69 63 68 20 6D 61 74 63 68 20 61 20 h which match a
007890: 75 6E 69 71 75 65 20 6C 69 6E 65 20 69 6E 20 74 unique line in t
0078A0: 68 65 20 6F 74 68 65 72 2E 20 54 68 65 73 65 20 he other. These
0078B0: 0D 0A 09 6C 69 6E 65 73 20 67 69 76 65 20 66 69 ...lines give fi
0078C0: 78 65 64 20 70 6F 69 6E 74 73 20 66 72 6F 6D 20 xed points from
0078D0: 77 68 69 63 68 20 6D 61 74 63 68 69 6E 67 20 72 which matching r
0078E0: 65 67 69 6F 6E 73 20 63 61 6E 20 62 65 20 67 72 egions can be gr
0078F0: 6F 77 6E 20 6F 75 74 77 61 72 64 73 2E 0D 0A 09 own outwards....
007900: 4F 6E 63 65 20 61 6C 6C 20 74 68 65 20 72 65 67 Once all the reg
007910: 69 6F 6E 73 20 73 6F 20 70 72 6F 64 75 63 65 64 ions so produced
007920: 20 68 61 76 65 20 62 65 65 6E 20 63 72 65 61 74 have been creat
007930: 65 64 2C 20 61 6E 79 20 6C 69 6E 65 20 69 6E 20 ed, any line in
007940: 74 68 65 20 6F 6C 64 20 66 69 6C 65 20 0D 0A 09 the old file ...
007950: 77 68 69 63 68 20 69 73 20 6E 6F 74 20 61 74 74 which is not att
007960: 61 63 68 65 64 20 74 6F 20 61 20 6C 69 6E 65 20 ached to a line
007970: 69 6E 20 74 68 65 20 6E 65 77 20 66 69 6C 65 20 in the new file
007980: 69 73 20 61 20 64 65 6C 65 74 69 6F 6E 2E 20 41 is a deletion. A
007990: 6E 79 20 6C 69 6E 65 20 69 6E 20 74 68 65 20 0D ny line in the .
0079A0: 0A 09 6E 65 77 20 66 69 6C 65 20 77 68 69 63 68 ..new file which
0079B0: 20 69 73 20 6E 6F 74 20 61 74 74 61 63 68 65 64 is not attached
0079C0: 20 74 6F 20 61 20 6C 69 6E 65 20 69 6E 20 74 68 to a line in th
0079D0: 65 20 6F 6C 64 20 66 69 6C 65 20 69 73 20 61 6E e old file is an
0079E0: 20 69 6E 73 65 72 74 69 6F 6E 2C 20 77 68 69 6C insertion, whil
0079F0: 65 0D 0A 09 61 20 62 6C 6F 63 6B 20 6D 6F 76 65 e...a block move
007A00: 45 20 52 65 61 64 53 74 72 65 61 6D 28 56 41 52 E ReadStream(VAR
007A10: 20 73 3A 53 54 52 45 41 4D 3B 56 41 52 20 48 61 s:STREAM;VAR Ha
007A20: 73 68 3A 48 61 73 68 41 72 72 61 79 29 3A 43 41 sh:HashArray):CA
007A30: 52 44 49 4E 41 4C 3B 0D 0A 28 2A 0D 0A 09 52 65 RDINAL;..(*...Re
007A40: 61 64 20 69 6E 20 61 20 66 69 6C 65 20 61 6E 64 ad in a file and
007A50: 20 63 61 6C 63 75 6C 61 74 65 20 74 68 65 20 68 calculate the h
007A60: 61 73 68 20 74 6F 74 61 6C 73 20 66 6F 72 20 74 ash totals for t
007A70: 68 65 20 66 69 6C 65 0D 0A 2A 29 0D 0A 56 41 52 he file..*)..VAR
007A80: 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 4C .i:CARDINAL;...L
007A90: 69 6E 65 3A 41 52 52 41 59 5B 31 2E 2E 38 30 5D ine:ARRAY[1..80]
007AA0: 20 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E OF CHAR;..BEGIN
007AB0: 0D 0A 09 53 77 69 74 63 68 49 6E 53 74 72 65 61 ...SwitchInStrea
007AC0: 6D 28 73 29 3B 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 m(s);...i:=0;...
007AD0: 0D 0A 09 57 48 49 4C 45 20 28 69 3C 48 49 47 48 ...WHILE (i<HIGH
007AE0: 28 48 61 73 68 29 29 20 41 4E 44 20 28 4E 4F 54 (Hash)) AND (NOT
007AF0: 20 45 4F 53 28 73 29 29 20 44 4F 0D 0A 09 09 52 EOS(s)) DO....R
007B00: 65 61 64 4C 69 6E 65 28 4C 69 6E 65 29 3B 0D 0A eadLine(Line);..
007B10: 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 48 61 73 ..INC(i);....Has
007B20: 68 5B 69 5D 3A 3D 43 61 6C 63 48 61 73 68 28 4C h[i]:=CalcHash(L
007B30: 69 6E 65 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 ine);....END;...
007B40: 52 65 73 65 74 28 73 29 3B 0D 0A 09 50 6F 70 49 Reset(s);...PopI
007B50: 6E 53 74 72 65 61 6D 3B 0D 0A 09 52 45 54 55 52 nStream;...RETUR
007B60: 4E 20 69 3B 0D 0A 09 45 4E 44 20 52 65 61 64 53 N i;...END ReadS
007B70: 74 72 65 61 6D 3B 0D 0A 0D 0A 09 20 20 20 0D 0A tream;..... ..
007B80: 50 52 4F 43 45 44 55 52 45 20 55 73 61 67 65 3B PROCEDURE Usage;
007B90: 0D 0A 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 53 ..BEGIN...WriteS
007BA0: 74 72 69 6E 67 28 27 55 73 61 67 65 20 69 73 3A tring('Usage is:
007BB0: 20 20 20 43 4F 4D 50 41 52 45 20 6F 6C 64 20 66 COMPARE old f
007BC0: 69 6C 65 2C 6E 65 77 20 66 69 6C 65 27 29 3B 57 ile,new file');W
007BD0: 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 riteLn;...WriteS
007BE0: 74 72 69 6E 67 28 27 20 20 20 20 20 20 6F 72 20 tring(' or
007BF0: 20 20 20 43 4F 4D 50 41 52 45 20 6F 6C 64 20 66 COMPARE old f
007C00: 20 69 73 20 65 6E 63 6F 75 6E 74 65 72 65 64 20 is encountered
007C10: 77 68 65 6E 20 74 68 65 20 6C 69 6E 65 73 20 70 when the lines p
007C20: 6F 69 6E 74 65 64 20 74 6F 20 69 6E 20 74 68 65 ointed to in the
007C30: 20 6F 6C 64 20 66 69 6C 65 20 61 72 65 20 66 75 old file are fu
007C40: 72 74 68 65 72 0D 0A 09 64 6F 77 6E 20 74 68 65 rther...down the
007C50: 20 66 69 6C 65 20 74 68 61 6E 20 73 6F 6D 65 20 file than some
007C60: 6F 74 68 65 72 20 6C 69 6E 65 73 20 77 68 69 63 other lines whic
007C70: 68 20 68 61 76 65 20 6E 6F 74 20 79 65 74 20 62 h have not yet b
007C80: 65 65 6E 20 70 72 6F 63 65 73 73 65 64 20 61 6E een processed an
007C90: 64 20 77 68 69 63 68 0D 0A 09 61 72 65 20 61 73 d which...are as
007CA0: 73 6F 63 69 61 74 65 64 20 77 69 74 68 20 6C 69 sociated with li
007CB0: 6E 65 73 20 69 6E 20 74 68 65 20 6E 65 77 20 66 nes in the new f
007CC0: 69 6C 65 2E 0D 0A 0D 0A 09 2A 29 0D 0A 0D 0A 46 ile......*)....F
007CD0: 52 4F 4D 20 09 53 59 53 54 45 4D 20 09 09 49 4D ROM .SYSTEM ..IM
007CE0: 50 4F 52 54 20 41 44 44 52 45 53 53 2C 41 44 52 PORT ADDRESS,ADR
007CF0: 2C 54 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 09 43 ,TSIZE;..FROM .C
007D00: 6F 6D 6D 61 6E 64 20 09 49 4D 50 4F 52 54 20 50 ommand .IMPORT P
007D10: 61 72 61 6D 65 74 65 72 2C 50 61 72 63 6C 61 73 arameter,Parclas
007D20: 73 2C 47 65 74 50 61 72 61 6D 73 3B 0D 0A 46 52 s,GetParams;..FR
007D30: 4F 4D 20 09 46 69 6C 65 73 20 09 09 49 4D 50 4F OM .Files ..IMPO
007D40: 52 54 20 46 69 6C 65 4E 61 6D 65 2C 46 49 4C 45 RT FileName,FILE
007D50: 2C 4C 6F 6F 6B 75 70 2C 43 72 65 61 74 65 3B 0D ,Lookup,Create;.
007D60: 0A 46 52 4F 4D 20 09 53 74 72 65 61 6D 73 20 09 .FROM .Streams .
007D70: 49 4D 50 4F 52 54 20 43 6F 6E 6E 65 63 74 2C 44 IMPORT Connect,D
007D80: 69 73 63 6F 6E 6E 65 63 74 2C 53 54 52 45 41 4D isconnect,STREAM
007D90: 2C 69 6E 70 75 74 2C 6F 75 74 70 75 74 2C 57 72 ,input,output,Wr
007DA0: 69 74 65 43 68 61 72 2C 0D 0A 09 09 09 09 52 65 iteChar,......Re
007DB0: 61 64 43 68 61 72 2C 45 4F 53 2C 57 72 69 74 65 adChar,EOS,Write
007DC0: 52 65 63 2C 52 65 73 65 74 3B 0D 0A 46 52 4F 4D Rec,Reset;..FROM
007DD0: 20 09 54 65 72 6D 69 6E 61 6C 09 49 4D 50 4F 52 .Terminal.IMPOR
007DE0: 54 20 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72 T WriteString,Wr
007DF0: 69 74 65 4C 6E 3B 0D 0A 46 52 4F 4D 20 09 53 6F iteLn;..FROM .So
007E00: 69 6C 65 2C 6E 65 77 20 66 69 6C 65 2C 6F 75 74 ile,new file,out
007E10: 70 75 74 20 66 69 6C 65 27 29 3B 0D 0A 09 57 72 put file');...Wr
007E20: 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 4C 6E iteLn;...WriteLn
007E30: 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 ;...WriteString(
007E40: 27 20 66 6F 72 20 65 78 61 6D 70 6C 65 3A 20 20 ' for example:
007E50: 43 4F 4D 50 41 52 45 20 4D 45 2E 42 41 4B 20 4D COMPARE ME.BAK M
007E60: 45 2E 4D 4F 44 27 29 3B 57 72 69 74 65 4C 6E 3B E.MOD');WriteLn;
007E70: 0D 0A 09 48 41 4C 54 0D 0A 09 45 4E 44 20 55 73 ...HALT...END Us
007E80: 61 67 65 3B 0D 0A 0D 0A 56 41 52 09 4F 6C 64 4C age;....VAR.OldL
007E90: 69 6E 6B 2C 4E 65 77 4C 69 6E 6B 3A 48 61 73 68 ink,NewLink:Hash
007EA0: 41 72 72 61 79 3B 0D 0A 0D 0A 09 28 2A 09 4F 6C Array;.....(*.Ol
007EB0: 64 4C 69 6E 6B 20 63 6F 6E 74 61 69 6E 73 20 74 dLink contains t
007EC0: 68 65 20 6E 75 6D 62 65 72 20 6F 66 20 61 20 6C he number of a l
007ED0: 69 6E 65 20 69 6E 20 74 68 65 20 6E 65 77 20 66 ine in the new f
007EE0: 69 6C 65 20 77 68 69 63 68 20 69 73 0D 0A 09 09 ile which is....
007EF0: 6C 69 6E 6B 65 64 20 74 6F 20 61 20 67 69 76 65 linked to a give
007F00: 6E 20 6C 69 6E 65 20 69 6E 20 74 68 65 20 6F 6C n line in the ol
007F10: 64 20 66 69 6C 65 2C 20 61 6E 64 20 76 69 63 65 d file, and vice
007F20: 2D 76 65 72 73 61 0D 0A 09 09 41 6E 20 65 6E 74 -versa....An ent
007F30: 72 79 20 63 6F 6E 74 61 69 6E 73 20 7A 65 72 6F ry contains zero
007F40: 20 69 66 20 6E 6F 20 6C 69 6E 6B 20 68 61 73 20 if no link has
007F50: 62 65 65 6E 20 6D 61 64 65 2A 29 0D 0A 0D 0A 0D been made*).....
007F60: 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 6E ...PROCEDURE Gen
007F70: 65 72 61 74 65 4C 69 6E 6B 73 3B 0D 0A 56 41 52 erateLinks;..VAR
007F80: 09 69 2C 6A 2C 6B 3A 43 41 52 44 49 4E 41 4C 3B .i,j,k:CARDINAL;
007F90: 0D 0A 09 63 6F 75 6E 74 3A 43 41 52 44 49 4E 41 ...count:CARDINA
007FA0: 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 46 4F 52 20 L;..BEGIN...FOR
007FB0: 69 3A 3D 31 20 54 4F 20 48 49 47 48 28 4F 6C 64 i:=1 TO HIGH(Old
007FC0: 4C 69 6E 6B 29 20 44 4F 0D 0A 09 09 4F 6C 64 4C Link) DO....OldL
007FD0: 69 6E 6B 5B 69 5D 3A 3D 30 3B 0D 0A 09 09 4E 65 ink[i]:=0;....Ne
007FE0: 77 4C 69 6E 6B 5B 69 5D 3A 3D 30 3B 0D 0A 09 09 wLink[i]:=0;....
007FF0: 45 4E 44 3B 0D 0A 0D 0A 09 28 2A 09 6C 6F 6F 6B END;.....(*.look
008000: 72 74 20 09 09 49 4D 50 4F 52 54 20 53 6F 72 74 rt ..IMPORT Sort
008010: 52 65 63 6F 72 64 73 3B 0D 0A 46 52 4F 4D 20 09 Records;..FROM .
008020: 49 6E 4F 75 74 20 09 09 49 4D 50 4F 52 54 20 57 InOut ..IMPORT W
008030: 72 69 74 65 43 61 72 64 2C 53 77 69 74 63 68 49 riteCard,SwitchI
008040: 6E 53 74 72 65 61 6D 2C 53 77 69 74 63 68 4F 75 nStream,SwitchOu
008050: 74 53 74 72 65 61 6D 2C 0D 0A 09 09 09 09 50 6F tStream,......Po
008060: 70 49 6E 53 74 72 65 61 6D 2C 50 6F 70 4F 75 74 pInStream,PopOut
008070: 53 74 72 65 61 6D 2C 52 65 61 64 4C 69 6E 65 3B Stream,ReadLine;
008080: 0D 0A 43 4F 4E 53 54 09 4D 61 78 46 69 6C 65 53 ..CONST.MaxFileS
008090: 69 7A 65 3D 32 30 30 30 3B 09 28 2A 6C 69 6E 65 ize=2000;.(*line
0080A0: 73 20 69 6E 20 66 69 6C 65 20 6D 61 78 2A 29 0D s in file max*).
0080B0: 0A 09 46 46 3D 30 63 78 3B 0D 0A 09 54 41 42 3D ..FF=0cx;...TAB=
0080C0: 30 39 78 3B 0D 0A 09 4C 46 3D 30 61 78 3B 0D 0A 09x;...LF=0ax;..
0080D0: 09 43 52 3D 30 64 78 3B 0D 0A 54 59 50 45 20 09 .CR=0dx;..TYPE .
0080E0: 50 46 69 6C 65 4E 61 6D 65 3D 50 4F 49 4E 54 45 PFileName=POINTE
0080F0: 52 20 54 4F 20 46 69 6C 65 4E 61 6D 65 3B 0D 0A R TO FileName;..
008100: 09 50 72 69 6E 74 43 6F 6E 74 72 6F 6C 3D 41 52 .PrintControl=AR
008110: 52 41 59 5B 30 2E 2E 37 5D 20 4F 46 20 43 48 41 RAY[0..7] OF CHA
008120: 52 3B 0D 0A 56 41 52 09 0D 0A 09 28 2A 09 50 72 R;..VAR....(*.Pr
008130: 69 6E 74 65 72 20 43 6F 6E 74 72 6F 6C 20 43 6F inter Control Co
008140: 64 65 73 20 61 20 7A 65 72 6F 20 62 79 74 65 20 des a zero byte
008150: 74 65 72 6D 69 6E 61 74 65 73 09 2A 29 0D 0A 0D terminates.*)...
008160: 0A 09 49 74 61 6C 69 63 73 4F 6E 09 3A 50 72 69 ..ItalicsOn.:Pri
008170: 6E 74 43 6F 6E 74 72 6F 6C 09 3D 5B 31 62 78 2C ntControl.=[1bx,
008180: 27 34 27 2C 30 5D 3B 0D 0A 09 49 74 61 6C 69 63 '4',0];...Italic
008190: 73 4F 66 66 09 3A 50 72 69 6E 74 43 6F 6E 74 72 sOff.:PrintContr
0081A0: 6F 6C 09 3D 5B 31 62 78 2C 27 35 27 2C 30 5D 3B ol.=[1bx,'5',0];
0081B0: 0D 0A 09 42 6F 6C 64 4F 6E 09 09 3A 50 72 69 6E ...BoldOn..:Prin
0081C0: 74 43 6F 6E 74 72 6F 6C 09 3D 5B 31 62 78 2C 27 tControl.=[1bx,'
0081D0: 45 27 2C 30 5D 3B 0D 0A 09 42 6F 6C 64 4F 66 66 E',0];...BoldOff
0081E0: 09 09 3A 50 72 69 6E 74 43 6F 6E 74 72 6F 6C 09 ..:PrintControl.
0081F0: 3D 5B 31 62 78 2C 27 46 27 2C 30 5D 3B 0D 0A 0D =[1bx,'F',0];...
008200: 20 66 6F 72 20 61 6C 6C 20 6F 6C 64 20 6C 69 6E for all old lin
008210: 65 73 20 77 68 69 63 68 20 6D 61 74 63 68 20 65 es which match e
008220: 78 61 63 74 6C 79 20 6F 6E 65 20 6E 65 77 20 6C xactly one new l
008230: 69 6E 65 2A 29 0D 0A 0D 0A 09 46 4F 52 20 69 3A ine*).....FOR i:
008240: 3D 30 20 54 4F 20 4F 6C 64 4C 65 6E 20 44 4F 0D =0 TO OldLen DO.
008250: 0A 09 09 63 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09 ...count:=0;....
008260: 6A 3A 3D 31 3B 0D 0A 09 09 57 48 49 4C 45 20 28 j:=1;....WHILE (
008270: 63 6F 75 6E 74 3C 32 29 20 41 4E 44 20 28 6A 3C count<2) AND (j<
008280: 3D 4E 65 77 4C 65 6E 29 20 44 4F 0D 0A 09 09 09 =NewLen) DO.....
008290: 49 46 20 4F 6C 64 48 61 73 68 5B 69 5D 3D 4E 65 IF OldHash[i]=Ne
0082A0: 77 48 61 73 68 5B 6A 5D 20 54 48 45 4E 20 0D 0A wHash[j] THEN ..
0082B0: 09 09 09 09 49 4E 43 28 63 6F 75 6E 74 29 3B 20 ....INC(count);
0082C0: 0D 0A 09 09 09 09 6B 3A 3D 6A 3B 0D 0A 09 09 09 ......k:=j;.....
0082D0: 09 45 4E 44 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 .END;.....INC(j)
0082E0: 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 ;.....END;....IF
0082F0: 20 63 6F 75 6E 74 3D 31 20 54 48 45 4E 0D 0A 0D count=1 THEN...
008300: 0A 09 09 28 2A 70 6F 73 73 69 62 6C 65 20 6D 61 ...(*possible ma
008310: 74 63 68 20 2D 20 63 68 65 63 6B 20 74 68 61 74 tch - check that
008320: 20 74 68 65 20 6E 65 77 20 6C 69 6E 65 20 6F 6E the new line on
008330: 6C 79 20 6D 61 74 63 68 65 73 20 74 68 69 73 20 ly matches this
008340: 6F 6C 64 20 6C 69 6E 65 2A 29 0D 0A 0D 0A 09 09 old line*)......
008350: 09 63 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09 09 6A .count:=0;.....j
008360: 3A 3D 31 3B 0D 0A 09 09 09 57 48 49 4C 45 20 28 :=1;.....WHILE (
008370: 63 6F 75 6E 74 3C 32 29 20 41 4E 44 20 28 6A 3C count<2) AND (j<
008380: 3D 4F 6C 64 4C 65 6E 29 20 44 4F 0D 0A 09 09 09 =OldLen) DO.....
008390: 09 49 46 20 4F 6C 64 48 61 73 68 5B 6A 5D 3D 4E .IF OldHash[j]=N
0083A0: 65 77 48 61 73 68 5B 6B 5D 20 54 48 45 4E 20 0D ewHash[k] THEN .
0083B0: 0A 09 09 09 09 09 49 4E 43 28 63 6F 75 6E 74 29 ......INC(count)
0083C0: 3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 ;.......END;....
0083D0: 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 45 ..INC(j);......E
0083E0: 4E 44 3B 0D 0A 09 09 09 49 46 20 63 6F 75 6E 74 ND;.....IF count
0083F0: 3D 31 20 54 48 45 4E 0D 0A 0D 0A 09 09 09 28 2A =1 THEN.......(*
008400: 0A 09 4C 69 73 74 3A 53 54 52 45 41 4D 3B 0D 0A ..List:STREAM;..
008410: 09 4C 69 73 74 46 3A 46 49 4C 45 3B 0D 0A 09 72 .ListF:FILE;...r
008420: 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 eply:INTEGER;...
008430: 69 2C 6A 3A 49 4E 54 45 47 45 52 3B 0D 0A 0D 0A i,j:INTEGER;....
008440: 09 4F 6C 64 73 3A 53 54 52 45 41 4D 3B 0D 0A 09 .Olds:STREAM;...
008450: 4F 6C 64 66 3A 46 49 4C 45 3B 0D 0A 09 0D 0A 09 Oldf:FILE;......
008460: 4E 65 77 73 3A 53 54 52 45 41 4D 3B 0D 0A 09 4E News:STREAM;...N
008470: 65 77 66 3A 46 49 4C 45 3B 0D 0A 0D 0A 09 63 68 ewf:FILE;.....ch
008480: 3A 43 48 41 52 3B 0D 0A 09 43 68 61 72 50 6F 73 :CHAR;...CharPos
008490: 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 70 6F 73 :CARDINAL;.(*pos
0084A0: 69 74 69 6F 6E 20 69 6E 20 6C 69 6E 65 2A 29 0D ition in line*).
0084B0: 0A 09 0D 0A 0D 0A 28 2A 09 46 6F 72 20 65 61 63 ......(*.For eac
0084C0: 68 20 66 69 6C 65 2C 20 77 65 20 68 61 76 65 20 h file, we have
0084D0: 61 6E 20 61 72 72 61 79 20 6F 66 20 68 61 73 68 an array of hash
0084E0: 20 74 6F 74 61 6C 73 20 66 6F 72 20 74 68 65 20 totals for the
0084F0: 6C 69 6E 65 73 20 6F 66 20 74 68 65 20 66 69 6C lines of the fil
008500: 65 0D 0A 09 55 73 69 6E 67 20 68 61 73 68 20 74 e...Using hash t
008510: 6F 74 61 6C 73 20 69 6E 73 74 65 61 64 20 6F 66 otals instead of
008520: 20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 6C 69 the original li
008530: 6E 65 73 20 63 61 75 73 65 73 20 61 20 73 6C 69 nes causes a sli
008540: 67 68 74 20 63 68 61 6E 63 65 0D 0A 09 74 68 61 ght chance...tha
008550: 74 20 6C 69 6E 65 73 20 77 69 6C 6C 20 6D 61 74 t lines will mat
008560: 63 68 20 77 68 65 6E 20 74 68 65 79 20 73 68 6F ch when they sho
008570: 75 6C 64 20 6E 6F 74 2C 20 62 75 74 20 61 6C 6C uld not, but all
008580: 6F 77 73 20 6C 61 72 67 65 72 20 66 69 6C 65 73 ows larger files
008590: 0D 0A 09 74 6F 20 62 65 20 63 6F 6D 70 61 72 65 ...to be compare
0085A0: 64 20 61 6E 64 20 61 6C 73 6F 20 6D 61 6B 65 73 d and also makes
0085B0: 20 69 74 20 70 6F 73 73 69 62 6C 65 20 74 6F 20 it possible to
0085C0: 65 78 74 65 6E 64 20 74 68 65 20 70 72 6F 67 72 extend the progr
0085D0: 61 6D 20 69 6E 20 74 68 65 20 66 75 74 75 72 65 am in the future
0085E0: 0D 0A 09 74 6F 20 77 6F 72 6B 20 77 69 74 68 20 ...to work with
0085F0: 72 65 61 73 6F 6E 61 62 6C 65 20 73 70 65 65 64 reasonable speed
008600: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
008610: 07 00 01 00 02 09 52 E5 07 00 C9 02 00 00 00 02 ......R.........
008620: 07 00 C5 02 00 00 00 02 07 00 C1 02 00 00 00 02 ................
008630: 07 00 C6 02 00 00 00 02 07 00 C2 02 00 00 00 02 ................
008640: 07 00 C7 02 00 00 00 02 07 00 C3 02 00 00 00 02 ................
008650: 07 00 C8 02 00 00 00 02 07 00 C4 02 00 00 00 02 ................
008660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
008670: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
008680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
008690: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
008700: 20 62 75 74 0D 0A 09 09 20 20 65 61 63 68 20 70 but.... each p
008710: 6F 69 6E 74 65 72 20 70 6F 69 6E 74 73 20 73 6F ointer points so
008720: 6D 65 77 68 65 72 65 0D 0A 0D 0A 09 09 20 20 49 mewhere...... I
008730: 66 20 74 68 65 20 74 65 78 74 20 69 6E 20 74 68 f the text in th
008740: 65 20 6E 65 77 20 66 69 6C 65 20 70 6F 69 6E 74 e new file point
008750: 65 64 20 74 6F 20 62 79 20 74 68 65 20 6F 6C 64 ed to by the old
008760: 20 66 69 6C 65 20 68 61 73 0D 0A 09 09 20 20 62 file has.... b
008770: 65 65 6E 20 70 61 73 73 65 64 2C 20 69 74 20 68 een passed, it h
008780: 61 73 20 61 6C 72 65 61 64 79 20 62 65 65 6E 20 as already been
008790: 77 72 69 74 74 65 6E 20 73 6F 20 77 65 20 69 67 written so we ig
0087A0: 6E 6F 72 65 20 74 68 65 0D 0A 09 09 20 20 6F 6C nore the.... ol
0087B0: 64 20 6C 69 6E 65 20 61 6E 64 20 6C 6F 6F 6B 20 d line and look
0087C0: 66 6F 72 20 73 6F 6D 65 74 68 69 6E 67 20 6D 6F for something mo
0087D0: 72 65 20 69 6E 74 65 72 65 73 74 69 6E 67 20 28 re interesting (
0087E0: 65 2E 67 2E 20 0D 0A 09 09 20 20 61 20 53 63 6F e.g. .... a Sco
0087F0: 74 73 6D 61 6E 20 77 69 6E 6E 69 6E 67 20 57 69 tsman winning Wi
008800: 6D 62 6C 65 64 6F 6E 29 0D 0A 0D 0A 09 09 20 20 mbledon)......
008810: 42 65 63 61 75 73 65 20 6F 66 20 74 68 65 20 63 Because of the c
008820: 65 6E 74 72 61 6C 20 70 72 65 64 69 63 61 74 65 entral predicate
008830: 2C 20 77 65 20 6B 6E 6F 77 20 74 68 61 74 0D 0A , we know that..
008840: 0D 0A 09 09 20 20 4E 65 77 4C 69 6E 6B 5B 4F 6C .... NewLink[Ol
008850: 64 4C 69 6E 6B 5B 6E 65 77 69 6E 64 65 78 5D 5D dLink[newindex]]
008860: 3D 6E 65 77 69 6E 64 65 78 0D 0A 09 09 20 61 6E =newindex.... an
008870: 64 0D 0A 09 09 20 20 4F 6C 64 4C 69 6E 6B 5B 4E d.... OldLink[N
008880: 65 77 4C 69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 5D ewLink[oldindex]
008890: 5D 3D 6F 6C 64 69 6E 64 65 78 0D 0A 0D 0A 2A 29 ]=oldindex....*)
0088A0: 0D 0A 0D 0A 09 09 45 4C 53 49 46 20 4E 65 77 4C ......ELSIF NewL
0088B0: 69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 5D 3C 6E 65 ink[oldindex]<ne
0088C0: 77 69 6E 64 65 78 20 54 48 45 4E 0D 0A 09 09 09 windex THEN.....
0088D0: 53 6B 69 70 4F 6C 64 3B 0D 0A 09 09 09 49 4E 43 SkipOld;.....INC
0088E0: 28 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 0D 0A 28 (oldindex);....(
0088F0: 2A 20 09 09 20 20 20 73 6F 20 4E 65 77 4C 69 6E * .. so NewLin
008900: 78 5D 2C 36 29 3B 0D 0A 09 57 72 69 74 65 43 61 x],6);...WriteCa
008910: 72 64 28 6E 65 77 69 6E 64 65 78 2C 36 29 3B 57 rd(newindex,6);W
008920: 72 69 74 65 43 61 72 64 28 4F 6C 64 4C 69 6E 6B riteCard(OldLink
008930: 5B 6E 65 77 69 6E 64 65 78 5D 2C 36 29 3B 0D 0A [newindex],6);..
008940: 09 50 6F 70 4F 75 74 53 74 72 65 61 6D 3B 0D 0A .PopOutStream;..
008950: 2A 29 0D 0A 09 57 72 69 74 65 43 68 61 72 28 4C *)...WriteChar(L
008960: 69 73 74 2C 30 64 78 29 3B 0D 0A 09 57 72 69 74 ist,0dx);...Writ
008970: 65 43 68 61 72 28 4C 69 73 74 2C 30 61 78 29 3B eChar(List,0ax);
008980: 0D 0A 09 45 4E 44 20 57 72 69 74 65 45 6F 6C 3B ...END WriteEol;
008990: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65 ....PROCEDURE De
0089A0: 6C 65 74 65 64 3B 0D 0A 0D 0A 28 2A 09 50 72 69 leted;....(*.Pri
0089B0: 6E 74 20 6F 75 74 20 61 20 6C 69 6E 65 20 66 72 nt out a line fr
0089C0: 6F 6D 20 74 68 65 20 6F 6C 64 20 66 69 6C 65 2A om the old file*
0089D0: 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09 47 65 74 )....BEGIN...Get
0089E0: 4C 69 6E 65 28 4F 6C 64 73 2C 6F 6C 64 6C 69 6E Line(Olds,oldlin
0089F0: 65 29 3B 0D 0A 09 50 72 69 6E 74 28 49 74 61 6C e);...Print(Ital
008A00: 69 63 73 4F 6E 29 3B 0D 0A 09 50 72 69 6E 74 28 icsOn);...Print(
008A10: 6F 6C 64 6C 69 6E 65 29 3B 0D 0A 09 50 72 69 6E oldline);...Prin
008A20: 74 28 49 74 61 6C 69 63 73 4F 66 66 29 3B 0D 0A t(ItalicsOff);..
008A30: 09 57 72 69 74 65 45 6F 6C 3B 0D 0A 09 45 4E 44 .WriteEol;...END
008A40: 20 44 65 6C 65 74 65 64 3B 0D 0A 0D 0A 50 52 4F Deleted;....PRO
008A50: 43 45 44 55 52 45 20 53 6B 69 70 4F 6C 64 3B 0D CEDURE SkipOld;.
008A60: 0A 42 45 47 49 4E 0D 0A 09 47 65 74 4C 69 6E 65 .BEGIN...GetLine
008A70: 28 4F 6C 64 73 2C 6F 6C 64 6C 69 6E 65 29 3B 0D (Olds,oldline);.
008A80: 0A 09 45 4E 44 20 53 6B 69 70 4F 6C 64 3B 0D 0A ..END SkipOld;..
008A90: 0D 0A 50 52 4F 43 45 44 55 52 45 20 49 6E 73 65 ..PROCEDURE Inse
008AA0: 72 74 65 64 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 rted;..BEGIN...G
008AB0: 65 74 4C 69 6E 65 28 4E 65 77 73 2C 6E 65 77 6C etLine(News,newl
008AC0: 69 6E 65 29 3B 0D 0A 09 50 72 69 6E 74 28 42 6F ine);...Print(Bo
008AD0: 6C 64 4F 6E 29 3B 0D 0A 09 50 72 69 6E 74 28 6E ldOn);...Print(n
008AE0: 65 77 6C 69 6E 65 29 3B 0D 0A 09 50 72 69 6E 74 ewline);...Print
008AF0: 28 42 6F 6C 64 4F 66 66 29 3B 0D 0A 09 57 72 69 (BoldOff);...Wri
008B00: 09 09 09 69 3A 3D 6B 2D 31 3B 0D 0A 09 09 09 57 ...i:=k-1;.....W
008B10: 48 49 4C 45 20 28 6A 3E 30 29 20 41 4E 44 20 28 HILE (j>0) AND (
008B20: 69 3E 30 29 20 41 4E 44 20 28 4F 6C 64 4C 69 6E i>0) AND (OldLin
008B30: 6B 5B 6A 2B 31 5D 3D 69 2B 31 29 0D 0A 09 09 09 k[j+1]=i+1).....
008B40: 09 41 4E 44 20 28 4E 65 77 48 61 73 68 5B 6A 5D .AND (NewHash[j]
008B50: 3D 4F 6C 64 48 61 73 68 5B 69 5D 29 20 0D 0A 09 =OldHash[i]) ...
008B60: 09 09 09 41 4E 44 20 28 4F 6C 64 4C 69 6E 6B 5B ...AND (OldLink[
008B70: 6A 5D 3D 30 29 20 41 4E 44 20 28 4E 65 77 4C 69 j]=0) AND (NewLi
008B80: 6E 6B 5B 69 5D 3D 30 29 20 44 4F 0D 0A 09 09 09 nk[i]=0) DO.....
008B90: 09 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3A 3D 69 3B 0D .OldLink[j]:=i;.
008BA0: 0A 09 09 09 09 4E 65 77 4C 69 6E 6B 5B 69 5D 3A .....NewLink[i]:
008BB0: 3D 6A 3B 0D 0A 0D 0A 09 09 09 09 28 2A 20 6E 6F =j;........(* no
008BC0: 74 65 20 63 65 6E 74 72 61 6C 20 70 72 65 64 69 te central predi
008BD0: 63 61 74 65 20 73 74 69 6C 6C 20 73 61 74 69 73 cate still satis
008BE0: 66 69 65 64 2A 29 0D 0A 0D 0A 09 09 09 09 44 45 fied*)........DE
008BF0: 43 28 69 29 3B 0D 0A 09 09 09 09 44 45 43 28 6A C(i);......DEC(j
008C00: 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 );......END;....
008C10: 09 6A 3A 3D 4E 65 77 4C 69 6E 6B 5B 6B 5D 2B 31 .j:=NewLink[k]+1
008C20: 3B 0D 0A 09 09 09 69 3A 3D 6B 2B 31 3B 0D 0A 0D ;.....i:=k+1;...
008C30: 0A 09 09 09 28 2A 67 72 6F 77 20 66 6F 72 77 61 ....(*grow forwa
008C40: 72 64 73 20 2D 20 28 73 6C 69 67 68 74 20 6F 70 rds - (slight op
008C50: 74 69 6D 69 73 61 74 69 6F 6E 29 20 74 68 65 72 timisation) ther
008C60: 65 20 69 73 20 6E 6F 20 6E 65 65 64 20 74 6F 0D e is no need to.
008C70: 0A 09 09 09 20 20 63 68 65 63 6B 20 66 6F 72 20 .... check for
008C80: 6E 6F 6E 7A 65 72 6F 20 6C 69 6E 6B 73 20 6F 6E nonzero links on
008C90: 20 74 68 65 20 66 6F 72 77 61 72 64 20 70 61 73 the forward pas
008CA0: 73 20 73 69 6E 63 65 20 6E 6F 6E 2D 7A 65 72 6F s since non-zero
008CB0: 20 6C 69 6E 6B 73 0D 0A 09 09 09 20 20 3D 3E 4C links..... =>L
008CC0: 69 6E 65 73 20 6D 61 74 63 68 20 61 6E 64 20 61 ines match and a
008CD0: 72 65 20 75 6E 69 71 75 65 2C 20 61 6E 64 20 74 re unique, and t
008CE0: 68 65 20 62 61 63 6B 20 70 61 73 73 20 77 6F 75 he back pass wou
008CF0: 6C 64 20 62 65 20 65 6D 70 74 79 2A 29 0D 0A 0D ld be empty*)...
008D00: 74 65 45 6F 6C 3B 0D 0A 09 45 4E 44 20 49 6E 73 teEol;...END Ins
008D10: 65 72 74 65 64 3B 0D 0A 50 52 4F 43 45 44 55 52 erted;..PROCEDUR
008D20: 45 20 4E 6F 43 68 61 6E 67 65 3B 0D 0A 42 45 47 E NoChange;..BEG
008D30: 49 4E 0D 0A 09 47 65 74 4C 69 6E 65 28 4E 65 77 IN...GetLine(New
008D40: 73 2C 6E 65 77 6C 69 6E 65 29 3B 0D 0A 09 47 65 s,newline);...Ge
008D50: 74 4C 69 6E 65 28 4F 6C 64 73 2C 6F 6C 64 6C 69 tLine(Olds,oldli
008D60: 6E 65 29 3B 09 0D 0A 09 50 72 69 6E 74 28 6E 65 ne);....Print(ne
008D70: 77 6C 69 6E 65 29 3B 0D 0A 09 57 72 69 74 65 45 wline);...WriteE
008D80: 6F 6C 0D 0A 09 45 4E 44 20 4E 6F 43 68 61 6E 67 ol...END NoChang
008D90: 65 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 e;....PROCEDURE
008DA0: 42 6C 6F 63 6B 4D 6F 76 65 3B 0D 0A 56 41 52 20 BlockMove;..VAR
008DB0: 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 i:CARDINAL;..BEG
008DC0: 49 4E 0D 0A 09 46 4F 52 20 69 3A 3D 31 20 54 4F IN...FOR i:=1 TO
008DD0: 20 32 35 20 44 4F 20 57 72 69 74 65 43 68 61 72 25 DO WriteChar
008DE0: 28 4C 69 73 74 2C 27 2A 27 29 20 45 4E 44 3B 0D (List,'*') END;.
008DF0: 0A 09 50 72 69 6E 74 28 27 20 42 6C 6F 63 6B 20 ..Print(' Block
008E00: 6D 6F 76 65 64 20 66 72 6F 6D 20 6C 69 6E 65 20 moved from line
008E10: 27 29 3B 0D 0A 09 53 77 69 74 63 68 4F 75 74 53 ');...SwitchOutS
008E20: 74 72 65 61 6D 28 4C 69 73 74 29 3B 0D 0A 09 57 tream(List);...W
008E30: 72 69 74 65 43 61 72 64 28 4F 6C 64 4C 69 6E 6B riteCard(OldLink
008E40: 5B 6E 65 77 69 6E 64 65 78 5D 2C 36 29 3B 0D 0A [newindex],6);..
008E50: 09 50 6F 70 4F 75 74 53 74 72 65 61 6D 3B 0D 0A .PopOutStream;..
008E60: 09 46 4F 52 20 69 3A 3D 32 35 2B 32 39 2B 31 20 .FOR i:=25+29+1
008E70: 54 4F 20 37 39 20 44 4F 20 57 72 69 74 65 43 68 TO 79 DO WriteCh
008E80: 61 72 28 4C 69 73 74 2C 27 2A 27 29 20 45 4E 44 ar(List,'*') END
008E90: 3B 0D 0A 09 57 72 69 74 65 45 6F 6C 3B 0D 0A 09 ;...WriteEol;...
008EA0: 69 3A 3D 4F 6C 64 4C 69 6E 6B 5B 6E 65 77 69 6E i:=OldLink[newin
008EB0: 64 65 78 5D 3B 0D 0A 09 57 48 49 4C 45 20 28 6E dex];...WHILE (n
008EC0: 65 77 69 6E 64 65 78 3C 3D 4E 65 77 4C 65 6E 29 ewindex<=NewLen)
008ED0: 20 41 4E 44 20 28 69 3D 4F 6C 64 4C 69 6E 6B 5B AND (i=OldLink[
008EE0: 6E 65 77 69 6E 64 65 78 5D 29 20 44 4F 0D 0A 09 newindex]) DO...
008EF0: 09 47 65 74 4C 69 6E 65 28 4E 65 77 73 2C 6E 65 .GetLine(News,ne
008F00: 0A 09 09 09 57 48 49 4C 45 20 28 6A 3C 3D 4E 65 ....WHILE (j<=Ne
008F10: 77 4C 65 6E 29 20 41 4E 44 20 28 69 3C 3D 4F 6C wLen) AND (i<=Ol
008F20: 64 4C 65 6E 29 20 41 4E 44 20 28 4F 6C 64 4C 69 dLen) AND (OldLi
008F30: 6E 6B 5B 6A 2D 31 5D 3D 69 2D 31 29 20 0D 0A 09 nk[j-1]=i-1) ...
008F40: 09 09 09 41 4E 44 20 28 4E 65 77 48 61 73 68 5B ...AND (NewHash[
008F50: 6A 5D 3D 4F 6C 64 48 61 73 68 5B 69 5D 29 20 44 j]=OldHash[i]) D
008F60: 4F 0D 0A 09 09 09 09 4F 6C 64 4C 69 6E 6B 5B 6A O......OldLink[j
008F70: 5D 3A 3D 69 3B 0D 0A 09 09 09 09 4E 65 77 4C 69 ]:=i;......NewLi
008F80: 6E 6B 5B 69 5D 3A 3D 6A 3B 0D 0A 0D 0A 09 09 09 nk[i]:=j;.......
008F90: 09 28 2A 73 74 69 6C 6C 20 68 6F 6C 64 73 2A 29 .(*still holds*)
008FA0: 0D 0A 20 09 09 09 09 49 4E 43 28 69 29 3B 0D 0A .. ....INC(i);..
008FB0: 09 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 ....INC(j);.....
008FC0: 09 45 4E 44 3B 0D 0A 09 09 09 6B 3A 3D 69 3B 0D .END;.....k:=i;.
008FD0: 0A 09 09 45 4C 53 45 09 49 4E 43 28 6B 29 0D 0A ...ELSE.INC(k)..
008FE0: 09 09 09 45 4E 44 20 28 2A 57 48 49 4C 45 20 6B ...END (*WHILE k
008FF0: 3C 3D 4F 6C 64 4C 65 6E 2A 29 3B 0D 0A 09 09 45 <=OldLen*);....E
009000: 4E 44 3B 0D 0A 0D 0A 09 28 2A 67 72 6F 77 20 66 ND;.....(*grow f
009010: 6F 72 77 61 72 64 73 20 66 72 6F 6D 20 62 65 67 orwards from beg
009020: 69 6E 6E 69 6E 67 20 6F 66 20 66 69 6C 65 73 2A inning of files*
009030: 29 0D 0A 0D 0A 09 69 3A 3D 31 3B 0D 0A 09 6A 3A ).....i:=1;...j:
009040: 3D 31 3B 0D 0A 09 57 48 49 4C 45 20 28 69 3C 3D =1;...WHILE (i<=
009050: 4F 6C 64 4C 65 6E 29 20 41 4E 44 20 28 6A 3C 3D OldLen) AND (j<=
009060: 4E 65 77 4C 65 6E 29 20 0D 0A 09 09 41 4E 44 20 NewLen) ....AND
009070: 28 4F 6C 64 48 61 73 68 5B 69 5D 3D 4E 65 77 48 (OldHash[i]=NewH
009080: 61 73 68 5B 6A 5D 29 20 0D 0A 09 09 41 4E 44 20 ash[j]) ....AND
009090: 28 4E 65 77 4C 69 6E 6B 5B 69 5D 3D 30 29 20 41 (NewLink[i]=0) A
0090A0: 4E 44 20 28 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3D 30 ND (OldLink[j]=0
0090B0: 29 20 44 4F 0D 0A 0D 0A 09 09 28 2A 74 68 65 20 ) DO......(*the
0090C0: 6C 61 73 74 20 6C 69 6E 65 20 6F 66 20 74 68 65 last line of the
0090D0: 20 63 6F 6E 64 69 74 69 6F 6E 20 69 73 20 70 72 condition is pr
0090E0: 6F 62 61 62 6C 79 20 6E 6F 74 0D 0A 09 09 20 20 obably not....
0090F0: 6E 65 63 65 73 73 61 72 79 2C 20 62 75 74 20 61 necessary, but a
009100: 77 6C 69 6E 65 29 3B 0D 0A 09 09 50 72 69 6E 74 wline);....Print
009110: 28 6E 65 77 6C 69 6E 65 29 3B 0D 0A 09 09 57 72 (newline);....Wr
009120: 69 74 65 45 6F 6C 3B 0D 0A 09 09 49 4E 43 28 6E iteEol;....INC(n
009130: 65 77 69 6E 64 65 78 29 3B 0D 0A 09 09 49 4E 43 ewindex);....INC
009140: 28 69 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 46 (i);....END;...F
009150: 4F 52 20 69 3A 3D 31 20 54 4F 20 37 39 20 44 4F OR i:=1 TO 79 DO
009160: 20 57 72 69 74 65 43 68 61 72 28 4C 69 73 74 2C WriteChar(List,
009170: 27 2A 27 29 20 45 4E 44 3B 0D 0A 09 57 72 69 74 '*') END;...Writ
009180: 65 45 6F 6C 3B 0D 0A 09 45 4E 44 20 42 6C 6F 63 eEol;...END Bloc
009190: 6B 4D 6F 76 65 3B 0D 0A 0D 0A 42 45 47 49 4E 0D kMove;....BEGIN.
0091A0: 0A 09 0D 0A 09 6F 6C 64 69 6E 64 65 78 3A 3D 31 .....oldindex:=1
0091B0: 3B 09 28 2A 63 75 72 72 65 6E 74 20 6C 69 6E 65 ;.(*current line
0091C0: 20 69 6E 20 6F 6C 64 20 66 69 6C 65 2A 29 0D 0A in old file*)..
0091D0: 09 6E 65 77 69 6E 64 65 78 3A 3D 31 3B 09 28 2A .newindex:=1;.(*
0091E0: 63 75 72 72 65 6E 74 20 6C 69 6E 65 20 69 6E 20 current line in
0091F0: 6E 65 77 20 62 75 66 66 65 72 2A 29 0D 0A 0D 0A new buffer*)....
009200: 09 28 2A 09 43 61 75 74 69 6F 6E 3A 20 57 65 6C .(*.Caution: Wel
009210: 6C 20 63 6F 6D 6D 65 6E 74 65 64 20 63 6F 64 65 l commented code
009220: 20 61 68 65 61 64 0D 0A 09 09 09 20 50 72 6F 67 ahead..... Prog
009230: 72 61 6D 6D 65 72 20 70 72 6F 62 61 62 6C 79 20 rammer probably
009240: 64 69 64 6E 27 74 20 75 6E 64 65 72 73 74 61 6E didn't understan
009250: 64 20 77 68 61 74 20 68 65 20 77 61 73 20 64 6F d what he was do
009260: 69 6E 67 20 0D 0A 09 09 0D 0A 09 09 2A 29 0D 0A ing ........*)..
009270: 09 57 48 49 4C 45 20 28 6F 6C 64 69 6E 64 65 78 .WHILE (oldindex
009280: 3C 3D 4F 6C 64 4C 65 6E 29 20 4F 52 20 28 6E 65 <=OldLen) OR (ne
009290: 77 69 6E 64 65 78 3C 3D 4E 65 77 4C 65 6E 29 20 windex<=NewLen)
0092A0: 44 4F 0D 0A 09 09 28 2A 09 66 69 72 73 74 20 63 DO....(*.first c
0092B0: 68 65 63 6B 20 69 66 20 65 69 74 68 65 72 20 69 heck if either i
0092C0: 6E 64 65 78 20 69 73 20 6F 66 66 20 65 6E 64 0D ndex is off end.
0092D0: 0A 09 09 09 6F 66 20 66 69 6C 65 2A 29 0D 0A 09 ....of file*)...
0092E0: 0D 0A 09 09 49 46 20 6E 65 77 69 6E 64 65 78 3E ....IF newindex>
0092F0: 4E 65 77 4C 65 6E 20 54 48 45 4E 20 0D 0A 09 09 NewLen THEN ....
009300: 76 6F 69 64 73 20 77 6F 72 72 79 69 6E 67 20 61 voids worrying a
009310: 62 6F 75 74 20 70 61 74 68 6F 6C 6F 67 69 63 61 bout pathologica
009320: 6C 20 63 61 73 65 2A 29 0D 0A 0D 0A 09 09 4E 65 l case*)......Ne
009330: 77 4C 69 6E 6B 5B 69 5D 3A 3D 6A 3B 0D 0A 09 09 wLink[i]:=j;....
009340: 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3A 3D 69 3B 0D 0A OldLink[j]:=i;..
009350: 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 49 4E 43 ..INC(i);....INC
009360: 28 6A 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A (j);....END;....
009370: 09 28 2A 67 72 6F 77 20 62 61 63 6B 77 61 72 64 .(*grow backward
009380: 73 20 66 72 6F 6D 20 65 6E 64 20 6F 66 20 66 69 s from end of fi
009390: 6C 65 73 2A 29 0D 0A 09 69 3A 3D 4F 6C 64 4C 65 les*)...i:=OldLe
0093A0: 6E 3B 0D 0A 09 6A 3A 3D 4E 65 77 4C 65 6E 3B 0D n;...j:=NewLen;.
0093B0: 0A 09 57 48 49 4C 45 20 28 69 3E 30 29 20 41 4E ..WHILE (i>0) AN
0093C0: 44 20 28 6A 3E 30 29 20 0D 0A 09 09 41 4E 44 20 D (j>0) ....AND
0093D0: 28 4F 6C 64 48 61 73 68 5B 69 5D 3D 4E 65 77 48 (OldHash[i]=NewH
0093E0: 61 73 68 5B 6A 5D 29 0D 0A 09 09 41 4E 44 20 28 ash[j])....AND (
0093F0: 4E 65 77 4C 69 6E 6B 5B 69 5D 3D 30 29 20 41 4E NewLink[i]=0) AN
009400: 44 20 28 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3D 30 29 D (OldLink[j]=0)
009410: 20 44 4F 0D 0A 09 09 4E 65 77 4C 69 6E 6B 5B 69 DO....NewLink[i
009420: 5D 3A 3D 6A 3B 0D 0A 09 09 4F 6C 64 4C 69 6E 6B ]:=j;....OldLink
009430: 5B 6A 5D 3A 3D 69 3B 0D 0A 09 09 44 45 43 28 69 [j]:=i;....DEC(i
009440: 29 3B 0D 0A 09 09 44 45 43 28 6A 29 3B 0D 0A 09 );....DEC(j);...
009450: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 47 65 6E 65 .END;...END Gene
009460: 72 61 74 65 4C 69 6E 6B 73 3B 0D 0A 0D 0A 0D 0A rateLinks;......
009470: 50 52 4F 43 45 44 55 52 45 20 57 72 69 74 65 52 PROCEDURE WriteR
009480: 65 73 75 6C 74 73 3B 0D 0A 56 41 52 09 6F 6C 64 esults;..VAR.old
009490: 69 6E 64 65 78 2C 6E 65 77 69 6E 64 65 78 3A 43 index,newindex:C
0094A0: 41 52 44 49 4E 41 4C 3B 0D 0A 09 6F 6C 64 6C 69 ARDINAL;...oldli
0094B0: 6E 65 2C 6E 65 77 6C 69 6E 65 3A 41 52 52 41 59 ne,newline:ARRAY
0094C0: 20 5B 31 2E 2E 38 30 5D 20 4F 46 20 43 48 41 52 [1..80] OF CHAR
0094D0: 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 ;....PROCEDURE G
0094E0: 65 74 4C 69 6E 65 28 56 41 52 20 73 3A 53 54 52 etLine(VAR s:STR
0094F0: 45 41 4D 3B 56 41 52 20 6C 3A 41 52 52 41 59 20 EAM;VAR l:ARRAY
009500: 09 44 65 6C 65 74 65 64 3B 0D 0A 09 09 09 49 4E .Deleted;.....IN
009510: 43 28 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 09 09 C(oldindex);....
009520: 45 4C 53 49 46 20 6F 6C 64 69 6E 64 65 78 3E 4F ELSIF oldindex>O
009530: 6C 64 4C 65 6E 20 54 48 45 4E 0D 0A 09 09 09 49 ldLen THEN.....I
009540: 6E 73 65 72 74 65 64 3B 0D 0A 09 09 09 49 4E 43 nserted;.....INC
009550: 28 6E 65 77 69 6E 64 65 78 29 3B 0D 0A 09 09 45 (newindex);....E
009560: 4C 53 49 46 20 4E 65 77 4C 69 6E 6B 5B 6F 6C 64 LSIF NewLink[old
009570: 69 6E 64 65 78 5D 3D 30 20 54 48 45 4E 0D 0A 09 index]=0 THEN...
009580: 09 09 44 65 6C 65 74 65 64 3B 0D 0A 09 09 09 49 ..Deleted;.....I
009590: 4E 43 28 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 09 NC(oldindex);...
0095A0: 09 45 4C 53 49 46 20 4F 6C 64 4C 69 6E 6B 5B 6E .ELSIF OldLink[n
0095B0: 65 77 69 6E 64 65 78 5D 3D 30 20 54 48 45 4E 0D ewindex]=0 THEN.
0095C0: 0A 09 09 09 49 6E 73 65 72 74 65 64 3B 0D 0A 09 ....Inserted;...
0095D0: 09 09 49 4E 43 28 6E 65 77 69 6E 64 65 78 29 3B ..INC(newindex);
0095E0: 0D 0A 0D 0A 09 09 28 2A 09 69 66 20 70 6F 69 6E ......(*.if poin
0095F0: 74 65 72 73 20 6D 61 74 63 68 2C 20 6C 69 6E 65 ters match, line
009600: 20 69 73 20 75 6E 63 68 61 6E 67 65 64 0D 0A 09 is unchanged...
009610: 09 09 6F 72 20 69 66 20 61 20 70 6F 69 6E 74 65 ..or if a pointe
009620: 72 20 69 73 20 7A 65 72 6F 2C 20 6C 69 6E 65 20 r is zero, line
009630: 69 73 20 6E 65 77 20 6F 72 20 64 65 6C 65 74 65 is new or delete
009640: 64 2A 29 0D 0A 0D 0A 09 09 45 4C 53 49 46 20 28 d*)......ELSIF (
009650: 4E 65 77 4C 69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 NewLink[oldindex
009660: 5D 3D 6E 65 77 69 6E 64 65 78 29 20 0D 0A 09 09 ]=newindex) ....
009670: 20 20 20 20 41 4E 44 20 28 4F 6C 64 4C 69 6E 6B AND (OldLink
009680: 5B 6E 65 77 69 6E 64 65 78 5D 3D 6F 6C 64 69 6E [newindex]=oldin
009690: 64 65 78 29 20 54 48 45 4E 0D 0A 09 09 09 4E 6F dex) THEN.....No
0096A0: 43 68 61 6E 67 65 3B 0D 0A 09 09 09 49 4E 43 28 Change;.....INC(
0096B0: 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 09 09 09 49 oldindex);.....I
0096C0: 4E 43 28 6E 65 77 69 6E 64 65 78 29 3B 0D 0A 0D NC(newindex);...
0096D0: 0A 0D 0A 28 2A 09 09 20 20 6E 6F 6E 65 20 6F 66 ...(*.. none of
0096E0: 20 74 68 65 20 61 62 6F 76 65 3A 20 70 6F 69 6E the above: poin
0096F0: 74 65 72 73 20 64 6F 6E 27 74 20 6D 61 74 63 68 ters don't match
009700: 4F 46 20 43 48 41 52 29 3B 0D 0A 42 45 47 49 4E OF CHAR);..BEGIN
009710: 0D 0A 09 53 77 69 74 63 68 49 6E 53 74 72 65 61 ...SwitchInStrea
009720: 6D 28 73 29 3B 0D 0A 09 52 65 61 64 4C 69 6E 65 m(s);...ReadLine
009730: 28 6C 29 3B 0D 0A 09 50 6F 70 49 6E 53 74 72 65 (l);...PopInStre
009740: 61 6D 3B 0D 0A 09 45 4E 44 20 47 65 74 4C 69 6E am;...END GetLin
009750: 65 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 e;....PROCEDURE
009760: 50 72 69 6E 74 28 61 3A 41 52 52 41 59 20 4F 46 Print(a:ARRAY OF
009770: 20 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09 4F 75 CHAR);....(*.Ou
009780: 74 70 75 74 20 61 20 6C 69 6E 65 20 74 72 75 6E tput a line trun
009790: 63 61 74 69 6E 67 20 74 72 61 69 6C 69 6E 67 20 cating trailing
0097A0: 73 70 61 63 65 73 2A 29 0D 0A 0D 0A 56 41 52 20 spaces*)....VAR
0097B0: 09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .i,j:CARDINAL;..
0097C0: 42 45 47 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 BEGIN...i:=0;...
0097D0: 6A 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 28 69 j:=0;...WHILE (i
0097E0: 3C 3D 48 49 47 48 28 61 29 29 20 41 4E 44 20 28 <=HIGH(a)) AND (
0097F0: 61 5B 69 5D 3C 3E 30 78 29 20 44 4F 0D 0A 09 09 a[i]<>0x) DO....
009800: 49 46 20 61 5B 69 5D 3C 3E 27 20 27 20 54 48 45 IF a[i]<>' ' THE
009810: 4E 0D 0A 09 09 09 46 4F 52 20 6A 3A 3D 6A 20 54 N.....FOR j:=j T
009820: 4F 20 69 20 44 4F 20 57 72 69 74 65 43 68 61 72 O i DO WriteChar
009830: 28 4C 69 73 74 2C 61 5B 6A 5D 29 20 45 4E 44 3B (List,a[j]) END;
009840: 0D 0A 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 .....INC(j);....
009850: 09 45 4E 44 3B 0D 0A 09 09 49 4E 43 28 69 29 3B .END;....INC(i);
009860: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 0D 0A 09 45 4E ....END;......EN
009870: 44 20 50 72 69 6E 74 3B 0D 0A 0D 0A 50 52 4F 43 D Print;....PROC
009880: 45 44 55 52 45 20 57 72 69 74 65 45 6F 6C 3B 0D EDURE WriteEol;.
009890: 0A 42 45 47 49 4E 0D 0A 28 2A 09 64 65 62 75 67 .BEGIN..(*.debug
0098A0: 20 63 6F 64 65 20 63 6F 6D 6D 65 6E 74 65 64 20 code commented
0098B0: 6F 75 74 0D 0A 0D 0A 09 53 77 69 74 63 68 4F 75 out.....SwitchOu
0098C0: 74 53 74 72 65 61 6D 28 4C 69 73 74 29 3B 0D 0A tStream(List);..
0098D0: 09 57 72 69 74 65 43 61 72 64 28 6F 6C 64 69 6E .WriteCard(oldin
0098E0: 64 65 78 2C 36 29 3B 57 72 69 74 65 43 61 72 64 dex,6);WriteCard
0098F0: 28 4E 65 77 4C 69 6E 6B 5B 6F 6C 64 69 6E 64 65 (NewLink[oldinde
009900: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
009910: 08 00 01 00 02 09 52 E5 08 00 C9 02 00 00 00 02 ......R.........
009920: 08 00 C5 02 00 00 00 02 08 00 C1 02 00 00 00 02 ................
009930: 08 00 C6 02 00 00 00 02 08 00 C2 02 00 00 00 02 ................
009940: 08 00 C7 02 00 00 00 02 08 00 C3 02 00 00 00 02 ................
009950: 08 00 C8 02 00 00 00 02 08 00 C4 02 00 00 00 02 ................
009960: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
009970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
009980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
009990: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
009A00: 65 71 52 65 61 64 42 6C 6F 63 6B 28 49 6E 32 2C eqReadBlock(In2,
009A10: 41 44 52 28 42 6C 6F 63 6B 32 29 2C 31 32 38 2C ADR(Block2),128,
009A20: 72 65 70 6C 79 32 29 3B 0D 0A 09 09 57 72 69 74 reply2);....Writ
009A30: 65 48 65 78 28 4C 6F 63 2C 34 29 3B 0D 0A 09 09 eHex(Loc,4);....
009A40: 57 72 69 74 65 53 74 72 69 6E 67 28 30 64 78 29 WriteString(0dx)
009A50: 3B 0D 0A 09 09 49 46 20 28 72 65 70 6C 79 31 3C ;....IF (reply1<
009A60: 3E 31 32 38 29 20 4F 52 20 28 72 65 70 6C 79 32 >128) OR (reply2
009A70: 3C 3E 31 32 38 29 20 54 48 45 4E 20 45 58 49 54 <>128) THEN EXIT
009A80: 20 45 4E 44 3B 0D 0A 09 09 69 3A 3D 30 3B 0D 0A END;....i:=0;..
009A90: 09 09 57 48 49 4C 45 20 28 69 3C 31 32 38 29 20 ..WHILE (i<128)
009AA0: 41 4E 44 20 28 42 6C 6F 63 6B 31 5B 69 5D 3D 42 AND (Block1[i]=B
009AB0: 6C 6F 63 6B 32 5B 69 5D 29 20 44 4F 20 49 4E 43 lock2[i]) DO INC
009AC0: 28 69 29 20 45 4E 44 3B 0D 0A 09 09 49 46 20 69 (i) END;....IF i
009AD0: 3C 31 32 38 20 54 48 45 4E 0D 0A 09 09 09 46 4F <128 THEN.....FO
009AE0: 52 20 69 3A 3D 30 20 54 4F 20 31 32 37 20 42 59 R i:=0 TO 127 BY
009AF0: 20 38 20 44 4F 0D 0A 09 09 09 09 57 72 69 74 65 8 DO......Write
009B00: 48 65 78 28 4C 6F 63 2B 69 2C 34 29 3B 0D 0A 09 Hex(Loc+i,4);...
009B10: 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
009B20: 3A 27 29 3B 0D 0A 09 09 09 09 46 4F 52 20 6A 3A :');......FOR j:
009B30: 3D 69 20 54 4F 20 69 2B 37 20 44 4F 0D 0A 09 09 =i TO i+7 DO....
009B40: 09 09 09 57 72 69 74 65 48 65 78 28 42 6C 6F 63 ...WriteHex(Bloc
009B50: 6B 31 5B 6A 5D 2C 32 29 3B 0D 0A 09 09 09 09 09 k1[j],2);.......
009B60: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 27 29 WriteString(' ')
009B70: 3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 ;.......END;....
009B80: 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
009B90: 27 29 3B 0D 0A 09 09 09 09 46 4F 52 20 6A 3A 3D ');......FOR j:=
009BA0: 69 20 54 4F 20 69 2B 37 20 44 4F 0D 0A 09 09 09 i TO i+7 DO.....
009BB0: 09 09 57 72 69 74 65 48 65 78 28 42 6C 6F 63 6B ..WriteHex(Block
009BC0: 32 5B 6A 5D 2C 32 29 3B 0D 0A 09 09 09 09 09 57 2[j],2);.......W
009BD0: 72 69 74 65 53 74 72 69 6E 67 28 27 20 27 29 3B riteString(' ');
009BE0: 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 .......END;.....
009BF0: 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 09 45 .WriteLn;......E
009C00: 69 6E 67 2A 29 0D 0A 0D 0A 09 52 65 73 65 74 28 ing*).....Reset(
009C10: 4E 65 77 73 29 3B 0D 0A 09 52 65 73 65 74 28 4F News);...Reset(O
009C20: 6C 64 73 29 3B 0D 0A 09 0D 0A 09 57 72 69 74 65 lds);......Write
009C30: 52 65 73 75 6C 74 73 3B 0D 0A 09 44 69 73 63 6F Results;...Disco
009C40: 6E 6E 65 63 74 28 4C 69 73 74 2C 54 52 55 45 29 nnect(List,TRUE)
009C50: 3B 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 72 65 2E ;...END Compare.
009C60: 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
009C70: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
009C80: 0D 0A 09 09 09 09 49 46 20 45 78 70 61 6E 64 54 ......IF ExpandT
009C90: 61 62 73 20 4F 52 20 4E 75 6D 62 65 72 4C 69 6E abs OR NumberLin
009CA0: 65 73 20 54 48 45 4E 20 57 72 69 74 65 28 27 20 es THEN Write('
009CB0: 27 29 20 45 4E 44 3B 0D 0A 09 09 09 09 55 4E 54 ') END;......UNT
009CC0: 49 4C 20 49 41 4E 44 28 43 68 61 72 73 57 72 69 IL IAND(CharsWri
009CD0: 74 74 65 6E 2C 37 29 3D 37 3B 0D 0A 09 09 09 49 tten,7)=7;.....I
009CE0: 46 20 4E 4F 54 20 28 45 78 70 61 6E 64 54 61 62 F NOT (ExpandTab
009CF0: 73 20 4F 52 20 4E 75 6D 62 65 72 4C 69 6E 65 73 s OR NumberLines
009D00: 29 20 54 48 45 4E 20 57 72 69 74 65 28 54 41 42 ) THEN Write(TAB
009D10: 29 20 45 4E 44 3B 0D 0A 09 09 09 7C 0D 0A 09 09 ) END;.....|....
009D20: 30 78 2E 2E 31 66 78 3A 09 28 2A 6E 6F 6E 2D 70 0x..1fx:.(*non-p
009D30: 72 69 6E 74 69 6E 67 20 63 68 61 72 61 63 74 65 rinting characte
009D40: 72 73 2E 20 54 68 69 73 20 69 73 20 63 68 65 61 rs. This is chea
009D50: 74 69 6E 67 0D 0A 09 09 09 09 20 20 73 6C 69 67 ting...... slig
009D60: 68 74 6C 79 20 2D 20 73 68 6F 75 6C 64 20 65 78 htly - should ex
009D70: 63 6C 75 64 65 20 43 52 20 4C 46 20 61 6E 64 20 clude CR LF and
009D80: 54 41 42 2A 29 0D 0A 09 09 09 49 46 20 43 68 61 TAB*).....IF Cha
009D90: 72 73 57 72 69 74 74 65 6E 3E 3D 28 50 61 67 65 rsWritten>=(Page
009DA0: 57 69 64 74 68 2D 34 29 20 54 48 45 4E 0D 0A 09 Width-4) THEN...
009DB0: 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 ...WriteLn;.....
009DC0: 09 43 6F 6E 74 69 6E 75 61 74 69 6F 6E 3A 3D 54 .Continuation:=T
009DD0: 52 55 45 3B 0D 0A 09 09 09 09 52 45 54 55 52 4E RUE;......RETURN
009DE0: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 57 ......END;.....W
009DF0: 72 69 74 65 28 27 3C 27 29 3B 0D 0A 09 09 09 57 rite('<');.....W
009E00: 6B 5B 6F 6C 64 69 6E 64 65 78 5D 3E 3D 6E 65 77 k[oldindex]>=new
009E10: 69 6E 64 65 78 0D 0A 0D 0A 09 09 20 20 20 62 75 index...... bu
009E20: 74 2C 20 69 66 20 4E 65 77 4C 69 6E 6B 5B 6F 6C t, if NewLink[ol
009E30: 64 69 6E 64 65 78 5D 3D 6E 65 77 69 6E 64 65 78 dindex]=newindex
009E40: 20 74 68 65 6E 20 0D 0A 09 09 09 20 20 20 4F 6C then ..... Ol
009E50: 64 4C 69 6E 6B 5B 6E 65 77 69 6E 64 65 78 5D 3D dLink[newindex]=
009E60: 4F 6C 64 4C 69 6E 6B 5B 4E 65 77 4C 69 6E 6B 5B OldLink[NewLink[
009E70: 6F 6C 64 69 6E 64 65 78 5D 5D 3D 6E 65 77 6C 69 oldindex]]=newli
009E80: 6E 6B 0D 0A 09 09 09 77 68 69 63 68 20 69 73 20 nk.....which is
009E90: 6E 6F 74 20 74 72 75 65 20 28 73 69 6E 63 65 20 not true (since
009EA0: 74 68 65 20 63 72 6F 73 73 2D 6C 69 6E 6B 65 64 the cross-linked
009EB0: 20 63 61 73 65 20 77 61 73 20 68 61 6E 64 6C 65 case was handle
009EC0: 64 0D 0A 09 09 09 65 61 72 6C 69 65 72 29 0D 0A d.....earlier)..
009ED0: 0D 0A 09 09 20 20 48 65 6E 63 65 20 4E 65 77 4C .... Hence NewL
009EE0: 69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 5D 3E 6E 65 ink[oldindex]>ne
009EF0: 77 69 6E 64 65 78 20 61 6E 64 20 77 65 20 63 61 windex and we ca
009F00: 6E 20 6C 65 61 76 65 20 74 68 65 20 6C 69 6E 65 n leave the line
009F10: 20 74 69 6C 6C 20 6C 61 74 65 72 0D 0A 0D 0A 09 till later.....
009F20: 09 20 20 57 65 20 6D 75 73 74 20 74 68 65 72 65 . We must there
009F30: 66 6F 72 65 20 64 6F 20 73 6F 6D 65 74 68 69 6E fore do somethin
009F40: 67 20 77 69 74 68 20 74 68 65 20 6E 65 77 20 6C g with the new l
009F50: 69 6E 65 20 2D 20 69 74 20 69 73 20 74 68 65 0D ine - it is the.
009F60: 0A 09 09 20 20 73 74 61 72 74 20 6F 66 20 61 20 ... start of a
009F70: 6D 6F 76 65 64 20 62 6C 6F 63 6B 0D 0A 2A 29 0D moved block..*).
009F80: 0A 20 09 09 45 4C 53 45 0D 0A 09 09 09 42 6C 6F . ..ELSE.....Blo
009F90: 63 6B 4D 6F 76 65 3B 09 28 2A 69 6E 63 20 6F 66 ckMove;.(*inc of
009FA0: 20 6E 65 77 69 6E 64 65 78 20 64 6F 6E 65 20 69 newindex done i
009FB0: 6E 20 62 6C 6F 63 6B 6D 6F 76 65 2A 29 0D 0A 09 n blockmove*)...
009FC0: 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 2A ..END;....END;(*
009FD0: 4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 57 72 69 LOOP*)...END Wri
009FE0: 74 65 52 65 73 75 6C 74 73 3B 0D 0A 0D 0A 56 41 teResults;....VA
009FF0: 52 09 50 61 72 61 6D 3A 41 52 52 41 59 20 5B 30 R.Param:ARRAY [0
00A000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A0A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A0B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A0C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A0D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A0E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A0F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00A200: 2E 2E 32 5D 20 4F 46 20 50 61 72 61 6D 65 74 65 ..2] OF Paramete
00A210: 72 3B 0D 0A 09 43 6F 75 6E 74 3A 49 4E 54 45 47 r;...Count:INTEG
00A220: 45 52 3B 0D 0A 09 0D 0A 50 52 4F 43 45 44 55 52 ER;.....PROCEDUR
00A230: 45 20 4F 70 65 6E 49 6E 70 75 74 28 56 41 52 20 E OpenInput(VAR
00A240: 73 3A 53 54 52 45 41 4D 3B 56 41 52 20 66 3A 46 s:STREAM;VAR f:F
00A250: 49 4C 45 3B 70 61 72 61 6D 3A 50 61 72 61 6D 65 ILE;param:Parame
00A260: 74 65 72 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4C ter);..BEGIN...L
00A270: 6F 6F 6B 75 70 28 66 2C 46 69 6C 65 4E 61 6D 65 ookup(f,FileName
00A280: 28 70 61 72 61 6D 5E 2E 43 68 61 72 73 29 2C 72 (param^.Chars),r
00A290: 65 70 6C 79 29 3B 0D 0A 09 49 46 20 72 65 70 6C eply);...IF repl
00A2A0: 79 3C 30 20 54 48 45 4E 0D 0A 09 09 57 72 69 74 y<0 THEN....Writ
00A2B0: 65 53 74 72 69 6E 67 28 27 20 43 6F 75 6C 64 20 eString(' Could
00A2C0: 6E 6F 74 20 6F 70 65 6E 20 27 29 3B 0D 0A 09 09 not open ');....
00A2D0: 57 72 69 74 65 53 74 72 69 6E 67 28 70 61 72 61 WriteString(para
00A2E0: 6D 5E 2E 43 68 61 72 73 29 3B 0D 0A 09 09 57 72 m^.Chars);....Wr
00A2F0: 69 74 65 4C 6E 3B 0D 0A 09 09 48 41 4C 54 3B 0D iteLn;....HALT;.
00A300: 0A 09 09 45 4E 44 3B 0D 0A 09 43 6F 6E 6E 65 63 ...END;...Connec
00A310: 74 28 73 2C 66 2C 69 6E 70 75 74 29 3B 0D 0A 09 t(s,f,input);...
00A320: 45 4E 44 20 4F 70 65 6E 49 6E 70 75 74 3B 0D 0A END OpenInput;..
00A330: 50 52 4F 43 45 44 55 52 45 20 4F 70 65 6E 46 69 PROCEDURE OpenFi
00A340: 6C 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 09 les;..BEGIN.....
00A350: 28 2A 09 49 6E 70 75 74 20 74 68 65 20 70 61 72 (*.Input the par
00A360: 61 6D 65 74 65 72 73 2C 20 63 6F 6E 6E 65 63 74 ameters, connect
00A370: 20 74 68 65 20 66 69 6C 65 73 20 74 6F 20 73 74 the files to st
00A380: 72 65 61 6D 73 2A 29 0D 0A 0D 0A 09 47 65 74 50 reams*).....GetP
00A390: 61 72 61 6D 73 28 50 61 72 61 6D 2C 43 6F 75 6E arams(Param,Coun
00A3A0: 74 29 3B 0D 0A 0D 0A 09 28 2A 09 49 66 20 6C 65 t);.....(*.If le
00A3B0: 73 73 20 74 68 61 6E 20 32 20 70 61 72 61 6D 65 ss than 2 parame
00A3C0: 74 65 72 73 2C 20 67 69 76 65 20 75 73 61 67 65 ters, give usage
00A3D0: 20 61 6E 64 20 65 78 69 74 2A 29 0D 0A 0D 0A 09 and exit*).....
00A3E0: 49 46 20 43 6F 75 6E 74 3C 32 20 54 48 45 4E 20 IF Count<2 THEN
00A3F0: 55 73 61 67 65 20 45 4E 44 3B 0D 0A 0D 0A 09 28 Usage END;.....(
00A400: 4D 4F 44 55 4C 45 20 43 6F 6D 70 42 69 6E 3B 0D MODULE CompBin;.
00A410: 0A 0D 0A 28 2A 09 43 6F 6D 70 61 72 65 20 74 77 ...(*.Compare tw
00A420: 6F 20 62 69 6E 61 72 79 20 66 69 6C 65 73 20 2A o binary files *
00A430: 29 0D 0A 0D 0A 46 52 4F 4D 09 54 65 72 6D 69 6E )....FROM.Termin
00A440: 61 6C 20 49 4D 50 4F 52 54 20 57 72 69 74 65 53 al IMPORT WriteS
00A450: 74 72 69 6E 67 2C 57 72 69 74 65 4C 6E 3B 0D 0A tring,WriteLn;..
00A460: 46 52 4F 4D 09 53 6D 61 6C 6C 49 4F 20 20 49 4D FROM.SmallIO IM
00A470: 50 4F 52 54 20 57 72 69 74 65 48 65 78 3B 0D 0A PORT WriteHex;..
00A480: 46 52 4F 4D 09 53 74 72 65 61 6D 73 20 49 4D 50 FROM.Streams IMP
00A490: 4F 52 54 20 44 69 72 65 63 74 69 6F 6E 3B 0D 0A ORT Direction;..
00A4A0: 46 52 4F 4D 09 51 75 69 63 6B 53 74 72 20 49 4D FROM.QuickStr IM
00A4B0: 50 4F 52 54 20 53 74 72 65 61 6D 52 65 63 6F 72 PORT StreamRecor
00A4C0: 64 2C 4F 70 65 6E 53 74 72 65 61 6D 73 2C 4F 70 d,OpenStreams,Op
00A4D0: 74 69 6F 6E 73 53 65 74 3B 0D 0A 46 52 4F 4D 09 tionsSet;..FROM.
00A4E0: 53 59 53 54 45 4D 20 20 20 49 4D 50 4F 52 54 20 SYSTEM IMPORT
00A4F0: 41 44 52 2C 42 59 54 45 3B 0D 0A 46 52 4F 4D 09 ADR,BYTE;..FROM.
00A500: 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 49 4C Files IMPORT FIL
00A510: 45 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B 3B 0D E,SeqReadBlock;.
00A520: 0A 56 41 52 09 49 6E 31 2C 49 6E 32 3A 46 49 4C .VAR.In1,In2:FIL
00A530: 45 3B 0D 0A 09 42 6C 6F 63 6B 31 2C 42 6C 6F 63 E;...Block1,Bloc
00A540: 6B 32 3A 41 52 52 41 59 20 5B 30 2E 2E 31 32 37 k2:ARRAY [0..127
00A550: 5D 20 4F 46 20 42 59 54 45 3B 0D 0A 09 72 65 70 ] OF BYTE;...rep
00A560: 6C 79 31 2C 72 65 70 6C 79 32 3A 49 4E 54 45 47 ly1,reply2:INTEG
00A570: 45 52 3B 0D 0A 09 4C 6F 63 3A 43 41 52 44 49 4E ER;...Loc:CARDIN
00A580: 41 4C 3B 0D 0A 09 69 2C 6A 3A 43 41 52 44 49 4E AL;...i,j:CARDIN
00A590: 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 56 AL;..PROCEDURE V
00A5A0: 65 72 79 51 75 69 63 6B 28 29 3A 42 4F 4F 4C 45 eryQuick():BOOLE
00A5B0: 41 4E 3B 0D 0A 0D 0A 28 2A 09 4F 70 65 6E 20 61 AN;....(*.Open a
00A5C0: 20 73 74 72 65 61 6D 20 66 6F 72 20 69 6E 70 75 stream for inpu
00A5D0: 74 20 61 6E 64 20 61 20 73 74 72 65 61 6D 20 66 t and a stream f
00A5E0: 6F 72 20 6F 75 74 70 75 74 20 2A 29 0D 0A 56 41 or output *)..VA
00A5F0: 52 09 53 3A 41 52 52 41 59 5B 31 2E 2E 32 5D 20 R.S:ARRAY[1..2]
00A600: 2A 09 49 66 20 33 20 70 61 72 61 6D 65 74 65 72 *.If 3 parameter
00A610: 73 2C 20 74 68 69 72 64 20 70 61 72 61 6D 65 74 s, third paramet
00A620: 65 72 20 69 73 20 66 69 6C 65 20 74 6F 20 72 65 er is file to re
00A630: 63 65 69 76 65 20 6F 75 74 70 75 74 0D 0A 09 09 ceive output....
00A640: 6F 74 68 65 72 77 69 73 65 2C 20 61 74 74 61 63 otherwise, attac
00A650: 68 20 6F 75 74 70 75 74 20 74 6F 20 74 68 65 20 h output to the
00A660: 70 72 69 6E 74 65 72 20 28 4C 53 54 3A 29 0D 0A printer (LST:)..
00A670: 09 2A 29 0D 0A 0D 0A 09 49 46 20 43 6F 75 6E 74 .*).....IF Count
00A680: 3D 33 20 54 48 45 4E 0D 0A 09 09 43 72 65 61 74 =3 THEN....Creat
00A690: 65 28 4C 69 73 74 46 2C 46 69 6C 65 4E 61 6D 65 e(ListF,FileName
00A6A0: 28 50 61 72 61 6D 5B 43 6F 75 6E 74 2D 31 5D 5E (Param[Count-1]^
00A6B0: 2E 43 68 61 72 73 29 2C 72 65 70 6C 79 29 3B 0D .Chars),reply);.
00A6C0: 0A 09 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54 ...IF reply<>0 T
00A6D0: 48 45 4E 0D 0A 09 09 09 57 72 69 74 65 53 74 72 HEN.....WriteStr
00A6E0: 69 6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F 74 20 ing(' Could not
00A6F0: 63 72 65 61 74 65 20 6C 69 73 74 20 66 69 6C 65 create list file
00A700: 27 29 3B 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B ');.....WriteLn;
00A710: 0D 0A 09 09 09 48 41 4C 54 3B 0D 0A 09 09 09 45 .....HALT;.....E
00A720: 4E 44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 43 72 ND;...ELSE....Cr
00A730: 65 61 74 65 28 4C 69 73 74 46 2C 27 4C 53 54 3A eate(ListF,'LST:
00A740: 27 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 45 4E 44 ',reply);....END
00A750: 3B 0D 0A 09 43 6F 6E 6E 65 63 74 28 4C 69 73 74 ;...Connect(List
00A760: 2C 4C 69 73 74 46 2C 6F 75 74 70 75 74 29 3B 0D ,ListF,output);.
00A770: 0A 0D 0A 09 28 2A 09 4F 70 65 6E 20 74 68 65 20 ....(*.Open the
00A780: 66 69 6C 65 73 20 74 6F 20 62 65 20 63 6F 6D 70 files to be comp
00A790: 61 72 65 64 09 2A 29 0D 0A 09 0D 0A 09 4F 70 65 ared.*)......Ope
00A7A0: 6E 49 6E 70 75 74 28 4F 6C 64 73 2C 4F 6C 64 66 nInput(Olds,Oldf
00A7B0: 2C 50 61 72 61 6D 5B 30 5D 29 3B 0D 0A 09 4F 70 ,Param[0]);...Op
00A7C0: 65 6E 49 6E 70 75 74 28 4E 65 77 73 2C 4E 65 77 enInput(News,New
00A7D0: 66 2C 50 61 72 61 6D 5B 31 5D 29 3B 09 0D 0A 09 f,Param[1]);....
00A7E0: 45 4E 44 20 4F 70 65 6E 46 69 6C 65 73 3B 0D 0A END OpenFiles;..
00A7F0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 61 64 ..PROCEDURE Read
00A800: 4F 46 20 53 74 72 65 61 6D 52 65 63 6F 72 64 3B OF StreamRecord;
00A810: 0D 0A 09 6F 3A 4F 70 74 69 6F 6E 73 53 65 74 3B ...o:OptionsSet;
00A820: 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20 53 ..BEGIN...WITH S
00A830: 5B 31 5D 20 44 4F 0D 0A 09 09 49 73 53 74 72 65 [1] DO....IsStre
00A840: 61 6D 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 44 69 am:=FALSE;....Di
00A850: 72 3A 3D 69 6E 70 75 74 3B 0D 0A 09 09 4C 6F 6F r:=input;....Loo
00A860: 6B 75 70 46 69 72 73 74 3A 3D 46 41 4C 53 45 3B kupFirst:=FALSE;
00A870: 0D 0A 09 09 4D 75 73 74 53 75 70 70 6C 79 3A 3D ....MustSupply:=
00A880: 46 41 4C 53 45 3B 0D 0A 09 09 46 69 6C 65 3A 3D FALSE;....File:=
00A890: 41 44 52 28 49 6E 31 29 3B 0D 0A 09 09 45 4E 44 ADR(In1);....END
00A8A0: 3B 0D 0A 09 57 49 54 48 20 53 5B 32 5D 20 44 4F ;...WITH S[2] DO
00A8B0: 0D 0A 09 09 49 73 53 74 72 65 61 6D 3A 3D 46 41 ....IsStream:=FA
00A8C0: 4C 53 45 3B 0D 0A 09 09 44 65 66 61 75 6C 74 4E LSE;....DefaultN
00A8D0: 61 6D 65 3A 3D 27 43 4F 4E 3A 27 3B 0D 0A 09 09 ame:='CON:';....
00A8E0: 44 69 72 3A 3D 69 6E 70 75 74 3B 0D 0A 09 09 4C Dir:=input;....L
00A8F0: 6F 6F 6B 75 70 46 69 72 73 74 3A 3D 46 41 4C 53 ookupFirst:=FALS
00A900: 45 3B 0D 0A 09 09 4D 75 73 74 53 75 70 70 6C 79 E;....MustSupply
00A910: 3A 3D 54 52 55 45 3B 0D 0A 09 09 46 69 6C 65 3A :=TRUE;....File:
00A920: 3D 41 44 52 28 49 6E 32 29 3B 0D 0A 09 09 45 4E =ADR(In2);....EN
00A930: 44 3B 0D 0A 09 52 45 54 55 52 4E 20 4F 70 65 6E D;...RETURN Open
00A940: 53 74 72 65 61 6D 73 28 53 2C 6F 29 3B 0D 0A 09 Streams(S,o);...
00A950: 45 4E 44 20 56 65 72 79 51 75 69 63 6B 3B 0D 0A END VeryQuick;..
00A960: 42 45 47 49 4E 0D 0A 09 49 46 20 20 56 65 72 79 BEGIN...IF Very
00A970: 51 75 69 63 6B 28 29 20 54 48 45 4E 0D 0A 09 09 Quick() THEN....
00A980: 57 72 69 74 65 53 74 72 69 6E 67 28 27 46 69 6C WriteString('Fil
00A990: 65 73 20 6E 6F 74 20 66 6F 75 6E 64 20 27 29 3B es not found ');
00A9A0: 0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 ....WriteLn;....
00A9B0: 48 41 4C 54 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 HALT;....END;...
00A9C0: 4C 6F 63 3A 3D 30 3B 0D 0A 09 4C 4F 4F 50 0D 0A Loc:=0;...LOOP..
00A9D0: 09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 28 49 ..SeqReadBlock(I
00A9E0: 6E 31 2C 41 44 52 28 42 6C 6F 63 6B 31 29 2C 31 n1,ADR(Block1),1
00A9F0: 32 38 2C 72 65 70 6C 79 31 29 3B 0D 0A 09 09 53 28,reply1);....S
00AA00: 49 6E 70 75 74 46 69 6C 65 73 3B 0D 0A 42 45 47 InputFiles;..BEG
00AA10: 49 4E 0D 0A 0D 0A 09 57 72 69 74 65 53 74 72 69 IN.....WriteStri
00AA20: 6E 67 28 27 20 52 65 61 64 69 6E 67 20 6F 6C 64 ng(' Reading old
00AA30: 20 66 69 6C 65 20 27 29 3B 0D 0A 09 4F 6C 64 4C file ');...OldL
00AA40: 65 6E 3A 3D 52 65 61 64 53 74 72 65 61 6D 28 4F en:=ReadStream(O
00AA50: 6C 64 73 2C 4F 6C 64 48 61 73 68 29 3B 0D 0A 09 lds,OldHash);...
00AA60: 57 72 69 74 65 43 61 72 64 28 4F 6C 64 4C 65 6E WriteCard(OldLen
00AA70: 2C 35 29 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 ,5);...WriteStri
00AA80: 6E 67 28 27 20 6C 69 6E 65 73 20 66 6F 75 6E 64 ng(' lines found
00AA90: 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 0D 0A 09 ');WriteLn;.....
00AAA0: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 52 65 WriteString(' Re
00AAB0: 61 64 69 6E 67 20 6E 65 77 20 66 69 6C 65 20 27 ading new file '
00AAC0: 29 3B 0D 0A 09 4E 65 77 4C 65 6E 3A 3D 52 65 61 );...NewLen:=Rea
00AAD0: 64 53 74 72 65 61 6D 28 4E 65 77 73 2C 4E 65 77 dStream(News,New
00AAE0: 48 61 73 68 29 3B 0D 0A 09 57 72 69 74 65 43 61 Hash);...WriteCa
00AAF0: 72 64 28 4E 65 77 4C 65 6E 2C 35 29 3B 0D 0A 09 rd(NewLen,5);...
00AB00: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 6C 69 WriteString(' li
00AB10: 6E 65 73 20 66 6F 75 6E 64 27 29 3B 57 72 69 74 nes found');Writ
00AB20: 65 4C 6E 3B 0D 0A 09 45 4E 44 20 52 65 61 64 49 eLn;...END ReadI
00AB30: 6E 70 75 74 46 69 6C 65 73 3B 0D 0A 0D 0A 42 45 nputFiles;....BE
00AB40: 47 49 4E 09 28 2A 6D 61 69 6E 20 70 72 6F 67 72 GIN.(*main progr
00AB50: 61 6D 2A 29 0D 0A 0D 0A 09 4F 70 65 6E 46 69 6C am*).....OpenFil
00AB60: 65 73 3B 0D 0A 09 52 65 61 64 49 6E 70 75 74 46 es;...ReadInputF
00AB70: 69 6C 65 73 3B 0D 0A 0D 0A 09 57 72 69 74 65 53 iles;.....WriteS
00AB80: 74 72 69 6E 67 28 27 20 47 65 6E 65 72 61 74 69 tring(' Generati
00AB90: 6E 67 20 63 72 6F 73 73 20 6C 69 6E 6B 73 27 29 ng cross links')
00ABA0: 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 47 65 6E 65 ;WriteLn;...Gene
00ABB0: 72 61 74 65 4C 69 6E 6B 73 3B 0D 0A 09 57 72 69 rateLinks;...Wri
00ABC0: 74 65 53 74 72 69 6E 67 28 27 20 4C 69 73 74 69 teString(' Listi
00ABD0: 6E 67 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 0D ng');WriteLn;...
00ABE0: 0A 09 28 2A 72 65 70 6F 73 69 74 69 6F 6E 20 73 ..(*reposition s
00ABF0: 74 72 65 61 6D 73 20 74 6F 20 62 65 67 69 6E 6E treams to beginn
00AC00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
00AC10: 09 00 01 00 02 09 52 E5 09 00 C9 02 00 00 00 02 ......R.........
00AC20: 09 00 C5 02 00 00 00 02 09 00 C1 02 00 00 00 02 ................
00AC30: 09 00 C6 02 00 00 00 02 09 00 C2 02 00 00 00 02 ................
00AC40: 09 00 C7 02 00 00 00 02 09 00 C3 02 00 00 00 02 ................
00AC50: 09 00 C8 02 00 00 00 02 09 00 C4 02 00 00 00 02 ................
00AC60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00AC70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00AC80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00AC90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00AD00: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 2A 57 49 54 ND;....END;(*WIT
00AD10: 48 2A 29 0D 0A 09 45 4E 44 20 43 72 61 63 6B 46 H*)...END CrackF
00AD20: 69 6C 65 4E 61 6D 65 3B 0D 0A 09 0D 0A 50 52 4F ileName;.....PRO
00AD30: 43 45 44 55 52 45 20 55 73 61 67 65 3B 0D 0A 42 CEDURE Usage;..B
00AD40: 45 47 49 4E 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D EGIN...WriteLn;.
00AD50: 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 55 ..WriteString('U
00AD60: 73 61 67 65 20 69 73 3A 20 20 20 43 4F 4D 50 44 sage is: COMPD
00AD70: 49 52 20 77 69 6C 64 20 63 61 72 64 20 66 69 6C IR wild card fil
00AD80: 65 20 6E 61 6D 65 27 29 3B 0D 0A 09 57 72 69 74 e name');...Writ
00AD90: 65 53 74 72 69 6E 67 28 27 2C 20 77 69 6C 64 20 eString(', wild
00ADA0: 63 61 72 64 20 66 69 6C 65 20 6E 61 6D 65 20 5B card file name [
00ADB0: 2C 20 6C 69 73 74 20 66 69 6C 65 5D 20 5B 2F 6F , list file] [/o
00ADC0: 70 74 69 6F 6E 73 5D 27 29 3B 0D 0A 09 57 72 69 ptions]');...Wri
00ADD0: 74 65 4C 6E 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 teLn;WriteLn;...
00ADE0: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 4F 70 WriteString(' Op
00ADF0: 74 69 6F 6E 73 20 61 72 65 3A 20 20 27 29 3B 57 tions are: ');W
00AE00: 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 riteLn;...WriteS
00AE10: 74 72 69 6E 67 28 27 09 09 54 09 63 6F 6D 70 61 tring('..T.compa
00AE20: 72 65 20 6F 6E 6C 79 20 66 69 6C 65 20 74 79 70 re only file typ
00AE30: 65 20 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 e ');WriteLn;...
00AE40: 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 4E WriteString('..N
00AE50: 09 63 6F 6D 70 61 72 65 20 6F 6E 6C 79 20 66 69 .compare only fi
00AE60: 6C 65 20 6E 61 6D 65 27 29 3B 57 72 69 74 65 4C le name');WriteL
00AE70: 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 n;...WriteString
00AE80: 28 27 09 09 43 09 63 6F 6D 70 61 72 65 20 63 6F ('..C.compare co
00AE90: 6E 74 65 6E 74 73 20 6F 66 20 6D 61 74 63 68 69 ntents of matchi
00AEA0: 6E 67 20 66 69 6C 65 73 27 29 3B 57 72 69 74 65 ng files');Write
00AEB0: 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E Ln;...WriteStrin
00AEC0: 67 28 27 09 09 45 09 4F 75 74 70 75 74 20 66 69 g('..E.Output fi
00AED0: 6C 65 20 6E 61 6D 65 73 20 77 68 69 63 68 20 6D le names which m
00AEE0: 61 74 63 68 20 74 6F 20 6C 69 73 74 20 66 69 6C atch to list fil
00AEF0: 65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 e');WriteLn;...W
00AF00: 74 6F 72 79 20 70 75 72 70 6F 73 65 73 2E 20 54 tory purposes. T
00AF10: 68 65 20 70 72 6F 67 72 61 6D 20 69 73 20 77 72 he program is wr
00AF20: 69 74 74 65 6E 20 69 6E 20 0D 0A 09 46 54 4C 20 itten in ...FTL
00AF30: 4D 6F 64 75 6C 61 2D 32 2E 0D 0A 09 2A 29 0D 0A Modula-2....*)..
00AF40: 0D 0A 46 52 4F 4D 20 09 53 59 53 54 45 4D 20 09 ..FROM .SYSTEM .
00AF50: 09 49 4D 50 4F 52 54 20 41 44 44 52 45 53 53 2C .IMPORT ADDRESS,
00AF60: 41 44 52 2C 54 53 49 5A 45 3B 0D 0A 46 52 4F 4D ADR,TSIZE;..FROM
00AF70: 20 09 43 6F 6D 6D 61 6E 64 20 09 49 4D 50 4F 52 .Command .IMPOR
00AF80: 54 20 50 61 72 61 6D 65 74 65 72 2C 50 61 72 63 T Parameter,Parc
00AF90: 6C 61 73 73 2C 47 65 74 50 61 72 61 6D 73 3B 0D lass,GetParams;.
00AFA0: 0A 46 52 4F 4D 20 09 54 65 72 6D 69 6E 61 6C 09 .FROM .Terminal.
00AFB0: 49 4D 50 4F 52 54 20 57 72 69 74 65 53 74 72 69 IMPORT WriteStri
00AFC0: 6E 67 2C 57 72 69 74 65 4C 6E 2C 57 72 69 74 65 ng,WriteLn,Write
00AFD0: 3B 0D 0A 46 52 4F 4D 20 09 53 6F 72 74 20 09 09 ;..FROM .Sort ..
00AFE0: 49 4D 50 4F 52 54 20 53 6F 72 74 52 65 63 6F 72 IMPORT SortRecor
00AFF0: 64 73 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 20 ds;..FROM.Files
00B000: 09 09 49 4D 50 4F 52 54 20 46 69 6C 65 4E 61 6D ..IMPORT FileNam
00B010: 65 2C 46 49 4C 45 2C 43 72 65 61 74 65 3B 0D 0A e,FILE,Create;..
00B020: 46 52 4F 4D 09 47 65 74 46 69 6C 65 73 09 49 4D FROM.GetFiles.IM
00B030: 50 4F 52 54 20 47 65 74 4E 61 6D 65 73 3B 0D 0A PORT GetNames;..
00B040: 46 52 4F 4D 09 53 74 72 69 6E 67 73 09 09 49 4D FROM.Strings..IM
00B050: 50 4F 52 54 20 4C 65 6E 67 74 68 3B 0D 0A 46 52 PORT Length;..FR
00B060: 4F 4D 09 53 74 72 65 61 6D 73 09 09 49 4D 50 4F OM.Streams..IMPO
00B070: 52 54 20 53 54 52 45 41 4D 2C 43 6F 6E 6E 65 63 RT STREAM,Connec
00B080: 74 2C 44 69 73 63 6F 6E 6E 65 63 74 2C 57 72 69 t,Disconnect,Wri
00B090: 74 65 43 68 61 72 2C 44 69 72 65 63 74 69 6F 6E teChar,Direction
00B0A0: 3B 0D 0A 49 4D 50 4F 52 54 09 49 6E 4F 75 74 3B ;..IMPORT.InOut;
00B0B0: 0D 0A 46 52 4F 4D 09 46 69 6C 65 4F 70 73 09 09 ..FROM.FileOps..
00B0C0: 49 4D 50 4F 52 54 20 46 69 6C 65 43 6F 6D 70 3B IMPORT FileComp;
00B0D0: 0D 0A 43 4F 4E 53 54 09 4D 61 78 46 69 6C 65 73 ..CONST.MaxFiles
00B0E0: 3D 35 31 32 3B 09 28 2A 6D 61 78 20 66 69 6C 65 =512;.(*max file
00B0F0: 73 20 74 6F 20 62 65 20 6D 61 74 63 68 65 64 2A s to be matched*
00B100: 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 ND;.....END;....
00B110: 4C 6F 63 3A 3D 4C 6F 63 2B 31 32 38 3B 0D 0A 09 Loc:=Loc+128;...
00B120: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 43 6F 6D 70 .END;...END Comp
00B130: 42 69 6E 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A Bin.............
00B140: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00B150: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00B160: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00B170: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00B180: 65 65 6E 20 70 72 6F 63 65 73 73 65 64 20 61 6E een processed an
00B190: 64 20 77 68 69 63 68 0D 0A 09 61 72 65 20 61 73 d which...are as
00B1A0: 73 6F 63 69 61 74 65 64 20 77 69 74 68 20 6C 69 sociated with li
00B1B0: 6E 65 73 20 69 6E 20 74 68 65 20 6E 65 77 20 66 nes in the new f
00B1C0: 69 6C 65 2E 0D 0A 0D 0A 09 2A 29 0D 0A 0D 0A 46 ile......*)....F
00B1D0: 52 4F 4D 20 09 53 59 53 54 45 4D 20 09 09 49 4D ROM .SYSTEM ..IM
00B1E0: 50 4F 52 54 20 41 44 44 52 45 53 53 2C 41 44 52 PORT ADDRESS,ADR
00B1F0: 2C 54 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 09 43 ,TSIZE;..FROM .C
00B200: 6F 6D 6D 61 6E 64 20 09 49 4D 50 4F 52 54 20 50 ommand .IMPORT P
00B210: 61 72 61 6D 65 74 65 72 2C 50 61 72 63 6C 61 73 arameter,Parclas
00B220: 73 2C 47 65 74 50 61 72 61 6D 73 3B 0D 0A 46 52 s,GetParams;..FR
00B230: 4F 4D 20 09 46 69 6C 65 73 20 09 09 49 4D 50 4F OM .Files ..IMPO
00B240: 52 54 20 46 69 6C 65 4E 61 6D 65 2C 46 49 4C 45 RT FileName,FILE
00B250: 2C 4C 6F 6F 6B 75 70 2C 43 72 65 61 74 65 3B 0D ,Lookup,Create;.
00B260: 0A 46 52 4F 4D 20 09 53 74 72 65 61 6D 73 20 09 .FROM .Streams .
00B270: 49 4D 50 4F 52 54 20 43 6F 6E 6E 65 63 74 2C 44 IMPORT Connect,D
00B280: 69 73 63 6F 6E 6E 65 63 74 2C 53 54 52 45 41 4D isconnect,STREAM
00B290: 2C 69 6E 70 75 74 2C 6F 75 74 70 75 74 2C 57 72 ,input,output,Wr
00B2A0: 69 74 65 43 68 61 72 2C 0D 0A 09 09 09 09 52 65 iteChar,......Re
00B2B0: 61 64 43 68 61 72 2C 45 4F 53 2C 57 72 69 74 65 adChar,EOS,Write
00B2C0: 52 65 63 2C 52 65 73 65 74 3B 0D 0A 46 52 4F 4D Rec,Reset;..FROM
00B2D0: 20 09 54 65 72 6D 69 6E 61 6C 09 49 4D 50 4F 52 .Terminal.IMPOR
00B2E0: 54 20 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72 T WriteString,Wr
00B2F0: 69 74 65 4C 6E 3B 0D 0A 46 52 4F 4D 20 09 53 6F iteLn;..FROM .So
00B300: 29 0D 0A 0D 0A 54 59 50 45 20 09 0D 0A 09 43 6F )....TYPE ....Co
00B310: 6D 70 43 6C 61 73 73 3D 28 57 68 6F 6C 65 2C 4E mpClass=(Whole,N
00B320: 61 6D 65 2C 54 79 70 65 29 3B 0D 0A 09 46 69 6C ame,Type);...Fil
00B330: 65 52 65 63 6F 72 64 3D 52 45 43 4F 52 44 0D 0A eRecord=RECORD..
00B340: 09 09 44 65 76 69 63 65 3A 43 48 41 52 3B 0D 0A ..Device:CHAR;..
00B350: 09 09 4E 61 6D 65 3A 41 52 52 41 59 5B 31 2E 2E ..Name:ARRAY[1..
00B360: 38 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 09 54 8] OF CHAR;....T
00B370: 79 70 65 3A 41 52 52 41 59 5B 31 2E 2E 33 5D 20 ype:ARRAY[1..3]
00B380: 4F 46 20 43 48 41 52 3B 0D 0A 09 09 45 4E 44 3B OF CHAR;....END;
00B390: 0D 0A 09 50 46 69 6C 65 4E 61 6D 65 3D 50 4F 49 ...PFileName=POI
00B3A0: 4E 54 45 52 20 54 4F 20 46 69 6C 65 52 65 63 6F NTER TO FileReco
00B3B0: 72 64 3B 0D 0A 09 46 69 6C 65 41 72 72 61 79 3D rd;...FileArray=
00B3C0: 41 52 52 41 59 5B 31 2E 2E 4D 61 78 46 69 6C 65 ARRAY[1..MaxFile
00B3D0: 73 5D 20 4F 46 20 46 69 6C 65 52 65 63 6F 72 64 s] OF FileRecord
00B3E0: 3B 0D 0A 56 41 52 09 0D 0A 09 50 61 72 61 6D 3A ;..VAR....Param:
00B3F0: 41 52 52 41 59 5B 31 2E 2E 34 5D 20 4F 46 20 50 ARRAY[1..4] OF P
00B400: 61 72 61 6D 65 74 65 72 3B 09 09 28 2A 61 72 65 arameter;..(*are
00B410: 61 20 66 6F 72 20 63 6F 6D 6D 61 6E 64 20 6C 69 a for command li
00B420: 6E 65 2A 29 0D 0A 09 43 6F 75 6E 74 3A 49 4E 54 ne*)...Count:INT
00B430: 45 47 45 52 3B 09 09 09 09 28 2A 70 61 72 61 6D EGER;....(*param
00B440: 65 74 65 72 73 2A 29 0D 0A 0D 0A 09 4C 65 66 74 eters*).....Left
00B450: 4E 61 6D 65 73 2C 52 69 67 68 74 4E 61 6D 65 73 Names,RightNames
00B460: 3A 46 69 6C 65 41 72 72 61 79 3B 0D 0A 09 4C 65 :FileArray;...Le
00B470: 66 74 4E 61 6D 65 43 6F 75 6E 74 2C 52 69 67 68 ftNameCount,Righ
00B480: 74 4E 61 6D 65 43 6F 75 6E 74 3A 49 4E 54 45 47 tNameCount:INTEG
00B490: 45 52 3B 0D 0A 0D 0A 09 43 6F 6D 70 63 6C 61 73 ER;.....Compclas
00B4A0: 73 3A 43 6F 6D 70 43 6C 61 73 73 3D 57 68 6F 6C s:CompClass=Whol
00B4B0: 65 3B 0D 0A 09 4F 75 74 70 75 74 41 64 64 65 64 e;...OutputAdded
00B4C0: 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D :BOOLEAN=FALSE;.
00B4D0: 0A 09 4F 75 74 70 75 74 45 71 75 61 6C 3A 42 4F ..OutputEqual:BO
00B4E0: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 43 OLEAN=FALSE;...C
00B4F0: 6F 6D 70 61 72 65 43 6F 6E 74 65 6E 74 73 3A 42 ompareContents:B
00B500: 28 2A 09 09 52 65 76 69 73 69 6F 6E 20 48 69 73 (*..Revision His
00B510: 74 6F 72 79 3A 0D 0A 0D 0A 09 09 32 34 20 4D 61 tory:......24 Ma
00B520: 72 63 68 20 38 36 20 20 44 61 76 65 20 4D 6F 6F rch 86 Dave Moo
00B530: 72 65 0D 0A 09 09 09 46 69 78 65 64 20 63 6F 6D re.....Fixed com
00B540: 70 69 6C 61 74 69 6F 6E 20 65 72 72 6F 72 73 20 pilation errors
00B550: 63 61 75 73 65 64 20 62 79 20 75 70 67 72 61 64 caused by upgrad
00B560: 69 6E 67 20 6F 66 0D 0A 09 09 09 63 6F 6D 70 69 ing of.....compi
00B570: 6C 65 72 20 65 72 72 6F 72 20 63 68 65 63 6B 69 ler error checki
00B580: 6E 67 2E 0D 0A 09 09 09 49 6E 63 72 65 61 73 65 ng......Increase
00B590: 64 20 4D 61 78 46 69 6C 65 73 20 74 6F 20 35 31 d MaxFiles to 51
00B5A0: 32 2E 0D 0A 0D 0A 09 09 42 75 67 73 3A 0D 0A 0D 2.......Bugs:...
00B5B0: 0A 09 09 09 46 61 69 6C 73 20 69 66 20 6D 6F 72 ....Fails if mor
00B5C0: 65 20 74 68 61 6E 20 4D 61 78 46 69 6C 65 73 20 e than MaxFiles
00B5D0: 66 69 6C 65 73 20 61 72 65 20 66 6F 75 6E 64 2E files are found.
00B5E0: 20 54 68 69 73 0D 0A 09 09 09 69 73 20 6E 6F 74 This.....is not
00B5F0: 20 61 20 70 72 6F 62 6C 65 6D 20 75 6E 64 65 72 a problem under
00B600: 20 43 50 2F 4D 20 73 69 6E 63 65 20 64 69 72 65 CP/M since dire
00B610: 63 74 6F 72 69 65 73 20 66 69 6C 6C 0D 0A 09 09 ctories fill....
00B620: 09 62 65 66 6F 72 65 20 74 68 61 74 20 6D 61 6E .before that man
00B630: 79 20 66 69 6C 65 73 20 61 72 65 20 66 6F 75 6E y files are foun
00B640: 64 2C 20 62 75 74 20 69 74 20 63 61 6E 20 63 61 d, but it can ca
00B650: 75 73 65 0D 0A 09 09 09 70 72 6F 62 6C 65 6D 73 use.....problems
00B660: 20 75 6E 64 65 72 20 4D 53 44 4F 53 20 28 77 69 under MSDOS (wi
00B670: 74 68 20 61 20 5A 38 30 20 63 61 72 64 29 0D 0A th a Z80 card)..
00B680: 2A 29 0D 0A 09 09 09 0D 0A 0D 0A 28 2A 24 6C 2D *).........(*$l-
00B690: 2A 29 0D 0A 4D 4F 44 55 4C 45 20 43 6F 6D 70 44 *)..MODULE CompD
00B6A0: 69 72 3B 0D 0A 0D 0A 28 2A 09 43 6F 6D 70 44 69 ir;....(*.CompDi
00B6B0: 72 20 2D 20 43 6F 6D 70 61 72 65 20 74 77 6F 20 r - Compare two
00B6C0: 64 69 72 65 63 74 6F 72 69 65 73 0D 0A 0D 0A 09 directories.....
00B6D0: 44 61 76 65 20 4D 6F 6F 72 65 0D 0A 09 43 65 72 Dave Moore...Cer
00B6E0: 65 6E 6B 6F 66 20 43 6F 6D 70 75 74 69 6E 67 0D enkof Computing.
00B6F0: 0A 09 50 4F 20 42 6F 78 20 33 30 35 20 57 79 6E ..PO Box 305 Wyn
00B700: 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 OOLEAN=FALSE;...
00B710: 4F 75 74 70 75 74 44 65 6C 65 74 65 64 3A 42 4F OutputDeleted:BO
00B720: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 4F OLEAN=FALSE;...O
00B730: 75 74 70 75 74 4D 6F 64 69 66 69 65 64 3A 42 4F utputModified:BO
00B740: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 0D 0A OLEAN=FALSE;....
00B750: 09 4C 69 73 74 4F 70 65 6E 3A 42 4F 4F 4C 45 41 .ListOpen:BOOLEA
00B760: 4E 3D 46 41 4C 53 45 3B 0D 0A 09 4C 69 73 74 3A N=FALSE;...List:
00B770: 53 54 52 45 41 4D 3B 0D 0A 09 4C 69 73 74 46 3A STREAM;...ListF:
00B780: 46 49 4C 45 3B 0D 0A 50 52 4F 43 45 44 55 52 45 FILE;..PROCEDURE
00B790: 20 43 72 61 63 6B 46 69 6C 65 4E 61 6D 65 28 54 CrackFileName(T
00B7A0: 65 78 74 3A 41 52 52 41 59 20 4F 46 20 43 48 41 ext:ARRAY OF CHA
00B7B0: 52 3B 56 41 52 20 52 65 63 3A 46 69 6C 65 52 65 R;VAR Rec:FileRe
00B7C0: 63 6F 72 64 29 3B 0D 0A 0D 0A 28 2A 09 43 6F 6E cord);....(*.Con
00B7D0: 76 65 72 74 20 74 68 65 20 74 65 78 74 20 66 6F vert the text fo
00B7E0: 72 6D 20 6F 66 20 61 20 66 69 6C 65 20 6E 61 6D rm of a file nam
00B7F0: 65 20 74 6F 20 74 68 65 0D 0A 09 65 78 70 61 6E e to the...expan
00B800: 64 65 64 20 66 6F 72 6D 2A 29 0D 0A 56 41 52 09 ded form*)..VAR.
00B810: 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 i,j:CARDINAL;..B
00B820: 45 47 49 4E 0D 0A 09 57 49 54 48 20 52 65 63 20 EGIN...WITH Rec
00B830: 44 4F 0D 0A 09 09 49 46 20 54 65 78 74 5B 31 5D DO....IF Text[1]
00B840: 3D 27 3A 27 20 54 48 45 4E 0D 0A 09 09 09 44 65 =':' THEN.....De
00B850: 76 69 63 65 3A 3D 43 41 50 28 54 65 78 74 5B 30 vice:=CAP(Text[0
00B860: 5D 29 3B 0D 0A 09 09 09 69 3A 3D 32 3B 0D 0A 09 ]);.....i:=2;...
00B870: 09 45 4C 53 45 0D 0A 09 09 09 44 65 76 69 63 65 .ELSE.....Device
00B880: 3A 3D 27 20 27 3B 0D 0A 09 09 09 69 3A 3D 30 3B :=' ';.....i:=0;
00B890: 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 6A 3A 3D .....END;....j:=
00B8A0: 31 3B 0D 0A 0D 0A 09 09 28 2A 09 70 69 63 6B 20 1;......(*.pick
00B8B0: 75 70 20 66 69 6C 65 20 6E 61 6D 65 20 2A 29 0D up file name *).
00B8C0: 0A 0D 0A 09 09 57 48 49 4C 45 20 20 20 28 69 3C .....WHILE (i<
00B8D0: 3D 48 49 47 48 28 54 65 78 74 29 29 0D 0A 09 09 =HIGH(Text))....
00B8E0: 20 20 20 20 41 4E 44 09 28 54 65 78 74 5B 69 5D AND.(Text[i]
00B8F0: 3C 3E 30 78 29 0D 0A 09 09 20 20 20 20 41 4E 44 <>0x).... AND
00B900: 6E 75 6D 20 43 65 6E 74 72 61 6C 20 34 31 37 38 num Central 4178
00B910: 0D 0A 0D 0A 0D 0A 09 43 61 6C 6C 20 69 73 20 43 .......Call is C
00B920: 4F 4D 50 44 49 52 20 20 20 77 69 6C 64 20 63 61 OMPDIR wild ca
00B930: 72 64 2C 77 69 6C 64 20 63 61 72 64 2C 6C 69 73 rd,wild card,lis
00B940: 74 20 66 69 6C 65 20 5B 6F 70 74 69 6F 6E 73 0D t file [options.
00B950: 0A 0D 0A 09 57 68 65 72 65 20 65 61 63 68 20 77 ....Where each w
00B960: 69 6C 64 20 63 61 72 64 20 70 72 6F 64 75 63 65 ild card produce
00B970: 73 20 6F 6E 65 20 6F 66 20 74 68 65 20 6C 69 73 s one of the lis
00B980: 74 73 20 74 6F 20 63 6F 6D 70 61 72 65 0D 0A 0D ts to compare...
00B990: 0A 09 46 6F 72 20 65 78 61 6D 70 6C 65 2C 20 74 ..For example, t
00B9A0: 6F 20 63 6F 6D 70 61 72 65 20 74 77 6F 20 64 69 o compare two di
00B9B0: 73 63 73 2C 20 64 6F 3A 20 43 4F 4D 50 44 49 52 scs, do: COMPDIR
00B9C0: 20 61 3A 2A 2E 2A 20 62 3A 2A 2E 2A 0D 0A 0D 0A a:*.* b:*.*....
00B9D0: 09 4F 70 74 69 6F 6E 73 20 61 72 65 20 61 6E 79 .Options are any
00B9E0: 20 6F 66 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E of the followin
00B9F0: 67 3A 0D 0A 09 09 54 09 63 6F 6D 70 61 72 65 20 g:....T.compare
00BA00: 6F 6E 6C 79 20 66 69 6C 65 20 74 79 70 65 20 28 only file type (
00BA10: 62 79 20 64 65 66 61 75 6C 74 2C 20 74 68 65 20 by default, the
00BA20: 77 68 6F 6C 65 20 6E 61 6D 65 20 69 73 20 63 6F whole name is co
00BA30: 6D 70 61 72 65 64 29 0D 0A 09 09 09 28 62 79 20 mpared).....(by
00BA40: 66 69 6C 65 20 74 79 70 65 2C 20 49 20 6D 65 61 file type, I mea
00BA50: 6E 20 74 68 65 20 28 33 29 20 63 68 61 72 61 63 n the (3) charac
00BA60: 74 65 72 73 20 61 66 74 65 72 20 74 68 65 20 64 ters after the d
00BA70: 6F 74 29 0D 0A 09 09 4E 09 63 6F 6D 70 61 72 65 ot)....N.compare
00BA80: 20 6F 6E 6C 79 20 66 69 6C 65 20 6E 61 6D 65 0D only file name.
00BA90: 0A 09 09 43 09 69 66 20 66 69 6C 65 20 6E 61 6D ...C.if file nam
00BAA0: 65 73 20 6D 61 74 63 68 2C 20 63 68 65 63 6B 20 es match, check
00BAB0: 66 69 6C 65 20 63 6F 6E 74 65 6E 74 73 20 61 73 file contents as
00BAC0: 20 77 65 6C 6C 0D 0A 09 09 0D 0A 09 09 0D 0A 09 well...........
00BAD0: 09 09 54 68 65 73 65 20 74 77 6F 20 6F 70 74 69 ..These two opti
00BAE0: 6F 6E 73 20 61 72 65 20 6D 75 74 75 61 6C 6C 79 ons are mutually
00BAF0: 20 65 78 63 6C 75 73 69 76 65 0D 0A 0D 0A 09 09 exclusive......
00BB00: 20 28 54 65 78 74 5B 69 5D 3C 3E 27 20 27 29 0D (Text[i]<>' ').
00BB10: 0A 09 09 20 20 20 20 41 4E 44 09 28 54 65 78 74 ... AND.(Text
00BB20: 5B 69 5D 3C 3E 27 2E 27 29 20 44 4F 0D 0A 09 09 [i]<>'.') DO....
00BB30: 09 49 46 20 20 6A 3C 3D 48 49 47 48 28 4E 61 6D .IF j<=HIGH(Nam
00BB40: 65 29 20 54 48 45 4E 20 4E 61 6D 65 5B 6A 5D 3A e) THEN Name[j]:
00BB50: 3D 54 65 78 74 5B 69 5D 20 45 4E 44 3B 0D 0A 09 =Text[i] END;...
00BB60: 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 49 4E ..INC(j);.....IN
00BB70: 43 28 69 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A C(i);.....END;..
00BB80: 09 09 46 4F 52 20 6A 3A 3D 6A 20 54 4F 20 48 49 ..FOR j:=j TO HI
00BB90: 47 48 28 4E 61 6D 65 29 20 44 4F 20 4E 61 6D 65 GH(Name) DO Name
00BBA0: 5B 6A 5D 3A 3D 30 78 20 45 4E 44 3B 0D 0A 0D 0A [j]:=0x END;....
00BBB0: 09 09 28 2A 4E 6F 74 65 20 74 68 61 74 20 49 20 ..(*Note that I
00BBC0: 75 73 65 20 7A 65 72 6F 20 69 6E 73 74 65 61 64 use zero instead
00BBD0: 20 6F 66 20 62 6C 61 6E 6B 20 66 69 6C 6C 20 74 of blank fill t
00BBE0: 6F 20 73 69 6D 70 6C 69 66 79 20 6C 69 73 74 69 o simplify listi
00BBF0: 6E 67 0D 0A 09 09 20 20 6F 66 20 74 68 65 20 6E ng.... of the n
00BC00: 61 6D 65 73 2A 29 0D 0A 09 09 6A 3A 3D 31 3B 0D ames*)....j:=1;.
00BC10: 0A 09 09 49 46 20 54 65 78 74 5B 69 5D 3D 27 2E ...IF Text[i]='.
00BC20: 27 20 54 48 45 4E 20 49 4E 43 28 69 29 20 45 4E ' THEN INC(i) EN
00BC30: 44 3B 0D 0A 09 09 57 48 49 4C 45 20 20 20 28 69 D;....WHILE (i
00BC40: 3C 3D 48 49 47 48 28 54 65 78 74 29 29 0D 0A 09 <=HIGH(Text))...
00BC50: 09 20 20 20 20 41 4E 44 09 28 54 65 78 74 5B 69 . AND.(Text[i
00BC60: 5D 3C 3E 30 78 29 0D 0A 09 09 20 20 20 20 41 4E ]<>0x).... AN
00BC70: 44 09 28 54 65 78 74 5B 69 5D 3C 3E 27 20 27 29 D.(Text[i]<>' ')
00BC80: 20 44 4F 0D 0A 09 09 09 49 46 20 20 6A 3C 3D 48 DO.....IF j<=H
00BC90: 49 47 48 28 54 79 70 65 29 20 54 48 45 4E 20 54 IGH(Type) THEN T
00BCA0: 79 70 65 5B 6A 5D 3A 3D 54 65 78 74 5B 69 5D 20 ype[j]:=Text[i]
00BCB0: 45 4E 44 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 3B END;.....INC(j);
00BCC0: 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 .....INC(i);....
00BCD0: 09 45 4E 44 3B 0D 0A 09 09 46 4F 52 20 6A 3A 3D .END;....FOR j:=
00BCE0: 6A 20 54 4F 20 48 49 47 48 28 54 79 70 65 29 20 j TO HIGH(Type)
00BCF0: 44 4F 20 54 79 70 65 5B 6A 5D 3A 3D 30 78 20 45 DO Type[j]:=0x E
00BD00: 45 09 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61 E.Output file na
00BD10: 6D 65 73 20 77 68 69 63 68 20 6D 61 74 63 68 20 mes which match
00BD20: 74 6F 20 6C 69 73 74 20 66 69 6C 65 0D 0A 09 09 to list file....
00BD30: 41 09 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61 A.Output file na
00BD40: 6D 65 73 20 77 68 69 63 68 20 68 61 76 65 20 62 mes which have b
00BD50: 65 65 6E 20 61 64 64 65 64 20 74 6F 20 74 68 65 een added to the
00BD60: 20 73 65 63 6F 6E 64 20 6C 69 73 74 0D 0A 09 09 second list....
00BD70: 44 09 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61 D.Output file na
00BD80: 6D 65 73 20 77 68 69 63 68 20 68 61 76 65 20 62 mes which have b
00BD90: 65 65 6E 20 64 65 6C 65 74 65 64 20 66 72 6F 6D een deleted from
00BDA0: 20 74 68 65 20 66 69 72 73 74 20 6C 69 73 74 0D the first list.
00BDB0: 0A 09 09 4D 09 4F 75 74 70 75 74 20 66 69 6C 65 ...M.Output file
00BDC0: 73 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65 s which have bee
00BDD0: 6E 20 6D 6F 64 69 66 69 65 64 20 74 6F 20 74 68 n modified to th
00BDE0: 65 20 6C 69 73 74 20 66 69 6C 65 0D 0A 0D 0A 09 e list file.....
00BDF0: 09 09 54 68 65 73 65 20 6F 70 74 69 6F 6E 73 20 ..These options
00BE00: 6D 61 79 20 62 65 20 63 6F 6D 62 69 6E 65 64 0D may be combined.
00BE10: 0A 0D 0A 0D 0A 09 54 68 65 20 70 72 6F 67 72 61 ......The progra
00BE20: 6D 20 63 61 6E 20 62 65 20 76 65 72 79 20 75 73 m can be very us
00BE30: 65 66 75 6C 20 66 6F 72 20 75 70 64 61 74 69 6E eful for updatin
00BE40: 67 20 64 69 73 63 73 20 62 61 73 65 64 20 6F 6E g discs based on
00BE50: 20 74 68 65 69 72 0D 0A 09 65 78 69 73 74 69 6E their...existin
00BE60: 67 20 63 6F 6E 74 65 6E 74 73 2C 20 77 68 69 63 g contents, whic
00BE70: 68 20 69 73 20 61 6E 20 61 72 65 61 20 69 6E 20 h is an area in
00BE80: 77 68 69 63 68 20 73 77 65 65 70 20 69 73 20 77 which sweep is w
00BE90: 65 61 6B 2E 20 0D 0A 0D 0A 09 54 68 69 73 20 69 eak. .....This i
00BEA0: 73 20 61 20 6D 6F 64 69 66 69 65 64 20 61 6E 64 s a modified and
00BEB0: 20 65 6E 68 61 6E 63 65 64 20 76 65 72 73 69 6F enhanced versio
00BEC0: 6E 20 6F 66 20 74 68 65 20 6F 72 69 67 69 6E 61 n of the origina
00BED0: 6C 20 43 6F 6D 70 44 69 72 20 70 72 6F 67 72 61 l CompDir progra
00BEE0: 6D 0D 0A 09 77 68 69 63 68 20 77 61 73 20 77 72 m...which was wr
00BEF0: 69 74 74 65 6E 20 66 6F 72 20 65 78 70 6F 73 69 itten for exposi
00BF00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
00BF10: 0A 00 01 00 02 09 52 E5 0A 00 C9 02 00 00 00 02 ......R.........
00BF20: 0A 00 C5 02 00 00 00 02 0A 00 C1 02 00 00 00 02 ................
00BF30: 0A 00 C6 02 00 00 00 02 0A 00 C2 02 00 00 00 02 ................
00BF40: 0A 00 C7 02 00 00 00 02 0A 00 C3 02 00 00 00 02 ................
00BF50: 0A 00 C8 02 00 00 00 02 0A 00 C4 02 00 00 00 02 ................
00BF60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BF70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BF80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BF90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00C000: 47 49 4E 0D 0A 09 53 65 74 4E 61 6D 65 28 66 31 GIN...SetName(f1
00C010: 2C 66 6E 31 29 3B 0D 0A 09 53 65 74 4E 61 6D 65 ,fn1);...SetName
00C020: 28 66 32 2C 66 6E 32 29 3B 0D 0A 09 52 45 54 55 (f2,fn2);...RETU
00C030: 52 4E 20 46 69 6C 65 43 6F 6D 70 28 66 6E 31 2C RN FileComp(fn1,
00C040: 66 6E 32 29 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 fn2)...END Compa
00C050: 72 65 4F 4B 3B 0D 0A 09 09 0D 0A 56 41 52 09 72 reOK;......VAR.r
00C060: 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 eply:INTEGER;..B
00C070: 45 47 49 4E 0D 0A 0D 0A 0D 0A 09 47 65 74 50 61 EGIN.......GetPa
00C080: 72 61 6D 73 28 50 61 72 61 6D 2C 43 6F 75 6E 74 rams(Param,Count
00C090: 29 3B 0D 0A 09 49 46 20 28 43 6F 75 6E 74 3E 30 );...IF (Count>0
00C0A0: 29 20 41 4E 44 20 28 50 61 72 61 6D 5B 43 6F 75 ) AND (Param[Cou
00C0B0: 6E 74 5D 5E 2E 43 6C 61 73 73 3D 6F 70 74 69 6F nt]^.Class=optio
00C0C0: 6E 29 20 54 48 45 4E 0D 0A 09 09 47 65 74 4F 70 n) THEN....GetOp
00C0D0: 74 69 6F 6E 73 28 50 61 72 61 6D 5B 43 6F 75 6E tions(Param[Coun
00C0E0: 74 5D 29 3B 0D 0A 09 09 44 45 43 28 43 6F 75 6E t]);....DEC(Coun
00C0F0: 74 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 t);....END;...IF
00C100: 20 43 6F 75 6E 74 3C 32 20 54 48 45 4E 20 55 73 Count<2 THEN Us
00C110: 61 67 65 20 45 4E 44 3B 0D 0A 20 20 20 20 20 20 age END;..
00C120: 20 20 49 46 20 43 6F 75 6E 74 3D 33 20 54 48 45 IF Count=3 THE
00C130: 4E 20 0D 0A 09 09 43 72 65 61 74 65 28 4C 69 73 N ....Create(Lis
00C140: 74 46 2C 46 69 6C 65 4E 61 6D 65 28 50 61 72 61 tF,FileName(Para
00C150: 6D 5B 33 5D 5E 2E 43 68 61 72 73 29 2C 72 65 70 m[3]^.Chars),rep
00C160: 6C 79 29 3B 0D 0A 09 09 49 46 20 72 65 70 6C 79 ly);....IF reply
00C170: 3C 30 20 54 48 45 4E 0D 0A 09 09 09 57 72 69 74 <0 THEN.....Writ
00C180: 65 53 74 72 69 6E 67 28 27 20 43 6F 75 6C 64 20 eString(' Could
00C190: 6E 6F 74 20 6F 70 65 6E 20 6F 75 74 70 75 74 20 not open output
00C1A0: 66 69 6C 65 20 27 29 3B 0D 0A 09 09 09 57 72 69 file ');.....Wri
00C1B0: 74 65 53 74 72 69 6E 67 28 50 61 72 61 6D 5B 33 teString(Param[3
00C1C0: 5D 5E 2E 43 68 61 72 73 29 3B 0D 0A 09 09 09 57 ]^.Chars);.....W
00C1D0: 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 48 41 4C 54 riteLn;.....HALT
00C1E0: 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 43 6F ;.....END;....Co
00C1F0: 6E 6E 65 63 74 28 4C 69 73 74 2C 4C 69 73 74 46 nnect(List,ListF
00C200: 5D 3D 30 78 29 20 41 4E 44 20 28 50 61 72 61 6D ]=0x) AND (Param
00C210: 5E 2E 43 68 61 72 73 5B 31 5D 3D 27 3A 27 29 20 ^.Chars[1]=':')
00C220: 54 48 45 4E 0D 0A 09 09 54 65 78 74 3A 3D 27 20 THEN....Text:='
00C230: 3A 2A 2E 2A 27 3B 0D 0A 09 09 54 65 78 74 5B 30 :*.*';....Text[0
00C240: 5D 3A 3D 50 61 72 61 6D 5E 2E 43 68 61 72 73 5B ]:=Param^.Chars[
00C250: 30 5D 3B 0D 0A 09 09 47 65 74 4E 61 6D 65 73 28 0];....GetNames(
00C260: 54 65 78 74 2C 4E 61 6D 65 54 65 78 74 2C 4E 61 Text,NameText,Na
00C270: 6D 65 43 6F 75 6E 74 29 3B 0D 0A 09 45 4C 53 45 meCount);...ELSE
00C280: 0D 0A 09 09 47 65 74 4E 61 6D 65 73 28 50 61 72 ....GetNames(Par
00C290: 61 6D 5E 2E 43 68 61 72 73 2C 4E 61 6D 65 54 65 am^.Chars,NameTe
00C2A0: 78 74 2C 4E 61 6D 65 43 6F 75 6E 74 29 3B 0D 0A xt,NameCount);..
00C2B0: 09 09 45 4E 44 3B 0D 0A 09 0D 0A 09 28 2A 63 72 ..END;......(*cr
00C2C0: 61 63 6B 20 6E 61 6D 65 73 2A 29 0D 0A 0D 0A 09 ack names*).....
00C2D0: 46 4F 52 20 69 3A 3D 31 20 54 4F 20 4E 61 6D 65 FOR i:=1 TO Name
00C2E0: 43 6F 75 6E 74 20 44 4F 0D 0A 09 09 43 72 61 63 Count DO....Crac
00C2F0: 6B 46 69 6C 65 4E 61 6D 65 28 4E 61 6D 65 54 65 kFileName(NameTe
00C300: 78 74 5B 69 5D 2C 4E 61 6D 65 73 5B 69 5D 29 3B xt[i],Names[i]);
00C310: 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 49 46 20 ....END;.....IF
00C320: 4E 61 6D 65 43 6F 75 6E 74 3E 31 20 54 48 45 4E NameCount>1 THEN
00C330: 0D 0A 09 09 53 6F 72 74 52 65 63 6F 72 64 73 28 ....SortRecords(
00C340: 41 44 52 28 4E 61 6D 65 73 29 2C 43 41 52 44 49 ADR(Names),CARDI
00C350: 4E 41 4C 28 4E 61 6D 65 43 6F 75 6E 74 29 2C 0D NAL(NameCount),.
00C360: 0A 09 09 09 54 53 49 5A 45 28 46 69 6C 65 52 65 ....TSIZE(FileRe
00C370: 63 6F 72 64 29 2C 43 6F 6D 70 61 72 29 3B 0D 0A cord),Compar);..
00C380: 09 09 45 4E 44 3B 0D 0A 09 09 09 0D 0A 09 09 09 ..END;..........
00C390: 0D 0A 09 45 4E 44 20 45 78 70 61 6E 64 4E 61 6D ...END ExpandNam
00C3A0: 65 73 3B 0D 0A 0D 0A 56 41 52 09 69 2C 6A 3A 49 es;....VAR.i,j:I
00C3B0: 4E 54 45 47 45 52 3B 0D 0A 50 52 4F 43 45 44 55 NTEGER;..PROCEDU
00C3C0: 52 45 20 57 72 69 74 65 54 6F 4C 69 73 74 28 56 RE WriteToList(V
00C3D0: 41 52 20 4E 3A 46 69 6C 65 52 65 63 6F 72 64 29 AR N:FileRecord)
00C3E0: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20 ;..BEGIN...WITH
00C3F0: 4E 20 44 4F 0D 0A 09 09 49 6E 4F 75 74 2E 57 72 N DO....InOut.Wr
00C400: 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 41 09 riteString('..A.
00C410: 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61 6D 65 Output file name
00C420: 73 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65 s which have bee
00C430: 6E 20 61 64 64 65 64 20 74 6F 20 74 68 65 20 73 n added to the s
00C440: 65 63 6F 6E 64 20 6C 69 73 74 27 29 3B 57 72 69 econd list');Wri
00C450: 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 teLn;...WriteStr
00C460: 69 6E 67 28 27 09 09 44 09 4F 75 74 70 75 74 20 ing('..D.Output
00C470: 66 69 6C 65 20 6E 61 6D 65 73 20 77 68 69 63 68 file names which
00C480: 20 68 61 76 65 20 62 65 65 6E 20 64 65 6C 65 74 have been delet
00C490: 65 64 20 66 72 6F 6D 20 74 68 65 20 66 69 72 73 ed from the firs
00C4A0: 74 20 6C 69 73 74 27 29 3B 57 72 69 74 65 4C 6E t list');WriteLn
00C4B0: 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 ;...WriteString(
00C4C0: 27 09 09 4D 09 4F 75 74 70 75 74 20 66 69 6C 65 '..M.Output file
00C4D0: 20 6E 61 6D 65 73 20 6F 66 20 6D 6F 64 69 66 69 names of modifi
00C4E0: 65 64 20 66 69 6C 65 73 20 27 29 3B 57 72 69 74 ed files ');Writ
00C4F0: 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 eLn;...WriteStri
00C500: 6E 67 28 27 09 09 09 28 49 6D 70 6C 69 65 73 20 ng('...(Implies
00C510: 43 20 6F 70 74 69 6F 6E 29 27 29 3B 57 72 69 74 C option)');Writ
00C520: 65 4C 6E 3B 0D 0A 09 48 41 4C 54 0D 0A 09 45 4E eLn;...HALT...EN
00C530: 44 20 55 73 61 67 65 3B 0D 0A 0D 0A 0D 0A 50 52 D Usage;......PR
00C540: 4F 43 45 44 55 52 45 20 47 65 74 4F 70 74 69 6F OCEDURE GetOptio
00C550: 6E 73 28 70 3A 50 61 72 61 6D 65 74 65 72 29 3B ns(p:Parameter);
00C560: 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C ..VAR.i:CARDINAL
00C570: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20 ;..BEGIN...WITH
00C580: 70 5E 20 44 4F 0D 0A 09 09 69 3A 3D 30 3B 0D 0A p^ DO....i:=0;..
00C590: 09 09 4C 4F 4F 50 0D 0A 09 09 09 43 41 53 45 20 ..LOOP.....CASE
00C5A0: 43 68 61 72 73 5B 69 5D 20 4F 46 0D 0A 09 09 09 Chars[i] OF.....
00C5B0: 09 30 78 3A 45 58 49 54 7C 0D 0A 09 09 09 09 27 .0x:EXIT|......'
00C5C0: 54 27 3A 43 6F 6D 70 63 6C 61 73 73 3A 3D 54 79 T':Compclass:=Ty
00C5D0: 70 65 7C 0D 0A 09 09 09 09 27 4E 27 3A 43 6F 6D pe|......'N':Com
00C5E0: 70 63 6C 61 73 73 3A 3D 4E 61 6D 65 7C 0D 0A 09 pclass:=Name|...
00C5F0: 09 09 09 27 45 27 3A 4F 75 74 70 75 74 45 71 75 ...'E':OutputEqu
00C600: 69 74 65 53 74 72 69 6E 67 28 4E 61 6D 65 29 3B iteString(Name);
00C610: 0D 0A 09 09 57 72 69 74 65 43 68 61 72 28 4C 69 ....WriteChar(Li
00C620: 73 74 2C 27 2E 27 29 3B 0D 0A 09 09 49 6E 4F 75 st,'.');....InOu
00C630: 74 2E 57 72 69 74 65 53 74 72 69 6E 67 28 54 79 t.WriteString(Ty
00C640: 70 65 29 3B 0D 0A 09 09 49 6E 4F 75 74 2E 57 72 pe);....InOut.Wr
00C650: 69 74 65 4C 6E 3B 0D 0A 09 09 45 4E 44 3B 0D 0A iteLn;....END;..
00C660: 09 45 4E 44 20 57 72 69 74 65 54 6F 4C 69 73 74 .END WriteToList
00C670: 3B 0D 0A 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 ;.....PROCEDURE
00C680: 57 72 69 74 65 4E 61 6D 65 28 56 41 52 20 4E 3A WriteName(VAR N:
00C690: 46 69 6C 65 52 65 63 6F 72 64 3B 54 6F 4C 69 73 FileRecord;ToLis
00C6A0: 74 3A 42 4F 4F 4C 45 41 4E 29 3B 0D 0A 0D 0A 28 t:BOOLEAN);....(
00C6B0: 2A 09 6F 75 74 70 75 74 20 61 20 66 69 6C 65 20 *.output a file
00C6C0: 72 65 63 6F 72 64 20 61 73 20 61 20 76 61 6C 69 record as a vali
00C6D0: 64 20 66 69 6C 65 20 6E 61 6D 65 0D 0A 09 49 46 d file name...IF
00C6E0: 20 54 6F 6C 69 73 74 2C 20 6F 75 74 70 75 74 20 Tolist, output
00C6F0: 69 74 20 74 6F 20 6C 69 73 74 20 61 73 20 77 65 it to list as we
00C700: 6C 6C 2A 29 0D 0A 0D 0A 56 41 52 09 69 3A 43 41 ll*)....VAR.i:CA
00C710: 52 44 49 4E 41 4C 3B 0D 0A 09 63 68 3A 43 48 41 RDINAL;...ch:CHA
00C720: 52 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 R;..BEGIN...WITH
00C730: 20 4E 20 44 4F 0D 0A 09 09 49 46 20 44 65 76 69 N DO....IF Devi
00C740: 63 65 3C 3E 27 20 27 20 54 48 45 4E 20 0D 0A 09 ce<>' ' THEN ...
00C750: 09 09 63 68 3A 3D 27 3A 27 0D 0A 09 09 45 4C 53 ..ch:=':'....ELS
00C760: 45 0D 0A 09 09 09 63 68 3A 3D 27 20 27 0D 0A 09 E.....ch:=' '...
00C770: 09 09 45 4E 44 3B 0D 0A 09 09 57 72 69 74 65 28 ..END;....Write(
00C780: 44 65 76 69 63 65 29 3B 0D 0A 09 09 57 72 69 74 Device);....Writ
00C790: 65 28 63 68 29 3B 0D 0A 09 09 49 46 20 54 6F 4C e(ch);....IF ToL
00C7A0: 69 73 74 20 54 48 45 4E 0D 0A 09 09 09 57 72 69 ist THEN.....Wri
00C7B0: 74 65 43 68 61 72 28 4C 69 73 74 2C 44 65 76 69 teChar(List,Devi
00C7C0: 63 65 29 3B 0D 0A 09 09 09 57 72 69 74 65 43 68 ce);.....WriteCh
00C7D0: 61 72 28 4C 69 73 74 2C 63 68 29 3B 0D 0A 09 09 ar(List,ch);....
00C7E0: 09 45 4E 44 3B 0D 0A 09 09 57 72 69 74 65 53 74 .END;....WriteSt
00C7F0: 72 69 6E 67 28 4E 61 6D 65 29 3B 0D 0A 09 09 57 ring(Name);....W
00C800: 61 6C 3A 3D 54 52 55 45 7C 0D 0A 09 09 09 09 27 al:=TRUE|......'
00C810: 41 27 3A 4F 75 74 70 75 74 41 64 64 65 64 3A 3D A':OutputAdded:=
00C820: 54 52 55 45 7C 0D 0A 09 09 09 09 27 44 27 3A 4F TRUE|......'D':O
00C830: 75 74 70 75 74 44 65 6C 65 74 65 64 3A 3D 54 52 utputDeleted:=TR
00C840: 55 45 7C 0D 0A 09 09 09 09 27 4D 27 3A 4F 75 74 UE|......'M':Out
00C850: 70 75 74 4D 6F 64 69 66 69 65 64 3A 3D 54 52 55 putModified:=TRU
00C860: 45 3B 0D 0A 09 09 09 09 20 20 20 20 43 6F 6D 70 E;...... Comp
00C870: 61 72 65 43 6F 6E 74 65 6E 74 73 3A 3D 54 52 55 areContents:=TRU
00C880: 45 7C 0D 0A 09 09 09 09 27 43 27 3A 43 6F 6D 70 E|......'C':Comp
00C890: 61 72 65 43 6F 6E 74 65 6E 74 73 3A 3D 54 52 55 areContents:=TRU
00C8A0: 45 0D 0A 09 09 09 09 45 4C 53 45 20 55 73 61 67 E......ELSE Usag
00C8B0: 65 3B 0D 0A 09 09 09 09 45 4E 44 3B 28 2A 55 73 e;......END;(*Us
00C8C0: 61 67 65 2A 29 0D 0A 09 09 09 49 4E 43 28 69 29 age*).....INC(i)
00C8D0: 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E ;.....END;....EN
00C8E0: 44 3B 28 2A 57 49 54 48 2A 29 0D 0A 09 45 4E 44 D;(*WITH*)...END
00C8F0: 20 47 65 74 4F 70 74 69 6F 6E 73 3B 0D 0A 09 09 GetOptions;....
00C900: 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6F 6D ...PROCEDURE Com
00C910: 70 61 72 28 61 2C 62 3A 41 44 44 52 45 53 53 29 par(a,b:ADDRESS)
00C920: 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 :BOOLEAN;....(*.
00C930: 6B 65 79 20 63 6F 6D 70 61 72 69 73 6F 6E 20 72 key comparison r
00C940: 6F 75 74 69 6E 65 20 66 6F 72 20 74 68 65 20 73 outine for the s
00C950: 6F 72 74 20 6D 6F 64 75 6C 65 0D 0A 09 52 65 74 ort module...Ret
00C960: 75 72 6E 73 20 54 52 55 45 20 69 66 20 61 20 69 urns TRUE if a i
00C970: 73 20 67 72 65 61 74 65 72 20 74 68 61 6E 20 62 s greater than b
00C980: 0D 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74 69 6E .....This routin
00C990: 65 20 61 6C 77 61 79 73 20 63 6F 6D 70 61 72 65 e always compare
00C9A0: 73 20 74 68 65 20 66 75 6C 6C 20 6E 61 6D 65 20 s the full name
00C9B0: 61 73 20 69 74 20 69 73 20 75 73 65 64 0D 0A 09 as it is used...
00C9C0: 66 6F 72 20 73 6F 72 74 69 6E 67 2E 20 54 68 65 for sorting. The
00C9D0: 20 65 71 75 61 6C 69 74 79 20 72 6F 75 74 69 6E equality routin
00C9E0: 65 20 6F 6E 6C 79 20 63 6F 6D 70 61 72 65 73 20 e only compares
00C9F0: 74 68 65 20 70 61 72 74 0D 0A 09 6F 66 20 74 68 the part...of th
00CA00: 72 69 74 65 28 27 2E 27 29 3B 0D 0A 09 09 57 72 rite('.');....Wr
00CA10: 69 74 65 53 74 72 69 6E 67 28 54 79 70 65 29 3B iteString(Type);
00CA20: 0D 0A 09 09 49 46 20 54 6F 4C 69 73 74 20 54 48 ....IF ToList TH
00CA30: 45 4E 0D 0A 09 09 09 57 72 69 74 65 54 6F 4C 69 EN.....WriteToLi
00CA40: 73 74 28 4E 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D st(N);.....END;.
00CA50: 0A 0D 0A 09 09 28 2A 4E 6F 77 20 70 61 64 20 6E .....(*Now pad n
00CA60: 61 6D 65 20 6F 75 74 20 74 6F 20 31 36 20 63 6F ame out to 16 co
00CA70: 6C 75 6D 6E 73 2A 29 0D 0A 0D 0A 09 09 46 4F 52 lumns*)......FOR
00CA80: 20 69 3A 3D 4C 65 6E 67 74 68 28 4E 61 6D 65 29 i:=Length(Name)
00CA90: 2B 4C 65 6E 67 74 68 28 54 79 70 65 29 2B 34 20 +Length(Type)+4
00CAA0: 54 4F 20 31 36 20 44 4F 0D 0A 09 09 09 57 72 69 TO 16 DO.....Wri
00CAB0: 74 65 28 27 20 27 29 3B 0D 0A 09 09 09 45 4E 44 te(' ');.....END
00CAC0: 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 ;....END;...END
00CAD0: 57 72 69 74 65 4E 61 6D 65 3B 0D 0A 50 52 4F 43 WriteName;..PROC
00CAE0: 45 44 55 52 45 20 50 72 69 6E 74 4C 65 66 74 3B EDURE PrintLeft;
00CAF0: 0D 0A 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 4E ..BEGIN...WriteN
00CB00: 61 6D 65 28 4C 65 66 74 4E 61 6D 65 73 5B 69 5D ame(LeftNames[i]
00CB10: 2C 4F 75 74 70 75 74 44 65 6C 65 74 65 64 29 3B ,OutputDeleted);
00CB20: 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 45 4E ...WriteLn;...EN
00CB30: 44 20 50 72 69 6E 74 4C 65 66 74 3B 0D 0A 50 52 D PrintLeft;..PR
00CB40: 4F 43 45 44 55 52 45 20 50 72 69 6E 74 52 69 67 OCEDURE PrintRig
00CB50: 68 74 3B 0D 0A 42 45 47 49 4E 0D 0A 20 09 57 72 ht;..BEGIN.. .Wr
00CB60: 69 74 65 53 74 72 69 6E 67 28 27 20 20 20 20 20 iteString('
00CB70: 20 20 20 20 20 20 20 20 20 20 20 27 29 3B 0D 0A ');..
00CB80: 09 57 72 69 74 65 4E 61 6D 65 28 52 69 67 68 74 .WriteName(Right
00CB90: 4E 61 6D 65 73 5B 6A 5D 2C 4F 75 74 70 75 74 41 Names[j],OutputA
00CBA0: 64 64 65 64 29 3B 0D 0A 09 57 72 69 74 65 4C 6E dded);...WriteLn
00CBB0: 3B 0D 0A 09 45 4E 44 20 50 72 69 6E 74 52 69 67 ;...END PrintRig
00CBC0: 68 74 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 ht;....PROCEDURE
00CBD0: 20 43 6F 6D 70 61 72 65 4F 4B 28 66 31 2C 66 32 CompareOK(f1,f2
00CBE0: 3A 46 69 6C 65 52 65 63 6F 72 64 29 3A 42 4F 4F :FileRecord):BOO
00CBF0: 4C 45 41 4E 3B 0D 0A 0D 0A 56 41 52 09 66 6E 31 LEAN;....VAR.fn1
00CC00: 65 20 6E 61 6D 65 20 72 65 71 75 65 73 74 65 64 e name requested
00CC10: 20 62 79 20 74 68 65 20 66 6C 61 67 73 2E 20 41 by the flags. A
00CC20: 73 20 61 20 72 65 73 75 6C 74 2C 20 61 20 74 65 s a result, a te
00CC30: 73 74 0D 0A 09 66 6F 72 20 65 71 75 61 6C 69 74 st...for equalit
00CC40: 79 20 73 68 6F 75 6C 64 20 62 65 20 6D 61 64 65 y should be made
00CC50: 20 66 69 72 73 74 2A 29 0D 0A 0D 0A 56 41 52 09 first*)....VAR.
00CC60: 70 2C 71 3A 50 46 69 6C 65 4E 61 6D 65 3B 0D 0A p,q:PFileName;..
00CC70: 42 45 47 49 4E 0D 0A 09 70 3A 3D 50 46 69 6C 65 BEGIN...p:=PFile
00CC80: 4E 61 6D 65 28 61 29 3B 0D 0A 09 71 3A 3D 50 46 Name(a);...q:=PF
00CC90: 69 6C 65 4E 61 6D 65 28 62 29 3B 0D 0A 09 43 41 ileName(b);...CA
00CCA0: 53 45 20 43 6F 6D 70 63 6C 61 73 73 20 4F 46 0D SE Compclass OF.
00CCB0: 0A 09 09 54 79 70 65 3A 49 46 20 20 70 5E 2E 54 ...Type:IF p^.T
00CCC0: 79 70 65 3C 3E 71 5E 2E 54 79 70 65 20 54 48 45 ype<>q^.Type THE
00CCD0: 4E 20 52 45 54 55 52 4E 20 70 5E 2E 54 79 70 65 N RETURN p^.Type
00CCE0: 3E 71 5E 2E 54 79 70 65 0D 0A 09 09 20 20 20 20 >q^.Type....
00CCF0: 20 45 4C 53 45 20 52 45 54 55 52 4E 20 70 5E 2E ELSE RETURN p^.
00CD00: 4E 61 6D 65 3E 71 5E 2E 4E 61 6D 65 20 45 4E 44 Name>q^.Name END
00CD10: 3B 20 0D 0A 09 09 09 7C 0D 0A 09 09 4E 61 6D 65 ; .....|....Name
00CD20: 2C 57 68 6F 6C 65 3A 49 46 20 70 5E 2E 4E 61 6D ,Whole:IF p^.Nam
00CD30: 65 3C 3E 71 5E 2E 4E 61 6D 65 20 54 48 45 4E 20 e<>q^.Name THEN
00CD40: 52 45 54 55 52 4E 20 70 5E 2E 4E 61 6D 65 3E 71 RETURN p^.Name>q
00CD50: 5E 2E 4E 61 6D 65 0D 0A 09 09 20 20 20 20 20 20 ^.Name....
00CD60: 45 4C 53 45 20 52 45 54 55 52 4E 20 70 5E 2E 54 ELSE RETURN p^.T
00CD70: 79 70 65 3E 71 5E 2E 54 79 70 65 20 45 4E 44 3B ype>q^.Type END;
00CD80: 0D 0A 09 09 45 4E 44 3B 28 2A 43 41 53 45 2A 29 ....END;(*CASE*)
00CD90: 0D 0A 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 72 3B .....END Compar;
00CDA0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 71 75 61 ..PROCEDURE Equa
00CDB0: 6C 28 70 2C 71 3A 46 69 6C 65 52 65 63 6F 72 64 l(p,q:FileRecord
00CDC0: 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A ):BOOLEAN;....(*
00CDD0: 09 63 6F 6D 70 61 72 65 20 74 6F 20 6E 61 6D 65 .compare to name
00CDE0: 73 20 66 6F 72 20 65 71 75 61 6C 69 74 79 0D 0A s for equality..
00CDF0: 09 70 61 74 74 65 72 6E 65 64 20 61 66 74 65 72 .patterned after
00CE00: 2C 66 6E 32 3A 46 69 6C 65 4E 61 6D 65 3B 0D 0A ,fn2:FileName;..
00CE10: 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 4E ..PROCEDURE SetN
00CE20: 61 6D 65 28 66 3A 46 69 6C 65 52 65 63 6F 72 64 ame(f:FileRecord
00CE30: 3B 56 41 52 20 66 6E 3A 46 69 6C 65 4E 61 6D 65 ;VAR fn:FileName
00CE40: 29 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 44 );..VAR.i,j:CARD
00CE50: 49 4E 41 4C 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 INAL;....PROCEDU
00CE60: 52 45 20 50 75 74 28 63 68 3A 43 48 41 52 29 3B RE Put(ch:CHAR);
00CE70: 0D 0A 42 45 47 49 4E 0D 0A 09 66 6E 5B 69 5D 3A ..BEGIN...fn[i]:
00CE80: 3D 63 68 3B 0D 0A 09 49 4E 43 28 69 29 3B 0D 0A =ch;...INC(i);..
00CE90: 09 45 4E 44 20 50 75 74 3B 0D 0A 0D 0A 42 45 47 .END Put;....BEG
00CEA0: 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 57 49 54 IN...i:=0;...WIT
00CEB0: 48 20 66 20 44 4F 0D 0A 09 09 49 46 20 44 65 76 H f DO....IF Dev
00CEC0: 69 63 65 3C 3E 27 20 27 20 54 48 45 4E 20 0D 0A ice<>' ' THEN ..
00CED0: 09 09 09 50 75 74 28 44 65 76 69 63 65 29 3B 0D ...Put(Device);.
00CEE0: 0A 09 09 09 50 75 74 28 27 3A 27 29 3B 0D 0A 09 ....Put(':');...
00CEF0: 09 09 45 4E 44 3B 0D 0A 09 09 6A 3A 3D 31 3B 0D ..END;....j:=1;.
00CF00: 0A 09 09 57 48 49 4C 45 20 28 6A 3C 3D 48 49 47 ...WHILE (j<=HIG
00CF10: 48 28 4E 61 6D 65 29 29 20 41 4E 44 20 28 4E 61 H(Name)) AND (Na
00CF20: 6D 65 5B 6A 5D 3C 3E 30 78 29 20 44 4F 0D 0A 09 me[j]<>0x) DO...
00CF30: 09 09 50 75 74 28 4E 61 6D 65 5B 6A 5D 29 3B 0D ..Put(Name[j]);.
00CF40: 0A 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 ....INC(j);.....
00CF50: 45 4E 44 3B 0D 0A 09 09 6A 3A 3D 31 3B 0D 0A 09 END;....j:=1;...
00CF60: 09 50 75 74 28 27 2E 27 29 3B 0D 0A 09 09 57 48 .Put('.');....WH
00CF70: 49 4C 45 20 28 6A 3C 3D 48 49 47 48 28 54 79 70 ILE (j<=HIGH(Typ
00CF80: 65 29 29 20 41 4E 44 20 28 54 79 70 65 5B 6A 5D e)) AND (Type[j]
00CF90: 3C 3E 30 78 29 20 44 4F 0D 0A 09 09 09 50 75 74 <>0x) DO.....Put
00CFA0: 28 54 79 70 65 5B 6A 5D 29 3B 0D 0A 09 09 09 49 (Type[j]);.....I
00CFB0: 4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D NC(j);.....END;.
00CFC0: 0A 09 09 57 48 49 4C 45 20 69 3C 3D 48 49 47 48 ...WHILE i<=HIGH
00CFD0: 28 66 6E 29 20 44 4F 20 50 75 74 28 27 20 27 29 (fn) DO Put(' ')
00CFE0: 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 END;....END;...
00CFF0: 45 4E 44 20 53 65 74 4E 61 6D 65 3B 0D 0A 42 45 END SetName;..BE
00D000: 20 74 68 65 20 70 72 65 63 65 64 69 6E 67 20 72 the preceding r
00D010: 6F 75 74 69 6E 65 2A 29 0D 0A 0D 0A 0D 0A 42 45 outine*)......BE
00D020: 47 49 4E 0D 0A 09 43 41 53 45 20 43 6F 6D 70 63 GIN...CASE Compc
00D030: 6C 61 73 73 20 4F 46 0D 0A 09 09 54 79 70 65 3A lass OF....Type:
00D040: 52 45 54 55 52 4E 20 70 2E 54 79 70 65 3D 71 2E RETURN p.Type=q.
00D050: 54 79 70 65 7C 0D 0A 09 09 4E 61 6D 65 3A 52 45 Type|....Name:RE
00D060: 54 55 52 4E 20 70 2E 4E 61 6D 65 3D 71 2E 4E 61 TURN p.Name=q.Na
00D070: 6D 65 7C 0D 0A 09 09 57 68 6F 6C 65 3A 49 46 20 me|....Whole:IF
00D080: 70 2E 4E 61 6D 65 3C 3E 71 2E 4E 61 6D 65 20 54 p.Name<>q.Name T
00D090: 48 45 4E 20 52 45 54 55 52 4E 20 46 41 4C 53 45 HEN RETURN FALSE
00D0A0: 0D 0A 09 09 20 20 20 20 20 20 45 4C 53 45 20 52 .... ELSE R
00D0B0: 45 54 55 52 4E 20 70 2E 54 79 70 65 3D 71 2E 54 ETURN p.Type=q.T
00D0C0: 79 70 65 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B ype END;....END;
00D0D0: 28 2A 43 41 53 45 2A 29 0D 0A 0D 0A 09 45 4E 44 (*CASE*).....END
00D0E0: 20 45 71 75 61 6C 3B 0D 0A 0D 0A 50 52 4F 43 45 Equal;....PROCE
00D0F0: 44 55 52 45 20 45 78 70 61 6E 64 4E 61 6D 65 73 DURE ExpandNames
00D100: 28 50 61 72 61 6D 3A 50 61 72 61 6D 65 74 65 72 (Param:Parameter
00D110: 3B 56 41 52 20 4E 61 6D 65 73 3A 46 69 6C 65 41 ;VAR Names:FileA
00D120: 72 72 61 79 3B 0D 0A 09 09 09 56 41 52 20 4E 61 rray;.....VAR Na
00D130: 6D 65 43 6F 75 6E 74 3A 49 4E 54 45 47 45 52 29 meCount:INTEGER)
00D140: 3B 0D 0A 0D 0A 28 2A 09 45 78 70 61 6E 64 20 77 ;....(*.Expand w
00D150: 69 6C 64 20 63 61 72 64 20 66 69 6C 65 20 6E 61 ild card file na
00D160: 6D 65 20 69 6E 74 6F 20 6C 69 73 74 20 6F 66 20 me into list of
00D170: 66 69 6C 65 73 0D 0A 09 61 6E 64 20 73 6F 72 74 files...and sort
00D180: 20 72 65 73 75 6C 74 20 2A 29 0D 0A 56 41 52 09 result *)..VAR.
00D190: 69 2C 6A 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 4E i,j:INTEGER;...N
00D1A0: 61 6D 65 54 65 78 74 3A 41 52 52 41 59 20 5B 31 ameText:ARRAY [1
00D1B0: 2E 2E 4D 61 78 46 69 6C 65 73 5D 20 4F 46 20 46 ..MaxFiles] OF F
00D1C0: 69 6C 65 4E 61 6D 65 3B 0D 0A 09 54 65 78 74 3A ileName;...Text:
00D1D0: 41 52 52 41 59 5B 30 2E 2E 35 5D 20 4F 46 20 43 ARRAY[0..5] OF C
00D1E0: 48 41 52 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 HAR;..BEGIN...IF
00D1F0: 20 28 50 61 72 61 6D 5E 2E 43 68 61 72 73 5B 32 (Param^.Chars[2
00D200: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
00D210: 0B 00 01 00 02 09 52 E5 0B 00 C9 02 00 00 00 02 ......R.........
00D220: 0B 00 C5 02 00 00 00 02 0B 00 C1 02 00 00 00 02 ................
00D230: 0B 00 C6 02 00 00 00 02 0B 00 C2 02 00 00 00 02 ................
00D240: 0B 00 C7 02 00 00 00 02 0B 00 C3 02 00 00 00 02 ................
00D250: 0B 00 C8 02 00 00 00 02 0B 00 C4 02 00 00 00 02 ................
00D260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D300: 0D 0A 09 09 09 46 72 65 65 55 70 28 32 29 3B 0D .....FreeUp(2);.
00D310: 0A 09 09 09 52 45 54 55 52 4E 20 54 52 55 45 20 ....RETURN TRUE
00D320: 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 46 4F 52 .....END;....FOR
00D330: 20 69 3A 3D 30 20 54 4F 20 72 65 70 6C 79 31 2D i:=0 TO reply1-
00D340: 31 20 44 4F 0D 0A 09 09 09 49 46 20 62 31 5E 5B 1 DO.....IF b1^[
00D350: 69 5D 3C 3E 62 32 5E 5B 69 5D 20 54 48 45 4E 20 i]<>b2^[i] THEN
00D360: 0D 0A 09 09 09 09 46 72 65 65 55 70 28 32 29 3B ......FreeUp(2);
00D370: 0D 0A 09 09 09 09 52 45 54 55 52 4E 20 46 41 4C ......RETURN FAL
00D380: 53 45 20 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 SE ......END;...
00D390: 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 2A ..END;....END;(*
00D3A0: 4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 46 69 6C LOOP*)...END Fil
00D3B0: 65 43 6F 6D 70 3B 0D 0A 50 52 4F 43 45 44 55 52 eComp;..PROCEDUR
00D3C0: 45 20 46 69 6C 65 4D 6F 76 65 28 66 6E 31 2C 66 E FileMove(fn1,f
00D3D0: 6E 32 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 n2:ARRAY OF CHAR
00D3E0: 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 ):BOOLEAN;..BEGI
00D3F0: 4E 0D 0A 09 53 65 74 55 70 28 31 29 3B 0D 0A 09 N...SetUp(1);...
00D400: 4C 6F 6F 6B 75 70 28 66 31 2C 46 69 6C 65 4E 61 Lookup(f1,FileNa
00D410: 6D 65 28 66 6E 31 29 2C 72 65 70 6C 79 29 3B 0D me(fn1),reply);.
00D420: 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54 48 ..IF reply<>0 TH
00D430: 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E EN....WriteStrin
00D440: 67 28 27 20 49 6E 70 75 74 20 66 69 6C 65 20 6E g(' Input file n
00D450: 6F 74 20 66 6F 75 6E 64 20 27 29 3B 0D 0A 09 09 ot found ');....
00D460: 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 46 72 65 65 WriteLn;....Free
00D470: 55 70 28 31 29 3B 0D 0A 09 09 52 45 54 55 52 4E Up(1);....RETURN
00D480: 20 46 41 4C 53 45 3B 0D 0A 09 09 45 4E 44 3B 0D FALSE;....END;.
00D490: 0A 09 43 72 65 61 74 65 28 66 32 2C 46 69 6C 65 ..Create(f2,File
00D4A0: 4E 61 6D 65 28 66 6E 32 29 2C 72 65 70 6C 79 29 Name(fn2),reply)
00D4B0: 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 ;...IF reply<>0
00D4C0: 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 THEN....WriteStr
00D4D0: 69 6E 67 28 27 20 44 69 72 65 63 74 6F 72 79 20 ing(' Directory
00D4E0: 66 75 6C 6C 20 27 29 3B 0D 0A 09 09 57 72 69 74 full ');....Writ
00D4F0: 65 4C 6E 3B 0D 0A 09 09 46 72 65 65 55 70 28 31 eLn;....FreeUp(1
00D500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D6A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D6B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D6C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D6D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D6E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D6F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00D700: 2C 6F 75 74 70 75 74 29 3B 0D 0A 09 09 49 6E 4F ,output);....InO
00D710: 75 74 2E 53 77 69 74 63 68 4F 75 74 53 74 72 65 ut.SwitchOutStre
00D720: 61 6D 28 4C 69 73 74 29 3B 0D 0A 09 09 4C 69 73 am(List);....Lis
00D730: 74 4F 70 65 6E 3A 3D 54 52 55 45 3B 0D 0A 09 45 tOpen:=TRUE;...E
00D740: 4C 53 45 0D 0A 09 09 49 46 20 4F 75 74 70 75 74 LSE....IF Output
00D750: 41 64 64 65 64 20 4F 52 20 4F 75 74 70 75 74 44 Added OR OutputD
00D760: 65 6C 65 74 65 64 20 4F 52 20 0D 0A 09 09 20 20 eleted OR ....
00D770: 20 4F 75 74 70 75 74 45 71 75 61 6C 20 4F 52 20 OutputEqual OR
00D780: 4F 75 74 70 75 74 4D 6F 64 69 66 69 65 64 20 54 OutputModified T
00D790: 48 45 4E 20 0D 0A 09 09 09 57 72 69 74 65 53 74 HEN .....WriteSt
00D7A0: 72 69 6E 67 28 27 20 41 20 44 20 45 20 61 6E 64 ring(' A D E and
00D7B0: 20 4D 20 6F 70 74 69 6F 6E 73 20 72 65 71 75 69 M options requi
00D7C0: 72 65 20 6F 75 74 70 75 74 20 66 69 6C 65 20 6E re output file n
00D7D0: 61 6D 65 24 27 29 0D 0A 09 09 09 57 72 69 74 65 ame$').....Write
00D7E0: 4C 6E 3B 0D 0A 09 09 09 55 73 61 67 65 3B 0D 0A Ln;.....Usage;..
00D7F0: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D ...END;....END;.
00D800: 0A 09 45 78 70 61 6E 64 4E 61 6D 65 73 28 50 61 ..ExpandNames(Pa
00D810: 72 61 6D 5B 31 5D 2C 4C 65 66 74 4E 61 6D 65 73 ram[1],LeftNames
00D820: 2C 4C 65 66 74 4E 61 6D 65 43 6F 75 6E 74 29 3B ,LeftNameCount);
00D830: 0D 0A 09 45 78 70 61 6E 64 4E 61 6D 65 73 28 50 ...ExpandNames(P
00D840: 61 72 61 6D 5B 32 5D 2C 52 69 67 68 74 4E 61 6D aram[2],RightNam
00D850: 65 73 2C 52 69 67 68 74 4E 61 6D 65 43 6F 75 6E es,RightNameCoun
00D860: 74 29 3B 0D 0A 0D 0A 09 28 2A 6E 6F 77 20 70 65 t);.....(*now pe
00D870: 72 66 6F 72 6D 20 6D 65 72 67 65 20 70 61 73 73 rform merge pass
00D880: 20 6F 66 20 74 77 6F 20 6C 69 73 74 73 2A 29 0D of two lists*).
00D890: 0A 0D 0A 09 69 3A 3D 31 3B 0D 0A 09 6A 3A 3D 31 ....i:=1;...j:=1
00D8A0: 3B 0D 0A 09 57 48 49 4C 45 20 28 69 3C 3D 4C 65 ;...WHILE (i<=Le
00D8B0: 66 74 4E 61 6D 65 43 6F 75 6E 74 29 20 41 4E 44 ftNameCount) AND
00D8C0: 20 28 6A 3C 3D 52 69 67 68 74 4E 61 6D 65 43 6F (j<=RightNameCo
00D8D0: 75 6E 74 29 20 44 4F 0D 0A 09 09 49 46 20 45 71 unt) DO....IF Eq
00D8E0: 75 61 6C 28 4C 65 66 74 4E 61 6D 65 73 5B 69 5D ual(LeftNames[i]
00D8F0: 2C 52 69 67 68 74 4E 61 6D 65 73 5B 6A 5D 29 20 ,RightNames[j])
00D900: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
00D910: 4F 44 55 4C 45 20 46 69 6C 65 4F 70 73 3B 0D 0A ODULE FileOps;..
00D920: 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D 09 49 4D ..FROM.SYSTEM.IM
00D930: 50 4F 52 54 20 42 59 54 45 2C 41 44 52 2C 41 44 PORT BYTE,ADR,AD
00D940: 44 52 45 53 53 3B 0D 0A 46 52 4F 4D 09 53 54 4F DRESS;..FROM.STO
00D950: 52 41 47 45 20 49 4D 50 4F 52 54 20 46 72 65 65 RAGE IMPORT Free
00D960: 53 70 61 63 65 2C 41 4C 4C 4F 43 41 54 45 2C 44 Space,ALLOCATE,D
00D970: 45 41 4C 4C 4F 43 41 54 45 2C 52 45 4C 45 41 53 EALLOCATE,RELEAS
00D980: 45 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 09 49 E;..FROM.Files.I
00D990: 4D 50 4F 52 54 20 4C 6F 6F 6B 75 70 2C 43 72 65 MPORT Lookup,Cre
00D9A0: 61 74 65 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B ate,SeqReadBlock
00D9B0: 2C 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 43 ,SeqWriteBlock,C
00D9C0: 6C 6F 73 65 2C 0D 0A 09 09 09 46 49 4C 45 2C 46 lose,.....FILE,F
00D9D0: 69 6C 65 4E 61 6D 65 3B 0D 0A 46 52 4F 4D 09 54 ileName;..FROM.T
00D9E0: 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 57 erminal IMPORT W
00D9F0: 72 69 74 65 53 74 72 69 6E 67 2C 57 72 69 74 65 riteString,Write
00DA00: 4C 6E 3B 0D 0A 0D 0A 28 2A 09 50 65 72 66 6F 72 Ln;....(*.Perfor
00DA10: 6D 20 73 6F 6D 65 20 66 69 6C 65 20 6F 70 65 72 m some file oper
00DA20: 61 74 69 6F 6E 73 20 2A 29 0D 0A 0D 0A 54 59 50 ations *)....TYP
00DA30: 45 09 50 42 6C 6F 63 6B 3D 50 4F 49 4E 54 45 52 E.PBlock=POINTER
00DA40: 20 54 4F 20 42 6C 6F 63 6B 3B 0D 0A 09 42 6C 6F TO Block;...Blo
00DA50: 63 6B 3D 41 52 52 41 59 5B 30 2E 2E 31 32 37 5D ck=ARRAY[0..127]
00DA60: 20 4F 46 20 42 59 54 45 3B 0D 0A 56 41 52 09 62 OF BYTE;..VAR.b
00DA70: 31 2C 62 32 3A 50 42 6C 6F 63 6B 3B 0D 0A 09 69 1,b2:PBlock;...i
00DA80: 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 42 ,j:CARDINAL;...B
00DA90: 75 66 66 53 69 7A 65 3A 43 41 52 44 49 4E 41 4C uffSize:CARDINAL
00DAA0: 3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 ;...reply:INTEGE
00DAB0: 52 3B 0D 0A 09 66 31 2C 66 32 3A 46 49 4C 45 3B R;...f1,f2:FILE;
00DAC0: 0D 0A 09 72 65 70 6C 79 31 2C 72 65 70 6C 79 32 ...reply1,reply2
00DAD0: 3A 49 4E 54 45 47 45 52 3B 0D 0A 50 52 4F 43 45 :INTEGER;..PROCE
00DAE0: 44 55 52 45 20 53 65 74 55 70 28 43 6F 75 6E 74 DURE SetUp(Count
00DAF0: 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A 28 :CARDINAL);....(
00DB00: 54 48 45 4E 0D 0A 0D 0A 09 09 09 57 72 69 74 65 THEN.......Write
00DB10: 4E 61 6D 65 28 4C 65 66 74 4E 61 6D 65 73 5B 69 Name(LeftNames[i
00DB20: 5D 2C 4F 75 74 70 75 74 45 71 75 61 6C 29 3B 0D ],OutputEqual);.
00DB30: 0A 09 09 09 57 72 69 74 65 4E 61 6D 65 28 52 69 ....WriteName(Ri
00DB40: 67 68 74 4E 61 6D 65 73 5B 6A 5D 2C 46 41 4C 53 ghtNames[j],FALS
00DB50: 45 29 3B 0D 0A 09 09 09 49 46 20 43 6F 6D 70 61 E);.....IF Compa
00DB60: 72 65 43 6F 6E 74 65 6E 74 73 20 41 4E 44 20 0D reContents AND .
00DB70: 0A 09 09 09 20 20 4E 4F 54 20 43 6F 6D 70 61 72 .... NOT Compar
00DB80: 65 4F 4B 28 4C 65 66 74 4E 61 6D 65 73 5B 69 5D eOK(LeftNames[i]
00DB90: 2C 52 69 67 68 74 4E 61 6D 65 73 5B 6A 5D 29 20 ,RightNames[j])
00DBA0: 54 48 45 4E 0D 0A 09 09 09 09 57 72 69 74 65 53 THEN......WriteS
00DBB0: 74 72 69 6E 67 28 27 20 46 69 6C 65 73 20 44 69 tring(' Files Di
00DBC0: 66 66 65 72 20 27 29 3B 0D 0A 09 09 09 09 49 46 ffer ');......IF
00DBD0: 20 4F 75 74 70 75 74 4D 6F 64 69 66 69 65 64 20 OutputModified
00DBE0: 54 48 45 4E 0D 0A 09 09 09 09 09 57 72 69 74 65 THEN.......Write
00DBF0: 54 6F 4C 69 73 74 28 4C 65 66 74 4E 61 6D 65 73 ToList(LeftNames
00DC00: 5B 69 5D 29 3B 0D 0A 09 09 09 09 09 45 4E 44 3B [i]);.......END;
00DC10: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 57 ......END;.....W
00DC20: 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 49 4E 43 28 riteLn;.....INC(
00DC30: 69 29 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 3B 0D i);.....INC(j);.
00DC40: 0A 0D 0A 09 09 45 4C 53 49 46 20 4E 4F 54 20 43 .....ELSIF NOT C
00DC50: 6F 6D 70 61 72 28 41 44 52 28 4C 65 66 74 4E 61 ompar(ADR(LeftNa
00DC60: 6D 65 73 5B 69 5D 29 2C 41 44 52 28 52 69 67 68 mes[i]),ADR(Righ
00DC70: 74 4E 61 6D 65 73 5B 6A 5D 29 29 20 54 48 45 4E tNames[j])) THEN
00DC80: 0D 0A 0D 0A 09 09 09 50 72 69 6E 74 4C 65 66 74 .......PrintLeft
00DC90: 3B 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D 0A 0D ;.....INC(i);...
00DCA0: 0A 09 09 45 4C 53 45 20 28 2A 4C 65 66 74 6E 61 ...ELSE (*Leftna
00DCB0: 6D 65 73 5B 69 5D 3E 52 69 67 68 74 4E 61 6D 65 mes[i]>RightName
00DCC0: 73 5B 6A 5D 2A 29 0D 0A 09 0D 0A 09 09 09 50 72 s[j]*)........Pr
00DCD0: 69 6E 74 52 69 67 68 74 3B 09 0D 0A 09 09 09 49 intRight;......I
00DCE0: 4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E 44 3B 28 NC(j);.....END;(
00DCF0: 2A 49 46 2A 29 0D 0A 09 09 45 4E 44 3B 28 2A 57 *IF*)....END;(*W
00DD00: 2A 09 53 65 74 20 75 70 20 31 20 6F 72 20 32 20 *.Set up 1 or 2
00DD10: 62 75 66 66 65 72 73 20 75 73 69 6E 67 20 61 6C buffers using al
00DD20: 6C 20 61 76 61 69 6C 61 62 6C 65 20 6D 65 6D 6F l available memo
00DD30: 72 79 20 2A 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A ry *)....BEGIN..
00DD40: 09 69 3A 3D 28 46 72 65 65 53 70 61 63 65 28 29 .i:=(FreeSpace()
00DD50: 2D 31 30 32 34 29 20 44 49 56 20 31 32 38 3B 0D -1024) DIV 128;.
00DD60: 0A 09 49 46 20 69 3C 43 6F 75 6E 74 20 54 48 45 ..IF i<Count THE
00DD70: 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 N....WriteString
00DD80: 28 27 20 4F 75 74 20 6F 66 20 4D 65 6D 6F 72 79 (' Out of Memory
00DD90: 20 69 6E 20 46 69 6C 65 4F 70 73 27 29 3B 0D 0A in FileOps');..
00DDA0: 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 48 41 ..WriteLn;....HA
00DDB0: 4C 54 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 69 3A LT;....END;...i:
00DDC0: 3D 69 20 44 49 56 20 43 6F 75 6E 74 3B 0D 0A 09 =i DIV Count;...
00DDD0: 42 75 66 66 53 69 7A 65 3A 3D 31 32 38 2A 69 3B BuffSize:=128*i;
00DDE0: 0D 0A 09 41 4C 4C 4F 43 41 54 45 28 62 31 2C 42 ...ALLOCATE(b1,B
00DDF0: 75 66 66 53 69 7A 65 29 3B 0D 0A 09 49 46 20 43 uffSize);...IF C
00DE00: 6F 75 6E 74 3D 32 20 54 48 45 4E 20 41 4C 4C 4F ount=2 THEN ALLO
00DE10: 43 41 54 45 28 62 32 2C 42 75 66 66 53 69 7A 65 CATE(b2,BuffSize
00DE20: 29 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 53 65 74 ) END;...END Set
00DE30: 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 Up;..PROCEDURE F
00DE40: 72 65 65 55 70 28 69 3A 43 41 52 44 49 4E 41 4C reeUp(i:CARDINAL
00DE50: 29 3B 0D 0A 28 2A 09 72 65 6C 65 61 73 65 20 62 );..(*.release b
00DE60: 75 66 66 65 72 73 20 2D 20 75 73 65 64 20 74 6F uffers - used to
00DE70: 20 64 69 73 70 6F 73 65 20 74 68 65 6D 20 62 75 dispose them bu
00DE80: 74 20 6E 6F 77 0D 0A 09 64 6F 65 73 20 61 20 72 t now...does a r
00DE90: 65 6C 65 61 73 65 20 77 68 69 63 68 20 69 73 20 elease which is
00DEA0: 66 61 73 74 65 72 2E 20 41 73 20 61 20 72 65 73 faster. As a res
00DEB0: 75 6C 74 20 70 61 72 61 6D 65 74 65 72 20 69 73 ult parameter is
00DEC0: 20 6E 6F 74 20 72 65 71 75 69 72 65 64 0D 0A 20 not required..
00DED0: 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 52 45 4C 45 *)..BEGIN...RELE
00DEE0: 41 53 45 28 41 44 44 52 45 53 53 28 62 31 29 29 ASE(ADDRESS(b1))
00DEF0: 3B 0D 0A 09 45 4E 44 20 46 72 65 65 55 70 3B 0D ;...END FreeUp;.
00DF00: 48 49 4C 45 2A 29 0D 0A 0D 0A 09 28 2A 70 72 6F HILE*).....(*pro
00DF10: 63 65 73 73 20 73 74 72 61 67 67 6C 65 72 73 2A cess stragglers*
00DF20: 29 0D 0A 0D 0A 09 57 48 49 4C 45 20 69 3C 3D 4C ).....WHILE i<=L
00DF30: 65 66 74 4E 61 6D 65 43 6F 75 6E 74 20 44 4F 0D eftNameCount DO.
00DF40: 0A 09 09 50 72 69 6E 74 4C 65 66 74 3B 0D 0A 09 ...PrintLeft;...
00DF50: 09 49 4E 43 28 69 29 3B 0D 0A 09 09 45 4E 44 3B .INC(i);....END;
00DF60: 0D 0A 0D 0A 09 57 48 49 4C 45 20 6A 3C 3D 52 69 .....WHILE j<=Ri
00DF70: 67 68 74 4E 61 6D 65 43 6F 75 6E 74 20 44 4F 0D ghtNameCount DO.
00DF80: 0A 09 09 50 72 69 6E 74 52 69 67 68 74 3B 0D 0A ...PrintRight;..
00DF90: 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 45 4E 44 ..INC(j);....END
00DFA0: 3B 0D 0A 09 49 46 20 4C 69 73 74 4F 70 65 6E 20 ;...IF ListOpen
00DFB0: 54 48 45 4E 0D 0A 09 09 44 69 73 63 6F 6E 6E 65 THEN....Disconne
00DFC0: 63 74 28 4C 69 73 74 2C 54 52 55 45 29 3B 0D 0A ct(List,TRUE);..
00DFD0: 09 09 45 4E 44 3B 09 0D 0A 09 45 4E 44 20 43 6F ..END;....END Co
00DFE0: 6D 70 44 69 72 2E 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A mpDir...........
00DFF0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00E000: 0A 09 09 28 2A 70 6F 73 73 69 62 6C 65 20 6D 61 ...(*possible ma
00E010: 74 63 68 20 2D 20 63 68 65 63 6B 20 74 68 61 74 tch - check that
00E020: 20 74 68 65 20 6E 65 77 20 6C 69 6E 65 20 6F 6E the new line on
00E030: 6C 79 20 6D 61 74 63 68 65 73 20 74 68 69 73 20 ly matches this
00E040: 6F 6C 64 20 6C 69 6E 65 2A 29 0D 0A 0D 0A 09 09 old line*)......
00E050: 09 63 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09 09 6A .count:=0;.....j
00E060: 3A 3D 31 3B 0D 0A 09 09 09 57 48 49 4C 45 20 28 :=1;.....WHILE (
00E070: 63 6F 75 6E 74 3C 32 29 20 41 4E 44 20 28 6A 3C count<2) AND (j<
00E080: 3D 4F 6C 64 4C 65 6E 29 20 44 4F 0D 0A 09 09 09 =OldLen) DO.....
00E090: 09 49 46 20 4F 6C 64 48 61 73 68 5B 6A 5D 3D 4E .IF OldHash[j]=N
00E0A0: 65 77 48 61 73 68 5B 6B 5D 20 54 48 45 4E 20 0D ewHash[k] THEN .
00E0B0: 0A 09 09 09 09 09 49 4E 43 28 63 6F 75 6E 74 29 ......INC(count)
00E0C0: 3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 ;.......END;....
00E0D0: 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 45 ..INC(j);......E
00E0E0: 4E 44 3B 0D 0A 09 09 09 49 46 20 63 6F 75 6E 74 ND;.....IF count
00E0F0: 3D 31 20 54 48 45 4E 0D 0A 0D 0A 09 09 09 28 2A =1 THEN.......(*
00E100: 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 6C ...PROCEDURE Fil
00E110: 65 43 6F 6D 70 28 66 6E 31 2C 66 6E 32 3A 41 52 eComp(fn1,fn2:AR
00E120: 52 41 59 20 4F 46 20 43 48 41 52 29 3A 42 4F 4F RAY OF CHAR):BOO
00E130: 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 43 6F 6D 70 LEAN;....(*.Comp
00E140: 61 72 65 20 74 77 6F 20 66 69 6C 65 73 20 2D 20 are two files -
00E150: 72 65 74 75 72 6E 20 54 52 55 45 20 69 66 20 65 return TRUE if e
00E160: 71 75 61 6C 20 2A 29 0D 0A 56 41 52 09 69 3A 49 qual *)..VAR.i:I
00E170: 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E 0D 0A NTEGER;..BEGIN..
00E180: 09 53 65 74 55 70 28 32 29 3B 0D 0A 09 4C 6F 6F .SetUp(2);...Loo
00E190: 6B 75 70 28 66 31 2C 46 69 6C 65 4E 61 6D 65 28 kup(f1,FileName(
00E1A0: 66 6E 31 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 fn1),reply);...I
00E1B0: 46 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 20 F reply<>0 THEN
00E1C0: 0D 0A 09 09 46 72 65 65 55 70 28 32 29 3B 0D 0A ....FreeUp(2);..
00E1D0: 09 09 52 45 54 55 52 4E 20 46 41 4C 53 45 20 0D ..RETURN FALSE .
00E1E0: 0A 09 09 45 4E 44 3B 0D 0A 09 4C 6F 6F 6B 75 70 ...END;...Lookup
00E1F0: 28 66 32 2C 46 69 6C 65 4E 61 6D 65 28 66 6E 32 (f2,FileName(fn2
00E200: 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 20 72 ),reply);...IF r
00E210: 65 70 6C 79 3C 3E 30 20 54 48 45 4E 20 0D 0A 09 eply<>0 THEN ...
00E220: 09 46 72 65 65 55 70 28 32 29 3B 0D 0A 09 09 52 .FreeUp(2);....R
00E230: 45 54 55 52 4E 20 46 41 4C 53 45 20 0D 0A 09 09 ETURN FALSE ....
00E240: 45 4E 44 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 53 END;...LOOP....S
00E250: 65 71 52 65 61 64 42 6C 6F 63 6B 28 66 31 2C 41 eqReadBlock(f1,A
00E260: 44 52 28 62 31 5E 29 2C 42 75 66 66 53 69 7A 65 DR(b1^),BuffSize
00E270: 2C 72 65 70 6C 79 31 29 3B 0D 0A 09 09 53 65 71 ,reply1);....Seq
00E280: 52 65 61 64 42 6C 6F 63 6B 28 66 32 2C 41 44 52 ReadBlock(f2,ADR
00E290: 28 62 32 5E 29 2C 42 75 66 66 53 69 7A 65 2C 72 (b2^),BuffSize,r
00E2A0: 65 70 6C 79 32 29 3B 0D 0A 09 09 49 46 20 72 65 eply2);....IF re
00E2B0: 70 6C 79 31 3C 3E 72 65 70 6C 79 32 20 54 48 45 ply1<>reply2 THE
00E2C0: 4E 0D 0A 09 09 09 46 72 65 65 55 70 28 32 29 3B N.....FreeUp(2);
00E2D0: 0D 0A 09 09 09 52 45 54 55 52 4E 20 46 41 4C 53 .....RETURN FALS
00E2E0: 45 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 E.....END;....IF
00E2F0: 20 72 65 70 6C 79 31 3C 3D 30 20 54 48 45 4E 20 reply1<=0 THEN
00E300: 44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C DEFINITION MODUL
00E310: 45 20 46 69 6C 65 4F 70 73 3B 0D 0A 0D 0A 28 2A E FileOps;....(*
00E320: 09 50 65 72 66 6F 72 6D 20 73 6F 6D 65 20 66 69 .Perform some fi
00E330: 6C 65 20 6F 70 65 72 61 74 69 6F 6E 73 20 2A 29 le operations *)
00E340: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 ....PROCEDURE Fi
00E350: 6C 65 43 6F 6D 70 28 66 31 2C 66 32 3A 41 52 52 leComp(f1,f2:ARR
00E360: 41 59 20 4F 46 20 43 48 41 52 29 3A 42 4F 4F 4C AY OF CHAR):BOOL
00E370: 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 43 6F 6D 70 61 EAN;....(*.Compa
00E380: 72 65 20 74 77 6F 20 66 69 6C 65 73 20 2D 20 72 re two files - r
00E390: 65 74 75 72 6E 20 54 52 55 45 20 69 66 20 65 71 eturn TRUE if eq
00E3A0: 75 61 6C 0D 0A 0D 0A 09 49 46 20 65 69 74 68 65 ual.....IF eithe
00E3B0: 72 20 66 69 6C 65 20 69 73 20 6E 6F 74 20 70 72 r file is not pr
00E3C0: 65 73 65 6E 74 2C 20 46 41 4C 53 45 20 69 73 20 esent, FALSE is
00E3D0: 72 65 74 75 72 6E 65 64 0D 0A 09 46 41 4C 53 45 returned...FALSE
00E3E0: 20 69 73 20 73 74 69 6C 6C 20 72 65 74 75 72 6E is still return
00E3F0: 65 64 20 69 66 20 6E 65 69 74 68 65 72 20 66 69 ed if neither fi
00E400: 6C 65 20 69 73 20 70 72 65 73 65 6E 74 20 2A 29 le is present *)
00E410: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 ....PROCEDURE Fi
00E420: 6C 65 4D 6F 76 65 28 66 31 2C 66 32 3A 41 52 52 leMove(f1,f2:ARR
00E430: 41 59 20 4F 46 20 43 48 41 52 29 3A 42 4F 4F 4C AY OF CHAR):BOOL
00E440: 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 4D 6F 76 65 20 EAN;....(*.Move
00E450: 66 31 20 74 6F 20 66 32 20 2D 20 72 65 74 75 72 f1 to f2 - retur
00E460: 6E 73 20 54 52 55 45 20 69 66 20 73 75 63 63 65 ns TRUE if succe
00E470: 73 73 66 75 6C 20 2A 29 0D 0A 0D 0A 45 4E 44 20 ssful *)....END
00E480: 46 69 6C 65 4F 70 73 2E 0D 0A 0D 0A 0D 0A 1A 1A FileOps.........
00E490: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00E4A0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00E4B0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00E4C0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00E4D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00E4E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00E4F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00E500: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
00E510: 0C 00 01 00 02 09 52 E5 0C 00 C9 02 00 00 00 02 ......R.........
00E520: 0C 00 C5 02 00 00 00 02 0C 00 C1 02 00 00 00 02 ................
00E530: 0C 00 C6 02 00 00 00 02 0C 00 C2 02 00 00 00 02 ................
00E540: 0C 00 C7 02 00 00 00 02 0C 00 C3 02 00 00 00 02 ................
00E550: 0C 00 C8 02 00 00 00 02 0C 00 C4 02 00 00 00 02 ................
00E560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E600: 44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C DEFINITION MODUL
00E610: 45 20 49 6D 70 6F 72 74 3B 0D 0A 0D 0A 28 2A 09 E Import;....(*.
00E620: 54 68 69 73 20 6D 6F 64 75 6C 65 20 61 6C 6C 6F This module allo
00E630: 77 73 20 79 6F 75 20 74 6F 20 70 69 63 6B 20 75 ws you to pick u
00E640: 70 0D 0A 09 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 p...information
00E650: 61 62 6F 75 74 20 73 79 6D 62 6F 6C 73 20 65 78 about symbols ex
00E660: 70 6F 72 74 65 64 0D 0A 09 66 72 6F 6D 20 61 6E ported...from an
00E670: 6F 74 68 65 72 20 6D 6F 64 75 6C 65 2E 20 49 74 other module. It
00E680: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 is used by the
00E690: 61 73 73 65 6D 62 6C 65 72 0D 0A 09 43 6F 70 79 assembler...Copy
00E6A0: 72 69 67 68 74 20 28 43 29 20 44 61 76 65 20 4D right (C) Dave M
00E6B0: 6F 6F 72 65 2C 20 46 54 4C 20 4D 6F 64 75 6C 61 oore, FTL Modula
00E6C0: 2D 32 20 31 39 38 36 0D 0A 09 54 68 69 73 20 69 -2 1986...This i
00E6D0: 73 20 61 20 67 65 6E 65 72 69 63 20 6D 6F 64 75 s a generic modu
00E6E0: 6C 65 0D 0A 20 2A 29 0D 0A 46 52 4F 4D 09 53 59 le.. *)..FROM.SY
00E6F0: 53 54 45 4D 20 49 4D 50 4F 52 54 20 42 59 54 45 STEM IMPORT BYTE
00E700: 2C 41 44 44 52 45 53 53 3B 0D 0A 46 52 4F 4D 09 ,ADDRESS;..FROM.
00E710: 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 69 6C Files IMPORT Fil
00E720: 65 4E 61 6D 65 3B 0D 0A 54 59 50 45 09 61 6C 66 eName;..TYPE.alf
00E730: 61 09 3D 20 41 52 52 41 59 5B 31 2E 2E 33 32 5D a.= ARRAY[1..32]
00E740: 20 4F 46 20 43 48 41 52 3B 20 0D 0A 09 0D 0A 09 OF CHAR; ......
00E750: 74 79 70 65 63 6C 61 73 73 3D 28 69 6E 74 74 79 typeclass=(intty
00E760: 70 65 2C 72 65 61 6C 74 79 70 65 2C 63 68 61 72 pe,realtype,char
00E770: 74 79 70 65 2C 62 6F 6F 6C 74 79 70 65 2C 0D 0A type,booltype,..
00E780: 09 09 61 72 72 61 79 74 79 70 65 2C 72 65 63 6F ..arraytype,reco
00E790: 72 64 74 79 70 65 2C 73 75 62 72 74 79 70 65 2C rdtype,subrtype,
00E7A0: 66 6F 72 77 61 72 64 72 65 66 2C 70 6F 69 6E 74 forwardref,point
00E7B0: 74 79 70 65 2C 0D 0A 09 09 73 65 74 74 79 70 65 type,....settype
00E7C0: 2C 73 74 72 69 6E 67 74 79 70 65 2C 77 6F 72 64 ,stringtype,word
00E7D0: 74 79 70 65 2C 62 79 74 65 74 79 70 65 2C 70 72 type,bytetype,pr
00E7E0: 74 79 70 65 2C 65 6E 75 6D 74 79 70 65 2C 0D 0A type,enumtype,..
00E7F0: 09 09 63 61 72 64 74 79 70 65 2C 61 64 64 72 74 ..cardtype,addrt
00E800: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
00E810: 4F 44 55 4C 45 20 47 65 74 46 69 6C 65 73 3B 0D ODULE GetFiles;.
00E820: 0A 46 52 4F 4D 20 43 50 4D 20 49 4D 50 4F 52 54 .FROM CPM IMPORT
00E830: 20 42 44 4F 53 2C 42 44 4F 53 48 4C 2C 73 66 6F BDOS,BDOSHL,sfo
00E840: 66 63 2C 73 6E 6F 66 63 2C 66 63 62 2C 73 64 61 fc,snofc,fcb,sda
00E850: 66 63 3B 0D 0A 46 52 4F 4D 20 43 50 4D 42 49 4F fc;..FROM CPMBIO
00E860: 53 20 49 4D 50 4F 52 54 20 64 69 72 65 63 74 6F S IMPORT directo
00E870: 72 79 3B 0D 0A 46 52 4F 4D 20 53 59 53 54 45 4D ry;..FROM SYSTEM
00E880: 20 49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 46 52 IMPORT ADR;..FR
00E890: 4F 4D 20 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 OM Files IMPORT
00E8A0: 43 6F 6E 76 65 72 74 46 69 6C 65 4E 61 6D 65 3B ConvertFileName;
00E8B0: 0D 0A 28 2A 09 47 65 74 20 61 20 6C 69 73 74 20 ..(*.Get a list
00E8C0: 6F 66 20 66 69 6C 65 20 6E 61 6D 65 73 20 6D 65 of file names me
00E8D0: 65 74 69 6E 67 20 61 20 77 69 6C 64 63 61 72 64 eting a wildcard
00E8E0: 20 64 65 73 63 72 69 70 74 69 6F 6E 2A 29 0D 0A description*)..
00E8F0: 56 41 52 09 69 2C 6A 2C 6B 3A 49 4E 54 45 47 45 VAR.i,j,k:INTEGE
00E900: 52 3B 0D 0A 09 66 3A 66 63 62 3B 0D 0A 09 6E 61 R;...f:fcb;...na
00E910: 6D 65 3A 46 69 6C 65 4E 61 6D 65 3B 0D 0A 09 44 me:FileName;...D
00E920: 65 76 43 68 61 72 3A 43 48 41 52 3B 0D 0A 09 57 evChar:CHAR;...W
00E930: 69 6C 64 43 61 72 64 3A 42 4F 4F 4C 45 41 4E 3B ildCard:BOOLEAN;
00E940: 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 4E ..PROCEDURE GetN
00E950: 61 6D 65 73 28 50 61 74 74 65 72 6E 3A 41 52 52 ames(Pattern:ARR
00E960: 41 59 20 4F 46 20 43 48 41 52 3B 56 41 52 20 6E AY OF CHAR;VAR n
00E970: 61 6D 65 73 3A 41 52 52 41 59 20 4F 46 20 46 69 ames:ARRAY OF Fi
00E980: 6C 65 4E 61 6D 65 3B 0D 0A 09 09 20 20 56 41 52 leName;.... VAR
00E990: 20 43 6F 75 6E 74 3A 49 4E 54 45 47 45 52 29 3B Count:INTEGER);
00E9A0: 0D 0A 56 41 52 09 64 6D 61 3A 41 52 52 41 59 20 ..VAR.dma:ARRAY
00E9B0: 5B 30 2E 2E 33 5D 20 4F 46 20 64 69 72 65 63 74 [0..3] OF direct
00E9C0: 6F 72 79 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 ory;....PROCEDUR
00E9D0: 45 20 53 65 61 72 63 68 46 6F 72 46 69 6C 65 4E E SearchForFileN
00E9E0: 61 6D 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43 ames;..BEGIN...C
00E9F0: 6F 6E 76 65 72 74 46 69 6C 65 4E 61 6D 65 28 66 onvertFileName(f
00EA00: 29 3B 0D 0A 09 09 52 45 54 55 52 4E 20 46 41 4C );....RETURN FAL
00EA10: 53 45 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C 4F SE;....END;...LO
00EA20: 4F 50 0D 0A 09 09 53 65 71 52 65 61 64 42 6C 6F OP....SeqReadBlo
00EA30: 63 6B 28 66 31 2C 41 44 52 28 62 31 5E 29 2C 42 ck(f1,ADR(b1^),B
00EA40: 75 66 66 53 69 7A 65 2C 72 65 70 6C 79 31 29 3B uffSize,reply1);
00EA50: 0D 0A 09 09 49 46 20 72 65 70 6C 79 31 3C 3D 30 ....IF reply1<=0
00EA60: 20 54 48 45 4E 0D 0A 09 09 09 43 6C 6F 73 65 28 THEN.....Close(
00EA70: 66 31 29 3B 0D 0A 09 09 09 43 6C 6F 73 65 28 66 f1);.....Close(f
00EA80: 32 29 3B 0D 0A 09 09 09 46 72 65 65 55 70 28 31 2);.....FreeUp(1
00EA90: 29 3B 0D 0A 09 09 09 52 45 54 55 52 4E 20 54 52 );.....RETURN TR
00EAA0: 55 45 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 UE;.....END;....
00EAB0: 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 28 66 32 SeqWriteBlock(f2
00EAC0: 2C 41 44 52 28 62 32 5E 29 2C 42 75 66 66 53 69 ,ADR(b2^),BuffSi
00EAD0: 7A 65 2C 72 65 70 6C 79 32 29 3B 0D 0A 09 09 49 ze,reply2);....I
00EAE0: 46 20 72 65 70 6C 79 32 3C 3E 72 65 70 6C 79 31 F reply2<>reply1
00EAF0: 20 54 48 45 4E 0D 0A 09 09 09 57 72 69 74 65 53 THEN.....WriteS
00EB00: 74 72 69 6E 67 28 27 20 44 69 73 63 20 66 75 6C tring(' Disc ful
00EB10: 6C 20 27 29 3B 0D 0A 09 09 09 57 72 69 74 65 4C l ');.....WriteL
00EB20: 6E 3B 0D 0A 09 09 09 46 72 65 65 55 70 28 31 29 n;.....FreeUp(1)
00EB30: 3B 0D 0A 09 09 09 52 45 54 55 52 4E 20 46 41 4C ;.....RETURN FAL
00EB40: 53 45 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 SE;.....END;....
00EB50: 45 4E 44 3B 0D 0A 09 45 4E 44 20 46 69 6C 65 4D END;...END FileM
00EB60: 6F 76 65 3B 0D 0A 0D 0A 45 4E 44 20 46 69 6C 65 ove;....END File
00EB70: 4F 70 73 2E 0D 0A 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A Ops.............
00EB80: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00EB90: 1A 00 00 00 00 00 52 42 82 0D 30 02 80 03 00 00 ......RB..0.....
00EBA0: 54 45 53 54 4E 45 53 54 4D 4F 44 20 00 00 00 00 TESTNESTMOD ....
00EBB0: 00 00 00 00 00 00 67 3E 52 0D 08 1F 5B 01 00 00 ......g>R...[...
00EBC0: 53 4D 41 4C 4C 49 4F 20 52 45 4C 20 00 00 00 00 SMALLIO REL ....
00EBD0: 00 00 00 00 00 00 AF 42 82 0D 38 02 00 09 00 00 .......B..8.....
00EBE0: 42 55 49 4C 44 4C 49 42 42 41 54 20 00 00 00 00 BUILDLIBBAT ....
00EBF0: 00 00 00 00 00 00 87 9D 79 0C AB 13 00 03 00 00 ........y.......
00EC00: 2C 6E 61 6D 65 29 3B 0D 0A 0D 0A 09 49 46 20 66 ,name);.....IF f
00EC10: 2E 66 63 62 64 6E 3D 30 20 54 48 45 4E 20 44 65 .fcbdn=0 THEN De
00EC20: 76 43 68 61 72 3A 3D 27 20 27 0D 0A 09 45 4C 53 vChar:=' '...ELS
00EC30: 45 20 44 65 76 43 68 61 72 3A 3D 43 48 52 28 4F E DevChar:=CHR(O
00EC40: 52 44 28 66 2E 66 63 62 64 6E 29 2B 28 4F 52 44 RD(f.fcbdn)+(ORD
00EC50: 28 27 41 27 29 2D 31 29 29 20 45 4E 44 3B 0D 0A ('A')-1)) END;..
00EC60: 0D 0A 0D 0A 09 28 2A 09 4E 6F 77 20 73 63 61 6E .....(*.Now scan
00EC70: 20 66 6F 72 20 6D 61 74 63 68 69 6E 67 20 6E 61 for matching na
00EC80: 6D 65 73 2A 29 0D 0A 0D 0A 09 69 3A 3D 42 44 4F mes*).....i:=BDO
00EC90: 53 28 73 64 61 66 63 2C 41 44 52 28 64 6D 61 29 S(sdafc,ADR(dma)
00ECA0: 29 3B 09 28 2A 73 65 74 20 64 6D 61 20 62 75 66 );.(*set dma buf
00ECB0: 66 65 72 20 61 64 64 72 65 73 73 2A 29 09 0D 0A fer address*)...
00ECC0: 09 69 3A 3D 42 44 4F 53 28 73 66 6F 66 63 2C 41 .i:=BDOS(sfofc,A
00ECD0: 44 52 28 66 29 29 3B 09 09 28 2A 73 74 61 72 74 DR(f));..(*start
00ECE0: 20 73 65 61 72 63 68 2A 29 0D 0A 09 43 6F 75 6E search*)...Coun
00ECF0: 74 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 69 3C t:=0;...WHILE i<
00ED00: 3E 32 35 35 20 44 4F 0D 0A 09 09 6A 3A 3D 30 3B >255 DO....j:=0;
00ED10: 0D 0A 09 09 49 46 20 44 65 76 43 68 61 72 3C 3E ....IF DevChar<>
00ED20: 27 20 27 20 54 48 45 4E 0D 0A 09 09 09 6E 61 6D ' ' THEN.....nam
00ED30: 65 5B 30 5D 3A 3D 44 65 76 43 68 61 72 3B 0D 0A e[0]:=DevChar;..
00ED40: 09 09 09 6E 61 6D 65 5B 31 5D 3A 3D 27 3A 27 3B ...name[1]:=':';
00ED50: 0D 0A 09 09 09 6A 3A 3D 32 3B 0D 0A 09 09 09 45 .....j:=2;.....E
00ED60: 4E 44 3B 0D 0A 09 09 57 49 54 48 20 64 6D 61 5B ND;....WITH dma[
00ED70: 69 5D 20 44 4F 0D 0A 09 09 09 6B 3A 3D 31 3B 0D i] DO.....k:=1;.
00ED80: 0A 09 09 09 57 48 49 4C 45 20 28 6B 3C 3D 48 49 ....WHILE (k<=HI
00ED90: 47 48 28 64 69 72 66 6E 29 29 20 41 4E 44 20 28 GH(dirfn)) AND (
00EDA0: 64 69 72 66 6E 5B 6B 5D 3C 3E 27 20 27 29 20 44 dirfn[k]<>' ') D
00EDB0: 4F 0D 0A 09 09 09 09 6E 61 6D 65 5B 6A 5D 3A 3D O......name[j]:=
00EDC0: 64 69 72 66 6E 5B 6B 5D 3B 0D 0A 09 09 09 09 49 dirfn[k];......I
00EDD0: 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 49 4E 43 28 NC(j);......INC(
00EDE0: 6B 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 k);......END;...
00EDF0: 09 09 6E 61 6D 65 5B 6A 5D 3A 3D 27 2E 27 3B 0D ..name[j]:='.';.
00EE00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EE10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EE20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EE30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EE40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EE50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EE60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EE70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EE80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EE90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EEA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EEB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EEC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EEE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EEF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EF00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EF10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EF20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EF30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EF40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EF50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EF60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EF70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EF80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EF90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EFA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EFB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EFC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EFD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EFE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00EFF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00F000: 0A 09 09 09 6B 3A 3D 31 3B 49 4E 43 28 6A 29 3B ....k:=1;INC(j);
00F010: 0D 0A 09 09 09 57 48 49 4C 45 20 28 6B 3C 3D 48 .....WHILE (k<=H
00F020: 49 47 48 28 64 69 72 66 74 29 29 20 41 4E 44 20 IGH(dirft)) AND
00F030: 28 64 69 72 66 74 5B 6B 5D 3C 3E 27 20 27 29 20 (dirft[k]<>' ')
00F040: 44 4F 0D 0A 09 09 09 09 6E 61 6D 65 5B 6A 5D 3A DO......name[j]:
00F050: 3D 64 69 72 66 74 5B 6B 5D 3B 0D 0A 09 09 09 09 =dirft[k];......
00F060: 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 49 4E 43 INC(j);......INC
00F070: 28 6B 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A (k);......END;..
00F080: 09 09 09 45 4E 44 3B 20 28 2A 57 49 54 48 20 44 ...END; (*WITH D
00F090: 4D 41 2A 29 0D 0A 09 09 46 4F 52 20 6A 3A 3D 6A MA*)....FOR j:=j
00F0A0: 20 54 4F 20 48 49 47 48 28 6E 61 6D 65 29 20 44 TO HIGH(name) D
00F0B0: 4F 20 6E 61 6D 65 5B 6A 5D 3A 3D 27 20 27 20 45 O name[j]:=' ' E
00F0C0: 4E 44 3B 0D 0A 09 09 6E 61 6D 65 73 5B 43 6F 75 ND;....names[Cou
00F0D0: 6E 74 5D 3A 3D 6E 61 6D 65 3B 0D 0A 09 09 49 4E nt]:=name;....IN
00F0E0: 43 28 43 6F 75 6E 74 29 3B 0D 0A 09 09 69 3A 3D C(Count);....i:=
00F0F0: 42 44 4F 53 28 73 6E 6F 66 63 2C 41 44 52 28 66 BDOS(snofc,ADR(f
00F100: 29 29 3B 09 28 2A 67 6F 20 74 6F 20 6E 65 78 74 ));.(*go to next
00F110: 2A 29 0D 0A 09 09 45 4E 44 3B 20 28 2A 57 48 49 *)....END; (*WHI
00F120: 4C 45 20 69 3C 3E 32 35 35 2A 29 0D 0A 09 0D 0A LE i<>255*).....
00F130: 09 69 3A 3D 42 44 4F 53 28 73 64 61 66 63 2C 38 .i:=BDOS(sdafc,8
00F140: 30 48 29 3B 09 09 28 2A 72 65 73 65 74 20 74 6F 0H);..(*reset to
00F150: 20 64 65 66 61 75 6C 74 2A 29 0D 0A 09 0D 0A 09 default*)......
00F160: 45 4E 44 20 53 65 61 72 63 68 46 6F 72 46 69 6C END SearchForFil
00F170: 65 4E 61 6D 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A eNames;..BEGIN..
00F180: 0D 0A 09 28 2A 20 43 6F 6E 76 65 72 74 20 50 61 ...(* Convert Pa
00F190: 74 74 65 72 6E 20 74 6F 20 61 20 66 69 6C 65 20 ttern to a file
00F1A0: 6E 61 6D 65 2A 29 0D 0A 09 0D 0A 09 6A 3A 3D 48 name*)......j:=H
00F1B0: 49 47 48 28 50 61 74 74 65 72 6E 29 3B 0D 0A 09 IGH(Pattern);...
00F1C0: 57 69 6C 64 43 61 72 64 3A 3D 46 41 4C 53 45 3B WildCard:=FALSE;
00F1D0: 0D 0A 09 49 46 20 6A 3E 48 49 47 48 28 6E 61 6D ...IF j>HIGH(nam
00F1E0: 65 29 20 54 48 45 4E 20 6A 3A 3D 48 49 47 48 28 e) THEN j:=HIGH(
00F1F0: 6E 61 6D 65 29 20 45 4E 44 3B 0D 0A 09 46 4F 52 name) END;...FOR
00F200: 44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C DEFINITION MODUL
00F210: 45 20 47 65 74 46 69 6C 65 73 3B 0D 0A 0D 0A 28 E GetFiles;....(
00F220: 2A 09 47 65 74 20 61 20 6C 69 73 74 20 6F 66 20 *.Get a list of
00F230: 66 69 6C 65 20 6E 61 6D 65 73 20 6D 65 65 74 69 file names meeti
00F240: 6E 67 20 61 20 77 69 6C 64 63 61 72 64 20 64 65 ng a wildcard de
00F250: 73 63 72 69 70 74 69 6F 6E 2A 29 0D 0A 46 52 4F scription*)..FRO
00F260: 4D 20 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 M Files IMPORT F
00F270: 69 6C 65 4E 61 6D 65 3B 0D 0A 50 52 4F 43 45 44 ileName;..PROCED
00F280: 55 52 45 20 47 65 74 4E 61 6D 65 73 28 50 61 74 URE GetNames(Pat
00F290: 74 65 72 6E 3A 41 52 52 41 59 20 4F 46 20 43 48 tern:ARRAY OF CH
00F2A0: 41 52 3B 0D 0A 09 09 56 41 52 09 6E 61 6D 65 73 AR;....VAR.names
00F2B0: 3A 41 52 52 41 59 20 4F 46 20 46 69 6C 65 4E 61 :ARRAY OF FileNa
00F2C0: 6D 65 3B 56 41 52 20 63 6F 75 6E 74 3A 49 4E 54 me;VAR count:INT
00F2D0: 45 47 45 52 29 3B 0D 0A 0D 0A 28 2A 09 50 61 74 EGER);....(*.Pat
00F2E0: 74 65 72 6E 20 69 73 20 61 20 70 61 74 74 65 72 tern is a patter
00F2F0: 6E 20 74 6F 20 75 73 65 20 66 6F 72 20 74 68 65 n to use for the
00F300: 20 73 65 61 72 63 68 0D 0A 09 6E 61 6D 65 73 20 search...names
00F310: 72 65 74 75 72 6E 73 20 61 20 6C 69 73 74 20 6F returns a list o
00F320: 66 20 6D 61 74 63 68 69 6E 67 20 66 69 6C 65 20 f matching file
00F330: 6E 61 6D 65 20 28 77 69 74 68 20 6E 6F 20 64 65 name (with no de
00F340: 76 69 63 65 20 6E 61 6D 65 0D 0A 09 09 6F 6E 20 vice name....on
00F350: 74 68 65 20 66 72 6F 6E 74 29 0D 0A 09 63 6F 75 the front)...cou
00F360: 6E 74 20 72 65 74 75 72 6E 73 20 6E 75 6D 62 65 nt returns numbe
00F370: 72 20 6F 66 20 6E 61 6D 65 73 20 72 65 74 75 72 r of names retur
00F380: 6E 65 64 20 69 6E 20 6E 61 6D 65 73 0D 0A 0D 0A ned in names....
00F390: 09 49 66 20 74 68 65 20 67 69 76 65 6E 20 6E 61 .If the given na
00F3A0: 6D 65 20 63 6F 6E 74 61 69 6E 73 20 6E 6F 20 77 me contains no w
00F3B0: 69 6C 64 20 63 61 72 64 2C 20 69 74 20 69 73 20 ild card, it is
00F3C0: 61 6C 77 61 79 73 20 72 65 74 75 72 6E 65 64 0D always returned.
00F3D0: 0A 09 61 73 20 74 68 65 20 6F 6E 6C 79 20 6D 61 ..as the only ma
00F3E0: 74 63 68 2C 20 77 68 65 74 68 65 72 20 69 74 20 tch, whether it
00F3F0: 65 78 69 73 74 73 20 6F 72 20 6E 6F 74 20 0D 0A exists or not ..
00F400: 20 69 3A 3D 30 20 54 4F 20 6A 20 44 4F 20 0D 0A i:=0 TO j DO ..
00F410: 09 09 6E 61 6D 65 5B 69 5D 3A 3D 50 61 74 74 65 ..name[i]:=Patte
00F420: 72 6E 5B 69 5D 3B 0D 0A 09 09 49 46 20 28 6E 61 rn[i];....IF (na
00F430: 6D 65 5B 69 5D 3D 27 2A 27 29 20 4F 52 20 28 6E me[i]='*') OR (n
00F440: 61 6D 65 5B 69 5D 3D 27 3F 27 29 20 54 48 45 4E ame[i]='?') THEN
00F450: 20 57 69 6C 64 43 61 72 64 3A 3D 54 52 55 45 20 WildCard:=TRUE
00F460: 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 46 END;....END;...F
00F470: 4F 52 20 69 3A 3D 69 2B 31 20 54 4F 20 48 49 47 OR i:=i+1 TO HIG
00F480: 48 28 6E 61 6D 65 29 20 44 4F 20 6E 61 6D 65 5B H(name) DO name[
00F490: 69 5D 3A 3D 27 20 27 20 45 4E 44 3B 0D 0A 0D 0A i]:=' ' END;....
00F4A0: 09 49 46 20 57 69 6C 64 43 61 72 64 20 54 48 45 .IF WildCard THE
00F4B0: 4E 20 53 65 61 72 63 68 46 6F 72 46 69 6C 65 4E N SearchForFileN
00F4C0: 61 6D 65 73 0D 0A 09 45 4C 53 45 0D 0A 09 09 43 ames...ELSE....C
00F4D0: 6F 75 6E 74 3A 3D 31 3B 0D 0A 09 09 6E 61 6D 65 ount:=1;....name
00F4E0: 73 5B 30 5D 3A 3D 6E 61 6D 65 0D 0A 09 09 45 4E s[0]:=name....EN
00F4F0: 44 3B 0D 0A 09 45 4E 44 20 47 65 74 4E 61 6D 65 D;...END GetName
00F500: 73 3B 0D 0A 45 4E 44 20 47 65 74 46 69 6C 65 73 s;..END GetFiles
00F510: 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00F520: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00F530: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00F540: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00F550: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00F560: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00F570: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00F580: 70 5E 20 44 4F 0D 0A 09 09 69 3A 3D 30 3B 0D 0A p^ DO....i:=0;..
00F590: 09 09 4C 4F 4F 50 0D 0A 09 09 09 43 41 53 45 20 ..LOOP.....CASE
00F5A0: 43 68 61 72 73 5B 69 5D 20 4F 46 0D 0A 09 09 09 Chars[i] OF.....
00F5B0: 09 30 78 3A 45 58 49 54 7C 0D 0A 09 09 09 09 27 .0x:EXIT|......'
00F5C0: 54 27 3A 43 6F 6D 70 63 6C 61 73 73 3A 3D 54 79 T':Compclass:=Ty
00F5D0: 70 65 7C 0D 0A 09 09 09 09 27 4E 27 3A 43 6F 6D pe|......'N':Com
00F5E0: 70 63 6C 61 73 73 3A 3D 4E 61 6D 65 7C 0D 0A 09 pclass:=Name|...
00F5F0: 09 09 09 27 45 27 3A 4F 75 74 70 75 74 45 71 75 ...'E':OutputEqu
00F600: 0D 0A 09 57 68 69 6C 65 20 74 68 69 73 20 6D 65 ...While this me
00F610: 61 6E 73 20 74 68 61 74 20 74 68 69 73 20 72 6F ans that this ro
00F620: 75 74 69 6E 65 20 63 61 6E 6E 6F 74 20 62 65 20 utine cannot be
00F630: 75 73 65 64 20 74 6F 20 63 68 65 63 6B 20 66 6F used to check fo
00F640: 72 0D 0A 09 74 68 65 20 65 78 69 73 74 65 6E 63 r...the existenc
00F650: 65 20 6F 66 20 61 20 66 69 6C 65 2C 20 69 74 20 e of a file, it
00F660: 63 61 6E 20 62 65 20 75 73 65 64 20 74 6F 20 63 can be used to c
00F670: 6F 6E 76 65 72 74 20 61 20 70 61 72 61 6D 65 74 onvert a paramet
00F680: 65 72 0D 0A 09 74 6F 20 61 20 66 69 6C 65 6E 61 er...to a filena
00F690: 6D 65 20 61 73 20 72 65 71 75 69 72 65 64 20 62 me as required b
00F6A0: 79 20 74 68 65 20 6D 6F 64 75 6C 65 20 46 69 6C y the module Fil
00F6B0: 65 73 20 2A 29 0D 0A 45 4E 44 20 47 65 74 46 69 es *)..END GetFi
00F6C0: 6C 65 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A les.............
00F6D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00F6E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00F6F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00F700: 61 72 61 6D 65 74 65 72 3B 09 09 28 2A 61 72 65 arameter;..(*are
00F710: 61 20 66 6F 72 20 63 6F 6D 6D 61 6E 64 20 6C 69 a for command li
00F720: 6E 65 2A 29 0D 0A 09 43 6F 75 6E 74 3A 49 4E 54 ne*)...Count:INT
00F730: 45 47 45 52 3B 09 09 09 09 28 2A 70 61 72 61 6D EGER;....(*param
00F740: 65 74 65 72 73 2A 29 0D 0A 0D 0A 09 4C 65 66 74 eters*).....Left
00F750: 4E 61 6D 65 73 2C 52 69 67 68 74 4E 61 6D 65 73 Names,RightNames
00F760: 3A 46 69 6C 65 41 72 72 61 79 3B 0D 0A 09 4C 65 :FileArray;...Le
00F770: 66 74 4E 61 6D 65 43 6F 75 6E 74 2C 52 69 67 68 ftNameCount,Righ
00F780: 74 4E 61 6D 65 43 6F 75 6E 74 3A 49 4E 54 45 47 tNameCount:INTEG
00F790: 45 52 3B 0D 0A 0D 0A 09 43 6F 6D 70 63 6C 61 73 ER;.....Compclas
00F7A0: 73 3A 43 6F 6D 70 43 6C 61 73 73 3D 57 68 6F 6C s:CompClass=Whol
00F7B0: 65 3B 0D 0A 09 4F 75 74 70 75 74 41 64 64 65 64 e;...OutputAdded
00F7C0: 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D :BOOLEAN=FALSE;.
00F7D0: 0A 09 4F 75 74 70 75 74 45 71 75 61 6C 3A 42 4F ..OutputEqual:BO
00F7E0: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 43 OLEAN=FALSE;...C
00F7F0: 6F 6D 70 61 72 65 43 6F 6E 74 65 6E 74 73 3A 42 ompareContents:B
00F800: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
00F810: 0D 00 01 00 02 09 52 E5 0D 00 C9 02 00 00 00 02 ......R.........
00F820: 0D 00 C5 02 00 00 00 02 0D 00 C1 02 00 00 00 02 ................
00F830: 0D 00 C6 02 00 00 00 02 0D 00 C2 02 00 00 00 02 ................
00F840: 0D 00 C7 02 00 00 00 02 0D 00 C3 02 00 00 00 02 ................
00F850: 0D 00 C8 02 00 00 00 02 0D 00 C4 02 00 00 00 02 ................
00F860: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F890: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F900: 4C 41 59 20 3A 20 70 6E 61 6D 65 3B 20 0D 0A 09 LAY : pname; ...
00F910: 4C 41 53 54 4E 41 4D 45 3A 20 70 6E 61 6D 65 3B LASTNAME: pname;
00F920: 0D 0A 09 4E 41 4D 45 50 4E 54 3A 70 6E 61 6D 65 ...NAMEPNT:pname
00F930: 3B 20 0D 0A 0D 0A 28 2A 09 53 79 6D 62 6F 6C 20 ; ....(*.Symbol
00F940: 74 61 62 6C 65 20 65 6E 74 72 69 65 73 20 63 6F table entries co
00F950: 6E 73 69 73 74 20 6F 66 20 61 20 4E 41 4D 45 20 nsist of a NAME
00F960: 72 65 63 6F 72 64 20 70 72 65 63 65 64 65 64 0D record preceded.
00F970: 0A 09 62 79 20 61 20 69 64 65 6E 74 69 66 69 65 ..by a identifie
00F980: 72 20 6C 65 6E 67 74 68 20 42 59 54 45 20 70 72 r length BYTE pr
00F990: 65 63 65 64 65 64 20 62 79 20 74 68 65 20 69 64 eceded by the id
00F9A0: 65 6E 74 69 66 69 65 72 0D 0A 09 73 74 6F 72 65 entifier...store
00F9B0: 64 20 62 61 63 6B 77 61 72 64 73 2E 20 54 68 65 d backwards. The
00F9C0: 20 74 6F 70 20 62 69 74 20 6F 66 20 74 68 65 20 top bit of the
00F9D0: 6C 65 6E 67 74 68 20 69 73 20 73 65 74 20 74 6F length is set to
00F9E0: 20 27 68 69 64 65 27 0D 0A 09 74 68 65 20 69 64 'hide'...the id
00F9F0: 65 6E 74 69 66 69 65 72 2E 20 54 68 65 20 73 65 entifier. The se
00FA00: 63 6F 6E 64 20 74 6F 70 20 62 69 74 20 69 73 20 cond top bit is
00FA10: 75 73 65 64 20 74 6F 20 6D 61 72 6B 20 61 63 63 used to mark acc
00FA20: 65 73 73 69 62 6C 65 20 0D 0A 09 73 79 6D 62 6F essible ...symbo
00FA30: 6C 73 20 74 68 6F 75 67 68 20 74 68 69 73 20 69 ls though this i
00FA40: 73 20 6E 6F 74 20 64 6F 6E 65 20 62 79 20 74 68 s not done by th
00FA50: 69 73 20 76 65 72 73 69 6F 6E 20 6F 66 20 74 68 is version of th
00FA60: 65 20 0D 0A 09 69 6D 70 6F 72 74 20 6D 6F 64 75 e ...import modu
00FA70: 6C 65 20 2A 29 0D 0A 09 0D 0A 50 52 4F 43 45 44 le *).....PROCED
00FA80: 55 52 45 20 48 49 44 45 28 70 3A 41 44 44 52 45 URE HIDE(p:ADDRE
00FA90: 53 53 29 3B 0D 0A 0D 0A 28 2A 09 48 69 64 65 20 SS);....(*.Hide
00FAA0: 61 6E 20 69 64 65 6E 74 69 66 69 65 72 0D 0A 0D an identifier...
00FAB0: 0A 09 41 6E 20 69 64 65 6E 74 69 66 69 65 72 20 ..An identifier
00FAC0: 69 73 20 68 69 64 64 65 6E 20 62 79 20 73 65 74 is hidden by set
00FAD0: 74 69 6E 67 20 74 68 65 20 74 6F 70 20 62 69 74 ting the top bit
00FAE0: 0D 0A 09 6F 66 20 74 68 65 20 62 79 74 65 20 70 ...of the byte p
00FAF0: 72 65 63 65 64 69 6E 67 20 74 68 65 20 70 6F 69 receding the poi
00FB00: 6C 6F 66 66 73 65 74 3A 49 4E 54 45 47 45 52 3B loffset:INTEGER;
00FB10: 09 28 2A 72 65 6C 20 63 6F 64 65 20 62 75 66 66 .(*rel code buff
00FB20: 65 72 20 70 6F 69 6E 74 65 72 2A 29 0D 0A 09 09 er pointer*)....
00FB30: 09 6D 64 72 65 6C 62 6C 6F 63 6B 3A 49 4E 54 45 .mdrelblock:INTE
00FB40: 47 45 52 3B 09 28 2A 61 6E 64 20 62 6C 6F 63 6B GER;.(*and block
00FB50: 20 6E 75 6D 62 65 72 2A 29 20 0D 0A 09 09 09 7C number*) .....|
00FB60: 0D 0A 09 09 6C 69 6E 6B 63 6C 61 73 73 3A 6C 69 ....linkclass:li
00FB70: 6E 6B 3A 70 6E 61 6D 65 0D 0A 09 09 45 4E 44 3B nk:pname....END;
00FB80: 0D 0A 09 20 20 20 20 45 4E 44 3B 0D 0A 56 41 52 ... END;..VAR
00FB90: 09 49 44 3A 61 6C 66 61 3B 0D 0A 50 52 4F 43 45 .ID:alfa;..PROCE
00FBA0: 44 55 52 45 20 52 45 54 52 4E 41 4D 45 28 50 3A DURE RETRNAME(P:
00FBB0: 41 44 44 52 45 53 53 29 3B 0D 0A 50 52 4F 43 45 ADDRESS);..PROCE
00FBC0: 44 55 52 45 20 4C 4F 4F 4B 55 50 28 69 64 3A 61 DURE LOOKUP(id:a
00FBD0: 6C 66 61 3B 74 61 62 3A 70 6E 61 6D 65 29 3A 70 lfa;tab:pname):p
00FBE0: 6E 61 6D 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 name;..PROCEDURE
00FBF0: 20 4C 4F 41 44 46 49 4C 45 28 66 6E 3A 46 69 6C LOADFILE(fn:Fil
00FC00: 65 4E 61 6D 65 29 3A 70 6E 61 6D 65 3B 0D 0A 45 eName):pname;..E
00FC10: 4E 44 20 49 6D 70 6F 72 74 2E 0D 0A 0D 0A 1A 1A ND Import.......
00FC20: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00FC30: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00FC40: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00FC50: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00FC60: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 46 20 00 00 00 00 ..........F ....
00FC70: 00 00 00 00 00 00 D6 51 90 0D 45 00 9B 03 00 00 .......Q..E.....
00FC80: 09 57 72 69 74 65 4E 61 6D 65 28 52 69 67 68 74 .WriteName(Right
00FC90: 4E 61 6D 65 73 5B 6A 5D 2C 4F 75 74 70 75 74 41 Names[j],OutputA
00FCA0: 64 64 65 64 29 3B 0D 0A 09 57 72 69 74 65 4C 6E dded);...WriteLn
00FCB0: 3B 0D 0A 09 45 4E 44 20 50 72 69 6E 74 52 69 67 ;...END PrintRig
00FCC0: 68 74 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 ht;....PROCEDURE
00FCD0: 20 43 6F 6D 70 61 72 65 4F 4B 28 66 31 2C 66 32 CompareOK(f1,f2
00FCE0: 3A 46 69 6C 65 52 65 63 6F 72 64 29 3A 42 4F 4F :FileRecord):BOO
00FCF0: 4C 45 41 4E 3B 0D 0A 0D 0A 56 41 52 09 66 6E 31 LEAN;....VAR.fn1
00FD00: 79 70 65 2C 75 6E 6B 6E 6F 77 6E 74 79 70 65 2C ype,unknowntype,
00FD10: 69 6E 74 6F 72 63 61 72 64 29 3B 0D 0A 09 70 6E intorcard);...pn
00FD20: 61 6D 65 3D 50 4F 49 4E 54 45 52 20 54 4F 20 6E ame=POINTER TO n
00FD30: 61 6D 65 3B 0D 0A 0D 0A 09 70 70 61 72 61 6D 3D ame;.....pparam=
00FD40: 50 4F 49 4E 54 45 52 20 54 4F 20 70 61 72 61 6D POINTER TO param
00FD50: 3B 0D 0A 09 70 61 72 61 6D 3D 52 45 43 4F 52 44 ;...param=RECORD
00FD60: 0D 0A 09 09 76 61 72 70 61 72 3A 42 4F 4F 4C 45 ....varpar:BOOLE
00FD70: 41 4E 3B 0D 0A 09 09 76 61 72 74 79 70 65 3A 70 AN;....vartype:p
00FD80: 6E 61 6D 65 3B 0D 0A 09 09 6E 65 78 74 3A 70 70 name;....next:pp
00FD90: 61 72 61 6D 3B 0D 0A 09 09 6F 70 65 6E 61 72 72 aram;....openarr
00FDA0: 61 79 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09 09 45 ay:BOOLEAN;....E
00FDB0: 4E 44 3B 0D 0A 09 6F 62 6A 65 63 74 09 3D 20 28 ND;...object.= (
00FDC0: 20 28 2A 20 74 79 70 65 73 20 6F 66 20 73 79 6D (* types of sym
00FDD0: 62 6F 6C 20 74 61 62 6C 65 20 65 6E 74 72 79 73 bol table entrys
00FDE0: 20 2A 29 0D 0A 09 09 63 6F 6E 73 74 61 6E 74 2C *)....constant,
00FDF0: 20 70 72 6F 7A 65 64 75 72 65 2C 20 66 75 6E 6B prozedure, funk
00FE00: 74 69 6F 6E 2C 0D 0A 09 09 76 61 72 69 61 62 6C tion,....variabl
00FE10: 65 2C 20 74 69 70 65 2C 73 74 64 70 72 6F 63 2C e, tipe,stdproc,
00FE20: 73 74 64 66 75 6E 63 2C 6D 6F 64 63 6C 61 73 73 stdfunc,modclass
00FE30: 2C 6C 69 6E 6B 63 6C 61 73 73 2C 66 6F 72 72 65 ,linkclass,forre
00FE40: 66 65 72 0D 0A 09 09 29 3B 0D 0A 09 76 66 6F 72 fer....);...vfor
00FE50: 6D 3D 42 59 54 45 3B 0D 0A 09 6E 61 6D 65 3D 52 m=BYTE;...name=R
00FE60: 45 43 4F 52 44 0D 0A 09 09 6C 6F 77 65 72 3A 70 ECORD....lower:p
00FE70: 6E 61 6D 65 3B 0D 0A 09 09 75 70 70 65 72 3A 70 name;....upper:p
00FE80: 6E 61 6D 65 3B 0D 0A 09 09 65 78 70 6F 72 74 6C name;....exportl
00FE90: 69 6E 6B 3A 70 6E 61 6D 65 3B 0D 0A 09 09 6E 74 ink:pname;....nt
00FEA0: 79 70 65 3A 70 6E 61 6D 65 3B 0D 0A 09 09 43 41 ype:pname;....CA
00FEB0: 53 45 20 6E 61 6D 65 63 6C 61 73 73 3A 6F 62 6A SE nameclass:obj
00FEC0: 65 63 74 20 4F 46 0D 0A 09 09 63 6F 6E 73 74 61 ect OF....consta
00FED0: 6E 74 3A 76 61 6C 75 3A 49 4E 54 45 47 45 52 3B nt:valu:INTEGER;
00FEE0: 0D 0A 09 09 09 43 41 53 45 20 3A 49 4E 54 45 47 .....CASE :INTEG
00FEF0: 45 52 20 4F 46 0D 0A 09 09 09 09 30 3A 61 63 74 ER OF......0:act
00FF00: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
00FF10: 4F 44 55 4C 45 20 49 6D 70 6F 72 74 3B 20 0D 0A ODULE Import; ..
00FF20: 0D 0A 28 2A 20 09 41 20 6D 6F 64 75 6C 65 20 74 ..(* .A module t
00FF30: 6F 20 70 65 72 66 6F 72 6D 20 65 78 70 6F 72 74 o perform export
00FF40: 73 20 61 6E 64 20 69 6D 70 6F 72 74 73 20 66 6F s and imports fo
00FF50: 72 20 6D 6F 64 75 6C 61 2D 32 20 0D 0A 20 20 09 r modula-2 .. .
00FF60: 70 72 6F 67 72 61 6D 73 2E 20 54 68 69 73 20 6D programs. This m
00FF70: 6F 64 75 6C 65 20 77 69 6C 6C 20 72 65 61 64 20 odule will read
00FF80: 53 59 4D 20 66 69 6C 65 73 20 63 72 65 61 74 65 SYM files create
00FF90: 64 20 62 79 20 74 68 65 0D 0A 09 46 54 4C 20 4D d by the...FTL M
00FFA0: 6F 64 75 6C 61 2D 32 20 63 6F 6D 70 69 6C 65 72 odula-2 compiler
00FFB0: 20 0D 0A 0D 0A 09 54 68 69 73 20 6D 6F 64 75 6C .....This modul
00FFC0: 65 20 64 6F 65 73 20 6E 6F 74 20 63 6F 6E 74 61 e does not conta
00FFD0: 69 6E 20 61 6C 6C 20 74 68 65 20 63 6F 64 65 20 in all the code
00FFE0: 72 65 71 75 69 72 65 64 20 74 6F 20 69 6D 70 6F required to impo
00FFF0: 72 74 0D 0A 09 6D 75 6C 74 69 70 6C 65 20 73 79 rt...multiple sy
010000: 6D 62 6F 6C 20 74 61 62 6C 65 73 2E 20 46 6F 72 mbol tables. For
010010: 20 74 68 69 73 20 72 65 61 73 6F 6E 2C 20 69 66 this reason, if
010020: 20 79 6F 75 20 75 73 65 20 74 68 69 73 0D 0A 09 you use this...
010030: 6D 6F 64 75 6C 65 20 74 6F 20 69 6D 70 6F 72 74 module to import
010040: 20 73 65 76 65 72 61 6C 20 73 79 6D 62 6F 6C 20 several symbol
010050: 74 61 62 6C 65 73 2C 20 74 68 65 79 20 77 69 6C tables, they wil
010060: 6C 20 6E 6F 74 20 62 65 20 6C 69 6E 6B 65 64 0D l not be linked.
010070: 0A 09 74 6F 67 65 74 68 65 72 20 63 6F 72 72 65 ..together corre
010080: 63 74 6C 79 2E 20 54 68 69 73 20 6D 65 61 6E 73 ctly. This means
010090: 20 74 68 61 74 20 79 6F 75 20 63 61 6E 6E 6F 74 that you cannot
0100A0: 20 64 6F 20 74 79 70 65 20 63 68 65 63 6B 69 6E do type checkin
0100B0: 67 0D 0A 09 75 73 69 6E 67 20 74 68 69 73 20 6D g...using this m
0100C0: 6F 64 75 6C 65 2E 0D 0A 0D 0A 09 4C 65 74 20 6D odule......Let m
0100D0: 65 20 65 78 70 6C 61 69 6E 20 74 68 61 74 20 6D e explain that m
0100E0: 6F 72 65 20 74 68 6F 72 6F 75 67 68 6C 79 2E 20 ore thoroughly.
0100F0: 45 61 63 68 20 53 59 4D 20 54 61 62 6C 65 20 63 Each SYM Table c
010100: 76 61 6C 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 09 val:INTEGER;....
010110: 09 09 20 20 65 6E 75 6D 3A 42 4F 4F 4C 45 41 4E .. enum:BOOLEAN
010120: 7C 0D 0A 09 09 09 09 31 3A 72 76 61 6C 3A 52 45 |......1:rval:RE
010130: 41 4C 0D 0A 09 09 09 09 45 4E 44 7C 0D 0A 09 09 AL......END|....
010140: 70 72 6F 7A 65 64 75 72 65 2C 66 75 6E 6B 74 69 prozedure,funkti
010150: 6F 6E 3A 0D 0A 09 09 09 70 61 64 72 3A 49 4E 54 on:.....padr:INT
010160: 45 47 45 52 3B 0D 0A 09 09 09 66 6F 72 72 65 66 EGER;.....forref
010170: 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09 09 09 63 6F :BOOLEAN;.....co
010180: 64 65 61 64 72 3A 49 4E 54 45 47 45 52 3B 0D 0A deadr:INTEGER;..
010190: 09 09 09 70 72 6F 63 6D 6F 64 3A 42 59 54 45 3B ...procmod:BYTE;
0101A0: 0D 0A 09 09 09 65 78 69 73 74 6F 70 65 6E 3A 42 .....existopen:B
0101B0: 4F 4F 4C 45 41 4E 3B 0D 0A 09 09 09 7C 0D 0A 09 OOLEAN;.....|...
0101C0: 09 76 61 72 69 61 62 6C 65 3A 61 64 64 72 73 3A .variable:addrs:
0101D0: 49 4E 54 45 47 45 52 3B 0D 0A 09 09 09 20 67 72 INTEGER;..... gr
0101E0: 6F 75 70 3A 42 59 54 45 3B 0D 0A 09 09 09 20 66 oup:BYTE;..... f
0101F0: 6F 72 6D 3A 76 66 6F 72 6D 3B 7C 0D 0A 09 09 74 orm:vform;|....t
010200: 69 70 65 3A 09 73 69 7A 65 3A 49 4E 54 45 47 45 ipe:.size:INTEGE
010210: 52 3B 0D 0A 09 09 09 43 41 53 45 20 63 6C 61 73 R;.....CASE clas
010220: 73 3A 74 79 70 65 63 6C 61 73 73 20 4F 46 0D 0A s:typeclass OF..
010230: 09 09 09 09 61 72 72 61 79 74 79 70 65 3A 65 6C ....arraytype:el
010240: 65 6D 74 79 70 65 3A 70 6E 61 6D 65 3B 0D 0A 09 emtype:pname;...
010250: 09 09 09 09 20 20 69 6E 64 65 78 74 79 70 65 3A .... indextype:
010260: 70 6E 61 6D 65 7C 28 2A 6E 69 6C 3D 3E 6E 6F 6E pname|(*nil=>non
010270: 65 2A 29 0D 0A 09 09 09 09 72 65 63 6F 72 64 74 e*)......recordt
010280: 79 70 65 3A 73 75 62 66 69 65 6C 64 73 3A 70 6E ype:subfields:pn
010290: 61 6D 65 7C 0D 0A 09 09 09 09 73 75 62 72 74 79 ame|......subrty
0102A0: 70 65 2C 65 6E 75 6D 74 79 70 65 3A 6C 6F 77 3A pe,enumtype:low:
0102B0: 49 4E 54 45 47 45 52 3B 0D 0A 09 09 09 09 09 20 INTEGER;.......
0102C0: 20 20 20 20 20 20 20 20 20 68 69 67 68 3A 49 4E high:IN
0102D0: 54 45 47 45 52 3B 0D 0A 09 09 09 09 09 09 20 20 TEGER;........
0102E0: 62 74 79 70 65 3A 70 6E 61 6D 65 7C 0D 0A 09 09 btype:pname|....
0102F0: 09 09 70 6F 69 6E 74 74 79 70 65 2C 73 65 74 74 ..pointtype,sett
010300: 6F 6D 74 61 69 6E 73 20 61 20 0D 0A 09 63 6F 70 omtains a ...cop
010310: 79 20 6F 66 20 65 76 65 72 79 20 64 65 63 6C 61 y of every decla
010320: 72 61 74 69 6F 6E 20 77 68 69 63 68 20 69 73 20 ration which is
010330: 75 73 65 64 20 69 6E 20 74 68 65 20 53 59 4D 20 used in the SYM
010340: 74 61 62 6C 65 2E 20 46 6F 72 0D 0A 09 65 78 61 table. For...exa
010350: 6D 70 6C 65 2C 20 69 74 20 79 6F 75 20 69 6D 70 mple, it you imp
010360: 6F 72 74 20 42 59 54 45 20 66 72 6F 6D 20 53 59 ort BYTE from SY
010370: 53 54 45 4D 2C 20 74 68 65 72 65 20 69 73 20 61 STEM, there is a
010380: 20 63 6F 70 79 20 6F 66 20 74 68 65 0D 0A 09 64 copy of the...d
010390: 65 63 6C 61 72 61 74 69 6F 6E 20 66 6F 72 20 42 eclaration for B
0103A0: 59 54 45 2E 20 41 20 73 79 6D 62 6F 6C 20 6C 69 YTE. A symbol li
0103B0: 6B 65 20 42 59 54 45 20 69 73 20 6C 69 6B 65 6C ke BYTE is likel
0103C0: 79 20 74 6F 20 62 65 20 69 6D 70 6F 72 74 65 64 y to be imported
0103D0: 0D 0A 09 62 79 20 61 20 6E 75 6D 62 65 72 20 6F ...by a number o
0103E0: 66 20 64 69 66 66 65 72 65 6E 74 20 73 79 6D 62 f different symb
0103F0: 6F 6C 20 74 61 62 6C 65 73 20 61 6E 64 20 73 6F ol tables and so
010400: 20 73 65 76 65 72 61 6C 20 63 6F 70 69 65 73 0D several copies.
010410: 0A 09 6F 66 20 74 68 65 20 64 65 63 6C 61 72 61 ..of the declara
010420: 74 69 6F 6E 20 77 69 6C 6C 20 65 78 69 73 74 2E tion will exist.
010430: 20 49 6E 20 74 68 65 20 63 6F 6D 70 69 6C 65 72 In the compiler
010440: 2C 20 61 6C 6C 20 74 68 65 73 65 20 61 72 65 20 , all these are
010450: 6C 69 6E 6B 65 64 0D 0A 09 74 6F 67 65 74 68 65 linked...togethe
010460: 72 20 73 6F 20 74 68 61 74 20 42 59 54 45 20 6F r so that BYTE o
010470: 6E 6C 79 20 68 61 73 20 6F 6E 65 20 61 63 74 69 nly has one acti
010480: 76 65 20 64 65 66 69 6E 69 74 69 6F 6E 2E 20 4F ve definition. O
010490: 74 68 65 72 77 69 73 65 2C 20 0D 0A 09 76 61 72 therwise, ...var
0104A0: 69 61 62 6C 65 73 20 6F 66 20 74 79 70 65 20 42 iables of type B
0104B0: 59 54 45 20 69 6D 70 6F 72 74 65 64 20 66 72 6F YTE imported fro
0104C0: 6D 20 64 69 66 66 65 72 65 6E 74 20 6D 6F 64 75 m different modu
0104D0: 6C 65 73 20 77 6F 75 6C 64 20 6E 6F 74 0D 0A 09 les would not...
0104E0: 62 65 20 63 6F 6D 70 61 74 69 62 6C 65 2E 09 0D be compatible...
0104F0: 0A 0D 0A 09 4E 6F 72 20 64 6F 65 73 20 69 74 20 ....Nor does it
010500: 79 70 65 3A 72 65 66 74 79 70 65 3A 70 6E 61 6D ype:reftype:pnam
010510: 65 7C 0D 0A 09 09 09 09 70 72 74 79 70 65 3A 70 e|......prtype:p
010520: 72 70 61 72 73 3A 70 70 61 72 61 6D 7C 0D 0A 09 rpars:pparam|...
010530: 09 09 09 75 6E 6B 6E 6F 77 6E 74 79 70 65 2C 66 ...unknowntype,f
010540: 6F 72 77 61 72 64 72 65 66 3A 74 6D 6F 64 6E 6F orwardref:tmodno
010550: 3A 49 4E 54 45 47 45 52 7C 0D 0A 09 09 09 09 45 :INTEGER|......E
010560: 4E 44 3B 0D 0A 09 09 09 09 7C 0D 0A 09 09 73 74 ND;......|....st
010570: 64 70 72 6F 63 3A 73 74 64 6F 72 64 3A 49 4E 54 dproc:stdord:INT
010580: 45 47 45 52 7C 0D 0A 09 09 73 74 64 66 75 6E 63 EGER|....stdfunc
010590: 3A 0D 0A 09 09 09 67 65 6E 6C 69 73 74 3A 70 6E :.....genlist:pn
0105A0: 61 6D 65 3B 0D 0A 09 09 09 73 74 64 63 6C 61 73 ame;.....stdclas
0105B0: 73 3A 42 59 54 45 3B 0D 0A 09 09 09 70 61 72 74 s:BYTE;.....part
0105C0: 79 70 65 3A 70 6E 61 6D 65 3B 0D 0A 09 09 09 63 ype:pname;.....c
0105D0: 6F 6D 70 61 74 3A 42 59 54 45 3B 0D 0A 09 09 09 ompat:BYTE;.....
0105E0: 43 41 53 45 20 3A 49 4E 54 45 47 45 52 20 4F 46 CASE :INTEGER OF
0105F0: 0D 0A 09 09 09 09 30 3A 66 75 6E 63 6E 6F 3A 42 ......0:funcno:B
010600: 59 54 45 7C 0D 0A 09 09 09 09 31 3A 66 75 6E 63 YTE|......1:func
010610: 64 6F 70 3A 42 59 54 45 3B 66 75 6E 63 63 6F 6E dop:BYTE;funccon
010620: 73 74 3A 49 4E 54 45 47 45 52 7C 0D 0A 09 09 09 st:INTEGER|.....
010630: 09 32 3A 66 75 6E 63 6D 6F 70 3A 42 59 54 45 7C .2:funcmop:BYTE|
010640: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 7C ......END;.....|
010650: 0D 0A 09 09 6D 6F 64 63 6C 61 73 73 3A 6D 61 67 ....modclass:mag
010660: 69 63 3A 49 4E 54 45 47 45 52 3B 09 28 2A 6D 61 ic:INTEGER;.(*ma
010670: 67 69 63 20 6E 75 6D 62 65 72 2A 29 0D 0A 09 09 gic number*)....
010680: 09 6E 65 78 74 6D 6F 64 75 6C 65 3A 70 6E 61 6D .nextmodule:pnam
010690: 65 3B 09 28 2A 6E 65 78 74 20 69 6D 70 6F 72 74 e;.(*next import
0106A0: 65 64 20 6D 6F 64 75 6C 65 2A 29 0D 0A 09 09 09 ed module*).....
0106B0: 6D 6F 64 6E 61 6D 65 73 3A 70 6E 61 6D 65 3B 09 modnames:pname;.
0106C0: 09 28 2A 73 79 6D 62 6F 6C 20 74 61 62 6C 65 2A .(*symbol table*
0106D0: 29 0D 0A 09 09 09 6D 6F 64 6C 69 73 74 3A 70 6E ).....modlist:pn
0106E0: 61 6D 65 3B 09 09 28 2A 6C 69 6E 6B 65 64 20 6C ame;..(*linked l
0106F0: 69 73 74 20 6F 66 20 6E 61 6D 65 73 2A 29 0D 0A ist of names*)..
010700: 63 6F 6E 74 61 69 6E 20 74 68 65 20 63 6F 64 65 contain the code
010710: 20 74 6F 20 70 72 6F 63 65 73 73 20 74 68 65 20 to process the
010720: 69 6D 70 6F 72 74 20 6C 69 73 74 0D 0A 09 2A 29 import list...*)
010730: 0D 0A 46 52 4F 4D 09 46 61 73 74 4D 6F 76 65 20 ..FROM.FastMove
010740: 49 4D 50 4F 52 54 20 4D 6F 76 65 75 70 3B 0D 0A IMPORT Moveup;..
010750: 46 52 4F 4D 09 53 74 6F 72 61 67 65 20 49 4D 50 FROM.Storage IMP
010760: 4F 52 54 20 41 4C 4C 4F 43 41 54 45 3B 0D 0A 46 ORT ALLOCATE;..F
010770: 52 4F 4D 09 54 65 72 6D 69 6E 61 6C 20 49 4D 50 ROM.Terminal IMP
010780: 4F 52 54 20 57 72 69 74 65 53 74 72 69 6E 67 2C ORT WriteString,
010790: 57 72 69 74 65 4C 6E 3B 0D 0A 46 52 4F 4D 09 53 WriteLn;..FROM.S
0107A0: 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 41 44 52 YSTEM IMPORT ADR
0107B0: 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 20 49 4D ;..FROM.Files IM
0107C0: 50 4F 52 54 20 4C 6F 6F 6B 75 70 2C 53 65 71 52 PORT Lookup,SeqR
0107D0: 65 61 64 42 6C 6F 63 6B 2C 43 6C 6F 73 65 2C 46 eadBlock,Close,F
0107E0: 49 4C 45 3B 0D 0A 43 4F 4E 53 54 09 42 69 67 67 ILE;..CONST.Bigg
0107F0: 65 73 74 46 69 6C 65 3D 38 31 39 31 3B 09 28 2A estFile=8191;.(*
010800: 62 69 67 67 65 73 74 20 73 79 6D 20 66 69 6C 65 biggest sym file
010810: 20 72 65 61 64 61 62 6C 65 2A 29 20 20 0D 0A 0D readable*) ...
010820: 0A 56 41 52 20 0D 0A 09 43 4F 4D 50 4C 49 4E 4B .VAR ...COMPLINK
010830: 3A 70 6E 61 6D 65 3B 20 0D 0A 09 50 4C 49 4E 4B :pname; ...PLINK
010840: 2C 4C 41 53 54 4C 49 4E 4B 2C 6E 6C 69 6E 6B 3A ,LASTLINK,nlink:
010850: 70 6E 61 6D 65 3B 20 0D 0A 09 52 45 4C 4F 46 46 pname; ...RELOFF
010860: 2C 47 4C 4F 42 52 45 4C 4F 46 46 2C 52 45 4C 42 ,GLOBRELOFF,RELB
010870: 41 53 45 3A 43 41 52 44 49 4E 41 4C 3B 20 0D 0A ASE:CARDINAL; ..
010880: 09 53 49 44 3A 61 6C 66 61 3B 20 0D 0A 09 48 49 .SID:alfa; ...HI
010890: 44 45 41 4C 4C 3A 42 4F 4F 4C 45 41 4E 3D 46 41 DEALL:BOOLEAN=FA
0108A0: 4C 53 45 3B 20 0D 0A 09 48 49 44 45 4F 54 48 45 LSE; ...HIDEOTHE
0108B0: 52 53 3A 42 4F 4F 4C 45 41 4E 3B 20 0D 0A 09 4E RS:BOOLEAN; ...N
0108C0: 45 57 4D 4F 44 4E 41 4D 45 3A 70 6E 61 6D 65 3B EWMODNAME:pname;
0108D0: 20 0D 0A 09 4D 4F 44 55 4C 45 4E 41 4D 45 3A 61 ...MODULENAME:a
0108E0: 6C 66 61 3B 20 0D 0A 09 4D 4F 44 55 4C 45 50 4E lfa; ...MODULEPN
0108F0: 54 3A 70 6E 61 6D 65 3B 20 0D 0A 09 44 49 53 50 T:pname; ...DISP
010900: 09 09 09 61 6E 6F 6E 6C 69 73 74 3A 70 6E 61 6D ...anonlist:pnam
010910: 65 3B 09 09 28 2A 61 6E 6F 6E 79 6D 6F 75 73 20 e;..(*anonymous
010920: 6E 61 6D 65 73 2A 29 0D 0A 09 09 09 6D 6F 64 62 names*).....modb
010930: 61 73 65 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A ase:CARDINAL;.(*
010940: 66 6F 72 20 74 61 62 6C 65 20 72 65 6C 6F 63 61 for table reloca
010950: 74 69 6F 6E 2A 29 0D 0A 09 09 09 67 6C 6F 62 61 tion*).....globa
010960: 6C 62 61 73 65 3A 43 41 52 44 49 4E 41 4C 3B 09 lbase:CARDINAL;.
010970: 28 2A 66 6F 72 20 67 6C 6F 62 61 6C 20 72 65 6C (*for global rel
010980: 6F 63 61 74 69 6F 6E 2A 29 0D 0A 09 09 09 6D 6F ocation*).....mo
010990: 64 64 65 62 75 67 3A 42 4F 4F 4C 45 41 4E 3B 09 ddebug:BOOLEAN;.
0109A0: 28 2A 74 72 75 65 20 69 66 20 63 6F 6D 70 69 6C (*true if compil
0109B0: 65 64 20 77 69 74 68 20 64 65 62 75 67 2A 29 0D ed with debug*).
0109C0: 0A 0D 0A 09 09 09 28 2A 54 68 65 20 66 6F 6C 6C ......(*The foll
0109D0: 6F 77 69 6E 67 20 76 61 72 69 61 62 6C 65 73 20 owing variables
0109E0: 67 69 76 65 20 74 68 65 20 73 74 61 74 65 20 6F give the state o
0109F0: 66 20 74 68 65 0D 0A 09 09 09 76 61 72 69 61 62 f the.....variab
010A00: 6C 65 73 20 61 66 74 65 72 20 74 68 65 20 64 65 les after the de
010A10: 66 20 6D 6F 64 75 6C 65 20 69 73 20 63 6F 6D 70 f module is comp
010A20: 69 6C 65 64 2A 29 20 0D 0A 0D 0A 09 09 09 6D 64 iled*) .......md
010A30: 67 72 6F 75 70 6E 6F 3A 49 4E 54 45 47 45 52 3B groupno:INTEGER;
010A40: 09 28 2A 6E 75 6D 62 65 72 20 6F 66 20 76 61 72 .(*number of var
010A50: 69 61 62 6C 65 20 67 72 6F 75 70 73 2A 29 0D 0A iable groups*)..
010A60: 09 09 09 6D 64 63 6F 6E 73 74 6E 6F 3A 49 4E 54 ...mdconstno:INT
010A70: 45 47 45 52 3B 09 28 2A 6E 75 6D 62 65 72 20 6F EGER;.(*number o
010A80: 66 20 63 6F 6E 73 74 61 6E 74 73 20 2A 29 0D 0A f constants *)..
010A90: 09 09 09 6D 64 6C 61 62 6E 6F 3A 49 4E 54 45 47 ...mdlabno:INTEG
010AA0: 45 52 3B 09 28 2A 6E 75 6D 62 65 72 20 6F 66 20 ER;.(*number of
010AB0: 70 72 6F 63 65 64 75 72 65 73 2A 29 0D 0A 09 09 procedures*)....
010AC0: 09 6D 64 6D 6F 64 75 6C 65 6E 6F 3A 49 4E 54 45 .mdmoduleno:INTE
010AD0: 47 45 52 3B 09 28 2A 6E 75 6D 62 65 72 20 66 6F GER;.(*number fo
010AE0: 20 6E 65 78 74 20 69 6D 70 6F 72 74 65 64 20 6D next imported m
010AF0: 6F 64 75 6C 65 2A 29 0D 0A 09 09 09 6D 64 72 65 odule*).....mdre
010B00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
010B10: 0E 00 01 00 02 09 52 E5 0E 00 C9 02 00 00 00 02 ......R.........
010B20: 0E 00 C5 02 00 00 00 02 0E 00 C1 02 00 00 00 02 ................
010B30: 0E 00 C6 02 00 00 00 02 0E 00 C2 02 00 00 00 02 ................
010B40: 0E 00 C7 02 00 00 00 02 0E 00 C3 02 00 00 00 02 ................
010B50: 0E 00 C8 02 00 00 00 02 0E 00 C4 02 00 00 00 02 ................
010B60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010B70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010B80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010B90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010C00: 53 49 44 20 54 48 45 4E 20 4C 41 53 54 4E 41 4D SID THEN LASTNAM
010C10: 45 5E 2E 75 70 70 65 72 3A 3D 43 4F 4D 50 4C 49 E^.upper:=COMPLI
010C20: 4E 4B 0D 0A 09 09 45 4C 53 45 20 4C 41 53 54 4E NK....ELSE LASTN
010C30: 41 4D 45 5E 2E 6C 6F 77 65 72 3A 3D 43 4F 4D 50 AME^.lower:=COMP
010C40: 4C 49 4E 4B 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 LINK END;....END
010C50: 3B 0D 0A 09 43 4F 4D 50 4C 49 4E 4B 5E 2E 75 70 ;...COMPLINK^.up
010C60: 70 65 72 3A 3D 4E 49 4C 3B 0D 0A 09 43 4F 4D 50 per:=NIL;...COMP
010C70: 4C 49 4E 4B 5E 2E 6C 6F 77 65 72 3A 3D 4E 49 4C LINK^.lower:=NIL
010C80: 3B 0D 0A 09 09 0D 0A 20 20 20 20 20 20 45 4E 44 ;...... END
010C90: 20 45 4E 54 45 52 4E 41 4D 45 3B 20 0D 0A 0D 0A ENTERNAME; ....
010CA0: 50 52 4F 43 45 44 55 52 45 20 4D 45 52 47 45 4E PROCEDURE MERGEN
010CB0: 41 4D 45 53 3B 20 0D 0A 28 2A 20 0D 0A 20 20 6D AMES; ..(* .. m
010CC0: 65 72 67 65 20 74 68 65 20 6E 61 6D 65 73 20 70 erge the names p
010CD0: 6F 69 6E 74 65 64 20 74 6F 20 62 79 20 63 6F 6D ointed to by com
010CE0: 70 6C 69 6E 6B 20 69 6E 74 6F 20 74 68 65 20 74 plink into the t
010CF0: 61 62 6C 65 20 6F 6E 65 20 62 65 6C 6F 77 20 74 able one below t
010D00: 68 65 20 0D 0A 20 20 74 6F 70 20 6F 66 20 74 68 he .. top of th
010D10: 65 20 64 69 73 70 6C 61 79 20 0D 0A 20 20 0D 0A e display .. ..
010D20: 20 20 4E 6F 74 65 20 74 68 61 74 20 74 68 65 20 Note that the
010D30: 68 65 61 70 20 69 73 20 6E 6F 74 20 63 75 74 20 heap is not cut
010D40: 62 61 63 6B 20 73 69 6E 63 65 20 74 68 61 74 20 back since that
010D50: 0D 0A 20 20 68 61 73 20 61 6C 72 65 61 64 79 20 .. has already
010D60: 62 65 65 6E 20 64 6F 6E 65 20 62 79 20 74 68 65 been done by the
010D70: 20 63 6F 6D 70 72 65 73 73 20 72 6F 75 74 69 6E compress routin
010D80: 65 2C 20 69 66 20 72 65 71 75 69 72 65 64 2A 29 e, if required*)
010D90: 0D 0A 56 41 52 20 50 3A 70 6E 61 6D 65 3B 20 0D ..VAR P:pname; .
010DA0: 0A 42 45 47 49 4E 0D 0A 09 43 4F 4D 50 4C 49 4E .BEGIN...COMPLIN
010DB0: 4B 3A 3D 4E 45 57 4D 4F 44 4E 41 4D 45 5E 2E 6D K:=NEWMODNAME^.m
010DC0: 6F 64 6C 69 73 74 3B 20 0D 0A 09 57 48 49 4C 45 odlist; ...WHILE
010DD0: 20 28 43 4F 4D 50 4C 49 4E 4B 3C 3E 4E 49 4C 29 (COMPLINK<>NIL)
010DE0: 20 44 4F 20 0D 0A 09 09 45 4E 54 45 52 4E 41 4D DO ....ENTERNAM
010DF0: 45 3B 20 0D 0A 09 09 43 4F 4D 50 4C 49 4E 4B 3A E; ....COMPLINK:
010E00: 20 20 20 72 65 63 6F 72 64 74 79 70 65 3A 0D 0A recordtype:..
010E10: 09 09 09 09 09 73 75 62 66 69 65 6C 64 73 3A 3D .....subfields:=
010E20: 52 45 4C 50 4E 54 52 28 73 75 62 66 69 65 6C 64 RELPNTR(subfield
010E30: 73 29 3B 20 0D 0A 09 09 09 09 09 7C 0D 0A 09 09 s); .......|....
010E40: 09 09 20 20 20 20 73 75 62 72 74 79 70 65 2C 65 .. subrtype,e
010E50: 6E 75 6D 74 79 70 65 3A 0D 0A 09 09 09 09 09 62 numtype:.......b
010E60: 74 79 70 65 3A 3D 52 45 4C 50 4E 54 52 28 62 74 type:=RELPNTR(bt
010E70: 79 70 65 29 3B 20 0D 0A 09 09 09 09 09 7C 0D 0A ype); .......|..
010E80: 09 09 09 09 20 20 20 20 70 6F 69 6E 74 74 79 70 .... pointtyp
010E90: 65 2C 73 65 74 74 79 70 65 3A 0D 0A 09 09 09 09 e,settype:......
010EA0: 09 72 65 66 74 79 70 65 3A 3D 52 45 4C 50 4E 54 .reftype:=RELPNT
010EB0: 52 28 72 65 66 74 79 70 65 29 3B 20 0D 0A 09 09 R(reftype); ....
010EC0: 09 09 09 7C 0D 0A 09 09 09 09 20 20 20 20 70 72 ...|...... pr
010ED0: 74 79 70 65 3A 0D 0A 09 09 09 09 09 70 72 70 61 type:.......prpa
010EE0: 72 73 3A 3D 52 45 4C 50 4E 54 52 28 70 72 70 61 rs:=RELPNTR(prpa
010EF0: 72 73 29 3B 20 0D 0A 09 09 09 09 09 4F 4C 44 50 rs); .......OLDP
010F00: 41 52 3A 3D 70 72 70 61 72 73 3B 20 0D 0A 09 09 AR:=prpars; ....
010F10: 09 09 09 57 48 49 4C 45 20 4F 4C 44 50 41 52 3C ...WHILE OLDPAR<
010F20: 3E 4E 49 4C 20 44 4F 20 0D 0A 09 09 09 09 09 20 >NIL DO .......
010F30: 20 20 20 57 49 54 48 20 4F 4C 44 50 41 52 5E 20 WITH OLDPAR^
010F40: 44 4F 20 0D 0A 09 09 09 09 09 09 76 61 72 74 79 DO ........varty
010F50: 70 65 3A 3D 52 45 4C 50 4E 54 52 28 76 61 72 74 pe:=RELPNTR(vart
010F60: 79 70 65 29 3B 20 0D 0A 09 09 09 09 09 09 6E 65 ype); ........ne
010F70: 78 74 3A 3D 52 45 4C 50 4E 54 52 28 6E 65 78 74 xt:=RELPNTR(next
010F80: 29 3B 20 0D 0A 09 09 09 09 09 09 4F 4C 44 50 41 ); ........OLDPA
010F90: 52 3A 3D 6E 65 78 74 3B 20 0D 0A 09 09 09 09 09 R:=next; .......
010FA0: 09 45 4E 44 3B 0D 0A 09 09 09 09 09 20 20 20 20 .END;.......
010FB0: 45 4E 44 3B 0D 0A 09 09 09 09 09 20 0D 0A 09 09 END;....... ....
010FC0: 09 09 09 7C 0D 0A 09 09 09 09 20 20 20 20 45 4E ...|...... EN
010FD0: 44 3B 0D 0A 09 09 09 09 7C 28 2A 63 61 73 65 20 D;......|(*case
010FE0: 63 6C 61 73 73 2A 29 0D 0A 09 09 09 20 20 20 20 class*).....
010FF0: 6C 69 6E 6B 63 6C 61 73 73 3A 0D 0A 09 09 09 09 linkclass:......
011000: 6E 74 65 72 20 2A 29 0D 0A 42 45 47 49 4E 0D 0A nter *)..BEGIN..
011010: 09 70 3A 3D 41 44 44 52 45 53 53 28 43 41 52 44 .p:=ADDRESS(CARD
011020: 49 4E 41 4C 28 70 29 2D 31 29 3B 0D 0A 09 49 46 INAL(p)-1);...IF
011030: 20 70 5E 3C 31 32 38 20 54 48 45 4E 20 70 5E 3A p^<128 THEN p^:
011040: 3D 70 5E 2B 31 32 38 20 45 4E 44 3B 0D 0A 09 45 =p^+128 END;...E
011050: 4E 44 20 48 49 44 45 3B 0D 0A 50 52 4F 43 45 44 ND HIDE;..PROCED
011060: 55 52 45 20 55 4E 48 49 44 45 28 70 3A 41 44 44 URE UNHIDE(p:ADD
011070: 52 45 53 53 29 3B 0D 0A 0D 0A 28 2A 09 48 69 64 RESS);....(*.Hid
011080: 65 20 61 6E 20 69 64 65 6E 74 69 66 69 65 72 0D e an identifier.
011090: 0A 0D 0A 09 41 6E 20 69 64 65 6E 74 69 66 69 65 ....An identifie
0110A0: 72 20 69 73 20 68 69 64 64 65 6E 20 62 79 20 73 r is hidden by s
0110B0: 65 74 74 69 6E 67 20 74 68 65 20 74 6F 70 20 62 etting the top b
0110C0: 69 74 0D 0A 09 6F 66 20 74 68 65 20 62 79 74 65 it...of the byte
0110D0: 20 70 72 65 63 65 64 69 6E 67 20 74 68 65 20 70 preceding the p
0110E0: 6F 69 6E 74 65 72 20 2A 29 0D 0A 42 45 47 49 4E ointer *)..BEGIN
0110F0: 0D 0A 09 70 3A 3D 41 44 44 52 45 53 53 28 43 41 ...p:=ADDRESS(CA
011100: 52 44 49 4E 41 4C 28 70 29 2D 31 29 3B 0D 0A 09 RDINAL(p)-1);...
011110: 49 46 20 70 5E 3E 3D 31 32 38 20 54 48 45 4E 20 IF p^>=128 THEN
011120: 70 5E 3A 3D 70 5E 2D 31 32 38 20 45 4E 44 3B 0D p^:=p^-128 END;.
011130: 0A 09 45 4E 44 20 55 4E 48 49 44 45 3B 0D 0A 50 ..END UNHIDE;..P
011140: 52 4F 43 45 44 55 52 45 20 52 45 54 52 4E 41 4D ROCEDURE RETRNAM
011150: 45 28 70 3A 41 44 44 52 45 53 53 29 3B 0D 0A 56 E(p:ADDRESS);..V
011160: 41 52 09 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 AR.i:INTEGER;...
011170: 6C 65 6E 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 len:INTEGER;..BE
011180: 47 49 4E 0D 0A 09 70 3A 3D 41 44 44 52 45 53 53 GIN...p:=ADDRESS
011190: 28 43 41 52 44 49 4E 41 4C 28 70 29 2D 31 29 3B (CARDINAL(p)-1);
0111A0: 0D 0A 09 6C 65 6E 3A 3D 4F 52 44 28 70 5E 29 3B ...len:=ORD(p^);
0111B0: 0D 0A 09 28 2A 63 6C 65 61 72 20 74 6F 70 20 74 ...(*clear top t
0111C0: 77 6F 20 62 69 74 73 20 2A 29 0D 0A 0D 0A 09 49 wo bits *).....I
0111D0: 46 20 6C 65 6E 3E 3D 31 32 38 20 54 48 45 4E 20 F len>=128 THEN
0111E0: 6C 65 6E 3A 3D 6C 65 6E 2D 31 32 38 20 45 4E 44 len:=len-128 END
0111F0: 3B 0D 0A 09 49 46 20 6C 65 6E 3E 3D 36 34 20 54 ;...IF len>=64 T
011200: 6C 69 6E 6B 3A 3D 52 45 4C 50 4E 54 52 28 6C 69 link:=RELPNTR(li
011210: 6E 6B 29 3B 20 0D 0A 09 09 09 09 7C 0D 0A 09 09 nk); ......|....
011220: 09 20 20 20 20 45 4E 44 3B 20 28 2A 63 61 73 65 . END; (*case
011230: 20 6E 61 6D 65 63 6C 61 73 73 2A 29 0D 0A 09 09 nameclass*)....
011240: 09 6E 6C 69 6E 6B 3A 3D 65 78 70 6F 72 74 6C 69 .nlink:=exportli
011250: 6E 6B 3B 20 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 nk; .....END;...
011260: 09 20 20 20 20 45 4E 44 3B 20 28 2A 77 68 69 6C . END; (*whil
011270: 65 20 6E 6C 69 6E 6B 3C 3E 6E 69 6C 2A 29 0D 0A e nlink<>nil*)..
011280: 09 45 4E 44 20 52 45 4C 4F 43 41 54 45 3B 20 28 .END RELOCATE; (
011290: 2A 72 65 6C 6F 63 61 74 65 2A 29 0D 0A 50 52 4F *relocate*)..PRO
0112A0: 43 45 44 55 52 45 20 52 45 41 44 46 49 4C 45 28 CEDURE READFILE(
0112B0: 66 6E 3A 46 69 6C 65 4E 61 6D 65 29 3A 42 4F 4F fn:FileName):BOO
0112C0: 4C 45 41 4E 3B 0D 0A 54 59 50 45 09 42 6C 6F 63 LEAN;..TYPE.Bloc
0112D0: 6B 3D 41 52 52 41 59 5B 30 2E 2E 31 32 37 5D 20 k=ARRAY[0..127]
0112E0: 4F 46 20 42 59 54 45 3B 0D 0A 09 70 42 6C 6F 63 OF BYTE;...pBloc
0112F0: 6B 3D 50 4F 49 4E 54 45 52 20 54 4F 20 42 6C 6F k=POINTER TO Blo
011300: 63 6B 3B 0D 0A 56 41 52 09 66 3A 46 49 4C 45 3B ck;..VAR.f:FILE;
011310: 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52 ...reply:INTEGER
011320: 3B 0D 0A 09 46 69 72 73 74 3A 42 4F 4F 4C 45 41 ;...First:BOOLEA
011330: 4E 3B 0D 0A 09 70 3A 70 42 6C 6F 63 6B 3B 0D 0A N;...p:pBlock;..
011340: 09 62 3A 41 52 52 41 59 5B 30 2E 2E 42 69 67 67 .b:ARRAY[0..Bigg
011350: 65 73 74 46 69 6C 65 5D 20 4F 46 20 42 59 54 45 estFile] OF BYTE
011360: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 72 65 70 6C 79 ;..BEGIN...reply
011370: 3A 3D 31 3B 0D 0A 09 57 48 49 4C 45 20 28 72 65 :=1;...WHILE (re
011380: 70 6C 79 3C 48 49 47 48 28 66 6E 29 29 20 41 4E ply<HIGH(fn)) AN
011390: 44 20 28 66 6E 5B 72 65 70 6C 79 5D 3C 3E 27 2E D (fn[reply]<>'.
0113A0: 27 29 20 41 4E 44 20 28 66 6E 5B 72 65 70 6C 79 ') AND (fn[reply
0113B0: 5D 3C 3E 27 20 27 29 0D 0A 09 09 41 4E 44 20 28 ]<>' ')....AND (
0113C0: 66 6E 5B 72 65 70 6C 79 5D 3C 3E 30 78 29 20 44 fn[reply]<>0x) D
0113D0: 4F 0D 0A 09 09 49 4E 43 28 72 65 70 6C 79 29 3B O....INC(reply);
0113E0: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 72 65 ....END;...IF re
0113F0: 70 6C 79 3E 48 49 47 48 28 66 6E 29 20 54 48 45 ply>HIGH(fn) THE
011400: 48 45 4E 20 6C 65 6E 3A 3D 6C 65 6E 2D 36 34 20 HEN len:=len-64
011410: 45 4E 44 3B 0D 0A 09 49 46 20 6C 65 6E 3E 3D 33 END;...IF len>=3
011420: 32 20 54 48 45 4E 20 6C 65 6E 3A 3D 6C 65 6E 2D 2 THEN len:=len-
011430: 33 32 20 45 4E 44 3B 0D 0A 0D 0A 09 46 4F 52 20 32 END;.....FOR
011440: 69 3A 3D 31 20 54 4F 20 6C 65 6E 20 44 4F 0D 0A i:=1 TO len DO..
011450: 09 09 70 3A 3D 41 44 44 52 45 53 53 28 43 41 52 ..p:=ADDRESS(CAR
011460: 44 49 4E 41 4C 28 70 29 2D 31 29 3B 0D 0A 09 09 DINAL(p)-1);....
011470: 49 44 5B 69 5D 3A 3D 43 48 52 28 70 5E 29 3B 0D ID[i]:=CHR(p^);.
011480: 0A 09 09 45 4E 44 3B 0D 0A 09 46 4F 52 20 69 3A ...END;...FOR i:
011490: 3D 6C 65 6E 2B 31 20 54 4F 20 48 49 47 48 28 49 =len+1 TO HIGH(I
0114A0: 44 29 20 44 4F 20 49 44 5B 69 5D 3A 3D 27 20 27 D) DO ID[i]:=' '
0114B0: 20 45 4E 44 3B 09 0D 0A 09 45 4E 44 20 52 45 54 END;....END RET
0114C0: 52 4E 41 4D 45 3B 0D 0A 0D 0A 50 52 4F 43 45 44 RNAME;....PROCED
0114D0: 55 52 45 20 4C 4F 4F 4B 55 50 28 4C 49 44 3A 61 URE LOOKUP(LID:a
0114E0: 6C 66 61 3B 54 41 42 4C 45 3A 70 6E 61 6D 65 29 lfa;TABLE:pname)
0114F0: 3A 70 6E 61 6D 65 3B 0D 0A 42 45 47 49 4E 0D 0A :pname;..BEGIN..
011500: 09 4C 41 53 54 4E 41 4D 45 3A 3D 4E 49 4C 3B 0D .LASTNAME:=NIL;.
011510: 0A 09 4C 4F 4F 50 0D 0A 09 09 0D 0A 09 09 49 46 ..LOOP........IF
011520: 20 54 41 42 4C 45 3D 4E 49 4C 20 54 48 45 4E 20 TABLE=NIL THEN
011530: 45 58 49 54 20 45 4E 44 3B 0D 0A 09 09 4C 41 53 EXIT END;....LAS
011540: 54 4E 41 4D 45 3A 3D 54 41 42 4C 45 3B 0D 0A 09 TNAME:=TABLE;...
011550: 09 52 45 54 52 4E 41 4D 45 28 54 41 42 4C 45 29 .RETRNAME(TABLE)
011560: 3B 0D 0A 09 09 49 46 20 49 44 3C 4C 49 44 20 54 ;....IF ID<LID T
011570: 48 45 4E 20 54 41 42 4C 45 3A 3D 54 41 42 4C 45 HEN TABLE:=TABLE
011580: 5E 2E 75 70 70 65 72 0D 0A 09 09 45 4C 53 49 46 ^.upper....ELSIF
011590: 20 49 44 3E 4C 49 44 20 54 48 45 4E 20 54 41 42 ID>LID THEN TAB
0115A0: 4C 45 3A 3D 54 41 42 4C 45 5E 2E 6C 6F 77 65 72 LE:=TABLE^.lower
0115B0: 0D 0A 09 09 45 4C 53 45 20 45 58 49 54 20 45 4E ....ELSE EXIT EN
0115C0: 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54 D;....END;...RET
0115D0: 55 52 4E 20 54 41 42 4C 45 0D 0A 09 45 4E 44 20 URN TABLE...END
0115E0: 4C 4F 4F 4B 55 50 3B 0D 0A 50 52 4F 43 45 44 55 LOOKUP;..PROCEDU
0115F0: 52 45 20 52 45 4C 50 4E 54 52 28 46 49 45 4C 44 RE RELPNTR(FIELD
011600: 4E 20 52 45 54 55 52 4E 20 46 41 4C 53 45 20 45 N RETURN FALSE E
011610: 4E 44 3B 0D 0A 09 49 46 20 66 6E 5B 72 65 70 6C ND;...IF fn[repl
011620: 79 5D 3C 3E 27 2E 27 20 54 48 45 4E 0D 0A 09 09 y]<>'.' THEN....
011630: 49 46 20 28 72 65 70 6C 79 2B 33 29 3E 48 49 47 IF (reply+3)>HIG
011640: 48 28 66 6E 29 20 54 48 45 4E 20 52 45 54 55 52 H(fn) THEN RETUR
011650: 4E 20 46 41 4C 53 45 20 45 4E 44 3B 0D 0A 09 09 N FALSE END;....
011660: 66 6E 5B 72 65 70 6C 79 5D 3A 3D 27 2E 27 3B 0D fn[reply]:='.';.
011670: 0A 09 09 66 6E 5B 72 65 70 6C 79 2B 31 5D 3A 3D ...fn[reply+1]:=
011680: 27 53 27 3B 0D 0A 09 09 66 6E 5B 72 65 70 6C 79 'S';....fn[reply
011690: 2B 32 5D 3A 3D 27 59 27 3B 0D 0A 09 09 66 6E 5B +2]:='Y';....fn[
0116A0: 72 65 70 6C 79 2B 33 5D 3A 3D 27 4D 27 3B 0D 0A reply+3]:='M';..
0116B0: 09 09 66 6E 5B 72 65 70 6C 79 2B 34 5D 3A 3D 27 ..fn[reply+4]:='
0116C0: 20 27 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C 6F ';....END;...Lo
0116D0: 6F 6B 75 70 28 66 2C 66 6E 2C 72 65 70 6C 79 29 okup(f,fn,reply)
0116E0: 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 ;...IF reply<>0
0116F0: 54 48 45 4E 20 0D 0A 09 09 57 72 69 74 65 53 74 THEN ....WriteSt
011700: 72 69 6E 67 28 27 20 46 69 6C 65 20 6E 6F 74 20 ring(' File not
011710: 66 6F 75 6E 64 27 29 3B 57 72 69 74 65 53 74 72 found');WriteStr
011720: 69 6E 67 28 66 6E 29 3B 57 72 69 74 65 4C 6E 3B ing(fn);WriteLn;
011730: 0D 0A 09 09 52 45 54 55 52 4E 20 46 41 4C 53 45 ....RETURN FALSE
011740: 20 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 28 2A ....END;.....(*
011750: 52 65 61 64 20 74 68 65 20 64 61 74 61 20 2A 29 Read the data *)
011760: 0D 0A 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 28 ...SeqReadBlock(
011770: 66 2C 41 44 52 28 62 29 2C 53 49 5A 45 28 62 29 f,ADR(b),SIZE(b)
011780: 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 20 72 65 ,reply);...IF re
011790: 70 6C 79 3D 30 20 54 48 45 4E 20 0D 0A 09 09 57 ply=0 THEN ....W
0117A0: 72 69 74 65 53 74 72 69 6E 67 28 27 53 59 4D 20 riteString('SYM
0117B0: 46 69 6C 65 20 45 6D 70 74 79 20 27 29 3B 57 72 File Empty ');Wr
0117C0: 69 74 65 4C 6E 3B 0D 0A 09 09 52 45 54 55 52 4E iteLn;....RETURN
0117D0: 20 46 41 4C 53 45 20 0D 0A 09 09 45 4E 44 3B 0D FALSE ....END;.
0117E0: 0A 09 49 46 20 72 65 70 6C 79 3D 53 49 5A 45 28 ..IF reply=SIZE(
0117F0: 62 29 20 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 b) THEN....Write
011800: 53 3A 41 44 44 52 45 53 53 29 3A 41 44 44 52 45 S:ADDRESS):ADDRE
011810: 53 53 3B 20 0D 0A 0D 0A 28 2A 09 52 65 6C 6F 63 SS; ....(*.Reloc
011820: 61 74 65 20 61 20 70 6F 69 6E 74 65 72 20 0D 0A ate a pointer ..
011830: 0D 0A 09 54 68 65 72 65 20 61 72 65 20 74 77 6F ...There are two
011840: 20 61 72 65 61 73 20 77 68 69 63 68 20 74 68 65 areas which the
011850: 20 70 6F 69 6E 74 65 72 20 6D 61 79 20 6E 65 65 pointer may nee
011860: 64 0D 0A 09 72 65 6C 6F 63 61 74 69 6E 67 20 72 d...relocating r
011870: 65 6C 61 74 69 76 65 20 74 6F 20 28 73 65 65 20 elative to (see
011880: 43 68 75 72 63 68 69 6C 6C 29 2E 20 54 68 65 20 Churchill). The
011890: 67 6C 6F 62 61 6C 73 0D 0A 09 73 79 6D 62 6F 6C globals...symbol
0118A0: 20 74 61 62 6C 65 20 61 6E 64 20 74 68 65 20 6C table and the l
0118B0: 6F 63 61 6C 20 73 79 6D 62 6F 6C 73 20 74 61 62 ocal symbols tab
0118C0: 6C 65 2E 0D 0A 0D 0A 09 54 68 65 20 67 6C 6F 62 le......The glob
0118D0: 61 6C 20 73 79 6D 62 6F 6C 20 74 61 62 6C 65 20 al symbol table
0118E0: 69 73 20 61 73 73 75 6D 65 64 20 74 6F 20 62 65 is assumed to be
0118F0: 20 6C 6F 77 65 72 20 69 6E 20 6D 65 6D 6F 72 79 lower in memory
011900: 2A 29 0D 0A 56 41 52 09 61 3A 41 44 44 52 45 53 *)..VAR.a:ADDRES
011910: 53 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 46 S;..BEGIN...IF F
011920: 49 45 4C 44 53 3D 4E 49 4C 20 54 48 45 4E 20 0D IELDS=NIL THEN .
011930: 0A 09 20 20 20 20 09 61 3A 3D 4E 49 4C 20 0D 0A .. .a:=NIL ..
011940: 09 45 4C 53 49 46 20 43 41 52 44 49 4E 41 4C 28 .ELSIF CARDINAL(
011950: 46 49 45 4C 44 53 29 3C 52 45 4C 42 41 53 45 20 FIELDS)<RELBASE
011960: 54 48 45 4E 0D 0A 09 09 61 3A 3D 41 44 44 52 45 THEN....a:=ADDRE
011970: 53 53 28 43 41 52 44 49 4E 41 4C 28 46 49 45 4C SS(CARDINAL(FIEL
011980: 44 53 29 2D 47 4C 4F 42 52 45 4C 4F 46 46 29 0D DS)-GLOBRELOFF).
011990: 0A 09 45 4C 53 45 0D 0A 09 09 61 3A 3D 41 44 44 ..ELSE....a:=ADD
0119A0: 52 45 53 53 28 43 41 52 44 49 4E 41 4C 28 46 49 RESS(CARDINAL(FI
0119B0: 45 4C 44 53 29 2D 52 45 4C 4F 46 46 29 0D 0A 09 ELDS)-RELOFF)...
0119C0: 20 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 .END;...RETURN
0119D0: 61 0D 0A 20 20 20 20 20 20 09 45 4E 44 20 52 45 a.. .END RE
0119E0: 4C 50 4E 54 52 3B 20 0D 0A 0D 0A 50 52 4F 43 45 LPNTR; ....PROCE
0119F0: 44 55 52 45 20 52 45 4C 4F 43 41 54 45 3B 20 0D DURE RELOCATE; .
011A00: 53 74 72 69 6E 67 28 27 20 53 59 4D 20 66 69 6C String(' SYM fil
011A10: 65 20 74 6F 6F 20 6C 61 72 67 65 20 27 29 3B 0D e too large ');.
011A20: 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 52 ...WriteLn;....R
011A30: 45 54 55 52 4E 20 46 41 4C 53 45 3B 0D 0A 09 09 ETURN FALSE;....
011A40: 45 4E 44 3B 0D 0A 09 41 4C 4C 4F 43 41 54 45 28 END;...ALLOCATE(
011A50: 70 2C 72 65 70 6C 79 29 3B 0D 0A 09 4D 6F 76 65 p,reply);...Move
011A60: 75 70 28 41 44 52 28 62 29 2C 70 2C 72 65 70 6C up(ADR(b),p,repl
011A70: 79 29 3B 0D 0A 09 47 4C 4F 42 52 45 4C 4F 46 46 y);...GLOBRELOFF
011A80: 3A 3D 30 3B 0D 0A 09 4E 45 57 4D 4F 44 4E 41 4D :=0;...NEWMODNAM
011A90: 45 3A 3D 70 6E 61 6D 65 28 43 41 52 44 49 4E 41 E:=pname(CARDINA
011AA0: 4C 28 70 29 2B 4F 52 44 28 62 5B 30 5D 29 2B 32 L(p)+ORD(b[0])+2
011AB0: 29 3B 0D 0A 09 52 45 54 52 4E 41 4D 45 28 4E 45 );...RETRNAME(NE
011AC0: 57 4D 4F 44 4E 41 4D 45 29 3B 0D 0A 09 52 45 4C WMODNAME);...REL
011AD0: 4F 46 46 3A 3D 4E 45 57 4D 4F 44 4E 41 4D 45 5E OFF:=NEWMODNAME^
011AE0: 2E 6D 6F 64 62 61 73 65 2D 43 41 52 44 49 4E 41 .modbase-CARDINA
011AF0: 4C 28 70 29 3B 0D 0A 09 52 45 4C 42 41 53 45 3A L(p);...RELBASE:
011B00: 3D 4E 45 57 4D 4F 44 4E 41 4D 45 5E 2E 6D 6F 64 =NEWMODNAME^.mod
011B10: 62 61 73 65 3B 0D 0A 09 43 6C 6F 73 65 28 66 29 base;...Close(f)
011B20: 3B 0D 0A 09 52 45 54 55 52 4E 20 54 52 55 45 3B ;...RETURN TRUE;
011B30: 0D 0A 09 45 4E 44 20 52 45 41 44 46 49 4C 45 3B ...END READFILE;
011B40: 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 4E 54 45 ..PROCEDURE ENTE
011B50: 52 4E 41 4D 45 3B 20 0D 0A 56 41 52 09 53 49 44 RNAME; ..VAR.SID
011B60: 3A 61 6C 66 61 3B 0D 0A 42 45 47 49 4E 0D 0A 09 :alfa;..BEGIN...
011B70: 52 45 54 52 4E 41 4D 45 28 43 4F 4D 50 4C 49 4E RETRNAME(COMPLIN
011B80: 4B 29 3B 20 0D 0A 09 53 49 44 3A 3D 49 44 3B 0D K); ...SID:=ID;.
011B90: 0A 09 4E 41 4D 45 50 4E 54 3A 3D 4C 4F 4F 4B 55 ..NAMEPNT:=LOOKU
011BA0: 50 28 49 44 2C 44 49 53 50 4C 41 59 29 3B 20 0D P(ID,DISPLAY); .
011BB0: 0A 09 49 46 20 4C 41 53 54 4E 41 4D 45 3D 4E 49 ..IF LASTNAME=NI
011BC0: 4C 20 54 48 45 4E 20 44 49 53 50 4C 41 59 3A 3D L THEN DISPLAY:=
011BD0: 43 4F 4D 50 4C 49 4E 4B 0D 0A 09 45 4C 53 45 0D COMPLINK...ELSE.
011BE0: 0A 09 09 52 45 54 52 4E 41 4D 45 28 4C 41 53 54 ...RETRNAME(LAST
011BF0: 4E 41 4D 45 29 3B 0D 0A 09 09 49 46 20 49 44 3C NAME);....IF ID<
011C00: 0A 28 2A 20 52 65 6C 6F 63 61 74 65 20 6F 6E 65 .(* Relocate one
011C10: 20 6F 66 20 74 68 65 20 65 6E 74 72 79 20 6C 69 of the entry li
011C20: 73 74 73 20 6A 75 73 74 20 65 6E 74 65 72 65 64 sts just entered
011C30: 20 0D 0A 20 20 0D 0A 20 20 41 6C 73 6F 2C 20 69 .. .. Also, i
011C40: 66 20 61 6E 79 20 65 6E 74 72 79 20 69 73 20 61 f any entry is a
011C50: 20 6C 69 6E 6B 2C 20 72 65 70 6C 61 63 65 20 70 link, replace p
011C60: 6F 69 6E 74 65 72 20 62 79 20 70 6F 69 6E 74 65 ointer by pointe
011C70: 72 20 74 6F 20 0D 0A 20 20 6C 69 6E 6B 65 64 20 r to .. linked
011C80: 6F 62 6A 65 63 74 2A 29 0D 0A 56 41 52 09 4F 4C object*)..VAR.OL
011C90: 44 50 41 52 3A 70 70 61 72 61 6D 3B 0D 0A 42 45 DPAR:pparam;..BE
011CA0: 47 49 4E 0D 0A 09 57 48 49 4C 45 20 6E 6C 69 6E GIN...WHILE nlin
011CB0: 6B 3C 3E 4E 49 4C 20 44 4F 20 0D 0A 09 20 20 20 k<>NIL DO ...
011CC0: 20 57 49 54 48 20 6E 6C 69 6E 6B 5E 20 44 4F 20 WITH nlink^ DO
011CD0: 0D 0A 09 09 52 45 54 52 4E 41 4D 45 28 6E 6C 69 ....RETRNAME(nli
011CE0: 6E 6B 29 3B 0D 0A 09 09 6E 74 79 70 65 3A 3D 52 nk);....ntype:=R
011CF0: 45 4C 50 4E 54 52 28 6E 74 79 70 65 29 3B 20 0D ELPNTR(ntype); .
011D00: 0A 09 09 6C 6F 77 65 72 3A 3D 52 45 4C 50 4E 54 ...lower:=RELPNT
011D10: 52 28 6C 6F 77 65 72 29 3B 20 0D 0A 09 09 75 70 R(lower); ....up
011D20: 70 65 72 3A 3D 52 45 4C 50 4E 54 52 28 75 70 70 per:=RELPNTR(upp
011D30: 65 72 29 3B 20 0D 0A 0D 0A 09 09 65 78 70 6F 72 er); ......expor
011D40: 74 6C 69 6E 6B 3A 3D 52 45 4C 50 4E 54 52 28 65 tlink:=RELPNTR(e
011D50: 78 70 6F 72 74 6C 69 6E 6B 29 3B 20 0D 0A 09 09 xportlink); ....
011D60: 43 41 53 45 20 6E 61 6D 65 63 6C 61 73 73 20 4F CASE nameclass O
011D70: 46 20 0D 0A 09 09 09 74 69 70 65 3A 0D 0A 09 09 F .....tipe:....
011D80: 09 20 20 20 20 43 41 53 45 20 63 6C 61 73 73 20 . CASE class
011D90: 4F 46 20 0D 0A 09 09 09 09 20 20 20 20 61 72 72 OF ...... arr
011DA0: 61 79 74 79 70 65 3A 0D 0A 09 09 09 09 09 65 6C aytype:.......el
011DB0: 65 6D 74 79 70 65 3A 3D 52 45 4C 50 4E 54 52 28 emtype:=RELPNTR(
011DC0: 65 6C 65 6D 74 79 70 65 29 3B 20 0D 0A 09 09 09 elemtype); .....
011DD0: 09 09 69 6E 64 65 78 74 79 70 65 3A 3D 52 45 4C ..indextype:=REL
011DE0: 50 4E 54 52 28 69 6E 64 65 78 74 79 70 65 29 3B PNTR(indextype);
011DF0: 20 0D 0A 09 09 09 09 09 7C 0D 0A 09 09 09 09 20 .......|......
011E00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
011E10: 0F 00 01 00 02 09 52 E5 0F 00 C9 02 00 00 00 02 ......R.........
011E20: 0F 00 C5 02 00 00 00 02 0F 00 C1 02 00 00 00 02 ................
011E30: 0F 00 C6 02 00 00 00 02 0F 00 C2 02 00 00 00 02 ................
011E40: 0F 00 C7 02 00 00 00 02 0F 00 C3 02 00 00 00 02 ................
011E50: 0F 00 C8 02 00 00 00 02 0F 00 C4 02 00 00 00 02 ................
011E60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011E70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011E80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011E90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011EA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011EB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011EC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011ED0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011EE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011EF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011F00: 0A 09 09 57 49 54 48 20 4D 61 63 72 6F 53 74 61 ...WITH MacroSta
011F10: 63 6B 5B 4D 61 63 72 6F 44 65 70 74 68 5D 20 44 ck[MacroDepth] D
011F20: 4F 0D 0A 09 09 09 50 6F 73 3A 3D 31 3B 0D 0A 09 O.....Pos:=1;...
011F30: 09 09 44 65 66 3A 3D 70 3B 0D 0A 09 09 09 43 6F ..Def:=p;.....Co
011F40: 75 6E 74 3A 3D 72 65 70 65 61 74 3B 0D 0A 09 09 unt:=repeat;....
011F50: 09 45 4E 44 3B 28 2A 57 49 54 48 2A 29 0D 0A 09 .END;(*WITH*)...
011F60: 09 45 4E 44 3B 28 2A 70 3C 3E 4E 49 4C 20 65 74 .END;(*p<>NIL et
011F70: 63 2A 29 0D 0A 09 45 4E 44 20 41 64 64 4D 61 63 c*)...END AddMac
011F80: 72 6F 3B 0D 0A 56 41 52 09 53 70 65 63 69 61 6C ro;..VAR.Special
011F90: 53 65 71 75 65 6E 63 65 3A 42 4F 4F 4C 45 41 4E Sequence:BOOLEAN
011FA0: 3D 46 41 4C 53 45 3B 0D 0A 50 52 4F 43 45 44 55 =FALSE;..PROCEDU
011FB0: 52 45 20 52 65 61 64 41 43 68 61 72 28 56 41 52 RE ReadAChar(VAR
011FC0: 20 52 65 73 75 6C 74 3A 43 48 41 52 29 3B 0D 0A Result:CHAR);..
011FD0: 0D 0A 28 2A 09 72 65 61 64 20 6E 65 78 74 20 63 ..(*.read next c
011FE0: 68 61 72 61 63 74 65 72 2C 20 63 68 65 63 6B 69 haracter, checki
011FF0: 6E 67 20 66 6F 72 20 61 72 72 6F 77 73 2F 66 75 ng for arrows/fu
012000: 6E 63 74 69 6F 6E 20 6B 65 79 73 0D 0A 09 69 6E nction keys...in
012010: 20 61 6E 64 20 6F 75 74 20 70 6F 69 6E 74 20 74 and out point t
012020: 6F 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73 o the characters
012030: 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65 6E which have been
012040: 20 72 65 61 64 20 61 68 65 61 64 0D 0A 09 42 79 read ahead...By
012050: 20 52 65 61 64 41 43 68 61 72 20 69 6E 20 61 6E ReadAChar in an
012060: 20 61 74 74 65 6D 70 74 20 74 6F 20 72 65 73 6F attempt to reso
012070: 6C 76 65 20 61 20 6D 61 63 72 6F 0D 0A 0D 0A 09 lve a macro.....
012080: 57 68 65 6E 20 52 65 61 64 41 43 68 61 72 20 69 When ReadAChar i
012090: 73 20 65 6E 74 65 72 65 64 2C 20 69 66 20 74 68 s entered, if th
0120A0: 69 73 20 62 75 66 66 65 72 20 69 73 20 6E 6F 74 is buffer is not
0120B0: 20 65 6D 70 74 79 2C 0D 0A 09 74 68 65 20 66 69 empty,...the fi
0120C0: 72 73 74 20 63 68 61 72 61 63 74 65 72 20 69 73 rst character is
0120D0: 20 74 6F 20 62 65 20 6C 6F 6F 6B 65 64 20 75 70 to be looked up
0120E0: 20 74 6F 20 73 65 65 20 69 66 20 69 74 20 69 73 to see if it is
0120F0: 20 61 20 0D 0A 09 73 74 61 72 74 20 6F 66 20 61 a ...start of a
012100: 72 65 65 6E 49 4F 20 49 4D 50 4F 52 54 20 4F 75 reenIO IMPORT Ou
012110: 74 70 75 74 54 6F 53 63 72 65 65 6E 3B 0D 0A 43 tputToScreen;..C
012120: 4F 4E 53 54 09 42 6C 6F 63 6B 4C 65 6E 3D 31 32 ONST.BlockLen=12
012130: 38 3B 0D 0A 09 45 53 43 3D 31 62 78 3B 0D 0A 54 8;...ESC=1bx;..T
012140: 59 50 45 0D 0A 09 4B 65 79 44 65 66 3D 52 45 43 YPE...KeyDef=REC
012150: 4F 52 44 0D 0A 09 09 4C 65 6E 67 74 68 3A 5B 31 ORD....Length:[1
012160: 2E 2E 36 31 5D 3B 0D 0A 09 09 43 6F 6D 6D 43 68 ..61];....CommCh
012170: 61 72 73 3A 41 52 52 41 59 5B 31 2E 2E 32 30 5D ars:ARRAY[1..20]
012180: 20 4F 46 20 43 48 41 52 3B 0D 0A 09 09 45 4E 44 OF CHAR;....END
012190: 3B 0D 0A 09 50 4B 65 79 44 65 66 3D 50 4F 49 4E ;...PKeyDef=POIN
0121A0: 54 45 52 20 54 4F 20 4B 65 79 44 65 66 3B 0D 0A TER TO KeyDef;..
0121B0: 09 4D 61 63 72 6F 50 6F 69 6E 74 3D 52 45 43 4F .MacroPoint=RECO
0121C0: 52 44 0D 0A 09 09 50 6F 73 3A 43 41 52 44 49 4E RD....Pos:CARDIN
0121D0: 41 4C 3B 0D 0A 09 09 44 65 66 3A 50 4B 65 79 44 AL;....Def:PKeyD
0121E0: 65 66 3B 0D 0A 09 09 43 6F 75 6E 74 3A 49 4E 54 ef;....Count:INT
0121F0: 45 47 45 52 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 EGER;....END;...
012200: 09 09 09 0D 0A 56 41 52 0D 0A 09 63 68 3A 43 48 .....VAR...ch:CH
012210: 41 52 3B 0D 0A 09 43 6F 6D 6D 61 6E 64 73 3A 41 AR;...Commands:A
012220: 52 52 41 59 5B 27 40 27 2E 2E 27 5A 27 5D 20 4F RRAY['@'..'Z'] O
012230: 46 20 50 4B 65 79 44 65 66 3B 0D 0A 09 4D 61 63 F PKeyDef;...Mac
012240: 72 6F 44 65 70 74 68 3A 43 41 52 44 49 4E 41 4C roDepth:CARDINAL
012250: 3D 30 3B 0D 0A 09 4D 61 63 72 6F 53 74 61 63 6B =0;...MacroStack
012260: 3A 41 52 52 41 59 5B 31 2E 2E 35 5D 20 4F 46 20 :ARRAY[1..5] OF
012270: 4D 61 63 72 6F 50 6F 69 6E 74 3B 0D 0A 09 4C 65 MacroPoint;...Le
012280: 61 72 6E 63 68 3A 43 48 41 52 3B 0D 0A 09 4C 65 arnch:CHAR;...Le
012290: 61 72 6E 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3B arnLen:CARDINAL;
0122A0: 0D 0A 09 4C 65 61 72 6E 69 6E 67 3A 42 4F 4F 4C ...Learning:BOOL
0122B0: 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 54 65 78 EAN=FALSE;...Tex
0122C0: 74 3A 41 52 52 41 59 5B 31 2E 2E 36 30 5D 20 4F t:ARRAY[1..60] O
0122D0: 46 20 43 48 41 52 3B 0D 0A 09 69 3A 43 41 52 44 F CHAR;...i:CARD
0122E0: 49 4E 41 4C 3B 0D 0A 09 53 68 6F 77 43 68 61 6E INAL;...ShowChan
0122F0: 67 65 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 09 ge:BOOLEAN;.....
012300: 3D 43 4F 4D 50 4C 49 4E 4B 5E 2E 65 78 70 6F 72 =COMPLINK^.expor
012310: 74 6C 69 6E 6B 3B 20 0D 0A 09 09 45 4E 44 3B 0D tlink; ....END;.
012320: 0A 09 45 4E 44 20 4D 45 52 47 45 4E 41 4D 45 53 ..END MERGENAMES
012330: 3B 20 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 ; ....PROCEDURE
012340: 4C 4F 41 44 46 49 4C 45 28 66 6E 3A 46 69 6C 65 LOADFILE(fn:File
012350: 4E 61 6D 65 29 3A 70 6E 61 6D 65 3B 0D 0A 28 2A Name):pname;..(*
012360: 20 6C 6F 61 64 20 61 20 66 69 6C 65 20 74 6F 20 load a file to
012370: 62 65 20 69 6D 70 6F 72 74 65 64 20 20 20 0D 0A be imported ..
012380: 20 20 0D 0A 20 20 72 65 6C 6F 63 61 74 65 20 74 .. relocate t
012390: 68 65 20 65 6E 74 72 69 65 73 20 2A 29 0D 0A 20 he entries *)..
0123A0: 20 0D 0A 56 41 52 20 09 54 49 44 3A 61 6C 66 61 ..VAR .TID:alfa
0123B0: 3B 20 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 44 ; .....BEGIN...D
0123C0: 49 53 50 4C 41 59 3A 3D 4E 49 4C 3B 0D 0A 09 47 ISPLAY:=NIL;...G
0123D0: 4C 4F 42 52 45 4C 4F 46 46 3A 3D 30 3B 0D 0A 09 LOBRELOFF:=0;...
0123E0: 49 46 20 4E 4F 54 20 52 45 41 44 46 49 4C 45 28 IF NOT READFILE(
0123F0: 66 6E 29 20 54 48 45 4E 20 0D 0A 09 20 20 20 20 fn) THEN ...
012400: 52 45 54 55 52 4E 20 4E 49 4C 0D 0A 09 20 20 20 RETURN NIL...
012410: 20 45 4E 44 3B 0D 0A 28 2A 09 6E 65 77 6D 6F 64 END;..(*.newmod
012420: 6E 61 6D 65 20 70 6F 69 6E 74 73 20 74 6F 20 65 name points to e
012430: 6E 74 72 79 20 66 6F 72 20 66 69 72 73 74 20 6D ntry for first m
012440: 6F 64 75 6C 65 20 6E 61 6D 65 20 0D 0A 20 20 20 odule name ..
012450: 20 09 77 68 69 63 68 20 69 73 20 74 68 65 20 6E .which is the n
012460: 61 6D 65 20 6F 66 20 74 68 65 20 6D 6F 64 75 6C ame of the modul
012470: 65 20 62 65 69 6E 67 20 6C 6F 61 64 65 64 20 0D e being loaded .
012480: 0A 20 20 20 20 09 69 74 20 69 73 20 66 6F 6C 6C . .it is foll
012490: 6F 77 65 64 20 62 79 20 61 20 63 68 61 69 6E 20 owed by a chain
0124A0: 6F 66 20 6E 61 6D 65 73 20 6F 66 20 6D 6F 64 75 of names of modu
0124B0: 6C 65 73 20 0D 0A 20 20 20 09 69 6D 70 6F 72 74 les .. .import
0124C0: 65 64 20 62 79 20 74 68 61 74 20 6D 6F 64 75 6C ed by that modul
0124D0: 65 20 0D 0A 20 20 0D 0A 20 20 09 69 6E 20 74 68 e .. .. .in th
0124E0: 65 20 63 61 73 65 20 6F 66 20 74 68 65 20 66 69 e case of the fi
0124F0: 72 73 74 20 6D 6F 64 75 6C 65 2C 20 77 65 20 6D rst module, we m
012500: 28 2A 09 6B 65 65 70 20 61 20 63 69 72 63 75 6C (*.keep a circul
012510: 61 72 20 62 75 66 66 65 72 20 6F 66 20 63 68 61 ar buffer of cha
012520: 72 61 63 74 65 72 73 20 77 68 69 6C 65 20 6D 61 racters while ma
012530: 74 63 68 69 6E 67 20 69 73 0D 0A 09 09 68 61 70 tching is....hap
012540: 70 65 6E 69 6E 67 2A 29 0D 0A 0D 0A 0D 0A 50 52 pening*)......PR
012550: 4F 43 45 44 55 52 45 20 57 61 69 74 46 6F 72 43 OCEDURE WaitForC
012560: 68 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4E h;..BEGIN...IF N
012570: 4F 54 20 53 68 6F 77 43 68 61 6E 67 65 20 54 48 OT ShowChange TH
012580: 45 4E 0D 0A 09 09 53 68 6F 77 43 68 61 6E 67 65 EN....ShowChange
012590: 3A 3D 54 52 55 45 3B 0D 0A 09 09 4F 75 74 70 75 :=TRUE;....Outpu
0125A0: 74 54 6F 53 63 72 65 65 6E 28 54 52 55 45 29 3B tToScreen(TRUE);
0125B0: 0D 0A 09 09 52 65 64 69 73 70 6C 61 79 3B 0D 0A ....Redisplay;..
0125C0: 09 09 45 4E 44 3B 0D 0A 09 52 45 50 45 41 54 0D ..END;...REPEAT.
0125D0: 0A 09 09 42 75 73 79 52 65 61 64 28 63 68 29 3B ...BusyRead(ch);
0125E0: 0D 0A 09 09 55 4E 54 49 4C 20 63 68 3C 3E 30 78 ....UNTIL ch<>0x
0125F0: 3B 0D 0A 09 45 4E 44 20 57 61 69 74 46 6F 72 43 ;...END WaitForC
012600: 68 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68 h;..PROCEDURE Ch
012610: 65 63 6B 49 6E 74 65 72 72 75 70 74 28 29 3A 42 eckInterrupt():B
012620: 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 43 68 OOLEAN;....(*.Ch
012630: 65 63 6B 20 74 68 65 20 6B 65 79 62 6F 61 72 64 eck the keyboard
012640: 20 66 6F 72 20 61 6E 20 69 6E 74 65 72 75 70 74 for an interupt
012650: 20 28 43 6F 6E 74 72 6F 6C 20 55 29 0D 0A 0D 0A (Control U)....
012660: 09 41 6C 73 6F 2C 20 69 66 20 45 73 63 61 70 65 .Also, if Escape
012670: 20 68 61 73 20 62 65 65 6E 20 74 79 70 65 64 2C has been typed,
012680: 20 73 74 6F 70 20 74 65 72 6D 69 6E 61 6C 20 6F stop terminal o
012690: 75 74 70 75 74 0D 0A 09 75 6E 74 69 6C 20 61 6E utput...until an
0126A0: 6F 74 68 65 72 20 63 68 61 72 61 63 74 65 72 20 other character
0126B0: 69 73 20 74 79 70 65 64 2A 29 0D 0A 0D 0A 56 41 is typed*)....VA
0126C0: 52 09 63 68 31 3A 43 48 41 52 3B 0D 0A 42 45 47 R.ch1:CHAR;..BEG
0126D0: 49 4E 0D 0A 09 42 75 73 79 52 65 61 64 28 63 68 IN...BusyRead(ch
0126E0: 31 29 3B 0D 0A 09 43 41 53 45 20 63 68 31 20 4F 1);...CASE ch1 O
0126F0: 46 20 0D 0A 09 09 31 35 78 3A 52 45 54 55 52 4E F ....15x:RETURN
012700: 75 73 74 20 73 65 74 20 74 68 65 20 0D 0A 20 20 ust set the ..
012710: 09 6E 75 6D 62 65 72 73 20 6F 66 20 74 68 65 20 .numbers of the
012720: 76 61 72 69 61 62 6C 65 73 20 74 6F 20 6D 6F 64 variables to mod
012730: 75 6C 65 6E 6F 20 0D 0A 20 20 09 62 75 74 20 74 uleno .. .but t
012740: 68 69 73 20 69 73 20 69 72 72 65 6C 65 76 61 6E his is irrelevan
012750: 74 20 66 6F 72 20 74 68 65 20 6F 74 68 65 72 20 t for the other
012760: 0D 0A 20 20 09 6D 6F 64 75 6C 65 73 20 61 73 20 .. .modules as
012770: 74 68 65 20 76 61 72 69 61 62 6C 65 73 20 63 61 the variables ca
012780: 6E 6E 6F 74 20 62 65 20 61 63 63 65 73 73 65 64 nnot be accessed
012790: 20 0D 0A 20 20 09 75 6E 6C 65 73 73 20 65 78 70 .. .unless exp
0127A0: 6C 69 63 69 74 6C 79 20 69 6D 70 6F 72 74 65 64 licitly imported
0127B0: 20 2A 29 0D 0A 0D 0A 09 43 4F 4D 50 4C 49 4E 4B *).....COMPLINK
0127C0: 3A 3D 4E 45 57 4D 4F 44 4E 41 4D 45 3B 20 0D 0A :=NEWMODNAME; ..
0127D0: 09 57 48 49 4C 45 20 43 4F 4D 50 4C 49 4E 4B 3C .WHILE COMPLINK<
0127E0: 3E 4E 49 4C 20 44 4F 20 0D 0A 09 20 20 20 20 57 >NIL DO ... W
0127F0: 49 54 48 20 43 4F 4D 50 4C 49 4E 4B 5E 20 44 4F ITH COMPLINK^ DO
012800: 20 0D 0A 09 09 52 45 54 52 4E 41 4D 45 28 43 4F ....RETRNAME(CO
012810: 4D 50 4C 49 4E 4B 29 3B 0D 0A 09 09 6D 6F 64 6C MPLINK);....modl
012820: 69 73 74 3A 3D 52 45 4C 50 4E 54 52 28 6D 6F 64 ist:=RELPNTR(mod
012830: 6C 69 73 74 29 3B 20 0D 0A 09 09 61 6E 6F 6E 6C list); ....anonl
012840: 69 73 74 3A 3D 52 45 4C 50 4E 54 52 28 61 6E 6F ist:=RELPNTR(ano
012850: 6E 6C 69 73 74 29 3B 20 0D 0A 09 09 6E 6C 69 6E nlist); ....nlin
012860: 6B 3A 3D 6D 6F 64 6C 69 73 74 3B 20 0D 0A 09 09 k:=modlist; ....
012870: 52 45 4C 4F 43 41 54 45 3B 0D 0A 09 09 6E 6C 69 RELOCATE;....nli
012880: 6E 6B 3A 3D 61 6E 6F 6E 6C 69 73 74 3B 20 0D 0A nk:=anonlist; ..
012890: 09 09 52 45 4C 4F 43 41 54 45 3B 0D 0A 09 09 6E ..RELOCATE;....n
0128A0: 65 78 74 6D 6F 64 75 6C 65 3A 3D 52 45 4C 50 4E extmodule:=RELPN
0128B0: 54 52 28 6E 65 78 74 6D 6F 64 75 6C 65 29 3B 20 TR(nextmodule);
0128C0: 0D 0A 09 09 43 4F 4D 50 4C 49 4E 4B 3A 3D 6E 65 ....COMPLINK:=ne
0128D0: 78 74 6D 6F 64 75 6C 65 3B 20 0D 0A 09 09 45 4E xtmodule; ....EN
0128E0: 44 3B 0D 0A 09 20 20 20 20 45 4E 44 3B 0D 0A 09 D;... END;...
0128F0: 4D 45 52 47 45 4E 41 4D 45 53 3B 0D 0A 09 4E 45 MERGENAMES;...NE
012900: 20 54 52 55 45 0D 0A 09 09 20 20 20 20 7C 0D 0A TRUE.... |..
012910: 09 09 31 62 78 3A 53 68 6F 77 43 68 61 6E 67 65 ..1bx:ShowChange
012920: 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 20 20 20 20 :=FALSE;....
012930: 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 28 46 OutputToScreen(F
012940: 41 4C 53 45 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A ALSE);....END;..
012950: 09 52 45 54 55 52 4E 20 46 41 4C 53 45 0D 0A 09 .RETURN FALSE...
012960: 45 4E 44 20 43 68 65 63 6B 49 6E 74 65 72 72 75 END CheckInterru
012970: 70 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 pt;..PROCEDURE G
012980: 65 74 41 43 68 61 72 28 56 41 52 20 63 68 31 3A etAChar(VAR ch1:
012990: 43 48 41 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 CHAR);..BEGIN...
0129A0: 49 46 20 4D 61 63 72 6F 44 65 70 74 68 3D 30 20 IF MacroDepth=0
0129B0: 54 48 45 4E 0D 0A 09 09 57 61 69 74 46 6F 72 43 THEN....WaitForC
0129C0: 68 3B 0D 0A 09 09 63 68 31 3A 3D 63 68 3B 0D 0A h;....ch1:=ch;..
0129D0: 09 09 49 46 20 4C 65 61 72 6E 69 6E 67 20 41 4E ..IF Learning AN
0129E0: 44 20 28 4C 65 61 72 6E 4C 65 6E 3C 48 49 47 48 D (LearnLen<HIGH
0129F0: 28 54 65 78 74 29 29 20 54 48 45 4E 0D 0A 09 09 (Text)) THEN....
012A00: 09 49 4E 43 28 4C 65 61 72 6E 4C 65 6E 29 3B 0D .INC(LearnLen);.
012A10: 0A 09 09 09 54 65 78 74 5B 4C 65 61 72 6E 4C 65 ....Text[LearnLe
012A20: 6E 5D 3A 3D 63 68 3B 0D 0A 09 09 09 45 4E 44 3B n]:=ch;.....END;
012A30: 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 49 54 48 20 ...ELSE....WITH
012A40: 4D 61 63 72 6F 53 74 61 63 6B 5B 4D 61 63 72 6F MacroStack[Macro
012A50: 44 65 70 74 68 5D 20 44 4F 0D 0A 09 09 09 49 46 Depth] DO.....IF
012A60: 20 50 6F 73 3E 44 65 66 5E 2E 4C 65 6E 67 74 68 Pos>Def^.Length
012A70: 20 54 48 45 4E 0D 0A 09 09 09 20 20 20 20 44 45 THEN..... DE
012A80: 43 28 43 6F 75 6E 74 29 3B 0D 0A 09 09 09 20 20 C(Count);.....
012A90: 20 20 49 46 20 43 68 65 63 6B 49 6E 74 65 72 72 IF CheckInterr
012AA0: 75 70 74 28 29 20 4F 52 20 4E 4F 54 20 46 6F 75 upt() OR NOT Fou
012AB0: 6E 64 20 54 48 45 4E 0D 0A 09 09 09 09 4D 61 63 nd THEN......Mac
012AC0: 72 6F 44 65 70 74 68 3A 3D 31 3B 0D 0A 09 09 09 roDepth:=1;.....
012AD0: 09 43 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09 09 09 .Count:=0;......
012AE0: 45 4E 44 3B 0D 0A 09 09 09 20 20 20 20 49 46 20 END;..... IF
012AF0: 43 6F 75 6E 74 3C 31 20 54 48 45 4E 0D 0A 09 09 Count<1 THEN....
012B00: 57 4D 4F 44 4E 41 4D 45 5E 2E 6D 6F 64 6E 61 6D WMODNAME^.modnam
012B10: 65 73 3A 3D 44 49 53 50 4C 41 59 3B 09 20 20 20 es:=DISPLAY;.
012B20: 20 20 0D 0A 09 52 45 54 55 52 4E 20 4E 45 57 4D ...RETURN NEWM
012B30: 4F 44 4E 41 4D 45 3B 20 0D 0A 09 20 0D 0A 09 45 ODNAME; ... ...E
012B40: 4E 44 20 4C 4F 41 44 46 49 4C 45 3B 20 0D 0A 09 ND LOADFILE; ...
012B50: 45 4E 44 20 49 6D 70 6F 72 74 2E 0D 0A 20 0D 0A END Import... ..
012B60: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
012B70: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
012B80: 1A 1A 1A 1A 20 20 20 20 42 41 4B 20 00 00 00 00 .... BAK ....
012B90: 00 00 00 00 00 00 77 51 90 0D 17 22 A4 20 00 00 ......wQ...". ..
012BA0: 41 4E 53 49 20 20 20 20 53 59 53 00 00 00 00 00 ANSI SYS.....
012BB0: 00 00 00 00 00 00 60 6D 67 0A A1 00 73 06 00 00 ......`mg...s...
012BC0: 41 53 53 49 47 4E 20 20 43 4F 4D 00 00 00 00 00 ASSIGN COM.....
012BD0: 00 00 00 00 00 00 60 6D 67 0A A2 00 E5 05 00 00 ......`mg.......
012BE0: 41 54 54 52 49 42 20 20 45 58 45 00 00 00 00 00 ATTRIB EXE.....
012BF0: 00 00 00 00 00 00 60 6D 67 0A A3 00 F3 3A 00 00 ......`mg.£..:..
012C00: 6F 75 6E 74 3D 32 20 54 48 45 4E 20 41 4C 4C 4F ount=2 THEN ALLO
012C10: 43 41 54 45 28 62 32 2C 42 75 66 66 53 69 7A 65 CATE(b2,BuffSize
012C20: 29 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 53 65 74 ) END;...END Set
012C30: 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 Up;..PROCEDURE F
012C40: 72 65 65 55 70 28 69 3A 43 41 52 44 49 4E 41 4C reeUp(i:CARDINAL
012C50: 29 3B 0D 0A 28 2A 09 72 65 6C 65 61 73 65 20 62 );..(*.release b
012C60: 75 66 66 65 72 73 20 2D 20 75 73 65 64 20 74 6F uffers - used to
012C70: 20 64 69 73 70 6F 73 65 20 74 68 65 6D 20 62 75 dispose them bu
012C80: 74 20 6E 6F 77 0D 0A 09 64 6F 65 73 20 61 20 72 t now...does a r
012C90: 65 6C 65 61 73 65 20 77 68 69 63 68 20 69 73 20 elease which is
012CA0: 66 61 73 74 65 72 2E 20 41 73 20 61 20 72 65 73 faster. As a res
012CB0: 75 6C 74 20 70 61 72 61 6D 65 74 65 72 20 69 73 ult parameter is
012CC0: 20 6E 6F 74 20 72 65 71 75 69 72 65 64 0D 0A 20 not required..
012CD0: 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 52 45 4C 45 *)..BEGIN...RELE
012CE0: 41 53 45 28 41 44 44 52 45 53 53 28 62 31 29 29 ASE(ADDRESS(b1))
012CF0: 3B 0D 0A 09 45 4E 44 20 46 72 65 65 55 70 3B 0D ;...END FreeUp;.
012D00: 09 09 44 45 43 28 4D 61 63 72 6F 44 65 70 74 68 ..DEC(MacroDepth
012D10: 29 3B 0D 0A 09 09 09 20 20 20 20 45 4C 53 45 0D );..... ELSE.
012D20: 0A 09 09 09 09 50 6F 73 3A 3D 31 3B 0D 0A 09 09 .....Pos:=1;....
012D30: 09 09 45 4E 44 3B 0D 0A 09 09 09 20 20 20 20 47 ..END;..... G
012D40: 65 74 41 43 68 61 72 28 63 68 31 29 3B 0D 0A 09 etAChar(ch1);...
012D50: 09 09 45 4C 53 45 0D 0A 09 09 09 09 63 68 31 3A ..ELSE......ch1:
012D60: 3D 44 65 66 5E 2E 43 6F 6D 6D 43 68 61 72 73 5B =Def^.CommChars[
012D70: 50 6F 73 5D 3B 0D 0A 09 09 09 09 49 4E 43 28 50 Pos];......INC(P
012D80: 6F 73 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A os);......END;..
012D90: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D ...END;....END;.
012DA0: 0A 09 45 4E 44 20 47 65 74 41 43 68 61 72 3B 0D ..END GetAChar;.
012DB0: 0A 50 52 4F 43 45 44 55 52 45 20 41 64 64 4D 61 .PROCEDURE AddMa
012DC0: 63 72 6F 28 70 3A 50 4B 65 79 44 65 66 3B 72 65 cro(p:PKeyDef;re
012DD0: 70 65 61 74 3A 49 4E 54 45 47 45 52 29 3B 0D 0A peat:INTEGER);..
012DE0: 42 45 47 49 4E 0D 0A 09 49 46 20 28 70 3C 3E 4E BEGIN...IF (p<>N
012DF0: 49 4C 29 20 41 4E 44 20 28 4D 61 63 72 6F 44 65 IL) AND (MacroDe
012E00: 70 74 68 3C 3D 48 49 47 48 28 4D 61 63 72 6F 53 pth<=HIGH(MacroS
012E10: 74 61 63 6B 29 29 20 54 48 45 4E 0D 0A 0D 0A 09 tack)) THEN.....
012E20: 09 28 2A 6D 61 6B 65 20 73 75 72 65 20 74 68 61 .(*make sure tha
012E30: 74 20 6D 61 63 72 6F 20 69 73 20 6E 6F 74 20 72 t macro is not r
012E40: 65 63 75 72 73 69 76 65 2A 29 0D 0A 0D 0A 0D 0A ecursive*)......
012E50: 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 4D 61 ..FOR i:=1 TO Ma
012E60: 63 72 6F 44 65 70 74 68 20 44 4F 0D 0A 09 09 09 croDepth DO.....
012E70: 49 46 20 4D 61 63 72 6F 53 74 61 63 6B 5B 69 5D IF MacroStack[i]
012E80: 2E 44 65 66 3D 70 20 54 48 45 4E 0D 0A 09 09 09 .Def=p THEN.....
012E90: 09 45 72 72 6F 72 4D 65 73 73 61 67 65 28 27 52 .ErrorMessage('R
012EA0: 65 63 75 72 73 69 76 65 20 6D 61 63 72 6F 73 21 ecursive macros!
012EB0: 27 2C 27 20 27 29 3B 0D 0A 09 09 09 09 4D 61 63 ',' ');......Mac
012EC0: 72 6F 44 65 70 74 68 3A 3D 30 3B 0D 0A 09 09 09 roDepth:=0;.....
012ED0: 09 52 45 54 55 52 4E 3B 0D 0A 09 09 09 09 45 4E .RETURN;......EN
012EE0: 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 D;.....END;....I
012EF0: 4E 43 28 4D 61 63 72 6F 44 65 70 74 68 29 3B 0D NC(MacroDepth);.
012F00: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
012F10: 4F 44 55 4C 45 20 4D 61 63 72 6F 73 3B 0D 0A 0D ODULE Macros;...
012F20: 0A 28 2A 09 54 68 69 73 20 69 73 20 61 20 73 70 .(*.This is a sp
012F30: 65 63 69 61 6C 20 76 65 72 73 69 6F 6E 20 6F 66 ecial version of
012F40: 20 6D 61 63 72 6F 73 20 66 6F 72 20 6D 61 63 68 macros for mach
012F50: 69 6E 65 73 0D 0A 09 77 68 69 63 68 20 64 6F 20 ines...which do
012F60: 6E 6F 74 20 68 61 76 65 20 66 75 6E 63 74 69 6F not have functio
012F70: 6E 20 6B 65 79 73 20 61 74 20 61 6C 6C 2C 20 73 n keys at all, s
012F80: 6F 20 64 6F 0D 0A 09 6E 6F 74 20 6E 65 65 64 20 o do...not need
012F90: 74 68 65 20 65 78 74 72 61 20 63 6F 64 65 20 66 the extra code f
012FA0: 6F 72 20 66 75 6E 63 74 69 6F 6E 20 6B 65 79 20 or function key
012FB0: 64 65 74 65 63 74 69 6F 6E 2A 29 0D 0A 0D 0A 46 detection*)....F
012FC0: 52 4F 4D 09 44 6F 4D 65 6E 75 20 49 4D 50 4F 52 ROM.DoMenu IMPOR
012FD0: 54 20 47 65 74 53 74 72 69 6E 67 2C 52 65 64 69 T GetString,Redi
012FE0: 73 70 6C 61 79 3B 0D 0A 46 52 4F 4D 09 53 74 6F splay;..FROM.Sto
012FF0: 72 61 67 65 20 49 4D 50 4F 52 54 20 20 41 4C 4C rage IMPORT ALL
013000: 4F 43 41 54 45 2C 44 45 41 4C 4C 4F 43 41 54 45 OCATE,DEALLOCATE
013010: 3B 0D 0A 46 52 4F 4D 09 54 65 72 6D 69 6E 61 6C ;..FROM.Terminal
013020: 20 49 4D 50 4F 52 54 20 42 75 73 79 52 65 61 64 IMPORT BusyRead
013030: 2C 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72 69 ,WriteString,Wri
013040: 74 65 4C 6E 2C 57 72 69 74 65 3B 0D 0A 46 52 4F teLn,Write;..FRO
013050: 4D 09 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 M.Files IMPORT F
013060: 49 4C 45 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B ILE,SeqReadBlock
013070: 2C 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 4C ,SeqWriteBlock,L
013080: 6F 6F 6B 75 70 2C 43 72 65 61 74 65 2C 43 6C 6F ookup,Create,Clo
013090: 73 65 3B 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D se;..FROM.SYSTEM
0130A0: 20 49 4D 50 4F 52 54 20 41 44 52 2C 54 53 49 5A IMPORT ADR,TSIZ
0130B0: 45 3B 0D 0A 46 52 4F 4D 09 45 64 69 74 44 69 73 E;..FROM.EditDis
0130C0: 70 6C 61 79 20 49 4D 50 4F 52 54 20 45 72 72 6F play IMPORT Erro
0130D0: 72 4D 65 73 73 61 67 65 3B 0D 0A 46 52 4F 4D 09 rMessage;..FROM.
0130E0: 46 61 73 74 4D 6F 76 65 20 49 4D 50 4F 52 54 20 FastMove IMPORT
0130F0: 4D 6F 76 65 75 70 3B 0D 0A 46 52 4F 4D 09 53 63 Moveup;..FROM.Sc
013100: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
013110: 10 00 01 00 02 09 52 E5 10 00 C9 02 00 00 00 02 ......R.........
013120: 10 00 C5 02 00 00 00 02 10 00 C1 02 00 00 00 02 ................
013130: 10 00 C6 02 00 00 00 02 10 00 C2 02 00 00 00 02 ................
013140: 10 00 C7 02 00 00 00 02 10 00 C3 02 00 00 00 02 ................
013150: 10 00 C8 02 00 00 00 02 10 00 C4 02 00 00 00 02 ................
013160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
013170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
013180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
013190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
013200: 4D 4F 44 55 4C 45 20 4D 79 4C 55 3B 0D 0A 0D 0A MODULE MyLU;....
013210: 28 2A 09 44 61 76 65 20 4D 6F 6F 72 65 27 73 20 (*.Dave Moore's
013220: 6F 77 6E 20 76 65 72 73 69 6F 6E 20 6F 66 20 4C own version of L
013230: 55 20 66 6F 72 20 75 73 65 20 77 69 74 68 20 68 U for use with h
013240: 69 73 20 4D 6F 64 75 6C 61 2D 32 0D 0A 09 63 6F is Modula-2...co
013250: 6D 70 69 6C 65 72 20 2A 29 0D 0A 0D 0A 46 52 4F mpiler *)....FRO
013260: 4D 09 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 M.Terminal IMPOR
013270: 54 20 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72 T WriteString,Wr
013280: 69 74 65 4C 6E 2C 52 65 61 64 53 74 72 69 6E 67 iteLn,ReadString
013290: 2C 57 72 69 74 65 3B 20 0D 0A 46 52 4F 4D 09 46 ,Write; ..FROM.F
0132A0: 69 6C 65 73 20 09 49 4D 50 4F 52 54 20 46 49 4C iles .IMPORT FIL
0132B0: 45 2C 52 65 61 64 42 6C 6F 63 6B 2C 57 72 69 74 E,ReadBlock,Writ
0132C0: 65 42 6C 6F 63 6B 2C 4C 6F 6F 6B 75 70 2C 43 72 eBlock,Lookup,Cr
0132D0: 65 61 74 65 2C 46 69 6C 65 4E 61 6D 65 2C 0D 0A eate,FileName,..
0132E0: 09 09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 2C ...SeqReadBlock,
0132F0: 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 43 6F SeqWriteBlock,Co
013300: 6E 76 65 72 74 46 69 6C 65 4E 61 6D 65 2C 43 6C nvertFileName,Cl
013310: 6F 73 65 2C 0D 0A 09 09 09 4D 61 6B 65 42 41 4B ose,.....MakeBAK
013320: 2C 53 65 74 42 6C 6F 63 6B 2C 44 65 76 69 63 65 ,SetBlock,Device
013330: 74 79 70 65 3B 0D 0A 46 52 4F 4D 09 53 6D 61 6C type;..FROM.Smal
013340: 6C 49 4F 20 49 4D 50 4F 52 54 20 52 65 61 64 43 lIO IMPORT ReadC
013350: 61 72 64 2C 57 72 69 74 65 43 61 72 64 2C 57 72 ard,WriteCard,Wr
013360: 69 74 65 48 65 78 3B 0D 0A 46 52 4F 4D 09 53 59 iteHex;..FROM.SY
013370: 53 54 45 4D 20 20 49 4D 50 4F 52 54 20 42 59 54 STEM IMPORT BYT
013380: 45 2C 41 44 52 2C 54 53 49 5A 45 3B 0D 0A 46 52 E,ADR,TSIZE;..FR
013390: 4F 4D 09 43 50 4D 09 49 4D 50 4F 52 54 20 66 63 OM.CPM.IMPORT fc
0133A0: 62 2C 61 6C 66 61 2C 65 78 74 65 6E 2C 6F 70 6E b,alfa,exten,opn
0133B0: 66 63 2C 42 44 4F 53 3B 0D 0A 46 52 4F 4D 09 53 fc,BDOS;..FROM.S
0133C0: 74 72 69 6E 67 73 20 49 4D 50 4F 52 54 20 4C 65 trings IMPORT Le
0133D0: 6E 67 74 68 3B 0D 0A 46 52 4F 4D 09 53 74 6F 72 ngth;..FROM.Stor
0133E0: 61 67 65 20 49 4D 50 4F 52 54 20 41 4C 4C 4F 43 age IMPORT ALLOC
0133F0: 41 54 45 3B 0D 0A 54 59 50 45 0D 0A 09 49 6E 64 ATE;..TYPE...Ind
013400: 6D 43 68 61 72 73 5B 69 5D 3B 0D 0A 09 09 09 09 mChars[i];......
013410: 49 4E 43 28 72 65 70 6C 79 29 3B 0D 0A 09 09 09 INC(reply);.....
013420: 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 28 2A .END;.....END;(*
013430: 57 49 54 48 20 70 5E 2A 29 0D 0A 09 09 45 4E 44 WITH p^*)....END
013440: 20 28 2A 49 46 20 3C 3E 4E 49 4C 2A 29 0D 0A 09 (*IF <>NIL*)...
013450: 45 4E 44 20 53 74 6F 72 65 4F 6E 65 4D 61 63 72 END StoreOneMacr
013460: 6F 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4C 65 61 72 o;..BEGIN...Lear
013470: 6E 63 68 3A 3D 27 41 27 3B 0D 0A 09 57 48 49 4C nch:='A';...WHIL
013480: 45 20 28 43 6F 6D 6D 61 6E 64 73 5B 4C 65 61 72 E (Commands[Lear
013490: 6E 63 68 5D 3D 4E 49 4C 29 20 41 4E 44 20 28 4C nch]=NIL) AND (L
0134A0: 65 61 72 6E 63 68 3C 3D 27 5A 27 29 20 44 4F 20 earnch<='Z') DO
0134B0: 0D 0A 09 09 4C 65 61 72 6E 63 68 3A 3D 43 48 52 ....Learnch:=CHR
0134C0: 28 4F 52 44 28 4C 65 61 72 6E 63 68 29 2B 31 29 (ORD(Learnch)+1)
0134D0: 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 4C ;....END;...IF L
0134E0: 65 61 72 6E 63 68 3E 27 5A 27 20 54 48 45 4E 20 earnch>'Z' THEN
0134F0: 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 43 72 RETURN END;...Cr
013500: 65 61 74 65 28 46 2C 27 4D 41 43 52 4F 53 2E 44 eate(F,'MACROS.D
013510: 41 54 20 27 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 AT ',reply);...I
013520: 46 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D F reply<>0 THEN.
013530: 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
013540: 20 63 6F 75 6C 64 20 6E 6F 74 20 73 61 76 65 20 could not save
013550: 6D 61 63 72 6F 73 20 66 69 6C 65 27 29 3B 0D 0A macros file');..
013560: 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 52 45 ..WriteLn;....RE
013570: 54 55 52 4E 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 TURN....END;...I
013580: 46 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 20 F reply<>0 THEN
013590: 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 72 65 RETURN END;...re
0135A0: 70 6C 79 3A 3D 30 3B 0D 0A 09 46 4F 52 20 4C 65 ply:=0;...FOR Le
0135B0: 61 72 6E 63 68 3A 3D 27 41 27 20 54 4F 20 27 5A arnch:='A' TO 'Z
0135C0: 27 20 44 4F 20 53 74 6F 72 65 4F 6E 65 4D 61 63 ' DO StoreOneMac
0135D0: 72 6F 28 43 6F 6D 6D 61 6E 64 73 5B 4C 65 61 72 ro(Commands[Lear
0135E0: 6E 63 68 5D 29 20 45 4E 44 3B 0D 0A 0D 0A 09 28 nch]) END;.....(
0135F0: 2A 4E 6F 77 20 6F 75 74 70 75 74 20 6B 65 79 20 *Now output key
013600: 20 6B 65 79 20 64 65 66 69 6E 69 74 69 6F 6E 2A key definition*
013610: 29 0D 0A 42 45 47 49 4E 0D 0A 09 47 65 74 41 43 )..BEGIN...GetAC
013620: 68 61 72 28 52 65 73 75 6C 74 29 3B 0D 0A 09 45 har(Result);...E
013630: 4E 44 20 52 65 61 64 41 43 68 61 72 3B 0D 0A 09 ND ReadAChar;...
013640: 09 09 09 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 ......PROCEDURE
013650: 47 65 74 44 65 66 43 68 61 72 3B 0D 0A 56 41 52 GetDefChar;..VAR
013660: 09 54 65 78 74 3A 41 52 52 41 59 5B 31 2E 2E 31 .Text:ARRAY[1..1
013670: 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 ] OF CHAR;..BEGI
013680: 4E 0D 0A 09 47 65 74 53 74 72 69 6E 67 28 54 65 N...GetString(Te
013690: 78 74 2C 4C 65 61 72 6E 4C 65 6E 2C 27 43 68 61 xt,LearnLen,'Cha
0136A0: 72 20 74 6F 20 64 65 66 69 6E 65 3A 27 29 3B 0D r to define:');.
0136B0: 0A 09 4C 65 61 72 6E 63 68 3A 3D 43 41 50 28 54 ..Learnch:=CAP(T
0136C0: 65 78 74 5B 31 5D 29 3B 0D 0A 09 45 4E 44 20 47 ext[1]);...END G
0136D0: 65 74 44 65 66 43 68 61 72 3B 0D 0A 50 52 4F 43 etDefChar;..PROC
0136E0: 45 44 55 52 45 20 44 65 66 4D 61 63 72 6F 54 65 EDURE DefMacroTe
0136F0: 78 74 3B 0D 0A 56 41 52 09 70 3A 50 4B 65 79 44 xt;..VAR.p:PKeyD
013700: 65 66 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 ef;..BEGIN...IF
013710: 4C 65 61 72 6E 4C 65 6E 3E 30 20 54 48 45 4E 0D LearnLen>0 THEN.
013720: 0A 09 09 41 4C 4C 4F 43 41 54 45 28 70 2C 54 53 ...ALLOCATE(p,TS
013730: 49 5A 45 28 43 41 52 44 49 4E 41 4C 29 2B 4C 65 IZE(CARDINAL)+Le
013740: 61 72 6E 4C 65 6E 29 3B 0D 0A 09 09 43 6F 6D 6D arnLen);....Comm
013750: 61 6E 64 73 5B 4C 65 61 72 6E 63 68 5D 3A 3D 70 ands[Learnch]:=p
013760: 20 0D 0A 09 09 57 49 54 48 20 70 5E 20 44 4F 0D ....WITH p^ DO.
013770: 0A 09 09 09 4C 65 6E 67 74 68 3A 3D 4C 65 61 72 ....Length:=Lear
013780: 6E 4C 65 6E 3B 0D 0A 09 09 09 46 4F 52 20 4C 65 nLen;.....FOR Le
013790: 61 72 6E 4C 65 6E 3A 3D 4C 65 61 72 6E 4C 65 6E arnLen:=LearnLen
0137A0: 20 54 4F 20 31 20 42 59 20 2D 31 20 44 4F 0D 0A TO 1 BY -1 DO..
0137B0: 09 09 09 09 43 6F 6D 6D 43 68 61 72 73 5B 4C 65 ....CommChars[Le
0137C0: 61 72 6E 4C 65 6E 5D 3A 3D 54 65 78 74 5B 4C 65 arnLen]:=Text[Le
0137D0: 61 72 6E 4C 65 6E 5D 3B 0D 0A 09 09 09 09 45 4E arnLen];......EN
0137E0: 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 0D 0A 09 D;.....END;.....
0137F0: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 44 65 66 4D .END;...END DefM
013800: 73 65 71 75 65 6E 63 65 73 2A 29 0D 0A 09 49 46 sequences*)...IF
013810: 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A reply<>0 THEN..
013820: 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D 3A 3D ..Block[reply]:=
013830: 30 78 3B 0D 0A 09 09 53 65 71 57 72 69 74 65 42 0x;....SeqWriteB
013840: 6C 6F 63 6B 28 46 2C 41 44 52 28 42 6C 6F 63 6B lock(F,ADR(Block
013850: 29 2C 42 6C 6F 63 6B 4C 65 6E 2C 72 65 70 6C 79 ),BlockLen,reply
013860: 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 43 );....END;.....C
013870: 6C 6F 73 65 28 46 29 3B 0D 0A 09 45 4E 44 20 53 lose(F);...END S
013880: 74 6F 72 65 4D 61 63 72 6F 73 3B 0D 0A 50 52 4F toreMacros;..PRO
013890: 43 45 44 55 52 45 20 4F 75 74 43 68 28 63 68 3A CEDURE OutCh(ch:
0138A0: 43 48 41 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 CHAR);..BEGIN...
0138B0: 49 46 20 63 68 3C 27 20 27 20 54 48 45 4E 0D 0A IF ch<' ' THEN..
0138C0: 09 09 57 72 69 74 65 28 27 5E 27 29 3B 57 72 69 ..Write('^');Wri
0138D0: 74 65 28 43 48 52 28 4F 52 44 28 63 68 29 2B 36 te(CHR(ORD(ch)+6
0138E0: 34 29 29 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 4));...ELSE....W
0138F0: 72 69 74 65 28 63 68 29 3B 0D 0A 09 09 45 4E 44 rite(ch);....END
013900: 3B 0D 0A 09 45 4E 44 20 4F 75 74 43 68 3B 0D 0A ;...END OutCh;..
013910: 50 52 4F 43 45 44 55 52 45 20 50 72 69 6E 74 4D PROCEDURE PrintM
013920: 61 63 72 6F 73 3B 0D 0A 42 45 47 49 4E 0D 0A 09 acros;..BEGIN...
013930: 46 4F 52 20 63 68 3A 3D 27 41 27 20 54 4F 20 27 FOR ch:='A' TO '
013940: 5A 27 20 44 4F 0D 0A 09 09 49 46 20 43 6F 6D 6D Z' DO....IF Comm
013950: 61 6E 64 73 5B 63 68 5D 3C 3E 4E 49 4C 20 54 48 ands[ch]<>NIL TH
013960: 45 4E 20 0D 0A 09 09 20 20 20 20 57 49 54 48 20 EN .... WITH
013970: 43 6F 6D 6D 61 6E 64 73 5B 63 68 5D 5E 20 44 4F Commands[ch]^ DO
013980: 0D 0A 09 09 09 4F 75 74 43 68 28 63 68 29 3B 0D .....OutCh(ch);.
013990: 0A 09 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 ....FOR i:=1 TO
0139A0: 4C 65 6E 67 74 68 20 44 4F 20 0D 0A 09 09 09 09 Length DO ......
0139B0: 4F 75 74 43 68 28 43 6F 6D 6D 43 68 61 72 73 5B OutCh(CommChars[
0139C0: 69 5D 29 20 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A i]) ......END;..
0139D0: 09 09 09 45 4E 44 3B 0D 0A 09 09 20 20 20 20 57 ...END;.... W
0139E0: 72 69 74 65 4C 6E 3B 0D 0A 09 09 20 20 20 20 45 riteLn;.... E
0139F0: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 72 ND;....END;...Wr
013A00: 61 63 72 6F 54 65 78 74 3B 0D 0A 50 52 4F 43 45 acroText;..PROCE
013A10: 44 55 52 45 20 4C 65 61 72 6E 4D 61 63 72 6F 3B DURE LearnMacro;
013A20: 0D 0A 0D 0A 28 2A 09 4C 65 61 72 6E 20 61 20 6D ....(*.Learn a m
013A30: 61 63 72 6F 20 64 65 66 69 6E 69 74 69 6F 6E 09 acro definition.
013A40: 0D 0A 09 63 61 6C 6C 65 64 20 61 74 20 65 69 74 ...called at eit
013A50: 68 65 72 20 65 6E 64 20 6F 66 20 64 65 66 69 6E her end of defin
013A60: 69 74 69 6F 6E 2A 29 0D 0A 0D 0A 42 45 47 49 4E ition*)....BEGIN
013A70: 0D 0A 09 49 46 20 4E 4F 54 20 4C 65 61 72 6E 69 ...IF NOT Learni
013A80: 6E 67 20 54 48 45 4E 0D 0A 09 09 47 65 74 44 65 ng THEN....GetDe
013A90: 66 43 68 61 72 3B 0D 0A 09 09 4C 65 61 72 6E 69 fChar;....Learni
013AA0: 6E 67 3A 3D 54 52 55 45 3B 0D 0A 09 09 4C 65 61 ng:=TRUE;....Lea
013AB0: 72 6E 4C 65 6E 3A 3D 30 3B 0D 0A 09 45 4C 53 45 rnLen:=0;...ELSE
013AC0: 0D 0A 09 09 4C 65 61 72 6E 4C 65 6E 3A 3D 4C 65 ....LearnLen:=Le
013AD0: 61 72 6E 4C 65 6E 2D 32 3B 0D 0A 09 09 44 65 66 arnLen-2;....Def
013AE0: 4D 61 63 72 6F 54 65 78 74 3B 0D 0A 09 09 4C 65 MacroText;....Le
013AF0: 61 72 6E 69 6E 67 3A 3D 46 41 4C 53 45 3B 0D 0A arning:=FALSE;..
013B00: 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4C 65 61 ..END;...END Lea
013B10: 72 6E 4D 61 63 72 6F 3B 0D 0A 50 52 4F 43 45 44 rnMacro;..PROCED
013B20: 55 52 45 20 44 65 66 4D 61 63 72 6F 3B 0D 0A 42 URE DefMacro;..B
013B30: 45 47 49 4E 0D 0A 09 47 65 74 44 65 66 43 68 61 EGIN...GetDefCha
013B40: 72 3B 0D 0A 09 49 46 20 28 4C 65 61 72 6E 63 68 r;...IF (Learnch
013B50: 3E 3D 27 41 27 29 20 41 4E 44 20 28 4C 65 61 72 >='A') AND (Lear
013B60: 6E 63 68 3C 3D 27 5A 27 29 20 4F 52 20 28 4C 65 nch<='Z') OR (Le
013B70: 61 72 6E 63 68 3D 45 53 43 29 20 54 48 45 4E 0D arnch=ESC) THEN.
013B80: 0A 09 09 47 65 74 53 74 72 69 6E 67 28 54 65 78 ...GetString(Tex
013B90: 74 2C 4C 65 61 72 6E 4C 65 6E 2C 27 4D 61 63 72 t,LearnLen,'Macr
013BA0: 6F 3A 27 29 3B 0D 0A 09 09 44 65 66 4D 61 63 72 o:');....DefMacr
013BB0: 6F 54 65 78 74 3B 0D 0A 09 09 45 4E 44 3B 0D 0A oText;....END;..
013BC0: 09 45 4E 44 20 44 65 66 4D 61 63 72 6F 3B 0D 0A .END DefMacro;..
013BD0: 50 52 4F 43 45 44 55 52 45 20 4D 61 63 72 6F 28 PROCEDURE Macro(
013BE0: 63 68 3A 43 48 41 52 3B 72 65 70 65 61 74 3A 49 ch:CHAR;repeat:I
013BF0: 4E 54 45 47 45 52 29 3B 0D 0A 56 41 52 09 69 3A NTEGER);..VAR.i:
013C00: 69 74 65 53 74 72 69 6E 67 28 27 20 45 6E 74 65 iteString(' Ente
013C10: 72 20 61 6E 79 20 63 68 61 72 61 63 74 65 72 20 r any character
013C20: 74 6F 20 63 6F 6E 74 69 6E 75 65 20 3A 27 29 3B to continue :');
013C30: 0D 0A 09 57 61 69 74 46 6F 72 43 68 3B 0D 0A 09 ...WaitForCh;...
013C40: 45 4E 44 20 50 72 69 6E 74 4D 61 63 72 6F 73 3B END PrintMacros;
013C50: 0D 0A 42 45 47 49 4E 0D 0A 09 53 68 6F 77 43 68 ..BEGIN...ShowCh
013C60: 61 6E 67 65 3A 3D 54 52 55 45 3B 0D 0A 09 46 4F ange:=TRUE;...FO
013C70: 52 20 63 68 3A 3D 27 40 27 20 54 4F 20 27 5A 27 R ch:='@' TO 'Z'
013C80: 20 44 4F 20 43 6F 6D 6D 61 6E 64 73 5B 63 68 5D DO Commands[ch]
013C90: 3A 3D 4E 49 4C 20 45 4E 44 3B 0D 0A 09 4C 6F 6F :=NIL END;...Loo
013CA0: 6B 75 70 28 46 2C 27 4D 41 43 52 4F 53 2E 44 41 kup(F,'MACROS.DA
013CB0: 54 20 27 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 T ',reply);...IF
013CC0: 20 72 65 70 6C 79 3D 30 20 54 48 45 4E 0D 0A 09 reply=0 THEN...
013CD0: 09 4C 6F 61 64 4D 61 63 72 6F 73 3B 0D 0A 09 09 .LoadMacros;....
013CE0: 45 4E 44 3B 0D 0A 09 09 0D 0A 09 45 4E 44 20 4D END;.......END M
013CF0: 61 63 72 6F 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A acros...........
013D00: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
013D10: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
013D20: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
013D30: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
013D40: 1A 44 49 53 43 32 20 20 42 41 54 20 00 00 00 00 .DISC2 BAT ....
013D50: 00 00 00 00 00 00 08 82 21 0D E1 0B 3A 01 00 00 ........!...:...
013D60: 4C 44 49 53 43 33 20 20 42 41 54 20 00 00 00 00 LDISC3 BAT ....
013D70: 00 00 00 00 00 00 75 92 21 0D E2 0B 5E 03 00 00 ......u.!...^...
013D80: 79 70 65 3A 73 75 62 66 69 65 6C 64 73 3A 70 6E ype:subfields:pn
013D90: 61 6D 65 7C 0D 0A 09 09 09 09 73 75 62 72 74 79 ame|......subrty
013DA0: 70 65 2C 65 6E 75 6D 74 79 70 65 3A 6C 6F 77 3A pe,enumtype:low:
013DB0: 49 4E 54 45 47 45 52 3B 0D 0A 09 09 09 09 09 20 INTEGER;.......
013DC0: 20 20 20 20 20 20 20 20 20 68 69 67 68 3A 49 4E high:IN
013DD0: 54 45 47 45 52 3B 0D 0A 09 09 09 09 09 09 20 20 TEGER;........
013DE0: 62 74 79 70 65 3A 70 6E 61 6D 65 7C 0D 0A 09 09 btype:pname|....
013DF0: 09 09 70 6F 69 6E 74 74 79 70 65 2C 73 65 74 74 ..pointtype,sett
013E00: 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E CARDINAL;..BEGIN
013E10: 0D 0A 09 63 68 3A 3D 43 41 50 28 63 68 29 3B 0D ...ch:=CAP(ch);.
013E20: 0A 09 49 46 20 63 68 3C 27 20 27 20 54 48 45 4E ..IF ch<' ' THEN
013E30: 20 63 68 3A 3D 43 48 52 28 4F 52 44 28 63 68 29 ch:=CHR(ORD(ch)
013E40: 2B 36 34 29 20 45 4E 44 3B 0D 0A 09 49 46 20 28 +64) END;...IF (
013E50: 63 68 3E 3D 27 40 27 29 20 41 4E 44 20 28 63 68 ch>='@') AND (ch
013E60: 3C 3D 27 5A 27 29 20 54 48 45 4E 0D 0A 09 09 41 <='Z') THEN....A
013E70: 64 64 4D 61 63 72 6F 28 43 6F 6D 6D 61 6E 64 73 ddMacro(Commands
013E80: 5B 63 68 5D 2C 72 65 70 65 61 74 29 3B 0D 0A 09 [ch],repeat);...
013E90: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4D 61 63 72 .END;...END Macr
013EA0: 6F 3B 0D 0A 56 41 52 09 46 3A 46 49 4C 45 3B 0D o;..VAR.F:FILE;.
013EB0: 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B ..reply:INTEGER;
013EC0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 4C 6F 61 64 ..PROCEDURE Load
013ED0: 4D 61 63 72 6F 73 3B 0D 0A 56 41 52 09 42 6C 6F Macros;..VAR.Blo
013EE0: 63 6B 3A 41 52 52 41 59 5B 30 2E 2E 42 6C 6F 63 ck:ARRAY[0..Bloc
013EF0: 6B 4C 65 6E 2D 31 5D 20 4F 46 20 43 48 41 52 3B kLen-1] OF CHAR;
013F00: 0D 0A 42 45 47 49 4E 0D 0A 09 4C 4F 4F 50 0D 0A ..BEGIN...LOOP..
013F10: 09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 28 46 ..SeqReadBlock(F
013F20: 2C 41 44 52 28 42 6C 6F 63 6B 29 2C 42 6C 6F 63 ,ADR(Block),Bloc
013F30: 6B 4C 65 6E 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 kLen,reply);....
013F40: 49 46 20 72 65 70 6C 79 3C 3E 42 6C 6F 63 6B 4C IF reply<>BlockL
013F50: 65 6E 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 en THEN EXIT END
013F60: 3B 0D 0A 09 09 72 65 70 6C 79 3A 3D 30 3B 0D 0A ;....reply:=0;..
013F70: 09 09 57 48 49 4C 45 20 42 6C 6F 63 6B 5B 72 65 ..WHILE Block[re
013F80: 70 6C 79 5D 3C 3E 30 78 20 44 4F 0D 0A 09 09 09 ply]<>0x DO.....
013F90: 4C 65 61 72 6E 4C 65 6E 3A 3D 4F 52 44 28 42 6C LearnLen:=ORD(Bl
013FA0: 6F 63 6B 5B 72 65 70 6C 79 5D 29 3B 0D 0A 09 09 ock[reply]);....
013FB0: 09 4C 65 61 72 6E 63 68 3A 3D 42 6C 6F 63 6B 5B .Learnch:=Block[
013FC0: 72 65 70 6C 79 2B 31 5D 3B 0D 0A 09 09 09 72 65 reply+1];.....re
013FD0: 70 6C 79 3A 3D 72 65 70 6C 79 2B 32 3B 0D 0A 09 ply:=reply+2;...
013FE0: 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 4C 65 ..FOR i:=1 TO Le
013FF0: 61 72 6E 4C 65 6E 20 44 4F 0D 0A 09 09 09 09 54 arnLen DO......T
014000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0140A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0140B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0140C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0140D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0140E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0140F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0141A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0141B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0141C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0141D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0141E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0141F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
014200: 65 78 74 5B 69 5D 3A 3D 42 6C 6F 63 6B 5B 72 65 ext[i]:=Block[re
014210: 70 6C 79 5D 3B 0D 0A 09 09 09 09 49 4E 43 28 72 ply];......INC(r
014220: 65 70 6C 79 29 3B 0D 0A 09 09 09 09 45 4E 44 3B eply);......END;
014230: 0D 0A 09 09 09 44 65 66 4D 61 63 72 6F 54 65 78 .....DefMacroTex
014240: 74 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 t;.....END;....E
014250: 4E 44 3B 0D 0A 09 45 4E 44 20 4C 6F 61 64 4D 61 ND;...END LoadMa
014260: 63 72 6F 73 3B 09 09 09 0D 0A 50 52 4F 43 45 44 cros;.....PROCED
014270: 55 52 45 20 53 74 6F 72 65 4D 61 63 72 6F 73 3B URE StoreMacros;
014280: 0D 0A 56 41 52 09 42 6C 6F 63 6B 3A 41 52 52 41 ..VAR.Block:ARRA
014290: 59 5B 30 2E 2E 42 6C 6F 63 6B 4C 65 6E 2D 31 5D Y[0..BlockLen-1]
0142A0: 20 4F 46 20 43 48 41 52 3B 0D 0A 0D 0A 50 52 4F OF CHAR;....PRO
0142B0: 43 45 44 55 52 45 20 53 74 6F 72 65 4F 6E 65 4D CEDURE StoreOneM
0142C0: 61 63 72 6F 28 70 3A 50 4B 65 79 44 65 66 29 3B acro(p:PKeyDef);
0142D0: 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 70 3C 3E ..BEGIN...IF p<>
0142E0: 4E 49 4C 20 54 48 45 4E 0D 0A 09 09 57 49 54 48 NIL THEN....WITH
0142F0: 20 70 5E 20 44 4F 0D 0A 09 09 09 49 46 20 28 72 p^ DO.....IF (r
014300: 65 70 6C 79 2B 4C 65 6E 67 74 68 2B 31 34 29 3E eply+Length+14)>
014310: 3D 42 6C 6F 63 6B 4C 65 6E 20 54 48 45 4E 0D 0A =BlockLen THEN..
014320: 09 09 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D ....Block[reply]
014330: 3A 3D 30 78 3B 0D 0A 09 09 09 09 53 65 71 57 72 :=0x;......SeqWr
014340: 69 74 65 42 6C 6F 63 6B 28 46 2C 41 44 52 28 42 iteBlock(F,ADR(B
014350: 6C 6F 63 6B 29 2C 42 6C 6F 63 6B 4C 65 6E 2C 72 lock),BlockLen,r
014360: 65 70 6C 79 29 3B 0D 0A 09 09 09 09 72 65 70 6C eply);......repl
014370: 79 3A 3D 30 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D y:=0;......END;.
014380: 0A 09 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D ....Block[reply]
014390: 3A 3D 43 48 52 28 4C 65 6E 67 74 68 29 3B 0D 0A :=CHR(Length);..
0143A0: 09 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 2B 31 ...Block[reply+1
0143B0: 5D 3A 3D 4C 65 61 72 6E 63 68 3B 0D 0A 09 09 09 ]:=Learnch;.....
0143C0: 72 65 70 6C 79 3A 3D 72 65 70 6C 79 2B 32 3B 0D reply:=reply+2;.
0143D0: 0A 09 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 ....FOR i:=1 TO
0143E0: 4C 65 6E 67 74 68 20 44 4F 0D 0A 09 09 09 09 42 Length DO......B
0143F0: 6C 6F 63 6B 5B 72 65 70 6C 79 5D 3A 3D 43 6F 6D lock[reply]:=Com
014400: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
014410: 11 00 01 00 02 09 52 E5 11 00 C9 02 00 00 00 02 ......R.........
014420: 11 00 C5 02 00 00 00 02 11 00 C1 02 00 00 00 02 ................
014430: 11 00 C6 02 00 00 00 02 11 00 C2 02 00 00 00 02 ................
014440: 11 00 C7 02 00 00 00 02 11 00 C3 02 00 00 00 02 ................
014450: 11 00 C8 02 00 00 00 02 11 00 C4 02 00 00 00 02 ................
014460: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
014470: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
014480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
014490: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
014500: 48 28 42 75 66 66 65 72 49 6E 29 20 54 48 45 4E H(BufferIn) THEN
014510: 0D 0A 09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B ....SeqReadBlock
014520: 28 46 72 6F 6D 2C 41 44 52 28 42 75 66 66 65 72 (From,ADR(Buffer
014530: 49 6E 29 2C 53 49 5A 45 28 42 75 66 66 65 72 49 In),SIZE(BufferI
014540: 6E 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 49 6E n),reply);....In
014550: 50 6F 73 3A 3D 30 3B 0D 0A 09 09 45 4E 44 3B 0D Pos:=0;....END;.
014560: 0A 09 63 68 3A 3D 42 75 66 66 65 72 49 6E 5B 49 ..ch:=BufferIn[I
014570: 6E 50 6F 73 5D 3B 0D 0A 28 2A 09 57 72 69 74 65 nPos];..(*.Write
014580: 43 61 72 64 28 49 6E 50 6F 73 2C 34 29 3B 57 72 Card(InPos,4);Wr
014590: 69 74 65 53 74 72 69 6E 67 28 27 20 27 29 3B 57 iteString(' ');W
0145A0: 72 69 74 65 48 65 78 28 4F 52 44 28 63 68 29 2C riteHex(ORD(ch),
0145B0: 34 29 3B 57 72 69 74 65 4C 6E 3B 2A 29 0D 0A 09 4);WriteLn;*)...
0145C0: 49 4E 43 28 49 6E 50 6F 73 29 3B 0D 0A 09 45 4E INC(InPos);...EN
0145D0: 44 20 47 65 74 43 68 61 72 3B 0D 0A 50 52 4F 43 D GetChar;..PROC
0145E0: 45 44 55 52 45 20 46 6C 75 73 68 4F 75 74 3B 0D EDURE FlushOut;.
0145F0: 0A 56 41 52 09 72 65 70 6C 79 3A 49 4E 54 45 47 .VAR.reply:INTEG
014600: 45 52 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 4C ER;...i:CARDINAL
014610: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4F 75 ;..BEGIN...IF Ou
014620: 74 50 6F 73 3D 30 20 54 48 45 4E 20 52 45 54 55 tPos=0 THEN RETU
014630: 52 4E 20 45 4E 44 3B 0D 0A 09 69 3A 3D 31 32 38 RN END;...i:=128
014640: 2A 28 28 4F 75 74 50 6F 73 2B 31 32 37 29 20 44 *((OutPos+127) D
014650: 49 56 20 31 32 38 29 3B 0D 0A 09 49 46 20 69 3E IV 128);...IF i>
014660: 48 49 47 48 28 42 75 66 66 65 72 4F 75 74 29 20 HIGH(BufferOut)
014670: 54 48 45 4E 20 69 3A 3D 48 49 47 48 28 42 75 66 THEN i:=HIGH(Buf
014680: 66 65 72 4F 75 74 29 20 45 4E 44 3B 0D 0A 09 57 ferOut) END;...W
014690: 48 49 4C 45 20 4F 75 74 50 6F 73 3C 69 20 44 4F HILE OutPos<i DO
0146A0: 0D 0A 09 09 42 75 66 66 65 72 4F 75 74 5B 4F 75 ....BufferOut[Ou
0146B0: 74 50 6F 73 5D 3A 3D 31 61 78 3B 0D 0A 09 09 49 tPos]:=1ax;....I
0146C0: 4E 43 28 4F 75 74 50 6F 73 29 3B 0D 0A 09 09 45 NC(OutPos);....E
0146D0: 4E 44 3B 0D 0A 09 49 4E 43 28 69 29 3B 0D 0A 09 ND;...INC(i);...
0146E0: 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 28 54 6F SeqWriteBlock(To
0146F0: 2C 41 44 52 28 42 75 66 66 65 72 4F 75 74 29 2C ,ADR(BufferOut),
014700: 70 6C 79 3D 30 20 54 48 45 4E 20 45 58 49 54 20 ply=0 THEN EXIT
014710: 45 4E 44 3B 0D 0A 09 09 53 65 71 57 72 69 74 65 END;....SeqWrite
014720: 42 6C 6F 63 6B 28 54 6F 2C 41 44 52 28 42 75 66 Block(To,ADR(Buf
014730: 66 65 72 29 2C 72 65 70 6C 79 2C 72 65 70 6C 79 fer),reply,reply
014740: 29 3B 0D 0A 09 09 6A 3A 3D 6A 2B 43 41 52 44 49 );....j:=j+CARDI
014750: 4E 41 4C 28 72 65 70 6C 79 29 20 44 49 56 20 31 NAL(reply) DIV 1
014760: 32 38 3B 0D 0A 09 09 49 46 20 4D 61 78 53 65 63 28;....IF MaxSec
014770: 74 6F 72 73 3C 3D 38 20 54 48 45 4E 20 45 58 49 tors<=8 THEN EXI
014780: 54 20 45 4E 44 3B 0D 0A 09 09 4D 61 78 53 65 63 T END;....MaxSec
014790: 74 6F 72 73 3A 3D 4D 61 78 53 65 63 74 6F 72 73 tors:=MaxSectors
0147A0: 2D 38 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 -8;....END;...RE
0147B0: 54 55 52 4E 20 6A 3B 0D 0A 09 45 4E 44 20 54 72 TURN j;...END Tr
0147C0: 61 6E 73 66 65 72 3B 0D 0A 50 52 4F 43 45 44 55 ansfer;..PROCEDU
0147D0: 52 45 20 55 6E 53 63 72 75 6E 63 68 28 56 41 52 RE UnScrunch(VAR
0147E0: 20 46 72 6F 6D 2C 54 6F 3A 46 49 4C 45 29 3B 0D From,To:FILE);.
0147F0: 0A 54 59 50 45 09 50 4E 61 6D 65 3D 50 4F 49 4E .TYPE.PName=POIN
014800: 54 45 52 20 54 4F 20 4E 61 6D 65 3B 0D 0A 09 49 TER TO Name;...I
014810: 64 65 6E 74 3D 41 52 52 41 59 5B 30 2E 2E 36 30 dent=ARRAY[0..60
014820: 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 4E 61 6D ] OF CHAR;...Nam
014830: 65 3D 52 45 43 4F 52 44 0D 0A 09 09 43 6F 64 65 e=RECORD....Code
014840: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 4E 65 :CARDINAL;....Ne
014850: 78 74 3A 50 4E 61 6D 65 3B 0D 0A 09 09 54 65 78 xt:PName;....Tex
014860: 74 3A 49 64 65 6E 74 3B 0D 0A 09 09 45 4E 44 3B t:Ident;....END;
014870: 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 44 49 4E ..VAR.i,j:CARDIN
014880: 41 4C 3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 AL;...reply:INTE
014890: 47 45 52 3B 0D 0A 09 42 75 66 66 65 72 49 6E 2C GER;...BufferIn,
0148A0: 42 75 66 66 65 72 4F 75 74 3A 41 52 52 41 59 5B BufferOut:ARRAY[
0148B0: 30 2E 2E 31 30 32 33 5D 20 4F 46 20 42 59 54 45 0..1023] OF BYTE
0148C0: 3B 0D 0A 09 54 61 62 6C 65 3A 50 4E 61 6D 65 3B ;...Table:PName;
0148D0: 0D 0A 09 70 3A 50 4E 61 6D 65 3B 0D 0A 09 43 6F ...p:PName;...Co
0148E0: 64 65 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 49 de:CARDINAL;...I
0148F0: 64 3A 49 64 65 6E 74 3B 0D 0A 09 49 6E 50 6F 73 d:Ident;...InPos
014900: 65 78 52 65 63 6F 72 64 3D 52 45 43 4F 52 44 0D exRecord=RECORD.
014910: 0A 09 09 53 74 61 74 75 73 3A 42 59 54 45 3B 0D ...Status:BYTE;.
014920: 0A 09 09 42 61 73 65 4E 61 6D 65 3A 61 6C 66 61 ...BaseName:alfa
014930: 3B 0D 0A 09 09 45 78 74 3A 65 78 74 65 6E 3B 0D ;....Ext:exten;.
014940: 0A 09 09 53 74 61 72 74 53 65 63 74 6F 72 3A 43 ...StartSector:C
014950: 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 4C 65 6E 67 ARDINAL;....Leng
014960: 74 68 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 th:CARDINAL;....
014970: 44 61 74 65 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A Date:CARDINAL;..
014980: 09 09 54 69 6D 65 3A 43 41 52 44 49 4E 41 4C 3B ..Time:CARDINAL;
014990: 0D 0A 09 09 53 63 72 75 6E 63 68 65 64 3A 42 4F ....Scrunched:BO
0149A0: 4F 4C 45 41 4E 3B 0D 0A 09 09 46 69 6C 6C 65 72 OLEAN;....Filler
0149B0: 20 3A 41 52 52 41 59 20 5B 31 2E 2E 31 31 5D 20 :ARRAY [1..11]
0149C0: 4F 46 20 42 59 54 45 3B 0D 0A 09 09 45 4E 44 3B OF BYTE;....END;
0149D0: 0D 0A 09 49 6E 64 65 78 3D 41 52 52 41 59 5B 31 ...Index=ARRAY[1
0149E0: 2E 2E 31 32 38 5D 20 4F 46 20 49 6E 64 65 78 52 ..128] OF IndexR
0149F0: 65 63 6F 72 64 3B 0D 0A 56 41 52 09 4C 69 62 3A ecord;..VAR.Lib:
014A00: 46 49 4C 45 3B 0D 0A 09 4C 69 62 4E 61 6D 65 3A FILE;...LibName:
014A10: 46 69 6C 65 4E 61 6D 65 3B 0D 0A 09 72 65 70 6C FileName;...repl
014A20: 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 44 69 72 y:INTEGER;...Dir
014A30: 65 63 74 6F 72 79 3A 49 6E 64 65 78 3B 0D 0A 09 ectory:Index;...
014A40: 53 6C 6F 74 73 3A 43 41 52 44 49 4E 41 4C 3B 0D Slots:CARDINAL;.
014A50: 0A 09 4E 65 78 74 53 65 63 74 6F 72 3A 43 41 52 ..NextSector:CAR
014A60: 44 49 4E 41 4C 3B 0D 0A 09 69 2C 6A 3A 43 41 52 DINAL;...i,j:CAR
014A70: 44 49 4E 41 4C 3B 0D 0A 09 43 6F 6D 6D 61 6E 64 DINAL;...Command
014A80: 43 48 3A 43 48 41 52 3B 0D 0A 09 46 4E 61 6D 65 CH:CHAR;...FName
014A90: 3A 46 69 6C 65 4E 61 6D 65 3B 0D 0A 50 52 4F 43 :FileName;..PROC
014AA0: 45 44 55 52 45 20 52 65 61 64 43 6F 6D 6D 61 6E EDURE ReadComman
014AB0: 64 3B 0D 0A 28 2A 09 72 65 61 64 20 61 6E 20 69 d;..(*.read an i
014AC0: 6E 70 75 74 20 63 6F 6D 6D 61 6E 64 2C 20 72 65 nput command, re
014AD0: 74 75 72 6E 20 63 6F 6D 6D 61 6E 64 20 6C 65 74 turn command let
014AE0: 74 65 72 20 69 6E 20 43 6F 6D 6D 61 6E 64 43 48 ter in CommandCH
014AF0: 0D 0A 09 72 65 74 75 72 6E 20 66 69 6C 65 20 6E ...return file n
014B00: 2C 4F 75 74 50 6F 73 3A 43 41 52 44 49 4E 41 4C ,OutPos:CARDINAL
014B10: 3B 0D 0A 09 63 68 3A 43 48 41 52 3B 0D 0A 09 45 ;...ch:CHAR;...E
014B20: 6F 66 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 50 52 4F of:BOOLEAN;..PRO
014B30: 43 45 44 55 52 45 20 45 6E 74 65 72 49 64 28 73 CEDURE EnterId(s
014B40: 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 29 3B :ARRAY OF CHAR);
014B50: 0D 0A 56 41 52 09 72 3A 50 4E 61 6D 65 3B 0D 0A ..VAR.r:PName;..
014B60: 09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .i,j:CARDINAL;..
014B70: 42 45 47 49 4E 0D 0A 09 6A 3A 3D 4C 65 6E 67 74 BEGIN...j:=Lengt
014B80: 68 28 73 29 3B 0D 0A 09 41 4C 4C 4F 43 41 54 45 h(s);...ALLOCATE
014B90: 28 72 2C 6A 2B 54 53 49 5A 45 28 43 41 52 44 49 (r,j+TSIZE(CARDI
014BA0: 4E 41 4C 29 2B 54 53 49 5A 45 28 50 4E 61 6D 65 NAL)+TSIZE(PName
014BB0: 29 2B 31 29 3B 0D 0A 09 0D 0A 09 72 5E 2E 43 6F )+1);......r^.Co
014BC0: 64 65 3A 3D 43 6F 64 65 3B 0D 0A 09 57 49 54 48 de:=Code;...WITH
014BD0: 20 72 5E 20 44 4F 0D 0A 09 09 4E 65 78 74 3A 3D r^ DO....Next:=
014BE0: 54 61 62 6C 65 3B 0D 0A 09 09 54 61 62 6C 65 3A Table;....Table:
014BF0: 3D 72 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 30 20 =r;....FOR i:=0
014C00: 54 4F 20 6A 2D 31 20 44 4F 20 54 65 78 74 5B 69 TO j-1 DO Text[i
014C10: 5D 3A 3D 73 5B 69 5D 20 45 4E 44 3B 0D 0A 09 09 ]:=s[i] END;....
014C20: 54 65 78 74 5B 6A 5D 3A 3D 30 78 3B 0D 0A 09 09 Text[j]:=0x;....
014C30: 45 4E 44 3B 0D 0A 09 45 4E 44 20 45 6E 74 65 72 END;...END Enter
014C40: 49 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 Id;..PROCEDURE E
014C50: 6E 74 65 72 47 49 64 28 4C 65 6E 3A 43 41 52 44 nterGId(Len:CARD
014C60: 49 4E 41 4C 3B 73 3A 41 52 52 41 59 20 4F 46 20 INAL;s:ARRAY OF
014C70: 43 48 41 52 29 3B 0D 0A 56 41 52 20 09 69 2C 6A CHAR);..VAR .i,j
014C80: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 69 64 3A :CARDINAL;...id:
014C90: 49 64 65 6E 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 Ident;..BEGIN...
014CA0: 69 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 28 69 i:=0;...WHILE (i
014CB0: 3C 48 49 47 48 28 73 29 29 20 44 4F 0D 0A 09 09 <HIGH(s)) DO....
014CC0: 46 4F 52 20 6A 3A 3D 69 20 54 4F 20 69 2B 4C 65 FOR j:=i TO i+Le
014CD0: 6E 2D 31 20 44 4F 0D 0A 09 09 09 69 64 5B 6A 2D n-1 DO.....id[j-
014CE0: 69 5D 3A 3D 73 5B 6A 5D 0D 0A 09 09 09 45 4E 44 i]:=s[j].....END
014CF0: 3B 0D 0A 09 09 69 64 5B 4C 65 6E 5D 3A 3D 30 78 ;....id[Len]:=0x
014D00: 61 6D 65 20 69 6E 20 46 4E 61 6D 65 2A 29 0D 0A ame in FName*)..
014D10: 56 41 52 09 54 65 78 74 3A 41 52 52 41 59 5B 31 VAR.Text:ARRAY[1
014D20: 2E 2E 32 30 5D 20 4F 46 20 43 48 41 52 3B 0D 0A ..20] OF CHAR;..
014D30: 09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .i,j:CARDINAL;..
014D40: 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 53 74 72 BEGIN...WriteStr
014D50: 69 6E 67 28 27 43 6F 6D 6D 61 6E 64 3A 27 29 3B ing('Command:');
014D60: 0D 0A 09 52 65 61 64 53 74 72 69 6E 67 28 54 65 ...ReadString(Te
014D70: 78 74 29 3B 0D 0A 09 43 6F 6D 6D 61 6E 64 43 48 xt);...CommandCH
014D80: 3A 3D 43 41 50 28 54 65 78 74 5B 31 5D 29 3B 0D :=CAP(Text[1]);.
014D90: 0A 09 69 3A 3D 32 3B 0D 0A 09 57 48 49 4C 45 20 ..i:=2;...WHILE
014DA0: 28 69 3C 3D 48 49 47 48 28 54 65 78 74 29 29 20 (i<=HIGH(Text))
014DB0: 41 4E 44 20 28 54 65 78 74 5B 69 5D 3D 27 20 27 AND (Text[i]=' '
014DC0: 29 20 44 4F 0D 0A 09 09 49 4E 43 28 69 29 20 0D ) DO....INC(i) .
014DD0: 0A 09 09 45 4E 44 3B 0D 0A 09 6A 3A 3D 30 3B 0D ...END;...j:=0;.
014DE0: 0A 09 57 48 49 4C 45 20 28 6A 3C 3D 48 49 47 48 ..WHILE (j<=HIGH
014DF0: 28 46 4E 61 6D 65 29 29 20 41 4E 44 20 28 69 3C (FName)) AND (i<
014E00: 3D 48 49 47 48 28 54 65 78 74 29 29 20 41 4E 44 =HIGH(Text)) AND
014E10: 20 28 54 65 78 74 5B 69 5D 3C 3E 30 63 29 20 44 (Text[i]<>0c) D
014E20: 4F 0D 0A 09 09 46 4E 61 6D 65 5B 6A 5D 3A 3D 43 O....FName[j]:=C
014E30: 41 50 28 54 65 78 74 5B 69 5D 29 3B 0D 0A 09 09 AP(Text[i]);....
014E40: 49 4E 43 28 6A 29 3B 0D 0A 09 09 49 4E 43 28 69 INC(j);....INC(i
014E50: 29 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 48 49 4C )....END;...WHIL
014E60: 45 20 6A 3C 3D 48 49 47 48 28 46 4E 61 6D 65 29 E j<=HIGH(FName)
014E70: 20 44 4F 0D 0A 09 09 46 4E 61 6D 65 5B 6A 5D 3A DO....FName[j]:
014E80: 3D 27 20 27 3B 0D 0A 09 09 49 4E 43 28 6A 29 0D =' ';....INC(j).
014E90: 0A 09 09 45 4E 44 0D 0A 09 45 4E 44 20 52 65 61 ...END...END Rea
014EA0: 64 43 6F 6D 6D 61 6E 64 3B 20 20 0D 0A 50 52 4F dCommand; ..PRO
014EB0: 43 45 44 55 52 45 20 41 64 64 45 6E 74 72 79 28 CEDURE AddEntry(
014EC0: 4E 61 6D 65 3A 66 63 62 3B 50 6F 73 69 74 69 6F Name:fcb;Positio
014ED0: 6E 2C 53 69 7A 65 2C 45 44 61 74 65 2C 45 54 69 n,Size,EDate,ETi
014EE0: 6D 65 3A 43 41 52 44 49 4E 41 4C 3B 53 63 3A 42 me:CARDINAL;Sc:B
014EF0: 4F 4F 4C 45 41 4E 29 3B 0D 0A 56 41 52 09 69 2C OOLEAN);..VAR.i,
014F00: 3B 0D 0A 09 09 45 6E 74 65 72 49 64 28 69 64 29 ;....EnterId(id)
014F10: 3B 0D 0A 09 09 49 4E 43 28 43 6F 64 65 29 3B 0D ;....INC(Code);.
014F20: 0A 09 09 69 3A 3D 69 2B 4C 65 6E 3B 0D 0A 09 09 ...i:=i+Len;....
014F30: 45 4E 44 3B 0D 0A 09 45 4E 44 20 45 6E 74 65 72 END;...END Enter
014F40: 47 49 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 GId;..PROCEDURE
014F50: 53 65 74 55 70 4E 61 6D 65 73 3B 0D 0A 56 41 52 SetUpNames;..VAR
014F60: 09 73 3A 49 64 65 6E 74 3B 0D 0A 50 52 4F 43 45 .s:Ident;..PROCE
014F70: 44 55 52 45 20 50 75 74 49 64 3B 0D 0A 42 45 47 DURE PutId;..BEG
014F80: 49 4E 0D 0A 09 73 5B 69 5D 3A 3D 30 78 3B 0D 0A IN...s[i]:=0x;..
014F90: 09 45 6E 74 65 72 49 64 28 73 29 3B 0D 0A 09 49 .EnterId(s);...I
014FA0: 4E 43 28 43 6F 64 65 29 3B 0D 0A 09 45 4E 44 20 NC(Code);...END
014FB0: 50 75 74 49 64 3B 0D 0A 42 45 47 49 4E 0D 0A 09 PutId;..BEGIN...
014FC0: 43 6F 64 65 3A 3D 31 32 38 3B 0D 0A 09 45 6E 74 Code:=128;...Ent
014FD0: 65 72 47 49 64 28 32 2C 27 42 59 44 4F 49 46 49 erGId(2,'BYDOIFI
014FE0: 4E 4F 46 4F 52 54 4F 27 29 3B 0D 0A 09 45 6E 74 NOFORTO');...Ent
014FF0: 65 72 47 49 64 28 33 2C 27 41 4E 44 44 49 56 45 erGId(3,'ANDDIVE
015000: 4E 44 46 4F 52 4D 4F 44 4E 4F 54 53 45 54 56 41 NDFORMODNOTSETVA
015010: 52 41 44 52 27 29 3B 0D 0A 09 45 6E 74 65 72 47 RADR');...EnterG
015020: 49 64 28 34 2C 27 43 41 53 45 45 4C 53 45 45 58 Id(4,'CASEELSEEX
015030: 49 54 46 52 4F 4D 4C 4F 4F 50 54 48 45 4E 54 59 ITFROMLOOPTHENTY
015040: 50 45 57 49 54 48 48 49 47 48 43 48 41 52 54 52 PEWITHHIGHCHARTR
015050: 55 45 27 29 3B 0D 0A 09 45 6E 74 65 72 47 49 64 UE');...EnterGId
015060: 28 35 2C 27 41 52 52 41 59 42 45 47 49 4E 43 4F (5,'ARRAYBEGINCO
015070: 4E 53 54 45 4C 53 49 46 55 4E 54 49 4C 57 48 49 NSTELSIFUNTILWHI
015080: 4C 45 46 41 4C 53 45 27 29 3B 0D 0A 09 45 6E 74 LEFALSE');...Ent
015090: 65 72 47 49 64 28 36 2C 27 45 58 50 4F 52 54 49 erGId(6,'EXPORTI
0150A0: 4D 50 4F 52 54 4D 4F 44 55 4C 45 52 45 43 4F 52 MPORTMODULERECOR
0150B0: 44 52 45 50 45 41 54 52 45 54 55 52 4E 27 29 3B DREPEATRETURN');
0150C0: 0D 0A 09 45 6E 74 65 72 47 49 64 28 37 2C 27 50 ...EnterGId(7,'P
0150D0: 4F 49 4E 54 45 52 57 72 69 74 65 4C 6E 49 4E 54 OINTERWriteLnINT
0150E0: 45 47 45 52 41 44 44 52 45 53 53 42 4F 4F 4C 45 EGERADDRESSBOOLE
0150F0: 41 4E 27 29 3B 0D 0A 09 45 6E 74 65 72 47 49 64 AN');...EnterGId
015100: 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 j:CARDINAL;..BEG
015110: 49 4E 0D 0A 09 69 3A 3D 32 3B 0D 0A 09 57 48 49 IN...i:=2;...WHI
015120: 4C 45 20 28 69 3C 3D 53 6C 6F 74 73 29 20 41 4E LE (i<=Slots) AN
015130: 44 20 28 44 69 72 65 63 74 6F 72 79 5B 69 5D 2E D (Directory[i].
015140: 53 74 61 74 75 73 3C 3E 30 66 66 68 29 20 44 4F Status<>0ffh) DO
015150: 20 49 4E 43 28 69 29 20 45 4E 44 3B 0D 0A 09 49 INC(i) END;...I
015160: 46 20 69 3E 53 6C 6F 74 73 20 54 48 45 4E 0D 0A F i>Slots THEN..
015170: 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
015180: 44 69 72 65 63 74 6F 72 79 20 66 75 6C 6C 20 2D Directory full -
015190: 20 72 65 64 6F 20 77 69 74 68 20 6D 6F 72 65 20 redo with more
0151A0: 73 6C 6F 74 73 27 29 3B 0D 0A 09 09 57 72 69 74 slots');....Writ
0151B0: 65 4C 6E 3B 0D 0A 09 09 48 41 4C 54 3B 0D 0A 09 eLn;....HALT;...
0151C0: 09 45 4E 44 3B 0D 0A 09 57 49 54 48 20 44 69 72 .END;...WITH Dir
0151D0: 65 63 74 6F 72 79 5B 69 5D 20 44 4F 0D 0A 09 09 ectory[i] DO....
0151E0: 53 74 61 74 75 73 3A 3D 30 3B 0D 0A 09 09 42 61 Status:=0;....Ba
0151F0: 73 65 4E 61 6D 65 3A 3D 4E 61 6D 65 2E 66 63 62 seName:=Name.fcb
015200: 66 6E 3B 0D 0A 09 09 45 78 74 3A 3D 4E 61 6D 65 fn;....Ext:=Name
015210: 2E 66 63 62 66 74 3B 0D 0A 09 09 53 74 61 72 74 .fcbft;....Start
015220: 53 65 63 74 6F 72 3A 3D 50 6F 73 69 74 69 6F 6E Sector:=Position
015230: 3B 0D 0A 09 09 4C 65 6E 67 74 68 3A 3D 53 69 7A ;....Length:=Siz
015240: 65 3B 0D 0A 09 09 44 61 74 65 3A 3D 45 44 61 74 e;....Date:=EDat
015250: 65 3B 0D 0A 09 09 54 69 6D 65 3A 3D 45 54 69 6D e;....Time:=ETim
015260: 65 3B 0D 0A 09 09 53 63 72 75 6E 63 68 65 64 3A e;....Scrunched:
015270: 3D 53 63 3B 0D 0A 09 09 46 4F 52 20 6A 3A 3D 31 =Sc;....FOR j:=1
015280: 20 54 4F 20 48 49 47 48 28 46 69 6C 6C 65 72 29 TO HIGH(Filler)
015290: 20 44 4F 20 46 69 6C 6C 65 72 5B 6A 5D 3A 3D 30 DO Filler[j]:=0
0152A0: 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 0D 0A 09 45 END;....END...E
0152B0: 4E 44 20 41 64 64 45 6E 74 72 79 3B 0D 0A 50 52 ND AddEntry;..PR
0152C0: 4F 43 45 44 55 52 45 20 46 69 6E 64 4E 61 6D 65 OCEDURE FindName
0152D0: 28 66 3A 66 63 62 29 3A 43 41 52 44 49 4E 41 4C (f:fcb):CARDINAL
0152E0: 3B 0D 0A 28 2A 09 66 69 6E 64 20 61 20 6E 61 6D ;..(*.find a nam
0152F0: 65 20 2D 20 72 65 74 75 72 6E 20 30 20 69 66 20 e - return 0 if
015300: 28 38 2C 27 43 41 52 44 49 4E 41 4C 54 65 72 6D (8,'CARDINALTerm
015310: 69 6E 61 6C 27 29 3B 0D 0A 09 45 6E 74 65 72 47 inal');...EnterG
015320: 49 64 28 39 2C 27 50 52 4F 43 45 44 55 52 45 51 Id(9,'PROCEDUREQ
015330: 55 41 4C 49 46 49 45 44 43 6F 70 79 72 69 67 68 UALIFIEDCopyrigh
015340: 74 27 29 3B 0D 0A 09 45 6E 74 65 72 49 64 28 27 t');...EnterId('
015350: 44 45 46 49 4E 49 54 49 4F 4E 27 29 3B 49 4E 43 DEFINITION');INC
015360: 28 43 6F 64 65 29 3B 0D 0A 09 45 6E 74 65 72 49 (Code);...EnterI
015370: 64 28 27 57 72 69 74 65 53 74 72 69 6E 67 27 29 d('WriteString')
015380: 3B 49 4E 43 28 43 6F 64 65 29 3B 0D 0A 09 28 2A ;INC(Code);...(*
015390: 09 45 6E 74 65 72 20 74 61 62 20 63 6F 64 65 73 .Enter tab codes
0153A0: 2A 29 0D 0A 09 46 4F 52 20 69 3A 3D 31 20 54 4F *)...FOR i:=1 TO
0153B0: 20 36 20 44 4F 0D 0A 09 09 73 5B 69 2D 31 5D 3A 6 DO....s[i-1]:
0153C0: 3D 30 39 78 3B 0D 0A 09 09 50 75 74 49 64 3B 0D =09x;....PutId;.
0153D0: 0A 09 09 45 4E 44 3B 0D 0A 09 28 2A 09 65 6E 74 ...END;...(*.ent
0153E0: 65 72 20 73 70 61 63 65 20 73 65 71 75 65 6E 63 er space sequenc
0153F0: 65 73 2A 29 0D 0A 09 73 5B 30 5D 3A 3D 27 20 27 es*)...s[0]:=' '
015400: 3B 0D 0A 09 46 4F 52 20 69 3A 3D 32 20 54 4F 20 ;...FOR i:=2 TO
015410: 36 20 44 4F 0D 0A 09 09 73 5B 69 2D 31 5D 3A 3D 6 DO....s[i-1]:=
015420: 27 20 27 3B 0D 0A 09 09 50 75 74 49 64 3B 0D 0A ' ';....PutId;..
015430: 09 09 45 4E 44 3B 0D 0A 09 28 2A 09 45 6E 74 65 ..END;...(*.Ente
015440: 72 20 43 52 2F 4C 46 20 63 6F 64 65 2A 29 0D 0A r CR/LF code*)..
015450: 09 73 5B 30 5D 3A 3D 30 64 78 3B 0D 0A 09 73 5B .s[0]:=0dx;...s[
015460: 31 5D 3A 3D 30 61 78 3B 0D 0A 09 69 3A 3D 32 3B 1]:=0ax;...i:=2;
015470: 0D 0A 09 50 75 74 49 64 3B 0D 0A 09 46 4F 52 20 ...PutId;...FOR
015480: 69 3A 3D 33 20 54 4F 20 36 20 44 4F 0D 0A 09 09 i:=3 TO 6 DO....
015490: 73 5B 69 2D 31 5D 3A 3D 30 39 78 3B 0D 0A 09 09 s[i-1]:=09x;....
0154A0: 50 75 74 49 64 3B 0D 0A 09 09 45 4E 44 3B 0D 0A PutId;....END;..
0154B0: 0D 0A 09 45 4E 44 20 53 65 74 55 70 4E 61 6D 65 ...END SetUpName
0154C0: 73 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 s;..PROCEDURE Ge
0154D0: 74 43 68 61 72 3B 0D 0A 56 41 52 09 72 65 70 6C tChar;..VAR.repl
0154E0: 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 y:INTEGER;..BEGI
0154F0: 4E 0D 0A 09 49 46 20 49 6E 50 6F 73 3E 48 49 47 N...IF InPos>HIG
015500: 6E 6F 74 20 66 6F 75 6E 64 20 2A 29 0D 0A 56 41 not found *)..VA
015510: 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 R.i:CARDINAL;..B
015520: 45 47 49 4E 0D 0A 09 69 3A 3D 32 3B 0D 0A 09 4C EGIN...i:=2;...L
015530: 4F 4F 50 0D 0A 09 09 49 46 20 69 3E 53 6C 6F 74 OOP....IF i>Slot
015540: 73 20 54 48 45 4E 20 52 45 54 55 52 4E 20 30 20 s THEN RETURN 0
015550: 45 4E 44 3B 0D 0A 09 09 57 49 54 48 20 44 69 72 END;....WITH Dir
015560: 65 63 74 6F 72 79 5B 69 5D 20 44 4F 0D 0A 09 09 ectory[i] DO....
015570: 09 49 46 20 28 53 74 61 74 75 73 3D 30 29 20 41 .IF (Status=0) A
015580: 4E 44 20 28 42 61 73 65 4E 61 6D 65 3D 66 2E 66 ND (BaseName=f.f
015590: 63 62 66 6E 29 20 41 4E 44 20 28 45 78 74 3D 66 cbfn) AND (Ext=f
0155A0: 2E 66 63 62 66 74 29 20 54 48 45 4E 0D 0A 09 09 .fcbft) THEN....
0155B0: 09 09 52 45 54 55 52 4E 20 69 0D 0A 09 09 09 09 ..RETURN i......
0155C0: 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 END;.....END;...
0155D0: 09 49 4E 43 28 69 29 3B 0D 0A 09 09 45 4E 44 3B .INC(i);....END;
0155E0: 0D 0A 09 45 4E 44 20 46 69 6E 64 4E 61 6D 65 3B ...END FindName;
0155F0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 54 72 61 6E ..PROCEDURE Tran
015600: 73 66 65 72 28 56 41 52 20 46 72 6F 6D 2C 54 6F sfer(VAR From,To
015610: 3A 46 49 4C 45 3B 4D 61 78 53 65 63 74 6F 72 73 :FILE;MaxSectors
015620: 3A 43 41 52 44 49 4E 41 4C 29 3A 43 41 52 44 49 :CARDINAL):CARDI
015630: 4E 41 4C 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 NAL;..VAR.i,j:CA
015640: 52 44 49 4E 41 4C 3B 0D 0A 09 72 65 70 6C 79 3A RDINAL;...reply:
015650: 49 4E 54 45 47 45 52 3B 0D 0A 09 42 75 66 66 65 INTEGER;...Buffe
015660: 72 3A 41 52 52 41 59 5B 30 2E 2E 31 30 32 33 5D r:ARRAY[0..1023]
015670: 20 4F 46 20 42 59 54 45 3B 0D 0A 42 45 47 49 4E OF BYTE;..BEGIN
015680: 0D 0A 09 6A 3A 3D 30 3B 0D 0A 09 4C 4F 4F 50 0D ...j:=0;...LOOP.
015690: 0A 09 09 49 46 20 4D 61 78 53 65 63 74 6F 72 73 ...IF MaxSectors
0156A0: 3E 38 20 54 48 45 4E 20 69 3A 3D 38 2A 31 32 38 >8 THEN i:=8*128
0156B0: 20 45 4C 53 45 20 69 3A 3D 4D 61 78 53 65 63 74 ELSE i:=MaxSect
0156C0: 6F 72 73 2A 31 32 38 20 45 4E 44 3B 0D 0A 09 09 ors*128 END;....
0156D0: 53 65 71 52 65 61 64 42 6C 6F 63 6B 28 46 72 6F SeqReadBlock(Fro
0156E0: 6D 2C 41 44 52 28 42 75 66 66 65 72 29 2C 69 2C m,ADR(Buffer),i,
0156F0: 72 65 70 6C 79 29 3B 0D 0A 09 09 49 46 20 72 65 reply);....IF re
015700: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
015710: 12 00 01 00 02 09 52 E5 12 00 C9 02 00 00 00 02 ......R.........
015720: 12 00 C5 02 00 00 00 02 12 00 C1 02 00 00 00 02 ................
015730: 12 00 C6 02 00 00 00 02 12 00 C2 02 00 00 00 02 ................
015740: 12 00 C7 02 00 00 00 02 12 00 C3 02 00 00 00 02 ................
015750: 12 00 C8 02 00 00 00 02 12 00 C4 02 00 00 00 02 ................
015760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
015770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
015780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
015790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
015800: 69 6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 ile;..PROCEDURE
015810: 45 78 74 72 61 63 74 46 69 6C 65 28 66 6E 3A 41 ExtractFile(fn:A
015820: 52 52 41 59 20 4F 46 20 43 48 41 52 29 3B 0D 0A RRAY OF CHAR);..
015830: 56 41 52 09 66 3A 66 63 62 3B 0D 0A 09 69 3A 43 VAR.f:fcb;...i:C
015840: 41 52 44 49 4E 41 4C 3B 0D 0A 09 66 6F 3A 46 49 ARDINAL;...fo:FI
015850: 4C 45 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43 6F 6E LE;..BEGIN...Con
015860: 76 65 72 74 46 69 6C 65 4E 61 6D 65 28 66 2C 46 vertFileName(f,F
015870: 69 6C 65 4E 61 6D 65 28 66 6E 29 29 3B 0D 0A 09 ileName(fn));...
015880: 69 3A 3D 46 69 6E 64 4E 61 6D 65 28 66 29 3B 0D i:=FindName(f);.
015890: 0A 09 49 46 20 69 3D 30 20 54 48 45 4E 20 0D 0A ..IF i=0 THEN ..
0158A0: 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
0158B0: 43 6F 75 6C 64 20 6E 6F 74 20 66 69 6E 64 20 3A Could not find :
0158C0: 27 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 ');....WriteStri
0158D0: 6E 67 28 66 6E 29 3B 0D 0A 09 09 57 72 69 74 65 ng(fn);....Write
0158E0: 4C 6E 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 72 69 Ln...ELSE....Wri
0158F0: 74 65 53 74 72 69 6E 67 28 27 45 78 74 72 61 63 teString('Extrac
015900: 74 69 6E 67 20 27 29 3B 0D 0A 09 09 57 72 69 74 ting ');....Writ
015910: 65 53 74 72 69 6E 67 28 66 6E 29 3B 0D 0A 09 09 eString(fn);....
015920: 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 43 72 65 61 WriteLn;....Crea
015930: 74 65 28 66 6F 2C 46 69 6C 65 4E 61 6D 65 28 66 te(fo,FileName(f
015940: 6E 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 49 46 n),reply);....IF
015950: 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A reply<>0 THEN..
015960: 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
015970: 20 43 6F 75 6C 64 20 6E 6F 74 20 63 72 65 61 74 Could not creat
015980: 65 20 27 29 3B 0D 0A 09 09 09 57 72 69 74 65 53 e ');.....WriteS
015990: 74 72 69 6E 67 28 66 6E 29 3B 0D 0A 09 09 09 57 tring(fn);.....W
0159A0: 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 52 45 54 55 riteLn;.....RETU
0159B0: 52 4E 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 57 RN.....END;....W
0159C0: 49 54 48 20 44 69 72 65 63 74 6F 72 79 5B 69 5D ITH Directory[i]
0159D0: 20 44 4F 0D 0A 09 09 09 53 65 74 42 6C 6F 63 6B DO.....SetBlock
0159E0: 28 4C 69 62 2C 53 74 61 72 74 53 65 63 74 6F 72 (Lib,StartSector
0159F0: 29 3B 0D 0A 09 09 09 49 46 20 53 63 72 75 6E 63 );.....IF Scrunc
015A00: 53 45 0D 0A 09 09 09 09 57 72 69 74 65 4C 6E 3B SE......WriteLn;
015A10: 0D 0A 09 09 09 09 57 72 69 74 65 53 74 72 69 6E ......WriteStrin
015A20: 67 28 27 20 50 6C 65 61 73 65 20 65 6E 74 65 72 g(' Please enter
015A30: 20 59 65 73 20 6F 72 20 4E 6F 3A 27 29 3B 0D 0A Yes or No:');..
015A40: 09 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B ....END;....END;
015A50: 0D 0A 09 45 4E 44 20 59 65 73 3B 0D 0A 50 52 4F ...END Yes;..PRO
015A60: 43 45 44 55 52 45 20 47 65 74 53 6C 6F 74 43 6F CEDURE GetSlotCo
015A70: 75 6E 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 72 unt;..BEGIN...Wr
015A80: 69 74 65 53 74 72 69 6E 67 28 27 20 48 6F 77 20 iteString(' How
015A90: 6D 61 6E 79 20 73 6C 6F 74 73 20 3F 27 29 3B 0D many slots ?');.
015AA0: 0A 09 52 65 61 64 43 61 72 64 28 53 6C 6F 74 73 ..ReadCard(Slots
015AB0: 29 3B 0D 0A 09 49 46 20 53 6C 6F 74 73 3E 48 49 );...IF Slots>HI
015AC0: 47 48 28 44 69 72 65 63 74 6F 72 79 29 20 54 48 GH(Directory) TH
015AD0: 45 4E 0D 0A 09 09 57 72 69 74 65 43 61 72 64 28 EN....WriteCard(
015AE0: 48 49 47 48 28 44 69 72 65 63 74 6F 72 79 29 2C HIGH(Directory),
015AF0: 34 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 4);....WriteStri
015B00: 6E 67 28 27 20 69 73 20 6D 61 78 69 6D 75 6D 20 ng(' is maximum
015B10: 73 6C 6F 74 73 20 61 6C 6C 6F 77 65 64 20 62 79 slots allowed by
015B20: 20 74 68 69 73 20 70 72 6F 67 72 61 6D 27 29 3B this program');
015B30: 0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 ....WriteLn;....
015B40: 53 6C 6F 74 73 3A 3D 48 49 47 48 28 44 69 72 65 Slots:=HIGH(Dire
015B50: 63 74 6F 72 79 29 3B 0D 0A 09 09 45 4E 44 3B 0D ctory);....END;.
015B60: 0A 09 53 6C 6F 74 73 3A 3D 34 2A 28 28 53 6C 6F ..Slots:=4*((Slo
015B70: 74 73 2B 33 29 20 44 49 56 20 34 29 3B 0D 0A 09 ts+3) DIV 4);...
015B80: 49 46 20 53 6C 6F 74 73 3D 30 20 54 48 45 4E 20 IF Slots=0 THEN
015B90: 48 41 4C 54 20 45 4E 44 3B 0D 0A 09 57 72 69 74 HALT END;...Writ
015BA0: 65 43 61 72 64 28 53 6C 6F 74 73 2C 34 29 3B 0D eCard(Slots,4);.
015BB0: 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
015BC0: 53 6C 6F 74 73 20 61 6C 6C 6F 63 61 74 65 64 27 Slots allocated'
015BD0: 29 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 );...WriteLn;...
015BE0: 46 4F 52 20 69 3A 3D 31 20 54 4F 20 53 6C 6F 74 FOR i:=1 TO Slot
015BF0: 73 20 44 4F 20 0D 0A 09 09 57 49 54 48 20 44 69 s DO ....WITH Di
015C00: 69 2C 72 65 70 6C 79 29 3B 0D 0A 09 4F 75 74 50 i,reply);...OutP
015C10: 6F 73 3A 3D 30 3B 0D 0A 09 45 4E 44 20 46 6C 75 os:=0;...END Flu
015C20: 73 68 4F 75 74 3B 0D 0A 50 52 4F 43 45 44 55 52 shOut;..PROCEDUR
015C30: 45 20 50 75 74 43 68 61 72 28 63 68 3A 43 48 41 E PutChar(ch:CHA
015C40: 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 R);..BEGIN...IF
015C50: 4F 75 74 50 6F 73 3E 48 49 47 48 28 42 75 66 66 OutPos>HIGH(Buff
015C60: 65 72 49 6E 29 20 54 48 45 4E 20 46 6C 75 73 68 erIn) THEN Flush
015C70: 4F 75 74 20 45 4E 44 3B 0D 0A 09 42 75 66 66 65 Out END;...Buffe
015C80: 72 4F 75 74 5B 4F 75 74 50 6F 73 5D 3A 3D 63 68 rOut[OutPos]:=ch
015C90: 3B 0D 0A 09 49 4E 43 28 4F 75 74 50 6F 73 29 3B ;...INC(OutPos);
015CA0: 0D 0A 09 45 4E 44 20 50 75 74 43 68 61 72 3B 0D ...END PutChar;.
015CB0: 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 ...PROCEDURE Get
015CC0: 43 6F 64 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43 Code;..BEGIN...C
015CD0: 6F 64 65 3A 3D 30 3B 0D 0A 09 49 46 20 63 68 3C ode:=0;...IF ch<
015CE0: 27 20 27 20 54 48 45 4E 0D 0A 09 09 43 6F 64 65 ' ' THEN....Code
015CF0: 3A 3D 4F 52 44 28 63 68 29 2A 32 35 36 3B 0D 0A :=ORD(ch)*256;..
015D00: 09 09 47 65 74 43 68 61 72 3B 0D 0A 09 09 45 4E ..GetChar;....EN
015D10: 44 3B 0D 0A 09 43 6F 64 65 3A 3D 43 6F 64 65 2B D;...Code:=Code+
015D20: 4F 52 44 28 63 68 29 3B 0D 0A 09 45 4E 44 20 47 ORD(ch);...END G
015D30: 65 74 43 6F 64 65 3B 0D 0A 50 52 4F 43 45 44 55 etCode;..PROCEDU
015D40: 52 45 20 50 75 74 49 64 3B 0D 0A 56 41 52 09 69 RE PutId;..VAR.i
015D50: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 70 3A 50 :CARDINAL;...p:P
015D60: 4E 61 6D 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 Name;..BEGIN...G
015D70: 65 74 43 6F 64 65 3B 0D 0A 09 70 3A 3D 54 61 62 etCode;...p:=Tab
015D80: 6C 65 3B 0D 0A 09 57 48 49 4C 45 20 28 70 3C 3E le;...WHILE (p<>
015D90: 4E 49 4C 29 20 41 4E 44 20 28 70 5E 2E 43 6F 64 NIL) AND (p^.Cod
015DA0: 65 3C 3E 43 6F 64 65 29 20 44 4F 20 0D 0A 09 09 e<>Code) DO ....
015DB0: 70 3A 3D 70 5E 2E 4E 65 78 74 20 0D 0A 09 09 45 p:=p^.Next ....E
015DC0: 4E 44 3B 0D 0A 09 49 46 20 70 3D 4E 49 4C 20 54 ND;...IF p=NIL T
015DD0: 48 45 4E 20 0D 0A 09 09 57 72 69 74 65 53 74 72 HEN ....WriteStr
015DE0: 69 6E 67 28 27 20 65 72 72 6F 72 20 69 6E 20 50 ing(' error in P
015DF0: 75 74 49 64 27 29 3B 0D 0A 09 09 57 72 69 74 65 utId');....Write
015E00: 72 65 63 74 6F 72 79 5B 69 5D 20 44 4F 0D 0A 09 rectory[i] DO...
015E10: 09 09 53 74 61 74 75 73 3A 3D 30 66 66 68 3B 0D ..Status:=0ffh;.
015E20: 0A 09 09 09 42 61 73 65 4E 61 6D 65 3A 3D 27 20 ....BaseName:='
015E30: 20 20 20 20 20 20 20 27 3B 0D 0A 09 09 09 45 78 ';.....Ex
015E40: 74 3A 3D 27 20 20 20 27 3B 0D 0A 09 09 09 45 4E t:=' ';.....EN
015E50: 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 49 54 D;....END;...WIT
015E60: 48 20 44 69 72 65 63 74 6F 72 79 5B 31 5D 20 44 H Directory[1] D
015E70: 4F 0D 0A 09 09 53 74 61 74 75 73 3A 3D 30 3B 0D O....Status:=0;.
015E80: 0A 09 09 4C 65 6E 67 74 68 3A 3D 53 6C 6F 74 73 ...Length:=Slots
015E90: 20 44 49 56 20 34 3B 0D 0A 09 09 53 74 61 72 74 DIV 4;....Start
015EA0: 53 65 63 74 6F 72 3A 3D 30 3B 0D 0A 09 09 45 4E Sector:=0;....EN
015EB0: 44 3B 0D 0A 09 4E 65 78 74 53 65 63 74 6F 72 3A D;...NextSector:
015EC0: 3D 53 6C 6F 74 73 20 44 49 56 20 34 3B 0D 0A 09 =Slots DIV 4;...
015ED0: 45 4E 44 20 47 65 74 53 6C 6F 74 43 6F 75 6E 74 END GetSlotCount
015EE0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4F 70 65 ;..PROCEDURE Ope
015EF0: 6E 4C 69 62 72 61 72 79 3B 0D 0A 28 2A 09 6F 70 nLibrary;..(*.op
015F00: 65 6E 20 74 68 65 20 6C 69 62 72 61 72 79 20 66 en the library f
015F10: 69 6C 65 20 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 ile *)..BEGIN...
015F20: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 45 6E WriteString(' En
015F30: 74 65 72 20 6E 61 6D 65 20 6F 66 20 6C 69 62 72 ter name of libr
015F40: 61 72 79 20 66 69 6C 65 3A 27 29 3B 0D 0A 09 52 ary file:');...R
015F50: 65 61 64 53 74 72 69 6E 67 28 4C 69 62 4E 61 6D eadString(LibNam
015F60: 65 29 3B 0D 0A 09 4C 6F 6F 6B 75 70 28 4C 69 62 e);...Lookup(Lib
015F70: 2C 4C 69 62 4E 61 6D 65 2C 72 65 70 6C 79 29 3B ,LibName,reply);
015F80: 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54 ...IF reply<>0 T
015F90: 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 69 HEN....WriteStri
015FA0: 6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F 74 20 66 ng(' Could not f
015FB0: 69 6E 64 20 74 68 61 74 20 66 69 6C 65 20 2D 20 ind that file -
015FC0: 63 72 65 61 74 65 20 69 74 20 3F 27 29 3B 0D 0A create it ?');..
015FD0: 09 09 49 46 20 59 65 73 28 29 20 54 48 45 4E 0D ..IF Yes() THEN.
015FE0: 0A 09 09 09 43 72 65 61 74 65 28 4C 69 62 2C 4C ....Create(Lib,L
015FF0: 69 62 4E 61 6D 65 2C 72 65 70 6C 79 29 3B 0D 0A ibName,reply);..
016000: 43 61 72 64 28 43 6F 64 65 2C 34 29 3B 0D 0A 09 Card(Code,4);...
016010: 09 57 72 69 74 65 53 74 72 69 6E 67 28 54 61 62 .WriteString(Tab
016020: 6C 65 5E 2E 54 65 78 74 29 3B 0D 0A 09 09 57 72 le^.Text);....Wr
016030: 69 74 65 4C 6E 3B 0D 0A 09 09 52 45 54 55 52 4E iteLn;....RETURN
016040: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 69 3A 3D 30 3B ....END;...i:=0;
016050: 0D 0A 09 57 49 54 48 20 70 5E 20 44 4F 0D 0A 09 ...WITH p^ DO...
016060: 09 57 48 49 4C 45 20 54 65 78 74 5B 69 5D 3C 3E .WHILE Text[i]<>
016070: 30 78 20 44 4F 0D 0A 09 09 09 50 75 74 43 68 61 0x DO.....PutCha
016080: 72 28 54 65 78 74 5B 69 5D 29 3B 0D 0A 09 09 09 r(Text[i]);.....
016090: 49 4E 43 28 69 29 3B 0D 0A 09 09 09 45 4E 44 3B INC(i);.....END;
0160A0: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 50 ....END;...END P
0160B0: 75 74 49 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45 utId;..PROCEDURE
0160C0: 20 44 65 66 43 6F 64 65 3B 0D 0A 56 41 52 09 49 DefCode;..VAR.I
0160D0: 64 3A 49 64 65 6E 74 3B 0D 0A 09 69 3A 43 41 52 d:Ident;...i:CAR
0160E0: 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 DINAL;..BEGIN...
0160F0: 47 65 74 43 68 61 72 3B 0D 0A 09 49 46 20 63 68 GetChar;...IF ch
016100: 3D 30 78 20 54 48 45 4E 20 45 6F 66 3A 3D 54 52 =0x THEN Eof:=TR
016110: 55 45 3B 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A UE;RETURN END;..
016120: 09 69 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 63 .i:=0;...WHILE c
016130: 68 3C 3E 30 78 20 44 4F 0D 0A 09 09 49 64 5B 69 h<>0x DO....Id[i
016140: 5D 3A 3D 63 68 3B 0D 0A 09 09 50 75 74 43 68 61 ]:=ch;....PutCha
016150: 72 28 63 68 29 3B 0D 0A 09 09 47 65 74 43 68 61 r(ch);....GetCha
016160: 72 3B 0D 0A 09 09 49 4E 43 28 69 29 3B 0D 0A 09 r;....INC(i);...
016170: 09 45 4E 44 3B 0D 0A 09 49 64 5B 69 5D 3A 3D 30 .END;...Id[i]:=0
016180: 63 3B 0D 0A 09 47 65 74 43 68 61 72 3B 0D 0A 09 c;...GetChar;...
016190: 47 65 74 43 6F 64 65 3B 0D 0A 09 45 6E 74 65 72 GetCode;...Enter
0161A0: 49 64 28 49 64 29 3B 0D 0A 09 45 4E 44 20 44 65 Id(Id);...END De
0161B0: 66 43 6F 64 65 3B 0D 0A 09 09 0D 0A 42 45 47 49 fCode;......BEGI
0161C0: 4E 0D 0A 09 54 61 62 6C 65 3A 3D 4E 49 4C 3B 0D N...Table:=NIL;.
0161D0: 0A 09 53 65 74 55 70 4E 61 6D 65 73 3B 0D 0A 09 ..SetUpNames;...
0161E0: 6A 3A 3D 30 3B 0D 0A 09 49 6E 50 6F 73 3A 3D 48 j:=0;...InPos:=H
0161F0: 49 47 48 28 42 75 66 66 65 72 49 6E 29 2B 31 3B IGH(BufferIn)+1;
016200: 09 09 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54 ...IF reply<>0 T
016210: 48 45 4E 0D 0A 09 09 09 09 57 72 69 74 65 53 74 HEN......WriteSt
016220: 72 69 6E 67 28 27 20 63 6F 75 6C 64 20 6E 6F 74 ring(' could not
016230: 20 63 72 65 61 74 65 20 69 74 20 65 69 74 68 65 create it eithe
016240: 72 27 29 3B 0D 0A 09 09 09 09 57 72 69 74 65 4C r');......WriteL
016250: 6E 3B 0D 0A 09 09 09 09 48 41 4C 54 0D 0A 09 09 n;......HALT....
016260: 09 09 45 4E 44 3B 0D 0A 09 09 09 47 65 74 53 6C ..END;.....GetSl
016270: 6F 74 43 6F 75 6E 74 3B 0D 0A 09 09 45 4C 53 45 otCount;....ELSE
016280: 0D 0A 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 .....WriteString
016290: 28 27 20 72 75 6E 20 63 61 6E 63 65 6C 6C 65 64 (' run cancelled
0162A0: 27 29 3B 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B ');.....WriteLn;
0162B0: 0D 0A 09 09 09 48 41 4C 54 3B 0D 0A 09 09 09 45 .....HALT;.....E
0162C0: 4E 44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 52 65 ND;...ELSE....Re
0162D0: 61 64 42 6C 6F 63 6B 28 4C 69 62 2C 41 44 52 28 adBlock(Lib,ADR(
0162E0: 44 69 72 65 63 74 6F 72 79 29 2C 30 2C 53 49 5A Directory),0,SIZ
0162F0: 45 28 44 69 72 65 63 74 6F 72 79 29 2C 72 65 70 E(Directory),rep
016300: 6C 79 29 3B 0D 0A 09 09 53 6C 6F 74 73 3A 3D 34 ly);....Slots:=4
016310: 2A 44 69 72 65 63 74 6F 72 79 5B 31 5D 2E 4C 65 *Directory[1].Le
016320: 6E 67 74 68 3B 0D 0A 09 09 57 72 69 74 65 43 61 ngth;....WriteCa
016330: 72 64 28 53 6C 6F 74 73 2C 34 29 3B 57 72 69 74 rd(Slots,4);Writ
016340: 65 53 74 72 69 6E 67 28 27 20 73 6C 6F 74 73 20 eString(' slots
016350: 66 6F 75 6E 64 27 29 3B 57 72 69 74 65 4C 6E 3B found');WriteLn;
016360: 0D 0A 09 09 4E 65 78 74 53 65 63 74 6F 72 3A 3D ....NextSector:=
016370: 30 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 31 20 54 0;....FOR i:=1 T
016380: 4F 20 53 6C 6F 74 73 20 44 4F 0D 0A 09 09 09 57 O Slots DO.....W
016390: 49 54 48 20 44 69 72 65 63 74 6F 72 79 5B 69 5D ITH Directory[i]
0163A0: 20 44 4F 0D 0A 09 09 09 09 49 46 20 53 74 61 74 DO......IF Stat
0163B0: 75 73 3C 3E 30 66 66 68 20 54 48 45 4E 0D 0A 09 us<>0ffh THEN...
0163C0: 09 09 09 09 6A 3A 3D 4C 65 6E 67 74 68 2B 53 74 ....j:=Length+St
0163D0: 61 72 74 53 65 63 74 6F 72 3B 0D 0A 09 09 09 09 artSector;......
0163E0: 09 49 46 20 6A 3E 4E 65 78 74 53 65 63 74 6F 72 .IF j>NextSector
0163F0: 20 54 48 45 4E 20 4E 65 78 74 53 65 63 74 6F 72 THEN NextSector
016400: 0D 0A 09 4F 75 74 50 6F 73 3A 3D 30 3B 0D 0A 09 ...OutPos:=0;...
016410: 47 65 74 43 68 61 72 3B 0D 0A 09 45 6F 66 3A 3D GetChar;...Eof:=
016420: 46 41 4C 53 45 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 FALSE;...LOOP...
016430: 09 49 46 20 63 68 3D 30 78 20 54 48 45 4E 20 44 .IF ch=0x THEN D
016440: 65 66 43 6F 64 65 20 0D 0A 09 09 45 4C 53 49 46 efCode ....ELSIF
016450: 20 28 63 68 3E 30 37 66 78 29 20 4F 52 20 28 63 (ch>07fx) OR (c
016460: 68 3C 27 20 27 29 20 54 48 45 4E 20 50 75 74 49 h<' ') THEN PutI
016470: 64 0D 0A 09 09 45 4C 53 45 20 50 75 74 43 68 61 d....ELSE PutCha
016480: 72 28 63 68 29 20 45 4E 44 3B 0D 0A 09 09 47 65 r(ch) END;....Ge
016490: 74 43 68 61 72 3B 0D 0A 09 09 49 46 20 45 6F 66 tChar;....IF Eof
0164A0: 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D THEN EXIT END;.
0164B0: 0A 09 09 45 4E 44 3B 0D 0A 09 46 6C 75 73 68 4F ...END;...FlushO
0164C0: 75 74 3B 0D 0A 09 45 4E 44 20 55 6E 53 63 72 75 ut;...END UnScru
0164D0: 6E 63 68 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 nch;..PROCEDURE
0164E0: 44 6F 41 64 64 69 74 69 6F 6E 28 56 41 52 20 66 DoAddition(VAR f
0164F0: 3A 46 49 4C 45 3B 53 63 3A 42 4F 4F 4C 45 41 4E :FILE;Sc:BOOLEAN
016500: 29 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 44 );..VAR.i,j:CARD
016510: 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 69 INAL;..BEGIN...i
016520: 3A 3D 46 69 6E 64 4E 61 6D 65 28 66 2E 66 29 3B :=FindName(f.f);
016530: 0D 0A 09 49 46 20 69 3C 3E 30 20 54 48 45 4E 20 ...IF i<>0 THEN
016540: 44 69 72 65 63 74 6F 72 79 5B 69 5D 2E 53 74 61 Directory[i].Sta
016550: 74 75 73 3A 3D 30 66 66 68 20 45 4E 44 3B 0D 0A tus:=0ffh END;..
016560: 09 53 65 74 42 6C 6F 63 6B 28 4C 69 62 2C 4E 65 .SetBlock(Lib,Ne
016570: 78 74 53 65 63 74 6F 72 29 3B 0D 0A 09 6A 3A 3D xtSector);...j:=
016580: 4E 65 78 74 53 65 63 74 6F 72 3B 0D 0A 09 4E 65 NextSector;...Ne
016590: 78 74 53 65 63 74 6F 72 3A 3D 4E 65 78 74 53 65 xtSector:=NextSe
0165A0: 63 74 6F 72 2B 54 72 61 6E 73 66 65 72 28 66 2C ctor+Transfer(f,
0165B0: 4C 69 62 2C 36 35 35 33 35 29 3B 0D 0A 09 43 6C Lib,65535);...Cl
0165C0: 6F 73 65 28 66 29 3B 20 0D 0A 09 41 64 64 45 6E ose(f); ...AddEn
0165D0: 74 72 79 28 66 2E 66 2C 6A 2C 4E 65 78 74 53 65 try(f.f,j,NextSe
0165E0: 63 74 6F 72 2D 6A 2C 30 2C 30 2C 53 63 29 3B 0D ctor-j,0,0,Sc);.
0165F0: 0A 09 45 4E 44 20 44 6F 41 64 64 69 74 69 6F 6E ..END DoAddition
016600: 3A 3D 6A 20 45 4E 44 3B 0D 0A 09 09 09 09 09 45 :=j END;.......E
016610: 4E 44 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 ND;......END;...
016620: 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A ..END;....END;..
016630: 09 45 4E 44 20 4F 70 65 6E 4C 69 62 72 61 72 79 .END OpenLibrary
016640: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 6F ;..PROCEDURE Clo
016650: 73 65 4C 69 62 72 61 72 79 3B 0D 0A 42 45 47 49 seLibrary;..BEGI
016660: 4E 0D 0A 09 57 72 69 74 65 42 6C 6F 63 6B 28 4C N...WriteBlock(L
016670: 69 62 2C 41 44 52 28 44 69 72 65 63 74 6F 72 79 ib,ADR(Directory
016680: 29 2C 30 2C 31 32 38 2A 28 53 6C 6F 74 73 20 44 ),0,128*(Slots D
016690: 49 56 20 34 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 IV 4),reply);...
0166A0: 43 6C 6F 73 65 28 4C 69 62 29 3B 0D 0A 09 45 4E Close(Lib);...EN
0166B0: 44 20 43 6C 6F 73 65 4C 69 62 72 61 72 79 3B 0D D CloseLibrary;.
0166C0: 0A 50 52 4F 43 45 44 55 52 45 20 44 65 6C 65 74 .PROCEDURE Delet
0166D0: 65 46 69 6C 65 28 66 6E 3A 41 52 52 41 59 20 4F eFile(fn:ARRAY O
0166E0: 46 20 43 48 41 52 29 3B 0D 0A 56 41 52 09 66 3A F CHAR);..VAR.f:
0166F0: 66 63 62 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 fcb;...i:CARDINA
016700: 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43 6F 6E 76 L;..BEGIN...Conv
016710: 65 72 74 46 69 6C 65 4E 61 6D 65 28 66 2C 46 69 ertFileName(f,Fi
016720: 6C 65 4E 61 6D 65 28 66 6E 29 29 3B 0D 0A 09 69 leName(fn));...i
016730: 3A 3D 46 69 6E 64 4E 61 6D 65 28 66 29 3B 0D 0A :=FindName(f);..
016740: 09 49 46 20 69 3D 30 20 54 48 45 4E 20 0D 0A 09 .IF i=0 THEN ...
016750: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 43 .WriteString(' C
016760: 6F 75 6C 64 20 6E 6F 74 20 66 69 6E 64 20 3A 27 ould not find :'
016770: 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E );....WriteStrin
016780: 67 28 66 6E 29 3B 0D 0A 09 09 57 72 69 74 65 4C g(fn);....WriteL
016790: 6E 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 72 69 74 n...ELSE....Writ
0167A0: 65 53 74 72 69 6E 67 28 66 6E 29 3B 0D 0A 09 09 eString(fn);....
0167B0: 57 72 69 74 65 53 74 72 69 6E 67 28 66 6E 29 3B WriteString(fn);
0167C0: 0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 ....WriteLn;....
0167D0: 44 69 72 65 63 74 6F 72 79 5B 69 5D 2E 53 74 61 Directory[i].Sta
0167E0: 74 75 73 3A 3D 30 66 66 68 3B 0D 0A 09 09 45 4E tus:=0ffh;....EN
0167F0: 44 3B 0D 0A 09 45 4E 44 20 44 65 6C 65 74 65 46 D;...END DeleteF
016800: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 41 64 64 ;..PROCEDURE Add
016810: 46 69 6C 65 28 66 6E 3A 41 52 52 41 59 20 4F 46 File(fn:ARRAY OF
016820: 20 43 48 41 52 3B 53 63 3A 42 4F 4F 4C 45 41 4E CHAR;Sc:BOOLEAN
016830: 29 3B 0D 0A 28 2A 09 63 6F 70 79 20 61 20 66 69 );..(*.copy a fi
016840: 6C 65 20 69 6E 74 6F 20 74 68 65 20 63 75 72 72 le into the curr
016850: 65 6E 74 20 6C 69 62 72 61 72 79 2A 29 0D 0A 56 ent library*)..V
016860: 41 52 09 66 3A 46 49 4C 45 3B 0D 0A 09 69 2C 6A AR.f:FILE;...i,j
016870: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 42 75 66 :CARDINAL;...Buf
016880: 66 65 72 3A 41 52 52 41 59 5B 30 2E 2E 31 30 32 fer:ARRAY[0..102
016890: 33 5D 20 4F 46 20 42 59 54 45 3B 0D 0A 42 45 47 3] OF BYTE;..BEG
0168A0: 49 4E 0D 0A 09 4C 6F 6F 6B 75 70 28 66 2C 46 69 IN...Lookup(f,Fi
0168B0: 6C 65 4E 61 6D 65 28 66 6E 29 2C 72 65 70 6C 79 leName(fn),reply
0168C0: 29 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 );...IF reply<>0
0168D0: 20 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 THEN....WriteSt
0168E0: 72 69 6E 67 28 27 46 69 6C 65 20 3A 27 29 3B 0D ring('File :');.
0168F0: 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 66 ...WriteString(f
016900: 6E 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 n);....WriteStri
016910: 6E 67 28 27 20 6E 6F 74 20 66 6F 75 6E 64 27 29 ng(' not found')
016920: 3B 0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 ;....WriteLn;...
016930: 09 52 45 54 55 52 4E 3B 0D 0A 09 09 45 4E 44 3B .RETURN;....END;
016940: 0D 0A 09 44 6F 41 64 64 69 74 69 6F 6E 28 66 2C ...DoAddition(f,
016950: 53 63 29 3B 0D 0A 09 45 4E 44 20 41 64 64 46 69 Sc);...END AddFi
016960: 6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 59 le;..PROCEDURE Y
016970: 65 73 28 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 56 es():BOOLEAN;..V
016980: 41 52 09 73 3A 41 52 52 41 59 5B 31 2E 2E 33 5D AR.s:ARRAY[1..3]
016990: 20 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E OF CHAR;..BEGIN
0169A0: 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 52 65 61 64 53 ...LOOP....ReadS
0169B0: 74 72 69 6E 67 28 73 29 3B 0D 0A 09 09 43 41 53 tring(s);....CAS
0169C0: 45 20 43 41 50 28 73 5B 31 5D 29 20 4F 46 0D 0A E CAP(s[1]) OF..
0169D0: 09 09 09 27 59 27 3A 52 45 54 55 52 4E 20 54 52 ...'Y':RETURN TR
0169E0: 55 45 7C 0D 0A 09 09 09 27 4E 27 3A 52 45 54 55 UE|.....'N':RETU
0169F0: 52 4E 20 46 41 4C 53 45 7C 0D 0A 09 09 09 45 4C RN FALSE|.....EL
016A00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
016A10: 13 00 01 00 02 09 52 E5 13 00 C9 02 00 00 00 02 ......R.........
016A20: 13 00 C5 02 00 00 00 02 13 00 C1 02 00 00 00 02 ................
016A30: 13 00 C6 02 00 00 00 02 13 00 C2 02 00 00 00 02 ................
016A40: 13 00 C7 02 00 00 00 02 13 00 C3 02 00 00 00 02 ................
016A50: 13 00 C8 02 00 00 00 02 13 00 C4 02 00 00 00 02 ................
016A60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016A70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016A80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016A90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016B00: 66 2C 09 28 2A 20 41 20 63 68 61 72 61 63 74 65 f,.(* A characte
016B10: 72 20 66 72 6F 6D 20 61 20 73 65 74 2A 29 0D 0A r from a set*)..
016B20: 09 09 20 20 41 6C 74 65 72 6E 61 74 69 76 65 73 .. Alternatives
016B30: 2C 09 28 2A 20 4F 6E 65 20 6F 66 20 74 77 6F 20 ,.(* One of two
016B40: 61 6C 74 65 72 6E 61 74 69 76 65 73 2A 29 0D 0A alternatives*)..
016B50: 09 09 20 20 43 6F 6E 63 61 74 2C 09 28 2A 20 43 .. Concat,.(* C
016B60: 6F 6E 63 61 74 65 6E 61 74 65 20 74 77 6F 20 70 oncatenate two p
016B70: 61 74 74 65 72 6E 73 2A 29 0D 0A 09 09 20 20 52 atterns*).... R
016B80: 69 67 68 74 4C 69 6D 69 74 29 3B 09 28 2A 20 4D ightLimit);.(* M
016B90: 61 6B 65 20 73 75 72 65 20 61 74 20 72 69 67 68 ake sure at righ
016BA0: 74 20 62 6F 75 6E 64 61 72 79 2A 29 0D 0A 0D 0A t boundary*)....
016BB0: 09 43 68 61 72 53 65 74 3D 53 45 54 20 4F 46 20 .CharSet=SET OF
016BC0: 43 48 41 52 3B 0D 0A 0D 0A 09 50 4E 6F 64 65 3D CHAR;.....PNode=
016BD0: 50 4F 49 4E 54 45 52 20 54 4F 20 4E 6F 64 65 3B POINTER TO Node;
016BE0: 0D 0A 0D 0A 09 50 53 74 61 74 75 73 3D 50 4F 49 .....PStatus=POI
016BF0: 4E 54 45 52 20 54 4F 20 53 74 61 74 65 3B 0D 0A NTER TO State;..
016C00: 0D 0A 28 2A 09 49 66 20 61 20 6D 61 74 63 68 20 ..(*.If a match
016C10: 69 73 20 73 75 63 63 65 73 73 66 75 6C 2C 20 74 is successful, t
016C20: 68 65 20 6D 61 74 63 68 20 69 73 20 72 65 74 75 he match is retu
016C30: 72 6E 65 64 20 62 79 20 61 20 74 72 65 65 20 6F rned by a tree o
016C40: 66 0D 0A 09 73 74 61 74 65 73 2E 20 45 61 63 68 f...states. Each
016C50: 20 6E 6F 64 65 20 69 6E 20 74 68 65 20 74 72 65 node in the tre
016C60: 65 20 67 69 76 65 73 20 74 68 65 20 73 74 61 72 e gives the star
016C70: 74 20 70 6F 73 69 74 69 6F 6E 20 6F 66 20 74 68 t position of th
016C80: 65 0D 0A 09 6D 61 74 63 68 20 61 6E 64 20 74 68 e...match and th
016C90: 65 20 70 6F 73 69 74 69 6F 6E 20 6F 66 20 74 68 e position of th
016CA0: 65 20 6E 65 78 74 20 63 68 61 72 61 63 74 65 72 e next character
016CB0: 20 66 6F 6C 6C 6F 77 69 6E 67 20 74 68 65 20 6D following the m
016CC0: 61 74 63 68 2E 0D 0A 0D 0A 09 49 74 20 61 6C 73 atch......It als
016CD0: 6F 20 63 6F 6E 74 61 69 6E 73 20 61 20 70 6F 69 o contains a poi
016CE0: 6E 74 65 72 20 74 6F 20 74 68 65 20 70 61 74 74 nter to the patt
016CF0: 65 72 6E 20 6E 6F 64 65 20 77 68 69 63 68 20 77 ern node which w
016D00: 09 09 09 57 49 54 48 20 44 69 72 65 63 74 6F 72 ...WITH Director
016D10: 79 5B 6A 5D 20 44 4F 0D 0A 09 09 09 09 49 46 20 y[j] DO......IF
016D20: 53 74 61 74 75 73 3C 3E 30 66 66 68 20 54 48 45 Status<>0ffh THE
016D30: 4E 0D 0A 09 09 09 09 20 20 20 20 66 2E 66 3A 3D N...... f.f:=
016D40: 66 63 62 28 44 69 72 65 63 74 6F 72 79 5B 6A 5D fcb(Directory[j]
016D50: 29 3B 0D 0A 09 09 09 09 20 20 20 20 53 65 74 55 );...... SetU
016D60: 70 46 63 62 28 66 29 3B 0D 0A 09 09 09 09 20 20 pFcb(f);......
016D70: 20 20 66 2E 66 2E 66 63 62 64 6E 3A 3D 4F 52 44 f.f.fcbdn:=ORD
016D80: 28 46 4E 61 6D 65 5B 69 5D 29 2D 4F 52 44 28 27 (FName[i])-ORD('
016D90: 41 27 29 2B 31 3B 0D 0A 09 09 09 09 20 20 20 20 A')+1;......
016DA0: 6B 3A 3D 42 44 4F 53 28 6F 70 6E 66 63 2C 41 44 k:=BDOS(opnfc,AD
016DB0: 52 28 66 2E 66 29 29 3B 0D 0A 09 09 09 09 20 20 R(f.f));......
016DC0: 20 20 49 46 20 6B 3C 3E 30 66 66 68 20 54 48 45 IF k<>0ffh THE
016DD0: 4E 0D 0A 09 09 09 09 09 57 72 69 74 65 53 74 72 N.......WriteStr
016DE0: 69 6E 67 28 27 20 55 70 64 61 74 69 6E 67 3A 27 ing(' Updating:'
016DF0: 29 3B 0D 0A 09 09 09 09 09 44 69 73 70 6C 61 79 );.......Display
016E00: 4E 61 6D 65 28 49 6E 64 65 78 52 65 63 6F 72 64 Name(IndexRecord
016E10: 28 66 2E 66 29 29 3B 0D 0A 09 09 09 09 09 57 72 (f.f));.......Wr
016E20: 69 74 65 4C 6E 3B 09 0D 0A 09 09 09 09 09 44 6F iteLn;........Do
016E30: 41 64 64 69 74 69 6F 6E 28 66 2C 53 63 72 75 6E Addition(f,Scrun
016E40: 63 68 65 64 29 3B 0D 0A 09 09 09 09 09 45 4E 44 ched);.......END
016E50: 3B 0D 0A 09 09 09 09 20 20 20 20 45 4E 44 3B 0D ;...... END;.
016E60: 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E .....END;.....EN
016E70: 44 3B 0D 0A 09 09 49 4E 43 28 69 29 3B 0D 0A 09 D;....INC(i);...
016E80: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 55 70 64 61 .END;...END Upda
016E90: 74 65 41 6C 6C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 teAll;..BEGIN...
016EA0: 4F 70 65 6E 4C 69 62 72 61 72 79 3B 0D 0A 09 57 OpenLibrary;...W
016EB0: 72 69 74 65 53 74 72 69 6E 67 28 27 20 43 6F 6D riteString(' Com
016EC0: 6D 61 6E 64 73 20 61 72 65 3A 09 46 20 2D 20 46 mands are:.F - F
016ED0: 69 6E 69 73 68 27 29 3B 57 72 69 74 65 4C 6E 3B inish');WriteLn;
016EE0: 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
016EF0: 09 09 41 20 2D 20 41 64 64 20 6F 72 20 75 70 64 ..A - Add or upd
016F00: 68 65 64 20 54 48 45 4E 20 55 6E 53 63 72 75 6E hed THEN UnScrun
016F10: 63 68 28 4C 69 62 2C 66 6F 29 3B 0D 0A 09 09 09 ch(Lib,fo);.....
016F20: 45 4C 53 45 20 69 3A 3D 54 72 61 6E 73 66 65 72 ELSE i:=Transfer
016F30: 28 4C 69 62 2C 66 6F 2C 4C 65 6E 67 74 68 29 20 (Lib,fo,Length)
016F40: 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 END;.....END;...
016F50: 09 43 6C 6F 73 65 28 66 6F 29 3B 0D 0A 09 09 45 .Close(fo);....E
016F60: 4E 44 3B 0D 0A 09 45 4E 44 20 45 78 74 72 61 63 ND;...END Extrac
016F70: 74 46 69 6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52 tFile;..PROCEDUR
016F80: 45 20 44 69 73 70 6C 61 79 4E 61 6D 65 28 20 64 E DisplayName( d
016F90: 3A 49 6E 64 65 78 52 65 63 6F 72 64 29 3B 0D 0A :IndexRecord);..
016FA0: 56 41 52 09 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D VAR.j:CARDINAL;.
016FB0: 0A 42 45 47 49 4E 0D 0A 09 6A 3A 3D 31 3B 0D 0A .BEGIN...j:=1;..
016FC0: 09 57 49 54 48 20 64 20 44 4F 0D 0A 09 09 57 48 .WITH d DO....WH
016FD0: 49 4C 45 20 28 6A 3C 3D 38 29 20 41 4E 44 20 28 ILE (j<=8) AND (
016FE0: 42 61 73 65 4E 61 6D 65 5B 6A 5D 3C 3E 27 20 27 BaseName[j]<>' '
016FF0: 29 20 44 4F 0D 0A 09 09 09 57 72 69 74 65 28 42 ) DO.....Write(B
017000: 61 73 65 4E 61 6D 65 5B 6A 5D 29 3B 0D 0A 09 09 aseName[j]);....
017010: 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E 44 .INC(j);.....END
017020: 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 ;....WriteString
017030: 28 27 2E 27 29 3B 0D 0A 09 09 57 72 69 74 65 53 ('.');....WriteS
017040: 74 72 69 6E 67 28 45 78 74 29 3B 0D 0A 09 09 57 tring(Ext);....W
017050: 48 49 4C 45 20 6A 3C 3D 38 20 44 4F 20 0D 0A 09 HILE j<=8 DO ...
017060: 09 09 57 72 69 74 65 28 27 20 27 29 3B 0D 0A 09 ..Write(' ');...
017070: 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E ..INC(j);.....EN
017080: 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 D;....END;...END
017090: 20 44 69 73 70 6C 61 79 4E 61 6D 65 3B 0D 0A 0D DisplayName;...
0170A0: 0A 50 52 4F 43 45 44 55 52 45 20 4C 69 73 74 4E .PROCEDURE ListN
0170B0: 61 6D 65 73 3B 0D 0A 56 41 52 09 69 2C 6A 2C 6B ames;..VAR.i,j,k
0170C0: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 :CARDINAL;..BEGI
0170D0: 4E 0D 0A 09 6B 3A 3D 30 3B 0D 0A 09 46 4F 52 20 N...k:=0;...FOR
0170E0: 69 3A 3D 32 20 54 4F 20 53 6C 6F 74 73 20 44 4F i:=2 TO Slots DO
0170F0: 0D 0A 09 09 57 49 54 48 20 44 69 72 65 63 74 6F ....WITH Directo
017100: 61 74 65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A ate');WriteLn;..
017110: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 .WriteString('..
017120: 44 20 2D 20 44 65 6C 65 74 65 27 29 3B 57 72 69 D - Delete');Wri
017130: 74 65 4C 6E 3B 20 0D 0A 09 57 72 69 74 65 53 74 teLn; ...WriteSt
017140: 72 69 6E 67 28 27 09 09 45 20 2D 20 45 78 74 72 ring('..E - Extr
017150: 61 63 74 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A act');WriteLn;..
017160: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 .WriteString('..
017170: 4C 20 2D 20 4C 69 73 74 20 66 69 6C 65 73 27 29 L - List files')
017180: 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 ;WriteLn;...Writ
017190: 65 53 74 72 69 6E 67 28 27 09 09 52 20 2D 20 52 eString('..R - R
0171A0: 65 6F 72 67 61 6E 69 7A 65 27 29 3B 57 72 69 74 eorganize');Writ
0171B0: 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 eLn;...WriteStri
0171C0: 6E 67 28 27 09 09 55 20 2D 20 55 70 64 61 74 65 ng('..U - Update
0171D0: 20 41 6C 6C 27 29 3B 57 72 69 74 65 4C 6E 3B 0D All');WriteLn;.
0171E0: 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 4C 4F 4F ..WriteLn;...LOO
0171F0: 50 0D 0A 09 09 52 65 61 64 43 6F 6D 6D 61 6E 64 P....ReadCommand
017200: 3B 0D 0A 09 09 43 41 53 45 20 43 6F 6D 6D 61 6E ;....CASE Comman
017210: 64 43 48 20 4F 46 20 0D 0A 09 09 09 27 46 27 3A dCH OF .....'F':
017220: 43 6C 6F 73 65 4C 69 62 72 61 72 79 3B 45 58 49 CloseLibrary;EXI
017230: 54 7C 0D 0A 09 09 09 27 41 27 3A 41 64 64 46 69 T|.....'A':AddFi
017240: 6C 65 28 46 4E 61 6D 65 2C 46 41 4C 53 45 29 7C le(FName,FALSE)|
017250: 0D 0A 09 09 09 27 53 27 3A 41 64 64 46 69 6C 65 .....'S':AddFile
017260: 28 46 4E 61 6D 65 2C 54 52 55 45 29 7C 0D 0A 09 (FName,TRUE)|...
017270: 09 09 27 44 27 3A 44 65 6C 65 74 65 46 69 6C 65 ..'D':DeleteFile
017280: 28 46 4E 61 6D 65 29 7C 0D 0A 09 09 09 27 45 27 (FName)|.....'E'
017290: 3A 45 78 74 72 61 63 74 46 69 6C 65 28 46 4E 61 :ExtractFile(FNa
0172A0: 6D 65 29 7C 0D 0A 09 09 09 27 4C 27 3A 4C 69 73 me)|.....'L':Lis
0172B0: 74 4E 61 6D 65 73 7C 0D 0A 09 09 09 27 55 27 3A tNames|.....'U':
0172C0: 55 70 64 61 74 65 41 6C 6C 7C 0D 0A 09 09 09 27 UpdateAll|.....'
0172D0: 52 27 3A 52 65 6F 72 67 3B 09 0D 0A 09 09 09 45 R':Reorg;......E
0172E0: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E ND;....END;...EN
0172F0: 44 20 4D 79 4C 55 2E 0D 0A 20 1A 0F FD 02 00 00 D MyLU... ......
017300: 72 79 5B 69 5D 20 44 4F 0D 0A 09 09 09 49 46 20 ry[i] DO.....IF
017310: 53 74 61 74 75 73 3C 3E 30 66 66 68 20 54 48 45 Status<>0ffh THE
017320: 4E 0D 0A 09 09 09 09 44 69 73 70 6C 61 79 4E 61 N......DisplayNa
017330: 6D 65 28 44 69 72 65 63 74 6F 72 79 5B 69 5D 29 me(Directory[i])
017340: 3B 0D 0A 09 09 09 09 57 72 69 74 65 43 61 72 64 ;......WriteCard
017350: 28 4C 65 6E 67 74 68 2A 31 32 38 2C 35 29 3B 0D (Length*128,5);.
017360: 0A 09 09 09 09 49 4E 43 28 6B 29 3B 0D 0A 09 09 .....INC(k);....
017370: 09 09 49 46 20 6B 3D 34 20 54 48 45 4E 20 57 72 ..IF k=4 THEN Wr
017380: 69 74 65 4C 6E 3B 6B 3A 3D 30 0D 0A 09 09 09 09 iteLn;k:=0......
017390: 45 4C 53 45 20 57 72 69 74 65 53 74 72 69 6E 67 ELSE WriteString
0173A0: 28 27 20 20 27 29 20 45 4E 44 3B 0D 0A 09 09 09 (' ') END;.....
0173B0: 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A .END;.....END;..
0173C0: 09 09 45 4E 44 3B 0D 0A 09 49 46 20 6B 3C 3E 30 ..END;...IF k<>0
0173D0: 20 54 48 45 4E 20 57 72 69 74 65 4C 6E 20 45 4E THEN WriteLn EN
0173E0: 44 3B 0D 0A 09 45 4E 44 20 4C 69 73 74 4E 61 6D D;...END ListNam
0173F0: 65 73 3B 20 0D 0A 50 52 4F 43 45 44 55 52 45 20 es; ..PROCEDURE
017400: 53 65 74 55 70 46 63 62 28 56 41 52 20 66 3A 46 SetUpFcb(VAR f:F
017410: 49 4C 45 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 20 ILE);..BEGIN...
017420: 20 20 20 66 2E 64 65 76 74 79 70 65 3A 3D 64 69 f.devtype:=di
017430: 73 63 3B 0D 0A 09 20 20 20 20 66 2E 65 6F 66 3A sc;... f.eof:
017440: 3D 46 41 4C 53 45 3B 0D 0A 09 20 20 20 20 57 49 =FALSE;... WI
017450: 54 48 20 66 2E 66 20 44 4F 0D 0A 09 09 66 63 62 TH f.f DO....fcb
017460: 65 78 3A 3D 30 3B 0D 0A 09 09 66 63 62 63 72 3A ex:=0;....fcbcr:
017470: 3D 30 3B 0D 0A 09 09 63 70 6D 72 65 73 3A 3D 30 =0;....cpmres:=0
017480: 3B 0D 0A 09 09 66 63 62 72 63 3A 3D 30 3B 0D 0A ;....fcbrc:=0;..
017490: 09 09 66 63 62 72 6E 2E 6C 6F 77 6F 72 64 65 72 ..fcbrn.loworder
0174A0: 3A 3D 30 3B 0D 0A 09 09 66 63 62 72 6E 2E 68 69 :=0;....fcbrn.hi
0174B0: 67 68 6F 72 64 65 72 3A 3D 30 3B 0D 0A 09 09 45 ghorder:=0;....E
0174C0: 4E 44 3B 0D 0A 09 45 4E 44 20 53 65 74 55 70 46 ND;...END SetUpF
0174D0: 63 62 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 cb;..PROCEDURE R
0174E0: 65 6F 72 67 3B 0D 0A 56 41 52 09 69 2C 6A 2C 6B eorg;..VAR.i,j,k
0174F0: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 4F 6C 64 :CARDINAL;...Old
017500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0175A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0175B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0175C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0175D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0175E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0175F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0176A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0176B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0176C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0176D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0176E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0176F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
017700: 44 69 72 3A 49 6E 64 65 78 3B 0D 0A 09 4F 6C 64 Dir:Index;...Old
017710: 53 6C 6F 74 73 3A 43 41 52 44 49 4E 41 4C 3B 0D Slots:CARDINAL;.
017720: 0A 09 4F 6C 64 4C 69 62 3A 46 49 4C 45 3B 0D 0A ..OldLib:FILE;..
017730: 42 45 47 49 4E 0D 0A 09 4F 6C 64 4C 69 62 3A 3D BEGIN...OldLib:=
017740: 4C 69 62 3B 0D 0A 09 43 6C 6F 73 65 28 4C 69 62 Lib;...Close(Lib
017750: 29 3B 0D 0A 09 4D 61 6B 65 42 41 4B 28 4C 69 62 );...MakeBAK(Lib
017760: 2C 72 65 70 6C 79 29 3B 0D 0A 09 4F 6C 64 44 69 ,reply);...OldDi
017770: 72 3A 3D 44 69 72 65 63 74 6F 72 79 3B 0D 0A 09 r:=Directory;...
017780: 4F 6C 64 53 6C 6F 74 73 3A 3D 53 6C 6F 74 73 3B OldSlots:=Slots;
017790: 0D 0A 09 53 65 74 55 70 46 63 62 28 4F 6C 64 4C ...SetUpFcb(OldL
0177A0: 69 62 29 3B 0D 0A 09 4F 6C 64 4C 69 62 2E 66 2E ib);...OldLib.f.
0177B0: 66 63 62 66 74 3A 3D 27 42 41 4B 27 3B 0D 0A 09 fcbft:='BAK';...
0177C0: 6B 3A 3D 42 44 4F 53 28 6F 70 6E 66 63 2C 41 44 k:=BDOS(opnfc,AD
0177D0: 52 28 4F 6C 64 4C 69 62 2E 66 29 29 3B 0D 0A 09 R(OldLib.f));...
0177E0: 43 72 65 61 74 65 28 4C 69 62 2C 4C 69 62 4E 61 Create(Lib,LibNa
0177F0: 6D 65 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 20 me,reply);...IF
017800: 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A 09 reply<>0 THEN...
017810: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 43 .WriteString(' C
017820: 6F 75 6C 64 20 6E 6F 74 20 63 72 65 61 74 65 20 ould not create
017830: 6E 65 77 20 6C 69 62 72 61 72 79 27 29 3B 0D 0A new library');..
017840: 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 52 45 ..WriteLn;....RE
017850: 54 55 52 4E 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 TURN....END;...W
017860: 72 69 74 65 53 74 72 69 6E 67 28 27 20 4F 6C 64 riteString(' Old
017870: 20 6C 69 62 72 61 72 79 20 68 61 64 20 27 29 3B library had ');
017880: 57 72 69 74 65 43 61 72 64 28 4F 6C 64 53 6C 6F WriteCard(OldSlo
017890: 74 73 2C 34 29 3B 0D 0A 09 57 72 69 74 65 53 74 ts,4);...WriteSt
0178A0: 72 69 6E 67 28 27 20 73 6C 6F 74 73 27 29 3B 57 ring(' slots');W
0178B0: 72 69 74 65 4C 6E 3B 0D 0A 09 47 65 74 53 6C 6F riteLn;...GetSlo
0178C0: 74 43 6F 75 6E 74 3B 0D 0A 09 46 4F 52 20 69 3A tCount;...FOR i:
0178D0: 3D 32 20 54 4F 20 4F 6C 64 53 6C 6F 74 73 20 44 =2 TO OldSlots D
0178E0: 4F 0D 0A 09 09 57 49 54 48 20 4F 6C 64 44 69 72 O....WITH OldDir
0178F0: 5B 69 5D 20 44 4F 0D 0A 09 09 09 49 46 20 53 74 [i] DO.....IF St
017900: 44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C DEFINITION MODUL
017910: 45 20 50 61 74 74 65 72 6E 3B 0D 0A 0D 0A 28 2A E Pattern;....(*
017920: 09 54 68 69 73 20 69 73 20 61 20 70 61 74 74 65 .This is a patte
017930: 72 6E 20 6D 61 74 63 68 69 6E 67 20 6D 6F 64 75 rn matching modu
017940: 6C 65 0D 0A 0D 0A 09 44 61 76 65 20 4D 6F 6F 72 le.....Dave Moor
017950: 65 2C 20 46 54 4C 20 4D 6F 64 75 6C 61 2D 32 0D e, FTL Modula-2.
017960: 0A 0D 0A 09 54 6F 20 6D 61 74 63 68 20 61 20 70 ....To match a p
017970: 61 74 74 65 72 6E 20 77 69 74 68 20 74 68 69 73 attern with this
017980: 20 6D 6F 64 75 6C 65 2C 20 79 6F 75 20 6D 75 73 module, you mus
017990: 74 20 63 72 65 61 74 65 20 61 0D 0A 09 70 61 74 t create a...pat
0179A0: 74 65 72 6E 20 64 65 73 63 72 69 70 74 69 6F 6E tern description
0179B0: 20 77 69 74 68 20 74 68 65 20 22 43 72 65 61 74 with the "Creat
0179C0: 65 22 20 66 75 6E 63 74 69 6F 6E 73 2C 20 61 6E e" functions, an
0179D0: 64 20 74 68 65 6E 20 0D 0A 09 75 73 65 20 74 68 d then ...use th
0179E0: 65 20 4D 61 74 63 68 50 61 74 74 65 72 6E 20 66 e MatchPattern f
0179F0: 75 6E 63 74 69 6F 6E 2E 0D 0A 0D 0A 09 54 68 69 unction......Thi
017A00: 73 20 66 75 6E 63 74 69 6F 6E 20 72 65 74 75 72 s function retur
017A10: 6E 73 20 61 20 74 72 65 65 20 64 65 73 63 72 69 ns a tree descri
017A20: 62 69 6E 67 20 74 68 65 20 6D 61 74 63 68 2C 20 bing the match,
017A30: 69 66 20 73 75 63 63 65 73 73 66 75 6C 2C 0D 0A if successful,..
017A40: 09 6F 72 20 4E 49 4C 20 69 66 20 6E 6F 74 20 73 .or NIL if not s
017A50: 75 63 63 65 73 73 66 75 6C 2E 0D 0A 0D 0A 09 0D uccessful.......
017A60: 0A 2A 29 0D 0A 54 59 50 45 0D 0A 0D 0A 28 2A 09 .*)..TYPE....(*.
017A70: 54 68 65 20 70 72 6F 67 72 61 6D 20 6D 61 74 63 The program matc
017A80: 68 65 73 20 61 20 74 72 65 65 20 72 65 70 72 65 hes a tree repre
017A90: 73 65 6E 74 69 6E 67 20 61 20 70 61 74 74 65 72 senting a patter
017AA0: 6E 0D 0A 09 74 68 65 72 65 20 61 72 65 20 61 20 n...there are a
017AB0: 76 61 72 69 65 74 79 20 6F 66 20 6E 6F 64 65 20 variety of node
017AC0: 74 79 70 65 73 2A 29 0D 0A 09 0D 0A 09 4E 6F 64 types*)......Nod
017AD0: 65 54 79 70 65 3D 28 53 74 72 69 6E 67 2C 20 09 eType=(String, .
017AE0: 28 2A 20 41 20 73 74 72 69 6E 67 20 6F 66 20 63 (* A string of c
017AF0: 68 61 72 73 2A 29 0D 0A 09 09 20 20 41 6E 79 4F hars*).... AnyO
017B00: 61 74 75 73 3C 3E 30 66 66 68 20 54 48 45 4E 0D atus<>0ffh THEN.
017B10: 0A 09 09 09 09 53 65 74 42 6C 6F 63 6B 28 4F 6C .....SetBlock(Ol
017B20: 64 4C 69 62 2C 53 74 61 72 74 53 65 63 74 6F 72 dLib,StartSector
017B30: 29 3B 0D 0A 09 09 09 09 53 65 74 42 6C 6F 63 6B );......SetBlock
017B40: 28 4C 69 62 2C 4E 65 78 74 53 65 63 74 6F 72 29 (Lib,NextSector)
017B50: 3B 0D 0A 09 09 09 09 6B 3A 3D 4E 65 78 74 53 65 ;......k:=NextSe
017B60: 63 74 6F 72 3B 0D 0A 09 09 09 09 6A 3A 3D 54 72 ctor;......j:=Tr
017B70: 61 6E 73 66 65 72 28 4F 6C 64 4C 69 62 2C 4C 69 ansfer(OldLib,Li
017B80: 62 2C 4C 65 6E 67 74 68 29 3B 0D 0A 09 09 09 09 b,Length);......
017B90: 41 64 64 45 6E 74 72 79 28 66 63 62 28 4F 6C 64 AddEntry(fcb(Old
017BA0: 44 69 72 5B 69 5D 29 2C 6B 2C 6A 2C 44 61 74 65 Dir[i]),k,j,Date
017BB0: 2C 54 69 6D 65 2C 53 63 72 75 6E 63 68 65 64 29 ,Time,Scrunched)
017BC0: 3B 0D 0A 09 09 09 09 4E 65 78 74 53 65 63 74 6F ;......NextSecto
017BD0: 72 3A 3D 4E 65 78 74 53 65 63 74 6F 72 2B 6A 3B r:=NextSector+j;
017BE0: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 ......END;.....E
017BF0: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E ND;....END;...EN
017C00: 44 20 52 65 6F 72 67 3B 0D 0A 50 52 4F 43 45 44 D Reorg;..PROCED
017C10: 55 52 45 20 55 70 64 61 74 65 41 6C 6C 3B 0D 0A URE UpdateAll;..
017C20: 56 41 52 09 69 2C 6A 2C 6B 3A 43 41 52 44 49 4E VAR.i,j,k:CARDIN
017C30: 41 4C 3B 0D 0A 09 66 3A 46 49 4C 45 3B 0D 0A 42 AL;...f:FILE;..B
017C40: 45 47 49 4E 0D 0A 09 69 3A 3D 30 3B 49 46 20 46 EGIN...i:=0;IF F
017C50: 4E 61 6D 65 5B 30 5D 3D 27 20 27 20 54 48 45 4E Name[0]=' ' THEN
017C60: 20 46 4E 61 6D 65 5B 30 5D 3A 3D 27 40 27 20 45 FName[0]:='@' E
017C70: 4E 44 3B 0D 0A 09 57 48 49 4C 45 20 28 69 3C 3D ND;...WHILE (i<=
017C80: 48 49 47 48 28 46 4E 61 6D 65 29 29 41 4E 44 20 HIGH(FName))AND
017C90: 28 46 4E 61 6D 65 5B 69 5D 3C 3E 27 20 27 29 20 (FName[i]<>' ')
017CA0: 44 4F 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E DO....WriteStrin
017CB0: 67 28 27 20 53 65 61 72 63 68 69 6E 67 20 64 69 g(' Searching di
017CC0: 73 6B 20 27 29 3B 0D 0A 09 09 57 72 69 74 65 28 sk ');....Write(
017CD0: 46 4E 61 6D 65 5B 69 5D 29 3B 0D 0A 09 09 57 72 FName[i]);....Wr
017CE0: 69 74 65 4C 6E 3B 0D 0A 09 09 46 4F 52 20 6A 3A iteLn;....FOR j:
017CF0: 3D 32 20 54 4F 20 53 6C 6F 74 73 20 44 4F 0D 0A =2 TO Slots DO..
017D00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
017D10: 14 00 01 00 02 09 52 E5 14 00 C9 02 00 00 00 02 ......R.........
017D20: 14 00 C5 02 00 00 00 02 14 00 C1 02 00 00 00 02 ................
017D30: 14 00 C6 02 00 00 00 02 14 00 C2 02 00 00 00 02 ................
017D40: 14 00 C7 02 00 00 00 02 14 00 C3 02 00 00 00 02 ................
017D50: 14 00 C8 02 00 00 00 02 14 00 C4 02 00 00 00 02 ................
017D60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017D70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017D80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017D90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017E00: 20 4F 46 20 43 48 41 52 29 3A 50 53 74 61 74 75 OF CHAR):PStatu
017E10: 73 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 68 20 61 s;....(*.Match a
017E20: 20 50 61 74 74 65 72 6E 20 0D 0A 09 70 20 69 73 Pattern ...p is
017E30: 20 74 68 65 20 72 6F 6F 74 20 6F 66 20 74 68 65 the root of the
017E40: 20 70 61 74 74 65 72 6E 20 74 6F 20 6D 61 74 63 pattern to matc
017E50: 68 0D 0A 09 73 20 69 73 20 74 68 65 20 74 65 78 h...s is the tex
017E60: 74 20 74 6F 20 6D 61 74 63 68 0D 0A 0D 0A 09 54 t to match.....T
017E70: 68 65 20 66 75 6E 63 74 69 6F 6E 20 72 65 74 75 he function retu
017E80: 72 6E 73 20 61 20 74 72 65 65 20 69 66 20 74 68 rns a tree if th
017E90: 65 20 6D 61 74 63 68 20 69 73 20 73 75 63 63 65 e match is succe
017EA0: 73 73 66 75 6C 2E 0D 0A 09 49 74 20 72 65 74 75 ssful....It retu
017EB0: 72 6E 73 20 4E 49 4C 20 69 66 20 74 68 65 20 6D rns NIL if the m
017EC0: 61 74 63 68 20 66 61 69 6C 73 2E 0D 0A 0D 0A 09 atch fails......
017ED0: 54 68 65 20 6D 61 74 63 68 20 6D 75 73 74 20 73 The match must s
017EE0: 74 61 72 74 20 61 74 20 74 68 65 20 62 65 67 69 tart at the begi
017EF0: 6E 6E 69 6E 67 20 6F 66 20 74 68 65 20 73 74 72 nning of the str
017F00: 69 6E 67 2C 20 62 75 74 20 69 74 0D 0A 09 6E 65 ing, but it...ne
017F10: 65 64 20 6E 6F 74 20 6D 61 74 63 68 20 74 68 65 ed not match the
017F20: 20 65 6E 74 69 72 65 20 73 74 72 69 6E 67 20 2D entire string -
017F30: 20 74 68 69 73 20 63 61 6E 20 62 65 20 66 6F 72 this can be for
017F40: 63 65 64 20 62 79 20 75 73 69 6E 67 0D 0A 09 61 ced by using...a
017F50: 20 6C 69 6D 69 74 20 6E 6F 64 65 2E 20 0D 0A 0D limit node. ...
017F60: 0A 09 49 66 20 79 6F 75 20 77 61 6E 74 20 74 6F ..If you want to
017F70: 20 75 6E 2D 61 6E 63 68 6F 72 20 74 68 65 20 6D un-anchor the m
017F80: 61 74 63 68 20 66 72 6F 6D 20 74 68 65 20 62 65 atch from the be
017F90: 67 69 6E 6E 69 6E 67 20 6F 66 20 74 68 65 0D 0A ginning of the..
017FA0: 09 73 74 72 69 6E 67 2C 20 75 73 65 20 61 20 70 .string, use a p
017FB0: 61 74 74 65 72 6E 3A 0D 0A 0D 0A 09 09 43 72 65 attern:......Cre
017FC0: 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 28 0D 0A ateConcatNode(..
017FD0: 09 09 09 43 72 65 61 74 65 41 6E 79 4F 66 4E 6F ...CreateAnyOfNo
017FE0: 64 65 28 43 68 61 72 53 65 74 7B 30 78 2E 2E 30 de(CharSet{0x..0
017FF0: 66 66 78 7D 2C 30 2C 36 34 30 30 30 2C 46 41 4C ffx},0,64000,FAL
018000: 0A 09 4E 45 57 28 45 29 3B 0D 0A 09 74 65 6D 70 ..NEW(E);...temp
018010: 3A 3D 43 72 65 61 74 65 41 6C 74 4E 6F 64 65 28 :=CreateAltNode(
018020: 0D 0A 09 09 20 20 20 43 72 65 61 74 65 53 74 72 .... CreateStr
018030: 69 6E 67 4E 6F 64 65 28 27 61 27 29 2C 0D 0A 09 ingNode('a'),...
018040: 09 20 20 20 43 72 65 61 74 65 43 6F 6E 63 61 74 . CreateConcat
018050: 4E 6F 64 65 28 0D 0A 09 09 09 43 72 65 61 74 65 Node(.....Create
018060: 53 74 72 69 6E 67 4E 6F 64 65 28 27 61 27 29 2C StringNode('a'),
018070: 0D 0A 09 09 09 45 29 0D 0A 09 09 20 20 20 29 3B .....E).... );
018080: 0D 0A 09 45 5E 3A 3D 74 65 6D 70 5E 3B 0D 0A 0D ...E^:=temp^;...
018090: 0A 09 57 65 20 68 61 76 65 20 61 6C 6C 6F 63 61 ..We have alloca
0180A0: 74 65 64 20 22 45 22 20 66 69 72 73 74 20 73 6F ted "E" first so
0180B0: 20 74 68 61 74 20 69 74 20 63 61 6E 20 62 65 20 that it can be
0180C0: 75 73 65 64 20 69 6E 20 74 68 65 0D 0A 09 66 75 used in the...fu
0180D0: 6E 63 74 69 6F 6E 2E 20 57 65 20 63 6F 75 6C 64 nction. We could
0180E0: 20 6E 6F 74 20 73 69 6D 70 6C 79 20 61 73 73 69 not simply assi
0180F0: 67 6E 20 74 68 65 20 70 6F 69 6E 74 65 72 20 72 gn the pointer r
018100: 65 74 75 72 6E 65 64 20 62 79 0D 0A 09 43 72 65 eturned by...Cre
018110: 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 20 74 6F ateConcatNode to
018120: 20 45 2C 20 73 69 6E 63 65 20 74 68 65 6E 20 74 E, since then t
018130: 68 65 20 45 20 75 73 65 64 20 69 6E 20 74 68 65 he E used in the
018140: 20 66 75 6E 63 74 69 6F 6E 0D 0A 09 77 6F 75 6C function...woul
018150: 64 20 62 65 20 70 6F 69 6E 74 69 6E 67 20 65 6C d be pointing el
018160: 73 65 77 68 65 72 65 2E 20 49 6E 73 74 65 61 64 sewhere. Instead
018170: 2C 20 77 65 20 6D 75 73 74 20 63 6F 70 79 20 74 , we must copy t
018180: 68 65 20 63 6F 6E 74 65 6E 74 73 0D 0A 09 6F 66 he contents...of
018190: 20 74 65 6D 70 20 69 6E 74 6F 20 45 20 73 6F 20 temp into E so
0181A0: 74 68 61 74 20 74 68 65 20 70 6F 69 6E 74 65 72 that the pointer
0181B0: 73 20 72 65 6D 61 69 6E 20 63 6F 72 72 65 63 74 s remain correct
0181C0: 2E 0D 0A 0D 0A 09 54 68 69 73 20 70 61 74 74 65 ......This patte
0181D0: 72 6E 20 22 45 22 20 69 73 20 6E 6F 74 20 79 65 rn "E" is not ye
0181E0: 74 20 72 65 61 64 79 20 74 6F 20 62 65 20 75 73 t ready to be us
0181F0: 65 64 2C 20 73 69 6E 63 65 20 74 68 65 20 70 61 ed, since the pa
018200: 61 73 20 6D 61 74 63 68 65 64 2E 0D 0A 0D 0A 09 as matched......
018210: 54 68 69 73 20 69 6E 66 6F 72 6D 61 74 69 6F 6E This information
018220: 20 68 61 73 20 74 6F 20 62 65 20 6B 65 70 74 20 has to be kept
018230: 73 65 70 61 72 61 74 65 6C 79 20 66 72 6F 6D 20 separately from
018240: 74 68 65 20 70 61 74 74 65 72 6E 20 64 65 63 72 the pattern decr
018250: 69 70 74 69 6F 6E 0D 0A 09 6E 6F 64 65 20 62 65 iption...node be
018260: 63 61 75 73 65 20 61 20 67 69 76 65 6E 20 70 61 cause a given pa
018270: 74 74 65 72 6E 20 6E 6F 64 65 20 63 61 6E 20 6D ttern node can m
018280: 61 74 63 68 20 73 65 76 65 72 61 6C 20 74 69 6D atch several tim
018290: 65 73 20 69 6E 20 61 20 67 69 76 65 6E 0D 0A 09 es in a given...
0182A0: 70 61 74 74 65 72 6E 2C 20 65 69 74 68 65 72 20 pattern, either
0182B0: 62 65 63 61 75 73 65 20 6F 66 20 72 65 63 75 72 because of recur
0182C0: 73 69 6F 6E 2C 20 6F 72 20 62 65 63 61 75 73 65 sion, or because
0182D0: 20 79 6F 75 20 68 61 76 65 20 63 68 6F 73 65 6E you have chosen
0182E0: 20 74 6F 0D 0A 09 73 61 76 65 20 73 70 61 63 65 to...save space
0182F0: 20 62 79 20 75 73 69 6E 67 20 61 20 73 69 6E 67 by using a sing
018300: 6C 65 20 6E 6F 64 65 20 69 6E 20 73 65 76 65 72 le node in sever
018310: 61 6C 20 64 69 66 66 65 72 65 6E 74 20 70 6C 61 al different pla
018320: 63 65 73 20 69 6E 20 61 20 0D 0A 09 70 61 74 74 ces in a ...patt
018330: 65 72 6E 2E 0D 0A 0D 0A 2A 29 09 0D 0A 0D 0A 09 ern.....*)......
018340: 53 74 61 74 65 3D 52 45 43 4F 52 44 0D 0A 09 09 State=RECORD....
018350: 53 74 61 74 75 73 3A 43 41 52 44 49 4E 41 4C 3B Status:CARDINAL;
018360: 09 28 2A 09 53 74 61 74 75 73 20 69 73 20 61 20 .(*.Status is a
018370: 73 74 61 74 75 73 20 66 69 65 6C 64 20 75 73 65 status field use
018380: 64 0D 0A 09 09 09 09 09 09 66 6F 72 20 62 61 63 d........for bac
018390: 6B 2D 74 72 61 63 6B 69 6E 67 20 62 79 20 74 68 k-tracking by th
0183A0: 65 20 6E 6F 64 65 0D 0A 09 09 09 09 09 09 63 6C e node........cl
0183B0: 61 73 73 65 73 20 41 6C 74 65 72 6E 61 74 69 76 asses Alternativ
0183C0: 65 73 20 61 6E 64 20 0D 0A 09 09 09 09 09 09 41 es and ........A
0183D0: 6E 79 4F 66 0D 0A 0D 0A 09 09 09 09 09 09 57 68 nyOf..........Wh
0183E0: 65 6E 20 77 65 20 61 72 65 20 62 61 63 6B 74 72 en we are backtr
0183F0: 61 63 6B 69 6E 67 20 74 6F 20 74 72 79 20 0D 0A acking to try ..
018400: 74 74 65 72 6E 0D 0A 09 77 69 6C 6C 20 6F 6E 6C ttern...will onl
018410: 79 20 6D 61 74 63 68 20 74 68 65 20 66 69 72 73 y match the firs
018420: 74 20 22 61 22 20 61 6E 64 20 74 68 65 6E 20 72 t "a" and then r
018430: 65 74 75 72 6E 2E 20 57 65 20 6D 75 73 74 20 61 eturn. We must a
018440: 64 64 20 61 0D 0A 09 22 4C 69 6D 69 74 4E 6F 64 dd a..."LimitNod
018450: 65 22 20 74 6F 20 65 6E 73 75 72 65 20 74 68 61 e" to ensure tha
018460: 74 20 61 6C 6C 20 74 68 65 20 73 74 72 69 6E 67 t all the string
018470: 20 69 73 20 6D 61 74 63 68 65 64 0D 0A 0D 0A 09 is matched.....
018480: 45 31 3A 3D 43 72 65 61 74 65 43 6F 6E 63 61 74 E1:=CreateConcat
018490: 4E 6F 64 65 28 45 2C 43 72 65 61 74 65 4C 69 6D Node(E,CreateLim
0184A0: 69 74 4E 6F 64 65 28 29 29 3B 0D 0A 0D 0A 09 45 itNode());.....E
0184B0: 31 20 77 69 6C 6C 20 65 6E 73 75 72 65 20 74 68 1 will ensure th
0184C0: 61 74 20 61 6C 6C 20 6F 66 20 74 68 65 20 73 74 at all of the st
0184D0: 72 69 6E 67 20 69 73 20 6D 61 74 63 68 65 64 0D ring is matched.
0184E0: 0A 2A 29 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 .*)..PROCEDURE C
0184F0: 72 65 61 74 65 53 74 72 69 6E 67 4E 6F 64 65 28 reateStringNode(
018500: 73 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 29 s:ARRAY OF CHAR)
018510: 3A 50 4E 6F 64 65 3B 0D 0A 0D 0A 28 2A 09 43 72 :PNode;....(*.Cr
018520: 65 61 74 65 20 61 20 6E 6F 64 65 20 77 68 69 63 eate a node whic
018530: 68 20 6D 61 74 63 68 65 73 20 61 20 66 69 78 65 h matches a fixe
018540: 64 20 73 74 72 69 6E 67 0D 0A 0D 0A 09 73 20 69 d string.....s i
018550: 73 20 74 68 65 20 73 74 72 69 6E 67 20 74 6F 20 s the string to
018560: 6D 61 74 63 68 2A 29 0D 0A 0D 0A 50 52 4F 43 45 match*)....PROCE
018570: 44 55 52 45 20 43 72 65 61 74 65 41 6C 74 4E 6F DURE CreateAltNo
018580: 64 65 28 70 2C 71 3A 50 4E 6F 64 65 29 3A 50 4E de(p,q:PNode):PN
018590: 6F 64 65 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 68 ode;....(*.Match
0185A0: 20 65 69 74 68 65 72 20 70 20 6F 72 20 71 20 2A either p or q *
0185B0: 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 )....PROCEDURE C
0185C0: 72 65 61 74 65 41 6E 79 4F 66 4E 6F 64 65 28 73 reateAnyOfNode(s
0185D0: 3A 43 68 61 72 53 65 74 3B 6D 69 6E 2C 6D 61 78 :CharSet;min,max
0185E0: 3A 43 41 52 44 49 4E 41 4C 3B 4C 6F 6E 67 65 73 :CARDINAL;Longes
0185F0: 74 3A 42 4F 4F 4C 45 41 4E 29 3A 50 4E 6F 64 65 t:BOOLEAN):PNode
018600: 09 09 09 09 09 09 61 6E 20 61 6C 74 65 72 6E 61 ......an alterna
018610: 74 69 76 65 20 6D 61 74 63 68 20 6F 72 20 61 20 tive match or a
018620: 6C 6F 6E 67 65 72 0D 0A 09 09 09 09 09 09 6F 6E longer........on
018630: 65 2C 20 74 68 69 73 20 76 61 6C 75 65 20 69 73 e, this value is
018640: 20 69 6E 63 72 65 6D 65 6E 74 65 64 0D 0A 0D 0A incremented....
018650: 09 09 09 09 09 09 57 68 65 6E 20 77 65 20 61 72 ......When we ar
018660: 65 20 74 72 61 63 6B 69 6E 67 20 66 6F 72 77 61 e tracking forwa
018670: 72 64 2C 20 0D 0A 09 09 09 09 09 09 69 74 20 69 rd, ........it i
018680: 73 20 69 6E 69 74 69 61 6C 69 7A 65 64 2A 29 0D s initialized*).
018690: 0A 0D 0A 09 09 4D 61 74 63 68 65 64 41 74 3A 43 .....MatchedAt:C
0186A0: 41 52 44 49 4E 41 4C 3B 09 09 28 2A 20 50 6F 73 ARDINAL;..(* Pos
0186B0: 69 74 69 6F 6E 20 61 74 20 77 68 69 63 68 20 74 ition at which t
0186C0: 68 69 73 20 0D 0A 09 09 09 09 09 09 20 20 20 6E his ........ n
0186D0: 6F 64 65 20 6D 61 74 63 68 65 64 2A 29 0D 0A 09 ode matched*)...
0186E0: 09 50 61 74 74 65 72 6E 4E 6F 64 65 3A 50 4E 6F .PatternNode:PNo
0186F0: 64 65 3B 09 09 28 2A 20 50 6F 69 6E 74 65 72 20 de;..(* Pointer
018700: 74 6F 20 70 61 74 74 65 72 6E 20 6E 6F 64 65 20 to pattern node
018710: 0D 0A 09 09 09 09 09 09 20 20 20 6D 61 74 63 68 ........ match
018720: 65 64 20 62 79 20 74 68 69 73 20 73 74 61 74 75 ed by this statu
018730: 73 20 6E 6F 64 65 2A 29 0D 0A 09 09 4D 61 74 63 s node*)....Matc
018740: 68 65 64 54 6F 3A 43 41 52 44 49 4E 41 4C 3B 09 hedTo:CARDINAL;.
018750: 09 28 2A 20 50 6F 73 69 74 69 6F 6E 20 6F 66 20 .(* Position of
018760: 63 68 61 72 61 63 74 65 72 20 61 66 74 65 72 0D character after.
018770: 0A 09 09 09 09 09 09 20 20 20 6C 61 73 74 20 63 ....... last c
018780: 68 61 72 61 63 74 65 72 20 6D 61 74 63 68 65 64 haracter matched
018790: 20 62 79 20 0D 0A 09 09 09 09 09 09 20 20 20 70 by ........ p
0187A0: 61 74 74 65 72 6E 2A 29 0D 0A 09 09 4C 65 66 74 attern*)....Left
0187B0: 2C 52 69 67 68 74 3A 50 53 74 61 74 75 73 3B 09 ,Right:PStatus;.
0187C0: 09 28 2A 20 50 6F 69 6E 74 65 72 20 74 6F 20 73 .(* Pointer to s
0187D0: 75 62 73 74 61 74 75 73 20 74 72 65 65 0D 0A 09 ubstatus tree...
0187E0: 09 09 09 09 20 20 20 20 20 09 20 20 20 4C 65 66 .... . Lef
0187F0: 74 20 69 73 20 75 73 65 64 20 66 6F 72 20 41 6C t is used for Al
018800: 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 68 20 61 6E ;....(*.Match an
018810: 79 20 63 68 61 72 61 63 74 65 72 20 69 6E 20 73 y character in s
018820: 65 74 20 22 73 22 0D 0A 0D 0A 09 6D 69 6E 20 61 et "s".....min a
018830: 6E 64 20 6D 61 78 20 61 72 65 20 74 68 65 20 6D nd max are the m
018840: 69 6E 69 6D 75 6D 20 61 6E 64 20 6D 61 78 69 6D inimum and maxim
018850: 75 6D 20 63 68 61 72 61 63 74 65 72 73 20 74 6F um characters to
018860: 20 6D 61 74 63 68 0D 0A 0D 0A 09 4E 6F 72 6D 61 match.....Norma
018870: 6C 6C 79 2C 20 74 68 65 20 66 69 72 73 74 20 61 lly, the first a
018880: 74 74 65 6D 70 74 20 6D 61 74 63 68 65 73 20 74 ttempt matches t
018890: 68 65 20 73 68 6F 72 74 65 73 74 20 61 63 63 65 he shortest acce
0188A0: 70 74 61 62 6C 65 20 6E 75 6D 62 65 72 0D 0A 09 ptable number...
0188B0: 6F 66 20 63 68 61 72 61 63 74 65 72 73 2E 20 49 of characters. I
0188C0: 6E 20 74 68 69 73 20 63 61 73 65 2C 20 74 6F 20 n this case, to
0188D0: 6D 61 74 63 68 20 6D 6F 72 65 20 63 68 61 72 61 match more chara
0188E0: 63 74 65 72 73 2C 20 62 61 63 6B 74 72 61 63 6B cters, backtrack
0188F0: 69 6E 67 0D 0A 09 6D 75 73 74 20 62 65 20 70 65 ing...must be pe
018900: 72 66 6F 72 6D 65 64 2E 0D 0A 0D 0A 09 49 66 20 rformed......If
018910: 79 6F 75 20 6B 6E 6F 77 20 74 68 61 74 20 6D 61 you know that ma
018920: 74 63 68 69 6E 67 20 74 68 65 20 6D 6F 73 74 20 tching the most
018930: 70 6F 73 73 69 62 6C 65 20 63 68 61 72 61 63 74 possible charact
018940: 65 72 73 20 77 69 6C 6C 20 6E 6F 74 20 63 61 75 ers will not cau
018950: 73 65 0D 0A 09 74 68 65 20 70 61 74 74 65 72 6E se...the pattern
018960: 20 74 6F 20 66 61 69 6C 20 28 66 6F 72 20 65 78 to fail (for ex
018970: 61 6D 70 6C 65 2C 20 77 68 65 6E 20 6D 61 74 63 ample, when matc
018980: 68 69 6E 67 20 69 64 65 6E 74 69 66 69 65 72 73 hing identifiers
018990: 20 69 6E 20 0D 0A 09 4D 6F 64 75 6C 61 2D 32 2C in ...Modula-2,
0189A0: 20 69 6E 20 77 68 69 63 68 20 69 64 65 6E 74 69 in which identi
0189B0: 66 69 65 72 73 20 63 61 6E 6E 6F 74 20 72 75 6E fiers cannot run
0189C0: 20 74 6F 67 65 74 68 65 72 2C 20 74 68 65 6E 20 together, then
0189D0: 73 70 65 63 69 66 79 69 6E 67 0D 0A 09 54 52 55 specifying...TRU
0189E0: 45 20 66 6F 72 20 4C 6F 6E 67 65 73 74 20 77 69 E for Longest wi
0189F0: 6C 6C 20 70 72 6F 64 75 63 65 20 61 20 66 61 73 ll produce a fas
018A00: 74 65 72 6E 61 74 69 76 65 73 0D 0A 09 09 09 09 ternatives......
018A10: 09 09 20 20 20 42 6F 74 68 20 4C 65 66 74 20 61 .. Both Left a
018A20: 6E 64 20 52 69 67 68 74 20 61 72 65 20 75 73 65 nd Right are use
018A30: 64 0D 0A 09 09 09 09 09 09 20 20 20 66 6F 72 20 d........ for
018A40: 43 6F 6E 63 61 6E 74 65 6E 61 74 69 6F 6E 2A 29 Concantenation*)
018A50: 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 4E 6F 64 ....END;.....Nod
018A60: 65 3D 52 45 43 4F 52 44 0D 0A 09 09 43 41 53 45 e=RECORD....CASE
018A70: 20 4E 54 79 70 65 3A 4E 6F 64 65 54 79 70 65 20 NType:NodeType
018A80: 4F 46 0D 0A 09 09 09 53 74 72 69 6E 67 3A 0D 0A OF.....String:..
018A90: 09 09 09 09 54 65 78 74 4C 65 6E 3A 43 41 52 44 ....TextLen:CARD
018AA0: 49 4E 41 4C 3B 0D 0A 09 09 09 09 54 65 78 74 3A INAL;......Text:
018AB0: 41 52 52 41 59 5B 30 2E 2E 30 5D 20 4F 46 20 43 ARRAY[0..0] OF C
018AC0: 48 41 52 3B 0D 0A 09 09 09 09 7C 0D 0A 09 09 09 HAR;......|.....
018AD0: 41 6E 79 4F 66 3A 0D 0A 09 09 09 09 4D 61 74 63 AnyOf:......Matc
018AE0: 68 3A 43 68 61 72 53 65 74 3B 0D 0A 09 09 09 09 h:CharSet;......
018AF0: 4D 69 6E 43 6F 75 6E 74 2C 4D 61 78 43 6F 75 6E MinCount,MaxCoun
018B00: 74 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 09 t:CARDINAL;.....
018B10: 09 46 61 73 74 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A .Fast:BOOLEAN;..
018B20: 09 09 09 09 7C 0D 0A 09 09 09 41 6C 74 65 72 6E ....|.....Altern
018B30: 61 74 69 76 65 73 2C 43 6F 6E 63 61 74 3A 0D 0A atives,Concat:..
018B40: 09 09 09 09 46 69 72 73 74 2C 53 65 63 6F 6E 64 ....First,Second
018B50: 3A 50 4E 6F 64 65 3B 0D 0A 09 09 09 09 28 2A 20 :PNode;......(*
018B60: 69 66 20 65 69 74 68 65 72 20 69 73 20 6E 75 6C if either is nul
018B70: 6C 2C 20 69 74 20 6D 61 74 63 68 65 73 20 74 68 l, it matches th
018B80: 65 20 6E 75 6C 6C 20 73 74 72 69 6E 67 2A 29 0D e null string*).
018B90: 0A 09 09 09 09 7C 0D 0A 09 09 09 45 4E 44 3B 0D .....|.....END;.
018BA0: 0A 09 09 09 09 0D 0A 09 09 45 4E 44 3B 09 0D 0A .........END;...
018BB0: 0D 0A 28 2A 09 54 68 65 20 66 6F 6C 6C 6F 77 69 ..(*.The followi
018BC0: 6E 67 20 66 75 6E 63 74 69 6F 6E 73 20 72 65 74 ng functions ret
018BD0: 75 72 6E 20 61 20 6E 6F 64 65 20 72 65 70 72 65 urn a node repre
018BE0: 73 65 6E 74 69 6E 67 20 61 20 70 61 74 74 65 72 senting a patter
018BF0: 6E 20 74 6F 20 62 65 0D 0A 09 6D 61 74 63 68 65 n to be...matche
018C00: 74 65 72 20 70 61 74 74 65 72 6E 20 6D 61 74 63 ter pattern matc
018C10: 68 0D 0A 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 h..*)....PROCEDU
018C20: 52 45 20 43 72 65 61 74 65 43 6F 6E 63 61 74 4E RE CreateConcatN
018C30: 6F 64 65 28 70 2C 71 3A 50 4E 6F 64 65 29 3A 50 ode(p,q:PNode):P
018C40: 4E 6F 64 65 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 Node;....(*.Matc
018C50: 68 20 70 61 74 74 65 72 6E 20 70 20 66 6F 6C 6C h pattern p foll
018C60: 6F 77 65 64 20 62 79 20 70 61 74 74 65 72 6E 20 owed by pattern
018C70: 71 20 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 q *)....PROCEDUR
018C80: 45 20 43 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 E CreateLimitNod
018C90: 65 28 29 3A 50 4E 6F 64 65 3B 0D 0A 0D 0A 28 2A e():PNode;....(*
018CA0: 09 4D 61 74 63 68 20 6F 6E 6C 79 20 69 66 20 61 .Match only if a
018CB0: 6C 6C 20 6F 66 20 74 68 65 20 73 74 72 69 6E 67 ll of the string
018CC0: 20 68 61 73 20 62 65 65 6E 20 6D 61 74 63 68 65 has been matche
018CD0: 64 20 0D 0A 0D 0A 09 42 65 77 61 72 65 3A 0D 0A d .....Beware:..
018CE0: 0D 0A 09 09 44 6F 20 6E 6F 74 20 75 73 65 20 61 ....Do not use a
018CF0: 20 6C 69 6D 69 74 20 6E 6F 64 65 20 61 73 20 70 limit node as p
018D00: 61 72 74 20 6F 66 20 61 20 70 61 74 74 65 72 6E art of a pattern
018D10: 20 77 68 69 63 68 0D 0A 09 09 63 61 6E 20 62 65 which....can be
018D20: 20 63 61 6C 6C 65 64 20 72 65 63 75 72 73 69 76 called recursiv
018D30: 65 6C 79 20 28 73 75 63 68 20 61 73 20 22 45 22 ely (such as "E"
018D40: 20 61 62 6F 76 65 29 2E 20 49 66 20 79 6F 75 20 above). If you
018D50: 64 6F 2C 0D 0A 09 09 74 68 65 20 70 61 74 74 65 do,....the patte
018D60: 72 6E 20 6D 61 74 63 68 65 72 20 77 69 6C 6C 20 rn matcher will
018D70: 61 74 74 65 6D 70 74 20 74 6F 20 6D 61 74 63 68 attempt to match
018D80: 20 74 68 65 20 65 6E 64 20 6F 66 20 74 68 65 0D the end of the.
018D90: 0A 09 09 73 74 72 69 6E 67 20 6F 6E 20 65 76 65 ...string on eve
018DA0: 72 79 20 72 65 63 75 72 73 69 6F 6E 2C 20 77 68 ry recursion, wh
018DB0: 69 63 68 20 6D 61 79 20 70 72 65 76 65 6E 74 20 ich may prevent
018DC0: 72 65 63 75 72 73 69 6F 6E 20 61 74 20 61 6C 6C recursion at all
018DD0: 0D 0A 0D 0A 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 ....*)....PROCED
018DE0: 55 52 45 20 4D 61 74 63 68 50 61 74 74 65 72 6E URE MatchPattern
018DF0: 28 70 3A 50 4E 6F 64 65 3B 73 3A 41 52 52 41 59 (p:PNode;s:ARRAY
018E00: 64 2E 0D 0A 0D 0A 09 53 6F 6D 65 20 6F 66 20 74 d......Some of t
018E10: 68 65 20 66 75 6E 63 74 69 6F 6E 73 20 72 65 71 he functions req
018E20: 75 69 72 65 20 6F 74 68 65 72 20 70 61 74 74 65 uire other patte
018E30: 72 6E 73 20 61 73 20 70 61 72 61 6D 65 74 65 72 rns as parameter
018E40: 73 2E 20 54 68 65 73 65 0D 0A 09 63 61 6E 20 62 s. These...can b
018E50: 65 20 67 65 6E 65 72 61 74 65 64 20 75 73 69 6E e generated usin
018E60: 67 20 6E 65 73 74 65 64 20 66 75 6E 63 74 69 6F g nested functio
018E70: 6E 20 63 61 6C 6C 73 2E 0D 0A 0D 0A 09 52 65 63 n calls......Rec
018E80: 75 72 73 69 6F 6E 20 69 73 20 70 6F 73 73 69 62 ursion is possib
018E90: 6C 65 2C 20 62 75 74 20 73 6F 6D 65 20 65 78 74 le, but some ext
018EA0: 72 61 20 77 6F 72 6B 20 69 73 20 72 65 71 75 69 ra work is requi
018EB0: 72 65 64 20 74 6F 20 64 65 66 69 6E 65 20 61 0D red to define a.
018EC0: 0A 09 72 65 63 75 72 73 69 76 65 20 70 61 74 74 ..recursive patt
018ED0: 65 72 6E 2E 20 59 6F 75 20 6D 75 73 74 20 61 6C ern. You must al
018EE0: 6C 6F 63 61 74 65 20 73 74 6F 72 61 67 65 20 66 locate storage f
018EF0: 6F 72 20 61 20 72 65 63 75 72 73 69 76 65 20 70 or a recursive p
018F00: 61 74 74 65 72 6E 0D 0A 09 62 65 66 6F 72 65 20 attern...before
018F10: 69 74 20 69 73 20 75 73 65 64 2C 20 61 6E 64 20 it is used, and
018F20: 74 68 65 6E 20 61 73 73 69 67 6E 20 69 74 73 20 then assign its
018F30: 63 6F 6E 74 65 6E 74 73 20 61 66 74 65 72 20 69 contents after i
018F40: 74 20 69 73 20 64 65 66 69 6E 65 64 2E 0D 0A 0D t is defined....
018F50: 0A 09 46 6F 72 20 65 78 61 6D 70 6C 65 2C 20 73 ..For example, s
018F60: 75 70 70 6F 73 65 20 77 65 20 77 61 6E 74 20 74 uppose we want t
018F70: 6F 20 73 65 74 20 75 70 20 61 20 70 61 74 74 65 o set up a patte
018F80: 72 6E 20 77 68 69 63 68 20 6D 61 74 63 68 65 73 rn which matches
018F90: 20 61 20 73 74 72 69 6E 67 0D 0A 09 6F 66 20 61 a string...of a
018FA0: 27 73 2E 20 54 68 65 20 70 61 74 74 65 72 6E 20 's. The pattern
018FB0: 63 61 6E 20 62 65 20 67 69 76 65 6E 20 62 79 20 can be given by
018FC0: 74 68 65 20 67 72 61 6D 6D 61 72 3A 0D 0A 0D 0A the grammar:....
018FD0: 09 45 2D 3E 61 7C 61 45 0D 0A 0D 0A 09 54 68 69 .E->a|aE.....Thi
018FE0: 73 20 77 6F 75 6C 64 20 62 65 20 73 65 74 20 75 s would be set u
018FF0: 70 20 61 73 20 66 6F 6C 6C 6F 77 73 3A 0D 0A 0D p as follows:...
019000: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
019010: 15 00 01 00 02 09 52 E5 15 00 C9 02 00 00 00 02 ......R.........
019020: 15 00 C5 02 00 00 00 02 15 00 C1 02 00 00 00 02 ................
019030: 15 00 C6 02 00 00 00 02 15 00 C2 02 00 00 00 02 ................
019040: 15 00 C7 02 00 00 00 02 15 00 C3 02 00 00 00 02 ................
019050: 15 00 C8 02 00 00 00 02 15 00 C4 02 00 00 00 02 ................
019060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
019070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
019080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
019090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
019100: 72 74 50 6F 73 3B 0D 0A 09 09 09 52 45 54 55 52 rtPos;.....RETUR
019110: 4E 20 46 41 4C 53 45 0D 0A 09 09 09 7C 09 09 09 N FALSE.....|...
019120: 0D 0A 09 09 09 45 4E 44 20 28 2A 43 41 53 45 2A .....END (*CASE*
019130: 29 0D 0A 09 09 45 4E 44 20 28 2A 57 49 54 48 2A )....END (*WITH*
019140: 29 0D 0A 09 45 4E 44 20 50 3B 0D 0A 42 45 47 49 )...END P;..BEGI
019150: 4E 0D 0A 09 70 3A 3D 71 5E 2E 50 61 74 74 65 72 N...p:=q^.Patter
019160: 6E 4E 6F 64 65 3B 0D 0A 09 49 46 20 50 28 29 20 nNode;...IF P()
019170: 54 48 45 4E 0D 0A 09 09 49 46 20 74 65 6D 70 3C THEN....IF temp<
019180: 3E 4E 49 4C 20 54 48 45 4E 0D 0A 09 09 09 71 5E >NIL THEN.....q^
019190: 3A 3D 74 65 6D 70 5E 3B 0D 0A 09 09 09 44 49 53 :=temp^;.....DIS
0191A0: 50 4F 53 45 28 74 65 6D 70 29 3B 0D 0A 09 09 45 POSE(temp);....E
0191B0: 4C 53 45 0D 0A 20 09 09 20 20 20 20 57 49 54 48 LSE.. .. WITH
0191C0: 20 71 5E 20 44 4F 0D 0A 20 09 09 09 53 74 61 74 q^ DO.. ...Stat
0191D0: 75 73 3A 3D 4D 61 74 63 68 53 74 61 74 75 73 3B us:=MatchStatus;
0191E0: 0D 0A 09 09 09 50 61 74 74 65 72 6E 4E 6F 64 65 .....PatternNode
0191F0: 3A 3D 70 3B 0D 0A 09 09 09 4D 61 74 63 68 65 64 :=p;.....Matched
019200: 41 74 3A 3D 53 74 61 72 74 50 6F 73 3B 0D 0A 09 At:=StartPos;...
019210: 09 09 4D 61 74 63 68 65 64 54 6F 3A 3D 50 6F 73 ..MatchedTo:=Pos
019220: 3B 0D 0A 09 09 09 4C 65 66 74 3A 3D 4D 61 74 63 ;.....Left:=Matc
019230: 68 4C 65 66 74 3B 0D 0A 09 09 09 52 69 67 68 74 hLeft;.....Right
019240: 3A 3D 4D 61 74 63 68 52 69 67 68 74 3B 0D 0A 09 :=MatchRight;...
019250: 09 09 45 4E 44 3B 0D 0A 09 09 20 20 20 20 45 4E ..END;.... EN
019260: 44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 44 49 53 D;...ELSE....DIS
019270: 50 4F 53 45 28 71 29 3B 0D 0A 09 09 43 68 61 6E POSE(q);....Chan
019280: 67 65 64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 45 ged:=FALSE;....E
019290: 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 71 3B 0D ND;...RETURN q;.
0192A0: 0A 09 45 4E 44 20 42 61 63 6B 54 72 61 63 6B 3B ..END BackTrack;
0192B0: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 61 ....PROCEDURE Pa
0192C0: 74 74 65 72 6E 28 70 3A 50 4E 6F 64 65 3B 56 41 ttern(p:PNode;VA
0192D0: 52 20 73 3A 41 52 52 41 59 20 4F 46 20 43 48 41 R s:ARRAY OF CHA
0192E0: 52 3B 56 41 52 20 50 6F 73 3A 43 41 52 44 49 4E R;VAR Pos:CARDIN
0192F0: 41 4C 29 3A 50 53 74 61 74 75 73 3B 0D 0A 0D 0A AL):PStatus;....
019300: 74 61 74 75 73 3B 56 41 52 20 73 3A 41 52 52 41 tatus;VAR s:ARRA
019310: 59 20 4F 46 20 43 48 41 52 3B 56 41 52 20 50 6F Y OF CHAR;VAR Po
019320: 73 3A 43 41 52 44 49 4E 41 4C 29 3A 50 53 74 61 s:CARDINAL):PSta
019330: 74 75 73 3B 0D 0A 0D 0A 28 2A 09 70 65 72 66 6F tus;....(*.perfo
019340: 72 6D 20 62 61 63 6B 74 72 61 63 6B 69 6E 67 20 rm backtracking
019350: 61 66 74 65 72 20 61 20 66 61 69 6C 75 72 65 0D after a failure.
019360: 0A 0D 0A 09 52 65 74 75 72 6E 73 20 54 52 55 45 ....Returns TRUE
019370: 20 69 66 20 61 20 6E 65 77 20 6D 61 74 63 68 20 if a new match
019380: 77 61 73 20 66 6F 75 6E 64 20 66 6F 72 20 6E 6F was found for no
019390: 64 65 20 70 0D 0A 0D 0A 09 4F 6E 20 65 6E 74 72 de p.....On entr
0193A0: 79 20 74 68 65 20 66 69 72 73 74 20 74 69 6D 65 y the first time
0193B0: 2C 20 43 68 61 6E 67 65 64 20 6D 75 73 74 20 62 , Changed must b
0193C0: 65 20 66 61 6C 73 65 0D 0A 09 69 74 20 77 69 6C e false...it wil
0193D0: 6C 20 62 65 20 73 65 74 20 74 72 75 65 20 62 79 l be set true by
0193E0: 20 74 68 65 20 66 69 72 73 74 20 6E 6F 64 65 20 the first node
0193F0: 77 68 69 63 68 20 65 78 74 65 6E 64 73 20 69 74 which extends it
019400: 73 20 6D 61 74 63 68 0D 0A 09 48 65 6E 63 65 2C s match...Hence,
019410: 20 43 68 61 6E 67 65 64 20 6D 75 73 74 20 62 65 Changed must be
019420: 20 74 72 75 65 20 69 66 20 62 61 63 6B 74 72 61 true if backtra
019430: 63 6B 69 6D 6E 67 20 69 73 20 63 6F 6D 70 6C 65 ckimng is comple
019440: 74 65 6C 79 20 73 75 63 63 65 73 73 66 75 6C 2A tely successful*
019450: 29 0D 0A 0D 0A 56 41 52 09 63 6F 75 6E 74 3A 43 )....VAR.count:C
019460: 41 52 44 49 4E 41 4C 3B 0D 0A 09 53 74 61 72 74 ARDINAL;...Start
019470: 50 6F 73 2C 4C 61 73 74 50 6F 73 3A 43 41 52 44 Pos,LastPos:CARD
019480: 49 4E 41 4C 3B 0D 0A 09 70 3A 50 4E 6F 64 65 3B INAL;...p:PNode;
019490: 0D 0A 09 53 61 76 65 4D 61 74 63 68 3A 43 41 52 ...SaveMatch:CAR
0194A0: 44 49 4E 41 4C 3B 0D 0A 09 4D 61 74 63 68 4C 65 DINAL;...MatchLe
0194B0: 66 74 2C 4D 61 74 63 68 52 69 67 68 74 3A 50 53 ft,MatchRight:PS
0194C0: 74 61 74 75 73 3B 0D 0A 09 74 65 6D 70 3A 50 53 tatus;...temp:PS
0194D0: 74 61 74 75 73 3B 0D 0A 09 4D 61 74 63 68 53 74 tatus;...MatchSt
0194E0: 61 74 75 73 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A atus:CARDINAL;..
0194F0: 09 53 61 76 65 50 6F 73 3A 43 41 52 44 49 4E 41 .SavePos:CARDINA
019500: 53 45 29 2C 0D 0A 09 09 09 45 29 3B 0D 0A 0D 0A SE),.....E);....
019510: 09 77 68 65 72 65 20 45 20 69 73 20 74 68 65 20 .where E is the
019520: 70 61 74 74 65 72 6E 20 74 6F 20 62 65 20 6D 61 pattern to be ma
019530: 74 63 68 65 64 20 69 6E 20 75 6E 2D 61 6E 63 68 tched in un-anch
019540: 6F 72 65 64 20 6D 6F 64 65 2E 0D 0A 0D 0A 09 54 ored mode......T
019550: 68 65 20 74 72 65 65 20 72 65 74 75 72 6E 65 64 he tree returned
019560: 20 62 79 20 74 68 65 20 70 61 74 74 65 72 6E 20 by the pattern
019570: 6D 61 74 63 68 65 72 20 63 6F 6E 74 61 69 6E 73 matcher contains
019580: 2C 20 69 6E 20 65 76 65 72 79 20 6E 6F 64 65 2C , in every node,
019590: 20 74 68 65 0D 0A 09 66 69 72 73 74 20 63 68 61 the...first cha
0195A0: 72 61 63 74 65 72 20 6D 61 74 63 68 65 64 20 62 racter matched b
0195B0: 79 20 74 68 65 20 70 61 74 74 65 72 6E 2C 20 61 y the pattern, a
0195C0: 6E 64 20 74 68 65 20 70 6F 73 69 74 69 6F 6E 20 nd the position
0195D0: 6F 66 20 74 68 65 20 6E 65 78 74 0D 0A 09 63 68 of the next...ch
0195E0: 61 72 61 63 74 65 72 20 66 6F 6C 6C 6F 77 69 6E aracter followin
0195F0: 67 20 74 68 65 20 6D 61 74 63 68 20 28 73 6F 20 g the match (so
019600: 74 68 61 74 20 74 68 65 20 64 69 66 66 65 72 65 that the differe
019610: 6E 63 65 20 62 65 74 77 65 65 6E 20 74 68 65 73 nce between thes
019620: 65 0D 0A 09 74 77 6F 20 76 61 6C 75 65 73 20 67 e...two values g
019630: 69 76 65 73 20 74 68 65 20 6E 75 6D 62 65 72 20 ives the number
019640: 6F 66 20 63 68 61 72 61 63 74 65 72 73 20 6D 61 of characters ma
019650: 74 63 68 65 64 29 2E 0D 0A 0D 0A 09 49 6E 20 61 tched)......In a
019660: 64 64 69 74 69 6F 6E 2C 20 65 61 63 68 20 6E 6F ddition, each no
019670: 64 65 20 63 6F 6E 74 61 69 6E 73 20 61 20 70 6F de contains a po
019680: 69 6E 74 65 72 20 74 6F 20 74 68 65 20 70 61 74 inter to the pat
019690: 74 65 72 6E 20 6E 6F 64 65 20 6D 61 74 63 68 65 tern node matche
0196A0: 64 0D 0A 09 61 6E 64 20 69 74 20 6D 61 79 20 63 d...and it may c
0196B0: 6F 6E 74 61 69 6E 20 70 6F 69 6E 74 65 72 73 20 ontain pointers
0196C0: 74 6F 20 73 75 62 2D 70 61 74 74 65 72 6E 73 20 to sub-patterns
0196D0: 77 68 69 63 68 20 77 65 72 65 20 6D 61 74 63 68 which were match
0196E0: 65 64 2E 0D 0A 0D 0A 2A 29 0D 0A 45 4E 44 20 50 ed.....*)..END P
0196F0: 61 74 74 65 72 6E 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A attern..........
019700: 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 28 L;..PROCEDURE P(
019710: 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 ):BOOLEAN;..BEGI
019720: 4E 0D 0A 09 28 2A 20 52 65 63 75 72 73 69 76 65 N...(* Recursive
019730: 6C 79 20 6D 61 74 63 68 20 74 68 65 20 70 61 74 ly match the pat
019740: 74 65 72 6E 20 2A 29 0D 0A 09 57 49 54 48 20 70 tern *)...WITH p
019750: 5E 20 44 4F 0D 0A 20 09 20 20 20 20 50 6F 73 3A ^ DO.. . Pos:
019760: 3D 71 5E 2E 4D 61 74 63 68 65 64 41 74 3B 0D 0A =q^.MatchedAt;..
019770: 09 20 20 20 20 53 74 61 72 74 50 6F 73 3A 3D 50 . StartPos:=P
019780: 6F 73 3B 0D 0A 09 20 20 20 20 74 65 6D 70 3A 3D os;... temp:=
019790: 4E 49 4C 3B 0D 0A 09 20 20 20 20 4D 61 74 63 68 NIL;... Match
0197A0: 53 74 61 74 75 73 3A 3D 71 5E 2E 53 74 61 74 75 Status:=q^.Statu
0197B0: 73 3B 0D 0A 09 20 20 20 20 43 41 53 45 20 4E 54 s;... CASE NT
0197C0: 79 70 65 20 4F 46 0D 0A 09 09 53 74 72 69 6E 67 ype OF....String
0197D0: 2C 52 69 67 68 74 4C 69 6D 69 74 3A 0D 0A 09 09 ,RightLimit:....
0197E0: 09 74 65 6D 70 3A 3D 50 61 74 74 65 72 6E 28 70 .temp:=Pattern(p
0197F0: 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 52 45 54 ,s,Pos);.....RET
019800: 55 52 4E 20 74 65 6D 70 3C 3E 4E 49 4C 3B 0D 0A URN temp<>NIL;..
019810: 09 09 09 7C 20 28 2A 73 74 72 69 6E 67 20 65 74 ...| (*string et
019820: 63 2A 29 0D 0A 09 09 41 6E 79 4F 66 3A 0D 0A 09 c*)....AnyOf:...
019830: 09 09 50 6F 73 3A 3D 71 5E 2E 4D 61 74 63 68 65 ..Pos:=q^.Matche
019840: 64 54 6F 3B 0D 0A 09 09 09 49 46 20 28 4D 61 74 dTo;.....IF (Mat
019850: 63 68 53 74 61 74 75 73 3C 4D 61 78 43 6F 75 6E chStatus<MaxCoun
019860: 74 29 20 41 4E 44 20 28 73 5B 50 6F 73 5D 20 49 t) AND (s[Pos] I
019870: 4E 20 4D 61 74 63 68 29 20 54 48 45 4E 0D 0A 09 N Match) THEN...
019880: 09 09 09 49 4E 43 28 4D 61 74 63 68 53 74 61 74 ...INC(MatchStat
019890: 75 73 29 3B 0D 0A 09 09 09 09 43 68 61 6E 67 65 us);......Change
0198A0: 64 3A 3D 54 52 55 45 3B 0D 0A 09 09 09 09 52 45 d:=TRUE;......RE
0198B0: 54 55 52 4E 20 54 52 55 45 3B 0D 0A 09 09 09 09 TURN TRUE;......
0198C0: 45 4E 44 3B 0D 0A 09 09 09 52 45 54 55 52 4E 20 END;.....RETURN
0198D0: 46 41 4C 53 45 3B 0D 0A 09 09 09 7C 0D 0A 09 09 FALSE;.....|....
0198E0: 41 6C 74 65 72 6E 61 74 69 76 65 73 3A 0D 0A 09 Alternatives:...
0198F0: 09 09 49 46 20 4D 61 74 63 68 53 74 61 74 75 73 ..IF MatchStatus
019900: 28 2A 24 6C 2D 2A 29 0D 0A 49 4D 50 4C 45 4D 45 (*$l-*)..IMPLEME
019910: 4E 54 41 54 49 4F 4E 20 4D 4F 44 55 4C 45 20 50 NTATION MODULE P
019920: 61 74 74 65 72 6E 3B 0D 0A 0D 0A 28 2A 09 54 68 attern;....(*.Th
019930: 69 73 20 69 73 20 61 20 70 61 74 74 65 72 6E 20 is is a pattern
019940: 6D 61 74 63 68 69 6E 67 20 6D 6F 64 75 6C 65 0D matching module.
019950: 0A 0D 0A 09 44 61 76 65 20 4D 6F 6F 72 65 2C 20 ....Dave Moore,
019960: 46 54 4C 20 4D 6F 64 75 6C 61 2D 32 0D 0A 0D 0A FTL Modula-2....
019970: 2A 29 0D 0A 0D 0A 46 52 4F 4D 09 53 54 4F 52 41 *)....FROM.STORA
019980: 47 45 20 49 4D 50 4F 52 54 20 41 4C 4C 4F 43 41 GE IMPORT ALLOCA
019990: 54 45 2C 44 45 41 4C 4C 4F 43 41 54 45 3B 0D 0A TE,DEALLOCATE;..
0199A0: 46 52 4F 4D 09 53 74 72 69 6E 67 73 20 49 4D 50 FROM.Strings IMP
0199B0: 4F 52 54 20 4C 65 6E 67 74 68 3B 0D 0A 46 52 4F ORT Length;..FRO
0199C0: 4D 09 53 59 53 54 45 4D 09 49 4D 50 4F 52 54 20 M.SYSTEM.IMPORT
0199D0: 54 53 49 5A 45 3B 0D 0A 56 41 52 09 69 2C 6A 3A TSIZE;..VAR.i,j:
0199E0: 43 41 52 44 49 4E 41 4C 3B 0D 0A 0D 0A 09 43 68 CARDINAL;.....Ch
0199F0: 61 6E 67 65 64 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A anged:BOOLEAN;..
019A00: 09 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .Len:CARDINAL;..
019A10: 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 72 65 61 ..PROCEDURE Crea
019A20: 74 65 53 74 72 69 6E 67 4E 6F 64 65 28 73 3A 41 teStringNode(s:A
019A30: 52 52 41 59 20 4F 46 20 43 48 41 52 29 3A 50 4E RRAY OF CHAR):PN
019A40: 6F 64 65 3B 0D 0A 56 41 52 09 70 3A 50 4E 6F 64 ode;..VAR.p:PNod
019A50: 65 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 28 2A 54 e;..BEGIN....(*T
019A60: 68 69 73 20 70 72 6F 63 65 64 75 72 65 20 69 73 his procedure is
019A70: 20 70 72 6F 76 69 64 65 64 20 74 6F 20 61 6C 6C provided to all
019A80: 6F 77 20 74 68 65 20 63 72 65 61 74 69 6F 6E 20 ow the creation
019A90: 6F 66 20 6E 6F 64 65 73 0D 0A 20 20 66 6F 72 20 of nodes.. for
019AA0: 73 74 72 69 6E 67 73 20 65 61 73 69 6C 6C 79 2E strings easilly.
019AB0: 20 4F 6E 6C 79 20 74 68 65 20 72 65 71 75 69 72 Only the requir
019AC0: 65 64 20 61 6D 6F 75 6E 74 20 6F 66 20 6D 65 6D ed amount of mem
019AD0: 6F 72 79 20 69 73 20 61 6C 6C 6F 63 61 74 65 64 ory is allocated
019AE0: 2A 29 0D 0A 0D 0A 09 69 3A 3D 4C 65 6E 67 74 68 *).....i:=Length
019AF0: 28 73 29 3B 0D 0A 09 41 4C 4C 4F 43 41 54 45 28 (s);...ALLOCATE(
019B00: 3D 31 20 54 48 45 4E 0D 0A 09 09 09 09 4D 61 74 =1 THEN......Mat
019B10: 63 68 4C 65 66 74 3A 3D 42 61 63 6B 54 72 61 63 chLeft:=BackTrac
019B20: 6B 28 71 5E 2E 4C 65 66 74 2C 73 2C 50 6F 73 29 k(q^.Left,s,Pos)
019B30: 3B 0D 0A 09 09 09 09 49 46 20 28 4D 61 74 63 68 ;......IF (Match
019B40: 4C 65 66 74 3C 3E 4E 49 4C 29 20 41 4E 44 20 43 Left<>NIL) AND C
019B50: 68 61 6E 67 65 64 20 54 48 45 4E 20 0D 0A 09 09 hanged THEN ....
019B60: 09 09 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A ...RETURN TRUE..
019B70: 09 09 09 09 45 4C 53 45 0D 0A 09 09 09 09 09 4D ....ELSE.......M
019B80: 61 74 63 68 53 74 61 74 75 73 3A 3D 32 3B 0D 0A atchStatus:=2;..
019B90: 09 09 09 09 09 43 68 61 6E 67 65 64 3A 3D 54 52 .....Changed:=TR
019BA0: 55 45 3B 0D 0A 09 09 09 09 09 50 6F 73 3A 3D 53 UE;.......Pos:=S
019BB0: 74 61 72 74 50 6F 73 3B 0D 0A 09 09 09 09 09 4D tartPos;.......M
019BC0: 61 74 63 68 4C 65 66 74 3A 3D 50 61 74 74 65 72 atchLeft:=Patter
019BD0: 6E 28 53 65 63 6F 6E 64 2C 73 2C 50 6F 73 29 3B n(Second,s,Pos);
019BE0: 0D 0A 09 09 09 09 09 52 45 54 55 52 4E 20 4D 61 .......RETURN Ma
019BF0: 74 63 68 4C 65 66 74 3C 3E 4E 49 4C 3B 0D 0A 09 tchLeft<>NIL;...
019C00: 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4C 53 ....END;.....ELS
019C10: 45 20 28 2A 53 74 61 74 75 73 3D 32 2A 29 0D 0A E (*Status=2*)..
019C20: 09 09 09 09 4D 61 74 63 68 4C 65 66 74 3A 3D 42 ....MatchLeft:=B
019C30: 61 63 6B 54 72 61 63 6B 28 71 5E 2E 4C 65 66 74 ackTrack(q^.Left
019C40: 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 09 52 45 ,s,Pos);......RE
019C50: 54 55 52 4E 20 4D 61 74 63 68 4C 65 66 74 3C 3E TURN MatchLeft<>
019C60: 4E 49 4C 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A NIL;......END;..
019C70: 09 09 09 7C 0D 0A 09 09 43 6F 6E 63 61 74 3A 0D ...|....Concat:.
019C80: 0A 0D 0A 09 09 09 28 2A 20 73 65 65 20 69 66 20 ......(* see if
019C90: 77 65 20 63 61 6E 20 62 61 63 6B 74 72 61 63 6B we can backtrack
019CA0: 20 6F 6E 20 74 68 65 20 73 65 63 6F 6E 64 20 73 on the second s
019CB0: 74 72 69 6E 67 2A 29 0D 0A 0D 0A 09 09 09 50 6F tring*).......Po
019CC0: 73 3A 3D 4D 61 74 63 68 53 74 61 74 75 73 3B 0D s:=MatchStatus;.
019CD0: 0A 09 09 09 4D 61 74 63 68 4C 65 66 74 3A 3D 71 ....MatchLeft:=q
019CE0: 5E 2E 4C 65 66 74 3B 0D 0A 09 09 09 4D 61 74 63 ^.Left;.....Matc
019CF0: 68 52 69 67 68 74 3A 3D 42 61 63 6B 54 72 61 63 hRight:=BackTrac
019D00: 70 2C 69 2B 33 2A 54 53 49 5A 45 28 43 41 52 44 p,i+3*TSIZE(CARD
019D10: 49 4E 41 4C 29 2B 54 53 49 5A 45 28 4E 6F 64 65 INAL)+TSIZE(Node
019D20: 54 79 70 65 29 29 3B 0D 0A 09 57 49 54 48 20 70 Type));...WITH p
019D30: 5E 20 44 4F 0D 0A 09 09 46 4F 52 20 6A 3A 3D 30 ^ DO....FOR j:=0
019D40: 20 54 4F 20 69 2D 31 20 44 4F 20 0D 0A 09 09 09 TO i-1 DO .....
019D50: 54 65 78 74 5B 6A 5D 3A 3D 73 5B 6A 5D 20 0D 0A Text[j]:=s[j] ..
019D60: 09 09 09 45 4E 44 3B 0D 0A 09 09 54 65 78 74 4C ...END;....TextL
019D70: 65 6E 3A 3D 69 3B 0D 0A 09 09 4E 54 79 70 65 3A en:=i;....NType:
019D80: 3D 53 74 72 69 6E 67 3B 0D 0A 09 09 45 4E 44 3B =String;....END;
019D90: 0D 0A 09 52 45 54 55 52 4E 20 70 3B 0D 0A 09 45 ...RETURN p;...E
019DA0: 4E 44 20 43 72 65 61 74 65 53 74 72 69 6E 67 4E ND CreateStringN
019DB0: 6F 64 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 ode;..PROCEDURE
019DC0: 43 72 65 61 74 65 41 6C 74 4E 6F 64 65 28 6D 2C CreateAltNode(m,
019DD0: 71 3A 50 4E 6F 64 65 29 3A 50 4E 6F 64 65 3B 0D q:PNode):PNode;.
019DE0: 0A 56 41 52 09 70 3A 50 4E 6F 64 65 3B 0D 0A 42 .VAR.p:PNode;..B
019DF0: 45 47 49 4E 0D 0A 09 4E 45 57 28 70 29 3B 0D 0A EGIN...NEW(p);..
019E00: 09 57 49 54 48 20 70 5E 20 44 4F 0D 0A 09 09 4E .WITH p^ DO....N
019E10: 54 79 70 65 3A 3D 41 6C 74 65 72 6E 61 74 69 76 Type:=Alternativ
019E20: 65 73 3B 0D 0A 09 09 46 69 72 73 74 3A 3D 6D 3B es;....First:=m;
019E30: 0D 0A 09 09 53 65 63 6F 6E 64 3A 3D 71 3B 0D 0A ....Second:=q;..
019E40: 09 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 ..END;...RETURN
019E50: 70 0D 0A 09 45 4E 44 20 43 72 65 61 74 65 41 6C p...END CreateAl
019E60: 74 4E 6F 64 65 3B 0D 0A 50 52 4F 43 45 44 55 52 tNode;..PROCEDUR
019E70: 45 20 43 72 65 61 74 65 41 6E 79 4F 66 4E 6F 64 E CreateAnyOfNod
019E80: 65 28 73 3A 43 68 61 72 53 65 74 3B 6D 69 6E 2C e(s:CharSet;min,
019E90: 6D 61 78 3A 43 41 52 44 49 4E 41 4C 3B 4C 6F 6E max:CARDINAL;Lon
019EA0: 67 65 73 74 3A 42 4F 4F 4C 45 41 4E 29 3A 50 4E gest:BOOLEAN):PN
019EB0: 6F 64 65 3B 0D 0A 56 41 52 09 70 3A 50 4E 6F 64 ode;..VAR.p:PNod
019EC0: 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4E 45 57 28 e;..BEGIN...NEW(
019ED0: 70 29 3B 0D 0A 09 57 49 54 48 20 70 5E 20 44 4F p);...WITH p^ DO
019EE0: 0D 0A 09 09 4E 54 79 70 65 3A 3D 41 6E 79 4F 66 ....NType:=AnyOf
019EF0: 3B 0D 0A 09 09 4D 69 6E 43 6F 75 6E 74 3A 3D 6D ;....MinCount:=m
019F00: 6B 28 71 5E 2E 52 69 67 68 74 2C 73 2C 50 6F 73 k(q^.Right,s,Pos
019F10: 29 3B 0D 0A 09 09 09 49 46 20 28 4D 61 74 63 68 );.....IF (Match
019F20: 52 69 67 68 74 3C 3E 4E 49 4C 29 20 41 4E 44 20 Right<>NIL) AND
019F30: 43 68 61 6E 67 65 64 20 54 48 45 4E 0D 0A 09 09 Changed THEN....
019F40: 09 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A 09 ..RETURN TRUE...
019F50: 09 09 09 45 4E 44 3B 0D 0A 09 09 09 50 6F 73 3A ...END;.....Pos:
019F60: 3D 71 5E 2E 4D 61 74 63 68 65 64 41 74 3B 0D 0A =q^.MatchedAt;..
019F70: 09 09 09 0D 0A 09 09 09 28 2A 20 69 66 20 6E 6F ........(* if no
019F80: 74 2C 20 74 72 79 20 74 6F 20 62 61 63 6B 74 72 t, try to backtr
019F90: 61 63 6B 20 74 68 65 20 66 69 72 73 74 20 73 74 ack the first st
019FA0: 72 69 6E 67 0D 0A 09 09 09 20 20 20 75 6E 74 69 ring..... unti
019FB0: 6C 20 74 68 65 20 73 65 63 6F 6E 64 20 73 74 72 l the second str
019FC0: 69 6E 67 20 6D 61 74 63 68 65 73 2A 29 09 09 09 ing matches*)...
019FD0: 0D 0A 09 09 09 43 68 61 6E 67 65 64 3A 3D 46 41 .....Changed:=FA
019FE0: 4C 53 45 3B 0D 0A 09 09 09 53 61 76 65 50 6F 73 LSE;.....SavePos
019FF0: 3A 3D 50 6F 73 3B 0D 0A 09 09 09 4C 4F 4F 50 0D :=Pos;.....LOOP.
01A000: 0A 09 09 09 09 50 6F 73 3A 3D 53 61 76 65 50 6F .....Pos:=SavePo
01A010: 73 3B 0D 0A 09 09 09 09 4D 61 74 63 68 4C 65 66 s;......MatchLef
01A020: 74 3A 3D 42 61 63 6B 54 72 61 63 6B 28 71 5E 2E t:=BackTrack(q^.
01A030: 4C 65 66 74 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 Left,s,Pos);....
01A040: 09 09 49 46 20 28 4D 61 74 63 68 4C 65 66 74 3D ..IF (MatchLeft=
01A050: 4E 49 4C 29 20 4F 52 20 4E 4F 54 20 43 68 61 6E NIL) OR NOT Chan
01A060: 67 65 64 20 54 48 45 4E 20 45 58 49 54 20 45 4E ged THEN EXIT EN
01A070: 44 3B 0D 0A 09 09 09 09 4D 61 74 63 68 52 69 67 D;......MatchRig
01A080: 68 74 3A 3D 50 61 74 74 65 72 6E 28 53 65 63 6F ht:=Pattern(Seco
01A090: 6E 64 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 09 nd,s,Pos);......
01A0A0: 49 46 20 4D 61 74 63 68 52 69 67 68 74 3C 3E 4E IF MatchRight<>N
01A0B0: 49 4C 20 54 48 45 4E 0D 0A 09 09 09 09 09 52 45 IL THEN.......RE
01A0C0: 54 55 52 4E 20 54 52 55 45 0D 0A 09 09 09 09 09 TURN TRUE.......
01A0D0: 45 4E 44 3B 0D 0A 09 09 09 09 43 68 61 6E 67 65 END;......Change
01A0E0: 64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 09 09 45 d:=FALSE;......E
01A0F0: 4E 44 3B 0D 0A 09 09 09 50 6F 73 3A 3D 53 74 61 ND;.....Pos:=Sta
01A100: 69 6E 3B 0D 0A 09 09 4D 61 78 43 6F 75 6E 74 3A in;....MaxCount:
01A110: 3D 6D 61 78 3B 0D 0A 09 09 46 61 73 74 3A 3D 4C =max;....Fast:=L
01A120: 6F 6E 67 65 73 74 3B 0D 0A 09 09 4D 61 74 63 68 ongest;....Match
01A130: 3A 3D 73 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 :=s;....END;...R
01A140: 45 54 55 52 4E 20 70 0D 0A 09 45 4E 44 20 43 72 ETURN p...END Cr
01A150: 65 61 74 65 41 6E 79 4F 66 4E 6F 64 65 3B 0D 0A eateAnyOfNode;..
01A160: 50 52 4F 43 45 44 55 52 45 20 43 72 65 61 74 65 PROCEDURE Create
01A170: 43 6F 6E 63 61 74 4E 6F 64 65 28 6D 2C 71 3A 50 ConcatNode(m,q:P
01A180: 4E 6F 64 65 29 3A 50 4E 6F 64 65 3B 0D 0A 56 41 Node):PNode;..VA
01A190: 52 09 70 3A 50 4E 6F 64 65 3B 0D 0A 42 45 47 49 R.p:PNode;..BEGI
01A1A0: 4E 0D 0A 09 4E 45 57 28 70 29 3B 0D 0A 09 57 49 N...NEW(p);...WI
01A1B0: 54 48 20 70 5E 20 44 4F 0D 0A 09 09 4E 54 79 70 TH p^ DO....NTyp
01A1C0: 65 3A 3D 43 6F 6E 63 61 74 3B 0D 0A 09 09 46 69 e:=Concat;....Fi
01A1D0: 72 73 74 3A 3D 6D 3B 0D 0A 09 09 53 65 63 6F 6E rst:=m;....Secon
01A1E0: 64 3A 3D 71 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 d:=q;....END;...
01A1F0: 52 45 54 55 52 4E 20 70 0D 0A 09 45 4E 44 20 43 RETURN p...END C
01A200: 72 65 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 3B reateConcatNode;
01A210: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 72 ....PROCEDURE Cr
01A220: 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 28 29 3A eateLimitNode():
01A230: 50 4E 6F 64 65 3B 0D 0A 56 41 52 09 70 3A 50 4E PNode;..VAR.p:PN
01A240: 6F 64 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4E 45 ode;..BEGIN...NE
01A250: 57 28 70 29 3B 0D 0A 09 70 5E 2E 4E 54 79 70 65 W(p);...p^.NType
01A260: 3A 3D 52 69 67 68 74 4C 69 6D 69 74 3B 0D 0A 09 :=RightLimit;...
01A270: 52 45 54 55 52 4E 20 70 3B 0D 0A 09 45 4E 44 20 RETURN p;...END
01A280: 43 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 3B CreateLimitNode;
01A290: 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 61 74 74 ..PROCEDURE Patt
01A2A0: 65 72 6E 28 70 3A 50 4E 6F 64 65 3B 56 41 52 20 ern(p:PNode;VAR
01A2B0: 73 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 3B s:ARRAY OF CHAR;
01A2C0: 56 41 52 20 50 6F 73 3A 43 41 52 44 49 4E 41 4C VAR Pos:CARDINAL
01A2D0: 29 3A 50 53 74 61 74 75 73 3B 46 4F 52 57 41 52 ):PStatus;FORWAR
01A2E0: 44 3B 0D 0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 D;......PROCEDUR
01A2F0: 45 20 42 61 63 6B 54 72 61 63 6B 28 71 3A 50 53 E BackTrack(q:PS
01A300: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
01A310: 16 00 01 00 02 09 52 E5 16 00 C9 02 00 00 00 02 ......R.........
01A320: 16 00 C5 02 00 00 00 02 16 00 C1 02 00 00 00 02 ................
01A330: 16 00 C6 02 00 00 00 02 16 00 C2 02 00 00 00 02 ................
01A340: 16 00 C7 02 00 00 00 02 16 00 C3 02 00 00 00 02 ................
01A350: 16 00 C8 02 00 00 00 02 16 00 C4 02 00 00 00 02 ................
01A360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A400: 49 6E 63 72 65 6D 65 6E 74 3D 31 3B 09 28 2A 6E Increment=1;.(*n
01A410: 75 6D 62 65 72 20 6F 66 20 62 79 74 65 73 20 62 umber of bytes b
01A420: 65 74 77 65 65 6E 20 63 68 61 72 61 63 74 65 72 etween character
01A430: 73 2A 29 0D 0A 09 53 63 72 65 65 6E 53 69 7A 65 s*)...ScreenSize
01A440: 3D 38 30 2A 32 34 3B 09 28 2A 6E 75 6D 62 65 72 =80*24;.(*number
01A450: 20 6F 66 20 62 79 74 65 73 20 69 6E 20 73 63 72 of bytes in scr
01A460: 65 65 6E 20 61 72 65 61 2A 29 0D 0A 0D 0A 09 43 een area*).....C
01A470: 52 3D 30 64 78 3B 09 09 09 28 2A 43 61 72 72 69 R=0dx;...(*Carri
01A480: 61 67 65 20 72 65 74 75 72 6E 2A 29 0D 0A 09 4C age return*)...L
01A490: 46 3D 30 61 78 3B 09 09 09 28 2A 4C 69 6E 65 20 F=0ax;...(*Line
01A4A0: 66 65 65 64 2A 29 0D 0A 09 54 41 42 3D 30 39 78 feed*)...TAB=09x
01A4B0: 3B 09 09 28 2A 54 41 42 2A 29 0D 0A 09 42 53 3D ;..(*TAB*)...BS=
01A4C0: 30 38 78 3B 0D 0A 56 41 52 0D 0A 09 42 75 66 66 08x;..VAR...Buff
01A4D0: 65 72 3A 41 52 52 41 59 5B 30 2E 2E 31 32 35 5D er:ARRAY[0..125]
01A4E0: 20 4F 46 20 42 59 54 45 3B 20 28 2A 42 75 66 66 OF BYTE; (*Buff
01A4F0: 65 72 20 66 6F 72 20 75 70 20 74 6F 20 61 20 6C er for up to a l
01A500: 69 6E 65 20 2A 29 0D 0A 09 42 61 73 65 41 64 64 ine *)...BaseAdd
01A510: 72 3A 43 41 52 44 49 4E 41 4C 3D 30 42 30 30 30 r:CARDINAL=0B000
01A520: 68 3B 20 28 2A 73 65 67 20 61 64 64 72 65 73 73 h; (*seg address
01A530: 20 6F 66 20 61 64 61 70 74 65 72 20 2D 20 63 68 of adapter - ch
01A540: 61 6E 67 65 20 66 6F 72 20 63 6F 6C 6F 75 72 2A ange for colour*
01A550: 29 0D 0A 09 42 75 66 66 65 72 52 6F 77 3A 43 41 )...BufferRow:CA
01A560: 52 44 49 4E 41 4C 3B 09 28 2A 52 6F 77 20 42 65 RDINAL;.(*Row Be
01A570: 69 6E 67 20 73 61 76 65 64 20 2A 29 0D 0A 09 42 ing saved *)...B
01A580: 75 66 66 65 72 43 6F 6C 3A 43 41 52 44 49 4E 41 ufferCol:CARDINA
01A590: 4C 3B 09 28 2A 53 74 61 72 74 20 43 6F 6C 75 6D L;.(*Start Colum
01A5A0: 6E 2A 29 0D 0A 09 42 75 66 66 65 72 43 6F 75 6E n*)...BufferCoun
01A5B0: 74 3A 43 41 52 44 49 4E 41 4C 3D 30 3B 20 28 2A t:CARDINAL=0; (*
01A5C0: 45 4E 74 72 69 65 73 20 69 6E 20 62 75 66 66 65 ENtries in buffe
01A5D0: 72 20 2A 29 09 0D 0A 09 41 74 74 72 69 62 75 74 r *)....Attribut
01A5E0: 65 73 3A 43 41 52 44 49 4E 41 4C 3D 37 3B 0D 0A es:CARDINAL=7;..
01A5F0: 09 53 63 72 65 65 6E 50 6F 73 3A 43 41 52 44 49 .ScreenPos:CARDI
01A600: 09 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 ..END;...RETURN
01A610: 51 3B 0D 0A 09 45 4E 44 20 50 61 74 74 65 72 6E Q;...END Pattern
01A620: 3B 0D 0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 ;......PROCEDURE
01A630: 20 4D 61 74 63 68 50 61 74 74 65 72 6E 28 70 3A MatchPattern(p:
01A640: 50 4E 6F 64 65 3B 73 3A 41 52 52 41 59 20 4F 46 PNode;s:ARRAY OF
01A650: 20 43 48 41 52 29 3A 50 53 74 61 74 75 73 3B 0D CHAR):PStatus;.
01A660: 0A 0D 0A 28 2A 09 4D 61 74 63 68 20 61 20 50 61 ...(*.Match a Pa
01A670: 74 74 65 72 6E 20 0D 0A 09 70 20 69 73 20 74 68 ttern ...p is th
01A680: 65 20 72 6F 6F 74 20 6F 66 20 74 68 65 20 70 61 e root of the pa
01A690: 74 74 65 72 6E 20 74 6F 20 6D 61 74 63 68 0D 0A ttern to match..
01A6A0: 09 73 20 69 73 20 74 68 65 20 74 65 78 74 20 74 .s is the text t
01A6B0: 6F 20 6D 61 74 63 68 0D 0A 0D 0A 09 54 68 65 20 o match.....The
01A6C0: 66 75 6E 63 74 69 6F 6E 20 72 65 74 75 72 6E 73 function returns
01A6D0: 20 74 72 75 65 20 6F 6E 6C 79 20 69 66 20 74 68 true only if th
01A6E0: 65 20 73 74 72 69 6E 67 20 6D 61 74 63 68 65 73 e string matches
01A6F0: 0D 0A 09 63 6F 6D 70 6C 65 74 65 6C 79 2E 0D 0A ...completely...
01A700: 0D 0A 09 4F 66 20 63 6F 75 72 73 65 2C 20 79 6F ...Of course, yo
01A710: 75 20 63 61 6E 20 61 6C 77 61 79 73 20 75 73 65 u can always use
01A720: 64 20 72 65 70 65 61 74 65 64 20 73 65 74 73 20 d repeated sets
01A730: 6F 66 20 61 6E 79 74 68 69 6E 67 0D 0A 09 61 74 of anything...at
01A740: 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 61 the beginning a
01A750: 6E 64 2E 6F 72 20 65 6E 64 20 6F 66 20 61 20 73 nd.or end of a s
01A760: 74 72 69 6E 67 20 69 6E 20 6F 72 64 65 72 20 74 tring in order t
01A770: 6F 0D 0A 09 6D 61 74 63 68 20 6F 6E 6C 79 20 70 o...match only p
01A780: 61 72 74 20 6F 66 20 61 20 73 74 72 69 6E 67 2A art of a string*
01A790: 29 0D 0A 0D 0A 56 41 52 09 50 6F 73 3A 43 41 52 )....VAR.Pos:CAR
01A7A0: 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 DINAL;..BEGIN...
01A7B0: 50 6F 73 3A 3D 30 3B 0D 0A 09 4C 65 6E 3A 3D 4C Pos:=0;...Len:=L
01A7C0: 65 6E 67 74 68 28 73 29 3B 0D 0A 09 52 45 54 55 ength(s);...RETU
01A7D0: 52 4E 20 50 61 74 74 65 72 6E 28 70 2C 73 2C 50 RN Pattern(p,s,P
01A7E0: 6F 73 29 3B 0D 0A 09 45 4E 44 20 4D 61 74 63 68 os);...END Match
01A7F0: 50 61 74 74 65 72 6E 3B 0D 0A 45 4E 44 20 50 61 Pattern;..END Pa
01A800: 28 2A 09 54 68 69 73 20 70 72 6F 63 65 64 75 72 (*.This procedur
01A810: 65 20 6D 61 74 63 68 65 73 20 66 6F 72 77 61 72 e matches forwar
01A820: 64 20 2A 29 0D 0A 56 41 52 09 63 6F 75 6E 74 3A d *)..VAR.count:
01A830: 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 53 74 61 72 CARDINAL;...Star
01A840: 74 50 6F 73 2C 4C 61 73 74 50 6F 73 3A 43 41 52 tPos,LastPos:CAR
01A850: 44 49 4E 41 4C 3B 0D 0A 09 53 61 76 65 4D 61 74 DINAL;...SaveMat
01A860: 63 68 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 51 ch:CARDINAL;...Q
01A870: 3A 50 53 74 61 74 75 73 3B 0D 0A 09 4D 61 74 63 :PStatus;...Matc
01A880: 68 53 74 61 74 75 73 3A 43 41 52 44 49 4E 41 4C hStatus:CARDINAL
01A890: 3B 0D 0A 09 4D 61 74 63 68 4C 65 66 74 2C 4D 61 ;...MatchLeft,Ma
01A8A0: 74 63 68 52 69 67 68 74 3A 50 53 74 61 74 75 73 tchRight:PStatus
01A8B0: 3B 0D 0A 09 53 61 76 65 50 6F 73 3A 43 41 52 44 ;...SavePos:CARD
01A8C0: 49 4E 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 INAL;..PROCEDURE
01A8D0: 20 50 28 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 P():BOOLEAN;..B
01A8E0: 45 47 49 4E 0D 0A 09 28 2A 20 52 65 63 75 72 73 EGIN...(* Recurs
01A8F0: 69 76 65 6C 79 20 6D 61 74 63 68 20 74 68 65 20 ively match the
01A900: 70 61 74 74 65 72 6E 20 2A 29 0D 0A 09 57 49 54 pattern *)...WIT
01A910: 48 20 70 5E 20 44 4F 0D 0A 09 20 20 20 20 53 74 H p^ DO... St
01A920: 61 72 74 50 6F 73 3A 3D 50 6F 73 3B 0D 0A 09 20 artPos:=Pos;...
01A930: 20 20 20 43 41 53 45 20 4E 54 79 70 65 20 4F 46 CASE NType OF
01A940: 0D 0A 09 09 53 74 72 69 6E 67 3A 0D 0A 09 09 09 ....String:.....
01A950: 49 46 20 28 4C 65 6E 2D 50 6F 73 29 3C 54 65 78 IF (Len-Pos)<Tex
01A960: 74 4C 65 6E 20 54 48 45 4E 20 52 45 54 55 52 4E tLen THEN RETURN
01A970: 20 46 41 4C 53 45 0D 0A 09 09 09 45 4C 53 45 0D FALSE.....ELSE.
01A980: 0A 09 09 09 09 69 3A 3D 30 3B 0D 0A 09 09 09 09 .....i:=0;......
01A990: 57 48 49 4C 45 20 28 69 3C 54 65 78 74 4C 65 6E WHILE (i<TextLen
01A9A0: 29 20 41 4E 44 20 28 73 5B 50 6F 73 5D 3D 54 65 ) AND (s[Pos]=Te
01A9B0: 78 74 5B 69 5D 29 20 44 4F 0D 0A 09 09 09 09 09 xt[i]) DO.......
01A9C0: 49 4E 43 28 50 6F 73 29 3B 0D 0A 09 09 09 09 09 INC(Pos);.......
01A9D0: 49 4E 43 28 69 29 3B 0D 0A 09 09 09 09 09 45 4E INC(i);.......EN
01A9E0: 44 3B 0D 0A 09 09 09 09 49 46 20 69 3D 54 65 78 D;......IF i=Tex
01A9F0: 74 4C 65 6E 20 54 48 45 4E 20 0D 0A 09 09 09 09 tLen THEN ......
01AA00: 74 74 65 72 6E 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A ttern...........
01AA10: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01AA20: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01AA30: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01AA40: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01AA50: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01AA60: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01AA70: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01AA80: 0A 09 09 4C 65 6E 67 74 68 3A 3D 53 6C 6F 74 73 ...Length:=Slots
01AA90: 20 44 49 56 20 34 3B 0D 0A 09 09 53 74 61 72 74 DIV 4;....Start
01AAA0: 53 65 63 74 6F 72 3A 3D 30 3B 0D 0A 09 09 45 4E Sector:=0;....EN
01AAB0: 44 3B 0D 0A 09 4E 65 78 74 53 65 63 74 6F 72 3A D;...NextSector:
01AAC0: 3D 53 6C 6F 74 73 20 44 49 56 20 34 3B 0D 0A 09 =Slots DIV 4;...
01AAD0: 45 4E 44 20 47 65 74 53 6C 6F 74 43 6F 75 6E 74 END GetSlotCount
01AAE0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4F 70 65 ;..PROCEDURE Ope
01AAF0: 6E 4C 69 62 72 61 72 79 3B 0D 0A 28 2A 09 6F 70 nLibrary;..(*.op
01AB00: 65 6E 20 74 68 65 20 6C 69 62 72 61 72 79 20 66 en the library f
01AB10: 69 6C 65 20 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 ile *)..BEGIN...
01AB20: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 45 6E WriteString(' En
01AB30: 74 65 72 20 6E 61 6D 65 20 6F 66 20 6C 69 62 72 ter name of libr
01AB40: 61 72 79 20 66 69 6C 65 3A 27 29 3B 0D 0A 09 52 ary file:');...R
01AB50: 65 61 64 53 74 72 69 6E 67 28 4C 69 62 4E 61 6D eadString(LibNam
01AB60: 65 29 3B 0D 0A 09 4C 6F 6F 6B 75 70 28 4C 69 62 e);...Lookup(Lib
01AB70: 2C 4C 69 62 4E 61 6D 65 2C 72 65 70 6C 79 29 3B ,LibName,reply);
01AB80: 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54 ...IF reply<>0 T
01AB90: 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 69 HEN....WriteStri
01ABA0: 6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F 74 20 66 ng(' Could not f
01ABB0: 69 6E 64 20 74 68 61 74 20 66 69 6C 65 20 2D 20 ind that file -
01ABC0: 63 72 65 61 74 65 20 69 74 20 3F 27 29 3B 0D 0A create it ?');..
01ABD0: 09 09 49 46 20 59 65 73 28 29 20 54 48 45 4E 0D ..IF Yes() THEN.
01ABE0: 0A 09 09 09 43 72 65 61 74 65 28 4C 69 62 2C 4C ....Create(Lib,L
01ABF0: 69 62 4E 61 6D 65 2C 72 65 70 6C 79 29 3B 0D 0A ibName,reply);..
01AC00: 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A 09 09 .RETURN TRUE....
01AC10: 09 09 45 4C 53 45 0D 0A 09 09 09 09 09 50 6F 73 ..ELSE.......Pos
01AC20: 3A 3D 50 6F 73 2D 69 3B 0D 0A 09 09 09 09 09 52 :=Pos-i;.......R
01AC30: 45 54 55 52 4E 20 46 41 4C 53 45 3B 0D 0A 09 09 ETURN FALSE;....
01AC40: 09 09 09 45 4E 44 3B 0D 0A 09 09 09 09 45 4E 44 ...END;......END
01AC50: 3B 28 2A 20 6C 6F 6E 67 20 65 6E 6F 75 67 68 20 ;(* long enough
01AC60: 74 6F 20 6D 61 74 63 68 2A 29 0D 0A 09 09 09 7C to match*).....|
01AC70: 20 28 2A 73 74 72 69 6E 67 2A 29 0D 0A 09 09 41 (*string*)....A
01AC80: 6E 79 4F 66 3A 09 4D 61 74 63 68 53 74 61 74 75 nyOf:.MatchStatu
01AC90: 73 3A 3D 30 3B 0D 0A 09 09 09 57 48 49 4C 45 20 s:=0;.....WHILE
01ACA0: 28 4D 61 74 63 68 53 74 61 74 75 73 3C 4D 69 6E (MatchStatus<Min
01ACB0: 43 6F 75 6E 74 29 20 41 4E 44 20 28 73 5B 50 6F Count) AND (s[Po
01ACC0: 73 5D 20 49 4E 20 4D 61 74 63 68 29 20 44 4F 0D s] IN Match) DO.
01ACD0: 0A 09 09 09 09 49 4E 43 28 50 6F 73 29 3B 0D 0A .....INC(Pos);..
01ACE0: 09 09 09 09 49 4E 43 28 4D 61 74 63 68 53 74 61 ....INC(MatchSta
01ACF0: 74 75 73 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D tus);......END;.
01AD00: 0A 09 09 09 49 46 20 46 61 73 74 20 54 48 45 4E ....IF Fast THEN
01AD10: 0D 0A 09 09 09 09 57 48 49 4C 45 20 28 4D 61 74 ......WHILE (Mat
01AD20: 63 68 53 74 61 74 75 73 3C 4D 61 78 43 6F 75 6E chStatus<MaxCoun
01AD30: 74 29 20 41 4E 44 20 28 73 5B 50 6F 73 5D 20 49 t) AND (s[Pos] I
01AD40: 4E 20 4D 61 74 63 68 29 20 44 4F 0D 0A 09 09 09 N Match) DO.....
01AD50: 09 09 49 4E 43 28 50 6F 73 29 3B 0D 0A 09 09 09 ..INC(Pos);.....
01AD60: 09 09 49 4E 43 28 4D 61 74 63 68 53 74 61 74 75 ..INC(MatchStatu
01AD70: 73 29 3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A s);.......END;..
01AD80: 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 52 45 54 ....END;.....RET
01AD90: 55 52 4E 20 4D 61 74 63 68 53 74 61 74 75 73 3E URN MatchStatus>
01ADA0: 3D 4D 69 6E 43 6F 75 6E 74 3B 0D 0A 09 09 09 7C =MinCount;.....|
01ADB0: 0D 0A 09 09 41 6C 74 65 72 6E 61 74 69 76 65 73 ....Alternatives
01ADC0: 3A 0D 0A 09 09 09 09 4D 61 74 63 68 4C 65 66 74 :......MatchLeft
01ADD0: 3A 3D 50 61 74 74 65 72 6E 28 46 69 72 73 74 2C :=Pattern(First,
01ADE0: 73 2C 50 6F 73 29 0D 0A 09 09 09 09 49 46 20 20 s,Pos)......IF
01ADF0: 4D 61 74 63 68 4C 65 66 74 3C 3E 4E 49 4C 20 54 MatchLeft<>NIL T
01AE00: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
01AE10: 4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D ODULE ScreenIO;.
01AE20: 0A 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 74 68 ...(*.This is th
01AE30: 65 20 45 61 72 74 68 20 43 50 45 4D 20 76 65 72 e Earth CPEM ver
01AE40: 73 69 6F 6E 20 6F 66 20 53 63 72 65 65 6E 49 4F sion of ScreenIO
01AE50: 0D 0A 0D 0A 09 59 6F 75 20 6E 65 65 64 20 72 65 .....You need re
01AE60: 76 20 30 2E 32 32 20 6F 72 20 6C 61 74 65 72 20 v 0.22 or later
01AE70: 6F 66 20 43 50 45 4D 20 74 6F 20 75 73 65 20 74 of CPEM to use t
01AE80: 68 69 73 20 70 72 6F 67 72 61 6D 0D 0A 09 49 74 his program...It
01AE90: 20 75 73 65 73 20 69 6E 74 20 31 36 68 20 74 6F uses int 16h to
01AEA0: 20 70 65 72 66 6F 72 6D 20 49 4F 2C 20 73 6F 20 perform IO, so
01AEB0: 79 6F 75 72 20 6D 61 63 68 69 6E 65 20 6D 75 73 your machine mus
01AEC0: 74 20 62 65 20 49 42 4D 20 0D 0A 09 63 6F 6D 70 t be IBM ...comp
01AED0: 61 74 69 62 6C 65 20 61 74 20 74 68 65 20 42 49 atible at the BI
01AEE0: 4F 53 20 6C 65 76 65 6C 0D 0A 0D 0A 09 54 68 69 OS level.....Thi
01AEF0: 73 20 69 73 20 61 20 73 6C 69 67 68 74 6C 79 20 s is a slightly
01AF00: 6D 6F 64 69 66 69 65 64 20 76 65 72 73 69 6F 6E modified version
01AF10: 20 6F 66 20 53 63 72 65 65 6E 49 4F 2E 49 42 4D of ScreenIO.IBM
01AF20: 20 77 68 69 63 68 20 77 69 6C 6C 0D 0A 09 62 65 which will...be
01AF30: 20 61 76 61 69 6C 61 62 6C 65 20 77 68 65 6E 20 available when
01AF40: 74 68 65 20 4D 53 44 4F 53 20 76 65 72 73 69 6F the MSDOS versio
01AF50: 6E 20 6F 66 20 74 68 65 20 63 6F 6D 70 69 6C 65 n of the compile
01AF60: 72 20 69 73 20 72 75 6E 6E 69 6E 67 0D 0A 0D 0A r is running....
01AF70: 09 54 68 65 20 64 69 66 66 65 72 65 6E 63 65 20 .The difference
01AF80: 69 73 20 74 68 61 74 20 74 68 69 73 20 76 65 72 is that this ver
01AF90: 73 69 6F 6E 20 62 75 66 66 65 72 73 20 73 63 72 sion buffers scr
01AFA0: 65 65 6E 20 6F 75 74 70 75 74 20 69 6E 20 6F 72 een output in or
01AFB0: 64 65 72 20 74 6F 0D 0A 09 73 70 65 65 64 20 75 der to...speed u
01AFC0: 70 20 73 63 72 65 65 6E 20 6F 75 74 70 75 74 2C p screen output,
01AFD0: 20 61 73 20 63 68 61 72 61 63 74 65 72 20 61 74 as character at
01AFE0: 20 61 20 74 69 6D 65 20 77 61 73 20 74 6F 6F 20 a time was too
01AFF0: 73 6C 6F 77 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D slow..*)....FROM
01B000: 48 45 4E 20 0D 0A 09 09 09 09 09 4D 61 74 63 68 HEN .......Match
01B010: 53 74 61 74 75 73 3A 3D 31 3B 0D 0A 09 09 09 09 Status:=1;......
01B020: 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A 09 09 .RETURN TRUE....
01B030: 09 09 45 4C 53 45 0D 0A 09 09 09 09 09 0D 0A 09 ..ELSE..........
01B040: 09 09 09 09 4D 61 74 63 68 53 74 61 74 75 73 3A ....MatchStatus:
01B050: 3D 32 3B 0D 0A 09 09 09 09 09 4D 61 74 63 68 4C =2;.......MatchL
01B060: 65 66 74 3A 3D 50 61 74 74 65 72 6E 28 53 65 63 eft:=Pattern(Sec
01B070: 6F 6E 64 2C 73 2C 50 6F 73 29 3B 20 0D 0A 09 09 ond,s,Pos); ....
01B080: 09 09 09 52 45 54 55 52 4E 20 4D 61 74 63 68 4C ...RETURN MatchL
01B090: 65 66 74 3C 3E 4E 49 4C 0D 0A 09 09 09 09 09 45 eft<>NIL.......E
01B0A0: 4E 44 3B 0D 0A 09 09 09 7C 0D 0A 09 09 43 6F 6E ND;.....|....Con
01B0B0: 63 61 74 3A 0D 0A 09 09 09 4D 61 74 63 68 4C 65 cat:.....MatchLe
01B0C0: 66 74 3A 3D 50 61 74 74 65 72 6E 28 46 69 72 73 ft:=Pattern(Firs
01B0D0: 74 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 49 46 t,s,Pos);.....IF
01B0E0: 20 4D 61 74 63 68 4C 65 66 74 3C 3E 4E 49 4C 20 MatchLeft<>NIL
01B0F0: 54 48 45 4E 0D 0A 09 09 09 09 4D 61 74 63 68 53 THEN......MatchS
01B100: 74 61 74 75 73 3A 3D 50 6F 73 3B 0D 0A 09 09 09 tatus:=Pos;.....
01B110: 09 4D 61 74 63 68 52 69 67 68 74 3A 3D 50 61 74 .MatchRight:=Pat
01B120: 74 65 72 6E 28 53 65 63 6F 6E 64 2C 73 2C 50 6F tern(Second,s,Po
01B130: 73 29 3B 0D 0A 09 09 09 09 49 46 20 4D 61 74 63 s);......IF Matc
01B140: 68 52 69 67 68 74 3C 3E 4E 49 4C 20 54 48 45 4E hRight<>NIL THEN
01B150: 0D 0A 09 09 09 09 09 52 45 54 55 52 4E 20 54 52 .......RETURN TR
01B160: 55 45 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 UE.......END;...
01B170: 09 09 09 43 68 61 6E 67 65 64 3A 3D 46 41 4C 53 ...Changed:=FALS
01B180: 45 3B 0D 0A 09 09 09 09 53 61 76 65 50 6F 73 3A E;......SavePos:
01B190: 3D 50 6F 73 3B 0D 0A 09 09 09 09 4C 4F 4F 50 0D =Pos;......LOOP.
01B1A0: 0A 09 09 09 09 09 50 6F 73 3A 3D 53 61 76 65 50 ......Pos:=SaveP
01B1B0: 6F 73 3B 0D 0A 09 09 09 09 09 4D 61 74 63 68 4C os;.......MatchL
01B1C0: 65 66 74 3A 3D 42 61 63 6B 54 72 61 63 6B 28 4D eft:=BackTrack(M
01B1D0: 61 74 63 68 4C 65 66 74 2C 73 2C 50 6F 73 29 3B atchLeft,s,Pos);
01B1E0: 0D 0A 09 09 09 09 09 49 46 20 28 4D 61 74 63 68 .......IF (Match
01B1F0: 4C 65 66 74 3D 4E 49 4C 29 20 4F 52 20 4E 4F 54 Left=NIL) OR NOT
01B200: 20 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 Terminal IMPORT
01B210: 20 43 68 61 72 52 6F 75 74 69 6E 65 2C 43 68 61 CharRoutine,Cha
01B220: 72 45 6E 61 62 6C 65 64 2C 42 6C 69 6E 6B 52 6F rEnabled,BlinkRo
01B230: 75 74 69 6E 65 2C 42 6C 69 6E 6B 45 6E 61 62 6C utine,BlinkEnabl
01B240: 65 64 3B 0D 0A 46 52 4F 4D 20 53 59 53 54 45 4D ed;..FROM SYSTEM
01B250: 20 49 4D 50 4F 52 54 20 41 44 52 2C 53 49 5A 45 IMPORT ADR,SIZE
01B260: 3B 0D 0A 46 52 4F 4D 20 43 50 4D 20 49 4D 50 4F ;..FROM CPM IMPO
01B270: 52 54 20 77 63 63 66 63 2C 42 44 4F 53 3B 0D 0A RT wccfc,BDOS;..
01B280: 46 52 4F 4D 20 49 6E 74 4C 6F 67 69 63 20 49 4D FROM IntLogic IM
01B290: 50 4F 52 54 20 49 41 4E 44 3B 0D 0A 46 52 4F 4D PORT IAND;..FROM
01B2A0: 20 53 79 73 43 61 6C 6C 20 49 4D 50 4F 52 54 20 SysCall IMPORT
01B2B0: 49 6E 74 2C 50 61 63 6B 65 74 2C 52 65 61 64 4F Int,Packet,ReadO
01B2C0: 72 57 72 69 74 65 3B 0D 0A 0D 0A 28 2A 09 53 63 rWrite;....(*.Sc
01B2D0: 72 65 65 6E 20 68 61 6E 64 6C 69 6E 67 20 72 6F reen handling ro
01B2E0: 75 74 69 6E 65 73 20 66 6F 72 20 63 75 72 73 6F utines for curso
01B2F0: 72 20 70 6F 73 69 74 69 6F 6E 2C 20 61 74 74 72 r position, attr
01B300: 69 62 75 74 65 20 65 74 63 0D 0A 0D 0A 09 53 70 ibute etc.....Sp
01B310: 65 63 69 66 69 63 20 74 6F 20 74 68 69 73 20 63 ecific to this c
01B320: 6F 6D 70 69 6C 65 72 2A 29 0D 0A 0D 0A 43 4F 4E ompiler*)....CON
01B330: 53 54 09 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 ST.LogScreenWidt
01B340: 68 3D 38 30 3B 09 28 2A 4C 6F 67 69 63 61 6C 20 h=80;.(*Logical
01B350: 73 63 72 65 65 6E 20 77 69 64 74 68 20 0D 0A 09 screen width ...
01B360: 09 09 09 28 6D 61 6E 79 20 70 65 6F 70 6C 65 20 ...(many people
01B370: 6F 6E 6C 79 20 68 61 76 65 20 38 30 29 2A 29 0D only have 80)*).
01B380: 0A 09 52 6F 77 57 69 64 74 68 3D 38 30 3B 09 09 ..RowWidth=80;..
01B390: 28 2A 77 69 64 74 68 20 6F 66 20 6D 65 6D 6F 72 (*width of memor
01B3A0: 79 20 66 6F 72 20 6F 6E 65 20 72 6F 77 20 0D 0A y for one row ..
01B3B0: 09 09 09 09 28 69 2E 65 2E 20 6E 75 6D 62 65 72 ....(i.e. number
01B3C0: 20 6F 66 20 62 79 74 65 73 2A 29 0D 0A 09 4C 6F of bytes*)...Lo
01B3D0: 67 53 63 72 65 65 6E 44 65 70 74 68 3D 32 34 3B gScreenDepth=24;
01B3E0: 09 09 28 2A 4C 69 6E 65 73 20 6F 6E 20 74 68 65 ..(*Lines on the
01B3F0: 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 68 61 72 screen*)...Char
01B400: 20 43 68 61 6E 67 65 64 20 54 48 45 4E 0D 0A 09 Changed THEN...
01B410: 09 09 09 09 09 45 58 49 54 0D 0A 09 09 09 09 09 .....EXIT.......
01B420: 09 45 4E 44 3B 0D 0A 09 09 09 09 09 4D 61 74 63 .END;.......Matc
01B430: 68 52 69 67 68 74 3A 3D 50 61 74 74 65 72 6E 28 hRight:=Pattern(
01B440: 53 65 63 6F 6E 64 2C 73 2C 50 6F 73 29 0D 0A 09 Second,s,Pos)...
01B450: 09 09 09 09 49 46 20 4D 61 74 63 68 52 69 67 68 ....IF MatchRigh
01B460: 74 3C 3E 4E 49 4C 20 54 48 45 4E 0D 0A 09 09 09 t<>NIL THEN.....
01B470: 09 09 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A ...RETURN TRUE..
01B480: 09 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 09 ......END;......
01B490: 09 43 68 61 6E 67 65 64 3A 3D 46 41 4C 53 45 3B .Changed:=FALSE;
01B4A0: 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 .......END;.....
01B4B0: 09 45 4E 44 3B 0D 0A 09 09 09 50 6F 73 3A 3D 53 .END;.....Pos:=S
01B4C0: 74 61 72 74 50 6F 73 3B 0D 0A 09 09 09 52 45 54 tartPos;.....RET
01B4D0: 55 52 4E 20 46 41 4C 53 45 0D 0A 09 09 09 7C 09 URN FALSE.....|.
01B4E0: 09 09 0D 0A 09 09 52 69 67 68 74 4C 69 6D 69 74 ......RightLimit
01B4F0: 3A 0D 0A 09 09 09 52 45 54 55 52 4E 20 50 6F 73 :.....RETURN Pos
01B500: 3D 4C 65 6E 0D 0A 09 09 09 45 4E 44 3B 20 28 2A =Len.....END; (*
01B510: 43 41 53 45 2A 29 0D 0A 09 09 45 4E 44 20 28 2A CASE*)....END (*
01B520: 57 49 54 48 2A 29 0D 0A 09 45 4E 44 20 50 3B 0D WITH*)...END P;.
01B530: 0A 42 45 47 49 4E 0D 0A 09 49 46 20 50 28 29 20 .BEGIN...IF P()
01B540: 54 48 45 4E 0D 0A 09 09 4E 45 57 28 51 29 3B 0D THEN....NEW(Q);.
01B550: 0A 09 09 57 49 54 48 20 51 5E 20 44 4F 0D 0A 09 ...WITH Q^ DO...
01B560: 09 09 53 74 61 74 75 73 3A 3D 4D 61 74 63 68 53 ..Status:=MatchS
01B570: 74 61 74 75 73 3B 0D 0A 09 09 09 50 61 74 74 65 tatus;.....Patte
01B580: 72 6E 4E 6F 64 65 3A 3D 70 3B 0D 0A 09 09 09 4D rnNode:=p;.....M
01B590: 61 74 63 68 65 64 41 74 3A 3D 53 74 61 72 74 50 atchedAt:=StartP
01B5A0: 6F 73 3B 0D 0A 09 09 09 4D 61 74 63 68 65 64 54 os;.....MatchedT
01B5B0: 6F 3A 3D 50 6F 73 3B 0D 0A 09 09 09 4C 65 66 74 o:=Pos;.....Left
01B5C0: 3A 3D 4D 61 74 63 68 4C 65 66 74 3B 0D 0A 09 09 :=MatchLeft;....
01B5D0: 09 52 69 67 68 74 3A 3D 4D 61 74 63 68 52 69 67 .Right:=MatchRig
01B5E0: 68 74 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 45 ht;.....END;...E
01B5F0: 4C 53 45 0D 0A 09 09 51 3A 3D 4E 49 4C 3B 0D 0A LSE....Q:=NIL;..
01B600: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
01B610: 17 00 01 00 02 09 52 E5 17 00 C9 02 00 00 00 02 ......R.........
01B620: 17 00 C5 02 00 00 00 02 17 00 C1 02 00 00 00 02 ................
01B630: 17 00 C6 02 00 00 00 02 17 00 C2 02 00 00 00 02 ................
01B640: 17 00 C7 02 00 00 00 02 17 00 C3 02 00 00 00 02 ................
01B650: 17 00 C8 02 00 00 00 02 17 00 C4 02 00 00 00 02 ................
01B660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B670: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B690: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B700: 6E 65 65 64 20 61 6C 74 65 72 61 74 69 6F 6E 20 need alteration
01B710: 66 6F 72 20 76 61 72 69 6F 75 73 20 6D 61 63 68 for various mach
01B720: 69 6E 65 73 2A 29 0D 0A 42 45 47 49 4E 0D 0A 20 ines*)..BEGIN..
01B730: 20 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62 IF OutputEnab
01B740: 6C 65 64 20 54 48 45 4E 0D 0A 09 46 6C 75 73 68 led THEN...Flush
01B750: 42 75 66 66 65 72 3B 0D 0A 09 43 6C 65 61 72 43 Buffer;...ClearC
01B760: 75 72 73 6F 72 3B 0D 0A 09 43 41 53 45 20 73 20 ursor;...CASE s
01B770: 4F 46 0D 0A 09 44 69 6D 3A 48 61 6C 66 49 6E 74 OF...Dim:HalfInt
01B780: 65 6E 73 69 74 79 3A 3D 54 52 55 45 7C 0D 0A 09 ensity:=TRUE|...
01B790: 42 72 69 67 68 74 3A 09 48 61 6C 66 49 6E 74 65 Bright:.HalfInte
01B7A0: 6E 73 69 74 79 3A 3D 46 41 4C 53 45 0D 0A 09 09 nsity:=FALSE....
01B7B0: 45 6E 68 61 6E 63 65 64 56 69 64 65 6F 3A 3D 54 EnhancedVideo:=T
01B7C0: 52 55 45 7C 0D 0A 09 4E 6F 72 6D 61 6C 3A 09 48 RUE|...Normal:.H
01B7D0: 61 6C 66 49 6E 74 65 6E 73 69 74 79 3A 3D 46 41 alfIntensity:=FA
01B7E0: 4C 53 45 3B 0D 0A 09 09 45 6E 68 61 6E 63 65 64 LSE;....Enhanced
01B7F0: 56 69 64 65 6F 3A 3D 46 41 4C 53 45 3B 0D 0A 09 Video:=FALSE;...
01B800: 09 49 6E 76 65 72 73 65 56 69 64 65 6F 3A 3D 46 .InverseVideo:=F
01B810: 41 4C 53 45 3B 0D 0A 09 09 42 6C 69 6E 6B 69 6E ALSE;....Blinkin
01B820: 67 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 55 6E 64 g:=FALSE;....Und
01B830: 65 72 4C 69 6E 65 3A 3D 46 41 4C 53 45 7C 0D 0A erLine:=FALSE|..
01B840: 09 49 6E 76 65 72 73 65 3A 49 6E 76 65 72 73 65 .Inverse:Inverse
01B850: 56 69 64 65 6F 3A 3D 54 52 55 45 7C 0D 0A 09 42 Video:=TRUE|...B
01B860: 6C 69 6E 6B 3A 42 6C 69 6E 6B 69 6E 67 3A 3D 54 link:Blinking:=T
01B870: 52 55 45 7C 0D 0A 09 53 74 61 72 74 47 72 61 70 RUE|...StartGrap
01B880: 68 2C 45 6E 64 47 72 61 70 68 3A 28 2A 64 6F 20 h,EndGraph:(*do
01B890: 6E 6F 74 68 69 6E 67 2A 29 7C 0D 0A 09 44 65 6C nothing*)|...Del
01B8A0: 43 68 61 72 3A 28 2A 4D 6F 76 65 20 72 65 73 74 Char:(*Move rest
01B8B0: 20 6F 66 20 6C 69 6E 65 20 75 70 20 6F 6E 65 2C of line up one,
01B8C0: 20 61 64 64 20 62 6C 61 6E 6B 20 74 6F 20 65 6E add blank to en
01B8D0: 64 2A 29 0D 0A 09 09 69 3A 3D 43 6F 6C 4E 6F 3B d*)....i:=ColNo;
01B8E0: 0D 0A 09 09 46 4F 52 20 6A 3A 3D 43 6F 6C 4E 6F ....FOR j:=ColNo
01B8F0: 20 54 4F 20 52 6F 77 57 69 64 74 68 2D 32 20 44 TO RowWidth-2 D
01B900: 61 72 64 27 20 53 63 72 65 65 6E 20 69 73 20 38 ard' Screen is 8
01B910: 30 20 62 79 20 32 34 2E 20 54 68 65 20 6C 69 6D 0 by 24. The lim
01B920: 69 74 20 69 73 20 73 65 74 20 62 79 0D 0A 09 09 it is set by....
01B930: 74 68 65 20 74 65 72 6D 69 6E 61 6C 20 64 65 66 the terminal def
01B940: 69 6E 69 74 69 6F 6E 20 66 69 6C 65 09 2A 29 0D inition file.*).
01B950: 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F .BEGIN.. IF O
01B960: 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45 utputEnabled THE
01B970: 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B N...ClearCursor;
01B980: 0D 0A 09 43 6F 6C 4E 6F 3A 3D 78 3B 0D 0A 09 52 ...ColNo:=x;...R
01B990: 6F 77 4E 6F 3A 3D 79 3B 0D 0A 09 53 63 72 65 65 owNo:=y;...Scree
01B9A0: 6E 50 6F 73 3A 3D 43 6F 6C 4E 6F 2B 52 6F 77 4E nPos:=ColNo+RowN
01B9B0: 6F 2A 43 68 61 72 49 6E 63 72 65 6D 65 6E 74 2A o*CharIncrement*
01B9C0: 52 6F 77 57 69 64 74 68 3B 0D 0A 09 49 46 20 53 RowWidth;...IF S
01B9D0: 63 72 65 65 6E 50 6F 73 3E 3D 53 63 72 65 65 6E creenPos>=Screen
01B9E0: 53 69 7A 65 20 54 48 45 4E 0D 0A 09 09 43 6F 6C Size THEN....Col
01B9F0: 4E 6F 3A 3D 30 3B 0D 0A 09 09 52 6F 77 4E 6F 3A No:=0;....RowNo:
01BA00: 3D 30 3B 0D 0A 09 09 53 63 72 65 65 6E 50 6F 73 =0;....ScreenPos
01BA10: 3A 3D 30 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 :=0;....END;...E
01BA20: 4E 44 3B 0D 0A 20 20 20 20 46 6C 75 73 68 42 75 ND;.. FlushBu
01BA30: 66 66 65 72 3B 0D 0A 20 20 20 20 45 4E 44 20 47 ffer;.. END G
01BA40: 6F 74 6F 78 79 3B 0D 0A 0D 0A 50 52 4F 43 45 44 otoxy;....PROCED
01BA50: 55 52 45 20 50 75 74 61 6E 64 49 6E 63 28 63 68 URE PutandInc(ch
01BA60: 3A 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09 6F 75 :CHAR);....(*.ou
01BA70: 74 70 75 74 20 61 20 63 68 61 72 61 63 74 65 72 tput a character
01BA80: 20 61 6E 64 20 69 6E 63 72 65 6D 65 6E 74 20 70 and increment p
01BA90: 6F 69 6E 74 65 72 73 2A 29 0D 0A 0D 0A 42 45 47 ointers*)....BEG
01BAA0: 49 4E 0D 0A 09 49 46 20 42 75 66 66 65 72 43 6F IN...IF BufferCo
01BAB0: 75 6E 74 3D 30 20 54 48 45 4E 0D 0A 09 09 42 75 unt=0 THEN....Bu
01BAC0: 66 66 65 72 52 6F 77 3A 3D 52 6F 77 4E 6F 3B 0D fferRow:=RowNo;.
01BAD0: 0A 09 09 42 75 66 66 65 72 43 6F 6C 3A 3D 43 6F ...BufferCol:=Co
01BAE0: 6C 4E 6F 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 lNo;....END;...I
01BAF0: 46 20 28 42 75 66 66 65 72 52 6F 77 3C 3E 52 6F F (BufferRow<>Ro
01BB00: 4E 41 4C 3B 09 28 2A 6E 65 78 74 20 63 68 61 72 NAL;.(*next char
01BB10: 61 63 74 65 72 20 70 6F 73 69 74 69 6F 6E 20 6F acter position o
01BB20: 6E 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 6F 6C n screen*)...Col
01BB30: 4E 6F 2C 52 6F 77 4E 6F 3A 43 41 52 44 49 4E 41 No,RowNo:CARDINA
01BB40: 4C 3B 09 28 2A 77 68 69 63 68 20 72 65 70 72 65 L;.(*which repre
01BB50: 73 65 6E 74 73 20 74 68 65 20 67 69 76 65 6E 20 sents the given
01BB60: 70 6F 73 69 74 69 6F 6E 2A 29 0D 0A 0D 0A 09 28 position*).....(
01BB70: 2A 09 43 6F 6E 74 72 6F 6C 20 61 74 74 72 69 62 *.Control attrib
01BB80: 75 74 65 73 2A 29 0D 0A 0D 0A 09 48 61 6C 66 49 utes*).....HalfI
01BB90: 6E 74 65 6E 73 69 74 79 3A 42 4F 4F 4C 45 41 4E ntensity:BOOLEAN
01BBA0: 3D 46 41 4C 53 45 3B 09 28 2A 74 72 75 65 20 69 =FALSE;.(*true i
01BBB0: 66 20 69 6E 20 68 61 6C 66 20 69 6E 74 65 6E 73 f in half intens
01BBC0: 69 74 79 20 6D 6F 64 65 2A 29 0D 0A 09 45 6E 68 ity mode*)...Enh
01BBD0: 61 6E 63 65 64 56 69 64 65 6F 3A 42 4F 4F 4C 45 ancedVideo:BOOLE
01BBE0: 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 55 6E 64 65 AN=FALSE;...Unde
01BBF0: 72 4C 69 6E 65 3A 42 4F 4F 4C 45 41 4E 3D 46 41 rLine:BOOLEAN=FA
01BC00: 4C 53 45 3B 09 28 2A 74 72 75 65 20 69 66 20 69 LSE;.(*true if i
01BC10: 6E 20 75 6E 64 65 72 6C 69 6E 65 20 6D 6F 64 65 n underline mode
01BC20: 2A 29 0D 0A 09 49 6E 76 65 72 73 65 56 69 64 65 *)...InverseVide
01BC30: 6F 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B o:BOOLEAN=FALSE;
01BC40: 0D 0A 09 42 6C 69 6E 6B 69 6E 67 3A 42 4F 4F 4C ...Blinking:BOOL
01BC50: 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 69 2C 6A EAN=FALSE;...i,j
01BC60: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 63 68 3A :CARDINAL;...ch:
01BC70: 43 48 41 52 3B 0D 0A 0D 0A 28 2A 09 54 68 65 20 CHAR;....(*.The
01BC80: 6E 65 78 74 20 66 65 77 20 72 6F 75 74 69 6E 65 next few routine
01BC90: 73 20 68 61 6E 64 6C 65 20 74 68 65 20 63 75 72 s handle the cur
01BCA0: 73 6F 72 0D 0A 0D 0A 09 57 61 73 55 6E 64 65 72 sor.....WasUnder
01BCB0: 4C 69 6E 65 64 20 69 73 20 74 72 75 65 20 69 66 Lined is true if
01BCC0: 20 74 68 65 20 63 68 61 72 61 63 74 65 72 20 75 the character u
01BCD0: 6E 64 65 72 20 74 68 65 20 63 75 72 73 6F 72 0D nder the cursor.
01BCE0: 0A 09 73 74 61 72 74 65 64 20 6F 75 74 20 75 6E ..started out un
01BCF0: 64 65 72 6C 69 6E 65 64 0D 0A 09 0D 0A 09 54 69 derlined......Ti
01BD00: 77 4E 6F 29 20 4F 52 20 28 42 75 66 66 65 72 43 wNo) OR (BufferC
01BD10: 6F 6C 2A 32 2B 42 75 66 66 65 72 43 6F 75 6E 74 ol*2+BufferCount
01BD20: 3C 3E 32 2A 43 6F 6C 4E 6F 29 0D 0A 09 09 4F 52 <>2*ColNo)....OR
01BD30: 20 28 42 75 66 66 65 72 43 6F 75 6E 74 3D 31 32 (BufferCount=12
01BD40: 36 29 20 54 48 45 4E 20 0D 0A 09 09 46 6C 75 73 6) THEN ....Flus
01BD50: 68 42 75 66 66 65 72 3B 0D 0A 09 09 45 4E 44 3B hBuffer;....END;
01BD60: 0D 0A 09 49 46 20 42 75 66 66 65 72 43 6F 75 6E ...IF BufferCoun
01BD70: 74 3D 30 20 54 48 45 4E 0D 0A 09 09 42 75 66 66 t=0 THEN....Buff
01BD80: 65 72 52 6F 77 3A 3D 52 6F 77 4E 6F 3B 0D 0A 09 erRow:=RowNo;...
01BD90: 09 42 75 66 66 65 72 43 6F 6C 3A 3D 43 6F 6C 4E .BufferCol:=ColN
01BDA0: 6F 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 42 75 66 o;....END;...Buf
01BDB0: 66 65 72 5B 42 75 66 66 65 72 43 6F 75 6E 74 5D fer[BufferCount]
01BDC0: 3A 3D 4F 52 44 28 63 68 29 3B 0D 0A 09 49 4E 43 :=ORD(ch);...INC
01BDD0: 28 42 75 66 66 65 72 43 6F 75 6E 74 29 3B 0D 0A (BufferCount);..
01BDE0: 09 42 75 66 66 65 72 5B 42 75 66 66 65 72 43 6F .Buffer[BufferCo
01BDF0: 75 6E 74 5D 3A 3D 41 74 74 72 69 62 75 74 65 73 unt]:=Attributes
01BE00: 3B 0D 0A 09 49 4E 43 28 42 75 66 66 65 72 43 6F ;...INC(BufferCo
01BE10: 75 6E 74 29 3B 0D 0A 09 53 63 72 65 65 6E 50 6F unt);...ScreenPo
01BE20: 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B 43 68 61 s:=ScreenPos+Cha
01BE30: 72 49 6E 63 72 65 6D 65 6E 74 3B 0D 0A 09 49 4E rIncrement;...IN
01BE40: 43 28 43 6F 6C 4E 6F 29 3B 0D 0A 09 49 46 20 43 C(ColNo);...IF C
01BE50: 6F 6C 4E 6F 3E 3D 4C 6F 67 53 63 72 65 65 6E 57 olNo>=LogScreenW
01BE60: 69 64 74 68 20 54 48 45 4E 0D 0A 09 09 49 46 20 idth THEN....IF
01BE70: 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 72 65 65 6E RowNo<(LogScreen
01BE80: 44 65 70 74 68 2D 31 29 20 54 48 45 4E 0D 0A 09 Depth-1) THEN...
01BE90: 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 ..INC(RowNo);...
01BEA0: 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 09 45 ..ColNo:=0;....E
01BEB0: 4C 53 45 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E LSE.....DEC(ColN
01BEC0: 6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 o);.....DEC(Scre
01BED0: 65 6E 50 6F 73 29 3B 0D 0A 09 09 09 45 4E 44 3B enPos);.....END;
01BEE0: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 50 ....END;...END P
01BEF0: 75 74 61 6E 64 49 6E 63 3B 0D 0A 0D 0A 50 52 4F utandInc;....PRO
01BF00: 6D 65 54 6F 43 68 61 6E 67 65 20 69 73 20 61 20 meToChange is a
01BF10: 63 6F 75 6E 74 65 72 20 74 68 61 74 20 64 65 74 counter that det
01BF20: 65 72 6D 69 6E 65 73 20 77 68 65 6E 20 74 68 65 ermines when the
01BF30: 20 63 75 72 73 6F 72 20 73 68 6F 75 6C 64 0D 0A cursor should..
01BF40: 09 62 65 20 63 68 61 6E 67 65 64 20 66 72 6F 6D .be changed from
01BF50: 20 69 74 73 20 63 75 72 72 65 6E 74 20 76 61 6C its current val
01BF60: 75 65 20 74 6F 20 69 74 73 20 6E 65 67 61 74 69 ue to its negati
01BF70: 76 65 2C 20 74 6F 20 61 6C 6C 6F 77 20 62 6C 69 ve, to allow bli
01BF80: 6E 6B 69 6E 67 0D 0A 2A 29 0D 0A 56 41 52 09 57 nking..*)..VAR.W
01BF90: 61 73 55 6E 64 65 72 4C 69 6E 65 64 3A 42 4F 4F asUnderLined:BOO
01BFA0: 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 54 69 LEAN=FALSE;...Ti
01BFB0: 6D 65 54 6F 43 68 61 6E 67 65 3A 49 4E 54 45 47 meToChange:INTEG
01BFC0: 45 52 3D 30 3B 0D 0A 09 4F 75 74 70 75 74 45 6E ER=0;...OutputEn
01BFD0: 61 62 6C 65 64 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A abled:BOOLEAN;..
01BFE0: 09 70 3A 50 61 63 6B 65 74 3B 0D 0A 28 2A 09 42 .p:Packet;..(*.B
01BFF0: 6C 69 6E 6B 20 63 75 72 73 6F 72 20 2D 20 64 65 link cursor - de
01C000: 63 72 65 6D 65 6E 74 20 74 69 6D 65 72 2C 20 69 crement timer, i
01C010: 66 20 6E 65 67 61 74 69 76 65 20 72 65 73 65 74 f negative reset
01C020: 20 61 6E 64 0D 0A 09 63 68 61 6E 67 65 20 74 6F and...change to
01C030: 70 20 62 69 74 20 6F 66 20 63 68 61 72 61 63 74 p bit of charact
01C040: 65 72 20 75 6E 64 65 72 20 63 75 72 73 6F 72 2A er under cursor*
01C050: 29 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 )..PROCEDURE Set
01C060: 43 75 72 73 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A Cursor;..BEGIN..
01C070: 28 2A 09 4D 6F 76 65 20 63 75 72 73 6F 72 20 74 (*.Move cursor t
01C080: 6F 20 63 75 72 72 65 6E 74 20 73 63 72 65 65 6E o current screen
01C090: 20 70 6F 73 69 74 69 6F 6E 20 2A 29 0D 0A 0D 0A position *)....
01C0A0: 09 57 49 54 48 20 70 20 44 4F 0D 0A 09 09 41 58 .WITH p DO....AX
01C0B0: 3A 3D 30 32 30 30 68 3B 0D 0A 09 09 44 58 3A 3D :=0200h;....DX:=
01C0C0: 32 35 36 2A 52 6F 77 4E 6F 2B 43 6F 6C 4E 6F 3B 256*RowNo+ColNo;
01C0D0: 0D 0A 09 09 42 58 3A 3D 30 3B 0D 0A 09 09 45 4E ....BX:=0;....EN
01C0E0: 44 3B 0D 0A 09 49 6E 74 28 70 29 3B 0D 0A 09 0D D;...Int(p);....
01C0F0: 0A 0D 0A 28 2A 09 57 61 73 55 6E 64 65 72 4C 69 ...(*.WasUnderLi
01C100: 43 45 44 55 52 45 20 57 72 69 74 65 28 63 68 3A CEDURE Write(ch:
01C110: 43 48 41 52 29 3B 0D 0A 28 2A 09 57 72 69 74 65 CHAR);..(*.Write
01C120: 20 61 20 63 68 61 72 61 63 74 65 72 0D 0A 0D 0A a character....
01C130: 09 54 68 69 73 20 72 6F 75 74 69 6E 65 20 69 73 .This routine is
01C140: 20 75 73 65 64 20 62 79 20 74 65 72 6D 69 6E 61 used by termina
01C150: 6C 20 77 68 65 6E 20 74 68 69 73 20 76 65 72 73 l when this vers
01C160: 69 6F 6E 20 6F 66 20 53 63 72 65 65 6E 49 4F 20 ion of ScreenIO
01C170: 0D 0A 09 69 73 20 69 6E 20 75 73 65 20 62 65 63 ...is in use bec
01C180: 61 75 73 65 20 61 20 66 6C 61 67 20 69 73 20 73 ause a flag is s
01C190: 65 74 20 62 79 20 74 68 65 20 69 6E 69 74 69 61 et by the initia
01C1A0: 6C 69 73 61 74 69 6F 6E 20 6F 66 20 74 68 69 73 lisation of this
01C1B0: 20 6D 6F 64 75 6C 65 20 0D 0A 09 74 6F 67 65 74 module ...toget
01C1C0: 68 65 72 20 77 69 74 68 20 74 68 65 20 61 64 64 her with the add
01C1D0: 72 65 73 73 20 6F 66 20 74 68 69 73 20 72 6F 75 ress of this rou
01C1E0: 74 69 6E 65 0D 0A 0D 0A 2A 29 0D 0A 42 45 47 49 tine....*)..BEGI
01C1F0: 4E 0D 0A 20 20 20 20 49 46 20 4F 75 74 70 75 74 N.. IF Output
01C200: 45 6E 61 62 6C 65 64 20 54 48 45 4E 0D 0A 09 43 Enabled THEN...C
01C210: 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 09 49 46 learCursor;...IF
01C220: 20 63 68 3E 30 37 66 78 20 54 48 45 4E 20 63 68 ch>07fx THEN ch
01C230: 3A 3D 43 48 52 28 4F 52 44 28 63 68 29 2D 31 32 :=CHR(ORD(ch)-12
01C240: 38 29 20 45 4E 44 3B 0D 0A 09 49 46 20 63 68 3D 8) END;...IF ch=
01C250: 43 52 20 54 48 45 4E 0D 0A 09 09 53 63 72 65 65 CR THEN....Scree
01C260: 6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2D nPos:=ScreenPos-
01C270: 43 6F 6C 4E 6F 3B 0D 0A 09 09 43 6F 6C 4E 6F 3A ColNo;....ColNo:
01C280: 3D 30 3B 0D 0A 09 45 4C 53 49 46 20 63 68 3D 4C =0;...ELSIF ch=L
01C290: 46 20 54 48 45 4E 0D 0A 09 09 49 46 20 52 6F 77 F THEN....IF Row
01C2A0: 4E 6F 3C 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 No<(LogScreenDep
01C2B0: 74 68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 49 th-1) THEN.....I
01C2C0: 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 NC(RowNo);.....S
01C2D0: 63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E creenPos:=Screen
01C2E0: 50 6F 73 2B 52 6F 77 57 69 64 74 68 3B 0D 0A 09 Pos+RowWidth;...
01C2F0: 09 09 45 4E 44 0D 0A 09 45 4C 53 49 46 20 63 68 ..END...ELSIF ch
01C300: 6E 65 64 3A 3D 53 63 72 65 65 6E 5B 53 63 72 65 ned:=Screen[Scre
01C310: 65 6E 50 6F 73 5D 3E 3D 38 30 78 3B 0D 0A 09 53 enPos]>=80x;...S
01C320: 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D creen[ScreenPos]
01C330: 3A 3D 43 48 52 28 4F 52 44 28 53 63 72 65 65 6E :=CHR(ORD(Screen
01C340: 5B 53 63 72 65 65 6E 50 6F 73 5D 29 2B 31 32 38 [ScreenPos])+128
01C350: 29 3B 2A 29 0D 0A 09 45 4E 44 20 53 65 74 43 75 );*)...END SetCu
01C360: 72 73 6F 72 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 rsor;....PROCEDU
01C370: 52 45 20 46 6C 75 73 68 42 75 66 66 65 72 3B 0D RE FlushBuffer;.
01C380: 0A 56 41 52 09 70 3A 50 61 63 6B 65 74 3B 0D 0A .VAR.p:Packet;..
01C390: 42 45 47 49 4E 0D 0A 09 49 46 20 42 75 66 66 65 BEGIN...IF Buffe
01C3A0: 72 43 6F 75 6E 74 3E 30 20 54 48 45 4E 20 0D 0A rCount>0 THEN ..
01C3B0: 09 09 57 49 54 48 20 70 20 44 4F 0D 0A 09 09 09 ..WITH p DO.....
01C3C0: 49 6E 74 4E 6F 3A 3D 42 75 66 66 65 72 43 6F 75 IntNo:=BufferCou
01C3D0: 6E 74 3B 0D 0A 09 09 09 41 58 3A 3D 41 44 52 28 nt;.....AX:=ADR(
01C3E0: 42 75 66 66 65 72 29 3B 0D 0A 09 09 09 42 58 3A Buffer);.....BX:
01C3F0: 3D 42 75 66 66 65 72 52 6F 77 2A 31 36 30 2B 42 =BufferRow*160+B
01C400: 75 66 66 65 72 43 6F 6C 2A 32 3B 0D 0A 09 09 09 ufferCol*2;.....
01C410: 43 58 3A 3D 42 61 73 65 41 64 64 72 3B 0D 0A 09 CX:=BaseAddr;...
01C420: 09 09 52 65 61 64 4F 72 57 72 69 74 65 28 54 52 ..ReadOrWrite(TR
01C430: 55 45 2C 70 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D UE,p);.....END;.
01C440: 0A 09 09 45 4E 44 3B 0D 0A 09 42 75 66 66 65 72 ...END;...Buffer
01C450: 43 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 53 65 74 43 Count:=0;...SetC
01C460: 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 20 46 6C 75 ursor;...END Flu
01C470: 73 68 42 75 66 66 65 72 3B 0D 0A 0D 0A 50 52 4F shBuffer;....PRO
01C480: 43 45 44 55 52 45 20 42 6C 69 6E 6B 43 75 72 73 CEDURE BlinkCurs
01C490: 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 28 2A 09 09 or;..BEGIN..(*..
01C4A0: 44 6F 65 73 20 6E 6F 74 68 69 6E 67 20 28 79 65 Does nothing (ye
01C4B0: 74 29 20 6F 6E 20 45 61 72 74 68 20 63 61 72 64 t) on Earth card
01C4C0: 20 76 65 72 73 69 6F 6E 20 0D 0A 09 44 45 43 28 version ...DEC(
01C4D0: 54 69 6D 65 54 6F 43 68 61 6E 67 65 29 3B 0D 0A TimeToChange);..
01C4E0: 09 49 46 20 54 69 6D 65 54 6F 43 68 61 6E 67 65 .IF TimeToChange
01C4F0: 3C 30 20 54 48 45 4E 0D 0A 09 09 54 69 6D 65 54 <0 THEN....TimeT
01C500: 3D 42 53 20 54 48 45 4E 0D 0A 09 09 49 46 20 43 =BS THEN....IF C
01C510: 6F 6C 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09 olNo>0 THEN.....
01C520: 44 45 43 28 43 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 DEC(ColNo);.....
01C530: 44 45 43 28 53 63 72 65 65 6E 50 6F 73 29 3B 0D DEC(ScreenPos);.
01C540: 0A 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49 46 20 ....END...ELSIF
01C550: 63 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 09 4C ch=TAB THEN....L
01C560: 4F 4F 50 0D 0A 09 09 09 49 46 20 43 6F 6C 4E 6F OOP.....IF ColNo
01C570: 3E 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68 >=LogScreenWidth
01C580: 2D 31 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 -1 THEN EXIT END
01C590: 3B 0D 0A 09 09 09 50 75 74 61 6E 64 49 6E 63 28 ;.....PutandInc(
01C5A0: 27 20 27 29 3B 0D 0A 09 09 09 49 46 20 49 41 4E ' ');.....IF IAN
01C5B0: 44 28 43 6F 6C 4E 6F 2C 37 29 3D 30 20 54 48 45 D(ColNo,7)=0 THE
01C5C0: 4E 20 45 58 49 54 20 45 4E 44 0D 0A 09 09 09 45 N EXIT END.....E
01C5D0: 4E 44 20 28 2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4C ND (*LOOP*)...EL
01C5E0: 53 45 0D 0A 09 09 49 46 20 55 6E 64 65 72 4C 69 SE....IF UnderLi
01C5F0: 6E 65 20 4F 52 20 45 6E 68 61 6E 63 65 64 56 69 ne OR EnhancedVi
01C600: 64 65 6F 20 4F 52 20 42 6C 69 6E 6B 69 6E 67 20 deo OR Blinking
01C610: 4F 52 20 49 6E 76 65 72 73 65 56 69 64 65 6F 20 OR InverseVideo
01C620: 54 48 45 4E 0D 0A 09 09 09 41 74 74 72 69 62 75 THEN.....Attribu
01C630: 74 65 73 3A 3D 31 3B 0D 0A 09 09 09 45 4E 44 3B tes:=1;.....END;
01C640: 0D 0A 09 09 50 75 74 61 6E 64 49 6E 63 28 63 68 ....PutandInc(ch
01C650: 29 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 4E 6F 74 );....END; (*Not
01C660: 20 43 52 20 6F 72 20 4C 46 20 6F 72 20 54 41 42 CR or LF or TAB
01C670: 2A 29 0D 0A 09 41 74 74 72 69 62 75 74 65 73 3A *)...Attributes:
01C680: 3D 37 3B 0D 0A 09 53 65 74 43 75 72 73 6F 72 3B =7;...SetCursor;
01C690: 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45 4E 44 ...END;.. END
01C6A0: 20 57 72 69 74 65 3B 0D 0A 0D 0A 50 52 4F 43 45 Write;....PROCE
01C6B0: 44 55 52 45 20 53 63 72 65 65 6E 43 6F 6E 74 72 DURE ScreenContr
01C6C0: 6F 6C 28 73 3A 45 64 69 74 73 29 3B 0D 0A 0D 0A ol(s:Edits);....
01C6D0: 28 2A 09 09 50 65 72 66 6F 72 6D 20 61 20 73 63 (*..Perform a sc
01C6E0: 72 65 65 6E 20 63 6F 6E 74 72 6F 6C 20 6F 70 65 reen control ope
01C6F0: 72 61 74 69 6F 6E 0D 0A 0D 0A 09 09 4D 61 79 20 ration......May
01C700: 6F 43 68 61 6E 67 65 3A 3D 39 30 30 3B 09 28 2A oChange:=900;.(*
01C710: 63 68 61 6E 67 65 20 74 6F 20 63 68 61 6E 67 65 change to change
01C720: 20 62 6C 69 6E 6B 20 72 61 74 65 2A 29 0D 0A 09 blink rate*)...
01C730: 09 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F .Screen[ScreenPo
01C740: 73 5D 3A 3D 43 48 52 28 4F 52 44 28 53 63 72 65 s]:=CHR(ORD(Scre
01C750: 65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 29 2B 31 en[ScreenPos])+1
01C760: 32 38 29 0D 0A 09 09 45 4E 44 0D 0A 2A 29 0D 0A 28)....END..*)..
01C770: 09 46 6C 75 73 68 42 75 66 66 65 72 3B 0D 0A 09 .FlushBuffer;...
01C780: 45 4E 44 20 42 6C 69 6E 6B 43 75 72 73 6F 72 3B END BlinkCursor;
01C790: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C ....PROCEDURE Cl
01C7A0: 65 61 72 43 75 72 73 6F 72 3B 0D 0A 42 45 47 49 earCursor;..BEGI
01C7B0: 4E 0D 0A 28 2A 09 41 6C 73 6F 20 75 6E 2D 69 6D N..(*.Also un-im
01C7C0: 70 6C 65 6D 65 6E 74 65 64 0D 0A 0D 0A 09 49 46 plemented.....IF
01C7D0: 20 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 (Screen[ScreenP
01C7E0: 6F 73 5D 3E 37 66 78 29 3C 3E 57 61 73 55 6E 64 os]>7fx)<>WasUnd
01C7F0: 65 72 4C 69 6E 65 64 20 54 48 45 4E 0D 0A 09 09 erLined THEN....
01C800: 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 Screen[ScreenPos
01C810: 5D 3A 3D 43 48 52 28 4F 52 44 28 53 63 72 65 65 ]:=CHR(ORD(Scree
01C820: 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 29 2B 31 32 n[ScreenPos])+12
01C830: 38 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 61 8);....END;...Wa
01C840: 73 55 6E 64 65 72 4C 69 6E 65 64 3A 3D 46 41 4C sUnderLined:=FAL
01C850: 53 45 3B 0D 0A 2A 29 0D 0A 09 45 4E 44 20 43 6C SE;..*)...END Cl
01C860: 65 61 72 43 75 72 73 6F 72 3B 0D 0A 09 09 09 0D earCursor;......
01C870: 0A 09 09 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 ......PROCEDURE
01C880: 47 6F 74 6F 78 79 28 78 2C 79 3A 43 41 52 44 49 Gotoxy(x,y:CARDI
01C890: 4E 41 4C 29 3B 09 09 0D 0A 0D 0A 28 2A 09 09 50 NAL);......(*..P
01C8A0: 6F 73 69 74 69 6F 6E 20 74 6F 20 67 69 76 65 6E osition to given
01C8B0: 20 63 6F 6F 72 64 69 6E 61 74 65 73 0D 0A 09 09 coordinates....
01C8C0: 74 6F 70 20 6C 65 66 74 20 69 73 20 61 6C 77 61 top left is alwa
01C8D0: 79 73 20 30 2C 30 20 0D 0A 0D 0A 09 09 78 20 69 ys 0,0 ......x i
01C8E0: 73 20 63 6F 6C 75 6D 6E 2C 20 79 20 69 73 20 72 s column, y is r
01C8F0: 6F 77 0D 0A 0D 0A 09 09 41 20 27 53 74 61 6E 64 ow......A 'Stand
01C900: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
01C910: 18 00 01 00 02 09 52 E5 18 00 C9 02 00 00 00 02 ......R.........
01C920: 18 00 C5 02 00 00 00 02 18 00 C1 02 00 00 00 02 ................
01C930: 18 00 C6 02 00 00 00 02 18 00 C2 02 00 00 00 02 ................
01C940: 18 00 C7 02 00 00 00 02 18 00 C3 02 00 00 00 02 ................
01C950: 18 00 C8 02 00 00 00 02 18 00 C4 02 00 00 00 02 ................
01C960: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C990: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01CA00: 20 79 31 2D 31 20 20 44 4F 0D 0A 09 09 47 6F 74 y1-1 DO....Got
01CA10: 6F 78 79 28 78 32 2C 69 29 3B 0D 0A 09 09 53 63 oxy(x2,i);....Sc
01CA20: 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 reenControl(Vert
01CA30: 69 63 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A ical);....END;..
01CA40: 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 .FOR i:=y2+1 TO
01CA50: 79 31 2D 31 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 y1-1 DO....Gotox
01CA60: 79 28 78 31 2C 69 29 3B 0D 0A 09 09 53 63 72 65 y(x1,i);....Scre
01CA70: 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 63 enControl(Vertic
01CA80: 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 al);....END;...E
01CA90: 4E 44 3B 0D 0A 20 20 20 20 45 4E 44 20 44 72 61 ND;.. END Dra
01CAA0: 77 42 6F 78 3B 0D 0A 50 52 4F 43 45 44 55 52 45 wBox;..PROCEDURE
01CAB0: 20 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 28 OutputToScreen(
01CAC0: 4F 6E 3A 42 4F 4F 4C 45 41 4E 29 3B 0D 0A 42 45 On:BOOLEAN);..BE
01CAD0: 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E 61 62 GIN...OutputEnab
01CAE0: 6C 65 64 3A 3D 4F 6E 0D 0A 09 45 4E 44 20 4F 75 led:=On...END Ou
01CAF0: 74 70 75 74 54 6F 53 63 72 65 65 6E 3B 09 0D 0A tputToScreen;...
01CB00: 42 45 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E BEGIN...OutputEn
01CB10: 61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D 0A 09 28 abled:=TRUE;...(
01CB20: 2A 09 53 65 74 20 75 70 20 50 43 47 20 43 68 61 *.Set up PCG Cha
01CB30: 72 61 63 74 65 72 73 2A 29 0D 0A 09 53 63 72 65 racters*)...Scre
01CB40: 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 70 2E 49 6E enPos:=0;...p.In
01CB50: 74 4E 6F 3A 3D 31 36 3B 09 28 2A 69 6E 74 65 72 tNo:=16;.(*inter
01CB60: 72 75 70 74 20 66 6F 72 20 76 69 64 65 6F 20 6F rupt for video o
01CB70: 6E 20 38 30 38 38 2A 29 09 0D 0A 09 42 6C 69 6E n 8088*)....Blin
01CB80: 6B 52 6F 75 74 69 6E 65 3A 3D 42 6C 69 6E 6B 43 kRoutine:=BlinkC
01CB90: 75 72 73 6F 72 3B 0D 0A 09 42 6C 69 6E 6B 45 6E ursor;...BlinkEn
01CBA0: 61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D 0A 09 53 abled:=TRUE;...S
01CBB0: 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 43 6C 65 creenControl(Cle
01CBC0: 61 72 53 63 72 65 65 6E 29 3B 0D 0A 09 43 6F 6C arScreen);...Col
01CBD0: 4E 6F 3A 3D 30 3B 0D 0A 09 52 6F 77 4E 6F 3A 3D No:=0;...RowNo:=
01CBE0: 30 3B 0D 0A 09 43 68 61 72 52 6F 75 74 69 6E 65 0;...CharRoutine
01CBF0: 3A 3D 57 72 69 74 65 3B 0D 0A 09 43 68 61 72 45 :=Write;...CharE
01CC00: 09 53 74 61 72 74 78 79 2C 4D 69 64 64 6C 65 58 .Startxy,MiddleX
01CC10: 59 2C 45 6E 64 58 59 3A 28 2A 63 75 72 73 6F 72 Y,EndXY:(*cursor
01CC20: 20 61 64 64 72 65 73 73 69 6E 67 20 2D 20 6E 6F addressing - no
01CC30: 74 20 72 65 71 75 69 72 65 64 2A 29 7C 0D 0A 09 t required*)|...
01CC40: 52 69 6E 67 42 65 6C 6C 3A 69 3A 3D 42 44 4F 53 RingBell:i:=BDOS
01CC50: 28 77 63 63 66 63 2C 37 29 7C 0D 0A 09 4D 6F 76 (wccfc,7)|...Mov
01CC60: 65 4C 65 66 74 3A 49 46 20 43 6F 6C 4E 6F 3E 30 eLeft:IF ColNo>0
01CC70: 20 54 48 45 4E 20 0D 0A 09 09 09 44 45 43 28 43 THEN .....DEC(C
01CC80: 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 olNo);.....DEC(S
01CC90: 63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C creenPos);....EL
01CCA0: 53 49 46 20 52 6F 77 4E 6F 3E 30 20 54 48 45 4E SIF RowNo>0 THEN
01CCB0: 0D 0A 09 09 09 44 45 43 28 52 6F 77 4E 6F 29 3B .....DEC(RowNo);
01CCC0: 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 4C 6F 67 53 .....ColNo:=LogS
01CCD0: 63 72 65 65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 creenWidth-1;...
01CCE0: 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C ..ScreenPos:=Col
01CCF0: 4E 6F 2B 52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 No+RowNo*RowWidt
01CD00: 68 3B 0D 0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F h;.....END|...Mo
01CD10: 76 65 52 69 67 68 74 3A 49 46 20 43 6F 6C 4E 6F veRight:IF ColNo
01CD20: 3C 28 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68 <(LogScreenWidth
01CD30: 2D 31 29 20 54 48 45 4E 20 0D 0A 09 09 09 49 4E -1) THEN .....IN
01CD40: 43 28 43 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 49 4E C(ColNo);.....IN
01CD50: 43 28 53 63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 C(ScreenPos);...
01CD60: 09 45 4C 53 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F .ELSIF RowNo<(Lo
01CD70: 67 53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 20 gScreenDepth-1)
01CD80: 54 48 45 4E 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D THEN.....ColNo:=
01CD90: 30 3B 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 0;.....INC(RowNo
01CDA0: 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F 73 );.....ScreenPos
01CDB0: 3A 3D 52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 :=RowNo*RowWidth
01CDC0: 3B 0D 0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 ;.....END|...Mov
01CDD0: 65 44 6F 77 6E 3A 49 46 20 52 6F 77 4E 6F 3C 28 eDown:IF RowNo<(
01CDE0: 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 68 2D 31 LogScreenDepth-1
01CDF0: 29 20 54 48 45 4E 0D 0A 09 09 09 49 4E 43 28 52 ) THEN.....INC(R
01CE00: 4F 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 6A 2B 31 O.....ColNo:=j+1
01CE10: 3B 0D 0A 09 09 09 53 65 74 43 75 72 73 6F 72 3B ;.....SetCursor;
01CE20: 0D 0A 09 09 09 57 49 54 48 20 70 20 44 4F 0D 0A .....WITH p DO..
01CE30: 09 09 09 09 41 58 3A 3D 38 30 30 68 3B 0D 0A 09 ....AX:=800h;...
01CE40: 09 09 09 42 58 3A 3D 30 3B 0D 0A 09 09 09 09 49 ...BX:=0;......I
01CE50: 6E 74 28 70 29 3B 09 28 2A 52 65 61 64 20 63 68 nt(p);.(*Read ch
01CE60: 61 72 61 63 74 65 72 20 2A 29 0D 0A 09 09 09 09 aracter *)......
01CE70: 63 68 3A 3D 43 48 52 28 43 41 52 44 49 4E 41 4C ch:=CHR(CARDINAL
01CE80: 28 41 58 29 29 3B 0D 0A 09 09 09 09 44 45 43 28 (AX));......DEC(
01CE90: 43 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 09 53 65 74 ColNo);......Set
01CEA0: 43 75 72 73 6F 72 3B 0D 0A 09 09 09 09 42 58 3A Cursor;......BX:
01CEB0: 3D 37 3B 0D 0A 09 09 09 09 41 58 3A 3D 30 39 30 =7;......AX:=090
01CEC0: 30 48 2B 4F 52 44 28 63 68 29 3B 0D 0A 09 09 09 0H+ORD(ch);.....
01CED0: 09 43 58 3A 3D 31 3B 0D 0A 09 09 09 09 49 6E 74 .CX:=1;......Int
01CEE0: 28 70 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A (p);......END;..
01CEF0: 09 09 09 45 4E 44 3B 0D 0A 09 09 43 6F 6C 4E 6F ...END;....ColNo
01CF00: 3A 3D 52 6F 77 57 69 64 74 68 2D 31 3B 0D 0A 09 :=RowWidth-1;...
01CF10: 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A 09 09 57 .SetCursor;....W
01CF20: 49 54 48 20 70 20 44 4F 0D 0A 09 09 09 41 58 3A ITH p DO.....AX:
01CF30: 3D 30 39 32 30 68 3B 0D 0A 09 09 09 42 58 3A 3D =0920h;.....BX:=
01CF40: 37 3B 0D 0A 09 09 09 43 58 3A 3D 31 3B 0D 0A 09 7;.....CX:=1;...
01CF50: 09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 09 45 4E ..Int(p);.....EN
01CF60: 44 3B 0D 0A 09 09 43 6F 6C 4E 6F 3A 3D 69 3B 0D D;....ColNo:=i;.
01CF70: 0A 09 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A 09 ...SetCursor;...
01CF80: 09 7C 0D 0A 09 44 65 6C 4C 69 6E 65 3A 28 2A 4D .|...DelLine:(*M
01CF90: 6F 76 65 20 72 65 73 74 20 6F 66 20 73 63 72 65 ove rest of scre
01CFA0: 65 6E 20 75 70 20 61 20 6C 69 6E 65 2C 20 61 64 en up a line, ad
01CFB0: 64 20 62 6C 61 6E 6B 20 6C 69 6E 65 20 61 74 20 d blank line at
01CFC0: 65 6E 64 2A 29 0D 0A 09 09 57 49 54 48 20 70 20 end*)....WITH p
01CFD0: 44 4F 0D 0A 09 09 09 41 58 3A 3D 30 36 30 31 68 DO.....AX:=0601h
01CFE0: 3B 0D 0A 09 09 09 43 58 3A 3D 32 35 36 2A 52 6F ;.....CX:=256*Ro
01CFF0: 77 4E 6F 3B 0D 0A 09 09 09 44 58 3A 3D 32 35 36 wNo;.....DX:=256
01D000: 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 63 72 65 65 owNo);.....Scree
01D010: 6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B nPos:=ScreenPos+
01D020: 52 6F 77 57 69 64 74 68 3B 0D 0A 09 09 09 45 4E RowWidth;.....EN
01D030: 44 7C 0D 0A 09 4D 6F 76 65 55 70 3A 49 46 20 52 D|...MoveUp:IF R
01D040: 6F 77 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09 owNo>0 THEN.....
01D050: 44 45 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 DEC(RowNo);.....
01D060: 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 ScreenPos:=Scree
01D070: 6E 50 6F 73 2D 52 6F 77 57 69 64 74 68 3B 0D 0A nPos-RowWidth;..
01D080: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 ...END;....END;
01D090: 28 2A 43 41 53 45 2A 29 0D 0A 09 53 65 74 43 75 (*CASE*)...SetCu
01D0A0: 72 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 rsor;...END;..
01D0B0: 20 20 45 4E 44 20 53 63 72 65 65 6E 43 6F 6E 74 END ScreenCont
01D0C0: 72 6F 6C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 rol;..PROCEDURE
01D0D0: 53 63 72 6F 6C 6C 57 69 6E 64 6F 77 55 70 28 53 ScrollWindowUp(S
01D0E0: 74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 tartofWindow,End
01D0F0: 6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 ofWindow:CARDINA
01D100: 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 L);..BEGIN..
01D110: 49 46 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 IF OutputEnabled
01D120: 20 41 4E 44 20 28 53 74 61 72 74 6F 66 57 69 6E AND (StartofWin
01D130: 64 6F 77 3C 45 6E 64 6F 66 57 69 6E 64 6F 77 29 dow<EndofWindow)
01D140: 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 THEN...ClearCur
01D150: 73 6F 72 3B 0D 0A 09 57 49 54 48 20 70 20 44 4F sor;...WITH p DO
01D160: 0D 0A 09 09 41 58 3A 3D 30 37 30 31 68 0D 0A 09 ....AX:=0701h...
01D170: 09 43 58 3A 3D 32 35 36 2A 53 74 61 72 74 6F 66 .CX:=256*Startof
01D180: 57 69 6E 64 6F 77 3B 0D 0A 09 09 44 58 3A 3D 32 Window;....DX:=2
01D190: 35 36 2A 45 6E 64 6F 66 57 69 6E 64 6F 77 2B 4C 56*EndofWindow+L
01D1A0: 6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D 31 3B ogScreenWidth-1;
01D1B0: 0D 0A 09 09 42 58 3A 3D 30 37 30 30 68 3B 0D 0A ....BX:=0700h;..
01D1C0: 09 09 45 4E 44 3B 0D 0A 09 49 6E 74 28 70 29 3B ..END;...Int(p);
01D1D0: 0D 0A 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A 09 ...SetCursor;...
01D1E0: 45 4E 44 3B 0D 0A 20 20 20 20 45 4E 44 20 53 63 END;.. END Sc
01D1F0: 72 6F 6C 6C 57 69 6E 64 6F 77 55 70 3B 0D 0A 50 rollWindowUp;..P
01D200: 2A 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 68 *(LogScreenDepth
01D210: 2D 31 29 2B 4C 6F 67 53 63 72 65 65 6E 57 69 64 -1)+LogScreenWid
01D220: 74 68 2D 31 3B 0D 0A 09 09 09 42 58 3A 3D 30 37 th-1;.....BX:=07
01D230: 30 30 68 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 00h;.....END;...
01D240: 09 49 6E 74 28 70 29 3B 0D 0A 09 09 7C 0D 0A 09 .Int(p);....|...
01D250: 49 6E 73 43 68 61 72 3A 28 2A 4D 6F 76 65 20 72 InsChar:(*Move r
01D260: 65 73 74 20 6F 66 20 6C 69 6E 65 20 75 70 20 6F est of line up o
01D270: 6E 65 2C 20 61 64 64 20 62 6C 61 6E 6B 20 74 6F ne, add blank to
01D280: 20 65 6E 64 2A 29 0D 0A 09 09 69 3A 3D 43 6F 6C end*)....i:=Col
01D290: 4E 6F 3B 0D 0A 09 09 46 4F 52 20 6A 3A 3D 52 6F No;....FOR j:=Ro
01D2A0: 77 57 69 64 74 68 2D 32 20 54 4F 20 43 6F 6C 4E wWidth-2 TO ColN
01D2B0: 6F 20 42 59 20 2D 31 20 44 4F 0D 0A 09 09 09 43 o BY -1 DO.....C
01D2C0: 6F 6C 4E 6F 3A 3D 6A 3B 0D 0A 09 09 09 53 65 74 olNo:=j;.....Set
01D2D0: 43 75 72 73 6F 72 3B 0D 0A 09 09 09 57 49 54 48 Cursor;.....WITH
01D2E0: 20 70 20 44 4F 0D 0A 09 09 09 09 41 58 3A 3D 38 p DO......AX:=8
01D2F0: 30 30 68 3B 0D 0A 09 09 09 09 42 58 3A 3D 30 3B 00h;......BX:=0;
01D300: 0D 0A 09 09 09 09 49 6E 74 28 70 29 3B 09 28 2A ......Int(p);.(*
01D310: 52 65 61 64 20 63 68 61 72 61 63 74 65 72 20 2A Read character *
01D320: 29 0D 0A 09 09 09 09 63 68 3A 3D 43 48 52 28 43 )......ch:=CHR(C
01D330: 41 52 44 49 4E 41 4C 28 41 58 29 29 3B 0D 0A 09 ARDINAL(AX));...
01D340: 09 09 09 49 4E 43 28 43 6F 6C 4E 6F 29 3B 0D 0A ...INC(ColNo);..
01D350: 09 09 09 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A ....SetCursor;..
01D360: 09 09 09 09 42 58 3A 3D 37 3B 0D 0A 09 09 09 09 ....BX:=7;......
01D370: 41 58 3A 3D 30 39 30 30 48 2B 4F 52 44 28 63 68 AX:=0900H+ORD(ch
01D380: 29 3B 0D 0A 09 09 09 09 43 58 3A 3D 31 3B 0D 0A );......CX:=1;..
01D390: 09 09 09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 09 ....Int(p);.....
01D3A0: 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A .END;.....END;..
01D3B0: 09 09 43 6F 6C 4E 6F 3A 3D 69 3B 0D 0A 09 09 53 ..ColNo:=i;....S
01D3C0: 65 74 43 75 72 73 6F 72 3B 0D 0A 09 09 57 49 54 etCursor;....WIT
01D3D0: 48 20 70 20 44 4F 0D 0A 09 09 09 41 58 3A 3D 30 H p DO.....AX:=0
01D3E0: 39 32 30 68 3B 0D 0A 09 09 09 42 58 3A 3D 37 3B 920h;.....BX:=7;
01D3F0: 0D 0A 09 09 09 43 58 3A 3D 31 3B 0D 0A 09 09 09 .....CX:=1;.....
01D400: 52 4F 43 45 44 55 52 45 20 53 63 72 6F 6C 6C 57 ROCEDURE ScrollW
01D410: 69 6E 64 6F 77 44 6F 77 6E 28 53 74 61 72 74 6F indowDown(Starto
01D420: 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 69 6E fWindow,EndofWin
01D430: 64 6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A dow:CARDINAL);..
01D440: 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F 75 BEGIN.. IF Ou
01D450: 74 70 75 74 45 6E 61 62 6C 65 64 20 41 4E 44 20 tputEnabled AND
01D460: 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 3C 45 (StartofWindow<E
01D470: 6E 64 6F 66 57 69 6E 64 6F 77 29 20 54 48 45 4E ndofWindow) THEN
01D480: 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D ...ClearCursor;.
01D490: 0A 09 57 49 54 48 20 70 20 44 4F 0D 0A 09 09 41 ..WITH p DO....A
01D4A0: 58 3A 3D 30 36 30 31 68 0D 0A 09 09 43 58 3A 3D X:=0601h....CX:=
01D4B0: 32 35 36 2A 53 74 61 72 74 6F 66 57 69 6E 64 6F 256*StartofWindo
01D4C0: 77 3B 0D 0A 09 09 44 58 3A 3D 32 35 36 2A 45 6E w;....DX:=256*En
01D4D0: 64 6F 66 57 69 6E 64 6F 77 2B 4C 6F 67 53 63 72 dofWindow+LogScr
01D4E0: 65 65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 09 42 eenWidth-1;....B
01D4F0: 58 3A 3D 30 37 30 30 68 3B 0D 0A 09 09 45 4E 44 X:=0700h;....END
01D500: 3B 0D 0A 09 49 6E 74 28 70 29 3B 0D 0A 09 53 65 ;...Int(p);...Se
01D510: 74 43 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D tCursor;...END;.
01D520: 0A 20 20 20 20 45 4E 44 20 53 63 72 6F 6C 6C 57 . END ScrollW
01D530: 69 6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 50 52 indowDown;....PR
01D540: 4F 43 45 44 55 52 45 20 4C 6F 61 64 54 65 72 6D OCEDURE LoadTerm
01D550: 43 6F 64 65 28 46 3A 46 69 6C 65 4E 61 6D 65 29 Code(F:FileName)
01D560: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 28 2A 6E 6F 74 ;..BEGIN...(*not
01D570: 20 69 6D 70 6C 65 6D 65 6E 74 65 64 20 69 6E 20 implemented in
01D580: 74 68 69 73 20 76 65 72 73 69 6F 6E 2A 29 0D 0A this version*)..
01D590: 09 45 4E 44 20 4C 6F 61 64 54 65 72 6D 43 6F 64 .END LoadTermCod
01D5A0: 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C e;..PROCEDURE Cl
01D5B0: 69 70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43 ip(x1,y1,x2,y2:C
01D5C0: 41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E ARDINAL);..BEGIN
01D5D0: 0D 0A 09 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D 65 ...(*not impleme
01D5E0: 6E 74 65 64 20 69 6E 20 74 68 69 73 20 76 65 72 nted in this ver
01D5F0: 73 69 6F 6E 2A 29 0D 0A 09 45 4E 44 20 43 6C 69 sion*)...END Cli
01D600: 49 6E 74 28 70 29 3B 0D 0A 09 09 09 45 4E 44 3B Int(p);.....END;
01D610: 0D 0A 09 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A ....SetCursor;..
01D620: 09 09 7C 0D 0A 09 49 6E 73 4C 69 6E 65 3A 28 2A ..|...InsLine:(*
01D630: 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 73 63 72 Move rest of scr
01D640: 65 65 6E 20 75 70 20 61 20 6C 69 6E 65 2C 20 61 een up a line, a
01D650: 64 64 20 62 6C 61 6E 6B 20 6C 69 6E 65 20 61 74 dd blank line at
01D660: 20 65 6E 64 2A 29 0D 0A 09 09 57 49 54 48 20 70 end*)....WITH p
01D670: 20 44 4F 0D 0A 09 09 09 41 58 3A 3D 30 37 30 31 DO.....AX:=0701
01D680: 68 3B 0D 0A 09 09 09 43 58 3A 3D 32 35 36 2A 52 h;.....CX:=256*R
01D690: 6F 77 4E 6F 3B 0D 0A 09 09 09 44 58 3A 3D 32 35 owNo;.....DX:=25
01D6A0: 36 2A 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 6*(LogScreenDept
01D6B0: 68 2D 31 29 2B 4C 6F 67 53 63 72 65 65 6E 57 69 h-1)+LogScreenWi
01D6C0: 64 74 68 2D 31 3B 0D 0A 09 09 09 42 58 3A 3D 30 dth-1;.....BX:=0
01D6D0: 37 30 30 68 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 700h;.....END;..
01D6E0: 09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 7C 0D 0A ..Int(p);....|..
01D6F0: 09 44 65 6C 45 6F 6C 3A 49 46 20 43 6F 6C 4E 6F .DelEol:IF ColNo
01D700: 2B 31 3C 52 6F 77 57 69 64 74 68 20 54 48 45 4E +1<RowWidth THEN
01D710: 0D 0A 09 09 09 57 49 54 48 20 70 20 44 4F 0D 0A .....WITH p DO..
01D720: 09 09 09 09 41 58 3A 3D 30 39 32 30 68 3B 0D 0A ....AX:=0920h;..
01D730: 09 09 09 09 42 58 3A 3D 37 3B 0D 0A 09 09 09 09 ....BX:=7;......
01D740: 43 58 3A 3D 52 6F 77 57 69 64 74 68 2D 43 6F 6C CX:=RowWidth-Col
01D750: 4E 6F 2D 31 3B 0D 0A 09 09 09 09 49 6E 74 28 70 No-1;......Int(p
01D760: 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 );......END;....
01D770: 09 45 4E 44 3B 0D 0A 09 09 7C 0D 0A 09 44 65 6C .END;....|...Del
01D780: 45 6F 73 3A 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D Eos:(*not implem
01D790: 65 6E 74 65 64 20 2D 20 62 75 74 20 73 69 6D 69 ented - but simi
01D7A0: 6C 61 72 20 74 6F 20 70 72 65 76 69 6F 75 73 2A lar to previous*
01D7B0: 29 7C 0D 0A 09 43 6C 65 61 72 53 63 72 65 65 6E )|...ClearScreen
01D7C0: 3A 0D 0A 09 09 09 28 2A 4F 73 62 6F 72 6E 65 20 :.....(*Osborne
01D7D0: 73 70 65 63 69 66 69 63 20 2D 20 68 6F 6D 65 20 specific - home
01D7E0: 73 63 72 65 65 6E 20 61 6E 64 20 63 75 72 73 6F screen and curso
01D7F0: 72 20 0D 0A 09 09 09 20 70 6F 73 69 74 69 6F 6E r ..... position
01D800: 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44 p;..PROCEDURE D
01D810: 72 61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C rawBox(x1,y1,x2,
01D820: 79 32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D y2:CARDINAL);...
01D830: 0A 28 2A 09 09 64 72 61 77 20 61 20 62 6F 78 20 .(*..draw a box
01D840: 66 6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E 20 for a window on
01D850: 74 68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09 09 the screen......
01D860: 78 31 2C 79 31 20 20 69 73 20 74 68 65 20 6C 6F x1,y1 is the lo
01D870: 77 65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72 0D wer left corner.
01D880: 0A 09 09 78 32 2C 79 32 20 20 69 73 20 75 70 70 ...x2,y2 is upp
01D890: 65 72 20 72 69 67 68 74 20 63 6F 72 6E 65 72 2A er right corner*
01D8A0: 29 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 )..VAR.i:CARDINA
01D8B0: 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 L;..BEGIN.. I
01D8C0: 46 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 F OutputEnabled
01D8D0: 54 48 45 4E 0D 0A 09 47 6F 74 6F 78 79 28 78 31 THEN...Gotoxy(x1
01D8E0: 2C 79 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F ,y1);...ScreenCo
01D8F0: 6E 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68 ntrol(StartGraph
01D900: 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 );...ScreenContr
01D910: 6F 6C 28 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A 09 ol(CornerLL);...
01D920: 46 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 FOR i:=x1+1 TO x
01D930: 32 2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 2-1 DO ScreenCon
01D940: 74 72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 trol(Horizontal)
01D950: 20 45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F END;...ScreenCo
01D960: 6E 74 72 6F 6C 28 43 6F 72 6E 65 72 4C 52 29 3B ntrol(CornerLR);
01D970: 0D 0A 09 47 6F 74 6F 78 79 28 78 31 2C 79 32 29 ...Gotoxy(x1,y2)
01D980: 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F ;...ScreenContro
01D990: 6C 28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46 l(CornerUL);...F
01D9A0: 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 OR i:=x1+1 TO x2
01D9B0: 2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 -1 DO ScreenCont
01D9C0: 72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 rol(Horizontal)
01D9D0: 45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E END;...ScreenCon
01D9E0: 74 72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D trol(CornerUR);.
01D9F0: 0A 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F ..FOR i:=y2+1 TO
01DA00: 20 61 73 20 73 74 6F 72 65 64 20 69 6E 20 42 49 as stored in BI
01DA10: 4F 53 20 74 61 62 6C 65 73 2A 29 0D 0A 09 09 0D OS tables*).....
01DA20: 0A 09 09 09 28 2A 6E 6F 77 20 63 6C 65 61 72 20 ....(*now clear
01DA30: 64 69 73 70 6C 61 79 20 6D 65 6D 6F 72 79 2A 29 display memory*)
01DA40: 0D 0A 09 09 57 49 54 48 20 70 20 44 4F 0D 0A 09 ....WITH p DO...
01DA50: 09 09 41 58 3A 3D 30 36 30 30 68 3B 0D 0A 09 09 ..AX:=0600h;....
01DA60: 09 43 58 3A 3D 30 3B 0D 0A 09 09 09 44 58 3A 3D .CX:=0;.....DX:=
01DA70: 32 35 36 2A 28 4C 6F 67 53 63 72 65 65 6E 44 65 256*(LogScreenDe
01DA80: 70 74 68 2D 31 29 2B 4C 6F 67 53 63 72 65 65 6E pth-1)+LogScreen
01DA90: 57 69 64 74 68 2D 31 3B 0D 0A 09 09 09 42 58 3A Width-1;.....BX:
01DAA0: 3D 30 37 30 30 68 3B 0D 0A 09 09 09 45 4E 44 3B =0700h;.....END;
01DAB0: 0D 0A 09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 53 ....Int(p);....S
01DAC0: 63 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 09 creenPos:=0;....
01DAD0: 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 09 52 6F 77 ColNo:=0;....Row
01DAE0: 4E 6F 3A 3D 30 0D 0A 09 09 7C 0D 0A 0D 0A 09 28 No:=0....|.....(
01DAF0: 2A 20 54 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20 * The following
01DB00: 67 72 61 70 68 69 63 73 20 63 68 61 72 61 63 74 graphics charact
01DB10: 65 72 73 20 77 69 6C 6C 20 6E 65 65 64 20 74 6F ers will need to
01DB20: 20 62 65 20 6D 6F 64 69 66 69 65 64 20 66 6F 72 be modified for
01DB30: 20 0D 0A 09 20 20 20 64 69 66 66 65 72 65 6E 74 ... different
01DB40: 20 64 69 73 70 6C 61 79 20 73 79 73 74 65 6D 73 display systems
01DB50: 2A 29 0D 0A 0D 0A 09 48 6F 72 69 7A 6F 6E 74 61 *).....Horizonta
01DB60: 6C 3A 50 75 74 61 6E 64 49 6E 63 28 30 63 64 78 l:PutandInc(0cdx
01DB70: 29 7C 0D 0A 09 56 65 72 74 69 63 61 6C 3A 50 75 )|...Vertical:Pu
01DB80: 74 61 6E 64 49 6E 63 28 30 62 61 78 29 7C 0D 0A tandInc(0bax)|..
01DB90: 09 43 6F 72 6E 65 72 4C 4C 3A 50 75 74 61 6E 64 .CornerLL:Putand
01DBA0: 49 6E 63 28 30 63 38 78 29 7C 0D 0A 09 43 6F 72 Inc(0c8x)|...Cor
01DBB0: 6E 65 72 55 4C 3A 50 75 74 61 6E 64 49 6E 63 28 nerUL:PutandInc(
01DBC0: 30 63 39 78 29 7C 0D 0A 09 43 6F 72 6E 65 72 55 0c9x)|...CornerU
01DBD0: 52 3A 50 75 74 61 6E 64 49 6E 63 28 30 62 62 78 R:PutandInc(0bbx
01DBE0: 29 7C 0D 0A 09 43 6F 72 6E 65 72 4C 52 3A 50 75 )|...CornerLR:Pu
01DBF0: 74 61 6E 64 49 6E 63 28 30 62 63 78 29 7C 0D 0A tandInc(0bcx)|..
01DC00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
01DC10: 19 00 01 00 02 09 52 E5 19 00 C9 02 00 00 00 02 ......R.........
01DC20: 19 00 C5 02 00 00 00 02 19 00 C1 02 00 00 00 02 ................
01DC30: 19 00 C6 02 00 00 00 02 19 00 C2 02 00 00 00 02 ................
01DC40: 19 00 C7 02 00 00 00 02 19 00 C3 02 00 00 00 02 ................
01DC50: 19 00 C8 02 00 00 00 02 19 00 C4 02 00 00 00 02 ................
01DC60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DC70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DC80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DC90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DD00: 09 6F 75 74 70 75 74 20 61 20 63 68 61 72 61 63 .output a charac
01DD10: 74 65 72 20 61 6E 64 20 69 6E 63 72 65 6D 65 6E ter and incremen
01DD20: 74 20 70 6F 69 6E 74 65 72 73 2A 29 0D 0A 0D 0A t pointers*)....
01DD30: 42 45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 5B 53 BEGIN...Screen[S
01DD40: 63 72 65 65 6E 50 6F 73 5D 3A 3D 63 68 3B 0D 0A creenPos]:=ch;..
01DD50: 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63 ...ScreenPos:=Sc
01DD60: 72 65 65 6E 50 6F 73 2B 43 68 61 72 49 6E 63 72 reenPos+CharIncr
01DD70: 65 6D 65 6E 74 3B 0D 0A 09 49 4E 43 28 43 6F 6C ement;...INC(Col
01DD80: 4E 6F 29 3B 0D 0A 09 49 46 20 43 6F 6C 4E 6F 3E No);...IF ColNo>
01DD90: 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68 20 =LogScreenWidth
01DDA0: 54 48 45 4E 0D 0A 09 09 49 46 20 52 6F 77 4E 6F THEN....IF RowNo
01DDB0: 3C 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 68 <(LogScreenDepth
01DDC0: 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 49 4E 43 -1) THEN.....INC
01DDD0: 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 43 6F 6C (RowNo);.....Col
01DDE0: 4E 6F 3A 3D 30 3B 0D 0A 09 09 45 4C 53 45 0D 0A No:=0;....ELSE..
01DDF0: 09 09 09 44 45 43 28 43 6F 6C 4E 6F 29 3B 0D 0A ...DEC(ColNo);..
01DE00: 09 09 09 44 45 43 28 53 63 72 65 65 6E 50 6F 73 ...DEC(ScreenPos
01DE10: 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 );.....END;....E
01DE20: 4E 44 3B 0D 0A 09 45 4E 44 20 50 75 74 61 6E 64 ND;...END Putand
01DE30: 49 6E 63 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 Inc;....PROCEDUR
01DE40: 45 20 57 72 69 74 65 28 63 68 3A 43 48 41 52 29 E Write(ch:CHAR)
01DE50: 3B 0D 0A 28 2A 09 57 72 69 74 65 20 61 20 63 68 ;..(*.Write a ch
01DE60: 61 72 61 63 74 65 72 0D 0A 0D 0A 09 54 68 69 73 aracter.....This
01DE70: 20 72 6F 75 74 69 6E 65 20 69 73 20 75 73 65 64 routine is used
01DE80: 20 62 79 20 74 65 72 6D 69 6E 61 6C 20 77 68 65 by terminal whe
01DE90: 6E 20 74 68 69 73 20 76 65 72 73 69 6F 6E 20 6F n this version o
01DEA0: 66 20 53 63 72 65 65 6E 49 4F 20 0D 0A 09 69 73 f ScreenIO ...is
01DEB0: 20 69 6E 20 75 73 65 20 62 65 63 61 75 73 65 20 in use because
01DEC0: 61 20 66 6C 61 67 20 69 73 20 73 65 74 20 62 79 a flag is set by
01DED0: 20 74 68 65 20 69 6E 69 74 69 61 6C 69 73 61 74 the initialisat
01DEE0: 69 6F 6E 20 6F 66 20 74 68 69 73 20 6D 6F 64 75 ion of this modu
01DEF0: 6C 65 20 0D 0A 09 74 6F 67 65 74 68 65 72 20 77 le ...together w
01DF00: 72 69 61 67 65 20 72 65 74 75 72 6E 2A 29 0D 0A riage return*)..
01DF10: 09 4C 46 3D 30 61 78 3B 09 09 09 28 2A 4C 69 6E .LF=0ax;...(*Lin
01DF20: 65 20 66 65 65 64 2A 29 0D 0A 09 54 41 42 3D 30 e feed*)...TAB=0
01DF30: 39 78 3B 09 09 28 2A 54 41 42 2A 29 0D 0A 09 42 9x;..(*TAB*)...B
01DF40: 53 3D 30 38 78 3B 0D 0A 56 41 52 0D 0A 09 53 63 S=08x;..VAR...Sc
01DF50: 72 65 65 6E 5B 30 66 30 30 30 68 5D 3A 41 52 52 reen[0f000h]:ARR
01DF60: 41 59 5B 30 2E 2E 53 63 72 65 65 6E 53 69 7A 65 AY[0..ScreenSize
01DF70: 2D 31 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 50 -1] OF CHAR;...P
01DF80: 43 47 5B 30 66 38 30 30 68 5D 3A 41 52 52 41 59 CG[0f800h]:ARRAY
01DF90: 5B 30 2E 2E 34 38 5D 20 4F 46 20 43 48 41 52 3B [0..48] OF CHAR;
01DFA0: 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 43 41 52 ...ScreenPos:CAR
01DFB0: 44 49 4E 41 4C 3B 09 28 2A 6E 65 78 74 20 63 68 DINAL;.(*next ch
01DFC0: 61 72 61 63 74 65 72 20 70 6F 73 69 74 69 6F 6E aracter position
01DFD0: 20 6F 6E 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 on screen*)...C
01DFE0: 6F 6C 4E 6F 2C 52 6F 77 4E 6F 3A 43 41 52 44 49 olNo,RowNo:CARDI
01DFF0: 4E 41 4C 3B 09 28 2A 77 68 69 63 68 20 72 65 70 NAL;.(*which rep
01E000: 72 65 73 65 6E 74 73 20 74 68 65 20 67 69 76 65 resents the give
01E010: 6E 20 70 6F 73 69 74 69 6F 6E 2A 29 0D 0A 0D 0A n position*)....
01E020: 09 28 2A 09 43 6F 6E 74 72 6F 6C 20 61 74 74 72 .(*.Control attr
01E030: 69 62 75 74 65 73 2A 29 0D 0A 0D 0A 09 48 61 6C ibutes*).....Hal
01E040: 66 49 6E 74 65 6E 73 69 74 79 3A 42 4F 4F 4C 45 fIntensity:BOOLE
01E050: 41 4E 3D 46 41 4C 53 45 3B 09 28 2A 74 72 75 65 AN=FALSE;.(*true
01E060: 20 69 66 20 69 6E 20 68 61 6C 66 20 69 6E 74 65 if in half inte
01E070: 6E 73 69 74 79 20 6D 6F 64 65 2A 29 0D 0A 09 45 nsity mode*)...E
01E080: 6E 68 61 6E 63 65 64 56 69 64 65 6F 3A 42 4F 4F nhancedVideo:BOO
01E090: 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 55 6E LEAN=FALSE;...Un
01E0A0: 64 65 72 4C 69 6E 65 3A 42 4F 4F 4C 45 41 4E 3D derLine:BOOLEAN=
01E0B0: 46 41 4C 53 45 3B 09 28 2A 74 72 75 65 20 69 66 FALSE;.(*true if
01E0C0: 20 69 6E 20 75 6E 64 65 72 6C 69 6E 65 20 6D 6F in underline mo
01E0D0: 64 65 2A 29 0D 0A 09 49 6E 76 65 72 73 65 56 69 de*)...InverseVi
01E0E0: 64 65 6F 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 deo:BOOLEAN=FALS
01E0F0: 45 3B 0D 0A 09 42 6C 69 6E 6B 69 6E 67 3A 42 4F E;...Blinking:BO
01E100: 6E 61 62 6C 65 64 3A 3D 54 52 55 45 3B 09 0D 0A nabled:=TRUE;...
01E110: 09 53 63 72 65 65 6E 57 69 64 74 68 3A 3D 4C 6F .ScreenWidth:=Lo
01E120: 67 53 63 72 65 65 6E 57 69 64 74 68 3B 0D 0A 09 gScreenWidth;...
01E130: 53 63 72 65 65 6E 44 65 70 74 68 3A 3D 4C 6F 67 ScreenDepth:=Log
01E140: 53 63 72 65 65 6E 44 65 70 74 68 3B 0D 0A 09 45 ScreenDepth;...E
01E150: 4E 44 20 53 63 72 65 65 6E 49 4F 2E 0D 0A 1A 1A ND ScreenIO.....
01E160: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01E170: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01E180: 0D 0A 09 45 5E 3A 3D 74 65 6D 70 5E 3B 0D 0A 0D ...E^:=temp^;...
01E190: 0A 09 57 65 20 68 61 76 65 20 61 6C 6C 6F 63 61 ..We have alloca
01E1A0: 74 65 64 20 22 45 22 20 66 69 72 73 74 20 73 6F ted "E" first so
01E1B0: 20 74 68 61 74 20 69 74 20 63 61 6E 20 62 65 20 that it can be
01E1C0: 75 73 65 64 20 69 6E 20 74 68 65 0D 0A 09 66 75 used in the...fu
01E1D0: 6E 63 74 69 6F 6E 2E 20 57 65 20 63 6F 75 6C 64 nction. We could
01E1E0: 20 6E 6F 74 20 73 69 6D 70 6C 79 20 61 73 73 69 not simply assi
01E1F0: 67 6E 20 74 68 65 20 70 6F 69 6E 74 65 72 20 72 gn the pointer r
01E200: 65 74 75 72 6E 65 64 20 62 79 0D 0A 09 43 72 65 eturned by...Cre
01E210: 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 20 74 6F ateConcatNode to
01E220: 20 45 2C 20 73 69 6E 63 65 20 74 68 65 6E 20 74 E, since then t
01E230: 68 65 20 45 20 75 73 65 64 20 69 6E 20 74 68 65 he E used in the
01E240: 20 66 75 6E 63 74 69 6F 6E 0D 0A 09 77 6F 75 6C function...woul
01E250: 64 20 62 65 20 70 6F 69 6E 74 69 6E 67 20 65 6C d be pointing el
01E260: 73 65 77 68 65 72 65 2E 20 49 6E 73 74 65 61 64 sewhere. Instead
01E270: 2C 20 77 65 20 6D 75 73 74 20 63 6F 70 79 20 74 , we must copy t
01E280: 68 65 20 63 6F 6E 74 65 6E 74 73 0D 0A 09 6F 66 he contents...of
01E290: 20 74 65 6D 70 20 69 6E 74 6F 20 45 20 73 6F 20 temp into E so
01E2A0: 74 68 61 74 20 74 68 65 20 70 6F 69 6E 74 65 72 that the pointer
01E2B0: 73 20 72 65 6D 61 69 6E 20 63 6F 72 72 65 63 74 s remain correct
01E2C0: 2E 0D 0A 0D 0A 09 54 68 69 73 20 70 61 74 74 65 ......This patte
01E2D0: 72 6E 20 22 45 22 20 69 73 20 6E 6F 74 20 79 65 rn "E" is not ye
01E2E0: 74 20 72 65 61 64 79 20 74 6F 20 62 65 20 75 73 t ready to be us
01E2F0: 65 64 2C 20 73 69 6E 63 65 20 74 68 65 20 70 61 ed, since the pa
01E300: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 69 OLEAN=FALSE;...i
01E310: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 0D 0A 28 2A :CARDINAL;....(*
01E320: 09 54 68 65 20 6E 65 78 74 20 66 65 77 20 72 6F .The next few ro
01E330: 75 74 69 6E 65 73 20 68 61 6E 64 6C 65 20 74 68 utines handle th
01E340: 65 20 63 75 72 73 6F 72 0D 0A 0D 0A 09 57 61 73 e cursor.....Was
01E350: 55 6E 64 65 72 4C 69 6E 65 64 20 69 73 20 74 72 UnderLined is tr
01E360: 75 65 20 69 66 20 74 68 65 20 63 68 61 72 61 63 ue if the charac
01E370: 74 65 72 20 75 6E 64 65 72 20 74 68 65 20 63 75 ter under the cu
01E380: 72 73 6F 72 0D 0A 09 73 74 61 72 74 65 64 20 6F rsor...started o
01E390: 75 74 20 75 6E 64 65 72 6C 69 6E 65 64 0D 0A 09 ut underlined...
01E3A0: 0D 0A 09 54 69 6D 65 54 6F 43 68 61 6E 67 65 20 ...TimeToChange
01E3B0: 69 73 20 61 20 63 6F 75 6E 74 65 72 20 74 68 61 is a counter tha
01E3C0: 74 20 64 65 74 65 72 6D 69 6E 65 73 20 77 68 65 t determines whe
01E3D0: 6E 20 74 68 65 20 63 75 72 73 6F 72 20 73 68 6F n the cursor sho
01E3E0: 75 6C 64 0D 0A 09 62 65 20 63 68 61 6E 67 65 64 uld...be changed
01E3F0: 20 66 72 6F 6D 20 69 74 73 20 63 75 72 72 65 6E from its curren
01E400: 74 20 76 61 6C 75 65 20 74 6F 20 69 74 73 20 6E t value to its n
01E410: 65 67 61 74 69 76 65 2C 20 74 6F 20 61 6C 6C 6F egative, to allo
01E420: 77 20 62 6C 69 6E 6B 69 6E 67 0D 0A 2A 29 0D 0A w blinking..*)..
01E430: 56 41 52 09 57 61 73 55 6E 64 65 72 4C 69 6E 65 VAR.WasUnderLine
01E440: 64 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B d:BOOLEAN=FALSE;
01E450: 0D 0A 09 54 69 6D 65 54 6F 43 68 61 6E 67 65 3A ...TimeToChange:
01E460: 49 4E 54 45 47 45 52 3D 30 3B 0D 0A 09 4F 75 74 INTEGER=0;...Out
01E470: 70 75 74 45 6E 61 62 6C 65 64 3A 42 4F 4F 4C 45 putEnabled:BOOLE
01E480: 41 4E 3B 0D 0A 0D 0A 28 2A 09 42 6C 69 6E 6B 20 AN;....(*.Blink
01E490: 63 75 72 73 6F 72 20 2D 20 64 65 63 72 65 6D 65 cursor - decreme
01E4A0: 6E 74 20 74 69 6D 65 72 2C 20 69 66 20 6E 65 67 nt timer, if neg
01E4B0: 61 74 69 76 65 20 72 65 73 65 74 20 61 6E 64 0D ative reset and.
01E4C0: 0A 09 63 68 61 6E 67 65 20 74 6F 70 20 62 69 74 ..change top bit
01E4D0: 20 6F 66 20 63 68 61 72 61 63 74 65 72 20 75 6E of character un
01E4E0: 64 65 72 20 63 75 72 73 6F 72 2A 29 0D 0A 0D 0A der cursor*)....
01E4F0: 50 52 4F 43 45 44 55 52 45 20 42 6C 69 6E 6B 43 PROCEDURE BlinkC
01E500: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
01E510: 4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D ODULE ScreenIO;.
01E520: 0A 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 74 68 ...(*.This is th
01E530: 65 20 6D 65 6D 6F 72 79 20 6D 61 70 70 65 64 20 e memory mapped
01E540: 76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72 65 65 version of scree
01E550: 6E 20 69 6E 70 75 74 2D 6F 75 74 70 75 74 0D 0A n input-output..
01E560: 0D 0A 09 54 6F 20 75 73 65 20 69 74 20 6F 6E 20 ...To use it on
01E570: 79 6F 75 72 20 6D 61 63 68 69 6E 65 2C 20 79 6F your machine, yo
01E580: 75 20 6D 61 79 20 6E 65 65 64 20 74 6F 20 63 68 u may need to ch
01E590: 61 6E 67 65 20 73 6F 6D 65 20 6F 66 20 74 68 65 ange some of the
01E5A0: 20 0D 0A 09 63 6F 6E 73 74 61 6E 74 73 20 62 65 ...constants be
01E5B0: 6C 6F 77 0D 0A 0D 0A 09 54 68 65 20 6D 6F 64 75 low.....The modu
01E5C0: 6C 65 20 61 73 73 75 6D 65 73 20 74 68 61 74 20 le assumes that
01E5D0: 74 68 65 20 6D 65 6D 6F 72 79 20 66 6F 72 20 74 the memory for t
01E5E0: 68 65 20 73 63 72 65 65 6E 20 69 73 20 63 6F 6E he screen is con
01E5F0: 74 69 67 75 6F 75 73 20 0D 0A 09 61 6E 64 20 69 tiguous ...and i
01E600: 6E 20 74 68 65 20 64 65 66 61 75 6C 74 20 62 61 n the default ba
01E610: 6E 6B 2E 20 28 49 66 20 69 74 20 69 73 20 69 6E nk. (If it is in
01E620: 20 61 6E 6F 74 68 65 72 20 62 61 6E 6B 2C 20 79 another bank, y
01E630: 6F 75 20 77 69 6C 6C 20 68 61 76 65 20 0D 0A 09 ou will have ...
01E640: 74 6F 20 63 68 61 6E 67 65 20 74 68 65 20 63 6F to change the co
01E650: 64 65 20 6F 66 20 74 68 65 20 6D 6F 64 75 6C 65 de of the module
01E660: 20 61 70 70 72 6F 70 72 69 61 74 65 6C 79 29 0D appropriately).
01E670: 0A 0D 0A 09 54 68 65 20 76 61 6C 75 65 73 20 73 ....The values s
01E680: 65 74 20 62 65 6C 6F 77 20 61 72 65 20 66 6F 72 et below are for
01E690: 20 61 6E 20 4F 73 62 6F 72 6E 65 20 31 20 77 69 an Osborne 1 wi
01E6A0: 74 68 20 53 63 72 65 65 6E 20 50 61 63 6B 0D 0A th Screen Pack..
01E6B0: 0D 0A 09 4E 6F 74 65 20 74 68 61 74 20 74 68 69 ...Note that thi
01E6C0: 73 20 76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72 s version of scr
01E6D0: 65 65 6E 69 6F 20 64 6F 65 73 20 6E 6F 74 20 75 eenio does not u
01E6E0: 73 65 20 74 68 65 20 74 65 72 6D 69 6E 61 6C 20 se the terminal
01E6F0: 0D 0A 09 64 65 66 69 6E 69 74 69 6F 6E 20 66 69 ...definition fi
01E700: 75 72 73 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 ursor;..BEGIN...
01E710: 44 45 43 28 54 69 6D 65 54 6F 43 68 61 6E 67 65 DEC(TimeToChange
01E720: 29 3B 0D 0A 09 49 46 20 54 69 6D 65 54 6F 43 68 );...IF TimeToCh
01E730: 61 6E 67 65 3C 30 20 54 48 45 4E 0D 0A 09 09 54 ange<0 THEN....T
01E740: 69 6D 65 54 6F 43 68 61 6E 67 65 3A 3D 39 30 30 imeToChange:=900
01E750: 3B 09 28 2A 63 68 61 6E 67 65 20 74 6F 20 63 68 ;.(*change to ch
01E760: 61 6E 67 65 20 62 6C 69 6E 6B 20 72 61 74 65 2A ange blink rate*
01E770: 29 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 65 )....Screen[Scre
01E780: 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 28 enPos]:=CHR(ORD(
01E790: 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 Screen[ScreenPos
01E7A0: 5D 29 2B 31 32 38 29 0D 0A 09 09 45 4E 44 0D 0A ])+128)....END..
01E7B0: 09 45 4E 44 20 42 6C 69 6E 6B 43 75 72 73 6F 72 .END BlinkCursor
01E7C0: 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 ;....PROCEDURE C
01E7D0: 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 42 45 47 learCursor;..BEG
01E7E0: 49 4E 0D 0A 09 49 46 20 28 53 63 72 65 65 6E 5B IN...IF (Screen[
01E7F0: 53 63 72 65 65 6E 50 6F 73 5D 3E 37 66 78 29 3C ScreenPos]>7fx)<
01E800: 3E 57 61 73 55 6E 64 65 72 4C 69 6E 65 64 20 54 >WasUnderLined T
01E810: 48 45 4E 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 HEN....Screen[Sc
01E820: 72 65 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 reenPos]:=CHR(OR
01E830: 44 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 D(Screen[ScreenP
01E840: 6F 73 5D 29 2B 31 32 38 29 3B 0D 0A 09 09 45 4E os])+128);....EN
01E850: 44 3B 0D 0A 09 57 61 73 55 6E 64 65 72 4C 69 6E D;...WasUnderLin
01E860: 65 64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 45 4E 44 ed:=FALSE;...END
01E870: 20 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 50 ClearCursor;..P
01E880: 52 4F 43 45 44 55 52 45 20 53 65 74 43 75 72 73 ROCEDURE SetCurs
01E890: 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 61 73 or;..BEGIN...Was
01E8A0: 55 6E 64 65 72 4C 69 6E 65 64 3A 3D 53 63 72 65 UnderLined:=Scre
01E8B0: 65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3E 3D 38 en[ScreenPos]>=8
01E8C0: 30 78 3B 0D 0A 09 53 63 72 65 65 6E 5B 53 63 72 0x;...Screen[Scr
01E8D0: 65 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 eenPos]:=CHR(ORD
01E8E0: 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F (Screen[ScreenPo
01E8F0: 73 5D 29 2B 31 32 38 29 3B 0D 0A 09 45 4E 44 20 s])+128);...END
01E900: 6C 65 2E 20 48 65 6E 63 65 2C 20 74 68 65 20 67 le. Hence, the g
01E910: 72 61 70 68 69 63 73 20 63 68 61 72 61 63 74 65 raphics characte
01E920: 72 73 20 66 6F 72 20 74 68 65 20 62 6F 78 20 61 rs for the box a
01E930: 72 65 0D 0A 09 68 61 72 64 20 63 6F 64 65 64 20 re...hard coded
01E940: 69 6E 20 74 68 65 20 66 69 6C 65 0D 0A 0D 0A 09 in the file.....
01E950: 54 68 69 73 20 76 65 72 73 69 6F 6E 20 77 69 6C This version wil
01E960: 6C 20 6E 6F 74 20 73 75 70 70 6F 72 74 20 68 61 l not support ha
01E970: 6C 66 20 69 6E 74 65 6E 73 69 74 79 20 6F 6E 20 lf intensity on
01E980: 74 68 65 20 4F 73 62 6F 72 6E 65 20 73 69 6E 63 the Osborne sinc
01E990: 65 20 0D 0A 09 74 68 61 74 20 66 61 63 69 6C 69 e ...that facili
01E9A0: 74 79 20 64 6F 65 73 20 6E 6F 74 20 77 6F 72 6B ty does not work
01E9B0: 20 61 73 20 64 6F 63 75 6D 65 6E 74 65 64 2E 20 as documented.
01E9C0: 54 68 69 73 20 6D 61 79 20 62 65 20 73 6F 6D 65 This may be some
01E9D0: 74 68 69 6E 67 0D 0A 09 74 6F 20 64 6F 20 77 69 thing...to do wi
01E9E0: 74 68 20 6D 79 20 4F 73 62 6F 72 6E 65 20 68 61 th my Osborne ha
01E9F0: 76 69 6E 67 20 62 65 65 6E 20 68 61 63 6B 65 64 ving been hacked
01EA00: 0D 0A 0D 0A 09 54 68 69 73 20 76 65 72 73 69 6F .....This versio
01EA10: 6E 20 77 69 6C 6C 20 6E 6F 74 20 73 63 72 6F 6C n will not scrol
01EA20: 6C 20 74 68 65 20 73 63 72 65 65 6E 20 65 69 74 l the screen eit
01EA30: 68 65 72 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D 20 her..*)....FROM
01EA40: 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 Terminal IMPORT
01EA50: 43 68 61 72 52 6F 75 74 69 6E 65 2C 43 68 61 72 CharRoutine,Char
01EA60: 45 6E 61 62 6C 65 64 2C 42 6C 69 6E 6B 52 6F 75 Enabled,BlinkRou
01EA70: 74 69 6E 65 2C 42 6C 69 6E 6B 45 6E 61 62 6C 65 tine,BlinkEnable
01EA80: 64 3B 0D 0A 46 52 4F 4D 20 46 61 73 74 4D 6F 76 d;..FROM FastMov
01EA90: 65 20 49 4D 50 4F 52 54 20 4D 6F 76 65 75 70 2C e IMPORT Moveup,
01EAA0: 4D 6F 76 65 64 6F 77 6E 3B 0D 0A 46 52 4F 4D 20 Movedown;..FROM
01EAB0: 53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 41 44 SYSTEM IMPORT AD
01EAC0: 52 2C 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 43 50 R,SIZE;..FROM CP
01EAD0: 4D 20 49 4D 50 4F 52 54 20 77 63 63 66 63 2C 42 M IMPORT wccfc,B
01EAE0: 44 4F 53 3B 0D 0A 28 2A 46 52 4F 4D 20 4F 73 62 DOS;..(*FROM Osb
01EAF0: 6F 72 6E 65 20 49 4D 50 4F 52 54 20 42 61 6E 6B orne IMPORT Bank
01EB00: 53 65 74 43 75 72 73 6F 72 3B 0D 0A 0D 0A 50 52 SetCursor;....PR
01EB10: 4F 43 45 44 55 52 45 20 47 6F 74 6F 78 79 28 78 OCEDURE Gotoxy(x
01EB20: 2C 79 3A 43 41 52 44 49 4E 41 4C 29 3B 09 09 0D ,y:CARDINAL);...
01EB30: 0A 0D 0A 28 2A 09 09 50 6F 73 69 74 69 6F 6E 20 ...(*..Position
01EB40: 74 6F 20 67 69 76 65 6E 20 63 6F 6F 72 64 69 6E to given coordin
01EB50: 61 74 65 73 0D 0A 09 09 74 6F 70 20 6C 65 66 74 ates....top left
01EB60: 20 69 73 20 61 6C 77 61 79 73 20 30 2C 30 20 0D is always 0,0 .
01EB70: 0A 0D 0A 09 09 78 20 69 73 20 63 6F 6C 75 6D 6E .....x is column
01EB80: 2C 20 79 20 69 73 20 72 6F 77 0D 0A 0D 0A 09 09 , y is row......
01EB90: 41 20 27 53 74 61 6E 64 61 72 64 27 20 53 63 72 A 'Standard' Scr
01EBA0: 65 65 6E 20 69 73 20 38 30 20 62 79 20 32 34 2E een is 80 by 24.
01EBB0: 20 54 68 65 20 6C 69 6D 69 74 20 69 73 20 73 65 The limit is se
01EBC0: 74 20 62 79 0D 0A 09 09 74 68 65 20 74 65 72 6D t by....the term
01EBD0: 69 6E 61 6C 20 64 65 66 69 6E 69 74 69 6F 6E 20 inal definition
01EBE0: 66 69 6C 65 09 2A 29 0D 0A 42 45 47 49 4E 0D 0A file.*)..BEGIN..
01EBF0: 20 20 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 IF OutputEna
01EC00: 62 6C 65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 bled THEN...Clea
01EC10: 72 43 75 72 73 6F 72 3B 0D 0A 09 43 6F 6C 4E 6F rCursor;...ColNo
01EC20: 3A 3D 78 3B 0D 0A 09 52 6F 77 4E 6F 3A 3D 79 3B :=x;...RowNo:=y;
01EC30: 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D 43 6F ...ScreenPos:=Co
01EC40: 6C 4E 6F 2B 52 6F 77 4E 6F 2A 43 68 61 72 49 6E lNo+RowNo*CharIn
01EC50: 63 72 65 6D 65 6E 74 2A 52 6F 77 57 69 64 74 68 crement*RowWidth
01EC60: 3B 0D 0A 09 49 46 20 53 63 72 65 65 6E 50 6F 73 ;...IF ScreenPos
01EC70: 3E 3D 53 63 72 65 65 6E 53 69 7A 65 20 54 48 45 >=ScreenSize THE
01EC80: 4E 0D 0A 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A N....ColNo:=0;..
01EC90: 09 09 52 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 09 53 ..RowNo:=0;....S
01ECA0: 63 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 09 creenPos:=0;....
01ECB0: 45 4E 44 3B 0D 0A 09 53 65 74 43 75 72 73 6F 72 END;...SetCursor
01ECC0: 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45 4E ;...END;.. EN
01ECD0: 44 20 47 6F 74 6F 78 79 3B 0D 0A 0D 0A 50 52 4F D Gotoxy;....PRO
01ECE0: 43 45 44 55 52 45 20 50 75 74 61 6E 64 49 6E 63 CEDURE PutandInc
01ECF0: 28 63 68 3A 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A (ch:CHAR);....(*
01ED00: 32 3B 2A 29 0D 0A 46 52 4F 4D 20 49 6E 74 4C 6F 2;*)..FROM IntLo
01ED10: 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E 44 3B gic IMPORT IAND;
01ED20: 0D 0A 0D 0A 28 2A 09 53 63 72 65 65 6E 20 68 61 ....(*.Screen ha
01ED30: 6E 64 6C 69 6E 67 20 72 6F 75 74 69 6E 65 73 20 ndling routines
01ED40: 66 6F 72 20 63 75 72 73 6F 72 20 70 6F 73 69 74 for cursor posit
01ED50: 69 6F 6E 2C 20 61 74 74 72 69 62 75 74 65 20 65 ion, attribute e
01ED60: 74 63 0D 0A 0D 0A 09 53 70 65 63 69 66 69 63 20 tc.....Specific
01ED70: 74 6F 20 74 68 69 73 20 63 6F 6D 70 69 6C 65 72 to this compiler
01ED80: 2A 29 0D 0A 0D 0A 43 4F 4E 53 54 09 4C 6F 67 53 *)....CONST.LogS
01ED90: 63 72 65 65 6E 57 69 64 74 68 3D 38 30 3B 09 28 creenWidth=80;.(
01EDA0: 2A 4C 6F 67 69 63 61 6C 20 73 63 72 65 65 6E 20 *Logical screen
01EDB0: 77 69 64 74 68 20 0D 0A 09 09 09 09 28 6D 61 6E width ......(man
01EDC0: 79 20 70 65 6F 70 6C 65 20 6F 6E 6C 79 20 68 61 y people only ha
01EDD0: 76 65 20 38 30 29 2A 29 0D 0A 09 52 6F 77 57 69 ve 80)*)...RowWi
01EDE0: 64 74 68 3D 38 30 3B 09 09 28 2A 77 69 64 74 68 dth=80;..(*width
01EDF0: 20 6F 66 20 6D 65 6D 6F 72 79 20 66 6F 72 20 6F of memory for o
01EE00: 6E 65 20 72 6F 77 20 0D 0A 09 09 09 09 28 69 2E ne row ......(i.
01EE10: 65 2E 20 6E 75 6D 62 65 72 20 6F 66 20 62 79 74 e. number of byt
01EE20: 65 73 2A 29 0D 0A 09 4C 6F 67 53 63 72 65 65 6E es*)...LogScreen
01EE30: 44 65 70 74 68 3D 32 34 3B 09 09 28 2A 4C 69 6E Depth=24;..(*Lin
01EE40: 65 73 20 6F 6E 20 74 68 65 20 73 63 72 65 65 6E es on the screen
01EE50: 2A 29 0D 0A 09 53 63 72 65 65 6E 53 74 61 72 74 *)...ScreenStart
01EE60: 3D 30 66 30 30 30 68 3B 09 28 2A 62 61 73 65 20 =0f000h;.(*base
01EE70: 6F 66 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 68 of screen*)...Ch
01EE80: 61 72 49 6E 63 72 65 6D 65 6E 74 3D 31 3B 09 28 arIncrement=1;.(
01EE90: 2A 6E 75 6D 62 65 72 20 6F 66 20 62 79 74 65 73 *number of bytes
01EEA0: 20 62 65 74 77 65 65 6E 20 63 68 61 72 61 63 74 between charact
01EEB0: 65 72 73 2A 29 0D 0A 09 53 63 72 65 65 6E 53 69 ers*)...ScreenSi
01EEC0: 7A 65 3D 38 30 2A 32 34 3B 09 28 2A 6E 75 6D 62 ze=80*24;.(*numb
01EED0: 65 72 20 6F 66 20 62 79 74 65 73 20 69 6E 20 73 er of bytes in s
01EEE0: 63 72 65 65 6E 20 61 72 65 61 2A 29 0D 0A 0D 0A creen area*)....
01EEF0: 09 43 52 3D 30 64 78 3B 09 09 09 28 2A 43 61 72 .CR=0dx;...(*Car
01EF00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
01EF10: 1A 00 01 00 02 09 52 E5 1A 00 C9 02 00 00 00 02 ......R.........
01EF20: 1A 00 C5 02 00 00 00 02 1A 00 C1 02 00 00 00 02 ................
01EF30: 1A 00 C6 02 00 00 00 02 1A 00 C2 02 00 00 00 02 ................
01EF40: 1A 00 C7 02 00 00 00 02 1A 00 C3 02 00 00 00 02 ................
01EF50: 1A 00 C8 02 00 00 00 02 1A 00 C4 02 00 00 00 02 ................
01EF60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EF70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EF80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EF90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01F000: 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D 0A 09 09 owWidth-1 DO....
01F010: 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 3B 0D Screen[i]:=' ';.
01F020: 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 43 75 72 ...END;...SetCur
01F030: 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 sor;...END;..
01F040: 20 45 4E 44 20 53 63 72 6F 6C 6C 57 69 6E 64 6F END ScrollWindo
01F050: 77 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 wUp;..PROCEDURE
01F060: 53 63 72 6F 6C 6C 57 69 6E 64 6F 77 44 6F 77 6E ScrollWindowDown
01F070: 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 (StartofWindow,E
01F080: 6E 64 6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 ndofWindow:CARDI
01F090: 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 NAL);..BEGIN..
01F0A0: 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62 6C IF OutputEnabl
01F0B0: 65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 43 ed THEN...ClearC
01F0C0: 75 72 73 6F 72 3B 0D 0A 09 4D 6F 76 65 64 6F 77 ursor;...Movedow
01F0D0: 6E 28 41 44 52 28 53 63 72 65 65 6E 5B 28 53 74 n(ADR(Screen[(St
01F0E0: 61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52 artofWindow+1)*R
01F0F0: 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 20 41 owWidth]),.... A
01F100: 44 52 28 53 63 72 65 65 6E 5B 28 53 74 61 72 74 DR(Screen[(Start
01F110: 6F 66 57 69 6E 64 6F 77 29 2A 52 6F 77 57 69 64 ofWindow)*RowWid
01F120: 74 68 5D 29 2C 0D 0A 09 09 20 28 45 6E 64 6F 66 th]),.... (Endof
01F130: 57 69 6E 64 6F 77 2D 53 74 61 72 74 6F 66 57 69 Window-StartofWi
01F140: 6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 29 3B ndow)*RowWidth);
01F150: 0D 0A 09 46 4F 52 20 69 3A 3D 45 6E 64 6F 66 57 ...FOR i:=EndofW
01F160: 69 6E 64 6F 77 2A 52 6F 77 57 69 64 74 68 20 54 indow*RowWidth T
01F170: 4F 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2B 31 O (EndofWindow+1
01F180: 29 2A 52 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D )*RowWidth-1 DO.
01F190: 0A 09 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 ...Screen[i]:='
01F1A0: 27 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 ';....END;...Set
01F1B0: 43 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D 0A Cursor;...END;..
01F1C0: 20 20 20 20 45 4E 44 20 53 63 72 6F 6C 6C 57 69 END ScrollWi
01F1D0: 6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 50 52 4F ndowDown;....PRO
01F1E0: 43 45 44 55 52 45 20 4C 6F 61 64 54 65 72 6D 43 CEDURE LoadTermC
01F1F0: 6F 64 65 28 46 3A 46 69 6C 65 4E 61 6D 65 29 3B ode(F:FileName);
01F200: 63 72 65 65 6E 50 6F 73 2B 31 5D 29 2C 52 6F 77 creenPos+1]),Row
01F210: 57 69 64 74 68 2D 43 6F 6C 4E 6F 2D 31 29 3B 0D Width-ColNo-1);.
01F220: 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 65 65 6E ...Screen[Screen
01F230: 50 6F 73 5D 3A 3D 27 20 27 7C 0D 0A 09 49 6E 73 Pos]:=' '|...Ins
01F240: 4C 69 6E 65 3A 28 2A 4D 6F 76 65 20 72 65 73 74 Line:(*Move rest
01F250: 20 6F 66 20 73 63 72 65 65 6E 20 64 6F 77 6E 20 of screen down
01F260: 6F 6E 65 20 6C 69 6E 65 2C 20 61 64 64 20 62 6C one line, add bl
01F270: 61 6E 6B 20 6C 69 6E 65 2A 29 0D 0A 09 09 4D 6F ank line*)....Mo
01F280: 76 65 75 70 28 41 44 52 28 53 63 72 65 65 6E 5B veup(ADR(Screen[
01F290: 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 5D ScreenPos-ColNo]
01F2A0: 29 2C 41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 ),ADR(Screen[Scr
01F2B0: 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52 6F 77 eenPos-ColNo+Row
01F2C0: 57 69 64 74 68 5D 29 2C 0D 0A 09 09 53 63 72 65 Width]),....Scre
01F2D0: 65 6E 53 69 7A 65 2D 53 63 72 65 65 6E 50 6F 73 enSize-ScreenPos
01F2E0: 2B 43 6F 6C 4E 6F 2D 52 6F 77 57 69 64 74 68 29 +ColNo-RowWidth)
01F2F0: 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 53 63 72 65 ;....FOR i:=Scre
01F300: 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 20 54 4F 20 53 enPos-ColNo TO S
01F310: 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52 creenPos-ColNo+R
01F320: 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D 0A 09 09 owWidth-1 DO....
01F330: 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 3B .Screen[i]:=' ';
01F340: 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 7C 0D 0A .....END;....|..
01F350: 09 44 65 6C 45 6F 6C 3A 46 4F 52 20 69 3A 3D 53 .DelEol:FOR i:=S
01F360: 63 72 65 65 6E 50 6F 73 20 54 4F 20 53 63 72 65 creenPos TO Scre
01F370: 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52 6F 77 57 enPos-ColNo+RowW
01F380: 69 64 74 68 2D 31 20 44 4F 20 53 63 72 65 65 6E idth-1 DO Screen
01F390: 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 7C 0D 0A 09 [i]:=' ' END|...
01F3A0: 44 65 6C 45 6F 73 3A 46 4F 52 20 69 3A 3D 53 63 DelEos:FOR i:=Sc
01F3B0: 72 65 65 6E 50 6F 73 20 54 4F 20 53 63 72 65 65 reenPos TO Scree
01F3C0: 6E 53 69 7A 65 2D 31 20 44 4F 20 53 63 72 65 65 nSize-1 DO Scree
01F3D0: 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 7C 0D 0A n[i]:=' ' END|..
01F3E0: 09 43 6C 65 61 72 53 63 72 65 65 6E 3A 0D 0A 09 .ClearScreen:...
01F3F0: 09 09 28 2A 4F 73 62 6F 72 6E 65 20 73 70 65 63 ..(*Osborne spec
01F400: 69 74 68 20 74 68 65 20 61 64 64 72 65 73 73 20 ith the address
01F410: 6F 66 20 74 68 69 73 20 72 6F 75 74 69 6E 65 0D of this routine.
01F420: 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74 69 6E 65 ....This routine
01F430: 20 77 69 6C 6C 20 6E 65 65 64 20 63 68 61 6E 67 will need chang
01F440: 69 6E 67 20 66 6F 72 20 64 69 66 66 65 72 65 6E ing for differen
01F450: 74 20 76 69 64 65 6F 20 73 79 73 74 65 6D 73 0D t video systems.
01F460: 0A 0D 0A 09 54 68 65 20 4F 73 62 6F 72 6E 65 20 ....The Osborne
01F470: 31 20 69 73 20 76 65 72 79 20 6C 69 6D 69 74 65 1 is very limite
01F480: 64 20 2D 20 61 6C 6C 20 79 6F 75 20 63 61 6E 20 d - all you can
01F490: 64 6F 20 69 73 0D 0A 09 75 6E 64 65 72 6C 69 6E do is...underlin
01F4A0: 65 20 61 6E 64 20 68 61 6C 66 20 69 6E 74 65 6E e and half inten
01F4B0: 73 69 74 79 2E 20 41 6C 6C 20 6F 74 68 65 72 73 sity. All others
01F4C0: 20 61 72 65 20 6D 61 70 70 65 64 20 6F 6E 74 6F are mapped onto
01F4D0: 20 74 68 65 73 65 20 74 77 6F 0D 0A 2A 29 0D 0A these two..*)..
01F4E0: 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F 75 BEGIN.. IF Ou
01F4F0: 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45 4E tputEnabled THEN
01F500: 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D ...ClearCursor;.
01F510: 0A 09 49 46 20 63 68 3E 30 37 66 78 20 54 48 45 ..IF ch>07fx THE
01F520: 4E 20 63 68 3A 3D 43 48 52 28 4F 52 44 28 63 68 N ch:=CHR(ORD(ch
01F530: 29 2D 31 32 38 29 20 45 4E 44 3B 0D 0A 09 49 46 )-128) END;...IF
01F540: 20 63 68 3D 43 52 20 54 48 45 4E 0D 0A 09 09 53 ch=CR THEN....S
01F550: 63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E creenPos:=Screen
01F560: 50 6F 73 2D 43 6F 6C 4E 6F 3B 0D 0A 09 09 43 6F Pos-ColNo;....Co
01F570: 6C 4E 6F 3A 3D 30 3B 0D 0A 09 45 4C 53 49 46 20 lNo:=0;...ELSIF
01F580: 63 68 3D 4C 46 20 54 48 45 4E 0D 0A 09 09 49 46 ch=LF THEN....IF
01F590: 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 72 65 65 RowNo<(LogScree
01F5A0: 6E 44 65 70 74 68 2D 31 29 20 54 48 45 4E 0D 0A nDepth-1) THEN..
01F5B0: 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A ...INC(RowNo);..
01F5C0: 09 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63 ...ScreenPos:=Sc
01F5D0: 72 65 65 6E 50 6F 73 2B 52 6F 77 57 69 64 74 68 reenPos+RowWidth
01F5E0: 3B 0D 0A 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49 ;.....END...ELSI
01F5F0: 46 20 63 68 3D 42 53 20 54 48 45 4E 0D 0A 09 09 F ch=BS THEN....
01F600: 69 66 69 63 20 2D 20 68 6F 6D 65 20 73 63 72 65 ific - home scre
01F610: 65 6E 20 61 6E 64 20 63 75 72 73 6F 72 20 0D 0A en and cursor ..
01F620: 09 09 09 20 70 6F 73 69 74 69 6F 6E 20 61 73 20 ... position as
01F630: 73 74 6F 72 65 64 20 69 6E 20 42 49 4F 53 20 74 stored in BIOS t
01F640: 61 62 6C 65 73 2A 29 0D 0A 09 09 0D 0A 09 09 09 ables*).........
01F650: 28 2A 6E 6F 77 20 63 6C 65 61 72 20 64 69 73 70 (*now clear disp
01F660: 6C 61 79 20 6D 65 6D 6F 72 79 2A 29 0D 0A 09 09 lay memory*)....
01F670: 20 20 20 20 53 63 72 65 65 6E 5B 30 5D 3A 3D 27 Screen[0]:='
01F680: 20 27 3B 0D 0A 09 09 20 20 20 20 4D 6F 76 65 75 ';.... Moveu
01F690: 70 28 41 44 52 28 53 63 72 65 65 6E 5B 31 5D 29 p(ADR(Screen[1])
01F6A0: 2C 41 44 52 28 53 63 72 65 65 6E 5B 30 5D 29 2C ,ADR(Screen[0]),
01F6B0: 53 63 72 65 65 6E 53 69 7A 65 2D 31 29 3B 0D 0A ScreenSize-1);..
01F6C0: 09 09 20 20 20 20 53 63 72 65 65 6E 50 6F 73 3A .. ScreenPos:
01F6D0: 3D 30 3B 0D 0A 09 09 20 20 20 20 43 6F 6C 4E 6F =0;.... ColNo
01F6E0: 3A 3D 30 3B 0D 0A 09 09 20 20 20 20 52 6F 77 4E :=0;.... RowN
01F6F0: 6F 3A 3D 30 0D 0A 09 09 20 20 20 20 7C 0D 0A 0D o:=0.... |...
01F700: 0A 09 28 2A 20 54 68 65 20 66 6F 6C 6C 6F 77 69 ..(* The followi
01F710: 6E 67 20 67 72 61 70 68 69 63 73 20 63 68 61 72 ng graphics char
01F720: 61 63 74 65 72 73 20 77 69 6C 6C 20 6E 65 65 64 acters will need
01F730: 20 74 6F 20 62 65 20 6D 6F 64 69 66 69 65 64 20 to be modified
01F740: 66 6F 72 20 0D 0A 09 20 20 20 64 69 66 66 65 72 for ... differ
01F750: 65 6E 74 20 64 69 73 70 6C 61 79 20 73 79 73 74 ent display syst
01F760: 65 6D 73 2A 29 0D 0A 0D 0A 09 48 6F 72 69 7A 6F ems*).....Horizo
01F770: 6E 74 61 6C 3A 50 75 74 61 6E 64 49 6E 63 28 38 ntal:PutandInc(8
01F780: 31 78 29 7C 0D 0A 09 56 65 72 74 69 63 61 6C 3A 1x)|...Vertical:
01F790: 50 75 74 61 6E 64 49 6E 63 28 38 30 78 29 7C 0D PutandInc(80x)|.
01F7A0: 0A 09 43 6F 72 6E 65 72 4C 4C 3A 50 75 74 61 6E ..CornerLL:Putan
01F7B0: 64 49 6E 63 28 38 34 78 29 7C 0D 0A 09 43 6F 72 dInc(84x)|...Cor
01F7C0: 6E 65 72 55 4C 3A 50 75 74 61 6E 64 49 6E 63 28 nerUL:PutandInc(
01F7D0: 38 32 78 29 7C 0D 0A 09 43 6F 72 6E 65 72 55 52 82x)|...CornerUR
01F7E0: 3A 50 75 74 61 6E 64 49 6E 63 28 38 33 78 29 7C :PutandInc(83x)|
01F7F0: 0D 0A 09 43 6F 72 6E 65 72 4C 52 3A 50 75 74 61 ...CornerLR:Puta
01F800: 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48 45 4E 0D IF ColNo>0 THEN.
01F810: 0A 09 09 09 44 45 43 28 43 6F 6C 4E 6F 29 3B 0D ....DEC(ColNo);.
01F820: 0A 09 09 09 44 45 43 28 53 63 72 65 65 6E 50 6F ....DEC(ScreenPo
01F830: 73 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 5B 53 s);.....Screen[S
01F840: 63 72 65 65 6E 50 6F 73 5D 3A 3D 27 20 27 0D 0A creenPos]:=' '..
01F850: 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49 46 20 63 ...END...ELSIF c
01F860: 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 09 4C 4F h=TAB THEN....LO
01F870: 4F 50 0D 0A 09 09 09 49 46 20 43 6F 6C 4E 6F 3E OP.....IF ColNo>
01F880: 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D =LogScreenWidth-
01F890: 31 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 1 THEN EXIT END;
01F8A0: 0D 0A 09 09 09 53 63 72 65 65 6E 5B 53 63 72 65 .....Screen[Scre
01F8B0: 65 6E 50 6F 73 5D 3A 3D 27 20 27 3B 0D 0A 09 09 enPos]:=' ';....
01F8C0: 09 49 4E 43 28 53 63 72 65 65 6E 50 6F 73 29 3B .INC(ScreenPos);
01F8D0: 0D 0A 09 09 09 49 4E 43 28 43 6F 6C 4E 6F 29 3B .....INC(ColNo);
01F8E0: 0D 0A 09 09 09 49 46 20 49 41 4E 44 28 43 6F 6C .....IF IAND(Col
01F8F0: 4E 6F 2C 37 29 3D 30 20 54 48 45 4E 20 45 58 49 No,7)=0 THEN EXI
01F900: 54 20 45 4E 44 0D 0A 09 09 09 45 4E 44 20 28 2A T END.....END (*
01F910: 4C 4F 4F 50 2A 29 0D 0A 09 45 4C 53 45 09 0D 0A LOOP*)...ELSE...
01F920: 09 09 49 46 20 55 6E 64 65 72 4C 69 6E 65 20 4F ..IF UnderLine O
01F930: 52 20 45 6E 68 61 6E 63 65 64 56 69 64 65 6F 20 R EnhancedVideo
01F940: 4F 52 20 42 6C 69 6E 6B 69 6E 67 20 4F 52 20 49 OR Blinking OR I
01F950: 6E 76 65 72 73 65 56 69 64 65 6F 20 54 48 45 4E nverseVideo THEN
01F960: 20 0D 0A 09 09 09 63 68 3A 3D 43 48 52 28 4F 52 .....ch:=CHR(OR
01F970: 44 28 63 68 29 2B 31 32 38 29 0D 0A 09 09 09 45 D(ch)+128).....E
01F980: 4E 44 3B 0D 0A 09 09 50 75 74 61 6E 64 49 6E 63 ND;....PutandInc
01F990: 28 63 68 29 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A (ch);....END; (*
01F9A0: 4E 6F 74 20 43 52 20 6F 72 20 4C 46 20 6F 72 20 Not CR or LF or
01F9B0: 54 41 42 2A 29 0D 0A 09 53 65 74 43 75 72 73 6F TAB*)...SetCurso
01F9C0: 72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45 r;...END;.. E
01F9D0: 4E 44 20 57 72 69 74 65 3B 0D 0A 0D 0A 0D 0A 50 ND Write;......P
01F9E0: 52 4F 43 45 44 55 52 45 20 53 63 72 65 65 6E 43 ROCEDURE ScreenC
01F9F0: 6F 6E 74 72 6F 6C 28 73 3A 45 64 69 74 73 29 3B ontrol(s:Edits);
01FA00: 6E 64 49 6E 63 28 38 35 78 29 7C 0D 0A 09 53 74 ndInc(85x)|...St
01FA10: 61 72 74 78 79 2C 4D 69 64 64 6C 65 58 59 2C 45 artxy,MiddleXY,E
01FA20: 6E 64 58 59 3A 28 2A 63 75 72 73 6F 72 20 61 64 ndXY:(*cursor ad
01FA30: 64 72 65 73 73 69 6E 67 20 2D 20 6E 6F 74 20 72 dressing - not r
01FA40: 65 71 75 69 72 65 64 2A 29 7C 0D 0A 09 52 69 6E equired*)|...Rin
01FA50: 67 42 65 6C 6C 3A 69 3A 3D 42 44 4F 53 28 77 63 gBell:i:=BDOS(wc
01FA60: 63 66 63 2C 37 29 7C 0D 0A 09 4D 6F 76 65 4C 65 cfc,7)|...MoveLe
01FA70: 66 74 3A 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48 ft:IF ColNo>0 TH
01FA80: 45 4E 20 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E EN .....DEC(ColN
01FA90: 6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 o);.....DEC(Scre
01FAA0: 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C 53 49 46 enPos);....ELSIF
01FAB0: 20 52 6F 77 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09 RowNo>0 THEN...
01FAC0: 09 09 44 45 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 ..DEC(RowNo);...
01FAD0: 09 09 43 6F 6C 4E 6F 3A 3D 4C 6F 67 53 63 72 65 ..ColNo:=LogScre
01FAE0: 65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 09 09 53 enWidth-1;.....S
01FAF0: 63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C 4E 6F 2B creenPos:=ColNo+
01FB00: 52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D RowNo*RowWidth;.
01FB10: 0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 52 ....END|...MoveR
01FB20: 69 67 68 74 3A 49 46 20 43 6F 6C 4E 6F 3C 28 4C ight:IF ColNo<(L
01FB30: 6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D 31 29 ogScreenWidth-1)
01FB40: 20 54 48 45 4E 20 0D 0A 09 09 09 49 4E 43 28 43 THEN .....INC(C
01FB50: 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 49 4E 43 28 53 olNo);.....INC(S
01FB60: 63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C creenPos);....EL
01FB70: 53 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 SIF RowNo<(LogSc
01FB80: 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 48 45 reenDepth-1) THE
01FB90: 4E 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D N.....ColNo:=0;.
01FBA0: 0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D ....INC(RowNo);.
01FBB0: 0A 09 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 52 ....ScreenPos:=R
01FBC0: 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D 0A owNo*RowWidth;..
01FBD0: 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 44 6F ...END|...MoveDo
01FBE0: 77 6E 3A 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 wn:IF RowNo<(Log
01FBF0: 53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 ScreenDepth-1) T
01FC00: 0D 0A 0D 0A 28 2A 09 09 50 65 72 66 6F 72 6D 20 ....(*..Perform
01FC10: 61 20 73 63 72 65 65 6E 20 63 6F 6E 74 72 6F 6C a screen control
01FC20: 20 6F 70 65 72 61 74 69 6F 6E 0D 0A 0D 0A 09 09 operation......
01FC30: 4D 61 79 20 6E 65 65 64 20 61 6C 74 65 72 61 74 May need alterat
01FC40: 69 6F 6E 20 66 6F 72 20 76 61 72 69 6F 75 73 20 ion for various
01FC50: 6D 61 63 68 69 6E 65 73 2A 29 0D 0A 0D 0A 42 45 machines*)....BE
01FC60: 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F 75 74 70 GIN.. IF Outp
01FC70: 75 74 45 6E 61 62 6C 65 64 20 54 48 45 4E 0D 0A utEnabled THEN..
01FC80: 09 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 09 .ClearCursor;...
01FC90: 43 41 53 45 20 73 20 4F 46 0D 0A 09 44 69 6D 3A CASE s OF...Dim:
01FCA0: 48 61 6C 66 49 6E 74 65 6E 73 69 74 79 3A 3D 54 HalfIntensity:=T
01FCB0: 52 55 45 7C 0D 0A 09 42 72 69 67 68 74 3A 09 48 RUE|...Bright:.H
01FCC0: 61 6C 66 49 6E 74 65 6E 73 69 74 79 3A 3D 46 41 alfIntensity:=FA
01FCD0: 4C 53 45 0D 0A 09 09 45 6E 68 61 6E 63 65 64 56 LSE....EnhancedV
01FCE0: 69 64 65 6F 3A 3D 54 52 55 45 7C 0D 0A 09 4E 6F ideo:=TRUE|...No
01FCF0: 72 6D 61 6C 3A 09 48 61 6C 66 49 6E 74 65 6E 73 rmal:.HalfIntens
01FD00: 69 74 79 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 45 ity:=FALSE;....E
01FD10: 6E 68 61 6E 63 65 64 56 69 64 65 6F 3A 3D 46 41 nhancedVideo:=FA
01FD20: 4C 53 45 3B 0D 0A 09 09 49 6E 76 65 72 73 65 56 LSE;....InverseV
01FD30: 69 64 65 6F 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 ideo:=FALSE;....
01FD40: 42 6C 69 6E 6B 69 6E 67 3A 3D 46 41 4C 53 45 3B Blinking:=FALSE;
01FD50: 0D 0A 09 09 55 6E 64 65 72 4C 69 6E 65 3A 3D 46 ....UnderLine:=F
01FD60: 41 4C 53 45 7C 0D 0A 09 49 6E 76 65 72 73 65 3A ALSE|...Inverse:
01FD70: 49 6E 76 65 72 73 65 56 69 64 65 6F 3A 3D 54 52 InverseVideo:=TR
01FD80: 55 45 7C 0D 0A 09 42 6C 69 6E 6B 3A 42 6C 69 6E UE|...Blink:Blin
01FD90: 6B 69 6E 67 3A 3D 54 52 55 45 7C 0D 0A 09 53 74 king:=TRUE|...St
01FDA0: 61 72 74 47 72 61 70 68 2C 45 6E 64 47 72 61 70 artGraph,EndGrap
01FDB0: 68 3A 28 2A 64 6F 20 6E 6F 74 68 69 6E 67 2A 29 h:(*do nothing*)
01FDC0: 7C 0D 0A 09 44 65 6C 43 68 61 72 3A 28 2A 4D 6F |...DelChar:(*Mo
01FDD0: 76 65 20 72 65 73 74 20 6F 66 20 6C 69 6E 65 20 ve rest of line
01FDE0: 75 70 20 6F 6E 65 2C 20 61 64 64 20 62 6C 61 6E up one, add blan
01FDF0: 6B 20 74 6F 20 65 6E 64 2A 29 0D 0A 09 09 4D 6F k to end*)....Mo
01FE00: 48 45 4E 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E HEN.....INC(RowN
01FE10: 6F 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F o);.....ScreenPo
01FE20: 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B 52 6F 77 s:=ScreenPos+Row
01FE30: 57 69 64 74 68 3B 0D 0A 09 09 09 45 4E 44 7C 0D Width;.....END|.
01FE40: 0A 09 4D 6F 76 65 55 70 3A 49 46 20 52 6F 77 4E ..MoveUp:IF RowN
01FE50: 6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09 44 45 43 o>0 THEN.....DEC
01FE60: 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 63 72 (RowNo);.....Scr
01FE70: 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F eenPos:=ScreenPo
01FE80: 73 2D 52 6F 77 57 69 64 74 68 3B 0D 0A 09 09 09 s-RowWidth;.....
01FE90: 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 43 END;....END; (*C
01FEA0: 41 53 45 2A 29 0D 0A 09 53 65 74 43 75 72 73 6F ASE*)...SetCurso
01FEB0: 72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45 r;...END;.. E
01FEC0: 4E 44 20 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C ND ScreenControl
01FED0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63 72 ;..PROCEDURE Scr
01FEE0: 6F 6C 6C 57 69 6E 64 6F 77 55 70 28 53 74 61 72 ollWindowUp(Star
01FEF0: 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 tofWindow,EndofW
01FF00: 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B indow:CARDINAL);
01FF10: 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 ..BEGIN.. IF
01FF20: 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 OutputEnabled TH
01FF30: 45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 EN...ClearCursor
01FF40: 3B 0D 0A 09 4D 6F 76 65 75 70 28 41 44 52 28 53 ;...Moveup(ADR(S
01FF50: 63 72 65 65 6E 5B 28 53 74 61 72 74 6F 66 57 69 creen[(StartofWi
01FF60: 6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 5D 29 ndow)*RowWidth])
01FF70: 2C 0D 0A 09 09 20 41 44 52 28 53 63 72 65 65 6E ,.... ADR(Screen
01FF80: 5B 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2B [(StartofWindow+
01FF90: 31 29 2A 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 1)*RowWidth]),..
01FFA0: 09 09 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2D .. (EndofWindow-
01FFB0: 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 29 2A 52 StartofWindow)*R
01FFC0: 6F 77 57 69 64 74 68 29 3B 0D 0A 09 46 4F 52 20 owWidth);...FOR
01FFD0: 69 3A 3D 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 i:=StartofWindow
01FFE0: 2A 52 6F 77 57 69 64 74 68 20 54 4F 20 28 53 74 *RowWidth TO (St
01FFF0: 61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52 artofWindow+1)*R
020000: 76 65 64 6F 77 6E 28 41 44 52 28 53 63 72 65 65 vedown(ADR(Scree
020010: 6E 5B 53 63 72 65 65 6E 50 6F 73 2B 31 5D 29 2C n[ScreenPos+1]),
020020: 41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 65 65 ADR(Screen[Scree
020030: 6E 50 6F 73 5D 29 2C 52 6F 77 57 69 64 74 68 2D nPos]),RowWidth-
020040: 43 6F 6C 4E 6F 2D 31 29 3B 0D 0A 09 09 53 63 72 ColNo-1);....Scr
020050: 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 2D 43 6F een[ScreenPos-Co
020060: 6C 4E 6F 2B 52 6F 77 57 69 64 74 68 2D 31 5D 3A lNo+RowWidth-1]:
020070: 3D 27 20 27 7C 0D 0A 09 44 65 6C 4C 69 6E 65 3A =' '|...DelLine:
020080: 28 2A 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 73 (*Move rest of s
020090: 63 72 65 65 6E 20 75 70 20 61 20 6C 69 6E 65 2C creen up a line,
0200A0: 20 61 64 64 20 62 6C 61 6E 6B 20 6C 69 6E 65 20 add blank line
0200B0: 61 74 20 65 6E 64 2A 29 0D 0A 09 09 4D 6F 76 65 at end*)....Move
0200C0: 64 6F 77 6E 28 41 44 52 28 53 63 72 65 65 6E 5B down(ADR(Screen[
0200D0: 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B ScreenPos-ColNo+
0200E0: 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 09 RowWidth]),.....
0200F0: 20 41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 65 ADR(Screen[Scre
020100: 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 5D 29 2C 0D 0A enPos-ColNo]),..
020110: 09 09 09 53 63 72 65 65 6E 53 69 7A 65 2D 53 63 ...ScreenSize-Sc
020120: 72 65 65 6E 50 6F 73 2B 43 6F 6C 4E 6F 2D 52 6F reenPos+ColNo-Ro
020130: 77 57 69 64 74 68 29 3B 0D 0A 09 09 46 4F 52 20 wWidth);....FOR
020140: 69 3A 3D 53 63 72 65 65 6E 53 69 7A 65 2D 52 6F i:=ScreenSize-Ro
020150: 77 57 69 64 74 68 20 54 4F 20 53 63 72 65 65 6E wWidth TO Screen
020160: 53 69 7A 65 2D 31 20 44 4F 20 53 63 72 65 65 6E Size-1 DO Screen
020170: 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 3B 0D 0A 09 [i]:=' ' END;...
020180: 09 7C 0D 0A 09 49 6E 73 43 68 61 72 3A 28 2A 4D .|...InsChar:(*M
020190: 6F 76 65 20 72 65 73 74 20 6F 66 20 6C 69 6E 65 ove rest of line
0201A0: 20 72 69 67 68 74 20 6F 6E 65 20 63 68 61 72 61 right one chara
0201B0: 63 74 65 72 2C 20 6C 61 73 74 20 63 68 61 72 61 cter, last chara
0201C0: 63 74 65 72 20 6D 61 79 20 62 65 20 6C 6F 73 74 cter may be lost
0201D0: 2A 29 0D 0A 09 09 4D 6F 76 65 75 70 28 41 44 52 *)....Moveup(ADR
0201E0: 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F (Screen[ScreenPo
0201F0: 73 5D 29 2C 41 44 52 28 53 63 72 65 65 6E 5B 53 s]),ADR(Screen[S
020200: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
020210: 1B 00 01 00 02 09 52 E5 1B 00 C9 02 00 00 00 02 ......R.........
020220: 1B 00 C5 02 00 00 00 02 1B 00 C1 02 00 00 00 02 ................
020230: 1B 00 C6 02 00 00 00 02 1B 00 C2 02 00 00 00 02 ................
020240: 1B 00 C7 02 00 00 00 02 1B 00 C3 02 00 00 00 02 ................
020250: 1B 00 C8 02 00 00 00 02 1B 00 C4 02 00 00 00 02 ................
020260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
020270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
020280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
020290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
020300: 43 61 72 72 69 61 67 65 20 72 65 74 75 72 6E 2A Carriage return*
020310: 29 0D 0A 09 4C 46 3D 30 61 78 3B 09 09 09 28 2A )...LF=0ax;...(*
020320: 4C 69 6E 65 20 66 65 65 64 2A 29 0D 0A 09 54 41 Line feed*)...TA
020330: 42 3D 30 39 78 3B 09 09 28 2A 54 41 42 2A 29 0D B=09x;..(*TAB*).
020340: 0A 09 42 53 3D 30 38 78 3B 0D 0A 56 41 52 0D 0A ..BS=08x;..VAR..
020350: 09 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 3A 42 .OutputEnabled:B
020360: 4F 4F 4C 45 41 4E 3B 0D 0A 09 53 63 72 65 65 6E OOLEAN;...Screen
020370: 5B 30 66 30 30 30 68 5D 3A 41 52 52 41 59 5B 30 [0f000h]:ARRAY[0
020380: 2E 2E 53 63 72 65 65 6E 53 69 7A 65 2D 31 5D 20 ..ScreenSize-1]
020390: 4F 46 20 43 48 41 52 3B 0D 0A 09 53 63 72 65 65 OF CHAR;...Scree
0203A0: 6E 50 6F 73 3A 43 41 52 44 49 4E 41 4C 3B 09 28 nPos:CARDINAL;.(
0203B0: 2A 6E 65 78 74 20 63 68 61 72 61 63 74 65 72 20 *next character
0203C0: 70 6F 73 69 74 69 6F 6E 20 6F 6E 20 73 63 72 65 position on scre
0203D0: 65 6E 2A 29 0D 0A 09 43 6F 6C 4E 6F 2C 52 6F 77 en*)...ColNo,Row
0203E0: 4E 6F 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 77 No:CARDINAL;.(*w
0203F0: 68 69 63 68 20 72 65 70 72 65 73 65 6E 74 73 20 hich represents
020400: 74 68 65 20 67 69 76 65 6E 20 70 6F 73 69 74 69 the given positi
020410: 6F 6E 2A 29 0D 0A 0D 0A 09 28 2A 09 43 6F 6E 74 on*).....(*.Cont
020420: 72 6F 6C 20 61 74 74 72 69 62 75 74 65 73 2A 29 rol attributes*)
020430: 0D 0A 0D 0A 09 48 61 6C 66 49 6E 74 65 6E 73 69 .....HalfIntensi
020440: 74 79 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 ty:BOOLEAN=FALSE
020450: 3B 09 28 2A 74 72 75 65 20 69 66 20 69 6E 20 68 ;.(*true if in h
020460: 61 6C 66 20 69 6E 74 65 6E 73 69 74 79 20 6D 6F alf intensity mo
020470: 64 65 2A 29 0D 0A 09 45 6E 68 61 6E 63 65 64 56 de*)...EnhancedV
020480: 69 64 65 6F 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C ideo:BOOLEAN=FAL
020490: 53 45 3B 0D 0A 09 55 6E 64 65 72 4C 69 6E 65 3A SE;...UnderLine:
0204A0: 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 09 28 BOOLEAN=FALSE;.(
0204B0: 2A 74 72 75 65 20 69 66 20 69 6E 20 75 6E 64 65 *true if in unde
0204C0: 72 6C 69 6E 65 20 6D 6F 64 65 2A 29 0D 0A 09 49 rline mode*)...I
0204D0: 6E 76 65 72 73 65 56 69 64 65 6F 3A 42 4F 4F 4C nverseVideo:BOOL
0204E0: 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 42 6C 69 EAN=FALSE;...Bli
0204F0: 6E 6B 69 6E 67 3A 42 4F 4F 4C 45 41 4E 3D 46 41 nking:BOOLEAN=FA
020500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0205A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0205B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0205C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0205D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0205E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0205F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0206A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0206B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0206C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0206D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0206E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0206F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
020700: 0D 0A 42 45 47 49 4E 0D 0A 09 28 2A 6E 6F 74 20 ..BEGIN...(*not
020710: 69 6D 70 6C 65 6D 65 6E 74 65 64 20 69 6E 20 74 implemented in t
020720: 68 69 73 20 76 65 72 73 69 6F 6E 2A 29 0D 0A 09 his version*)...
020730: 45 4E 44 20 4C 6F 61 64 54 65 72 6D 43 6F 64 65 END LoadTermCode
020740: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 69 ;..PROCEDURE Cli
020750: 70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43 41 p(x1,y1,x2,y2:CA
020760: 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D RDINAL);..BEGIN.
020770: 0A 09 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D 65 6E ..(*not implemen
020780: 74 65 64 20 69 6E 20 74 68 69 73 20 76 65 72 73 ted in this vers
020790: 69 6F 6E 2A 29 0D 0A 09 45 4E 44 20 43 6C 69 70 ion*)...END Clip
0207A0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44 72 ;..PROCEDURE Dr
0207B0: 61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C 79 awBox(x1,y1,x2,y
0207C0: 32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A 2:CARDINAL);....
0207D0: 28 2A 09 09 64 72 61 77 20 61 20 62 6F 78 20 66 (*..draw a box f
0207E0: 6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E 20 74 or a window on t
0207F0: 68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09 09 78 he screen......x
020800: 31 2C 79 31 20 20 69 73 20 74 68 65 20 6C 6F 77 1,y1 is the low
020810: 65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72 0D 0A er left corner..
020820: 09 09 78 32 2C 79 32 20 20 69 73 20 75 70 70 65 ..x2,y2 is uppe
020830: 72 20 72 69 67 68 74 20 63 6F 72 6E 65 72 2A 29 r right corner*)
020840: 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C ..VAR.i:CARDINAL
020850: 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 ;..BEGIN.. IF
020860: 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 OutputEnabled T
020870: 48 45 4E 0D 0A 09 47 6F 74 6F 78 79 28 78 31 2C HEN...Gotoxy(x1,
020880: 79 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E y1);...ScreenCon
020890: 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68 29 trol(StartGraph)
0208A0: 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F ;...ScreenContro
0208B0: 6C 28 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A 09 46 l(CornerLL);...F
0208C0: 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 OR i:=x1+1 TO x2
0208D0: 2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 -1 DO ScreenCont
0208E0: 72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 rol(Horizontal)
0208F0: 45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E END;...ScreenCon
020900: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
020910: 4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D ODULE ScreenIO;.
020920: 0A 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 74 68 ...(*.This is th
020930: 65 20 6D 65 6D 6F 72 79 20 6D 61 70 70 65 64 20 e memory mapped
020940: 76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72 65 65 version of scree
020950: 6E 20 69 6E 70 75 74 2D 6F 75 74 70 75 74 0D 0A n input-output..
020960: 0D 0A 09 54 6F 20 75 73 65 20 69 74 20 6F 6E 20 ...To use it on
020970: 79 6F 75 72 20 6D 61 63 68 69 6E 65 2C 20 79 6F your machine, yo
020980: 75 20 6D 61 79 20 6E 65 65 64 20 74 6F 20 63 68 u may need to ch
020990: 61 6E 67 65 20 73 6F 6D 65 20 6F 66 20 74 68 65 ange some of the
0209A0: 20 0D 0A 09 63 6F 6E 73 74 61 6E 74 73 20 62 65 ...constants be
0209B0: 6C 6F 77 0D 0A 0D 0A 09 54 68 65 20 6D 6F 64 75 low.....The modu
0209C0: 6C 65 20 61 73 73 75 6D 65 73 20 74 68 61 74 20 le assumes that
0209D0: 74 68 65 20 6D 65 6D 6F 72 79 20 66 6F 72 20 74 the memory for t
0209E0: 68 65 20 73 63 72 65 65 6E 20 69 73 20 63 6F 6E he screen is con
0209F0: 74 69 67 75 6F 75 73 20 0D 0A 09 61 6E 64 20 69 tiguous ...and i
020A00: 6E 20 74 68 65 20 64 65 66 61 75 6C 74 20 62 61 n the default ba
020A10: 6E 6B 2E 20 28 49 66 20 69 74 20 69 73 20 69 6E nk. (If it is in
020A20: 20 61 6E 6F 74 68 65 72 20 62 61 6E 6B 2C 20 79 another bank, y
020A30: 6F 75 20 77 69 6C 6C 20 68 61 76 65 20 0D 0A 09 ou will have ...
020A40: 74 6F 20 63 68 61 6E 67 65 20 74 68 65 20 63 6F to change the co
020A50: 64 65 20 6F 66 20 74 68 65 20 6D 6F 64 75 6C 65 de of the module
020A60: 20 61 70 70 72 6F 70 72 69 61 74 65 6C 79 29 0D appropriately).
020A70: 0A 0D 0A 09 54 68 65 20 76 61 6C 75 65 73 20 73 ....The values s
020A80: 65 74 20 62 65 6C 6F 77 20 61 72 65 20 66 6F 72 et below are for
020A90: 20 61 6E 20 4F 73 62 6F 72 6E 65 20 31 20 77 69 an Osborne 1 wi
020AA0: 74 68 20 53 63 72 65 65 6E 20 50 61 63 6B 0D 0A th Screen Pack..
020AB0: 0D 0A 09 4E 6F 74 65 20 74 68 61 74 20 74 68 69 ...Note that thi
020AC0: 73 20 76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72 s version of scr
020AD0: 65 65 6E 69 6F 20 64 6F 65 73 20 6E 6F 74 20 75 eenio does not u
020AE0: 73 65 20 74 68 65 20 74 65 72 6D 69 6E 61 6C 20 se the terminal
020AF0: 0D 0A 09 64 65 66 69 6E 69 74 69 6F 6E 20 66 69 ...definition fi
020B00: 74 72 6F 6C 28 43 6F 72 6E 65 72 4C 52 29 3B 0D trol(CornerLR);.
020B10: 0A 09 47 6F 74 6F 78 79 28 78 31 2C 79 32 29 3B ..Gotoxy(x1,y2);
020B20: 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C ...ScreenControl
020B30: 28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46 4F (CornerUL);...FO
020B40: 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 2D R i:=x1+1 TO x2-
020B50: 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 72 1 DO ScreenContr
020B60: 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 45 ol(Horizontal) E
020B70: 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 ND;...ScreenCont
020B80: 72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D 0A rol(CornerUR);..
020B90: 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 .FOR i:=y2+1 TO
020BA0: 79 31 2D 31 20 20 44 4F 0D 0A 09 09 47 6F 74 6F y1-1 DO....Goto
020BB0: 78 79 28 78 32 2C 69 29 3B 0D 0A 09 09 53 63 72 xy(x2,i);....Scr
020BC0: 65 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 eenControl(Verti
020BD0: 63 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 cal);....END;...
020BE0: 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 79 FOR i:=y2+1 TO y
020BF0: 31 2D 31 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 79 1-1 DO....Gotoxy
020C00: 28 78 31 2C 69 29 3B 0D 0A 09 09 53 63 72 65 65 (x1,i);....Scree
020C10: 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 63 61 nControl(Vertica
020C20: 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E l);....END;...EN
020C30: 44 3B 0D 0A 20 20 20 20 45 4E 44 20 44 72 61 77 D;.. END Draw
020C40: 42 6F 78 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 Box;..PROCEDURE
020C50: 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 28 4F OutputToScreen(O
020C60: 6E 3A 42 4F 4F 4C 45 41 4E 29 3B 0D 0A 42 45 47 n:BOOLEAN);..BEG
020C70: 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E 61 62 6C IN...OutputEnabl
020C80: 65 64 3A 3D 4F 6E 0D 0A 09 45 4E 44 20 4F 75 74 ed:=On...END Out
020C90: 70 75 74 54 6F 53 63 72 65 65 6E 3B 09 0D 0A 42 putToScreen;...B
020CA0: 45 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E 61 EGIN...OutputEna
020CB0: 62 6C 65 64 3A 3D 54 52 55 45 3B 0D 0A 09 28 2A bled:=TRUE;...(*
020CC0: 09 53 65 74 20 75 70 20 50 43 47 20 43 68 61 72 .Set up PCG Char
020CD0: 61 63 74 65 72 73 2A 29 0D 0A 09 46 4F 52 20 69 acters*)...FOR i
020CE0: 3A 3D 30 20 54 4F 20 36 2A 31 36 2D 31 20 44 4F :=0 TO 6*16-1 DO
020CF0: 20 50 43 47 5B 69 5D 3A 3D 30 78 20 45 4E 44 3B PCG[i]:=0x END;
020D00: 6C 65 2E 20 48 65 6E 63 65 2C 20 74 68 65 20 67 le. Hence, the g
020D10: 72 61 70 68 69 63 73 20 63 68 61 72 61 63 74 65 raphics characte
020D20: 72 73 20 66 6F 72 20 74 68 65 20 62 6F 78 20 61 rs for the box a
020D30: 72 65 0D 0A 09 68 61 72 64 20 63 6F 64 65 64 20 re...hard coded
020D40: 69 6E 20 74 68 65 20 66 69 6C 65 0D 0A 0D 0A 09 in the file.....
020D50: 54 68 69 73 20 76 65 72 73 69 6F 6E 20 77 69 6C This version wil
020D60: 6C 20 6E 6F 74 20 73 75 70 70 6F 72 74 20 68 61 l not support ha
020D70: 6C 66 20 69 6E 74 65 6E 73 69 74 79 20 6F 6E 20 lf intensity on
020D80: 74 68 65 20 4F 73 62 6F 72 6E 65 20 73 69 6E 63 the Osborne sinc
020D90: 65 20 0D 0A 09 74 68 61 74 20 66 61 63 69 6C 69 e ...that facili
020DA0: 74 79 20 64 6F 65 73 20 6E 6F 74 20 77 6F 72 6B ty does not work
020DB0: 20 61 73 20 64 6F 63 75 6D 65 6E 74 65 64 2E 20 as documented.
020DC0: 54 68 69 73 20 6D 61 79 20 62 65 20 73 6F 6D 65 This may be some
020DD0: 74 68 69 6E 67 0D 0A 09 74 6F 20 64 6F 20 77 69 thing...to do wi
020DE0: 74 68 20 6D 79 20 4F 73 62 6F 72 6E 65 20 68 61 th my Osborne ha
020DF0: 76 69 6E 67 20 62 65 65 6E 20 68 61 63 6B 65 64 ving been hacked
020E00: 0D 0A 0D 0A 09 54 68 69 73 20 76 65 72 73 69 6F .....This versio
020E10: 6E 20 77 69 6C 6C 20 6E 6F 74 20 73 63 72 6F 6C n will not scrol
020E20: 6C 20 74 68 65 20 73 63 72 65 65 6E 20 65 69 74 l the screen eit
020E30: 68 65 72 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D 20 her..*)....FROM
020E40: 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 Terminal IMPORT
020E50: 43 68 61 72 52 6F 75 74 69 6E 65 2C 43 68 61 72 CharRoutine,Char
020E60: 45 6E 61 62 6C 65 64 2C 42 6C 69 6E 6B 52 6F 75 Enabled,BlinkRou
020E70: 74 69 6E 65 2C 42 6C 69 6E 6B 45 6E 61 62 6C 65 tine,BlinkEnable
020E80: 64 3B 0D 0A 46 52 4F 4D 20 46 61 73 74 4D 6F 76 d;..FROM FastMov
020E90: 65 20 49 4D 50 4F 52 54 20 4D 6F 76 65 75 70 2C e IMPORT Moveup,
020EA0: 4D 6F 76 65 64 6F 77 6E 3B 0D 0A 46 52 4F 4D 20 Movedown;..FROM
020EB0: 53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 41 44 SYSTEM IMPORT AD
020EC0: 52 2C 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 43 50 R,SIZE;..FROM CP
020ED0: 4D 20 49 4D 50 4F 52 54 20 77 63 63 66 63 2C 42 M IMPORT wccfc,B
020EE0: 44 4F 53 3B 0D 0A 28 2A 46 52 4F 4D 20 4F 73 62 DOS;..(*FROM Osb
020EF0: 6F 72 6E 65 20 49 4D 50 4F 52 54 20 42 61 6E 6B orne IMPORT Bank
020F00: 0D 0A 09 46 4F 52 20 69 3A 3D 30 20 54 4F 20 31 ...FOR i:=0 TO 1
020F10: 30 20 44 4F 20 50 43 47 5B 69 5D 3A 3D 33 63 78 0 DO PCG[i]:=3cx
020F20: 20 45 4E 44 3B 0D 0A 09 28 2A 09 48 6F 72 69 7A END;...(*.Horiz
020F30: 6F 6E 74 61 6C 20 62 61 72 2A 29 0D 0A 09 46 4F ontal bar*)...FO
020F40: 52 20 69 3A 3D 31 36 2B 33 20 54 4F 20 31 36 2B R i:=16+3 TO 16+
020F50: 33 2B 34 20 44 4F 20 50 43 47 5B 69 5D 3A 3D 30 3+4 DO PCG[i]:=0
020F60: 66 66 78 20 45 4E 44 3B 0D 0A 09 28 2A 09 55 70 ffx END;...(*.Up
020F70: 70 65 72 20 4C 65 66 74 2A 29 0D 0A 09 46 4F 52 per Left*)...FOR
020F80: 20 69 3A 3D 32 2A 31 36 2B 33 20 54 4F 20 32 2A i:=2*16+3 TO 2*
020F90: 31 36 2B 33 2B 34 20 44 4F 20 50 43 47 5B 69 5D 16+3+4 DO PCG[i]
020FA0: 3A 3D 33 66 78 20 45 4E 44 3B 0D 0A 09 46 4F 52 :=3fx END;...FOR
020FB0: 20 69 3A 3D 32 2A 31 36 2B 33 2B 35 20 54 4F 20 i:=2*16+3+5 TO
020FC0: 33 2A 31 36 2D 31 20 44 4F 20 50 43 47 5B 69 5D 3*16-1 DO PCG[i]
020FD0: 3A 3D 33 63 78 20 45 4E 44 3B 0D 0A 09 28 2A 09 :=3cx END;...(*.
020FE0: 55 70 70 65 72 20 52 69 67 68 74 2A 29 0D 0A 09 Upper Right*)...
020FF0: 46 4F 52 20 69 3A 3D 33 2A 31 36 2B 33 20 54 4F FOR i:=3*16+3 TO
021000: 20 33 2A 31 36 2B 33 2B 34 20 44 4F 20 50 43 47 3*16+3+4 DO PCG
021010: 5B 69 5D 3A 3D 30 66 63 78 20 45 4E 44 3B 0D 0A [i]:=0fcx END;..
021020: 09 46 4F 52 20 69 3A 3D 33 2A 31 36 2B 33 2B 35 .FOR i:=3*16+3+5
021030: 20 54 4F 20 34 2A 31 36 2D 31 20 44 4F 20 50 43 TO 4*16-1 DO PC
021040: 47 5B 69 5D 3A 3D 33 63 78 20 45 4E 44 3B 0D 0A G[i]:=3cx END;..
021050: 09 28 2A 09 4C 6F 77 65 72 20 4C 65 66 74 2A 29 .(*.Lower Left*)
021060: 0D 0A 09 46 4F 52 20 69 3A 3D 34 2A 31 36 20 54 ...FOR i:=4*16 T
021070: 4F 20 34 2A 31 36 2B 32 20 44 4F 20 50 43 47 5B O 4*16+2 DO PCG[
021080: 69 5D 3A 3D 33 63 78 20 45 4E 44 3B 0D 0A 09 46 i]:=3cx END;...F
021090: 4F 52 20 69 3A 3D 34 2A 31 36 2B 33 20 54 4F 20 OR i:=4*16+3 TO
0210A0: 34 2A 31 36 2B 33 2B 34 20 44 4F 20 50 43 47 5B 4*16+3+4 DO PCG[
0210B0: 69 5D 3A 3D 33 66 78 20 45 4E 44 3B 0D 0A 09 28 i]:=3fx END;...(
0210C0: 2A 09 4C 6F 77 65 72 20 52 69 67 68 74 2A 29 0D *.Lower Right*).
0210D0: 0A 09 46 4F 52 20 69 3A 3D 35 2A 31 36 20 54 4F ..FOR i:=5*16 TO
0210E0: 20 35 2A 31 36 2B 32 20 44 4F 20 50 43 47 5B 69 5*16+2 DO PCG[i
0210F0: 5D 3A 3D 30 33 63 78 20 45 4E 44 3B 0D 0A 09 46 ]:=03cx END;...F
021100: 32 3B 2A 29 0D 0A 46 52 4F 4D 20 49 6E 74 4C 6F 2;*)..FROM IntLo
021110: 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E 44 3B gic IMPORT IAND;
021120: 0D 0A 0D 0A 28 2A 09 53 63 72 65 65 6E 20 68 61 ....(*.Screen ha
021130: 6E 64 6C 69 6E 67 20 72 6F 75 74 69 6E 65 73 20 ndling routines
021140: 66 6F 72 20 63 75 72 73 6F 72 20 70 6F 73 69 74 for cursor posit
021150: 69 6F 6E 2C 20 61 74 74 72 69 62 75 74 65 20 65 ion, attribute e
021160: 74 63 0D 0A 0D 0A 09 53 70 65 63 69 66 69 63 20 tc.....Specific
021170: 74 6F 20 74 68 69 73 20 63 6F 6D 70 69 6C 65 72 to this compiler
021180: 2A 29 0D 0A 0D 0A 43 4F 4E 53 54 09 4C 6F 67 53 *)....CONST.LogS
021190: 63 72 65 65 6E 57 69 64 74 68 3D 31 30 30 3B 09 creenWidth=100;.
0211A0: 28 2A 4C 6F 67 69 63 61 6C 20 73 63 72 65 65 6E (*Logical screen
0211B0: 20 77 69 64 74 68 20 0D 0A 09 09 09 09 28 6D 61 width ......(ma
0211C0: 6E 79 20 70 65 6F 70 6C 65 20 6F 6E 6C 79 20 68 ny people only h
0211D0: 61 76 65 20 38 30 29 2A 29 0D 0A 09 52 6F 77 57 ave 80)*)...RowW
0211E0: 69 64 74 68 3D 31 32 38 3B 09 09 28 2A 77 69 64 idth=128;..(*wid
0211F0: 74 68 20 6F 66 20 6D 65 6D 6F 72 79 20 66 6F 72 th of memory for
021200: 20 6F 6E 65 20 72 6F 77 20 0D 0A 09 09 09 09 28 one row ......(
021210: 69 2E 65 2E 20 6E 75 6D 62 65 72 20 6F 66 20 62 i.e. number of b
021220: 79 74 65 73 2A 29 0D 0A 09 4C 6F 67 53 63 72 65 ytes*)...LogScre
021230: 65 6E 44 65 70 74 68 3D 32 34 3B 09 09 28 2A 4C enDepth=24;..(*L
021240: 69 6E 65 73 20 6F 6E 20 74 68 65 20 73 63 72 65 ines on the scre
021250: 65 6E 2A 29 0D 0A 09 53 63 72 65 65 6E 53 74 61 en*)...ScreenSta
021260: 72 74 3D 30 66 30 30 30 68 3B 09 28 2A 62 61 73 rt=0f000h;.(*bas
021270: 65 20 6F 66 20 73 63 72 65 65 6E 2A 29 0D 0A 09 e of screen*)...
021280: 43 68 61 72 49 6E 63 72 65 6D 65 6E 74 3D 31 3B CharIncrement=1;
021290: 09 28 2A 6E 75 6D 62 65 72 20 6F 66 20 62 79 74 .(*number of byt
0212A0: 65 73 20 62 65 74 77 65 65 6E 20 63 68 61 72 61 es between chara
0212B0: 63 74 65 72 73 2A 29 0D 0A 09 53 63 72 65 65 6E cters*)...Screen
0212C0: 53 69 7A 65 3D 31 32 38 2A 33 32 3B 09 28 2A 6E Size=128*32;.(*n
0212D0: 75 6D 62 65 72 20 6F 66 20 62 79 74 65 73 20 69 umber of bytes i
0212E0: 6E 20 73 63 72 65 65 6E 20 61 72 65 61 2A 29 0D n screen area*).
0212F0: 0A 0D 0A 09 43 52 3D 30 64 78 3B 09 09 09 28 2A ....CR=0dx;...(*
021300: 4F 52 20 69 3A 3D 35 2A 31 36 2B 33 20 54 4F 20 OR i:=5*16+3 TO
021310: 35 2A 31 36 2B 33 2B 34 20 44 4F 20 50 43 47 5B 5*16+3+4 DO PCG[
021320: 69 5D 3A 3D 30 66 63 78 20 45 4E 44 3B 0D 0A 09 i]:=0fcx END;...
021330: 53 63 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 ScreenPos:=0;...
021340: 0D 0A 09 42 6C 69 6E 6B 52 6F 75 74 69 6E 65 3A ...BlinkRoutine:
021350: 3D 42 6C 69 6E 6B 43 75 72 73 6F 72 3B 0D 0A 09 =BlinkCursor;...
021360: 42 6C 69 6E 6B 45 6E 61 62 6C 65 64 3A 3D 54 52 BlinkEnabled:=TR
021370: 55 45 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 UE;...ScreenCont
021380: 72 6F 6C 28 43 6C 65 61 72 53 63 72 65 65 6E 29 rol(ClearScreen)
021390: 3B 0D 0A 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 ;...ColNo:=0;...
0213A0: 52 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 43 68 61 72 RowNo:=0;...Char
0213B0: 52 6F 75 74 69 6E 65 3A 3D 57 72 69 74 65 3B 0D Routine:=Write;.
0213C0: 0A 09 43 68 61 72 45 6E 61 62 6C 65 64 3A 3D 54 ..CharEnabled:=T
0213D0: 52 55 45 3B 09 0D 0A 09 53 63 72 65 65 6E 57 69 RUE;....ScreenWi
0213E0: 64 74 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 57 69 dth:=LogScreenWi
0213F0: 64 74 68 3B 0D 0A 09 53 63 72 65 65 6E 44 65 70 dth;...ScreenDep
021400: 74 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 44 65 70 th:=LogScreenDep
021410: 74 68 3B 0D 0A 09 45 4E 44 20 53 63 72 65 65 6E th;...END Screen
021420: 49 4F 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A IO..............
021430: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
021440: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
021450: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
021460: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
021470: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
021480: 69 73 20 74 68 61 74 20 74 68 69 73 20 76 65 72 is that this ver
021490: 73 69 6F 6E 20 62 75 66 66 65 72 73 20 73 63 72 sion buffers scr
0214A0: 65 65 6E 20 6F 75 74 70 75 74 20 69 6E 20 6F 72 een output in or
0214B0: 64 65 72 20 74 6F 0D 0A 09 73 70 65 65 64 20 75 der to...speed u
0214C0: 70 20 73 63 72 65 65 6E 20 6F 75 74 70 75 74 2C p screen output,
0214D0: 20 61 73 20 63 68 61 72 61 63 74 65 72 20 61 74 as character at
0214E0: 20 61 20 74 69 6D 65 20 77 61 73 20 74 6F 6F 20 a time was too
0214F0: 73 6C 6F 77 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D slow..*)....FROM
021500: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
021510: 1C 00 01 00 02 09 52 E5 1C 00 C9 02 00 00 00 02 ......R.........
021520: 1C 00 C5 02 00 00 00 02 1C 00 C1 02 00 00 00 02 ................
021530: 1C 00 C6 02 00 00 00 02 1C 00 C2 02 00 00 00 02 ................
021540: 1C 00 C7 02 00 00 00 02 1C 00 C3 02 00 00 00 02 ................
021550: 1C 00 C8 02 00 00 00 02 1C 00 C4 02 00 00 00 02 ................
021560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
021570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
021580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
021590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
021600: 29 3B 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 );....Screen[Scr
021610: 65 65 6E 50 6F 73 5D 3A 3D 27 20 27 7C 0D 0A 09 eenPos]:=' '|...
021620: 49 6E 73 4C 69 6E 65 3A 28 2A 4D 6F 76 65 20 72 InsLine:(*Move r
021630: 65 73 74 20 6F 66 20 73 63 72 65 65 6E 20 64 6F est of screen do
021640: 77 6E 20 6F 6E 65 20 6C 69 6E 65 2C 20 61 64 64 wn one line, add
021650: 20 62 6C 61 6E 6B 20 6C 69 6E 65 2A 29 0D 0A 09 blank line*)...
021660: 09 4D 6F 76 65 75 70 28 41 44 52 28 53 63 72 65 .Moveup(ADR(Scre
021670: 65 6E 5B 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C en[ScreenPos-Col
021680: 4E 6F 5D 29 2C 41 44 52 28 53 63 72 65 65 6E 5B No]),ADR(Screen[
021690: 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B ScreenPos-ColNo+
0216A0: 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 53 RowWidth]),....S
0216B0: 63 72 65 65 6E 53 69 7A 65 2D 53 63 72 65 65 6E creenSize-Screen
0216C0: 50 6F 73 2B 43 6F 6C 4E 6F 2D 52 6F 77 57 69 64 Pos+ColNo-RowWid
0216D0: 74 68 29 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 53 th);....FOR i:=S
0216E0: 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 20 54 creenPos-ColNo T
0216F0: 4F 20 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E O ScreenPos-ColN
021700: 6F 2B 52 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D o+RowWidth-1 DO.
021710: 0A 09 09 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 ....Screen[i]:='
021720: 20 27 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 ';.....END;....
021730: 7C 0D 0A 09 44 65 6C 45 6F 6C 3A 46 4F 52 20 69 |...DelEol:FOR i
021740: 3A 3D 53 63 72 65 65 6E 50 6F 73 20 54 4F 20 53 :=ScreenPos TO S
021750: 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52 creenPos-ColNo+R
021760: 6F 77 57 69 64 74 68 2D 31 20 44 4F 20 53 63 72 owWidth-1 DO Scr
021770: 65 65 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 7C een[i]:=' ' END|
021780: 0D 0A 09 44 65 6C 45 6F 73 3A 46 4F 52 20 69 3A ...DelEos:FOR i:
021790: 3D 53 63 72 65 65 6E 50 6F 73 20 54 4F 20 53 63 =ScreenPos TO Sc
0217A0: 72 65 65 6E 53 69 7A 65 2D 31 20 44 4F 20 53 63 reenSize-1 DO Sc
0217B0: 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 reen[i]:=' ' END
0217C0: 7C 0D 0A 09 43 6C 65 61 72 53 63 72 65 65 6E 3A |...ClearScreen:
0217D0: 0D 0A 09 09 09 28 2A 4F 73 62 6F 72 6E 65 20 73 .....(*Osborne s
0217E0: 70 65 63 69 66 69 63 20 2D 20 68 6F 6D 65 20 73 pecific - home s
0217F0: 63 72 65 65 6E 20 61 6E 64 20 63 75 72 73 6F 72 creen and cursor
021800: 6E 65 0D 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74 ne.....This rout
021810: 69 6E 65 20 77 69 6C 6C 20 6E 65 65 64 20 63 68 ine will need ch
021820: 61 6E 67 69 6E 67 20 66 6F 72 20 64 69 66 66 65 anging for diffe
021830: 72 65 6E 74 20 76 69 64 65 6F 20 73 79 73 74 65 rent video syste
021840: 6D 73 0D 0A 0D 0A 09 54 68 65 20 4F 73 62 6F 72 ms.....The Osbor
021850: 6E 65 20 31 20 69 73 20 76 65 72 79 20 6C 69 6D ne 1 is very lim
021860: 69 74 65 64 20 2D 20 61 6C 6C 20 79 6F 75 20 63 ited - all you c
021870: 61 6E 20 64 6F 20 69 73 0D 0A 09 75 6E 64 65 72 an do is...under
021880: 6C 69 6E 65 20 61 6E 64 20 68 61 6C 66 20 69 6E line and half in
021890: 74 65 6E 73 69 74 79 2E 20 41 6C 6C 20 6F 74 68 tensity. All oth
0218A0: 65 72 73 20 61 72 65 20 6D 61 70 70 65 64 20 6F ers are mapped o
0218B0: 6E 74 6F 20 74 68 65 73 65 20 74 77 6F 0D 0A 2A nto these two..*
0218C0: 29 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 )..BEGIN.. IF
0218D0: 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 OutputEnabled T
0218E0: 48 45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F HEN...ClearCurso
0218F0: 72 3B 0D 0A 09 49 46 20 63 68 3E 30 37 66 78 20 r;...IF ch>07fx
021900: 54 48 45 4E 20 63 68 3A 3D 43 48 52 28 4F 52 44 THEN ch:=CHR(ORD
021910: 28 63 68 29 2D 31 32 38 29 20 45 4E 44 3B 0D 0A (ch)-128) END;..
021920: 09 49 46 20 63 68 3D 43 52 20 54 48 45 4E 0D 0A .IF ch=CR THEN..
021930: 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 ..ScreenPos:=Scr
021940: 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 3B 0D 0A 09 eenPos-ColNo;...
021950: 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 45 4C 53 .ColNo:=0;...ELS
021960: 49 46 20 63 68 3D 4C 46 20 54 48 45 4E 0D 0A 09 IF ch=LF THEN...
021970: 09 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 .IF RowNo<(LogSc
021980: 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 48 45 reenDepth-1) THE
021990: 4E 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 N.....INC(RowNo)
0219A0: 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F 73 3A ;.....ScreenPos:
0219B0: 3D 53 63 72 65 65 6E 50 6F 73 2B 52 6F 77 57 69 =ScreenPos+RowWi
0219C0: 64 74 68 3B 0D 0A 09 09 09 45 4E 44 0D 0A 09 45 dth;.....END...E
0219D0: 4C 53 49 46 20 63 68 3D 42 53 20 54 48 45 4E 0D LSIF ch=BS THEN.
0219E0: 0A 09 09 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48 ...IF ColNo>0 TH
0219F0: 45 4E 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E 6F EN.....DEC(ColNo
021A00: 4C 53 45 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 LSE;...i:CARDINA
021A10: 4C 3B 0D 0A 0D 0A 28 2A 09 54 68 65 20 6E 65 78 L;....(*.The nex
021A20: 74 20 66 65 77 20 72 6F 75 74 69 6E 65 73 20 68 t few routines h
021A30: 61 6E 64 6C 65 20 74 68 65 20 63 75 72 73 6F 72 andle the cursor
021A40: 0D 0A 0D 0A 09 57 61 73 55 6E 64 65 72 4C 69 6E .....WasUnderLin
021A50: 65 64 20 69 73 20 74 72 75 65 20 69 66 20 74 68 ed is true if th
021A60: 65 20 63 68 61 72 61 63 74 65 72 20 75 6E 64 65 e character unde
021A70: 72 20 74 68 65 20 63 75 72 73 6F 72 0D 0A 09 73 r the cursor...s
021A80: 74 61 72 74 65 64 20 6F 75 74 20 75 6E 64 65 72 tarted out under
021A90: 6C 69 6E 65 64 0D 0A 09 0D 0A 09 54 69 6D 65 54 lined......TimeT
021AA0: 6F 43 68 61 6E 67 65 20 69 73 20 61 20 63 6F 75 oChange is a cou
021AB0: 6E 74 65 72 20 74 68 61 74 20 64 65 74 65 72 6D nter that determ
021AC0: 69 6E 65 73 20 77 68 65 6E 20 74 68 65 20 63 75 ines when the cu
021AD0: 72 73 6F 72 20 73 68 6F 75 6C 64 0D 0A 09 62 65 rsor should...be
021AE0: 20 63 68 61 6E 67 65 64 20 66 72 6F 6D 20 69 74 changed from it
021AF0: 73 20 63 75 72 72 65 6E 74 20 76 61 6C 75 65 20 s current value
021B00: 74 6F 20 69 74 73 20 6E 65 67 61 74 69 76 65 2C to its negative,
021B10: 20 74 6F 20 61 6C 6C 6F 77 20 62 6C 69 6E 6B 69 to allow blinki
021B20: 6E 67 0D 0A 2A 29 0D 0A 56 41 52 09 57 61 73 55 ng..*)..VAR.WasU
021B30: 6E 64 65 72 4C 69 6E 65 64 3A 42 4F 4F 4C 45 41 nderLined:BOOLEA
021B40: 4E 3D 46 41 4C 53 45 3B 0D 0A 09 54 69 6D 65 54 N=FALSE;...TimeT
021B50: 6F 43 68 61 6E 67 65 3A 49 4E 54 45 47 45 52 3D oChange:INTEGER=
021B60: 30 3B 0D 0A 0D 0A 28 2A 09 42 6C 69 6E 6B 20 63 0;....(*.Blink c
021B70: 75 72 73 6F 72 20 2D 20 64 65 63 72 65 6D 65 6E ursor - decremen
021B80: 74 20 74 69 6D 65 72 2C 20 69 66 20 6E 65 67 61 t timer, if nega
021B90: 74 69 76 65 20 72 65 73 65 74 20 61 6E 64 0D 0A tive reset and..
021BA0: 09 63 68 61 6E 67 65 20 74 6F 70 20 62 69 74 20 .change top bit
021BB0: 6F 66 20 63 68 61 72 61 63 74 65 72 20 75 6E 64 of character und
021BC0: 65 72 20 63 75 72 73 6F 72 2A 29 0D 0A 0D 0A 50 er cursor*)....P
021BD0: 52 4F 43 45 44 55 52 45 20 42 6C 69 6E 6B 43 75 ROCEDURE BlinkCu
021BE0: 72 73 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 44 rsor;..BEGIN...D
021BF0: 45 43 28 54 69 6D 65 54 6F 43 68 61 6E 67 65 29 EC(TimeToChange)
021C00: 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 65 );.....DEC(Scree
021C10: 6E 50 6F 73 29 3B 0D 0A 09 09 09 53 63 72 65 65 nPos);.....Scree
021C20: 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3A 3D 27 20 n[ScreenPos]:='
021C30: 27 0D 0A 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49 '.....END...ELSI
021C40: 46 20 63 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 F ch=TAB THEN...
021C50: 09 4C 4F 4F 50 0D 0A 09 09 09 49 46 20 43 6F 6C .LOOP.....IF Col
021C60: 4E 6F 3E 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 No>=LogScreenWid
021C70: 74 68 2D 31 20 54 48 45 4E 20 45 58 49 54 20 45 th-1 THEN EXIT E
021C80: 4E 44 3B 0D 0A 09 09 09 53 63 72 65 65 6E 5B 53 ND;.....Screen[S
021C90: 63 72 65 65 6E 50 6F 73 5D 3A 3D 27 20 27 3B 0D creenPos]:=' ';.
021CA0: 0A 09 09 09 49 4E 43 28 53 63 72 65 65 6E 50 6F ....INC(ScreenPo
021CB0: 73 29 3B 0D 0A 09 09 09 49 4E 43 28 43 6F 6C 4E s);.....INC(ColN
021CC0: 6F 29 3B 0D 0A 09 09 09 49 46 20 49 41 4E 44 28 o);.....IF IAND(
021CD0: 43 6F 6C 4E 6F 2C 37 29 3D 30 20 54 48 45 4E 20 ColNo,7)=0 THEN
021CE0: 45 58 49 54 20 45 4E 44 0D 0A 09 09 09 45 4E 44 EXIT END.....END
021CF0: 20 28 2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4C 53 45 (*LOOP*)...ELSE
021D00: 09 0D 0A 09 09 49 46 20 55 6E 64 65 72 4C 69 6E .....IF UnderLin
021D10: 65 20 4F 52 20 45 6E 68 61 6E 63 65 64 56 69 64 e OR EnhancedVid
021D20: 65 6F 20 4F 52 20 42 6C 69 6E 6B 69 6E 67 20 4F eo OR Blinking O
021D30: 52 20 49 6E 76 65 72 73 65 56 69 64 65 6F 20 54 R InverseVideo T
021D40: 48 45 4E 20 0D 0A 09 09 09 63 68 3A 3D 43 48 52 HEN .....ch:=CHR
021D50: 28 4F 52 44 28 63 68 29 2B 31 32 38 29 0D 0A 09 (ORD(ch)+128)...
021D60: 09 09 45 4E 44 3B 0D 0A 09 09 50 75 74 61 6E 64 ..END;....Putand
021D70: 49 6E 63 28 63 68 29 3B 0D 0A 09 09 45 4E 44 3B Inc(ch);....END;
021D80: 20 28 2A 4E 6F 74 20 43 52 20 6F 72 20 4C 46 20 (*Not CR or LF
021D90: 6F 72 20 54 41 42 2A 29 0D 0A 09 53 65 74 43 75 or TAB*)...SetCu
021DA0: 72 73 6F 72 3B 0D 0A 09 45 4E 44 20 0D 0A 20 20 rsor;...END ..
021DB0: 20 20 45 4E 44 20 57 72 69 74 65 3B 0D 0A 0D 0A END Write;....
021DC0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63 72 65 ..PROCEDURE Scre
021DD0: 65 6E 43 6F 6E 74 72 6F 6C 28 73 3A 45 64 69 74 enControl(s:Edit
021DE0: 73 29 3B 0D 0A 0D 0A 28 2A 09 09 50 65 72 66 6F s);....(*..Perfo
021DF0: 72 6D 20 61 20 73 63 72 65 65 6E 20 63 6F 6E 74 rm a screen cont
021E00: 3B 0D 0A 09 49 46 20 54 69 6D 65 54 6F 43 68 61 ;...IF TimeToCha
021E10: 6E 67 65 3C 30 20 54 48 45 4E 0D 0A 09 09 54 69 nge<0 THEN....Ti
021E20: 6D 65 54 6F 43 68 61 6E 67 65 3A 3D 39 30 30 3B meToChange:=900;
021E30: 09 28 2A 63 68 61 6E 67 65 20 74 6F 20 63 68 61 .(*change to cha
021E40: 6E 67 65 20 62 6C 69 6E 6B 20 72 61 74 65 2A 29 nge blink rate*)
021E50: 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 65 65 ....Screen[Scree
021E60: 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 28 53 nPos]:=CHR(ORD(S
021E70: 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D creen[ScreenPos]
021E80: 29 2B 31 32 38 29 0D 0A 09 09 45 4E 44 0D 0A 09 )+128)....END...
021E90: 45 4E 44 20 42 6C 69 6E 6B 43 75 72 73 6F 72 3B END BlinkCursor;
021EA0: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C ....PROCEDURE Cl
021EB0: 65 61 72 43 75 72 73 6F 72 3B 0D 0A 42 45 47 49 earCursor;..BEGI
021EC0: 4E 0D 0A 09 49 46 20 28 53 63 72 65 65 6E 5B 53 N...IF (Screen[S
021ED0: 63 72 65 65 6E 50 6F 73 5D 3E 37 66 78 29 3C 3E creenPos]>7fx)<>
021EE0: 57 61 73 55 6E 64 65 72 4C 69 6E 65 64 20 54 48 WasUnderLined TH
021EF0: 45 4E 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 EN....Screen[Scr
021F00: 65 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 eenPos]:=CHR(ORD
021F10: 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F (Screen[ScreenPo
021F20: 73 5D 29 2B 31 32 38 29 3B 0D 0A 09 09 45 4E 44 s])+128);....END
021F30: 3B 0D 0A 09 57 61 73 55 6E 64 65 72 4C 69 6E 65 ;...WasUnderLine
021F40: 64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 45 4E 44 20 d:=FALSE;...END
021F50: 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 50 52 ClearCursor;..PR
021F60: 4F 43 45 44 55 52 45 20 53 65 74 43 75 72 73 6F OCEDURE SetCurso
021F70: 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 61 73 55 r;..BEGIN...WasU
021F80: 6E 64 65 72 4C 69 6E 65 64 3A 3D 53 63 72 65 65 nderLined:=Scree
021F90: 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3E 3D 38 30 n[ScreenPos]>=80
021FA0: 78 3B 0D 0A 09 53 63 72 65 65 6E 5B 53 63 72 65 x;...Screen[Scre
021FB0: 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 28 enPos]:=CHR(ORD(
021FC0: 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 Screen[ScreenPos
021FD0: 5D 29 2B 31 32 38 29 3B 0D 0A 09 45 4E 44 20 53 ])+128);...END S
021FE0: 65 74 43 75 72 73 6F 72 3B 0D 0A 0D 0A 50 52 4F etCursor;....PRO
021FF0: 43 45 44 55 52 45 20 47 6F 74 6F 78 79 28 78 2C CEDURE Gotoxy(x,
022000: 72 6F 6C 20 6F 70 65 72 61 74 69 6F 6E 0D 0A 0D rol operation...
022010: 0A 09 09 4D 61 79 20 6E 65 65 64 20 61 6C 74 65 ...May need alte
022020: 72 61 74 69 6F 6E 20 66 6F 72 20 76 61 72 69 6F ration for vario
022030: 75 73 20 6D 61 63 68 69 6E 65 73 2A 29 0D 0A 0D us machines*)...
022040: 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F .BEGIN.. IF O
022050: 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45 utputEnabled THE
022060: 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B N...ClearCursor;
022070: 0D 0A 09 43 41 53 45 20 73 20 4F 46 0D 0A 09 44 ...CASE s OF...D
022080: 69 6D 3A 48 61 6C 66 49 6E 74 65 6E 73 69 74 79 im:HalfIntensity
022090: 3A 3D 54 52 55 45 7C 0D 0A 09 42 72 69 67 68 74 :=TRUE|...Bright
0220A0: 3A 09 48 61 6C 66 49 6E 74 65 6E 73 69 74 79 3A :.HalfIntensity:
0220B0: 3D 46 41 4C 53 45 0D 0A 09 09 45 6E 68 61 6E 63 =FALSE....Enhanc
0220C0: 65 64 56 69 64 65 6F 3A 3D 54 52 55 45 7C 0D 0A edVideo:=TRUE|..
0220D0: 09 4E 6F 72 6D 61 6C 3A 09 48 61 6C 66 49 6E 74 .Normal:.HalfInt
0220E0: 65 6E 73 69 74 79 3A 3D 46 41 4C 53 45 3B 0D 0A ensity:=FALSE;..
0220F0: 09 09 45 6E 68 61 6E 63 65 64 56 69 64 65 6F 3A ..EnhancedVideo:
022100: 3D 46 41 4C 53 45 3B 0D 0A 09 09 49 6E 76 65 72 =FALSE;....Inver
022110: 73 65 56 69 64 65 6F 3A 3D 46 41 4C 53 45 3B 0D seVideo:=FALSE;.
022120: 0A 09 09 42 6C 69 6E 6B 69 6E 67 3A 3D 46 41 4C ...Blinking:=FAL
022130: 53 45 3B 0D 0A 09 09 55 6E 64 65 72 4C 69 6E 65 SE;....UnderLine
022140: 3A 3D 46 41 4C 53 45 7C 0D 0A 09 49 6E 76 65 72 :=FALSE|...Inver
022150: 73 65 3A 49 6E 76 65 72 73 65 56 69 64 65 6F 3A se:InverseVideo:
022160: 3D 54 52 55 45 7C 0D 0A 09 42 6C 69 6E 6B 3A 42 =TRUE|...Blink:B
022170: 6C 69 6E 6B 69 6E 67 3A 3D 54 52 55 45 7C 0D 0A linking:=TRUE|..
022180: 09 53 74 61 72 74 47 72 61 70 68 2C 45 6E 64 47 .StartGraph,EndG
022190: 72 61 70 68 3A 28 2A 64 6F 20 6E 6F 74 68 69 6E raph:(*do nothin
0221A0: 67 2A 29 7C 0D 0A 09 44 65 6C 43 68 61 72 3A 28 g*)|...DelChar:(
0221B0: 2A 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 6C 69 *Move rest of li
0221C0: 6E 65 20 75 70 20 6F 6E 65 2C 20 61 64 64 20 62 ne up one, add b
0221D0: 6C 61 6E 6B 20 74 6F 20 65 6E 64 2A 29 0D 0A 09 lank to end*)...
0221E0: 09 4D 6F 76 65 64 6F 77 6E 28 41 44 52 28 53 63 .Movedown(ADR(Sc
0221F0: 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 2B 31 reen[ScreenPos+1
022200: 79 3A 43 41 52 44 49 4E 41 4C 29 3B 09 09 0D 0A y:CARDINAL);....
022210: 0D 0A 28 2A 09 09 50 6F 73 69 74 69 6F 6E 20 74 ..(*..Position t
022220: 6F 20 67 69 76 65 6E 20 63 6F 6F 72 64 69 6E 61 o given coordina
022230: 74 65 73 0D 0A 09 09 74 6F 70 20 6C 65 66 74 20 tes....top left
022240: 69 73 20 61 6C 77 61 79 73 20 30 2C 30 20 0D 0A is always 0,0 ..
022250: 0D 0A 09 09 78 20 69 73 20 63 6F 6C 75 6D 6E 2C ....x is column,
022260: 20 79 20 69 73 20 72 6F 77 0D 0A 0D 0A 09 09 41 y is row......A
022270: 20 27 53 74 61 6E 64 61 72 64 27 20 53 63 72 65 'Standard' Scre
022280: 65 6E 20 69 73 20 38 30 20 62 79 20 32 34 2E 20 en is 80 by 24.
022290: 54 68 65 20 6C 69 6D 69 74 20 69 73 20 73 65 74 The limit is set
0222A0: 20 62 79 0D 0A 09 09 74 68 65 20 74 65 72 6D 69 by....the termi
0222B0: 6E 61 6C 20 64 65 66 69 6E 69 74 69 6F 6E 20 66 nal definition f
0222C0: 69 6C 65 09 2A 29 0D 0A 42 45 47 49 4E 0D 0A 20 ile.*)..BEGIN..
0222D0: 20 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62 IF OutputEnab
0222E0: 6C 65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 led THEN...Clear
0222F0: 43 75 72 73 6F 72 3B 0D 0A 09 43 6F 6C 4E 6F 3A Cursor;...ColNo:
022300: 3D 78 3B 0D 0A 09 52 6F 77 4E 6F 3A 3D 79 3B 0D =x;...RowNo:=y;.
022310: 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C ..ScreenPos:=Col
022320: 4E 6F 2B 52 6F 77 4E 6F 2A 43 68 61 72 49 6E 63 No+RowNo*CharInc
022330: 72 65 6D 65 6E 74 2A 52 6F 77 57 69 64 74 68 3B rement*RowWidth;
022340: 0D 0A 09 49 46 20 53 63 72 65 65 6E 50 6F 73 3E ...IF ScreenPos>
022350: 3D 53 63 72 65 65 6E 53 69 7A 65 20 54 48 45 4E =ScreenSize THEN
022360: 0D 0A 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 ....ColNo:=0;...
022370: 09 52 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 09 53 63 .RowNo:=0;....Sc
022380: 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 09 45 reenPos:=0;....E
022390: 4E 44 3B 0D 0A 09 53 65 74 43 75 72 73 6F 72 3B ND;...SetCursor;
0223A0: 0D 0A 20 20 20 20 09 45 4E 44 20 0D 0A 20 20 20 .. .END ..
0223B0: 20 45 4E 44 20 47 6F 74 6F 78 79 3B 0D 0A 0D 0A END Gotoxy;....
0223C0: 50 52 4F 43 45 44 55 52 45 20 50 75 74 61 6E 64 PROCEDURE Putand
0223D0: 49 6E 63 28 63 68 3A 43 48 41 52 29 3B 0D 0A 0D Inc(ch:CHAR);...
0223E0: 0A 28 2A 09 6F 75 74 70 75 74 20 61 20 63 68 61 .(*.output a cha
0223F0: 72 61 63 74 65 72 20 61 6E 64 20 69 6E 63 72 65 racter and incre
022400: 5D 29 2C 41 44 52 28 53 63 72 65 65 6E 5B 53 63 ]),ADR(Screen[Sc
022410: 72 65 65 6E 50 6F 73 5D 29 2C 52 6F 77 57 69 64 reenPos]),RowWid
022420: 74 68 2D 43 6F 6C 4E 6F 2D 31 29 3B 0D 0A 09 09 th-ColNo-1);....
022430: 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 Screen[ScreenPos
022440: 2D 43 6F 6C 4E 6F 2B 52 6F 77 57 69 64 74 68 2D -ColNo+RowWidth-
022450: 31 5D 3A 3D 27 20 27 7C 0D 0A 09 44 65 6C 4C 69 1]:=' '|...DelLi
022460: 6E 65 3A 28 2A 4D 6F 76 65 20 72 65 73 74 20 6F ne:(*Move rest o
022470: 66 20 73 63 72 65 65 6E 20 75 70 20 61 20 6C 69 f screen up a li
022480: 6E 65 2C 20 61 64 64 20 62 6C 61 6E 6B 20 6C 69 ne, add blank li
022490: 6E 65 20 61 74 20 65 6E 64 2A 29 0D 0A 09 09 4D ne at end*)....M
0224A0: 6F 76 65 64 6F 77 6E 28 41 44 52 28 53 63 72 65 ovedown(ADR(Scre
0224B0: 65 6E 5B 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C en[ScreenPos-Col
0224C0: 4E 6F 2B 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A No+RowWidth]),..
0224D0: 09 09 09 20 41 44 52 28 53 63 72 65 65 6E 5B 53 ... ADR(Screen[S
0224E0: 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 5D 29 creenPos-ColNo])
0224F0: 2C 0D 0A 09 09 09 53 63 72 65 65 6E 53 69 7A 65 ,.....ScreenSize
022500: 2D 53 63 72 65 65 6E 50 6F 73 2B 43 6F 6C 4E 6F -ScreenPos+ColNo
022510: 2D 52 6F 77 57 69 64 74 68 29 3B 0D 0A 09 09 46 -RowWidth);....F
022520: 4F 52 20 69 3A 3D 53 63 72 65 65 6E 53 69 7A 65 OR i:=ScreenSize
022530: 2D 52 6F 77 57 69 64 74 68 20 54 4F 20 53 63 72 -RowWidth TO Scr
022540: 65 65 6E 53 69 7A 65 2D 31 20 44 4F 20 53 63 72 eenSize-1 DO Scr
022550: 65 65 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 3B een[i]:=' ' END;
022560: 0D 0A 09 09 7C 0D 0A 09 49 6E 73 43 68 61 72 3A ....|...InsChar:
022570: 28 2A 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 6C (*Move rest of l
022580: 69 6E 65 20 72 69 67 68 74 20 6F 6E 65 20 63 68 ine right one ch
022590: 61 72 61 63 74 65 72 2C 20 6C 61 73 74 20 63 68 aracter, last ch
0225A0: 61 72 61 63 74 65 72 20 6D 61 79 20 62 65 20 6C aracter may be l
0225B0: 6F 73 74 2A 29 0D 0A 09 09 4D 6F 76 65 75 70 28 ost*)....Moveup(
0225C0: 41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 65 65 ADR(Screen[Scree
0225D0: 6E 50 6F 73 5D 29 2C 41 44 52 28 53 63 72 65 65 nPos]),ADR(Scree
0225E0: 6E 5B 53 63 72 65 65 6E 50 6F 73 2B 31 5D 29 2C n[ScreenPos+1]),
0225F0: 52 6F 77 57 69 64 74 68 2D 43 6F 6C 4E 6F 2D 31 RowWidth-ColNo-1
022600: 6D 65 6E 74 20 70 6F 69 6E 74 65 72 73 2A 29 0D ment pointers*).
022610: 0A 0D 0A 42 45 47 49 4E 0D 0A 09 53 63 72 65 65 ...BEGIN...Scree
022620: 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3A 3D 63 68 n[ScreenPos]:=ch
022630: 3B 0D 0A 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A ;.....ScreenPos:
022640: 3D 53 63 72 65 65 6E 50 6F 73 2B 43 68 61 72 49 =ScreenPos+CharI
022650: 6E 63 72 65 6D 65 6E 74 3B 0D 0A 09 49 4E 43 28 ncrement;...INC(
022660: 43 6F 6C 4E 6F 29 3B 0D 0A 09 49 46 20 43 6F 6C ColNo);...IF Col
022670: 4E 6F 3E 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 No>=LogScreenWid
022680: 74 68 20 54 48 45 4E 0D 0A 09 09 49 46 20 52 6F th THEN....IF Ro
022690: 77 4E 6F 3C 28 4C 6F 67 53 63 72 65 65 6E 44 65 wNo<(LogScreenDe
0226A0: 70 74 68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 pth-1) THEN.....
0226B0: 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 INC(RowNo);.....
0226C0: 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 09 45 4C 53 ColNo:=0;....ELS
0226D0: 45 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E 6F 29 E.....DEC(ColNo)
0226E0: 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 65 6E ;.....DEC(Screen
0226F0: 50 6F 73 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A Pos);.....END;..
022700: 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 50 75 74 ..END;...END Put
022710: 61 6E 64 49 6E 63 3B 0D 0A 0D 0A 50 52 4F 43 45 andInc;....PROCE
022720: 44 55 52 45 20 57 72 69 74 65 28 63 68 3A 43 48 DURE Write(ch:CH
022730: 41 52 29 3B 0D 0A 28 2A 09 57 72 69 74 65 20 61 AR);..(*.Write a
022740: 20 63 68 61 72 61 63 74 65 72 0D 0A 0D 0A 09 54 character.....T
022750: 68 69 73 20 72 6F 75 74 69 6E 65 20 69 73 20 75 his routine is u
022760: 73 65 64 20 62 79 20 74 65 72 6D 69 6E 61 6C 20 sed by terminal
022770: 77 68 65 6E 20 74 68 69 73 20 76 65 72 73 69 6F when this versio
022780: 6E 20 6F 66 20 53 63 72 65 65 6E 49 4F 20 0D 0A n of ScreenIO ..
022790: 09 69 73 20 69 6E 20 75 73 65 20 62 65 63 61 75 .is in use becau
0227A0: 73 65 20 61 20 66 6C 61 67 20 69 73 20 73 65 74 se a flag is set
0227B0: 20 62 79 20 74 68 65 20 69 6E 69 74 69 61 6C 69 by the initiali
0227C0: 73 61 74 69 6F 6E 20 6F 66 20 74 68 69 73 20 6D sation of this m
0227D0: 6F 64 75 6C 65 20 0D 0A 09 74 6F 67 65 74 68 65 odule ...togethe
0227E0: 72 20 77 69 74 68 20 74 68 65 20 61 64 64 72 65 r with the addre
0227F0: 73 73 20 6F 66 20 74 68 69 73 20 72 6F 75 74 69 ss of this routi
022800: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
022810: 1D 00 01 00 02 09 52 E5 1D 00 C9 02 00 00 00 02 ......R.........
022820: 1D 00 C5 02 00 00 00 02 1D 00 C1 02 00 00 00 02 ................
022830: 1D 00 C6 02 00 00 00 02 1D 00 C2 02 00 00 00 02 ................
022840: 1D 00 C7 02 00 00 00 02 1D 00 C3 02 00 00 00 02 ................
022850: 1D 00 C8 02 00 00 00 02 1D 00 C4 02 00 00 00 02 ................
022860: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
022870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
022880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
022890: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
022900: 64 65 28 0D 0A 09 09 09 09 43 72 65 61 74 65 53 de(......CreateS
022910: 74 72 69 6E 67 4E 6F 64 65 28 27 28 27 29 2C 0D tringNode('('),.
022920: 0A 09 09 09 09 45 78 70 29 2C 0D 0A 09 09 09 43 .....Exp),.....C
022930: 72 65 61 74 65 53 74 72 69 6E 67 4E 6F 64 65 28 reateStringNode(
022940: 27 29 27 29 0D 0A 09 09 09 29 0D 0A 09 09 29 3B ')').....)....);
022950: 0D 0A 09 74 65 6D 70 3A 3D 43 72 65 61 74 65 41 ...temp:=CreateA
022960: 6C 74 4E 6F 64 65 28 0D 0A 09 09 46 61 63 74 2C ltNode(....Fact,
022970: 0D 0A 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74 ....CreateConcat
022980: 4E 6F 64 65 28 0D 0A 09 09 09 46 61 63 74 2C 0D Node(.....Fact,.
022990: 0A 09 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74 ....CreateConcat
0229A0: 4E 6F 64 65 28 0D 0A 09 09 09 09 43 72 65 61 74 Node(......Creat
0229B0: 65 53 74 72 69 6E 67 4E 6F 64 65 28 27 2A 27 29 eStringNode('*')
0229C0: 2C 0D 0A 09 09 09 09 54 65 72 6D 29 0D 0A 09 09 ,......Term)....
0229D0: 09 29 0D 0A 09 09 29 3B 0D 0A 09 54 65 72 6D 5E .)....);...Term^
0229E0: 3A 3D 74 65 6D 70 5E 3B 0D 0A 09 74 65 6D 70 3A :=temp^;...temp:
0229F0: 3D 43 72 65 61 74 65 41 6C 74 4E 6F 64 65 28 0D =CreateAltNode(.
022A00: 0A 09 09 20 20 20 20 54 65 72 6D 2C 0D 0A 09 09 ... Term,....
022A10: 20 20 20 20 43 72 65 61 74 65 43 6F 6E 63 61 74 CreateConcat
022A20: 4E 6F 64 65 28 0D 0A 09 09 09 54 65 72 6D 2C 0D Node(.....Term,.
022A30: 0A 09 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74 ....CreateConcat
022A40: 4E 6F 64 65 28 0D 0A 09 09 09 09 43 72 65 61 74 Node(......Creat
022A50: 65 53 74 72 69 6E 67 4E 6F 64 65 28 27 2B 27 29 eStringNode('+')
022A60: 2C 0D 0A 09 09 09 09 45 78 70 29 0D 0A 09 09 09 ,......Exp).....
022A70: 29 0D 0A 09 09 20 20 20 20 29 3B 0D 0A 09 45 78 ).... );...Ex
022A80: 70 5E 3A 3D 74 65 6D 70 5E 3B 0D 0A 09 45 78 70 p^:=temp^;...Exp
022A90: 31 3A 3D 43 72 65 61 74 65 43 6F 6E 63 61 74 4E 1:=CreateConcatN
022AA0: 6F 64 65 28 0D 0A 09 09 45 78 70 2C 0D 0A 09 09 ode(....Exp,....
022AB0: 43 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 28 CreateLimitNode(
022AC0: 29 29 3B 0D 0A 09 49 46 20 4D 61 74 63 68 50 61 ));...IF MatchPa
022AD0: 74 74 65 72 6E 28 45 78 70 31 2C 27 32 2A 32 27 ttern(Exp1,'2*2'
022AE0: 29 3C 3E 4E 49 4C 20 54 48 45 4E 20 57 72 69 74 )<>NIL THEN Writ
022AF0: 65 53 74 72 69 6E 67 28 27 31 3A 20 20 4F 4B 27 eString('1: OK'
022B00: 74 68 5D 29 2C 0D 0A 09 09 20 28 45 6E 64 6F 66 th]),.... (Endof
022B10: 57 69 6E 64 6F 77 2D 53 74 61 72 74 6F 66 57 69 Window-StartofWi
022B20: 6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 29 3B ndow)*RowWidth);
022B30: 0D 0A 09 46 4F 52 20 69 3A 3D 45 6E 64 6F 66 57 ...FOR i:=EndofW
022B40: 69 6E 64 6F 77 2A 52 6F 77 57 69 64 74 68 20 54 indow*RowWidth T
022B50: 4F 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2B 31 O (EndofWindow+1
022B60: 29 2A 52 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D )*RowWidth-1 DO.
022B70: 0A 09 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 ...Screen[i]:='
022B80: 27 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 ';....END;...Set
022B90: 43 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 20 0D 0A Cursor;...END ..
022BA0: 20 20 20 20 45 4E 44 20 53 63 72 6F 6C 6C 57 69 END ScrollWi
022BB0: 6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 50 52 4F ndowDown;....PRO
022BC0: 43 45 44 55 52 45 20 4C 6F 61 64 54 65 72 6D 43 CEDURE LoadTermC
022BD0: 6F 64 65 28 46 3A 46 69 6C 65 4E 61 6D 65 29 3B ode(F:FileName);
022BE0: 0D 0A 42 45 47 49 4E 0D 0A 09 28 2A 6E 6F 74 20 ..BEGIN...(*not
022BF0: 69 6D 70 6C 65 6D 65 6E 74 65 64 20 69 6E 20 74 implemented in t
022C00: 68 69 73 20 76 65 72 73 69 6F 6E 2A 29 0D 0A 09 his version*)...
022C10: 45 4E 44 20 4C 6F 61 64 54 65 72 6D 43 6F 64 65 END LoadTermCode
022C20: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 69 ;..PROCEDURE Cli
022C30: 70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43 41 p(x1,y1,x2,y2:CA
022C40: 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D RDINAL);..BEGIN.
022C50: 0A 09 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D 65 6E ..(*not implemen
022C60: 74 65 64 20 69 6E 20 74 68 69 73 20 76 65 72 73 ted in this vers
022C70: 69 6F 6E 2A 29 0D 0A 09 45 4E 44 20 43 6C 69 70 ion*)...END Clip
022C80: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44 72 ;..PROCEDURE Dr
022C90: 61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C 79 awBox(x1,y1,x2,y
022CA0: 32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A 2:CARDINAL);....
022CB0: 28 2A 09 09 64 72 61 77 20 61 20 62 6F 78 20 66 (*..draw a box f
022CC0: 6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E 20 74 or a window on t
022CD0: 68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09 09 78 he screen......x
022CE0: 31 2C 79 31 20 20 69 73 20 74 68 65 20 6C 6F 77 1,y1 is the low
022CF0: 65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72 0D 0A er left corner..
022D00: 20 0D 0A 09 09 09 20 70 6F 73 69 74 69 6F 6E 20 ..... position
022D10: 61 73 20 73 74 6F 72 65 64 20 69 6E 20 42 49 4F as stored in BIO
022D20: 53 20 74 61 62 6C 65 73 2A 29 0D 0A 09 09 20 20 S tables*)....
022D30: 20 20 69 3A 3D 42 44 4F 53 28 77 63 63 66 63 2C i:=BDOS(wccfc,
022D40: 31 62 68 29 3B 69 3A 3D 42 44 4F 53 28 77 63 63 1bh);i:=BDOS(wcc
022D50: 66 63 2C 4F 52 44 28 27 53 27 29 29 3B 0D 0A 09 fc,ORD('S'));...
022D60: 09 20 20 20 20 69 3A 3D 42 44 4F 53 28 77 63 63 . i:=BDOS(wcc
022D70: 66 63 2C 33 32 29 3B 69 3A 3D 42 44 4F 53 28 77 fc,32);i:=BDOS(w
022D80: 63 63 66 63 2C 33 32 29 3B 0D 0A 09 09 20 20 20 ccfc,32);....
022D90: 20 69 3A 3D 42 44 4F 53 28 77 63 63 66 63 2C 31 i:=BDOS(wccfc,1
022DA0: 62 68 29 3B 69 3A 3D 42 44 4F 53 28 77 63 63 66 bh);i:=BDOS(wccf
022DB0: 63 2C 4F 52 44 28 27 3D 27 29 29 3B 0D 0A 09 09 c,ORD('='));....
022DC0: 20 20 20 20 69 3A 3D 42 44 4F 53 28 77 63 63 66 i:=BDOS(wccf
022DD0: 63 2C 33 32 29 3B 69 3A 3D 42 44 4F 53 28 77 63 c,32);i:=BDOS(wc
022DE0: 63 66 63 2C 33 32 29 3B 0D 0A 09 09 20 20 20 20 cfc,32);....
022DF0: 28 2A 42 61 6E 6B 32 28 41 44 52 28 53 63 72 65 (*Bank2(ADR(Scre
022E00: 65 6E 5B 30 5D 29 2C 41 44 52 28 53 63 72 65 65 en[0]),ADR(Scree
022E10: 6E 5B 53 63 72 65 65 6E 53 69 7A 65 2D 31 5D 29 n[ScreenSize-1])
022E20: 2C 38 30 68 29 2A 29 0D 0A 09 09 0D 0A 09 09 09 ,80h)*).........
022E30: 28 2A 6E 6F 77 20 63 6C 65 61 72 20 64 69 73 70 (*now clear disp
022E40: 6C 61 79 20 6D 65 6D 6F 72 79 2A 29 0D 0A 09 09 lay memory*)....
022E50: 20 20 20 20 53 63 72 65 65 6E 5B 30 5D 3A 3D 27 Screen[0]:='
022E60: 20 27 3B 0D 0A 09 09 20 20 20 20 4D 6F 76 65 75 ';.... Moveu
022E70: 70 28 41 44 52 28 53 63 72 65 65 6E 5B 31 5D 29 p(ADR(Screen[1])
022E80: 2C 41 44 52 28 53 63 72 65 65 6E 5B 30 5D 29 2C ,ADR(Screen[0]),
022E90: 53 63 72 65 65 6E 53 69 7A 65 2D 31 29 3B 0D 0A ScreenSize-1);..
022EA0: 09 09 20 20 20 20 53 63 72 65 65 6E 50 6F 73 3A .. ScreenPos:
022EB0: 3D 30 3B 0D 0A 09 09 20 20 20 20 43 6F 6C 4E 6F =0;.... ColNo
022EC0: 3A 3D 30 3B 0D 0A 09 09 20 20 20 20 52 6F 77 4E :=0;.... RowN
022ED0: 6F 3A 3D 30 0D 0A 09 09 20 20 20 20 7C 0D 0A 0D o:=0.... |...
022EE0: 0A 09 28 2A 20 54 68 65 20 66 6F 6C 6C 6F 77 69 ..(* The followi
022EF0: 6E 67 20 67 72 61 70 68 69 63 73 20 63 68 61 72 ng graphics char
022F00: 09 09 78 32 2C 79 32 20 20 69 73 20 75 70 70 65 ..x2,y2 is uppe
022F10: 72 20 72 69 67 68 74 20 63 6F 72 6E 65 72 2A 29 r right corner*)
022F20: 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C ..VAR.i:CARDINAL
022F30: 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 ;..BEGIN.. IF
022F40: 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 OutputEnabled T
022F50: 48 45 4E 0D 0A 09 47 6F 74 6F 78 79 28 78 31 2C HEN...Gotoxy(x1,
022F60: 79 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E y1);...ScreenCon
022F70: 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68 29 trol(StartGraph)
022F80: 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F ;...ScreenContro
022F90: 6C 28 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A 09 46 l(CornerLL);...F
022FA0: 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 OR i:=x1+1 TO x2
022FB0: 2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 -1 DO ScreenCont
022FC0: 72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 rol(Horizontal)
022FD0: 45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E END;...ScreenCon
022FE0: 74 72 6F 6C 28 43 6F 72 6E 65 72 4C 52 29 3B 0D trol(CornerLR);.
022FF0: 0A 09 47 6F 74 6F 78 79 28 78 31 2C 79 32 29 3B ..Gotoxy(x1,y2);
023000: 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C ...ScreenControl
023010: 28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46 4F (CornerUL);...FO
023020: 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 2D R i:=x1+1 TO x2-
023030: 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 72 1 DO ScreenContr
023040: 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 45 ol(Horizontal) E
023050: 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 ND;...ScreenCont
023060: 72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D 0A rol(CornerUR);..
023070: 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 .FOR i:=y2+1 TO
023080: 79 31 2D 31 20 20 44 4F 0D 0A 09 09 47 6F 74 6F y1-1 DO....Goto
023090: 78 79 28 78 32 2C 69 29 3B 0D 0A 09 09 53 63 72 xy(x2,i);....Scr
0230A0: 65 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 eenControl(Verti
0230B0: 63 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 cal);....END;...
0230C0: 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 79 FOR i:=y2+1 TO y
0230D0: 31 2D 31 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 79 1-1 DO....Gotoxy
0230E0: 28 78 31 2C 69 29 3B 0D 0A 09 09 53 63 72 65 65 (x1,i);....Scree
0230F0: 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 63 61 nControl(Vertica
023100: 61 63 74 65 72 73 20 77 69 6C 6C 20 6E 65 65 64 acters will need
023110: 20 74 6F 20 62 65 20 6D 6F 64 69 66 69 65 64 20 to be modified
023120: 66 6F 72 20 0D 0A 09 20 20 20 64 69 66 66 65 72 for ... differ
023130: 65 6E 74 20 64 69 73 70 6C 61 79 20 73 79 73 74 ent display syst
023140: 65 6D 73 2A 29 0D 0A 0D 0A 09 48 6F 72 69 7A 6F ems*).....Horizo
023150: 6E 74 61 6C 3A 50 75 74 61 6E 64 49 6E 63 28 31 ntal:PutandInc(1
023160: 62 78 29 7C 0D 0A 09 56 65 72 74 69 63 61 6C 3A bx)|...Vertical:
023170: 50 75 74 61 6E 64 49 6E 63 28 30 62 78 29 7C 0D PutandInc(0bx)|.
023180: 0A 09 43 6F 72 6E 65 72 4C 4C 3A 50 75 74 61 6E ..CornerLL:Putan
023190: 64 49 6E 63 28 31 63 78 29 7C 0D 0A 09 43 6F 72 dInc(1cx)|...Cor
0231A0: 6E 65 72 55 4C 3A 50 75 74 61 6E 64 49 6E 63 28 nerUL:PutandInc(
0231B0: 30 66 78 29 7C 0D 0A 09 43 6F 72 6E 65 72 55 52 0fx)|...CornerUR
0231C0: 3A 50 75 74 61 6E 64 49 6E 63 28 31 30 78 29 7C :PutandInc(10x)|
0231D0: 0D 0A 09 43 6F 72 6E 65 72 4C 52 3A 50 75 74 61 ...CornerLR:Puta
0231E0: 6E 64 49 6E 63 28 31 66 78 29 7C 0D 0A 09 53 74 ndInc(1fx)|...St
0231F0: 61 72 74 78 79 2C 4D 69 64 64 6C 65 58 59 2C 45 artxy,MiddleXY,E
023200: 6E 64 58 59 3A 28 2A 63 75 72 73 6F 72 20 61 64 ndXY:(*cursor ad
023210: 64 72 65 73 73 69 6E 67 20 2D 20 6E 6F 74 20 72 dressing - not r
023220: 65 71 75 69 72 65 64 2A 29 7C 0D 0A 09 52 69 6E equired*)|...Rin
023230: 67 42 65 6C 6C 3A 69 3A 3D 42 44 4F 53 28 77 63 gBell:i:=BDOS(wc
023240: 63 66 63 2C 37 29 7C 0D 0A 09 4D 6F 76 65 4C 65 cfc,7)|...MoveLe
023250: 66 74 3A 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48 ft:IF ColNo>0 TH
023260: 45 4E 20 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E EN .....DEC(ColN
023270: 6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 o);.....DEC(Scre
023280: 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C 53 49 46 enPos);....ELSIF
023290: 20 52 6F 77 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09 RowNo>0 THEN...
0232A0: 09 09 44 45 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 ..DEC(RowNo);...
0232B0: 09 09 43 6F 6C 4E 6F 3A 3D 4C 6F 67 53 63 72 65 ..ColNo:=LogScre
0232C0: 65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 09 09 53 enWidth-1;.....S
0232D0: 63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C 4E 6F 2B creenPos:=ColNo+
0232E0: 52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D RowNo*RowWidth;.
0232F0: 0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 52 ....END|...MoveR
023300: 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 20 20 20 l);....END;..
023310: 20 20 09 45 4E 44 0D 0A 20 20 20 20 45 4E 44 20 .END.. END
023320: 44 72 61 77 42 6F 78 3B 0D 0A 50 52 4F 43 45 44 DrawBox;..PROCED
023330: 55 52 45 20 4F 75 74 70 75 74 54 6F 53 63 72 65 URE OutputToScre
023340: 65 6E 28 4F 6E 3A 42 4F 4F 4C 45 41 4E 29 3B 0D en(On:BOOLEAN);.
023350: 0A 42 45 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 .BEGIN...OutputE
023360: 6E 61 62 6C 65 64 3A 3D 4F 6E 0D 0A 09 45 4E 44 nabled:=On...END
023370: 20 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 3B OutputToScreen;
023380: 09 0D 0A 42 45 47 49 4E 0D 0A 09 4F 75 74 70 75 ...BEGIN...Outpu
023390: 74 45 6E 61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D tEnabled:=TRUE;.
0233A0: 0A 09 42 6C 69 6E 6B 52 6F 75 74 69 6E 65 3A 3D ..BlinkRoutine:=
0233B0: 42 6C 69 6E 6B 43 75 72 73 6F 72 3B 0D 0A 09 42 BlinkCursor;...B
0233C0: 6C 69 6E 6B 45 6E 61 62 6C 65 64 3A 3D 54 52 55 linkEnabled:=TRU
0233D0: 45 3B 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D E;...ScreenPos:=
0233E0: 30 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 0;...ScreenContr
0233F0: 6F 6C 28 43 6C 65 61 72 53 63 72 65 65 6E 29 3B ol(ClearScreen);
023400: 0D 0A 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 52 ...ColNo:=0;...R
023410: 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 43 68 61 72 52 owNo:=0;...CharR
023420: 6F 75 74 69 6E 65 3A 3D 57 72 69 74 65 3B 0D 0A outine:=Write;..
023430: 09 43 68 61 72 45 6E 61 62 6C 65 64 3A 3D 54 52 .CharEnabled:=TR
023440: 55 45 3B 09 0D 0A 09 53 63 72 65 65 6E 57 69 64 UE;....ScreenWid
023450: 74 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 th:=LogScreenWid
023460: 74 68 3B 0D 0A 09 53 63 72 65 65 6E 44 65 70 74 th;...ScreenDept
023470: 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 h:=LogScreenDept
023480: 68 3B 0D 0A 09 45 4E 44 20 53 63 72 65 65 6E 49 h;...END ScreenI
023490: 4F 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A O...............
0234A0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0234B0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0234C0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0234D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0234E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0234F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
023500: 69 67 68 74 3A 49 46 20 43 6F 6C 4E 6F 3C 28 4C ight:IF ColNo<(L
023510: 6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D 31 29 ogScreenWidth-1)
023520: 20 54 48 45 4E 20 0D 0A 09 09 09 49 4E 43 28 43 THEN .....INC(C
023530: 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 49 4E 43 28 53 olNo);.....INC(S
023540: 63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C creenPos);....EL
023550: 53 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 SIF RowNo<(LogSc
023560: 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 48 45 reenDepth-1) THE
023570: 4E 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D N.....ColNo:=0;.
023580: 0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D ....INC(RowNo);.
023590: 0A 09 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 52 ....ScreenPos:=R
0235A0: 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D 0A owNo*RowWidth;..
0235B0: 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 44 6F ...END|...MoveDo
0235C0: 77 6E 3A 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 wn:IF RowNo<(Log
0235D0: 53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 ScreenDepth-1) T
0235E0: 48 45 4E 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E HEN.....INC(RowN
0235F0: 6F 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F o);.....ScreenPo
023600: 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B 52 6F 77 s:=ScreenPos+Row
023610: 57 69 64 74 68 3B 0D 0A 09 09 09 45 4E 44 7C 0D Width;.....END|.
023620: 0A 09 4D 6F 76 65 55 70 3A 49 46 20 52 6F 77 4E ..MoveUp:IF RowN
023630: 6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09 44 45 43 o>0 THEN.....DEC
023640: 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 63 72 (RowNo);.....Scr
023650: 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F eenPos:=ScreenPo
023660: 73 2D 52 6F 77 57 69 64 74 68 3B 0D 0A 09 09 09 s-RowWidth;.....
023670: 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 43 END;....END; (*C
023680: 41 53 45 2A 29 0D 0A 09 53 65 74 43 75 72 73 6F ASE*)...SetCurso
023690: 72 3B 0D 0A 09 45 4E 44 20 0D 0A 20 20 20 20 45 r;...END .. E
0236A0: 4E 44 20 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C ND ScreenControl
0236B0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63 72 ;..PROCEDURE Scr
0236C0: 6F 6C 6C 57 69 6E 64 6F 77 55 70 28 53 74 61 72 ollWindowUp(Star
0236D0: 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 tofWindow,EndofW
0236E0: 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B indow:CARDINAL);
0236F0: 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 ..BEGIN.. IF
023700: 4D 4F 44 55 4C 45 20 54 65 73 74 3B 0D 0A 0D 0A MODULE Test;....
023710: 28 2A 09 54 65 73 74 20 6F 66 20 70 61 74 74 65 (*.Test of patte
023720: 72 6E 20 6D 61 74 63 68 20 6D 6F 64 75 6C 65 20 rn match module
023730: 2A 29 0D 0A 0D 0A 46 52 4F 4D 09 54 65 72 6D 69 *)....FROM.Termi
023740: 6E 61 6C 20 49 4D 50 4F 52 54 20 57 72 69 74 65 nal IMPORT Write
023750: 53 74 72 69 6E 67 2C 52 65 61 64 53 74 72 69 6E String,ReadStrin
023760: 67 2C 57 72 69 74 65 4C 6E 3B 0D 0A 46 52 4F 4D g,WriteLn;..FROM
023770: 09 50 61 74 74 65 72 6E 20 49 4D 50 4F 52 54 20 .Pattern IMPORT
023780: 4E 6F 64 65 54 79 70 65 2C 50 4E 6F 64 65 2C 43 NodeType,PNode,C
023790: 72 65 61 74 65 53 74 72 69 6E 67 4E 6F 64 65 2C reateStringNode,
0237A0: 4D 61 74 63 68 50 61 74 74 65 72 6E 2C 43 68 61 MatchPattern,Cha
0237B0: 72 53 65 74 2C 0D 0A 09 09 09 43 72 65 61 74 65 rSet,.....Create
0237C0: 41 6C 74 4E 6F 64 65 2C 43 72 65 61 74 65 53 74 AltNode,CreateSt
0237D0: 72 69 6E 67 4E 6F 64 65 2C 0D 0A 09 09 09 43 72 ringNode,.....Cr
0237E0: 65 61 74 65 41 6E 79 4F 66 4E 6F 64 65 2C 43 72 eateAnyOfNode,Cr
0237F0: 65 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 2C 43 eateConcatNode,C
023800: 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 3B 0D reateLimitNode;.
023810: 0A 46 52 4F 4D 09 53 74 6F 72 61 67 65 20 49 4D .FROM.Storage IM
023820: 50 4F 52 54 20 41 4C 4C 4F 43 41 54 45 3B 0D 0A PORT ALLOCATE;..
023830: 56 41 52 09 45 78 70 31 2C 45 78 70 2C 54 65 72 VAR.Exp1,Exp,Ter
023840: 6D 2C 46 61 63 74 3A 50 4E 6F 64 65 3B 0D 0A 09 m,Fact:PNode;...
023850: 74 65 6D 70 3A 50 4E 6F 64 65 3B 0D 0A 42 45 47 temp:PNode;..BEG
023860: 49 4E 0D 0A 09 4E 45 57 28 45 78 70 29 3B 0D 0A IN...NEW(Exp);..
023870: 09 4E 45 57 28 54 65 72 6D 29 3B 0D 0A 09 46 61 .NEW(Term);...Fa
023880: 63 74 3A 3D 43 72 65 61 74 65 41 6C 74 4E 6F 64 ct:=CreateAltNod
023890: 65 28 0D 0A 09 09 43 72 65 61 74 65 41 6E 79 4F e(....CreateAnyO
0238A0: 66 4E 6F 64 65 28 43 68 61 72 53 65 74 7B 27 41 fNode(CharSet{'A
0238B0: 27 2E 2E 27 5A 27 2C 27 30 27 2E 2E 27 39 27 2C '..'Z','0'..'9',
0238C0: 27 61 27 2E 2E 27 7A 27 7D 2C 31 2C 33 30 30 30 'a'..'z'},1,3000
0238D0: 30 2C 54 52 55 45 29 2C 0D 0A 09 09 43 72 65 61 0,TRUE),....Crea
0238E0: 74 65 43 6F 6E 63 61 74 4E 6F 64 65 28 0D 0A 09 teConcatNode(...
0238F0: 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74 4E 6F ..CreateConcatNo
023900: 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 OutputEnabled TH
023910: 45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 EN...ClearCursor
023920: 3B 0D 0A 09 4D 6F 76 65 75 70 28 41 44 52 28 53 ;...Moveup(ADR(S
023930: 63 72 65 65 6E 5B 28 53 74 61 72 74 6F 66 57 69 creen[(StartofWi
023940: 6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 5D 29 ndow)*RowWidth])
023950: 2C 0D 0A 09 09 20 41 44 52 28 53 63 72 65 65 6E ,.... ADR(Screen
023960: 5B 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2B [(StartofWindow+
023970: 31 29 2A 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 1)*RowWidth]),..
023980: 09 09 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2D .. (EndofWindow-
023990: 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 29 2A 52 StartofWindow)*R
0239A0: 6F 77 57 69 64 74 68 29 3B 0D 0A 09 46 4F 52 20 owWidth);...FOR
0239B0: 69 3A 3D 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 i:=StartofWindow
0239C0: 2A 52 6F 77 57 69 64 74 68 20 54 4F 20 28 53 74 *RowWidth TO (St
0239D0: 61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52 artofWindow+1)*R
0239E0: 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D 0A 09 09 owWidth-1 DO....
0239F0: 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 3B 0D Screen[i]:=' ';.
023A00: 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 43 75 72 ...END;...SetCur
023A10: 73 6F 72 3B 0D 0A 09 45 4E 44 20 0D 0A 20 20 20 sor;...END ..
023A20: 20 45 4E 44 20 53 63 72 6F 6C 6C 57 69 6E 64 6F END ScrollWindo
023A30: 77 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 wUp;..PROCEDURE
023A40: 53 63 72 6F 6C 6C 57 69 6E 64 6F 77 44 6F 77 6E ScrollWindowDown
023A50: 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 (StartofWindow,E
023A60: 6E 64 6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 ndofWindow:CARDI
023A70: 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 NAL);..BEGIN..
023A80: 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62 6C IF OutputEnabl
023A90: 65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 43 ed THEN...ClearC
023AA0: 75 72 73 6F 72 3B 0D 0A 09 4D 6F 76 65 64 6F 77 ursor;...Movedow
023AB0: 6E 28 41 44 52 28 53 63 72 65 65 6E 5B 28 53 74 n(ADR(Screen[(St
023AC0: 61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52 artofWindow+1)*R
023AD0: 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 20 41 owWidth]),.... A
023AE0: 44 52 28 53 63 72 65 65 6E 5B 28 53 74 61 72 74 DR(Screen[(Start
023AF0: 6F 66 57 69 6E 64 6F 77 29 2A 52 6F 77 57 69 64 ofWindow)*RowWid
023B00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
023B10: 1E 00 01 00 02 09 52 E5 1E 00 C9 02 00 00 00 02 ......R.........
023B20: 1E 00 C5 02 00 00 00 02 1E 00 C1 02 00 00 00 02 ................
023B30: 1E 00 C6 02 00 00 00 02 1E 00 C2 02 00 00 00 02 ................
023B40: 1E 00 C7 02 00 00 00 02 1E 00 C3 02 00 00 00 02 ................
023B50: 1E 00 C8 02 00 00 00 02 1E 00 C4 02 00 00 00 02 ................
023B60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023B70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023B80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023B90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023C00: 6C 65 50 74 72 5E 29 3B 0D 0A 09 09 49 46 20 28 lePtr^);....IF (
023C10: 69 3E 43 41 52 44 49 4E 41 4C 28 4C 69 6E 65 50 i>CARDINAL(LineP
023C20: 6F 73 29 29 20 4F 52 20 28 63 68 3D 45 4F 46 29 os)) OR (ch=EOF)
023C30: 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D THEN EXIT END;.
023C40: 0A 09 09 49 46 20 63 68 3D 54 41 42 20 54 48 45 ...IF ch=TAB THE
023C50: 4E 20 54 68 69 73 78 3A 3D 49 41 4E 44 28 54 68 N Thisx:=IAND(Th
023C60: 69 73 78 2B 38 2C 30 66 66 66 38 68 29 20 0D 0A isx+8,0fff8h) ..
023C70: 09 09 45 4C 53 45 20 20 49 4E 43 28 54 68 69 73 ..ELSE INC(This
023C80: 78 29 20 45 4E 44 3B 0D 0A 09 09 62 3A 3D 46 6F x) END;....b:=Fo
023C90: 72 77 61 72 64 4F 6E 65 43 68 61 72 28 43 75 72 rwardOneChar(Cur
023CA0: 46 69 6C 65 50 74 72 5E 29 20 0D 0A 09 09 45 4E FilePtr^) ....EN
023CB0: 44 3B 0D 0A 09 69 3A 3D 54 68 69 73 78 3B 0D 0A D;...i:=Thisx;..
023CC0: 09 57 48 49 4C 45 20 54 68 69 73 78 3E 3D 28 53 .WHILE Thisx>=(S
023CD0: 63 72 65 65 6E 57 69 64 74 68 2B 43 75 72 72 65 creenWidth+Curre
023CE0: 6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 20 44 4F ntLeftMargin) DO
023CF0: 0D 0A 09 09 43 68 61 6E 67 65 4D 61 72 67 69 6E ....ChangeMargin
023D00: 28 33 32 29 3B 0D 0A 09 09 54 68 69 73 78 3A 3D (32);....Thisx:=
023D10: 69 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 48 49 i;....END;...WHI
023D20: 4C 45 20 54 68 69 73 78 3C 43 75 72 72 65 6E 74 LE Thisx<Current
023D30: 4C 65 66 74 4D 61 72 67 69 6E 20 44 4F 0D 0A 09 LeftMargin DO...
023D40: 09 43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 33 .ChangeMargin(-3
023D50: 32 29 3B 0D 0A 09 09 54 68 69 73 78 3A 3D 69 3B 2);....Thisx:=i;
023D60: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 54 68 69 73 78 ....END;...Thisx
023D70: 3A 3D 54 68 69 73 78 2D 43 75 72 72 65 6E 74 4C :=Thisx-CurrentL
023D80: 65 66 74 4D 61 72 67 69 6E 3B 0D 0A 09 63 75 72 eftMargin;...cur
023D90: 78 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D x[CurrentWindow]
023DA0: 3A 3D 54 68 69 73 78 3B 0D 0A 09 52 65 73 65 74 :=Thisx;...Reset
023DB0: 50 6F 73 3B 0D 0A 09 45 4E 44 20 43 68 61 6E 67 Pos;...END Chang
023DC0: 65 50 6F 73 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 ePos;....PROCEDU
023DD0: 52 45 20 4C 69 6E 65 4D 6F 76 65 28 62 79 3A 49 RE LineMove(by:I
023DE0: 4E 54 45 47 45 52 29 3B 0D 0A 56 41 52 09 69 3A NTEGER);..VAR.i:
023DF0: 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E 0D INTEGER;..BEGIN.
023E00: 72 20 77 69 74 68 69 6E 20 74 68 65 0D 0A 09 74 r within the...t
023E10: 65 78 74 20 6C 69 6E 65 2E 20 49 74 20 6E 65 65 ext line. It nee
023E20: 64 20 6E 6F 74 20 62 65 20 74 68 65 20 73 61 6D d not be the sam
023E30: 65 20 61 73 20 74 68 65 20 70 6F 73 69 74 69 6F e as the positio
023E40: 6E 20 6F 6E 20 74 68 65 0D 0A 09 73 63 72 65 65 n on the...scree
023E50: 6E 20 62 65 63 61 75 73 65 20 6F 66 20 74 68 65 n because of the
023E60: 20 75 73 65 20 6F 66 20 74 61 62 20 63 68 61 72 use of tab char
023E70: 61 63 74 65 72 73 2A 29 0D 0A 54 59 50 45 09 50 acters*)..TYPE.P
023E80: 45 64 69 74 46 69 6C 65 3D 50 4F 49 4E 54 45 52 EditFile=POINTER
023E90: 20 54 4F 20 45 64 69 74 46 69 6C 65 3B 0D 0A 56 TO EditFile;..V
023EA0: 41 52 09 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 AR.i:INTEGER;...
023EB0: 63 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 53 74 c:CARDINAL;...St
023EC0: 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F artofWindow,Endo
023ED0: 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C fWindow:CARDINAL
023EE0: 3B 0D 0A 09 63 68 3A 43 48 41 52 3B 0D 0A 09 43 ;...ch:CHAR;...C
023EF0: 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 6E urrentLeftMargin
023F00: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 46 69 6C :CARDINAL;...Fil
023F10: 65 4C 69 6D 69 74 3A 42 4F 4F 4C 45 41 4E 3B 0D eLimit:BOOLEAN;.
023F20: 0A 09 52 65 44 72 61 77 6E 3A 42 4F 4F 4C 45 41 ..ReDrawn:BOOLEA
023F30: 4E 3B 0D 0A 09 43 75 72 46 69 6C 65 50 74 72 3A N;...CurFilePtr:
023F40: 50 45 64 69 74 46 69 6C 65 3B 0D 0A 50 52 4F 43 PEditFile;..PROC
023F50: 45 44 55 52 45 20 43 68 61 6E 67 65 50 6F 73 3B EDURE ChangePos;
023F60: 46 4F 52 57 41 52 44 3B 0D 0A 50 52 4F 43 45 44 FORWARD;..PROCED
023F70: 55 52 45 20 44 6F 53 63 72 65 65 6E 43 68 61 6E URE DoScreenChan
023F80: 67 65 28 43 6F 64 65 3A 45 64 69 74 73 29 3B 0D ge(Code:Edits);.
023F90: 0A 42 45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 43 .BEGIN...ScreenC
023FA0: 6F 6E 74 72 6F 6C 28 43 6F 64 65 29 3B 0D 0A 09 ontrol(Code);...
023FB0: 45 4E 44 20 44 6F 53 63 72 65 65 6E 43 68 61 6E END DoScreenChan
023FC0: 67 65 3B 0D 0A 0D 0A 0D 0A 56 41 52 09 6C 69 6E ge;......VAR.lin
023FD0: 65 73 6D 6F 76 65 64 3A 49 4E 54 45 47 45 52 3B esmoved:INTEGER;
023FE0: 0D 0A 09 70 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A ...p:Position;..
023FF0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 4C ..PROCEDURE SetL
024000: 29 20 45 4E 44 3B 0D 0A 09 49 46 20 4D 61 74 63 ) END;...IF Matc
024010: 68 50 61 74 74 65 72 6E 28 45 78 70 31 2C 27 32 hPattern(Exp1,'2
024020: 2B 33 2A 32 27 29 3C 3E 4E 49 4C 20 54 48 45 4E +3*2')<>NIL THEN
024030: 20 57 72 69 74 65 53 74 72 69 6E 67 28 27 32 3A WriteString('2:
024040: 20 20 4F 4B 27 29 20 45 4E 44 3B 0D 0A 09 49 46 OK') END;...IF
024050: 20 4D 61 74 63 68 50 61 74 74 65 72 6E 28 45 78 MatchPattern(Ex
024060: 70 31 2C 27 32 2A 28 32 2B 33 29 27 29 3C 3E 4E p1,'2*(2+3)')<>N
024070: 49 4C 20 54 48 45 4E 20 57 72 69 74 65 53 74 72 IL THEN WriteStr
024080: 69 6E 67 28 27 33 3A 20 20 4F 4B 27 29 20 45 4E ing('3: OK') EN
024090: 44 3B 0D 0A 09 49 46 20 4D 61 74 63 68 50 61 74 D;...IF MatchPat
0240A0: 74 65 72 6E 28 45 78 70 31 2C 27 32 2A 32 2A 33 tern(Exp1,'2*2*3
0240B0: 2A 34 27 29 3C 3E 4E 49 4C 20 54 48 45 4E 20 57 *4')<>NIL THEN W
0240C0: 72 69 74 65 53 74 72 69 6E 67 28 27 34 3A 20 20 riteString('4:
0240D0: 4F 4B 27 29 20 45 4E 44 3B 0D 0A 09 49 46 20 4D OK') END;...IF M
0240E0: 61 74 63 68 50 61 74 74 65 72 6E 28 45 78 70 31 atchPattern(Exp1
0240F0: 2C 27 32 2A 32 2B 33 2A 37 27 29 3C 3E 4E 49 4C ,'2*2+3*7')<>NIL
024100: 20 54 48 45 4E 20 57 72 69 74 65 53 74 72 69 6E THEN WriteStrin
024110: 67 28 27 35 3A 20 20 4F 4B 27 29 20 45 4E 44 3B g('5: OK') END;
024120: 0D 0A 09 49 46 20 4D 61 74 63 68 50 61 74 74 65 ...IF MatchPatte
024130: 72 6E 28 45 78 70 31 2C 27 32 2A 32 2B 33 2A 34 rn(Exp1,'2*2+3*4
024140: 2B 28 39 2B 38 29 27 29 3C 3E 4E 49 4C 20 54 48 +(9+8)')<>NIL TH
024150: 45 4E 20 57 72 69 74 65 53 74 72 69 6E 67 28 27 EN WriteString('
024160: 36 3A 20 20 4F 4B 27 29 20 45 4E 44 3B 0D 0A 09 6: OK') END;...
024170: 49 46 20 4D 61 74 63 68 50 61 74 74 65 72 6E 28 IF MatchPattern(
024180: 45 78 70 31 2C 27 32 2B 2B 32 27 29 3C 3E 4E 49 Exp1,'2++2')<>NI
024190: 4C 20 54 48 45 4E 20 57 72 69 74 65 53 74 72 69 L THEN WriteStri
0241A0: 6E 67 28 27 37 3A 20 6E 6F 74 20 6F 6B 20 27 29 ng('7: not ok ')
0241B0: 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 54 65 73 74 END;...END Test
0241C0: 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0241D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0241E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0241F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
024200: 69 6E 65 50 6F 73 28 6D 6F 76 65 3A 49 4E 54 45 inePos(move:INTE
024210: 47 45 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 52 GER);..BEGIN...R
024220: 65 74 72 6C 69 6E 65 28 43 75 72 46 69 6C 65 50 etrline(CurFileP
024230: 74 72 5E 2C 4C 69 6E 65 4C 65 6E 2C 4C 69 6E 65 tr^,LineLen,Line
024240: 50 6F 73 2C 70 2C 6C 69 6E 65 73 6D 6F 76 65 64 Pos,p,linesmoved
024250: 2C 6D 6F 76 65 29 3B 0D 0A 09 45 4E 44 20 53 65 ,move);...END Se
024260: 74 4C 69 6E 65 50 6F 73 3B 0D 0A 50 52 4F 43 45 tLinePos;..PROCE
024270: 44 55 52 45 20 4D 61 72 6B 41 73 55 70 64 61 74 DURE MarkAsUpdat
024280: 65 64 3B 0D 0A 42 45 47 49 4E 0D 0A 09 55 70 64 ed;..BEGIN...Upd
024290: 61 74 65 64 5B 43 75 72 72 65 6E 74 46 69 6C 65 ated[CurrentFile
0242A0: 5D 3A 3D 54 52 55 45 0D 0A 09 45 4E 44 20 4D 61 ]:=TRUE...END Ma
0242B0: 72 6B 41 73 55 70 64 61 74 65 64 3B 0D 0A 50 52 rkAsUpdated;..PR
0242C0: 4F 43 45 44 55 52 45 20 52 65 73 65 74 50 6F 73 OCEDURE ResetPos
0242D0: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 6F 78 ;..BEGIN...Gotox
0242E0: 79 28 54 68 69 73 78 2C 54 68 69 73 79 29 3B 0D y(Thisx,Thisy);.
0242F0: 0A 09 45 4E 44 20 52 65 73 65 74 50 6F 73 3B 0D ..END ResetPos;.
024300: 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 65 61 72 .PROCEDURE Clear
024310: 52 65 73 74 4F 66 4C 69 6E 65 3B 0D 0A 42 45 47 RestOfLine;..BEG
024320: 49 4E 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 IN...ScreenContr
024330: 6F 6C 28 44 65 6C 45 6F 6C 29 3B 0D 0A 09 49 46 ol(DelEol);...IF
024340: 20 4E 4F 54 20 4D 61 64 65 43 68 61 6E 67 65 20 NOT MadeChange
024350: 54 48 45 4E 0D 0A 09 09 46 4F 52 20 63 3A 3D 54 THEN....FOR c:=T
024360: 68 69 73 78 2B 31 20 54 4F 20 53 63 72 65 65 6E hisx+1 TO Screen
024370: 57 69 64 74 68 20 44 4F 20 57 72 69 74 65 28 27 Width DO Write('
024380: 20 27 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B ') END;....END;
024390: 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 45 ...ResetPos;...E
0243A0: 4E 44 20 43 6C 65 61 72 52 65 73 74 4F 66 4C 69 ND ClearRestOfLi
0243B0: 6E 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 ne;..PROCEDURE D
0243C0: 65 6C 54 6F 45 4F 4C 3B 0D 0A 56 41 52 09 69 3A elToEOL;..VAR.i:
0243D0: 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E CARDINAL;..BEGIN
0243E0: 0D 0A 09 4D 61 72 6B 41 73 55 70 64 61 74 65 64 ...MarkAsUpdated
0243F0: 3B 0D 0A 09 49 46 20 4C 69 6E 65 50 6F 73 3C 3D ;...IF LinePos<=
024400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0244A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0244B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0244C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0244D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0244E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0244F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0245A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0245B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0245C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0245D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0245E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0245F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
024600: 4C 69 6E 65 4C 65 6E 20 54 48 45 4E 20 0D 0A 09 LineLen THEN ...
024610: 09 44 65 6C 43 68 61 72 73 28 43 75 72 46 69 6C .DelChars(CurFil
024620: 65 50 74 72 5E 2C 4C 69 6E 65 4C 65 6E 2D 4C 69 ePtr^,LineLen-Li
024630: 6E 65 50 6F 73 29 20 0D 0A 09 09 45 4E 44 3B 0D nePos) ....END;.
024640: 0A 09 4C 69 6E 65 4C 65 6E 3A 3D 4C 69 6E 65 50 ..LineLen:=LineP
024650: 6F 73 3B 0D 0A 09 43 6C 65 61 72 52 65 73 74 4F os;...ClearRestO
024660: 66 4C 69 6E 65 3B 0D 0A 09 45 4E 44 20 44 65 6C fLine;...END Del
024670: 54 6F 45 4F 4C 3B 0D 0A 56 41 52 09 0D 0A 09 62 ToEOL;..VAR....b
024680: 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 50 52 4F 43 45 :BOOLEAN;..PROCE
024690: 44 55 52 45 20 52 65 44 69 73 70 6C 61 79 57 69 DURE ReDisplayWi
0246A0: 6E 64 6F 77 3B 0D 0A 42 45 47 49 4E 0D 0A 09 44 ndow;..BEGIN...D
0246B0: 69 73 70 6C 61 79 46 69 6C 65 28 43 75 72 46 69 isplayFile(CurFi
0246C0: 6C 65 50 74 72 5E 2C 43 75 72 72 65 6E 74 57 69 lePtr^,CurrentWi
0246D0: 6E 64 6F 77 2C 54 68 69 73 78 2C 54 68 69 73 79 ndow,Thisx,Thisy
0246E0: 29 3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A );...ResetPos;..
0246F0: 09 63 75 72 78 5B 43 75 72 72 65 6E 74 57 69 6E .curx[CurrentWin
024700: 64 6F 77 5D 3A 3D 54 68 69 73 78 3B 0D 0A 09 63 dow]:=Thisx;...c
024710: 75 72 79 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F ury[CurrentWindo
024720: 77 5D 3A 3D 54 68 69 73 79 3B 0D 0A 09 52 65 44 w]:=Thisy;...ReD
024730: 72 61 77 6E 3A 3D 54 52 55 45 3B 0D 0A 09 45 4E rawn:=TRUE;...EN
024740: 44 20 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F D ReDisplayWindo
024750: 77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 w;..PROCEDURE Re
024760: 44 69 73 70 6C 61 79 3B 0D 0A 42 45 47 49 4E 0D Display;..BEGIN.
024770: 0A 09 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F ..ReDisplayWindo
024780: 77 3B 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 w;...SetLinePos(
024790: 30 29 3B 0D 0A 09 43 68 61 6E 67 65 50 6F 73 3B 0);...ChangePos;
0247A0: 0D 0A 09 45 4E 44 20 52 65 44 69 73 70 6C 61 79 ...END ReDisplay
0247B0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68 61 ;..PROCEDURE Cha
0247C0: 6E 67 65 4D 61 72 67 69 6E 28 49 6E 63 3A 49 4E ngeMargin(Inc:IN
0247D0: 54 45 47 45 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A TEGER);..BEGIN..
0247E0: 09 49 46 20 28 49 6E 63 3C 30 29 20 41 4E 44 20 .IF (Inc<0) AND
0247F0: 20 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 (CurrentLeftMar
024800: 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 61 20 76 ..(*.This is a v
024810: 65 72 73 69 6F 6E 20 6F 66 20 65 64 69 74 63 6F ersion of editco
024820: 6E 74 20 66 6F 72 20 70 65 6F 70 6C 65 20 77 69 nt for people wi
024830: 74 68 0D 0A 09 64 75 6D 62 20 74 65 72 6D 69 6E th...dumb termin
024840: 61 6C 73 2E 20 20 54 68 65 20 6F 6E 6C 79 20 66 als. The only f
024850: 61 63 69 6C 69 74 69 65 73 20 77 68 69 63 68 20 acilities which
024860: 74 68 69 73 20 76 65 72 73 69 6F 6E 0D 0A 09 6F this version...o
024870: 66 20 45 44 49 54 43 4F 4E 54 20 61 73 73 75 6D f EDITCONT assum
024880: 65 73 20 69 73 20 47 6F 74 6F 78 79 20 61 6E 64 es is Gotoxy and
024890: 20 74 68 65 20 61 62 69 6C 69 74 79 20 74 6F 20 the ability to
0248A0: 68 69 67 68 6C 69 67 68 74 0D 0A 09 69 6E 20 73 highlight...in s
0248B0: 6F 6D 65 20 77 61 79 20 2A 29 0D 0A 0D 0A 28 2A ome way *)....(*
0248C0: 24 6C 2D 2A 29 0D 0A 49 4D 50 4C 45 4D 45 4E 54 $l-*)..IMPLEMENT
0248D0: 41 54 49 4F 4E 20 4D 4F 44 55 4C 45 20 45 64 69 ATION MODULE Edi
0248E0: 74 43 6F 6E 74 72 6F 6C 3B 0D 0A 0D 0A 28 2A 09 tControl;....(*.
0248F0: 45 64 69 74 6F 72 20 63 6F 6E 74 72 6F 6C 20 2D Editor control -
024900: 20 64 61 74 61 20 61 72 65 61 73 20 66 6F 72 20 data areas for
024910: 66 69 6C 65 20 61 6E 64 20 72 6F 75 74 69 6E 65 file and routine
024920: 73 20 77 68 69 63 68 20 61 63 74 75 61 6C 6C 79 s which actually
024930: 0D 0A 09 70 65 72 66 6F 72 6D 20 65 64 69 74 20 ...perform edit
024940: 66 75 6E 63 74 69 6F 6E 73 20 62 79 20 63 61 6C functions by cal
024950: 6C 69 6E 67 20 6D 61 6B 65 65 64 69 74 20 74 6F ling makeedit to
024960: 20 65 64 69 74 20 74 68 65 20 66 69 6C 65 20 61 edit the file a
024970: 6E 64 0D 0A 09 65 64 69 74 64 69 73 70 20 74 6F nd...editdisp to
024980: 20 63 68 61 6E 67 65 20 74 68 65 20 73 63 72 65 change the scre
024990: 65 6E 2A 29 0D 0A 0D 0A 46 52 4F 4D 20 4D 61 6B en*)....FROM Mak
0249A0: 65 45 64 69 74 73 20 49 4D 50 4F 52 54 20 49 6E eEdits IMPORT In
0249B0: 73 43 68 61 72 73 2C 44 65 6C 43 68 61 72 73 2C sChars,DelChars,
0249C0: 52 65 74 72 6C 69 6E 65 2C 42 61 63 6B 4F 6E 65 Retrline,BackOne
0249D0: 43 68 61 72 2C 46 6F 72 77 61 72 64 4F 6E 65 43 Char,ForwardOneC
0249E0: 68 61 72 2C 0D 0A 09 09 47 65 74 43 75 72 72 65 har,....GetCurre
0249F0: 6E 74 43 68 61 72 2C 47 65 74 50 6F 73 69 74 69 ntChar,GetPositi
024A00: 67 69 6E 3C 43 41 52 44 49 4E 41 4C 28 2D 49 6E gin<CARDINAL(-In
024A10: 63 29 29 20 54 48 45 4E 20 0D 0A 09 09 49 6E 63 c)) THEN ....Inc
024A20: 3A 3D 2D 49 4E 54 45 47 45 52 28 43 75 72 72 65 :=-INTEGER(Curre
024A30: 6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 20 0D 0A ntLeftMargin) ..
024A40: 09 09 45 4E 44 3B 0D 0A 09 49 46 20 28 49 6E 63 ..END;...IF (Inc
024A50: 3E 30 29 20 41 4E 44 20 28 54 68 69 73 78 3C 43 >0) AND (Thisx<C
024A60: 41 52 44 49 4E 41 4C 28 49 6E 63 29 29 20 54 48 ARDINAL(Inc)) TH
024A70: 45 4E 20 49 6E 63 3A 3D 54 68 69 73 78 20 45 4E EN Inc:=Thisx EN
024A80: 44 3B 0D 0A 09 43 75 72 72 65 6E 74 4C 65 66 74 D;...CurrentLeft
024A90: 4D 61 72 67 69 6E 3A 3D 49 4E 54 45 47 45 52 28 Margin:=INTEGER(
024AA0: 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 CurrentLeftMargi
024AB0: 6E 29 2B 49 6E 63 3B 0D 0A 09 54 68 69 73 78 3A n)+Inc;...Thisx:
024AC0: 3D 49 4E 54 45 47 45 52 28 54 68 69 73 78 29 2D =INTEGER(Thisx)-
024AD0: 49 6E 63 3B 0D 0A 09 63 75 72 78 5B 43 75 72 72 Inc;...curx[Curr
024AE0: 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D 54 68 69 73 entWindow]:=This
024AF0: 78 3B 0D 0A 09 4C 65 66 74 4D 61 72 67 69 6E 5B x;...LeftMargin[
024B00: 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D CurrentWindow]:=
024B10: 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 CurrentLeftMargi
024B20: 6E 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 57 69 n;...ReDisplayWi
024B30: 6E 64 6F 77 3B 0D 0A 09 52 65 73 65 74 50 6F 73 ndow;...ResetPos
024B40: 3B 0D 0A 09 45 4E 44 20 43 68 61 6E 67 65 4D 61 ;...END ChangeMa
024B50: 72 67 69 6E 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 rgin;....PROCEDU
024B60: 52 45 20 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 56 RE ChangePos;..V
024B70: 41 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A AR.i:CARDINAL;..
024B80: 42 45 47 49 4E 0D 0A 09 49 46 20 4C 69 6E 65 4C BEGIN...IF LineL
024B90: 65 6E 3C 4C 69 6E 65 50 6F 73 20 54 48 45 4E 20 en<LinePos THEN
024BA0: 0D 0A 09 09 4C 69 6E 65 50 6F 73 3A 3D 4C 69 6E ....LinePos:=Lin
024BB0: 65 4C 65 6E 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 eLen;....END;...
024BC0: 54 68 69 73 78 3A 3D 30 3B 0D 0A 09 69 3A 3D 30 Thisx:=0;...i:=0
024BD0: 3B 09 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 49 4E 43 ;....LOOP....INC
024BE0: 28 69 29 3B 0D 0A 09 09 63 68 3A 3D 47 65 74 43 (i);....ch:=GetC
024BF0: 75 72 72 65 6E 74 43 68 61 72 28 43 75 72 46 69 urrentChar(CurFi
024C00: 6F 6E 2C 53 65 74 50 6F 73 69 74 69 6F 6E 2C 52 on,SetPosition,R
024C10: 65 61 64 4E 65 78 74 43 68 61 72 2C 46 69 6E 64 eadNextChar,Find
024C20: 53 74 72 69 6E 67 2C 0D 0A 09 09 4C 61 62 65 6C String,....Label
024C30: 4F 70 3B 0D 0A 46 52 4F 4D 20 45 64 69 74 44 69 Op;..FROM EditDi
024C40: 73 70 6C 61 79 20 49 4D 50 4F 52 54 20 44 69 73 splay IMPORT Dis
024C50: 70 6C 61 79 46 69 6C 65 2C 45 72 72 6F 72 4D 65 playFile,ErrorMe
024C60: 73 73 61 67 65 2C 57 69 6E 64 6F 77 73 2C 4C 69 ssage,Windows,Li
024C70: 6E 65 73 50 65 72 57 69 6E 64 6F 77 3B 0D 0A 46 nesPerWindow;..F
024C80: 52 4F 4D 20 53 63 72 65 65 6E 49 4F 20 49 4D 50 ROM ScreenIO IMP
024C90: 4F 52 54 20 45 64 69 74 73 2C 44 65 6C 43 68 61 ORT Edits,DelCha
024CA0: 72 2C 44 65 6C 4C 69 6E 65 2C 49 6E 73 43 68 61 r,DelLine,InsCha
024CB0: 72 2C 49 6E 73 4C 69 6E 65 2C 44 65 6C 45 6F 6C r,InsLine,DelEol
024CC0: 2C 4D 6F 76 65 55 70 2C 0D 0A 09 09 09 4D 6F 76 ,MoveUp,.....Mov
024CD0: 65 44 6F 77 6E 2C 4D 6F 76 65 4C 65 66 74 2C 4D eDown,MoveLeft,M
024CE0: 6F 76 65 52 69 67 68 74 2C 47 6F 74 6F 78 79 2C oveRight,Gotoxy,
024CF0: 43 6C 65 61 72 53 63 72 65 65 6E 2C 0D 0A 09 09 ClearScreen,....
024D00: 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 2C 0D .ScreenControl,.
024D10: 0A 09 09 09 53 63 72 65 65 6E 57 69 64 74 68 2C ....ScreenWidth,
024D20: 53 63 72 65 65 6E 44 65 70 74 68 2C 4D 61 64 65 ScreenDepth,Made
024D30: 43 68 61 6E 67 65 3B 0D 0A 46 52 4F 4D 20 49 6E Change;..FROM In
024D40: 74 4C 6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41 tLogic IMPORT IA
024D50: 4E 44 3B 09 0D 0A 46 52 4F 4D 09 53 59 53 54 45 ND;...FROM.SYSTE
024D60: 4D 20 49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 43 M IMPORT ADR;..C
024D70: 4F 4E 53 54 09 43 52 3D 30 64 78 3B 0D 0A 09 54 ONST.CR=0dx;...T
024D80: 41 42 3D 30 39 78 3B 0D 0A 09 4C 46 3D 30 61 78 AB=09x;...LF=0ax
024D90: 3B 0D 0A 09 45 4F 46 3D 31 61 78 3B 0D 0A 28 2A ;...EOF=1ax;..(*
024DA0: 09 41 20 72 65 6D 61 72 6B 20 6F 6E 20 74 68 65 .A remark on the
024DB0: 20 75 73 65 20 6F 66 20 4C 69 6E 65 50 6F 73 20 use of LinePos
024DC0: 61 6E 64 20 63 75 72 78 0D 0A 0D 0A 09 4C 69 6E and curx.....Lin
024DD0: 65 50 6F 73 20 61 6C 77 61 79 73 20 70 6F 69 6E ePos always poin
024DE0: 74 73 20 74 6F 20 74 68 65 20 6E 75 6D 62 65 72 ts to the number
024DF0: 20 6F 66 20 74 68 65 20 63 68 61 72 61 63 74 65 of the characte
024E00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
024E10: 1F 00 01 00 02 09 52 E5 1F 00 C9 02 00 00 00 02 ......R.........
024E20: 1F 00 C5 02 00 00 00 02 1F 00 C1 02 00 00 00 02 ................
024E30: 1F 00 C6 02 00 00 00 02 1F 00 C2 02 00 00 00 02 ................
024E40: 1F 00 C7 02 00 00 00 02 1F 00 C3 02 00 00 00 02 ................
024E50: 1F 00 C8 02 00 00 00 02 1F 00 C4 02 00 00 00 02 ................
024E60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024E70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024E80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024E90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024EA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024EB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024EC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024ED0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024EE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024EF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024F00: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 41 6C 70 ;..PROCEDURE Alp
024F10: 68 61 4E 75 6D 28 63 68 3A 43 48 41 52 29 3A 42 haNum(ch:CHAR):B
024F20: 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A OOLEAN;..BEGIN..
024F30: 09 63 68 3A 3D 43 41 50 28 63 68 29 3B 0D 0A 09 .ch:=CAP(ch);...
024F40: 52 45 54 55 52 4E 20 28 28 63 68 3E 3D 27 41 27 RETURN ((ch>='A'
024F50: 29 20 41 4E 44 20 28 63 68 3C 3D 27 5A 27 29 29 ) AND (ch<='Z'))
024F60: 20 4F 52 20 28 28 63 68 3E 3D 27 30 27 29 20 41 OR ((ch>='0') A
024F70: 4E 44 20 28 63 68 3C 3D 27 39 27 29 29 3B 0D 0A ND (ch<='9'));..
024F80: 09 45 4E 44 20 41 6C 70 68 61 4E 75 6D 3B 0D 0A .END AlphaNum;..
024F90: 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 6E 64 ..PROCEDURE Find
024FA0: 57 6F 72 64 28 42 61 63 6B 77 61 72 64 3A 42 4F Word(Backward:BO
024FB0: 4F 4C 45 41 4E 3B 44 65 6C 65 74 65 3A 42 4F 4F OLEAN;Delete:BOO
024FC0: 4C 45 41 4E 29 3B 0D 0A 0D 0A 28 2A 09 46 69 6E LEAN);....(*.Fin
024FD0: 64 20 61 20 77 6F 72 64 20 61 6E 64 20 6F 70 74 d a word and opt
024FE0: 69 6F 6E 61 6C 6C 79 20 64 65 6C 65 74 65 20 69 ionally delete i
024FF0: 74 0D 0A 0D 0A 09 41 20 77 6F 72 64 20 69 73 20 t.....A word is
025000: 61 20 73 74 72 69 6E 67 20 61 6C 70 68 61 6E 75 a string alphanu
025010: 6D 65 72 69 63 73 20 6F 72 20 61 20 73 74 72 69 merics or a stri
025020: 6E 67 20 6F 66 20 6D 61 72 6B 73 2C 20 74 61 62 ng of marks, tab
025030: 73 20 20 6F 72 20 73 70 6F 61 63 65 73 0D 0A 0D s or spoaces...
025040: 0A 09 54 68 65 20 63 75 72 73 6F 72 20 69 73 20 ..The cursor is
025050: 72 65 70 6F 73 69 74 69 6F 6E 65 64 2A 29 0D 0A repositioned*)..
025060: 56 41 52 09 63 68 3A 43 48 41 52 3B 0D 0A 09 62 VAR.ch:CHAR;...b
025070: 31 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 1:BOOLEAN;..BEGI
025080: 4E 0D 0A 09 46 69 6C 65 4C 69 6D 69 74 3A 3D 46 N...FileLimit:=F
025090: 41 4C 53 45 3B 0D 0A 09 49 46 20 42 61 63 6B 77 ALSE;...IF Backw
0250A0: 61 72 64 20 54 48 45 4E 20 0D 0A 09 09 4C 65 66 ard THEN ....Lef
0250B0: 74 3B 0D 0A 09 09 49 46 20 4E 4F 54 20 4D 6F 76 t;....IF NOT Mov
0250C0: 65 64 4F 4B 20 54 48 45 4E 20 52 45 54 55 52 4E edOK THEN RETURN
0250D0: 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 END;....END;...
0250E0: 63 68 3A 3D 47 65 74 43 75 72 72 65 6E 74 43 68 ch:=GetCurrentCh
0250F0: 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B ar(CurFilePtr^);
025100: 20 0D 0A 09 09 43 68 61 6E 67 65 4D 61 72 67 69 ....ChangeMargi
025110: 6E 28 2D 49 4E 54 45 47 45 52 28 43 75 72 72 65 n(-INTEGER(Curre
025120: 6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 29 0D 0A ntLeftMargin))..
025130: 09 09 45 4E 44 3B 0D 0A 09 54 68 69 73 78 3A 3D ..END;...Thisx:=
025140: 30 3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A 0;...ResetPos;..
025150: 09 4C 69 6E 65 50 6F 73 3A 3D 30 3B 0D 0A 09 53 .LinePos:=0;...S
025160: 65 74 4C 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 etLinePos(0);...
025170: 45 4E 44 20 44 65 6C 46 75 6C 6C 4C 69 6E 65 3B END DelFullLine;
025180: 0D 0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 ......PROCEDURE
025190: 53 63 72 6F 6C 6C 54 65 78 74 28 42 79 3A 49 4E ScrollText(By:IN
0251A0: 54 45 47 45 52 29 3B 0D 0A 0D 0A 28 2A 09 53 63 TEGER);....(*.Sc
0251B0: 72 6F 6C 6C 20 75 70 20 6F 6E 65 20 6C 69 6E 65 roll up one line
0251C0: 20 69 6E 20 74 68 65 20 66 69 6C 65 0D 0A 09 28 in the file...(
0251D0: 77 68 69 63 68 20 6D 65 61 6E 73 20 74 68 65 20 which means the
0251E0: 74 65 78 74 20 73 63 72 6F 6C 6C 73 20 64 6F 77 text scrolls dow
0251F0: 6E 20 2D 20 62 61 63 6B 77 61 72 64 73 20 74 6F n - backwards to
025200: 0D 0A 09 77 68 61 74 20 79 6F 75 20 6D 69 67 68 ...what you migh
025210: 74 20 74 68 69 6E 6B 20 61 74 20 66 69 72 73 74 t think at first
025220: 29 2A 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09 53 )*)....BEGIN...S
025230: 63 72 6F 6C 6C 57 69 6E 64 6F 77 28 53 74 61 72 crollWindow(Star
025240: 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 tofWindow,EndofW
025250: 69 6E 64 6F 77 2C 42 79 29 3B 0D 0A 09 45 4E 44 indow,By);...END
025260: 20 53 63 72 6F 6C 6C 54 65 78 74 3B 0D 0A 50 52 ScrollText;..PR
025270: 4F 43 45 44 55 52 45 20 53 63 72 6F 6C 6C 55 70 OCEDURE ScrollUp
025280: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 0D 0A 09 53 63 ;..BEGIN......Sc
025290: 72 6F 6C 6C 54 65 78 74 28 2D 31 29 3B 0D 0A 09 rollText(-1);...
0252A0: 49 46 20 4D 6F 76 65 64 4F 4B 20 54 48 45 4E 0D IF MovedOK THEN.
0252B0: 0A 09 09 49 46 20 54 68 69 73 79 3C 45 6E 64 6F ...IF Thisy<Endo
0252C0: 66 57 69 6E 64 6F 77 20 54 48 45 4E 20 0D 0A 09 fWindow THEN ...
0252D0: 09 09 49 4E 43 28 54 68 69 73 79 29 3B 0D 0A 09 ..INC(Thisy);...
0252E0: 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 09 45 ..ResetPos;....E
0252F0: 4C 53 45 20 09 0D 0A 09 09 09 4C 69 6E 65 4D 6F LSE ......LineMo
025300: 0A 09 52 65 44 72 61 77 6E 3A 3D 46 41 4C 53 45 ..ReDrawn:=FALSE
025310: 3B 0D 0A 09 69 3A 3D 4C 69 6E 65 50 6F 73 3B 0D ;...i:=LinePos;.
025320: 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 62 79 29 ..SetLinePos(by)
025330: 3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D 69 3B 0D ;...LinePos:=i;.
025340: 0A 09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 28 2A ..ChangePos;..(*
025350: 09 49 46 20 41 42 53 28 62 79 29 3E 31 20 54 48 .IF ABS(by)>1 TH
025360: 45 4E 0D 0A 09 09 52 65 44 69 73 70 6C 61 79 57 EN....ReDisplayW
025370: 69 6E 64 6F 77 3B 0D 0A 09 09 45 4E 44 3B 2A 29 indow;....END;*)
025380: 0D 0A 09 45 4E 44 20 4C 69 6E 65 4D 6F 76 65 3B ...END LineMove;
025390: 0D 0A 56 41 52 09 70 77 3A 50 6F 73 69 74 69 6F ..VAR.pw:Positio
0253A0: 6E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 57 72 n;..PROCEDURE Wr
0253B0: 69 74 65 50 61 72 74 4C 69 6E 65 28 63 3A 43 41 itePartLine(c:CA
0253C0: 52 44 49 4E 41 4C 29 3B 0D 0A 56 41 52 09 53 61 RDINAL);..VAR.Sa
0253D0: 76 65 78 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 vex:CARDINAL;..B
0253E0: 45 47 49 4E 0D 0A 09 47 65 74 50 6F 73 69 74 69 EGIN...GetPositi
0253F0: 6F 6E 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 70 on(CurFilePtr^,p
025400: 77 29 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 52 65 w);...LOOP....Re
025410: 61 64 4E 65 78 74 43 68 61 72 28 70 77 2C 63 68 adNextChar(pw,ch
025420: 29 3B 0D 0A 09 09 49 46 20 28 63 68 3D 30 64 78 );....IF (ch=0dx
025430: 29 20 4F 52 20 28 63 68 3D 31 61 78 29 20 4F 52 ) OR (ch=1ax) OR
025440: 20 28 63 68 3D 30 61 78 29 20 54 48 45 4E 20 45 (ch=0ax) THEN E
025450: 58 49 54 20 45 4E 44 3B 0D 0A 09 09 49 46 20 63 XIT END;....IF c
025460: 3E 3D 28 53 63 72 65 65 6E 57 69 64 74 68 2B 43 >=(ScreenWidth+C
025470: 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 6E urrentLeftMargin
025480: 29 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B ) THEN EXIT END;
025490: 0D 0A 09 09 49 46 20 63 68 3D 54 41 42 20 54 48 ....IF ch=TAB TH
0254A0: 45 4E 20 0D 0A 09 09 09 52 45 50 45 41 54 0D 0A EN .....REPEAT..
0254B0: 09 09 09 09 49 46 20 63 3E 43 75 72 72 65 6E 74 ....IF c>Current
0254C0: 4C 65 66 74 4D 61 72 67 69 6E 20 54 48 45 4E 20 LeftMargin THEN
0254D0: 57 72 69 74 65 28 27 20 27 29 20 45 4E 44 3B 20 Write(' ') END;
0254E0: 0D 0A 09 09 09 09 49 4E 43 28 63 29 3B 0D 0A 09 ......INC(c);...
0254F0: 09 09 09 55 4E 54 49 4C 20 49 41 4E 44 28 63 2C ...UNTIL IAND(c,
025500: 76 65 28 2D 31 29 3B 0D 0A 09 09 09 52 65 73 65 ve(-1);.....Rese
025510: 74 50 6F 73 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A tPos;.....END;..
025520: 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 53 63 72 ..END;...END Scr
025530: 6F 6C 6C 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 ollUp;..PROCEDUR
025540: 45 20 53 63 72 6F 6C 6C 44 6F 77 6E 3B 0D 0A 42 E ScrollDown;..B
025550: 45 47 49 4E 0D 0A 09 53 63 72 6F 6C 6C 54 65 78 EGIN...ScrollTex
025560: 74 28 31 29 3B 0D 0A 09 49 46 20 4D 6F 76 65 64 t(1);...IF Moved
025570: 4F 4B 20 54 48 45 4E 0D 0A 09 09 49 46 20 54 68 OK THEN....IF Th
025580: 69 73 79 3E 53 74 61 72 74 6F 66 57 69 6E 64 6F isy>StartofWindo
025590: 77 20 54 48 45 4E 20 0D 0A 09 09 09 44 45 43 28 w THEN .....DEC(
0255A0: 54 68 69 73 79 29 3B 0D 0A 09 09 45 4C 53 45 0D Thisy);....ELSE.
0255B0: 0A 09 09 09 4C 69 6E 65 4D 6F 76 65 28 31 29 3B ....LineMove(1);
0255C0: 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 .....END;....END
0255D0: 3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 ;...ResetPos;...
0255E0: 45 4E 44 20 53 63 72 6F 6C 6C 44 6F 77 6E 3B 0D END ScrollDown;.
0255F0: 0A 50 52 4F 43 45 44 55 52 45 20 4C 65 66 74 3B .PROCEDURE Left;
025600: 0D 0A 56 41 52 09 63 68 3A 43 48 41 52 3B 0D 0A ..VAR.ch:CHAR;..
025610: 09 53 61 76 65 4C 69 6E 65 4C 65 6E 3A 43 41 52 .SaveLineLen:CAR
025620: 44 49 4E 41 4C 3B 0D 0A 09 70 3A 50 6F 73 69 74 DINAL;...p:Posit
025630: 69 6F 6E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4D 6F ion;..BEGIN...Mo
025640: 76 65 64 4F 4B 3A 3D 54 52 55 45 3B 0D 0A 09 52 vedOK:=TRUE;...R
025650: 65 44 72 61 77 6E 3A 3D 46 41 4C 53 45 3B 0D 0A eDrawn:=FALSE;..
025660: 09 53 61 76 65 4C 69 6E 65 4C 65 6E 3A 3D 4C 69 .SaveLineLen:=Li
025670: 6E 65 4C 65 6E 3B 0D 0A 09 47 65 74 50 6F 73 69 neLen;...GetPosi
025680: 74 69 6F 6E 28 43 75 72 46 69 6C 65 50 74 72 5E tion(CurFilePtr^
025690: 2C 70 29 3B 0D 0A 09 49 46 20 4C 69 6E 65 50 6F ,p);...IF LinePo
0256A0: 73 3E 30 20 54 48 45 4E 0D 0A 09 09 62 3A 3D 42 s>0 THEN....b:=B
0256B0: 61 63 6B 4F 6E 65 43 68 61 72 28 43 75 72 46 69 ackOneChar(CurFi
0256C0: 6C 65 50 74 72 5E 29 3B 0D 0A 09 09 63 68 3A 3D lePtr^);....ch:=
0256D0: 47 65 74 43 75 72 72 65 6E 74 43 68 61 72 28 43 GetCurrentChar(C
0256E0: 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 09 urFilePtr^);....
0256F0: 49 46 20 28 43 75 72 72 65 6E 74 4C 65 66 74 4D IF (CurrentLeftM
025700: 37 29 3D 31 3B 0D 0A 09 09 45 4C 53 45 0D 0A 09 7)=1;....ELSE...
025710: 09 09 49 46 20 63 3E 43 75 72 72 65 6E 74 4C 65 ..IF c>CurrentLe
025720: 66 74 4D 61 72 67 69 6E 20 54 48 45 4E 20 57 72 ftMargin THEN Wr
025730: 69 74 65 28 63 68 29 20 45 4E 44 3B 0D 0A 09 09 ite(ch) END;....
025740: 09 49 4E 43 28 63 29 3B 0D 0A 09 09 09 45 4E 44 .INC(c);.....END
025750: 3B 0D 0A 09 09 45 4E 44 28 2A 4C 4F 4F 50 2A 29 ;....END(*LOOP*)
025760: 3B 0D 0A 09 53 61 76 65 78 3A 3D 54 68 69 73 78 ;...Savex:=Thisx
025770: 3B 0D 0A 09 49 46 20 63 3C 43 75 72 72 65 6E 74 ;...IF c<Current
025780: 4C 65 66 74 4D 61 72 67 69 6E 20 54 48 45 4E 20 LeftMargin THEN
025790: 54 68 69 73 78 3A 3D 30 3B 0D 0A 09 45 4C 53 45 Thisx:=0;...ELSE
0257A0: 20 54 68 69 73 78 3A 3D 63 2D 43 75 72 72 65 6E Thisx:=c-Curren
0257B0: 74 4C 65 66 74 4D 61 72 67 69 6E 20 45 4E 44 3B tLeftMargin END;
0257C0: 0D 0A 09 43 6C 65 61 72 52 65 73 74 4F 66 4C 69 ...ClearRestOfLi
0257D0: 6E 65 3B 0D 0A 09 54 68 69 73 78 3A 3D 53 61 76 ne;...Thisx:=Sav
0257E0: 65 78 3B 0D 0A 09 45 4E 44 20 57 72 69 74 65 50 ex;...END WriteP
0257F0: 61 72 74 4C 69 6E 65 3B 0D 0A 50 52 4F 43 45 44 artLine;..PROCED
025800: 55 52 45 20 57 72 69 74 65 4C 69 6E 65 3B 0D 0A URE WriteLine;..
025810: 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 50 61 72 BEGIN...WritePar
025820: 74 4C 69 6E 65 28 31 29 3B 0D 0A 09 45 4E 44 20 tLine(1);...END
025830: 57 72 69 74 65 4C 69 6E 65 3B 0D 0A 50 52 4F 43 WriteLine;..PROC
025840: 45 44 55 52 45 20 53 63 72 6F 6C 6C 57 69 6E 64 EDURE ScrollWind
025850: 6F 77 28 53 74 61 72 74 2C 45 6E 64 3A 43 41 52 ow(Start,End:CAR
025860: 44 49 4E 41 4C 3B 42 79 3A 49 4E 54 45 47 45 52 DINAL;By:INTEGER
025870: 29 3B 0D 0A 28 2A 09 53 63 72 6F 6C 6C 20 74 68 );..(*.Scroll th
025880: 65 20 77 69 6E 64 6F 77 20 62 79 20 72 65 64 69 e window by redi
025890: 73 70 6C 61 79 69 6E 67 20 61 6C 6C 20 6F 72 20 splaying all or
0258A0: 70 61 72 74 20 6F 66 20 69 74 0D 0A 0D 0A 09 53 part of it.....S
0258B0: 74 61 72 74 20 61 6E 64 20 45 6E 64 20 67 69 76 tart and End giv
0258C0: 65 20 61 63 74 75 61 6C 20 73 63 72 65 65 6E 20 e actual screen
0258D0: 70 6F 69 73 74 69 6F 6E 73 20 28 69 6E 20 79 29 poistions (in y)
0258E0: 20 66 6F 72 0D 0A 09 74 68 65 20 74 6F 70 20 61 for...the top a
0258F0: 6E 64 20 62 6F 74 74 6F 6D 20 6F 66 20 74 68 65 nd bottom of the
025900: 61 72 67 69 6E 3E 30 29 20 41 4E 44 20 28 54 68 argin>0) AND (Th
025910: 69 73 78 3D 30 29 20 54 48 45 4E 0D 0A 09 09 09 isx=0) THEN.....
025920: 43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 33 32 ChangeMargin(-32
025930: 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 44 );.....END;....D
025940: 45 43 28 4C 69 6E 65 50 6F 73 29 3B 0D 0A 09 09 EC(LinePos);....
025950: 49 46 20 4E 4F 54 20 52 65 44 72 61 77 6E 20 54 IF NOT ReDrawn T
025960: 48 45 4E 0D 0A 09 09 09 49 46 20 63 68 3C 3E 54 HEN.....IF ch<>T
025970: 41 42 20 54 48 45 4E 0D 0A 09 09 09 09 44 45 43 AB THEN......DEC
025980: 28 54 68 69 73 78 29 3B 0D 0A 09 09 09 09 52 65 (Thisx);......Re
025990: 73 65 74 50 6F 73 3B 0D 0A 09 09 09 45 4C 53 45 setPos;.....ELSE
0259A0: 0D 0A 09 09 09 09 4C 69 6E 65 4D 6F 76 65 28 30 ......LineMove(0
0259B0: 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 );......END;....
0259C0: 09 45 4E 44 3B 0D 0A 0D 0A 09 45 4C 53 45 0D 0A .END;.....ELSE..
0259D0: 09 09 54 68 69 73 78 3A 3D 31 30 32 33 3B 0D 0A ..Thisx:=1023;..
0259E0: 09 09 4C 69 6E 65 50 6F 73 3A 3D 31 30 32 33 3B ..LinePos:=1023;
0259F0: 0D 0A 09 09 55 70 3B 0D 0A 09 09 49 46 20 4E 4F ....Up;....IF NO
025A00: 54 20 4D 6F 76 65 64 4F 4B 20 54 48 45 4E 0D 0A T MovedOK THEN..
025A10: 09 09 09 4C 69 6E 65 50 6F 73 3A 3D 30 3B 0D 0A ...LinePos:=0;..
025A20: 09 09 09 4C 69 6E 65 4C 65 6E 3A 3D 53 61 76 65 ...LineLen:=Save
025A30: 4C 69 6E 65 4C 65 6E 3B 0D 0A 09 09 09 53 65 74 LineLen;.....Set
025A40: 50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69 6C 65 Position(CurFile
025A50: 50 74 72 5E 2C 70 29 3B 0D 0A 09 09 09 54 68 69 Ptr^,p);.....Thi
025A60: 73 78 3A 3D 30 3B 0D 0A 09 09 09 52 65 73 65 74 sx:=0;.....Reset
025A70: 50 6F 73 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 Pos;.....END;...
025A80: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4C 65 66 74 .END;...END Left
025A90: 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 ;....PROCEDURE R
025AA0: 69 67 68 74 3B 0D 0A 56 41 52 09 63 68 3A 43 48 ight;..VAR.ch:CH
025AB0: 41 52 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 4C AR;...i:CARDINAL
025AC0: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 63 68 3A 3D 47 ;..BEGIN...ch:=G
025AD0: 65 74 43 75 72 72 65 6E 74 43 68 61 72 28 43 75 etCurrentChar(Cu
025AE0: 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 49 46 rFilePtr^);...IF
025AF0: 20 63 68 3D 31 61 78 20 28 2A 6F 6E 20 45 4F 46 ch=1ax (*on EOF
025B00: 20 73 63 72 6F 6C 6C 2A 29 0D 0A 56 41 52 09 0D scroll*)..VAR..
025B10: 0A 09 70 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A 09 ..p:Position;...
025B20: 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 i:INTEGER;..BEGI
025B30: 4E 0D 0A 09 47 65 74 50 6F 73 69 74 69 6F 6E 28 N...GetPosition(
025B40: 43 75 72 46 69 6C 65 50 74 72 5E 2C 70 29 3B 0D CurFilePtr^,p);.
025B50: 0A 09 69 3A 3D 49 4E 54 45 47 45 52 28 53 74 61 ..i:=INTEGER(Sta
025B60: 72 74 29 2D 49 4E 54 45 47 45 52 28 54 68 69 73 rt)-INTEGER(This
025B70: 79 29 2B 42 79 3B 0D 0A 09 53 65 74 4C 69 6E 65 y)+By;...SetLine
025B80: 50 6F 73 28 69 29 3B 0D 0A 09 4D 6F 76 65 64 4F Pos(i);...MovedO
025B90: 4B 3A 3D 46 41 4C 53 45 3B 0D 0A 09 49 46 20 6C K:=FALSE;...IF l
025BA0: 69 6E 65 73 6D 6F 76 65 64 3C 3E 69 20 54 48 45 inesmoved<>i THE
025BB0: 4E 20 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 N RETURN END;...
025BC0: 4D 6F 76 65 64 4F 4B 3A 3D 54 52 55 45 3B 0D 0A MovedOK:=TRUE;..
025BD0: 09 69 3A 3D 53 74 61 72 74 3B 0D 0A 09 4C 4F 4F .i:=Start;...LOO
025BE0: 50 0D 0A 09 09 49 46 20 43 41 52 44 49 4E 41 4C P....IF CARDINAL
025BF0: 28 69 29 3E 45 6E 64 20 54 48 45 4E 20 45 58 49 (i)>End THEN EXI
025C00: 54 20 45 4E 44 3B 0D 0A 09 09 47 6F 74 6F 78 79 T END;....Gotoxy
025C10: 28 30 2C 69 29 3B 0D 0A 09 09 57 72 69 74 65 4C (0,i);....WriteL
025C20: 69 6E 65 3B 0D 0A 09 09 53 65 74 4C 69 6E 65 50 ine;....SetLineP
025C30: 6F 73 28 31 29 0D 0A 09 09 49 46 20 6C 69 6E 65 os(1)....IF line
025C40: 73 6D 6F 76 65 64 3C 3E 31 20 54 48 45 4E 20 45 smoved<>1 THEN E
025C50: 58 49 54 20 45 4E 44 3B 09 0D 0A 09 09 49 4E 43 XIT END;.....INC
025C60: 28 69 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53 (i);....END;...S
025C70: 65 74 50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69 etPosition(CurFi
025C80: 6C 65 50 74 72 5E 2C 70 29 3B 0D 0A 09 53 65 74 lePtr^,p);...Set
025C90: 4C 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 43 68 LinePos(0);...Ch
025CA0: 61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E 44 20 53 angePos;...END S
025CB0: 63 72 6F 6C 6C 57 69 6E 64 6F 77 3B 0D 0A 50 52 crollWindow;..PR
025CC0: 4F 43 45 44 55 52 45 20 52 65 6D 6F 76 65 4C 69 OCEDURE RemoveLi
025CD0: 6E 65 3B 0D 0A 0D 0A 28 2A 09 52 65 6D 6F 76 65 ne;....(*.Remove
025CE0: 20 61 20 6C 69 6E 65 20 66 72 6F 6D 20 74 68 65 a line from the
025CF0: 20 73 63 72 65 65 6E 20 61 6E 64 20 62 72 69 6E screen and brin
025D00: 20 63 68 61 72 2A 29 20 54 48 45 4E 20 52 45 54 char*) THEN RET
025D10: 55 52 4E 20 45 4E 44 3B 0D 0A 09 62 3A 3D 46 6F URN END;...b:=Fo
025D20: 72 77 61 72 64 4F 6E 65 43 68 61 72 28 43 75 72 rwardOneChar(Cur
025D30: 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 49 46 20 FilePtr^);...IF
025D40: 4C 69 6E 65 50 6F 73 3E 3D 4C 69 6E 65 4C 65 6E LinePos>=LineLen
025D50: 20 54 48 45 4E 0D 0A 09 09 54 68 69 73 78 3A 3D THEN....Thisx:=
025D60: 30 3B 0D 0A 09 09 4C 69 6E 65 50 6F 73 3A 3D 30 0;....LinePos:=0
025D70: 3B 0D 0A 09 09 62 3A 3D 42 61 63 6B 4F 6E 65 43 ;....b:=BackOneC
025D80: 68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 har(CurFilePtr^)
025D90: 3B 0D 0A 09 09 44 6F 77 6E 3B 0D 0A 0D 0A 09 45 ;....Down;.....E
025DA0: 4C 53 45 0D 0A 0D 0A 09 09 49 46 20 63 68 3D 54 LSE......IF ch=T
025DB0: 41 42 20 54 48 45 4E 20 69 3A 3D 39 20 45 4C 53 AB THEN i:=9 ELS
025DC0: 45 20 69 3A 3D 31 20 45 4E 44 3B 0D 0A 09 09 49 E i:=1 END;....I
025DD0: 46 20 28 54 68 69 73 78 2B 69 29 3E 3D 28 53 63 F (Thisx+i)>=(Sc
025DE0: 72 65 65 6E 57 69 64 74 68 2D 31 29 20 54 48 45 reenWidth-1) THE
025DF0: 4E 0D 0A 09 09 09 43 68 61 6E 67 65 4D 61 72 67 N.....ChangeMarg
025E00: 69 6E 28 33 32 29 3B 0D 0A 09 09 09 45 4E 44 3B in(32);.....END;
025E10: 0D 0A 09 09 49 4E 43 28 4C 69 6E 65 50 6F 73 29 ....INC(LinePos)
025E20: 3B 0D 0A 09 09 49 46 20 63 68 3C 3E 54 41 42 20 ;....IF ch<>TAB
025E30: 54 48 45 4E 0D 0A 09 09 09 49 4E 43 28 54 68 69 THEN.....INC(Thi
025E40: 73 78 29 3B 0D 0A 09 09 09 52 65 73 65 74 50 6F sx);.....ResetPo
025E50: 73 3B 0D 0A 09 09 45 4C 53 45 0D 0A 0D 0A 09 09 s;....ELSE......
025E60: 09 28 2A 69 66 20 6D 6F 76 65 73 20 6F 76 65 72 .(*if moves over
025E70: 20 74 61 62 73 20 61 72 65 20 73 6C 6F 77 2C 20 tabs are slow,
025E80: 72 65 70 6C 61 63 65 20 74 68 65 0D 0A 09 09 09 replace the.....
025E90: 20 20 72 65 70 65 61 74 65 64 20 6D 6F 76 65 73 repeated moves
025EA0: 20 72 69 67 68 74 20 62 79 20 61 20 67 6F 74 6F right by a goto
025EB0: 78 79 2A 29 0D 0A 09 09 09 54 68 69 73 78 3A 3D xy*).....Thisx:=
025EC0: 49 41 4E 44 28 54 68 69 73 78 2B 38 2C 30 66 66 IAND(Thisx+8,0ff
025ED0: 66 38 68 29 3B 0D 0A 09 09 09 52 65 73 65 74 50 f8h);.....ResetP
025EE0: 6F 73 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 os;.....END;....
025EF0: 45 4E 44 3B 0D 0A 09 45 4E 44 20 52 69 67 68 74 END;...END Right
025F00: 67 20 61 6E 6F 74 68 65 72 20 6C 69 6E 65 20 75 g another line u
025F10: 70 20 61 74 20 74 68 65 20 62 6F 74 74 6F 6D 0D p at the bottom.
025F20: 0A 0D 0A 09 54 68 69 73 79 20 67 69 76 65 73 20 ....Thisy gives
025F30: 6C 69 6E 65 20 74 6F 20 72 65 6D 6F 76 65 2A 29 line to remove*)
025F40: 0D 0A 56 41 52 09 70 3A 50 6F 73 69 74 69 6F 6E ..VAR.p:Position
025F50: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 6F 78 ;..BEGIN...Gotox
025F60: 79 28 30 2C 54 68 69 73 79 29 3B 0D 0A 09 53 63 y(0,Thisy);...Sc
025F70: 72 6F 6C 6C 57 69 6E 64 6F 77 28 54 68 69 73 79 rollWindow(Thisy
025F80: 2C 45 6E 64 6F 66 57 69 6E 64 6F 77 2C 31 29 3B ,EndofWindow,1);
025F90: 0D 0A 09 69 3A 3D 45 6E 64 6F 66 57 69 6E 64 6F ...i:=EndofWindo
025FA0: 77 2D 54 68 69 73 79 2B 31 3B 0D 0A 09 47 65 74 w-Thisy+1;...Get
025FB0: 50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69 6C 65 Position(CurFile
025FC0: 50 74 72 5E 2C 70 29 3B 0D 0A 09 53 65 74 4C 69 Ptr^,p);...SetLi
025FD0: 6E 65 50 6F 73 28 69 29 3B 0D 0A 09 49 46 20 6C nePos(i);...IF l
025FE0: 69 6E 65 73 6D 6F 76 65 64 3D 69 20 54 48 45 4E inesmoved=i THEN
025FF0: 0D 0A 09 09 4D 6F 76 65 64 4F 4B 3A 3D 54 52 55 ....MovedOK:=TRU
026000: 45 3B 0D 0A 09 09 47 6F 74 6F 78 79 28 30 2C 45 E;....Gotoxy(0,E
026010: 6E 64 6F 66 57 69 6E 64 6F 77 29 3B 0D 0A 09 09 ndofWindow);....
026020: 57 72 69 74 65 4C 69 6E 65 3B 0D 0A 09 09 45 4E WriteLine;....EN
026030: 44 3B 0D 0A 09 53 65 74 50 6F 73 69 74 69 6F 6E D;...SetPosition
026040: 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 70 29 3B (CurFilePtr^,p);
026050: 0D 0A 09 45 4E 44 20 52 65 6D 6F 76 65 4C 69 6E ...END RemoveLin
026060: 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65 e;..PROCEDURE De
026070: 6C 46 75 6C 6C 4C 69 6E 65 3B 0D 0A 42 45 47 49 lFullLine;..BEGI
026080: 4E 0D 0A 09 4D 61 72 6B 41 73 55 70 64 61 74 65 N...MarkAsUpdate
026090: 64 3B 0D 0A 09 52 65 6D 6F 76 65 4C 69 6E 65 3B d;...RemoveLine;
0260A0: 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 30 29 ...SetLinePos(0)
0260B0: 3B 0D 0A 09 44 65 6C 43 68 61 72 73 28 43 75 72 ;...DelChars(Cur
0260C0: 46 69 6C 65 50 74 72 5E 2C 4C 69 6E 65 4C 65 6E FilePtr^,LineLen
0260D0: 2B 32 29 3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D +2);...LinePos:=
0260E0: 30 3B 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 4C 0;...IF CurrentL
0260F0: 65 66 74 4D 61 72 67 69 6E 3E 30 20 54 48 45 4E eftMargin>0 THEN
026100: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
026110: 20 00 01 00 02 09 52 E5 20 00 C9 02 00 00 00 02 .....R. .......
026120: 20 00 C5 02 00 00 00 02 20 00 C1 02 00 00 00 02 ....... .......
026130: 20 00 C6 02 00 00 00 02 20 00 C2 02 00 00 00 02 ....... .......
026140: 20 00 C7 02 00 00 00 02 20 00 C3 02 00 00 00 02 ....... .......
026150: 20 00 C8 02 00 00 00 02 20 00 C4 02 00 00 00 02 ....... .......
026160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
026170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
026180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
026190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
026200: 61 6E 67 65 50 6F 73 3B 0D 0A 09 09 69 3A 3D 28 angePos;....i:=(
026210: 53 63 72 65 65 6E 44 65 70 74 68 2D 57 69 6E 64 ScreenDepth-Wind
026220: 6F 77 73 29 20 44 49 56 20 57 69 6E 64 6F 77 73 ows) DIV Windows
026230: 3B 0D 0A 09 09 53 74 61 72 74 6F 66 57 69 6E 64 ;....StartofWind
026240: 6F 77 3A 3D 28 69 2B 31 29 2A 28 43 75 72 72 65 ow:=(i+1)*(Curre
026250: 6E 74 57 69 6E 64 6F 77 2D 31 29 3B 0D 0A 09 45 ntWindow-1);...E
026260: 4C 53 45 20 0D 0A 09 09 53 74 61 72 74 6F 66 57 LSE ....StartofW
026270: 69 6E 64 6F 77 3A 3D 30 3B 0D 0A 09 09 69 3A 3D indow:=0;....i:=
026280: 30 20 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 0 ....END;...IF
026290: 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 3C 57 69 CurrentWindow<Wi
0262A0: 6E 64 6F 77 73 20 54 48 45 4E 0D 0A 09 09 45 6E ndows THEN....En
0262B0: 64 6F 66 57 69 6E 64 6F 77 3A 3D 53 74 61 72 74 dofWindow:=Start
0262C0: 6F 66 57 69 6E 64 6F 77 2B 69 2D 31 3B 0D 0A 09 ofWindow+i-1;...
0262D0: 45 4C 53 45 0D 0A 09 09 45 6E 64 6F 66 57 69 6E ELSE....EndofWin
0262E0: 64 6F 77 3A 3D 53 63 72 65 65 6E 44 65 70 74 68 dow:=ScreenDepth
0262F0: 2D 32 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 45 -2....END;.....E
026300: 4E 44 20 43 68 61 6E 67 65 57 69 6E 64 6F 77 3B ND ChangeWindow;
026310: 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 73 65 ..PROCEDURE Rese
026320: 74 53 63 72 65 65 6E 50 6F 73 3B 0D 0A 42 45 47 tScreenPos;..BEG
026330: 49 4E 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 57 IN...IF CurrentW
026340: 69 6E 64 6F 77 3C 3E 30 20 54 48 45 4E 0D 0A 09 indow<>0 THEN...
026350: 09 54 68 69 73 78 3A 3D 63 75 72 78 5B 43 75 72 .Thisx:=curx[Cur
026360: 72 65 6E 74 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 rentWindow];....
026370: 54 68 69 73 79 3A 3D 63 75 72 79 5B 43 75 72 72 Thisy:=cury[Curr
026380: 65 6E 74 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 52 entWindow];....R
026390: 65 73 65 74 50 6F 73 3B 0D 0A 09 09 45 4E 44 3B esetPos;....END;
0263A0: 0D 0A 09 45 4E 44 20 52 65 73 65 74 53 63 72 65 ...END ResetScre
0263B0: 65 6E 50 6F 73 3B 0D 0A 50 52 4F 43 45 44 55 52 enPos;..PROCEDUR
0263C0: 45 20 4D 6F 76 65 57 69 6E 64 6F 77 28 66 72 6F E MoveWindow(fro
0263D0: 6D 2C 74 6F 3A 43 41 52 44 49 4E 41 4C 29 3B 0D m,to:CARDINAL);.
0263E0: 0A 56 41 52 09 62 3A 42 4F 4F 4C 45 41 4E 3B 0D .VAR.b:BOOLEAN;.
0263F0: 0A 42 45 47 49 4E 0D 0A 09 63 75 72 78 5B 74 6F .BEGIN...curx[to
026400: 43 48 31 3A 41 52 52 41 59 5B 30 2E 2E 30 5D 20 CH1:ARRAY[0..0]
026410: 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E 0D OF CHAR;..BEGIN.
026420: 0A 09 43 48 31 5B 30 5D 3A 3D 47 65 74 43 75 72 ..CH1[0]:=GetCur
026430: 72 65 6E 74 43 68 61 72 28 43 75 72 46 69 6C 65 rentChar(CurFile
026440: 50 74 72 5E 29 3B 0D 0A 09 49 46 20 28 43 48 31 Ptr^);...IF (CH1
026450: 5B 30 5D 3C 3E 43 52 29 20 41 4E 44 20 28 63 68 [0]<>CR) AND (ch
026460: 3C 3E 43 52 29 20 41 4E 44 20 28 43 48 31 5B 30 <>CR) AND (CH1[0
026470: 5D 3C 3E 31 61 78 29 20 54 48 45 4E 0D 0A 09 09 ]<>1ax) THEN....
026480: 49 46 20 28 43 48 31 5B 30 5D 3C 3E 54 41 42 29 IF (CH1[0]<>TAB)
026490: 20 41 4E 44 20 28 63 68 3C 3E 54 41 42 29 20 54 AND (ch<>TAB) T
0264A0: 48 45 4E 0D 0A 09 09 09 44 65 6C 43 68 61 72 73 HEN.....DelChars
0264B0: 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 31 29 3B (CurFilePtr^,1);
0264C0: 0D 0A 09 09 09 43 48 31 5B 30 5D 3A 3D 63 68 3B .....CH1[0]:=ch;
0264D0: 0D 0A 09 09 09 49 6E 73 43 68 61 72 73 28 43 75 .....InsChars(Cu
0264E0: 72 46 69 6C 65 50 74 72 5E 2C 43 48 31 2C 31 29 rFilePtr^,CH1,1)
0264F0: 3B 0D 0A 09 09 09 62 3A 3D 42 61 63 6B 4F 6E 65 ;.....b:=BackOne
026500: 43 68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E Char(CurFilePtr^
026510: 29 3B 0D 0A 09 09 09 57 72 69 74 65 28 63 68 29 );.....Write(ch)
026520: 3B 0D 0A 09 09 09 52 65 73 65 74 50 6F 73 3B 0D ;.....ResetPos;.
026530: 0A 09 09 09 52 69 67 68 74 3B 0D 0A 09 09 09 4D ....Right;.....M
026540: 61 72 6B 41 73 55 70 64 61 74 65 64 3B 0D 0A 09 arkAsUpdated;...
026550: 09 45 4C 53 45 0D 0A 09 09 09 44 65 6C 4F 6E 65 .ELSE.....DelOne
026560: 43 68 61 72 3B 0D 0A 09 09 09 49 6E 73 4F 6E 65 Char;.....InsOne
026570: 43 68 61 72 28 63 68 29 3B 0D 0A 09 09 09 45 4E Char(ch);.....EN
026580: 44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 49 6E 73 D;...ELSE....Ins
026590: 4F 6E 65 43 68 61 72 28 63 68 29 3B 0D 0A 09 09 OneChar(ch);....
0265A0: 45 4E 44 3B 0D 0A 09 45 4E 44 20 4F 76 65 72 57 END;...END OverW
0265B0: 72 69 74 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 rite;..PROCEDURE
0265C0: 20 55 70 3B 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A Up;.....BEGIN..
0265D0: 09 49 46 20 54 68 69 73 79 3C 3D 53 74 61 72 74 .IF Thisy<=Start
0265E0: 6F 66 57 69 6E 64 6F 77 20 54 48 45 4E 0D 0A 09 ofWindow THEN...
0265F0: 09 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F 77 .ReDisplayWindow
026600: 0D 0A 09 62 31 3A 3D 41 6C 70 68 61 4E 75 6D 28 ...b1:=AlphaNum(
026610: 63 68 29 3B 0D 0A 09 49 46 20 63 68 3D 45 4F 46 ch);...IF ch=EOF
026620: 20 54 48 45 4E 20 52 45 54 55 52 4E 20 45 4E 44 THEN RETURN END
026630: 3B 0D 0A 09 52 45 50 45 41 54 0D 0A 09 09 49 46 ;...REPEAT....IF
026640: 20 44 65 6C 65 74 65 20 54 48 45 4E 20 44 65 6C Delete THEN Del
026650: 4F 6E 65 43 68 61 72 20 45 4E 44 3B 0D 0A 09 09 OneChar END;....
026660: 49 46 20 42 61 63 6B 77 61 72 64 20 20 20 54 48 IF Backward TH
026670: 45 4E 20 4C 65 66 74 0D 0A 09 09 45 4C 53 49 46 EN Left....ELSIF
026680: 20 4E 4F 54 20 44 65 6C 65 74 65 20 54 48 45 4E NOT Delete THEN
026690: 20 52 69 67 68 74 20 45 4E 44 3B 0D 0A 09 09 63 Right END;....c
0266A0: 68 3A 3D 47 65 74 43 75 72 72 65 6E 74 43 68 61 h:=GetCurrentCha
0266B0: 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D r(CurFilePtr^);.
0266C0: 0A 09 09 55 4E 54 49 4C 20 20 28 62 31 3C 3E 41 ...UNTIL (b1<>A
0266D0: 6C 70 68 61 4E 75 6D 28 63 68 29 29 20 4F 52 20 lphaNum(ch)) OR
0266E0: 46 69 6C 65 4C 69 6D 69 74 20 4F 52 20 28 63 68 FileLimit OR (ch
0266F0: 3D 45 4F 46 29 3B 0D 0A 09 49 46 20 42 61 63 6B =EOF);...IF Back
026700: 77 61 72 64 20 41 4E 44 20 4E 4F 54 20 46 69 6C ward AND NOT Fil
026710: 65 4C 69 6D 69 74 20 54 48 45 4E 20 52 69 67 68 eLimit THEN Righ
026720: 74 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 46 69 6E t END;...END Fin
026730: 64 57 6F 72 64 3B 0D 0A 50 52 4F 43 45 44 55 52 dWord;..PROCEDUR
026740: 45 20 44 6F 77 6E 3B 0D 0A 42 45 47 49 4E 0D 0A E Down;..BEGIN..
026750: 09 4C 69 6E 65 4D 6F 76 65 28 31 29 3B 0D 0A 09 .LineMove(1);...
026760: 46 69 6C 65 4C 69 6D 69 74 3A 3D 6C 69 6E 65 73 FileLimit:=lines
026770: 6D 6F 76 65 64 3D 30 3B 0D 0A 09 49 46 20 6C 69 moved=0;...IF li
026780: 6E 65 73 6D 6F 76 65 64 3E 30 20 54 48 45 4E 0D nesmoved>0 THEN.
026790: 0A 09 09 49 46 20 28 54 68 69 73 79 3E 3D 45 6E ...IF (Thisy>=En
0267A0: 64 6F 66 57 69 6E 64 6F 77 29 20 54 48 45 4E 0D dofWindow) THEN.
0267B0: 0A 09 09 09 52 65 44 69 73 70 6C 61 79 57 69 6E ....ReDisplayWin
0267C0: 64 6F 77 3B 0D 0A 09 09 45 4C 53 49 46 20 20 4E dow;....ELSIF N
0267D0: 4F 54 20 52 65 44 72 61 77 6E 20 54 48 45 4E 20 OT ReDrawn THEN
0267E0: 0D 0A 09 09 09 49 4E 43 28 54 68 69 73 79 29 3B .....INC(Thisy);
0267F0: 0D 0A 09 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A .....ResetPos;..
026800: 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C 69 6E 65 ;....END;...Line
026810: 4D 6F 76 65 28 2D 31 29 3B 0D 0A 09 46 69 6C 65 Move(-1);...File
026820: 4C 69 6D 69 74 3A 3D 6C 69 6E 65 73 6D 6F 76 65 Limit:=linesmove
026830: 64 3D 30 3B 0D 0A 09 49 46 20 28 6C 69 6E 65 73 d=0;...IF (lines
026840: 6D 6F 76 65 64 3C 3E 30 29 20 41 4E 44 20 28 54 moved<>0) AND (T
026850: 68 69 73 79 3E 53 74 61 72 74 6F 66 57 69 6E 64 hisy>StartofWind
026860: 6F 77 29 20 41 4E 44 20 4E 4F 54 20 52 65 44 72 ow) AND NOT ReDr
026870: 61 77 6E 20 54 48 45 4E 20 0D 0A 09 09 44 45 43 awn THEN ....DEC
026880: 28 54 68 69 73 79 29 3B 0D 0A 09 09 52 65 73 65 (Thisy);....Rese
026890: 74 50 6F 73 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 tPos;....END;...
0268A0: 45 4E 44 20 55 70 3B 0D 0A 50 52 4F 43 45 44 55 END Up;..PROCEDU
0268B0: 52 45 20 55 70 53 63 72 65 65 6E 3B 0D 0A 42 45 RE UpScreen;..BE
0268C0: 47 49 4E 0D 0A 09 4C 69 6E 65 4D 6F 76 65 28 31 GIN...LineMove(1
0268D0: 2D 49 4E 54 45 47 45 52 28 4C 69 6E 65 73 50 65 -INTEGER(LinesPe
0268E0: 72 57 69 6E 64 6F 77 29 29 3B 0D 0A 09 52 65 44 rWindow));...ReD
0268F0: 69 73 70 6C 61 79 57 69 6E 64 6F 77 3B 0D 0A 09 isplayWindow;...
026900: 45 4E 44 20 55 70 53 63 72 65 65 6E 3B 0D 0A 50 END UpScreen;..P
026910: 52 4F 43 45 44 55 52 45 20 44 6F 77 6E 53 63 72 ROCEDURE DownScr
026920: 65 65 6E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4C 69 een;..BEGIN...Li
026930: 6E 65 4D 6F 76 65 28 4C 69 6E 65 73 50 65 72 57 neMove(LinesPerW
026940: 69 6E 64 6F 77 2D 31 29 3B 0D 0A 09 52 65 44 69 indow-1);...ReDi
026950: 73 70 6C 61 79 57 69 6E 64 6F 77 3B 0D 0A 09 45 splayWindow;...E
026960: 4E 44 20 44 6F 77 6E 53 63 72 65 65 6E 3B 0D 0A ND DownScreen;..
026970: 50 52 4F 43 45 44 55 52 45 20 54 6F 70 3B 0D 0A PROCEDURE Top;..
026980: 42 45 47 49 4E 0D 0A 09 4C 69 6E 65 50 6F 73 3A BEGIN...LinePos:
026990: 3D 30 3B 0D 0A 09 4C 69 6E 65 4D 6F 76 65 28 2D =0;...LineMove(-
0269A0: 31 36 37 33 36 29 3B 0D 0A 09 52 65 44 69 73 70 16736);...ReDisp
0269B0: 6C 61 79 57 69 6E 64 6F 77 3B 0D 0A 09 45 4E 44 layWindow;...END
0269C0: 20 54 6F 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 Top;..PROCEDURE
0269D0: 20 42 6F 74 74 6F 6D 3B 0D 0A 42 45 47 49 4E 0D Bottom;..BEGIN.
0269E0: 0A 09 4C 69 6E 65 50 6F 73 3A 3D 39 39 39 3B 0D ..LinePos:=999;.
0269F0: 0A 09 4C 69 6E 65 4D 6F 76 65 28 31 36 37 33 36 ..LineMove(16736
026A00: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 ...END;....END;
026A10: 0D 0A 09 45 4E 44 20 44 6F 77 6E 3B 0D 0A 0D 0A ...END Down;....
026A20: 50 52 4F 43 45 44 55 52 45 20 52 65 64 6F 4C 69 PROCEDURE RedoLi
026A30: 6E 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 ne;..BEGIN...Got
026A40: 6F 78 79 28 30 2C 54 68 69 73 79 29 3B 0D 0A 09 oxy(0,Thisy);...
026A50: 53 65 74 4C 69 6E 65 50 6F 73 28 30 29 3B 0D 0A SetLinePos(0);..
026A60: 09 57 72 69 74 65 4C 69 6E 65 3B 0D 0A 09 43 68 .WriteLine;...Ch
026A70: 61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E 44 20 52 angePos;...END R
026A80: 65 64 6F 4C 69 6E 65 3B 0D 0A 0D 0A 50 52 4F 43 edoLine;....PROC
026A90: 45 44 55 52 45 20 49 6E 73 4F 6E 65 43 68 61 72 EDURE InsOneChar
026AA0: 28 63 68 3A 43 48 41 52 29 3B 0D 0A 56 41 52 09 (ch:CHAR);..VAR.
026AB0: 43 48 31 3A 41 52 52 41 59 5B 30 2E 2E 30 5D 20 CH1:ARRAY[0..0]
026AC0: 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E 0D OF CHAR;..BEGIN.
026AD0: 0A 09 52 65 44 72 61 77 6E 3A 3D 46 41 4C 53 45 ..ReDrawn:=FALSE
026AE0: 3B 0D 0A 09 4D 61 72 6B 41 73 55 70 64 61 74 65 ;...MarkAsUpdate
026AF0: 64 3B 0D 0A 09 43 48 31 5B 30 5D 3A 3D 63 68 3B d;...CH1[0]:=ch;
026B00: 0D 0A 09 49 6E 73 43 68 61 72 73 28 43 75 72 46 ...InsChars(CurF
026B10: 69 6C 65 50 74 72 5E 2C 43 48 31 2C 31 29 3B 0D ilePtr^,CH1,1);.
026B20: 0A 09 49 4E 43 28 4C 69 6E 65 50 6F 73 29 3B 0D ..INC(LinePos);.
026B30: 0A 09 49 4E 43 28 4C 69 6E 65 4C 65 6E 29 3B 0D ..INC(LineLen);.
026B40: 0A 09 49 46 20 63 68 3D 43 52 20 54 48 45 4E 0D ..IF ch=CR THEN.
026B50: 0A 09 09 43 48 31 5B 30 5D 3A 3D 4C 46 3B 0D 0A ...CH1[0]:=LF;..
026B60: 09 09 49 6E 73 43 68 61 72 73 28 43 75 72 46 69 ..InsChars(CurFi
026B70: 6C 65 50 74 72 5E 2C 43 48 31 2C 31 29 3B 0D 0A lePtr^,CH1,1);..
026B80: 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 09 43 ..ResetPos;....C
026B90: 6C 65 61 72 52 65 73 74 4F 66 4C 69 6E 65 3B 0D learRestOfLine;.
026BA0: 0A 09 09 49 46 20 54 68 69 73 79 3E 3D 45 6E 64 ...IF Thisy>=End
026BB0: 6F 66 57 69 6E 64 6F 77 20 54 48 45 4E 0D 0A 09 ofWindow THEN...
026BC0: 09 09 53 63 72 6F 6C 6C 54 65 78 74 28 30 29 3B ..ScrollText(0);
026BD0: 0D 0A 09 09 09 44 45 43 28 54 68 69 73 79 29 3B .....DEC(Thisy);
026BE0: 0D 0A 09 09 45 4C 53 45 20 20 20 20 53 63 72 6F ....ELSE Scro
026BF0: 6C 6C 57 69 6E 64 6F 77 28 54 68 69 73 79 2B 31 llWindow(Thisy+1
026C00: 29 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 57 69 );...ReDisplayWi
026C10: 6E 64 6F 77 3B 0D 0A 09 45 4E 44 20 42 6F 74 74 ndow;...END Bott
026C20: 6F 6D 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 om;..PROCEDURE F
026C30: 61 72 4C 65 66 74 3B 0D 0A 42 45 47 49 4E 0D 0A arLeft;..BEGIN..
026C40: 09 49 46 20 43 75 72 72 65 6E 74 4C 65 66 74 4D .IF CurrentLeftM
026C50: 61 72 67 69 6E 3E 30 20 54 48 45 4E 20 0D 0A 09 argin>0 THEN ...
026C60: 09 43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 49 .ChangeMargin(-I
026C70: 4E 54 45 47 45 52 28 43 75 72 72 65 6E 74 4C 65 NTEGER(CurrentLe
026C80: 66 74 4D 61 72 67 69 6E 29 29 0D 0A 09 09 45 4E ftMargin))....EN
026C90: 44 3B 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 D;...SetLinePos(
026CA0: 30 29 3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D 30 0);...LinePos:=0
026CB0: 3B 0D 0A 09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A ;...ChangePos;..
026CC0: 09 45 4E 44 20 46 61 72 4C 65 66 74 3B 0D 0A 50 .END FarLeft;..P
026CD0: 52 4F 43 45 44 55 52 45 20 46 61 72 52 69 67 68 ROCEDURE FarRigh
026CE0: 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 53 65 74 4C t;..BEGIN...SetL
026CF0: 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 4C 69 6E inePos(0);...Lin
026D00: 65 50 6F 73 3A 3D 4C 69 6E 65 4C 65 6E 3B 0D 0A ePos:=LineLen;..
026D10: 09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E .ChangePos;...EN
026D20: 44 20 46 61 72 52 69 67 68 74 3B 0D 0A 50 52 4F D FarRight;..PRO
026D30: 43 45 44 55 52 45 20 43 68 61 6E 67 65 57 69 6E CEDURE ChangeWin
026D40: 64 6F 77 28 4E 6F 3A 49 4E 54 45 47 45 52 29 3B dow(No:INTEGER);
026D50: 0D 0A 56 41 52 09 62 3A 42 4F 4F 4C 45 41 4E 3B ..VAR.b:BOOLEAN;
026D60: 0D 0A 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A ...i:CARDINAL;..
026D70: 42 45 47 49 4E 0D 0A 09 49 46 20 43 75 72 72 65 BEGIN...IF Curre
026D80: 6E 74 57 69 6E 64 6F 77 3C 3E 30 20 54 48 45 4E ntWindow<>0 THEN
026D90: 0D 0A 09 09 63 75 72 78 5B 43 75 72 72 65 6E 74 ....curx[Current
026DA0: 57 69 6E 64 6F 77 5D 3A 3D 54 68 69 73 78 3B 0D Window]:=Thisx;.
026DB0: 0A 09 09 63 75 72 79 5B 43 75 72 72 65 6E 74 57 ...cury[CurrentW
026DC0: 69 6E 64 6F 77 5D 3A 3D 54 68 69 73 79 3B 0D 0A indow]:=Thisy;..
026DD0: 09 09 62 3A 3D 4C 61 62 65 6C 4F 70 28 43 75 72 ..b:=LabelOp(Cur
026DE0: 46 69 6C 65 50 74 72 5E 2C 54 52 55 45 2C 43 48 FilePtr^,TRUE,CH
026DF0: 52 28 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 29 R(CurrentWindow)
026E00: 2C 45 6E 64 6F 66 57 69 6E 64 6F 77 2C 2D 31 29 ,EndofWindow,-1)
026E10: 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 4E ;.....END;....IN
026E20: 43 28 54 68 69 73 79 29 3B 0D 0A 09 09 52 65 73 C(Thisy);....Res
026E30: 65 74 50 6F 73 3B 0D 0A 09 09 4C 69 6E 65 50 6F etPos;....LinePo
026E40: 73 3A 3D 30 3B 0D 0A 09 09 52 65 64 6F 4C 69 6E s:=0;....RedoLin
026E50: 65 3B 0D 0A 09 45 4C 53 49 46 20 63 68 3D 54 41 e;...ELSIF ch=TA
026E60: 42 20 54 48 45 4E 20 52 65 64 6F 4C 69 6E 65 09 B THEN RedoLine.
026E70: 0D 0A 09 45 4C 53 45 0D 0A 09 09 49 46 20 54 68 ...ELSE....IF Th
026E80: 69 73 78 3E 3D 28 53 63 72 65 65 6E 57 69 64 74 isx>=(ScreenWidt
026E90: 68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 43 68 h-1) THEN.....Ch
026EA0: 61 6E 67 65 4D 61 72 67 69 6E 28 33 32 29 3B 0D angeMargin(32);.
026EB0: 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 20 4E ....END;....IF N
026EC0: 4F 54 20 52 65 44 72 61 77 6E 20 54 48 45 4E 0D OT ReDrawn THEN.
026ED0: 0A 09 09 09 49 46 20 4C 69 6E 65 50 6F 73 3C 4C ....IF LinePos<L
026EE0: 69 6E 65 4C 65 6E 20 54 48 45 4E 0D 0A 09 09 09 ineLen THEN.....
026EF0: 09 62 3A 3D 42 61 63 6B 4F 6E 65 43 68 61 72 28 .b:=BackOneChar(
026F00: 43 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 CurFilePtr^);...
026F10: 09 09 09 57 72 69 74 65 50 61 72 74 4C 69 6E 65 ...WritePartLine
026F20: 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 (CurrentLeftMarg
026F30: 69 6E 2B 54 68 69 73 78 2B 31 29 3B 0D 0A 09 09 in+Thisx+1);....
026F40: 09 09 49 4E 43 28 54 68 69 73 78 29 3B 0D 0A 09 ..INC(Thisx);...
026F50: 09 09 09 62 3A 3D 46 6F 72 77 61 72 64 4F 6E 65 ...b:=ForwardOne
026F60: 43 68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E Char(CurFilePtr^
026F70: 29 3B 09 09 09 09 0D 0A 09 09 09 45 4C 53 45 0D );.........ELSE.
026F80: 0A 09 09 09 09 57 72 69 74 65 28 63 68 29 3B 0D .....Write(ch);.
026F90: 0A 09 09 09 09 49 4E 43 28 54 68 69 73 78 29 3B .....INC(Thisx);
026FA0: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 ......END;.....E
026FB0: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 65 ND;....END;...Re
026FC0: 73 65 74 50 6F 73 3B 0D 0A 09 45 4E 44 20 49 6E setPos;...END In
026FD0: 73 4F 6E 65 43 68 61 72 3B 0D 0A 50 52 4F 43 45 sOneChar;..PROCE
026FE0: 44 55 52 45 20 44 65 6C 4F 6E 65 43 68 61 72 3B DURE DelOneChar;
026FF0: 0D 0A 42 45 47 49 4E 0D 0A 09 4D 61 72 6B 41 73 ..BEGIN...MarkAs
027000: 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 43 75 72 );....END;...Cur
027010: 72 65 6E 74 57 69 6E 64 6F 77 3A 3D 4E 6F 3B 0D rentWindow:=No;.
027020: 0A 09 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 57 .....IF CurrentW
027030: 69 6E 64 6F 77 3E 57 69 6E 64 6F 77 73 20 54 48 indow>Windows TH
027040: 45 4E 20 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 EN CurrentWindow
027050: 3A 3D 57 69 6E 64 6F 77 73 20 45 4E 44 3B 0D 0A :=Windows END;..
027060: 09 49 46 20 43 75 72 72 65 6E 74 57 69 6E 64 6F .IF CurrentWindo
027070: 77 3C 3E 30 20 54 48 45 4E 0D 0A 09 09 28 2A 73 w<>0 THEN....(*s
027080: 65 74 20 75 70 20 61 20 70 6F 69 6E 74 65 72 20 et up a pointer
027090: 74 6F 20 74 68 65 20 63 75 72 72 65 6E 74 20 66 to the current f
0270A0: 69 6C 65 20 74 6F 20 73 61 76 65 20 69 6E 64 65 ile to save inde
0270B0: 78 20 63 61 6C 63 75 6C 61 74 69 6F 6E 0D 0A 09 x calculation...
0270C0: 09 20 20 65 76 65 72 79 20 74 69 6D 65 20 74 68 . every time th
0270D0: 65 20 66 69 6C 65 20 69 73 20 72 65 66 65 72 65 e file is refere
0270E0: 6E 63 65 64 2A 29 0D 0A 09 09 43 75 72 72 65 6E nced*)....Curren
0270F0: 74 46 69 6C 65 3A 3D 57 69 6E 64 6F 77 46 69 6C tFile:=WindowFil
027100: 65 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D e[CurrentWindow]
027110: 3B 0D 0A 09 09 43 75 72 46 69 6C 65 50 74 72 3A ;....CurFilePtr:
027120: 3D 50 45 64 69 74 46 69 6C 65 28 41 44 52 28 46 =PEditFile(ADR(F
027130: 69 6C 65 73 5B 43 75 72 72 65 6E 74 46 69 6C 65 iles[CurrentFile
027140: 5D 29 29 3B 0D 0A 09 09 62 3A 3D 4C 61 62 65 6C ]));....b:=Label
027150: 4F 70 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 46 Op(CurFilePtr^,F
027160: 41 4C 53 45 2C 43 48 52 28 43 75 72 72 65 6E 74 ALSE,CHR(Current
027170: 57 69 6E 64 6F 77 29 29 3B 0D 0A 09 09 54 68 69 Window));....Thi
027180: 73 78 3A 3D 63 75 72 78 5B 43 75 72 72 65 6E 74 sx:=curx[Current
027190: 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 54 68 69 73 Window];....This
0271A0: 79 3A 3D 63 75 72 79 5B 43 75 72 72 65 6E 74 57 y:=cury[CurrentW
0271B0: 69 6E 64 6F 77 5D 3B 0D 0A 09 09 43 75 72 72 65 indow];....Curre
0271C0: 6E 74 4C 65 66 74 4D 61 72 67 69 6E 3A 3D 4C 65 ntLeftMargin:=Le
0271D0: 66 74 4D 61 72 67 69 6E 5B 43 75 72 72 65 6E 74 ftMargin[Current
0271E0: 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 53 65 74 4C Window];....SetL
0271F0: 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 09 43 68 inePos(0);....Ch
027200: 55 70 64 61 74 65 64 3B 0D 0A 09 63 68 3A 3D 47 Updated;...ch:=G
027210: 65 74 43 75 72 72 65 6E 74 43 68 61 72 28 43 75 etCurrentChar(Cu
027220: 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 49 46 rFilePtr^);...IF
027230: 20 4C 69 6E 65 50 6F 73 3D 4C 69 6E 65 4C 65 6E LinePos=LineLen
027240: 20 54 48 45 4E 20 69 3A 3D 32 0D 0A 09 45 4C 53 THEN i:=2...ELS
027250: 45 20 69 3A 3D 31 20 45 4E 44 3B 0D 0A 09 44 65 E i:=1 END;...De
027260: 6C 43 68 61 72 73 28 43 75 72 46 69 6C 65 50 74 lChars(CurFilePt
027270: 72 5E 2C 69 29 3B 0D 0A 09 49 46 20 69 3D 32 20 r^,i);...IF i=2
027280: 54 48 45 4E 0D 0A 09 09 49 46 20 54 68 69 73 79 THEN....IF Thisy
027290: 3C 45 6E 64 6F 66 57 69 6E 64 6F 77 20 54 48 45 <EndofWindow THE
0272A0: 4E 20 0D 0A 09 09 09 49 4E 43 28 54 68 69 73 79 N .....INC(Thisy
0272B0: 29 3B 0D 0A 09 09 09 69 3A 3D 4C 69 6E 65 50 6F );.....i:=LinePo
0272C0: 73 3B 0D 0A 09 09 09 52 65 6D 6F 76 65 4C 69 6E s;.....RemoveLin
0272D0: 65 3B 0D 0A 09 09 09 4C 69 6E 65 50 6F 73 3A 3D e;.....LinePos:=
0272E0: 69 3B 0D 0A 09 09 09 44 45 43 28 54 68 69 73 79 i;.....DEC(Thisy
0272F0: 29 3B 0D 0A 09 09 09 52 65 64 6F 4C 69 6E 65 3B );.....RedoLine;
027300: 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 45 4C 53 45 .....END;...ELSE
027310: 09 0D 0A 09 09 44 45 43 28 4C 69 6E 65 4C 65 6E .....DEC(LineLen
027320: 29 3B 0D 0A 09 09 57 72 69 74 65 50 61 72 74 4C );....WritePartL
027330: 69 6E 65 28 43 75 72 72 65 6E 74 4C 65 66 74 4D ine(CurrentLeftM
027340: 61 72 67 69 6E 2B 54 68 69 73 78 2B 31 29 3B 0D argin+Thisx+1);.
027350: 0A 09 09 45 4E 44 3B 0D 0A 28 2A 09 45 4C 53 49 ...END;..(*.ELSI
027360: 46 20 63 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 F ch=TAB THEN...
027370: 09 52 65 64 6F 4C 69 6E 65 0D 0A 09 45 4C 53 45 .RedoLine...ELSE
027380: 0D 0A 09 09 4C 69 6E 65 4C 65 6E 3A 3D 4C 69 6E ....LineLen:=Lin
027390: 65 4C 65 6E 2D 31 3B 0D 0A 09 09 44 6F 53 63 72 eLen-1;....DoScr
0273A0: 65 65 6E 43 68 61 6E 67 65 28 44 65 6C 43 68 61 eenChange(DelCha
0273B0: 72 29 3B 0D 0A 09 09 45 4E 44 3B 2A 29 0D 0A 09 r);....END;*)...
0273C0: 52 65 73 65 74 50 6F 73 3B 0D 0A 09 45 4E 44 20 ResetPos;...END
0273D0: 44 65 6C 4F 6E 65 43 68 61 72 3B 0D 0A 50 52 4F DelOneChar;..PRO
0273E0: 43 45 44 55 52 45 20 4F 76 65 72 57 72 69 74 65 CEDURE OverWrite
0273F0: 28 63 68 3A 43 48 41 52 29 3B 0D 0A 56 41 52 09 (ch:CHAR);..VAR.
027400: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
027410: 21 00 01 00 02 09 52 E5 21 00 C9 02 00 00 00 02 !.....R.!.......
027420: 21 00 C5 02 00 00 00 02 21 00 C1 02 00 00 00 02 !.......!.......
027430: 21 00 C6 02 00 00 00 02 21 00 C2 02 00 00 00 02 !.......!.......
027440: 21 00 C7 02 00 00 00 02 21 00 C3 02 00 00 00 02 !.......!.......
027450: 21 00 C8 02 00 00 00 02 21 00 C4 02 00 00 00 02 !.......!.......
027460: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
027470: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
027480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
027490: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
027500: 69 6E 5B 77 69 6E 64 6F 77 5D 3B 0D 0A 09 73 74 in[window];...st
027510: 61 72 74 6C 69 6E 65 3A 3D 28 49 4E 54 45 47 45 artline:=(INTEGE
027520: 52 28 4C 69 6E 65 73 50 65 72 57 69 6E 64 6F 77 R(LinesPerWindow
027530: 29 2B 31 29 2A 28 77 69 6E 64 6F 77 2D 31 29 3B )+1)*(window-1);
027540: 0D 0A 09 47 6F 74 6F 78 79 28 30 2C 73 74 61 72 ...Gotoxy(0,star
027550: 74 6C 69 6E 65 29 3B 0D 0A 0D 0A 09 28 2A 66 69 tline);.....(*fi
027560: 72 73 74 20 6C 69 6E 65 20 6F 66 20 74 68 69 73 rst line of this
027570: 20 77 69 6E 64 6F 77 2A 29 0D 0A 09 69 3A 3D 30 window*)...i:=0
027580: 3B 09 28 2A 6C 69 6E 65 20 77 69 74 68 69 6E 20 ;.(*line within
027590: 77 69 6E 64 6F 77 2A 29 0D 0A 09 6B 3A 3D 4C 69 window*)...k:=Li
0275A0: 6E 65 73 50 65 72 57 69 6E 64 6F 77 20 44 49 56 nesPerWindow DIV
0275B0: 20 32 3B 0D 0A 09 52 65 74 72 6C 69 6E 65 28 66 2;...Retrline(f
0275C0: 2C 6C 65 6E 2C 63 68 61 72 73 69 6E 2C 70 6F 73 ,len,charsin,pos
0275D0: 2C 6D 6F 76 65 64 2C 2D 6B 29 3B 0D 0A 09 0D 0A ,moved,-k);.....
0275E0: 09 4C 4F 4F 50 0D 0A 0D 0A 09 09 28 2A 63 68 65 .LOOP......(*che
0275F0: 63 6B 20 69 66 20 74 68 69 73 20 69 73 20 74 68 ck if this is th
027600: 65 20 6C 69 6E 65 20 77 65 20 77 65 72 65 20 70 e line we were p
027610: 6F 73 69 74 69 6F 6E 65 64 20 74 6F 20 75 70 6F ositioned to upo
027620: 6E 20 65 6E 74 72 79 2A 29 0D 0A 0D 0A 09 09 6C n entry*)......l
027630: 69 6E 65 70 6F 73 3A 3D 30 3B 0D 0A 09 09 6A 3A inepos:=0;....j:
027640: 3D 30 3B 0D 0A 09 09 4C 4F 4F 50 0D 0A 09 09 09 =0;....LOOP.....
027650: 49 46 20 28 6D 6F 76 65 64 3D 30 29 20 41 4E 44 IF (moved=0) AND
027660: 20 28 6A 3C 3D 43 41 52 44 49 4E 41 4C 28 63 68 (j<=CARDINAL(ch
027670: 61 72 73 69 6E 29 29 20 54 48 45 4E 0D 0A 09 09 arsin)) THEN....
027680: 09 09 63 75 72 78 3A 3D 6C 69 6E 65 70 6F 73 2D ..curx:=linepos-
027690: 4C 65 66 74 4D 61 72 67 3B 0D 0A 09 09 09 09 63 LeftMarg;......c
0276A0: 75 72 79 3A 3D 69 2B 43 41 52 44 49 4E 41 4C 28 ury:=i+CARDINAL(
0276B0: 73 74 61 72 74 6C 69 6E 65 29 0D 0A 09 09 09 09 startline)......
0276C0: 45 4E 44 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 3B END;.....INC(j);
0276D0: 0D 0A 09 09 09 49 46 20 6A 3E 43 41 52 44 49 4E .....IF j>CARDIN
0276E0: 41 4C 28 6C 65 6E 29 20 54 48 45 4E 20 45 58 49 AL(len) THEN EXI
0276F0: 54 20 45 4E 44 3B 0D 0A 0D 0A 09 09 09 28 2A 63 T END;.......(*c
027700: 54 68 69 73 78 2C 54 68 69 73 79 2C 0D 0A 09 09 Thisx,Thisy,....
027710: 09 63 75 72 78 2C 63 75 72 79 2C 52 65 44 69 73 .curx,cury,ReDis
027720: 70 6C 61 79 3B 0D 0A 46 52 4F 4D 20 09 49 6E 74 play;..FROM .Int
027730: 4C 6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E Logic IMPORT IAN
027740: 44 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 20 49 D;..FROM.Files I
027750: 4D 50 4F 52 54 20 4C 6F 6F 6B 75 70 2C 43 6C 6F MPORT Lookup,Clo
027760: 73 65 2C 46 49 4C 45 2C 52 65 61 64 42 6C 6F 63 se,FILE,ReadBloc
027770: 6B 3B 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D 20 k;..FROM.SYSTEM
027780: 49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 43 4F 4E IMPORT ADR;..CON
027790: 53 54 09 45 4F 46 3D 31 61 78 3B 0D 0A 50 52 4F ST.EOF=1ax;..PRO
0277A0: 43 45 44 55 52 45 20 43 6C 65 61 72 54 6F 45 6E CEDURE ClearToEn
0277B0: 64 28 69 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A d(i:CARDINAL);..
0277C0: 42 45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 43 6F BEGIN...ScreenCo
0277D0: 6E 74 72 6F 6C 28 44 65 6C 45 6F 6C 29 3B 0D 0A ntrol(DelEol);..
0277E0: 09 49 46 20 4E 4F 54 20 4D 61 64 65 43 68 61 6E .IF NOT MadeChan
0277F0: 67 65 20 54 48 45 4E 0D 0A 09 09 46 4F 52 20 69 ge THEN....FOR i
027800: 3A 3D 69 20 54 4F 20 53 63 72 65 65 6E 57 69 64 :=i TO ScreenWid
027810: 74 68 2D 31 20 44 4F 20 57 72 69 74 65 28 27 20 th-1 DO Write('
027820: 27 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D ') END;....END;.
027830: 0A 09 45 4E 44 20 43 6C 65 61 72 54 6F 45 6E 64 ..END ClearToEnd
027840: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 72 72 ;..PROCEDURE Err
027850: 6F 72 4D 65 73 73 61 67 65 28 73 31 2C 73 32 3A orMessage(s1,s2:
027860: 41 52 52 41 59 20 4F 46 20 43 48 41 52 29 3B 0D ARRAY OF CHAR);.
027870: 0A 0D 0A 28 2A 09 44 69 73 70 6C 61 79 20 65 72 ...(*.Display er
027880: 72 6F 72 20 6D 65 73 73 61 67 65 20 61 74 20 62 ror message at b
027890: 6F 74 74 6F 6D 20 6F 66 20 73 63 72 65 65 6E 2A ottom of screen*
0278A0: 29 0D 0A 56 41 52 20 69 3A 49 4E 54 45 47 45 52 )..VAR i:INTEGER
0278B0: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 6F 78 ;..BEGIN...Gotox
0278C0: 79 28 30 2C 53 63 72 65 65 6E 44 65 70 74 68 2D y(0,ScreenDepth-
0278D0: 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 1);...ScreenCont
0278E0: 72 6F 6C 28 52 69 6E 67 42 65 6C 6C 29 3B 0D 0A rol(RingBell);..
0278F0: 09 43 6C 65 61 72 54 6F 45 6E 64 28 31 29 3B 0D .ClearToEnd(1);.
027900: 5D 3A 3D 63 75 72 78 5B 66 72 6F 6D 5D 3B 0D 0A ]:=curx[from];..
027910: 09 63 75 72 79 5B 74 6F 5D 3A 3D 63 75 72 79 5B .cury[to]:=cury[
027920: 66 72 6F 6D 5D 3B 0D 0A 09 4C 65 66 74 4D 61 72 from];...LeftMar
027930: 67 69 6E 5B 74 6F 5D 3A 3D 4C 65 66 74 4D 61 72 gin[to]:=LeftMar
027940: 67 69 6E 5B 66 72 6F 6D 5D 3B 0D 0A 09 57 69 6E gin[from];...Win
027950: 64 6F 77 46 69 6C 65 5B 74 6F 5D 3A 3D 57 69 6E dowFile[to]:=Win
027960: 64 6F 77 46 69 6C 65 5B 66 72 6F 6D 5D 3B 0D 0A dowFile[from];..
027970: 09 62 3A 3D 4C 61 62 65 6C 4F 70 28 46 69 6C 65 .b:=LabelOp(File
027980: 73 5B 57 69 6E 64 6F 77 46 69 6C 65 5B 74 6F 5D s[WindowFile[to]
027990: 5D 2C 54 52 55 45 2C 43 48 52 28 74 6F 29 29 3B ],TRUE,CHR(to));
0279A0: 0D 0A 09 45 4E 44 20 4D 6F 76 65 57 69 6E 64 6F ...END MoveWindo
0279B0: 77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 6C w;..PROCEDURE El
0279C0: 69 64 65 57 69 6E 64 6F 77 28 57 69 6E 64 6F 77 ideWindow(Window
0279D0: 4E 6F 3A 49 4E 54 45 47 45 52 29 3B 0D 0A 42 45 No:INTEGER);..BE
0279E0: 47 49 4E 0D 0A 09 46 4F 52 20 69 3A 3D 57 69 6E GIN...FOR i:=Win
0279F0: 64 6F 77 4E 6F 2B 31 20 54 4F 20 49 4E 54 45 47 dowNo+1 TO INTEG
027A00: 45 52 28 57 69 6E 64 6F 77 73 29 20 44 4F 0D 0A ER(Windows) DO..
027A10: 09 09 4D 6F 76 65 57 69 6E 64 6F 77 28 69 2C 69 ..MoveWindow(i,i
027A20: 2D 31 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 44 -1);....END;...D
027A30: 45 43 28 57 69 6E 64 6F 77 73 29 3B 0D 0A 09 43 EC(Windows);...C
027A40: 75 72 72 65 6E 74 57 69 6E 64 6F 77 3A 3D 30 3B urrentWindow:=0;
027A50: 0D 0A 09 45 4E 44 20 45 6C 69 64 65 57 69 6E 64 ...END ElideWind
027A60: 6F 77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4D ow;..PROCEDURE M
027A70: 61 6B 65 57 69 6E 64 6F 77 3B 0D 0A 42 45 47 49 akeWindow;..BEGI
027A80: 4E 0D 0A 09 49 4E 43 28 57 69 6E 64 6F 77 73 29 N...INC(Windows)
027A90: 3B 0D 0A 09 4D 6F 76 65 57 69 6E 64 6F 77 28 43 ;...MoveWindow(C
027AA0: 75 72 72 65 6E 74 57 69 6E 64 6F 77 2C 57 69 6E urrentWindow,Win
027AB0: 64 6F 77 73 29 3B 0D 0A 09 45 4E 44 20 4D 61 6B dows);...END Mak
027AC0: 65 57 69 6E 64 6F 77 3B 0D 0A 50 52 4F 43 45 44 eWindow;..PROCED
027AD0: 55 52 45 20 53 65 61 72 63 68 28 52 65 70 6C 61 URE Search(Repla
027AE0: 63 65 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 ce:ARRAY OF CHAR
027AF0: 3B 52 4C 65 6E 3A 49 4E 54 45 47 45 52 3B 4C 65 ;RLen:INTEGER;Le
027B00: 0A 09 47 6F 74 6F 78 79 28 30 2C 53 63 72 65 65 ..Gotoxy(0,Scree
027B10: 6E 44 65 70 74 68 2D 31 29 3B 0D 0A 09 57 72 69 nDepth-1);...Wri
027B20: 74 65 53 74 72 69 6E 67 28 73 31 29 3B 57 72 69 teString(s1);Wri
027B30: 74 65 53 74 72 69 6E 67 28 73 32 29 3B 0D 0A 09 teString(s2);...
027B40: 45 4E 44 20 45 72 72 6F 72 4D 65 73 73 61 67 65 END ErrorMessage
027B50: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 ;..PROCEDURE Set
027B60: 57 69 6E 64 6F 77 73 28 69 3A 49 4E 54 45 47 45 Windows(i:INTEGE
027B70: 52 29 3B 0D 0A 0D 0A 28 2A 09 73 65 74 20 6E 75 R);....(*.set nu
027B80: 6D 62 65 72 20 6F 66 20 65 64 69 74 20 77 69 6E mber of edit win
027B90: 64 6F 77 73 20 69 6E 20 75 73 65 20 2D 20 79 6F dows in use - yo
027BA0: 75 20 6D 75 73 74 20 72 65 66 72 65 73 68 20 74 u must refresh t
027BB0: 68 65 20 65 6E 74 69 72 65 0D 0A 09 73 63 72 65 he entire...scre
027BC0: 65 6E 20 77 69 74 68 20 63 61 6C 6C 73 20 74 6F en with calls to
027BD0: 20 44 69 73 70 6C 61 79 46 69 6C 65 20 61 66 74 DisplayFile aft
027BE0: 65 72 20 61 20 63 61 6C 6C 20 74 6F 20 74 68 69 er a call to thi
027BF0: 73 0D 0A 09 72 6F 75 74 69 6E 65 2A 29 0D 0A 56 s...routine*)..V
027C00: 41 52 09 6A 2C 6B 3A 43 41 52 44 49 4E 41 4C 3B AR.j,k:CARDINAL;
027C10: 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 57 69 6E .....BEGIN...Win
027C20: 64 6F 77 73 3A 3D 69 3B 0D 0A 09 53 63 72 65 65 dows:=i;...Scree
027C30: 6E 43 6F 6E 74 72 6F 6C 28 43 6C 65 61 72 53 63 nControl(ClearSc
027C40: 72 65 65 6E 29 3B 0D 0A 09 49 46 20 57 69 6E 64 reen);...IF Wind
027C50: 6F 77 73 3E 31 20 54 48 45 4E 0D 0A 09 09 4C 69 ows>1 THEN....Li
027C60: 6E 65 73 50 65 72 57 69 6E 64 6F 77 3A 3D 28 53 nesPerWindow:=(S
027C70: 63 72 65 65 6E 44 65 70 74 68 2D 57 69 6E 64 6F creenDepth-Windo
027C80: 77 73 29 20 44 49 56 20 57 69 6E 64 6F 77 73 3B ws) DIV Windows;
027C90: 0D 0A 09 45 4C 53 45 09 4C 69 6E 65 73 50 65 72 ...ELSE.LinesPer
027CA0: 57 69 6E 64 6F 77 3A 3D 53 63 72 65 65 6E 44 65 Window:=ScreenDe
027CB0: 70 74 68 2D 31 20 45 4E 44 3B 0D 0A 09 46 4F 52 pth-1 END;...FOR
027CC0: 20 6A 3A 3D 32 20 54 4F 20 57 69 6E 64 6F 77 73 j:=2 TO Windows
027CD0: 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 79 28 30 2C DO....Gotoxy(0,
027CE0: 28 4C 69 6E 65 73 50 65 72 57 69 6E 64 6F 77 2B (LinesPerWindow+
027CF0: 31 29 2A 28 6A 2D 31 29 2D 31 29 3B 0D 0A 09 09 1)*(j-1)-1);....
027D00: 6E 3A 43 41 52 44 49 4E 41 4C 29 3A 42 4F 4F 4C n:CARDINAL):BOOL
027D10: 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 73 65 61 72 63 EAN;....(*.searc
027D20: 68 20 66 6F 72 20 73 74 72 69 6E 67 20 61 6E 64 h for string and
027D30: 20 72 65 70 6C 61 63 65 20 69 66 20 66 6F 75 6E replace if foun
027D40: 64 2A 29 0D 0A 56 41 52 09 62 3A 42 4F 4F 4C 45 d*)..VAR.b:BOOLE
027D50: 41 4E 3B 0D 0A 09 46 6F 75 6E 64 3A 42 4F 4F 4C AN;...Found:BOOL
027D60: 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 62 3A EAN;..BEGIN...b:
027D70: 3D 4C 65 6E 3E 31 32 38 3B 0D 0A 09 49 46 20 62 =Len>128;...IF b
027D80: 20 54 48 45 4E 20 4C 65 6E 3A 3D 4C 65 6E 2D 31 THEN Len:=Len-1
027D90: 32 38 20 45 4E 44 3B 0D 0A 09 46 6F 75 6E 64 3A 28 END;...Found:
027DA0: 3D 46 69 6E 64 53 74 72 69 6E 67 28 43 75 72 46 =FindString(CurF
027DB0: 69 6C 65 50 74 72 5E 2C 62 29 3B 0D 0A 09 49 46 ilePtr^,b);...IF
027DC0: 20 46 6F 75 6E 64 20 41 4E 44 20 28 52 4C 65 6E Found AND (RLen
027DD0: 3E 3D 30 29 20 54 48 45 4E 0D 0A 09 09 4D 61 72 >=0) THEN....Mar
027DE0: 6B 41 73 55 70 64 61 74 65 64 3B 0D 0A 09 09 44 kAsUpdated;....D
027DF0: 65 6C 43 68 61 72 73 28 43 75 72 46 69 6C 65 50 elChars(CurFileP
027E00: 74 72 5E 2C 4C 65 6E 29 20 0D 0A 09 09 49 6E 73 tr^,Len) ....Ins
027E10: 43 68 61 72 73 28 43 75 72 46 69 6C 65 50 74 72 Chars(CurFilePtr
027E20: 5E 2C 52 65 70 6C 61 63 65 2C 52 4C 65 6E 29 3B ^,Replace,RLen);
027E30: 0D 0A 09 09 62 3A 3D 42 61 63 6B 4F 6E 65 43 68 ....b:=BackOneCh
027E40: 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B ar(CurFilePtr^);
027E50: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 65 44 69 73 ....END;...ReDis
027E60: 70 6C 61 79 3B 0D 0A 09 52 45 54 55 52 4E 20 46 play;...RETURN F
027E70: 6F 75 6E 64 3B 0D 0A 09 45 4E 44 20 53 65 61 72 ound;...END Sear
027E80: 63 68 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 ch;..PROCEDURE G
027E90: 6F 54 6F 4C 61 62 65 6C 28 63 68 3A 43 48 41 52 oToLabel(ch:CHAR
027EA0: 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4C );..BEGIN...IF L
027EB0: 61 62 65 6C 4F 70 28 43 75 72 46 69 6C 65 50 74 abelOp(CurFilePt
027EC0: 72 5E 2C 46 41 4C 53 45 2C 63 68 29 20 54 48 45 r^,FALSE,ch) THE
027ED0: 4E 0D 0A 09 09 52 65 44 69 73 70 6C 61 79 3B 0D N....ReDisplay;.
027EE0: 0A 09 45 4C 53 45 0D 0A 09 09 45 72 72 6F 72 4D ..ELSE....ErrorM
027EF0: 65 73 73 61 67 65 28 27 20 4C 61 62 65 6C 20 6E essage(' Label n
027F00: 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 53 74 ScreenControl(St
027F10: 61 72 74 47 72 61 70 68 29 3B 0D 0A 09 09 46 4F artGraph);....FO
027F20: 52 20 6B 3A 3D 31 20 54 4F 20 53 63 72 65 65 6E R k:=1 TO Screen
027F30: 57 69 64 74 68 20 44 4F 20 0D 0A 09 09 09 53 63 Width DO .....Sc
027F40: 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 48 6F 72 69 reenControl(Hori
027F50: 7A 6F 6E 74 61 6C 29 3B 0D 0A 09 09 09 45 4E 44 zontal);.....END
027F60: 3B 0D 0A 09 09 53 63 72 65 65 6E 43 6F 6E 74 72 ;....ScreenContr
027F70: 6F 6C 28 45 6E 64 47 72 61 70 68 29 3B 0D 0A 09 ol(EndGraph);...
027F80: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 53 65 74 57 .END;...END SetW
027F90: 69 6E 64 6F 77 73 3B 0D 0A 09 28 2A 70 75 74 20 indows;...(*put
027FA0: 61 20 6C 69 6E 65 20 62 65 74 77 65 65 6E 20 74 a line between t
027FB0: 68 65 20 77 69 6E 64 6F 77 73 2A 29 0D 0A 0D 0A he windows*)....
027FC0: 56 41 52 09 63 68 3A 43 48 41 52 3B 0D 0A 09 70 VAR.ch:CHAR;...p
027FD0: 6F 73 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A 09 63 os:Position;...c
027FE0: 68 61 72 73 69 6E 2C 69 63 3A 49 4E 54 45 47 45 harsin,ic:INTEGE
027FF0: 52 3B 0D 0A 09 6C 65 6E 2C 6D 6F 76 65 64 3A 49 R;...len,moved:I
028000: 4E 54 45 47 45 52 3B 0D 0A 09 6C 69 6E 65 70 6F NTEGER;...linepo
028010: 73 2C 4C 65 66 74 4D 61 72 67 3A 43 41 52 44 49 s,LeftMarg:CARDI
028020: 4E 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 NAL;..PROCEDURE
028030: 53 65 74 4C 65 66 74 4D 61 72 67 28 66 3A 45 64 SetLeftMarg(f:Ed
028040: 69 74 46 69 6C 65 3B 77 69 6E 64 6F 77 3A 49 4E itFile;window:IN
028050: 54 45 47 45 52 3B 56 41 52 20 63 75 72 78 2C 63 TEGER;VAR curx,c
028060: 75 72 79 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A ury:CARDINAL);..
028070: 42 45 47 49 4E 0D 0A 09 52 65 74 72 6C 69 6E 65 BEGIN...Retrline
028080: 28 66 2C 6C 65 6E 2C 63 68 61 72 73 69 6E 2C 70 (f,len,charsin,p
028090: 6F 73 2C 6D 6F 76 65 64 2C 30 29 3B 0D 0A 09 6C os,moved,0);...l
0280A0: 69 6E 65 70 6F 73 3A 3D 30 3B 0D 0A 09 46 4F 52 inepos:=0;...FOR
0280B0: 20 69 63 3A 3D 30 20 54 4F 20 63 68 61 72 73 69 ic:=0 TO charsi
0280C0: 6E 20 44 4F 0D 0A 09 09 52 65 61 64 4E 65 78 74 n DO....ReadNext
0280D0: 43 68 61 72 28 70 6F 73 2C 63 68 29 3B 0D 0A 09 Char(pos,ch);...
0280E0: 09 49 46 20 63 68 3D 30 39 78 20 54 48 45 4E 20 .IF ch=09x THEN
0280F0: 6C 69 6E 65 70 6F 73 3A 3D 49 41 4E 44 28 6C 69 linepos:=IAND(li
028100: 6F 74 20 64 65 66 69 6E 65 64 27 2C 27 20 27 29 ot defined',' ')
028110: 3B 0D 0A 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A ;....ResetPos;..
028120: 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 47 6F 54 ..END;...END GoT
028130: 6F 4C 61 62 65 6C 3B 09 09 0D 0A 42 45 47 49 4E oLabel;....BEGIN
028140: 0D 0A 09 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 ...CurrentWindow
028150: 3A 3D 30 3B 0D 0A 09 43 75 72 72 65 6E 74 46 69 :=0;...CurrentFi
028160: 6C 65 3A 3D 30 3B 0D 0A 09 43 75 72 46 69 6C 65 le:=0;...CurFile
028170: 50 74 72 3A 3D 50 45 64 69 74 46 69 6C 65 28 41 Ptr:=PEditFile(A
028180: 44 52 28 46 69 6C 65 73 5B 31 5D 29 29 3B 0D 0A DR(Files[1]));..
028190: 09 45 4E 44 20 45 64 69 74 43 6F 6E 74 72 6F 6C .END EditControl
0281A0: 2E 0D 0A 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0281B0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0281C0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0281D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0281E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0281F0: 1A 1A 1A 1A 1A 1A FF 0F 00 00 00 00 00 00 00 00 ................
028200: 0D 0A 0D 0A 09 54 68 69 73 20 76 65 72 73 69 6F .....This versio
028210: 6E 20 77 69 6C 6C 20 6E 6F 74 20 73 63 72 6F 6C n will not scrol
028220: 6C 20 74 68 65 20 73 63 72 65 65 6E 20 65 69 74 l the screen eit
028230: 68 65 72 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D 20 her..*)....FROM
028240: 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 Terminal IMPORT
028250: 43 68 61 72 52 6F 75 74 69 6E 65 2C 43 68 61 72 CharRoutine,Char
028260: 45 6E 61 62 6C 65 64 2C 42 6C 69 6E 6B 52 6F 75 Enabled,BlinkRou
028270: 74 69 6E 65 2C 42 6C 69 6E 6B 45 6E 61 62 6C 65 tine,BlinkEnable
028280: 64 3B 0D 0A 46 52 4F 4D 20 46 61 73 74 4D 6F 76 d;..FROM FastMov
028290: 65 20 49 4D 50 4F 52 54 20 4D 6F 76 65 75 70 2C e IMPORT Moveup,
0282A0: 4D 6F 76 65 64 6F 77 6E 3B 0D 0A 46 52 4F 4D 20 Movedown;..FROM
0282B0: 53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 41 44 SYSTEM IMPORT AD
0282C0: 52 2C 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 43 50 R,SIZE;..FROM CP
0282D0: 4D 20 49 4D 50 4F 52 54 20 77 63 63 66 63 2C 42 M IMPORT wccfc,B
0282E0: 44 4F 53 3B 0D 0A 28 2A 46 52 4F 4D 20 4F 73 62 DOS;..(*FROM Osb
0282F0: 6F 72 6E 65 20 49 4D 50 4F 52 54 20 42 61 6E 6B orne IMPORT Bank
028300: 6E 65 70 6F 73 2B 38 2C 30 66 66 66 38 68 29 0D nepos+8,0fff8h).
028310: 0A 09 09 45 4C 53 45 20 49 4E 43 28 6C 69 6E 65 ...ELSE INC(line
028320: 70 6F 73 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 pos) END;....END
028330: 3B 0D 0A 09 4C 65 66 74 4D 61 72 67 3A 3D 30 3B ;...LeftMarg:=0;
028340: 0D 0A 09 57 48 49 4C 45 20 6C 69 6E 65 70 6F 73 ...WHILE linepos
028350: 3E 28 4C 65 66 74 4D 61 72 67 2B 53 63 72 65 65 >(LeftMarg+Scree
028360: 6E 57 69 64 74 68 29 20 44 4F 0D 0A 09 09 4C 65 nWidth) DO....Le
028370: 66 74 4D 61 72 67 3A 3D 4C 65 66 74 4D 61 72 67 ftMarg:=LeftMarg
028380: 2B 33 32 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C +32;....END;...L
028390: 65 66 74 4D 61 72 67 69 6E 5B 77 69 6E 64 6F 77 eftMargin[window
0283A0: 5D 3A 3D 4C 65 66 74 4D 61 72 67 3B 0D 0A 09 45 ]:=LeftMarg;...E
0283B0: 4E 44 20 53 65 74 4C 65 66 74 4D 61 72 67 3B 0D ND SetLeftMarg;.
0283C0: 0A 50 52 4F 43 45 44 55 52 45 20 44 69 73 70 6C .PROCEDURE Displ
0283D0: 61 79 46 69 6C 65 28 66 3A 45 64 69 74 46 69 6C ayFile(f:EditFil
0283E0: 65 3B 77 69 6E 64 6F 77 3A 49 4E 54 45 47 45 52 e;window:INTEGER
0283F0: 3B 56 41 52 20 63 75 72 78 2C 63 75 72 79 3A 43 ;VAR curx,cury:C
028400: 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A 28 2A 09 ARDINAL);....(*.
028410: 72 65 64 69 73 70 6C 61 79 20 61 73 20 6D 75 63 redisplay as muc
028420: 68 20 74 65 78 74 20 61 73 20 77 69 6C 6C 20 66 h text as will f
028430: 69 74 20 69 6E 20 74 68 65 20 77 69 6E 64 6F 77 it in the window
028440: 0D 0A 09 66 6F 72 20 74 68 65 20 67 69 76 65 6E ...for the given
028450: 20 66 69 6C 65 20 73 74 61 72 74 69 6E 67 20 61 file starting a
028460: 74 20 74 68 65 20 63 75 72 72 65 6E 74 20 70 6F t the current po
028470: 73 69 74 69 6F 6E 20 69 6E 20 74 68 65 20 66 69 sition in the fi
028480: 6C 65 2A 29 0D 0A 56 41 52 09 69 2C 6A 2C 6B 2C le*)..VAR.i,j,k,
028490: 6C 69 6E 65 70 6F 73 3A 43 41 52 44 49 4E 41 4C linepos:CARDINAL
0284A0: 3B 0D 0A 09 6D 6F 76 65 64 6F 6E 65 3A 49 4E 54 ;...movedone:INT
0284B0: 45 47 45 52 3B 09 0D 0A 09 73 74 61 72 74 6C 69 EGER;....startli
0284C0: 6E 65 3A 49 4E 54 45 47 45 52 3B 20 28 2A 66 69 ne:INTEGER; (*fi
0284D0: 72 73 74 20 6C 69 6E 65 20 6F 66 20 77 69 6E 64 rst line of wind
0284E0: 6F 77 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 4C 65 ow*)..BEGIN...Le
0284F0: 66 74 4D 61 72 67 3A 3D 4C 65 66 74 4D 61 72 67 ftMarg:=LeftMarg
028500: 28 2A 09 54 68 69 73 20 69 73 20 74 68 65 20 64 (*.This is the d
028510: 75 6D 62 20 73 63 72 65 65 6E 20 76 65 72 73 69 umb screen versi
028520: 6F 6E 20 6F 66 20 45 64 69 74 44 69 73 70 6C 61 on of EditDispla
028530: 79 0D 0A 0D 0A 09 49 74 20 75 73 65 73 20 77 72 y.....It uses wr
028540: 69 74 65 73 20 6F 66 20 62 6C 61 6E 6B 73 20 74 ites of blanks t
028550: 6F 20 63 6C 65 61 72 20 74 68 65 20 72 65 73 74 o clear the rest
028560: 20 6F 66 20 65 61 63 68 20 6C 69 6E 65 20 69 6E of each line in
028570: 73 74 65 61 64 20 6F 66 0D 0A 09 44 65 6C 65 74 stead of...Delet
028580: 65 20 74 6F 20 45 4F 4C 20 2A 29 0D 0A 0D 0A 0D e to EOL *).....
028590: 0A 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 .IMPLEMENTATION
0285A0: 4D 4F 44 55 4C 45 20 45 64 69 74 44 69 73 70 6C MODULE EditDispl
0285B0: 61 79 3B 0D 0A 28 2A 09 44 69 73 70 6C 61 79 20 ay;..(*.Display
0285C0: 70 61 72 74 20 6F 66 20 61 20 66 69 6C 65 20 62 part of a file b
0285D0: 65 69 6E 67 20 65 64 69 74 65 64 2A 29 0D 0A 46 eing edited*)..F
0285E0: 52 4F 4D 09 53 43 52 45 45 4E 49 4F 20 49 4D 50 ROM.SCREENIO IMP
0285F0: 4F 52 54 20 47 6F 74 6F 78 79 2C 53 63 72 65 65 ORT Gotoxy,Scree
028600: 6E 43 6F 6E 74 72 6F 6C 2C 0D 0A 09 09 09 4D 61 nControl,.....Ma
028610: 64 65 43 68 61 6E 67 65 2C 53 63 72 65 65 6E 57 deChange,ScreenW
028620: 69 64 74 68 2C 53 63 72 65 65 6E 44 65 70 74 68 idth,ScreenDepth
028630: 3B 0D 0A 46 52 4F 4D 20 09 54 65 72 6D 69 6E 61 ;..FROM .Termina
028640: 6C 20 49 4D 50 4F 52 54 20 57 72 69 74 65 53 74 l IMPORT WriteSt
028650: 72 69 6E 67 2C 57 72 69 74 65 2C 57 72 69 74 65 ring,Write,Write
028660: 4C 6E 2C 52 65 61 64 2C 3B 0D 0A 46 52 4F 4D 20 Ln,Read,;..FROM
028670: 09 4D 61 6B 65 45 64 69 74 73 20 49 4D 50 4F 52 .MakeEdits IMPOR
028680: 54 20 50 6F 73 69 74 69 6F 6E 2C 52 65 74 72 6C T Position,Retrl
028690: 69 6E 65 2C 52 65 61 64 4E 65 78 74 43 68 61 72 ine,ReadNextChar
0286A0: 2C 45 72 72 6F 72 4C 69 73 74 2C 45 72 72 6F 72 ,ErrorList,Error
0286B0: 43 6F 75 6E 74 2C 4C 61 62 65 6C 4F 70 3B 0D 0A Count,LabelOp;..
0286C0: 46 52 4F 4D 09 45 64 69 74 43 6F 6E 74 20 49 4D FROM.EditCont IM
0286D0: 50 4F 52 54 20 4C 65 66 74 4D 61 72 67 69 6E 2C PORT LeftMargin,
0286E0: 46 69 6C 65 73 2C 43 75 72 72 65 6E 74 57 69 6E Files,CurrentWin
0286F0: 64 6F 77 2C 43 75 72 72 65 6E 74 46 69 6C 65 2C dow,CurrentFile,
028700: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
028710: 22 00 01 00 02 09 52 E5 22 00 C9 02 00 00 00 02 ".....R.".......
028720: 22 00 C5 02 00 00 00 02 22 00 C1 02 00 00 00 02 ".......".......
028730: 22 00 C6 02 00 00 00 02 22 00 C2 02 00 00 00 02 ".......".......
028740: 22 00 C7 02 00 00 00 02 22 00 C3 02 00 00 00 02 ".......".......
028750: 22 00 C8 02 00 00 00 02 22 00 C4 02 00 00 00 02 ".......".......
028760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
028770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
028780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
028790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
028800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0288A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0288B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0288C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0288D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0288E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0288F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0289A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0289B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0289C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0289D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0289E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0289F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
028A00: 2E 44 41 54 20 27 2C 72 65 70 6C 79 29 3B 0D 0A .DAT ',reply);..
028A10: 0D 0A 09 28 2A 4C 6F 6F 6B 75 70 20 6F 70 65 6E ...(*Lookup open
028A20: 73 20 74 68 65 20 66 69 6C 65 20 66 6F 72 20 69 s the file for i
028A30: 6E 70 75 74 2F 6F 75 74 70 75 74 0D 0A 09 20 20 nput/output...
028A40: 72 65 70 6C 79 20 72 65 74 75 72 6E 73 20 7A 65 reply returns ze
028A50: 72 6F 20 69 66 20 6E 6F 20 66 69 6C 65 20 69 73 ro if no file is
028A60: 20 66 6F 75 6E 64 0D 0A 09 20 20 61 20 64 65 76 found... a dev
028A70: 69 63 65 20 6E 61 6D 65 20 63 61 6E 20 62 65 20 ice name can be
028A80: 75 73 65 64 20 69 6E 20 66 72 6F 6E 74 20 6F 66 used in front of
028A90: 20 74 68 65 20 66 69 6C 65 20 6E 61 6D 65 0D 0A the file name..
028AA0: 09 20 49 6E 20 66 61 63 74 2C 20 79 6F 75 20 63 . In fact, you c
028AB0: 61 6E 20 75 73 65 20 61 20 6E 6F 6E 2D 64 69 73 an use a non-dis
028AC0: 63 20 66 69 6C 65 20 6E 61 6D 65 20 28 65 67 20 c file name (eg
028AD0: 50 55 4E 3A 20 6F 72 20 43 4F 4E 3A 29 0D 0A 09 PUN: or CON:)...
028AE0: 20 62 75 74 20 69 66 20 79 6F 75 20 64 6F 20 74 but if you do t
028AF0: 68 69 73 2C 20 79 6F 75 20 6D 75 73 74 20 64 6F his, you must do
028B00: 20 79 6F 75 72 20 49 4F 20 74 68 72 6F 75 67 68 your IO through
028B10: 20 74 68 65 20 6D 6F 64 75 6C 65 0D 0A 09 20 53 the module... S
028B20: 74 72 65 61 6D 73 20 28 6F 72 20 49 6E 4F 75 74 treams (or InOut
028B30: 2C 20 77 68 69 63 68 20 63 61 6C 6C 73 20 73 74 , which calls st
028B40: 72 65 61 6D 73 29 2C 20 61 73 20 74 68 65 20 49 reams), as the I
028B50: 4F 20 74 6F 20 74 68 65 0D 0A 09 20 73 65 72 69 O to the... seri
028B60: 61 6C 20 64 65 76 69 63 65 73 20 69 73 20 70 65 al devices is pe
028B70: 72 66 6F 72 6D 65 64 20 62 79 20 74 68 61 74 20 rformed by that
028B80: 6D 6F 64 75 6C 65 20 28 69 74 20 63 61 6C 6C 73 module (it calls
028B90: 20 46 69 6C 65 73 0D 0A 09 20 74 6F 20 64 6F 20 Files... to do
028BA0: 49 4F 20 74 6F 20 64 69 73 63 20 64 65 76 69 63 IO to disc devic
028BB0: 65 73 29 0D 0A 2A 29 0D 0A 09 49 46 20 72 65 70 es)..*)...IF rep
028BC0: 6C 79 3D 30 20 54 48 45 4E 09 09 28 2A 4F 4B 20 ly=0 THEN..(*OK
028BD0: 2D 20 66 69 6C 65 20 66 6F 75 6E 64 2A 29 0D 0A - file found*)..
028BE0: 09 09 0D 0A 0D 0A 09 09 28 2A 72 65 61 64 20 74 ........(*read t
028BF0: 68 65 20 66 69 72 73 74 20 31 20 6F 72 20 74 77 he first 1 or tw
028C00: 68 65 63 6B 20 66 6F 72 20 63 75 72 73 6F 72 20 heck for cursor
028C10: 6C 69 6E 65 2A 29 0D 0A 0D 0A 09 09 09 52 65 61 line*).......Rea
028C20: 64 4E 65 78 74 43 68 61 72 28 70 6F 73 2C 63 68 dNextChar(pos,ch
028C30: 29 3B 0D 0A 09 09 09 49 46 20 63 68 3D 30 39 78 );.....IF ch=09x
028C40: 20 54 48 45 4E 20 0D 0A 09 09 09 09 52 45 50 45 THEN ......REPE
028C50: 41 54 0D 0A 09 09 09 09 09 49 4E 43 28 6C 69 6E AT.......INC(lin
028C60: 65 70 6F 73 29 3B 0D 0A 09 09 09 09 09 49 46 20 epos);.......IF
028C70: 28 6C 69 6E 65 70 6F 73 3E 4C 65 66 74 4D 61 72 (linepos>LeftMar
028C80: 67 29 20 0D 0A 09 09 09 09 09 41 4E 44 20 28 6C g) .......AND (l
028C90: 69 6E 65 70 6F 73 3C 28 53 63 72 65 65 6E 57 69 inepos<(ScreenWi
028CA0: 64 74 68 2B 4C 65 66 74 4D 61 72 67 29 29 20 54 dth+LeftMarg)) T
028CB0: 48 45 4E 20 0D 0A 09 09 09 09 09 09 57 72 69 74 HEN ........Writ
028CC0: 65 28 27 20 27 29 20 0D 0A 09 09 09 09 09 09 45 e(' ') ........E
028CD0: 4E 44 3B 0D 0A 09 09 09 09 09 55 4E 54 49 4C 20 ND;.......UNTIL
028CE0: 49 41 4E 44 28 6C 69 6E 65 70 6F 73 2C 37 29 3D IAND(linepos,7)=
028CF0: 30 3B 0D 0A 09 09 09 45 4C 53 49 46 20 63 68 3D 0;.....ELSIF ch=
028D00: 45 4F 46 20 54 48 45 4E 20 45 58 49 54 0D 0A 09 EOF THEN EXIT...
028D10: 09 09 45 4C 53 45 20 0D 0A 09 09 09 09 49 4E 43 ..ELSE ......INC
028D20: 28 6C 69 6E 65 70 6F 73 29 3B 0D 0A 09 09 09 09 (linepos);......
028D30: 49 46 20 28 6C 69 6E 65 70 6F 73 3E 4C 65 66 74 IF (linepos>Left
028D40: 4D 61 72 67 29 0D 0A 09 09 09 09 41 4E 44 20 28 Marg)......AND (
028D50: 6C 69 6E 65 70 6F 73 3C 28 53 63 72 65 65 6E 57 linepos<(ScreenW
028D60: 69 64 74 68 2B 4C 65 66 74 4D 61 72 67 29 29 20 idth+LeftMarg))
028D70: 54 48 45 4E 20 0D 0A 09 09 09 09 09 57 72 69 74 THEN .......Writ
028D80: 65 28 63 68 29 20 0D 0A 09 09 09 09 09 45 4E 44 e(ch) .......END
028D90: 3B 0D 0A 09 09 09 09 45 4E 44 3B 28 2A 49 46 20 ;......END;(*IF
028DA0: 63 68 3D 76 61 72 69 6F 75 73 20 74 68 69 6E 67 ch=various thing
028DB0: 73 2A 29 0D 0A 09 09 09 45 4E 44 20 28 2A 69 6E s*).....END (*in
028DC0: 6E 65 72 20 6C 6F 6F 70 2A 29 3B 0D 0A 09 09 49 ner loop*);....I
028DD0: 4E 43 28 69 29 3B 0D 0A 09 09 49 46 20 6C 69 6E NC(i);....IF lin
028DE0: 65 70 6F 73 3E 3D 4C 65 66 74 4D 61 72 67 20 54 epos>=LeftMarg T
028DF0: 48 45 4E 0D 0A 09 09 09 43 6C 65 61 72 54 6F 45 HEN.....ClearToE
028E00: 6F 20 62 6C 6F 63 6B 73 20 6F 66 20 74 68 65 20 o blocks of the
028E10: 65 72 72 6F 72 20 0D 0A 09 09 20 20 6D 65 73 73 error .... mess
028E20: 61 67 65 20 66 69 6C 65 2C 20 63 6F 75 6E 74 69 age file, counti
028E30: 6E 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73 n the characters
028E40: 20 70 72 65 63 65 64 69 6E 67 20 74 68 65 0D 0A preceding the..
028E50: 09 09 20 20 65 72 72 6F 72 20 65 6D 73 73 61 67 .. error emssag
028E60: 65 20 77 65 20 77 61 6E 74 20 2A 29 0D 0A 09 09 e we want *)....
028E70: 52 65 61 64 42 6C 6F 63 6B 28 66 2C 41 44 52 28 ReadBlock(f,ADR(
028E80: 62 29 2C 30 2C 31 32 38 2C 72 65 70 6C 79 29 3B b),0,128,reply);
028E90: 0D 0A 09 09 6A 3A 3D 45 72 72 6F 72 4E 75 6D 62 ....j:=ErrorNumb
028EA0: 65 72 3B 0D 0A 09 09 49 46 20 45 72 72 6F 72 4E er;....IF ErrorN
028EB0: 75 6D 62 65 72 3E 31 32 38 20 54 48 45 4E 0D 0A umber>128 THEN..
028EC0: 09 09 09 69 3A 3D 43 6F 75 6E 74 28 31 32 38 29 ...i:=Count(128)
028ED0: 3B 0D 0A 09 09 09 52 65 61 64 42 6C 6F 63 6B 28 ;.....ReadBlock(
028EE0: 66 2C 41 44 52 28 62 29 2C 31 2C 31 32 38 2C 72 f,ADR(b),1,128,r
028EF0: 65 70 6C 79 29 3B 0D 0A 09 09 09 6A 3A 3D 6A 2D eply);.....j:=j-
028F00: 31 32 38 0D 0A 09 09 45 4C 53 45 0D 0A 09 09 09 128....ELSE.....
028F10: 69 3A 3D 30 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A i:=0;.....END;..
028F20: 09 09 69 3A 3D 69 2B 43 6F 75 6E 74 28 6A 2D 31 ..i:=i+Count(j-1
028F30: 29 3B 0D 0A 09 09 4C 65 6E 67 74 68 3A 3D 4F 52 );....Length:=OR
028F40: 44 28 62 5B 6A 2D 31 5D 29 3B 0D 0A 09 09 6A 3A D(b[j-1]);....j:
028F50: 3D 69 20 44 49 56 20 31 32 38 3B 20 28 2A 62 6C =i DIV 128; (*bl
028F60: 6F 63 6B 20 74 6F 20 72 65 61 64 2A 29 0D 0A 09 ock to read*)...
028F70: 09 69 3A 3D 69 20 2D 20 31 32 38 2A 6A 3B 20 28 .i:=i - 128*j; (
028F80: 2A 6F 66 66 73 65 74 20 6F 66 20 66 69 72 73 74 *offset of first
028F90: 20 63 68 61 72 61 63 74 65 72 20 69 6E 20 62 6C character in bl
028FA0: 6F 63 6B 2A 29 0D 0A 09 09 52 65 61 64 42 6C 6F ock*)....ReadBlo
028FB0: 63 6B 28 66 2C 41 44 52 28 62 29 2C 6A 2B 32 2C ck(f,ADR(b),j+2,
028FC0: 31 32 38 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 46 128,reply);....F
028FD0: 4F 52 20 6B 3A 3D 30 20 54 4F 20 4C 65 6E 67 74 OR k:=0 TO Lengt
028FE0: 68 2D 31 20 44 4F 0D 0A 09 09 09 49 46 20 69 3D h-1 DO.....IF i=
028FF0: 31 32 38 20 54 48 45 4E 20 0D 0A 09 09 09 09 49 128 THEN ......I
029000: 6E 64 28 6C 69 6E 65 70 6F 73 2B 31 2D 4C 65 66 nd(linepos+1-Lef
029010: 74 4D 61 72 67 29 3B 0D 0A 09 09 45 4C 53 45 0D tMarg);....ELSE.
029020: 0A 09 09 09 43 6C 65 61 72 54 6F 45 6E 64 28 31 ....ClearToEnd(1
029030: 29 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 ).....END;....IF
029040: 20 69 3D 4C 69 6E 65 73 50 65 72 57 69 6E 64 6F i=LinesPerWindo
029050: 77 20 54 48 45 4E 20 45 58 49 54 0D 0A 09 09 45 w THEN EXIT....E
029060: 4C 53 45 20 0D 0A 09 09 09 57 72 69 74 65 4C 6E LSE .....WriteLn
029070: 3B 0D 0A 09 09 09 6C 69 6E 65 70 6F 73 3A 3D 30 ;.....linepos:=0
029080: 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 4E ;.....END;....IN
029090: 43 28 6D 6F 76 65 64 29 3B 09 0D 0A 09 09 52 65 C(moved);.....Re
0290A0: 74 72 6C 69 6E 65 28 66 2C 6C 65 6E 2C 69 63 2C trline(f,len,ic,
0290B0: 70 6F 73 2C 6D 6F 76 65 64 6F 6E 65 2C 31 29 3B pos,movedone,1);
0290C0: 0D 0A 09 09 49 46 20 6D 6F 76 65 64 6F 6E 65 3D ....IF movedone=
0290D0: 30 20 54 48 45 4E 0D 0A 09 09 09 46 4F 52 20 69 0 THEN.....FOR i
0290E0: 3A 3D 69 2B 31 20 54 4F 20 4C 69 6E 65 73 50 65 :=i+1 TO LinesPe
0290F0: 72 57 69 6E 64 6F 77 20 44 4F 0D 0A 09 09 09 09 rWindow DO......
029100: 43 6C 65 61 72 54 6F 45 6E 64 28 31 29 3B 0D 0A ClearToEnd(1);..
029110: 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 ....WriteLn;....
029120: 09 09 45 4E 44 3B 0D 0A 09 09 09 45 58 49 54 0D ..END;.....EXIT.
029130: 0A 09 09 09 45 4E 44 0D 0A 09 09 45 4E 44 3B 28 ....END....END;(
029140: 2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 44 69 *LOOP*)...END Di
029150: 73 70 6C 61 79 46 69 6C 65 3B 0D 0A 50 52 4F 43 splayFile;..PROC
029160: 45 44 55 52 45 20 44 69 73 70 6C 61 79 45 72 72 EDURE DisplayErr
029170: 6F 72 3B 0D 0A 0D 0A 28 2A 09 54 68 65 20 65 72 or;....(*.The er
029180: 72 6F 72 20 6D 65 73 73 61 67 65 20 66 69 6C 65 ror message file
029190: 20 63 6F 6E 74 61 69 6E 73 20 74 68 65 20 6D 65 contains the me
0291A0: 73 73 61 67 65 73 2C 20 0D 0A 0D 0A 09 54 68 65 ssages, .....The
0291B0: 20 66 69 72 73 74 20 74 77 6F 20 62 6C 6F 63 6B first two block
0291C0: 73 20 67 69 76 65 20 74 68 65 20 6C 65 6E 67 74 s give the lengt
0291D0: 68 73 20 6F 66 20 74 68 65 20 65 72 72 6F 72 20 hs of the error
0291E0: 6D 65 73 73 61 67 65 73 0D 0A 09 54 68 65 20 72 messages...The r
0291F0: 65 6D 61 69 6E 69 6E 67 20 62 6C 6F 63 6B 73 20 emaining blocks
029200: 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 52 65 61 64 NC(j);......Read
029210: 42 6C 6F 63 6B 28 66 2C 41 44 52 28 62 29 2C 6A Block(f,ADR(b),j
029220: 2B 32 2C 31 32 38 2C 72 65 70 6C 79 29 20 0D 0A +2,128,reply) ..
029230: 09 09 09 09 69 3A 3D 30 3B 0D 0A 09 09 09 09 45 ....i:=0;......E
029240: 4E 44 3B 0D 0A 09 09 09 74 5B 6B 5D 3A 3D 62 5B ND;.....t[k]:=b[
029250: 69 5D 3B 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D i];.....INC(i);.
029260: 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 74 5B 4C 65 ....END;....t[Le
029270: 6E 67 74 68 5D 3A 3D 30 63 3B 0D 0A 09 09 57 72 ngth]:=0c;....Wr
029280: 69 74 65 53 74 72 69 6E 67 28 74 29 3B 0D 0A 09 iteString(t);...
029290: 45 4C 53 45 0D 0A 09 09 57 72 69 74 65 53 74 72 ELSE....WriteStr
0292A0: 69 6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F 74 20 ing(' Could not
0292B0: 6F 70 65 6E 20 65 72 72 6F 72 20 6D 65 73 73 61 open error messa
0292C0: 67 65 73 20 66 69 6C 65 27 29 3B 0D 0A 09 09 45 ges file');....E
0292D0: 4E 44 3B 0D 0A 09 62 6C 3A 3D 4C 61 62 65 6C 4F ND;...bl:=LabelO
0292E0: 70 28 46 69 6C 65 73 5B 43 75 72 72 65 6E 74 46 p(Files[CurrentF
0292F0: 69 6C 65 5D 2C 46 41 4C 53 45 2C 43 48 52 28 45 ile],FALSE,CHR(E
029300: 72 72 6F 72 4F 72 64 69 6E 61 6C 2B 30 62 30 68 rrorOrdinal+0b0h
029310: 29 29 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 3B ));...ReDisplay;
029320: 0D 0A 28 2A 09 44 69 73 70 6C 61 79 46 69 6C 65 ..(*.DisplayFile
029330: 28 46 69 6C 65 73 5B 43 75 72 72 65 6E 74 46 69 (Files[CurrentFi
029340: 6C 65 5D 2C 43 75 72 72 65 6E 74 57 69 6E 64 6F le],CurrentWindo
029350: 77 2C 54 68 69 73 78 2C 54 68 69 73 79 29 3B 2A w,Thisx,Thisy);*
029360: 29 0D 0A 09 47 6F 74 6F 78 79 28 54 68 69 73 78 )...Gotoxy(Thisx
029370: 2C 54 68 69 73 79 29 3B 0D 0A 09 63 75 72 78 5B ,Thisy);...curx[
029380: 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D CurrentWindow]:=
029390: 54 68 69 73 78 3B 0D 0A 09 63 75 72 79 5B 43 75 Thisx;...cury[Cu
0293A0: 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D 54 68 rrentWindow]:=Th
0293B0: 69 73 79 3B 0D 0A 09 45 4E 44 20 44 69 73 70 6C isy;...END Displ
0293C0: 61 79 45 72 72 6F 72 3B 09 0D 0A 42 45 47 49 4E ayError;...BEGIN
0293D0: 0D 0A 09 57 69 6E 64 6F 77 73 3A 3D 30 3B 0D 0A ...Windows:=0;..
0293E0: 09 45 4E 44 20 45 64 69 74 44 69 73 70 6C 61 79 .END EditDisplay
0293F0: 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
029400: 67 69 76 65 20 74 68 65 20 74 65 78 74 20 6F 66 give the text of
029410: 20 74 68 65 20 65 72 72 6F 72 20 6D 65 73 73 61 the error messa
029420: 67 65 73 20 2A 29 0D 0A 54 59 50 45 09 54 65 78 ges *)..TYPE.Tex
029430: 74 3D 41 52 52 41 59 5B 30 2E 2E 36 33 5D 20 4F t=ARRAY[0..63] O
029440: 46 20 43 48 41 52 3B 0D 0A 0D 0A 56 41 52 09 66 F CHAR;....VAR.f
029450: 3A 46 49 4C 45 3B 09 09 09 28 2A 46 49 4C 45 20 :FILE;...(*FILE
029460: 69 73 20 61 20 74 79 70 65 20 65 78 70 6F 72 74 is a type export
029470: 65 64 20 66 72 6F 6D 20 74 68 65 20 6D 6F 64 75 ed from the modu
029480: 6C 65 20 46 69 6C 65 73 2A 29 0D 0A 0D 0A 09 62 le Files*).....b
029490: 3A 41 52 52 41 59 20 5B 30 2E 2E 31 32 37 5D 20 :ARRAY [0..127]
0294A0: 4F 46 20 43 48 41 52 3B 0D 0A 09 69 2C 6A 2C 6B OF CHAR;...i,j,k
0294B0: 2C 4C 65 6E 67 74 68 3A 43 41 52 44 49 4E 41 4C ,Length:CARDINAL
0294C0: 3B 0D 0A 09 74 3A 54 65 78 74 3B 0D 0A 09 45 72 ;...t:Text;...Er
0294D0: 72 6F 72 4E 75 6D 62 65 72 3A 43 41 52 44 49 4E rorNumber:CARDIN
0294E0: 41 4C 3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 AL;...reply:INTE
0294F0: 47 45 52 3B 0D 0A 09 62 6C 3A 42 4F 4F 4C 45 41 GER;...bl:BOOLEA
029500: 4E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6F N;..PROCEDURE Co
029510: 75 6E 74 28 6B 3A 43 41 52 44 49 4E 41 4C 29 3A unt(k:CARDINAL):
029520: 43 41 52 44 49 4E 41 4C 3B 0D 0A 56 41 52 09 69 CARDINAL;..VAR.i
029530: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 :CARDINAL;..BEGI
029540: 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 49 46 20 6B N...i:=0;...IF k
029550: 3D 30 20 54 48 45 4E 20 52 45 54 55 52 4E 20 30 =0 THEN RETURN 0
029560: 20 45 4E 44 3B 0D 0A 09 46 4F 52 20 6B 3A 3D 6B END;...FOR k:=k
029570: 2D 31 20 54 4F 20 30 20 42 59 20 2D 31 20 44 4F -1 TO 0 BY -1 DO
029580: 0D 0A 09 09 69 3A 3D 69 2B 4F 52 44 28 62 5B 6B ....i:=i+ORD(b[k
029590: 5D 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 ]);....END;...RE
0295A0: 54 55 52 4E 20 69 0D 0A 09 45 4E 44 20 43 6F 75 TURN i...END Cou
0295B0: 6E 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 57 nt;..PROCEDURE W
0295C0: 72 69 74 65 43 61 72 64 28 69 3A 43 41 52 44 49 riteCard(i:CARDI
0295D0: 4E 41 4C 29 3B 0D 0A 56 41 52 09 74 3A 41 52 52 NAL);..VAR.t:ARR
0295E0: 41 59 5B 30 2E 2E 33 5D 20 4F 46 20 43 48 41 52 AY[0..3] OF CHAR
0295F0: 3B 0D 0A 09 6A 2C 6B 3A 43 41 52 44 49 4E 41 4C ;...j,k:CARDINAL
029600: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
029610: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 5D 3A 3D 44 6F ...........]:=Do
029620: 46 69 6E 64 3B 09 09 28 2A 43 74 72 6C 20 4C 2A Find;..(*Ctrl L*
029630: 29 0A 09 4D 61 69 6E 54 61 62 6C 65 5B 31 66 78 )..MainTable[1fx
029640: 5D 3A 3D 44 65 6C 42 61 63 6B 3B 09 28 2A 5E 2D ]:=DelBack;.(*^-
029650: 20 6F 6E 20 4F 73 62 6F 72 6E 65 20 31 2A 29 0D on Osborne 1*).
029660: 0A 0D 0A 09 28 2A 09 54 68 65 20 6E 65 78 74 20 ....(*.The next
029670: 6B 65 79 2C 20 20 61 73 73 69 67 6E 65 64 20 74 key, assigned t
029680: 78 29 20 45 4E 44 3B 0D 0A 09 09 62 3A 3D 46 6F x) END;....b:=Fo
029690: 72 77 61 72 64 4F 6E 65 43 68 61 72 28 43 75 72 rwardOneChar(Cur
0296A0: 46 69 6C 65 50 74 72 5E 29 20 0D 0A 09 09 45 4E FilePtr^) ....EN
0296B0: 44 3B 0D 0A 09 69 3A 3D 54 68 69 73 78 3B 0D 0A D;...i:=Thisx;..
0296C0: 09 57 48 49 4C 45 20 54 68 69 73 78 3E 3D 28 53 .WHILE Thisx>=(S
0296D0: 63 72 65 65 6E 57 69 64 74 68 2B 43 75 72 72 65 creenWidth+Curre
0296E0: 6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 20 44 4F ntLeftMargin) DO
0296F0: 0D 0A 09 09 43 68 61 6E 67 65 4D 61 72 67 69 6E ....ChangeMargin
029700: 28 33 32 29 3B 0D 0A 09 09 54 68 69 73 78 3A 3D (32);....Thisx:=
029710: 69 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 48 49 i;....END;...WHI
029720: 4C 45 20 54 68 69 73 78 3C 43 75 72 72 65 6E 74 LE Thisx<Current
029730: 4C 65 66 74 4D 61 72 67 69 6E 20 44 4F 0D 0A 09 LeftMargin DO...
029740: 09 43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 33 .ChangeMargin(-3
029750: 32 29 3B 0D 0A 09 09 54 68 69 73 78 3A 3D 69 3B 2);....Thisx:=i;
029760: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 54 68 69 73 78 ....END;...Thisx
029770: 3A 3D 54 68 69 73 78 2D 43 75 72 72 65 6E 74 4C :=Thisx-CurrentL
029780: 65 66 74 4D 61 72 67 69 6E 3B 0D 0A 09 63 75 72 eftMargin;...cur
029790: 78 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D x[CurrentWindow]
0297A0: 3A 3D 54 68 69 73 78 3B 0D 0A 09 52 65 73 65 74 :=Thisx;...Reset
0297B0: 50 6F 73 3B 0D 0A 09 45 4E 44 20 43 68 61 6E 67 Pos;...END Chang
0297C0: 65 50 6F 73 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 ePos;....PROCEDU
0297D0: 52 45 20 4C 69 6E 65 4D 6F 76 65 28 62 79 3A 49 RE LineMove(by:I
0297E0: 4E 54 45 47 45 52 29 3B 0D 0A 56 41 52 09 69 3A NTEGER);..VAR.i:
0297F0: 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E 0D INTEGER;..BEGIN.
029800: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 6B 3A 3D 48 49 ;..BEGIN...k:=HI
029810: 47 48 28 74 29 3B 0D 0A 09 57 48 49 4C 45 20 69 GH(t);...WHILE i
029820: 3C 3E 30 20 44 4F 0D 0A 09 09 6A 3A 3D 69 20 44 <>0 DO....j:=i D
029830: 49 56 20 31 30 3B 0D 0A 09 09 74 5B 6B 5D 3A 3D IV 10;....t[k]:=
029840: 43 48 52 28 4F 52 44 28 27 30 27 29 2B 69 2D 31 CHR(ORD('0')+i-1
029850: 30 2A 6A 29 3B 0D 0A 09 09 69 3A 3D 6A 3B 0D 0A 0*j);....i:=j;..
029860: 09 09 44 45 43 28 6B 29 3B 0D 0A 09 09 45 4E 44 ..DEC(k);....END
029870: 3B 0D 0A 09 46 4F 52 20 6B 3A 3D 6B 2B 31 20 54 ;...FOR k:=k+1 T
029880: 4F 20 48 49 47 48 28 74 29 20 44 4F 20 57 72 69 O HIGH(t) DO Wri
029890: 74 65 28 74 5B 6B 5D 29 20 45 4E 44 3B 0D 0A 09 te(t[k]) END;...
0298A0: 45 4E 44 20 57 72 69 74 65 43 61 72 64 3B 0D 0A END WriteCard;..
0298B0: 42 45 47 49 4E 0D 0A 09 49 46 20 45 72 72 6F 72 BEGIN...IF Error
0298C0: 4F 72 64 69 6E 61 6C 3E 3D 45 72 72 6F 72 43 6F Ordinal>=ErrorCo
0298D0: 75 6E 74 20 54 48 45 4E 20 52 45 54 55 52 4E 20 unt THEN RETURN
0298E0: 45 4E 44 3B 0D 0A 09 47 6F 74 6F 78 79 28 30 2C END;...Gotoxy(0,
0298F0: 53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 3B 0D ScreenDepth-1);.
029900: 0A 09 45 72 72 6F 72 4E 75 6D 62 65 72 3A 3D 45 ..ErrorNumber:=E
029910: 72 72 6F 72 4C 69 73 74 5B 45 72 72 6F 72 4F 72 rrorList[ErrorOr
029920: 64 69 6E 61 6C 5D 2E 45 72 72 6F 72 4E 75 6D 3B dinal].ErrorNum;
029930: 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C ...ScreenControl
029940: 28 44 65 6C 45 6F 6C 29 3B 0D 0A 09 57 72 69 74 (DelEol);...Writ
029950: 65 53 74 72 69 6E 67 28 27 45 72 72 6F 72 20 27 eString('Error '
029960: 29 3B 0D 0A 09 57 72 69 74 65 43 61 72 64 28 45 );...WriteCard(E
029970: 72 72 6F 72 4E 75 6D 62 65 72 29 3B 0D 0A 09 57 rrorNumber);...W
029980: 72 69 74 65 53 74 72 69 6E 67 28 27 28 27 29 3B riteString('(');
029990: 57 72 69 74 65 43 61 72 64 28 45 72 72 6F 72 4F WriteCard(ErrorO
0299A0: 72 64 69 6E 61 6C 2B 31 29 3B 0D 0A 09 57 72 69 rdinal+1);...Wri
0299B0: 74 65 53 74 72 69 6E 67 28 27 20 6F 66 20 27 29 teString(' of ')
0299C0: 3B 57 72 69 74 65 43 61 72 64 28 45 72 72 6F 72 ;WriteCard(Error
0299D0: 43 6F 75 6E 74 29 3B 0D 0A 09 57 72 69 74 65 53 Count);...WriteS
0299E0: 74 72 69 6E 67 28 27 29 20 3A 27 29 3B 0D 0A 09 tring(') :');...
0299F0: 4C 6F 6F 6B 75 70 28 66 2C 27 45 52 52 4D 53 47 Lookup(f,'ERRMSG
029A00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
029A10: 23 00 01 00 02 09 52 E5 23 00 C9 02 00 00 00 02 #.....R.#.......
029A20: 23 00 C5 02 00 00 00 02 23 00 C1 02 00 00 00 02 #.......#.......
029A30: 23 00 C6 02 00 00 00 02 23 00 C2 02 00 00 00 02 #.......#.......
029A40: 23 00 C7 02 00 00 00 02 23 00 C3 02 00 00 00 02 #.......#.......
029A50: 23 00 C8 02 00 00 00 02 23 00 C4 02 00 00 00 02 #.......#.......
029A60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029A70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029A80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029A90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029B00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029B10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029B20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029B30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029B40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029B50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029B60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029B70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029B80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029B90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029BA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029BB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029BC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029BD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029BE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029BF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029C00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029C10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029C20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029C30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029C40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029C50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029C60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029C70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029C80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029C90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029CA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029CB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029CC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029CD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029CE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029CF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029D00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029D10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029D20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029D30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029D40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029D50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029D60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029D70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029D80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029D90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029DA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029DB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029DC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029DD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029DE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029DF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029E00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029E10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029E20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029E30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029E40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029E50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029E60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029E70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029E80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029E90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029EA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029EB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029EC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029ED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029EE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029EF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029F00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029F10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029F20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029F30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029F40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029F50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029F60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029F70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029F80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029F90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029FA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029FB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029FC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029FD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029FE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
029FF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A0A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A0B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A0C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A0D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A0E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A0F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A3A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A3B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A3C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A3D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A3E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A3F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A4A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A4B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A4C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A4D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A4E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A4F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A6A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A6B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A6C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A6D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A6E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A6F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A7A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A7B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A7C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A7D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A7E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A7F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A8A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A8B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A8C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A8D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A8E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A8F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A9A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A9B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A9C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A9D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A9E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02A9F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AA00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AA10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AA20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AA30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AA40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AA50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AA60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AA70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AA80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AA90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AAA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AAB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AAC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AAD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AAE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AAF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AB00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AB10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AB20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AB30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AB40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AB50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AB60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AB70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AB80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AB90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ABA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ABB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ABC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ABD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ABE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ABF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AC00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AC10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AC20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AC30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AC40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AC50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AC60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AC70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AC80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AC90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ACA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ACB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ACC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ACD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ACE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ACF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AD00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
02AD10: 24 00 01 00 02 09 52 E5 24 00 C9 02 00 00 00 02 $.....R.$.......
02AD20: 24 00 C5 02 00 00 00 02 24 00 C1 02 00 00 00 02 $.......$.......
02AD30: 24 00 C6 02 00 00 00 02 24 00 C2 02 00 00 00 02 $.......$.......
02AD40: 24 00 C7 02 00 00 00 02 24 00 C3 02 00 00 00 02 $.......$.......
02AD50: 24 00 C8 02 00 00 00 02 24 00 C4 02 00 00 00 02 $.......$.......
02AD60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02AD70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02AD80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02AD90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02AE00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AE10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AE20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AE30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AE40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AE50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AE60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AE70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AE80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AE90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AEA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AEB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AEC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AEE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AEF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AF00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AF10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AF20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AF30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AF40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AF50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AF60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AF70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AF80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AF90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AFA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AFB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AFC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AFD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AFE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02AFF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B0A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B0B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B0C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B0D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B0E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B0F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B3A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B3B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B3C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B3D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B3E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B3F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B4A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B4B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B4C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B4D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B4E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B4F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B6A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B6B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B6C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B6D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B6E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B6F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B7A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B7B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B7C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B7D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B7E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B7F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B8A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B8B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B8C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B8D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B8E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B8F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B9A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B9B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B9C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B9D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B9E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02B9F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BA00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BA10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BA20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BA30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BA40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BA50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BA60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BA70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BA80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BA90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BAA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BAB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BAC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BAD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BAE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BAF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BB00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BB10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BB20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BB30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BB40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BB50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BB60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BB70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BB80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BB90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BBA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BBB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BBC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BBD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BBE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BBF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BEA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BEB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BEC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BEE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BEF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BF00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BF10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BF20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BF30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BF40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BF50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BF60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BF70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BF80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BF90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BFA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BFB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BFC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BFD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BFE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BFF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C000: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
02C010: 25 00 01 00 02 09 52 E5 25 00 C9 02 00 00 00 02 %.....R.%.......
02C020: 25 00 C5 02 00 00 00 02 25 00 C1 02 00 00 00 02 %.......%.......
02C030: 25 00 C6 02 00 00 00 02 25 00 C2 02 00 00 00 02 %.......%.......
02C040: 25 00 C7 02 00 00 00 02 25 00 C3 02 00 00 00 02 %.......%.......
02C050: 25 00 C8 02 00 00 00 02 25 00 C4 02 00 00 00 02 %.......%.......
02C060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CEA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CEB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CEC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CEE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CEF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D300: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
02D310: 26 00 01 00 02 09 52 E5 26 00 C9 02 00 00 00 02 &.....R.&.......
02D320: 26 00 C5 02 00 00 00 02 26 00 C1 02 00 00 00 02 &.......&.......
02D330: 26 00 C6 02 00 00 00 02 26 00 C2 02 00 00 00 02 &.......&.......
02D340: 26 00 C7 02 00 00 00 02 26 00 C3 02 00 00 00 02 &.......&.......
02D350: 26 00 C8 02 00 00 00 02 26 00 C4 02 00 00 00 02 &.......&.......
02D360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DEA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DEB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DEC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DEE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DEF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E600: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
02E610: 27 00 01 00 02 09 52 E5 27 00 C9 02 00 00 00 02 '.....R.'.......
02E620: 27 00 C5 02 00 00 00 02 27 00 C1 02 00 00 00 02 '.......'.......
02E630: 27 00 C6 02 00 00 00 02 27 00 C2 02 00 00 00 02 '.......'.......
02E640: 27 00 C7 02 00 00 00 02 27 00 C3 02 00 00 00 02 '.......'.......
02E650: 27 00 C8 02 00 00 00 02 27 00 C4 02 00 00 00 02 '.......'.......
02E660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E670: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E690: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EEA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EEB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EEC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EEE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EEF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
RESULT OF SEARCH :
PRO=270 CHEA=2 COD=51 MUSI=0 COP=9 GRA=33 WRIT=434 198=5 199=0 STARTER=0 KBI=0 CAAV=0 L.TOURNIER=0
EXTENDED CPC DSK File SAMdisk140311( R! ! !222 2!G7£o(! !$ q(a 2y Wp((2R8
#!(Gw#2# .# WDEL V2.0 (C) 1987 HiSoft $Drive is R/O!$No matching files$ Cannot
delete!$ Delete (Y/N/A/Q/P) $*"QRhB8KGB h2!l #- #Q(B # 2mh2BF!m ! ! !!Q(G2
!Q!LB!"L# B( -B qa 2b(1w(,y 2p(!B2(22BQB2#bk6"!F# #(h2(4!+6B#6A#V6K"!#3WP C
OMSD COMWD COM-2JULY1987 -BACKUPNOW!-VERSION124CAT MOD CAT MO
DCOMMAND DEFCOMMAND MODCOMPARE MODa !"#$%&COMPBIN MOD '(COMPDIR MODN)*+,-./012FI
LEOPS DEF3FILEOPS MOD456GETFILESDEF7r+s+w""(w"#GH .HsH#2go"Q *#"!R02Kx(#Q"(!x "
O! !jR0Ur+ x # A 0G22GO!-++ ## #Q(B22WP V3.0 (C) 1987 HiSoft Buffer size $ $N
o files$ Open failed$ Disc I/O error (Full )$ to $ Same$ Copy (Y/N/A/Q/P/B/W)
$ LGETFILESMOD89IMPORT DEFIMPORT MODABCDMACROS MBE3EFGHIJKMLU MODdLMNOPQR
STUVWXPATTERN DEF0YZPATTERN MOD5abcdeSCREENIOEARUfghijklmnopSCREENIOMBESqrstuvwx
yzSCREENIOOSBPTESTPAT MODEDITCONTDMBnEDITDISPDMB52! !2U2 ! 2"V####2X6 A!!e(G2
eG!eA. (+4(1nf( +#M7NU2U(# .#!eGX8% (nfVutXNWEnfut!eGR(( X(# 00P*Vnf"YG72KY28y(
#kbG(M#.!NK!d Ur+ x # A 0!jR0SD V1.0 by Adam Denning (C) HiSoft 1986 $$ S$ $R
$ $K Recs $ Disc free space $function i sourc an Man librar form j,kINTEGE
R BEGIN j3 WHILE (j0) AND (i0) DO ki DIV 10 TextjCHR(i-10*k+ORD('0')) ik
jj-1 Rdoubled. But few files will have more than 2000 lines in them, so it
didn't seem worth the extra effort. You can change the upper bound at will
to change the size of the table. *) HighWaterCARDINAL(*The top entry in P
ostable which is valid*) VARLineOfFileCARDINAL ContinuationBOOLEANFALSE(*true
if line is continuation of previous line*) PROCEDURE AddMarker (*Add a
marker to the position table. LinOfFile gives line number*) BEGIN IF (LineOfF
ileHIGH(PosTablRreplyINTEGER i,jINTEGER InfFILE(*input file*) (*The input i
s buffered Buffer contains the text to buffer BlockNo contains the numb
er of the first block in the buffer This variable is modified by the random
positioning code to reflect changes in the file position CharPos gives t
he character number of the next character to be listed from the buffer Cha
rCount gives number of valid characters in the buffer, it may be less than
the buffer length when end-of-file is encountered *) BufferARRAY0..BufferS
ize-1 OF CHAR NextBlockNo,BlockNoCARDINAL CharPosCARDINAL CharCountCARDINAL
PageNumberINTEGER PageLenCARDINAL24 PROCEDURE ReadBuffer BEGIN BlockNoNext
BlockNo ReadBlock(Inf,ADR(Buffer),0,BufferSize,reply) CharCountreply (*Pad
rest of buffer with end-of-file characters Normally, CharCount will equal HIG
H(buffer)+1, so no padding takes place*) FOR CharPosCharCount TO HIGH(Buff
er) MODULE Cat (*List one of more files to the terminal Call is CAT (w
ild card) file name,.... Options Where the wild card file names are the names
of files to list The options are P - run in page mode in page mode, at
the end of each screen of output, a prompt line is presented. P may
be followed by the screen length in lines default is 24 N - output line
numbers W - wrap lines longer than screen width W may be followed by scre
en width inDO BufferCharPosEOF END CharPos0 (*increment NextBlock to allow f
or data read*) NextBlockNoINTEGER(BlockNo)+reply DIV BlockSize END ReadBuffe
r VARchCHAR(*next character read*) PROCEDURE NextChar BEGIN IF CharPosCh
arCount THEN ReadBuffer END (*IF CharPosCharCount*) chBufferCharPos INC(Ch
arPos) END NextChar (*File positioning routines You can position a file b
y i)Giving the number of the line to list from ii)Giving a string character
s default is 80 I - expand tabs to spaces For example CAT b*.d
ef b*.mod b*.subP16W100N This is a hack of the LIST program which comes w
ith my Modula-2 compiler. (But highly modified) Limitations At most 10 (w
ild card) file names can be used Each wild card should not match more than 100
actual files Dave Moore *) FROM SYSTEM IMPORT ADDRESS,ADR,TSIZE FROM Comm
and IMPORT Parameter,Parclass,GetParams FROM Files IMPORT FileNamto list in the
form /string/ (where / is any non-alphanumeric character) iii)A combination o
f the two 10/string/ to start search at a given line. *) TYPEPositionRECORD
BlockNumberCARDINAL(*Block in which line starts*) CharOffsetCARDINAL(*Character
offset in buffer*) END VARPosTableARRAY1..2000 OF Position (*This code co
uld be made more fancy by having an increment size so that as the PosTable be
comes full, every second entry is removed and the increment e,FILE,Lookup,Cre
ate,ReadBlock,SetBlock FROM GetFiles IMPORT GetNames FROM Terminal IMPORT Writ
eString,WriteLn,Write,Read,BusyRead,ClearCharBuffer FROM Sort IMPORT SortRecord
s FROM IntLogic IMPORT IAND FROM SmallIO IMPORT WriteInt,WriteHex,WriteCard C
ONSTBufferSize4096(*Bytes to read in a single block*) BlockSize128(*Block size
in bytes--used for random positioning*) CR0dx LF0ax TAB09x EOF1ax BS08
x DEL7Fx TYPE PFileNamePOINTER TO FileName VA R PageWidthCARDINAL80 Lin
eNumberCARDINAL VAREndOfFileBOOLEAN(*set true after ** End of File ** has
been output by WriteLine*) (*Write a line of output The first character of
the line to be written must be available in the variable ch before entry to th
e routine *) PROCEDURE WriteLine VARCharsWrittenCARDINAL BEGIN CharsW
ritten0 IF NumberLines THEN IF Continuation THEN WriteString(' ') EL
SE WriteInt(LineOfFile,5) Write('') s routine does a plain simple search. Ther
e are much faster ways of doing searches, but they are probably going to be sw
amped by the IO time anyway*) VARstringMatchString lenCARDINAL nchCHAR i,jCA
RDINAL PartialPosARRAY1..60 OF CARDINAL PartialsCARDINAL BEGIN len0 LOOP R
ead(nch) IF (nchBS) OR (nchDEL) THEN IF len0 THEN DEC(len) END ELSIF (nchDeli
miter) OR (lenHIGH(string)) OR (nchCR) OR (nchLF) THEN EXIT ELSE INC(len) s
tringlene)) AND (LineOfFileHighWater) THEN HighWaterLineOfFile WITH PosTableHi
ghWater DO BlockNumberBlockNo CharOffsetCharPos END END END AddMarker PR
OCEDURE RepositionFile (*Reposition file to line number given by LineOfFile.
This line number need not be within the part of the file already examined (o
r previously skipped) so that it may be necessary to advance as far as possible
and then scan forward. This routine only handles positioning by line number-
-seench END (*IF chBS etc*) END(*LOOP*) stringlen+10x(*set so string can la
ter be printed*) IF len0 THEN LastLenlen LastStringstring END IF LastLen0
THEN WriteString(' Error - no previous search string') WriteLn ELSE(*start m
atch*) Partials0 LOOP IF chEOF THEN EXIT END WHILE chCR DO NextChar IF chL
F THEN NextChar END INC(LineOfFile) AddMarker END (*add a new partial match
which has just matched Search for positioning by string match.*) VARRequi
redCARDINAL BEGIN RequiredLineOfFile (* Recalculate page number assuming t
hat no lines overflowed (that is, that the maximum number of lines occured on e
ach page). Note that the page number is always incremented before it is pr
inted so that this code does not result in page numbers that are one too small.
*) PageNumber(LineOfFile-1) DIV (PageLen-2) IF LineOfFileHighWater THEN Li
neOfFileHighWater END Conti the null string*) INC(Partials) PartialPosPart
ials1 (*try to advance all the existing partially completed matches*) j
0 FOR i1 TO Partials DO nchLastStringPartialPosi IF (nchch) OR (CAP(nch)ch) T
HEN (* the two conditions in the above line provide for lower case to in
the match string to match either case*) INC(j) PartialPosjPartialPosi+1
IF PartialPosjLastLen THEN EXIT (*match foundnuationFALSE IF LineOfFile0
THEN WITH PosTableLineOfFile DO IF BlockNumberBlockNo THEN SetBlock(Inf,
BlockNumber) NextBlockNoBlockNumber ReadBuffer END CharPosCharOffset-1 Next
Char(*re-prime character pointer*) (*The required character is one less than
the saved marker as the character pointer is incremented after the first char
acter of the line is returned. But the block is correct, because the 'position
beyond end of block' is no*) END END END Partialsj NextChar END (*eith
er chEOF or a match has been found*) IF chEOF THEN WriteLn WriteString(LastSt
ring) WriteString(' could not be found') ELSE RepositionFile (*to start of cu
rrent line*) END END(*search string entered or existed*) END Search (*Opti
on flags and screen dimensions*) VARPageModeBOOLEANFALSE LineWrapBOOLEANFALS
E NumberLinesBOOLEANFALSE ExpandTabsBOOLEANFALSE t checked until the followin
g character is sought*) END(*WITH*) END(*IF LineOfFile0*) WHILE LineOfFil
eRequired DO WHILE chCR DO NextChar END NextChar IF chLF THEN NextChar END I
NC(LineOfFile) AddMarker END END RepositionFile TYPEMatchStringARRAY1..60
OF CHAR VARLastStringMatchString LastLenCARDINAL0(*length of last matched st
ring*) PROCEDURE Search(DelimiterCHAR) (*Search for a string from the curr
ent position in the file Thi Rnes per page') WriteLn WriteString('W64
- toggle line wrap, set 64 columns per line') WriteLn WriteString('I
- toggle tabs expansion') WriteLn WriteString('N - toggle li
ne numbering')WriteLn WriteString(' Command') END PrintHelp PROCEDURE NewVa
lue(VAR defaultCARDINALlimitCARDINAL) VARiCARDINAL BEGIN Read(ch) iNumber()
IF ilimit THEN defaulti END END NewValue BEGIN EndOfFileFALSE NextBlockNo
0 LineNumber2file,file,...options')WriteLn WriteString(' where file is a file
to list or a wild card for files to list') WriteLn WriteLn WriteString(' The
options are')WriteLn WriteString('P - output in page mode')WriteLn WriteString
('N - number lines on output')WriteLn WriteString('W - wrap long lines')WriteLn
WriteString('I - expand tabs to spaces')WriteLn WriteLn WriteString(' for ex
ample CAT *.DEFP16W20N')WriteLn HALT END Usage VARParamARRAY 0..10
END END IF NOT Continuation THEN AddMarker INC(LineOfFile) END Continuati
onFALSE LOOP (*strip top bit - should probably be option controlled*) I
F CharsWrittenPageWidth THEN ContinuationTRUE WriteLn RETURN END IF ch80
x THEN chCHR(ORD(ch)-80h) END CASE ch OF EOF(*End of File character found,
(either from file or generated by NextChar) if nothing has been printed on
line, just return end of file status OF Parameter CountINTEGER NamesARRAY
0..100 OF FileName NameCount INTEGER Counter INTEGER Cnter INTEGER (*O
utput the file already opened*) PROCEDURE OutputFile(NameARRAY OF CHAR) VA
RchCHAR iCARDINAL PROCEDURE PageHeader BEGIN WriteLn WriteString(Name) (
* If terminal supports tabs, put page number on right hand side of screen, othe
rwise just go in 10 chars to save time on alow links*) IF NOT ExpandTabs THE
N FOR i27 TO PageWidth BY 8 DO W If line was incomplete, print EOF and retu
rn*) IF (CharsWritten0) THEN WriteString(' ** End of File **') EndOfFile
TRUE ELSE WriteString('EOF') END RETURN CR(*Carriage return found*) Ne
xtChar IF (chLF) THEN NextChar END WriteLn EXIT LF(*must be a stray line f
eed, treat as a line terminator*) WriteLn EXIT TABREPEAT INC(CharsWritt
en) IF CharsWrittenPageWidth THEN rite(TAB) END ELSE FOR i1 TO 10 DO Write('
') END END WriteString('Page ') WriteInt(PageNumber,5) WriteLn END PageHea
der PROCEDURE Number()CARDINAL TYPECharSetSET OF CHAR VARiCARDINAL BEGIN
i0 WHILE ch IN CharSet'0'..'9',BS,DEL DO IF (chBS) OR (chDEL) THEN ii DIV 10
ELSE i10*i+(ORD(ch)-ORD('0')) END Read(ch) END RETURN i END Number PROCED
URE PrintHelp BEGIN WriteString(' Examples of possible responses')WriteLn Wri
tWriteLn ContinuationTRUE RETURN(*note that tab gets processed again at sta
rt of next line*) END IF ExpandTabs OR NumberLines THEN Write(' ') END UNTIL
IAND(CharsWritten,7)7 IF NOT (ExpandTabs OR NumberLines) THEN Write(TAB) END
0x..1fx(*non-printing characters. This is cheating slightly - should exclude
CR LF and TAB*) IF CharsWritten(PageWidth-4) THEN WriteLn ContinuationTRUE
RETURN END Write('') WeString(' - This message')WriteLn WriteStri
ng(' 227 - list from line 227')WriteLn WriteString(' +20 or -20 - go
forward (back) 20 lines') WriteLn WriteString(' q (or Q) - go to next file'
)WriteLn WriteString(' Control C - abort run')WriteLn WriteString('/stri
ng/ - list from next occurence of string') WriteLn WriteString('100/string
/ - list from first occurence after line 100') WriteLn WriteString('P20
- toggle page mode set 20 liriteHex(ORD(ch),2) Write('') CharsWrittenChars
Written+4 ELSEWrite(ch) INC(CharsWritten) END(*CASE*) NextChar END(*LOOP*
) END WriteLine (*The next routine is used by the sort module to perform ke
y comparisons*) PROCEDURE Compar(a,bADDRESS)BOOLEAN VARp,qPFileName BEGIN
pPFileName(a) qPFileName(b) RETURN pq END Compar PROCEDURE Usage BEGIN Wri
teString('Usage is CAT file,file,...')WriteLn WriteString(' or CAT
RDEFINITION MODULE Command (*Command line processor*) FROM SYSTEM IMPORT BYT
E TYPE Parclass(name,string,option) (*Parclass is a best guess style of t
hing If the parameter is in quotes it is a string If it follows a '' or a '/'
it is an option (there is only ever one option parameter. It is always last, a
nd it contains everything from the / or onwards Everything else is a name (n
o validity checking performed*) TextRECORD LengthBYTE(*returns bytes in para
meN WITH ParamCount-1 DO (*Recognise flags*) i0 WHILE iCARDINAL(Length)
DO CASE Charsi OF 'I'ExpandTabsTRUE INC(i) 'W'LineWrapTRUE INC(i)
PageWidthGetNum(Chars,i,ORD(Length)) IF PageWidth0 THEN PageWidth80 END
(*Check page width is reasonable*) IF PageWidth32 THEN WriteLn Writ
eString(' *** Page width too narrow ***') WriteLn Usage END 'N'Number
LineOfFile1 PageNumber1 CharPos1 CharCount0 HighWater0 NextChar(*prime look
-ahead character*) WriteLn HighWater0 IF PageMode THEN PageHeader END LOOP
IF EndOfFile THEN EXIT END WriteLine INC(LineNumber) (* check for anythi
ng types at console if ctrl c, the abort, if q or Q*) BusyRead(ch) IF (P
ageMode AND ((LineNumberPageLen) OR EndOfFile)) OR (ch0x) THEN IF EndOfFil
e THEN DEC(CharPos) END EndOfFileFALSELinesTRUE INC(i) 'P'PageModeTRUE
INC(i) PageLenGetNum(Chars,i,ORD(Length)) IF PageLen0 THEN PageLen2
4 END (*Check page length is reasonable*) IF PageLen10 THEN WriteLn
WriteString(' *** Page length too short ***') WriteLn Usage END ELSE
Usage END(*CASE*) END(*WHILE*) END (*WITH*) DEC(Count) END (*IF opt
ion*) IF Count0 THEN Usage END IF Nu PageModeTRUE WriteString(' Command ')
IF ch0x THEN Read(ch) ELSE Write(ch) ClearCharBuffer END LOOP CASE C
AP(ch) OF 'P'PageModeNOT PageMode NewValue(PageLen,12) 'N'NumberLinesNOT
NumberLinesRead(ch) 'I'ExpandTabsNOT ExpandTabsRead(ch) 'W'LineWrapNOT LineWra
p NewValue(PageWidth,40) ''PrintHelpRead(ch) '+'Read(ch) LineOfFile
LineOfFile+Number() RepositionFile '-mberLines THEN PageWidthPageWidth-6 E
ND FOR i0 TO CARDINAL(Count-1) DO GetNames(Parami.Chars,Names,NameCount) IF
NameCount1 THEN SortRecords(ADR(Names),CARDINAL(NameCount), TSIZE(FileName),C
ompar) END FOR j0 TO NameCount-1 DO Lookup(Inf,Namesj,reply) IF reply0 THEN
WriteString(' Could not open ') WriteString(Namesj) WriteLn ELSE OutputFile
(Namesj) END END END END Listit BEGIN Listit END Cat. 'Read(ch) iNu
mber() IF iLineOfFile THEN LineOfFile1 ELSE LineOfFileLineOfFile-i END
RepositionFile '0'..'9'LineOfFileNumber() RepositionFile '!'..'*
',',','.','/',''..'',''..'', ''..'' Search(ch)Read(ch) 03x HALT ELSE EXIT
END(*CASE*) END(*LOOP*) IF CAP(ch)'Q' THEN EXIT END INC(PageNumber) Pa
geHeader LineNumber2 END END END OutputFile PROCEDURE Listit VARiCARDI
NAL PROCEDURE GetNum(CharsARRAY OF CHARVAR PosCARDINALLenCARDINAL)CARDINAL
(*Get a number from a parameter in the command line*) TYPECharSetSET OF CHAR
VARiCARDINAL BEGIN i0 WHILE (PosLen) AND (CharsPos IN CharSet'0'..'9') DO i1
0*i+ORD(CharsPos)-ORD('0') INC(Pos) END RETURN i END GetNum BEGIN GetPar
ams(Param,Count) Counter 1 IF Count0 THEN Usage END IF Par
amCount-1.Classoption THE Rom file (i.e. very near the beginning) Each contro
l code can be up to 8 characters long and is terminated by a value of 0 if less
than 8 characters is required The control characters in the supplied program
are set for a STAR DPS510, which is supposed to be Epson compatible, so the pr
ogram may well run 'as is' on Epsons and Epson clones The program is based o
n a method described by Paul Heckel 'A Technique for Isolating Differences betw
een Files', Communications of the ACM, Vol 21 No 4, Charslen0x END countcoun
t+1 END Build (*crack the command line*) BEGIN i0 count0 LOOP IF countHIG
H(p) THEN EXIT END WHILE (iINTEGER(CommLength)) AND (CommTexti' ') DO INC(
i) END IF iINTEGER(CommLength) THEN EXIT END CASE CommTexti OF '','/'(*Optio
n found*) INC(i) Build(INTEGER(CommLength)-i,0dx,option) EXIT '"',"'"ji+1
WHILE (CommTextiCommTextj) AND (jINTEGER(CommLength)) DO INCter*) Terminato
rCHAR(*returns next character, or delimiter for strings*) ClassParclass(*class
of parameter*) CASE BOOLEAN OF FALSEFilePosCARDINALErrorNoCARDINAL T
RUECharsARRAY0..127 OF CHAR END (*parameter - always terminated by a ze
ro byte, but that byte is not included in the length*) END ParameterPOINT
ER TO Text PROCEDURE GetParams(VAR pARRAY OF ParameterVAR countINTEGER) (*crac
k the command line*) VARCommLeng(j) END INC(i) Build(j-i,CommTexti-1,string)
INC(j) ELSEji+1 WHILE (CommTextj' ') AND(CommTextj',') AND(CommTextj''
) AND(CommTextj'/') AND (jINTEGER(CommLength)) DO INC(j) END Build(j-i,Comm
Textj,name) END(*case*) ij IF CommTexti',' THEN INC(i) END END (*LOOP*) E
ND GetParams END Command. th80hBYTE CommText81hARRAY0..126 OF CHAR END Co
mmand. d DO WHILE chCR DO NextChar END NextChar IF chLF THEN NextChar END I
NC(LineOfFile) AddMarker END END RepositionFile TYPEMatchStringARRAY1..60
OF CHAR VARLastStringMatchString LastLenCARDINAL0(*length of last matched st
ring*) PROCEDURE Search(DelimiterCHAR) (*Search for a string from the curr
ent position in the file ThiMODULE Compare (*Compare two files Call is
COMPARE old file,new file,List file The two files are compared line by line
lines which have been deleted from the old file are printed in italics line
s which have been inserted are printed in emphasised mode lines which have been
moved to a new position are printed in their new position with a box surroundi
ng them You may need to patch the printer control codes for your printer The
se control codes are at about address 104h in the cIMPLEMENTATION MODULE Command
(*Command line processor*) FROM Storage IMPORT ALLOCATE FROM SYSTEM IMP
ORT ADDRESS VARi,j,kINTEGER PROCEDURE GetParams(VAR pARRAY OF ParameterVAR cou
ntINTEGER) PROCEDURE Build(lenINTEGERchCHARcParclass) VARadADDRESS BEGIN A
LLOCATE(ad,len+4) pcountad WITH pcount DO IF jINTEGER(CommLength)THEN Termina
tor0dx ELSE Terminatorch END Lengthlen Classc FOR k0 TO len-1 DO CharskComm
Texti+k END Rthe lines are unique and they match - set up cross pointers*)
OldLinkki NewLinkik END END (*IF count1 (the outer one)*) END (*FOR i*) (
*at this point, NewLinkij OldLineji This condition is central to the whole pro
gram*) (*now that the unique lines are cross-linked, we attempt to 'grow' t
he links outwards from the cross-linked lines*) k1 WHILE (kOldLen) DO IF Ne
wLinkk0 THEN (*grow backwards*) jNewLinkk-1 when one of the files is on
a remote machine since then only the hash totals and the altered lines need to
be transmitted*) TYPEHashArrayARRAY1..MaxFileSize OF CARDINAL VAROldHash,Ne
wHashHashArray OldLen,NewLenCARDINAL PROCEDURE CalcHash(VARTextARRAY OF CHAR)C
ARDINAL VARi,jCARDINAL BEGIN i0 j0 WHILE (iHIGH(Text)) AND (Texti0x) DO
(*add your favourite hashing function here*) j3*j+ORD(Texti) INC(i) END RE
TURN j END CalcHash PROCEDUR April 1978, pp 264-268. Basically, the techni
que consists of comparing the two files to find all the unique lines in each wh
ich match a unique line in the other. These lines give fixed points from which
matching regions can be grown outwards. Once all the regions so produced have
been created, any line in the old file which is not attached to a line in the
new file is a deletion. Any line in the new file which is not attached to a li
ne in the old file is an insertion, while a block moveE ReadStream(VAR sSTREAMV
AR HashHashArray)CARDINAL (* Read in a file and calculate the hash totals for
the file *) VARiCARDINAL LineARRAY1..80 OF CHAR BEGIN SwitchInStream(s) i0
WHILE (iHIGH(Hash)) AND (NOT EOS(s)) DO ReadLine(Line) INC(i) HashiCalcHa
sh(Line) END Reset(s) PopInStream RETURN i END ReadStream PROCEDURE
Usage BEGIN WriteString('Usage is COMPARE old file,new file')WriteLn Write
String(' or COMPARE old f is encountered when the lines pointed to in th
e old file are further down the file than some other lines which have not yet b
een processed and which are associated with lines in the new file. *) FRO
M SYSTEM IMPORT ADDRESS,ADR,TSIZE FROM Command IMPORT Parameter,Parclass,GetPar
ams FROM Files IMPORT FileName,FILE,Lookup,Create FROM Streams IMPORT Connect,
Disconnect,STREAM,input,output,WriteChar, ReadChar,EOS,WriteRec,Reset FROM Ter
minalIMPORT WriteString,WriteLn FROM Soile,new file,output file') WriteLn Wri
teLn WriteString(' for example COMPARE ME.BAK ME.MOD')WriteLn HALT END Usage
VAROldLink,NewLinkHashArray (*OldLink contains the number of a line in th
e new file which is linked to a given line in the old file, and vice-versa An
entry contains zero if no link has been made*) PROCEDURE GenerateLinks V
ARi,j,kCARDINAL countCARDINAL BEGIN FOR i1 TO HIGH(OldLink) DO OldLinki0 Ne
wLinki0 END (*lookrt IMPORT SortRecords FROM InOut IMPORT WriteCard,SwitchI
nStream,SwitchOutStream, PopInStream,PopOutStream,ReadLine CONSTMaxFileSize200
0(*lines in file max*) FF0cx TAB09x LF0ax CR0dx TYPE PFileNamePOINTER TO Fi
leName PrintControlARRAY0..7 OF CHAR VAR (*Printer Control Codes a zero byte
terminates*) ItalicsOnPrintControl1bx,'4',0 ItalicsOffPrintControl1bx,'5',0
BoldOnPrintControl1bx,'E',0 BoldOffPrintControl1bx,'F',0 for all old lines
which match exactly one new line*) FOR i0 TO OldLen DO count0 j1 WHILE (co
unt2) AND (jNewLen) DO IF OldHashiNewHashj THEN INC(count) kj END INC(j)
END IF count1 THEN (*possible match - check that the new line only matches
this old line*) count0 j1 WHILE (count2) AND (jOldLen) DO IF OldHashjNewHa
shk THEN INC(count) END INC(j) END IF count1 THEN (* ListSTREAM ListFF
ILE replyINTEGER i,jINTEGER OldsSTREAM OldfFILE NewsSTREAM NewfFILE
chCHAR CharPosCARDINAL(*position in line*) (*For each file, we have an ar
ray of hash totals for the lines of the file Using hash totals instead of the o
riginal lines causes a slight chance that lines will match when they should not
, but allows larger files to be compared and also makes it possible to extend t
he program in the future to work with reasonable speed R but each pointer p
oints somewhere If the text in the new file pointed to by the old file has
been passed, it has already been written so we ignore the old line and loo
k for something more interesting (e.g. a Scotsman winning Wimbledon) Be
cause of the central predicate, we know that NewLinkOldLinknewindexnewindex
and OldLinkNewLinkoldindexoldindex *) ELSIF NewLinkoldindexnewindex
THEN SkipOld INC(oldindex) (* so NewLinx,6) WriteCard(newindex,6)WriteC
ard(OldLinknewindex,6) PopOutStream *) WriteChar(List,0dx) WriteChar(List,0a
x) END WriteEol PROCEDURE Deleted (*Print out a line from the old file*)
BEGIN GetLine(Olds,oldline) Print(ItalicsOn) Print(oldline) Print(Italics
Off) WriteEol END Deleted PROCEDURE SkipOld BEGIN GetLine(Olds,oldline)
END SkipOld PROCEDURE Inserted BEGIN GetLine(News,newline) Print(BoldOn)
Print(newline) Print(BoldOff) Wriik-1 WHILE (j0) AND (i0) AND (OldLinkj+1i+1)
AND (NewHashjOldHashi) AND (OldLinkj0) AND (NewLinki0) DO OldLinkji NewLin
kij (* note central predicate still satisfied*) DEC(i) DEC(j) END jNewL
inkk+1 ik+1 (*grow forwards - (slight optimisation) there is no need to c
heck for nonzero links on the forward pass since non-zero links Lines match a
nd are unique, and the back pass would be empty*) teEol END Inserted PROCEDU
RE NoChange BEGIN GetLine(News,newline) GetLine(Olds,oldline) Print(newline)
WriteEol END NoChange PROCEDURE BlockMove VAR iCARDINAL BEGIN FOR i1 TO
25 DO WriteChar(List,'*') END Print(' Block moved from line ') SwitchOutStrea
m(List) WriteCard(OldLinknewindex,6) PopOutStream FOR i25+29+1 TO 79 DO Write
Char(List,'*') END WriteEol iOldLinknewindex WHILE (newindexNewLen) AND (iOld
Linknewindex) DO GetLine(News,ne WHILE (jNewLen) AND (iOldLen) AND (OldLinkj-1i
-1) AND (NewHashjOldHashi) DO OldLinkji NewLinkij (*still holds*) INC(i
) INC(j) END ki ELSEINC(k) END (*WHILE kOldLen*) END (*grow forwards fr
om beginning of files*) i1 j1 WHILE (iOldLen) AND (jNewLen) AND (OldHashi
NewHashj) AND (NewLinki0) AND (OldLinkj0) DO (*the last line of the conditi
on is probably not necessary, but awline) Print(newline) WriteEol INC(newi
ndex) INC(i) END FOR i1 TO 79 DO WriteChar(List,'*') END WriteEol END Block
Move BEGIN oldindex1(*current line in old file*) newindex1(*current line
in new buffer*) (*Caution Well commented code ahead Programmer probably did
n't understand what he was doing *) WHILE (oldindexOldLen) OR (newindexNewL
en) DO (*first check if either index is off end of file*) IF newindexNewLen
THEN voids worrying about pathological case*) NewLinkij OldLinkji INC(i)
INC(j) END (*grow backwards from end of files*) iOldLen jNewLen WHILE (
i0) AND (j0) AND (OldHashiNewHashj) AND (NewLinki0) AND (OldLinkj0) DO NewLi
nkij OldLinkji DEC(i) DEC(j) END END GenerateLinks PROCEDURE WriteResu
lts VARoldindex,newindexCARDINAL oldline,newlineARRAY 1..80 OF CHAR PROCEDU
RE GetLine(VAR sSTREAMVAR lARRAY Deleted INC(oldindex) ELSIF oldindexOldLen TH
EN Inserted INC(newindex) ELSIF NewLinkoldindex0 THEN Deleted INC(oldindex)
ELSIF OldLinknewindex0 THEN Inserted INC(newindex) (*if pointers match, l
ine is unchanged or if a pointer is zero, line is new or deleted*) ELSIF (Ne
wLinkoldindexnewindex) AND (OldLinknewindexoldindex) THEN NoChange INC(o
ldindex) INC(newindex) (* none of the above pointers don't matchOF CHAR)
BEGIN SwitchInStream(s) ReadLine(l) PopInStream END GetLine PROCEDURE Pr
int(aARRAY OF CHAR) (*Output a line truncating trailing spaces*) VAR i,jCA
RDINAL BEGIN i0 j0 WHILE (iHIGH(a)) AND (ai0x) DO IF ai' ' THEN FOR jj TO
i DO WriteChar(List,aj) END INC(j) END INC(i) END END Print PROCEDURE
WriteEol BEGIN (*debug code commented out SwitchOutStream(List) WriteCard(
oldindex,6)WriteCard(NewLinkoldinde ReqReadBlock(In2,ADR(Block2),128,reply2) W
riteHex(Loc,4) WriteString(0dx) IF (reply1128) OR (reply2128) THEN EXIT END i
0 WHILE (i128) AND (Block1iBlock2i) DO INC(i) END IF i128 THEN FOR i0 TO 127
BY 8 DO WriteHex(Loc+i,4) WriteString('') FOR ji TO i+7 DO WriteHex(Block1j,
2) WriteString(' ') END WriteString(' ') FOR ji TO i+7 DO WriteHex(Block2j,
2) WriteString(' ') END WriteLn Eing*) Reset(News) Reset(Olds) WriteR
esults Disconnect(List,TRUE) END Compare. IF ExpandTabs OR NumberLines THEN
Write(' ') END UNTIL IAND(CharsWritten,7)7 IF NOT (ExpandTabs OR NumberLines)
THEN Write(TAB) END 0x..1fx(*non-printing characters. This is cheating sl
ightly - should exclude CR LF and TAB*) IF CharsWritten(PageWidth-4) THEN Writ
eLn ContinuationTRUE RETURN END Write('') Wkoldindexnewindex but, if
NewLinkoldindexnewindex then OldLinknewindexOldLinkNewLinkoldindexnewlink
which is not true (since the cross-linked case was handled earlier) Hence
NewLinkoldindexnewindex and we can leave the line till later We must theref
ore do something with the new line - it is the start of a moved block *) E
LSE BlockMove(*inc of newindex done in blockmove*) END END(*LOOP*) END Write
Results VARParamARRAY 0..2 OF Parameter CountINTEGER PROCEDURE OpenInput(
VAR sSTREAMVAR fFILEparamParameter) BEGIN Lookup(f,FileName(param.Chars),reply
) IF reply0 THEN WriteString(' Could not open ') WriteString(param.Chars) Wr
iteLn HALT END Connect(s,f,input) END OpenInput PROCEDURE OpenFiles BEGIN
(*Input the parameters, connect the files to streams*) GetParams(Param,Cou
nt) (*If less than 2 parameters, give usage and exit*) IF Count2 THEN Usag
e END (MODULE CompBin (*Compare two binary files *) FROMTerminal IMPORT
WriteString,WriteLn FROMSmallIO IMPORT WriteHex FROMStreams IMPORT Direction
FROMQuickStr IMPORT StreamRecord,OpenStreams,OptionsSet FROMSYSTEM IMPORT A
DR,BYTE FROMFiles IMPORT FILE,SeqReadBlock VARIn1,In2FILE Block1,Block2ARRAY
0..127 OF BYTE reply1,reply2INTEGER LocCARDINAL i,jCARDINAL PROCEDURE VeryQu
ick()BOOLEAN (*Open a stream for input and a stream for output *) VARSARRAY1
..2 *If 3 parameters, third parameter is file to receive output otherwise, atta
ch output to the printer (LST) *) IF Count3 THEN Create(ListF,FileName(Para
mCount-1.Chars),reply) IF reply0 THEN WriteString(' Could not create list file
') WriteLn HALT END ELSE Create(ListF,'LST',reply) END Connect(List,ListF
,output) (*Open the files to be compared*) OpenInput(Olds,Oldf,Param0) Op
enInput(News,Newf,Param1) END OpenFiles PROCEDURE ReadOF StreamRecord oOpti
onsSet BEGIN WITH S1 DO IsStreamFALSE Dirinput LookupFirstFALSE MustSupply
FALSE FileADR(In1) END WITH S2 DO IsStreamFALSE DefaultName'CON' Dirinput
LookupFirstFALSE MustSupplyTRUE FileADR(In2) END RETURN OpenStreams(S,o) E
ND VeryQuick BEGIN IF VeryQuick() THEN WriteString('Files not found ') Writ
eLn HALT END Loc0 LOOP SeqReadBlock(In1,ADR(Block1),128,reply1) SInputFile
s BEGIN WriteString(' Reading old file ') OldLenReadStream(Olds,OldHash) W
riteCard(OldLen,5) WriteString(' lines found')WriteLn WriteString(' Reading
new file ') NewLenReadStream(News,NewHash) WriteCard(NewLen,5) WriteString('
lines found')WriteLn END ReadInputFiles BEGIN(*main program*) OpenFiles
ReadInputFiles WriteString(' Generating cross links')WriteLn GenerateLinks
WriteString(' Listing')WriteLn (*reposition streams to beginn RND END(*WITH
*) END CrackFileName PROCEDURE Usage BEGIN WriteLn WriteString('Usage is
COMPDIR wild card file name') WriteString(', wild card file name , list file
/options') WriteLnWriteLn WriteString(' Options are ')WriteLn WriteString('T
compare only file type ')WriteLn WriteString('Ncompare only file name')WriteLn
WriteString('Ccompare contents of matching files')WriteLn WriteString('EOutput
file names which match to list file')WriteLn Wtory purposes. The program is wr
itten in FTL Modula-2. *) FROM SYSTEM IMPORT ADDRESS,ADR,TSIZE FROM Comma
nd IMPORT Parameter,Parclass,GetParams FROM TerminalIMPORT WriteString,WriteLn,
Write FROM Sort IMPORT SortRecords FROMFiles IMPORT FileName,FILE,Create FROM
GetFilesIMPORT GetNames FROMStringsIMPORT Length FROMStreamsIMPORT STREAM,Conn
ect,Disconnect,WriteChar,Direction IMPORTInOut FROMFileOpsIMPORT FileComp CON
STMaxFiles512(*max files to be matched*ND END LocLoc+128 END END CompBin. e
en processed and which are associated with lines in the new file. *) FROM
SYSTEM IMPORT ADDRESS,ADR,TSIZE FROM Command IMPORT Parameter,Parclass,GetPara
ms FROM Files IMPORT FileName,FILE,Lookup,Create FROM Streams IMPORT Connect,D
isconnect,STREAM,input,output,WriteChar, ReadChar,EOS,WriteRec,Reset FROM Term
inalIMPORT WriteString,WriteLn FROM So) TYPE CompClass(Whole,Name,Type) F
ileRecordRECORD DeviceCHAR NameARRAY1..8 OF CHAR TypeARRAY1..3 OF CHAR END
PFileNamePOINTER TO FileRecord FileArrayARRAY1..MaxFiles OF FileRecord VAR Pa
ramARRAY1..4 OF Parameter(*area for command line*) CountINTEGER(*parameters*)
LeftNames,RightNamesFileArray LeftNameCount,RightNameCountINTEGER Compclas
sCompClassWhole OutputAddedBOOLEANFALSE OutputEqualBOOLEANFALSE CompareConten
tsB(*Revision History 24 March 86 Dave Moore Fixed compilation errors cause
d by upgrading of compiler error checking. Increased MaxFiles to 512. Bugs
Fails if more than MaxFiles files are found. This is not a problem under CP/
M since directories fill before that many files are found, but it can cause pr
oblems under MSDOS (with a Z80 card) *) (*$l-*) MODULE CompDir (*CompD
ir - Compare two directories Dave Moore Cerenkof Computing PO Box 305 WynOO
LEANFALSE OutputDeletedBOOLEANFALSE OutputModifiedBOOLEANFALSE ListOpenBOOL
EANFALSE ListSTREAM ListFFILE PROCEDURE CrackFileName(TextARRAY OF CHARVAR Re
cFileRecord) (*Convert the text form of a file name to the expanded form*)
VARi,jCARDINAL BEGIN WITH Rec DO IF Text1'' THEN DeviceCAP(Text0) i2 ELSE
Device' ' i0 END j1 (*pick up file name *) WHILE (iHIGH(Text))
AND(Texti0x) ANDnum Central 4178 Call is COMPDIR wild card,wild card
,list file options Where each wild card produces one of the lists to compare
For example, to compare two discs, do COMPDIR a*.* b*.* Options are any of
the following Tcompare only file type (by default, the whole name is compared)
(by file type, I mean the (3) characters after the dot) Ncompare only file na
me Cif file names match, check file contents as well These two options are
mutually exclusive (Texti' ') AND(Texti'.') DO IF jHIGH(Name) THEN N
amejTexti END INC(j) INC(i) END FOR jj TO HIGH(Name) DO Namej0x END (*Not
e that I use zero instead of blank fill to simplify listing of the names*) j
1 IF Texti'.' THEN INC(i) END WHILE (iHIGH(Text)) AND(Texti0x) AND
(Texti' ') DO IF jHIGH(Type) THEN TypejTexti END INC(j) INC(i) END FOR jj
TO HIGH(Type) DO Typej0x EEOutput file names which match to list file AOutput f
ile names which have been added to the second list DOutput file names which hav
e been deleted from the first list MOutput files which have been modified to th
e list file These options may be combined The program can be very useful
for updating discs based on their existing contents, which is an area in which
sweep is weak. This is a modified and enhanced version of the original Comp
Dir program which was written for exposi R GIN SetName(f1,fn1) SetN
ame(f2,fn2) RETURN FileComp(fn1,fn2) END CompareOK VARreplyINTEGER BEGIN
GetParams(Param,Count) IF (Count0) AND (ParamCount.Classoption) THEN GetOp
tions(ParamCount) DEC(Count) END IF Count2 THEN Usage END IF Count3
THEN Create(ListF,FileName(Param3.Chars),reply) IF reply0 THEN WriteString('
Could not open output file ') WriteString(Param3.Chars) WriteLn HALT END C
onnect(List,ListF0x) AND (Param.Chars1'') THEN Text' *.*' Text0Param.Chars0 G
etNames(Text,NameText,NameCount) ELSE GetNames(Param.Chars,NameText,NameCount)
END (*crack names*) FOR i1 TO NameCount DO CrackFileName(NameTexti,Name
si) END IF NameCount1 THEN SortRecords(ADR(Names),CARDINAL(NameCount), TSI
ZE(FileRecord),Compar) END END ExpandNames VARi,jINTEGER PROCEDURE Wri
teToList(VAR NFileRecord) BEGIN WITH N DO InOut.WrriteString('AOutput file na
mes which have been added to the second list')WriteLn WriteString('DOutput file
names which have been deleted from the first list')WriteLn WriteString('MOutpu
t file names of modified files ')WriteLn WriteString('(Implies C option)')Write
Ln HALT END Usage PROCEDURE GetOptions(pParameter) VARiCARDINAL BEGIN
WITH p DO i0 LOOP CASE Charsi OF 0xEXIT 'T'CompclassType 'N'CompclassName
'E'OutputEquiteString(Name) WriteChar(List,'.') InOut.WriteString(Type) InOu
t.WriteLn END END WriteToList PROCEDURE WriteName(VAR NFileRecordToListBOOL
EAN) (*output a file record as a valid file name IF Tolist, output it to lis
t as well*) VARiCARDINAL chCHAR BEGIN WITH N DO IF Device' ' THEN ch''
ELSE ch' ' END Write(Device) Write(ch) IF ToList THEN WriteChar(List,Devi
ce) WriteChar(List,ch) END WriteString(Name) WalTRUE 'A'OutputAddedTRUE 'D
'OutputDeletedTRUE 'M'OutputModifiedTRUE CompareContentsTRUE 'C'CompareCo
ntentsTRUE ELSE Usage END(*Usage*) INC(i) END END(*WITH*) END GetOptions
PROCEDURE Compar(a,bADDRESS)BOOLEAN (*key comparison routine for the sort m
odule Returns TRUE if a is greater than b This routine always compares the f
ull name as it is used for sorting. The equality routine only compares the part
of thrite('.') WriteString(Type) IF ToList THEN WriteToList(N) END (*No
w pad name out to 16 columns*) FOR iLength(Name)+Length(Type)+4 TO 16 DO Wri
te(' ') END END END WriteName PROCEDURE PrintLeft BEGIN WriteName(LeftName
si,OutputDeleted) WriteLn END PrintLeft PROCEDURE PrintRight BEGIN WriteSt
ring(' ') WriteName(RightNamesj,OutputAdded) WriteLn END Print
Right PROCEDURE CompareOK(f1,f2FileRecord)BOOLEAN VARfn1e name requested b
y the flags. As a result, a test for equality should be made first*) VARp,qP
FileName BEGIN pPFileName(a) qPFileName(b) CASE Compclass OF TypeIF p.Type
q.Type THEN RETURN p.Typeq.Type ELSE RETURN p.Nameq.Name END Name,Whol
eIF p.Nameq.Name THEN RETURN p.Nameq.Name ELSE RETURN p.Typeq.Type END E
ND(*CASE*) END Compar PROCEDURE Equal(p,qFileRecord)BOOLEAN (*compare to
names for equality patterned after,fn2FileName PROCEDURE SetName(fFileRecord
VAR fnFileName) VARi,jCARDINAL PROCEDURE Put(chCHAR) BEGIN fnich INC(i)
END Put BEGIN i0 WITH f DO IF Device' ' THEN Put(Device) Put('') END
j1 WHILE (jHIGH(Name)) AND (Namej0x) DO Put(Namej) INC(j) END j1 Put('.')
WHILE (jHIGH(Type)) AND (Typej0x) DO Put(Typej) INC(j) END WHILE iHIGH(fn)
DO Put(' ') END END END SetName BE the preceding routine*) BEGIN CASE C
ompclass OF TypeRETURN p.Typeq.Type NameRETURN p.Nameq.Name WholeIF p.Nameq.N
ame THEN RETURN FALSE ELSE RETURN p.Typeq.Type END END(*CASE*) END Eq
ual PROCEDURE ExpandNames(ParamParameterVAR NamesFileArray VAR NameCountINTE
GER) (*Expand wild card file name into list of files and sort result *) VAR
i,jINTEGER NameTextARRAY 1..MaxFiles OF FileName TextARRAY0..5 OF CHAR BEGIN
IF (Param.Chars2 R FreeUp(2) RETURN TRUE END FOR i0 TO reply1-1 DO IF b1
ib2i THEN FreeUp(2) RETURN FALSE END END END(*LOOP*) END FileComp PROCE
DURE FileMove(fn1,fn2ARRAY OF CHAR)BOOLEAN BEGIN SetUp(1) Lookup(f1,FileName(
fn1),reply) IF reply0 THEN WriteString(' Input file not found ') WriteLn Fre
eUp(1) RETURN FALSE END Create(f2,FileName(fn2),reply) IF reply0 THEN Write
String(' Directory full ') WriteLn FreeUp(1,output) InOut.SwitchOutStream(Lis
t) ListOpenTRUE ELSE IF OutputAdded OR OutputDeleted OR OutputEqual OR O
utputModified THEN WriteString(' A D E and M options require output file name$
') WriteLn Usage END END ExpandNames(Param1,LeftNames,LeftNameCount) Expan
dNames(Param2,RightNames,RightNameCount) (*now perform merge pass of two list
s*) i1 j1 WHILE (iLeftNameCount) AND (jRightNameCount) DO IF Equal(LeftNam
esi,RightNamesj) IMPLEMENTATION MODULE FileOps FROMSYSTEMIMPORT BYTE,ADR,ADDR
ESS FROMSTORAGE IMPORT FreeSpace,ALLOCATE,DEALLOCATE,RELEASE FROMFilesIMPORT L
ookup,Create,SeqReadBlock,SeqWriteBlock,Close, FILE,FileName FROMTerminal IMPO
RT WriteString,WriteLn (*Perform some file operations *) TYPEPBlockPOINTER
TO Block BlockARRAY0..127 OF BYTE VARb1,b2PBlock i,jCARDINAL BuffSizeCARDIN
AL replyINTEGER f1,f2FILE reply1,reply2INTEGER PROCEDURE SetUp(CountCARDINAL
) (THEN WriteName(LeftNamesi,OutputEqual) WriteName(RightNamesj,FALSE) I
F CompareContents AND NOT CompareOK(LeftNamesi,RightNamesj) THEN WriteStrin
g(' Files Differ ') IF OutputModified THEN WriteToList(LeftNamesi) END END
WriteLn INC(i) INC(j) ELSIF NOT Compar(ADR(LeftNamesi),ADR(RightNamesj)) TH
EN PrintLeft INC(i) ELSE (*LeftnamesiRightNamesj*) PrintRight INC(j)
END(*IF*) END(*W*Set up 1 or 2 buffers using all available memory *) BEGIN
i(FreeSpace()-1024) DIV 128 IF iCount THEN WriteString(' Out of Memory in Fil
eOps') WriteLn HALT END ii DIV Count BuffSize128*i ALLOCATE(b1,BuffSize)
IF Count2 THEN ALLOCATE(b2,BuffSize) END END SetUp PROCEDURE FreeUp(iCARDINAL)
(*release buffers - used to dispose them but now does a release which is fast
er. As a result parameter is not required *) BEGIN RELEASE(ADDRESS(b1)) END
FreeUp HILE*) (*process stragglers*) WHILE iLeftNameCount DO PrintLeft
INC(i) END WHILE jRightNameCount DO PrintRight INC(j) END IF ListOpen TH
EN Disconnect(List,TRUE) END END CompDir. (*possible match - check that t
he new line only matches this old line*) count0 j1 WHILE (count2) AND (jOld
Len) DO IF OldHashjNewHashk THEN INC(count) END INC(j) END IF count1 THEN
(* PROCEDURE FileComp(fn1,fn2ARRAY OF CHAR)BOOLEAN (*Compare two files
- return TRUE if equal *) VARiINTEGER BEGIN SetUp(2) Lookup(f1,FileName(fn1)
,reply) IF reply0 THEN FreeUp(2) RETURN FALSE END Lookup(f2,FileName(fn2)
,reply) IF reply0 THEN FreeUp(2) RETURN FALSE END LOOP SeqReadBlock(f1,A
DR(b1),BuffSize,reply1) SeqReadBlock(f2,ADR(b2),BuffSize,reply2) IF reply1repl
y2 THEN FreeUp(2) RETURN FALSE END IF reply10 THEN DEFINITION MODULE FileOps
(*Perform some file operations *) PROCEDURE FileComp(f1,f2ARRAY OF CHAR)B
OOLEAN (*Compare two files - return TRUE if equal IF either file is not pr
esent, FALSE is returned FALSE is still returned if neither file is present *)
PROCEDURE FileMove(f1,f2ARRAY OF CHAR)BOOLEAN (*Move f1 to f2 - returns TR
UE if successful *) END FileOps. RDEFINITION MODULE Import (*This m
odule allows you to pick up information about symbols exported from another mo
dule. It is used by the assembler Copyright (C) Dave Moore, FTL Modula-2 1986
This is a generic module *) FROMSYSTEM IMPORT BYTE,ADDRESS FROMFiles IMPORT
FileName TYPEalfa ARRAY1..32 OF CHAR typeclass(inttype,realtype,chartype,bo
oltype, arraytype,recordtype,subrtype,forwardref,pointtype, settype,stringtype
,wordtype,bytetype,prtype,enumtype, cardtype,addrtIMPLEMENTATION MODULE GetFile
s FROM CPM IMPORT BDOS,BDOSHL,sfofc,snofc,fcb,sdafc FROM CPMBIOS IMPORT direct
ory FROM SYSTEM IMPORT ADR FROM Files IMPORT ConvertFileName (*Get a list of
file names meeting a wildcard description*) VARi,j,kINTEGER ffcb nameFileName
DevCharCHAR WildCardBOOLEAN PROCEDURE GetNames(PatternARRAY OF CHARVAR names
ARRAY OF FileName VAR CountINTEGER) VARdmaARRAY 0..3 OF directory PROCEDU
RE SearchForFileNames BEGIN ConvertFileName(f) RETURN FALSE END LOOP SeqRe
adBlock(f1,ADR(b1),BuffSize,reply1) IF reply10 THEN Close(f1) Close(f2) Free
Up(1) RETURN TRUE END SeqWriteBlock(f2,ADR(b2),BuffSize,reply2) IF reply2rep
ly1 THEN WriteString(' Disc full ') WriteLn FreeUp(1) RETURN FALSE END END
END FileMove END FileOps. RB 0TESTNESTMOD gR SMALLIO REL B 8BUILDLIBBA
T y,name) IF f.fcbdn0 THEN DevChar' ' ELSE DevCharCHR(ORD(f.fcbdn)+(ORD('A')
-1)) END (*Now scan for matching names*) iBDOS(sdafc,ADR(dma))(*set dma
buffer address*) iBDOS(sfofc,ADR(f))(*start search*) Count0 WHILE i255 DO j0
IF DevChar' ' THEN name0DevChar name1'' j2 END WITH dmai DO k1 WHILE (k
HIGH(dirfn)) AND (dirfnk' ') DO namejdirfnk INC(j) INC(k) END namej'.' k1I
NC(j) WHILE (kHIGH(dirft)) AND (dirftk' ') DO namejdirftk INC(j) INC(k) END
END (*WITH DMA*) FOR jj TO HIGH(name) DO namej' ' END namesCountname INC(Co
unt) iBDOS(snofc,ADR(f))(*go to next*) END (*WHILE i255*) iBDOS(sdafc,80H)(
*reset to default*) END SearchForFileNames BEGIN (* Convert Pattern to a
file name*) jHIGH(Pattern) WildCardFALSE IF jHIGH(name) THEN jHIGH(name) EN
D FORDEFINITION MODULE GetFiles (*Get a list of file names meeting a wildcar
d description*) FROM Files IMPORT FileName PROCEDURE GetNames(PatternARRAY OF
CHAR VARnamesARRAY OF FileNameVAR countINTEGER) (*Pattern is a pattern to us
e for the search names returns a list of matching file name (with no device nam
e on the front) count returns number of names returned in names If the give
n name contains no wild card, it is always returned as the only match, whether
it exists or not i0 TO j DO nameiPatterni IF (namei'*') OR (namei'') THEN
WildCardTRUE END END FOR ii+1 TO HIGH(name) DO namei' ' END IF WildCard THE
N SearchForFileNames ELSE Count1 names0name END END GetNames END GetFiles.
p DO i0 LOOP CASE Charsi OF 0xEXIT 'T'CompclassType 'N'CompclassName 'E
'OutputEqu While this means that this routine cannot be used to check for the
existence of a file, it can be used to convert a parameter to a filename as req
uired by the module Files *) END GetFiles. arameter(*area for command line*)
CountINTEGER(*parameters*) LeftNames,RightNamesFileArray LeftNameCount,Right
NameCountINTEGER CompclassCompClassWhole OutputAddedBOOLEANFALSE OutputEqua
lBOOLEANFALSE CompareContentsB R LAY pname LASTNAME pname NAMEPNT
pname (*Symbol table entries consist of a NAME record preceded by a identif
ier length BYTE preceded by the identifier stored backwards. The top bit of the
length is set to 'hide' the identifier. The second top bit is used to mark acc
essible symbols though this is not done by this version of the import module
*) PROCEDURE HIDE(pADDRESS) (*Hide an identifier An identifier is hidd
en by setting the top bit of the byte preceding the poiloffsetINTEGER(*rel code
buffer pointer*) mdrelblockINTEGER(*and block number*) linkclasslinkpname
END END VARIDalfa PROCEDURE RETRNAME(PADDRESS) PROCEDURE LOOKUP(idalfat
abpname)pname PROCEDURE LOADFILE(fnFileName)pname END Import. F Q EWriteNam
e(RightNamesj,OutputAdded) WriteLn END PrintRight PROCEDURE CompareOK(f1,f2
FileRecord)BOOLEAN VARfn1ype,unknowntype,intorcard) pnamePOINTER TO name
pparamPOINTER TO param paramRECORD varparBOOLEAN vartypepname nextpparam op
enarrayBOOLEAN END object ( (* types of symbol table entrys *) constant, proz
edure, funktion, variable, tipe,stdproc,stdfunc,modclass,linkclass,forrefer )
vformBYTE nameRECORD lowerpname upperpname exportlinkpname ntypepname CAS
E nameclassobject OF constantvaluINTEGER CASE INTEGER OF 0actIMPLEMENTATION M
ODULE Import (* A module to perform exports and imports for modula-2 pro
grams. This module will read SYM files created by the FTL Modula-2 compiler
This module does not contain all the code required to import multiple symbol t
ables. For this reason, if you use this module to import several symbol tables,
they will not be linked together correctly. This means that you cannot do type
checking using this module. Let me explain that more thoroughly. Each SYM T
able cvalINTEGER enumBOOLEAN 1rvalREAL END prozedure,funktion padrINTEGER
forrefBOOLEAN codeadrINTEGER procmodBYTE existopenBOOLEAN variableaddrsI
NTEGER groupBYTE formvform tipesizeINTEGER CASE classtypeclass OF arrayty
peelemtypepname indextypepname(*nilnone*) recordtypesubfieldspname subrtype
,enumtypelowINTEGER highINTEGER btypepname pointtype,settomtains
a copy of every declaration which is used in the SYM table. For example, it y
ou import BYTE from SYSTEM, there is a copy of the declaration for BYTE. A symb
ol like BYTE is likely to be imported by a number of different symbol tables an
d so several copies of the declaration will exist. In the compiler, all these a
re linked together so that BYTE only has one active definition. Otherwise, va
riables of type BYTE imported from different modules would not be compatible.
Nor does it ypereftypepname prtypeprparspparam unknowntype,forwardreftmodnoI
NTEGER END stdprocstdordINTEGER stdfunc genlistpname stdclassBYTE partyp
epname compatBYTE CASE INTEGER OF 0funcnoBYTE 1funcdopBYTEfuncconstINTEGER
2funcmopBYTE END modclassmagicINTEGER(*magic number*) nextmodulepname(*next
imported module*) modnamespname(*symbol table*) modlistpname(*linked list of
names*) contain the code to process the import list *) FROMFastMove IMPORT Mo
veup FROMStorage IMPORT ALLOCATE FROMTerminal IMPORT WriteString,WriteLn FROM
SYSTEM IMPORT ADR FROMFiles IMPORT Lookup,SeqReadBlock,Close,FILE CONSTBiggest
File8191(*biggest sym file readable*) VAR COMPLINKpname PLINK,LASTLINK,
nlinkpname RELOFF,GLOBRELOFF,RELBASECARDINAL SIDalfa HIDEALLBOOLEANFALSE
HIDEOTHERSBOOLEAN NEWMODNAMEpname MODULENAMEalfa MODULEPNTpname DISPano
nlistpname(*anonymous names*) modbaseCARDINAL(*for table relocation*) globalba
seCARDINAL(*for global relocation*) moddebugBOOLEAN(*true if compiled with debu
g*) (*The following variables give the state of the variables after the def
module is compiled*) mdgroupnoINTEGER(*number of variable groups*) mdconstn
oINTEGER(*number of constants *) mdlabnoINTEGER(*number of procedures*) mdmodu
lenoINTEGER(*number fo next imported module*) mdre RSID THEN LASTNAME.upperCOM
PLINK ELSE LASTNAME.lowerCOMPLINK END END COMPLINK.upperNIL COMPLINK.lowerNI
L END ENTERNAME PROCEDURE MERGENAMES (* merge the names point
ed to by complink into the table one below the top of the display No
te that the heap is not cut back since that has already been done by the com
press routine, if required*) VAR Ppname BEGIN COMPLINKNEWMODNAME.modlist W
HILE (COMPLINKNIL) DO ENTERNAME COMPLINK recordtype subfieldsRELPNTR(subf
ields) subrtype,enumtype btypeRELPNTR(btype) pointtype,settype
reftypeRELPNTR(reftype) prtype prparsRELPNTR(prpars) OLDPARprpars
WHILE OLDPARNIL DO WITH OLDPAR DO vartypeRELPNTR(vartype) nextRELPNTR(
next) OLDPARnext END END END (*case class*) linkclass
nter *) BEGIN pADDRESS(CARDINAL(p)-1) IF p128 THEN pp+128 END END HIDE PROC
EDURE UNHIDE(pADDRESS) (*Hide an identifier An identifier is hidden by set
ting the top bit of the byte preceding the pointer *) BEGIN pADDRESS(CARDINAL
(p)-1) IF p128 THEN pp-128 END END UNHIDE PROCEDURE RETRNAME(pADDRESS) VARiI
NTEGER lenINTEGER BEGIN pADDRESS(CARDINAL(p)-1) lenORD(p) (*clear top two b
its *) IF len128 THEN lenlen-128 END IF len64 TlinkRELPNTR(link) END
(*case nameclass*) nlinkexportlink END END (*while nlinknil*) END RELO
CATE (*relocate*) PROCEDURE READFILE(fnFileName)BOOLEAN TYPEBlockARRAY0..127 O
F BYTE pBlockPOINTER TO Block VARfFILE replyINTEGER FirstBOOLEAN ppBlock b
ARRAY0..BiggestFile OF BYTE BEGIN reply1 WHILE (replyHIGH(fn)) AND (fnreply'.
') AND (fnreply' ') AND (fnreply0x) DO INC(reply) END IF replyHIGH(fn) THEHE
N lenlen-64 END IF len32 THEN lenlen-32 END FOR i1 TO len DO pADDRESS(CARDI
NAL(p)-1) IDiCHR(p) END FOR ilen+1 TO HIGH(ID) DO IDi' ' END END RETRNAME
PROCEDURE LOOKUP(LIDalfaTABLEpname)pname BEGIN LASTNAMENIL LOOP IF TABLEN
IL THEN EXIT END LASTNAMETABLE RETRNAME(TABLE) IF IDLID THEN TABLETABLE.upper
ELSIF IDLID THEN TABLETABLE.lower ELSE EXIT END END RETURN TABLE END LOOKU
P PROCEDURE RELPNTR(FIELDN RETURN FALSE END IF fnreply'.' THEN IF (reply+3)HI
GH(fn) THEN RETURN FALSE END fnreply'.' fnreply+1'S' fnreply+2'Y' fnreply+3'
M' fnreply+4' ' END Lookup(f,fn,reply) IF reply0 THEN WriteString(' File n
ot found')WriteString(fn)WriteLn RETURN FALSE END (*Read the data *) SeqR
eadBlock(f,ADR(b),SIZE(b),reply) IF reply0 THEN WriteString('SYM File Empty '
)WriteLn RETURN FALSE END IF replySIZE(b) THEN WriteSADDRESS)ADDRESS (*
Relocate a pointer There are two areas which the pointer may need relocatin
g relative to (see Churchill). The globals symbol table and the local symbols t
able. The global symbol table is assumed to be lower in memory*) VARaADDRESS
BEGIN IF FIELDSNIL THEN aNIL ELSIF CARDINAL(FIELDS)RELBASE THEN aADD
RESS(CARDINAL(FIELDS)-GLOBRELOFF) ELSE aADDRESS(CARDINAL(FIELDS)-RELOFF) END
RETURN a END RELPNTR PROCEDURE RELOCATE String(' SYM file too larg
e ') WriteLn RETURN FALSE END ALLOCATE(p,reply) Moveup(ADR(b),p,reply) GLO
BRELOFF0 NEWMODNAMEpname(CARDINAL(p)+ORD(b0)+2) RETRNAME(NEWMODNAME) RELOFFNE
WMODNAME.modbase-CARDINAL(p) RELBASENEWMODNAME.modbase Close(f) RETURN TRUE
END READFILE PROCEDURE ENTERNAME VARSIDalfa BEGIN RETRNAME(COMPLINK) SIDI
D NAMEPNTLOOKUP(ID,DISPLAY) IF LASTNAMENIL THEN DISPLAYCOMPLINK ELSE RETRNA
ME(LASTNAME) IF ID (* Relocate one of the entry lists just entered Also
, if any entry is a link, replace pointer by pointer to linked object*) VAR
OLDPARpparam BEGIN WHILE nlinkNIL DO WITH nlink DO RETRNAME(nlink) nt
ypeRELPNTR(ntype) lowerRELPNTR(lower) upperRELPNTR(upper) exportlinkRELP
NTR(exportlink) CASE nameclass OF tipe CASE class OF arraytype e
lemtypeRELPNTR(elemtype) indextypeRELPNTR(indextype) R WITH MacroStackM
acroDepth DO Pos1 Defp Countrepeat END(*WITH*) END(*pNIL etc*) END AddMacr
o VARSpecialSequenceBOOLEANFALSE PROCEDURE ReadAChar(VAR ResultCHAR) (*read
next character, checking for arrows/function keys in and out point to the char
acters which have been read ahead By ReadAChar in an attempt to resolve a macro
When ReadAChar is entered, if this buffer is not empty, the first character
is to be looked up to see if it is a start of areenIO IMPORT OutputToScreen
CONSTBlockLen128 ESC1bx TYPE KeyDefRECORD Length1..61 CommCharsARRAY1..20 O
F CHAR END PKeyDefPOINTER TO KeyDef MacroPointRECORD PosCARDINAL DefPKeyDef
CountINTEGER END VAR chCHAR CommandsARRAY''..'Z' OF PKeyDef MacroDepthC
ARDINAL0 MacroStackARRAY1..5 OF MacroPoint LearnchCHAR LearnLenCARDINAL Lear
ningBOOLEANFALSE TextARRAY1..60 OF CHAR iCARDINAL ShowChangeBOOLEAN COMPLI
NK.exportlink END END MERGENAMES PROCEDURE LOADFILE(fnFileName)pname (*
load a file to be imported relocate the entries *) VAR TIDalfa
BEGIN DISPLAYNIL GLOBRELOFF0 IF NOT READFILE(fn) THEN RETURN NIL
END (*newmodname points to entry for first module name which is the name
of the module being loaded it is followed by a chain of names of modules
imported by that module in the case of the first module, we m(*keep
a circular buffer of characters while matching is happening*) PROCEDURE W
aitForCh BEGIN IF NOT ShowChange THEN ShowChangeTRUE OutputToScreen(TRUE) R
edisplay END REPEAT BusyRead(ch) UNTIL ch0x END WaitForCh PROCEDURE CheckI
nterrupt()BOOLEAN (*Check the keyboard for an interupt (Control U) Also, i
f Escape has been typed, stop terminal output until another character is typed*
) VARch1CHAR BEGIN BusyRead(ch1) CASE ch1 OF 15xRETURNust set the nu
mbers of the variables to moduleno but this is irrelevant for the other
modules as the variables cannot be accessed unless explicitly imported *)
COMPLINKNEWMODNAME WHILE COMPLINKNIL DO WITH COMPLINK DO RETRNAME(COM
PLINK) modlistRELPNTR(modlist) anonlistRELPNTR(anonlist) nlinkmodlist REL
OCATE nlinkanonlist RELOCATE nextmoduleRELPNTR(nextmodule) COMPLINKnextmod
ule END END MERGENAMES NE TRUE 1bxShowChangeFALSE OutputToS
creen(FALSE) END RETURN FALSE END CheckInterrupt PROCEDURE GetAChar(VAR ch1C
HAR) BEGIN IF MacroDepth0 THEN WaitForCh ch1ch IF Learning AND (LearnLenHIG
H(Text)) THEN INC(LearnLen) TextLearnLench END ELSE WITH MacroStackMacroDep
th DO IF PosDef.Length THEN DEC(Count) IF CheckInterrupt() OR NOT Fou
nd THEN MacroDepth1 Count0 END IF Count1 THEN WMODNAME.modnamesDISPLAY
RETURN NEWMODNAME END LOADFILE END Import. BAK wQ " ANSI
SYSmg sASSIGN COMmg ATTRIB EXEmg £ount2 THEN ALLOCATE(b2,BuffSize) END END S
etUp PROCEDURE FreeUp(iCARDINAL) (*release buffers - used to dispose them but
now does a release which is faster. As a result parameter is not required *)
BEGIN RELEASE(ADDRESS(b1)) END FreeUp DEC(MacroDepth) ELSE Pos1 END
GetAChar(ch1) ELSE ch1Def.CommCharsPos INC(Pos) END END END END GetACh
ar PROCEDURE AddMacro(pPKeyDefrepeatINTEGER) BEGIN IF (pNIL) AND (MacroDepthH
IGH(MacroStack)) THEN (*make sure that macro is not recursive*) FOR i1 T
O MacroDepth DO IF MacroStacki.Defp THEN ErrorMessage('Recursive macros!',' ')
MacroDepth0 RETURN END END INC(MacroDepth) IMPLEMENTATION MODULE Macros
(*This is a special version of macros for machines which do not have function
keys at all, so do not need the extra code for function key detection*) FROM
DoMenu IMPORT GetString,Redisplay FROMStorage IMPORT ALLOCATE,DEALLOCATE FROM
Terminal IMPORT BusyRead,WriteString,WriteLn,Write FROMFiles IMPORT FILE,SeqRea
dBlock,SeqWriteBlock,Lookup,Create,Close FROMSYSTEM IMPORT ADR,TSIZE FROMEditD
isplay IMPORT ErrorMessage FROMFastMove IMPORT Moveup FROMSc RMODULE MyLU
(*Dave Moore's own version of LU for use with his Modula-2 compiler *) FROMT
erminal IMPORT WriteString,WriteLn,ReadString,Write FROMFiles IMPORT FILE,Read
Block,WriteBlock,Lookup,Create,FileName, SeqReadBlock,SeqWriteBlock,ConvertFile
Name,Close, MakeBAK,SetBlock,Devicetype FROMSmallIO IMPORT ReadCard,WriteCard,
WriteHex FROMSYSTEM IMPORT BYTE,ADR,TSIZE FROMCPMIMPORT fcb,alfa,exten,opnfc,
BDOS FROMStrings IMPORT Length FROMStorage IMPORT ALLOCATE TYPE IndmCharsi
INC(reply) END END(*WITH p*) END (*IF NIL*) END StoreOneMacro BEGIN Learnc
h'A' WHILE (CommandsLearnchNIL) AND (Learnch'Z') DO LearnchCHR(ORD(Learnch)+1
) END IF Learnch'Z' THEN RETURN END Create(F,'MACROS.DAT ',reply) IF reply0
THEN WriteString(' could not save macros file') WriteLn RETURN END IF reply
0 THEN RETURN END reply0 FOR Learnch'A' TO 'Z' DO StoreOneMacro(CommandsLearnc
h) END (*Now output key key definition*) BEGIN GetAChar(Result) END ReadA
Char PROCEDURE GetDefChar VARTextARRAY1..1 OF CHAR BEGIN GetString(Text,Le
arnLen,'Char to define') LearnchCAP(Text1) END GetDefChar PROCEDURE DefMacroT
ext VARpPKeyDef BEGIN IF LearnLen0 THEN ALLOCATE(p,TSIZE(CARDINAL)+LearnLen)
CommandsLearnchp WITH p DO LengthLearnLen FOR LearnLenLearnLen TO 1 BY -1
DO CommCharsLearnLenTextLearnLen END END END END DefMsequences*) IF repl
y0 THEN Blockreply0x SeqWriteBlock(F,ADR(Block),BlockLen,reply) END Close(
F) END StoreMacros PROCEDURE OutCh(chCHAR) BEGIN IF ch' ' THEN Write('')Wri
te(CHR(ORD(ch)+64)) ELSE Write(ch) END END OutCh PROCEDURE PrintMacros BEG
IN FOR ch'A' TO 'Z' DO IF CommandschNIL THEN WITH Commandsch DO OutCh(c
h) FOR i1 TO Length DO OutCh(CommCharsi) END END WriteLn END EN
D WracroText PROCEDURE LearnMacro (*Learn a macro definition called at eit
her end of definition*) BEGIN IF NOT Learning THEN GetDefChar LearningTRUE
LearnLen0 ELSE LearnLenLearnLen-2 DefMacroText LearningFALSE END END Lea
rnMacro PROCEDURE DefMacro BEGIN GetDefChar IF (Learnch'A') AND (Learnch'Z')
OR (LearnchESC) THEN GetString(Text,LearnLen,'Macro') DefMacroText END END
DefMacro PROCEDURE Macro(chCHARrepeatINTEGER) VARiiteString(' Enter any charac
ter to continue ') WaitForCh END PrintMacros BEGIN ShowChangeTRUE FOR ch''
TO 'Z' DO CommandschNIL END Lookup(F,'MACROS.DAT ',reply) IF reply0 THEN Load
Macros END END Macros. DISC2 BAT ! LDISC3 BAT u! ypesubfieldspname subrt
ype,enumtypelowINTEGER highINTEGER btypepname pointtype,settCARDI
NAL BEGIN chCAP(ch) IF ch' ' THEN chCHR(ORD(ch)+64) END IF (ch'') AND (ch'Z'
) THEN AddMacro(Commandsch,repeat) END END Macro VARFFILE replyINTEGER PRO
CEDURE LoadMacros VARBlockARRAY0..BlockLen-1 OF CHAR BEGIN LOOP SeqReadBlock
(F,ADR(Block),BlockLen,reply) IF replyBlockLen THEN EXIT END reply0 WHILE Blo
ckreply0x DO LearnLenORD(Blockreply) LearnchBlockreply+1 replyreply+2 FOR i1
TO LearnLen DO TextiBlockreply INC(reply) END DefMacroText END END END L
oadMacros PROCEDURE StoreMacros VARBlockARRAY0..BlockLen-1 OF CHAR PROCEDUR
E StoreOneMacro(pPKeyDef) BEGIN IF pNIL THEN WITH p DO IF (reply+Length+14)B
lockLen THEN Blockreply0x SeqWriteBlock(F,ADR(Block),BlockLen,reply) reply0
END BlockreplyCHR(Length) Blockreply+1Learnch replyreply+2 FOR i1 TO Length
DO BlockreplyCom RH(BufferIn) THEN SeqReadBlock(From,ADR(BufferIn),SIZE(Buffe
rIn),reply) InPos0 END chBufferInInPos (*WriteCard(InPos,4)WriteString(' ')W
riteHex(ORD(ch),4)WriteLn*) INC(InPos) END GetChar PROCEDURE FlushOut VARrep
lyINTEGER iCARDINAL BEGIN IF OutPos0 THEN RETURN END i128*((OutPos+127) DIV
128) IF iHIGH(BufferOut) THEN iHIGH(BufferOut) END WHILE OutPosi DO BufferOut
OutPos1ax INC(OutPos) END INC(i) SeqWriteBlock(To,ADR(BufferOut),ply0 THEN E
XIT END SeqWriteBlock(To,ADR(Buffer),reply,reply) jj+CARDINAL(reply) DIV 128
IF MaxSectors8 THEN EXIT END MaxSectorsMaxSectors-8 END RETURN j END Transfe
r PROCEDURE UnScrunch(VAR From,ToFILE) TYPEPNamePOINTER TO Name IdentARRAY0..
60 OF CHAR NameRECORD CodeCARDINAL NextPName TextIdent END VARi,jCARDINAL
replyINTEGER BufferIn,BufferOutARRAY0..1023 OF BYTE TablePName pPName CodeC
ARDINAL IdIdent InPosexRecordRECORD StatusBYTE BaseNamealfa Extexten Start
SectorCARDINAL LengthCARDINAL DateCARDINAL TimeCARDINAL ScrunchedBOOLEAN Fi
ller ARRAY 1..11 OF BYTE END IndexARRAY1..128 OF IndexRecord VARLibFILE LibN
ameFileName replyINTEGER DirectoryIndex SlotsCARDINAL NextSectorCARDINAL i,
jCARDINAL CommandCHCHAR FNameFileName PROCEDURE ReadCommand (*read an input
command, return command letter in CommandCH return file n,OutPosCARDINAL chCHA
R EofBOOLEAN PROCEDURE EnterId(sARRAY OF CHAR) VARrPName i,jCARDINAL BEGIN
jLength(s) ALLOCATE(r,j+TSIZE(CARDINAL)+TSIZE(PName)+1) r.CodeCode WITH r
DO NextTable Tabler FOR i0 TO j-1 DO Textisi END Textj0x END END EnterId
PROCEDURE EnterGId(LenCARDINALsARRAY OF CHAR) VAR i,jCARDINAL idIdent BEGIN
i0 WHILE (iHIGH(s)) DO FOR ji TO i+Len-1 DO idj-isj END idLen0xame in FName
*) VARTextARRAY1..20 OF CHAR i,jCARDINAL BEGIN WriteString('Command') ReadS
tring(Text) CommandCHCAP(Text1) i2 WHILE (iHIGH(Text)) AND (Texti' ') DO INC
(i) END j0 WHILE (jHIGH(FName)) AND (iHIGH(Text)) AND (Texti0c) DO FNamejCA
P(Texti) INC(j) INC(i) END WHILE jHIGH(FName) DO FNamej' ' INC(j) END EN
D ReadCommand PROCEDURE AddEntry(NamefcbPosition,Size,EDate,ETimeCARDINALScBO
OLEAN) VARi, EnterId(id) INC(Code) ii+Len END END EnterGId PROCEDURE SetU
pNames VARsIdent PROCEDURE PutId BEGIN si0x EnterId(s) INC(Code) END PutI
d BEGIN Code128 EnterGId(2,'BYDOIFINOFORTO') EnterGId(3,'ANDDIVENDFORMODNOTS
ETVARADR') EnterGId(4,'CASEELSEEXITFROMLOOPTHENTYPEWITHHIGHCHARTRUE') EnterGId
(5,'ARRAYBEGINCONSTELSIFUNTILWHILEFALSE') EnterGId(6,'EXPORTIMPORTMODULERECORDR
EPEATRETURN') EnterGId(7,'POINTERWriteLnINTEGERADDRESSBOOLEAN') EnterGIdjCARDI
NAL BEGIN i2 WHILE (iSlots) AND (Directoryi.Status0ffh) DO INC(i) END IF iSl
ots THEN WriteString(' Directory full - redo with more slots') WriteLn HALT
END WITH Directoryi DO Status0 BaseNameName.fcbfn ExtName.fcbft StartSector
Position LengthSize DateEDate TimeETime ScrunchedSc FOR j1 TO HIGH(Filler)
DO Fillerj0 END END END AddEntry PROCEDURE FindName(ffcb)CARDINAL (*find a n
ame - return 0 if (8,'CARDINALTerminal') EnterGId(9,'PROCEDUREQUALIFIEDCopyrigh
t') EnterId('DEFINITION')INC(Code) EnterId('WriteString')INC(Code) (*Enter ta
b codes*) FOR i1 TO 6 DO si-109x PutId END (*enter space sequences*) s0' '
FOR i2 TO 6 DO si-1' ' PutId END (*Enter CR/LF code*) s00dx s10ax i2 P
utId FOR i3 TO 6 DO si-109x PutId END END SetUpNames PROCEDURE GetChar
VARreplyINTEGER BEGIN IF InPosHIGnot found *) VARiCARDINAL BEGIN i2 LOOP
IF iSlots THEN RETURN 0 END WITH Directoryi DO IF (Status0) AND (BaseNamef.fcb
fn) AND (Extf.fcbft) THEN RETURN i END END INC(i) END END FindName PROCED
URE Transfer(VAR From,ToFILEMaxSectorsCARDINAL)CARDINAL VARi,jCARDINAL replyIN
TEGER BufferARRAY0..1023 OF BYTE BEGIN j0 LOOP IF MaxSectors8 THEN i8*128 E
LSE iMaxSectors*128 END SeqReadBlock(From,ADR(Buffer),i,reply) IF re Rile PR
OCEDURE ExtractFile(fnARRAY OF CHAR) VARffcb iCARDINAL foFILE BEGIN Convert
FileName(f,FileName(fn)) iFindName(f) IF i0 THEN WriteString(' Could not fin
d ') WriteString(fn) WriteLn ELSE WriteString('Extracting ') WriteString(fn
) WriteLn Create(fo,FileName(fn),reply) IF reply0 THEN WriteString(' Could n
ot create ') WriteString(fn) WriteLn RETURN END WITH Directoryi DO SetBloc
k(Lib,StartSector) IF ScruncSE WriteLn WriteString(' Please enter Yes or No')
END END END Yes PROCEDURE GetSlotCount BEGIN WriteString(' How many slots
') ReadCard(Slots) IF SlotsHIGH(Directory) THEN WriteCard(HIGH(Directory),4)
WriteString(' is maximum slots allowed by this program') WriteLn SlotsHIGH(D
irectory) END Slots4*((Slots+3) DIV 4) IF Slots0 THEN HALT END WriteCard(Slo
ts,4) WriteString(' Slots allocated') WriteLn FOR i1 TO Slots DO WITH Dii,r
eply) OutPos0 END FlushOut PROCEDURE PutChar(chCHAR) BEGIN IF OutPosHIGH(Bu
fferIn) THEN FlushOut END BufferOutOutPosch INC(OutPos) END PutChar PROCED
URE GetCode BEGIN Code0 IF ch' ' THEN CodeORD(ch)*256 GetChar END CodeCod
e+ORD(ch) END GetCode PROCEDURE PutId VARiCARDINAL pPName BEGIN GetCode p
Table WHILE (pNIL) AND (p.CodeCode) DO pp.Next END IF pNIL THEN WriteStr
ing(' error in PutId') Writerectoryi DO Status0ffh BaseName' ' Ext'
' END END WITH Directory1 DO Status0 LengthSlots DIV 4 StartSector0 END
NextSectorSlots DIV 4 END GetSlotCount PROCEDURE OpenLibrary (*open the libr
ary file *) BEGIN WriteString(' Enter name of library file') ReadString(LibNa
me) Lookup(Lib,LibName,reply) IF reply0 THEN WriteString(' Could not find tha
t file - create it ') IF Yes() THEN Create(Lib,LibName,reply) Card(Code,4) W
riteString(Table.Text) WriteLn RETURN END i0 WITH p DO WHILE Texti0x DO P
utChar(Texti) INC(i) END END END PutId PROCEDURE DefCode VARIdIdent iCARD
INAL BEGIN GetChar IF ch0x THEN EofTRUERETURN END i0 WHILE ch0x DO Idich
PutChar(ch) GetChar INC(i) END Idi0c GetChar GetCode EnterId(Id) END Def
Code BEGIN TableNIL SetUpNames j0 InPosHIGH(BufferIn)+1IF reply0 THEN Wr
iteString(' could not create it either') WriteLn HALT END GetSlotCount ELSE
WriteString(' run cancelled') WriteLn HALT END ELSE ReadBlock(Lib,ADR(Dir
ectory),0,SIZE(Directory),reply) Slots4*Directory1.Length WriteCard(Slots,4)Wr
iteString(' slots found')WriteLn NextSector0 FOR i1 TO Slots DO WITH Director
yi DO IF Status0ffh THEN jLength+StartSector IF jNextSector THEN NextSector
OutPos0 GetChar EofFALSE LOOP IF ch0x THEN DefCode ELSIF (ch07fx) OR (ch'
') THEN PutId ELSE PutChar(ch) END GetChar IF Eof THEN EXIT END END FlushOu
t END UnScrunch PROCEDURE DoAddition(VAR fFILEScBOOLEAN) VARi,jCARDINAL BEGI
N iFindName(f.f) IF i0 THEN Directoryi.Status0ffh END SetBlock(Lib,NextSector
) jNextSector NextSectorNextSector+Transfer(f,Lib,65535) Close(f) AddEntry(
f.f,j,NextSector-j,0,0,Sc) END DoAdditionj END END END END END END OpenLib
rary PROCEDURE CloseLibrary BEGIN WriteBlock(Lib,ADR(Directory),0,128*(Slots
DIV 4),reply) Close(Lib) END CloseLibrary PROCEDURE DeleteFile(fnARRAY OF CHA
R) VARffcb iCARDINAL BEGIN ConvertFileName(f,FileName(fn)) iFindName(f) IF
i0 THEN WriteString(' Could not find ') WriteString(fn) WriteLn ELSE Writ
eString(fn) WriteString(fn) WriteLn Directoryi.Status0ffh END END DeleteF
PROCEDURE AddFile(fnARRAY OF CHARScBOOLEAN) (*copy a file into the current libr
ary*) VARfFILE i,jCARDINAL BufferARRAY0..1023 OF BYTE BEGIN Lookup(f,FileNa
me(fn),reply) IF reply0 THEN WriteString('File ') WriteString(fn) WriteStrin
g(' not found') WriteLn RETURN END DoAddition(f,Sc) END AddFile PROCEDURE
Yes()BOOLEAN VARsARRAY1..3 OF CHAR BEGIN LOOP ReadString(s) CASE CAP(s1) OF
'Y'RETURN TRUE 'N'RETURN FALSE EL Rf,(* A character from a set*) Alterna
tives,(* One of two alternatives*) Concat,(* Concatenate two patterns*) Ri
ghtLimit)(* Make sure at right boundary*) CharSetSET OF CHAR PNodePOINTER
TO Node PStatusPOINTER TO State (*If a match is successful, the match is r
eturned by a tree of states. Each node in the tree gives the start position of
the match and the position of the next character following the match. It als
o contains a pointer to the pattern node which wWITH Directoryj DO IF Status0ff
h THEN f.ffcb(Directoryj) SetUpFcb(f) f.f.fcbdnORD(FNamei)-ORD('A
')+1 kBDOS(opnfc,ADR(f.f)) IF k0ffh THEN WriteString(' Updating') Di
splayName(IndexRecord(f.f)) WriteLn DoAddition(f,Scrunched) END END END
END INC(i) END END UpdateAll BEGIN OpenLibrary WriteString(' Commands ar
eF - Finish')WriteLn WriteString('A - Add or updhed THEN UnScrunch(Lib,fo) ELS
E iTransfer(Lib,fo,Length) END END Close(fo) END END ExtractFile PROCEDURE
DisplayName( dIndexRecord) VARjCARDINAL BEGIN j1 WITH d DO WHILE (j8) AND (
BaseNamej' ') DO Write(BaseNamej) INC(j) END WriteString('.') WriteString(E
xt) WHILE j8 DO Write(' ') INC(j) END END END DisplayName PROCEDURE Li
stNames VARi,j,kCARDINAL BEGIN k0 FOR i2 TO Slots DO WITH Directoate')Write
Ln WriteString('D - Delete')WriteLn WriteString('E - Extract')WriteLn WriteS
tring('L - List files')WriteLn WriteString('R - Reorganize')WriteLn WriteStrin
g('U - Update All')WriteLn WriteLn LOOP ReadCommand CASE CommandCH OF 'F'C
loseLibraryEXIT 'A'AddFile(FName,FALSE) 'S'AddFile(FName,TRUE) 'D'DeleteFile(
FName) 'E'ExtractFile(FName) 'L'ListNames 'U'UpdateAll 'R'Reorg END END E
ND MyLU. ryi DO IF Status0ffh THEN DisplayName(Directoryi) WriteCard(Length
*128,5) INC(k) IF k4 THEN WriteLnk0 ELSE WriteString(' ') END END END END
IF k0 THEN WriteLn END END ListNames PROCEDURE SetUpFcb(VAR fFILE) BEGIN
f.devtypedisc f.eofFALSE WITH f.f DO fcbex0 fcbcr0 cpmres0 fcb
rc0 fcbrn.loworder0 fcbrn.highorder0 END END SetUpFcb PROCEDURE Reorg VARi
,j,kCARDINAL OldDirIndex OldSlotsCARDINAL OldLibFILE BEGIN OldLibLib Close
(Lib) MakeBAK(Lib,reply) OldDirDirectory OldSlotsSlots SetUpFcb(OldLib) Old
Lib.f.fcbft'BAK' kBDOS(opnfc,ADR(OldLib.f)) Create(Lib,LibName,reply) IF repl
y0 THEN WriteString(' Could not create new library') WriteLn RETURN END Wri
teString(' Old library had ')WriteCard(OldSlots,4) WriteString(' slots')WriteLn
GetSlotCount FOR i2 TO OldSlots DO WITH OldDiri DO IF StDEFINITION MODULE P
attern (*This is a pattern matching module Dave Moore, FTL Modula-2 To
match a pattern with this module, you must create a pattern description with th
e "Create" functions, and then use the MatchPattern function. This function
returns a tree describing the match, if successful, or NIL if not successful.
*) TYPE (*The program matches a tree representing a pattern there are
a variety of node types*) NodeType(String, (* A string of chars*) AnyOatus
0ffh THEN SetBlock(OldLib,StartSector) SetBlock(Lib,NextSector) kNextSector
jTransfer(OldLib,Lib,Length) AddEntry(fcb(OldDiri),k,j,Date,Time,Scrunched) Ne
xtSectorNextSector+j END END END END Reorg PROCEDURE UpdateAll VARi,j,kCAR
DINAL fFILE BEGIN i0IF FName0' ' THEN FName0'' END WHILE (iHIGH(FName))AND (
FNamei' ') DO WriteString(' Searching disk ') Write(FNamei) WriteLn FOR j2 T
O Slots DO R OF CHAR)PStatus (*Match a Pattern p is the root of the patt
ern to match s is the text to match The function returns a tree if the match
is successful. It returns NIL if the match fails. The match must start at t
he beginning of the string, but it need not match the entire string - this can
be forced by using a limit node. If you want to un-anchor the match from th
e beginning of the string, use a pattern CreateConcatNode( CreateAnyOfNode(
CharSet0x..0ffx,0,64000,FAL NEW(E) tempCreateAltNode( CreateStringNode('a')
, CreateConcatNode( CreateStringNode('a'), E) ) Etemp We have allo
cated "E" first so that it can be used in the function. We could not simply ass
ign the pointer returned by CreateConcatNode to E, since then the E used in the
function would be pointing elsewhere. Instead, we must copy the contents of t
emp into E so that the pointers remain correct. This pattern "E" is not yet r
eady to be used, since the paas matched. This information has to be kept sepa
rately from the pattern decription node because a given pattern node can match
several times in a given pattern, either because of recursion, or because you h
ave chosen to save space by using a single node in several different places in
a pattern. *) StateRECORD StatusCARDINAL(*Status is a status field used
for back-tracking by the node classes Alternatives and AnyOf When we are
backtracking to try ttern will only match the first "a" and then return. We
must add a "LimitNode" to ensure that all the string is matched E1CreateConc
atNode(E,CreateLimitNode()) E1 will ensure that all of the string is matched
*) PROCEDURE CreateStringNode(sARRAY OF CHAR)PNode (*Create a node which ma
tches a fixed string s is the string to match*) PROCEDURE CreateAltNode(p,
qPNode)PNode (*Match either p or q *) PROCEDURE CreateAnyOfNode(sCharSetmi
n,maxCARDINALLongestBOOLEAN)PNodean alternative match or a longer one, this val
ue is incremented When we are tracking forward, it is initialized*) Matc
hedAtCARDINAL(* Position at which this node matched*) PatternNodePNode(* P
ointer to pattern node matched by this status node*) MatchedToCARDINAL(* P
osition of character after last character matched by pattern*) Left,Ri
ghtPStatus(* Pointer to substatus tree Left is used for Al (*Match a
ny character in set "s" min and max are the minimum and maximum characters to
match Normally, the first attempt matches the shortest acceptable number of
characters. In this case, to match more characters, backtracking must be perfo
rmed. If you know that matching the most possible characters will not cause
the pattern to fail (for example, when matching identifiers in Modula-2, in wh
ich identifiers cannot run together, then specifying TRUE for Longest will prod
uce a fasternatives Both Left and Right are used for Concantenation*) E
ND NodeRECORD CASE NTypeNodeType OF String TextLenCARDINAL TextARRAY0..0
OF CHAR AnyOf MatchCharSet MinCount,MaxCountCARDINAL FastBOOLEAN Altern
atives,Concat First,SecondPNode (* if either is null, it matches the null stri
ng*) END END (*The following functions return a node representing a pat
tern to be matcheter pattern match *) PROCEDURE CreateConcatNode(p,qPNode)P
Node (*Match pattern p followed by pattern q *) PROCEDURE CreateLimitNode(
)PNode (*Match only if all of the string has been matched Beware Do no
t use a limit node as part of a pattern which can be called recursively (such a
s "E" above). If you do, the pattern matcher will attempt to match the end of t
he string on every recursion, which may prevent recursion at all *) PROCE
DURE MatchPattern(pPNodesARRAYd. Some of the functions require other patterns
as parameters. These can be generated using nested function calls. Recursio
n is possible, but some extra work is required to define a recursive pattern. Y
ou must allocate storage for a recursive pattern before it is used, and then as
sign its contents after it is defined. For example, suppose we want to set up
a pattern which matches a string of a's. The pattern can be given by the gramm
ar E-aaE This would be set up as follows RrtPos RETURN FALSE END (
*CASE*) END (*WITH*) END P BEGIN pq.PatternNode IF P() THEN IF tempNIL THE
N qtemp DISPOSE(temp) ELSE WITH q DO StatusMatchStatus PatternNodep
MatchedAtStartPos MatchedToPos LeftMatchLeft RightMatchRight END END
ELSE DISPOSE(q) ChangedFALSE END RETURN q END BackTrack PROCEDURE Patter
n(pPNodeVAR sARRAY OF CHARVAR PosCARDINAL)PStatus tatusVAR sARRAY OF CHARVAR
PosCARDINAL)PStatus (*perform backtracking after a failure Returns TRUE if
a new match was found for node p On entry the first time, Changed must be fa
lse it will be set true by the first node which extends its match Hence, Chang
ed must be true if backtrackimng is completely successful*) VARcountCARDINAL
StartPos,LastPosCARDINAL pPNode SaveMatchCARDINAL MatchLeft,MatchRightPStatu
s tempPStatus MatchStatusCARDINAL SavePosCARDINASE), E) where E is the pa
ttern to be matched in un-anchored mode. The tree returned by the pattern mat
cher contains, in every node, the first character matched by the pattern, and t
he position of the next character following the match (so that the difference b
etween these two values gives the number of characters matched). In addition
, each node contains a pointer to the pattern node matched and it may contain p
ointers to sub-patterns which were matched. *) END Pattern. L PROCEDURE P(
)BOOLEAN BEGIN (* Recursively match the pattern *) WITH p DO Posq.Match
edAt StartPosPos tempNIL MatchStatusq.Status CASE NType OF
String,RightLimit tempPattern(p,s,Pos) RETURN tempNIL (*string etc*) AnyOf
Posq.MatchedTo IF (MatchStatusMaxCount) AND (sPos IN Match) THEN INC(MatchSta
tus) ChangedTRUE RETURN TRUE END RETURN FALSE Alternatives IF MatchStatu
s(*$l-*) IMPLEMENTATION MODULE Pattern (*This is a pattern matching module
Dave Moore, FTL Modula-2 *) FROMSTORAGE IMPORT ALLOCATE,DEALLOCATE FROM
Strings IMPORT Length FROMSYSTEMIMPORT TSIZE VARi,jCARDINAL ChangedBOOLEAN
LenCARDINAL PROCEDURE CreateStringNode(sARRAY OF CHAR)PNode VARpPNode BEGI
N (*This procedure is provided to allow the creation of nodes for strings
easilly. Only the required amount of memory is allocated*) iLength(s) ALLOCA
TE(1 THEN MatchLeftBackTrack(q.Left,s,Pos) IF (MatchLeftNIL) AND Changed THEN
RETURN TRUE ELSE MatchStatus2 ChangedTRUE PosStartPos MatchLeftPattern(Se
cond,s,Pos) RETURN MatchLeftNIL END ELSE (*Status2*) MatchLeftBackTrack(q.Le
ft,s,Pos) RETURN MatchLeftNIL END Concat (* see if we can backtrack on t
he second string*) PosMatchStatus MatchLeftq.Left MatchRightBackTracp,i+3*T
SIZE(CARDINAL)+TSIZE(NodeType)) WITH p DO FOR j0 TO i-1 DO Textjsj END Te
xtLeni NTypeString END RETURN p END CreateStringNode PROCEDURE CreateAltNod
e(m,qPNode)PNode VARpPNode BEGIN NEW(p) WITH p DO NTypeAlternatives Firstm
Secondq END RETURN p END CreateAltNode PROCEDURE CreateAnyOfNode(sCharSetm
in,maxCARDINALLongestBOOLEAN)PNode VARpPNode BEGIN NEW(p) WITH p DO NTypeAn
yOf MinCountmk(q.Right,s,Pos) IF (MatchRightNIL) AND Changed THEN RETURN TRUE
END Posq.MatchedAt (* if not, try to backtrack the first string until
the second string matches*) ChangedFALSE SavePosPos LOOP PosSavePos MatchLe
ftBackTrack(q.Left,s,Pos) IF (MatchLeftNIL) OR NOT Changed THEN EXIT END Match
RightPattern(Second,s,Pos) IF MatchRightNIL THEN RETURN TRUE END ChangedFALS
E END PosStain MaxCountmax FastLongest Matchs END RETURN p END CreateAny
OfNode PROCEDURE CreateConcatNode(m,qPNode)PNode VARpPNode BEGIN NEW(p) WIT
H p DO NTypeConcat Firstm Secondq END RETURN p END CreateConcatNode PRO
CEDURE CreateLimitNode()PNode VARpPNode BEGIN NEW(p) p.NTypeRightLimit RETU
RN p END CreateLimitNode PROCEDURE Pattern(pPNodeVAR sARRAY OF CHARVAR PosCARD
INAL)PStatusFORWARD PROCEDURE BackTrack(qPS RIncrement1(*number of bytes b
etween characters*) ScreenSize80*24(*number of bytes in screen area*) CR0dx(
*Carriage return*) LF0ax(*Line feed*) TAB09x(*TAB*) BS08x VAR BufferARRAY0.
.125 OF BYTE (*Buffer for up to a line *) BaseAddrCARDINAL0B000h (*seg address
of adapter - change for colour*) BufferRowCARDINAL(*Row Being saved *) BufferC
olCARDINAL(*Start Column*) BufferCountCARDINAL0 (*ENtries in buffer *) Attribu
tesCARDINAL7 ScreenPosCARDIEND RETURN Q END Pattern PROCEDURE MatchPatte
rn(pPNodesARRAY OF CHAR)PStatus (*Match a Pattern p is the root of the patt
ern to match s is the text to match The function returns true only if the st
ring matches completely. Of course, you can always used repeated sets of any
thing at the beginning and.or end of a string in order to match only part of a
string*) VARPosCARDINAL BEGIN Pos0 LenLength(s) RETURN Pattern(p,s,Pos)
END MatchPattern END Pa(*This procedure matches forward *) VARcountCARDINAL
StartPos,LastPosCARDINAL SaveMatchCARDINAL QPStatus MatchStatusCARDINAL Matc
hLeft,MatchRightPStatus SavePosCARDINAL PROCEDURE P()BOOLEAN BEGIN (* Recurs
ively match the pattern *) WITH p DO StartPosPos CASE NType OF Strin
g IF (Len-Pos)TextLen THEN RETURN FALSE ELSE i0 WHILE (iTextLen) AND (sPosTe
xti) DO INC(Pos) INC(i) END IF iTextLen THEN ttern. LengthSlots DIV 4 S
tartSector0 END NextSectorSlots DIV 4 END GetSlotCount PROCEDURE OpenLibrary
(*open the library file *) BEGIN WriteString(' Enter name of library file')
ReadString(LibName) Lookup(Lib,LibName,reply) IF reply0 THEN WriteString(' C
ould not find that file - create it ') IF Yes() THEN Create(Lib,LibName,reply)
RETURN TRUE ELSE PosPos-i RETURN FALSE END END(* long enough to match*)
(*string*) AnyOfMatchStatus0 WHILE (MatchStatusMinCount) AND (sPos IN Match)
DO INC(Pos) INC(MatchStatus) END IF Fast THEN WHILE (MatchStatusMaxCount) A
ND (sPos IN Match) DO INC(Pos) INC(MatchStatus) END END RETURN MatchStatusM
inCount Alternatives MatchLeftPattern(First,s,Pos) IF MatchLeftNIL TIMPLEM
ENTATION MODULE ScreenIO (*This is the Earth CPEM version of ScreenIO You
need rev 0.22 or later of CPEM to use this program It uses int 16h to perform I
O, so your machine must be IBM compatible at the BIOS level This is a sligh
tly modified version of ScreenIO.IBM which will be available when the MSDOS ver
sion of the compiler is running The difference is that this version buffers s
creen output in order to speed up screen output, as character at a time was too
slow *) FROMHEN MatchStatus1 RETURN TRUE ELSE MatchStatus2 MatchLef
tPattern(Second,s,Pos) RETURN MatchLeftNIL END Concat MatchLeftPattern(Fi
rst,s,Pos) IF MatchLeftNIL THEN MatchStatusPos MatchRightPattern(Second,s,Pos
) IF MatchRightNIL THEN RETURN TRUE END ChangedFALSE SavePosPos LOOP PosS
avePos MatchLeftBackTrack(MatchLeft,s,Pos) IF (MatchLeftNIL) OR NOT Terminal I
MPORT CharRoutine,CharEnabled,BlinkRoutine,BlinkEnabled FROM SYSTEM IMPORT ADR,
SIZE FROM CPM IMPORT wccfc,BDOS FROM IntLogic IMPORT IAND FROM SysCall IMPORT
Int,Packet,ReadOrWrite (*Screen handling routines for cursor position, attri
bute etc Specific to this compiler*) CONSTLogScreenWidth80(*Logical screen
width (many people only have 80)*) RowWidth80(*width of memory for one row
(i.e. number of bytes*) LogScreenDepth24(*Lines on the screen*) Char Changed
THEN EXIT END MatchRightPattern(Second,s,Pos) IF MatchRightNIL THEN RETURN
TRUE END ChangedFALSE END END PosStartPos RETURN FALSE RightLimit RETU
RN PosLen END (*CASE*) END (*WITH*) END P BEGIN IF P() THEN NEW(Q) WITH Q
DO StatusMatchStatus PatternNodep MatchedAtStartPos MatchedToPos LeftMatch
Left RightMatchRight END ELSE QNIL Rneed alteration for various machines*
) BEGIN IF OutputEnabled THEN FlushBuffer ClearCursor CASE s OF DimHal
fIntensityTRUE BrightHalfIntensityFALSE EnhancedVideoTRUE NormalHalfIntensity
FALSE EnhancedVideoFALSE InverseVideoFALSE BlinkingFALSE UnderLineFALSE Inv
erseInverseVideoTRUE BlinkBlinkingTRUE StartGraph,EndGraph(*do nothing*) DelC
har(*Move rest of line up one, add blank to end*) iColNo FOR jColNo TO RowWidt
h-2 Dard' Screen is 80 by 24. The limit is set by the terminal definition file*
) BEGIN IF OutputEnabled THEN ClearCursor ColNox RowNoy ScreenPosColNo
+RowNo*CharIncrement*RowWidth IF ScreenPosScreenSize THEN ColNo0 RowNo0 Scre
enPos0 END END FlushBuffer END Gotoxy PROCEDURE PutandInc(chCHAR)
(*output a character and increment pointers*) BEGIN IF BufferCount0 THEN
BufferRowRowNo BufferColColNo END IF (BufferRowRoNAL(*next character positi
on on screen*) ColNo,RowNoCARDINAL(*which represents the given position*) (*
Control attributes*) HalfIntensityBOOLEANFALSE(*true if in half intensity mod
e*) EnhancedVideoBOOLEANFALSE UnderLineBOOLEANFALSE(*true if in underline mode
*) InverseVideoBOOLEANFALSE BlinkingBOOLEANFALSE i,jCARDINAL chCHAR (*The
next few routines handle the cursor WasUnderLined is true if the character u
nder the cursor started out underlined TiwNo) OR (BufferCol*2+BufferCount2*C
olNo) OR (BufferCount126) THEN FlushBuffer END IF BufferCount0 THEN Buffer
RowRowNo BufferColColNo END BufferBufferCountORD(ch) INC(BufferCount) Buffe
rBufferCountAttributes INC(BufferCount) ScreenPosScreenPos+CharIncrement INC(
ColNo) IF ColNoLogScreenWidth THEN IF RowNo(LogScreenDepth-1) THEN INC(RowNo)
ColNo0 ELSE DEC(ColNo) DEC(ScreenPos) END END END PutandInc PROmeToCh
ange is a counter that determines when the cursor should be changed from its cu
rrent value to its negative, to allow blinking *) VARWasUnderLinedBOOLEANFALSE
TimeToChangeINTEGER0 OutputEnabledBOOLEAN pPacket (*Blink cursor - decremen
t timer, if negative reset and change top bit of character under cursor*) PROC
EDURE SetCursor BEGIN (*Move cursor to current screen position *) WITH p DO
AX0200h DX256*RowNo+ColNo BX0 END Int(p) (*WasUnderLiCEDURE Write(chC
HAR) (*Write a character This routine is used by terminal when this version
of ScreenIO is in use because a flag is set by the initialisation of this modu
le together with the address of this routine *) BEGIN IF OutputEnable
d THEN ClearCursor IF ch07fx THEN chCHR(ORD(ch)-128) END IF chCR THEN Screen
PosScreenPos-ColNo ColNo0 ELSIF chLF THEN IF RowNo(LogScreenDepth-1) THEN IN
C(RowNo) ScreenPosScreenPos+RowWidth END ELSIF chnedScreenScreenPos80x Scree
nScreenPosCHR(ORD(ScreenScreenPos)+128)*) END SetCursor PROCEDURE FlushBuffe
r VARpPacket BEGIN IF BufferCount0 THEN WITH p DO IntNoBufferCount AXADR(
Buffer) BXBufferRow*160+BufferCol*2 CXBaseAddr ReadOrWrite(TRUE,p) END END
BufferCount0 SetCursor END FlushBuffer PROCEDURE BlinkCursor BEGIN (*Doe
s nothing (yet) on Earth card version DEC(TimeToChange) IF TimeToChange0 THEN
TimeTBS THEN IF ColNo0 THEN DEC(ColNo) DEC(ScreenPos) END ELSIF chTAB THE
N LOOP IF ColNoLogScreenWidth-1 THEN EXIT END PutandInc(' ') IF IAND(ColNo,7
)0 THEN EXIT END END (*LOOP*) ELSE IF UnderLine OR EnhancedVideo OR Blinking
OR InverseVideo THEN Attributes1 END PutandInc(ch) END (*Not CR or LF or TAB
*) Attributes7 SetCursor END END Write PROCEDURE ScreenControl(sEdits
) (*Perform a screen control operation May oChange900(*change to change bl
ink rate*) ScreenScreenPosCHR(ORD(ScreenScreenPos)+128) END *) FlushBuffer
END BlinkCursor PROCEDURE ClearCursor BEGIN (*Also un-implemented IF (Sc
reenScreenPos7fx)WasUnderLined THEN ScreenScreenPosCHR(ORD(ScreenScreenPos)+128
) END WasUnderLinedFALSE *) END ClearCursor PROCEDURE Gotoxy(x,yCARDINA
L) (*Position to given coordinates top left is always 0,0 x is column, y
is row A 'Stand R y1-1 DO Gotoxy(x2,i) ScreenControl(Vertical) END FOR
iy2+1 TO y1-1 DO Gotoxy(x1,i) ScreenControl(Vertical) END END END Draw
Box PROCEDURE OutputToScreen(OnBOOLEAN) BEGIN OutputEnabledOn END OutputToSc
reen BEGIN OutputEnabledTRUE (*Set up PCG Characters*) ScreenPos0 p.IntNo16
(*interrupt for video on 8088*) BlinkRoutineBlinkCursor BlinkEnabledTRUE Scre
enControl(ClearScreen) ColNo0 RowNo0 CharRoutineWrite CharEStartxy,MiddleXY,
EndXY(*cursor addressing - not required*) RingBelliBDOS(wccfc,7) MoveLeftIF Co
lNo0 THEN DEC(ColNo) DEC(ScreenPos) ELSIF RowNo0 THEN DEC(RowNo) ColNoLogS
creenWidth-1 ScreenPosColNo+RowNo*RowWidth END MoveRightIF ColNo(LogScreenWid
th-1) THEN INC(ColNo) INC(ScreenPos) ELSIF RowNo(LogScreenDepth-1) THEN Col
No0 INC(RowNo) ScreenPosRowNo*RowWidth END MoveDownIF RowNo(LogScreenDepth-1
) THEN INC(RO ColNoj+1 SetCursor WITH p DO AX800h BX0 Int(p)(*Read charac
ter *) chCHR(CARDINAL(AX)) DEC(ColNo) SetCursor BX7 AX0900H+ORD(ch) CX1 I
nt(p) END END ColNoRowWidth-1 SetCursor WITH p DO AX0920h BX7 CX1 Int(p
) END ColNoi SetCursor DelLine(*Move rest of screen up a line, add blank l
ine at end*) WITH p DO AX0601h CX256*RowNo DX256owNo) ScreenPosScreenPos+Ro
wWidth END MoveUpIF RowNo0 THEN DEC(RowNo) ScreenPosScreenPos-RowWidth END
END (*CASE*) SetCursor END END ScreenControl PROCEDURE ScrollWindowUp(S
tartofWindow,EndofWindowCARDINAL) BEGIN IF OutputEnabled AND (StartofWindo
wEndofWindow) THEN ClearCursor WITH p DO AX0701h CX256*StartofWindow DX256*
EndofWindow+LogScreenWidth-1 BX0700h END Int(p) SetCursor END END Scro
llWindowUp P*(LogScreenDepth-1)+LogScreenWidth-1 BX0700h END Int(p) InsCh
ar(*Move rest of line up one, add blank to end*) iColNo FOR jRowWidth-2 TO Col
No BY -1 DO ColNoj SetCursor WITH p DO AX800h BX0 Int(p)(*Read character *
) chCHR(CARDINAL(AX)) INC(ColNo) SetCursor BX7 AX0900H+ORD(ch) CX1 Int(p)
END END ColNoi SetCursor WITH p DO AX0920h BX7 CX1 ROCEDURE ScrollWind
owDown(StartofWindow,EndofWindowCARDINAL) BEGIN IF OutputEnabled AND (Star
tofWindowEndofWindow) THEN ClearCursor WITH p DO AX0601h CX256*StartofWindow
DX256*EndofWindow+LogScreenWidth-1 BX0700h END Int(p) SetCursor END
END ScrollWindowDown PROCEDURE LoadTermCode(FFileName) BEGIN (*not implemen
ted in this version*) END LoadTermCode PROCEDURE Clip(x1,y1,x2,y2CARDINAL) BE
GIN (*not implemented in this version*) END CliInt(p) END SetCursor InsLi
ne(*Move rest of screen up a line, add blank line at end*) WITH p DO AX0701h
CX256*RowNo DX256*(LogScreenDepth-1)+LogScreenWidth-1 BX0700h END Int(p)
DelEolIF ColNo+1RowWidth THEN WITH p DO AX0920h BX7 CXRowWidth-ColNo-1 Int(
p) END END DelEos(*not implemented - but similar to previous*) ClearScreen
(*Osborne specific - home screen and cursor positionp PROCEDURE DrawBox(x
1,y1,x2,y2CARDINAL) (*draw a box for a window on the screen x1,y1 is the
lower left corner x2,y2 is upper right corner*) VARiCARDINAL BEGIN IF O
utputEnabled THEN Gotoxy(x1,y1) ScreenControl(StartGraph) ScreenControl(Corne
rLL) FOR ix1+1 TO x2-1 DO ScreenControl(Horizontal) END ScreenControl(CornerLR
) Gotoxy(x1,y2) ScreenControl(CornerUL) FOR ix1+1 TO x2-1 DO ScreenControl(Ho
rizontal) END ScreenControl(CornerUR) FOR iy2+1 TO as stored in BIOS tables*)
(*now clear display memory*) WITH p DO AX0600h CX0 DX256*(LogScreenDepth-
1)+LogScreenWidth-1 BX0700h END Int(p) ScreenPos0 ColNo0 RowNo0 (* Th
e following graphics characters will need to be modified for different disp
lay systems*) HorizontalPutandInc(0cdx) VerticalPutandInc(0bax) CornerLLPut
andInc(0c8x) CornerULPutandInc(0c9x) CornerURPutandInc(0bbx) CornerLRPutandIn
c(0bcx) Routput a character and increment pointers*) BEGIN ScreenScreenPo
sch ScreenPosScreenPos+CharIncrement INC(ColNo) IF ColNoLogScreenWidth THEN
IF RowNo(LogScreenDepth-1) THEN INC(RowNo) ColNo0 ELSE DEC(ColNo) DEC(Scr
eenPos) END END END PutandInc PROCEDURE Write(chCHAR) (*Write a character
This routine is used by terminal when this version of ScreenIO is in use b
ecause a flag is set by the initialisation of this module together wriage retu
rn*) LF0ax(*Line feed*) TAB09x(*TAB*) BS08x VAR Screen0f000hARRAY0..ScreenS
ize-1 OF CHAR PCG0f800hARRAY0..48 OF CHAR ScreenPosCARDINAL(*next character po
sition on screen*) ColNo,RowNoCARDINAL(*which represents the given position*)
(*Control attributes*) HalfIntensityBOOLEANFALSE(*true if in half intensity
mode*) EnhancedVideoBOOLEANFALSE UnderLineBOOLEANFALSE(*true if in underline
mode*) InverseVideoBOOLEANFALSE BlinkingBOnabledTRUE ScreenWidthLogScreenWidt
h ScreenDepthLogScreenDepth END ScreenIO. Etemp We have allocated "E" fi
rst so that it can be used in the function. We could not simply assign the poin
ter returned by CreateConcatNode to E, since then the E used in the function w
ould be pointing elsewhere. Instead, we must copy the contents of temp into E s
o that the pointers remain correct. This pattern "E" is not yet ready to be u
sed, since the paOLEANFALSE iCARDINAL (*The next few routines handle the cur
sor WasUnderLined is true if the character under the cursor started out unde
rlined TimeToChange is a counter that determines when the cursor should be c
hanged from its current value to its negative, to allow blinking *) VARWasUnde
rLinedBOOLEANFALSE TimeToChangeINTEGER0 OutputEnabledBOOLEAN (*Blink cursor
- decrement timer, if negative reset and change top bit of character under cur
sor*) PROCEDURE BlinkCIMPLEMENTATION MODULE ScreenIO (*This is the memory
mapped version of screen input-output To use it on your machine, you may need
to change some of the constants below The module assumes that the memory f
or the screen is contiguous and in the default bank. (If it is in another bank
, you will have to change the code of the module appropriately) The values
set below are for an Osborne 1 with Screen Pack Note that this version of scr
eenio does not use the terminal definition fiursor BEGIN DEC(TimeToChange)
IF TimeToChange0 THEN TimeToChange900(*change to change blink rate*) ScreenScr
eenPosCHR(ORD(ScreenScreenPos)+128) END END BlinkCursor PROCEDURE ClearCurs
or BEGIN IF (ScreenScreenPos7fx)WasUnderLined THEN ScreenScreenPosCHR(ORD(Scr
eenScreenPos)+128) END WasUnderLinedFALSE END ClearCursor PROCEDURE SetCurso
r BEGIN WasUnderLinedScreenScreenPos80x ScreenScreenPosCHR(ORD(ScreenScreenPo
s)+128) END le. Hence, the graphics characters for the box are hard coded in t
he file This version will not support half intensity on the Osborne since t
hat facility does not work as documented. This may be something to do with my O
sborne having been hacked This version will not scroll the screen either *)
FROM Terminal IMPORT CharRoutine,CharEnabled,BlinkRoutine,BlinkEnabled FROM
FastMove IMPORT Moveup,Movedown FROM SYSTEM IMPORT ADR,SIZE FROM CPM IMPORT wc
cfc,BDOS (*FROM Osborne IMPORT BankSetCursor PROCEDURE Gotoxy(x,yCARDINAL)
(*Position to given coordinates top left is always 0,0 x is column, y is
row A 'Standard' Screen is 80 by 24. The limit is set by the terminal defini
tion file*) BEGIN IF OutputEnabled THEN ClearCursor ColNox RowNoy Scre
enPosColNo+RowNo*CharIncrement*RowWidth IF ScreenPosScreenSize THEN ColNo0 Ro
wNo0 ScreenPos0 END SetCursor END END Gotoxy PROCEDURE PutandInc(chC
HAR) (*2*) FROM IntLogic IMPORT IAND (*Screen handling routines for curso
r position, attribute etc Specific to this compiler*) CONSTLogScreenWidth8
0(*Logical screen width (many people only have 80)*) RowWidth80(*width of mem
ory for one row (i.e. number of bytes*) LogScreenDepth24(*Lines on the screen
*) ScreenStart0f000h(*base of screen*) CharIncrement1(*number of bytes between
characters*) ScreenSize80*24(*number of bytes in screen area*) CR0dx(*Car
RowWidth-1 DO Screeni' ' END SetCursor END END ScrollWindowUp PROCEDUR
E ScrollWindowDown(StartofWindow,EndofWindowCARDINAL) BEGIN IF OutputEnabl
ed THEN ClearCursor Movedown(ADR(Screen(StartofWindow+1)*RowWidth), ADR(Scre
en(StartofWindow)*RowWidth), (EndofWindow-StartofWindow)*RowWidth) FOR iEndof
Window*RowWidth TO (EndofWindow+1)*RowWidth-1 DO Screeni' ' END SetCursor EN
D END ScrollWindowDown PROCEDURE LoadTermCode(FFileName)creenPos+1),RowW
idth-ColNo-1) ScreenScreenPos' ' InsLine(*Move rest of screen down one line, a
dd blank line*) Moveup(ADR(ScreenScreenPos-ColNo),ADR(ScreenScreenPos-ColNo+Row
Width), ScreenSize-ScreenPos+ColNo-RowWidth) FOR iScreenPos-ColNo TO ScreenPos
-ColNo+RowWidth-1 DO Screeni' ' END DelEolFOR iScreenPos TO ScreenPos-ColNo
+RowWidth-1 DO Screeni' ' END DelEosFOR iScreenPos TO ScreenSize-1 DO Screeni'
' END ClearScreen (*Osborne specith the address of this routine This routin
e will need changing for different video systems The Osborne 1 is very limite
d - all you can do is underline and half intensity. All others are mapped onto
these two *) BEGIN IF OutputEnabled THEN ClearCursor IF ch07fx THEN chC
HR(ORD(ch)-128) END IF chCR THEN ScreenPosScreenPos-ColNo ColNo0 ELSIF chLF
THEN IF RowNo(LogScreenDepth-1) THEN INC(RowNo) ScreenPosScreenPos+RowWidth
END ELSIF chBS THEN ific - home screen and cursor position as stored in BIO
S tables*) (*now clear display memory*) Screen0' ' Moveup(ADR(Scree
n1),ADR(Screen0),ScreenSize-1) ScreenPos0 ColNo0 RowNo0
(* The following graphics characters will need to be modified for different
display systems*) HorizontalPutandInc(81x) VerticalPutandInc(80x) CornerLL
PutandInc(84x) CornerULPutandInc(82x) CornerURPutandInc(83x) CornerLRPutaIF C
olNo0 THEN DEC(ColNo) DEC(ScreenPos) ScreenScreenPos' ' END ELSIF chTAB THE
N LOOP IF ColNoLogScreenWidth-1 THEN EXIT END ScreenScreenPos' ' INC(ScreenP
os) INC(ColNo) IF IAND(ColNo,7)0 THEN EXIT END END (*LOOP*) ELSE IF UnderLi
ne OR EnhancedVideo OR Blinking OR InverseVideo THEN chCHR(ORD(ch)+128) END
PutandInc(ch) END (*Not CR or LF or TAB*) SetCursor END END Write P
ROCEDURE ScreenControl(sEdits)ndInc(85x) Startxy,MiddleXY,EndXY(*cursor address
ing - not required*) RingBelliBDOS(wccfc,7) MoveLeftIF ColNo0 THEN DEC(ColNo
) DEC(ScreenPos) ELSIF RowNo0 THEN DEC(RowNo) ColNoLogScreenWidth-1 ScreenP
osColNo+RowNo*RowWidth END MoveRightIF ColNo(LogScreenWidth-1) THEN INC(ColN
o) INC(ScreenPos) ELSIF RowNo(LogScreenDepth-1) THEN ColNo0 INC(RowNo) Scre
enPosRowNo*RowWidth END MoveDownIF RowNo(LogScreenDepth-1) T (*Perform a sc
reen control operation May need alteration for various machines*) BEGIN
IF OutputEnabled THEN ClearCursor CASE s OF DimHalfIntensityTRUE BrightHa
lfIntensityFALSE EnhancedVideoTRUE NormalHalfIntensityFALSE EnhancedVideoFALS
E InverseVideoFALSE BlinkingFALSE UnderLineFALSE InverseInverseVideoTRUE Bl
inkBlinkingTRUE StartGraph,EndGraph(*do nothing*) DelChar(*Move rest of line u
p one, add blank to end*) MoHEN INC(RowNo) ScreenPosScreenPos+RowWidth END
MoveUpIF RowNo0 THEN DEC(RowNo) ScreenPosScreenPos-RowWidth END END (*CASE*)
SetCursor END END ScreenControl PROCEDURE ScrollWindowUp(StartofWindow,
EndofWindowCARDINAL) BEGIN IF OutputEnabled THEN ClearCursor Moveup(ADR(
Screen(StartofWindow)*RowWidth), ADR(Screen(StartofWindow+1)*RowWidth), (End
ofWindow-StartofWindow)*RowWidth) FOR iStartofWindow*RowWidth TO (StartofWindow
+1)*Rvedown(ADR(ScreenScreenPos+1),ADR(ScreenScreenPos),RowWidth-ColNo-1) Scree
nScreenPos-ColNo+RowWidth-1' ' DelLine(*Move rest of screen up a line, add blan
k line at end*) Movedown(ADR(ScreenScreenPos-ColNo+RowWidth), ADR(ScreenScree
nPos-ColNo), ScreenSize-ScreenPos+ColNo-RowWidth) FOR iScreenSize-RowWidth TO
ScreenSize-1 DO Screeni' ' END InsChar(*Move rest of line right one character
, last character may be lost*) Moveup(ADR(ScreenScreenPos),ADR(ScreenS RCarria
ge return*) LF0ax(*Line feed*) TAB09x(*TAB*) BS08x VAR OutputEnabledBOOLEAN
Screen0f000hARRAY0..ScreenSize-1 OF CHAR ScreenPosCARDINAL(*next character po
sition on screen*) ColNo,RowNoCARDINAL(*which represents the given position*)
(*Control attributes*) HalfIntensityBOOLEANFALSE(*true if in half intensity
mode*) EnhancedVideoBOOLEANFALSE UnderLineBOOLEANFALSE(*true if in underline
mode*) InverseVideoBOOLEANFALSE BlinkingBOOLEANFA BEGIN (*not implemented in
this version*) END LoadTermCode PROCEDURE Clip(x1,y1,x2,y2CARDINAL) BEGIN (
*not implemented in this version*) END Clip PROCEDURE DrawBox(x1,y1,x2,y2CARD
INAL) (*draw a box for a window on the screen x1,y1 is the lower left cor
ner x2,y2 is upper right corner*) VARiCARDINAL BEGIN IF OutputEnabled T
HEN Gotoxy(x1,y1) ScreenControl(StartGraph) ScreenControl(CornerLL) FOR ix1+
1 TO x2-1 DO ScreenControl(Horizontal) END ScreenConIMPLEMENTATION MODULE Scree
nIO (*This is the memory mapped version of screen input-output To use it o
n your machine, you may need to change some of the constants below The modu
le assumes that the memory for the screen is contiguous and in the default ban
k. (If it is in another bank, you will have to change the code of the module a
ppropriately) The values set below are for an Osborne 1 with Screen Pack N
ote that this version of screenio does not use the terminal definition fitrol(
CornerLR) Gotoxy(x1,y2) ScreenControl(CornerUL) FOR ix1+1 TO x2-1 DO ScreenCo
ntrol(Horizontal) END ScreenControl(CornerUR) FOR iy2+1 TO y1-1 DO Gotoxy(x2
,i) ScreenControl(Vertical) END FOR iy2+1 TO y1-1 DO Gotoxy(x1,i) ScreenCon
trol(Vertical) END END END DrawBox PROCEDURE OutputToScreen(OnBOOLEAN)
BEGIN OutputEnabledOn END OutputToScreen BEGIN OutputEnabledTRUE (*Set up P
CG Characters*) FOR i0 TO 6*16-1 DO PCGi0x ENDle. Hence, the graphics character
s for the box are hard coded in the file This version will not support half
intensity on the Osborne since that facility does not work as documented. This
may be something to do with my Osborne having been hacked This version will
not scroll the screen either *) FROM Terminal IMPORT CharRoutine,CharEnable
d,BlinkRoutine,BlinkEnabled FROM FastMove IMPORT Moveup,Movedown FROM SYSTEM I
MPORT ADR,SIZE FROM CPM IMPORT wccfc,BDOS (*FROM Osborne IMPORT Bank FOR i0 T
O 10 DO PCGi3cx END (*Horizontal bar*) FOR i16+3 TO 16+3+4 DO PCGi0ffx END (*
Upper Left*) FOR i2*16+3 TO 2*16+3+4 DO PCGi3fx END FOR i2*16+3+5 TO 3*16-1 DO
PCGi3cx END (*Upper Right*) FOR i3*16+3 TO 3*16+3+4 DO PCGi0fcx END FOR i3*1
6+3+5 TO 4*16-1 DO PCGi3cx END (*Lower Left*) FOR i4*16 TO 4*16+2 DO PCGi3cx E
ND FOR i4*16+3 TO 4*16+3+4 DO PCGi3fx END (*Lower Right*) FOR i5*16 TO 5*16+2
DO PCGi03cx END F2*) FROM IntLogic IMPORT IAND (*Screen handling routines
for cursor position, attribute etc Specific to this compiler*) CONSTLogScr
eenWidth100(*Logical screen width (many people only have 80)*) RowWidth128(*w
idth of memory for one row (i.e. number of bytes*) LogScreenDepth24(*Lines on
the screen*) ScreenStart0f000h(*base of screen*) CharIncrement1(*number of by
tes between characters*) ScreenSize128*32(*number of bytes in screen area*)
CR0dx(*OR i5*16+3 TO 5*16+3+4 DO PCGi0fcx END ScreenPos0 BlinkRoutineBlinkCu
rsor BlinkEnabledTRUE ScreenControl(ClearScreen) ColNo0 RowNo0 CharRoutineW
rite CharEnabledTRUE ScreenWidthLogScreenWidth ScreenDepthLogScreenDepth END
ScreenIO. is that this version buffers screen output in order to speed up scr
een output, as character at a time was too slow *) FROM R) ScreenScreenPos
' ' InsLine(*Move rest of screen down one line, add blank line*) Moveup(ADR(Sc
reenScreenPos-ColNo),ADR(ScreenScreenPos-ColNo+RowWidth), ScreenSize-ScreenPos+
ColNo-RowWidth) FOR iScreenPos-ColNo TO ScreenPos-ColNo+RowWidth-1 DO Screeni'
' END DelEolFOR iScreenPos TO ScreenPos-ColNo+RowWidth-1 DO Screeni' ' END
DelEosFOR iScreenPos TO ScreenSize-1 DO Screeni' ' END ClearScreen (*Osborne
specific - home screen and cursorne This routine will need changing for diffe
rent video systems The Osborne 1 is very limited - all you can do is underli
ne and half intensity. All others are mapped onto these two *) BEGIN IF O
utputEnabled THEN ClearCursor IF ch07fx THEN chCHR(ORD(ch)-128) END IF chCR T
HEN ScreenPosScreenPos-ColNo ColNo0 ELSIF chLF THEN IF RowNo(LogScreenDepth-
1) THEN INC(RowNo) ScreenPosScreenPos+RowWidth END ELSIF chBS THEN IF ColNo
0 THEN DEC(ColNoLSE iCARDINAL (*The next few routines handle the cursor
WasUnderLined is true if the character under the cursor started out underlined
TimeToChange is a counter that determines when the cursor should be changed
from its current value to its negative, to allow blinking *) VARWasUnderLinedB
OOLEANFALSE TimeToChangeINTEGER0 (*Blink cursor - decrement timer, if negati
ve reset and change top bit of character under cursor*) PROCEDURE BlinkCurso
r BEGIN DEC(TimeToChange)) DEC(ScreenPos) ScreenScreenPos' ' END ELSIF chT
AB THEN LOOP IF ColNoLogScreenWidth-1 THEN EXIT END ScreenScreenPos' ' INC(S
creenPos) INC(ColNo) IF IAND(ColNo,7)0 THEN EXIT END END (*LOOP*) ELSE IF U
nderLine OR EnhancedVideo OR Blinking OR InverseVideo THEN chCHR(ORD(ch)+128)
END PutandInc(ch) END (*Not CR or LF or TAB*) SetCursor END END Write
PROCEDURE ScreenControl(sEdits) (*Perform a screen cont IF TimeToChang
e0 THEN TimeToChange900(*change to change blink rate*) ScreenScreenPosCHR(ORD(
ScreenScreenPos)+128) END END BlinkCursor PROCEDURE ClearCursor BEGIN IF
(ScreenScreenPos7fx)WasUnderLined THEN ScreenScreenPosCHR(ORD(ScreenScreenPos)+
128) END WasUnderLinedFALSE END ClearCursor PROCEDURE SetCursor BEGIN WasU
nderLinedScreenScreenPos80x ScreenScreenPosCHR(ORD(ScreenScreenPos)+128) END S
etCursor PROCEDURE Gotoxy(x,rol operation May need alteration for various
machines*) BEGIN IF OutputEnabled THEN ClearCursor CASE s OF DimHalfI
ntensityTRUE BrightHalfIntensityFALSE EnhancedVideoTRUE NormalHalfIntensityFA
LSE EnhancedVideoFALSE InverseVideoFALSE BlinkingFALSE UnderLineFALSE Inver
seInverseVideoTRUE BlinkBlinkingTRUE StartGraph,EndGraph(*do nothing*) DelCha
r(*Move rest of line up one, add blank to end*) Movedown(ADR(ScreenScreenPos+1y
CARDINAL) (*Position to given coordinates top left is always 0,0 x is co
lumn, y is row A 'Standard' Screen is 80 by 24. The limit is set by the term
inal definition file*) BEGIN IF OutputEnabled THEN ClearCursor ColNox R
owNoy ScreenPosColNo+RowNo*CharIncrement*RowWidth IF ScreenPosScreenSize THEN
ColNo0 RowNo0 ScreenPos0 END SetCursor END END Gotoxy PROCEDU
RE PutandInc(chCHAR) (*output a character and incre),ADR(ScreenScreenPos),Row
Width-ColNo-1) ScreenScreenPos-ColNo+RowWidth-1' ' DelLine(*Move rest of scree
n up a line, add blank line at end*) Movedown(ADR(ScreenScreenPos-ColNo+RowWidt
h), ADR(ScreenScreenPos-ColNo), ScreenSize-ScreenPos+ColNo-RowWidth) FOR iSc
reenSize-RowWidth TO ScreenSize-1 DO Screeni' ' END InsChar(*Move rest of lin
e right one character, last character may be lost*) Moveup(ADR(ScreenScreenPos)
,ADR(ScreenScreenPos+1),RowWidth-ColNo-1ment pointers*) BEGIN ScreenScreenPo
sch ScreenPosScreenPos+CharIncrement INC(ColNo) IF ColNoLogScreenWidth THEN
IF RowNo(LogScreenDepth-1) THEN INC(RowNo) ColNo0 ELSE DEC(ColNo) DEC(Scr
eenPos) END END END PutandInc PROCEDURE Write(chCHAR) (*Write a character
This routine is used by terminal when this version of ScreenIO is in use b
ecause a flag is set by the initialisation of this module together with the ad
dress of this routi Rde( CreateStringNode('('), Exp), CreateStringNode(')')
) ) tempCreateAltNode( Fact, CreateConcatNode( Fact, CreateConcatNode( C
reateStringNode('*'), Term) ) ) Termtemp tempCreateAltNode( Term,
CreateConcatNode( Term, CreateConcatNode( CreateStringNode('+'), Exp) )
) Exptemp Exp1CreateConcatNode( Exp, CreateLimitNode()) IF MatchPattern(
Exp1,'2*2')NIL THEN WriteString('1 OK'th), (EndofWindow-StartofWindow)*RowWid
th) FOR iEndofWindow*RowWidth TO (EndofWindow+1)*RowWidth-1 DO Screeni' ' END
SetCursor END END ScrollWindowDown PROCEDURE LoadTermCode(FFileName)
BEGIN (*not implemented in this version*) END LoadTermCode PROCEDURE Clip(x
1,y1,x2,y2CARDINAL) BEGIN (*not implemented in this version*) END Clip PROCE
DURE DrawBox(x1,y1,x2,y2CARDINAL) (*draw a box for a window on the screen
x1,y1 is the lower left corner position as stored in BIOS tables*) i
BDOS(wccfc,1bh)iBDOS(wccfc,ORD('S')) iBDOS(wccfc,32)iBDOS(wccfc,32) iB
DOS(wccfc,1bh)iBDOS(wccfc,ORD('')) iBDOS(wccfc,32)iBDOS(wccfc,32) (*Ba
nk2(ADR(Screen0),ADR(ScreenScreenSize-1),80h)*) (*now clear display memory*)
Screen0' ' Moveup(ADR(Screen1),ADR(Screen0),ScreenSize-1) ScreenP
os0 ColNo0 RowNo0 (* The following graphics charx2,y2 is upp
er right corner*) VARiCARDINAL BEGIN IF OutputEnabled THEN Gotoxy(x1,y1)
ScreenControl(StartGraph) ScreenControl(CornerLL) FOR ix1+1 TO x2-1 DO Scree
nControl(Horizontal) END ScreenControl(CornerLR) Gotoxy(x1,y2) ScreenControl(
CornerUL) FOR ix1+1 TO x2-1 DO ScreenControl(Horizontal) END ScreenControl(Cor
nerUR) FOR iy2+1 TO y1-1 DO Gotoxy(x2,i) ScreenControl(Vertical) END FOR i
y2+1 TO y1-1 DO Gotoxy(x1,i) ScreenControl(Verticaacters will need to be modif
ied for different display systems*) HorizontalPutandInc(1bx) VerticalPu
tandInc(0bx) CornerLLPutandInc(1cx) CornerULPutandInc(0fx) CornerURPutandInc(
10x) CornerLRPutandInc(1fx) Startxy,MiddleXY,EndXY(*cursor addressing - not re
quired*) RingBelliBDOS(wccfc,7) MoveLeftIF ColNo0 THEN DEC(ColNo) DEC(Scree
nPos) ELSIF RowNo0 THEN DEC(RowNo) ColNoLogScreenWidth-1 ScreenPosColNo+RowN
o*RowWidth END MoveRl) END END END DrawBox PROCEDURE OutputToScre
en(OnBOOLEAN) BEGIN OutputEnabledOn END OutputToScreen BEGIN OutputEnabledT
RUE BlinkRoutineBlinkCursor BlinkEnabledTRUE ScreenPos0 ScreenControl(ClearS
creen) ColNo0 RowNo0 CharRoutineWrite CharEnabledTRUE ScreenWidthLogScreenW
idth ScreenDepthLogScreenDepth END ScreenIO. ightIF ColNo(LogScreenWidth-1) T
HEN INC(ColNo) INC(ScreenPos) ELSIF RowNo(LogScreenDepth-1) THEN ColNo0 IN
C(RowNo) ScreenPosRowNo*RowWidth END MoveDownIF RowNo(LogScreenDepth-1) THEN
INC(RowNo) ScreenPosScreenPos+RowWidth END MoveUpIF RowNo0 THEN DEC(RowNo)
ScreenPosScreenPos-RowWidth END END (*CASE*) SetCursor END END Screen
Control PROCEDURE ScrollWindowUp(StartofWindow,EndofWindowCARDINAL) BEGIN
IF MODULE Test (*Test of pattern match module *) FROMTerminal IMPORT Writ
eString,ReadString,WriteLn FROMPattern IMPORT NodeType,PNode,CreateStringNode,M
atchPattern,CharSet, CreateAltNode,CreateStringNode, CreateAnyOfNode,CreateCon
catNode,CreateLimitNode FROMStorage IMPORT ALLOCATE VARExp1,Exp,Term,FactPNode
tempPNode BEGIN NEW(Exp) NEW(Term) FactCreateAltNode( CreateAnyOfNode(Cha
rSet'A'..'Z','0'..'9','a'..'z',1,30000,TRUE), CreateConcatNode( CreateConcatNo
OutputEnabled THEN ClearCursor Moveup(ADR(Screen(StartofWindow)*RowWidth), A
DR(Screen(StartofWindow+1)*RowWidth), (EndofWindow-StartofWindow)*RowWidth) F
OR iStartofWindow*RowWidth TO (StartofWindow+1)*RowWidth-1 DO Screeni' ' END
SetCursor END END ScrollWindowUp PROCEDURE ScrollWindowDown(StartofWindo
w,EndofWindowCARDINAL) BEGIN IF OutputEnabled THEN ClearCursor Movedown(
ADR(Screen(StartofWindow+1)*RowWidth), ADR(Screen(StartofWindow)*RowWid RlePt
r) IF (iCARDINAL(LinePos)) OR (chEOF) THEN EXIT END IF chTAB THEN ThisxIAND(Th
isx+8,0fff8h) ELSE INC(Thisx) END bForwardOneChar(CurFilePtr) END iThisx
WHILE Thisx(ScreenWidth+CurrentLeftMargin) DO ChangeMargin(32) Thisxi END W
HILE ThisxCurrentLeftMargin DO ChangeMargin(-32) Thisxi END ThisxThisx-Curre
ntLeftMargin curxCurrentWindowThisx ResetPos END ChangePos PROCEDURE LineM
ove(byINTEGER) VARiINTEGER BEGIN r within the text line. It need not be the s
ame as the position on the screen because of the use of tab characters*) TYPEP
EditFilePOINTER TO EditFile VARiINTEGER cCARDINAL StartofWindow,EndofWindowCA
RDINAL chCHAR CurrentLeftMarginCARDINAL FileLimitBOOLEAN ReDrawnBOOLEAN Cur
FilePtrPEditFile PROCEDURE ChangePosFORWARD PROCEDURE DoScreenChange(CodeEdits
) BEGIN ScreenControl(Code) END DoScreenChange VARlinesmovedINTEGER pPo
sition PROCEDURE SetL) END IF MatchPattern(Exp1,'2+3*2')NIL THEN WriteString
('2 OK') END IF MatchPattern(Exp1,'2*(2+3)')NIL THEN WriteString('3 OK') END
IF MatchPattern(Exp1,'2*2*3*4')NIL THEN WriteString('4 OK') END IF MatchPatte
rn(Exp1,'2*2+3*7')NIL THEN WriteString('5 OK') END IF MatchPattern(Exp1,'2*2+3
*4+(9+8)')NIL THEN WriteString('6 OK') END IF MatchPattern(Exp1,'2++2')NIL THE
N WriteString('7 not ok ') END END Test. inePos(moveINTEGER) BEGIN Retrline(
CurFilePtr,LineLen,LinePos,p,linesmoved,move) END SetLinePos PROCEDURE MarkAsU
pdated BEGIN UpdatedCurrentFileTRUE END MarkAsUpdated PROCEDURE ResetPos BE
GIN Gotoxy(Thisx,Thisy) END ResetPos PROCEDURE ClearRestOfLine BEGIN Screen
Control(DelEol) IF NOT MadeChange THEN FOR cThisx+1 TO ScreenWidth DO Write('
') END END ResetPos END ClearRestOfLine PROCEDURE DelToEOL VARiCARDINAL BE
GIN MarkAsUpdated IF LinePosLineLen THEN DelChars(CurFilePtr,LineLen-LinePos
) END LineLenLinePos ClearRestOfLine END DelToEOL VAR bBOOLEAN PROCEDURE
ReDisplayWindow BEGIN DisplayFile(CurFilePtr,CurrentWindow,Thisx,Thisy) Rese
tPos curxCurrentWindowThisx curyCurrentWindowThisy ReDrawnTRUE END ReDisplay
Window PROCEDURE ReDisplay BEGIN ReDisplayWindow SetLinePos(0) ChangePos E
ND ReDisplay PROCEDURE ChangeMargin(IncINTEGER) BEGIN IF (Inc0) AND (Current
LeftMar (*This is a version of editcont for people with dumb terminals. The o
nly facilities which this version of EDITCONT assumes is Gotoxy and the ability
to highlight in some way *) (*$l-*) IMPLEMENTATION MODULE EditControl (
*Editor control - data areas for file and routines which actually perform edit
functions by calling makeedit to edit the file and editdisp to change the scree
n*) FROM MakeEdits IMPORT InsChars,DelChars,Retrline,BackOneChar,ForwardOneCh
ar, GetCurrentChar,GetPositiginCARDINAL(-Inc)) THEN Inc-INTEGER(CurrentLeftMa
rgin) END IF (Inc0) AND (ThisxCARDINAL(Inc)) THEN IncThisx END CurrentLeftMa
rginINTEGER(CurrentLeftMargin)+Inc ThisxINTEGER(Thisx)-Inc curxCurrentWindowTh
isx LeftMarginCurrentWindowCurrentLeftMargin ReDisplayWindow ResetPos END Ch
angeMargin PROCEDURE ChangePos VARiCARDINAL BEGIN IF LineLenLinePos THEN
LinePosLineLen END Thisx0 i0 LOOP INC(i) chGetCurrentChar(CurFion,SetPosi
tion,ReadNextChar,FindString, LabelOp FROM EditDisplay IMPORT DisplayFile,Erro
rMessage,Windows,LinesPerWindow FROM ScreenIO IMPORT Edits,DelChar,DelLine,InsC
har,InsLine,DelEol,MoveUp, MoveDown,MoveLeft,MoveRight,Gotoxy,ClearScreen, Scr
eenControl, ScreenWidth,ScreenDepth,MadeChange FROM IntLogic IMPORT IAND FROM
SYSTEM IMPORT ADR CONSTCR0dx TAB09x LF0ax EOF1ax (*A remark on the use of L
inePos and curx LinePos always points to the number of the characte R PROCE
DURE AlphaNum(chCHAR)BOOLEAN BEGIN chCAP(ch) RETURN ((ch'A') AND (ch'Z')) OR
((ch'0') AND (ch'9')) END AlphaNum PROCEDURE FindWord(BackwardBOOLEANDeleteB
OOLEAN) (*Find a word and optionally delete it A word is a string alphanum
erics or a string of marks, tabs or spoaces The cursor is repositioned*) VA
RchCHAR b1BOOLEAN BEGIN FileLimitFALSE IF Backward THEN Left IF NOT Moved
OK THEN RETURN END END chGetCurrentChar(CurFilePtr) ChangeMargin(-INTEGER(Cu
rrentLeftMargin)) END Thisx0 ResetPos LinePos0 SetLinePos(0) END DelFullLi
ne PROCEDURE ScrollText(ByINTEGER) (*Scroll up one line in the file (wh
ich means the text scrolls down - backwards to what you might think at first)*)
BEGIN ScrollWindow(StartofWindow,EndofWindow,By) END ScrollText PROCEDURE
ScrollUp BEGIN ScrollText(-1) IF MovedOK THEN IF ThisyEndofWindow THEN
INC(Thisy) ResetPos ELSE LineMo ReDrawnFALSE iLinePos SetLinePos(by) Line
Posi ChangePos (*IF ABS(by)1 THEN ReDisplayWindow END*) END LineMove VARpw
Position PROCEDURE WritePartLine(cCARDINAL) VARSavexCARDINAL BEGIN GetPositi
on(CurFilePtr,pw) LOOP ReadNextChar(pw,ch) IF (ch0dx) OR (ch1ax) OR (ch0ax) T
HEN EXIT END IF c(ScreenWidth+CurrentLeftMargin) THEN EXIT END IF chTAB THEN
REPEAT IF cCurrentLeftMargin THEN Write(' ') END INC(c) UNTIL IAND(c,ve(-1)
ResetPos END END END ScrollUp PROCEDURE ScrollDown BEGIN ScrollText(1)
IF MovedOK THEN IF ThisyStartofWindow THEN DEC(Thisy) ELSE LineMove(1) END
END ResetPos END ScrollDown PROCEDURE Left VARchCHAR SaveLineLenCARDINAL
pPosition BEGIN MovedOKTRUE ReDrawnFALSE SaveLineLenLineLen GetPosition(Cu
rFilePtr,p) IF LinePos0 THEN bBackOneChar(CurFilePtr) chGetCurrentChar(CurFil
ePtr) IF (CurrentLeftM7)1 ELSE IF cCurrentLeftMargin THEN Write(ch) END INC(
c) END END(*LOOP*) SavexThisx IF cCurrentLeftMargin THEN Thisx0 ELSE Thisxc
-CurrentLeftMargin END ClearRestOfLine ThisxSavex END WritePartLine PROCEDUR
E WriteLine BEGIN WritePartLine(1) END WriteLine PROCEDURE ScrollWindow(Star
t,EndCARDINALByINTEGER) (*Scroll the window by redisplaying all or part of it
Start and End give actual screen poistions (in y) for the top and bottom of t
heargin0) AND (Thisx0) THEN ChangeMargin(-32) END DEC(LinePos) IF NOT ReDraw
n THEN IF chTAB THEN DEC(Thisx) ResetPos ELSE LineMove(0) END END ELSE
Thisx1023 LinePos1023 Up IF NOT MovedOK THEN LinePos0 LineLenSaveLineLen
SetPosition(CurFilePtr,p) Thisx0 ResetPos END END END Left PROCEDURE Ri
ght VARchCHAR iCARDINAL BEGIN chGetCurrentChar(CurFilePtr) IF ch1ax (*on EO
F scroll*) VAR pPosition iINTEGER BEGIN GetPosition(CurFilePtr,p) iINTEGER
(Start)-INTEGER(Thisy)+By SetLinePos(i) MovedOKFALSE IF linesmovedi THEN RETU
RN END MovedOKTRUE iStart LOOP IF CARDINAL(i)End THEN EXIT END Gotoxy(0,i)
WriteLine SetLinePos(1) IF linesmoved1 THEN EXIT END INC(i) END SetPositio
n(CurFilePtr,p) SetLinePos(0) ChangePos END ScrollWindow PROCEDURE RemoveLin
e (*Remove a line from the screen and brin char*) THEN RETURN END bForwardOn
eChar(CurFilePtr) IF LinePosLineLen THEN Thisx0 LinePos0 bBackOneChar(CurFil
ePtr) Down ELSE IF chTAB THEN i9 ELSE i1 END IF (Thisx+i)(ScreenWidth-1)
THEN ChangeMargin(32) END INC(LinePos) IF chTAB THEN INC(Thisx) ResetPos
ELSE (*if moves over tabs are slow, replace the repeated moves right by a
gotoxy*) ThisxIAND(Thisx+8,0fff8h) ResetPos END END END Rightg another lin
e up at the bottom Thisy gives line to remove*) VARpPosition BEGIN Gotoxy(
0,Thisy) ScrollWindow(Thisy,EndofWindow,1) iEndofWindow-Thisy+1 GetPosition(C
urFilePtr,p) SetLinePos(i) IF linesmovedi THEN MovedOKTRUE Gotoxy(0,EndofWin
dow) WriteLine END SetPosition(CurFilePtr,p) END RemoveLine PROCEDURE DelFu
llLine BEGIN MarkAsUpdated RemoveLine SetLinePos(0) DelChars(CurFilePtr,Lin
eLen+2) LinePos0 IF CurrentLeftMargin0 THEN R angePos i(ScreenDepth
-Windows) DIV Windows StartofWindow(i+1)*(CurrentWindow-1) ELSE StartofWindo
w0 i0 END IF CurrentWindowWindows THEN EndofWindowStartofWindow+i-1 ELSE
EndofWindowScreenDepth-2 END END ChangeWindow PROCEDURE ResetScreenPos BEG
IN IF CurrentWindow0 THEN ThisxcurxCurrentWindow ThisycuryCurrentWindow Rese
tPos END END ResetScreenPos PROCEDURE MoveWindow(from,toCARDINAL) VARbBOOLEA
N BEGIN curxtoCH1ARRAY0..0 OF CHAR BEGIN CH10GetCurrentChar(CurFilePtr) IF
(CH10CR) AND (chCR) AND (CH101ax) THEN IF (CH10TAB) AND (chTAB) THEN DelChars(
CurFilePtr,1) CH10ch InsChars(CurFilePtr,CH1,1) bBackOneChar(CurFilePtr) Wri
te(ch) ResetPos Right MarkAsUpdated ELSE DelOneChar InsOneChar(ch) END E
LSE InsOneChar(ch) END END OverWrite PROCEDURE Up BEGIN IF ThisyStartofW
indow THEN ReDisplayWindow b1AlphaNum(ch) IF chEOF THEN RETURN END REPEAT I
F Delete THEN DelOneChar END IF Backward THEN Left ELSIF NOT Delete THEN Rig
ht END chGetCurrentChar(CurFilePtr) UNTIL (b1AlphaNum(ch)) OR FileLimit OR (c
hEOF) IF Backward AND NOT FileLimit THEN Right END END FindWord PROCEDURE Dow
n BEGIN LineMove(1) FileLimitlinesmoved0 IF linesmoved0 THEN IF (ThisyEndof
Window) THEN ReDisplayWindow ELSIF NOT ReDrawn THEN INC(Thisy) ResetPos
END LineMove(-1) FileLimitlinesmoved0 IF (linesmoved0) AND (ThisyStartofWind
ow) AND NOT ReDrawn THEN DEC(Thisy) ResetPos END END Up PROCEDURE UpScreen
BEGIN LineMove(1-INTEGER(LinesPerWindow)) ReDisplayWindow END UpScreen PRO
CEDURE DownScreen BEGIN LineMove(LinesPerWindow-1) ReDisplayWindow END DownS
creen PROCEDURE Top BEGIN LinePos0 LineMove(-16736) ReDisplayWindow END To
p PROCEDURE Bottom BEGIN LinePos999 LineMove(16736END END END Down PRO
CEDURE RedoLine BEGIN Gotoxy(0,Thisy) SetLinePos(0) WriteLine ChangePos EN
D RedoLine PROCEDURE InsOneChar(chCHAR) VARCH1ARRAY0..0 OF CHAR BEGIN ReDr
awnFALSE MarkAsUpdated CH10ch InsChars(CurFilePtr,CH1,1) INC(LinePos) INC(L
ineLen) IF chCR THEN CH10LF InsChars(CurFilePtr,CH1,1) ResetPos ClearRestOf
Line IF ThisyEndofWindow THEN ScrollText(0) DEC(Thisy) ELSE ScrollWindow(
Thisy+1) ReDisplayWindow END Bottom PROCEDURE FarLeft BEGIN IF CurrentLeftM
argin0 THEN ChangeMargin(-INTEGER(CurrentLeftMargin)) END SetLinePos(0) Lin
ePos0 ChangePos END FarLeft PROCEDURE FarRight BEGIN SetLinePos(0) LinePos
LineLen ChangePos END FarRight PROCEDURE ChangeWindow(NoINTEGER) VARbBOOLEAN
iCARDINAL BEGIN IF CurrentWindow0 THEN curxCurrentWindowThisx curyCurrentW
indowThisy bLabelOp(CurFilePtr,TRUE,CHR(CurrentWindow),EndofWindow,-1) END IN
C(Thisy) ResetPos LinePos0 RedoLine ELSIF chTAB THEN RedoLine ELSE IF This
x(ScreenWidth-1) THEN ChangeMargin(32) END IF NOT ReDrawn THEN IF LinePosLin
eLen THEN bBackOneChar(CurFilePtr) WritePartLine(CurrentLeftMargin+Thisx+1) I
NC(Thisx) bForwardOneChar(CurFilePtr) ELSE Write(ch) INC(Thisx) END END E
ND ResetPos END InsOneChar PROCEDURE DelOneChar BEGIN MarkAs) END Current
WindowNo IF CurrentWindowWindows THEN CurrentWindowWindows END IF CurrentWin
dow0 THEN (*set up a pointer to the current file to save index calculation e
very time the file is referenced*) CurrentFileWindowFileCurrentWindow CurFileP
trPEditFile(ADR(FilesCurrentFile)) bLabelOp(CurFilePtr,FALSE,CHR(CurrentWindow)
) ThisxcurxCurrentWindow ThisycuryCurrentWindow CurrentLeftMarginLeftMarginCu
rrentWindow SetLinePos(0) ChUpdated chGetCurrentChar(CurFilePtr) IF LinePosL
ineLen THEN i2 ELSE i1 END DelChars(CurFilePtr,i) IF i2 THEN IF ThisyEndofWi
ndow THEN INC(Thisy) iLinePos RemoveLine LinePosi DEC(Thisy) RedoLine EN
D ELSE DEC(LineLen) WritePartLine(CurrentLeftMargin+Thisx+1) END (*ELSIF ch
TAB THEN RedoLine ELSE LineLenLineLen-1 DoScreenChange(DelChar) END*) Rese
tPos END DelOneChar PROCEDURE OverWrite(chCHAR) VAR !R!!!!!!!!!inwindow sta
rtline(INTEGER(LinesPerWindow)+1)*(window-1) Gotoxy(0,startline) (*first lin
e of this window*) i0(*line within window*) kLinesPerWindow DIV 2 Retrline(f,
len,charsin,pos,moved,-k) LOOP (*check if this is the line we were positio
ned to upon entry*) linepos0 j0 LOOP IF (moved0) AND (jCARDINAL(charsin))
THEN curxlinepos-LeftMarg curyi+CARDINAL(startline) END INC(j) IF jCARDINAL
(len) THEN EXIT END (*cThisx,Thisy, curx,cury,ReDisplay FROM IntLogic IMPOR
T IAND FROMFiles IMPORT Lookup,Close,FILE,ReadBlock FROMSYSTEM IMPORT ADR CON
STEOF1ax PROCEDURE ClearToEnd(iCARDINAL) BEGIN ScreenControl(DelEol) IF NOT
MadeChange THEN FOR ii TO ScreenWidth-1 DO Write(' ') END END END ClearToEnd
PROCEDURE ErrorMessage(s1,s2ARRAY OF CHAR) (*Display error message at bottom
of screen*) VAR iINTEGER BEGIN Gotoxy(0,ScreenDepth-1) ScreenControl(RingBe
ll) ClearToEnd(1) curxfrom curytocuryfrom LeftMargintoLeftMarginfrom WindowF
iletoWindowFilefrom bLabelOp(FilesWindowFileto,TRUE,CHR(to)) END MoveWindow P
ROCEDURE ElideWindow(WindowNoINTEGER) BEGIN FOR iWindowNo+1 TO INTEGER(Windows
) DO MoveWindow(i,i-1) END DEC(Windows) CurrentWindow0 END ElideWindow PRO
CEDURE MakeWindow BEGIN INC(Windows) MoveWindow(CurrentWindow,Windows) END M
akeWindow PROCEDURE Search(ReplaceARRAY OF CHARRLenINTEGERLe Gotoxy(0,ScreenDep
th-1) WriteString(s1)WriteString(s2) END ErrorMessage PROCEDURE SetWindows(iI
NTEGER) (*set number of edit windows in use - you must refresh the entire sc
reen with calls to DisplayFile after a call to this routine*) VARj,kCARDINAL
BEGIN Windowsi ScreenControl(ClearScreen) IF Windows1 THEN LinesPerWindow(
ScreenDepth-Windows) DIV Windows ELSELinesPerWindowScreenDepth-1 END FOR j2 TO
Windows DO Gotoxy(0,(LinesPerWindow+1)*(j-1)-1) nCARDINAL)BOOLEAN (*search
for string and replace if found*) VARbBOOLEAN FoundBOOLEAN BEGIN bLen128 I
F b THEN LenLen-128 END FoundFindString(CurFilePtr,b) IF Found AND (RLen0) THE
N MarkAsUpdated DelChars(CurFilePtr,Len) InsChars(CurFilePtr,Replace,RLen)
bBackOneChar(CurFilePtr) END ReDisplay RETURN Found END Search PROCEDURE Go
ToLabel(chCHAR) BEGIN IF LabelOp(CurFilePtr,FALSE,ch) THEN ReDisplay ELSE E
rrorMessage(' Label nScreenControl(StartGraph) FOR k1 TO ScreenWidth DO Scree
nControl(Horizontal) END ScreenControl(EndGraph) END END SetWindows (*put a
line between the windows*) VARchCHAR posPosition charsin,icINTEGER len,mo
vedINTEGER linepos,LeftMargCARDINAL PROCEDURE SetLeftMarg(fEditFilewindowINTEG
ERVAR curx,curyCARDINAL) BEGIN Retrline(f,len,charsin,pos,moved,0) linepos0
FOR ic0 TO charsin DO ReadNextChar(pos,ch) IF ch09x THEN lineposIAND(liot defi
ned',' ') ResetPos END END GoToLabel BEGIN CurrentWindow0 CurrentFile0 Cu
rFilePtrPEditFile(ADR(Files1)) END EditControl. This version will not
scroll the screen either *) FROM Terminal IMPORT CharRoutine,CharEnabled,Bli
nkRoutine,BlinkEnabled FROM FastMove IMPORT Moveup,Movedown FROM SYSTEM IMPORT
ADR,SIZE FROM CPM IMPORT wccfc,BDOS (*FROM Osborne IMPORT Banknepos+8,0fff8h)
ELSE INC(linepos) END END LeftMarg0 WHILE linepos(LeftMarg+ScreenWidth) DO
LeftMargLeftMarg+32 END LeftMarginwindowLeftMarg END SetLeftMarg PROCEDURE
DisplayFile(fEditFilewindowINTEGERVAR curx,curyCARDINAL) (*redisplay as much
text as will fit in the window for the given file starting at the current posit
ion in the file*) VARi,j,k,lineposCARDINAL movedoneINTEGER startlineINTEGER (
*first line of window*) BEGIN LeftMargLeftMarg(*This is the dumb screen versio
n of EditDisplay It uses writes of blanks to clear the rest of each line inst
ead of Delete to EOL *) IMPLEMENTATION MODULE EditDisplay (*Display part
of a file being edited*) FROMSCREENIO IMPORT Gotoxy,ScreenControl, MadeChange,
ScreenWidth,ScreenDepth FROM Terminal IMPORT WriteString,Write,WriteLn,Read, F
ROM MakeEdits IMPORT Position,Retrline,ReadNextChar,ErrorList,ErrorCount,LabelOp
FROMEditCont IMPORT LeftMargin,Files,CurrentWindow,CurrentFile, "R""""""""".D
AT ',reply) (*Lookup opens the file for input/output reply returns zero if
no file is found a device name can be used in front of the file name In fa
ct, you can use a non-disc file name (eg PUN or CON) but if you do this, you m
ust do your IO through the module Streams (or InOut, which calls streams), as
the IO to the serial devices is performed by that module (it calls Files to
do IO to disc devices) *) IF reply0 THEN(*OK - file found*) (*read the fi
rst 1 or twheck for cursor line*) ReadNextChar(pos,ch) IF ch09x THEN REPEA
T INC(linepos) IF (lineposLeftMarg) AND (linepos(ScreenWidth+LeftMarg)) THEN
Write(' ') END UNTIL IAND(linepos,7)0 ELSIF chEOF THEN EXIT ELSE INC(l
inepos) IF (lineposLeftMarg) AND (linepos(ScreenWidth+LeftMarg)) THEN Write(
ch) END END(*IF chvarious things*) END (*inner loop*) INC(i) IF lineposLef
tMarg THEN ClearToEo blocks of the error message file, countin the characte
rs preceding the error emssage we want *) ReadBlock(f,ADR(b),0,128,reply) j
ErrorNumber IF ErrorNumber128 THEN iCount(128) ReadBlock(f,ADR(b),1,128,reply
) jj-128 ELSE i0 END ii+Count(j-1) LengthORD(bj-1) ji DIV 128 (*block to
read*) ii - 128*j (*offset of first character in block*) ReadBlock(f,ADR(b),j+
2,128,reply) FOR k0 TO Length-1 DO IF i128 THEN Ind(linepos+1-LeftMarg) ELS
E ClearToEnd(1) END IF iLinesPerWindow THEN EXIT ELSE WriteLn linepos0 E
ND INC(moved) Retrline(f,len,ic,pos,movedone,1) IF movedone0 THEN FOR ii+1 T
O LinesPerWindow DO ClearToEnd(1) WriteLn END EXIT END END(*LOOP*) END Di
splayFile PROCEDURE DisplayError (*The error message file contains the messa
ges, The first two blocks give the lengths of the error messages The remain
ing blocks NC(j) ReadBlock(f,ADR(b),j+2,128,reply) i0 END tkbi INC(i) END
tLength0c WriteString(t) ELSE WriteString(' Could not open error messages f
ile') END blLabelOp(FilesCurrentFile,FALSE,CHR(ErrorOrdinal+0b0h)) ReDisplay
(*DisplayFile(FilesCurrentFile,CurrentWindow,Thisx,Thisy)*) Gotoxy(Thisx,Thisy
) curxCurrentWindowThisx curyCurrentWindowThisy END DisplayError BEGIN Wind
ows0 END EditDisplay. give the text of the error messages *) TYPETextARRAY0..
63 OF CHAR VARfFILE(*FILE is a type exported from the module Files*) bARRA
Y 0..127 OF CHAR i,j,k,LengthCARDINAL tText ErrorNumberCARDINAL replyINTEGER
blBOOLEAN PROCEDURE Count(kCARDINAL)CARDINAL VARiCARDINAL BEGIN i0 IF k0
THEN RETURN 0 END FOR kk-1 TO 0 BY -1 DO ii+ORD(bk) END RETURN i END Count
PROCEDURE WriteCard(iCARDINAL) VARtARRAY0..3 OF CHAR j,kCARDINALDoFind(*Ctrl
L*) MainTable1fxDelBack(*- on Osborne 1*) (*The next key, assigned tx) END
bForwardOneChar(CurFilePtr) END iThisx WHILE Thisx(ScreenWidth+CurrentLeftMa
rgin) DO ChangeMargin(32) Thisxi END WHILE ThisxCurrentLeftMargin DO Change
Margin(-32) Thisxi END ThisxThisx-CurrentLeftMargin curxCurrentWindowThisx
ResetPos END ChangePos PROCEDURE LineMove(byINTEGER) VARiINTEGER BEGIN B
EGIN kHIGH(t) WHILE i0 DO ji DIV 10 tkCHR(ORD('0')+i-10*j) ij DEC(k) END
FOR kk+1 TO HIGH(t) DO Write(tk) END END WriteCard BEGIN IF ErrorOrdinalErro
rCount THEN RETURN END Gotoxy(0,ScreenDepth-1) ErrorNumberErrorListErrorOrdina
l.ErrorNum ScreenControl(DelEol) WriteString('Error ') WriteCard(ErrorNumber)
WriteString('(')WriteCard(ErrorOrdinal+1) WriteString(' of ')WriteCard(ErrorC
ount) WriteString(') ') Lookup(f,'ERRMSG #R######### $R$$$$$$$$$ %R%%%%%%%%
% &R&&&&&&&&& 'R'''''''''