FTL Modula-2 Complete Development System (UK) (128K) (Face 2B) (1987) [Original] [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 35 30 37 30 38 00    ..SAMdisk150708.
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 41 02 00 00 00 02    ......R...A.....
000120:  00 00 46 02 00 00 00 02 00 00 42 02 00 00 00 02    ..F.......B.....
000130:  00 00 47 02 00 00 00 02 00 00 43 02 00 00 00 02    ..G.......C.....
000140:  00 00 48 02 00 00 00 02 00 00 44 02 00 00 00 02    ..H.......D.....
000150:  00 00 49 02 00 00 00 02 00 00 45 02 00 00 00 02    ..I.......E.....
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:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000210:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000220:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000230:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000240:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000250:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000260:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000270:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000280:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000290:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0002A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0002B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0002C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0002D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0002E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0002F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0003A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0003B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0003C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0003D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0003E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0003F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000400:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000410:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000420:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000430:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000440:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000450:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000460:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000470:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000480:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000490:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000500:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000510:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000520:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000530:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000540:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000550:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000560:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000570:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000580:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000590:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000600:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000610:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000620:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000630:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000640:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000650:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000660:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000670:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000680:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000690:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0006A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0006B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0006C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0006D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0006E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0006F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0007A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0007B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0007C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0007D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0007E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0007F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000800:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000810:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000820:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000830:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000840:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000850:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000860:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000870:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000880:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000890:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0008A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0008B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0008C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0008D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0008E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0008F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000900:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000910:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000920:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000930:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000940:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000950:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000960:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000970:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000980:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000990:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0009A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0009B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0009C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0009D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0009E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0009F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
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:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000C10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000C20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000C30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000C40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000C50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000C60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000C70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000C80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000C90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000CA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000CB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000CC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000CD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000CE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000CF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000D00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000D10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000D20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000D30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000D40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000D50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000D60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000D70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000D80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000D90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000DA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000DB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000DC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000DD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000DE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000DF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
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:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0010A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0010B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0010C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0010D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0010E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0010F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001100:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001110:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001120:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001130:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001140:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001150:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001160:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001170:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001180:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001190:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0011A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0011B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0011C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0011D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0011E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0011F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
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 41 02 00 00 00 02    ......R...A.....
001420:  01 00 46 02 00 00 00 02 01 00 42 02 00 00 00 02    ..F.......B.....
001430:  01 00 47 02 00 00 00 02 01 00 43 02 00 00 00 02    ..G.......C.....
001440:  01 00 48 02 00 00 00 02 01 00 44 02 00 00 00 02    ..H.......D.....
001450:  01 00 49 02 00 00 00 02 01 00 45 02 00 00 00 02    ..I.......E.....
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:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001510:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001520:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001530:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001540:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001550:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001560:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001570:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001580:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001590:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0015A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0015B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0015C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0015D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0015E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0015F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001600:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001610:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001620:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001630:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001640:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001650:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001660:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001670:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001680:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001690:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0016A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0016B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0016C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0016D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0016E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0016F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0017A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0017B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0017C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0017D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0017E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0017F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001800:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001810:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001820:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001830:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001840:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001850:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001860:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001870:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001880:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001890:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0018A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0018B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0018C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0018D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0018E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0018F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
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:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001B10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001B20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001B30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001B40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001B50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001B60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001B70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001B80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001B90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001BA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001BB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001BC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001BD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001BE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001BF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001C00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001C10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001C20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001C30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001C40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001C50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001C60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001C70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001C80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001C90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001CA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001CB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001CC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001CD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001CE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001CF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001D00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001D10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001D20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001D30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001D40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001D50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001D60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001D70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001D80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001D90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001DA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001DB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001DC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001DD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001DE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001DF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001E00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001E10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001E20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001E30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001E40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001E50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001E60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001E70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001E80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001E90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001EA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001EB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001EC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001ED0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001EE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001EF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001F00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001F10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001F20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001F30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001F40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001F50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001F60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001F70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001F80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001F90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001FA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001FB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001FC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001FD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001FE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001FF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0020A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0020B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0020C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0020D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0020E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0020F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002100:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002110:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002120:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002130:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002140:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002150:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002160:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002170:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002180:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002190:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0021A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0021B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0021C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0021D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0021E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0021F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002200:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002210:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002220:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002230:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002240:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002250:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002260:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002270:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002280:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002290:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0022A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0022B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0022C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0022D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0022E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0022F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0023A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0023B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0023C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0023D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0023E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0023F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002400:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002410:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002420:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002430:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002440:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002450:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002460:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002470:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002480:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002490:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0024A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0024B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0024C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0024D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0024E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0024F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002500:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002510:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002520:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002530:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002540:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002550:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002560:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002570:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002580:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002590:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0025A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0025B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0025C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0025D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0025E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0025F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002600:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002610:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002620:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002630:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002640:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002650:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002660:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002670:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002680:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002690:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0026A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0026B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0026C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0026D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0026E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0026F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
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 41 02 00 00 00 02    ......R...A.....
002720:  02 00 46 02 00 00 00 02 02 00 42 02 00 00 00 02    ..F.......B.....
002730:  02 00 47 02 00 00 00 02 02 00 43 02 00 00 00 02    ..G.......C.....
002740:  02 00 48 02 00 00 00 02 02 00 44 02 00 00 00 02    ..H.......D.....
002750:  02 00 49 02 00 00 00 02 02 00 45 02 00 00 00 02    ..I.......E.....
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:  00 57 50 20 20 20 20 20 20 43 4F 4D 00 00 00 08    .WP      COM....
002810:  02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002820:  00 53 44 20 20 20 20 20 20 43 4F 4D 00 00 00 07    .SD      COM....
002830:  03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002840:  00 57 44 20 20 20 20 20 20 43 4F 4D 00 00 00 04    .WD      COM....
002850:  04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002860:  00 2D 32 4A 55 4C 59 31 39 38 37 20 00 00 00 00    .-2JULY1987 ....
002870:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002880:  00 2D 42 41 43 4B 55 50 4E 4F 57 21 00 00 00 00    .-BACKUPNOW!....
002890:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0028A0:  00 2D 56 45 52 53 49 4F 4E 31 32 34 00 00 00 00    .-VERSION124....
0028B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0028C0:  00 43 41 54 20 20 20 20 20 4D 4F 44 00 00 00 80    .CAT     MOD....
0028D0:  05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14    ................
0028E0:  00 43 41 54 20 20 20 20 20 4D 4F 44 01 00 00 04    .CAT     MOD....
0028F0:  15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002900:  00 43 4F 4D 4D 41 4E 44 20 44 45 46 00 00 00 09    .COMMAND DEF....
002910:  16 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002920:  00 43 4F 4D 4D 41 4E 44 20 4D 4F 44 00 00 00 0C    .COMMAND MOD....
002930:  18 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002940:  00 43 4F 4D 50 41 52 45 20 4D 4F 44 00 00 00 61    .COMPARE MOD...a
002950:  1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 00 00 00    ...... !"#$%&...
002960:  00 43 4F 4D 50 42 49 4E 20 4D 4F 44 00 00 00 0D    .COMPBIN MOD....
002970:  27 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00    '(..............
002980:  00 43 4F 4D 50 44 49 52 20 4D 4F 44 00 00 00 4E    .COMPDIR MOD...N
002990:  29 2A 2B 2C 2D 2E 2F 30 31 32 00 00 00 00 00 00    )*+,-./012......
0029A0:  00 46 49 4C 45 4F 50 53 20 44 45 46 00 00 00 04    .FILEOPS DEF....
0029B0:  33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    3...............
0029C0:  00 46 49 4C 45 4F 50 53 20 4D 4F 44 00 00 00 14    .FILEOPS MOD....
0029D0:  34 35 36 00 00 00 00 00 00 00 00 00 00 00 00 00    456.............
0029E0:  00 47 45 54 46 49 4C 45 53 44 45 46 00 00 00 06    .GETFILESDEF....
0029F0:  37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    7...............
002A00:  01 0B 00 ED B0 D1 E1 72 2B 73 2B F1 77 0E 17 11    .......r+s+.w...
002A10:  22 05 CD 05 00 11 22 05 D5 0E 13 CD 05 00 D1 0E    ".....".........
002A20:  16 CD 05 00 3C 28 18 CD 77 03 C0 11 22 05 D5 0E    ....<(..w..."...
002A30:  10 CD 05 00 D1 0E 13 CD 05 00 11 A8 04 18 03 11    ................
002A40:  9B 04 0E 09 C3 05 00 5F 0E 02 18 F8 7E C6 40 23    ......._....~.@#
002A50:  E5 CD 47 03 1E 3A CD 48 03 E1 06 0B E5 C5 3E 03    ..G..:.H......>.
002A60:  B8 20 07 E5 1E 2E CD 48 03 E1 5E CB BB 73 CD 48    . .....H..^..s.H
002A70:  03 C1 E1 23 10 E6 C9 AF 32 F8 04 67 6F 22 FB 04    ...#....2..go"..
002A80:  11 51 11 D5 0E 1A CD 05 00 11 FE 04 0E 14 CD 05    .Q..............
002A90:  00 D1 A7 20 19 2A FB 04 23 22 FB 04 21 80 00 19    ... .*..#"..!...
002AA0:  ED 5B F9 04 EB ED 52 30 DA 3E 01 32 F8 04 ED 4B    .[....R0.>.2...K
002AB0:  FB 04 78 B1 28 23 11 51 11 C5 D5 0E 1A CD 05 00    ..x.(#.Q........
002AC0:  11 22 05 0E 15 CD 05 00 D1 C1 A7 28 02 AF C9 21    .".........(...!
002AD0:  80 00 19 EB 0B 78 B1 20 E0 3A F8 04 A7 20 98 11    .....x. .:... ..
002AE0:  22 05 0E 10 CD 05 00 3C C9 4F AF 21 81 00 1E 02    "......<.O.!....
002AF0:  D5 E5 11 0A 00 21 00 00 06 10 CB 11 17 ED 6A ED    .....!........j.
002B00:  52 30 01 19 3F 10 F3 CB 11 17 55 E1 72 2B D1 1D    R0..?.....U.r+..
002B10:  20 DE 06 02 CB 81 78 FE 01 20 02 CB C1 23 7E B7     .....x.. ...#~.
002B20:  20 08 CB 41 20 04 3E 20 18 04 CB C1 C6 30 E5 C5     ..A .> .....0..
002B30:  CD 47 03 C1 E1 10 DF C9 AF 32 F7 04 32 F4 04 47    .G.......2..2..G
002B40:  3A 80 00 4F 21 81 00 3E 2D ED B1 C0 2B 2B 7E FE    :..O!..>-...++~.
002B50:  20 23 23 20 F2 7E 23 FE 51 28 08 FE 42 C0 32 F5     ## .~#.Q(..B.2.
002B60:  04 18 F2 32 F7 04 18 ED 57 50 20 56 33 2E 30 20    ...2....WP V3.0 
002B70:  28 43 29 20 31 39 38 37 20 48 69 53 6F 66 74 0D    (C) 1987 HiSoft.
002B80:  0A 42 75 66 66 65 72 20 73 69 7A 65 3A 20 24 0D    .Buffer size: $.
002B90:  0A 24 4E 6F 20 66 69 6C 65 73 24 20 4F 70 65 6E    .$No files$ Open
002BA0:  20 66 61 69 6C 65 64 24 20 44 69 73 63 20 49 2F     failed$ Disc I/
002BB0:  4F 20 65 72 72 6F 72 20 28 46 75 6C 6C 20 3F 29    O error (Full ?)
002BC0:  24 20 74 6F 20 24 20 20 53 61 6D 65 24 20 20 43    $ to $  Same$  C
002BD0:  6F 70 79 20 28 59 2F 4E 2F 41 2F 51 2F 50 2F 42    opy (Y/N/A/Q/P/B
002BE0:  2F 57 29 3F 20 24 00 3F 3F 3F 3F 3F 3F 3F 3F 3F    /W)? $.?????????
002BF0:  3F 3F 00 00 00 00 00 00 00 00 00 00 00 00 20 4C    ??............ L
002C00:  00 47 45 54 46 49 4C 45 53 4D 4F 44 00 00 00 0F    .GETFILESMOD....
002C10:  38 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00    89..............
002C20:  00 49 4D 50 4F 52 54 20 20 44 45 46 00 00 00 17    .IMPORT  DEF....
002C30:  3A 3B 3C 00 00 00 00 00 00 00 00 00 00 00 00 00    :;<.............
002C40:  00 49 4D 50 4F 52 54 20 20 4D 4F 44 00 00 00 3E    .IMPORT  MOD...>
002C50:  3D 3E 3F 40 41 42 43 44 00 00 00 00 00 00 00 00    =>?@ABCD........
002C60:  00 4D 41 43 52 4F 53 20 20 4D 42 45 00 00 00 33    .MACROS  MBE...3
002C70:  45 46 47 48 49 4A 4B 00 00 00 00 00 00 00 00 00    EFGHIJK.........
002C80:  00 4D 4C 55 20 20 20 20 20 4D 4F 44 00 00 00 64    .MLU     MOD...d
002C90:  4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 00 00 00    LMNOPQRSTUVWX...
002CA0:  00 50 41 54 54 45 52 4E 20 44 45 46 00 00 00 30    .PATTERN DEF...0
002CB0:  59 5A 5B 5C 5D 5E 00 00 00 00 00 00 00 00 00 00    YZ[\]^..........
002CC0:  00 50 41 54 54 45 52 4E 20 4D 4F 44 00 00 00 35    .PATTERN MOD...5
002CD0:  5F 60 61 62 63 64 65 00 00 00 00 00 00 00 00 00    _`abcde.........
002CE0:  00 53 43 52 45 45 4E 49 4F 45 41 52 00 00 00 55    .SCREENIOEAR...U
002CF0:  66 67 68 69 6A 6B 6C 6D 6E 6F 70 00 00 00 00 00    fghijklmnop.....
002D00:  00 53 43 52 45 45 4E 49 4F 4D 42 45 00 00 00 53    .SCREENIOMBE...S
002D10:  71 72 73 74 75 76 77 78 79 7A 7B 00 00 00 00 00    qrstuvwxyz{.....
002D20:  00 53 43 52 45 45 4E 49 4F 4F 53 42 00 00 00 50    .SCREENIOOSB...P
002D30:  7C 7D 7E 7F 80 81 82 83 84 85 00 00 00 00 00 00    |}~.............
002D40:  00 54 45 53 54 50 41 54 20 4D 4F 44 00 00 00 0C    .TESTPAT MOD....
002D50:  86 87 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002D60:  00 45 44 49 54 43 4F 4E 54 44 4D 42 00 00 00 6E    .EDITCONTDMB...n
002D70:  88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 00 00    ................
002D80:  00 45 44 49 54 44 49 53 50 44 4D 42 00 00 00 35    .EDITDISPDMB...5
002D90:  96 97 98 99 9A 9B 9C 00 00 00 00 00 00 00 00 00    ................
002DA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002DB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002DC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002DD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002DE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002DF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
002E00:  ED 7B 06 00 11 F3 03 CD 87 01 0E 19 CD 05 00 32    .{.............2
002E10:  5C 04 21 80 00 7E A7 20 0B 21 1F 04 11 5C 00 01    \.!..~. .!...\..
002E20:  0C 00 ED B0 AF 32 55 04 32 5F 04 11 5C 00 D5 DD    .....2U.2_..\...
002E30:  E1 DD 7E 01 FE 20 20 0B D5 13 21 20 04 01 0B 00    ..~..  ...! ....
002E40:  ED B0 D1 1A B7 20 04 3A 5C 04 3C 3D 32 5D 04 5F    ..... .:\.<=2]._
002E50:  0E 0E CD 05 00 0E 1F CD 05 00 22 56 04 23 23 23    .........."V.###
002E60:  23 7E 32 58 04 11 5C 00 DD 36 0C 3F 0E 11 CD 05    #~2X..\..6.?....
002E70:  00 3C 20 18 11 41 04 CD 87 01 CD 1B 03 3A 5C 04    .< ..A.......:\.
002E80:  5F 0E 0E CD 05 00 C7 0E 09 C3 05 00 3D 87 87 87    _...........=...
002E90:  87 87 5F 16 00 21 80 00 19 3A 5F 04 F5 E5 21 65    .._..!...:_...!e
002EA0:  04 B7 28 07 47 11 10 00 19 10 FD D1 01 10 00 EB    ..(.G...........
002EB0:  ED B0 F1 3C 32 5F 04 0E 12 CD 05 00 3C 20 CD CD    ...<2_......< ..
002EC0:  65 02 3A 5F 04 47 DD 21 65 04 C5 DD CB 00 7E CC    e.:_.G.!e.....~.
002ED0:  DC 01 11 10 00 DD 19 C1 10 F0 18 98 CD 41 02 11    .............A..
002EE0:  2E 04 DD CB 0A 7E 28 03 11 2B 04 CD 87 01 11 34    .....~(..+.....4
002EF0:  04 DD CB 09 7E 28 03 11 31 04 CD 87 01 DD 6E 0F    ....~(..1.....n.
002F00:  DD 66 0E 7D B4 28 13 7D E6 07 20 01 2B CB 3C CB    .f.}.(.}.. .+.<.
002F10:  1D CB 3C CB 1D CB 3C CB 1D 23 4D 7C CD A2 03 11    ..<...<..#M|....
002F20:  37 04 CD 87 01 DD 4E 0F DD 7E 0E CD A2 03 11 1A    7.....N..~......
002F30:  04 3A 55 04 EE 01 32 55 04 28 03 11 1D 04 C3 87    .:U...2U.(......
002F40:  01 DD E5 E1 06 0B 23 E5 C5 3E 03 B8 20 09 E5 1E    ......#..>.. ...
002F50:  2E 0E 02 CD 05 00 E1 5E CB BB 0E 02 CD 05 00 C1    .......^........
002F60:  E1 23 10 E3 C9 DD 21 65 04 3A 5F 04 47 C5 3A 58    .#....!e.:_.G.:X
002F70:  04 DD BE 0C 38 25 DD 7E 0F FE 80 20 1E CD CC 02    ....8%.~... ....
002F80:  28 19 FD CB 00 FE FD 6E 0F FD 66 0E DD 5E 0F DD    (......n..f..^..
002F90:  56 0E 19 DD 75 0F DD 74 0E 18 E2 3A 58 04 B7 C4    V...u..t...:X...
002FA0:  AB 02 11 10 00 DD 19 C1 10 C3 C9 3C 5F DD 4E 0C    ...........<_.N.
002FB0:  AF 57 CD DD 03 7D B7 C8 45 DD 6E 0F DD 66 0E 11    .W...}..E.n..f..
002FC0:  80 00 19 10 FD DD 75 0F DD 74 0E C9 FD 21 65 04    ......u..t...!e.
002FD0:  C5 3A 5F 04 47 DD E5 FD E5 E1 D1 A7 ED 52 28 09    .:_.G........R(.
002FE0:  FD CB 00 7E CC 08 03 28 0A 11 10 00 FD 19 10 E5    ...~...(........
002FF0:  AF C1 C9 3A 58 04 B7 28 0B DD E5 FD E5 DD E1 CD    ...:X..(........
003000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0030A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0030B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0030C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0030D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0030E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0030F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003100:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003110:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003120:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003130:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003140:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003150:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003160:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003170:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003180:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003190:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0031A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0031B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0031C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0031D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0031E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0031F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003200:  AB 02 DD E1 F6 01 C1 C9 DD E5 FD E5 D1 E1 C5 06    ................
003210:  0B 23 13 1A BE 20 02 10 F8 C1 C9 0E 0C CD 05 00    .#... ..........
003220:  FE 30 30 50 DD 2A 56 04 DD 6E 05 DD 66 06 22 59    .00P.*V..n..f."Y
003230:  04 DD 7E 02 D6 02 47 AF 37 17 10 FD 32 5B 04 0E    ..~...G.7...2[..
003240:  1B CD 05 00 ED 4B 59 04 03 11 00 00 3E 08 32 5E    .....KY.....>.2^
003250:  04 CB 16 38 01 13 0B 79 B0 28 09 3A 5E 04 3D 20    ...8...y.(.:^.= 
003260:  ED 23 18 E8 6B 62 3A 5B 04 47 05 28 03 19 10 FD    .#..kb:[.G.(....
003270:  7C 4D 18 23 3A 5D 04 0E 2E 5F CD 05 00 06 03 DD    |M.#:]..._......
003280:  21 80 00 DD CB 02 3E DD CB 01 1E DD CB 00 1E 10    !.....>.........
003290:  F2 DD 7E 01 DD 4E 00 CD A2 03 3E 4B 5F 0E 02 C3    ..~..N....>K_...
0032A0:  05 00 21 64 04 1E 05 D5 E5 11 0A 00 CD DD 03 55    ..!d...........U
0032B0:  E1 72 2B D1 1D 20 F0 06 05 CB 81 78 FE 01 20 02    .r+.. .....x.. .
0032C0:  CB C1 23 7E B7 20 08 CB 41 20 04 3E 20 18 04 CB    ..#~. ..A .> ...
0032D0:  C1 C6 30 E5 C5 CD 9C 03 C1 E1 10 DF C9 21 00 00    ..0..........!..
0032E0:  06 10 CB 11 17 ED 6A ED 52 30 01 19 3F 10 F3 CB    ......j.R0..?...
0032F0:  11 17 C9 53 44 20 56 31 2E 30 20 62 79 20 41 64    ...SD V1.0 by Ad
003300:  61 6D 20 44 65 6E 6E 69 6E 67 20 28 43 29 20 48    am Denning (C) H
003310:  69 53 6F 66 74 20 31 39 38 36 0D 0A 24 09 24 00    iSoft 1986..$.$.
003320:  3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 20 53 24 20 20    ??????????? S$  
003330:  24 52 20 24 20 20 24 4B 20 20 52 65 63 73 3A 20    $R $  $K  Recs: 
003340:  24 0D 0A 44 69 73 63 20 66 72 65 65 20 73 70 61    $..Disc free spa
003350:  63 65 3A 20 24 66 75 6E 63 74 69 6F 6E F3 20 69    ce: $function. i
003360:  EE 20 73 6F 75 72 63 E5 20 61 6E E4 20 4D 61 6E    . sourc. an. Man
003370:  F8 20 8D 0A 6C 69 62 72 61 72 F9 20 66 6F 72 6D    . ..librar. form
003380:  6E 73 20 64 75 72 69 6E 67 20 65 78 65 63 75 74    ns during execut
003390:  69 6F 6E 20 6F 66 20 72 65 70 65 61 74 73 20 2A    ion of repeats *
0033A0:  29 0D 0A 45 4E 44 20 53 63 72 65 65 6E 49 4F 2E    )..END ScreenIO.
0033B0:  0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0033C0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0033D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0033E0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0033F0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
003400:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003410:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003420:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003430:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003440:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003450:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003460:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003470:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003480:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003490:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0034A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0034B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0034C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0034D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0034E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0034F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003500:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003510:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003520:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003530:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003540:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003550:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003560:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003570:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003580:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003590:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0035A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0035B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0035C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0035D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0035E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0035F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003600:  ED 7B 06 00 11 7C 02 CD 3A 01 21 80 00 7E B7 20    .{...|..:.!..~. 
003610:  0B 21 E0 02 11 5C 00 01 0C 00 ED B0 11 5C 00 D5    .!...\.......\..
003620:  DD E1 DD 7E 01 FE 20 20 16 D5 13 21 E1 02 01 0B    ...~..  ...!....
003630:  00 ED B0 D1 18 09 CD 3A 01 C7 0E 09 C3 05 00 AF    .......:........
003640:  32 EC 02 32 ED 02 1A 32 EE 02 0E 11 CD 05 00 3C    2..2...2.......<
003650:  20 05 11 A6 02 18 DF F5 3A EE 02 B7 20 09 0E 19     .......:... ...
003660:  CD 05 00 3C 32 EE 02 21 00 00 47 37 CB 15 CB 14    ...<2..!..G7....
003670:  A7 10 F9 E5 0E 1D CD 05 00 D1 7D A3 6F 7C A2 B5    ..........}£o|..
003680:  28 05 11 98 02 18 AF F1 3D 87 87 87 87 87 5F 16    (.......=....._.
003690:  00 21 80 00 19 CD FB 01 0E 12 CD 05 00 3C 20 E8    .!...........< .
0036A0:  21 EF 02 E5 CD 24 02 3A ED 02 B7 20 1E 11 C9 02    !....$.:... ....
0036B0:  CD 3A 01 0E 01 CD 05 00 F6 20 FE 71 28 3C FE 61    .:....... .q(<.a
0036C0:  20 05 32 ED 02 18 04 FE 79 20 03 CD 57 02 F5 11     .2.....y ..W...
0036D0:  95 02 CD 3A 01 F1 E1 FE 70 3A EC 02 28 0C 11 0C    ...:....p:..(...
0036E0:  00 19 3D 28 15 32 EC 02 18 B9 11 F4 FF 19 11 EF    ..=(.2..........
0036F0:  02 B7 ED 52 19 38 03 3C 18 EB C7 23 E5 11 0C 00    ...R.8.<...#....
003700:  21 00 00 3A EC 02 B7 28 04 47 19 10 FD 11 EF 02    !..:...(.G......
003710:  19 F5 3A EE 02 77 F1 23 D1 EB 01 0B 00 ED B0 3C    ..:..w.#.......<
003720:  32 EC 02 C9 7E 23 E5 C6 40 5F 0E 02 CD 05 00 1E    2...~#..@_......
003730:  3A 0E 02 CD 05 00 E1 06 0B E5 C5 3E 03 B8 20 09    :..........>.. .
003740:  E5 1E 2E 0E 02 CD 05 00 E1 5E CB BB 0E 02 CD 05    .........^......
003750:  00 C1 E1 23 10 E3 C9 D1 E1 E5 D5 11 5C 00 01 0C    ...#........\...
003760:  00 ED B0 11 5C 00 D5 DD E1 DD CB 09 7E 20 07 0E    ....\.......~ ..
003770:  13 CD 05 00 3C C0 11 B8 02 C3 3A 01 57 44 45 4C    ....<.....:.WDEL
003780:  20 56 32 2E 30 20 28 43 29 20 31 39 38 37 20 48     V2.0 (C) 1987 H
003790:  69 53 6F 66 74 0D 0A 24 44 72 69 76 65 20 69 73    iSoft..$Drive is
0037A0:  20 52 2F 4F 21 24 4E 6F 20 6D 61 74 63 68 69 6E     R/O!$No matchin
0037B0:  67 20 66 69 6C 65 73 24 20 20 43 61 6E 6E 6F 74    g files$  Cannot
0037C0:  20 64 65 6C 65 74 65 21 24 20 20 44 65 6C 65 74     delete!$  Delet
0037D0:  65 20 28 59 2F 4E 2F 41 2F 51 2F 50 29 3F 20 24    e (Y/N/A/Q/P)? $
0037E0:  00 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 00 00 00 00    .???????????....
0037F0:  FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00    ................
003800:  2A 06 00 F9 11 00 FF 19 22 F9 04 11 51 11 A7 ED    *......."...Q...
003810:  52 7C 1F 1F E6 3F 3C F5 11 68 04 CD 42 03 CD 38    R|...?<..h..B..8
003820:  04 F1 CD E9 03 3E 4B CD 47 03 11 8F 04 CD 42 03    .....>K.G.....B.
003830:  3A 5C 00 B7 20 03 CD 68 01 32 F3 04 21 6C 00 7E    :\.. ..h.2..!l.~
003840:  B7 20 1C 23 7E FE 2D 20 13 23 7E FE 51 28 04 FE    . .#~.- .#~.Q(..
003850:  42 20 09 23 7E FE 20 20 03 32 6D 00 CD 68 01 32    B .#~.  .2m..h.2
003860:  F2 04 18 0B CD 42 03 C7 0E 19 CD 05 00 3C C9 11    .....B.......<..
003870:  46 05 01 0B 00 21 6D 00 7E FE 20 20 03 21 E7 04    F....!m.~.  .!..
003880:  ED B0 11 5C 00 D5 DD E1 DD 7E 01 FE 20 20 0B D5    ...\.....~..  ..
003890:  13 21 E7 04 01 0B 00 ED B0 D1 0E 11 CD 05 00 3C    .!.............<
0038A0:  20 05 11 92 04 18 BD 3D 87 87 87 87 87 5F 16 00     ......=....._..
0038B0:  21 80 00 19 3A F4 04 F5 E5 21 51 05 B7 28 07 47    !...:....!Q..(.G
0038C0:  11 0B 00 19 10 FD D1 13 01 0B 00 EB ED B0 F1 3C    ...............<
0038D0:  32 F4 04 0E 12 CD 05 00 3C 20 CC 21 51 05 E5 CD    2.......< .!Q...
0038E0:  9B 02 21 FE 04 CD 4C 03 11 C1 04 CD 42 03 21 22    ..!...L.....B.!"
0038F0:  05 E5 CD 4C 03 E1 11 FE 04 06 0C 1A BE 23 13 20    ...L.........#. 
003900:  10 10 F8 11 C6 04 CD 42 03 3A FD 04 B7 28 3C 18    .......B.:...(<.
003910:  5B 3A F7 04 B7 20 2D 11 CD 04 CD 42 03 0E 01 CD    [:... -....B....
003920:  05 00 F6 20 FE 71 CA 00 00 FE 61 20 05 32 F7 04    ... .q....a .2..
003930:  18 0C FE 62 28 31 FE 77 28 2C FE 79 20 09 3A F5    ...b(1.w(,.y .:.
003940:  04 32 F6 04 CD CC 02 FE 70 28 21 11 8F 04 CD 42    .2......p(!....B
003950:  03 E1 11 0B 00 19 AF 32 FD 04 3A F4 04 3D 28 C6    .......2..:..=(.
003960:  32 F4 04 C3 DE 01 AF 32 F6 04 18 D8 11 8F 04 CD    2......2........
003970:  42 03 E1 11 F5 FF 19 01 51 05 B7 ED 42 09 DA 00    B.......Q...B...
003980:  00 3E 01 32 FD 04 3A F4 04 3C 18 D4 01 23 00 E5    .>.2..:..<...#..
003990:  D5 62 6B 13 36 00 ED B0 D1 E1 C9 E5 11 FE 04 CD    .bk.6...........
0039A0:  8C 02 3A F3 04 12 13 01 0B 00 ED B0 11 22 05 CD    ..:.........."..
0039B0:  8C 02 3A F2 04 12 13 21 46 05 06 0B 7E FE 3F 23    ..:....!F...~.?#
0039C0:  E3 20 01 7E 23 E3 12 13 10 F2 E1 C9 11 FE 04 0E    . .~#...........
0039D0:  0F CD 05 00 3C 28 68 AF 32 1E 05 3A F6 04 B7 28    ....<(h.2..:...(
0039E0:  34 21 2B 05 7E F5 36 42 23 5E 36 41 23 56 36 4B    4!+.~.6B#^6A#V6K
0039F0:  E5 D5 11 22 05 0E 13 CD 05 00 21 23 05 11 33 05    ..."......!#..3.
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 41 02 00 00 00 02    ......R...A.....
003A20:  03 00 46 02 00 00 00 02 03 00 42 02 00 00 00 02    ..F.......B.....
003A30:  03 00 47 02 00 00 00 02 03 00 43 02 00 00 00 02    ..G.......C.....
003A40:  03 00 48 02 00 00 00 02 03 00 44 02 00 00 00 02    ..H.......D.....
003A50:  03 00 49 02 00 00 00 02 03 00 45 02 00 00 00 02    ..I.......E.....
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:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003B10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003B20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003B30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003B40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003B50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003B60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003B70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003B80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003B90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003BA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003BB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003BC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003BD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003BE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003BF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003C00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003C10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003C20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003C30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003C40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003C50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003C60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003C70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003C80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003C90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003CA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003CB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003CC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003CD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003CE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003CF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
003D00:  67 74 68 20 77 68 65 6E 20 65 6E 64 2D 6F 66 2D    gth when end-of-
003D10:  66 69 6C 65 20 69 73 0D 0A 09 09 09 20 20 20 65    file is.....   e
003D20:  6E 63 6F 75 6E 74 65 72 65 64 0D 0A 2A 29 0D 0A    ncountered..*)..
003D30:  09 42 75 66 66 65 72 3A 41 52 52 41 59 5B 30 2E    .Buffer:ARRAY[0.
003D40:  2E 42 75 66 66 65 72 53 69 7A 65 2D 31 5D 20 4F    .BufferSize-1] O
003D50:  46 20 43 48 41 52 3B 0D 0A 09 4E 65 78 74 42 6C    F CHAR;...NextBl
003D60:  6F 63 6B 4E 6F 2C 42 6C 6F 63 6B 4E 6F 3A 43 41    ockNo,BlockNo:CA
003D70:  52 44 49 4E 41 4C 3B 0D 0A 09 43 68 61 72 50 6F    RDINAL;...CharPo
003D80:  73 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 43 68    s:CARDINAL;...Ch
003D90:  61 72 43 6F 75 6E 74 3A 43 41 52 44 49 4E 41 4C    arCount:CARDINAL
003DA0:  3B 0D 0A 09 50 61 67 65 4E 75 6D 62 65 72 3A 49    ;...PageNumber:I
003DB0:  4E 54 45 47 45 52 3B 0D 0A 09 50 61 67 65 4C 65    NTEGER;...PageLe
003DC0:  6E 3A 43 41 52 44 49 4E 41 4C 3D 32 34 3B 0D 0A    n:CARDINAL=24;..
003DD0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 61 64    ..PROCEDURE Read
003DE0:  42 75 66 66 65 72 3B 0D 0A 42 45 47 49 4E 0D 0A    Buffer;..BEGIN..
003DF0:  09 42 6C 6F 63 6B 4E 6F 3A 3D 4E 65 78 74 42 6C    .BlockNo:=NextBl
003E00:  6F 63 6B 4E 6F 3B 09 0D 0A 09 52 65 61 64 42 6C    ockNo;....ReadBl
003E10:  6F 63 6B 28 49 6E 66 2C 41 44 52 28 42 75 66 66    ock(Inf,ADR(Buff
003E20:  65 72 29 2C 30 2C 42 75 66 66 65 72 53 69 7A 65    er),0,BufferSize
003E30:  2C 72 65 70 6C 79 29 3B 0D 0A 09 43 68 61 72 43    ,reply);...CharC
003E40:  6F 75 6E 74 3A 3D 72 65 70 6C 79 3B 0D 0A 0D 0A    ount:=reply;....
003E50:  09 28 2A 50 61 64 20 72 65 73 74 20 6F 66 20 62    .(*Pad rest of b
003E60:  75 66 66 65 72 20 77 69 74 68 20 65 6E 64 2D 6F    uffer with end-o
003E70:  66 2D 66 69 6C 65 20 63 68 61 72 61 63 74 65 72    f-file character
003E80:  73 0D 0A 09 20 20 4E 6F 72 6D 61 6C 6C 79 2C 20    s...  Normally, 
003E90:  43 68 61 72 43 6F 75 6E 74 20 77 69 6C 6C 20 65    CharCount will e
003EA0:  71 75 61 6C 20 48 49 47 48 28 62 75 66 66 65 72    qual HIGH(buffer
003EB0:  29 2B 31 2C 20 73 6F 20 6E 6F 0D 0A 09 20 20 70    )+1, so no...  p
003EC0:  61 64 64 69 6E 67 20 74 61 6B 65 73 20 70 6C 61    adding takes pla
003ED0:  63 65 2A 29 0D 0A 0D 0A 09 46 4F 52 20 43 68 61    ce*).....FOR Cha
003EE0:  72 50 6F 73 3A 3D 43 68 61 72 43 6F 75 6E 74 20    rPos:=CharCount 
003EF0:  54 4F 20 48 49 47 48 28 42 75 66 66 65 72 29 20    TO HIGH(Buffer) 
003F00:  4D 4F 44 55 4C 45 20 43 61 74 3B 0D 0A 0D 0A 28    MODULE Cat;....(
003F10:  2A 09 4C 69 73 74 20 6F 6E 65 20 6F 66 20 6D 6F    *.List one of mo
003F20:  72 65 20 66 69 6C 65 73 20 74 6F 20 74 68 65 20    re files to the 
003F30:  74 65 72 6D 69 6E 61 6C 0D 0A 0D 0A 0D 0A 09 43    terminal.......C
003F40:  61 6C 6C 20 69 73 20 43 41 54 20 20 20 3C 28 77    all is CAT   <(w
003F50:  69 6C 64 20 63 61 72 64 29 20 66 69 6C 65 20 6E    ild card) file n
003F60:  61 6D 65 3E 2C 2E 2E 2E 2E 20 5B 4F 70 74 69 6F    ame>,.... [Optio
003F70:  6E 73 0D 0A 0D 0A 09 57 68 65 72 65 20 74 68 65    ns.....Where the
003F80:  20 77 69 6C 64 20 63 61 72 64 20 66 69 6C 65 20     wild card file 
003F90:  6E 61 6D 65 73 20 61 72 65 20 74 68 65 20 6E 61    names are the na
003FA0:  6D 65 73 20 6F 66 20 66 69 6C 65 73 20 74 6F 20    mes of files to 
003FB0:  6C 69 73 74 0D 0A 09 54 68 65 20 6F 70 74 69 6F    list...The optio
003FC0:  6E 73 20 61 72 65 3A 0D 0A 0D 0A 09 09 50 20 2D    ns are:......P -
003FD0:  20 72 75 6E 20 69 6E 20 70 61 67 65 20 6D 6F 64     run in page mod
003FE0:  65 0D 0A 09 09 20 20 20 20 69 6E 20 70 61 67 65    e....    in page
003FF0:  20 6D 6F 64 65 2C 20 61 74 20 74 68 65 20 65 6E     mode, at the en
004000:  64 20 6F 66 20 65 61 63 68 20 73 63 72 65 65 6E    d of each screen
004010:  20 6F 66 20 6F 75 74 70 75 74 2C 0D 0A 09 09 20     of output,.... 
004020:  20 20 20 61 20 70 72 6F 6D 70 74 20 6C 69 6E 65       a prompt line
004030:  20 69 73 20 70 72 65 73 65 6E 74 65 64 2E 0D 0A     is presented...
004040:  0D 0A 09 09 20 20 20 50 20 6D 61 79 20 62 65 20    ....   P may be 
004050:  66 6F 6C 6C 6F 77 65 64 20 62 79 20 74 68 65 20    followed by the 
004060:  73 63 72 65 65 6E 20 6C 65 6E 67 74 68 20 69 6E    screen length in
004070:  20 6C 69 6E 65 73 0D 0A 09 09 20 20 20 20 20 64     lines....     d
004080:  65 66 61 75 6C 74 20 69 73 20 32 34 0D 0A 0D 0A    efault is 24....
004090:  09 09 4E 20 2D 20 6F 75 74 70 75 74 20 6C 69 6E    ..N - output lin
0040A0:  65 20 6E 75 6D 62 65 72 73 0D 0A 09 09 57 20 2D    e numbers....W -
0040B0:  20 77 72 61 70 20 6C 69 6E 65 73 20 6C 6F 6E 67     wrap lines long
0040C0:  65 72 20 74 68 61 6E 20 73 63 72 65 65 6E 20 77    er than screen w
0040D0:  69 64 74 68 0D 0A 09 09 20 20 20 20 57 20 6D 61    idth....    W ma
0040E0:  79 20 62 65 20 66 6F 6C 6C 6F 77 65 64 20 62 79    y be followed by
0040F0:  20 73 63 72 65 65 6E 20 77 69 64 74 68 20 69 6E     screen width in
004100:  44 4F 20 42 75 66 66 65 72 5B 43 68 61 72 50 6F    DO Buffer[CharPo
004110:  73 5D 3A 3D 45 4F 46 20 45 4E 44 3B 0D 0A 09 43    s]:=EOF END;...C
004120:  68 61 72 50 6F 73 3A 3D 30 3B 0D 0A 0D 0A 09 28    harPos:=0;.....(
004130:  2A 09 69 6E 63 72 65 6D 65 6E 74 20 4E 65 78 74    *.increment Next
004140:  42 6C 6F 63 6B 20 74 6F 20 61 6C 6C 6F 77 20 66    Block to allow f
004150:  6F 72 20 64 61 74 61 20 72 65 61 64 2A 29 0D 0A    or data read*)..
004160:  0D 0A 09 4E 65 78 74 42 6C 6F 63 6B 4E 6F 3A 3D    ...NextBlockNo:=
004170:  49 4E 54 45 47 45 52 28 42 6C 6F 63 6B 4E 6F 29    INTEGER(BlockNo)
004180:  2B 72 65 70 6C 79 20 44 49 56 20 42 6C 6F 63 6B    +reply DIV Block
004190:  53 69 7A 65 3B 0D 0A 09 45 4E 44 20 52 65 61 64    Size;...END Read
0041A0:  42 75 66 66 65 72 3B 0D 0A 0D 0A 56 41 52 09 63    Buffer;....VAR.c
0041B0:  68 3A 43 48 41 52 3B 09 09 28 2A 6E 65 78 74 20    h:CHAR;..(*next 
0041C0:  63 68 61 72 61 63 74 65 72 20 72 65 61 64 2A 29    character read*)
0041D0:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 4E 65    ....PROCEDURE Ne
0041E0:  78 74 43 68 61 72 3B 0D 0A 42 45 47 49 4E 0D 0A    xtChar;..BEGIN..
0041F0:  09 49 46 20 43 68 61 72 50 6F 73 3E 3D 43 68 61    .IF CharPos>=Cha
004200:  72 43 6F 75 6E 74 20 54 48 45 4E 20 0D 0A 09 09    rCount THEN ....
004210:  52 65 61 64 42 75 66 66 65 72 3B 0D 0A 09 09 45    ReadBuffer;....E
004220:  4E 44 3B 20 20 28 2A 49 46 20 43 68 61 72 50 6F    ND;  (*IF CharPo
004230:  73 3E 3D 43 68 61 72 43 6F 75 6E 74 2A 29 0D 0A    s>=CharCount*)..
004240:  09 63 68 3A 3D 42 75 66 66 65 72 5B 43 68 61 72    .ch:=Buffer[Char
004250:  50 6F 73 5D 3B 0D 0A 09 49 4E 43 28 43 68 61 72    Pos];...INC(Char
004260:  50 6F 73 29 3B 0D 0A 09 45 4E 44 20 4E 65 78 74    Pos);...END Next
004270:  43 68 61 72 3B 0D 0A 0D 0A 28 2A 09 46 69 6C 65    Char;....(*.File
004280:  20 70 6F 73 69 74 69 6F 6E 69 6E 67 20 72 6F 75     positioning rou
004290:  74 69 6E 65 73 0D 0A 0D 0A 09 59 6F 75 20 63 61    tines.....You ca
0042A0:  6E 20 70 6F 73 69 74 69 6F 6E 20 61 20 66 69 6C    n position a fil
0042B0:  65 20 62 79 3A 0D 0A 0D 0A 09 09 69 29 09 47 69    e by:......i).Gi
0042C0:  76 69 6E 67 20 74 68 65 20 6E 75 6D 62 65 72 20    ving the number 
0042D0:  6F 66 20 74 68 65 20 6C 69 6E 65 20 74 6F 20 6C    of the line to l
0042E0:  69 73 74 20 66 72 6F 6D 0D 0A 09 09 69 69 29 09    ist from....ii).
0042F0:  47 69 76 69 6E 67 20 61 20 73 74 72 69 6E 67 20    Giving a string 
004300:  20 63 68 61 72 61 63 74 65 72 73 0D 0A 09 09 20     characters.... 
004310:  20 20 20 64 65 66 61 75 6C 74 20 69 73 20 38 30       default is 80
004320:  0D 0A 0D 0A 09 09 49 20 2D 20 65 78 70 61 6E 64    ......I - expand
004330:  20 74 61 62 73 20 74 6F 20 73 70 61 63 65 73 0D     tabs to spaces.
004340:  0A 0D 0A 0D 0A 0D 0A 09 46 6F 72 20 65 78 61 6D    ........For exam
004350:  70 6C 65 3A 0D 0A 0D 0A 09 09 43 41 54 20 62 3A    ple:......CAT b:
004360:  2A 2E 64 65 66 20 62 3A 2A 2E 6D 6F 64 20 62 3A    *.def b:*.mod b:
004370:  2A 2E 73 75 62 5B 50 31 36 57 31 30 30 4E 0D 0A    *.sub[P16W100N..
004380:  0D 0A 0D 0A 0D 0A 09 54 68 69 73 20 69 73 20 61    .......This is a
004390:  20 68 61 63 6B 20 6F 66 20 74 68 65 20 4C 49 53     hack of the LIS
0043A0:  54 20 70 72 6F 67 72 61 6D 20 77 68 69 63 68 20    T program which 
0043B0:  63 6F 6D 65 73 20 77 69 74 68 20 6D 79 0D 0A 09    comes with my...
0043C0:  4D 6F 64 75 6C 61 2D 32 20 63 6F 6D 70 69 6C 65    Modula-2 compile
0043D0:  72 2E 20 28 42 75 74 20 68 69 67 68 6C 79 20 6D    r. (But highly m
0043E0:  6F 64 69 66 69 65 64 29 0D 0A 0D 0A 09 4C 69 6D    odified).....Lim
0043F0:  69 74 61 74 69 6F 6E 73 3A 0D 0A 09 3D 3D 3D 3D    itations:...====
004400:  3D 3D 3D 3D 3D 3D 3D 3D 0D 0A 09 09 41 74 20 6D    ========....At m
004410:  6F 73 74 20 31 30 20 28 77 69 6C 64 20 63 61 72    ost 10 (wild car
004420:  64 29 20 66 69 6C 65 20 6E 61 6D 65 73 20 63 61    d) file names ca
004430:  6E 20 62 65 20 75 73 65 64 0D 0A 09 09 45 61 63    n be used....Eac
004440:  68 20 77 69 6C 64 20 63 61 72 64 20 73 68 6F 75    h wild card shou
004450:  6C 64 20 6E 6F 74 20 6D 61 74 63 68 20 6D 6F 72    ld not match mor
004460:  65 20 74 68 61 6E 20 31 30 30 20 61 63 74 75 61    e than 100 actua
004470:  6C 20 66 69 6C 65 73 0D 0A 0D 0A 09 44 61 76 65    l files.....Dave
004480:  20 4D 6F 6F 72 65 20 2A 29 0D 0A 0D 0A 46 52 4F     Moore *)....FRO
004490:  4D 20 53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20    M SYSTEM IMPORT 
0044A0:  41 44 44 52 45 53 53 2C 41 44 52 2C 54 53 49 5A    ADDRESS,ADR,TSIZ
0044B0:  45 3B 0D 0A 46 52 4F 4D 20 43 6F 6D 6D 61 6E 64    E;..FROM Command
0044C0:  20 49 4D 50 4F 52 54 20 50 61 72 61 6D 65 74 65     IMPORT Paramete
0044D0:  72 2C 50 61 72 63 6C 61 73 73 2C 47 65 74 50 61    r,Parclass,GetPa
0044E0:  72 61 6D 73 3B 0D 0A 46 52 4F 4D 20 46 69 6C 65    rams;..FROM File
0044F0:  73 20 49 4D 50 4F 52 54 20 46 69 6C 65 4E 61 6D    s IMPORT FileNam
004500:  74 6F 20 6C 69 73 74 20 69 6E 20 74 68 65 20 66    to list in the f
004510:  6F 72 6D 20 2F 73 74 72 69 6E 67 2F 20 28 77 68    orm /string/ (wh
004520:  65 72 65 0D 0A 09 09 09 2F 20 69 73 20 61 6E 79    ere...../ is any
004530:  20 6E 6F 6E 2D 61 6C 70 68 61 6E 75 6D 65 72 69     non-alphanumeri
004540:  63 20 63 68 61 72 61 63 74 65 72 29 0D 0A 09 09    c character)....
004550:  69 69 69 29 09 41 20 63 6F 6D 62 69 6E 61 74 69    iii).A combinati
004560:  6F 6E 20 6F 66 20 74 68 65 20 74 77 6F 3A 20 31    on of the two: 1
004570:  30 2F 73 74 72 69 6E 67 2F 20 74 6F 20 73 74 61    0/string/ to sta
004580:  72 74 20 73 65 61 72 63 68 0D 0A 09 09 09 61 74    rt search.....at
004590:  20 61 20 67 69 76 65 6E 20 6C 69 6E 65 2E 0D 0A     a given line...
0045A0:  2A 29 0D 0A 54 59 50 45 09 50 6F 73 69 74 69 6F    *)..TYPE.Positio
0045B0:  6E 3D 52 45 43 4F 52 44 0D 0A 09 09 42 6C 6F 63    n=RECORD....Bloc
0045C0:  6B 4E 75 6D 62 65 72 3A 43 41 52 44 49 4E 41 4C    kNumber:CARDINAL
0045D0:  3B 09 09 28 2A 42 6C 6F 63 6B 20 69 6E 20 77 68    ;..(*Block in wh
0045E0:  69 63 68 20 6C 69 6E 65 20 73 74 61 72 74 73 2A    ich line starts*
0045F0:  29 0D 0A 09 09 43 68 61 72 4F 66 66 73 65 74 3A    )....CharOffset:
004600:  43 41 52 44 49 4E 41 4C 3B 09 09 28 2A 43 68 61    CARDINAL;..(*Cha
004610:  72 61 63 74 65 72 20 6F 66 66 73 65 74 20 69 6E    racter offset in
004620:  20 62 75 66 66 65 72 2A 29 0D 0A 09 09 45 4E 44     buffer*)....END
004630:  3B 0D 0A 56 41 52 09 50 6F 73 54 61 62 6C 65 3A    ;..VAR.PosTable:
004640:  41 52 52 41 59 5B 31 2E 2E 32 30 30 30 5D 20 4F    ARRAY[1..2000] O
004650:  46 20 20 50 6F 73 69 74 69 6F 6E 3B 0D 0A 0D 0A    F  Position;....
004660:  09 28 2A 54 68 69 73 20 63 6F 64 65 20 63 6F 75    .(*This code cou
004670:  6C 64 20 62 65 20 6D 61 64 65 20 6D 6F 72 65 20    ld be made more 
004680:  66 61 6E 63 79 20 62 79 20 68 61 76 69 6E 67 20    fancy by having 
004690:  61 6E 20 69 6E 63 72 65 6D 65 6E 74 20 73 69 7A    an increment siz
0046A0:  65 0D 0A 09 20 20 73 6F 20 74 68 61 74 20 61 73    e...  so that as
0046B0:  20 74 68 65 20 50 6F 73 54 61 62 6C 65 20 62 65     the PosTable be
0046C0:  63 6F 6D 65 73 20 66 75 6C 6C 2C 20 65 76 65 72    comes full, ever
0046D0:  79 20 73 65 63 6F 6E 64 20 65 6E 74 72 79 20 69    y second entry i
0046E0:  73 0D 0A 09 20 20 72 65 6D 6F 76 65 64 20 61 6E    s...  removed an
0046F0:  64 20 74 68 65 20 69 6E 63 72 65 6D 65 6E 74 20    d the increment 
004700:  65 2C 46 49 4C 45 2C 4C 6F 6F 6B 75 70 2C 43 72    e,FILE,Lookup,Cr
004710:  65 61 74 65 2C 52 65 61 64 42 6C 6F 63 6B 2C 53    eate,ReadBlock,S
004720:  65 74 42 6C 6F 63 6B 3B 0D 0A 46 52 4F 4D 20 47    etBlock;..FROM G
004730:  65 74 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 47    etFiles IMPORT G
004740:  65 74 4E 61 6D 65 73 3B 0D 0A 46 52 4F 4D 20 54    etNames;..FROM T
004750:  65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 57    erminal IMPORT W
004760:  72 69 74 65 53 74 72 69 6E 67 2C 57 72 69 74 65    riteString,Write
004770:  4C 6E 2C 57 72 69 74 65 2C 52 65 61 64 2C 42 75    Ln,Write,Read,Bu
004780:  73 79 52 65 61 64 2C 43 6C 65 61 72 43 68 61 72    syRead,ClearChar
004790:  42 75 66 66 65 72 3B 0D 0A 46 52 4F 4D 20 53 6F    Buffer;..FROM So
0047A0:  72 74 20 49 4D 50 4F 52 54 20 53 6F 72 74 52 65    rt IMPORT SortRe
0047B0:  63 6F 72 64 73 3B 0D 0A 46 52 4F 4D 20 49 6E 74    cords;..FROM Int
0047C0:  4C 6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E    Logic IMPORT IAN
0047D0:  44 3B 0D 0A 46 52 4F 4D 20 53 6D 61 6C 6C 49 4F    D;..FROM SmallIO
0047E0:  20 49 4D 50 4F 52 54 20 57 72 69 74 65 49 6E 74     IMPORT WriteInt
0047F0:  2C 57 72 69 74 65 48 65 78 2C 57 72 69 74 65 43    ,WriteHex,WriteC
004800:  61 72 64 3B 0D 0A 43 4F 4E 53 54 09 42 75 66 66    ard;..CONST.Buff
004810:  65 72 53 69 7A 65 3D 34 30 39 36 3B 09 09 28 2A    erSize=4096;..(*
004820:  42 79 74 65 73 20 74 6F 20 72 65 61 64 20 69 6E    Bytes to read in
004830:  20 61 20 73 69 6E 67 6C 65 20 62 6C 6F 63 6B 2A     a single block*
004840:  29 0D 0A 09 42 6C 6F 63 6B 53 69 7A 65 3D 31 32    )...BlockSize=12
004850:  38 3B 09 09 09 28 2A 42 6C 6F 63 6B 20 73 69 7A    8;...(*Block siz
004860:  65 20 69 6E 20 62 79 74 65 73 2D 2D 75 73 65 64    e in bytes--used
004870:  20 66 6F 72 20 72 61 6E 64 6F 6D 0D 0A 09 09 09     for random.....
004880:  09 09 20 20 70 6F 73 69 74 69 6F 6E 69 6E 67 2A    ..  positioning*
004890:  29 0D 0A 0D 0A 09 43 52 3D 30 64 78 3B 0D 0A 09    ).....CR=0dx;...
0048A0:  4C 46 3D 30 61 78 3B 0D 0A 09 54 41 42 3D 30 39    LF=0ax;...TAB=09
0048B0:  78 3B 0D 0A 09 45 4F 46 3D 31 61 78 3B 0D 0A 09    x;...EOF=1ax;...
0048C0:  42 53 3D 30 38 78 3B 0D 0A 09 44 45 4C 3D 37 46    BS=08x;...DEL=7F
0048D0:  78 3B 0D 0A 0D 0A 54 59 50 45 20 09 50 46 69 6C    x;....TYPE .PFil
0048E0:  65 4E 61 6D 65 3D 50 4F 49 4E 54 45 52 20 54 4F    eName=POINTER TO
0048F0:  20 46 69 6C 65 4E 61 6D 65 3B 0D 0A 0D 0A 56 41     FileName;....VA
004900:  64 6F 75 62 6C 65 64 2E 20 42 75 74 20 66 65 77    doubled. But few
004910:  20 66 69 6C 65 73 20 77 69 6C 6C 20 68 61 76 65     files will have
004920:  20 6D 6F 72 65 20 0D 0A 09 20 20 74 68 61 6E 20     more ...  than 
004930:  32 30 30 30 20 6C 69 6E 65 73 20 69 6E 20 74 68    2000 lines in th
004940:  65 6D 2C 20 73 6F 20 69 74 20 64 69 64 6E 27 74    em, so it didn't
004950:  20 73 65 65 6D 20 77 6F 72 74 68 20 74 68 65 20     seem worth the 
004960:  65 78 74 72 61 20 65 66 66 6F 72 74 2E 0D 0A 0D    extra effort....
004970:  0A 09 20 20 59 6F 75 20 63 61 6E 20 63 68 61 6E    ..  You can chan
004980:  67 65 20 74 68 65 20 75 70 70 65 72 20 62 6F 75    ge the upper bou
004990:  6E 64 20 61 74 20 77 69 6C 6C 20 74 6F 20 63 68    nd at will to ch
0049A0:  61 6E 67 65 20 74 68 65 20 73 69 7A 65 20 6F 66    ange the size of
0049B0:  20 74 68 65 0D 0A 09 20 20 74 61 62 6C 65 2E 20     the...  table. 
0049C0:  20 2A 29 0D 0A 0D 0A 09 48 69 67 68 57 61 74 65     *).....HighWate
0049D0:  72 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 54 68    r:CARDINAL;.(*Th
0049E0:  65 20 74 6F 70 20 65 6E 74 72 79 20 69 6E 20 50    e top entry in P
0049F0:  6F 73 74 61 62 6C 65 20 77 68 69 63 68 20 69 73    ostable which is
004A00:  20 76 61 6C 69 64 2A 29 0D 0A 56 41 52 09 4C 69     valid*)..VAR.Li
004A10:  6E 65 4F 66 46 69 6C 65 3A 43 41 52 44 49 4E 41    neOfFile:CARDINA
004A20:  4C 3B 0D 0A 09 43 6F 6E 74 69 6E 75 61 74 69 6F    L;...Continuatio
004A30:  6E 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B    n:BOOLEAN=FALSE;
004A40:  09 28 2A 74 72 75 65 20 69 66 20 6C 69 6E 65 20    .(*true if line 
004A50:  69 73 20 63 6F 6E 74 69 6E 75 61 74 69 6F 6E 20    is continuation 
004A60:  6F 66 0D 0A 09 09 09 09 09 20 20 70 72 65 76 69    of.......  previ
004A70:  6F 75 73 20 6C 69 6E 65 2A 29 0D 0A 0D 0A 50 52    ous line*)....PR
004A80:  4F 43 45 44 55 52 45 20 41 64 64 4D 61 72 6B 65    OCEDURE AddMarke
004A90:  72 3B 0D 0A 0D 0A 28 2A 09 41 64 64 20 61 20 6D    r;....(*.Add a m
004AA0:  61 72 6B 65 72 20 74 6F 20 74 68 65 20 70 6F 73    arker to the pos
004AB0:  69 74 69 6F 6E 20 74 61 62 6C 65 2E 20 20 4C 69    ition table.  Li
004AC0:  6E 4F 66 46 69 6C 65 20 67 69 76 65 73 20 6C 69    nOfFile gives li
004AD0:  6E 65 20 6E 75 6D 62 65 72 2A 29 0D 0A 42 45 47    ne number*)..BEG
004AE0:  49 4E 0D 0A 09 49 46 20 28 4C 69 6E 65 4F 66 46    IN...IF (LineOfF
004AF0:  69 6C 65 3C 48 49 47 48 28 50 6F 73 54 61 62 6C    ile<HIGH(PosTabl
004B00:  52 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B    R.reply:INTEGER;
004B10:  0D 0A 09 69 2C 6A 3A 49 4E 54 45 47 45 52 3B 0D    ...i,j:INTEGER;.
004B20:  0A 09 49 6E 66 3A 46 49 4C 45 3B 09 28 2A 69 6E    ..Inf:FILE;.(*in
004B30:  70 75 74 20 66 69 6C 65 2A 29 0D 0A 0D 0A 09 28    put file*).....(
004B40:  2A 09 54 68 65 20 69 6E 70 75 74 20 69 73 20 62    *.The input is b
004B50:  75 66 66 65 72 65 64 3A 0D 0A 09 09 42 75 66 66    uffered:....Buff
004B60:  65 72 20 20 20 20 20 63 6F 6E 74 61 69 6E 73 20    er     contains 
004B70:  74 68 65 20 74 65 78 74 20 74 6F 20 62 75 66 66    the text to buff
004B80:  65 72 0D 0A 09 09 42 6C 6F 63 6B 4E 6F 20 20 20    er....BlockNo   
004B90:  20 63 6F 6E 74 61 69 6E 73 20 74 68 65 20 6E 75     contains the nu
004BA0:  6D 62 65 72 20 6F 66 20 74 68 65 20 66 69 72 73    mber of the firs
004BB0:  74 20 62 6C 6F 63 6B 20 69 6E 20 74 68 65 20 62    t block in the b
004BC0:  75 66 66 65 72 0D 0A 09 09 09 20 20 20 54 68 69    uffer.....   Thi
004BD0:  73 20 76 61 72 69 61 62 6C 65 20 69 73 20 6D 6F    s variable is mo
004BE0:  64 69 66 69 65 64 20 62 79 20 74 68 65 20 72 61    dified by the ra
004BF0:  6E 64 6F 6D 20 70 6F 73 69 74 69 6F 6E 69 6E 67    ndom positioning
004C00:  0D 0A 09 09 09 20 20 20 63 6F 64 65 20 74 6F 20    .....   code to 
004C10:  72 65 66 6C 65 63 74 20 63 68 61 6E 67 65 73 20    reflect changes 
004C20:  69 6E 20 74 68 65 20 66 69 6C 65 20 70 6F 73 69    in the file posi
004C30:  74 69 6F 6E 0D 0A 09 09 43 68 61 72 50 6F 73 20    tion....CharPos 
004C40:  20 20 20 67 69 76 65 73 20 74 68 65 20 63 68 61       gives the cha
004C50:  72 61 63 74 65 72 20 6E 75 6D 62 65 72 20 6F 66    racter number of
004C60:  20 74 68 65 20 6E 65 78 74 20 63 68 61 72 61 63     the next charac
004C70:  74 65 72 20 74 6F 20 0D 0A 09 09 09 20 20 20 62    ter to .....   b
004C80:  65 20 6C 69 73 74 65 64 20 66 72 6F 6D 20 74 68    e listed from th
004C90:  65 20 62 75 66 66 65 72 0D 0A 09 09 43 68 61 72    e buffer....Char
004CA0:  43 6F 75 6E 74 20 20 67 69 76 65 73 20 6E 75 6D    Count  gives num
004CB0:  62 65 72 20 6F 66 20 76 61 6C 69 64 20 63 68 61    ber of valid cha
004CC0:  72 61 63 74 65 72 73 20 69 6E 20 74 68 65 20 62    racters in the b
004CD0:  75 66 66 65 72 2C 20 69 74 20 6D 61 79 20 62 65    uffer, it may be
004CE0:  0D 0A 09 09 09 20 20 20 6C 65 73 73 20 74 68 61    .....   less tha
004CF0:  6E 20 74 68 65 20 62 75 66 66 65 72 20 6C 65 6E    n the buffer len
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 41 02 00 00 00 02    ......R...A.....
004D20:  04 00 46 02 00 00 00 02 04 00 42 02 00 00 00 02    ..F.......B.....
004D30:  04 00 47 02 00 00 00 02 04 00 43 02 00 00 00 02    ..G.......C.....
004D40:  04 00 48 02 00 00 00 02 04 00 44 02 00 00 00 02    ..H.......D.....
004D50:  04 00 49 02 00 00 00 02 04 00 45 02 00 00 00 02    ..I.......E.....
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:  65 29 29 20 41 4E 44 20 28 4C 69 6E 65 4F 66 46    e)) AND (LineOfF
004E10:  69 6C 65 3E 48 69 67 68 57 61 74 65 72 29 20 54    ile>HighWater) T
004E20:  48 45 4E 0D 0A 09 09 48 69 67 68 57 61 74 65 72    HEN....HighWater
004E30:  3A 3D 4C 69 6E 65 4F 66 46 69 6C 65 3B 0D 0A 09    :=LineOfFile;...
004E40:  09 57 49 54 48 20 50 6F 73 54 61 62 6C 65 5B 48    .WITH PosTable[H
004E50:  69 67 68 57 61 74 65 72 5D 20 44 4F 0D 0A 09 09    ighWater] DO....
004E60:  09 42 6C 6F 63 6B 4E 75 6D 62 65 72 3A 3D 42 6C    .BlockNumber:=Bl
004E70:  6F 63 6B 4E 6F 3B 0D 0A 09 09 09 43 68 61 72 4F    ockNo;.....CharO
004E80:  66 66 73 65 74 3A 3D 43 68 61 72 50 6F 73 0D 0A    ffset:=CharPos..
004E90:  09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D    ...END;....END;.
004EA0:  0A 09 45 4E 44 20 41 64 64 4D 61 72 6B 65 72 3B    ..END AddMarker;
004EB0:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65    ....PROCEDURE Re
004EC0:  70 6F 73 69 74 69 6F 6E 46 69 6C 65 3B 0D 0A 0D    positionFile;...
004ED0:  0A 28 2A 09 52 65 70 6F 73 69 74 69 6F 6E 20 66    .(*.Reposition f
004EE0:  69 6C 65 20 74 6F 20 6C 69 6E 65 20 6E 75 6D 62    ile to line numb
004EF0:  65 72 20 67 69 76 65 6E 20 62 79 20 4C 69 6E 65    er given by Line
004F00:  4F 66 46 69 6C 65 2E 0D 0A 0D 0A 09 54 68 69 73    OfFile......This
004F10:  20 6C 69 6E 65 20 6E 75 6D 62 65 72 20 6E 65 65     line number nee
004F20:  64 20 6E 6F 74 20 62 65 20 77 69 74 68 69 6E 20    d not be within 
004F30:  74 68 65 20 70 61 72 74 20 6F 66 20 74 68 65 20    the part of the 
004F40:  66 69 6C 65 0D 0A 09 61 6C 72 65 61 64 79 20 65    file...already e
004F50:  78 61 6D 69 6E 65 64 20 28 6F 72 20 70 72 65 76    xamined (or prev
004F60:  69 6F 75 73 6C 79 20 73 6B 69 70 70 65 64 29 20    iously skipped) 
004F70:  73 6F 20 74 68 61 74 20 69 74 20 6D 61 79 20 62    so that it may b
004F80:  65 0D 0A 09 6E 65 63 65 73 73 61 72 79 20 74 6F    e...necessary to
004F90:  20 61 64 76 61 6E 63 65 20 61 73 20 66 61 72 20     advance as far 
004FA0:  61 73 20 70 6F 73 73 69 62 6C 65 20 61 6E 64 20    as possible and 
004FB0:  74 68 65 6E 20 73 63 61 6E 20 66 6F 72 77 61 72    then scan forwar
004FC0:  64 2E 0D 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74    d......This rout
004FD0:  69 6E 65 20 6F 6E 6C 79 20 68 61 6E 64 6C 65 73    ine only handles
004FE0:  20 70 6F 73 69 74 69 6F 6E 69 6E 67 20 62 79 20     positioning by 
004FF0:  6C 69 6E 65 20 6E 75 6D 62 65 72 2D 2D 73 65 65    line number--see
005000:  3A 3D 6E 63 68 3B 0D 0A 09 09 09 45 4E 44 3B 20    :=nch;.....END; 
005010:  28 2A 49 46 20 63 68 3D 42 53 20 65 74 63 2A 29    (*IF ch=BS etc*)
005020:  0D 0A 09 09 45 4E 44 3B 28 2A 4C 4F 4F 50 2A 29    ....END;(*LOOP*)
005030:  0D 0A 0D 0A 09 73 74 72 69 6E 67 5B 6C 65 6E 2B    .....string[len+
005040:  31 5D 3A 3D 30 78 3B 09 28 2A 73 65 74 20 73 6F    1]:=0x;.(*set so
005050:  20 73 74 72 69 6E 67 20 63 61 6E 20 6C 61 74 65     string can late
005060:  72 20 62 65 20 70 72 69 6E 74 65 64 2A 29 0D 0A    r be printed*)..
005070:  0D 0A 09 49 46 20 6C 65 6E 3C 3E 30 20 54 48 45    ...IF len<>0 THE
005080:  4E 0D 0A 09 09 4C 61 73 74 4C 65 6E 3A 3D 6C 65    N....LastLen:=le
005090:  6E 3B 0D 0A 09 09 4C 61 73 74 53 74 72 69 6E 67    n;....LastString
0050A0:  3A 3D 73 74 72 69 6E 67 3B 0D 0A 09 09 45 4E 44    :=string;....END
0050B0:  3B 0D 0A 09 49 46 20 4C 61 73 74 4C 65 6E 3D 30    ;...IF LastLen=0
0050C0:  20 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74     THEN....WriteSt
0050D0:  72 69 6E 67 28 27 20 45 72 72 6F 72 20 2D 20 6E    ring(' Error - n
0050E0:  6F 20 70 72 65 76 69 6F 75 73 20 73 65 61 72 63    o previous searc
0050F0:  68 20 73 74 72 69 6E 67 27 29 3B 0D 0A 09 09 57    h string');....W
005100:  72 69 74 65 4C 6E 3B 0D 0A 09 45 4C 53 45 09 28    riteLn;...ELSE.(
005110:  2A 73 74 61 72 74 20 6D 61 74 63 68 2A 29 0D 0A    *start match*)..
005120:  09 09 50 61 72 74 69 61 6C 73 3A 3D 30 3B 0D 0A    ..Partials:=0;..
005130:  09 09 4C 4F 4F 50 0D 0A 09 09 09 49 46 20 63 68    ..LOOP.....IF ch
005140:  3D 45 4F 46 20 54 48 45 4E 20 45 58 49 54 20 45    =EOF THEN EXIT E
005150:  4E 44 3B 0D 0A 09 09 09 57 48 49 4C 45 20 63 68    ND;.....WHILE ch
005160:  3D 43 52 20 44 4F 0D 0A 09 09 09 09 4E 65 78 74    =CR DO......Next
005170:  43 68 61 72 3B 0D 0A 09 09 09 09 49 46 20 63 68    Char;......IF ch
005180:  3D 4C 46 20 54 48 45 4E 20 4E 65 78 74 43 68 61    =LF THEN NextCha
005190:  72 20 45 4E 44 3B 0D 0A 09 09 09 09 49 4E 43 28    r END;......INC(
0051A0:  4C 69 6E 65 4F 66 46 69 6C 65 29 3B 0D 0A 09 09    LineOfFile);....
0051B0:  09 09 41 64 64 4D 61 72 6B 65 72 3B 0D 0A 09 09    ..AddMarker;....
0051C0:  09 09 45 4E 44 3B 0D 0A 09 09 09 28 2A 61 64 64    ..END;.....(*add
0051D0:  20 61 20 6E 65 77 20 70 61 72 74 69 61 6C 20 6D     a new partial m
0051E0:  61 74 63 68 20 77 68 69 63 68 20 68 61 73 20 6A    atch which has j
0051F0:  75 73 74 20 6D 61 74 63 68 65 64 0D 0A 09 09 09    ust matched.....
005200:  20 0D 0A 09 53 65 61 72 63 68 20 66 6F 72 20 70     ...Search for p
005210:  6F 73 69 74 69 6F 6E 69 6E 67 20 62 79 20 73 74    ositioning by st
005220:  72 69 6E 67 20 6D 61 74 63 68 2E 2A 29 0D 0A 0D    ring match.*)...
005230:  0A 56 41 52 09 52 65 71 75 69 72 65 64 3A 43 41    .VAR.Required:CA
005240:  52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A    RDINAL;..BEGIN..
005250:  09 52 65 71 75 69 72 65 64 3A 3D 4C 69 6E 65 4F    .Required:=LineO
005260:  66 46 69 6C 65 3B 0D 0A 0D 0A 28 2A 09 20 20 09    fFile;....(*.  .
005270:  52 65 63 61 6C 63 75 6C 61 74 65 20 70 61 67 65    Recalculate page
005280:  20 6E 75 6D 62 65 72 20 61 73 73 75 6D 69 6E 67     number assuming
005290:  20 74 68 61 74 20 6E 6F 20 6C 69 6E 65 73 20 6F     that no lines o
0052A0:  76 65 72 66 6C 6F 77 65 64 20 28 74 68 61 74 0D    verflowed (that.
0052B0:  0A 09 09 69 73 2C 20 74 68 61 74 20 74 68 65 20    ...is, that the 
0052C0:  6D 61 78 69 6D 75 6D 20 6E 75 6D 62 65 72 20 6F    maximum number o
0052D0:  66 20 6C 69 6E 65 73 20 6F 63 63 75 72 65 64 20    f lines occured 
0052E0:  6F 6E 20 65 61 63 68 20 70 61 67 65 29 2E 0D 0A    on each page)...
0052F0:  0D 0A 09 20 20 09 4E 6F 74 65 20 74 68 61 74 20    ...  .Note that 
005300:  74 68 65 20 70 61 67 65 20 6E 75 6D 62 65 72 20    the page number 
005310:  69 73 20 61 6C 77 61 79 73 20 69 6E 63 72 65 6D    is always increm
005320:  65 6E 74 65 64 20 62 65 66 6F 72 65 20 69 74 20    ented before it 
005330:  69 73 0D 0A 09 09 70 72 69 6E 74 65 64 20 73 6F    is....printed so
005340:  20 74 68 61 74 20 74 68 69 73 20 63 6F 64 65 20     that this code 
005350:  64 6F 65 73 20 6E 6F 74 20 72 65 73 75 6C 74 20    does not result 
005360:  69 6E 20 70 61 67 65 20 6E 75 6D 62 65 72 73 20    in page numbers 
005370:  74 68 61 74 0D 0A 09 09 61 72 65 20 6F 6E 65 20    that....are one 
005380:  74 6F 6F 20 73 6D 61 6C 6C 2E 0D 0A 2A 29 0D 0A    too small...*)..
005390:  0D 0A 09 50 61 67 65 4E 75 6D 62 65 72 3A 3D 28    ...PageNumber:=(
0053A0:  4C 69 6E 65 4F 66 46 69 6C 65 2D 31 29 20 44 49    LineOfFile-1) DI
0053B0:  56 20 28 50 61 67 65 4C 65 6E 2D 32 29 3B 0D 0A    V (PageLen-2);..
0053C0:  09 49 46 20 4C 69 6E 65 4F 66 46 69 6C 65 3E 48    .IF LineOfFile>H
0053D0:  69 67 68 57 61 74 65 72 20 54 48 45 4E 20 4C 69    ighWater THEN Li
0053E0:  6E 65 4F 66 46 69 6C 65 3A 3D 48 69 67 68 57 61    neOfFile:=HighWa
0053F0:  74 65 72 20 45 4E 44 3B 0D 0A 09 43 6F 6E 74 69    ter END;...Conti
005400:  20 20 74 68 65 20 6E 75 6C 6C 20 73 74 72 69 6E      the null strin
005410:  67 2A 29 0D 0A 0D 0A 09 09 09 49 4E 43 28 50 61    g*).......INC(Pa
005420:  72 74 69 61 6C 73 29 3B 0D 0A 09 09 09 50 61 72    rtials);.....Par
005430:  74 69 61 6C 50 6F 73 5B 50 61 72 74 69 61 6C 73    tialPos[Partials
005440:  5D 3A 3D 31 3B 0D 0A 0D 0A 09 09 09 28 2A 74 72    ]:=1;.......(*tr
005450:  79 20 74 6F 20 61 64 76 61 6E 63 65 20 61 6C 6C    y to advance all
005460:  20 74 68 65 20 65 78 69 73 74 69 6E 67 20 70 61     the existing pa
005470:  72 74 69 61 6C 6C 79 20 63 6F 6D 70 6C 65 74 65    rtially complete
005480:  64 0D 0A 09 09 09 20 20 6D 61 74 63 68 65 73 2A    d.....  matches*
005490:  29 0D 0A 0D 0A 09 09 09 6A 3A 3D 30 3B 0D 0A 09    ).......j:=0;...
0054A0:  09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 50 61    ..FOR i:=1 TO Pa
0054B0:  72 74 69 61 6C 73 20 44 4F 0D 0A 09 09 09 09 6E    rtials DO......n
0054C0:  63 68 3A 3D 4C 61 73 74 53 74 72 69 6E 67 5B 50    ch:=LastString[P
0054D0:  61 72 74 69 61 6C 50 6F 73 5B 69 5D 5D 3B 0D 0A    artialPos[i]];..
0054E0:  09 09 09 09 49 46 20 28 6E 63 68 3D 63 68 29 20    ....IF (nch=ch) 
0054F0:  4F 52 20 28 43 41 50 28 6E 63 68 29 3D 63 68 29    OR (CAP(nch)=ch)
005500:  20 54 48 45 4E 0D 0A 0D 0A 09 09 09 09 28 2A 20     THEN........(* 
005510:  74 68 65 20 74 77 6F 20 63 6F 6E 64 69 74 69 6F    the two conditio
005520:  6E 73 20 69 6E 20 74 68 65 20 61 62 6F 76 65 20    ns in the above 
005530:  6C 69 6E 65 0D 0A 09 09 09 09 20 20 20 70 72 6F    line......   pro
005540:  76 69 64 65 20 66 6F 72 20 6C 6F 77 65 72 20 63    vide for lower c
005550:  61 73 65 20 74 6F 20 69 6E 20 74 68 65 20 6D 61    ase to in the ma
005560:  74 63 68 20 0D 0A 09 09 09 09 20 20 20 73 74 72    tch ......   str
005570:  69 6E 67 20 74 6F 20 6D 61 74 63 68 20 65 69 74    ing to match eit
005580:  68 65 72 20 63 61 73 65 2A 29 0D 0A 0D 0A 09 09    her case*)......
005590:  09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 09    ...INC(j);......
0055A0:  09 50 61 72 74 69 61 6C 50 6F 73 5B 6A 5D 3A 3D    .PartialPos[j]:=
0055B0:  50 61 72 74 69 61 6C 50 6F 73 5B 69 5D 2B 31 3B    PartialPos[i]+1;
0055C0:  0D 0A 09 09 09 09 09 49 46 20 50 61 72 74 69 61    .......IF Partia
0055D0:  6C 50 6F 73 5B 6A 5D 3E 4C 61 73 74 4C 65 6E 20    lPos[j]>LastLen 
0055E0:  54 48 45 4E 20 0D 0A 09 09 09 09 09 09 45 58 49    THEN ........EXI
0055F0:  54 20 20 28 2A 6D 61 74 63 68 20 66 6F 75 6E 64    T  (*match found
005600:  6E 75 61 74 69 6F 6E 3A 3D 46 41 4C 53 45 3B 0D    nuation:=FALSE;.
005610:  0A 0D 0A 09 49 46 20 4C 69 6E 65 4F 66 46 69 6C    ....IF LineOfFil
005620:  65 3E 30 20 54 48 45 4E 0D 0A 09 20 20 20 20 57    e>0 THEN...    W
005630:  49 54 48 20 50 6F 73 54 61 62 6C 65 5B 4C 69 6E    ITH PosTable[Lin
005640:  65 4F 66 46 69 6C 65 5D 20 44 4F 0D 0A 09 09 49    eOfFile] DO....I
005650:  46 20 42 6C 6F 63 6B 4E 75 6D 62 65 72 3C 3E 42    F BlockNumber<>B
005660:  6C 6F 63 6B 4E 6F 20 54 48 45 4E 0D 0A 09 09 09    lockNo THEN.....
005670:  53 65 74 42 6C 6F 63 6B 28 49 6E 66 2C 42 6C 6F    SetBlock(Inf,Blo
005680:  63 6B 4E 75 6D 62 65 72 29 3B 0D 0A 09 09 09 4E    ckNumber);.....N
005690:  65 78 74 42 6C 6F 63 6B 4E 6F 3A 3D 42 6C 6F 63    extBlockNo:=Bloc
0056A0:  6B 4E 75 6D 62 65 72 3B 0D 0A 09 09 09 52 65 61    kNumber;.....Rea
0056B0:  64 42 75 66 66 65 72 3B 0D 0A 09 09 09 45 4E 44    dBuffer;.....END
0056C0:  3B 0D 0A 09 09 43 68 61 72 50 6F 73 3A 3D 43 68    ;....CharPos:=Ch
0056D0:  61 72 4F 66 66 73 65 74 2D 31 3B 0D 0A 09 09 4E    arOffset-1;....N
0056E0:  65 78 74 43 68 61 72 3B 09 09 28 2A 72 65 2D 70    extChar;..(*re-p
0056F0:  72 69 6D 65 20 63 68 61 72 61 63 74 65 72 20 70    rime character p
005700:  6F 69 6E 74 65 72 2A 29 0D 0A 0D 0A 09 09 28 2A    ointer*)......(*
005710:  09 54 68 65 20 72 65 71 75 69 72 65 64 20 63 68    .The required ch
005720:  61 72 61 63 74 65 72 20 69 73 20 6F 6E 65 20 6C    aracter is one l
005730:  65 73 73 20 74 68 61 6E 20 74 68 65 20 0D 0A 09    ess than the ...
005740:  09 09 73 61 76 65 64 20 6D 61 72 6B 65 72 20 61    ..saved marker a
005750:  73 20 74 68 65 20 63 68 61 72 61 63 74 65 72 20    s the character 
005760:  70 6F 69 6E 74 65 72 20 69 73 0D 0A 09 09 09 69    pointer is.....i
005770:  6E 63 72 65 6D 65 6E 74 65 64 20 61 66 74 65 72    ncremented after
005780:  20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61     the first chara
005790:  63 74 65 72 20 6F 66 20 74 68 65 20 6C 69 6E 65    cter of the line
0057A0:  20 69 73 0D 0A 09 09 09 72 65 74 75 72 6E 65 64     is.....returned
0057B0:  2E 20 42 75 74 20 74 68 65 20 62 6C 6F 63 6B 20    . But the block 
0057C0:  69 73 20 63 6F 72 72 65 63 74 2C 20 62 65 63 61    is correct, beca
0057D0:  75 73 65 20 74 68 65 0D 0A 09 09 09 27 70 6F 73    use the.....'pos
0057E0:  69 74 69 6F 6E 20 62 65 79 6F 6E 64 20 65 6E 64    ition beyond end
0057F0:  20 6F 66 20 62 6C 6F 63 6B 27 20 69 73 20 6E 6F     of block' is no
005800:  2A 29 0D 0A 09 09 09 09 09 09 45 4E 44 3B 0D 0A    *)........END;..
005810:  09 09 09 09 09 0D 0A 09 09 09 09 09 45 4E 44 3B    ............END;
005820:  0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 50    ......END;.....P
005830:  61 72 74 69 61 6C 73 3A 3D 6A 3B 0D 0A 09 09 09    artials:=j;.....
005840:  4E 65 78 74 43 68 61 72 3B 0D 0A 09 09 09 45 4E    NextChar;.....EN
005850:  44 3B 0D 0A 09 09 28 2A 65 69 74 68 65 72 20 63    D;....(*either c
005860:  68 3D 45 4F 46 20 6F 72 20 61 20 6D 61 74 63 68    h=EOF or a match
005870:  20 68 61 73 20 62 65 65 6E 20 66 6F 75 6E 64 2A     has been found*
005880:  29 0D 0A 09 09 49 46 20 63 68 3D 45 4F 46 20 54    )....IF ch=EOF T
005890:  48 45 4E 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B    HEN.....WriteLn;
0058A0:  0D 0A 09 09 09 57 72 69 74 65 53 74 72 69 6E 67    .....WriteString
0058B0:  28 4C 61 73 74 53 74 72 69 6E 67 29 3B 0D 0A 09    (LastString);...
0058C0:  09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20    ..WriteString(' 
0058D0:  63 6F 75 6C 64 20 6E 6F 74 20 62 65 20 66 6F 75    could not be fou
0058E0:  6E 64 27 29 3B 0D 0A 09 09 45 4C 53 45 0D 0A 09    nd');....ELSE...
0058F0:  09 09 52 65 70 6F 73 69 74 69 6F 6E 46 69 6C 65    ..RepositionFile
005900:  3B 20 28 2A 74 6F 20 73 74 61 72 74 20 6F 66 20    ; (*to start of 
005910:  63 75 72 72 65 6E 74 20 6C 69 6E 65 2A 29 0D 0A    current line*)..
005920:  09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28    ...END;....END;(
005930:  2A 73 65 61 72 63 68 20 73 74 72 69 6E 67 20 65    *search string e
005940:  6E 74 65 72 65 64 20 6F 72 20 65 78 69 73 74 65    ntered or existe
005950:  64 2A 29 0D 0A 09 45 4E 44 20 53 65 61 72 63 68    d*)...END Search
005960:  3B 0D 0A 09 0D 0A 28 2A 09 4F 70 74 69 6F 6E 20    ;.....(*.Option 
005970:  66 6C 61 67 73 20 61 6E 64 20 73 63 72 65 65 6E    flags and screen
005980:  20 64 69 6D 65 6E 73 69 6F 6E 73 2A 29 0D 0A 0D     dimensions*)...
005990:  0A 56 41 52 09 50 61 67 65 4D 6F 64 65 3A 42 4F    .VAR.PageMode:BO
0059A0:  4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 4C    OLEAN=FALSE;...L
0059B0:  69 6E 65 57 72 61 70 3A 42 4F 4F 4C 45 41 4E 3D    ineWrap:BOOLEAN=
0059C0:  46 41 4C 53 45 3B 0D 0A 09 4E 75 6D 62 65 72 4C    FALSE;...NumberL
0059D0:  69 6E 65 73 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C    ines:BOOLEAN=FAL
0059E0:  53 45 3B 0D 0A 09 45 78 70 61 6E 64 54 61 62 73    SE;...ExpandTabs
0059F0:  3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D    :BOOLEAN=FALSE;.
005A00:  74 20 63 68 65 63 6B 65 64 0D 0A 09 09 09 75 6E    t checked.....un
005A10:  74 69 6C 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E    til the followin
005A20:  67 20 63 68 61 72 61 63 74 65 72 20 69 73 20 73    g character is s
005A30:  6F 75 67 68 74 2A 29 0D 0A 09 09 45 4E 44 3B 28    ought*)....END;(
005A40:  2A 57 49 54 48 2A 29 0D 0A 09 20 20 20 20 45 4E    *WITH*)...    EN
005A50:  44 3B 28 2A 49 46 20 4C 69 6E 65 4F 66 46 69 6C    D;(*IF LineOfFil
005A60:  65 3E 30 2A 29 0D 0A 09 57 48 49 4C 45 20 4C 69    e>0*)...WHILE Li
005A70:  6E 65 4F 66 46 69 6C 65 3C 52 65 71 75 69 72 65    neOfFile<Require
005A80:  64 20 44 4F 0D 0A 09 09 57 48 49 4C 45 20 63 68    d DO....WHILE ch
005A90:  3C 3E 43 52 20 44 4F 20 4E 65 78 74 43 68 61 72    <>CR DO NextChar
005AA0:  20 45 4E 44 3B 0D 0A 09 09 4E 65 78 74 43 68 61     END;....NextCha
005AB0:  72 3B 0D 0A 09 09 49 46 20 63 68 3D 4C 46 20 54    r;....IF ch=LF T
005AC0:  48 45 4E 20 4E 65 78 74 43 68 61 72 20 45 4E 44    HEN NextChar END
005AD0:  3B 0D 0A 09 09 49 4E 43 28 4C 69 6E 65 4F 66 46    ;....INC(LineOfF
005AE0:  69 6C 65 29 3B 0D 0A 09 09 41 64 64 4D 61 72 6B    ile);....AddMark
005AF0:  65 72 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E    er;....END;...EN
005B00:  44 20 52 65 70 6F 73 69 74 69 6F 6E 46 69 6C 65    D RepositionFile
005B10:  3B 0D 0A 0D 0A 54 59 50 45 09 4D 61 74 63 68 53    ;....TYPE.MatchS
005B20:  74 72 69 6E 67 3D 41 52 52 41 59 5B 31 2E 2E 36    tring=ARRAY[1..6
005B30:  30 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 0D 0A 56    0] OF CHAR;....V
005B40:  41 52 09 4C 61 73 74 53 74 72 69 6E 67 3A 4D 61    AR.LastString:Ma
005B50:  74 63 68 53 74 72 69 6E 67 3B 0D 0A 09 4C 61 73    tchString;...Las
005B60:  74 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3D 30 3B    tLen:CARDINAL=0;
005B70:  09 28 2A 6C 65 6E 67 74 68 20 6F 66 20 6C 61 73    .(*length of las
005B80:  74 20 6D 61 74 63 68 65 64 20 73 74 72 69 6E 67    t matched string
005B90:  2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20    *)....PROCEDURE 
005BA0:  53 65 61 72 63 68 28 44 65 6C 69 6D 69 74 65 72    Search(Delimiter
005BB0:  3A 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09 53 65    :CHAR);....(*.Se
005BC0:  61 72 63 68 20 66 6F 72 20 61 20 73 74 72 69 6E    arch for a strin
005BD0:  67 20 66 72 6F 6D 20 74 68 65 20 63 75 72 72 65    g from the curre
005BE0:  6E 74 20 70 6F 73 69 74 69 6F 6E 20 69 6E 20 74    nt position in t
005BF0:  68 65 20 66 69 6C 65 0D 0A 09 0D 0A 09 54 68 69    he file......Thi
005C00:  0A 09 50 61 67 65 57 69 64 74 68 3A 43 41 52 44    ..PageWidth:CARD
005C10:  49 4E 41 4C 3D 38 30 3B 0D 0A 09 4C 69 6E 65 4E    INAL=80;...LineN
005C20:  75 6D 62 65 72 3A 43 41 52 44 49 4E 41 4C 3B 0D    umber:CARDINAL;.
005C30:  0A 0D 0A 0D 0A 56 41 52 09 45 6E 64 4F 66 46 69    .....VAR.EndOfFi
005C40:  6C 65 3A 42 4F 4F 4C 45 41 4E 3B 09 09 28 2A 73    le:BOOLEAN;..(*s
005C50:  65 74 20 74 72 75 65 20 61 66 74 65 72 20 2A 2A    et true after **
005C60:  20 45 6E 64 20 6F 66 20 46 69 6C 65 20 2A 2A 20     End of File ** 
005C70:  68 61 73 0D 0A 09 09 09 09 09 20 20 62 65 65 6E    has.......  been
005C80:  20 6F 75 74 70 75 74 20 62 79 20 57 72 69 74 65     output by Write
005C90:  4C 69 6E 65 2A 29 0D 0A 0D 0A 28 2A 09 57 72 69    Line*)....(*.Wri
005CA0:  74 65 20 61 20 6C 69 6E 65 20 6F 66 20 6F 75 74    te a line of out
005CB0:  70 75 74 09 0D 0A 09 54 68 65 20 66 69 72 73 74    put....The first
005CC0:  20 63 68 61 72 61 63 74 65 72 20 6F 66 20 74 68     character of th
005CD0:  65 20 6C 69 6E 65 20 74 6F 20 62 65 20 77 72 69    e line to be wri
005CE0:  74 74 65 6E 20 6D 75 73 74 0D 0A 09 62 65 20 61    tten must...be a
005CF0:  76 61 69 6C 61 62 6C 65 20 69 6E 20 74 68 65 20    vailable in the 
005D00:  76 61 72 69 61 62 6C 65 20 63 68 20 62 65 66 6F    variable ch befo
005D10:  72 65 20 65 6E 74 72 79 20 74 6F 20 74 68 65 20    re entry to the 
005D20:  72 6F 75 74 69 6E 65 0D 0A 09 2A 29 0D 0A 0D 0A    routine...*)....
005D30:  50 52 4F 43 45 44 55 52 45 20 57 72 69 74 65 4C    PROCEDURE WriteL
005D40:  69 6E 65 3B 0D 0A 56 41 52 09 43 68 61 72 73 57    ine;..VAR.CharsW
005D50:  72 69 74 74 65 6E 3A 43 41 52 44 49 4E 41 4C 3B    ritten:CARDINAL;
005D60:  0D 0A 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 09 43 68    ....BEGIN.....Ch
005D70:  61 72 73 57 72 69 74 74 65 6E 3A 3D 30 3B 0D 0A    arsWritten:=0;..
005D80:  0D 0A 09 49 46 20 4E 75 6D 62 65 72 4C 69 6E 65    ...IF NumberLine
005D90:  73 20 54 48 45 4E 0D 0A 09 09 49 46 20 43 6F 6E    s THEN....IF Con
005DA0:  74 69 6E 75 61 74 69 6F 6E 20 54 48 45 4E 20 0D    tinuation THEN .
005DB0:  0A 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28    ....WriteString(
005DC0:  27 20 20 20 20 20 20 27 29 3B 0D 0A 09 09 45 4C    '      ');....EL
005DD0:  53 45 09 0D 0A 09 09 09 57 72 69 74 65 49 6E 74    SE......WriteInt
005DE0:  28 4C 69 6E 65 4F 66 46 69 6C 65 2C 35 29 3B 0D    (LineOfFile,5);.
005DF0:  0A 09 09 09 57 72 69 74 65 28 27 7C 27 29 3B 0D    ....Write('|');.
005E00:  73 20 72 6F 75 74 69 6E 65 20 64 6F 65 73 20 61    s routine does a
005E10:  20 70 6C 61 69 6E 20 73 69 6D 70 6C 65 20 73 65     plain simple se
005E20:  61 72 63 68 2E 20 54 68 65 72 65 20 61 72 65 20    arch. There are 
005E30:  6D 75 63 68 0D 0A 09 66 61 73 74 65 72 20 77 61    much...faster wa
005E40:  79 73 20 6F 66 20 64 6F 69 6E 67 20 73 65 61 72    ys of doing sear
005E50:  63 68 65 73 2C 20 62 75 74 20 74 68 65 79 20 61    ches, but they a
005E60:  72 65 20 70 72 6F 62 61 62 6C 79 0D 0A 09 67 6F    re probably...go
005E70:  69 6E 67 20 74 6F 20 62 65 20 73 77 61 6D 70 65    ing to be swampe
005E80:  64 20 62 79 20 74 68 65 20 49 4F 20 74 69 6D 65    d by the IO time
005E90:  20 61 6E 79 77 61 79 2A 29 0D 0A 56 41 52 09 73     anyway*)..VAR.s
005EA0:  74 72 69 6E 67 3A 4D 61 74 63 68 53 74 72 69 6E    tring:MatchStrin
005EB0:  67 3B 0D 0A 09 6C 65 6E 3A 43 41 52 44 49 4E 41    g;...len:CARDINA
005EC0:  4C 3B 0D 0A 09 6E 63 68 3A 43 48 41 52 3B 0D 0A    L;...nch:CHAR;..
005ED0:  09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    .i,j:CARDINAL;..
005EE0:  09 50 61 72 74 69 61 6C 50 6F 73 3A 41 52 52 41    .PartialPos:ARRA
005EF0:  59 5B 31 2E 2E 36 30 5D 20 4F 46 20 43 41 52 44    Y[1..60] OF CARD
005F00:  49 4E 41 4C 3B 0D 0A 09 50 61 72 74 69 61 6C 73    INAL;...Partials
005F10:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49    :CARDINAL;..BEGI
005F20:  4E 0D 0A 09 6C 65 6E 3A 3D 30 3B 0D 0A 09 4C 4F    N...len:=0;...LO
005F30:  4F 50 0D 0A 09 09 52 65 61 64 28 6E 63 68 29 3B    OP....Read(nch);
005F40:  0D 0A 09 09 49 46 20 28 6E 63 68 3D 42 53 29 20    ....IF (nch=BS) 
005F50:  4F 52 20 28 6E 63 68 3D 44 45 4C 29 20 54 48 45    OR (nch=DEL) THE
005F60:  4E 0D 0A 09 09 09 49 46 20 6C 65 6E 3E 30 20 54    N.....IF len>0 T
005F70:  48 45 4E 20 44 45 43 28 6C 65 6E 29 20 45 4E 44    HEN DEC(len) END
005F80:  3B 0D 0A 09 09 45 4C 53 49 46 20 28 6E 63 68 3D    ;....ELSIF (nch=
005F90:  44 65 6C 69 6D 69 74 65 72 29 20 4F 52 20 28 6C    Delimiter) OR (l
005FA0:  65 6E 3D 48 49 47 48 28 73 74 72 69 6E 67 29 29    en=HIGH(string))
005FB0:  0D 0A 09 09 09 4F 52 20 28 6E 63 68 3D 43 52 29    .....OR (nch=CR)
005FC0:  20 4F 52 20 28 6E 63 68 3D 4C 46 29 20 54 48 45     OR (nch=LF) THE
005FD0:  4E 0D 0A 09 09 09 45 58 49 54 0D 0A 09 09 45 4C    N.....EXIT....EL
005FE0:  53 45 0D 0A 09 09 09 49 4E 43 28 6C 65 6E 29 3B    SE.....INC(len);
005FF0:  0D 0A 09 09 09 73 74 72 69 6E 67 5B 6C 65 6E 5D    .....string[len]
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 41 02 00 00 00 02    ......R...A.....
006020:  05 00 46 02 00 00 00 02 05 00 42 02 00 00 00 02    ..F.......B.....
006030:  05 00 47 02 00 00 00 02 05 00 43 02 00 00 00 02    ..G.......C.....
006040:  05 00 48 02 00 00 00 02 05 00 44 02 00 00 00 02    ..H.......D.....
006050:  05 00 49 02 00 00 00 02 05 00 45 02 00 00 00 02    ..I.......E.....
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:  0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B    ....END;....END;
006110:  0D 0A 09 49 46 20 4E 4F 54 20 43 6F 6E 74 69 6E    ...IF NOT Contin
006120:  75 61 74 69 6F 6E 20 54 48 45 4E 20 0D 0A 09 09    uation THEN ....
006130:  41 64 64 4D 61 72 6B 65 72 3B 0D 0A 09 09 49 4E    AddMarker;....IN
006140:  43 28 4C 69 6E 65 4F 66 46 69 6C 65 29 3B 0D 0A    C(LineOfFile);..
006150:  09 09 45 4E 44 3B 0D 0A 09 43 6F 6E 74 69 6E 75    ..END;...Continu
006160:  61 74 69 6F 6E 3A 3D 46 41 4C 53 45 3B 0D 0A 0D    ation:=FALSE;...
006170:  0A 09 4C 4F 4F 50 0D 0A 0D 0A 09 09 28 2A 73 74    ..LOOP......(*st
006180:  72 69 70 20 74 6F 70 20 62 69 74 20 2D 20 73 68    rip top bit - sh
006190:  6F 75 6C 64 20 70 72 6F 62 61 62 6C 79 20 62 65    ould probably be
0061A0:  20 6F 70 74 69 6F 6E 20 63 6F 6E 74 72 6F 6C 6C     option controll
0061B0:  65 64 2A 29 0D 0A 0D 0A 09 09 49 46 20 43 68 61    ed*)......IF Cha
0061C0:  72 73 57 72 69 74 74 65 6E 3E 3D 50 61 67 65 57    rsWritten>=PageW
0061D0:  69 64 74 68 20 54 48 45 4E 20 0D 0A 09 09 09 43    idth THEN .....C
0061E0:  6F 6E 74 69 6E 75 61 74 69 6F 6E 3A 3D 54 52 55    ontinuation:=TRU
0061F0:  45 3B 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B 0D    E;.....WriteLn;.
006200:  0A 09 09 09 52 45 54 55 52 4E 0D 0A 09 09 09 45    ....RETURN.....E
006210:  4E 44 3B 0D 0A 0D 0A 09 09 49 46 20 63 68 3E 38    ND;......IF ch>8
006220:  30 78 20 54 48 45 4E 20 63 68 3A 3D 43 48 52 28    0x THEN ch:=CHR(
006230:  4F 52 44 28 63 68 29 2D 38 30 68 29 20 45 4E 44    ORD(ch)-80h) END
006240:  3B 0D 0A 0D 0A 09 09 43 41 53 45 20 63 68 20 4F    ;......CASE ch O
006250:  46 0D 0A 09 09 45 4F 46 3A 09 28 2A 45 6E 64 20    F....EOF:.(*End 
006260:  6F 66 20 46 69 6C 65 20 63 68 61 72 61 63 74 65    of File characte
006270:  72 20 66 6F 75 6E 64 2C 0D 0A 09 09 09 20 20 28    r found,.....  (
006280:  65 69 74 68 65 72 20 66 72 6F 6D 20 66 69 6C 65    either from file
006290:  20 6F 72 20 67 65 6E 65 72 61 74 65 64 20 62 79     or generated by
0062A0:  20 4E 65 78 74 43 68 61 72 29 0D 0A 09 09 09 20     NextChar)..... 
0062B0:  20 69 66 20 6E 6F 74 68 69 6E 67 20 68 61 73 20     if nothing has 
0062C0:  62 65 65 6E 20 70 72 69 6E 74 65 64 20 6F 6E 20    been printed on 
0062D0:  6C 69 6E 65 2C 0D 0A 09 09 09 20 20 6A 75 73 74    line,.....  just
0062E0:  20 72 65 74 75 72 6E 20 65 6E 64 20 6F 66 20 66     return end of f
0062F0:  69 6C 65 20 73 74 61 74 75 73 0D 0A 09 09 09 20    ile status..... 
006300:  4F 46 20 50 61 72 61 6D 65 74 65 72 3B 0D 0A 09    OF Parameter;...
006310:  43 6F 75 6E 74 3A 49 4E 54 45 47 45 52 3B 0D 0A    Count:INTEGER;..
006320:  09 4E 61 6D 65 73 3A 41 52 52 41 59 20 5B 30 2E    .Names:ARRAY [0.
006330:  2E 31 30 30 5D 20 4F 46 20 46 69 6C 65 4E 61 6D    .100] OF FileNam
006340:  65 3B 0D 0A 09 4E 61 6D 65 43 6F 75 6E 74 20 3A    e;...NameCount :
006350:  20 49 4E 54 45 47 45 52 3B 0D 0A 09 43 6F 75 6E     INTEGER;...Coun
006360:  74 65 72 20 3A 20 49 4E 54 45 47 45 52 3B 0D 0A    ter : INTEGER;..
006370:  09 43 6E 74 65 72 20 3A 20 49 4E 54 45 47 45 52    .Cnter : INTEGER
006380:  3B 0D 0A 0D 0A 28 2A 09 4F 75 74 70 75 74 20 74    ;....(*.Output t
006390:  68 65 20 66 69 6C 65 20 61 6C 72 65 61 64 79 20    he file already 
0063A0:  6F 70 65 6E 65 64 2A 29 0D 0A 0D 0A 09 0D 0A 50    opened*).......P
0063B0:  52 4F 43 45 44 55 52 45 20 4F 75 74 70 75 74 46    ROCEDURE OutputF
0063C0:  69 6C 65 28 4E 61 6D 65 3A 41 52 52 41 59 20 4F    ile(Name:ARRAY O
0063D0:  46 20 43 48 41 52 29 3B 0D 0A 56 41 52 09 63 68    F CHAR);..VAR.ch
0063E0:  3A 43 48 41 52 3B 0D 0A 09 69 3A 43 41 52 44 49    :CHAR;...i:CARDI
0063F0:  4E 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    NAL;..PROCEDURE 
006400:  50 61 67 65 48 65 61 64 65 72 3B 0D 0A 42 45 47    PageHeader;..BEG
006410:  49 4E 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09    IN...WriteLn;...
006420:  57 72 69 74 65 53 74 72 69 6E 67 28 4E 61 6D 65    WriteString(Name
006430:  29 3B 0D 0A 0D 0A 09 28 2A 20 49 66 20 74 65 72    );.....(* If ter
006440:  6D 69 6E 61 6C 20 73 75 70 70 6F 72 74 73 20 74    minal supports t
006450:  61 62 73 2C 20 70 75 74 20 70 61 67 65 20 6E 75    abs, put page nu
006460:  6D 62 65 72 20 6F 6E 20 72 69 67 68 74 20 68 61    mber on right ha
006470:  6E 64 20 73 69 64 65 0D 0A 09 6F 66 20 73 63 72    nd side...of scr
006480:  65 65 6E 2C 20 6F 74 68 65 72 77 69 73 65 20 6A    een, otherwise j
006490:  75 73 74 20 67 6F 20 69 6E 20 31 30 20 63 68 61    ust go in 10 cha
0064A0:  72 73 20 74 6F 20 73 61 76 65 20 74 69 6D 65 20    rs to save time 
0064B0:  6F 6E 0D 0A 09 61 6C 6F 77 20 6C 69 6E 6B 73 2A    on...alow links*
0064C0:  29 0D 0A 0D 0A 09 49 46 20 4E 4F 54 20 45 78 70    ).....IF NOT Exp
0064D0:  61 6E 64 54 61 62 73 20 54 48 45 4E 0D 0A 09 09    andTabs THEN....
0064E0:  46 4F 52 20 69 3A 3D 32 37 20 54 4F 20 50 61 67    FOR i:=27 TO Pag
0064F0:  65 57 69 64 74 68 20 42 59 20 38 20 44 4F 20 57    eWidth BY 8 DO W
006500:  20 49 66 20 6C 69 6E 65 20 77 61 73 20 69 6E 63     If line was inc
006510:  6F 6D 70 6C 65 74 65 2C 20 70 72 69 6E 74 20 3C    omplete, print <
006520:  45 4F 46 3E 20 61 6E 64 20 0D 0A 09 09 09 20 20    EOF> and .....  
006530:  72 65 74 75 72 6E 2A 29 0D 0A 0D 0A 09 09 09 49    return*).......I
006540:  46 20 28 43 68 61 72 73 57 72 69 74 74 65 6E 3D    F (CharsWritten=
006550:  30 29 20 54 48 45 4E 0D 0A 09 09 09 09 57 72 69    0) THEN......Wri
006560:  74 65 53 74 72 69 6E 67 28 27 20 20 09 20 20 2A    teString('  .  *
006570:  2A 20 45 6E 64 20 6F 66 20 46 69 6C 65 20 2A 2A    * End of File **
006580:  27 29 3B 0D 0A 09 09 09 09 45 6E 64 4F 66 46 69    ');......EndOfFi
006590:  6C 65 3A 3D 54 52 55 45 3B 0D 0A 09 09 09 45 4C    le:=TRUE;.....EL
0065A0:  53 45 0D 0A 09 09 09 09 57 72 69 74 65 53 74 72    SE......WriteStr
0065B0:  69 6E 67 28 27 3C 45 4F 46 3E 27 29 3B 0D 0A 09    ing('<EOF>');...
0065C0:  09 09 09 45 4E 44 3B 0D 0A 09 09 09 52 45 54 55    ...END;.....RETU
0065D0:  52 4E 3B 0D 0A 09 09 09 7C 0D 0A 0D 0A 09 09 43    RN;.....|......C
0065E0:  52 3A 09 28 2A 43 61 72 72 69 61 67 65 20 72 65    R:.(*Carriage re
0065F0:  74 75 72 6E 20 66 6F 75 6E 64 2A 29 0D 0A 09 09    turn found*)....
006600:  09 4E 65 78 74 43 68 61 72 3B 0D 0A 09 09 09 49    .NextChar;.....I
006610:  46 20 28 63 68 3D 4C 46 29 20 54 48 45 4E 20 4E    F (ch=LF) THEN N
006620:  65 78 74 43 68 61 72 20 45 4E 44 3B 0D 0A 09 09    extChar END;....
006630:  09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 45 58    .WriteLn;.....EX
006640:  49 54 3B 0D 0A 09 09 09 7C 0D 0A 09 09 4C 46 3A    IT;.....|....LF:
006650:  09 28 2A 6D 75 73 74 20 62 65 20 61 20 73 74 72    .(*must be a str
006660:  61 79 20 6C 69 6E 65 20 66 65 65 64 2C 20 74 72    ay line feed, tr
006670:  65 61 74 20 61 73 20 61 0D 0A 09 09 09 20 20 6C    eat as a.....  l
006680:  69 6E 65 20 74 65 72 6D 69 6E 61 74 6F 72 2A 29    ine terminator*)
006690:  0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09    .....WriteLn;...
0066A0:  09 09 45 58 49 54 3B 0D 0A 09 09 09 7C 0D 0A 09    ..EXIT;.....|...
0066B0:  09 54 41 42 3A 09 52 45 50 45 41 54 0D 0A 09 09    .TAB:.REPEAT....
0066C0:  09 09 49 4E 43 28 43 68 61 72 73 57 72 69 74 74    ..INC(CharsWritt
0066D0:  65 6E 29 3B 0D 0A 09 09 09 09 49 46 20 43 68 61    en);......IF Cha
0066E0:  72 73 57 72 69 74 74 65 6E 3E 3D 50 61 67 65 57    rsWritten>=PageW
0066F0:  69 64 74 68 20 54 48 45 4E 0D 0A 09 09 09 09 09    idth THEN.......
006700:  72 69 74 65 28 54 41 42 29 20 45 4E 44 3B 0D 0A    rite(TAB) END;..
006710:  09 45 4C 53 45 0D 0A 09 09 46 4F 52 20 69 3A 3D    .ELSE....FOR i:=
006720:  31 20 54 4F 20 31 30 20 44 4F 20 57 72 69 74 65    1 TO 10 DO Write
006730:  28 27 20 27 29 20 45 4E 44 3B 0D 0A 09 09 45 4E    (' ') END;....EN
006740:  44 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67    D;...WriteString
006750:  28 27 50 61 67 65 3A 20 27 29 3B 0D 0A 09 57 72    ('Page: ');...Wr
006760:  69 74 65 49 6E 74 28 50 61 67 65 4E 75 6D 62 65    iteInt(PageNumbe
006770:  72 2C 35 29 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B    r,5);...WriteLn;
006780:  0D 0A 09 45 4E 44 20 50 61 67 65 48 65 61 64 65    ...END PageHeade
006790:  72 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20    r;....PROCEDURE 
0067A0:  4E 75 6D 62 65 72 28 29 3A 43 41 52 44 49 4E 41    Number():CARDINA
0067B0:  4C 3B 0D 0A 54 59 50 45 09 43 68 61 72 53 65 74    L;..TYPE.CharSet
0067C0:  3D 53 45 54 20 4F 46 20 43 48 41 52 3B 0D 0A 56    =SET OF CHAR;..V
0067D0:  41 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    AR.i:CARDINAL;..
0067E0:  42 45 47 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09    BEGIN...i:=0;...
0067F0:  57 48 49 4C 45 20 63 68 20 49 4E 20 43 68 61 72    WHILE ch IN Char
006800:  53 65 74 7B 27 30 27 2E 2E 27 39 27 2C 42 53 2C    Set{'0'..'9',BS,
006810:  44 45 4C 7D 20 44 4F 0D 0A 09 09 49 46 20 28 63    DEL} DO....IF (c
006820:  68 3D 42 53 29 20 4F 52 20 28 63 68 3D 44 45 4C    h=BS) OR (ch=DEL
006830:  29 20 54 48 45 4E 20 69 3A 3D 69 20 44 49 56 20    ) THEN i:=i DIV 
006840:  31 30 0D 0A 09 09 45 4C 53 45 0D 0A 09 09 09 69    10....ELSE.....i
006850:  3A 3D 31 30 2A 69 2B 28 4F 52 44 28 63 68 29 2D    :=10*i+(ORD(ch)-
006860:  4F 52 44 28 27 30 27 29 29 3B 0D 0A 09 09 09 45    ORD('0'));.....E
006870:  4E 44 3B 0D 0A 09 09 52 65 61 64 28 63 68 29 3B    ND;....Read(ch);
006880:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52    ....END;...RETUR
006890:  4E 20 69 0D 0A 09 45 4E 44 20 4E 75 6D 62 65 72    N i...END Number
0068A0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 72 69    ;..PROCEDURE Pri
0068B0:  6E 74 48 65 6C 70 3B 0D 0A 42 45 47 49 4E 0D 0A    ntHelp;..BEGIN..
0068C0:  09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 45    .WriteString(' E
0068D0:  78 61 6D 70 6C 65 73 20 6F 66 20 70 6F 73 73 69    xamples of possi
0068E0:  62 6C 65 20 72 65 73 70 6F 6E 73 65 73 3A 27 29    ble responses:')
0068F0:  3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74    ;WriteLn;...Writ
006900:  57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 09 09 43    WriteLn;.......C
006910:  6F 6E 74 69 6E 75 61 74 69 6F 6E 3A 3D 54 52 55    ontinuation:=TRU
006920:  45 3B 0D 0A 09 09 09 09 09 52 45 54 55 52 4E 09    E;.......RETURN.
006930:  28 2A 6E 6F 74 65 20 74 68 61 74 20 74 61 62 20    (*note that tab 
006940:  67 65 74 73 20 70 72 6F 63 65 73 73 65 64 20 61    gets processed a
006950:  67 61 69 6E 0D 0A 09 09 09 09 09 09 20 20 61 74    gain........  at
006960:  20 73 74 61 72 74 20 6F 66 20 6E 65 78 74 20 6C     start of next l
006970:  69 6E 65 2A 29 0D 0A 09 09 09 09 09 45 4E 44 3B    ine*).......END;
006980:  0D 0A 09 09 09 09 49 46 20 45 78 70 61 6E 64 54    ......IF ExpandT
006990:  61 62 73 20 4F 52 20 4E 75 6D 62 65 72 4C 69 6E    abs OR NumberLin
0069A0:  65 73 20 54 48 45 4E 20 57 72 69 74 65 28 27 20    es THEN Write(' 
0069B0:  27 29 20 45 4E 44 3B 0D 0A 09 09 09 09 55 4E 54    ') END;......UNT
0069C0:  49 4C 20 49 41 4E 44 28 43 68 61 72 73 57 72 69    IL IAND(CharsWri
0069D0:  74 74 65 6E 2C 37 29 3D 37 3B 0D 0A 09 09 09 49    tten,7)=7;.....I
0069E0:  46 20 4E 4F 54 20 28 45 78 70 61 6E 64 54 61 62    F NOT (ExpandTab
0069F0:  73 20 4F 52 20 4E 75 6D 62 65 72 4C 69 6E 65 73    s OR NumberLines
006A00:  29 20 54 48 45 4E 20 57 72 69 74 65 28 54 41 42    ) THEN Write(TAB
006A10:  29 20 45 4E 44 3B 0D 0A 09 09 09 7C 0D 0A 09 09    ) END;.....|....
006A20:  30 78 2E 2E 31 66 78 3A 09 28 2A 6E 6F 6E 2D 70    0x..1fx:.(*non-p
006A30:  72 69 6E 74 69 6E 67 20 63 68 61 72 61 63 74 65    rinting characte
006A40:  72 73 2E 20 54 68 69 73 20 69 73 20 63 68 65 61    rs. This is chea
006A50:  74 69 6E 67 0D 0A 09 09 09 09 20 20 73 6C 69 67    ting......  slig
006A60:  68 74 6C 79 20 2D 20 73 68 6F 75 6C 64 20 65 78    htly - should ex
006A70:  63 6C 75 64 65 20 43 52 20 4C 46 20 61 6E 64 20    clude CR LF and 
006A80:  54 41 42 2A 29 0D 0A 09 09 09 49 46 20 43 68 61    TAB*).....IF Cha
006A90:  72 73 57 72 69 74 74 65 6E 3E 3D 28 50 61 67 65    rsWritten>=(Page
006AA0:  57 69 64 74 68 2D 34 29 20 54 48 45 4E 0D 0A 09    Width-4) THEN...
006AB0:  09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09    ...WriteLn;.....
006AC0:  09 43 6F 6E 74 69 6E 75 61 74 69 6F 6E 3A 3D 54    .Continuation:=T
006AD0:  52 55 45 3B 0D 0A 09 09 09 09 52 45 54 55 52 4E    RUE;......RETURN
006AE0:  0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 57    ......END;.....W
006AF0:  72 69 74 65 28 27 3C 27 29 3B 0D 0A 09 09 09 57    rite('<');.....W
006B00:  65 53 74 72 69 6E 67 28 27 20 3F 20 20 20 20 20    eString(' ?     
006B10:  20 20 20 20 20 20 2D 20 54 68 69 73 20 6D 65 73          - This mes
006B20:  73 61 67 65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D    sage');WriteLn;.
006B30:  0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20    ..WriteString(' 
006B40:  32 32 37 20 20 20 20 20 20 20 20 20 2D 20 20 6C    227         -  l
006B50:  69 73 74 20 66 72 6F 6D 20 6C 69 6E 65 20 32 32    ist from line 22
006B60:  37 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57    7');WriteLn;...W
006B70:  72 69 74 65 53 74 72 69 6E 67 28 27 20 2B 32 30    riteString(' +20
006B80:  20 6F 72 20 2D 32 30 20 20 2D 20 67 6F 20 66 6F     or -20  - go fo
006B90:  72 77 61 72 64 20 28 62 61 63 6B 29 20 32 30 20    rward (back) 20 
006BA0:  6C 69 6E 65 73 27 29 3B 0D 0A 09 57 72 69 74 65    lines');...Write
006BB0:  4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E    Ln;...WriteStrin
006BC0:  67 28 27 20 71 20 28 6F 72 20 51 29 20 20 20 20    g(' q (or Q)    
006BD0:  2D 20 67 6F 20 74 6F 20 6E 65 78 74 20 66 69 6C    - go to next fil
006BE0:  65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57    e');WriteLn;...W
006BF0:  72 69 74 65 53 74 72 69 6E 67 28 27 20 43 6F 6E    riteString(' Con
006C00:  74 72 6F 6C 20 43 20 20 20 20 20 20 20 2D 20 61    trol C       - a
006C10:  62 6F 72 74 20 72 75 6E 27 29 3B 57 72 69 74 65    bort run');Write
006C20:  4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E    Ln;...WriteStrin
006C30:  67 28 27 2F 73 74 72 69 6E 67 2F 20 20 20 20 20    g('/string/     
006C40:  2D 20 6C 69 73 74 20 66 72 6F 6D 20 6E 65 78 74    - list from next
006C50:  20 6F 63 63 75 72 65 6E 63 65 20 6F 66 20 73 74     occurence of st
006C60:  72 69 6E 67 27 29 3B 0D 0A 09 57 72 69 74 65 4C    ring');...WriteL
006C70:  6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67    n;...WriteString
006C80:  28 27 31 30 30 2F 73 74 72 69 6E 67 2F 20 20 2D    ('100/string/  -
006C90:  20 6C 69 73 74 20 66 72 6F 6D 20 66 69 72 73 74     list from first
006CA0:  20 6F 63 63 75 72 65 6E 63 65 20 61 66 74 65 72     occurence after
006CB0:  20 6C 69 6E 65 20 31 30 30 27 29 3B 0D 0A 09 57     line 100');...W
006CC0:  72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53    riteLn;...WriteS
006CD0:  74 72 69 6E 67 28 27 50 32 30 20 20 20 20 20 20    tring('P20      
006CE0:  20 20 20 20 2D 20 74 6F 67 67 6C 65 20 70 61 67        - toggle pag
006CF0:  65 20 6D 6F 64 65 20 73 65 74 20 32 30 20 6C 69    e mode set 20 li
006D00:  72 69 74 65 48 65 78 28 4F 52 44 28 63 68 29 2C    riteHex(ORD(ch),
006D10:  32 29 3B 0D 0A 09 09 09 57 72 69 74 65 28 27 3E    2);.....Write('>
006D20:  27 29 3B 0D 0A 09 09 09 43 68 61 72 73 57 72 69    ');.....CharsWri
006D30:  74 74 65 6E 3A 3D 43 68 61 72 73 57 72 69 74 74    tten:=CharsWritt
006D40:  65 6E 2B 34 3B 0D 0A 09 09 09 7C 0D 0A 09 09 45    en+4;.....|....E
006D50:  4C 53 45 09 57 72 69 74 65 28 63 68 29 3B 0D 0A    LSE.Write(ch);..
006D60:  09 09 09 49 4E 43 28 43 68 61 72 73 57 72 69 74    ...INC(CharsWrit
006D70:  74 65 6E 29 3B 0D 0A 09 09 09 45 4E 44 3B 28 2A    ten);.....END;(*
006D80:  43 41 53 45 2A 29 0D 0A 09 09 4E 65 78 74 43 68    CASE*)....NextCh
006D90:  61 72 3B 0D 0A 09 09 45 4E 44 3B 28 2A 4C 4F 4F    ar;....END;(*LOO
006DA0:  50 2A 29 0D 0A 09 45 4E 44 20 57 72 69 74 65 4C    P*)...END WriteL
006DB0:  69 6E 65 3B 09 09 0D 0A 0D 0A 28 2A 09 54 68 65    ine;......(*.The
006DC0:  20 6E 65 78 74 20 72 6F 75 74 69 6E 65 20 69 73     next routine is
006DD0:  20 75 73 65 64 20 62 79 20 74 68 65 20 73 6F 72     used by the sor
006DE0:  74 20 6D 6F 64 75 6C 65 0D 0A 09 74 6F 20 70 65    t module...to pe
006DF0:  72 66 6F 72 6D 20 6B 65 79 20 63 6F 6D 70 61 72    rform key compar
006E00:  69 73 6F 6E 73 2A 29 0D 0A 0D 0A 50 52 4F 43 45    isons*)....PROCE
006E10:  44 55 52 45 20 43 6F 6D 70 61 72 28 61 2C 62 3A    DURE Compar(a,b:
006E20:  41 44 44 52 45 53 53 29 3A 42 4F 4F 4C 45 41 4E    ADDRESS):BOOLEAN
006E30:  3B 0D 0A 56 41 52 09 70 2C 71 3A 50 46 69 6C 65    ;..VAR.p,q:PFile
006E40:  4E 61 6D 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 70    Name;..BEGIN...p
006E50:  3A 3D 50 46 69 6C 65 4E 61 6D 65 28 61 29 3B 0D    :=PFileName(a);.
006E60:  0A 09 71 3A 3D 50 46 69 6C 65 4E 61 6D 65 28 62    ..q:=PFileName(b
006E70:  29 3B 0D 0A 09 52 45 54 55 52 4E 20 70 5E 3E 71    );...RETURN p^>q
006E80:  5E 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 72 3B 0D    ^...END Compar;.
006E90:  0A 50 52 4F 43 45 44 55 52 45 20 55 73 61 67 65    .PROCEDURE Usage
006EA0:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 72 69 74 65    ;..BEGIN...Write
006EB0:  53 74 72 69 6E 67 28 27 55 73 61 67 65 20 69 73    String('Usage is
006EC0:  3A 20 20 20 43 41 54 20 66 69 6C 65 2C 66 69 6C    :   CAT file,fil
006ED0:  65 2C 2E 2E 2E 27 29 3B 57 72 69 74 65 4C 6E 3B    e,...');WriteLn;
006EE0:  0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27    ...WriteString('
006EF0:  20 20 20 20 20 20 6F 72 20 20 20 20 43 41 54 20          or    CAT 
006F00:  6E 65 73 20 70 65 72 20 70 61 67 65 27 29 3B 0D    nes per page');.
006F10:  0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69    ..WriteLn;...Wri
006F20:  74 65 53 74 72 69 6E 67 28 27 57 36 34 20 20 20    teString('W64   
006F30:  20 20 20 20 20 20 20 2D 20 74 6F 67 67 6C 65 20           - toggle 
006F40:  6C 69 6E 65 20 77 72 61 70 2C 20 73 65 74 20 36    line wrap, set 6
006F50:  34 20 63 6F 6C 75 6D 6E 73 20 70 65 72 20 6C 69    4 columns per li
006F60:  6E 65 27 29 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B    ne');...WriteLn;
006F70:  0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27    ...WriteString('
006F80:  49 20 20 20 20 20 20 20 20 20 20 20 20 2D 20 74    I            - t
006F90:  6F 67 67 6C 65 20 74 61 62 73 20 65 78 70 61 6E    oggle tabs expan
006FA0:  73 69 6F 6E 27 29 3B 0D 0A 09 57 72 69 74 65 4C    sion');...WriteL
006FB0:  6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67    n;...WriteString
006FC0:  28 27 4E 20 20 20 20 20 20 20 20 20 20 20 20 2D    ('N            -
006FD0:  20 74 6F 67 67 6C 65 20 6C 69 6E 65 20 6E 75 6D     toggle line num
006FE0:  62 65 72 69 6E 67 27 29 3B 57 72 69 74 65 4C 6E    bering');WriteLn
006FF0:  3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28    ;...WriteString(
007000:  27 20 43 6F 6D 6D 61 6E 64 3A 27 29 3B 0D 0A 09    ' Command:');...
007010:  45 4E 44 20 50 72 69 6E 74 48 65 6C 70 3B 09 0D    END PrintHelp;..
007020:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 4E 65 77    ...PROCEDURE New
007030:  56 61 6C 75 65 28 56 41 52 20 64 65 66 61 75 6C    Value(VAR defaul
007040:  74 3A 43 41 52 44 49 4E 41 4C 3B 6C 69 6D 69 74    t:CARDINAL;limit
007050:  3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 56 41 52    :CARDINAL);..VAR
007060:  09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45    .i:CARDINAL;..BE
007070:  47 49 4E 0D 0A 09 52 65 61 64 28 63 68 29 3B 0D    GIN...Read(ch);.
007080:  0A 09 69 3A 3D 4E 75 6D 62 65 72 28 29 3B 0D 0A    ..i:=Number();..
007090:  09 49 46 20 69 3E 3D 6C 69 6D 69 74 20 54 48 45    .IF i>=limit THE
0070A0:  4E 20 64 65 66 61 75 6C 74 3A 3D 69 20 45 4E 44    N default:=i END
0070B0:  0D 0A 09 45 4E 44 20 4E 65 77 56 61 6C 75 65 3B    ...END NewValue;
0070C0:  0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 45 6E 64    .....BEGIN...End
0070D0:  4F 66 46 69 6C 65 3A 3D 46 41 4C 53 45 3B 0D 0A    OfFile:=FALSE;..
0070E0:  09 4E 65 78 74 42 6C 6F 63 6B 4E 6F 3A 3D 30 3B    .NextBlockNo:=0;
0070F0:  0D 0A 09 4C 69 6E 65 4E 75 6D 62 65 72 3A 3D 32    ...LineNumber:=2
007100:  66 69 6C 65 2C 66 69 6C 65 2C 2E 2E 2E 5B 6F 70    file,file,...[op
007110:  74 69 6F 6E 73 27 29 3B 57 72 69 74 65 4C 6E 3B    tions');WriteLn;
007120:  0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27    ...WriteString('
007130:  20 77 68 65 72 65 20 66 69 6C 65 20 69 73 20 61     where file is a
007140:  20 66 69 6C 65 20 74 6F 20 6C 69 73 74 20 6F 72     file to list or
007150:  20 61 20 77 69 6C 64 20 63 61 72 64 20 66 6F 72     a wild card for
007160:  20 66 69 6C 65 73 20 74 6F 20 6C 69 73 74 27 29     files to list')
007170:  3B 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 57    ;...WriteLn;...W
007180:  72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53    riteLn;...WriteS
007190:  74 72 69 6E 67 28 27 20 54 68 65 20 6F 70 74 69    tring(' The opti
0071A0:  6F 6E 73 20 61 72 65 3A 27 29 3B 57 72 69 74 65    ons are:');Write
0071B0:  4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E    Ln;...WriteStrin
0071C0:  67 28 27 09 09 50 20 2D 20 6F 75 74 70 75 74 20    g('..P - output 
0071D0:  69 6E 20 70 61 67 65 20 6D 6F 64 65 27 29 3B 57    in page mode');W
0071E0:  72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53    riteLn;...WriteS
0071F0:  74 72 69 6E 67 28 27 09 09 4E 20 2D 20 6E 75 6D    tring('..N - num
007200:  62 65 72 20 6C 69 6E 65 73 20 6F 6E 20 6F 75 74    ber lines on out
007210:  70 75 74 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A    put');WriteLn;..
007220:  09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09    .WriteString('..
007230:  57 20 2D 20 77 72 61 70 20 6C 6F 6E 67 20 6C 69    W - wrap long li
007240:  6E 65 73 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A    nes');WriteLn;..
007250:  09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09    .WriteString('..
007260:  49 20 2D 20 65 78 70 61 6E 64 20 74 61 62 73 20    I - expand tabs 
007270:  74 6F 20 73 70 61 63 65 73 27 29 3B 57 72 69 74    to spaces');Writ
007280:  65 4C 6E 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D    eLn;...WriteLn;.
007290:  0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20    ..WriteString(' 
0072A0:  66 6F 72 20 65 78 61 6D 70 6C 65 3A 20 20 43 41    for example:  CA
0072B0:  54 20 2A 2E 44 45 46 5B 50 31 36 57 32 30 4E 27    T *.DEF[P16W20N'
0072C0:  29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 48 41 4C    );WriteLn;...HAL
0072D0:  54 0D 0A 09 45 4E 44 20 55 73 61 67 65 3B 0D 0A    T...END Usage;..
0072E0:  0D 0A 0D 0A 0D 0A 0D 0A 56 41 52 09 50 61 72 61    ........VAR.Para
0072F0:  6D 3A 41 52 52 41 59 20 5B 30 2E 2E 31 30 5D 20    m:ARRAY [0..10] 
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 41 02 00 00 00 02    ......R...A.....
007320:  06 00 46 02 00 00 00 02 06 00 42 02 00 00 00 02    ..F.......B.....
007330:  06 00 47 02 00 00 00 02 06 00 43 02 00 00 00 02    ..G.......C.....
007340:  06 00 48 02 00 00 00 02 06 00 44 02 00 00 00 02    ..H.......D.....
007350:  06 00 49 02 00 00 00 02 06 00 45 02 00 00 00 02    ..I.......E.....
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:  3B 0D 0A 09 4C 69 6E 65 4F 66 46 69 6C 65 3A 3D    ;...LineOfFile:=
007410:  31 3B 0D 0A 09 50 61 67 65 4E 75 6D 62 65 72 3A    1;...PageNumber:
007420:  3D 31 3B 0D 0A 09 43 68 61 72 50 6F 73 3A 3D 31    =1;...CharPos:=1
007430:  3B 0D 0A 09 43 68 61 72 43 6F 75 6E 74 3A 3D 30    ;...CharCount:=0
007440:  3B 0D 0A 09 48 69 67 68 57 61 74 65 72 3A 3D 30    ;...HighWater:=0
007450:  3B 0D 0A 09 4E 65 78 74 43 68 61 72 3B 09 28 2A    ;...NextChar;.(*
007460:  70 72 69 6D 65 20 6C 6F 6F 6B 2D 61 68 65 61 64    prime look-ahead
007470:  20 63 68 61 72 61 63 74 65 72 2A 29 0D 0A 09 57     character*)...W
007480:  72 69 74 65 4C 6E 3B 0D 0A 09 48 69 67 68 57 61    riteLn;...HighWa
007490:  74 65 72 3A 3D 30 3B 0D 0A 09 49 46 20 50 61 67    ter:=0;...IF Pag
0074A0:  65 4D 6F 64 65 20 54 48 45 4E 0D 0A 09 09 50 61    eMode THEN....Pa
0074B0:  67 65 48 65 61 64 65 72 3B 0D 0A 09 09 45 4E 44    geHeader;....END
0074C0:  3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 49 46 20 20    ;...LOOP....IF  
0074D0:  45 6E 64 4F 66 46 69 6C 65 20 54 48 45 4E 20 45    EndOfFile THEN E
0074E0:  58 49 54 20 45 4E 44 3B 0D 0A 09 09 57 72 69 74    XIT END;....Writ
0074F0:  65 4C 69 6E 65 3B 0D 0A 09 09 49 4E 43 28 4C 69    eLine;....INC(Li
007500:  6E 65 4E 75 6D 62 65 72 29 3B 0D 0A 0D 0A 09 09    neNumber);......
007510:  28 2A 20 63 68 65 63 6B 20 66 6F 72 20 61 6E 79    (* check for any
007520:  74 68 69 6E 67 20 74 79 70 65 73 20 61 74 20 63    thing types at c
007530:  6F 6E 73 6F 6C 65 0D 0A 09 09 20 20 20 69 66 20    onsole....   if 
007540:  63 74 72 6C 20 63 2C 20 74 68 65 20 61 62 6F 72    ctrl c, the abor
007550:  74 2C 20 69 66 20 71 20 6F 72 20 51 2A 29 0D 0A    t, if q or Q*)..
007560:  0D 0A 09 09 42 75 73 79 52 65 61 64 28 63 68 29    ....BusyRead(ch)
007570:  3B 0D 0A 09 09 49 46 20 28 50 61 67 65 4D 6F 64    ;....IF (PageMod
007580:  65 20 41 4E 44 20 28 28 4C 69 6E 65 4E 75 6D 62    e AND ((LineNumb
007590:  65 72 3E 3D 50 61 67 65 4C 65 6E 29 20 4F 52 20    er>=PageLen) OR 
0075A0:  45 6E 64 4F 66 46 69 6C 65 29 29 20 0D 0A 09 09    EndOfFile)) ....
0075B0:  20 20 20 4F 52 20 28 63 68 3C 3E 30 78 29 20 54       OR (ch<>0x) T
0075C0:  48 45 4E 0D 0A 09 09 09 49 46 20 45 6E 64 4F 66    HEN.....IF EndOf
0075D0:  46 69 6C 65 20 54 48 45 4E 20 44 45 43 28 43 68    File THEN DEC(Ch
0075E0:  61 72 50 6F 73 29 20 45 4E 44 3B 0D 0A 09 09 09    arPos) END;.....
0075F0:  45 6E 64 4F 66 46 69 6C 65 3A 3D 46 41 4C 53 45    EndOfFile:=FALSE
007600:  4C 69 6E 65 73 3A 3D 54 52 55 45 3B 0D 0A 09 09    Lines:=TRUE;....
007610:  09 09 20 20 20 20 49 4E 43 28 69 29 7C 0D 0A 09    ..    INC(i)|...
007620:  09 09 09 27 50 27 3A 50 61 67 65 4D 6F 64 65 3A    ...'P':PageMode:
007630:  3D 54 52 55 45 3B 0D 0A 09 09 09 09 20 20 20 20    =TRUE;......    
007640:  49 4E 43 28 69 29 3B 0D 0A 09 09 09 09 20 20 20    INC(i);......   
007650:  20 50 61 67 65 4C 65 6E 3A 3D 47 65 74 4E 75 6D     PageLen:=GetNum
007660:  28 43 68 61 72 73 2C 69 2C 4F 52 44 28 4C 65 6E    (Chars,i,ORD(Len
007670:  67 74 68 29 29 3B 0D 0A 09 09 09 09 20 20 20 20    gth));......    
007680:  49 46 20 50 61 67 65 4C 65 6E 3D 30 20 54 48 45    IF PageLen=0 THE
007690:  4E 20 50 61 67 65 4C 65 6E 3A 3D 32 34 20 45 4E    N PageLen:=24 EN
0076A0:  44 3B 0D 0A 0D 0A 09 09 09 09 09 28 2A 43 68 65    D;.........(*Che
0076B0:  63 6B 20 70 61 67 65 20 6C 65 6E 67 74 68 20 69    ck page length i
0076C0:  73 20 72 65 61 73 6F 6E 61 62 6C 65 2A 29 0D 0A    s reasonable*)..
0076D0:  0D 0A 09 09 09 09 20 20 20 20 49 46 20 50 61 67    ......    IF Pag
0076E0:  65 4C 65 6E 3C 31 30 20 54 48 45 4E 0D 0A 09 09    eLen<10 THEN....
0076F0:  09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09    ...WriteLn;.....
007700:  09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20    ..WriteString(' 
007710:  2A 2A 2A 20 50 61 67 65 20 6C 65 6E 67 74 68 20    *** Page length 
007720:  74 6F 6F 20 73 68 6F 72 74 20 2A 2A 2A 27 29 3B    too short ***');
007730:  0D 0A 09 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D    .......WriteLn;.
007740:  0A 09 09 09 09 09 55 73 61 67 65 0D 0A 09 09 09    ......Usage.....
007750:  09 09 45 4E 44 0D 0A 09 09 09 09 20 20 20 20 7C    ..END......    |
007760:  0D 0A 09 09 09 09 45 4C 53 45 0D 0A 09 09 09 09    ......ELSE......
007770:  20 20 20 20 55 73 61 67 65 0D 0A 09 09 09 09 20        Usage...... 
007780:  20 20 20 45 4E 44 3B 28 2A 43 41 53 45 2A 29 0D       END;(*CASE*).
007790:  0A 09 09 09 09 45 4E 44 3B 28 2A 57 48 49 4C 45    .....END;(*WHILE
0077A0:  2A 29 0D 0A 09 09 09 45 4E 44 3B 20 28 2A 57 49    *).....END; (*WI
0077B0:  54 48 2A 29 0D 0A 09 09 44 45 43 28 43 6F 75 6E    TH*)....DEC(Coun
0077C0:  74 29 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 49 46    t);....END; (*IF
0077D0:  20 6F 70 74 69 6F 6E 2A 29 0D 0A 0D 0A 09 49 46     option*).....IF
0077E0:  20 43 6F 75 6E 74 3D 30 20 54 48 45 4E 20 55 73     Count=0 THEN Us
0077F0:  61 67 65 20 45 4E 44 3B 0D 0A 09 49 46 20 4E 75    age END;...IF Nu
007800:  3B 0D 0A 09 09 09 50 61 67 65 4D 6F 64 65 3A 3D    ;.....PageMode:=
007810:  54 52 55 45 3B 0D 0A 09 09 09 57 72 69 74 65 53    TRUE;.....WriteS
007820:  74 72 69 6E 67 28 27 20 43 6F 6D 6D 61 6E 64 20    tring(' Command 
007830:  3A 27 29 3B 0D 0A 09 09 09 49 46 20 63 68 3D 30    :');.....IF ch=0
007840:  78 20 54 48 45 4E 20 52 65 61 64 28 63 68 29 20    x THEN Read(ch) 
007850:  0D 0A 09 09 09 45 4C 53 45 20 09 57 72 69 74 65    .....ELSE .Write
007860:  28 63 68 29 3B 0D 0A 09 09 09 09 43 6C 65 61 72    (ch);......Clear
007870:  43 68 61 72 42 75 66 66 65 72 0D 0A 09 09 09 09    CharBuffer......
007880:  45 4E 44 3B 0D 0A 09 09 09 4C 4F 4F 50 0D 0A 09    END;.....LOOP...
007890:  09 09 20 20 20 20 43 41 53 45 20 43 41 50 28 63    ..    CASE CAP(c
0078A0:  68 29 20 4F 46 0D 0A 09 09 09 09 27 50 27 3A 50    h) OF......'P':P
0078B0:  61 67 65 4D 6F 64 65 3A 3D 4E 4F 54 20 50 61 67    ageMode:=NOT Pag
0078C0:  65 4D 6F 64 65 3B 0D 0A 09 09 09 09 20 20 20 20    eMode;......    
0078D0:  4E 65 77 56 61 6C 75 65 28 50 61 67 65 4C 65 6E    NewValue(PageLen
0078E0:  2C 31 32 29 7C 0D 0A 09 09 09 09 27 4E 27 3A 4E    ,12)|......'N':N
0078F0:  75 6D 62 65 72 4C 69 6E 65 73 3A 3D 4E 4F 54 20    umberLines:=NOT 
007900:  4E 75 6D 62 65 72 4C 69 6E 65 73 3B 52 65 61 64    NumberLines;Read
007910:  28 63 68 29 7C 0D 0A 09 09 09 09 27 49 27 3A 45    (ch)|......'I':E
007920:  78 70 61 6E 64 54 61 62 73 3A 3D 4E 4F 54 20 45    xpandTabs:=NOT E
007930:  78 70 61 6E 64 54 61 62 73 3B 52 65 61 64 28 63    xpandTabs;Read(c
007940:  68 29 7C 0D 0A 09 09 09 09 27 57 27 3A 4C 69 6E    h)|......'W':Lin
007950:  65 57 72 61 70 3A 3D 4E 4F 54 20 4C 69 6E 65 57    eWrap:=NOT LineW
007960:  72 61 70 3B 0D 0A 09 09 09 09 20 20 20 20 4E 65    rap;......    Ne
007970:  77 56 61 6C 75 65 28 50 61 67 65 57 69 64 74 68    wValue(PageWidth
007980:  2C 34 30 29 7C 0D 0A 09 09 09 09 27 3F 27 3A 50    ,40)|......'?':P
007990:  72 69 6E 74 48 65 6C 70 3B 52 65 61 64 28 63 68    rintHelp;Read(ch
0079A0:  29 7C 0D 0A 09 09 09 09 27 2B 27 3A 52 65 61 64    )|......'+':Read
0079B0:  28 63 68 29 3B 0D 0A 09 09 09 20 09 20 20 20 20    (ch);..... .    
0079C0:  4C 69 6E 65 4F 66 46 69 6C 65 3A 3D 4C 69 6E 65    LineOfFile:=Line
0079D0:  4F 66 46 69 6C 65 2B 4E 75 6D 62 65 72 28 29 0D    OfFile+Number().
0079E0:  0A 09 09 09 09 20 20 20 20 52 65 70 6F 73 69 74    .....    Reposit
0079F0:  69 6F 6E 46 69 6C 65 7C 0D 0A 09 09 09 09 27 2D    ionFile|......'-
007A00:  6D 62 65 72 4C 69 6E 65 73 20 54 48 45 4E 20 50    mberLines THEN P
007A10:  61 67 65 57 69 64 74 68 3A 3D 50 61 67 65 57 69    ageWidth:=PageWi
007A20:  64 74 68 2D 36 20 45 4E 44 3B 0D 0A 0D 0A 09 46    dth-6 END;.....F
007A30:  4F 52 20 69 3A 3D 30 20 54 4F 20 43 41 52 44 49    OR i:=0 TO CARDI
007A40:  4E 41 4C 28 43 6F 75 6E 74 2D 31 29 20 44 4F 0D    NAL(Count-1) DO.
007A50:  0A 09 09 47 65 74 4E 61 6D 65 73 28 50 61 72 61    ...GetNames(Para
007A60:  6D 5B 69 5D 5E 2E 43 68 61 72 73 2C 4E 61 6D 65    m[i]^.Chars,Name
007A70:  73 2C 4E 61 6D 65 43 6F 75 6E 74 29 3B 0D 0A 09    s,NameCount);...
007A80:  09 49 46 20 4E 61 6D 65 43 6F 75 6E 74 3E 31 20    .IF NameCount>1 
007A90:  54 48 45 4E 0D 0A 09 09 09 53 6F 72 74 52 65 63    THEN.....SortRec
007AA0:  6F 72 64 73 28 41 44 52 28 4E 61 6D 65 73 29 2C    ords(ADR(Names),
007AB0:  43 41 52 44 49 4E 41 4C 28 4E 61 6D 65 43 6F 75    CARDINAL(NameCou
007AC0:  6E 74 29 2C 0D 0A 09 09 09 09 54 53 49 5A 45 28    nt),......TSIZE(
007AD0:  46 69 6C 65 4E 61 6D 65 29 2C 43 6F 6D 70 61 72    FileName),Compar
007AE0:  29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 46    );.....END;....F
007AF0:  4F 52 20 6A 3A 3D 30 20 54 4F 20 4E 61 6D 65 43    OR j:=0 TO NameC
007B00:  6F 75 6E 74 2D 31 20 44 4F 0D 0A 09 09 09 4C 6F    ount-1 DO.....Lo
007B10:  6F 6B 75 70 28 49 6E 66 2C 4E 61 6D 65 73 5B 6A    okup(Inf,Names[j
007B20:  5D 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 09 49 46    ],reply);.....IF
007B30:  20 72 65 70 6C 79 3C 30 20 54 48 45 4E 0D 0A 09     reply<0 THEN...
007B40:  09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27    ...WriteString('
007B50:  20 43 6F 75 6C 64 20 6E 6F 74 20 6F 70 65 6E 20     Could not open 
007B60:  27 29 3B 0D 0A 09 09 09 09 57 72 69 74 65 53 74    ');......WriteSt
007B70:  72 69 6E 67 28 4E 61 6D 65 73 5B 6A 5D 29 3B 0D    ring(Names[j]);.
007B80:  0A 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09    .....WriteLn;...
007B90:  09 09 45 4C 53 45 0D 0A 09 09 09 09 4F 75 74 70    ..ELSE......Outp
007BA0:  75 74 46 69 6C 65 28 4E 61 6D 65 73 5B 6A 5D 29    utFile(Names[j])
007BB0:  3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09    ;......END;.....
007BC0:  45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45    END;....END;...E
007BD0:  4E 44 20 4C 69 73 74 69 74 3B 09 09 09 0D 0A 42    ND Listit;.....B
007BE0:  45 47 49 4E 0D 0A 09 4C 69 73 74 69 74 3B 0D 0A    EGIN...Listit;..
007BF0:  09 45 4E 44 20 43 61 74 2E 0D 0A 1A 1A 1A 1A 1A    .END Cat........
007C00:  27 3A 52 65 61 64 28 63 68 29 3B 0D 0A 09 09 09    ':Read(ch);.....
007C10:  09 20 20 20 20 69 3A 3D 4E 75 6D 62 65 72 28 29    .    i:=Number()
007C20:  3B 0D 0A 09 09 09 09 20 20 20 20 49 46 20 69 3E    ;......    IF i>
007C30:  4C 69 6E 65 4F 66 46 69 6C 65 20 54 48 45 4E 20    LineOfFile THEN 
007C40:  4C 69 6E 65 4F 66 46 69 6C 65 3A 3D 31 0D 0A 09    LineOfFile:=1...
007C50:  09 09 09 20 20 20 20 45 4C 53 45 20 4C 69 6E 65    ...    ELSE Line
007C60:  4F 66 46 69 6C 65 3A 3D 4C 69 6E 65 4F 66 46 69    OfFile:=LineOfFi
007C70:  6C 65 2D 69 20 45 4E 44 3B 0D 0A 09 09 09 09 20    le-i END;...... 
007C80:  20 20 20 52 65 70 6F 73 69 74 69 6F 6E 46 69 6C       RepositionFil
007C90:  65 0D 0A 09 09 09 09 20 20 20 20 7C 0D 0A 09 09    e......    |....
007CA0:  09 09 27 30 27 2E 2E 27 39 27 3A 4C 69 6E 65 4F    ..'0'..'9':LineO
007CB0:  66 46 69 6C 65 3A 3D 4E 75 6D 62 65 72 28 29 3B    fFile:=Number();
007CC0:  0D 0A 09 09 09 09 09 20 52 65 70 6F 73 69 74 69    ....... Repositi
007CD0:  6F 6E 46 69 6C 65 7C 0D 0A 09 09 09 09 27 21 27    onFile|......'!'
007CE0:  2E 2E 27 2A 27 2C 27 2C 27 2C 27 2E 27 2C 27 2F    ..'*',',','.','/
007CF0:  27 2C 27 3A 27 2E 2E 27 40 27 2C 27 7B 27 2E 2E    ',':'..'@','{'..
007D00:  27 7E 27 2C 0D 0A 09 09 09 09 27 5B 27 2E 2E 27    '~',......'['..'
007D10:  60 27 3A 0D 0A 09 09 09 09 09 53 65 61 72 63 68    `':.......Search
007D20:  28 63 68 29 3B 52 65 61 64 28 63 68 29 7C 0D 0A    (ch);Read(ch)|..
007D30:  09 09 09 09 0D 0A 09 09 09 09 30 33 78 3A 0D 0A    ..........03x:..
007D40:  09 09 09 09 09 48 41 4C 54 7C 0D 0A 09 09 09 09    .....HALT|......
007D50:  45 4C 53 45 20 45 58 49 54 0D 0A 09 09 09 09 45    ELSE EXIT......E
007D60:  4E 44 28 2A 43 41 53 45 2A 29 3B 0D 0A 09 09 09    ND(*CASE*);.....
007D70:  20 20 20 20 45 4E 44 3B 28 2A 4C 4F 4F 50 2A 29        END;(*LOOP*)
007D80:  0D 0A 09 09 09 49 46 20 43 41 50 28 63 68 29 3D    .....IF CAP(ch)=
007D90:  27 51 27 20 54 48 45 4E 20 45 58 49 54 20 45 4E    'Q' THEN EXIT EN
007DA0:  44 3B 0D 0A 09 09 09 49 4E 43 28 50 61 67 65 4E    D;.....INC(PageN
007DB0:  75 6D 62 65 72 29 3B 0D 0A 09 09 09 50 61 67 65    umber);.....Page
007DC0:  48 65 61 64 65 72 3B 0D 0A 09 09 09 4C 69 6E 65    Header;.....Line
007DD0:  4E 75 6D 62 65 72 3A 3D 32 3B 0D 0A 09 09 09 45    Number:=2;.....E
007DE0:  4E 44 3B 0D 0A 0D 0A 09 09 45 4E 44 3B 0D 0A 09    ND;......END;...
007DF0:  45 4E 44 20 4F 75 74 70 75 74 46 69 6C 65 3B 0D    END OutputFile;.
007E00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007E10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007E20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007E30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007E40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007E50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007E60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007E70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007E80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007E90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007EA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007EB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007EC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007ED0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007EE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007EF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007F00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007F10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007F20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007F30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007F40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007F50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007F60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007F70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007F80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007F90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007FA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007FB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007FC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007FD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007FE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007FF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008000:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 4C 69 73    ...PROCEDURE Lis
008010:  74 69 74 3B 0D 0A 56 41 52 09 69 3A 43 41 52 44    tit;..VAR.i:CARD
008020:  49 4E 41 4C 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    INAL;....PROCEDU
008030:  52 45 20 47 65 74 4E 75 6D 28 43 68 61 72 73 3A    RE GetNum(Chars:
008040:  41 52 52 41 59 20 4F 46 20 43 48 41 52 3B 56 41    ARRAY OF CHAR;VA
008050:  52 20 50 6F 73 3A 43 41 52 44 49 4E 41 4C 3B 4C    R Pos:CARDINAL;L
008060:  65 6E 3A 43 41 52 44 49 4E 41 4C 29 3A 43 41 52    en:CARDINAL):CAR
008070:  44 49 4E 41 4C 3B 0D 0A 0D 0A 28 2A 09 47 65 74    DINAL;....(*.Get
008080:  20 61 20 6E 75 6D 62 65 72 20 66 72 6F 6D 20 61     a number from a
008090:  20 70 61 72 61 6D 65 74 65 72 20 69 6E 20 74 68     parameter in th
0080A0:  65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 2A 29    e command line*)
0080B0:  0D 0A 54 59 50 45 09 43 68 61 72 53 65 74 3D 53    ..TYPE.CharSet=S
0080C0:  45 54 20 4F 46 20 43 48 41 52 3B 0D 0A 56 41 52    ET OF CHAR;..VAR
0080D0:  09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45    .i:CARDINAL;..BE
0080E0:  47 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 57 48    GIN...i:=0;...WH
0080F0:  49 4C 45 20 28 50 6F 73 3C 4C 65 6E 29 20 41 4E    ILE (Pos<Len) AN
008100:  44 20 28 43 68 61 72 73 5B 50 6F 73 5D 20 49 4E    D (Chars[Pos] IN
008110:  20 43 68 61 72 53 65 74 7B 27 30 27 2E 2E 27 39     CharSet{'0'..'9
008120:  27 7D 29 20 44 4F 0D 0A 09 09 69 3A 3D 31 30 2A    '}) DO....i:=10*
008130:  69 2B 4F 52 44 28 43 68 61 72 73 5B 50 6F 73 5D    i+ORD(Chars[Pos]
008140:  29 2D 4F 52 44 28 27 30 27 29 3B 0D 0A 09 09 49    )-ORD('0');....I
008150:  4E 43 28 50 6F 73 29 3B 0D 0A 09 09 45 4E 44 3B    NC(Pos);....END;
008160:  09 0D 0A 09 52 45 54 55 52 4E 20 69 0D 0A 09 45    ....RETURN i...E
008170:  4E 44 20 47 65 74 4E 75 6D 3B 0D 0A 42 45 47 49    ND GetNum;..BEGI
008180:  4E 0D 0A 0D 0A 09 47 65 74 50 61 72 61 6D 73 28    N.....GetParams(
008190:  50 61 72 61 6D 2C 43 6F 75 6E 74 29 3B 0D 0A 20    Param,Count);.. 
0081A0:  20 20 20 20 20 20 20 43 6F 75 6E 74 65 72 20 3A           Counter :
0081B0:  3D 20 31 3B 0D 0A 20 20 20 20 20 20 20 20 49 46    = 1;..        IF
0081C0:  20 43 6F 75 6E 74 3D 30 20 54 48 45 4E 20 55 73     Count=0 THEN Us
0081D0:  61 67 65 20 45 4E 44 3B 0D 0A 0D 0A 09 49 46 20    age END;.....IF 
0081E0:  50 61 72 61 6D 5B 43 6F 75 6E 74 2D 31 5D 5E 2E    Param[Count-1]^.
0081F0:  43 6C 61 73 73 3D 6F 70 74 69 6F 6E 20 54 48 45    Class=option THE
008200:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
008210:  45 20 43 6F 6D 6D 61 6E 64 3B 0D 0A 0D 0A 28 2A    E Command;....(*
008220:  09 43 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 70 72    .Command line pr
008230:  6F 63 65 73 73 6F 72 2A 29 0D 0A 46 52 4F 4D 20    ocessor*)..FROM 
008240:  53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 42 59    SYSTEM IMPORT BY
008250:  54 45 3B 0D 0A 0D 0A 54 59 50 45 0D 0A 09 50 61    TE;....TYPE...Pa
008260:  72 63 6C 61 73 73 3D 28 6E 61 6D 65 2C 73 74 72    rclass=(name,str
008270:  69 6E 67 2C 6F 70 74 69 6F 6E 29 3B 0D 0A 0D 0A    ing,option);....
008280:  09 28 2A 09 50 61 72 63 6C 61 73 73 20 69 73 20    .(*.Parclass is 
008290:  61 20 62 65 73 74 20 67 75 65 73 73 20 73 74 79    a best guess sty
0082A0:  6C 65 20 6F 66 20 74 68 69 6E 67 3A 0D 0A 09 09    le of thing:....
0082B0:  49 66 20 74 68 65 20 70 61 72 61 6D 65 74 65 72    If the parameter
0082C0:  20 69 73 20 69 6E 20 71 75 6F 74 65 73 20 69 74     is in quotes it
0082D0:  20 69 73 20 61 20 73 74 72 69 6E 67 0D 0A 09 09     is a string....
0082E0:  49 66 20 69 74 20 66 6F 6C 6C 6F 77 73 20 61 20    If it follows a 
0082F0:  27 5B 27 20 6F 72 20 61 20 27 2F 27 20 69 74 20    '[' or a '/' it 
008300:  69 73 20 61 6E 20 6F 70 74 69 6F 6E 0D 0A 09 09    is an option....
008310:  28 74 68 65 72 65 20 69 73 20 6F 6E 6C 79 20 65    (there is only e
008320:  76 65 72 20 6F 6E 65 20 6F 70 74 69 6F 6E 20 70    ver one option p
008330:  61 72 61 6D 65 74 65 72 2E 20 49 74 20 69 73 0D    arameter. It is.
008340:  0A 09 09 61 6C 77 61 79 73 20 6C 61 73 74 2C 20    ...always last, 
008350:  61 6E 64 20 69 74 20 63 6F 6E 74 61 69 6E 73 20    and it contains 
008360:  65 76 65 72 79 74 68 69 6E 67 20 66 72 6F 6D 20    everything from 
008370:  74 68 65 20 2F 20 6F 72 20 0D 0A 09 09 5B 20 6F    the / or ....[ o
008380:  6E 77 61 72 64 73 0D 0A 09 09 45 76 65 72 79 74    nwards....Everyt
008390:  68 69 6E 67 20 65 6C 73 65 20 69 73 20 61 20 6E    hing else is a n
0083A0:  61 6D 65 20 28 6E 6F 20 76 61 6C 69 64 69 74 79    ame (no validity
0083B0:  20 63 68 65 63 6B 69 6E 67 20 70 65 72 66 6F 72     checking perfor
0083C0:  6D 65 64 2A 29 0D 0A 0D 0A 09 54 65 78 74 3D 52    med*).....Text=R
0083D0:  45 43 4F 52 44 0D 0A 09 09 4C 65 6E 67 74 68 3A    ECORD....Length:
0083E0:  42 59 54 45 3B 09 09 28 2A 72 65 74 75 72 6E 73    BYTE;..(*returns
0083F0:  20 62 79 74 65 73 20 69 6E 20 70 61 72 61 6D 65     bytes in parame
008400:  4E 0D 0A 09 09 57 49 54 48 20 50 61 72 61 6D 5B    N....WITH Param[
008410:  43 6F 75 6E 74 2D 31 5D 5E 20 44 4F 0D 0A 0D 0A    Count-1]^ DO....
008420:  09 09 09 28 2A 09 52 65 63 6F 67 6E 69 73 65 20    ...(*.Recognise 
008430:  66 6C 61 67 73 2A 29 0D 0A 0D 0A 09 09 09 69 3A    flags*).......i:
008440:  3D 30 3B 0D 0A 09 09 09 57 48 49 4C 45 20 69 3C    =0;.....WHILE i<
008450:  43 41 52 44 49 4E 41 4C 28 4C 65 6E 67 74 68 29    CARDINAL(Length)
008460:  20 44 4F 0D 0A 09 09 09 09 43 41 53 45 20 43 68     DO......CASE Ch
008470:  61 72 73 5B 69 5D 20 4F 46 0D 0A 09 09 09 09 27    ars[i] OF......'
008480:  49 27 3A 45 78 70 61 6E 64 54 61 62 73 3A 3D 54    I':ExpandTabs:=T
008490:  52 55 45 3B 0D 0A 09 09 09 09 20 20 20 20 49 4E    RUE;......    IN
0084A0:  43 28 69 29 7C 0D 0A 09 09 09 09 27 57 27 3A 4C    C(i)|......'W':L
0084B0:  69 6E 65 57 72 61 70 3A 3D 54 52 55 45 3B 0D 0A    ineWrap:=TRUE;..
0084C0:  09 09 09 09 20 20 20 20 49 4E 43 28 69 29 3B 0D    ....    INC(i);.
0084D0:  0A 09 09 09 09 20 20 20 20 50 61 67 65 57 69 64    .....    PageWid
0084E0:  74 68 3A 3D 47 65 74 4E 75 6D 28 43 68 61 72 73    th:=GetNum(Chars
0084F0:  2C 69 2C 4F 52 44 28 4C 65 6E 67 74 68 29 29 3B    ,i,ORD(Length));
008500:  0D 0A 09 09 09 09 20 20 20 20 49 46 20 50 61 67    ......    IF Pag
008510:  65 57 69 64 74 68 3D 30 20 54 48 45 4E 20 50 61    eWidth=0 THEN Pa
008520:  67 65 57 69 64 74 68 3A 3D 38 30 20 45 4E 44 3B    geWidth:=80 END;
008530:  0D 0A 0D 0A 09 09 09 09 09 28 2A 43 68 65 63 6B    .........(*Check
008540:  20 70 61 67 65 20 77 69 64 74 68 20 69 73 20 72     page width is r
008550:  65 61 73 6F 6E 61 62 6C 65 2A 29 0D 0A 0D 0A 09    easonable*).....
008560:  09 09 09 20 20 20 20 49 46 20 50 61 67 65 57 69    ...    IF PageWi
008570:  64 74 68 3C 33 32 20 54 48 45 4E 0D 0A 09 09 09    dth<32 THEN.....
008580:  09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 09    ..WriteLn;......
008590:  09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 2A    .WriteString(' *
0085A0:  2A 2A 20 50 61 67 65 20 77 69 64 74 68 20 74 6F    ** Page width to
0085B0:  6F 20 6E 61 72 72 6F 77 20 2A 2A 2A 27 29 3B 0D    o narrow ***');.
0085C0:  0A 09 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A    ......WriteLn;..
0085D0:  09 09 09 09 09 55 73 61 67 65 3B 0D 0A 09 09 09    .....Usage;.....
0085E0:  09 09 45 4E 44 3B 0D 0A 09 09 09 09 20 20 20 7C    ..END;......   |
0085F0:  0D 0A 09 09 09 09 27 4E 27 3A 4E 75 6D 62 65 72    ......'N':Number
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 41 02 00 00 00 02    ......R...A.....
008620:  07 00 46 02 00 00 00 02 07 00 42 02 00 00 00 02    ..F.......B.....
008630:  07 00 47 02 00 00 00 02 07 00 43 02 00 00 00 02    ..G.......C.....
008640:  07 00 48 02 00 00 00 02 07 00 44 02 00 00 00 02    ..H.......D.....
008650:  07 00 49 02 00 00 00 02 07 00 45 02 00 00 00 02    ..I.......E.....
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:  74 65 72 2A 29 0D 0A 09 09 54 65 72 6D 69 6E 61    ter*)....Termina
008710:  74 6F 72 3A 43 48 41 52 3B 09 28 2A 72 65 74 75    tor:CHAR;.(*retu
008720:  72 6E 73 20 6E 65 78 74 20 63 68 61 72 61 63 74    rns next charact
008730:  65 72 2C 20 6F 72 0D 0A 09 09 09 09 09 64 65 6C    er, or.......del
008740:  69 6D 69 74 65 72 20 66 6F 72 20 73 74 72 69 6E    imiter for strin
008750:  67 73 2A 29 09 0D 0A 09 09 43 6C 61 73 73 3A 50    gs*).....Class:P
008760:  61 72 63 6C 61 73 73 3B 09 09 28 2A 63 6C 61 73    arclass;..(*clas
008770:  73 20 6F 66 20 70 61 72 61 6D 65 74 65 72 2A 29    s of parameter*)
008780:  0D 0A 09 09 43 41 53 45 20 3A 42 4F 4F 4C 45 41    ....CASE :BOOLEA
008790:  4E 20 4F 46 0D 0A 09 09 20 20 20 20 46 41 4C 53    N OF....    FALS
0087A0:  45 3A 46 69 6C 65 50 6F 73 3A 43 41 52 44 49 4E    E:FilePos:CARDIN
0087B0:  41 4C 3B 45 72 72 6F 72 4E 6F 3A 43 41 52 44 49    AL;ErrorNo:CARDI
0087C0:  4E 41 4C 7C 0D 0A 09 09 20 20 20 20 54 52 55 45    NAL|....    TRUE
0087D0:  3A 43 68 61 72 73 3A 41 52 52 41 59 5B 30 2E 2E    :Chars:ARRAY[0..
0087E0:  31 32 37 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09    127] OF CHAR;...
0087F0:  09 20 20 20 20 45 4E 44 0D 0A 09 09 09 09 09 28    .    END.......(
008800:  2A 70 61 72 61 6D 65 74 65 72 20 2D 20 61 6C 77    *parameter - alw
008810:  61 79 73 20 74 65 72 6D 69 6E 61 74 65 64 20 62    ays terminated b
008820:  79 0D 0A 09 09 09 09 09 20 20 61 20 7A 65 72 6F    y.......  a zero
008830:  20 62 79 74 65 2C 20 62 75 74 20 74 68 61 74 20     byte, but that 
008840:  62 79 74 65 20 69 73 20 6E 6F 74 0D 0A 09 09 09    byte is not.....
008850:  09 09 20 20 69 6E 63 6C 75 64 65 64 20 69 6E 20    ..  included in 
008860:  74 68 65 20 6C 65 6E 67 74 68 2A 29 0D 0A 09 09    the length*)....
008870:  45 4E 44 3B 0D 0A 0D 0A 09 50 61 72 61 6D 65 74    END;.....Paramet
008880:  65 72 3D 50 4F 49 4E 54 45 52 20 54 4F 20 54 65    er=POINTER TO Te
008890:  78 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47    xt;..PROCEDURE G
0088A0:  65 74 50 61 72 61 6D 73 28 56 41 52 20 70 3A 41    etParams(VAR p:A
0088B0:  52 52 41 59 20 4F 46 20 50 61 72 61 6D 65 74 65    RRAY OF Paramete
0088C0:  72 3B 56 41 52 20 63 6F 75 6E 74 3A 49 4E 54 45    r;VAR count:INTE
0088D0:  47 45 52 29 3B 0D 0A 28 2A 09 63 72 61 63 6B 20    GER);..(*.crack 
0088E0:  74 68 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65    the command line
0088F0:  2A 29 0D 0A 56 41 52 09 43 6F 6D 6D 4C 65 6E 67    *)..VAR.CommLeng
008900:  28 6A 29 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09    (j)......END;...
008910:  09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 09 42 75    ..INC(i);.....Bu
008920:  69 6C 64 28 6A 2D 69 2C 43 6F 6D 6D 54 65 78 74    ild(j-i,CommText
008930:  5B 69 2D 31 5D 2C 73 74 72 69 6E 67 29 3B 0D 0A    [i-1],string);..
008940:  09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 7C    ...INC(j);.....|
008950:  0D 0A 09 09 45 4C 53 45 09 6A 3A 3D 69 2B 31 3B    ....ELSE.j:=i+1;
008960:  0D 0A 09 09 09 57 48 49 4C 45 20 09 09 28 43 6F    .....WHILE ..(Co
008970:  6D 6D 54 65 78 74 5B 6A 5D 3C 3E 27 20 27 29 20    mmText[j]<>' ') 
008980:  0D 0A 09 09 09 09 41 4E 44 09 28 43 6F 6D 6D 54    ......AND.(CommT
008990:  65 78 74 5B 6A 5D 3C 3E 27 2C 27 29 20 0D 0A 09    ext[j]<>',') ...
0089A0:  09 09 09 41 4E 44 09 28 43 6F 6D 6D 54 65 78 74    ...AND.(CommText
0089B0:  5B 6A 5D 3C 3E 27 5B 27 29 0D 0A 09 09 09 09 41    [j]<>'[')......A
0089C0:  4E 44 09 28 43 6F 6D 6D 54 65 78 74 5B 6A 5D 3C    ND.(CommText[j]<
0089D0:  3E 27 2F 27 29 0D 0A 09 09 09 09 41 4E 44 20 09    >'/')......AND .
0089E0:  28 6A 3C 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C    (j<INTEGER(CommL
0089F0:  65 6E 67 74 68 29 29 20 44 4F 0D 0A 09 09 09 09    ength)) DO......
008A00:  49 4E 43 28 6A 29 0D 0A 09 09 09 09 45 4E 44 3B    INC(j)......END;
008A10:  0D 0A 09 09 09 42 75 69 6C 64 28 6A 2D 69 2C 43    .....Build(j-i,C
008A20:  6F 6D 6D 54 65 78 74 5B 6A 5D 2C 6E 61 6D 65 29    ommText[j],name)
008A30:  3B 0D 0A 09 09 09 45 4E 44 3B 28 2A 63 61 73 65    ;.....END;(*case
008A40:  2A 29 0D 0A 09 09 0D 0A 09 09 69 3A 3D 6A 3B 0D    *)........i:=j;.
008A50:  0A 09 09 49 46 20 43 6F 6D 6D 54 65 78 74 5B 69    ...IF CommText[i
008A60:  5D 3D 27 2C 27 20 54 48 45 4E 20 49 4E 43 28 69    ]=',' THEN INC(i
008A70:  29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28    ) END;....END; (
008A80:  2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 47 65    *LOOP*)...END Ge
008A90:  74 50 61 72 61 6D 73 3B 0D 0A 09 09 09 09 0D 0A    tParams;........
008AA0:  45 4E 44 20 43 6F 6D 6D 61 6E 64 2E 0D 0A 1A 1A    END Command.....
008AB0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008AC0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008AD0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008AE0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008AF0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008B00:  74 68 5B 38 30 68 5D 3A 42 59 54 45 3B 0D 0A 09    th[80h]:BYTE;...
008B10:  43 6F 6D 6D 54 65 78 74 5B 38 31 68 5D 3A 41 52    CommText[81h]:AR
008B20:  52 41 59 5B 30 2E 2E 31 32 36 5D 20 4F 46 20 43    RAY[0..126] OF C
008B30:  48 41 52 3B 20 0D 0A 45 4E 44 20 43 6F 6D 6D 61    HAR; ..END Comma
008B40:  6E 64 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    nd..............
008B50:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008B60:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008B70:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008B80:  64 20 62 79 20 74 68 65 20 49 4F 20 74 69 6D 65    d by the IO time
008B90:  20 61 6E 79 77 61 79 2A 29 0D 0A 56 41 52 09 73     anyway*)..VAR.s
008BA0:  74 72 69 6E 67 3A 4D 61 74 63 68 53 74 72 69 6E    tring:MatchStrin
008BB0:  67 3B 0D 0A 09 6C 65 6E 3A 43 41 52 44 49 4E 41    g;...len:CARDINA
008BC0:  4C 3B 0D 0A 09 6E 63 68 3A 43 48 41 52 3B 0D 0A    L;...nch:CHAR;..
008BD0:  09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    .i,j:CARDINAL;..
008BE0:  09 50 61 72 74 69 61 6C 50 6F 73 3A 41 52 52 41    .PartialPos:ARRA
008BF0:  59 5B 31 2E 2E 36 30 5D 20 4F 46 20 43 41 52 44    Y[1..60] OF CARD
008C00:  49 4E 41 4C 3B 0D 0A 09 50 61 72 74 69 61 6C 73    INAL;...Partials
008C10:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49    :CARDINAL;..BEGI
008C20:  4E 0D 0A 09 6C 65 6E 3A 3D 30 3B 0D 0A 09 4C 4F    N...len:=0;...LO
008C30:  4F 50 0D 0A 09 09 52 65 61 64 28 6E 63 68 29 3B    OP....Read(nch);
008C40:  0D 0A 09 09 49 46 20 28 6E 63 68 3D 42 53 29 20    ....IF (nch=BS) 
008C50:  4F 52 20 28 6E 63 68 3D 44 45 4C 29 20 54 48 45    OR (nch=DEL) THE
008C60:  4E 0D 0A 09 09 09 49 46 20 6C 65 6E 3E 30 20 54    N.....IF len>0 T
008C70:  48 45 4E 20 44 45 43 28 6C 65 6E 29 20 45 4E 44    HEN DEC(len) END
008C80:  3B 0D 0A 09 09 45 4C 53 49 46 20 28 6E 63 68 3D    ;....ELSIF (nch=
008C90:  44 65 6C 69 6D 69 74 65 72 29 20 4F 52 20 28 6C    Delimiter) OR (l
008CA0:  65 6E 3D 48 49 47 48 28 73 74 72 69 6E 67 29 29    en=HIGH(string))
008CB0:  0D 0A 09 09 09 4F 52 20 28 6E 63 68 3D 43 52 29    .....OR (nch=CR)
008CC0:  20 4F 52 20 28 6E 63 68 3D 4C 46 29 20 54 48 45     OR (nch=LF) THE
008CD0:  4E 0D 0A 09 09 09 45 58 49 54 0D 0A 09 09 45 4C    N.....EXIT....EL
008CE0:  53 45 0D 0A 09 09 09 49 4E 43 28 6C 65 6E 29 3B    SE.....INC(len);
008CF0:  0D 0A 09 09 09 73 74 72 69 6E 67 5B 6C 65 6E 5D    .....string[len]
008D00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008D10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008D20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008D30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008D40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008D50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008D60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008D70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008D80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008D90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008DA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008DB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008DC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008DD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008DE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008DF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008E00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008E10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008E20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008E30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008E40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008E50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008E60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008E70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008E80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008E90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008EA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008EB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008EC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008ED0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008EE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008EF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008F00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008F10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008F20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008F30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008F40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008F50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008F60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008F70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008F80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008F90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008FA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008FB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008FC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008FD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008FE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008FF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0090A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0090B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0090C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0090D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0090E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0090F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009100:  4D 4F 44 55 4C 45 20 43 6F 6D 70 61 72 65 3B 0D    MODULE Compare;.
009110:  0A 0D 0A 28 2A 09 43 6F 6D 70 61 72 65 20 74 77    ...(*.Compare tw
009120:  6F 20 66 69 6C 65 73 0D 0A 0D 0A 09 43 61 6C 6C    o files.....Call
009130:  20 69 73 20 43 4F 4D 50 41 52 45 20 20 20 6F 6C     is COMPARE   ol
009140:  64 20 66 69 6C 65 2C 6E 65 77 20 66 69 6C 65 2C    d file,new file,
009150:  5B 4C 69 73 74 20 66 69 6C 65 5D 0D 0A 0D 0A 09    [List file].....
009160:  54 68 65 20 74 77 6F 20 66 69 6C 65 73 20 61 72    The two files ar
009170:  65 20 63 6F 6D 70 61 72 65 64 20 6C 69 6E 65 20    e compared line 
009180:  62 79 20 6C 69 6E 65 0D 0A 0D 0A 09 6C 69 6E 65    by line.....line
009190:  73 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65    s which have bee
0091A0:  6E 20 64 65 6C 65 74 65 64 20 66 72 6F 6D 20 74    n deleted from t
0091B0:  68 65 20 6F 6C 64 20 66 69 6C 65 20 61 72 65 20    he old file are 
0091C0:  70 72 69 6E 74 65 64 20 69 6E 20 69 74 61 6C 69    printed in itali
0091D0:  63 73 0D 0A 09 6C 69 6E 65 73 20 77 68 69 63 68    cs...lines which
0091E0:  20 68 61 76 65 20 62 65 65 6E 20 69 6E 73 65 72     have been inser
0091F0:  74 65 64 20 61 72 65 20 70 72 69 6E 74 65 64 20    ted are printed 
009200:  69 6E 20 65 6D 70 68 61 73 69 73 65 64 20 6D 6F    in emphasised mo
009210:  64 65 0D 0A 09 6C 69 6E 65 73 20 77 68 69 63 68    de...lines which
009220:  20 68 61 76 65 20 62 65 65 6E 20 6D 6F 76 65 64     have been moved
009230:  20 74 6F 20 61 20 6E 65 77 20 70 6F 73 69 74 69     to a new positi
009240:  6F 6E 20 61 72 65 20 70 72 69 6E 74 65 64 20 69    on are printed i
009250:  6E 20 74 68 65 69 72 20 6E 65 77 0D 0A 09 70 6F    n their new...po
009260:  73 69 74 69 6F 6E 20 77 69 74 68 20 61 20 62 6F    sition with a bo
009270:  78 20 73 75 72 72 6F 75 6E 64 69 6E 67 20 74 68    x surrounding th
009280:  65 6D 0D 0A 0D 0A 09 59 6F 75 20 6D 61 79 20 6E    em.....You may n
009290:  65 65 64 20 74 6F 20 70 61 74 63 68 20 74 68 65    eed to patch the
0092A0:  20 70 72 69 6E 74 65 72 20 63 6F 6E 74 72 6F 6C     printer control
0092B0:  20 63 6F 64 65 73 20 66 6F 72 20 79 6F 75 72 20     codes for your 
0092C0:  70 72 69 6E 74 65 72 0D 0A 09 54 68 65 73 65 20    printer...These 
0092D0:  63 6F 6E 74 72 6F 6C 20 63 6F 64 65 73 20 61 72    control codes ar
0092E0:  65 20 61 74 20 61 62 6F 75 74 20 61 64 64 72 65    e at about addre
0092F0:  73 73 20 31 30 34 68 20 69 6E 20 74 68 65 20 63    ss 104h in the c
009300:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
009310:  4F 44 55 4C 45 20 43 6F 6D 6D 61 6E 64 3B 0D 0A    ODULE Command;..
009320:  0D 0A 0D 0A 28 2A 09 43 6F 6D 6D 61 6E 64 20 6C    ....(*.Command l
009330:  69 6E 65 20 70 72 6F 63 65 73 73 6F 72 2A 29 0D    ine processor*).
009340:  0A 46 52 4F 4D 20 53 74 6F 72 61 67 65 20 49 4D    .FROM Storage IM
009350:  50 4F 52 54 20 41 4C 4C 4F 43 41 54 45 3B 0D 0A    PORT ALLOCATE;..
009360:  46 52 4F 4D 20 53 59 53 54 45 4D 20 20 49 4D 50    FROM SYSTEM  IMP
009370:  4F 52 54 20 41 44 44 52 45 53 53 3B 0D 0A 56 41    ORT ADDRESS;..VA
009380:  52 09 69 2C 6A 2C 6B 3A 49 4E 54 45 47 45 52 3B    R.i,j,k:INTEGER;
009390:  0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 50    ..PROCEDURE GetP
0093A0:  61 72 61 6D 73 28 56 41 52 20 70 3A 41 52 52 41    arams(VAR p:ARRA
0093B0:  59 20 4F 46 20 50 61 72 61 6D 65 74 65 72 3B 56    Y OF Parameter;V
0093C0:  41 52 20 63 6F 75 6E 74 3A 49 4E 54 45 47 45 52    AR count:INTEGER
0093D0:  29 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 42 75    );..PROCEDURE Bu
0093E0:  69 6C 64 28 6C 65 6E 3A 49 4E 54 45 47 45 52 3B    ild(len:INTEGER;
0093F0:  63 68 3A 43 48 41 52 3B 63 3A 50 61 72 63 6C 61    ch:CHAR;c:Parcla
009400:  73 73 29 3B 0D 0A 56 41 52 09 61 64 3A 41 44 44    ss);..VAR.ad:ADD
009410:  52 45 53 53 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A    RESS;..BEGIN....
009420:  09 41 4C 4C 4F 43 41 54 45 28 61 64 2C 6C 65 6E    .ALLOCATE(ad,len
009430:  2B 34 29 3B 0D 0A 09 70 5B 63 6F 75 6E 74 5D 3A    +4);...p[count]:
009440:  3D 61 64 3B 0D 0A 09 57 49 54 48 20 70 5B 63 6F    =ad;...WITH p[co
009450:  75 6E 74 5D 5E 20 44 4F 0D 0A 09 09 49 46 20 6A    unt]^ DO....IF j
009460:  3E 3D 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C 65    >=INTEGER(CommLe
009470:  6E 67 74 68 29 54 48 45 4E 20 54 65 72 6D 69 6E    ngth)THEN Termin
009480:  61 74 6F 72 3A 3D 30 64 78 0D 0A 09 09 45 4C 53    ator:=0dx....ELS
009490:  45 20 54 65 72 6D 69 6E 61 74 6F 72 3A 3D 63 68    E Terminator:=ch
0094A0:  20 45 4E 44 3B 0D 0A 09 09 4C 65 6E 67 74 68 3A     END;....Length:
0094B0:  3D 6C 65 6E 3B 0D 0A 09 09 43 6C 61 73 73 3A 3D    =len;....Class:=
0094C0:  63 3B 0D 0A 09 09 46 4F 52 20 6B 3A 3D 30 20 54    c;....FOR k:=0 T
0094D0:  4F 20 6C 65 6E 2D 31 20 44 4F 0D 0A 09 09 09 43    O len-1 DO.....C
0094E0:  68 61 72 73 5B 6B 5D 3A 3D 43 6F 6D 6D 54 65 78    hars[k]:=CommTex
0094F0:  74 5B 69 2B 6B 5D 3B 0D 0A 09 09 09 45 4E 44 3B    t[i+k];.....END;
009500:  6F 6D 20 66 69 6C 65 20 28 69 2E 65 2E 20 0D 0A    om file (i.e. ..
009510:  09 76 65 72 79 20 6E 65 61 72 20 74 68 65 20 62    .very near the b
009520:  65 67 69 6E 6E 69 6E 67 29 20 45 61 63 68 20 63    eginning) Each c
009530:  6F 6E 74 72 6F 6C 20 63 6F 64 65 20 63 61 6E 20    ontrol code can 
009540:  62 65 20 75 70 20 74 6F 20 38 20 63 68 61 72 61    be up to 8 chara
009550:  63 74 65 72 73 20 6C 6F 6E 67 0D 0A 09 61 6E 64    cters long...and
009560:  20 69 73 20 74 65 72 6D 69 6E 61 74 65 64 20 62     is terminated b
009570:  79 20 61 20 76 61 6C 75 65 20 6F 66 20 30 20 69    y a value of 0 i
009580:  66 20 6C 65 73 73 20 74 68 61 6E 20 38 20 63 68    f less than 8 ch
009590:  61 72 61 63 74 65 72 73 20 69 73 20 72 65 71 75    aracters is requ
0095A0:  69 72 65 64 0D 0A 0D 0A 09 54 68 65 20 63 6F 6E    ired.....The con
0095B0:  74 72 6F 6C 20 63 68 61 72 61 63 74 65 72 73 20    trol characters 
0095C0:  69 6E 20 74 68 65 20 73 75 70 70 6C 69 65 64 20    in the supplied 
0095D0:  70 72 6F 67 72 61 6D 20 61 72 65 20 73 65 74 20    program are set 
0095E0:  66 6F 72 20 61 20 53 54 41 52 20 44 50 53 35 31    for a STAR DPS51
0095F0:  30 2C 0D 0A 09 77 68 69 63 68 20 69 73 20 73 75    0,...which is su
009600:  70 70 6F 73 65 64 20 74 6F 20 62 65 20 45 70 73    pposed to be Eps
009610:  6F 6E 20 63 6F 6D 70 61 74 69 62 6C 65 2C 20 73    on compatible, s
009620:  6F 20 74 68 65 20 70 72 6F 67 72 61 6D 20 6D 61    o the program ma
009630:  79 20 77 65 6C 6C 20 72 75 6E 20 27 61 73 20 69    y well run 'as i
009640:  73 27 0D 0A 09 6F 6E 20 45 70 73 6F 6E 73 20 61    s'...on Epsons a
009650:  6E 64 20 45 70 73 6F 6E 20 63 6C 6F 6E 65 73 0D    nd Epson clones.
009660:  0A 0D 0A 09 54 68 65 20 70 72 6F 67 72 61 6D 20    ....The program 
009670:  69 73 20 62 61 73 65 64 20 6F 6E 20 61 20 6D 65    is based on a me
009680:  74 68 6F 64 20 64 65 73 63 72 69 62 65 64 20 62    thod described b
009690:  79 20 50 61 75 6C 20 48 65 63 6B 65 6C 20 27 41    y Paul Heckel 'A
0096A0:  20 54 65 63 68 6E 69 71 75 65 20 66 6F 72 0D 0A     Technique for..
0096B0:  09 49 73 6F 6C 61 74 69 6E 67 20 44 69 66 66 65    .Isolating Diffe
0096C0:  72 65 6E 63 65 73 20 62 65 74 77 65 65 6E 20 46    rences between F
0096D0:  69 6C 65 73 27 2C 20 43 6F 6D 6D 75 6E 69 63 61    iles', Communica
0096E0:  74 69 6F 6E 73 20 6F 66 20 74 68 65 20 41 43 4D    tions of the ACM
0096F0:  2C 20 56 6F 6C 20 32 31 0D 0A 09 4E 6F 20 34 2C    , Vol 21...No 4,
009700:  0D 0A 09 09 43 68 61 72 73 5B 6C 65 6E 5D 3A 3D    ....Chars[len]:=
009710:  30 78 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 63 6F    0x;....END;...co
009720:  75 6E 74 3A 3D 63 6F 75 6E 74 2B 31 0D 0A 09 45    unt:=count+1...E
009730:  4E 44 20 42 75 69 6C 64 3B 0D 0A 28 2A 09 63 72    ND Build;..(*.cr
009740:  61 63 6B 20 74 68 65 20 63 6F 6D 6D 61 6E 64 20    ack the command 
009750:  6C 69 6E 65 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09    line*)..BEGIN...
009760:  69 3A 3D 30 3B 0D 0A 09 63 6F 75 6E 74 3A 3D 30    i:=0;...count:=0
009770:  3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 49 46 20 63    ;...LOOP....IF c
009780:  6F 75 6E 74 3E 48 49 47 48 28 70 29 20 54 48 45    ount>HIGH(p) THE
009790:  4E 20 0D 0A 09 09 09 45 58 49 54 20 0D 0A 09 09    N .....EXIT ....
0097A0:  09 45 4E 44 3B 0D 0A 09 09 57 48 49 4C 45 20 28    .END;....WHILE (
0097B0:  69 3C 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C 65    i<INTEGER(CommLe
0097C0:  6E 67 74 68 29 29 20 41 4E 44 20 28 43 6F 6D 6D    ngth)) AND (Comm
0097D0:  54 65 78 74 5B 69 5D 3D 27 20 27 29 20 44 4F 0D    Text[i]=' ') DO.
0097E0:  0A 09 09 09 49 4E 43 28 69 29 0D 0A 09 09 09 45    ....INC(i).....E
0097F0:  4E 44 3B 0D 0A 09 09 49 46 20 69 3E 3D 49 4E 54    ND;....IF i>=INT
009800:  45 47 45 52 28 43 6F 6D 6D 4C 65 6E 67 74 68 29    EGER(CommLength)
009810:  20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D     THEN EXIT END;.
009820:  0A 09 09 43 41 53 45 20 43 6F 6D 6D 54 65 78 74    ...CASE CommText
009830:  5B 69 5D 20 4F 46 0D 0A 09 09 27 5B 27 2C 27 2F    [i] OF....'[','/
009840:  27 3A 28 2A 4F 70 74 69 6F 6E 20 66 6F 75 6E 64    ':(*Option found
009850:  2A 29 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D 0A    *).....INC(i);..
009860:  09 09 09 42 75 69 6C 64 28 49 4E 54 45 47 45 52    ...Build(INTEGER
009870:  28 43 6F 6D 6D 4C 65 6E 67 74 68 29 2D 69 2C 30    (CommLength)-i,0
009880:  64 78 2C 6F 70 74 69 6F 6E 29 3B 0D 0A 09 09 09    dx,option);.....
009890:  45 58 49 54 0D 0A 09 09 09 7C 0D 0A 09 09 27 22    EXIT.....|....'"
0098A0:  27 2C 22 27 22 3A 6A 3A 3D 69 2B 31 3B 0D 0A 09    ',"'":j:=i+1;...
0098B0:  09 09 57 48 49 4C 45 20 28 43 6F 6D 6D 54 65 78    ..WHILE (CommTex
0098C0:  74 5B 69 5D 3C 3E 43 6F 6D 6D 54 65 78 74 5B 6A    t[i]<>CommText[j
0098D0:  5D 29 20 0D 0A 09 09 09 09 41 4E 44 20 28 6A 3C    ]) ......AND (j<
0098E0:  49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C 65 6E 67    INTEGER(CommLeng
0098F0:  74 68 29 29 20 44 4F 0D 0A 09 09 09 09 49 4E 43    th)) DO......INC
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 41 02 00 00 00 02    ......R...A.....
009920:  08 00 46 02 00 00 00 02 08 00 42 02 00 00 00 02    ..F.......B.....
009930:  08 00 47 02 00 00 00 02 08 00 43 02 00 00 00 02    ..G.......C.....
009940:  08 00 48 02 00 00 00 02 08 00 44 02 00 00 00 02    ..H.......D.....
009950:  08 00 49 02 00 00 00 02 08 00 45 02 00 00 00 02    ..I.......E.....
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:  20 41 70 72 69 6C 20 31 39 37 38 2C 20 70 70 20     April 1978, pp 
009A10:  32 36 34 2D 32 36 38 2E 20 0D 0A 0D 0A 09 42 61    264-268. .....Ba
009A20:  73 69 63 61 6C 6C 79 2C 20 74 68 65 20 74 65 63    sically, the tec
009A30:  68 6E 69 71 75 65 20 63 6F 6E 73 69 73 74 73 20    hnique consists 
009A40:  6F 66 20 63 6F 6D 70 61 72 69 6E 67 20 74 68 65    of comparing the
009A50:  20 74 77 6F 20 66 69 6C 65 73 20 74 6F 20 66 69     two files to fi
009A60:  6E 64 20 61 6C 6C 0D 0A 09 74 68 65 20 75 6E 69    nd all...the uni
009A70:  71 75 65 20 6C 69 6E 65 73 20 69 6E 20 65 61 63    que lines in eac
009A80:  68 20 77 68 69 63 68 20 6D 61 74 63 68 20 61 20    h which match a 
009A90:  75 6E 69 71 75 65 20 6C 69 6E 65 20 69 6E 20 74    unique line in t
009AA0:  68 65 20 6F 74 68 65 72 2E 20 54 68 65 73 65 20    he other. These 
009AB0:  0D 0A 09 6C 69 6E 65 73 20 67 69 76 65 20 66 69    ...lines give fi
009AC0:  78 65 64 20 70 6F 69 6E 74 73 20 66 72 6F 6D 20    xed points from 
009AD0:  77 68 69 63 68 20 6D 61 74 63 68 69 6E 67 20 72    which matching r
009AE0:  65 67 69 6F 6E 73 20 63 61 6E 20 62 65 20 67 72    egions can be gr
009AF0:  6F 77 6E 20 6F 75 74 77 61 72 64 73 2E 0D 0A 09    own outwards....
009B00:  4F 6E 63 65 20 61 6C 6C 20 74 68 65 20 72 65 67    Once all the reg
009B10:  69 6F 6E 73 20 73 6F 20 70 72 6F 64 75 63 65 64    ions so produced
009B20:  20 68 61 76 65 20 62 65 65 6E 20 63 72 65 61 74     have been creat
009B30:  65 64 2C 20 61 6E 79 20 6C 69 6E 65 20 69 6E 20    ed, any line in 
009B40:  74 68 65 20 6F 6C 64 20 66 69 6C 65 20 0D 0A 09    the old file ...
009B50:  77 68 69 63 68 20 69 73 20 6E 6F 74 20 61 74 74    which is not att
009B60:  61 63 68 65 64 20 74 6F 20 61 20 6C 69 6E 65 20    ached to a line 
009B70:  69 6E 20 74 68 65 20 6E 65 77 20 66 69 6C 65 20    in the new file 
009B80:  69 73 20 61 20 64 65 6C 65 74 69 6F 6E 2E 20 41    is a deletion. A
009B90:  6E 79 20 6C 69 6E 65 20 69 6E 20 74 68 65 20 0D    ny line in the .
009BA0:  0A 09 6E 65 77 20 66 69 6C 65 20 77 68 69 63 68    ..new file which
009BB0:  20 69 73 20 6E 6F 74 20 61 74 74 61 63 68 65 64     is not attached
009BC0:  20 74 6F 20 61 20 6C 69 6E 65 20 69 6E 20 74 68     to a line in th
009BD0:  65 20 6F 6C 64 20 66 69 6C 65 20 69 73 20 61 6E    e old file is an
009BE0:  20 69 6E 73 65 72 74 69 6F 6E 2C 20 77 68 69 6C     insertion, whil
009BF0:  65 0D 0A 09 61 20 62 6C 6F 63 6B 20 6D 6F 76 65    e...a block move
009C00:  45 20 52 65 61 64 53 74 72 65 61 6D 28 56 41 52    E ReadStream(VAR
009C10:  20 73 3A 53 54 52 45 41 4D 3B 56 41 52 20 48 61     s:STREAM;VAR Ha
009C20:  73 68 3A 48 61 73 68 41 72 72 61 79 29 3A 43 41    sh:HashArray):CA
009C30:  52 44 49 4E 41 4C 3B 0D 0A 28 2A 0D 0A 09 52 65    RDINAL;..(*...Re
009C40:  61 64 20 69 6E 20 61 20 66 69 6C 65 20 61 6E 64    ad in a file and
009C50:  20 63 61 6C 63 75 6C 61 74 65 20 74 68 65 20 68     calculate the h
009C60:  61 73 68 20 74 6F 74 61 6C 73 20 66 6F 72 20 74    ash totals for t
009C70:  68 65 20 66 69 6C 65 0D 0A 2A 29 0D 0A 56 41 52    he file..*)..VAR
009C80:  09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 4C    .i:CARDINAL;...L
009C90:  69 6E 65 3A 41 52 52 41 59 5B 31 2E 2E 38 30 5D    ine:ARRAY[1..80]
009CA0:  20 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E     OF CHAR;..BEGIN
009CB0:  0D 0A 09 53 77 69 74 63 68 49 6E 53 74 72 65 61    ...SwitchInStrea
009CC0:  6D 28 73 29 3B 0D 0A 09 69 3A 3D 30 3B 0D 0A 09    m(s);...i:=0;...
009CD0:  0D 0A 09 57 48 49 4C 45 20 28 69 3C 48 49 47 48    ...WHILE (i<HIGH
009CE0:  28 48 61 73 68 29 29 20 41 4E 44 20 28 4E 4F 54    (Hash)) AND (NOT
009CF0:  20 45 4F 53 28 73 29 29 20 44 4F 0D 0A 09 09 52     EOS(s)) DO....R
009D00:  65 61 64 4C 69 6E 65 28 4C 69 6E 65 29 3B 0D 0A    eadLine(Line);..
009D10:  09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 48 61 73    ..INC(i);....Has
009D20:  68 5B 69 5D 3A 3D 43 61 6C 63 48 61 73 68 28 4C    h[i]:=CalcHash(L
009D30:  69 6E 65 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    ine);....END;...
009D40:  52 65 73 65 74 28 73 29 3B 0D 0A 09 50 6F 70 49    Reset(s);...PopI
009D50:  6E 53 74 72 65 61 6D 3B 0D 0A 09 52 45 54 55 52    nStream;...RETUR
009D60:  4E 20 69 3B 0D 0A 09 45 4E 44 20 52 65 61 64 53    N i;...END ReadS
009D70:  74 72 65 61 6D 3B 0D 0A 0D 0A 09 20 20 20 0D 0A    tream;.....   ..
009D80:  50 52 4F 43 45 44 55 52 45 20 55 73 61 67 65 3B    PROCEDURE Usage;
009D90:  0D 0A 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 53    ..BEGIN...WriteS
009DA0:  74 72 69 6E 67 28 27 55 73 61 67 65 20 69 73 3A    tring('Usage is:
009DB0:  20 20 20 43 4F 4D 50 41 52 45 20 6F 6C 64 20 66       COMPARE old f
009DC0:  69 6C 65 2C 6E 65 77 20 66 69 6C 65 27 29 3B 57    ile,new file');W
009DD0:  72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53    riteLn;...WriteS
009DE0:  74 72 69 6E 67 28 27 20 20 20 20 20 20 6F 72 20    tring('      or 
009DF0:  20 20 20 43 4F 4D 50 41 52 45 20 6F 6C 64 20 66       COMPARE old f
009E00:  20 69 73 20 65 6E 63 6F 75 6E 74 65 72 65 64 20     is encountered 
009E10:  77 68 65 6E 20 74 68 65 20 6C 69 6E 65 73 20 70    when the lines p
009E20:  6F 69 6E 74 65 64 20 74 6F 20 69 6E 20 74 68 65    ointed to in the
009E30:  20 6F 6C 64 20 66 69 6C 65 20 61 72 65 20 66 75     old file are fu
009E40:  72 74 68 65 72 0D 0A 09 64 6F 77 6E 20 74 68 65    rther...down the
009E50:  20 66 69 6C 65 20 74 68 61 6E 20 73 6F 6D 65 20     file than some 
009E60:  6F 74 68 65 72 20 6C 69 6E 65 73 20 77 68 69 63    other lines whic
009E70:  68 20 68 61 76 65 20 6E 6F 74 20 79 65 74 20 62    h have not yet b
009E80:  65 65 6E 20 70 72 6F 63 65 73 73 65 64 20 61 6E    een processed an
009E90:  64 20 77 68 69 63 68 0D 0A 09 61 72 65 20 61 73    d which...are as
009EA0:  73 6F 63 69 61 74 65 64 20 77 69 74 68 20 6C 69    sociated with li
009EB0:  6E 65 73 20 69 6E 20 74 68 65 20 6E 65 77 20 66    nes in the new f
009EC0:  69 6C 65 2E 0D 0A 0D 0A 09 2A 29 0D 0A 0D 0A 46    ile......*)....F
009ED0:  52 4F 4D 20 09 53 59 53 54 45 4D 20 09 09 49 4D    ROM .SYSTEM ..IM
009EE0:  50 4F 52 54 20 41 44 44 52 45 53 53 2C 41 44 52    PORT ADDRESS,ADR
009EF0:  2C 54 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 09 43    ,TSIZE;..FROM .C
009F00:  6F 6D 6D 61 6E 64 20 09 49 4D 50 4F 52 54 20 50    ommand .IMPORT P
009F10:  61 72 61 6D 65 74 65 72 2C 50 61 72 63 6C 61 73    arameter,Parclas
009F20:  73 2C 47 65 74 50 61 72 61 6D 73 3B 0D 0A 46 52    s,GetParams;..FR
009F30:  4F 4D 20 09 46 69 6C 65 73 20 09 09 49 4D 50 4F    OM .Files ..IMPO
009F40:  52 54 20 46 69 6C 65 4E 61 6D 65 2C 46 49 4C 45    RT FileName,FILE
009F50:  2C 4C 6F 6F 6B 75 70 2C 43 72 65 61 74 65 3B 0D    ,Lookup,Create;.
009F60:  0A 46 52 4F 4D 20 09 53 74 72 65 61 6D 73 20 09    .FROM .Streams .
009F70:  49 4D 50 4F 52 54 20 43 6F 6E 6E 65 63 74 2C 44    IMPORT Connect,D
009F80:  69 73 63 6F 6E 6E 65 63 74 2C 53 54 52 45 41 4D    isconnect,STREAM
009F90:  2C 69 6E 70 75 74 2C 6F 75 74 70 75 74 2C 57 72    ,input,output,Wr
009FA0:  69 74 65 43 68 61 72 2C 0D 0A 09 09 09 09 52 65    iteChar,......Re
009FB0:  61 64 43 68 61 72 2C 45 4F 53 2C 57 72 69 74 65    adChar,EOS,Write
009FC0:  52 65 63 2C 52 65 73 65 74 3B 0D 0A 46 52 4F 4D    Rec,Reset;..FROM
009FD0:  20 09 54 65 72 6D 69 6E 61 6C 09 49 4D 50 4F 52     .Terminal.IMPOR
009FE0:  54 20 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72    T WriteString,Wr
009FF0:  69 74 65 4C 6E 3B 0D 0A 46 52 4F 4D 20 09 53 6F    iteLn;..FROM .So
00A000:  69 6C 65 2C 6E 65 77 20 66 69 6C 65 2C 6F 75 74    ile,new file,out
00A010:  70 75 74 20 66 69 6C 65 27 29 3B 0D 0A 09 57 72    put file');...Wr
00A020:  69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 4C 6E    iteLn;...WriteLn
00A030:  3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28    ;...WriteString(
00A040:  27 20 66 6F 72 20 65 78 61 6D 70 6C 65 3A 20 20    ' for example:  
00A050:  43 4F 4D 50 41 52 45 20 4D 45 2E 42 41 4B 20 4D    COMPARE ME.BAK M
00A060:  45 2E 4D 4F 44 27 29 3B 57 72 69 74 65 4C 6E 3B    E.MOD');WriteLn;
00A070:  0D 0A 09 48 41 4C 54 0D 0A 09 45 4E 44 20 55 73    ...HALT...END Us
00A080:  61 67 65 3B 0D 0A 0D 0A 56 41 52 09 4F 6C 64 4C    age;....VAR.OldL
00A090:  69 6E 6B 2C 4E 65 77 4C 69 6E 6B 3A 48 61 73 68    ink,NewLink:Hash
00A0A0:  41 72 72 61 79 3B 0D 0A 0D 0A 09 28 2A 09 4F 6C    Array;.....(*.Ol
00A0B0:  64 4C 69 6E 6B 20 63 6F 6E 74 61 69 6E 73 20 74    dLink contains t
00A0C0:  68 65 20 6E 75 6D 62 65 72 20 6F 66 20 61 20 6C    he number of a l
00A0D0:  69 6E 65 20 69 6E 20 74 68 65 20 6E 65 77 20 66    ine in the new f
00A0E0:  69 6C 65 20 77 68 69 63 68 20 69 73 0D 0A 09 09    ile which is....
00A0F0:  6C 69 6E 6B 65 64 20 74 6F 20 61 20 67 69 76 65    linked to a give
00A100:  6E 20 6C 69 6E 65 20 69 6E 20 74 68 65 20 6F 6C    n line in the ol
00A110:  64 20 66 69 6C 65 2C 20 61 6E 64 20 76 69 63 65    d file, and vice
00A120:  2D 76 65 72 73 61 0D 0A 09 09 41 6E 20 65 6E 74    -versa....An ent
00A130:  72 79 20 63 6F 6E 74 61 69 6E 73 20 7A 65 72 6F    ry contains zero
00A140:  20 69 66 20 6E 6F 20 6C 69 6E 6B 20 68 61 73 20     if no link has 
00A150:  62 65 65 6E 20 6D 61 64 65 2A 29 0D 0A 0D 0A 0D    been made*).....
00A160:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 6E    ...PROCEDURE Gen
00A170:  65 72 61 74 65 4C 69 6E 6B 73 3B 0D 0A 56 41 52    erateLinks;..VAR
00A180:  09 69 2C 6A 2C 6B 3A 43 41 52 44 49 4E 41 4C 3B    .i,j,k:CARDINAL;
00A190:  0D 0A 09 63 6F 75 6E 74 3A 43 41 52 44 49 4E 41    ...count:CARDINA
00A1A0:  4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 46 4F 52 20    L;..BEGIN...FOR 
00A1B0:  69 3A 3D 31 20 54 4F 20 48 49 47 48 28 4F 6C 64    i:=1 TO HIGH(Old
00A1C0:  4C 69 6E 6B 29 20 44 4F 0D 0A 09 09 4F 6C 64 4C    Link) DO....OldL
00A1D0:  69 6E 6B 5B 69 5D 3A 3D 30 3B 0D 0A 09 09 4E 65    ink[i]:=0;....Ne
00A1E0:  77 4C 69 6E 6B 5B 69 5D 3A 3D 30 3B 0D 0A 09 09    wLink[i]:=0;....
00A1F0:  45 4E 44 3B 0D 0A 0D 0A 09 28 2A 09 6C 6F 6F 6B    END;.....(*.look
00A200:  72 74 20 09 09 49 4D 50 4F 52 54 20 53 6F 72 74    rt ..IMPORT Sort
00A210:  52 65 63 6F 72 64 73 3B 0D 0A 46 52 4F 4D 20 09    Records;..FROM .
00A220:  49 6E 4F 75 74 20 09 09 49 4D 50 4F 52 54 20 57    InOut ..IMPORT W
00A230:  72 69 74 65 43 61 72 64 2C 53 77 69 74 63 68 49    riteCard,SwitchI
00A240:  6E 53 74 72 65 61 6D 2C 53 77 69 74 63 68 4F 75    nStream,SwitchOu
00A250:  74 53 74 72 65 61 6D 2C 0D 0A 09 09 09 09 50 6F    tStream,......Po
00A260:  70 49 6E 53 74 72 65 61 6D 2C 50 6F 70 4F 75 74    pInStream,PopOut
00A270:  53 74 72 65 61 6D 2C 52 65 61 64 4C 69 6E 65 3B    Stream,ReadLine;
00A280:  0D 0A 43 4F 4E 53 54 09 4D 61 78 46 69 6C 65 53    ..CONST.MaxFileS
00A290:  69 7A 65 3D 32 30 30 30 3B 09 28 2A 6C 69 6E 65    ize=2000;.(*line
00A2A0:  73 20 69 6E 20 66 69 6C 65 20 6D 61 78 2A 29 0D    s in file max*).
00A2B0:  0A 09 46 46 3D 30 63 78 3B 0D 0A 09 54 41 42 3D    ..FF=0cx;...TAB=
00A2C0:  30 39 78 3B 0D 0A 09 4C 46 3D 30 61 78 3B 0D 0A    09x;...LF=0ax;..
00A2D0:  09 43 52 3D 30 64 78 3B 0D 0A 54 59 50 45 20 09    .CR=0dx;..TYPE .
00A2E0:  50 46 69 6C 65 4E 61 6D 65 3D 50 4F 49 4E 54 45    PFileName=POINTE
00A2F0:  52 20 54 4F 20 46 69 6C 65 4E 61 6D 65 3B 0D 0A    R TO FileName;..
00A300:  09 50 72 69 6E 74 43 6F 6E 74 72 6F 6C 3D 41 52    .PrintControl=AR
00A310:  52 41 59 5B 30 2E 2E 37 5D 20 4F 46 20 43 48 41    RAY[0..7] OF CHA
00A320:  52 3B 0D 0A 56 41 52 09 0D 0A 09 28 2A 09 50 72    R;..VAR....(*.Pr
00A330:  69 6E 74 65 72 20 43 6F 6E 74 72 6F 6C 20 43 6F    inter Control Co
00A340:  64 65 73 20 61 20 7A 65 72 6F 20 62 79 74 65 20    des a zero byte 
00A350:  74 65 72 6D 69 6E 61 74 65 73 09 2A 29 0D 0A 0D    terminates.*)...
00A360:  0A 09 49 74 61 6C 69 63 73 4F 6E 09 3A 50 72 69    ..ItalicsOn.:Pri
00A370:  6E 74 43 6F 6E 74 72 6F 6C 09 3D 5B 31 62 78 2C    ntControl.=[1bx,
00A380:  27 34 27 2C 30 5D 3B 0D 0A 09 49 74 61 6C 69 63    '4',0];...Italic
00A390:  73 4F 66 66 09 3A 50 72 69 6E 74 43 6F 6E 74 72    sOff.:PrintContr
00A3A0:  6F 6C 09 3D 5B 31 62 78 2C 27 35 27 2C 30 5D 3B    ol.=[1bx,'5',0];
00A3B0:  0D 0A 09 42 6F 6C 64 4F 6E 09 09 3A 50 72 69 6E    ...BoldOn..:Prin
00A3C0:  74 43 6F 6E 74 72 6F 6C 09 3D 5B 31 62 78 2C 27    tControl.=[1bx,'
00A3D0:  45 27 2C 30 5D 3B 0D 0A 09 42 6F 6C 64 4F 66 66    E',0];...BoldOff
00A3E0:  09 09 3A 50 72 69 6E 74 43 6F 6E 74 72 6F 6C 09    ..:PrintControl.
00A3F0:  3D 5B 31 62 78 2C 27 46 27 2C 30 5D 3B 0D 0A 0D    =[1bx,'F',0];...
00A400:  20 66 6F 72 20 61 6C 6C 20 6F 6C 64 20 6C 69 6E     for all old lin
00A410:  65 73 20 77 68 69 63 68 20 6D 61 74 63 68 20 65    es which match e
00A420:  78 61 63 74 6C 79 20 6F 6E 65 20 6E 65 77 20 6C    xactly one new l
00A430:  69 6E 65 2A 29 0D 0A 0D 0A 09 46 4F 52 20 69 3A    ine*).....FOR i:
00A440:  3D 30 20 54 4F 20 4F 6C 64 4C 65 6E 20 44 4F 0D    =0 TO OldLen DO.
00A450:  0A 09 09 63 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09    ...count:=0;....
00A460:  6A 3A 3D 31 3B 0D 0A 09 09 57 48 49 4C 45 20 28    j:=1;....WHILE (
00A470:  63 6F 75 6E 74 3C 32 29 20 41 4E 44 20 28 6A 3C    count<2) AND (j<
00A480:  3D 4E 65 77 4C 65 6E 29 20 44 4F 0D 0A 09 09 09    =NewLen) DO.....
00A490:  49 46 20 4F 6C 64 48 61 73 68 5B 69 5D 3D 4E 65    IF OldHash[i]=Ne
00A4A0:  77 48 61 73 68 5B 6A 5D 20 54 48 45 4E 20 0D 0A    wHash[j] THEN ..
00A4B0:  09 09 09 09 49 4E 43 28 63 6F 75 6E 74 29 3B 20    ....INC(count); 
00A4C0:  0D 0A 09 09 09 09 6B 3A 3D 6A 3B 0D 0A 09 09 09    ......k:=j;.....
00A4D0:  09 45 4E 44 3B 0D 0A 09 09 09 49 4E 43 28 6A 29    .END;.....INC(j)
00A4E0:  3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46    ;.....END;....IF
00A4F0:  20 63 6F 75 6E 74 3D 31 20 54 48 45 4E 0D 0A 0D     count=1 THEN...
00A500:  0A 09 09 28 2A 70 6F 73 73 69 62 6C 65 20 6D 61    ...(*possible ma
00A510:  74 63 68 20 2D 20 63 68 65 63 6B 20 74 68 61 74    tch - check that
00A520:  20 74 68 65 20 6E 65 77 20 6C 69 6E 65 20 6F 6E     the new line on
00A530:  6C 79 20 6D 61 74 63 68 65 73 20 74 68 69 73 20    ly matches this 
00A540:  6F 6C 64 20 6C 69 6E 65 2A 29 0D 0A 0D 0A 09 09    old line*)......
00A550:  09 63 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09 09 6A    .count:=0;.....j
00A560:  3A 3D 31 3B 0D 0A 09 09 09 57 48 49 4C 45 20 28    :=1;.....WHILE (
00A570:  63 6F 75 6E 74 3C 32 29 20 41 4E 44 20 28 6A 3C    count<2) AND (j<
00A580:  3D 4F 6C 64 4C 65 6E 29 20 44 4F 0D 0A 09 09 09    =OldLen) DO.....
00A590:  09 49 46 20 4F 6C 64 48 61 73 68 5B 6A 5D 3D 4E    .IF OldHash[j]=N
00A5A0:  65 77 48 61 73 68 5B 6B 5D 20 54 48 45 4E 20 0D    ewHash[k] THEN .
00A5B0:  0A 09 09 09 09 09 49 4E 43 28 63 6F 75 6E 74 29    ......INC(count)
00A5C0:  3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09    ;.......END;....
00A5D0:  09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 45    ..INC(j);......E
00A5E0:  4E 44 3B 0D 0A 09 09 09 49 46 20 63 6F 75 6E 74    ND;.....IF count
00A5F0:  3D 31 20 54 48 45 4E 0D 0A 0D 0A 09 09 09 28 2A    =1 THEN.......(*
00A600:  0A 09 4C 69 73 74 3A 53 54 52 45 41 4D 3B 0D 0A    ..List:STREAM;..
00A610:  09 4C 69 73 74 46 3A 46 49 4C 45 3B 0D 0A 09 72    .ListF:FILE;...r
00A620:  65 70 6C 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 09    eply:INTEGER;...
00A630:  69 2C 6A 3A 49 4E 54 45 47 45 52 3B 0D 0A 0D 0A    i,j:INTEGER;....
00A640:  09 4F 6C 64 73 3A 53 54 52 45 41 4D 3B 0D 0A 09    .Olds:STREAM;...
00A650:  4F 6C 64 66 3A 46 49 4C 45 3B 0D 0A 09 0D 0A 09    Oldf:FILE;......
00A660:  4E 65 77 73 3A 53 54 52 45 41 4D 3B 0D 0A 09 4E    News:STREAM;...N
00A670:  65 77 66 3A 46 49 4C 45 3B 0D 0A 0D 0A 09 63 68    ewf:FILE;.....ch
00A680:  3A 43 48 41 52 3B 0D 0A 09 43 68 61 72 50 6F 73    :CHAR;...CharPos
00A690:  3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 70 6F 73    :CARDINAL;.(*pos
00A6A0:  69 74 69 6F 6E 20 69 6E 20 6C 69 6E 65 2A 29 0D    ition in line*).
00A6B0:  0A 09 0D 0A 0D 0A 28 2A 09 46 6F 72 20 65 61 63    ......(*.For eac
00A6C0:  68 20 66 69 6C 65 2C 20 77 65 20 68 61 76 65 20    h file, we have 
00A6D0:  61 6E 20 61 72 72 61 79 20 6F 66 20 68 61 73 68    an array of hash
00A6E0:  20 74 6F 74 61 6C 73 20 66 6F 72 20 74 68 65 20     totals for the 
00A6F0:  6C 69 6E 65 73 20 6F 66 20 74 68 65 20 66 69 6C    lines of the fil
00A700:  65 0D 0A 09 55 73 69 6E 67 20 68 61 73 68 20 74    e...Using hash t
00A710:  6F 74 61 6C 73 20 69 6E 73 74 65 61 64 20 6F 66    otals instead of
00A720:  20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 6C 69     the original li
00A730:  6E 65 73 20 63 61 75 73 65 73 20 61 20 73 6C 69    nes causes a sli
00A740:  67 68 74 20 63 68 61 6E 63 65 0D 0A 09 74 68 61    ght chance...tha
00A750:  74 20 6C 69 6E 65 73 20 77 69 6C 6C 20 6D 61 74    t lines will mat
00A760:  63 68 20 77 68 65 6E 20 74 68 65 79 20 73 68 6F    ch when they sho
00A770:  75 6C 64 20 6E 6F 74 2C 20 62 75 74 20 61 6C 6C    uld not, but all
00A780:  6F 77 73 20 6C 61 72 67 65 72 20 66 69 6C 65 73    ows larger files
00A790:  0D 0A 09 74 6F 20 62 65 20 63 6F 6D 70 61 72 65    ...to be compare
00A7A0:  64 20 61 6E 64 20 61 6C 73 6F 20 6D 61 6B 65 73    d and also makes
00A7B0:  20 69 74 20 70 6F 73 73 69 62 6C 65 20 74 6F 20     it possible to 
00A7C0:  65 78 74 65 6E 64 20 74 68 65 20 70 72 6F 67 72    extend the progr
00A7D0:  61 6D 20 69 6E 20 74 68 65 20 66 75 74 75 72 65    am in the future
00A7E0:  0D 0A 09 74 6F 20 77 6F 72 6B 20 77 69 74 68 20    ...to work with 
00A7F0:  72 65 61 73 6F 6E 61 62 6C 65 20 73 70 65 65 64    reasonable speed
00A800:  09 74 68 65 20 6C 69 6E 65 73 20 61 72 65 20 75    .the lines are u
00A810:  6E 69 71 75 65 20 61 6E 64 20 74 68 65 79 20 6D    nique and they m
00A820:  61 74 63 68 20 2D 20 73 65 74 20 75 70 20 63 72    atch - set up cr
00A830:  6F 73 73 20 70 6F 69 6E 74 65 72 73 2A 29 0D 0A    oss pointers*)..
00A840:  0D 0A 09 09 09 09 4F 6C 64 4C 69 6E 6B 5B 6B 5D    ......OldLink[k]
00A850:  3A 3D 69 3B 0D 0A 09 09 09 09 4E 65 77 4C 69 6E    :=i;......NewLin
00A860:  6B 5B 69 5D 3A 3D 6B 3B 0D 0A 09 09 09 09 45 4E    k[i]:=k;......EN
00A870:  44 3B 0D 0A 09 09 09 45 4E 44 3B 20 28 2A 49 46    D;.....END; (*IF
00A880:  20 63 6F 75 6E 74 3D 31 20 28 74 68 65 20 6F 75     count=1 (the ou
00A890:  74 65 72 20 6F 6E 65 29 2A 29 0D 0A 09 09 45 4E    ter one)*)....EN
00A8A0:  44 3B 20 28 2A 46 4F 52 20 69 2A 29 0D 0A 0D 0A    D; (*FOR i*)....
00A8B0:  09 28 2A 09 61 74 20 74 68 69 73 20 70 6F 69 6E    .(*.at this poin
00A8C0:  74 2C 20 4E 65 77 4C 69 6E 6B 5B 69 5D 3D 6A 20    t, NewLink[i]=j 
00A8D0:  3C 3D 3E 20 4F 6C 64 4C 69 6E 65 5B 6A 5D 3D 69    <=> OldLine[j]=i
00A8E0:  0D 0A 09 09 54 68 69 73 20 63 6F 6E 64 69 74 69    ....This conditi
00A8F0:  6F 6E 20 69 73 20 63 65 6E 74 72 61 6C 20 74 6F    on is central to
00A900:  20 74 68 65 20 77 68 6F 6C 65 20 70 72 6F 67 72     the whole progr
00A910:  61 6D 09 2A 29 20 09 0D 0A 0D 0A 09 28 2A 09 6E    am.*) ......(*.n
00A920:  6F 77 20 74 68 61 74 20 74 68 65 20 75 6E 69 71    ow that the uniq
00A930:  75 65 20 6C 69 6E 65 73 20 61 72 65 20 63 72 6F    ue lines are cro
00A940:  73 73 2D 6C 69 6E 6B 65 64 2C 20 77 65 20 61 74    ss-linked, we at
00A950:  74 65 6D 70 74 20 74 6F 20 27 67 72 6F 77 27 0D    tempt to 'grow'.
00A960:  0A 09 09 74 68 65 20 6C 69 6E 6B 73 20 6F 75 74    ...the links out
00A970:  77 61 72 64 73 20 66 72 6F 6D 20 74 68 65 20 63    wards from the c
00A980:  72 6F 73 73 2D 6C 69 6E 6B 65 64 20 6C 69 6E 65    ross-linked line
00A990:  73 2A 29 0D 0A 0D 0A 09 6B 3A 3D 31 3B 0D 0A 09    s*).....k:=1;...
00A9A0:  57 48 49 4C 45 20 28 6B 3C 3D 4F 6C 64 4C 65 6E    WHILE (k<=OldLen
00A9B0:  29 20 44 4F 0D 0A 09 09 49 46 20 4E 65 77 4C 69    ) DO....IF NewLi
00A9C0:  6E 6B 5B 6B 5D 3C 3E 30 20 54 48 45 4E 20 0D 0A    nk[k]<>0 THEN ..
00A9D0:  0D 0A 09 09 09 28 2A 67 72 6F 77 20 62 61 63 6B    .....(*grow back
00A9E0:  77 61 72 64 73 2A 29 0D 0A 0D 0A 09 09 09 6A 3A    wards*).......j:
00A9F0:  3D 4E 65 77 4C 69 6E 6B 5B 6B 5D 2D 31 3B 0D 0A    =NewLink[k]-1;..
00AA00:  20 77 68 65 6E 20 6F 6E 65 20 6F 66 20 74 68 65     when one of the
00AA10:  20 66 69 6C 65 73 20 69 73 20 6F 6E 20 61 20 72     files is on a r
00AA20:  65 6D 6F 74 65 20 6D 61 63 68 69 6E 65 0D 0A 09    emote machine...
00AA30:  73 69 6E 63 65 20 74 68 65 6E 20 6F 6E 6C 79 20    since then only 
00AA40:  74 68 65 20 68 61 73 68 20 74 6F 74 61 6C 73 20    the hash totals 
00AA50:  61 6E 64 20 74 68 65 20 61 6C 74 65 72 65 64 20    and the altered 
00AA60:  6C 69 6E 65 73 20 6E 65 65 64 20 74 6F 20 62 65    lines need to be
00AA70:  20 74 72 61 6E 73 6D 69 74 74 65 64 2A 29 0D 0A     transmitted*)..
00AA80:  0D 0A 54 59 50 45 09 48 61 73 68 41 72 72 61 79    ..TYPE.HashArray
00AA90:  3D 41 52 52 41 59 5B 31 2E 2E 4D 61 78 46 69 6C    =ARRAY[1..MaxFil
00AAA0:  65 53 69 7A 65 5D 20 4F 46 20 43 41 52 44 49 4E    eSize] OF CARDIN
00AAB0:  41 4C 3B 0D 0A 56 41 52 09 4F 6C 64 48 61 73 68    AL;..VAR.OldHash
00AAC0:  2C 4E 65 77 48 61 73 68 3A 48 61 73 68 41 72 72    ,NewHash:HashArr
00AAD0:  61 79 3B 0D 0A 09 4F 6C 64 4C 65 6E 2C 4E 65 77    ay;...OldLen,New
00AAE0:  4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 50    Len:CARDINAL;..P
00AAF0:  52 4F 43 45 44 55 52 45 20 43 61 6C 63 48 61 73    ROCEDURE CalcHas
00AB00:  68 28 56 41 52 09 54 65 78 74 3A 41 52 52 41 59    h(VAR.Text:ARRAY
00AB10:  20 4F 46 20 43 48 41 52 29 3A 43 41 52 44 49 4E     OF CHAR):CARDIN
00AB20:  41 4C 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52    AL;..VAR.i,j:CAR
00AB30:  44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09    DINAL;..BEGIN...
00AB40:  69 3A 3D 30 3B 0D 0A 09 6A 3A 3D 30 3B 0D 0A 09    i:=0;...j:=0;...
00AB50:  57 48 49 4C 45 20 28 69 3C 3D 48 49 47 48 28 54    WHILE (i<=HIGH(T
00AB60:  65 78 74 29 29 20 41 4E 44 20 28 54 65 78 74 5B    ext)) AND (Text[
00AB70:  69 5D 3C 3E 30 78 29 20 44 4F 0D 0A 0D 0A 09 09    i]<>0x) DO......
00AB80:  28 2A 09 61 64 64 20 79 6F 75 72 20 66 61 76 6F    (*.add your favo
00AB90:  75 72 69 74 65 20 68 61 73 68 69 6E 67 20 66 75    urite hashing fu
00ABA0:  6E 63 74 69 6F 6E 20 68 65 72 65 2A 29 0D 0A 0D    nction here*)...
00ABB0:  0A 09 09 6A 3A 3D 33 2A 6A 2B 4F 52 44 28 54 65    ...j:=3*j+ORD(Te
00ABC0:  78 74 5B 69 5D 29 3B 0D 0A 09 09 49 4E 43 28 69    xt[i]);....INC(i
00ABD0:  29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54    );....END;...RET
00ABE0:  55 52 4E 20 6A 3B 0D 0A 09 45 4E 44 20 43 61 6C    URN j;...END Cal
00ABF0:  63 48 61 73 68 3B 0D 0A 50 52 4F 43 45 44 55 52    cHash;..PROCEDUR
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 41 02 00 00 00 02    ......R...A.....
00AC20:  09 00 46 02 00 00 00 02 09 00 42 02 00 00 00 02    ..F.......B.....
00AC30:  09 00 47 02 00 00 00 02 09 00 43 02 00 00 00 02    ..G.......C.....
00AC40:  09 00 48 02 00 00 00 02 09 00 44 02 00 00 00 02    ..H.......D.....
00AC50:  09 00 49 02 00 00 00 02 09 00 45 02 00 00 00 02    ..I.......E.....
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:  09 09 09 69 3A 3D 6B 2D 31 3B 0D 0A 09 09 09 57    ...i:=k-1;.....W
00AD10:  48 49 4C 45 20 28 6A 3E 30 29 20 41 4E 44 20 28    HILE (j>0) AND (
00AD20:  69 3E 30 29 20 41 4E 44 20 28 4F 6C 64 4C 69 6E    i>0) AND (OldLin
00AD30:  6B 5B 6A 2B 31 5D 3D 69 2B 31 29 0D 0A 09 09 09    k[j+1]=i+1).....
00AD40:  09 41 4E 44 20 28 4E 65 77 48 61 73 68 5B 6A 5D    .AND (NewHash[j]
00AD50:  3D 4F 6C 64 48 61 73 68 5B 69 5D 29 20 0D 0A 09    =OldHash[i]) ...
00AD60:  09 09 09 41 4E 44 20 28 4F 6C 64 4C 69 6E 6B 5B    ...AND (OldLink[
00AD70:  6A 5D 3D 30 29 20 41 4E 44 20 28 4E 65 77 4C 69    j]=0) AND (NewLi
00AD80:  6E 6B 5B 69 5D 3D 30 29 20 44 4F 0D 0A 09 09 09    nk[i]=0) DO.....
00AD90:  09 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3A 3D 69 3B 0D    .OldLink[j]:=i;.
00ADA0:  0A 09 09 09 09 4E 65 77 4C 69 6E 6B 5B 69 5D 3A    .....NewLink[i]:
00ADB0:  3D 6A 3B 0D 0A 0D 0A 09 09 09 09 28 2A 20 6E 6F    =j;........(* no
00ADC0:  74 65 20 63 65 6E 74 72 61 6C 20 70 72 65 64 69    te central predi
00ADD0:  63 61 74 65 20 73 74 69 6C 6C 20 73 61 74 69 73    cate still satis
00ADE0:  66 69 65 64 2A 29 0D 0A 0D 0A 09 09 09 09 44 45    fied*)........DE
00ADF0:  43 28 69 29 3B 0D 0A 09 09 09 09 44 45 43 28 6A    C(i);......DEC(j
00AE00:  29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09    );......END;....
00AE10:  09 6A 3A 3D 4E 65 77 4C 69 6E 6B 5B 6B 5D 2B 31    .j:=NewLink[k]+1
00AE20:  3B 0D 0A 09 09 09 69 3A 3D 6B 2B 31 3B 0D 0A 0D    ;.....i:=k+1;...
00AE30:  0A 09 09 09 28 2A 67 72 6F 77 20 66 6F 72 77 61    ....(*grow forwa
00AE40:  72 64 73 20 2D 20 28 73 6C 69 67 68 74 20 6F 70    rds - (slight op
00AE50:  74 69 6D 69 73 61 74 69 6F 6E 29 20 74 68 65 72    timisation) ther
00AE60:  65 20 69 73 20 6E 6F 20 6E 65 65 64 20 74 6F 0D    e is no need to.
00AE70:  0A 09 09 09 20 20 63 68 65 63 6B 20 66 6F 72 20    ....  check for 
00AE80:  6E 6F 6E 7A 65 72 6F 20 6C 69 6E 6B 73 20 6F 6E    nonzero links on
00AE90:  20 74 68 65 20 66 6F 72 77 61 72 64 20 70 61 73     the forward pas
00AEA0:  73 20 73 69 6E 63 65 20 6E 6F 6E 2D 7A 65 72 6F    s since non-zero
00AEB0:  20 6C 69 6E 6B 73 0D 0A 09 09 09 20 20 3D 3E 4C     links.....  =>L
00AEC0:  69 6E 65 73 20 6D 61 74 63 68 20 61 6E 64 20 61    ines match and a
00AED0:  72 65 20 75 6E 69 71 75 65 2C 20 61 6E 64 20 74    re unique, and t
00AEE0:  68 65 20 62 61 63 6B 20 70 61 73 73 20 77 6F 75    he back pass wou
00AEF0:  6C 64 20 62 65 20 65 6D 70 74 79 2A 29 0D 0A 0D    ld be empty*)...
00AF00:  74 65 45 6F 6C 3B 0D 0A 09 45 4E 44 20 49 6E 73    teEol;...END Ins
00AF10:  65 72 74 65 64 3B 0D 0A 50 52 4F 43 45 44 55 52    erted;..PROCEDUR
00AF20:  45 20 4E 6F 43 68 61 6E 67 65 3B 0D 0A 42 45 47    E NoChange;..BEG
00AF30:  49 4E 0D 0A 09 47 65 74 4C 69 6E 65 28 4E 65 77    IN...GetLine(New
00AF40:  73 2C 6E 65 77 6C 69 6E 65 29 3B 0D 0A 09 47 65    s,newline);...Ge
00AF50:  74 4C 69 6E 65 28 4F 6C 64 73 2C 6F 6C 64 6C 69    tLine(Olds,oldli
00AF60:  6E 65 29 3B 09 0D 0A 09 50 72 69 6E 74 28 6E 65    ne);....Print(ne
00AF70:  77 6C 69 6E 65 29 3B 0D 0A 09 57 72 69 74 65 45    wline);...WriteE
00AF80:  6F 6C 0D 0A 09 45 4E 44 20 4E 6F 43 68 61 6E 67    ol...END NoChang
00AF90:  65 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20    e;....PROCEDURE 
00AFA0:  42 6C 6F 63 6B 4D 6F 76 65 3B 0D 0A 56 41 52 20    BlockMove;..VAR 
00AFB0:  69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47    i:CARDINAL;..BEG
00AFC0:  49 4E 0D 0A 09 46 4F 52 20 69 3A 3D 31 20 54 4F    IN...FOR i:=1 TO
00AFD0:  20 32 35 20 44 4F 20 57 72 69 74 65 43 68 61 72     25 DO WriteChar
00AFE0:  28 4C 69 73 74 2C 27 2A 27 29 20 45 4E 44 3B 0D    (List,'*') END;.
00AFF0:  0A 09 50 72 69 6E 74 28 27 20 42 6C 6F 63 6B 20    ..Print(' Block 
00B000:  6D 6F 76 65 64 20 66 72 6F 6D 20 6C 69 6E 65 20    moved from line 
00B010:  27 29 3B 0D 0A 09 53 77 69 74 63 68 4F 75 74 53    ');...SwitchOutS
00B020:  74 72 65 61 6D 28 4C 69 73 74 29 3B 0D 0A 09 57    tream(List);...W
00B030:  72 69 74 65 43 61 72 64 28 4F 6C 64 4C 69 6E 6B    riteCard(OldLink
00B040:  5B 6E 65 77 69 6E 64 65 78 5D 2C 36 29 3B 0D 0A    [newindex],6);..
00B050:  09 50 6F 70 4F 75 74 53 74 72 65 61 6D 3B 0D 0A    .PopOutStream;..
00B060:  09 46 4F 52 20 69 3A 3D 32 35 2B 32 39 2B 31 20    .FOR i:=25+29+1 
00B070:  54 4F 20 37 39 20 44 4F 20 57 72 69 74 65 43 68    TO 79 DO WriteCh
00B080:  61 72 28 4C 69 73 74 2C 27 2A 27 29 20 45 4E 44    ar(List,'*') END
00B090:  3B 0D 0A 09 57 72 69 74 65 45 6F 6C 3B 0D 0A 09    ;...WriteEol;...
00B0A0:  69 3A 3D 4F 6C 64 4C 69 6E 6B 5B 6E 65 77 69 6E    i:=OldLink[newin
00B0B0:  64 65 78 5D 3B 0D 0A 09 57 48 49 4C 45 20 28 6E    dex];...WHILE (n
00B0C0:  65 77 69 6E 64 65 78 3C 3D 4E 65 77 4C 65 6E 29    ewindex<=NewLen)
00B0D0:  20 41 4E 44 20 28 69 3D 4F 6C 64 4C 69 6E 6B 5B     AND (i=OldLink[
00B0E0:  6E 65 77 69 6E 64 65 78 5D 29 20 44 4F 0D 0A 09    newindex]) DO...
00B0F0:  09 47 65 74 4C 69 6E 65 28 4E 65 77 73 2C 6E 65    .GetLine(News,ne
00B100:  0A 09 09 09 57 48 49 4C 45 20 28 6A 3C 3D 4E 65    ....WHILE (j<=Ne
00B110:  77 4C 65 6E 29 20 41 4E 44 20 28 69 3C 3D 4F 6C    wLen) AND (i<=Ol
00B120:  64 4C 65 6E 29 20 41 4E 44 20 28 4F 6C 64 4C 69    dLen) AND (OldLi
00B130:  6E 6B 5B 6A 2D 31 5D 3D 69 2D 31 29 20 0D 0A 09    nk[j-1]=i-1) ...
00B140:  09 09 09 41 4E 44 20 28 4E 65 77 48 61 73 68 5B    ...AND (NewHash[
00B150:  6A 5D 3D 4F 6C 64 48 61 73 68 5B 69 5D 29 20 44    j]=OldHash[i]) D
00B160:  4F 0D 0A 09 09 09 09 4F 6C 64 4C 69 6E 6B 5B 6A    O......OldLink[j
00B170:  5D 3A 3D 69 3B 0D 0A 09 09 09 09 4E 65 77 4C 69    ]:=i;......NewLi
00B180:  6E 6B 5B 69 5D 3A 3D 6A 3B 0D 0A 0D 0A 09 09 09    nk[i]:=j;.......
00B190:  09 28 2A 73 74 69 6C 6C 20 68 6F 6C 64 73 2A 29    .(*still holds*)
00B1A0:  0D 0A 20 09 09 09 09 49 4E 43 28 69 29 3B 0D 0A    .. ....INC(i);..
00B1B0:  09 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09    ....INC(j);.....
00B1C0:  09 45 4E 44 3B 0D 0A 09 09 09 6B 3A 3D 69 3B 0D    .END;.....k:=i;.
00B1D0:  0A 09 09 45 4C 53 45 09 49 4E 43 28 6B 29 0D 0A    ...ELSE.INC(k)..
00B1E0:  09 09 09 45 4E 44 20 28 2A 57 48 49 4C 45 20 6B    ...END (*WHILE k
00B1F0:  3C 3D 4F 6C 64 4C 65 6E 2A 29 3B 0D 0A 09 09 45    <=OldLen*);....E
00B200:  4E 44 3B 0D 0A 0D 0A 09 28 2A 67 72 6F 77 20 66    ND;.....(*grow f
00B210:  6F 72 77 61 72 64 73 20 66 72 6F 6D 20 62 65 67    orwards from beg
00B220:  69 6E 6E 69 6E 67 20 6F 66 20 66 69 6C 65 73 2A    inning of files*
00B230:  29 0D 0A 0D 0A 09 69 3A 3D 31 3B 0D 0A 09 6A 3A    ).....i:=1;...j:
00B240:  3D 31 3B 0D 0A 09 57 48 49 4C 45 20 28 69 3C 3D    =1;...WHILE (i<=
00B250:  4F 6C 64 4C 65 6E 29 20 41 4E 44 20 28 6A 3C 3D    OldLen) AND (j<=
00B260:  4E 65 77 4C 65 6E 29 20 0D 0A 09 09 41 4E 44 20    NewLen) ....AND 
00B270:  28 4F 6C 64 48 61 73 68 5B 69 5D 3D 4E 65 77 48    (OldHash[i]=NewH
00B280:  61 73 68 5B 6A 5D 29 20 0D 0A 09 09 41 4E 44 20    ash[j]) ....AND 
00B290:  28 4E 65 77 4C 69 6E 6B 5B 69 5D 3D 30 29 20 41    (NewLink[i]=0) A
00B2A0:  4E 44 20 28 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3D 30    ND (OldLink[j]=0
00B2B0:  29 20 44 4F 0D 0A 0D 0A 09 09 28 2A 74 68 65 20    ) DO......(*the 
00B2C0:  6C 61 73 74 20 6C 69 6E 65 20 6F 66 20 74 68 65    last line of the
00B2D0:  20 63 6F 6E 64 69 74 69 6F 6E 20 69 73 20 70 72     condition is pr
00B2E0:  6F 62 61 62 6C 79 20 6E 6F 74 0D 0A 09 09 20 20    obably not....  
00B2F0:  6E 65 63 65 73 73 61 72 79 2C 20 62 75 74 20 61    necessary, but a
00B300:  77 6C 69 6E 65 29 3B 0D 0A 09 09 50 72 69 6E 74    wline);....Print
00B310:  28 6E 65 77 6C 69 6E 65 29 3B 0D 0A 09 09 57 72    (newline);....Wr
00B320:  69 74 65 45 6F 6C 3B 0D 0A 09 09 49 4E 43 28 6E    iteEol;....INC(n
00B330:  65 77 69 6E 64 65 78 29 3B 0D 0A 09 09 49 4E 43    ewindex);....INC
00B340:  28 69 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 46    (i);....END;...F
00B350:  4F 52 20 69 3A 3D 31 20 54 4F 20 37 39 20 44 4F    OR i:=1 TO 79 DO
00B360:  20 57 72 69 74 65 43 68 61 72 28 4C 69 73 74 2C     WriteChar(List,
00B370:  27 2A 27 29 20 45 4E 44 3B 0D 0A 09 57 72 69 74    '*') END;...Writ
00B380:  65 45 6F 6C 3B 0D 0A 09 45 4E 44 20 42 6C 6F 63    eEol;...END Bloc
00B390:  6B 4D 6F 76 65 3B 0D 0A 0D 0A 42 45 47 49 4E 0D    kMove;....BEGIN.
00B3A0:  0A 09 0D 0A 09 6F 6C 64 69 6E 64 65 78 3A 3D 31    .....oldindex:=1
00B3B0:  3B 09 28 2A 63 75 72 72 65 6E 74 20 6C 69 6E 65    ;.(*current line
00B3C0:  20 69 6E 20 6F 6C 64 20 66 69 6C 65 2A 29 0D 0A     in old file*)..
00B3D0:  09 6E 65 77 69 6E 64 65 78 3A 3D 31 3B 09 28 2A    .newindex:=1;.(*
00B3E0:  63 75 72 72 65 6E 74 20 6C 69 6E 65 20 69 6E 20    current line in 
00B3F0:  6E 65 77 20 62 75 66 66 65 72 2A 29 0D 0A 0D 0A    new buffer*)....
00B400:  09 28 2A 09 43 61 75 74 69 6F 6E 3A 20 57 65 6C    .(*.Caution: Wel
00B410:  6C 20 63 6F 6D 6D 65 6E 74 65 64 20 63 6F 64 65    l commented code
00B420:  20 61 68 65 61 64 0D 0A 09 09 09 20 50 72 6F 67     ahead..... Prog
00B430:  72 61 6D 6D 65 72 20 70 72 6F 62 61 62 6C 79 20    rammer probably 
00B440:  64 69 64 6E 27 74 20 75 6E 64 65 72 73 74 61 6E    didn't understan
00B450:  64 20 77 68 61 74 20 68 65 20 77 61 73 20 64 6F    d what he was do
00B460:  69 6E 67 20 0D 0A 09 09 0D 0A 09 09 2A 29 0D 0A    ing ........*)..
00B470:  09 57 48 49 4C 45 20 28 6F 6C 64 69 6E 64 65 78    .WHILE (oldindex
00B480:  3C 3D 4F 6C 64 4C 65 6E 29 20 4F 52 20 28 6E 65    <=OldLen) OR (ne
00B490:  77 69 6E 64 65 78 3C 3D 4E 65 77 4C 65 6E 29 20    windex<=NewLen) 
00B4A0:  44 4F 0D 0A 09 09 28 2A 09 66 69 72 73 74 20 63    DO....(*.first c
00B4B0:  68 65 63 6B 20 69 66 20 65 69 74 68 65 72 20 69    heck if either i
00B4C0:  6E 64 65 78 20 69 73 20 6F 66 66 20 65 6E 64 0D    ndex is off end.
00B4D0:  0A 09 09 09 6F 66 20 66 69 6C 65 2A 29 0D 0A 09    ....of file*)...
00B4E0:  0D 0A 09 09 49 46 20 6E 65 77 69 6E 64 65 78 3E    ....IF newindex>
00B4F0:  4E 65 77 4C 65 6E 20 54 48 45 4E 20 0D 0A 09 09    NewLen THEN ....
00B500:  76 6F 69 64 73 20 77 6F 72 72 79 69 6E 67 20 61    voids worrying a
00B510:  62 6F 75 74 20 70 61 74 68 6F 6C 6F 67 69 63 61    bout pathologica
00B520:  6C 20 63 61 73 65 2A 29 0D 0A 0D 0A 09 09 4E 65    l case*)......Ne
00B530:  77 4C 69 6E 6B 5B 69 5D 3A 3D 6A 3B 0D 0A 09 09    wLink[i]:=j;....
00B540:  4F 6C 64 4C 69 6E 6B 5B 6A 5D 3A 3D 69 3B 0D 0A    OldLink[j]:=i;..
00B550:  09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 49 4E 43    ..INC(i);....INC
00B560:  28 6A 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A    (j);....END;....
00B570:  09 28 2A 67 72 6F 77 20 62 61 63 6B 77 61 72 64    .(*grow backward
00B580:  73 20 66 72 6F 6D 20 65 6E 64 20 6F 66 20 66 69    s from end of fi
00B590:  6C 65 73 2A 29 0D 0A 09 69 3A 3D 4F 6C 64 4C 65    les*)...i:=OldLe
00B5A0:  6E 3B 0D 0A 09 6A 3A 3D 4E 65 77 4C 65 6E 3B 0D    n;...j:=NewLen;.
00B5B0:  0A 09 57 48 49 4C 45 20 28 69 3E 30 29 20 41 4E    ..WHILE (i>0) AN
00B5C0:  44 20 28 6A 3E 30 29 20 0D 0A 09 09 41 4E 44 20    D (j>0) ....AND 
00B5D0:  28 4F 6C 64 48 61 73 68 5B 69 5D 3D 4E 65 77 48    (OldHash[i]=NewH
00B5E0:  61 73 68 5B 6A 5D 29 0D 0A 09 09 41 4E 44 20 28    ash[j])....AND (
00B5F0:  4E 65 77 4C 69 6E 6B 5B 69 5D 3D 30 29 20 41 4E    NewLink[i]=0) AN
00B600:  44 20 28 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3D 30 29    D (OldLink[j]=0)
00B610:  20 44 4F 0D 0A 09 09 4E 65 77 4C 69 6E 6B 5B 69     DO....NewLink[i
00B620:  5D 3A 3D 6A 3B 0D 0A 09 09 4F 6C 64 4C 69 6E 6B    ]:=j;....OldLink
00B630:  5B 6A 5D 3A 3D 69 3B 0D 0A 09 09 44 45 43 28 69    [j]:=i;....DEC(i
00B640:  29 3B 0D 0A 09 09 44 45 43 28 6A 29 3B 0D 0A 09    );....DEC(j);...
00B650:  09 45 4E 44 3B 0D 0A 09 45 4E 44 20 47 65 6E 65    .END;...END Gene
00B660:  72 61 74 65 4C 69 6E 6B 73 3B 0D 0A 0D 0A 0D 0A    rateLinks;......
00B670:  50 52 4F 43 45 44 55 52 45 20 57 72 69 74 65 52    PROCEDURE WriteR
00B680:  65 73 75 6C 74 73 3B 0D 0A 56 41 52 09 6F 6C 64    esults;..VAR.old
00B690:  69 6E 64 65 78 2C 6E 65 77 69 6E 64 65 78 3A 43    index,newindex:C
00B6A0:  41 52 44 49 4E 41 4C 3B 0D 0A 09 6F 6C 64 6C 69    ARDINAL;...oldli
00B6B0:  6E 65 2C 6E 65 77 6C 69 6E 65 3A 41 52 52 41 59    ne,newline:ARRAY
00B6C0:  20 5B 31 2E 2E 38 30 5D 20 4F 46 20 43 48 41 52     [1..80] OF CHAR
00B6D0:  3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 47    ;....PROCEDURE G
00B6E0:  65 74 4C 69 6E 65 28 56 41 52 20 73 3A 53 54 52    etLine(VAR s:STR
00B6F0:  45 41 4D 3B 56 41 52 20 6C 3A 41 52 52 41 59 20    EAM;VAR l:ARRAY 
00B700:  09 44 65 6C 65 74 65 64 3B 0D 0A 09 09 09 49 4E    .Deleted;.....IN
00B710:  43 28 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 09 09    C(oldindex);....
00B720:  45 4C 53 49 46 20 6F 6C 64 69 6E 64 65 78 3E 4F    ELSIF oldindex>O
00B730:  6C 64 4C 65 6E 20 54 48 45 4E 0D 0A 09 09 09 49    ldLen THEN.....I
00B740:  6E 73 65 72 74 65 64 3B 0D 0A 09 09 09 49 4E 43    nserted;.....INC
00B750:  28 6E 65 77 69 6E 64 65 78 29 3B 0D 0A 09 09 45    (newindex);....E
00B760:  4C 53 49 46 20 4E 65 77 4C 69 6E 6B 5B 6F 6C 64    LSIF NewLink[old
00B770:  69 6E 64 65 78 5D 3D 30 20 54 48 45 4E 0D 0A 09    index]=0 THEN...
00B780:  09 09 44 65 6C 65 74 65 64 3B 0D 0A 09 09 09 49    ..Deleted;.....I
00B790:  4E 43 28 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 09    NC(oldindex);...
00B7A0:  09 45 4C 53 49 46 20 4F 6C 64 4C 69 6E 6B 5B 6E    .ELSIF OldLink[n
00B7B0:  65 77 69 6E 64 65 78 5D 3D 30 20 54 48 45 4E 0D    ewindex]=0 THEN.
00B7C0:  0A 09 09 09 49 6E 73 65 72 74 65 64 3B 0D 0A 09    ....Inserted;...
00B7D0:  09 09 49 4E 43 28 6E 65 77 69 6E 64 65 78 29 3B    ..INC(newindex);
00B7E0:  0D 0A 0D 0A 09 09 28 2A 09 69 66 20 70 6F 69 6E    ......(*.if poin
00B7F0:  74 65 72 73 20 6D 61 74 63 68 2C 20 6C 69 6E 65    ters match, line
00B800:  20 69 73 20 75 6E 63 68 61 6E 67 65 64 0D 0A 09     is unchanged...
00B810:  09 09 6F 72 20 69 66 20 61 20 70 6F 69 6E 74 65    ..or if a pointe
00B820:  72 20 69 73 20 7A 65 72 6F 2C 20 6C 69 6E 65 20    r is zero, line 
00B830:  69 73 20 6E 65 77 20 6F 72 20 64 65 6C 65 74 65    is new or delete
00B840:  64 2A 29 0D 0A 0D 0A 09 09 45 4C 53 49 46 20 28    d*)......ELSIF (
00B850:  4E 65 77 4C 69 6E 6B 5B 6F 6C 64 69 6E 64 65 78    NewLink[oldindex
00B860:  5D 3D 6E 65 77 69 6E 64 65 78 29 20 0D 0A 09 09    ]=newindex) ....
00B870:  20 20 20 20 41 4E 44 20 28 4F 6C 64 4C 69 6E 6B        AND (OldLink
00B880:  5B 6E 65 77 69 6E 64 65 78 5D 3D 6F 6C 64 69 6E    [newindex]=oldin
00B890:  64 65 78 29 20 54 48 45 4E 0D 0A 09 09 09 4E 6F    dex) THEN.....No
00B8A0:  43 68 61 6E 67 65 3B 0D 0A 09 09 09 49 4E 43 28    Change;.....INC(
00B8B0:  6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 09 09 09 49    oldindex);.....I
00B8C0:  4E 43 28 6E 65 77 69 6E 64 65 78 29 3B 0D 0A 0D    NC(newindex);...
00B8D0:  0A 0D 0A 28 2A 09 09 20 20 6E 6F 6E 65 20 6F 66    ...(*..  none of
00B8E0:  20 74 68 65 20 61 62 6F 76 65 3A 20 70 6F 69 6E     the above: poin
00B8F0:  74 65 72 73 20 64 6F 6E 27 74 20 6D 61 74 63 68    ters don't match
00B900:  4F 46 20 43 48 41 52 29 3B 0D 0A 42 45 47 49 4E    OF CHAR);..BEGIN
00B910:  0D 0A 09 53 77 69 74 63 68 49 6E 53 74 72 65 61    ...SwitchInStrea
00B920:  6D 28 73 29 3B 0D 0A 09 52 65 61 64 4C 69 6E 65    m(s);...ReadLine
00B930:  28 6C 29 3B 0D 0A 09 50 6F 70 49 6E 53 74 72 65    (l);...PopInStre
00B940:  61 6D 3B 0D 0A 09 45 4E 44 20 47 65 74 4C 69 6E    am;...END GetLin
00B950:  65 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20    e;....PROCEDURE 
00B960:  50 72 69 6E 74 28 61 3A 41 52 52 41 59 20 4F 46    Print(a:ARRAY OF
00B970:  20 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09 4F 75     CHAR);....(*.Ou
00B980:  74 70 75 74 20 61 20 6C 69 6E 65 20 74 72 75 6E    tput a line trun
00B990:  63 61 74 69 6E 67 20 74 72 61 69 6C 69 6E 67 20    cating trailing 
00B9A0:  73 70 61 63 65 73 2A 29 0D 0A 0D 0A 56 41 52 20    spaces*)....VAR 
00B9B0:  09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    .i,j:CARDINAL;..
00B9C0:  42 45 47 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09    BEGIN...i:=0;...
00B9D0:  6A 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 28 69    j:=0;...WHILE (i
00B9E0:  3C 3D 48 49 47 48 28 61 29 29 20 41 4E 44 20 28    <=HIGH(a)) AND (
00B9F0:  61 5B 69 5D 3C 3E 30 78 29 20 44 4F 0D 0A 09 09    a[i]<>0x) DO....
00BA00:  49 46 20 61 5B 69 5D 3C 3E 27 20 27 20 54 48 45    IF a[i]<>' ' THE
00BA10:  4E 0D 0A 09 09 09 46 4F 52 20 6A 3A 3D 6A 20 54    N.....FOR j:=j T
00BA20:  4F 20 69 20 44 4F 20 57 72 69 74 65 43 68 61 72    O i DO WriteChar
00BA30:  28 4C 69 73 74 2C 61 5B 6A 5D 29 20 45 4E 44 3B    (List,a[j]) END;
00BA40:  0D 0A 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09    .....INC(j);....
00BA50:  09 45 4E 44 3B 0D 0A 09 09 49 4E 43 28 69 29 3B    .END;....INC(i);
00BA60:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 0D 0A 09 45 4E    ....END;......EN
00BA70:  44 20 50 72 69 6E 74 3B 0D 0A 0D 0A 50 52 4F 43    D Print;....PROC
00BA80:  45 44 55 52 45 20 57 72 69 74 65 45 6F 6C 3B 0D    EDURE WriteEol;.
00BA90:  0A 42 45 47 49 4E 0D 0A 28 2A 09 64 65 62 75 67    .BEGIN..(*.debug
00BAA0:  20 63 6F 64 65 20 63 6F 6D 6D 65 6E 74 65 64 20     code commented 
00BAB0:  6F 75 74 0D 0A 0D 0A 09 53 77 69 74 63 68 4F 75    out.....SwitchOu
00BAC0:  74 53 74 72 65 61 6D 28 4C 69 73 74 29 3B 0D 0A    tStream(List);..
00BAD0:  09 57 72 69 74 65 43 61 72 64 28 6F 6C 64 69 6E    .WriteCard(oldin
00BAE0:  64 65 78 2C 36 29 3B 57 72 69 74 65 43 61 72 64    dex,6);WriteCard
00BAF0:  28 4E 65 77 4C 69 6E 6B 5B 6F 6C 64 69 6E 64 65    (NewLink[oldinde
00BB00:  20 62 75 74 0D 0A 09 09 20 20 65 61 63 68 20 70     but....  each p
00BB10:  6F 69 6E 74 65 72 20 70 6F 69 6E 74 73 20 73 6F    ointer points so
00BB20:  6D 65 77 68 65 72 65 0D 0A 0D 0A 09 09 20 20 49    mewhere......  I
00BB30:  66 20 74 68 65 20 74 65 78 74 20 69 6E 20 74 68    f the text in th
00BB40:  65 20 6E 65 77 20 66 69 6C 65 20 70 6F 69 6E 74    e new file point
00BB50:  65 64 20 74 6F 20 62 79 20 74 68 65 20 6F 6C 64    ed to by the old
00BB60:  20 66 69 6C 65 20 68 61 73 0D 0A 09 09 20 20 62     file has....  b
00BB70:  65 65 6E 20 70 61 73 73 65 64 2C 20 69 74 20 68    een passed, it h
00BB80:  61 73 20 61 6C 72 65 61 64 79 20 62 65 65 6E 20    as already been 
00BB90:  77 72 69 74 74 65 6E 20 73 6F 20 77 65 20 69 67    written so we ig
00BBA0:  6E 6F 72 65 20 74 68 65 0D 0A 09 09 20 20 6F 6C    nore the....  ol
00BBB0:  64 20 6C 69 6E 65 20 61 6E 64 20 6C 6F 6F 6B 20    d line and look 
00BBC0:  66 6F 72 20 73 6F 6D 65 74 68 69 6E 67 20 6D 6F    for something mo
00BBD0:  72 65 20 69 6E 74 65 72 65 73 74 69 6E 67 20 28    re interesting (
00BBE0:  65 2E 67 2E 20 0D 0A 09 09 20 20 61 20 53 63 6F    e.g. ....  a Sco
00BBF0:  74 73 6D 61 6E 20 77 69 6E 6E 69 6E 67 20 57 69    tsman winning Wi
00BC00:  6D 62 6C 65 64 6F 6E 29 0D 0A 0D 0A 09 09 20 20    mbledon)......  
00BC10:  42 65 63 61 75 73 65 20 6F 66 20 74 68 65 20 63    Because of the c
00BC20:  65 6E 74 72 61 6C 20 70 72 65 64 69 63 61 74 65    entral predicate
00BC30:  2C 20 77 65 20 6B 6E 6F 77 20 74 68 61 74 0D 0A    , we know that..
00BC40:  0D 0A 09 09 20 20 4E 65 77 4C 69 6E 6B 5B 4F 6C    ....  NewLink[Ol
00BC50:  64 4C 69 6E 6B 5B 6E 65 77 69 6E 64 65 78 5D 5D    dLink[newindex]]
00BC60:  3D 6E 65 77 69 6E 64 65 78 0D 0A 09 09 20 61 6E    =newindex.... an
00BC70:  64 0D 0A 09 09 20 20 4F 6C 64 4C 69 6E 6B 5B 4E    d....  OldLink[N
00BC80:  65 77 4C 69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 5D    ewLink[oldindex]
00BC90:  5D 3D 6F 6C 64 69 6E 64 65 78 0D 0A 0D 0A 2A 29    ]=oldindex....*)
00BCA0:  0D 0A 0D 0A 09 09 45 4C 53 49 46 20 4E 65 77 4C    ......ELSIF NewL
00BCB0:  69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 5D 3C 6E 65    ink[oldindex]<ne
00BCC0:  77 69 6E 64 65 78 20 54 48 45 4E 0D 0A 09 09 09    windex THEN.....
00BCD0:  53 6B 69 70 4F 6C 64 3B 0D 0A 09 09 09 49 4E 43    SkipOld;.....INC
00BCE0:  28 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 0D 0A 28    (oldindex);....(
00BCF0:  2A 20 09 09 20 20 20 73 6F 20 4E 65 77 4C 69 6E    * ..   so NewLin
00BD00:  78 5D 2C 36 29 3B 0D 0A 09 57 72 69 74 65 43 61    x],6);...WriteCa
00BD10:  72 64 28 6E 65 77 69 6E 64 65 78 2C 36 29 3B 57    rd(newindex,6);W
00BD20:  72 69 74 65 43 61 72 64 28 4F 6C 64 4C 69 6E 6B    riteCard(OldLink
00BD30:  5B 6E 65 77 69 6E 64 65 78 5D 2C 36 29 3B 0D 0A    [newindex],6);..
00BD40:  09 50 6F 70 4F 75 74 53 74 72 65 61 6D 3B 0D 0A    .PopOutStream;..
00BD50:  2A 29 0D 0A 09 57 72 69 74 65 43 68 61 72 28 4C    *)...WriteChar(L
00BD60:  69 73 74 2C 30 64 78 29 3B 0D 0A 09 57 72 69 74    ist,0dx);...Writ
00BD70:  65 43 68 61 72 28 4C 69 73 74 2C 30 61 78 29 3B    eChar(List,0ax);
00BD80:  0D 0A 09 45 4E 44 20 57 72 69 74 65 45 6F 6C 3B    ...END WriteEol;
00BD90:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65    ....PROCEDURE De
00BDA0:  6C 65 74 65 64 3B 0D 0A 0D 0A 28 2A 09 50 72 69    leted;....(*.Pri
00BDB0:  6E 74 20 6F 75 74 20 61 20 6C 69 6E 65 20 66 72    nt out a line fr
00BDC0:  6F 6D 20 74 68 65 20 6F 6C 64 20 66 69 6C 65 2A    om the old file*
00BDD0:  29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09 47 65 74    )....BEGIN...Get
00BDE0:  4C 69 6E 65 28 4F 6C 64 73 2C 6F 6C 64 6C 69 6E    Line(Olds,oldlin
00BDF0:  65 29 3B 0D 0A 09 50 72 69 6E 74 28 49 74 61 6C    e);...Print(Ital
00BE00:  69 63 73 4F 6E 29 3B 0D 0A 09 50 72 69 6E 74 28    icsOn);...Print(
00BE10:  6F 6C 64 6C 69 6E 65 29 3B 0D 0A 09 50 72 69 6E    oldline);...Prin
00BE20:  74 28 49 74 61 6C 69 63 73 4F 66 66 29 3B 0D 0A    t(ItalicsOff);..
00BE30:  09 57 72 69 74 65 45 6F 6C 3B 0D 0A 09 45 4E 44    .WriteEol;...END
00BE40:  20 44 65 6C 65 74 65 64 3B 0D 0A 0D 0A 50 52 4F     Deleted;....PRO
00BE50:  43 45 44 55 52 45 20 53 6B 69 70 4F 6C 64 3B 0D    CEDURE SkipOld;.
00BE60:  0A 42 45 47 49 4E 0D 0A 09 47 65 74 4C 69 6E 65    .BEGIN...GetLine
00BE70:  28 4F 6C 64 73 2C 6F 6C 64 6C 69 6E 65 29 3B 0D    (Olds,oldline);.
00BE80:  0A 09 45 4E 44 20 53 6B 69 70 4F 6C 64 3B 0D 0A    ..END SkipOld;..
00BE90:  0D 0A 50 52 4F 43 45 44 55 52 45 20 49 6E 73 65    ..PROCEDURE Inse
00BEA0:  72 74 65 64 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47    rted;..BEGIN...G
00BEB0:  65 74 4C 69 6E 65 28 4E 65 77 73 2C 6E 65 77 6C    etLine(News,newl
00BEC0:  69 6E 65 29 3B 0D 0A 09 50 72 69 6E 74 28 42 6F    ine);...Print(Bo
00BED0:  6C 64 4F 6E 29 3B 0D 0A 09 50 72 69 6E 74 28 6E    ldOn);...Print(n
00BEE0:  65 77 6C 69 6E 65 29 3B 0D 0A 09 50 72 69 6E 74    ewline);...Print
00BEF0:  28 42 6F 6C 64 4F 66 66 29 3B 0D 0A 09 57 72 69    (BoldOff);...Wri
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 41 02 00 00 00 02    ......R...A.....
00BF20:  0A 00 46 02 00 00 00 02 0A 00 42 02 00 00 00 02    ..F.......B.....
00BF30:  0A 00 47 02 00 00 00 02 0A 00 43 02 00 00 00 02    ..G.......C.....
00BF40:  0A 00 48 02 00 00 00 02 0A 00 44 02 00 00 00 02    ..H.......D.....
00BF50:  0A 00 49 02 00 00 00 02 0A 00 45 02 00 00 00 02    ..I.......E.....
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:  6B 5B 6F 6C 64 69 6E 64 65 78 5D 3E 3D 6E 65 77    k[oldindex]>=new
00C010:  69 6E 64 65 78 0D 0A 0D 0A 09 09 20 20 20 62 75    index......   bu
00C020:  74 2C 20 69 66 20 4E 65 77 4C 69 6E 6B 5B 6F 6C    t, if NewLink[ol
00C030:  64 69 6E 64 65 78 5D 3D 6E 65 77 69 6E 64 65 78    dindex]=newindex
00C040:  20 74 68 65 6E 20 0D 0A 09 09 09 20 20 20 4F 6C     then .....   Ol
00C050:  64 4C 69 6E 6B 5B 6E 65 77 69 6E 64 65 78 5D 3D    dLink[newindex]=
00C060:  4F 6C 64 4C 69 6E 6B 5B 4E 65 77 4C 69 6E 6B 5B    OldLink[NewLink[
00C070:  6F 6C 64 69 6E 64 65 78 5D 5D 3D 6E 65 77 6C 69    oldindex]]=newli
00C080:  6E 6B 0D 0A 09 09 09 77 68 69 63 68 20 69 73 20    nk.....which is 
00C090:  6E 6F 74 20 74 72 75 65 20 28 73 69 6E 63 65 20    not true (since 
00C0A0:  74 68 65 20 63 72 6F 73 73 2D 6C 69 6E 6B 65 64    the cross-linked
00C0B0:  20 63 61 73 65 20 77 61 73 20 68 61 6E 64 6C 65     case was handle
00C0C0:  64 0D 0A 09 09 09 65 61 72 6C 69 65 72 29 0D 0A    d.....earlier)..
00C0D0:  0D 0A 09 09 20 20 48 65 6E 63 65 20 4E 65 77 4C    ....  Hence NewL
00C0E0:  69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 5D 3E 6E 65    ink[oldindex]>ne
00C0F0:  77 69 6E 64 65 78 20 61 6E 64 20 77 65 20 63 61    windex and we ca
00C100:  6E 20 6C 65 61 76 65 20 74 68 65 20 6C 69 6E 65    n leave the line
00C110:  20 74 69 6C 6C 20 6C 61 74 65 72 0D 0A 0D 0A 09     till later.....
00C120:  09 20 20 57 65 20 6D 75 73 74 20 74 68 65 72 65    .  We must there
00C130:  66 6F 72 65 20 64 6F 20 73 6F 6D 65 74 68 69 6E    fore do somethin
00C140:  67 20 77 69 74 68 20 74 68 65 20 6E 65 77 20 6C    g with the new l
00C150:  69 6E 65 20 2D 20 69 74 20 69 73 20 74 68 65 0D    ine - it is the.
00C160:  0A 09 09 20 20 73 74 61 72 74 20 6F 66 20 61 20    ...  start of a 
00C170:  6D 6F 76 65 64 20 62 6C 6F 63 6B 0D 0A 2A 29 0D    moved block..*).
00C180:  0A 20 09 09 45 4C 53 45 0D 0A 09 09 09 42 6C 6F    . ..ELSE.....Blo
00C190:  63 6B 4D 6F 76 65 3B 09 28 2A 69 6E 63 20 6F 66    ckMove;.(*inc of
00C1A0:  20 6E 65 77 69 6E 64 65 78 20 64 6F 6E 65 20 69     newindex done i
00C1B0:  6E 20 62 6C 6F 63 6B 6D 6F 76 65 2A 29 0D 0A 09    n blockmove*)...
00C1C0:  09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 2A    ..END;....END;(*
00C1D0:  4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 57 72 69    LOOP*)...END Wri
00C1E0:  74 65 52 65 73 75 6C 74 73 3B 0D 0A 0D 0A 56 41    teResults;....VA
00C1F0:  52 09 50 61 72 61 6D 3A 41 52 52 41 59 20 5B 30    R.Param:ARRAY [0
00C200:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C210:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C220:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C230:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C240:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C250:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C260:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C270:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C280:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C290:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C2A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C2B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C2C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C2D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C2E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C2F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C3A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C3B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C3C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C3D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C3E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C3F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00C400:  2E 2E 32 5D 20 4F 46 20 50 61 72 61 6D 65 74 65    ..2] OF Paramete
00C410:  72 3B 0D 0A 09 43 6F 75 6E 74 3A 49 4E 54 45 47    r;...Count:INTEG
00C420:  45 52 3B 0D 0A 09 0D 0A 50 52 4F 43 45 44 55 52    ER;.....PROCEDUR
00C430:  45 20 4F 70 65 6E 49 6E 70 75 74 28 56 41 52 20    E OpenInput(VAR 
00C440:  73 3A 53 54 52 45 41 4D 3B 56 41 52 20 66 3A 46    s:STREAM;VAR f:F
00C450:  49 4C 45 3B 70 61 72 61 6D 3A 50 61 72 61 6D 65    ILE;param:Parame
00C460:  74 65 72 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4C    ter);..BEGIN...L
00C470:  6F 6F 6B 75 70 28 66 2C 46 69 6C 65 4E 61 6D 65    ookup(f,FileName
00C480:  28 70 61 72 61 6D 5E 2E 43 68 61 72 73 29 2C 72    (param^.Chars),r
00C490:  65 70 6C 79 29 3B 0D 0A 09 49 46 20 72 65 70 6C    eply);...IF repl
00C4A0:  79 3C 30 20 54 48 45 4E 0D 0A 09 09 57 72 69 74    y<0 THEN....Writ
00C4B0:  65 53 74 72 69 6E 67 28 27 20 43 6F 75 6C 64 20    eString(' Could 
00C4C0:  6E 6F 74 20 6F 70 65 6E 20 27 29 3B 0D 0A 09 09    not open ');....
00C4D0:  57 72 69 74 65 53 74 72 69 6E 67 28 70 61 72 61    WriteString(para
00C4E0:  6D 5E 2E 43 68 61 72 73 29 3B 0D 0A 09 09 57 72    m^.Chars);....Wr
00C4F0:  69 74 65 4C 6E 3B 0D 0A 09 09 48 41 4C 54 3B 0D    iteLn;....HALT;.
00C500:  0A 09 09 45 4E 44 3B 0D 0A 09 43 6F 6E 6E 65 63    ...END;...Connec
00C510:  74 28 73 2C 66 2C 69 6E 70 75 74 29 3B 0D 0A 09    t(s,f,input);...
00C520:  45 4E 44 20 4F 70 65 6E 49 6E 70 75 74 3B 0D 0A    END OpenInput;..
00C530:  50 52 4F 43 45 44 55 52 45 20 4F 70 65 6E 46 69    PROCEDURE OpenFi
00C540:  6C 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 09    les;..BEGIN.....
00C550:  28 2A 09 49 6E 70 75 74 20 74 68 65 20 70 61 72    (*.Input the par
00C560:  61 6D 65 74 65 72 73 2C 20 63 6F 6E 6E 65 63 74    ameters, connect
00C570:  20 74 68 65 20 66 69 6C 65 73 20 74 6F 20 73 74     the files to st
00C580:  72 65 61 6D 73 2A 29 0D 0A 0D 0A 09 47 65 74 50    reams*).....GetP
00C590:  61 72 61 6D 73 28 50 61 72 61 6D 2C 43 6F 75 6E    arams(Param,Coun
00C5A0:  74 29 3B 0D 0A 0D 0A 09 28 2A 09 49 66 20 6C 65    t);.....(*.If le
00C5B0:  73 73 20 74 68 61 6E 20 32 20 70 61 72 61 6D 65    ss than 2 parame
00C5C0:  74 65 72 73 2C 20 67 69 76 65 20 75 73 61 67 65    ters, give usage
00C5D0:  20 61 6E 64 20 65 78 69 74 2A 29 0D 0A 0D 0A 09     and exit*).....
00C5E0:  49 46 20 43 6F 75 6E 74 3C 32 20 54 48 45 4E 20    IF Count<2 THEN 
00C5F0:  55 73 61 67 65 20 45 4E 44 3B 0D 0A 0D 0A 09 28    Usage END;.....(
00C600:  4D 4F 44 55 4C 45 20 43 6F 6D 70 42 69 6E 3B 0D    MODULE CompBin;.
00C610:  0A 0D 0A 28 2A 09 43 6F 6D 70 61 72 65 20 74 77    ...(*.Compare tw
00C620:  6F 20 62 69 6E 61 72 79 20 66 69 6C 65 73 20 2A    o binary files *
00C630:  29 0D 0A 0D 0A 46 52 4F 4D 09 54 65 72 6D 69 6E    )....FROM.Termin
00C640:  61 6C 20 49 4D 50 4F 52 54 20 57 72 69 74 65 53    al IMPORT WriteS
00C650:  74 72 69 6E 67 2C 57 72 69 74 65 4C 6E 3B 0D 0A    tring,WriteLn;..
00C660:  46 52 4F 4D 09 53 6D 61 6C 6C 49 4F 20 20 49 4D    FROM.SmallIO  IM
00C670:  50 4F 52 54 20 57 72 69 74 65 48 65 78 3B 0D 0A    PORT WriteHex;..
00C680:  46 52 4F 4D 09 53 74 72 65 61 6D 73 20 49 4D 50    FROM.Streams IMP
00C690:  4F 52 54 20 44 69 72 65 63 74 69 6F 6E 3B 0D 0A    ORT Direction;..
00C6A0:  46 52 4F 4D 09 51 75 69 63 6B 53 74 72 20 49 4D    FROM.QuickStr IM
00C6B0:  50 4F 52 54 20 53 74 72 65 61 6D 52 65 63 6F 72    PORT StreamRecor
00C6C0:  64 2C 4F 70 65 6E 53 74 72 65 61 6D 73 2C 4F 70    d,OpenStreams,Op
00C6D0:  74 69 6F 6E 73 53 65 74 3B 0D 0A 46 52 4F 4D 09    tionsSet;..FROM.
00C6E0:  53 59 53 54 45 4D 20 20 20 49 4D 50 4F 52 54 20    SYSTEM   IMPORT 
00C6F0:  41 44 52 2C 42 59 54 45 3B 0D 0A 46 52 4F 4D 09    ADR,BYTE;..FROM.
00C700:  46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 49 4C    Files IMPORT FIL
00C710:  45 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B 3B 0D    E,SeqReadBlock;.
00C720:  0A 56 41 52 09 49 6E 31 2C 49 6E 32 3A 46 49 4C    .VAR.In1,In2:FIL
00C730:  45 3B 0D 0A 09 42 6C 6F 63 6B 31 2C 42 6C 6F 63    E;...Block1,Bloc
00C740:  6B 32 3A 41 52 52 41 59 20 5B 30 2E 2E 31 32 37    k2:ARRAY [0..127
00C750:  5D 20 4F 46 20 42 59 54 45 3B 0D 0A 09 72 65 70    ] OF BYTE;...rep
00C760:  6C 79 31 2C 72 65 70 6C 79 32 3A 49 4E 54 45 47    ly1,reply2:INTEG
00C770:  45 52 3B 0D 0A 09 4C 6F 63 3A 43 41 52 44 49 4E    ER;...Loc:CARDIN
00C780:  41 4C 3B 0D 0A 09 69 2C 6A 3A 43 41 52 44 49 4E    AL;...i,j:CARDIN
00C790:  41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 56    AL;..PROCEDURE V
00C7A0:  65 72 79 51 75 69 63 6B 28 29 3A 42 4F 4F 4C 45    eryQuick():BOOLE
00C7B0:  41 4E 3B 0D 0A 0D 0A 28 2A 09 4F 70 65 6E 20 61    AN;....(*.Open a
00C7C0:  20 73 74 72 65 61 6D 20 66 6F 72 20 69 6E 70 75     stream for inpu
00C7D0:  74 20 61 6E 64 20 61 20 73 74 72 65 61 6D 20 66    t and a stream f
00C7E0:  6F 72 20 6F 75 74 70 75 74 20 2A 29 0D 0A 56 41    or output *)..VA
00C7F0:  52 09 53 3A 41 52 52 41 59 5B 31 2E 2E 32 5D 20    R.S:ARRAY[1..2] 
00C800:  2A 09 49 66 20 33 20 70 61 72 61 6D 65 74 65 72    *.If 3 parameter
00C810:  73 2C 20 74 68 69 72 64 20 70 61 72 61 6D 65 74    s, third paramet
00C820:  65 72 20 69 73 20 66 69 6C 65 20 74 6F 20 72 65    er is file to re
00C830:  63 65 69 76 65 20 6F 75 74 70 75 74 0D 0A 09 09    ceive output....
00C840:  6F 74 68 65 72 77 69 73 65 2C 20 61 74 74 61 63    otherwise, attac
00C850:  68 20 6F 75 74 70 75 74 20 74 6F 20 74 68 65 20    h output to the 
00C860:  70 72 69 6E 74 65 72 20 28 4C 53 54 3A 29 0D 0A    printer (LST:)..
00C870:  09 2A 29 0D 0A 0D 0A 09 49 46 20 43 6F 75 6E 74    .*).....IF Count
00C880:  3D 33 20 54 48 45 4E 0D 0A 09 09 43 72 65 61 74    =3 THEN....Creat
00C890:  65 28 4C 69 73 74 46 2C 46 69 6C 65 4E 61 6D 65    e(ListF,FileName
00C8A0:  28 50 61 72 61 6D 5B 43 6F 75 6E 74 2D 31 5D 5E    (Param[Count-1]^
00C8B0:  2E 43 68 61 72 73 29 2C 72 65 70 6C 79 29 3B 0D    .Chars),reply);.
00C8C0:  0A 09 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54    ...IF reply<>0 T
00C8D0:  48 45 4E 0D 0A 09 09 09 57 72 69 74 65 53 74 72    HEN.....WriteStr
00C8E0:  69 6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F 74 20    ing(' Could not 
00C8F0:  63 72 65 61 74 65 20 6C 69 73 74 20 66 69 6C 65    create list file
00C900:  27 29 3B 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B    ');.....WriteLn;
00C910:  0D 0A 09 09 09 48 41 4C 54 3B 0D 0A 09 09 09 45    .....HALT;.....E
00C920:  4E 44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 43 72    ND;...ELSE....Cr
00C930:  65 61 74 65 28 4C 69 73 74 46 2C 27 4C 53 54 3A    eate(ListF,'LST:
00C940:  27 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 45 4E 44    ',reply);....END
00C950:  3B 0D 0A 09 43 6F 6E 6E 65 63 74 28 4C 69 73 74    ;...Connect(List
00C960:  2C 4C 69 73 74 46 2C 6F 75 74 70 75 74 29 3B 0D    ,ListF,output);.
00C970:  0A 0D 0A 09 28 2A 09 4F 70 65 6E 20 74 68 65 20    ....(*.Open the 
00C980:  66 69 6C 65 73 20 74 6F 20 62 65 20 63 6F 6D 70    files to be comp
00C990:  61 72 65 64 09 2A 29 0D 0A 09 0D 0A 09 4F 70 65    ared.*)......Ope
00C9A0:  6E 49 6E 70 75 74 28 4F 6C 64 73 2C 4F 6C 64 66    nInput(Olds,Oldf
00C9B0:  2C 50 61 72 61 6D 5B 30 5D 29 3B 0D 0A 09 4F 70    ,Param[0]);...Op
00C9C0:  65 6E 49 6E 70 75 74 28 4E 65 77 73 2C 4E 65 77    enInput(News,New
00C9D0:  66 2C 50 61 72 61 6D 5B 31 5D 29 3B 09 0D 0A 09    f,Param[1]);....
00C9E0:  45 4E 44 20 4F 70 65 6E 46 69 6C 65 73 3B 0D 0A    END OpenFiles;..
00C9F0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 61 64    ..PROCEDURE Read
00CA00:  4F 46 20 53 74 72 65 61 6D 52 65 63 6F 72 64 3B    OF StreamRecord;
00CA10:  0D 0A 09 6F 3A 4F 70 74 69 6F 6E 73 53 65 74 3B    ...o:OptionsSet;
00CA20:  0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20 53    ..BEGIN...WITH S
00CA30:  5B 31 5D 20 44 4F 0D 0A 09 09 49 73 53 74 72 65    [1] DO....IsStre
00CA40:  61 6D 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 44 69    am:=FALSE;....Di
00CA50:  72 3A 3D 69 6E 70 75 74 3B 0D 0A 09 09 4C 6F 6F    r:=input;....Loo
00CA60:  6B 75 70 46 69 72 73 74 3A 3D 46 41 4C 53 45 3B    kupFirst:=FALSE;
00CA70:  0D 0A 09 09 4D 75 73 74 53 75 70 70 6C 79 3A 3D    ....MustSupply:=
00CA80:  46 41 4C 53 45 3B 0D 0A 09 09 46 69 6C 65 3A 3D    FALSE;....File:=
00CA90:  41 44 52 28 49 6E 31 29 3B 0D 0A 09 09 45 4E 44    ADR(In1);....END
00CAA0:  3B 0D 0A 09 57 49 54 48 20 53 5B 32 5D 20 44 4F    ;...WITH S[2] DO
00CAB0:  0D 0A 09 09 49 73 53 74 72 65 61 6D 3A 3D 46 41    ....IsStream:=FA
00CAC0:  4C 53 45 3B 0D 0A 09 09 44 65 66 61 75 6C 74 4E    LSE;....DefaultN
00CAD0:  61 6D 65 3A 3D 27 43 4F 4E 3A 27 3B 0D 0A 09 09    ame:='CON:';....
00CAE0:  44 69 72 3A 3D 69 6E 70 75 74 3B 0D 0A 09 09 4C    Dir:=input;....L
00CAF0:  6F 6F 6B 75 70 46 69 72 73 74 3A 3D 46 41 4C 53    ookupFirst:=FALS
00CB00:  45 3B 0D 0A 09 09 4D 75 73 74 53 75 70 70 6C 79    E;....MustSupply
00CB10:  3A 3D 54 52 55 45 3B 0D 0A 09 09 46 69 6C 65 3A    :=TRUE;....File:
00CB20:  3D 41 44 52 28 49 6E 32 29 3B 0D 0A 09 09 45 4E    =ADR(In2);....EN
00CB30:  44 3B 0D 0A 09 52 45 54 55 52 4E 20 4F 70 65 6E    D;...RETURN Open
00CB40:  53 74 72 65 61 6D 73 28 53 2C 6F 29 3B 0D 0A 09    Streams(S,o);...
00CB50:  45 4E 44 20 56 65 72 79 51 75 69 63 6B 3B 0D 0A    END VeryQuick;..
00CB60:  42 45 47 49 4E 0D 0A 09 49 46 20 20 56 65 72 79    BEGIN...IF  Very
00CB70:  51 75 69 63 6B 28 29 20 54 48 45 4E 0D 0A 09 09    Quick() THEN....
00CB80:  57 72 69 74 65 53 74 72 69 6E 67 28 27 46 69 6C    WriteString('Fil
00CB90:  65 73 20 6E 6F 74 20 66 6F 75 6E 64 20 27 29 3B    es not found ');
00CBA0:  0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09    ....WriteLn;....
00CBB0:  48 41 4C 54 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    HALT;....END;...
00CBC0:  4C 6F 63 3A 3D 30 3B 0D 0A 09 4C 4F 4F 50 0D 0A    Loc:=0;...LOOP..
00CBD0:  09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 28 49    ..SeqReadBlock(I
00CBE0:  6E 31 2C 41 44 52 28 42 6C 6F 63 6B 31 29 2C 31    n1,ADR(Block1),1
00CBF0:  32 38 2C 72 65 70 6C 79 31 29 3B 0D 0A 09 09 53    28,reply1);....S
00CC00:  49 6E 70 75 74 46 69 6C 65 73 3B 0D 0A 42 45 47    InputFiles;..BEG
00CC10:  49 4E 0D 0A 0D 0A 09 57 72 69 74 65 53 74 72 69    IN.....WriteStri
00CC20:  6E 67 28 27 20 52 65 61 64 69 6E 67 20 6F 6C 64    ng(' Reading old
00CC30:  20 66 69 6C 65 20 27 29 3B 0D 0A 09 4F 6C 64 4C     file ');...OldL
00CC40:  65 6E 3A 3D 52 65 61 64 53 74 72 65 61 6D 28 4F    en:=ReadStream(O
00CC50:  6C 64 73 2C 4F 6C 64 48 61 73 68 29 3B 0D 0A 09    lds,OldHash);...
00CC60:  57 72 69 74 65 43 61 72 64 28 4F 6C 64 4C 65 6E    WriteCard(OldLen
00CC70:  2C 35 29 3B 0D 0A 09 57 72 69 74 65 53 74 72 69    ,5);...WriteStri
00CC80:  6E 67 28 27 20 6C 69 6E 65 73 20 66 6F 75 6E 64    ng(' lines found
00CC90:  27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 0D 0A 09    ');WriteLn;.....
00CCA0:  57 72 69 74 65 53 74 72 69 6E 67 28 27 20 52 65    WriteString(' Re
00CCB0:  61 64 69 6E 67 20 6E 65 77 20 66 69 6C 65 20 27    ading new file '
00CCC0:  29 3B 0D 0A 09 4E 65 77 4C 65 6E 3A 3D 52 65 61    );...NewLen:=Rea
00CCD0:  64 53 74 72 65 61 6D 28 4E 65 77 73 2C 4E 65 77    dStream(News,New
00CCE0:  48 61 73 68 29 3B 0D 0A 09 57 72 69 74 65 43 61    Hash);...WriteCa
00CCF0:  72 64 28 4E 65 77 4C 65 6E 2C 35 29 3B 0D 0A 09    rd(NewLen,5);...
00CD00:  57 72 69 74 65 53 74 72 69 6E 67 28 27 20 6C 69    WriteString(' li
00CD10:  6E 65 73 20 66 6F 75 6E 64 27 29 3B 57 72 69 74    nes found');Writ
00CD20:  65 4C 6E 3B 0D 0A 09 45 4E 44 20 52 65 61 64 49    eLn;...END ReadI
00CD30:  6E 70 75 74 46 69 6C 65 73 3B 0D 0A 0D 0A 42 45    nputFiles;....BE
00CD40:  47 49 4E 09 28 2A 6D 61 69 6E 20 70 72 6F 67 72    GIN.(*main progr
00CD50:  61 6D 2A 29 0D 0A 0D 0A 09 4F 70 65 6E 46 69 6C    am*).....OpenFil
00CD60:  65 73 3B 0D 0A 09 52 65 61 64 49 6E 70 75 74 46    es;...ReadInputF
00CD70:  69 6C 65 73 3B 0D 0A 0D 0A 09 57 72 69 74 65 53    iles;.....WriteS
00CD80:  74 72 69 6E 67 28 27 20 47 65 6E 65 72 61 74 69    tring(' Generati
00CD90:  6E 67 20 63 72 6F 73 73 20 6C 69 6E 6B 73 27 29    ng cross links')
00CDA0:  3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 47 65 6E 65    ;WriteLn;...Gene
00CDB0:  72 61 74 65 4C 69 6E 6B 73 3B 0D 0A 09 57 72 69    rateLinks;...Wri
00CDC0:  74 65 53 74 72 69 6E 67 28 27 20 4C 69 73 74 69    teString(' Listi
00CDD0:  6E 67 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 0D    ng');WriteLn;...
00CDE0:  0A 09 28 2A 72 65 70 6F 73 69 74 69 6F 6E 20 73    ..(*reposition s
00CDF0:  74 72 65 61 6D 73 20 74 6F 20 62 65 67 69 6E 6E    treams to beginn
00CE00:  65 71 52 65 61 64 42 6C 6F 63 6B 28 49 6E 32 2C    eqReadBlock(In2,
00CE10:  41 44 52 28 42 6C 6F 63 6B 32 29 2C 31 32 38 2C    ADR(Block2),128,
00CE20:  72 65 70 6C 79 32 29 3B 0D 0A 09 09 57 72 69 74    reply2);....Writ
00CE30:  65 48 65 78 28 4C 6F 63 2C 34 29 3B 0D 0A 09 09    eHex(Loc,4);....
00CE40:  57 72 69 74 65 53 74 72 69 6E 67 28 30 64 78 29    WriteString(0dx)
00CE50:  3B 0D 0A 09 09 49 46 20 28 72 65 70 6C 79 31 3C    ;....IF (reply1<
00CE60:  3E 31 32 38 29 20 4F 52 20 28 72 65 70 6C 79 32    >128) OR (reply2
00CE70:  3C 3E 31 32 38 29 20 54 48 45 4E 20 45 58 49 54    <>128) THEN EXIT
00CE80:  20 45 4E 44 3B 0D 0A 09 09 69 3A 3D 30 3B 0D 0A     END;....i:=0;..
00CE90:  09 09 57 48 49 4C 45 20 28 69 3C 31 32 38 29 20    ..WHILE (i<128) 
00CEA0:  41 4E 44 20 28 42 6C 6F 63 6B 31 5B 69 5D 3D 42    AND (Block1[i]=B
00CEB0:  6C 6F 63 6B 32 5B 69 5D 29 20 44 4F 20 49 4E 43    lock2[i]) DO INC
00CEC0:  28 69 29 20 45 4E 44 3B 0D 0A 09 09 49 46 20 69    (i) END;....IF i
00CED0:  3C 31 32 38 20 54 48 45 4E 0D 0A 09 09 09 46 4F    <128 THEN.....FO
00CEE0:  52 20 69 3A 3D 30 20 54 4F 20 31 32 37 20 42 59    R i:=0 TO 127 BY
00CEF0:  20 38 20 44 4F 0D 0A 09 09 09 09 57 72 69 74 65     8 DO......Write
00CF00:  48 65 78 28 4C 6F 63 2B 69 2C 34 29 3B 0D 0A 09    Hex(Loc+i,4);...
00CF10:  09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27    ...WriteString('
00CF20:  3A 27 29 3B 0D 0A 09 09 09 09 46 4F 52 20 6A 3A    :');......FOR j:
00CF30:  3D 69 20 54 4F 20 69 2B 37 20 44 4F 0D 0A 09 09    =i TO i+7 DO....
00CF40:  09 09 09 57 72 69 74 65 48 65 78 28 42 6C 6F 63    ...WriteHex(Bloc
00CF50:  6B 31 5B 6A 5D 2C 32 29 3B 0D 0A 09 09 09 09 09    k1[j],2);.......
00CF60:  57 72 69 74 65 53 74 72 69 6E 67 28 27 20 27 29    WriteString(' ')
00CF70:  3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09    ;.......END;....
00CF80:  09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20    ..WriteString(' 
00CF90:  27 29 3B 0D 0A 09 09 09 09 46 4F 52 20 6A 3A 3D    ');......FOR j:=
00CFA0:  69 20 54 4F 20 69 2B 37 20 44 4F 0D 0A 09 09 09    i TO i+7 DO.....
00CFB0:  09 09 57 72 69 74 65 48 65 78 28 42 6C 6F 63 6B    ..WriteHex(Block
00CFC0:  32 5B 6A 5D 2C 32 29 3B 0D 0A 09 09 09 09 09 57    2[j],2);.......W
00CFD0:  72 69 74 65 53 74 72 69 6E 67 28 27 20 27 29 3B    riteString(' ');
00CFE0:  0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09    .......END;.....
00CFF0:  09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 09 45    .WriteLn;......E
00D000:  69 6E 67 2A 29 0D 0A 0D 0A 09 52 65 73 65 74 28    ing*).....Reset(
00D010:  4E 65 77 73 29 3B 0D 0A 09 52 65 73 65 74 28 4F    News);...Reset(O
00D020:  6C 64 73 29 3B 0D 0A 09 0D 0A 09 57 72 69 74 65    lds);......Write
00D030:  52 65 73 75 6C 74 73 3B 0D 0A 09 44 69 73 63 6F    Results;...Disco
00D040:  6E 6E 65 63 74 28 4C 69 73 74 2C 54 52 55 45 29    nnect(List,TRUE)
00D050:  3B 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 72 65 2E    ;...END Compare.
00D060:  0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
00D070:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
00D080:  66 20 6C 65 73 73 20 74 68 61 6E 20 38 20 63 68    f less than 8 ch
00D090:  61 72 61 63 74 65 72 73 20 69 73 20 72 65 71 75    aracters is requ
00D0A0:  69 72 65 64 0D 0A 0D 0A 09 54 68 65 20 63 6F 6E    ired.....The con
00D0B0:  74 72 6F 6C 20 63 68 61 72 61 63 74 65 72 73 20    trol characters 
00D0C0:  69 6E 20 74 68 65 20 73 75 70 70 6C 69 65 64 20    in the supplied 
00D0D0:  70 72 6F 67 72 61 6D 20 61 72 65 20 73 65 74 20    program are set 
00D0E0:  66 6F 72 20 61 20 53 54 41 52 20 44 50 53 35 31    for a STAR DPS51
00D0F0:  30 2C 0D 0A 09 77 68 69 63 68 20 69 73 20 73 75    0,...which is su
00D100:  70 70 6F 73 65 64 20 74 6F 20 62 65 20 45 70 73    pposed to be Eps
00D110:  6F 6E 20 63 6F 6D 70 61 74 69 62 6C 65 2C 20 73    on compatible, s
00D120:  6F 20 74 68 65 20 70 72 6F 67 72 61 6D 20 6D 61    o the program ma
00D130:  79 20 77 65 6C 6C 20 72 75 6E 20 27 61 73 20 69    y well run 'as i
00D140:  73 27 0D 0A 09 6F 6E 20 45 70 73 6F 6E 73 20 61    s'...on Epsons a
00D150:  6E 64 20 45 70 73 6F 6E 20 63 6C 6F 6E 65 73 0D    nd Epson clones.
00D160:  0A 0D 0A 09 54 68 65 20 70 72 6F 67 72 61 6D 20    ....The program 
00D170:  69 73 20 62 61 73 65 64 20 6F 6E 20 61 20 6D 65    is based on a me
00D180:  74 68 6F 64 20 64 65 73 63 72 69 62 65 64 20 62    thod described b
00D190:  79 20 50 61 75 6C 20 48 65 63 6B 65 6C 20 27 41    y Paul Heckel 'A
00D1A0:  20 54 65 63 68 6E 69 71 75 65 20 66 6F 72 0D 0A     Technique for..
00D1B0:  09 49 73 6F 6C 61 74 69 6E 67 20 44 69 66 66 65    .Isolating Diffe
00D1C0:  72 65 6E 63 65 73 20 62 65 74 77 65 65 6E 20 46    rences between F
00D1D0:  69 6C 65 73 27 2C 20 43 6F 6D 6D 75 6E 69 63 61    iles', Communica
00D1E0:  74 69 6F 6E 73 20 6F 66 20 74 68 65 20 41 43 4D    tions of the ACM
00D1F0:  2C 20 56 6F 6C 20 32 31 0D 0A 09 4E 6F 20 34 2C    , Vol 21...No 4,
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 41 02 00 00 00 02    ......R...A.....
00D220:  0B 00 46 02 00 00 00 02 0B 00 42 02 00 00 00 02    ..F.......B.....
00D230:  0B 00 47 02 00 00 00 02 0B 00 43 02 00 00 00 02    ..G.......C.....
00D240:  0B 00 48 02 00 00 00 02 0B 00 44 02 00 00 00 02    ..H.......D.....
00D250:  0B 00 49 02 00 00 00 02 0B 00 45 02 00 00 00 02    ..I.......E.....
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:  4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    ND;.....END;....
00D310:  4C 6F 63 3A 3D 4C 6F 63 2B 31 32 38 3B 0D 0A 09    Loc:=Loc+128;...
00D320:  09 45 4E 44 3B 0D 0A 09 45 4E 44 20 43 6F 6D 70    .END;...END Comp
00D330:  42 69 6E 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    Bin.............
00D340:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
00D350:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
00D360:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
00D370:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
00D380:  3A 43 48 41 52 3B 0D 0A 09 43 68 61 72 50 6F 73    :CHAR;...CharPos
00D390:  3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 70 6F 73    :CARDINAL;.(*pos
00D3A0:  69 74 69 6F 6E 20 69 6E 20 6C 69 6E 65 2A 29 0D    ition in line*).
00D3B0:  0A 09 0D 0A 0D 0A 28 2A 09 46 6F 72 20 65 61 63    ......(*.For eac
00D3C0:  68 20 66 69 6C 65 2C 20 77 65 20 68 61 76 65 20    h file, we have 
00D3D0:  61 6E 20 61 72 72 61 79 20 6F 66 20 68 61 73 68    an array of hash
00D3E0:  20 74 6F 74 61 6C 73 20 66 6F 72 20 74 68 65 20     totals for the 
00D3F0:  6C 69 6E 65 73 20 6F 66 20 74 68 65 20 66 69 6C    lines of the fil
00D400:  65 0D 0A 09 55 73 69 6E 67 20 68 61 73 68 20 74    e...Using hash t
00D410:  6F 74 61 6C 73 20 69 6E 73 74 65 61 64 20 6F 66    otals instead of
00D420:  20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 6C 69     the original li
00D430:  6E 65 73 20 63 61 75 73 65 73 20 61 20 73 6C 69    nes causes a sli
00D440:  67 68 74 20 63 68 61 6E 63 65 0D 0A 09 74 68 61    ght chance...tha
00D450:  74 20 6C 69 6E 65 73 20 77 69 6C 6C 20 6D 61 74    t lines will mat
00D460:  63 68 20 77 68 65 6E 20 74 68 65 79 20 73 68 6F    ch when they sho
00D470:  75 6C 64 20 6E 6F 74 2C 20 62 75 74 20 61 6C 6C    uld not, but all
00D480:  6F 77 73 20 6C 61 72 67 65 72 20 66 69 6C 65 73    ows larger files
00D490:  0D 0A 09 74 6F 20 62 65 20 63 6F 6D 70 61 72 65    ...to be compare
00D4A0:  64 20 61 6E 64 20 61 6C 73 6F 20 6D 61 6B 65 73    d and also makes
00D4B0:  20 69 74 20 70 6F 73 73 69 62 6C 65 20 74 6F 20     it possible to 
00D4C0:  65 78 74 65 6E 64 20 74 68 65 20 70 72 6F 67 72    extend the progr
00D4D0:  61 6D 20 69 6E 20 74 68 65 20 66 75 74 75 72 65    am in the future
00D4E0:  0D 0A 09 74 6F 20 77 6F 72 6B 20 77 69 74 68 20    ...to work with 
00D4F0:  72 65 61 73 6F 6E 61 62 6C 65 20 73 70 65 65 64    reasonable speed
00D500:  29 0D 0A 0D 0A 54 59 50 45 20 09 0D 0A 09 43 6F    )....TYPE ....Co
00D510:  6D 70 43 6C 61 73 73 3D 28 57 68 6F 6C 65 2C 4E    mpClass=(Whole,N
00D520:  61 6D 65 2C 54 79 70 65 29 3B 0D 0A 09 46 69 6C    ame,Type);...Fil
00D530:  65 52 65 63 6F 72 64 3D 52 45 43 4F 52 44 0D 0A    eRecord=RECORD..
00D540:  09 09 44 65 76 69 63 65 3A 43 48 41 52 3B 0D 0A    ..Device:CHAR;..
00D550:  09 09 4E 61 6D 65 3A 41 52 52 41 59 5B 31 2E 2E    ..Name:ARRAY[1..
00D560:  38 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 09 54    8] OF CHAR;....T
00D570:  79 70 65 3A 41 52 52 41 59 5B 31 2E 2E 33 5D 20    ype:ARRAY[1..3] 
00D580:  4F 46 20 43 48 41 52 3B 0D 0A 09 09 45 4E 44 3B    OF CHAR;....END;
00D590:  0D 0A 09 50 46 69 6C 65 4E 61 6D 65 3D 50 4F 49    ...PFileName=POI
00D5A0:  4E 54 45 52 20 54 4F 20 46 69 6C 65 52 65 63 6F    NTER TO FileReco
00D5B0:  72 64 3B 0D 0A 09 46 69 6C 65 41 72 72 61 79 3D    rd;...FileArray=
00D5C0:  41 52 52 41 59 5B 31 2E 2E 4D 61 78 46 69 6C 65    ARRAY[1..MaxFile
00D5D0:  73 5D 20 4F 46 20 46 69 6C 65 52 65 63 6F 72 64    s] OF FileRecord
00D5E0:  3B 0D 0A 56 41 52 09 0D 0A 09 50 61 72 61 6D 3A    ;..VAR....Param:
00D5F0:  41 52 52 41 59 5B 31 2E 2E 34 5D 20 4F 46 20 50    ARRAY[1..4] OF P
00D600:  61 72 61 6D 65 74 65 72 3B 09 09 28 2A 61 72 65    arameter;..(*are
00D610:  61 20 66 6F 72 20 63 6F 6D 6D 61 6E 64 20 6C 69    a for command li
00D620:  6E 65 2A 29 0D 0A 09 43 6F 75 6E 74 3A 49 4E 54    ne*)...Count:INT
00D630:  45 47 45 52 3B 09 09 09 09 28 2A 70 61 72 61 6D    EGER;....(*param
00D640:  65 74 65 72 73 2A 29 0D 0A 0D 0A 09 4C 65 66 74    eters*).....Left
00D650:  4E 61 6D 65 73 2C 52 69 67 68 74 4E 61 6D 65 73    Names,RightNames
00D660:  3A 46 69 6C 65 41 72 72 61 79 3B 0D 0A 09 4C 65    :FileArray;...Le
00D670:  66 74 4E 61 6D 65 43 6F 75 6E 74 2C 52 69 67 68    ftNameCount,Righ
00D680:  74 4E 61 6D 65 43 6F 75 6E 74 3A 49 4E 54 45 47    tNameCount:INTEG
00D690:  45 52 3B 0D 0A 0D 0A 09 43 6F 6D 70 63 6C 61 73    ER;.....Compclas
00D6A0:  73 3A 43 6F 6D 70 43 6C 61 73 73 3D 57 68 6F 6C    s:CompClass=Whol
00D6B0:  65 3B 0D 0A 09 4F 75 74 70 75 74 41 64 64 65 64    e;...OutputAdded
00D6C0:  3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D    :BOOLEAN=FALSE;.
00D6D0:  0A 09 4F 75 74 70 75 74 45 71 75 61 6C 3A 42 4F    ..OutputEqual:BO
00D6E0:  4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 43    OLEAN=FALSE;...C
00D6F0:  6F 6D 70 61 72 65 43 6F 6E 74 65 6E 74 73 3A 42    ompareContents:B
00D700:  28 2A 09 09 52 65 76 69 73 69 6F 6E 20 48 69 73    (*..Revision His
00D710:  74 6F 72 79 3A 0D 0A 0D 0A 09 09 32 34 20 4D 61    tory:......24 Ma
00D720:  72 63 68 20 38 36 20 20 44 61 76 65 20 4D 6F 6F    rch 86  Dave Moo
00D730:  72 65 0D 0A 09 09 09 46 69 78 65 64 20 63 6F 6D    re.....Fixed com
00D740:  70 69 6C 61 74 69 6F 6E 20 65 72 72 6F 72 73 20    pilation errors 
00D750:  63 61 75 73 65 64 20 62 79 20 75 70 67 72 61 64    caused by upgrad
00D760:  69 6E 67 20 6F 66 0D 0A 09 09 09 63 6F 6D 70 69    ing of.....compi
00D770:  6C 65 72 20 65 72 72 6F 72 20 63 68 65 63 6B 69    ler error checki
00D780:  6E 67 2E 0D 0A 09 09 09 49 6E 63 72 65 61 73 65    ng......Increase
00D790:  64 20 4D 61 78 46 69 6C 65 73 20 74 6F 20 35 31    d MaxFiles to 51
00D7A0:  32 2E 0D 0A 0D 0A 09 09 42 75 67 73 3A 0D 0A 0D    2.......Bugs:...
00D7B0:  0A 09 09 09 46 61 69 6C 73 20 69 66 20 6D 6F 72    ....Fails if mor
00D7C0:  65 20 74 68 61 6E 20 4D 61 78 46 69 6C 65 73 20    e than MaxFiles 
00D7D0:  66 69 6C 65 73 20 61 72 65 20 66 6F 75 6E 64 2E    files are found.
00D7E0:  20 54 68 69 73 0D 0A 09 09 09 69 73 20 6E 6F 74     This.....is not
00D7F0:  20 61 20 70 72 6F 62 6C 65 6D 20 75 6E 64 65 72     a problem under
00D800:  20 43 50 2F 4D 20 73 69 6E 63 65 20 64 69 72 65     CP/M since dire
00D810:  63 74 6F 72 69 65 73 20 66 69 6C 6C 0D 0A 09 09    ctories fill....
00D820:  09 62 65 66 6F 72 65 20 74 68 61 74 20 6D 61 6E    .before that man
00D830:  79 20 66 69 6C 65 73 20 61 72 65 20 66 6F 75 6E    y files are foun
00D840:  64 2C 20 62 75 74 20 69 74 20 63 61 6E 20 63 61    d, but it can ca
00D850:  75 73 65 0D 0A 09 09 09 70 72 6F 62 6C 65 6D 73    use.....problems
00D860:  20 75 6E 64 65 72 20 4D 53 44 4F 53 20 28 77 69     under MSDOS (wi
00D870:  74 68 20 61 20 5A 38 30 20 63 61 72 64 29 0D 0A    th a Z80 card)..
00D880:  2A 29 0D 0A 09 09 09 0D 0A 0D 0A 28 2A 24 6C 2D    *).........(*$l-
00D890:  2A 29 0D 0A 4D 4F 44 55 4C 45 20 43 6F 6D 70 44    *)..MODULE CompD
00D8A0:  69 72 3B 0D 0A 0D 0A 28 2A 09 43 6F 6D 70 44 69    ir;....(*.CompDi
00D8B0:  72 20 2D 20 43 6F 6D 70 61 72 65 20 74 77 6F 20    r - Compare two 
00D8C0:  64 69 72 65 63 74 6F 72 69 65 73 0D 0A 0D 0A 09    directories.....
00D8D0:  44 61 76 65 20 4D 6F 6F 72 65 0D 0A 09 43 65 72    Dave Moore...Cer
00D8E0:  65 6E 6B 6F 66 20 43 6F 6D 70 75 74 69 6E 67 0D    enkof Computing.
00D8F0:  0A 09 50 4F 20 42 6F 78 20 33 30 35 20 57 79 6E    ..PO Box 305 Wyn
00D900:  4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09    OOLEAN=FALSE;...
00D910:  4F 75 74 70 75 74 44 65 6C 65 74 65 64 3A 42 4F    OutputDeleted:BO
00D920:  4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 4F    OLEAN=FALSE;...O
00D930:  75 74 70 75 74 4D 6F 64 69 66 69 65 64 3A 42 4F    utputModified:BO
00D940:  4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 0D 0A    OLEAN=FALSE;....
00D950:  09 4C 69 73 74 4F 70 65 6E 3A 42 4F 4F 4C 45 41    .ListOpen:BOOLEA
00D960:  4E 3D 46 41 4C 53 45 3B 0D 0A 09 4C 69 73 74 3A    N=FALSE;...List:
00D970:  53 54 52 45 41 4D 3B 0D 0A 09 4C 69 73 74 46 3A    STREAM;...ListF:
00D980:  46 49 4C 45 3B 0D 0A 50 52 4F 43 45 44 55 52 45    FILE;..PROCEDURE
00D990:  20 43 72 61 63 6B 46 69 6C 65 4E 61 6D 65 28 54     CrackFileName(T
00D9A0:  65 78 74 3A 41 52 52 41 59 20 4F 46 20 43 48 41    ext:ARRAY OF CHA
00D9B0:  52 3B 56 41 52 20 52 65 63 3A 46 69 6C 65 52 65    R;VAR Rec:FileRe
00D9C0:  63 6F 72 64 29 3B 0D 0A 0D 0A 28 2A 09 43 6F 6E    cord);....(*.Con
00D9D0:  76 65 72 74 20 74 68 65 20 74 65 78 74 20 66 6F    vert the text fo
00D9E0:  72 6D 20 6F 66 20 61 20 66 69 6C 65 20 6E 61 6D    rm of a file nam
00D9F0:  65 20 74 6F 20 74 68 65 0D 0A 09 65 78 70 61 6E    e to the...expan
00DA00:  64 65 64 20 66 6F 72 6D 2A 29 0D 0A 56 41 52 09    ded form*)..VAR.
00DA10:  69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42    i,j:CARDINAL;..B
00DA20:  45 47 49 4E 0D 0A 09 57 49 54 48 20 52 65 63 20    EGIN...WITH Rec 
00DA30:  44 4F 0D 0A 09 09 49 46 20 54 65 78 74 5B 31 5D    DO....IF Text[1]
00DA40:  3D 27 3A 27 20 54 48 45 4E 0D 0A 09 09 09 44 65    =':' THEN.....De
00DA50:  76 69 63 65 3A 3D 43 41 50 28 54 65 78 74 5B 30    vice:=CAP(Text[0
00DA60:  5D 29 3B 0D 0A 09 09 09 69 3A 3D 32 3B 0D 0A 09    ]);.....i:=2;...
00DA70:  09 45 4C 53 45 0D 0A 09 09 09 44 65 76 69 63 65    .ELSE.....Device
00DA80:  3A 3D 27 20 27 3B 0D 0A 09 09 09 69 3A 3D 30 3B    :=' ';.....i:=0;
00DA90:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 6A 3A 3D    .....END;....j:=
00DAA0:  31 3B 0D 0A 0D 0A 09 09 28 2A 09 70 69 63 6B 20    1;......(*.pick 
00DAB0:  75 70 20 66 69 6C 65 20 6E 61 6D 65 20 2A 29 0D    up file name *).
00DAC0:  0A 0D 0A 09 09 57 48 49 4C 45 20 20 20 28 69 3C    .....WHILE   (i<
00DAD0:  3D 48 49 47 48 28 54 65 78 74 29 29 0D 0A 09 09    =HIGH(Text))....
00DAE0:  20 20 20 20 41 4E 44 09 28 54 65 78 74 5B 69 5D        AND.(Text[i]
00DAF0:  3C 3E 30 78 29 0D 0A 09 09 20 20 20 20 41 4E 44    <>0x)....    AND
00DB00:  6E 75 6D 20 43 65 6E 74 72 61 6C 20 34 31 37 38    num Central 4178
00DB10:  0D 0A 0D 0A 0D 0A 09 43 61 6C 6C 20 69 73 20 43    .......Call is C
00DB20:  4F 4D 50 44 49 52 20 20 20 77 69 6C 64 20 63 61    OMPDIR   wild ca
00DB30:  72 64 2C 77 69 6C 64 20 63 61 72 64 2C 6C 69 73    rd,wild card,lis
00DB40:  74 20 66 69 6C 65 20 5B 6F 70 74 69 6F 6E 73 0D    t file [options.
00DB50:  0A 0D 0A 09 57 68 65 72 65 20 65 61 63 68 20 77    ....Where each w
00DB60:  69 6C 64 20 63 61 72 64 20 70 72 6F 64 75 63 65    ild card produce
00DB70:  73 20 6F 6E 65 20 6F 66 20 74 68 65 20 6C 69 73    s one of the lis
00DB80:  74 73 20 74 6F 20 63 6F 6D 70 61 72 65 0D 0A 0D    ts to compare...
00DB90:  0A 09 46 6F 72 20 65 78 61 6D 70 6C 65 2C 20 74    ..For example, t
00DBA0:  6F 20 63 6F 6D 70 61 72 65 20 74 77 6F 20 64 69    o compare two di
00DBB0:  73 63 73 2C 20 64 6F 3A 20 43 4F 4D 50 44 49 52    scs, do: COMPDIR
00DBC0:  20 61 3A 2A 2E 2A 20 62 3A 2A 2E 2A 0D 0A 0D 0A     a:*.* b:*.*....
00DBD0:  09 4F 70 74 69 6F 6E 73 20 61 72 65 20 61 6E 79    .Options are any
00DBE0:  20 6F 66 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E     of the followin
00DBF0:  67 3A 0D 0A 09 09 54 09 63 6F 6D 70 61 72 65 20    g:....T.compare 
00DC00:  6F 6E 6C 79 20 66 69 6C 65 20 74 79 70 65 20 28    only file type (
00DC10:  62 79 20 64 65 66 61 75 6C 74 2C 20 74 68 65 20    by default, the 
00DC20:  77 68 6F 6C 65 20 6E 61 6D 65 20 69 73 20 63 6F    whole name is co
00DC30:  6D 70 61 72 65 64 29 0D 0A 09 09 09 28 62 79 20    mpared).....(by 
00DC40:  66 69 6C 65 20 74 79 70 65 2C 20 49 20 6D 65 61    file type, I mea
00DC50:  6E 20 74 68 65 20 28 33 29 20 63 68 61 72 61 63    n the (3) charac
00DC60:  74 65 72 73 20 61 66 74 65 72 20 74 68 65 20 64    ters after the d
00DC70:  6F 74 29 0D 0A 09 09 4E 09 63 6F 6D 70 61 72 65    ot)....N.compare
00DC80:  20 6F 6E 6C 79 20 66 69 6C 65 20 6E 61 6D 65 0D     only file name.
00DC90:  0A 09 09 43 09 69 66 20 66 69 6C 65 20 6E 61 6D    ...C.if file nam
00DCA0:  65 73 20 6D 61 74 63 68 2C 20 63 68 65 63 6B 20    es match, check 
00DCB0:  66 69 6C 65 20 63 6F 6E 74 65 6E 74 73 20 61 73    file contents as
00DCC0:  20 77 65 6C 6C 0D 0A 09 09 0D 0A 09 09 0D 0A 09     well...........
00DCD0:  09 09 54 68 65 73 65 20 74 77 6F 20 6F 70 74 69    ..These two opti
00DCE0:  6F 6E 73 20 61 72 65 20 6D 75 74 75 61 6C 6C 79    ons are mutually
00DCF0:  20 65 78 63 6C 75 73 69 76 65 0D 0A 0D 0A 09 09     exclusive......
00DD00:  20 28 54 65 78 74 5B 69 5D 3C 3E 27 20 27 29 0D     (Text[i]<>' ').
00DD10:  0A 09 09 20 20 20 20 41 4E 44 09 28 54 65 78 74    ...    AND.(Text
00DD20:  5B 69 5D 3C 3E 27 2E 27 29 20 44 4F 0D 0A 09 09    [i]<>'.') DO....
00DD30:  09 49 46 20 20 6A 3C 3D 48 49 47 48 28 4E 61 6D    .IF  j<=HIGH(Nam
00DD40:  65 29 20 54 48 45 4E 20 4E 61 6D 65 5B 6A 5D 3A    e) THEN Name[j]:
00DD50:  3D 54 65 78 74 5B 69 5D 20 45 4E 44 3B 0D 0A 09    =Text[i] END;...
00DD60:  09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 49 4E    ..INC(j);.....IN
00DD70:  43 28 69 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A    C(i);.....END;..
00DD80:  09 09 46 4F 52 20 6A 3A 3D 6A 20 54 4F 20 48 49    ..FOR j:=j TO HI
00DD90:  47 48 28 4E 61 6D 65 29 20 44 4F 20 4E 61 6D 65    GH(Name) DO Name
00DDA0:  5B 6A 5D 3A 3D 30 78 20 45 4E 44 3B 0D 0A 0D 0A    [j]:=0x END;....
00DDB0:  09 09 28 2A 4E 6F 74 65 20 74 68 61 74 20 49 20    ..(*Note that I 
00DDC0:  75 73 65 20 7A 65 72 6F 20 69 6E 73 74 65 61 64    use zero instead
00DDD0:  20 6F 66 20 62 6C 61 6E 6B 20 66 69 6C 6C 20 74     of blank fill t
00DDE0:  6F 20 73 69 6D 70 6C 69 66 79 20 6C 69 73 74 69    o simplify listi
00DDF0:  6E 67 0D 0A 09 09 20 20 6F 66 20 74 68 65 20 6E    ng....  of the n
00DE00:  61 6D 65 73 2A 29 0D 0A 09 09 6A 3A 3D 31 3B 0D    ames*)....j:=1;.
00DE10:  0A 09 09 49 46 20 54 65 78 74 5B 69 5D 3D 27 2E    ...IF Text[i]='.
00DE20:  27 20 54 48 45 4E 20 49 4E 43 28 69 29 20 45 4E    ' THEN INC(i) EN
00DE30:  44 3B 0D 0A 09 09 57 48 49 4C 45 20 20 20 28 69    D;....WHILE   (i
00DE40:  3C 3D 48 49 47 48 28 54 65 78 74 29 29 0D 0A 09    <=HIGH(Text))...
00DE50:  09 20 20 20 20 41 4E 44 09 28 54 65 78 74 5B 69    .    AND.(Text[i
00DE60:  5D 3C 3E 30 78 29 0D 0A 09 09 20 20 20 20 41 4E    ]<>0x)....    AN
00DE70:  44 09 28 54 65 78 74 5B 69 5D 3C 3E 27 20 27 29    D.(Text[i]<>' ')
00DE80:  20 44 4F 0D 0A 09 09 09 49 46 20 20 6A 3C 3D 48     DO.....IF  j<=H
00DE90:  49 47 48 28 54 79 70 65 29 20 54 48 45 4E 20 54    IGH(Type) THEN T
00DEA0:  79 70 65 5B 6A 5D 3A 3D 54 65 78 74 5B 69 5D 20    ype[j]:=Text[i] 
00DEB0:  45 4E 44 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 3B    END;.....INC(j);
00DEC0:  0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09    .....INC(i);....
00DED0:  09 45 4E 44 3B 0D 0A 09 09 46 4F 52 20 6A 3A 3D    .END;....FOR j:=
00DEE0:  6A 20 54 4F 20 48 49 47 48 28 54 79 70 65 29 20    j TO HIGH(Type) 
00DEF0:  44 4F 20 54 79 70 65 5B 6A 5D 3A 3D 30 78 20 45    DO Type[j]:=0x E
00DF00:  45 09 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61    E.Output file na
00DF10:  6D 65 73 20 77 68 69 63 68 20 6D 61 74 63 68 20    mes which match 
00DF20:  74 6F 20 6C 69 73 74 20 66 69 6C 65 0D 0A 09 09    to list file....
00DF30:  41 09 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61    A.Output file na
00DF40:  6D 65 73 20 77 68 69 63 68 20 68 61 76 65 20 62    mes which have b
00DF50:  65 65 6E 20 61 64 64 65 64 20 74 6F 20 74 68 65    een added to the
00DF60:  20 73 65 63 6F 6E 64 20 6C 69 73 74 0D 0A 09 09     second list....
00DF70:  44 09 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61    D.Output file na
00DF80:  6D 65 73 20 77 68 69 63 68 20 68 61 76 65 20 62    mes which have b
00DF90:  65 65 6E 20 64 65 6C 65 74 65 64 20 66 72 6F 6D    een deleted from
00DFA0:  20 74 68 65 20 66 69 72 73 74 20 6C 69 73 74 0D     the first list.
00DFB0:  0A 09 09 4D 09 4F 75 74 70 75 74 20 66 69 6C 65    ...M.Output file
00DFC0:  73 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65    s which have bee
00DFD0:  6E 20 6D 6F 64 69 66 69 65 64 20 74 6F 20 74 68    n modified to th
00DFE0:  65 20 6C 69 73 74 20 66 69 6C 65 0D 0A 0D 0A 09    e list file.....
00DFF0:  09 09 54 68 65 73 65 20 6F 70 74 69 6F 6E 73 20    ..These options 
00E000:  6D 61 79 20 62 65 20 63 6F 6D 62 69 6E 65 64 0D    may be combined.
00E010:  0A 0D 0A 0D 0A 09 54 68 65 20 70 72 6F 67 72 61    ......The progra
00E020:  6D 20 63 61 6E 20 62 65 20 76 65 72 79 20 75 73    m can be very us
00E030:  65 66 75 6C 20 66 6F 72 20 75 70 64 61 74 69 6E    eful for updatin
00E040:  67 20 64 69 73 63 73 20 62 61 73 65 64 20 6F 6E    g discs based on
00E050:  20 74 68 65 69 72 0D 0A 09 65 78 69 73 74 69 6E     their...existin
00E060:  67 20 63 6F 6E 74 65 6E 74 73 2C 20 77 68 69 63    g contents, whic
00E070:  68 20 69 73 20 61 6E 20 61 72 65 61 20 69 6E 20    h is an area in 
00E080:  77 68 69 63 68 20 73 77 65 65 70 20 69 73 20 77    which sweep is w
00E090:  65 61 6B 2E 20 0D 0A 0D 0A 09 54 68 69 73 20 69    eak. .....This i
00E0A0:  73 20 61 20 6D 6F 64 69 66 69 65 64 20 61 6E 64    s a modified and
00E0B0:  20 65 6E 68 61 6E 63 65 64 20 76 65 72 73 69 6F     enhanced versio
00E0C0:  6E 20 6F 66 20 74 68 65 20 6F 72 69 67 69 6E 61    n of the origina
00E0D0:  6C 20 43 6F 6D 70 44 69 72 20 70 72 6F 67 72 61    l CompDir progra
00E0E0:  6D 0D 0A 09 77 68 69 63 68 20 77 61 73 20 77 72    m...which was wr
00E0F0:  69 74 74 65 6E 20 66 6F 72 20 65 78 70 6F 73 69    itten for exposi
00E100:  4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 2A 57 49 54    ND;....END;(*WIT
00E110:  48 2A 29 0D 0A 09 45 4E 44 20 43 72 61 63 6B 46    H*)...END CrackF
00E120:  69 6C 65 4E 61 6D 65 3B 0D 0A 09 0D 0A 50 52 4F    ileName;.....PRO
00E130:  43 45 44 55 52 45 20 55 73 61 67 65 3B 0D 0A 42    CEDURE Usage;..B
00E140:  45 47 49 4E 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D    EGIN...WriteLn;.
00E150:  0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 55    ..WriteString('U
00E160:  73 61 67 65 20 69 73 3A 20 20 20 43 4F 4D 50 44    sage is:   COMPD
00E170:  49 52 20 77 69 6C 64 20 63 61 72 64 20 66 69 6C    IR wild card fil
00E180:  65 20 6E 61 6D 65 27 29 3B 0D 0A 09 57 72 69 74    e name');...Writ
00E190:  65 53 74 72 69 6E 67 28 27 2C 20 77 69 6C 64 20    eString(', wild 
00E1A0:  63 61 72 64 20 66 69 6C 65 20 6E 61 6D 65 20 5B    card file name [
00E1B0:  2C 20 6C 69 73 74 20 66 69 6C 65 5D 20 5B 2F 6F    , list file] [/o
00E1C0:  70 74 69 6F 6E 73 5D 27 29 3B 0D 0A 09 57 72 69    ptions]');...Wri
00E1D0:  74 65 4C 6E 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09    teLn;WriteLn;...
00E1E0:  57 72 69 74 65 53 74 72 69 6E 67 28 27 20 4F 70    WriteString(' Op
00E1F0:  74 69 6F 6E 73 20 61 72 65 3A 20 20 27 29 3B 57    tions are:  ');W
00E200:  72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53    riteLn;...WriteS
00E210:  74 72 69 6E 67 28 27 09 09 54 09 63 6F 6D 70 61    tring('..T.compa
00E220:  72 65 20 6F 6E 6C 79 20 66 69 6C 65 20 74 79 70    re only file typ
00E230:  65 20 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09    e ');WriteLn;...
00E240:  57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 4E    WriteString('..N
00E250:  09 63 6F 6D 70 61 72 65 20 6F 6E 6C 79 20 66 69    .compare only fi
00E260:  6C 65 20 6E 61 6D 65 27 29 3B 57 72 69 74 65 4C    le name');WriteL
00E270:  6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67    n;...WriteString
00E280:  28 27 09 09 43 09 63 6F 6D 70 61 72 65 20 63 6F    ('..C.compare co
00E290:  6E 74 65 6E 74 73 20 6F 66 20 6D 61 74 63 68 69    ntents of matchi
00E2A0:  6E 67 20 66 69 6C 65 73 27 29 3B 57 72 69 74 65    ng files');Write
00E2B0:  4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E    Ln;...WriteStrin
00E2C0:  67 28 27 09 09 45 09 4F 75 74 70 75 74 20 66 69    g('..E.Output fi
00E2D0:  6C 65 20 6E 61 6D 65 73 20 77 68 69 63 68 20 6D    le names which m
00E2E0:  61 74 63 68 20 74 6F 20 6C 69 73 74 20 66 69 6C    atch to list fil
00E2F0:  65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57    e');WriteLn;...W
00E300:  74 6F 72 79 20 70 75 72 70 6F 73 65 73 2E 20 54    tory purposes. T
00E310:  68 65 20 70 72 6F 67 72 61 6D 20 69 73 20 77 72    he program is wr
00E320:  69 74 74 65 6E 20 69 6E 20 0D 0A 09 46 54 4C 20    itten in ...FTL 
00E330:  4D 6F 64 75 6C 61 2D 32 2E 0D 0A 09 2A 29 0D 0A    Modula-2....*)..
00E340:  0D 0A 46 52 4F 4D 20 09 53 59 53 54 45 4D 20 09    ..FROM .SYSTEM .
00E350:  09 49 4D 50 4F 52 54 20 41 44 44 52 45 53 53 2C    .IMPORT ADDRESS,
00E360:  41 44 52 2C 54 53 49 5A 45 3B 0D 0A 46 52 4F 4D    ADR,TSIZE;..FROM
00E370:  20 09 43 6F 6D 6D 61 6E 64 20 09 49 4D 50 4F 52     .Command .IMPOR
00E380:  54 20 50 61 72 61 6D 65 74 65 72 2C 50 61 72 63    T Parameter,Parc
00E390:  6C 61 73 73 2C 47 65 74 50 61 72 61 6D 73 3B 0D    lass,GetParams;.
00E3A0:  0A 46 52 4F 4D 20 09 54 65 72 6D 69 6E 61 6C 09    .FROM .Terminal.
00E3B0:  49 4D 50 4F 52 54 20 57 72 69 74 65 53 74 72 69    IMPORT WriteStri
00E3C0:  6E 67 2C 57 72 69 74 65 4C 6E 2C 57 72 69 74 65    ng,WriteLn,Write
00E3D0:  3B 0D 0A 46 52 4F 4D 20 09 53 6F 72 74 20 09 09    ;..FROM .Sort ..
00E3E0:  49 4D 50 4F 52 54 20 53 6F 72 74 52 65 63 6F 72    IMPORT SortRecor
00E3F0:  64 73 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 20    ds;..FROM.Files 
00E400:  09 09 49 4D 50 4F 52 54 20 46 69 6C 65 4E 61 6D    ..IMPORT FileNam
00E410:  65 2C 46 49 4C 45 2C 43 72 65 61 74 65 3B 0D 0A    e,FILE,Create;..
00E420:  46 52 4F 4D 09 47 65 74 46 69 6C 65 73 09 49 4D    FROM.GetFiles.IM
00E430:  50 4F 52 54 20 47 65 74 4E 61 6D 65 73 3B 0D 0A    PORT GetNames;..
00E440:  46 52 4F 4D 09 53 74 72 69 6E 67 73 09 09 49 4D    FROM.Strings..IM
00E450:  50 4F 52 54 20 4C 65 6E 67 74 68 3B 0D 0A 46 52    PORT Length;..FR
00E460:  4F 4D 09 53 74 72 65 61 6D 73 09 09 49 4D 50 4F    OM.Streams..IMPO
00E470:  52 54 20 53 54 52 45 41 4D 2C 43 6F 6E 6E 65 63    RT STREAM,Connec
00E480:  74 2C 44 69 73 63 6F 6E 6E 65 63 74 2C 57 72 69    t,Disconnect,Wri
00E490:  74 65 43 68 61 72 2C 44 69 72 65 63 74 69 6F 6E    teChar,Direction
00E4A0:  3B 0D 0A 49 4D 50 4F 52 54 09 49 6E 4F 75 74 3B    ;..IMPORT.InOut;
00E4B0:  0D 0A 46 52 4F 4D 09 46 69 6C 65 4F 70 73 09 09    ..FROM.FileOps..
00E4C0:  49 4D 50 4F 52 54 20 46 69 6C 65 43 6F 6D 70 3B    IMPORT FileComp;
00E4D0:  0D 0A 43 4F 4E 53 54 09 4D 61 78 46 69 6C 65 73    ..CONST.MaxFiles
00E4E0:  3D 35 31 32 3B 09 28 2A 6D 61 78 20 66 69 6C 65    =512;.(*max file
00E4F0:  73 20 74 6F 20 62 65 20 6D 61 74 63 68 65 64 2A    s to be matched*
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 41 02 00 00 00 02    ......R...A.....
00E520:  0C 00 46 02 00 00 00 02 0C 00 42 02 00 00 00 02    ..F.......B.....
00E530:  0C 00 47 02 00 00 00 02 0C 00 43 02 00 00 00 02    ..G.......C.....
00E540:  0C 00 48 02 00 00 00 02 0C 00 44 02 00 00 00 02    ..H.......D.....
00E550:  0C 00 49 02 00 00 00 02 0C 00 45 02 00 00 00 02    ..I.......E.....
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:  72 69 74 65 53 74 72 69 6E 67 28 27 09 09 41 09    riteString('..A.
00E610:  4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61 6D 65    Output file name
00E620:  73 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65    s which have bee
00E630:  6E 20 61 64 64 65 64 20 74 6F 20 74 68 65 20 73    n added to the s
00E640:  65 63 6F 6E 64 20 6C 69 73 74 27 29 3B 57 72 69    econd list');Wri
00E650:  74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72    teLn;...WriteStr
00E660:  69 6E 67 28 27 09 09 44 09 4F 75 74 70 75 74 20    ing('..D.Output 
00E670:  66 69 6C 65 20 6E 61 6D 65 73 20 77 68 69 63 68    file names which
00E680:  20 68 61 76 65 20 62 65 65 6E 20 64 65 6C 65 74     have been delet
00E690:  65 64 20 66 72 6F 6D 20 74 68 65 20 66 69 72 73    ed from the firs
00E6A0:  74 20 6C 69 73 74 27 29 3B 57 72 69 74 65 4C 6E    t list');WriteLn
00E6B0:  3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28    ;...WriteString(
00E6C0:  27 09 09 4D 09 4F 75 74 70 75 74 20 66 69 6C 65    '..M.Output file
00E6D0:  20 6E 61 6D 65 73 20 6F 66 20 6D 6F 64 69 66 69     names of modifi
00E6E0:  65 64 20 66 69 6C 65 73 20 27 29 3B 57 72 69 74    ed files ');Writ
00E6F0:  65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69    eLn;...WriteStri
00E700:  6E 67 28 27 09 09 09 28 49 6D 70 6C 69 65 73 20    ng('...(Implies 
00E710:  43 20 6F 70 74 69 6F 6E 29 27 29 3B 57 72 69 74    C option)');Writ
00E720:  65 4C 6E 3B 0D 0A 09 48 41 4C 54 0D 0A 09 45 4E    eLn;...HALT...EN
00E730:  44 20 55 73 61 67 65 3B 0D 0A 0D 0A 0D 0A 50 52    D Usage;......PR
00E740:  4F 43 45 44 55 52 45 20 47 65 74 4F 70 74 69 6F    OCEDURE GetOptio
00E750:  6E 73 28 70 3A 50 61 72 61 6D 65 74 65 72 29 3B    ns(p:Parameter);
00E760:  0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C    ..VAR.i:CARDINAL
00E770:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20    ;..BEGIN...WITH 
00E780:  70 5E 20 44 4F 0D 0A 09 09 69 3A 3D 30 3B 0D 0A    p^ DO....i:=0;..
00E790:  09 09 4C 4F 4F 50 0D 0A 09 09 09 43 41 53 45 20    ..LOOP.....CASE 
00E7A0:  43 68 61 72 73 5B 69 5D 20 4F 46 0D 0A 09 09 09    Chars[i] OF.....
00E7B0:  09 30 78 3A 45 58 49 54 7C 0D 0A 09 09 09 09 27    .0x:EXIT|......'
00E7C0:  54 27 3A 43 6F 6D 70 63 6C 61 73 73 3A 3D 54 79    T':Compclass:=Ty
00E7D0:  70 65 7C 0D 0A 09 09 09 09 27 4E 27 3A 43 6F 6D    pe|......'N':Com
00E7E0:  70 63 6C 61 73 73 3A 3D 4E 61 6D 65 7C 0D 0A 09    pclass:=Name|...
00E7F0:  09 09 09 27 45 27 3A 4F 75 74 70 75 74 45 71 75    ...'E':OutputEqu
00E800:  69 74 65 53 74 72 69 6E 67 28 4E 61 6D 65 29 3B    iteString(Name);
00E810:  0D 0A 09 09 57 72 69 74 65 43 68 61 72 28 4C 69    ....WriteChar(Li
00E820:  73 74 2C 27 2E 27 29 3B 0D 0A 09 09 49 6E 4F 75    st,'.');....InOu
00E830:  74 2E 57 72 69 74 65 53 74 72 69 6E 67 28 54 79    t.WriteString(Ty
00E840:  70 65 29 3B 0D 0A 09 09 49 6E 4F 75 74 2E 57 72    pe);....InOut.Wr
00E850:  69 74 65 4C 6E 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    iteLn;....END;..
00E860:  09 45 4E 44 20 57 72 69 74 65 54 6F 4C 69 73 74    .END WriteToList
00E870:  3B 0D 0A 09 0D 0A 50 52 4F 43 45 44 55 52 45 20    ;.....PROCEDURE 
00E880:  57 72 69 74 65 4E 61 6D 65 28 56 41 52 20 4E 3A    WriteName(VAR N:
00E890:  46 69 6C 65 52 65 63 6F 72 64 3B 54 6F 4C 69 73    FileRecord;ToLis
00E8A0:  74 3A 42 4F 4F 4C 45 41 4E 29 3B 0D 0A 0D 0A 28    t:BOOLEAN);....(
00E8B0:  2A 09 6F 75 74 70 75 74 20 61 20 66 69 6C 65 20    *.output a file 
00E8C0:  72 65 63 6F 72 64 20 61 73 20 61 20 76 61 6C 69    record as a vali
00E8D0:  64 20 66 69 6C 65 20 6E 61 6D 65 0D 0A 09 49 46    d file name...IF
00E8E0:  20 54 6F 6C 69 73 74 2C 20 6F 75 74 70 75 74 20     Tolist, output 
00E8F0:  69 74 20 74 6F 20 6C 69 73 74 20 61 73 20 77 65    it to list as we
00E900:  6C 6C 2A 29 0D 0A 0D 0A 56 41 52 09 69 3A 43 41    ll*)....VAR.i:CA
00E910:  52 44 49 4E 41 4C 3B 0D 0A 09 63 68 3A 43 48 41    RDINAL;...ch:CHA
00E920:  52 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48    R;..BEGIN...WITH
00E930:  20 4E 20 44 4F 0D 0A 09 09 49 46 20 44 65 76 69     N DO....IF Devi
00E940:  63 65 3C 3E 27 20 27 20 54 48 45 4E 20 0D 0A 09    ce<>' ' THEN ...
00E950:  09 09 63 68 3A 3D 27 3A 27 0D 0A 09 09 45 4C 53    ..ch:=':'....ELS
00E960:  45 0D 0A 09 09 09 63 68 3A 3D 27 20 27 0D 0A 09    E.....ch:=' '...
00E970:  09 09 45 4E 44 3B 0D 0A 09 09 57 72 69 74 65 28    ..END;....Write(
00E980:  44 65 76 69 63 65 29 3B 0D 0A 09 09 57 72 69 74    Device);....Writ
00E990:  65 28 63 68 29 3B 0D 0A 09 09 49 46 20 54 6F 4C    e(ch);....IF ToL
00E9A0:  69 73 74 20 54 48 45 4E 0D 0A 09 09 09 57 72 69    ist THEN.....Wri
00E9B0:  74 65 43 68 61 72 28 4C 69 73 74 2C 44 65 76 69    teChar(List,Devi
00E9C0:  63 65 29 3B 0D 0A 09 09 09 57 72 69 74 65 43 68    ce);.....WriteCh
00E9D0:  61 72 28 4C 69 73 74 2C 63 68 29 3B 0D 0A 09 09    ar(List,ch);....
00E9E0:  09 45 4E 44 3B 0D 0A 09 09 57 72 69 74 65 53 74    .END;....WriteSt
00E9F0:  72 69 6E 67 28 4E 61 6D 65 29 3B 0D 0A 09 09 57    ring(Name);....W
00EA00:  61 6C 3A 3D 54 52 55 45 7C 0D 0A 09 09 09 09 27    al:=TRUE|......'
00EA10:  41 27 3A 4F 75 74 70 75 74 41 64 64 65 64 3A 3D    A':OutputAdded:=
00EA20:  54 52 55 45 7C 0D 0A 09 09 09 09 27 44 27 3A 4F    TRUE|......'D':O
00EA30:  75 74 70 75 74 44 65 6C 65 74 65 64 3A 3D 54 52    utputDeleted:=TR
00EA40:  55 45 7C 0D 0A 09 09 09 09 27 4D 27 3A 4F 75 74    UE|......'M':Out
00EA50:  70 75 74 4D 6F 64 69 66 69 65 64 3A 3D 54 52 55    putModified:=TRU
00EA60:  45 3B 0D 0A 09 09 09 09 20 20 20 20 43 6F 6D 70    E;......    Comp
00EA70:  61 72 65 43 6F 6E 74 65 6E 74 73 3A 3D 54 52 55    areContents:=TRU
00EA80:  45 7C 0D 0A 09 09 09 09 27 43 27 3A 43 6F 6D 70    E|......'C':Comp
00EA90:  61 72 65 43 6F 6E 74 65 6E 74 73 3A 3D 54 52 55    areContents:=TRU
00EAA0:  45 0D 0A 09 09 09 09 45 4C 53 45 20 55 73 61 67    E......ELSE Usag
00EAB0:  65 3B 0D 0A 09 09 09 09 45 4E 44 3B 28 2A 55 73    e;......END;(*Us
00EAC0:  61 67 65 2A 29 0D 0A 09 09 09 49 4E 43 28 69 29    age*).....INC(i)
00EAD0:  3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E    ;.....END;....EN
00EAE0:  44 3B 28 2A 57 49 54 48 2A 29 0D 0A 09 45 4E 44    D;(*WITH*)...END
00EAF0:  20 47 65 74 4F 70 74 69 6F 6E 73 3B 0D 0A 09 09     GetOptions;....
00EB00:  09 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6F 6D    ...PROCEDURE Com
00EB10:  70 61 72 28 61 2C 62 3A 41 44 44 52 45 53 53 29    par(a,b:ADDRESS)
00EB20:  3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09    :BOOLEAN;....(*.
00EB30:  6B 65 79 20 63 6F 6D 70 61 72 69 73 6F 6E 20 72    key comparison r
00EB40:  6F 75 74 69 6E 65 20 66 6F 72 20 74 68 65 20 73    outine for the s
00EB50:  6F 72 74 20 6D 6F 64 75 6C 65 0D 0A 09 52 65 74    ort module...Ret
00EB60:  75 72 6E 73 20 54 52 55 45 20 69 66 20 61 20 69    urns TRUE if a i
00EB70:  73 20 67 72 65 61 74 65 72 20 74 68 61 6E 20 62    s greater than b
00EB80:  0D 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74 69 6E    .....This routin
00EB90:  65 20 61 6C 77 61 79 73 20 63 6F 6D 70 61 72 65    e always compare
00EBA0:  73 20 74 68 65 20 66 75 6C 6C 20 6E 61 6D 65 20    s the full name 
00EBB0:  61 73 20 69 74 20 69 73 20 75 73 65 64 0D 0A 09    as it is used...
00EBC0:  66 6F 72 20 73 6F 72 74 69 6E 67 2E 20 54 68 65    for sorting. The
00EBD0:  20 65 71 75 61 6C 69 74 79 20 72 6F 75 74 69 6E     equality routin
00EBE0:  65 20 6F 6E 6C 79 20 63 6F 6D 70 61 72 65 73 20    e only compares 
00EBF0:  74 68 65 20 70 61 72 74 0D 0A 09 6F 66 20 74 68    the part...of th
00EC00:  72 69 74 65 28 27 2E 27 29 3B 0D 0A 09 09 57 72    rite('.');....Wr
00EC10:  69 74 65 53 74 72 69 6E 67 28 54 79 70 65 29 3B    iteString(Type);
00EC20:  0D 0A 09 09 49 46 20 54 6F 4C 69 73 74 20 54 48    ....IF ToList TH
00EC30:  45 4E 0D 0A 09 09 09 57 72 69 74 65 54 6F 4C 69    EN.....WriteToLi
00EC40:  73 74 28 4E 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D    st(N);.....END;.
00EC50:  0A 0D 0A 09 09 28 2A 4E 6F 77 20 70 61 64 20 6E    .....(*Now pad n
00EC60:  61 6D 65 20 6F 75 74 20 74 6F 20 31 36 20 63 6F    ame out to 16 co
00EC70:  6C 75 6D 6E 73 2A 29 0D 0A 0D 0A 09 09 46 4F 52    lumns*)......FOR
00EC80:  20 69 3A 3D 4C 65 6E 67 74 68 28 4E 61 6D 65 29     i:=Length(Name)
00EC90:  2B 4C 65 6E 67 74 68 28 54 79 70 65 29 2B 34 20    +Length(Type)+4 
00ECA0:  54 4F 20 31 36 20 44 4F 0D 0A 09 09 09 57 72 69    TO 16 DO.....Wri
00ECB0:  74 65 28 27 20 27 29 3B 0D 0A 09 09 09 45 4E 44    te(' ');.....END
00ECC0:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20    ;....END;...END 
00ECD0:  57 72 69 74 65 4E 61 6D 65 3B 0D 0A 50 52 4F 43    WriteName;..PROC
00ECE0:  45 44 55 52 45 20 50 72 69 6E 74 4C 65 66 74 3B    EDURE PrintLeft;
00ECF0:  0D 0A 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 4E    ..BEGIN...WriteN
00ED00:  61 6D 65 28 4C 65 66 74 4E 61 6D 65 73 5B 69 5D    ame(LeftNames[i]
00ED10:  2C 4F 75 74 70 75 74 44 65 6C 65 74 65 64 29 3B    ,OutputDeleted);
00ED20:  0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 45 4E    ...WriteLn;...EN
00ED30:  44 20 50 72 69 6E 74 4C 65 66 74 3B 0D 0A 50 52    D PrintLeft;..PR
00ED40:  4F 43 45 44 55 52 45 20 50 72 69 6E 74 52 69 67    OCEDURE PrintRig
00ED50:  68 74 3B 0D 0A 42 45 47 49 4E 0D 0A 20 09 57 72    ht;..BEGIN.. .Wr
00ED60:  69 74 65 53 74 72 69 6E 67 28 27 20 20 20 20 20    iteString('     
00ED70:  20 20 20 20 20 20 20 20 20 20 20 27 29 3B 0D 0A               ');..
00ED80:  09 57 72 69 74 65 4E 61 6D 65 28 52 69 67 68 74    .WriteName(Right
00ED90:  4E 61 6D 65 73 5B 6A 5D 2C 4F 75 74 70 75 74 41    Names[j],OutputA
00EDA0:  64 64 65 64 29 3B 0D 0A 09 57 72 69 74 65 4C 6E    dded);...WriteLn
00EDB0:  3B 0D 0A 09 45 4E 44 20 50 72 69 6E 74 52 69 67    ;...END PrintRig
00EDC0:  68 74 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45    ht;....PROCEDURE
00EDD0:  20 43 6F 6D 70 61 72 65 4F 4B 28 66 31 2C 66 32     CompareOK(f1,f2
00EDE0:  3A 46 69 6C 65 52 65 63 6F 72 64 29 3A 42 4F 4F    :FileRecord):BOO
00EDF0:  4C 45 41 4E 3B 0D 0A 0D 0A 56 41 52 09 66 6E 31    LEAN;....VAR.fn1
00EE00:  65 20 6E 61 6D 65 20 72 65 71 75 65 73 74 65 64    e name requested
00EE10:  20 62 79 20 74 68 65 20 66 6C 61 67 73 2E 20 41     by the flags. A
00EE20:  73 20 61 20 72 65 73 75 6C 74 2C 20 61 20 74 65    s a result, a te
00EE30:  73 74 0D 0A 09 66 6F 72 20 65 71 75 61 6C 69 74    st...for equalit
00EE40:  79 20 73 68 6F 75 6C 64 20 62 65 20 6D 61 64 65    y should be made
00EE50:  20 66 69 72 73 74 2A 29 0D 0A 0D 0A 56 41 52 09     first*)....VAR.
00EE60:  70 2C 71 3A 50 46 69 6C 65 4E 61 6D 65 3B 0D 0A    p,q:PFileName;..
00EE70:  42 45 47 49 4E 0D 0A 09 70 3A 3D 50 46 69 6C 65    BEGIN...p:=PFile
00EE80:  4E 61 6D 65 28 61 29 3B 0D 0A 09 71 3A 3D 50 46    Name(a);...q:=PF
00EE90:  69 6C 65 4E 61 6D 65 28 62 29 3B 0D 0A 09 43 41    ileName(b);...CA
00EEA0:  53 45 20 43 6F 6D 70 63 6C 61 73 73 20 4F 46 0D    SE Compclass OF.
00EEB0:  0A 09 09 54 79 70 65 3A 49 46 20 20 70 5E 2E 54    ...Type:IF  p^.T
00EEC0:  79 70 65 3C 3E 71 5E 2E 54 79 70 65 20 54 48 45    ype<>q^.Type THE
00EED0:  4E 20 52 45 54 55 52 4E 20 70 5E 2E 54 79 70 65    N RETURN p^.Type
00EEE0:  3E 71 5E 2E 54 79 70 65 0D 0A 09 09 20 20 20 20    >q^.Type....    
00EEF0:  20 45 4C 53 45 20 52 45 54 55 52 4E 20 70 5E 2E     ELSE RETURN p^.
00EF00:  4E 61 6D 65 3E 71 5E 2E 4E 61 6D 65 20 45 4E 44    Name>q^.Name END
00EF10:  3B 20 0D 0A 09 09 09 7C 0D 0A 09 09 4E 61 6D 65    ; .....|....Name
00EF20:  2C 57 68 6F 6C 65 3A 49 46 20 70 5E 2E 4E 61 6D    ,Whole:IF p^.Nam
00EF30:  65 3C 3E 71 5E 2E 4E 61 6D 65 20 54 48 45 4E 20    e<>q^.Name THEN 
00EF40:  52 45 54 55 52 4E 20 70 5E 2E 4E 61 6D 65 3E 71    RETURN p^.Name>q
00EF50:  5E 2E 4E 61 6D 65 0D 0A 09 09 20 20 20 20 20 20    ^.Name....      
00EF60:  45 4C 53 45 20 52 45 54 55 52 4E 20 70 5E 2E 54    ELSE RETURN p^.T
00EF70:  79 70 65 3E 71 5E 2E 54 79 70 65 20 45 4E 44 3B    ype>q^.Type END;
00EF80:  0D 0A 09 09 45 4E 44 3B 28 2A 43 41 53 45 2A 29    ....END;(*CASE*)
00EF90:  0D 0A 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 72 3B    .....END Compar;
00EFA0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 45 71 75 61    ..PROCEDURE Equa
00EFB0:  6C 28 70 2C 71 3A 46 69 6C 65 52 65 63 6F 72 64    l(p,q:FileRecord
00EFC0:  29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A    ):BOOLEAN;....(*
00EFD0:  09 63 6F 6D 70 61 72 65 20 74 6F 20 6E 61 6D 65    .compare to name
00EFE0:  73 20 66 6F 72 20 65 71 75 61 6C 69 74 79 0D 0A    s for equality..
00EFF0:  09 70 61 74 74 65 72 6E 65 64 20 61 66 74 65 72    .patterned after
00F000:  2C 66 6E 32 3A 46 69 6C 65 4E 61 6D 65 3B 0D 0A    ,fn2:FileName;..
00F010:  0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 4E    ..PROCEDURE SetN
00F020:  61 6D 65 28 66 3A 46 69 6C 65 52 65 63 6F 72 64    ame(f:FileRecord
00F030:  3B 56 41 52 20 66 6E 3A 46 69 6C 65 4E 61 6D 65    ;VAR fn:FileName
00F040:  29 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 44    );..VAR.i,j:CARD
00F050:  49 4E 41 4C 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    INAL;....PROCEDU
00F060:  52 45 20 50 75 74 28 63 68 3A 43 48 41 52 29 3B    RE Put(ch:CHAR);
00F070:  0D 0A 42 45 47 49 4E 0D 0A 09 66 6E 5B 69 5D 3A    ..BEGIN...fn[i]:
00F080:  3D 63 68 3B 0D 0A 09 49 4E 43 28 69 29 3B 0D 0A    =ch;...INC(i);..
00F090:  09 45 4E 44 20 50 75 74 3B 0D 0A 0D 0A 42 45 47    .END Put;....BEG
00F0A0:  49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 57 49 54    IN...i:=0;...WIT
00F0B0:  48 20 66 20 44 4F 0D 0A 09 09 49 46 20 44 65 76    H f DO....IF Dev
00F0C0:  69 63 65 3C 3E 27 20 27 20 54 48 45 4E 20 0D 0A    ice<>' ' THEN ..
00F0D0:  09 09 09 50 75 74 28 44 65 76 69 63 65 29 3B 0D    ...Put(Device);.
00F0E0:  0A 09 09 09 50 75 74 28 27 3A 27 29 3B 0D 0A 09    ....Put(':');...
00F0F0:  09 09 45 4E 44 3B 0D 0A 09 09 6A 3A 3D 31 3B 0D    ..END;....j:=1;.
00F100:  0A 09 09 57 48 49 4C 45 20 28 6A 3C 3D 48 49 47    ...WHILE (j<=HIG
00F110:  48 28 4E 61 6D 65 29 29 20 41 4E 44 20 28 4E 61    H(Name)) AND (Na
00F120:  6D 65 5B 6A 5D 3C 3E 30 78 29 20 44 4F 0D 0A 09    me[j]<>0x) DO...
00F130:  09 09 50 75 74 28 4E 61 6D 65 5B 6A 5D 29 3B 0D    ..Put(Name[j]);.
00F140:  0A 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09    ....INC(j);.....
00F150:  45 4E 44 3B 0D 0A 09 09 6A 3A 3D 31 3B 0D 0A 09    END;....j:=1;...
00F160:  09 50 75 74 28 27 2E 27 29 3B 0D 0A 09 09 57 48    .Put('.');....WH
00F170:  49 4C 45 20 28 6A 3C 3D 48 49 47 48 28 54 79 70    ILE (j<=HIGH(Typ
00F180:  65 29 29 20 41 4E 44 20 28 54 79 70 65 5B 6A 5D    e)) AND (Type[j]
00F190:  3C 3E 30 78 29 20 44 4F 0D 0A 09 09 09 50 75 74    <>0x) DO.....Put
00F1A0:  28 54 79 70 65 5B 6A 5D 29 3B 0D 0A 09 09 09 49    (Type[j]);.....I
00F1B0:  4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D    NC(j);.....END;.
00F1C0:  0A 09 09 57 48 49 4C 45 20 69 3C 3D 48 49 47 48    ...WHILE i<=HIGH
00F1D0:  28 66 6E 29 20 44 4F 20 50 75 74 28 27 20 27 29    (fn) DO Put(' ')
00F1E0:  20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09     END;....END;...
00F1F0:  45 4E 44 20 53 65 74 4E 61 6D 65 3B 0D 0A 42 45    END SetName;..BE
00F200:  20 74 68 65 20 70 72 65 63 65 64 69 6E 67 20 72     the preceding r
00F210:  6F 75 74 69 6E 65 2A 29 0D 0A 0D 0A 0D 0A 42 45    outine*)......BE
00F220:  47 49 4E 0D 0A 09 43 41 53 45 20 43 6F 6D 70 63    GIN...CASE Compc
00F230:  6C 61 73 73 20 4F 46 0D 0A 09 09 54 79 70 65 3A    lass OF....Type:
00F240:  52 45 54 55 52 4E 20 70 2E 54 79 70 65 3D 71 2E    RETURN p.Type=q.
00F250:  54 79 70 65 7C 0D 0A 09 09 4E 61 6D 65 3A 52 45    Type|....Name:RE
00F260:  54 55 52 4E 20 70 2E 4E 61 6D 65 3D 71 2E 4E 61    TURN p.Name=q.Na
00F270:  6D 65 7C 0D 0A 09 09 57 68 6F 6C 65 3A 49 46 20    me|....Whole:IF 
00F280:  70 2E 4E 61 6D 65 3C 3E 71 2E 4E 61 6D 65 20 54    p.Name<>q.Name T
00F290:  48 45 4E 20 52 45 54 55 52 4E 20 46 41 4C 53 45    HEN RETURN FALSE
00F2A0:  0D 0A 09 09 20 20 20 20 20 20 45 4C 53 45 20 52    ....      ELSE R
00F2B0:  45 54 55 52 4E 20 70 2E 54 79 70 65 3D 71 2E 54    ETURN p.Type=q.T
00F2C0:  79 70 65 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B    ype END;....END;
00F2D0:  28 2A 43 41 53 45 2A 29 0D 0A 0D 0A 09 45 4E 44    (*CASE*).....END
00F2E0:  20 45 71 75 61 6C 3B 0D 0A 0D 0A 50 52 4F 43 45     Equal;....PROCE
00F2F0:  44 55 52 45 20 45 78 70 61 6E 64 4E 61 6D 65 73    DURE ExpandNames
00F300:  28 50 61 72 61 6D 3A 50 61 72 61 6D 65 74 65 72    (Param:Parameter
00F310:  3B 56 41 52 20 4E 61 6D 65 73 3A 46 69 6C 65 41    ;VAR Names:FileA
00F320:  72 72 61 79 3B 0D 0A 09 09 09 56 41 52 20 4E 61    rray;.....VAR Na
00F330:  6D 65 43 6F 75 6E 74 3A 49 4E 54 45 47 45 52 29    meCount:INTEGER)
00F340:  3B 0D 0A 0D 0A 28 2A 09 45 78 70 61 6E 64 20 77    ;....(*.Expand w
00F350:  69 6C 64 20 63 61 72 64 20 66 69 6C 65 20 6E 61    ild card file na
00F360:  6D 65 20 69 6E 74 6F 20 6C 69 73 74 20 6F 66 20    me into list of 
00F370:  66 69 6C 65 73 0D 0A 09 61 6E 64 20 73 6F 72 74    files...and sort
00F380:  20 72 65 73 75 6C 74 20 2A 29 0D 0A 56 41 52 09     result *)..VAR.
00F390:  69 2C 6A 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 4E    i,j:INTEGER;...N
00F3A0:  61 6D 65 54 65 78 74 3A 41 52 52 41 59 20 5B 31    ameText:ARRAY [1
00F3B0:  2E 2E 4D 61 78 46 69 6C 65 73 5D 20 4F 46 20 46    ..MaxFiles] OF F
00F3C0:  69 6C 65 4E 61 6D 65 3B 0D 0A 09 54 65 78 74 3A    ileName;...Text:
00F3D0:  41 52 52 41 59 5B 30 2E 2E 35 5D 20 4F 46 20 43    ARRAY[0..5] OF C
00F3E0:  48 41 52 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46    HAR;..BEGIN...IF
00F3F0:  20 28 50 61 72 61 6D 5E 2E 43 68 61 72 73 5B 32     (Param^.Chars[2
00F400:  47 49 4E 0D 0A 09 53 65 74 4E 61 6D 65 28 66 31    GIN...SetName(f1
00F410:  2C 66 6E 31 29 3B 0D 0A 09 53 65 74 4E 61 6D 65    ,fn1);...SetName
00F420:  28 66 32 2C 66 6E 32 29 3B 0D 0A 09 52 45 54 55    (f2,fn2);...RETU
00F430:  52 4E 20 46 69 6C 65 43 6F 6D 70 28 66 6E 31 2C    RN FileComp(fn1,
00F440:  66 6E 32 29 0D 0A 09 45 4E 44 20 43 6F 6D 70 61    fn2)...END Compa
00F450:  72 65 4F 4B 3B 0D 0A 09 09 0D 0A 56 41 52 09 72    reOK;......VAR.r
00F460:  65 70 6C 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 42    eply:INTEGER;..B
00F470:  45 47 49 4E 0D 0A 0D 0A 0D 0A 09 47 65 74 50 61    EGIN.......GetPa
00F480:  72 61 6D 73 28 50 61 72 61 6D 2C 43 6F 75 6E 74    rams(Param,Count
00F490:  29 3B 0D 0A 09 49 46 20 28 43 6F 75 6E 74 3E 30    );...IF (Count>0
00F4A0:  29 20 41 4E 44 20 28 50 61 72 61 6D 5B 43 6F 75    ) AND (Param[Cou
00F4B0:  6E 74 5D 5E 2E 43 6C 61 73 73 3D 6F 70 74 69 6F    nt]^.Class=optio
00F4C0:  6E 29 20 54 48 45 4E 0D 0A 09 09 47 65 74 4F 70    n) THEN....GetOp
00F4D0:  74 69 6F 6E 73 28 50 61 72 61 6D 5B 43 6F 75 6E    tions(Param[Coun
00F4E0:  74 5D 29 3B 0D 0A 09 09 44 45 43 28 43 6F 75 6E    t]);....DEC(Coun
00F4F0:  74 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46    t);....END;...IF
00F500:  20 43 6F 75 6E 74 3C 32 20 54 48 45 4E 20 55 73     Count<2 THEN Us
00F510:  61 67 65 20 45 4E 44 3B 0D 0A 20 20 20 20 20 20    age END;..      
00F520:  20 20 49 46 20 43 6F 75 6E 74 3D 33 20 54 48 45      IF Count=3 THE
00F530:  4E 20 0D 0A 09 09 43 72 65 61 74 65 28 4C 69 73    N ....Create(Lis
00F540:  74 46 2C 46 69 6C 65 4E 61 6D 65 28 50 61 72 61    tF,FileName(Para
00F550:  6D 5B 33 5D 5E 2E 43 68 61 72 73 29 2C 72 65 70    m[3]^.Chars),rep
00F560:  6C 79 29 3B 0D 0A 09 09 49 46 20 72 65 70 6C 79    ly);....IF reply
00F570:  3C 30 20 54 48 45 4E 0D 0A 09 09 09 57 72 69 74    <0 THEN.....Writ
00F580:  65 53 74 72 69 6E 67 28 27 20 43 6F 75 6C 64 20    eString(' Could 
00F590:  6E 6F 74 20 6F 70 65 6E 20 6F 75 74 70 75 74 20    not open output 
00F5A0:  66 69 6C 65 20 27 29 3B 0D 0A 09 09 09 57 72 69    file ');.....Wri
00F5B0:  74 65 53 74 72 69 6E 67 28 50 61 72 61 6D 5B 33    teString(Param[3
00F5C0:  5D 5E 2E 43 68 61 72 73 29 3B 0D 0A 09 09 09 57    ]^.Chars);.....W
00F5D0:  72 69 74 65 4C 6E 3B 0D 0A 09 09 09 48 41 4C 54    riteLn;.....HALT
00F5E0:  3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 43 6F    ;.....END;....Co
00F5F0:  6E 6E 65 63 74 28 4C 69 73 74 2C 4C 69 73 74 46    nnect(List,ListF
00F600:  5D 3D 30 78 29 20 41 4E 44 20 28 50 61 72 61 6D    ]=0x) AND (Param
00F610:  5E 2E 43 68 61 72 73 5B 31 5D 3D 27 3A 27 29 20    ^.Chars[1]=':') 
00F620:  54 48 45 4E 0D 0A 09 09 54 65 78 74 3A 3D 27 20    THEN....Text:=' 
00F630:  3A 2A 2E 2A 27 3B 0D 0A 09 09 54 65 78 74 5B 30    :*.*';....Text[0
00F640:  5D 3A 3D 50 61 72 61 6D 5E 2E 43 68 61 72 73 5B    ]:=Param^.Chars[
00F650:  30 5D 3B 0D 0A 09 09 47 65 74 4E 61 6D 65 73 28    0];....GetNames(
00F660:  54 65 78 74 2C 4E 61 6D 65 54 65 78 74 2C 4E 61    Text,NameText,Na
00F670:  6D 65 43 6F 75 6E 74 29 3B 0D 0A 09 45 4C 53 45    meCount);...ELSE
00F680:  0D 0A 09 09 47 65 74 4E 61 6D 65 73 28 50 61 72    ....GetNames(Par
00F690:  61 6D 5E 2E 43 68 61 72 73 2C 4E 61 6D 65 54 65    am^.Chars,NameTe
00F6A0:  78 74 2C 4E 61 6D 65 43 6F 75 6E 74 29 3B 0D 0A    xt,NameCount);..
00F6B0:  09 09 45 4E 44 3B 0D 0A 09 0D 0A 09 28 2A 63 72    ..END;......(*cr
00F6C0:  61 63 6B 20 6E 61 6D 65 73 2A 29 0D 0A 0D 0A 09    ack names*).....
00F6D0:  46 4F 52 20 69 3A 3D 31 20 54 4F 20 4E 61 6D 65    FOR i:=1 TO Name
00F6E0:  43 6F 75 6E 74 20 44 4F 0D 0A 09 09 43 72 61 63    Count DO....Crac
00F6F0:  6B 46 69 6C 65 4E 61 6D 65 28 4E 61 6D 65 54 65    kFileName(NameTe
00F700:  78 74 5B 69 5D 2C 4E 61 6D 65 73 5B 69 5D 29 3B    xt[i],Names[i]);
00F710:  0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 49 46 20    ....END;.....IF 
00F720:  4E 61 6D 65 43 6F 75 6E 74 3E 31 20 54 48 45 4E    NameCount>1 THEN
00F730:  0D 0A 09 09 53 6F 72 74 52 65 63 6F 72 64 73 28    ....SortRecords(
00F740:  41 44 52 28 4E 61 6D 65 73 29 2C 43 41 52 44 49    ADR(Names),CARDI
00F750:  4E 41 4C 28 4E 61 6D 65 43 6F 75 6E 74 29 2C 0D    NAL(NameCount),.
00F760:  0A 09 09 09 54 53 49 5A 45 28 46 69 6C 65 52 65    ....TSIZE(FileRe
00F770:  63 6F 72 64 29 2C 43 6F 6D 70 61 72 29 3B 0D 0A    cord),Compar);..
00F780:  09 09 45 4E 44 3B 0D 0A 09 09 09 0D 0A 09 09 09    ..END;..........
00F790:  0D 0A 09 45 4E 44 20 45 78 70 61 6E 64 4E 61 6D    ...END ExpandNam
00F7A0:  65 73 3B 0D 0A 0D 0A 56 41 52 09 69 2C 6A 3A 49    es;....VAR.i,j:I
00F7B0:  4E 54 45 47 45 52 3B 0D 0A 50 52 4F 43 45 44 55    NTEGER;..PROCEDU
00F7C0:  52 45 20 57 72 69 74 65 54 6F 4C 69 73 74 28 56    RE WriteToList(V
00F7D0:  41 52 20 4E 3A 46 69 6C 65 52 65 63 6F 72 64 29    AR N:FileRecord)
00F7E0:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20    ;..BEGIN...WITH 
00F7F0:  4E 20 44 4F 0D 0A 09 09 49 6E 4F 75 74 2E 57 72    N DO....InOut.Wr
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 41 02 00 00 00 02    ......R...A.....
00F820:  0D 00 46 02 00 00 00 02 0D 00 42 02 00 00 00 02    ..F.......B.....
00F830:  0D 00 47 02 00 00 00 02 0D 00 43 02 00 00 00 02    ..G.......C.....
00F840:  0D 00 48 02 00 00 00 02 0D 00 44 02 00 00 00 02    ..H.......D.....
00F850:  0D 00 49 02 00 00 00 02 0D 00 45 02 00 00 00 02    ..I.......E.....
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:  2C 6F 75 74 70 75 74 29 3B 0D 0A 09 09 49 6E 4F    ,output);....InO
00F910:  75 74 2E 53 77 69 74 63 68 4F 75 74 53 74 72 65    ut.SwitchOutStre
00F920:  61 6D 28 4C 69 73 74 29 3B 0D 0A 09 09 4C 69 73    am(List);....Lis
00F930:  74 4F 70 65 6E 3A 3D 54 52 55 45 3B 0D 0A 09 45    tOpen:=TRUE;...E
00F940:  4C 53 45 0D 0A 09 09 49 46 20 4F 75 74 70 75 74    LSE....IF Output
00F950:  41 64 64 65 64 20 4F 52 20 4F 75 74 70 75 74 44    Added OR OutputD
00F960:  65 6C 65 74 65 64 20 4F 52 20 0D 0A 09 09 20 20    eleted OR ....  
00F970:  20 4F 75 74 70 75 74 45 71 75 61 6C 20 4F 52 20     OutputEqual OR 
00F980:  4F 75 74 70 75 74 4D 6F 64 69 66 69 65 64 20 54    OutputModified T
00F990:  48 45 4E 20 0D 0A 09 09 09 57 72 69 74 65 53 74    HEN .....WriteSt
00F9A0:  72 69 6E 67 28 27 20 41 20 44 20 45 20 61 6E 64    ring(' A D E and
00F9B0:  20 4D 20 6F 70 74 69 6F 6E 73 20 72 65 71 75 69     M options requi
00F9C0:  72 65 20 6F 75 74 70 75 74 20 66 69 6C 65 20 6E    re output file n
00F9D0:  61 6D 65 24 27 29 0D 0A 09 09 09 57 72 69 74 65    ame$').....Write
00F9E0:  4C 6E 3B 0D 0A 09 09 09 55 73 61 67 65 3B 0D 0A    Ln;.....Usage;..
00F9F0:  09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D    ...END;....END;.
00FA00:  0A 09 45 78 70 61 6E 64 4E 61 6D 65 73 28 50 61    ..ExpandNames(Pa
00FA10:  72 61 6D 5B 31 5D 2C 4C 65 66 74 4E 61 6D 65 73    ram[1],LeftNames
00FA20:  2C 4C 65 66 74 4E 61 6D 65 43 6F 75 6E 74 29 3B    ,LeftNameCount);
00FA30:  0D 0A 09 45 78 70 61 6E 64 4E 61 6D 65 73 28 50    ...ExpandNames(P
00FA40:  61 72 61 6D 5B 32 5D 2C 52 69 67 68 74 4E 61 6D    aram[2],RightNam
00FA50:  65 73 2C 52 69 67 68 74 4E 61 6D 65 43 6F 75 6E    es,RightNameCoun
00FA60:  74 29 3B 0D 0A 0D 0A 09 28 2A 6E 6F 77 20 70 65    t);.....(*now pe
00FA70:  72 66 6F 72 6D 20 6D 65 72 67 65 20 70 61 73 73    rform merge pass
00FA80:  20 6F 66 20 74 77 6F 20 6C 69 73 74 73 2A 29 0D     of two lists*).
00FA90:  0A 0D 0A 09 69 3A 3D 31 3B 0D 0A 09 6A 3A 3D 31    ....i:=1;...j:=1
00FAA0:  3B 0D 0A 09 57 48 49 4C 45 20 28 69 3C 3D 4C 65    ;...WHILE (i<=Le
00FAB0:  66 74 4E 61 6D 65 43 6F 75 6E 74 29 20 41 4E 44    ftNameCount) AND
00FAC0:  20 28 6A 3C 3D 52 69 67 68 74 4E 61 6D 65 43 6F     (j<=RightNameCo
00FAD0:  75 6E 74 29 20 44 4F 0D 0A 09 09 49 46 20 45 71    unt) DO....IF Eq
00FAE0:  75 61 6C 28 4C 65 66 74 4E 61 6D 65 73 5B 69 5D    ual(LeftNames[i]
00FAF0:  2C 52 69 67 68 74 4E 61 6D 65 73 5B 6A 5D 29 20    ,RightNames[j]) 
00FB00:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
00FB10:  4F 44 55 4C 45 20 46 69 6C 65 4F 70 73 3B 0D 0A    ODULE FileOps;..
00FB20:  0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D 09 49 4D    ..FROM.SYSTEM.IM
00FB30:  50 4F 52 54 20 42 59 54 45 2C 41 44 52 2C 41 44    PORT BYTE,ADR,AD
00FB40:  44 52 45 53 53 3B 0D 0A 46 52 4F 4D 09 53 54 4F    DRESS;..FROM.STO
00FB50:  52 41 47 45 20 49 4D 50 4F 52 54 20 46 72 65 65    RAGE IMPORT Free
00FB60:  53 70 61 63 65 2C 41 4C 4C 4F 43 41 54 45 2C 44    Space,ALLOCATE,D
00FB70:  45 41 4C 4C 4F 43 41 54 45 2C 52 45 4C 45 41 53    EALLOCATE,RELEAS
00FB80:  45 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 09 49    E;..FROM.Files.I
00FB90:  4D 50 4F 52 54 20 4C 6F 6F 6B 75 70 2C 43 72 65    MPORT Lookup,Cre
00FBA0:  61 74 65 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B    ate,SeqReadBlock
00FBB0:  2C 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 43    ,SeqWriteBlock,C
00FBC0:  6C 6F 73 65 2C 0D 0A 09 09 09 46 49 4C 45 2C 46    lose,.....FILE,F
00FBD0:  69 6C 65 4E 61 6D 65 3B 0D 0A 46 52 4F 4D 09 54    ileName;..FROM.T
00FBE0:  65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 57    erminal IMPORT W
00FBF0:  72 69 74 65 53 74 72 69 6E 67 2C 57 72 69 74 65    riteString,Write
00FC00:  4C 6E 3B 0D 0A 0D 0A 28 2A 09 50 65 72 66 6F 72    Ln;....(*.Perfor
00FC10:  6D 20 73 6F 6D 65 20 66 69 6C 65 20 6F 70 65 72    m some file oper
00FC20:  61 74 69 6F 6E 73 20 2A 29 0D 0A 0D 0A 54 59 50    ations *)....TYP
00FC30:  45 09 50 42 6C 6F 63 6B 3D 50 4F 49 4E 54 45 52    E.PBlock=POINTER
00FC40:  20 54 4F 20 42 6C 6F 63 6B 3B 0D 0A 09 42 6C 6F     TO Block;...Blo
00FC50:  63 6B 3D 41 52 52 41 59 5B 30 2E 2E 31 32 37 5D    ck=ARRAY[0..127]
00FC60:  20 4F 46 20 42 59 54 45 3B 0D 0A 56 41 52 09 62     OF BYTE;..VAR.b
00FC70:  31 2C 62 32 3A 50 42 6C 6F 63 6B 3B 0D 0A 09 69    1,b2:PBlock;...i
00FC80:  2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 42    ,j:CARDINAL;...B
00FC90:  75 66 66 53 69 7A 65 3A 43 41 52 44 49 4E 41 4C    uffSize:CARDINAL
00FCA0:  3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45    ;...reply:INTEGE
00FCB0:  52 3B 0D 0A 09 66 31 2C 66 32 3A 46 49 4C 45 3B    R;...f1,f2:FILE;
00FCC0:  0D 0A 09 72 65 70 6C 79 31 2C 72 65 70 6C 79 32    ...reply1,reply2
00FCD0:  3A 49 4E 54 45 47 45 52 3B 0D 0A 50 52 4F 43 45    :INTEGER;..PROCE
00FCE0:  44 55 52 45 20 53 65 74 55 70 28 43 6F 75 6E 74    DURE SetUp(Count
00FCF0:  3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A 28    :CARDINAL);....(
00FD00:  54 48 45 4E 0D 0A 0D 0A 09 09 09 57 72 69 74 65    THEN.......Write
00FD10:  4E 61 6D 65 28 4C 65 66 74 4E 61 6D 65 73 5B 69    Name(LeftNames[i
00FD20:  5D 2C 4F 75 74 70 75 74 45 71 75 61 6C 29 3B 0D    ],OutputEqual);.
00FD30:  0A 09 09 09 57 72 69 74 65 4E 61 6D 65 28 52 69    ....WriteName(Ri
00FD40:  67 68 74 4E 61 6D 65 73 5B 6A 5D 2C 46 41 4C 53    ghtNames[j],FALS
00FD50:  45 29 3B 0D 0A 09 09 09 49 46 20 43 6F 6D 70 61    E);.....IF Compa
00FD60:  72 65 43 6F 6E 74 65 6E 74 73 20 41 4E 44 20 0D    reContents AND .
00FD70:  0A 09 09 09 20 20 4E 4F 54 20 43 6F 6D 70 61 72    ....  NOT Compar
00FD80:  65 4F 4B 28 4C 65 66 74 4E 61 6D 65 73 5B 69 5D    eOK(LeftNames[i]
00FD90:  2C 52 69 67 68 74 4E 61 6D 65 73 5B 6A 5D 29 20    ,RightNames[j]) 
00FDA0:  54 48 45 4E 0D 0A 09 09 09 09 57 72 69 74 65 53    THEN......WriteS
00FDB0:  74 72 69 6E 67 28 27 20 46 69 6C 65 73 20 44 69    tring(' Files Di
00FDC0:  66 66 65 72 20 27 29 3B 0D 0A 09 09 09 09 49 46    ffer ');......IF
00FDD0:  20 4F 75 74 70 75 74 4D 6F 64 69 66 69 65 64 20     OutputModified 
00FDE0:  54 48 45 4E 0D 0A 09 09 09 09 09 57 72 69 74 65    THEN.......Write
00FDF0:  54 6F 4C 69 73 74 28 4C 65 66 74 4E 61 6D 65 73    ToList(LeftNames
00FE00:  5B 69 5D 29 3B 0D 0A 09 09 09 09 09 45 4E 44 3B    [i]);.......END;
00FE10:  0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 57    ......END;.....W
00FE20:  72 69 74 65 4C 6E 3B 0D 0A 09 09 09 49 4E 43 28    riteLn;.....INC(
00FE30:  69 29 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 3B 0D    i);.....INC(j);.
00FE40:  0A 0D 0A 09 09 45 4C 53 49 46 20 4E 4F 54 20 43    .....ELSIF NOT C
00FE50:  6F 6D 70 61 72 28 41 44 52 28 4C 65 66 74 4E 61    ompar(ADR(LeftNa
00FE60:  6D 65 73 5B 69 5D 29 2C 41 44 52 28 52 69 67 68    mes[i]),ADR(Righ
00FE70:  74 4E 61 6D 65 73 5B 6A 5D 29 29 20 54 48 45 4E    tNames[j])) THEN
00FE80:  0D 0A 0D 0A 09 09 09 50 72 69 6E 74 4C 65 66 74    .......PrintLeft
00FE90:  3B 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D 0A 0D    ;.....INC(i);...
00FEA0:  0A 09 09 45 4C 53 45 20 28 2A 4C 65 66 74 6E 61    ...ELSE (*Leftna
00FEB0:  6D 65 73 5B 69 5D 3E 52 69 67 68 74 4E 61 6D 65    mes[i]>RightName
00FEC0:  73 5B 6A 5D 2A 29 0D 0A 09 0D 0A 09 09 09 50 72    s[j]*)........Pr
00FED0:  69 6E 74 52 69 67 68 74 3B 09 0D 0A 09 09 09 49    intRight;......I
00FEE0:  4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E 44 3B 28    NC(j);.....END;(
00FEF0:  2A 49 46 2A 29 0D 0A 09 09 45 4E 44 3B 28 2A 57    *IF*)....END;(*W
00FF00:  2A 09 53 65 74 20 75 70 20 31 20 6F 72 20 32 20    *.Set up 1 or 2 
00FF10:  62 75 66 66 65 72 73 20 75 73 69 6E 67 20 61 6C    buffers using al
00FF20:  6C 20 61 76 61 69 6C 61 62 6C 65 20 6D 65 6D 6F    l available memo
00FF30:  72 79 20 2A 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A    ry *)....BEGIN..
00FF40:  09 69 3A 3D 28 46 72 65 65 53 70 61 63 65 28 29    .i:=(FreeSpace()
00FF50:  2D 31 30 32 34 29 20 44 49 56 20 31 32 38 3B 0D    -1024) DIV 128;.
00FF60:  0A 09 49 46 20 69 3C 43 6F 75 6E 74 20 54 48 45    ..IF i<Count THE
00FF70:  4E 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67    N....WriteString
00FF80:  28 27 20 4F 75 74 20 6F 66 20 4D 65 6D 6F 72 79    (' Out of Memory
00FF90:  20 69 6E 20 46 69 6C 65 4F 70 73 27 29 3B 0D 0A     in FileOps');..
00FFA0:  09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 48 41    ..WriteLn;....HA
00FFB0:  4C 54 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 69 3A    LT;....END;...i:
00FFC0:  3D 69 20 44 49 56 20 43 6F 75 6E 74 3B 0D 0A 09    =i DIV Count;...
00FFD0:  42 75 66 66 53 69 7A 65 3A 3D 31 32 38 2A 69 3B    BuffSize:=128*i;
00FFE0:  0D 0A 09 41 4C 4C 4F 43 41 54 45 28 62 31 2C 42    ...ALLOCATE(b1,B
00FFF0:  75 66 66 53 69 7A 65 29 3B 0D 0A 09 49 46 20 43    uffSize);...IF C
010000:  6F 75 6E 74 3D 32 20 54 48 45 4E 20 41 4C 4C 4F    ount=2 THEN ALLO
010010:  43 41 54 45 28 62 32 2C 42 75 66 66 53 69 7A 65    CATE(b2,BuffSize
010020:  29 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 53 65 74    ) END;...END Set
010030:  55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46    Up;..PROCEDURE F
010040:  72 65 65 55 70 28 69 3A 43 41 52 44 49 4E 41 4C    reeUp(i:CARDINAL
010050:  29 3B 0D 0A 28 2A 09 72 65 6C 65 61 73 65 20 62    );..(*.release b
010060:  75 66 66 65 72 73 20 2D 20 75 73 65 64 20 74 6F    uffers - used to
010070:  20 64 69 73 70 6F 73 65 20 74 68 65 6D 20 62 75     dispose them bu
010080:  74 20 6E 6F 77 0D 0A 09 64 6F 65 73 20 61 20 72    t now...does a r
010090:  65 6C 65 61 73 65 20 77 68 69 63 68 20 69 73 20    elease which is 
0100A0:  66 61 73 74 65 72 2E 20 41 73 20 61 20 72 65 73    faster. As a res
0100B0:  75 6C 74 20 70 61 72 61 6D 65 74 65 72 20 69 73    ult parameter is
0100C0:  20 6E 6F 74 20 72 65 71 75 69 72 65 64 0D 0A 20     not required.. 
0100D0:  2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 52 45 4C 45    *)..BEGIN...RELE
0100E0:  41 53 45 28 41 44 44 52 45 53 53 28 62 31 29 29    ASE(ADDRESS(b1))
0100F0:  3B 0D 0A 09 45 4E 44 20 46 72 65 65 55 70 3B 0D    ;...END FreeUp;.
010100:  48 49 4C 45 2A 29 0D 0A 0D 0A 09 28 2A 70 72 6F    HILE*).....(*pro
010110:  63 65 73 73 20 73 74 72 61 67 67 6C 65 72 73 2A    cess stragglers*
010120:  29 0D 0A 0D 0A 09 57 48 49 4C 45 20 69 3C 3D 4C    ).....WHILE i<=L
010130:  65 66 74 4E 61 6D 65 43 6F 75 6E 74 20 44 4F 0D    eftNameCount DO.
010140:  0A 09 09 50 72 69 6E 74 4C 65 66 74 3B 0D 0A 09    ...PrintLeft;...
010150:  09 49 4E 43 28 69 29 3B 0D 0A 09 09 45 4E 44 3B    .INC(i);....END;
010160:  0D 0A 0D 0A 09 57 48 49 4C 45 20 6A 3C 3D 52 69    .....WHILE j<=Ri
010170:  67 68 74 4E 61 6D 65 43 6F 75 6E 74 20 44 4F 0D    ghtNameCount DO.
010180:  0A 09 09 50 72 69 6E 74 52 69 67 68 74 3B 0D 0A    ...PrintRight;..
010190:  09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 45 4E 44    ..INC(j);....END
0101A0:  3B 0D 0A 09 49 46 20 4C 69 73 74 4F 70 65 6E 20    ;...IF ListOpen 
0101B0:  54 48 45 4E 0D 0A 09 09 44 69 73 63 6F 6E 6E 65    THEN....Disconne
0101C0:  63 74 28 4C 69 73 74 2C 54 52 55 45 29 3B 0D 0A    ct(List,TRUE);..
0101D0:  09 09 45 4E 44 3B 09 0D 0A 09 45 4E 44 20 43 6F    ..END;....END Co
0101E0:  6D 70 44 69 72 2E 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A    mpDir...........
0101F0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
010200:  46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 49 4C    Files IMPORT FIL
010210:  45 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B 3B 0D    E,SeqReadBlock;.
010220:  0A 56 41 52 09 49 6E 31 2C 49 6E 32 3A 46 49 4C    .VAR.In1,In2:FIL
010230:  45 3B 0D 0A 09 42 6C 6F 63 6B 31 2C 42 6C 6F 63    E;...Block1,Bloc
010240:  6B 32 3A 41 52 52 41 59 20 5B 30 2E 2E 31 32 37    k2:ARRAY [0..127
010250:  5D 20 4F 46 20 42 59 54 45 3B 0D 0A 09 72 65 70    ] OF BYTE;...rep
010260:  6C 79 31 2C 72 65 70 6C 79 32 3A 49 4E 54 45 47    ly1,reply2:INTEG
010270:  45 52 3B 0D 0A 09 4C 6F 63 3A 43 41 52 44 49 4E    ER;...Loc:CARDIN
010280:  41 4C 3B 0D 0A 09 69 2C 6A 3A 43 41 52 44 49 4E    AL;...i,j:CARDIN
010290:  41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 56    AL;..PROCEDURE V
0102A0:  65 72 79 51 75 69 63 6B 28 29 3A 42 4F 4F 4C 45    eryQuick():BOOLE
0102B0:  41 4E 3B 0D 0A 0D 0A 28 2A 09 4F 70 65 6E 20 61    AN;....(*.Open a
0102C0:  20 73 74 72 65 61 6D 20 66 6F 72 20 69 6E 70 75     stream for inpu
0102D0:  74 20 61 6E 64 20 61 20 73 74 72 65 61 6D 20 66    t and a stream f
0102E0:  6F 72 20 6F 75 74 70 75 74 20 2A 29 0D 0A 56 41    or output *)..VA
0102F0:  52 09 53 3A 41 52 52 41 59 5B 31 2E 2E 32 5D 20    R.S:ARRAY[1..2] 
010300:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 6C    ...PROCEDURE Fil
010310:  65 43 6F 6D 70 28 66 6E 31 2C 66 6E 32 3A 41 52    eComp(fn1,fn2:AR
010320:  52 41 59 20 4F 46 20 43 48 41 52 29 3A 42 4F 4F    RAY OF CHAR):BOO
010330:  4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 43 6F 6D 70    LEAN;....(*.Comp
010340:  61 72 65 20 74 77 6F 20 66 69 6C 65 73 20 2D 20    are two files - 
010350:  72 65 74 75 72 6E 20 54 52 55 45 20 69 66 20 65    return TRUE if e
010360:  71 75 61 6C 20 2A 29 0D 0A 56 41 52 09 69 3A 49    qual *)..VAR.i:I
010370:  4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E 0D 0A    NTEGER;..BEGIN..
010380:  09 53 65 74 55 70 28 32 29 3B 0D 0A 09 4C 6F 6F    .SetUp(2);...Loo
010390:  6B 75 70 28 66 31 2C 46 69 6C 65 4E 61 6D 65 28    kup(f1,FileName(
0103A0:  66 6E 31 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 49    fn1),reply);...I
0103B0:  46 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 20    F reply<>0 THEN 
0103C0:  0D 0A 09 09 46 72 65 65 55 70 28 32 29 3B 0D 0A    ....FreeUp(2);..
0103D0:  09 09 52 45 54 55 52 4E 20 46 41 4C 53 45 20 0D    ..RETURN FALSE .
0103E0:  0A 09 09 45 4E 44 3B 0D 0A 09 4C 6F 6F 6B 75 70    ...END;...Lookup
0103F0:  28 66 32 2C 46 69 6C 65 4E 61 6D 65 28 66 6E 32    (f2,FileName(fn2
010400:  29 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 20 72    ),reply);...IF r
010410:  65 70 6C 79 3C 3E 30 20 54 48 45 4E 20 0D 0A 09    eply<>0 THEN ...
010420:  09 46 72 65 65 55 70 28 32 29 3B 0D 0A 09 09 52    .FreeUp(2);....R
010430:  45 54 55 52 4E 20 46 41 4C 53 45 20 0D 0A 09 09    ETURN FALSE ....
010440:  45 4E 44 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 53    END;...LOOP....S
010450:  65 71 52 65 61 64 42 6C 6F 63 6B 28 66 31 2C 41    eqReadBlock(f1,A
010460:  44 52 28 62 31 5E 29 2C 42 75 66 66 53 69 7A 65    DR(b1^),BuffSize
010470:  2C 72 65 70 6C 79 31 29 3B 0D 0A 09 09 53 65 71    ,reply1);....Seq
010480:  52 65 61 64 42 6C 6F 63 6B 28 66 32 2C 41 44 52    ReadBlock(f2,ADR
010490:  28 62 32 5E 29 2C 42 75 66 66 53 69 7A 65 2C 72    (b2^),BuffSize,r
0104A0:  65 70 6C 79 32 29 3B 0D 0A 09 09 49 46 20 72 65    eply2);....IF re
0104B0:  70 6C 79 31 3C 3E 72 65 70 6C 79 32 20 54 48 45    ply1<>reply2 THE
0104C0:  4E 0D 0A 09 09 09 46 72 65 65 55 70 28 32 29 3B    N.....FreeUp(2);
0104D0:  0D 0A 09 09 09 52 45 54 55 52 4E 20 46 41 4C 53    .....RETURN FALS
0104E0:  45 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46    E.....END;....IF
0104F0:  20 72 65 70 6C 79 31 3C 3D 30 20 54 48 45 4E 20     reply1<=0 THEN 
010500:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
010510:  45 20 46 69 6C 65 4F 70 73 3B 0D 0A 0D 0A 28 2A    E FileOps;....(*
010520:  09 50 65 72 66 6F 72 6D 20 73 6F 6D 65 20 66 69    .Perform some fi
010530:  6C 65 20 6F 70 65 72 61 74 69 6F 6E 73 20 2A 29    le operations *)
010540:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69    ....PROCEDURE Fi
010550:  6C 65 43 6F 6D 70 28 66 31 2C 66 32 3A 41 52 52    leComp(f1,f2:ARR
010560:  41 59 20 4F 46 20 43 48 41 52 29 3A 42 4F 4F 4C    AY OF CHAR):BOOL
010570:  45 41 4E 3B 0D 0A 0D 0A 28 2A 09 43 6F 6D 70 61    EAN;....(*.Compa
010580:  72 65 20 74 77 6F 20 66 69 6C 65 73 20 2D 20 72    re two files - r
010590:  65 74 75 72 6E 20 54 52 55 45 20 69 66 20 65 71    eturn TRUE if eq
0105A0:  75 61 6C 0D 0A 0D 0A 09 49 46 20 65 69 74 68 65    ual.....IF eithe
0105B0:  72 20 66 69 6C 65 20 69 73 20 6E 6F 74 20 70 72    r file is not pr
0105C0:  65 73 65 6E 74 2C 20 46 41 4C 53 45 20 69 73 20    esent, FALSE is 
0105D0:  72 65 74 75 72 6E 65 64 0D 0A 09 46 41 4C 53 45    returned...FALSE
0105E0:  20 69 73 20 73 74 69 6C 6C 20 72 65 74 75 72 6E     is still return
0105F0:  65 64 20 69 66 20 6E 65 69 74 68 65 72 20 66 69    ed if neither fi
010600:  6C 65 20 69 73 20 70 72 65 73 65 6E 74 20 2A 29    le is present *)
010610:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69    ....PROCEDURE Fi
010620:  6C 65 4D 6F 76 65 28 66 31 2C 66 32 3A 41 52 52    leMove(f1,f2:ARR
010630:  41 59 20 4F 46 20 43 48 41 52 29 3A 42 4F 4F 4C    AY OF CHAR):BOOL
010640:  45 41 4E 3B 0D 0A 0D 0A 28 2A 09 4D 6F 76 65 20    EAN;....(*.Move 
010650:  66 31 20 74 6F 20 66 32 20 2D 20 72 65 74 75 72    f1 to f2 - retur
010660:  6E 73 20 54 52 55 45 20 69 66 20 73 75 63 63 65    ns TRUE if succe
010670:  73 73 66 75 6C 20 2A 29 0D 0A 0D 0A 45 4E 44 20    ssful *)....END 
010680:  46 69 6C 65 4F 70 73 2E 0D 0A 0D 0A 0D 0A 1A 1A    FileOps.........
010690:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0106A0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0106B0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0106C0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0106D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0106E0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0106F0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
010700:  0D 0A 09 09 09 46 72 65 65 55 70 28 32 29 3B 0D    .....FreeUp(2);.
010710:  0A 09 09 09 52 45 54 55 52 4E 20 54 52 55 45 20    ....RETURN TRUE 
010720:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 46 4F 52    .....END;....FOR
010730:  20 69 3A 3D 30 20 54 4F 20 72 65 70 6C 79 31 2D     i:=0 TO reply1-
010740:  31 20 44 4F 0D 0A 09 09 09 49 46 20 62 31 5E 5B    1 DO.....IF b1^[
010750:  69 5D 3C 3E 62 32 5E 5B 69 5D 20 54 48 45 4E 20    i]<>b2^[i] THEN 
010760:  0D 0A 09 09 09 09 46 72 65 65 55 70 28 32 29 3B    ......FreeUp(2);
010770:  0D 0A 09 09 09 09 52 45 54 55 52 4E 20 46 41 4C    ......RETURN FAL
010780:  53 45 20 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09    SE ......END;...
010790:  09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 2A    ..END;....END;(*
0107A0:  4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 46 69 6C    LOOP*)...END Fil
0107B0:  65 43 6F 6D 70 3B 0D 0A 50 52 4F 43 45 44 55 52    eComp;..PROCEDUR
0107C0:  45 20 46 69 6C 65 4D 6F 76 65 28 66 6E 31 2C 66    E FileMove(fn1,f
0107D0:  6E 32 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52    n2:ARRAY OF CHAR
0107E0:  29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49    ):BOOLEAN;..BEGI
0107F0:  4E 0D 0A 09 53 65 74 55 70 28 31 29 3B 0D 0A 09    N...SetUp(1);...
010800:  4C 6F 6F 6B 75 70 28 66 31 2C 46 69 6C 65 4E 61    Lookup(f1,FileNa
010810:  6D 65 28 66 6E 31 29 2C 72 65 70 6C 79 29 3B 0D    me(fn1),reply);.
010820:  0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54 48    ..IF reply<>0 TH
010830:  45 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E    EN....WriteStrin
010840:  67 28 27 20 49 6E 70 75 74 20 66 69 6C 65 20 6E    g(' Input file n
010850:  6F 74 20 66 6F 75 6E 64 20 27 29 3B 0D 0A 09 09    ot found ');....
010860:  57 72 69 74 65 4C 6E 3B 0D 0A 09 09 46 72 65 65    WriteLn;....Free
010870:  55 70 28 31 29 3B 0D 0A 09 09 52 45 54 55 52 4E    Up(1);....RETURN
010880:  20 46 41 4C 53 45 3B 0D 0A 09 09 45 4E 44 3B 0D     FALSE;....END;.
010890:  0A 09 43 72 65 61 74 65 28 66 32 2C 46 69 6C 65    ..Create(f2,File
0108A0:  4E 61 6D 65 28 66 6E 32 29 2C 72 65 70 6C 79 29    Name(fn2),reply)
0108B0:  3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20    ;...IF reply<>0 
0108C0:  54 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 72    THEN....WriteStr
0108D0:  69 6E 67 28 27 20 44 69 72 65 63 74 6F 72 79 20    ing(' Directory 
0108E0:  66 75 6C 6C 20 27 29 3B 0D 0A 09 09 57 72 69 74    full ');....Writ
0108F0:  65 4C 6E 3B 0D 0A 09 09 46 72 65 65 55 70 28 31    eLn;....FreeUp(1
010900:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010910:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010920:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010930:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010940:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010950:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010960:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010970:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010980:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010990:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0109A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0109B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0109C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0109D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0109E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0109F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010A00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010A10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010A20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010A30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010A40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010A50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010A60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010A70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010A80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010A90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010AA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010AB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010AC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010AD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010AE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
010AF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
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 41 02 00 00 00 02    ......R...A.....
010B20:  0E 00 46 02 00 00 00 02 0E 00 42 02 00 00 00 02    ..F.......B.....
010B30:  0E 00 47 02 00 00 00 02 0E 00 43 02 00 00 00 02    ..G.......C.....
010B40:  0E 00 48 02 00 00 00 02 0E 00 44 02 00 00 00 02    ..H.......D.....
010B50:  0E 00 49 02 00 00 00 02 0E 00 45 02 00 00 00 02    ..I.......E.....
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:  29 3B 0D 0A 09 09 52 45 54 55 52 4E 20 46 41 4C    );....RETURN FAL
010C10:  53 45 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C 4F    SE;....END;...LO
010C20:  4F 50 0D 0A 09 09 53 65 71 52 65 61 64 42 6C 6F    OP....SeqReadBlo
010C30:  63 6B 28 66 31 2C 41 44 52 28 62 31 5E 29 2C 42    ck(f1,ADR(b1^),B
010C40:  75 66 66 53 69 7A 65 2C 72 65 70 6C 79 31 29 3B    uffSize,reply1);
010C50:  0D 0A 09 09 49 46 20 72 65 70 6C 79 31 3C 3D 30    ....IF reply1<=0
010C60:  20 54 48 45 4E 0D 0A 09 09 09 43 6C 6F 73 65 28     THEN.....Close(
010C70:  66 31 29 3B 0D 0A 09 09 09 43 6C 6F 73 65 28 66    f1);.....Close(f
010C80:  32 29 3B 0D 0A 09 09 09 46 72 65 65 55 70 28 31    2);.....FreeUp(1
010C90:  29 3B 0D 0A 09 09 09 52 45 54 55 52 4E 20 54 52    );.....RETURN TR
010CA0:  55 45 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    UE;.....END;....
010CB0:  53 65 71 57 72 69 74 65 42 6C 6F 63 6B 28 66 32    SeqWriteBlock(f2
010CC0:  2C 41 44 52 28 62 32 5E 29 2C 42 75 66 66 53 69    ,ADR(b2^),BuffSi
010CD0:  7A 65 2C 72 65 70 6C 79 32 29 3B 0D 0A 09 09 49    ze,reply2);....I
010CE0:  46 20 72 65 70 6C 79 32 3C 3E 72 65 70 6C 79 31    F reply2<>reply1
010CF0:  20 54 48 45 4E 0D 0A 09 09 09 57 72 69 74 65 53     THEN.....WriteS
010D00:  74 72 69 6E 67 28 27 20 44 69 73 63 20 66 75 6C    tring(' Disc ful
010D10:  6C 20 27 29 3B 0D 0A 09 09 09 57 72 69 74 65 4C    l ');.....WriteL
010D20:  6E 3B 0D 0A 09 09 09 46 72 65 65 55 70 28 31 29    n;.....FreeUp(1)
010D30:  3B 0D 0A 09 09 09 52 45 54 55 52 4E 20 46 41 4C    ;.....RETURN FAL
010D40:  53 45 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    SE;.....END;....
010D50:  45 4E 44 3B 0D 0A 09 45 4E 44 20 46 69 6C 65 4D    END;...END FileM
010D60:  6F 76 65 3B 0D 0A 0D 0A 45 4E 44 20 46 69 6C 65    ove;....END File
010D70:  4F 70 73 2E 0D 0A 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A    Ops.............
010D80:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
010D90:  1A 00 00 00 00 00 52 42 82 0D 30 02 80 03 00 00    ......RB..0.....
010DA0:  54 45 53 54 4E 45 53 54 4D 4F 44 20 00 00 00 00    TESTNESTMOD ....
010DB0:  00 00 00 00 00 00 67 3E 52 0D 08 1F 5B 01 00 00    ......g>R...[...
010DC0:  53 4D 41 4C 4C 49 4F 20 52 45 4C 20 00 00 00 00    SMALLIO REL ....
010DD0:  00 00 00 00 00 00 AF 42 82 0D 38 02 00 09 00 00    .......B..8.....
010DE0:  42 55 49 4C 44 4C 49 42 42 41 54 20 00 00 00 00    BUILDLIBBAT ....
010DF0:  00 00 00 00 00 00 87 9D 79 0C AB 13 00 03 00 00    ........y.......
010E00:  2C 6E 61 6D 65 29 3B 0D 0A 0D 0A 09 49 46 20 66    ,name);.....IF f
010E10:  2E 66 63 62 64 6E 3D 30 20 54 48 45 4E 20 44 65    .fcbdn=0 THEN De
010E20:  76 43 68 61 72 3A 3D 27 20 27 0D 0A 09 45 4C 53    vChar:=' '...ELS
010E30:  45 20 44 65 76 43 68 61 72 3A 3D 43 48 52 28 4F    E DevChar:=CHR(O
010E40:  52 44 28 66 2E 66 63 62 64 6E 29 2B 28 4F 52 44    RD(f.fcbdn)+(ORD
010E50:  28 27 41 27 29 2D 31 29 29 20 45 4E 44 3B 0D 0A    ('A')-1)) END;..
010E60:  0D 0A 0D 0A 09 28 2A 09 4E 6F 77 20 73 63 61 6E    .....(*.Now scan
010E70:  20 66 6F 72 20 6D 61 74 63 68 69 6E 67 20 6E 61     for matching na
010E80:  6D 65 73 2A 29 0D 0A 0D 0A 09 69 3A 3D 42 44 4F    mes*).....i:=BDO
010E90:  53 28 73 64 61 66 63 2C 41 44 52 28 64 6D 61 29    S(sdafc,ADR(dma)
010EA0:  29 3B 09 28 2A 73 65 74 20 64 6D 61 20 62 75 66    );.(*set dma buf
010EB0:  66 65 72 20 61 64 64 72 65 73 73 2A 29 09 0D 0A    fer address*)...
010EC0:  09 69 3A 3D 42 44 4F 53 28 73 66 6F 66 63 2C 41    .i:=BDOS(sfofc,A
010ED0:  44 52 28 66 29 29 3B 09 09 28 2A 73 74 61 72 74    DR(f));..(*start
010EE0:  20 73 65 61 72 63 68 2A 29 0D 0A 09 43 6F 75 6E     search*)...Coun
010EF0:  74 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 69 3C    t:=0;...WHILE i<
010F00:  3E 32 35 35 20 44 4F 0D 0A 09 09 6A 3A 3D 30 3B    >255 DO....j:=0;
010F10:  0D 0A 09 09 49 46 20 44 65 76 43 68 61 72 3C 3E    ....IF DevChar<>
010F20:  27 20 27 20 54 48 45 4E 0D 0A 09 09 09 6E 61 6D    ' ' THEN.....nam
010F30:  65 5B 30 5D 3A 3D 44 65 76 43 68 61 72 3B 0D 0A    e[0]:=DevChar;..
010F40:  09 09 09 6E 61 6D 65 5B 31 5D 3A 3D 27 3A 27 3B    ...name[1]:=':';
010F50:  0D 0A 09 09 09 6A 3A 3D 32 3B 0D 0A 09 09 09 45    .....j:=2;.....E
010F60:  4E 44 3B 0D 0A 09 09 57 49 54 48 20 64 6D 61 5B    ND;....WITH dma[
010F70:  69 5D 20 44 4F 0D 0A 09 09 09 6B 3A 3D 31 3B 0D    i] DO.....k:=1;.
010F80:  0A 09 09 09 57 48 49 4C 45 20 28 6B 3C 3D 48 49    ....WHILE (k<=HI
010F90:  47 48 28 64 69 72 66 6E 29 29 20 41 4E 44 20 28    GH(dirfn)) AND (
010FA0:  64 69 72 66 6E 5B 6B 5D 3C 3E 27 20 27 29 20 44    dirfn[k]<>' ') D
010FB0:  4F 0D 0A 09 09 09 09 6E 61 6D 65 5B 6A 5D 3A 3D    O......name[j]:=
010FC0:  64 69 72 66 6E 5B 6B 5D 3B 0D 0A 09 09 09 09 49    dirfn[k];......I
010FD0:  4E 43 28 6A 29 3B 0D 0A 09 09 09 09 49 4E 43 28    NC(j);......INC(
010FE0:  6B 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09    k);......END;...
010FF0:  09 09 6E 61 6D 65 5B 6A 5D 3A 3D 27 2E 27 3B 0D    ..name[j]:='.';.
011000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0110A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0110B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0110C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0110D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0110E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0110F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011100:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011110:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011120:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011130:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011140:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011150:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011160:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011170:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011180:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011190:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0111A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0111B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0111C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0111D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0111E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0111F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
011200:  0A 09 09 09 6B 3A 3D 31 3B 49 4E 43 28 6A 29 3B    ....k:=1;INC(j);
011210:  0D 0A 09 09 09 57 48 49 4C 45 20 28 6B 3C 3D 48    .....WHILE (k<=H
011220:  49 47 48 28 64 69 72 66 74 29 29 20 41 4E 44 20    IGH(dirft)) AND 
011230:  28 64 69 72 66 74 5B 6B 5D 3C 3E 27 20 27 29 20    (dirft[k]<>' ') 
011240:  44 4F 0D 0A 09 09 09 09 6E 61 6D 65 5B 6A 5D 3A    DO......name[j]:
011250:  3D 64 69 72 66 74 5B 6B 5D 3B 0D 0A 09 09 09 09    =dirft[k];......
011260:  49 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 49 4E 43    INC(j);......INC
011270:  28 6B 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A    (k);......END;..
011280:  09 09 09 45 4E 44 3B 20 28 2A 57 49 54 48 20 44    ...END; (*WITH D
011290:  4D 41 2A 29 0D 0A 09 09 46 4F 52 20 6A 3A 3D 6A    MA*)....FOR j:=j
0112A0:  20 54 4F 20 48 49 47 48 28 6E 61 6D 65 29 20 44     TO HIGH(name) D
0112B0:  4F 20 6E 61 6D 65 5B 6A 5D 3A 3D 27 20 27 20 45    O name[j]:=' ' E
0112C0:  4E 44 3B 0D 0A 09 09 6E 61 6D 65 73 5B 43 6F 75    ND;....names[Cou
0112D0:  6E 74 5D 3A 3D 6E 61 6D 65 3B 0D 0A 09 09 49 4E    nt]:=name;....IN
0112E0:  43 28 43 6F 75 6E 74 29 3B 0D 0A 09 09 69 3A 3D    C(Count);....i:=
0112F0:  42 44 4F 53 28 73 6E 6F 66 63 2C 41 44 52 28 66    BDOS(snofc,ADR(f
011300:  29 29 3B 09 28 2A 67 6F 20 74 6F 20 6E 65 78 74    ));.(*go to next
011310:  2A 29 0D 0A 09 09 45 4E 44 3B 20 28 2A 57 48 49    *)....END; (*WHI
011320:  4C 45 20 69 3C 3E 32 35 35 2A 29 0D 0A 09 0D 0A    LE i<>255*).....
011330:  09 69 3A 3D 42 44 4F 53 28 73 64 61 66 63 2C 38    .i:=BDOS(sdafc,8
011340:  30 48 29 3B 09 09 28 2A 72 65 73 65 74 20 74 6F    0H);..(*reset to
011350:  20 64 65 66 61 75 6C 74 2A 29 0D 0A 09 0D 0A 09     default*)......
011360:  45 4E 44 20 53 65 61 72 63 68 46 6F 72 46 69 6C    END SearchForFil
011370:  65 4E 61 6D 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A    eNames;..BEGIN..
011380:  0D 0A 09 28 2A 20 43 6F 6E 76 65 72 74 20 50 61    ...(* Convert Pa
011390:  74 74 65 72 6E 20 74 6F 20 61 20 66 69 6C 65 20    ttern to a file 
0113A0:  6E 61 6D 65 2A 29 0D 0A 09 0D 0A 09 6A 3A 3D 48    name*)......j:=H
0113B0:  49 47 48 28 50 61 74 74 65 72 6E 29 3B 0D 0A 09    IGH(Pattern);...
0113C0:  57 69 6C 64 43 61 72 64 3A 3D 46 41 4C 53 45 3B    WildCard:=FALSE;
0113D0:  0D 0A 09 49 46 20 6A 3E 48 49 47 48 28 6E 61 6D    ...IF j>HIGH(nam
0113E0:  65 29 20 54 48 45 4E 20 6A 3A 3D 48 49 47 48 28    e) THEN j:=HIGH(
0113F0:  6E 61 6D 65 29 20 45 4E 44 3B 0D 0A 09 46 4F 52    name) END;...FOR
011400:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
011410:  45 20 47 65 74 46 69 6C 65 73 3B 0D 0A 0D 0A 28    E GetFiles;....(
011420:  2A 09 47 65 74 20 61 20 6C 69 73 74 20 6F 66 20    *.Get a list of 
011430:  66 69 6C 65 20 6E 61 6D 65 73 20 6D 65 65 74 69    file names meeti
011440:  6E 67 20 61 20 77 69 6C 64 63 61 72 64 20 64 65    ng a wildcard de
011450:  73 63 72 69 70 74 69 6F 6E 2A 29 0D 0A 46 52 4F    scription*)..FRO
011460:  4D 20 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46    M Files IMPORT F
011470:  69 6C 65 4E 61 6D 65 3B 0D 0A 50 52 4F 43 45 44    ileName;..PROCED
011480:  55 52 45 20 47 65 74 4E 61 6D 65 73 28 50 61 74    URE GetNames(Pat
011490:  74 65 72 6E 3A 41 52 52 41 59 20 4F 46 20 43 48    tern:ARRAY OF CH
0114A0:  41 52 3B 0D 0A 09 09 56 41 52 09 6E 61 6D 65 73    AR;....VAR.names
0114B0:  3A 41 52 52 41 59 20 4F 46 20 46 69 6C 65 4E 61    :ARRAY OF FileNa
0114C0:  6D 65 3B 56 41 52 20 63 6F 75 6E 74 3A 49 4E 54    me;VAR count:INT
0114D0:  45 47 45 52 29 3B 0D 0A 0D 0A 28 2A 09 50 61 74    EGER);....(*.Pat
0114E0:  74 65 72 6E 20 69 73 20 61 20 70 61 74 74 65 72    tern is a patter
0114F0:  6E 20 74 6F 20 75 73 65 20 66 6F 72 20 74 68 65    n to use for the
011500:  20 73 65 61 72 63 68 0D 0A 09 6E 61 6D 65 73 20     search...names 
011510:  72 65 74 75 72 6E 73 20 61 20 6C 69 73 74 20 6F    returns a list o
011520:  66 20 6D 61 74 63 68 69 6E 67 20 66 69 6C 65 20    f matching file 
011530:  6E 61 6D 65 20 28 77 69 74 68 20 6E 6F 20 64 65    name (with no de
011540:  76 69 63 65 20 6E 61 6D 65 0D 0A 09 09 6F 6E 20    vice name....on 
011550:  74 68 65 20 66 72 6F 6E 74 29 0D 0A 09 63 6F 75    the front)...cou
011560:  6E 74 20 72 65 74 75 72 6E 73 20 6E 75 6D 62 65    nt returns numbe
011570:  72 20 6F 66 20 6E 61 6D 65 73 20 72 65 74 75 72    r of names retur
011580:  6E 65 64 20 69 6E 20 6E 61 6D 65 73 0D 0A 0D 0A    ned in names....
011590:  09 49 66 20 74 68 65 20 67 69 76 65 6E 20 6E 61    .If the given na
0115A0:  6D 65 20 63 6F 6E 74 61 69 6E 73 20 6E 6F 20 77    me contains no w
0115B0:  69 6C 64 20 63 61 72 64 2C 20 69 74 20 69 73 20    ild card, it is 
0115C0:  61 6C 77 61 79 73 20 72 65 74 75 72 6E 65 64 0D    always returned.
0115D0:  0A 09 61 73 20 74 68 65 20 6F 6E 6C 79 20 6D 61    ..as the only ma
0115E0:  74 63 68 2C 20 77 68 65 74 68 65 72 20 69 74 20    tch, whether it 
0115F0:  65 78 69 73 74 73 20 6F 72 20 6E 6F 74 20 0D 0A    exists or not ..
011600:  20 69 3A 3D 30 20 54 4F 20 6A 20 44 4F 20 0D 0A     i:=0 TO j DO ..
011610:  09 09 6E 61 6D 65 5B 69 5D 3A 3D 50 61 74 74 65    ..name[i]:=Patte
011620:  72 6E 5B 69 5D 3B 0D 0A 09 09 49 46 20 28 6E 61    rn[i];....IF (na
011630:  6D 65 5B 69 5D 3D 27 2A 27 29 20 4F 52 20 28 6E    me[i]='*') OR (n
011640:  61 6D 65 5B 69 5D 3D 27 3F 27 29 20 54 48 45 4E    ame[i]='?') THEN
011650:  20 57 69 6C 64 43 61 72 64 3A 3D 54 52 55 45 20     WildCard:=TRUE 
011660:  45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 46    END;....END;...F
011670:  4F 52 20 69 3A 3D 69 2B 31 20 54 4F 20 48 49 47    OR i:=i+1 TO HIG
011680:  48 28 6E 61 6D 65 29 20 44 4F 20 6E 61 6D 65 5B    H(name) DO name[
011690:  69 5D 3A 3D 27 20 27 20 45 4E 44 3B 0D 0A 0D 0A    i]:=' ' END;....
0116A0:  09 49 46 20 57 69 6C 64 43 61 72 64 20 54 48 45    .IF WildCard THE
0116B0:  4E 20 53 65 61 72 63 68 46 6F 72 46 69 6C 65 4E    N SearchForFileN
0116C0:  61 6D 65 73 0D 0A 09 45 4C 53 45 0D 0A 09 09 43    ames...ELSE....C
0116D0:  6F 75 6E 74 3A 3D 31 3B 0D 0A 09 09 6E 61 6D 65    ount:=1;....name
0116E0:  73 5B 30 5D 3A 3D 6E 61 6D 65 0D 0A 09 09 45 4E    s[0]:=name....EN
0116F0:  44 3B 0D 0A 09 45 4E 44 20 47 65 74 4E 61 6D 65    D;...END GetName
011700:  73 3B 0D 0A 45 4E 44 20 47 65 74 46 69 6C 65 73    s;..END GetFiles
011710:  2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
011720:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
011730:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
011740:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
011750:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
011760:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
011770:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
011780:  70 5E 20 44 4F 0D 0A 09 09 69 3A 3D 30 3B 0D 0A    p^ DO....i:=0;..
011790:  09 09 4C 4F 4F 50 0D 0A 09 09 09 43 41 53 45 20    ..LOOP.....CASE 
0117A0:  43 68 61 72 73 5B 69 5D 20 4F 46 0D 0A 09 09 09    Chars[i] OF.....
0117B0:  09 30 78 3A 45 58 49 54 7C 0D 0A 09 09 09 09 27    .0x:EXIT|......'
0117C0:  54 27 3A 43 6F 6D 70 63 6C 61 73 73 3A 3D 54 79    T':Compclass:=Ty
0117D0:  70 65 7C 0D 0A 09 09 09 09 27 4E 27 3A 43 6F 6D    pe|......'N':Com
0117E0:  70 63 6C 61 73 73 3A 3D 4E 61 6D 65 7C 0D 0A 09    pclass:=Name|...
0117F0:  09 09 09 27 45 27 3A 4F 75 74 70 75 74 45 71 75    ...'E':OutputEqu
011800:  0D 0A 09 57 68 69 6C 65 20 74 68 69 73 20 6D 65    ...While this me
011810:  61 6E 73 20 74 68 61 74 20 74 68 69 73 20 72 6F    ans that this ro
011820:  75 74 69 6E 65 20 63 61 6E 6E 6F 74 20 62 65 20    utine cannot be 
011830:  75 73 65 64 20 74 6F 20 63 68 65 63 6B 20 66 6F    used to check fo
011840:  72 0D 0A 09 74 68 65 20 65 78 69 73 74 65 6E 63    r...the existenc
011850:  65 20 6F 66 20 61 20 66 69 6C 65 2C 20 69 74 20    e of a file, it 
011860:  63 61 6E 20 62 65 20 75 73 65 64 20 74 6F 20 63    can be used to c
011870:  6F 6E 76 65 72 74 20 61 20 70 61 72 61 6D 65 74    onvert a paramet
011880:  65 72 0D 0A 09 74 6F 20 61 20 66 69 6C 65 6E 61    er...to a filena
011890:  6D 65 20 61 73 20 72 65 71 75 69 72 65 64 20 62    me as required b
0118A0:  79 20 74 68 65 20 6D 6F 64 75 6C 65 20 46 69 6C    y the module Fil
0118B0:  65 73 20 2A 29 0D 0A 45 4E 44 20 47 65 74 46 69    es *)..END GetFi
0118C0:  6C 65 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    les.............
0118D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0118E0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0118F0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
011900:  61 72 61 6D 65 74 65 72 3B 09 09 28 2A 61 72 65    arameter;..(*are
011910:  61 20 66 6F 72 20 63 6F 6D 6D 61 6E 64 20 6C 69    a for command li
011920:  6E 65 2A 29 0D 0A 09 43 6F 75 6E 74 3A 49 4E 54    ne*)...Count:INT
011930:  45 47 45 52 3B 09 09 09 09 28 2A 70 61 72 61 6D    EGER;....(*param
011940:  65 74 65 72 73 2A 29 0D 0A 0D 0A 09 4C 65 66 74    eters*).....Left
011950:  4E 61 6D 65 73 2C 52 69 67 68 74 4E 61 6D 65 73    Names,RightNames
011960:  3A 46 69 6C 65 41 72 72 61 79 3B 0D 0A 09 4C 65    :FileArray;...Le
011970:  66 74 4E 61 6D 65 43 6F 75 6E 74 2C 52 69 67 68    ftNameCount,Righ
011980:  74 4E 61 6D 65 43 6F 75 6E 74 3A 49 4E 54 45 47    tNameCount:INTEG
011990:  45 52 3B 0D 0A 0D 0A 09 43 6F 6D 70 63 6C 61 73    ER;.....Compclas
0119A0:  73 3A 43 6F 6D 70 43 6C 61 73 73 3D 57 68 6F 6C    s:CompClass=Whol
0119B0:  65 3B 0D 0A 09 4F 75 74 70 75 74 41 64 64 65 64    e;...OutputAdded
0119C0:  3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D    :BOOLEAN=FALSE;.
0119D0:  0A 09 4F 75 74 70 75 74 45 71 75 61 6C 3A 42 4F    ..OutputEqual:BO
0119E0:  4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 43    OLEAN=FALSE;...C
0119F0:  6F 6D 70 61 72 65 43 6F 6E 74 65 6E 74 73 3A 42    ompareContents:B
011A00:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
011A10:  45 20 49 6D 70 6F 72 74 3B 0D 0A 0D 0A 28 2A 09    E Import;....(*.
011A20:  54 68 69 73 20 6D 6F 64 75 6C 65 20 61 6C 6C 6F    This module allo
011A30:  77 73 20 79 6F 75 20 74 6F 20 70 69 63 6B 20 75    ws you to pick u
011A40:  70 0D 0A 09 69 6E 66 6F 72 6D 61 74 69 6F 6E 20    p...information 
011A50:  61 62 6F 75 74 20 73 79 6D 62 6F 6C 73 20 65 78    about symbols ex
011A60:  70 6F 72 74 65 64 0D 0A 09 66 72 6F 6D 20 61 6E    ported...from an
011A70:  6F 74 68 65 72 20 6D 6F 64 75 6C 65 2E 20 49 74    other module. It
011A80:  20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20     is used by the 
011A90:  61 73 73 65 6D 62 6C 65 72 0D 0A 09 43 6F 70 79    assembler...Copy
011AA0:  72 69 67 68 74 20 28 43 29 20 44 61 76 65 20 4D    right (C) Dave M
011AB0:  6F 6F 72 65 2C 20 46 54 4C 20 4D 6F 64 75 6C 61    oore, FTL Modula
011AC0:  2D 32 20 31 39 38 36 0D 0A 09 54 68 69 73 20 69    -2 1986...This i
011AD0:  73 20 61 20 67 65 6E 65 72 69 63 20 6D 6F 64 75    s a generic modu
011AE0:  6C 65 0D 0A 20 2A 29 0D 0A 46 52 4F 4D 09 53 59    le.. *)..FROM.SY
011AF0:  53 54 45 4D 20 49 4D 50 4F 52 54 20 42 59 54 45    STEM IMPORT BYTE
011B00:  2C 41 44 44 52 45 53 53 3B 0D 0A 46 52 4F 4D 09    ,ADDRESS;..FROM.
011B10:  46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 69 6C    Files IMPORT Fil
011B20:  65 4E 61 6D 65 3B 0D 0A 54 59 50 45 09 61 6C 66    eName;..TYPE.alf
011B30:  61 09 3D 20 41 52 52 41 59 5B 31 2E 2E 33 32 5D    a.= ARRAY[1..32]
011B40:  20 4F 46 20 43 48 41 52 3B 20 0D 0A 09 0D 0A 09     OF CHAR; ......
011B50:  74 79 70 65 63 6C 61 73 73 3D 28 69 6E 74 74 79    typeclass=(intty
011B60:  70 65 2C 72 65 61 6C 74 79 70 65 2C 63 68 61 72    pe,realtype,char
011B70:  74 79 70 65 2C 62 6F 6F 6C 74 79 70 65 2C 0D 0A    type,booltype,..
011B80:  09 09 61 72 72 61 79 74 79 70 65 2C 72 65 63 6F    ..arraytype,reco
011B90:  72 64 74 79 70 65 2C 73 75 62 72 74 79 70 65 2C    rdtype,subrtype,
011BA0:  66 6F 72 77 61 72 64 72 65 66 2C 70 6F 69 6E 74    forwardref,point
011BB0:  74 79 70 65 2C 0D 0A 09 09 73 65 74 74 79 70 65    type,....settype
011BC0:  2C 73 74 72 69 6E 67 74 79 70 65 2C 77 6F 72 64    ,stringtype,word
011BD0:  74 79 70 65 2C 62 79 74 65 74 79 70 65 2C 70 72    type,bytetype,pr
011BE0:  74 79 70 65 2C 65 6E 75 6D 74 79 70 65 2C 0D 0A    type,enumtype,..
011BF0:  09 09 63 61 72 64 74 79 70 65 2C 61 64 64 72 74    ..cardtype,addrt
011C00:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
011C10:  4F 44 55 4C 45 20 47 65 74 46 69 6C 65 73 3B 0D    ODULE GetFiles;.
011C20:  0A 46 52 4F 4D 20 43 50 4D 20 49 4D 50 4F 52 54    .FROM CPM IMPORT
011C30:  20 42 44 4F 53 2C 42 44 4F 53 48 4C 2C 73 66 6F     BDOS,BDOSHL,sfo
011C40:  66 63 2C 73 6E 6F 66 63 2C 66 63 62 2C 73 64 61    fc,snofc,fcb,sda
011C50:  66 63 3B 0D 0A 46 52 4F 4D 20 43 50 4D 42 49 4F    fc;..FROM CPMBIO
011C60:  53 20 49 4D 50 4F 52 54 20 64 69 72 65 63 74 6F    S IMPORT directo
011C70:  72 79 3B 0D 0A 46 52 4F 4D 20 53 59 53 54 45 4D    ry;..FROM SYSTEM
011C80:  20 49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 46 52     IMPORT ADR;..FR
011C90:  4F 4D 20 46 69 6C 65 73 20 49 4D 50 4F 52 54 20    OM Files IMPORT 
011CA0:  43 6F 6E 76 65 72 74 46 69 6C 65 4E 61 6D 65 3B    ConvertFileName;
011CB0:  0D 0A 28 2A 09 47 65 74 20 61 20 6C 69 73 74 20    ..(*.Get a list 
011CC0:  6F 66 20 66 69 6C 65 20 6E 61 6D 65 73 20 6D 65    of file names me
011CD0:  65 74 69 6E 67 20 61 20 77 69 6C 64 63 61 72 64    eting a wildcard
011CE0:  20 64 65 73 63 72 69 70 74 69 6F 6E 2A 29 0D 0A     description*)..
011CF0:  56 41 52 09 69 2C 6A 2C 6B 3A 49 4E 54 45 47 45    VAR.i,j,k:INTEGE
011D00:  52 3B 0D 0A 09 66 3A 66 63 62 3B 0D 0A 09 6E 61    R;...f:fcb;...na
011D10:  6D 65 3A 46 69 6C 65 4E 61 6D 65 3B 0D 0A 09 44    me:FileName;...D
011D20:  65 76 43 68 61 72 3A 43 48 41 52 3B 0D 0A 09 57    evChar:CHAR;...W
011D30:  69 6C 64 43 61 72 64 3A 42 4F 4F 4C 45 41 4E 3B    ildCard:BOOLEAN;
011D40:  0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 4E    ..PROCEDURE GetN
011D50:  61 6D 65 73 28 50 61 74 74 65 72 6E 3A 41 52 52    ames(Pattern:ARR
011D60:  41 59 20 4F 46 20 43 48 41 52 3B 56 41 52 20 6E    AY OF CHAR;VAR n
011D70:  61 6D 65 73 3A 41 52 52 41 59 20 4F 46 20 46 69    ames:ARRAY OF Fi
011D80:  6C 65 4E 61 6D 65 3B 0D 0A 09 09 20 20 56 41 52    leName;....  VAR
011D90:  20 43 6F 75 6E 74 3A 49 4E 54 45 47 45 52 29 3B     Count:INTEGER);
011DA0:  0D 0A 56 41 52 09 64 6D 61 3A 41 52 52 41 59 20    ..VAR.dma:ARRAY 
011DB0:  5B 30 2E 2E 33 5D 20 4F 46 20 64 69 72 65 63 74    [0..3] OF direct
011DC0:  6F 72 79 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52    ory;....PROCEDUR
011DD0:  45 20 53 65 61 72 63 68 46 6F 72 46 69 6C 65 4E    E SearchForFileN
011DE0:  61 6D 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43    ames;..BEGIN...C
011DF0:  6F 6E 76 65 72 74 46 69 6C 65 4E 61 6D 65 28 66    onvertFileName(f
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 41 02 00 00 00 02    ......R...A.....
011E20:  0F 00 46 02 00 00 00 02 0F 00 42 02 00 00 00 02    ..F.......B.....
011E30:  0F 00 47 02 00 00 00 02 0F 00 43 02 00 00 00 02    ..G.......C.....
011E40:  0F 00 48 02 00 00 00 02 0F 00 44 02 00 00 00 02    ..H.......D.....
011E50:  0F 00 49 02 00 00 00 02 0F 00 45 02 00 00 00 02    ..I.......E.....
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:  79 70 65 2C 75 6E 6B 6E 6F 77 6E 74 79 70 65 2C    ype,unknowntype,
011F10:  69 6E 74 6F 72 63 61 72 64 29 3B 0D 0A 09 70 6E    intorcard);...pn
011F20:  61 6D 65 3D 50 4F 49 4E 54 45 52 20 54 4F 20 6E    ame=POINTER TO n
011F30:  61 6D 65 3B 0D 0A 0D 0A 09 70 70 61 72 61 6D 3D    ame;.....pparam=
011F40:  50 4F 49 4E 54 45 52 20 54 4F 20 70 61 72 61 6D    POINTER TO param
011F50:  3B 0D 0A 09 70 61 72 61 6D 3D 52 45 43 4F 52 44    ;...param=RECORD
011F60:  0D 0A 09 09 76 61 72 70 61 72 3A 42 4F 4F 4C 45    ....varpar:BOOLE
011F70:  41 4E 3B 0D 0A 09 09 76 61 72 74 79 70 65 3A 70    AN;....vartype:p
011F80:  6E 61 6D 65 3B 0D 0A 09 09 6E 65 78 74 3A 70 70    name;....next:pp
011F90:  61 72 61 6D 3B 0D 0A 09 09 6F 70 65 6E 61 72 72    aram;....openarr
011FA0:  61 79 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09 09 45    ay:BOOLEAN;....E
011FB0:  4E 44 3B 0D 0A 09 6F 62 6A 65 63 74 09 3D 20 28    ND;...object.= (
011FC0:  20 28 2A 20 74 79 70 65 73 20 6F 66 20 73 79 6D     (* types of sym
011FD0:  62 6F 6C 20 74 61 62 6C 65 20 65 6E 74 72 79 73    bol table entrys
011FE0:  20 2A 29 0D 0A 09 09 63 6F 6E 73 74 61 6E 74 2C     *)....constant,
011FF0:  20 70 72 6F 7A 65 64 75 72 65 2C 20 66 75 6E 6B     prozedure, funk
012000:  74 69 6F 6E 2C 0D 0A 09 09 76 61 72 69 61 62 6C    tion,....variabl
012010:  65 2C 20 74 69 70 65 2C 73 74 64 70 72 6F 63 2C    e, tipe,stdproc,
012020:  73 74 64 66 75 6E 63 2C 6D 6F 64 63 6C 61 73 73    stdfunc,modclass
012030:  2C 6C 69 6E 6B 63 6C 61 73 73 2C 66 6F 72 72 65    ,linkclass,forre
012040:  66 65 72 0D 0A 09 09 29 3B 0D 0A 09 76 66 6F 72    fer....);...vfor
012050:  6D 3D 42 59 54 45 3B 0D 0A 09 6E 61 6D 65 3D 52    m=BYTE;...name=R
012060:  45 43 4F 52 44 0D 0A 09 09 6C 6F 77 65 72 3A 70    ECORD....lower:p
012070:  6E 61 6D 65 3B 0D 0A 09 09 75 70 70 65 72 3A 70    name;....upper:p
012080:  6E 61 6D 65 3B 0D 0A 09 09 65 78 70 6F 72 74 6C    name;....exportl
012090:  69 6E 6B 3A 70 6E 61 6D 65 3B 0D 0A 09 09 6E 74    ink:pname;....nt
0120A0:  79 70 65 3A 70 6E 61 6D 65 3B 0D 0A 09 09 43 41    ype:pname;....CA
0120B0:  53 45 20 6E 61 6D 65 63 6C 61 73 73 3A 6F 62 6A    SE nameclass:obj
0120C0:  65 63 74 20 4F 46 0D 0A 09 09 63 6F 6E 73 74 61    ect OF....consta
0120D0:  6E 74 3A 76 61 6C 75 3A 49 4E 54 45 47 45 52 3B    nt:valu:INTEGER;
0120E0:  0D 0A 09 09 09 43 41 53 45 20 3A 49 4E 54 45 47    .....CASE :INTEG
0120F0:  45 52 20 4F 46 0D 0A 09 09 09 09 30 3A 61 63 74    ER OF......0:act
012100:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
012110:  4F 44 55 4C 45 20 49 6D 70 6F 72 74 3B 20 0D 0A    ODULE Import; ..
012120:  0D 0A 28 2A 20 09 41 20 6D 6F 64 75 6C 65 20 74    ..(* .A module t
012130:  6F 20 70 65 72 66 6F 72 6D 20 65 78 70 6F 72 74    o perform export
012140:  73 20 61 6E 64 20 69 6D 70 6F 72 74 73 20 66 6F    s and imports fo
012150:  72 20 6D 6F 64 75 6C 61 2D 32 20 0D 0A 20 20 09    r modula-2 ..  .
012160:  70 72 6F 67 72 61 6D 73 2E 20 54 68 69 73 20 6D    programs. This m
012170:  6F 64 75 6C 65 20 77 69 6C 6C 20 72 65 61 64 20    odule will read 
012180:  53 59 4D 20 66 69 6C 65 73 20 63 72 65 61 74 65    SYM files create
012190:  64 20 62 79 20 74 68 65 0D 0A 09 46 54 4C 20 4D    d by the...FTL M
0121A0:  6F 64 75 6C 61 2D 32 20 63 6F 6D 70 69 6C 65 72    odula-2 compiler
0121B0:  20 0D 0A 0D 0A 09 54 68 69 73 20 6D 6F 64 75 6C     .....This modul
0121C0:  65 20 64 6F 65 73 20 6E 6F 74 20 63 6F 6E 74 61    e does not conta
0121D0:  69 6E 20 61 6C 6C 20 74 68 65 20 63 6F 64 65 20    in all the code 
0121E0:  72 65 71 75 69 72 65 64 20 74 6F 20 69 6D 70 6F    required to impo
0121F0:  72 74 0D 0A 09 6D 75 6C 74 69 70 6C 65 20 73 79    rt...multiple sy
012200:  6D 62 6F 6C 20 74 61 62 6C 65 73 2E 20 46 6F 72    mbol tables. For
012210:  20 74 68 69 73 20 72 65 61 73 6F 6E 2C 20 69 66     this reason, if
012220:  20 79 6F 75 20 75 73 65 20 74 68 69 73 0D 0A 09     you use this...
012230:  6D 6F 64 75 6C 65 20 74 6F 20 69 6D 70 6F 72 74    module to import
012240:  20 73 65 76 65 72 61 6C 20 73 79 6D 62 6F 6C 20     several symbol 
012250:  74 61 62 6C 65 73 2C 20 74 68 65 79 20 77 69 6C    tables, they wil
012260:  6C 20 6E 6F 74 20 62 65 20 6C 69 6E 6B 65 64 0D    l not be linked.
012270:  0A 09 74 6F 67 65 74 68 65 72 20 63 6F 72 72 65    ..together corre
012280:  63 74 6C 79 2E 20 54 68 69 73 20 6D 65 61 6E 73    ctly. This means
012290:  20 74 68 61 74 20 79 6F 75 20 63 61 6E 6E 6F 74     that you cannot
0122A0:  20 64 6F 20 74 79 70 65 20 63 68 65 63 6B 69 6E     do type checkin
0122B0:  67 0D 0A 09 75 73 69 6E 67 20 74 68 69 73 20 6D    g...using this m
0122C0:  6F 64 75 6C 65 2E 0D 0A 0D 0A 09 4C 65 74 20 6D    odule......Let m
0122D0:  65 20 65 78 70 6C 61 69 6E 20 74 68 61 74 20 6D    e explain that m
0122E0:  6F 72 65 20 74 68 6F 72 6F 75 67 68 6C 79 2E 20    ore thoroughly. 
0122F0:  45 61 63 68 20 53 59 4D 20 54 61 62 6C 65 20 63    Each SYM Table c
012300:  76 61 6C 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 09    val:INTEGER;....
012310:  09 09 20 20 65 6E 75 6D 3A 42 4F 4F 4C 45 41 4E    ..  enum:BOOLEAN
012320:  7C 0D 0A 09 09 09 09 31 3A 72 76 61 6C 3A 52 45    |......1:rval:RE
012330:  41 4C 0D 0A 09 09 09 09 45 4E 44 7C 0D 0A 09 09    AL......END|....
012340:  70 72 6F 7A 65 64 75 72 65 2C 66 75 6E 6B 74 69    prozedure,funkti
012350:  6F 6E 3A 0D 0A 09 09 09 70 61 64 72 3A 49 4E 54    on:.....padr:INT
012360:  45 47 45 52 3B 0D 0A 09 09 09 66 6F 72 72 65 66    EGER;.....forref
012370:  3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09 09 09 63 6F    :BOOLEAN;.....co
012380:  64 65 61 64 72 3A 49 4E 54 45 47 45 52 3B 0D 0A    deadr:INTEGER;..
012390:  09 09 09 70 72 6F 63 6D 6F 64 3A 42 59 54 45 3B    ...procmod:BYTE;
0123A0:  0D 0A 09 09 09 65 78 69 73 74 6F 70 65 6E 3A 42    .....existopen:B
0123B0:  4F 4F 4C 45 41 4E 3B 0D 0A 09 09 09 7C 0D 0A 09    OOLEAN;.....|...
0123C0:  09 76 61 72 69 61 62 6C 65 3A 61 64 64 72 73 3A    .variable:addrs:
0123D0:  49 4E 54 45 47 45 52 3B 0D 0A 09 09 09 20 67 72    INTEGER;..... gr
0123E0:  6F 75 70 3A 42 59 54 45 3B 0D 0A 09 09 09 20 66    oup:BYTE;..... f
0123F0:  6F 72 6D 3A 76 66 6F 72 6D 3B 7C 0D 0A 09 09 74    orm:vform;|....t
012400:  69 70 65 3A 09 73 69 7A 65 3A 49 4E 54 45 47 45    ipe:.size:INTEGE
012410:  52 3B 0D 0A 09 09 09 43 41 53 45 20 63 6C 61 73    R;.....CASE clas
012420:  73 3A 74 79 70 65 63 6C 61 73 73 20 4F 46 0D 0A    s:typeclass OF..
012430:  09 09 09 09 61 72 72 61 79 74 79 70 65 3A 65 6C    ....arraytype:el
012440:  65 6D 74 79 70 65 3A 70 6E 61 6D 65 3B 0D 0A 09    emtype:pname;...
012450:  09 09 09 09 20 20 69 6E 64 65 78 74 79 70 65 3A    ....  indextype:
012460:  70 6E 61 6D 65 7C 28 2A 6E 69 6C 3D 3E 6E 6F 6E    pname|(*nil=>non
012470:  65 2A 29 0D 0A 09 09 09 09 72 65 63 6F 72 64 74    e*)......recordt
012480:  79 70 65 3A 73 75 62 66 69 65 6C 64 73 3A 70 6E    ype:subfields:pn
012490:  61 6D 65 7C 0D 0A 09 09 09 09 73 75 62 72 74 79    ame|......subrty
0124A0:  70 65 2C 65 6E 75 6D 74 79 70 65 3A 6C 6F 77 3A    pe,enumtype:low:
0124B0:  49 4E 54 45 47 45 52 3B 0D 0A 09 09 09 09 09 20    INTEGER;....... 
0124C0:  20 20 20 20 20 20 20 20 20 68 69 67 68 3A 49 4E             high:IN
0124D0:  54 45 47 45 52 3B 0D 0A 09 09 09 09 09 09 20 20    TEGER;........  
0124E0:  62 74 79 70 65 3A 70 6E 61 6D 65 7C 0D 0A 09 09    btype:pname|....
0124F0:  09 09 70 6F 69 6E 74 74 79 70 65 2C 73 65 74 74    ..pointtype,sett
012500:  6F 6D 74 61 69 6E 73 20 61 20 0D 0A 09 63 6F 70    omtains a ...cop
012510:  79 20 6F 66 20 65 76 65 72 79 20 64 65 63 6C 61    y of every decla
012520:  72 61 74 69 6F 6E 20 77 68 69 63 68 20 69 73 20    ration which is 
012530:  75 73 65 64 20 69 6E 20 74 68 65 20 53 59 4D 20    used in the SYM 
012540:  74 61 62 6C 65 2E 20 46 6F 72 0D 0A 09 65 78 61    table. For...exa
012550:  6D 70 6C 65 2C 20 69 74 20 79 6F 75 20 69 6D 70    mple, it you imp
012560:  6F 72 74 20 42 59 54 45 20 66 72 6F 6D 20 53 59    ort BYTE from SY
012570:  53 54 45 4D 2C 20 74 68 65 72 65 20 69 73 20 61    STEM, there is a
012580:  20 63 6F 70 79 20 6F 66 20 74 68 65 0D 0A 09 64     copy of the...d
012590:  65 63 6C 61 72 61 74 69 6F 6E 20 66 6F 72 20 42    eclaration for B
0125A0:  59 54 45 2E 20 41 20 73 79 6D 62 6F 6C 20 6C 69    YTE. A symbol li
0125B0:  6B 65 20 42 59 54 45 20 69 73 20 6C 69 6B 65 6C    ke BYTE is likel
0125C0:  79 20 74 6F 20 62 65 20 69 6D 70 6F 72 74 65 64    y to be imported
0125D0:  0D 0A 09 62 79 20 61 20 6E 75 6D 62 65 72 20 6F    ...by a number o
0125E0:  66 20 64 69 66 66 65 72 65 6E 74 20 73 79 6D 62    f different symb
0125F0:  6F 6C 20 74 61 62 6C 65 73 20 61 6E 64 20 73 6F    ol tables and so
012600:  20 73 65 76 65 72 61 6C 20 63 6F 70 69 65 73 0D     several copies.
012610:  0A 09 6F 66 20 74 68 65 20 64 65 63 6C 61 72 61    ..of the declara
012620:  74 69 6F 6E 20 77 69 6C 6C 20 65 78 69 73 74 2E    tion will exist.
012630:  20 49 6E 20 74 68 65 20 63 6F 6D 70 69 6C 65 72     In the compiler
012640:  2C 20 61 6C 6C 20 74 68 65 73 65 20 61 72 65 20    , all these are 
012650:  6C 69 6E 6B 65 64 0D 0A 09 74 6F 67 65 74 68 65    linked...togethe
012660:  72 20 73 6F 20 74 68 61 74 20 42 59 54 45 20 6F    r so that BYTE o
012670:  6E 6C 79 20 68 61 73 20 6F 6E 65 20 61 63 74 69    nly has one acti
012680:  76 65 20 64 65 66 69 6E 69 74 69 6F 6E 2E 20 4F    ve definition. O
012690:  74 68 65 72 77 69 73 65 2C 20 0D 0A 09 76 61 72    therwise, ...var
0126A0:  69 61 62 6C 65 73 20 6F 66 20 74 79 70 65 20 42    iables of type B
0126B0:  59 54 45 20 69 6D 70 6F 72 74 65 64 20 66 72 6F    YTE imported fro
0126C0:  6D 20 64 69 66 66 65 72 65 6E 74 20 6D 6F 64 75    m different modu
0126D0:  6C 65 73 20 77 6F 75 6C 64 20 6E 6F 74 0D 0A 09    les would not...
0126E0:  62 65 20 63 6F 6D 70 61 74 69 62 6C 65 2E 09 0D    be compatible...
0126F0:  0A 0D 0A 09 4E 6F 72 20 64 6F 65 73 20 69 74 20    ....Nor does it 
012700:  79 70 65 3A 72 65 66 74 79 70 65 3A 70 6E 61 6D    ype:reftype:pnam
012710:  65 7C 0D 0A 09 09 09 09 70 72 74 79 70 65 3A 70    e|......prtype:p
012720:  72 70 61 72 73 3A 70 70 61 72 61 6D 7C 0D 0A 09    rpars:pparam|...
012730:  09 09 09 75 6E 6B 6E 6F 77 6E 74 79 70 65 2C 66    ...unknowntype,f
012740:  6F 72 77 61 72 64 72 65 66 3A 74 6D 6F 64 6E 6F    orwardref:tmodno
012750:  3A 49 4E 54 45 47 45 52 7C 0D 0A 09 09 09 09 45    :INTEGER|......E
012760:  4E 44 3B 0D 0A 09 09 09 09 7C 0D 0A 09 09 73 74    ND;......|....st
012770:  64 70 72 6F 63 3A 73 74 64 6F 72 64 3A 49 4E 54    dproc:stdord:INT
012780:  45 47 45 52 7C 0D 0A 09 09 73 74 64 66 75 6E 63    EGER|....stdfunc
012790:  3A 0D 0A 09 09 09 67 65 6E 6C 69 73 74 3A 70 6E    :.....genlist:pn
0127A0:  61 6D 65 3B 0D 0A 09 09 09 73 74 64 63 6C 61 73    ame;.....stdclas
0127B0:  73 3A 42 59 54 45 3B 0D 0A 09 09 09 70 61 72 74    s:BYTE;.....part
0127C0:  79 70 65 3A 70 6E 61 6D 65 3B 0D 0A 09 09 09 63    ype:pname;.....c
0127D0:  6F 6D 70 61 74 3A 42 59 54 45 3B 0D 0A 09 09 09    ompat:BYTE;.....
0127E0:  43 41 53 45 20 3A 49 4E 54 45 47 45 52 20 4F 46    CASE :INTEGER OF
0127F0:  0D 0A 09 09 09 09 30 3A 66 75 6E 63 6E 6F 3A 42    ......0:funcno:B
012800:  59 54 45 7C 0D 0A 09 09 09 09 31 3A 66 75 6E 63    YTE|......1:func
012810:  64 6F 70 3A 42 59 54 45 3B 66 75 6E 63 63 6F 6E    dop:BYTE;funccon
012820:  73 74 3A 49 4E 54 45 47 45 52 7C 0D 0A 09 09 09    st:INTEGER|.....
012830:  09 32 3A 66 75 6E 63 6D 6F 70 3A 42 59 54 45 7C    .2:funcmop:BYTE|
012840:  0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 7C    ......END;.....|
012850:  0D 0A 09 09 6D 6F 64 63 6C 61 73 73 3A 6D 61 67    ....modclass:mag
012860:  69 63 3A 49 4E 54 45 47 45 52 3B 09 28 2A 6D 61    ic:INTEGER;.(*ma
012870:  67 69 63 20 6E 75 6D 62 65 72 2A 29 0D 0A 09 09    gic number*)....
012880:  09 6E 65 78 74 6D 6F 64 75 6C 65 3A 70 6E 61 6D    .nextmodule:pnam
012890:  65 3B 09 28 2A 6E 65 78 74 20 69 6D 70 6F 72 74    e;.(*next import
0128A0:  65 64 20 6D 6F 64 75 6C 65 2A 29 0D 0A 09 09 09    ed module*).....
0128B0:  6D 6F 64 6E 61 6D 65 73 3A 70 6E 61 6D 65 3B 09    modnames:pname;.
0128C0:  09 28 2A 73 79 6D 62 6F 6C 20 74 61 62 6C 65 2A    .(*symbol table*
0128D0:  29 0D 0A 09 09 09 6D 6F 64 6C 69 73 74 3A 70 6E    ).....modlist:pn
0128E0:  61 6D 65 3B 09 09 28 2A 6C 69 6E 6B 65 64 20 6C    ame;..(*linked l
0128F0:  69 73 74 20 6F 66 20 6E 61 6D 65 73 2A 29 0D 0A    ist of names*)..
012900:  63 6F 6E 74 61 69 6E 20 74 68 65 20 63 6F 64 65    contain the code
012910:  20 74 6F 20 70 72 6F 63 65 73 73 20 74 68 65 20     to process the 
012920:  69 6D 70 6F 72 74 20 6C 69 73 74 0D 0A 09 2A 29    import list...*)
012930:  0D 0A 46 52 4F 4D 09 46 61 73 74 4D 6F 76 65 20    ..FROM.FastMove 
012940:  49 4D 50 4F 52 54 20 4D 6F 76 65 75 70 3B 0D 0A    IMPORT Moveup;..
012950:  46 52 4F 4D 09 53 74 6F 72 61 67 65 20 49 4D 50    FROM.Storage IMP
012960:  4F 52 54 20 41 4C 4C 4F 43 41 54 45 3B 0D 0A 46    ORT ALLOCATE;..F
012970:  52 4F 4D 09 54 65 72 6D 69 6E 61 6C 20 49 4D 50    ROM.Terminal IMP
012980:  4F 52 54 20 57 72 69 74 65 53 74 72 69 6E 67 2C    ORT WriteString,
012990:  57 72 69 74 65 4C 6E 3B 0D 0A 46 52 4F 4D 09 53    WriteLn;..FROM.S
0129A0:  59 53 54 45 4D 20 49 4D 50 4F 52 54 20 41 44 52    YSTEM IMPORT ADR
0129B0:  3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 20 49 4D    ;..FROM.Files IM
0129C0:  50 4F 52 54 20 4C 6F 6F 6B 75 70 2C 53 65 71 52    PORT Lookup,SeqR
0129D0:  65 61 64 42 6C 6F 63 6B 2C 43 6C 6F 73 65 2C 46    eadBlock,Close,F
0129E0:  49 4C 45 3B 0D 0A 43 4F 4E 53 54 09 42 69 67 67    ILE;..CONST.Bigg
0129F0:  65 73 74 46 69 6C 65 3D 38 31 39 31 3B 09 28 2A    estFile=8191;.(*
012A00:  62 69 67 67 65 73 74 20 73 79 6D 20 66 69 6C 65    biggest sym file
012A10:  20 72 65 61 64 61 62 6C 65 2A 29 20 20 0D 0A 0D     readable*)  ...
012A20:  0A 56 41 52 20 0D 0A 09 43 4F 4D 50 4C 49 4E 4B    .VAR ...COMPLINK
012A30:  3A 70 6E 61 6D 65 3B 20 0D 0A 09 50 4C 49 4E 4B    :pname; ...PLINK
012A40:  2C 4C 41 53 54 4C 49 4E 4B 2C 6E 6C 69 6E 6B 3A    ,LASTLINK,nlink:
012A50:  70 6E 61 6D 65 3B 20 0D 0A 09 52 45 4C 4F 46 46    pname; ...RELOFF
012A60:  2C 47 4C 4F 42 52 45 4C 4F 46 46 2C 52 45 4C 42    ,GLOBRELOFF,RELB
012A70:  41 53 45 3A 43 41 52 44 49 4E 41 4C 3B 20 0D 0A    ASE:CARDINAL; ..
012A80:  09 53 49 44 3A 61 6C 66 61 3B 20 0D 0A 09 48 49    .SID:alfa; ...HI
012A90:  44 45 41 4C 4C 3A 42 4F 4F 4C 45 41 4E 3D 46 41    DEALL:BOOLEAN=FA
012AA0:  4C 53 45 3B 20 0D 0A 09 48 49 44 45 4F 54 48 45    LSE; ...HIDEOTHE
012AB0:  52 53 3A 42 4F 4F 4C 45 41 4E 3B 20 0D 0A 09 4E    RS:BOOLEAN; ...N
012AC0:  45 57 4D 4F 44 4E 41 4D 45 3A 70 6E 61 6D 65 3B    EWMODNAME:pname;
012AD0:  20 0D 0A 09 4D 4F 44 55 4C 45 4E 41 4D 45 3A 61     ...MODULENAME:a
012AE0:  6C 66 61 3B 20 0D 0A 09 4D 4F 44 55 4C 45 50 4E    lfa; ...MODULEPN
012AF0:  54 3A 70 6E 61 6D 65 3B 20 0D 0A 09 44 49 53 50    T:pname; ...DISP
012B00:  09 09 09 61 6E 6F 6E 6C 69 73 74 3A 70 6E 61 6D    ...anonlist:pnam
012B10:  65 3B 09 09 28 2A 61 6E 6F 6E 79 6D 6F 75 73 20    e;..(*anonymous 
012B20:  6E 61 6D 65 73 2A 29 0D 0A 09 09 09 6D 6F 64 62    names*).....modb
012B30:  61 73 65 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A    ase:CARDINAL;.(*
012B40:  66 6F 72 20 74 61 62 6C 65 20 72 65 6C 6F 63 61    for table reloca
012B50:  74 69 6F 6E 2A 29 0D 0A 09 09 09 67 6C 6F 62 61    tion*).....globa
012B60:  6C 62 61 73 65 3A 43 41 52 44 49 4E 41 4C 3B 09    lbase:CARDINAL;.
012B70:  28 2A 66 6F 72 20 67 6C 6F 62 61 6C 20 72 65 6C    (*for global rel
012B80:  6F 63 61 74 69 6F 6E 2A 29 0D 0A 09 09 09 6D 6F    ocation*).....mo
012B90:  64 64 65 62 75 67 3A 42 4F 4F 4C 45 41 4E 3B 09    ddebug:BOOLEAN;.
012BA0:  28 2A 74 72 75 65 20 69 66 20 63 6F 6D 70 69 6C    (*true if compil
012BB0:  65 64 20 77 69 74 68 20 64 65 62 75 67 2A 29 0D    ed with debug*).
012BC0:  0A 0D 0A 09 09 09 28 2A 54 68 65 20 66 6F 6C 6C    ......(*The foll
012BD0:  6F 77 69 6E 67 20 76 61 72 69 61 62 6C 65 73 20    owing variables 
012BE0:  67 69 76 65 20 74 68 65 20 73 74 61 74 65 20 6F    give the state o
012BF0:  66 20 74 68 65 0D 0A 09 09 09 76 61 72 69 61 62    f the.....variab
012C00:  6C 65 73 20 61 66 74 65 72 20 74 68 65 20 64 65    les after the de
012C10:  66 20 6D 6F 64 75 6C 65 20 69 73 20 63 6F 6D 70    f module is comp
012C20:  69 6C 65 64 2A 29 20 0D 0A 0D 0A 09 09 09 6D 64    iled*) .......md
012C30:  67 72 6F 75 70 6E 6F 3A 49 4E 54 45 47 45 52 3B    groupno:INTEGER;
012C40:  09 28 2A 6E 75 6D 62 65 72 20 6F 66 20 76 61 72    .(*number of var
012C50:  69 61 62 6C 65 20 67 72 6F 75 70 73 2A 29 0D 0A    iable groups*)..
012C60:  09 09 09 6D 64 63 6F 6E 73 74 6E 6F 3A 49 4E 54    ...mdconstno:INT
012C70:  45 47 45 52 3B 09 28 2A 6E 75 6D 62 65 72 20 6F    EGER;.(*number o
012C80:  66 20 63 6F 6E 73 74 61 6E 74 73 20 2A 29 0D 0A    f constants *)..
012C90:  09 09 09 6D 64 6C 61 62 6E 6F 3A 49 4E 54 45 47    ...mdlabno:INTEG
012CA0:  45 52 3B 09 28 2A 6E 75 6D 62 65 72 20 6F 66 20    ER;.(*number of 
012CB0:  70 72 6F 63 65 64 75 72 65 73 2A 29 0D 0A 09 09    procedures*)....
012CC0:  09 6D 64 6D 6F 64 75 6C 65 6E 6F 3A 49 4E 54 45    .mdmoduleno:INTE
012CD0:  47 45 52 3B 09 28 2A 6E 75 6D 62 65 72 20 66 6F    GER;.(*number fo
012CE0:  20 6E 65 78 74 20 69 6D 70 6F 72 74 65 64 20 6D     next imported m
012CF0:  6F 64 75 6C 65 2A 29 0D 0A 09 09 09 6D 64 72 65    odule*).....mdre
012D00:  4C 41 59 20 3A 20 70 6E 61 6D 65 3B 20 0D 0A 09    LAY : pname; ...
012D10:  4C 41 53 54 4E 41 4D 45 3A 20 70 6E 61 6D 65 3B    LASTNAME: pname;
012D20:  0D 0A 09 4E 41 4D 45 50 4E 54 3A 70 6E 61 6D 65    ...NAMEPNT:pname
012D30:  3B 20 0D 0A 0D 0A 28 2A 09 53 79 6D 62 6F 6C 20    ; ....(*.Symbol 
012D40:  74 61 62 6C 65 20 65 6E 74 72 69 65 73 20 63 6F    table entries co
012D50:  6E 73 69 73 74 20 6F 66 20 61 20 4E 41 4D 45 20    nsist of a NAME 
012D60:  72 65 63 6F 72 64 20 70 72 65 63 65 64 65 64 0D    record preceded.
012D70:  0A 09 62 79 20 61 20 69 64 65 6E 74 69 66 69 65    ..by a identifie
012D80:  72 20 6C 65 6E 67 74 68 20 42 59 54 45 20 70 72    r length BYTE pr
012D90:  65 63 65 64 65 64 20 62 79 20 74 68 65 20 69 64    eceded by the id
012DA0:  65 6E 74 69 66 69 65 72 0D 0A 09 73 74 6F 72 65    entifier...store
012DB0:  64 20 62 61 63 6B 77 61 72 64 73 2E 20 54 68 65    d backwards. The
012DC0:  20 74 6F 70 20 62 69 74 20 6F 66 20 74 68 65 20     top bit of the 
012DD0:  6C 65 6E 67 74 68 20 69 73 20 73 65 74 20 74 6F    length is set to
012DE0:  20 27 68 69 64 65 27 0D 0A 09 74 68 65 20 69 64     'hide'...the id
012DF0:  65 6E 74 69 66 69 65 72 2E 20 54 68 65 20 73 65    entifier. The se
012E00:  63 6F 6E 64 20 74 6F 70 20 62 69 74 20 69 73 20    cond top bit is 
012E10:  75 73 65 64 20 74 6F 20 6D 61 72 6B 20 61 63 63    used to mark acc
012E20:  65 73 73 69 62 6C 65 20 0D 0A 09 73 79 6D 62 6F    essible ...symbo
012E30:  6C 73 20 74 68 6F 75 67 68 20 74 68 69 73 20 69    ls though this i
012E40:  73 20 6E 6F 74 20 64 6F 6E 65 20 62 79 20 74 68    s not done by th
012E50:  69 73 20 76 65 72 73 69 6F 6E 20 6F 66 20 74 68    is version of th
012E60:  65 20 0D 0A 09 69 6D 70 6F 72 74 20 6D 6F 64 75    e ...import modu
012E70:  6C 65 20 2A 29 0D 0A 09 0D 0A 50 52 4F 43 45 44    le *).....PROCED
012E80:  55 52 45 20 48 49 44 45 28 70 3A 41 44 44 52 45    URE HIDE(p:ADDRE
012E90:  53 53 29 3B 0D 0A 0D 0A 28 2A 09 48 69 64 65 20    SS);....(*.Hide 
012EA0:  61 6E 20 69 64 65 6E 74 69 66 69 65 72 0D 0A 0D    an identifier...
012EB0:  0A 09 41 6E 20 69 64 65 6E 74 69 66 69 65 72 20    ..An identifier 
012EC0:  69 73 20 68 69 64 64 65 6E 20 62 79 20 73 65 74    is hidden by set
012ED0:  74 69 6E 67 20 74 68 65 20 74 6F 70 20 62 69 74    ting the top bit
012EE0:  0D 0A 09 6F 66 20 74 68 65 20 62 79 74 65 20 70    ...of the byte p
012EF0:  72 65 63 65 64 69 6E 67 20 74 68 65 20 70 6F 69    receding the poi
012F00:  6C 6F 66 66 73 65 74 3A 49 4E 54 45 47 45 52 3B    loffset:INTEGER;
012F10:  09 28 2A 72 65 6C 20 63 6F 64 65 20 62 75 66 66    .(*rel code buff
012F20:  65 72 20 70 6F 69 6E 74 65 72 2A 29 0D 0A 09 09    er pointer*)....
012F30:  09 6D 64 72 65 6C 62 6C 6F 63 6B 3A 49 4E 54 45    .mdrelblock:INTE
012F40:  47 45 52 3B 09 28 2A 61 6E 64 20 62 6C 6F 63 6B    GER;.(*and block
012F50:  20 6E 75 6D 62 65 72 2A 29 20 0D 0A 09 09 09 7C     number*) .....|
012F60:  0D 0A 09 09 6C 69 6E 6B 63 6C 61 73 73 3A 6C 69    ....linkclass:li
012F70:  6E 6B 3A 70 6E 61 6D 65 0D 0A 09 09 45 4E 44 3B    nk:pname....END;
012F80:  0D 0A 09 20 20 20 20 45 4E 44 3B 0D 0A 56 41 52    ...    END;..VAR
012F90:  09 49 44 3A 61 6C 66 61 3B 0D 0A 50 52 4F 43 45    .ID:alfa;..PROCE
012FA0:  44 55 52 45 20 52 45 54 52 4E 41 4D 45 28 50 3A    DURE RETRNAME(P:
012FB0:  41 44 44 52 45 53 53 29 3B 0D 0A 50 52 4F 43 45    ADDRESS);..PROCE
012FC0:  44 55 52 45 20 4C 4F 4F 4B 55 50 28 69 64 3A 61    DURE LOOKUP(id:a
012FD0:  6C 66 61 3B 74 61 62 3A 70 6E 61 6D 65 29 3A 70    lfa;tab:pname):p
012FE0:  6E 61 6D 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45    name;..PROCEDURE
012FF0:  20 4C 4F 41 44 46 49 4C 45 28 66 6E 3A 46 69 6C     LOADFILE(fn:Fil
013000:  65 4E 61 6D 65 29 3A 70 6E 61 6D 65 3B 0D 0A 45    eName):pname;..E
013010:  4E 44 20 49 6D 70 6F 72 74 2E 0D 0A 0D 0A 1A 1A    ND Import.......
013020:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
013030:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
013040:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
013050:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
013060:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 46 20 00 00 00 00    ..........F ....
013070:  00 00 00 00 00 00 D6 51 90 0D 45 00 9B 03 00 00    .......Q..E.....
013080:  09 57 72 69 74 65 4E 61 6D 65 28 52 69 67 68 74    .WriteName(Right
013090:  4E 61 6D 65 73 5B 6A 5D 2C 4F 75 74 70 75 74 41    Names[j],OutputA
0130A0:  64 64 65 64 29 3B 0D 0A 09 57 72 69 74 65 4C 6E    dded);...WriteLn
0130B0:  3B 0D 0A 09 45 4E 44 20 50 72 69 6E 74 52 69 67    ;...END PrintRig
0130C0:  68 74 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45    ht;....PROCEDURE
0130D0:  20 43 6F 6D 70 61 72 65 4F 4B 28 66 31 2C 66 32     CompareOK(f1,f2
0130E0:  3A 46 69 6C 65 52 65 63 6F 72 64 29 3A 42 4F 4F    :FileRecord):BOO
0130F0:  4C 45 41 4E 3B 0D 0A 0D 0A 56 41 52 09 66 6E 31    LEAN;....VAR.fn1
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 41 02 00 00 00 02    ......R...A.....
013120:  10 00 46 02 00 00 00 02 10 00 42 02 00 00 00 02    ..F.......B.....
013130:  10 00 47 02 00 00 00 02 10 00 43 02 00 00 00 02    ..G.......C.....
013140:  10 00 48 02 00 00 00 02 10 00 44 02 00 00 00 02    ..H.......D.....
013150:  10 00 49 02 00 00 00 02 10 00 45 02 00 00 00 02    ..I.......E.....
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:  6E 74 65 72 20 2A 29 0D 0A 42 45 47 49 4E 0D 0A    nter *)..BEGIN..
013210:  09 70 3A 3D 41 44 44 52 45 53 53 28 43 41 52 44    .p:=ADDRESS(CARD
013220:  49 4E 41 4C 28 70 29 2D 31 29 3B 0D 0A 09 49 46    INAL(p)-1);...IF
013230:  20 70 5E 3C 31 32 38 20 54 48 45 4E 20 70 5E 3A     p^<128 THEN p^:
013240:  3D 70 5E 2B 31 32 38 20 45 4E 44 3B 0D 0A 09 45    =p^+128 END;...E
013250:  4E 44 20 48 49 44 45 3B 0D 0A 50 52 4F 43 45 44    ND HIDE;..PROCED
013260:  55 52 45 20 55 4E 48 49 44 45 28 70 3A 41 44 44    URE UNHIDE(p:ADD
013270:  52 45 53 53 29 3B 0D 0A 0D 0A 28 2A 09 48 69 64    RESS);....(*.Hid
013280:  65 20 61 6E 20 69 64 65 6E 74 69 66 69 65 72 0D    e an identifier.
013290:  0A 0D 0A 09 41 6E 20 69 64 65 6E 74 69 66 69 65    ....An identifie
0132A0:  72 20 69 73 20 68 69 64 64 65 6E 20 62 79 20 73    r is hidden by s
0132B0:  65 74 74 69 6E 67 20 74 68 65 20 74 6F 70 20 62    etting the top b
0132C0:  69 74 0D 0A 09 6F 66 20 74 68 65 20 62 79 74 65    it...of the byte
0132D0:  20 70 72 65 63 65 64 69 6E 67 20 74 68 65 20 70     preceding the p
0132E0:  6F 69 6E 74 65 72 20 2A 29 0D 0A 42 45 47 49 4E    ointer *)..BEGIN
0132F0:  0D 0A 09 70 3A 3D 41 44 44 52 45 53 53 28 43 41    ...p:=ADDRESS(CA
013300:  52 44 49 4E 41 4C 28 70 29 2D 31 29 3B 0D 0A 09    RDINAL(p)-1);...
013310:  49 46 20 70 5E 3E 3D 31 32 38 20 54 48 45 4E 20    IF p^>=128 THEN 
013320:  70 5E 3A 3D 70 5E 2D 31 32 38 20 45 4E 44 3B 0D    p^:=p^-128 END;.
013330:  0A 09 45 4E 44 20 55 4E 48 49 44 45 3B 0D 0A 50    ..END UNHIDE;..P
013340:  52 4F 43 45 44 55 52 45 20 52 45 54 52 4E 41 4D    ROCEDURE RETRNAM
013350:  45 28 70 3A 41 44 44 52 45 53 53 29 3B 0D 0A 56    E(p:ADDRESS);..V
013360:  41 52 09 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 09    AR.i:INTEGER;...
013370:  6C 65 6E 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45    len:INTEGER;..BE
013380:  47 49 4E 0D 0A 09 70 3A 3D 41 44 44 52 45 53 53    GIN...p:=ADDRESS
013390:  28 43 41 52 44 49 4E 41 4C 28 70 29 2D 31 29 3B    (CARDINAL(p)-1);
0133A0:  0D 0A 09 6C 65 6E 3A 3D 4F 52 44 28 70 5E 29 3B    ...len:=ORD(p^);
0133B0:  0D 0A 09 28 2A 63 6C 65 61 72 20 74 6F 70 20 74    ...(*clear top t
0133C0:  77 6F 20 62 69 74 73 20 2A 29 0D 0A 0D 0A 09 49    wo bits *).....I
0133D0:  46 20 6C 65 6E 3E 3D 31 32 38 20 54 48 45 4E 20    F len>=128 THEN 
0133E0:  6C 65 6E 3A 3D 6C 65 6E 2D 31 32 38 20 45 4E 44    len:=len-128 END
0133F0:  3B 0D 0A 09 49 46 20 6C 65 6E 3E 3D 36 34 20 54    ;...IF len>=64 T
013400:  6C 69 6E 6B 3A 3D 52 45 4C 50 4E 54 52 28 6C 69    link:=RELPNTR(li
013410:  6E 6B 29 3B 20 0D 0A 09 09 09 09 7C 0D 0A 09 09    nk); ......|....
013420:  09 20 20 20 20 45 4E 44 3B 20 28 2A 63 61 73 65    .    END; (*case
013430:  20 6E 61 6D 65 63 6C 61 73 73 2A 29 0D 0A 09 09     nameclass*)....
013440:  09 6E 6C 69 6E 6B 3A 3D 65 78 70 6F 72 74 6C 69    .nlink:=exportli
013450:  6E 6B 3B 20 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09    nk; .....END;...
013460:  09 20 20 20 20 45 4E 44 3B 20 28 2A 77 68 69 6C    .    END; (*whil
013470:  65 20 6E 6C 69 6E 6B 3C 3E 6E 69 6C 2A 29 0D 0A    e nlink<>nil*)..
013480:  09 45 4E 44 20 52 45 4C 4F 43 41 54 45 3B 20 28    .END RELOCATE; (
013490:  2A 72 65 6C 6F 63 61 74 65 2A 29 0D 0A 50 52 4F    *relocate*)..PRO
0134A0:  43 45 44 55 52 45 20 52 45 41 44 46 49 4C 45 28    CEDURE READFILE(
0134B0:  66 6E 3A 46 69 6C 65 4E 61 6D 65 29 3A 42 4F 4F    fn:FileName):BOO
0134C0:  4C 45 41 4E 3B 0D 0A 54 59 50 45 09 42 6C 6F 63    LEAN;..TYPE.Bloc
0134D0:  6B 3D 41 52 52 41 59 5B 30 2E 2E 31 32 37 5D 20    k=ARRAY[0..127] 
0134E0:  4F 46 20 42 59 54 45 3B 0D 0A 09 70 42 6C 6F 63    OF BYTE;...pBloc
0134F0:  6B 3D 50 4F 49 4E 54 45 52 20 54 4F 20 42 6C 6F    k=POINTER TO Blo
013500:  63 6B 3B 0D 0A 56 41 52 09 66 3A 46 49 4C 45 3B    ck;..VAR.f:FILE;
013510:  0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52    ...reply:INTEGER
013520:  3B 0D 0A 09 46 69 72 73 74 3A 42 4F 4F 4C 45 41    ;...First:BOOLEA
013530:  4E 3B 0D 0A 09 70 3A 70 42 6C 6F 63 6B 3B 0D 0A    N;...p:pBlock;..
013540:  09 62 3A 41 52 52 41 59 5B 30 2E 2E 42 69 67 67    .b:ARRAY[0..Bigg
013550:  65 73 74 46 69 6C 65 5D 20 4F 46 20 42 59 54 45    estFile] OF BYTE
013560:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 72 65 70 6C 79    ;..BEGIN...reply
013570:  3A 3D 31 3B 0D 0A 09 57 48 49 4C 45 20 28 72 65    :=1;...WHILE (re
013580:  70 6C 79 3C 48 49 47 48 28 66 6E 29 29 20 41 4E    ply<HIGH(fn)) AN
013590:  44 20 28 66 6E 5B 72 65 70 6C 79 5D 3C 3E 27 2E    D (fn[reply]<>'.
0135A0:  27 29 20 41 4E 44 20 28 66 6E 5B 72 65 70 6C 79    ') AND (fn[reply
0135B0:  5D 3C 3E 27 20 27 29 0D 0A 09 09 41 4E 44 20 28    ]<>' ')....AND (
0135C0:  66 6E 5B 72 65 70 6C 79 5D 3C 3E 30 78 29 20 44    fn[reply]<>0x) D
0135D0:  4F 0D 0A 09 09 49 4E 43 28 72 65 70 6C 79 29 3B    O....INC(reply);
0135E0:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 72 65    ....END;...IF re
0135F0:  70 6C 79 3E 48 49 47 48 28 66 6E 29 20 54 48 45    ply>HIGH(fn) THE
013600:  48 45 4E 20 6C 65 6E 3A 3D 6C 65 6E 2D 36 34 20    HEN len:=len-64 
013610:  45 4E 44 3B 0D 0A 09 49 46 20 6C 65 6E 3E 3D 33    END;...IF len>=3
013620:  32 20 54 48 45 4E 20 6C 65 6E 3A 3D 6C 65 6E 2D    2 THEN len:=len-
013630:  33 32 20 45 4E 44 3B 0D 0A 0D 0A 09 46 4F 52 20    32 END;.....FOR 
013640:  69 3A 3D 31 20 54 4F 20 6C 65 6E 20 44 4F 0D 0A    i:=1 TO len DO..
013650:  09 09 70 3A 3D 41 44 44 52 45 53 53 28 43 41 52    ..p:=ADDRESS(CAR
013660:  44 49 4E 41 4C 28 70 29 2D 31 29 3B 0D 0A 09 09    DINAL(p)-1);....
013670:  49 44 5B 69 5D 3A 3D 43 48 52 28 70 5E 29 3B 0D    ID[i]:=CHR(p^);.
013680:  0A 09 09 45 4E 44 3B 0D 0A 09 46 4F 52 20 69 3A    ...END;...FOR i:
013690:  3D 6C 65 6E 2B 31 20 54 4F 20 48 49 47 48 28 49    =len+1 TO HIGH(I
0136A0:  44 29 20 44 4F 20 49 44 5B 69 5D 3A 3D 27 20 27    D) DO ID[i]:=' '
0136B0:  20 45 4E 44 3B 09 0D 0A 09 45 4E 44 20 52 45 54     END;....END RET
0136C0:  52 4E 41 4D 45 3B 0D 0A 0D 0A 50 52 4F 43 45 44    RNAME;....PROCED
0136D0:  55 52 45 20 4C 4F 4F 4B 55 50 28 4C 49 44 3A 61    URE LOOKUP(LID:a
0136E0:  6C 66 61 3B 54 41 42 4C 45 3A 70 6E 61 6D 65 29    lfa;TABLE:pname)
0136F0:  3A 70 6E 61 6D 65 3B 0D 0A 42 45 47 49 4E 0D 0A    :pname;..BEGIN..
013700:  09 4C 41 53 54 4E 41 4D 45 3A 3D 4E 49 4C 3B 0D    .LASTNAME:=NIL;.
013710:  0A 09 4C 4F 4F 50 0D 0A 09 09 0D 0A 09 09 49 46    ..LOOP........IF
013720:  20 54 41 42 4C 45 3D 4E 49 4C 20 54 48 45 4E 20     TABLE=NIL THEN 
013730:  45 58 49 54 20 45 4E 44 3B 0D 0A 09 09 4C 41 53    EXIT END;....LAS
013740:  54 4E 41 4D 45 3A 3D 54 41 42 4C 45 3B 0D 0A 09    TNAME:=TABLE;...
013750:  09 52 45 54 52 4E 41 4D 45 28 54 41 42 4C 45 29    .RETRNAME(TABLE)
013760:  3B 0D 0A 09 09 49 46 20 49 44 3C 4C 49 44 20 54    ;....IF ID<LID T
013770:  48 45 4E 20 54 41 42 4C 45 3A 3D 54 41 42 4C 45    HEN TABLE:=TABLE
013780:  5E 2E 75 70 70 65 72 0D 0A 09 09 45 4C 53 49 46    ^.upper....ELSIF
013790:  20 49 44 3E 4C 49 44 20 54 48 45 4E 20 54 41 42     ID>LID THEN TAB
0137A0:  4C 45 3A 3D 54 41 42 4C 45 5E 2E 6C 6F 77 65 72    LE:=TABLE^.lower
0137B0:  0D 0A 09 09 45 4C 53 45 20 45 58 49 54 20 45 4E    ....ELSE EXIT EN
0137C0:  44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54    D;....END;...RET
0137D0:  55 52 4E 20 54 41 42 4C 45 0D 0A 09 45 4E 44 20    URN TABLE...END 
0137E0:  4C 4F 4F 4B 55 50 3B 0D 0A 50 52 4F 43 45 44 55    LOOKUP;..PROCEDU
0137F0:  52 45 20 52 45 4C 50 4E 54 52 28 46 49 45 4C 44    RE RELPNTR(FIELD
013800:  4E 20 52 45 54 55 52 4E 20 46 41 4C 53 45 20 45    N RETURN FALSE E
013810:  4E 44 3B 0D 0A 09 49 46 20 66 6E 5B 72 65 70 6C    ND;...IF fn[repl
013820:  79 5D 3C 3E 27 2E 27 20 54 48 45 4E 0D 0A 09 09    y]<>'.' THEN....
013830:  49 46 20 28 72 65 70 6C 79 2B 33 29 3E 48 49 47    IF (reply+3)>HIG
013840:  48 28 66 6E 29 20 54 48 45 4E 20 52 45 54 55 52    H(fn) THEN RETUR
013850:  4E 20 46 41 4C 53 45 20 45 4E 44 3B 0D 0A 09 09    N FALSE END;....
013860:  66 6E 5B 72 65 70 6C 79 5D 3A 3D 27 2E 27 3B 0D    fn[reply]:='.';.
013870:  0A 09 09 66 6E 5B 72 65 70 6C 79 2B 31 5D 3A 3D    ...fn[reply+1]:=
013880:  27 53 27 3B 0D 0A 09 09 66 6E 5B 72 65 70 6C 79    'S';....fn[reply
013890:  2B 32 5D 3A 3D 27 59 27 3B 0D 0A 09 09 66 6E 5B    +2]:='Y';....fn[
0138A0:  72 65 70 6C 79 2B 33 5D 3A 3D 27 4D 27 3B 0D 0A    reply+3]:='M';..
0138B0:  09 09 66 6E 5B 72 65 70 6C 79 2B 34 5D 3A 3D 27    ..fn[reply+4]:='
0138C0:  20 27 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C 6F     ';....END;...Lo
0138D0:  6F 6B 75 70 28 66 2C 66 6E 2C 72 65 70 6C 79 29    okup(f,fn,reply)
0138E0:  3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20    ;...IF reply<>0 
0138F0:  54 48 45 4E 20 0D 0A 09 09 57 72 69 74 65 53 74    THEN ....WriteSt
013900:  72 69 6E 67 28 27 20 46 69 6C 65 20 6E 6F 74 20    ring(' File not 
013910:  66 6F 75 6E 64 27 29 3B 57 72 69 74 65 53 74 72    found');WriteStr
013920:  69 6E 67 28 66 6E 29 3B 57 72 69 74 65 4C 6E 3B    ing(fn);WriteLn;
013930:  0D 0A 09 09 52 45 54 55 52 4E 20 46 41 4C 53 45    ....RETURN FALSE
013940:  20 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 28 2A     ....END;.....(*
013950:  52 65 61 64 20 74 68 65 20 64 61 74 61 20 2A 29    Read the data *)
013960:  0D 0A 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 28    ...SeqReadBlock(
013970:  66 2C 41 44 52 28 62 29 2C 53 49 5A 45 28 62 29    f,ADR(b),SIZE(b)
013980:  2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 20 72 65    ,reply);...IF re
013990:  70 6C 79 3D 30 20 54 48 45 4E 20 0D 0A 09 09 57    ply=0 THEN ....W
0139A0:  72 69 74 65 53 74 72 69 6E 67 28 27 53 59 4D 20    riteString('SYM 
0139B0:  46 69 6C 65 20 45 6D 70 74 79 20 27 29 3B 57 72    File Empty ');Wr
0139C0:  69 74 65 4C 6E 3B 0D 0A 09 09 52 45 54 55 52 4E    iteLn;....RETURN
0139D0:  20 46 41 4C 53 45 20 0D 0A 09 09 45 4E 44 3B 0D     FALSE ....END;.
0139E0:  0A 09 49 46 20 72 65 70 6C 79 3D 53 49 5A 45 28    ..IF reply=SIZE(
0139F0:  62 29 20 54 48 45 4E 0D 0A 09 09 57 72 69 74 65    b) THEN....Write
013A00:  53 3A 41 44 44 52 45 53 53 29 3A 41 44 44 52 45    S:ADDRESS):ADDRE
013A10:  53 53 3B 20 0D 0A 0D 0A 28 2A 09 52 65 6C 6F 63    SS; ....(*.Reloc
013A20:  61 74 65 20 61 20 70 6F 69 6E 74 65 72 20 0D 0A    ate a pointer ..
013A30:  0D 0A 09 54 68 65 72 65 20 61 72 65 20 74 77 6F    ...There are two
013A40:  20 61 72 65 61 73 20 77 68 69 63 68 20 74 68 65     areas which the
013A50:  20 70 6F 69 6E 74 65 72 20 6D 61 79 20 6E 65 65     pointer may nee
013A60:  64 0D 0A 09 72 65 6C 6F 63 61 74 69 6E 67 20 72    d...relocating r
013A70:  65 6C 61 74 69 76 65 20 74 6F 20 28 73 65 65 20    elative to (see 
013A80:  43 68 75 72 63 68 69 6C 6C 29 2E 20 54 68 65 20    Churchill). The 
013A90:  67 6C 6F 62 61 6C 73 0D 0A 09 73 79 6D 62 6F 6C    globals...symbol
013AA0:  20 74 61 62 6C 65 20 61 6E 64 20 74 68 65 20 6C     table and the l
013AB0:  6F 63 61 6C 20 73 79 6D 62 6F 6C 73 20 74 61 62    ocal symbols tab
013AC0:  6C 65 2E 0D 0A 0D 0A 09 54 68 65 20 67 6C 6F 62    le......The glob
013AD0:  61 6C 20 73 79 6D 62 6F 6C 20 74 61 62 6C 65 20    al symbol table 
013AE0:  69 73 20 61 73 73 75 6D 65 64 20 74 6F 20 62 65    is assumed to be
013AF0:  20 6C 6F 77 65 72 20 69 6E 20 6D 65 6D 6F 72 79     lower in memory
013B00:  2A 29 0D 0A 56 41 52 09 61 3A 41 44 44 52 45 53    *)..VAR.a:ADDRES
013B10:  53 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 46    S;..BEGIN...IF F
013B20:  49 45 4C 44 53 3D 4E 49 4C 20 54 48 45 4E 20 0D    IELDS=NIL THEN .
013B30:  0A 09 20 20 20 20 09 61 3A 3D 4E 49 4C 20 0D 0A    ..    .a:=NIL ..
013B40:  09 45 4C 53 49 46 20 43 41 52 44 49 4E 41 4C 28    .ELSIF CARDINAL(
013B50:  46 49 45 4C 44 53 29 3C 52 45 4C 42 41 53 45 20    FIELDS)<RELBASE 
013B60:  54 48 45 4E 0D 0A 09 09 61 3A 3D 41 44 44 52 45    THEN....a:=ADDRE
013B70:  53 53 28 43 41 52 44 49 4E 41 4C 28 46 49 45 4C    SS(CARDINAL(FIEL
013B80:  44 53 29 2D 47 4C 4F 42 52 45 4C 4F 46 46 29 0D    DS)-GLOBRELOFF).
013B90:  0A 09 45 4C 53 45 0D 0A 09 09 61 3A 3D 41 44 44    ..ELSE....a:=ADD
013BA0:  52 45 53 53 28 43 41 52 44 49 4E 41 4C 28 46 49    RESS(CARDINAL(FI
013BB0:  45 4C 44 53 29 2D 52 45 4C 4F 46 46 29 0D 0A 09    ELDS)-RELOFF)...
013BC0:  20 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20     .END;...RETURN 
013BD0:  61 0D 0A 20 20 20 20 20 20 09 45 4E 44 20 52 45    a..      .END RE
013BE0:  4C 50 4E 54 52 3B 20 0D 0A 0D 0A 50 52 4F 43 45    LPNTR; ....PROCE
013BF0:  44 55 52 45 20 52 45 4C 4F 43 41 54 45 3B 20 0D    DURE RELOCATE; .
013C00:  53 74 72 69 6E 67 28 27 20 53 59 4D 20 66 69 6C    String(' SYM fil
013C10:  65 20 74 6F 6F 20 6C 61 72 67 65 20 27 29 3B 0D    e too large ');.
013C20:  0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 52    ...WriteLn;....R
013C30:  45 54 55 52 4E 20 46 41 4C 53 45 3B 0D 0A 09 09    ETURN FALSE;....
013C40:  45 4E 44 3B 0D 0A 09 41 4C 4C 4F 43 41 54 45 28    END;...ALLOCATE(
013C50:  70 2C 72 65 70 6C 79 29 3B 0D 0A 09 4D 6F 76 65    p,reply);...Move
013C60:  75 70 28 41 44 52 28 62 29 2C 70 2C 72 65 70 6C    up(ADR(b),p,repl
013C70:  79 29 3B 0D 0A 09 47 4C 4F 42 52 45 4C 4F 46 46    y);...GLOBRELOFF
013C80:  3A 3D 30 3B 0D 0A 09 4E 45 57 4D 4F 44 4E 41 4D    :=0;...NEWMODNAM
013C90:  45 3A 3D 70 6E 61 6D 65 28 43 41 52 44 49 4E 41    E:=pname(CARDINA
013CA0:  4C 28 70 29 2B 4F 52 44 28 62 5B 30 5D 29 2B 32    L(p)+ORD(b[0])+2
013CB0:  29 3B 0D 0A 09 52 45 54 52 4E 41 4D 45 28 4E 45    );...RETRNAME(NE
013CC0:  57 4D 4F 44 4E 41 4D 45 29 3B 0D 0A 09 52 45 4C    WMODNAME);...REL
013CD0:  4F 46 46 3A 3D 4E 45 57 4D 4F 44 4E 41 4D 45 5E    OFF:=NEWMODNAME^
013CE0:  2E 6D 6F 64 62 61 73 65 2D 43 41 52 44 49 4E 41    .modbase-CARDINA
013CF0:  4C 28 70 29 3B 0D 0A 09 52 45 4C 42 41 53 45 3A    L(p);...RELBASE:
013D00:  3D 4E 45 57 4D 4F 44 4E 41 4D 45 5E 2E 6D 6F 64    =NEWMODNAME^.mod
013D10:  62 61 73 65 3B 0D 0A 09 43 6C 6F 73 65 28 66 29    base;...Close(f)
013D20:  3B 0D 0A 09 52 45 54 55 52 4E 20 54 52 55 45 3B    ;...RETURN TRUE;
013D30:  0D 0A 09 45 4E 44 20 52 45 41 44 46 49 4C 45 3B    ...END READFILE;
013D40:  0D 0A 50 52 4F 43 45 44 55 52 45 20 45 4E 54 45    ..PROCEDURE ENTE
013D50:  52 4E 41 4D 45 3B 20 0D 0A 56 41 52 09 53 49 44    RNAME; ..VAR.SID
013D60:  3A 61 6C 66 61 3B 0D 0A 42 45 47 49 4E 0D 0A 09    :alfa;..BEGIN...
013D70:  52 45 54 52 4E 41 4D 45 28 43 4F 4D 50 4C 49 4E    RETRNAME(COMPLIN
013D80:  4B 29 3B 20 0D 0A 09 53 49 44 3A 3D 49 44 3B 0D    K); ...SID:=ID;.
013D90:  0A 09 4E 41 4D 45 50 4E 54 3A 3D 4C 4F 4F 4B 55    ..NAMEPNT:=LOOKU
013DA0:  50 28 49 44 2C 44 49 53 50 4C 41 59 29 3B 20 0D    P(ID,DISPLAY); .
013DB0:  0A 09 49 46 20 4C 41 53 54 4E 41 4D 45 3D 4E 49    ..IF LASTNAME=NI
013DC0:  4C 20 54 48 45 4E 20 44 49 53 50 4C 41 59 3A 3D    L THEN DISPLAY:=
013DD0:  43 4F 4D 50 4C 49 4E 4B 0D 0A 09 45 4C 53 45 0D    COMPLINK...ELSE.
013DE0:  0A 09 09 52 45 54 52 4E 41 4D 45 28 4C 41 53 54    ...RETRNAME(LAST
013DF0:  4E 41 4D 45 29 3B 0D 0A 09 09 49 46 20 49 44 3C    NAME);....IF ID<
013E00:  0A 28 2A 20 52 65 6C 6F 63 61 74 65 20 6F 6E 65    .(* Relocate one
013E10:  20 6F 66 20 74 68 65 20 65 6E 74 72 79 20 6C 69     of the entry li
013E20:  73 74 73 20 6A 75 73 74 20 65 6E 74 65 72 65 64    sts just entered
013E30:  20 0D 0A 20 20 0D 0A 20 20 41 6C 73 6F 2C 20 69     ..  ..  Also, i
013E40:  66 20 61 6E 79 20 65 6E 74 72 79 20 69 73 20 61    f any entry is a
013E50:  20 6C 69 6E 6B 2C 20 72 65 70 6C 61 63 65 20 70     link, replace p
013E60:  6F 69 6E 74 65 72 20 62 79 20 70 6F 69 6E 74 65    ointer by pointe
013E70:  72 20 74 6F 20 0D 0A 20 20 6C 69 6E 6B 65 64 20    r to ..  linked 
013E80:  6F 62 6A 65 63 74 2A 29 0D 0A 56 41 52 09 4F 4C    object*)..VAR.OL
013E90:  44 50 41 52 3A 70 70 61 72 61 6D 3B 0D 0A 42 45    DPAR:pparam;..BE
013EA0:  47 49 4E 0D 0A 09 57 48 49 4C 45 20 6E 6C 69 6E    GIN...WHILE nlin
013EB0:  6B 3C 3E 4E 49 4C 20 44 4F 20 0D 0A 09 20 20 20    k<>NIL DO ...   
013EC0:  20 57 49 54 48 20 6E 6C 69 6E 6B 5E 20 44 4F 20     WITH nlink^ DO 
013ED0:  0D 0A 09 09 52 45 54 52 4E 41 4D 45 28 6E 6C 69    ....RETRNAME(nli
013EE0:  6E 6B 29 3B 0D 0A 09 09 6E 74 79 70 65 3A 3D 52    nk);....ntype:=R
013EF0:  45 4C 50 4E 54 52 28 6E 74 79 70 65 29 3B 20 0D    ELPNTR(ntype); .
013F00:  0A 09 09 6C 6F 77 65 72 3A 3D 52 45 4C 50 4E 54    ...lower:=RELPNT
013F10:  52 28 6C 6F 77 65 72 29 3B 20 0D 0A 09 09 75 70    R(lower); ....up
013F20:  70 65 72 3A 3D 52 45 4C 50 4E 54 52 28 75 70 70    per:=RELPNTR(upp
013F30:  65 72 29 3B 20 0D 0A 0D 0A 09 09 65 78 70 6F 72    er); ......expor
013F40:  74 6C 69 6E 6B 3A 3D 52 45 4C 50 4E 54 52 28 65    tlink:=RELPNTR(e
013F50:  78 70 6F 72 74 6C 69 6E 6B 29 3B 20 0D 0A 09 09    xportlink); ....
013F60:  43 41 53 45 20 6E 61 6D 65 63 6C 61 73 73 20 4F    CASE nameclass O
013F70:  46 20 0D 0A 09 09 09 74 69 70 65 3A 0D 0A 09 09    F .....tipe:....
013F80:  09 20 20 20 20 43 41 53 45 20 63 6C 61 73 73 20    .    CASE class 
013F90:  4F 46 20 0D 0A 09 09 09 09 20 20 20 20 61 72 72    OF ......    arr
013FA0:  61 79 74 79 70 65 3A 0D 0A 09 09 09 09 09 65 6C    aytype:.......el
013FB0:  65 6D 74 79 70 65 3A 3D 52 45 4C 50 4E 54 52 28    emtype:=RELPNTR(
013FC0:  65 6C 65 6D 74 79 70 65 29 3B 20 0D 0A 09 09 09    elemtype); .....
013FD0:  09 09 69 6E 64 65 78 74 79 70 65 3A 3D 52 45 4C    ..indextype:=REL
013FE0:  50 4E 54 52 28 69 6E 64 65 78 74 79 70 65 29 3B    PNTR(indextype);
013FF0:  20 0D 0A 09 09 09 09 09 7C 0D 0A 09 09 09 09 20     .......|...... 
014000:  53 49 44 20 54 48 45 4E 20 4C 41 53 54 4E 41 4D    SID THEN LASTNAM
014010:  45 5E 2E 75 70 70 65 72 3A 3D 43 4F 4D 50 4C 49    E^.upper:=COMPLI
014020:  4E 4B 0D 0A 09 09 45 4C 53 45 20 4C 41 53 54 4E    NK....ELSE LASTN
014030:  41 4D 45 5E 2E 6C 6F 77 65 72 3A 3D 43 4F 4D 50    AME^.lower:=COMP
014040:  4C 49 4E 4B 20 45 4E 44 3B 0D 0A 09 09 45 4E 44    LINK END;....END
014050:  3B 0D 0A 09 43 4F 4D 50 4C 49 4E 4B 5E 2E 75 70    ;...COMPLINK^.up
014060:  70 65 72 3A 3D 4E 49 4C 3B 0D 0A 09 43 4F 4D 50    per:=NIL;...COMP
014070:  4C 49 4E 4B 5E 2E 6C 6F 77 65 72 3A 3D 4E 49 4C    LINK^.lower:=NIL
014080:  3B 0D 0A 09 09 0D 0A 20 20 20 20 20 20 45 4E 44    ;......      END
014090:  20 45 4E 54 45 52 4E 41 4D 45 3B 20 0D 0A 0D 0A     ENTERNAME; ....
0140A0:  50 52 4F 43 45 44 55 52 45 20 4D 45 52 47 45 4E    PROCEDURE MERGEN
0140B0:  41 4D 45 53 3B 20 0D 0A 28 2A 20 0D 0A 20 20 6D    AMES; ..(* ..  m
0140C0:  65 72 67 65 20 74 68 65 20 6E 61 6D 65 73 20 70    erge the names p
0140D0:  6F 69 6E 74 65 64 20 74 6F 20 62 79 20 63 6F 6D    ointed to by com
0140E0:  70 6C 69 6E 6B 20 69 6E 74 6F 20 74 68 65 20 74    plink into the t
0140F0:  61 62 6C 65 20 6F 6E 65 20 62 65 6C 6F 77 20 74    able one below t
014100:  68 65 20 0D 0A 20 20 74 6F 70 20 6F 66 20 74 68    he ..  top of th
014110:  65 20 64 69 73 70 6C 61 79 20 0D 0A 20 20 0D 0A    e display ..  ..
014120:  20 20 4E 6F 74 65 20 74 68 61 74 20 74 68 65 20      Note that the 
014130:  68 65 61 70 20 69 73 20 6E 6F 74 20 63 75 74 20    heap is not cut 
014140:  62 61 63 6B 20 73 69 6E 63 65 20 74 68 61 74 20    back since that 
014150:  0D 0A 20 20 68 61 73 20 61 6C 72 65 61 64 79 20    ..  has already 
014160:  62 65 65 6E 20 64 6F 6E 65 20 62 79 20 74 68 65    been done by the
014170:  20 63 6F 6D 70 72 65 73 73 20 72 6F 75 74 69 6E     compress routin
014180:  65 2C 20 69 66 20 72 65 71 75 69 72 65 64 2A 29    e, if required*)
014190:  0D 0A 56 41 52 20 50 3A 70 6E 61 6D 65 3B 20 0D    ..VAR P:pname; .
0141A0:  0A 42 45 47 49 4E 0D 0A 09 43 4F 4D 50 4C 49 4E    .BEGIN...COMPLIN
0141B0:  4B 3A 3D 4E 45 57 4D 4F 44 4E 41 4D 45 5E 2E 6D    K:=NEWMODNAME^.m
0141C0:  6F 64 6C 69 73 74 3B 20 0D 0A 09 57 48 49 4C 45    odlist; ...WHILE
0141D0:  20 28 43 4F 4D 50 4C 49 4E 4B 3C 3E 4E 49 4C 29     (COMPLINK<>NIL)
0141E0:  20 44 4F 20 0D 0A 09 09 45 4E 54 45 52 4E 41 4D     DO ....ENTERNAM
0141F0:  45 3B 20 0D 0A 09 09 43 4F 4D 50 4C 49 4E 4B 3A    E; ....COMPLINK:
014200:  20 20 20 72 65 63 6F 72 64 74 79 70 65 3A 0D 0A       recordtype:..
014210:  09 09 09 09 09 73 75 62 66 69 65 6C 64 73 3A 3D    .....subfields:=
014220:  52 45 4C 50 4E 54 52 28 73 75 62 66 69 65 6C 64    RELPNTR(subfield
014230:  73 29 3B 20 0D 0A 09 09 09 09 09 7C 0D 0A 09 09    s); .......|....
014240:  09 09 20 20 20 20 73 75 62 72 74 79 70 65 2C 65    ..    subrtype,e
014250:  6E 75 6D 74 79 70 65 3A 0D 0A 09 09 09 09 09 62    numtype:.......b
014260:  74 79 70 65 3A 3D 52 45 4C 50 4E 54 52 28 62 74    type:=RELPNTR(bt
014270:  79 70 65 29 3B 20 0D 0A 09 09 09 09 09 7C 0D 0A    ype); .......|..
014280:  09 09 09 09 20 20 20 20 70 6F 69 6E 74 74 79 70    ....    pointtyp
014290:  65 2C 73 65 74 74 79 70 65 3A 0D 0A 09 09 09 09    e,settype:......
0142A0:  09 72 65 66 74 79 70 65 3A 3D 52 45 4C 50 4E 54    .reftype:=RELPNT
0142B0:  52 28 72 65 66 74 79 70 65 29 3B 20 0D 0A 09 09    R(reftype); ....
0142C0:  09 09 09 7C 0D 0A 09 09 09 09 20 20 20 20 70 72    ...|......    pr
0142D0:  74 79 70 65 3A 0D 0A 09 09 09 09 09 70 72 70 61    type:.......prpa
0142E0:  72 73 3A 3D 52 45 4C 50 4E 54 52 28 70 72 70 61    rs:=RELPNTR(prpa
0142F0:  72 73 29 3B 20 0D 0A 09 09 09 09 09 4F 4C 44 50    rs); .......OLDP
014300:  41 52 3A 3D 70 72 70 61 72 73 3B 20 0D 0A 09 09    AR:=prpars; ....
014310:  09 09 09 57 48 49 4C 45 20 4F 4C 44 50 41 52 3C    ...WHILE OLDPAR<
014320:  3E 4E 49 4C 20 44 4F 20 0D 0A 09 09 09 09 09 20    >NIL DO ....... 
014330:  20 20 20 57 49 54 48 20 4F 4C 44 50 41 52 5E 20       WITH OLDPAR^ 
014340:  44 4F 20 0D 0A 09 09 09 09 09 09 76 61 72 74 79    DO ........varty
014350:  70 65 3A 3D 52 45 4C 50 4E 54 52 28 76 61 72 74    pe:=RELPNTR(vart
014360:  79 70 65 29 3B 20 0D 0A 09 09 09 09 09 09 6E 65    ype); ........ne
014370:  78 74 3A 3D 52 45 4C 50 4E 54 52 28 6E 65 78 74    xt:=RELPNTR(next
014380:  29 3B 20 0D 0A 09 09 09 09 09 09 4F 4C 44 50 41    ); ........OLDPA
014390:  52 3A 3D 6E 65 78 74 3B 20 0D 0A 09 09 09 09 09    R:=next; .......
0143A0:  09 45 4E 44 3B 0D 0A 09 09 09 09 09 20 20 20 20    .END;.......    
0143B0:  45 4E 44 3B 0D 0A 09 09 09 09 09 20 0D 0A 09 09    END;....... ....
0143C0:  09 09 09 7C 0D 0A 09 09 09 09 20 20 20 20 45 4E    ...|......    EN
0143D0:  44 3B 0D 0A 09 09 09 09 7C 28 2A 63 61 73 65 20    D;......|(*case 
0143E0:  63 6C 61 73 73 2A 29 0D 0A 09 09 09 20 20 20 20    class*).....    
0143F0:  6C 69 6E 6B 63 6C 61 73 73 3A 0D 0A 09 09 09 09    linkclass:......
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 41 02 00 00 00 02    ......R...A.....
014420:  11 00 46 02 00 00 00 02 11 00 42 02 00 00 00 02    ..F.......B.....
014430:  11 00 47 02 00 00 00 02 11 00 43 02 00 00 00 02    ..G.......C.....
014440:  11 00 48 02 00 00 00 02 11 00 44 02 00 00 00 02    ..H.......D.....
014450:  11 00 49 02 00 00 00 02 11 00 45 02 00 00 00 02    ..I.......E.....
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:  3D 43 4F 4D 50 4C 49 4E 4B 5E 2E 65 78 70 6F 72    =COMPLINK^.expor
014510:  74 6C 69 6E 6B 3B 20 0D 0A 09 09 45 4E 44 3B 0D    tlink; ....END;.
014520:  0A 09 45 4E 44 20 4D 45 52 47 45 4E 41 4D 45 53    ..END MERGENAMES
014530:  3B 20 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20    ; ....PROCEDURE 
014540:  4C 4F 41 44 46 49 4C 45 28 66 6E 3A 46 69 6C 65    LOADFILE(fn:File
014550:  4E 61 6D 65 29 3A 70 6E 61 6D 65 3B 0D 0A 28 2A    Name):pname;..(*
014560:  20 6C 6F 61 64 20 61 20 66 69 6C 65 20 74 6F 20     load a file to 
014570:  62 65 20 69 6D 70 6F 72 74 65 64 20 20 20 0D 0A    be imported   ..
014580:  20 20 0D 0A 20 20 72 65 6C 6F 63 61 74 65 20 74      ..  relocate t
014590:  68 65 20 65 6E 74 72 69 65 73 20 2A 29 0D 0A 20    he entries *).. 
0145A0:  20 0D 0A 56 41 52 20 09 54 49 44 3A 61 6C 66 61     ..VAR .TID:alfa
0145B0:  3B 20 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 44    ; .....BEGIN...D
0145C0:  49 53 50 4C 41 59 3A 3D 4E 49 4C 3B 0D 0A 09 47    ISPLAY:=NIL;...G
0145D0:  4C 4F 42 52 45 4C 4F 46 46 3A 3D 30 3B 0D 0A 09    LOBRELOFF:=0;...
0145E0:  49 46 20 4E 4F 54 20 52 45 41 44 46 49 4C 45 28    IF NOT READFILE(
0145F0:  66 6E 29 20 54 48 45 4E 20 0D 0A 09 20 20 20 20    fn) THEN ...    
014600:  52 45 54 55 52 4E 20 4E 49 4C 0D 0A 09 20 20 20    RETURN NIL...   
014610:  20 45 4E 44 3B 0D 0A 28 2A 09 6E 65 77 6D 6F 64     END;..(*.newmod
014620:  6E 61 6D 65 20 70 6F 69 6E 74 73 20 74 6F 20 65    name points to e
014630:  6E 74 72 79 20 66 6F 72 20 66 69 72 73 74 20 6D    ntry for first m
014640:  6F 64 75 6C 65 20 6E 61 6D 65 20 0D 0A 20 20 20    odule name ..   
014650:  20 09 77 68 69 63 68 20 69 73 20 74 68 65 20 6E     .which is the n
014660:  61 6D 65 20 6F 66 20 74 68 65 20 6D 6F 64 75 6C    ame of the modul
014670:  65 20 62 65 69 6E 67 20 6C 6F 61 64 65 64 20 0D    e being loaded .
014680:  0A 20 20 20 20 09 69 74 20 69 73 20 66 6F 6C 6C    .    .it is foll
014690:  6F 77 65 64 20 62 79 20 61 20 63 68 61 69 6E 20    owed by a chain 
0146A0:  6F 66 20 6E 61 6D 65 73 20 6F 66 20 6D 6F 64 75    of names of modu
0146B0:  6C 65 73 20 0D 0A 20 20 20 09 69 6D 70 6F 72 74    les ..   .import
0146C0:  65 64 20 62 79 20 74 68 61 74 20 6D 6F 64 75 6C    ed by that modul
0146D0:  65 20 0D 0A 20 20 0D 0A 20 20 09 69 6E 20 74 68    e ..  ..  .in th
0146E0:  65 20 63 61 73 65 20 6F 66 20 74 68 65 20 66 69    e case of the fi
0146F0:  72 73 74 20 6D 6F 64 75 6C 65 2C 20 77 65 20 6D    rst module, we m
014700:  28 2A 09 6B 65 65 70 20 61 20 63 69 72 63 75 6C    (*.keep a circul
014710:  61 72 20 62 75 66 66 65 72 20 6F 66 20 63 68 61    ar buffer of cha
014720:  72 61 63 74 65 72 73 20 77 68 69 6C 65 20 6D 61    racters while ma
014730:  74 63 68 69 6E 67 20 69 73 0D 0A 09 09 68 61 70    tching is....hap
014740:  70 65 6E 69 6E 67 2A 29 0D 0A 0D 0A 0D 0A 50 52    pening*)......PR
014750:  4F 43 45 44 55 52 45 20 57 61 69 74 46 6F 72 43    OCEDURE WaitForC
014760:  68 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4E    h;..BEGIN...IF N
014770:  4F 54 20 53 68 6F 77 43 68 61 6E 67 65 20 54 48    OT ShowChange TH
014780:  45 4E 0D 0A 09 09 53 68 6F 77 43 68 61 6E 67 65    EN....ShowChange
014790:  3A 3D 54 52 55 45 3B 0D 0A 09 09 4F 75 74 70 75    :=TRUE;....Outpu
0147A0:  74 54 6F 53 63 72 65 65 6E 28 54 52 55 45 29 3B    tToScreen(TRUE);
0147B0:  0D 0A 09 09 52 65 64 69 73 70 6C 61 79 3B 0D 0A    ....Redisplay;..
0147C0:  09 09 45 4E 44 3B 0D 0A 09 52 45 50 45 41 54 0D    ..END;...REPEAT.
0147D0:  0A 09 09 42 75 73 79 52 65 61 64 28 63 68 29 3B    ...BusyRead(ch);
0147E0:  0D 0A 09 09 55 4E 54 49 4C 20 63 68 3C 3E 30 78    ....UNTIL ch<>0x
0147F0:  3B 0D 0A 09 45 4E 44 20 57 61 69 74 46 6F 72 43    ;...END WaitForC
014800:  68 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68    h;..PROCEDURE Ch
014810:  65 63 6B 49 6E 74 65 72 72 75 70 74 28 29 3A 42    eckInterrupt():B
014820:  4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 43 68    OOLEAN;....(*.Ch
014830:  65 63 6B 20 74 68 65 20 6B 65 79 62 6F 61 72 64    eck the keyboard
014840:  20 66 6F 72 20 61 6E 20 69 6E 74 65 72 75 70 74     for an interupt
014850:  20 28 43 6F 6E 74 72 6F 6C 20 55 29 0D 0A 0D 0A     (Control U)....
014860:  09 41 6C 73 6F 2C 20 69 66 20 45 73 63 61 70 65    .Also, if Escape
014870:  20 68 61 73 20 62 65 65 6E 20 74 79 70 65 64 2C     has been typed,
014880:  20 73 74 6F 70 20 74 65 72 6D 69 6E 61 6C 20 6F     stop terminal o
014890:  75 74 70 75 74 0D 0A 09 75 6E 74 69 6C 20 61 6E    utput...until an
0148A0:  6F 74 68 65 72 20 63 68 61 72 61 63 74 65 72 20    other character 
0148B0:  69 73 20 74 79 70 65 64 2A 29 0D 0A 0D 0A 56 41    is typed*)....VA
0148C0:  52 09 63 68 31 3A 43 48 41 52 3B 0D 0A 42 45 47    R.ch1:CHAR;..BEG
0148D0:  49 4E 0D 0A 09 42 75 73 79 52 65 61 64 28 63 68    IN...BusyRead(ch
0148E0:  31 29 3B 0D 0A 09 43 41 53 45 20 63 68 31 20 4F    1);...CASE ch1 O
0148F0:  46 20 0D 0A 09 09 31 35 78 3A 52 45 54 55 52 4E    F ....15x:RETURN
014900:  75 73 74 20 73 65 74 20 74 68 65 20 0D 0A 20 20    ust set the ..  
014910:  09 6E 75 6D 62 65 72 73 20 6F 66 20 74 68 65 20    .numbers of the 
014920:  76 61 72 69 61 62 6C 65 73 20 74 6F 20 6D 6F 64    variables to mod
014930:  75 6C 65 6E 6F 20 0D 0A 20 20 09 62 75 74 20 74    uleno ..  .but t
014940:  68 69 73 20 69 73 20 69 72 72 65 6C 65 76 61 6E    his is irrelevan
014950:  74 20 66 6F 72 20 74 68 65 20 6F 74 68 65 72 20    t for the other 
014960:  0D 0A 20 20 09 6D 6F 64 75 6C 65 73 20 61 73 20    ..  .modules as 
014970:  74 68 65 20 76 61 72 69 61 62 6C 65 73 20 63 61    the variables ca
014980:  6E 6E 6F 74 20 62 65 20 61 63 63 65 73 73 65 64    nnot be accessed
014990:  20 0D 0A 20 20 09 75 6E 6C 65 73 73 20 65 78 70     ..  .unless exp
0149A0:  6C 69 63 69 74 6C 79 20 69 6D 70 6F 72 74 65 64    licitly imported
0149B0:  20 2A 29 0D 0A 0D 0A 09 43 4F 4D 50 4C 49 4E 4B     *).....COMPLINK
0149C0:  3A 3D 4E 45 57 4D 4F 44 4E 41 4D 45 3B 20 0D 0A    :=NEWMODNAME; ..
0149D0:  09 57 48 49 4C 45 20 43 4F 4D 50 4C 49 4E 4B 3C    .WHILE COMPLINK<
0149E0:  3E 4E 49 4C 20 44 4F 20 0D 0A 09 20 20 20 20 57    >NIL DO ...    W
0149F0:  49 54 48 20 43 4F 4D 50 4C 49 4E 4B 5E 20 44 4F    ITH COMPLINK^ DO
014A00:  20 0D 0A 09 09 52 45 54 52 4E 41 4D 45 28 43 4F     ....RETRNAME(CO
014A10:  4D 50 4C 49 4E 4B 29 3B 0D 0A 09 09 6D 6F 64 6C    MPLINK);....modl
014A20:  69 73 74 3A 3D 52 45 4C 50 4E 54 52 28 6D 6F 64    ist:=RELPNTR(mod
014A30:  6C 69 73 74 29 3B 20 0D 0A 09 09 61 6E 6F 6E 6C    list); ....anonl
014A40:  69 73 74 3A 3D 52 45 4C 50 4E 54 52 28 61 6E 6F    ist:=RELPNTR(ano
014A50:  6E 6C 69 73 74 29 3B 20 0D 0A 09 09 6E 6C 69 6E    nlist); ....nlin
014A60:  6B 3A 3D 6D 6F 64 6C 69 73 74 3B 20 0D 0A 09 09    k:=modlist; ....
014A70:  52 45 4C 4F 43 41 54 45 3B 0D 0A 09 09 6E 6C 69    RELOCATE;....nli
014A80:  6E 6B 3A 3D 61 6E 6F 6E 6C 69 73 74 3B 20 0D 0A    nk:=anonlist; ..
014A90:  09 09 52 45 4C 4F 43 41 54 45 3B 0D 0A 09 09 6E    ..RELOCATE;....n
014AA0:  65 78 74 6D 6F 64 75 6C 65 3A 3D 52 45 4C 50 4E    extmodule:=RELPN
014AB0:  54 52 28 6E 65 78 74 6D 6F 64 75 6C 65 29 3B 20    TR(nextmodule); 
014AC0:  0D 0A 09 09 43 4F 4D 50 4C 49 4E 4B 3A 3D 6E 65    ....COMPLINK:=ne
014AD0:  78 74 6D 6F 64 75 6C 65 3B 20 0D 0A 09 09 45 4E    xtmodule; ....EN
014AE0:  44 3B 0D 0A 09 20 20 20 20 45 4E 44 3B 0D 0A 09    D;...    END;...
014AF0:  4D 45 52 47 45 4E 41 4D 45 53 3B 0D 0A 09 4E 45    MERGENAMES;...NE
014B00:  20 54 52 55 45 0D 0A 09 09 20 20 20 20 7C 0D 0A     TRUE....    |..
014B10:  09 09 31 62 78 3A 53 68 6F 77 43 68 61 6E 67 65    ..1bx:ShowChange
014B20:  3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 20 20 20 20    :=FALSE;....    
014B30:  4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 28 46    OutputToScreen(F
014B40:  41 4C 53 45 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    ALSE);....END;..
014B50:  09 52 45 54 55 52 4E 20 46 41 4C 53 45 0D 0A 09    .RETURN FALSE...
014B60:  45 4E 44 20 43 68 65 63 6B 49 6E 74 65 72 72 75    END CheckInterru
014B70:  70 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47    pt;..PROCEDURE G
014B80:  65 74 41 43 68 61 72 28 56 41 52 20 63 68 31 3A    etAChar(VAR ch1:
014B90:  43 48 41 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09    CHAR);..BEGIN...
014BA0:  49 46 20 4D 61 63 72 6F 44 65 70 74 68 3D 30 20    IF MacroDepth=0 
014BB0:  54 48 45 4E 0D 0A 09 09 57 61 69 74 46 6F 72 43    THEN....WaitForC
014BC0:  68 3B 0D 0A 09 09 63 68 31 3A 3D 63 68 3B 0D 0A    h;....ch1:=ch;..
014BD0:  09 09 49 46 20 4C 65 61 72 6E 69 6E 67 20 41 4E    ..IF Learning AN
014BE0:  44 20 28 4C 65 61 72 6E 4C 65 6E 3C 48 49 47 48    D (LearnLen<HIGH
014BF0:  28 54 65 78 74 29 29 20 54 48 45 4E 0D 0A 09 09    (Text)) THEN....
014C00:  09 49 4E 43 28 4C 65 61 72 6E 4C 65 6E 29 3B 0D    .INC(LearnLen);.
014C10:  0A 09 09 09 54 65 78 74 5B 4C 65 61 72 6E 4C 65    ....Text[LearnLe
014C20:  6E 5D 3A 3D 63 68 3B 0D 0A 09 09 09 45 4E 44 3B    n]:=ch;.....END;
014C30:  0D 0A 09 45 4C 53 45 0D 0A 09 09 57 49 54 48 20    ...ELSE....WITH 
014C40:  4D 61 63 72 6F 53 74 61 63 6B 5B 4D 61 63 72 6F    MacroStack[Macro
014C50:  44 65 70 74 68 5D 20 44 4F 0D 0A 09 09 09 49 46    Depth] DO.....IF
014C60:  20 50 6F 73 3E 44 65 66 5E 2E 4C 65 6E 67 74 68     Pos>Def^.Length
014C70:  20 54 48 45 4E 0D 0A 09 09 09 20 20 20 20 44 45     THEN.....    DE
014C80:  43 28 43 6F 75 6E 74 29 3B 0D 0A 09 09 09 20 20    C(Count);.....  
014C90:  20 20 49 46 20 43 68 65 63 6B 49 6E 74 65 72 72      IF CheckInterr
014CA0:  75 70 74 28 29 20 4F 52 20 4E 4F 54 20 46 6F 75    upt() OR NOT Fou
014CB0:  6E 64 20 54 48 45 4E 0D 0A 09 09 09 09 4D 61 63    nd THEN......Mac
014CC0:  72 6F 44 65 70 74 68 3A 3D 31 3B 0D 0A 09 09 09    roDepth:=1;.....
014CD0:  09 43 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09 09 09    .Count:=0;......
014CE0:  45 4E 44 3B 0D 0A 09 09 09 20 20 20 20 49 46 20    END;.....    IF 
014CF0:  43 6F 75 6E 74 3C 31 20 54 48 45 4E 0D 0A 09 09    Count<1 THEN....
014D00:  57 4D 4F 44 4E 41 4D 45 5E 2E 6D 6F 64 6E 61 6D    WMODNAME^.modnam
014D10:  65 73 3A 3D 44 49 53 50 4C 41 59 3B 09 20 20 20    es:=DISPLAY;.   
014D20:  20 20 0D 0A 09 52 45 54 55 52 4E 20 4E 45 57 4D      ...RETURN NEWM
014D30:  4F 44 4E 41 4D 45 3B 20 0D 0A 09 20 0D 0A 09 45    ODNAME; ... ...E
014D40:  4E 44 20 4C 4F 41 44 46 49 4C 45 3B 20 0D 0A 09    ND LOADFILE; ...
014D50:  45 4E 44 20 49 6D 70 6F 72 74 2E 0D 0A 20 0D 0A    END Import... ..
014D60:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
014D70:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
014D80:  1A 1A 1A 1A 20 20 20 20 42 41 4B 20 00 00 00 00    ....    BAK ....
014D90:  00 00 00 00 00 00 77 51 90 0D 17 22 A4 20 00 00    ......wQ...". ..
014DA0:  41 4E 53 49 20 20 20 20 53 59 53 00 00 00 00 00    ANSI    SYS.....
014DB0:  00 00 00 00 00 00 60 6D 67 0A A1 00 73 06 00 00    ......`mg...s...
014DC0:  41 53 53 49 47 4E 20 20 43 4F 4D 00 00 00 00 00    ASSIGN  COM.....
014DD0:  00 00 00 00 00 00 60 6D 67 0A A2 00 E5 05 00 00    ......`mg.......
014DE0:  41 54 54 52 49 42 20 20 45 58 45 00 00 00 00 00    ATTRIB  EXE.....
014DF0:  00 00 00 00 00 00 60 6D 67 0A A3 00 F3 3A 00 00    ......`mg.£..:..
014E00:  29 29 3B 09 28 2A 67 6F 20 74 6F 20 6E 65 78 74    ));.(*go to next
014E10:  2A 29 0D 0A 09 09 45 4E 44 3B 20 28 2A 57 48 49    *)....END; (*WHI
014E20:  4C 45 20 69 3C 3E 32 35 35 2A 29 0D 0A 09 0D 0A    LE i<>255*).....
014E30:  09 69 3A 3D 42 44 4F 53 28 73 64 61 66 63 2C 38    .i:=BDOS(sdafc,8
014E40:  30 48 29 3B 09 09 28 2A 72 65 73 65 74 20 74 6F    0H);..(*reset to
014E50:  20 64 65 66 61 75 6C 74 2A 29 0D 0A 09 0D 0A 09     default*)......
014E60:  45 4E 44 20 53 65 61 72 63 68 46 6F 72 46 69 6C    END SearchForFil
014E70:  65 4E 61 6D 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A    eNames;..BEGIN..
014E80:  0D 0A 09 28 2A 20 43 6F 6E 76 65 72 74 20 50 61    ...(* Convert Pa
014E90:  74 74 65 72 6E 20 74 6F 20 61 20 66 69 6C 65 20    ttern to a file 
014EA0:  6E 61 6D 65 2A 29 0D 0A 09 0D 0A 09 6A 3A 3D 48    name*)......j:=H
014EB0:  49 47 48 28 50 61 74 74 65 72 6E 29 3B 0D 0A 09    IGH(Pattern);...
014EC0:  57 69 6C 64 43 61 72 64 3A 3D 46 41 4C 53 45 3B    WildCard:=FALSE;
014ED0:  0D 0A 09 49 46 20 6A 3E 48 49 47 48 28 6E 61 6D    ...IF j>HIGH(nam
014EE0:  65 29 20 54 48 45 4E 20 6A 3A 3D 48 49 47 48 28    e) THEN j:=HIGH(
014EF0:  6E 61 6D 65 29 20 45 4E 44 3B 0D 0A 09 46 4F 52    name) END;...FOR
014F00:  09 09 44 45 43 28 4D 61 63 72 6F 44 65 70 74 68    ..DEC(MacroDepth
014F10:  29 3B 0D 0A 09 09 09 20 20 20 20 45 4C 53 45 0D    );.....    ELSE.
014F20:  0A 09 09 09 09 50 6F 73 3A 3D 31 3B 0D 0A 09 09    .....Pos:=1;....
014F30:  09 09 45 4E 44 3B 0D 0A 09 09 09 20 20 20 20 47    ..END;.....    G
014F40:  65 74 41 43 68 61 72 28 63 68 31 29 3B 0D 0A 09    etAChar(ch1);...
014F50:  09 09 45 4C 53 45 0D 0A 09 09 09 09 63 68 31 3A    ..ELSE......ch1:
014F60:  3D 44 65 66 5E 2E 43 6F 6D 6D 43 68 61 72 73 5B    =Def^.CommChars[
014F70:  50 6F 73 5D 3B 0D 0A 09 09 09 09 49 4E 43 28 50    Pos];......INC(P
014F80:  6F 73 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A    os);......END;..
014F90:  09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D    ...END;....END;.
014FA0:  0A 09 45 4E 44 20 47 65 74 41 43 68 61 72 3B 0D    ..END GetAChar;.
014FB0:  0A 50 52 4F 43 45 44 55 52 45 20 41 64 64 4D 61    .PROCEDURE AddMa
014FC0:  63 72 6F 28 70 3A 50 4B 65 79 44 65 66 3B 72 65    cro(p:PKeyDef;re
014FD0:  70 65 61 74 3A 49 4E 54 45 47 45 52 29 3B 0D 0A    peat:INTEGER);..
014FE0:  42 45 47 49 4E 0D 0A 09 49 46 20 28 70 3C 3E 4E    BEGIN...IF (p<>N
014FF0:  49 4C 29 20 41 4E 44 20 28 4D 61 63 72 6F 44 65    IL) AND (MacroDe
015000:  70 74 68 3C 3D 48 49 47 48 28 4D 61 63 72 6F 53    pth<=HIGH(MacroS
015010:  74 61 63 6B 29 29 20 54 48 45 4E 0D 0A 0D 0A 09    tack)) THEN.....
015020:  09 28 2A 6D 61 6B 65 20 73 75 72 65 20 74 68 61    .(*make sure tha
015030:  74 20 6D 61 63 72 6F 20 69 73 20 6E 6F 74 20 72    t macro is not r
015040:  65 63 75 72 73 69 76 65 2A 29 0D 0A 0D 0A 0D 0A    ecursive*)......
015050:  09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 4D 61    ..FOR i:=1 TO Ma
015060:  63 72 6F 44 65 70 74 68 20 44 4F 0D 0A 09 09 09    croDepth DO.....
015070:  49 46 20 4D 61 63 72 6F 53 74 61 63 6B 5B 69 5D    IF MacroStack[i]
015080:  2E 44 65 66 3D 70 20 54 48 45 4E 0D 0A 09 09 09    .Def=p THEN.....
015090:  09 45 72 72 6F 72 4D 65 73 73 61 67 65 28 27 52    .ErrorMessage('R
0150A0:  65 63 75 72 73 69 76 65 20 6D 61 63 72 6F 73 21    ecursive macros!
0150B0:  27 2C 27 20 27 29 3B 0D 0A 09 09 09 09 4D 61 63    ',' ');......Mac
0150C0:  72 6F 44 65 70 74 68 3A 3D 30 3B 0D 0A 09 09 09    roDepth:=0;.....
0150D0:  09 52 45 54 55 52 4E 3B 0D 0A 09 09 09 09 45 4E    .RETURN;......EN
0150E0:  44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49    D;.....END;....I
0150F0:  4E 43 28 4D 61 63 72 6F 44 65 70 74 68 29 3B 0D    NC(MacroDepth);.
015100:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
015110:  4F 44 55 4C 45 20 4D 61 63 72 6F 73 3B 0D 0A 0D    ODULE Macros;...
015120:  0A 28 2A 09 54 68 69 73 20 69 73 20 61 20 73 70    .(*.This is a sp
015130:  65 63 69 61 6C 20 76 65 72 73 69 6F 6E 20 6F 66    ecial version of
015140:  20 6D 61 63 72 6F 73 20 66 6F 72 20 6D 61 63 68     macros for mach
015150:  69 6E 65 73 0D 0A 09 77 68 69 63 68 20 64 6F 20    ines...which do 
015160:  6E 6F 74 20 68 61 76 65 20 66 75 6E 63 74 69 6F    not have functio
015170:  6E 20 6B 65 79 73 20 61 74 20 61 6C 6C 2C 20 73    n keys at all, s
015180:  6F 20 64 6F 0D 0A 09 6E 6F 74 20 6E 65 65 64 20    o do...not need 
015190:  74 68 65 20 65 78 74 72 61 20 63 6F 64 65 20 66    the extra code f
0151A0:  6F 72 20 66 75 6E 63 74 69 6F 6E 20 6B 65 79 20    or function key 
0151B0:  64 65 74 65 63 74 69 6F 6E 2A 29 0D 0A 0D 0A 46    detection*)....F
0151C0:  52 4F 4D 09 44 6F 4D 65 6E 75 20 49 4D 50 4F 52    ROM.DoMenu IMPOR
0151D0:  54 20 47 65 74 53 74 72 69 6E 67 2C 52 65 64 69    T GetString,Redi
0151E0:  73 70 6C 61 79 3B 0D 0A 46 52 4F 4D 09 53 74 6F    splay;..FROM.Sto
0151F0:  72 61 67 65 20 49 4D 50 4F 52 54 20 20 41 4C 4C    rage IMPORT  ALL
015200:  4F 43 41 54 45 2C 44 45 41 4C 4C 4F 43 41 54 45    OCATE,DEALLOCATE
015210:  3B 0D 0A 46 52 4F 4D 09 54 65 72 6D 69 6E 61 6C    ;..FROM.Terminal
015220:  20 49 4D 50 4F 52 54 20 42 75 73 79 52 65 61 64     IMPORT BusyRead
015230:  2C 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72 69    ,WriteString,Wri
015240:  74 65 4C 6E 2C 57 72 69 74 65 3B 0D 0A 46 52 4F    teLn,Write;..FRO
015250:  4D 09 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46    M.Files IMPORT F
015260:  49 4C 45 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B    ILE,SeqReadBlock
015270:  2C 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 4C    ,SeqWriteBlock,L
015280:  6F 6F 6B 75 70 2C 43 72 65 61 74 65 2C 43 6C 6F    ookup,Create,Clo
015290:  73 65 3B 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D    se;..FROM.SYSTEM
0152A0:  20 49 4D 50 4F 52 54 20 41 44 52 2C 54 53 49 5A     IMPORT ADR,TSIZ
0152B0:  45 3B 0D 0A 46 52 4F 4D 09 45 64 69 74 44 69 73    E;..FROM.EditDis
0152C0:  70 6C 61 79 20 49 4D 50 4F 52 54 20 45 72 72 6F    play IMPORT Erro
0152D0:  72 4D 65 73 73 61 67 65 3B 0D 0A 46 52 4F 4D 09    rMessage;..FROM.
0152E0:  46 61 73 74 4D 6F 76 65 20 49 4D 50 4F 52 54 20    FastMove IMPORT 
0152F0:  4D 6F 76 65 75 70 3B 0D 0A 46 52 4F 4D 09 53 63    Moveup;..FROM.Sc
015300:  0A 09 09 57 49 54 48 20 4D 61 63 72 6F 53 74 61    ...WITH MacroSta
015310:  63 6B 5B 4D 61 63 72 6F 44 65 70 74 68 5D 20 44    ck[MacroDepth] D
015320:  4F 0D 0A 09 09 09 50 6F 73 3A 3D 31 3B 0D 0A 09    O.....Pos:=1;...
015330:  09 09 44 65 66 3A 3D 70 3B 0D 0A 09 09 09 43 6F    ..Def:=p;.....Co
015340:  75 6E 74 3A 3D 72 65 70 65 61 74 3B 0D 0A 09 09    unt:=repeat;....
015350:  09 45 4E 44 3B 28 2A 57 49 54 48 2A 29 0D 0A 09    .END;(*WITH*)...
015360:  09 45 4E 44 3B 28 2A 70 3C 3E 4E 49 4C 20 65 74    .END;(*p<>NIL et
015370:  63 2A 29 0D 0A 09 45 4E 44 20 41 64 64 4D 61 63    c*)...END AddMac
015380:  72 6F 3B 0D 0A 56 41 52 09 53 70 65 63 69 61 6C    ro;..VAR.Special
015390:  53 65 71 75 65 6E 63 65 3A 42 4F 4F 4C 45 41 4E    Sequence:BOOLEAN
0153A0:  3D 46 41 4C 53 45 3B 0D 0A 50 52 4F 43 45 44 55    =FALSE;..PROCEDU
0153B0:  52 45 20 52 65 61 64 41 43 68 61 72 28 56 41 52    RE ReadAChar(VAR
0153C0:  20 52 65 73 75 6C 74 3A 43 48 41 52 29 3B 0D 0A     Result:CHAR);..
0153D0:  0D 0A 28 2A 09 72 65 61 64 20 6E 65 78 74 20 63    ..(*.read next c
0153E0:  68 61 72 61 63 74 65 72 2C 20 63 68 65 63 6B 69    haracter, checki
0153F0:  6E 67 20 66 6F 72 20 61 72 72 6F 77 73 2F 66 75    ng for arrows/fu
015400:  6E 63 74 69 6F 6E 20 6B 65 79 73 0D 0A 09 69 6E    nction keys...in
015410:  20 61 6E 64 20 6F 75 74 20 70 6F 69 6E 74 20 74     and out point t
015420:  6F 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73    o the characters
015430:  20 77 68 69 63 68 20 68 61 76 65 20 62 65 65 6E     which have been
015440:  20 72 65 61 64 20 61 68 65 61 64 0D 0A 09 42 79     read ahead...By
015450:  20 52 65 61 64 41 43 68 61 72 20 69 6E 20 61 6E     ReadAChar in an
015460:  20 61 74 74 65 6D 70 74 20 74 6F 20 72 65 73 6F     attempt to reso
015470:  6C 76 65 20 61 20 6D 61 63 72 6F 0D 0A 0D 0A 09    lve a macro.....
015480:  57 68 65 6E 20 52 65 61 64 41 43 68 61 72 20 69    When ReadAChar i
015490:  73 20 65 6E 74 65 72 65 64 2C 20 69 66 20 74 68    s entered, if th
0154A0:  69 73 20 62 75 66 66 65 72 20 69 73 20 6E 6F 74    is buffer is not
0154B0:  20 65 6D 70 74 79 2C 0D 0A 09 74 68 65 20 66 69     empty,...the fi
0154C0:  72 73 74 20 63 68 61 72 61 63 74 65 72 20 69 73    rst character is
0154D0:  20 74 6F 20 62 65 20 6C 6F 6F 6B 65 64 20 75 70     to be looked up
0154E0:  20 74 6F 20 73 65 65 20 69 66 20 69 74 20 69 73     to see if it is
0154F0:  20 61 20 0D 0A 09 73 74 61 72 74 20 6F 66 20 61     a ...start of a
015500:  72 65 65 6E 49 4F 20 49 4D 50 4F 52 54 20 4F 75    reenIO IMPORT Ou
015510:  74 70 75 74 54 6F 53 63 72 65 65 6E 3B 0D 0A 43    tputToScreen;..C
015520:  4F 4E 53 54 09 42 6C 6F 63 6B 4C 65 6E 3D 31 32    ONST.BlockLen=12
015530:  38 3B 0D 0A 09 45 53 43 3D 31 62 78 3B 0D 0A 54    8;...ESC=1bx;..T
015540:  59 50 45 0D 0A 09 4B 65 79 44 65 66 3D 52 45 43    YPE...KeyDef=REC
015550:  4F 52 44 0D 0A 09 09 4C 65 6E 67 74 68 3A 5B 31    ORD....Length:[1
015560:  2E 2E 36 31 5D 3B 0D 0A 09 09 43 6F 6D 6D 43 68    ..61];....CommCh
015570:  61 72 73 3A 41 52 52 41 59 5B 31 2E 2E 32 30 5D    ars:ARRAY[1..20]
015580:  20 4F 46 20 43 48 41 52 3B 0D 0A 09 09 45 4E 44     OF CHAR;....END
015590:  3B 0D 0A 09 50 4B 65 79 44 65 66 3D 50 4F 49 4E    ;...PKeyDef=POIN
0155A0:  54 45 52 20 54 4F 20 4B 65 79 44 65 66 3B 0D 0A    TER TO KeyDef;..
0155B0:  09 4D 61 63 72 6F 50 6F 69 6E 74 3D 52 45 43 4F    .MacroPoint=RECO
0155C0:  52 44 0D 0A 09 09 50 6F 73 3A 43 41 52 44 49 4E    RD....Pos:CARDIN
0155D0:  41 4C 3B 0D 0A 09 09 44 65 66 3A 50 4B 65 79 44    AL;....Def:PKeyD
0155E0:  65 66 3B 0D 0A 09 09 43 6F 75 6E 74 3A 49 4E 54    ef;....Count:INT
0155F0:  45 47 45 52 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    EGER;....END;...
015600:  09 09 09 0D 0A 56 41 52 0D 0A 09 63 68 3A 43 48    .....VAR...ch:CH
015610:  41 52 3B 0D 0A 09 43 6F 6D 6D 61 6E 64 73 3A 41    AR;...Commands:A
015620:  52 52 41 59 5B 27 40 27 2E 2E 27 5A 27 5D 20 4F    RRAY['@'..'Z'] O
015630:  46 20 50 4B 65 79 44 65 66 3B 0D 0A 09 4D 61 63    F PKeyDef;...Mac
015640:  72 6F 44 65 70 74 68 3A 43 41 52 44 49 4E 41 4C    roDepth:CARDINAL
015650:  3D 30 3B 0D 0A 09 4D 61 63 72 6F 53 74 61 63 6B    =0;...MacroStack
015660:  3A 41 52 52 41 59 5B 31 2E 2E 35 5D 20 4F 46 20    :ARRAY[1..5] OF 
015670:  4D 61 63 72 6F 50 6F 69 6E 74 3B 0D 0A 09 4C 65    MacroPoint;...Le
015680:  61 72 6E 63 68 3A 43 48 41 52 3B 0D 0A 09 4C 65    arnch:CHAR;...Le
015690:  61 72 6E 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3B    arnLen:CARDINAL;
0156A0:  0D 0A 09 4C 65 61 72 6E 69 6E 67 3A 42 4F 4F 4C    ...Learning:BOOL
0156B0:  45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 54 65 78    EAN=FALSE;...Tex
0156C0:  74 3A 41 52 52 41 59 5B 31 2E 2E 36 30 5D 20 4F    t:ARRAY[1..60] O
0156D0:  46 20 43 48 41 52 3B 0D 0A 09 69 3A 43 41 52 44    F CHAR;...i:CARD
0156E0:  49 4E 41 4C 3B 0D 0A 09 53 68 6F 77 43 68 61 6E    INAL;...ShowChan
0156F0:  67 65 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 09    ge:BOOLEAN;.....
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 41 02 00 00 00 02    ......R...A.....
015720:  12 00 46 02 00 00 00 02 12 00 42 02 00 00 00 02    ..F.......B.....
015730:  12 00 47 02 00 00 00 02 12 00 43 02 00 00 00 02    ..G.......C.....
015740:  12 00 48 02 00 00 00 02 12 00 44 02 00 00 00 02    ..H.......D.....
015750:  12 00 49 02 00 00 00 02 12 00 45 02 00 00 00 02    ..I.......E.....
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:  20 6B 65 79 20 64 65 66 69 6E 69 74 69 6F 6E 2A     key definition*
015810:  29 0D 0A 42 45 47 49 4E 0D 0A 09 47 65 74 41 43    )..BEGIN...GetAC
015820:  68 61 72 28 52 65 73 75 6C 74 29 3B 0D 0A 09 45    har(Result);...E
015830:  4E 44 20 52 65 61 64 41 43 68 61 72 3B 0D 0A 09    ND ReadAChar;...
015840:  09 09 09 09 0D 0A 50 52 4F 43 45 44 55 52 45 20    ......PROCEDURE 
015850:  47 65 74 44 65 66 43 68 61 72 3B 0D 0A 56 41 52    GetDefChar;..VAR
015860:  09 54 65 78 74 3A 41 52 52 41 59 5B 31 2E 2E 31    .Text:ARRAY[1..1
015870:  5D 20 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49    ] OF CHAR;..BEGI
015880:  4E 0D 0A 09 47 65 74 53 74 72 69 6E 67 28 54 65    N...GetString(Te
015890:  78 74 2C 4C 65 61 72 6E 4C 65 6E 2C 27 43 68 61    xt,LearnLen,'Cha
0158A0:  72 20 74 6F 20 64 65 66 69 6E 65 3A 27 29 3B 0D    r to define:');.
0158B0:  0A 09 4C 65 61 72 6E 63 68 3A 3D 43 41 50 28 54    ..Learnch:=CAP(T
0158C0:  65 78 74 5B 31 5D 29 3B 0D 0A 09 45 4E 44 20 47    ext[1]);...END G
0158D0:  65 74 44 65 66 43 68 61 72 3B 0D 0A 50 52 4F 43    etDefChar;..PROC
0158E0:  45 44 55 52 45 20 44 65 66 4D 61 63 72 6F 54 65    EDURE DefMacroTe
0158F0:  78 74 3B 0D 0A 56 41 52 09 70 3A 50 4B 65 79 44    xt;..VAR.p:PKeyD
015900:  65 66 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20    ef;..BEGIN...IF 
015910:  4C 65 61 72 6E 4C 65 6E 3E 30 20 54 48 45 4E 0D    LearnLen>0 THEN.
015920:  0A 09 09 41 4C 4C 4F 43 41 54 45 28 70 2C 54 53    ...ALLOCATE(p,TS
015930:  49 5A 45 28 43 41 52 44 49 4E 41 4C 29 2B 4C 65    IZE(CARDINAL)+Le
015940:  61 72 6E 4C 65 6E 29 3B 0D 0A 09 09 43 6F 6D 6D    arnLen);....Comm
015950:  61 6E 64 73 5B 4C 65 61 72 6E 63 68 5D 3A 3D 70    ands[Learnch]:=p
015960:  20 0D 0A 09 09 57 49 54 48 20 70 5E 20 44 4F 0D     ....WITH p^ DO.
015970:  0A 09 09 09 4C 65 6E 67 74 68 3A 3D 4C 65 61 72    ....Length:=Lear
015980:  6E 4C 65 6E 3B 0D 0A 09 09 09 46 4F 52 20 4C 65    nLen;.....FOR Le
015990:  61 72 6E 4C 65 6E 3A 3D 4C 65 61 72 6E 4C 65 6E    arnLen:=LearnLen
0159A0:  20 54 4F 20 31 20 42 59 20 2D 31 20 44 4F 0D 0A     TO 1 BY -1 DO..
0159B0:  09 09 09 09 43 6F 6D 6D 43 68 61 72 73 5B 4C 65    ....CommChars[Le
0159C0:  61 72 6E 4C 65 6E 5D 3A 3D 54 65 78 74 5B 4C 65    arnLen]:=Text[Le
0159D0:  61 72 6E 4C 65 6E 5D 3B 0D 0A 09 09 09 09 45 4E    arnLen];......EN
0159E0:  44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 0D 0A 09    D;.....END;.....
0159F0:  09 45 4E 44 3B 0D 0A 09 45 4E 44 20 44 65 66 4D    .END;...END DefM
015A00:  73 65 71 75 65 6E 63 65 73 2A 29 0D 0A 09 49 46    sequences*)...IF
015A10:  20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A     reply<>0 THEN..
015A20:  09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D 3A 3D    ..Block[reply]:=
015A30:  30 78 3B 0D 0A 09 09 53 65 71 57 72 69 74 65 42    0x;....SeqWriteB
015A40:  6C 6F 63 6B 28 46 2C 41 44 52 28 42 6C 6F 63 6B    lock(F,ADR(Block
015A50:  29 2C 42 6C 6F 63 6B 4C 65 6E 2C 72 65 70 6C 79    ),BlockLen,reply
015A60:  29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 43    );....END;.....C
015A70:  6C 6F 73 65 28 46 29 3B 0D 0A 09 45 4E 44 20 53    lose(F);...END S
015A80:  74 6F 72 65 4D 61 63 72 6F 73 3B 0D 0A 50 52 4F    toreMacros;..PRO
015A90:  43 45 44 55 52 45 20 4F 75 74 43 68 28 63 68 3A    CEDURE OutCh(ch:
015AA0:  43 48 41 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09    CHAR);..BEGIN...
015AB0:  49 46 20 63 68 3C 27 20 27 20 54 48 45 4E 0D 0A    IF ch<' ' THEN..
015AC0:  09 09 57 72 69 74 65 28 27 5E 27 29 3B 57 72 69    ..Write('^');Wri
015AD0:  74 65 28 43 48 52 28 4F 52 44 28 63 68 29 2B 36    te(CHR(ORD(ch)+6
015AE0:  34 29 29 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 57    4));...ELSE....W
015AF0:  72 69 74 65 28 63 68 29 3B 0D 0A 09 09 45 4E 44    rite(ch);....END
015B00:  3B 0D 0A 09 45 4E 44 20 4F 75 74 43 68 3B 0D 0A    ;...END OutCh;..
015B10:  50 52 4F 43 45 44 55 52 45 20 50 72 69 6E 74 4D    PROCEDURE PrintM
015B20:  61 63 72 6F 73 3B 0D 0A 42 45 47 49 4E 0D 0A 09    acros;..BEGIN...
015B30:  46 4F 52 20 63 68 3A 3D 27 41 27 20 54 4F 20 27    FOR ch:='A' TO '
015B40:  5A 27 20 44 4F 0D 0A 09 09 49 46 20 43 6F 6D 6D    Z' DO....IF Comm
015B50:  61 6E 64 73 5B 63 68 5D 3C 3E 4E 49 4C 20 54 48    ands[ch]<>NIL TH
015B60:  45 4E 20 0D 0A 09 09 20 20 20 20 57 49 54 48 20    EN ....    WITH 
015B70:  43 6F 6D 6D 61 6E 64 73 5B 63 68 5D 5E 20 44 4F    Commands[ch]^ DO
015B80:  0D 0A 09 09 09 4F 75 74 43 68 28 63 68 29 3B 0D    .....OutCh(ch);.
015B90:  0A 09 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20    ....FOR i:=1 TO 
015BA0:  4C 65 6E 67 74 68 20 44 4F 20 0D 0A 09 09 09 09    Length DO ......
015BB0:  4F 75 74 43 68 28 43 6F 6D 6D 43 68 61 72 73 5B    OutCh(CommChars[
015BC0:  69 5D 29 20 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A    i]) ......END;..
015BD0:  09 09 09 45 4E 44 3B 0D 0A 09 09 20 20 20 20 57    ...END;....    W
015BE0:  72 69 74 65 4C 6E 3B 0D 0A 09 09 20 20 20 20 45    riteLn;....    E
015BF0:  4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 72    ND;....END;...Wr
015C00:  61 63 72 6F 54 65 78 74 3B 0D 0A 50 52 4F 43 45    acroText;..PROCE
015C10:  44 55 52 45 20 4C 65 61 72 6E 4D 61 63 72 6F 3B    DURE LearnMacro;
015C20:  0D 0A 0D 0A 28 2A 09 4C 65 61 72 6E 20 61 20 6D    ....(*.Learn a m
015C30:  61 63 72 6F 20 64 65 66 69 6E 69 74 69 6F 6E 09    acro definition.
015C40:  0D 0A 09 63 61 6C 6C 65 64 20 61 74 20 65 69 74    ...called at eit
015C50:  68 65 72 20 65 6E 64 20 6F 66 20 64 65 66 69 6E    her end of defin
015C60:  69 74 69 6F 6E 2A 29 0D 0A 0D 0A 42 45 47 49 4E    ition*)....BEGIN
015C70:  0D 0A 09 49 46 20 4E 4F 54 20 4C 65 61 72 6E 69    ...IF NOT Learni
015C80:  6E 67 20 54 48 45 4E 0D 0A 09 09 47 65 74 44 65    ng THEN....GetDe
015C90:  66 43 68 61 72 3B 0D 0A 09 09 4C 65 61 72 6E 69    fChar;....Learni
015CA0:  6E 67 3A 3D 54 52 55 45 3B 0D 0A 09 09 4C 65 61    ng:=TRUE;....Lea
015CB0:  72 6E 4C 65 6E 3A 3D 30 3B 0D 0A 09 45 4C 53 45    rnLen:=0;...ELSE
015CC0:  0D 0A 09 09 4C 65 61 72 6E 4C 65 6E 3A 3D 4C 65    ....LearnLen:=Le
015CD0:  61 72 6E 4C 65 6E 2D 32 3B 0D 0A 09 09 44 65 66    arnLen-2;....Def
015CE0:  4D 61 63 72 6F 54 65 78 74 3B 0D 0A 09 09 4C 65    MacroText;....Le
015CF0:  61 72 6E 69 6E 67 3A 3D 46 41 4C 53 45 3B 0D 0A    arning:=FALSE;..
015D00:  09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4C 65 61    ..END;...END Lea
015D10:  72 6E 4D 61 63 72 6F 3B 0D 0A 50 52 4F 43 45 44    rnMacro;..PROCED
015D20:  55 52 45 20 44 65 66 4D 61 63 72 6F 3B 0D 0A 42    URE DefMacro;..B
015D30:  45 47 49 4E 0D 0A 09 47 65 74 44 65 66 43 68 61    EGIN...GetDefCha
015D40:  72 3B 0D 0A 09 49 46 20 28 4C 65 61 72 6E 63 68    r;...IF (Learnch
015D50:  3E 3D 27 41 27 29 20 41 4E 44 20 28 4C 65 61 72    >='A') AND (Lear
015D60:  6E 63 68 3C 3D 27 5A 27 29 20 4F 52 20 28 4C 65    nch<='Z') OR (Le
015D70:  61 72 6E 63 68 3D 45 53 43 29 20 54 48 45 4E 0D    arnch=ESC) THEN.
015D80:  0A 09 09 47 65 74 53 74 72 69 6E 67 28 54 65 78    ...GetString(Tex
015D90:  74 2C 4C 65 61 72 6E 4C 65 6E 2C 27 4D 61 63 72    t,LearnLen,'Macr
015DA0:  6F 3A 27 29 3B 0D 0A 09 09 44 65 66 4D 61 63 72    o:');....DefMacr
015DB0:  6F 54 65 78 74 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    oText;....END;..
015DC0:  09 45 4E 44 20 44 65 66 4D 61 63 72 6F 3B 0D 0A    .END DefMacro;..
015DD0:  50 52 4F 43 45 44 55 52 45 20 4D 61 63 72 6F 28    PROCEDURE Macro(
015DE0:  63 68 3A 43 48 41 52 3B 72 65 70 65 61 74 3A 49    ch:CHAR;repeat:I
015DF0:  4E 54 45 47 45 52 29 3B 0D 0A 56 41 52 09 69 3A    NTEGER);..VAR.i:
015E00:  69 74 65 53 74 72 69 6E 67 28 27 20 45 6E 74 65    iteString(' Ente
015E10:  72 20 61 6E 79 20 63 68 61 72 61 63 74 65 72 20    r any character 
015E20:  74 6F 20 63 6F 6E 74 69 6E 75 65 20 3A 27 29 3B    to continue :');
015E30:  0D 0A 09 57 61 69 74 46 6F 72 43 68 3B 0D 0A 09    ...WaitForCh;...
015E40:  45 4E 44 20 50 72 69 6E 74 4D 61 63 72 6F 73 3B    END PrintMacros;
015E50:  0D 0A 42 45 47 49 4E 0D 0A 09 53 68 6F 77 43 68    ..BEGIN...ShowCh
015E60:  61 6E 67 65 3A 3D 54 52 55 45 3B 0D 0A 09 46 4F    ange:=TRUE;...FO
015E70:  52 20 63 68 3A 3D 27 40 27 20 54 4F 20 27 5A 27    R ch:='@' TO 'Z'
015E80:  20 44 4F 20 43 6F 6D 6D 61 6E 64 73 5B 63 68 5D     DO Commands[ch]
015E90:  3A 3D 4E 49 4C 20 45 4E 44 3B 0D 0A 09 4C 6F 6F    :=NIL END;...Loo
015EA0:  6B 75 70 28 46 2C 27 4D 41 43 52 4F 53 2E 44 41    kup(F,'MACROS.DA
015EB0:  54 20 27 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46    T ',reply);...IF
015EC0:  20 72 65 70 6C 79 3D 30 20 54 48 45 4E 0D 0A 09     reply=0 THEN...
015ED0:  09 4C 6F 61 64 4D 61 63 72 6F 73 3B 0D 0A 09 09    .LoadMacros;....
015EE0:  45 4E 44 3B 0D 0A 09 09 0D 0A 09 45 4E 44 20 4D    END;.......END M
015EF0:  61 63 72 6F 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A    acros...........
015F00:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
015F10:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
015F20:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
015F30:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
015F40:  1A 44 49 53 43 32 20 20 42 41 54 20 00 00 00 00    .DISC2  BAT ....
015F50:  00 00 00 00 00 00 08 82 21 0D E1 0B 3A 01 00 00    ........!...:...
015F60:  4C 44 49 53 43 33 20 20 42 41 54 20 00 00 00 00    LDISC3  BAT ....
015F70:  00 00 00 00 00 00 75 92 21 0D E2 0B 5E 03 00 00    ......u.!...^...
015F80:  5E 2E 75 70 70 65 72 0D 0A 09 09 45 4C 53 49 46    ^.upper....ELSIF
015F90:  20 49 44 3E 4C 49 44 20 54 48 45 4E 20 54 41 42     ID>LID THEN TAB
015FA0:  4C 45 3A 3D 54 41 42 4C 45 5E 2E 6C 6F 77 65 72    LE:=TABLE^.lower
015FB0:  0D 0A 09 09 45 4C 53 45 20 45 58 49 54 20 45 4E    ....ELSE EXIT EN
015FC0:  44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54    D;....END;...RET
015FD0:  55 52 4E 20 54 41 42 4C 45 0D 0A 09 45 4E 44 20    URN TABLE...END 
015FE0:  4C 4F 4F 4B 55 50 3B 0D 0A 50 52 4F 43 45 44 55    LOOKUP;..PROCEDU
015FF0:  52 45 20 52 45 4C 50 4E 54 52 28 46 49 45 4C 44    RE RELPNTR(FIELD
016000:  43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E    CARDINAL;..BEGIN
016010:  0D 0A 09 63 68 3A 3D 43 41 50 28 63 68 29 3B 0D    ...ch:=CAP(ch);.
016020:  0A 09 49 46 20 63 68 3C 27 20 27 20 54 48 45 4E    ..IF ch<' ' THEN
016030:  20 63 68 3A 3D 43 48 52 28 4F 52 44 28 63 68 29     ch:=CHR(ORD(ch)
016040:  2B 36 34 29 20 45 4E 44 3B 0D 0A 09 49 46 20 28    +64) END;...IF (
016050:  63 68 3E 3D 27 40 27 29 20 41 4E 44 20 28 63 68    ch>='@') AND (ch
016060:  3C 3D 27 5A 27 29 20 54 48 45 4E 0D 0A 09 09 41    <='Z') THEN....A
016070:  64 64 4D 61 63 72 6F 28 43 6F 6D 6D 61 6E 64 73    ddMacro(Commands
016080:  5B 63 68 5D 2C 72 65 70 65 61 74 29 3B 0D 0A 09    [ch],repeat);...
016090:  09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4D 61 63 72    .END;...END Macr
0160A0:  6F 3B 0D 0A 56 41 52 09 46 3A 46 49 4C 45 3B 0D    o;..VAR.F:FILE;.
0160B0:  0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B    ..reply:INTEGER;
0160C0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 4C 6F 61 64    ..PROCEDURE Load
0160D0:  4D 61 63 72 6F 73 3B 0D 0A 56 41 52 09 42 6C 6F    Macros;..VAR.Blo
0160E0:  63 6B 3A 41 52 52 41 59 5B 30 2E 2E 42 6C 6F 63    ck:ARRAY[0..Bloc
0160F0:  6B 4C 65 6E 2D 31 5D 20 4F 46 20 43 48 41 52 3B    kLen-1] OF CHAR;
016100:  0D 0A 42 45 47 49 4E 0D 0A 09 4C 4F 4F 50 0D 0A    ..BEGIN...LOOP..
016110:  09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 28 46    ..SeqReadBlock(F
016120:  2C 41 44 52 28 42 6C 6F 63 6B 29 2C 42 6C 6F 63    ,ADR(Block),Bloc
016130:  6B 4C 65 6E 2C 72 65 70 6C 79 29 3B 0D 0A 09 09    kLen,reply);....
016140:  49 46 20 72 65 70 6C 79 3C 3E 42 6C 6F 63 6B 4C    IF reply<>BlockL
016150:  65 6E 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44    en THEN EXIT END
016160:  3B 0D 0A 09 09 72 65 70 6C 79 3A 3D 30 3B 0D 0A    ;....reply:=0;..
016170:  09 09 57 48 49 4C 45 20 42 6C 6F 63 6B 5B 72 65    ..WHILE Block[re
016180:  70 6C 79 5D 3C 3E 30 78 20 44 4F 0D 0A 09 09 09    ply]<>0x DO.....
016190:  4C 65 61 72 6E 4C 65 6E 3A 3D 4F 52 44 28 42 6C    LearnLen:=ORD(Bl
0161A0:  6F 63 6B 5B 72 65 70 6C 79 5D 29 3B 0D 0A 09 09    ock[reply]);....
0161B0:  09 4C 65 61 72 6E 63 68 3A 3D 42 6C 6F 63 6B 5B    .Learnch:=Block[
0161C0:  72 65 70 6C 79 2B 31 5D 3B 0D 0A 09 09 09 72 65    reply+1];.....re
0161D0:  70 6C 79 3A 3D 72 65 70 6C 79 2B 32 3B 0D 0A 09    ply:=reply+2;...
0161E0:  09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 4C 65    ..FOR i:=1 TO Le
0161F0:  61 72 6E 4C 65 6E 20 44 4F 0D 0A 09 09 09 09 54    arnLen DO......T
016200:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016210:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016220:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016230:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016240:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016250:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016260:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016270:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016280:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016290:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0162A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0162B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0162C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0162D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0162E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0162F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0163A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0163B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0163C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0163D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0163E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0163F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016400:  65 78 74 5B 69 5D 3A 3D 42 6C 6F 63 6B 5B 72 65    ext[i]:=Block[re
016410:  70 6C 79 5D 3B 0D 0A 09 09 09 09 49 4E 43 28 72    ply];......INC(r
016420:  65 70 6C 79 29 3B 0D 0A 09 09 09 09 45 4E 44 3B    eply);......END;
016430:  0D 0A 09 09 09 44 65 66 4D 61 63 72 6F 54 65 78    .....DefMacroTex
016440:  74 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45    t;.....END;....E
016450:  4E 44 3B 0D 0A 09 45 4E 44 20 4C 6F 61 64 4D 61    ND;...END LoadMa
016460:  63 72 6F 73 3B 09 09 09 0D 0A 50 52 4F 43 45 44    cros;.....PROCED
016470:  55 52 45 20 53 74 6F 72 65 4D 61 63 72 6F 73 3B    URE StoreMacros;
016480:  0D 0A 56 41 52 09 42 6C 6F 63 6B 3A 41 52 52 41    ..VAR.Block:ARRA
016490:  59 5B 30 2E 2E 42 6C 6F 63 6B 4C 65 6E 2D 31 5D    Y[0..BlockLen-1]
0164A0:  20 4F 46 20 43 48 41 52 3B 0D 0A 0D 0A 50 52 4F     OF CHAR;....PRO
0164B0:  43 45 44 55 52 45 20 53 74 6F 72 65 4F 6E 65 4D    CEDURE StoreOneM
0164C0:  61 63 72 6F 28 70 3A 50 4B 65 79 44 65 66 29 3B    acro(p:PKeyDef);
0164D0:  0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 70 3C 3E    ..BEGIN...IF p<>
0164E0:  4E 49 4C 20 54 48 45 4E 0D 0A 09 09 57 49 54 48    NIL THEN....WITH
0164F0:  20 70 5E 20 44 4F 0D 0A 09 09 09 49 46 20 28 72     p^ DO.....IF (r
016500:  65 70 6C 79 2B 4C 65 6E 67 74 68 2B 31 34 29 3E    eply+Length+14)>
016510:  3D 42 6C 6F 63 6B 4C 65 6E 20 54 48 45 4E 0D 0A    =BlockLen THEN..
016520:  09 09 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D    ....Block[reply]
016530:  3A 3D 30 78 3B 0D 0A 09 09 09 09 53 65 71 57 72    :=0x;......SeqWr
016540:  69 74 65 42 6C 6F 63 6B 28 46 2C 41 44 52 28 42    iteBlock(F,ADR(B
016550:  6C 6F 63 6B 29 2C 42 6C 6F 63 6B 4C 65 6E 2C 72    lock),BlockLen,r
016560:  65 70 6C 79 29 3B 0D 0A 09 09 09 09 72 65 70 6C    eply);......repl
016570:  79 3A 3D 30 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D    y:=0;......END;.
016580:  0A 09 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D    ....Block[reply]
016590:  3A 3D 43 48 52 28 4C 65 6E 67 74 68 29 3B 0D 0A    :=CHR(Length);..
0165A0:  09 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 2B 31    ...Block[reply+1
0165B0:  5D 3A 3D 4C 65 61 72 6E 63 68 3B 0D 0A 09 09 09    ]:=Learnch;.....
0165C0:  72 65 70 6C 79 3A 3D 72 65 70 6C 79 2B 32 3B 0D    reply:=reply+2;.
0165D0:  0A 09 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20    ....FOR i:=1 TO 
0165E0:  4C 65 6E 67 74 68 20 44 4F 0D 0A 09 09 09 09 42    Length DO......B
0165F0:  6C 6F 63 6B 5B 72 65 70 6C 79 5D 3A 3D 43 6F 6D    lock[reply]:=Com
016600:  4D 4F 44 55 4C 45 20 4D 79 4C 55 3B 0D 0A 0D 0A    MODULE MyLU;....
016610:  28 2A 09 44 61 76 65 20 4D 6F 6F 72 65 27 73 20    (*.Dave Moore's 
016620:  6F 77 6E 20 76 65 72 73 69 6F 6E 20 6F 66 20 4C    own version of L
016630:  55 20 66 6F 72 20 75 73 65 20 77 69 74 68 20 68    U for use with h
016640:  69 73 20 4D 6F 64 75 6C 61 2D 32 0D 0A 09 63 6F    is Modula-2...co
016650:  6D 70 69 6C 65 72 20 2A 29 0D 0A 0D 0A 46 52 4F    mpiler *)....FRO
016660:  4D 09 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52    M.Terminal IMPOR
016670:  54 20 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72    T WriteString,Wr
016680:  69 74 65 4C 6E 2C 52 65 61 64 53 74 72 69 6E 67    iteLn,ReadString
016690:  2C 57 72 69 74 65 3B 20 0D 0A 46 52 4F 4D 09 46    ,Write; ..FROM.F
0166A0:  69 6C 65 73 20 09 49 4D 50 4F 52 54 20 46 49 4C    iles .IMPORT FIL
0166B0:  45 2C 52 65 61 64 42 6C 6F 63 6B 2C 57 72 69 74    E,ReadBlock,Writ
0166C0:  65 42 6C 6F 63 6B 2C 4C 6F 6F 6B 75 70 2C 43 72    eBlock,Lookup,Cr
0166D0:  65 61 74 65 2C 46 69 6C 65 4E 61 6D 65 2C 0D 0A    eate,FileName,..
0166E0:  09 09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 2C    ...SeqReadBlock,
0166F0:  53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 43 6F    SeqWriteBlock,Co
016700:  6E 76 65 72 74 46 69 6C 65 4E 61 6D 65 2C 43 6C    nvertFileName,Cl
016710:  6F 73 65 2C 0D 0A 09 09 09 4D 61 6B 65 42 41 4B    ose,.....MakeBAK
016720:  2C 53 65 74 42 6C 6F 63 6B 2C 44 65 76 69 63 65    ,SetBlock,Device
016730:  74 79 70 65 3B 0D 0A 46 52 4F 4D 09 53 6D 61 6C    type;..FROM.Smal
016740:  6C 49 4F 20 49 4D 50 4F 52 54 20 52 65 61 64 43    lIO IMPORT ReadC
016750:  61 72 64 2C 57 72 69 74 65 43 61 72 64 2C 57 72    ard,WriteCard,Wr
016760:  69 74 65 48 65 78 3B 0D 0A 46 52 4F 4D 09 53 59    iteHex;..FROM.SY
016770:  53 54 45 4D 20 20 49 4D 50 4F 52 54 20 42 59 54    STEM  IMPORT BYT
016780:  45 2C 41 44 52 2C 54 53 49 5A 45 3B 0D 0A 46 52    E,ADR,TSIZE;..FR
016790:  4F 4D 09 43 50 4D 09 49 4D 50 4F 52 54 20 66 63    OM.CPM.IMPORT fc
0167A0:  62 2C 61 6C 66 61 2C 65 78 74 65 6E 2C 6F 70 6E    b,alfa,exten,opn
0167B0:  66 63 2C 42 44 4F 53 3B 0D 0A 46 52 4F 4D 09 53    fc,BDOS;..FROM.S
0167C0:  74 72 69 6E 67 73 20 49 4D 50 4F 52 54 20 4C 65    trings IMPORT Le
0167D0:  6E 67 74 68 3B 0D 0A 46 52 4F 4D 09 53 74 6F 72    ngth;..FROM.Stor
0167E0:  61 67 65 20 49 4D 50 4F 52 54 20 41 4C 4C 4F 43    age IMPORT ALLOC
0167F0:  41 54 45 3B 0D 0A 54 59 50 45 0D 0A 09 49 6E 64    ATE;..TYPE...Ind
016800:  6D 43 68 61 72 73 5B 69 5D 3B 0D 0A 09 09 09 09    mChars[i];......
016810:  49 4E 43 28 72 65 70 6C 79 29 3B 0D 0A 09 09 09    INC(reply);.....
016820:  09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 28 2A    .END;.....END;(*
016830:  57 49 54 48 20 70 5E 2A 29 0D 0A 09 09 45 4E 44    WITH p^*)....END
016840:  20 28 2A 49 46 20 3C 3E 4E 49 4C 2A 29 0D 0A 09     (*IF <>NIL*)...
016850:  45 4E 44 20 53 74 6F 72 65 4F 6E 65 4D 61 63 72    END StoreOneMacr
016860:  6F 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4C 65 61 72    o;..BEGIN...Lear
016870:  6E 63 68 3A 3D 27 41 27 3B 0D 0A 09 57 48 49 4C    nch:='A';...WHIL
016880:  45 20 28 43 6F 6D 6D 61 6E 64 73 5B 4C 65 61 72    E (Commands[Lear
016890:  6E 63 68 5D 3D 4E 49 4C 29 20 41 4E 44 20 28 4C    nch]=NIL) AND (L
0168A0:  65 61 72 6E 63 68 3C 3D 27 5A 27 29 20 44 4F 20    earnch<='Z') DO 
0168B0:  0D 0A 09 09 4C 65 61 72 6E 63 68 3A 3D 43 48 52    ....Learnch:=CHR
0168C0:  28 4F 52 44 28 4C 65 61 72 6E 63 68 29 2B 31 29    (ORD(Learnch)+1)
0168D0:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 4C    ;....END;...IF L
0168E0:  65 61 72 6E 63 68 3E 27 5A 27 20 54 48 45 4E 20    earnch>'Z' THEN 
0168F0:  52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 43 72    RETURN END;...Cr
016900:  65 61 74 65 28 46 2C 27 4D 41 43 52 4F 53 2E 44    eate(F,'MACROS.D
016910:  41 54 20 27 2C 72 65 70 6C 79 29 3B 0D 0A 09 49    AT ',reply);...I
016920:  46 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D    F reply<>0 THEN.
016930:  0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27    ...WriteString('
016940:  20 63 6F 75 6C 64 20 6E 6F 74 20 73 61 76 65 20     could not save 
016950:  6D 61 63 72 6F 73 20 66 69 6C 65 27 29 3B 0D 0A    macros file');..
016960:  09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 52 45    ..WriteLn;....RE
016970:  54 55 52 4E 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49    TURN....END;...I
016980:  46 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 20    F reply<>0 THEN 
016990:  52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 72 65    RETURN END;...re
0169A0:  70 6C 79 3A 3D 30 3B 0D 0A 09 46 4F 52 20 4C 65    ply:=0;...FOR Le
0169B0:  61 72 6E 63 68 3A 3D 27 41 27 20 54 4F 20 27 5A    arnch:='A' TO 'Z
0169C0:  27 20 44 4F 20 53 74 6F 72 65 4F 6E 65 4D 61 63    ' DO StoreOneMac
0169D0:  72 6F 28 43 6F 6D 6D 61 6E 64 73 5B 4C 65 61 72    ro(Commands[Lear
0169E0:  6E 63 68 5D 29 20 45 4E 44 3B 0D 0A 0D 0A 09 28    nch]) END;.....(
0169F0:  2A 4E 6F 77 20 6F 75 74 70 75 74 20 6B 65 79 20    *Now output key 
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 41 02 00 00 00 02    ......R...A.....
016A20:  13 00 46 02 00 00 00 02 13 00 42 02 00 00 00 02    ..F.......B.....
016A30:  13 00 47 02 00 00 00 02 13 00 43 02 00 00 00 02    ..G.......C.....
016A40:  13 00 48 02 00 00 00 02 13 00 44 02 00 00 00 02    ..H.......D.....
016A50:  13 00 49 02 00 00 00 02 13 00 45 02 00 00 00 02    ..I.......E.....
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:  65 78 52 65 63 6F 72 64 3D 52 45 43 4F 52 44 0D    exRecord=RECORD.
016B10:  0A 09 09 53 74 61 74 75 73 3A 42 59 54 45 3B 0D    ...Status:BYTE;.
016B20:  0A 09 09 42 61 73 65 4E 61 6D 65 3A 61 6C 66 61    ...BaseName:alfa
016B30:  3B 0D 0A 09 09 45 78 74 3A 65 78 74 65 6E 3B 0D    ;....Ext:exten;.
016B40:  0A 09 09 53 74 61 72 74 53 65 63 74 6F 72 3A 43    ...StartSector:C
016B50:  41 52 44 49 4E 41 4C 3B 0D 0A 09 09 4C 65 6E 67    ARDINAL;....Leng
016B60:  74 68 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09    th:CARDINAL;....
016B70:  44 61 74 65 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    Date:CARDINAL;..
016B80:  09 09 54 69 6D 65 3A 43 41 52 44 49 4E 41 4C 3B    ..Time:CARDINAL;
016B90:  0D 0A 09 09 53 63 72 75 6E 63 68 65 64 3A 42 4F    ....Scrunched:BO
016BA0:  4F 4C 45 41 4E 3B 0D 0A 09 09 46 69 6C 6C 65 72    OLEAN;....Filler
016BB0:  20 3A 41 52 52 41 59 20 5B 31 2E 2E 31 31 5D 20     :ARRAY [1..11] 
016BC0:  4F 46 20 42 59 54 45 3B 0D 0A 09 09 45 4E 44 3B    OF BYTE;....END;
016BD0:  0D 0A 09 49 6E 64 65 78 3D 41 52 52 41 59 5B 31    ...Index=ARRAY[1
016BE0:  2E 2E 31 32 38 5D 20 4F 46 20 49 6E 64 65 78 52    ..128] OF IndexR
016BF0:  65 63 6F 72 64 3B 0D 0A 56 41 52 09 4C 69 62 3A    ecord;..VAR.Lib:
016C00:  46 49 4C 45 3B 0D 0A 09 4C 69 62 4E 61 6D 65 3A    FILE;...LibName:
016C10:  46 69 6C 65 4E 61 6D 65 3B 0D 0A 09 72 65 70 6C    FileName;...repl
016C20:  79 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 44 69 72    y:INTEGER;...Dir
016C30:  65 63 74 6F 72 79 3A 49 6E 64 65 78 3B 0D 0A 09    ectory:Index;...
016C40:  53 6C 6F 74 73 3A 43 41 52 44 49 4E 41 4C 3B 0D    Slots:CARDINAL;.
016C50:  0A 09 4E 65 78 74 53 65 63 74 6F 72 3A 43 41 52    ..NextSector:CAR
016C60:  44 49 4E 41 4C 3B 0D 0A 09 69 2C 6A 3A 43 41 52    DINAL;...i,j:CAR
016C70:  44 49 4E 41 4C 3B 0D 0A 09 43 6F 6D 6D 61 6E 64    DINAL;...Command
016C80:  43 48 3A 43 48 41 52 3B 0D 0A 09 46 4E 61 6D 65    CH:CHAR;...FName
016C90:  3A 46 69 6C 65 4E 61 6D 65 3B 0D 0A 50 52 4F 43    :FileName;..PROC
016CA0:  45 44 55 52 45 20 52 65 61 64 43 6F 6D 6D 61 6E    EDURE ReadComman
016CB0:  64 3B 0D 0A 28 2A 09 72 65 61 64 20 61 6E 20 69    d;..(*.read an i
016CC0:  6E 70 75 74 20 63 6F 6D 6D 61 6E 64 2C 20 72 65    nput command, re
016CD0:  74 75 72 6E 20 63 6F 6D 6D 61 6E 64 20 6C 65 74    turn command let
016CE0:  74 65 72 20 69 6E 20 43 6F 6D 6D 61 6E 64 43 48    ter in CommandCH
016CF0:  0D 0A 09 72 65 74 75 72 6E 20 66 69 6C 65 20 6E    ...return file n
016D00:  2C 4F 75 74 50 6F 73 3A 43 41 52 44 49 4E 41 4C    ,OutPos:CARDINAL
016D10:  3B 0D 0A 09 63 68 3A 43 48 41 52 3B 0D 0A 09 45    ;...ch:CHAR;...E
016D20:  6F 66 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 50 52 4F    of:BOOLEAN;..PRO
016D30:  43 45 44 55 52 45 20 45 6E 74 65 72 49 64 28 73    CEDURE EnterId(s
016D40:  3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 29 3B    :ARRAY OF CHAR);
016D50:  0D 0A 56 41 52 09 72 3A 50 4E 61 6D 65 3B 0D 0A    ..VAR.r:PName;..
016D60:  09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    .i,j:CARDINAL;..
016D70:  42 45 47 49 4E 0D 0A 09 6A 3A 3D 4C 65 6E 67 74    BEGIN...j:=Lengt
016D80:  68 28 73 29 3B 0D 0A 09 41 4C 4C 4F 43 41 54 45    h(s);...ALLOCATE
016D90:  28 72 2C 6A 2B 54 53 49 5A 45 28 43 41 52 44 49    (r,j+TSIZE(CARDI
016DA0:  4E 41 4C 29 2B 54 53 49 5A 45 28 50 4E 61 6D 65    NAL)+TSIZE(PName
016DB0:  29 2B 31 29 3B 0D 0A 09 0D 0A 09 72 5E 2E 43 6F    )+1);......r^.Co
016DC0:  64 65 3A 3D 43 6F 64 65 3B 0D 0A 09 57 49 54 48    de:=Code;...WITH
016DD0:  20 72 5E 20 44 4F 0D 0A 09 09 4E 65 78 74 3A 3D     r^ DO....Next:=
016DE0:  54 61 62 6C 65 3B 0D 0A 09 09 54 61 62 6C 65 3A    Table;....Table:
016DF0:  3D 72 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 30 20    =r;....FOR i:=0 
016E00:  54 4F 20 6A 2D 31 20 44 4F 20 54 65 78 74 5B 69    TO j-1 DO Text[i
016E10:  5D 3A 3D 73 5B 69 5D 20 45 4E 44 3B 0D 0A 09 09    ]:=s[i] END;....
016E20:  54 65 78 74 5B 6A 5D 3A 3D 30 78 3B 0D 0A 09 09    Text[j]:=0x;....
016E30:  45 4E 44 3B 0D 0A 09 45 4E 44 20 45 6E 74 65 72    END;...END Enter
016E40:  49 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45    Id;..PROCEDURE E
016E50:  6E 74 65 72 47 49 64 28 4C 65 6E 3A 43 41 52 44    nterGId(Len:CARD
016E60:  49 4E 41 4C 3B 73 3A 41 52 52 41 59 20 4F 46 20    INAL;s:ARRAY OF 
016E70:  43 48 41 52 29 3B 0D 0A 56 41 52 20 09 69 2C 6A    CHAR);..VAR .i,j
016E80:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 69 64 3A    :CARDINAL;...id:
016E90:  49 64 65 6E 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09    Ident;..BEGIN...
016EA0:  69 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 28 69    i:=0;...WHILE (i
016EB0:  3C 48 49 47 48 28 73 29 29 20 44 4F 0D 0A 09 09    <HIGH(s)) DO....
016EC0:  46 4F 52 20 6A 3A 3D 69 20 54 4F 20 69 2B 4C 65    FOR j:=i TO i+Le
016ED0:  6E 2D 31 20 44 4F 0D 0A 09 09 09 69 64 5B 6A 2D    n-1 DO.....id[j-
016EE0:  69 5D 3A 3D 73 5B 6A 5D 0D 0A 09 09 09 45 4E 44    i]:=s[j].....END
016EF0:  3B 0D 0A 09 09 69 64 5B 4C 65 6E 5D 3A 3D 30 78    ;....id[Len]:=0x
016F00:  61 6D 65 20 69 6E 20 46 4E 61 6D 65 2A 29 0D 0A    ame in FName*)..
016F10:  56 41 52 09 54 65 78 74 3A 41 52 52 41 59 5B 31    VAR.Text:ARRAY[1
016F20:  2E 2E 32 30 5D 20 4F 46 20 43 48 41 52 3B 0D 0A    ..20] OF CHAR;..
016F30:  09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    .i,j:CARDINAL;..
016F40:  42 45 47 49 4E 0D 0A 09 57 72 69 74 65 53 74 72    BEGIN...WriteStr
016F50:  69 6E 67 28 27 43 6F 6D 6D 61 6E 64 3A 27 29 3B    ing('Command:');
016F60:  0D 0A 09 52 65 61 64 53 74 72 69 6E 67 28 54 65    ...ReadString(Te
016F70:  78 74 29 3B 0D 0A 09 43 6F 6D 6D 61 6E 64 43 48    xt);...CommandCH
016F80:  3A 3D 43 41 50 28 54 65 78 74 5B 31 5D 29 3B 0D    :=CAP(Text[1]);.
016F90:  0A 09 69 3A 3D 32 3B 0D 0A 09 57 48 49 4C 45 20    ..i:=2;...WHILE 
016FA0:  28 69 3C 3D 48 49 47 48 28 54 65 78 74 29 29 20    (i<=HIGH(Text)) 
016FB0:  41 4E 44 20 28 54 65 78 74 5B 69 5D 3D 27 20 27    AND (Text[i]=' '
016FC0:  29 20 44 4F 0D 0A 09 09 49 4E 43 28 69 29 20 0D    ) DO....INC(i) .
016FD0:  0A 09 09 45 4E 44 3B 0D 0A 09 6A 3A 3D 30 3B 0D    ...END;...j:=0;.
016FE0:  0A 09 57 48 49 4C 45 20 28 6A 3C 3D 48 49 47 48    ..WHILE (j<=HIGH
016FF0:  28 46 4E 61 6D 65 29 29 20 41 4E 44 20 28 69 3C    (FName)) AND (i<
017000:  3D 48 49 47 48 28 54 65 78 74 29 29 20 41 4E 44    =HIGH(Text)) AND
017010:  20 28 54 65 78 74 5B 69 5D 3C 3E 30 63 29 20 44     (Text[i]<>0c) D
017020:  4F 0D 0A 09 09 46 4E 61 6D 65 5B 6A 5D 3A 3D 43    O....FName[j]:=C
017030:  41 50 28 54 65 78 74 5B 69 5D 29 3B 0D 0A 09 09    AP(Text[i]);....
017040:  49 4E 43 28 6A 29 3B 0D 0A 09 09 49 4E 43 28 69    INC(j);....INC(i
017050:  29 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 48 49 4C    )....END;...WHIL
017060:  45 20 6A 3C 3D 48 49 47 48 28 46 4E 61 6D 65 29    E j<=HIGH(FName)
017070:  20 44 4F 0D 0A 09 09 46 4E 61 6D 65 5B 6A 5D 3A     DO....FName[j]:
017080:  3D 27 20 27 3B 0D 0A 09 09 49 4E 43 28 6A 29 0D    =' ';....INC(j).
017090:  0A 09 09 45 4E 44 0D 0A 09 45 4E 44 20 52 65 61    ...END...END Rea
0170A0:  64 43 6F 6D 6D 61 6E 64 3B 20 20 0D 0A 50 52 4F    dCommand;  ..PRO
0170B0:  43 45 44 55 52 45 20 41 64 64 45 6E 74 72 79 28    CEDURE AddEntry(
0170C0:  4E 61 6D 65 3A 66 63 62 3B 50 6F 73 69 74 69 6F    Name:fcb;Positio
0170D0:  6E 2C 53 69 7A 65 2C 45 44 61 74 65 2C 45 54 69    n,Size,EDate,ETi
0170E0:  6D 65 3A 43 41 52 44 49 4E 41 4C 3B 53 63 3A 42    me:CARDINAL;Sc:B
0170F0:  4F 4F 4C 45 41 4E 29 3B 0D 0A 56 41 52 09 69 2C    OOLEAN);..VAR.i,
017100:  3B 0D 0A 09 09 45 6E 74 65 72 49 64 28 69 64 29    ;....EnterId(id)
017110:  3B 0D 0A 09 09 49 4E 43 28 43 6F 64 65 29 3B 0D    ;....INC(Code);.
017120:  0A 09 09 69 3A 3D 69 2B 4C 65 6E 3B 0D 0A 09 09    ...i:=i+Len;....
017130:  45 4E 44 3B 0D 0A 09 45 4E 44 20 45 6E 74 65 72    END;...END Enter
017140:  47 49 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    GId;..PROCEDURE 
017150:  53 65 74 55 70 4E 61 6D 65 73 3B 0D 0A 56 41 52    SetUpNames;..VAR
017160:  09 73 3A 49 64 65 6E 74 3B 0D 0A 50 52 4F 43 45    .s:Ident;..PROCE
017170:  44 55 52 45 20 50 75 74 49 64 3B 0D 0A 42 45 47    DURE PutId;..BEG
017180:  49 4E 0D 0A 09 73 5B 69 5D 3A 3D 30 78 3B 0D 0A    IN...s[i]:=0x;..
017190:  09 45 6E 74 65 72 49 64 28 73 29 3B 0D 0A 09 49    .EnterId(s);...I
0171A0:  4E 43 28 43 6F 64 65 29 3B 0D 0A 09 45 4E 44 20    NC(Code);...END 
0171B0:  50 75 74 49 64 3B 0D 0A 42 45 47 49 4E 0D 0A 09    PutId;..BEGIN...
0171C0:  43 6F 64 65 3A 3D 31 32 38 3B 0D 0A 09 45 6E 74    Code:=128;...Ent
0171D0:  65 72 47 49 64 28 32 2C 27 42 59 44 4F 49 46 49    erGId(2,'BYDOIFI
0171E0:  4E 4F 46 4F 52 54 4F 27 29 3B 0D 0A 09 45 6E 74    NOFORTO');...Ent
0171F0:  65 72 47 49 64 28 33 2C 27 41 4E 44 44 49 56 45    erGId(3,'ANDDIVE
017200:  4E 44 46 4F 52 4D 4F 44 4E 4F 54 53 45 54 56 41    NDFORMODNOTSETVA
017210:  52 41 44 52 27 29 3B 0D 0A 09 45 6E 74 65 72 47    RADR');...EnterG
017220:  49 64 28 34 2C 27 43 41 53 45 45 4C 53 45 45 58    Id(4,'CASEELSEEX
017230:  49 54 46 52 4F 4D 4C 4F 4F 50 54 48 45 4E 54 59    ITFROMLOOPTHENTY
017240:  50 45 57 49 54 48 48 49 47 48 43 48 41 52 54 52    PEWITHHIGHCHARTR
017250:  55 45 27 29 3B 0D 0A 09 45 6E 74 65 72 47 49 64    UE');...EnterGId
017260:  28 35 2C 27 41 52 52 41 59 42 45 47 49 4E 43 4F    (5,'ARRAYBEGINCO
017270:  4E 53 54 45 4C 53 49 46 55 4E 54 49 4C 57 48 49    NSTELSIFUNTILWHI
017280:  4C 45 46 41 4C 53 45 27 29 3B 0D 0A 09 45 6E 74    LEFALSE');...Ent
017290:  65 72 47 49 64 28 36 2C 27 45 58 50 4F 52 54 49    erGId(6,'EXPORTI
0172A0:  4D 50 4F 52 54 4D 4F 44 55 4C 45 52 45 43 4F 52    MPORTMODULERECOR
0172B0:  44 52 45 50 45 41 54 52 45 54 55 52 4E 27 29 3B    DREPEATRETURN');
0172C0:  0D 0A 09 45 6E 74 65 72 47 49 64 28 37 2C 27 50    ...EnterGId(7,'P
0172D0:  4F 49 4E 54 45 52 57 72 69 74 65 4C 6E 49 4E 54    OINTERWriteLnINT
0172E0:  45 47 45 52 41 44 44 52 45 53 53 42 4F 4F 4C 45    EGERADDRESSBOOLE
0172F0:  41 4E 27 29 3B 0D 0A 09 45 6E 74 65 72 47 49 64    AN');...EnterGId
017300:  6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47    j:CARDINAL;..BEG
017310:  49 4E 0D 0A 09 69 3A 3D 32 3B 0D 0A 09 57 48 49    IN...i:=2;...WHI
017320:  4C 45 20 28 69 3C 3D 53 6C 6F 74 73 29 20 41 4E    LE (i<=Slots) AN
017330:  44 20 28 44 69 72 65 63 74 6F 72 79 5B 69 5D 2E    D (Directory[i].
017340:  53 74 61 74 75 73 3C 3E 30 66 66 68 29 20 44 4F    Status<>0ffh) DO
017350:  20 49 4E 43 28 69 29 20 45 4E 44 3B 0D 0A 09 49     INC(i) END;...I
017360:  46 20 69 3E 53 6C 6F 74 73 20 54 48 45 4E 0D 0A    F i>Slots THEN..
017370:  09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20    ..WriteString(' 
017380:  44 69 72 65 63 74 6F 72 79 20 66 75 6C 6C 20 2D    Directory full -
017390:  20 72 65 64 6F 20 77 69 74 68 20 6D 6F 72 65 20     redo with more 
0173A0:  73 6C 6F 74 73 27 29 3B 0D 0A 09 09 57 72 69 74    slots');....Writ
0173B0:  65 4C 6E 3B 0D 0A 09 09 48 41 4C 54 3B 0D 0A 09    eLn;....HALT;...
0173C0:  09 45 4E 44 3B 0D 0A 09 57 49 54 48 20 44 69 72    .END;...WITH Dir
0173D0:  65 63 74 6F 72 79 5B 69 5D 20 44 4F 0D 0A 09 09    ectory[i] DO....
0173E0:  53 74 61 74 75 73 3A 3D 30 3B 0D 0A 09 09 42 61    Status:=0;....Ba
0173F0:  73 65 4E 61 6D 65 3A 3D 4E 61 6D 65 2E 66 63 62    seName:=Name.fcb
017400:  66 6E 3B 0D 0A 09 09 45 78 74 3A 3D 4E 61 6D 65    fn;....Ext:=Name
017410:  2E 66 63 62 66 74 3B 0D 0A 09 09 53 74 61 72 74    .fcbft;....Start
017420:  53 65 63 74 6F 72 3A 3D 50 6F 73 69 74 69 6F 6E    Sector:=Position
017430:  3B 0D 0A 09 09 4C 65 6E 67 74 68 3A 3D 53 69 7A    ;....Length:=Siz
017440:  65 3B 0D 0A 09 09 44 61 74 65 3A 3D 45 44 61 74    e;....Date:=EDat
017450:  65 3B 0D 0A 09 09 54 69 6D 65 3A 3D 45 54 69 6D    e;....Time:=ETim
017460:  65 3B 0D 0A 09 09 53 63 72 75 6E 63 68 65 64 3A    e;....Scrunched:
017470:  3D 53 63 3B 0D 0A 09 09 46 4F 52 20 6A 3A 3D 31    =Sc;....FOR j:=1
017480:  20 54 4F 20 48 49 47 48 28 46 69 6C 6C 65 72 29     TO HIGH(Filler)
017490:  20 44 4F 20 46 69 6C 6C 65 72 5B 6A 5D 3A 3D 30     DO Filler[j]:=0
0174A0:  20 45 4E 44 3B 0D 0A 09 09 45 4E 44 0D 0A 09 45     END;....END...E
0174B0:  4E 44 20 41 64 64 45 6E 74 72 79 3B 0D 0A 50 52    ND AddEntry;..PR
0174C0:  4F 43 45 44 55 52 45 20 46 69 6E 64 4E 61 6D 65    OCEDURE FindName
0174D0:  28 66 3A 66 63 62 29 3A 43 41 52 44 49 4E 41 4C    (f:fcb):CARDINAL
0174E0:  3B 0D 0A 28 2A 09 66 69 6E 64 20 61 20 6E 61 6D    ;..(*.find a nam
0174F0:  65 20 2D 20 72 65 74 75 72 6E 20 30 20 69 66 20    e - return 0 if 
017500:  28 38 2C 27 43 41 52 44 49 4E 41 4C 54 65 72 6D    (8,'CARDINALTerm
017510:  69 6E 61 6C 27 29 3B 0D 0A 09 45 6E 74 65 72 47    inal');...EnterG
017520:  49 64 28 39 2C 27 50 52 4F 43 45 44 55 52 45 51    Id(9,'PROCEDUREQ
017530:  55 41 4C 49 46 49 45 44 43 6F 70 79 72 69 67 68    UALIFIEDCopyrigh
017540:  74 27 29 3B 0D 0A 09 45 6E 74 65 72 49 64 28 27    t');...EnterId('
017550:  44 45 46 49 4E 49 54 49 4F 4E 27 29 3B 49 4E 43    DEFINITION');INC
017560:  28 43 6F 64 65 29 3B 0D 0A 09 45 6E 74 65 72 49    (Code);...EnterI
017570:  64 28 27 57 72 69 74 65 53 74 72 69 6E 67 27 29    d('WriteString')
017580:  3B 49 4E 43 28 43 6F 64 65 29 3B 0D 0A 09 28 2A    ;INC(Code);...(*
017590:  09 45 6E 74 65 72 20 74 61 62 20 63 6F 64 65 73    .Enter tab codes
0175A0:  2A 29 0D 0A 09 46 4F 52 20 69 3A 3D 31 20 54 4F    *)...FOR i:=1 TO
0175B0:  20 36 20 44 4F 0D 0A 09 09 73 5B 69 2D 31 5D 3A     6 DO....s[i-1]:
0175C0:  3D 30 39 78 3B 0D 0A 09 09 50 75 74 49 64 3B 0D    =09x;....PutId;.
0175D0:  0A 09 09 45 4E 44 3B 0D 0A 09 28 2A 09 65 6E 74    ...END;...(*.ent
0175E0:  65 72 20 73 70 61 63 65 20 73 65 71 75 65 6E 63    er space sequenc
0175F0:  65 73 2A 29 0D 0A 09 73 5B 30 5D 3A 3D 27 20 27    es*)...s[0]:=' '
017600:  3B 0D 0A 09 46 4F 52 20 69 3A 3D 32 20 54 4F 20    ;...FOR i:=2 TO 
017610:  36 20 44 4F 0D 0A 09 09 73 5B 69 2D 31 5D 3A 3D    6 DO....s[i-1]:=
017620:  27 20 27 3B 0D 0A 09 09 50 75 74 49 64 3B 0D 0A    ' ';....PutId;..
017630:  09 09 45 4E 44 3B 0D 0A 09 28 2A 09 45 6E 74 65    ..END;...(*.Ente
017640:  72 20 43 52 2F 4C 46 20 63 6F 64 65 2A 29 0D 0A    r CR/LF code*)..
017650:  09 73 5B 30 5D 3A 3D 30 64 78 3B 0D 0A 09 73 5B    .s[0]:=0dx;...s[
017660:  31 5D 3A 3D 30 61 78 3B 0D 0A 09 69 3A 3D 32 3B    1]:=0ax;...i:=2;
017670:  0D 0A 09 50 75 74 49 64 3B 0D 0A 09 46 4F 52 20    ...PutId;...FOR 
017680:  69 3A 3D 33 20 54 4F 20 36 20 44 4F 0D 0A 09 09    i:=3 TO 6 DO....
017690:  73 5B 69 2D 31 5D 3A 3D 30 39 78 3B 0D 0A 09 09    s[i-1]:=09x;....
0176A0:  50 75 74 49 64 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    PutId;....END;..
0176B0:  0D 0A 09 45 4E 44 20 53 65 74 55 70 4E 61 6D 65    ...END SetUpName
0176C0:  73 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65    s;..PROCEDURE Ge
0176D0:  74 43 68 61 72 3B 0D 0A 56 41 52 09 72 65 70 6C    tChar;..VAR.repl
0176E0:  79 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49    y:INTEGER;..BEGI
0176F0:  4E 0D 0A 09 49 46 20 49 6E 50 6F 73 3E 48 49 47    N...IF InPos>HIG
017700:  6E 6F 74 20 66 6F 75 6E 64 20 2A 29 0D 0A 56 41    not found *)..VA
017710:  52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42    R.i:CARDINAL;..B
017720:  45 47 49 4E 0D 0A 09 69 3A 3D 32 3B 0D 0A 09 4C    EGIN...i:=2;...L
017730:  4F 4F 50 0D 0A 09 09 49 46 20 69 3E 53 6C 6F 74    OOP....IF i>Slot
017740:  73 20 54 48 45 4E 20 52 45 54 55 52 4E 20 30 20    s THEN RETURN 0 
017750:  45 4E 44 3B 0D 0A 09 09 57 49 54 48 20 44 69 72    END;....WITH Dir
017760:  65 63 74 6F 72 79 5B 69 5D 20 44 4F 0D 0A 09 09    ectory[i] DO....
017770:  09 49 46 20 28 53 74 61 74 75 73 3D 30 29 20 41    .IF (Status=0) A
017780:  4E 44 20 28 42 61 73 65 4E 61 6D 65 3D 66 2E 66    ND (BaseName=f.f
017790:  63 62 66 6E 29 20 41 4E 44 20 28 45 78 74 3D 66    cbfn) AND (Ext=f
0177A0:  2E 66 63 62 66 74 29 20 54 48 45 4E 0D 0A 09 09    .fcbft) THEN....
0177B0:  09 09 52 45 54 55 52 4E 20 69 0D 0A 09 09 09 09    ..RETURN i......
0177C0:  45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09    END;.....END;...
0177D0:  09 49 4E 43 28 69 29 3B 0D 0A 09 09 45 4E 44 3B    .INC(i);....END;
0177E0:  0D 0A 09 45 4E 44 20 46 69 6E 64 4E 61 6D 65 3B    ...END FindName;
0177F0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 54 72 61 6E    ..PROCEDURE Tran
017800:  73 66 65 72 28 56 41 52 20 46 72 6F 6D 2C 54 6F    sfer(VAR From,To
017810:  3A 46 49 4C 45 3B 4D 61 78 53 65 63 74 6F 72 73    :FILE;MaxSectors
017820:  3A 43 41 52 44 49 4E 41 4C 29 3A 43 41 52 44 49    :CARDINAL):CARDI
017830:  4E 41 4C 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41    NAL;..VAR.i,j:CA
017840:  52 44 49 4E 41 4C 3B 0D 0A 09 72 65 70 6C 79 3A    RDINAL;...reply:
017850:  49 4E 54 45 47 45 52 3B 0D 0A 09 42 75 66 66 65    INTEGER;...Buffe
017860:  72 3A 41 52 52 41 59 5B 30 2E 2E 31 30 32 33 5D    r:ARRAY[0..1023]
017870:  20 4F 46 20 42 59 54 45 3B 0D 0A 42 45 47 49 4E     OF BYTE;..BEGIN
017880:  0D 0A 09 6A 3A 3D 30 3B 0D 0A 09 4C 4F 4F 50 0D    ...j:=0;...LOOP.
017890:  0A 09 09 49 46 20 4D 61 78 53 65 63 74 6F 72 73    ...IF MaxSectors
0178A0:  3E 38 20 54 48 45 4E 20 69 3A 3D 38 2A 31 32 38    >8 THEN i:=8*128
0178B0:  20 45 4C 53 45 20 69 3A 3D 4D 61 78 53 65 63 74     ELSE i:=MaxSect
0178C0:  6F 72 73 2A 31 32 38 20 45 4E 44 3B 0D 0A 09 09    ors*128 END;....
0178D0:  53 65 71 52 65 61 64 42 6C 6F 63 6B 28 46 72 6F    SeqReadBlock(Fro
0178E0:  6D 2C 41 44 52 28 42 75 66 66 65 72 29 2C 69 2C    m,ADR(Buffer),i,
0178F0:  72 65 70 6C 79 29 3B 0D 0A 09 09 49 46 20 72 65    reply);....IF re
017900:  48 28 42 75 66 66 65 72 49 6E 29 20 54 48 45 4E    H(BufferIn) THEN
017910:  0D 0A 09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B    ....SeqReadBlock
017920:  28 46 72 6F 6D 2C 41 44 52 28 42 75 66 66 65 72    (From,ADR(Buffer
017930:  49 6E 29 2C 53 49 5A 45 28 42 75 66 66 65 72 49    In),SIZE(BufferI
017940:  6E 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 49 6E    n),reply);....In
017950:  50 6F 73 3A 3D 30 3B 0D 0A 09 09 45 4E 44 3B 0D    Pos:=0;....END;.
017960:  0A 09 63 68 3A 3D 42 75 66 66 65 72 49 6E 5B 49    ..ch:=BufferIn[I
017970:  6E 50 6F 73 5D 3B 0D 0A 28 2A 09 57 72 69 74 65    nPos];..(*.Write
017980:  43 61 72 64 28 49 6E 50 6F 73 2C 34 29 3B 57 72    Card(InPos,4);Wr
017990:  69 74 65 53 74 72 69 6E 67 28 27 20 27 29 3B 57    iteString(' ');W
0179A0:  72 69 74 65 48 65 78 28 4F 52 44 28 63 68 29 2C    riteHex(ORD(ch),
0179B0:  34 29 3B 57 72 69 74 65 4C 6E 3B 2A 29 0D 0A 09    4);WriteLn;*)...
0179C0:  49 4E 43 28 49 6E 50 6F 73 29 3B 0D 0A 09 45 4E    INC(InPos);...EN
0179D0:  44 20 47 65 74 43 68 61 72 3B 0D 0A 50 52 4F 43    D GetChar;..PROC
0179E0:  45 44 55 52 45 20 46 6C 75 73 68 4F 75 74 3B 0D    EDURE FlushOut;.
0179F0:  0A 56 41 52 09 72 65 70 6C 79 3A 49 4E 54 45 47    .VAR.reply:INTEG
017A00:  45 52 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 4C    ER;...i:CARDINAL
017A10:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4F 75    ;..BEGIN...IF Ou
017A20:  74 50 6F 73 3D 30 20 54 48 45 4E 20 52 45 54 55    tPos=0 THEN RETU
017A30:  52 4E 20 45 4E 44 3B 0D 0A 09 69 3A 3D 31 32 38    RN END;...i:=128
017A40:  2A 28 28 4F 75 74 50 6F 73 2B 31 32 37 29 20 44    *((OutPos+127) D
017A50:  49 56 20 31 32 38 29 3B 0D 0A 09 49 46 20 69 3E    IV 128);...IF i>
017A60:  48 49 47 48 28 42 75 66 66 65 72 4F 75 74 29 20    HIGH(BufferOut) 
017A70:  54 48 45 4E 20 69 3A 3D 48 49 47 48 28 42 75 66    THEN i:=HIGH(Buf
017A80:  66 65 72 4F 75 74 29 20 45 4E 44 3B 0D 0A 09 57    ferOut) END;...W
017A90:  48 49 4C 45 20 4F 75 74 50 6F 73 3C 69 20 44 4F    HILE OutPos<i DO
017AA0:  0D 0A 09 09 42 75 66 66 65 72 4F 75 74 5B 4F 75    ....BufferOut[Ou
017AB0:  74 50 6F 73 5D 3A 3D 31 61 78 3B 0D 0A 09 09 49    tPos]:=1ax;....I
017AC0:  4E 43 28 4F 75 74 50 6F 73 29 3B 0D 0A 09 09 45    NC(OutPos);....E
017AD0:  4E 44 3B 0D 0A 09 49 4E 43 28 69 29 3B 0D 0A 09    ND;...INC(i);...
017AE0:  53 65 71 57 72 69 74 65 42 6C 6F 63 6B 28 54 6F    SeqWriteBlock(To
017AF0:  2C 41 44 52 28 42 75 66 66 65 72 4F 75 74 29 2C    ,ADR(BufferOut),
017B00:  70 6C 79 3D 30 20 54 48 45 4E 20 45 58 49 54 20    ply=0 THEN EXIT 
017B10:  45 4E 44 3B 0D 0A 09 09 53 65 71 57 72 69 74 65    END;....SeqWrite
017B20:  42 6C 6F 63 6B 28 54 6F 2C 41 44 52 28 42 75 66    Block(To,ADR(Buf
017B30:  66 65 72 29 2C 72 65 70 6C 79 2C 72 65 70 6C 79    fer),reply,reply
017B40:  29 3B 0D 0A 09 09 6A 3A 3D 6A 2B 43 41 52 44 49    );....j:=j+CARDI
017B50:  4E 41 4C 28 72 65 70 6C 79 29 20 44 49 56 20 31    NAL(reply) DIV 1
017B60:  32 38 3B 0D 0A 09 09 49 46 20 4D 61 78 53 65 63    28;....IF MaxSec
017B70:  74 6F 72 73 3C 3D 38 20 54 48 45 4E 20 45 58 49    tors<=8 THEN EXI
017B80:  54 20 45 4E 44 3B 0D 0A 09 09 4D 61 78 53 65 63    T END;....MaxSec
017B90:  74 6F 72 73 3A 3D 4D 61 78 53 65 63 74 6F 72 73    tors:=MaxSectors
017BA0:  2D 38 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45    -8;....END;...RE
017BB0:  54 55 52 4E 20 6A 3B 0D 0A 09 45 4E 44 20 54 72    TURN j;...END Tr
017BC0:  61 6E 73 66 65 72 3B 0D 0A 50 52 4F 43 45 44 55    ansfer;..PROCEDU
017BD0:  52 45 20 55 6E 53 63 72 75 6E 63 68 28 56 41 52    RE UnScrunch(VAR
017BE0:  20 46 72 6F 6D 2C 54 6F 3A 46 49 4C 45 29 3B 0D     From,To:FILE);.
017BF0:  0A 54 59 50 45 09 50 4E 61 6D 65 3D 50 4F 49 4E    .TYPE.PName=POIN
017C00:  54 45 52 20 54 4F 20 4E 61 6D 65 3B 0D 0A 09 49    TER TO Name;...I
017C10:  64 65 6E 74 3D 41 52 52 41 59 5B 30 2E 2E 36 30    dent=ARRAY[0..60
017C20:  5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 4E 61 6D    ] OF CHAR;...Nam
017C30:  65 3D 52 45 43 4F 52 44 0D 0A 09 09 43 6F 64 65    e=RECORD....Code
017C40:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 4E 65    :CARDINAL;....Ne
017C50:  78 74 3A 50 4E 61 6D 65 3B 0D 0A 09 09 54 65 78    xt:PName;....Tex
017C60:  74 3A 49 64 65 6E 74 3B 0D 0A 09 09 45 4E 44 3B    t:Ident;....END;
017C70:  0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 44 49 4E    ..VAR.i,j:CARDIN
017C80:  41 4C 3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45    AL;...reply:INTE
017C90:  47 45 52 3B 0D 0A 09 42 75 66 66 65 72 49 6E 2C    GER;...BufferIn,
017CA0:  42 75 66 66 65 72 4F 75 74 3A 41 52 52 41 59 5B    BufferOut:ARRAY[
017CB0:  30 2E 2E 31 30 32 33 5D 20 4F 46 20 42 59 54 45    0..1023] OF BYTE
017CC0:  3B 0D 0A 09 54 61 62 6C 65 3A 50 4E 61 6D 65 3B    ;...Table:PName;
017CD0:  0D 0A 09 70 3A 50 4E 61 6D 65 3B 0D 0A 09 43 6F    ...p:PName;...Co
017CE0:  64 65 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 49    de:CARDINAL;...I
017CF0:  64 3A 49 64 65 6E 74 3B 0D 0A 09 49 6E 50 6F 73    d:Ident;...InPos
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 41 02 00 00 00 02    ......R...A.....
017D20:  14 00 46 02 00 00 00 02 14 00 42 02 00 00 00 02    ..F.......B.....
017D30:  14 00 47 02 00 00 00 02 14 00 43 02 00 00 00 02    ..G.......C.....
017D40:  14 00 48 02 00 00 00 02 14 00 44 02 00 00 00 02    ..H.......D.....
017D50:  14 00 49 02 00 00 00 02 14 00 45 02 00 00 00 02    ..I.......E.....
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:  69 2C 72 65 70 6C 79 29 3B 0D 0A 09 4F 75 74 50    i,reply);...OutP
017E10:  6F 73 3A 3D 30 3B 0D 0A 09 45 4E 44 20 46 6C 75    os:=0;...END Flu
017E20:  73 68 4F 75 74 3B 0D 0A 50 52 4F 43 45 44 55 52    shOut;..PROCEDUR
017E30:  45 20 50 75 74 43 68 61 72 28 63 68 3A 43 48 41    E PutChar(ch:CHA
017E40:  52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20    R);..BEGIN...IF 
017E50:  4F 75 74 50 6F 73 3E 48 49 47 48 28 42 75 66 66    OutPos>HIGH(Buff
017E60:  65 72 49 6E 29 20 54 48 45 4E 20 46 6C 75 73 68    erIn) THEN Flush
017E70:  4F 75 74 20 45 4E 44 3B 0D 0A 09 42 75 66 66 65    Out END;...Buffe
017E80:  72 4F 75 74 5B 4F 75 74 50 6F 73 5D 3A 3D 63 68    rOut[OutPos]:=ch
017E90:  3B 0D 0A 09 49 4E 43 28 4F 75 74 50 6F 73 29 3B    ;...INC(OutPos);
017EA0:  0D 0A 09 45 4E 44 20 50 75 74 43 68 61 72 3B 0D    ...END PutChar;.
017EB0:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74    ...PROCEDURE Get
017EC0:  43 6F 64 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43    Code;..BEGIN...C
017ED0:  6F 64 65 3A 3D 30 3B 0D 0A 09 49 46 20 63 68 3C    ode:=0;...IF ch<
017EE0:  27 20 27 20 54 48 45 4E 0D 0A 09 09 43 6F 64 65    ' ' THEN....Code
017EF0:  3A 3D 4F 52 44 28 63 68 29 2A 32 35 36 3B 0D 0A    :=ORD(ch)*256;..
017F00:  09 09 47 65 74 43 68 61 72 3B 0D 0A 09 09 45 4E    ..GetChar;....EN
017F10:  44 3B 0D 0A 09 43 6F 64 65 3A 3D 43 6F 64 65 2B    D;...Code:=Code+
017F20:  4F 52 44 28 63 68 29 3B 0D 0A 09 45 4E 44 20 47    ORD(ch);...END G
017F30:  65 74 43 6F 64 65 3B 0D 0A 50 52 4F 43 45 44 55    etCode;..PROCEDU
017F40:  52 45 20 50 75 74 49 64 3B 0D 0A 56 41 52 09 69    RE PutId;..VAR.i
017F50:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 70 3A 50    :CARDINAL;...p:P
017F60:  4E 61 6D 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47    Name;..BEGIN...G
017F70:  65 74 43 6F 64 65 3B 0D 0A 09 70 3A 3D 54 61 62    etCode;...p:=Tab
017F80:  6C 65 3B 0D 0A 09 57 48 49 4C 45 20 28 70 3C 3E    le;...WHILE (p<>
017F90:  4E 49 4C 29 20 41 4E 44 20 28 70 5E 2E 43 6F 64    NIL) AND (p^.Cod
017FA0:  65 3C 3E 43 6F 64 65 29 20 44 4F 20 0D 0A 09 09    e<>Code) DO ....
017FB0:  70 3A 3D 70 5E 2E 4E 65 78 74 20 0D 0A 09 09 45    p:=p^.Next ....E
017FC0:  4E 44 3B 0D 0A 09 49 46 20 70 3D 4E 49 4C 20 54    ND;...IF p=NIL T
017FD0:  48 45 4E 20 0D 0A 09 09 57 72 69 74 65 53 74 72    HEN ....WriteStr
017FE0:  69 6E 67 28 27 20 65 72 72 6F 72 20 69 6E 20 50    ing(' error in P
017FF0:  75 74 49 64 27 29 3B 0D 0A 09 09 57 72 69 74 65    utId');....Write
018000:  72 65 63 74 6F 72 79 5B 69 5D 20 44 4F 0D 0A 09    rectory[i] DO...
018010:  09 09 53 74 61 74 75 73 3A 3D 30 66 66 68 3B 0D    ..Status:=0ffh;.
018020:  0A 09 09 09 42 61 73 65 4E 61 6D 65 3A 3D 27 20    ....BaseName:=' 
018030:  20 20 20 20 20 20 20 27 3B 0D 0A 09 09 09 45 78           ';.....Ex
018040:  74 3A 3D 27 20 20 20 27 3B 0D 0A 09 09 09 45 4E    t:='   ';.....EN
018050:  44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 49 54    D;....END;...WIT
018060:  48 20 44 69 72 65 63 74 6F 72 79 5B 31 5D 20 44    H Directory[1] D
018070:  4F 0D 0A 09 09 53 74 61 74 75 73 3A 3D 30 3B 0D    O....Status:=0;.
018080:  0A 09 09 4C 65 6E 67 74 68 3A 3D 53 6C 6F 74 73    ...Length:=Slots
018090:  20 44 49 56 20 34 3B 0D 0A 09 09 53 74 61 72 74     DIV 4;....Start
0180A0:  53 65 63 74 6F 72 3A 3D 30 3B 0D 0A 09 09 45 4E    Sector:=0;....EN
0180B0:  44 3B 0D 0A 09 4E 65 78 74 53 65 63 74 6F 72 3A    D;...NextSector:
0180C0:  3D 53 6C 6F 74 73 20 44 49 56 20 34 3B 0D 0A 09    =Slots DIV 4;...
0180D0:  45 4E 44 20 47 65 74 53 6C 6F 74 43 6F 75 6E 74    END GetSlotCount
0180E0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4F 70 65    ;..PROCEDURE Ope
0180F0:  6E 4C 69 62 72 61 72 79 3B 0D 0A 28 2A 09 6F 70    nLibrary;..(*.op
018100:  65 6E 20 74 68 65 20 6C 69 62 72 61 72 79 20 66    en the library f
018110:  69 6C 65 20 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09    ile *)..BEGIN...
018120:  57 72 69 74 65 53 74 72 69 6E 67 28 27 20 45 6E    WriteString(' En
018130:  74 65 72 20 6E 61 6D 65 20 6F 66 20 6C 69 62 72    ter name of libr
018140:  61 72 79 20 66 69 6C 65 3A 27 29 3B 0D 0A 09 52    ary file:');...R
018150:  65 61 64 53 74 72 69 6E 67 28 4C 69 62 4E 61 6D    eadString(LibNam
018160:  65 29 3B 0D 0A 09 4C 6F 6F 6B 75 70 28 4C 69 62    e);...Lookup(Lib
018170:  2C 4C 69 62 4E 61 6D 65 2C 72 65 70 6C 79 29 3B    ,LibName,reply);
018180:  0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54    ...IF reply<>0 T
018190:  48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 69    HEN....WriteStri
0181A0:  6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F 74 20 66    ng(' Could not f
0181B0:  69 6E 64 20 74 68 61 74 20 66 69 6C 65 20 2D 20    ind that file - 
0181C0:  63 72 65 61 74 65 20 69 74 20 3F 27 29 3B 0D 0A    create it ?');..
0181D0:  09 09 49 46 20 59 65 73 28 29 20 54 48 45 4E 0D    ..IF Yes() THEN.
0181E0:  0A 09 09 09 43 72 65 61 74 65 28 4C 69 62 2C 4C    ....Create(Lib,L
0181F0:  69 62 4E 61 6D 65 2C 72 65 70 6C 79 29 3B 0D 0A    ibName,reply);..
018200:  43 61 72 64 28 43 6F 64 65 2C 34 29 3B 0D 0A 09    Card(Code,4);...
018210:  09 57 72 69 74 65 53 74 72 69 6E 67 28 54 61 62    .WriteString(Tab
018220:  6C 65 5E 2E 54 65 78 74 29 3B 0D 0A 09 09 57 72    le^.Text);....Wr
018230:  69 74 65 4C 6E 3B 0D 0A 09 09 52 45 54 55 52 4E    iteLn;....RETURN
018240:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 69 3A 3D 30 3B    ....END;...i:=0;
018250:  0D 0A 09 57 49 54 48 20 70 5E 20 44 4F 0D 0A 09    ...WITH p^ DO...
018260:  09 57 48 49 4C 45 20 54 65 78 74 5B 69 5D 3C 3E    .WHILE Text[i]<>
018270:  30 78 20 44 4F 0D 0A 09 09 09 50 75 74 43 68 61    0x DO.....PutCha
018280:  72 28 54 65 78 74 5B 69 5D 29 3B 0D 0A 09 09 09    r(Text[i]);.....
018290:  49 4E 43 28 69 29 3B 0D 0A 09 09 09 45 4E 44 3B    INC(i);.....END;
0182A0:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 50    ....END;...END P
0182B0:  75 74 49 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45    utId;..PROCEDURE
0182C0:  20 44 65 66 43 6F 64 65 3B 0D 0A 56 41 52 09 49     DefCode;..VAR.I
0182D0:  64 3A 49 64 65 6E 74 3B 0D 0A 09 69 3A 43 41 52    d:Ident;...i:CAR
0182E0:  44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09    DINAL;..BEGIN...
0182F0:  47 65 74 43 68 61 72 3B 0D 0A 09 49 46 20 63 68    GetChar;...IF ch
018300:  3D 30 78 20 54 48 45 4E 20 45 6F 66 3A 3D 54 52    =0x THEN Eof:=TR
018310:  55 45 3B 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A    UE;RETURN END;..
018320:  09 69 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 63    .i:=0;...WHILE c
018330:  68 3C 3E 30 78 20 44 4F 0D 0A 09 09 49 64 5B 69    h<>0x DO....Id[i
018340:  5D 3A 3D 63 68 3B 0D 0A 09 09 50 75 74 43 68 61    ]:=ch;....PutCha
018350:  72 28 63 68 29 3B 0D 0A 09 09 47 65 74 43 68 61    r(ch);....GetCha
018360:  72 3B 0D 0A 09 09 49 4E 43 28 69 29 3B 0D 0A 09    r;....INC(i);...
018370:  09 45 4E 44 3B 0D 0A 09 49 64 5B 69 5D 3A 3D 30    .END;...Id[i]:=0
018380:  63 3B 0D 0A 09 47 65 74 43 68 61 72 3B 0D 0A 09    c;...GetChar;...
018390:  47 65 74 43 6F 64 65 3B 0D 0A 09 45 6E 74 65 72    GetCode;...Enter
0183A0:  49 64 28 49 64 29 3B 0D 0A 09 45 4E 44 20 44 65    Id(Id);...END De
0183B0:  66 43 6F 64 65 3B 0D 0A 09 09 0D 0A 42 45 47 49    fCode;......BEGI
0183C0:  4E 0D 0A 09 54 61 62 6C 65 3A 3D 4E 49 4C 3B 0D    N...Table:=NIL;.
0183D0:  0A 09 53 65 74 55 70 4E 61 6D 65 73 3B 0D 0A 09    ..SetUpNames;...
0183E0:  6A 3A 3D 30 3B 0D 0A 09 49 6E 50 6F 73 3A 3D 48    j:=0;...InPos:=H
0183F0:  49 47 48 28 42 75 66 66 65 72 49 6E 29 2B 31 3B    IGH(BufferIn)+1;
018400:  09 09 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54    ...IF reply<>0 T
018410:  48 45 4E 0D 0A 09 09 09 09 57 72 69 74 65 53 74    HEN......WriteSt
018420:  72 69 6E 67 28 27 20 63 6F 75 6C 64 20 6E 6F 74    ring(' could not
018430:  20 63 72 65 61 74 65 20 69 74 20 65 69 74 68 65     create it eithe
018440:  72 27 29 3B 0D 0A 09 09 09 09 57 72 69 74 65 4C    r');......WriteL
018450:  6E 3B 0D 0A 09 09 09 09 48 41 4C 54 0D 0A 09 09    n;......HALT....
018460:  09 09 45 4E 44 3B 0D 0A 09 09 09 47 65 74 53 6C    ..END;.....GetSl
018470:  6F 74 43 6F 75 6E 74 3B 0D 0A 09 09 45 4C 53 45    otCount;....ELSE
018480:  0D 0A 09 09 09 57 72 69 74 65 53 74 72 69 6E 67    .....WriteString
018490:  28 27 20 72 75 6E 20 63 61 6E 63 65 6C 6C 65 64    (' run cancelled
0184A0:  27 29 3B 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B    ');.....WriteLn;
0184B0:  0D 0A 09 09 09 48 41 4C 54 3B 0D 0A 09 09 09 45    .....HALT;.....E
0184C0:  4E 44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 52 65    ND;...ELSE....Re
0184D0:  61 64 42 6C 6F 63 6B 28 4C 69 62 2C 41 44 52 28    adBlock(Lib,ADR(
0184E0:  44 69 72 65 63 74 6F 72 79 29 2C 30 2C 53 49 5A    Directory),0,SIZ
0184F0:  45 28 44 69 72 65 63 74 6F 72 79 29 2C 72 65 70    E(Directory),rep
018500:  6C 79 29 3B 0D 0A 09 09 53 6C 6F 74 73 3A 3D 34    ly);....Slots:=4
018510:  2A 44 69 72 65 63 74 6F 72 79 5B 31 5D 2E 4C 65    *Directory[1].Le
018520:  6E 67 74 68 3B 0D 0A 09 09 57 72 69 74 65 43 61    ngth;....WriteCa
018530:  72 64 28 53 6C 6F 74 73 2C 34 29 3B 57 72 69 74    rd(Slots,4);Writ
018540:  65 53 74 72 69 6E 67 28 27 20 73 6C 6F 74 73 20    eString(' slots 
018550:  66 6F 75 6E 64 27 29 3B 57 72 69 74 65 4C 6E 3B    found');WriteLn;
018560:  0D 0A 09 09 4E 65 78 74 53 65 63 74 6F 72 3A 3D    ....NextSector:=
018570:  30 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 31 20 54    0;....FOR i:=1 T
018580:  4F 20 53 6C 6F 74 73 20 44 4F 0D 0A 09 09 09 57    O Slots DO.....W
018590:  49 54 48 20 44 69 72 65 63 74 6F 72 79 5B 69 5D    ITH Directory[i]
0185A0:  20 44 4F 0D 0A 09 09 09 09 49 46 20 53 74 61 74     DO......IF Stat
0185B0:  75 73 3C 3E 30 66 66 68 20 54 48 45 4E 0D 0A 09    us<>0ffh THEN...
0185C0:  09 09 09 09 6A 3A 3D 4C 65 6E 67 74 68 2B 53 74    ....j:=Length+St
0185D0:  61 72 74 53 65 63 74 6F 72 3B 0D 0A 09 09 09 09    artSector;......
0185E0:  09 49 46 20 6A 3E 4E 65 78 74 53 65 63 74 6F 72    .IF j>NextSector
0185F0:  20 54 48 45 4E 20 4E 65 78 74 53 65 63 74 6F 72     THEN NextSector
018600:  0D 0A 09 4F 75 74 50 6F 73 3A 3D 30 3B 0D 0A 09    ...OutPos:=0;...
018610:  47 65 74 43 68 61 72 3B 0D 0A 09 45 6F 66 3A 3D    GetChar;...Eof:=
018620:  46 41 4C 53 45 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09    FALSE;...LOOP...
018630:  09 49 46 20 63 68 3D 30 78 20 54 48 45 4E 20 44    .IF ch=0x THEN D
018640:  65 66 43 6F 64 65 20 0D 0A 09 09 45 4C 53 49 46    efCode ....ELSIF
018650:  20 28 63 68 3E 30 37 66 78 29 20 4F 52 20 28 63     (ch>07fx) OR (c
018660:  68 3C 27 20 27 29 20 54 48 45 4E 20 50 75 74 49    h<' ') THEN PutI
018670:  64 0D 0A 09 09 45 4C 53 45 20 50 75 74 43 68 61    d....ELSE PutCha
018680:  72 28 63 68 29 20 45 4E 44 3B 0D 0A 09 09 47 65    r(ch) END;....Ge
018690:  74 43 68 61 72 3B 0D 0A 09 09 49 46 20 45 6F 66    tChar;....IF Eof
0186A0:  20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D     THEN EXIT END;.
0186B0:  0A 09 09 45 4E 44 3B 0D 0A 09 46 6C 75 73 68 4F    ...END;...FlushO
0186C0:  75 74 3B 0D 0A 09 45 4E 44 20 55 6E 53 63 72 75    ut;...END UnScru
0186D0:  6E 63 68 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    nch;..PROCEDURE 
0186E0:  44 6F 41 64 64 69 74 69 6F 6E 28 56 41 52 20 66    DoAddition(VAR f
0186F0:  3A 46 49 4C 45 3B 53 63 3A 42 4F 4F 4C 45 41 4E    :FILE;Sc:BOOLEAN
018700:  29 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 44    );..VAR.i,j:CARD
018710:  49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 69    INAL;..BEGIN...i
018720:  3A 3D 46 69 6E 64 4E 61 6D 65 28 66 2E 66 29 3B    :=FindName(f.f);
018730:  0D 0A 09 49 46 20 69 3C 3E 30 20 54 48 45 4E 20    ...IF i<>0 THEN 
018740:  44 69 72 65 63 74 6F 72 79 5B 69 5D 2E 53 74 61    Directory[i].Sta
018750:  74 75 73 3A 3D 30 66 66 68 20 45 4E 44 3B 0D 0A    tus:=0ffh END;..
018760:  09 53 65 74 42 6C 6F 63 6B 28 4C 69 62 2C 4E 65    .SetBlock(Lib,Ne
018770:  78 74 53 65 63 74 6F 72 29 3B 0D 0A 09 6A 3A 3D    xtSector);...j:=
018780:  4E 65 78 74 53 65 63 74 6F 72 3B 0D 0A 09 4E 65    NextSector;...Ne
018790:  78 74 53 65 63 74 6F 72 3A 3D 4E 65 78 74 53 65    xtSector:=NextSe
0187A0:  63 74 6F 72 2B 54 72 61 6E 73 66 65 72 28 66 2C    ctor+Transfer(f,
0187B0:  4C 69 62 2C 36 35 35 33 35 29 3B 0D 0A 09 43 6C    Lib,65535);...Cl
0187C0:  6F 73 65 28 66 29 3B 20 0D 0A 09 41 64 64 45 6E    ose(f); ...AddEn
0187D0:  74 72 79 28 66 2E 66 2C 6A 2C 4E 65 78 74 53 65    try(f.f,j,NextSe
0187E0:  63 74 6F 72 2D 6A 2C 30 2C 30 2C 53 63 29 3B 0D    ctor-j,0,0,Sc);.
0187F0:  0A 09 45 4E 44 20 44 6F 41 64 64 69 74 69 6F 6E    ..END DoAddition
018800:  3A 3D 6A 20 45 4E 44 3B 0D 0A 09 09 09 09 09 45    :=j END;.......E
018810:  4E 44 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09    ND;......END;...
018820:  09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    ..END;....END;..
018830:  09 45 4E 44 20 4F 70 65 6E 4C 69 62 72 61 72 79    .END OpenLibrary
018840:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 6F    ;..PROCEDURE Clo
018850:  73 65 4C 69 62 72 61 72 79 3B 0D 0A 42 45 47 49    seLibrary;..BEGI
018860:  4E 0D 0A 09 57 72 69 74 65 42 6C 6F 63 6B 28 4C    N...WriteBlock(L
018870:  69 62 2C 41 44 52 28 44 69 72 65 63 74 6F 72 79    ib,ADR(Directory
018880:  29 2C 30 2C 31 32 38 2A 28 53 6C 6F 74 73 20 44    ),0,128*(Slots D
018890:  49 56 20 34 29 2C 72 65 70 6C 79 29 3B 0D 0A 09    IV 4),reply);...
0188A0:  43 6C 6F 73 65 28 4C 69 62 29 3B 0D 0A 09 45 4E    Close(Lib);...EN
0188B0:  44 20 43 6C 6F 73 65 4C 69 62 72 61 72 79 3B 0D    D CloseLibrary;.
0188C0:  0A 50 52 4F 43 45 44 55 52 45 20 44 65 6C 65 74    .PROCEDURE Delet
0188D0:  65 46 69 6C 65 28 66 6E 3A 41 52 52 41 59 20 4F    eFile(fn:ARRAY O
0188E0:  46 20 43 48 41 52 29 3B 0D 0A 56 41 52 09 66 3A    F CHAR);..VAR.f:
0188F0:  66 63 62 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41    fcb;...i:CARDINA
018900:  4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43 6F 6E 76    L;..BEGIN...Conv
018910:  65 72 74 46 69 6C 65 4E 61 6D 65 28 66 2C 46 69    ertFileName(f,Fi
018920:  6C 65 4E 61 6D 65 28 66 6E 29 29 3B 0D 0A 09 69    leName(fn));...i
018930:  3A 3D 46 69 6E 64 4E 61 6D 65 28 66 29 3B 0D 0A    :=FindName(f);..
018940:  09 49 46 20 69 3D 30 20 54 48 45 4E 20 0D 0A 09    .IF i=0 THEN ...
018950:  09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 43    .WriteString(' C
018960:  6F 75 6C 64 20 6E 6F 74 20 66 69 6E 64 20 3A 27    ould not find :'
018970:  29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E    );....WriteStrin
018980:  67 28 66 6E 29 3B 0D 0A 09 09 57 72 69 74 65 4C    g(fn);....WriteL
018990:  6E 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 72 69 74    n...ELSE....Writ
0189A0:  65 53 74 72 69 6E 67 28 66 6E 29 3B 0D 0A 09 09    eString(fn);....
0189B0:  57 72 69 74 65 53 74 72 69 6E 67 28 66 6E 29 3B    WriteString(fn);
0189C0:  0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09    ....WriteLn;....
0189D0:  44 69 72 65 63 74 6F 72 79 5B 69 5D 2E 53 74 61    Directory[i].Sta
0189E0:  74 75 73 3A 3D 30 66 66 68 3B 0D 0A 09 09 45 4E    tus:=0ffh;....EN
0189F0:  44 3B 0D 0A 09 45 4E 44 20 44 65 6C 65 74 65 46    D;...END DeleteF
018A00:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 41 64 64    ;..PROCEDURE Add
018A10:  46 69 6C 65 28 66 6E 3A 41 52 52 41 59 20 4F 46    File(fn:ARRAY OF
018A20:  20 43 48 41 52 3B 53 63 3A 42 4F 4F 4C 45 41 4E     CHAR;Sc:BOOLEAN
018A30:  29 3B 0D 0A 28 2A 09 63 6F 70 79 20 61 20 66 69    );..(*.copy a fi
018A40:  6C 65 20 69 6E 74 6F 20 74 68 65 20 63 75 72 72    le into the curr
018A50:  65 6E 74 20 6C 69 62 72 61 72 79 2A 29 0D 0A 56    ent library*)..V
018A60:  41 52 09 66 3A 46 49 4C 45 3B 0D 0A 09 69 2C 6A    AR.f:FILE;...i,j
018A70:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 42 75 66    :CARDINAL;...Buf
018A80:  66 65 72 3A 41 52 52 41 59 5B 30 2E 2E 31 30 32    fer:ARRAY[0..102
018A90:  33 5D 20 4F 46 20 42 59 54 45 3B 0D 0A 42 45 47    3] OF BYTE;..BEG
018AA0:  49 4E 0D 0A 09 4C 6F 6F 6B 75 70 28 66 2C 46 69    IN...Lookup(f,Fi
018AB0:  6C 65 4E 61 6D 65 28 66 6E 29 2C 72 65 70 6C 79    leName(fn),reply
018AC0:  29 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30    );...IF reply<>0
018AD0:  20 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74     THEN....WriteSt
018AE0:  72 69 6E 67 28 27 46 69 6C 65 20 3A 27 29 3B 0D    ring('File :');.
018AF0:  0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 66    ...WriteString(f
018B00:  6E 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69    n);....WriteStri
018B10:  6E 67 28 27 20 6E 6F 74 20 66 6F 75 6E 64 27 29    ng(' not found')
018B20:  3B 0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09    ;....WriteLn;...
018B30:  09 52 45 54 55 52 4E 3B 0D 0A 09 09 45 4E 44 3B    .RETURN;....END;
018B40:  0D 0A 09 44 6F 41 64 64 69 74 69 6F 6E 28 66 2C    ...DoAddition(f,
018B50:  53 63 29 3B 0D 0A 09 45 4E 44 20 41 64 64 46 69    Sc);...END AddFi
018B60:  6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 59    le;..PROCEDURE Y
018B70:  65 73 28 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 56    es():BOOLEAN;..V
018B80:  41 52 09 73 3A 41 52 52 41 59 5B 31 2E 2E 33 5D    AR.s:ARRAY[1..3]
018B90:  20 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E     OF CHAR;..BEGIN
018BA0:  0D 0A 09 4C 4F 4F 50 0D 0A 09 09 52 65 61 64 53    ...LOOP....ReadS
018BB0:  74 72 69 6E 67 28 73 29 3B 0D 0A 09 09 43 41 53    tring(s);....CAS
018BC0:  45 20 43 41 50 28 73 5B 31 5D 29 20 4F 46 0D 0A    E CAP(s[1]) OF..
018BD0:  09 09 09 27 59 27 3A 52 45 54 55 52 4E 20 54 52    ...'Y':RETURN TR
018BE0:  55 45 7C 0D 0A 09 09 09 27 4E 27 3A 52 45 54 55    UE|.....'N':RETU
018BF0:  52 4E 20 46 41 4C 53 45 7C 0D 0A 09 09 09 45 4C    RN FALSE|.....EL
018C00:  69 6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    ile;..PROCEDURE 
018C10:  45 78 74 72 61 63 74 46 69 6C 65 28 66 6E 3A 41    ExtractFile(fn:A
018C20:  52 52 41 59 20 4F 46 20 43 48 41 52 29 3B 0D 0A    RRAY OF CHAR);..
018C30:  56 41 52 09 66 3A 66 63 62 3B 0D 0A 09 69 3A 43    VAR.f:fcb;...i:C
018C40:  41 52 44 49 4E 41 4C 3B 0D 0A 09 66 6F 3A 46 49    ARDINAL;...fo:FI
018C50:  4C 45 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43 6F 6E    LE;..BEGIN...Con
018C60:  76 65 72 74 46 69 6C 65 4E 61 6D 65 28 66 2C 46    vertFileName(f,F
018C70:  69 6C 65 4E 61 6D 65 28 66 6E 29 29 3B 0D 0A 09    ileName(fn));...
018C80:  69 3A 3D 46 69 6E 64 4E 61 6D 65 28 66 29 3B 0D    i:=FindName(f);.
018C90:  0A 09 49 46 20 69 3D 30 20 54 48 45 4E 20 0D 0A    ..IF i=0 THEN ..
018CA0:  09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20    ..WriteString(' 
018CB0:  43 6F 75 6C 64 20 6E 6F 74 20 66 69 6E 64 20 3A    Could not find :
018CC0:  27 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69    ');....WriteStri
018CD0:  6E 67 28 66 6E 29 3B 0D 0A 09 09 57 72 69 74 65    ng(fn);....Write
018CE0:  4C 6E 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 72 69    Ln...ELSE....Wri
018CF0:  74 65 53 74 72 69 6E 67 28 27 45 78 74 72 61 63    teString('Extrac
018D00:  74 69 6E 67 20 27 29 3B 0D 0A 09 09 57 72 69 74    ting ');....Writ
018D10:  65 53 74 72 69 6E 67 28 66 6E 29 3B 0D 0A 09 09    eString(fn);....
018D20:  57 72 69 74 65 4C 6E 3B 0D 0A 09 09 43 72 65 61    WriteLn;....Crea
018D30:  74 65 28 66 6F 2C 46 69 6C 65 4E 61 6D 65 28 66    te(fo,FileName(f
018D40:  6E 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 49 46    n),reply);....IF
018D50:  20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A     reply<>0 THEN..
018D60:  09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27    ...WriteString('
018D70:  20 43 6F 75 6C 64 20 6E 6F 74 20 63 72 65 61 74     Could not creat
018D80:  65 20 27 29 3B 0D 0A 09 09 09 57 72 69 74 65 53    e ');.....WriteS
018D90:  74 72 69 6E 67 28 66 6E 29 3B 0D 0A 09 09 09 57    tring(fn);.....W
018DA0:  72 69 74 65 4C 6E 3B 0D 0A 09 09 09 52 45 54 55    riteLn;.....RETU
018DB0:  52 4E 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 57    RN.....END;....W
018DC0:  49 54 48 20 44 69 72 65 63 74 6F 72 79 5B 69 5D    ITH Directory[i]
018DD0:  20 44 4F 0D 0A 09 09 09 53 65 74 42 6C 6F 63 6B     DO.....SetBlock
018DE0:  28 4C 69 62 2C 53 74 61 72 74 53 65 63 74 6F 72    (Lib,StartSector
018DF0:  29 3B 0D 0A 09 09 09 49 46 20 53 63 72 75 6E 63    );.....IF Scrunc
018E00:  53 45 0D 0A 09 09 09 09 57 72 69 74 65 4C 6E 3B    SE......WriteLn;
018E10:  0D 0A 09 09 09 09 57 72 69 74 65 53 74 72 69 6E    ......WriteStrin
018E20:  67 28 27 20 50 6C 65 61 73 65 20 65 6E 74 65 72    g(' Please enter
018E30:  20 59 65 73 20 6F 72 20 4E 6F 3A 27 29 3B 0D 0A     Yes or No:');..
018E40:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B    ....END;....END;
018E50:  0D 0A 09 45 4E 44 20 59 65 73 3B 0D 0A 50 52 4F    ...END Yes;..PRO
018E60:  43 45 44 55 52 45 20 47 65 74 53 6C 6F 74 43 6F    CEDURE GetSlotCo
018E70:  75 6E 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 72    unt;..BEGIN...Wr
018E80:  69 74 65 53 74 72 69 6E 67 28 27 20 48 6F 77 20    iteString(' How 
018E90:  6D 61 6E 79 20 73 6C 6F 74 73 20 3F 27 29 3B 0D    many slots ?');.
018EA0:  0A 09 52 65 61 64 43 61 72 64 28 53 6C 6F 74 73    ..ReadCard(Slots
018EB0:  29 3B 0D 0A 09 49 46 20 53 6C 6F 74 73 3E 48 49    );...IF Slots>HI
018EC0:  47 48 28 44 69 72 65 63 74 6F 72 79 29 20 54 48    GH(Directory) TH
018ED0:  45 4E 0D 0A 09 09 57 72 69 74 65 43 61 72 64 28    EN....WriteCard(
018EE0:  48 49 47 48 28 44 69 72 65 63 74 6F 72 79 29 2C    HIGH(Directory),
018EF0:  34 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69    4);....WriteStri
018F00:  6E 67 28 27 20 69 73 20 6D 61 78 69 6D 75 6D 20    ng(' is maximum 
018F10:  73 6C 6F 74 73 20 61 6C 6C 6F 77 65 64 20 62 79    slots allowed by
018F20:  20 74 68 69 73 20 70 72 6F 67 72 61 6D 27 29 3B     this program');
018F30:  0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09    ....WriteLn;....
018F40:  53 6C 6F 74 73 3A 3D 48 49 47 48 28 44 69 72 65    Slots:=HIGH(Dire
018F50:  63 74 6F 72 79 29 3B 0D 0A 09 09 45 4E 44 3B 0D    ctory);....END;.
018F60:  0A 09 53 6C 6F 74 73 3A 3D 34 2A 28 28 53 6C 6F    ..Slots:=4*((Slo
018F70:  74 73 2B 33 29 20 44 49 56 20 34 29 3B 0D 0A 09    ts+3) DIV 4);...
018F80:  49 46 20 53 6C 6F 74 73 3D 30 20 54 48 45 4E 20    IF Slots=0 THEN 
018F90:  48 41 4C 54 20 45 4E 44 3B 0D 0A 09 57 72 69 74    HALT END;...Writ
018FA0:  65 43 61 72 64 28 53 6C 6F 74 73 2C 34 29 3B 0D    eCard(Slots,4);.
018FB0:  0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20    ..WriteString(' 
018FC0:  53 6C 6F 74 73 20 61 6C 6C 6F 63 61 74 65 64 27    Slots allocated'
018FD0:  29 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09    );...WriteLn;...
018FE0:  46 4F 52 20 69 3A 3D 31 20 54 4F 20 53 6C 6F 74    FOR i:=1 TO Slot
018FF0:  73 20 44 4F 20 0D 0A 09 09 57 49 54 48 20 44 69    s DO ....WITH Di
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 41 02 00 00 00 02    ......R...A.....
019020:  15 00 46 02 00 00 00 02 15 00 42 02 00 00 00 02    ..F.......B.....
019030:  15 00 47 02 00 00 00 02 15 00 43 02 00 00 00 02    ..G.......C.....
019040:  15 00 48 02 00 00 00 02 15 00 44 02 00 00 00 02    ..H.......D.....
019050:  15 00 49 02 00 00 00 02 15 00 45 02 00 00 00 02    ..I.......E.....
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:  68 65 64 20 54 48 45 4E 20 55 6E 53 63 72 75 6E    hed THEN UnScrun
019110:  63 68 28 4C 69 62 2C 66 6F 29 3B 0D 0A 09 09 09    ch(Lib,fo);.....
019120:  45 4C 53 45 20 69 3A 3D 54 72 61 6E 73 66 65 72    ELSE i:=Transfer
019130:  28 4C 69 62 2C 66 6F 2C 4C 65 6E 67 74 68 29 20    (Lib,fo,Length) 
019140:  45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09    END;.....END;...
019150:  09 43 6C 6F 73 65 28 66 6F 29 3B 0D 0A 09 09 45    .Close(fo);....E
019160:  4E 44 3B 0D 0A 09 45 4E 44 20 45 78 74 72 61 63    ND;...END Extrac
019170:  74 46 69 6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52    tFile;..PROCEDUR
019180:  45 20 44 69 73 70 6C 61 79 4E 61 6D 65 28 20 64    E DisplayName( d
019190:  3A 49 6E 64 65 78 52 65 63 6F 72 64 29 3B 0D 0A    :IndexRecord);..
0191A0:  56 41 52 09 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D    VAR.j:CARDINAL;.
0191B0:  0A 42 45 47 49 4E 0D 0A 09 6A 3A 3D 31 3B 0D 0A    .BEGIN...j:=1;..
0191C0:  09 57 49 54 48 20 64 20 44 4F 0D 0A 09 09 57 48    .WITH d DO....WH
0191D0:  49 4C 45 20 28 6A 3C 3D 38 29 20 41 4E 44 20 28    ILE (j<=8) AND (
0191E0:  42 61 73 65 4E 61 6D 65 5B 6A 5D 3C 3E 27 20 27    BaseName[j]<>' '
0191F0:  29 20 44 4F 0D 0A 09 09 09 57 72 69 74 65 28 42    ) DO.....Write(B
019200:  61 73 65 4E 61 6D 65 5B 6A 5D 29 3B 0D 0A 09 09    aseName[j]);....
019210:  09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E 44    .INC(j);.....END
019220:  3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67    ;....WriteString
019230:  28 27 2E 27 29 3B 0D 0A 09 09 57 72 69 74 65 53    ('.');....WriteS
019240:  74 72 69 6E 67 28 45 78 74 29 3B 0D 0A 09 09 57    tring(Ext);....W
019250:  48 49 4C 45 20 6A 3C 3D 38 20 44 4F 20 0D 0A 09    HILE j<=8 DO ...
019260:  09 09 57 72 69 74 65 28 27 20 27 29 3B 0D 0A 09    ..Write(' ');...
019270:  09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E    ..INC(j);.....EN
019280:  44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44    D;....END;...END
019290:  20 44 69 73 70 6C 61 79 4E 61 6D 65 3B 0D 0A 0D     DisplayName;...
0192A0:  0A 50 52 4F 43 45 44 55 52 45 20 4C 69 73 74 4E    .PROCEDURE ListN
0192B0:  61 6D 65 73 3B 0D 0A 56 41 52 09 69 2C 6A 2C 6B    ames;..VAR.i,j,k
0192C0:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49    :CARDINAL;..BEGI
0192D0:  4E 0D 0A 09 6B 3A 3D 30 3B 0D 0A 09 46 4F 52 20    N...k:=0;...FOR 
0192E0:  69 3A 3D 32 20 54 4F 20 53 6C 6F 74 73 20 44 4F    i:=2 TO Slots DO
0192F0:  0D 0A 09 09 57 49 54 48 20 44 69 72 65 63 74 6F    ....WITH Directo
019300:  61 74 65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A    ate');WriteLn;..
019310:  09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09    .WriteString('..
019320:  44 20 2D 20 44 65 6C 65 74 65 27 29 3B 57 72 69    D - Delete');Wri
019330:  74 65 4C 6E 3B 20 0D 0A 09 57 72 69 74 65 53 74    teLn; ...WriteSt
019340:  72 69 6E 67 28 27 09 09 45 20 2D 20 45 78 74 72    ring('..E - Extr
019350:  61 63 74 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A    act');WriteLn;..
019360:  09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09    .WriteString('..
019370:  4C 20 2D 20 4C 69 73 74 20 66 69 6C 65 73 27 29    L - List files')
019380:  3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74    ;WriteLn;...Writ
019390:  65 53 74 72 69 6E 67 28 27 09 09 52 20 2D 20 52    eString('..R - R
0193A0:  65 6F 72 67 61 6E 69 7A 65 27 29 3B 57 72 69 74    eorganize');Writ
0193B0:  65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69    eLn;...WriteStri
0193C0:  6E 67 28 27 09 09 55 20 2D 20 55 70 64 61 74 65    ng('..U - Update
0193D0:  20 41 6C 6C 27 29 3B 57 72 69 74 65 4C 6E 3B 0D     All');WriteLn;.
0193E0:  0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 4C 4F 4F    ..WriteLn;...LOO
0193F0:  50 0D 0A 09 09 52 65 61 64 43 6F 6D 6D 61 6E 64    P....ReadCommand
019400:  3B 0D 0A 09 09 43 41 53 45 20 43 6F 6D 6D 61 6E    ;....CASE Comman
019410:  64 43 48 20 4F 46 20 0D 0A 09 09 09 27 46 27 3A    dCH OF .....'F':
019420:  43 6C 6F 73 65 4C 69 62 72 61 72 79 3B 45 58 49    CloseLibrary;EXI
019430:  54 7C 0D 0A 09 09 09 27 41 27 3A 41 64 64 46 69    T|.....'A':AddFi
019440:  6C 65 28 46 4E 61 6D 65 2C 46 41 4C 53 45 29 7C    le(FName,FALSE)|
019450:  0D 0A 09 09 09 27 53 27 3A 41 64 64 46 69 6C 65    .....'S':AddFile
019460:  28 46 4E 61 6D 65 2C 54 52 55 45 29 7C 0D 0A 09    (FName,TRUE)|...
019470:  09 09 27 44 27 3A 44 65 6C 65 74 65 46 69 6C 65    ..'D':DeleteFile
019480:  28 46 4E 61 6D 65 29 7C 0D 0A 09 09 09 27 45 27    (FName)|.....'E'
019490:  3A 45 78 74 72 61 63 74 46 69 6C 65 28 46 4E 61    :ExtractFile(FNa
0194A0:  6D 65 29 7C 0D 0A 09 09 09 27 4C 27 3A 4C 69 73    me)|.....'L':Lis
0194B0:  74 4E 61 6D 65 73 7C 0D 0A 09 09 09 27 55 27 3A    tNames|.....'U':
0194C0:  55 70 64 61 74 65 41 6C 6C 7C 0D 0A 09 09 09 27    UpdateAll|.....'
0194D0:  52 27 3A 52 65 6F 72 67 3B 09 0D 0A 09 09 09 45    R':Reorg;......E
0194E0:  4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E    ND;....END;...EN
0194F0:  44 20 4D 79 4C 55 2E 0D 0A 20 1A 0F FD 02 00 00    D MyLU... ......
019500:  72 79 5B 69 5D 20 44 4F 0D 0A 09 09 09 49 46 20    ry[i] DO.....IF 
019510:  53 74 61 74 75 73 3C 3E 30 66 66 68 20 54 48 45    Status<>0ffh THE
019520:  4E 0D 0A 09 09 09 09 44 69 73 70 6C 61 79 4E 61    N......DisplayNa
019530:  6D 65 28 44 69 72 65 63 74 6F 72 79 5B 69 5D 29    me(Directory[i])
019540:  3B 0D 0A 09 09 09 09 57 72 69 74 65 43 61 72 64    ;......WriteCard
019550:  28 4C 65 6E 67 74 68 2A 31 32 38 2C 35 29 3B 0D    (Length*128,5);.
019560:  0A 09 09 09 09 49 4E 43 28 6B 29 3B 0D 0A 09 09    .....INC(k);....
019570:  09 09 49 46 20 6B 3D 34 20 54 48 45 4E 20 57 72    ..IF k=4 THEN Wr
019580:  69 74 65 4C 6E 3B 6B 3A 3D 30 0D 0A 09 09 09 09    iteLn;k:=0......
019590:  45 4C 53 45 20 57 72 69 74 65 53 74 72 69 6E 67    ELSE WriteString
0195A0:  28 27 20 20 27 29 20 45 4E 44 3B 0D 0A 09 09 09    ('  ') END;.....
0195B0:  09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A    .END;.....END;..
0195C0:  09 09 45 4E 44 3B 0D 0A 09 49 46 20 6B 3C 3E 30    ..END;...IF k<>0
0195D0:  20 54 48 45 4E 20 57 72 69 74 65 4C 6E 20 45 4E     THEN WriteLn EN
0195E0:  44 3B 0D 0A 09 45 4E 44 20 4C 69 73 74 4E 61 6D    D;...END ListNam
0195F0:  65 73 3B 20 0D 0A 50 52 4F 43 45 44 55 52 45 20    es; ..PROCEDURE 
019600:  53 65 74 55 70 46 63 62 28 56 41 52 20 66 3A 46    SetUpFcb(VAR f:F
019610:  49 4C 45 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 20    ILE);..BEGIN... 
019620:  20 20 20 66 2E 64 65 76 74 79 70 65 3A 3D 64 69       f.devtype:=di
019630:  73 63 3B 0D 0A 09 20 20 20 20 66 2E 65 6F 66 3A    sc;...    f.eof:
019640:  3D 46 41 4C 53 45 3B 0D 0A 09 20 20 20 20 57 49    =FALSE;...    WI
019650:  54 48 20 66 2E 66 20 44 4F 0D 0A 09 09 66 63 62    TH f.f DO....fcb
019660:  65 78 3A 3D 30 3B 0D 0A 09 09 66 63 62 63 72 3A    ex:=0;....fcbcr:
019670:  3D 30 3B 0D 0A 09 09 63 70 6D 72 65 73 3A 3D 30    =0;....cpmres:=0
019680:  3B 0D 0A 09 09 66 63 62 72 63 3A 3D 30 3B 0D 0A    ;....fcbrc:=0;..
019690:  09 09 66 63 62 72 6E 2E 6C 6F 77 6F 72 64 65 72    ..fcbrn.loworder
0196A0:  3A 3D 30 3B 0D 0A 09 09 66 63 62 72 6E 2E 68 69    :=0;....fcbrn.hi
0196B0:  67 68 6F 72 64 65 72 3A 3D 30 3B 0D 0A 09 09 45    ghorder:=0;....E
0196C0:  4E 44 3B 0D 0A 09 45 4E 44 20 53 65 74 55 70 46    ND;...END SetUpF
0196D0:  63 62 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 52    cb;..PROCEDURE R
0196E0:  65 6F 72 67 3B 0D 0A 56 41 52 09 69 2C 6A 2C 6B    eorg;..VAR.i,j,k
0196F0:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 4F 6C 64    :CARDINAL;...Old
019700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0197A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0197B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0197C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0197D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0197E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0197F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019800:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019810:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019820:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019830:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019840:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019850:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019860:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019870:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019880:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019890:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0198A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0198B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0198C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0198D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0198E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0198F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019900:  44 69 72 3A 49 6E 64 65 78 3B 0D 0A 09 4F 6C 64    Dir:Index;...Old
019910:  53 6C 6F 74 73 3A 43 41 52 44 49 4E 41 4C 3B 0D    Slots:CARDINAL;.
019920:  0A 09 4F 6C 64 4C 69 62 3A 46 49 4C 45 3B 0D 0A    ..OldLib:FILE;..
019930:  42 45 47 49 4E 0D 0A 09 4F 6C 64 4C 69 62 3A 3D    BEGIN...OldLib:=
019940:  4C 69 62 3B 0D 0A 09 43 6C 6F 73 65 28 4C 69 62    Lib;...Close(Lib
019950:  29 3B 0D 0A 09 4D 61 6B 65 42 41 4B 28 4C 69 62    );...MakeBAK(Lib
019960:  2C 72 65 70 6C 79 29 3B 0D 0A 09 4F 6C 64 44 69    ,reply);...OldDi
019970:  72 3A 3D 44 69 72 65 63 74 6F 72 79 3B 0D 0A 09    r:=Directory;...
019980:  4F 6C 64 53 6C 6F 74 73 3A 3D 53 6C 6F 74 73 3B    OldSlots:=Slots;
019990:  0D 0A 09 53 65 74 55 70 46 63 62 28 4F 6C 64 4C    ...SetUpFcb(OldL
0199A0:  69 62 29 3B 0D 0A 09 4F 6C 64 4C 69 62 2E 66 2E    ib);...OldLib.f.
0199B0:  66 63 62 66 74 3A 3D 27 42 41 4B 27 3B 0D 0A 09    fcbft:='BAK';...
0199C0:  6B 3A 3D 42 44 4F 53 28 6F 70 6E 66 63 2C 41 44    k:=BDOS(opnfc,AD
0199D0:  52 28 4F 6C 64 4C 69 62 2E 66 29 29 3B 0D 0A 09    R(OldLib.f));...
0199E0:  43 72 65 61 74 65 28 4C 69 62 2C 4C 69 62 4E 61    Create(Lib,LibNa
0199F0:  6D 65 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 20    me,reply);...IF 
019A00:  72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A 09    reply<>0 THEN...
019A10:  09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 43    .WriteString(' C
019A20:  6F 75 6C 64 20 6E 6F 74 20 63 72 65 61 74 65 20    ould not create 
019A30:  6E 65 77 20 6C 69 62 72 61 72 79 27 29 3B 0D 0A    new library');..
019A40:  09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 52 45    ..WriteLn;....RE
019A50:  54 55 52 4E 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57    TURN....END;...W
019A60:  72 69 74 65 53 74 72 69 6E 67 28 27 20 4F 6C 64    riteString(' Old
019A70:  20 6C 69 62 72 61 72 79 20 68 61 64 20 27 29 3B     library had ');
019A80:  57 72 69 74 65 43 61 72 64 28 4F 6C 64 53 6C 6F    WriteCard(OldSlo
019A90:  74 73 2C 34 29 3B 0D 0A 09 57 72 69 74 65 53 74    ts,4);...WriteSt
019AA0:  72 69 6E 67 28 27 20 73 6C 6F 74 73 27 29 3B 57    ring(' slots');W
019AB0:  72 69 74 65 4C 6E 3B 0D 0A 09 47 65 74 53 6C 6F    riteLn;...GetSlo
019AC0:  74 43 6F 75 6E 74 3B 0D 0A 09 46 4F 52 20 69 3A    tCount;...FOR i:
019AD0:  3D 32 20 54 4F 20 4F 6C 64 53 6C 6F 74 73 20 44    =2 TO OldSlots D
019AE0:  4F 0D 0A 09 09 57 49 54 48 20 4F 6C 64 44 69 72    O....WITH OldDir
019AF0:  5B 69 5D 20 44 4F 0D 0A 09 09 09 49 46 20 53 74    [i] DO.....IF St
019B00:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
019B10:  45 20 50 61 74 74 65 72 6E 3B 0D 0A 0D 0A 28 2A    E Pattern;....(*
019B20:  09 54 68 69 73 20 69 73 20 61 20 70 61 74 74 65    .This is a patte
019B30:  72 6E 20 6D 61 74 63 68 69 6E 67 20 6D 6F 64 75    rn matching modu
019B40:  6C 65 0D 0A 0D 0A 09 44 61 76 65 20 4D 6F 6F 72    le.....Dave Moor
019B50:  65 2C 20 46 54 4C 20 4D 6F 64 75 6C 61 2D 32 0D    e, FTL Modula-2.
019B60:  0A 0D 0A 09 54 6F 20 6D 61 74 63 68 20 61 20 70    ....To match a p
019B70:  61 74 74 65 72 6E 20 77 69 74 68 20 74 68 69 73    attern with this
019B80:  20 6D 6F 64 75 6C 65 2C 20 79 6F 75 20 6D 75 73     module, you mus
019B90:  74 20 63 72 65 61 74 65 20 61 0D 0A 09 70 61 74    t create a...pat
019BA0:  74 65 72 6E 20 64 65 73 63 72 69 70 74 69 6F 6E    tern description
019BB0:  20 77 69 74 68 20 74 68 65 20 22 43 72 65 61 74     with the "Creat
019BC0:  65 22 20 66 75 6E 63 74 69 6F 6E 73 2C 20 61 6E    e" functions, an
019BD0:  64 20 74 68 65 6E 20 0D 0A 09 75 73 65 20 74 68    d then ...use th
019BE0:  65 20 4D 61 74 63 68 50 61 74 74 65 72 6E 20 66    e MatchPattern f
019BF0:  75 6E 63 74 69 6F 6E 2E 0D 0A 0D 0A 09 54 68 69    unction......Thi
019C00:  73 20 66 75 6E 63 74 69 6F 6E 20 72 65 74 75 72    s function retur
019C10:  6E 73 20 61 20 74 72 65 65 20 64 65 73 63 72 69    ns a tree descri
019C20:  62 69 6E 67 20 74 68 65 20 6D 61 74 63 68 2C 20    bing the match, 
019C30:  69 66 20 73 75 63 63 65 73 73 66 75 6C 2C 0D 0A    if successful,..
019C40:  09 6F 72 20 4E 49 4C 20 69 66 20 6E 6F 74 20 73    .or NIL if not s
019C50:  75 63 63 65 73 73 66 75 6C 2E 0D 0A 0D 0A 09 0D    uccessful.......
019C60:  0A 2A 29 0D 0A 54 59 50 45 0D 0A 0D 0A 28 2A 09    .*)..TYPE....(*.
019C70:  54 68 65 20 70 72 6F 67 72 61 6D 20 6D 61 74 63    The program matc
019C80:  68 65 73 20 61 20 74 72 65 65 20 72 65 70 72 65    hes a tree repre
019C90:  73 65 6E 74 69 6E 67 20 61 20 70 61 74 74 65 72    senting a patter
019CA0:  6E 0D 0A 09 74 68 65 72 65 20 61 72 65 20 61 20    n...there are a 
019CB0:  76 61 72 69 65 74 79 20 6F 66 20 6E 6F 64 65 20    variety of node 
019CC0:  74 79 70 65 73 2A 29 0D 0A 09 0D 0A 09 4E 6F 64    types*)......Nod
019CD0:  65 54 79 70 65 3D 28 53 74 72 69 6E 67 2C 20 09    eType=(String, .
019CE0:  28 2A 20 41 20 73 74 72 69 6E 67 20 6F 66 20 63    (* A string of c
019CF0:  68 61 72 73 2A 29 0D 0A 09 09 20 20 41 6E 79 4F    hars*)....  AnyO
019D00:  61 74 75 73 3C 3E 30 66 66 68 20 54 48 45 4E 0D    atus<>0ffh THEN.
019D10:  0A 09 09 09 09 53 65 74 42 6C 6F 63 6B 28 4F 6C    .....SetBlock(Ol
019D20:  64 4C 69 62 2C 53 74 61 72 74 53 65 63 74 6F 72    dLib,StartSector
019D30:  29 3B 0D 0A 09 09 09 09 53 65 74 42 6C 6F 63 6B    );......SetBlock
019D40:  28 4C 69 62 2C 4E 65 78 74 53 65 63 74 6F 72 29    (Lib,NextSector)
019D50:  3B 0D 0A 09 09 09 09 6B 3A 3D 4E 65 78 74 53 65    ;......k:=NextSe
019D60:  63 74 6F 72 3B 0D 0A 09 09 09 09 6A 3A 3D 54 72    ctor;......j:=Tr
019D70:  61 6E 73 66 65 72 28 4F 6C 64 4C 69 62 2C 4C 69    ansfer(OldLib,Li
019D80:  62 2C 4C 65 6E 67 74 68 29 3B 0D 0A 09 09 09 09    b,Length);......
019D90:  41 64 64 45 6E 74 72 79 28 66 63 62 28 4F 6C 64    AddEntry(fcb(Old
019DA0:  44 69 72 5B 69 5D 29 2C 6B 2C 6A 2C 44 61 74 65    Dir[i]),k,j,Date
019DB0:  2C 54 69 6D 65 2C 53 63 72 75 6E 63 68 65 64 29    ,Time,Scrunched)
019DC0:  3B 0D 0A 09 09 09 09 4E 65 78 74 53 65 63 74 6F    ;......NextSecto
019DD0:  72 3A 3D 4E 65 78 74 53 65 63 74 6F 72 2B 6A 3B    r:=NextSector+j;
019DE0:  0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45    ......END;.....E
019DF0:  4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E    ND;....END;...EN
019E00:  44 20 52 65 6F 72 67 3B 0D 0A 50 52 4F 43 45 44    D Reorg;..PROCED
019E10:  55 52 45 20 55 70 64 61 74 65 41 6C 6C 3B 0D 0A    URE UpdateAll;..
019E20:  56 41 52 09 69 2C 6A 2C 6B 3A 43 41 52 44 49 4E    VAR.i,j,k:CARDIN
019E30:  41 4C 3B 0D 0A 09 66 3A 46 49 4C 45 3B 0D 0A 42    AL;...f:FILE;..B
019E40:  45 47 49 4E 0D 0A 09 69 3A 3D 30 3B 49 46 20 46    EGIN...i:=0;IF F
019E50:  4E 61 6D 65 5B 30 5D 3D 27 20 27 20 54 48 45 4E    Name[0]=' ' THEN
019E60:  20 46 4E 61 6D 65 5B 30 5D 3A 3D 27 40 27 20 45     FName[0]:='@' E
019E70:  4E 44 3B 0D 0A 09 57 48 49 4C 45 20 28 69 3C 3D    ND;...WHILE (i<=
019E80:  48 49 47 48 28 46 4E 61 6D 65 29 29 41 4E 44 20    HIGH(FName))AND 
019E90:  28 46 4E 61 6D 65 5B 69 5D 3C 3E 27 20 27 29 20    (FName[i]<>' ') 
019EA0:  44 4F 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E    DO....WriteStrin
019EB0:  67 28 27 20 53 65 61 72 63 68 69 6E 67 20 64 69    g(' Searching di
019EC0:  73 6B 20 27 29 3B 0D 0A 09 09 57 72 69 74 65 28    sk ');....Write(
019ED0:  46 4E 61 6D 65 5B 69 5D 29 3B 0D 0A 09 09 57 72    FName[i]);....Wr
019EE0:  69 74 65 4C 6E 3B 0D 0A 09 09 46 4F 52 20 6A 3A    iteLn;....FOR j:
019EF0:  3D 32 20 54 4F 20 53 6C 6F 74 73 20 44 4F 0D 0A    =2 TO Slots DO..
019F00:  66 2C 09 28 2A 20 41 20 63 68 61 72 61 63 74 65    f,.(* A characte
019F10:  72 20 66 72 6F 6D 20 61 20 73 65 74 2A 29 0D 0A    r from a set*)..
019F20:  09 09 20 20 41 6C 74 65 72 6E 61 74 69 76 65 73    ..  Alternatives
019F30:  2C 09 28 2A 20 4F 6E 65 20 6F 66 20 74 77 6F 20    ,.(* One of two 
019F40:  61 6C 74 65 72 6E 61 74 69 76 65 73 2A 29 0D 0A    alternatives*)..
019F50:  09 09 20 20 43 6F 6E 63 61 74 2C 09 28 2A 20 43    ..  Concat,.(* C
019F60:  6F 6E 63 61 74 65 6E 61 74 65 20 74 77 6F 20 70    oncatenate two p
019F70:  61 74 74 65 72 6E 73 2A 29 0D 0A 09 09 20 20 52    atterns*)....  R
019F80:  69 67 68 74 4C 69 6D 69 74 29 3B 09 28 2A 20 4D    ightLimit);.(* M
019F90:  61 6B 65 20 73 75 72 65 20 61 74 20 72 69 67 68    ake sure at righ
019FA0:  74 20 62 6F 75 6E 64 61 72 79 2A 29 0D 0A 0D 0A    t boundary*)....
019FB0:  09 43 68 61 72 53 65 74 3D 53 45 54 20 4F 46 20    .CharSet=SET OF 
019FC0:  43 48 41 52 3B 0D 0A 0D 0A 09 50 4E 6F 64 65 3D    CHAR;.....PNode=
019FD0:  50 4F 49 4E 54 45 52 20 54 4F 20 4E 6F 64 65 3B    POINTER TO Node;
019FE0:  0D 0A 0D 0A 09 50 53 74 61 74 75 73 3D 50 4F 49    .....PStatus=POI
019FF0:  4E 54 45 52 20 54 4F 20 53 74 61 74 65 3B 0D 0A    NTER TO State;..
01A000:  0D 0A 28 2A 09 49 66 20 61 20 6D 61 74 63 68 20    ..(*.If a match 
01A010:  69 73 20 73 75 63 63 65 73 73 66 75 6C 2C 20 74    is successful, t
01A020:  68 65 20 6D 61 74 63 68 20 69 73 20 72 65 74 75    he match is retu
01A030:  72 6E 65 64 20 62 79 20 61 20 74 72 65 65 20 6F    rned by a tree o
01A040:  66 0D 0A 09 73 74 61 74 65 73 2E 20 45 61 63 68    f...states. Each
01A050:  20 6E 6F 64 65 20 69 6E 20 74 68 65 20 74 72 65     node in the tre
01A060:  65 20 67 69 76 65 73 20 74 68 65 20 73 74 61 72    e gives the star
01A070:  74 20 70 6F 73 69 74 69 6F 6E 20 6F 66 20 74 68    t position of th
01A080:  65 0D 0A 09 6D 61 74 63 68 20 61 6E 64 20 74 68    e...match and th
01A090:  65 20 70 6F 73 69 74 69 6F 6E 20 6F 66 20 74 68    e position of th
01A0A0:  65 20 6E 65 78 74 20 63 68 61 72 61 63 74 65 72    e next character
01A0B0:  20 66 6F 6C 6C 6F 77 69 6E 67 20 74 68 65 20 6D     following the m
01A0C0:  61 74 63 68 2E 0D 0A 0D 0A 09 49 74 20 61 6C 73    atch......It als
01A0D0:  6F 20 63 6F 6E 74 61 69 6E 73 20 61 20 70 6F 69    o contains a poi
01A0E0:  6E 74 65 72 20 74 6F 20 74 68 65 20 70 61 74 74    nter to the patt
01A0F0:  65 72 6E 20 6E 6F 64 65 20 77 68 69 63 68 20 77    ern node which w
01A100:  09 09 09 57 49 54 48 20 44 69 72 65 63 74 6F 72    ...WITH Director
01A110:  79 5B 6A 5D 20 44 4F 0D 0A 09 09 09 09 49 46 20    y[j] DO......IF 
01A120:  53 74 61 74 75 73 3C 3E 30 66 66 68 20 54 48 45    Status<>0ffh THE
01A130:  4E 0D 0A 09 09 09 09 20 20 20 20 66 2E 66 3A 3D    N......    f.f:=
01A140:  66 63 62 28 44 69 72 65 63 74 6F 72 79 5B 6A 5D    fcb(Directory[j]
01A150:  29 3B 0D 0A 09 09 09 09 20 20 20 20 53 65 74 55    );......    SetU
01A160:  70 46 63 62 28 66 29 3B 0D 0A 09 09 09 09 20 20    pFcb(f);......  
01A170:  20 20 66 2E 66 2E 66 63 62 64 6E 3A 3D 4F 52 44      f.f.fcbdn:=ORD
01A180:  28 46 4E 61 6D 65 5B 69 5D 29 2D 4F 52 44 28 27    (FName[i])-ORD('
01A190:  41 27 29 2B 31 3B 0D 0A 09 09 09 09 20 20 20 20    A')+1;......    
01A1A0:  6B 3A 3D 42 44 4F 53 28 6F 70 6E 66 63 2C 41 44    k:=BDOS(opnfc,AD
01A1B0:  52 28 66 2E 66 29 29 3B 0D 0A 09 09 09 09 20 20    R(f.f));......  
01A1C0:  20 20 49 46 20 6B 3C 3E 30 66 66 68 20 54 48 45      IF k<>0ffh THE
01A1D0:  4E 0D 0A 09 09 09 09 09 57 72 69 74 65 53 74 72    N.......WriteStr
01A1E0:  69 6E 67 28 27 20 55 70 64 61 74 69 6E 67 3A 27    ing(' Updating:'
01A1F0:  29 3B 0D 0A 09 09 09 09 09 44 69 73 70 6C 61 79    );.......Display
01A200:  4E 61 6D 65 28 49 6E 64 65 78 52 65 63 6F 72 64    Name(IndexRecord
01A210:  28 66 2E 66 29 29 3B 0D 0A 09 09 09 09 09 57 72    (f.f));.......Wr
01A220:  69 74 65 4C 6E 3B 09 0D 0A 09 09 09 09 09 44 6F    iteLn;........Do
01A230:  41 64 64 69 74 69 6F 6E 28 66 2C 53 63 72 75 6E    Addition(f,Scrun
01A240:  63 68 65 64 29 3B 0D 0A 09 09 09 09 09 45 4E 44    ched);.......END
01A250:  3B 0D 0A 09 09 09 09 20 20 20 20 45 4E 44 3B 0D    ;......    END;.
01A260:  0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E    .....END;.....EN
01A270:  44 3B 0D 0A 09 09 49 4E 43 28 69 29 3B 0D 0A 09    D;....INC(i);...
01A280:  09 45 4E 44 3B 0D 0A 09 45 4E 44 20 55 70 64 61    .END;...END Upda
01A290:  74 65 41 6C 6C 3B 0D 0A 42 45 47 49 4E 0D 0A 09    teAll;..BEGIN...
01A2A0:  4F 70 65 6E 4C 69 62 72 61 72 79 3B 0D 0A 09 57    OpenLibrary;...W
01A2B0:  72 69 74 65 53 74 72 69 6E 67 28 27 20 43 6F 6D    riteString(' Com
01A2C0:  6D 61 6E 64 73 20 61 72 65 3A 09 46 20 2D 20 46    mands are:.F - F
01A2D0:  69 6E 69 73 68 27 29 3B 57 72 69 74 65 4C 6E 3B    inish');WriteLn;
01A2E0:  0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27    ...WriteString('
01A2F0:  09 09 41 20 2D 20 41 64 64 20 6F 72 20 75 70 64    ..A - Add or upd
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 41 02 00 00 00 02    ......R...A.....
01A320:  16 00 46 02 00 00 00 02 16 00 42 02 00 00 00 02    ..F.......B.....
01A330:  16 00 47 02 00 00 00 02 16 00 43 02 00 00 00 02    ..G.......C.....
01A340:  16 00 48 02 00 00 00 02 16 00 44 02 00 00 00 02    ..H.......D.....
01A350:  16 00 49 02 00 00 00 02 16 00 45 02 00 00 00 02    ..I.......E.....
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:  61 73 20 6D 61 74 63 68 65 64 2E 0D 0A 0D 0A 09    as matched......
01A410:  54 68 69 73 20 69 6E 66 6F 72 6D 61 74 69 6F 6E    This information
01A420:  20 68 61 73 20 74 6F 20 62 65 20 6B 65 70 74 20     has to be kept 
01A430:  73 65 70 61 72 61 74 65 6C 79 20 66 72 6F 6D 20    separately from 
01A440:  74 68 65 20 70 61 74 74 65 72 6E 20 64 65 63 72    the pattern decr
01A450:  69 70 74 69 6F 6E 0D 0A 09 6E 6F 64 65 20 62 65    iption...node be
01A460:  63 61 75 73 65 20 61 20 67 69 76 65 6E 20 70 61    cause a given pa
01A470:  74 74 65 72 6E 20 6E 6F 64 65 20 63 61 6E 20 6D    ttern node can m
01A480:  61 74 63 68 20 73 65 76 65 72 61 6C 20 74 69 6D    atch several tim
01A490:  65 73 20 69 6E 20 61 20 67 69 76 65 6E 0D 0A 09    es in a given...
01A4A0:  70 61 74 74 65 72 6E 2C 20 65 69 74 68 65 72 20    pattern, either 
01A4B0:  62 65 63 61 75 73 65 20 6F 66 20 72 65 63 75 72    because of recur
01A4C0:  73 69 6F 6E 2C 20 6F 72 20 62 65 63 61 75 73 65    sion, or because
01A4D0:  20 79 6F 75 20 68 61 76 65 20 63 68 6F 73 65 6E     you have chosen
01A4E0:  20 74 6F 0D 0A 09 73 61 76 65 20 73 70 61 63 65     to...save space
01A4F0:  20 62 79 20 75 73 69 6E 67 20 61 20 73 69 6E 67     by using a sing
01A500:  6C 65 20 6E 6F 64 65 20 69 6E 20 73 65 76 65 72    le node in sever
01A510:  61 6C 20 64 69 66 66 65 72 65 6E 74 20 70 6C 61    al different pla
01A520:  63 65 73 20 69 6E 20 61 20 0D 0A 09 70 61 74 74    ces in a ...patt
01A530:  65 72 6E 2E 0D 0A 0D 0A 2A 29 09 0D 0A 0D 0A 09    ern.....*)......
01A540:  53 74 61 74 65 3D 52 45 43 4F 52 44 0D 0A 09 09    State=RECORD....
01A550:  53 74 61 74 75 73 3A 43 41 52 44 49 4E 41 4C 3B    Status:CARDINAL;
01A560:  09 28 2A 09 53 74 61 74 75 73 20 69 73 20 61 20    .(*.Status is a 
01A570:  73 74 61 74 75 73 20 66 69 65 6C 64 20 75 73 65    status field use
01A580:  64 0D 0A 09 09 09 09 09 09 66 6F 72 20 62 61 63    d........for bac
01A590:  6B 2D 74 72 61 63 6B 69 6E 67 20 62 79 20 74 68    k-tracking by th
01A5A0:  65 20 6E 6F 64 65 0D 0A 09 09 09 09 09 09 63 6C    e node........cl
01A5B0:  61 73 73 65 73 20 41 6C 74 65 72 6E 61 74 69 76    asses Alternativ
01A5C0:  65 73 20 61 6E 64 20 0D 0A 09 09 09 09 09 09 41    es and ........A
01A5D0:  6E 79 4F 66 0D 0A 0D 0A 09 09 09 09 09 09 57 68    nyOf..........Wh
01A5E0:  65 6E 20 77 65 20 61 72 65 20 62 61 63 6B 74 72    en we are backtr
01A5F0:  61 63 6B 69 6E 67 20 74 6F 20 74 72 79 20 0D 0A    acking to try ..
01A600:  74 74 65 72 6E 0D 0A 09 77 69 6C 6C 20 6F 6E 6C    ttern...will onl
01A610:  79 20 6D 61 74 63 68 20 74 68 65 20 66 69 72 73    y match the firs
01A620:  74 20 22 61 22 20 61 6E 64 20 74 68 65 6E 20 72    t "a" and then r
01A630:  65 74 75 72 6E 2E 20 57 65 20 6D 75 73 74 20 61    eturn. We must a
01A640:  64 64 20 61 0D 0A 09 22 4C 69 6D 69 74 4E 6F 64    dd a..."LimitNod
01A650:  65 22 20 74 6F 20 65 6E 73 75 72 65 20 74 68 61    e" to ensure tha
01A660:  74 20 61 6C 6C 20 74 68 65 20 73 74 72 69 6E 67    t all the string
01A670:  20 69 73 20 6D 61 74 63 68 65 64 0D 0A 0D 0A 09     is matched.....
01A680:  45 31 3A 3D 43 72 65 61 74 65 43 6F 6E 63 61 74    E1:=CreateConcat
01A690:  4E 6F 64 65 28 45 2C 43 72 65 61 74 65 4C 69 6D    Node(E,CreateLim
01A6A0:  69 74 4E 6F 64 65 28 29 29 3B 0D 0A 0D 0A 09 45    itNode());.....E
01A6B0:  31 20 77 69 6C 6C 20 65 6E 73 75 72 65 20 74 68    1 will ensure th
01A6C0:  61 74 20 61 6C 6C 20 6F 66 20 74 68 65 20 73 74    at all of the st
01A6D0:  72 69 6E 67 20 69 73 20 6D 61 74 63 68 65 64 0D    ring is matched.
01A6E0:  0A 2A 29 0D 0A 50 52 4F 43 45 44 55 52 45 20 43    .*)..PROCEDURE C
01A6F0:  72 65 61 74 65 53 74 72 69 6E 67 4E 6F 64 65 28    reateStringNode(
01A700:  73 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 29    s:ARRAY OF CHAR)
01A710:  3A 50 4E 6F 64 65 3B 0D 0A 0D 0A 28 2A 09 43 72    :PNode;....(*.Cr
01A720:  65 61 74 65 20 61 20 6E 6F 64 65 20 77 68 69 63    eate a node whic
01A730:  68 20 6D 61 74 63 68 65 73 20 61 20 66 69 78 65    h matches a fixe
01A740:  64 20 73 74 72 69 6E 67 0D 0A 0D 0A 09 73 20 69    d string.....s i
01A750:  73 20 74 68 65 20 73 74 72 69 6E 67 20 74 6F 20    s the string to 
01A760:  6D 61 74 63 68 2A 29 0D 0A 0D 0A 50 52 4F 43 45    match*)....PROCE
01A770:  44 55 52 45 20 43 72 65 61 74 65 41 6C 74 4E 6F    DURE CreateAltNo
01A780:  64 65 28 70 2C 71 3A 50 4E 6F 64 65 29 3A 50 4E    de(p,q:PNode):PN
01A790:  6F 64 65 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 68    ode;....(*.Match
01A7A0:  20 65 69 74 68 65 72 20 70 20 6F 72 20 71 20 2A     either p or q *
01A7B0:  29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43    )....PROCEDURE C
01A7C0:  72 65 61 74 65 41 6E 79 4F 66 4E 6F 64 65 28 73    reateAnyOfNode(s
01A7D0:  3A 43 68 61 72 53 65 74 3B 6D 69 6E 2C 6D 61 78    :CharSet;min,max
01A7E0:  3A 43 41 52 44 49 4E 41 4C 3B 4C 6F 6E 67 65 73    :CARDINAL;Longes
01A7F0:  74 3A 42 4F 4F 4C 45 41 4E 29 3A 50 4E 6F 64 65    t:BOOLEAN):PNode
01A800:  09 09 09 09 09 09 61 6E 20 61 6C 74 65 72 6E 61    ......an alterna
01A810:  74 69 76 65 20 6D 61 74 63 68 20 6F 72 20 61 20    tive match or a 
01A820:  6C 6F 6E 67 65 72 0D 0A 09 09 09 09 09 09 6F 6E    longer........on
01A830:  65 2C 20 74 68 69 73 20 76 61 6C 75 65 20 69 73    e, this value is
01A840:  20 69 6E 63 72 65 6D 65 6E 74 65 64 0D 0A 0D 0A     incremented....
01A850:  09 09 09 09 09 09 57 68 65 6E 20 77 65 20 61 72    ......When we ar
01A860:  65 20 74 72 61 63 6B 69 6E 67 20 66 6F 72 77 61    e tracking forwa
01A870:  72 64 2C 20 0D 0A 09 09 09 09 09 09 69 74 20 69    rd, ........it i
01A880:  73 20 69 6E 69 74 69 61 6C 69 7A 65 64 2A 29 0D    s initialized*).
01A890:  0A 0D 0A 09 09 4D 61 74 63 68 65 64 41 74 3A 43    .....MatchedAt:C
01A8A0:  41 52 44 49 4E 41 4C 3B 09 09 28 2A 20 50 6F 73    ARDINAL;..(* Pos
01A8B0:  69 74 69 6F 6E 20 61 74 20 77 68 69 63 68 20 74    ition at which t
01A8C0:  68 69 73 20 0D 0A 09 09 09 09 09 09 20 20 20 6E    his ........   n
01A8D0:  6F 64 65 20 6D 61 74 63 68 65 64 2A 29 0D 0A 09    ode matched*)...
01A8E0:  09 50 61 74 74 65 72 6E 4E 6F 64 65 3A 50 4E 6F    .PatternNode:PNo
01A8F0:  64 65 3B 09 09 28 2A 20 50 6F 69 6E 74 65 72 20    de;..(* Pointer 
01A900:  74 6F 20 70 61 74 74 65 72 6E 20 6E 6F 64 65 20    to pattern node 
01A910:  0D 0A 09 09 09 09 09 09 20 20 20 6D 61 74 63 68    ........   match
01A920:  65 64 20 62 79 20 74 68 69 73 20 73 74 61 74 75    ed by this statu
01A930:  73 20 6E 6F 64 65 2A 29 0D 0A 09 09 4D 61 74 63    s node*)....Matc
01A940:  68 65 64 54 6F 3A 43 41 52 44 49 4E 41 4C 3B 09    hedTo:CARDINAL;.
01A950:  09 28 2A 20 50 6F 73 69 74 69 6F 6E 20 6F 66 20    .(* Position of 
01A960:  63 68 61 72 61 63 74 65 72 20 61 66 74 65 72 0D    character after.
01A970:  0A 09 09 09 09 09 09 20 20 20 6C 61 73 74 20 63    .......   last c
01A980:  68 61 72 61 63 74 65 72 20 6D 61 74 63 68 65 64    haracter matched
01A990:  20 62 79 20 0D 0A 09 09 09 09 09 09 20 20 20 70     by ........   p
01A9A0:  61 74 74 65 72 6E 2A 29 0D 0A 09 09 4C 65 66 74    attern*)....Left
01A9B0:  2C 52 69 67 68 74 3A 50 53 74 61 74 75 73 3B 09    ,Right:PStatus;.
01A9C0:  09 28 2A 20 50 6F 69 6E 74 65 72 20 74 6F 20 73    .(* Pointer to s
01A9D0:  75 62 73 74 61 74 75 73 20 74 72 65 65 0D 0A 09    ubstatus tree...
01A9E0:  09 09 09 09 20 20 20 20 20 09 20 20 20 4C 65 66    ....     .   Lef
01A9F0:  74 20 69 73 20 75 73 65 64 20 66 6F 72 20 41 6C    t is used for Al
01AA00:  3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 68 20 61 6E    ;....(*.Match an
01AA10:  79 20 63 68 61 72 61 63 74 65 72 20 69 6E 20 73    y character in s
01AA20:  65 74 20 22 73 22 0D 0A 0D 0A 09 6D 69 6E 20 61    et "s".....min a
01AA30:  6E 64 20 6D 61 78 20 61 72 65 20 74 68 65 20 6D    nd max are the m
01AA40:  69 6E 69 6D 75 6D 20 61 6E 64 20 6D 61 78 69 6D    inimum and maxim
01AA50:  75 6D 20 63 68 61 72 61 63 74 65 72 73 20 74 6F    um characters to
01AA60:  20 6D 61 74 63 68 0D 0A 0D 0A 09 4E 6F 72 6D 61     match.....Norma
01AA70:  6C 6C 79 2C 20 74 68 65 20 66 69 72 73 74 20 61    lly, the first a
01AA80:  74 74 65 6D 70 74 20 6D 61 74 63 68 65 73 20 74    ttempt matches t
01AA90:  68 65 20 73 68 6F 72 74 65 73 74 20 61 63 63 65    he shortest acce
01AAA0:  70 74 61 62 6C 65 20 6E 75 6D 62 65 72 0D 0A 09    ptable number...
01AAB0:  6F 66 20 63 68 61 72 61 63 74 65 72 73 2E 20 49    of characters. I
01AAC0:  6E 20 74 68 69 73 20 63 61 73 65 2C 20 74 6F 20    n this case, to 
01AAD0:  6D 61 74 63 68 20 6D 6F 72 65 20 63 68 61 72 61    match more chara
01AAE0:  63 74 65 72 73 2C 20 62 61 63 6B 74 72 61 63 6B    cters, backtrack
01AAF0:  69 6E 67 0D 0A 09 6D 75 73 74 20 62 65 20 70 65    ing...must be pe
01AB00:  72 66 6F 72 6D 65 64 2E 0D 0A 0D 0A 09 49 66 20    rformed......If 
01AB10:  79 6F 75 20 6B 6E 6F 77 20 74 68 61 74 20 6D 61    you know that ma
01AB20:  74 63 68 69 6E 67 20 74 68 65 20 6D 6F 73 74 20    tching the most 
01AB30:  70 6F 73 73 69 62 6C 65 20 63 68 61 72 61 63 74    possible charact
01AB40:  65 72 73 20 77 69 6C 6C 20 6E 6F 74 20 63 61 75    ers will not cau
01AB50:  73 65 0D 0A 09 74 68 65 20 70 61 74 74 65 72 6E    se...the pattern
01AB60:  20 74 6F 20 66 61 69 6C 20 28 66 6F 72 20 65 78     to fail (for ex
01AB70:  61 6D 70 6C 65 2C 20 77 68 65 6E 20 6D 61 74 63    ample, when matc
01AB80:  68 69 6E 67 20 69 64 65 6E 74 69 66 69 65 72 73    hing identifiers
01AB90:  20 69 6E 20 0D 0A 09 4D 6F 64 75 6C 61 2D 32 2C     in ...Modula-2,
01ABA0:  20 69 6E 20 77 68 69 63 68 20 69 64 65 6E 74 69     in which identi
01ABB0:  66 69 65 72 73 20 63 61 6E 6E 6F 74 20 72 75 6E    fiers cannot run
01ABC0:  20 74 6F 67 65 74 68 65 72 2C 20 74 68 65 6E 20     together, then 
01ABD0:  73 70 65 63 69 66 79 69 6E 67 0D 0A 09 54 52 55    specifying...TRU
01ABE0:  45 20 66 6F 72 20 4C 6F 6E 67 65 73 74 20 77 69    E for Longest wi
01ABF0:  6C 6C 20 70 72 6F 64 75 63 65 20 61 20 66 61 73    ll produce a fas
01AC00:  74 65 72 6E 61 74 69 76 65 73 0D 0A 09 09 09 09    ternatives......
01AC10:  09 09 20 20 20 42 6F 74 68 20 4C 65 66 74 20 61    ..   Both Left a
01AC20:  6E 64 20 52 69 67 68 74 20 61 72 65 20 75 73 65    nd Right are use
01AC30:  64 0D 0A 09 09 09 09 09 09 20 20 20 66 6F 72 20    d........   for 
01AC40:  43 6F 6E 63 61 6E 74 65 6E 61 74 69 6F 6E 2A 29    Concantenation*)
01AC50:  0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 4E 6F 64    ....END;.....Nod
01AC60:  65 3D 52 45 43 4F 52 44 0D 0A 09 09 43 41 53 45    e=RECORD....CASE
01AC70:  20 4E 54 79 70 65 3A 4E 6F 64 65 54 79 70 65 20     NType:NodeType 
01AC80:  4F 46 0D 0A 09 09 09 53 74 72 69 6E 67 3A 0D 0A    OF.....String:..
01AC90:  09 09 09 09 54 65 78 74 4C 65 6E 3A 43 41 52 44    ....TextLen:CARD
01ACA0:  49 4E 41 4C 3B 0D 0A 09 09 09 09 54 65 78 74 3A    INAL;......Text:
01ACB0:  41 52 52 41 59 5B 30 2E 2E 30 5D 20 4F 46 20 43    ARRAY[0..0] OF C
01ACC0:  48 41 52 3B 0D 0A 09 09 09 09 7C 0D 0A 09 09 09    HAR;......|.....
01ACD0:  41 6E 79 4F 66 3A 0D 0A 09 09 09 09 4D 61 74 63    AnyOf:......Matc
01ACE0:  68 3A 43 68 61 72 53 65 74 3B 0D 0A 09 09 09 09    h:CharSet;......
01ACF0:  4D 69 6E 43 6F 75 6E 74 2C 4D 61 78 43 6F 75 6E    MinCount,MaxCoun
01AD00:  74 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 09    t:CARDINAL;.....
01AD10:  09 46 61 73 74 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A    .Fast:BOOLEAN;..
01AD20:  09 09 09 09 7C 0D 0A 09 09 09 41 6C 74 65 72 6E    ....|.....Altern
01AD30:  61 74 69 76 65 73 2C 43 6F 6E 63 61 74 3A 0D 0A    atives,Concat:..
01AD40:  09 09 09 09 46 69 72 73 74 2C 53 65 63 6F 6E 64    ....First,Second
01AD50:  3A 50 4E 6F 64 65 3B 0D 0A 09 09 09 09 28 2A 20    :PNode;......(* 
01AD60:  69 66 20 65 69 74 68 65 72 20 69 73 20 6E 75 6C    if either is nul
01AD70:  6C 2C 20 69 74 20 6D 61 74 63 68 65 73 20 74 68    l, it matches th
01AD80:  65 20 6E 75 6C 6C 20 73 74 72 69 6E 67 2A 29 0D    e null string*).
01AD90:  0A 09 09 09 09 7C 0D 0A 09 09 09 45 4E 44 3B 0D    .....|.....END;.
01ADA0:  0A 09 09 09 09 0D 0A 09 09 45 4E 44 3B 09 0D 0A    .........END;...
01ADB0:  0D 0A 28 2A 09 54 68 65 20 66 6F 6C 6C 6F 77 69    ..(*.The followi
01ADC0:  6E 67 20 66 75 6E 63 74 69 6F 6E 73 20 72 65 74    ng functions ret
01ADD0:  75 72 6E 20 61 20 6E 6F 64 65 20 72 65 70 72 65    urn a node repre
01ADE0:  73 65 6E 74 69 6E 67 20 61 20 70 61 74 74 65 72    senting a patter
01ADF0:  6E 20 74 6F 20 62 65 0D 0A 09 6D 61 74 63 68 65    n to be...matche
01AE00:  74 65 72 20 70 61 74 74 65 72 6E 20 6D 61 74 63    ter pattern matc
01AE10:  68 0D 0A 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55    h..*)....PROCEDU
01AE20:  52 45 20 43 72 65 61 74 65 43 6F 6E 63 61 74 4E    RE CreateConcatN
01AE30:  6F 64 65 28 70 2C 71 3A 50 4E 6F 64 65 29 3A 50    ode(p,q:PNode):P
01AE40:  4E 6F 64 65 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63    Node;....(*.Matc
01AE50:  68 20 70 61 74 74 65 72 6E 20 70 20 66 6F 6C 6C    h pattern p foll
01AE60:  6F 77 65 64 20 62 79 20 70 61 74 74 65 72 6E 20    owed by pattern 
01AE70:  71 20 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52    q *)....PROCEDUR
01AE80:  45 20 43 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64    E CreateLimitNod
01AE90:  65 28 29 3A 50 4E 6F 64 65 3B 0D 0A 0D 0A 28 2A    e():PNode;....(*
01AEA0:  09 4D 61 74 63 68 20 6F 6E 6C 79 20 69 66 20 61    .Match only if a
01AEB0:  6C 6C 20 6F 66 20 74 68 65 20 73 74 72 69 6E 67    ll of the string
01AEC0:  20 68 61 73 20 62 65 65 6E 20 6D 61 74 63 68 65     has been matche
01AED0:  64 20 0D 0A 0D 0A 09 42 65 77 61 72 65 3A 0D 0A    d .....Beware:..
01AEE0:  0D 0A 09 09 44 6F 20 6E 6F 74 20 75 73 65 20 61    ....Do not use a
01AEF0:  20 6C 69 6D 69 74 20 6E 6F 64 65 20 61 73 20 70     limit node as p
01AF00:  61 72 74 20 6F 66 20 61 20 70 61 74 74 65 72 6E    art of a pattern
01AF10:  20 77 68 69 63 68 0D 0A 09 09 63 61 6E 20 62 65     which....can be
01AF20:  20 63 61 6C 6C 65 64 20 72 65 63 75 72 73 69 76     called recursiv
01AF30:  65 6C 79 20 28 73 75 63 68 20 61 73 20 22 45 22    ely (such as "E"
01AF40:  20 61 62 6F 76 65 29 2E 20 49 66 20 79 6F 75 20     above). If you 
01AF50:  64 6F 2C 0D 0A 09 09 74 68 65 20 70 61 74 74 65    do,....the patte
01AF60:  72 6E 20 6D 61 74 63 68 65 72 20 77 69 6C 6C 20    rn matcher will 
01AF70:  61 74 74 65 6D 70 74 20 74 6F 20 6D 61 74 63 68    attempt to match
01AF80:  20 74 68 65 20 65 6E 64 20 6F 66 20 74 68 65 0D     the end of the.
01AF90:  0A 09 09 73 74 72 69 6E 67 20 6F 6E 20 65 76 65    ...string on eve
01AFA0:  72 79 20 72 65 63 75 72 73 69 6F 6E 2C 20 77 68    ry recursion, wh
01AFB0:  69 63 68 20 6D 61 79 20 70 72 65 76 65 6E 74 20    ich may prevent 
01AFC0:  72 65 63 75 72 73 69 6F 6E 20 61 74 20 61 6C 6C    recursion at all
01AFD0:  0D 0A 0D 0A 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44    ....*)....PROCED
01AFE0:  55 52 45 20 4D 61 74 63 68 50 61 74 74 65 72 6E    URE MatchPattern
01AFF0:  28 70 3A 50 4E 6F 64 65 3B 73 3A 41 52 52 41 59    (p:PNode;s:ARRAY
01B000:  64 2E 0D 0A 0D 0A 09 53 6F 6D 65 20 6F 66 20 74    d......Some of t
01B010:  68 65 20 66 75 6E 63 74 69 6F 6E 73 20 72 65 71    he functions req
01B020:  75 69 72 65 20 6F 74 68 65 72 20 70 61 74 74 65    uire other patte
01B030:  72 6E 73 20 61 73 20 70 61 72 61 6D 65 74 65 72    rns as parameter
01B040:  73 2E 20 54 68 65 73 65 0D 0A 09 63 61 6E 20 62    s. These...can b
01B050:  65 20 67 65 6E 65 72 61 74 65 64 20 75 73 69 6E    e generated usin
01B060:  67 20 6E 65 73 74 65 64 20 66 75 6E 63 74 69 6F    g nested functio
01B070:  6E 20 63 61 6C 6C 73 2E 0D 0A 0D 0A 09 52 65 63    n calls......Rec
01B080:  75 72 73 69 6F 6E 20 69 73 20 70 6F 73 73 69 62    ursion is possib
01B090:  6C 65 2C 20 62 75 74 20 73 6F 6D 65 20 65 78 74    le, but some ext
01B0A0:  72 61 20 77 6F 72 6B 20 69 73 20 72 65 71 75 69    ra work is requi
01B0B0:  72 65 64 20 74 6F 20 64 65 66 69 6E 65 20 61 0D    red to define a.
01B0C0:  0A 09 72 65 63 75 72 73 69 76 65 20 70 61 74 74    ..recursive patt
01B0D0:  65 72 6E 2E 20 59 6F 75 20 6D 75 73 74 20 61 6C    ern. You must al
01B0E0:  6C 6F 63 61 74 65 20 73 74 6F 72 61 67 65 20 66    locate storage f
01B0F0:  6F 72 20 61 20 72 65 63 75 72 73 69 76 65 20 70    or a recursive p
01B100:  61 74 74 65 72 6E 0D 0A 09 62 65 66 6F 72 65 20    attern...before 
01B110:  69 74 20 69 73 20 75 73 65 64 2C 20 61 6E 64 20    it is used, and 
01B120:  74 68 65 6E 20 61 73 73 69 67 6E 20 69 74 73 20    then assign its 
01B130:  63 6F 6E 74 65 6E 74 73 20 61 66 74 65 72 20 69    contents after i
01B140:  74 20 69 73 20 64 65 66 69 6E 65 64 2E 0D 0A 0D    t is defined....
01B150:  0A 09 46 6F 72 20 65 78 61 6D 70 6C 65 2C 20 73    ..For example, s
01B160:  75 70 70 6F 73 65 20 77 65 20 77 61 6E 74 20 74    uppose we want t
01B170:  6F 20 73 65 74 20 75 70 20 61 20 70 61 74 74 65    o set up a patte
01B180:  72 6E 20 77 68 69 63 68 20 6D 61 74 63 68 65 73    rn which matches
01B190:  20 61 20 73 74 72 69 6E 67 0D 0A 09 6F 66 20 61     a string...of a
01B1A0:  27 73 2E 20 54 68 65 20 70 61 74 74 65 72 6E 20    's. The pattern 
01B1B0:  63 61 6E 20 62 65 20 67 69 76 65 6E 20 62 79 20    can be given by 
01B1C0:  74 68 65 20 67 72 61 6D 6D 61 72 3A 0D 0A 0D 0A    the grammar:....
01B1D0:  09 45 2D 3E 61 7C 61 45 0D 0A 0D 0A 09 54 68 69    .E->a|aE.....Thi
01B1E0:  73 20 77 6F 75 6C 64 20 62 65 20 73 65 74 20 75    s would be set u
01B1F0:  70 20 61 73 20 66 6F 6C 6C 6F 77 73 3A 0D 0A 0D    p as follows:...
01B200:  20 4F 46 20 43 48 41 52 29 3A 50 53 74 61 74 75     OF CHAR):PStatu
01B210:  73 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 68 20 61    s;....(*.Match a
01B220:  20 50 61 74 74 65 72 6E 20 0D 0A 09 70 20 69 73     Pattern ...p is
01B230:  20 74 68 65 20 72 6F 6F 74 20 6F 66 20 74 68 65     the root of the
01B240:  20 70 61 74 74 65 72 6E 20 74 6F 20 6D 61 74 63     pattern to matc
01B250:  68 0D 0A 09 73 20 69 73 20 74 68 65 20 74 65 78    h...s is the tex
01B260:  74 20 74 6F 20 6D 61 74 63 68 0D 0A 0D 0A 09 54    t to match.....T
01B270:  68 65 20 66 75 6E 63 74 69 6F 6E 20 72 65 74 75    he function retu
01B280:  72 6E 73 20 61 20 74 72 65 65 20 69 66 20 74 68    rns a tree if th
01B290:  65 20 6D 61 74 63 68 20 69 73 20 73 75 63 63 65    e match is succe
01B2A0:  73 73 66 75 6C 2E 0D 0A 09 49 74 20 72 65 74 75    ssful....It retu
01B2B0:  72 6E 73 20 4E 49 4C 20 69 66 20 74 68 65 20 6D    rns NIL if the m
01B2C0:  61 74 63 68 20 66 61 69 6C 73 2E 0D 0A 0D 0A 09    atch fails......
01B2D0:  54 68 65 20 6D 61 74 63 68 20 6D 75 73 74 20 73    The match must s
01B2E0:  74 61 72 74 20 61 74 20 74 68 65 20 62 65 67 69    tart at the begi
01B2F0:  6E 6E 69 6E 67 20 6F 66 20 74 68 65 20 73 74 72    nning of the str
01B300:  69 6E 67 2C 20 62 75 74 20 69 74 0D 0A 09 6E 65    ing, but it...ne
01B310:  65 64 20 6E 6F 74 20 6D 61 74 63 68 20 74 68 65    ed not match the
01B320:  20 65 6E 74 69 72 65 20 73 74 72 69 6E 67 20 2D     entire string -
01B330:  20 74 68 69 73 20 63 61 6E 20 62 65 20 66 6F 72     this can be for
01B340:  63 65 64 20 62 79 20 75 73 69 6E 67 0D 0A 09 61    ced by using...a
01B350:  20 6C 69 6D 69 74 20 6E 6F 64 65 2E 20 0D 0A 0D     limit node. ...
01B360:  0A 09 49 66 20 79 6F 75 20 77 61 6E 74 20 74 6F    ..If you want to
01B370:  20 75 6E 2D 61 6E 63 68 6F 72 20 74 68 65 20 6D     un-anchor the m
01B380:  61 74 63 68 20 66 72 6F 6D 20 74 68 65 20 62 65    atch from the be
01B390:  67 69 6E 6E 69 6E 67 20 6F 66 20 74 68 65 0D 0A    ginning of the..
01B3A0:  09 73 74 72 69 6E 67 2C 20 75 73 65 20 61 20 70    .string, use a p
01B3B0:  61 74 74 65 72 6E 3A 0D 0A 0D 0A 09 09 43 72 65    attern:......Cre
01B3C0:  61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 28 0D 0A    ateConcatNode(..
01B3D0:  09 09 09 43 72 65 61 74 65 41 6E 79 4F 66 4E 6F    ...CreateAnyOfNo
01B3E0:  64 65 28 43 68 61 72 53 65 74 7B 30 78 2E 2E 30    de(CharSet{0x..0
01B3F0:  66 66 78 7D 2C 30 2C 36 34 30 30 30 2C 46 41 4C    ffx},0,64000,FAL
01B400:  0A 09 4E 45 57 28 45 29 3B 0D 0A 09 74 65 6D 70    ..NEW(E);...temp
01B410:  3A 3D 43 72 65 61 74 65 41 6C 74 4E 6F 64 65 28    :=CreateAltNode(
01B420:  0D 0A 09 09 20 20 20 43 72 65 61 74 65 53 74 72    ....   CreateStr
01B430:  69 6E 67 4E 6F 64 65 28 27 61 27 29 2C 0D 0A 09    ingNode('a'),...
01B440:  09 20 20 20 43 72 65 61 74 65 43 6F 6E 63 61 74    .   CreateConcat
01B450:  4E 6F 64 65 28 0D 0A 09 09 09 43 72 65 61 74 65    Node(.....Create
01B460:  53 74 72 69 6E 67 4E 6F 64 65 28 27 61 27 29 2C    StringNode('a'),
01B470:  0D 0A 09 09 09 45 29 0D 0A 09 09 20 20 20 29 3B    .....E)....   );
01B480:  0D 0A 09 45 5E 3A 3D 74 65 6D 70 5E 3B 0D 0A 0D    ...E^:=temp^;...
01B490:  0A 09 57 65 20 68 61 76 65 20 61 6C 6C 6F 63 61    ..We have alloca
01B4A0:  74 65 64 20 22 45 22 20 66 69 72 73 74 20 73 6F    ted "E" first so
01B4B0:  20 74 68 61 74 20 69 74 20 63 61 6E 20 62 65 20     that it can be 
01B4C0:  75 73 65 64 20 69 6E 20 74 68 65 0D 0A 09 66 75    used in the...fu
01B4D0:  6E 63 74 69 6F 6E 2E 20 57 65 20 63 6F 75 6C 64    nction. We could
01B4E0:  20 6E 6F 74 20 73 69 6D 70 6C 79 20 61 73 73 69     not simply assi
01B4F0:  67 6E 20 74 68 65 20 70 6F 69 6E 74 65 72 20 72    gn the pointer r
01B500:  65 74 75 72 6E 65 64 20 62 79 0D 0A 09 43 72 65    eturned by...Cre
01B510:  61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 20 74 6F    ateConcatNode to
01B520:  20 45 2C 20 73 69 6E 63 65 20 74 68 65 6E 20 74     E, since then t
01B530:  68 65 20 45 20 75 73 65 64 20 69 6E 20 74 68 65    he E used in the
01B540:  20 66 75 6E 63 74 69 6F 6E 0D 0A 09 77 6F 75 6C     function...woul
01B550:  64 20 62 65 20 70 6F 69 6E 74 69 6E 67 20 65 6C    d be pointing el
01B560:  73 65 77 68 65 72 65 2E 20 49 6E 73 74 65 61 64    sewhere. Instead
01B570:  2C 20 77 65 20 6D 75 73 74 20 63 6F 70 79 20 74    , we must copy t
01B580:  68 65 20 63 6F 6E 74 65 6E 74 73 0D 0A 09 6F 66    he contents...of
01B590:  20 74 65 6D 70 20 69 6E 74 6F 20 45 20 73 6F 20     temp into E so 
01B5A0:  74 68 61 74 20 74 68 65 20 70 6F 69 6E 74 65 72    that the pointer
01B5B0:  73 20 72 65 6D 61 69 6E 20 63 6F 72 72 65 63 74    s remain correct
01B5C0:  2E 0D 0A 0D 0A 09 54 68 69 73 20 70 61 74 74 65    ......This patte
01B5D0:  72 6E 20 22 45 22 20 69 73 20 6E 6F 74 20 79 65    rn "E" is not ye
01B5E0:  74 20 72 65 61 64 79 20 74 6F 20 62 65 20 75 73    t ready to be us
01B5F0:  65 64 2C 20 73 69 6E 63 65 20 74 68 65 20 70 61    ed, since the pa
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 41 02 00 00 00 02    ......R...A.....
01B620:  17 00 46 02 00 00 00 02 17 00 42 02 00 00 00 02    ..F.......B.....
01B630:  17 00 47 02 00 00 00 02 17 00 43 02 00 00 00 02    ..G.......C.....
01B640:  17 00 48 02 00 00 00 02 17 00 44 02 00 00 00 02    ..H.......D.....
01B650:  17 00 49 02 00 00 00 02 17 00 45 02 00 00 00 02    ..I.......E.....
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:  53 45 29 2C 0D 0A 09 09 09 45 29 3B 0D 0A 0D 0A    SE),.....E);....
01B710:  09 77 68 65 72 65 20 45 20 69 73 20 74 68 65 20    .where E is the 
01B720:  70 61 74 74 65 72 6E 20 74 6F 20 62 65 20 6D 61    pattern to be ma
01B730:  74 63 68 65 64 20 69 6E 20 75 6E 2D 61 6E 63 68    tched in un-anch
01B740:  6F 72 65 64 20 6D 6F 64 65 2E 0D 0A 0D 0A 09 54    ored mode......T
01B750:  68 65 20 74 72 65 65 20 72 65 74 75 72 6E 65 64    he tree returned
01B760:  20 62 79 20 74 68 65 20 70 61 74 74 65 72 6E 20     by the pattern 
01B770:  6D 61 74 63 68 65 72 20 63 6F 6E 74 61 69 6E 73    matcher contains
01B780:  2C 20 69 6E 20 65 76 65 72 79 20 6E 6F 64 65 2C    , in every node,
01B790:  20 74 68 65 0D 0A 09 66 69 72 73 74 20 63 68 61     the...first cha
01B7A0:  72 61 63 74 65 72 20 6D 61 74 63 68 65 64 20 62    racter matched b
01B7B0:  79 20 74 68 65 20 70 61 74 74 65 72 6E 2C 20 61    y the pattern, a
01B7C0:  6E 64 20 74 68 65 20 70 6F 73 69 74 69 6F 6E 20    nd the position 
01B7D0:  6F 66 20 74 68 65 20 6E 65 78 74 0D 0A 09 63 68    of the next...ch
01B7E0:  61 72 61 63 74 65 72 20 66 6F 6C 6C 6F 77 69 6E    aracter followin
01B7F0:  67 20 74 68 65 20 6D 61 74 63 68 20 28 73 6F 20    g the match (so 
01B800:  74 68 61 74 20 74 68 65 20 64 69 66 66 65 72 65    that the differe
01B810:  6E 63 65 20 62 65 74 77 65 65 6E 20 74 68 65 73    nce between thes
01B820:  65 0D 0A 09 74 77 6F 20 76 61 6C 75 65 73 20 67    e...two values g
01B830:  69 76 65 73 20 74 68 65 20 6E 75 6D 62 65 72 20    ives the number 
01B840:  6F 66 20 63 68 61 72 61 63 74 65 72 73 20 6D 61    of characters ma
01B850:  74 63 68 65 64 29 2E 0D 0A 0D 0A 09 49 6E 20 61    tched)......In a
01B860:  64 64 69 74 69 6F 6E 2C 20 65 61 63 68 20 6E 6F    ddition, each no
01B870:  64 65 20 63 6F 6E 74 61 69 6E 73 20 61 20 70 6F    de contains a po
01B880:  69 6E 74 65 72 20 74 6F 20 74 68 65 20 70 61 74    inter to the pat
01B890:  74 65 72 6E 20 6E 6F 64 65 20 6D 61 74 63 68 65    tern node matche
01B8A0:  64 0D 0A 09 61 6E 64 20 69 74 20 6D 61 79 20 63    d...and it may c
01B8B0:  6F 6E 74 61 69 6E 20 70 6F 69 6E 74 65 72 73 20    ontain pointers 
01B8C0:  74 6F 20 73 75 62 2D 70 61 74 74 65 72 6E 73 20    to sub-patterns 
01B8D0:  77 68 69 63 68 20 77 65 72 65 20 6D 61 74 63 68    which were match
01B8E0:  65 64 2E 0D 0A 0D 0A 2A 29 0D 0A 45 4E 44 20 50    ed.....*)..END P
01B8F0:  61 74 74 65 72 6E 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A    attern..........
01B900:  4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 28    L;..PROCEDURE P(
01B910:  29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49    ):BOOLEAN;..BEGI
01B920:  4E 0D 0A 09 28 2A 20 52 65 63 75 72 73 69 76 65    N...(* Recursive
01B930:  6C 79 20 6D 61 74 63 68 20 74 68 65 20 70 61 74    ly match the pat
01B940:  74 65 72 6E 20 2A 29 0D 0A 09 57 49 54 48 20 70    tern *)...WITH p
01B950:  5E 20 44 4F 0D 0A 20 09 20 20 20 20 50 6F 73 3A    ^ DO.. .    Pos:
01B960:  3D 71 5E 2E 4D 61 74 63 68 65 64 41 74 3B 0D 0A    =q^.MatchedAt;..
01B970:  09 20 20 20 20 53 74 61 72 74 50 6F 73 3A 3D 50    .    StartPos:=P
01B980:  6F 73 3B 0D 0A 09 20 20 20 20 74 65 6D 70 3A 3D    os;...    temp:=
01B990:  4E 49 4C 3B 0D 0A 09 20 20 20 20 4D 61 74 63 68    NIL;...    Match
01B9A0:  53 74 61 74 75 73 3A 3D 71 5E 2E 53 74 61 74 75    Status:=q^.Statu
01B9B0:  73 3B 0D 0A 09 20 20 20 20 43 41 53 45 20 4E 54    s;...    CASE NT
01B9C0:  79 70 65 20 4F 46 0D 0A 09 09 53 74 72 69 6E 67    ype OF....String
01B9D0:  2C 52 69 67 68 74 4C 69 6D 69 74 3A 0D 0A 09 09    ,RightLimit:....
01B9E0:  09 74 65 6D 70 3A 3D 50 61 74 74 65 72 6E 28 70    .temp:=Pattern(p
01B9F0:  2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 52 45 54    ,s,Pos);.....RET
01BA00:  55 52 4E 20 74 65 6D 70 3C 3E 4E 49 4C 3B 0D 0A    URN temp<>NIL;..
01BA10:  09 09 09 7C 20 28 2A 73 74 72 69 6E 67 20 65 74    ...| (*string et
01BA20:  63 2A 29 0D 0A 09 09 41 6E 79 4F 66 3A 0D 0A 09    c*)....AnyOf:...
01BA30:  09 09 50 6F 73 3A 3D 71 5E 2E 4D 61 74 63 68 65    ..Pos:=q^.Matche
01BA40:  64 54 6F 3B 0D 0A 09 09 09 49 46 20 28 4D 61 74    dTo;.....IF (Mat
01BA50:  63 68 53 74 61 74 75 73 3C 4D 61 78 43 6F 75 6E    chStatus<MaxCoun
01BA60:  74 29 20 41 4E 44 20 28 73 5B 50 6F 73 5D 20 49    t) AND (s[Pos] I
01BA70:  4E 20 4D 61 74 63 68 29 20 54 48 45 4E 0D 0A 09    N Match) THEN...
01BA80:  09 09 09 49 4E 43 28 4D 61 74 63 68 53 74 61 74    ...INC(MatchStat
01BA90:  75 73 29 3B 0D 0A 09 09 09 09 43 68 61 6E 67 65    us);......Change
01BAA0:  64 3A 3D 54 52 55 45 3B 0D 0A 09 09 09 09 52 45    d:=TRUE;......RE
01BAB0:  54 55 52 4E 20 54 52 55 45 3B 0D 0A 09 09 09 09    TURN TRUE;......
01BAC0:  45 4E 44 3B 0D 0A 09 09 09 52 45 54 55 52 4E 20    END;.....RETURN 
01BAD0:  46 41 4C 53 45 3B 0D 0A 09 09 09 7C 0D 0A 09 09    FALSE;.....|....
01BAE0:  41 6C 74 65 72 6E 61 74 69 76 65 73 3A 0D 0A 09    Alternatives:...
01BAF0:  09 09 49 46 20 4D 61 74 63 68 53 74 61 74 75 73    ..IF MatchStatus
01BB00:  28 2A 24 6C 2D 2A 29 0D 0A 49 4D 50 4C 45 4D 45    (*$l-*)..IMPLEME
01BB10:  4E 54 41 54 49 4F 4E 20 4D 4F 44 55 4C 45 20 50    NTATION MODULE P
01BB20:  61 74 74 65 72 6E 3B 0D 0A 0D 0A 28 2A 09 54 68    attern;....(*.Th
01BB30:  69 73 20 69 73 20 61 20 70 61 74 74 65 72 6E 20    is is a pattern 
01BB40:  6D 61 74 63 68 69 6E 67 20 6D 6F 64 75 6C 65 0D    matching module.
01BB50:  0A 0D 0A 09 44 61 76 65 20 4D 6F 6F 72 65 2C 20    ....Dave Moore, 
01BB60:  46 54 4C 20 4D 6F 64 75 6C 61 2D 32 0D 0A 0D 0A    FTL Modula-2....
01BB70:  2A 29 0D 0A 0D 0A 46 52 4F 4D 09 53 54 4F 52 41    *)....FROM.STORA
01BB80:  47 45 20 49 4D 50 4F 52 54 20 41 4C 4C 4F 43 41    GE IMPORT ALLOCA
01BB90:  54 45 2C 44 45 41 4C 4C 4F 43 41 54 45 3B 0D 0A    TE,DEALLOCATE;..
01BBA0:  46 52 4F 4D 09 53 74 72 69 6E 67 73 20 49 4D 50    FROM.Strings IMP
01BBB0:  4F 52 54 20 4C 65 6E 67 74 68 3B 0D 0A 46 52 4F    ORT Length;..FRO
01BBC0:  4D 09 53 59 53 54 45 4D 09 49 4D 50 4F 52 54 20    M.SYSTEM.IMPORT 
01BBD0:  54 53 49 5A 45 3B 0D 0A 56 41 52 09 69 2C 6A 3A    TSIZE;..VAR.i,j:
01BBE0:  43 41 52 44 49 4E 41 4C 3B 0D 0A 0D 0A 09 43 68    CARDINAL;.....Ch
01BBF0:  61 6E 67 65 64 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A    anged:BOOLEAN;..
01BC00:  09 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    .Len:CARDINAL;..
01BC10:  0D 0A 50 52 4F 43 45 44 55 52 45 20 43 72 65 61    ..PROCEDURE Crea
01BC20:  74 65 53 74 72 69 6E 67 4E 6F 64 65 28 73 3A 41    teStringNode(s:A
01BC30:  52 52 41 59 20 4F 46 20 43 48 41 52 29 3A 50 4E    RRAY OF CHAR):PN
01BC40:  6F 64 65 3B 0D 0A 56 41 52 09 70 3A 50 4E 6F 64    ode;..VAR.p:PNod
01BC50:  65 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 28 2A 54    e;..BEGIN....(*T
01BC60:  68 69 73 20 70 72 6F 63 65 64 75 72 65 20 69 73    his procedure is
01BC70:  20 70 72 6F 76 69 64 65 64 20 74 6F 20 61 6C 6C     provided to all
01BC80:  6F 77 20 74 68 65 20 63 72 65 61 74 69 6F 6E 20    ow the creation 
01BC90:  6F 66 20 6E 6F 64 65 73 0D 0A 20 20 66 6F 72 20    of nodes..  for 
01BCA0:  73 74 72 69 6E 67 73 20 65 61 73 69 6C 6C 79 2E    strings easilly.
01BCB0:  20 4F 6E 6C 79 20 74 68 65 20 72 65 71 75 69 72     Only the requir
01BCC0:  65 64 20 61 6D 6F 75 6E 74 20 6F 66 20 6D 65 6D    ed amount of mem
01BCD0:  6F 72 79 20 69 73 20 61 6C 6C 6F 63 61 74 65 64    ory is allocated
01BCE0:  2A 29 0D 0A 0D 0A 09 69 3A 3D 4C 65 6E 67 74 68    *).....i:=Length
01BCF0:  28 73 29 3B 0D 0A 09 41 4C 4C 4F 43 41 54 45 28    (s);...ALLOCATE(
01BD00:  3D 31 20 54 48 45 4E 0D 0A 09 09 09 09 4D 61 74    =1 THEN......Mat
01BD10:  63 68 4C 65 66 74 3A 3D 42 61 63 6B 54 72 61 63    chLeft:=BackTrac
01BD20:  6B 28 71 5E 2E 4C 65 66 74 2C 73 2C 50 6F 73 29    k(q^.Left,s,Pos)
01BD30:  3B 0D 0A 09 09 09 09 49 46 20 28 4D 61 74 63 68    ;......IF (Match
01BD40:  4C 65 66 74 3C 3E 4E 49 4C 29 20 41 4E 44 20 43    Left<>NIL) AND C
01BD50:  68 61 6E 67 65 64 20 54 48 45 4E 20 0D 0A 09 09    hanged THEN ....
01BD60:  09 09 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A    ...RETURN TRUE..
01BD70:  09 09 09 09 45 4C 53 45 0D 0A 09 09 09 09 09 4D    ....ELSE.......M
01BD80:  61 74 63 68 53 74 61 74 75 73 3A 3D 32 3B 0D 0A    atchStatus:=2;..
01BD90:  09 09 09 09 09 43 68 61 6E 67 65 64 3A 3D 54 52    .....Changed:=TR
01BDA0:  55 45 3B 0D 0A 09 09 09 09 09 50 6F 73 3A 3D 53    UE;.......Pos:=S
01BDB0:  74 61 72 74 50 6F 73 3B 0D 0A 09 09 09 09 09 4D    tartPos;.......M
01BDC0:  61 74 63 68 4C 65 66 74 3A 3D 50 61 74 74 65 72    atchLeft:=Patter
01BDD0:  6E 28 53 65 63 6F 6E 64 2C 73 2C 50 6F 73 29 3B    n(Second,s,Pos);
01BDE0:  0D 0A 09 09 09 09 09 52 45 54 55 52 4E 20 4D 61    .......RETURN Ma
01BDF0:  74 63 68 4C 65 66 74 3C 3E 4E 49 4C 3B 0D 0A 09    tchLeft<>NIL;...
01BE00:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4C 53    ....END;.....ELS
01BE10:  45 20 28 2A 53 74 61 74 75 73 3D 32 2A 29 0D 0A    E (*Status=2*)..
01BE20:  09 09 09 09 4D 61 74 63 68 4C 65 66 74 3A 3D 42    ....MatchLeft:=B
01BE30:  61 63 6B 54 72 61 63 6B 28 71 5E 2E 4C 65 66 74    ackTrack(q^.Left
01BE40:  2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 09 52 45    ,s,Pos);......RE
01BE50:  54 55 52 4E 20 4D 61 74 63 68 4C 65 66 74 3C 3E    TURN MatchLeft<>
01BE60:  4E 49 4C 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A    NIL;......END;..
01BE70:  09 09 09 7C 0D 0A 09 09 43 6F 6E 63 61 74 3A 0D    ...|....Concat:.
01BE80:  0A 0D 0A 09 09 09 28 2A 20 73 65 65 20 69 66 20    ......(* see if 
01BE90:  77 65 20 63 61 6E 20 62 61 63 6B 74 72 61 63 6B    we can backtrack
01BEA0:  20 6F 6E 20 74 68 65 20 73 65 63 6F 6E 64 20 73     on the second s
01BEB0:  74 72 69 6E 67 2A 29 0D 0A 0D 0A 09 09 09 50 6F    tring*).......Po
01BEC0:  73 3A 3D 4D 61 74 63 68 53 74 61 74 75 73 3B 0D    s:=MatchStatus;.
01BED0:  0A 09 09 09 4D 61 74 63 68 4C 65 66 74 3A 3D 71    ....MatchLeft:=q
01BEE0:  5E 2E 4C 65 66 74 3B 0D 0A 09 09 09 4D 61 74 63    ^.Left;.....Matc
01BEF0:  68 52 69 67 68 74 3A 3D 42 61 63 6B 54 72 61 63    hRight:=BackTrac
01BF00:  70 2C 69 2B 33 2A 54 53 49 5A 45 28 43 41 52 44    p,i+3*TSIZE(CARD
01BF10:  49 4E 41 4C 29 2B 54 53 49 5A 45 28 4E 6F 64 65    INAL)+TSIZE(Node
01BF20:  54 79 70 65 29 29 3B 0D 0A 09 57 49 54 48 20 70    Type));...WITH p
01BF30:  5E 20 44 4F 0D 0A 09 09 46 4F 52 20 6A 3A 3D 30    ^ DO....FOR j:=0
01BF40:  20 54 4F 20 69 2D 31 20 44 4F 20 0D 0A 09 09 09     TO i-1 DO .....
01BF50:  54 65 78 74 5B 6A 5D 3A 3D 73 5B 6A 5D 20 0D 0A    Text[j]:=s[j] ..
01BF60:  09 09 09 45 4E 44 3B 0D 0A 09 09 54 65 78 74 4C    ...END;....TextL
01BF70:  65 6E 3A 3D 69 3B 0D 0A 09 09 4E 54 79 70 65 3A    en:=i;....NType:
01BF80:  3D 53 74 72 69 6E 67 3B 0D 0A 09 09 45 4E 44 3B    =String;....END;
01BF90:  0D 0A 09 52 45 54 55 52 4E 20 70 3B 0D 0A 09 45    ...RETURN p;...E
01BFA0:  4E 44 20 43 72 65 61 74 65 53 74 72 69 6E 67 4E    ND CreateStringN
01BFB0:  6F 64 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    ode;..PROCEDURE 
01BFC0:  43 72 65 61 74 65 41 6C 74 4E 6F 64 65 28 6D 2C    CreateAltNode(m,
01BFD0:  71 3A 50 4E 6F 64 65 29 3A 50 4E 6F 64 65 3B 0D    q:PNode):PNode;.
01BFE0:  0A 56 41 52 09 70 3A 50 4E 6F 64 65 3B 0D 0A 42    .VAR.p:PNode;..B
01BFF0:  45 47 49 4E 0D 0A 09 4E 45 57 28 70 29 3B 0D 0A    EGIN...NEW(p);..
01C000:  09 57 49 54 48 20 70 5E 20 44 4F 0D 0A 09 09 4E    .WITH p^ DO....N
01C010:  54 79 70 65 3A 3D 41 6C 74 65 72 6E 61 74 69 76    Type:=Alternativ
01C020:  65 73 3B 0D 0A 09 09 46 69 72 73 74 3A 3D 6D 3B    es;....First:=m;
01C030:  0D 0A 09 09 53 65 63 6F 6E 64 3A 3D 71 3B 0D 0A    ....Second:=q;..
01C040:  09 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20    ..END;...RETURN 
01C050:  70 0D 0A 09 45 4E 44 20 43 72 65 61 74 65 41 6C    p...END CreateAl
01C060:  74 4E 6F 64 65 3B 0D 0A 50 52 4F 43 45 44 55 52    tNode;..PROCEDUR
01C070:  45 20 43 72 65 61 74 65 41 6E 79 4F 66 4E 6F 64    E CreateAnyOfNod
01C080:  65 28 73 3A 43 68 61 72 53 65 74 3B 6D 69 6E 2C    e(s:CharSet;min,
01C090:  6D 61 78 3A 43 41 52 44 49 4E 41 4C 3B 4C 6F 6E    max:CARDINAL;Lon
01C0A0:  67 65 73 74 3A 42 4F 4F 4C 45 41 4E 29 3A 50 4E    gest:BOOLEAN):PN
01C0B0:  6F 64 65 3B 0D 0A 56 41 52 09 70 3A 50 4E 6F 64    ode;..VAR.p:PNod
01C0C0:  65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4E 45 57 28    e;..BEGIN...NEW(
01C0D0:  70 29 3B 0D 0A 09 57 49 54 48 20 70 5E 20 44 4F    p);...WITH p^ DO
01C0E0:  0D 0A 09 09 4E 54 79 70 65 3A 3D 41 6E 79 4F 66    ....NType:=AnyOf
01C0F0:  3B 0D 0A 09 09 4D 69 6E 43 6F 75 6E 74 3A 3D 6D    ;....MinCount:=m
01C100:  6B 28 71 5E 2E 52 69 67 68 74 2C 73 2C 50 6F 73    k(q^.Right,s,Pos
01C110:  29 3B 0D 0A 09 09 09 49 46 20 28 4D 61 74 63 68    );.....IF (Match
01C120:  52 69 67 68 74 3C 3E 4E 49 4C 29 20 41 4E 44 20    Right<>NIL) AND 
01C130:  43 68 61 6E 67 65 64 20 54 48 45 4E 0D 0A 09 09    Changed THEN....
01C140:  09 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A 09    ..RETURN TRUE...
01C150:  09 09 09 45 4E 44 3B 0D 0A 09 09 09 50 6F 73 3A    ...END;.....Pos:
01C160:  3D 71 5E 2E 4D 61 74 63 68 65 64 41 74 3B 0D 0A    =q^.MatchedAt;..
01C170:  09 09 09 0D 0A 09 09 09 28 2A 20 69 66 20 6E 6F    ........(* if no
01C180:  74 2C 20 74 72 79 20 74 6F 20 62 61 63 6B 74 72    t, try to backtr
01C190:  61 63 6B 20 74 68 65 20 66 69 72 73 74 20 73 74    ack the first st
01C1A0:  72 69 6E 67 0D 0A 09 09 09 20 20 20 75 6E 74 69    ring.....   unti
01C1B0:  6C 20 74 68 65 20 73 65 63 6F 6E 64 20 73 74 72    l the second str
01C1C0:  69 6E 67 20 6D 61 74 63 68 65 73 2A 29 09 09 09    ing matches*)...
01C1D0:  0D 0A 09 09 09 43 68 61 6E 67 65 64 3A 3D 46 41    .....Changed:=FA
01C1E0:  4C 53 45 3B 0D 0A 09 09 09 53 61 76 65 50 6F 73    LSE;.....SavePos
01C1F0:  3A 3D 50 6F 73 3B 0D 0A 09 09 09 4C 4F 4F 50 0D    :=Pos;.....LOOP.
01C200:  0A 09 09 09 09 50 6F 73 3A 3D 53 61 76 65 50 6F    .....Pos:=SavePo
01C210:  73 3B 0D 0A 09 09 09 09 4D 61 74 63 68 4C 65 66    s;......MatchLef
01C220:  74 3A 3D 42 61 63 6B 54 72 61 63 6B 28 71 5E 2E    t:=BackTrack(q^.
01C230:  4C 65 66 74 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09    Left,s,Pos);....
01C240:  09 09 49 46 20 28 4D 61 74 63 68 4C 65 66 74 3D    ..IF (MatchLeft=
01C250:  4E 49 4C 29 20 4F 52 20 4E 4F 54 20 43 68 61 6E    NIL) OR NOT Chan
01C260:  67 65 64 20 54 48 45 4E 20 45 58 49 54 20 45 4E    ged THEN EXIT EN
01C270:  44 3B 0D 0A 09 09 09 09 4D 61 74 63 68 52 69 67    D;......MatchRig
01C280:  68 74 3A 3D 50 61 74 74 65 72 6E 28 53 65 63 6F    ht:=Pattern(Seco
01C290:  6E 64 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 09    nd,s,Pos);......
01C2A0:  49 46 20 4D 61 74 63 68 52 69 67 68 74 3C 3E 4E    IF MatchRight<>N
01C2B0:  49 4C 20 54 48 45 4E 0D 0A 09 09 09 09 09 52 45    IL THEN.......RE
01C2C0:  54 55 52 4E 20 54 52 55 45 0D 0A 09 09 09 09 09    TURN TRUE.......
01C2D0:  45 4E 44 3B 0D 0A 09 09 09 09 43 68 61 6E 67 65    END;......Change
01C2E0:  64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 09 09 45    d:=FALSE;......E
01C2F0:  4E 44 3B 0D 0A 09 09 09 50 6F 73 3A 3D 53 74 61    ND;.....Pos:=Sta
01C300:  69 6E 3B 0D 0A 09 09 4D 61 78 43 6F 75 6E 74 3A    in;....MaxCount:
01C310:  3D 6D 61 78 3B 0D 0A 09 09 46 61 73 74 3A 3D 4C    =max;....Fast:=L
01C320:  6F 6E 67 65 73 74 3B 0D 0A 09 09 4D 61 74 63 68    ongest;....Match
01C330:  3A 3D 73 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52    :=s;....END;...R
01C340:  45 54 55 52 4E 20 70 0D 0A 09 45 4E 44 20 43 72    ETURN p...END Cr
01C350:  65 61 74 65 41 6E 79 4F 66 4E 6F 64 65 3B 0D 0A    eateAnyOfNode;..
01C360:  50 52 4F 43 45 44 55 52 45 20 43 72 65 61 74 65    PROCEDURE Create
01C370:  43 6F 6E 63 61 74 4E 6F 64 65 28 6D 2C 71 3A 50    ConcatNode(m,q:P
01C380:  4E 6F 64 65 29 3A 50 4E 6F 64 65 3B 0D 0A 56 41    Node):PNode;..VA
01C390:  52 09 70 3A 50 4E 6F 64 65 3B 0D 0A 42 45 47 49    R.p:PNode;..BEGI
01C3A0:  4E 0D 0A 09 4E 45 57 28 70 29 3B 0D 0A 09 57 49    N...NEW(p);...WI
01C3B0:  54 48 20 70 5E 20 44 4F 0D 0A 09 09 4E 54 79 70    TH p^ DO....NTyp
01C3C0:  65 3A 3D 43 6F 6E 63 61 74 3B 0D 0A 09 09 46 69    e:=Concat;....Fi
01C3D0:  72 73 74 3A 3D 6D 3B 0D 0A 09 09 53 65 63 6F 6E    rst:=m;....Secon
01C3E0:  64 3A 3D 71 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    d:=q;....END;...
01C3F0:  52 45 54 55 52 4E 20 70 0D 0A 09 45 4E 44 20 43    RETURN p...END C
01C400:  72 65 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 3B    reateConcatNode;
01C410:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 72    ....PROCEDURE Cr
01C420:  65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 28 29 3A    eateLimitNode():
01C430:  50 4E 6F 64 65 3B 0D 0A 56 41 52 09 70 3A 50 4E    PNode;..VAR.p:PN
01C440:  6F 64 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4E 45    ode;..BEGIN...NE
01C450:  57 28 70 29 3B 0D 0A 09 70 5E 2E 4E 54 79 70 65    W(p);...p^.NType
01C460:  3A 3D 52 69 67 68 74 4C 69 6D 69 74 3B 0D 0A 09    :=RightLimit;...
01C470:  52 45 54 55 52 4E 20 70 3B 0D 0A 09 45 4E 44 20    RETURN p;...END 
01C480:  43 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 3B    CreateLimitNode;
01C490:  0D 0A 50 52 4F 43 45 44 55 52 45 20 50 61 74 74    ..PROCEDURE Patt
01C4A0:  65 72 6E 28 70 3A 50 4E 6F 64 65 3B 56 41 52 20    ern(p:PNode;VAR 
01C4B0:  73 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 3B    s:ARRAY OF CHAR;
01C4C0:  56 41 52 20 50 6F 73 3A 43 41 52 44 49 4E 41 4C    VAR Pos:CARDINAL
01C4D0:  29 3A 50 53 74 61 74 75 73 3B 46 4F 52 57 41 52    ):PStatus;FORWAR
01C4E0:  44 3B 0D 0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52    D;......PROCEDUR
01C4F0:  45 20 42 61 63 6B 54 72 61 63 6B 28 71 3A 50 53    E BackTrack(q:PS
01C500:  72 74 50 6F 73 3B 0D 0A 09 09 09 52 45 54 55 52    rtPos;.....RETUR
01C510:  4E 20 46 41 4C 53 45 0D 0A 09 09 09 7C 09 09 09    N FALSE.....|...
01C520:  0D 0A 09 09 09 45 4E 44 20 28 2A 43 41 53 45 2A    .....END (*CASE*
01C530:  29 0D 0A 09 09 45 4E 44 20 28 2A 57 49 54 48 2A    )....END (*WITH*
01C540:  29 0D 0A 09 45 4E 44 20 50 3B 0D 0A 42 45 47 49    )...END P;..BEGI
01C550:  4E 0D 0A 09 70 3A 3D 71 5E 2E 50 61 74 74 65 72    N...p:=q^.Patter
01C560:  6E 4E 6F 64 65 3B 0D 0A 09 49 46 20 50 28 29 20    nNode;...IF P() 
01C570:  54 48 45 4E 0D 0A 09 09 49 46 20 74 65 6D 70 3C    THEN....IF temp<
01C580:  3E 4E 49 4C 20 54 48 45 4E 0D 0A 09 09 09 71 5E    >NIL THEN.....q^
01C590:  3A 3D 74 65 6D 70 5E 3B 0D 0A 09 09 09 44 49 53    :=temp^;.....DIS
01C5A0:  50 4F 53 45 28 74 65 6D 70 29 3B 0D 0A 09 09 45    POSE(temp);....E
01C5B0:  4C 53 45 0D 0A 20 09 09 20 20 20 20 57 49 54 48    LSE.. ..    WITH
01C5C0:  20 71 5E 20 44 4F 0D 0A 20 09 09 09 53 74 61 74     q^ DO.. ...Stat
01C5D0:  75 73 3A 3D 4D 61 74 63 68 53 74 61 74 75 73 3B    us:=MatchStatus;
01C5E0:  0D 0A 09 09 09 50 61 74 74 65 72 6E 4E 6F 64 65    .....PatternNode
01C5F0:  3A 3D 70 3B 0D 0A 09 09 09 4D 61 74 63 68 65 64    :=p;.....Matched
01C600:  41 74 3A 3D 53 74 61 72 74 50 6F 73 3B 0D 0A 09    At:=StartPos;...
01C610:  09 09 4D 61 74 63 68 65 64 54 6F 3A 3D 50 6F 73    ..MatchedTo:=Pos
01C620:  3B 0D 0A 09 09 09 4C 65 66 74 3A 3D 4D 61 74 63    ;.....Left:=Matc
01C630:  68 4C 65 66 74 3B 0D 0A 09 09 09 52 69 67 68 74    hLeft;.....Right
01C640:  3A 3D 4D 61 74 63 68 52 69 67 68 74 3B 0D 0A 09    :=MatchRight;...
01C650:  09 09 45 4E 44 3B 0D 0A 09 09 20 20 20 20 45 4E    ..END;....    EN
01C660:  44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 44 49 53    D;...ELSE....DIS
01C670:  50 4F 53 45 28 71 29 3B 0D 0A 09 09 43 68 61 6E    POSE(q);....Chan
01C680:  67 65 64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 45    ged:=FALSE;....E
01C690:  4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 71 3B 0D    ND;...RETURN q;.
01C6A0:  0A 09 45 4E 44 20 42 61 63 6B 54 72 61 63 6B 3B    ..END BackTrack;
01C6B0:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 61    ....PROCEDURE Pa
01C6C0:  74 74 65 72 6E 28 70 3A 50 4E 6F 64 65 3B 56 41    ttern(p:PNode;VA
01C6D0:  52 20 73 3A 41 52 52 41 59 20 4F 46 20 43 48 41    R s:ARRAY OF CHA
01C6E0:  52 3B 56 41 52 20 50 6F 73 3A 43 41 52 44 49 4E    R;VAR Pos:CARDIN
01C6F0:  41 4C 29 3A 50 53 74 61 74 75 73 3B 0D 0A 0D 0A    AL):PStatus;....
01C700:  74 61 74 75 73 3B 56 41 52 20 73 3A 41 52 52 41    tatus;VAR s:ARRA
01C710:  59 20 4F 46 20 43 48 41 52 3B 56 41 52 20 50 6F    Y OF CHAR;VAR Po
01C720:  73 3A 43 41 52 44 49 4E 41 4C 29 3A 50 53 74 61    s:CARDINAL):PSta
01C730:  74 75 73 3B 0D 0A 0D 0A 28 2A 09 70 65 72 66 6F    tus;....(*.perfo
01C740:  72 6D 20 62 61 63 6B 74 72 61 63 6B 69 6E 67 20    rm backtracking 
01C750:  61 66 74 65 72 20 61 20 66 61 69 6C 75 72 65 0D    after a failure.
01C760:  0A 0D 0A 09 52 65 74 75 72 6E 73 20 54 52 55 45    ....Returns TRUE
01C770:  20 69 66 20 61 20 6E 65 77 20 6D 61 74 63 68 20     if a new match 
01C780:  77 61 73 20 66 6F 75 6E 64 20 66 6F 72 20 6E 6F    was found for no
01C790:  64 65 20 70 0D 0A 0D 0A 09 4F 6E 20 65 6E 74 72    de p.....On entr
01C7A0:  79 20 74 68 65 20 66 69 72 73 74 20 74 69 6D 65    y the first time
01C7B0:  2C 20 43 68 61 6E 67 65 64 20 6D 75 73 74 20 62    , Changed must b
01C7C0:  65 20 66 61 6C 73 65 0D 0A 09 69 74 20 77 69 6C    e false...it wil
01C7D0:  6C 20 62 65 20 73 65 74 20 74 72 75 65 20 62 79    l be set true by
01C7E0:  20 74 68 65 20 66 69 72 73 74 20 6E 6F 64 65 20     the first node 
01C7F0:  77 68 69 63 68 20 65 78 74 65 6E 64 73 20 69 74    which extends it
01C800:  73 20 6D 61 74 63 68 0D 0A 09 48 65 6E 63 65 2C    s match...Hence,
01C810:  20 43 68 61 6E 67 65 64 20 6D 75 73 74 20 62 65     Changed must be
01C820:  20 74 72 75 65 20 69 66 20 62 61 63 6B 74 72 61     true if backtra
01C830:  63 6B 69 6D 6E 67 20 69 73 20 63 6F 6D 70 6C 65    ckimng is comple
01C840:  74 65 6C 79 20 73 75 63 63 65 73 73 66 75 6C 2A    tely successful*
01C850:  29 0D 0A 0D 0A 56 41 52 09 63 6F 75 6E 74 3A 43    )....VAR.count:C
01C860:  41 52 44 49 4E 41 4C 3B 0D 0A 09 53 74 61 72 74    ARDINAL;...Start
01C870:  50 6F 73 2C 4C 61 73 74 50 6F 73 3A 43 41 52 44    Pos,LastPos:CARD
01C880:  49 4E 41 4C 3B 0D 0A 09 70 3A 50 4E 6F 64 65 3B    INAL;...p:PNode;
01C890:  0D 0A 09 53 61 76 65 4D 61 74 63 68 3A 43 41 52    ...SaveMatch:CAR
01C8A0:  44 49 4E 41 4C 3B 0D 0A 09 4D 61 74 63 68 4C 65    DINAL;...MatchLe
01C8B0:  66 74 2C 4D 61 74 63 68 52 69 67 68 74 3A 50 53    ft,MatchRight:PS
01C8C0:  74 61 74 75 73 3B 0D 0A 09 74 65 6D 70 3A 50 53    tatus;...temp:PS
01C8D0:  74 61 74 75 73 3B 0D 0A 09 4D 61 74 63 68 53 74    tatus;...MatchSt
01C8E0:  61 74 75 73 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    atus:CARDINAL;..
01C8F0:  09 53 61 76 65 50 6F 73 3A 43 41 52 44 49 4E 41    .SavePos:CARDINA
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 41 02 00 00 00 02    ......R...A.....
01C920:  18 00 46 02 00 00 00 02 18 00 42 02 00 00 00 02    ..F.......B.....
01C930:  18 00 47 02 00 00 00 02 18 00 43 02 00 00 00 02    ..G.......C.....
01C940:  18 00 48 02 00 00 00 02 18 00 44 02 00 00 00 02    ..H.......D.....
01C950:  18 00 49 02 00 00 00 02 18 00 45 02 00 00 00 02    ..I.......E.....
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:  28 2A 09 54 68 69 73 20 70 72 6F 63 65 64 75 72    (*.This procedur
01CA10:  65 20 6D 61 74 63 68 65 73 20 66 6F 72 77 61 72    e matches forwar
01CA20:  64 20 2A 29 0D 0A 56 41 52 09 63 6F 75 6E 74 3A    d *)..VAR.count:
01CA30:  43 41 52 44 49 4E 41 4C 3B 0D 0A 09 53 74 61 72    CARDINAL;...Star
01CA40:  74 50 6F 73 2C 4C 61 73 74 50 6F 73 3A 43 41 52    tPos,LastPos:CAR
01CA50:  44 49 4E 41 4C 3B 0D 0A 09 53 61 76 65 4D 61 74    DINAL;...SaveMat
01CA60:  63 68 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 51    ch:CARDINAL;...Q
01CA70:  3A 50 53 74 61 74 75 73 3B 0D 0A 09 4D 61 74 63    :PStatus;...Matc
01CA80:  68 53 74 61 74 75 73 3A 43 41 52 44 49 4E 41 4C    hStatus:CARDINAL
01CA90:  3B 0D 0A 09 4D 61 74 63 68 4C 65 66 74 2C 4D 61    ;...MatchLeft,Ma
01CAA0:  74 63 68 52 69 67 68 74 3A 50 53 74 61 74 75 73    tchRight:PStatus
01CAB0:  3B 0D 0A 09 53 61 76 65 50 6F 73 3A 43 41 52 44    ;...SavePos:CARD
01CAC0:  49 4E 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45    INAL;..PROCEDURE
01CAD0:  20 50 28 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42     P():BOOLEAN;..B
01CAE0:  45 47 49 4E 0D 0A 09 28 2A 20 52 65 63 75 72 73    EGIN...(* Recurs
01CAF0:  69 76 65 6C 79 20 6D 61 74 63 68 20 74 68 65 20    ively match the 
01CB00:  70 61 74 74 65 72 6E 20 2A 29 0D 0A 09 57 49 54    pattern *)...WIT
01CB10:  48 20 70 5E 20 44 4F 0D 0A 09 20 20 20 20 53 74    H p^ DO...    St
01CB20:  61 72 74 50 6F 73 3A 3D 50 6F 73 3B 0D 0A 09 20    artPos:=Pos;... 
01CB30:  20 20 20 43 41 53 45 20 4E 54 79 70 65 20 4F 46       CASE NType OF
01CB40:  0D 0A 09 09 53 74 72 69 6E 67 3A 0D 0A 09 09 09    ....String:.....
01CB50:  49 46 20 28 4C 65 6E 2D 50 6F 73 29 3C 54 65 78    IF (Len-Pos)<Tex
01CB60:  74 4C 65 6E 20 54 48 45 4E 20 52 45 54 55 52 4E    tLen THEN RETURN
01CB70:  20 46 41 4C 53 45 0D 0A 09 09 09 45 4C 53 45 0D     FALSE.....ELSE.
01CB80:  0A 09 09 09 09 69 3A 3D 30 3B 0D 0A 09 09 09 09    .....i:=0;......
01CB90:  57 48 49 4C 45 20 28 69 3C 54 65 78 74 4C 65 6E    WHILE (i<TextLen
01CBA0:  29 20 41 4E 44 20 28 73 5B 50 6F 73 5D 3D 54 65    ) AND (s[Pos]=Te
01CBB0:  78 74 5B 69 5D 29 20 44 4F 0D 0A 09 09 09 09 09    xt[i]) DO.......
01CBC0:  49 4E 43 28 50 6F 73 29 3B 0D 0A 09 09 09 09 09    INC(Pos);.......
01CBD0:  49 4E 43 28 69 29 3B 0D 0A 09 09 09 09 09 45 4E    INC(i);.......EN
01CBE0:  44 3B 0D 0A 09 09 09 09 49 46 20 69 3D 54 65 78    D;......IF i=Tex
01CBF0:  74 4C 65 6E 20 54 48 45 4E 20 0D 0A 09 09 09 09    tLen THEN ......
01CC00:  74 74 65 72 6E 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A    ttern...........
01CC10:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01CC20:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01CC30:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01CC40:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01CC50:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01CC60:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01CC70:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01CC80:  61 74 63 68 20 73 65 76 65 72 61 6C 20 74 69 6D    atch several tim
01CC90:  65 73 20 69 6E 20 61 20 67 69 76 65 6E 0D 0A 09    es in a given...
01CCA0:  70 61 74 74 65 72 6E 2C 20 65 69 74 68 65 72 20    pattern, either 
01CCB0:  62 65 63 61 75 73 65 20 6F 66 20 72 65 63 75 72    because of recur
01CCC0:  73 69 6F 6E 2C 20 6F 72 20 62 65 63 61 75 73 65    sion, or because
01CCD0:  20 79 6F 75 20 68 61 76 65 20 63 68 6F 73 65 6E     you have chosen
01CCE0:  20 74 6F 0D 0A 09 73 61 76 65 20 73 70 61 63 65     to...save space
01CCF0:  20 62 79 20 75 73 69 6E 67 20 61 20 73 69 6E 67     by using a sing
01CD00:  6C 65 20 6E 6F 64 65 20 69 6E 20 73 65 76 65 72    le node in sever
01CD10:  61 6C 20 64 69 66 66 65 72 65 6E 74 20 70 6C 61    al different pla
01CD20:  63 65 73 20 69 6E 20 61 20 0D 0A 09 70 61 74 74    ces in a ...patt
01CD30:  65 72 6E 2E 0D 0A 0D 0A 2A 29 09 0D 0A 0D 0A 09    ern.....*)......
01CD40:  53 74 61 74 65 3D 52 45 43 4F 52 44 0D 0A 09 09    State=RECORD....
01CD50:  53 74 61 74 75 73 3A 43 41 52 44 49 4E 41 4C 3B    Status:CARDINAL;
01CD60:  09 28 2A 09 53 74 61 74 75 73 20 69 73 20 61 20    .(*.Status is a 
01CD70:  73 74 61 74 75 73 20 66 69 65 6C 64 20 75 73 65    status field use
01CD80:  64 0D 0A 09 09 09 09 09 09 66 6F 72 20 62 61 63    d........for bac
01CD90:  6B 2D 74 72 61 63 6B 69 6E 67 20 62 79 20 74 68    k-tracking by th
01CDA0:  65 20 6E 6F 64 65 0D 0A 09 09 09 09 09 09 63 6C    e node........cl
01CDB0:  61 73 73 65 73 20 41 6C 74 65 72 6E 61 74 69 76    asses Alternativ
01CDC0:  65 73 20 61 6E 64 20 0D 0A 09 09 09 09 09 09 41    es and ........A
01CDD0:  6E 79 4F 66 0D 0A 0D 0A 09 09 09 09 09 09 57 68    nyOf..........Wh
01CDE0:  65 6E 20 77 65 20 61 72 65 20 62 61 63 6B 74 72    en we are backtr
01CDF0:  61 63 6B 69 6E 67 20 74 6F 20 74 72 79 20 0D 0A    acking to try ..
01CE00:  09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A 09 09    .RETURN TRUE....
01CE10:  09 09 45 4C 53 45 0D 0A 09 09 09 09 09 50 6F 73    ..ELSE.......Pos
01CE20:  3A 3D 50 6F 73 2D 69 3B 0D 0A 09 09 09 09 09 52    :=Pos-i;.......R
01CE30:  45 54 55 52 4E 20 46 41 4C 53 45 3B 0D 0A 09 09    ETURN FALSE;....
01CE40:  09 09 09 45 4E 44 3B 0D 0A 09 09 09 09 45 4E 44    ...END;......END
01CE50:  3B 28 2A 20 6C 6F 6E 67 20 65 6E 6F 75 67 68 20    ;(* long enough 
01CE60:  74 6F 20 6D 61 74 63 68 2A 29 0D 0A 09 09 09 7C    to match*).....|
01CE70:  20 28 2A 73 74 72 69 6E 67 2A 29 0D 0A 09 09 41     (*string*)....A
01CE80:  6E 79 4F 66 3A 09 4D 61 74 63 68 53 74 61 74 75    nyOf:.MatchStatu
01CE90:  73 3A 3D 30 3B 0D 0A 09 09 09 57 48 49 4C 45 20    s:=0;.....WHILE 
01CEA0:  28 4D 61 74 63 68 53 74 61 74 75 73 3C 4D 69 6E    (MatchStatus<Min
01CEB0:  43 6F 75 6E 74 29 20 41 4E 44 20 28 73 5B 50 6F    Count) AND (s[Po
01CEC0:  73 5D 20 49 4E 20 4D 61 74 63 68 29 20 44 4F 0D    s] IN Match) DO.
01CED0:  0A 09 09 09 09 49 4E 43 28 50 6F 73 29 3B 0D 0A    .....INC(Pos);..
01CEE0:  09 09 09 09 49 4E 43 28 4D 61 74 63 68 53 74 61    ....INC(MatchSta
01CEF0:  74 75 73 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D    tus);......END;.
01CF00:  0A 09 09 09 49 46 20 46 61 73 74 20 54 48 45 4E    ....IF Fast THEN
01CF10:  0D 0A 09 09 09 09 57 48 49 4C 45 20 28 4D 61 74    ......WHILE (Mat
01CF20:  63 68 53 74 61 74 75 73 3C 4D 61 78 43 6F 75 6E    chStatus<MaxCoun
01CF30:  74 29 20 41 4E 44 20 28 73 5B 50 6F 73 5D 20 49    t) AND (s[Pos] I
01CF40:  4E 20 4D 61 74 63 68 29 20 44 4F 0D 0A 09 09 09    N Match) DO.....
01CF50:  09 09 49 4E 43 28 50 6F 73 29 3B 0D 0A 09 09 09    ..INC(Pos);.....
01CF60:  09 09 49 4E 43 28 4D 61 74 63 68 53 74 61 74 75    ..INC(MatchStatu
01CF70:  73 29 3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A    s);.......END;..
01CF80:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 52 45 54    ....END;.....RET
01CF90:  55 52 4E 20 4D 61 74 63 68 53 74 61 74 75 73 3E    URN MatchStatus>
01CFA0:  3D 4D 69 6E 43 6F 75 6E 74 3B 0D 0A 09 09 09 7C    =MinCount;.....|
01CFB0:  0D 0A 09 09 41 6C 74 65 72 6E 61 74 69 76 65 73    ....Alternatives
01CFC0:  3A 0D 0A 09 09 09 09 4D 61 74 63 68 4C 65 66 74    :......MatchLeft
01CFD0:  3A 3D 50 61 74 74 65 72 6E 28 46 69 72 73 74 2C    :=Pattern(First,
01CFE0:  73 2C 50 6F 73 29 0D 0A 09 09 09 09 49 46 20 20    s,Pos)......IF  
01CFF0:  4D 61 74 63 68 4C 65 66 74 3C 3E 4E 49 4C 20 54    MatchLeft<>NIL T
01D000:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
01D010:  4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D    ODULE ScreenIO;.
01D020:  0A 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 74 68    ...(*.This is th
01D030:  65 20 45 61 72 74 68 20 43 50 45 4D 20 76 65 72    e Earth CPEM ver
01D040:  73 69 6F 6E 20 6F 66 20 53 63 72 65 65 6E 49 4F    sion of ScreenIO
01D050:  0D 0A 0D 0A 09 59 6F 75 20 6E 65 65 64 20 72 65    .....You need re
01D060:  76 20 30 2E 32 32 20 6F 72 20 6C 61 74 65 72 20    v 0.22 or later 
01D070:  6F 66 20 43 50 45 4D 20 74 6F 20 75 73 65 20 74    of CPEM to use t
01D080:  68 69 73 20 70 72 6F 67 72 61 6D 0D 0A 09 49 74    his program...It
01D090:  20 75 73 65 73 20 69 6E 74 20 31 36 68 20 74 6F     uses int 16h to
01D0A0:  20 70 65 72 66 6F 72 6D 20 49 4F 2C 20 73 6F 20     perform IO, so 
01D0B0:  79 6F 75 72 20 6D 61 63 68 69 6E 65 20 6D 75 73    your machine mus
01D0C0:  74 20 62 65 20 49 42 4D 20 0D 0A 09 63 6F 6D 70    t be IBM ...comp
01D0D0:  61 74 69 62 6C 65 20 61 74 20 74 68 65 20 42 49    atible at the BI
01D0E0:  4F 53 20 6C 65 76 65 6C 0D 0A 0D 0A 09 54 68 69    OS level.....Thi
01D0F0:  73 20 69 73 20 61 20 73 6C 69 67 68 74 6C 79 20    s is a slightly 
01D100:  6D 6F 64 69 66 69 65 64 20 76 65 72 73 69 6F 6E    modified version
01D110:  20 6F 66 20 53 63 72 65 65 6E 49 4F 2E 49 42 4D     of ScreenIO.IBM
01D120:  20 77 68 69 63 68 20 77 69 6C 6C 0D 0A 09 62 65     which will...be
01D130:  20 61 76 61 69 6C 61 62 6C 65 20 77 68 65 6E 20     available when 
01D140:  74 68 65 20 4D 53 44 4F 53 20 76 65 72 73 69 6F    the MSDOS versio
01D150:  6E 20 6F 66 20 74 68 65 20 63 6F 6D 70 69 6C 65    n of the compile
01D160:  72 20 69 73 20 72 75 6E 6E 69 6E 67 0D 0A 0D 0A    r is running....
01D170:  09 54 68 65 20 64 69 66 66 65 72 65 6E 63 65 20    .The difference 
01D180:  69 73 20 74 68 61 74 20 74 68 69 73 20 76 65 72    is that this ver
01D190:  73 69 6F 6E 20 62 75 66 66 65 72 73 20 73 63 72    sion buffers scr
01D1A0:  65 65 6E 20 6F 75 74 70 75 74 20 69 6E 20 6F 72    een output in or
01D1B0:  64 65 72 20 74 6F 0D 0A 09 73 70 65 65 64 20 75    der to...speed u
01D1C0:  70 20 73 63 72 65 65 6E 20 6F 75 74 70 75 74 2C    p screen output,
01D1D0:  20 61 73 20 63 68 61 72 61 63 74 65 72 20 61 74     as character at
01D1E0:  20 61 20 74 69 6D 65 20 77 61 73 20 74 6F 6F 20     a time was too 
01D1F0:  73 6C 6F 77 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D    slow..*)....FROM
01D200:  48 45 4E 20 0D 0A 09 09 09 09 09 4D 61 74 63 68    HEN .......Match
01D210:  53 74 61 74 75 73 3A 3D 31 3B 0D 0A 09 09 09 09    Status:=1;......
01D220:  09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A 09 09    .RETURN TRUE....
01D230:  09 09 45 4C 53 45 0D 0A 09 09 09 09 09 0D 0A 09    ..ELSE..........
01D240:  09 09 09 09 4D 61 74 63 68 53 74 61 74 75 73 3A    ....MatchStatus:
01D250:  3D 32 3B 0D 0A 09 09 09 09 09 4D 61 74 63 68 4C    =2;.......MatchL
01D260:  65 66 74 3A 3D 50 61 74 74 65 72 6E 28 53 65 63    eft:=Pattern(Sec
01D270:  6F 6E 64 2C 73 2C 50 6F 73 29 3B 20 0D 0A 09 09    ond,s,Pos); ....
01D280:  09 09 09 52 45 54 55 52 4E 20 4D 61 74 63 68 4C    ...RETURN MatchL
01D290:  65 66 74 3C 3E 4E 49 4C 0D 0A 09 09 09 09 09 45    eft<>NIL.......E
01D2A0:  4E 44 3B 0D 0A 09 09 09 7C 0D 0A 09 09 43 6F 6E    ND;.....|....Con
01D2B0:  63 61 74 3A 0D 0A 09 09 09 4D 61 74 63 68 4C 65    cat:.....MatchLe
01D2C0:  66 74 3A 3D 50 61 74 74 65 72 6E 28 46 69 72 73    ft:=Pattern(Firs
01D2D0:  74 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 49 46    t,s,Pos);.....IF
01D2E0:  20 4D 61 74 63 68 4C 65 66 74 3C 3E 4E 49 4C 20     MatchLeft<>NIL 
01D2F0:  54 48 45 4E 0D 0A 09 09 09 09 4D 61 74 63 68 53    THEN......MatchS
01D300:  74 61 74 75 73 3A 3D 50 6F 73 3B 0D 0A 09 09 09    tatus:=Pos;.....
01D310:  09 4D 61 74 63 68 52 69 67 68 74 3A 3D 50 61 74    .MatchRight:=Pat
01D320:  74 65 72 6E 28 53 65 63 6F 6E 64 2C 73 2C 50 6F    tern(Second,s,Po
01D330:  73 29 3B 0D 0A 09 09 09 09 49 46 20 4D 61 74 63    s);......IF Matc
01D340:  68 52 69 67 68 74 3C 3E 4E 49 4C 20 54 48 45 4E    hRight<>NIL THEN
01D350:  0D 0A 09 09 09 09 09 52 45 54 55 52 4E 20 54 52    .......RETURN TR
01D360:  55 45 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09    UE.......END;...
01D370:  09 09 09 43 68 61 6E 67 65 64 3A 3D 46 41 4C 53    ...Changed:=FALS
01D380:  45 3B 0D 0A 09 09 09 09 53 61 76 65 50 6F 73 3A    E;......SavePos:
01D390:  3D 50 6F 73 3B 0D 0A 09 09 09 09 4C 4F 4F 50 0D    =Pos;......LOOP.
01D3A0:  0A 09 09 09 09 09 50 6F 73 3A 3D 53 61 76 65 50    ......Pos:=SaveP
01D3B0:  6F 73 3B 0D 0A 09 09 09 09 09 4D 61 74 63 68 4C    os;.......MatchL
01D3C0:  65 66 74 3A 3D 42 61 63 6B 54 72 61 63 6B 28 4D    eft:=BackTrack(M
01D3D0:  61 74 63 68 4C 65 66 74 2C 73 2C 50 6F 73 29 3B    atchLeft,s,Pos);
01D3E0:  0D 0A 09 09 09 09 09 49 46 20 28 4D 61 74 63 68    .......IF (Match
01D3F0:  4C 65 66 74 3D 4E 49 4C 29 20 4F 52 20 4E 4F 54    Left=NIL) OR NOT
01D400:  20 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54     Terminal IMPORT
01D410:  20 43 68 61 72 52 6F 75 74 69 6E 65 2C 43 68 61     CharRoutine,Cha
01D420:  72 45 6E 61 62 6C 65 64 2C 42 6C 69 6E 6B 52 6F    rEnabled,BlinkRo
01D430:  75 74 69 6E 65 2C 42 6C 69 6E 6B 45 6E 61 62 6C    utine,BlinkEnabl
01D440:  65 64 3B 0D 0A 46 52 4F 4D 20 53 59 53 54 45 4D    ed;..FROM SYSTEM
01D450:  20 49 4D 50 4F 52 54 20 41 44 52 2C 53 49 5A 45     IMPORT ADR,SIZE
01D460:  3B 0D 0A 46 52 4F 4D 20 43 50 4D 20 49 4D 50 4F    ;..FROM CPM IMPO
01D470:  52 54 20 77 63 63 66 63 2C 42 44 4F 53 3B 0D 0A    RT wccfc,BDOS;..
01D480:  46 52 4F 4D 20 49 6E 74 4C 6F 67 69 63 20 49 4D    FROM IntLogic IM
01D490:  50 4F 52 54 20 49 41 4E 44 3B 0D 0A 46 52 4F 4D    PORT IAND;..FROM
01D4A0:  20 53 79 73 43 61 6C 6C 20 49 4D 50 4F 52 54 20     SysCall IMPORT 
01D4B0:  49 6E 74 2C 50 61 63 6B 65 74 2C 52 65 61 64 4F    Int,Packet,ReadO
01D4C0:  72 57 72 69 74 65 3B 0D 0A 0D 0A 28 2A 09 53 63    rWrite;....(*.Sc
01D4D0:  72 65 65 6E 20 68 61 6E 64 6C 69 6E 67 20 72 6F    reen handling ro
01D4E0:  75 74 69 6E 65 73 20 66 6F 72 20 63 75 72 73 6F    utines for curso
01D4F0:  72 20 70 6F 73 69 74 69 6F 6E 2C 20 61 74 74 72    r position, attr
01D500:  69 62 75 74 65 20 65 74 63 0D 0A 0D 0A 09 53 70    ibute etc.....Sp
01D510:  65 63 69 66 69 63 20 74 6F 20 74 68 69 73 20 63    ecific to this c
01D520:  6F 6D 70 69 6C 65 72 2A 29 0D 0A 0D 0A 43 4F 4E    ompiler*)....CON
01D530:  53 54 09 4C 6F 67 53 63 72 65 65 6E 57 69 64 74    ST.LogScreenWidt
01D540:  68 3D 38 30 3B 09 28 2A 4C 6F 67 69 63 61 6C 20    h=80;.(*Logical 
01D550:  73 63 72 65 65 6E 20 77 69 64 74 68 20 0D 0A 09    screen width ...
01D560:  09 09 09 28 6D 61 6E 79 20 70 65 6F 70 6C 65 20    ...(many people 
01D570:  6F 6E 6C 79 20 68 61 76 65 20 38 30 29 2A 29 0D    only have 80)*).
01D580:  0A 09 52 6F 77 57 69 64 74 68 3D 38 30 3B 09 09    ..RowWidth=80;..
01D590:  28 2A 77 69 64 74 68 20 6F 66 20 6D 65 6D 6F 72    (*width of memor
01D5A0:  79 20 66 6F 72 20 6F 6E 65 20 72 6F 77 20 0D 0A    y for one row ..
01D5B0:  09 09 09 09 28 69 2E 65 2E 20 6E 75 6D 62 65 72    ....(i.e. number
01D5C0:  20 6F 66 20 62 79 74 65 73 2A 29 0D 0A 09 4C 6F     of bytes*)...Lo
01D5D0:  67 53 63 72 65 65 6E 44 65 70 74 68 3D 32 34 3B    gScreenDepth=24;
01D5E0:  09 09 28 2A 4C 69 6E 65 73 20 6F 6E 20 74 68 65    ..(*Lines on the
01D5F0:  20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 68 61 72     screen*)...Char
01D600:  20 43 68 61 6E 67 65 64 20 54 48 45 4E 0D 0A 09     Changed THEN...
01D610:  09 09 09 09 09 45 58 49 54 0D 0A 09 09 09 09 09    .....EXIT.......
01D620:  09 45 4E 44 3B 0D 0A 09 09 09 09 09 4D 61 74 63    .END;.......Matc
01D630:  68 52 69 67 68 74 3A 3D 50 61 74 74 65 72 6E 28    hRight:=Pattern(
01D640:  53 65 63 6F 6E 64 2C 73 2C 50 6F 73 29 0D 0A 09    Second,s,Pos)...
01D650:  09 09 09 09 49 46 20 4D 61 74 63 68 52 69 67 68    ....IF MatchRigh
01D660:  74 3C 3E 4E 49 4C 20 54 48 45 4E 0D 0A 09 09 09    t<>NIL THEN.....
01D670:  09 09 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A    ...RETURN TRUE..
01D680:  09 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 09    ......END;......
01D690:  09 43 68 61 6E 67 65 64 3A 3D 46 41 4C 53 45 3B    .Changed:=FALSE;
01D6A0:  0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09    .......END;.....
01D6B0:  09 45 4E 44 3B 0D 0A 09 09 09 50 6F 73 3A 3D 53    .END;.....Pos:=S
01D6C0:  74 61 72 74 50 6F 73 3B 0D 0A 09 09 09 52 45 54    tartPos;.....RET
01D6D0:  55 52 4E 20 46 41 4C 53 45 0D 0A 09 09 09 7C 09    URN FALSE.....|.
01D6E0:  09 09 0D 0A 09 09 52 69 67 68 74 4C 69 6D 69 74    ......RightLimit
01D6F0:  3A 0D 0A 09 09 09 52 45 54 55 52 4E 20 50 6F 73    :.....RETURN Pos
01D700:  3D 4C 65 6E 0D 0A 09 09 09 45 4E 44 3B 20 28 2A    =Len.....END; (*
01D710:  43 41 53 45 2A 29 0D 0A 09 09 45 4E 44 20 28 2A    CASE*)....END (*
01D720:  57 49 54 48 2A 29 0D 0A 09 45 4E 44 20 50 3B 0D    WITH*)...END P;.
01D730:  0A 42 45 47 49 4E 0D 0A 09 49 46 20 50 28 29 20    .BEGIN...IF P() 
01D740:  54 48 45 4E 0D 0A 09 09 4E 45 57 28 51 29 3B 0D    THEN....NEW(Q);.
01D750:  0A 09 09 57 49 54 48 20 51 5E 20 44 4F 0D 0A 09    ...WITH Q^ DO...
01D760:  09 09 53 74 61 74 75 73 3A 3D 4D 61 74 63 68 53    ..Status:=MatchS
01D770:  74 61 74 75 73 3B 0D 0A 09 09 09 50 61 74 74 65    tatus;.....Patte
01D780:  72 6E 4E 6F 64 65 3A 3D 70 3B 0D 0A 09 09 09 4D    rnNode:=p;.....M
01D790:  61 74 63 68 65 64 41 74 3A 3D 53 74 61 72 74 50    atchedAt:=StartP
01D7A0:  6F 73 3B 0D 0A 09 09 09 4D 61 74 63 68 65 64 54    os;.....MatchedT
01D7B0:  6F 3A 3D 50 6F 73 3B 0D 0A 09 09 09 4C 65 66 74    o:=Pos;.....Left
01D7C0:  3A 3D 4D 61 74 63 68 4C 65 66 74 3B 0D 0A 09 09    :=MatchLeft;....
01D7D0:  09 52 69 67 68 74 3A 3D 4D 61 74 63 68 52 69 67    .Right:=MatchRig
01D7E0:  68 74 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 45    ht;.....END;...E
01D7F0:  4C 53 45 0D 0A 09 09 51 3A 3D 4E 49 4C 3B 0D 0A    LSE....Q:=NIL;..
01D800:  49 6E 63 72 65 6D 65 6E 74 3D 31 3B 09 28 2A 6E    Increment=1;.(*n
01D810:  75 6D 62 65 72 20 6F 66 20 62 79 74 65 73 20 62    umber of bytes b
01D820:  65 74 77 65 65 6E 20 63 68 61 72 61 63 74 65 72    etween character
01D830:  73 2A 29 0D 0A 09 53 63 72 65 65 6E 53 69 7A 65    s*)...ScreenSize
01D840:  3D 38 30 2A 32 34 3B 09 28 2A 6E 75 6D 62 65 72    =80*24;.(*number
01D850:  20 6F 66 20 62 79 74 65 73 20 69 6E 20 73 63 72     of bytes in scr
01D860:  65 65 6E 20 61 72 65 61 2A 29 0D 0A 0D 0A 09 43    een area*).....C
01D870:  52 3D 30 64 78 3B 09 09 09 28 2A 43 61 72 72 69    R=0dx;...(*Carri
01D880:  61 67 65 20 72 65 74 75 72 6E 2A 29 0D 0A 09 4C    age return*)...L
01D890:  46 3D 30 61 78 3B 09 09 09 28 2A 4C 69 6E 65 20    F=0ax;...(*Line 
01D8A0:  66 65 65 64 2A 29 0D 0A 09 54 41 42 3D 30 39 78    feed*)...TAB=09x
01D8B0:  3B 09 09 28 2A 54 41 42 2A 29 0D 0A 09 42 53 3D    ;..(*TAB*)...BS=
01D8C0:  30 38 78 3B 0D 0A 56 41 52 0D 0A 09 42 75 66 66    08x;..VAR...Buff
01D8D0:  65 72 3A 41 52 52 41 59 5B 30 2E 2E 31 32 35 5D    er:ARRAY[0..125]
01D8E0:  20 4F 46 20 42 59 54 45 3B 20 28 2A 42 75 66 66     OF BYTE; (*Buff
01D8F0:  65 72 20 66 6F 72 20 75 70 20 74 6F 20 61 20 6C    er for up to a l
01D900:  69 6E 65 20 2A 29 0D 0A 09 42 61 73 65 41 64 64    ine *)...BaseAdd
01D910:  72 3A 43 41 52 44 49 4E 41 4C 3D 30 42 30 30 30    r:CARDINAL=0B000
01D920:  68 3B 20 28 2A 73 65 67 20 61 64 64 72 65 73 73    h; (*seg address
01D930:  20 6F 66 20 61 64 61 70 74 65 72 20 2D 20 63 68     of adapter - ch
01D940:  61 6E 67 65 20 66 6F 72 20 63 6F 6C 6F 75 72 2A    ange for colour*
01D950:  29 0D 0A 09 42 75 66 66 65 72 52 6F 77 3A 43 41    )...BufferRow:CA
01D960:  52 44 49 4E 41 4C 3B 09 28 2A 52 6F 77 20 42 65    RDINAL;.(*Row Be
01D970:  69 6E 67 20 73 61 76 65 64 20 2A 29 0D 0A 09 42    ing saved *)...B
01D980:  75 66 66 65 72 43 6F 6C 3A 43 41 52 44 49 4E 41    ufferCol:CARDINA
01D990:  4C 3B 09 28 2A 53 74 61 72 74 20 43 6F 6C 75 6D    L;.(*Start Colum
01D9A0:  6E 2A 29 0D 0A 09 42 75 66 66 65 72 43 6F 75 6E    n*)...BufferCoun
01D9B0:  74 3A 43 41 52 44 49 4E 41 4C 3D 30 3B 20 28 2A    t:CARDINAL=0; (*
01D9C0:  45 4E 74 72 69 65 73 20 69 6E 20 62 75 66 66 65    ENtries in buffe
01D9D0:  72 20 2A 29 09 0D 0A 09 41 74 74 72 69 62 75 74    r *)....Attribut
01D9E0:  65 73 3A 43 41 52 44 49 4E 41 4C 3D 37 3B 0D 0A    es:CARDINAL=7;..
01D9F0:  09 53 63 72 65 65 6E 50 6F 73 3A 43 41 52 44 49    .ScreenPos:CARDI
01DA00:  09 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20    ..END;...RETURN 
01DA10:  51 3B 0D 0A 09 45 4E 44 20 50 61 74 74 65 72 6E    Q;...END Pattern
01DA20:  3B 0D 0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45    ;......PROCEDURE
01DA30:  20 4D 61 74 63 68 50 61 74 74 65 72 6E 28 70 3A     MatchPattern(p:
01DA40:  50 4E 6F 64 65 3B 73 3A 41 52 52 41 59 20 4F 46    PNode;s:ARRAY OF
01DA50:  20 43 48 41 52 29 3A 50 53 74 61 74 75 73 3B 0D     CHAR):PStatus;.
01DA60:  0A 0D 0A 28 2A 09 4D 61 74 63 68 20 61 20 50 61    ...(*.Match a Pa
01DA70:  74 74 65 72 6E 20 0D 0A 09 70 20 69 73 20 74 68    ttern ...p is th
01DA80:  65 20 72 6F 6F 74 20 6F 66 20 74 68 65 20 70 61    e root of the pa
01DA90:  74 74 65 72 6E 20 74 6F 20 6D 61 74 63 68 0D 0A    ttern to match..
01DAA0:  09 73 20 69 73 20 74 68 65 20 74 65 78 74 20 74    .s is the text t
01DAB0:  6F 20 6D 61 74 63 68 0D 0A 0D 0A 09 54 68 65 20    o match.....The 
01DAC0:  66 75 6E 63 74 69 6F 6E 20 72 65 74 75 72 6E 73    function returns
01DAD0:  20 74 72 75 65 20 6F 6E 6C 79 20 69 66 20 74 68     true only if th
01DAE0:  65 20 73 74 72 69 6E 67 20 6D 61 74 63 68 65 73    e string matches
01DAF0:  0D 0A 09 63 6F 6D 70 6C 65 74 65 6C 79 2E 0D 0A    ...completely...
01DB00:  0D 0A 09 4F 66 20 63 6F 75 72 73 65 2C 20 79 6F    ...Of course, yo
01DB10:  75 20 63 61 6E 20 61 6C 77 61 79 73 20 75 73 65    u can always use
01DB20:  64 20 72 65 70 65 61 74 65 64 20 73 65 74 73 20    d repeated sets 
01DB30:  6F 66 20 61 6E 79 74 68 69 6E 67 0D 0A 09 61 74    of anything...at
01DB40:  20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 61     the beginning a
01DB50:  6E 64 2E 6F 72 20 65 6E 64 20 6F 66 20 61 20 73    nd.or end of a s
01DB60:  74 72 69 6E 67 20 69 6E 20 6F 72 64 65 72 20 74    tring in order t
01DB70:  6F 0D 0A 09 6D 61 74 63 68 20 6F 6E 6C 79 20 70    o...match only p
01DB80:  61 72 74 20 6F 66 20 61 20 73 74 72 69 6E 67 2A    art of a string*
01DB90:  29 0D 0A 0D 0A 56 41 52 09 50 6F 73 3A 43 41 52    )....VAR.Pos:CAR
01DBA0:  44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09    DINAL;..BEGIN...
01DBB0:  50 6F 73 3A 3D 30 3B 0D 0A 09 4C 65 6E 3A 3D 4C    Pos:=0;...Len:=L
01DBC0:  65 6E 67 74 68 28 73 29 3B 0D 0A 09 52 45 54 55    ength(s);...RETU
01DBD0:  52 4E 20 50 61 74 74 65 72 6E 28 70 2C 73 2C 50    RN Pattern(p,s,P
01DBE0:  6F 73 29 3B 0D 0A 09 45 4E 44 20 4D 61 74 63 68    os);...END Match
01DBF0:  50 61 74 74 65 72 6E 3B 0D 0A 45 4E 44 20 50 61    Pattern;..END Pa
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 41 02 00 00 00 02    ......R...A.....
01DC20:  19 00 46 02 00 00 00 02 19 00 42 02 00 00 00 02    ..F.......B.....
01DC30:  19 00 47 02 00 00 00 02 19 00 43 02 00 00 00 02    ..G.......C.....
01DC40:  19 00 48 02 00 00 00 02 19 00 44 02 00 00 00 02    ..H.......D.....
01DC50:  19 00 49 02 00 00 00 02 19 00 45 02 00 00 00 02    ..I.......E.....
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:  4E 41 4C 3B 09 28 2A 6E 65 78 74 20 63 68 61 72    NAL;.(*next char
01DD10:  61 63 74 65 72 20 70 6F 73 69 74 69 6F 6E 20 6F    acter position o
01DD20:  6E 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 6F 6C    n screen*)...Col
01DD30:  4E 6F 2C 52 6F 77 4E 6F 3A 43 41 52 44 49 4E 41    No,RowNo:CARDINA
01DD40:  4C 3B 09 28 2A 77 68 69 63 68 20 72 65 70 72 65    L;.(*which repre
01DD50:  73 65 6E 74 73 20 74 68 65 20 67 69 76 65 6E 20    sents the given 
01DD60:  70 6F 73 69 74 69 6F 6E 2A 29 0D 0A 0D 0A 09 28    position*).....(
01DD70:  2A 09 43 6F 6E 74 72 6F 6C 20 61 74 74 72 69 62    *.Control attrib
01DD80:  75 74 65 73 2A 29 0D 0A 0D 0A 09 48 61 6C 66 49    utes*).....HalfI
01DD90:  6E 74 65 6E 73 69 74 79 3A 42 4F 4F 4C 45 41 4E    ntensity:BOOLEAN
01DDA0:  3D 46 41 4C 53 45 3B 09 28 2A 74 72 75 65 20 69    =FALSE;.(*true i
01DDB0:  66 20 69 6E 20 68 61 6C 66 20 69 6E 74 65 6E 73    f in half intens
01DDC0:  69 74 79 20 6D 6F 64 65 2A 29 0D 0A 09 45 6E 68    ity mode*)...Enh
01DDD0:  61 6E 63 65 64 56 69 64 65 6F 3A 42 4F 4F 4C 45    ancedVideo:BOOLE
01DDE0:  41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 55 6E 64 65    AN=FALSE;...Unde
01DDF0:  72 4C 69 6E 65 3A 42 4F 4F 4C 45 41 4E 3D 46 41    rLine:BOOLEAN=FA
01DE00:  4C 53 45 3B 09 28 2A 74 72 75 65 20 69 66 20 69    LSE;.(*true if i
01DE10:  6E 20 75 6E 64 65 72 6C 69 6E 65 20 6D 6F 64 65    n underline mode
01DE20:  2A 29 0D 0A 09 49 6E 76 65 72 73 65 56 69 64 65    *)...InverseVide
01DE30:  6F 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B    o:BOOLEAN=FALSE;
01DE40:  0D 0A 09 42 6C 69 6E 6B 69 6E 67 3A 42 4F 4F 4C    ...Blinking:BOOL
01DE50:  45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 69 2C 6A    EAN=FALSE;...i,j
01DE60:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 63 68 3A    :CARDINAL;...ch:
01DE70:  43 48 41 52 3B 0D 0A 0D 0A 28 2A 09 54 68 65 20    CHAR;....(*.The 
01DE80:  6E 65 78 74 20 66 65 77 20 72 6F 75 74 69 6E 65    next few routine
01DE90:  73 20 68 61 6E 64 6C 65 20 74 68 65 20 63 75 72    s handle the cur
01DEA0:  73 6F 72 0D 0A 0D 0A 09 57 61 73 55 6E 64 65 72    sor.....WasUnder
01DEB0:  4C 69 6E 65 64 20 69 73 20 74 72 75 65 20 69 66    Lined is true if
01DEC0:  20 74 68 65 20 63 68 61 72 61 63 74 65 72 20 75     the character u
01DED0:  6E 64 65 72 20 74 68 65 20 63 75 72 73 6F 72 0D    nder the cursor.
01DEE0:  0A 09 73 74 61 72 74 65 64 20 6F 75 74 20 75 6E    ..started out un
01DEF0:  64 65 72 6C 69 6E 65 64 0D 0A 09 0D 0A 09 54 69    derlined......Ti
01DF00:  77 4E 6F 29 20 4F 52 20 28 42 75 66 66 65 72 43    wNo) OR (BufferC
01DF10:  6F 6C 2A 32 2B 42 75 66 66 65 72 43 6F 75 6E 74    ol*2+BufferCount
01DF20:  3C 3E 32 2A 43 6F 6C 4E 6F 29 0D 0A 09 09 4F 52    <>2*ColNo)....OR
01DF30:  20 28 42 75 66 66 65 72 43 6F 75 6E 74 3D 31 32     (BufferCount=12
01DF40:  36 29 20 54 48 45 4E 20 0D 0A 09 09 46 6C 75 73    6) THEN ....Flus
01DF50:  68 42 75 66 66 65 72 3B 0D 0A 09 09 45 4E 44 3B    hBuffer;....END;
01DF60:  0D 0A 09 49 46 20 42 75 66 66 65 72 43 6F 75 6E    ...IF BufferCoun
01DF70:  74 3D 30 20 54 48 45 4E 0D 0A 09 09 42 75 66 66    t=0 THEN....Buff
01DF80:  65 72 52 6F 77 3A 3D 52 6F 77 4E 6F 3B 0D 0A 09    erRow:=RowNo;...
01DF90:  09 42 75 66 66 65 72 43 6F 6C 3A 3D 43 6F 6C 4E    .BufferCol:=ColN
01DFA0:  6F 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 42 75 66    o;....END;...Buf
01DFB0:  66 65 72 5B 42 75 66 66 65 72 43 6F 75 6E 74 5D    fer[BufferCount]
01DFC0:  3A 3D 4F 52 44 28 63 68 29 3B 0D 0A 09 49 4E 43    :=ORD(ch);...INC
01DFD0:  28 42 75 66 66 65 72 43 6F 75 6E 74 29 3B 0D 0A    (BufferCount);..
01DFE0:  09 42 75 66 66 65 72 5B 42 75 66 66 65 72 43 6F    .Buffer[BufferCo
01DFF0:  75 6E 74 5D 3A 3D 41 74 74 72 69 62 75 74 65 73    unt]:=Attributes
01E000:  3B 0D 0A 09 49 4E 43 28 42 75 66 66 65 72 43 6F    ;...INC(BufferCo
01E010:  75 6E 74 29 3B 0D 0A 09 53 63 72 65 65 6E 50 6F    unt);...ScreenPo
01E020:  73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B 43 68 61    s:=ScreenPos+Cha
01E030:  72 49 6E 63 72 65 6D 65 6E 74 3B 0D 0A 09 49 4E    rIncrement;...IN
01E040:  43 28 43 6F 6C 4E 6F 29 3B 0D 0A 09 49 46 20 43    C(ColNo);...IF C
01E050:  6F 6C 4E 6F 3E 3D 4C 6F 67 53 63 72 65 65 6E 57    olNo>=LogScreenW
01E060:  69 64 74 68 20 54 48 45 4E 0D 0A 09 09 49 46 20    idth THEN....IF 
01E070:  52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 72 65 65 6E    RowNo<(LogScreen
01E080:  44 65 70 74 68 2D 31 29 20 54 48 45 4E 0D 0A 09    Depth-1) THEN...
01E090:  09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09    ..INC(RowNo);...
01E0A0:  09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 09 45    ..ColNo:=0;....E
01E0B0:  4C 53 45 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E    LSE.....DEC(ColN
01E0C0:  6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65    o);.....DEC(Scre
01E0D0:  65 6E 50 6F 73 29 3B 0D 0A 09 09 09 45 4E 44 3B    enPos);.....END;
01E0E0:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 50    ....END;...END P
01E0F0:  75 74 61 6E 64 49 6E 63 3B 0D 0A 0D 0A 50 52 4F    utandInc;....PRO
01E100:  6D 65 54 6F 43 68 61 6E 67 65 20 69 73 20 61 20    meToChange is a 
01E110:  63 6F 75 6E 74 65 72 20 74 68 61 74 20 64 65 74    counter that det
01E120:  65 72 6D 69 6E 65 73 20 77 68 65 6E 20 74 68 65    ermines when the
01E130:  20 63 75 72 73 6F 72 20 73 68 6F 75 6C 64 0D 0A     cursor should..
01E140:  09 62 65 20 63 68 61 6E 67 65 64 20 66 72 6F 6D    .be changed from
01E150:  20 69 74 73 20 63 75 72 72 65 6E 74 20 76 61 6C     its current val
01E160:  75 65 20 74 6F 20 69 74 73 20 6E 65 67 61 74 69    ue to its negati
01E170:  76 65 2C 20 74 6F 20 61 6C 6C 6F 77 20 62 6C 69    ve, to allow bli
01E180:  6E 6B 69 6E 67 0D 0A 2A 29 0D 0A 56 41 52 09 57    nking..*)..VAR.W
01E190:  61 73 55 6E 64 65 72 4C 69 6E 65 64 3A 42 4F 4F    asUnderLined:BOO
01E1A0:  4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 54 69    LEAN=FALSE;...Ti
01E1B0:  6D 65 54 6F 43 68 61 6E 67 65 3A 49 4E 54 45 47    meToChange:INTEG
01E1C0:  45 52 3D 30 3B 0D 0A 09 4F 75 74 70 75 74 45 6E    ER=0;...OutputEn
01E1D0:  61 62 6C 65 64 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A    abled:BOOLEAN;..
01E1E0:  09 70 3A 50 61 63 6B 65 74 3B 0D 0A 28 2A 09 42    .p:Packet;..(*.B
01E1F0:  6C 69 6E 6B 20 63 75 72 73 6F 72 20 2D 20 64 65    link cursor - de
01E200:  63 72 65 6D 65 6E 74 20 74 69 6D 65 72 2C 20 69    crement timer, i
01E210:  66 20 6E 65 67 61 74 69 76 65 20 72 65 73 65 74    f negative reset
01E220:  20 61 6E 64 0D 0A 09 63 68 61 6E 67 65 20 74 6F     and...change to
01E230:  70 20 62 69 74 20 6F 66 20 63 68 61 72 61 63 74    p bit of charact
01E240:  65 72 20 75 6E 64 65 72 20 63 75 72 73 6F 72 2A    er under cursor*
01E250:  29 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74    )..PROCEDURE Set
01E260:  43 75 72 73 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A    Cursor;..BEGIN..
01E270:  28 2A 09 4D 6F 76 65 20 63 75 72 73 6F 72 20 74    (*.Move cursor t
01E280:  6F 20 63 75 72 72 65 6E 74 20 73 63 72 65 65 6E    o current screen
01E290:  20 70 6F 73 69 74 69 6F 6E 20 2A 29 0D 0A 0D 0A     position *)....
01E2A0:  09 57 49 54 48 20 70 20 44 4F 0D 0A 09 09 41 58    .WITH p DO....AX
01E2B0:  3A 3D 30 32 30 30 68 3B 0D 0A 09 09 44 58 3A 3D    :=0200h;....DX:=
01E2C0:  32 35 36 2A 52 6F 77 4E 6F 2B 43 6F 6C 4E 6F 3B    256*RowNo+ColNo;
01E2D0:  0D 0A 09 09 42 58 3A 3D 30 3B 0D 0A 09 09 45 4E    ....BX:=0;....EN
01E2E0:  44 3B 0D 0A 09 49 6E 74 28 70 29 3B 0D 0A 09 0D    D;...Int(p);....
01E2F0:  0A 0D 0A 28 2A 09 57 61 73 55 6E 64 65 72 4C 69    ...(*.WasUnderLi
01E300:  43 45 44 55 52 45 20 57 72 69 74 65 28 63 68 3A    CEDURE Write(ch:
01E310:  43 48 41 52 29 3B 0D 0A 28 2A 09 57 72 69 74 65    CHAR);..(*.Write
01E320:  20 61 20 63 68 61 72 61 63 74 65 72 0D 0A 0D 0A     a character....
01E330:  09 54 68 69 73 20 72 6F 75 74 69 6E 65 20 69 73    .This routine is
01E340:  20 75 73 65 64 20 62 79 20 74 65 72 6D 69 6E 61     used by termina
01E350:  6C 20 77 68 65 6E 20 74 68 69 73 20 76 65 72 73    l when this vers
01E360:  69 6F 6E 20 6F 66 20 53 63 72 65 65 6E 49 4F 20    ion of ScreenIO 
01E370:  0D 0A 09 69 73 20 69 6E 20 75 73 65 20 62 65 63    ...is in use bec
01E380:  61 75 73 65 20 61 20 66 6C 61 67 20 69 73 20 73    ause a flag is s
01E390:  65 74 20 62 79 20 74 68 65 20 69 6E 69 74 69 61    et by the initia
01E3A0:  6C 69 73 61 74 69 6F 6E 20 6F 66 20 74 68 69 73    lisation of this
01E3B0:  20 6D 6F 64 75 6C 65 20 0D 0A 09 74 6F 67 65 74     module ...toget
01E3C0:  68 65 72 20 77 69 74 68 20 74 68 65 20 61 64 64    her with the add
01E3D0:  72 65 73 73 20 6F 66 20 74 68 69 73 20 72 6F 75    ress of this rou
01E3E0:  74 69 6E 65 0D 0A 0D 0A 2A 29 0D 0A 42 45 47 49    tine....*)..BEGI
01E3F0:  4E 0D 0A 20 20 20 20 49 46 20 4F 75 74 70 75 74    N..    IF Output
01E400:  45 6E 61 62 6C 65 64 20 54 48 45 4E 0D 0A 09 43    Enabled THEN...C
01E410:  6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 09 49 46    learCursor;...IF
01E420:  20 63 68 3E 30 37 66 78 20 54 48 45 4E 20 63 68     ch>07fx THEN ch
01E430:  3A 3D 43 48 52 28 4F 52 44 28 63 68 29 2D 31 32    :=CHR(ORD(ch)-12
01E440:  38 29 20 45 4E 44 3B 0D 0A 09 49 46 20 63 68 3D    8) END;...IF ch=
01E450:  43 52 20 54 48 45 4E 0D 0A 09 09 53 63 72 65 65    CR THEN....Scree
01E460:  6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2D    nPos:=ScreenPos-
01E470:  43 6F 6C 4E 6F 3B 0D 0A 09 09 43 6F 6C 4E 6F 3A    ColNo;....ColNo:
01E480:  3D 30 3B 0D 0A 09 45 4C 53 49 46 20 63 68 3D 4C    =0;...ELSIF ch=L
01E490:  46 20 54 48 45 4E 0D 0A 09 09 49 46 20 52 6F 77    F THEN....IF Row
01E4A0:  4E 6F 3C 28 4C 6F 67 53 63 72 65 65 6E 44 65 70    No<(LogScreenDep
01E4B0:  74 68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 49    th-1) THEN.....I
01E4C0:  4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53    NC(RowNo);.....S
01E4D0:  63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E    creenPos:=Screen
01E4E0:  50 6F 73 2B 52 6F 77 57 69 64 74 68 3B 0D 0A 09    Pos+RowWidth;...
01E4F0:  09 09 45 4E 44 0D 0A 09 45 4C 53 49 46 20 63 68    ..END...ELSIF ch
01E500:  6E 65 64 3A 3D 53 63 72 65 65 6E 5B 53 63 72 65    ned:=Screen[Scre
01E510:  65 6E 50 6F 73 5D 3E 3D 38 30 78 3B 0D 0A 09 53    enPos]>=80x;...S
01E520:  63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D    creen[ScreenPos]
01E530:  3A 3D 43 48 52 28 4F 52 44 28 53 63 72 65 65 6E    :=CHR(ORD(Screen
01E540:  5B 53 63 72 65 65 6E 50 6F 73 5D 29 2B 31 32 38    [ScreenPos])+128
01E550:  29 3B 2A 29 0D 0A 09 45 4E 44 20 53 65 74 43 75    );*)...END SetCu
01E560:  72 73 6F 72 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    rsor;....PROCEDU
01E570:  52 45 20 46 6C 75 73 68 42 75 66 66 65 72 3B 0D    RE FlushBuffer;.
01E580:  0A 56 41 52 09 70 3A 50 61 63 6B 65 74 3B 0D 0A    .VAR.p:Packet;..
01E590:  42 45 47 49 4E 0D 0A 09 49 46 20 42 75 66 66 65    BEGIN...IF Buffe
01E5A0:  72 43 6F 75 6E 74 3E 30 20 54 48 45 4E 20 0D 0A    rCount>0 THEN ..
01E5B0:  09 09 57 49 54 48 20 70 20 44 4F 0D 0A 09 09 09    ..WITH p DO.....
01E5C0:  49 6E 74 4E 6F 3A 3D 42 75 66 66 65 72 43 6F 75    IntNo:=BufferCou
01E5D0:  6E 74 3B 0D 0A 09 09 09 41 58 3A 3D 41 44 52 28    nt;.....AX:=ADR(
01E5E0:  42 75 66 66 65 72 29 3B 0D 0A 09 09 09 42 58 3A    Buffer);.....BX:
01E5F0:  3D 42 75 66 66 65 72 52 6F 77 2A 31 36 30 2B 42    =BufferRow*160+B
01E600:  75 66 66 65 72 43 6F 6C 2A 32 3B 0D 0A 09 09 09    ufferCol*2;.....
01E610:  43 58 3A 3D 42 61 73 65 41 64 64 72 3B 0D 0A 09    CX:=BaseAddr;...
01E620:  09 09 52 65 61 64 4F 72 57 72 69 74 65 28 54 52    ..ReadOrWrite(TR
01E630:  55 45 2C 70 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D    UE,p);.....END;.
01E640:  0A 09 09 45 4E 44 3B 0D 0A 09 42 75 66 66 65 72    ...END;...Buffer
01E650:  43 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 53 65 74 43    Count:=0;...SetC
01E660:  75 72 73 6F 72 3B 0D 0A 09 45 4E 44 20 46 6C 75    ursor;...END Flu
01E670:  73 68 42 75 66 66 65 72 3B 0D 0A 0D 0A 50 52 4F    shBuffer;....PRO
01E680:  43 45 44 55 52 45 20 42 6C 69 6E 6B 43 75 72 73    CEDURE BlinkCurs
01E690:  6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 28 2A 09 09    or;..BEGIN..(*..
01E6A0:  44 6F 65 73 20 6E 6F 74 68 69 6E 67 20 28 79 65    Does nothing (ye
01E6B0:  74 29 20 6F 6E 20 45 61 72 74 68 20 63 61 72 64    t) on Earth card
01E6C0:  20 76 65 72 73 69 6F 6E 20 0D 0A 09 44 45 43 28     version ...DEC(
01E6D0:  54 69 6D 65 54 6F 43 68 61 6E 67 65 29 3B 0D 0A    TimeToChange);..
01E6E0:  09 49 46 20 54 69 6D 65 54 6F 43 68 61 6E 67 65    .IF TimeToChange
01E6F0:  3C 30 20 54 48 45 4E 0D 0A 09 09 54 69 6D 65 54    <0 THEN....TimeT
01E700:  3D 42 53 20 54 48 45 4E 0D 0A 09 09 49 46 20 43    =BS THEN....IF C
01E710:  6F 6C 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09    olNo>0 THEN.....
01E720:  44 45 43 28 43 6F 6C 4E 6F 29 3B 0D 0A 09 09 09    DEC(ColNo);.....
01E730:  44 45 43 28 53 63 72 65 65 6E 50 6F 73 29 3B 0D    DEC(ScreenPos);.
01E740:  0A 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49 46 20    ....END...ELSIF 
01E750:  63 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 09 4C    ch=TAB THEN....L
01E760:  4F 4F 50 0D 0A 09 09 09 49 46 20 43 6F 6C 4E 6F    OOP.....IF ColNo
01E770:  3E 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68    >=LogScreenWidth
01E780:  2D 31 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44    -1 THEN EXIT END
01E790:  3B 0D 0A 09 09 09 50 75 74 61 6E 64 49 6E 63 28    ;.....PutandInc(
01E7A0:  27 20 27 29 3B 0D 0A 09 09 09 49 46 20 49 41 4E    ' ');.....IF IAN
01E7B0:  44 28 43 6F 6C 4E 6F 2C 37 29 3D 30 20 54 48 45    D(ColNo,7)=0 THE
01E7C0:  4E 20 45 58 49 54 20 45 4E 44 0D 0A 09 09 09 45    N EXIT END.....E
01E7D0:  4E 44 20 28 2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4C    ND (*LOOP*)...EL
01E7E0:  53 45 0D 0A 09 09 49 46 20 55 6E 64 65 72 4C 69    SE....IF UnderLi
01E7F0:  6E 65 20 4F 52 20 45 6E 68 61 6E 63 65 64 56 69    ne OR EnhancedVi
01E800:  64 65 6F 20 4F 52 20 42 6C 69 6E 6B 69 6E 67 20    deo OR Blinking 
01E810:  4F 52 20 49 6E 76 65 72 73 65 56 69 64 65 6F 20    OR InverseVideo 
01E820:  54 48 45 4E 0D 0A 09 09 09 41 74 74 72 69 62 75    THEN.....Attribu
01E830:  74 65 73 3A 3D 31 3B 0D 0A 09 09 09 45 4E 44 3B    tes:=1;.....END;
01E840:  0D 0A 09 09 50 75 74 61 6E 64 49 6E 63 28 63 68    ....PutandInc(ch
01E850:  29 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 4E 6F 74    );....END; (*Not
01E860:  20 43 52 20 6F 72 20 4C 46 20 6F 72 20 54 41 42     CR or LF or TAB
01E870:  2A 29 0D 0A 09 41 74 74 72 69 62 75 74 65 73 3A    *)...Attributes:
01E880:  3D 37 3B 0D 0A 09 53 65 74 43 75 72 73 6F 72 3B    =7;...SetCursor;
01E890:  0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45 4E 44    ...END;..    END
01E8A0:  20 57 72 69 74 65 3B 0D 0A 0D 0A 50 52 4F 43 45     Write;....PROCE
01E8B0:  44 55 52 45 20 53 63 72 65 65 6E 43 6F 6E 74 72    DURE ScreenContr
01E8C0:  6F 6C 28 73 3A 45 64 69 74 73 29 3B 0D 0A 0D 0A    ol(s:Edits);....
01E8D0:  28 2A 09 09 50 65 72 66 6F 72 6D 20 61 20 73 63    (*..Perform a sc
01E8E0:  72 65 65 6E 20 63 6F 6E 74 72 6F 6C 20 6F 70 65    reen control ope
01E8F0:  72 61 74 69 6F 6E 0D 0A 0D 0A 09 09 4D 61 79 20    ration......May 
01E900:  6F 43 68 61 6E 67 65 3A 3D 39 30 30 3B 09 28 2A    oChange:=900;.(*
01E910:  63 68 61 6E 67 65 20 74 6F 20 63 68 61 6E 67 65    change to change
01E920:  20 62 6C 69 6E 6B 20 72 61 74 65 2A 29 0D 0A 09     blink rate*)...
01E930:  09 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F    .Screen[ScreenPo
01E940:  73 5D 3A 3D 43 48 52 28 4F 52 44 28 53 63 72 65    s]:=CHR(ORD(Scre
01E950:  65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 29 2B 31    en[ScreenPos])+1
01E960:  32 38 29 0D 0A 09 09 45 4E 44 0D 0A 2A 29 0D 0A    28)....END..*)..
01E970:  09 46 6C 75 73 68 42 75 66 66 65 72 3B 0D 0A 09    .FlushBuffer;...
01E980:  45 4E 44 20 42 6C 69 6E 6B 43 75 72 73 6F 72 3B    END BlinkCursor;
01E990:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C    ....PROCEDURE Cl
01E9A0:  65 61 72 43 75 72 73 6F 72 3B 0D 0A 42 45 47 49    earCursor;..BEGI
01E9B0:  4E 0D 0A 28 2A 09 41 6C 73 6F 20 75 6E 2D 69 6D    N..(*.Also un-im
01E9C0:  70 6C 65 6D 65 6E 74 65 64 0D 0A 0D 0A 09 49 46    plemented.....IF
01E9D0:  20 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50     (Screen[ScreenP
01E9E0:  6F 73 5D 3E 37 66 78 29 3C 3E 57 61 73 55 6E 64    os]>7fx)<>WasUnd
01E9F0:  65 72 4C 69 6E 65 64 20 54 48 45 4E 0D 0A 09 09    erLined THEN....
01EA00:  53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73    Screen[ScreenPos
01EA10:  5D 3A 3D 43 48 52 28 4F 52 44 28 53 63 72 65 65    ]:=CHR(ORD(Scree
01EA20:  6E 5B 53 63 72 65 65 6E 50 6F 73 5D 29 2B 31 32    n[ScreenPos])+12
01EA30:  38 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 61    8);....END;...Wa
01EA40:  73 55 6E 64 65 72 4C 69 6E 65 64 3A 3D 46 41 4C    sUnderLined:=FAL
01EA50:  53 45 3B 0D 0A 2A 29 0D 0A 09 45 4E 44 20 43 6C    SE;..*)...END Cl
01EA60:  65 61 72 43 75 72 73 6F 72 3B 0D 0A 09 09 09 0D    earCursor;......
01EA70:  0A 09 09 09 0D 0A 50 52 4F 43 45 44 55 52 45 20    ......PROCEDURE 
01EA80:  47 6F 74 6F 78 79 28 78 2C 79 3A 43 41 52 44 49    Gotoxy(x,y:CARDI
01EA90:  4E 41 4C 29 3B 09 09 0D 0A 0D 0A 28 2A 09 09 50    NAL);......(*..P
01EAA0:  6F 73 69 74 69 6F 6E 20 74 6F 20 67 69 76 65 6E    osition to given
01EAB0:  20 63 6F 6F 72 64 69 6E 61 74 65 73 0D 0A 09 09     coordinates....
01EAC0:  74 6F 70 20 6C 65 66 74 20 69 73 20 61 6C 77 61    top left is alwa
01EAD0:  79 73 20 30 2C 30 20 0D 0A 0D 0A 09 09 78 20 69    ys 0,0 ......x i
01EAE0:  73 20 63 6F 6C 75 6D 6E 2C 20 79 20 69 73 20 72    s column, y is r
01EAF0:  6F 77 0D 0A 0D 0A 09 09 41 20 27 53 74 61 6E 64    ow......A 'Stand
01EB00:  6E 65 65 64 20 61 6C 74 65 72 61 74 69 6F 6E 20    need alteration 
01EB10:  66 6F 72 20 76 61 72 69 6F 75 73 20 6D 61 63 68    for various mach
01EB20:  69 6E 65 73 2A 29 0D 0A 42 45 47 49 4E 0D 0A 20    ines*)..BEGIN.. 
01EB30:  20 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62       IF OutputEnab
01EB40:  6C 65 64 20 54 48 45 4E 0D 0A 09 46 6C 75 73 68    led THEN...Flush
01EB50:  42 75 66 66 65 72 3B 0D 0A 09 43 6C 65 61 72 43    Buffer;...ClearC
01EB60:  75 72 73 6F 72 3B 0D 0A 09 43 41 53 45 20 73 20    ursor;...CASE s 
01EB70:  4F 46 0D 0A 09 44 69 6D 3A 48 61 6C 66 49 6E 74    OF...Dim:HalfInt
01EB80:  65 6E 73 69 74 79 3A 3D 54 52 55 45 7C 0D 0A 09    ensity:=TRUE|...
01EB90:  42 72 69 67 68 74 3A 09 48 61 6C 66 49 6E 74 65    Bright:.HalfInte
01EBA0:  6E 73 69 74 79 3A 3D 46 41 4C 53 45 0D 0A 09 09    nsity:=FALSE....
01EBB0:  45 6E 68 61 6E 63 65 64 56 69 64 65 6F 3A 3D 54    EnhancedVideo:=T
01EBC0:  52 55 45 7C 0D 0A 09 4E 6F 72 6D 61 6C 3A 09 48    RUE|...Normal:.H
01EBD0:  61 6C 66 49 6E 74 65 6E 73 69 74 79 3A 3D 46 41    alfIntensity:=FA
01EBE0:  4C 53 45 3B 0D 0A 09 09 45 6E 68 61 6E 63 65 64    LSE;....Enhanced
01EBF0:  56 69 64 65 6F 3A 3D 46 41 4C 53 45 3B 0D 0A 09    Video:=FALSE;...
01EC00:  09 49 6E 76 65 72 73 65 56 69 64 65 6F 3A 3D 46    .InverseVideo:=F
01EC10:  41 4C 53 45 3B 0D 0A 09 09 42 6C 69 6E 6B 69 6E    ALSE;....Blinkin
01EC20:  67 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 55 6E 64    g:=FALSE;....Und
01EC30:  65 72 4C 69 6E 65 3A 3D 46 41 4C 53 45 7C 0D 0A    erLine:=FALSE|..
01EC40:  09 49 6E 76 65 72 73 65 3A 49 6E 76 65 72 73 65    .Inverse:Inverse
01EC50:  56 69 64 65 6F 3A 3D 54 52 55 45 7C 0D 0A 09 42    Video:=TRUE|...B
01EC60:  6C 69 6E 6B 3A 42 6C 69 6E 6B 69 6E 67 3A 3D 54    link:Blinking:=T
01EC70:  52 55 45 7C 0D 0A 09 53 74 61 72 74 47 72 61 70    RUE|...StartGrap
01EC80:  68 2C 45 6E 64 47 72 61 70 68 3A 28 2A 64 6F 20    h,EndGraph:(*do 
01EC90:  6E 6F 74 68 69 6E 67 2A 29 7C 0D 0A 09 44 65 6C    nothing*)|...Del
01ECA0:  43 68 61 72 3A 28 2A 4D 6F 76 65 20 72 65 73 74    Char:(*Move rest
01ECB0:  20 6F 66 20 6C 69 6E 65 20 75 70 20 6F 6E 65 2C     of line up one,
01ECC0:  20 61 64 64 20 62 6C 61 6E 6B 20 74 6F 20 65 6E     add blank to en
01ECD0:  64 2A 29 0D 0A 09 09 69 3A 3D 43 6F 6C 4E 6F 3B    d*)....i:=ColNo;
01ECE0:  0D 0A 09 09 46 4F 52 20 6A 3A 3D 43 6F 6C 4E 6F    ....FOR j:=ColNo
01ECF0:  20 54 4F 20 52 6F 77 57 69 64 74 68 2D 32 20 44     TO RowWidth-2 D
01ED00:  61 72 64 27 20 53 63 72 65 65 6E 20 69 73 20 38    ard' Screen is 8
01ED10:  30 20 62 79 20 32 34 2E 20 54 68 65 20 6C 69 6D    0 by 24. The lim
01ED20:  69 74 20 69 73 20 73 65 74 20 62 79 0D 0A 09 09    it is set by....
01ED30:  74 68 65 20 74 65 72 6D 69 6E 61 6C 20 64 65 66    the terminal def
01ED40:  69 6E 69 74 69 6F 6E 20 66 69 6C 65 09 2A 29 0D    inition file.*).
01ED50:  0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F    .BEGIN..    IF O
01ED60:  75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45    utputEnabled THE
01ED70:  4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B    N...ClearCursor;
01ED80:  0D 0A 09 43 6F 6C 4E 6F 3A 3D 78 3B 0D 0A 09 52    ...ColNo:=x;...R
01ED90:  6F 77 4E 6F 3A 3D 79 3B 0D 0A 09 53 63 72 65 65    owNo:=y;...Scree
01EDA0:  6E 50 6F 73 3A 3D 43 6F 6C 4E 6F 2B 52 6F 77 4E    nPos:=ColNo+RowN
01EDB0:  6F 2A 43 68 61 72 49 6E 63 72 65 6D 65 6E 74 2A    o*CharIncrement*
01EDC0:  52 6F 77 57 69 64 74 68 3B 0D 0A 09 49 46 20 53    RowWidth;...IF S
01EDD0:  63 72 65 65 6E 50 6F 73 3E 3D 53 63 72 65 65 6E    creenPos>=Screen
01EDE0:  53 69 7A 65 20 54 48 45 4E 0D 0A 09 09 43 6F 6C    Size THEN....Col
01EDF0:  4E 6F 3A 3D 30 3B 0D 0A 09 09 52 6F 77 4E 6F 3A    No:=0;....RowNo:
01EE00:  3D 30 3B 0D 0A 09 09 53 63 72 65 65 6E 50 6F 73    =0;....ScreenPos
01EE10:  3A 3D 30 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45    :=0;....END;...E
01EE20:  4E 44 3B 0D 0A 20 20 20 20 46 6C 75 73 68 42 75    ND;..    FlushBu
01EE30:  66 66 65 72 3B 0D 0A 20 20 20 20 45 4E 44 20 47    ffer;..    END G
01EE40:  6F 74 6F 78 79 3B 0D 0A 0D 0A 50 52 4F 43 45 44    otoxy;....PROCED
01EE50:  55 52 45 20 50 75 74 61 6E 64 49 6E 63 28 63 68    URE PutandInc(ch
01EE60:  3A 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09 6F 75    :CHAR);....(*.ou
01EE70:  74 70 75 74 20 61 20 63 68 61 72 61 63 74 65 72    tput a character
01EE80:  20 61 6E 64 20 69 6E 63 72 65 6D 65 6E 74 20 70     and increment p
01EE90:  6F 69 6E 74 65 72 73 2A 29 0D 0A 0D 0A 42 45 47    ointers*)....BEG
01EEA0:  49 4E 0D 0A 09 49 46 20 42 75 66 66 65 72 43 6F    IN...IF BufferCo
01EEB0:  75 6E 74 3D 30 20 54 48 45 4E 0D 0A 09 09 42 75    unt=0 THEN....Bu
01EEC0:  66 66 65 72 52 6F 77 3A 3D 52 6F 77 4E 6F 3B 0D    fferRow:=RowNo;.
01EED0:  0A 09 09 42 75 66 66 65 72 43 6F 6C 3A 3D 43 6F    ...BufferCol:=Co
01EEE0:  6C 4E 6F 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49    lNo;....END;...I
01EEF0:  46 20 28 42 75 66 66 65 72 52 6F 77 3C 3E 52 6F    F (BufferRow<>Ro
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 41 02 00 00 00 02    ......R...A.....
01EF20:  1A 00 46 02 00 00 00 02 1A 00 42 02 00 00 00 02    ..F.......B.....
01EF30:  1A 00 47 02 00 00 00 02 1A 00 43 02 00 00 00 02    ..G.......C.....
01EF40:  1A 00 48 02 00 00 00 02 1A 00 44 02 00 00 00 02    ..H.......D.....
01EF50:  1A 00 49 02 00 00 00 02 1A 00 45 02 00 00 00 02    ..I.......E.....
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:  4F 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 6A 2B 31    O.....ColNo:=j+1
01F010:  3B 0D 0A 09 09 09 53 65 74 43 75 72 73 6F 72 3B    ;.....SetCursor;
01F020:  0D 0A 09 09 09 57 49 54 48 20 70 20 44 4F 0D 0A    .....WITH p DO..
01F030:  09 09 09 09 41 58 3A 3D 38 30 30 68 3B 0D 0A 09    ....AX:=800h;...
01F040:  09 09 09 42 58 3A 3D 30 3B 0D 0A 09 09 09 09 49    ...BX:=0;......I
01F050:  6E 74 28 70 29 3B 09 28 2A 52 65 61 64 20 63 68    nt(p);.(*Read ch
01F060:  61 72 61 63 74 65 72 20 2A 29 0D 0A 09 09 09 09    aracter *)......
01F070:  63 68 3A 3D 43 48 52 28 43 41 52 44 49 4E 41 4C    ch:=CHR(CARDINAL
01F080:  28 41 58 29 29 3B 0D 0A 09 09 09 09 44 45 43 28    (AX));......DEC(
01F090:  43 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 09 53 65 74    ColNo);......Set
01F0A0:  43 75 72 73 6F 72 3B 0D 0A 09 09 09 09 42 58 3A    Cursor;......BX:
01F0B0:  3D 37 3B 0D 0A 09 09 09 09 41 58 3A 3D 30 39 30    =7;......AX:=090
01F0C0:  30 48 2B 4F 52 44 28 63 68 29 3B 0D 0A 09 09 09    0H+ORD(ch);.....
01F0D0:  09 43 58 3A 3D 31 3B 0D 0A 09 09 09 09 49 6E 74    .CX:=1;......Int
01F0E0:  28 70 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A    (p);......END;..
01F0F0:  09 09 09 45 4E 44 3B 0D 0A 09 09 43 6F 6C 4E 6F    ...END;....ColNo
01F100:  3A 3D 52 6F 77 57 69 64 74 68 2D 31 3B 0D 0A 09    :=RowWidth-1;...
01F110:  09 53 65 74 43 75 72 73 6F 72 3B 0D 0A 09 09 57    .SetCursor;....W
01F120:  49 54 48 20 70 20 44 4F 0D 0A 09 09 09 41 58 3A    ITH p DO.....AX:
01F130:  3D 30 39 32 30 68 3B 0D 0A 09 09 09 42 58 3A 3D    =0920h;.....BX:=
01F140:  37 3B 0D 0A 09 09 09 43 58 3A 3D 31 3B 0D 0A 09    7;.....CX:=1;...
01F150:  09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 09 45 4E    ..Int(p);.....EN
01F160:  44 3B 0D 0A 09 09 43 6F 6C 4E 6F 3A 3D 69 3B 0D    D;....ColNo:=i;.
01F170:  0A 09 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A 09    ...SetCursor;...
01F180:  09 7C 0D 0A 09 44 65 6C 4C 69 6E 65 3A 28 2A 4D    .|...DelLine:(*M
01F190:  6F 76 65 20 72 65 73 74 20 6F 66 20 73 63 72 65    ove rest of scre
01F1A0:  65 6E 20 75 70 20 61 20 6C 69 6E 65 2C 20 61 64    en up a line, ad
01F1B0:  64 20 62 6C 61 6E 6B 20 6C 69 6E 65 20 61 74 20    d blank line at 
01F1C0:  65 6E 64 2A 29 0D 0A 09 09 57 49 54 48 20 70 20    end*)....WITH p 
01F1D0:  44 4F 0D 0A 09 09 09 41 58 3A 3D 30 36 30 31 68    DO.....AX:=0601h
01F1E0:  3B 0D 0A 09 09 09 43 58 3A 3D 32 35 36 2A 52 6F    ;.....CX:=256*Ro
01F1F0:  77 4E 6F 3B 0D 0A 09 09 09 44 58 3A 3D 32 35 36    wNo;.....DX:=256
01F200:  6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 63 72 65 65    owNo);.....Scree
01F210:  6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B    nPos:=ScreenPos+
01F220:  52 6F 77 57 69 64 74 68 3B 0D 0A 09 09 09 45 4E    RowWidth;.....EN
01F230:  44 7C 0D 0A 09 4D 6F 76 65 55 70 3A 49 46 20 52    D|...MoveUp:IF R
01F240:  6F 77 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09    owNo>0 THEN.....
01F250:  44 45 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09    DEC(RowNo);.....
01F260:  53 63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65    ScreenPos:=Scree
01F270:  6E 50 6F 73 2D 52 6F 77 57 69 64 74 68 3B 0D 0A    nPos-RowWidth;..
01F280:  09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20    ...END;....END; 
01F290:  28 2A 43 41 53 45 2A 29 0D 0A 09 53 65 74 43 75    (*CASE*)...SetCu
01F2A0:  72 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20    rsor;...END;..  
01F2B0:  20 20 45 4E 44 20 53 63 72 65 65 6E 43 6F 6E 74      END ScreenCont
01F2C0:  72 6F 6C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    rol;..PROCEDURE 
01F2D0:  53 63 72 6F 6C 6C 57 69 6E 64 6F 77 55 70 28 53    ScrollWindowUp(S
01F2E0:  74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64    tartofWindow,End
01F2F0:  6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41    ofWindow:CARDINA
01F300:  4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20    L);..BEGIN..    
01F310:  49 46 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64    IF OutputEnabled
01F320:  20 41 4E 44 20 28 53 74 61 72 74 6F 66 57 69 6E     AND (StartofWin
01F330:  64 6F 77 3C 45 6E 64 6F 66 57 69 6E 64 6F 77 29    dow<EndofWindow)
01F340:  20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 43 75 72     THEN...ClearCur
01F350:  73 6F 72 3B 0D 0A 09 57 49 54 48 20 70 20 44 4F    sor;...WITH p DO
01F360:  0D 0A 09 09 41 58 3A 3D 30 37 30 31 68 0D 0A 09    ....AX:=0701h...
01F370:  09 43 58 3A 3D 32 35 36 2A 53 74 61 72 74 6F 66    .CX:=256*Startof
01F380:  57 69 6E 64 6F 77 3B 0D 0A 09 09 44 58 3A 3D 32    Window;....DX:=2
01F390:  35 36 2A 45 6E 64 6F 66 57 69 6E 64 6F 77 2B 4C    56*EndofWindow+L
01F3A0:  6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D 31 3B    ogScreenWidth-1;
01F3B0:  0D 0A 09 09 42 58 3A 3D 30 37 30 30 68 3B 0D 0A    ....BX:=0700h;..
01F3C0:  09 09 45 4E 44 3B 0D 0A 09 49 6E 74 28 70 29 3B    ..END;...Int(p);
01F3D0:  0D 0A 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A 09    ...SetCursor;...
01F3E0:  45 4E 44 3B 0D 0A 20 20 20 20 45 4E 44 20 53 63    END;..    END Sc
01F3F0:  72 6F 6C 6C 57 69 6E 64 6F 77 55 70 3B 0D 0A 50    rollWindowUp;..P
01F400:  2A 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 68    *(LogScreenDepth
01F410:  2D 31 29 2B 4C 6F 67 53 63 72 65 65 6E 57 69 64    -1)+LogScreenWid
01F420:  74 68 2D 31 3B 0D 0A 09 09 09 42 58 3A 3D 30 37    th-1;.....BX:=07
01F430:  30 30 68 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09    00h;.....END;...
01F440:  09 49 6E 74 28 70 29 3B 0D 0A 09 09 7C 0D 0A 09    .Int(p);....|...
01F450:  49 6E 73 43 68 61 72 3A 28 2A 4D 6F 76 65 20 72    InsChar:(*Move r
01F460:  65 73 74 20 6F 66 20 6C 69 6E 65 20 75 70 20 6F    est of line up o
01F470:  6E 65 2C 20 61 64 64 20 62 6C 61 6E 6B 20 74 6F    ne, add blank to
01F480:  20 65 6E 64 2A 29 0D 0A 09 09 69 3A 3D 43 6F 6C     end*)....i:=Col
01F490:  4E 6F 3B 0D 0A 09 09 46 4F 52 20 6A 3A 3D 52 6F    No;....FOR j:=Ro
01F4A0:  77 57 69 64 74 68 2D 32 20 54 4F 20 43 6F 6C 4E    wWidth-2 TO ColN
01F4B0:  6F 20 42 59 20 2D 31 20 44 4F 0D 0A 09 09 09 43    o BY -1 DO.....C
01F4C0:  6F 6C 4E 6F 3A 3D 6A 3B 0D 0A 09 09 09 53 65 74    olNo:=j;.....Set
01F4D0:  43 75 72 73 6F 72 3B 0D 0A 09 09 09 57 49 54 48    Cursor;.....WITH
01F4E0:  20 70 20 44 4F 0D 0A 09 09 09 09 41 58 3A 3D 38     p DO......AX:=8
01F4F0:  30 30 68 3B 0D 0A 09 09 09 09 42 58 3A 3D 30 3B    00h;......BX:=0;
01F500:  0D 0A 09 09 09 09 49 6E 74 28 70 29 3B 09 28 2A    ......Int(p);.(*
01F510:  52 65 61 64 20 63 68 61 72 61 63 74 65 72 20 2A    Read character *
01F520:  29 0D 0A 09 09 09 09 63 68 3A 3D 43 48 52 28 43    )......ch:=CHR(C
01F530:  41 52 44 49 4E 41 4C 28 41 58 29 29 3B 0D 0A 09    ARDINAL(AX));...
01F540:  09 09 09 49 4E 43 28 43 6F 6C 4E 6F 29 3B 0D 0A    ...INC(ColNo);..
01F550:  09 09 09 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A    ....SetCursor;..
01F560:  09 09 09 09 42 58 3A 3D 37 3B 0D 0A 09 09 09 09    ....BX:=7;......
01F570:  41 58 3A 3D 30 39 30 30 48 2B 4F 52 44 28 63 68    AX:=0900H+ORD(ch
01F580:  29 3B 0D 0A 09 09 09 09 43 58 3A 3D 31 3B 0D 0A    );......CX:=1;..
01F590:  09 09 09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 09    ....Int(p);.....
01F5A0:  09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A    .END;.....END;..
01F5B0:  09 09 43 6F 6C 4E 6F 3A 3D 69 3B 0D 0A 09 09 53    ..ColNo:=i;....S
01F5C0:  65 74 43 75 72 73 6F 72 3B 0D 0A 09 09 57 49 54    etCursor;....WIT
01F5D0:  48 20 70 20 44 4F 0D 0A 09 09 09 41 58 3A 3D 30    H p DO.....AX:=0
01F5E0:  39 32 30 68 3B 0D 0A 09 09 09 42 58 3A 3D 37 3B    920h;.....BX:=7;
01F5F0:  0D 0A 09 09 09 43 58 3A 3D 31 3B 0D 0A 09 09 09    .....CX:=1;.....
01F600:  52 4F 43 45 44 55 52 45 20 53 63 72 6F 6C 6C 57    ROCEDURE ScrollW
01F610:  69 6E 64 6F 77 44 6F 77 6E 28 53 74 61 72 74 6F    indowDown(Starto
01F620:  66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 69 6E    fWindow,EndofWin
01F630:  64 6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A    dow:CARDINAL);..
01F640:  42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F 75    BEGIN..    IF Ou
01F650:  74 70 75 74 45 6E 61 62 6C 65 64 20 41 4E 44 20    tputEnabled AND 
01F660:  28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 3C 45    (StartofWindow<E
01F670:  6E 64 6F 66 57 69 6E 64 6F 77 29 20 54 48 45 4E    ndofWindow) THEN
01F680:  0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D    ...ClearCursor;.
01F690:  0A 09 57 49 54 48 20 70 20 44 4F 0D 0A 09 09 41    ..WITH p DO....A
01F6A0:  58 3A 3D 30 36 30 31 68 0D 0A 09 09 43 58 3A 3D    X:=0601h....CX:=
01F6B0:  32 35 36 2A 53 74 61 72 74 6F 66 57 69 6E 64 6F    256*StartofWindo
01F6C0:  77 3B 0D 0A 09 09 44 58 3A 3D 32 35 36 2A 45 6E    w;....DX:=256*En
01F6D0:  64 6F 66 57 69 6E 64 6F 77 2B 4C 6F 67 53 63 72    dofWindow+LogScr
01F6E0:  65 65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 09 42    eenWidth-1;....B
01F6F0:  58 3A 3D 30 37 30 30 68 3B 0D 0A 09 09 45 4E 44    X:=0700h;....END
01F700:  3B 0D 0A 09 49 6E 74 28 70 29 3B 0D 0A 09 53 65    ;...Int(p);...Se
01F710:  74 43 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D    tCursor;...END;.
01F720:  0A 20 20 20 20 45 4E 44 20 53 63 72 6F 6C 6C 57    .    END ScrollW
01F730:  69 6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 50 52    indowDown;....PR
01F740:  4F 43 45 44 55 52 45 20 4C 6F 61 64 54 65 72 6D    OCEDURE LoadTerm
01F750:  43 6F 64 65 28 46 3A 46 69 6C 65 4E 61 6D 65 29    Code(F:FileName)
01F760:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 28 2A 6E 6F 74    ;..BEGIN...(*not
01F770:  20 69 6D 70 6C 65 6D 65 6E 74 65 64 20 69 6E 20     implemented in 
01F780:  74 68 69 73 20 76 65 72 73 69 6F 6E 2A 29 0D 0A    this version*)..
01F790:  09 45 4E 44 20 4C 6F 61 64 54 65 72 6D 43 6F 64    .END LoadTermCod
01F7A0:  65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C    e;..PROCEDURE Cl
01F7B0:  69 70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43    ip(x1,y1,x2,y2:C
01F7C0:  41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E    ARDINAL);..BEGIN
01F7D0:  0D 0A 09 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D 65    ...(*not impleme
01F7E0:  6E 74 65 64 20 69 6E 20 74 68 69 73 20 76 65 72    nted in this ver
01F7F0:  73 69 6F 6E 2A 29 0D 0A 09 45 4E 44 20 43 6C 69    sion*)...END Cli
01F800:  49 6E 74 28 70 29 3B 0D 0A 09 09 09 45 4E 44 3B    Int(p);.....END;
01F810:  0D 0A 09 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A    ....SetCursor;..
01F820:  09 09 7C 0D 0A 09 49 6E 73 4C 69 6E 65 3A 28 2A    ..|...InsLine:(*
01F830:  4D 6F 76 65 20 72 65 73 74 20 6F 66 20 73 63 72    Move rest of scr
01F840:  65 65 6E 20 75 70 20 61 20 6C 69 6E 65 2C 20 61    een up a line, a
01F850:  64 64 20 62 6C 61 6E 6B 20 6C 69 6E 65 20 61 74    dd blank line at
01F860:  20 65 6E 64 2A 29 0D 0A 09 09 57 49 54 48 20 70     end*)....WITH p
01F870:  20 44 4F 0D 0A 09 09 09 41 58 3A 3D 30 37 30 31     DO.....AX:=0701
01F880:  68 3B 0D 0A 09 09 09 43 58 3A 3D 32 35 36 2A 52    h;.....CX:=256*R
01F890:  6F 77 4E 6F 3B 0D 0A 09 09 09 44 58 3A 3D 32 35    owNo;.....DX:=25
01F8A0:  36 2A 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 74    6*(LogScreenDept
01F8B0:  68 2D 31 29 2B 4C 6F 67 53 63 72 65 65 6E 57 69    h-1)+LogScreenWi
01F8C0:  64 74 68 2D 31 3B 0D 0A 09 09 09 42 58 3A 3D 30    dth-1;.....BX:=0
01F8D0:  37 30 30 68 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A    700h;.....END;..
01F8E0:  09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 7C 0D 0A    ..Int(p);....|..
01F8F0:  09 44 65 6C 45 6F 6C 3A 49 46 20 43 6F 6C 4E 6F    .DelEol:IF ColNo
01F900:  2B 31 3C 52 6F 77 57 69 64 74 68 20 54 48 45 4E    +1<RowWidth THEN
01F910:  0D 0A 09 09 09 57 49 54 48 20 70 20 44 4F 0D 0A    .....WITH p DO..
01F920:  09 09 09 09 41 58 3A 3D 30 39 32 30 68 3B 0D 0A    ....AX:=0920h;..
01F930:  09 09 09 09 42 58 3A 3D 37 3B 0D 0A 09 09 09 09    ....BX:=7;......
01F940:  43 58 3A 3D 52 6F 77 57 69 64 74 68 2D 43 6F 6C    CX:=RowWidth-Col
01F950:  4E 6F 2D 31 3B 0D 0A 09 09 09 09 49 6E 74 28 70    No-1;......Int(p
01F960:  29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09    );......END;....
01F970:  09 45 4E 44 3B 0D 0A 09 09 7C 0D 0A 09 44 65 6C    .END;....|...Del
01F980:  45 6F 73 3A 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D    Eos:(*not implem
01F990:  65 6E 74 65 64 20 2D 20 62 75 74 20 73 69 6D 69    ented - but simi
01F9A0:  6C 61 72 20 74 6F 20 70 72 65 76 69 6F 75 73 2A    lar to previous*
01F9B0:  29 7C 0D 0A 09 43 6C 65 61 72 53 63 72 65 65 6E    )|...ClearScreen
01F9C0:  3A 0D 0A 09 09 09 28 2A 4F 73 62 6F 72 6E 65 20    :.....(*Osborne 
01F9D0:  73 70 65 63 69 66 69 63 20 2D 20 68 6F 6D 65 20    specific - home 
01F9E0:  73 63 72 65 65 6E 20 61 6E 64 20 63 75 72 73 6F    screen and curso
01F9F0:  72 20 0D 0A 09 09 09 20 70 6F 73 69 74 69 6F 6E    r ..... position
01FA00:  70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44    p;..PROCEDURE  D
01FA10:  72 61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C    rawBox(x1,y1,x2,
01FA20:  79 32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D    y2:CARDINAL);...
01FA30:  0A 28 2A 09 09 64 72 61 77 20 61 20 62 6F 78 20    .(*..draw a box 
01FA40:  66 6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E 20    for a window on 
01FA50:  74 68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09 09    the screen......
01FA60:  78 31 2C 79 31 20 20 69 73 20 74 68 65 20 6C 6F    x1,y1  is the lo
01FA70:  77 65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72 0D    wer left corner.
01FA80:  0A 09 09 78 32 2C 79 32 20 20 69 73 20 75 70 70    ...x2,y2  is upp
01FA90:  65 72 20 72 69 67 68 74 20 63 6F 72 6E 65 72 2A    er right corner*
01FAA0:  29 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41    )..VAR.i:CARDINA
01FAB0:  4C 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49    L;..BEGIN..    I
01FAC0:  46 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20    F OutputEnabled 
01FAD0:  54 48 45 4E 0D 0A 09 47 6F 74 6F 78 79 28 78 31    THEN...Gotoxy(x1
01FAE0:  2C 79 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F    ,y1);...ScreenCo
01FAF0:  6E 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68    ntrol(StartGraph
01FB00:  29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72    );...ScreenContr
01FB10:  6F 6C 28 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A 09    ol(CornerLL);...
01FB20:  46 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78    FOR i:=x1+1 TO x
01FB30:  32 2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E    2-1 DO ScreenCon
01FB40:  74 72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29    trol(Horizontal)
01FB50:  20 45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F     END;...ScreenCo
01FB60:  6E 74 72 6F 6C 28 43 6F 72 6E 65 72 4C 52 29 3B    ntrol(CornerLR);
01FB70:  0D 0A 09 47 6F 74 6F 78 79 28 78 31 2C 79 32 29    ...Gotoxy(x1,y2)
01FB80:  3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F    ;...ScreenContro
01FB90:  6C 28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46    l(CornerUL);...F
01FBA0:  4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32    OR i:=x1+1 TO x2
01FBB0:  2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74    -1 DO ScreenCont
01FBC0:  72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20    rol(Horizontal) 
01FBD0:  45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E    END;...ScreenCon
01FBE0:  74 72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D    trol(CornerUR);.
01FBF0:  0A 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F    ..FOR i:=y2+1 TO
01FC00:  20 61 73 20 73 74 6F 72 65 64 20 69 6E 20 42 49     as stored in BI
01FC10:  4F 53 20 74 61 62 6C 65 73 2A 29 0D 0A 09 09 0D    OS tables*).....
01FC20:  0A 09 09 09 28 2A 6E 6F 77 20 63 6C 65 61 72 20    ....(*now clear 
01FC30:  64 69 73 70 6C 61 79 20 6D 65 6D 6F 72 79 2A 29    display memory*)
01FC40:  0D 0A 09 09 57 49 54 48 20 70 20 44 4F 0D 0A 09    ....WITH p DO...
01FC50:  09 09 41 58 3A 3D 30 36 30 30 68 3B 0D 0A 09 09    ..AX:=0600h;....
01FC60:  09 43 58 3A 3D 30 3B 0D 0A 09 09 09 44 58 3A 3D    .CX:=0;.....DX:=
01FC70:  32 35 36 2A 28 4C 6F 67 53 63 72 65 65 6E 44 65    256*(LogScreenDe
01FC80:  70 74 68 2D 31 29 2B 4C 6F 67 53 63 72 65 65 6E    pth-1)+LogScreen
01FC90:  57 69 64 74 68 2D 31 3B 0D 0A 09 09 09 42 58 3A    Width-1;.....BX:
01FCA0:  3D 30 37 30 30 68 3B 0D 0A 09 09 09 45 4E 44 3B    =0700h;.....END;
01FCB0:  0D 0A 09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 53    ....Int(p);....S
01FCC0:  63 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 09    creenPos:=0;....
01FCD0:  43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 09 52 6F 77    ColNo:=0;....Row
01FCE0:  4E 6F 3A 3D 30 0D 0A 09 09 7C 0D 0A 0D 0A 09 28    No:=0....|.....(
01FCF0:  2A 20 54 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20    * The following 
01FD00:  67 72 61 70 68 69 63 73 20 63 68 61 72 61 63 74    graphics charact
01FD10:  65 72 73 20 77 69 6C 6C 20 6E 65 65 64 20 74 6F    ers will need to
01FD20:  20 62 65 20 6D 6F 64 69 66 69 65 64 20 66 6F 72     be modified for
01FD30:  20 0D 0A 09 20 20 20 64 69 66 66 65 72 65 6E 74     ...   different
01FD40:  20 64 69 73 70 6C 61 79 20 73 79 73 74 65 6D 73     display systems
01FD50:  2A 29 0D 0A 0D 0A 09 48 6F 72 69 7A 6F 6E 74 61    *).....Horizonta
01FD60:  6C 3A 50 75 74 61 6E 64 49 6E 63 28 30 63 64 78    l:PutandInc(0cdx
01FD70:  29 7C 0D 0A 09 56 65 72 74 69 63 61 6C 3A 50 75    )|...Vertical:Pu
01FD80:  74 61 6E 64 49 6E 63 28 30 62 61 78 29 7C 0D 0A    tandInc(0bax)|..
01FD90:  09 43 6F 72 6E 65 72 4C 4C 3A 50 75 74 61 6E 64    .CornerLL:Putand
01FDA0:  49 6E 63 28 30 63 38 78 29 7C 0D 0A 09 43 6F 72    Inc(0c8x)|...Cor
01FDB0:  6E 65 72 55 4C 3A 50 75 74 61 6E 64 49 6E 63 28    nerUL:PutandInc(
01FDC0:  30 63 39 78 29 7C 0D 0A 09 43 6F 72 6E 65 72 55    0c9x)|...CornerU
01FDD0:  52 3A 50 75 74 61 6E 64 49 6E 63 28 30 62 62 78    R:PutandInc(0bbx
01FDE0:  29 7C 0D 0A 09 43 6F 72 6E 65 72 4C 52 3A 50 75    )|...CornerLR:Pu
01FDF0:  74 61 6E 64 49 6E 63 28 30 62 63 78 29 7C 0D 0A    tandInc(0bcx)|..
01FE00:  20 79 31 2D 31 20 20 44 4F 0D 0A 09 09 47 6F 74     y1-1  DO....Got
01FE10:  6F 78 79 28 78 32 2C 69 29 3B 0D 0A 09 09 53 63    oxy(x2,i);....Sc
01FE20:  72 65 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74    reenControl(Vert
01FE30:  69 63 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    ical);....END;..
01FE40:  09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20    .FOR i:=y2+1 TO 
01FE50:  79 31 2D 31 20 44 4F 0D 0A 09 09 47 6F 74 6F 78    y1-1 DO....Gotox
01FE60:  79 28 78 31 2C 69 29 3B 0D 0A 09 09 53 63 72 65    y(x1,i);....Scre
01FE70:  65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 63    enControl(Vertic
01FE80:  61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45    al);....END;...E
01FE90:  4E 44 3B 0D 0A 20 20 20 20 45 4E 44 20 44 72 61    ND;..    END Dra
01FEA0:  77 42 6F 78 3B 0D 0A 50 52 4F 43 45 44 55 52 45    wBox;..PROCEDURE
01FEB0:  20 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 28     OutputToScreen(
01FEC0:  4F 6E 3A 42 4F 4F 4C 45 41 4E 29 3B 0D 0A 42 45    On:BOOLEAN);..BE
01FED0:  47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E 61 62    GIN...OutputEnab
01FEE0:  6C 65 64 3A 3D 4F 6E 0D 0A 09 45 4E 44 20 4F 75    led:=On...END Ou
01FEF0:  74 70 75 74 54 6F 53 63 72 65 65 6E 3B 09 0D 0A    tputToScreen;...
01FF00:  42 45 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E    BEGIN...OutputEn
01FF10:  61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D 0A 09 28    abled:=TRUE;...(
01FF20:  2A 09 53 65 74 20 75 70 20 50 43 47 20 43 68 61    *.Set up PCG Cha
01FF30:  72 61 63 74 65 72 73 2A 29 0D 0A 09 53 63 72 65    racters*)...Scre
01FF40:  65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 70 2E 49 6E    enPos:=0;...p.In
01FF50:  74 4E 6F 3A 3D 31 36 3B 09 28 2A 69 6E 74 65 72    tNo:=16;.(*inter
01FF60:  72 75 70 74 20 66 6F 72 20 76 69 64 65 6F 20 6F    rupt for video o
01FF70:  6E 20 38 30 38 38 2A 29 09 0D 0A 09 42 6C 69 6E    n 8088*)....Blin
01FF80:  6B 52 6F 75 74 69 6E 65 3A 3D 42 6C 69 6E 6B 43    kRoutine:=BlinkC
01FF90:  75 72 73 6F 72 3B 0D 0A 09 42 6C 69 6E 6B 45 6E    ursor;...BlinkEn
01FFA0:  61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D 0A 09 53    abled:=TRUE;...S
01FFB0:  63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 43 6C 65    creenControl(Cle
01FFC0:  61 72 53 63 72 65 65 6E 29 3B 0D 0A 09 43 6F 6C    arScreen);...Col
01FFD0:  4E 6F 3A 3D 30 3B 0D 0A 09 52 6F 77 4E 6F 3A 3D    No:=0;...RowNo:=
01FFE0:  30 3B 0D 0A 09 43 68 61 72 52 6F 75 74 69 6E 65    0;...CharRoutine
01FFF0:  3A 3D 57 72 69 74 65 3B 0D 0A 09 43 68 61 72 45    :=Write;...CharE
020000:  09 53 74 61 72 74 78 79 2C 4D 69 64 64 6C 65 58    .Startxy,MiddleX
020010:  59 2C 45 6E 64 58 59 3A 28 2A 63 75 72 73 6F 72    Y,EndXY:(*cursor
020020:  20 61 64 64 72 65 73 73 69 6E 67 20 2D 20 6E 6F     addressing - no
020030:  74 20 72 65 71 75 69 72 65 64 2A 29 7C 0D 0A 09    t required*)|...
020040:  52 69 6E 67 42 65 6C 6C 3A 69 3A 3D 42 44 4F 53    RingBell:i:=BDOS
020050:  28 77 63 63 66 63 2C 37 29 7C 0D 0A 09 4D 6F 76    (wccfc,7)|...Mov
020060:  65 4C 65 66 74 3A 49 46 20 43 6F 6C 4E 6F 3E 30    eLeft:IF ColNo>0
020070:  20 54 48 45 4E 20 0D 0A 09 09 09 44 45 43 28 43     THEN .....DEC(C
020080:  6F 6C 4E 6F 29 3B 0D 0A 09 09 09 44 45 43 28 53    olNo);.....DEC(S
020090:  63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C    creenPos);....EL
0200A0:  53 49 46 20 52 6F 77 4E 6F 3E 30 20 54 48 45 4E    SIF RowNo>0 THEN
0200B0:  0D 0A 09 09 09 44 45 43 28 52 6F 77 4E 6F 29 3B    .....DEC(RowNo);
0200C0:  0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 4C 6F 67 53    .....ColNo:=LogS
0200D0:  63 72 65 65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09    creenWidth-1;...
0200E0:  09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C    ..ScreenPos:=Col
0200F0:  4E 6F 2B 52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74    No+RowNo*RowWidt
020100:  68 3B 0D 0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F    h;.....END|...Mo
020110:  76 65 52 69 67 68 74 3A 49 46 20 43 6F 6C 4E 6F    veRight:IF ColNo
020120:  3C 28 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68    <(LogScreenWidth
020130:  2D 31 29 20 54 48 45 4E 20 0D 0A 09 09 09 49 4E    -1) THEN .....IN
020140:  43 28 43 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 49 4E    C(ColNo);.....IN
020150:  43 28 53 63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09    C(ScreenPos);...
020160:  09 45 4C 53 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F    .ELSIF RowNo<(Lo
020170:  67 53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 20    gScreenDepth-1) 
020180:  54 48 45 4E 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D    THEN.....ColNo:=
020190:  30 3B 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F    0;.....INC(RowNo
0201A0:  29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F 73    );.....ScreenPos
0201B0:  3A 3D 52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68    :=RowNo*RowWidth
0201C0:  3B 0D 0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76    ;.....END|...Mov
0201D0:  65 44 6F 77 6E 3A 49 46 20 52 6F 77 4E 6F 3C 28    eDown:IF RowNo<(
0201E0:  4C 6F 67 53 63 72 65 65 6E 44 65 70 74 68 2D 31    LogScreenDepth-1
0201F0:  29 20 54 48 45 4E 0D 0A 09 09 09 49 4E 43 28 52    ) THEN.....INC(R
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 41 02 00 00 00 02    ......R...A.....
020220:  1B 00 46 02 00 00 00 02 1B 00 42 02 00 00 00 02    ..F.......B.....
020230:  1B 00 47 02 00 00 00 02 1B 00 43 02 00 00 00 02    ..G.......C.....
020240:  1B 00 48 02 00 00 00 02 1B 00 44 02 00 00 00 02    ..H.......D.....
020250:  1B 00 49 02 00 00 00 02 1B 00 45 02 00 00 00 02    ..I.......E.....
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:  6E 61 62 6C 65 64 3A 3D 54 52 55 45 3B 09 0D 0A    nabled:=TRUE;...
020310:  09 53 63 72 65 65 6E 57 69 64 74 68 3A 3D 4C 6F    .ScreenWidth:=Lo
020320:  67 53 63 72 65 65 6E 57 69 64 74 68 3B 0D 0A 09    gScreenWidth;...
020330:  53 63 72 65 65 6E 44 65 70 74 68 3A 3D 4C 6F 67    ScreenDepth:=Log
020340:  53 63 72 65 65 6E 44 65 70 74 68 3B 0D 0A 09 45    ScreenDepth;...E
020350:  4E 44 20 53 63 72 65 65 6E 49 4F 2E 0D 0A 1A 1A    ND ScreenIO.....
020360:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
020370:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
020380:  65 20 72 6F 6F 74 20 6F 66 20 74 68 65 20 70 61    e root of the pa
020390:  74 74 65 72 6E 20 74 6F 20 6D 61 74 63 68 0D 0A    ttern to match..
0203A0:  09 73 20 69 73 20 74 68 65 20 74 65 78 74 20 74    .s is the text t
0203B0:  6F 20 6D 61 74 63 68 0D 0A 0D 0A 09 54 68 65 20    o match.....The 
0203C0:  66 75 6E 63 74 69 6F 6E 20 72 65 74 75 72 6E 73    function returns
0203D0:  20 74 72 75 65 20 6F 6E 6C 79 20 69 66 20 74 68     true only if th
0203E0:  65 20 73 74 72 69 6E 67 20 6D 61 74 63 68 65 73    e string matches
0203F0:  0D 0A 09 63 6F 6D 70 6C 65 74 65 6C 79 2E 0D 0A    ...completely...
020400:  0D 0A 09 4F 66 20 63 6F 75 72 73 65 2C 20 79 6F    ...Of course, yo
020410:  75 20 63 61 6E 20 61 6C 77 61 79 73 20 75 73 65    u can always use
020420:  64 20 72 65 70 65 61 74 65 64 20 73 65 74 73 20    d repeated sets 
020430:  6F 66 20 61 6E 79 74 68 69 6E 67 0D 0A 09 61 74    of anything...at
020440:  20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 61     the beginning a
020450:  6E 64 2E 6F 72 20 65 6E 64 20 6F 66 20 61 20 73    nd.or end of a s
020460:  74 72 69 6E 67 20 69 6E 20 6F 72 64 65 72 20 74    tring in order t
020470:  6F 0D 0A 09 6D 61 74 63 68 20 6F 6E 6C 79 20 70    o...match only p
020480:  61 72 74 20 6F 66 20 61 20 73 74 72 69 6E 67 2A    art of a string*
020490:  29 0D 0A 0D 0A 56 41 52 09 50 6F 73 3A 43 41 52    )....VAR.Pos:CAR
0204A0:  44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09    DINAL;..BEGIN...
0204B0:  50 6F 73 3A 3D 30 3B 0D 0A 09 4C 65 6E 3A 3D 4C    Pos:=0;...Len:=L
0204C0:  65 6E 67 74 68 28 73 29 3B 0D 0A 09 52 45 54 55    ength(s);...RETU
0204D0:  52 4E 20 50 61 74 74 65 72 6E 28 70 2C 73 2C 50    RN Pattern(p,s,P
0204E0:  6F 73 29 3B 0D 0A 09 45 4E 44 20 4D 61 74 63 68    os);...END Match
0204F0:  50 61 74 74 65 72 6E 3B 0D 0A 45 4E 44 20 50 61    Pattern;..END Pa
020500:  4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 69    OLEAN=FALSE;...i
020510:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 0D 0A 28 2A    :CARDINAL;....(*
020520:  09 54 68 65 20 6E 65 78 74 20 66 65 77 20 72 6F    .The next few ro
020530:  75 74 69 6E 65 73 20 68 61 6E 64 6C 65 20 74 68    utines handle th
020540:  65 20 63 75 72 73 6F 72 0D 0A 0D 0A 09 57 61 73    e cursor.....Was
020550:  55 6E 64 65 72 4C 69 6E 65 64 20 69 73 20 74 72    UnderLined is tr
020560:  75 65 20 69 66 20 74 68 65 20 63 68 61 72 61 63    ue if the charac
020570:  74 65 72 20 75 6E 64 65 72 20 74 68 65 20 63 75    ter under the cu
020580:  72 73 6F 72 0D 0A 09 73 74 61 72 74 65 64 20 6F    rsor...started o
020590:  75 74 20 75 6E 64 65 72 6C 69 6E 65 64 0D 0A 09    ut underlined...
0205A0:  0D 0A 09 54 69 6D 65 54 6F 43 68 61 6E 67 65 20    ...TimeToChange 
0205B0:  69 73 20 61 20 63 6F 75 6E 74 65 72 20 74 68 61    is a counter tha
0205C0:  74 20 64 65 74 65 72 6D 69 6E 65 73 20 77 68 65    t determines whe
0205D0:  6E 20 74 68 65 20 63 75 72 73 6F 72 20 73 68 6F    n the cursor sho
0205E0:  75 6C 64 0D 0A 09 62 65 20 63 68 61 6E 67 65 64    uld...be changed
0205F0:  20 66 72 6F 6D 20 69 74 73 20 63 75 72 72 65 6E     from its curren
020600:  74 20 76 61 6C 75 65 20 74 6F 20 69 74 73 20 6E    t value to its n
020610:  65 67 61 74 69 76 65 2C 20 74 6F 20 61 6C 6C 6F    egative, to allo
020620:  77 20 62 6C 69 6E 6B 69 6E 67 0D 0A 2A 29 0D 0A    w blinking..*)..
020630:  56 41 52 09 57 61 73 55 6E 64 65 72 4C 69 6E 65    VAR.WasUnderLine
020640:  64 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B    d:BOOLEAN=FALSE;
020650:  0D 0A 09 54 69 6D 65 54 6F 43 68 61 6E 67 65 3A    ...TimeToChange:
020660:  49 4E 54 45 47 45 52 3D 30 3B 0D 0A 09 4F 75 74    INTEGER=0;...Out
020670:  70 75 74 45 6E 61 62 6C 65 64 3A 42 4F 4F 4C 45    putEnabled:BOOLE
020680:  41 4E 3B 0D 0A 0D 0A 28 2A 09 42 6C 69 6E 6B 20    AN;....(*.Blink 
020690:  63 75 72 73 6F 72 20 2D 20 64 65 63 72 65 6D 65    cursor - decreme
0206A0:  6E 74 20 74 69 6D 65 72 2C 20 69 66 20 6E 65 67    nt timer, if neg
0206B0:  61 74 69 76 65 20 72 65 73 65 74 20 61 6E 64 0D    ative reset and.
0206C0:  0A 09 63 68 61 6E 67 65 20 74 6F 70 20 62 69 74    ..change top bit
0206D0:  20 6F 66 20 63 68 61 72 61 63 74 65 72 20 75 6E     of character un
0206E0:  64 65 72 20 63 75 72 73 6F 72 2A 29 0D 0A 0D 0A    der cursor*)....
0206F0:  50 52 4F 43 45 44 55 52 45 20 42 6C 69 6E 6B 43    PROCEDURE BlinkC
020700:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
020710:  4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D    ODULE ScreenIO;.
020720:  0A 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 74 68    ...(*.This is th
020730:  65 20 6D 65 6D 6F 72 79 20 6D 61 70 70 65 64 20    e memory mapped 
020740:  76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72 65 65    version of scree
020750:  6E 20 69 6E 70 75 74 2D 6F 75 74 70 75 74 0D 0A    n input-output..
020760:  0D 0A 09 54 6F 20 75 73 65 20 69 74 20 6F 6E 20    ...To use it on 
020770:  79 6F 75 72 20 6D 61 63 68 69 6E 65 2C 20 79 6F    your machine, yo
020780:  75 20 6D 61 79 20 6E 65 65 64 20 74 6F 20 63 68    u may need to ch
020790:  61 6E 67 65 20 73 6F 6D 65 20 6F 66 20 74 68 65    ange some of the
0207A0:  20 0D 0A 09 63 6F 6E 73 74 61 6E 74 73 20 62 65     ...constants be
0207B0:  6C 6F 77 0D 0A 0D 0A 09 54 68 65 20 6D 6F 64 75    low.....The modu
0207C0:  6C 65 20 61 73 73 75 6D 65 73 20 74 68 61 74 20    le assumes that 
0207D0:  74 68 65 20 6D 65 6D 6F 72 79 20 66 6F 72 20 74    the memory for t
0207E0:  68 65 20 73 63 72 65 65 6E 20 69 73 20 63 6F 6E    he screen is con
0207F0:  74 69 67 75 6F 75 73 20 0D 0A 09 61 6E 64 20 69    tiguous ...and i
020800:  6E 20 74 68 65 20 64 65 66 61 75 6C 74 20 62 61    n the default ba
020810:  6E 6B 2E 20 28 49 66 20 69 74 20 69 73 20 69 6E    nk. (If it is in
020820:  20 61 6E 6F 74 68 65 72 20 62 61 6E 6B 2C 20 79     another bank, y
020830:  6F 75 20 77 69 6C 6C 20 68 61 76 65 20 0D 0A 09    ou will have ...
020840:  74 6F 20 63 68 61 6E 67 65 20 74 68 65 20 63 6F    to change the co
020850:  64 65 20 6F 66 20 74 68 65 20 6D 6F 64 75 6C 65    de of the module
020860:  20 61 70 70 72 6F 70 72 69 61 74 65 6C 79 29 0D     appropriately).
020870:  0A 0D 0A 09 54 68 65 20 76 61 6C 75 65 73 20 73    ....The values s
020880:  65 74 20 62 65 6C 6F 77 20 61 72 65 20 66 6F 72    et below are for
020890:  20 61 6E 20 4F 73 62 6F 72 6E 65 20 31 20 77 69     an Osborne 1 wi
0208A0:  74 68 20 53 63 72 65 65 6E 20 50 61 63 6B 0D 0A    th Screen Pack..
0208B0:  0D 0A 09 4E 6F 74 65 20 74 68 61 74 20 74 68 69    ...Note that thi
0208C0:  73 20 76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72    s version of scr
0208D0:  65 65 6E 69 6F 20 64 6F 65 73 20 6E 6F 74 20 75    eenio does not u
0208E0:  73 65 20 74 68 65 20 74 65 72 6D 69 6E 61 6C 20    se the terminal 
0208F0:  0D 0A 09 64 65 66 69 6E 69 74 69 6F 6E 20 66 69    ...definition fi
020900:  75 72 73 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09    ursor;..BEGIN...
020910:  44 45 43 28 54 69 6D 65 54 6F 43 68 61 6E 67 65    DEC(TimeToChange
020920:  29 3B 0D 0A 09 49 46 20 54 69 6D 65 54 6F 43 68    );...IF TimeToCh
020930:  61 6E 67 65 3C 30 20 54 48 45 4E 0D 0A 09 09 54    ange<0 THEN....T
020940:  69 6D 65 54 6F 43 68 61 6E 67 65 3A 3D 39 30 30    imeToChange:=900
020950:  3B 09 28 2A 63 68 61 6E 67 65 20 74 6F 20 63 68    ;.(*change to ch
020960:  61 6E 67 65 20 62 6C 69 6E 6B 20 72 61 74 65 2A    ange blink rate*
020970:  29 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 65    )....Screen[Scre
020980:  65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 28    enPos]:=CHR(ORD(
020990:  53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73    Screen[ScreenPos
0209A0:  5D 29 2B 31 32 38 29 0D 0A 09 09 45 4E 44 0D 0A    ])+128)....END..
0209B0:  09 45 4E 44 20 42 6C 69 6E 6B 43 75 72 73 6F 72    .END BlinkCursor
0209C0:  3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43    ;....PROCEDURE C
0209D0:  6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 42 45 47    learCursor;..BEG
0209E0:  49 4E 0D 0A 09 49 46 20 28 53 63 72 65 65 6E 5B    IN...IF (Screen[
0209F0:  53 63 72 65 65 6E 50 6F 73 5D 3E 37 66 78 29 3C    ScreenPos]>7fx)<
020A00:  3E 57 61 73 55 6E 64 65 72 4C 69 6E 65 64 20 54    >WasUnderLined T
020A10:  48 45 4E 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63    HEN....Screen[Sc
020A20:  72 65 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52    reenPos]:=CHR(OR
020A30:  44 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50    D(Screen[ScreenP
020A40:  6F 73 5D 29 2B 31 32 38 29 3B 0D 0A 09 09 45 4E    os])+128);....EN
020A50:  44 3B 0D 0A 09 57 61 73 55 6E 64 65 72 4C 69 6E    D;...WasUnderLin
020A60:  65 64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 45 4E 44    ed:=FALSE;...END
020A70:  20 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 50     ClearCursor;..P
020A80:  52 4F 43 45 44 55 52 45 20 53 65 74 43 75 72 73    ROCEDURE SetCurs
020A90:  6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 61 73    or;..BEGIN...Was
020AA0:  55 6E 64 65 72 4C 69 6E 65 64 3A 3D 53 63 72 65    UnderLined:=Scre
020AB0:  65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3E 3D 38    en[ScreenPos]>=8
020AC0:  30 78 3B 0D 0A 09 53 63 72 65 65 6E 5B 53 63 72    0x;...Screen[Scr
020AD0:  65 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44    eenPos]:=CHR(ORD
020AE0:  28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F    (Screen[ScreenPo
020AF0:  73 5D 29 2B 31 32 38 29 3B 0D 0A 09 45 4E 44 20    s])+128);...END 
020B00:  6C 65 2E 20 48 65 6E 63 65 2C 20 74 68 65 20 67    le. Hence, the g
020B10:  72 61 70 68 69 63 73 20 63 68 61 72 61 63 74 65    raphics characte
020B20:  72 73 20 66 6F 72 20 74 68 65 20 62 6F 78 20 61    rs for the box a
020B30:  72 65 0D 0A 09 68 61 72 64 20 63 6F 64 65 64 20    re...hard coded 
020B40:  69 6E 20 74 68 65 20 66 69 6C 65 0D 0A 0D 0A 09    in the file.....
020B50:  54 68 69 73 20 76 65 72 73 69 6F 6E 20 77 69 6C    This version wil
020B60:  6C 20 6E 6F 74 20 73 75 70 70 6F 72 74 20 68 61    l not support ha
020B70:  6C 66 20 69 6E 74 65 6E 73 69 74 79 20 6F 6E 20    lf intensity on 
020B80:  74 68 65 20 4F 73 62 6F 72 6E 65 20 73 69 6E 63    the Osborne sinc
020B90:  65 20 0D 0A 09 74 68 61 74 20 66 61 63 69 6C 69    e ...that facili
020BA0:  74 79 20 64 6F 65 73 20 6E 6F 74 20 77 6F 72 6B    ty does not work
020BB0:  20 61 73 20 64 6F 63 75 6D 65 6E 74 65 64 2E 20     as documented. 
020BC0:  54 68 69 73 20 6D 61 79 20 62 65 20 73 6F 6D 65    This may be some
020BD0:  74 68 69 6E 67 0D 0A 09 74 6F 20 64 6F 20 77 69    thing...to do wi
020BE0:  74 68 20 6D 79 20 4F 73 62 6F 72 6E 65 20 68 61    th my Osborne ha
020BF0:  76 69 6E 67 20 62 65 65 6E 20 68 61 63 6B 65 64    ving been hacked
020C00:  0D 0A 0D 0A 09 54 68 69 73 20 76 65 72 73 69 6F    .....This versio
020C10:  6E 20 77 69 6C 6C 20 6E 6F 74 20 73 63 72 6F 6C    n will not scrol
020C20:  6C 20 74 68 65 20 73 63 72 65 65 6E 20 65 69 74    l the screen eit
020C30:  68 65 72 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D 20    her..*)....FROM 
020C40:  54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20    Terminal IMPORT 
020C50:  43 68 61 72 52 6F 75 74 69 6E 65 2C 43 68 61 72    CharRoutine,Char
020C60:  45 6E 61 62 6C 65 64 2C 42 6C 69 6E 6B 52 6F 75    Enabled,BlinkRou
020C70:  74 69 6E 65 2C 42 6C 69 6E 6B 45 6E 61 62 6C 65    tine,BlinkEnable
020C80:  64 3B 0D 0A 46 52 4F 4D 20 46 61 73 74 4D 6F 76    d;..FROM FastMov
020C90:  65 20 49 4D 50 4F 52 54 20 4D 6F 76 65 75 70 2C    e IMPORT Moveup,
020CA0:  4D 6F 76 65 64 6F 77 6E 3B 0D 0A 46 52 4F 4D 20    Movedown;..FROM 
020CB0:  53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 41 44    SYSTEM IMPORT AD
020CC0:  52 2C 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 43 50    R,SIZE;..FROM CP
020CD0:  4D 20 49 4D 50 4F 52 54 20 77 63 63 66 63 2C 42    M IMPORT wccfc,B
020CE0:  44 4F 53 3B 0D 0A 28 2A 46 52 4F 4D 20 4F 73 62    DOS;..(*FROM Osb
020CF0:  6F 72 6E 65 20 49 4D 50 4F 52 54 20 42 61 6E 6B    orne IMPORT Bank
020D00:  53 65 74 43 75 72 73 6F 72 3B 0D 0A 0D 0A 50 52    SetCursor;....PR
020D10:  4F 43 45 44 55 52 45 20 47 6F 74 6F 78 79 28 78    OCEDURE Gotoxy(x
020D20:  2C 79 3A 43 41 52 44 49 4E 41 4C 29 3B 09 09 0D    ,y:CARDINAL);...
020D30:  0A 0D 0A 28 2A 09 09 50 6F 73 69 74 69 6F 6E 20    ...(*..Position 
020D40:  74 6F 20 67 69 76 65 6E 20 63 6F 6F 72 64 69 6E    to given coordin
020D50:  61 74 65 73 0D 0A 09 09 74 6F 70 20 6C 65 66 74    ates....top left
020D60:  20 69 73 20 61 6C 77 61 79 73 20 30 2C 30 20 0D     is always 0,0 .
020D70:  0A 0D 0A 09 09 78 20 69 73 20 63 6F 6C 75 6D 6E    .....x is column
020D80:  2C 20 79 20 69 73 20 72 6F 77 0D 0A 0D 0A 09 09    , y is row......
020D90:  41 20 27 53 74 61 6E 64 61 72 64 27 20 53 63 72    A 'Standard' Scr
020DA0:  65 65 6E 20 69 73 20 38 30 20 62 79 20 32 34 2E    een is 80 by 24.
020DB0:  20 54 68 65 20 6C 69 6D 69 74 20 69 73 20 73 65     The limit is se
020DC0:  74 20 62 79 0D 0A 09 09 74 68 65 20 74 65 72 6D    t by....the term
020DD0:  69 6E 61 6C 20 64 65 66 69 6E 69 74 69 6F 6E 20    inal definition 
020DE0:  66 69 6C 65 09 2A 29 0D 0A 42 45 47 49 4E 0D 0A    file.*)..BEGIN..
020DF0:  20 20 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61        IF OutputEna
020E00:  62 6C 65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61    bled THEN...Clea
020E10:  72 43 75 72 73 6F 72 3B 0D 0A 09 43 6F 6C 4E 6F    rCursor;...ColNo
020E20:  3A 3D 78 3B 0D 0A 09 52 6F 77 4E 6F 3A 3D 79 3B    :=x;...RowNo:=y;
020E30:  0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D 43 6F    ...ScreenPos:=Co
020E40:  6C 4E 6F 2B 52 6F 77 4E 6F 2A 43 68 61 72 49 6E    lNo+RowNo*CharIn
020E50:  63 72 65 6D 65 6E 74 2A 52 6F 77 57 69 64 74 68    crement*RowWidth
020E60:  3B 0D 0A 09 49 46 20 53 63 72 65 65 6E 50 6F 73    ;...IF ScreenPos
020E70:  3E 3D 53 63 72 65 65 6E 53 69 7A 65 20 54 48 45    >=ScreenSize THE
020E80:  4E 0D 0A 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A    N....ColNo:=0;..
020E90:  09 09 52 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 09 53    ..RowNo:=0;....S
020EA0:  63 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 09    creenPos:=0;....
020EB0:  45 4E 44 3B 0D 0A 09 53 65 74 43 75 72 73 6F 72    END;...SetCursor
020EC0:  3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45 4E    ;...END;..    EN
020ED0:  44 20 47 6F 74 6F 78 79 3B 0D 0A 0D 0A 50 52 4F    D Gotoxy;....PRO
020EE0:  43 45 44 55 52 45 20 50 75 74 61 6E 64 49 6E 63    CEDURE PutandInc
020EF0:  28 63 68 3A 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A    (ch:CHAR);....(*
020F00:  32 3B 2A 29 0D 0A 46 52 4F 4D 20 49 6E 74 4C 6F    2;*)..FROM IntLo
020F10:  67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E 44 3B    gic IMPORT IAND;
020F20:  0D 0A 0D 0A 28 2A 09 53 63 72 65 65 6E 20 68 61    ....(*.Screen ha
020F30:  6E 64 6C 69 6E 67 20 72 6F 75 74 69 6E 65 73 20    ndling routines 
020F40:  66 6F 72 20 63 75 72 73 6F 72 20 70 6F 73 69 74    for cursor posit
020F50:  69 6F 6E 2C 20 61 74 74 72 69 62 75 74 65 20 65    ion, attribute e
020F60:  74 63 0D 0A 0D 0A 09 53 70 65 63 69 66 69 63 20    tc.....Specific 
020F70:  74 6F 20 74 68 69 73 20 63 6F 6D 70 69 6C 65 72    to this compiler
020F80:  2A 29 0D 0A 0D 0A 43 4F 4E 53 54 09 4C 6F 67 53    *)....CONST.LogS
020F90:  63 72 65 65 6E 57 69 64 74 68 3D 38 30 3B 09 28    creenWidth=80;.(
020FA0:  2A 4C 6F 67 69 63 61 6C 20 73 63 72 65 65 6E 20    *Logical screen 
020FB0:  77 69 64 74 68 20 0D 0A 09 09 09 09 28 6D 61 6E    width ......(man
020FC0:  79 20 70 65 6F 70 6C 65 20 6F 6E 6C 79 20 68 61    y people only ha
020FD0:  76 65 20 38 30 29 2A 29 0D 0A 09 52 6F 77 57 69    ve 80)*)...RowWi
020FE0:  64 74 68 3D 38 30 3B 09 09 28 2A 77 69 64 74 68    dth=80;..(*width
020FF0:  20 6F 66 20 6D 65 6D 6F 72 79 20 66 6F 72 20 6F     of memory for o
021000:  6E 65 20 72 6F 77 20 0D 0A 09 09 09 09 28 69 2E    ne row ......(i.
021010:  65 2E 20 6E 75 6D 62 65 72 20 6F 66 20 62 79 74    e. number of byt
021020:  65 73 2A 29 0D 0A 09 4C 6F 67 53 63 72 65 65 6E    es*)...LogScreen
021030:  44 65 70 74 68 3D 32 34 3B 09 09 28 2A 4C 69 6E    Depth=24;..(*Lin
021040:  65 73 20 6F 6E 20 74 68 65 20 73 63 72 65 65 6E    es on the screen
021050:  2A 29 0D 0A 09 53 63 72 65 65 6E 53 74 61 72 74    *)...ScreenStart
021060:  3D 30 66 30 30 30 68 3B 09 28 2A 62 61 73 65 20    =0f000h;.(*base 
021070:  6F 66 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 68    of screen*)...Ch
021080:  61 72 49 6E 63 72 65 6D 65 6E 74 3D 31 3B 09 28    arIncrement=1;.(
021090:  2A 6E 75 6D 62 65 72 20 6F 66 20 62 79 74 65 73    *number of bytes
0210A0:  20 62 65 74 77 65 65 6E 20 63 68 61 72 61 63 74     between charact
0210B0:  65 72 73 2A 29 0D 0A 09 53 63 72 65 65 6E 53 69    ers*)...ScreenSi
0210C0:  7A 65 3D 38 30 2A 32 34 3B 09 28 2A 6E 75 6D 62    ze=80*24;.(*numb
0210D0:  65 72 20 6F 66 20 62 79 74 65 73 20 69 6E 20 73    er of bytes in s
0210E0:  63 72 65 65 6E 20 61 72 65 61 2A 29 0D 0A 0D 0A    creen area*)....
0210F0:  09 43 52 3D 30 64 78 3B 09 09 09 28 2A 43 61 72    .CR=0dx;...(*Car
021100:  09 6F 75 74 70 75 74 20 61 20 63 68 61 72 61 63    .output a charac
021110:  74 65 72 20 61 6E 64 20 69 6E 63 72 65 6D 65 6E    ter and incremen
021120:  74 20 70 6F 69 6E 74 65 72 73 2A 29 0D 0A 0D 0A    t pointers*)....
021130:  42 45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 5B 53    BEGIN...Screen[S
021140:  63 72 65 65 6E 50 6F 73 5D 3A 3D 63 68 3B 0D 0A    creenPos]:=ch;..
021150:  0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63    ...ScreenPos:=Sc
021160:  72 65 65 6E 50 6F 73 2B 43 68 61 72 49 6E 63 72    reenPos+CharIncr
021170:  65 6D 65 6E 74 3B 0D 0A 09 49 4E 43 28 43 6F 6C    ement;...INC(Col
021180:  4E 6F 29 3B 0D 0A 09 49 46 20 43 6F 6C 4E 6F 3E    No);...IF ColNo>
021190:  3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68 20    =LogScreenWidth 
0211A0:  54 48 45 4E 0D 0A 09 09 49 46 20 52 6F 77 4E 6F    THEN....IF RowNo
0211B0:  3C 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 68    <(LogScreenDepth
0211C0:  2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 49 4E 43    -1) THEN.....INC
0211D0:  28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 43 6F 6C    (RowNo);.....Col
0211E0:  4E 6F 3A 3D 30 3B 0D 0A 09 09 45 4C 53 45 0D 0A    No:=0;....ELSE..
0211F0:  09 09 09 44 45 43 28 43 6F 6C 4E 6F 29 3B 0D 0A    ...DEC(ColNo);..
021200:  09 09 09 44 45 43 28 53 63 72 65 65 6E 50 6F 73    ...DEC(ScreenPos
021210:  29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45    );.....END;....E
021220:  4E 44 3B 0D 0A 09 45 4E 44 20 50 75 74 61 6E 64    ND;...END Putand
021230:  49 6E 63 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52    Inc;....PROCEDUR
021240:  45 20 57 72 69 74 65 28 63 68 3A 43 48 41 52 29    E Write(ch:CHAR)
021250:  3B 0D 0A 28 2A 09 57 72 69 74 65 20 61 20 63 68    ;..(*.Write a ch
021260:  61 72 61 63 74 65 72 0D 0A 0D 0A 09 54 68 69 73    aracter.....This
021270:  20 72 6F 75 74 69 6E 65 20 69 73 20 75 73 65 64     routine is used
021280:  20 62 79 20 74 65 72 6D 69 6E 61 6C 20 77 68 65     by terminal whe
021290:  6E 20 74 68 69 73 20 76 65 72 73 69 6F 6E 20 6F    n this version o
0212A0:  66 20 53 63 72 65 65 6E 49 4F 20 0D 0A 09 69 73    f ScreenIO ...is
0212B0:  20 69 6E 20 75 73 65 20 62 65 63 61 75 73 65 20     in use because 
0212C0:  61 20 66 6C 61 67 20 69 73 20 73 65 74 20 62 79    a flag is set by
0212D0:  20 74 68 65 20 69 6E 69 74 69 61 6C 69 73 61 74     the initialisat
0212E0:  69 6F 6E 20 6F 66 20 74 68 69 73 20 6D 6F 64 75    ion of this modu
0212F0:  6C 65 20 0D 0A 09 74 6F 67 65 74 68 65 72 20 77    le ...together w
021300:  72 69 61 67 65 20 72 65 74 75 72 6E 2A 29 0D 0A    riage return*)..
021310:  09 4C 46 3D 30 61 78 3B 09 09 09 28 2A 4C 69 6E    .LF=0ax;...(*Lin
021320:  65 20 66 65 65 64 2A 29 0D 0A 09 54 41 42 3D 30    e feed*)...TAB=0
021330:  39 78 3B 09 09 28 2A 54 41 42 2A 29 0D 0A 09 42    9x;..(*TAB*)...B
021340:  53 3D 30 38 78 3B 0D 0A 56 41 52 0D 0A 09 53 63    S=08x;..VAR...Sc
021350:  72 65 65 6E 5B 30 66 30 30 30 68 5D 3A 41 52 52    reen[0f000h]:ARR
021360:  41 59 5B 30 2E 2E 53 63 72 65 65 6E 53 69 7A 65    AY[0..ScreenSize
021370:  2D 31 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 50    -1] OF CHAR;...P
021380:  43 47 5B 30 66 38 30 30 68 5D 3A 41 52 52 41 59    CG[0f800h]:ARRAY
021390:  5B 30 2E 2E 34 38 5D 20 4F 46 20 43 48 41 52 3B    [0..48] OF CHAR;
0213A0:  0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 43 41 52    ...ScreenPos:CAR
0213B0:  44 49 4E 41 4C 3B 09 28 2A 6E 65 78 74 20 63 68    DINAL;.(*next ch
0213C0:  61 72 61 63 74 65 72 20 70 6F 73 69 74 69 6F 6E    aracter position
0213D0:  20 6F 6E 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43     on screen*)...C
0213E0:  6F 6C 4E 6F 2C 52 6F 77 4E 6F 3A 43 41 52 44 49    olNo,RowNo:CARDI
0213F0:  4E 41 4C 3B 09 28 2A 77 68 69 63 68 20 72 65 70    NAL;.(*which rep
021400:  72 65 73 65 6E 74 73 20 74 68 65 20 67 69 76 65    resents the give
021410:  6E 20 70 6F 73 69 74 69 6F 6E 2A 29 0D 0A 0D 0A    n position*)....
021420:  09 28 2A 09 43 6F 6E 74 72 6F 6C 20 61 74 74 72    .(*.Control attr
021430:  69 62 75 74 65 73 2A 29 0D 0A 0D 0A 09 48 61 6C    ibutes*).....Hal
021440:  66 49 6E 74 65 6E 73 69 74 79 3A 42 4F 4F 4C 45    fIntensity:BOOLE
021450:  41 4E 3D 46 41 4C 53 45 3B 09 28 2A 74 72 75 65    AN=FALSE;.(*true
021460:  20 69 66 20 69 6E 20 68 61 6C 66 20 69 6E 74 65     if in half inte
021470:  6E 73 69 74 79 20 6D 6F 64 65 2A 29 0D 0A 09 45    nsity mode*)...E
021480:  6E 68 61 6E 63 65 64 56 69 64 65 6F 3A 42 4F 4F    nhancedVideo:BOO
021490:  4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 55 6E    LEAN=FALSE;...Un
0214A0:  64 65 72 4C 69 6E 65 3A 42 4F 4F 4C 45 41 4E 3D    derLine:BOOLEAN=
0214B0:  46 41 4C 53 45 3B 09 28 2A 74 72 75 65 20 69 66    FALSE;.(*true if
0214C0:  20 69 6E 20 75 6E 64 65 72 6C 69 6E 65 20 6D 6F     in underline mo
0214D0:  64 65 2A 29 0D 0A 09 49 6E 76 65 72 73 65 56 69    de*)...InverseVi
0214E0:  64 65 6F 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53    deo:BOOLEAN=FALS
0214F0:  45 3B 0D 0A 09 42 6C 69 6E 6B 69 6E 67 3A 42 4F    E;...Blinking:BO
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 41 02 00 00 00 02    ......R...A.....
021520:  1C 00 46 02 00 00 00 02 1C 00 42 02 00 00 00 02    ..F.......B.....
021530:  1C 00 47 02 00 00 00 02 1C 00 43 02 00 00 00 02    ..G.......C.....
021540:  1C 00 48 02 00 00 00 02 1C 00 44 02 00 00 00 02    ..H.......D.....
021550:  1C 00 49 02 00 00 00 02 1C 00 45 02 00 00 00 02    ..I.......E.....
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:  69 74 68 20 74 68 65 20 61 64 64 72 65 73 73 20    ith the address 
021610:  6F 66 20 74 68 69 73 20 72 6F 75 74 69 6E 65 0D    of this routine.
021620:  0A 0D 0A 09 54 68 69 73 20 72 6F 75 74 69 6E 65    ....This routine
021630:  20 77 69 6C 6C 20 6E 65 65 64 20 63 68 61 6E 67     will need chang
021640:  69 6E 67 20 66 6F 72 20 64 69 66 66 65 72 65 6E    ing for differen
021650:  74 20 76 69 64 65 6F 20 73 79 73 74 65 6D 73 0D    t video systems.
021660:  0A 0D 0A 09 54 68 65 20 4F 73 62 6F 72 6E 65 20    ....The Osborne 
021670:  31 20 69 73 20 76 65 72 79 20 6C 69 6D 69 74 65    1 is very limite
021680:  64 20 2D 20 61 6C 6C 20 79 6F 75 20 63 61 6E 20    d - all you can 
021690:  64 6F 20 69 73 0D 0A 09 75 6E 64 65 72 6C 69 6E    do is...underlin
0216A0:  65 20 61 6E 64 20 68 61 6C 66 20 69 6E 74 65 6E    e and half inten
0216B0:  73 69 74 79 2E 20 41 6C 6C 20 6F 74 68 65 72 73    sity. All others
0216C0:  20 61 72 65 20 6D 61 70 70 65 64 20 6F 6E 74 6F     are mapped onto
0216D0:  20 74 68 65 73 65 20 74 77 6F 0D 0A 2A 29 0D 0A     these two..*)..
0216E0:  42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F 75    BEGIN..    IF Ou
0216F0:  74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45 4E    tputEnabled THEN
021700:  0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D    ...ClearCursor;.
021710:  0A 09 49 46 20 63 68 3E 30 37 66 78 20 54 48 45    ..IF ch>07fx THE
021720:  4E 20 63 68 3A 3D 43 48 52 28 4F 52 44 28 63 68    N ch:=CHR(ORD(ch
021730:  29 2D 31 32 38 29 20 45 4E 44 3B 0D 0A 09 49 46    )-128) END;...IF
021740:  20 63 68 3D 43 52 20 54 48 45 4E 0D 0A 09 09 53     ch=CR THEN....S
021750:  63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E    creenPos:=Screen
021760:  50 6F 73 2D 43 6F 6C 4E 6F 3B 0D 0A 09 09 43 6F    Pos-ColNo;....Co
021770:  6C 4E 6F 3A 3D 30 3B 0D 0A 09 45 4C 53 49 46 20    lNo:=0;...ELSIF 
021780:  63 68 3D 4C 46 20 54 48 45 4E 0D 0A 09 09 49 46    ch=LF THEN....IF
021790:  20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 72 65 65     RowNo<(LogScree
0217A0:  6E 44 65 70 74 68 2D 31 29 20 54 48 45 4E 0D 0A    nDepth-1) THEN..
0217B0:  09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A    ...INC(RowNo);..
0217C0:  09 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63    ...ScreenPos:=Sc
0217D0:  72 65 65 6E 50 6F 73 2B 52 6F 77 57 69 64 74 68    reenPos+RowWidth
0217E0:  3B 0D 0A 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49    ;.....END...ELSI
0217F0:  46 20 63 68 3D 42 53 20 54 48 45 4E 0D 0A 09 09    F ch=BS THEN....
021800:  69 66 69 63 20 2D 20 68 6F 6D 65 20 73 63 72 65    ific - home scre
021810:  65 6E 20 61 6E 64 20 63 75 72 73 6F 72 20 0D 0A    en and cursor ..
021820:  09 09 09 20 70 6F 73 69 74 69 6F 6E 20 61 73 20    ... position as 
021830:  73 74 6F 72 65 64 20 69 6E 20 42 49 4F 53 20 74    stored in BIOS t
021840:  61 62 6C 65 73 2A 29 0D 0A 09 09 0D 0A 09 09 09    ables*).........
021850:  28 2A 6E 6F 77 20 63 6C 65 61 72 20 64 69 73 70    (*now clear disp
021860:  6C 61 79 20 6D 65 6D 6F 72 79 2A 29 0D 0A 09 09    lay memory*)....
021870:  20 20 20 20 53 63 72 65 65 6E 5B 30 5D 3A 3D 27        Screen[0]:='
021880:  20 27 3B 0D 0A 09 09 20 20 20 20 4D 6F 76 65 75     ';....    Moveu
021890:  70 28 41 44 52 28 53 63 72 65 65 6E 5B 31 5D 29    p(ADR(Screen[1])
0218A0:  2C 41 44 52 28 53 63 72 65 65 6E 5B 30 5D 29 2C    ,ADR(Screen[0]),
0218B0:  53 63 72 65 65 6E 53 69 7A 65 2D 31 29 3B 0D 0A    ScreenSize-1);..
0218C0:  09 09 20 20 20 20 53 63 72 65 65 6E 50 6F 73 3A    ..    ScreenPos:
0218D0:  3D 30 3B 0D 0A 09 09 20 20 20 20 43 6F 6C 4E 6F    =0;....    ColNo
0218E0:  3A 3D 30 3B 0D 0A 09 09 20 20 20 20 52 6F 77 4E    :=0;....    RowN
0218F0:  6F 3A 3D 30 0D 0A 09 09 20 20 20 20 7C 0D 0A 0D    o:=0....    |...
021900:  0A 09 28 2A 20 54 68 65 20 66 6F 6C 6C 6F 77 69    ..(* The followi
021910:  6E 67 20 67 72 61 70 68 69 63 73 20 63 68 61 72    ng graphics char
021920:  61 63 74 65 72 73 20 77 69 6C 6C 20 6E 65 65 64    acters will need
021930:  20 74 6F 20 62 65 20 6D 6F 64 69 66 69 65 64 20     to be modified 
021940:  66 6F 72 20 0D 0A 09 20 20 20 64 69 66 66 65 72    for ...   differ
021950:  65 6E 74 20 64 69 73 70 6C 61 79 20 73 79 73 74    ent display syst
021960:  65 6D 73 2A 29 0D 0A 0D 0A 09 48 6F 72 69 7A 6F    ems*).....Horizo
021970:  6E 74 61 6C 3A 50 75 74 61 6E 64 49 6E 63 28 38    ntal:PutandInc(8
021980:  31 78 29 7C 0D 0A 09 56 65 72 74 69 63 61 6C 3A    1x)|...Vertical:
021990:  50 75 74 61 6E 64 49 6E 63 28 38 30 78 29 7C 0D    PutandInc(80x)|.
0219A0:  0A 09 43 6F 72 6E 65 72 4C 4C 3A 50 75 74 61 6E    ..CornerLL:Putan
0219B0:  64 49 6E 63 28 38 34 78 29 7C 0D 0A 09 43 6F 72    dInc(84x)|...Cor
0219C0:  6E 65 72 55 4C 3A 50 75 74 61 6E 64 49 6E 63 28    nerUL:PutandInc(
0219D0:  38 32 78 29 7C 0D 0A 09 43 6F 72 6E 65 72 55 52    82x)|...CornerUR
0219E0:  3A 50 75 74 61 6E 64 49 6E 63 28 38 33 78 29 7C    :PutandInc(83x)|
0219F0:  0D 0A 09 43 6F 72 6E 65 72 4C 52 3A 50 75 74 61    ...CornerLR:Puta
021A00:  49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48 45 4E 0D    IF ColNo>0 THEN.
021A10:  0A 09 09 09 44 45 43 28 43 6F 6C 4E 6F 29 3B 0D    ....DEC(ColNo);.
021A20:  0A 09 09 09 44 45 43 28 53 63 72 65 65 6E 50 6F    ....DEC(ScreenPo
021A30:  73 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 5B 53    s);.....Screen[S
021A40:  63 72 65 65 6E 50 6F 73 5D 3A 3D 27 20 27 0D 0A    creenPos]:=' '..
021A50:  09 09 09 45 4E 44 0D 0A 09 45 4C 53 49 46 20 63    ...END...ELSIF c
021A60:  68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 09 4C 4F    h=TAB THEN....LO
021A70:  4F 50 0D 0A 09 09 09 49 46 20 43 6F 6C 4E 6F 3E    OP.....IF ColNo>
021A80:  3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D    =LogScreenWidth-
021A90:  31 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B    1 THEN EXIT END;
021AA0:  0D 0A 09 09 09 53 63 72 65 65 6E 5B 53 63 72 65    .....Screen[Scre
021AB0:  65 6E 50 6F 73 5D 3A 3D 27 20 27 3B 0D 0A 09 09    enPos]:=' ';....
021AC0:  09 49 4E 43 28 53 63 72 65 65 6E 50 6F 73 29 3B    .INC(ScreenPos);
021AD0:  0D 0A 09 09 09 49 4E 43 28 43 6F 6C 4E 6F 29 3B    .....INC(ColNo);
021AE0:  0D 0A 09 09 09 49 46 20 49 41 4E 44 28 43 6F 6C    .....IF IAND(Col
021AF0:  4E 6F 2C 37 29 3D 30 20 54 48 45 4E 20 45 58 49    No,7)=0 THEN EXI
021B00:  54 20 45 4E 44 0D 0A 09 09 09 45 4E 44 20 28 2A    T END.....END (*
021B10:  4C 4F 4F 50 2A 29 0D 0A 09 45 4C 53 45 09 0D 0A    LOOP*)...ELSE...
021B20:  09 09 49 46 20 55 6E 64 65 72 4C 69 6E 65 20 4F    ..IF UnderLine O
021B30:  52 20 45 6E 68 61 6E 63 65 64 56 69 64 65 6F 20    R EnhancedVideo 
021B40:  4F 52 20 42 6C 69 6E 6B 69 6E 67 20 4F 52 20 49    OR Blinking OR I
021B50:  6E 76 65 72 73 65 56 69 64 65 6F 20 54 48 45 4E    nverseVideo THEN
021B60:  20 0D 0A 09 09 09 63 68 3A 3D 43 48 52 28 4F 52     .....ch:=CHR(OR
021B70:  44 28 63 68 29 2B 31 32 38 29 0D 0A 09 09 09 45    D(ch)+128).....E
021B80:  4E 44 3B 0D 0A 09 09 50 75 74 61 6E 64 49 6E 63    ND;....PutandInc
021B90:  28 63 68 29 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A    (ch);....END; (*
021BA0:  4E 6F 74 20 43 52 20 6F 72 20 4C 46 20 6F 72 20    Not CR or LF or 
021BB0:  54 41 42 2A 29 0D 0A 09 53 65 74 43 75 72 73 6F    TAB*)...SetCurso
021BC0:  72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45    r;...END;..    E
021BD0:  4E 44 20 57 72 69 74 65 3B 0D 0A 0D 0A 0D 0A 50    ND Write;......P
021BE0:  52 4F 43 45 44 55 52 45 20 53 63 72 65 65 6E 43    ROCEDURE ScreenC
021BF0:  6F 6E 74 72 6F 6C 28 73 3A 45 64 69 74 73 29 3B    ontrol(s:Edits);
021C00:  6E 64 49 6E 63 28 38 35 78 29 7C 0D 0A 09 53 74    ndInc(85x)|...St
021C10:  61 72 74 78 79 2C 4D 69 64 64 6C 65 58 59 2C 45    artxy,MiddleXY,E
021C20:  6E 64 58 59 3A 28 2A 63 75 72 73 6F 72 20 61 64    ndXY:(*cursor ad
021C30:  64 72 65 73 73 69 6E 67 20 2D 20 6E 6F 74 20 72    dressing - not r
021C40:  65 71 75 69 72 65 64 2A 29 7C 0D 0A 09 52 69 6E    equired*)|...Rin
021C50:  67 42 65 6C 6C 3A 69 3A 3D 42 44 4F 53 28 77 63    gBell:i:=BDOS(wc
021C60:  63 66 63 2C 37 29 7C 0D 0A 09 4D 6F 76 65 4C 65    cfc,7)|...MoveLe
021C70:  66 74 3A 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48    ft:IF ColNo>0 TH
021C80:  45 4E 20 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E    EN .....DEC(ColN
021C90:  6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65    o);.....DEC(Scre
021CA0:  65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C 53 49 46    enPos);....ELSIF
021CB0:  20 52 6F 77 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09     RowNo>0 THEN...
021CC0:  09 09 44 45 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09    ..DEC(RowNo);...
021CD0:  09 09 43 6F 6C 4E 6F 3A 3D 4C 6F 67 53 63 72 65    ..ColNo:=LogScre
021CE0:  65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 09 09 53    enWidth-1;.....S
021CF0:  63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C 4E 6F 2B    creenPos:=ColNo+
021D00:  52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D    RowNo*RowWidth;.
021D10:  0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 52    ....END|...MoveR
021D20:  69 67 68 74 3A 49 46 20 43 6F 6C 4E 6F 3C 28 4C    ight:IF ColNo<(L
021D30:  6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D 31 29    ogScreenWidth-1)
021D40:  20 54 48 45 4E 20 0D 0A 09 09 09 49 4E 43 28 43     THEN .....INC(C
021D50:  6F 6C 4E 6F 29 3B 0D 0A 09 09 09 49 4E 43 28 53    olNo);.....INC(S
021D60:  63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C    creenPos);....EL
021D70:  53 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63    SIF RowNo<(LogSc
021D80:  72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 48 45    reenDepth-1) THE
021D90:  4E 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D    N.....ColNo:=0;.
021DA0:  0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D    ....INC(RowNo);.
021DB0:  0A 09 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 52    ....ScreenPos:=R
021DC0:  6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D 0A    owNo*RowWidth;..
021DD0:  09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 44 6F    ...END|...MoveDo
021DE0:  77 6E 3A 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67    wn:IF RowNo<(Log
021DF0:  53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54    ScreenDepth-1) T
021E00:  0D 0A 0D 0A 28 2A 09 09 50 65 72 66 6F 72 6D 20    ....(*..Perform 
021E10:  61 20 73 63 72 65 65 6E 20 63 6F 6E 74 72 6F 6C    a screen control
021E20:  20 6F 70 65 72 61 74 69 6F 6E 0D 0A 0D 0A 09 09     operation......
021E30:  4D 61 79 20 6E 65 65 64 20 61 6C 74 65 72 61 74    May need alterat
021E40:  69 6F 6E 20 66 6F 72 20 76 61 72 69 6F 75 73 20    ion for various 
021E50:  6D 61 63 68 69 6E 65 73 2A 29 0D 0A 0D 0A 42 45    machines*)....BE
021E60:  47 49 4E 0D 0A 20 20 20 20 49 46 20 4F 75 74 70    GIN..    IF Outp
021E70:  75 74 45 6E 61 62 6C 65 64 20 54 48 45 4E 0D 0A    utEnabled THEN..
021E80:  09 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 09    .ClearCursor;...
021E90:  43 41 53 45 20 73 20 4F 46 0D 0A 09 44 69 6D 3A    CASE s OF...Dim:
021EA0:  48 61 6C 66 49 6E 74 65 6E 73 69 74 79 3A 3D 54    HalfIntensity:=T
021EB0:  52 55 45 7C 0D 0A 09 42 72 69 67 68 74 3A 09 48    RUE|...Bright:.H
021EC0:  61 6C 66 49 6E 74 65 6E 73 69 74 79 3A 3D 46 41    alfIntensity:=FA
021ED0:  4C 53 45 0D 0A 09 09 45 6E 68 61 6E 63 65 64 56    LSE....EnhancedV
021EE0:  69 64 65 6F 3A 3D 54 52 55 45 7C 0D 0A 09 4E 6F    ideo:=TRUE|...No
021EF0:  72 6D 61 6C 3A 09 48 61 6C 66 49 6E 74 65 6E 73    rmal:.HalfIntens
021F00:  69 74 79 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 45    ity:=FALSE;....E
021F10:  6E 68 61 6E 63 65 64 56 69 64 65 6F 3A 3D 46 41    nhancedVideo:=FA
021F20:  4C 53 45 3B 0D 0A 09 09 49 6E 76 65 72 73 65 56    LSE;....InverseV
021F30:  69 64 65 6F 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09    ideo:=FALSE;....
021F40:  42 6C 69 6E 6B 69 6E 67 3A 3D 46 41 4C 53 45 3B    Blinking:=FALSE;
021F50:  0D 0A 09 09 55 6E 64 65 72 4C 69 6E 65 3A 3D 46    ....UnderLine:=F
021F60:  41 4C 53 45 7C 0D 0A 09 49 6E 76 65 72 73 65 3A    ALSE|...Inverse:
021F70:  49 6E 76 65 72 73 65 56 69 64 65 6F 3A 3D 54 52    InverseVideo:=TR
021F80:  55 45 7C 0D 0A 09 42 6C 69 6E 6B 3A 42 6C 69 6E    UE|...Blink:Blin
021F90:  6B 69 6E 67 3A 3D 54 52 55 45 7C 0D 0A 09 53 74    king:=TRUE|...St
021FA0:  61 72 74 47 72 61 70 68 2C 45 6E 64 47 72 61 70    artGraph,EndGrap
021FB0:  68 3A 28 2A 64 6F 20 6E 6F 74 68 69 6E 67 2A 29    h:(*do nothing*)
021FC0:  7C 0D 0A 09 44 65 6C 43 68 61 72 3A 28 2A 4D 6F    |...DelChar:(*Mo
021FD0:  76 65 20 72 65 73 74 20 6F 66 20 6C 69 6E 65 20    ve rest of line 
021FE0:  75 70 20 6F 6E 65 2C 20 61 64 64 20 62 6C 61 6E    up one, add blan
021FF0:  6B 20 74 6F 20 65 6E 64 2A 29 0D 0A 09 09 4D 6F    k to end*)....Mo
022000:  48 45 4E 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E    HEN.....INC(RowN
022010:  6F 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F    o);.....ScreenPo
022020:  73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B 52 6F 77    s:=ScreenPos+Row
022030:  57 69 64 74 68 3B 0D 0A 09 09 09 45 4E 44 7C 0D    Width;.....END|.
022040:  0A 09 4D 6F 76 65 55 70 3A 49 46 20 52 6F 77 4E    ..MoveUp:IF RowN
022050:  6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09 44 45 43    o>0 THEN.....DEC
022060:  28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 63 72    (RowNo);.....Scr
022070:  65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F    eenPos:=ScreenPo
022080:  73 2D 52 6F 77 57 69 64 74 68 3B 0D 0A 09 09 09    s-RowWidth;.....
022090:  45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 43    END;....END; (*C
0220A0:  41 53 45 2A 29 0D 0A 09 53 65 74 43 75 72 73 6F    ASE*)...SetCurso
0220B0:  72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45    r;...END;..    E
0220C0:  4E 44 20 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C    ND ScreenControl
0220D0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63 72    ;..PROCEDURE Scr
0220E0:  6F 6C 6C 57 69 6E 64 6F 77 55 70 28 53 74 61 72    ollWindowUp(Star
0220F0:  74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57    tofWindow,EndofW
022100:  69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B    indow:CARDINAL);
022110:  0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20    ..BEGIN..    IF 
022120:  4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48    OutputEnabled TH
022130:  45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72    EN...ClearCursor
022140:  3B 0D 0A 09 4D 6F 76 65 75 70 28 41 44 52 28 53    ;...Moveup(ADR(S
022150:  63 72 65 65 6E 5B 28 53 74 61 72 74 6F 66 57 69    creen[(StartofWi
022160:  6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 5D 29    ndow)*RowWidth])
022170:  2C 0D 0A 09 09 20 41 44 52 28 53 63 72 65 65 6E    ,.... ADR(Screen
022180:  5B 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2B    [(StartofWindow+
022190:  31 29 2A 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A    1)*RowWidth]),..
0221A0:  09 09 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2D    .. (EndofWindow-
0221B0:  53 74 61 72 74 6F 66 57 69 6E 64 6F 77 29 2A 52    StartofWindow)*R
0221C0:  6F 77 57 69 64 74 68 29 3B 0D 0A 09 46 4F 52 20    owWidth);...FOR 
0221D0:  69 3A 3D 53 74 61 72 74 6F 66 57 69 6E 64 6F 77    i:=StartofWindow
0221E0:  2A 52 6F 77 57 69 64 74 68 20 54 4F 20 28 53 74    *RowWidth TO (St
0221F0:  61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52    artofWindow+1)*R
022200:  76 65 64 6F 77 6E 28 41 44 52 28 53 63 72 65 65    vedown(ADR(Scree
022210:  6E 5B 53 63 72 65 65 6E 50 6F 73 2B 31 5D 29 2C    n[ScreenPos+1]),
022220:  41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 65 65    ADR(Screen[Scree
022230:  6E 50 6F 73 5D 29 2C 52 6F 77 57 69 64 74 68 2D    nPos]),RowWidth-
022240:  43 6F 6C 4E 6F 2D 31 29 3B 0D 0A 09 09 53 63 72    ColNo-1);....Scr
022250:  65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 2D 43 6F    een[ScreenPos-Co
022260:  6C 4E 6F 2B 52 6F 77 57 69 64 74 68 2D 31 5D 3A    lNo+RowWidth-1]:
022270:  3D 27 20 27 7C 0D 0A 09 44 65 6C 4C 69 6E 65 3A    =' '|...DelLine:
022280:  28 2A 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 73    (*Move rest of s
022290:  63 72 65 65 6E 20 75 70 20 61 20 6C 69 6E 65 2C    creen up a line,
0222A0:  20 61 64 64 20 62 6C 61 6E 6B 20 6C 69 6E 65 20     add blank line 
0222B0:  61 74 20 65 6E 64 2A 29 0D 0A 09 09 4D 6F 76 65    at end*)....Move
0222C0:  64 6F 77 6E 28 41 44 52 28 53 63 72 65 65 6E 5B    down(ADR(Screen[
0222D0:  53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B    ScreenPos-ColNo+
0222E0:  52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 09    RowWidth]),.....
0222F0:  20 41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 65     ADR(Screen[Scre
022300:  65 6E 50 6F 73 2D 43 6F 6C 4E 6F 5D 29 2C 0D 0A    enPos-ColNo]),..
022310:  09 09 09 53 63 72 65 65 6E 53 69 7A 65 2D 53 63    ...ScreenSize-Sc
022320:  72 65 65 6E 50 6F 73 2B 43 6F 6C 4E 6F 2D 52 6F    reenPos+ColNo-Ro
022330:  77 57 69 64 74 68 29 3B 0D 0A 09 09 46 4F 52 20    wWidth);....FOR 
022340:  69 3A 3D 53 63 72 65 65 6E 53 69 7A 65 2D 52 6F    i:=ScreenSize-Ro
022350:  77 57 69 64 74 68 20 54 4F 20 53 63 72 65 65 6E    wWidth TO Screen
022360:  53 69 7A 65 2D 31 20 44 4F 20 53 63 72 65 65 6E    Size-1 DO Screen
022370:  5B 69 5D 3A 3D 27 20 27 20 45 4E 44 3B 0D 0A 09    [i]:=' ' END;...
022380:  09 7C 0D 0A 09 49 6E 73 43 68 61 72 3A 28 2A 4D    .|...InsChar:(*M
022390:  6F 76 65 20 72 65 73 74 20 6F 66 20 6C 69 6E 65    ove rest of line
0223A0:  20 72 69 67 68 74 20 6F 6E 65 20 63 68 61 72 61     right one chara
0223B0:  63 74 65 72 2C 20 6C 61 73 74 20 63 68 61 72 61    cter, last chara
0223C0:  63 74 65 72 20 6D 61 79 20 62 65 20 6C 6F 73 74    cter may be lost
0223D0:  2A 29 0D 0A 09 09 4D 6F 76 65 75 70 28 41 44 52    *)....Moveup(ADR
0223E0:  28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F    (Screen[ScreenPo
0223F0:  73 5D 29 2C 41 44 52 28 53 63 72 65 65 6E 5B 53    s]),ADR(Screen[S
022400:  6F 77 57 69 64 74 68 2D 31 20 44 4F 0D 0A 09 09    owWidth-1 DO....
022410:  53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 3B 0D    Screen[i]:=' ';.
022420:  0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 43 75 72    ...END;...SetCur
022430:  73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20    sor;...END;..   
022440:  20 45 4E 44 20 53 63 72 6F 6C 6C 57 69 6E 64 6F     END ScrollWindo
022450:  77 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    wUp;..PROCEDURE 
022460:  53 63 72 6F 6C 6C 57 69 6E 64 6F 77 44 6F 77 6E    ScrollWindowDown
022470:  28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45    (StartofWindow,E
022480:  6E 64 6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49    ndofWindow:CARDI
022490:  4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20    NAL);..BEGIN..  
0224A0:  20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62 6C      IF OutputEnabl
0224B0:  65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 43    ed THEN...ClearC
0224C0:  75 72 73 6F 72 3B 0D 0A 09 4D 6F 76 65 64 6F 77    ursor;...Movedow
0224D0:  6E 28 41 44 52 28 53 63 72 65 65 6E 5B 28 53 74    n(ADR(Screen[(St
0224E0:  61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52    artofWindow+1)*R
0224F0:  6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 20 41    owWidth]),.... A
022500:  44 52 28 53 63 72 65 65 6E 5B 28 53 74 61 72 74    DR(Screen[(Start
022510:  6F 66 57 69 6E 64 6F 77 29 2A 52 6F 77 57 69 64    ofWindow)*RowWid
022520:  74 68 5D 29 2C 0D 0A 09 09 20 28 45 6E 64 6F 66    th]),.... (Endof
022530:  57 69 6E 64 6F 77 2D 53 74 61 72 74 6F 66 57 69    Window-StartofWi
022540:  6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 29 3B    ndow)*RowWidth);
022550:  0D 0A 09 46 4F 52 20 69 3A 3D 45 6E 64 6F 66 57    ...FOR i:=EndofW
022560:  69 6E 64 6F 77 2A 52 6F 77 57 69 64 74 68 20 54    indow*RowWidth T
022570:  4F 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2B 31    O (EndofWindow+1
022580:  29 2A 52 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D    )*RowWidth-1 DO.
022590:  0A 09 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20    ...Screen[i]:=' 
0225A0:  27 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74    ';....END;...Set
0225B0:  43 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D 0A    Cursor;...END;..
0225C0:  20 20 20 20 45 4E 44 20 53 63 72 6F 6C 6C 57 69        END ScrollWi
0225D0:  6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 50 52 4F    ndowDown;....PRO
0225E0:  43 45 44 55 52 45 20 4C 6F 61 64 54 65 72 6D 43    CEDURE LoadTermC
0225F0:  6F 64 65 28 46 3A 46 69 6C 65 4E 61 6D 65 29 3B    ode(F:FileName);
022600:  63 72 65 65 6E 50 6F 73 2B 31 5D 29 2C 52 6F 77    creenPos+1]),Row
022610:  57 69 64 74 68 2D 43 6F 6C 4E 6F 2D 31 29 3B 0D    Width-ColNo-1);.
022620:  0A 09 09 53 63 72 65 65 6E 5B 53 63 72 65 65 6E    ...Screen[Screen
022630:  50 6F 73 5D 3A 3D 27 20 27 7C 0D 0A 09 49 6E 73    Pos]:=' '|...Ins
022640:  4C 69 6E 65 3A 28 2A 4D 6F 76 65 20 72 65 73 74    Line:(*Move rest
022650:  20 6F 66 20 73 63 72 65 65 6E 20 64 6F 77 6E 20     of screen down 
022660:  6F 6E 65 20 6C 69 6E 65 2C 20 61 64 64 20 62 6C    one line, add bl
022670:  61 6E 6B 20 6C 69 6E 65 2A 29 0D 0A 09 09 4D 6F    ank line*)....Mo
022680:  76 65 75 70 28 41 44 52 28 53 63 72 65 65 6E 5B    veup(ADR(Screen[
022690:  53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 5D    ScreenPos-ColNo]
0226A0:  29 2C 41 44 52 28 53 63 72 65 65 6E 5B 53 63 72    ),ADR(Screen[Scr
0226B0:  65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52 6F 77    eenPos-ColNo+Row
0226C0:  57 69 64 74 68 5D 29 2C 0D 0A 09 09 53 63 72 65    Width]),....Scre
0226D0:  65 6E 53 69 7A 65 2D 53 63 72 65 65 6E 50 6F 73    enSize-ScreenPos
0226E0:  2B 43 6F 6C 4E 6F 2D 52 6F 77 57 69 64 74 68 29    +ColNo-RowWidth)
0226F0:  3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 53 63 72 65    ;....FOR i:=Scre
022700:  65 6E 50 6F 73 2D 43 6F 6C 4E 6F 20 54 4F 20 53    enPos-ColNo TO S
022710:  63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52    creenPos-ColNo+R
022720:  6F 77 57 69 64 74 68 2D 31 20 44 4F 0D 0A 09 09    owWidth-1 DO....
022730:  09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 3B    .Screen[i]:=' ';
022740:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 7C 0D 0A    .....END;....|..
022750:  09 44 65 6C 45 6F 6C 3A 46 4F 52 20 69 3A 3D 53    .DelEol:FOR i:=S
022760:  63 72 65 65 6E 50 6F 73 20 54 4F 20 53 63 72 65    creenPos TO Scre
022770:  65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52 6F 77 57    enPos-ColNo+RowW
022780:  69 64 74 68 2D 31 20 44 4F 20 53 63 72 65 65 6E    idth-1 DO Screen
022790:  5B 69 5D 3A 3D 27 20 27 20 45 4E 44 7C 0D 0A 09    [i]:=' ' END|...
0227A0:  44 65 6C 45 6F 73 3A 46 4F 52 20 69 3A 3D 53 63    DelEos:FOR i:=Sc
0227B0:  72 65 65 6E 50 6F 73 20 54 4F 20 53 63 72 65 65    reenPos TO Scree
0227C0:  6E 53 69 7A 65 2D 31 20 44 4F 20 53 63 72 65 65    nSize-1 DO Scree
0227D0:  6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 7C 0D 0A    n[i]:=' ' END|..
0227E0:  09 43 6C 65 61 72 53 63 72 65 65 6E 3A 0D 0A 09    .ClearScreen:...
0227F0:  09 09 28 2A 4F 73 62 6F 72 6E 65 20 73 70 65 63    ..(*Osborne spec
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 41 02 00 00 00 02    ......R...A.....
022820:  1D 00 46 02 00 00 00 02 1D 00 42 02 00 00 00 02    ..F.......B.....
022830:  1D 00 47 02 00 00 00 02 1D 00 43 02 00 00 00 02    ..G.......C.....
022840:  1D 00 48 02 00 00 00 02 1D 00 44 02 00 00 00 02    ..H.......D.....
022850:  1D 00 49 02 00 00 00 02 1D 00 45 02 00 00 00 02    ..I.......E.....
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:  0D 0A 42 45 47 49 4E 0D 0A 09 28 2A 6E 6F 74 20    ..BEGIN...(*not 
022910:  69 6D 70 6C 65 6D 65 6E 74 65 64 20 69 6E 20 74    implemented in t
022920:  68 69 73 20 76 65 72 73 69 6F 6E 2A 29 0D 0A 09    his version*)...
022930:  45 4E 44 20 4C 6F 61 64 54 65 72 6D 43 6F 64 65    END LoadTermCode
022940:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 69    ;..PROCEDURE Cli
022950:  70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43 41    p(x1,y1,x2,y2:CA
022960:  52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D    RDINAL);..BEGIN.
022970:  0A 09 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D 65 6E    ..(*not implemen
022980:  74 65 64 20 69 6E 20 74 68 69 73 20 76 65 72 73    ted in this vers
022990:  69 6F 6E 2A 29 0D 0A 09 45 4E 44 20 43 6C 69 70    ion*)...END Clip
0229A0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44 72    ;..PROCEDURE  Dr
0229B0:  61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C 79    awBox(x1,y1,x2,y
0229C0:  32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A    2:CARDINAL);....
0229D0:  28 2A 09 09 64 72 61 77 20 61 20 62 6F 78 20 66    (*..draw a box f
0229E0:  6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E 20 74    or a window on t
0229F0:  68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09 09 78    he screen......x
022A00:  31 2C 79 31 20 20 69 73 20 74 68 65 20 6C 6F 77    1,y1  is the low
022A10:  65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72 0D 0A    er left corner..
022A20:  09 09 78 32 2C 79 32 20 20 69 73 20 75 70 70 65    ..x2,y2  is uppe
022A30:  72 20 72 69 67 68 74 20 63 6F 72 6E 65 72 2A 29    r right corner*)
022A40:  0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C    ..VAR.i:CARDINAL
022A50:  3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46    ;..BEGIN..    IF
022A60:  20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54     OutputEnabled T
022A70:  48 45 4E 0D 0A 09 47 6F 74 6F 78 79 28 78 31 2C    HEN...Gotoxy(x1,
022A80:  79 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E    y1);...ScreenCon
022A90:  74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68 29    trol(StartGraph)
022AA0:  3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F    ;...ScreenContro
022AB0:  6C 28 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A 09 46    l(CornerLL);...F
022AC0:  4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32    OR i:=x1+1 TO x2
022AD0:  2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74    -1 DO ScreenCont
022AE0:  72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20    rol(Horizontal) 
022AF0:  45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E    END;...ScreenCon
022B00:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
022B10:  4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D    ODULE ScreenIO;.
022B20:  0A 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 74 68    ...(*.This is th
022B30:  65 20 6D 65 6D 6F 72 79 20 6D 61 70 70 65 64 20    e memory mapped 
022B40:  76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72 65 65    version of scree
022B50:  6E 20 69 6E 70 75 74 2D 6F 75 74 70 75 74 0D 0A    n input-output..
022B60:  0D 0A 09 54 6F 20 75 73 65 20 69 74 20 6F 6E 20    ...To use it on 
022B70:  79 6F 75 72 20 6D 61 63 68 69 6E 65 2C 20 79 6F    your machine, yo
022B80:  75 20 6D 61 79 20 6E 65 65 64 20 74 6F 20 63 68    u may need to ch
022B90:  61 6E 67 65 20 73 6F 6D 65 20 6F 66 20 74 68 65    ange some of the
022BA0:  20 0D 0A 09 63 6F 6E 73 74 61 6E 74 73 20 62 65     ...constants be
022BB0:  6C 6F 77 0D 0A 0D 0A 09 54 68 65 20 6D 6F 64 75    low.....The modu
022BC0:  6C 65 20 61 73 73 75 6D 65 73 20 74 68 61 74 20    le assumes that 
022BD0:  74 68 65 20 6D 65 6D 6F 72 79 20 66 6F 72 20 74    the memory for t
022BE0:  68 65 20 73 63 72 65 65 6E 20 69 73 20 63 6F 6E    he screen is con
022BF0:  74 69 67 75 6F 75 73 20 0D 0A 09 61 6E 64 20 69    tiguous ...and i
022C00:  6E 20 74 68 65 20 64 65 66 61 75 6C 74 20 62 61    n the default ba
022C10:  6E 6B 2E 20 28 49 66 20 69 74 20 69 73 20 69 6E    nk. (If it is in
022C20:  20 61 6E 6F 74 68 65 72 20 62 61 6E 6B 2C 20 79     another bank, y
022C30:  6F 75 20 77 69 6C 6C 20 68 61 76 65 20 0D 0A 09    ou will have ...
022C40:  74 6F 20 63 68 61 6E 67 65 20 74 68 65 20 63 6F    to change the co
022C50:  64 65 20 6F 66 20 74 68 65 20 6D 6F 64 75 6C 65    de of the module
022C60:  20 61 70 70 72 6F 70 72 69 61 74 65 6C 79 29 0D     appropriately).
022C70:  0A 0D 0A 09 54 68 65 20 76 61 6C 75 65 73 20 73    ....The values s
022C80:  65 74 20 62 65 6C 6F 77 20 61 72 65 20 66 6F 72    et below are for
022C90:  20 61 6E 20 4F 73 62 6F 72 6E 65 20 31 20 77 69     an Osborne 1 wi
022CA0:  74 68 20 53 63 72 65 65 6E 20 50 61 63 6B 0D 0A    th Screen Pack..
022CB0:  0D 0A 09 4E 6F 74 65 20 74 68 61 74 20 74 68 69    ...Note that thi
022CC0:  73 20 76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72    s version of scr
022CD0:  65 65 6E 69 6F 20 64 6F 65 73 20 6E 6F 74 20 75    eenio does not u
022CE0:  73 65 20 74 68 65 20 74 65 72 6D 69 6E 61 6C 20    se the terminal 
022CF0:  0D 0A 09 64 65 66 69 6E 69 74 69 6F 6E 20 66 69    ...definition fi
022D00:  74 72 6F 6C 28 43 6F 72 6E 65 72 4C 52 29 3B 0D    trol(CornerLR);.
022D10:  0A 09 47 6F 74 6F 78 79 28 78 31 2C 79 32 29 3B    ..Gotoxy(x1,y2);
022D20:  0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C    ...ScreenControl
022D30:  28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46 4F    (CornerUL);...FO
022D40:  52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 2D    R i:=x1+1 TO x2-
022D50:  31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 72    1 DO ScreenContr
022D60:  6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 45    ol(Horizontal) E
022D70:  4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74    ND;...ScreenCont
022D80:  72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D 0A    rol(CornerUR);..
022D90:  09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20    .FOR i:=y2+1 TO 
022DA0:  79 31 2D 31 20 20 44 4F 0D 0A 09 09 47 6F 74 6F    y1-1  DO....Goto
022DB0:  78 79 28 78 32 2C 69 29 3B 0D 0A 09 09 53 63 72    xy(x2,i);....Scr
022DC0:  65 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69    eenControl(Verti
022DD0:  63 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    cal);....END;...
022DE0:  46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 79    FOR i:=y2+1 TO y
022DF0:  31 2D 31 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 79    1-1 DO....Gotoxy
022E00:  28 78 31 2C 69 29 3B 0D 0A 09 09 53 63 72 65 65    (x1,i);....Scree
022E10:  6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 63 61    nControl(Vertica
022E20:  6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E    l);....END;...EN
022E30:  44 3B 0D 0A 20 20 20 20 45 4E 44 20 44 72 61 77    D;..    END Draw
022E40:  42 6F 78 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    Box;..PROCEDURE 
022E50:  4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 28 4F    OutputToScreen(O
022E60:  6E 3A 42 4F 4F 4C 45 41 4E 29 3B 0D 0A 42 45 47    n:BOOLEAN);..BEG
022E70:  49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E 61 62 6C    IN...OutputEnabl
022E80:  65 64 3A 3D 4F 6E 0D 0A 09 45 4E 44 20 4F 75 74    ed:=On...END Out
022E90:  70 75 74 54 6F 53 63 72 65 65 6E 3B 09 0D 0A 42    putToScreen;...B
022EA0:  45 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E 61    EGIN...OutputEna
022EB0:  62 6C 65 64 3A 3D 54 52 55 45 3B 0D 0A 09 28 2A    bled:=TRUE;...(*
022EC0:  09 53 65 74 20 75 70 20 50 43 47 20 43 68 61 72    .Set up PCG Char
022ED0:  61 63 74 65 72 73 2A 29 0D 0A 09 46 4F 52 20 69    acters*)...FOR i
022EE0:  3A 3D 30 20 54 4F 20 36 2A 31 36 2D 31 20 44 4F    :=0 TO 6*16-1 DO
022EF0:  20 50 43 47 5B 69 5D 3A 3D 30 78 20 45 4E 44 3B     PCG[i]:=0x END;
022F00:  6C 65 2E 20 48 65 6E 63 65 2C 20 74 68 65 20 67    le. Hence, the g
022F10:  72 61 70 68 69 63 73 20 63 68 61 72 61 63 74 65    raphics characte
022F20:  72 73 20 66 6F 72 20 74 68 65 20 62 6F 78 20 61    rs for the box a
022F30:  72 65 0D 0A 09 68 61 72 64 20 63 6F 64 65 64 20    re...hard coded 
022F40:  69 6E 20 74 68 65 20 66 69 6C 65 0D 0A 0D 0A 09    in the file.....
022F50:  54 68 69 73 20 76 65 72 73 69 6F 6E 20 77 69 6C    This version wil
022F60:  6C 20 6E 6F 74 20 73 75 70 70 6F 72 74 20 68 61    l not support ha
022F70:  6C 66 20 69 6E 74 65 6E 73 69 74 79 20 6F 6E 20    lf intensity on 
022F80:  74 68 65 20 4F 73 62 6F 72 6E 65 20 73 69 6E 63    the Osborne sinc
022F90:  65 20 0D 0A 09 74 68 61 74 20 66 61 63 69 6C 69    e ...that facili
022FA0:  74 79 20 64 6F 65 73 20 6E 6F 74 20 77 6F 72 6B    ty does not work
022FB0:  20 61 73 20 64 6F 63 75 6D 65 6E 74 65 64 2E 20     as documented. 
022FC0:  54 68 69 73 20 6D 61 79 20 62 65 20 73 6F 6D 65    This may be some
022FD0:  74 68 69 6E 67 0D 0A 09 74 6F 20 64 6F 20 77 69    thing...to do wi
022FE0:  74 68 20 6D 79 20 4F 73 62 6F 72 6E 65 20 68 61    th my Osborne ha
022FF0:  76 69 6E 67 20 62 65 65 6E 20 68 61 63 6B 65 64    ving been hacked
023000:  0D 0A 0D 0A 09 54 68 69 73 20 76 65 72 73 69 6F    .....This versio
023010:  6E 20 77 69 6C 6C 20 6E 6F 74 20 73 63 72 6F 6C    n will not scrol
023020:  6C 20 74 68 65 20 73 63 72 65 65 6E 20 65 69 74    l the screen eit
023030:  68 65 72 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D 20    her..*)....FROM 
023040:  54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20    Terminal IMPORT 
023050:  43 68 61 72 52 6F 75 74 69 6E 65 2C 43 68 61 72    CharRoutine,Char
023060:  45 6E 61 62 6C 65 64 2C 42 6C 69 6E 6B 52 6F 75    Enabled,BlinkRou
023070:  74 69 6E 65 2C 42 6C 69 6E 6B 45 6E 61 62 6C 65    tine,BlinkEnable
023080:  64 3B 0D 0A 46 52 4F 4D 20 46 61 73 74 4D 6F 76    d;..FROM FastMov
023090:  65 20 49 4D 50 4F 52 54 20 4D 6F 76 65 75 70 2C    e IMPORT Moveup,
0230A0:  4D 6F 76 65 64 6F 77 6E 3B 0D 0A 46 52 4F 4D 20    Movedown;..FROM 
0230B0:  53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 41 44    SYSTEM IMPORT AD
0230C0:  52 2C 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 43 50    R,SIZE;..FROM CP
0230D0:  4D 20 49 4D 50 4F 52 54 20 77 63 63 66 63 2C 42    M IMPORT wccfc,B
0230E0:  44 4F 53 3B 0D 0A 28 2A 46 52 4F 4D 20 4F 73 62    DOS;..(*FROM Osb
0230F0:  6F 72 6E 65 20 49 4D 50 4F 52 54 20 42 61 6E 6B    orne IMPORT Bank
023100:  0D 0A 09 46 4F 52 20 69 3A 3D 30 20 54 4F 20 31    ...FOR i:=0 TO 1
023110:  30 20 44 4F 20 50 43 47 5B 69 5D 3A 3D 33 63 78    0 DO PCG[i]:=3cx
023120:  20 45 4E 44 3B 0D 0A 09 28 2A 09 48 6F 72 69 7A     END;...(*.Horiz
023130:  6F 6E 74 61 6C 20 62 61 72 2A 29 0D 0A 09 46 4F    ontal bar*)...FO
023140:  52 20 69 3A 3D 31 36 2B 33 20 54 4F 20 31 36 2B    R i:=16+3 TO 16+
023150:  33 2B 34 20 44 4F 20 50 43 47 5B 69 5D 3A 3D 30    3+4 DO PCG[i]:=0
023160:  66 66 78 20 45 4E 44 3B 0D 0A 09 28 2A 09 55 70    ffx END;...(*.Up
023170:  70 65 72 20 4C 65 66 74 2A 29 0D 0A 09 46 4F 52    per Left*)...FOR
023180:  20 69 3A 3D 32 2A 31 36 2B 33 20 54 4F 20 32 2A     i:=2*16+3 TO 2*
023190:  31 36 2B 33 2B 34 20 44 4F 20 50 43 47 5B 69 5D    16+3+4 DO PCG[i]
0231A0:  3A 3D 33 66 78 20 45 4E 44 3B 0D 0A 09 46 4F 52    :=3fx END;...FOR
0231B0:  20 69 3A 3D 32 2A 31 36 2B 33 2B 35 20 54 4F 20     i:=2*16+3+5 TO 
0231C0:  33 2A 31 36 2D 31 20 44 4F 20 50 43 47 5B 69 5D    3*16-1 DO PCG[i]
0231D0:  3A 3D 33 63 78 20 45 4E 44 3B 0D 0A 09 28 2A 09    :=3cx END;...(*.
0231E0:  55 70 70 65 72 20 52 69 67 68 74 2A 29 0D 0A 09    Upper Right*)...
0231F0:  46 4F 52 20 69 3A 3D 33 2A 31 36 2B 33 20 54 4F    FOR i:=3*16+3 TO
023200:  20 33 2A 31 36 2B 33 2B 34 20 44 4F 20 50 43 47     3*16+3+4 DO PCG
023210:  5B 69 5D 3A 3D 30 66 63 78 20 45 4E 44 3B 0D 0A    [i]:=0fcx END;..
023220:  09 46 4F 52 20 69 3A 3D 33 2A 31 36 2B 33 2B 35    .FOR i:=3*16+3+5
023230:  20 54 4F 20 34 2A 31 36 2D 31 20 44 4F 20 50 43     TO 4*16-1 DO PC
023240:  47 5B 69 5D 3A 3D 33 63 78 20 45 4E 44 3B 0D 0A    G[i]:=3cx END;..
023250:  09 28 2A 09 4C 6F 77 65 72 20 4C 65 66 74 2A 29    .(*.Lower Left*)
023260:  0D 0A 09 46 4F 52 20 69 3A 3D 34 2A 31 36 20 54    ...FOR i:=4*16 T
023270:  4F 20 34 2A 31 36 2B 32 20 44 4F 20 50 43 47 5B    O 4*16+2 DO PCG[
023280:  69 5D 3A 3D 33 63 78 20 45 4E 44 3B 0D 0A 09 46    i]:=3cx END;...F
023290:  4F 52 20 69 3A 3D 34 2A 31 36 2B 33 20 54 4F 20    OR i:=4*16+3 TO 
0232A0:  34 2A 31 36 2B 33 2B 34 20 44 4F 20 50 43 47 5B    4*16+3+4 DO PCG[
0232B0:  69 5D 3A 3D 33 66 78 20 45 4E 44 3B 0D 0A 09 28    i]:=3fx END;...(
0232C0:  2A 09 4C 6F 77 65 72 20 52 69 67 68 74 2A 29 0D    *.Lower Right*).
0232D0:  0A 09 46 4F 52 20 69 3A 3D 35 2A 31 36 20 54 4F    ..FOR i:=5*16 TO
0232E0:  20 35 2A 31 36 2B 32 20 44 4F 20 50 43 47 5B 69     5*16+2 DO PCG[i
0232F0:  5D 3A 3D 30 33 63 78 20 45 4E 44 3B 0D 0A 09 46    ]:=03cx END;...F
023300:  32 3B 2A 29 0D 0A 46 52 4F 4D 20 49 6E 74 4C 6F    2;*)..FROM IntLo
023310:  67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E 44 3B    gic IMPORT IAND;
023320:  0D 0A 0D 0A 28 2A 09 53 63 72 65 65 6E 20 68 61    ....(*.Screen ha
023330:  6E 64 6C 69 6E 67 20 72 6F 75 74 69 6E 65 73 20    ndling routines 
023340:  66 6F 72 20 63 75 72 73 6F 72 20 70 6F 73 69 74    for cursor posit
023350:  69 6F 6E 2C 20 61 74 74 72 69 62 75 74 65 20 65    ion, attribute e
023360:  74 63 0D 0A 0D 0A 09 53 70 65 63 69 66 69 63 20    tc.....Specific 
023370:  74 6F 20 74 68 69 73 20 63 6F 6D 70 69 6C 65 72    to this compiler
023380:  2A 29 0D 0A 0D 0A 43 4F 4E 53 54 09 4C 6F 67 53    *)....CONST.LogS
023390:  63 72 65 65 6E 57 69 64 74 68 3D 31 30 30 3B 09    creenWidth=100;.
0233A0:  28 2A 4C 6F 67 69 63 61 6C 20 73 63 72 65 65 6E    (*Logical screen
0233B0:  20 77 69 64 74 68 20 0D 0A 09 09 09 09 28 6D 61     width ......(ma
0233C0:  6E 79 20 70 65 6F 70 6C 65 20 6F 6E 6C 79 20 68    ny people only h
0233D0:  61 76 65 20 38 30 29 2A 29 0D 0A 09 52 6F 77 57    ave 80)*)...RowW
0233E0:  69 64 74 68 3D 31 32 38 3B 09 09 28 2A 77 69 64    idth=128;..(*wid
0233F0:  74 68 20 6F 66 20 6D 65 6D 6F 72 79 20 66 6F 72    th of memory for
023400:  20 6F 6E 65 20 72 6F 77 20 0D 0A 09 09 09 09 28     one row ......(
023410:  69 2E 65 2E 20 6E 75 6D 62 65 72 20 6F 66 20 62    i.e. number of b
023420:  79 74 65 73 2A 29 0D 0A 09 4C 6F 67 53 63 72 65    ytes*)...LogScre
023430:  65 6E 44 65 70 74 68 3D 32 34 3B 09 09 28 2A 4C    enDepth=24;..(*L
023440:  69 6E 65 73 20 6F 6E 20 74 68 65 20 73 63 72 65    ines on the scre
023450:  65 6E 2A 29 0D 0A 09 53 63 72 65 65 6E 53 74 61    en*)...ScreenSta
023460:  72 74 3D 30 66 30 30 30 68 3B 09 28 2A 62 61 73    rt=0f000h;.(*bas
023470:  65 20 6F 66 20 73 63 72 65 65 6E 2A 29 0D 0A 09    e of screen*)...
023480:  43 68 61 72 49 6E 63 72 65 6D 65 6E 74 3D 31 3B    CharIncrement=1;
023490:  09 28 2A 6E 75 6D 62 65 72 20 6F 66 20 62 79 74    .(*number of byt
0234A0:  65 73 20 62 65 74 77 65 65 6E 20 63 68 61 72 61    es between chara
0234B0:  63 74 65 72 73 2A 29 0D 0A 09 53 63 72 65 65 6E    cters*)...Screen
0234C0:  53 69 7A 65 3D 31 32 38 2A 33 32 3B 09 28 2A 6E    Size=128*32;.(*n
0234D0:  75 6D 62 65 72 20 6F 66 20 62 79 74 65 73 20 69    umber of bytes i
0234E0:  6E 20 73 63 72 65 65 6E 20 61 72 65 61 2A 29 0D    n screen area*).
0234F0:  0A 0D 0A 09 43 52 3D 30 64 78 3B 09 09 09 28 2A    ....CR=0dx;...(*
023500:  4F 52 20 69 3A 3D 35 2A 31 36 2B 33 20 54 4F 20    OR i:=5*16+3 TO 
023510:  35 2A 31 36 2B 33 2B 34 20 44 4F 20 50 43 47 5B    5*16+3+4 DO PCG[
023520:  69 5D 3A 3D 30 66 63 78 20 45 4E 44 3B 0D 0A 09    i]:=0fcx END;...
023530:  53 63 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09    ScreenPos:=0;...
023540:  0D 0A 09 42 6C 69 6E 6B 52 6F 75 74 69 6E 65 3A    ...BlinkRoutine:
023550:  3D 42 6C 69 6E 6B 43 75 72 73 6F 72 3B 0D 0A 09    =BlinkCursor;...
023560:  42 6C 69 6E 6B 45 6E 61 62 6C 65 64 3A 3D 54 52    BlinkEnabled:=TR
023570:  55 45 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74    UE;...ScreenCont
023580:  72 6F 6C 28 43 6C 65 61 72 53 63 72 65 65 6E 29    rol(ClearScreen)
023590:  3B 0D 0A 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09    ;...ColNo:=0;...
0235A0:  52 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 43 68 61 72    RowNo:=0;...Char
0235B0:  52 6F 75 74 69 6E 65 3A 3D 57 72 69 74 65 3B 0D    Routine:=Write;.
0235C0:  0A 09 43 68 61 72 45 6E 61 62 6C 65 64 3A 3D 54    ..CharEnabled:=T
0235D0:  52 55 45 3B 09 0D 0A 09 53 63 72 65 65 6E 57 69    RUE;....ScreenWi
0235E0:  64 74 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 57 69    dth:=LogScreenWi
0235F0:  64 74 68 3B 0D 0A 09 53 63 72 65 65 6E 44 65 70    dth;...ScreenDep
023600:  74 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 44 65 70    th:=LogScreenDep
023610:  74 68 3B 0D 0A 09 45 4E 44 20 53 63 72 65 65 6E    th;...END Screen
023620:  49 4F 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    IO..............
023630:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
023640:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
023650:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
023660:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
023670:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
023680:  3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F    ;...ScreenContro
023690:  6C 28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46    l(CornerUL);...F
0236A0:  4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32    OR i:=x1+1 TO x2
0236B0:  2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74    -1 DO ScreenCont
0236C0:  72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20    rol(Horizontal) 
0236D0:  45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E    END;...ScreenCon
0236E0:  74 72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D    trol(CornerUR);.
0236F0:  0A 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F    ..FOR i:=y2+1 TO
023700:  43 61 72 72 69 61 67 65 20 72 65 74 75 72 6E 2A    Carriage return*
023710:  29 0D 0A 09 4C 46 3D 30 61 78 3B 09 09 09 28 2A    )...LF=0ax;...(*
023720:  4C 69 6E 65 20 66 65 65 64 2A 29 0D 0A 09 54 41    Line feed*)...TA
023730:  42 3D 30 39 78 3B 09 09 28 2A 54 41 42 2A 29 0D    B=09x;..(*TAB*).
023740:  0A 09 42 53 3D 30 38 78 3B 0D 0A 56 41 52 0D 0A    ..BS=08x;..VAR..
023750:  09 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 3A 42    .OutputEnabled:B
023760:  4F 4F 4C 45 41 4E 3B 0D 0A 09 53 63 72 65 65 6E    OOLEAN;...Screen
023770:  5B 30 66 30 30 30 68 5D 3A 41 52 52 41 59 5B 30    [0f000h]:ARRAY[0
023780:  2E 2E 53 63 72 65 65 6E 53 69 7A 65 2D 31 5D 20    ..ScreenSize-1] 
023790:  4F 46 20 43 48 41 52 3B 0D 0A 09 53 63 72 65 65    OF CHAR;...Scree
0237A0:  6E 50 6F 73 3A 43 41 52 44 49 4E 41 4C 3B 09 28    nPos:CARDINAL;.(
0237B0:  2A 6E 65 78 74 20 63 68 61 72 61 63 74 65 72 20    *next character 
0237C0:  70 6F 73 69 74 69 6F 6E 20 6F 6E 20 73 63 72 65    position on scre
0237D0:  65 6E 2A 29 0D 0A 09 43 6F 6C 4E 6F 2C 52 6F 77    en*)...ColNo,Row
0237E0:  4E 6F 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 77    No:CARDINAL;.(*w
0237F0:  68 69 63 68 20 72 65 70 72 65 73 65 6E 74 73 20    hich represents 
023800:  74 68 65 20 67 69 76 65 6E 20 70 6F 73 69 74 69    the given positi
023810:  6F 6E 2A 29 0D 0A 0D 0A 09 28 2A 09 43 6F 6E 74    on*).....(*.Cont
023820:  72 6F 6C 20 61 74 74 72 69 62 75 74 65 73 2A 29    rol attributes*)
023830:  0D 0A 0D 0A 09 48 61 6C 66 49 6E 74 65 6E 73 69    .....HalfIntensi
023840:  74 79 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45    ty:BOOLEAN=FALSE
023850:  3B 09 28 2A 74 72 75 65 20 69 66 20 69 6E 20 68    ;.(*true if in h
023860:  61 6C 66 20 69 6E 74 65 6E 73 69 74 79 20 6D 6F    alf intensity mo
023870:  64 65 2A 29 0D 0A 09 45 6E 68 61 6E 63 65 64 56    de*)...EnhancedV
023880:  69 64 65 6F 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C    ideo:BOOLEAN=FAL
023890:  53 45 3B 0D 0A 09 55 6E 64 65 72 4C 69 6E 65 3A    SE;...UnderLine:
0238A0:  42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 09 28    BOOLEAN=FALSE;.(
0238B0:  2A 74 72 75 65 20 69 66 20 69 6E 20 75 6E 64 65    *true if in unde
0238C0:  72 6C 69 6E 65 20 6D 6F 64 65 2A 29 0D 0A 09 49    rline mode*)...I
0238D0:  6E 76 65 72 73 65 56 69 64 65 6F 3A 42 4F 4F 4C    nverseVideo:BOOL
0238E0:  45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 42 6C 69    EAN=FALSE;...Bli
0238F0:  6E 6B 69 6E 67 3A 42 4F 4F 4C 45 41 4E 3D 46 41    nking:BOOLEAN=FA
023900:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023910:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023920:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023930:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023940:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023950:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023960:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023970:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023980:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023990:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0239A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0239B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0239C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0239D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0239E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0239F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023A00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023A10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023A20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023A30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023A40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023A50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023A60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023A70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023A80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023A90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023AA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023AB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023AC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023AD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023AE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023AF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
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 41 02 00 00 00 02    ......R...A.....
023B20:  1E 00 46 02 00 00 00 02 1E 00 42 02 00 00 00 02    ..F.......B.....
023B30:  1E 00 47 02 00 00 00 02 1E 00 43 02 00 00 00 02    ..G.......C.....
023B40:  1E 00 48 02 00 00 00 02 1E 00 44 02 00 00 00 02    ..H.......D.....
023B50:  1E 00 49 02 00 00 00 02 1E 00 45 02 00 00 00 02    ..I.......E.....
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:  4C 53 45 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41    LSE;...i:CARDINA
023C10:  4C 3B 0D 0A 0D 0A 28 2A 09 54 68 65 20 6E 65 78    L;....(*.The nex
023C20:  74 20 66 65 77 20 72 6F 75 74 69 6E 65 73 20 68    t few routines h
023C30:  61 6E 64 6C 65 20 74 68 65 20 63 75 72 73 6F 72    andle the cursor
023C40:  0D 0A 0D 0A 09 57 61 73 55 6E 64 65 72 4C 69 6E    .....WasUnderLin
023C50:  65 64 20 69 73 20 74 72 75 65 20 69 66 20 74 68    ed is true if th
023C60:  65 20 63 68 61 72 61 63 74 65 72 20 75 6E 64 65    e character unde
023C70:  72 20 74 68 65 20 63 75 72 73 6F 72 0D 0A 09 73    r the cursor...s
023C80:  74 61 72 74 65 64 20 6F 75 74 20 75 6E 64 65 72    tarted out under
023C90:  6C 69 6E 65 64 0D 0A 09 0D 0A 09 54 69 6D 65 54    lined......TimeT
023CA0:  6F 43 68 61 6E 67 65 20 69 73 20 61 20 63 6F 75    oChange is a cou
023CB0:  6E 74 65 72 20 74 68 61 74 20 64 65 74 65 72 6D    nter that determ
023CC0:  69 6E 65 73 20 77 68 65 6E 20 74 68 65 20 63 75    ines when the cu
023CD0:  72 73 6F 72 20 73 68 6F 75 6C 64 0D 0A 09 62 65    rsor should...be
023CE0:  20 63 68 61 6E 67 65 64 20 66 72 6F 6D 20 69 74     changed from it
023CF0:  73 20 63 75 72 72 65 6E 74 20 76 61 6C 75 65 20    s current value 
023D00:  74 6F 20 69 74 73 20 6E 65 67 61 74 69 76 65 2C    to its negative,
023D10:  20 74 6F 20 61 6C 6C 6F 77 20 62 6C 69 6E 6B 69     to allow blinki
023D20:  6E 67 0D 0A 2A 29 0D 0A 56 41 52 09 57 61 73 55    ng..*)..VAR.WasU
023D30:  6E 64 65 72 4C 69 6E 65 64 3A 42 4F 4F 4C 45 41    nderLined:BOOLEA
023D40:  4E 3D 46 41 4C 53 45 3B 0D 0A 09 54 69 6D 65 54    N=FALSE;...TimeT
023D50:  6F 43 68 61 6E 67 65 3A 49 4E 54 45 47 45 52 3D    oChange:INTEGER=
023D60:  30 3B 0D 0A 0D 0A 28 2A 09 42 6C 69 6E 6B 20 63    0;....(*.Blink c
023D70:  75 72 73 6F 72 20 2D 20 64 65 63 72 65 6D 65 6E    ursor - decremen
023D80:  74 20 74 69 6D 65 72 2C 20 69 66 20 6E 65 67 61    t timer, if nega
023D90:  74 69 76 65 20 72 65 73 65 74 20 61 6E 64 0D 0A    tive reset and..
023DA0:  09 63 68 61 6E 67 65 20 74 6F 70 20 62 69 74 20    .change top bit 
023DB0:  6F 66 20 63 68 61 72 61 63 74 65 72 20 75 6E 64    of character und
023DC0:  65 72 20 63 75 72 73 6F 72 2A 29 0D 0A 0D 0A 50    er cursor*)....P
023DD0:  52 4F 43 45 44 55 52 45 20 42 6C 69 6E 6B 43 75    ROCEDURE BlinkCu
023DE0:  72 73 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 44    rsor;..BEGIN...D
023DF0:  45 43 28 54 69 6D 65 54 6F 43 68 61 6E 67 65 29    EC(TimeToChange)
023E00:  29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 65    );.....DEC(Scree
023E10:  6E 50 6F 73 29 3B 0D 0A 09 09 09 53 63 72 65 65    nPos);.....Scree
023E20:  6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3A 3D 27 20    n[ScreenPos]:=' 
023E30:  27 0D 0A 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49    '.....END...ELSI
023E40:  46 20 63 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09    F ch=TAB THEN...
023E50:  09 4C 4F 4F 50 0D 0A 09 09 09 49 46 20 43 6F 6C    .LOOP.....IF Col
023E60:  4E 6F 3E 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64    No>=LogScreenWid
023E70:  74 68 2D 31 20 54 48 45 4E 20 45 58 49 54 20 45    th-1 THEN EXIT E
023E80:  4E 44 3B 0D 0A 09 09 09 53 63 72 65 65 6E 5B 53    ND;.....Screen[S
023E90:  63 72 65 65 6E 50 6F 73 5D 3A 3D 27 20 27 3B 0D    creenPos]:=' ';.
023EA0:  0A 09 09 09 49 4E 43 28 53 63 72 65 65 6E 50 6F    ....INC(ScreenPo
023EB0:  73 29 3B 0D 0A 09 09 09 49 4E 43 28 43 6F 6C 4E    s);.....INC(ColN
023EC0:  6F 29 3B 0D 0A 09 09 09 49 46 20 49 41 4E 44 28    o);.....IF IAND(
023ED0:  43 6F 6C 4E 6F 2C 37 29 3D 30 20 54 48 45 4E 20    ColNo,7)=0 THEN 
023EE0:  45 58 49 54 20 45 4E 44 0D 0A 09 09 09 45 4E 44    EXIT END.....END
023EF0:  20 28 2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4C 53 45     (*LOOP*)...ELSE
023F00:  09 0D 0A 09 09 49 46 20 55 6E 64 65 72 4C 69 6E    .....IF UnderLin
023F10:  65 20 4F 52 20 45 6E 68 61 6E 63 65 64 56 69 64    e OR EnhancedVid
023F20:  65 6F 20 4F 52 20 42 6C 69 6E 6B 69 6E 67 20 4F    eo OR Blinking O
023F30:  52 20 49 6E 76 65 72 73 65 56 69 64 65 6F 20 54    R InverseVideo T
023F40:  48 45 4E 20 0D 0A 09 09 09 63 68 3A 3D 43 48 52    HEN .....ch:=CHR
023F50:  28 4F 52 44 28 63 68 29 2B 31 32 38 29 0D 0A 09    (ORD(ch)+128)...
023F60:  09 09 45 4E 44 3B 0D 0A 09 09 50 75 74 61 6E 64    ..END;....Putand
023F70:  49 6E 63 28 63 68 29 3B 0D 0A 09 09 45 4E 44 3B    Inc(ch);....END;
023F80:  20 28 2A 4E 6F 74 20 43 52 20 6F 72 20 4C 46 20     (*Not CR or LF 
023F90:  6F 72 20 54 41 42 2A 29 0D 0A 09 53 65 74 43 75    or TAB*)...SetCu
023FA0:  72 73 6F 72 3B 0D 0A 09 45 4E 44 20 0D 0A 20 20    rsor;...END ..  
023FB0:  20 20 45 4E 44 20 57 72 69 74 65 3B 0D 0A 0D 0A      END Write;....
023FC0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63 72 65    ..PROCEDURE Scre
023FD0:  65 6E 43 6F 6E 74 72 6F 6C 28 73 3A 45 64 69 74    enControl(s:Edit
023FE0:  73 29 3B 0D 0A 0D 0A 28 2A 09 09 50 65 72 66 6F    s);....(*..Perfo
023FF0:  72 6D 20 61 20 73 63 72 65 65 6E 20 63 6F 6E 74    rm a screen cont
024000:  3B 0D 0A 09 49 46 20 54 69 6D 65 54 6F 43 68 61    ;...IF TimeToCha
024010:  6E 67 65 3C 30 20 54 48 45 4E 0D 0A 09 09 54 69    nge<0 THEN....Ti
024020:  6D 65 54 6F 43 68 61 6E 67 65 3A 3D 39 30 30 3B    meToChange:=900;
024030:  09 28 2A 63 68 61 6E 67 65 20 74 6F 20 63 68 61    .(*change to cha
024040:  6E 67 65 20 62 6C 69 6E 6B 20 72 61 74 65 2A 29    nge blink rate*)
024050:  0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 65 65    ....Screen[Scree
024060:  6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 28 53    nPos]:=CHR(ORD(S
024070:  63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D    creen[ScreenPos]
024080:  29 2B 31 32 38 29 0D 0A 09 09 45 4E 44 0D 0A 09    )+128)....END...
024090:  45 4E 44 20 42 6C 69 6E 6B 43 75 72 73 6F 72 3B    END BlinkCursor;
0240A0:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C    ....PROCEDURE Cl
0240B0:  65 61 72 43 75 72 73 6F 72 3B 0D 0A 42 45 47 49    earCursor;..BEGI
0240C0:  4E 0D 0A 09 49 46 20 28 53 63 72 65 65 6E 5B 53    N...IF (Screen[S
0240D0:  63 72 65 65 6E 50 6F 73 5D 3E 37 66 78 29 3C 3E    creenPos]>7fx)<>
0240E0:  57 61 73 55 6E 64 65 72 4C 69 6E 65 64 20 54 48    WasUnderLined TH
0240F0:  45 4E 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72    EN....Screen[Scr
024100:  65 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44    eenPos]:=CHR(ORD
024110:  28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F    (Screen[ScreenPo
024120:  73 5D 29 2B 31 32 38 29 3B 0D 0A 09 09 45 4E 44    s])+128);....END
024130:  3B 0D 0A 09 57 61 73 55 6E 64 65 72 4C 69 6E 65    ;...WasUnderLine
024140:  64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 45 4E 44 20    d:=FALSE;...END 
024150:  43 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 50 52    ClearCursor;..PR
024160:  4F 43 45 44 55 52 45 20 53 65 74 43 75 72 73 6F    OCEDURE SetCurso
024170:  72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 61 73 55    r;..BEGIN...WasU
024180:  6E 64 65 72 4C 69 6E 65 64 3A 3D 53 63 72 65 65    nderLined:=Scree
024190:  6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3E 3D 38 30    n[ScreenPos]>=80
0241A0:  78 3B 0D 0A 09 53 63 72 65 65 6E 5B 53 63 72 65    x;...Screen[Scre
0241B0:  65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 28    enPos]:=CHR(ORD(
0241C0:  53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73    Screen[ScreenPos
0241D0:  5D 29 2B 31 32 38 29 3B 0D 0A 09 45 4E 44 20 53    ])+128);...END S
0241E0:  65 74 43 75 72 73 6F 72 3B 0D 0A 0D 0A 50 52 4F    etCursor;....PRO
0241F0:  43 45 44 55 52 45 20 47 6F 74 6F 78 79 28 78 2C    CEDURE Gotoxy(x,
024200:  72 6F 6C 20 6F 70 65 72 61 74 69 6F 6E 0D 0A 0D    rol operation...
024210:  0A 09 09 4D 61 79 20 6E 65 65 64 20 61 6C 74 65    ...May need alte
024220:  72 61 74 69 6F 6E 20 66 6F 72 20 76 61 72 69 6F    ration for vario
024230:  75 73 20 6D 61 63 68 69 6E 65 73 2A 29 0D 0A 0D    us machines*)...
024240:  0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F    .BEGIN..    IF O
024250:  75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45    utputEnabled THE
024260:  4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B    N...ClearCursor;
024270:  0D 0A 09 43 41 53 45 20 73 20 4F 46 0D 0A 09 44    ...CASE s OF...D
024280:  69 6D 3A 48 61 6C 66 49 6E 74 65 6E 73 69 74 79    im:HalfIntensity
024290:  3A 3D 54 52 55 45 7C 0D 0A 09 42 72 69 67 68 74    :=TRUE|...Bright
0242A0:  3A 09 48 61 6C 66 49 6E 74 65 6E 73 69 74 79 3A    :.HalfIntensity:
0242B0:  3D 46 41 4C 53 45 0D 0A 09 09 45 6E 68 61 6E 63    =FALSE....Enhanc
0242C0:  65 64 56 69 64 65 6F 3A 3D 54 52 55 45 7C 0D 0A    edVideo:=TRUE|..
0242D0:  09 4E 6F 72 6D 61 6C 3A 09 48 61 6C 66 49 6E 74    .Normal:.HalfInt
0242E0:  65 6E 73 69 74 79 3A 3D 46 41 4C 53 45 3B 0D 0A    ensity:=FALSE;..
0242F0:  09 09 45 6E 68 61 6E 63 65 64 56 69 64 65 6F 3A    ..EnhancedVideo:
024300:  3D 46 41 4C 53 45 3B 0D 0A 09 09 49 6E 76 65 72    =FALSE;....Inver
024310:  73 65 56 69 64 65 6F 3A 3D 46 41 4C 53 45 3B 0D    seVideo:=FALSE;.
024320:  0A 09 09 42 6C 69 6E 6B 69 6E 67 3A 3D 46 41 4C    ...Blinking:=FAL
024330:  53 45 3B 0D 0A 09 09 55 6E 64 65 72 4C 69 6E 65    SE;....UnderLine
024340:  3A 3D 46 41 4C 53 45 7C 0D 0A 09 49 6E 76 65 72    :=FALSE|...Inver
024350:  73 65 3A 49 6E 76 65 72 73 65 56 69 64 65 6F 3A    se:InverseVideo:
024360:  3D 54 52 55 45 7C 0D 0A 09 42 6C 69 6E 6B 3A 42    =TRUE|...Blink:B
024370:  6C 69 6E 6B 69 6E 67 3A 3D 54 52 55 45 7C 0D 0A    linking:=TRUE|..
024380:  09 53 74 61 72 74 47 72 61 70 68 2C 45 6E 64 47    .StartGraph,EndG
024390:  72 61 70 68 3A 28 2A 64 6F 20 6E 6F 74 68 69 6E    raph:(*do nothin
0243A0:  67 2A 29 7C 0D 0A 09 44 65 6C 43 68 61 72 3A 28    g*)|...DelChar:(
0243B0:  2A 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 6C 69    *Move rest of li
0243C0:  6E 65 20 75 70 20 6F 6E 65 2C 20 61 64 64 20 62    ne up one, add b
0243D0:  6C 61 6E 6B 20 74 6F 20 65 6E 64 2A 29 0D 0A 09    lank to end*)...
0243E0:  09 4D 6F 76 65 64 6F 77 6E 28 41 44 52 28 53 63    .Movedown(ADR(Sc
0243F0:  72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 2B 31    reen[ScreenPos+1
024400:  79 3A 43 41 52 44 49 4E 41 4C 29 3B 09 09 0D 0A    y:CARDINAL);....
024410:  0D 0A 28 2A 09 09 50 6F 73 69 74 69 6F 6E 20 74    ..(*..Position t
024420:  6F 20 67 69 76 65 6E 20 63 6F 6F 72 64 69 6E 61    o given coordina
024430:  74 65 73 0D 0A 09 09 74 6F 70 20 6C 65 66 74 20    tes....top left 
024440:  69 73 20 61 6C 77 61 79 73 20 30 2C 30 20 0D 0A    is always 0,0 ..
024450:  0D 0A 09 09 78 20 69 73 20 63 6F 6C 75 6D 6E 2C    ....x is column,
024460:  20 79 20 69 73 20 72 6F 77 0D 0A 0D 0A 09 09 41     y is row......A
024470:  20 27 53 74 61 6E 64 61 72 64 27 20 53 63 72 65     'Standard' Scre
024480:  65 6E 20 69 73 20 38 30 20 62 79 20 32 34 2E 20    en is 80 by 24. 
024490:  54 68 65 20 6C 69 6D 69 74 20 69 73 20 73 65 74    The limit is set
0244A0:  20 62 79 0D 0A 09 09 74 68 65 20 74 65 72 6D 69     by....the termi
0244B0:  6E 61 6C 20 64 65 66 69 6E 69 74 69 6F 6E 20 66    nal definition f
0244C0:  69 6C 65 09 2A 29 0D 0A 42 45 47 49 4E 0D 0A 20    ile.*)..BEGIN.. 
0244D0:  20 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62       IF OutputEnab
0244E0:  6C 65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72    led THEN...Clear
0244F0:  43 75 72 73 6F 72 3B 0D 0A 09 43 6F 6C 4E 6F 3A    Cursor;...ColNo:
024500:  3D 78 3B 0D 0A 09 52 6F 77 4E 6F 3A 3D 79 3B 0D    =x;...RowNo:=y;.
024510:  0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C    ..ScreenPos:=Col
024520:  4E 6F 2B 52 6F 77 4E 6F 2A 43 68 61 72 49 6E 63    No+RowNo*CharInc
024530:  72 65 6D 65 6E 74 2A 52 6F 77 57 69 64 74 68 3B    rement*RowWidth;
024540:  0D 0A 09 49 46 20 53 63 72 65 65 6E 50 6F 73 3E    ...IF ScreenPos>
024550:  3D 53 63 72 65 65 6E 53 69 7A 65 20 54 48 45 4E    =ScreenSize THEN
024560:  0D 0A 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09    ....ColNo:=0;...
024570:  09 52 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 09 53 63    .RowNo:=0;....Sc
024580:  72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 09 45    reenPos:=0;....E
024590:  4E 44 3B 0D 0A 09 53 65 74 43 75 72 73 6F 72 3B    ND;...SetCursor;
0245A0:  0D 0A 20 20 20 20 09 45 4E 44 20 0D 0A 20 20 20    ..    .END ..   
0245B0:  20 45 4E 44 20 47 6F 74 6F 78 79 3B 0D 0A 0D 0A     END Gotoxy;....
0245C0:  50 52 4F 43 45 44 55 52 45 20 50 75 74 61 6E 64    PROCEDURE Putand
0245D0:  49 6E 63 28 63 68 3A 43 48 41 52 29 3B 0D 0A 0D    Inc(ch:CHAR);...
0245E0:  0A 28 2A 09 6F 75 74 70 75 74 20 61 20 63 68 61    .(*.output a cha
0245F0:  72 61 63 74 65 72 20 61 6E 64 20 69 6E 63 72 65    racter and incre
024600:  5D 29 2C 41 44 52 28 53 63 72 65 65 6E 5B 53 63    ]),ADR(Screen[Sc
024610:  72 65 65 6E 50 6F 73 5D 29 2C 52 6F 77 57 69 64    reenPos]),RowWid
024620:  74 68 2D 43 6F 6C 4E 6F 2D 31 29 3B 0D 0A 09 09    th-ColNo-1);....
024630:  53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73    Screen[ScreenPos
024640:  2D 43 6F 6C 4E 6F 2B 52 6F 77 57 69 64 74 68 2D    -ColNo+RowWidth-
024650:  31 5D 3A 3D 27 20 27 7C 0D 0A 09 44 65 6C 4C 69    1]:=' '|...DelLi
024660:  6E 65 3A 28 2A 4D 6F 76 65 20 72 65 73 74 20 6F    ne:(*Move rest o
024670:  66 20 73 63 72 65 65 6E 20 75 70 20 61 20 6C 69    f screen up a li
024680:  6E 65 2C 20 61 64 64 20 62 6C 61 6E 6B 20 6C 69    ne, add blank li
024690:  6E 65 20 61 74 20 65 6E 64 2A 29 0D 0A 09 09 4D    ne at end*)....M
0246A0:  6F 76 65 64 6F 77 6E 28 41 44 52 28 53 63 72 65    ovedown(ADR(Scre
0246B0:  65 6E 5B 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C    en[ScreenPos-Col
0246C0:  4E 6F 2B 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A    No+RowWidth]),..
0246D0:  09 09 09 20 41 44 52 28 53 63 72 65 65 6E 5B 53    ... ADR(Screen[S
0246E0:  63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 5D 29    creenPos-ColNo])
0246F0:  2C 0D 0A 09 09 09 53 63 72 65 65 6E 53 69 7A 65    ,.....ScreenSize
024700:  2D 53 63 72 65 65 6E 50 6F 73 2B 43 6F 6C 4E 6F    -ScreenPos+ColNo
024710:  2D 52 6F 77 57 69 64 74 68 29 3B 0D 0A 09 09 46    -RowWidth);....F
024720:  4F 52 20 69 3A 3D 53 63 72 65 65 6E 53 69 7A 65    OR i:=ScreenSize
024730:  2D 52 6F 77 57 69 64 74 68 20 54 4F 20 53 63 72    -RowWidth TO Scr
024740:  65 65 6E 53 69 7A 65 2D 31 20 44 4F 20 53 63 72    eenSize-1 DO Scr
024750:  65 65 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 3B    een[i]:=' ' END;
024760:  0D 0A 09 09 7C 0D 0A 09 49 6E 73 43 68 61 72 3A    ....|...InsChar:
024770:  28 2A 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 6C    (*Move rest of l
024780:  69 6E 65 20 72 69 67 68 74 20 6F 6E 65 20 63 68    ine right one ch
024790:  61 72 61 63 74 65 72 2C 20 6C 61 73 74 20 63 68    aracter, last ch
0247A0:  61 72 61 63 74 65 72 20 6D 61 79 20 62 65 20 6C    aracter may be l
0247B0:  6F 73 74 2A 29 0D 0A 09 09 4D 6F 76 65 75 70 28    ost*)....Moveup(
0247C0:  41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 65 65    ADR(Screen[Scree
0247D0:  6E 50 6F 73 5D 29 2C 41 44 52 28 53 63 72 65 65    nPos]),ADR(Scree
0247E0:  6E 5B 53 63 72 65 65 6E 50 6F 73 2B 31 5D 29 2C    n[ScreenPos+1]),
0247F0:  52 6F 77 57 69 64 74 68 2D 43 6F 6C 4E 6F 2D 31    RowWidth-ColNo-1
024800:  6D 65 6E 74 20 70 6F 69 6E 74 65 72 73 2A 29 0D    ment pointers*).
024810:  0A 0D 0A 42 45 47 49 4E 0D 0A 09 53 63 72 65 65    ...BEGIN...Scree
024820:  6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3A 3D 63 68    n[ScreenPos]:=ch
024830:  3B 0D 0A 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A    ;.....ScreenPos:
024840:  3D 53 63 72 65 65 6E 50 6F 73 2B 43 68 61 72 49    =ScreenPos+CharI
024850:  6E 63 72 65 6D 65 6E 74 3B 0D 0A 09 49 4E 43 28    ncrement;...INC(
024860:  43 6F 6C 4E 6F 29 3B 0D 0A 09 49 46 20 43 6F 6C    ColNo);...IF Col
024870:  4E 6F 3E 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64    No>=LogScreenWid
024880:  74 68 20 54 48 45 4E 0D 0A 09 09 49 46 20 52 6F    th THEN....IF Ro
024890:  77 4E 6F 3C 28 4C 6F 67 53 63 72 65 65 6E 44 65    wNo<(LogScreenDe
0248A0:  70 74 68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09    pth-1) THEN.....
0248B0:  49 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09    INC(RowNo);.....
0248C0:  43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 09 45 4C 53    ColNo:=0;....ELS
0248D0:  45 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E 6F 29    E.....DEC(ColNo)
0248E0:  3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 65 6E    ;.....DEC(Screen
0248F0:  50 6F 73 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A    Pos);.....END;..
024900:  09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 50 75 74    ..END;...END Put
024910:  61 6E 64 49 6E 63 3B 0D 0A 0D 0A 50 52 4F 43 45    andInc;....PROCE
024920:  44 55 52 45 20 57 72 69 74 65 28 63 68 3A 43 48    DURE Write(ch:CH
024930:  41 52 29 3B 0D 0A 28 2A 09 57 72 69 74 65 20 61    AR);..(*.Write a
024940:  20 63 68 61 72 61 63 74 65 72 0D 0A 0D 0A 09 54     character.....T
024950:  68 69 73 20 72 6F 75 74 69 6E 65 20 69 73 20 75    his routine is u
024960:  73 65 64 20 62 79 20 74 65 72 6D 69 6E 61 6C 20    sed by terminal 
024970:  77 68 65 6E 20 74 68 69 73 20 76 65 72 73 69 6F    when this versio
024980:  6E 20 6F 66 20 53 63 72 65 65 6E 49 4F 20 0D 0A    n of ScreenIO ..
024990:  09 69 73 20 69 6E 20 75 73 65 20 62 65 63 61 75    .is in use becau
0249A0:  73 65 20 61 20 66 6C 61 67 20 69 73 20 73 65 74    se a flag is set
0249B0:  20 62 79 20 74 68 65 20 69 6E 69 74 69 61 6C 69     by the initiali
0249C0:  73 61 74 69 6F 6E 20 6F 66 20 74 68 69 73 20 6D    sation of this m
0249D0:  6F 64 75 6C 65 20 0D 0A 09 74 6F 67 65 74 68 65    odule ...togethe
0249E0:  72 20 77 69 74 68 20 74 68 65 20 61 64 64 72 65    r with the addre
0249F0:  73 73 20 6F 66 20 74 68 69 73 20 72 6F 75 74 69    ss of this routi
024A00:  29 3B 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72    );....Screen[Scr
024A10:  65 65 6E 50 6F 73 5D 3A 3D 27 20 27 7C 0D 0A 09    eenPos]:=' '|...
024A20:  49 6E 73 4C 69 6E 65 3A 28 2A 4D 6F 76 65 20 72    InsLine:(*Move r
024A30:  65 73 74 20 6F 66 20 73 63 72 65 65 6E 20 64 6F    est of screen do
024A40:  77 6E 20 6F 6E 65 20 6C 69 6E 65 2C 20 61 64 64    wn one line, add
024A50:  20 62 6C 61 6E 6B 20 6C 69 6E 65 2A 29 0D 0A 09     blank line*)...
024A60:  09 4D 6F 76 65 75 70 28 41 44 52 28 53 63 72 65    .Moveup(ADR(Scre
024A70:  65 6E 5B 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C    en[ScreenPos-Col
024A80:  4E 6F 5D 29 2C 41 44 52 28 53 63 72 65 65 6E 5B    No]),ADR(Screen[
024A90:  53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B    ScreenPos-ColNo+
024AA0:  52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 53    RowWidth]),....S
024AB0:  63 72 65 65 6E 53 69 7A 65 2D 53 63 72 65 65 6E    creenSize-Screen
024AC0:  50 6F 73 2B 43 6F 6C 4E 6F 2D 52 6F 77 57 69 64    Pos+ColNo-RowWid
024AD0:  74 68 29 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 53    th);....FOR i:=S
024AE0:  63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 20 54    creenPos-ColNo T
024AF0:  4F 20 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E    O ScreenPos-ColN
024B00:  6F 2B 52 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D    o+RowWidth-1 DO.
024B10:  0A 09 09 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27    ....Screen[i]:='
024B20:  20 27 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09     ';.....END;....
024B30:  7C 0D 0A 09 44 65 6C 45 6F 6C 3A 46 4F 52 20 69    |...DelEol:FOR i
024B40:  3A 3D 53 63 72 65 65 6E 50 6F 73 20 54 4F 20 53    :=ScreenPos TO S
024B50:  63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52    creenPos-ColNo+R
024B60:  6F 77 57 69 64 74 68 2D 31 20 44 4F 20 53 63 72    owWidth-1 DO Scr
024B70:  65 65 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 7C    een[i]:=' ' END|
024B80:  0D 0A 09 44 65 6C 45 6F 73 3A 46 4F 52 20 69 3A    ...DelEos:FOR i:
024B90:  3D 53 63 72 65 65 6E 50 6F 73 20 54 4F 20 53 63    =ScreenPos TO Sc
024BA0:  72 65 65 6E 53 69 7A 65 2D 31 20 44 4F 20 53 63    reenSize-1 DO Sc
024BB0:  72 65 65 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44    reen[i]:=' ' END
024BC0:  7C 0D 0A 09 43 6C 65 61 72 53 63 72 65 65 6E 3A    |...ClearScreen:
024BD0:  0D 0A 09 09 09 28 2A 4F 73 62 6F 72 6E 65 20 73    .....(*Osborne s
024BE0:  70 65 63 69 66 69 63 20 2D 20 68 6F 6D 65 20 73    pecific - home s
024BF0:  63 72 65 65 6E 20 61 6E 64 20 63 75 72 73 6F 72    creen and cursor
024C00:  6E 65 0D 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74    ne.....This rout
024C10:  69 6E 65 20 77 69 6C 6C 20 6E 65 65 64 20 63 68    ine will need ch
024C20:  61 6E 67 69 6E 67 20 66 6F 72 20 64 69 66 66 65    anging for diffe
024C30:  72 65 6E 74 20 76 69 64 65 6F 20 73 79 73 74 65    rent video syste
024C40:  6D 73 0D 0A 0D 0A 09 54 68 65 20 4F 73 62 6F 72    ms.....The Osbor
024C50:  6E 65 20 31 20 69 73 20 76 65 72 79 20 6C 69 6D    ne 1 is very lim
024C60:  69 74 65 64 20 2D 20 61 6C 6C 20 79 6F 75 20 63    ited - all you c
024C70:  61 6E 20 64 6F 20 69 73 0D 0A 09 75 6E 64 65 72    an do is...under
024C80:  6C 69 6E 65 20 61 6E 64 20 68 61 6C 66 20 69 6E    line and half in
024C90:  74 65 6E 73 69 74 79 2E 20 41 6C 6C 20 6F 74 68    tensity. All oth
024CA0:  65 72 73 20 61 72 65 20 6D 61 70 70 65 64 20 6F    ers are mapped o
024CB0:  6E 74 6F 20 74 68 65 73 65 20 74 77 6F 0D 0A 2A    nto these two..*
024CC0:  29 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46    )..BEGIN..    IF
024CD0:  20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54     OutputEnabled T
024CE0:  48 45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F    HEN...ClearCurso
024CF0:  72 3B 0D 0A 09 49 46 20 63 68 3E 30 37 66 78 20    r;...IF ch>07fx 
024D00:  54 48 45 4E 20 63 68 3A 3D 43 48 52 28 4F 52 44    THEN ch:=CHR(ORD
024D10:  28 63 68 29 2D 31 32 38 29 20 45 4E 44 3B 0D 0A    (ch)-128) END;..
024D20:  09 49 46 20 63 68 3D 43 52 20 54 48 45 4E 0D 0A    .IF ch=CR THEN..
024D30:  09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63 72    ..ScreenPos:=Scr
024D40:  65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 3B 0D 0A 09    eenPos-ColNo;...
024D50:  09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 45 4C 53    .ColNo:=0;...ELS
024D60:  49 46 20 63 68 3D 4C 46 20 54 48 45 4E 0D 0A 09    IF ch=LF THEN...
024D70:  09 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63    .IF RowNo<(LogSc
024D80:  72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 48 45    reenDepth-1) THE
024D90:  4E 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29    N.....INC(RowNo)
024DA0:  3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F 73 3A    ;.....ScreenPos:
024DB0:  3D 53 63 72 65 65 6E 50 6F 73 2B 52 6F 77 57 69    =ScreenPos+RowWi
024DC0:  64 74 68 3B 0D 0A 09 09 09 45 4E 44 0D 0A 09 45    dth;.....END...E
024DD0:  4C 53 49 46 20 63 68 3D 42 53 20 54 48 45 4E 0D    LSIF ch=BS THEN.
024DE0:  0A 09 09 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48    ...IF ColNo>0 TH
024DF0:  45 4E 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E 6F    EN.....DEC(ColNo
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 41 02 00 00 00 02    ......R...A.....
024E20:  1F 00 46 02 00 00 00 02 1F 00 42 02 00 00 00 02    ..F.......B.....
024E30:  1F 00 47 02 00 00 00 02 1F 00 43 02 00 00 00 02    ..G.......C.....
024E40:  1F 00 48 02 00 00 00 02 1F 00 44 02 00 00 00 02    ..H.......D.....
024E50:  1F 00 49 02 00 00 00 02 1F 00 45 02 00 00 00 02    ..I.......E.....
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:  20 0D 0A 09 09 09 20 70 6F 73 69 74 69 6F 6E 20     ..... position 
024F10:  61 73 20 73 74 6F 72 65 64 20 69 6E 20 42 49 4F    as stored in BIO
024F20:  53 20 74 61 62 6C 65 73 2A 29 0D 0A 09 09 20 20    S tables*)....  
024F30:  20 20 69 3A 3D 42 44 4F 53 28 77 63 63 66 63 2C      i:=BDOS(wccfc,
024F40:  31 62 68 29 3B 69 3A 3D 42 44 4F 53 28 77 63 63    1bh);i:=BDOS(wcc
024F50:  66 63 2C 4F 52 44 28 27 53 27 29 29 3B 0D 0A 09    fc,ORD('S'));...
024F60:  09 20 20 20 20 69 3A 3D 42 44 4F 53 28 77 63 63    .    i:=BDOS(wcc
024F70:  66 63 2C 33 32 29 3B 69 3A 3D 42 44 4F 53 28 77    fc,32);i:=BDOS(w
024F80:  63 63 66 63 2C 33 32 29 3B 0D 0A 09 09 20 20 20    ccfc,32);....   
024F90:  20 69 3A 3D 42 44 4F 53 28 77 63 63 66 63 2C 31     i:=BDOS(wccfc,1
024FA0:  62 68 29 3B 69 3A 3D 42 44 4F 53 28 77 63 63 66    bh);i:=BDOS(wccf
024FB0:  63 2C 4F 52 44 28 27 3D 27 29 29 3B 0D 0A 09 09    c,ORD('='));....
024FC0:  20 20 20 20 69 3A 3D 42 44 4F 53 28 77 63 63 66        i:=BDOS(wccf
024FD0:  63 2C 33 32 29 3B 69 3A 3D 42 44 4F 53 28 77 63    c,32);i:=BDOS(wc
024FE0:  63 66 63 2C 33 32 29 3B 0D 0A 09 09 20 20 20 20    cfc,32);....    
024FF0:  28 2A 42 61 6E 6B 32 28 41 44 52 28 53 63 72 65    (*Bank2(ADR(Scre
025000:  65 6E 5B 30 5D 29 2C 41 44 52 28 53 63 72 65 65    en[0]),ADR(Scree
025010:  6E 5B 53 63 72 65 65 6E 53 69 7A 65 2D 31 5D 29    n[ScreenSize-1])
025020:  2C 38 30 68 29 2A 29 0D 0A 09 09 0D 0A 09 09 09    ,80h)*).........
025030:  28 2A 6E 6F 77 20 63 6C 65 61 72 20 64 69 73 70    (*now clear disp
025040:  6C 61 79 20 6D 65 6D 6F 72 79 2A 29 0D 0A 09 09    lay memory*)....
025050:  20 20 20 20 53 63 72 65 65 6E 5B 30 5D 3A 3D 27        Screen[0]:='
025060:  20 27 3B 0D 0A 09 09 20 20 20 20 4D 6F 76 65 75     ';....    Moveu
025070:  70 28 41 44 52 28 53 63 72 65 65 6E 5B 31 5D 29    p(ADR(Screen[1])
025080:  2C 41 44 52 28 53 63 72 65 65 6E 5B 30 5D 29 2C    ,ADR(Screen[0]),
025090:  53 63 72 65 65 6E 53 69 7A 65 2D 31 29 3B 0D 0A    ScreenSize-1);..
0250A0:  09 09 20 20 20 20 53 63 72 65 65 6E 50 6F 73 3A    ..    ScreenPos:
0250B0:  3D 30 3B 0D 0A 09 09 20 20 20 20 43 6F 6C 4E 6F    =0;....    ColNo
0250C0:  3A 3D 30 3B 0D 0A 09 09 20 20 20 20 52 6F 77 4E    :=0;....    RowN
0250D0:  6F 3A 3D 30 0D 0A 09 09 20 20 20 20 7C 0D 0A 0D    o:=0....    |...
0250E0:  0A 09 28 2A 20 54 68 65 20 66 6F 6C 6C 6F 77 69    ..(* The followi
0250F0:  6E 67 20 67 72 61 70 68 69 63 73 20 63 68 61 72    ng graphics char
025100:  09 09 78 32 2C 79 32 20 20 69 73 20 75 70 70 65    ..x2,y2  is uppe
025110:  72 20 72 69 67 68 74 20 63 6F 72 6E 65 72 2A 29    r right corner*)
025120:  0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C    ..VAR.i:CARDINAL
025130:  3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46    ;..BEGIN..    IF
025140:  20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54     OutputEnabled T
025150:  48 45 4E 0D 0A 09 47 6F 74 6F 78 79 28 78 31 2C    HEN...Gotoxy(x1,
025160:  79 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E    y1);...ScreenCon
025170:  74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68 29    trol(StartGraph)
025180:  3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F    ;...ScreenContro
025190:  6C 28 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A 09 46    l(CornerLL);...F
0251A0:  4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32    OR i:=x1+1 TO x2
0251B0:  2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74    -1 DO ScreenCont
0251C0:  72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20    rol(Horizontal) 
0251D0:  45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E    END;...ScreenCon
0251E0:  74 72 6F 6C 28 43 6F 72 6E 65 72 4C 52 29 3B 0D    trol(CornerLR);.
0251F0:  0A 09 47 6F 74 6F 78 79 28 78 31 2C 79 32 29 3B    ..Gotoxy(x1,y2);
025200:  0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C    ...ScreenControl
025210:  28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46 4F    (CornerUL);...FO
025220:  52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 2D    R i:=x1+1 TO x2-
025230:  31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 72    1 DO ScreenContr
025240:  6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 45    ol(Horizontal) E
025250:  4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74    ND;...ScreenCont
025260:  72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D 0A    rol(CornerUR);..
025270:  09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20    .FOR i:=y2+1 TO 
025280:  79 31 2D 31 20 20 44 4F 0D 0A 09 09 47 6F 74 6F    y1-1  DO....Goto
025290:  78 79 28 78 32 2C 69 29 3B 0D 0A 09 09 53 63 72    xy(x2,i);....Scr
0252A0:  65 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69    eenControl(Verti
0252B0:  63 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    cal);....END;...
0252C0:  46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 79    FOR i:=y2+1 TO y
0252D0:  31 2D 31 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 79    1-1 DO....Gotoxy
0252E0:  28 78 31 2C 69 29 3B 0D 0A 09 09 53 63 72 65 65    (x1,i);....Scree
0252F0:  6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 63 61    nControl(Vertica
025300:  61 63 74 65 72 73 20 77 69 6C 6C 20 6E 65 65 64    acters will need
025310:  20 74 6F 20 62 65 20 6D 6F 64 69 66 69 65 64 20     to be modified 
025320:  66 6F 72 20 0D 0A 09 20 20 20 64 69 66 66 65 72    for ...   differ
025330:  65 6E 74 20 64 69 73 70 6C 61 79 20 73 79 73 74    ent display syst
025340:  65 6D 73 2A 29 0D 0A 0D 0A 09 48 6F 72 69 7A 6F    ems*).....Horizo
025350:  6E 74 61 6C 3A 50 75 74 61 6E 64 49 6E 63 28 31    ntal:PutandInc(1
025360:  62 78 29 7C 0D 0A 09 56 65 72 74 69 63 61 6C 3A    bx)|...Vertical:
025370:  50 75 74 61 6E 64 49 6E 63 28 30 62 78 29 7C 0D    PutandInc(0bx)|.
025380:  0A 09 43 6F 72 6E 65 72 4C 4C 3A 50 75 74 61 6E    ..CornerLL:Putan
025390:  64 49 6E 63 28 31 63 78 29 7C 0D 0A 09 43 6F 72    dInc(1cx)|...Cor
0253A0:  6E 65 72 55 4C 3A 50 75 74 61 6E 64 49 6E 63 28    nerUL:PutandInc(
0253B0:  30 66 78 29 7C 0D 0A 09 43 6F 72 6E 65 72 55 52    0fx)|...CornerUR
0253C0:  3A 50 75 74 61 6E 64 49 6E 63 28 31 30 78 29 7C    :PutandInc(10x)|
0253D0:  0D 0A 09 43 6F 72 6E 65 72 4C 52 3A 50 75 74 61    ...CornerLR:Puta
0253E0:  6E 64 49 6E 63 28 31 66 78 29 7C 0D 0A 09 53 74    ndInc(1fx)|...St
0253F0:  61 72 74 78 79 2C 4D 69 64 64 6C 65 58 59 2C 45    artxy,MiddleXY,E
025400:  6E 64 58 59 3A 28 2A 63 75 72 73 6F 72 20 61 64    ndXY:(*cursor ad
025410:  64 72 65 73 73 69 6E 67 20 2D 20 6E 6F 74 20 72    dressing - not r
025420:  65 71 75 69 72 65 64 2A 29 7C 0D 0A 09 52 69 6E    equired*)|...Rin
025430:  67 42 65 6C 6C 3A 69 3A 3D 42 44 4F 53 28 77 63    gBell:i:=BDOS(wc
025440:  63 66 63 2C 37 29 7C 0D 0A 09 4D 6F 76 65 4C 65    cfc,7)|...MoveLe
025450:  66 74 3A 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48    ft:IF ColNo>0 TH
025460:  45 4E 20 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E    EN .....DEC(ColN
025470:  6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65    o);.....DEC(Scre
025480:  65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C 53 49 46    enPos);....ELSIF
025490:  20 52 6F 77 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09     RowNo>0 THEN...
0254A0:  09 09 44 45 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09    ..DEC(RowNo);...
0254B0:  09 09 43 6F 6C 4E 6F 3A 3D 4C 6F 67 53 63 72 65    ..ColNo:=LogScre
0254C0:  65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 09 09 53    enWidth-1;.....S
0254D0:  63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C 4E 6F 2B    creenPos:=ColNo+
0254E0:  52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D    RowNo*RowWidth;.
0254F0:  0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 52    ....END|...MoveR
025500:  6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 20 20 20    l);....END;..   
025510:  20 20 09 45 4E 44 0D 0A 20 20 20 20 45 4E 44 20      .END..    END 
025520:  44 72 61 77 42 6F 78 3B 0D 0A 50 52 4F 43 45 44    DrawBox;..PROCED
025530:  55 52 45 20 4F 75 74 70 75 74 54 6F 53 63 72 65    URE OutputToScre
025540:  65 6E 28 4F 6E 3A 42 4F 4F 4C 45 41 4E 29 3B 0D    en(On:BOOLEAN);.
025550:  0A 42 45 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45    .BEGIN...OutputE
025560:  6E 61 62 6C 65 64 3A 3D 4F 6E 0D 0A 09 45 4E 44    nabled:=On...END
025570:  20 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 3B     OutputToScreen;
025580:  09 0D 0A 42 45 47 49 4E 0D 0A 09 4F 75 74 70 75    ...BEGIN...Outpu
025590:  74 45 6E 61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D    tEnabled:=TRUE;.
0255A0:  0A 09 42 6C 69 6E 6B 52 6F 75 74 69 6E 65 3A 3D    ..BlinkRoutine:=
0255B0:  42 6C 69 6E 6B 43 75 72 73 6F 72 3B 0D 0A 09 42    BlinkCursor;...B
0255C0:  6C 69 6E 6B 45 6E 61 62 6C 65 64 3A 3D 54 52 55    linkEnabled:=TRU
0255D0:  45 3B 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D    E;...ScreenPos:=
0255E0:  30 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72    0;...ScreenContr
0255F0:  6F 6C 28 43 6C 65 61 72 53 63 72 65 65 6E 29 3B    ol(ClearScreen);
025600:  0D 0A 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 52    ...ColNo:=0;...R
025610:  6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 43 68 61 72 52    owNo:=0;...CharR
025620:  6F 75 74 69 6E 65 3A 3D 57 72 69 74 65 3B 0D 0A    outine:=Write;..
025630:  09 43 68 61 72 45 6E 61 62 6C 65 64 3A 3D 54 52    .CharEnabled:=TR
025640:  55 45 3B 09 0D 0A 09 53 63 72 65 65 6E 57 69 64    UE;....ScreenWid
025650:  74 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64    th:=LogScreenWid
025660:  74 68 3B 0D 0A 09 53 63 72 65 65 6E 44 65 70 74    th;...ScreenDept
025670:  68 3A 3D 4C 6F 67 53 63 72 65 65 6E 44 65 70 74    h:=LogScreenDept
025680:  68 3B 0D 0A 09 45 4E 44 20 53 63 72 65 65 6E 49    h;...END ScreenI
025690:  4F 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    O...............
0256A0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0256B0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0256C0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0256D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0256E0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0256F0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025700:  69 67 68 74 3A 49 46 20 43 6F 6C 4E 6F 3C 28 4C    ight:IF ColNo<(L
025710:  6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D 31 29    ogScreenWidth-1)
025720:  20 54 48 45 4E 20 0D 0A 09 09 09 49 4E 43 28 43     THEN .....INC(C
025730:  6F 6C 4E 6F 29 3B 0D 0A 09 09 09 49 4E 43 28 53    olNo);.....INC(S
025740:  63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C    creenPos);....EL
025750:  53 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63    SIF RowNo<(LogSc
025760:  72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 48 45    reenDepth-1) THE
025770:  4E 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D    N.....ColNo:=0;.
025780:  0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D    ....INC(RowNo);.
025790:  0A 09 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 52    ....ScreenPos:=R
0257A0:  6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D 0A    owNo*RowWidth;..
0257B0:  09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 44 6F    ...END|...MoveDo
0257C0:  77 6E 3A 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67    wn:IF RowNo<(Log
0257D0:  53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54    ScreenDepth-1) T
0257E0:  48 45 4E 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E    HEN.....INC(RowN
0257F0:  6F 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F    o);.....ScreenPo
025800:  73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B 52 6F 77    s:=ScreenPos+Row
025810:  57 69 64 74 68 3B 0D 0A 09 09 09 45 4E 44 7C 0D    Width;.....END|.
025820:  0A 09 4D 6F 76 65 55 70 3A 49 46 20 52 6F 77 4E    ..MoveUp:IF RowN
025830:  6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09 44 45 43    o>0 THEN.....DEC
025840:  28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 63 72    (RowNo);.....Scr
025850:  65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F    eenPos:=ScreenPo
025860:  73 2D 52 6F 77 57 69 64 74 68 3B 0D 0A 09 09 09    s-RowWidth;.....
025870:  45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 43    END;....END; (*C
025880:  41 53 45 2A 29 0D 0A 09 53 65 74 43 75 72 73 6F    ASE*)...SetCurso
025890:  72 3B 0D 0A 09 45 4E 44 20 0D 0A 20 20 20 20 45    r;...END ..    E
0258A0:  4E 44 20 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C    ND ScreenControl
0258B0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63 72    ;..PROCEDURE Scr
0258C0:  6F 6C 6C 57 69 6E 64 6F 77 55 70 28 53 74 61 72    ollWindowUp(Star
0258D0:  74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57    tofWindow,EndofW
0258E0:  69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B    indow:CARDINAL);
0258F0:  0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20    ..BEGIN..    IF 
025900:  4D 4F 44 55 4C 45 20 54 65 73 74 3B 0D 0A 0D 0A    MODULE Test;....
025910:  28 2A 09 54 65 73 74 20 6F 66 20 70 61 74 74 65    (*.Test of patte
025920:  72 6E 20 6D 61 74 63 68 20 6D 6F 64 75 6C 65 20    rn match module 
025930:  2A 29 0D 0A 0D 0A 46 52 4F 4D 09 54 65 72 6D 69    *)....FROM.Termi
025940:  6E 61 6C 20 49 4D 50 4F 52 54 20 57 72 69 74 65    nal IMPORT Write
025950:  53 74 72 69 6E 67 2C 52 65 61 64 53 74 72 69 6E    String,ReadStrin
025960:  67 2C 57 72 69 74 65 4C 6E 3B 0D 0A 46 52 4F 4D    g,WriteLn;..FROM
025970:  09 50 61 74 74 65 72 6E 20 49 4D 50 4F 52 54 20    .Pattern IMPORT 
025980:  4E 6F 64 65 54 79 70 65 2C 50 4E 6F 64 65 2C 43    NodeType,PNode,C
025990:  72 65 61 74 65 53 74 72 69 6E 67 4E 6F 64 65 2C    reateStringNode,
0259A0:  4D 61 74 63 68 50 61 74 74 65 72 6E 2C 43 68 61    MatchPattern,Cha
0259B0:  72 53 65 74 2C 0D 0A 09 09 09 43 72 65 61 74 65    rSet,.....Create
0259C0:  41 6C 74 4E 6F 64 65 2C 43 72 65 61 74 65 53 74    AltNode,CreateSt
0259D0:  72 69 6E 67 4E 6F 64 65 2C 0D 0A 09 09 09 43 72    ringNode,.....Cr
0259E0:  65 61 74 65 41 6E 79 4F 66 4E 6F 64 65 2C 43 72    eateAnyOfNode,Cr
0259F0:  65 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 2C 43    eateConcatNode,C
025A00:  72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 3B 0D    reateLimitNode;.
025A10:  0A 46 52 4F 4D 09 53 74 6F 72 61 67 65 20 49 4D    .FROM.Storage IM
025A20:  50 4F 52 54 20 41 4C 4C 4F 43 41 54 45 3B 0D 0A    PORT ALLOCATE;..
025A30:  56 41 52 09 45 78 70 31 2C 45 78 70 2C 54 65 72    VAR.Exp1,Exp,Ter
025A40:  6D 2C 46 61 63 74 3A 50 4E 6F 64 65 3B 0D 0A 09    m,Fact:PNode;...
025A50:  74 65 6D 70 3A 50 4E 6F 64 65 3B 0D 0A 42 45 47    temp:PNode;..BEG
025A60:  49 4E 0D 0A 09 4E 45 57 28 45 78 70 29 3B 0D 0A    IN...NEW(Exp);..
025A70:  09 4E 45 57 28 54 65 72 6D 29 3B 0D 0A 09 46 61    .NEW(Term);...Fa
025A80:  63 74 3A 3D 43 72 65 61 74 65 41 6C 74 4E 6F 64    ct:=CreateAltNod
025A90:  65 28 0D 0A 09 09 43 72 65 61 74 65 41 6E 79 4F    e(....CreateAnyO
025AA0:  66 4E 6F 64 65 28 43 68 61 72 53 65 74 7B 27 41    fNode(CharSet{'A
025AB0:  27 2E 2E 27 5A 27 2C 27 30 27 2E 2E 27 39 27 2C    '..'Z','0'..'9',
025AC0:  27 61 27 2E 2E 27 7A 27 7D 2C 31 2C 33 30 30 30    'a'..'z'},1,3000
025AD0:  30 2C 54 52 55 45 29 2C 0D 0A 09 09 43 72 65 61    0,TRUE),....Crea
025AE0:  74 65 43 6F 6E 63 61 74 4E 6F 64 65 28 0D 0A 09    teConcatNode(...
025AF0:  09 09 43 72 65 61 74 65 43 6F 6E 63 61 74 4E 6F    ..CreateConcatNo
025B00:  4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48    OutputEnabled TH
025B10:  45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72    EN...ClearCursor
025B20:  3B 0D 0A 09 4D 6F 76 65 75 70 28 41 44 52 28 53    ;...Moveup(ADR(S
025B30:  63 72 65 65 6E 5B 28 53 74 61 72 74 6F 66 57 69    creen[(StartofWi
025B40:  6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 5D 29    ndow)*RowWidth])
025B50:  2C 0D 0A 09 09 20 41 44 52 28 53 63 72 65 65 6E    ,.... ADR(Screen
025B60:  5B 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2B    [(StartofWindow+
025B70:  31 29 2A 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A    1)*RowWidth]),..
025B80:  09 09 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2D    .. (EndofWindow-
025B90:  53 74 61 72 74 6F 66 57 69 6E 64 6F 77 29 2A 52    StartofWindow)*R
025BA0:  6F 77 57 69 64 74 68 29 3B 0D 0A 09 46 4F 52 20    owWidth);...FOR 
025BB0:  69 3A 3D 53 74 61 72 74 6F 66 57 69 6E 64 6F 77    i:=StartofWindow
025BC0:  2A 52 6F 77 57 69 64 74 68 20 54 4F 20 28 53 74    *RowWidth TO (St
025BD0:  61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52    artofWindow+1)*R
025BE0:  6F 77 57 69 64 74 68 2D 31 20 44 4F 0D 0A 09 09    owWidth-1 DO....
025BF0:  53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 3B 0D    Screen[i]:=' ';.
025C00:  0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 43 75 72    ...END;...SetCur
025C10:  73 6F 72 3B 0D 0A 09 45 4E 44 20 0D 0A 20 20 20    sor;...END ..   
025C20:  20 45 4E 44 20 53 63 72 6F 6C 6C 57 69 6E 64 6F     END ScrollWindo
025C30:  77 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    wUp;..PROCEDURE 
025C40:  53 63 72 6F 6C 6C 57 69 6E 64 6F 77 44 6F 77 6E    ScrollWindowDown
025C50:  28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45    (StartofWindow,E
025C60:  6E 64 6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49    ndofWindow:CARDI
025C70:  4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20    NAL);..BEGIN..  
025C80:  20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62 6C      IF OutputEnabl
025C90:  65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 43    ed THEN...ClearC
025CA0:  75 72 73 6F 72 3B 0D 0A 09 4D 6F 76 65 64 6F 77    ursor;...Movedow
025CB0:  6E 28 41 44 52 28 53 63 72 65 65 6E 5B 28 53 74    n(ADR(Screen[(St
025CC0:  61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52    artofWindow+1)*R
025CD0:  6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 20 41    owWidth]),.... A
025CE0:  44 52 28 53 63 72 65 65 6E 5B 28 53 74 61 72 74    DR(Screen[(Start
025CF0:  6F 66 57 69 6E 64 6F 77 29 2A 52 6F 77 57 69 64    ofWindow)*RowWid
025D00:  64 65 28 0D 0A 09 09 09 09 43 72 65 61 74 65 53    de(......CreateS
025D10:  74 72 69 6E 67 4E 6F 64 65 28 27 28 27 29 2C 0D    tringNode('('),.
025D20:  0A 09 09 09 09 45 78 70 29 2C 0D 0A 09 09 09 43    .....Exp),.....C
025D30:  72 65 61 74 65 53 74 72 69 6E 67 4E 6F 64 65 28    reateStringNode(
025D40:  27 29 27 29 0D 0A 09 09 09 29 0D 0A 09 09 29 3B    ')').....)....);
025D50:  0D 0A 09 74 65 6D 70 3A 3D 43 72 65 61 74 65 41    ...temp:=CreateA
025D60:  6C 74 4E 6F 64 65 28 0D 0A 09 09 46 61 63 74 2C    ltNode(....Fact,
025D70:  0D 0A 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74    ....CreateConcat
025D80:  4E 6F 64 65 28 0D 0A 09 09 09 46 61 63 74 2C 0D    Node(.....Fact,.
025D90:  0A 09 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74    ....CreateConcat
025DA0:  4E 6F 64 65 28 0D 0A 09 09 09 09 43 72 65 61 74    Node(......Creat
025DB0:  65 53 74 72 69 6E 67 4E 6F 64 65 28 27 2A 27 29    eStringNode('*')
025DC0:  2C 0D 0A 09 09 09 09 54 65 72 6D 29 0D 0A 09 09    ,......Term)....
025DD0:  09 29 0D 0A 09 09 29 3B 0D 0A 09 54 65 72 6D 5E    .)....);...Term^
025DE0:  3A 3D 74 65 6D 70 5E 3B 0D 0A 09 74 65 6D 70 3A    :=temp^;...temp:
025DF0:  3D 43 72 65 61 74 65 41 6C 74 4E 6F 64 65 28 0D    =CreateAltNode(.
025E00:  0A 09 09 20 20 20 20 54 65 72 6D 2C 0D 0A 09 09    ...    Term,....
025E10:  20 20 20 20 43 72 65 61 74 65 43 6F 6E 63 61 74        CreateConcat
025E20:  4E 6F 64 65 28 0D 0A 09 09 09 54 65 72 6D 2C 0D    Node(.....Term,.
025E30:  0A 09 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74    ....CreateConcat
025E40:  4E 6F 64 65 28 0D 0A 09 09 09 09 43 72 65 61 74    Node(......Creat
025E50:  65 53 74 72 69 6E 67 4E 6F 64 65 28 27 2B 27 29    eStringNode('+')
025E60:  2C 0D 0A 09 09 09 09 45 78 70 29 0D 0A 09 09 09    ,......Exp).....
025E70:  29 0D 0A 09 09 20 20 20 20 29 3B 0D 0A 09 45 78    )....    );...Ex
025E80:  70 5E 3A 3D 74 65 6D 70 5E 3B 0D 0A 09 45 78 70    p^:=temp^;...Exp
025E90:  31 3A 3D 43 72 65 61 74 65 43 6F 6E 63 61 74 4E    1:=CreateConcatN
025EA0:  6F 64 65 28 0D 0A 09 09 45 78 70 2C 0D 0A 09 09    ode(....Exp,....
025EB0:  43 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 28    CreateLimitNode(
025EC0:  29 29 3B 0D 0A 09 49 46 20 4D 61 74 63 68 50 61    ));...IF MatchPa
025ED0:  74 74 65 72 6E 28 45 78 70 31 2C 27 32 2A 32 27    ttern(Exp1,'2*2'
025EE0:  29 3C 3E 4E 49 4C 20 54 48 45 4E 20 57 72 69 74    )<>NIL THEN Writ
025EF0:  65 53 74 72 69 6E 67 28 27 31 3A 20 20 4F 4B 27    eString('1:  OK'
025F00:  74 68 5D 29 2C 0D 0A 09 09 20 28 45 6E 64 6F 66    th]),.... (Endof
025F10:  57 69 6E 64 6F 77 2D 53 74 61 72 74 6F 66 57 69    Window-StartofWi
025F20:  6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 29 3B    ndow)*RowWidth);
025F30:  0D 0A 09 46 4F 52 20 69 3A 3D 45 6E 64 6F 66 57    ...FOR i:=EndofW
025F40:  69 6E 64 6F 77 2A 52 6F 77 57 69 64 74 68 20 54    indow*RowWidth T
025F50:  4F 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2B 31    O (EndofWindow+1
025F60:  29 2A 52 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D    )*RowWidth-1 DO.
025F70:  0A 09 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20    ...Screen[i]:=' 
025F80:  27 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74    ';....END;...Set
025F90:  43 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 20 0D 0A    Cursor;...END ..
025FA0:  20 20 20 20 45 4E 44 20 53 63 72 6F 6C 6C 57 69        END ScrollWi
025FB0:  6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 50 52 4F    ndowDown;....PRO
025FC0:  43 45 44 55 52 45 20 4C 6F 61 64 54 65 72 6D 43    CEDURE LoadTermC
025FD0:  6F 64 65 28 46 3A 46 69 6C 65 4E 61 6D 65 29 3B    ode(F:FileName);
025FE0:  0D 0A 42 45 47 49 4E 0D 0A 09 28 2A 6E 6F 74 20    ..BEGIN...(*not 
025FF0:  69 6D 70 6C 65 6D 65 6E 74 65 64 20 69 6E 20 74    implemented in t
026000:  68 69 73 20 76 65 72 73 69 6F 6E 2A 29 0D 0A 09    his version*)...
026010:  45 4E 44 20 4C 6F 61 64 54 65 72 6D 43 6F 64 65    END LoadTermCode
026020:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 69    ;..PROCEDURE Cli
026030:  70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43 41    p(x1,y1,x2,y2:CA
026040:  52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D    RDINAL);..BEGIN.
026050:  0A 09 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D 65 6E    ..(*not implemen
026060:  74 65 64 20 69 6E 20 74 68 69 73 20 76 65 72 73    ted in this vers
026070:  69 6F 6E 2A 29 0D 0A 09 45 4E 44 20 43 6C 69 70    ion*)...END Clip
026080:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44 72    ;..PROCEDURE  Dr
026090:  61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C 79    awBox(x1,y1,x2,y
0260A0:  32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A    2:CARDINAL);....
0260B0:  28 2A 09 09 64 72 61 77 20 61 20 62 6F 78 20 66    (*..draw a box f
0260C0:  6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E 20 74    or a window on t
0260D0:  68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09 09 78    he screen......x
0260E0:  31 2C 79 31 20 20 69 73 20 74 68 65 20 6C 6F 77    1,y1  is the low
0260F0:  65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72 0D 0A    er left corner..
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 41 02 00 00 00 02     .....R. .A.....
026120:  20 00 46 02 00 00 00 02 20 00 42 02 00 00 00 02     .F..... .B.....
026130:  20 00 47 02 00 00 00 02 20 00 43 02 00 00 00 02     .G..... .C.....
026140:  20 00 48 02 00 00 00 02 20 00 44 02 00 00 00 02     .H..... .D.....
026150:  20 00 49 02 00 00 00 02 20 00 45 02 00 00 00 02     .I..... .E.....
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:  29 20 45 4E 44 3B 0D 0A 09 49 46 20 4D 61 74 63    ) END;...IF Matc
026210:  68 50 61 74 74 65 72 6E 28 45 78 70 31 2C 27 32    hPattern(Exp1,'2
026220:  2B 33 2A 32 27 29 3C 3E 4E 49 4C 20 54 48 45 4E    +3*2')<>NIL THEN
026230:  20 57 72 69 74 65 53 74 72 69 6E 67 28 27 32 3A     WriteString('2:
026240:  20 20 4F 4B 27 29 20 45 4E 44 3B 0D 0A 09 49 46      OK') END;...IF
026250:  20 4D 61 74 63 68 50 61 74 74 65 72 6E 28 45 78     MatchPattern(Ex
026260:  70 31 2C 27 32 2A 28 32 2B 33 29 27 29 3C 3E 4E    p1,'2*(2+3)')<>N
026270:  49 4C 20 54 48 45 4E 20 57 72 69 74 65 53 74 72    IL THEN WriteStr
026280:  69 6E 67 28 27 33 3A 20 20 4F 4B 27 29 20 45 4E    ing('3:  OK') EN
026290:  44 3B 0D 0A 09 49 46 20 4D 61 74 63 68 50 61 74    D;...IF MatchPat
0262A0:  74 65 72 6E 28 45 78 70 31 2C 27 32 2A 32 2A 33    tern(Exp1,'2*2*3
0262B0:  2A 34 27 29 3C 3E 4E 49 4C 20 54 48 45 4E 20 57    *4')<>NIL THEN W
0262C0:  72 69 74 65 53 74 72 69 6E 67 28 27 34 3A 20 20    riteString('4:  
0262D0:  4F 4B 27 29 20 45 4E 44 3B 0D 0A 09 49 46 20 4D    OK') END;...IF M
0262E0:  61 74 63 68 50 61 74 74 65 72 6E 28 45 78 70 31    atchPattern(Exp1
0262F0:  2C 27 32 2A 32 2B 33 2A 37 27 29 3C 3E 4E 49 4C    ,'2*2+3*7')<>NIL
026300:  20 54 48 45 4E 20 57 72 69 74 65 53 74 72 69 6E     THEN WriteStrin
026310:  67 28 27 35 3A 20 20 4F 4B 27 29 20 45 4E 44 3B    g('5:  OK') END;
026320:  0D 0A 09 49 46 20 4D 61 74 63 68 50 61 74 74 65    ...IF MatchPatte
026330:  72 6E 28 45 78 70 31 2C 27 32 2A 32 2B 33 2A 34    rn(Exp1,'2*2+3*4
026340:  2B 28 39 2B 38 29 27 29 3C 3E 4E 49 4C 20 54 48    +(9+8)')<>NIL TH
026350:  45 4E 20 57 72 69 74 65 53 74 72 69 6E 67 28 27    EN WriteString('
026360:  36 3A 20 20 4F 4B 27 29 20 45 4E 44 3B 0D 0A 09    6:  OK') END;...
026370:  49 46 20 4D 61 74 63 68 50 61 74 74 65 72 6E 28    IF MatchPattern(
026380:  45 78 70 31 2C 27 32 2B 2B 32 27 29 3C 3E 4E 49    Exp1,'2++2')<>NI
026390:  4C 20 54 48 45 4E 20 57 72 69 74 65 53 74 72 69    L THEN WriteStri
0263A0:  6E 67 28 27 37 3A 20 6E 6F 74 20 6F 6B 20 27 29    ng('7: not ok ')
0263B0:  20 45 4E 44 3B 0D 0A 09 45 4E 44 20 54 65 73 74     END;...END Test
0263C0:  2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0263D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0263E0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0263F0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
026400:  69 6E 65 50 6F 73 28 6D 6F 76 65 3A 49 4E 54 45    inePos(move:INTE
026410:  47 45 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 52    GER);..BEGIN...R
026420:  65 74 72 6C 69 6E 65 28 43 75 72 46 69 6C 65 50    etrline(CurFileP
026430:  74 72 5E 2C 4C 69 6E 65 4C 65 6E 2C 4C 69 6E 65    tr^,LineLen,Line
026440:  50 6F 73 2C 70 2C 6C 69 6E 65 73 6D 6F 76 65 64    Pos,p,linesmoved
026450:  2C 6D 6F 76 65 29 3B 0D 0A 09 45 4E 44 20 53 65    ,move);...END Se
026460:  74 4C 69 6E 65 50 6F 73 3B 0D 0A 50 52 4F 43 45    tLinePos;..PROCE
026470:  44 55 52 45 20 4D 61 72 6B 41 73 55 70 64 61 74    DURE MarkAsUpdat
026480:  65 64 3B 0D 0A 42 45 47 49 4E 0D 0A 09 55 70 64    ed;..BEGIN...Upd
026490:  61 74 65 64 5B 43 75 72 72 65 6E 74 46 69 6C 65    ated[CurrentFile
0264A0:  5D 3A 3D 54 52 55 45 0D 0A 09 45 4E 44 20 4D 61    ]:=TRUE...END Ma
0264B0:  72 6B 41 73 55 70 64 61 74 65 64 3B 0D 0A 50 52    rkAsUpdated;..PR
0264C0:  4F 43 45 44 55 52 45 20 52 65 73 65 74 50 6F 73    OCEDURE ResetPos
0264D0:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 6F 78    ;..BEGIN...Gotox
0264E0:  79 28 54 68 69 73 78 2C 54 68 69 73 79 29 3B 0D    y(Thisx,Thisy);.
0264F0:  0A 09 45 4E 44 20 52 65 73 65 74 50 6F 73 3B 0D    ..END ResetPos;.
026500:  0A 50 52 4F 43 45 44 55 52 45 20 43 6C 65 61 72    .PROCEDURE Clear
026510:  52 65 73 74 4F 66 4C 69 6E 65 3B 0D 0A 42 45 47    RestOfLine;..BEG
026520:  49 4E 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72    IN...ScreenContr
026530:  6F 6C 28 44 65 6C 45 6F 6C 29 3B 0D 0A 09 49 46    ol(DelEol);...IF
026540:  20 4E 4F 54 20 4D 61 64 65 43 68 61 6E 67 65 20     NOT MadeChange 
026550:  54 48 45 4E 0D 0A 09 09 46 4F 52 20 63 3A 3D 54    THEN....FOR c:=T
026560:  68 69 73 78 2B 31 20 54 4F 20 53 63 72 65 65 6E    hisx+1 TO Screen
026570:  57 69 64 74 68 20 44 4F 20 57 72 69 74 65 28 27    Width DO Write('
026580:  20 27 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B     ') END;....END;
026590:  0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 45    ...ResetPos;...E
0265A0:  4E 44 20 43 6C 65 61 72 52 65 73 74 4F 66 4C 69    ND ClearRestOfLi
0265B0:  6E 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 44    ne;..PROCEDURE D
0265C0:  65 6C 54 6F 45 4F 4C 3B 0D 0A 56 41 52 09 69 3A    elToEOL;..VAR.i:
0265D0:  43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E    CARDINAL;..BEGIN
0265E0:  0D 0A 09 4D 61 72 6B 41 73 55 70 64 61 74 65 64    ...MarkAsUpdated
0265F0:  3B 0D 0A 09 49 46 20 4C 69 6E 65 50 6F 73 3C 3D    ;...IF LinePos<=
026600:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026610:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026620:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026630:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026640:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026650:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026660:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026670:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026680:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026690:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0266A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0266B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0266C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0266D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0266E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0266F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0267A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0267B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0267C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0267D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0267E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0267F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026800:  4C 69 6E 65 4C 65 6E 20 54 48 45 4E 20 0D 0A 09    LineLen THEN ...
026810:  09 44 65 6C 43 68 61 72 73 28 43 75 72 46 69 6C    .DelChars(CurFil
026820:  65 50 74 72 5E 2C 4C 69 6E 65 4C 65 6E 2D 4C 69    ePtr^,LineLen-Li
026830:  6E 65 50 6F 73 29 20 0D 0A 09 09 45 4E 44 3B 0D    nePos) ....END;.
026840:  0A 09 4C 69 6E 65 4C 65 6E 3A 3D 4C 69 6E 65 50    ..LineLen:=LineP
026850:  6F 73 3B 0D 0A 09 43 6C 65 61 72 52 65 73 74 4F    os;...ClearRestO
026860:  66 4C 69 6E 65 3B 0D 0A 09 45 4E 44 20 44 65 6C    fLine;...END Del
026870:  54 6F 45 4F 4C 3B 0D 0A 56 41 52 09 0D 0A 09 62    ToEOL;..VAR....b
026880:  3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 50 52 4F 43 45    :BOOLEAN;..PROCE
026890:  44 55 52 45 20 52 65 44 69 73 70 6C 61 79 57 69    DURE ReDisplayWi
0268A0:  6E 64 6F 77 3B 0D 0A 42 45 47 49 4E 0D 0A 09 44    ndow;..BEGIN...D
0268B0:  69 73 70 6C 61 79 46 69 6C 65 28 43 75 72 46 69    isplayFile(CurFi
0268C0:  6C 65 50 74 72 5E 2C 43 75 72 72 65 6E 74 57 69    lePtr^,CurrentWi
0268D0:  6E 64 6F 77 2C 54 68 69 73 78 2C 54 68 69 73 79    ndow,Thisx,Thisy
0268E0:  29 3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A    );...ResetPos;..
0268F0:  09 63 75 72 78 5B 43 75 72 72 65 6E 74 57 69 6E    .curx[CurrentWin
026900:  64 6F 77 5D 3A 3D 54 68 69 73 78 3B 0D 0A 09 63    dow]:=Thisx;...c
026910:  75 72 79 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F    ury[CurrentWindo
026920:  77 5D 3A 3D 54 68 69 73 79 3B 0D 0A 09 52 65 44    w]:=Thisy;...ReD
026930:  72 61 77 6E 3A 3D 54 52 55 45 3B 0D 0A 09 45 4E    rawn:=TRUE;...EN
026940:  44 20 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F    D ReDisplayWindo
026950:  77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65    w;..PROCEDURE Re
026960:  44 69 73 70 6C 61 79 3B 0D 0A 42 45 47 49 4E 0D    Display;..BEGIN.
026970:  0A 09 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F    ..ReDisplayWindo
026980:  77 3B 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28    w;...SetLinePos(
026990:  30 29 3B 0D 0A 09 43 68 61 6E 67 65 50 6F 73 3B    0);...ChangePos;
0269A0:  0D 0A 09 45 4E 44 20 52 65 44 69 73 70 6C 61 79    ...END ReDisplay
0269B0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68 61    ;..PROCEDURE Cha
0269C0:  6E 67 65 4D 61 72 67 69 6E 28 49 6E 63 3A 49 4E    ngeMargin(Inc:IN
0269D0:  54 45 47 45 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A    TEGER);..BEGIN..
0269E0:  09 49 46 20 28 49 6E 63 3C 30 29 20 41 4E 44 20    .IF (Inc<0) AND 
0269F0:  20 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72     (CurrentLeftMar
026A00:  0D 0A 28 2A 09 54 68 69 73 20 69 73 20 61 20 76    ..(*.This is a v
026A10:  65 72 73 69 6F 6E 20 6F 66 20 65 64 69 74 63 6F    ersion of editco
026A20:  6E 74 20 66 6F 72 20 70 65 6F 70 6C 65 20 77 69    nt for people wi
026A30:  74 68 0D 0A 09 64 75 6D 62 20 74 65 72 6D 69 6E    th...dumb termin
026A40:  61 6C 73 2E 20 20 54 68 65 20 6F 6E 6C 79 20 66    als.  The only f
026A50:  61 63 69 6C 69 74 69 65 73 20 77 68 69 63 68 20    acilities which 
026A60:  74 68 69 73 20 76 65 72 73 69 6F 6E 0D 0A 09 6F    this version...o
026A70:  66 20 45 44 49 54 43 4F 4E 54 20 61 73 73 75 6D    f EDITCONT assum
026A80:  65 73 20 69 73 20 47 6F 74 6F 78 79 20 61 6E 64    es is Gotoxy and
026A90:  20 74 68 65 20 61 62 69 6C 69 74 79 20 74 6F 20     the ability to 
026AA0:  68 69 67 68 6C 69 67 68 74 0D 0A 09 69 6E 20 73    highlight...in s
026AB0:  6F 6D 65 20 77 61 79 20 2A 29 0D 0A 0D 0A 28 2A    ome way *)....(*
026AC0:  24 6C 2D 2A 29 0D 0A 49 4D 50 4C 45 4D 45 4E 54    $l-*)..IMPLEMENT
026AD0:  41 54 49 4F 4E 20 4D 4F 44 55 4C 45 20 45 64 69    ATION MODULE Edi
026AE0:  74 43 6F 6E 74 72 6F 6C 3B 0D 0A 0D 0A 28 2A 09    tControl;....(*.
026AF0:  45 64 69 74 6F 72 20 63 6F 6E 74 72 6F 6C 20 2D    Editor control -
026B00:  20 64 61 74 61 20 61 72 65 61 73 20 66 6F 72 20     data areas for 
026B10:  66 69 6C 65 20 61 6E 64 20 72 6F 75 74 69 6E 65    file and routine
026B20:  73 20 77 68 69 63 68 20 61 63 74 75 61 6C 6C 79    s which actually
026B30:  0D 0A 09 70 65 72 66 6F 72 6D 20 65 64 69 74 20    ...perform edit 
026B40:  66 75 6E 63 74 69 6F 6E 73 20 62 79 20 63 61 6C    functions by cal
026B50:  6C 69 6E 67 20 6D 61 6B 65 65 64 69 74 20 74 6F    ling makeedit to
026B60:  20 65 64 69 74 20 74 68 65 20 66 69 6C 65 20 61     edit the file a
026B70:  6E 64 0D 0A 09 65 64 69 74 64 69 73 70 20 74 6F    nd...editdisp to
026B80:  20 63 68 61 6E 67 65 20 74 68 65 20 73 63 72 65     change the scre
026B90:  65 6E 2A 29 0D 0A 0D 0A 46 52 4F 4D 20 4D 61 6B    en*)....FROM Mak
026BA0:  65 45 64 69 74 73 20 49 4D 50 4F 52 54 20 49 6E    eEdits IMPORT In
026BB0:  73 43 68 61 72 73 2C 44 65 6C 43 68 61 72 73 2C    sChars,DelChars,
026BC0:  52 65 74 72 6C 69 6E 65 2C 42 61 63 6B 4F 6E 65    Retrline,BackOne
026BD0:  43 68 61 72 2C 46 6F 72 77 61 72 64 4F 6E 65 43    Char,ForwardOneC
026BE0:  68 61 72 2C 0D 0A 09 09 47 65 74 43 75 72 72 65    har,....GetCurre
026BF0:  6E 74 43 68 61 72 2C 47 65 74 50 6F 73 69 74 69    ntChar,GetPositi
026C00:  67 69 6E 3C 43 41 52 44 49 4E 41 4C 28 2D 49 6E    gin<CARDINAL(-In
026C10:  63 29 29 20 54 48 45 4E 20 0D 0A 09 09 49 6E 63    c)) THEN ....Inc
026C20:  3A 3D 2D 49 4E 54 45 47 45 52 28 43 75 72 72 65    :=-INTEGER(Curre
026C30:  6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 20 0D 0A    ntLeftMargin) ..
026C40:  09 09 45 4E 44 3B 0D 0A 09 49 46 20 28 49 6E 63    ..END;...IF (Inc
026C50:  3E 30 29 20 41 4E 44 20 28 54 68 69 73 78 3C 43    >0) AND (Thisx<C
026C60:  41 52 44 49 4E 41 4C 28 49 6E 63 29 29 20 54 48    ARDINAL(Inc)) TH
026C70:  45 4E 20 49 6E 63 3A 3D 54 68 69 73 78 20 45 4E    EN Inc:=Thisx EN
026C80:  44 3B 0D 0A 09 43 75 72 72 65 6E 74 4C 65 66 74    D;...CurrentLeft
026C90:  4D 61 72 67 69 6E 3A 3D 49 4E 54 45 47 45 52 28    Margin:=INTEGER(
026CA0:  43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69    CurrentLeftMargi
026CB0:  6E 29 2B 49 6E 63 3B 0D 0A 09 54 68 69 73 78 3A    n)+Inc;...Thisx:
026CC0:  3D 49 4E 54 45 47 45 52 28 54 68 69 73 78 29 2D    =INTEGER(Thisx)-
026CD0:  49 6E 63 3B 0D 0A 09 63 75 72 78 5B 43 75 72 72    Inc;...curx[Curr
026CE0:  65 6E 74 57 69 6E 64 6F 77 5D 3A 3D 54 68 69 73    entWindow]:=This
026CF0:  78 3B 0D 0A 09 4C 65 66 74 4D 61 72 67 69 6E 5B    x;...LeftMargin[
026D00:  43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D    CurrentWindow]:=
026D10:  43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69    CurrentLeftMargi
026D20:  6E 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 57 69    n;...ReDisplayWi
026D30:  6E 64 6F 77 3B 0D 0A 09 52 65 73 65 74 50 6F 73    ndow;...ResetPos
026D40:  3B 0D 0A 09 45 4E 44 20 43 68 61 6E 67 65 4D 61    ;...END ChangeMa
026D50:  72 67 69 6E 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    rgin;....PROCEDU
026D60:  52 45 20 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 56    RE ChangePos;..V
026D70:  41 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    AR.i:CARDINAL;..
026D80:  42 45 47 49 4E 0D 0A 09 49 46 20 4C 69 6E 65 4C    BEGIN...IF LineL
026D90:  65 6E 3C 4C 69 6E 65 50 6F 73 20 54 48 45 4E 20    en<LinePos THEN 
026DA0:  0D 0A 09 09 4C 69 6E 65 50 6F 73 3A 3D 4C 69 6E    ....LinePos:=Lin
026DB0:  65 4C 65 6E 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    eLen;....END;...
026DC0:  54 68 69 73 78 3A 3D 30 3B 0D 0A 09 69 3A 3D 30    Thisx:=0;...i:=0
026DD0:  3B 09 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 49 4E 43    ;....LOOP....INC
026DE0:  28 69 29 3B 0D 0A 09 09 63 68 3A 3D 47 65 74 43    (i);....ch:=GetC
026DF0:  75 72 72 65 6E 74 43 68 61 72 28 43 75 72 46 69    urrentChar(CurFi
026E00:  6F 6E 2C 53 65 74 50 6F 73 69 74 69 6F 6E 2C 52    on,SetPosition,R
026E10:  65 61 64 4E 65 78 74 43 68 61 72 2C 46 69 6E 64    eadNextChar,Find
026E20:  53 74 72 69 6E 67 2C 0D 0A 09 09 4C 61 62 65 6C    String,....Label
026E30:  4F 70 3B 0D 0A 46 52 4F 4D 20 45 64 69 74 44 69    Op;..FROM EditDi
026E40:  73 70 6C 61 79 20 49 4D 50 4F 52 54 20 44 69 73    splay IMPORT Dis
026E50:  70 6C 61 79 46 69 6C 65 2C 45 72 72 6F 72 4D 65    playFile,ErrorMe
026E60:  73 73 61 67 65 2C 57 69 6E 64 6F 77 73 2C 4C 69    ssage,Windows,Li
026E70:  6E 65 73 50 65 72 57 69 6E 64 6F 77 3B 0D 0A 46    nesPerWindow;..F
026E80:  52 4F 4D 20 53 63 72 65 65 6E 49 4F 20 49 4D 50    ROM ScreenIO IMP
026E90:  4F 52 54 20 45 64 69 74 73 2C 44 65 6C 43 68 61    ORT Edits,DelCha
026EA0:  72 2C 44 65 6C 4C 69 6E 65 2C 49 6E 73 43 68 61    r,DelLine,InsCha
026EB0:  72 2C 49 6E 73 4C 69 6E 65 2C 44 65 6C 45 6F 6C    r,InsLine,DelEol
026EC0:  2C 4D 6F 76 65 55 70 2C 0D 0A 09 09 09 4D 6F 76    ,MoveUp,.....Mov
026ED0:  65 44 6F 77 6E 2C 4D 6F 76 65 4C 65 66 74 2C 4D    eDown,MoveLeft,M
026EE0:  6F 76 65 52 69 67 68 74 2C 47 6F 74 6F 78 79 2C    oveRight,Gotoxy,
026EF0:  43 6C 65 61 72 53 63 72 65 65 6E 2C 0D 0A 09 09    ClearScreen,....
026F00:  09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 2C 0D    .ScreenControl,.
026F10:  0A 09 09 09 53 63 72 65 65 6E 57 69 64 74 68 2C    ....ScreenWidth,
026F20:  53 63 72 65 65 6E 44 65 70 74 68 2C 4D 61 64 65    ScreenDepth,Made
026F30:  43 68 61 6E 67 65 3B 0D 0A 46 52 4F 4D 20 49 6E    Change;..FROM In
026F40:  74 4C 6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41    tLogic IMPORT IA
026F50:  4E 44 3B 09 0D 0A 46 52 4F 4D 09 53 59 53 54 45    ND;...FROM.SYSTE
026F60:  4D 20 49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 43    M IMPORT ADR;..C
026F70:  4F 4E 53 54 09 43 52 3D 30 64 78 3B 0D 0A 09 54    ONST.CR=0dx;...T
026F80:  41 42 3D 30 39 78 3B 0D 0A 09 4C 46 3D 30 61 78    AB=09x;...LF=0ax
026F90:  3B 0D 0A 09 45 4F 46 3D 31 61 78 3B 0D 0A 28 2A    ;...EOF=1ax;..(*
026FA0:  09 41 20 72 65 6D 61 72 6B 20 6F 6E 20 74 68 65    .A remark on the
026FB0:  20 75 73 65 20 6F 66 20 4C 69 6E 65 50 6F 73 20     use of LinePos 
026FC0:  61 6E 64 20 63 75 72 78 0D 0A 0D 0A 09 4C 69 6E    and curx.....Lin
026FD0:  65 50 6F 73 20 61 6C 77 61 79 73 20 70 6F 69 6E    ePos always poin
026FE0:  74 73 20 74 6F 20 74 68 65 20 6E 75 6D 62 65 72    ts to the number
026FF0:  20 6F 66 20 74 68 65 20 63 68 61 72 61 63 74 65     of the characte
027000:  6C 65 50 74 72 5E 29 3B 0D 0A 09 09 49 46 20 28    lePtr^);....IF (
027010:  69 3E 43 41 52 44 49 4E 41 4C 28 4C 69 6E 65 50    i>CARDINAL(LineP
027020:  6F 73 29 29 20 4F 52 20 28 63 68 3D 45 4F 46 29    os)) OR (ch=EOF)
027030:  20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D     THEN EXIT END;.
027040:  0A 09 09 49 46 20 63 68 3D 54 41 42 20 54 48 45    ...IF ch=TAB THE
027050:  4E 20 54 68 69 73 78 3A 3D 49 41 4E 44 28 54 68    N Thisx:=IAND(Th
027060:  69 73 78 2B 38 2C 30 66 66 66 38 68 29 20 0D 0A    isx+8,0fff8h) ..
027070:  09 09 45 4C 53 45 20 20 49 4E 43 28 54 68 69 73    ..ELSE  INC(This
027080:  78 29 20 45 4E 44 3B 0D 0A 09 09 62 3A 3D 46 6F    x) END;....b:=Fo
027090:  72 77 61 72 64 4F 6E 65 43 68 61 72 28 43 75 72    rwardOneChar(Cur
0270A0:  46 69 6C 65 50 74 72 5E 29 20 0D 0A 09 09 45 4E    FilePtr^) ....EN
0270B0:  44 3B 0D 0A 09 69 3A 3D 54 68 69 73 78 3B 0D 0A    D;...i:=Thisx;..
0270C0:  09 57 48 49 4C 45 20 54 68 69 73 78 3E 3D 28 53    .WHILE Thisx>=(S
0270D0:  63 72 65 65 6E 57 69 64 74 68 2B 43 75 72 72 65    creenWidth+Curre
0270E0:  6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 20 44 4F    ntLeftMargin) DO
0270F0:  0D 0A 09 09 43 68 61 6E 67 65 4D 61 72 67 69 6E    ....ChangeMargin
027100:  28 33 32 29 3B 0D 0A 09 09 54 68 69 73 78 3A 3D    (32);....Thisx:=
027110:  69 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 48 49    i;....END;...WHI
027120:  4C 45 20 54 68 69 73 78 3C 43 75 72 72 65 6E 74    LE Thisx<Current
027130:  4C 65 66 74 4D 61 72 67 69 6E 20 44 4F 0D 0A 09    LeftMargin DO...
027140:  09 43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 33    .ChangeMargin(-3
027150:  32 29 3B 0D 0A 09 09 54 68 69 73 78 3A 3D 69 3B    2);....Thisx:=i;
027160:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 54 68 69 73 78    ....END;...Thisx
027170:  3A 3D 54 68 69 73 78 2D 43 75 72 72 65 6E 74 4C    :=Thisx-CurrentL
027180:  65 66 74 4D 61 72 67 69 6E 3B 0D 0A 09 63 75 72    eftMargin;...cur
027190:  78 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D    x[CurrentWindow]
0271A0:  3A 3D 54 68 69 73 78 3B 0D 0A 09 52 65 73 65 74    :=Thisx;...Reset
0271B0:  50 6F 73 3B 0D 0A 09 45 4E 44 20 43 68 61 6E 67    Pos;...END Chang
0271C0:  65 50 6F 73 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    ePos;....PROCEDU
0271D0:  52 45 20 4C 69 6E 65 4D 6F 76 65 28 62 79 3A 49    RE LineMove(by:I
0271E0:  4E 54 45 47 45 52 29 3B 0D 0A 56 41 52 09 69 3A    NTEGER);..VAR.i:
0271F0:  49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E 0D    INTEGER;..BEGIN.
027200:  72 20 77 69 74 68 69 6E 20 74 68 65 0D 0A 09 74    r within the...t
027210:  65 78 74 20 6C 69 6E 65 2E 20 49 74 20 6E 65 65    ext line. It nee
027220:  64 20 6E 6F 74 20 62 65 20 74 68 65 20 73 61 6D    d not be the sam
027230:  65 20 61 73 20 74 68 65 20 70 6F 73 69 74 69 6F    e as the positio
027240:  6E 20 6F 6E 20 74 68 65 0D 0A 09 73 63 72 65 65    n on the...scree
027250:  6E 20 62 65 63 61 75 73 65 20 6F 66 20 74 68 65    n because of the
027260:  20 75 73 65 20 6F 66 20 74 61 62 20 63 68 61 72     use of tab char
027270:  61 63 74 65 72 73 2A 29 0D 0A 54 59 50 45 09 50    acters*)..TYPE.P
027280:  45 64 69 74 46 69 6C 65 3D 50 4F 49 4E 54 45 52    EditFile=POINTER
027290:  20 54 4F 20 45 64 69 74 46 69 6C 65 3B 0D 0A 56     TO EditFile;..V
0272A0:  41 52 09 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 09    AR.i:INTEGER;...
0272B0:  63 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 53 74    c:CARDINAL;...St
0272C0:  61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F    artofWindow,Endo
0272D0:  66 57 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C    fWindow:CARDINAL
0272E0:  3B 0D 0A 09 63 68 3A 43 48 41 52 3B 0D 0A 09 43    ;...ch:CHAR;...C
0272F0:  75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 6E    urrentLeftMargin
027300:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 46 69 6C    :CARDINAL;...Fil
027310:  65 4C 69 6D 69 74 3A 42 4F 4F 4C 45 41 4E 3B 0D    eLimit:BOOLEAN;.
027320:  0A 09 52 65 44 72 61 77 6E 3A 42 4F 4F 4C 45 41    ..ReDrawn:BOOLEA
027330:  4E 3B 0D 0A 09 43 75 72 46 69 6C 65 50 74 72 3A    N;...CurFilePtr:
027340:  50 45 64 69 74 46 69 6C 65 3B 0D 0A 50 52 4F 43    PEditFile;..PROC
027350:  45 44 55 52 45 20 43 68 61 6E 67 65 50 6F 73 3B    EDURE ChangePos;
027360:  46 4F 52 57 41 52 44 3B 0D 0A 50 52 4F 43 45 44    FORWARD;..PROCED
027370:  55 52 45 20 44 6F 53 63 72 65 65 6E 43 68 61 6E    URE DoScreenChan
027380:  67 65 28 43 6F 64 65 3A 45 64 69 74 73 29 3B 0D    ge(Code:Edits);.
027390:  0A 42 45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 43    .BEGIN...ScreenC
0273A0:  6F 6E 74 72 6F 6C 28 43 6F 64 65 29 3B 0D 0A 09    ontrol(Code);...
0273B0:  45 4E 44 20 44 6F 53 63 72 65 65 6E 43 68 61 6E    END DoScreenChan
0273C0:  67 65 3B 0D 0A 0D 0A 0D 0A 56 41 52 09 6C 69 6E    ge;......VAR.lin
0273D0:  65 73 6D 6F 76 65 64 3A 49 4E 54 45 47 45 52 3B    esmoved:INTEGER;
0273E0:  0D 0A 09 70 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A    ...p:Position;..
0273F0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 4C    ..PROCEDURE SetL
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 41 02 00 00 00 02    !.....R.!.A.....
027420:  21 00 46 02 00 00 00 02 21 00 42 02 00 00 00 02    !.F.....!.B.....
027430:  21 00 47 02 00 00 00 02 21 00 43 02 00 00 00 02    !.G.....!.C.....
027440:  21 00 48 02 00 00 00 02 21 00 44 02 00 00 00 02    !.H.....!.D.....
027450:  21 00 49 02 00 00 00 02 21 00 45 02 00 00 00 02    !.I.....!.E.....
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:  0A 09 52 65 44 72 61 77 6E 3A 3D 46 41 4C 53 45    ..ReDrawn:=FALSE
027510:  3B 0D 0A 09 69 3A 3D 4C 69 6E 65 50 6F 73 3B 0D    ;...i:=LinePos;.
027520:  0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 62 79 29    ..SetLinePos(by)
027530:  3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D 69 3B 0D    ;...LinePos:=i;.
027540:  0A 09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 28 2A    ..ChangePos;..(*
027550:  09 49 46 20 41 42 53 28 62 79 29 3E 31 20 54 48    .IF ABS(by)>1 TH
027560:  45 4E 0D 0A 09 09 52 65 44 69 73 70 6C 61 79 57    EN....ReDisplayW
027570:  69 6E 64 6F 77 3B 0D 0A 09 09 45 4E 44 3B 2A 29    indow;....END;*)
027580:  0D 0A 09 45 4E 44 20 4C 69 6E 65 4D 6F 76 65 3B    ...END LineMove;
027590:  0D 0A 56 41 52 09 70 77 3A 50 6F 73 69 74 69 6F    ..VAR.pw:Positio
0275A0:  6E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 57 72    n;..PROCEDURE Wr
0275B0:  69 74 65 50 61 72 74 4C 69 6E 65 28 63 3A 43 41    itePartLine(c:CA
0275C0:  52 44 49 4E 41 4C 29 3B 0D 0A 56 41 52 09 53 61    RDINAL);..VAR.Sa
0275D0:  76 65 78 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42    vex:CARDINAL;..B
0275E0:  45 47 49 4E 0D 0A 09 47 65 74 50 6F 73 69 74 69    EGIN...GetPositi
0275F0:  6F 6E 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 70    on(CurFilePtr^,p
027600:  77 29 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 52 65    w);...LOOP....Re
027610:  61 64 4E 65 78 74 43 68 61 72 28 70 77 2C 63 68    adNextChar(pw,ch
027620:  29 3B 0D 0A 09 09 49 46 20 28 63 68 3D 30 64 78    );....IF (ch=0dx
027630:  29 20 4F 52 20 28 63 68 3D 31 61 78 29 20 4F 52    ) OR (ch=1ax) OR
027640:  20 28 63 68 3D 30 61 78 29 20 54 48 45 4E 20 45     (ch=0ax) THEN E
027650:  58 49 54 20 45 4E 44 3B 0D 0A 09 09 49 46 20 63    XIT END;....IF c
027660:  3E 3D 28 53 63 72 65 65 6E 57 69 64 74 68 2B 43    >=(ScreenWidth+C
027670:  75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 6E    urrentLeftMargin
027680:  29 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B    ) THEN EXIT END;
027690:  0D 0A 09 09 49 46 20 63 68 3D 54 41 42 20 54 48    ....IF ch=TAB TH
0276A0:  45 4E 20 0D 0A 09 09 09 52 45 50 45 41 54 0D 0A    EN .....REPEAT..
0276B0:  09 09 09 09 49 46 20 63 3E 43 75 72 72 65 6E 74    ....IF c>Current
0276C0:  4C 65 66 74 4D 61 72 67 69 6E 20 54 48 45 4E 20    LeftMargin THEN 
0276D0:  57 72 69 74 65 28 27 20 27 29 20 45 4E 44 3B 20    Write(' ') END; 
0276E0:  0D 0A 09 09 09 09 49 4E 43 28 63 29 3B 0D 0A 09    ......INC(c);...
0276F0:  09 09 09 55 4E 54 49 4C 20 49 41 4E 44 28 63 2C    ...UNTIL IAND(c,
027700:  76 65 28 2D 31 29 3B 0D 0A 09 09 09 52 65 73 65    ve(-1);.....Rese
027710:  74 50 6F 73 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A    tPos;.....END;..
027720:  09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 53 63 72    ..END;...END Scr
027730:  6F 6C 6C 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52    ollUp;..PROCEDUR
027740:  45 20 53 63 72 6F 6C 6C 44 6F 77 6E 3B 0D 0A 42    E ScrollDown;..B
027750:  45 47 49 4E 0D 0A 09 53 63 72 6F 6C 6C 54 65 78    EGIN...ScrollTex
027760:  74 28 31 29 3B 0D 0A 09 49 46 20 4D 6F 76 65 64    t(1);...IF Moved
027770:  4F 4B 20 54 48 45 4E 0D 0A 09 09 49 46 20 54 68    OK THEN....IF Th
027780:  69 73 79 3E 53 74 61 72 74 6F 66 57 69 6E 64 6F    isy>StartofWindo
027790:  77 20 54 48 45 4E 20 0D 0A 09 09 09 44 45 43 28    w THEN .....DEC(
0277A0:  54 68 69 73 79 29 3B 0D 0A 09 09 45 4C 53 45 0D    Thisy);....ELSE.
0277B0:  0A 09 09 09 4C 69 6E 65 4D 6F 76 65 28 31 29 3B    ....LineMove(1);
0277C0:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44    .....END;....END
0277D0:  3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09    ;...ResetPos;...
0277E0:  45 4E 44 20 53 63 72 6F 6C 6C 44 6F 77 6E 3B 0D    END ScrollDown;.
0277F0:  0A 50 52 4F 43 45 44 55 52 45 20 4C 65 66 74 3B    .PROCEDURE Left;
027800:  0D 0A 56 41 52 09 63 68 3A 43 48 41 52 3B 0D 0A    ..VAR.ch:CHAR;..
027810:  09 53 61 76 65 4C 69 6E 65 4C 65 6E 3A 43 41 52    .SaveLineLen:CAR
027820:  44 49 4E 41 4C 3B 0D 0A 09 70 3A 50 6F 73 69 74    DINAL;...p:Posit
027830:  69 6F 6E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4D 6F    ion;..BEGIN...Mo
027840:  76 65 64 4F 4B 3A 3D 54 52 55 45 3B 0D 0A 09 52    vedOK:=TRUE;...R
027850:  65 44 72 61 77 6E 3A 3D 46 41 4C 53 45 3B 0D 0A    eDrawn:=FALSE;..
027860:  09 53 61 76 65 4C 69 6E 65 4C 65 6E 3A 3D 4C 69    .SaveLineLen:=Li
027870:  6E 65 4C 65 6E 3B 0D 0A 09 47 65 74 50 6F 73 69    neLen;...GetPosi
027880:  74 69 6F 6E 28 43 75 72 46 69 6C 65 50 74 72 5E    tion(CurFilePtr^
027890:  2C 70 29 3B 0D 0A 09 49 46 20 4C 69 6E 65 50 6F    ,p);...IF LinePo
0278A0:  73 3E 30 20 54 48 45 4E 0D 0A 09 09 62 3A 3D 42    s>0 THEN....b:=B
0278B0:  61 63 6B 4F 6E 65 43 68 61 72 28 43 75 72 46 69    ackOneChar(CurFi
0278C0:  6C 65 50 74 72 5E 29 3B 0D 0A 09 09 63 68 3A 3D    lePtr^);....ch:=
0278D0:  47 65 74 43 75 72 72 65 6E 74 43 68 61 72 28 43    GetCurrentChar(C
0278E0:  75 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 09    urFilePtr^);....
0278F0:  49 46 20 28 43 75 72 72 65 6E 74 4C 65 66 74 4D    IF (CurrentLeftM
027900:  37 29 3D 31 3B 0D 0A 09 09 45 4C 53 45 0D 0A 09    7)=1;....ELSE...
027910:  09 09 49 46 20 63 3E 43 75 72 72 65 6E 74 4C 65    ..IF c>CurrentLe
027920:  66 74 4D 61 72 67 69 6E 20 54 48 45 4E 20 57 72    ftMargin THEN Wr
027930:  69 74 65 28 63 68 29 20 45 4E 44 3B 0D 0A 09 09    ite(ch) END;....
027940:  09 49 4E 43 28 63 29 3B 0D 0A 09 09 09 45 4E 44    .INC(c);.....END
027950:  3B 0D 0A 09 09 45 4E 44 28 2A 4C 4F 4F 50 2A 29    ;....END(*LOOP*)
027960:  3B 0D 0A 09 53 61 76 65 78 3A 3D 54 68 69 73 78    ;...Savex:=Thisx
027970:  3B 0D 0A 09 49 46 20 63 3C 43 75 72 72 65 6E 74    ;...IF c<Current
027980:  4C 65 66 74 4D 61 72 67 69 6E 20 54 48 45 4E 20    LeftMargin THEN 
027990:  54 68 69 73 78 3A 3D 30 3B 0D 0A 09 45 4C 53 45    Thisx:=0;...ELSE
0279A0:  20 54 68 69 73 78 3A 3D 63 2D 43 75 72 72 65 6E     Thisx:=c-Curren
0279B0:  74 4C 65 66 74 4D 61 72 67 69 6E 20 45 4E 44 3B    tLeftMargin END;
0279C0:  0D 0A 09 43 6C 65 61 72 52 65 73 74 4F 66 4C 69    ...ClearRestOfLi
0279D0:  6E 65 3B 0D 0A 09 54 68 69 73 78 3A 3D 53 61 76    ne;...Thisx:=Sav
0279E0:  65 78 3B 0D 0A 09 45 4E 44 20 57 72 69 74 65 50    ex;...END WriteP
0279F0:  61 72 74 4C 69 6E 65 3B 0D 0A 50 52 4F 43 45 44    artLine;..PROCED
027A00:  55 52 45 20 57 72 69 74 65 4C 69 6E 65 3B 0D 0A    URE WriteLine;..
027A10:  42 45 47 49 4E 0D 0A 09 57 72 69 74 65 50 61 72    BEGIN...WritePar
027A20:  74 4C 69 6E 65 28 31 29 3B 0D 0A 09 45 4E 44 20    tLine(1);...END 
027A30:  57 72 69 74 65 4C 69 6E 65 3B 0D 0A 50 52 4F 43    WriteLine;..PROC
027A40:  45 44 55 52 45 20 53 63 72 6F 6C 6C 57 69 6E 64    EDURE ScrollWind
027A50:  6F 77 28 53 74 61 72 74 2C 45 6E 64 3A 43 41 52    ow(Start,End:CAR
027A60:  44 49 4E 41 4C 3B 42 79 3A 49 4E 54 45 47 45 52    DINAL;By:INTEGER
027A70:  29 3B 0D 0A 28 2A 09 53 63 72 6F 6C 6C 20 74 68    );..(*.Scroll th
027A80:  65 20 77 69 6E 64 6F 77 20 62 79 20 72 65 64 69    e window by redi
027A90:  73 70 6C 61 79 69 6E 67 20 61 6C 6C 20 6F 72 20    splaying all or 
027AA0:  70 61 72 74 20 6F 66 20 69 74 0D 0A 0D 0A 09 53    part of it.....S
027AB0:  74 61 72 74 20 61 6E 64 20 45 6E 64 20 67 69 76    tart and End giv
027AC0:  65 20 61 63 74 75 61 6C 20 73 63 72 65 65 6E 20    e actual screen 
027AD0:  70 6F 69 73 74 69 6F 6E 73 20 28 69 6E 20 79 29    poistions (in y)
027AE0:  20 66 6F 72 0D 0A 09 74 68 65 20 74 6F 70 20 61     for...the top a
027AF0:  6E 64 20 62 6F 74 74 6F 6D 20 6F 66 20 74 68 65    nd bottom of the
027B00:  61 72 67 69 6E 3E 30 29 20 41 4E 44 20 28 54 68    argin>0) AND (Th
027B10:  69 73 78 3D 30 29 20 54 48 45 4E 0D 0A 09 09 09    isx=0) THEN.....
027B20:  43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 33 32    ChangeMargin(-32
027B30:  29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 44    );.....END;....D
027B40:  45 43 28 4C 69 6E 65 50 6F 73 29 3B 0D 0A 09 09    EC(LinePos);....
027B50:  49 46 20 4E 4F 54 20 52 65 44 72 61 77 6E 20 54    IF NOT ReDrawn T
027B60:  48 45 4E 0D 0A 09 09 09 49 46 20 63 68 3C 3E 54    HEN.....IF ch<>T
027B70:  41 42 20 54 48 45 4E 0D 0A 09 09 09 09 44 45 43    AB THEN......DEC
027B80:  28 54 68 69 73 78 29 3B 0D 0A 09 09 09 09 52 65    (Thisx);......Re
027B90:  73 65 74 50 6F 73 3B 0D 0A 09 09 09 45 4C 53 45    setPos;.....ELSE
027BA0:  0D 0A 09 09 09 09 4C 69 6E 65 4D 6F 76 65 28 30    ......LineMove(0
027BB0:  29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09    );......END;....
027BC0:  09 45 4E 44 3B 0D 0A 0D 0A 09 45 4C 53 45 0D 0A    .END;.....ELSE..
027BD0:  09 09 54 68 69 73 78 3A 3D 31 30 32 33 3B 0D 0A    ..Thisx:=1023;..
027BE0:  09 09 4C 69 6E 65 50 6F 73 3A 3D 31 30 32 33 3B    ..LinePos:=1023;
027BF0:  0D 0A 09 09 55 70 3B 0D 0A 09 09 49 46 20 4E 4F    ....Up;....IF NO
027C00:  54 20 4D 6F 76 65 64 4F 4B 20 54 48 45 4E 0D 0A    T MovedOK THEN..
027C10:  09 09 09 4C 69 6E 65 50 6F 73 3A 3D 30 3B 0D 0A    ...LinePos:=0;..
027C20:  09 09 09 4C 69 6E 65 4C 65 6E 3A 3D 53 61 76 65    ...LineLen:=Save
027C30:  4C 69 6E 65 4C 65 6E 3B 0D 0A 09 09 09 53 65 74    LineLen;.....Set
027C40:  50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69 6C 65    Position(CurFile
027C50:  50 74 72 5E 2C 70 29 3B 0D 0A 09 09 09 54 68 69    Ptr^,p);.....Thi
027C60:  73 78 3A 3D 30 3B 0D 0A 09 09 09 52 65 73 65 74    sx:=0;.....Reset
027C70:  50 6F 73 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09    Pos;.....END;...
027C80:  09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4C 65 66 74    .END;...END Left
027C90:  3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 52    ;....PROCEDURE R
027CA0:  69 67 68 74 3B 0D 0A 56 41 52 09 63 68 3A 43 48    ight;..VAR.ch:CH
027CB0:  41 52 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 4C    AR;...i:CARDINAL
027CC0:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 63 68 3A 3D 47    ;..BEGIN...ch:=G
027CD0:  65 74 43 75 72 72 65 6E 74 43 68 61 72 28 43 75    etCurrentChar(Cu
027CE0:  72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 49 46    rFilePtr^);...IF
027CF0:  20 63 68 3D 31 61 78 20 28 2A 6F 6E 20 45 4F 46     ch=1ax (*on EOF
027D00:  20 73 63 72 6F 6C 6C 2A 29 0D 0A 56 41 52 09 0D     scroll*)..VAR..
027D10:  0A 09 70 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A 09    ..p:Position;...
027D20:  69 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49    i:INTEGER;..BEGI
027D30:  4E 0D 0A 09 47 65 74 50 6F 73 69 74 69 6F 6E 28    N...GetPosition(
027D40:  43 75 72 46 69 6C 65 50 74 72 5E 2C 70 29 3B 0D    CurFilePtr^,p);.
027D50:  0A 09 69 3A 3D 49 4E 54 45 47 45 52 28 53 74 61    ..i:=INTEGER(Sta
027D60:  72 74 29 2D 49 4E 54 45 47 45 52 28 54 68 69 73    rt)-INTEGER(This
027D70:  79 29 2B 42 79 3B 0D 0A 09 53 65 74 4C 69 6E 65    y)+By;...SetLine
027D80:  50 6F 73 28 69 29 3B 0D 0A 09 4D 6F 76 65 64 4F    Pos(i);...MovedO
027D90:  4B 3A 3D 46 41 4C 53 45 3B 0D 0A 09 49 46 20 6C    K:=FALSE;...IF l
027DA0:  69 6E 65 73 6D 6F 76 65 64 3C 3E 69 20 54 48 45    inesmoved<>i THE
027DB0:  4E 20 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09    N RETURN END;...
027DC0:  4D 6F 76 65 64 4F 4B 3A 3D 54 52 55 45 3B 0D 0A    MovedOK:=TRUE;..
027DD0:  09 69 3A 3D 53 74 61 72 74 3B 0D 0A 09 4C 4F 4F    .i:=Start;...LOO
027DE0:  50 0D 0A 09 09 49 46 20 43 41 52 44 49 4E 41 4C    P....IF CARDINAL
027DF0:  28 69 29 3E 45 6E 64 20 54 48 45 4E 20 45 58 49    (i)>End THEN EXI
027E00:  54 20 45 4E 44 3B 0D 0A 09 09 47 6F 74 6F 78 79    T END;....Gotoxy
027E10:  28 30 2C 69 29 3B 0D 0A 09 09 57 72 69 74 65 4C    (0,i);....WriteL
027E20:  69 6E 65 3B 0D 0A 09 09 53 65 74 4C 69 6E 65 50    ine;....SetLineP
027E30:  6F 73 28 31 29 0D 0A 09 09 49 46 20 6C 69 6E 65    os(1)....IF line
027E40:  73 6D 6F 76 65 64 3C 3E 31 20 54 48 45 4E 20 45    smoved<>1 THEN E
027E50:  58 49 54 20 45 4E 44 3B 09 0D 0A 09 09 49 4E 43    XIT END;.....INC
027E60:  28 69 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53    (i);....END;...S
027E70:  65 74 50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69    etPosition(CurFi
027E80:  6C 65 50 74 72 5E 2C 70 29 3B 0D 0A 09 53 65 74    lePtr^,p);...Set
027E90:  4C 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 43 68    LinePos(0);...Ch
027EA0:  61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E 44 20 53    angePos;...END S
027EB0:  63 72 6F 6C 6C 57 69 6E 64 6F 77 3B 0D 0A 50 52    crollWindow;..PR
027EC0:  4F 43 45 44 55 52 45 20 52 65 6D 6F 76 65 4C 69    OCEDURE RemoveLi
027ED0:  6E 65 3B 0D 0A 0D 0A 28 2A 09 52 65 6D 6F 76 65    ne;....(*.Remove
027EE0:  20 61 20 6C 69 6E 65 20 66 72 6F 6D 20 74 68 65     a line from the
027EF0:  20 73 63 72 65 65 6E 20 61 6E 64 20 62 72 69 6E     screen and brin
027F00:  20 63 68 61 72 2A 29 20 54 48 45 4E 20 52 45 54     char*) THEN RET
027F10:  55 52 4E 20 45 4E 44 3B 0D 0A 09 62 3A 3D 46 6F    URN END;...b:=Fo
027F20:  72 77 61 72 64 4F 6E 65 43 68 61 72 28 43 75 72    rwardOneChar(Cur
027F30:  46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 49 46 20    FilePtr^);...IF 
027F40:  4C 69 6E 65 50 6F 73 3E 3D 4C 69 6E 65 4C 65 6E    LinePos>=LineLen
027F50:  20 54 48 45 4E 0D 0A 09 09 54 68 69 73 78 3A 3D     THEN....Thisx:=
027F60:  30 3B 0D 0A 09 09 4C 69 6E 65 50 6F 73 3A 3D 30    0;....LinePos:=0
027F70:  3B 0D 0A 09 09 62 3A 3D 42 61 63 6B 4F 6E 65 43    ;....b:=BackOneC
027F80:  68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29    har(CurFilePtr^)
027F90:  3B 0D 0A 09 09 44 6F 77 6E 3B 0D 0A 0D 0A 09 45    ;....Down;.....E
027FA0:  4C 53 45 0D 0A 0D 0A 09 09 49 46 20 63 68 3D 54    LSE......IF ch=T
027FB0:  41 42 20 54 48 45 4E 20 69 3A 3D 39 20 45 4C 53    AB THEN i:=9 ELS
027FC0:  45 20 69 3A 3D 31 20 45 4E 44 3B 0D 0A 09 09 49    E i:=1 END;....I
027FD0:  46 20 28 54 68 69 73 78 2B 69 29 3E 3D 28 53 63    F (Thisx+i)>=(Sc
027FE0:  72 65 65 6E 57 69 64 74 68 2D 31 29 20 54 48 45    reenWidth-1) THE
027FF0:  4E 0D 0A 09 09 09 43 68 61 6E 67 65 4D 61 72 67    N.....ChangeMarg
028000:  69 6E 28 33 32 29 3B 0D 0A 09 09 09 45 4E 44 3B    in(32);.....END;
028010:  0D 0A 09 09 49 4E 43 28 4C 69 6E 65 50 6F 73 29    ....INC(LinePos)
028020:  3B 0D 0A 09 09 49 46 20 63 68 3C 3E 54 41 42 20    ;....IF ch<>TAB 
028030:  54 48 45 4E 0D 0A 09 09 09 49 4E 43 28 54 68 69    THEN.....INC(Thi
028040:  73 78 29 3B 0D 0A 09 09 09 52 65 73 65 74 50 6F    sx);.....ResetPo
028050:  73 3B 0D 0A 09 09 45 4C 53 45 0D 0A 0D 0A 09 09    s;....ELSE......
028060:  09 28 2A 69 66 20 6D 6F 76 65 73 20 6F 76 65 72    .(*if moves over
028070:  20 74 61 62 73 20 61 72 65 20 73 6C 6F 77 2C 20     tabs are slow, 
028080:  72 65 70 6C 61 63 65 20 74 68 65 0D 0A 09 09 09    replace the.....
028090:  20 20 72 65 70 65 61 74 65 64 20 6D 6F 76 65 73      repeated moves
0280A0:  20 72 69 67 68 74 20 62 79 20 61 20 67 6F 74 6F     right by a goto
0280B0:  78 79 2A 29 0D 0A 09 09 09 54 68 69 73 78 3A 3D    xy*).....Thisx:=
0280C0:  49 41 4E 44 28 54 68 69 73 78 2B 38 2C 30 66 66    IAND(Thisx+8,0ff
0280D0:  66 38 68 29 3B 0D 0A 09 09 09 52 65 73 65 74 50    f8h);.....ResetP
0280E0:  6F 73 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    os;.....END;....
0280F0:  45 4E 44 3B 0D 0A 09 45 4E 44 20 52 69 67 68 74    END;...END Right
028100:  67 20 61 6E 6F 74 68 65 72 20 6C 69 6E 65 20 75    g another line u
028110:  70 20 61 74 20 74 68 65 20 62 6F 74 74 6F 6D 0D    p at the bottom.
028120:  0A 0D 0A 09 54 68 69 73 79 20 67 69 76 65 73 20    ....Thisy gives 
028130:  6C 69 6E 65 20 74 6F 20 72 65 6D 6F 76 65 2A 29    line to remove*)
028140:  0D 0A 56 41 52 09 70 3A 50 6F 73 69 74 69 6F 6E    ..VAR.p:Position
028150:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 6F 78    ;..BEGIN...Gotox
028160:  79 28 30 2C 54 68 69 73 79 29 3B 0D 0A 09 53 63    y(0,Thisy);...Sc
028170:  72 6F 6C 6C 57 69 6E 64 6F 77 28 54 68 69 73 79    rollWindow(Thisy
028180:  2C 45 6E 64 6F 66 57 69 6E 64 6F 77 2C 31 29 3B    ,EndofWindow,1);
028190:  0D 0A 09 69 3A 3D 45 6E 64 6F 66 57 69 6E 64 6F    ...i:=EndofWindo
0281A0:  77 2D 54 68 69 73 79 2B 31 3B 0D 0A 09 47 65 74    w-Thisy+1;...Get
0281B0:  50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69 6C 65    Position(CurFile
0281C0:  50 74 72 5E 2C 70 29 3B 0D 0A 09 53 65 74 4C 69    Ptr^,p);...SetLi
0281D0:  6E 65 50 6F 73 28 69 29 3B 0D 0A 09 49 46 20 6C    nePos(i);...IF l
0281E0:  69 6E 65 73 6D 6F 76 65 64 3D 69 20 54 48 45 4E    inesmoved=i THEN
0281F0:  0D 0A 09 09 4D 6F 76 65 64 4F 4B 3A 3D 54 52 55    ....MovedOK:=TRU
028200:  45 3B 0D 0A 09 09 47 6F 74 6F 78 79 28 30 2C 45    E;....Gotoxy(0,E
028210:  6E 64 6F 66 57 69 6E 64 6F 77 29 3B 0D 0A 09 09    ndofWindow);....
028220:  57 72 69 74 65 4C 69 6E 65 3B 0D 0A 09 09 45 4E    WriteLine;....EN
028230:  44 3B 0D 0A 09 53 65 74 50 6F 73 69 74 69 6F 6E    D;...SetPosition
028240:  28 43 75 72 46 69 6C 65 50 74 72 5E 2C 70 29 3B    (CurFilePtr^,p);
028250:  0D 0A 09 45 4E 44 20 52 65 6D 6F 76 65 4C 69 6E    ...END RemoveLin
028260:  65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65    e;..PROCEDURE De
028270:  6C 46 75 6C 6C 4C 69 6E 65 3B 0D 0A 42 45 47 49    lFullLine;..BEGI
028280:  4E 0D 0A 09 4D 61 72 6B 41 73 55 70 64 61 74 65    N...MarkAsUpdate
028290:  64 3B 0D 0A 09 52 65 6D 6F 76 65 4C 69 6E 65 3B    d;...RemoveLine;
0282A0:  0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 30 29    ...SetLinePos(0)
0282B0:  3B 0D 0A 09 44 65 6C 43 68 61 72 73 28 43 75 72    ;...DelChars(Cur
0282C0:  46 69 6C 65 50 74 72 5E 2C 4C 69 6E 65 4C 65 6E    FilePtr^,LineLen
0282D0:  2B 32 29 3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D    +2);...LinePos:=
0282E0:  30 3B 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 4C    0;...IF CurrentL
0282F0:  65 66 74 4D 61 72 67 69 6E 3E 30 20 54 48 45 4E    eftMargin>0 THEN
028300:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 41 6C 70    ;..PROCEDURE Alp
028310:  68 61 4E 75 6D 28 63 68 3A 43 48 41 52 29 3A 42    haNum(ch:CHAR):B
028320:  4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A    OOLEAN;..BEGIN..
028330:  09 63 68 3A 3D 43 41 50 28 63 68 29 3B 0D 0A 09    .ch:=CAP(ch);...
028340:  52 45 54 55 52 4E 20 28 28 63 68 3E 3D 27 41 27    RETURN ((ch>='A'
028350:  29 20 41 4E 44 20 28 63 68 3C 3D 27 5A 27 29 29    ) AND (ch<='Z'))
028360:  20 4F 52 20 28 28 63 68 3E 3D 27 30 27 29 20 41     OR ((ch>='0') A
028370:  4E 44 20 28 63 68 3C 3D 27 39 27 29 29 3B 0D 0A    ND (ch<='9'));..
028380:  09 45 4E 44 20 41 6C 70 68 61 4E 75 6D 3B 0D 0A    .END AlphaNum;..
028390:  0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 6E 64    ..PROCEDURE Find
0283A0:  57 6F 72 64 28 42 61 63 6B 77 61 72 64 3A 42 4F    Word(Backward:BO
0283B0:  4F 4C 45 41 4E 3B 44 65 6C 65 74 65 3A 42 4F 4F    OLEAN;Delete:BOO
0283C0:  4C 45 41 4E 29 3B 0D 0A 0D 0A 28 2A 09 46 69 6E    LEAN);....(*.Fin
0283D0:  64 20 61 20 77 6F 72 64 20 61 6E 64 20 6F 70 74    d a word and opt
0283E0:  69 6F 6E 61 6C 6C 79 20 64 65 6C 65 74 65 20 69    ionally delete i
0283F0:  74 0D 0A 0D 0A 09 41 20 77 6F 72 64 20 69 73 20    t.....A word is 
028400:  61 20 73 74 72 69 6E 67 20 61 6C 70 68 61 6E 75    a string alphanu
028410:  6D 65 72 69 63 73 20 6F 72 20 61 20 73 74 72 69    merics or a stri
028420:  6E 67 20 6F 66 20 6D 61 72 6B 73 2C 20 74 61 62    ng of marks, tab
028430:  73 20 20 6F 72 20 73 70 6F 61 63 65 73 0D 0A 0D    s  or spoaces...
028440:  0A 09 54 68 65 20 63 75 72 73 6F 72 20 69 73 20    ..The cursor is 
028450:  72 65 70 6F 73 69 74 69 6F 6E 65 64 2A 29 0D 0A    repositioned*)..
028460:  56 41 52 09 63 68 3A 43 48 41 52 3B 0D 0A 09 62    VAR.ch:CHAR;...b
028470:  31 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49    1:BOOLEAN;..BEGI
028480:  4E 0D 0A 09 46 69 6C 65 4C 69 6D 69 74 3A 3D 46    N...FileLimit:=F
028490:  41 4C 53 45 3B 0D 0A 09 49 46 20 42 61 63 6B 77    ALSE;...IF Backw
0284A0:  61 72 64 20 54 48 45 4E 20 0D 0A 09 09 4C 65 66    ard THEN ....Lef
0284B0:  74 3B 0D 0A 09 09 49 46 20 4E 4F 54 20 4D 6F 76    t;....IF NOT Mov
0284C0:  65 64 4F 4B 20 54 48 45 4E 20 52 45 54 55 52 4E    edOK THEN RETURN
0284D0:  20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09     END;....END;...
0284E0:  63 68 3A 3D 47 65 74 43 75 72 72 65 6E 74 43 68    ch:=GetCurrentCh
0284F0:  61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B    ar(CurFilePtr^);
028500:  20 0D 0A 09 09 43 68 61 6E 67 65 4D 61 72 67 69     ....ChangeMargi
028510:  6E 28 2D 49 4E 54 45 47 45 52 28 43 75 72 72 65    n(-INTEGER(Curre
028520:  6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 29 0D 0A    ntLeftMargin))..
028530:  09 09 45 4E 44 3B 0D 0A 09 54 68 69 73 78 3A 3D    ..END;...Thisx:=
028540:  30 3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A    0;...ResetPos;..
028550:  09 4C 69 6E 65 50 6F 73 3A 3D 30 3B 0D 0A 09 53    .LinePos:=0;...S
028560:  65 74 4C 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09    etLinePos(0);...
028570:  45 4E 44 20 44 65 6C 46 75 6C 6C 4C 69 6E 65 3B    END DelFullLine;
028580:  0D 0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20    ......PROCEDURE 
028590:  53 63 72 6F 6C 6C 54 65 78 74 28 42 79 3A 49 4E    ScrollText(By:IN
0285A0:  54 45 47 45 52 29 3B 0D 0A 0D 0A 28 2A 09 53 63    TEGER);....(*.Sc
0285B0:  72 6F 6C 6C 20 75 70 20 6F 6E 65 20 6C 69 6E 65    roll up one line
0285C0:  20 69 6E 20 74 68 65 20 66 69 6C 65 0D 0A 09 28     in the file...(
0285D0:  77 68 69 63 68 20 6D 65 61 6E 73 20 74 68 65 20    which means the 
0285E0:  74 65 78 74 20 73 63 72 6F 6C 6C 73 20 64 6F 77    text scrolls dow
0285F0:  6E 20 2D 20 62 61 63 6B 77 61 72 64 73 20 74 6F    n - backwards to
028600:  0D 0A 09 77 68 61 74 20 79 6F 75 20 6D 69 67 68    ...what you migh
028610:  74 20 74 68 69 6E 6B 20 61 74 20 66 69 72 73 74    t think at first
028620:  29 2A 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09 53    )*)....BEGIN...S
028630:  63 72 6F 6C 6C 57 69 6E 64 6F 77 28 53 74 61 72    crollWindow(Star
028640:  74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57    tofWindow,EndofW
028650:  69 6E 64 6F 77 2C 42 79 29 3B 0D 0A 09 45 4E 44    indow,By);...END
028660:  20 53 63 72 6F 6C 6C 54 65 78 74 3B 0D 0A 50 52     ScrollText;..PR
028670:  4F 43 45 44 55 52 45 20 53 63 72 6F 6C 6C 55 70    OCEDURE ScrollUp
028680:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 0D 0A 09 53 63    ;..BEGIN......Sc
028690:  72 6F 6C 6C 54 65 78 74 28 2D 31 29 3B 0D 0A 09    rollText(-1);...
0286A0:  49 46 20 4D 6F 76 65 64 4F 4B 20 54 48 45 4E 0D    IF MovedOK THEN.
0286B0:  0A 09 09 49 46 20 54 68 69 73 79 3C 45 6E 64 6F    ...IF Thisy<Endo
0286C0:  66 57 69 6E 64 6F 77 20 54 48 45 4E 20 0D 0A 09    fWindow THEN ...
0286D0:  09 09 49 4E 43 28 54 68 69 73 79 29 3B 0D 0A 09    ..INC(Thisy);...
0286E0:  09 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 09 45    ..ResetPos;....E
0286F0:  4C 53 45 20 09 0D 0A 09 09 09 4C 69 6E 65 4D 6F    LSE ......LineMo
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 41 02 00 00 00 02    ".....R.".A.....
028720:  22 00 46 02 00 00 00 02 22 00 42 02 00 00 00 02    ".F.....".B.....
028730:  22 00 47 02 00 00 00 02 22 00 43 02 00 00 00 02    ".G.....".C.....
028740:  22 00 48 02 00 00 00 02 22 00 44 02 00 00 00 02    ".H.....".D.....
028750:  22 00 49 02 00 00 00 02 22 00 45 02 00 00 00 02    ".I.....".E.....
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:  0D 0A 09 62 31 3A 3D 41 6C 70 68 61 4E 75 6D 28    ...b1:=AlphaNum(
028810:  63 68 29 3B 0D 0A 09 49 46 20 63 68 3D 45 4F 46    ch);...IF ch=EOF
028820:  20 54 48 45 4E 20 52 45 54 55 52 4E 20 45 4E 44     THEN RETURN END
028830:  3B 0D 0A 09 52 45 50 45 41 54 0D 0A 09 09 49 46    ;...REPEAT....IF
028840:  20 44 65 6C 65 74 65 20 54 48 45 4E 20 44 65 6C     Delete THEN Del
028850:  4F 6E 65 43 68 61 72 20 45 4E 44 3B 0D 0A 09 09    OneChar END;....
028860:  49 46 20 42 61 63 6B 77 61 72 64 20 20 20 54 48    IF Backward   TH
028870:  45 4E 20 4C 65 66 74 0D 0A 09 09 45 4C 53 49 46    EN Left....ELSIF
028880:  20 4E 4F 54 20 44 65 6C 65 74 65 20 54 48 45 4E     NOT Delete THEN
028890:  20 52 69 67 68 74 20 45 4E 44 3B 0D 0A 09 09 63     Right END;....c
0288A0:  68 3A 3D 47 65 74 43 75 72 72 65 6E 74 43 68 61    h:=GetCurrentCha
0288B0:  72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D    r(CurFilePtr^);.
0288C0:  0A 09 09 55 4E 54 49 4C 20 20 28 62 31 3C 3E 41    ...UNTIL  (b1<>A
0288D0:  6C 70 68 61 4E 75 6D 28 63 68 29 29 20 4F 52 20    lphaNum(ch)) OR 
0288E0:  46 69 6C 65 4C 69 6D 69 74 20 4F 52 20 28 63 68    FileLimit OR (ch
0288F0:  3D 45 4F 46 29 3B 0D 0A 09 49 46 20 42 61 63 6B    =EOF);...IF Back
028900:  77 61 72 64 20 41 4E 44 20 4E 4F 54 20 46 69 6C    ward AND NOT Fil
028910:  65 4C 69 6D 69 74 20 54 48 45 4E 20 52 69 67 68    eLimit THEN Righ
028920:  74 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 46 69 6E    t END;...END Fin
028930:  64 57 6F 72 64 3B 0D 0A 50 52 4F 43 45 44 55 52    dWord;..PROCEDUR
028940:  45 20 44 6F 77 6E 3B 0D 0A 42 45 47 49 4E 0D 0A    E Down;..BEGIN..
028950:  09 4C 69 6E 65 4D 6F 76 65 28 31 29 3B 0D 0A 09    .LineMove(1);...
028960:  46 69 6C 65 4C 69 6D 69 74 3A 3D 6C 69 6E 65 73    FileLimit:=lines
028970:  6D 6F 76 65 64 3D 30 3B 0D 0A 09 49 46 20 6C 69    moved=0;...IF li
028980:  6E 65 73 6D 6F 76 65 64 3E 30 20 54 48 45 4E 0D    nesmoved>0 THEN.
028990:  0A 09 09 49 46 20 28 54 68 69 73 79 3E 3D 45 6E    ...IF (Thisy>=En
0289A0:  64 6F 66 57 69 6E 64 6F 77 29 20 54 48 45 4E 0D    dofWindow) THEN.
0289B0:  0A 09 09 09 52 65 44 69 73 70 6C 61 79 57 69 6E    ....ReDisplayWin
0289C0:  64 6F 77 3B 0D 0A 09 09 45 4C 53 49 46 20 20 4E    dow;....ELSIF  N
0289D0:  4F 54 20 52 65 44 72 61 77 6E 20 54 48 45 4E 20    OT ReDrawn THEN 
0289E0:  0D 0A 09 09 09 49 4E 43 28 54 68 69 73 79 29 3B    .....INC(Thisy);
0289F0:  0D 0A 09 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A    .....ResetPos;..
028A00:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C 69 6E 65    ;....END;...Line
028A10:  4D 6F 76 65 28 2D 31 29 3B 0D 0A 09 46 69 6C 65    Move(-1);...File
028A20:  4C 69 6D 69 74 3A 3D 6C 69 6E 65 73 6D 6F 76 65    Limit:=linesmove
028A30:  64 3D 30 3B 0D 0A 09 49 46 20 28 6C 69 6E 65 73    d=0;...IF (lines
028A40:  6D 6F 76 65 64 3C 3E 30 29 20 41 4E 44 20 28 54    moved<>0) AND (T
028A50:  68 69 73 79 3E 53 74 61 72 74 6F 66 57 69 6E 64    hisy>StartofWind
028A60:  6F 77 29 20 41 4E 44 20 4E 4F 54 20 52 65 44 72    ow) AND NOT ReDr
028A70:  61 77 6E 20 54 48 45 4E 20 0D 0A 09 09 44 45 43    awn THEN ....DEC
028A80:  28 54 68 69 73 79 29 3B 0D 0A 09 09 52 65 73 65    (Thisy);....Rese
028A90:  74 50 6F 73 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    tPos;....END;...
028AA0:  45 4E 44 20 55 70 3B 0D 0A 50 52 4F 43 45 44 55    END Up;..PROCEDU
028AB0:  52 45 20 55 70 53 63 72 65 65 6E 3B 0D 0A 42 45    RE UpScreen;..BE
028AC0:  47 49 4E 0D 0A 09 4C 69 6E 65 4D 6F 76 65 28 31    GIN...LineMove(1
028AD0:  2D 49 4E 54 45 47 45 52 28 4C 69 6E 65 73 50 65    -INTEGER(LinesPe
028AE0:  72 57 69 6E 64 6F 77 29 29 3B 0D 0A 09 52 65 44    rWindow));...ReD
028AF0:  69 73 70 6C 61 79 57 69 6E 64 6F 77 3B 0D 0A 09    isplayWindow;...
028B00:  45 4E 44 20 55 70 53 63 72 65 65 6E 3B 0D 0A 50    END UpScreen;..P
028B10:  52 4F 43 45 44 55 52 45 20 44 6F 77 6E 53 63 72    ROCEDURE DownScr
028B20:  65 65 6E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4C 69    een;..BEGIN...Li
028B30:  6E 65 4D 6F 76 65 28 4C 69 6E 65 73 50 65 72 57    neMove(LinesPerW
028B40:  69 6E 64 6F 77 2D 31 29 3B 0D 0A 09 52 65 44 69    indow-1);...ReDi
028B50:  73 70 6C 61 79 57 69 6E 64 6F 77 3B 0D 0A 09 45    splayWindow;...E
028B60:  4E 44 20 44 6F 77 6E 53 63 72 65 65 6E 3B 0D 0A    ND DownScreen;..
028B70:  50 52 4F 43 45 44 55 52 45 20 54 6F 70 3B 0D 0A    PROCEDURE Top;..
028B80:  42 45 47 49 4E 0D 0A 09 4C 69 6E 65 50 6F 73 3A    BEGIN...LinePos:
028B90:  3D 30 3B 0D 0A 09 4C 69 6E 65 4D 6F 76 65 28 2D    =0;...LineMove(-
028BA0:  31 36 37 33 36 29 3B 0D 0A 09 52 65 44 69 73 70    16736);...ReDisp
028BB0:  6C 61 79 57 69 6E 64 6F 77 3B 0D 0A 09 45 4E 44    layWindow;...END
028BC0:  20 54 6F 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45     Top;..PROCEDURE
028BD0:  20 42 6F 74 74 6F 6D 3B 0D 0A 42 45 47 49 4E 0D     Bottom;..BEGIN.
028BE0:  0A 09 4C 69 6E 65 50 6F 73 3A 3D 39 39 39 3B 0D    ..LinePos:=999;.
028BF0:  0A 09 4C 69 6E 65 4D 6F 76 65 28 31 36 37 33 36    ..LineMove(16736
028C00:  09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20    ...END;....END; 
028C10:  0D 0A 09 45 4E 44 20 44 6F 77 6E 3B 0D 0A 0D 0A    ...END Down;....
028C20:  50 52 4F 43 45 44 55 52 45 20 52 65 64 6F 4C 69    PROCEDURE RedoLi
028C30:  6E 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74    ne;..BEGIN...Got
028C40:  6F 78 79 28 30 2C 54 68 69 73 79 29 3B 0D 0A 09    oxy(0,Thisy);...
028C50:  53 65 74 4C 69 6E 65 50 6F 73 28 30 29 3B 0D 0A    SetLinePos(0);..
028C60:  09 57 72 69 74 65 4C 69 6E 65 3B 0D 0A 09 43 68    .WriteLine;...Ch
028C70:  61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E 44 20 52    angePos;...END R
028C80:  65 64 6F 4C 69 6E 65 3B 0D 0A 0D 0A 50 52 4F 43    edoLine;....PROC
028C90:  45 44 55 52 45 20 49 6E 73 4F 6E 65 43 68 61 72    EDURE InsOneChar
028CA0:  28 63 68 3A 43 48 41 52 29 3B 0D 0A 56 41 52 09    (ch:CHAR);..VAR.
028CB0:  43 48 31 3A 41 52 52 41 59 5B 30 2E 2E 30 5D 20    CH1:ARRAY[0..0] 
028CC0:  4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E 0D    OF CHAR;..BEGIN.
028CD0:  0A 09 52 65 44 72 61 77 6E 3A 3D 46 41 4C 53 45    ..ReDrawn:=FALSE
028CE0:  3B 0D 0A 09 4D 61 72 6B 41 73 55 70 64 61 74 65    ;...MarkAsUpdate
028CF0:  64 3B 0D 0A 09 43 48 31 5B 30 5D 3A 3D 63 68 3B    d;...CH1[0]:=ch;
028D00:  0D 0A 09 49 6E 73 43 68 61 72 73 28 43 75 72 46    ...InsChars(CurF
028D10:  69 6C 65 50 74 72 5E 2C 43 48 31 2C 31 29 3B 0D    ilePtr^,CH1,1);.
028D20:  0A 09 49 4E 43 28 4C 69 6E 65 50 6F 73 29 3B 0D    ..INC(LinePos);.
028D30:  0A 09 49 4E 43 28 4C 69 6E 65 4C 65 6E 29 3B 0D    ..INC(LineLen);.
028D40:  0A 09 49 46 20 63 68 3D 43 52 20 54 48 45 4E 0D    ..IF ch=CR THEN.
028D50:  0A 09 09 43 48 31 5B 30 5D 3A 3D 4C 46 3B 0D 0A    ...CH1[0]:=LF;..
028D60:  09 09 49 6E 73 43 68 61 72 73 28 43 75 72 46 69    ..InsChars(CurFi
028D70:  6C 65 50 74 72 5E 2C 43 48 31 2C 31 29 3B 0D 0A    lePtr^,CH1,1);..
028D80:  09 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 09 43    ..ResetPos;....C
028D90:  6C 65 61 72 52 65 73 74 4F 66 4C 69 6E 65 3B 0D    learRestOfLine;.
028DA0:  0A 09 09 49 46 20 54 68 69 73 79 3E 3D 45 6E 64    ...IF Thisy>=End
028DB0:  6F 66 57 69 6E 64 6F 77 20 54 48 45 4E 0D 0A 09    ofWindow THEN...
028DC0:  09 09 53 63 72 6F 6C 6C 54 65 78 74 28 30 29 3B    ..ScrollText(0);
028DD0:  0D 0A 09 09 09 44 45 43 28 54 68 69 73 79 29 3B    .....DEC(Thisy);
028DE0:  0D 0A 09 09 45 4C 53 45 20 20 20 20 53 63 72 6F    ....ELSE    Scro
028DF0:  6C 6C 57 69 6E 64 6F 77 28 54 68 69 73 79 2B 31    llWindow(Thisy+1
028E00:  29 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 57 69    );...ReDisplayWi
028E10:  6E 64 6F 77 3B 0D 0A 09 45 4E 44 20 42 6F 74 74    ndow;...END Bott
028E20:  6F 6D 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46    om;..PROCEDURE F
028E30:  61 72 4C 65 66 74 3B 0D 0A 42 45 47 49 4E 0D 0A    arLeft;..BEGIN..
028E40:  09 49 46 20 43 75 72 72 65 6E 74 4C 65 66 74 4D    .IF CurrentLeftM
028E50:  61 72 67 69 6E 3E 30 20 54 48 45 4E 20 0D 0A 09    argin>0 THEN ...
028E60:  09 43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 49    .ChangeMargin(-I
028E70:  4E 54 45 47 45 52 28 43 75 72 72 65 6E 74 4C 65    NTEGER(CurrentLe
028E80:  66 74 4D 61 72 67 69 6E 29 29 0D 0A 09 09 45 4E    ftMargin))....EN
028E90:  44 3B 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28    D;...SetLinePos(
028EA0:  30 29 3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D 30    0);...LinePos:=0
028EB0:  3B 0D 0A 09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A    ;...ChangePos;..
028EC0:  09 45 4E 44 20 46 61 72 4C 65 66 74 3B 0D 0A 50    .END FarLeft;..P
028ED0:  52 4F 43 45 44 55 52 45 20 46 61 72 52 69 67 68    ROCEDURE FarRigh
028EE0:  74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 53 65 74 4C    t;..BEGIN...SetL
028EF0:  69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 4C 69 6E    inePos(0);...Lin
028F00:  65 50 6F 73 3A 3D 4C 69 6E 65 4C 65 6E 3B 0D 0A    ePos:=LineLen;..
028F10:  09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E    .ChangePos;...EN
028F20:  44 20 46 61 72 52 69 67 68 74 3B 0D 0A 50 52 4F    D FarRight;..PRO
028F30:  43 45 44 55 52 45 20 43 68 61 6E 67 65 57 69 6E    CEDURE ChangeWin
028F40:  64 6F 77 28 4E 6F 3A 49 4E 54 45 47 45 52 29 3B    dow(No:INTEGER);
028F50:  0D 0A 56 41 52 09 62 3A 42 4F 4F 4C 45 41 4E 3B    ..VAR.b:BOOLEAN;
028F60:  0D 0A 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    ...i:CARDINAL;..
028F70:  42 45 47 49 4E 0D 0A 09 49 46 20 43 75 72 72 65    BEGIN...IF Curre
028F80:  6E 74 57 69 6E 64 6F 77 3C 3E 30 20 54 48 45 4E    ntWindow<>0 THEN
028F90:  0D 0A 09 09 63 75 72 78 5B 43 75 72 72 65 6E 74    ....curx[Current
028FA0:  57 69 6E 64 6F 77 5D 3A 3D 54 68 69 73 78 3B 0D    Window]:=Thisx;.
028FB0:  0A 09 09 63 75 72 79 5B 43 75 72 72 65 6E 74 57    ...cury[CurrentW
028FC0:  69 6E 64 6F 77 5D 3A 3D 54 68 69 73 79 3B 0D 0A    indow]:=Thisy;..
028FD0:  09 09 62 3A 3D 4C 61 62 65 6C 4F 70 28 43 75 72    ..b:=LabelOp(Cur
028FE0:  46 69 6C 65 50 74 72 5E 2C 54 52 55 45 2C 43 48    FilePtr^,TRUE,CH
028FF0:  52 28 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 29    R(CurrentWindow)
029000:  2C 45 6E 64 6F 66 57 69 6E 64 6F 77 2C 2D 31 29    ,EndofWindow,-1)
029010:  3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 4E    ;.....END;....IN
029020:  43 28 54 68 69 73 79 29 3B 0D 0A 09 09 52 65 73    C(Thisy);....Res
029030:  65 74 50 6F 73 3B 0D 0A 09 09 4C 69 6E 65 50 6F    etPos;....LinePo
029040:  73 3A 3D 30 3B 0D 0A 09 09 52 65 64 6F 4C 69 6E    s:=0;....RedoLin
029050:  65 3B 0D 0A 09 45 4C 53 49 46 20 63 68 3D 54 41    e;...ELSIF ch=TA
029060:  42 20 54 48 45 4E 20 52 65 64 6F 4C 69 6E 65 09    B THEN RedoLine.
029070:  0D 0A 09 45 4C 53 45 0D 0A 09 09 49 46 20 54 68    ...ELSE....IF Th
029080:  69 73 78 3E 3D 28 53 63 72 65 65 6E 57 69 64 74    isx>=(ScreenWidt
029090:  68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 43 68    h-1) THEN.....Ch
0290A0:  61 6E 67 65 4D 61 72 67 69 6E 28 33 32 29 3B 0D    angeMargin(32);.
0290B0:  0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 20 4E    ....END;....IF N
0290C0:  4F 54 20 52 65 44 72 61 77 6E 20 54 48 45 4E 0D    OT ReDrawn THEN.
0290D0:  0A 09 09 09 49 46 20 4C 69 6E 65 50 6F 73 3C 4C    ....IF LinePos<L
0290E0:  69 6E 65 4C 65 6E 20 54 48 45 4E 0D 0A 09 09 09    ineLen THEN.....
0290F0:  09 62 3A 3D 42 61 63 6B 4F 6E 65 43 68 61 72 28    .b:=BackOneChar(
029100:  43 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09    CurFilePtr^);...
029110:  09 09 09 57 72 69 74 65 50 61 72 74 4C 69 6E 65    ...WritePartLine
029120:  28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67    (CurrentLeftMarg
029130:  69 6E 2B 54 68 69 73 78 2B 31 29 3B 0D 0A 09 09    in+Thisx+1);....
029140:  09 09 49 4E 43 28 54 68 69 73 78 29 3B 0D 0A 09    ..INC(Thisx);...
029150:  09 09 09 62 3A 3D 46 6F 72 77 61 72 64 4F 6E 65    ...b:=ForwardOne
029160:  43 68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E    Char(CurFilePtr^
029170:  29 3B 09 09 09 09 0D 0A 09 09 09 45 4C 53 45 0D    );.........ELSE.
029180:  0A 09 09 09 09 57 72 69 74 65 28 63 68 29 3B 0D    .....Write(ch);.
029190:  0A 09 09 09 09 49 4E 43 28 54 68 69 73 78 29 3B    .....INC(Thisx);
0291A0:  0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45    ......END;.....E
0291B0:  4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 65    ND;....END;...Re
0291C0:  73 65 74 50 6F 73 3B 0D 0A 09 45 4E 44 20 49 6E    setPos;...END In
0291D0:  73 4F 6E 65 43 68 61 72 3B 0D 0A 50 52 4F 43 45    sOneChar;..PROCE
0291E0:  44 55 52 45 20 44 65 6C 4F 6E 65 43 68 61 72 3B    DURE DelOneChar;
0291F0:  0D 0A 42 45 47 49 4E 0D 0A 09 4D 61 72 6B 41 73    ..BEGIN...MarkAs
029200:  29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 43 75 72    );....END;...Cur
029210:  72 65 6E 74 57 69 6E 64 6F 77 3A 3D 4E 6F 3B 0D    rentWindow:=No;.
029220:  0A 09 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 57    .....IF CurrentW
029230:  69 6E 64 6F 77 3E 57 69 6E 64 6F 77 73 20 54 48    indow>Windows TH
029240:  45 4E 20 43 75 72 72 65 6E 74 57 69 6E 64 6F 77    EN CurrentWindow
029250:  3A 3D 57 69 6E 64 6F 77 73 20 45 4E 44 3B 0D 0A    :=Windows END;..
029260:  09 49 46 20 43 75 72 72 65 6E 74 57 69 6E 64 6F    .IF CurrentWindo
029270:  77 3C 3E 30 20 54 48 45 4E 0D 0A 09 09 28 2A 73    w<>0 THEN....(*s
029280:  65 74 20 75 70 20 61 20 70 6F 69 6E 74 65 72 20    et up a pointer 
029290:  74 6F 20 74 68 65 20 63 75 72 72 65 6E 74 20 66    to the current f
0292A0:  69 6C 65 20 74 6F 20 73 61 76 65 20 69 6E 64 65    ile to save inde
0292B0:  78 20 63 61 6C 63 75 6C 61 74 69 6F 6E 0D 0A 09    x calculation...
0292C0:  09 20 20 65 76 65 72 79 20 74 69 6D 65 20 74 68    .  every time th
0292D0:  65 20 66 69 6C 65 20 69 73 20 72 65 66 65 72 65    e file is refere
0292E0:  6E 63 65 64 2A 29 0D 0A 09 09 43 75 72 72 65 6E    nced*)....Curren
0292F0:  74 46 69 6C 65 3A 3D 57 69 6E 64 6F 77 46 69 6C    tFile:=WindowFil
029300:  65 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D    e[CurrentWindow]
029310:  3B 0D 0A 09 09 43 75 72 46 69 6C 65 50 74 72 3A    ;....CurFilePtr:
029320:  3D 50 45 64 69 74 46 69 6C 65 28 41 44 52 28 46    =PEditFile(ADR(F
029330:  69 6C 65 73 5B 43 75 72 72 65 6E 74 46 69 6C 65    iles[CurrentFile
029340:  5D 29 29 3B 0D 0A 09 09 62 3A 3D 4C 61 62 65 6C    ]));....b:=Label
029350:  4F 70 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 46    Op(CurFilePtr^,F
029360:  41 4C 53 45 2C 43 48 52 28 43 75 72 72 65 6E 74    ALSE,CHR(Current
029370:  57 69 6E 64 6F 77 29 29 3B 0D 0A 09 09 54 68 69    Window));....Thi
029380:  73 78 3A 3D 63 75 72 78 5B 43 75 72 72 65 6E 74    sx:=curx[Current
029390:  57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 54 68 69 73    Window];....This
0293A0:  79 3A 3D 63 75 72 79 5B 43 75 72 72 65 6E 74 57    y:=cury[CurrentW
0293B0:  69 6E 64 6F 77 5D 3B 0D 0A 09 09 43 75 72 72 65    indow];....Curre
0293C0:  6E 74 4C 65 66 74 4D 61 72 67 69 6E 3A 3D 4C 65    ntLeftMargin:=Le
0293D0:  66 74 4D 61 72 67 69 6E 5B 43 75 72 72 65 6E 74    ftMargin[Current
0293E0:  57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 53 65 74 4C    Window];....SetL
0293F0:  69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 09 43 68    inePos(0);....Ch
029400:  55 70 64 61 74 65 64 3B 0D 0A 09 63 68 3A 3D 47    Updated;...ch:=G
029410:  65 74 43 75 72 72 65 6E 74 43 68 61 72 28 43 75    etCurrentChar(Cu
029420:  72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 49 46    rFilePtr^);...IF
029430:  20 4C 69 6E 65 50 6F 73 3D 4C 69 6E 65 4C 65 6E     LinePos=LineLen
029440:  20 54 48 45 4E 20 69 3A 3D 32 0D 0A 09 45 4C 53     THEN i:=2...ELS
029450:  45 20 69 3A 3D 31 20 45 4E 44 3B 0D 0A 09 44 65    E i:=1 END;...De
029460:  6C 43 68 61 72 73 28 43 75 72 46 69 6C 65 50 74    lChars(CurFilePt
029470:  72 5E 2C 69 29 3B 0D 0A 09 49 46 20 69 3D 32 20    r^,i);...IF i=2 
029480:  54 48 45 4E 0D 0A 09 09 49 46 20 54 68 69 73 79    THEN....IF Thisy
029490:  3C 45 6E 64 6F 66 57 69 6E 64 6F 77 20 54 48 45    <EndofWindow THE
0294A0:  4E 20 0D 0A 09 09 09 49 4E 43 28 54 68 69 73 79    N .....INC(Thisy
0294B0:  29 3B 0D 0A 09 09 09 69 3A 3D 4C 69 6E 65 50 6F    );.....i:=LinePo
0294C0:  73 3B 0D 0A 09 09 09 52 65 6D 6F 76 65 4C 69 6E    s;.....RemoveLin
0294D0:  65 3B 0D 0A 09 09 09 4C 69 6E 65 50 6F 73 3A 3D    e;.....LinePos:=
0294E0:  69 3B 0D 0A 09 09 09 44 45 43 28 54 68 69 73 79    i;.....DEC(Thisy
0294F0:  29 3B 0D 0A 09 09 09 52 65 64 6F 4C 69 6E 65 3B    );.....RedoLine;
029500:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 45 4C 53 45    .....END;...ELSE
029510:  09 0D 0A 09 09 44 45 43 28 4C 69 6E 65 4C 65 6E    .....DEC(LineLen
029520:  29 3B 0D 0A 09 09 57 72 69 74 65 50 61 72 74 4C    );....WritePartL
029530:  69 6E 65 28 43 75 72 72 65 6E 74 4C 65 66 74 4D    ine(CurrentLeftM
029540:  61 72 67 69 6E 2B 54 68 69 73 78 2B 31 29 3B 0D    argin+Thisx+1);.
029550:  0A 09 09 45 4E 44 3B 0D 0A 28 2A 09 45 4C 53 49    ...END;..(*.ELSI
029560:  46 20 63 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09    F ch=TAB THEN...
029570:  09 52 65 64 6F 4C 69 6E 65 0D 0A 09 45 4C 53 45    .RedoLine...ELSE
029580:  0D 0A 09 09 4C 69 6E 65 4C 65 6E 3A 3D 4C 69 6E    ....LineLen:=Lin
029590:  65 4C 65 6E 2D 31 3B 0D 0A 09 09 44 6F 53 63 72    eLen-1;....DoScr
0295A0:  65 65 6E 43 68 61 6E 67 65 28 44 65 6C 43 68 61    eenChange(DelCha
0295B0:  72 29 3B 0D 0A 09 09 45 4E 44 3B 2A 29 0D 0A 09    r);....END;*)...
0295C0:  52 65 73 65 74 50 6F 73 3B 0D 0A 09 45 4E 44 20    ResetPos;...END 
0295D0:  44 65 6C 4F 6E 65 43 68 61 72 3B 0D 0A 50 52 4F    DelOneChar;..PRO
0295E0:  43 45 44 55 52 45 20 4F 76 65 72 57 72 69 74 65    CEDURE OverWrite
0295F0:  28 63 68 3A 43 48 41 52 29 3B 0D 0A 56 41 52 09    (ch:CHAR);..VAR.
029600:  61 6E 67 65 50 6F 73 3B 0D 0A 09 09 69 3A 3D 28    angePos;....i:=(
029610:  53 63 72 65 65 6E 44 65 70 74 68 2D 57 69 6E 64    ScreenDepth-Wind
029620:  6F 77 73 29 20 44 49 56 20 57 69 6E 64 6F 77 73    ows) DIV Windows
029630:  3B 0D 0A 09 09 53 74 61 72 74 6F 66 57 69 6E 64    ;....StartofWind
029640:  6F 77 3A 3D 28 69 2B 31 29 2A 28 43 75 72 72 65    ow:=(i+1)*(Curre
029650:  6E 74 57 69 6E 64 6F 77 2D 31 29 3B 0D 0A 09 45    ntWindow-1);...E
029660:  4C 53 45 20 0D 0A 09 09 53 74 61 72 74 6F 66 57    LSE ....StartofW
029670:  69 6E 64 6F 77 3A 3D 30 3B 0D 0A 09 09 69 3A 3D    indow:=0;....i:=
029680:  30 20 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20    0 ....END;...IF 
029690:  43 75 72 72 65 6E 74 57 69 6E 64 6F 77 3C 57 69    CurrentWindow<Wi
0296A0:  6E 64 6F 77 73 20 54 48 45 4E 0D 0A 09 09 45 6E    ndows THEN....En
0296B0:  64 6F 66 57 69 6E 64 6F 77 3A 3D 53 74 61 72 74    dofWindow:=Start
0296C0:  6F 66 57 69 6E 64 6F 77 2B 69 2D 31 3B 0D 0A 09    ofWindow+i-1;...
0296D0:  45 4C 53 45 0D 0A 09 09 45 6E 64 6F 66 57 69 6E    ELSE....EndofWin
0296E0:  64 6F 77 3A 3D 53 63 72 65 65 6E 44 65 70 74 68    dow:=ScreenDepth
0296F0:  2D 32 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 45    -2....END;.....E
029700:  4E 44 20 43 68 61 6E 67 65 57 69 6E 64 6F 77 3B    ND ChangeWindow;
029710:  0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 73 65    ..PROCEDURE Rese
029720:  74 53 63 72 65 65 6E 50 6F 73 3B 0D 0A 42 45 47    tScreenPos;..BEG
029730:  49 4E 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 57    IN...IF CurrentW
029740:  69 6E 64 6F 77 3C 3E 30 20 54 48 45 4E 0D 0A 09    indow<>0 THEN...
029750:  09 54 68 69 73 78 3A 3D 63 75 72 78 5B 43 75 72    .Thisx:=curx[Cur
029760:  72 65 6E 74 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09    rentWindow];....
029770:  54 68 69 73 79 3A 3D 63 75 72 79 5B 43 75 72 72    Thisy:=cury[Curr
029780:  65 6E 74 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 52    entWindow];....R
029790:  65 73 65 74 50 6F 73 3B 0D 0A 09 09 45 4E 44 3B    esetPos;....END;
0297A0:  0D 0A 09 45 4E 44 20 52 65 73 65 74 53 63 72 65    ...END ResetScre
0297B0:  65 6E 50 6F 73 3B 0D 0A 50 52 4F 43 45 44 55 52    enPos;..PROCEDUR
0297C0:  45 20 4D 6F 76 65 57 69 6E 64 6F 77 28 66 72 6F    E MoveWindow(fro
0297D0:  6D 2C 74 6F 3A 43 41 52 44 49 4E 41 4C 29 3B 0D    m,to:CARDINAL);.
0297E0:  0A 56 41 52 09 62 3A 42 4F 4F 4C 45 41 4E 3B 0D    .VAR.b:BOOLEAN;.
0297F0:  0A 42 45 47 49 4E 0D 0A 09 63 75 72 78 5B 74 6F    .BEGIN...curx[to
029800:  43 48 31 3A 41 52 52 41 59 5B 30 2E 2E 30 5D 20    CH1:ARRAY[0..0] 
029810:  4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E 0D    OF CHAR;..BEGIN.
029820:  0A 09 43 48 31 5B 30 5D 3A 3D 47 65 74 43 75 72    ..CH1[0]:=GetCur
029830:  72 65 6E 74 43 68 61 72 28 43 75 72 46 69 6C 65    rentChar(CurFile
029840:  50 74 72 5E 29 3B 0D 0A 09 49 46 20 28 43 48 31    Ptr^);...IF (CH1
029850:  5B 30 5D 3C 3E 43 52 29 20 41 4E 44 20 28 63 68    [0]<>CR) AND (ch
029860:  3C 3E 43 52 29 20 41 4E 44 20 28 43 48 31 5B 30    <>CR) AND (CH1[0
029870:  5D 3C 3E 31 61 78 29 20 54 48 45 4E 0D 0A 09 09    ]<>1ax) THEN....
029880:  49 46 20 28 43 48 31 5B 30 5D 3C 3E 54 41 42 29    IF (CH1[0]<>TAB)
029890:  20 41 4E 44 20 28 63 68 3C 3E 54 41 42 29 20 54     AND (ch<>TAB) T
0298A0:  48 45 4E 0D 0A 09 09 09 44 65 6C 43 68 61 72 73    HEN.....DelChars
0298B0:  28 43 75 72 46 69 6C 65 50 74 72 5E 2C 31 29 3B    (CurFilePtr^,1);
0298C0:  0D 0A 09 09 09 43 48 31 5B 30 5D 3A 3D 63 68 3B    .....CH1[0]:=ch;
0298D0:  0D 0A 09 09 09 49 6E 73 43 68 61 72 73 28 43 75    .....InsChars(Cu
0298E0:  72 46 69 6C 65 50 74 72 5E 2C 43 48 31 2C 31 29    rFilePtr^,CH1,1)
0298F0:  3B 0D 0A 09 09 09 62 3A 3D 42 61 63 6B 4F 6E 65    ;.....b:=BackOne
029900:  43 68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E    Char(CurFilePtr^
029910:  29 3B 0D 0A 09 09 09 57 72 69 74 65 28 63 68 29    );.....Write(ch)
029920:  3B 0D 0A 09 09 09 52 65 73 65 74 50 6F 73 3B 0D    ;.....ResetPos;.
029930:  0A 09 09 09 52 69 67 68 74 3B 0D 0A 09 09 09 4D    ....Right;.....M
029940:  61 72 6B 41 73 55 70 64 61 74 65 64 3B 0D 0A 09    arkAsUpdated;...
029950:  09 45 4C 53 45 0D 0A 09 09 09 44 65 6C 4F 6E 65    .ELSE.....DelOne
029960:  43 68 61 72 3B 0D 0A 09 09 09 49 6E 73 4F 6E 65    Char;.....InsOne
029970:  43 68 61 72 28 63 68 29 3B 0D 0A 09 09 09 45 4E    Char(ch);.....EN
029980:  44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 49 6E 73    D;...ELSE....Ins
029990:  4F 6E 65 43 68 61 72 28 63 68 29 3B 0D 0A 09 09    OneChar(ch);....
0299A0:  45 4E 44 3B 0D 0A 09 45 4E 44 20 4F 76 65 72 57    END;...END OverW
0299B0:  72 69 74 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45    rite;..PROCEDURE
0299C0:  20 55 70 3B 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A     Up;.....BEGIN..
0299D0:  09 49 46 20 54 68 69 73 79 3C 3D 53 74 61 72 74    .IF Thisy<=Start
0299E0:  6F 66 57 69 6E 64 6F 77 20 54 48 45 4E 0D 0A 09    ofWindow THEN...
0299F0:  09 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F 77    .ReDisplayWindow
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 41 02 00 00 00 02    #.....R.#.A.....
029A20:  23 00 46 02 00 00 00 02 23 00 42 02 00 00 00 02    #.F.....#.B.....
029A30:  23 00 47 02 00 00 00 02 23 00 43 02 00 00 00 02    #.G.....#.C.....
029A40:  23 00 48 02 00 00 00 02 23 00 44 02 00 00 00 02    #.H.....#.D.....
029A50:  23 00 49 02 00 00 00 02 23 00 45 02 00 00 00 02    #.I.....#.E.....
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:  5D 3A 3D 63 75 72 78 5B 66 72 6F 6D 5D 3B 0D 0A    ]:=curx[from];..
029B10:  09 63 75 72 79 5B 74 6F 5D 3A 3D 63 75 72 79 5B    .cury[to]:=cury[
029B20:  66 72 6F 6D 5D 3B 0D 0A 09 4C 65 66 74 4D 61 72    from];...LeftMar
029B30:  67 69 6E 5B 74 6F 5D 3A 3D 4C 65 66 74 4D 61 72    gin[to]:=LeftMar
029B40:  67 69 6E 5B 66 72 6F 6D 5D 3B 0D 0A 09 57 69 6E    gin[from];...Win
029B50:  64 6F 77 46 69 6C 65 5B 74 6F 5D 3A 3D 57 69 6E    dowFile[to]:=Win
029B60:  64 6F 77 46 69 6C 65 5B 66 72 6F 6D 5D 3B 0D 0A    dowFile[from];..
029B70:  09 62 3A 3D 4C 61 62 65 6C 4F 70 28 46 69 6C 65    .b:=LabelOp(File
029B80:  73 5B 57 69 6E 64 6F 77 46 69 6C 65 5B 74 6F 5D    s[WindowFile[to]
029B90:  5D 2C 54 52 55 45 2C 43 48 52 28 74 6F 29 29 3B    ],TRUE,CHR(to));
029BA0:  0D 0A 09 45 4E 44 20 4D 6F 76 65 57 69 6E 64 6F    ...END MoveWindo
029BB0:  77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 6C    w;..PROCEDURE El
029BC0:  69 64 65 57 69 6E 64 6F 77 28 57 69 6E 64 6F 77    ideWindow(Window
029BD0:  4E 6F 3A 49 4E 54 45 47 45 52 29 3B 0D 0A 42 45    No:INTEGER);..BE
029BE0:  47 49 4E 0D 0A 09 46 4F 52 20 69 3A 3D 57 69 6E    GIN...FOR i:=Win
029BF0:  64 6F 77 4E 6F 2B 31 20 54 4F 20 49 4E 54 45 47    dowNo+1 TO INTEG
029C00:  45 52 28 57 69 6E 64 6F 77 73 29 20 44 4F 0D 0A    ER(Windows) DO..
029C10:  09 09 4D 6F 76 65 57 69 6E 64 6F 77 28 69 2C 69    ..MoveWindow(i,i
029C20:  2D 31 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 44    -1);....END;...D
029C30:  45 43 28 57 69 6E 64 6F 77 73 29 3B 0D 0A 09 43    EC(Windows);...C
029C40:  75 72 72 65 6E 74 57 69 6E 64 6F 77 3A 3D 30 3B    urrentWindow:=0;
029C50:  0D 0A 09 45 4E 44 20 45 6C 69 64 65 57 69 6E 64    ...END ElideWind
029C60:  6F 77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4D    ow;..PROCEDURE M
029C70:  61 6B 65 57 69 6E 64 6F 77 3B 0D 0A 42 45 47 49    akeWindow;..BEGI
029C80:  4E 0D 0A 09 49 4E 43 28 57 69 6E 64 6F 77 73 29    N...INC(Windows)
029C90:  3B 0D 0A 09 4D 6F 76 65 57 69 6E 64 6F 77 28 43    ;...MoveWindow(C
029CA0:  75 72 72 65 6E 74 57 69 6E 64 6F 77 2C 57 69 6E    urrentWindow,Win
029CB0:  64 6F 77 73 29 3B 0D 0A 09 45 4E 44 20 4D 61 6B    dows);...END Mak
029CC0:  65 57 69 6E 64 6F 77 3B 0D 0A 50 52 4F 43 45 44    eWindow;..PROCED
029CD0:  55 52 45 20 53 65 61 72 63 68 28 52 65 70 6C 61    URE Search(Repla
029CE0:  63 65 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52    ce:ARRAY OF CHAR
029CF0:  3B 52 4C 65 6E 3A 49 4E 54 45 47 45 52 3B 4C 65    ;RLen:INTEGER;Le
029D00:  0A 09 47 6F 74 6F 78 79 28 30 2C 53 63 72 65 65    ..Gotoxy(0,Scree
029D10:  6E 44 65 70 74 68 2D 31 29 3B 0D 0A 09 57 72 69    nDepth-1);...Wri
029D20:  74 65 53 74 72 69 6E 67 28 73 31 29 3B 57 72 69    teString(s1);Wri
029D30:  74 65 53 74 72 69 6E 67 28 73 32 29 3B 0D 0A 09    teString(s2);...
029D40:  45 4E 44 20 45 72 72 6F 72 4D 65 73 73 61 67 65    END ErrorMessage
029D50:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74    ;..PROCEDURE Set
029D60:  57 69 6E 64 6F 77 73 28 69 3A 49 4E 54 45 47 45    Windows(i:INTEGE
029D70:  52 29 3B 0D 0A 0D 0A 28 2A 09 73 65 74 20 6E 75    R);....(*.set nu
029D80:  6D 62 65 72 20 6F 66 20 65 64 69 74 20 77 69 6E    mber of edit win
029D90:  64 6F 77 73 20 69 6E 20 75 73 65 20 2D 20 79 6F    dows in use - yo
029DA0:  75 20 6D 75 73 74 20 72 65 66 72 65 73 68 20 74    u must refresh t
029DB0:  68 65 20 65 6E 74 69 72 65 0D 0A 09 73 63 72 65    he entire...scre
029DC0:  65 6E 20 77 69 74 68 20 63 61 6C 6C 73 20 74 6F    en with calls to
029DD0:  20 44 69 73 70 6C 61 79 46 69 6C 65 20 61 66 74     DisplayFile aft
029DE0:  65 72 20 61 20 63 61 6C 6C 20 74 6F 20 74 68 69    er a call to thi
029DF0:  73 0D 0A 09 72 6F 75 74 69 6E 65 2A 29 0D 0A 56    s...routine*)..V
029E00:  41 52 09 6A 2C 6B 3A 43 41 52 44 49 4E 41 4C 3B    AR.j,k:CARDINAL;
029E10:  0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 57 69 6E    .....BEGIN...Win
029E20:  64 6F 77 73 3A 3D 69 3B 0D 0A 09 53 63 72 65 65    dows:=i;...Scree
029E30:  6E 43 6F 6E 74 72 6F 6C 28 43 6C 65 61 72 53 63    nControl(ClearSc
029E40:  72 65 65 6E 29 3B 0D 0A 09 49 46 20 57 69 6E 64    reen);...IF Wind
029E50:  6F 77 73 3E 31 20 54 48 45 4E 0D 0A 09 09 4C 69    ows>1 THEN....Li
029E60:  6E 65 73 50 65 72 57 69 6E 64 6F 77 3A 3D 28 53    nesPerWindow:=(S
029E70:  63 72 65 65 6E 44 65 70 74 68 2D 57 69 6E 64 6F    creenDepth-Windo
029E80:  77 73 29 20 44 49 56 20 57 69 6E 64 6F 77 73 3B    ws) DIV Windows;
029E90:  0D 0A 09 45 4C 53 45 09 4C 69 6E 65 73 50 65 72    ...ELSE.LinesPer
029EA0:  57 69 6E 64 6F 77 3A 3D 53 63 72 65 65 6E 44 65    Window:=ScreenDe
029EB0:  70 74 68 2D 31 20 45 4E 44 3B 0D 0A 09 46 4F 52    pth-1 END;...FOR
029EC0:  20 6A 3A 3D 32 20 54 4F 20 57 69 6E 64 6F 77 73     j:=2 TO Windows
029ED0:  20 44 4F 0D 0A 09 09 47 6F 74 6F 78 79 28 30 2C     DO....Gotoxy(0,
029EE0:  28 4C 69 6E 65 73 50 65 72 57 69 6E 64 6F 77 2B    (LinesPerWindow+
029EF0:  31 29 2A 28 6A 2D 31 29 2D 31 29 3B 0D 0A 09 09    1)*(j-1)-1);....
029F00:  6E 3A 43 41 52 44 49 4E 41 4C 29 3A 42 4F 4F 4C    n:CARDINAL):BOOL
029F10:  45 41 4E 3B 0D 0A 0D 0A 28 2A 09 73 65 61 72 63    EAN;....(*.searc
029F20:  68 20 66 6F 72 20 73 74 72 69 6E 67 20 61 6E 64    h for string and
029F30:  20 72 65 70 6C 61 63 65 20 69 66 20 66 6F 75 6E     replace if foun
029F40:  64 2A 29 0D 0A 56 41 52 09 62 3A 42 4F 4F 4C 45    d*)..VAR.b:BOOLE
029F50:  41 4E 3B 0D 0A 09 46 6F 75 6E 64 3A 42 4F 4F 4C    AN;...Found:BOOL
029F60:  45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 62 3A    EAN;..BEGIN...b:
029F70:  3D 4C 65 6E 3E 31 32 38 3B 0D 0A 09 49 46 20 62    =Len>128;...IF b
029F80:  20 54 48 45 4E 20 4C 65 6E 3A 3D 4C 65 6E 2D 31     THEN Len:=Len-1
029F90:  32 38 20 45 4E 44 3B 0D 0A 09 46 6F 75 6E 64 3A    28 END;...Found:
029FA0:  3D 46 69 6E 64 53 74 72 69 6E 67 28 43 75 72 46    =FindString(CurF
029FB0:  69 6C 65 50 74 72 5E 2C 62 29 3B 0D 0A 09 49 46    ilePtr^,b);...IF
029FC0:  20 46 6F 75 6E 64 20 41 4E 44 20 28 52 4C 65 6E     Found AND (RLen
029FD0:  3E 3D 30 29 20 54 48 45 4E 0D 0A 09 09 4D 61 72    >=0) THEN....Mar
029FE0:  6B 41 73 55 70 64 61 74 65 64 3B 0D 0A 09 09 44    kAsUpdated;....D
029FF0:  65 6C 43 68 61 72 73 28 43 75 72 46 69 6C 65 50    elChars(CurFileP
02A000:  74 72 5E 2C 4C 65 6E 29 20 0D 0A 09 09 49 6E 73    tr^,Len) ....Ins
02A010:  43 68 61 72 73 28 43 75 72 46 69 6C 65 50 74 72    Chars(CurFilePtr
02A020:  5E 2C 52 65 70 6C 61 63 65 2C 52 4C 65 6E 29 3B    ^,Replace,RLen);
02A030:  0D 0A 09 09 62 3A 3D 42 61 63 6B 4F 6E 65 43 68    ....b:=BackOneCh
02A040:  61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B    ar(CurFilePtr^);
02A050:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 65 44 69 73    ....END;...ReDis
02A060:  70 6C 61 79 3B 0D 0A 09 52 45 54 55 52 4E 20 46    play;...RETURN F
02A070:  6F 75 6E 64 3B 0D 0A 09 45 4E 44 20 53 65 61 72    ound;...END Sear
02A080:  63 68 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47    ch;..PROCEDURE G
02A090:  6F 54 6F 4C 61 62 65 6C 28 63 68 3A 43 48 41 52    oToLabel(ch:CHAR
02A0A0:  29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4C    );..BEGIN...IF L
02A0B0:  61 62 65 6C 4F 70 28 43 75 72 46 69 6C 65 50 74    abelOp(CurFilePt
02A0C0:  72 5E 2C 46 41 4C 53 45 2C 63 68 29 20 54 48 45    r^,FALSE,ch) THE
02A0D0:  4E 0D 0A 09 09 52 65 44 69 73 70 6C 61 79 3B 0D    N....ReDisplay;.
02A0E0:  0A 09 45 4C 53 45 0D 0A 09 09 45 72 72 6F 72 4D    ..ELSE....ErrorM
02A0F0:  65 73 73 61 67 65 28 27 20 4C 61 62 65 6C 20 6E    essage(' Label n
02A100:  53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 53 74    ScreenControl(St
02A110:  61 72 74 47 72 61 70 68 29 3B 0D 0A 09 09 46 4F    artGraph);....FO
02A120:  52 20 6B 3A 3D 31 20 54 4F 20 53 63 72 65 65 6E    R k:=1 TO Screen
02A130:  57 69 64 74 68 20 44 4F 20 0D 0A 09 09 09 53 63    Width DO .....Sc
02A140:  72 65 65 6E 43 6F 6E 74 72 6F 6C 28 48 6F 72 69    reenControl(Hori
02A150:  7A 6F 6E 74 61 6C 29 3B 0D 0A 09 09 09 45 4E 44    zontal);.....END
02A160:  3B 0D 0A 09 09 53 63 72 65 65 6E 43 6F 6E 74 72    ;....ScreenContr
02A170:  6F 6C 28 45 6E 64 47 72 61 70 68 29 3B 0D 0A 09    ol(EndGraph);...
02A180:  09 45 4E 44 3B 0D 0A 09 45 4E 44 20 53 65 74 57    .END;...END SetW
02A190:  69 6E 64 6F 77 73 3B 0D 0A 09 28 2A 70 75 74 20    indows;...(*put 
02A1A0:  61 20 6C 69 6E 65 20 62 65 74 77 65 65 6E 20 74    a line between t
02A1B0:  68 65 20 77 69 6E 64 6F 77 73 2A 29 0D 0A 0D 0A    he windows*)....
02A1C0:  56 41 52 09 63 68 3A 43 48 41 52 3B 0D 0A 09 70    VAR.ch:CHAR;...p
02A1D0:  6F 73 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A 09 63    os:Position;...c
02A1E0:  68 61 72 73 69 6E 2C 69 63 3A 49 4E 54 45 47 45    harsin,ic:INTEGE
02A1F0:  52 3B 0D 0A 09 6C 65 6E 2C 6D 6F 76 65 64 3A 49    R;...len,moved:I
02A200:  4E 54 45 47 45 52 3B 0D 0A 09 6C 69 6E 65 70 6F    NTEGER;...linepo
02A210:  73 2C 4C 65 66 74 4D 61 72 67 3A 43 41 52 44 49    s,LeftMarg:CARDI
02A220:  4E 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    NAL;..PROCEDURE 
02A230:  53 65 74 4C 65 66 74 4D 61 72 67 28 66 3A 45 64    SetLeftMarg(f:Ed
02A240:  69 74 46 69 6C 65 3B 77 69 6E 64 6F 77 3A 49 4E    itFile;window:IN
02A250:  54 45 47 45 52 3B 56 41 52 20 63 75 72 78 2C 63    TEGER;VAR curx,c
02A260:  75 72 79 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A    ury:CARDINAL);..
02A270:  42 45 47 49 4E 0D 0A 09 52 65 74 72 6C 69 6E 65    BEGIN...Retrline
02A280:  28 66 2C 6C 65 6E 2C 63 68 61 72 73 69 6E 2C 70    (f,len,charsin,p
02A290:  6F 73 2C 6D 6F 76 65 64 2C 30 29 3B 0D 0A 09 6C    os,moved,0);...l
02A2A0:  69 6E 65 70 6F 73 3A 3D 30 3B 0D 0A 09 46 4F 52    inepos:=0;...FOR
02A2B0:  20 69 63 3A 3D 30 20 54 4F 20 63 68 61 72 73 69     ic:=0 TO charsi
02A2C0:  6E 20 44 4F 0D 0A 09 09 52 65 61 64 4E 65 78 74    n DO....ReadNext
02A2D0:  43 68 61 72 28 70 6F 73 2C 63 68 29 3B 0D 0A 09    Char(pos,ch);...
02A2E0:  09 49 46 20 63 68 3D 30 39 78 20 54 48 45 4E 20    .IF ch=09x THEN 
02A2F0:  6C 69 6E 65 70 6F 73 3A 3D 49 41 4E 44 28 6C 69    linepos:=IAND(li
02A300:  6F 74 20 64 65 66 69 6E 65 64 27 2C 27 20 27 29    ot defined',' ')
02A310:  3B 0D 0A 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A    ;....ResetPos;..
02A320:  09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 47 6F 54    ..END;...END GoT
02A330:  6F 4C 61 62 65 6C 3B 09 09 0D 0A 42 45 47 49 4E    oLabel;....BEGIN
02A340:  0D 0A 09 43 75 72 72 65 6E 74 57 69 6E 64 6F 77    ...CurrentWindow
02A350:  3A 3D 30 3B 0D 0A 09 43 75 72 72 65 6E 74 46 69    :=0;...CurrentFi
02A360:  6C 65 3A 3D 30 3B 0D 0A 09 43 75 72 46 69 6C 65    le:=0;...CurFile
02A370:  50 74 72 3A 3D 50 45 64 69 74 46 69 6C 65 28 41    Ptr:=PEditFile(A
02A380:  44 52 28 46 69 6C 65 73 5B 31 5D 29 29 3B 0D 0A    DR(Files[1]));..
02A390:  09 45 4E 44 20 45 64 69 74 43 6F 6E 74 72 6F 6C    .END EditControl
02A3A0:  2E 0D 0A 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02A3B0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02A3C0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02A3D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02A3E0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02A3F0:  1A 1A 1A 1A 1A 1A FF 0F 00 00 00 00 00 00 00 00    ................
02A400:  64 6F 77 5D 3A 3D 54 68 69 73 78 3B 0D 0A 09 63    dow]:=Thisx;...c
02A410:  75 72 79 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F    ury[CurrentWindo
02A420:  77 5D 3A 3D 54 68 69 73 79 3B 0D 0A 09 52 65 44    w]:=Thisy;...ReD
02A430:  72 61 77 6E 3A 3D 54 52 55 45 3B 0D 0A 09 45 4E    rawn:=TRUE;...EN
02A440:  44 20 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F    D ReDisplayWindo
02A450:  77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65    w;..PROCEDURE Re
02A460:  44 69 73 70 6C 61 79 3B 0D 0A 42 45 47 49 4E 0D    Display;..BEGIN.
02A470:  0A 09 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F    ..ReDisplayWindo
02A480:  77 3B 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28    w;...SetLinePos(
02A490:  30 29 3B 0D 0A 09 43 68 61 6E 67 65 50 6F 73 3B    0);...ChangePos;
02A4A0:  0D 0A 09 45 4E 44 20 52 65 44 69 73 70 6C 61 79    ...END ReDisplay
02A4B0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68 61    ;..PROCEDURE Cha
02A4C0:  6E 67 65 4D 61 72 67 69 6E 28 49 6E 63 3A 49 4E    ngeMargin(Inc:IN
02A4D0:  54 45 47 45 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A    TEGER);..BEGIN..
02A4E0:  09 49 46 20 28 49 6E 63 3C 30 29 20 41 4E 44 20    .IF (Inc<0) AND 
02A4F0:  20 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72     (CurrentLeftMar
02A500:  6E 65 70 6F 73 2B 38 2C 30 66 66 66 38 68 29 0D    nepos+8,0fff8h).
02A510:  0A 09 09 45 4C 53 45 20 49 4E 43 28 6C 69 6E 65    ...ELSE INC(line
02A520:  70 6F 73 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44    pos) END;....END
02A530:  3B 0D 0A 09 4C 65 66 74 4D 61 72 67 3A 3D 30 3B    ;...LeftMarg:=0;
02A540:  0D 0A 09 57 48 49 4C 45 20 6C 69 6E 65 70 6F 73    ...WHILE linepos
02A550:  3E 28 4C 65 66 74 4D 61 72 67 2B 53 63 72 65 65    >(LeftMarg+Scree
02A560:  6E 57 69 64 74 68 29 20 44 4F 0D 0A 09 09 4C 65    nWidth) DO....Le
02A570:  66 74 4D 61 72 67 3A 3D 4C 65 66 74 4D 61 72 67    ftMarg:=LeftMarg
02A580:  2B 33 32 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C    +32;....END;...L
02A590:  65 66 74 4D 61 72 67 69 6E 5B 77 69 6E 64 6F 77    eftMargin[window
02A5A0:  5D 3A 3D 4C 65 66 74 4D 61 72 67 3B 0D 0A 09 45    ]:=LeftMarg;...E
02A5B0:  4E 44 20 53 65 74 4C 65 66 74 4D 61 72 67 3B 0D    ND SetLeftMarg;.
02A5C0:  0A 50 52 4F 43 45 44 55 52 45 20 44 69 73 70 6C    .PROCEDURE Displ
02A5D0:  61 79 46 69 6C 65 28 66 3A 45 64 69 74 46 69 6C    ayFile(f:EditFil
02A5E0:  65 3B 77 69 6E 64 6F 77 3A 49 4E 54 45 47 45 52    e;window:INTEGER
02A5F0:  3B 56 41 52 20 63 75 72 78 2C 63 75 72 79 3A 43    ;VAR curx,cury:C
02A600:  41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A 28 2A 09    ARDINAL);....(*.
02A610:  72 65 64 69 73 70 6C 61 79 20 61 73 20 6D 75 63    redisplay as muc
02A620:  68 20 74 65 78 74 20 61 73 20 77 69 6C 6C 20 66    h text as will f
02A630:  69 74 20 69 6E 20 74 68 65 20 77 69 6E 64 6F 77    it in the window
02A640:  0D 0A 09 66 6F 72 20 74 68 65 20 67 69 76 65 6E    ...for the given
02A650:  20 66 69 6C 65 20 73 74 61 72 74 69 6E 67 20 61     file starting a
02A660:  74 20 74 68 65 20 63 75 72 72 65 6E 74 20 70 6F    t the current po
02A670:  73 69 74 69 6F 6E 20 69 6E 20 74 68 65 20 66 69    sition in the fi
02A680:  6C 65 2A 29 0D 0A 56 41 52 09 69 2C 6A 2C 6B 2C    le*)..VAR.i,j,k,
02A690:  6C 69 6E 65 70 6F 73 3A 43 41 52 44 49 4E 41 4C    linepos:CARDINAL
02A6A0:  3B 0D 0A 09 6D 6F 76 65 64 6F 6E 65 3A 49 4E 54    ;...movedone:INT
02A6B0:  45 47 45 52 3B 09 0D 0A 09 73 74 61 72 74 6C 69    EGER;....startli
02A6C0:  6E 65 3A 49 4E 54 45 47 45 52 3B 20 28 2A 66 69    ne:INTEGER; (*fi
02A6D0:  72 73 74 20 6C 69 6E 65 20 6F 66 20 77 69 6E 64    rst line of wind
02A6E0:  6F 77 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 4C 65    ow*)..BEGIN...Le
02A6F0:  66 74 4D 61 72 67 3A 3D 4C 65 66 74 4D 61 72 67    ftMarg:=LeftMarg
02A700:  28 2A 09 54 68 69 73 20 69 73 20 74 68 65 20 64    (*.This is the d
02A710:  75 6D 62 20 73 63 72 65 65 6E 20 76 65 72 73 69    umb screen versi
02A720:  6F 6E 20 6F 66 20 45 64 69 74 44 69 73 70 6C 61    on of EditDispla
02A730:  79 0D 0A 0D 0A 09 49 74 20 75 73 65 73 20 77 72    y.....It uses wr
02A740:  69 74 65 73 20 6F 66 20 62 6C 61 6E 6B 73 20 74    ites of blanks t
02A750:  6F 20 63 6C 65 61 72 20 74 68 65 20 72 65 73 74    o clear the rest
02A760:  20 6F 66 20 65 61 63 68 20 6C 69 6E 65 20 69 6E     of each line in
02A770:  73 74 65 61 64 20 6F 66 0D 0A 09 44 65 6C 65 74    stead of...Delet
02A780:  65 20 74 6F 20 45 4F 4C 20 2A 29 0D 0A 0D 0A 0D    e to EOL *).....
02A790:  0A 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20    .IMPLEMENTATION 
02A7A0:  4D 4F 44 55 4C 45 20 45 64 69 74 44 69 73 70 6C    MODULE EditDispl
02A7B0:  61 79 3B 0D 0A 28 2A 09 44 69 73 70 6C 61 79 20    ay;..(*.Display 
02A7C0:  70 61 72 74 20 6F 66 20 61 20 66 69 6C 65 20 62    part of a file b
02A7D0:  65 69 6E 67 20 65 64 69 74 65 64 2A 29 0D 0A 46    eing edited*)..F
02A7E0:  52 4F 4D 09 53 43 52 45 45 4E 49 4F 20 49 4D 50    ROM.SCREENIO IMP
02A7F0:  4F 52 54 20 47 6F 74 6F 78 79 2C 53 63 72 65 65    ORT Gotoxy,Scree
02A800:  6E 43 6F 6E 74 72 6F 6C 2C 0D 0A 09 09 09 4D 61    nControl,.....Ma
02A810:  64 65 43 68 61 6E 67 65 2C 53 63 72 65 65 6E 57    deChange,ScreenW
02A820:  69 64 74 68 2C 53 63 72 65 65 6E 44 65 70 74 68    idth,ScreenDepth
02A830:  3B 0D 0A 46 52 4F 4D 20 09 54 65 72 6D 69 6E 61    ;..FROM .Termina
02A840:  6C 20 49 4D 50 4F 52 54 20 57 72 69 74 65 53 74    l IMPORT WriteSt
02A850:  72 69 6E 67 2C 57 72 69 74 65 2C 57 72 69 74 65    ring,Write,Write
02A860:  4C 6E 2C 52 65 61 64 2C 3B 0D 0A 46 52 4F 4D 20    Ln,Read,;..FROM 
02A870:  09 4D 61 6B 65 45 64 69 74 73 20 49 4D 50 4F 52    .MakeEdits IMPOR
02A880:  54 20 50 6F 73 69 74 69 6F 6E 2C 52 65 74 72 6C    T Position,Retrl
02A890:  69 6E 65 2C 52 65 61 64 4E 65 78 74 43 68 61 72    ine,ReadNextChar
02A8A0:  2C 45 72 72 6F 72 4C 69 73 74 2C 45 72 72 6F 72    ,ErrorList,Error
02A8B0:  43 6F 75 6E 74 2C 4C 61 62 65 6C 4F 70 3B 0D 0A    Count,LabelOp;..
02A8C0:  46 52 4F 4D 09 45 64 69 74 43 6F 6E 74 20 49 4D    FROM.EditCont IM
02A8D0:  50 4F 52 54 20 4C 65 66 74 4D 61 72 67 69 6E 2C    PORT LeftMargin,
02A8E0:  46 69 6C 65 73 2C 43 75 72 72 65 6E 74 57 69 6E    Files,CurrentWin
02A8F0:  64 6F 77 2C 43 75 72 72 65 6E 74 46 69 6C 65 2C    dow,CurrentFile,
02A900:  69 6E 5B 77 69 6E 64 6F 77 5D 3B 0D 0A 09 73 74    in[window];...st
02A910:  61 72 74 6C 69 6E 65 3A 3D 28 49 4E 54 45 47 45    artline:=(INTEGE
02A920:  52 28 4C 69 6E 65 73 50 65 72 57 69 6E 64 6F 77    R(LinesPerWindow
02A930:  29 2B 31 29 2A 28 77 69 6E 64 6F 77 2D 31 29 3B    )+1)*(window-1);
02A940:  0D 0A 09 47 6F 74 6F 78 79 28 30 2C 73 74 61 72    ...Gotoxy(0,star
02A950:  74 6C 69 6E 65 29 3B 0D 0A 0D 0A 09 28 2A 66 69    tline);.....(*fi
02A960:  72 73 74 20 6C 69 6E 65 20 6F 66 20 74 68 69 73    rst line of this
02A970:  20 77 69 6E 64 6F 77 2A 29 0D 0A 09 69 3A 3D 30     window*)...i:=0
02A980:  3B 09 28 2A 6C 69 6E 65 20 77 69 74 68 69 6E 20    ;.(*line within 
02A990:  77 69 6E 64 6F 77 2A 29 0D 0A 09 6B 3A 3D 4C 69    window*)...k:=Li
02A9A0:  6E 65 73 50 65 72 57 69 6E 64 6F 77 20 44 49 56    nesPerWindow DIV
02A9B0:  20 32 3B 0D 0A 09 52 65 74 72 6C 69 6E 65 28 66     2;...Retrline(f
02A9C0:  2C 6C 65 6E 2C 63 68 61 72 73 69 6E 2C 70 6F 73    ,len,charsin,pos
02A9D0:  2C 6D 6F 76 65 64 2C 2D 6B 29 3B 0D 0A 09 0D 0A    ,moved,-k);.....
02A9E0:  09 4C 4F 4F 50 0D 0A 0D 0A 09 09 28 2A 63 68 65    .LOOP......(*che
02A9F0:  63 6B 20 69 66 20 74 68 69 73 20 69 73 20 74 68    ck if this is th
02AA00:  65 20 6C 69 6E 65 20 77 65 20 77 65 72 65 20 70    e line we were p
02AA10:  6F 73 69 74 69 6F 6E 65 64 20 74 6F 20 75 70 6F    ositioned to upo
02AA20:  6E 20 65 6E 74 72 79 2A 29 0D 0A 0D 0A 09 09 6C    n entry*)......l
02AA30:  69 6E 65 70 6F 73 3A 3D 30 3B 0D 0A 09 09 6A 3A    inepos:=0;....j:
02AA40:  3D 30 3B 0D 0A 09 09 4C 4F 4F 50 0D 0A 09 09 09    =0;....LOOP.....
02AA50:  49 46 20 28 6D 6F 76 65 64 3D 30 29 20 41 4E 44    IF (moved=0) AND
02AA60:  20 28 6A 3C 3D 43 41 52 44 49 4E 41 4C 28 63 68     (j<=CARDINAL(ch
02AA70:  61 72 73 69 6E 29 29 20 54 48 45 4E 0D 0A 09 09    arsin)) THEN....
02AA80:  09 09 63 75 72 78 3A 3D 6C 69 6E 65 70 6F 73 2D    ..curx:=linepos-
02AA90:  4C 65 66 74 4D 61 72 67 3B 0D 0A 09 09 09 09 63    LeftMarg;......c
02AAA0:  75 72 79 3A 3D 69 2B 43 41 52 44 49 4E 41 4C 28    ury:=i+CARDINAL(
02AAB0:  73 74 61 72 74 6C 69 6E 65 29 0D 0A 09 09 09 09    startline)......
02AAC0:  45 4E 44 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 3B    END;.....INC(j);
02AAD0:  0D 0A 09 09 09 49 46 20 6A 3E 43 41 52 44 49 4E    .....IF j>CARDIN
02AAE0:  41 4C 28 6C 65 6E 29 20 54 48 45 4E 20 45 58 49    AL(len) THEN EXI
02AAF0:  54 20 45 4E 44 3B 0D 0A 0D 0A 09 09 09 28 2A 63    T END;.......(*c
02AB00:  54 68 69 73 78 2C 54 68 69 73 79 2C 0D 0A 09 09    Thisx,Thisy,....
02AB10:  09 63 75 72 78 2C 63 75 72 79 2C 52 65 44 69 73    .curx,cury,ReDis
02AB20:  70 6C 61 79 3B 0D 0A 46 52 4F 4D 20 09 49 6E 74    play;..FROM .Int
02AB30:  4C 6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E    Logic IMPORT IAN
02AB40:  44 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 20 49    D;..FROM.Files I
02AB50:  4D 50 4F 52 54 20 4C 6F 6F 6B 75 70 2C 43 6C 6F    MPORT Lookup,Clo
02AB60:  73 65 2C 46 49 4C 45 2C 52 65 61 64 42 6C 6F 63    se,FILE,ReadBloc
02AB70:  6B 3B 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D 20    k;..FROM.SYSTEM 
02AB80:  49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 43 4F 4E    IMPORT ADR;..CON
02AB90:  53 54 09 45 4F 46 3D 31 61 78 3B 0D 0A 50 52 4F    ST.EOF=1ax;..PRO
02ABA0:  43 45 44 55 52 45 20 43 6C 65 61 72 54 6F 45 6E    CEDURE ClearToEn
02ABB0:  64 28 69 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A    d(i:CARDINAL);..
02ABC0:  42 45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 43 6F    BEGIN...ScreenCo
02ABD0:  6E 74 72 6F 6C 28 44 65 6C 45 6F 6C 29 3B 0D 0A    ntrol(DelEol);..
02ABE0:  09 49 46 20 4E 4F 54 20 4D 61 64 65 43 68 61 6E    .IF NOT MadeChan
02ABF0:  67 65 20 54 48 45 4E 0D 0A 09 09 46 4F 52 20 69    ge THEN....FOR i
02AC00:  3A 3D 69 20 54 4F 20 53 63 72 65 65 6E 57 69 64    :=i TO ScreenWid
02AC10:  74 68 2D 31 20 44 4F 20 57 72 69 74 65 28 27 20    th-1 DO Write(' 
02AC20:  27 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D    ') END;....END;.
02AC30:  0A 09 45 4E 44 20 43 6C 65 61 72 54 6F 45 6E 64    ..END ClearToEnd
02AC40:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 72 72    ;..PROCEDURE Err
02AC50:  6F 72 4D 65 73 73 61 67 65 28 73 31 2C 73 32 3A    orMessage(s1,s2:
02AC60:  41 52 52 41 59 20 4F 46 20 43 48 41 52 29 3B 0D    ARRAY OF CHAR);.
02AC70:  0A 0D 0A 28 2A 09 44 69 73 70 6C 61 79 20 65 72    ...(*.Display er
02AC80:  72 6F 72 20 6D 65 73 73 61 67 65 20 61 74 20 62    ror message at b
02AC90:  6F 74 74 6F 6D 20 6F 66 20 73 63 72 65 65 6E 2A    ottom of screen*
02ACA0:  29 0D 0A 56 41 52 20 69 3A 49 4E 54 45 47 45 52    )..VAR i:INTEGER
02ACB0:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 6F 78    ;..BEGIN...Gotox
02ACC0:  79 28 30 2C 53 63 72 65 65 6E 44 65 70 74 68 2D    y(0,ScreenDepth-
02ACD0:  31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74    1);...ScreenCont
02ACE0:  72 6F 6C 28 52 69 6E 67 42 65 6C 6C 29 3B 0D 0A    rol(RingBell);..
02ACF0:  09 43 6C 65 61 72 54 6F 45 6E 64 28 31 29 3B 0D    .ClearToEnd(1);.
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 41 02 00 00 00 02    $.....R.$.A.....
02AD20:  24 00 46 02 00 00 00 02 24 00 42 02 00 00 00 02    $.F.....$.B.....
02AD30:  24 00 47 02 00 00 00 02 24 00 43 02 00 00 00 02    $.G.....$.C.....
02AD40:  24 00 48 02 00 00 00 02 24 00 44 02 00 00 00 02    $.H.....$.D.....
02AD50:  24 00 49 02 00 00 00 02 24 00 45 02 00 00 00 02    $.I.....$.E.....
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:  68 65 63 6B 20 66 6F 72 20 63 75 72 73 6F 72 20    heck for cursor 
02AE10:  6C 69 6E 65 2A 29 0D 0A 0D 0A 09 09 09 52 65 61    line*).......Rea
02AE20:  64 4E 65 78 74 43 68 61 72 28 70 6F 73 2C 63 68    dNextChar(pos,ch
02AE30:  29 3B 0D 0A 09 09 09 49 46 20 63 68 3D 30 39 78    );.....IF ch=09x
02AE40:  20 54 48 45 4E 20 0D 0A 09 09 09 09 52 45 50 45     THEN ......REPE
02AE50:  41 54 0D 0A 09 09 09 09 09 49 4E 43 28 6C 69 6E    AT.......INC(lin
02AE60:  65 70 6F 73 29 3B 0D 0A 09 09 09 09 09 49 46 20    epos);.......IF 
02AE70:  28 6C 69 6E 65 70 6F 73 3E 4C 65 66 74 4D 61 72    (linepos>LeftMar
02AE80:  67 29 20 0D 0A 09 09 09 09 09 41 4E 44 20 28 6C    g) .......AND (l
02AE90:  69 6E 65 70 6F 73 3C 28 53 63 72 65 65 6E 57 69    inepos<(ScreenWi
02AEA0:  64 74 68 2B 4C 65 66 74 4D 61 72 67 29 29 20 54    dth+LeftMarg)) T
02AEB0:  48 45 4E 20 0D 0A 09 09 09 09 09 09 57 72 69 74    HEN ........Writ
02AEC0:  65 28 27 20 27 29 20 0D 0A 09 09 09 09 09 09 45    e(' ') ........E
02AED0:  4E 44 3B 0D 0A 09 09 09 09 09 55 4E 54 49 4C 20    ND;.......UNTIL 
02AEE0:  49 41 4E 44 28 6C 69 6E 65 70 6F 73 2C 37 29 3D    IAND(linepos,7)=
02AEF0:  30 3B 0D 0A 09 09 09 45 4C 53 49 46 20 63 68 3D    0;.....ELSIF ch=
02AF00:  45 4F 46 20 54 48 45 4E 20 45 58 49 54 0D 0A 09    EOF THEN EXIT...
02AF10:  09 09 45 4C 53 45 20 0D 0A 09 09 09 09 49 4E 43    ..ELSE ......INC
02AF20:  28 6C 69 6E 65 70 6F 73 29 3B 0D 0A 09 09 09 09    (linepos);......
02AF30:  49 46 20 28 6C 69 6E 65 70 6F 73 3E 4C 65 66 74    IF (linepos>Left
02AF40:  4D 61 72 67 29 0D 0A 09 09 09 09 41 4E 44 20 28    Marg)......AND (
02AF50:  6C 69 6E 65 70 6F 73 3C 28 53 63 72 65 65 6E 57    linepos<(ScreenW
02AF60:  69 64 74 68 2B 4C 65 66 74 4D 61 72 67 29 29 20    idth+LeftMarg)) 
02AF70:  54 48 45 4E 20 0D 0A 09 09 09 09 09 57 72 69 74    THEN .......Writ
02AF80:  65 28 63 68 29 20 0D 0A 09 09 09 09 09 45 4E 44    e(ch) .......END
02AF90:  3B 0D 0A 09 09 09 09 45 4E 44 3B 28 2A 49 46 20    ;......END;(*IF 
02AFA0:  63 68 3D 76 61 72 69 6F 75 73 20 74 68 69 6E 67    ch=various thing
02AFB0:  73 2A 29 0D 0A 09 09 09 45 4E 44 20 28 2A 69 6E    s*).....END (*in
02AFC0:  6E 65 72 20 6C 6F 6F 70 2A 29 3B 0D 0A 09 09 49    ner loop*);....I
02AFD0:  4E 43 28 69 29 3B 0D 0A 09 09 49 46 20 6C 69 6E    NC(i);....IF lin
02AFE0:  65 70 6F 73 3E 3D 4C 65 66 74 4D 61 72 67 20 54    epos>=LeftMarg T
02AFF0:  48 45 4E 0D 0A 09 09 09 43 6C 65 61 72 54 6F 45    HEN.....ClearToE
02B000:  6F 20 62 6C 6F 63 6B 73 20 6F 66 20 74 68 65 20    o blocks of the 
02B010:  65 72 72 6F 72 20 0D 0A 09 09 20 20 6D 65 73 73    error ....  mess
02B020:  61 67 65 20 66 69 6C 65 2C 20 63 6F 75 6E 74 69    age file, counti
02B030:  6E 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73    n the characters
02B040:  20 70 72 65 63 65 64 69 6E 67 20 74 68 65 0D 0A     preceding the..
02B050:  09 09 20 20 65 72 72 6F 72 20 65 6D 73 73 61 67    ..  error emssag
02B060:  65 20 77 65 20 77 61 6E 74 20 2A 29 0D 0A 09 09    e we want *)....
02B070:  52 65 61 64 42 6C 6F 63 6B 28 66 2C 41 44 52 28    ReadBlock(f,ADR(
02B080:  62 29 2C 30 2C 31 32 38 2C 72 65 70 6C 79 29 3B    b),0,128,reply);
02B090:  0D 0A 09 09 6A 3A 3D 45 72 72 6F 72 4E 75 6D 62    ....j:=ErrorNumb
02B0A0:  65 72 3B 0D 0A 09 09 49 46 20 45 72 72 6F 72 4E    er;....IF ErrorN
02B0B0:  75 6D 62 65 72 3E 31 32 38 20 54 48 45 4E 0D 0A    umber>128 THEN..
02B0C0:  09 09 09 69 3A 3D 43 6F 75 6E 74 28 31 32 38 29    ...i:=Count(128)
02B0D0:  3B 0D 0A 09 09 09 52 65 61 64 42 6C 6F 63 6B 28    ;.....ReadBlock(
02B0E0:  66 2C 41 44 52 28 62 29 2C 31 2C 31 32 38 2C 72    f,ADR(b),1,128,r
02B0F0:  65 70 6C 79 29 3B 0D 0A 09 09 09 6A 3A 3D 6A 2D    eply);.....j:=j-
02B100:  31 32 38 0D 0A 09 09 45 4C 53 45 0D 0A 09 09 09    128....ELSE.....
02B110:  69 3A 3D 30 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A    i:=0;.....END;..
02B120:  09 09 69 3A 3D 69 2B 43 6F 75 6E 74 28 6A 2D 31    ..i:=i+Count(j-1
02B130:  29 3B 0D 0A 09 09 4C 65 6E 67 74 68 3A 3D 4F 52    );....Length:=OR
02B140:  44 28 62 5B 6A 2D 31 5D 29 3B 0D 0A 09 09 6A 3A    D(b[j-1]);....j:
02B150:  3D 69 20 44 49 56 20 31 32 38 3B 20 28 2A 62 6C    =i DIV 128; (*bl
02B160:  6F 63 6B 20 74 6F 20 72 65 61 64 2A 29 0D 0A 09    ock to read*)...
02B170:  09 69 3A 3D 69 20 2D 20 31 32 38 2A 6A 3B 20 28    .i:=i - 128*j; (
02B180:  2A 6F 66 66 73 65 74 20 6F 66 20 66 69 72 73 74    *offset of first
02B190:  20 63 68 61 72 61 63 74 65 72 20 69 6E 20 62 6C     character in bl
02B1A0:  6F 63 6B 2A 29 0D 0A 09 09 52 65 61 64 42 6C 6F    ock*)....ReadBlo
02B1B0:  63 6B 28 66 2C 41 44 52 28 62 29 2C 6A 2B 32 2C    ck(f,ADR(b),j+2,
02B1C0:  31 32 38 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 46    128,reply);....F
02B1D0:  4F 52 20 6B 3A 3D 30 20 54 4F 20 4C 65 6E 67 74    OR k:=0 TO Lengt
02B1E0:  68 2D 31 20 44 4F 0D 0A 09 09 09 49 46 20 69 3D    h-1 DO.....IF i=
02B1F0:  31 32 38 20 54 48 45 4E 20 0D 0A 09 09 09 09 49    128 THEN ......I
02B200:  6E 64 28 6C 69 6E 65 70 6F 73 2B 31 2D 4C 65 66    nd(linepos+1-Lef
02B210:  74 4D 61 72 67 29 3B 0D 0A 09 09 45 4C 53 45 0D    tMarg);....ELSE.
02B220:  0A 09 09 09 43 6C 65 61 72 54 6F 45 6E 64 28 31    ....ClearToEnd(1
02B230:  29 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46    ).....END;....IF
02B240:  20 69 3D 4C 69 6E 65 73 50 65 72 57 69 6E 64 6F     i=LinesPerWindo
02B250:  77 20 54 48 45 4E 20 45 58 49 54 0D 0A 09 09 45    w THEN EXIT....E
02B260:  4C 53 45 20 0D 0A 09 09 09 57 72 69 74 65 4C 6E    LSE .....WriteLn
02B270:  3B 0D 0A 09 09 09 6C 69 6E 65 70 6F 73 3A 3D 30    ;.....linepos:=0
02B280:  3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 4E    ;.....END;....IN
02B290:  43 28 6D 6F 76 65 64 29 3B 09 0D 0A 09 09 52 65    C(moved);.....Re
02B2A0:  74 72 6C 69 6E 65 28 66 2C 6C 65 6E 2C 69 63 2C    trline(f,len,ic,
02B2B0:  70 6F 73 2C 6D 6F 76 65 64 6F 6E 65 2C 31 29 3B    pos,movedone,1);
02B2C0:  0D 0A 09 09 49 46 20 6D 6F 76 65 64 6F 6E 65 3D    ....IF movedone=
02B2D0:  30 20 54 48 45 4E 0D 0A 09 09 09 46 4F 52 20 69    0 THEN.....FOR i
02B2E0:  3A 3D 69 2B 31 20 54 4F 20 4C 69 6E 65 73 50 65    :=i+1 TO LinesPe
02B2F0:  72 57 69 6E 64 6F 77 20 44 4F 0D 0A 09 09 09 09    rWindow DO......
02B300:  43 6C 65 61 72 54 6F 45 6E 64 28 31 29 3B 0D 0A    ClearToEnd(1);..
02B310:  09 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09    ....WriteLn;....
02B320:  09 09 45 4E 44 3B 0D 0A 09 09 09 45 58 49 54 0D    ..END;.....EXIT.
02B330:  0A 09 09 09 45 4E 44 0D 0A 09 09 45 4E 44 3B 28    ....END....END;(
02B340:  2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 44 69    *LOOP*)...END Di
02B350:  73 70 6C 61 79 46 69 6C 65 3B 0D 0A 50 52 4F 43    splayFile;..PROC
02B360:  45 44 55 52 45 20 44 69 73 70 6C 61 79 45 72 72    EDURE DisplayErr
02B370:  6F 72 3B 0D 0A 0D 0A 28 2A 09 54 68 65 20 65 72    or;....(*.The er
02B380:  72 6F 72 20 6D 65 73 73 61 67 65 20 66 69 6C 65    ror message file
02B390:  20 63 6F 6E 74 61 69 6E 73 20 74 68 65 20 6D 65     contains the me
02B3A0:  73 73 61 67 65 73 2C 20 0D 0A 0D 0A 09 54 68 65    ssages, .....The
02B3B0:  20 66 69 72 73 74 20 74 77 6F 20 62 6C 6F 63 6B     first two block
02B3C0:  73 20 67 69 76 65 20 74 68 65 20 6C 65 6E 67 74    s give the lengt
02B3D0:  68 73 20 6F 66 20 74 68 65 20 65 72 72 6F 72 20    hs of the error 
02B3E0:  6D 65 73 73 61 67 65 73 0D 0A 09 54 68 65 20 72    messages...The r
02B3F0:  65 6D 61 69 6E 69 6E 67 20 62 6C 6F 63 6B 73 20    emaining blocks 
02B400:  4E 43 28 6A 29 3B 0D 0A 09 09 09 09 52 65 61 64    NC(j);......Read
02B410:  42 6C 6F 63 6B 28 66 2C 41 44 52 28 62 29 2C 6A    Block(f,ADR(b),j
02B420:  2B 32 2C 31 32 38 2C 72 65 70 6C 79 29 20 0D 0A    +2,128,reply) ..
02B430:  09 09 09 09 69 3A 3D 30 3B 0D 0A 09 09 09 09 45    ....i:=0;......E
02B440:  4E 44 3B 0D 0A 09 09 09 74 5B 6B 5D 3A 3D 62 5B    ND;.....t[k]:=b[
02B450:  69 5D 3B 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D    i];.....INC(i);.
02B460:  0A 09 09 09 45 4E 44 3B 0D 0A 09 09 74 5B 4C 65    ....END;....t[Le
02B470:  6E 67 74 68 5D 3A 3D 30 63 3B 0D 0A 09 09 57 72    ngth]:=0c;....Wr
02B480:  69 74 65 53 74 72 69 6E 67 28 74 29 3B 0D 0A 09    iteString(t);...
02B490:  45 4C 53 45 0D 0A 09 09 57 72 69 74 65 53 74 72    ELSE....WriteStr
02B4A0:  69 6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F 74 20    ing(' Could not 
02B4B0:  6F 70 65 6E 20 65 72 72 6F 72 20 6D 65 73 73 61    open error messa
02B4C0:  67 65 73 20 66 69 6C 65 27 29 3B 0D 0A 09 09 45    ges file');....E
02B4D0:  4E 44 3B 0D 0A 09 62 6C 3A 3D 4C 61 62 65 6C 4F    ND;...bl:=LabelO
02B4E0:  70 28 46 69 6C 65 73 5B 43 75 72 72 65 6E 74 46    p(Files[CurrentF
02B4F0:  69 6C 65 5D 2C 46 41 4C 53 45 2C 43 48 52 28 45    ile],FALSE,CHR(E
02B500:  72 72 6F 72 4F 72 64 69 6E 61 6C 2B 30 62 30 68    rrorOrdinal+0b0h
02B510:  29 29 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 3B    ));...ReDisplay;
02B520:  0D 0A 28 2A 09 44 69 73 70 6C 61 79 46 69 6C 65    ..(*.DisplayFile
02B530:  28 46 69 6C 65 73 5B 43 75 72 72 65 6E 74 46 69    (Files[CurrentFi
02B540:  6C 65 5D 2C 43 75 72 72 65 6E 74 57 69 6E 64 6F    le],CurrentWindo
02B550:  77 2C 54 68 69 73 78 2C 54 68 69 73 79 29 3B 2A    w,Thisx,Thisy);*
02B560:  29 0D 0A 09 47 6F 74 6F 78 79 28 54 68 69 73 78    )...Gotoxy(Thisx
02B570:  2C 54 68 69 73 79 29 3B 0D 0A 09 63 75 72 78 5B    ,Thisy);...curx[
02B580:  43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D    CurrentWindow]:=
02B590:  54 68 69 73 78 3B 0D 0A 09 63 75 72 79 5B 43 75    Thisx;...cury[Cu
02B5A0:  72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D 54 68    rrentWindow]:=Th
02B5B0:  69 73 79 3B 0D 0A 09 45 4E 44 20 44 69 73 70 6C    isy;...END Displ
02B5C0:  61 79 45 72 72 6F 72 3B 09 0D 0A 42 45 47 49 4E    ayError;...BEGIN
02B5D0:  0D 0A 09 57 69 6E 64 6F 77 73 3A 3D 30 3B 0D 0A    ...Windows:=0;..
02B5E0:  09 45 4E 44 20 45 64 69 74 44 69 73 70 6C 61 79    .END EditDisplay
02B5F0:  2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02B600:  67 69 76 65 20 74 68 65 20 74 65 78 74 20 6F 66    give the text of
02B610:  20 74 68 65 20 65 72 72 6F 72 20 6D 65 73 73 61     the error messa
02B620:  67 65 73 20 2A 29 0D 0A 54 59 50 45 09 54 65 78    ges *)..TYPE.Tex
02B630:  74 3D 41 52 52 41 59 5B 30 2E 2E 36 33 5D 20 4F    t=ARRAY[0..63] O
02B640:  46 20 43 48 41 52 3B 0D 0A 0D 0A 56 41 52 09 66    F CHAR;....VAR.f
02B650:  3A 46 49 4C 45 3B 09 09 09 28 2A 46 49 4C 45 20    :FILE;...(*FILE 
02B660:  69 73 20 61 20 74 79 70 65 20 65 78 70 6F 72 74    is a type export
02B670:  65 64 20 66 72 6F 6D 20 74 68 65 20 6D 6F 64 75    ed from the modu
02B680:  6C 65 20 46 69 6C 65 73 2A 29 0D 0A 0D 0A 09 62    le Files*).....b
02B690:  3A 41 52 52 41 59 20 5B 30 2E 2E 31 32 37 5D 20    :ARRAY [0..127] 
02B6A0:  4F 46 20 43 48 41 52 3B 0D 0A 09 69 2C 6A 2C 6B    OF CHAR;...i,j,k
02B6B0:  2C 4C 65 6E 67 74 68 3A 43 41 52 44 49 4E 41 4C    ,Length:CARDINAL
02B6C0:  3B 0D 0A 09 74 3A 54 65 78 74 3B 0D 0A 09 45 72    ;...t:Text;...Er
02B6D0:  72 6F 72 4E 75 6D 62 65 72 3A 43 41 52 44 49 4E    rorNumber:CARDIN
02B6E0:  41 4C 3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45    AL;...reply:INTE
02B6F0:  47 45 52 3B 0D 0A 09 62 6C 3A 42 4F 4F 4C 45 41    GER;...bl:BOOLEA
02B700:  4E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6F    N;..PROCEDURE Co
02B710:  75 6E 74 28 6B 3A 43 41 52 44 49 4E 41 4C 29 3A    unt(k:CARDINAL):
02B720:  43 41 52 44 49 4E 41 4C 3B 0D 0A 56 41 52 09 69    CARDINAL;..VAR.i
02B730:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49    :CARDINAL;..BEGI
02B740:  4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 49 46 20 6B    N...i:=0;...IF k
02B750:  3D 30 20 54 48 45 4E 20 52 45 54 55 52 4E 20 30    =0 THEN RETURN 0
02B760:  20 45 4E 44 3B 0D 0A 09 46 4F 52 20 6B 3A 3D 6B     END;...FOR k:=k
02B770:  2D 31 20 54 4F 20 30 20 42 59 20 2D 31 20 44 4F    -1 TO 0 BY -1 DO
02B780:  0D 0A 09 09 69 3A 3D 69 2B 4F 52 44 28 62 5B 6B    ....i:=i+ORD(b[k
02B790:  5D 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45    ]);....END;...RE
02B7A0:  54 55 52 4E 20 69 0D 0A 09 45 4E 44 20 43 6F 75    TURN i...END Cou
02B7B0:  6E 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 57    nt;..PROCEDURE W
02B7C0:  72 69 74 65 43 61 72 64 28 69 3A 43 41 52 44 49    riteCard(i:CARDI
02B7D0:  4E 41 4C 29 3B 0D 0A 56 41 52 09 74 3A 41 52 52    NAL);..VAR.t:ARR
02B7E0:  41 59 5B 30 2E 2E 33 5D 20 4F 46 20 43 48 41 52    AY[0..3] OF CHAR
02B7F0:  3B 0D 0A 09 6A 2C 6B 3A 43 41 52 44 49 4E 41 4C    ;...j,k:CARDINAL
02B800:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02B810:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 5D 3A 3D 44 6F    ...........]:=Do
02B820:  46 69 6E 64 3B 09 09 28 2A 43 74 72 6C 20 4C 2A    Find;..(*Ctrl L*
02B830:  29 0A 09 4D 61 69 6E 54 61 62 6C 65 5B 31 66 78    )..MainTable[1fx
02B840:  5D 3A 3D 44 65 6C 42 61 63 6B 3B 09 28 2A 5E 2D    ]:=DelBack;.(*^-
02B850:  20 6F 6E 20 4F 73 62 6F 72 6E 65 20 31 2A 29 0D     on Osborne 1*).
02B860:  0A 0D 0A 09 28 2A 09 54 68 65 20 6E 65 78 74 20    ....(*.The next 
02B870:  6B 65 79 2C 20 20 61 73 73 69 67 6E 65 64 20 74    key,  assigned t
02B880:  69 73 78 3E 3D 28 53 63 72 65 65 6E 57 69 64 74    isx>=(ScreenWidt
02B890:  68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 43 68    h-1) THEN.....Ch
02B8A0:  61 6E 67 65 4D 61 72 67 69 6E 28 33 32 29 3B 0D    angeMargin(32);.
02B8B0:  0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 20 4E    ....END;....IF N
02B8C0:  4F 54 20 52 65 44 72 61 77 6E 20 54 48 45 4E 0D    OT ReDrawn THEN.
02B8D0:  0A 09 09 09 49 46 20 4C 69 6E 65 50 6F 73 3C 4C    ....IF LinePos<L
02B8E0:  69 6E 65 4C 65 6E 20 54 48 45 4E 0D 0A 09 09 09    ineLen THEN.....
02B8F0:  09 62 3A 3D 42 61 63 6B 4F 6E 65 43 68 61 72 28    .b:=BackOneChar(
02B900:  43 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09    CurFilePtr^);...
02B910:  09 09 09 57 72 69 74 65 50 61 72 74 4C 69 6E 65    ...WritePartLine
02B920:  28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67    (CurrentLeftMarg
02B930:  69 6E 2B 54 68 69 73 78 2B 31 29 3B 0D 0A 09 09    in+Thisx+1);....
02B940:  09 09 49 4E 43 28 54 68 69 73 78 29 3B 0D 0A 09    ..INC(Thisx);...
02B950:  09 09 09 62 3A 3D 46 6F 72 77 61 72 64 4F 6E 65    ...b:=ForwardOne
02B960:  43 68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E    Char(CurFilePtr^
02B970:  29 3B 09 09 09 09 0D 0A 09 09 09 45 4C 53 45 0D    );.........ELSE.
02B980:  0A 09 09 09 09 57 72 69 74 65 28 63 68 29 3B 0D    .....Write(ch);.
02B990:  0A 09 09 09 09 49 4E 43 28 54 68 69 73 78 29 3B    .....INC(Thisx);
02B9A0:  0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45    ......END;.....E
02B9B0:  4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 65    ND;....END;...Re
02B9C0:  73 65 74 50 6F 73 3B 0D 0A 09 45 4E 44 20 49 6E    setPos;...END In
02B9D0:  73 4F 6E 65 43 68 61 72 3B 0D 0A 50 52 4F 43 45    sOneChar;..PROCE
02B9E0:  44 55 52 45 20 44 65 6C 4F 6E 65 43 68 61 72 3B    DURE DelOneChar;
02B9F0:  0D 0A 42 45 47 49 4E 0D 0A 09 4D 61 72 6B 41 73    ..BEGIN...MarkAs
02BA00:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 6B 3A 3D 48 49    ;..BEGIN...k:=HI
02BA10:  47 48 28 74 29 3B 0D 0A 09 57 48 49 4C 45 20 69    GH(t);...WHILE i
02BA20:  3C 3E 30 20 44 4F 0D 0A 09 09 6A 3A 3D 69 20 44    <>0 DO....j:=i D
02BA30:  49 56 20 31 30 3B 0D 0A 09 09 74 5B 6B 5D 3A 3D    IV 10;....t[k]:=
02BA40:  43 48 52 28 4F 52 44 28 27 30 27 29 2B 69 2D 31    CHR(ORD('0')+i-1
02BA50:  30 2A 6A 29 3B 0D 0A 09 09 69 3A 3D 6A 3B 0D 0A    0*j);....i:=j;..
02BA60:  09 09 44 45 43 28 6B 29 3B 0D 0A 09 09 45 4E 44    ..DEC(k);....END
02BA70:  3B 0D 0A 09 46 4F 52 20 6B 3A 3D 6B 2B 31 20 54    ;...FOR k:=k+1 T
02BA80:  4F 20 48 49 47 48 28 74 29 20 44 4F 20 57 72 69    O HIGH(t) DO Wri
02BA90:  74 65 28 74 5B 6B 5D 29 20 45 4E 44 3B 0D 0A 09    te(t[k]) END;...
02BAA0:  45 4E 44 20 57 72 69 74 65 43 61 72 64 3B 0D 0A    END WriteCard;..
02BAB0:  42 45 47 49 4E 0D 0A 09 49 46 20 45 72 72 6F 72    BEGIN...IF Error
02BAC0:  4F 72 64 69 6E 61 6C 3E 3D 45 72 72 6F 72 43 6F    Ordinal>=ErrorCo
02BAD0:  75 6E 74 20 54 48 45 4E 20 52 45 54 55 52 4E 20    unt THEN RETURN 
02BAE0:  45 4E 44 3B 0D 0A 09 47 6F 74 6F 78 79 28 30 2C    END;...Gotoxy(0,
02BAF0:  53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 3B 0D    ScreenDepth-1);.
02BB00:  0A 09 45 72 72 6F 72 4E 75 6D 62 65 72 3A 3D 45    ..ErrorNumber:=E
02BB10:  72 72 6F 72 4C 69 73 74 5B 45 72 72 6F 72 4F 72    rrorList[ErrorOr
02BB20:  64 69 6E 61 6C 5D 2E 45 72 72 6F 72 4E 75 6D 3B    dinal].ErrorNum;
02BB30:  0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C    ...ScreenControl
02BB40:  28 44 65 6C 45 6F 6C 29 3B 0D 0A 09 57 72 69 74    (DelEol);...Writ
02BB50:  65 53 74 72 69 6E 67 28 27 45 72 72 6F 72 20 27    eString('Error '
02BB60:  29 3B 0D 0A 09 57 72 69 74 65 43 61 72 64 28 45    );...WriteCard(E
02BB70:  72 72 6F 72 4E 75 6D 62 65 72 29 3B 0D 0A 09 57    rrorNumber);...W
02BB80:  72 69 74 65 53 74 72 69 6E 67 28 27 28 27 29 3B    riteString('(');
02BB90:  57 72 69 74 65 43 61 72 64 28 45 72 72 6F 72 4F    WriteCard(ErrorO
02BBA0:  72 64 69 6E 61 6C 2B 31 29 3B 0D 0A 09 57 72 69    rdinal+1);...Wri
02BBB0:  74 65 53 74 72 69 6E 67 28 27 20 6F 66 20 27 29    teString(' of ')
02BBC0:  3B 57 72 69 74 65 43 61 72 64 28 45 72 72 6F 72    ;WriteCard(Error
02BBD0:  43 6F 75 6E 74 29 3B 0D 0A 09 57 72 69 74 65 53    Count);...WriteS
02BBE0:  74 72 69 6E 67 28 27 29 20 3A 27 29 3B 0D 0A 09    tring(') :');...
02BBF0:  4C 6F 6F 6B 75 70 28 66 2C 27 45 52 52 4D 53 47    Lookup(f,'ERRMSG
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:  2E 44 41 54 20 27 2C 72 65 70 6C 79 29 3B 0D 0A    .DAT ',reply);..
02BE10:  0D 0A 09 28 2A 4C 6F 6F 6B 75 70 20 6F 70 65 6E    ...(*Lookup open
02BE20:  73 20 74 68 65 20 66 69 6C 65 20 66 6F 72 20 69    s the file for i
02BE30:  6E 70 75 74 2F 6F 75 74 70 75 74 0D 0A 09 20 20    nput/output...  
02BE40:  72 65 70 6C 79 20 72 65 74 75 72 6E 73 20 7A 65    reply returns ze
02BE50:  72 6F 20 69 66 20 6E 6F 20 66 69 6C 65 20 69 73    ro if no file is
02BE60:  20 66 6F 75 6E 64 0D 0A 09 20 20 61 20 64 65 76     found...  a dev
02BE70:  69 63 65 20 6E 61 6D 65 20 63 61 6E 20 62 65 20    ice name can be 
02BE80:  75 73 65 64 20 69 6E 20 66 72 6F 6E 74 20 6F 66    used in front of
02BE90:  20 74 68 65 20 66 69 6C 65 20 6E 61 6D 65 0D 0A     the file name..
02BEA0:  09 20 49 6E 20 66 61 63 74 2C 20 79 6F 75 20 63    . In fact, you c
02BEB0:  61 6E 20 75 73 65 20 61 20 6E 6F 6E 2D 64 69 73    an use a non-dis
02BEC0:  63 20 66 69 6C 65 20 6E 61 6D 65 20 28 65 67 20    c file name (eg 
02BED0:  50 55 4E 3A 20 6F 72 20 43 4F 4E 3A 29 0D 0A 09    PUN: or CON:)...
02BEE0:  20 62 75 74 20 69 66 20 79 6F 75 20 64 6F 20 74     but if you do t
02BEF0:  68 69 73 2C 20 79 6F 75 20 6D 75 73 74 20 64 6F    his, you must do
02BF00:  20 79 6F 75 72 20 49 4F 20 74 68 72 6F 75 67 68     your IO through
02BF10:  20 74 68 65 20 6D 6F 64 75 6C 65 0D 0A 09 20 53     the module... S
02BF20:  74 72 65 61 6D 73 20 28 6F 72 20 49 6E 4F 75 74    treams (or InOut
02BF30:  2C 20 77 68 69 63 68 20 63 61 6C 6C 73 20 73 74    , which calls st
02BF40:  72 65 61 6D 73 29 2C 20 61 73 20 74 68 65 20 49    reams), as the I
02BF50:  4F 20 74 6F 20 74 68 65 0D 0A 09 20 73 65 72 69    O to the... seri
02BF60:  61 6C 20 64 65 76 69 63 65 73 20 69 73 20 70 65    al devices is pe
02BF70:  72 66 6F 72 6D 65 64 20 62 79 20 74 68 61 74 20    rformed by that 
02BF80:  6D 6F 64 75 6C 65 20 28 69 74 20 63 61 6C 6C 73    module (it calls
02BF90:  20 46 69 6C 65 73 0D 0A 09 20 74 6F 20 64 6F 20     Files... to do 
02BFA0:  49 4F 20 74 6F 20 64 69 73 63 20 64 65 76 69 63    IO to disc devic
02BFB0:  65 73 29 0D 0A 2A 29 0D 0A 09 49 46 20 72 65 70    es)..*)...IF rep
02BFC0:  6C 79 3D 30 20 54 48 45 4E 09 09 28 2A 4F 4B 20    ly=0 THEN..(*OK 
02BFD0:  2D 20 66 69 6C 65 20 66 6F 75 6E 64 2A 29 0D 0A    - file found*)..
02BFE0:  09 09 0D 0A 0D 0A 09 09 28 2A 72 65 61 64 20 74    ........(*read t
02BFF0:  68 65 20 66 69 72 73 74 20 31 20 6F 72 20 74 77    he first 1 or tw
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 41 02 00 00 00 02    %.....R.%.A.....
02C020:  25 00 46 02 00 00 00 02 25 00 42 02 00 00 00 02    %.F.....%.B.....
02C030:  25 00 47 02 00 00 00 02 25 00 43 02 00 00 00 02    %.G.....%.C.....
02C040:  25 00 48 02 00 00 00 02 25 00 44 02 00 00 00 02    %.H.....%.D.....
02C050:  25 00 49 02 00 00 00 02 25 00 45 02 00 00 00 02    %.I.....%.E.....
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 41 02 00 00 00 02    &.....R.&.A.....
02D320:  26 00 46 02 00 00 00 02 26 00 42 02 00 00 00 02    &.F.....&.B.....
02D330:  26 00 47 02 00 00 00 02 26 00 43 02 00 00 00 02    &.G.....&.C.....
02D340:  26 00 48 02 00 00 00 02 26 00 44 02 00 00 00 02    &.H.....&.D.....
02D350:  26 00 49 02 00 00 00 02 26 00 45 02 00 00 00 02    &.I.....&.E.....
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 41 02 00 00 00 02    '.....R.'.A.....
02E620:  27 00 46 02 00 00 00 02 27 00 42 02 00 00 00 02    '.F.....'.B.....
02E630:  27 00 47 02 00 00 00 02 27 00 43 02 00 00 00 02    '.G.....'.C.....
02E640:  27 00 48 02 00 00 00 02 27 00 44 02 00 00 00 02    '.H.....'.D.....
02E650:  27 00 49 02 00 00 00 02 27 00 45 02 00 00 00 02    '.I.....'.E.....
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    ................
02F900:  4F 66 66 73 65 74 2D 49 6E 66 6F 0D 0A 00 00 BB    Offset-Info.....
02F910:  18 AF 00 4B 03 E6 05 81 08 1C 0B B6 0D 52 10 ED    ...K.........R..
02F920:  12 86 15 BA 18 B1 00 4A 03 E4 05 81 08 1D 0B BA    .......J........
02F930:  0D 55 10 EF 12 8A 15 B9 18 B0 00 4B 03 E5 05 80    .U.........K....
02F940:  08 1B 0B B7 0D 52 10 EC 12 88 15 B9 18 B0 00 49    .....R.........I
02F950:  03 E4 05 81 08 1D 0B BB 0D 57 10 F0 12 89 15 BA    .........W......
02F960:  18 AF 00 4A 03 E6 05 82 08 1C 0B B7 0D 53 10 ED    ...J.........S..
02F970:  12 87 15 BA 18 AF 00 48 03 E1 05 7E 08 1A 0B B6    .......H...~....
02F980:  0D 53 10 ED 12 87 15 B8 18 AF 00 49 03 E4 05 81    .S.........I....
02F990:  08 1C 0B B6 0D 51 10 EB 12 87 15 B7 18 AE 00 46    .....Q.........F
02F9A0:  03 DF 05 7C 08 1A 0B B7 0D 54 10 EC 12 86 15 B8    ...|.....T......
02F9B0:  18 B0 00 4B 03 EB 05 81 08 1E 0B B8 0D 53 10 EC    ...K.........S..
02F9C0:  12 86 15 B6 18 B0 00 49 03 E2 05 7D 08 19 0B B5    .......I...}....
02F9D0:  0D 51 10 EC 12 85 15 B5 18 AF 00 49 03 E4 05 7F    .Q.........I....
02F9E0:  08 1A 0B B4 0D 4E 10 E8 12 84 15 B6 18 AE 00 46    .....N.........F
02F9F0:  03 E1 05 7C 08 19 0B B4 0D 51 10 ED 12 85 15 B5    ...|.....Q......
02FA00:  18 B0 00 49 03 E6 05 80 08 1C 0B B6 0D 50 10 EA    ...I.........P..
02FA10:  12 84 15 B2 18 B0 00 48 03 E1 05 7B 08 16 0B B3    .......H...{....
02FA20:  0D 4E 10 E8 12 82 15 B0 18 B0 00 49 03 E4 05 7F    .N.........I....
02FA30:  08 1A 0B B4 0D 4E 10 E7 12 81 15 B2 18 B0 00 49    .....N.........I
02FA40:  03 E3 05 7E 08 19 0B B4 0D 50 10 EC 12 86 15 B0    ...~.....P......
02FA50:  18 B0 00 49 03 E4 05 81 08 1E 0B B9 0D 52 10 EB    ...I.........R..
02FA60:  12 84 15 AE 18 AE 00 46 03 DE 05 79 08 14 0B AF    .......F...y....
02FA70:  0D 49 10 E2 12 7E 15 AE 18 AF 00 48 03 E1 05 7D    .I...~.....H...}
02FA80:  08 19 0B B5 0D 4F 10 E6 12 7F 15 AF 18 AF 00 49    .....O.........I
02FA90:  03 E2 05 7C 08 18 0B B3 0D 4F 10 EA 12 84 15 AC    ...|.....O......
02FAA0:  18 B0 00 49 03 E3 05 7F 08 1C 0B B7 0D 51 10 E9    ...I.........Q..
02FAB0:  12 82 15 AC 18 AF 00 47 03 E0 05 7A 08 14 0B AF    .......G...z....
02FAC0:  0D 49 10 E2 12 7D 15 AC 18 AF 00 47 03 E0 05 7C    .I...}.....G...|
02FAD0:  08 18 0B B4 0D 4D 10 E5 12 7E 15 AC 18 B0 00 49    .....M...~.....I
02FAE0:  03 E2 05 7D 08 17 0B B3 0D 50 10 E8 12 83 15 A8    ...}.....P......
02FAF0:  18 AE 00 46 03 DF 05 7B 08 17 0B B3 0D 4D 10 E4    ...F...{.....M..
02FB00:  12 7D 15 A9 18 B0 00 49 03 E2 05 7B 08 15 0B AF    .}.....I...{....
02FB10:  0D 4A 10 E3 12 7D 15 A8 18 AE 00 46 03 E0 05 7B    .J...}.....F...{
02FB20:  08 16 0B B1 0D 4C 10 E3 12 7C 15 A7 18 AE 00 47    .....L...|.....G
02FB30:  03 E0 05 7A 08 14 0B AD 0D 48 10 E3 12 7D 15 A4    ...z.....H...}..
02FB40:  18 AE 00 46 03 DE 05 79 08 16 0B B1 0D 4A 10 E1    ...F...y.....J..
02FB50:  12 7A 15 A5 18 B0 00 49 03 E2 05 7B 08 15 0B AE    .z.....I...{....
02FB60:  0D 48 10 E0 12 7A 15 A4 18 AD 00 46 03 DE 05 79    .H...z.....F...y
02FB70:  08 13 0B AE 0D 4A 10 E2 12 7A 15 A3 18 AF 00 48    .....J...z.£...H
02FB80:  03 E1 05 7B 08 15 0B AE 0D 49 10 E2 12 7C 15 A0    ...{.....I...|..
02FB90:  18 AE 00 46 03 DF 05 79 08 15 0B B0 0D 4A 10 E2    ...F...y.....J..
02FBA0:  12 7A 15 A2 18 AE 00 48 03 E1 05 7A 08 14 0B AE    .z.....H...z....
02FBB0:  0D 47 10 DF 12 78 15 A1 18 AF 00 47 03 DF 05 78    .G...x.....G...x
02FBC0:  08 14 0B AF 0D 4A 10 E2 12 79 15 A0 18 AE 00 47    .....J...y.....G
02FBD0:  03 E0 05 7A 08 13 0B AE 0D 47 10 E0 12 79 15 9E    ...z.....G...y..
02FBE0:  18 AF 00 46 03 DF 05 7A 08 15 0B AF 0D 4A 10 E3    ...F...z.....J..
02FBF0:  12 7A 15 A0 18 AE 00 47 03 E1 05 7A 08 14 0B AC    .z.....G...z....
02FC00:  0D 46 10 DE 12 77 15 9F 18 AD 00 44 03 DD 05 77    .F...w.....D...w
02FC10:  08 13 0B AD 0D 47 10 DF 12 79 15 9D 18 AE 00 46    .....G...y.....F
02FC20:  03 DE 05 77 08 11 0B AA 0D 44 10 DC 12 76 15       ...w.....D...v.
RESULT OF SEARCH :
PRO=274   CHEA=1   COD=51   MUSI=0   COP=8   GRA=37   WRIT=425   198=5   199=0   STARTER=0   KBI=0   CAAV=0   L.TOURNIER=0  
EXTENDED CPC DSK File    SAMdisk150708(  RAFBGCHDIE  RAFBGCHDIE  RAFBGCHDIEWP   
   COMSD      COMWD      COM-2JULY1987 -BACKUPNOW!-VERSION124CAT     MOD  CAT   
  MODCOMMAND DEFCOMMAND MODCOMPARE MODa !"#$%&COMPBIN MOD '(COMPDIR MODN)*+,-./0
12FILEOPS 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 $
  $No files$ Open failed$ Disc I/O error (Full )$ to $  Same$  Copy (Y/N/A/Q/P/B
/W) $ LGETFILESMOD89IMPORT  DEFIMPORT  MODABCDMACROS  MBE3EFGHIJKMLU     MODdLMN
OPQRSTUVWXPATTERN DEF0YZPATTERN MOD5abcdeSCREENIOEARUfghijklmnopSCREENIOMBESqrst
uvwxyzSCREENIOOSBPTESTPAT MODEDITCONTDMBnEDITDISPDMB52! !2U2  !  2"V####2X6 A!!e
(G2 eG!eA. (+4(1nf( +#M7NU2U(# .#!eGX8% (nfVutXNWEnfut!eGR(( X(# 00P*Vnf"YG72KY2
8y( #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 formns duri
ng execution of repeats *)  END ScreenIO.  ! !  !222  2!G7£o(! !$  q(a 2y Wp((2R
8#!(Gw#2# .# WDEL V2.0 (C) 1987 HiSoft  $Drive is R/O!$No matching files$  Canno
t 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"!#3  RAFBGC
HDIEgth when end-of-file is     encountered  *)  BufferARRAY0..BufferSize-1 OF C
HAR  NextBlockNo,BlockNoCARDINAL  CharPosCARDINAL  CharCountCARDINAL  PageNumber
INTEGER  PageLenCARDINAL24    PROCEDURE ReadBuffer  BEGIN  BlockNoNextBlockNo  R
eadBlock(Inf,ADR(Buffer),0,BufferSize,reply)  CharCountreply    (*Pad rest of bu
ffer with end-of-file characters    Normally, CharCount will equal HIGH(buffer)+
1, so no    padding takes place*)    FOR CharPosCharCount TO HIGH(Buffer) MODULE
 Cat    (*List one of more files to the terminal      Call is CAT   (wild 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 o
f each screen of output,      a prompt line is presented.       P may be followe
d 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 screen width i
nDO BufferCharPosEOF END  CharPos0    (*increment NextBlock to allow for data re
ad*)    NextBlockNoINTEGER(BlockNo)+reply DIV BlockSize  END ReadBuffer    VARch
CHAR(*next character read*)    PROCEDURE NextChar  BEGIN  IF CharPosCharCount TH
EN   ReadBuffer  END  (*IF CharPosCharCount*)  chBufferCharPos  INC(CharPos)  EN
D NextChar    (*File positioning routines    You can position a file by    i)Giv
ing the number of the line to list from  ii)Giving a string  characters      def
ault is 80    I - expand tabs to spaces        For example    CAT b*.def b*.mod 
b*.subP16W100N        This is a hack of the LIST program which comes with my  Mo
dula-2 compiler. (But highly modified)    Limitations    At most 10 (wild card) 
file names can be used  Each wild card should not match more than 100 actual fil
es    Dave Moore *)    FROM SYSTEM IMPORT ADDRESS,ADR,TSIZE  FROM Command IMPORT
 Parameter,Parclass,GetParams  FROM Files IMPORT FileNamto list in the form /str
ing/ (where  / is any non-alphanumeric character)  iii)A combination of the two 
10/string/ to start search  at a given line.  *)  TYPEPositionRECORD  BlockNumbe
rCARDINAL(*Block in which line starts*)  CharOffsetCARDINAL(*Character offset in
 buffer*)  END  VARPosTableARRAY1..2000 OF  Position    (*This code could be mad
e more fancy by having an increment size    so that as the PosTable becomes full
, every second entry is    removed and the increment e,FILE,Lookup,Create,ReadBl
ock,SetBlock  FROM GetFiles IMPORT GetNames  FROM Terminal IMPORT WriteString,Wr
iteLn,Write,Read,BusyRead,ClearCharBuffer  FROM Sort IMPORT SortRecords  FROM In
tLogic IMPORT IAND  FROM SmallIO IMPORT WriteInt,WriteHex,WriteCard  CONSTBuffer
Size4096(*Bytes to read in a single block*)  BlockSize128(*Block size in bytes--
used for random    positioning*)    CR0dx  LF0ax  TAB09x  EOF1ax  BS08x  DEL7Fx 
   TYPE PFileNamePOINTER TO FileName    VAdoubled. 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.  *)    Hi
ghWaterCARDINAL(*The top entry in Postable which is valid*)  VARLineOfFileCARDIN
AL  ContinuationBOOLEANFALSE(*true if line is continuation of    previous line*)
    PROCEDURE AddMarker    (*Add a marker to the position table.  LinOfFile give
s line number*)  BEGIN  IF (LineOfFileHIGH(PosTablRreplyINTEGER  i,jINTEGER  Inf
FILE(*input file*)    (*The input is buffered  Buffer     contains the text to b
uffer  BlockNo    contains the number of the first block in the buffer     This 
variable is modified by the random positioning     code to reflect changes in th
e file position  CharPos    gives the character number of the next character to 
     be listed from the buffer  CharCount  gives number of valid characters in t
he buffer, it may be     less than the buffer len  RAFBGCHDIEe)) AND (LineOfFile
HighWater) THEN  HighWaterLineOfFile  WITH PosTableHighWater DO  BlockNumberBloc
kNo  CharOffsetCharPos  END  END  END AddMarker    PROCEDURE RepositionFile    (
*Reposition file to line number given by LineOfFile.    This line number need no
t be within the part of the file  already examined (or previously skipped) so th
at 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 later be printed*)    IF len0
 THEN  LastLenlen  LastStringstring  END  IF LastLen0 THEN  WriteString(' Error 
- no previous search string')  WriteLn  ELSE(*start match*)  Partials0  LOOP  IF
 chEOF THEN EXIT END  WHILE chCR DO  NextChar  IF chLF THEN NextChar END  INC(Li
neOfFile)  AddMarker  END  (*add a new partial match which has just matched     
Search for positioning by string match.*)    VARRequiredCARDINAL  BEGIN  Require
dLineOfFile    (*  Recalculate page number assuming that no lines overflowed (th
at  is, that the maximum number of lines occured on each page).      Note that t
he page number is always incremented before it is  printed so that this code doe
s not result in page numbers that  are one too small.  *)    PageNumber(LineOfFi
le-1) DIV (PageLen-2)  IF LineOfFileHighWater THEN LineOfFileHighWater END  Cont
i  the null string*)    INC(Partials)  PartialPosPartials1    (*try to advance a
ll the existing partially completed    matches*)    j0  FOR i1 TO Partials DO  n
chLastStringPartialPosi  IF (nchch) OR (CAP(nch)ch) THEN    (* the two condition
s in the above line     provide for lower case to in the match      string to ma
tch either case*)    INC(j)  PartialPosjPartialPosi+1  IF PartialPosjLastLen THE
N   EXIT  (*match foundnuationFALSE    IF LineOfFile0 THEN      WITH PosTableLin
eOfFile DO  IF BlockNumberBlockNo THEN  SetBlock(Inf,BlockNumber)  NextBlockNoBl
ockNumber  ReadBuffer  END  CharPosCharOffset-1  NextChar(*re-prime character po
inter*)    (*The required character is one less than the   saved marker as the c
haracter pointer is  incremented after the first character of the line is  retur
ned. But the block is correct, because the  'position beyond end of block' is no
*)  END    END  END  Partialsj  NextChar  END  (*either chEOF or a match has bee
n found*)  IF chEOF THEN  WriteLn  WriteString(LastString)  WriteString(' could 
not be found')  ELSE  RepositionFile (*to start of current line*)  END  END(*sea
rch string entered or existed*)  END Search    (*Option flags and screen dimensi
ons*)    VARPageModeBOOLEANFALSE  LineWrapBOOLEANFALSE  NumberLinesBOOLEANFALSE 
 ExpandTabsBOOLEANFALSE t checked  until the following character is sought*)  EN
D(*WITH*)      END(*IF LineOfFile0*)  WHILE LineOfFileRequired DO  WHILE chCR DO
 NextChar END  NextChar  IF chLF THEN NextChar END  INC(LineOfFile)  AddMarker  
END  END RepositionFile    TYPEMatchStringARRAY1..60 OF CHAR    VARLastStringMat
chString  LastLenCARDINAL0(*length of last matched string*)    PROCEDURE Search(
DelimiterCHAR)    (*Search for a string from the current position in the file   
 Thi PageWidthCARDINAL80  LineNumberCARDINAL      VAREndOfFileBOOLEAN(*set true 
after ** End of File ** has    been output by WriteLine*)    (*Write a line of o
utput  The first character of the line to be written must  be available in the v
ariable ch before entry to the routine  *)    PROCEDURE WriteLine  VARCharsWritt
enCARDINAL    BEGIN    CharsWritten0    IF NumberLines THEN  IF Continuation THE
N   WriteString('      ')  ELSE  WriteInt(LineOfFile,5)  Write('') s routine doe
s a plain simple search. There are much  faster ways of doing searches, but they
 are probably  going to be swamped by the IO time anyway*)  VARstringMatchString
  lenCARDINAL  nchCHAR  i,jCARDINAL  PartialPosARRAY1..60 OF CARDINAL  PartialsC
ARDINAL  BEGIN  len0  LOOP  Read(nch)  IF (nchBS) OR (nchDEL) THEN  IF len0 THEN
 DEC(len) END  ELSIF (nchDelimiter) OR (lenHIGH(string))  OR (nchCR) OR (nchLF) 
THEN  EXIT  ELSE  INC(len)  stringlen  RAFBGCHDIE END  END  IF NOT Continuation 
THEN   AddMarker  INC(LineOfFile)  END  ContinuationFALSE    LOOP    (*strip top
 bit - should probably be option controlled*)    IF CharsWrittenPageWidth THEN  
 ContinuationTRUE  WriteLn  RETURN  END    IF ch80x THEN chCHR(ORD(ch)-80h) END 
   CASE ch OF  EOF(*End of File character found,    (either from file or generat
ed by NextChar)    if nothing has been printed on line,    just return end of fi
le status   OF Parameter  CountINTEGER  NamesARRAY 0..100 OF FileName  NameCount
  INTEGER  Counter  INTEGER  Cnter  INTEGER    (*Output the file already opened*
)      PROCEDURE OutputFile(NameARRAY OF CHAR)  VARchCHAR  iCARDINAL  PROCEDURE 
PageHeader  BEGIN  WriteLn  WriteString(Name)    (* If terminal supports tabs, p
ut page number on right hand side  of screen, otherwise just go in 10 chars to s
ave time on  alow links*)    IF NOT ExpandTabs THEN  FOR i27 TO PageWidth BY 8 D
O W If line was incomplete, print EOF and     return*)    IF (CharsWritten0) THE
N  WriteString('    ** End of File **')  EndOfFileTRUE  ELSE  WriteString('EOF')
  END  RETURN      CR(*Carriage return found*)  NextChar  IF (chLF) THEN NextCha
r END  WriteLn  EXIT    LF(*must be a stray line feed, treat as a    line termin
ator*)  WriteLn  EXIT    TABREPEAT  INC(CharsWritten)  IF CharsWrittenPageWidth 
THEN  rite(TAB) END  ELSE  FOR i1 TO 10 DO Write(' ') END  END  WriteString('Pag
e ')  WriteInt(PageNumber,5)  WriteLn  END PageHeader    PROCEDURE Number()CARDI
NAL  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  PROCEDURE PrintHelp  BEGIN  WriteStr
ing(' Examples of possible responses')WriteLn  WritWriteLn  ContinuationTRUE  RE
TURN(*note that tab gets processed again    at start of next line*)  END  IF Exp
andTabs OR NumberLines THEN Write(' ') END  UNTIL IAND(CharsWritten,7)7  IF NOT 
(ExpandTabs OR NumberLines) THEN Write(TAB) END    0x..1fx(*non-printing charact
ers. This is cheating    slightly - should exclude CR LF and TAB*)  IF CharsWrit
ten(PageWidth-4) THEN  WriteLn  ContinuationTRUE  RETURN  END  Write('')  WeStri
ng('            - This message')WriteLn  WriteString(' 227         -  list from 
line 227')WriteLn  WriteString(' +20 or -20  - go forward (back) 20 lines')  Wri
teLn  WriteString(' q (or Q)    - go to next file')WriteLn  WriteString(' Contro
l C       - abort run')WriteLn  WriteString('/string/     - list from next occur
ence 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('')  CharsWrittenCharsWritten+4    ELSEWrite(ch)  IN
C(CharsWritten)  END(*CASE*)  NextChar  END(*LOOP*)  END WriteLine    (*The next
 routine is used by the sort module  to perform key comparisons*)    PROCEDURE C
ompar(a,bADDRESS)BOOLEAN  VARp,qPFileName  BEGIN  pPFileName(a)  qPFileName(b)  
RETURN pq  END Compar  PROCEDURE Usage  BEGIN  WriteString('Usage is   CAT file,
file,...')WriteLn  WriteString('      or    CAT nes per page')  WriteLn  WriteSt
ring('W64          - toggle line wrap, set 64 columns per line')  WriteLn  Write
String('I            - toggle tabs expansion')  WriteLn  WriteString('N         
   - toggle line numbering')WriteLn  WriteString(' Command')  END PrintHelp    P
ROCEDURE NewValue(VAR defaultCARDINALlimitCARDINAL)  VARiCARDINAL  BEGIN  Read(c
h)  iNumber()  IF ilimit THEN defaulti END  END NewValue    BEGIN  EndOfFileFALS
E  NextBlockNo0  LineNumber2file,file,...options')WriteLn  WriteString(' where f
ile is a file to list or a wild card for files to list')  WriteLn  WriteLn  Writ
eString(' The options are')WriteLn  WriteString('P - output in page mode')WriteL
n  WriteString('N - number lines on output')WriteLn  WriteString('W - wrap long 
lines')WriteLn  WriteString('I - expand tabs to spaces')WriteLn  WriteLn  WriteS
tring(' for example  CAT *.DEFP16W20N')WriteLn  HALT  END Usage          VARPara
mARRAY 0..10   RAFBGCHDIE  LineOfFile1  PageNumber1  CharPos1  CharCount0  HighW
ater0  NextChar(*prime look-ahead character*)  WriteLn  HighWater0  IF PageMode 
THEN  PageHeader  END  LOOP  IF  EndOfFile THEN EXIT END  WriteLine  INC(LineNum
ber)    (* check for anything types at console     if ctrl c, the abort, if q or
 Q*)    BusyRead(ch)  IF (PageMode AND ((LineNumberPageLen) OR EndOfFile))      
OR (ch0x) THEN  IF EndOfFile THEN DEC(CharPos) END  EndOfFileFALSELinesTRUE     
 INC(i)  'P'PageModeTRUE      INC(i)      PageLenGetNum(Chars,i,ORD(Length))    
  IF PageLen0 THEN PageLen24 END    (*Check page length is reasonable*)        I
F PageLen10 THEN  WriteLn  WriteString(' *** Page length too short ***')  WriteL
n  Usage  END        ELSE      Usage      END(*CASE*)  END(*WHILE*)  END (*WITH*
)  DEC(Count)  END (*IF option*)    IF Count0 THEN Usage END  IF Nu  PageModeTRU
E  WriteString(' Command ')  IF ch0x THEN Read(ch)   ELSE Write(ch)  ClearCharBu
ffer  END  LOOP      CASE CAP(ch) OF  'P'PageModeNOT PageMode      NewValue(Page
Len,12)  'N'NumberLinesNOT NumberLinesRead(ch)  'I'ExpandTabsNOT ExpandTabsRead(
ch)  'W'LineWrapNOT LineWrap      NewValue(PageWidth,40)  ''PrintHelpRead(ch)  '
+'Read(ch)       LineOfFileLineOfFile+Number()      RepositionFile  '-mberLines 
THEN PageWidthPageWidth-6 END    FOR i0 TO CARDINAL(Count-1) DO  GetNames(Parami
.Chars,Names,NameCount)  IF NameCount1 THEN  SortRecords(ADR(Names),CARDINAL(Nam
eCount),  TSIZE(FileName),Compar)  END  FOR j0 TO NameCount-1 DO  Lookup(Inf,Nam
esj,reply)  IF reply0 THEN  WriteString(' Could not open ')  WriteString(Namesj)
  WriteLn  ELSE  OutputFile(Namesj)  END  END  END  END Listit  BEGIN  Listit  E
ND Cat.  'Read(ch)      iNumber()      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 EX
IT END  INC(PageNumber)  PageHeader  LineNumber2  END    END  END OutputFile    
PROCEDURE Listit  VARiCARDINAL    PROCEDURE GetNum(CharsARRAY OF CHARVAR PosCARD
INALLenCARDINAL)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  i10*i+ORD(CharsPos)-ORD('0')  INC(Pos)  END  RETURN i  
END GetNum  BEGIN    GetParams(Param,Count)          Counter  1          IF Coun
t0 THEN Usage END    IF ParamCount-1.Classoption THEDEFINITION MODULE Command   
 (*Command line processor*)  FROM SYSTEM IMPORT BYTE    TYPE  Parclass(name,stri
ng,option)    (*Parclass is a best guess style of thing  If the parameter is in 
quotes it is a string  If it follows a '' or a '/' it is an option  (there is on
ly ever one option parameter. It is  always last, and it contains everything fro
m the / or    onwards  Everything else is a name (no validity checking performed
*)    TextRECORD  LengthBYTE(*returns bytes in parameN  WITH ParamCount-1 DO    
(*Recognise flags*)    i0  WHILE iCARDINAL(Length) DO  CASE Charsi OF  'I'Expand
TabsTRUE      INC(i)  'W'LineWrapTRUE      INC(i)      PageWidthGetNum(Chars,i,O
RD(Length))      IF PageWidth0 THEN PageWidth80 END    (*Check page width is rea
sonable*)        IF PageWidth32 THEN  WriteLn  WriteString(' *** Page width too 
narrow ***')  WriteLn  Usage  END       'N'Number  RAFBGCHDIEter*)  TerminatorCH
AR(*returns next character, or  delimiter for strings*)  ClassParclass(*class of
 parameter*)  CASE BOOLEAN OF      FALSEFilePosCARDINALErrorNoCARDINAL      TRUE
CharsARRAY0..127 OF CHAR      END  (*parameter - always terminated by    a zero 
byte, but that byte is not    included in the length*)  END    ParameterPOINTER 
TO Text  PROCEDURE GetParams(VAR pARRAY OF ParameterVAR countINTEGER)  (*crack t
he command line*)  VARCommLeng(j)  END  INC(i)  Build(j-i,CommTexti-1,string)  I
NC(j)    ELSEji+1  WHILE (CommTextj' ')   AND(CommTextj',')   AND(CommTextj'')  
AND(CommTextj'/')  AND (jINTEGER(CommLength)) DO  INC(j)  END  Build(j-i,CommTex
tj,name)  END(*case*)    ij  IF CommTexti',' THEN INC(i) END  END (*LOOP*)  END 
GetParams    END Command.  th80hBYTE  CommText81hARRAY0..126 OF CHAR   END Comma
nd.  d by the IO time anyway*)  VARstringMatchString  lenCARDINAL  nchCHAR  i,jC
ARDINAL  PartialPosARRAY1..60 OF CARDINAL  PartialsCARDINAL  BEGIN  len0  LOOP  
Read(nch)  IF (nchBS) OR (nchDEL) THEN  IF len0 THEN DEC(len) END  ELSIF (nchDel
imiter) OR (lenHIGH(string))  OR (nchCR) OR (nchLF) THEN  EXIT  ELSE  INC(len)  
stringlenMODULE Compare    (*Compare two files    Call is COMPARE   old file,new
 file,List file    The two files are compared line by line    lines which have b
een deleted from the old file are printed in italics  lines which have been inse
rted are printed in emphasised mode  lines which have been moved to a new positi
on are printed in their new  position with a box surrounding them    You may nee
d to patch the printer control codes for your printer  These control codes are a
t about address 104h in the cIMPLEMENTATION MODULE Command      (*Command line p
rocessor*)  FROM Storage IMPORT ALLOCATE  FROM SYSTEM  IMPORT ADDRESS  VARi,j,kI
NTEGER  PROCEDURE GetParams(VAR pARRAY OF ParameterVAR countINTEGER)  PROCEDURE 
Build(lenINTEGERchCHARcParclass)  VARadADDRESS  BEGIN    ALLOCATE(ad,len+4)  pco
untad  WITH pcount DO  IF jINTEGER(CommLength)THEN Terminator0dx  ELSE Terminato
rch END  Lengthlen  Classc  FOR k0 TO len-1 DO  CharskCommTexti+k  ENDom file (i
.e.   very near the beginning) Each control 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 program may well run 'as is'  on Epsons 
and Epson clones    The program is based on a method described by Paul Heckel 'A
 Technique for  Isolating Differences between Files', Communications of the ACM,
 Vol 21  No 4,  Charslen0x  END  countcount+1  END Build  (*crack the command li
ne*)  BEGIN  i0  count0  LOOP  IF countHIGH(p) THEN   EXIT   END  WHILE (iINTEGE
R(CommLength)) AND (CommTexti' ') DO  INC(i)  END  IF iINTEGER(CommLength) THEN 
EXIT END  CASE CommTexti OF  '','/'(*Option found*)  INC(i)  Build(INTEGER(CommL
ength)-i,0dx,option)  EXIT    '"',"'"ji+1  WHILE (CommTextiCommTextj)   AND (jIN
TEGER(CommLength)) DO  INC  RAFBGCHDIE April 1978, pp 264-268.     Basically, th
e technique consists of comparing the two files to find all  the unique lines in
 each which match a unique line in the other. These   lines give fixed points fr
om which matching regions can be grown outwards.  Once all the regions so produc
ed 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 line in the old file is an insertion, while  a block moveE ReadStream(VAR 
sSTREAMVAR HashHashArray)CARDINAL  (*  Read in a file and calculate the hash tot
als for the file  *)  VARiCARDINAL  LineARRAY1..80 OF CHAR  BEGIN  SwitchInStrea
m(s)  i0    WHILE (iHIGH(Hash)) AND (NOT EOS(s)) DO  ReadLine(Line)  INC(i)  Has
hiCalcHash(Line)  END  Reset(s)  PopInStream  RETURN i  END ReadStream         P
ROCEDURE Usage  BEGIN  WriteString('Usage is   COMPARE old file,new file')WriteL
n  WriteString('      or    COMPARE old f is encountered when the lines pointed 
to in the old file are further  down the file than some other lines which have n
ot yet been processed and which  are associated with lines in the new file.    *
)    FROM SYSTEM IMPORT ADDRESS,ADR,TSIZE  FROM Command IMPORT Parameter,Parclas
s,GetParams  FROM Files IMPORT FileName,FILE,Lookup,Create  FROM Streams IMPORT 
Connect,Disconnect,STREAM,input,output,WriteChar,  ReadChar,EOS,WriteRec,Reset  
FROM TerminalIMPORT WriteString,WriteLn  FROM Soile,new file,output file')  Writ
eLn  WriteLn  WriteString(' for example  COMPARE ME.BAK ME.MOD')WriteLn  HALT  E
ND Usage    VAROldLink,NewLinkHashArray    (*OldLink contains the number of a li
ne in the new file which is  linked to a given line in the old file, and vice-ve
rsa  An entry contains zero if no link has been made*)        PROCEDURE Generate
Links  VARi,j,kCARDINAL  countCARDINAL  BEGIN  FOR i1 TO HIGH(OldLink) DO  OldLi
nki0  NewLinki0  END    (*lookrt IMPORT SortRecords  FROM InOut IMPORT WriteCard
,SwitchInStream,SwitchOutStream,  PopInStream,PopOutStream,ReadLine  CONSTMaxFil
eSize2000(*lines in file max*)  FF0cx  TAB09x  LF0ax  CR0dx  TYPE PFileNamePOINT
ER TO FileName  PrintControlARRAY0..7 OF CHAR  VAR  (*Printer Control Codes a ze
ro byte terminates*)    ItalicsOnPrintControl1bx,'4',0  ItalicsOffPrintControl1b
x,'5',0  BoldOnPrintControl1bx,'E',0  BoldOffPrintControl1bx,'F',0    for all ol
d lines which match exactly one new line*)    FOR i0 TO OldLen DO  count0  j1  W
HILE (count2) 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 OldHa
shjNewHashk THEN   INC(count)  END  INC(j)  END  IF count1 THEN    (* ListSTREAM
  ListFFILE  replyINTEGER  i,jINTEGER    OldsSTREAM  OldfFILE    NewsSTREAM  New
fFILE    chCHAR  CharPosCARDINAL(*position in line*)      (*For each file, we ha
ve an array of hash totals for the lines of the file  Using hash totals instead 
of the original lines causes a slight chance  that lines will match when they sh
ould not, but allows larger files  to be compared and also makes it possible to 
extend the program in the future  to work with reasonable speedthe lines are uni
que and they match - set up cross pointers*)    OldLinkki  NewLinkik  END  END (
*IF count1 (the outer one)*)  END (*FOR i*)    (*at this point, NewLinkij  OldLi
neji  This condition is central to the whole program*)     (*now that the unique
 lines are cross-linked, we attempt to 'grow'  the links outwards from the cross
-linked lines*)    k1  WHILE (kOldLen) DO  IF NewLinkk0 THEN     (*grow backward
s*)    jNewLinkk-1   when one of the files is on a remote machine  since then on
ly the hash totals and the altered lines need to be transmitted*)    TYPEHashArr
ayARRAY1..MaxFileSize OF CARDINAL  VAROldHash,NewHashHashArray  OldLen,NewLenCAR
DINAL  PROCEDURE CalcHash(VARTextARRAY OF CHAR)CARDINAL  VARi,jCARDINAL  BEGIN  
i0  j0  WHILE (iHIGH(Text)) AND (Texti0x) DO    (*add your favourite hashing fun
ction here*)    j3*j+ORD(Texti)  INC(i)  END  RETURN j  END CalcHash  PROCEDUR  
RAFBGCHDIEik-1  WHILE (j0) AND (i0) AND (OldLinkj+1i+1)  AND (NewHashjOldHashi) 
  AND (OldLinkj0) AND (NewLinki0) DO  OldLinkji  NewLinkij    (* note central pr
edicate still satisfied*)    DEC(i)  DEC(j)  END  jNewLinkk+1  ik+1    (*grow fo
rwards - (slight optimisation) there is no need to    check for nonzero links on
 the forward pass since non-zero links    Lines match and are unique, and the ba
ck pass would be empty*)   teEol  END Inserted  PROCEDURE NoChange  BEGIN  GetLi
ne(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 ')  SwitchOutStream(List)  WriteCard(OldLin
knewindex,6)  PopOutStream  FOR i25+29+1 TO 79 DO WriteChar(List,'*') END  Write
Eol  iOldLinknewindex  WHILE (newindexNewLen) AND (iOldLinknewindex) DO  GetLine
(News,ne WHILE (jNewLen) AND (iOldLen) AND (OldLinkj-1i-1)   AND (NewHashjOldHas
hi) DO  OldLinkji  NewLinkij    (*still holds*)   INC(i)  INC(j)  END  ki  ELSEI
NC(k)  END (*WHILE kOldLen*)  END    (*grow forwards from beginning of files*)  
  i1  j1  WHILE (iOldLen) AND (jNewLen)   AND (OldHashiNewHashj)   AND (NewLinki
0) AND (OldLinkj0) DO    (*the last line of the condition is probably not    nec
essary, but awline)  Print(newline)  WriteEol  INC(newindex)  INC(i)  END  FOR i
1 TO 79 DO WriteChar(List,'*') END  WriteEol  END BlockMove    BEGIN    oldindex
1(*current line in old file*)  newindex1(*current line in new buffer*)    (*Caut
ion Well commented code ahead   Programmer probably didn't understand what he wa
s doing     *)  WHILE (oldindexOldLen) OR (newindexNewLen) DO  (*first check if 
either index is off end  of file*)    IF newindexNewLen THEN   voids worrying ab
out pathological case*)    NewLinkij  OldLinkji  INC(i)  INC(j)  END    (*grow b
ackwards from end of files*)  iOldLen  jNewLen  WHILE (i0) AND (j0)   AND (OldHa
shiNewHashj)  AND (NewLinki0) AND (OldLinkj0) DO  NewLinkij  OldLinkji  DEC(i)  
DEC(j)  END  END GenerateLinks      PROCEDURE WriteResults  VARoldindex,newindex
CARDINAL  oldline,newlineARRAY 1..80 OF CHAR    PROCEDURE GetLine(VAR sSTREAMVAR
 lARRAY Deleted  INC(oldindex)  ELSIF oldindexOldLen THEN  Inserted  INC(newinde
x)  ELSIF NewLinkoldindex0 THEN  Deleted  INC(oldindex)  ELSIF OldLinknewindex0 
THEN  Inserted  INC(newindex)    (*if pointers match, line is unchanged  or if a
 pointer is zero, line is new or deleted*)    ELSIF (NewLinkoldindexnewindex)   
    AND (OldLinknewindexoldindex) THEN  NoChange  INC(oldindex)  INC(newindex)  
    (*  none of the above pointers don't matchOF CHAR)  BEGIN  SwitchInStream(s)
  ReadLine(l)  PopInStream  END GetLine    PROCEDURE Print(aARRAY OF CHAR)    (*
Output a line truncating trailing spaces*)    VAR i,jCARDINAL  BEGIN  i0  j0  WH
ILE (iHIGH(a)) AND (ai0x) DO  IF ai' ' THEN  FOR jj TO i DO WriteChar(List,aj) E
ND  INC(j)  END  INC(i)  END    END Print    PROCEDURE WriteEol  BEGIN  (*debug 
code commented out    SwitchOutStream(List)  WriteCard(oldindex,6)WriteCard(NewL
inkoldinde but    each pointer points somewhere      If the text in the new file
 pointed to by the old file has    been passed, it has already been written so w
e ignore the    old line and look for something more interesting (e.g.     a Sco
tsman winning Wimbledon)      Because of the central predicate, we know that    
  NewLinkOldLinknewindexnewindex   and    OldLinkNewLinkoldindexoldindex    *)  
  ELSIF NewLinkoldindexnewindex THEN  SkipOld  INC(oldindex)    (*    so NewLinx
,6)  WriteCard(newindex,6)WriteCard(OldLinknewindex,6)  PopOutStream  *)  WriteC
har(List,0dx)  WriteChar(List,0ax)  END WriteEol    PROCEDURE Deleted    (*Print
 out a line from the old file*)    BEGIN  GetLine(Olds,oldline)  Print(ItalicsOn
)  Print(oldline)  Print(ItalicsOff)  WriteEol  END Deleted    PROCEDURE SkipOld
  BEGIN  GetLine(Olds,oldline)  END SkipOld    PROCEDURE Inserted  BEGIN  GetLin
e(News,newline)  Print(BoldOn)  Print(newline)  Print(BoldOff)  Wri   R A F B G 
C H D I Ekoldindexnewindex       but, if NewLinkoldindexnewindex then      OldLi
nknewindexOldLinkNewLinkoldindexnewlink  which is not true (since the cross-link
ed case was handled  earlier)      Hence NewLinkoldindexnewindex and we can leav
e the line till later      We must therefore do something with the new line - it
 is the    start of a moved block  *)   ELSE  BlockMove(*inc of newindex done in
 blockmove*)  END  END(*LOOP*)  END WriteResults    VARParamARRAY 0..2 OF Parame
ter  CountINTEGER    PROCEDURE OpenInput(VAR sSTREAMVAR fFILEparamParameter)  BE
GIN  Lookup(f,FileName(param.Chars),reply)  IF reply0 THEN  WriteString(' Could 
not open ')  WriteString(param.Chars)  WriteLn  HALT  END  Connect(s,f,input)  E
ND OpenInput  PROCEDURE OpenFiles  BEGIN    (*Input the parameters, connect the 
files to streams*)    GetParams(Param,Count)    (*If less than 2 parameters, giv
e usage and exit*)    IF Count2 THEN Usage END    (MODULE CompBin    (*Compare t
wo binary files *)    FROMTerminal IMPORT WriteString,WriteLn  FROMSmallIO  IMPO
RT WriteHex  FROMStreams IMPORT Direction  FROMQuickStr IMPORT StreamRecord,Open
Streams,OptionsSet  FROMSYSTEM   IMPORT ADR,BYTE  FROMFiles IMPORT FILE,SeqReadB
lock  VARIn1,In2FILE  Block1,Block2ARRAY 0..127 OF BYTE  reply1,reply2INTEGER  L
ocCARDINAL  i,jCARDINAL  PROCEDURE VeryQuick()BOOLEAN    (*Open a stream for inp
ut and a stream for output *)  VARSARRAY1..2 *If 3 parameters, third parameter i
s file to receive output  otherwise, attach output to the printer (LST)  *)    I
F Count3 THEN  Create(ListF,FileName(ParamCount-1.Chars),reply)  IF reply0 THEN 
 WriteString(' Could not create list file')  WriteLn  HALT  END  ELSE  Create(Li
stF,'LST',reply)  END  Connect(List,ListF,output)    (*Open the files to be comp
ared*)    OpenInput(Olds,Oldf,Param0)  OpenInput(News,Newf,Param1)  END OpenFile
s    PROCEDURE ReadOF StreamRecord  oOptionsSet  BEGIN  WITH S1 DO  IsStreamFALS
E  Dirinput  LookupFirstFALSE  MustSupplyFALSE  FileADR(In1)  END  WITH S2 DO  I
sStreamFALSE  DefaultName'CON'  Dirinput  LookupFirstFALSE  MustSupplyTRUE  File
ADR(In2)  END  RETURN OpenStreams(S,o)  END VeryQuick  BEGIN  IF  VeryQuick() TH
EN  WriteString('Files not found ')  WriteLn  HALT  END  Loc0  LOOP  SeqReadBloc
k(In1,ADR(Block1),128,reply1)  SInputFiles  BEGIN    WriteString(' Reading old f
ile ')  OldLenReadStream(Olds,OldHash)  WriteCard(OldLen,5)  WriteString(' lines
 found')WriteLn    WriteString(' Reading new file ')  NewLenReadStream(News,NewH
ash)  WriteCard(NewLen,5)  WriteString(' lines found')WriteLn  END ReadInputFile
s    BEGIN(*main program*)    OpenFiles  ReadInputFiles    WriteString(' Generat
ing cross links')WriteLn  GenerateLinks  WriteString(' Listing')WriteLn    (*rep
osition streams to beginneqReadBlock(In2,ADR(Block2),128,reply2)  WriteHex(Loc,4
)  WriteString(0dx)  IF (reply1128) OR (reply2128) THEN EXIT END  i0  WHILE (i12
8) AND (Block1iBlock2i) DO INC(i) END  IF i128 THEN  FOR i0 TO 127 BY 8 DO  Writ
eHex(Loc+i,4)  WriteString('')  FOR ji TO i+7 DO  WriteHex(Block1j,2)  WriteStri
ng(' ')  END  WriteString(' ')  FOR ji TO i+7 DO  WriteHex(Block2j,2)  WriteStri
ng(' ')  END  WriteLn  Eing*)    Reset(News)  Reset(Olds)    WriteResults  Disco
nnect(List,TRUE)  END Compare.  f less than 8 characters is required    The cont
rol characters in the supplied program are set for a STAR DPS510,  which is supp
osed to be Epson compatible, so the program may well run 'as is'  on Epsons and 
Epson clones    The program is based on a method described by Paul Heckel 'A Tec
hnique for  Isolating Differences between Files', Communications of the ACM, Vol
 21  No 4,  RAFBGCHDIEND  END  LocLoc+128  END  END CompBin.  CHAR  CharPosCARDI
NAL(*position in line*)      (*For each file, we have an array of hash totals fo
r the lines of the file  Using hash totals instead of the original lines causes 
a slight chance  that lines will match when they should not, but allows larger f
iles  to be compared and also makes it possible to extend the program in the fut
ure  to work with reasonable speed)    TYPE   CompClass(Whole,Name,Type)  FileRe
cordRECORD  DeviceCHAR  NameARRAY1..8 OF CHAR  TypeARRAY1..3 OF CHAR  END  PFile
NamePOINTER TO FileRecord  FileArrayARRAY1..MaxFiles OF FileRecord  VAR  ParamAR
RAY1..4 OF Parameter(*area for command line*)  CountINTEGER(*parameters*)    Lef
tNames,RightNamesFileArray  LeftNameCount,RightNameCountINTEGER    CompclassComp
ClassWhole  OutputAddedBOOLEANFALSE  OutputEqualBOOLEANFALSE  CompareContentsB(*
Revision History    24 March 86  Dave Moore  Fixed compilation errors caused by 
upgrading of  compiler error checking.  Increased MaxFiles to 512.    Bugs    Fa
ils if more than MaxFiles files are found. This  is not a problem under CP/M sin
ce directories fill  before that many files are found, but it can cause  problem
s under MSDOS (with a Z80 card)  *)      (*$l-*)  MODULE CompDir    (*CompDir - 
Compare two directories    Dave Moore  Cerenkof Computing  PO Box 305 WynOOLEANF
ALSE  OutputDeletedBOOLEANFALSE  OutputModifiedBOOLEANFALSE    ListOpenBOOLEANFA
LSE  ListSTREAM  ListFFILE  PROCEDURE CrackFileName(TextARRAY OF CHARVAR RecFile
Record)    (*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  Devi
ce' '  i0  END  j1    (*pick up file name *)    WHILE   (iHIGH(Text))      AND(T
exti0x)      ANDnum Central 4178      Call is COMPDIR   wild card,wild card,list
 file options    Where each wild card produces one of the lists to compare    Fo
r 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 name  C
if file names match, check file contents as well      These two options are mutu
ally exclusive     (Texti' ')      AND(Texti'.') DO  IF  jHIGH(Name) THEN NamejT
exti END  INC(j)  INC(i)  END  FOR jj TO HIGH(Name) DO Namej0x END    (*Note tha
t I use zero instead of blank fill to simplify listing    of the names*)  j1  IF
 Texti'.' THEN INC(i) END  WHILE   (iHIGH(Text))      AND(Texti0x)      AND(Text
i' ') DO  IF  jHIGH(Type) THEN TypejTexti END  INC(j)  INC(i)  END  FOR jj TO HI
GH(Type) DO Typej0x EEOutput file names which match to list file  AOutput file n
ames which have been added to the second list  DOutput file names which have bee
n deleted from the first list  MOutput files which have been modified to the lis
t 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 swee
p is weak.     This is a modified and enhanced version of the original CompDir p
rogram  which was written for exposiND  END(*WITH*)  END CrackFileName    PROCED
URE Usage  BEGIN  WriteLn  WriteString('Usage is   COMPDIR wild card file name')
  WriteString(', wild card file name , list file /options')  WriteLnWriteLn  Wri
teString(' Options are  ')WriteLn  WriteString('Tcompare only file type ')WriteL
n  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 written in   FTL Modula-2.  *)   
 FROM SYSTEM IMPORT ADDRESS,ADR,TSIZE  FROM Command IMPORT Parameter,Parclass,Ge
tParams  FROM TerminalIMPORT WriteString,WriteLn,Write  FROM Sort IMPORT SortRec
ords  FROMFiles IMPORT FileName,FILE,Create  FROMGetFilesIMPORT GetNames  FROMSt
ringsIMPORT Length  FROMStreamsIMPORT STREAM,Connect,Disconnect,WriteChar,Direct
ion  IMPORTInOut  FROMFileOpsIMPORT FileComp  CONSTMaxFiles512(*max files to be 
matched*  RAFBGCHDIEriteString('AOutput file names which have been added to the 
second list')WriteLn  WriteString('DOutput file names which have been deleted fr
om the first list')WriteLn  WriteString('MOutput file names of modified files ')
WriteLn  WriteString('(Implies C option)')WriteLn  HALT  END Usage      PROCEDUR
E GetOptions(pParameter)  VARiCARDINAL  BEGIN  WITH p DO  i0  LOOP  CASE Charsi 
OF  0xEXIT  'T'CompclassType  'N'CompclassName  'E'OutputEquiteString(Name)  Wri
teChar(List,'.')  InOut.WriteString(Type)  InOut.WriteLn  END  END WriteToList  
  PROCEDURE WriteName(VAR NFileRecordToListBOOLEAN)    (*output a file record as
 a valid file name  IF Tolist, output it to list as well*)    VARiCARDINAL  chCH
AR  BEGIN  WITH N DO  IF Device' ' THEN   ch''  ELSE  ch' '  END  Write(Device) 
 Write(ch)  IF ToList THEN  WriteChar(List,Device)  WriteChar(List,ch)  END  Wri
teString(Name)  WalTRUE  'A'OutputAddedTRUE  'D'OutputDeletedTRUE  'M'OutputModi
fiedTRUE      CompareContentsTRUE  'C'CompareContentsTRUE  ELSE Usage  END(*Usag
e*)  INC(i)  END  END(*WITH*)  END GetOptions    PROCEDURE Compar(a,bADDRESS)BOO
LEAN    (*key comparison routine for the sort module  Returns TRUE if a is great
er than b    This routine always compares the full name as it is used  for sorti
ng. The equality routine only compares the part  of thrite('.')  WriteString(Typ
e)  IF ToList THEN  WriteToList(N)  END    (*Now pad name out to 16 columns*)   
 FOR iLength(Name)+Length(Type)+4 TO 16 DO  Write(' ')  END  END  END WriteName 
 PROCEDURE PrintLeft  BEGIN  WriteName(LeftNamesi,OutputDeleted)  WriteLn  END P
rintLeft  PROCEDURE PrintRight  BEGIN   WriteString('                ')  WriteNa
me(RightNamesj,OutputAdded)  WriteLn  END PrintRight    PROCEDURE CompareOK(f1,f
2FileRecord)BOOLEAN    VARfn1e name requested by the flags. As a result, a test 
 for equality should be made first*)    VARp,qPFileName  BEGIN  pPFileName(a)  q
PFileName(b)  CASE Compclass OF  TypeIF  p.Typeq.Type THEN RETURN p.Typeq.Type  
     ELSE RETURN p.Nameq.Name END     Name,WholeIF p.Nameq.Name THEN RETURN p.Na
meq.Name        ELSE RETURN p.Typeq.Type END  END(*CASE*)    END Compar  PROCEDU
RE Equal(p,qFileRecord)BOOLEAN    (*compare to names for equality  patterned aft
er,fn2FileName    PROCEDURE SetName(fFileRecordVAR 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 (Name
j0x) 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 Compclass OF  TypeRETURN p.Typeq.T
ype  NameRETURN p.Nameq.Name  WholeIF p.Nameq.Name THEN RETURN FALSE        ELSE
 RETURN p.Typeq.Type END  END(*CASE*)    END Equal    PROCEDURE ExpandNames(Para
mParameterVAR NamesFileArray  VAR NameCountINTEGER)    (*Expand wild card file n
ame into list of files  and sort result *)  VARi,jINTEGER  NameTextARRAY 1..MaxF
iles OF FileName  TextARRAY0..5 OF CHAR  BEGIN  IF (Param.Chars2GIN  SetName(f1,
fn1)  SetName(f2,fn2)  RETURN FileComp(fn1,fn2)  END CompareOK    VARreplyINTEGE
R  BEGIN      GetParams(Param,Count)  IF (Count0) AND (ParamCount.Classoption) T
HEN  GetOptions(ParamCount)  DEC(Count)  END  IF Count2 THEN Usage END          
IF Count3 THEN   Create(ListF,FileName(Param3.Chars),reply)  IF reply0 THEN  Wri
teString(' Could not open output file ')  WriteString(Param3.Chars)  WriteLn  HA
LT  END  Connect(List,ListF0x) AND (Param.Chars1'') THEN  Text' *.*'  Text0Param
.Chars0  GetNames(Text,NameText,NameCount)  ELSE  GetNames(Param.Chars,NameText,
NameCount)  END    (*crack names*)    FOR i1 TO NameCount DO  CrackFileName(Name
Texti,Namesi)  END    IF NameCount1 THEN  SortRecords(ADR(Names),CARDINAL(NameCo
unt),  TSIZE(FileRecord),Compar)  END      END ExpandNames    VARi,jINTEGER  PRO
CEDURE WriteToList(VAR NFileRecord)  BEGIN  WITH N DO  InOut.Wr   R A F B G C H 
D I E,output)  InOut.SwitchOutStream(List)  ListOpenTRUE  ELSE  IF OutputAdded O
R OutputDeleted OR      OutputEqual OR OutputModified THEN   WriteString(' A D E
 and M options require output file name$')  WriteLn  Usage  END  END  ExpandName
s(Param1,LeftNames,LeftNameCount)  ExpandNames(Param2,RightNames,RightNameCount)
    (*now perform merge pass of two lists*)    i1  j1  WHILE (iLeftNameCount) AN
D (jRightNameCount) DO  IF Equal(LeftNamesi,RightNamesj) IMPLEMENTATION MODULE F
ileOps    FROMSYSTEMIMPORT BYTE,ADR,ADDRESS  FROMSTORAGE IMPORT FreeSpace,ALLOCA
TE,DEALLOCATE,RELEASE  FROMFilesIMPORT Lookup,Create,SeqReadBlock,SeqWriteBlock,
Close,  FILE,FileName  FROMTerminal IMPORT WriteString,WriteLn    (*Perform some
 file operations *)    TYPEPBlockPOINTER TO Block  BlockARRAY0..127 OF BYTE  VAR
b1,b2PBlock  i,jCARDINAL  BuffSizeCARDINAL  replyINTEGER  f1,f2FILE  reply1,repl
y2INTEGER  PROCEDURE SetUp(CountCARDINAL)    (THEN    WriteName(LeftNamesi,Outpu
tEqual)  WriteName(RightNamesj,FALSE)  IF CompareContents AND     NOT CompareOK(
LeftNamesi,RightNamesj) THEN  WriteString(' Files Differ ')  IF OutputModified T
HEN  WriteToList(LeftNamesi)  END  END  WriteLn  INC(i)  INC(j)    ELSIF NOT Com
par(ADR(LeftNamesi),ADR(RightNamesj)) THEN    PrintLeft  INC(i)    ELSE (*Leftna
mesiRightNamesj*)    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 FileOps')  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 th
em but now  does a release which is faster. As a result parameter is not require
d   *)  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 THEN  Disconnect(List,TRUE)  END  END Comp
Dir.    Files IMPORT FILE,SeqReadBlock  VARIn1,In2FILE  Block1,Block2ARRAY 0..12
7 OF BYTE  reply1,reply2INTEGER  LocCARDINAL  i,jCARDINAL  PROCEDURE VeryQuick()
BOOLEAN    (*Open a stream for input and a stream for output *)  VARSARRAY1..2  
  PROCEDURE FileComp(fn1,fn2ARRAY OF CHAR)BOOLEAN    (*Compare two files - retur
n 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,ADR(b1),
BuffSize,reply1)  SeqReadBlock(f2,ADR(b2),BuffSize,reply2)  IF reply1reply2 THEN
  FreeUp(2)  RETURN FALSE  END  IF reply10 THEN DEFINITION MODULE FileOps    (*P
erform some file operations *)    PROCEDURE FileComp(f1,f2ARRAY OF CHAR)BOOLEAN 
   (*Compare two files - return TRUE if equal    IF either file is not present, 
FALSE is returned  FALSE is still returned if neither file is present *)    PROC
EDURE FileMove(f1,f2ARRAY OF CHAR)BOOLEAN    (*Move f1 to f2 - returns TRUE if s
uccessful *)    END FileOps.        FreeUp(2)  RETURN TRUE   END  FOR i0 TO repl
y1-1 DO  IF b1ib2i THEN   FreeUp(2)  RETURN FALSE   END  END  END(*LOOP*)  END F
ileComp  PROCEDURE FileMove(fn1,fn2ARRAY OF CHAR)BOOLEAN  BEGIN  SetUp(1)  Looku
p(f1,FileName(fn1),reply)  IF reply0 THEN  WriteString(' Input file not found ')
  WriteLn  FreeUp(1)  RETURN FALSE  END  Create(f2,FileName(fn2),reply)  IF repl
y0 THEN  WriteString(' Directory full ')  WriteLn  FreeUp(1  RAFBGCHDIE)  RETURN
 FALSE  END  LOOP  SeqReadBlock(f1,ADR(b1),BuffSize,reply1)  IF reply10 THEN  Cl
ose(f1)  Close(f2)  FreeUp(1)  RETURN TRUE  END  SeqWriteBlock(f2,ADR(b2),BuffSi
ze,reply2)  IF reply2reply1 THEN  WriteString(' Disc full ')  WriteLn  FreeUp(1)
  RETURN FALSE  END  END  END FileMove    END FileOps.      RB 0TESTNESTMOD gR S
MALLIO REL B 8BUILDLIBBAT y,name)    IF f.fcbdn0 THEN DevChar' '  ELSE DevCharCH
R(ORD(f.fcbdn)+(ORD('A')-1)) END      (*Now scan for matching names*)    iBDOS(s
dafc,ADR(dma))(*set dma buffer address*)  iBDOS(sfofc,ADR(f))(*start search*)  C
ount0  WHILE i255 DO  j0  IF DevChar' ' THEN  name0DevChar  name1''  j2  END  WI
TH dmai DO  k1  WHILE (kHIGH(dirfn)) AND (dirfnk' ') DO  namejdirfnk  INC(j)  IN
C(k)  END  namej'.'  k1INC(j)  WHILE (kHIGH(dirft)) AND (dirftk' ') DO  namejdir
ftk  INC(j)  INC(k)  END  END (*WITH DMA*)  FOR jj TO HIGH(name) DO namej' ' END
  namesCountname  INC(Count)  iBDOS(snofc,ADR(f))(*go to next*)  END (*WHILE i25
5*)    iBDOS(sdafc,80H)(*reset to default*)    END SearchForFileNames  BEGIN    
(* Convert Pattern to a file name*)    jHIGH(Pattern)  WildCardFALSE  IF jHIGH(n
ame) THEN jHIGH(name) END  FORDEFINITION MODULE GetFiles    (*Get a list of file
 names meeting a wildcard description*)  FROM Files IMPORT FileName  PROCEDURE G
etNames(PatternARRAY OF CHAR  VARnamesARRAY OF FileNameVAR countINTEGER)    (*Pa
ttern is a pattern to use for the search  names returns a list of matching file 
name (with no device name  on the front)  count returns number of names returned
 in names    If the given name contains no wild card, it is always returned  as 
the only match, whether it exists or not    i0 TO j DO   nameiPatterni  IF (name
i'*') OR (namei'') THEN WildCardTRUE END  END  FOR ii+1 TO HIGH(name) DO namei' 
' END    IF WildCard THEN SearchForFileNames  ELSE  Count1  names0name  END  END
 GetNames  END GetFiles.  p DO  i0  LOOP  CASE Charsi OF  0xEXIT  'T'CompclassTy
pe  '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 paramet
er  to a filename as required by the module Files *)  END GetFiles.  arameter(*a
rea for command line*)  CountINTEGER(*parameters*)    LeftNames,RightNamesFileAr
ray  LeftNameCount,RightNameCountINTEGER    CompclassCompClassWhole  OutputAdded
BOOLEANFALSE  OutputEqualBOOLEANFALSE  CompareContentsBDEFINITION MODULE Import 
   (*This module allows you to pick up  information about symbols exported  from
 another module. It is used by the assembler  Copyright (C) Dave Moore, FTL Modu
la-2 1986  This is a generic module   *)  FROMSYSTEM IMPORT BYTE,ADDRESS  FROMFi
les IMPORT FileName  TYPEalfa ARRAY1..32 OF CHAR     typeclass(inttype,realtype,
chartype,booltype,  arraytype,recordtype,subrtype,forwardref,pointtype,  settype
,stringtype,wordtype,bytetype,prtype,enumtype,  cardtype,addrtIMPLEMENTATION MOD
ULE GetFiles  FROM CPM IMPORT BDOS,BDOSHL,sfofc,snofc,fcb,sdafc  FROM CPMBIOS IM
PORT directory  FROM SYSTEM IMPORT ADR  FROM Files IMPORT ConvertFileName  (*Get
 a list of file names meeting a wildcard description*)  VARi,j,kINTEGER  ffcb  n
ameFileName  DevCharCHAR  WildCardBOOLEAN  PROCEDURE GetNames(PatternARRAY OF CH
ARVAR namesARRAY OF FileName    VAR CountINTEGER)  VARdmaARRAY 0..3 OF directory
    PROCEDURE SearchForFileNames  BEGIN  ConvertFileName(f  RAFBGCHDIEype,unknow
ntype,intorcard)  pnamePOINTER TO name    pparamPOINTER TO param  paramRECORD  v
arparBOOLEAN  vartypepname  nextpparam  openarrayBOOLEAN  END  object ( (* types
 of symbol table entrys *)  constant, prozedure, funktion,  variable, tipe,stdpr
oc,stdfunc,modclass,linkclass,forrefer  )  vformBYTE  nameRECORD  lowerpname  up
perpname  exportlinkpname  ntypepname  CASE nameclassobject OF  constantvaluINTE
GER  CASE INTEGER OF  0actIMPLEMENTATION MODULE Import     (* A module to perfor
m exports and imports for modula-2     programs. 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 tables. For this reason, if you use thi
s  module to import several symbol tables, they will not be linked  together cor
rectly. This means that you cannot do type checking  using this module.    Let m
e explain that more thoroughly. Each SYM Table cvalINTEGER    enumBOOLEAN  1rval
REAL  END  prozedure,funktion  padrINTEGER  forrefBOOLEAN  codeadrINTEGER  procm
odBYTE  existopenBOOLEAN    variableaddrsINTEGER   groupBYTE   formvform  tipesi
zeINTEGER  CASE classtypeclass OF  arraytypeelemtypepname    indextypepname(*nil
none*)  recordtypesubfieldspname  subrtype,enumtypelowINTEGER            highINT
EGER    btypepname  pointtype,settomtains a   copy of every declaration which is
 used in the SYM table. For  example, it you import BYTE from SYSTEM, there is a
 copy of the  declaration for BYTE. A symbol like BYTE is likely to be imported 
 by a number of different symbol tables and so several copies  of the declaratio
n will exist. In the compiler, all these are linked  together so that BYTE only 
has one active definition. Otherwise,   variables of type BYTE imported from dif
ferent modules would not  be compatible.    Nor does it ypereftypepname  prtypep
rparspparam  unknowntype,forwardreftmodnoINTEGER  END    stdprocstdordINTEGER  s
tdfunc  genlistpname  stdclassBYTE  partypepname  compatBYTE  CASE INTEGER OF  0
funcnoBYTE  1funcdopBYTEfuncconstINTEGER  2funcmopBYTE  END    modclassmagicINTE
GER(*magic number*)  nextmodulepname(*next imported module*)  modnamespname(*sym
bol table*)  modlistpname(*linked list of names*)  contain the code to process t
he import list  *)  FROMFastMove IMPORT Moveup  FROMStorage IMPORT ALLOCATE  FRO
MTerminal IMPORT WriteString,WriteLn  FROMSYSTEM IMPORT ADR  FROMFiles IMPORT Lo
okup,SeqReadBlock,Close,FILE  CONSTBiggestFile8191(*biggest sym file readable*) 
     VAR   COMPLINKpname   PLINK,LASTLINK,nlinkpname   RELOFF,GLOBRELOFF,RELBASE
CARDINAL   SIDalfa   HIDEALLBOOLEANFALSE   HIDEOTHERSBOOLEAN   NEWMODNAMEpname  
 MODULENAMEalfa   MODULEPNTpname   DISPanonlistpname(*anonymous names*)  modbase
CARDINAL(*for table relocation*)  globalbaseCARDINAL(*for global relocation*)  m
oddebugBOOLEAN(*true if compiled with debug*)    (*The following variables give 
the state of the  variables after the def module is compiled*)     mdgroupnoINTE
GER(*number of variable groups*)  mdconstnoINTEGER(*number of constants *)  mdla
bnoINTEGER(*number of procedures*)  mdmodulenoINTEGER(*number fo next imported m
odule*)  mdreLAY  pname   LASTNAME pname  NAMEPNTpname     (*Symbol table entrie
s consist of a NAME record preceded  by a identifier length BYTE preceded by the
 identifier  stored backwards. The top bit of the length is set to 'hide'  the i
dentifier. The second top bit is used to mark accessible   symbols though this i
s not done by this version of the   import module *)    PROCEDURE HIDE(pADDRESS)
    (*Hide an identifier    An identifier is hidden by setting the top bit  of t
he byte preceding the poiloffsetINTEGER(*rel code buffer pointer*)  mdrelblockIN
TEGER(*and block number*)     linkclasslinkpname  END      END  VARIDalfa  PROCE
DURE RETRNAME(PADDRESS)  PROCEDURE LOOKUP(idalfatabpname)pname  PROCEDURE LOADFI
LE(fnFileName)pname  END Import.    F Q EWriteName(RightNamesj,OutputAdded)  Wri
teLn  END PrintRight    PROCEDURE CompareOK(f1,f2FileRecord)BOOLEAN    VARfn1  R
AFBGCHDIEnter *)  BEGIN  pADDRESS(CARDINAL(p)-1)  IF p128 THEN pp+128 END  END H
IDE  PROCEDURE UNHIDE(pADDRESS)    (*Hide an identifier    An identifier is hidd
en by setting the top bit  of the byte preceding the pointer *)  BEGIN  pADDRESS
(CARDINAL(p)-1)  IF p128 THEN pp-128 END  END UNHIDE  PROCEDURE RETRNAME(pADDRES
S)  VARiINTEGER  lenINTEGER  BEGIN  pADDRESS(CARDINAL(p)-1)  lenORD(p)  (*clear 
top two bits *)    IF len128 THEN lenlen-128 END  IF len64 TlinkRELPNTR(link)   
      END (*case nameclass*)  nlinkexportlink   END      END (*while nlinknil*) 
 END RELOCATE (*relocate*)  PROCEDURE READFILE(fnFileName)BOOLEAN  TYPEBlockARRA
Y0..127 OF BYTE  pBlockPOINTER TO Block  VARfFILE  replyINTEGER  FirstBOOLEAN  p
pBlock  bARRAY0..BiggestFile OF BYTE  BEGIN  reply1  WHILE (replyHIGH(fn)) AND (
fnreply'.') AND (fnreply' ')  AND (fnreply0x) DO  INC(reply)  END  IF replyHIGH(
fn) THEHEN lenlen-64 END  IF len32 THEN lenlen-32 END    FOR i1 TO len DO  pADDR
ESS(CARDINAL(p)-1)  IDiCHR(p)  END  FOR ilen+1 TO HIGH(ID) DO IDi' ' END  END RE
TRNAME    PROCEDURE LOOKUP(LIDalfaTABLEpname)pname  BEGIN  LASTNAMENIL  LOOP    
IF TABLENIL THEN EXIT END  LASTNAMETABLE  RETRNAME(TABLE)  IF IDLID THEN TABLETA
BLE.upper  ELSIF IDLID THEN TABLETABLE.lower  ELSE EXIT END  END  RETURN TABLE  
END LOOKUP  PROCEDURE RELPNTR(FIELDN RETURN FALSE END  IF fnreply'.' THEN  IF (r
eply+3)HIGH(fn) THEN RETURN FALSE END  fnreply'.'  fnreply+1'S'  fnreply+2'Y'  f
nreply+3'M'  fnreply+4' '  END  Lookup(f,fn,reply)  IF reply0 THEN   WriteString
(' File not found')WriteString(fn)WriteLn  RETURN FALSE   END    (*Read the data
 *)  SeqReadBlock(f,ADR(b),SIZE(b),reply)  IF reply0 THEN   WriteString('SYM Fil
e Empty ')WriteLn  RETURN FALSE   END  IF replySIZE(b) THEN  WriteSADDRESS)ADDRE
SS     (*Relocate a pointer     There are two areas which the pointer may need  
relocating relative to (see Churchill). The globals  symbol table and the local 
symbols table.    The global symbol table is assumed to be lower in memory*)  VA
RaADDRESS  BEGIN  IF FIELDSNIL THEN       aNIL   ELSIF CARDINAL(FIELDS)RELBASE T
HEN  aADDRESS(CARDINAL(FIELDS)-GLOBRELOFF)  ELSE  aADDRESS(CARDINAL(FIELDS)-RELO
FF)   END  RETURN a        END RELPNTR     PROCEDURE RELOCATE  String(' SYM file
 too large ')  WriteLn  RETURN FALSE  END  ALLOCATE(p,reply)  Moveup(ADR(b),p,re
ply)  GLOBRELOFF0  NEWMODNAMEpname(CARDINAL(p)+ORD(b0)+2)  RETRNAME(NEWMODNAME) 
 RELOFFNEWMODNAME.modbase-CARDINAL(p)  RELBASENEWMODNAME.modbase  Close(f)  RETU
RN TRUE  END READFILE  PROCEDURE ENTERNAME   VARSIDalfa  BEGIN  RETRNAME(COMPLIN
K)   SIDID  NAMEPNTLOOKUP(ID,DISPLAY)   IF LASTNAMENIL THEN DISPLAYCOMPLINK  ELS
E  RETRNAME(LASTNAME)  IF ID (* Relocate one of the entry lists just entered    
     Also, if any entry is a link, replace pointer by pointer to     linked obje
ct*)  VAROLDPARpparam  BEGIN  WHILE nlinkNIL DO       WITH nlink DO   RETRNAME(n
link)  ntypeRELPNTR(ntype)   lowerRELPNTR(lower)   upperRELPNTR(upper)     expor
tlinkRELPNTR(exportlink)   CASE nameclass OF   tipe      CASE class OF       arr
aytype  elemtypeRELPNTR(elemtype)   indextypeRELPNTR(indextype)      SID THEN LA
STNAME.upperCOMPLINK  ELSE LASTNAME.lowerCOMPLINK END  END  COMPLINK.upperNIL  C
OMPLINK.lowerNIL          END ENTERNAME     PROCEDURE MERGENAMES   (*     merge 
the names pointed to by complink into the table one below the     top of the dis
play         Note that the heap is not cut back since that     has already been 
done by the compress routine, if required*)  VAR Ppname   BEGIN  COMPLINKNEWMODN
AME.modlist   WHILE (COMPLINKNIL) DO   ENTERNAME   COMPLINK   recordtype  subfie
ldsRELPNTR(subfields)         subrtype,enumtype  btypeRELPNTR(btype)         poi
nttype,settype  reftypeRELPNTR(reftype)         prtype  prparsRELPNTR(prpars)   
OLDPARprpars   WHILE OLDPARNIL DO       WITH OLDPAR DO   vartypeRELPNTR(vartype)
   nextRELPNTR(next)   OLDPARnext   END      END           END  (*case class*)  
    linkclass    RAFBGCHDIECOMPLINK.exportlink   END  END MERGENAMES     PROCEDU
RE LOADFILE(fnFileName)pname  (* load a file to be imported           relocate t
he entries *)      VAR TIDalfa     BEGIN  DISPLAYNIL  GLOBRELOFF0  IF NOT READFI
LE(fn) THEN       RETURN NIL      END  (*newmodname points to entry for first mo
dule name       which is the name of the module being loaded       it is followe
d by a chain of names of modules      imported by that module         in the cas
e of the first module, we m(*keep a circular buffer of characters while matching
 is  happening*)      PROCEDURE WaitForCh  BEGIN  IF NOT ShowChange THEN  ShowCh
angeTRUE  OutputToScreen(TRUE)  Redisplay  END  REPEAT  BusyRead(ch)  UNTIL ch0x
  END WaitForCh  PROCEDURE CheckInterrupt()BOOLEAN    (*Check the keyboard for a
n interupt (Control U)    Also, if Escape has been typed, stop terminal output  
until another character is typed*)    VARch1CHAR  BEGIN  BusyRead(ch1)  CASE ch1
 OF   15xRETURNust set the     numbers 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(COMPLINK)  modlistRELPNTR(modlist)   anonlistRELPN
TR(anonlist)   nlinkmodlist   RELOCATE  nlinkanonlist   RELOCATE  nextmoduleRELP
NTR(nextmodule)   COMPLINKnextmodule   END      END  MERGENAMES  NE TRUE        
1bxShowChangeFALSE      OutputToScreen(FALSE)  END  RETURN FALSE  END CheckInter
rupt  PROCEDURE GetAChar(VAR ch1CHAR)  BEGIN  IF MacroDepth0 THEN  WaitForCh  ch
1ch  IF Learning AND (LearnLenHIGH(Text)) THEN  INC(LearnLen)  TextLearnLench  E
ND  ELSE  WITH MacroStackMacroDepth DO  IF PosDef.Length THEN      DEC(Count)   
   IF CheckInterrupt() OR NOT Found THEN  MacroDepth1  Count0  END      IF Count
1 THEN  WMODNAME.modnamesDISPLAY       RETURN NEWMODNAME      END LOADFILE   END
 Import.         BAK wQ " ANSI    SYSmg sASSIGN  COMmg ATTRIB  EXEmg £))(*go to 
next*)  END (*WHILE i255*)    iBDOS(sdafc,80H)(*reset to default*)    END Search
ForFileNames  BEGIN    (* Convert Pattern to a file name*)    jHIGH(Pattern)  Wi
ldCardFALSE  IF jHIGH(name) THEN jHIGH(name) END  FORDEC(MacroDepth)      ELSE  
Pos1  END      GetAChar(ch1)  ELSE  ch1Def.CommCharsPos  INC(Pos)  END  END  END
  END GetAChar  PROCEDURE AddMacro(pPKeyDefrepeatINTEGER)  BEGIN  IF (pNIL) AND 
(MacroDepthHIGH(MacroStack)) THEN    (*make sure that macro is not recursive*)  
    FOR i1 TO MacroDepth DO  IF MacroStacki.Defp THEN  ErrorMessage('Recursive m
acros!',' ')  MacroDepth0  RETURN  END  END  INC(MacroDepth) IMPLEMENTATION MODU
LE Macros    (*This is a special version of macros for machines  which do not ha
ve function keys at all, so do  not need the extra code for function key detecti
on*)    FROMDoMenu IMPORT GetString,Redisplay  FROMStorage IMPORT  ALLOCATE,DEAL
LOCATE  FROMTerminal IMPORT BusyRead,WriteString,WriteLn,Write  FROMFiles IMPORT
 FILE,SeqReadBlock,SeqWriteBlock,Lookup,Create,Close  FROMSYSTEM IMPORT ADR,TSIZ
E  FROMEditDisplay IMPORT ErrorMessage  FROMFastMove IMPORT Moveup  FROMSc WITH 
MacroStackMacroDepth DO  Pos1  Defp  Countrepeat  END(*WITH*)  END(*pNIL etc*)  
END AddMacro  VARSpecialSequenceBOOLEANFALSE  PROCEDURE ReadAChar(VAR ResultCHAR
)    (*read next character, checking for arrows/function keys  in and out point 
to the characters which have been read ahead  By ReadAChar in an attempt to reso
lve a macro    When ReadAChar is entered, if this buffer is not empty,  the firs
t character is to be looked up to see if it is a   start of areenIO IMPORT Outpu
tToScreen  CONSTBlockLen128  ESC1bx  TYPE  KeyDefRECORD  Length1..61  CommCharsA
RRAY1..20 OF CHAR  END  PKeyDefPOINTER TO KeyDef  MacroPointRECORD  PosCARDINAL 
 DefPKeyDef  CountINTEGER  END    VAR  chCHAR  CommandsARRAY''..'Z' OF PKeyDef  
MacroDepthCARDINAL0  MacroStackARRAY1..5 OF MacroPoint  LearnchCHAR  LearnLenCAR
DINAL  LearningBOOLEANFALSE  TextARRAY1..60 OF CHAR  iCARDINAL  ShowChangeBOOLEA
N      RAFBGCHDIE key definition*)  BEGIN  GetAChar(Result)  END ReadAChar    PR
OCEDURE GetDefChar  VARTextARRAY1..1 OF CHAR  BEGIN  GetString(Text,LearnLen,'Ch
ar to define')  LearnchCAP(Text1)  END GetDefChar  PROCEDURE DefMacroText  VARpP
KeyDef  BEGIN  IF LearnLen0 THEN  ALLOCATE(p,TSIZE(CARDINAL)+LearnLen)  Commands
Learnchp   WITH p DO  LengthLearnLen  FOR LearnLenLearnLen TO 1 BY -1 DO  CommCh
arsLearnLenTextLearnLen  END  END    END  END DefMsequences*)  IF reply0 THEN  B
lockreply0x  SeqWriteBlock(F,ADR(Block),BlockLen,reply)  END    Close(F)  END St
oreMacros  PROCEDURE OutCh(chCHAR)  BEGIN  IF ch' ' THEN  Write('')Write(CHR(ORD
(ch)+64))  ELSE  Write(ch)  END  END OutCh  PROCEDURE PrintMacros  BEGIN  FOR ch
'A' TO 'Z' DO  IF CommandschNIL THEN       WITH Commandsch DO  OutCh(ch)  FOR i1
 TO Length DO   OutCh(CommCharsi)   END  END      WriteLn      END  END  WracroT
ext  PROCEDURE LearnMacro    (*Learn a macro definition  called at either end of
 definition*)    BEGIN  IF NOT Learning THEN  GetDefChar  LearningTRUE  LearnLen
0  ELSE  LearnLenLearnLen-2  DefMacroText  LearningFALSE  END  END LearnMacro  P
ROCEDURE DefMacro  BEGIN  GetDefChar  IF (Learnch'A') AND (Learnch'Z') OR (Learn
chESC) THEN  GetString(Text,LearnLen,'Macro')  DefMacroText  END  END DefMacro  
PROCEDURE Macro(chCHARrepeatINTEGER)  VARiiteString(' Enter any character to con
tinue ')  WaitForCh  END PrintMacros  BEGIN  ShowChangeTRUE  FOR ch'' TO 'Z' DO 
CommandschNIL END  Lookup(F,'MACROS.DAT ',reply)  IF reply0 THEN  LoadMacros  EN
D    END Macros.  DISC2  BAT ! LDISC3  BAT u! .upper  ELSIF IDLID THEN TABLETABL
E.lower  ELSE EXIT END  END  RETURN TABLE  END LOOKUP  PROCEDURE RELPNTR(FIELDCA
RDINAL  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  
PROCEDURE LoadMacros  VARBlockARRAY0..BlockLen-1 OF CHAR  BEGIN  LOOP  SeqReadBl
ock(F,ADR(Block),BlockLen,reply)  IF replyBlockLen THEN EXIT END  reply0  WHILE 
Blockreply0x DO  LearnLenORD(Blockreply)  LearnchBlockreply+1  replyreply+2  FOR
 i1 TO LearnLen DO  TextiBlockreply  INC(reply)  END  DefMacroText  END  END  EN
D LoadMacros  PROCEDURE StoreMacros  VARBlockARRAY0..BlockLen-1 OF CHAR    PROCE
DURE StoreOneMacro(pPKeyDef)  BEGIN  IF pNIL THEN  WITH p DO  IF (reply+Length+1
4)BlockLen THEN  Blockreply0x  SeqWriteBlock(F,ADR(Block),BlockLen,reply)  reply
0  END  BlockreplyCHR(Length)  Blockreply+1Learnch  replyreply+2  FOR i1 TO Leng
th DO  BlockreplyComMODULE MyLU    (*Dave Moore's own version of LU for use with
 his Modula-2  compiler *)    FROMTerminal IMPORT WriteString,WriteLn,ReadString
,Write   FROMFiles IMPORT FILE,ReadBlock,WriteBlock,Lookup,Create,FileName,  Seq
ReadBlock,SeqWriteBlock,ConvertFileName,Close,  MakeBAK,SetBlock,Devicetype  FRO
MSmallIO 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  Learnch'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 fil
e')  WriteLn  RETURN  END  IF reply0 THEN RETURN END  reply0  FOR Learnch'A' TO 
'Z' DO StoreOneMacro(CommandsLearnch) END    (*Now output key   RAFBGCHDIEexReco
rdRECORD  StatusBYTE  BaseNamealfa  Extexten  StartSectorCARDINAL  LengthCARDINA
L  DateCARDINAL  TimeCARDINAL  ScrunchedBOOLEAN  Filler ARRAY 1..11 OF BYTE  END
  IndexARRAY1..128 OF IndexRecord  VARLibFILE  LibNameFileName  replyINTEGER  Di
rectoryIndex  SlotsCARDINAL  NextSectorCARDINAL  i,jCARDINAL  CommandCHCHAR  FNa
meFileName  PROCEDURE ReadCommand  (*read an input command, return command lette
r in CommandCH  return file n,OutPosCARDINAL  chCHAR  EofBOOLEAN  PROCEDURE Ente
rId(sARRAY OF CHAR)  VARrPName  i,jCARDINAL  BEGIN  jLength(s)  ALLOCATE(r,j+TSI
ZE(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(LenCARDINA
LsARRAY 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')  ReadString(Text)  CommandCHCAP(Tex
t1)  i2  WHILE (iHIGH(Text)) AND (Texti' ') DO  INC(i)   END  j0  WHILE (jHIGH(F
Name)) AND (iHIGH(Text)) AND (Texti0c) DO  FNamejCAP(Texti)  INC(j)  INC(i)  END
  WHILE jHIGH(FName) DO  FNamej' '  INC(j)  END  END ReadCommand    PROCEDURE Ad
dEntry(NamefcbPosition,Size,EDate,ETimeCARDINALScBOOLEAN)  VARi,  EnterId(id)  I
NC(Code)  ii+Len  END  END EnterGId  PROCEDURE SetUpNames  VARsIdent  PROCEDURE 
PutId  BEGIN  si0x  EnterId(s)  INC(Code)  END PutId  BEGIN  Code128  EnterGId(2
,'BYDOIFINOFORTO')  EnterGId(3,'ANDDIVENDFORMODNOTSETVARADR')  EnterGId(4,'CASEE
LSEEXITFROMLOOPTHENTYPEWITHHIGHCHARTRUE')  EnterGId(5,'ARRAYBEGINCONSTELSIFUNTIL
WHILEFALSE')  EnterGId(6,'EXPORTIMPORTMODULERECORDREPEATRETURN')  EnterGId(7,'PO
INTERWriteLnINTEGERADDRESSBOOLEAN')  EnterGIdjCARDINAL  BEGIN  i2  WHILE (iSlots
) AND (Directoryi.Status0ffh) DO INC(i) END  IF iSlots THEN  WriteString(' Direc
tory full - redo with more slots')  WriteLn  HALT  END  WITH Directoryi DO  Stat
us0  BaseNameName.fcbfn  ExtName.fcbft  StartSectorPosition  LengthSize  DateEDa
te  TimeETime  ScrunchedSc  FOR j1 TO HIGH(Filler) DO Fillerj0 END  END  END Add
Entry  PROCEDURE FindName(ffcb)CARDINAL  (*find a name - return 0 if (8,'CARDINA
LTerminal')  EnterGId(9,'PROCEDUREQUALIFIEDCopyright')  EnterId('DEFINITION')INC
(Code)  EnterId('WriteString')INC(Code)  (*Enter tab codes*)  FOR i1 TO 6 DO  si
-109x  PutId  END  (*enter space sequences*)  s0' '  FOR i2 TO 6 DO  si-1' '  Pu
tId  END  (*Enter CR/LF code*)  s00dx  s10ax  i2  PutId  FOR i3 TO 6 DO  si-109x
  PutId  END    END SetUpNames  PROCEDURE GetChar  VARreplyINTEGER  BEGIN  IF In
PosHIGnot found *)  VARiCARDINAL  BEGIN  i2  LOOP  IF iSlots THEN RETURN 0 END  
WITH Directoryi DO  IF (Status0) AND (BaseNamef.fcbfn) AND (Extf.fcbft) THEN  RE
TURN i  END  END  INC(i)  END  END FindName  PROCEDURE Transfer(VAR From,ToFILEM
axSectorsCARDINAL)CARDINAL  VARi,jCARDINAL  replyINTEGER  BufferARRAY0..1023 OF 
BYTE  BEGIN  j0  LOOP  IF MaxSectors8 THEN i8*128 ELSE iMaxSectors*128 END  SeqR
eadBlock(From,ADR(Buffer),i,reply)  IF reH(BufferIn) THEN  SeqReadBlock(From,ADR
(BufferIn),SIZE(BufferIn),reply)  InPos0  END  chBufferInInPos  (*WriteCard(InPo
s,4)WriteString(' ')WriteHex(ORD(ch),4)WriteLn*)  INC(InPos)  END GetChar  PROCE
DURE FlushOut  VARreplyINTEGER  iCARDINAL  BEGIN  IF OutPos0 THEN RETURN END  i1
28*((OutPos+127) DIV 128)  IF iHIGH(BufferOut) THEN iHIGH(BufferOut) END  WHILE 
OutPosi DO  BufferOutOutPos1ax  INC(OutPos)  END  INC(i)  SeqWriteBlock(To,ADR(B
ufferOut),ply0 THEN EXIT END  SeqWriteBlock(To,ADR(Buffer),reply,reply)  jj+CARD
INAL(reply) DIV 128  IF MaxSectors8 THEN EXIT END  MaxSectorsMaxSectors-8  END  
RETURN j  END Transfer  PROCEDURE UnScrunch(VAR From,ToFILE)  TYPEPNamePOINTER T
O Name  IdentARRAY0..60 OF CHAR  NameRECORD  CodeCARDINAL  NextPName  TextIdent 
 END  VARi,jCARDINAL  replyINTEGER  BufferIn,BufferOutARRAY0..1023 OF BYTE  Tabl
ePName  pPName  CodeCARDINAL  IdIdent  InPos  RAFBGCHDIEi,reply)  OutPos0  END F
lushOut  PROCEDURE PutChar(chCHAR)  BEGIN  IF OutPosHIGH(BufferIn) THEN FlushOut
 END  BufferOutOutPosch  INC(OutPos)  END PutChar    PROCEDURE GetCode  BEGIN  C
ode0  IF ch' ' THEN  CodeORD(ch)*256  GetChar  END  CodeCode+ORD(ch)  END GetCod
e  PROCEDURE PutId  VARiCARDINAL  pPName  BEGIN  GetCode  pTable  WHILE (pNIL) A
ND (p.CodeCode) DO   pp.Next   END  IF pNIL THEN   WriteString(' error in PutId'
)  Writerectoryi DO  Status0ffh  BaseName'        '  Ext'   '  END  END  WITH Di
rectory1 DO  Status0  LengthSlots DIV 4  StartSector0  END  NextSectorSlots DIV 
4  END GetSlotCount  PROCEDURE OpenLibrary  (*open the library file *)  BEGIN  W
riteString(' Enter name of library file')  ReadString(LibName)  Lookup(Lib,LibNa
me,reply)  IF reply0 THEN  WriteString(' Could not find that file - create it ')
  IF Yes() THEN  Create(Lib,LibName,reply)  Card(Code,4)  WriteString(Table.Text
)  WriteLn  RETURN  END  i0  WITH p DO  WHILE Texti0x DO  PutChar(Texti)  INC(i)
  END  END  END PutId  PROCEDURE DefCode  VARIdIdent  iCARDINAL  BEGIN  GetChar 
 IF ch0x THEN EofTRUERETURN END  i0  WHILE ch0x DO  Idich  PutChar(ch)  GetChar 
 INC(i)  END  Idi0c  GetChar  GetCode  EnterId(Id)  END DefCode    BEGIN  TableN
IL  SetUpNames  j0  InPosHIGH(BufferIn)+1IF reply0 THEN  WriteString(' could not
 create it either')  WriteLn  HALT  END  GetSlotCount  ELSE  WriteString(' run c
ancelled')  WriteLn  HALT  END  ELSE  ReadBlock(Lib,ADR(Directory),0,SIZE(Direct
ory),reply)  Slots4*Directory1.Length  WriteCard(Slots,4)WriteString(' slots fou
nd')WriteLn  NextSector0  FOR i1 TO Slots DO  WITH Directoryi DO  IF Status0ffh 
THEN  jLength+StartSector  IF jNextSector THEN NextSector  OutPos0  GetChar  Eof
FALSE  LOOP  IF ch0x THEN DefCode   ELSIF (ch07fx) OR (ch' ') THEN PutId  ELSE P
utChar(ch) END  GetChar  IF Eof THEN EXIT END  END  FlushOut  END UnScrunch  PRO
CEDURE DoAddition(VAR fFILEScBOOLEAN)  VARi,jCARDINAL  BEGIN  iFindName(f.f)  IF
 i0 THEN Directoryi.Status0ffh END  SetBlock(Lib,NextSector)  jNextSector  NextS
ectorNextSector+Transfer(f,Lib,65535)  Close(f)   AddEntry(f.f,j,NextSector-j,0,
0,Sc)  END DoAdditionj END  END  END  END  END  END OpenLibrary  PROCEDURE Close
Library  BEGIN  WriteBlock(Lib,ADR(Directory),0,128*(Slots DIV 4),reply)  Close(
Lib)  END CloseLibrary  PROCEDURE DeleteFile(fnARRAY OF CHAR)  VARffcb  iCARDINA
L  BEGIN  ConvertFileName(f,FileName(fn))  iFindName(f)  IF i0 THEN   WriteStrin
g(' Could not find ')  WriteString(fn)  WriteLn  ELSE  WriteString(fn)  WriteStr
ing(fn)  WriteLn  Directoryi.Status0ffh  END  END DeleteF  PROCEDURE AddFile(fnA
RRAY OF CHARScBOOLEAN)  (*copy a file into the current library*)  VARfFILE  i,jC
ARDINAL  BufferARRAY0..1023 OF BYTE  BEGIN  Lookup(f,FileName(fn),reply)  IF rep
ly0 THEN  WriteString('File ')  WriteString(fn)  WriteString(' not found')  Writ
eLn  RETURN  END  DoAddition(f,Sc)  END AddFile  PROCEDURE Yes()BOOLEAN  VARsARR
AY1..3 OF CHAR  BEGIN  LOOP  ReadString(s)  CASE CAP(s1) OF  'Y'RETURN TRUE  'N'
RETURN FALSE  ELile  PROCEDURE ExtractFile(fnARRAY OF CHAR)  VARffcb  iCARDINAL 
 foFILE  BEGIN  ConvertFileName(f,FileName(fn))  iFindName(f)  IF i0 THEN   Writ
eString(' Could not find ')  WriteString(fn)  WriteLn  ELSE  WriteString('Extrac
ting ')  WriteString(fn)  WriteLn  Create(fo,FileName(fn),reply)  IF reply0 THEN
  WriteString(' Could not create ')  WriteString(fn)  WriteLn  RETURN  END  WITH
 Directoryi DO  SetBlock(Lib,StartSector)  IF ScruncSE  WriteLn  WriteString(' P
lease enter Yes or No')  END  END  END Yes  PROCEDURE GetSlotCount  BEGIN  Write
String(' How many slots ')  ReadCard(Slots)  IF SlotsHIGH(Directory) THEN  Write
Card(HIGH(Directory),4)  WriteString(' is maximum slots allowed by this program'
)  WriteLn  SlotsHIGH(Directory)  END  Slots4*((Slots+3) DIV 4)  IF Slots0 THEN 
HALT END  WriteCard(Slots,4)  WriteString(' Slots allocated')  WriteLn  FOR i1 T
O Slots DO   WITH Di  RAFBGCHDIEhed THEN UnScrunch(Lib,fo)  ELSE iTransfer(Lib,f
o,Length) END  END  Close(fo)  END  END ExtractFile  PROCEDURE DisplayName( dInd
exRecord)  VARjCARDINAL  BEGIN  j1  WITH d DO  WHILE (j8) AND (BaseNamej' ') DO 
 Write(BaseNamej)  INC(j)  END  WriteString('.')  WriteString(Ext)  WHILE j8 DO 
  Write(' ')  INC(j)  END  END  END DisplayName    PROCEDURE ListNames  VARi,j,k
CARDINAL  BEGIN  k0  FOR i2 TO Slots DO  WITH Directoate')WriteLn  WriteString('
D - Delete')WriteLn   WriteString('E - Extract')WriteLn  WriteString('L - List f
iles')WriteLn  WriteString('R - Reorganize')WriteLn  WriteString('U - Update All
')WriteLn  WriteLn  LOOP  ReadCommand  CASE CommandCH OF   'F'CloseLibraryEXIT  
'A'AddFile(FName,FALSE)  'S'AddFile(FName,TRUE)  'D'DeleteFile(FName)  'E'Extrac
tFile(FName)  'L'ListNames  'U'UpdateAll  'R'Reorg  END  END  END 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 Writ
eLn END  END ListNames   PROCEDURE SetUpFcb(VAR fFILE)  BEGIN      f.devtypedisc
      f.eofFALSE      WITH f.f DO  fcbex0  fcbcr0  cpmres0  fcbrc0  fcbrn.loword
er0  fcbrn.highorder0  END  END SetUpFcb  PROCEDURE Reorg  VARi,j,kCARDINAL  Old
DirIndex  OldSlotsCARDINAL  OldLibFILE  BEGIN  OldLibLib  Close(Lib)  MakeBAK(Li
b,reply)  OldDirDirectory  OldSlotsSlots  SetUpFcb(OldLib)  OldLib.f.fcbft'BAK' 
 kBDOS(opnfc,ADR(OldLib.f))  Create(Lib,LibName,reply)  IF reply0 THEN  WriteStr
ing(' Could not create new library')  WriteLn  RETURN  END  WriteString(' Old li
brary had ')WriteCard(OldSlots,4)  WriteString(' slots')WriteLn  GetSlotCount  F
OR i2 TO OldSlots DO  WITH OldDiri DO  IF StDEFINITION MODULE Pattern    (*This 
is a pattern matching module    Dave Moore, FTL Modula-2    To match a pattern w
ith this module, you must create a  pattern description with the "Create" functi
ons, and then   use the MatchPattern function.    This function returns a tree d
escribing 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*)    AnyOatus0ffh THEN  SetBlo
ck(OldLib,StartSector)  SetBlock(Lib,NextSector)  kNextSector  jTransfer(OldLib,
Lib,Length)  AddEntry(fcb(OldDiri),k,j,Date,Time,Scrunched)  NextSectorNextSecto
r+j  END  END  END  END Reorg  PROCEDURE UpdateAll  VARi,j,kCARDINAL  fFILE  BEG
IN  i0IF FName0' ' THEN FName0'' END  WHILE (iHIGH(FName))AND (FNamei' ') DO  Wr
iteString(' Searching disk ')  Write(FNamei)  WriteLn  FOR j2 TO Slots DO  f,(* 
A character from a set*)    Alternatives,(* One of two alternatives*)    Concat,
(* Concatenate two patterns*)    RightLimit)(* Make sure at right boundary*)    
CharSetSET OF CHAR    PNodePOINTER TO Node    PStatusPOINTER TO State    (*If a 
match is successful, the match is returned by a tree of  states. Each node in th
e tree gives the start position of the  match and the position of the next chara
cter following the match.    It also contains a pointer to the pattern node whic
h wWITH Directoryj DO  IF Status0ffh THEN      f.ffcb(Directoryj)      SetUpFcb(
f)      f.f.fcbdnORD(FNamei)-ORD('A')+1      kBDOS(opnfc,ADR(f.f))      IF k0ffh
 THEN  WriteString(' Updating')  DisplayName(IndexRecord(f.f))  WriteLn  DoAddit
ion(f,Scrunched)  END      END  END  END  INC(i)  END  END UpdateAll  BEGIN  Ope
nLibrary  WriteString(' Commands areF - Finish')WriteLn  WriteString('A - Add or
 upd  RAFBGCHDIEas matched.    This information has to be kept separately from t
he pattern decription  node because a given pattern node can match several times
 in a given  pattern, either because of recursion, or because you have 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-tr
acking 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    E1CreateConcatNode(E,Crea
teLimitNode())    E1 will ensure that all of the string is matched  *)  PROCEDUR
E CreateStringNode(sARRAY OF CHAR)PNode    (*Create a node which matches a fixed
 string    s is the string to match*)    PROCEDURE CreateAltNode(p,qPNode)PNode 
   (*Match either p or q *)    PROCEDURE CreateAnyOfNode(sCharSetmin,maxCARDINAL
LongestBOOLEAN)PNodean alternative match or a longer  one, this value is increme
nted    When we are tracking forward,   it is initialized*)    MatchedAtCARDINAL
(* Position at which this      node matched*)  PatternNodePNode(* Pointer to pat
tern node      matched by this status node*)  MatchedToCARDINAL(* Position of ch
aracter after     last character matched by      pattern*)  Left,RightPStatus(* 
Pointer to substatus tree          Left is used for Al    (*Match any character 
in set "s"    min and max are the minimum and maximum characters to match    Nor
mally, the first attempt matches the shortest acceptable number  of characters. 
In this case, to match more characters, backtracking  must be performed.    If y
ou know that matching the most possible characters will not cause  the pattern t
o fail (for example, when matching identifiers in   Modula-2, in which identifie
rs cannot run together, then specifying  TRUE for Longest will produce a fastern
atives     Both Left and Right are used     for Concantenation*)  END    NodeREC
ORD  CASE NTypeNodeType OF  String  TextLenCARDINAL  TextARRAY0..0 OF CHAR    An
yOf  MatchCharSet  MinCount,MaxCountCARDINAL  FastBOOLEAN    Alternatives,Concat
  First,SecondPNode  (* if either is null, it matches the null string*)    END  
  END    (*The following functions return a node representing a pattern to be  m
atcheter pattern match  *)    PROCEDURE CreateConcatNode(p,qPNode)PNode    (*Mat
ch pattern p followed by pattern q *)    PROCEDURE CreateLimitNode()PNode    (*M
atch only if all of the string has been matched     Beware    Do not use a limit
 node as part of a pattern which  can be called recursively (such as "E" above).
 If you do,  the pattern matcher will attempt to match the end of the  string on
 every recursion, which may prevent recursion at all    *)    PROCEDURE MatchPat
tern(pPNodesARRAYd.    Some of the functions require other patterns as parameter
s. These  can be generated using nested function calls.    Recursion is possible
, but some extra work is required to define a  recursive pattern. You must alloc
ate storage for a recursive pattern  before it is used, and then assign its cont
ents after it is defined.    For example, suppose we want to set up a pattern wh
ich matches a string  of a's. The pattern can be given by the grammar    E-aaE  
  This would be set up as follows    OF CHAR)PStatus    (*Match a Pattern   p is
 the root of the pattern to match  s is the text to match    The function return
s a tree if the match is successful.  It returns NIL if the match fails.    The 
match must start at the beginning of the string, but it  need not match the enti
re string - this can be forced by using  a limit node.     If you want to un-anc
hor the match from the beginning of the  string, use a pattern    CreateConcatNo
de(  CreateAnyOfNode(CharSet0x..0ffx,0,64000,FAL NEW(E)  tempCreateAltNode(     
CreateStringNode('a'),     CreateConcatNode(  CreateStringNode('a'),  E)     )  
Etemp    We have allocated "E" first so that it can be used in the  function. We
 could not simply assign the pointer returned by  CreateConcatNode to E, since t
hen the E used in the function  would be pointing elsewhere. Instead, we must co
py the contents  of temp into E so that the pointers remain correct.    This pat
tern "E" is not yet ready to be used, since the pa  RAFBGCHDIESE),  E)    where 
E is the pattern to be matched in un-anchored mode.    The tree returned by the 
pattern matcher contains, in every node, the  first character matched by the pat
tern, and the position of the next  character following the match (so that the d
ifference between these  two values gives the number of characters matched).    
In addition, each node contains a pointer to the pattern node matched  and it ma
y contain pointers to sub-patterns which were matched.    *)  END Pattern.  L  P
ROCEDURE P()BOOLEAN  BEGIN  (* Recursively match the pattern *)  WITH p DO      
 Posq.MatchedAt      StartPosPos      tempNIL      MatchStatusq.Status      CASE
 NType OF  String,RightLimit  tempPattern(p,s,Pos)  RETURN tempNIL   (*string et
c*)  AnyOf  Posq.MatchedTo  IF (MatchStatusMaxCount) AND (sPos IN Match) THEN  I
NC(MatchStatus)  ChangedTRUE  RETURN TRUE  END  RETURN FALSE    Alternatives  IF
 MatchStatus(*$l-*)  IMPLEMENTATION MODULE Pattern    (*This is a pattern matchi
ng module    Dave Moore, FTL Modula-2    *)    FROMSTORAGE IMPORT ALLOCATE,DEALL
OCATE  FROMStrings IMPORT Length  FROMSYSTEMIMPORT TSIZE  VARi,jCARDINAL    Chan
gedBOOLEAN  LenCARDINAL    PROCEDURE CreateStringNode(sARRAY OF CHAR)PNode  VARp
PNode  BEGIN    (*This procedure is provided to allow the creation of nodes    f
or strings easilly. Only the required amount of memory is allocated*)    iLength
(s)  ALLOCATE(1 THEN  MatchLeftBackTrack(q.Left,s,Pos)  IF (MatchLeftNIL) AND Ch
anged THEN   RETURN TRUE  ELSE  MatchStatus2  ChangedTRUE  PosStartPos  MatchLef
tPattern(Second,s,Pos)  RETURN MatchLeftNIL  END  ELSE (*Status2*)  MatchLeftBac
kTrack(q.Left,s,Pos)  RETURN MatchLeftNIL  END    Concat    (* see if we can bac
ktrack on the second string*)    PosMatchStatus  MatchLeftq.Left  MatchRightBack
Tracp,i+3*TSIZE(CARDINAL)+TSIZE(NodeType))  WITH p DO  FOR j0 TO i-1 DO   Textjs
j   END  TextLeni  NTypeString  END  RETURN p  END CreateStringNode  PROCEDURE C
reateAltNode(m,qPNode)PNode  VARpPNode  BEGIN  NEW(p)  WITH p DO  NTypeAlternati
ves  Firstm  Secondq  END  RETURN p  END CreateAltNode  PROCEDURE CreateAnyOfNod
e(sCharSetmin,maxCARDINALLongestBOOLEAN)PNode  VARpPNode  BEGIN  NEW(p)  WITH p 
DO  NTypeAnyOf  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  PosSaveP
os  MatchLeftBackTrack(q.Left,s,Pos)  IF (MatchLeftNIL) OR NOT Changed THEN EXIT
 END  MatchRightPattern(Second,s,Pos)  IF MatchRightNIL THEN  RETURN TRUE  END  
ChangedFALSE  END  PosStain  MaxCountmax  FastLongest  Matchs  END  RETURN p  EN
D CreateAnyOfNode  PROCEDURE CreateConcatNode(m,qPNode)PNode  VARpPNode  BEGIN  
NEW(p)  WITH p DO  NTypeConcat  Firstm  Secondq  END  RETURN p  END CreateConcat
Node    PROCEDURE CreateLimitNode()PNode  VARpPNode  BEGIN  NEW(p)  p.NTypeRight
Limit  RETURN p  END CreateLimitNode  PROCEDURE Pattern(pPNodeVAR sARRAY OF CHAR
VAR PosCARDINAL)PStatusFORWARD      PROCEDURE BackTrack(qPSrtPos  RETURN FALSE  
  END (*CASE*)  END (*WITH*)  END P  BEGIN  pq.PatternNode  IF P() THEN  IF temp
NIL THEN  qtemp  DISPOSE(temp)  ELSE       WITH q DO   StatusMatchStatus  Patter
nNodep  MatchedAtStartPos  MatchedToPos  LeftMatchLeft  RightMatchRight  END    
  END  ELSE  DISPOSE(q)  ChangedFALSE  END  RETURN q  END BackTrack    PROCEDURE
 Pattern(pPNodeVAR sARRAY OF CHARVAR PosCARDINAL)PStatus    tatusVAR sARRAY OF C
HARVAR PosCARDINAL)PStatus    (*perform backtracking after a failure    Returns 
TRUE if a new match was found for node p    On entry the first time, Changed mus
t be false  it will be set true by the first node which extends its match  Hence
, Changed must be true if backtrackimng is completely successful*)    VARcountCA
RDINAL  StartPos,LastPosCARDINAL  pPNode  SaveMatchCARDINAL  MatchLeft,MatchRigh
tPStatus  tempPStatus  MatchStatusCARDINAL  SavePosCARDINA  RAFBGCHDIE(*This pro
cedure matches forward *)  VARcountCARDINAL  StartPos,LastPosCARDINAL  SaveMatch
CARDINAL  QPStatus  MatchStatusCARDINAL  MatchLeft,MatchRightPStatus  SavePosCAR
DINAL  PROCEDURE P()BOOLEAN  BEGIN  (* Recursively match the pattern *)  WITH p 
DO      StartPosPos      CASE NType OF  String  IF (Len-Pos)TextLen THEN RETURN 
FALSE  ELSE  i0  WHILE (iTextLen) AND (sPosTexti) DO  INC(Pos)  INC(i)  END  IF 
iTextLen THEN   ttern.  atch several times in a given  pattern, either because o
f recursion, or because you have 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 Alternativ
es and   AnyOf    When we are backtracking to try   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) AND (sPos IN Match) DO  INC(Pos
)  INC(MatchStatus)  END  END  RETURN MatchStatusMinCount    Alternatives  Match
LeftPattern(First,s,Pos)  IF  MatchLeftNIL TIMPLEMENTATION 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 IO, so your machine must be IBM
   compatible at the BIOS level    This is a slightly modified version of Screen
IO.IBM which will  be available when the MSDOS version of the compiler is runnin
g    The difference is that this version buffers screen output in order to  spee
d up screen output, as character at a time was too slow  *)    FROMHEN   MatchSt
atus1  RETURN TRUE  ELSE    MatchStatus2  MatchLeftPattern(Second,s,Pos)   RETUR
N MatchLeftNIL  END    Concat  MatchLeftPattern(First,s,Pos)  IF MatchLeftNIL TH
EN  MatchStatusPos  MatchRightPattern(Second,s,Pos)  IF MatchRightNIL THEN  RETU
RN TRUE  END  ChangedFALSE  SavePosPos  LOOP  PosSavePos  MatchLeftBackTrack(Mat
chLeft,s,Pos)  IF (MatchLeftNIL) OR NOT Terminal IMPORT CharRoutine,CharEnabled,
BlinkRoutine,BlinkEnabled  FROM SYSTEM IMPORT ADR,SIZE  FROM CPM IMPORT wccfc,BD
OS  FROM IntLogic IMPORT IAND  FROM SysCall IMPORT Int,Packet,ReadOrWrite    (*S
creen handling routines for cursor position, attribute etc    Specific to this c
ompiler*)    CONSTLogScreenWidth80(*Logical screen width   (many people only hav
e 80)*)  RowWidth80(*width of memory for one row   (i.e. number of bytes*)  LogS
creenDepth24(*Lines on the screen*)  Char Changed THEN  EXIT  END  MatchRightPat
tern(Second,s,Pos)  IF MatchRightNIL THEN  RETURN TRUE  END  ChangedFALSE  END  
END  PosStartPos  RETURN FALSE    RightLimit  RETURN PosLen  END (*CASE*)  END (
*WITH*)  END P  BEGIN  IF P() THEN  NEW(Q)  WITH Q DO  StatusMatchStatus  Patter
nNodep  MatchedAtStartPos  MatchedToPos  LeftMatchLeft  RightMatchRight  END  EL
SE  QNIL  Increment1(*number of bytes between characters*)  ScreenSize80*24(*num
ber of bytes in screen area*)    CR0dx(*Carriage return*)  LF0ax(*Line feed*)  T
AB09x(*TAB*)  BS08x  VAR  BufferARRAY0..125 OF BYTE (*Buffer for up to a line *)
  BaseAddrCARDINAL0B000h (*seg address of adapter - change for colour*)  BufferR
owCARDINAL(*Row Being saved *)  BufferColCARDINAL(*Start Column*)  BufferCountCA
RDINAL0 (*ENtries in buffer *)  AttributesCARDINAL7  ScreenPosCARDIEND  RETURN Q
  END Pattern      PROCEDURE MatchPattern(pPNodesARRAY OF CHAR)PStatus    (*Matc
h a Pattern   p is the root of the pattern to match  s is the text to match    T
he function returns true only if the string matches  completely.    Of course, y
ou can always used repeated sets of anything  at the beginning and.or end of a s
tring in order to  match only part of a string*)    VARPosCARDINAL  BEGIN  Pos0 
 LenLength(s)  RETURN Pattern(p,s,Pos)  END MatchPattern  END Pa  RAFBGCHDIENAL(
*next character position on screen*)  ColNo,RowNoCARDINAL(*which represents the 
given position*)    (*Control attributes*)    HalfIntensityBOOLEANFALSE(*true if
 in half intensity mode*)  EnhancedVideoBOOLEANFALSE  UnderLineBOOLEANFALSE(*tru
e if in underline mode*)  InverseVideoBOOLEANFALSE  BlinkingBOOLEANFALSE  i,jCAR
DINAL  chCHAR    (*The next few routines handle the cursor    WasUnderLined is t
rue if the character under the cursor  started out underlined    TiwNo) OR (Buff
erCol*2+BufferCount2*ColNo)  OR (BufferCount126) THEN   FlushBuffer  END  IF Buf
ferCount0 THEN  BufferRowRowNo  BufferColColNo  END  BufferBufferCountORD(ch)  I
NC(BufferCount)  BufferBufferCountAttributes  INC(BufferCount)  ScreenPosScreenP
os+CharIncrement  INC(ColNo)  IF ColNoLogScreenWidth THEN  IF RowNo(LogScreenDep
th-1) THEN  INC(RowNo)  ColNo0  ELSE  DEC(ColNo)  DEC(ScreenPos)  END  END  END 
PutandInc    PROmeToChange is a counter that determines when the cursor should  
be changed from its current value to its negative, to allow blinking  *)  VARWas
UnderLinedBOOLEANFALSE  TimeToChangeINTEGER0  OutputEnabledBOOLEAN  pPacket  (*B
link cursor - decrement timer, if negative reset and  change top bit of characte
r under cursor*)  PROCEDURE SetCursor  BEGIN  (*Move cursor to current screen po
sition *)    WITH p DO  AX0200h  DX256*RowNo+ColNo  BX0  END  Int(p)      (*WasU
nderLiCEDURE Write(chCHAR)  (*Write a character    This routine is used by termi
nal when this version of ScreenIO   is in use because a flag is set by the initi
alisation of this module   together with the address of this routine    *)  BEGI
N      IF OutputEnabled THEN  ClearCursor  IF ch07fx THEN chCHR(ORD(ch)-128) END
  IF chCR THEN  ScreenPosScreenPos-ColNo  ColNo0  ELSIF chLF THEN  IF RowNo(LogS
creenDepth-1) THEN  INC(RowNo)  ScreenPosScreenPos+RowWidth  END  ELSIF chnedScr
eenScreenPos80x  ScreenScreenPosCHR(ORD(ScreenScreenPos)+128)*)  END SetCursor  
  PROCEDURE FlushBuffer  VARpPacket  BEGIN  IF BufferCount0 THEN   WITH p DO  In
tNoBufferCount  AXADR(Buffer)  BXBufferRow*160+BufferCol*2  CXBaseAddr  ReadOrWr
ite(TRUE,p)  END  END  BufferCount0  SetCursor  END FlushBuffer    PROCEDURE Bli
nkCursor  BEGIN  (*Does nothing (yet) on Earth card version   DEC(TimeToChange) 
 IF TimeToChange0 THEN  TimeTBS THEN  IF ColNo0 THEN  DEC(ColNo)  DEC(ScreenPos)
  END  ELSIF chTAB THEN  LOOP  IF ColNoLogScreenWidth-1 THEN EXIT END  PutandInc
(' ')  IF IAND(ColNo,7)0 THEN EXIT END  END (*LOOP*)  ELSE  IF UnderLine OR Enha
ncedVideo OR Blinking OR InverseVideo THEN  Attributes1  END  PutandInc(ch)  END
 (*Not CR or LF or TAB*)  Attributes7  SetCursor  END      END Write    PROCEDUR
E ScreenControl(sEdits)    (*Perform a screen control operation    May oChange90
0(*change to change blink rate*)  ScreenScreenPosCHR(ORD(ScreenScreenPos)+128)  
END  *)  FlushBuffer  END BlinkCursor    PROCEDURE ClearCursor  BEGIN  (*Also un
-implemented    IF (ScreenScreenPos7fx)WasUnderLined THEN  ScreenScreenPosCHR(OR
D(ScreenScreenPos)+128)  END  WasUnderLinedFALSE  *)  END ClearCursor      PROCE
DURE Gotoxy(x,yCARDINAL)    (*Position to given coordinates  top left is always 
0,0     x is column, y is row    A 'Standneed alteration for various machines*) 
 BEGIN      IF OutputEnabled THEN  FlushBuffer  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*)  iColNo  FOR jColNo TO RowWidth-
2 Dard' Screen is 80 by 24. The limit is set by  the terminal definition file*) 
 BEGIN      IF OutputEnabled THEN  ClearCursor  ColNox  RowNoy  ScreenPosColNo+R
owNo*CharIncrement*RowWidth  IF ScreenPosScreenSize THEN  ColNo0  RowNo0  Screen
Pos0  END  END      FlushBuffer      END Gotoxy    PROCEDURE PutandInc(chCHAR)  
  (*output a character and increment pointers*)    BEGIN  IF BufferCount0 THEN  
BufferRowRowNo  BufferColColNo  END  IF (BufferRowRo  RAFBGCHDIEO  ColNoj+1  Set
Cursor  WITH p DO  AX800h  BX0  Int(p)(*Read character *)  chCHR(CARDINAL(AX))  
DEC(ColNo)  SetCursor  BX7  AX0900H+ORD(ch)  CX1  Int(p)  END  END  ColNoRowWidt
h-1  SetCursor  WITH p DO  AX0920h  BX7  CX1  Int(p)  END  ColNoi  SetCursor    
DelLine(*Move rest of screen up a line, add blank line at end*)  WITH p DO  AX06
01h  CX256*RowNo  DX256owNo)  ScreenPosScreenPos+RowWidth  END  MoveUpIF RowNo0 
THEN  DEC(RowNo)  ScreenPosScreenPos-RowWidth  END  END (*CASE*)  SetCursor  END
      END ScreenControl  PROCEDURE ScrollWindowUp(StartofWindow,EndofWindowCARDI
NAL)  BEGIN      IF OutputEnabled AND (StartofWindowEndofWindow) THEN  ClearCurs
or  WITH p DO  AX0701h  CX256*StartofWindow  DX256*EndofWindow+LogScreenWidth-1 
 BX0700h  END  Int(p)  SetCursor  END      END ScrollWindowUp  P*(LogScreenDepth
-1)+LogScreenWidth-1  BX0700h  END  Int(p)    InsChar(*Move rest of line up one,
 add blank to end*)  iColNo  FOR jRowWidth-2 TO ColNo BY -1 DO  ColNoj  SetCurso
r  WITH p DO  AX800h  BX0  Int(p)(*Read character *)  chCHR(CARDINAL(AX))  INC(C
olNo)  SetCursor  BX7  AX0900H+ORD(ch)  CX1  Int(p)  END  END  ColNoi  SetCursor
  WITH p DO  AX0920h  BX7  CX1  ROCEDURE ScrollWindowDown(StartofWindow,EndofWin
dowCARDINAL)  BEGIN      IF OutputEnabled AND (StartofWindowEndofWindow) THEN  C
learCursor  WITH p DO  AX0601h  CX256*StartofWindow  DX256*EndofWindow+LogScreen
Width-1  BX0700h  END  Int(p)  SetCursor  END      END ScrollWindowDown    PROCE
DURE LoadTermCode(FFileName)  BEGIN  (*not implemented in this version*)  END Lo
adTermCode  PROCEDURE Clip(x1,y1,x2,y2CARDINAL)  BEGIN  (*not implemented in thi
s version*)  END CliInt(p)  END  SetCursor    InsLine(*Move rest of screen up a 
line, add blank line at end*)  WITH p DO  AX0701h  CX256*RowNo  DX256*(LogScreen
Depth-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 i
mplemented - but similar to previous*)  ClearScreen  (*Osborne specific - home s
creen and cursor    positionp  PROCEDURE  DrawBox(x1,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 OutputEnabled THEN  Gotoxy(x1,
y1)  ScreenControl(StartGraph)  ScreenControl(CornerLL)  FOR ix1+1 TO x2-1 DO Sc
reenControl(Horizontal) END  ScreenControl(CornerLR)  Gotoxy(x1,y2)  ScreenContr
ol(CornerUL)  FOR ix1+1 TO x2-1 DO ScreenControl(Horizontal) 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      (* The following graphics characte
rs will need to be modified for      different display systems*)    HorizontalPu
tandInc(0cdx)  VerticalPutandInc(0bax)  CornerLLPutandInc(0c8x)  CornerULPutandI
nc(0c9x)  CornerURPutandInc(0bbx)  CornerLRPutandInc(0bcx)   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*)  ScreenPos0  p.IntNo16(*interrupt for video on 8088*)  BlinkRout
ineBlinkCursor  BlinkEnabledTRUE  ScreenControl(ClearScreen)  ColNo0  RowNo0  Ch
arRoutineWrite  CharEStartxy,MiddleXY,EndXY(*cursor addressing - not required*) 
 RingBelliBDOS(wccfc,7)  MoveLeftIF ColNo0 THEN   DEC(ColNo)  DEC(ScreenPos)  EL
SIF RowNo0 THEN  DEC(RowNo)  ColNoLogScreenWidth-1  ScreenPosColNo+RowNo*RowWidt
h  END  MoveRightIF ColNo(LogScreenWidth-1) THEN   INC(ColNo)  INC(ScreenPos)  E
LSIF RowNo(LogScreenDepth-1) THEN  ColNo0  INC(RowNo)  ScreenPosRowNo*RowWidth  
END  MoveDownIF RowNo(LogScreenDepth-1) THEN  INC(R  RAFBGCHDIEnabledTRUE  Scree
nWidthLogScreenWidth  ScreenDepthLogScreenDepth  END ScreenIO.  e root of the pa
ttern to match  s is the text to match    The function returns true only if the 
string matches  completely.    Of course, you can always used repeated sets of a
nything  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 PaOLEANFALSE  iCARDINAL    (*The next few routines hand
le the cursor    WasUnderLined is true if the character under the cursor  starte
d out underlined    TimeToChange is a counter that determines when the cursor sh
ould  be changed from its current value to its negative, to allow blinking  *)  
VARWasUnderLinedBOOLEANFALSE  TimeToChangeINTEGER0  OutputEnabledBOOLEAN    (*Bl
ink cursor - decrement timer, if negative reset and  change top bit of character
 under cursor*)    PROCEDURE BlinkCIMPLEMENTATION MODULE ScreenIO    (*This is t
he memory mapped version of screen input-output    To use it on your machine, yo
u may need to change some of the   constants below    The module assumes that th
e memory for the screen is contiguous   and in the default bank. (If it is in an
other bank, you will have   to change the code of the module appropriately)    T
he values set below are for an Osborne 1 with Screen Pack    Note that this vers
ion of screenio does not use the terminal   definition fiursor  BEGIN  DEC(TimeT
oChange)  IF TimeToChange0 THEN  TimeToChange900(*change to change blink rate*) 
 ScreenScreenPosCHR(ORD(ScreenScreenPos)+128)  END  END BlinkCursor    PROCEDURE
 ClearCursor  BEGIN  IF (ScreenScreenPos7fx)WasUnderLined THEN  ScreenScreenPosC
HR(ORD(ScreenScreenPos)+128)  END  WasUnderLinedFALSE  END ClearCursor  PROCEDUR
E SetCursor  BEGIN  WasUnderLinedScreenScreenPos80x  ScreenScreenPosCHR(ORD(Scre
enScreenPos)+128)  END le. Hence, the graphics characters 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 e
ither  *)    FROM Terminal IMPORT CharRoutine,CharEnabled,BlinkRoutine,BlinkEnab
led  FROM FastMove IMPORT Moveup,Movedown  FROM SYSTEM IMPORT ADR,SIZE  FROM CPM
 IMPORT wccfc,BDOS  (*FROM Osborne IMPORT BankSetCursor    PROCEDURE Gotoxy(x,yC
ARDINAL)    (*Position to given coordinates  top left is always 0,0     x is col
umn, y is row    A 'Standard' Screen is 80 by 24. The limit is set by  the termi
nal definition file*)  BEGIN      IF OutputEnabled THEN  ClearCursor  ColNox  Ro
wNoy  ScreenPosColNo+RowNo*CharIncrement*RowWidth  IF ScreenPosScreenSize THEN  
ColNo0  RowNo0  ScreenPos0  END  SetCursor  END      END Gotoxy    PROCEDURE Put
andInc(chCHAR)    (*2*)  FROM IntLogic IMPORT IAND    (*Screen handling routines
 for cursor position, attribute etc    Specific to this compiler*)    CONSTLogSc
reenWidth80(*Logical screen width   (many people only have 80)*)  RowWidth80(*wi
dth of memory for one row   (i.e. number of bytes*)  LogScreenDepth24(*Lines on 
the screen*)  ScreenStart0f000h(*base of screen*)  CharIncrement1(*number of byt
es between characters*)  ScreenSize80*24(*number of bytes in screen area*)    CR
0dx(*Caroutput a character and increment pointers*)    BEGIN  ScreenScreenPosch 
   ScreenPosScreenPos+CharIncrement  INC(ColNo)  IF ColNoLogScreenWidth THEN  IF
 RowNo(LogScreenDepth-1) THEN  INC(RowNo)  ColNo0  ELSE  DEC(ColNo)  DEC(ScreenP
os)  END  END  END PutandInc    PROCEDURE Write(chCHAR)  (*Write a character    
This routine is used by terminal when this version of ScreenIO   is in use becau
se a flag is set by the initialisation of this module   together wriage return*)
  LF0ax(*Line feed*)  TAB09x(*TAB*)  BS08x  VAR  Screen0f000hARRAY0..ScreenSize-
1 OF CHAR  PCG0f800hARRAY0..48 OF CHAR  ScreenPosCARDINAL(*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  BlinkingBO  RAFBGCHDIEith the address of this rout
ine    This routine will need changing for different video systems    The Osborn
e 1 is very limited - all you can do is  underline and half intensity. All other
s are mapped onto these two  *)  BEGIN      IF OutputEnabled THEN  ClearCursor  
IF ch07fx THEN chCHR(ORD(ch)-128) END  IF chCR THEN  ScreenPosScreenPos-ColNo  C
olNo0  ELSIF chLF THEN  IF RowNo(LogScreenDepth-1) THEN  INC(RowNo)  ScreenPosSc
reenPos+RowWidth  END  ELSIF chBS THEN  ific - home screen and cursor    positio
n as stored in BIOS tables*)    (*now clear display memory*)      Screen0' '    
  Moveup(ADR(Screen1),ADR(Screen0),ScreenSize-1)      ScreenPos0      ColNo0    
  RowNo0          (* The following graphics characters will need to be modified 
for      different display systems*)    HorizontalPutandInc(81x)  VerticalPutand
Inc(80x)  CornerLLPutandInc(84x)  CornerULPutandInc(82x)  CornerURPutandInc(83x)
  CornerLRPutaIF ColNo0 THEN  DEC(ColNo)  DEC(ScreenPos)  ScreenScreenPos' '  EN
D  ELSIF chTAB THEN  LOOP  IF ColNoLogScreenWidth-1 THEN EXIT END  ScreenScreenP
os' '  INC(ScreenPos)  INC(ColNo)  IF IAND(ColNo,7)0 THEN EXIT END  END (*LOOP*)
  ELSE  IF UnderLine OR EnhancedVideo OR Blinking OR InverseVideo THEN   chCHR(O
RD(ch)+128)  END  PutandInc(ch)  END (*Not CR or LF or TAB*)  SetCursor  END    
  END Write      PROCEDURE ScreenControl(sEdits)ndInc(85x)  Startxy,MiddleXY,End
XY(*cursor addressing - not required*)  RingBelliBDOS(wccfc,7)  MoveLeftIF ColNo
0 THEN   DEC(ColNo)  DEC(ScreenPos)  ELSIF RowNo0 THEN  DEC(RowNo)  ColNoLogScre
enWidth-1  ScreenPosColNo+RowNo*RowWidth  END  MoveRightIF ColNo(LogScreenWidth-
1) THEN   INC(ColNo)  INC(ScreenPos)  ELSIF RowNo(LogScreenDepth-1) THEN  ColNo0
  INC(RowNo)  ScreenPosRowNo*RowWidth  END  MoveDownIF RowNo(LogScreenDepth-1) T
    (*Perform a screen control operation    May need alteration for various mach
ines*)    BEGIN      IF OutputEnabled THEN  ClearCursor  CASE s OF  DimHalfInten
sityTRUE  BrightHalfIntensityFALSE  EnhancedVideoTRUE  NormalHalfIntensityFALSE 
 EnhancedVideoFALSE  InverseVideoFALSE  BlinkingFALSE  UnderLineFALSE  InverseIn
verseVideoTRUE  BlinkBlinkingTRUE  StartGraph,EndGraph(*do nothing*)  DelChar(*M
ove rest of line up one, add blank to end*)  MoHEN  INC(RowNo)  ScreenPosScreenP
os+RowWidth  END  MoveUpIF RowNo0 THEN  DEC(RowNo)  ScreenPosScreenPos-RowWidth 
 END  END (*CASE*)  SetCursor  END      END ScreenControl  PROCEDURE ScrollWindo
wUp(StartofWindow,EndofWindowCARDINAL)  BEGIN      IF OutputEnabled THEN  ClearC
ursor  Moveup(ADR(Screen(StartofWindow)*RowWidth),   ADR(Screen(StartofWindow+1)
*RowWidth),   (EndofWindow-StartofWindow)*RowWidth)  FOR iStartofWindow*RowWidth
 TO (StartofWindow+1)*Rvedown(ADR(ScreenScreenPos+1),ADR(ScreenScreenPos),RowWid
th-ColNo-1)  ScreenScreenPos-ColNo+RowWidth-1' '  DelLine(*Move rest of screen u
p a line, add blank line at end*)  Movedown(ADR(ScreenScreenPos-ColNo+RowWidth),
   ADR(ScreenScreenPos-ColNo),  ScreenSize-ScreenPos+ColNo-RowWidth)  FOR iScree
nSize-RowWidth TO ScreenSize-1 DO Screeni' ' END    InsChar(*Move rest of line r
ight one character, last character may be lost*)  Moveup(ADR(ScreenScreenPos),AD
R(ScreenSowWidth-1 DO  Screeni' '  END  SetCursor  END      END ScrollWindowUp  
PROCEDURE ScrollWindowDown(StartofWindow,EndofWindowCARDINAL)  BEGIN      IF Out
putEnabled THEN  ClearCursor  Movedown(ADR(Screen(StartofWindow+1)*RowWidth),   
ADR(Screen(StartofWindow)*RowWidth),   (EndofWindow-StartofWindow)*RowWidth)  FO
R iEndofWindow*RowWidth TO (EndofWindow+1)*RowWidth-1 DO  Screeni' '  END  SetCu
rsor  END      END ScrollWindowDown    PROCEDURE LoadTermCode(FFileName)creenPos
+1),RowWidth-ColNo-1)  ScreenScreenPos' '  InsLine(*Move rest of screen down one
 line, add blank line*)  Moveup(ADR(ScreenScreenPos-ColNo),ADR(ScreenScreenPos-C
olNo+RowWidth),  ScreenSize-ScreenPos+ColNo-RowWidth)  FOR iScreenPos-ColNo TO S
creenPos-ColNo+RowWidth-1 DO  Screeni' '  END    DelEolFOR iScreenPos TO ScreenP
os-ColNo+RowWidth-1 DO Screeni' ' END  DelEosFOR iScreenPos TO ScreenSize-1 DO S
creeni' ' END  ClearScreen  (*Osborne spec  RAFBGCHDIE  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,y2C
ARDINAL)    (*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 OutputEnable
d THEN  Gotoxy(x1,y1)  ScreenControl(StartGraph)  ScreenControl(CornerLL)  FOR i
x1+1 TO x2-1 DO ScreenControl(Horizontal) END  ScreenConIMPLEMENTATION MODULE Sc
reenIO    (*This is the memory mapped version of screen input-output    To use i
t on your machine, you may need to change some of the   constants below    The m
odule assumes that the memory for the screen is contiguous   and in the default 
bank. (If it is in another bank, you will have   to change the code of the modul
e appropriately)    The values set below are for an Osborne 1 with Screen Pack  
  Note that this version of screenio does not use the terminal   definition fitr
ol(CornerLR)  Gotoxy(x1,y2)  ScreenControl(CornerUL)  FOR ix1+1 TO x2-1 DO Scree
nControl(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)  Screen
Control(Vertical)  END  END      END DrawBox  PROCEDURE OutputToScreen(OnBOOLEAN
)  BEGIN  OutputEnabledOn  END OutputToScreen  BEGIN  OutputEnabledTRUE  (*Set u
p PCG Characters*)  FOR i0 TO 6*16-1 DO PCGi0x ENDle. Hence, the graphics charac
ters for the box are  hard coded in the file    This version will not support ha
lf intensity on the Osborne since   that facility does not work as documented. T
his may be something  to do with my Osborne having been hacked    This version w
ill not scroll the screen either  *)    FROM Terminal IMPORT CharRoutine,CharEna
bled,BlinkRoutine,BlinkEnabled  FROM FastMove IMPORT Moveup,Movedown  FROM SYSTE
M IMPORT ADR,SIZE  FROM CPM IMPORT wccfc,BDOS  (*FROM Osborne IMPORT Bank  FOR i
0 TO 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 i
3*16+3+5 TO 4*16-1 DO PCGi3cx END  (*Lower Left*)  FOR i4*16 TO 4*16+2 DO PCGi3c
x END  FOR i4*16+3 TO 4*16+3+4 DO PCGi3fx END  (*Lower Right*)  FOR i5*16 TO 5*1
6+2 DO PCGi03cx END  F2*)  FROM IntLogic IMPORT IAND    (*Screen handling routin
es for cursor position, attribute etc    Specific to this compiler*)    CONSTLog
ScreenWidth100(*Logical screen width   (many people only have 80)*)  RowWidth128
(*width of memory for one row   (i.e. number of bytes*)  LogScreenDepth24(*Lines
 on the screen*)  ScreenStart0f000h(*base of screen*)  CharIncrement1(*number of
 bytes between characters*)  ScreenSize128*32(*number of bytes in screen area*) 
   CR0dx(*OR i5*16+3 TO 5*16+3+4 DO PCGi0fcx END  ScreenPos0    BlinkRoutineBlin
kCursor  BlinkEnabledTRUE  ScreenControl(ClearScreen)  ColNo0  RowNo0  CharRouti
neWrite  CharEnabledTRUE  ScreenWidthLogScreenWidth  ScreenDepthLogScreenDepth  
END ScreenIO.    ScreenControl(CornerUL)  FOR ix1+1 TO x2-1 DO ScreenControl(Hor
izontal) END  ScreenControl(CornerUR)  FOR iy2+1 TOCarriage return*)  LF0ax(*Lin
e feed*)  TAB09x(*TAB*)  BS08x  VAR  OutputEnabledBOOLEAN  Screen0f000hARRAY0..S
creenSize-1 OF CHAR  ScreenPosCARDINAL(*next character position on screen*)  Col
No,RowNoCARDINAL(*which represents the given position*)    (*Control attributes*
)    HalfIntensityBOOLEANFALSE(*true if in half intensity mode*)  EnhancedVideoB
OOLEANFALSE  UnderLineBOOLEANFALSE(*true if in underline mode*)  InverseVideoBOO
LEANFALSE  BlinkingBOOLEANFA  RAFBGCHDIELSE  iCARDINAL    (*The next few routine
s handle the cursor    WasUnderLined is true if the character under the cursor  
started out underlined    TimeToChange is a counter that determines when the cur
sor should  be changed from its current value to its negative, to allow blinking
  *)  VARWasUnderLinedBOOLEANFALSE  TimeToChangeINTEGER0    (*Blink cursor - dec
rement timer, if negative reset and  change top bit of character under cursor*) 
   PROCEDURE BlinkCursor  BEGIN  DEC(TimeToChange))  DEC(ScreenPos)  ScreenScree
nPos' '  END  ELSIF chTAB THEN  LOOP  IF ColNoLogScreenWidth-1 THEN EXIT END  Sc
reenScreenPos' '  INC(ScreenPos)  INC(ColNo)  IF IAND(ColNo,7)0 THEN EXIT END  E
ND (*LOOP*)  ELSE  IF UnderLine OR EnhancedVideo OR Blinking OR InverseVideo THE
N   chCHR(ORD(ch)+128)  END  PutandInc(ch)  END (*Not CR or LF or TAB*)  SetCurs
or  END       END Write      PROCEDURE ScreenControl(sEdits)    (*Perform a scre
en cont  IF TimeToChange0 THEN  TimeToChange900(*change to change blink rate*)  
ScreenScreenPosCHR(ORD(ScreenScreenPos)+128)  END  END BlinkCursor    PROCEDURE 
ClearCursor  BEGIN  IF (ScreenScreenPos7fx)WasUnderLined THEN  ScreenScreenPosCH
R(ORD(ScreenScreenPos)+128)  END  WasUnderLinedFALSE  END ClearCursor  PROCEDURE
 SetCursor  BEGIN  WasUnderLinedScreenScreenPos80x  ScreenScreenPosCHR(ORD(Scree
nScreenPos)+128)  END SetCursor    PROCEDURE Gotoxy(x,rol operation    May need 
alteration for various machines*)    BEGIN      IF OutputEnabled THEN  ClearCurs
or  CASE s OF  DimHalfIntensityTRUE  BrightHalfIntensityFALSE  EnhancedVideoTRUE
  NormalHalfIntensityFALSE  EnhancedVideoFALSE  InverseVideoFALSE  BlinkingFALSE
  UnderLineFALSE  InverseInverseVideoTRUE  BlinkBlinkingTRUE  StartGraph,EndGrap
h(*do nothing*)  DelChar(*Move rest of line up one, add blank to end*)  Movedown
(ADR(ScreenScreenPos+1yCARDINAL)    (*Position to given coordinates  top left is
 always 0,0     x is column, y is row    A 'Standard' Screen is 80 by 24. The li
mit is set by  the terminal definition file*)  BEGIN      IF OutputEnabled THEN 
 ClearCursor  ColNox  RowNoy  ScreenPosColNo+RowNo*CharIncrement*RowWidth  IF Sc
reenPosScreenSize THEN  ColNo0  RowNo0  ScreenPos0  END  SetCursor      END     
  END Gotoxy    PROCEDURE PutandInc(chCHAR)    (*output a character and incre),A
DR(ScreenScreenPos),RowWidth-ColNo-1)  ScreenScreenPos-ColNo+RowWidth-1' '  DelL
ine(*Move rest of screen up a line, add blank line at end*)  Movedown(ADR(Screen
ScreenPos-ColNo+RowWidth),   ADR(ScreenScreenPos-ColNo),  ScreenSize-ScreenPos+C
olNo-RowWidth)  FOR iScreenSize-RowWidth TO ScreenSize-1 DO Screeni' ' END    In
sChar(*Move rest of line right one character, last character may be lost*)  Move
up(ADR(ScreenScreenPos),ADR(ScreenScreenPos+1),RowWidth-ColNo-1ment pointers*)  
  BEGIN  ScreenScreenPosch    ScreenPosScreenPos+CharIncrement  INC(ColNo)  IF C
olNoLogScreenWidth THEN  IF RowNo(LogScreenDepth-1) THEN  INC(RowNo)  ColNo0  EL
SE  DEC(ColNo)  DEC(ScreenPos)  END  END  END PutandInc    PROCEDURE Write(chCHA
R)  (*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 module
   together with the address of this routi)  ScreenScreenPos' '  InsLine(*Move r
est of screen down one line, add blank line*)  Moveup(ADR(ScreenScreenPos-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 iScreenPo
s TO ScreenSize-1 DO Screeni' ' END  ClearScreen  (*Osborne specific - home scre
en and cursorne    This routine will need changing for different video systems  
  The Osborne 1 is very limited - all you can do is  underline and half intensit
y. All others are mapped onto these two  *)  BEGIN      IF OutputEnabled THEN  C
learCursor  IF ch07fx THEN chCHR(ORD(ch)-128) END  IF chCR THEN  ScreenPosScreen
Pos-ColNo  ColNo0  ELSIF chLF THEN  IF RowNo(LogScreenDepth-1) THEN  INC(RowNo) 
 ScreenPosScreenPos+RowWidth  END  ELSIF chBS THEN  IF ColNo0 THEN  DEC(ColNo  R
AFBGCHDIE    position as stored in BIOS tables*)      iBDOS(wccfc,1bh)iBDOS(wccf
c,ORD('S'))      iBDOS(wccfc,32)iBDOS(wccfc,32)      iBDOS(wccfc,1bh)iBDOS(wccfc
,ORD(''))      iBDOS(wccfc,32)iBDOS(wccfc,32)      (*Bank2(ADR(Screen0),ADR(Scre
enScreenSize-1),80h)*)    (*now clear display memory*)      Screen0' '      Move
up(ADR(Screen1),ADR(Screen0),ScreenSize-1)      ScreenPos0      ColNo0      RowN
o0          (* The following graphics charx2,y2  is upper right corner*)  VARiCA
RDINAL  BEGIN      IF OutputEnabled THEN  Gotoxy(x1,y1)  ScreenControl(StartGrap
h)  ScreenControl(CornerLL)  FOR ix1+1 TO x2-1 DO ScreenControl(Horizontal) END 
 ScreenControl(CornerLR)  Gotoxy(x1,y2)  ScreenControl(CornerUL)  FOR ix1+1 TO x
2-1 DO ScreenControl(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(x
1,i)  ScreenControl(Verticaacters will need to be modified for      different di
splay systems*)    HorizontalPutandInc(1bx)  VerticalPutandInc(0bx)  CornerLLPut
andInc(1cx)  CornerULPutandInc(0fx)  CornerURPutandInc(10x)  CornerLRPutandInc(1
fx)  Startxy,MiddleXY,EndXY(*cursor addressing - not required*)  RingBelliBDOS(w
ccfc,7)  MoveLeftIF ColNo0 THEN   DEC(ColNo)  DEC(ScreenPos)  ELSIF RowNo0 THEN 
 DEC(RowNo)  ColNoLogScreenWidth-1  ScreenPosColNo+RowNo*RowWidth  END  MoveRl) 
 END       END      END DrawBox  PROCEDURE OutputToScreen(OnBOOLEAN)  BEGIN  Out
putEnabledOn  END OutputToScreen  BEGIN  OutputEnabledTRUE  BlinkRoutineBlinkCur
sor  BlinkEnabledTRUE  ScreenPos0  ScreenControl(ClearScreen)  ColNo0  RowNo0  C
harRoutineWrite  CharEnabledTRUE  ScreenWidthLogScreenWidth  ScreenDepthLogScree
nDepth  END ScreenIO.  ightIF ColNo(LogScreenWidth-1) THEN   INC(ColNo)  INC(Scr
eenPos)  ELSIF RowNo(LogScreenDepth-1) THEN  ColNo0  INC(RowNo)  ScreenPosRowNo*
RowWidth  END  MoveDownIF RowNo(LogScreenDepth-1) THEN  INC(RowNo)  ScreenPosScr
eenPos+RowWidth  END  MoveUpIF RowNo0 THEN  DEC(RowNo)  ScreenPosScreenPos-RowWi
dth  END  END (*CASE*)  SetCursor  END       END ScreenControl  PROCEDURE Scroll
WindowUp(StartofWindow,EndofWindowCARDINAL)  BEGIN      IF MODULE Test    (*Test
 of pattern match module *)    FROMTerminal IMPORT WriteString,ReadString,WriteL
n  FROMPattern IMPORT NodeType,PNode,CreateStringNode,MatchPattern,CharSet,  Cre
ateAltNode,CreateStringNode,  CreateAnyOfNode,CreateConcatNode,CreateLimitNode  
FROMStorage IMPORT ALLOCATE  VARExp1,Exp,Term,FactPNode  tempPNode  BEGIN  NEW(E
xp)  NEW(Term)  FactCreateAltNode(  CreateAnyOfNode(CharSet'A'..'Z','0'..'9','a'
..'z',1,30000,TRUE),  CreateConcatNode(  CreateConcatNoOutputEnabled THEN  Clear
Cursor  Moveup(ADR(Screen(StartofWindow)*RowWidth),   ADR(Screen(StartofWindow+1
)*RowWidth),   (EndofWindow-StartofWindow)*RowWidth)  FOR iStartofWindow*RowWidt
h TO (StartofWindow+1)*RowWidth-1 DO  Screeni' '  END  SetCursor  END       END 
ScrollWindowUp  PROCEDURE ScrollWindowDown(StartofWindow,EndofWindowCARDINAL)  B
EGIN      IF OutputEnabled THEN  ClearCursor  Movedown(ADR(Screen(StartofWindow+
1)*RowWidth),   ADR(Screen(StartofWindow)*RowWidde(  CreateStringNode('('),  Exp
),  CreateStringNode(')')  )  )  tempCreateAltNode(  Fact,  CreateConcatNode(  F
act,  CreateConcatNode(  CreateStringNode('*'),  Term)  )  )  Termtemp  tempCrea
teAltNode(      Term,      CreateConcatNode(  Term,  CreateConcatNode(  CreateSt
ringNode('+'),  Exp)  )      )  Exptemp  Exp1CreateConcatNode(  Exp,  CreateLimi
tNode())  IF MatchPattern(Exp1,'2*2')NIL THEN WriteString('1  OK'th),   (EndofWi
ndow-StartofWindow)*RowWidth)  FOR iEndofWindow*RowWidth TO (EndofWindow+1)*RowW
idth-1 DO  Screeni' '  END  SetCursor  END       END ScrollWindowDown    PROCEDU
RE LoadTermCode(FFileName)  BEGIN  (*not implemented in this version*)  END Load
TermCode  PROCEDURE Clip(x1,y1,x2,y2CARDINAL)  BEGIN  (*not implemented in this 
version*)  END Clip  PROCEDURE  DrawBox(x1,y1,x2,y2CARDINAL)    (*draw a box for
 a window on the screen    x1,y1  is the lower left corner     R A F B G C H D I
 E) END  IF MatchPattern(Exp1,'2+3*2')NIL THEN WriteString('2  OK') END  IF Matc
hPattern(Exp1,'2*(2+3)')NIL THEN WriteString('3  OK') END  IF MatchPattern(Exp1,
'2*2*3*4')NIL THEN WriteString('4  OK') END  IF MatchPattern(Exp1,'2*2+3*7')NIL 
THEN WriteString('5  OK') END  IF MatchPattern(Exp1,'2*2+3*4+(9+8)')NIL THEN Wri
teString('6  OK') END  IF MatchPattern(Exp1,'2++2')NIL THEN WriteString('7 not o
k ') END  END Test.  inePos(moveINTEGER)  BEGIN  Retrline(CurFilePtr,LineLen,Lin
ePos,p,linesmoved,move)  END SetLinePos  PROCEDURE MarkAsUpdated  BEGIN  Updated
CurrentFileTRUE  END MarkAsUpdated  PROCEDURE ResetPos  BEGIN  Gotoxy(Thisx,This
y)  END ResetPos  PROCEDURE ClearRestOfLine  BEGIN  ScreenControl(DelEol)  IF NO
T MadeChange THEN  FOR cThisx+1 TO ScreenWidth DO Write(' ') END  END  ResetPos 
 END ClearRestOfLine  PROCEDURE DelToEOL  VARiCARDINAL  BEGIN  MarkAsUpdated  IF
 LinePosLineLen THEN   DelChars(CurFilePtr,LineLen-LinePos)   END  LineLenLinePo
s  ClearRestOfLine  END DelToEOL  VAR  bBOOLEAN  PROCEDURE ReDisplayWindow  BEGI
N  DisplayFile(CurFilePtr,CurrentWindow,Thisx,Thisy)  ResetPos  curxCurrentWindo
wThisx  curyCurrentWindowThisy  ReDrawnTRUE  END ReDisplayWindow  PROCEDURE ReDi
splay  BEGIN  ReDisplayWindow  SetLinePos(0)  ChangePos  END ReDisplay  PROCEDUR
E ChangeMargin(IncINTEGER)  BEGIN  IF (Inc0) AND  (CurrentLeftMar  (*This is a v
ersion of editcont for people with  dumb terminals.  The only facilities which t
his 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 m
akeedit to edit the file and  editdisp to change the screen*)    FROM MakeEdits 
IMPORT InsChars,DelChars,Retrline,BackOneChar,ForwardOneChar,  GetCurrentChar,Ge
tPositiginCARDINAL(-Inc)) THEN   Inc-INTEGER(CurrentLeftMargin)   END  IF (Inc0)
 AND (ThisxCARDINAL(Inc)) THEN IncThisx END  CurrentLeftMarginINTEGER(CurrentLef
tMargin)+Inc  ThisxINTEGER(Thisx)-Inc  curxCurrentWindowThisx  LeftMarginCurrent
WindowCurrentLeftMargin  ReDisplayWindow  ResetPos  END ChangeMargin    PROCEDUR
E ChangePos  VARiCARDINAL  BEGIN  IF LineLenLinePos THEN   LinePosLineLen  END  
Thisx0  i0  LOOP  INC(i)  chGetCurrentChar(CurFion,SetPosition,ReadNextChar,Find
String,  LabelOp  FROM EditDisplay IMPORT DisplayFile,ErrorMessage,Windows,Lines
PerWindow  FROM ScreenIO IMPORT Edits,DelChar,DelLine,InsChar,InsLine,DelEol,Mov
eUp,  MoveDown,MoveLeft,MoveRight,Gotoxy,ClearScreen,  ScreenControl,  ScreenWid
th,ScreenDepth,MadeChange  FROM IntLogic IMPORT IAND  FROMSYSTEM IMPORT ADR  CON
STCR0dx  TAB09x  LF0ax  EOF1ax  (*A remark on the use of LinePos and curx    Lin
ePos always points to the number of the charactelePtr)  IF (iCARDINAL(LinePos)) 
OR (chEOF) THEN EXIT END  IF chTAB THEN ThisxIAND(Thisx+8,0fff8h)   ELSE  INC(Th
isx) END  bForwardOneChar(CurFilePtr)   END  iThisx  WHILE Thisx(ScreenWidth+Cur
rentLeftMargin) DO  ChangeMargin(32)  Thisxi  END  WHILE ThisxCurrentLeftMargin 
DO  ChangeMargin(-32)  Thisxi  END  ThisxThisx-CurrentLeftMargin  curxCurrentWin
dowThisx  ResetPos  END ChangePos    PROCEDURE LineMove(byINTEGER)  VARiINTEGER 
 BEGIN r within the  text line. It need not be the same as the position on the  
screen because of the use of tab characters*)  TYPEPEditFilePOINTER TO EditFile 
 VARiINTEGER  cCARDINAL  StartofWindow,EndofWindowCARDINAL  chCHAR  CurrentLeftM
arginCARDINAL  FileLimitBOOLEAN  ReDrawnBOOLEAN  CurFilePtrPEditFile  PROCEDURE 
ChangePosFORWARD  PROCEDURE DoScreenChange(CodeEdits)  BEGIN  ScreenControl(Code
)  END DoScreenChange      VARlinesmovedINTEGER  pPosition    PROCEDURE SetL  !R
!A!F!B!G!C!H!D!I!E ReDrawnFALSE  iLinePos  SetLinePos(by)  LinePosi  ChangePos  
(*IF ABS(by)1 THEN  ReDisplayWindow  END*)  END LineMove  VARpwPosition  PROCEDU
RE WritePartLine(cCARDINAL)  VARSavexCARDINAL  BEGIN  GetPosition(CurFilePtr,pw)
  LOOP  ReadNextChar(pw,ch)  IF (ch0dx) OR (ch1ax) OR (ch0ax) THEN EXIT END  IF 
c(ScreenWidth+CurrentLeftMargin) THEN EXIT END  IF chTAB THEN   REPEAT  IF cCurr
entLeftMargin 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(CurFilePtr,p)  IF L
inePos0 THEN  bBackOneChar(CurFilePtr)  chGetCurrentChar(CurFilePtr)  IF (Curren
tLeftM7)1  ELSE  IF cCurrentLeftMargin THEN Write(ch) END  INC(c)  END  END(*LOO
P*)  SavexThisx  IF cCurrentLeftMargin THEN Thisx0  ELSE Thisxc-CurrentLeftMargi
n END  ClearRestOfLine  ThisxSavex  END WritePartLine  PROCEDURE WriteLine  BEGI
N  WritePartLine(1)  END WriteLine  PROCEDURE ScrollWindow(Start,EndCARDINALByIN
TEGER)  (*Scroll the window by redisplaying all or part of it    Start and End g
ive actual screen poistions (in y) for  the top and bottom of theargin0) AND (Th
isx0) THEN  ChangeMargin(-32)  END  DEC(LinePos)  IF NOT ReDrawn THEN  IF chTAB 
THEN  DEC(Thisx)  ResetPos  ELSE  LineMove(0)  END  END    ELSE  Thisx1023  Line
Pos1023  Up  IF NOT MovedOK THEN  LinePos0  LineLenSaveLineLen  SetPosition(CurF
ilePtr,p)  Thisx0  ResetPos  END  END  END Left    PROCEDURE Right  VARchCHAR  i
CARDINAL  BEGIN  chGetCurrentChar(CurFilePtr)  IF ch1ax (*on EOF scroll*)  VAR  
pPosition  iINTEGER  BEGIN  GetPosition(CurFilePtr,p)  iINTEGER(Start)-INTEGER(T
hisy)+By  SetLinePos(i)  MovedOKFALSE  IF linesmovedi THEN RETURN END  MovedOKTR
UE  iStart  LOOP  IF CARDINAL(i)End THEN EXIT END  Gotoxy(0,i)  WriteLine  SetLi
nePos(1)  IF linesmoved1 THEN EXIT END  INC(i)  END  SetPosition(CurFilePtr,p)  
SetLinePos(0)  ChangePos  END ScrollWindow  PROCEDURE RemoveLine    (*Remove a l
ine from the screen and brin char*) THEN RETURN END  bForwardOneChar(CurFilePtr)
  IF LinePosLineLen THEN  Thisx0  LinePos0  bBackOneChar(CurFilePtr)  Down    EL
SE    IF chTAB THEN i9 ELSE i1 END  IF (Thisx+i)(ScreenWidth-1) THEN  ChangeMarg
in(32)  END  INC(LinePos)  IF chTAB THEN  INC(Thisx)  ResetPos  ELSE    (*if mov
es over tabs are slow, replace the    repeated moves right by a gotoxy*)  ThisxI
AND(Thisx+8,0fff8h)  ResetPos  END  END  END Rightg another line up at the botto
m    Thisy gives line to remove*)  VARpPosition  BEGIN  Gotoxy(0,Thisy)  ScrollW
indow(Thisy,EndofWindow,1)  iEndofWindow-Thisy+1  GetPosition(CurFilePtr,p)  Set
LinePos(i)  IF linesmovedi THEN  MovedOKTRUE  Gotoxy(0,EndofWindow)  WriteLine  
END  SetPosition(CurFilePtr,p)  END RemoveLine  PROCEDURE DelFullLine  BEGIN  Ma
rkAsUpdated  RemoveLine  SetLinePos(0)  DelChars(CurFilePtr,LineLen+2)  LinePos0
  IF CurrentLeftMargin0 THEN  PROCEDURE AlphaNum(chCHAR)BOOLEAN  BEGIN  chCAP(ch
)  RETURN ((ch'A') AND (ch'Z')) OR ((ch'0') AND (ch'9'))  END AlphaNum    PROCED
URE FindWord(BackwardBOOLEANDeleteBOOLEAN)    (*Find a word and optionally delet
e it    A word is a string alphanumerics or a string of marks, tabs  or spoaces 
   The cursor is repositioned*)  VARchCHAR  b1BOOLEAN  BEGIN  FileLimitFALSE  IF
 Backward THEN   Left  IF NOT MovedOK THEN RETURN END  END  chGetCurrentChar(Cur
FilePtr)   ChangeMargin(-INTEGER(CurrentLeftMargin))  END  Thisx0  ResetPos  Lin
ePos0  SetLinePos(0)  END DelFullLine      PROCEDURE ScrollText(ByINTEGER)    (*
Scroll up one line in the file  (which means the text scrolls down - backwards t
o  what you might think at first)*)    BEGIN  ScrollWindow(StartofWindow,EndofWi
ndow,By)  END ScrollText  PROCEDURE ScrollUp  BEGIN    ScrollText(-1)  IF MovedO
K THEN  IF ThisyEndofWindow THEN   INC(Thisy)  ResetPos  ELSE   LineMo  "R"A"F"B
"G"C"H"D"I"E  b1AlphaNum(ch)  IF chEOF THEN RETURN END  REPEAT  IF Delete THEN D
elOneChar END  IF Backward   THEN Left  ELSIF NOT Delete THEN Right END  chGetCu
rrentChar(CurFilePtr)  UNTIL  (b1AlphaNum(ch)) OR FileLimit OR (chEOF)  IF Backw
ard AND NOT FileLimit THEN Right END  END FindWord  PROCEDURE Down  BEGIN  LineM
ove(1)  FileLimitlinesmoved0  IF linesmoved0 THEN  IF (ThisyEndofWindow) THEN  R
eDisplayWindow  ELSIF  NOT ReDrawn THEN   INC(Thisy)  ResetPos    END  LineMove(
-1)  FileLimitlinesmoved0  IF (linesmoved0) AND (ThisyStartofWindow) AND NOT ReD
rawn THEN   DEC(Thisy)  ResetPos  END  END Up  PROCEDURE UpScreen  BEGIN  LineMo
ve(1-INTEGER(LinesPerWindow))  ReDisplayWindow  END UpScreen  PROCEDURE DownScre
en  BEGIN  LineMove(LinesPerWindow-1)  ReDisplayWindow  END DownScreen  PROCEDUR
E Top  BEGIN  LinePos0  LineMove(-16736)  ReDisplayWindow  END Top  PROCEDURE Bo
ttom  BEGIN  LinePos999  LineMove(16736END  END   END Down    PROCEDURE RedoLine
  BEGIN  Gotoxy(0,Thisy)  SetLinePos(0)  WriteLine  ChangePos  END RedoLine    P
ROCEDURE InsOneChar(chCHAR)  VARCH1ARRAY0..0 OF CHAR  BEGIN  ReDrawnFALSE  MarkA
sUpdated  CH10ch  InsChars(CurFilePtr,CH1,1)  INC(LinePos)  INC(LineLen)  IF chC
R THEN  CH10LF  InsChars(CurFilePtr,CH1,1)  ResetPos  ClearRestOfLine  IF ThisyE
ndofWindow THEN  ScrollText(0)  DEC(Thisy)  ELSE    ScrollWindow(Thisy+1)  ReDis
playWindow  END Bottom  PROCEDURE FarLeft  BEGIN  IF CurrentLeftMargin0 THEN   C
hangeMargin(-INTEGER(CurrentLeftMargin))  END  SetLinePos(0)  LinePos0  ChangePo
s  END FarLeft  PROCEDURE FarRight  BEGIN  SetLinePos(0)  LinePosLineLen  Change
Pos  END FarRight  PROCEDURE ChangeWindow(NoINTEGER)  VARbBOOLEAN  iCARDINAL  BE
GIN  IF CurrentWindow0 THEN  curxCurrentWindowThisx  curyCurrentWindowThisy  bLa
belOp(CurFilePtr,TRUE,CHR(CurrentWindow),EndofWindow,-1)  END  INC(Thisy)  Reset
Pos  LinePos0  RedoLine  ELSIF chTAB THEN RedoLine  ELSE  IF Thisx(ScreenWidth-1
) THEN  ChangeMargin(32)  END  IF NOT ReDrawn THEN  IF LinePosLineLen THEN  bBac
kOneChar(CurFilePtr)  WritePartLine(CurrentLeftMargin+Thisx+1)  INC(Thisx)  bFor
wardOneChar(CurFilePtr)  ELSE  Write(ch)  INC(Thisx)  END  END  END  ResetPos  E
ND InsOneChar  PROCEDURE DelOneChar  BEGIN  MarkAs)  END  CurrentWindowNo    IF 
CurrentWindowWindows THEN CurrentWindowWindows END  IF CurrentWindow0 THEN  (*se
t up a pointer to the current file to save index calculation    every time the f
ile is referenced*)  CurrentFileWindowFileCurrentWindow  CurFilePtrPEditFile(ADR
(FilesCurrentFile))  bLabelOp(CurFilePtr,FALSE,CHR(CurrentWindow))  ThisxcurxCur
rentWindow  ThisycuryCurrentWindow  CurrentLeftMarginLeftMarginCurrentWindow  Se
tLinePos(0)  ChUpdated  chGetCurrentChar(CurFilePtr)  IF LinePosLineLen THEN i2 
 ELSE i1 END  DelChars(CurFilePtr,i)  IF i2 THEN  IF ThisyEndofWindow THEN   INC
(Thisy)  iLinePos  RemoveLine  LinePosi  DEC(Thisy)  RedoLine  END  ELSE  DEC(Li
neLen)  WritePartLine(CurrentLeftMargin+Thisx+1)  END  (*ELSIF chTAB THEN  RedoL
ine  ELSE  LineLenLineLen-1  DoScreenChange(DelChar)  END*)  ResetPos  END DelOn
eChar  PROCEDURE OverWrite(chCHAR)  VARangePos  i(ScreenDepth-Windows) DIV Windo
ws  StartofWindow(i+1)*(CurrentWindow-1)  ELSE   StartofWindow0  i0   END  IF Cu
rrentWindowWindows THEN  EndofWindowStartofWindow+i-1  ELSE  EndofWindowScreenDe
pth-2  END    END ChangeWindow  PROCEDURE ResetScreenPos  BEGIN  IF CurrentWindo
w0 THEN  ThisxcurxCurrentWindow  ThisycuryCurrentWindow  ResetPos  END  END Rese
tScreenPos  PROCEDURE MoveWindow(from,toCARDINAL)  VARbBOOLEAN  BEGIN  curxtoCH1
ARRAY0..0 OF CHAR  BEGIN  CH10GetCurrentChar(CurFilePtr)  IF (CH10CR) AND (chCR)
 AND (CH101ax) THEN  IF (CH10TAB) AND (chTAB) THEN  DelChars(CurFilePtr,1)  CH10
ch  InsChars(CurFilePtr,CH1,1)  bBackOneChar(CurFilePtr)  Write(ch)  ResetPos  R
ight  MarkAsUpdated  ELSE  DelOneChar  InsOneChar(ch)  END  ELSE  InsOneChar(ch)
  END  END OverWrite  PROCEDURE Up    BEGIN  IF ThisyStartofWindow THEN  ReDispl
ayWindow  #R#A#F#B#G#C#H#D#I#Ecurxfrom  curytocuryfrom  LeftMargintoLeftMarginfr
om  WindowFiletoWindowFilefrom  bLabelOp(FilesWindowFileto,TRUE,CHR(to))  END Mo
veWindow  PROCEDURE ElideWindow(WindowNoINTEGER)  BEGIN  FOR iWindowNo+1 TO INTE
GER(Windows) DO  MoveWindow(i,i-1)  END  DEC(Windows)  CurrentWindow0  END Elide
Window  PROCEDURE MakeWindow  BEGIN  INC(Windows)  MoveWindow(CurrentWindow,Wind
ows)  END MakeWindow  PROCEDURE Search(ReplaceARRAY OF CHARRLenINTEGERLe Gotoxy(
0,ScreenDepth-1)  WriteString(s1)WriteString(s2)  END ErrorMessage  PROCEDURE Se
tWindows(iINTEGER)    (*set number of edit windows in use - you must refresh the
 entire  screen with calls to DisplayFile after a call to this  routine*)  VARj,
kCARDINAL    BEGIN  Windowsi  ScreenControl(ClearScreen)  IF Windows1 THEN  Line
sPerWindow(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  IF b THEN LenLen-128 END  FoundFindString(CurFilePtr,b)  IF Found AND 
(RLen0) THEN  MarkAsUpdated  DelChars(CurFilePtr,Len)   InsChars(CurFilePtr,Repl
ace,RLen)  bBackOneChar(CurFilePtr)  END  ReDisplay  RETURN Found  END Search  P
ROCEDURE GoToLabel(chCHAR)  BEGIN  IF LabelOp(CurFilePtr,FALSE,ch) THEN  ReDispl
ay  ELSE  ErrorMessage(' Label nScreenControl(StartGraph)  FOR k1 TO ScreenWidth
 DO   ScreenControl(Horizontal)  END  ScreenControl(EndGraph)  END  END SetWindo
ws  (*put a line between the windows*)    VARchCHAR  posPosition  charsin,icINTE
GER  len,movedINTEGER  linepos,LeftMargCARDINAL  PROCEDURE SetLeftMarg(fEditFile
windowINTEGERVAR curx,curyCARDINAL)  BEGIN  Retrline(f,len,charsin,pos,moved,0) 
 linepos0  FOR ic0 TO charsin DO  ReadNextChar(pos,ch)  IF ch09x THEN lineposIAN
D(liot defined',' ')  ResetPos  END  END GoToLabel  BEGIN  CurrentWindow0  Curre
ntFile0  CurFilePtrPEditFile(ADR(Files1))  END EditControl.      dowThisx  curyC
urrentWindowThisy  ReDrawnTRUE  END ReDisplayWindow  PROCEDURE ReDisplay  BEGIN 
 ReDisplayWindow  SetLinePos(0)  ChangePos  END ReDisplay  PROCEDURE ChangeMargi
n(IncINTEGER)  BEGIN  IF (Inc0) AND  (CurrentLeftMarnepos+8,0fff8h)  ELSE INC(li
nepos) END  END  LeftMarg0  WHILE linepos(LeftMarg+ScreenWidth) DO  LeftMargLeft
Marg+32  END  LeftMarginwindowLeftMarg  END SetLeftMarg  PROCEDURE DisplayFile(f
EditFilewindowINTEGERVAR curx,curyCARDINAL)    (*redisplay as much text as will 
fit in the window  for the given file starting at the current position in the fi
le*)  VARi,j,k,lineposCARDINAL  movedoneINTEGER  startlineINTEGER (*first line o
f window*)  BEGIN  LeftMargLeftMarg(*This is the dumb screen version of EditDisp
lay    It uses writes of blanks to clear the rest of each line instead of  Delet
e to EOL *)      IMPLEMENTATION MODULE EditDisplay  (*Display part of a file bei
ng edited*)  FROMSCREENIO IMPORT Gotoxy,ScreenControl,  MadeChange,ScreenWidth,S
creenDepth  FROM Terminal IMPORT WriteString,Write,WriteLn,Read,  FROM MakeEdits
 IMPORT Position,Retrline,ReadNextChar,ErrorList,ErrorCount,LabelOp  FROMEditCon
t IMPORT LeftMargin,Files,CurrentWindow,CurrentFile,inwindow  startline(INTEGER(
LinesPerWindow)+1)*(window-1)  Gotoxy(0,startline)    (*first line of this windo
w*)  i0(*line within window*)  kLinesPerWindow DIV 2  Retrline(f,len,charsin,pos
,moved,-k)    LOOP    (*check if this is the line we were positioned to upon ent
ry*)    linepos0  j0  LOOP  IF (moved0) AND (jCARDINAL(charsin)) THEN  curxlinep
os-LeftMarg  curyi+CARDINAL(startline)  END  INC(j)  IF jCARDINAL(len) THEN EXIT
 END    (*cThisx,Thisy,  curx,cury,ReDisplay  FROM IntLogic IMPORT IAND  FROMFil
es IMPORT Lookup,Close,FILE,ReadBlock  FROMSYSTEM IMPORT ADR  CONSTEOF1ax  PROCE
DURE ClearToEnd(iCARDINAL)  BEGIN  ScreenControl(DelEol)  IF NOT MadeChange THEN
  FOR ii TO ScreenWidth-1 DO Write(' ') END  END  END ClearToEnd  PROCEDURE Erro
rMessage(s1,s2ARRAY OF CHAR)    (*Display error message at bottom of screen*)  V
AR iINTEGER  BEGIN  Gotoxy(0,ScreenDepth-1)  ScreenControl(RingBell)  ClearToEnd
(1)   $R$A$F$B$G$C$H$D$I$Eheck for cursor line*)    ReadNextChar(pos,ch)  IF ch0
9x THEN   REPEAT  INC(linepos)  IF (lineposLeftMarg)   AND (linepos(ScreenWidth+
LeftMarg)) THEN   Write(' ')   END  UNTIL IAND(linepos,7)0  ELSIF chEOF THEN EXI
T  ELSE   INC(linepos)  IF (lineposLeftMarg)  AND (linepos(ScreenWidth+LeftMarg)
) THEN   Write(ch)   END  END(*IF chvarious things*)  END (*inner loop*)  INC(i)
  IF lineposLeftMarg THEN  ClearToEo blocks of the error     message file, count
in the characters preceding the    error emssage we want *)  ReadBlock(f,ADR(b),
0,128,reply)  jErrorNumber  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*)  ReadBl
ock(f,ADR(b),j+2,128,reply)  FOR k0 TO Length-1 DO  IF i128 THEN   Ind(linepos+1
-LeftMarg)  ELSE  ClearToEnd(1)  END  IF iLinesPerWindow THEN EXIT  ELSE   Write
Ln  linepos0  END  INC(moved)  Retrline(f,len,ic,pos,movedone,1)  IF movedone0 T
HEN  FOR ii+1 TO LinesPerWindow DO  ClearToEnd(1)  WriteLn  END  EXIT  END  END(
*LOOP*)  END DisplayFile  PROCEDURE DisplayError    (*The error message file con
tains the messages,     The first two blocks give the lengths of the error messa
ges  The remaining blocks NC(j)  ReadBlock(f,ADR(b),j+2,128,reply)   i0  END  tk
bi  INC(i)  END  tLength0c  WriteString(t)  ELSE  WriteString(' Could not open e
rror messages file')  END  blLabelOp(FilesCurrentFile,FALSE,CHR(ErrorOrdinal+0b0
h))  ReDisplay  (*DisplayFile(FilesCurrentFile,CurrentWindow,Thisx,Thisy)*)  Got
oxy(Thisx,Thisy)  curxCurrentWindowThisx  curyCurrentWindowThisy  END DisplayErr
or  BEGIN  Windows0  END EditDisplay.  give the text of the error messages *)  T
YPETextARRAY0..63 OF CHAR    VARfFILE(*FILE is a type exported from the module F
iles*)    bARRAY 0..127 OF CHAR  i,j,k,LengthCARDINAL  tText  ErrorNumberCARDINA
L  replyINTEGER  blBOOLEAN  PROCEDURE Count(kCARDINAL)CARDINAL  VARiCARDINAL  BE
GIN  i0  IF k0 THEN RETURN 0 END  FOR kk-1 TO 0 BY -1 DO  ii+ORD(bk)  END  RETUR
N i  END Count  PROCEDURE WriteCard(iCARDINAL)  VARtARRAY0..3 OF CHAR  j,kCARDIN
ALDoFind(*Ctrl L*) MainTable1fxDelBack(*- on Osborne 1*)    (*The next key,  ass
igned tisx(ScreenWidth-1) THEN  ChangeMargin(32)  END  IF NOT ReDrawn THEN  IF L
inePosLineLen THEN  bBackOneChar(CurFilePtr)  WritePartLine(CurrentLeftMargin+Th
isx+1)  INC(Thisx)  bForwardOneChar(CurFilePtr)  ELSE  Write(ch)  INC(Thisx)  EN
D  END  END  ResetPos  END InsOneChar  PROCEDURE DelOneChar  BEGIN  MarkAs  BEGI
N  kHIGH(t)  WHILE i0 DO  ji DIV 10  tkCHR(ORD('0')+i-10*j)  ij  DEC(k)  END  FO
R kk+1 TO HIGH(t) DO Write(tk) END  END WriteCard  BEGIN  IF ErrorOrdinalErrorCo
unt THEN RETURN END  Gotoxy(0,ScreenDepth-1)  ErrorNumberErrorListErrorOrdinal.E
rrorNum  ScreenControl(DelEol)  WriteString('Error ')  WriteCard(ErrorNumber)  W
riteString('(')WriteCard(ErrorOrdinal+1)  WriteString(' of ')WriteCard(ErrorCoun
t)  WriteString(') ')  Lookup(f,'ERRMSG.DAT ',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 fact, you can use a non-disc file name (e
g PUN or CON)   but if you do this, you must do your IO through the module   Str
eams (or InOut, which calls streams), as the IO to the   serial devices is perfo
rmed by that module (it calls Files   to do IO to disc devices)  *)  IF reply0 T
HEN(*OK - file found*)      (*read the first 1 or tw  %R%A%F%B%G%C%H%D%I%E  &R&A
&F&B&G&C&H&D&I&E  'R'A'F'B'G'C'H'D'I'E  K RJ UK RI WJ SH SI QF TK SI QI NF QI PH
 NI NI PI RFy IH OI OI QGz IG MI PF MI JF LGz HFy JzI HzFy Jz£H IFy JzHz GxGx Jy
Gz GyFz JzGz FwDw GyFw Dv
Tous droits réservés. Reproduction sans autorisation interdite. © Kukulcan