Ftl Modula 2 (UK) (Face 3B) (1988) [UTILITAIRE].dsk
HexaDumpAscii only
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'''''''''
Tous droits réservés. Reproduction sans autorisation interdite. © Kukulcan