FTL Modula-2 Complete Development System (UK) (128K) (Face 2A) (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 21 52 45 41 44 4D 45 21 45 44 21 00 00 00 60    .!README!ED!...`
002870:  05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 00 00 00 00    ................
002880:  00 2D 32 4A 55 4C 59 31 39 38 37 20 00 00 00 00    .-2JULY1987 ....
002890:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0028A0:  00 2D 42 41 43 4B 55 50 4E 4F 57 21 00 00 00 00    .-BACKUPNOW!....
0028B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0028C0:  00 2D 56 45 52 53 49 4F 4E 31 32 34 00 00 00 00    .-VERSION124....
0028D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0028E0:  00 44 4F 4D 45 4E 55 20 20 44 45 46 00 00 00 03    .DOMENU  DEF....
0028F0:  11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002900:  00 44 4F 4D 45 4E 55 20 20 4D 4F 44 00 00 00 39    .DOMENU  MOD...9
002910:  12 13 14 15 16 17 18 19 00 00 00 00 00 00 00 00    ................
002920:  00 45 44 49 54 43 4F 4E 54 44 45 46 00 00 00 0C    .EDITCONTDEF....
002930:  1A 1B 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002940:  00 52 45 43 4D 50 45 44 20 53 55 42 00 00 00 04    .RECMPED SUB....
002950:  1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002960:  00 45 44 49 54 43 4F 4E 54 4D 4F 44 00 00 00 6D    .EDITCONTMOD...m
002970:  23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 00 00    #$%&'()*+,-./0..
002980:  00 45 44 49 54 44 49 53 50 44 45 46 00 00 00 08    .EDITDISPDEF....
002990:  38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    8...............
0029A0:  00 53 43 52 45 45 4E 49 4F 4D 4F 44 00 00 00 2D    .SCREENIOMOD...-
0029B0:  1D 1E 1F 20 21 22 00 00 00 00 00 00 00 00 00 00    ... !"..........
0029C0:  00 45 44 49 54 44 49 53 50 4D 4F 44 00 00 00 33    .EDITDISPMOD...3
0029D0:  40 41 42 43 44 45 46 00 00 00 00 00 00 00 00 00    @ABCDEF.........
0029E0:  00 45 44 49 54 53 54 41 54 44 45 46 00 00 00 04    .EDITSTATDEF....
0029F0:  47 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    G...............
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 45 44 49 54 53 54 41 54 4D 4F 44 00 00 00 17    .EDITSTATMOD....
002C10:  48 49 4A 00 00 00 00 00 00 00 00 00 00 00 00 00    HIJ.............
002C20:  00 4D 41 4B 45 45 44 49 54 4D 4F 44 00 00 00 80    .MAKEEDITMOD....
002C30:  31 32 33 34 35 36 37 39 3A 3B 3C 3D 3E 3F 4B 65    12345679:;<=>?Ke
002C40:  00 4B 45 59 42 4F 41 52 44 44 45 46 00 00 00 02    .KEYBOARDDEF....
002C50:  4C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    L...............
002C60:  00 4B 45 59 42 4F 41 52 44 4D 4F 44 00 00 00 44    .KEYBOARDMOD...D
002C70:  4D 4E 4F 50 51 52 53 54 55 00 00 00 00 00 00 00    MNOPQRSTU.......
002C80:  00 4D 41 43 52 4F 53 20 20 44 45 46 00 00 00 06    .MACROS  DEF....
002C90:  56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    V...............
002CA0:  00 4D 41 43 52 4F 53 20 20 4D 4F 44 00 00 00 4F    .MACROS  MOD...O
002CB0:  57 58 59 5A 5B 5C 5D 5E 5F 60 00 00 00 00 00 00    WXYZ[\]^_`......
002CC0:  00 4D 41 4B 45 45 44 49 54 44 45 46 00 00 00 19    .MAKEEDITDEF....
002CD0:  61 62 63 64 00 00 00 00 00 00 00 00 00 00 00 00    abcd............
002CE0:  00 4D 41 4B 45 45 44 49 54 4D 4F 44 01 00 00 1F    .MAKEEDITMOD....
002CF0:  66 67 68 69 00 00 00 00 00 00 00 00 00 00 00 00    fghi............
002D00:  E5 4D 41 4B 45 45 44 49 54 4D 4F 44 01 00 00 20    .MAKEEDITMOD... 
002D10:  75 76 77 78 00 00 00 00 00 00 00 00 00 00 00 00    uvwx............
002D20:  00 4D 45 20 20 20 20 20 20 4D 4F 44 00 00 00 26    .ME      MOD...&
002D30:  79 7A 7B 7C 7D 00 00 00 00 00 00 00 00 00 00 00    yz{|}...........
002D40:  00 4D 45 4E 55 20 20 20 20 44 45 46 00 00 00 06    .MENU    DEF....
002D50:  7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ~...............
002D60:  00 4D 45 4E 55 20 20 20 20 4D 4F 44 00 00 00 1D    .MENU    MOD....
002D70:  7F 80 81 82 00 00 00 00 00 00 00 00 00 00 00 00    ................
002D80:  00 52 45 53 45 54 44 49 53 44 45 46 00 00 00 01    .RESETDISDEF....
002D90:  83 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002DA0:  00 52 45 53 45 54 44 49 53 4D 4F 44 00 00 00 02    .RESETDISMOD....
002DB0:  84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002DC0:  00 53 43 52 45 45 4E 44 55 44 45 46 00 00 00 06    .SCREENDUDEF....
002DD0:  85 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002DE0:  00 53 43 52 45 45 4E 44 55 4D 4F 44 00 00 00 05    .SCREENDUMOD....
002DF0:  86 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
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:  00 53 43 52 45 45 4E 49 4F 44 45 46 00 00 00 20    .SCREENIODEF... 
003010:  87 88 89 8A 00 00 00 00 00 00 00 00 00 00 00 00    ................
003020:  E5 53 43 52 45 45 4E 49 4F 42 41 4B 00 00 00 2D    .SCREENIOBAK...-
003030:  8B 8C 8D 8E 8F 90 00 00 00 00 00 00 00 00 00 00    ................
003040:  00 53 45 54 55 50 43 41 4C 44 45 46 00 00 00 05    .SETUPCALDEF....
003050:  91 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003060:  00 53 45 54 55 50 43 41 4C 4D 4F 44 00 00 00 0A    .SETUPCALMOD....
003070:  92 93 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003080:  E5 52 45 43 4D 50 45 44 20 42 41 4B 00 00 00 04    .RECMPED BAK....
003090:  94 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0030A0:  E5 45 44 49 54 53 54 41 54 52 45 4C 00 00 00 01    .EDITSTATREL....
0030B0:  1F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0030C0:  E5 4D 41 4B 45 45 44 49 54 52 45 4C 01 00 00 3A    .MAKEEDITREL...:
0030D0:  3E 3F 4B 95 96 97 98 99 00 00 00 00 00 00 00 00    >?K.............
0030E0:  E5 45 44 49 54 43 4F 4E 54 52 45 4C 00 00 00 01    .EDITCONTREL....
0030F0:  9A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003100:  E5 4D 41 43 52 4F 53 20 20 52 45 4C 00 00 00 01    .MACROS  REL....
003110:  9B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003120:  E5 4D 45 4E 55 20 20 20 20 52 45 4C 00 00 00 1B    .MENU    REL....
003130:  9C A1 A2 A3 00 00 00 00 00 00 00 00 00 00 00 00    ...£............
003140:  E5 44 4F 4D 45 4E 55 20 20 52 45 4C 00 00 00 01    .DOMENU  REL....
003150:  9D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003160:  E5 45 44 49 54 44 49 53 50 52 45 4C 00 00 00 01    .EDITDISPREL....
003170:  9E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003180:  E5 53 45 54 55 50 43 41 4C 52 45 4C 00 00 00 01    .SETUPCALREL....
003190:  9F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0031A0:  E5 4B 45 59 42 4F 41 52 44 52 45 4C 00 00 00 01    .KEYBOARDREL....
0031B0:  A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0031C0:  E5 52 45 43 4D 50 45 44 20 53 55 42 00 00 00 04    .RECMPED SUB....
0031D0:  A6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
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:  79 31 2D 31 20 20 44 4F 0D 0A 09 09 47 6F 74 6F    y1-1  DO....Goto
003390:  78 79 28 78 32 2C 69 29 3B 0D 0A 09 09 53 63 72    xy(x2,i);....Scr
0033A0:  65 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69    eenControl(Verti
0033B0:  63 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    cal);....END;...
0033C0:  46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 79    FOR i:=y2+1 TO y
0033D0:  31 2D 31 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 79    1-1 DO....Gotoxy
0033E0:  28 78 31 2C 69 29 3B 0D 0A 09 09 53 63 72 65 65    (x1,i);....Scree
0033F0:  6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 63 61    nControl(Vertica
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:  2A 2A 0D 0A 0D 0A 09 54 68 65 20 73 75 62 6D 69    **.....The submi
003D10:  74 20 66 69 6C 65 20 52 45 43 4D 50 45 44 2E 53    t file RECMPED.S
003D20:  55 42 20 63 61 6E 20 62 65 20 75 73 65 64 20 74    UB can be used t
003D30:  6F 20 72 65 63 6F 6D 70 69 6C 65 20 74 68 65 20    o recompile the 
003D40:  65 64 69 74 6F 72 3A 0D 0A 0D 0A 09 09 53 55 42    editor:......SUB
003D50:  4D 49 54 20 52 45 43 4D 50 45 44 0D 0A 0D 0A 74    MIT RECMPED....t
003D60:  68 65 20 64 69 73 74 72 69 62 75 74 65 64 20 66    he distributed f
003D70:  6F 72 6D 20 6F 66 20 74 68 69 73 20 66 69 6C 65    orm of this file
003D80:  20 61 73 73 75 6D 65 73 20 74 68 61 74 20 74 68     assumes that th
003D90:  65 20 66 69 6C 65 73 20 61 72 65 20 61 6C 6C 20    e files are all 
003DA0:  6F 6E 20 74 68 65 0D 0A 63 75 72 72 65 6E 74 20    on the..current 
003DB0:  64 72 69 76 65 2E 20 20 59 6F 75 20 6D 61 79 20    drive.  You may 
003DC0:  77 61 6E 74 20 74 6F 20 61 64 64 20 22 42 3A 22    want to add "B:"
003DD0:  20 69 6E 20 66 72 6F 6E 74 20 74 68 65 20 66 69     in front the fi
003DE0:  6C 65 6E 61 6D 65 73 20 62 65 69 6E 67 0D 0A 63    lenames being..c
003DF0:  6F 6D 70 69 6C 65 64 20 28 6F 72 20 61 64 64 20    ompiled (or add 
003E00:  77 68 61 74 65 76 65 72 20 64 72 69 76 65 20 6E    whatever drive n
003E10:  61 6D 65 20 79 6F 75 20 61 72 65 20 75 73 69 6E    ame you are usin
003E20:  67 29 2E 20 20 4E 6F 74 65 20 74 68 61 74 20 53    g).  Note that S
003E30:  55 42 4D 49 54 20 6F 6E 6C 79 0D 0A 77 6F 72 6B    UBMIT only..work
003E40:  73 20 66 72 6F 6D 20 64 72 69 76 65 20 41 3A 20    s from drive A: 
003E50:  6F 6E 20 6D 61 6E 79 20 63 6F 6D 70 75 74 65 72    on many computer
003E60:  73 2E 0D 0D 0A 09 4D 61 70 70 69 6E 67 20 79 6F    s.....Mapping yo
003E70:  75 72 20 6B 65 79 62 6F 61 72 64 2E 0D 0D 0A 09    ur keyboard.....
003E80:  49 66 20 79 6F 75 20 77 61 6E 74 20 74 6F 20 6D    If you want to m
003E90:  6F 64 69 66 79 20 74 68 65 20 65 64 69 74 6F 72    odify the editor
003EA0:  20 74 6F 20 75 73 65 20 79 6F 75 72 20 6B 65 79     to use your key
003EB0:  62 6F 61 72 64 20 61 72 72 6F 77 20 6B 65 79 73    board arrow keys
003EC0:  0D 61 6E 64 20 66 75 6E 63 74 69 6F 6E 20 6B 65    .and function ke
003ED0:  79 73 2C 20 79 6F 75 20 77 69 6C 6C 20 77 61 6E    ys, you will wan
003EE0:  74 20 74 6F 20 65 64 69 74 20 74 68 65 20 6D 6F    t to edit the mo
003EF0:  64 75 6C 65 20 4B 45 59 42 4F 41 52 44 2E 4D 4F    dule KEYBOARD.MO
003F00:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
003F10:  20 20 20 20 20 20 20 20 20 20 20 4E 6F 74 65 73               Notes
003F20:  20 66 6F 72 0D 20 20 20 20 20 20 20 20 20 20 20     for.           
003F30:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
003F40:  46 54 4C 20 4D 6F 64 75 6C 61 2D 32 20 45 64 69    FTL Modula-2 Edi
003F50:  74 6F 72 2F 54 6F 6F 6C 4B 69 74 20 64 69 73 63    tor/ToolKit disc
003F60:  0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    .               
003F70:  20 20 20 20 20 20 20 20 20 20 20 20 57 6F 72 6B                Work
003F80:  6D 61 6E 20 26 20 41 73 73 6F 63 69 61 74 65 73    man & Associates
003F90:  0D 0D 0A 0D 0D 0A 54 68 69 73 20 64 69 73 63 20    ......This disc 
003FA0:  63 6F 6E 74 61 69 6E 73 20 74 68 65 20 65 6E 74    contains the ent
003FB0:  69 72 65 20 73 6F 75 72 63 65 73 20 66 6F 72 20    ire sources for 
003FC0:  74 68 65 20 46 54 4C 20 4D 6F 64 75 6C 61 2D 32    the FTL Modula-2
003FD0:  20 65 64 69 74 6F 72 20 61 6E 64 0D 61 20 6E 75     editor and.a nu
003FE0:  6D 62 65 72 20 6F 66 20 75 74 69 6C 69 74 69 65    mber of utilitie
003FF0:  73 20 77 68 69 63 68 20 79 6F 75 20 6D 61 79 20    s which you may 
004000:  66 69 6E 64 20 75 73 65 66 75 6C 2E 20 0D 0D 0A    find useful. ...
004010:  0D 0D 0A 53 65 65 20 74 68 65 20 65 6E 64 20 6F    ...See the end o
004020:  66 20 74 68 69 73 20 66 69 6C 65 20 66 6F 72 20    f this file for 
004030:  6D 6F 72 65 20 64 65 74 61 69 6C 73 20 6F 6E 20    more details on 
004040:  74 68 65 20 75 74 69 6C 69 74 69 65 73 2E 20 20    the utilities.  
004050:  54 68 65 79 20 61 72 65 3A 0D 0D 0D 0A 43 4F 4D    They are:....COM
004060:  50 44 49 52 09 09 61 20 64 69 72 65 63 74 6F 72    PDIR..a director
004070:  79 20 63 6F 6D 70 61 72 65 20 70 72 6F 67 72 61    y compare progra
004080:  6D 2E 20 20 54 68 69 73 20 70 72 6F 67 72 61 6D    m.  This program
004090:  20 69 73 20 69 6E 76 61 6C 75 61 62 6C 65 20 74     is invaluable t
0040A0:  6F 0D 09 09 73 6F 66 74 77 61 72 65 20 64 65 76    o...software dev
0040B0:  65 6C 6F 70 65 72 73 20 77 68 6F 20 6E 65 65 64    elopers who need
0040C0:  20 74 6F 20 65 6E 73 75 72 65 20 74 68 61 74 20     to ensure that 
0040D0:  74 68 65 69 72 20 64 69 73 74 72 69 62 75 74 69    their distributi
0040E0:  6F 6E 0D 09 09 64 69 73 63 73 20 61 72 65 20 63    on...discs are c
0040F0:  6F 6D 70 6C 65 74 65 20 61 6E 64 20 63 6F 6E 74    omplete and cont
004100:  44 2C 0D 0A 74 68 65 6E 20 72 65 63 6F 6D 70 69    D,..then recompi
004110:  6C 65 20 74 68 65 20 65 64 69 74 6F 72 20 28 73    le the editor (s
004120:  65 65 20 61 62 6F 76 65 29 2E 0D 0D 0A 09 45 64    ee above).....Ed
004130:  69 74 6F 72 20 43 6F 6F 6B 27 73 20 47 75 69 64    itor Cook's Guid
004140:  65 2E 0D 0A 0D 0A 09 54 68 65 20 6D 61 69 6E 20    e......The main 
004150:  6D 6F 64 75 6C 65 73 20 69 6E 20 74 68 65 20 65    modules in the e
004160:  64 69 74 6F 72 20 61 72 65 3A 0D 0A 0D 0A 4D 45    ditor are:....ME
004170:  09 09 54 68 65 20 74 6F 70 20 6C 65 76 65 6C 20    ..The top level 
004180:  6D 6F 64 75 6C 65 2E 0D 0A 45 44 49 54 43 4F 4E    module...EDITCON
004190:  54 09 43 6F 6E 74 72 6F 6C 73 20 74 68 65 20 73    T.Controls the s
0041A0:  63 72 65 65 6E 20 64 69 73 70 6C 61 79 2E 0D 0A    creen display...
0041B0:  45 44 49 54 44 49 53 50 09 53 6F 6D 65 20 6F 74    EDITDISP.Some ot
0041C0:  68 65 72 20 73 63 72 65 65 6E 20 64 69 73 70 6C    her screen displ
0041D0:  61 79 20 70 72 6F 63 65 64 75 72 65 73 2D 2D 65    ay procedures--e
0041E0:  73 73 65 6E 74 69 61 6C 6C 79 20 70 61 72 74 0D    ssentially part.
0041F0:  0A 09 6F 66 20 45 44 49 54 43 4F 4E 54 2C 20 6B    ..of EDITCONT, k
004200:  65 70 74 20 73 65 70 61 72 61 74 65 20 66 6F 72    ept separate for
004210:  20 65 61 73 65 20 6F 66 20 6D 61 69 6E 74 65 6E     ease of mainten
004220:  61 6E 63 65 2E 0D 0A 4D 41 4B 45 45 44 49 54 09    ance...MAKEEDIT.
004230:  50 65 72 66 6F 72 6D 73 20 74 68 65 20 63 68 61    Performs the cha
004240:  6E 67 65 73 20 74 6F 20 74 68 65 20 66 69 6C 65    nges to the file
004250:  28 73 29 20 62 65 69 6E 67 20 65 64 69 74 65 64    (s) being edited
004260:  2E 0D 0A 4B 45 59 42 4F 41 52 44 09 41 63 63 65    ...KEYBOARD.Acce
004270:  70 74 73 20 69 6E 70 75 74 20 66 72 6F 6D 20 74    pts input from t
004280:  68 65 20 6B 65 79 62 6F 61 72 64 20 61 6E 64 20    he keyboard and 
004290:  63 61 6C 6C 73 20 61 70 70 72 6F 70 72 69 61 74    calls appropriat
0042A0:  65 0D 0A 09 09 72 6F 75 74 69 6E 65 73 20 74 6F    e....routines to
0042B0:  20 70 65 72 66 6F 72 6D 20 74 68 65 20 72 65 71     perform the req
0042C0:  75 65 73 74 65 64 20 65 64 69 74 20 66 75 6E 63    uested edit func
0042D0:  74 69 6F 6E 73 2E 0D 0A 44 4F 4D 45 4E 55 09 09    tions...DOMENU..
0042E0:  53 75 70 70 6F 72 74 73 20 74 68 65 20 6F 70 74    Supports the opt
0042F0:  69 6F 6E 73 20 6D 65 6E 75 20 28 74 68 61 74 20    ions menu (that 
004300:  61 69 6E 20 74 68 65 20 6C 61 74 65 73 74 20 76    ain the latest v
004310:  65 72 73 69 6F 6E 73 20 6F 66 20 66 69 6C 65 73    ersions of files
004320:  2E 0A 09 09 53 65 65 20 74 68 65 20 66 69 6C 65    ....See the file
004330:  20 43 4F 4D 50 44 49 52 2E 4D 4F 44 20 61 6E 64     COMPDIR.MOD and
004340:  20 69 6E 73 74 72 75 63 74 69 6F 6E 73 20 62 65     instructions be
004350:  6C 6F 77 2E 0D 0A 43 4F 4D 50 41 52 45 09 09 61    low...COMPARE..a
004360:  6E 20 41 73 63 69 69 20 66 69 6C 65 20 63 6F 6D    n Ascii file com
004370:  70 61 72 69 73 6F 6E 20 70 72 6F 67 72 61 6D 2E    parison program.
004380:  20 20 54 68 69 73 20 70 72 6F 67 72 61 6D 20 64      This program d
004390:  6F 65 73 20 6C 69 6E 65 2D 62 79 2D 0A 09 09 6C    oes line-by-...l
0043A0:  69 6E 65 20 63 6F 6D 70 61 72 69 73 6F 6E 73 20    ine comparisons 
0043B0:  6F 66 20 66 69 6C 65 73 2E 20 20 49 74 20 75 73    of files.  It us
0043C0:  65 73 20 61 20 70 6F 77 65 72 66 75 6C 20 63 6F    es a powerful co
0043D0:  6D 70 61 72 69 73 6F 6E 0D 0A 09 09 6D 65 74 68    mparison....meth
0043E0:  6F 64 20 77 68 69 63 68 20 72 61 72 65 6C 79 20    od which rarely 
0043F0:  67 65 74 73 20 6C 6F 73 74 2C 20 61 6E 64 20 77    gets lost, and w
004400:  68 69 63 68 20 63 61 6E 20 64 65 74 65 63 74 20    hich can detect 
004410:  62 6C 6F 63 6B 0D 09 09 6D 6F 76 65 73 2E 20 20    block...moves.  
004420:  53 65 65 20 74 68 65 20 66 69 6C 65 20 43 4F 4D    See the file COM
004430:  50 41 52 45 2E 4D 4F 44 20 61 6E 64 20 74 68 65    PARE.MOD and the
004440:  20 64 6F 63 75 6D 65 6E 74 61 74 69 6F 6E 20 62     documentation b
004450:  65 6C 6F 77 2E 0D 0D 0A 43 41 54 09 09 61 20 67    elow....CAT..a g
004460:  65 6E 65 72 61 6C 69 73 65 64 20 6C 69 73 74 69    eneralised listi
004470:  6E 67 20 6D 6F 64 75 6C 65 20 69 6E 74 65 6E 64    ng module intend
004480:  65 64 20 70 72 69 6D 61 72 69 6C 79 20 66 6F 72    ed primarily for
004490:  20 75 73 65 20 6F 6E 0D 0A 09 09 52 43 50 4D 73     use on....RCPMs
0044A0:  2E 20 20 49 74 20 63 61 6E 20 64 6F 20 74 61 62    .  It can do tab
0044B0:  20 65 78 70 61 6E 73 69 6F 6E 2C 20 6C 69 6E 65     expansion, line
0044C0:  20 6E 75 6D 62 65 72 69 6E 67 2C 20 73 74 72 69     numbering, stri
0044D0:  6E 67 20 73 65 61 72 63 68 2C 0D 09 09 70 6F 73    ng search,...pos
0044E0:  69 74 69 6F 6E 20 62 79 20 6C 69 6E 65 20 6E 75    ition by line nu
0044F0:  6D 62 65 72 20 61 6E 64 20 77 69 6C 64 20 63 61    mber and wild ca
004500:  69 73 2C 20 6F 70 65 6E 20 66 69 6C 65 2C 0D 0A    is, open file,..
004510:  09 63 6F 6D 70 2F 65 78 69 74 2C 20 65 74 63 29    .comp/exit, etc)
004520:  2E 0D 0A 45 44 49 54 53 54 41 54 09 50 69 63 6B    ...EDITSTAT.Pick
004530:  73 20 75 70 20 74 68 65 20 66 69 6C 65 20 70 6F    s up the file po
004540:  73 69 74 69 6F 6E 20 66 6F 72 20 61 20 66 69 6C    sition for a fil
004550:  65 20 77 68 65 6E 20 69 74 27 73 20 6F 70 65 6E    e when it's open
004560:  65 64 2E 0D 0A 4D 41 43 52 4F 53 09 09 48 61 6E    ed...MACROS..Han
004570:  64 6C 65 73 20 6D 61 63 72 6F 20 65 78 70 61 6E    dles macro expan
004580:  73 69 6F 6E 20 61 6E 64 20 64 65 66 69 6E 69 74    sion and definit
004590:  69 6F 6E 2C 20 69 6E 63 6C 75 64 69 6E 67 20 74    ion, including t
0045A0:  68 65 0D 0A 09 6C 65 61 72 6E 20 6D 6F 64 65 2E    he...learn mode.
0045B0:  20 20 4D 61 6B 65 73 20 61 6E 64 20 73 61 76 65      Makes and save
0045C0:  73 20 74 68 65 6D 20 22 6F 6E 20 74 68 65 20 66    s them "on the f
0045D0:  6C 79 22 20 64 75 72 69 6E 67 20 65 64 69 74 73    ly" during edits
0045E0:  2C 20 74 6F 6F 2E 0D 0A 53 45 54 55 50 43 41 4C    , too...SETUPCAL
0045F0:  20 20 20 20 20 20 20 20 45 64 69 74 6F 72 20 75            Editor u
004600:  73 65 73 20 74 68 69 73 20 6D 6F 64 75 6C 65 20    ses this module 
004610:  74 6F 20 63 61 6C 6C 20 74 68 65 20 63 6F 6D 70    to call the comp
004620:  69 6C 65 72 73 2E 20 20 53 65 65 0D 0A 09 61 6C    ilers.  See...al
004630:  73 6F 20 74 68 65 20 6D 6F 64 75 6C 65 20 43 48    so the module CH
004640:  41 49 4E 20 66 6F 72 20 61 6E 6F 74 68 65 72 20    AIN for another 
004650:  65 78 61 6D 70 6C 65 20 6F 66 20 74 68 69 73 2E    example of this.
004660:  0D 0D 0A 09 4E 6F 74 65 20 66 6F 72 20 75 73 65    ....Note for use
004670:  72 73 20 6F 72 20 61 62 75 73 65 72 73 20 6F 66    rs or abusers of
004680:  20 64 75 6D 62 20 74 65 72 6D 69 6E 61 6C 73 2E     dumb terminals.
004690:  0D 0A 0D 0A 59 6F 75 20 6D 75 73 74 20 72 65 6E    ....You must ren
0046A0:  61 6D 65 20 45 44 49 54 43 4F 4E 54 2E 44 4D 42    ame EDITCONT.DMB
0046B0:  20 61 6E 64 20 45 44 49 54 44 49 53 50 2E 44 4D     and EDITDISP.DM
0046C0:  42 20 74 6F 20 65 6E 64 20 69 6E 20 2E 4D 4F 44    B to end in .MOD
0046D0:  20 62 65 66 6F 72 65 0D 0A 72 65 63 6F 6D 70 69     before..recompi
0046E0:  6C 69 6E 67 20 74 68 65 20 64 75 6D 62 20 65 64    ling the dumb ed
0046F0:  69 74 6F 72 20 28 77 69 74 68 6F 75 74 20 69 6E    itor (without in
004700:  72 64 73 2E 0D 0D 0A 09 09 53 65 65 20 74 68 65    rds......See the
004710:  20 66 69 6C 65 20 43 41 54 2E 4D 4F 44 20 61 6E     file CAT.MOD an
004720:  64 20 74 68 65 20 64 6F 63 75 6D 65 6E 74 61 74    d the documentat
004730:  69 6F 6E 20 62 65 6C 6F 77 2E 0D 0D 0A 0D 0D 0A    ion below.......
004740:  50 41 54 54 45 52 4E 09 09 54 68 69 73 20 69 73    PATTERN..This is
004750:  20 61 20 70 61 74 74 65 72 6E 20 6D 61 74 63 68     a pattern match
004760:  69 6E 67 20 6D 6F 64 75 6C 65 20 77 68 69 63 68    ing module which
004770:  20 6D 61 74 63 68 65 73 20 63 6F 6D 70 6C 65 78     matches complex
004780:  0D 0A 09 09 28 65 76 65 6E 20 72 65 63 75 72 73    ....(even recurs
004790:  69 76 65 21 29 20 70 61 74 74 65 72 6E 73 2E 20    ive!) patterns. 
0047A0:  20 53 65 65 20 50 41 54 54 45 52 4E 2E 44 45 46     See PATTERN.DEF
0047B0:  20 66 6F 72 20 64 65 73 63 72 69 70 74 69 6F 6E     for description
0047C0:  0D 0A 09 09 6F 66 20 75 73 65 2C 20 61 6E 64 20    ....of use, and 
0047D0:  54 65 73 74 50 61 74 2E 4D 4F 44 20 61 73 20 61    TestPat.MOD as a
0047E0:  6E 20 65 78 61 6D 70 6C 65 2E 0D 0D 0A 53 43 52    n example....SCR
0047F0:  45 45 4E 49 4F 09 54 68 65 20 73 63 72 65 65 6E    EENIO.The screen
004800:  20 69 6E 70 75 74 2D 6F 75 74 70 75 74 20 72 6F     input-output ro
004810:  75 74 69 6E 65 73 20 75 73 65 64 20 62 79 20 74    utines used by t
004820:  68 65 20 65 64 69 74 6F 72 2E 20 20 54 68 65 0D    he editor.  The.
004830:  0A 09 09 73 74 61 6E 64 61 72 64 20 76 65 72 73    ...standard vers
004840:  69 6F 6E 20 6F 66 20 53 63 72 65 65 6E 49 4F 20    ion of ScreenIO 
004850:  28 53 43 52 45 45 4E 49 4F 2E 4D 4F 44 29 2C 20    (SCREENIO.MOD), 
004860:  70 6C 75 73 20 73 6F 6D 65 20 6D 65 6D 6F 72 79    plus some memory
004870:  0D 0A 09 09 6D 61 70 70 65 64 20 76 65 72 73 69    ....mapped versi
004880:  6F 6E 73 20 61 72 65 20 73 75 70 70 6C 69 65 64    ons are supplied
004890:  2E 20 20 53 43 52 45 45 4E 49 4F 2E 4F 53 42 20    .  SCREENIO.OSB 
0048A0:  69 73 20 66 6F 72 20 74 68 65 20 4F 73 62 6F 72    is for the Osbor
0048B0:  6E 65 0D 0A 09 09 31 2C 20 53 43 52 45 45 4E 49    ne....1, SCREENI
0048C0:  4F 2E 4D 42 45 20 69 73 20 66 6F 72 20 74 68 65    O.MBE is for the
0048D0:  20 4D 69 63 72 6F 42 65 65 2C 20 61 6E 64 20 53     MicroBee, and S
0048E0:  43 52 45 45 4E 49 4F 2E 45 41 52 20 69 73 20 66    CREENIO.EAR is f
0048F0:  6F 72 0D 0A 09 09 74 68 65 20 45 61 72 74 68 20    or....the Earth 
004900:  73 65 72 74 2F 64 65 6C 65 74 65 20 6C 69 6E 65    sert/delete line
004910:  20 6F 72 20 63 6C 65 61 72 20 74 6F 0D 0A 65 6E     or clear to..en
004920:  64 20 6F 66 20 6C 69 6E 65 29 2E 20 20 4D 69 6E    d of line).  Min
004930:  64 20 79 6F 75 20 64 6F 6E 27 74 20 6F 76 65 72    d you don't over
004940:  77 72 69 74 65 20 79 6F 75 72 20 6F 6E 6C 79 20    write your only 
004950:  63 6F 70 79 20 6F 66 20 4D 45 2E 43 4F 4D 0D 0A    copy of ME.COM..
004960:  77 68 69 6C 65 20 65 78 70 65 72 69 6D 65 6E 74    while experiment
004970:  69 6E 67 2D 2D 61 6E 64 20 63 6F 70 79 20 4D 45    ing--and copy ME
004980:  2E 43 4F 4D 20 66 72 6F 6D 20 79 6F 75 72 20 6F    .COM from your o
004990:  72 69 67 69 6E 61 6C 20 64 69 73 6B 73 20 69 66    riginal disks if
0049A0:  0D 0A 79 6F 75 20 68 61 76 65 20 61 6E 79 20 64    ..you have any d
0049B0:  6F 75 62 74 73 2E 0D 0D 0A 49 66 20 73 74 72 61    oubts....If stra
0049C0:  70 70 65 64 20 66 6F 72 20 72 6F 6F 6D 2C 20 6F    pped for room, o
0049D0:  72 20 6A 75 73 74 20 65 78 70 65 72 69 6D 65 6E    r just experimen
0049E0:  74 69 6E 67 2C 20 4D 41 43 52 4F 53 2E 4D 42 45    ting, MACROS.MBE
0049F0:  20 68 61 73 20 6E 6F 0D 0A 66 75 6E 63 74 69 6F     has no..functio
004A00:  6E 20 6B 65 79 20 63 6F 64 65 20 61 6E 64 20 74    n key code and t
004A10:  68 65 72 65 66 6F 72 65 20 69 73 20 73 6D 61 6C    herefore is smal
004A20:  6C 65 72 2E 20 20 41 73 20 62 65 66 6F 72 65 2C    ler.  As before,
004A30:  20 72 65 6E 61 6D 65 0D 0A 69 74 20 74 6F 20 4D     rename..it to M
004A40:  41 43 52 4F 53 2E 4D 4F 44 20 62 65 66 6F 72 65    ACROS.MOD before
004A50:  20 72 65 63 6F 6D 70 69 6C 69 6E 67 2E 0D 0D 0A     recompiling....
004A60:  09 09 53 41 4D 50 4C 45 20 50 52 4F 47 52 41 4D    ..SAMPLE PROGRAM
004A70:  20 49 4E 53 54 52 55 43 54 49 4F 4E 53 0D 0A 0D     INSTRUCTIONS...
004A80:  0A 09 09 43 41 54 2E 4D 4F 44 0D 0A 09 09 3D 3D    ...CAT.MOD....==
004A90:  3D 3D 3D 3D 3D 0D 0A 0D 0A 41 20 66 69 6C 65 20    =====....A file 
004AA0:  64 69 73 70 6C 61 79 20 70 72 6F 67 72 61 6D 20    display program 
004AB0:  77 69 74 68 6F 75 74 20 74 68 65 20 73 68 6F 72    without the shor
004AC0:  74 63 6F 6D 69 6E 67 73 20 6F 66 20 27 74 79 70    tcomings of 'typ
004AD0:  65 27 2E 20 20 43 41 54 20 63 61 6E 3A 0D 0D 0A    e'.  CAT can:...
004AE0:  09 4E 75 6D 62 65 72 20 6F 75 74 70 75 74 20 6C    .Number output l
004AF0:  69 6E 65 73 0D 0A 09 50 61 67 65 20 6F 75 74 70    ines...Page outp
004B00:  43 6F 6D 70 75 74 65 72 73 27 20 5A 38 30 20 43    Computers' Z80 C
004B10:  61 72 64 2E 20 20 54 6F 20 70 72 6F 64 75 63 65    ard.  To produce
004B20:  20 61 20 6D 65 6D 6F 72 79 20 6D 61 70 70 65 64     a memory mapped
004B30:  0D 0A 09 09 76 65 72 73 69 6F 6E 2C 20 73 74 61    ....version, sta
004B40:  72 74 20 77 69 74 68 20 74 68 65 20 4D 69 63 72    rt with the Micr
004B50:  6F 42 65 65 2C 20 61 73 20 74 68 61 74 20 69 73    oBee, as that is
004B60:  20 74 68 65 20 6D 6F 73 74 20 73 74 61 6E 64 61     the most standa
004B70:  72 64 2E 0D 0D 0A 09 09 54 6F 20 72 65 70 6C 61    rd......To repla
004B80:  63 65 20 74 68 65 20 73 74 61 6E 64 61 72 64 20    ce the standard 
004B90:  76 65 72 73 69 6F 6E 20 6F 66 20 53 63 72 65 65    version of Scree
004BA0:  6E 49 4F 20 62 79 20 61 20 6D 65 6D 6F 72 79 20    nIO by a memory 
004BB0:  6D 61 70 70 65 64 0D 0A 09 09 76 65 72 73 69 6F    mapped....versio
004BC0:  6E 2C 20 73 69 6D 70 6C 79 20 63 6F 6D 70 69 6C    n, simply compil
004BD0:  65 20 74 68 65 20 6D 65 6D 6F 72 79 20 6D 61 70    e the memory map
004BE0:  70 65 64 20 69 6D 70 6C 65 6D 65 6E 74 61 74 69    ped implementati
004BF0:  6F 6E 20 6D 6F 64 75 6C 65 0D 0A 09 09 69 6E 20    on module....in 
004C00:  70 6C 61 63 65 20 6F 66 20 74 68 65 20 73 74 61    place of the sta
004C10:  6E 64 61 72 64 20 69 6D 70 6C 65 6D 65 6E 74 61    ndard implementa
004C20:  74 69 6F 6E 20 6D 6F 64 75 6C 65 2D 2D 6E 6F 20    tion module--no 
004C30:  63 68 61 6E 67 65 73 20 61 72 65 0D 0A 09 09 6E    changes are....n
004C40:  65 65 64 65 64 20 69 6E 20 74 68 65 20 64 65 66    eeded in the def
004C50:  69 6E 69 74 69 6F 6E 20 6D 6F 64 75 6C 65 2E 20    inition module. 
004C60:  20 4E 4F 54 45 3A 20 74 68 65 20 4F 73 62 6F 72     NOTE: the Osbor
004C70:  6E 65 20 76 65 72 73 69 6F 6E 20 69 73 0D 0A 09    ne version is...
004C80:  09 66 6F 72 20 4F 73 62 6F 72 6E 65 20 49 73 20    .for Osborne Is 
004C90:  6F 6E 6C 79 2C 20 4E 4F 54 20 74 68 65 20 45 78    only, NOT the Ex
004CA0:  65 63 75 74 69 76 65 2E 20 20 54 68 65 20 56 69    ecutive.  The Vi
004CB0:  78 65 6E 20 69 73 20 61 6C 73 6F 0D 0A 09 09 73    xen is also....s
004CC0:  6C 69 67 68 74 6C 79 20 64 69 66 66 65 72 65 6E    lightly differen
004CD0:  74 2E 0D 0D 0A 09 43 6F 6D 70 69 6C 69 6E 67 20    t.....Compiling 
004CE0:  74 68 65 20 65 64 69 74 6F 72 2E 0D 09 2A 2A 2A    the editor...***
004CF0:  2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A    ****************
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:  75 74 0D 0A 09 45 78 70 61 6E 64 20 74 61 62 73    ut...Expand tabs
004E10:  20 74 6F 20 73 70 61 63 65 73 0D 0A 09 57 72 61     to spaces...Wra
004E20:  70 20 6C 69 6E 65 73 20 66 6F 72 20 6C 69 73 74    p lines for list
004E30:  69 6E 67 20 74 6F 20 74 65 72 6D 69 6E 61 6C 73    ing to terminals
004E40:  20 77 69 74 68 6F 75 74 20 61 75 74 6F 2D 6C 69     without auto-li
004E50:  6E 65 20 77 72 61 70 0D 0A 09 52 65 70 6F 73 69    ne wrap...Reposi
004E60:  74 69 6F 6E 20 62 79 20 6C 69 6E 65 20 6E 75 6D    tion by line num
004E70:  62 65 72 20 6F 72 20 62 79 20 73 74 72 69 6E 67    ber or by string
004E80:  20 73 65 61 72 63 68 0D 0A 09 55 73 65 20 77 69     search...Use wi
004E90:  6C 64 20 63 61 72 64 73 20 6F 6E 20 74 68 65 20    ld cards on the 
004EA0:  63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 0D 0A 09 53    command line...S
004EB0:  65 65 20 6E 6F 6E 2D 70 72 69 6E 74 69 6E 67 20    ee non-printing 
004EC0:  63 68 61 72 61 63 74 65 72 73 20 69 6E 20 68 65    characters in he
004ED0:  78 20 28 6F 74 68 65 72 20 74 68 61 6E 20 43 52    x (other than CR
004EE0:  2F 4C 46 2F 54 41 42 29 0D 0A 0D 0A 43 41 54 20    /LF/TAB)....CAT 
004EF0:  69 73 20 6E 6F 74 20 61 20 43 50 2F 4D 20 69 6D    is not a CP/M im
004F00:  70 6C 65 6D 65 6E 74 61 74 69 6F 6E 20 6F 66 20    plementation of 
004F10:  74 68 65 20 63 61 74 20 70 72 6F 67 72 61 6D 20    the cat program 
004F20:  6F 6E 20 55 4E 49 58 3B 20 69 74 20 69 73 20 6D    on UNIX; it is m
004F30:  6F 72 65 20 6C 69 6B 65 0D 0A 55 4E 49 58 27 73    ore like..UNIX's
004F40:  20 4D 4F 52 45 2E 0D 0A 0D 0A 54 6F 20 72 75 6E     MORE.....To run
004F50:  20 74 68 65 20 70 72 6F 67 72 61 6D 3A 0D 0A 0D     the program:...
004F60:  0A 09 43 41 54 20 20 20 66 69 6C 65 20 6C 69 73    ..CAT   file lis
004F70:  74 20 2F 6F 70 74 69 6F 6E 73 0D 0A 6F 72 0D 0A    t /options..or..
004F80:  09 43 41 54 20 20 20 66 69 6C 65 20 6C 69 73 74    .CAT   file list
004F90:  20 5B 6F 70 74 69 6F 6E 73 0D 0A 0D 0A 54 68 65     [options....The
004FA0:  20 6F 70 74 69 6F 6E 73 20 6D 61 79 20 61 6C 73     options may als
004FB0:  6F 20 62 65 20 6F 6D 69 74 74 65 64 2E 20 20 54    o be omitted.  T
004FC0:  68 65 20 22 66 69 6C 65 20 6C 69 73 74 22 20 69    he "file list" i
004FD0:  73 20 61 20 6C 69 73 74 20 6F 66 20 66 69 6C 65    s a list of file
004FE0:  20 6E 61 6D 65 73 20 6F 72 0D 0A 77 69 6C 64 20     names or..wild 
004FF0:  63 61 72 64 73 20 77 68 69 63 68 20 6D 61 74 63    cards which matc
005000:  73 74 72 69 6E 67 20 69 73 20 73 65 61 72 63 68    string is search
005010:  65 64 20 66 6F 72 20 61 67 61 69 6E 2E 0D 0A 0D    ed for again....
005020:  0A 4E 09 09 54 6F 67 67 6C 65 20 6C 69 6E 65 20    .N..Toggle line 
005030:  6E 75 6D 62 65 72 69 6E 67 20 6F 70 74 69 6F 6E    numbering option
005040:  2E 0D 0A 49 09 09 54 6F 67 67 6C 65 20 74 61 62    ...I..Toggle tab
005050:  20 65 78 70 61 6E 73 69 6F 6E 20 6F 70 74 69 6F     expansion optio
005060:  6E 2E 0D 0A 57 09 09 54 6F 67 67 6C 65 20 73 6F    n...W..Toggle so
005070:  66 74 77 61 72 65 20 6C 69 6E 65 20 77 72 61 70    ftware line wrap
005080:  20 6F 70 74 69 6F 6E 2E 20 20 49 66 20 74 68 65     option.  If the
005090:  20 57 20 69 73 20 66 6F 6C 6C 6F 77 65 64 20 62     W is followed b
0050A0:  79 20 61 0D 0A 09 6E 75 6D 62 65 72 2C 20 74 68    y a...number, th
0050B0:  65 20 6E 75 6D 62 65 72 20 72 65 73 65 74 73 20    e number resets 
0050C0:  74 68 65 20 73 63 72 65 65 6E 20 77 69 64 74 68    the screen width
0050D0:  2E 0D 0A 50 09 09 54 6F 67 67 6C 65 20 70 61 67    ...P..Toggle pag
0050E0:  65 20 6D 6F 64 65 2E 20 49 66 20 74 68 65 20 50    e mode. If the P
0050F0:  20 69 73 20 66 6F 6C 6C 6F 77 65 64 20 79 20 61     is followed y a
005100:  20 6E 75 6D 62 65 72 2C 20 69 74 20 72 65 73 65     number, it rese
005110:  74 73 0D 0A 09 74 68 65 20 70 61 67 65 20 6C 65    ts...the page le
005120:  6E 67 74 68 2E 20 20 4E 6F 74 65 20 74 68 61 74    ngth.  Note that
005130:  20 74 68 65 20 66 69 72 73 74 20 50 20 6F 6E 20     the first P on 
005140:  61 6E 79 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65    any command line
005150:  0D 0A 09 61 6C 77 61 79 73 20 63 61 75 73 65 73    ...always causes
005160:  20 70 61 67 65 20 6D 6F 64 65 20 74 6F 20 62 65     page mode to be
005170:  20 63 6C 65 61 72 65 64 2C 20 61 73 20 70 61 67     cleared, as pag
005180:  65 20 6D 6F 64 65 20 69 73 20 61 6C 77 61 79 73    e mode is always
005190:  0D 0A 09 65 6E 61 62 6C 65 64 20 77 68 65 6E 20    ...enabled when 
0051A0:  74 68 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65    the command line
0051B0:  20 69 73 20 70 72 6F 63 65 73 73 65 64 2E 20 20     is processed.  
0051C0:  48 65 6E 63 65 2C 20 74 6F 20 6A 75 73 74 0D 0A    Hence, to just..
0051D0:  09 63 68 61 6E 67 65 20 74 68 65 20 70 61 67 65    .change the page
0051E0:  20 6C 65 6E 67 74 68 2C 20 79 6F 75 20 6D 75 73     length, you mus
0051F0:  74 20 64 6F 20 50 32 30 50 20 28 73 61 79 29 2E    t do P20P (say).
005200:  68 20 66 69 6C 65 20 6E 61 6D 65 73 2E 20 20 46    h file names.  F
005210:  6F 72 20 65 78 61 6D 70 6C 65 3A 0D 0A 0D 0A 09    or example:.....
005220:  43 41 54 20 62 3A 2A 2E 64 65 66 20 62 3A 2A 2E    CAT b:*.def b:*.
005230:  6D 6F 64 0D 0D 0A 77 69 6C 6C 20 6C 69 73 74 20    mod...will list 
005240:  74 68 65 20 64 65 66 69 6E 69 74 69 6F 6E 20 66    the definition f
005250:  69 6C 65 73 2C 20 74 68 65 6E 20 74 68 65 20 6D    iles, then the m
005260:  6F 64 75 6C 65 20 66 69 6C 65 73 2E 0D 0A 0D 0A    odule files.....
005270:  41 6E 20 6F 70 74 69 6F 6E 20 69 73 20 7A 65 72    An option is zer
005280:  6F 20 6F 72 20 6D 6F 72 65 20 61 6C 70 68 61 62    o or more alphab
005290:  65 74 69 63 73 2E 20 20 53 6F 6D 65 20 6F 66 20    etics.  Some of 
0052A0:  74 68 65 20 61 6C 70 68 61 62 65 74 69 63 73 20    the alphabetics 
0052B0:  6D 61 79 20 62 65 0D 0A 66 6F 6C 6C 6F 77 65 64    may be..followed
0052C0:  20 62 79 20 61 20 6E 75 6D 62 65 72 2E 20 20 49     by a number.  I
0052D0:  66 20 61 20 6E 75 6D 62 65 72 20 69 73 20 69 6E    f a number is in
0052E0:  63 6C 75 64 65 64 2C 20 69 74 20 6D 75 73 74 20    cluded, it must 
0052F0:  69 6D 6D 65 64 69 61 74 65 6C 79 20 66 6F 6C 6C    immediately foll
005300:  6F 77 0D 0A 74 68 65 20 6F 70 74 69 6F 6E 20 63    ow..the option c
005310:  68 61 72 61 63 74 65 72 2D 2D 69 74 20 6D 75 73    haracter--it mus
005320:  74 20 6E 6F 74 20 62 65 20 73 65 70 61 72 61 74    t not be separat
005330:  65 64 2E 0D 0A 0D 0A 54 68 65 20 6F 70 74 69 6F    ed.....The optio
005340:  6E 73 20 61 72 65 3A 0D 0A 0D 0A 09 50 20 2D 20    ns are:.....P - 
005350:  75 73 65 20 70 61 67 65 20 6D 6F 64 65 2E 20 20    use page mode.  
005360:  41 74 20 74 68 65 20 65 6E 64 20 6F 66 20 65 76    At the end of ev
005370:  65 72 79 20 70 61 67 65 20 6F 66 20 6F 75 74 70    ery page of outp
005380:  75 74 2C 20 43 41 54 20 77 69 6C 6C 0D 0A 70 72    ut, CAT will..pr
005390:  6F 6D 70 74 20 66 6F 72 20 61 20 63 6F 6D 6D 61    ompt for a comma
0053A0:  6E 64 20 28 73 65 65 20 62 65 6C 6F 77 29 2E 20    nd (see below). 
0053B0:  20 54 68 65 20 6F 70 74 69 6F 6E 20 6D 61 79 20     The option may 
0053C0:  62 65 20 66 6F 6C 6C 6F 77 65 64 20 62 79 20 74    be followed by t
0053D0:  68 65 20 6E 75 6D 62 65 72 0D 0A 6F 66 20 6C 69    he number..of li
0053E0:  6E 65 73 20 74 6F 20 61 20 70 61 67 65 2E 20 20    nes to a page.  
0053F0:  44 65 66 61 75 6C 74 20 6C 65 6E 67 74 68 20 69    Default length i
005400:  0D 0A 51 09 09 51 75 69 74 20 74 68 69 73 20 66    ..Q..Quit this f
005410:  69 6C 65 2E 0D 0A 43 74 72 6C 20 43 09 09 52 65    ile...Ctrl C..Re
005420:  74 75 72 6E 20 74 6F 20 43 50 2F 4D 2E 0D 0A 0D    turn to CP/M....
005430:  0A 0D 0A 09 43 6F 6D 70 61 72 65 20 2D 20 63 6F    ....Compare - co
005440:  6D 70 61 72 65 20 74 77 6F 20 41 73 63 69 69 20    mpare two Ascii 
005450:  66 69 6C 65 73 20 6C 69 6E 65 20 62 79 20 6C 69    files line by li
005460:  6E 65 0D 0A 09 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D    ne...===========
005470:  3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D    ================
005480:  3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D    ================
005490:  3D 3D 3D 0D 0A 0D 0A 54 68 69 73 20 70 72 6F 67    ===....This prog
0054A0:  72 61 6D 20 64 69 73 70 6C 61 79 73 20 74 68 65    ram displays the
0054B0:  20 64 69 66 66 65 72 65 6E 63 65 73 20 62 65 74     differences bet
0054C0:  77 65 65 6E 20 74 77 6F 20 66 69 6C 65 73 2E 20    ween two files. 
0054D0:  20 49 74 20 70 72 65 73 65 6E 74 73 20 74 68 65     It presents the
0054E0:  0D 0A 6F 75 74 70 75 74 20 69 6E 20 61 20 72 65    ..output in a re
0054F0:  61 73 6F 6E 61 62 6C 79 20 72 65 61 64 61 62 6C    asonably readabl
005500:  65 20 66 6F 72 6D 20 28 69 74 20 77 6F 75 6C 64    e form (it would
005510:  20 6C 6F 6F 6B 20 62 65 61 75 74 20 6F 6E 20 61     look beaut on a
005520:  20 63 6F 6C 6F 75 72 20 70 72 69 6E 74 65 72 29     colour printer)
005530:  2E 0D 0A 54 68 65 20 70 72 6F 67 72 61 6D 20 69    ...The program i
005540:  73 20 62 61 73 65 64 20 6F 6E 20 61 20 6D 65 74    s based on a met
005550:  68 6F 64 20 64 65 73 63 72 69 62 65 64 20 62 79    hod described by
005560:  20 50 61 75 6C 20 48 65 63 6B 65 6C 20 69 6E 20     Paul Heckel in 
005570:  27 41 20 54 65 63 68 6E 69 71 75 65 0D 0A 66 6F    'A Technique..fo
005580:  72 20 49 73 6F 6C 61 74 69 6E 67 20 44 69 66 66    r Isolating Diff
005590:  65 72 65 6E 63 65 73 20 62 65 74 77 65 65 6E 20    erences between 
0055A0:  46 69 6C 65 73 27 2C 20 43 6F 6D 6D 75 6E 69 63    Files', Communic
0055B0:  61 74 69 6F 6E 73 20 6F 66 20 74 68 65 20 41 43    ations of the AC
0055C0:  4D 2C 20 56 6F 6C 20 32 31 0D 0A 4E 6F 20 34 2C    M, Vol 21..No 4,
0055D0:  20 41 70 72 69 6C 20 31 39 37 38 2C 20 70 70 20     April 1978, pp 
0055E0:  32 36 34 2D 32 36 38 2E 20 20 54 6F 20 72 75 6E    264-268.  To run
0055F0:  20 74 68 65 20 70 72 6F 67 72 61 6D 3A 0D 0D 0A     the program:...
005600:  73 20 32 34 2E 0D 09 57 20 2D 20 53 65 74 20 73    s 24...W - Set s
005610:  6F 66 74 77 61 72 65 20 6C 69 6E 65 20 77 72 61    oftware line wra
005620:  70 2E 20 20 4C 69 6E 65 73 20 6C 6F 6E 67 65 72    p.  Lines longer
005630:  20 74 68 61 6E 20 74 68 65 20 6C 69 6E 65 20 77     than the line w
005640:  69 64 74 68 20 77 69 6C 6C 20 62 65 0D 0A 77 72    idth will be..wr
005650:  61 70 70 65 64 20 61 72 6F 75 6E 64 20 62 79 20    apped around by 
005660:  74 68 65 20 73 6F 66 74 77 61 72 65 2E 20 20 54    the software.  T
005670:  68 69 73 20 69 73 20 75 73 65 66 75 6C 20 69 66    his is useful if
005680:  20 79 6F 75 72 20 74 65 72 6D 69 6E 61 6C 20 77     your terminal w
005690:  69 6C 6C 20 6E 6F 74 0D 0A 70 65 72 66 6F 72 6D    ill not..perform
0056A0:  20 68 61 72 64 77 61 72 65 20 6C 69 6E 65 20 77     hardware line w
0056B0:  72 61 70 73 2E 20 20 49 74 20 61 6C 73 6F 20 70    raps.  It also p
0056C0:  72 65 76 65 6E 74 73 20 61 6E 79 20 74 65 78 74    revents any text
0056D0:  20 66 61 6C 6C 69 6E 67 20 6F 66 66 20 74 68 65     falling off the
0056E0:  20 74 6F 70 0D 0A 6F 66 20 73 63 72 65 65 6E 20     top..of screen 
0056F0:  61 73 20 74 68 65 20 72 65 73 75 6C 74 20 6F 66    as the result of
005700:  20 68 61 72 64 77 61 72 65 20 6C 69 6E 65 20 77     hardware line w
005710:  72 61 70 73 2E 20 20 22 57 22 20 6D 61 79 20 62    raps.  "W" may b
005720:  65 20 66 6F 6C 6C 6F 77 65 64 20 62 79 20 74 68    e followed by th
005730:  65 0D 0A 6E 75 6D 62 65 72 20 6F 66 20 63 6F 6C    e..number of col
005740:  75 6D 6E 73 20 6F 6E 20 74 68 65 20 73 63 72 65    umns on the scre
005750:  65 6E 2E 20 20 44 65 66 61 75 6C 74 20 77 69 64    en.  Default wid
005760:  74 68 20 69 73 20 38 30 2E 0D 0A 09 49 20 2D 20    th is 80....I - 
005770:  45 78 70 61 6E 64 20 74 61 62 73 2E 20 20 54 61    Expand tabs.  Ta
005780:  62 73 20 61 72 65 20 65 78 70 61 6E 64 65 64 20    bs are expanded 
005790:  74 6F 20 61 6E 20 61 70 70 72 6F 70 72 69 61 74    to an appropriat
0057A0:  65 20 6E 75 6D 62 65 72 20 6F 66 20 73 70 61 63    e number of spac
0057B0:  65 73 2E 0D 0A 09 4E 20 2D 20 4E 75 6D 62 65 72    es....N - Number
0057C0:  20 6C 69 6E 65 73 2E 20 45 61 63 68 20 6C 69 6E     lines. Each lin
0057D0:  65 20 69 73 20 70 72 65 63 65 64 65 64 20 62 79    e is preceded by
0057E0:  20 61 20 6C 69 6E 65 20 6E 75 6D 62 65 72 2E 0D     a line number..
0057F0:  0A 0D 0A 45 78 61 6D 70 6C 65 73 3A 0D 0A 0D 0A    ...Examples:....
005800:  09 43 4F 4D 50 41 52 45 20 6F 6C 64 20 66 69 6C    .COMPARE old fil
005810:  65 2C 6E 65 77 20 66 69 6C 65 2C 5B 4C 69 73 74    e,new file,[List
005820:  20 66 69 6C 65 5D 0D 0A 0D 0A 54 68 65 20 74 68     file]....The th
005830:  69 72 64 20 66 69 6C 65 20 69 73 20 6F 70 74 69    ird file is opti
005840:  6F 6E 61 6C 2E 20 20 49 66 20 6F 6D 69 74 74 65    onal.  If omitte
005850:  64 2C 20 74 68 65 20 6F 75 74 70 75 74 20 69 73    d, the output is
005860:  20 74 6F 20 74 68 65 20 70 72 69 6E 74 65 72 2E     to the printer.
005870:  20 20 59 6F 75 0D 0A 63 61 6E 20 75 73 65 20 64      You..can use d
005880:  65 76 69 63 65 20 6E 61 6D 65 73 20 28 65 2E 67    evice names (e.g
005890:  2E 20 54 54 59 29 20 61 73 20 77 65 6C 6C 20 61    . TTY) as well a
0058A0:  73 20 64 69 73 63 20 66 69 6C 65 20 6E 61 6D 65    s disc file name
0058B0:  73 2E 0D 0A 0D 0A 54 68 65 20 74 77 6F 20 66 69    s.....The two fi
0058C0:  6C 65 73 20 61 72 65 20 63 6F 6D 70 61 72 65 64    les are compared
0058D0:  20 6C 69 6E 65 20 62 79 20 6C 69 6E 65 2E 20 20     line by line.  
0058E0:  4C 69 6E 65 73 20 77 68 69 63 68 20 68 61 76 65    Lines which have
0058F0:  20 62 65 65 6E 20 64 65 6C 65 74 65 64 20 66 72     been deleted fr
005900:  6F 6D 0D 0A 74 68 65 20 6F 6C 64 20 66 69 6C 65    om..the old file
005910:  20 61 72 65 20 70 72 69 6E 74 65 64 20 69 6E 20     are printed in 
005920:  69 74 61 6C 69 63 73 2E 20 20 49 6E 73 65 72 74    italics.  Insert
005930:  65 64 20 6C 69 6E 65 73 20 61 72 65 20 70 72 69    ed lines are pri
005940:  6E 74 65 64 20 69 6E 20 62 6F 6C 64 2E 0D 0A 4C    nted in bold...L
005950:  69 6E 65 73 20 77 68 69 63 68 20 68 61 76 65 20    ines which have 
005960:  62 65 65 6E 20 6D 6F 76 65 64 20 74 6F 20 61 20    been moved to a 
005970:  6E 65 77 20 70 6F 73 69 74 69 6F 6E 20 61 72 65    new position are
005980:  20 70 72 69 6E 74 65 64 20 69 6E 20 74 68 65 69     printed in thei
005990:  72 20 6E 65 77 0D 0A 70 6F 73 69 74 69 6F 6E 20    r new..position 
0059A0:  73 75 72 72 6F 75 6E 64 65 64 20 62 79 20 6C 69    surrounded by li
0059B0:  6E 65 73 20 6F 66 20 61 73 74 65 72 69 73 6B 73    nes of asterisks
0059C0:  2E 20 20 59 6F 75 20 6D 61 79 20 6E 65 65 64 20    .  You may need 
0059D0:  74 6F 20 70 61 74 63 68 20 74 68 65 20 70 72 69    to patch the pri
0059E0:  6E 74 65 72 0D 0A 63 6F 6E 74 72 6F 6C 20 63 6F    nter..control co
0059F0:  64 65 73 20 66 6F 72 20 79 6F 75 72 20 70 72 69    des for your pri
005A00:  09 43 41 54 20 20 62 3A 2A 2E 64 65 66 2F 4E 50    .CAT  b:*.def/NP
005A10:  0D 0A 0D 0A 55 73 65 20 70 61 67 65 20 6D 6F 64    ....Use page mod
005A20:  65 20 61 6E 64 20 6E 75 6D 62 65 72 20 74 68 65    e and number the
005A30:  20 6C 69 6E 65 73 2E 0D 0A 0D 0A 09 43 41 54 20     lines......CAT 
005A40:  20 62 3A 2A 2E 64 65 66 2F 50 31 36 57 36 34 4E     b:*.def/P16W64N
005A50:  0D 0A 0D 0A 55 73 65 20 70 61 67 65 20 6D 6F 64    ....Use page mod
005A60:  65 20 61 6E 64 20 73 6F 66 74 77 61 72 65 20 77    e and software w
005A70:  72 61 70 20 77 69 74 68 20 70 61 67 65 6C 65 6E    rap with pagelen
005A80:  67 74 68 20 31 36 20 61 6E 64 20 77 69 64 74 68    gth 16 and width
005A90:  20 36 34 2E 0D 0A 0D 0A 09 09 43 41 54 20 43 6F     64.......CAT Co
005AA0:  6D 6D 61 6E 64 73 0D 0A 0D 0A 41 74 20 74 68 65    mmands....At the
005AB0:  20 65 6E 64 20 6F 66 20 61 20 70 61 67 65 20 6F     end of a page o
005AC0:  66 20 6F 75 74 70 75 74 20 69 6E 20 70 61 67 65    f output in page
005AD0:  20 6D 6F 64 65 2C 20 43 61 74 20 77 69 6C 6C 20     mode, Cat will 
005AE0:  73 74 6F 70 20 61 6E 64 20 61 73 6B 20 66 6F 72    stop and ask for
005AF0:  20 61 0D 0A 63 6F 6D 6D 61 6E 64 2E 20 20 59 6F     a..command.  Yo
005B00:  75 20 6D 61 79 20 74 68 65 6E 20 65 6E 74 65 72    u may then enter
005B10:  20 61 6E 79 20 6F 66 20 74 68 65 20 63 6F 6D 6D     any of the comm
005B20:  61 6E 64 73 20 64 65 73 63 72 69 62 65 64 20 62    ands described b
005B30:  65 6C 6F 77 2E 0D 0A 49 6E 20 66 61 63 74 2C 20    elow...In fact, 
005B40:  79 6F 75 20 63 61 6E 20 65 6E 74 65 72 20 61 20    you can enter a 
005B50:  63 6F 6D 6D 61 6E 64 20 63 68 61 72 61 63 74 65    command characte
005B60:  72 20 61 74 20 61 6E 79 20 74 69 6D 65 2E 20 20    r at any time.  
005B70:  57 68 65 6E 20 43 61 74 20 64 65 74 65 72 6D 69    When Cat determi
005B80:  6E 65 73 0D 0A 74 68 61 74 20 61 20 63 68 61 72    nes..that a char
005B90:  61 63 74 65 72 20 68 61 73 20 62 65 65 6E 20 74    acter has been t
005BA0:  79 70 65 64 2C 20 69 74 20 77 69 6C 6C 20 62 72    yped, it will br
005BB0:  69 6E 67 20 75 70 20 74 68 65 20 27 43 6F 6D 6D    ing up the 'Comm
005BC0:  61 6E 64 20 20 3A 27 20 70 72 6F 6D 70 74 2C 0D    and  :' prompt,.
005BD0:  0A 64 69 73 70 6C 61 79 20 74 68 65 20 63 68 61    .display the cha
005BE0:  72 61 63 74 65 72 20 79 6F 75 20 74 79 70 65 64    racter you typed
005BF0:  2C 20 61 6E 64 20 67 6F 20 69 6E 74 6F 20 70 61    , and go into pa
005C00:  6E 74 65 72 2E 20 20 54 68 65 73 65 20 61 72 65    nter.  These are
005C10:  20 76 65 72 79 20 6E 65 61 72 20 74 68 65 20 62     very near the b
005C20:  65 67 69 6E 6E 69 6E 67 20 6F 66 20 74 68 65 0D    eginning of the.
005C30:  0A 70 72 6F 67 72 61 6D 20 28 73 65 65 20 74 68    .program (see th
005C40:  65 20 2E 4D 4F 44 20 66 69 6C 65 29 2E 20 20 45    e .MOD file).  E
005C50:  61 63 68 20 63 6F 6E 74 72 6F 6C 20 63 6F 64 65    ach control code
005C60:  20 63 61 6E 20 62 65 20 75 70 20 74 6F 20 38 20     can be up to 8 
005C70:  63 68 61 72 61 63 74 65 72 73 20 6C 6F 6E 67 0D    characters long.
005C80:  0A 61 6E 64 20 69 73 20 74 65 72 6D 69 6E 61 74    .and is terminat
005C90:  65 64 20 62 79 20 61 20 76 61 6C 75 65 20 6F 66    ed by a value of
005CA0:  20 30 20 69 66 20 6C 65 73 73 20 74 68 61 6E 20     0 if less than 
005CB0:  63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 72    characters are r
005CC0:  65 71 75 69 72 65 64 2E 0D 0A 4E 61 74 75 72 61    equired...Natura
005CD0:  6C 6C 79 2C 20 79 6F 75 20 6D 61 79 20 61 6C 73    lly, you may als
005CE0:  6F 20 63 68 61 6E 67 65 20 74 68 65 20 2E 43 4F    o change the .CO
005CF0:  4D 20 66 69 6C 65 2E 0D 0D 0A 54 68 65 20 63 6F    M file....The co
005D00:  6E 74 72 6F 6C 20 63 68 61 72 61 63 74 65 72 73    ntrol characters
005D10:  20 69 6E 20 74 68 65 20 73 75 70 70 6C 69 65 64     in the supplied
005D20:  20 70 72 6F 67 72 61 6D 20 61 72 65 20 73 65 74     program are set
005D30:  20 66 6F 72 20 61 20 53 54 41 52 20 44 50 53 35     for a STAR DPS5
005D40:  31 30 2C 0D 0A 77 68 69 63 68 20 69 73 20 73 75    10,..which is su
005D50:  70 70 6F 73 65 64 20 74 6F 20 62 65 20 45 70 73    pposed to be Eps
005D60:  6F 6E 20 63 6F 6D 70 61 74 69 62 6C 65 2C 20 73    on compatible, s
005D70:  6F 20 74 68 65 20 70 72 6F 67 72 61 6D 20 6D 61    o the program ma
005D80:  79 20 77 65 6C 6C 20 72 75 6E 20 27 61 73 20 69    y well run 'as i
005D90:  73 27 0D 0A 6F 6E 20 45 70 73 6F 6E 73 20 61 6E    s'..on Epsons an
005DA0:  64 20 45 70 73 6F 6E 20 63 6C 6F 6E 65 73 2E 0D    d Epson clones..
005DB0:  0A 0D 0A 48 6F 77 20 74 68 65 20 70 72 6F 67 72    ...How the progr
005DC0:  61 6D 20 77 6F 72 6B 73 0D 0A 3D 3D 3D 3D 3D 3D    am works..======
005DD0:  3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 0D    ===============.
005DE0:  0A 0D 0A 46 6F 72 20 65 61 63 68 20 6C 69 6E 65    ...For each line
005DF0:  2C 20 61 20 68 61 73 68 20 74 6F 74 61 6C 20 69    , a hash total i
005E00:  67 65 20 6D 6F 64 65 2E 20 20 4D 75 6C 74 69 70    ge mode.  Multip
005E10:  6C 65 20 63 6F 6D 6D 61 6E 64 73 20 6D 61 79 0D    le commands may.
005E20:  0A 62 65 20 70 6C 61 63 65 64 20 6F 6E 20 61 20    .be placed on a 
005E30:  6C 69 6E 65 2E 20 20 54 68 65 20 63 6F 6D 6D 61    line.  The comma
005E40:  6E 64 73 20 61 72 65 3A 0D 0A 3F 20 20 20 20 20    nds are:..?     
005E50:  20 20 20 20 20 20 20 20 20 44 69 73 70 6C 61 79             Display
005E60:  20 73 6F 6D 65 20 68 65 6C 70 20 69 6E 66 6F 72     some help infor
005E70:  6D 61 74 69 6F 6E 2E 0D 0A 6E 75 6D 62 65 72 20    mation...number 
005E80:  20 20 20 20 20 20 20 20 52 65 73 74 61 72 74 20            Restart 
005E90:  6C 69 73 74 69 6E 67 20 66 72 6F 6D 20 67 69 76    listing from giv
005EA0:  65 6E 20 6C 69 6E 65 20 6E 75 6D 62 65 72 2E 0D    en line number..
005EB0:  0A 2B 20 6F 72 20 2D 20 6E 75 6D 62 65 72 20 20    .+ or - number  
005EC0:  41 64 76 61 6E 63 65 20 28 6F 72 20 72 65 74 69    Advance (or reti
005ED0:  72 65 29 20 62 79 20 74 68 65 20 67 69 76 65 6E    re) by the given
005EE0:  20 6E 75 6D 62 65 72 20 6F 66 20 6C 69 6E 65 73     number of lines
005EF0:  2E 0D 0A 2F 73 74 72 69 6E 67 2F 20 20 20 20 20    .../string/     
005F00:  20 20 52 65 73 74 61 72 74 20 6C 69 73 74 69 6E      Restart listin
005F10:  67 20 66 72 6F 6D 20 6E 65 78 74 20 6F 63 63 75    g from next occu
005F20:  72 65 6E 63 65 20 6F 66 20 73 74 72 69 6E 67 2E    rence of string.
005F30:  20 54 68 65 20 64 65 6C 69 6D 69 74 65 72 73 0D     The delimiters.
005F40:  0A 09 63 61 6E 20 62 65 20 61 6E 79 20 70 72 69    ..can be any pri
005F50:  6E 74 69 6E 67 20 6E 6F 6E 2D 61 6C 70 68 61 6E    nting non-alphan
005F60:  75 6D 65 72 69 63 20 63 68 61 72 61 63 74 65 72    umeric character
005F70:  2E 0D 0A 0D 0A 41 20 6E 75 6D 62 65 72 20 61 6E    .....A number an
005F80:  64 20 61 20 73 65 61 72 63 68 20 73 74 72 69 6E    d a search strin
005F90:  67 20 63 61 6E 20 62 65 20 63 6F 6D 62 69 6E 65    g can be combine
005FA0:  64 20 74 6F 20 73 65 61 72 63 68 20 66 72 6F 6D    d to search from
005FB0:  20 61 0D 0A 67 69 76 65 6E 20 6C 69 6E 65 20 6E     a..given line n
005FC0:  75 6D 62 65 72 2E 20 20 49 66 20 6E 6F 20 73 74    umber.  If no st
005FD0:  72 69 6E 67 20 69 73 20 65 6E 74 65 72 65 64 20    ring is entered 
005FE0:  28 22 2F 2F 22 29 2C 20 74 68 65 0D 0A 70 72 65    ("//"), the..pre
005FF0:  76 69 6F 75 73 6C 79 20 65 6E 74 65 72 65 64 20    viously entered 
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:  73 20 63 61 6C 63 75 6C 61 74 65 64 2E 20 20 54    s calculated.  T
006110:  68 65 6E 20 74 68 65 20 75 6E 69 71 75 65 20 6C    hen the unique l
006120:  69 6E 65 73 20 69 6E 20 65 61 63 68 20 66 69 6C    ines in each fil
006130:  65 0D 0A 61 72 65 20 69 64 65 6E 74 69 66 69 65    e..are identifie
006140:  64 2E 20 20 57 68 65 6E 20 61 20 75 6E 69 71 75    d.  When a uniqu
006150:  65 20 6C 69 6E 65 20 6D 61 74 63 68 65 73 20 61    e line matches a
006160:  20 75 6E 69 71 75 65 20 6C 69 6E 65 20 69 6E 20     unique line in 
006170:  74 68 65 20 73 65 63 6F 6E 64 20 66 69 6C 65 2C    the second file,
006180:  0D 0A 74 68 65 20 74 77 6F 20 6C 69 6E 65 73 20    ..the two lines 
006190:  61 72 65 20 63 72 6F 73 73 2D 6C 69 6E 6B 65 64    are cross-linked
0061A0:  2E 0D 0A 0D 0A 4E 65 78 74 2C 20 6C 69 6E 65 73    .....Next, lines
0061B0:  20 61 64 6A 61 63 65 6E 74 20 74 6F 20 63 72 6F     adjacent to cro
0061C0:  73 73 2D 6C 69 6E 6B 65 64 20 6C 69 6E 65 73 20    ss-linked lines 
0061D0:  61 72 65 20 63 6F 6D 70 61 72 65 64 20 61 6E 64    are compared and
0061E0:  2C 20 69 66 20 69 64 65 6E 74 69 63 61 6C 2C 0D    , if identical,.
0061F0:  0A 74 68 65 79 20 61 72 65 20 6C 69 6E 6B 65 64    .they are linked
006200:  2E 20 20 54 68 69 73 20 67 72 6F 77 73 20 74 68    .  This grows th
006210:  65 20 61 72 65 61 20 6F 66 20 6C 69 6E 6B 69 6E    e area of linkin
006220:  67 20 6F 75 74 77 61 72 64 73 20 66 72 6F 6D 20    g outwards from 
006230:  70 61 69 72 73 20 6F 66 20 0D 0A 6D 61 74 63 68    pairs of ..match
006240:  69 6E 67 20 75 6E 69 71 75 65 20 6C 69 6E 65 73    ing unique lines
006250:  20 28 61 6E 64 20 61 6C 73 6F 20 66 72 6F 6D 20     (and also from 
006260:  74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 61 6E    the beginning an
006270:  64 20 65 6E 64 20 6F 66 20 74 68 65 20 66 69 6C    d end of the fil
006280:  65 73 29 20 75 6E 74 69 6C 0D 0A 61 73 20 6D 61    es) until..as ma
006290:  6E 79 20 6C 69 6E 65 73 20 61 73 20 70 6F 73 73    ny lines as poss
0062A0:  69 62 6C 65 20 68 61 76 65 20 62 65 65 6E 20 63    ible have been c
0062B0:  72 6F 73 73 2D 6C 69 6E 6B 65 64 2E 0D 0A 0D 0A    ross-linked.....
0062C0:  46 69 6E 61 6C 6C 79 20 74 68 65 20 74 65 78 74    Finally the text
0062D0:  20 69 73 20 73 63 61 6E 6E 65 64 20 61 6E 64 20     is scanned and 
0062E0:  70 72 69 6E 74 65 64 20 6F 75 74 2E 20 20 4C 69    printed out.  Li
0062F0:  6E 65 73 20 69 6E 20 74 68 65 20 6E 65 77 20 66    nes in the new f
006300:  20 6D 75 74 75 61 6C 6C 79 20 65 78 63 6C 75 73     mutually exclus
006310:  69 76 65 2E 0D 0A 0D 0A 43 09 49 66 20 66 69 6C    ive.....C.If fil
006320:  65 20 6E 61 6D 65 73 20 6D 61 74 63 68 2C 20 63    e names match, c
006330:  6F 6D 70 61 72 65 20 74 68 65 20 66 69 6C 65 20    ompare the file 
006340:  63 6F 6E 74 65 6E 74 73 20 61 73 20 77 65 6C 6C    contents as well
006350:  2E 0D 0A 45 09 4F 75 74 70 75 74 20 66 69 6C 65    ...E.Output file
006360:  20 6E 61 6D 65 73 20 77 68 69 63 68 20 6D 61 74     names which mat
006370:  63 68 20 74 6F 20 6C 69 73 74 20 66 69 6C 65 2E    ch to list file.
006380:  0D 0A 41 09 4F 75 74 70 75 74 20 66 69 6C 65 20    ..A.Output file 
006390:  6E 61 6D 65 73 20 77 68 69 63 68 20 68 61 76 65    names which have
0063A0:  20 62 65 65 6E 20 61 64 64 65 64 20 74 6F 20 74     been added to t
0063B0:  68 65 20 73 65 63 6F 6E 64 20 6C 69 73 74 2E 0D    he second list..
0063C0:  0A 44 09 4F 75 74 70 75 74 20 66 69 6C 65 20 6E    .D.Output file n
0063D0:  61 6D 65 73 20 77 68 69 63 68 20 68 61 76 65 20    ames which have 
0063E0:  62 65 65 6E 20 64 65 6C 65 74 65 64 20 66 72 6F    been deleted fro
0063F0:  6D 20 74 68 65 20 66 69 72 73 74 20 6C 69 73 74    m the first list
006400:  2E 0D 0A 4D 09 4F 75 74 70 75 74 20 66 69 6C 65    ...M.Output file
006410:  20 6E 61 6D 65 73 20 77 68 69 63 68 20 64 69 66     names which dif
006420:  66 65 72 20 69 6E 20 63 6F 6E 74 65 6E 74 73 2E    fer in contents.
006430:  0D 0A 0D 0A 54 68 65 73 65 20 6F 70 74 69 6F 6E    ....These option
006440:  73 20 6D 61 79 20 62 65 20 63 6F 6D 62 69 6E 65    s may be combine
006450:  64 2E 20 20 45 78 61 6D 70 6C 65 73 3A 0D 0A 0D    d.  Examples:...
006460:  0A 54 6F 20 63 68 65 63 6B 20 74 68 61 74 20 65    .To check that e
006470:  76 65 72 79 20 27 2E 6D 6F 64 27 20 66 69 6C 65    very '.mod' file
006480:  20 68 61 73 20 61 20 27 2E 72 65 6C 27 20 66 69     has a '.rel' fi
006490:  6C 65 3A 0D 0D 0A 09 43 6F 6D 70 64 69 72 20 62    le:....Compdir b
0064A0:  3A 2A 2E 6D 6F 64 20 62 3A 2A 2E 72 65 6C 2F 6E    :*.mod b:*.rel/n
0064B0:  0D 0A 0D 0A 54 6F 20 77 72 69 74 65 20 74 68 65    ....To write the
0064C0:  20 64 65 6C 65 74 65 64 20 6E 61 6D 65 73 20 74     deleted names t
0064D0:  6F 20 61 20 66 69 6C 65 20 73 6F 20 74 68 61 74    o a file so that
0064E0:  20 74 68 65 20 6D 69 73 73 69 6E 67 20 20 27 2E     the missing  '.
0064F0:  72 65 6C 27 0D 0A 66 69 6C 65 73 20 6D 61 79 20    rel'..files may 
006500:  69 6C 65 20 77 68 69 63 68 20 61 72 65 0D 0A 6E    ile which are..n
006510:  6F 74 20 6C 69 6E 6B 65 64 20 74 6F 20 61 6E 79    ot linked to any
006520:  74 68 69 6E 67 20 69 6E 20 74 68 65 20 6F 6C 64    thing in the old
006530:  20 66 69 6C 65 20 61 72 65 20 69 6E 73 65 72 74     file are insert
006540:  69 6F 6E 73 2E 20 20 55 6E 6C 69 6E 6B 65 64 20    ions.  Unlinked 
006550:  6C 69 6E 65 73 20 69 6E 20 74 68 65 0D 0A 6F 6C    lines in the..ol
006560:  64 20 66 69 6C 65 20 61 72 65 20 64 65 6C 65 74    d file are delet
006570:  69 6F 6E 73 2E 20 20 4C 69 6E 65 73 20 69 6E 20    ions.  Lines in 
006580:  74 68 65 20 6E 65 77 20 66 69 6C 65 20 77 68 69    the new file whi
006590:  63 68 20 6C 69 6E 6B 20 74 6F 20 6F 75 74 2D 6F    ch link to out-o
0065A0:  66 2D 6F 72 64 65 72 20 6F 6C 64 0D 0A 66 69 6C    f-order old..fil
0065B0:  65 20 6C 69 6E 65 73 20 61 72 65 20 70 61 72 74    e lines are part
0065C0:  73 20 6F 66 20 61 20 62 6C 6F 63 6B 20 6D 6F 76    s of a block mov
0065D0:  65 2E 0D 0A 0D 0A 46 75 72 74 68 65 72 20 57 6F    e.....Further Wo
0065E0:  72 6B 3A 0D 0A 0D 0A 41 20 6E 75 6D 62 65 72 20    rk:....A number 
0065F0:  6F 66 20 74 68 69 6E 67 73 20 63 61 6E 20 62 65    of things can be
006600:  20 64 6F 6E 65 20 77 69 74 68 20 74 68 69 73 20     done with this 
006610:  70 72 6F 67 72 61 6D 3A 0D 0A 0D 0A 09 31 2F 20    program:.....1/ 
006620:  20 4D 61 6B 65 20 69 74 20 77 6F 72 6B 20 6F 6E     Make it work on
006630:  20 74 68 72 65 65 20 66 69 6C 65 73 2E 0D 0A 4F     three files...O
006640:  66 74 65 6E 2C 20 61 20 6E 65 77 20 76 65 72 73    ften, a new vers
006650:  69 6F 6E 20 6F 66 20 61 20 70 72 6F 67 72 61 6D    ion of a program
006660:  20 69 73 20 63 72 65 61 74 65 64 20 28 73 61 79     is created (say
006670:  2C 20 66 6F 72 20 61 6E 6F 74 68 65 72 20 6D 61    , for another ma
006680:  63 68 69 6E 65 29 20 61 6E 64 0D 0A 74 68 65 6E    chine) and..then
006690:  20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 76 65     the original ve
0066A0:  72 73 69 6F 6E 20 69 73 20 6D 6F 64 69 66 69 65    rsion is modifie
0066B0:  64 2E 20 20 54 68 65 20 70 72 6F 62 6C 65 6D 20    d.  The problem 
0066C0:  69 73 20 74 68 65 6E 20 69 6E 73 65 72 74 69 6E    is then insertin
0066D0:  67 20 74 68 65 0D 0A 6E 65 77 20 63 68 61 6E 67    g the..new chang
0066E0:  65 73 20 74 6F 20 74 68 65 20 6F 72 69 67 69 6E    es to the origin
0066F0:  61 6C 20 66 69 6C 65 20 69 6E 74 6F 20 74 68 65    al file into the
006700:  62 65 20 64 69 73 63 6F 76 65 72 65 64 3A 0D 0A    be discovered:..
006710:  0D 0A 09 43 6F 6D 70 64 69 72 20 62 3A 2A 2E 6D    ...Compdir b:*.m
006720:  6F 64 20 62 3A 2A 2E 72 65 6C 20 62 3A 63 6F 6D    od b:*.rel b:com
006730:  70 73 2E 73 75 62 2F 6E 64 0D 0A 0D 0A 49 66 20    ps.sub/nd....If 
006740:  79 6F 75 20 69 6E 74 65 6E 64 20 74 6F 20 72 65    you intend to re
006750:  67 65 6E 65 72 61 74 65 20 74 68 6F 73 65 20 66    generate those f
006760:  69 6C 65 73 2C 20 65 64 69 74 20 74 68 65 20 66    iles, edit the f
006770:  69 6C 65 20 74 6F 20 61 64 64 20 22 4D 32 20 22    ile to add "M2 "
006780:  20 74 6F 20 74 68 65 0D 0A 73 74 61 72 74 20 6F     to the..start o
006790:  66 20 65 61 63 68 20 6C 69 6E 65 2E 20 20 49 66    f each line.  If
0067A0:  20 79 6F 75 20 61 72 65 20 75 73 69 6E 67 20 74     you are using t
0067B0:  68 65 20 4D 6F 64 75 6C 61 2D 32 20 65 64 69 74    he Modula-2 edit
0067C0:  6F 72 2C 20 64 6F 20 6F 6E 65 20 69 6E 20 6C 65    or, do one in le
0067D0:  61 72 6E 0D 0A 6D 6F 64 65 20 61 6E 64 20 74 68    arn..mode and th
0067E0:  65 6E 20 64 6F 20 74 68 65 20 72 65 73 74 20 77    en do the rest w
0067F0:  69 74 68 20 61 20 72 65 70 65 61 74 65 64 20 65    ith a repeated e
006800:  78 65 63 75 74 69 6F 6E 20 6F 66 20 74 68 65 20    xecution of the 
006810:  64 65 66 69 6E 65 64 20 6D 61 63 72 6F 2E 0D 0A    defined macro...
006820:  0D 0A 54 6F 20 63 72 65 61 74 65 20 61 20 6C 69    ..To create a li
006830:  73 74 20 6F 66 20 61 6C 6C 20 64 65 66 69 6E 69    st of all defini
006840:  74 69 6F 6E 20 61 6E 64 20 69 6D 70 6C 65 6D 65    tion and impleme
006850:  6E 74 61 74 69 6F 6E 20 6D 6F 64 75 6C 65 73 20    ntation modules 
006860:  6F 6E 20 64 69 73 63 20 42 3A 0D 0A 0D 0A 09 43    on disc B:.....C
006870:  6F 6D 70 64 69 72 20 62 3A 2A 2E 6D 6F 64 20 62    ompdir b:*.mod b
006880:  3A 2A 2E 64 65 66 20 74 2E 6C 73 74 2F 61 64 65    :*.def t.lst/ade
006890:  0D 0A 0D 0A 09 48 61 70 70 79 20 4D 6F 64 75 6C    .....Happy Modul
0068A0:  61 74 69 6E 67 21 21 0D 0A 0A 0D 0D 0A 1A 1A 1A    ating!!.........
0068B0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0068C0:  44 46 20 20 20 20 20 20 43 4F 4D 20 00 00 00 00    DF      COM ....
0068D0:  00 00 00 00 00 00 83 43 C2 0C 52 00 06 05 00 00    .......C..R.....
0068E0:  44 49 53 4B 43 4F 4D 50 45 58 45 20 00 00 00 00    DISKCOMPEXE ....
0068F0:  00 00 00 00 00 00 00 60 E7 0C 62 00 E0 0E 00 00    .......`..b.....
006900:  20 6F 74 68 65 72 20 76 65 72 73 69 6F 6E 2C 20     other version, 
006910:  77 68 69 6C 65 20 72 65 74 61 69 6E 69 6E 67 0D    while retaining.
006920:  0A 61 6E 79 20 63 68 61 6E 67 65 73 20 6D 61 64    .any changes mad
006930:  65 20 74 6F 70 72 6F 64 75 63 65 20 74 68 61 74    e toproduce that
006940:  20 76 65 72 73 69 6F 6E 2E 20 20 50 72 6F 62 61     version.  Proba
006950:  62 6C 79 20 66 61 69 72 6C 79 20 64 69 66 66 69    bly fairly diffi
006960:  63 75 6C 74 20 74 6F 20 64 6F 2E 20 0D 0A 09 32    cult to do. ...2
006970:  2F 20 20 20 4D 61 6B 65 20 69 74 20 77 6F 72 6B    /   Make it work
006980:  20 61 63 72 6F 73 73 20 6D 61 63 68 69 6E 65 73     across machines
006990:  2E 0D 0A 53 6F 6D 65 74 69 6D 65 73 2C 20 6F 6E    ...Sometimes, on
0069A0:  65 20 6F 66 20 74 68 65 20 66 69 6C 65 73 20 69    e of the files i
0069B0:  73 20 6F 6E 20 61 6E 6F 74 68 65 72 20 6D 61 63    s on another mac
0069C0:  68 69 6E 65 2E 20 20 49 74 20 77 6F 75 6C 64 20    hine.  It would 
0069D0:  62 65 20 6E 69 63 65 20 74 6F 0D 0A 68 61 76 65    be nice to..have
0069E0:  20 74 68 65 20 6F 6C 64 20 66 69 6C 65 20 6F 6E     the old file on
0069F0:  20 74 68 65 20 72 65 6D 6F 74 65 20 6D 61 63 68     the remote mach
006A00:  69 6E 65 20 61 6E 64 20 6F 6E 6C 79 20 74 72 61    ine and only tra
006A10:  6E 73 66 65 72 20 74 68 65 20 63 68 65 63 6B 73    nsfer the checks
006A20:  75 6D 73 20 61 6E 64 0D 0A 74 68 65 20 6C 69 6E    ums and..the lin
006A30:  65 73 20 77 68 69 63 68 20 68 61 76 65 20 62 65    es which have be
006A40:  65 6E 20 64 65 6C 65 74 65 64 20 61 63 72 6F 73    en deleted acros
006A50:  73 20 74 68 65 20 6C 69 6E 6B 2E 20 20 46 61 69    s the link.  Fai
006A60:  72 6C 79 20 65 61 73 79 2C 20 62 75 74 0D 0A 72    rly easy, but..r
006A70:  65 6C 69 61 62 69 6C 69 74 79 20 6F 66 20 74 68    eliability of th
006A80:  65 20 6C 69 6E 6B 20 77 69 6C 6C 20 63 61 75 73    e link will caus
006A90:  65 20 70 72 6F 62 6C 65 6D 73 2E 0D 0A 09 33 2F    e problems....3/
006AA0:  20 20 20 57 72 69 74 65 20 61 20 70 61 69 72 20       Write a pair 
006AB0:  6F 66 20 65 78 74 72 61 63 74 2F 6D 65 72 67 65    of extract/merge
006AC0:  20 70 72 6F 67 72 61 6D 73 2E 0D 0A 43 6F 6E 74     programs...Cont
006AD0:  69 6E 75 69 6E 67 20 6F 6E 20 66 72 6F 6D 20 70    inuing on from p
006AE0:  6F 69 6E 74 20 32 2C 20 77 72 69 74 65 20 61 20    oint 2, write a 
006AF0:  70 72 6F 67 72 61 6D 20 74 6F 20 63 72 65 61 74    program to creat
006B00:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
006B10:  45 20 44 6F 4D 65 6E 75 3B 0D 0A 0D 0A 28 2A 09    E DoMenu;....(*.
006B20:  4D 65 6E 75 20 70 72 6F 63 65 73 73 6F 72 20 66    Menu processor f
006B30:  6F 72 20 65 64 69 74 6F 72 2A 29 0D 0A 46 52 4F    or editor*)..FRO
006B40:  4D 20 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46    M Files IMPORT F
006B50:  69 6C 65 4E 61 6D 65 2C 46 49 4C 45 2C 43 6C 6F    ileName,FILE,Clo
006B60:  73 65 2C 43 72 65 61 74 65 3B 0D 0A 50 52 4F 43    se,Create;..PROC
006B70:  45 44 55 52 45 20 52 65 64 69 73 70 6C 61 79 3B    EDURE Redisplay;
006B80:  0D 0A 50 52 4F 43 45 44 55 52 45 20 44 6F 4D 65    ..PROCEDURE DoMe
006B90:  6E 75 4F 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45    nuOp;..PROCEDURE
006BA0:  20 4F 70 65 6E 28 66 6E 3A 46 69 6C 65 4E 61 6D     Open(fn:FileNam
006BB0:  65 3B 50 6F 73 3A 43 41 52 44 49 4E 41 4C 29 3B    e;Pos:CARDINAL);
006BC0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 53    ..PROCEDURE GetS
006BD0:  74 72 69 6E 67 28 56 41 52 20 73 3A 41 52 52 41    tring(VAR s:ARRA
006BE0:  59 20 4F 46 20 43 48 41 52 3B 56 41 52 20 6C 65    Y OF CHAR;VAR le
006BF0:  6E 3A 43 41 52 44 49 4E 41 4C 3B 70 72 6F 6D 70    n:CARDINAL;promp
006C00:  74 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 29    t:ARRAY OF CHAR)
006C10:  3B 0D 0A 45 4E 44 20 44 6F 4D 65 6E 75 2E 0D 0A    ;..END DoMenu...
006C20:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
006C30:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
006C40:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
006C50:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
006C60:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
006C70:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
006C80:  65 64 20 70 72 69 6D 61 72 69 6C 79 20 66 6F 72    ed primarily for
006C90:  20 75 73 65 20 6F 6E 0D 0A 09 09 52 43 50 4D 73     use on....RCPMs
006CA0:  2E 20 20 49 74 20 63 61 6E 20 64 6F 20 74 61 62    .  It can do tab
006CB0:  20 65 78 70 61 6E 73 69 6F 6E 2C 20 6C 69 6E 65     expansion, line
006CC0:  20 6E 75 6D 62 65 72 69 6E 67 2C 20 73 74 72 69     numbering, stri
006CD0:  6E 67 20 73 65 61 72 63 68 2C 0D 09 09 70 6F 73    ng search,...pos
006CE0:  69 74 69 6F 6E 20 62 79 20 6C 69 6E 65 20 6E 75    ition by line nu
006CF0:  6D 62 65 72 20 61 6E 64 20 77 69 6C 64 20 63 61    mber and wild ca
006D00:  65 20 61 20 64 69 66 66 65 72 65 6E 63 65 73 20    e a differences 
006D10:  66 69 6C 65 0D 0A 61 6E 64 20 61 6E 6F 74 68 65    file..and anothe
006D20:  72 20 74 6F 20 6D 65 72 67 65 20 74 68 65 20 64    r to merge the d
006D30:  69 66 66 65 72 65 6E 63 65 73 20 6F 6E 20 61 20    ifferences on a 
006D40:  72 65 6D 6F 74 65 20 6D 61 63 68 69 6E 65 2E 20    remote machine. 
006D50:  20 54 68 69 73 20 73 68 6F 75 6C 64 20 62 65 0D     This should be.
006D60:  0A 71 75 69 74 65 20 65 61 73 79 2C 20 67 69 76    .quite easy, giv
006D70:  65 6E 20 32 2E 0D 0A 0D 0A 41 6C 74 6F 67 65 74    en 2.....Altoget
006D80:  68 65 72 2C 20 74 68 65 73 65 20 74 68 72 65 65    her, these three
006D90:  20 65 78 74 65 6E 73 69 6F 6E 73 20 77 6F 75 6C     extensions woul
006DA0:  64 20 62 65 20 61 62 6F 75 74 20 72 69 67 68 74    d be about right
006DB0:  20 66 6F 72 20 61 20 74 65 72 6D 20 70 72 6F 6A     for a term proj
006DC0:  65 63 74 20 66 6F 72 0D 0A 6F 6E 65 20 73 74 75    ect for..one stu
006DD0:  64 65 6E 74 2E 20 20 4F 66 20 63 6F 75 72 73 65    dent.  Of course
006DE0:  2C 20 69 66 20 61 6E 79 6F 6E 65 20 6F 75 74 20    , if anyone out 
006DF0:  74 68 65 72 65 20 77 61 6E 74 73 20 74 6F 20 64    there wants to d
006E00:  6F 20 74 68 69 73 2C 20 77 65 27 6C 6C 20 68 61    o this, we'll ha
006E10:  70 70 69 6C 79 0D 0A 67 69 76 65 20 61 75 74 68    ppily..give auth
006E20:  6F 72 27 73 20 63 72 65 64 69 74 2E 0D 0A 0D 0A    or's credit.....
006E30:  09 43 6F 6D 70 44 69 72 20 2D 20 43 6F 6D 70 61    .CompDir - Compa
006E40:  72 65 20 74 77 6F 20 64 69 72 65 63 74 6F 72 69    re two directori
006E50:  65 73 0D 0A 09 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D    es...===========
006E60:  3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D    ================
006E70:  3D 3D 3D 3D 3D 3D 0D 0A 0D 0A 43 6F 6D 70 44 69    ======....CompDi
006E80:  72 20 63 6F 6D 70 61 72 65 73 20 64 69 73 63 20    r compares disc 
006E90:  64 69 72 65 63 74 6F 72 69 65 73 2E 20 20 54 68    directories.  Th
006EA0:  65 20 63 6F 6D 70 61 72 69 73 6F 6E 20 6D 61 79    e comparison may
006EB0:  20 75 73 65 20 74 68 65 20 66 75 6C 6C 20 66 69     use the full fi
006EC0:  6C 65 0D 0A 6E 61 6D 65 2C 20 6A 75 73 74 20 74    le..name, just t
006ED0:  68 65 20 62 61 73 65 20 6E 61 6D 65 2C 20 6F 72    he base name, or
006EE0:  20 28 6E 6F 74 20 76 65 72 79 20 75 73 65 66 75     (not very usefu
006EF0:  6C 29 20 6A 75 73 74 20 74 68 65 20 65 78 74 65    l) just the exte
006F00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006F10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006F20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006F30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006F40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006F50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006F60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006F70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006F80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006F90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006FA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006FB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006FC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006FD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006FE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
006FF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0070A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0070B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0070C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0070D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0070E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0070F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
007100:  6E 73 69 6F 6E 2E 0D 0A 4F 70 74 69 6F 6E 61 6C    nsion...Optional
007110:  6C 79 2C 20 79 6F 75 20 6D 61 79 20 63 72 65 61    ly, you may crea
007120:  74 65 20 61 20 66 69 6C 65 20 63 6F 6E 74 61 69    te a file contai
007130:  6E 69 6E 67 20 61 20 6C 69 73 74 20 6F 66 20 74    ning a list of t
007140:  68 65 20 66 69 6C 65 20 6E 61 6D 65 73 20 61 64    he file names ad
007150:  64 65 64 2C 0D 0A 64 65 6C 65 74 65 64 20 6F 72    ded,..deleted or
007160:  20 6D 61 74 63 68 69 6E 67 2E 0D 0A 0D 0A 54 68     matching.....Th
007170:  65 20 63 6F 6D 6D 61 6E 64 20 74 6F 20 63 61 6C    e command to cal
007180:  6C 20 74 68 65 20 70 72 6F 67 72 61 6D 20 74 61    l the program ta
007190:  6B 65 73 20 74 68 65 20 66 6F 72 6D 3A 0D 0A 0D    kes the form:...
0071A0:  0A 09 43 4F 4D 50 44 49 52 20 77 69 6C 64 20 63    ..COMPDIR wild c
0071B0:  61 72 64 2C 20 77 69 6C 64 20 63 61 72 64 20 5B    ard, wild card [
0071C0:  2C 20 6C 69 73 74 20 66 69 6C 65 5D 20 5B 2F 6F    , list file] [/o
0071D0:  70 74 69 6F 6E 73 5D 0D 0A 0D 0A 57 68 65 72 65    ptions]....Where
0071E0:  20 65 61 63 68 20 77 69 6C 64 20 63 61 72 64 20     each wild card 
0071F0:  70 72 6F 64 75 63 65 73 20 6F 6E 65 20 6F 66 20    produces one of 
007200:  74 68 65 20 6C 69 73 74 73 20 74 6F 20 63 6F 6D    the lists to com
007210:  70 61 72 65 2E 0D 0A 0D 0A 54 6F 20 63 6F 6D 70    pare.....To comp
007220:  61 72 65 20 74 77 6F 20 64 69 73 63 73 3A 0D 0A    are two discs:..
007230:  0D 0A 09 43 4F 4D 50 44 49 52 20 61 3A 2A 2E 2A    ...COMPDIR a:*.*
007240:  20 62 3A 2A 2E 2A 0D 0A 0D 0A 4F 70 74 69 6F 6E     b:*.*....Option
007250:  73 20 61 72 65 20 61 6E 79 20 6F 66 20 74 68 65    s are any of the
007260:  20 66 6F 6C 6C 6F 77 69 6E 67 3A 0D 0A 0D 0A 54     following:....T
007270:  09 43 6F 6D 70 61 72 65 20 6F 6E 6C 79 20 66 69    .Compare only fi
007280:  6C 65 20 65 78 74 65 6E 73 69 6F 6E 20 28 62 79    le extension (by
007290:  20 64 65 66 61 75 6C 74 2C 20 74 68 65 20 77 68     default, the wh
0072A0:  6F 6C 65 20 6E 61 6D 65 20 69 73 20 63 6F 6D 70    ole name is comp
0072B0:  61 72 65 64 29 2E 0D 0A 4E 09 63 6F 6D 70 61 72    ared)...N.compar
0072C0:  65 20 6F 6E 6C 79 20 66 69 6C 65 20 6E 61 6D 65    e only file name
0072D0:  2D 2D 62 61 73 65 20 6E 61 6D 65 2C 20 6D 69 6E    --base name, min
0072E0:  75 73 20 74 68 65 20 65 78 74 65 6E 73 69 6F 6E    us the extension
0072F0:  2E 0D 0A 0D 0A 54 20 61 6E 64 20 4E 20 61 72 65    .....T and N are
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:  28 2A 09 50 65 72 66 6F 72 6D 20 6D 65 6E 75 20    (*.Perform menu 
007410:  6F 70 65 72 61 74 69 6F 6E 73 0D 0A 0D 0A 09 43    operations.....C
007420:  6F 70 79 72 69 67 68 74 2C 20 20 44 61 76 65 20    opyright,  Dave 
007430:  4D 6F 6F 72 65 20 46 54 4C 20 4D 6F 64 75 6C 61    Moore FTL Modula
007440:  2D 32 20 31 39 38 36 0D 0A 0D 0A 09 09 32 36 20    -2 1986......26 
007450:  4A 75 6E 65 20 38 36 20 20 44 20 4D 6F 6F 72 65    June 86  D Moore
007460:  20 20 50 75 74 20 42 61 63 6B 53 70 61 63 65 20      Put BackSpace 
007470:  69 6E 73 69 64 65 20 49 46 20 74 6F 20 69 6D 70    inside IF to imp
007480:  72 6F 76 65 0D 0A 09 09 09 09 09 62 61 63 6B 73    rove.......backs
007490:  70 61 63 69 6E 67 20 70 65 72 66 6F 72 6D 61 6E    pacing performan
0074A0:  63 65 20 6F 66 20 47 65 74 53 74 72 69 6E 67 0D    ce of GetString.
0074B0:  0A 0D 0A 2A 29 0D 0A 49 4D 50 4C 45 4D 45 4E 54    ...*)..IMPLEMENT
0074C0:  41 54 49 4F 4E 20 4D 4F 44 55 4C 45 20 44 6F 4D    ATION MODULE DoM
0074D0:  65 6E 75 3B 0D 0A 0D 0A 28 2A 09 6D 65 6E 75 20    enu;....(*.menu 
0074E0:  70 72 6F 63 65 73 73 6F 72 20 66 6F 72 20 65 64    processor for ed
0074F0:  69 74 6F 72 0D 0A 0D 0A 09 63 6F 6E 74 61 69 6E    itor.....contain
007500:  73 20 61 6C 6C 20 63 6F 6D 6D 61 6E 64 73 20 77    s all commands w
007510:  68 69 63 68 20 61 72 65 20 70 65 72 66 6F 72 6D    hich are perform
007520:  65 64 20 66 72 6F 6D 20 61 20 6D 65 6E 75 2A 29    ed from a menu*)
007530:  0D 0A 46 52 4F 4D 09 54 65 72 6D 69 6E 61 6C 20    ..FROM.Terminal 
007540:  49 4D 50 4F 52 54 20 57 72 69 74 65 2C 57 72 69    IMPORT Write,Wri
007550:  74 65 53 74 72 69 6E 67 2C 52 65 61 64 53 74 72    teString,ReadStr
007560:  69 6E 67 2C 52 65 61 64 42 75 66 66 65 72 2C 57    ing,ReadBuffer,W
007570:  72 69 74 65 4C 6E 2C 52 65 61 64 2C 0D 0A 09 42    riteLn,Read,...B
007580:  75 73 79 52 65 61 64 2C 43 6C 65 61 72 43 68 61    usyRead,ClearCha
007590:  72 42 75 66 66 65 72 3B 0D 0A 46 52 4F 4D 20 09    rBuffer;..FROM .
0075A0:  4D 61 6B 65 45 64 69 74 73 20 49 4D 50 4F 52 54    MakeEdits IMPORT
0075B0:  20 4F 70 65 6E 46 69 6C 65 2C 43 6C 6F 73 65 46     OpenFile,CloseF
0075C0:  69 6C 65 2C 41 62 61 6E 64 6F 6E 46 69 6C 65 2C    ile,AbandonFile,
0075D0:  43 61 6C 6C 57 69 74 68 46 69 6C 65 2C 46 69 6C    CallWithFile,Fil
0075E0:  65 54 79 70 65 2C 4C 61 62 65 6C 4F 70 3B 0D 0A    eType,LabelOp;..
0075F0:  46 52 4F 4D 09 4D 65 6E 75 20 49 4D 50 4F 52 54    FROM.Menu IMPORT
007600:  65 73 5B 46 69 6C 65 73 4F 70 65 6E 65 64 5D 2C    es[FilesOpened],
007610:  54 52 55 45 2C 43 48 52 28 57 69 6E 64 6F 77 73    TRUE,CHR(Windows
007620:  29 29 3B 0D 0A 09 09 53 65 74 4C 65 66 74 4D 61    ));....SetLeftMa
007630:  72 67 28 46 69 6C 65 73 5B 46 69 6C 65 73 4F 70    rg(Files[FilesOp
007640:  65 6E 65 64 5D 2C 57 69 6E 64 6F 77 73 2C 0D 0A    ened],Windows,..
007650:  09 09 09 63 75 72 78 5B 57 69 6E 64 6F 77 73 5D    ...curx[Windows]
007660:  2C 63 75 72 79 5B 57 69 6E 64 6F 77 73 5D 29 3B    ,cury[Windows]);
007670:  0D 0A 09 09 55 70 64 61 74 65 64 5B 46 69 6C 65    ....Updated[File
007680:  73 4F 70 65 6E 65 64 5D 3A 3D 46 41 4C 53 45 3B    sOpened]:=FALSE;
007690:  0D 0A 09 09 43 68 61 6E 67 65 57 69 6E 64 6F 77    ....ChangeWindow
0076A0:  28 57 69 6E 64 6F 77 73 29 3B 0D 0A 09 09 45 4E    (Windows);....EN
0076B0:  44 3B 28 2A 72 65 70 6C 79 3D 76 61 72 69 6F 75    D;(*reply=variou
0076C0:  73 20 76 61 6C 75 65 73 2A 29 0D 0A 09 45 4E 44    s values*)...END
0076D0:  3B 28 2A 66 6E 5B 31 5D 3C 3E 27 20 27 2A 29 0D    ;(*fn[1]<>' '*).
0076E0:  0A 20 20 20 20 52 65 64 69 73 70 6C 61 79 3B 0D    .    Redisplay;.
0076F0:  0A 20 20 20 20 45 4E 44 20 4F 70 65 6E 3B 0D 0A    .    END Open;..
007700:  09 09 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 53    .....PROCEDURE S
007710:  65 74 42 6F 78 50 6F 73 28 56 41 52 20 79 3A 43    etBoxPos(VAR y:C
007720:  41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E    ARDINAL);..BEGIN
007730:  0D 0A 09 49 46 20 57 69 6E 64 6F 77 73 3D 32 20    ...IF Windows=2 
007740:  54 48 45 4E 20 79 3A 3D 31 33 2A 28 43 75 72 72    THEN y:=13*(Curr
007750:  65 6E 74 57 69 6E 64 6F 77 2D 31 29 0D 0A 09 45    entWindow-1)...E
007760:  4C 53 49 46 20 43 75 72 72 65 6E 74 57 69 6E 64    LSIF CurrentWind
007770:  6F 77 3D 30 20 54 48 45 4E 20 79 3A 3D 30 0D 0A    ow=0 THEN y:=0..
007780:  09 45 4C 53 45 09 79 3A 3D 38 2A 28 43 75 72 72    .ELSE.y:=8*(Curr
007790:  65 6E 74 57 69 6E 64 6F 77 2D 31 29 20 45 4E 44    entWindow-1) END
0077A0:  3B 0D 0A 09 45 4E 44 20 53 65 74 42 6F 78 50 6F    ;...END SetBoxPo
0077B0:  73 3B 0D 0A 56 41 52 09 78 2C 79 2C 63 68 61 72    s;..VAR.x,y,char
0077C0:  73 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 50 52 4F    s:CARDINAL;..PRO
0077D0:  43 45 44 55 52 45 20 42 61 63 6B 53 70 61 63 65    CEDURE BackSpace
0077E0:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 72 69 74 65    ;..BEGIN...Write
0077F0:  28 30 38 78 29 3B 0D 0A 09 57 72 69 74 65 28 27    (08x);...Write('
007800:  20 47 65 74 46 72 6F 6D 4D 65 6E 75 2C 4D 65 6E     GetFromMenu,Men
007810:  75 54 65 78 74 3B 0D 0A 46 52 4F 4D 20 09 45 64    uText;..FROM .Ed
007820:  69 74 43 6F 6E 74 72 6F 6C 20 49 4D 50 4F 52 54    itControl IMPORT
007830:  20 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 2C 43     CurrentWindow,C
007840:  75 72 72 65 6E 74 46 69 6C 65 2C 46 69 6C 65 73    urrentFile,Files
007850:  4F 70 65 6E 65 64 2C 63 75 72 78 2C 63 75 72 79    Opened,curx,cury
007860:  2C 46 69 6C 65 73 2C 0D 0A 09 09 09 45 6C 69 64    ,Files,.....Elid
007870:  65 57 69 6E 64 6F 77 2C 43 68 61 6E 67 65 57 69    eWindow,ChangeWi
007880:  6E 64 6F 77 2C 52 65 73 65 74 53 63 72 65 65 6E    ndow,ResetScreen
007890:  50 6F 73 2C 55 70 64 61 74 65 64 2C 4C 65 66 74    Pos,Updated,Left
0078A0:  4D 61 72 67 69 6E 2C 0D 0A 09 09 09 4D 61 6B 65    Margin,.....Make
0078B0:  57 69 6E 64 6F 77 2C 57 69 6E 64 6F 77 46 69 6C    Window,WindowFil
0078C0:  65 2C 46 69 6C 65 50 6F 73 69 74 69 6F 6E 3B 0D    e,FilePosition;.
0078D0:  0A 46 52 4F 4D 09 45 64 69 74 44 69 73 70 6C 61    .FROM.EditDispla
0078E0:  79 20 49 4D 50 4F 52 54 20 45 72 72 6F 72 4D 65    y IMPORT ErrorMe
0078F0:  73 73 61 67 65 2C 53 65 74 57 69 6E 64 6F 77 73    ssage,SetWindows
007900:  2C 44 69 73 70 6C 61 79 46 69 6C 65 2C 53 65 74    ,DisplayFile,Set
007910:  4C 65 66 74 4D 61 72 67 2C 57 69 6E 64 6F 77 73    LeftMarg,Windows
007920:  3B 0D 0A 46 52 4F 4D 09 4D 61 63 72 6F 73 20 49    ;..FROM.Macros I
007930:  4D 50 4F 52 54 20 53 74 6F 72 65 4D 61 63 72 6F    MPORT StoreMacro
007940:  73 3B 0D 0A 46 52 4F 4D 09 53 63 72 65 65 6E 44    s;..FROM.ScreenD
007950:  75 6D 6D 79 20 49 4D 50 4F 52 54 20 43 6C 65 61    ummy IMPORT Clea
007960:  72 53 63 72 65 65 6E 2C 44 72 61 77 42 6F 78 2C    rScreen,DrawBox,
007970:  47 6F 74 6F 78 79 3B 0D 0A 46 52 4F 4D 09 52 65    Gotoxy;..FROM.Re
007980:  73 65 74 44 69 73 63 20 49 4D 50 4F 52 54 20 52    setDisc IMPORT R
007990:  65 73 65 74 41 6C 6C 44 69 73 63 73 3B 0D 0A 56    esetAllDiscs;..V
0079A0:  41 52 09 54 65 78 74 3A 41 52 52 41 59 20 5B 30    AR.Text:ARRAY [0
0079B0:  2E 2E 39 5D 20 4F 46 20 4D 65 6E 75 54 65 78 74    ..9] OF MenuText
0079C0:  3D 5B 20 0D 0A 09 09 09 27 4F 70 65 6E 20 20 46    =[ .....'Open  F
0079D0:  69 6C 65 20 27 2C 0D 0A 09 09 09 27 53 61 76 65    ile ',.....'Save
0079E0:  20 20 46 69 6C 65 20 27 2C 0D 0A 09 09 09 27 43      File ',.....'C
0079F0:  6C 6F 73 65 20 46 69 6C 65 20 27 2C 0D 0A 09 09    lose File ',....
007A00:  20 27 29 3B 0D 0A 09 57 72 69 74 65 28 30 38 78     ');...Write(08x
007A10:  29 3B 0D 0A 09 44 45 43 28 63 68 61 72 73 29 3B    );...DEC(chars);
007A20:  0D 0A 09 45 4E 44 20 42 61 63 6B 53 70 61 63 65    ...END BackSpace
007A30:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74    ;..PROCEDURE Get
007A40:  53 74 72 69 6E 67 28 56 41 52 20 73 3A 41 52 52    String(VAR s:ARR
007A50:  41 59 20 4F 46 20 43 48 41 52 3B 56 41 52 20 6C    AY OF CHAR;VAR l
007A60:  65 6E 3A 43 41 52 44 49 4E 41 4C 3B 70 72 6F 6D    en:CARDINAL;prom
007A70:  70 74 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52    pt:ARRAY OF CHAR
007A80:  29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 53 65 74 42    );..BEGIN...SetB
007A90:  6F 78 50 6F 73 28 79 29 3B 0D 0A 09 44 72 61 77    oxPos(y);...Draw
007AA0:  42 6F 78 28 31 31 2C 79 2B 33 2C 31 34 2B 48 49    Box(11,y+3,14+HI
007AB0:  47 48 28 73 29 2B 48 49 47 48 28 70 72 6F 6D 70    GH(s)+HIGH(promp
007AC0:  74 29 2C 79 2B 31 29 3B 0D 0A 09 47 6F 74 6F 78    t),y+1);...Gotox
007AD0:  79 28 31 32 2C 79 2B 32 29 3B 0D 0A 09 46 4F 52    y(12,y+2);...FOR
007AE0:  20 78 3A 3D 30 20 54 4F 20 48 49 47 48 28 70 72     x:=0 TO HIGH(pr
007AF0:  6F 6D 70 74 29 20 44 4F 20 57 72 69 74 65 28 70    ompt) DO Write(p
007B00:  72 6F 6D 70 74 5B 78 5D 29 20 45 4E 44 3B 0D 0A    rompt[x]) END;..
007B10:  09 46 4F 52 20 78 3A 3D 30 20 54 4F 20 48 49 47    .FOR x:=0 TO HIG
007B20:  48 28 73 29 20 44 4F 20 57 72 69 74 65 28 27 20    H(s) DO Write(' 
007B30:  27 29 20 45 4E 44 3B 0D 0A 09 47 6F 74 6F 78 79    ') END;...Gotoxy
007B40:  28 31 32 2B 48 49 47 48 28 70 72 6F 6D 70 74 29    (12+HIGH(prompt)
007B50:  2B 31 2C 79 2B 32 29 3B 0D 0A 09 6C 65 6E 3A 3D    +1,y+2);...len:=
007B60:  30 3B 63 68 3A 3D 30 78 3B 0D 0A 09 63 68 61 72    0;ch:=0x;...char
007B70:  73 3A 3D 30 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09    s:=0;...LOOP....
007B80:  49 46 20 6C 65 6E 3E 48 49 47 48 28 73 29 20 54    IF len>HIGH(s) T
007B90:  48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D 0A 09    HEN EXIT END;...
007BA0:  09 52 45 50 45 41 54 0D 0A 09 09 09 42 75 73 79    .REPEAT.....Busy
007BB0:  52 65 61 64 28 63 68 29 3B 0D 0A 09 09 09 55 4E    Read(ch);.....UN
007BC0:  54 49 4C 20 63 68 3C 3E 30 78 3B 0D 0A 09 09 49    TIL ch<>0x;....I
007BD0:  46 20 63 68 3D 30 64 78 20 54 48 45 4E 20 45 58    F ch=0dx THEN EX
007BE0:  49 54 20 45 4E 44 3B 0D 0A 09 09 49 46 20 28 63    IT END;....IF (c
007BF0:  68 3D 30 38 78 29 20 4F 52 20 28 63 68 3D 31 33    h=08x) OR (ch=13
007C00:  09 27 53 70 6C 69 74 20 46 69 6C 65 20 27 2C 0D    .'Split File ',.
007C10:  0A 09 09 09 27 43 6F 6D 70 69 6C 65 20 20 20 20    ....'Compile    
007C20:  27 2C 0D 0A 09 09 09 27 43 6F 6D 70 2F 45 78 69    ',.....'Comp/Exi
007C30:  74 20 20 27 2C 0D 0A 09 09 09 27 51 75 69 74 20    t  ',.....'Quit 
007C40:  46 69 6C 65 20 20 27 2C 0D 0A 09 09 09 27 51 75    File  ',.....'Qu
007C50:  69 74 20 57 69 6E 64 6F 77 27 2C 0D 0A 09 09 09    it Window',.....
007C60:  27 45 78 69 74 20 45 64 69 74 20 20 27 2C 0D 0A    'Exit Edit  ',..
007C70:  09 09 09 27 52 65 73 65 74 20 44 69 73 63 20 27    ...'Reset Disc '
007C80:  5D 3B 0D 0A 09 63 3A 43 41 52 44 49 4E 41 4C 3B    ];...c:CARDINAL;
007C90:  0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52    ...reply:INTEGER
007CA0:  3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D    ;...i:CARDINAL;.
007CB0:  0A 09 63 68 3A 43 48 41 52 3B 0D 0A 50 52 4F 43    ..ch:CHAR;..PROC
007CC0:  45 44 55 52 45 20 52 65 64 69 73 70 6C 61 79 3B    EDURE Redisplay;
007CD0:  0D 0A 42 45 47 49 4E 0D 0A 09 53 65 74 57 69 6E    ..BEGIN...SetWin
007CE0:  64 6F 77 73 28 57 69 6E 64 6F 77 73 29 3B 0D 0A    dows(Windows);..
007CF0:  09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 57 69 6E    .FOR i:=1 TO Win
007D00:  64 6F 77 73 20 44 4F 0D 0A 09 09 44 69 73 70 6C    dows DO....Displ
007D10:  61 79 46 69 6C 65 28 46 69 6C 65 73 5B 57 69 6E    ayFile(Files[Win
007D20:  64 6F 77 46 69 6C 65 5B 69 5D 5D 2C 69 2C 63 75    dowFile[i]],i,cu
007D30:  72 78 5B 69 5D 2C 63 75 72 79 5B 69 5D 29 3B 0D    rx[i],cury[i]);.
007D40:  0A 09 09 45 4E 44 3B 0D 0A 09 52 65 73 65 74 53    ...END;...ResetS
007D50:  63 72 65 65 6E 50 6F 73 3B 0D 0A 09 45 4E 44 20    creenPos;...END 
007D60:  52 65 64 69 73 70 6C 61 79 3B 0D 0A 50 52 4F 43    Redisplay;..PROC
007D70:  45 44 55 52 45 20 43 6C 65 61 72 44 69 73 70 6C    EDURE ClearDispl
007D80:  61 79 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74    ay;..BEGIN...Got
007D90:  6F 78 79 28 30 2C 30 29 3B 0D 0A 09 43 6C 65 61    oxy(0,0);...Clea
007DA0:  72 53 63 72 65 65 6E 3B 0D 0A 09 45 4E 44 20 43    rScreen;...END C
007DB0:  6C 65 61 72 44 69 73 70 6C 61 79 3B 0D 0A 50 52    learDisplay;..PR
007DC0:  4F 43 45 44 55 52 45 20 52 65 61 6C 6C 79 28 29    OCEDURE Really()
007DD0:  3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E    :BOOLEAN;..BEGIN
007DE0:  0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27    ...WriteString('
007DF0:  20 28 59 2F 4E 29 3F 20 27 29 3B 0D 0A 09 52 45     (Y/N)? ');...RE
007E00:  78 29 20 4F 52 20 28 63 68 3D 37 66 78 29 20 54    x) OR (ch=7fx) T
007E10:  48 45 4E 0D 0A 09 09 09 49 46 20 6C 65 6E 3E 30    HEN.....IF len>0
007E20:  20 54 48 45 4E 20 0D 0A 09 09 09 09 44 45 43 28     THEN ......DEC(
007E30:  6C 65 6E 29 3B 0D 0A 09 09 09 09 49 46 20 73 5B    len);......IF s[
007E40:  6C 65 6E 5D 3C 27 20 27 20 54 48 45 4E 20 42 61    len]<' ' THEN Ba
007E50:  63 6B 53 70 61 63 65 20 45 4E 44 3B 0D 0A 09 09    ckSpace END;....
007E60:  09 09 42 61 63 6B 53 70 61 63 65 3B 0D 0A 09 09    ..BackSpace;....
007E70:  09 09 45 4E 44 3B 0D 0A 09 09 45 4C 53 49 46 20    ..END;....ELSIF 
007E80:  63 68 3D 31 38 78 20 54 48 45 4E 0D 0A 09 09 09    ch=18x THEN.....
007E90:  46 4F 52 20 6C 65 6E 3A 3D 31 20 54 4F 20 63 68    FOR len:=1 TO ch
007EA0:  61 72 73 20 44 4F 20 42 61 63 6B 53 70 61 63 65    ars DO BackSpace
007EB0:  20 45 4E 44 3B 0D 0A 09 09 09 6C 65 6E 3A 3D 30     END;.....len:=0
007EC0:  3B 0D 0A 09 09 09 63 68 61 72 73 3A 3D 30 3B 0D    ;.....chars:=0;.
007ED0:  0A 09 09 45 4C 53 45 0D 0A 09 09 09 49 46 20 63    ...ELSE.....IF c
007EE0:  68 3C 27 20 27 20 54 48 45 4E 20 0D 0A 09 09 09    h<' ' THEN .....
007EF0:  09 57 72 69 74 65 28 27 5E 27 29 3B 0D 0A 09 09    .Write('^');....
007F00:  09 09 57 72 69 74 65 28 43 48 52 28 4F 52 44 28    ..Write(CHR(ORD(
007F10:  63 68 29 2B 36 34 29 29 3B 0D 0A 09 09 09 09 49    ch)+64));......I
007F20:  4E 43 28 63 68 61 72 73 29 3B 0D 0A 09 09 09 45    NC(chars);.....E
007F30:  4C 53 45 20 57 72 69 74 65 28 63 68 29 20 45 4E    LSE Write(ch) EN
007F40:  44 3B 0D 0A 09 09 09 49 4E 43 28 63 68 61 72 73    D;.....INC(chars
007F50:  29 3B 0D 0A 09 09 09 73 5B 6C 65 6E 5D 3A 3D 63    );.....s[len]:=c
007F60:  68 3B 0D 0A 09 09 09 49 4E 43 28 6C 65 6E 29 3B    h;.....INC(len);
007F70:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44    .....END;....END
007F80:  3B 28 2A 57 48 49 4C 45 2A 29 0D 0A 09 46 4F 52    ;(*WHILE*)...FOR
007F90:  20 78 3A 3D 6C 65 6E 20 54 4F 20 48 49 47 48 28     x:=len TO HIGH(
007FA0:  73 29 20 44 4F 20 73 5B 78 5D 3A 3D 27 20 27 20    s) DO s[x]:=' ' 
007FB0:  45 4E 44 3B 0D 0A 09 45 4E 44 20 47 65 74 53 74    END;...END GetSt
007FC0:  72 69 6E 67 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    ring;....PROCEDU
007FD0:  52 45 20 44 6F 4D 65 6E 75 4F 70 3B 0D 0A 56 41    RE DoMenuOp;..VA
007FE0:  52 09 79 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09    R.y:CARDINAL;...
007FF0:  66 6E 3A 46 69 6C 65 4E 61 6D 65 3B 0D 0A 50 52    fn:FileName;..PR
008000:  50 45 41 54 0D 0A 09 09 42 75 73 79 52 65 61 64    PEAT....BusyRead
008010:  28 63 68 29 3B 0D 0A 09 09 63 68 3A 3D 43 41 50    (ch);....ch:=CAP
008020:  28 63 68 29 3B 0D 0A 09 09 55 4E 54 49 4C 20 28    (ch);....UNTIL (
008030:  63 68 3D 27 59 27 29 20 4F 52 20 28 63 68 3D 27    ch='Y') OR (ch='
008040:  4E 27 29 3B 0D 0A 09 57 72 69 74 65 28 63 68 29    N');...Write(ch)
008050:  3B 0D 0A 09 52 45 54 55 52 4E 20 63 68 3D 27 59    ;...RETURN ch='Y
008060:  27 0D 0A 09 45 4E 44 20 52 65 61 6C 6C 79 3B 0D    '...END Really;.
008070:  0A 50 52 4F 43 45 44 55 52 45 20 4F 70 65 6E 28    .PROCEDURE Open(
008080:  66 6E 3A 46 69 6C 65 4E 61 6D 65 3B 50 6F 73 3A    fn:FileName;Pos:
008090:  43 41 52 44 49 4E 41 4C 29 3B 0D 0A 28 2A 09 4F    CARDINAL);..(*.O
0080A0:  70 65 6E 20 74 68 65 20 66 69 6C 65 20 77 68 6F    pen the file who
0080B0:  73 65 20 6E 61 6D 65 20 69 73 20 69 6E 20 66 6E    se name is in fn
0080C0:  0D 0A 0D 0A 09 72 65 2D 61 64 6A 75 73 74 20 74    .....re-adjust t
0080D0:  68 65 20 64 69 73 70 6C 61 79 20 61 73 20 72 65    he display as re
0080E0:  71 75 69 72 65 64 2A 29 0D 0A 56 41 52 09 66 3A    quired*)..VAR.f:
0080F0:  46 49 4C 45 3B 0D 0A 09 62 3A 42 4F 4F 4C 45 41    FILE;...b:BOOLEA
008100:  4E 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49    N;..BEGIN..    I
008110:  46 20 66 6E 5B 31 5D 3C 3E 27 20 27 20 54 48 45    F fn[1]<>' ' THE
008120:  4E 20 0D 0A 09 4F 70 65 6E 46 69 6C 65 28 46 69    N ...OpenFile(Fi
008130:  6C 65 73 5B 46 69 6C 65 73 4F 70 65 6E 65 64 2B    les[FilesOpened+
008140:  31 5D 2C 66 6E 2C 72 65 70 6C 79 2C 50 6F 73 29    1],fn,reply,Pos)
008150:  3B 0D 0A 09 49 46 20 72 65 70 6C 79 3D 28 2D 32    ;...IF reply=(-2
008160:  29 20 54 48 45 4E 0D 0A 09 09 43 6C 65 61 72 44    ) THEN....ClearD
008170:  69 73 70 6C 61 79 3B 0D 0A 09 09 57 72 69 74 65    isplay;....Write
008180:  53 74 72 69 6E 67 28 27 20 43 72 65 61 74 65 20    String(' Create 
008190:  27 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69    ');....WriteStri
0081A0:  6E 67 28 66 6E 29 3B 0D 0A 09 09 0D 0A 09 09 49    ng(fn);........I
0081B0:  46 20 52 65 61 6C 6C 79 28 29 20 54 48 45 4E 0D    F Really() THEN.
0081C0:  0A 09 09 09 43 72 65 61 74 65 28 66 2C 66 6E 2C    ....Create(f,fn,
0081D0:  72 65 70 6C 79 29 3B 0D 0A 09 09 09 49 46 20 72    reply);.....IF r
0081E0:  65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A 09 09    eply<>0 THEN....
0081F0:  09 09 72 65 70 6C 79 3A 3D 2D 34 0D 0A 09 09 09    ..reply:=-4.....
008200:  4F 43 45 44 55 52 45 20 57 72 69 74 65 41 77 61    OCEDURE WriteAwa
008210:  79 46 69 6C 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09    yFile;..BEGIN...
008220:  43 6C 6F 73 65 46 69 6C 65 28 46 69 6C 65 73 5B    CloseFile(Files[
008230:  43 75 72 72 65 6E 74 46 69 6C 65 5D 2C 72 65 70    CurrentFile],rep
008240:  6C 79 29 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3D    ly);...IF reply=
008250:  2D 31 20 54 48 45 4E 20 0D 0A 09 09 45 72 72 6F    -1 THEN ....Erro
008260:  72 4D 65 73 73 61 67 65 28 27 44 69 73 63 20 46    rMessage('Disc F
008270:  75 6C 6C 20 27 2C 27 20 27 29 3B 0D 0A 09 45 4C    ull ',' ');...EL
008280:  53 49 46 20 72 65 70 6C 79 3D 2D 32 20 54 48 45    SIF reply=-2 THE
008290:  4E 0D 0A 09 09 45 72 72 6F 72 4D 65 73 73 61 67    N....ErrorMessag
0082A0:  65 28 27 44 69 72 65 63 74 6F 72 79 20 46 75 6C    e('Directory Ful
0082B0:  6C 20 27 2C 27 20 27 29 3B 0D 0A 09 09 45 4E 44    l ',' ');....END
0082C0:  3B 0D 0A 09 55 70 64 61 74 65 64 5B 43 75 72 72    ;...Updated[Curr
0082D0:  65 6E 74 46 69 6C 65 5D 3A 3D 46 41 4C 53 45 3B    entFile]:=FALSE;
0082E0:  0D 0A 09 45 4E 44 20 57 72 69 74 65 41 77 61 79    ...END WriteAway
0082F0:  46 69 6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45    File;..PROCEDURE
008300:  20 53 61 76 65 46 69 6C 65 73 3B 0D 0A 56 41 52     SaveFiles;..VAR
008310:  09 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47    .i:INTEGER;..BEG
008320:  49 4E 0D 0A 09 69 3A 3D 43 75 72 72 65 6E 74 46    IN...i:=CurrentF
008330:  69 6C 65 3B 0D 0A 09 72 65 70 6C 79 3A 3D 30 3B    ile;...reply:=0;
008340:  0D 0A 09 46 4F 52 20 43 75 72 72 65 6E 74 46 69    ...FOR CurrentFi
008350:  6C 65 3A 3D 31 20 54 4F 20 46 69 6C 65 73 4F 70    le:=1 TO FilesOp
008360:  65 6E 65 64 20 44 4F 0D 0A 09 09 49 46 20 55 70    ened DO....IF Up
008370:  64 61 74 65 64 5B 43 75 72 72 65 6E 74 46 69 6C    dated[CurrentFil
008380:  65 5D 20 54 48 45 4E 20 57 72 69 74 65 41 77 61    e] THEN WriteAwa
008390:  79 46 69 6C 65 20 45 4E 44 3B 0D 0A 09 09 49 46    yFile END;....IF
0083A0:  20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 20 52     reply<>0 THEN R
0083B0:  45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 09 45 4E    ETURN END;....EN
0083C0:  44 3B 0D 0A 09 43 75 72 72 65 6E 74 46 69 6C 65    D;...CurrentFile
0083D0:  3A 3D 69 3B 0D 0A 09 45 4E 44 20 53 61 76 65 46    :=i;...END SaveF
0083E0:  69 6C 65 73 3B 0D 0A 50 52 4F 43 45 44 55 52 45    iles;..PROCEDURE
0083F0:  20 50 72 65 70 61 72 65 54 6F 4C 65 61 76 65 3B     PrepareToLeave;
008400:  45 4C 53 45 0D 0A 09 09 09 09 43 6C 6F 73 65 28    ELSE......Close(
008410:  66 29 3B 0D 0A 09 09 09 09 4F 70 65 6E 46 69 6C    f);......OpenFil
008420:  65 28 46 69 6C 65 73 5B 46 69 6C 65 73 4F 70 65    e(Files[FilesOpe
008430:  6E 65 64 2B 31 5D 2C 66 6E 2C 72 65 70 6C 79 2C    ned+1],fn,reply,
008440:  50 6F 73 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D    Pos);......END;.
008450:  0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B    ....END;....END;
008460:  20 28 2A 72 65 70 6C 79 3D 2D 32 2A 29 0D 0A 09     (*reply=-2*)...
008470:  49 46 20 72 65 70 6C 79 3D 28 2D 34 29 20 54 48    IF reply=(-4) TH
008480:  45 4E 0D 0A 09 09 45 72 72 6F 72 4D 65 73 73 61    EN....ErrorMessa
008490:  67 65 28 27 43 6F 75 6C 64 20 6E 6F 74 20 63 72    ge('Could not cr
0084A0:  65 61 74 65 20 27 2C 66 6E 29 3B 0D 0A 09 45 4C    eate ',fn);...EL
0084B0:  53 49 46 20 72 65 70 6C 79 3D 28 2D 33 29 20 54    SIF reply=(-3) T
0084C0:  48 45 4E 0D 0A 09 09 45 72 72 6F 72 4D 65 73 73    HEN....ErrorMess
0084D0:  61 67 65 28 27 4F 75 74 20 6F 66 20 4D 65 6D 6F    age('Out of Memo
0084E0:  72 79 20 6C 6F 61 64 69 6E 67 20 27 2C 66 6E 20    ry loading ',fn 
0084F0:  29 3B 0D 0A 09 45 4C 53 49 46 20 72 65 70 6C 79    );...ELSIF reply
008500:  3D 28 2D 32 29 20 54 48 45 4E 0D 0A 09 09 45 72    =(-2) THEN....Er
008510:  72 6F 72 4D 65 73 73 61 67 65 28 27 46 69 6C 65    rorMessage('File
008520:  20 6E 6F 74 20 66 6F 75 6E 64 3A 27 2C 66 6E 29     not found:',fn)
008530:  3B 0D 0A 09 45 4C 53 49 46 20 72 65 70 6C 79 3C    ;...ELSIF reply<
008540:  30 20 54 48 45 4E 0D 0A 09 09 45 72 72 6F 72 4D    0 THEN....ErrorM
008550:  65 73 73 61 67 65 28 27 20 4F 74 68 65 72 20 65    essage(' Other e
008560:  72 72 6F 72 20 6F 70 65 6E 69 6E 67 20 66 69 6C    rror opening fil
008570:  65 3A 27 2C 66 6E 29 0D 0A 09 45 4C 53 45 20 09    e:',fn)...ELSE .
008580:  28 2A 66 69 6C 65 20 6F 6B 2A 29 0D 0A 09 09 49    (*file ok*)....I
008590:  4E 43 28 46 69 6C 65 73 4F 70 65 6E 65 64 29 3B    NC(FilesOpened);
0085A0:  0D 0A 09 09 49 4E 43 28 57 69 6E 64 6F 77 73 29    ....INC(Windows)
0085B0:  3B 0D 0A 09 09 57 69 6E 64 6F 77 46 69 6C 65 5B    ;....WindowFile[
0085C0:  57 69 6E 64 6F 77 73 5D 3A 3D 46 69 6C 65 73 4F    Windows]:=FilesO
0085D0:  70 65 6E 65 64 3B 0D 0A 09 09 53 65 74 57 69 6E    pened;....SetWin
0085E0:  64 6F 77 73 28 57 69 6E 64 6F 77 73 29 3B 0D 0A    dows(Windows);..
0085F0:  09 09 62 3A 3D 4C 61 62 65 6C 4F 70 28 46 69 6C    ..b:=LabelOp(Fil
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:  0D 0A 42 45 47 49 4E 0D 0A 09 53 61 76 65 46 69    ..BEGIN...SaveFi
008710:  6C 65 73 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3D    les;...IF reply=
008720:  30 20 54 48 45 4E 0D 0A 09 09 43 6C 65 61 72 44    0 THEN....ClearD
008730:  69 73 70 6C 61 79 3B 0D 0A 09 09 53 74 6F 72 65    isplay;....Store
008740:  4D 61 63 72 6F 73 3B 0D 0A 09 09 45 4E 44 3B 0D    Macros;....END;.
008750:  0A 09 45 4E 44 20 50 72 65 70 61 72 65 54 6F 4C    ..END PrepareToL
008760:  65 61 76 65 3B 09 09 0D 0A 0D 0A 50 52 4F 43 45    eave;......PROCE
008770:  44 55 52 45 20 43 61 6C 6C 43 6F 6D 70 69 6C 65    DURE CallCompile
008780:  72 73 28 6F 70 74 31 2C 6F 70 74 32 3A 41 52 52    rs(opt1,opt2:ARR
008790:  41 59 20 4F 46 20 43 48 41 52 29 3B 0D 0A 42 45    AY OF CHAR);..BE
0087A0:  47 49 4E 0D 0A 09 50 72 65 70 61 72 65 54 6F 4C    GIN...PrepareToL
0087B0:  65 61 76 65 3B 0D 0A 09 49 46 20 72 65 70 6C 79    eave;...IF reply
0087C0:  3D 30 20 54 48 45 4E 0D 0A 09 20 20 20 20 43 41    =0 THEN...    CA
0087D0:  53 45 20 46 69 6C 65 54 79 70 65 28 46 69 6C 65    SE FileType(File
0087E0:  73 5B 43 75 72 72 65 6E 74 46 69 6C 65 5D 29 20    s[CurrentFile]) 
0087F0:  4F 46 0D 0A 09 09 31 3A 43 61 6C 6C 57 69 74 68    OF....1:CallWith
008800:  46 69 6C 65 28 6F 70 74 31 2C 46 69 6C 65 73 5B    File(opt1,Files[
008810:  43 75 72 72 65 6E 74 46 69 6C 65 5D 29 7C 0D 0A    CurrentFile])|..
008820:  09 09 32 3A 43 61 6C 6C 57 69 74 68 46 69 6C 65    ..2:CallWithFile
008830:  28 6F 70 74 32 2C 46 69 6C 65 73 5B 43 75 72 72    (opt2,Files[Curr
008840:  65 6E 74 46 69 6C 65 5D 29 3B 0D 0A 09 09 45 4E    entFile]);....EN
008850:  44 3B 0D 0A 09 09 52 65 64 69 73 70 6C 61 79 3B    D;....Redisplay;
008860:  0D 0A 09 09 45 72 72 6F 72 4D 65 73 73 61 67 65    ....ErrorMessage
008870:  28 27 20 49 6E 76 61 6C 69 64 20 46 69 6C 65 20    (' Invalid File 
008880:  54 79 70 65 27 2C 27 20 27 29 3B 0D 0A 09 20 20    Type',' ');...  
008890:  20 20 45 4E 44 3B 28 2A 49 46 2A 29 0D 0A 09 45      END;(*IF*)...E
0088A0:  4E 44 20 43 61 6C 6C 43 6F 6D 70 69 6C 65 72 73    ND CallCompilers
0088B0:  3B 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6F    ;...PROCEDURE Co
0088C0:  75 6E 74 52 65 66 73 28 29 3A 43 41 52 44 49 4E    untRefs():CARDIN
0088D0:  41 4C 3B 09 0D 0A 56 41 52 09 6A 3A 43 41 52 44    AL;...VAR.j:CARD
0088E0:  49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 6A    INAL;..BEGIN...j
0088F0:  3A 3D 30 3B 0D 0A 09 46 4F 52 20 69 3A 3D 31 20    :=0;...FOR i:=1 
008900:  29 3B 0D 0A 09 09 57 1A 1A 1A 1A 1A 1A 1A 1A 1A    );....W.........
008910:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008920:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008930:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008940:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008950:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008960:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008970:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
008980:  0A 61 6E 64 20 69 73 20 74 65 72 6D 69 6E 61 74    .and is terminat
008990:  65 64 20 62 79 20 61 20 76 61 6C 75 65 20 6F 66    ed by a value of
0089A0:  20 30 20 69 66 20 6C 65 73 73 20 74 68 61 6E 20     0 if less than 
0089B0:  63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 72    characters are r
0089C0:  65 71 75 69 72 65 64 2E 0D 0A 4E 61 74 75 72 61    equired...Natura
0089D0:  6C 6C 79 2C 20 79 6F 75 20 6D 61 79 20 61 6C 73    lly, you may als
0089E0:  6F 20 63 68 61 6E 67 65 20 74 68 65 20 2E 43 4F    o change the .CO
0089F0:  4D 20 66 69 6C 65 2E 0D 0D 0A 54 68 65 20 63 6F    M file....The co
008A00:  6E 74 72 6F 6C 20 63 68 61 72 61 63 74 65 72 73    ntrol characters
008A10:  20 69 6E 20 74 68 65 20 73 75 70 70 6C 69 65 64     in the supplied
008A20:  20 70 72 6F 67 72 61 6D 20 61 72 65 20 73 65 74     program are set
008A30:  20 66 6F 72 20 61 20 53 54 41 52 20 44 50 53 35     for a STAR DPS5
008A40:  31 30 2C 0D 0A 77 68 69 63 68 20 69 73 20 73 75    10,..which is su
008A50:  70 70 6F 73 65 64 20 74 6F 20 62 65 20 45 70 73    pposed to be Eps
008A60:  6F 6E 20 63 6F 6D 70 61 74 69 62 6C 65 2C 20 73    on compatible, s
008A70:  6F 20 74 68 65 20 70 72 6F 67 72 61 6D 20 6D 61    o the program ma
008A80:  79 20 77 65 6C 6C 20 72 75 6E 20 27 61 73 20 69    y well run 'as i
008A90:  73 27 0D 0A 6F 6E 20 45 70 73 6F 6E 73 20 61 6E    s'..on Epsons an
008AA0:  64 20 45 70 73 6F 6E 20 63 6C 6F 6E 65 73 2E 0D    d Epson clones..
008AB0:  0A 0D 0A 48 6F 77 20 74 68 65 20 70 72 6F 67 72    ...How the progr
008AC0:  61 6D 20 77 6F 72 6B 73 0D 0A 3D 3D 3D 3D 3D 3D    am works..======
008AD0:  3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 0D    ===============.
008AE0:  0A 0D 0A 46 6F 72 20 65 61 63 68 20 6C 69 6E 65    ...For each line
008AF0:  2C 20 61 20 68 61 73 68 20 74 6F 74 61 6C 20 69    , a hash total i
008B00:  54 4F 20 57 69 6E 64 6F 77 73 20 44 4F 0D 0A 09    TO Windows DO...
008B10:  09 49 46 20 57 69 6E 64 6F 77 46 69 6C 65 5B 69    .IF WindowFile[i
008B20:  5D 3D 43 75 72 72 65 6E 74 46 69 6C 65 20 54 48    ]=CurrentFile TH
008B30:  45 4E 20 49 4E 43 28 6A 29 20 45 4E 44 3B 0D 0A    EN INC(j) END;..
008B40:  09 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20    ..END;...RETURN 
008B50:  6A 0D 0A 09 45 4E 44 20 43 6F 75 6E 74 52 65 66    j...END CountRef
008B60:  73 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65    s;..PROCEDURE Re
008B70:  6D 6F 76 65 46 69 6C 65 3B 0D 0A 56 41 52 09 6A    moveFile;..VAR.j
008B80:  2C 6B 3A 43 41 52 44 49 4E 41 4C 3B 63 68 3A 43    ,k:CARDINAL;ch:C
008B90:  48 41 52 3B 0D 0A 42 45 47 49 4E 0D 0A 09 6A 3A    HAR;..BEGIN...j:
008BA0:  3D 43 75 72 72 65 6E 74 46 69 6C 65 3B 0D 0A 09    =CurrentFile;...
008BB0:  6B 3A 3D 31 3B 0D 0A 09 57 48 49 4C 45 20 6B 3C    k:=1;...WHILE k<
008BC0:  3D 57 69 6E 64 6F 77 73 20 44 4F 0D 0A 09 09 49    =Windows DO....I
008BD0:  46 20 57 69 6E 64 6F 77 46 69 6C 65 5B 6B 5D 3D    F WindowFile[k]=
008BE0:  6A 20 54 48 45 4E 0D 0A 09 09 20 09 45 6C 69 64    j THEN.... .Elid
008BF0:  65 57 69 6E 64 6F 77 28 6B 29 20 20 28 2A 77 68    eWindow(k)  (*wh
008C00:  69 63 68 20 64 65 63 72 65 6D 65 6E 74 73 20 77    ich decrements w
008C10:  69 6E 64 6F 77 73 2A 29 0D 0A 09 09 45 4C 53 45    indows*)....ELSE
008C20:  20 49 46 20 57 69 6E 64 6F 77 46 69 6C 65 5B 6B     IF WindowFile[k
008C30:  5D 3E 6A 20 54 48 45 4E 0D 0A 09 09 09 44 45 43    ]>j THEN.....DEC
008C40:  28 57 69 6E 64 6F 77 46 69 6C 65 5B 6B 5D 29 3B    (WindowFile[k]);
008C50:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 20 20 20    .....END;....   
008C60:  20 20 49 4E 43 28 6B 29 3B 0D 0A 09 09 20 20 20      INC(k);....   
008C70:  20 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A      END;....END;..
008C80:  09 41 62 61 6E 64 6F 6E 46 69 6C 65 28 46 69 6C    .AbandonFile(Fil
008C90:  65 73 5B 6A 5D 29 3B 0D 0A 09 46 4F 52 20 69 3A    es[j]);...FOR i:
008CA0:  3D 6A 2B 31 20 54 4F 20 46 69 6C 65 73 4F 70 65    =j+1 TO FilesOpe
008CB0:  6E 65 64 20 44 4F 20 0D 0A 09 09 46 69 6C 65 73    ned DO ....Files
008CC0:  5B 69 2D 31 5D 3A 3D 46 69 6C 65 73 5B 69 5D 3B    [i-1]:=Files[i];
008CD0:  0D 0A 09 09 55 70 64 61 74 65 64 5B 69 2D 31 5D    ....Updated[i-1]
008CE0:  3A 3D 55 70 64 61 74 65 64 5B 69 5D 3B 0D 0A 09    :=Updated[i];...
008CF0:  09 45 4E 44 3B 0D 0A 09 44 45 43 28 46 69 6C 65    .END;...DEC(File
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:  73 4F 70 65 6E 65 64 29 3B 0D 0A 09 43 68 61 6E    sOpened);...Chan
008F10:  67 65 57 69 6E 64 6F 77 28 31 29 3B 0D 0A 20 20    geWindow(1);..  
008F20:  09 52 65 64 69 73 70 6C 61 79 3B 0D 0A 09 45 4E    .Redisplay;...EN
008F30:  44 20 52 65 6D 6F 76 65 46 69 6C 65 3B 0D 0A 50    D RemoveFile;..P
008F40:  52 4F 43 45 44 55 52 45 20 43 68 65 63 6B 52 65    ROCEDURE CheckRe
008F50:  6D 6F 76 65 46 69 6C 65 3B 0D 0A 42 45 47 49 4E    moveFile;..BEGIN
008F60:  0D 0A 09 49 46 20 55 70 64 61 74 65 64 5B 43 75    ...IF Updated[Cu
008F70:  72 72 65 6E 74 46 69 6C 65 5D 20 54 48 45 4E 0D    rrentFile] THEN.
008F80:  0A 09 09 43 6C 65 61 72 44 69 73 70 6C 61 79 3B    ...ClearDisplay;
008F90:  0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 28    ....WriteString(
008FA0:  27 20 46 69 6C 65 20 75 70 64 61 74 65 64 20 2D    ' File updated -
008FB0:  20 41 72 65 20 79 6F 75 20 73 75 72 65 20 27 29     Are you sure ')
008FC0:  3B 0D 0A 09 09 49 46 20 4E 4F 54 20 52 65 61 6C    ;....IF NOT Real
008FD0:  6C 79 28 29 20 54 48 45 4E 20 0D 0A 09 09 09 52    ly() THEN .....R
008FE0:  65 64 69 73 70 6C 61 79 3B 0D 0A 09 09 09 52 45    edisplay;.....RE
008FF0:  54 55 52 4E 20 0D 0A 09 09 09 45 4E 44 3B 0D 0A    TURN .....END;..
009000:  09 09 45 4E 44 3B 0D 0A 09 52 65 6D 6F 76 65 46    ..END;...RemoveF
009010:  69 6C 65 3B 0D 0A 09 45 4E 44 20 43 68 65 63 6B    ile;...END Check
009020:  52 65 6D 6F 76 65 46 69 6C 65 3B 0D 0A 42 45 47    RemoveFile;..BEG
009030:  49 4E 0D 0A 09 53 65 74 42 6F 78 50 6F 73 28 79    IN...SetBoxPos(y
009040:  29 3B 0D 0A 09 63 3A 3D 47 65 74 46 72 6F 6D 4D    );...c:=GetFromM
009050:  65 6E 75 28 54 65 78 74 2C 31 30 2C 79 2C 35 2C    enu(Text,10,y,5,
009060:  32 29 3B 0D 0A 09 43 6C 65 61 72 43 68 61 72 42    2);...ClearCharB
009070:  75 66 66 65 72 3B 0D 0A 09 49 46 20 28 46 69 6C    uffer;...IF (Fil
009080:  65 73 4F 70 65 6E 65 64 3D 30 29 20 41 4E 44 20    esOpened=0) AND 
009090:  28 63 20 49 4E 20 7B 32 2E 2E 38 7D 29 20 54 48    (c IN {2..8}) TH
0090A0:  45 4E 0D 0A 09 09 45 72 72 6F 72 4D 65 73 73 61    EN....ErrorMessa
0090B0:  67 65 28 27 59 6F 75 20 68 61 76 65 20 74 6F 20    ge('You have to 
0090C0:  62 65 20 65 64 69 74 69 6E 67 20 61 20 66 69 6C    be editing a fil
0090D0:  65 20 74 6F 20 64 6F 20 74 68 69 73 27 2C 27 20    e to do this',' 
0090E0:  27 29 3B 0D 0A 09 45 4C 53 45 20 43 41 53 45 20    ');...ELSE CASE 
0090F0:  63 20 4F 46 0D 0A 09 31 3A 49 46 20 57 69 6E 64    c OF...1:IF Wind
009100:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
009110:  45 20 45 64 69 74 43 6F 6E 74 72 6F 6C 3B 0D 0A    E EditControl;..
009120:  46 52 4F 4D 20 4D 61 6B 65 45 64 69 74 73 20 49    FROM MakeEdits I
009130:  4D 50 4F 52 54 20 45 64 69 74 46 69 6C 65 2C 50    MPORT EditFile,P
009140:  6F 73 69 74 69 6F 6E 3B 0D 0A 46 52 4F 4D 20 54    osition;..FROM T
009150:  65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 57    erminal IMPORT W
009160:  72 69 74 65 2C 57 72 69 74 65 4C 6E 3B 0D 0A 0D    rite,WriteLn;...
009170:  0A 28 2A 09 45 64 69 74 6F 72 20 63 6F 6E 74 72    .(*.Editor contr
009180:  6F 6C 20 2D 20 64 61 74 61 20 61 72 65 61 73 20    ol - data areas 
009190:  66 6F 72 20 66 69 6C 65 20 61 6E 64 20 72 6F 75    for file and rou
0091A0:  74 69 6E 65 73 20 77 68 69 63 68 20 61 63 74 75    tines which actu
0091B0:  61 6C 6C 79 0D 0A 09 70 65 72 66 6F 72 6D 20 65    ally...perform e
0091C0:  64 69 74 20 66 75 6E 63 74 69 6F 6E 73 20 62 79    dit functions by
0091D0:  20 63 61 6C 6C 69 6E 67 20 6D 61 6B 65 65 64 69     calling makeedi
0091E0:  74 20 74 6F 20 65 64 69 74 20 74 68 65 20 66 69    t to edit the fi
0091F0:  6C 65 20 61 6E 64 0D 0A 09 65 64 69 74 64 69 73    le and...editdis
009200:  70 20 74 6F 20 63 68 61 6E 67 65 20 74 68 65 20    p to change the 
009210:  73 63 72 65 65 6E 2A 29 0D 0A 43 4F 4E 53 54 20    screen*)..CONST 
009220:  20 09 4D 61 78 45 64 69 74 46 69 6C 65 73 3D 33     .MaxEditFiles=3
009230:  3B 0D 0A 0D 0A 56 41 52 09 46 69 6C 65 73 3A 20    ;....VAR.Files: 
009240:  41 52 52 41 59 5B 31 2E 2E 4D 61 78 45 64 69 74    ARRAY[1..MaxEdit
009250:  46 69 6C 65 73 5D 20 4F 46 20 45 64 69 74 46 69    Files] OF EditFi
009260:  6C 65 3B 0D 0A 09 46 69 6C 65 73 4F 70 65 6E 65    le;...FilesOpene
009270:  64 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 43 75    d:CARDINAL;...Cu
009280:  72 72 65 6E 74 46 69 6C 65 2C 43 75 72 72 65 6E    rrentFile,Curren
009290:  74 57 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C    tWindow:CARDINAL
0092A0:  3B 0D 0A 09 46 69 6C 65 50 6F 73 69 74 69 6F 6E    ;...FilePosition
0092B0:  3A 41 52 52 41 59 5B 31 2E 2E 4D 61 78 45 64 69    :ARRAY[1..MaxEdi
0092C0:  74 46 69 6C 65 73 5D 20 4F 46 20 50 6F 73 69 74    tFiles] OF Posit
0092D0:  69 6F 6E 3B 0D 0A 09 63 75 72 78 2C 63 75 72 79    ion;...curx,cury
0092E0:  3A 41 52 52 41 59 5B 31 2E 2E 4D 61 78 45 64 69    :ARRAY[1..MaxEdi
0092F0:  74 46 69 6C 65 73 5D 20 4F 46 20 43 41 52 44 49    tFiles] OF CARDI
009300:  6F 77 73 3D 33 20 54 48 45 4E 20 45 72 72 6F 72    ows=3 THEN Error
009310:  4D 65 73 73 61 67 65 28 27 20 33 20 77 69 6E 64    Message(' 3 wind
009320:  6F 77 73 20 69 73 20 6D 61 78 20 61 6C 6C 6F 77    ows is max allow
009330:  65 64 27 2C 27 20 27 29 0D 0A 09 20 20 45 4C 53    ed',' ')...  ELS
009340:  45 0D 0A 09 09 47 65 74 53 74 72 69 6E 67 28 66    E....GetString(f
009350:  6E 2C 79 2C 27 46 69 6C 65 3A 27 29 3B 0D 0A 09    n,y,'File:');...
009360:  09 4F 70 65 6E 28 66 6E 2C 36 35 35 33 35 29 3B    .Open(fn,65535);
009370:  0D 0A 09 09 45 4E 44 0D 0A 09 20 20 7C 0D 0A 09    ....END...  |...
009380:  32 3A 57 72 69 74 65 41 77 61 79 46 69 6C 65 3B    2:WriteAwayFile;
009390:  0D 0A 09 20 20 7C 0D 0A 09 33 3A 57 72 69 74 65    ...  |...3:Write
0093A0:  41 77 61 79 46 69 6C 65 3B 0D 0A 09 20 20 49 46    AwayFile;...  IF
0093B0:  20 72 65 70 6C 79 3D 30 20 54 48 45 4E 20 0D 0A     reply=0 THEN ..
0093C0:  09 09 52 65 6D 6F 76 65 46 69 6C 65 3B 0D 0A 09    ..RemoveFile;...
0093D0:  09 45 4E 44 3B 0D 0A 09 20 20 7C 0D 0A 09 34 3A    .END;...  |...4:
0093E0:  49 46 20 57 69 6E 64 6F 77 73 3D 33 20 54 48 45    IF Windows=3 THE
0093F0:  4E 20 45 72 72 6F 72 4D 65 73 73 61 67 65 28 27    N ErrorMessage('
009400:  20 33 20 77 69 6E 64 6F 77 73 20 69 73 20 6D 61     3 windows is ma
009410:  78 20 61 6C 6C 6F 77 65 64 27 2C 27 20 27 29 0D    x allowed',' ').
009420:  0A 09 20 20 45 4C 53 45 0D 0A 09 09 4D 61 6B 65    ..  ELSE....Make
009430:  57 69 6E 64 6F 77 3B 0D 0A 09 09 53 65 74 57 69    Window;....SetWi
009440:  6E 64 6F 77 73 28 57 69 6E 64 6F 77 73 29 3B 0D    ndows(Windows);.
009450:  0A 09 09 43 68 61 6E 67 65 57 69 6E 64 6F 77 28    ...ChangeWindow(
009460:  43 75 72 72 65 6E 74 57 69 6E 64 6F 77 29 3B 0D    CurrentWindow);.
009470:  0A 09 09 52 65 64 69 73 70 6C 61 79 3B 0D 0A 09    ...Redisplay;...
009480:  09 45 4E 44 7C 0D 0A 09 09 0D 0A 09 35 3A 43 61    .END|.......5:Ca
009490:  6C 6C 43 6F 6D 70 69 6C 65 72 73 28 27 4D 32 5B    llCompilers('M2[
0094A0:  45 20 27 2C 27 4D 44 5B 45 20 27 29 7C 0D 0A 09    E ','MD[E ')|...
0094B0:  36 3A 43 61 6C 6C 43 6F 6D 70 69 6C 65 72 73 28    6:CallCompilers(
0094C0:  27 4D 32 20 27 2C 27 4D 44 20 27 29 7C 0D 0A 09    'M2 ','MD ')|...
0094D0:  37 3A 49 46 20 46 69 6C 65 73 4F 70 65 6E 65 64    7:IF FilesOpened
0094E0:  3E 30 20 54 48 45 4E 0D 0A 09 09 43 68 65 63 6B    >0 THEN....Check
0094F0:  52 65 6D 6F 76 65 46 69 6C 65 3B 0D 0A 09 09 45    RemoveFile;....E
009500:  4E 41 4C 3B 0D 0A 09 54 68 69 73 78 2C 54 68 69    NAL;...Thisx,Thi
009510:  73 79 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 4C    sy:CARDINAL;...L
009520:  65 66 74 4D 61 72 67 69 6E 3A 41 52 52 41 59 5B    eftMargin:ARRAY[
009530:  31 2E 2E 4D 61 78 45 64 69 74 46 69 6C 65 73 5D    1..MaxEditFiles]
009540:  20 4F 46 20 43 41 52 44 49 4E 41 4C 3B 0D 0A 09     OF CARDINAL;...
009550:  4C 69 6E 65 4C 65 6E 3A 49 4E 54 45 47 45 52 3B    LineLen:INTEGER;
009560:  0D 0A 09 4C 69 6E 65 50 6F 73 3A 49 4E 54 45 47    ...LinePos:INTEG
009570:  45 52 3B 0D 0A 09 55 70 64 61 74 65 64 3A 41 52    ER;...Updated:AR
009580:  52 41 59 5B 31 2E 2E 4D 61 78 45 64 69 74 46 69    RAY[1..MaxEditFi
009590:  6C 65 73 5D 20 4F 46 20 42 4F 4F 4C 45 41 4E 3B    les] OF BOOLEAN;
0095A0:  0D 0A 09 57 69 6E 64 6F 77 46 69 6C 65 3A 41 52    ...WindowFile:AR
0095B0:  52 41 59 5B 31 2E 2E 4D 61 78 45 64 69 74 46 69    RAY[1..MaxEditFi
0095C0:  6C 65 73 5D 20 4F 46 20 43 41 52 44 49 4E 41 4C    les] OF CARDINAL
0095D0:  3B 0D 0A 09 4D 6F 76 65 64 4F 4B 3A 42 4F 4F 4C    ;...MovedOK:BOOL
0095E0:  45 41 4E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    EAN;..PROCEDURE 
0095F0:  49 6E 73 4F 6E 65 43 68 61 72 28 63 68 3A 43 48    InsOneChar(ch:CH
009600:  41 52 29 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    AR);..PROCEDURE 
009610:  44 65 6C 4F 6E 65 43 68 61 72 3B 0D 0A 50 52 4F    DelOneChar;..PRO
009620:  43 45 44 55 52 45 20 44 65 6C 54 6F 45 4F 4C 3B    CEDURE DelToEOL;
009630:  0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65 6C 46    ..PROCEDURE DelF
009640:  75 6C 6C 4C 69 6E 65 3B 0D 0A 50 52 4F 43 45 44    ullLine;..PROCED
009650:  55 52 45 20 4C 65 66 74 3B 0D 0A 50 52 4F 43 45    URE Left;..PROCE
009660:  44 55 52 45 20 52 69 67 68 74 3B 0D 0A 50 52 4F    DURE Right;..PRO
009670:  43 45 44 55 52 45 20 44 6F 77 6E 3B 0D 0A 50 52    CEDURE Down;..PR
009680:  4F 43 45 44 55 52 45 20 55 70 3B 0D 0A 50 52 4F    OCEDURE Up;..PRO
009690:  43 45 44 55 52 45 20 55 70 53 63 72 65 65 6E 3B    CEDURE UpScreen;
0096A0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 44 6F 77 6E    ..PROCEDURE Down
0096B0:  53 63 72 65 65 6E 3B 0D 0A 50 52 4F 43 45 44 55    Screen;..PROCEDU
0096C0:  52 45 20 54 6F 70 3B 0D 0A 50 52 4F 43 45 44 55    RE Top;..PROCEDU
0096D0:  52 45 20 42 6F 74 74 6F 6D 3B 0D 0A 50 52 4F 43    RE Bottom;..PROC
0096E0:  45 44 55 52 45 20 43 68 61 6E 67 65 57 69 6E 64    EDURE ChangeWind
0096F0:  6F 77 28 69 3A 49 4E 54 45 47 45 52 29 3B 0D 0A    ow(i:INTEGER);..
009700:  4E 44 3B 28 2A 46 69 6C 65 73 4F 70 65 6E 65 64    ND;(*FilesOpened
009710:  2A 29 0D 0A 09 20 20 7C 0D 0A 09 38 3A 49 46 20    *)...  |...8:IF 
009720:  46 69 6C 65 73 4F 70 65 6E 65 64 3E 30 20 54 48    FilesOpened>0 TH
009730:  45 4E 0D 0A 09 09 49 46 20 43 6F 75 6E 74 52 65    EN....IF CountRe
009740:  66 73 28 29 3E 31 20 54 48 45 4E 20 0D 0A 09 09    fs()>1 THEN ....
009750:  09 20 20 45 6C 69 64 65 57 69 6E 64 6F 77 28 43    .  ElideWindow(C
009760:  75 72 72 65 6E 74 57 69 6E 64 6F 77 29 0D 0A 09    urrentWindow)...
009770:  09 09 20 20 43 68 61 6E 67 65 57 69 6E 64 6F 77    ..  ChangeWindow
009780:  28 31 29 3B 0D 0A 09 09 09 20 20 52 65 64 69 73    (1);.....  Redis
009790:  70 6C 61 79 3B 0D 0A 09 20 20 09 45 4C 53 45 20    play;...  .ELSE 
0097A0:  43 68 65 63 6B 52 65 6D 6F 76 65 46 69 6C 65 20    CheckRemoveFile 
0097B0:  45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 20    END;....END;... 
0097C0:  20 7C 0D 0A 09 39 3A 50 72 65 70 61 72 65 54 6F     |...9:PrepareTo
0097D0:  4C 65 61 76 65 3B 0D 0A 09 20 20 49 46 20 72 65    Leave;...  IF re
0097E0:  70 6C 79 3D 30 20 54 48 45 4E 20 48 41 4C 54 20    ply=0 THEN HALT 
0097F0:  09 45 4E 44 7C 0D 0A 09 31 30 3A 20 52 65 73 65    .END|...10: Rese
009800:  74 41 6C 6C 44 69 73 63 73 3B 0D 0A 09 20 20 20    tAllDiscs;...   
009810:  45 72 72 6F 72 4D 65 73 73 61 67 65 28 27 20 41    ErrorMessage(' A
009820:  6C 6C 20 64 69 73 63 73 20 6E 6F 77 20 72 65 61    ll discs now rea
009830:  64 2F 77 72 69 74 65 27 2C 27 20 27 29 3B 0D 0A    d/write',' ');..
009840:  09 20 20 20 45 4E 44 3B 0D 0A 09 45 4E 44 3B 20    .   END;...END; 
009850:  28 2A 49 46 20 46 69 6C 65 73 4F 70 65 6E 65 64    (*IF FilesOpened
009860:  20 65 74 63 20 2A 29 0D 0A 09 45 4E 44 20 44 6F     etc *)...END Do
009870:  4D 65 6E 75 4F 70 3B 0D 0A 09 45 4E 44 20 44 6F    MenuOp;...END Do
009880:  4D 65 6E 75 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A    Menu............
009890:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0098A0:  1A 1A 1A 1A 1A 1A 4C 69 73 74 20 54 48 45 4E 0D    ......List THEN.
0098B0:  0A 09 09 09 57 72 69 74 65 43 68 61 72 28 4C 69    ....WriteChar(Li
0098C0:  73 74 2C 44 65 76 69 63 65 29 3B 0D 0A 09 09 09    st,Device);.....
0098D0:  57 72 69 74 65 43 68 61 72 28 4C 69 73 74 2C 63    WriteChar(List,c
0098E0:  68 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    h);.....END;....
0098F0:  57 72 69 74 65 53 74 72 69 6E 67 28 4E 61 6D 65    WriteString(Name
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:  50 52 4F 43 45 44 55 52 45 20 45 6C 69 64 65 57    PROCEDURE ElideW
009A10:  69 6E 64 6F 77 28 69 3A 49 4E 54 45 47 45 52 29    indow(i:INTEGER)
009A20:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4D 61 6B    ;..PROCEDURE Mak
009A30:  65 57 69 6E 64 6F 77 3B 0D 0A 50 52 4F 43 45 44    eWindow;..PROCED
009A40:  55 52 45 20 53 63 72 6F 6C 6C 55 70 3B 0D 0A 50    URE ScrollUp;..P
009A50:  52 4F 43 45 44 55 52 45 20 53 63 72 6F 6C 6C 44    ROCEDURE ScrollD
009A60:  6F 77 6E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    own;..PROCEDURE 
009A70:  52 65 73 65 74 53 63 72 65 65 6E 50 6F 73 3B 0D    ResetScreenPos;.
009A80:  0A 50 52 4F 43 45 44 55 52 45 20 46 61 72 52 69    .PROCEDURE FarRi
009A90:  67 68 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    ght;..PROCEDURE 
009AA0:  46 61 72 4C 65 66 74 3B 0D 0A 50 52 4F 43 45 44    FarLeft;..PROCED
009AB0:  55 52 45 20 53 65 61 72 63 68 28 52 65 70 6C 61    URE Search(Repla
009AC0:  63 65 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52    ce:ARRAY OF CHAR
009AD0:  3B 52 4C 65 6E 3A 49 4E 54 45 47 45 52 3B 4C 65    ;RLen:INTEGER;Le
009AE0:  6E 3A 43 41 52 44 49 4E 41 4C 29 3A 42 4F 4F 4C    n:CARDINAL):BOOL
009AF0:  45 41 4E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    EAN;..PROCEDURE 
009B00:  4F 76 65 72 57 72 69 74 65 28 63 68 3A 43 48 41    OverWrite(ch:CHA
009B10:  52 29 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46    R);..PROCEDURE F
009B20:  69 6E 64 57 6F 72 64 28 42 61 63 6B 57 61 72 64    indWord(BackWard
009B30:  3A 42 4F 4F 4C 45 41 4E 3B 44 65 6C 65 74 65 3A    :BOOLEAN;Delete:
009B40:  42 4F 4F 4C 45 41 4E 29 3B 0D 0A 50 52 4F 43 45    BOOLEAN);..PROCE
009B50:  44 55 52 45 20 52 65 44 69 73 70 6C 61 79 3B 0D    DURE ReDisplay;.
009B60:  0A 50 52 4F 43 45 44 55 52 45 20 47 6F 54 6F 4C    .PROCEDURE GoToL
009B70:  61 62 65 6C 28 63 68 3A 43 48 41 52 29 3B 0D 0A    abel(ch:CHAR);..
009B80:  45 4E 44 20 45 64 69 74 43 6F 6E 74 72 6F 6C 2E    END EditControl.
009B90:  0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
009BA0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
009BB0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
009BC0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
009BD0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
009BE0:  1A 1A 1A 1A 1A 54 20 20 44 45 46 20 00 00 00 00    .....T  DEF ....
009BF0:  00 00 00 00 00 00 F3 45 78 0D 0D 01 69 0B 00 00    .......Ex...i...
009C00:  66 20 63 6F 2D 6F 72 64 69 6E 61 74 65 73 20 6F    f co-ordinates o
009C10:  75 74 20 6F 75 74 70 75 74 20 61 73 20 0D 0A 09    ut output as ...
009C20:  09 09 09 20 61 73 63 69 69 20 6E 75 6D 62 65 72    ... ascii number
009C30:  73 20 72 61 74 68 65 72 20 74 68 61 6E 20 62 69    s rather than bi
009C40:  6E 61 72 79 2A 29 0D 0A 09 09 43 6F 6C 75 6D 6E    nary*)....Column
009C50:  46 69 72 73 74 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A    First:BOOLEAN;..
009C60:  09 09 41 64 64 72 65 73 73 49 6E 47 72 61 70 68    ..AddressInGraph
009C70:  3A 42 4F 4F 4C 45 41 4E 3B 20 28 2A 74 72 75 65    :BOOLEAN; (*true
009C80:  20 69 66 20 63 61 6E 20 63 68 61 6E 67 65 20 63     if can change c
009C90:  6F 6F 72 64 69 6E 61 74 65 73 0D 0A 09 09 09 09    oordinates......
009CA0:  09 20 20 69 6E 20 67 72 61 70 68 20 6D 6F 64 65    .  in graph mode
009CB0:  2A 29 0D 0A 09 09 43 61 72 72 69 61 67 65 52 65    *)....CarriageRe
009CC0:  74 75 72 6E 3A 42 4F 4F 4C 45 41 4E 3B 20 28 2A    turn:BOOLEAN; (*
009CD0:  74 72 75 65 20 69 66 20 63 61 72 72 69 61 67 65    true if carriage
009CE0:  20 72 65 74 75 72 6E 20 72 65 74 75 72 6E 73 20     return returns 
009CF0:  0D 0A 09 09 09 09 09 20 20 74 6F 20 73 74 61 72    .......  to star
009D00:  74 20 6F 66 20 63 75 72 72 65 6E 74 20 72 6F 77    t of current row
009D10:  2A 29 0D 0A 09 09 53 63 72 65 65 6E 44 65 70 74    *)....ScreenDept
009D20:  68 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 53    h:CARDINAL;....S
009D30:  63 72 65 65 6E 57 69 64 74 68 3A 43 41 52 44 49    creenWidth:CARDI
009D40:  4E 41 4C 3B 0D 0A 09 09 58 59 4F 66 66 73 65 74    NAL;....XYOffset
009D50:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 45 4E    :CARDINAL;....EN
009D60:  44 3B 20 0D 0A 09 09 0D 0A 0D 0A 56 41 52 09 43    D; ........VAR.C
009D70:  6F 6E 74 72 6F 6C 3A 43 6F 6E 74 72 6F 6C 43 6F    ontrol:ControlCo
009D80:  64 65 73 3B 0D 0A 09 41 63 74 69 76 65 3A 42 4F    des;...Active:BO
009D90:  4F 4C 45 41 4E 3B 0D 0A 09 49 6E 47 72 61 70 68    OLEAN;...InGraph
009DA0:  3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09 4C 6F 77 78    :BOOLEAN;...Lowx
009DB0:  2C 48 69 67 68 78 2C 4C 6F 77 79 2C 48 69 67 68    ,Highx,Lowy,High
009DC0:  79 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 4F 75    y:CARDINAL;...Ou
009DD0:  74 70 75 74 45 6E 61 62 6C 65 64 3A 42 4F 4F 4C    tputEnabled:BOOL
009DE0:  45 41 4E 3B 0D 0A 28 2A 50 52 4F 43 45 44 55 52    EAN;..(*PROCEDUR
009DF0:  45 20 57 72 69 74 65 28 69 3A 43 48 41 52 29 3B    E Write(i:CHAR);
009E00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009E10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009E20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009E30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009E40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009E50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009E60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009E70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009E80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009E90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009EA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009EB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009EC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009ED0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009EE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009EF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009F00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009F10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009F20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009F30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009F40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009F50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009F60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009F70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009F80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009F90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009FA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009FB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009FC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009FD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009FE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
009FF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00A000:  0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 28 69 3E    ..BEGIN...IF (i>
00A010:  3D 27 20 27 29 20 41 4E 44 20 28 69 3C 3D 27 7A    =' ') AND (i<='z
00A020:  27 29 20 54 48 45 4E 20 54 65 72 6D 69 6E 61 6C    ') THEN Terminal
00A030:  2E 57 72 69 74 65 28 69 29 0D 0A 09 45 4C 53 45    .Write(i)...ELSE
00A040:  20 0D 0A 09 09 54 65 72 6D 69 6E 61 6C 2E 57 72     ....Terminal.Wr
00A050:  69 74 65 28 27 3C 27 29 3B 0D 0A 09 09 57 72 69    ite('<');....Wri
00A060:  74 65 48 65 78 28 4F 52 44 28 69 29 2C 33 29 3B    teHex(ORD(i),3);
00A070:  0D 0A 09 09 54 65 72 6D 69 6E 61 6C 2E 57 72 69    ....Terminal.Wri
00A080:  74 65 28 27 3E 27 29 3B 0D 0A 09 09 45 4E 44 3B    te('>');....END;
00A090:  0D 0A 09 45 4E 44 20 57 72 69 74 65 3B 2A 29 0D    ...END Write;*).
00A0A0:  0A 50 52 4F 43 45 44 55 52 45 20 57 72 69 74 65    .PROCEDURE Write
00A0B0:  28 62 3A 43 48 41 52 29 3B 0D 0A 56 41 52 09 69    (b:CHAR);..VAR.i
00A0C0:  3A 49 4E 54 45 47 45 52 3B 09 28 2A 6E 65 65 64    :INTEGER;.(*need
00A0D0:  65 64 20 74 6F 20 61 76 6F 69 64 20 63 6F 6E 66    ed to avoid conf
00A0E0:  6C 69 63 74 20 77 69 74 68 20 67 6C 6F 62 61 6C    lict with global
00A0F0:  2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4F    *)..BEGIN...IF O
00A100:  75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45    utputEnabled THE
00A110:  4E 0D 0A 09 09 69 3A 3D 42 44 4F 53 28 64 69 6F    N....i:=BDOS(dio
00A120:  66 63 2C 57 4F 52 44 28 62 29 29 0D 0A 09 09 45    fc,WORD(b))....E
00A130:  4E 44 3B 0D 0A 09 45 4E 44 20 57 72 69 74 65 3B    ND;...END Write;
00A140:  0D 0A 50 52 4F 43 45 44 55 52 45 20 57 72 69 74    ..PROCEDURE Writ
00A150:  65 41 73 63 69 69 28 69 3A 49 4E 54 45 47 45 52    eAscii(i:INTEGER
00A160:  29 3B 0D 0A 56 41 52 09 54 65 78 74 3A 41 52 52    );..VAR.Text:ARR
00A170:  41 59 5B 31 2E 2E 33 5D 20 4F 46 20 43 48 41 52    AY[1..3] OF CHAR
00A180:  3B 0D 0A 09 6A 2C 6B 3A 49 4E 54 45 47 45 52 3B    ;...j,k:INTEGER;
00A190:  0D 0A 42 45 47 49 4E 0D 0A 09 6A 3A 3D 33 3B 0D    ..BEGIN...j:=3;.
00A1A0:  0A 09 57 48 49 4C 45 20 28 6A 3E 30 29 20 41 4E    ..WHILE (j>0) AN
00A1B0:  44 20 28 69 3C 3E 30 29 20 44 4F 0D 0A 09 09 6B    D (i<>0) DO....k
00A1C0:  3A 3D 69 20 44 49 56 20 31 30 3B 0D 0A 09 09 54    :=i DIV 10;....T
00A1D0:  65 78 74 5B 6A 5D 3A 3D 43 48 52 28 69 2D 31 30    ext[j]:=CHR(i-10
00A1E0:  2A 6B 2B 4F 52 44 28 27 30 27 29 29 3B 0D 0A 09    *k+ORD('0'));...
00A1F0:  09 69 3A 3D 6B 3B 0D 0A 09 09 6A 3A 3D 6A 2D 31    .i:=k;....j:=j-1
00A200:  6D 64 20 73 63 72 65 65 6E 69 6F 2E 64 65 66 0D    md screenio.def.
00A210:  0A 6D 64 20 73 63 72 65 65 6E 64 75 2E 64 65 66    .md screendu.def
00A220:  0D 0A 6D 64 20 72 65 73 65 74 64 69 73 2E 64 65    ..md resetdis.de
00A230:  66 0D 0A 6D 32 20 73 63 72 65 65 6E 69 6F 2E 6D    f..m2 screenio.m
00A240:  6F 64 0D 0A 6D 64 20 6D 61 6B 65 65 64 69 74 2E    od..md makeedit.
00A250:  64 65 66 0D 0A 6D 64 20 65 64 69 74 73 74 61 74    def..md editstat
00A260:  2E 64 65 66 0D 0A 6D 32 20 6D 61 6B 65 65 64 69    .def..m2 makeedi
00A270:  74 2E 6D 6F 64 0D 0A 6D 64 20 65 64 69 74 63 6F    t.mod..md editco
00A280:  6E 74 2E 64 65 66 0D 0A 6D 64 20 6D 61 63 72 6F    nt.def..md macro
00A290:  73 2E 64 65 66 0D 0A 6D 64 20 6D 65 6E 75 2E 64    s.def..md menu.d
00A2A0:  65 66 0D 0A 6D 64 20 64 6F 6D 65 6E 75 2E 64 65    ef..md domenu.de
00A2B0:  66 0D 0A 6D 64 20 65 64 69 74 64 69 73 70 2E 64    f..md editdisp.d
00A2C0:  65 66 0D 0A 6D 64 20 73 65 74 75 70 63 61 6C 2E    ef..md setupcal.
00A2D0:  64 65 66 0D 0A 6D 64 20 65 64 69 74 63 6F 6E 74    def..md editcont
00A2E0:  2E 64 65 66 0D 0A 6D 64 20 6B 65 79 62 6F 61 72    .def..md keyboar
00A2F0:  64 2E 64 65 66 0D 0A 6D 32 20 6D 65 6E 75 2E 6D    d.def..m2 menu.m
00A300:  6F 64 0D 0A 6D 32 20 65 64 69 74 73 74 61 74 2E    od..m2 editstat.
00A310:  6D 6F 64 0D 0A 6D 32 20 6D 61 63 72 6F 73 2E 6D    mod..m2 macros.m
00A320:  6F 64 0D 0A 6D 32 20 64 6F 6D 65 6E 75 2E 6D 6F    od..m2 domenu.mo
00A330:  64 0D 0A 6D 32 20 65 64 69 74 64 69 73 70 2E 6D    d..m2 editdisp.m
00A340:  6F 64 0D 0A 6D 32 20 65 64 69 74 63 6F 6E 74 2E    od..m2 editcont.
00A350:  6D 6F 64 0D 0A 6D 32 20 6D 65 2E 6D 6F 64 0D 0A    mod..m2 me.mod..
00A360:  6D 32 20 73 63 72 65 65 6E 64 75 2E 6D 6F 64 0D    m2 screendu.mod.
00A370:  0A 6D 32 20 72 65 73 65 74 64 69 73 2E 6D 6F 64    .m2 resetdis.mod
00A380:  0D 0A 6D 32 20 6B 65 79 62 6F 61 72 64 2E 6D 6F    ..m2 keyboard.mo
00A390:  64 0D 0A 6D 32 20 73 65 74 75 70 63 61 6C 2E 6D    d..m2 setupcal.m
00A3A0:  6F 64 0D 0A 6D 32 20 6D 61 63 72 6F 73 2E 6D 6F    od..m2 macros.mo
00A3B0:  64 0D 0A 6D 32 20 6D 61 6B 65 65 64 69 74 2E 6D    d..m2 makeedit.m
00A3C0:  6F 64 0D 0A 6D 32 20 6D 65 2E 6D 6F 64 0D 0A 6D    od..m2 me.mod..m
00A3D0:  6C 20 6D 65 2F 64 0D 0A 1A 65 2E 6D 6F 64 0D 0A    l me/d...e.mod..
00A3E0:  6D 32 20 73 63 72 65 65 6E 64 75 2E 6D 6F 64 0D    m2 screendu.mod.
00A3F0:  0A 6D 32 20 72 65 73 65 74 64 69 73 2E 6D 6F 64    .m2 resetdis.mod
00A400:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 46 4F 52 20    ;....END;...FOR 
00A410:  6B 3A 3D 6A 2B 31 20 54 4F 20 33 20 44 4F 20 57    k:=j+1 TO 3 DO W
00A420:  72 69 74 65 28 54 65 78 74 5B 6B 5D 29 20 45 4E    rite(Text[k]) EN
00A430:  44 3B 0D 0A 09 45 4E 44 20 57 72 69 74 65 41 73    D;...END WriteAs
00A440:  63 69 69 3B 20 0D 0A 50 52 4F 43 45 44 55 52 45    cii; ..PROCEDURE
00A450:  20 47 6F 74 6F 78 79 28 78 2C 79 3A 43 41 52 44     Gotoxy(x,y:CARD
00A460:  49 4E 41 4C 29 3B 09 09 0D 0A 0D 0A 28 2A 09 09    INAL);......(*..
00A470:  50 6F 73 69 74 69 6F 6E 20 74 6F 20 67 69 76 65    Position to give
00A480:  6E 20 63 6F 6F 72 64 69 6E 61 74 65 73 0D 0A 09    n coordinates...
00A490:  09 74 6F 70 20 6C 65 66 74 20 69 73 20 61 6C 77    .top left is alw
00A4A0:  61 79 73 20 30 2C 30 20 0D 0A 0D 0A 09 09 78 20    ays 0,0 ......x 
00A4B0:  69 73 20 63 6F 6C 75 6D 6E 2C 20 79 20 69 73 20    is column, y is 
00A4C0:  72 6F 77 0D 0A 0D 0A 09 09 41 20 27 53 74 61 6E    row......A 'Stan
00A4D0:  64 61 72 64 27 20 53 63 72 65 65 6E 20 69 73 20    dard' Screen is 
00A4E0:  38 30 20 62 79 20 32 34 2E 20 54 68 65 20 6C 69    80 by 24. The li
00A4F0:  6D 69 74 20 69 73 20 73 65 74 20 62 79 0D 0A 09    mit is set by...
00A500:  09 74 68 65 20 74 65 72 6D 69 6E 61 6C 20 64 65    .the terminal de
00A510:  66 69 6E 69 74 69 6F 6E 20 66 69 6C 65 09 2A 29    finition file.*)
00A520:  0D 0A 56 41 52 09 69 2C 6A 3A 49 4E 54 45 47 45    ..VAR.i,j:INTEGE
00A530:  52 3B 0D 0A 09 69 6E 67 3A 42 4F 4F 4C 45 41 4E    R;...ing:BOOLEAN
00A540:  3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46    ;..BEGIN..    IF
00A550:  20 41 63 74 69 76 65 20 41 4E 44 20 4F 75 74 70     Active AND Outp
00A560:  75 74 45 6E 61 62 6C 65 64 20 54 48 45 4E 0D 0A    utEnabled THEN..
00A570:  09 57 49 54 48 20 43 6F 6E 74 72 6F 6C 20 44 4F    .WITH Control DO
00A580:  0D 0A 09 09 69 6E 67 3A 3D 49 6E 47 72 61 70 68    ....ing:=InGraph
00A590:  3B 0D 0A 09 09 49 46 20 49 6E 47 72 61 70 68 20    ;....IF InGraph 
00A5A0:  54 48 45 4E 20 53 63 72 65 65 6E 43 6F 6E 74 72    THEN ScreenContr
00A5B0:  6F 6C 28 45 6E 64 47 72 61 70 68 29 20 45 4E 44    ol(EndGraph) END
00A5C0:  3B 0D 0A 09 09 53 63 72 65 65 6E 43 6F 6E 74 72    ;....ScreenContr
00A5D0:  6F 6C 28 53 74 61 72 74 78 79 29 3B 0D 0A 09 09    ol(Startxy);....
00A5E0:  49 46 20 43 6F 6C 75 6D 6E 46 69 72 73 74 20 54    IF ColumnFirst T
00A5F0:  48 45 4E 0D 0A 09 09 09 69 3A 3D 78 2B 58 59 4F    HEN.....i:=x+XYO
00A600:  6F 6E 2C 53 65 74 50 6F 73 69 74 69 6F 6E 2C 52    on,SetPosition,R
00A610:  65 61 64 4E 65 78 74 43 68 61 72 2C 46 69 6E 64    eadNextChar,Find
00A620:  53 74 72 69 6E 67 2C 0D 0A 09 09 4C 61 62 65 6C    String,....Label
00A630:  4F 70 3B 0D 0A 46 52 4F 4D 20 45 64 69 74 44 69    Op;..FROM EditDi
00A640:  73 70 6C 61 79 20 49 4D 50 4F 52 54 20 44 69 73    splay IMPORT Dis
00A650:  70 6C 61 79 46 69 6C 65 2C 45 72 72 6F 72 4D 65    playFile,ErrorMe
00A660:  73 73 61 67 65 2C 57 69 6E 64 6F 77 73 2C 4C 69    ssage,Windows,Li
00A670:  6E 65 73 50 65 72 57 69 6E 64 6F 77 3B 0D 0A 46    nesPerWindow;..F
00A680:  52 4F 4D 20 53 63 72 65 65 6E 49 4F 20 49 4D 50    ROM ScreenIO IMP
00A690:  4F 52 54 20 45 64 69 74 73 2C 44 65 6C 43 68 61    ORT Edits,DelCha
00A6A0:  72 2C 44 65 6C 4C 69 6E 65 2C 49 6E 73 43 68 61    r,DelLine,InsCha
00A6B0:  72 2C 49 6E 73 4C 69 6E 65 2C 44 65 6C 45 6F 6C    r,InsLine,DelEol
00A6C0:  2C 4D 6F 76 65 55 70 2C 0D 0A 09 09 09 4D 6F 76    ,MoveUp,.....Mov
00A6D0:  65 44 6F 77 6E 2C 4D 6F 76 65 4C 65 66 74 2C 4D    eDown,MoveLeft,M
00A6E0:  6F 76 65 52 69 67 68 74 2C 47 6F 74 6F 78 79 2C    oveRight,Gotoxy,
00A6F0:  43 6C 65 61 72 53 63 72 65 65 6E 2C 0D 0A 09 09    ClearScreen,....
00A700:  09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 2C 0D    .ScreenControl,.
00A710:  0A 09 09 09 53 63 72 65 65 6E 57 69 64 74 68 2C    ....ScreenWidth,
00A720:  53 63 72 65 65 6E 44 65 70 74 68 2C 4D 61 64 65    ScreenDepth,Made
00A730:  43 68 61 6E 67 65 3B 0D 0A 46 52 4F 4D 20 49 6E    Change;..FROM In
00A740:  74 4C 6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41    tLogic IMPORT IA
00A750:  4E 44 3B 09 0D 0A 46 52 4F 4D 09 53 59 53 54 45    ND;...FROM.SYSTE
00A760:  4D 20 49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 43    M IMPORT ADR;..C
00A770:  4F 4E 53 54 09 43 52 3D 30 64 78 3B 0D 0A 09 54    ONST.CR=0dx;...T
00A780:  41 42 3D 30 39 78 3B 0D 0A 09 4C 46 3D 30 61 78    AB=09x;...LF=0ax
00A790:  3B 0D 0A 09 45 4F 46 3D 31 61 78 3B 0D 0A 28 2A    ;...EOF=1ax;..(*
00A7A0:  09 41 20 72 65 6D 61 72 6B 20 6F 6E 20 74 68 65    .A remark on the
00A7B0:  20 75 73 65 20 6F 66 20 4C 69 6E 65 50 6F 73 20     use of LinePos 
00A7C0:  61 6E 64 20 63 75 72 78 0D 0A 0D 0A 09 4C 69 6E    and curx.....Lin
00A7D0:  65 50 6F 73 20 61 6C 77 61 79 73 20 70 6F 69 6E    ePos always poin
00A7E0:  74 73 20 74 6F 20 74 68 65 20 6E 75 6D 62 65 72    ts to the number
00A7F0:  20 6F 66 20 74 68 65 20 63 68 61 72 61 63 74 65     of the characte
00A800:  66 66 73 65 74 3B 0D 0A 09 09 09 6A 3A 3D 79 2B    ffset;.....j:=y+
00A810:  58 59 4F 66 66 73 65 74 3B 0D 0A 09 09 45 4C 53    XYOffset;....ELS
00A820:  45 0D 0A 09 09 09 69 3A 3D 79 2B 58 59 4F 66 66    E.....i:=y+XYOff
00A830:  73 65 74 3B 0D 0A 09 09 09 6A 3A 3D 78 2B 58 59    set;.....j:=x+XY
00A840:  4F 66 66 73 65 74 3B 0D 0A 09 09 09 45 4E 44 3B    Offset;.....END;
00A850:  0D 0A 09 09 49 46 20 41 73 63 69 69 20 54 48 45    ....IF Ascii THE
00A860:  4E 20 57 72 69 74 65 41 73 63 69 69 28 69 29 0D    N WriteAscii(i).
00A870:  0A 09 09 45 4C 53 45 20 57 72 69 74 65 28 43 48    ...ELSE Write(CH
00A880:  52 28 69 29 29 20 45 4E 44 3B 0D 0A 09 09 53 63    R(i)) END;....Sc
00A890:  72 65 65 6E 43 6F 6E 74 72 6F 6C 28 4D 69 64 64    reenControl(Midd
00A8A0:  6C 65 58 59 29 3B 0D 0A 09 09 49 46 20 41 73 63    leXY);....IF Asc
00A8B0:  69 69 20 54 48 45 4E 20 57 72 69 74 65 41 73 63    ii THEN WriteAsc
00A8C0:  69 69 28 6A 29 0D 0A 09 09 45 4C 53 45 20 57 72    ii(j)....ELSE Wr
00A8D0:  69 74 65 28 43 48 52 28 6A 29 29 20 45 4E 44 3B    ite(CHR(j)) END;
00A8E0:  0D 0A 09 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F    ....ScreenContro
00A8F0:  6C 28 45 6E 64 58 59 29 3B 0D 0A 09 09 45 4E 44    l(EndXY);....END
00A900:  3B 20 28 2A 57 49 54 48 2A 29 0D 0A 09 49 46 20    ; (*WITH*)...IF 
00A910:  69 6E 67 20 54 48 45 4E 20 53 63 72 65 65 6E 43    ing THEN ScreenC
00A920:  6F 6E 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70    ontrol(StartGrap
00A930:  68 29 20 45 4E 44 3B 0D 0A 09 45 4E 44 28 2A 49    h) END;...END(*I
00A940:  46 2A 29 0D 0A 20 20 20 20 45 4E 44 20 47 6F 74    F*)..    END Got
00A950:  6F 78 79 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52    oxy;....PROCEDUR
00A960:  45 20 4C 6F 61 64 54 65 72 6D 43 6F 64 65 28 66    E LoadTermCode(f
00A970:  69 6C 65 6E 61 6D 65 3A 46 69 6C 65 4E 61 6D 65    ilename:FileName
00A980:  29 3B 0D 0A 56 41 52 09 66 6E 3A 46 49 4C 45 3B    );..VAR.fn:FILE;
00A990:  0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52    ...reply:INTEGER
00A9A0:  3B 0D 0A 0D 0A 28 2A 09 09 64 65 66 69 6E 65 20    ;....(*..define 
00A9B0:  61 20 74 65 6D 70 6F 72 61 72 79 20 61 72 65 61    a temporary area
00A9C0:  20 66 6F 72 20 72 65 61 64 69 6E 67 20 6F 66 20     for reading of 
00A9D0:  66 69 6C 65 0D 0A 09 09 69 74 20 6D 75 73 74 20    file....it must 
00A9E0:  62 65 20 65 71 75 61 6C 20 69 6E 20 73 69 7A 65    be equal in size
00A9F0:  20 74 6F 20 74 68 65 20 73 69 7A 65 20 6F 66 20     to the size of 
00AA00:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
00AA10:  4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D    ODULE ScreenIO;.
00AA20:  0A 46 52 4F 4D 20 54 65 72 6D 69 6E 61 6C 20 49    .FROM Terminal I
00AA30:  4D 50 4F 52 54 20 43 68 61 72 52 6F 75 74 69 6E    MPORT CharRoutin
00AA40:  65 2C 43 68 61 72 45 6E 61 62 6C 65 64 3B 0D 0A    e,CharEnabled;..
00AA50:  46 52 4F 4D 20 46 69 6C 65 73 20 49 4D 50 4F 52    FROM Files IMPOR
00AA60:  54 20 4C 6F 6F 6B 75 70 2C 46 49 4C 45 2C 52 65    T Lookup,FILE,Re
00AA70:  61 64 42 6C 6F 63 6B 3B 0D 0A 46 52 4F 4D 20 46    adBlock;..FROM F
00AA80:  61 73 74 4D 6F 76 65 20 49 4D 50 4F 52 54 20 4D    astMove IMPORT M
00AA90:  6F 76 65 75 70 3B 0D 0A 46 52 4F 4D 20 53 59 53    oveup;..FROM SYS
00AAA0:  54 45 4D 20 49 4D 50 4F 52 54 20 41 44 52 2C 53    TEM IMPORT ADR,S
00AAB0:  49 5A 45 2C 57 4F 52 44 3B 0D 0A 46 52 4F 4D 09    IZE,WORD;..FROM.
00AAC0:  43 50 4D 20 49 4D 50 4F 52 54 20 64 69 6F 66 63    CPM IMPORT diofc
00AAD0:  2C 42 44 4F 53 3B 0D 0A 28 2A 09 53 63 72 65 65    ,BDOS;..(*.Scree
00AAE0:  6E 20 68 61 6E 64 6C 69 6E 67 20 72 6F 75 74 69    n handling routi
00AAF0:  6E 65 73 20 66 6F 72 20 63 75 72 73 6F 72 20 70    nes for cursor p
00AB00:  6F 73 69 74 69 6F 6E 2C 20 61 74 74 72 69 62 75    osition, attribu
00AB10:  74 65 20 65 74 63 0D 0A 0D 0A 09 54 68 69 73 20    te etc.....This 
00AB20:  6D 6F 64 75 6C 65 20 69 73 20 73 70 65 63 69 66    module is specif
00AB30:  69 63 20 74 6F 20 74 68 69 73 20 63 6F 6D 70 69    ic to this compi
00AB40:  6C 65 72 2A 29 0D 0A 54 59 50 45 0D 0A 09 43 6F    ler*)..TYPE...Co
00AB50:  6E 74 72 6F 6C 53 65 71 75 65 6E 63 65 3D 52 45    ntrolSequence=RE
00AB60:  43 4F 52 44 0D 0A 09 09 43 68 61 72 73 3A 41 52    CORD....Chars:AR
00AB70:  52 41 59 5B 31 2E 2E 37 5D 20 4F 46 20 43 48 41    RAY[1..7] OF CHA
00AB80:  52 3B 0D 0A 09 09 53 65 71 4C 65 6E 3A 42 59 54    R;....SeqLen:BYT
00AB90:  45 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 0D 0A    E;....END;......
00ABA0:  09 43 6F 6E 74 72 6F 6C 43 6F 64 65 73 3D 52 45    .ControlCodes=RE
00ABB0:  43 4F 52 44 0D 0A 09 09 45 64 69 74 53 65 71 75    CORD....EditSequ
00ABC0:  65 6E 63 65 73 3A 41 52 52 41 59 20 45 64 69 74    ences:ARRAY Edit
00ABD0:  73 20 4F 46 20 43 6F 6E 74 72 6F 6C 53 65 71 75    s OF ControlSequ
00ABE0:  65 6E 63 65 3B 0D 0A 09 09 41 73 63 69 69 3A 42    ence;....Ascii:B
00ABF0:  4F 4F 4C 45 41 4E 3B 20 28 2A 74 72 75 65 20 69    OOLEAN; (*true i
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:  63 6F 6E 74 72 6F 6C 2C 20 70 61 64 64 65 64 0D    control, padded.
00AD10:  0A 09 09 6F 75 74 20 74 6F 20 61 20 6D 75 6C 74    ...out to a mult
00AD20:  69 70 6C 65 20 6F 66 20 31 32 38 20 62 79 74 65    iple of 128 byte
00AD30:  73 2A 29 0D 0A 0D 0A 09 62 6C 6F 63 6B 3A 41 52    s*).....block:AR
00AD40:  52 41 59 5B 30 2E 2E 31 32 38 2A 28 53 49 5A 45    RAY[0..128*(SIZE
00AD50:  28 43 6F 6E 74 72 6F 6C 29 20 44 49 56 20 31 32    (Control) DIV 12
00AD60:  38 29 2B 31 32 37 5D 20 4F 46 20 43 48 41 52 3B    8)+127] OF CHAR;
00AD70:  0D 0A 0D 0A 28 2A 09 09 4C 6F 61 64 20 74 68 65    ....(*..Load the
00AD80:  20 74 65 72 6D 69 6E 61 6C 20 64 65 66 69 6E 69     terminal defini
00AD90:  74 69 6F 6E 20 66 6F 72 20 74 68 65 20 63 75 72    tion for the cur
00ADA0:  72 65 6E 74 20 74 65 72 6D 69 6E 61 6C 0D 0A 0D    rent terminal...
00ADB0:  0A 09 09 66 69 6C 65 6E 61 6D 65 20 69 73 20 74    ...filename is t
00ADC0:  68 65 20 6E 61 6D 65 20 6F 66 20 74 68 65 20 66    he name of the f
00ADD0:  69 6C 65 20 74 6F 20 72 65 61 64 0D 0A 0D 0A 09    ile to read.....
00ADE0:  09 4E 6F 72 6D 61 6C 6C 79 2C 20 77 68 65 6E 20    .Normally, when 
00ADF0:  74 68 65 20 70 72 6F 67 72 61 6D 20 69 73 20 6C    the program is l
00AE00:  6F 61 64 65 64 2C 20 74 68 65 20 66 69 6C 65 0D    oaded, the file.
00AE10:  0A 09 09 27 54 45 52 4D 49 4E 41 4C 2E 43 4F 44    ...'TERMINAL.COD
00AE20:  27 20 69 73 20 6C 6F 61 64 65 64 20 66 72 6F 6D    ' is loaded from
00AE30:  20 74 68 65 20 6C 6F 67 67 65 64 20 69 6E 20 64     the logged in d
00AE40:  69 73 63 0D 0A 09 09 54 68 69 73 20 72 6F 75 74    isc....This rout
00AE50:  69 6E 65 20 6F 6E 6C 79 20 6E 65 65 64 73 20 74    ine only needs t
00AE60:  6F 20 62 65 20 75 73 65 64 20 69 66 20 74 68 61    o be used if tha
00AE70:  74 0D 0A 09 09 66 69 6C 65 20 69 73 20 6E 6F 74    t....file is not
00AE80:  20 74 68 65 20 6F 6E 65 20 74 6F 20 75 73 65 20     the one to use 
00AE90:  28 65 67 2C 20 74 6F 20 73 77 61 70 20 73 63 72    (eg, to swap scr
00AEA0:  65 65 6E 73 2A 29 20 0D 0A 0D 0A 42 45 47 49 4E    eens*) ....BEGIN
00AEB0:  0D 0A 09 4C 6F 6F 6B 75 70 28 66 6E 2C 66 69 6C    ...Lookup(fn,fil
00AEC0:  65 6E 61 6D 65 2C 72 65 70 6C 79 29 3B 0D 0A 09    ename,reply);...
00AED0:  49 46 20 72 65 70 6C 79 3C 30 20 54 48 45 4E 20    IF reply<0 THEN 
00AEE0:  41 63 74 69 76 65 3A 3D 46 41 4C 53 45 0D 0A 09    Active:=FALSE...
00AEF0:  45 4C 53 45 0D 0A 09 09 52 65 61 64 42 6C 6F 63    ELSE....ReadBloc
00AF00:  0A 09 47 6F 74 6F 78 79 28 30 2C 45 6E 64 6F 66    ..Gotoxy(0,Endof
00AF10:  57 69 6E 64 6F 77 29 3B 20 20 20 0D 0A 09 53 63    Window);   ...Sc
00AF20:  72 65 65 6E 43 6F 6E 74 72 6F 6C 28 49 6E 73 4C    reenControl(InsL
00AF30:  69 6E 65 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F    ine);...ScreenCo
00AF40:  6E 74 72 6F 6C 28 44 65 6C 45 6F 6C 29 3B 20 20    ntrol(DelEol);  
00AF50:  20 0D 0A 09 45 4E 44 20 53 63 72 6F 6C 6C 57 69     ...END ScrollWi
00AF60:  6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 28 2A 09    ndowDown;....(*.
00AF70:  43 75 72 73 6F 72 20 62 6C 69 6E 6B 20 72 6F 75    Cursor blink rou
00AF80:  74 69 6E 65 20 2D 20 6F 6E 6C 79 20 73 75 70 70    tine - only supp
00AF90:  6F 72 74 65 64 20 69 6E 20 6D 65 6D 6F 72 79 20    orted in memory 
00AFA0:  6D 61 70 70 65 64 0D 0A 09 76 65 72 73 69 6F 6E    mapped...version
00AFB0:  20 6F 66 20 73 63 72 65 65 6E 69 6F 2A 29 0D 0A     of screenio*)..
00AFC0:  50 52 4F 43 45 44 55 52 45 20 4F 75 74 70 75 74    PROCEDURE Output
00AFD0:  54 6F 53 63 72 65 65 6E 28 4F 6E 3A 42 4F 4F 4C    ToScreen(On:BOOL
00AFE0:  45 41 4E 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4F    EAN);..BEGIN...O
00AFF0:  75 74 70 75 74 45 6E 61 62 6C 65 64 3A 3D 4F 6E    utputEnabled:=On
00B000:  0D 0A 09 45 4E 44 20 4F 75 74 70 75 74 54 6F 53    ...END OutputToS
00B010:  63 72 65 65 6E 3B 09 0D 0A 0D 0A 42 45 47 49 4E    creen;.....BEGIN
00B020:  09 28 2A 49 6E 69 74 69 61 6C 69 73 61 74 69 6F    .(*Initialisatio
00B030:  6E 20 70 61 72 74 2A 29 0D 0A 09 43 68 61 72 52    n part*)...CharR
00B040:  6F 75 74 69 6E 65 3A 3D 57 72 69 74 65 3B 0D 0A    outine:=Write;..
00B050:  09 43 68 61 72 45 6E 61 62 6C 65 64 3A 3D 54 52    .CharEnabled:=TR
00B060:  55 45 3B 09 0D 0A 0D 0A 09 49 6E 47 72 61 70 68    UE;......InGraph
00B070:  3A 3D 46 41 4C 53 45 3B 0D 0A 09 4F 75 74 70 75    :=FALSE;...Outpu
00B080:  74 45 6E 61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D    tEnabled:=TRUE;.
00B090:  0A 09 4C 6F 61 64 54 65 72 6D 43 6F 64 65 28 27    ..LoadTermCode('
00B0A0:  43 4F 4E 54 52 4F 4C 2E 44 41 54 27 29 3B 0D 0A    CONTROL.DAT');..
00B0B0:  09 4C 6F 77 78 3A 3D 30 3B 4C 6F 77 79 3A 3D 30    .Lowx:=0;Lowy:=0
00B0C0:  3B 0D 0A 09 48 69 67 68 78 3A 3D 39 39 39 3B 48    ;...Highx:=999;H
00B0D0:  69 67 68 79 3A 3D 39 39 39 3B 0D 0A 09 53 63 72    ighy:=999;...Scr
00B0E0:  65 65 6E 57 69 64 74 68 3A 3D 43 6F 6E 74 72 6F    eenWidth:=Contro
00B0F0:  6C 2E 53 63 72 65 65 6E 57 69 64 74 68 3B 0D 0A    l.ScreenWidth;..
00B100:  6B 28 66 6E 2C 41 44 52 28 62 6C 6F 63 6B 29 2C    k(fn,ADR(block),
00B110:  30 2C 53 49 5A 45 28 62 6C 6F 63 6B 29 2C 72 65    0,SIZE(block),re
00B120:  70 6C 79 29 3B 0D 0A 09 09 41 63 74 69 76 65 3A    ply);....Active:
00B130:  3D 72 65 70 6C 79 3E 3D 53 49 5A 45 28 43 6F 6E    =reply>=SIZE(Con
00B140:  74 72 6F 6C 29 3B 0D 0A 09 09 4D 6F 76 65 75 70    trol);....Moveup
00B150:  28 41 44 52 28 62 6C 6F 63 6B 29 2C 41 44 52 28    (ADR(block),ADR(
00B160:  43 6F 6E 74 72 6F 6C 29 2C 53 49 5A 45 28 43 6F    Control),SIZE(Co
00B170:  6E 74 72 6F 6C 29 29 3B 0D 0A 09 09 45 4E 44 3B    ntrol));....END;
00B180:  0D 0A 09 53 63 72 65 65 6E 57 69 64 74 68 3A 3D    ...ScreenWidth:=
00B190:  43 6F 6E 74 72 6F 6C 2E 53 63 72 65 65 6E 57 69    Control.ScreenWi
00B1A0:  64 74 68 3B 0D 0A 09 53 63 72 65 65 6E 44 65 70    dth;...ScreenDep
00B1B0:  74 68 3A 3D 43 6F 6E 74 72 6F 6C 2E 53 63 72 65    th:=Control.Scre
00B1C0:  65 6E 44 65 70 74 68 3B 0D 0A 09 45 4E 44 20 4C    enDepth;...END L
00B1D0:  6F 61 64 54 65 72 6D 43 6F 64 65 3B 0D 0A 0D 0A    oadTermCode;....
00B1E0:  50 52 4F 43 45 44 55 52 45 20 53 63 72 65 65 6E    PROCEDURE Screen
00B1F0:  43 6F 6E 74 72 6F 6C 28 73 3A 45 64 69 74 73 29    Control(s:Edits)
00B200:  3B 0D 0A 0D 0A 28 2A 09 09 50 65 72 66 6F 72 6D    ;....(*..Perform
00B210:  20 61 20 73 63 72 65 65 6E 20 63 6F 6E 74 72 6F     a screen contro
00B220:  6C 20 6F 70 65 72 61 74 69 6F 6E 2A 29 0D 0A 56    l operation*)..V
00B230:  41 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    AR.i:CARDINAL;..
00B240:  42 45 47 49 4E 0D 0A 09 49 46 20 41 63 74 69 76    BEGIN...IF Activ
00B250:  65 20 41 4E 44 20 4F 75 74 70 75 74 45 6E 61 62    e AND OutputEnab
00B260:  6C 65 64 20 54 48 45 4E 0D 0A 09 09 57 49 54 48    led THEN....WITH
00B270:  20 43 6F 6E 74 72 6F 6C 2E 45 64 69 74 53 65 71     Control.EditSeq
00B280:  75 65 6E 63 65 73 5B 73 5D 20 44 4F 0D 0A 09 09    uences[s] DO....
00B290:  09 4D 61 64 65 43 68 61 6E 67 65 3A 3D 53 65 71    .MadeChange:=Seq
00B2A0:  4C 65 6E 3E 30 3B 0D 0A 09 09 09 46 4F 52 20 69    Len>0;.....FOR i
00B2B0:  3A 3D 31 20 54 4F 20 4F 52 44 28 53 65 71 4C 65    :=1 TO ORD(SeqLe
00B2C0:  6E 29 20 44 4F 20 57 72 69 74 65 28 43 68 61 72    n) DO Write(Char
00B2D0:  73 5B 69 5D 29 20 45 4E 44 3B 0D 0A 09 09 09 45    s[i]) END;.....E
00B2E0:  4E 44 3B 0D 0A 09 09 49 46 20 4E 4F 54 20 43 6F    ND;....IF NOT Co
00B2F0:  6E 74 72 6F 6C 2E 41 64 64 72 65 73 73 49 6E 47    ntrol.AddressInG
00B300:  09 53 63 72 65 65 6E 44 65 70 74 68 3A 3D 43 6F    .ScreenDepth:=Co
00B310:  6E 74 72 6F 6C 2E 53 63 72 65 65 6E 44 65 70 74    ntrol.ScreenDept
00B320:  68 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72    h;...ScreenContr
00B330:  6F 6C 28 43 6C 65 61 72 53 63 72 65 65 6E 29 3B    ol(ClearScreen);
00B340:  0D 0A 09 45 4E 44 20 53 63 72 65 65 6E 49 4F 2E    ...END ScreenIO.
00B350:  0D 0A 1A 79 3A 3D 39 39 39 3B 0D 0A 09 53 63 72    ...y:=999;...Scr
00B360:  65 65 6E 57 69 64 74 68 3A 3D 43 6F 6E 74 72 6F    eenWidth:=Contro
00B370:  6C 2E 53 63 72 65 65 6E 57 69 64 74 68 3B 0D 0A    l.ScreenWidth;..
00B380:  61 73 74 4D 6F 76 65 20 49 4D 50 4F 52 54 20 4D    astMove IMPORT M
00B390:  6F 76 65 75 70 3B 0D 0A 46 52 4F 4D 20 53 59 53    oveup;..FROM SYS
00B3A0:  54 45 4D 20 49 4D 50 4F 52 54 20 41 44 52 2C 53    TEM IMPORT ADR,S
00B3B0:  49 5A 45 2C 57 4F 52 44 3B 0D 0A 46 52 4F 4D 09    IZE,WORD;..FROM.
00B3C0:  43 50 4D 20 49 4D 50 4F 52 54 20 77 63 63 66 63    CPM IMPORT wccfc
00B3D0:  2C 42 44 4F 53 3B 0D 0A 28 2A 09 53 63 72 65 65    ,BDOS;..(*.Scree
00B3E0:  6E 20 68 61 6E 64 6C 69 6E 67 20 72 6F 75 74 69    n handling routi
00B3F0:  6E 65 73 20 66 6F 72 20 63 75 72 73 6F 72 20 70    nes for cursor p
00B400:  6F 73 69 74 69 6F 6E 2C 20 61 74 74 72 69 62 75    osition, attribu
00B410:  74 65 20 65 74 63 0D 0A 0D 0A 09 54 68 69 73 20    te etc.....This 
00B420:  6D 6F 64 75 6C 65 20 69 73 20 73 70 65 63 69 66    module is specif
00B430:  69 63 20 74 6F 20 74 68 69 73 20 63 6F 6D 70 69    ic to this compi
00B440:  6C 65 72 2A 29 0D 0A 54 59 50 45 0D 0A 09 43 6F    ler*)..TYPE...Co
00B450:  6E 74 72 6F 6C 53 65 71 75 65 6E 63 65 3D 52 45    ntrolSequence=RE
00B460:  43 4F 52 44 0D 0A 09 09 43 68 61 72 73 3A 41 52    CORD....Chars:AR
00B470:  52 41 59 5B 31 2E 2E 37 5D 20 4F 46 20 43 48 41    RAY[1..7] OF CHA
00B480:  52 3B 0D 0A 09 09 53 65 71 4C 65 6E 3A 42 59 54    R;....SeqLen:BYT
00B490:  45 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 0D 0A    E;....END;......
00B4A0:  09 43 6F 6E 74 72 6F 6C 43 6F 64 65 73 3D 52 45    .ControlCodes=RE
00B4B0:  43 4F 52 44 0D 0A 09 09 45 64 69 74 53 65 71 75    CORD....EditSequ
00B4C0:  65 6E 63 65 73 3A 41 52 52 41 59 20 45 64 69 74    ences:ARRAY Edit
00B4D0:  73 20 4F 46 20 43 6F 6E 74 72 6F 6C 53 65 71 75    s OF ControlSequ
00B4E0:  65 6E 63 65 3B 0D 0A 09 09 41 73 63 69 69 3A 42    ence;....Ascii:B
00B4F0:  4F 4F 4C 45 41 4E 3B 20 28 2A 74 72 75 65 20 69    OOLEAN; (*true i
00B500:  72 61 70 68 20 54 48 45 4E 0D 0A 09 09 09 49 46    raph THEN.....IF
00B510:  20 73 3D 53 74 61 72 74 47 72 61 70 68 20 54 48     s=StartGraph TH
00B520:  45 4E 20 49 6E 47 72 61 70 68 3A 3D 54 52 55 45    EN InGraph:=TRUE
00B530:  0D 0A 09 09 09 45 4C 53 49 46 20 73 3D 45 6E 64    .....ELSIF s=End
00B540:  47 72 61 70 68 20 54 48 45 4E 20 49 6E 47 72 61    Graph THEN InGra
00B550:  70 68 3A 3D 46 41 4C 53 45 20 45 4E 44 3B 0D 0A    ph:=FALSE END;..
00B560:  09 09 09 45 4E 44 3B 0D 0A 09 45 4C 53 45 20 20    ...END;...ELSE  
00B570:  4D 61 64 65 43 68 61 6E 67 65 3A 3D 46 41 4C 53    MadeChange:=FALS
00B580:  45 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44    E;....END;...END
00B590:  20 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 3B 0D     ScreenControl;.
00B5A0:  0A 50 52 4F 43 45 44 55 52 45 20 49 6E 42 6F 75    .PROCEDURE InBou
00B5B0:  6E 64 28 78 2C 79 3A 43 41 52 44 49 4E 41 4C 3B    nd(x,y:CARDINAL;
00B5C0:  63 68 3A 45 64 69 74 73 29 3B 0D 0A 42 45 47 49    ch:Edits);..BEGI
00B5D0:  4E 0D 0A 09 49 46 20 09 28 78 3E 3D 4C 6F 77 78    N...IF .(x>=Lowx
00B5E0:  29 20 41 4E 44 20 28 78 3C 3D 48 69 67 68 78 29    ) AND (x<=Highx)
00B5F0:  0D 0A 09 20 20 41 4E 44 09 28 79 3E 3D 4C 6F 77    ...  AND.(y>=Low
00B600:  79 29 20 41 4E 44 20 28 79 3C 3D 48 69 67 68 79    y) AND (y<=Highy
00B610:  29 20 54 48 45 4E 20 0D 0A 09 09 53 63 72 65 65    ) THEN ....Scree
00B620:  6E 43 6F 6E 74 72 6F 6C 28 63 68 29 3B 0D 0A 09    nControl(ch);...
00B630:  09 45 4E 44 0D 0A 09 45 4E 44 20 49 6E 42 6F 75    .END...END InBou
00B640:  6E 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20    nd;..PROCEDURE  
00B650:  44 72 61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32    DrawBox(x1,y1,x2
00B660:  2C 79 32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A    ,y2:CARDINAL);..
00B670:  0D 0A 28 2A 09 09 64 72 61 77 20 61 20 62 6F 78    ..(*..draw a box
00B680:  20 66 6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E     for a window on
00B690:  20 74 68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09     the screen.....
00B6A0:  09 78 31 2C 79 31 20 20 69 73 20 74 68 65 20 6C    .x1,y1  is the l
00B6B0:  6F 77 65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72    ower left corner
00B6C0:  0D 0A 09 09 78 32 2C 79 32 20 20 69 73 20 75 70    ....x2,y2  is up
00B6D0:  70 65 72 20 72 69 67 68 74 20 63 6F 72 6E 65 72    per right corner
00B6E0:  2A 29 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E    *)..VAR.i:CARDIN
00B6F0:  41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20    AL;..BEGIN..    
00B700:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
00B710:  4F 44 55 4C 45 20 45 64 69 74 43 6F 6E 74 72 6F    ODULE EditContro
00B720:  6C 3B 0D 0A 0D 0A 28 2A 09 45 64 69 74 6F 72 20    l;....(*.Editor 
00B730:  63 6F 6E 74 72 6F 6C 20 2D 20 64 61 74 61 20 61    control - data a
00B740:  72 65 61 73 20 66 6F 72 20 66 69 6C 65 20 61 6E    reas for file an
00B750:  64 20 72 6F 75 74 69 6E 65 73 20 77 68 69 63 68    d routines which
00B760:  20 61 63 74 75 61 6C 6C 79 0D 0A 09 70 65 72 66     actually...perf
00B770:  6F 72 6D 20 65 64 69 74 20 66 75 6E 63 74 69 6F    orm edit functio
00B780:  6E 73 20 62 79 20 63 61 6C 6C 69 6E 67 20 6D 61    ns by calling ma
00B790:  6B 65 65 64 69 74 20 74 6F 20 65 64 69 74 20 74    keedit to edit t
00B7A0:  68 65 20 66 69 6C 65 20 61 6E 64 0D 0A 09 65 64    he file and...ed
00B7B0:  69 74 64 69 73 70 20 74 6F 20 63 68 61 6E 67 65    itdisp to change
00B7C0:  20 74 68 65 20 73 63 72 65 65 6E 2A 29 0D 0A 0D     the screen*)...
00B7D0:  0A 46 52 4F 4D 20 4D 61 6B 65 45 64 69 74 73 20    .FROM MakeEdits 
00B7E0:  49 4D 50 4F 52 54 20 49 6E 73 43 68 61 72 73 2C    IMPORT InsChars,
00B7F0:  44 65 6C 43 68 61 72 73 2C 52 65 74 72 6C 69 6E    DelChars,Retrlin
00B800:  65 2C 42 61 63 6B 4F 6E 65 43 68 61 72 2C 46 6F    e,BackOneChar,Fo
00B810:  72 77 61 72 64 4F 6E 65 43 68 61 72 2C 0D 0A 09    rwardOneChar,...
00B820:  09 47 65 74 43 75 72 72 65 6E 74 43 68 61 72 2C    .GetCurrentChar,
00B830:  47 65 74 50 6F 73 69 74 69 6F 6E 2C 53 65 74 50    GetPosition,SetP
00B840:  6F 73 69 74 69 6F 6E 2C 52 65 61 64 4E 65 78 74    osition,ReadNext
00B850:  43 68 61 72 2C 46 69 6E 64 53 74 72 69 6E 67 2C    Char,FindString,
00B860:  0D 0A 09 09 4C 61 62 65 6C 4F 70 3B 0D 0A 46 52    ....LabelOp;..FR
00B870:  4F 4D 20 45 64 69 74 44 69 73 70 6C 61 79 20 49    OM EditDisplay I
00B880:  4D 50 4F 52 54 20 44 69 73 70 6C 61 79 46 69 6C    MPORT DisplayFil
00B890:  65 2C 45 72 72 6F 72 4D 65 73 73 61 67 65 2C 57    e,ErrorMessage,W
00B8A0:  69 6E 64 6F 77 73 2C 4C 69 6E 65 73 50 65 72 57    indows,LinesPerW
00B8B0:  69 6E 64 6F 77 3B 0D 0A 46 52 4F 4D 20 53 63 72    indow;..FROM Scr
00B8C0:  65 65 6E 49 4F 20 49 4D 50 4F 52 54 20 45 64 69    eenIO IMPORT Edi
00B8D0:  74 73 2C 44 65 6C 43 68 61 72 2C 44 65 6C 4C 69    ts,DelChar,DelLi
00B8E0:  6E 65 2C 49 6E 73 43 68 61 72 2C 49 6E 73 4C 69    ne,InsChar,InsLi
00B8F0:  6E 65 2C 44 65 6C 45 6F 6C 2C 4D 6F 76 65 55 70    ne,DelEol,MoveUp
00B900:  49 46 20 41 63 74 69 76 65 20 41 4E 44 20 4F 75    IF Active AND Ou
00B910:  74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45 4E    tputEnabled THEN
00B920:  0D 0A 09 57 49 54 48 20 43 6F 6E 74 72 6F 6C 20    ...WITH Control 
00B930:  44 4F 0D 0A 09 09 47 6F 74 6F 78 79 28 78 31 2C    DO....Gotoxy(x1,
00B940:  79 31 29 3B 0D 0A 09 09 53 63 72 65 65 6E 43 6F    y1);....ScreenCo
00B950:  6E 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68    ntrol(StartGraph
00B960:  29 3B 0D 0A 09 09 49 6E 42 6F 75 6E 64 28 78 31    );....InBound(x1
00B970:  2C 79 31 2C 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A    ,y1,CornerLL);..
00B980:  09 09 46 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F    ..FOR i:=x1+1 TO
00B990:  20 78 32 2D 31 20 44 4F 20 49 6E 42 6F 75 6E 64     x2-1 DO InBound
00B9A0:  28 69 2C 79 31 2C 48 6F 72 69 7A 6F 6E 74 61 6C    (i,y1,Horizontal
00B9B0:  29 20 45 4E 44 3B 0D 0A 09 09 49 6E 42 6F 75 6E    ) END;....InBoun
00B9C0:  64 28 78 32 2C 79 31 2C 43 6F 72 6E 65 72 4C 52    d(x2,y1,CornerLR
00B9D0:  29 3B 0D 0A 09 09 47 6F 74 6F 78 79 28 78 31 2C    );....Gotoxy(x1,
00B9E0:  79 32 29 3B 0D 0A 09 09 49 6E 42 6F 75 6E 64 28    y2);....InBound(
00B9F0:  78 31 2C 79 32 2C 43 6F 72 6E 65 72 55 4C 29 3B    x1,y2,CornerUL);
00BA00:  0D 0A 09 09 46 4F 52 20 69 3A 3D 78 31 2B 31 20    ....FOR i:=x1+1 
00BA10:  54 4F 20 78 32 2D 31 20 44 4F 20 49 6E 42 6F 75    TO x2-1 DO InBou
00BA20:  6E 64 28 69 2C 79 32 2C 48 6F 72 69 7A 6F 6E 74    nd(i,y2,Horizont
00BA30:  61 6C 29 20 45 4E 44 3B 0D 0A 09 09 49 6E 42 6F    al) END;....InBo
00BA40:  75 6E 64 28 78 32 2C 79 32 2C 43 6F 72 6E 65 72    und(x2,y2,Corner
00BA50:  55 52 29 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 79    UR);....FOR i:=y
00BA60:  32 2B 31 20 54 4F 20 79 31 2D 31 20 20 44 4F 0D    2+1 TO y1-1  DO.
00BA70:  0A 09 09 09 47 6F 74 6F 78 79 28 78 32 2C 69 29    ....Gotoxy(x2,i)
00BA80:  3B 0D 0A 09 09 09 49 6E 42 6F 75 6E 64 28 78 32    ;.....InBound(x2
00BA90:  2C 69 2C 56 65 72 74 69 63 61 6C 29 3B 0D 0A 09    ,i,Vertical);...
00BAA0:  09 09 45 4E 44 3B 0D 0A 09 09 46 4F 52 20 69 3A    ..END;....FOR i:
00BAB0:  3D 79 32 2B 31 20 54 4F 20 79 31 2D 31 20 44 4F    =y2+1 TO y1-1 DO
00BAC0:  0D 0A 09 09 09 47 6F 74 6F 78 79 28 78 31 2C 69    .....Gotoxy(x1,i
00BAD0:  29 3B 0D 0A 09 09 09 49 6E 42 6F 75 6E 64 28 78    );.....InBound(x
00BAE0:  31 2C 69 2C 56 65 72 74 69 63 61 6C 29 3B 0D 0A    1,i,Vertical);..
00BAF0:  09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28    ...END;....END;(
00BB00:  2C 0D 0A 09 09 09 4D 6F 76 65 44 6F 77 6E 2C 4D    ,.....MoveDown,M
00BB10:  6F 76 65 4C 65 66 74 2C 4D 6F 76 65 52 69 67 68    oveLeft,MoveRigh
00BB20:  74 2C 47 6F 74 6F 78 79 2C 43 6C 65 61 72 53 63    t,Gotoxy,ClearSc
00BB30:  72 65 65 6E 2C 0D 0A 09 09 09 53 63 72 65 65 6E    reen,.....Screen
00BB40:  43 6F 6E 74 72 6F 6C 2C 53 63 72 6F 6C 6C 57 69    Control,ScrollWi
00BB50:  6E 64 6F 77 55 70 2C 53 63 72 6F 6C 6C 57 69 6E    ndowUp,ScrollWin
00BB60:  64 6F 77 44 6F 77 6E 2C 0D 0A 09 09 09 53 63 72    dowDown,.....Scr
00BB70:  65 65 6E 57 69 64 74 68 2C 53 63 72 65 65 6E 44    eenWidth,ScreenD
00BB80:  65 70 74 68 3B 0D 0A 46 52 4F 4D 20 49 6E 74 4C    epth;..FROM IntL
00BB90:  6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E 44    ogic IMPORT IAND
00BBA0:  3B 09 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D 20    ;...FROM.SYSTEM 
00BBB0:  49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 43 4F 4E    IMPORT ADR;..CON
00BBC0:  53 54 09 43 52 3D 30 64 78 3B 0D 0A 09 54 41 42    ST.CR=0dx;...TAB
00BBD0:  3D 30 39 78 3B 0D 0A 09 4C 46 3D 30 61 78 3B 0D    =09x;...LF=0ax;.
00BBE0:  0A 09 45 4F 46 3D 31 61 78 3B 0D 0A 28 2A 09 41    ..EOF=1ax;..(*.A
00BBF0:  20 72 65 6D 61 72 6B 20 6F 6E 20 74 68 65 20 75     remark on the u
00BC00:  73 65 20 6F 66 20 4C 69 6E 65 50 6F 73 20 61 6E    se of LinePos an
00BC10:  64 20 63 75 72 78 0D 0A 0D 0A 09 4C 69 6E 65 50    d curx.....LineP
00BC20:  6F 73 20 61 6C 77 61 79 73 20 70 6F 69 6E 74 73    os always points
00BC30:  20 74 6F 20 74 68 65 20 6E 75 6D 62 65 72 20 6F     to the number o
00BC40:  66 20 74 68 65 20 63 68 61 72 61 63 74 65 72 20    f the character 
00BC50:  77 69 74 68 69 6E 20 74 68 65 0D 0A 09 74 65 78    within the...tex
00BC60:  74 20 6C 69 6E 65 2E 20 49 74 20 6E 65 65 64 20    t line. It need 
00BC70:  6E 6F 74 20 62 65 20 74 68 65 20 73 61 6D 65 20    not be the same 
00BC80:  61 73 20 74 68 65 20 70 6F 73 69 74 69 6F 6E 20    as the position 
00BC90:  6F 6E 20 74 68 65 0D 0A 09 73 63 72 65 65 6E 20    on the...screen 
00BCA0:  62 65 63 61 75 73 65 20 6F 66 20 74 68 65 20 75    because of the u
00BCB0:  73 65 20 6F 66 20 74 61 62 20 63 68 61 72 61 63    se of tab charac
00BCC0:  74 65 72 73 2A 29 0D 0A 54 59 50 45 09 50 45 64    ters*)..TYPE.PEd
00BCD0:  69 74 46 69 6C 65 3D 50 4F 49 4E 54 45 52 20 54    itFile=POINTER T
00BCE0:  4F 20 45 64 69 74 46 69 6C 65 3B 0D 0A 56 41 52    O EditFile;..VAR
00BCF0:  09 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 63 3A    .i:INTEGER;...c:
00BD00:  2A 57 49 54 48 20 43 6F 6E 74 72 6F 6C 2A 29 0D    *WITH Control*).
00BD10:  0A 09 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C    ...ScreenControl
00BD20:  28 45 6E 64 47 72 61 70 68 29 3B 0D 0A 09 45 4E    (EndGraph);...EN
00BD30:  44 3B 20 28 2A 49 46 20 41 63 74 69 76 65 2A 29    D; (*IF Active*)
00BD40:  0D 0A 20 20 20 20 45 4E 44 20 44 72 61 77 42 6F    ..    END DrawBo
00BD50:  78 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C    x;..PROCEDURE Cl
00BD60:  69 70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43    ip(x1,y1,x2,y2:C
00BD70:  41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E    ARDINAL);..BEGIN
00BD80:  0D 0A 09 4C 6F 77 78 3A 3D 78 31 3B 0D 0A 09 48    ...Lowx:=x1;...H
00BD90:  69 67 68 78 3A 3D 78 32 3B 0D 0A 09 4C 6F 77 79    ighx:=x2;...Lowy
00BDA0:  3A 3D 79 32 3B 0D 0A 09 48 69 67 68 79 3A 3D 79    :=y2;...Highy:=y
00BDB0:  31 3B 0D 0A 09 45 4E 44 20 43 6C 69 70 3B 0D 0A    1;...END Clip;..
00BDC0:  50 52 4F 43 45 44 55 52 45 20 53 63 72 6F 6C 6C    PROCEDURE Scroll
00BDD0:  57 69 6E 64 6F 77 55 70 28 53 74 61 72 74 6F 66    WindowUp(Startof
00BDE0:  57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 69 6E 64    Window,EndofWind
00BDF0:  6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 42    ow:CARDINAL);..B
00BE00:  45 47 49 4E 0D 0A 09 47 6F 74 6F 78 79 28 30 2C    EGIN...Gotoxy(0,
00BE10:  45 6E 64 6F 66 57 69 6E 64 6F 77 29 3B 0D 0A 09    EndofWindow);...
00BE20:  53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 44 65    ScreenControl(De
00BE30:  6C 4C 69 6E 65 29 3B 0D 0A 09 47 6F 74 6F 78 79    lLine);...Gotoxy
00BE40:  28 30 2C 53 74 61 72 74 6F 66 57 69 6E 64 6F 77    (0,StartofWindow
00BE50:  29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72    );...ScreenContr
00BE60:  6F 6C 28 49 6E 73 4C 69 6E 65 29 3B 0D 0A 09 45    ol(InsLine);...E
00BE70:  4E 44 20 53 63 72 6F 6C 6C 57 69 6E 64 6F 77 55    ND ScrollWindowU
00BE80:  70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63    p;..PROCEDURE Sc
00BE90:  72 6F 6C 6C 57 69 6E 64 6F 77 44 6F 77 6E 28 53    rollWindowDown(S
00BEA0:  74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64    tartofWindow,End
00BEB0:  6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41    ofWindow:CARDINA
00BEC0:  4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74    L);..BEGIN...Got
00BED0:  6F 78 79 28 30 2C 53 74 61 72 74 6F 66 57 69 6E    oxy(0,StartofWin
00BEE0:  64 6F 77 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F    dow);...ScreenCo
00BEF0:  6E 74 72 6F 6C 28 44 65 6C 4C 69 6E 65 29 3B 0D    ntrol(DelLine);.
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:  43 41 52 44 49 4E 41 4C 3B 0D 0A 09 53 74 61 72    CARDINAL;...Star
00C010:  74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57    tofWindow,EndofW
00C020:  69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C 3B 0D    indow:CARDINAL;.
00C030:  0A 09 63 68 3A 43 48 41 52 3B 0D 0A 09 43 75 72    ..ch:CHAR;...Cur
00C040:  72 65 6E 74 4C 65 66 74 4D 61 72 67 69 6E 3A 43    rentLeftMargin:C
00C050:  41 52 44 49 4E 41 4C 3B 0D 0A 09 46 69 6C 65 4C    ARDINAL;...FileL
00C060:  69 6D 69 74 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09    imit:BOOLEAN;...
00C070:  52 65 44 72 61 77 6E 3A 42 4F 4F 4C 45 41 4E 3B    ReDrawn:BOOLEAN;
00C080:  0D 0A 09 43 75 72 46 69 6C 65 50 74 72 3A 50 45    ...CurFilePtr:PE
00C090:  64 69 74 46 69 6C 65 3B 0D 0A 50 52 4F 43 45 44    ditFile;..PROCED
00C0A0:  55 52 45 20 43 68 61 6E 67 65 50 6F 73 3B 46 4F    URE ChangePos;FO
00C0B0:  52 57 41 52 44 3B 0D 0A 50 52 4F 43 45 44 55 52    RWARD;..PROCEDUR
00C0C0:  45 20 44 6F 53 63 72 65 65 6E 43 68 61 6E 67 65    E DoScreenChange
00C0D0:  28 43 6F 64 65 3A 45 64 69 74 73 29 3B 0D 0A 42    (Code:Edits);..B
00C0E0:  45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 43 6F 6E    EGIN...ScreenCon
00C0F0:  74 72 6F 6C 28 43 6F 64 65 29 3B 0D 0A 09 45 4E    trol(Code);...EN
00C100:  44 20 44 6F 53 63 72 65 65 6E 43 68 61 6E 67 65    D DoScreenChange
00C110:  3B 0D 0A 0D 0A 0D 0A 56 41 52 09 6C 69 6E 65 73    ;......VAR.lines
00C120:  6D 6F 76 65 64 3A 49 4E 54 45 47 45 52 3B 0D 0A    moved:INTEGER;..
00C130:  09 70 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A 0D 0A    .p:Position;....
00C140:  50 52 4F 43 45 44 55 52 45 20 53 65 74 4C 69 6E    PROCEDURE SetLin
00C150:  65 50 6F 73 28 6D 6F 76 65 3A 49 4E 54 45 47 45    ePos(move:INTEGE
00C160:  52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 52 65 74    R);..BEGIN...Ret
00C170:  72 6C 69 6E 65 28 43 75 72 46 69 6C 65 50 74 72    rline(CurFilePtr
00C180:  5E 2C 4C 69 6E 65 4C 65 6E 2C 4C 69 6E 65 50 6F    ^,LineLen,LinePo
00C190:  73 2C 70 2C 6C 69 6E 65 73 6D 6F 76 65 64 2C 6D    s,p,linesmoved,m
00C1A0:  6F 76 65 29 3B 0D 0A 09 45 4E 44 20 53 65 74 4C    ove);...END SetL
00C1B0:  69 6E 65 50 6F 73 3B 0D 0A 50 52 4F 43 45 44 55    inePos;..PROCEDU
00C1C0:  52 45 20 4D 61 72 6B 41 73 55 70 64 61 74 65 64    RE MarkAsUpdated
00C1D0:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 55 70 64 61 74    ;..BEGIN...Updat
00C1E0:  65 64 5B 43 75 72 72 65 6E 74 46 69 6C 65 5D 3A    ed[CurrentFile]:
00C1F0:  3D 54 52 55 45 0D 0A 09 45 4E 44 20 4D 61 72 6B    =TRUE...END Mark
00C200:  43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69    CurrentLeftMargi
00C210:  6E 29 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44    n) THEN EXIT END
00C220:  3B 0D 0A 09 09 49 46 20 63 68 3D 54 41 42 20 54    ;....IF ch=TAB T
00C230:  48 45 4E 20 0D 0A 09 09 09 52 45 50 45 41 54 0D    HEN .....REPEAT.
00C240:  0A 09 09 09 09 49 46 20 63 3E 43 75 72 72 65 6E    .....IF c>Curren
00C250:  74 4C 65 66 74 4D 61 72 67 69 6E 20 54 48 45 4E    tLeftMargin THEN
00C260:  20 57 72 69 74 65 28 27 20 27 29 20 45 4E 44 3B     Write(' ') END;
00C270:  20 0D 0A 09 09 09 09 49 4E 43 28 63 29 3B 0D 0A     ......INC(c);..
00C280:  09 09 09 09 55 4E 54 49 4C 20 49 41 4E 44 28 63    ....UNTIL IAND(c
00C290:  2C 37 29 3D 31 3B 0D 0A 09 09 45 4C 53 45 0D 0A    ,7)=1;....ELSE..
00C2A0:  09 09 09 49 46 20 63 3E 43 75 72 72 65 6E 74 4C    ...IF c>CurrentL
00C2B0:  65 66 74 4D 61 72 67 69 6E 20 54 48 45 4E 20 57    eftMargin THEN W
00C2C0:  72 69 74 65 28 63 68 29 20 45 4E 44 3B 0D 0A 09    rite(ch) END;...
00C2D0:  09 09 49 4E 43 28 63 29 3B 0D 0A 09 09 09 45 4E    ..INC(c);.....EN
00C2E0:  44 3B 0D 0A 09 09 45 4E 44 28 2A 4C 4F 4F 50 2A    D;....END(*LOOP*
00C2F0:  29 3B 0D 0A 09 45 4E 44 20 57 72 69 74 65 50 61    );...END WritePa
00C300:  72 74 4C 69 6E 65 3B 0D 0A 50 52 4F 43 45 44 55    rtLine;..PROCEDU
00C310:  52 45 20 57 72 69 74 65 4C 69 6E 65 3B 0D 0A 42    RE WriteLine;..B
00C320:  45 47 49 4E 0D 0A 09 57 72 69 74 65 50 61 72 74    EGIN...WritePart
00C330:  4C 69 6E 65 28 31 29 3B 0D 0A 09 45 4E 44 20 57    Line(1);...END W
00C340:  72 69 74 65 4C 69 6E 65 3B 0D 0A 50 52 4F 43 45    riteLine;..PROCE
00C350:  44 55 52 45 20 52 65 6D 6F 76 65 4C 69 6E 65 3B    DURE RemoveLine;
00C360:  0D 0A 0D 0A 28 2A 09 52 65 6D 6F 76 65 20 61 20    ....(*.Remove a 
00C370:  6C 69 6E 65 20 66 72 6F 6D 20 74 68 65 20 73 63    line from the sc
00C380:  72 65 65 6E 20 61 6E 64 20 62 72 69 6E 67 20 61    reen and bring a
00C390:  6E 6F 74 68 65 72 20 6C 69 6E 65 20 75 70 20 61    nother line up a
00C3A0:  74 20 74 68 65 20 62 6F 74 74 6F 6D 0D 0A 0D 0A    t the bottom....
00C3B0:  09 54 68 69 73 79 20 67 69 76 65 73 20 6C 69 6E    .Thisy gives lin
00C3C0:  65 20 74 6F 20 72 65 6D 6F 76 65 2A 29 0D 0A 56    e to remove*)..V
00C3D0:  41 52 09 70 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A    AR.p:Position;..
00C3E0:  42 45 47 49 4E 0D 0A 09 47 6F 74 6F 78 79 28 30    BEGIN...Gotoxy(0
00C3F0:  2C 54 68 69 73 79 29 3B 0D 0A 09 53 63 72 6F 6C    ,Thisy);...Scrol
00C400:  41 73 55 70 64 61 74 65 64 3B 0D 0A 50 52 4F 43    AsUpdated;..PROC
00C410:  45 44 55 52 45 20 44 65 6C 54 6F 45 4F 4C 3B 0D    EDURE DelToEOL;.
00C420:  0A 42 45 47 49 4E 0D 0A 09 4D 61 72 6B 41 73 55    .BEGIN...MarkAsU
00C430:  70 64 61 74 65 64 3B 0D 0A 09 49 46 20 4C 69 6E    pdated;...IF Lin
00C440:  65 50 6F 73 3C 3D 4C 69 6E 65 4C 65 6E 20 54 48    ePos<=LineLen TH
00C450:  45 4E 20 0D 0A 09 09 44 65 6C 43 68 61 72 73 28    EN ....DelChars(
00C460:  43 75 72 46 69 6C 65 50 74 72 5E 2C 4C 69 6E 65    CurFilePtr^,Line
00C470:  4C 65 6E 2D 4C 69 6E 65 50 6F 73 29 20 0D 0A 09    Len-LinePos) ...
00C480:  09 45 4E 44 3B 0D 0A 09 4C 69 6E 65 4C 65 6E 3A    .END;...LineLen:
00C490:  3D 4C 69 6E 65 50 6F 73 3B 0D 0A 09 44 6F 53 63    =LinePos;...DoSc
00C4A0:  72 65 65 6E 43 68 61 6E 67 65 28 44 65 6C 45 6F    reenChange(DelEo
00C4B0:  6C 29 3B 0D 0A 09 45 4E 44 20 44 65 6C 54 6F 45    l);...END DelToE
00C4C0:  4F 4C 3B 0D 0A 56 41 52 09 0D 0A 09 62 3A 42 4F    OL;..VAR....b:BO
00C4D0:  4F 4C 45 41 4E 3B 0D 0A 50 52 4F 43 45 44 55 52    OLEAN;..PROCEDUR
00C4E0:  45 20 52 65 73 65 74 50 6F 73 3B 0D 0A 42 45 47    E ResetPos;..BEG
00C4F0:  49 4E 0D 0A 09 47 6F 74 6F 78 79 28 54 68 69 73    IN...Gotoxy(This
00C500:  78 2C 54 68 69 73 79 29 3B 0D 0A 09 45 4E 44 20    x,Thisy);...END 
00C510:  52 65 73 65 74 50 6F 73 3B 0D 0A 50 52 4F 43 45    ResetPos;..PROCE
00C520:  44 55 52 45 20 52 65 44 69 73 70 6C 61 79 57 69    DURE ReDisplayWi
00C530:  6E 64 6F 77 3B 0D 0A 42 45 47 49 4E 0D 0A 09 44    ndow;..BEGIN...D
00C540:  69 73 70 6C 61 79 46 69 6C 65 28 43 75 72 46 69    isplayFile(CurFi
00C550:  6C 65 50 74 72 5E 2C 43 75 72 72 65 6E 74 57 69    lePtr^,CurrentWi
00C560:  6E 64 6F 77 2C 54 68 69 73 78 2C 54 68 69 73 79    ndow,Thisx,Thisy
00C570:  29 3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A    );...ResetPos;..
00C580:  09 63 75 72 78 5B 43 75 72 72 65 6E 74 57 69 6E    .curx[CurrentWin
00C590:  64 6F 77 5D 3A 3D 54 68 69 73 78 3B 0D 0A 09 63    dow]:=Thisx;...c
00C5A0:  75 72 79 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F    ury[CurrentWindo
00C5B0:  77 5D 3A 3D 54 68 69 73 79 3B 0D 0A 09 52 65 44    w]:=Thisy;...ReD
00C5C0:  72 61 77 6E 3A 3D 54 52 55 45 3B 0D 0A 09 45 4E    rawn:=TRUE;...EN
00C5D0:  44 20 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F    D ReDisplayWindo
00C5E0:  77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65    w;..PROCEDURE Re
00C5F0:  44 69 73 70 6C 61 79 3B 0D 0A 42 45 47 49 4E 0D    Display;..BEGIN.
00C600:  6C 57 69 6E 64 6F 77 44 6F 77 6E 28 54 68 69 73    lWindowDown(This
00C610:  79 2C 45 6E 64 6F 66 57 69 6E 64 6F 77 29 3B 0D    y,EndofWindow);.
00C620:  0A 09 69 3A 3D 45 6E 64 6F 66 57 69 6E 64 6F 77    ..i:=EndofWindow
00C630:  2D 54 68 69 73 79 2B 31 3B 0D 0A 09 47 65 74 50    -Thisy+1;...GetP
00C640:  6F 73 69 74 69 6F 6E 28 43 75 72 46 69 6C 65 50    osition(CurFileP
00C650:  74 72 5E 2C 70 29 3B 0D 0A 09 53 65 74 4C 69 6E    tr^,p);...SetLin
00C660:  65 50 6F 73 28 69 29 3B 0D 0A 09 49 46 20 6C 69    ePos(i);...IF li
00C670:  6E 65 73 6D 6F 76 65 64 3D 69 20 54 48 45 4E 0D    nesmoved=i THEN.
00C680:  0A 09 09 4D 6F 76 65 64 4F 4B 3A 3D 54 52 55 45    ...MovedOK:=TRUE
00C690:  3B 0D 0A 09 09 47 6F 74 6F 78 79 28 30 2C 45 6E    ;....Gotoxy(0,En
00C6A0:  64 6F 66 57 69 6E 64 6F 77 29 3B 0D 0A 09 09 57    dofWindow);....W
00C6B0:  72 69 74 65 4C 69 6E 65 3B 0D 0A 09 09 45 4E 44    riteLine;....END
00C6C0:  3B 0D 0A 09 53 65 74 50 6F 73 69 74 69 6F 6E 28    ;...SetPosition(
00C6D0:  43 75 72 46 69 6C 65 50 74 72 5E 2C 70 29 3B 0D    CurFilePtr^,p);.
00C6E0:  0A 09 45 4E 44 20 52 65 6D 6F 76 65 4C 69 6E 65    ..END RemoveLine
00C6F0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65 6C    ;..PROCEDURE Del
00C700:  46 75 6C 6C 4C 69 6E 65 3B 0D 0A 42 45 47 49 4E    FullLine;..BEGIN
00C710:  0D 0A 09 4D 61 72 6B 41 73 55 70 64 61 74 65 64    ...MarkAsUpdated
00C720:  3B 0D 0A 09 52 65 6D 6F 76 65 4C 69 6E 65 3B 0D    ;...RemoveLine;.
00C730:  0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 30 29 3B    ..SetLinePos(0);
00C740:  0D 0A 09 44 65 6C 43 68 61 72 73 28 43 75 72 46    ...DelChars(CurF
00C750:  69 6C 65 50 74 72 5E 2C 4C 69 6E 65 4C 65 6E 2B    ilePtr^,LineLen+
00C760:  32 29 3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D 30    2);...LinePos:=0
00C770:  3B 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 4C 65    ;...IF CurrentLe
00C780:  66 74 4D 61 72 67 69 6E 3E 30 20 54 48 45 4E 20    ftMargin>0 THEN 
00C790:  0D 0A 09 09 43 68 61 6E 67 65 4D 61 72 67 69 6E    ....ChangeMargin
00C7A0:  28 2D 49 4E 54 45 47 45 52 28 43 75 72 72 65 6E    (-INTEGER(Curren
00C7B0:  74 4C 65 66 74 4D 61 72 67 69 6E 29 29 0D 0A 09    tLeftMargin))...
00C7C0:  09 45 4E 44 3B 0D 0A 09 54 68 69 73 78 3A 3D 30    .END;...Thisx:=0
00C7D0:  3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09    ;...ResetPos;...
00C7E0:  4C 69 6E 65 50 6F 73 3A 3D 30 3B 0D 0A 09 53 65    LinePos:=0;...Se
00C7F0:  74 4C 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 45    tLinePos(0);...E
00C800:  0A 09 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F    ..ReDisplayWindo
00C810:  77 3B 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28    w;...SetLinePos(
00C820:  30 29 3B 0D 0A 09 43 68 61 6E 67 65 50 6F 73 3B    0);...ChangePos;
00C830:  0D 0A 09 45 4E 44 20 52 65 44 69 73 70 6C 61 79    ...END ReDisplay
00C840:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68 61    ;..PROCEDURE Cha
00C850:  6E 67 65 4D 61 72 67 69 6E 28 49 6E 63 3A 49 4E    ngeMargin(Inc:IN
00C860:  54 45 47 45 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A    TEGER);..BEGIN..
00C870:  09 49 46 20 28 49 6E 63 3C 30 29 20 41 4E 44 20    .IF (Inc<0) AND 
00C880:  20 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72     (CurrentLeftMar
00C890:  67 69 6E 3C 43 41 52 44 49 4E 41 4C 28 2D 49 6E    gin<CARDINAL(-In
00C8A0:  63 29 29 20 54 48 45 4E 20 0D 0A 09 09 49 6E 63    c)) THEN ....Inc
00C8B0:  3A 3D 2D 49 4E 54 45 47 45 52 28 43 75 72 72 65    :=-INTEGER(Curre
00C8C0:  6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 20 0D 0A    ntLeftMargin) ..
00C8D0:  09 09 45 4E 44 3B 0D 0A 09 49 46 20 28 49 6E 63    ..END;...IF (Inc
00C8E0:  3E 30 29 20 41 4E 44 20 28 54 68 69 73 78 3C 43    >0) AND (Thisx<C
00C8F0:  41 52 44 49 4E 41 4C 28 49 6E 63 29 29 20 54 48    ARDINAL(Inc)) TH
00C900:  45 4E 20 49 6E 63 3A 3D 54 68 69 73 78 20 45 4E    EN Inc:=Thisx EN
00C910:  44 3B 0D 0A 09 43 75 72 72 65 6E 74 4C 65 66 74    D;...CurrentLeft
00C920:  4D 61 72 67 69 6E 3A 3D 49 4E 54 45 47 45 52 28    Margin:=INTEGER(
00C930:  43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69    CurrentLeftMargi
00C940:  6E 29 2B 49 6E 63 3B 0D 0A 09 54 68 69 73 78 3A    n)+Inc;...Thisx:
00C950:  3D 49 4E 54 45 47 45 52 28 54 68 69 73 78 29 2D    =INTEGER(Thisx)-
00C960:  49 6E 63 3B 0D 0A 09 63 75 72 78 5B 43 75 72 72    Inc;...curx[Curr
00C970:  65 6E 74 57 69 6E 64 6F 77 5D 3A 3D 54 68 69 73    entWindow]:=This
00C980:  78 3B 0D 0A 09 4C 65 66 74 4D 61 72 67 69 6E 5B    x;...LeftMargin[
00C990:  43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D    CurrentWindow]:=
00C9A0:  43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69    CurrentLeftMargi
00C9B0:  6E 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 57 69    n;...ReDisplayWi
00C9C0:  6E 64 6F 77 3B 0D 0A 09 52 65 73 65 74 50 6F 73    ndow;...ResetPos
00C9D0:  3B 0D 0A 09 45 4E 44 20 43 68 61 6E 67 65 4D 61    ;...END ChangeMa
00C9E0:  72 67 69 6E 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    rgin;....PROCEDU
00C9F0:  52 45 20 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 56    RE ChangePos;..V
00CA00:  4E 44 20 44 65 6C 46 75 6C 6C 4C 69 6E 65 3B 0D    ND DelFullLine;.
00CA10:  0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 53    .....PROCEDURE S
00CA20:  63 72 6F 6C 6C 54 65 78 74 55 70 3B 0D 0A 0D 0A    crollTextUp;....
00CA30:  28 2A 09 53 63 72 6F 6C 6C 20 75 70 20 6F 6E 65    (*.Scroll up one
00CA40:  20 6C 69 6E 65 20 69 6E 20 74 68 65 20 66 69 6C     line in the fil
00CA50:  65 0D 0A 09 28 77 68 69 63 68 20 6D 65 61 6E 73    e...(which means
00CA60:  20 74 68 65 20 74 65 78 74 20 73 63 72 6F 6C 6C     the text scroll
00CA70:  73 20 64 6F 77 6E 20 2D 20 62 61 63 6B 77 61 72    s down - backwar
00CA80:  64 73 20 74 6F 0D 0A 09 77 68 61 74 20 79 6F 75    ds to...what you
00CA90:  20 6D 69 67 68 74 20 74 68 69 6E 6B 20 61 74 20     might think at 
00CAA0:  66 69 72 73 74 29 2A 29 0D 0A 0D 0A 56 41 52 09    first)*)....VAR.
00CAB0:  70 3A 50 6F 73 69 74 69 6F 6E 3B 09 0D 0A 09 53    p:Position;....S
00CAC0:  61 76 65 4C 69 6E 65 4C 65 6E 2C 53 61 76 65 4C    aveLineLen,SaveL
00CAD0:  69 6E 65 50 6F 73 3A 43 41 52 44 49 4E 41 4C 3B    inePos:CARDINAL;
00CAE0:  0D 0A 42 45 47 49 4E 0D 0A 09 53 61 76 65 4C 69    ..BEGIN...SaveLi
00CAF0:  6E 65 4C 65 6E 3A 3D 4C 69 6E 65 4C 65 6E 3B 0D    neLen:=LineLen;.
00CB00:  0A 09 53 61 76 65 4C 69 6E 65 50 6F 73 3A 3D 4C    ..SaveLinePos:=L
00CB10:  69 6E 65 50 6F 73 3B 0D 0A 09 69 3A 3D 53 74 61    inePos;...i:=Sta
00CB20:  72 74 6F 66 57 69 6E 64 6F 77 2D 54 68 69 73 79    rtofWindow-Thisy
00CB30:  2D 31 3B 0D 0A 09 47 65 74 50 6F 73 69 74 69 6F    -1;...GetPositio
00CB40:  6E 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 70 29    n(CurFilePtr^,p)
00CB50:  3B 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 69    ;...SetLinePos(i
00CB60:  29 3B 0D 0A 09 49 46 20 6C 69 6E 65 73 6D 6F 76    );...IF linesmov
00CB70:  65 64 3D 69 20 54 48 45 4E 0D 0A 09 09 4D 6F 76    ed=i THEN....Mov
00CB80:  65 64 4F 4B 3A 3D 54 52 55 45 3B 0D 0A 09 09 53    edOK:=TRUE;....S
00CB90:  63 72 6F 6C 6C 57 69 6E 64 6F 77 55 70 28 53 74    crollWindowUp(St
00CBA0:  61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F    artofWindow,Endo
00CBB0:  66 57 69 6E 64 6F 77 29 3B 0D 0A 09 09 47 6F 74    fWindow);....Got
00CBC0:  6F 78 79 28 30 2C 53 74 61 72 74 6F 66 57 69 6E    oxy(0,StartofWin
00CBD0:  64 6F 77 29 3B 0D 0A 09 09 57 72 69 74 65 4C 69    dow);....WriteLi
00CBE0:  6E 65 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 4D 6F    ne;...ELSE....Mo
00CBF0:  76 65 64 4F 4B 3A 3D 46 41 4C 53 45 3B 0D 0A 09    vedOK:=FALSE;...
00CC00:  41 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    AR.i:CARDINAL;..
00CC10:  42 45 47 49 4E 0D 0A 09 49 46 20 4C 69 6E 65 4C    BEGIN...IF LineL
00CC20:  65 6E 3C 4C 69 6E 65 50 6F 73 20 54 48 45 4E 20    en<LinePos THEN 
00CC30:  0D 0A 09 09 4C 69 6E 65 50 6F 73 3A 3D 4C 69 6E    ....LinePos:=Lin
00CC40:  65 4C 65 6E 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    eLen;....END;...
00CC50:  54 68 69 73 78 3A 3D 30 3B 0D 0A 09 69 3A 3D 30    Thisx:=0;...i:=0
00CC60:  3B 09 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 49 4E 43    ;....LOOP....INC
00CC70:  28 69 29 3B 0D 0A 09 09 63 68 3A 3D 47 65 74 43    (i);....ch:=GetC
00CC80:  75 72 72 65 6E 74 43 68 61 72 28 43 75 72 46 69    urrentChar(CurFi
00CC90:  6C 65 50 74 72 5E 29 3B 0D 0A 09 09 49 46 20 28    lePtr^);....IF (
00CCA0:  69 3E 43 41 52 44 49 4E 41 4C 28 4C 69 6E 65 50    i>CARDINAL(LineP
00CCB0:  6F 73 29 29 20 4F 52 20 28 63 68 3D 45 4F 46 29    os)) OR (ch=EOF)
00CCC0:  20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D     THEN EXIT END;.
00CCD0:  0A 09 09 49 46 20 63 68 3D 54 41 42 20 54 48 45    ...IF ch=TAB THE
00CCE0:  4E 20 54 68 69 73 78 3A 3D 49 41 4E 44 28 54 68    N Thisx:=IAND(Th
00CCF0:  69 73 78 2B 38 2C 30 66 66 66 38 68 29 20 0D 0A    isx+8,0fff8h) ..
00CD00:  09 09 45 4C 53 45 20 20 49 4E 43 28 54 68 69 73    ..ELSE  INC(This
00CD10:  78 29 20 45 4E 44 3B 0D 0A 09 09 62 3A 3D 46 6F    x) END;....b:=Fo
00CD20:  72 77 61 72 64 4F 6E 65 43 68 61 72 28 43 75 72    rwardOneChar(Cur
00CD30:  46 69 6C 65 50 74 72 5E 29 20 0D 0A 09 09 45 4E    FilePtr^) ....EN
00CD40:  44 3B 0D 0A 09 69 3A 3D 54 68 69 73 78 3B 0D 0A    D;...i:=Thisx;..
00CD50:  09 57 48 49 4C 45 20 54 68 69 73 78 3E 3D 28 53    .WHILE Thisx>=(S
00CD60:  63 72 65 65 6E 57 69 64 74 68 2B 43 75 72 72 65    creenWidth+Curre
00CD70:  6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 20 44 4F    ntLeftMargin) DO
00CD80:  0D 0A 09 09 43 68 61 6E 67 65 4D 61 72 67 69 6E    ....ChangeMargin
00CD90:  28 33 32 29 3B 0D 0A 09 09 54 68 69 73 78 3A 3D    (32);....Thisx:=
00CDA0:  69 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 48 49    i;....END;...WHI
00CDB0:  4C 45 20 54 68 69 73 78 3C 43 75 72 72 65 6E 74    LE Thisx<Current
00CDC0:  4C 65 66 74 4D 61 72 67 69 6E 20 44 4F 0D 0A 09    LeftMargin DO...
00CDD0:  09 43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 33    .ChangeMargin(-3
00CDE0:  32 29 3B 0D 0A 09 09 54 68 69 73 78 3A 3D 69 3B    2);....Thisx:=i;
00CDF0:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 54 68 69 73 78    ....END;...Thisx
00CE00:  09 45 4E 44 3B 0D 0A 09 53 65 74 50 6F 73 69 74    .END;...SetPosit
00CE10:  69 6F 6E 28 43 75 72 46 69 6C 65 50 74 72 5E 2C    ion(CurFilePtr^,
00CE20:  70 29 3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D    p);...ResetPos;.
00CE30:  0A 09 4C 69 6E 65 4C 65 6E 3A 3D 53 61 76 65 4C    ..LineLen:=SaveL
00CE40:  69 6E 65 4C 65 6E 3B 0D 0A 09 4C 69 6E 65 50 6F    ineLen;...LinePo
00CE50:  73 3A 3D 53 61 76 65 4C 69 6E 65 50 6F 73 3B 0D    s:=SaveLinePos;.
00CE60:  0A 09 45 4E 44 20 53 63 72 6F 6C 6C 54 65 78 74    ..END ScrollText
00CE70:  55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53    Up;..PROCEDURE S
00CE80:  63 72 6F 6C 6C 55 70 3B 0D 0A 42 45 47 49 4E 0D    crollUp;..BEGIN.
00CE90:  0A 09 53 63 72 6F 6C 6C 54 65 78 74 55 70 3B 0D    ..ScrollTextUp;.
00CEA0:  0A 09 49 46 20 4D 6F 76 65 64 4F 4B 20 54 48 45    ..IF MovedOK THE
00CEB0:  4E 0D 0A 09 09 49 46 20 54 68 69 73 79 3C 45 6E    N....IF Thisy<En
00CEC0:  64 6F 66 57 69 6E 64 6F 77 20 54 48 45 4E 20 0D    dofWindow THEN .
00CED0:  0A 09 09 09 49 4E 43 28 54 68 69 73 79 29 3B 0D    ....INC(Thisy);.
00CEE0:  0A 09 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09    ....ResetPos;...
00CEF0:  09 45 4C 53 45 20 09 0D 0A 09 09 09 4C 69 6E 65    .ELSE ......Line
00CF00:  4D 6F 76 65 28 2D 31 29 3B 0D 0A 09 09 09 52 65    Move(-1);.....Re
00CF10:  73 65 74 50 6F 73 3B 0D 0A 09 09 09 45 4E 44 3B    setPos;.....END;
00CF20:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 53    ....END;...END S
00CF30:  63 72 6F 6C 6C 55 70 3B 0D 0A 50 52 4F 43 45 44    crollUp;..PROCED
00CF40:  55 52 45 20 53 63 72 6F 6C 6C 54 65 78 74 44 6F    URE ScrollTextDo
00CF50:  77 6E 3B 0D 0A 56 41 52 09 70 3A 50 6F 73 69 74    wn;..VAR.p:Posit
00CF60:  69 6F 6E 3B 09 0D 0A 09 53 61 76 65 4C 69 6E 65    ion;....SaveLine
00CF70:  4C 65 6E 2C 53 61 76 65 4C 69 6E 65 50 6F 73 3A    Len,SaveLinePos:
00CF80:  43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E    CARDINAL;..BEGIN
00CF90:  0D 0A 09 53 61 76 65 4C 69 6E 65 4C 65 6E 3A 3D    ...SaveLineLen:=
00CFA0:  4C 69 6E 65 4C 65 6E 3B 0D 0A 09 53 61 76 65 4C    LineLen;...SaveL
00CFB0:  69 6E 65 50 6F 73 3A 3D 4C 69 6E 65 50 6F 73 3B    inePos:=LinePos;
00CFC0:  0D 0A 09 69 3A 3D 45 6E 64 6F 66 57 69 6E 64 6F    ...i:=EndofWindo
00CFD0:  77 2D 54 68 69 73 79 2B 31 3B 0D 0A 09 47 65 74    w-Thisy+1;...Get
00CFE0:  50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69 6C 65    Position(CurFile
00CFF0:  50 74 72 5E 2C 70 29 3B 0D 0A 09 53 65 74 4C 69    Ptr^,p);...SetLi
00D000:  3A 3D 54 68 69 73 78 2D 43 75 72 72 65 6E 74 4C    :=Thisx-CurrentL
00D010:  65 66 74 4D 61 72 67 69 6E 3B 0D 0A 09 63 75 72    eftMargin;...cur
00D020:  78 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D    x[CurrentWindow]
00D030:  3A 3D 54 68 69 73 78 3B 0D 0A 09 52 65 73 65 74    :=Thisx;...Reset
00D040:  50 6F 73 3B 0D 0A 09 45 4E 44 20 43 68 61 6E 67    Pos;...END Chang
00D050:  65 50 6F 73 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    ePos;....PROCEDU
00D060:  52 45 20 4C 69 6E 65 4D 6F 76 65 28 62 79 3A 49    RE LineMove(by:I
00D070:  4E 54 45 47 45 52 29 3B 0D 0A 56 41 52 09 69 3A    NTEGER);..VAR.i:
00D080:  49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E 0D    INTEGER;..BEGIN.
00D090:  0A 09 52 65 44 72 61 77 6E 3A 3D 46 41 4C 53 45    ..ReDrawn:=FALSE
00D0A0:  3B 0D 0A 09 69 3A 3D 4C 69 6E 65 50 6F 73 3B 0D    ;...i:=LinePos;.
00D0B0:  0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 62 79 29    ..SetLinePos(by)
00D0C0:  3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D 69 3B 0D    ;...LinePos:=i;.
00D0D0:  0A 09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 09 49    ..ChangePos;...I
00D0E0:  46 20 41 42 53 28 62 79 29 3E 31 20 54 48 45 4E    F ABS(by)>1 THEN
00D0F0:  0D 0A 09 09 52 65 44 69 73 70 6C 61 79 57 69 6E    ....ReDisplayWin
00D100:  64 6F 77 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45    dow;....END;...E
00D110:  4E 44 20 4C 69 6E 65 4D 6F 76 65 3B 0D 0A 56 41    ND LineMove;..VA
00D120:  52 09 70 77 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A    R.pw:Position;..
00D130:  50 52 4F 43 45 44 55 52 45 20 57 72 69 74 65 50    PROCEDURE WriteP
00D140:  61 72 74 4C 69 6E 65 28 63 3A 43 41 52 44 49 4E    artLine(c:CARDIN
00D150:  41 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 44 6F    AL);..BEGIN...Do
00D160:  53 63 72 65 65 6E 43 68 61 6E 67 65 28 44 65 6C    ScreenChange(Del
00D170:  45 6F 6C 29 3B 0D 0A 09 47 65 74 50 6F 73 69 74    Eol);...GetPosit
00D180:  69 6F 6E 28 43 75 72 46 69 6C 65 50 74 72 5E 2C    ion(CurFilePtr^,
00D190:  70 77 29 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 52    pw);...LOOP....R
00D1A0:  65 61 64 4E 65 78 74 43 68 61 72 28 70 77 2C 63    eadNextChar(pw,c
00D1B0:  68 29 3B 0D 0A 09 09 49 46 20 28 63 68 3D 30 64    h);....IF (ch=0d
00D1C0:  78 29 20 4F 52 20 28 63 68 3D 31 61 78 29 20 4F    x) OR (ch=1ax) O
00D1D0:  52 20 28 63 68 3D 30 61 78 29 20 54 48 45 4E 20    R (ch=0ax) THEN 
00D1E0:  45 58 49 54 20 45 4E 44 3B 0D 0A 09 09 49 46 20    EXIT END;....IF 
00D1F0:  63 3E 3D 28 53 63 72 65 65 6E 57 69 64 74 68 2B    c>=(ScreenWidth+
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:  6E 65 50 6F 73 28 69 29 3B 0D 0A 09 49 46 20 6C    nePos(i);...IF l
00D310:  69 6E 65 73 6D 6F 76 65 64 3D 69 20 54 48 45 4E    inesmoved=i THEN
00D320:  0D 0A 09 09 4D 6F 76 65 64 4F 4B 3A 3D 54 52 55    ....MovedOK:=TRU
00D330:  45 3B 0D 0A 09 09 53 63 72 6F 6C 6C 57 69 6E 64    E;....ScrollWind
00D340:  6F 77 44 6F 77 6E 28 53 74 61 72 74 6F 66 57 69    owDown(StartofWi
00D350:  6E 64 6F 77 2C 45 6E 64 6F 66 57 69 6E 64 6F 77    ndow,EndofWindow
00D360:  29 3B 0D 0A 09 09 47 6F 74 6F 78 79 28 30 2C 45    );....Gotoxy(0,E
00D370:  6E 64 6F 66 57 69 6E 64 6F 77 29 3B 0D 0A 09 09    ndofWindow);....
00D380:  57 72 69 74 65 4C 69 6E 65 3B 0D 0A 09 09 52 65    WriteLine;....Re
00D390:  73 65 74 50 6F 73 3B 0D 0A 09 45 4C 53 45 0D 0A    setPos;...ELSE..
00D3A0:  09 09 4D 6F 76 65 64 4F 4B 3A 3D 46 41 4C 53 45    ..MovedOK:=FALSE
00D3B0:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 50    ;....END;...SetP
00D3C0:  6F 73 69 74 69 6F 6E 28 43 75 72 46 69 6C 65 50    osition(CurFileP
00D3D0:  74 72 5E 2C 70 29 3B 0D 0A 09 52 65 73 65 74 50    tr^,p);...ResetP
00D3E0:  6F 73 3B 0D 0A 09 4C 69 6E 65 4C 65 6E 3A 3D 53    os;...LineLen:=S
00D3F0:  61 76 65 4C 69 6E 65 4C 65 6E 3B 0D 0A 09 4C 69    aveLineLen;...Li
00D400:  6E 65 50 6F 73 3A 3D 53 61 76 65 4C 69 6E 65 50    nePos:=SaveLineP
00D410:  6F 73 3B 0D 0A 09 45 4E 44 20 53 63 72 6F 6C 6C    os;...END Scroll
00D420:  54 65 78 74 44 6F 77 6E 3B 0D 0A 50 52 4F 43 45    TextDown;..PROCE
00D430:  44 55 52 45 20 53 63 72 6F 6C 6C 44 6F 77 6E 3B    DURE ScrollDown;
00D440:  0D 0A 42 45 47 49 4E 0D 0A 09 53 63 72 6F 6C 6C    ..BEGIN...Scroll
00D450:  54 65 78 74 44 6F 77 6E 3B 0D 0A 09 49 46 20 4D    TextDown;...IF M
00D460:  6F 76 65 64 4F 4B 20 54 48 45 4E 0D 0A 09 09 49    ovedOK THEN....I
00D470:  46 20 54 68 69 73 79 3E 53 74 61 72 74 6F 66 57    F Thisy>StartofW
00D480:  69 6E 64 6F 77 20 54 48 45 4E 20 0D 0A 09 09 09    indow THEN .....
00D490:  44 45 43 28 54 68 69 73 79 29 3B 0D 0A 09 09 09    DEC(Thisy);.....
00D4A0:  52 65 73 65 74 50 6F 73 3B 0D 0A 09 09 45 4C 53    ResetPos;....ELS
00D4B0:  45 0D 0A 09 09 09 4C 69 6E 65 4D 6F 76 65 28 31    E.....LineMove(1
00D4C0:  29 3B 0D 0A 09 09 09 52 65 73 65 74 50 6F 73 3B    );.....ResetPos;
00D4D0:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44    .....END;....END
00D4E0:  3B 0D 0A 09 45 4E 44 20 53 63 72 6F 6C 6C 44 6F    ;...END ScrollDo
00D4F0:  77 6E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4C    wn;..PROCEDURE L
00D500:  4E 20 52 69 67 68 74 20 45 4E 44 3B 0D 0A 09 45    N Right END;...E
00D510:  4E 44 20 46 69 6E 64 57 6F 72 64 3B 0D 0A 50 52    ND FindWord;..PR
00D520:  4F 43 45 44 55 52 45 20 44 6F 77 6E 3B 0D 0A 42    OCEDURE Down;..B
00D530:  45 47 49 4E 0D 0A 09 4C 69 6E 65 4D 6F 76 65 28    EGIN...LineMove(
00D540:  31 29 3B 0D 0A 09 46 69 6C 65 4C 69 6D 69 74 3A    1);...FileLimit:
00D550:  3D 6C 69 6E 65 73 6D 6F 76 65 64 3D 30 3B 0D 0A    =linesmoved=0;..
00D560:  09 49 46 20 6C 69 6E 65 73 6D 6F 76 65 64 3E 30    .IF linesmoved>0
00D570:  20 54 48 45 4E 0D 0A 09 09 49 46 20 28 54 68 69     THEN....IF (Thi
00D580:  73 79 3E 3D 45 6E 64 6F 66 57 69 6E 64 6F 77 29    sy>=EndofWindow)
00D590:  20 54 48 45 4E 0D 0A 09 09 09 49 4E 43 28 54 68     THEN.....INC(Th
00D5A0:  69 73 79 29 3B 0D 0A 09 09 09 53 63 72 6F 6C 6C    isy);.....Scroll
00D5B0:  54 65 78 74 44 6F 77 6E 3B 0D 0A 09 09 09 44 45    TextDown;.....DE
00D5C0:  43 28 54 68 69 73 79 29 3B 0D 0A 09 09 09 52 65    C(Thisy);.....Re
00D5D0:  73 65 74 50 6F 73 3B 0D 0A 09 09 45 4C 53 49 46    setPos;....ELSIF
00D5E0:  20 20 4E 4F 54 20 52 65 44 72 61 77 6E 20 54 48      NOT ReDrawn TH
00D5F0:  45 4E 20 0D 0A 09 09 09 49 4E 43 28 54 68 69 73    EN .....INC(This
00D600:  79 29 3B 0D 0A 09 09 09 52 65 73 65 74 50 6F 73    y);.....ResetPos
00D610:  3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E    ;.....END;....EN
00D620:  44 3B 20 0D 0A 09 45 4E 44 20 44 6F 77 6E 3B 0D    D; ...END Down;.
00D630:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 64    ...PROCEDURE Red
00D640:  6F 4C 69 6E 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09    oLine;..BEGIN...
00D650:  47 6F 74 6F 78 79 28 30 2C 54 68 69 73 79 29 3B    Gotoxy(0,Thisy);
00D660:  0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 30 29    ...SetLinePos(0)
00D670:  3B 0D 0A 09 57 72 69 74 65 4C 69 6E 65 3B 0D 0A    ;...WriteLine;..
00D680:  09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E    .ChangePos;...EN
00D690:  44 20 52 65 64 6F 4C 69 6E 65 3B 0D 0A 0D 0A 50    D RedoLine;....P
00D6A0:  52 4F 43 45 44 55 52 45 20 49 6E 73 4F 6E 65 43    ROCEDURE InsOneC
00D6B0:  68 61 72 28 63 68 3A 43 48 41 52 29 3B 0D 0A 56    har(ch:CHAR);..V
00D6C0:  41 52 09 43 48 31 3A 41 52 52 41 59 5B 30 2E 2E    AR.CH1:ARRAY[0..
00D6D0:  30 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47    0] OF CHAR;..BEG
00D6E0:  49 4E 0D 0A 09 52 65 44 72 61 77 6E 3A 3D 46 41    IN...ReDrawn:=FA
00D6F0:  4C 53 45 3B 0D 0A 09 4D 61 72 6B 41 73 55 70 64    LSE;...MarkAsUpd
00D700:  65 66 74 3B 0D 0A 56 41 52 09 63 68 3A 43 48 41    eft;..VAR.ch:CHA
00D710:  52 3B 0D 0A 09 53 61 76 65 4C 69 6E 65 4C 65 6E    R;...SaveLineLen
00D720:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 70 3A 50    :CARDINAL;...p:P
00D730:  6F 73 69 74 69 6F 6E 3B 0D 0A 42 45 47 49 4E 0D    osition;..BEGIN.
00D740:  0A 09 4D 6F 76 65 64 4F 4B 3A 3D 54 52 55 45 3B    ..MovedOK:=TRUE;
00D750:  0D 0A 09 52 65 44 72 61 77 6E 3A 3D 46 41 4C 53    ...ReDrawn:=FALS
00D760:  45 3B 0D 0A 09 53 61 76 65 4C 69 6E 65 4C 65 6E    E;...SaveLineLen
00D770:  3A 3D 4C 69 6E 65 4C 65 6E 3B 0D 0A 09 47 65 74    :=LineLen;...Get
00D780:  50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69 6C 65    Position(CurFile
00D790:  50 74 72 5E 2C 70 29 3B 0D 0A 09 49 46 20 4C 69    Ptr^,p);...IF Li
00D7A0:  6E 65 50 6F 73 3E 30 20 54 48 45 4E 0D 0A 09 09    nePos>0 THEN....
00D7B0:  62 3A 3D 42 61 63 6B 4F 6E 65 43 68 61 72 28 43    b:=BackOneChar(C
00D7C0:  75 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 09    urFilePtr^);....
00D7D0:  63 68 3A 3D 47 65 74 43 75 72 72 65 6E 74 43 68    ch:=GetCurrentCh
00D7E0:  61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B    ar(CurFilePtr^);
00D7F0:  0D 0A 09 09 49 46 20 28 43 75 72 72 65 6E 74 4C    ....IF (CurrentL
00D800:  65 66 74 4D 61 72 67 69 6E 3E 30 29 20 41 4E 44    eftMargin>0) AND
00D810:  20 28 54 68 69 73 78 3D 30 29 20 54 48 45 4E 0D     (Thisx=0) THEN.
00D820:  0A 09 09 09 43 68 61 6E 67 65 4D 61 72 67 69 6E    ....ChangeMargin
00D830:  28 2D 33 32 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D    (-32);.....END;.
00D840:  0A 09 09 44 45 43 28 4C 69 6E 65 50 6F 73 29 3B    ...DEC(LinePos);
00D850:  0D 0A 09 09 49 46 20 4E 4F 54 20 52 65 44 72 61    ....IF NOT ReDra
00D860:  77 6E 20 54 48 45 4E 0D 0A 09 09 09 49 46 20 63    wn THEN.....IF c
00D870:  68 3C 3E 54 41 42 20 54 48 45 4E 0D 0A 09 09 09    h<>TAB THEN.....
00D880:  09 44 45 43 28 54 68 69 73 78 29 3B 0D 0A 09 09    .DEC(Thisx);....
00D890:  09 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 09 09    ..ResetPos;.....
00D8A0:  45 4C 53 45 0D 0A 09 09 09 09 4C 69 6E 65 4D 6F    ELSE......LineMo
00D8B0:  76 65 28 30 29 3B 0D 0A 09 09 09 09 45 4E 44 3B    ve(0);......END;
00D8C0:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 0D 0A 09 45 4C    .....END;.....EL
00D8D0:  53 45 0D 0A 09 09 54 68 69 73 78 3A 3D 31 30 32    SE....Thisx:=102
00D8E0:  33 3B 0D 0A 09 09 4C 69 6E 65 50 6F 73 3A 3D 31    3;....LinePos:=1
00D8F0:  30 32 33 3B 0D 0A 09 09 55 70 3B 0D 0A 09 09 49    023;....Up;....I
00D900:  61 74 65 64 3B 0D 0A 09 43 48 31 5B 30 5D 3A 3D    ated;...CH1[0]:=
00D910:  63 68 3B 0D 0A 09 49 6E 73 43 68 61 72 73 28 43    ch;...InsChars(C
00D920:  75 72 46 69 6C 65 50 74 72 5E 2C 43 48 31 2C 31    urFilePtr^,CH1,1
00D930:  29 3B 0D 0A 09 49 4E 43 28 4C 69 6E 65 50 6F 73    );...INC(LinePos
00D940:  29 3B 0D 0A 09 49 4E 43 28 4C 69 6E 65 4C 65 6E    );...INC(LineLen
00D950:  29 3B 0D 0A 09 49 46 20 63 68 3D 43 52 20 54 48    );...IF ch=CR TH
00D960:  45 4E 0D 0A 09 09 43 48 31 5B 30 5D 3A 3D 4C 46    EN....CH1[0]:=LF
00D970:  3B 0D 0A 09 09 49 6E 73 43 68 61 72 73 28 43 75    ;....InsChars(Cu
00D980:  72 46 69 6C 65 50 74 72 5E 2C 43 48 31 2C 31 29    rFilePtr^,CH1,1)
00D990:  3B 0D 0A 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A    ;....ResetPos;..
00D9A0:  09 09 44 6F 53 63 72 65 65 6E 43 68 61 6E 67 65    ..DoScreenChange
00D9B0:  28 44 65 6C 45 6F 6C 29 3B 0D 0A 09 09 49 46 20    (DelEol);....IF 
00D9C0:  54 68 69 73 79 3E 3D 45 6E 64 6F 66 57 69 6E 64    Thisy>=EndofWind
00D9D0:  6F 77 20 54 48 45 4E 0D 0A 09 28 2A 09 09 53 63    ow THEN...(*..Sc
00D9E0:  72 6F 6C 6C 54 65 78 74 44 6F 77 6E 3B 2A 29 0D    rollTextDown;*).
00D9F0:  0A 09 09 09 53 63 72 6F 6C 6C 57 69 6E 64 6F 77    ....ScrollWindow
00DA00:  44 6F 77 6E 28 53 74 61 72 74 6F 66 57 69 6E 64    Down(StartofWind
00DA10:  6F 77 2C 45 6E 64 6F 66 57 69 6E 64 6F 77 29 3B    ow,EndofWindow);
00DA20:  0D 0A 09 09 09 44 45 43 28 54 68 69 73 79 29 3B    .....DEC(Thisy);
00DA30:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 47 6F 74    .....END;....Got
00DA40:  6F 78 79 28 30 2C 45 6E 64 6F 66 57 69 6E 64 6F    oxy(0,EndofWindo
00DA50:  77 29 3B 0D 0A 09 09 53 63 72 6F 6C 6C 57 69 6E    w);....ScrollWin
00DA60:  64 6F 77 55 70 28 54 68 69 73 79 2B 31 2C 45 6E    dowUp(Thisy+1,En
00DA70:  64 6F 66 57 69 6E 64 6F 77 29 3B 0D 0A 09 09 52    dofWindow);....R
00DA80:  65 73 65 74 50 6F 73 3B 0D 0A 09 09 49 4E 43 28    esetPos;....INC(
00DA90:  54 68 69 73 79 29 3B 0D 0A 09 09 52 65 73 65 74    Thisy);....Reset
00DAA0:  50 6F 73 3B 0D 0A 09 09 4C 69 6E 65 50 6F 73 3A    Pos;....LinePos:
00DAB0:  3D 30 3B 0D 0A 09 09 52 65 64 6F 4C 69 6E 65 3B    =0;....RedoLine;
00DAC0:  0D 0A 09 45 4C 53 49 46 20 63 68 3D 54 41 42 20    ...ELSIF ch=TAB 
00DAD0:  54 48 45 4E 20 52 65 64 6F 4C 69 6E 65 09 0D 0A    THEN RedoLine...
00DAE0:  09 45 4C 53 45 0D 0A 09 09 49 46 20 54 68 69 73    .ELSE....IF This
00DAF0:  78 3E 3D 28 53 63 72 65 65 6E 57 69 64 74 68 2D    x>=(ScreenWidth-
00DB00:  46 20 4E 4F 54 20 4D 6F 76 65 64 4F 4B 20 54 48    F NOT MovedOK TH
00DB10:  45 4E 0D 0A 09 09 09 4C 69 6E 65 50 6F 73 3A 3D    EN.....LinePos:=
00DB20:  30 3B 0D 0A 09 09 09 4C 69 6E 65 4C 65 6E 3A 3D    0;.....LineLen:=
00DB30:  53 61 76 65 4C 69 6E 65 4C 65 6E 3B 0D 0A 09 09    SaveLineLen;....
00DB40:  09 53 65 74 50 6F 73 69 74 69 6F 6E 28 43 75 72    .SetPosition(Cur
00DB50:  46 69 6C 65 50 74 72 5E 2C 70 29 3B 0D 0A 09 09    FilePtr^,p);....
00DB60:  09 54 68 69 73 78 3A 3D 30 3B 0D 0A 09 09 09 52    .Thisx:=0;.....R
00DB70:  65 73 65 74 50 6F 73 3B 0D 0A 09 09 09 45 4E 44    esetPos;.....END
00DB80:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20    ;....END;...END 
00DB90:  4C 65 66 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45    Left;..PROCEDURE
00DBA0:  20 52 69 67 68 74 3B 0D 0A 56 41 52 09 63 68 3A     Right;..VAR.ch:
00DBB0:  43 48 41 52 3B 0D 0A 09 69 3A 43 41 52 44 49 4E    CHAR;...i:CARDIN
00DBC0:  41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 63 68 3A    AL;..BEGIN...ch:
00DBD0:  3D 47 65 74 43 75 72 72 65 6E 74 43 68 61 72 28    =GetCurrentChar(
00DBE0:  43 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09    CurFilePtr^);...
00DBF0:  49 46 20 63 68 3D 31 61 78 20 28 2A 6F 6E 20 45    IF ch=1ax (*on E
00DC00:  4F 46 20 63 68 61 72 2A 29 20 54 48 45 4E 20 52    OF char*) THEN R
00DC10:  45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 49 46 20    ETURN END;...IF 
00DC20:  4C 69 6E 65 50 6F 73 3E 3D 4C 69 6E 65 4C 65 6E    LinePos>=LineLen
00DC30:  20 54 48 45 4E 0D 0A 09 09 54 68 69 73 78 3A 3D     THEN....Thisx:=
00DC40:  30 3B 0D 0A 09 09 4C 69 6E 65 50 6F 73 3A 3D 30    0;....LinePos:=0
00DC50:  3B 0D 0A 09 09 44 6F 77 6E 3B 0D 0A 0D 0A 09 45    ;....Down;.....E
00DC60:  4C 53 45 0D 0A 0D 0A 09 09 49 46 20 63 68 3D 54    LSE......IF ch=T
00DC70:  41 42 20 54 48 45 4E 20 69 3A 3D 39 20 45 4C 53    AB THEN i:=9 ELS
00DC80:  45 20 69 3A 3D 31 20 45 4E 44 3B 0D 0A 09 09 49    E i:=1 END;....I
00DC90:  46 20 28 54 68 69 73 78 2B 69 29 3E 3D 28 53 63    F (Thisx+i)>=(Sc
00DCA0:  72 65 65 6E 57 69 64 74 68 2D 31 29 20 54 48 45    reenWidth-1) THE
00DCB0:  4E 0D 0A 09 09 09 43 68 61 6E 67 65 4D 61 72 67    N.....ChangeMarg
00DCC0:  69 6E 28 33 32 29 3B 0D 0A 09 09 09 45 4E 44 3B    in(32);.....END;
00DCD0:  0D 0A 09 09 62 3A 3D 46 6F 72 77 61 72 64 4F 6E    ....b:=ForwardOn
00DCE0:  65 43 68 61 72 28 43 75 72 46 69 6C 65 50 74 72    eChar(CurFilePtr
00DCF0:  5E 29 3B 0D 0A 09 09 49 4E 43 28 4C 69 6E 65 50    ^);....INC(LineP
00DD00:  31 29 20 54 48 45 4E 0D 0A 09 09 09 43 68 61 6E    1) THEN.....Chan
00DD10:  67 65 4D 61 72 67 69 6E 28 33 32 29 3B 0D 0A 09    geMargin(32);...
00DD20:  09 09 45 4E 44 3B 0D 0A 09 09 49 46 20 4E 4F 54    ..END;....IF NOT
00DD30:  20 52 65 44 72 61 77 6E 20 54 48 45 4E 0D 0A 09     ReDrawn THEN...
00DD40:  09 09 49 46 20 4C 69 6E 65 50 6F 73 3C 4C 69 6E    ..IF LinePos<Lin
00DD50:  65 4C 65 6E 20 54 48 45 4E 0D 0A 09 09 09 09 62    eLen THEN......b
00DD60:  3A 3D 42 61 63 6B 4F 6E 65 43 68 61 72 28 43 75    :=BackOneChar(Cu
00DD70:  72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 09 09    rFilePtr^);.....
00DD80:  09 57 72 69 74 65 50 61 72 74 4C 69 6E 65 28 43    .WritePartLine(C
00DD90:  75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 6E    urrentLeftMargin
00DDA0:  2B 54 68 69 73 78 2B 31 29 3B 0D 0A 09 09 09 09    +Thisx+1);......
00DDB0:  49 4E 43 28 54 68 69 73 78 29 3B 0D 0A 09 09 09    INC(Thisx);.....
00DDC0:  09 62 3A 3D 46 6F 72 77 61 72 64 4F 6E 65 43 68    .b:=ForwardOneCh
00DDD0:  61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B    ar(CurFilePtr^);
00DDE0:  09 09 09 09 0D 0A 09 09 09 45 4C 53 45 0D 0A 09    .........ELSE...
00DDF0:  09 09 09 57 72 69 74 65 28 63 68 29 3B 0D 0A 09    ...Write(ch);...
00DE00:  09 09 09 49 4E 43 28 54 68 69 73 78 29 3B 0D 0A    ...INC(Thisx);..
00DE10:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44    ....END;.....END
00DE20:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 65 73 65    ;....END;...Rese
00DE30:  74 50 6F 73 3B 0D 0A 09 45 4E 44 20 49 6E 73 4F    tPos;...END InsO
00DE40:  6E 65 43 68 61 72 3B 0D 0A 50 52 4F 43 45 44 55    neChar;..PROCEDU
00DE50:  52 45 20 44 65 6C 4F 6E 65 43 68 61 72 3B 0D 0A    RE DelOneChar;..
00DE60:  42 45 47 49 4E 0D 0A 09 4D 61 72 6B 41 73 55 70    BEGIN...MarkAsUp
00DE70:  64 61 74 65 64 3B 0D 0A 09 63 68 3A 3D 47 65 74    dated;...ch:=Get
00DE80:  43 75 72 72 65 6E 74 43 68 61 72 28 43 75 72 46    CurrentChar(CurF
00DE90:  69 6C 65 50 74 72 5E 29 3B 0D 0A 09 49 46 20 4C    ilePtr^);...IF L
00DEA0:  69 6E 65 50 6F 73 3D 4C 69 6E 65 4C 65 6E 20 54    inePos=LineLen T
00DEB0:  48 45 4E 20 69 3A 3D 32 0D 0A 09 45 4C 53 45 20    HEN i:=2...ELSE 
00DEC0:  69 3A 3D 31 20 45 4E 44 3B 0D 0A 09 44 65 6C 43    i:=1 END;...DelC
00DED0:  68 61 72 73 28 43 75 72 46 69 6C 65 50 74 72 5E    hars(CurFilePtr^
00DEE0:  2C 69 29 3B 0D 0A 09 49 46 20 69 3D 32 20 54 48    ,i);...IF i=2 TH
00DEF0:  45 4E 0D 0A 09 09 49 46 20 54 68 69 73 79 3C 45    EN....IF Thisy<E
00DF00:  6F 73 29 3B 0D 0A 09 09 49 46 20 63 68 3C 3E 54    os);....IF ch<>T
00DF10:  41 42 20 54 48 45 4E 0D 0A 09 09 09 49 4E 43 28    AB THEN.....INC(
00DF20:  54 68 69 73 78 29 3B 0D 0A 09 09 09 52 65 73 65    Thisx);.....Rese
00DF30:  74 50 6F 73 3B 0D 0A 09 09 45 4C 53 45 0D 0A 0D    tPos;....ELSE...
00DF40:  0A 09 09 09 28 2A 69 66 20 6D 6F 76 65 73 20 6F    ....(*if moves o
00DF50:  76 65 72 20 74 61 62 73 20 61 72 65 20 73 6C 6F    ver tabs are slo
00DF60:  77 2C 20 72 65 70 6C 61 63 65 20 74 68 65 0D 0A    w, replace the..
00DF70:  09 09 09 20 20 72 65 70 65 61 74 65 64 20 6D 6F    ...  repeated mo
00DF80:  76 65 73 20 72 69 67 68 74 20 62 79 20 61 20 67    ves right by a g
00DF90:  6F 74 6F 78 79 2A 29 0D 0A 09 09 09 54 68 69 73    otoxy*).....This
00DFA0:  78 3A 3D 49 41 4E 44 28 54 68 69 73 78 2B 38 2C    x:=IAND(Thisx+8,
00DFB0:  30 66 66 66 38 68 29 3B 0D 0A 09 09 09 52 65 73    0fff8h);.....Res
00DFC0:  65 74 50 6F 73 3B 0D 0A 09 09 09 45 4E 44 3B 0D    etPos;.....END;.
00DFD0:  0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 52 69    ...END;...END Ri
00DFE0:  67 68 74 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52    ght;....PROCEDUR
00DFF0:  45 20 41 6C 70 68 61 4E 75 6D 28 63 68 3A 43 48    E AlphaNum(ch:CH
00E000:  41 52 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45    AR):BOOLEAN;..BE
00E010:  47 49 4E 0D 0A 09 63 68 3A 3D 43 41 50 28 63 68    GIN...ch:=CAP(ch
00E020:  29 3B 0D 0A 09 52 45 54 55 52 4E 20 28 28 63 68    );...RETURN ((ch
00E030:  3E 3D 27 41 27 29 20 41 4E 44 20 28 63 68 3C 3D    >='A') AND (ch<=
00E040:  27 5A 27 29 29 20 4F 52 20 28 28 63 68 3E 3D 27    'Z')) OR ((ch>='
00E050:  30 27 29 20 41 4E 44 20 28 63 68 3C 3D 27 39 27    0') AND (ch<='9'
00E060:  29 29 3B 0D 0A 09 45 4E 44 20 41 6C 70 68 61 4E    ));...END AlphaN
00E070:  75 6D 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45    um;....PROCEDURE
00E080:  20 46 69 6E 64 57 6F 72 64 28 42 61 63 6B 77 61     FindWord(Backwa
00E090:  72 64 3A 42 4F 4F 4C 45 41 4E 3B 44 65 6C 65 74    rd:BOOLEAN;Delet
00E0A0:  65 3A 42 4F 4F 4C 45 41 4E 29 3B 0D 0A 0D 0A 28    e:BOOLEAN);....(
00E0B0:  2A 09 46 69 6E 64 20 61 20 77 6F 72 64 20 61 6E    *.Find a word an
00E0C0:  64 20 6F 70 74 69 6F 6E 61 6C 6C 79 20 64 65 6C    d optionally del
00E0D0:  65 74 65 20 69 74 0D 0A 0D 0A 09 41 20 77 6F 72    ete it.....A wor
00E0E0:  64 20 69 73 20 61 20 73 74 72 69 6E 67 20 61 6C    d is a string al
00E0F0:  70 68 61 6E 75 6D 65 72 69 63 73 20 6F 72 20 61    phanumerics or a
00E100:  6E 64 6F 66 57 69 6E 64 6F 77 20 54 48 45 4E 20    ndofWindow THEN 
00E110:  0D 0A 09 09 09 49 4E 43 28 54 68 69 73 79 29 3B    .....INC(Thisy);
00E120:  0D 0A 09 09 09 69 3A 3D 4C 69 6E 65 50 6F 73 3B    .....i:=LinePos;
00E130:  0D 0A 09 09 09 52 65 6D 6F 76 65 4C 69 6E 65 3B    .....RemoveLine;
00E140:  0D 0A 09 09 09 4C 69 6E 65 50 6F 73 3A 3D 69 3B    .....LinePos:=i;
00E150:  0D 0A 09 09 09 44 45 43 28 54 68 69 73 79 29 3B    .....DEC(Thisy);
00E160:  0D 0A 09 09 09 52 65 64 6F 4C 69 6E 65 3B 0D 0A    .....RedoLine;..
00E170:  09 09 09 45 4E 44 3B 0D 0A 09 45 4C 53 45 09 0D    ...END;...ELSE..
00E180:  0A 09 09 44 45 43 28 4C 69 6E 65 4C 65 6E 29 3B    ...DEC(LineLen);
00E190:  0D 0A 09 09 57 72 69 74 65 50 61 72 74 4C 69 6E    ....WritePartLin
00E1A0:  65 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72    e(CurrentLeftMar
00E1B0:  67 69 6E 2B 54 68 69 73 78 2B 31 29 3B 0D 0A 09    gin+Thisx+1);...
00E1C0:  09 45 4E 44 3B 0D 0A 28 2A 09 45 4C 53 49 46 20    .END;..(*.ELSIF 
00E1D0:  63 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 09 52    ch=TAB THEN....R
00E1E0:  65 64 6F 4C 69 6E 65 0D 0A 09 45 4C 53 45 0D 0A    edoLine...ELSE..
00E1F0:  09 09 4C 69 6E 65 4C 65 6E 3A 3D 4C 69 6E 65 4C    ..LineLen:=LineL
00E200:  65 6E 2D 31 3B 0D 0A 09 09 44 6F 53 63 72 65 65    en-1;....DoScree
00E210:  6E 43 68 61 6E 67 65 28 44 65 6C 43 68 61 72 29    nChange(DelChar)
00E220:  3B 0D 0A 09 09 45 4E 44 3B 2A 29 0D 0A 09 52 65    ;....END;*)...Re
00E230:  73 65 74 50 6F 73 3B 0D 0A 09 45 4E 44 20 44 65    setPos;...END De
00E240:  6C 4F 6E 65 43 68 61 72 3B 0D 0A 50 52 4F 43 45    lOneChar;..PROCE
00E250:  44 55 52 45 20 4F 76 65 72 57 72 69 74 65 28 63    DURE OverWrite(c
00E260:  68 3A 43 48 41 52 29 3B 0D 0A 56 41 52 09 43 48    h:CHAR);..VAR.CH
00E270:  31 3A 41 52 52 41 59 5B 30 2E 2E 30 5D 20 4F 46    1:ARRAY[0..0] OF
00E280:  20 43 48 41 52 3B 0D 0A 42 45 47 49 4E 0D 0A 09     CHAR;..BEGIN...
00E290:  43 48 31 5B 30 5D 3A 3D 47 65 74 43 75 72 72 65    CH1[0]:=GetCurre
00E2A0:  6E 74 43 68 61 72 28 43 75 72 46 69 6C 65 50 74    ntChar(CurFilePt
00E2B0:  72 5E 29 3B 0D 0A 09 49 46 20 28 43 48 31 5B 30    r^);...IF (CH1[0
00E2C0:  5D 3C 3E 43 52 29 20 41 4E 44 20 28 63 68 3C 3E    ]<>CR) AND (ch<>
00E2D0:  43 52 29 20 41 4E 44 20 28 43 48 31 5B 30 5D 3C    CR) AND (CH1[0]<
00E2E0:  3E 31 61 78 29 20 54 48 45 4E 0D 0A 09 09 49 46    >1ax) THEN....IF
00E2F0:  20 28 43 48 31 5B 30 5D 3C 3E 54 41 42 29 20 41     (CH1[0]<>TAB) A
00E300:  20 73 74 72 69 6E 67 20 6F 66 20 6D 61 72 6B 73     string of marks
00E310:  2C 20 74 61 62 73 20 20 6F 72 20 73 70 6F 61 63    , tabs  or spoac
00E320:  65 73 0D 0A 0D 0A 09 54 68 65 20 63 75 72 73 6F    es.....The curso
00E330:  72 20 69 73 20 72 65 70 6F 73 69 74 69 6F 6E 65    r is repositione
00E340:  64 2A 29 0D 0A 56 41 52 09 63 68 3A 43 48 41 52    d*)..VAR.ch:CHAR
00E350:  3B 0D 0A 09 62 31 3A 42 4F 4F 4C 45 41 4E 3B 0D    ;...b1:BOOLEAN;.
00E360:  0A 42 45 47 49 4E 0D 0A 09 46 69 6C 65 4C 69 6D    .BEGIN...FileLim
00E370:  69 74 3A 3D 46 41 4C 53 45 3B 0D 0A 09 49 46 20    it:=FALSE;...IF 
00E380:  42 61 63 6B 77 61 72 64 20 54 48 45 4E 20 0D 0A    Backward THEN ..
00E390:  09 09 4C 65 66 74 3B 0D 0A 09 09 49 46 20 4E 4F    ..Left;....IF NO
00E3A0:  54 20 4D 6F 76 65 64 4F 4B 20 54 48 45 4E 20 52    T MovedOK THEN R
00E3B0:  45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 09 45 4E    ETURN END;....EN
00E3C0:  44 3B 0D 0A 09 63 68 3A 3D 47 65 74 43 75 72 72    D;...ch:=GetCurr
00E3D0:  65 6E 74 43 68 61 72 28 43 75 72 46 69 6C 65 50    entChar(CurFileP
00E3E0:  74 72 5E 29 3B 0D 0A 09 62 31 3A 3D 41 6C 70 68    tr^);...b1:=Alph
00E3F0:  61 4E 75 6D 28 63 68 29 3B 0D 0A 09 49 46 20 63    aNum(ch);...IF c
00E400:  68 3D 45 4F 46 20 54 48 45 4E 20 52 45 54 55 52    h=EOF THEN RETUR
00E410:  4E 20 45 4E 44 3B 0D 0A 09 52 45 50 45 41 54 0D    N END;...REPEAT.
00E420:  0A 09 09 49 46 20 44 65 6C 65 74 65 20 54 48 45    ...IF Delete THE
00E430:  4E 20 44 65 6C 4F 6E 65 43 68 61 72 20 45 4E 44    N DelOneChar END
00E440:  3B 0D 0A 09 09 49 46 20 42 61 63 6B 77 61 72 64    ;....IF Backward
00E450:  20 20 20 54 48 45 4E 20 4C 65 66 74 3B 0D 0A 09       THEN Left;...
00E460:  09 45 4C 53 49 46 20 4E 4F 54 20 44 65 6C 65 74    .ELSIF NOT Delet
00E470:  65 20 54 48 45 4E 20 52 69 67 68 74 20 45 4E 44    e THEN Right END
00E480:  3B 0D 0A 09 09 63 68 3A 3D 47 65 74 43 75 72 72    ;....ch:=GetCurr
00E490:  65 6E 74 43 68 61 72 28 43 75 72 46 69 6C 65 50    entChar(CurFileP
00E4A0:  74 72 5E 29 3B 0D 0A 09 09 55 4E 54 49 4C 20 20    tr^);....UNTIL  
00E4B0:  28 62 31 3C 3E 41 6C 70 68 61 4E 75 6D 28 63 68    (b1<>AlphaNum(ch
00E4C0:  29 29 20 4F 52 20 46 69 6C 65 4C 69 6D 69 74 20    )) OR FileLimit 
00E4D0:  4F 52 20 28 63 68 3D 45 4F 46 29 3B 0D 0A 09 49    OR (ch=EOF);...I
00E4E0:  46 20 42 61 63 6B 77 61 72 64 20 41 4E 44 20 4E    F Backward AND N
00E4F0:  4F 54 20 46 69 6C 65 4C 69 6D 69 74 20 54 48 45    OT FileLimit THE
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:  4E 44 20 28 63 68 3C 3E 54 41 42 29 20 54 48 45    ND (ch<>TAB) THE
00E610:  4E 0D 0A 09 09 09 44 65 6C 43 68 61 72 73 28 43    N.....DelChars(C
00E620:  75 72 46 69 6C 65 50 74 72 5E 2C 31 29 3B 0D 0A    urFilePtr^,1);..
00E630:  09 09 09 43 48 31 5B 30 5D 3A 3D 63 68 3B 0D 0A    ...CH1[0]:=ch;..
00E640:  09 09 09 49 6E 73 43 68 61 72 73 28 43 75 72 46    ...InsChars(CurF
00E650:  69 6C 65 50 74 72 5E 2C 43 48 31 2C 31 29 3B 0D    ilePtr^,CH1,1);.
00E660:  0A 09 09 09 62 3A 3D 42 61 63 6B 4F 6E 65 43 68    ....b:=BackOneCh
00E670:  61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B    ar(CurFilePtr^);
00E680:  0D 0A 09 09 09 57 72 69 74 65 28 63 68 29 3B 0D    .....Write(ch);.
00E690:  0A 09 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09    ....ResetPos;...
00E6A0:  09 09 52 69 67 68 74 3B 0D 0A 09 09 09 55 70 64    ..Right;.....Upd
00E6B0:  61 74 65 64 5B 43 75 72 72 65 6E 74 46 69 6C 65    ated[CurrentFile
00E6C0:  5D 3A 3D 54 52 55 45 3B 0D 0A 09 09 45 4C 53 45    ]:=TRUE;....ELSE
00E6D0:  0D 0A 09 09 09 44 65 6C 4F 6E 65 43 68 61 72 3B    .....DelOneChar;
00E6E0:  0D 0A 09 09 09 49 6E 73 4F 6E 65 43 68 61 72 28    .....InsOneChar(
00E6F0:  63 68 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09    ch);.....END;...
00E700:  45 4C 53 45 0D 0A 09 09 49 6E 73 4F 6E 65 43 68    ELSE....InsOneCh
00E710:  61 72 28 63 68 29 3B 0D 0A 09 09 45 4E 44 3B 0D    ar(ch);....END;.
00E720:  0A 09 45 4E 44 20 4F 76 65 72 57 72 69 74 65 3B    ..END OverWrite;
00E730:  0D 0A 50 52 4F 43 45 44 55 52 45 20 55 70 3B 0D    ..PROCEDURE Up;.
00E740:  0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 54    ....BEGIN...IF T
00E750:  68 69 73 79 3C 3D 53 74 61 72 74 6F 66 57 69 6E    hisy<=StartofWin
00E760:  64 6F 77 20 54 48 45 4E 0D 0A 09 09 53 63 72 6F    dow THEN....Scro
00E770:  6C 6C 54 65 78 74 55 70 3B 0D 0A 09 09 45 4E 44    llTextUp;....END
00E780:  3B 0D 0A 09 4C 69 6E 65 4D 6F 76 65 28 2D 31 29    ;...LineMove(-1)
00E790:  3B 0D 0A 09 46 69 6C 65 4C 69 6D 69 74 3A 3D 6C    ;...FileLimit:=l
00E7A0:  69 6E 65 73 6D 6F 76 65 64 3D 30 3B 0D 0A 09 49    inesmoved=0;...I
00E7B0:  46 20 28 6C 69 6E 65 73 6D 6F 76 65 64 3C 3E 30    F (linesmoved<>0
00E7C0:  29 20 41 4E 44 20 28 54 68 69 73 79 3E 53 74 61    ) AND (Thisy>Sta
00E7D0:  72 74 6F 66 57 69 6E 64 6F 77 29 20 41 4E 44 20    rtofWindow) AND 
00E7E0:  4E 4F 54 20 52 65 44 72 61 77 6E 20 54 48 45 4E    NOT ReDrawn THEN
00E7F0:  20 0D 0A 09 09 44 45 43 28 54 68 69 73 79 29 3B     ....DEC(Thisy);
00E800:  4E 6F 3A 49 4E 54 45 47 45 52 29 3B 0D 0A 42 45    No:INTEGER);..BE
00E810:  47 49 4E 0D 0A 09 46 4F 52 20 69 3A 3D 57 69 6E    GIN...FOR i:=Win
00E820:  64 6F 77 4E 6F 2B 31 20 54 4F 20 49 4E 54 45 47    dowNo+1 TO INTEG
00E830:  45 52 28 57 69 6E 64 6F 77 73 29 20 44 4F 0D 0A    ER(Windows) DO..
00E840:  09 09 4D 6F 76 65 57 69 6E 64 6F 77 28 69 2C 69    ..MoveWindow(i,i
00E850:  2D 31 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 44    -1);....END;...D
00E860:  45 43 28 57 69 6E 64 6F 77 73 29 3B 0D 0A 09 43    EC(Windows);...C
00E870:  75 72 72 65 6E 74 57 69 6E 64 6F 77 3A 3D 30 3B    urrentWindow:=0;
00E880:  0D 0A 09 45 4E 44 20 45 6C 69 64 65 57 69 6E 64    ...END ElideWind
00E890:  6F 77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4D    ow;..PROCEDURE M
00E8A0:  61 6B 65 57 69 6E 64 6F 77 3B 0D 0A 42 45 47 49    akeWindow;..BEGI
00E8B0:  4E 0D 0A 09 49 4E 43 28 57 69 6E 64 6F 77 73 29    N...INC(Windows)
00E8C0:  3B 0D 0A 09 4D 6F 76 65 57 69 6E 64 6F 77 28 43    ;...MoveWindow(C
00E8D0:  75 72 72 65 6E 74 57 69 6E 64 6F 77 2C 57 69 6E    urrentWindow,Win
00E8E0:  64 6F 77 73 29 3B 0D 0A 09 45 4E 44 20 4D 61 6B    dows);...END Mak
00E8F0:  65 57 69 6E 64 6F 77 3B 0D 0A 50 52 4F 43 45 44    eWindow;..PROCED
00E900:  55 52 45 20 53 65 61 72 63 68 28 52 65 70 6C 61    URE Search(Repla
00E910:  63 65 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52    ce:ARRAY OF CHAR
00E920:  3B 52 4C 65 6E 3A 49 4E 54 45 47 45 52 3B 4C 65    ;RLen:INTEGER;Le
00E930:  6E 3A 43 41 52 44 49 4E 41 4C 29 3A 42 4F 4F 4C    n:CARDINAL):BOOL
00E940:  45 41 4E 3B 0D 0A 0D 0A 28 2A 09 73 65 61 72 63    EAN;....(*.searc
00E950:  68 20 66 6F 72 20 73 74 72 69 6E 67 20 61 6E 64    h for string and
00E960:  20 72 65 70 6C 61 63 65 20 69 66 20 66 6F 75 6E     replace if foun
00E970:  64 2A 29 0D 0A 56 41 52 09 62 3A 42 4F 4F 4C 45    d*)..VAR.b:BOOLE
00E980:  41 4E 3B 0D 0A 09 46 6F 75 6E 64 3A 42 4F 4F 4C    AN;...Found:BOOL
00E990:  45 41 4E 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41    EAN;...i:CARDINA
00E9A0:  4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 62 3A 3D 4C    L;..BEGIN...b:=L
00E9B0:  65 6E 3E 31 32 38 3B 0D 0A 09 49 46 20 62 20 54    en>128;...IF b T
00E9C0:  48 45 4E 20 4C 65 6E 3A 3D 4C 65 6E 2D 31 32 38    HEN Len:=Len-128
00E9D0:  20 45 4E 44 3B 0D 0A 09 46 6F 75 6E 64 3A 3D 46     END;...Found:=F
00E9E0:  69 6E 64 53 74 72 69 6E 67 28 43 75 72 46 69 6C    indString(CurFil
00E9F0:  65 50 74 72 5E 2C 62 29 3B 0D 0A 09 49 46 20 46    ePtr^,b);...IF F
00EA00:  0D 0A 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09    ....ResetPos;...
00EA10:  09 45 4E 44 3B 0D 0A 09 45 4E 44 20 55 70 3B 0D    .END;...END Up;.
00EA20:  0A 50 52 4F 43 45 44 55 52 45 20 55 70 53 63 72    .PROCEDURE UpScr
00EA30:  65 65 6E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4C 69    een;..BEGIN...Li
00EA40:  6E 65 4D 6F 76 65 28 31 2D 49 4E 54 45 47 45 52    neMove(1-INTEGER
00EA50:  28 4C 69 6E 65 73 50 65 72 57 69 6E 64 6F 77 29    (LinesPerWindow)
00EA60:  29 3B 0D 0A 09 45 4E 44 20 55 70 53 63 72 65 65    );...END UpScree
00EA70:  6E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 6F    n;..PROCEDURE Do
00EA80:  77 6E 53 63 72 65 65 6E 3B 0D 0A 42 45 47 49 4E    wnScreen;..BEGIN
00EA90:  0D 0A 09 4C 69 6E 65 4D 6F 76 65 28 4C 69 6E 65    ...LineMove(Line
00EAA0:  73 50 65 72 57 69 6E 64 6F 77 2D 31 29 3B 0D 0A    sPerWindow-1);..
00EAB0:  09 45 4E 44 20 44 6F 77 6E 53 63 72 65 65 6E 3B    .END DownScreen;
00EAC0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 54 6F 70 3B    ..PROCEDURE Top;
00EAD0:  0D 0A 42 45 47 49 4E 0D 0A 09 4C 69 6E 65 50 6F    ..BEGIN...LinePo
00EAE0:  73 3A 3D 30 3B 0D 0A 09 4C 69 6E 65 4D 6F 76 65    s:=0;...LineMove
00EAF0:  28 2D 31 36 37 33 36 29 3B 0D 0A 09 45 4E 44 20    (-16736);...END 
00EB00:  54 6F 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    Top;..PROCEDURE 
00EB10:  42 6F 74 74 6F 6D 3B 0D 0A 42 45 47 49 4E 0D 0A    Bottom;..BEGIN..
00EB20:  09 4C 69 6E 65 50 6F 73 3A 3D 39 39 39 3B 0D 0A    .LinePos:=999;..
00EB30:  09 4C 69 6E 65 4D 6F 76 65 28 31 36 37 33 36 29    .LineMove(16736)
00EB40:  3B 0D 0A 09 45 4E 44 20 42 6F 74 74 6F 6D 3B 0D    ;...END Bottom;.
00EB50:  0A 50 52 4F 43 45 44 55 52 45 20 46 61 72 4C 65    .PROCEDURE FarLe
00EB60:  66 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20    ft;..BEGIN...IF 
00EB70:  43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69    CurrentLeftMargi
00EB80:  6E 3E 30 20 54 48 45 4E 20 0D 0A 09 09 43 68 61    n>0 THEN ....Cha
00EB90:  6E 67 65 4D 61 72 67 69 6E 28 2D 49 4E 54 45 47    ngeMargin(-INTEG
00EBA0:  45 52 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61    ER(CurrentLeftMa
00EBB0:  72 67 69 6E 29 29 0D 0A 09 09 45 4E 44 3B 0D 0A    rgin))....END;..
00EBC0:  09 53 65 74 4C 69 6E 65 50 6F 73 28 30 29 3B 0D    .SetLinePos(0);.
00EBD0:  0A 09 4C 69 6E 65 50 6F 73 3A 3D 30 3B 0D 0A 09    ..LinePos:=0;...
00EBE0:  43 68 61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E 44    ChangePos;...END
00EBF0:  20 46 61 72 4C 65 66 74 3B 0D 0A 50 52 4F 43 45     FarLeft;..PROCE
00EC00:  6F 75 6E 64 20 41 4E 44 20 28 52 4C 65 6E 3E 3D    ound AND (RLen>=
00EC10:  30 29 20 54 48 45 4E 0D 0A 09 09 4D 61 72 6B 41    0) THEN....MarkA
00EC20:  73 55 70 64 61 74 65 64 3B 0D 0A 09 09 49 46 20    sUpdated;....IF 
00EC30:  62 20 54 48 45 4E 0D 0A 09 09 09 46 4F 52 20 69    b THEN.....FOR i
00EC40:  3A 3D 32 20 54 4F 20 4C 65 6E 20 44 4F 0D 0A 09    :=2 TO Len DO...
00EC50:  09 09 09 62 3A 3D 42 61 63 6B 4F 6E 65 43 68 61    ...b:=BackOneCha
00EC60:  72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D    r(CurFilePtr^);.
00EC70:  0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E    .....END;.....EN
00EC80:  44 3B 0D 0A 09 09 44 65 6C 43 68 61 72 73 28 43    D;....DelChars(C
00EC90:  75 72 46 69 6C 65 50 74 72 5E 2C 4C 65 6E 29 20    urFilePtr^,Len) 
00ECA0:  0D 0A 09 09 49 6E 73 43 68 61 72 73 28 43 75 72    ....InsChars(Cur
00ECB0:  46 69 6C 65 50 74 72 5E 2C 52 65 70 6C 61 63 65    FilePtr^,Replace
00ECC0:  2C 52 4C 65 6E 29 3B 0D 0A 09 09 62 3A 3D 42 61    ,RLen);....b:=Ba
00ECD0:  63 6B 4F 6E 65 43 68 61 72 28 43 75 72 46 69 6C    ckOneChar(CurFil
00ECE0:  65 50 74 72 5E 29 3B 0D 0A 09 09 45 4E 44 3B 0D    ePtr^);....END;.
00ECF0:  0A 09 52 65 44 69 73 70 6C 61 79 3B 0D 0A 09 52    ..ReDisplay;...R
00ED00:  45 54 55 52 4E 20 46 6F 75 6E 64 3B 0D 0A 09 45    ETURN Found;...E
00ED10:  4E 44 20 53 65 61 72 63 68 3B 0D 0A 50 52 4F 43    ND Search;..PROC
00ED20:  45 44 55 52 45 20 47 6F 54 6F 4C 61 62 65 6C 28    EDURE GoToLabel(
00ED30:  63 68 3A 43 48 41 52 29 3B 0D 0A 42 45 47 49 4E    ch:CHAR);..BEGIN
00ED40:  0D 0A 09 49 46 20 4C 61 62 65 6C 4F 70 28 43 75    ...IF LabelOp(Cu
00ED50:  72 46 69 6C 65 50 74 72 5E 2C 46 41 4C 53 45 2C    rFilePtr^,FALSE,
00ED60:  63 68 29 20 54 48 45 4E 0D 0A 09 09 52 65 44 69    ch) THEN....ReDi
00ED70:  73 70 6C 61 79 3B 0D 0A 09 45 4C 53 45 0D 0A 09    splay;...ELSE...
00ED80:  09 45 72 72 6F 72 4D 65 73 73 61 67 65 28 27 20    .ErrorMessage(' 
00ED90:  4C 61 62 65 6C 20 6E 6F 74 20 64 65 66 69 6E 65    Label not define
00EDA0:  64 27 2C 27 20 27 29 3B 0D 0A 09 09 52 65 73 65    d',' ');....Rese
00EDB0:  74 50 6F 73 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    tPos;....END;...
00EDC0:  45 4E 44 20 47 6F 54 6F 4C 61 62 65 6C 3B 09 09    END GoToLabel;..
00EDD0:  0D 0A 42 45 47 49 4E 0D 0A 09 43 75 72 72 65 6E    ..BEGIN...Curren
00EDE0:  74 57 69 6E 64 6F 77 3A 3D 30 3B 0D 0A 09 43 75    tWindow:=0;...Cu
00EDF0:  72 72 65 6E 74 46 69 6C 65 3A 3D 30 3B 0D 0A 09    rrentFile:=0;...
00EE00:  44 55 52 45 20 46 61 72 52 69 67 68 74 3B 0D 0A    DURE FarRight;..
00EE10:  42 45 47 49 4E 0D 0A 09 53 65 74 4C 69 6E 65 50    BEGIN...SetLineP
00EE20:  6F 73 28 30 29 3B 0D 0A 09 4C 69 6E 65 50 6F 73    os(0);...LinePos
00EE30:  3A 3D 4C 69 6E 65 4C 65 6E 3B 0D 0A 09 43 68 61    :=LineLen;...Cha
00EE40:  6E 67 65 50 6F 73 3B 0D 0A 09 45 4E 44 20 46 61    ngePos;...END Fa
00EE50:  72 52 69 67 68 74 3B 0D 0A 50 52 4F 43 45 44 55    rRight;..PROCEDU
00EE60:  52 45 20 43 68 61 6E 67 65 57 69 6E 64 6F 77 28    RE ChangeWindow(
00EE70:  4E 6F 3A 49 4E 54 45 47 45 52 29 3B 0D 0A 56 41    No:INTEGER);..VA
00EE80:  52 09 62 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45    R.b:BOOLEAN;..BE
00EE90:  47 49 4E 0D 0A 09 49 46 20 43 75 72 72 65 6E 74    GIN...IF Current
00EEA0:  57 69 6E 64 6F 77 3C 3E 30 20 54 48 45 4E 0D 0A    Window<>0 THEN..
00EEB0:  09 09 63 75 72 78 5B 43 75 72 72 65 6E 74 57 69    ..curx[CurrentWi
00EEC0:  6E 64 6F 77 5D 3A 3D 54 68 69 73 78 3B 0D 0A 09    ndow]:=Thisx;...
00EED0:  09 63 75 72 79 5B 43 75 72 72 65 6E 74 57 69 6E    .cury[CurrentWin
00EEE0:  64 6F 77 5D 3A 3D 54 68 69 73 79 3B 0D 0A 09 09    dow]:=Thisy;....
00EEF0:  62 3A 3D 4C 61 62 65 6C 4F 70 28 43 75 72 46 69    b:=LabelOp(CurFi
00EF00:  6C 65 50 74 72 5E 2C 54 52 55 45 2C 43 48 52 28    lePtr^,TRUE,CHR(
00EF10:  43 75 72 72 65 6E 74 57 69 6E 64 6F 77 29 29 3B    CurrentWindow));
00EF20:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 43 75 72 72 65    ....END;...Curre
00EF30:  6E 74 57 69 6E 64 6F 77 3A 3D 4E 6F 3B 0D 0A 09    ntWindow:=No;...
00EF40:  0D 0A 09 49 46 20 43 75 72 72 65 6E 74 57 69 6E    ...IF CurrentWin
00EF50:  64 6F 77 3E 57 69 6E 64 6F 77 73 20 54 48 45 4E    dow>Windows THEN
00EF60:  20 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 3A 3D     CurrentWindow:=
00EF70:  57 69 6E 64 6F 77 73 20 45 4E 44 3B 0D 0A 09 49    Windows END;...I
00EF80:  46 20 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 3C    F CurrentWindow<
00EF90:  3E 30 20 54 48 45 4E 0D 0A 09 09 28 2A 73 65 74    >0 THEN....(*set
00EFA0:  20 75 70 20 61 20 70 6F 69 6E 74 65 72 20 74 6F     up a pointer to
00EFB0:  20 74 68 65 20 63 75 72 72 65 6E 74 20 66 69 6C     the current fil
00EFC0:  65 20 74 6F 20 73 61 76 65 20 69 6E 64 65 78 20    e to save index 
00EFD0:  63 61 6C 63 75 6C 61 74 69 6F 6E 0D 0A 09 09 20    calculation.... 
00EFE0:  20 65 76 65 72 79 20 74 69 6D 65 20 74 68 65 20     every time the 
00EFF0:  66 69 6C 65 20 69 73 20 72 65 66 65 72 65 6E 63    file is referenc
00F000:  43 75 72 46 69 6C 65 50 74 72 3A 3D 50 45 64 69    CurFilePtr:=PEdi
00F010:  74 46 69 6C 65 28 41 44 52 28 46 69 6C 65 73 5B    tFile(ADR(Files[
00F020:  31 5D 29 29 3B 0D 0A 09 45 4E 44 20 45 64 69 74    1]));...END Edit
00F030:  43 6F 6E 74 72 6F 6C 2E 0D 0A 0D 0A 1A 0D 0A 09    Control.........
00F040:  45 4E 44 20 47 6F 54 6F 4C 61 62 65 6C 3B 09 09    END GoToLabel;..
00F050:  0D 0A 42 45 47 49 4E 0D 0A 09 43 75 72 72 65 6E    ..BEGIN...Curren
00F060:  74 57 69 6E 64 6F 77 3A 3D 30 3B 0D 0A 09 43 75    tWindow:=0;...Cu
00F070:  72 72 65 6E 74 46 69 6C 65 3A 3D 30 3B 0D 0A 09    rrentFile:=0;...
00F080:  20 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72     (CurrentLeftMar
00F090:  67 69 6E 3C 43 41 52 44 49 4E 41 4C 28 2D 49 6E    gin<CARDINAL(-In
00F0A0:  63 29 29 20 54 48 45 4E 20 0D 0A 09 09 49 6E 63    c)) THEN ....Inc
00F0B0:  3A 3D 2D 49 4E 54 45 47 45 52 28 43 75 72 72 65    :=-INTEGER(Curre
00F0C0:  6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 20 0D 0A    ntLeftMargin) ..
00F0D0:  09 09 45 4E 44 3B 0D 0A 09 49 46 20 28 49 6E 63    ..END;...IF (Inc
00F0E0:  3E 30 29 20 41 4E 44 20 28 54 68 69 73 78 3C 43    >0) AND (Thisx<C
00F0F0:  41 52 44 49 4E 41 4C 28 49 6E 63 29 29 20 54 48    ARDINAL(Inc)) TH
00F100:  45 4E 20 49 6E 63 3A 3D 54 68 69 73 78 20 45 4E    EN Inc:=Thisx EN
00F110:  44 3B 0D 0A 09 43 75 72 72 65 6E 74 4C 65 66 74    D;...CurrentLeft
00F120:  4D 61 72 67 69 6E 3A 3D 49 4E 54 45 47 45 52 28    Margin:=INTEGER(
00F130:  43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69    CurrentLeftMargi
00F140:  6E 29 2B 49 6E 63 3B 0D 0A 09 54 68 69 73 78 3A    n)+Inc;...Thisx:
00F150:  3D 49 4E 54 45 47 45 52 28 54 68 69 73 78 29 2D    =INTEGER(Thisx)-
00F160:  49 6E 63 3B 0D 0A 09 63 75 72 78 5B 43 75 72 72    Inc;...curx[Curr
00F170:  65 6E 74 57 69 6E 64 6F 77 5D 3A 3D 54 68 69 73    entWindow]:=This
00F180:  78 3B 0D 0A 09 4C 65 66 74 4D 61 72 67 69 6E 5B    x;...LeftMargin[
00F190:  43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D    CurrentWindow]:=
00F1A0:  43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69    CurrentLeftMargi
00F1B0:  6E 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 57 69    n;...ReDisplayWi
00F1C0:  6E 64 6F 77 3B 0D 0A 09 52 65 73 65 74 50 6F 73    ndow;...ResetPos
00F1D0:  3B 0D 0A 09 45 4E 44 20 43 68 61 6E 67 65 4D 61    ;...END ChangeMa
00F1E0:  72 67 69 6E 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    rgin;....PROCEDU
00F1F0:  52 45 20 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 56    RE ChangePos;..V
00F200:  65 64 2A 29 0D 0A 09 09 43 75 72 72 65 6E 74 46    ed*)....CurrentF
00F210:  69 6C 65 3A 3D 57 69 6E 64 6F 77 46 69 6C 65 5B    ile:=WindowFile[
00F220:  43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3B 0D    CurrentWindow];.
00F230:  0A 09 09 43 75 72 46 69 6C 65 50 74 72 3A 3D 50    ...CurFilePtr:=P
00F240:  45 64 69 74 46 69 6C 65 28 41 44 52 28 46 69 6C    EditFile(ADR(Fil
00F250:  65 73 5B 43 75 72 72 65 6E 74 46 69 6C 65 5D 29    es[CurrentFile])
00F260:  29 3B 0D 0A 09 09 62 3A 3D 4C 61 62 65 6C 4F 70    );....b:=LabelOp
00F270:  28 43 75 72 46 69 6C 65 50 74 72 5E 2C 46 41 4C    (CurFilePtr^,FAL
00F280:  53 45 2C 43 48 52 28 43 75 72 72 65 6E 74 57 69    SE,CHR(CurrentWi
00F290:  6E 64 6F 77 29 29 3B 0D 0A 09 09 54 68 69 73 78    ndow));....Thisx
00F2A0:  3A 3D 63 75 72 78 5B 43 75 72 72 65 6E 74 57 69    :=curx[CurrentWi
00F2B0:  6E 64 6F 77 5D 3B 0D 0A 09 09 54 68 69 73 79 3A    ndow];....Thisy:
00F2C0:  3D 63 75 72 79 5B 43 75 72 72 65 6E 74 57 69 6E    =cury[CurrentWin
00F2D0:  64 6F 77 5D 3B 0D 0A 09 09 43 75 72 72 65 6E 74    dow];....Current
00F2E0:  4C 65 66 74 4D 61 72 67 69 6E 3A 3D 4C 65 66 74    LeftMargin:=Left
00F2F0:  4D 61 72 67 69 6E 5B 43 75 72 72 65 6E 74 57 69    Margin[CurrentWi
00F300:  6E 64 6F 77 5D 3B 0D 0A 09 09 53 65 74 4C 69 6E    ndow];....SetLin
00F310:  65 50 6F 73 28 30 29 3B 0D 0A 09 09 43 68 61 6E    ePos(0);....Chan
00F320:  67 65 50 6F 73 3B 0D 0A 09 09 69 3A 3D 28 53 63    gePos;....i:=(Sc
00F330:  72 65 65 6E 44 65 70 74 68 2D 57 69 6E 64 6F 77    reenDepth-Window
00F340:  73 29 20 44 49 56 20 57 69 6E 64 6F 77 73 3B 0D    s) DIV Windows;.
00F350:  0A 09 09 53 74 61 72 74 6F 66 57 69 6E 64 6F 77    ...StartofWindow
00F360:  3A 3D 43 41 52 44 49 4E 41 4C 28 69 2B 31 29 2A    :=CARDINAL(i+1)*
00F370:  28 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 2D 31    (CurrentWindow-1
00F380:  29 3B 0D 0A 09 45 4C 53 45 20 0D 0A 09 09 53 74    );...ELSE ....St
00F390:  61 72 74 6F 66 57 69 6E 64 6F 77 3A 3D 30 3B 0D    artofWindow:=0;.
00F3A0:  0A 09 09 69 3A 3D 30 20 0D 0A 09 09 45 4E 44 3B    ...i:=0 ....END;
00F3B0:  0D 0A 09 49 46 20 43 75 72 72 65 6E 74 57 69 6E    ...IF CurrentWin
00F3C0:  64 6F 77 3C 57 69 6E 64 6F 77 73 20 54 48 45 4E    dow<Windows THEN
00F3D0:  0D 0A 09 09 45 6E 64 6F 66 57 69 6E 64 6F 77 3A    ....EndofWindow:
00F3E0:  3D 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2B 43    =StartofWindow+C
00F3F0:  41 52 44 49 4E 41 4C 28 69 2D 31 29 3B 0D 0A 09    ARDINAL(i-1);...
00F400:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
00F410:  4F 44 55 4C 45 20 4D 61 6B 65 45 64 69 74 73 3B    ODULE MakeEdits;
00F420:  0D 0A 0D 0A 0D 0A 28 2A 09 52 6F 75 74 69 6E 65    ......(*.Routine
00F430:  73 20 74 6F 20 65 64 69 74 20 61 20 66 69 6C 65    s to edit a file
00F440:  0D 0A 0D 0A 09 28 69 2E 65 2E 2C 20 61 63 74 75    .....(i.e., actu
00F450:  61 6C 6C 79 20 6D 61 6B 65 20 63 68 61 6E 67 65    ally make change
00F460:  73 20 74 6F 20 74 68 65 20 66 69 6C 65 29 0D 0A    s to the file)..
00F470:  0D 0A 09 44 20 4D 6F 6F 72 65 20 31 31 20 4A 61    ...D Moore 11 Ja
00F480:  6E 20 38 35 2A 29 0D 0A 46 52 4F 4D 20 09 46 69    n 85*)..FROM .Fi
00F490:  6C 65 73 20 49 4D 50 4F 52 54 20 46 49 4C 45 2C    les IMPORT FILE,
00F4A0:  4C 6F 6F 6B 75 70 2C 43 72 65 61 74 65 2C 53 65    Lookup,Create,Se
00F4B0:  71 52 65 61 64 42 6C 6F 63 6B 2C 53 65 71 57 72    qReadBlock,SeqWr
00F4C0:  69 74 65 42 6C 6F 63 6B 2C 0D 0A 09 4D 61 6B 65    iteBlock,...Make
00F4D0:  42 41 4B 2C 43 6C 6F 73 65 3B 0D 0A 46 52 4F 4D    BAK,Close;..FROM
00F4E0:  09 53 74 6F 72 61 67 65 20 49 4D 50 4F 52 54 20    .Storage IMPORT 
00F4F0:  41 4C 4C 4F 43 41 54 45 2C 44 45 41 4C 4C 4F 43    ALLOCATE,DEALLOC
00F500:  41 54 45 2C 46 72 65 65 53 70 61 63 65 3B 0D 0A    ATE,FreeSpace;..
00F510:  46 52 4F 4D 09 53 59 53 54 45 4D 20 49 4D 50 4F    FROM.SYSTEM IMPO
00F520:  52 54 20 41 44 52 2C 42 59 54 45 3B 0D 0A 46 52    RT ADR,BYTE;..FR
00F530:  4F 4D 20 20 09 46 61 73 74 4D 6F 76 65 20 49 4D    OM  .FastMove IM
00F540:  50 4F 52 54 20 4D 6F 76 65 75 70 2C 4D 6F 76 65    PORT Moveup,Move
00F550:  64 6F 77 6E 2C 53 65 61 72 63 68 75 70 2C 53 65    down,Searchup,Se
00F560:  61 72 63 68 64 6F 77 6E 3B 0D 0A 46 52 4F 4D 09    archdown;..FROM.
00F570:  53 65 74 55 70 43 61 6C 6C 20 49 4D 50 4F 52 54    SetUpCall IMPORT
00F580:  20 4D 61 6B 65 43 61 6C 6C 3B 0D 0A 49 4D 50 4F     MakeCall;..IMPO
00F590:  52 54 09 45 64 69 74 53 74 61 74 75 73 3B 0D 0A    RT.EditStatus;..
00F5A0:  43 4F 4E 53 54 09 54 65 78 74 4C 65 6E 3D 31 34    CONST.TextLen=14
00F5B0:  30 3B 09 28 2A 20 6D 75 73 74 20 65 78 63 65 65    0;.(* must excee
00F5C0:  64 20 61 20 62 6C 6F 63 6B 20 6F 6E 20 74 68 65    d a block on the
00F5D0:  20 64 69 73 63 0D 0A 09 09 09 20 20 20 72 65 6D     disc.....   rem
00F5E0:  61 69 6E 69 6E 67 20 73 70 61 63 65 20 69 73 20    aining space is 
00F5F0:  66 6F 72 20 70 61 64 64 69 6E 67 2A 29 0D 0A 09    for padding*)...
00F600:  45 4C 53 45 0D 0A 09 09 45 6E 64 6F 66 57 69 6E    ELSE....EndofWin
00F610:  64 6F 77 3A 3D 53 63 72 65 65 6E 44 65 70 74 68    dow:=ScreenDepth
00F620:  2D 32 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 45    -2....END;.....E
00F630:  4E 44 20 43 68 61 6E 67 65 57 69 6E 64 6F 77 3B    ND ChangeWindow;
00F640:  0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 73 65    ..PROCEDURE Rese
00F650:  74 53 63 72 65 65 6E 50 6F 73 3B 0D 0A 42 45 47    tScreenPos;..BEG
00F660:  49 4E 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 57    IN...IF CurrentW
00F670:  69 6E 64 6F 77 3C 3E 30 20 54 48 45 4E 0D 0A 09    indow<>0 THEN...
00F680:  09 54 68 69 73 78 3A 3D 63 75 72 78 5B 43 75 72    .Thisx:=curx[Cur
00F690:  72 65 6E 74 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09    rentWindow];....
00F6A0:  54 68 69 73 79 3A 3D 63 75 72 79 5B 43 75 72 72    Thisy:=cury[Curr
00F6B0:  65 6E 74 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 52    entWindow];....R
00F6C0:  65 73 65 74 50 6F 73 3B 0D 0A 09 09 45 4E 44 3B    esetPos;....END;
00F6D0:  0D 0A 09 45 4E 44 20 52 65 73 65 74 53 63 72 65    ...END ResetScre
00F6E0:  65 6E 50 6F 73 3B 0D 0A 50 52 4F 43 45 44 55 52    enPos;..PROCEDUR
00F6F0:  45 20 4D 6F 76 65 57 69 6E 64 6F 77 28 66 72 6F    E MoveWindow(fro
00F700:  6D 2C 74 6F 3A 43 41 52 44 49 4E 41 4C 29 3B 0D    m,to:CARDINAL);.
00F710:  0A 56 41 52 09 62 3A 42 4F 4F 4C 45 41 4E 3B 0D    .VAR.b:BOOLEAN;.
00F720:  0A 42 45 47 49 4E 0D 0A 09 63 75 72 78 5B 74 6F    .BEGIN...curx[to
00F730:  5D 3A 3D 63 75 72 78 5B 66 72 6F 6D 5D 3B 0D 0A    ]:=curx[from];..
00F740:  09 63 75 72 79 5B 74 6F 5D 3A 3D 63 75 72 79 5B    .cury[to]:=cury[
00F750:  66 72 6F 6D 5D 3B 0D 0A 09 4C 65 66 74 4D 61 72    from];...LeftMar
00F760:  67 69 6E 5B 74 6F 5D 3A 3D 4C 65 66 74 4D 61 72    gin[to]:=LeftMar
00F770:  67 69 6E 5B 66 72 6F 6D 5D 3B 0D 0A 09 57 69 6E    gin[from];...Win
00F780:  64 6F 77 46 69 6C 65 5B 74 6F 5D 3A 3D 57 69 6E    dowFile[to]:=Win
00F790:  64 6F 77 46 69 6C 65 5B 66 72 6F 6D 5D 3B 0D 0A    dowFile[from];..
00F7A0:  09 62 3A 3D 4C 61 62 65 6C 4F 70 28 46 69 6C 65    .b:=LabelOp(File
00F7B0:  73 5B 57 69 6E 64 6F 77 46 69 6C 65 5B 74 6F 5D    s[WindowFile[to]
00F7C0:  5D 2C 54 52 55 45 2C 43 48 52 28 74 6F 29 29 3B    ],TRUE,CHR(to));
00F7D0:  0D 0A 09 45 4E 44 20 4D 6F 76 65 57 69 6E 64 6F    ...END MoveWindo
00F7E0:  77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 6C    w;..PROCEDURE El
00F7F0:  69 64 65 57 69 6E 64 6F 77 28 57 69 6E 64 6F 77    ideWindow(Window
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:  42 6C 6F 63 6B 53 69 7A 65 3D 31 32 38 3B 09 28    BlockSize=128;.(
00F910:  2A 20 63 68 61 72 61 63 74 65 72 73 20 69 6E 20    * characters in 
00F920:  61 20 64 69 73 63 20 62 6C 6F 63 6B 2A 29 0D 0A    a disc block*)..
00F930:  09 48 65 61 64 52 6F 6F 6D 3D 35 31 32 3B 09 28    .HeadRoom=512;.(
00F940:  2A 6D 69 6E 69 6D 75 6D 20 68 65 61 64 20 72 6F    *minimum head ro
00F950:  6F 6D 20 74 6F 20 6C 65 61 76 65 20 62 65 74 77    om to leave betw
00F960:  65 65 6E 20 73 74 61 63 6B 20 61 6E 64 20 68 65    een stack and he
00F970:  61 70 2A 29 0D 0A 09 43 52 3D 30 64 78 3B 0D 0A    ap*)...CR=0dx;..
00F980:  09 4C 46 3D 30 61 78 3B 0D 0A 09 46 46 3D 30 63    .LF=0ax;...FF=0c
00F990:  78 3B 0D 0A 09 45 4F 46 3D 31 61 78 3B 0D 0A 54    x;...EOF=1ax;..T
00F9A0:  59 50 45 09 50 54 65 78 74 3D 50 4F 49 4E 54 45    YPE.PText=POINTE
00F9B0:  52 20 54 4F 20 54 65 78 74 3B 0D 0A 09 50 50 6F    R TO Text;...PPo
00F9C0:  73 69 74 69 6F 6E 3D 50 4F 49 4E 54 45 52 20 54    sition=POINTER T
00F9D0:  4F 20 50 6F 73 69 74 69 6F 6E 3B 0D 0A 09 54 65    O Position;...Te
00F9E0:  78 74 3D 52 45 43 4F 52 44 0D 0A 09 09 42 6C 6F    xt=RECORD....Blo
00F9F0:  63 6B 4C 65 6E 3A 42 59 54 45 3B 0D 0A 09 09 43    ckLen:BYTE;....C
00FA00:  68 61 72 73 3A 41 52 52 41 59 5B 30 2E 2E 54 65    hars:ARRAY[0..Te
00FA10:  78 74 4C 65 6E 2D 31 5D 20 4F 46 20 43 48 41 52    xtLen-1] OF CHAR
00FA20:  3B 0D 0A 09 09 4E 65 78 74 3A 50 54 65 78 74 3B    ;....Next:PText;
00FA30:  09 09 28 2A 6E 65 78 74 20 62 6C 6F 63 6B 2A 29    ..(*next block*)
00FA40:  0D 0A 09 09 50 72 65 64 3A 50 54 65 78 74 3B 09    ....Pred:PText;.
00FA50:  09 28 2A 70 72 65 63 65 64 69 6E 67 20 62 6C 6F    .(*preceding blo
00FA60:  63 6B 2A 29 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A    ck*)....END;....
00FA70:  09 09 0D 0A 09 50 6F 73 69 74 69 6F 6E 3D 52 45    .....Position=RE
00FA80:  43 4F 52 44 0D 0A 09 09 42 6C 6F 63 6B 3A 50 54    CORD....Block:PT
00FA90:  65 78 74 3B 0D 0A 09 09 4F 66 66 73 65 74 3A 42    ext;....Offset:B
00FAA0:  59 54 45 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45    YTE;....END;...E
00FAB0:  64 69 74 46 69 6C 65 3D 52 45 43 4F 52 44 0D 0A    ditFile=RECORD..
00FAC0:  09 09 66 3A 46 49 4C 45 3B 0D 0A 09 09 43 68 61    ..f:FILE;....Cha
00FAD0:  69 6E 3A 50 54 65 78 74 3B 0D 0A 09 09 43 75 72    in:PText;....Cur
00FAE0:  50 6F 73 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A 09    Pos:Position;...
00FAF0:  09 4C 61 62 65 6C 73 3A 41 52 52 41 59 5B 30 2E    .Labels:ARRAY[0.
00FB00:  0A 09 09 09 09 43 68 61 72 50 6F 73 3A 3D 30 3B    .....CharPos:=0;
00FB10:  0D 0A 09 09 09 09 73 61 76 65 63 75 72 70 6F 73    ......savecurpos
00FB20:  28 66 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A    (f);......END;..
00FB30:  09 09 09 45 58 49 54 0D 0A 09 09 45 4C 53 45 09    ...EXIT....ELSE.
00FB40:  0D 0A 09 09 0D 0A 09 09 09 57 48 49 4C 45 20 28    .........WHILE (
00FB50:  69 3E 30 29 20 41 4E 44 20 28 57 6F 72 6B 69 6E    i>0) AND (Workin
00FB60:  67 5E 2E 43 68 61 72 73 5B 69 2D 31 5D 3D 45 4F    g^.Chars[i-1]=EO
00FB70:  46 29 20 44 4F 0D 0A 09 09 09 09 44 45 43 28 69    F) DO......DEC(i
00FB80:  29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09    );......END;....
00FB90:  09 49 46 20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68    .IF (Working^.Ch
00FBA0:  61 72 73 5B 69 2D 31 5D 3C 3E 30 61 78 29 20 41    ars[i-1]<>0ax) A
00FBB0:  4E 44 20 28 69 3C 42 6C 6F 63 6B 53 69 7A 65 29    ND (i<BlockSize)
00FBC0:  20 54 48 45 4E 0D 0A 09 09 09 09 49 4E 43 28 69     THEN......INC(i
00FBD0:  29 3B 0D 0A 09 09 09 09 57 6F 72 6B 69 6E 67 5E    );......Working^
00FBE0:  2E 43 68 61 72 73 5B 69 2D 31 5D 3A 3D 45 4F 46    .Chars[i-1]:=EOF
00FBF0:  3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09    ;......END;.....
00FC00:  57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65    Working^.BlockLe
00FC10:  6E 3A 3D 69 3B 0D 0A 09 09 09 49 46 20 43 68 61    n:=i;.....IF Cha
00FC20:  72 73 72 65 61 64 3C 3D 43 68 61 72 6E 6F 20 20    rsread<=Charno  
00FC30:  54 48 45 4E 20 0D 0A 09 09 09 09 43 68 61 72 50    THEN ......CharP
00FC40:  6F 73 3A 3D 43 68 61 72 6E 6F 2D 43 68 61 72 73    os:=Charno-Chars
00FC50:  72 65 61 64 3B 0D 0A 09 09 09 09 73 61 76 65 63    read;......savec
00FC60:  75 72 70 6F 73 28 66 29 3B 0D 0A 09 09 09 09 70    urpos(f);......p
00FC70:  3A 3D 57 6F 72 6B 69 6E 67 3B 0D 0A 09 09 09 09    :=Working;......
00FC80:  49 46 20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61    IF (Working^.Cha
00FC90:  72 73 5B 43 68 61 72 50 6F 73 5D 3D 4C 46 29 20    rs[CharPos]=LF) 
00FCA0:  0D 0A 09 09 09 09 20 20 20 41 4E 44 20 42 61 63    ......   AND Bac
00FCB0:  6B 75 70 28 29 20 54 48 45 4E 0D 0A 09 09 09 09    kup() THEN......
00FCC0:  09 73 61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D    .savecurpos(f);.
00FCD0:  0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 09    ......END;......
00FCE0:  57 6F 72 6B 69 6E 67 3A 3D 70 3B 0D 0A 09 09 09    Working:=p;.....
00FCF0:  09 45 4E 44 3B 0D 0A 09 09 09 43 68 61 72 73 72    .END;.....Charsr
00FD00:  2E 32 34 5D 20 4F 46 20 50 6F 73 69 74 69 6F 6E    .24] OF Position
00FD10:  3B 0D 0A 0D 0A 09 09 28 2A 6C 61 62 65 6C 73 20    ;......(*labels 
00FD20:  30 20 74 6F 20 39 20 61 72 65 20 20 5E 6B 30 20    0 to 9 are  ^k0 
00FD30:  74 6F 20 5E 6B 39 0D 0A 09 09 20 20 20 31 30 20    to ^k9....   10 
00FD40:  69 73 20 5E 6B 42 0D 0A 09 09 20 20 20 31 31 20    is ^kB....   11 
00FD50:  69 73 20 5E 6B 6B 0D 0A 09 09 20 20 20 31 32 20    is ^kk....   12 
00FD60:  74 68 72 6F 75 67 68 20 31 34 20 61 72 65 20 74    through 14 are t
00FD70:  68 65 20 70 6F 73 69 74 69 6F 6E 73 20 69 6E 20    he positions in 
00FD80:  74 68 65 20 77 69 6E 64 6F 77 73 0D 0A 09 09 20    the windows.... 
00FD90:  20 20 31 35 20 74 68 72 6F 75 67 68 20 32 34 20      15 through 24 
00FDA0:  61 72 65 20 65 72 72 6F 72 20 6D 61 72 6B 65 72    are error marker
00FDB0:  73 2A 29 0D 0A 0D 0A 09 09 45 4E 44 3B 0D 0A 56    s*)......END;..V
00FDC0:  41 52 09 44 6F 6E 65 3A 42 4F 4F 4C 45 41 4E 3B    AR.Done:BOOLEAN;
00FDD0:  0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52    ...reply:INTEGER
00FDE0:  3B 09 0D 0A 0D 0A 09 28 2A 76 61 72 69 61 62 6C    ;......(*variabl
00FDF0:  65 73 20 75 73 65 64 20 66 6F 72 20 74 65 78 74    es used for text
00FE00:  20 70 6F 73 69 74 69 6F 6E 20 64 75 72 69 6E 67     position during
00FE10:  20 6D 6F 76 65 20 6F 70 65 72 61 74 69 6F 6E 73     move operations
00FE20:  20 65 74 63 2A 29 0D 0A 0D 0A 09 57 6F 72 6B 69     etc*).....Worki
00FE30:  6E 67 3A 50 54 65 78 74 3B 0D 0A 09 43 68 61 72    ng:PText;...Char
00FE40:  50 6F 73 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 63    Pos:INTEGER;...c
00FE50:  68 3A 43 48 41 52 3B 0D 0A 09 70 6F 73 3A 50 6F    h:CHAR;...pos:Po
00FE60:  73 69 74 69 6F 6E 3B 0D 0A 09 70 6F 73 31 2C 70    sition;...pos1,p
00FE70:  6F 73 32 3A 50 50 6F 73 69 74 69 6F 6E 3B 0D 0A    os2:PPosition;..
00FE80:  09 43 68 61 72 6E 6F 2C 43 68 61 72 73 72 65 61    .Charno,Charsrea
00FE90:  64 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 0D 0A 50    d:CARDINAL;....P
00FEA0:  52 4F 43 45 44 55 52 45 20 4E 65 77 42 6C 6F 63    ROCEDURE NewBloc
00FEB0:  6B 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4E 45 57 28    k;..BEGIN...NEW(
00FEC0:  57 6F 72 6B 69 6E 67 29 3B 0D 0A 09 57 6F 72 6B    Working);...Work
00FED0:  69 6E 67 5E 2E 50 72 65 64 3A 3D 4E 49 4C 3B 0D    ing^.Pred:=NIL;.
00FEE0:  0A 09 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3A    ..Working^.Next:
00FEF0:  3D 4E 49 4C 3B 0D 0A 09 45 4E 44 20 4E 65 77 42    =NIL;...END NewB
00FF00:  65 61 64 3A 3D 43 68 61 72 73 72 65 61 64 2B 4F    ead:=Charsread+O
00FF10:  52 44 28 57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63    RD(Working^.Bloc
00FF20:  6B 4C 65 6E 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D    kLen);.....END;.
00FF30:  0A 09 09 70 3A 3D 57 6F 72 6B 69 6E 67 3B 0D 0A    ...p:=Working;..
00FF40:  09 09 72 65 70 6C 79 3A 3D 72 65 70 6C 79 2B 31    ..reply:=reply+1
00FF50:  3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 72 65 61 64    ;....END; (*read
00FF60:  20 66 69 6C 65 20 6C 6F 6F 70 2A 29 0D 0A 09 43     file loop*)...C
00FF70:  6C 6F 73 65 28 66 2E 66 29 3B 0D 0A 09 45 4E 44    lose(f.f);...END
00FF80:  20 4F 70 65 6E 46 69 6C 65 3B 0D 0A 09 09 0D 0A     OpenFile;......
00FF90:  50 52 4F 43 45 44 55 52 45 20 43 6C 6F 73 65 46    PROCEDURE CloseF
00FFA0:  69 6C 65 28 56 41 52 20 66 3A 45 64 69 74 46 69    ile(VAR f:EditFi
00FFB0:  6C 65 3B 56 41 52 20 72 65 70 6C 79 3A 49 4E 54    le;VAR reply:INT
00FFC0:  45 47 45 52 29 3B 0D 0A 56 41 52 09 0D 0A 09 62    EGER);..VAR....b
00FFD0:  3A 41 52 52 41 59 5B 30 2E 2E 42 6C 6F 63 6B 53    :ARRAY[0..BlockS
00FFE0:  69 7A 65 2D 31 5D 20 4F 46 20 43 48 41 52 3B 0D    ize-1] OF CHAR;.
00FFF0:  0A 09 70 6F 73 3A 49 4E 54 45 47 45 52 3B 0D 0A    ..pos:INTEGER;..
010000:  42 45 47 49 4E 0D 0A 09 4D 61 6B 65 42 41 4B 28    BEGIN...MakeBAK(
010010:  66 2E 66 2C 72 65 70 6C 79 29 3B 0D 0A 09 43 68    f.f,reply);...Ch
010020:  61 72 6E 6F 3A 3D 31 3B 0D 0A 09 49 46 20 72 65    arno:=1;...IF re
010030:  70 6C 79 3D 30 20 54 48 45 4E 20 0D 0A 09 09 57    ply=0 THEN ....W
010040:  6F 72 6B 69 6E 67 3A 3D 66 2E 43 68 61 69 6E 3B    orking:=f.Chain;
010050:  0D 0A 09 09 70 6F 73 3A 3D 30 3B 0D 0A 09 09 72    ....pos:=0;....r
010060:  65 70 6C 79 3A 3D 42 6C 6F 63 6B 53 69 7A 65 3B    eply:=BlockSize;
010070:  0D 0A 09 09 4C 4F 4F 50 0D 0A 09 09 20 20 20 20    ....LOOP....    
010080:  49 46 20 20 28 57 6F 72 6B 69 6E 67 3D 4E 49 4C    IF  (Working=NIL
010090:  29 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B    ) THEN EXIT END;
0100A0:  0D 0A 09 09 20 20 20 20 57 49 54 48 20 57 6F 72    ....    WITH Wor
0100B0:  6B 69 6E 67 5E 20 44 4F 0D 0A 09 09 09 46 4F 52    king^ DO.....FOR
0100C0:  20 69 3A 3D 30 20 54 4F 20 49 4E 54 45 47 45 52     i:=0 TO INTEGER
0100D0:  28 42 6C 6F 63 6B 4C 65 6E 29 2D 31 20 44 4F 0D    (BlockLen)-1 DO.
0100E0:  0A 09 09 09 09 49 46 20 70 6F 73 3E 3D 42 6C 6F    .....IF pos>=Blo
0100F0:  63 6B 53 69 7A 65 20 54 48 45 4E 0D 0A 09 09 09    ckSize THEN.....
010100:  6C 6F 63 6B 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    lock;....PROCEDU
010110:  52 45 20 73 65 74 63 75 72 70 6F 73 28 56 41 52    RE setcurpos(VAR
010120:  20 66 3A 45 64 69 74 46 69 6C 65 29 3B 0D 0A 42     f:EditFile);..B
010130:  45 47 49 4E 0D 0A 09 57 49 54 48 20 66 2E 43 75    EGIN...WITH f.Cu
010140:  72 50 6F 73 20 44 4F 0D 0A 09 09 57 6F 72 6B 69    rPos DO....Worki
010150:  6E 67 3A 3D 42 6C 6F 63 6B 3B 0D 0A 09 09 43 68    ng:=Block;....Ch
010160:  61 72 50 6F 73 3A 3D 4F 66 66 73 65 74 3B 0D 0A    arPos:=Offset;..
010170:  09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 73 65 74    ..END;...END set
010180:  63 75 72 70 6F 73 3B 0D 0A 0D 0A 50 52 4F 43 45    curpos;....PROCE
010190:  44 55 52 45 20 73 61 76 65 63 75 72 70 6F 73 28    DURE savecurpos(
0101A0:  56 41 52 20 66 3A 45 64 69 74 46 69 6C 65 29 3B    VAR f:EditFile);
0101B0:  0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20 66    ..BEGIN...WITH f
0101C0:  2E 43 75 72 50 6F 73 20 44 4F 0D 0A 09 09 49 46    .CurPos DO....IF
0101D0:  20 43 68 61 72 50 6F 73 3E 4F 52 44 28 57 6F 72     CharPos>ORD(Wor
0101E0:  6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 20    king^.BlockLen) 
0101F0:  54 48 45 4E 20 0D 0A 09 09 09 43 68 61 72 50 6F    THEN .....CharPo
010200:  73 3A 3D 57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63    s:=Working^.Bloc
010210:  6B 4C 65 6E 20 0D 0A 09 09 09 45 4E 44 3B 0D 0A    kLen .....END;..
010220:  09 09 42 6C 6F 63 6B 3A 3D 57 6F 72 6B 69 6E 67    ..Block:=Working
010230:  3B 0D 0A 09 09 4F 66 66 73 65 74 3A 3D 43 68 61    ;....Offset:=Cha
010240:  72 50 6F 73 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    rPos;....END;...
010250:  45 4E 44 20 73 61 76 65 63 75 72 70 6F 73 3B 0D    END savecurpos;.
010260:  0A 56 41 52 09 69 3A 49 4E 54 45 47 45 52 3B 0D    .VAR.i:INTEGER;.
010270:  0A 50 52 4F 43 45 44 55 52 45 20 42 61 63 6B 75    .PROCEDURE Backu
010280:  70 28 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A    p():BOOLEAN;....
010290:  28 2A 09 62 61 63 6B 20 75 70 20 61 20 63 68 61    (*.back up a cha
0102A0:  72 61 63 74 65 72 20 70 6F 73 69 74 69 6F 6E 20    racter position 
0102B0:  69 6E 20 74 68 65 20 63 75 72 72 65 6E 74 20 66    in the current f
0102C0:  69 6C 65 0D 0A 09 72 65 74 75 72 6E 73 20 54 52    ile...returns TR
0102D0:  55 45 20 69 66 20 73 75 63 63 65 73 73 66 75 6C    UE if successful
0102E0:  2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 43    *)..BEGIN...IF C
0102F0:  68 61 72 50 6F 73 3C 3D 30 20 54 48 45 4E 0D 0A    harPos<=0 THEN..
010300:  09 09 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 28    ..SeqWriteBlock(
010310:  66 2E 66 2C 41 44 52 28 62 29 2C 42 6C 6F 63 6B    f.f,ADR(b),Block
010320:  53 69 7A 65 2C 0D 0A 09 09 09 09 09 09 72 65 70    Size,........rep
010330:  6C 79 29 3B 0D 0A 09 09 09 09 09 70 6F 73 3A 3D    ly);.......pos:=
010340:  30 3B 0D 0A 09 09 09 09 09 49 46 20 72 65 70 6C    0;.......IF repl
010350:  79 3C 3E 42 6C 6F 63 6B 53 69 7A 65 20 54 48 45    y<>BlockSize THE
010360:  4E 20 45 58 49 54 20 45 4E 44 3B 0D 0A 09 09 09    N EXIT END;.....
010370:  09 09 45 4E 44 3B 20 28 2A 49 46 2A 29 0D 0A 09    ..END; (*IF*)...
010380:  09 09 09 62 5B 70 6F 73 5D 3A 3D 43 68 61 72 73    ...b[pos]:=Chars
010390:  5B 69 5D 3B 0D 0A 09 09 09 09 49 4E 43 28 70 6F    [i];......INC(po
0103A0:  73 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 28 2A 46    s);......END;(*F
0103B0:  4F 52 2A 29 0D 0A 09 09 0D 0A 09 09 09 49 46 20    OR*).........IF 
0103C0:  57 6F 72 6B 69 6E 67 3D 66 2E 43 75 72 50 6F 73    Working=f.CurPos
0103D0:  2E 42 6C 6F 63 6B 20 54 48 45 4E 0D 0A 09 09 09    .Block THEN.....
0103E0:  20 20 20 20 45 64 69 74 53 74 61 74 75 73 2E 53        EditStatus.S
0103F0:  65 74 50 6F 73 69 74 69 6F 6E 28 66 2E 66 2C 43    etPosition(f.f,C
010400:  68 61 72 6E 6F 2B 4F 52 44 28 66 2E 43 75 72 50    harno+ORD(f.CurP
010410:  6F 73 2E 4F 66 66 73 65 74 29 29 0D 0A 09 09 09    os.Offset)).....
010420:  20 20 20 20 45 4E 44 3B 0D 0A 09 09 09 43 68 61        END;.....Cha
010430:  72 6E 6F 3A 3D 43 68 61 72 6E 6F 2B 4F 52 44 28    rno:=Charno+ORD(
010440:  42 6C 6F 63 6B 4C 65 6E 29 3B 0D 0A 09 09 09 57    BlockLen);.....W
010450:  6F 72 6B 69 6E 67 3A 3D 4E 65 78 74 0D 0A 09 09    orking:=Next....
010460:  09 45 4E 44 3B 28 2A 57 49 54 48 20 57 6F 72 6B    .END;(*WITH Work
010470:  69 6E 67 2A 29 0D 0A 09 09 20 20 20 20 45 4E 44    ing*)....    END
010480:  3B 20 28 2A 57 48 49 4C 45 20 57 6F 72 6B 69 6E    ; (*WHILE Workin
010490:  67 3C 3E 4E 49 4C 20 61 6E 64 20 6E 6F 74 20 64    g<>NIL and not d
0104A0:  69 73 63 20 66 75 6C 6C 2A 29 0D 0A 09 09 46 4F    isc full*)....FO
0104B0:  52 20 70 6F 73 3A 3D 70 6F 73 20 54 4F 20 42 6C    R pos:=pos TO Bl
0104C0:  6F 63 6B 53 69 7A 65 2D 31 20 44 4F 20 62 5B 70    ockSize-1 DO b[p
0104D0:  6F 73 5D 3A 3D 45 4F 46 20 45 4E 44 3B 0D 0A 09    os]:=EOF END;...
0104E0:  09 49 46 20 72 65 70 6C 79 3D 42 6C 6F 63 6B 53    .IF reply=BlockS
0104F0:  69 7A 65 20 54 48 45 4E 20 0D 0A 09 09 09 53 65    ize THEN .....Se
010500:  20 09 09 49 46 20 57 6F 72 6B 69 6E 67 5E 2E 50     ..IF Working^.P
010510:  72 65 64 3C 3E 4E 49 4C 20 54 48 45 4E 0D 0A 09    red<>NIL THEN...
010520:  09 09 57 6F 72 6B 69 6E 67 3A 3D 57 6F 72 6B 69    ..Working:=Worki
010530:  6E 67 5E 2E 50 72 65 64 3B 0D 0A 09 09 09 43 68    ng^.Pred;.....Ch
010540:  61 72 50 6F 73 3A 3D 57 6F 72 6B 69 6E 67 5E 2E    arPos:=Working^.
010550:  42 6C 6F 63 6B 4C 65 6E 3B 0D 0A 09 09 45 4C 53    BlockLen;....ELS
010560:  45 0D 0A 09 09 09 52 45 54 55 52 4E 20 46 41 4C    E.....RETURN FAL
010570:  53 45 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45    SE.....END;....E
010580:  4E 44 3B 20 28 2A 43 68 61 72 50 6F 73 3C 3D 30    ND; (*CharPos<=0
010590:  2A 29 0D 0A 09 44 45 43 28 43 68 61 72 50 6F 73    *)...DEC(CharPos
0105A0:  29 3B 0D 0A 09 52 45 54 55 52 4E 20 54 52 55 45    );...RETURN TRUE
0105B0:  0D 0A 09 45 4E 44 20 42 61 63 6B 75 70 3B 0D 0A    ...END Backup;..
0105C0:  50 52 4F 43 45 44 55 52 45 20 4F 70 65 6E 46 69    PROCEDURE OpenFi
0105D0:  6C 65 28 56 41 52 20 66 3A 45 64 69 74 46 69 6C    le(VAR f:EditFil
0105E0:  65 3B 66 6E 3A 46 69 6C 65 4E 61 6D 65 3B 56 41    e;fn:FileName;VA
0105F0:  52 20 72 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B    R reply:INTEGER;
010600:  50 6F 73 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A    Pos:CARDINAL);..
010610:  56 41 52 09 70 3A 50 54 65 78 74 3B 0D 0A 42 45    VAR.p:PText;..BE
010620:  47 49 4E 0D 0A 09 4C 6F 6F 6B 75 70 28 66 2E 66    GIN...Lookup(f.f
010630:  2C 66 6E 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46    ,fn,reply);...IF
010640:  20 50 6F 73 3D 36 35 35 33 35 20 54 48 45 4E 20     Pos=65535 THEN 
010650:  43 68 61 72 6E 6F 3A 3D 45 64 69 74 53 74 61 74    Charno:=EditStat
010660:  75 73 2E 47 65 74 50 6F 73 69 74 69 6F 6E 28 66    us.GetPosition(f
010670:  2E 66 29 3B 0D 0A 09 45 4C 53 45 20 43 68 61 72    .f);...ELSE Char
010680:  6E 6F 3A 3D 50 6F 73 20 45 4E 44 3B 0D 0A 09 43    no:=Pos END;...C
010690:  68 61 72 73 72 65 61 64 3A 3D 30 3B 0D 0A 09 49    harsread:=0;...I
0106A0:  46 20 72 65 70 6C 79 3C 30 20 54 48 45 4E 20 0D    F reply<0 THEN .
0106B0:  0A 09 09 72 65 70 6C 79 3A 3D 2D 32 3B 0D 0A 09    ...reply:=-2;...
0106C0:  09 52 45 54 55 52 4E 0D 0A 09 09 45 4E 44 3B 0D    .RETURN....END;.
0106D0:  0A 09 70 3A 3D 4E 49 4C 3B 0D 0A 09 72 65 70 6C    ..p:=NIL;...repl
0106E0:  79 3A 3D 30 3B 0D 0A 09 46 4F 52 20 69 3A 3D 30    y:=0;...FOR i:=0
0106F0:  20 54 4F 20 48 49 47 48 28 66 2E 4C 61 62 65 6C     TO HIGH(f.Label
010700:  71 57 72 69 74 65 42 6C 6F 63 6B 28 66 2E 66 2C    qWriteBlock(f.f,
010710:  41 44 52 28 62 29 2C 42 6C 6F 63 6B 53 69 7A 65    ADR(b),BlockSize
010720:  2C 72 65 70 6C 79 29 20 0D 0A 09 09 09 45 4E 44    ,reply) .....END
010730:  3B 0D 0A 09 09 43 6C 6F 73 65 28 66 2E 66 29 3B    ;....Close(f.f);
010740:  0D 0A 09 09 49 46 20 72 65 70 6C 79 3C 3E 42 6C    ....IF reply<>Bl
010750:  6F 63 6B 53 69 7A 65 20 54 48 45 4E 20 72 65 70    ockSize THEN rep
010760:  6C 79 3A 3D 2D 31 0D 0A 09 09 45 4C 53 45 20 72    ly:=-1....ELSE r
010770:  65 70 6C 79 3A 3D 30 20 45 4E 44 3B 0D 0A 09 45    eply:=0 END;...E
010780:  4C 53 45 09 72 65 70 6C 79 3A 3D 2D 32 20 0D 0A    LSE.reply:=-2 ..
010790:  09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 43 6C 6F    ..END;...END Clo
0107A0:  73 65 46 69 6C 65 3B 0D 0A 09 09 09 0D 0A 09 0D    seFile;.........
0107B0:  0A 50 52 4F 43 45 44 55 52 45 20 41 62 61 6E 64    .PROCEDURE Aband
0107C0:  6F 6E 46 69 6C 65 28 66 3A 45 64 69 74 46 69 6C    onFile(f:EditFil
0107D0:  65 29 3B 0D 0A 56 41 52 09 70 3A 50 54 65 78 74    e);..VAR.p:PText
0107E0:  3B 0D 0A 28 2A 09 41 62 61 6E 64 6F 6E 20 63 68    ;..(*.Abandon ch
0107F0:  61 6E 67 65 73 20 74 6F 20 61 6E 20 65 64 69 74    anges to an edit
010800:  20 66 69 6C 65 2A 29 0D 0A 42 45 47 49 4E 0D 0A     file*)..BEGIN..
010810:  09 57 6F 72 6B 69 6E 67 3A 3D 66 2E 43 68 61 69    .Working:=f.Chai
010820:  6E 3B 0D 0A 09 57 48 49 4C 45 20 57 6F 72 6B 69    n;...WHILE Worki
010830:  6E 67 3C 3E 4E 49 4C 20 44 4F 20 0D 0A 09 09 70    ng<>NIL DO ....p
010840:  3A 3D 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3B    :=Working^.Next;
010850:  0D 0A 09 09 44 49 53 50 4F 53 45 28 57 6F 72 6B    ....DISPOSE(Work
010860:  69 6E 67 29 3B 0D 0A 09 09 57 6F 72 6B 69 6E 67    ing);....Working
010870:  3A 3D 70 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45    :=p;....END;...E
010880:  4E 44 20 41 62 61 6E 64 6F 6E 46 69 6C 65 3B 0D    ND AbandonFile;.
010890:  0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 50 6F    .PROCEDURE GetPo
0108A0:  73 69 74 69 6F 6E 28 56 41 52 20 66 3A 45 64 69    sition(VAR f:Edi
0108B0:  74 46 69 6C 65 3B 56 41 52 20 70 3A 50 6F 73 69    tFile;VAR p:Posi
0108C0:  74 69 6F 6E 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09    tion);..BEGIN...
0108D0:  70 3A 3D 66 2E 43 75 72 50 6F 73 3B 0D 0A 09 45    p:=f.CurPos;...E
0108E0:  4E 44 20 47 65 74 50 6F 73 69 74 69 6F 6E 3B 0D    ND GetPosition;.
0108F0:  0A 09 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 53    .....PROCEDURE S
010900:  73 29 20 44 4F 20 66 2E 4C 61 62 65 6C 73 5B 69    s) DO f.Labels[i
010910:  5D 2E 42 6C 6F 63 6B 3A 3D 4E 49 4C 20 45 4E 44    ].Block:=NIL END
010920:  3B 0D 0A 09 4C 4F 4F 50 09 28 2A 72 65 61 64 20    ;...LOOP.(*read 
010930:  69 6E 20 74 68 65 20 66 69 6C 65 2A 29 0D 0A 09    in the file*)...
010940:  09 49 46 20 46 72 65 65 53 70 61 63 65 28 29 3C    .IF FreeSpace()<
010950:  48 65 61 64 52 6F 6F 6D 20 54 48 45 4E 0D 0A 09    HeadRoom THEN...
010960:  09 09 41 62 61 6E 64 6F 6E 46 69 6C 65 28 66 29    ..AbandonFile(f)
010970:  3B 0D 0A 09 09 09 72 65 70 6C 79 3A 3D 2D 33 3B    ;.....reply:=-3;
010980:  0D 0A 09 09 09 52 45 54 55 52 4E 0D 0A 09 09 09    .....RETURN.....
010990:  45 4E 44 3B 0D 0A 09 09 4E 65 77 42 6C 6F 63 6B    END;....NewBlock
0109A0:  3B 0D 0A 09 09 57 6F 72 6B 69 6E 67 5E 2E 50 72    ;....Working^.Pr
0109B0:  65 64 3A 3D 70 3B 0D 0A 09 09 49 46 20 70 3D 4E    ed:=p;....IF p=N
0109C0:  49 4C 20 54 48 45 4E 20 66 2E 43 68 61 69 6E 3A    IL THEN f.Chain:
0109D0:  3D 57 6F 72 6B 69 6E 67 0D 0A 09 09 45 4C 53 45    =Working....ELSE
0109E0:  20 70 5E 2E 4E 65 78 74 3A 3D 57 6F 72 6B 69 6E     p^.Next:=Workin
0109F0:  67 20 45 4E 44 3B 0D 0A 09 09 53 65 71 52 65 61    g END;....SeqRea
010A00:  64 42 6C 6F 63 6B 28 66 2E 66 2C 41 44 52 28 57    dBlock(f.f,ADR(W
010A10:  6F 72 6B 69 6E 67 5E 2E 43 68 61 72 73 29 2C 42    orking^.Chars),B
010A20:  6C 6F 63 6B 53 69 7A 65 2C 69 29 3B 0D 0A 09 09    lockSize,i);....
010A30:  49 46 20 69 3C 3E 42 6C 6F 63 6B 53 69 7A 65 20    IF i<>BlockSize 
010A40:  54 48 45 4E 20 28 2A 65 6E 64 20 6F 66 20 66 69    THEN (*end of fi
010A50:  6C 65 20 66 6F 75 6E 64 2A 29 0D 0A 09 09 09 49    le found*).....I
010A60:  46 20 70 3C 3E 4E 49 4C 20 54 48 45 4E 20 0D 0A    F p<>NIL THEN ..
010A70:  09 09 09 09 70 5E 2E 4E 65 78 74 3A 3D 4E 49 4C    ....p^.Next:=NIL
010A80:  3B 0D 0A 09 09 09 09 44 49 53 50 4F 53 45 28 57    ;......DISPOSE(W
010A90:  6F 72 6B 69 6E 67 29 3B 0D 0A 09 09 09 45 4C 53    orking);.....ELS
010AA0:  45 09 28 2A 61 6C 77 61 79 73 20 6B 65 65 70 20    E.(*always keep 
010AB0:  61 74 20 6C 65 61 73 74 20 6F 6E 65 20 62 6C 6F    at least one blo
010AC0:  63 6B 2A 29 0D 0A 09 09 09 09 57 6F 72 6B 69 6E    ck*)......Workin
010AD0:  67 5E 2E 42 6C 6F 63 6B 4C 65 6E 3A 3D 31 3B 0D    g^.BlockLen:=1;.
010AE0:  0A 20 20 20 09 09 09 09 57 6F 72 6B 69 6E 67 5E    .   ....Working^
010AF0:  2E 43 68 61 72 73 5B 30 5D 3A 3D 45 4F 46 3B 0D    .Chars[0]:=EOF;.
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:  65 74 50 6F 73 69 74 69 6F 6E 28 56 41 52 20 66    etPosition(VAR f
010C10:  3A 45 64 69 74 46 69 6C 65 3B 70 3A 50 6F 73 69    :EditFile;p:Posi
010C20:  74 69 6F 6E 29 3B 0D 0A 28 2A 09 67 65 74 2F 73    tion);..(*.get/s
010C30:  65 74 20 70 6F 73 69 74 69 6F 6E 20 69 6E 20 61    et position in a
010C40:  20 66 69 6C 65 2A 29 0D 0A 42 45 47 49 4E 0D 0A     file*)..BEGIN..
010C50:  09 66 2E 43 75 72 50 6F 73 3A 3D 70 3B 0D 0A 09    .f.CurPos:=p;...
010C60:  0D 0A 09 28 2A 09 70 6F 69 6E 74 65 72 20 6D 61    ...(*.pointer ma
010C70:  79 20 62 65 20 70 6F 69 6E 74 69 6E 67 20 6A 75    y be pointing ju
010C80:  73 74 20 61 66 74 65 72 20 65 6E 64 20 6F 66 20    st after end of 
010C90:  62 6C 6F 63 6B 0D 0A 09 09 28 61 66 74 65 72 20    block....(after 
010CA0:  64 65 6C 65 74 65 73 29 2C 20 72 65 67 75 6C 61    deletes), regula
010CB0:  72 69 7A 65 20 74 68 61 74 20 73 69 74 75 61 74    rize that situat
010CC0:  69 6F 6E 2A 29 0D 0A 0D 0A 09 57 49 54 48 20 66    ion*).....WITH f
010CD0:  2E 43 75 72 50 6F 73 20 44 4F 0D 0A 09 09 49 46    .CurPos DO....IF
010CE0:  20 09 20 20 20 20 28 4F 66 66 73 65 74 3E 3D 42     .    (Offset>=B
010CF0:  6C 6F 63 6B 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 20    lock^.BlockLen) 
010D00:  0D 0A 09 09 09 41 4E 44 20 28 42 6C 6F 63 6B 5E    .....AND (Block^
010D10:  2E 4E 65 78 74 3C 3E 4E 49 4C 29 20 54 48 45 4E    .Next<>NIL) THEN
010D20:  0D 0A 09 09 09 4F 66 66 73 65 74 3A 3D 30 3B 0D    .....Offset:=0;.
010D30:  0A 09 09 09 42 6C 6F 63 6B 3A 3D 42 6C 6F 63 6B    ....Block:=Block
010D40:  5E 2E 4E 65 78 74 0D 0A 09 09 09 45 4E 44 3B 0D    ^.Next.....END;.
010D50:  0A 09 09 45 4E 44 3B 20 0D 0A 09 45 4E 44 20 53    ...END; ...END S
010D60:  65 74 50 6F 73 69 74 69 6F 6E 3B 0D 0A 50 52 4F    etPosition;..PRO
010D70:  43 45 44 55 52 45 20 4C 61 62 65 6C 4F 70 28 56    CEDURE LabelOp(V
010D80:  41 52 20 66 3A 45 64 69 74 46 69 6C 65 3B 44 65    AR f:EditFile;De
010D90:  66 69 6E 65 3A 42 4F 4F 4C 45 41 4E 3B 63 68 3A    fine:BOOLEAN;ch:
010DA0:  43 48 41 52 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A    CHAR):BOOLEAN;..
010DB0:  28 2A 0D 0A 09 70 65 72 66 6F 72 6D 20 61 20 6C    (*...perform a l
010DC0:  61 62 65 6C 20 6F 70 65 72 61 74 69 6F 6E 20 2C    abel operation ,
010DD0:  20 72 65 74 75 72 6E 20 74 72 75 65 20 69 66 20     return true if 
010DE0:  73 75 63 63 65 73 73 66 75 6C 0D 0A 09 44 65 66    successful...Def
010DF0:  69 6E 65 20 69 73 20 74 72 75 65 20 69 66 20 74    ine is true if t
010E00:  0A 0D 0A 28 2A 09 72 65 64 69 73 70 6C 61 79 20    ...(*.redisplay 
010E10:  61 73 20 6D 75 63 68 20 74 65 78 74 20 61 73 20    as much text as 
010E20:  77 69 6C 6C 20 66 69 74 20 69 6E 20 74 68 65 20    will fit in the 
010E30:  77 69 6E 64 6F 77 0D 0A 09 66 6F 72 20 74 68 65    window...for the
010E40:  20 67 69 76 65 6E 20 66 69 6C 65 20 73 74 61 72     given file star
010E50:  74 69 6E 67 20 61 74 20 74 68 65 20 63 75 72 72    ting at the curr
010E60:  65 6E 74 20 70 6F 73 69 74 69 6F 6E 20 69 6E 20    ent position in 
010E70:  74 68 65 20 66 69 6C 65 0D 0A 0D 0A 09 63 75 72    the file.....cur
010E80:  78 20 61 6E 64 20 63 75 72 79 20 72 65 74 75 72    x and cury retur
010E90:  6E 20 74 68 65 20 73 63 72 65 65 6E 20 63 6F 2D    n the screen co-
010EA0:  6F 72 64 69 6E 61 74 65 73 20 66 6F 72 20 74 68    ordinates for th
010EB0:  65 0D 0A 09 63 75 72 72 65 6E 74 20 70 6F 73 69    e...current posi
010EC0:  74 69 6F 6E 20 69 6E 20 74 68 65 20 66 69 6C 65    tion in the file
010ED0:  2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20    *)....PROCEDURE 
010EE0:  53 65 74 4C 65 66 74 4D 61 72 67 28 66 3A 45 64    SetLeftMarg(f:Ed
010EF0:  69 74 46 69 6C 65 3B 77 69 6E 64 6F 77 3A 49 4E    itFile;window:IN
010F00:  54 45 47 45 52 3B 56 41 52 20 63 75 72 78 2C 63    TEGER;VAR curx,c
010F10:  75 72 79 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A    ury:CARDINAL);..
010F20:  0D 0A 28 2A 09 53 65 74 20 75 70 20 6C 65 66 74    ..(*.Set up left
010F30:  20 6D 61 72 67 69 6E 20 6F 66 20 61 20 6E 65 77     margin of a new
010F40:  6C 79 20 6F 70 65 6E 65 64 20 66 69 6C 65 20 2A    ly opened file *
010F50:  29 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 69 73    )..PROCEDURE Dis
010F60:  70 6C 61 79 45 72 72 6F 72 3B 0D 0A 56 41 52 09    playError;..VAR.
010F70:  57 69 6E 64 6F 77 73 3A 43 41 52 44 49 4E 41 4C    Windows:CARDINAL
010F80:  3B 0D 0A 09 4C 69 6E 65 73 50 65 72 57 69 6E 64    ;...LinesPerWind
010F90:  6F 77 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 45 4E    ow:CARDINAL;..EN
010FA0:  44 20 45 64 69 74 44 69 73 70 6C 61 79 2E 0D 0A    D EditDisplay...
010FB0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
010FC0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 18    ................
010FD0:  E9 18 EA 18 FF FF EC 18 FF FF FF FF EF 18 F0 18    ................
010FE0:  02 19 F2 18 F3 18 F4 18 F5 18 F6 18 F7 18 F8 18    ................
010FF0:  F9 18 FA 18 FB 18 FF FF FD 18 FE 18 FF 18 00 19    ................
011000:  68 65 20 6F 70 65 72 61 74 69 6F 6E 20 69 73 20    he operation is 
011010:  61 20 64 65 66 69 6E 65 20 6C 61 62 65 6C 0D 0A    a define label..
011020:  09 69 74 20 69 73 20 66 61 6C 73 65 20 69 66 20    .it is false if 
011030:  69 74 20 69 73 20 61 20 67 6F 74 6F 20 6C 61 62    it is a goto lab
011040:  65 6C 0D 0A 2A 29 0D 0A 0D 0A 56 41 52 09 69 3A    el..*)....VAR.i:
011050:  43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E    CARDINAL;..BEGIN
011060:  0D 0A 09 28 2A 24 41 5E 2A 29 0D 0A 09 63 68 3A    ...(*$A^*)...ch:
011070:  3D 43 41 50 28 63 68 29 3B 0D 0A 09 43 41 53 45    =CAP(ch);...CASE
011080:  20 63 68 20 4F 46 0D 0A 09 09 27 42 27 3A 20 69     ch OF....'B': i
011090:  3A 3D 31 30 7C 0D 0A 09 09 27 5E 4B 27 2C 27 4B    :=10|....'^K','K
0110A0:  27 3A 20 69 3A 3D 31 31 7C 0D 0A 09 09 31 78 2E    ': i:=11|....1x.
0110B0:  2E 33 78 3A 69 3A 3D 4F 52 44 28 63 68 29 2B 31    .3x:i:=ORD(ch)+1
0110C0:  31 7C 0D 0A 09 09 27 30 27 2E 2E 27 39 27 3A 69    1|....'0'..'9':i
0110D0:  3A 3D 4F 52 44 28 63 68 29 2D 4F 52 44 28 27 30    :=ORD(ch)-ORD('0
0110E0:  27 29 7C 0D 0A 09 09 30 62 30 78 2E 2E 30 62 39    ')|....0b0x..0b9
0110F0:  78 3A 69 3A 3D 4F 52 44 28 63 68 29 2D 30 62 30    x:i:=ORD(ch)-0b0
011100:  68 2B 31 35 0D 0A 09 09 45 4C 53 45 20 52 45 54    h+15....ELSE RET
011110:  55 52 4E 20 46 41 4C 53 45 0D 0A 09 09 45 4E 44    URN FALSE....END
011120:  3B 0D 0A 09 49 46 20 44 65 66 69 6E 65 20 54 48    ;...IF Define TH
011130:  45 4E 0D 0A 09 09 47 65 74 50 6F 73 69 74 69 6F    EN....GetPositio
011140:  6E 28 66 2C 66 2E 4C 61 62 65 6C 73 5B 69 5D 29    n(f,f.Labels[i])
011150:  3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 49 46 20 66    ;...ELSE....IF f
011160:  2E 4C 61 62 65 6C 73 5B 69 5D 2E 42 6C 6F 63 6B    .Labels[i].Block
011170:  3D 4E 49 4C 20 54 48 45 4E 20 52 45 54 55 52 4E    =NIL THEN RETURN
011180:  20 46 41 4C 53 45 20 45 4E 44 3B 0D 0A 09 09 53     FALSE END;....S
011190:  65 74 50 6F 73 69 74 69 6F 6E 28 66 2C 66 2E 4C    etPosition(f,f.L
0111A0:  61 62 65 6C 73 5B 69 5D 29 3B 0D 0A 09 20 09 45    abels[i]);... .E
0111B0:  4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 54 52 55    ND;...RETURN TRU
0111C0:  45 3B 0D 0A 09 45 4E 44 20 4C 61 62 65 6C 4F 70    E;...END LabelOp
0111D0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 41 64 76    ;..PROCEDURE Adv
0111E0:  61 6E 63 65 28 29 3A 42 4F 4F 4C 45 41 4E 3B 0D    ance():BOOLEAN;.
0111F0:  0A 0D 0A 28 2A 09 61 64 76 61 6E 63 65 20 61 20    ...(*.advance a 
011200:  46 2E 4C 61 62 65 6C 73 5B 31 31 5D 2E 4F 66 66    F.Labels[11].Off
011210:  73 65 74 29 29 0D 0A 09 09 45 4E 44 3B 0D 0A 09    set))....END;...
011220:  49 46 20 43 6F 75 6C 64 42 65 20 54 48 45 4E 0D    IF CouldBe THEN.
011230:  0A 09 09 57 48 49 4C 45 20 28 62 3C 3E 4E 49 4C    ...WHILE (b<>NIL
011240:  29 20 41 4E 44 20 28 62 3C 3E 46 2E 4C 61 62 65    ) AND (b<>F.Labe
011250:  6C 73 5B 31 31 5D 2E 42 6C 6F 63 6B 29 20 44 4F    ls[11].Block) DO
011260:  20 62 3A 3D 62 5E 2E 4E 65 78 74 20 45 4E 44 3B     b:=b^.Next END;
011270:  0D 0A 09 09 43 6F 75 6C 64 42 65 3A 3D 62 3C 3E    ....CouldBe:=b<>
011280:  4E 49 4C 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45    NIL....END;...RE
011290:  54 55 52 4E 20 43 6F 75 6C 64 42 65 3B 0D 0A 09    TURN CouldBe;...
0112A0:  45 4E 44 20 49 6E 73 69 64 65 42 6C 6F 63 6B 3B    END InsideBlock;
0112B0:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68    ....PROCEDURE Ch
0112C0:  65 63 6B 42 6C 6F 63 6B 28 56 41 52 20 46 3A 45    eckBlock(VAR F:E
0112D0:  64 69 74 46 69 6C 65 29 3A 42 4F 4F 4C 45 41 4E    ditFile):BOOLEAN
0112E0:  3B 0D 0A 0D 0A 28 2A 09 43 68 65 63 6B 20 69 66    ;....(*.Check if
0112F0:  20 62 65 67 69 6E 20 61 6E 64 20 65 6E 64 20 6F     begin and end o
011300:  66 20 62 6C 6F 63 6B 20 68 61 76 65 20 62 65 65    f block have bee
011310:  6E 20 63 6F 72 72 65 63 74 6C 79 20 73 65 74 20    n correctly set 
011320:  75 70 2A 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09    up*)....BEGIN...
011330:  49 46 20 28 46 2E 4C 61 62 65 6C 73 5B 31 30 5D    IF (F.Labels[10]
011340:  2E 42 6C 6F 63 6B 3D 4E 49 4C 29 20 4F 52 20 28    .Block=NIL) OR (
011350:  46 2E 4C 61 62 65 6C 73 5B 31 31 5D 2E 42 6C 6F    F.Labels[11].Blo
011360:  63 6B 3D 4E 49 4C 29 20 54 48 45 4E 0D 0A 09 09    ck=NIL) THEN....
011370:  52 45 54 55 52 4E 20 46 41 4C 53 45 3B 0D 0A 09    RETURN FALSE;...
011380:  09 45 4E 44 3B 0D 0A 09 57 6F 72 6B 69 6E 67 3A    .END;...Working:
011390:  3D 46 2E 4C 61 62 65 6C 73 5B 31 30 5D 2E 42 6C    =F.Labels[10].Bl
0113A0:  6F 63 6B 3B 0D 0A 09 72 65 70 6C 79 3A 3D 30 3B    ock;...reply:=0;
0113B0:  0D 0A 0D 0A 09 57 48 49 4C 45 20 28 57 6F 72 6B    .....WHILE (Work
0113C0:  69 6E 67 3C 3E 4E 49 4C 29 20 41 4E 44 20 28 57    ing<>NIL) AND (W
0113D0:  6F 72 6B 69 6E 67 3C 3E 46 2E 4C 61 62 65 6C 73    orking<>F.Labels
0113E0:  5B 31 31 5D 2E 42 6C 6F 63 6B 29 20 44 4F 0D 0A    [11].Block) DO..
0113F0:  09 09 72 65 70 6C 79 3A 3D 72 65 70 6C 79 2B 4F    ..reply:=reply+O
011400:  63 68 61 72 61 63 74 65 72 20 70 6F 73 69 74 69    character positi
011410:  6F 6E 20 69 6E 20 74 68 65 20 63 75 72 72 65 6E    on in the curren
011420:  74 20 66 69 6C 65 2A 29 0D 0A 42 45 47 49 4E 09    t file*)..BEGIN.
011430:  09 0D 0A 09 49 4E 43 28 43 68 61 72 50 6F 73 29    ....INC(CharPos)
011440:  3B 0D 0A 09 49 46 20 43 68 61 72 50 6F 73 3E 3D    ;...IF CharPos>=
011450:  49 4E 54 45 47 45 52 28 57 6F 72 6B 69 6E 67 5E    INTEGER(Working^
011460:  2E 42 6C 6F 63 6B 4C 65 6E 29 20 54 48 45 4E 0D    .BlockLen) THEN.
011470:  0A 09 09 0D 0A 09 09 49 46 20 57 6F 72 6B 69 6E    .......IF Workin
011480:  67 5E 2E 4E 65 78 74 3C 3E 4E 49 4C 20 54 48 45    g^.Next<>NIL THE
011490:  4E 0D 0A 09 09 09 57 6F 72 6B 69 6E 67 3A 3D 57    N.....Working:=W
0114A0:  6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3B 0D 0A 09    orking^.Next;...
0114B0:  09 09 43 68 61 72 50 6F 73 3A 3D 30 3B 0D 0A 09    ..CharPos:=0;...
0114C0:  09 45 4C 53 45 0D 0A 09 09 09 52 45 54 55 52 4E    .ELSE.....RETURN
0114D0:  20 46 41 4C 53 45 0D 0A 09 09 09 45 4E 44 3B 0D     FALSE.....END;.
0114E0:  0A 09 09 45 4E 44 3B 20 28 2A 43 68 61 72 50 6F    ...END; (*CharPo
0114F0:  73 3E 42 6C 6F 63 6B 4C 65 6E 2A 29 0D 0A 09 52    s>BlockLen*)...R
011500:  45 54 55 52 4E 20 57 6F 72 6B 69 6E 67 5E 2E 43    ETURN Working^.C
011510:  68 61 72 73 5B 43 68 61 72 50 6F 73 5D 3C 3E 45    hars[CharPos]<>E
011520:  4F 46 0D 0A 09 45 4E 44 20 41 64 76 61 6E 63 65    OF...END Advance
011530:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 49 6E 73    ;..PROCEDURE Ins
011540:  69 64 65 42 6C 6F 63 6B 28 56 41 52 20 46 3A 45    ideBlock(VAR F:E
011550:  64 69 74 46 69 6C 65 29 3A 42 4F 4F 4C 45 41 4E    ditFile):BOOLEAN
011560:  3B 0D 0A 0D 0A 28 2A 09 43 68 65 63 6B 20 69 66    ;....(*.Check if
011570:  20 63 75 72 72 65 6E 74 20 70 6F 73 69 74 69 6F     current positio
011580:  6E 20 69 73 20 69 6E 73 69 64 65 20 62 6C 6F 63    n is inside bloc
011590:  6B 20 2A 29 0D 0A 56 41 52 09 62 3A 50 54 65 78    k *)..VAR.b:PTex
0115A0:  74 3B 0D 0A 09 43 6F 75 6C 64 42 65 3A 42 4F 4F    t;...CouldBe:BOO
0115B0:  4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 73    LEAN;..BEGIN...s
0115C0:  65 74 63 75 72 70 6F 73 28 46 29 3B 0D 0A 09 49    etcurpos(F);...I
0115D0:  46 20 28 46 2E 4C 61 62 65 6C 73 5B 31 30 5D 2E    F (F.Labels[10].
0115E0:  42 6C 6F 63 6B 3D 4E 49 4C 29 20 4F 52 20 28 46    Block=NIL) OR (F
0115F0:  2E 4C 61 62 65 6C 73 5B 31 31 5D 2E 42 6C 6F 63    .Labels[11].Bloc
011600:  52 44 28 57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63    RD(Working^.Bloc
011610:  6B 4C 65 6E 29 3B 0D 0A 09 09 57 6F 72 6B 69 6E    kLen);....Workin
011620:  67 3A 3D 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74    g:=Working^.Next
011630:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 49 46    ;....END;.....IF
011640:  20 57 6F 72 6B 69 6E 67 3D 4E 49 4C 20 54 48 45     Working=NIL THE
011650:  4E 20 52 45 54 55 52 4E 20 46 41 4C 53 45 20 45    N RETURN FALSE E
011660:  4E 44 3B 0D 0A 09 0D 0A 09 28 2A 69 66 20 65 6E    ND;......(*if en
011670:  64 20 70 72 65 63 65 64 65 73 20 62 65 67 69 6E    d precedes begin
011680:  6E 69 6E 67 20 6F 66 20 62 6C 6F 63 6B 2A 29 0D    ning of block*).
011690:  0A 0D 0A 09 72 65 70 6C 79 3A 3D 72 65 70 6C 79    ....reply:=reply
0116A0:  2B 4F 52 44 28 46 2E 4C 61 62 65 6C 73 5B 31 31    +ORD(F.Labels[11
0116B0:  5D 2E 4F 66 66 73 65 74 29 2D 4F 52 44 28 46 2E    ].Offset)-ORD(F.
0116C0:  4C 61 62 65 6C 73 5B 31 30 5D 2E 4F 66 66 73 65    Labels[10].Offse
0116D0:  74 29 3B 0D 0A 09 52 45 54 55 52 4E 20 72 65 70    t);...RETURN rep
0116E0:  6C 79 3E 3D 30 0D 0A 09 45 4E 44 20 43 68 65 63    ly>=0...END Chec
0116F0:  6B 42 6C 6F 63 6B 3B 0D 0A 50 52 4F 43 45 44 55    kBlock;..PROCEDU
011700:  52 45 20 42 6C 6F 63 6B 43 6F 70 79 28 56 41 52    RE BlockCopy(VAR
011710:  20 46 72 6F 6D 46 69 6C 65 2C 54 6F 46 69 6C 65     FromFile,ToFile
011720:  3A 45 64 69 74 46 69 6C 65 29 3A 42 4F 4F 4C 45    :EditFile):BOOLE
011730:  41 4E 3B 0D 0A 0D 0A 28 2A 09 43 61 72 65 66 75    AN;....(*.Carefu
011740:  6C 20 2D 20 45 61 73 79 20 2D 20 4F 75 63 68 21    l - Easy - Ouch!
011750:  0D 0A 0D 0A 09 46 72 6F 6D 46 69 6C 65 20 61 6E    .....FromFile an
011760:  64 20 54 6F 46 69 6C 65 20 6D 61 79 20 62 65 20    d ToFile may be 
011770:  74 68 65 20 73 61 6D 65 20 20 76 61 72 69 61 62    the same  variab
011780:  6C 65 2A 29 0D 0A 0D 0A 56 41 52 09 69 3A 49 4E    le*)....VAR.i:IN
011790:  54 45 47 45 52 3B 0D 0A 09 63 3A 41 52 52 41 59    TEGER;...c:ARRAY
0117A0:  5B 31 2E 2E 54 65 78 74 4C 65 6E 5D 20 4F 46 20    [1..TextLen] OF 
0117B0:  43 48 41 52 3B 0D 0A 09 70 2C 71 2C 72 3A 50 6F    CHAR;...p,q,r:Po
0117C0:  73 69 74 69 6F 6E 3B 0D 0A 0D 0A 28 2A 09 54 68    sition;....(*.Th
0117D0:  69 73 20 63 6F 64 65 20 69 73 20 61 20 6C 69 74    is code is a lit
0117E0:  74 6C 65 20 6F 64 64 20 66 6F 72 20 74 68 65 20    tle odd for the 
0117F0:  66 6F 6C 6C 6F 77 69 6E 67 20 72 65 61 73 6F 6E    following reason
011800:  6B 3D 4E 49 4C 29 20 54 48 45 4E 0D 0A 09 09 52    k=NIL) THEN....R
011810:  45 54 55 52 4E 20 46 41 4C 53 45 3B 0D 0A 09 09    ETURN FALSE;....
011820:  45 4E 44 3B 0D 0A 09 62 3A 3D 46 2E 4C 61 62 65    END;...b:=F.Labe
011830:  6C 73 5B 31 30 5D 2E 42 6C 6F 63 6B 3B 0D 0A 0D    ls[10].Block;...
011840:  0A 09 57 48 49 4C 45 20 28 62 3C 3E 4E 49 4C 29    ..WHILE (b<>NIL)
011850:  20 41 4E 44 20 28 62 3C 3E 46 2E 4C 61 62 65 6C     AND (b<>F.Label
011860:  73 5B 31 31 5D 2E 42 6C 6F 63 6B 29 20 41 4E 44    s[11].Block) AND
011870:  20 28 62 3C 3E 57 6F 72 6B 69 6E 67 29 20 44 4F     (b<>Working) DO
011880:  0D 0A 09 09 62 3A 3D 62 5E 2E 4E 65 78 74 3B 0D    ....b:=b^.Next;.
011890:  0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 0D 0A 09 28    ...END;........(
0118A0:  2A 69 66 20 65 6E 64 20 70 72 65 63 65 64 65 73    *if end precedes
0118B0:  20 62 65 67 69 6E 6E 69 6E 67 20 6F 66 20 62 6C     beginning of bl
0118C0:  6F 63 6B 2A 29 0D 0A 09 43 6F 75 6C 64 42 65 3A    ock*)...CouldBe:
0118D0:  3D 62 3D 57 6F 72 6B 69 6E 67 3B 0D 0A 09 49 46    =b=Working;...IF
0118E0:  20 4E 4F 54 20 43 6F 75 6C 64 42 65 20 54 48 45     NOT CouldBe THE
0118F0:  4E 20 52 45 54 55 52 4E 20 46 41 4C 53 45 20 45    N RETURN FALSE E
011900:  4E 44 3B 0D 0A 09 49 46 20 62 3D 46 2E 4C 61 62    ND;...IF b=F.Lab
011910:  65 6C 73 5B 31 30 5D 2E 42 6C 6F 63 6B 20 54 48    els[10].Block TH
011920:  45 4E 0D 0A 09 09 28 2A 09 69 6E 20 73 74 61 72    EN....(*.in star
011930:  74 20 62 6C 6F 63 6B 20 2D 20 63 68 65 63 6B 20    t block - check 
011940:  61 66 74 65 72 20 6C 61 62 65 6C 20 73 74 61 72    after label star
011950:  74 2A 29 0D 0A 09 09 43 6F 75 6C 64 42 65 3A 3D    t*)....CouldBe:=
011960:  43 68 61 72 50 6F 73 3E 3D 4F 52 44 28 46 2E 4C    CharPos>=ORD(F.L
011970:  61 62 65 6C 73 5B 31 30 5D 2E 4F 66 66 73 65 74    abels[10].Offset
011980:  29 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 62    )....END;...IF b
011990:  3D 46 2E 4C 61 62 65 6C 73 5B 31 31 5D 2E 42 6C    =F.Labels[11].Bl
0119A0:  6F 63 6B 20 54 48 45 4E 0D 0A 09 09 28 2A 09 69    ock THEN....(*.i
0119B0:  6E 20 73 74 61 72 74 20 62 6C 6F 63 6B 20 2D 20    n start block - 
0119C0:  63 68 65 63 6B 20 61 66 74 65 72 20 6C 61 62 65    check after labe
0119D0:  6C 20 73 74 61 72 74 2A 29 0D 0A 09 09 43 6F 75    l start*)....Cou
0119E0:  6C 64 42 65 3A 3D 43 6F 75 6C 64 42 65 20 41 4E    ldBe:=CouldBe AN
0119F0:  44 20 28 43 68 61 72 50 6F 73 3C 3D 4F 52 44 28    D (CharPos<=ORD(
011A00:  3A 0D 0A 0D 0A 09 31 2F 09 49 6E 73 43 68 61 72    :.....1/.InsChar
011A10:  73 20 63 61 6E 6E 6F 74 20 69 6E 73 65 72 74 20    s cannot insert 
011A20:  6D 6F 72 65 20 74 68 61 6E 20 68 61 6C 66 20 61    more than half a
011A30:  20 62 6C 6F 63 6B 20 6F 66 20 63 68 61 72 61 63     block of charac
011A40:  74 65 72 73 0D 0A 09 32 2F 09 49 66 20 79 6F 75    ters...2/.If you
011A50:  20 64 6F 6E 27 74 20 72 65 61 64 20 61 74 20 6C     don't read at l
011A60:  65 61 73 74 20 61 20 62 6C 6F 63 6B 20 61 74 20    east a block at 
011A70:  61 20 74 69 6D 65 20 61 6E 64 20 74 68 65 0D 0A    a time and the..
011A80:  09 09 74 6F 20 61 6E 64 20 66 72 6F 6D 20 66 69    ..to and from fi
011A90:  6C 65 73 20 61 72 65 20 74 68 65 20 73 61 6D 65    les are the same
011AA0:  2C 20 79 6F 75 20 6D 61 79 20 68 61 76 65 20 74    , you may have t
011AB0:  6F 20 63 68 61 6E 67 65 20 74 68 65 0D 0A 09 09    o change the....
011AC0:  70 6F 73 69 74 69 6F 6E 20 69 6E 20 74 68 65 20    position in the 
011AD0:  66 72 6F 6D 20 66 69 6C 65 20 74 6F 20 72 65 66    from file to ref
011AE0:  6C 65 63 74 20 69 6E 73 65 72 74 69 6F 6E 73 2C    lect insertions,
011AF0:  20 77 68 69 63 68 20 69 73 0D 0A 09 09 61 77 6B     which is....awk
011B00:  77 61 72 64 20 28 74 68 6F 75 67 68 20 79 6F 75    ward (though you
011B10:  20 63 6F 75 6C 64 20 61 6C 77 61 79 73 20 61 64     could always ad
011B20:  64 20 61 20 74 65 6D 70 6F 72 61 72 79 20 6C 61    d a temporary la
011B30:  62 65 6C 29 0D 0A 0D 0A 09 54 68 65 72 65 66 6F    bel).....Therefo
011B40:  72 65 2C 20 74 65 78 74 20 69 73 20 72 65 61 64    re, text is read
011B50:  20 61 6E 64 20 74 68 65 6E 20 69 6E 73 65 72 74     and then insert
011B60:  65 64 20 69 6E 20 75 70 20 74 6F 20 74 68 72 65    ed in up to thre
011B70:  65 20 67 6F 65 73 21 2A 29 0D 0A 0D 0A 09 54 68    e goes!*).....Th
011B80:  69 72 64 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42    ird:CARDINAL;..B
011B90:  45 47 49 4E 0D 0A 09 54 68 69 72 64 3A 3D 54 65    EGIN...Third:=Te
011BA0:  78 74 4C 65 6E 20 44 49 56 20 33 3B 0D 0A 09 49    xtLen DIV 3;...I
011BB0:  46 20 4E 4F 54 20 43 68 65 63 6B 42 6C 6F 63 6B    F NOT CheckBlock
011BC0:  28 46 72 6F 6D 46 69 6C 65 29 20 54 48 45 4E 20    (FromFile) THEN 
011BD0:  52 45 54 55 52 4E 20 46 41 4C 53 45 20 45 4E 44    RETURN FALSE END
011BE0:  3B 0D 0A 09 57 49 54 48 20 46 72 6F 6D 46 69 6C    ;...WITH FromFil
011BF0:  65 2E 4C 61 62 65 6C 73 5B 31 30 5D 20 44 4F 0D    e.Labels[10] DO.
011C00:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
011C10:  45 20 45 64 69 74 44 69 73 70 6C 61 79 3B 0D 0A    E EditDisplay;..
011C20:  28 2A 09 44 69 73 70 6C 61 79 20 70 61 72 74 20    (*.Display part 
011C30:  6F 66 20 61 20 66 69 6C 65 20 62 65 69 6E 67 20    of a file being 
011C40:  65 64 69 74 65 64 2A 29 0D 0A 0D 0A 46 52 4F 4D    edited*)....FROM
011C50:  20 53 63 72 65 65 6E 49 4F 20 20 49 4D 50 4F 52     ScreenIO  IMPOR
011C60:  54 20 45 64 69 74 73 3B 0D 0A 46 52 4F 4D 20 4D    T Edits;..FROM M
011C70:  61 6B 65 45 64 69 74 73 20 49 4D 50 4F 52 54 20    akeEdits IMPORT 
011C80:  45 64 69 74 46 69 6C 65 3B 0D 0A 56 41 52 09 45    EditFile;..VAR.E
011C90:  72 72 6F 72 4F 72 64 69 6E 61 6C 3A 43 41 52 44    rrorOrdinal:CARD
011CA0:  49 4E 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45    INAL;..PROCEDURE
011CB0:  20 45 72 72 6F 72 4D 65 73 73 61 67 65 28 73 31     ErrorMessage(s1
011CC0:  2C 73 32 3A 41 52 52 41 59 20 4F 46 20 43 48 41    ,s2:ARRAY OF CHA
011CD0:  52 29 3B 0D 0A 0D 0A 28 2A 09 44 69 73 70 6C 61    R);....(*.Displa
011CE0:  79 20 65 72 72 6F 72 20 6D 65 73 73 61 67 65 20    y error message 
011CF0:  61 74 20 62 6F 74 74 6F 6D 20 6F 66 20 73 63 72    at bottom of scr
011D00:  65 65 6E 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55    een*)....PROCEDU
011D10:  52 45 20 53 65 74 57 69 6E 64 6F 77 73 28 69 3A    RE SetWindows(i:
011D20:  49 4E 54 45 47 45 52 29 3B 0D 0A 0D 0A 28 2A 09    INTEGER);....(*.
011D30:  73 65 74 20 6E 75 6D 62 65 72 20 6F 66 20 65 64    set number of ed
011D40:  69 74 20 77 69 6E 64 6F 77 73 20 69 6E 20 75 73    it windows in us
011D50:  65 20 2D 20 79 6F 75 20 6D 75 73 74 20 72 65 66    e - you must ref
011D60:  72 65 73 68 20 74 68 65 20 65 6E 74 69 72 65 0D    resh the entire.
011D70:  0A 09 73 63 72 65 65 6E 20 77 69 74 68 20 63 61    ..screen with ca
011D80:  6C 6C 73 20 74 6F 20 44 69 73 70 6C 61 79 46 69    lls to DisplayFi
011D90:  6C 65 20 61 66 74 65 72 20 61 20 63 61 6C 6C 20    le after a call 
011DA0:  74 6F 20 74 68 69 73 0D 0A 09 72 6F 75 74 69 6E    to this...routin
011DB0:  65 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45    e*)....PROCEDURE
011DC0:  20 44 69 73 70 6C 61 79 46 69 6C 65 28 66 3A 45     DisplayFile(f:E
011DD0:  64 69 74 46 69 6C 65 3B 77 69 6E 64 6F 77 3A 49    ditFile;window:I
011DE0:  4E 54 45 47 45 52 3B 56 41 52 20 63 75 72 78 2C    NTEGER;VAR curx,
011DF0:  63 75 72 79 3A 43 41 52 44 49 4E 41 4C 29 3B 0D    cury:CARDINAL);.
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:  0A 09 09 43 68 61 72 50 6F 73 3A 3D 4F 66 66 73    ...CharPos:=Offs
011F10:  65 74 3B 0D 0A 09 09 57 6F 72 6B 69 6E 67 3A 3D    et;....Working:=
011F20:  42 6C 6F 63 6B 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    Block;....END;..
011F30:  09 43 68 61 72 73 72 65 61 64 3A 3D 30 3B 0D 0A    .Charsread:=0;..
011F40:  09 69 3A 3D 72 65 70 6C 79 3B 0D 0A 09 72 3A 3D    .i:=reply;...r:=
011F50:  46 72 6F 6D 46 69 6C 65 2E 43 75 72 50 6F 73 3B    FromFile.CurPos;
011F60:  0D 0A 09 71 3A 3D 54 6F 46 69 6C 65 2E 43 75 72    ...q:=ToFile.Cur
011F70:  50 6F 73 3B 0D 0A 09 46 72 6F 6D 46 69 6C 65 2E    Pos;...FromFile.
011F80:  43 75 72 50 6F 73 3A 3D 46 72 6F 6D 46 69 6C 65    CurPos:=FromFile
011F90:  2E 4C 61 62 65 6C 73 5B 31 30 5D 3B 0D 0A 09 4C    .Labels[10];...L
011FA0:  4F 4F 50 0D 0A 09 09 49 46 20 69 3D 30 20 54 48    OOP....IF i=0 TH
011FB0:  45 4E 20 0D 0A 09 09 09 45 58 49 54 20 0D 0A 09    EN .....EXIT ...
011FC0:  09 09 45 4E 44 3B 0D 0A 09 09 49 4E 43 28 43 68    ..END;....INC(Ch
011FD0:  61 72 73 72 65 61 64 29 3B 0D 0A 09 09 63 5B 43    arsread);....c[C
011FE0:  68 61 72 73 72 65 61 64 5D 3A 3D 57 6F 72 6B 69    harsread]:=Worki
011FF0:  6E 67 5E 2E 43 68 61 72 73 5B 43 68 61 72 50 6F    ng^.Chars[CharPo
012000:  73 5D 3B 0D 0A 09 09 49 46 20 28 43 68 61 72 73    s];....IF (Chars
012010:  72 65 61 64 3D 48 49 47 48 28 63 29 29 20 4F 52    read=HIGH(c)) OR
012020:  20 28 69 3D 31 29 20 54 48 45 4E 0D 0A 09 09 09     (i=1) THEN.....
012030:  73 61 76 65 63 75 72 70 6F 73 28 46 72 6F 6D 46    savecurpos(FromF
012040:  69 6C 65 29 3B 0D 0A 09 09 09 70 3A 3D 46 72 6F    ile);.....p:=Fro
012050:  6D 46 69 6C 65 2E 43 75 72 50 6F 73 3B 0D 0A 09    mFile.CurPos;...
012060:  09 09 54 6F 46 69 6C 65 2E 43 75 72 50 6F 73 3A    ..ToFile.CurPos:
012070:  3D 71 3B 0D 0A 09 09 09 57 48 49 4C 45 20 43 68    =q;.....WHILE Ch
012080:  61 72 73 72 65 61 64 3E 30 20 44 4F 0D 0A 09 09    arsread>0 DO....
012090:  09 09 49 46 20 43 68 61 72 73 72 65 61 64 3E 54    ..IF Charsread>T
0120A0:  68 69 72 64 20 54 48 45 4E 0D 0A 09 09 09 09 09    hird THEN.......
0120B0:  49 6E 73 43 68 61 72 73 28 54 6F 46 69 6C 65 2C    InsChars(ToFile,
0120C0:  63 2C 54 68 69 72 64 29 3B 0D 0A 09 09 09 09 09    c,Third);.......
0120D0:  43 68 61 72 73 72 65 61 64 3A 3D 43 68 61 72 73    Charsread:=Chars
0120E0:  72 65 61 64 2D 54 68 69 72 64 3B 0D 0A 09 09 09    read-Third;.....
0120F0:  09 09 4D 6F 76 65 64 6F 77 6E 28 41 44 52 28 63    ..Movedown(ADR(c
012100:  6F 73 29 2D 6E 75 6D 62 65 72 29 3B 0D 0A 09 09    os)-number);....
012110:  09 09 45 4E 44 3B 0D 0A 09 09 09 42 6C 6F 63 6B    ..END;.....Block
012120:  4C 65 6E 3A 3D 4F 52 44 28 42 6C 6F 63 6B 4C 65    Len:=ORD(BlockLe
012130:  6E 29 2D 6E 75 6D 62 65 72 3B 0D 0A 09 09 09 49    n)-number;.....I
012140:  46 20 28 4E 65 78 74 3D 4E 49 4C 29 20 41 4E 44    F (Next=NIL) AND
012150:  20 28 43 68 61 72 73 5B 42 6C 6F 63 6B 4C 65 6E     (Chars[BlockLen
012160:  2D 31 5D 3C 3E 45 4F 46 29 20 54 48 45 4E 0D 0A    -1]<>EOF) THEN..
012170:  09 09 09 09 43 68 61 72 73 5B 42 6C 6F 63 6B 4C    ....Chars[BlockL
012180:  65 6E 5D 3A 3D 45 4F 46 3B 0D 0A 09 09 09 09 49    en]:=EOF;......I
012190:  4E 43 28 42 6C 6F 63 6B 4C 65 6E 29 3B 20 0D 0A    NC(BlockLen); ..
0121A0:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44    ....END;.....END
0121B0:  28 2A 20 42 6C 6F 63 6B 20 6E 6F 74 20 6E 6F 77    (* Block not now
0121C0:  20 65 6D 70 74 79 2A 29 3B 0D 0A 09 09 45 4E 44     empty*);....END
0121D0:  3B 28 2A 57 49 54 48 2A 29 0D 0A 09 45 4E 44 20    ;(*WITH*)...END 
0121E0:  44 65 6C 49 6E 42 6C 6F 63 6B 3B 0D 0A 0D 0A 56    DelInBlock;....V
0121F0:  41 52 09 4E 65 78 74 42 6C 6F 63 6B 3A 50 54 65    AR.NextBlock:PTe
012200:  78 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 73 65 74    xt;..BEGIN...set
012210:  63 75 72 70 6F 73 28 66 29 3B 0D 0A 09 57 48 49    curpos(f);...WHI
012220:  4C 45 20 28 6E 75 6D 62 65 72 3E 30 29 20 41 4E    LE (number>0) AN
012230:  44 20 28 57 6F 72 6B 69 6E 67 3C 3E 4E 49 4C 29    D (Working<>NIL)
012240:  20 44 4F 0D 0A 09 09 4E 65 78 74 42 6C 6F 63 6B     DO....NextBlock
012250:  3A 3D 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3B    :=Working^.Next;
012260:  0D 0A 09 09 49 46 20 6E 75 6D 62 65 72 3C 3D 28    ....IF number<=(
012270:  4F 52 44 28 57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F    ORD(Working^.Blo
012280:  63 6B 4C 65 6E 29 2D 43 68 61 72 50 6F 73 29 20    ckLen)-CharPos) 
012290:  54 48 45 4E 0D 0A 09 09 09 44 65 6C 49 6E 42 6C    THEN.....DelInBl
0122A0:  6F 63 6B 28 6E 75 6D 62 65 72 29 3B 0D 0A 09 09    ock(number);....
0122B0:  09 6E 75 6D 62 65 72 3A 3D 30 3B 0D 0A 09 09 45    .number:=0;....E
0122C0:  4C 53 45 0D 0A 09 09 09 6E 75 6D 62 65 72 3A 3D    LSE.....number:=
0122D0:  6E 75 6D 62 65 72 2D 4F 52 44 28 57 6F 72 6B 69    number-ORD(Worki
0122E0:  6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 2B 43 68    ng^.BlockLen)+Ch
0122F0:  61 72 50 6F 73 3B 0D 0A 09 09 09 44 65 6C 49 6E    arPos;.....DelIn
012300:  5B 54 68 69 72 64 2B 31 5D 29 2C 0D 0A 09 09 09    [Third+1]),.....
012310:  09 09 09 41 44 52 28 63 29 2C 43 68 61 72 73 72    ...ADR(c),Charsr
012320:  65 61 64 29 3B 0D 0A 09 09 09 09 45 4C 53 45 0D    ead);......ELSE.
012330:  0A 09 09 09 09 09 49 6E 73 43 68 61 72 73 28 54    ......InsChars(T
012340:  6F 46 69 6C 65 2C 63 2C 43 68 61 72 73 72 65 61    oFile,c,Charsrea
012350:  64 29 3B 0D 0A 09 09 09 09 09 43 68 61 72 73 72    d);.......Charsr
012360:  65 61 64 3A 3D 30 3B 0D 0A 09 09 09 09 09 45 4E    ead:=0;.......EN
012370:  44 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09    D;......END;....
012380:  09 71 3A 3D 54 6F 46 69 6C 65 2E 43 75 72 50 6F    .q:=ToFile.CurPo
012390:  73 3B 0D 0A 09 09 09 46 72 6F 6D 46 69 6C 65 2E    s;.....FromFile.
0123A0:  43 75 72 50 6F 73 3A 3D 70 3B 0D 0A 09 09 09 73    CurPos:=p;.....s
0123B0:  65 74 63 75 72 70 6F 73 28 46 72 6F 6D 46 69 6C    etcurpos(FromFil
0123C0:  65 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    e);.....END;....
0123D0:  49 46 20 4E 4F 54 20 41 64 76 61 6E 63 65 28 29    IF NOT Advance()
0123E0:  20 54 48 45 4E 20 45 58 49 54 20 28 2A 20 6E 65     THEN EXIT (* ne
0123F0:  76 65 72 20 74 61 6B 65 6E 2A 29 20 45 4E 44 3B    ver taken*) END;
012400:  0D 0A 09 09 44 45 43 28 69 29 3B 0D 0A 09 09 45    ....DEC(i);....E
012410:  4E 44 3B 09 28 2A 4C 4F 4F 50 2A 29 0D 0A 09 46    ND;.(*LOOP*)...F
012420:  72 6F 6D 46 69 6C 65 2E 43 75 72 50 6F 73 3A 3D    romFile.CurPos:=
012430:  72 3B 0D 0A 09 54 6F 46 69 6C 65 2E 43 75 72 50    r;...ToFile.CurP
012440:  6F 73 3A 3D 71 3B 0D 0A 09 52 45 54 55 52 4E 20    os:=q;...RETURN 
012450:  54 52 55 45 3B 0D 0A 09 45 4E 44 20 42 6C 6F 63    TRUE;...END Bloc
012460:  6B 43 6F 70 79 3B 0D 0A 50 52 4F 43 45 44 55 52    kCopy;..PROCEDUR
012470:  45 20 42 6C 6F 63 6B 44 65 6C 28 56 41 52 20 46    E BlockDel(VAR F
012480:  72 6F 6D 46 69 6C 65 3A 45 64 69 74 46 69 6C 65    romFile:EditFile
012490:  29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 56 41 52 09    ):BOOLEAN;..VAR.
0124A0:  70 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A 42 45 47    p:Position;..BEG
0124B0:  49 4E 0D 0A 09 49 46 20 4E 4F 54 20 43 68 65 63    IN...IF NOT Chec
0124C0:  6B 42 6C 6F 63 6B 28 46 72 6F 6D 46 69 6C 65 29    kBlock(FromFile)
0124D0:  20 54 48 45 4E 20 52 45 54 55 52 4E 20 46 41 4C     THEN RETURN FAL
0124E0:  53 45 20 45 4E 44 3B 0D 0A 09 57 49 54 48 20 46    SE END;...WITH F
0124F0:  72 6F 6D 46 69 6C 65 20 44 4F 0D 0A 09 09 4C 61    romFile DO....La
012500:  42 6C 6F 63 6B 28 4F 52 44 28 57 6F 72 6B 69 6E    Block(ORD(Workin
012510:  67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 2D 43 68 61    g^.BlockLen)-Cha
012520:  72 50 6F 73 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D    rPos);.....END;.
012530:  0A 09 09 49 46 20 28 6E 75 6D 62 65 72 3E 30 29    ...IF (number>0)
012540:  20 4F 52 20 28 57 6F 72 6B 69 6E 67 3D 4E 49 4C     OR (Working=NIL
012550:  29 20 54 48 45 4E 20 0D 0A 09 09 09 57 6F 72 6B    ) THEN .....Work
012560:  69 6E 67 3A 3D 4E 65 78 74 42 6C 6F 63 6B 3B 0D    ing:=NextBlock;.
012570:  0A 09 09 09 43 68 61 72 50 6F 73 3A 3D 30 3B 20    ....CharPos:=0; 
012580:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44    .....END;....END
012590:  3B 20 28 2A 57 48 49 4C 45 2A 29 0D 0A 09 49 46    ; (*WHILE*)...IF
0125A0:  20 57 6F 72 6B 69 6E 67 3D 4E 49 4C 20 54 48 45     Working=NIL THE
0125B0:  4E 20 0D 0A 09 09 57 6F 72 6B 69 6E 67 3A 3D 66    N ....Working:=f
0125C0:  2E 43 68 61 69 6E 3B 0D 0A 09 09 57 48 49 4C 45    .Chain;....WHILE
0125D0:  20 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3C 3E     Working^.Next<>
0125E0:  4E 49 4C 20 44 4F 20 57 6F 72 6B 69 6E 67 3A 3D    NIL DO Working:=
0125F0:  57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 20 45 4E    Working^.Next EN
012600:  44 3B 0D 0A 09 09 43 68 61 72 50 6F 73 3A 3D 57    D;....CharPos:=W
012610:  6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E    orking^.BlockLen
012620:  0D 0A 09 09 45 4E 44 3B 28 2A 64 65 6C 65 74 65    ....END;(*delete
012630:  64 20 65 76 65 72 79 74 68 69 6E 67 2A 29 0D 0A    d everything*)..
012640:  09 73 61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D    .savecurpos(f);.
012650:  0A 09 45 4E 44 20 44 65 6C 43 68 61 72 73 3B 0D    ..END DelChars;.
012660:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 49 6E 73    ...PROCEDURE Ins
012670:  43 68 61 72 73 28 56 41 52 20 66 3A 45 64 69 74    Chars(VAR f:Edit
012680:  46 69 6C 65 3B 56 41 52 20 53 3A 41 52 52 41 59    File;VAR S:ARRAY
012690:  20 4F 46 20 43 48 41 52 3B 6C 65 6E 3A 49 4E 54     OF CHAR;len:INT
0126A0:  45 47 45 52 29 3B 0D 0A 28 2A 09 69 6E 73 65 72    EGER);..(*.inser
0126B0:  74 20 63 68 61 72 61 63 74 65 72 73 2A 29 0D 0A    t characters*)..
0126C0:  56 41 52 09 6C 65 66 74 2C 66 6F 6C 6C 6F 77 73    VAR.left,follows
0126D0:  3A 49 4E 54 45 47 45 52 3B 0D 0A 09 4D 61 69 6E    :INTEGER;...Main
0126E0:  42 6C 6F 63 6B 3A 50 54 65 78 74 3B 0D 0A 50 52    Block:PText;..PR
0126F0:  4F 43 45 44 55 52 45 20 49 6E 73 49 6E 42 6C 6F    OCEDURE InsInBlo
012700:  62 65 6C 73 5B 32 35 5D 3A 3D 43 75 72 50 6F 73    bels[25]:=CurPos
012710:  3B 0D 0A 09 09 43 75 72 50 6F 73 3A 3D 4C 61 62    ;....CurPos:=Lab
012720:  65 6C 73 5B 31 30 5D 3B 0D 0A 09 20 20 20 20 20    els[10];...     
012730:  20 20 20 44 65 6C 43 68 61 72 73 28 46 72 6F 6D       DelChars(From
012740:  46 69 6C 65 2C 72 65 70 6C 79 29 3B 0D 0A 09 09    File,reply);....
012750:  43 75 72 50 6F 73 3A 3D 4C 61 62 65 6C 73 5B 32    CurPos:=Labels[2
012760:  35 5D 3B 0D 0A 09 09 4C 61 62 65 6C 73 5B 32 35    5];....Labels[25
012770:  5D 2E 42 6C 6F 63 6B 3A 3D 4E 49 4C 3B 0D 0A 09    ].Block:=NIL;...
012780:  09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 54    .END;...RETURN T
012790:  52 55 45 3B 0D 0A 09 45 4E 44 20 42 6C 6F 63 6B    RUE;...END Block
0127A0:  44 65 6C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    Del;..PROCEDURE 
0127B0:  52 65 6C 6F 63 61 74 65 4C 61 62 65 6C 73 28 56    RelocateLabels(V
0127C0:  41 52 20 66 3A 45 64 69 74 46 69 6C 65 3B 6E 75    AR f:EditFile;nu
0127D0:  6D 62 65 72 3A 49 4E 54 45 47 45 52 29 3B 0D 0A    mber:INTEGER);..
0127E0:  28 2A 09 52 65 6C 6F 63 61 74 65 20 6C 61 62 65    (*.Relocate labe
0127F0:  6C 73 20 66 6F 72 20 74 68 65 20 63 75 72 72 65    ls for the curre
012800:  6E 74 20 62 6C 6F 63 6B 0D 0A 09 6E 75 6D 62 65    nt block...numbe
012810:  72 20 69 73 20 6E 75 6D 62 65 72 20 6F 66 20 63    r is number of c
012820:  68 61 72 61 63 74 65 72 73 20 62 65 69 6E 67 20    haracters being 
012830:  64 65 6C 65 74 65 64 20 0D 0A 09 28 2D 76 65 20    deleted ...(-ve 
012840:  66 6F 72 20 69 6E 73 65 72 74 69 6F 6E 73 29 0D    for insertions).
012850:  0A 2A 29 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20    .*)..BEGIN..    
012860:  20 20 20 20 46 4F 52 20 72 65 70 6C 79 3A 3D 30        FOR reply:=0
012870:  20 54 4F 20 48 49 47 48 28 66 2E 4C 61 62 65 6C     TO HIGH(f.Label
012880:  73 29 20 44 4F 0D 0A 09 09 57 49 54 48 20 66 2E    s) DO....WITH f.
012890:  4C 61 62 65 6C 73 5B 72 65 70 6C 79 5D 20 44 4F    Labels[reply] DO
0128A0:  0D 0A 09 09 09 49 46 20 28 42 6C 6F 63 6B 3D 57    .....IF (Block=W
0128B0:  6F 72 6B 69 6E 67 29 20 41 4E 44 20 28 4F 52 44    orking) AND (ORD
0128C0:  28 4F 66 66 73 65 74 29 3E 3D 43 68 61 72 50 6F    (Offset)>=CharPo
0128D0:  73 29 20 54 48 45 4E 0D 0A 09 09 09 09 49 46 20    s) THEN......IF 
0128E0:  28 6E 75 6D 62 65 72 3D 4F 52 44 28 57 6F 72 6B    (number=ORD(Work
0128F0:  69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 29 20    ing^.BlockLen)) 
012900:  63 6B 3B 0D 0A 56 41 52 09 73 74 61 72 74 3A 49    ck;..VAR.start:I
012910:  4E 54 45 47 45 52 3B 0D 0A 09 69 3A 49 4E 54 45    NTEGER;...i:INTE
012920:  47 45 52 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 09    GER;..BEGIN.....
012930:  09 28 2A 61 64 6A 75 73 74 20 6C 61 62 65 6C 73    .(*adjust labels
012940:  2A 29 0D 0A 09 52 65 6C 6F 63 61 74 65 4C 61 62    *)...RelocateLab
012950:  65 6C 73 28 66 2C 2D 6C 65 6E 29 3B 0D 0A 09 73    els(f,-len);...s
012960:  74 61 72 74 3A 3D 30 3B 0D 0A 09 57 49 54 48 20    tart:=0;...WITH 
012970:  57 6F 72 6B 69 6E 67 5E 20 44 4F 0D 0A 09 09 49    Working^ DO....I
012980:  46 20 4F 52 44 28 42 6C 6F 63 6B 4C 65 6E 29 3E    F ORD(BlockLen)>
012990:  43 68 61 72 50 6F 73 20 54 48 45 4E 0D 0A 09 09    CharPos THEN....
0129A0:  20 20 20 20 4D 6F 76 65 75 70 28 41 44 52 28 43        Moveup(ADR(C
0129B0:  68 61 72 73 5B 43 68 61 72 50 6F 73 5D 29 2C 41    hars[CharPos]),A
0129C0:  44 52 28 43 68 61 72 73 5B 43 68 61 72 50 6F 73    DR(Chars[CharPos
0129D0:  2B 6C 65 6E 5D 29 2C 0D 0A 09 09 09 4F 52 44 28    +len]),.....ORD(
0129E0:  42 6C 6F 63 6B 4C 65 6E 29 2D 43 68 61 72 50 6F    BlockLen)-CharPo
0129F0:  73 29 3B 0D 0A 09 09 20 20 20 20 45 4E 44 3B 0D    s);....    END;.
012A00:  0A 09 09 42 6C 6F 63 6B 4C 65 6E 3A 3D 4F 52 44    ...BlockLen:=ORD
012A10:  28 42 6C 6F 63 6B 4C 65 6E 29 2B 6C 65 6E 3B 0D    (BlockLen)+len;.
012A20:  0A 09 09 57 48 49 4C 45 20 6C 65 6E 3E 30 20 44    ...WHILE len>0 D
012A30:  4F 0D 0A 09 09 09 43 68 61 72 73 5B 43 68 61 72    O.....Chars[Char
012A40:  50 6F 73 5D 3A 3D 53 5B 73 74 61 72 74 5D 3B 0D    Pos]:=S[start];.
012A50:  0A 09 09 09 49 4E 43 28 73 74 61 72 74 29 3B 0D    ....INC(start);.
012A60:  0A 09 09 09 44 45 43 28 6C 65 6E 29 3B 0D 0A 09    ....DEC(len);...
012A70:  09 09 49 4E 43 28 43 68 61 72 50 6F 73 29 3B 0D    ..INC(CharPos);.
012A80:  0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B    ....END;....END;
012A90:  0D 0A 09 45 4E 44 20 49 6E 73 49 6E 42 6C 6F 63    ...END InsInBloc
012AA0:  6B 3B 0D 0A 09 09 09 0D 0A 28 2A 09 49 66 20 74    k;.......(*.If t
012AB0:  65 78 74 20 77 69 6C 6C 20 66 69 74 20 69 6E 20    ext will fit in 
012AC0:  63 75 72 72 65 6E 74 20 62 6C 6F 63 6B 2C 20 65    current block, e
012AD0:  6E 74 65 72 20 69 6E 20 63 75 72 72 65 6E 74 20    nter in current 
012AE0:  62 6C 6F 63 6B 0D 0A 09 65 6C 73 65 20 73 70 6C    block...else spl
012AF0:  69 74 20 62 6C 6F 63 6B 20 61 6E 64 20 65 6E 74    it block and ent
012B00:  54 48 45 4E 0D 0A 09 09 09 09 09 42 6C 6F 63 6B    THEN.......Block
012B10:  3A 3D 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3B    :=Working^.Next;
012B20:  0D 0A 09 09 09 09 09 4F 66 66 73 65 74 3A 3D 30    .......Offset:=0
012B30:  3B 0D 0A 09 09 09 09 45 4C 53 49 46 20 28 6E 75    ;......ELSIF (nu
012B40:  6D 62 65 72 2B 43 68 61 72 50 6F 73 29 3E 4F 52    mber+CharPos)>OR
012B50:  44 28 4F 66 66 73 65 74 29 20 54 48 45 4E 0D 0A    D(Offset) THEN..
012B60:  09 09 09 09 09 4F 66 66 73 65 74 3A 3D 43 68 61    .....Offset:=Cha
012B70:  72 50 6F 73 0D 0A 09 09 09 09 45 4C 53 45 0D 0A    rPos......ELSE..
012B80:  09 09 09 09 09 4F 66 66 73 65 74 3A 3D 4F 52 44    .....Offset:=ORD
012B90:  28 4F 66 66 73 65 74 29 2D 6E 75 6D 62 65 72 0D    (Offset)-number.
012BA0:  0A 09 09 09 09 09 45 4E 44 3B 28 2A 49 46 2A 29    ......END;(*IF*)
012BB0:  0D 0A 09 09 09 09 45 4E 44 3B 28 2A 49 46 20 42    ......END;(*IF B
012BC0:  6C 6F 63 6B 3D 57 6F 72 6B 69 6E 67 20 65 74 63    lock=Working etc
012BD0:  2A 29 0D 0A 09 09 09 45 4E 44 3B 20 28 2A 57 49    *).....END; (*WI
012BE0:  54 48 2A 29 0D 0A 09 09 45 4E 44 3B 28 2A 46 4F    TH*)....END;(*FO
012BF0:  52 2A 29 0D 0A 09 45 4E 44 20 52 65 6C 6F 63 61    R*)...END Reloca
012C00:  74 65 4C 61 62 65 6C 73 3B 0D 0A 0D 0A 0D 0A 50    teLabels;......P
012C10:  52 4F 43 45 44 55 52 45 20 44 65 6C 43 68 61 72    ROCEDURE DelChar
012C20:  73 28 56 41 52 20 66 3A 45 64 69 74 46 69 6C 65    s(VAR f:EditFile
012C30:  3B 6E 75 6D 62 65 72 3A 49 4E 54 45 47 45 52 29    ;number:INTEGER)
012C40:  3B 0D 0A 0D 0A 28 2A 09 64 65 6C 65 74 65 20 61    ;....(*.delete a
012C50:  20 6E 75 6D 62 65 72 20 6F 66 20 63 68 61 72 61     number of chara
012C60:  63 74 65 72 73 2A 29 0D 0A 0D 0A 50 52 4F 43 45    cters*)....PROCE
012C70:  44 55 52 45 20 44 65 6C 49 6E 42 6C 6F 63 6B 28    DURE DelInBlock(
012C80:  6E 75 6D 62 65 72 3A 49 4E 54 45 47 45 52 29 3B    number:INTEGER);
012C90:  0D 0A 0D 0A 28 2A 09 50 65 72 66 6F 72 6D 20 61    ....(*.Perform a
012CA0:  20 64 65 6C 65 74 65 20 77 68 69 63 68 20 64 6F     delete which do
012CB0:  65 73 20 6E 6F 74 20 73 70 61 6E 20 61 20 62 6C    es not span a bl
012CC0:  6F 63 6B 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 52    ock*)..BEGIN...R
012CD0:  65 6C 6F 63 61 74 65 4C 61 62 65 6C 73 28 66 2C    elocateLabels(f,
012CE0:  6E 75 6D 62 65 72 29 3B 0D 0A 09 57 49 54 48 20    number);...WITH 
012CF0:  57 6F 72 6B 69 6E 67 5E 20 44 4F 0D 0A 09 09 49    Working^ DO....I
012D00:  65 72 20 69 6E 20 61 70 70 72 6F 70 72 69 61 74    er in appropriat
012D10:  65 20 62 6C 6F 63 6B 2A 29 0D 0A 0D 0A 42 45 47    e block*)....BEG
012D20:  49 4E 0D 0A 09 73 65 74 63 75 72 70 6F 73 28 66    IN...setcurpos(f
012D30:  29 3B 0D 0A 09 6C 65 66 74 3A 3D 54 65 78 74 4C    );...left:=TextL
012D40:  65 6E 2D 4F 52 44 28 57 6F 72 6B 69 6E 67 5E 2E    en-ORD(Working^.
012D50:  42 6C 6F 63 6B 4C 65 6E 29 3B 0D 0A 0D 0A 09 28    BlockLen);.....(
012D60:  2A 09 6C 65 66 74 20 69 73 20 63 68 61 72 61 63    *.left is charac
012D70:  74 65 72 73 20 6C 65 66 74 20 69 6E 20 62 6C 6F    ters left in blo
012D80:  63 6B 2A 29 0D 0A 0D 0A 09 49 46 20 6C 65 66 74    ck*).....IF left
012D90:  3E 3D 6C 65 6E 20 54 48 45 4E 20 49 6E 73 49 6E    >=len THEN InsIn
012DA0:  42 6C 6F 63 6B 0D 0A 09 45 4C 53 45 0D 0A 0D 0A    Block...ELSE....
012DB0:  09 09 28 2A 73 70 6C 69 74 20 74 68 65 20 62 6C    ..(*split the bl
012DC0:  6F 63 6B 20 73 6F 20 74 68 61 74 20 61 66 74 65    ock so that afte
012DD0:  72 20 69 6E 73 65 72 74 20 74 68 65 20 74 77 6F    r insert the two
012DE0:  20 62 6C 6F 63 6B 73 0D 0A 09 09 20 20 77 69 6C     blocks....  wil
012DF0:  6C 20 62 65 20 61 70 70 72 6F 78 20 65 71 75 61    l be approx equa
012E00:  6C 20 69 6E 20 73 69 7A 65 2A 29 0D 0A 09 09 6C    l in size*)....l
012E10:  65 66 74 3A 3D 4F 52 44 28 57 6F 72 6B 69 6E 67    eft:=ORD(Working
012E20:  5E 2E 42 6C 6F 63 6B 4C 65 6E 29 20 44 49 56 20    ^.BlockLen) DIV 
012E30:  32 3B 0D 0A 09 09 4D 61 69 6E 42 6C 6F 63 6B 3A    2;....MainBlock:
012E40:  3D 57 6F 72 6B 69 6E 67 3B 0D 0A 09 09 4E 65 77    =Working;....New
012E50:  42 6C 6F 63 6B 3B 0D 0A 09 09 57 6F 72 6B 69 6E    Block;....Workin
012E60:  67 5E 2E 50 72 65 64 3A 3D 4D 61 69 6E 42 6C 6F    g^.Pred:=MainBlo
012E70:  63 6B 3B 0D 0A 09 09 46 4F 52 20 72 65 70 6C 79    ck;....FOR reply
012E80:  3A 3D 30 20 54 4F 20 48 49 47 48 28 66 2E 4C 61    :=0 TO HIGH(f.La
012E90:  62 65 6C 73 29 20 44 4F 0D 0A 09 09 09 57 49 54    bels) DO.....WIT
012EA0:  48 20 66 2E 4C 61 62 65 6C 73 5B 72 65 70 6C 79    H f.Labels[reply
012EB0:  5D 20 44 4F 0D 0A 09 09 09 09 49 46 20 28 42 6C    ] DO......IF (Bl
012EC0:  6F 63 6B 3D 4D 61 69 6E 42 6C 6F 63 6B 29 20 41    ock=MainBlock) A
012ED0:  4E 44 20 28 4F 52 44 28 4F 66 66 73 65 74 29 3E    ND (ORD(Offset)>
012EE0:  3D 6C 65 66 74 29 20 54 48 45 4E 0D 0A 09 09 09    =left) THEN.....
012EF0:  09 09 42 6C 6F 63 6B 3A 3D 57 6F 72 6B 69 6E 67    ..Block:=Working
012F00:  46 20 28 6E 75 6D 62 65 72 3D 4F 52 44 28 42 6C    F (number=ORD(Bl
012F10:  6F 63 6B 4C 65 6E 29 29 20 28 2A 3D 3E 43 68 61    ockLen)) (*=>Cha
012F20:  72 50 6F 73 3D 30 2A 29 20 54 48 45 4E 0D 0A 09    rPos=0*) THEN...
012F30:  09 09 28 2A 44 65 6C 65 74 65 20 62 6C 6F 63 6B    ..(*Delete block
012F40:  2A 29 0D 0A 0D 0A 09 09 09 49 46 20 4E 65 78 74    *).......IF Next
012F50:  3C 3E 4E 49 4C 20 54 48 45 4E 20 4E 65 78 74 5E    <>NIL THEN Next^
012F60:  2E 50 72 65 64 3A 3D 50 72 65 64 20 45 4E 44 3B    .Pred:=Pred END;
012F70:  0D 0A 09 09 09 49 46 20 50 72 65 64 3C 3E 4E 49    .....IF Pred<>NI
012F80:  4C 20 54 48 45 4E 20 0D 0A 09 09 09 09 50 72 65    L THEN ......Pre
012F90:  64 5E 2E 4E 65 78 74 3A 3D 4E 65 78 74 3B 0D 0A    d^.Next:=Next;..
012FA0:  09 09 09 09 44 49 53 50 4F 53 45 28 57 6F 72 6B    ....DISPOSE(Work
012FB0:  69 6E 67 29 3B 0D 0A 09 09 09 45 4C 53 49 46 20    ing);.....ELSIF 
012FC0:  4E 65 78 74 3C 3E 4E 49 4C 20 54 48 45 4E 20 0D    Next<>NIL THEN .
012FD0:  0A 09 09 09 09 66 2E 43 68 61 69 6E 3A 3D 4E 65    .....f.Chain:=Ne
012FE0:  78 74 3B 0D 0A 09 09 09 09 44 49 53 50 4F 53 45    xt;......DISPOSE
012FF0:  28 57 6F 72 6B 69 6E 67 29 3B 0D 0A 09 09 09 45    (Working);.....E
013000:  4C 53 45 09 28 2A 6F 6E 6C 79 20 62 6C 6F 63 6B    LSE.(*only block
013010:  20 69 6E 20 66 69 6C 65 20 73 6F 20 6B 65 65 70     in file so keep
013020:  2A 29 0D 0A 09 09 09 09 42 6C 6F 63 6B 4C 65 6E    *)......BlockLen
013030:  3A 3D 31 3B 0D 0A 09 09 09 09 57 6F 72 6B 69 6E    :=1;......Workin
013040:  67 5E 2E 43 68 61 72 73 5B 30 5D 3A 3D 45 4F 46    g^.Chars[0]:=EOF
013050:  3B 0D 0A 09 09 09 09 45 4E 44 3B 28 2A 50 72 65    ;......END;(*Pre
013060:  64 3C 3E 4E 49 4C 2A 29 0D 0A 09 09 45 4C 53 45    d<>NIL*)....ELSE
013070:  09 0D 0A 09 09 09 49 46 20 4F 52 44 28 42 6C 6F    ......IF ORD(Blo
013080:  63 6B 4C 65 6E 29 3E 28 43 68 61 72 50 6F 73 2B    ckLen)>(CharPos+
013090:  6E 75 6D 62 65 72 29 20 54 48 45 4E 0D 0A 09 09    number) THEN....
0130A0:  09 20 20 20 20 4D 6F 76 65 64 6F 77 6E 28 41 44    .    Movedown(AD
0130B0:  52 28 43 68 61 72 73 5B 43 68 61 72 50 6F 73 2B    R(Chars[CharPos+
0130C0:  6E 75 6D 62 65 72 5D 29 2C 0D 0A 09 09 09 09 41    number]),......A
0130D0:  44 52 28 43 68 61 72 73 5B 43 68 61 72 50 6F 73    DR(Chars[CharPos
0130E0:  5D 29 2C 0D 0A 09 09 09 09 4F 52 44 28 42 6C 6F    ]),......ORD(Blo
0130F0:  63 6B 4C 65 6E 29 2D 4F 52 44 28 43 68 61 72 50    ckLen)-ORD(CharP
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:  3B 0D 0A 09 09 09 09 09 4F 66 66 73 65 74 3A 3D    ;.......Offset:=
013210:  4F 52 44 28 4F 66 66 73 65 74 29 2D 6C 65 66 74    ORD(Offset)-left
013220:  3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09    ;.......END;....
013230:  09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D    ..END;.....END;.
013240:  0A 09 09 09 09 09 0D 0A 09 09 57 49 54 48 20 4D    ..........WITH M
013250:  61 69 6E 42 6C 6F 63 6B 5E 20 44 4F 0D 0A 09 09    ainBlock^ DO....
013260:  09 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3A 3D    .Working^.Next:=
013270:  4E 65 78 74 3B 0D 0A 09 09 09 49 46 20 4E 65 78    Next;.....IF Nex
013280:  74 3C 3E 4E 49 4C 20 54 48 45 4E 20 4E 65 78 74    t<>NIL THEN Next
013290:  5E 2E 50 72 65 64 3A 3D 57 6F 72 6B 69 6E 67 20    ^.Pred:=Working 
0132A0:  45 4E 44 3B 0D 0A 09 09 09 4E 65 78 74 3A 3D 57    END;.....Next:=W
0132B0:  6F 72 6B 69 6E 67 3B 0D 0A 09 09 09 57 6F 72 6B    orking;.....Work
0132C0:  69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 3A 3D 4F    ing^.BlockLen:=O
0132D0:  52 44 28 42 6C 6F 63 6B 4C 65 6E 29 2D 6C 65 66    RD(BlockLen)-lef
0132E0:  74 3B 0D 0A 09 09 09 42 6C 6F 63 6B 4C 65 6E 3A    t;.....BlockLen:
0132F0:  3D 6C 65 66 74 3B 0D 0A 09 09 09 4D 6F 76 65 75    =left;.....Moveu
013300:  70 28 41 44 52 28 43 68 61 72 73 5B 42 6C 6F 63    p(ADR(Chars[Bloc
013310:  6B 4C 65 6E 5D 29 2C 0D 0A 09 09 09 20 20 20 20    kLen]),.....    
013320:  41 44 52 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61    ADR(Working^.Cha
013330:  72 73 29 2C 0D 0A 09 09 09 20 20 20 20 6C 65 66    rs),.....    lef
013340:  74 2B 31 29 3B 0D 0A 09 09 09 49 46 20 43 68 61    t+1);.....IF Cha
013350:  72 50 6F 73 3C 4F 52 44 28 42 6C 6F 63 6B 4C 65    rPos<ORD(BlockLe
013360:  6E 29 20 54 48 45 4E 20 57 6F 72 6B 69 6E 67 3A    n) THEN Working:
013370:  3D 4D 61 69 6E 42 6C 6F 63 6B 0D 0A 09 09 09 45    =MainBlock.....E
013380:  4C 53 45 20 43 68 61 72 50 6F 73 3A 3D 43 68 61    LSE CharPos:=Cha
013390:  72 50 6F 73 2D 4F 52 44 28 42 6C 6F 63 6B 4C 65    rPos-ORD(BlockLe
0133A0:  6E 29 20 45 4E 44 3B 0D 0A 09 09 09 49 6E 73 49    n) END;.....InsI
0133B0:  6E 42 6C 6F 63 6B 3B 0D 0A 09 09 09 45 4E 44 3B    nBlock;.....END;
0133C0:  28 2A 57 49 54 48 2A 29 0D 0A 09 09 45 4E 44 3B    (*WITH*)....END;
0133D0:  28 2A 6C 65 66 74 3E 3D 6C 65 6E 2A 29 0D 0A 09    (*left>=len*)...
0133E0:  73 61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D 0A    savecurpos(f);..
0133F0:  09 45 4E 44 20 49 6E 73 43 68 61 72 73 3B 0D 0A    .END InsChars;..
013400:  6E 64 6F 77 3A 49 4E 54 45 47 45 52 3B 56 41 52    ndow:INTEGER;VAR
013410:  20 63 75 72 78 2C 63 75 72 79 3A 43 41 52 44 49     curx,cury:CARDI
013420:  4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 52    NAL);..BEGIN...R
013430:  65 74 72 6C 69 6E 65 28 66 2C 6C 65 6E 2C 63 68    etrline(f,len,ch
013440:  61 72 73 69 6E 2C 70 6F 73 2C 6D 6F 76 65 64 2C    arsin,pos,moved,
013450:  30 29 3B 0D 0A 09 6C 69 6E 65 70 6F 73 3A 3D 30    0);...linepos:=0
013460:  3B 0D 0A 09 46 4F 52 20 69 63 3A 3D 30 20 54 4F    ;...FOR ic:=0 TO
013470:  20 63 68 61 72 73 69 6E 20 44 4F 0D 0A 09 09 52     charsin DO....R
013480:  65 61 64 4E 65 78 74 43 68 61 72 28 70 6F 73 2C    eadNextChar(pos,
013490:  63 68 29 3B 0D 0A 09 09 49 46 20 63 68 3D 30 39    ch);....IF ch=09
0134A0:  78 20 54 48 45 4E 20 6C 69 6E 65 70 6F 73 3A 3D    x THEN linepos:=
0134B0:  49 41 4E 44 28 6C 69 6E 65 70 6F 73 2B 38 2C 30    IAND(linepos+8,0
0134C0:  66 66 66 38 68 29 0D 0A 09 09 45 4C 53 45 20 49    fff8h)....ELSE I
0134D0:  4E 43 28 6C 69 6E 65 70 6F 73 29 20 45 4E 44 3B    NC(linepos) END;
0134E0:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C 65 66 74 4D    ....END;...LeftM
0134F0:  61 72 67 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20    arg:=0;...WHILE 
013500:  6C 69 6E 65 70 6F 73 3E 28 4C 65 66 74 4D 61 72    linepos>(LeftMar
013510:  67 2B 53 63 72 65 65 6E 57 69 64 74 68 29 20 44    g+ScreenWidth) D
013520:  4F 0D 0A 09 09 4C 65 66 74 4D 61 72 67 3A 3D 4C    O....LeftMarg:=L
013530:  65 66 74 4D 61 72 67 2B 33 32 3B 0D 0A 09 09 45    eftMarg+32;....E
013540:  4E 44 3B 0D 0A 09 4C 65 66 74 4D 61 72 67 69 6E    ND;...LeftMargin
013550:  5B 77 69 6E 64 6F 77 5D 3A 3D 4C 65 66 74 4D 61    [window]:=LeftMa
013560:  72 67 3B 0D 0A 09 45 4E 44 20 53 65 74 4C 65 66    rg;...END SetLef
013570:  74 4D 61 72 67 3B 0D 0A 50 52 4F 43 45 44 55 52    tMarg;..PROCEDUR
013580:  45 20 44 69 73 70 6C 61 79 46 69 6C 65 28 66 3A    E DisplayFile(f:
013590:  45 64 69 74 46 69 6C 65 3B 77 69 6E 64 6F 77 3A    EditFile;window:
0135A0:  49 4E 54 45 47 45 52 3B 56 41 52 20 63 75 72 78    INTEGER;VAR curx
0135B0:  2C 63 75 72 79 3A 43 41 52 44 49 4E 41 4C 29 3B    ,cury:CARDINAL);
0135C0:  0D 0A 0D 0A 28 2A 09 72 65 64 69 73 70 6C 61 79    ....(*.redisplay
0135D0:  20 61 73 20 6D 75 63 68 20 74 65 78 74 20 61 73     as much text as
0135E0:  20 77 69 6C 6C 20 66 69 74 20 69 6E 20 74 68 65     will fit in the
0135F0:  20 77 69 6E 64 6F 77 0D 0A 09 66 6F 72 20 74 68     window...for th
013600:  0D 0A 0D 0A 56 41 52 09 62 3A 42 4F 4F 4C 45 41    ....VAR.b:BOOLEA
013610:  4E 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20    N;....PROCEDURE 
013620:  42 61 63 6B 75 70 4C 69 6E 65 28 29 3A 49 4E 54    BackupLine():INT
013630:  45 47 45 52 3B 0D 0A 0D 0A 28 2A 09 42 61 63 6B    EGER;....(*.Back
013640:  75 70 20 74 6F 20 62 65 67 69 6E 6E 69 6E 67 20    up to beginning 
013650:  6F 66 20 63 75 72 72 65 6E 74 20 6C 69 6E 65 0D    of current line.
013660:  0A 09 72 65 74 75 72 6E 73 20 6E 75 6D 62 65 72    ..returns number
013670:  20 6F 66 20 63 68 61 72 61 63 74 65 72 73 20 62     of characters b
013680:  61 63 6B 65 64 20 75 70 0D 0A 0D 0A 09 61 66 74    acked up.....aft
013690:  65 72 20 74 68 65 20 63 61 6C 6C 2C 20 74 68 65    er the call, the
0136A0:  20 70 6F 73 69 74 69 6F 6E 20 69 73 20 74 68 65     position is the
0136B0:  20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72     first character
0136C0:  0D 0A 09 61 66 74 65 72 20 6F 66 20 74 68 65 20    ...after of the 
0136D0:  6C 69 6E 65 2A 29 0D 0A 56 41 52 09 70 6F 73 3A    line*)..VAR.pos:
0136E0:  49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E 0D    INTEGER;..BEGIN.
0136F0:  0A 09 70 6F 73 3A 3D 30 3B 0D 0A 09 4C 4F 4F 50    ..pos:=0;...LOOP
013700:  0D 0A 09 09 49 46 20 4E 4F 54 20 42 61 63 6B 75    ....IF NOT Backu
013710:  70 28 29 20 54 48 45 4E 20 45 58 49 54 20 45 4E    p() THEN EXIT EN
013720:  44 3B 0D 0A 09 09 63 68 3A 3D 57 6F 72 6B 69 6E    D;....ch:=Workin
013730:  67 5E 2E 43 68 61 72 73 5B 43 68 61 72 50 6F 73    g^.Chars[CharPos
013740:  5D 3B 0D 0A 09 09 49 46 20 28 28 63 68 3D 43 52    ];....IF ((ch=CR
013750:  29 20 4F 52 20 28 63 68 3D 4C 46 29 20 4F 52 20    ) OR (ch=LF) OR 
013760:  28 63 68 3D 46 46 29 29 20 20 54 48 45 4E 20 0D    (ch=FF))  THEN .
013770:  0A 09 09 09 62 3A 3D 41 64 76 61 6E 63 65 28 29    ....b:=Advance()
013780:  3B 0D 0A 09 09 09 45 58 49 54 20 0D 0A 09 09 09    ;.....EXIT .....
013790:  45 4E 44 3B 0D 0A 09 09 70 6F 73 3A 3D 70 6F 73    END;....pos:=pos
0137A0:  2B 31 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 4C 4F    +1;....END; (*LO
0137B0:  4F 50 2A 29 0D 0A 09 52 45 54 55 52 4E 20 70 6F    OP*)...RETURN po
0137C0:  73 3B 0D 0A 09 45 4E 44 20 42 61 63 6B 75 70 4C    s;...END BackupL
0137D0:  69 6E 65 3B 0D 0A 56 41 52 09 41 64 76 61 6E 63    ine;..VAR.Advanc
0137E0:  65 4F 4B 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 50 52    eOK:BOOLEAN;..PR
0137F0:  4F 43 45 44 55 52 45 20 41 64 76 61 6E 63 65 4C    OCEDURE AdvanceL
013800:  65 20 67 69 76 65 6E 20 66 69 6C 65 20 73 74 61    e given file sta
013810:  72 74 69 6E 67 20 61 74 20 74 68 65 20 63 75 72    rting at the cur
013820:  72 65 6E 74 20 70 6F 73 69 74 69 6F 6E 20 69 6E    rent position in
013830:  20 74 68 65 20 66 69 6C 65 2A 29 0D 0A 56 41 52     the file*)..VAR
013840:  09 69 2C 6A 2C 6B 2C 6C 69 6E 65 70 6F 73 3A 43    .i,j,k,linepos:C
013850:  41 52 44 49 4E 41 4C 3B 0D 0A 09 6D 6F 76 65 64    ARDINAL;...moved
013860:  6F 6E 65 3A 49 4E 54 45 47 45 52 3B 09 0D 0A 09    one:INTEGER;....
013870:  73 74 61 72 74 6C 69 6E 65 3A 49 4E 54 45 47 45    startline:INTEGE
013880:  52 3B 20 28 2A 66 69 72 73 74 20 6C 69 6E 65 20    R; (*first line 
013890:  6F 66 20 77 69 6E 64 6F 77 2A 29 0D 0A 42 45 47    of window*)..BEG
0138A0:  49 4E 0D 0A 09 4C 65 66 74 4D 61 72 67 3A 3D 4C    IN...LeftMarg:=L
0138B0:  65 66 74 4D 61 72 67 69 6E 5B 77 69 6E 64 6F 77    eftMargin[window
0138C0:  5D 3B 0D 0A 09 73 74 61 72 74 6C 69 6E 65 3A 3D    ];...startline:=
0138D0:  28 49 4E 54 45 47 45 52 28 4C 69 6E 65 73 50 65    (INTEGER(LinesPe
0138E0:  72 57 69 6E 64 6F 77 29 2B 31 29 2A 28 77 69 6E    rWindow)+1)*(win
0138F0:  64 6F 77 2D 31 29 3B 0D 0A 09 47 6F 74 6F 78 79    dow-1);...Gotoxy
013900:  28 30 2C 73 74 61 72 74 6C 69 6E 65 29 3B 0D 0A    (0,startline);..
013910:  0D 0A 09 28 2A 66 69 72 73 74 20 6C 69 6E 65 20    ...(*first line 
013920:  6F 66 20 74 68 69 73 20 77 69 6E 64 6F 77 2A 29    of this window*)
013930:  0D 0A 09 69 3A 3D 30 3B 09 28 2A 6C 69 6E 65 20    ...i:=0;.(*line 
013940:  77 69 74 68 69 6E 20 77 69 6E 64 6F 77 2A 29 0D    within window*).
013950:  0A 09 6B 3A 3D 4C 69 6E 65 73 50 65 72 57 69 6E    ..k:=LinesPerWin
013960:  64 6F 77 20 44 49 56 20 32 3B 0D 0A 09 52 65 74    dow DIV 2;...Ret
013970:  72 6C 69 6E 65 28 66 2C 6C 65 6E 2C 63 68 61 72    rline(f,len,char
013980:  73 69 6E 2C 70 6F 73 2C 6D 6F 76 65 64 2C 2D 6B    sin,pos,moved,-k
013990:  29 3B 0D 0A 09 0D 0A 09 4C 4F 4F 50 0D 0A 0D 0A    );......LOOP....
0139A0:  09 09 28 2A 63 68 65 63 6B 20 69 66 20 74 68 69    ..(*check if thi
0139B0:  73 20 69 73 20 74 68 65 20 6C 69 6E 65 20 77 65    s is the line we
0139C0:  20 77 65 72 65 20 70 6F 73 69 74 69 6F 6E 65 64     were positioned
0139D0:  20 74 6F 20 75 70 6F 6E 20 65 6E 74 72 79 2A 29     to upon entry*)
0139E0:  0D 0A 0D 0A 09 09 6C 69 6E 65 70 6F 73 3A 3D 30    ......linepos:=0
0139F0:  3B 0D 0A 09 09 6A 3A 3D 30 3B 0D 0A 09 09 4C 4F    ;....j:=0;....LO
013A00:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
013A10:  4F 44 55 4C 45 20 45 64 69 74 44 69 73 70 6C 61    ODULE EditDispla
013A20:  79 3B 0D 0A 28 2A 09 44 69 73 70 6C 61 79 20 70    y;..(*.Display p
013A30:  61 72 74 20 6F 66 20 61 20 66 69 6C 65 20 62 65    art of a file be
013A40:  69 6E 67 20 65 64 69 74 65 64 2A 29 0D 0A 46 52    ing edited*)..FR
013A50:  4F 4D 09 53 43 52 45 45 4E 49 4F 20 49 4D 50 4F    OM.SCREENIO IMPO
013A60:  52 54 20 47 6F 74 6F 78 79 2C 53 63 72 65 65 6E    RT Gotoxy,Screen
013A70:  43 6F 6E 74 72 6F 6C 2C 0D 0A 09 09 09 4D 61 64    Control,.....Mad
013A80:  65 43 68 61 6E 67 65 2C 53 63 72 65 65 6E 57 69    eChange,ScreenWi
013A90:  64 74 68 2C 53 63 72 65 65 6E 44 65 70 74 68 3B    dth,ScreenDepth;
013AA0:  0D 0A 46 52 4F 4D 20 09 54 65 72 6D 69 6E 61 6C    ..FROM .Terminal
013AB0:  20 49 4D 50 4F 52 54 20 57 72 69 74 65 53 74 72     IMPORT WriteStr
013AC0:  69 6E 67 2C 57 72 69 74 65 2C 57 72 69 74 65 4C    ing,Write,WriteL
013AD0:  6E 2C 52 65 61 64 3B 0D 0A 46 52 4F 4D 20 09 4D    n,Read;..FROM .M
013AE0:  61 6B 65 45 64 69 74 73 20 49 4D 50 4F 52 54 20    akeEdits IMPORT 
013AF0:  50 6F 73 69 74 69 6F 6E 2C 52 65 74 72 6C 69 6E    Position,Retrlin
013B00:  65 2C 52 65 61 64 4E 65 78 74 43 68 61 72 2C 45    e,ReadNextChar,E
013B10:  72 72 6F 72 4C 69 73 74 2C 45 72 72 6F 72 43 6F    rrorList,ErrorCo
013B20:  75 6E 74 2C 4C 61 62 65 6C 4F 70 3B 0D 0A 46 52    unt,LabelOp;..FR
013B30:  4F 4D 09 45 64 69 74 43 6F 6E 74 20 49 4D 50 4F    OM.EditCont IMPO
013B40:  52 54 20 4C 65 66 74 4D 61 72 67 69 6E 2C 46 69    RT LeftMargin,Fi
013B50:  6C 65 73 2C 43 75 72 72 65 6E 74 57 69 6E 64 6F    les,CurrentWindo
013B60:  77 2C 43 75 72 72 65 6E 74 46 69 6C 65 2C 54 68    w,CurrentFile,Th
013B70:  69 73 78 2C 54 68 69 73 79 2C 0D 0A 09 09 09 63    isx,Thisy,.....c
013B80:  75 72 78 2C 63 75 72 79 2C 52 65 44 69 73 70 6C    urx,cury,ReDispl
013B90:  61 79 3B 0D 0A 46 52 4F 4D 20 09 49 6E 74 4C 6F    ay;..FROM .IntLo
013BA0:  67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E 44 3B    gic IMPORT IAND;
013BB0:  0D 0A 46 52 4F 4D 09 46 69 6C 65 73 20 49 4D 50    ..FROM.Files IMP
013BC0:  4F 52 54 20 4C 6F 6F 6B 75 70 2C 43 6C 6F 73 65    ORT Lookup,Close
013BD0:  2C 46 49 4C 45 2C 52 65 61 64 42 6C 6F 63 6B 3B    ,FILE,ReadBlock;
013BE0:  0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D 20 49 4D    ..FROM.SYSTEM IM
013BF0:  50 4F 52 54 20 41 44 52 3B 0D 0A 43 4F 4E 53 54    PORT ADR;..CONST
013C00:  4F 50 0D 0A 09 09 09 49 46 20 28 6D 6F 76 65 64    OP.....IF (moved
013C10:  3D 30 29 20 41 4E 44 20 28 6A 3C 3D 43 41 52 44    =0) AND (j<=CARD
013C20:  49 4E 41 4C 28 63 68 61 72 73 69 6E 29 29 20 54    INAL(charsin)) T
013C30:  48 45 4E 0D 0A 09 09 09 09 63 75 72 78 3A 3D 6C    HEN......curx:=l
013C40:  69 6E 65 70 6F 73 2D 4C 65 66 74 4D 61 72 67 3B    inepos-LeftMarg;
013C50:  0D 0A 09 09 09 09 63 75 72 79 3A 3D 69 2B 43 41    ......cury:=i+CA
013C60:  52 44 49 4E 41 4C 28 73 74 61 72 74 6C 69 6E 65    RDINAL(startline
013C70:  29 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09    )......END;.....
013C80:  49 4E 43 28 6A 29 3B 0D 0A 09 09 09 49 46 20 6A    INC(j);.....IF j
013C90:  3E 43 41 52 44 49 4E 41 4C 28 6C 65 6E 29 20 54    >CARDINAL(len) T
013CA0:  48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D 0A 0D    HEN EXIT END;...
013CB0:  0A 09 09 09 28 2A 63 68 65 63 6B 20 66 6F 72 20    ....(*check for 
013CC0:  63 75 72 73 6F 72 20 6C 69 6E 65 2A 29 0D 0A 0D    cursor line*)...
013CD0:  0A 09 09 09 52 65 61 64 4E 65 78 74 43 68 61 72    ....ReadNextChar
013CE0:  28 70 6F 73 2C 63 68 29 3B 0D 0A 09 09 09 49 46    (pos,ch);.....IF
013CF0:  20 63 68 3D 30 39 78 20 54 48 45 4E 20 0D 0A 09     ch=09x THEN ...
013D00:  09 09 09 52 45 50 45 41 54 0D 0A 09 09 09 09 09    ...REPEAT.......
013D10:  49 4E 43 28 6C 69 6E 65 70 6F 73 29 3B 0D 0A 09    INC(linepos);...
013D20:  09 09 09 09 49 46 20 28 6C 69 6E 65 70 6F 73 3E    ....IF (linepos>
013D30:  4C 65 66 74 4D 61 72 67 29 20 0D 0A 09 09 09 09    LeftMarg) ......
013D40:  09 41 4E 44 20 28 6C 69 6E 65 70 6F 73 3C 28 53    .AND (linepos<(S
013D50:  63 72 65 65 6E 57 69 64 74 68 2B 4C 65 66 74 4D    creenWidth+LeftM
013D60:  61 72 67 29 29 20 54 48 45 4E 20 0D 0A 09 09 09    arg)) THEN .....
013D70:  09 09 09 57 72 69 74 65 28 27 20 27 29 20 0D 0A    ...Write(' ') ..
013D80:  09 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 09    ......END;......
013D90:  09 55 4E 54 49 4C 20 49 41 4E 44 28 6C 69 6E 65    .UNTIL IAND(line
013DA0:  70 6F 73 2C 37 29 3D 30 3B 0D 0A 09 09 09 45 4C    pos,7)=0;.....EL
013DB0:  53 49 46 20 63 68 3D 45 4F 46 20 54 48 45 4E 20    SIF ch=EOF THEN 
013DC0:  45 58 49 54 0D 0A 09 09 09 45 4C 53 45 20 0D 0A    EXIT.....ELSE ..
013DD0:  09 09 09 09 49 4E 43 28 6C 69 6E 65 70 6F 73 29    ....INC(linepos)
013DE0:  3B 0D 0A 09 09 09 09 49 46 20 28 6C 69 6E 65 70    ;......IF (linep
013DF0:  6F 73 3E 4C 65 66 74 4D 61 72 67 29 0D 0A 09 09    os>LeftMarg)....
013E00:  09 45 4F 46 3D 31 61 78 3B 0D 0A 0D 0A 50 52 4F    .EOF=1ax;....PRO
013E10:  43 45 44 55 52 45 20 45 72 72 6F 72 4D 65 73 73    CEDURE ErrorMess
013E20:  61 67 65 28 73 31 2C 73 32 3A 41 52 52 41 59 20    age(s1,s2:ARRAY 
013E30:  4F 46 20 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09    OF CHAR);....(*.
013E40:  44 69 73 70 6C 61 79 20 65 72 72 6F 72 20 6D 65    Display error me
013E50:  73 73 61 67 65 20 61 74 20 62 6F 74 74 6F 6D 20    ssage at bottom 
013E60:  6F 66 20 73 63 72 65 65 6E 2A 29 0D 0A 56 41 52    of screen*)..VAR
013E70:  20 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47     i:INTEGER;..BEG
013E80:  49 4E 0D 0A 09 47 6F 74 6F 78 79 28 30 2C 53 63    IN...Gotoxy(0,Sc
013E90:  72 65 65 6E 44 65 70 74 68 2D 31 29 3B 0D 0A 09    reenDepth-1);...
013EA0:  53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 52 69    ScreenControl(Ri
013EB0:  6E 67 42 65 6C 6C 29 3B 0D 0A 09 53 63 72 65 65    ngBell);...Scree
013EC0:  6E 43 6F 6E 74 72 6F 6C 28 44 65 6C 45 6F 6C 29    nControl(DelEol)
013ED0:  3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28    ;...WriteString(
013EE0:  73 31 29 3B 57 72 69 74 65 53 74 72 69 6E 67 28    s1);WriteString(
013EF0:  73 32 29 3B 0D 0A 09 45 4E 44 20 45 72 72 6F 72    s2);...END Error
013F00:  4D 65 73 73 61 67 65 3B 0D 0A 50 52 4F 43 45 44    Message;..PROCED
013F10:  55 52 45 20 53 65 74 57 69 6E 64 6F 77 73 28 69    URE SetWindows(i
013F20:  3A 49 4E 54 45 47 45 52 29 3B 0D 0A 0D 0A 28 2A    :INTEGER);....(*
013F30:  09 73 65 74 20 6E 75 6D 62 65 72 20 6F 66 20 65    .set number of e
013F40:  64 69 74 20 77 69 6E 64 6F 77 73 20 69 6E 20 75    dit windows in u
013F50:  73 65 20 2D 20 79 6F 75 20 6D 75 73 74 20 72 65    se - you must re
013F60:  66 72 65 73 68 20 74 68 65 20 65 6E 74 69 72 65    fresh the entire
013F70:  0D 0A 09 73 63 72 65 65 6E 20 77 69 74 68 20 63    ...screen with c
013F80:  61 6C 6C 73 20 74 6F 20 44 69 73 70 6C 61 79 46    alls to DisplayF
013F90:  69 6C 65 20 61 66 74 65 72 20 61 20 63 61 6C 6C    ile after a call
013FA0:  20 74 6F 20 74 68 69 73 0D 0A 09 72 6F 75 74 69     to this...routi
013FB0:  6E 65 2A 29 0D 0A 56 41 52 09 6A 2C 6B 3A 43 41    ne*)..VAR.j,k:CA
013FC0:  52 44 49 4E 41 4C 3B 0D 0A 09 0D 0A 42 45 47 49    RDINAL;.....BEGI
013FD0:  4E 0D 0A 09 57 69 6E 64 6F 77 73 3A 3D 69 3B 0D    N...Windows:=i;.
013FE0:  0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28    ..ScreenControl(
013FF0:  43 6C 65 61 72 53 63 72 65 65 6E 29 3B 0D 0A 09    ClearScreen);...
014000:  09 09 41 4E 44 20 28 6C 69 6E 65 70 6F 73 3C 28    ..AND (linepos<(
014010:  53 63 72 65 65 6E 57 69 64 74 68 2B 4C 65 66 74    ScreenWidth+Left
014020:  4D 61 72 67 29 29 20 54 48 45 4E 20 0D 0A 09 09    Marg)) THEN ....
014030:  09 09 09 57 72 69 74 65 28 63 68 29 20 0D 0A 09    ...Write(ch) ...
014040:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 09 45 4E    ....END;......EN
014050:  44 3B 28 2A 49 46 20 63 68 3D 76 61 72 69 6F 75    D;(*IF ch=variou
014060:  73 20 74 68 69 6E 67 73 2A 29 0D 0A 09 09 09 45    s things*).....E
014070:  4E 44 20 28 2A 69 6E 6E 65 72 20 6C 6F 6F 70 2A    ND (*inner loop*
014080:  29 3B 0D 0A 09 09 49 4E 43 28 69 29 3B 0D 0A 09    );....INC(i);...
014090:  09 49 46 20 6C 69 6E 65 70 6F 73 3C 28 53 63 72    .IF linepos<(Scr
0140A0:  65 65 6E 57 69 64 74 68 2B 4C 65 66 74 4D 61 72    eenWidth+LeftMar
0140B0:  67 29 20 54 48 45 4E 20 0D 0A 09 09 09 53 63 72    g) THEN .....Scr
0140C0:  65 65 6E 43 6F 6E 74 72 6F 6C 28 44 65 6C 45 6F    eenControl(DelEo
0140D0:  6C 29 20 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    l) .....END;....
0140E0:  49 46 20 69 3D 4C 69 6E 65 73 50 65 72 57 69 6E    IF i=LinesPerWin
0140F0:  64 6F 77 20 54 48 45 4E 20 45 58 49 54 0D 0A 09    dow THEN EXIT...
014100:  09 45 4C 53 45 20 0D 0A 09 09 09 57 72 69 74 65    .ELSE .....Write
014110:  4C 6E 3B 0D 0A 09 09 09 6C 69 6E 65 70 6F 73 3A    Ln;.....linepos:
014120:  3D 30 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    =0;.....END;....
014130:  49 4E 43 28 6D 6F 76 65 64 29 3B 09 0D 0A 09 09    INC(moved);.....
014140:  52 65 74 72 6C 69 6E 65 28 66 2C 6C 65 6E 2C 69    Retrline(f,len,i
014150:  63 2C 70 6F 73 2C 6D 6F 76 65 64 6F 6E 65 2C 31    c,pos,movedone,1
014160:  29 3B 0D 0A 09 09 49 46 20 6D 6F 76 65 64 6F 6E    );....IF movedon
014170:  65 3D 30 20 54 48 45 4E 0D 0A 09 09 09 46 4F 52    e=0 THEN.....FOR
014180:  20 69 3A 3D 69 2B 31 20 54 4F 20 4C 69 6E 65 73     i:=i+1 TO Lines
014190:  50 65 72 57 69 6E 64 6F 77 20 44 4F 0D 0A 09 09    PerWindow DO....
0141A0:  09 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28    ..ScreenControl(
0141B0:  44 65 6C 45 6F 6C 29 3B 0D 0A 09 09 09 09 57 72    DelEol);......Wr
0141C0:  69 74 65 4C 6E 3B 0D 0A 09 09 09 09 45 4E 44 3B    iteLn;......END;
0141D0:  0D 0A 09 09 09 45 58 49 54 0D 0A 09 09 09 45 4E    .....EXIT.....EN
0141E0:  44 0D 0A 09 09 45 4E 44 3B 28 2A 4C 4F 4F 50 2A    D....END;(*LOOP*
0141F0:  29 0D 0A 09 45 4E 44 20 44 69 73 70 6C 61 79 46    )...END DisplayF
014200:  49 46 20 57 69 6E 64 6F 77 73 3E 31 20 54 48 45    IF Windows>1 THE
014210:  4E 0D 0A 09 09 4C 69 6E 65 73 50 65 72 57 69 6E    N....LinesPerWin
014220:  64 6F 77 3A 3D 28 53 63 72 65 65 6E 44 65 70 74    dow:=(ScreenDept
014230:  68 2D 57 69 6E 64 6F 77 73 29 20 44 49 56 20 57    h-Windows) DIV W
014240:  69 6E 64 6F 77 73 3B 0D 0A 09 45 4C 53 45 09 4C    indows;...ELSE.L
014250:  69 6E 65 73 50 65 72 57 69 6E 64 6F 77 3A 3D 53    inesPerWindow:=S
014260:  63 72 65 65 6E 44 65 70 74 68 2D 31 20 45 4E 44    creenDepth-1 END
014270:  3B 0D 0A 09 46 4F 52 20 6A 3A 3D 32 20 54 4F 20    ;...FOR j:=2 TO 
014280:  57 69 6E 64 6F 77 73 20 44 4F 0D 0A 09 09 47 6F    Windows DO....Go
014290:  74 6F 78 79 28 30 2C 28 4C 69 6E 65 73 50 65 72    toxy(0,(LinesPer
0142A0:  57 69 6E 64 6F 77 2B 31 29 2A 28 6A 2D 31 29 2D    Window+1)*(j-1)-
0142B0:  31 29 3B 0D 0A 09 09 53 63 72 65 65 6E 43 6F 6E    1);....ScreenCon
0142C0:  74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68 29    trol(StartGraph)
0142D0:  3B 0D 0A 09 09 46 4F 52 20 6B 3A 3D 31 20 54 4F    ;....FOR k:=1 TO
0142E0:  20 53 63 72 65 65 6E 57 69 64 74 68 20 44 4F 20     ScreenWidth DO 
0142F0:  0D 0A 09 09 09 53 63 72 65 65 6E 43 6F 6E 74 72    .....ScreenContr
014300:  6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 3B 0D    ol(Horizontal);.
014310:  0A 09 09 09 45 4E 44 3B 0D 0A 09 09 53 63 72 65    ....END;....Scre
014320:  65 6E 43 6F 6E 74 72 6F 6C 28 45 6E 64 47 72 61    enControl(EndGra
014330:  70 68 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45    ph);....END;...E
014340:  4E 44 20 53 65 74 57 69 6E 64 6F 77 73 3B 0D 0A    ND SetWindows;..
014350:  09 28 2A 70 75 74 20 61 20 6C 69 6E 65 20 62 65    .(*put a line be
014360:  74 77 65 65 6E 20 74 68 65 20 77 69 6E 64 6F 77    tween the window
014370:  73 2A 29 0D 0A 0D 0A 56 41 52 09 63 68 3A 43 48    s*)....VAR.ch:CH
014380:  41 52 3B 0D 0A 09 70 6F 73 3A 50 6F 73 69 74 69    AR;...pos:Positi
014390:  6F 6E 3B 0D 0A 09 63 68 61 72 73 69 6E 2C 69 63    on;...charsin,ic
0143A0:  3A 49 4E 54 45 47 45 52 3B 0D 0A 09 6C 65 6E 2C    :INTEGER;...len,
0143B0:  6D 6F 76 65 64 3A 49 4E 54 45 47 45 52 3B 0D 0A    moved:INTEGER;..
0143C0:  09 6C 69 6E 65 70 6F 73 2C 4C 65 66 74 4D 61 72    .linepos,LeftMar
0143D0:  67 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 50 52 4F    g:CARDINAL;..PRO
0143E0:  43 45 44 55 52 45 20 53 65 74 4C 65 66 74 4D 61    CEDURE SetLeftMa
0143F0:  72 67 28 66 3A 45 64 69 74 46 69 6C 65 3B 77 69    rg(f:EditFile;wi
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:  69 6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    ile;..PROCEDURE 
014510:  44 69 73 70 6C 61 79 45 72 72 6F 72 3B 0D 0A 0D    DisplayError;...
014520:  0A 28 2A 09 54 68 65 20 65 72 72 6F 72 20 6D 65    .(*.The error me
014530:  73 73 61 67 65 20 66 69 6C 65 20 63 6F 6E 74 61    ssage file conta
014540:  69 6E 73 20 74 68 65 20 6D 65 73 73 61 67 65 73    ins the messages
014550:  2C 20 0D 0A 0D 0A 09 54 68 65 20 66 69 72 73 74    , .....The first
014560:  20 74 77 6F 20 62 6C 6F 63 6B 73 20 67 69 76 65     two blocks give
014570:  20 74 68 65 20 6C 65 6E 67 74 68 73 20 6F 66 20     the lengths of 
014580:  74 68 65 20 65 72 72 6F 72 20 6D 65 73 73 61 67    the error messag
014590:  65 73 0D 0A 09 54 68 65 20 72 65 6D 61 69 6E 69    es...The remaini
0145A0:  6E 67 20 62 6C 6F 63 6B 73 20 67 69 76 65 20 74    ng blocks give t
0145B0:  68 65 20 74 65 78 74 20 6F 66 20 74 68 65 20 65    he text of the e
0145C0:  72 72 6F 72 20 6D 65 73 73 61 67 65 73 20 2A 29    rror messages *)
0145D0:  0D 0A 54 59 50 45 09 54 65 78 74 3D 41 52 52 41    ..TYPE.Text=ARRA
0145E0:  59 5B 30 2E 2E 36 33 5D 20 4F 46 20 43 48 41 52    Y[0..63] OF CHAR
0145F0:  3B 0D 0A 0D 0A 56 41 52 09 66 3A 46 49 4C 45 3B    ;....VAR.f:FILE;
014600:  09 09 09 28 2A 46 49 4C 45 20 69 73 20 61 20 74    ...(*FILE is a t
014610:  79 70 65 20 65 78 70 6F 72 74 65 64 20 66 72 6F    ype exported fro
014620:  6D 20 74 68 65 20 6D 6F 64 75 6C 65 20 46 69 6C    m the module Fil
014630:  65 73 2A 29 0D 0A 0D 0A 09 62 3A 41 52 52 41 59    es*).....b:ARRAY
014640:  20 5B 30 2E 2E 31 32 37 5D 20 4F 46 20 43 48 41     [0..127] OF CHA
014650:  52 3B 0D 0A 09 69 2C 6A 2C 6B 2C 4C 65 6E 67 74    R;...i,j,k,Lengt
014660:  68 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 74 3A    h:CARDINAL;...t:
014670:  54 65 78 74 3B 0D 0A 09 45 72 72 6F 72 4E 75 6D    Text;...ErrorNum
014680:  62 65 72 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09    ber:CARDINAL;...
014690:  72 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B 0D 0A    reply:INTEGER;..
0146A0:  09 62 6C 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 50 52    .bl:BOOLEAN;..PR
0146B0:  4F 43 45 44 55 52 45 20 43 6F 75 6E 74 28 6B 3A    OCEDURE Count(k:
0146C0:  43 41 52 44 49 4E 41 4C 29 3A 43 41 52 44 49 4E    CARDINAL):CARDIN
0146D0:  41 4C 3B 0D 0A 56 41 52 09 69 3A 43 41 52 44 49    AL;..VAR.i:CARDI
0146E0:  4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 69 3A    NAL;..BEGIN...i:
0146F0:  3D 30 3B 0D 0A 09 49 46 20 6B 3D 30 20 54 48 45    =0;...IF k=0 THE
014700:  78 2C 54 68 69 73 79 29 3B 2A 29 0D 0A 09 47 6F    x,Thisy);*)...Go
014710:  74 6F 78 79 28 54 68 69 73 78 2C 54 68 69 73 79    toxy(Thisx,Thisy
014720:  29 3B 0D 0A 09 63 75 72 78 5B 43 75 72 72 65 6E    );...curx[Curren
014730:  74 57 69 6E 64 6F 77 5D 3A 3D 54 68 69 73 78 3B    tWindow]:=Thisx;
014740:  0D 0A 09 63 75 72 79 5B 43 75 72 72 65 6E 74 57    ...cury[CurrentW
014750:  69 6E 64 6F 77 5D 3A 3D 54 68 69 73 79 3B 0D 0A    indow]:=Thisy;..
014760:  09 45 4E 44 20 44 69 73 70 6C 61 79 45 72 72 6F    .END DisplayErro
014770:  72 3B 09 0D 0A 42 45 47 49 4E 0D 0A 09 57 69 6E    r;...BEGIN...Win
014780:  64 6F 77 73 3A 3D 30 3B 0D 0A 09 45 4E 44 20 45    dows:=0;...END E
014790:  64 69 74 44 69 73 70 6C 61 79 2E 0D 0A 1A 1A 1A    ditDisplay......
0147A0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0147B0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0147C0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0147D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0147E0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 00 00 00 00 00 00 00    ................
0147F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
014800:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
014810:  00 00 00 00 00 00 00 00 00 00 00 00 00 1A 1A 1A    ................
014820:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
014830:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
014840:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
014850:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
014860:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
014870:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
014880:  28 66 2C 6C 65 6E 2C 63 68 61 72 73 69 6E 2C 70    (f,len,charsin,p
014890:  6F 73 2C 6D 6F 76 65 64 2C 30 29 3B 0D 0A 09 6C    os,moved,0);...l
0148A0:  69 6E 65 70 6F 73 3A 3D 30 3B 0D 0A 09 46 4F 52    inepos:=0;...FOR
0148B0:  20 69 63 3A 3D 30 20 54 4F 20 63 68 61 72 73 69     ic:=0 TO charsi
0148C0:  6E 20 44 4F 0D 0A 09 09 52 65 61 64 4E 65 78 74    n DO....ReadNext
0148D0:  43 68 61 72 28 70 6F 73 2C 63 68 29 3B 0D 0A 09    Char(pos,ch);...
0148E0:  09 49 46 20 63 68 3D 30 39 78 20 54 48 45 4E 20    .IF ch=09x THEN 
0148F0:  6C 69 6E 65 70 6F 73 3A 3D 49 41 4E 44 28 6C 69    linepos:=IAND(li
014900:  4E 20 52 45 54 55 52 4E 20 30 20 45 4E 44 3B 0D    N RETURN 0 END;.
014910:  0A 09 46 4F 52 20 6B 3A 3D 6B 2D 31 20 54 4F 20    ..FOR k:=k-1 TO 
014920:  30 20 42 59 20 2D 31 20 44 4F 0D 0A 09 09 69 3A    0 BY -1 DO....i:
014930:  3D 69 2B 4F 52 44 28 62 5B 6B 5D 29 3B 0D 0A 09    =i+ORD(b[k]);...
014940:  09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 69    .END;...RETURN i
014950:  0D 0A 09 45 4E 44 20 43 6F 75 6E 74 3B 0D 0A 50    ...END Count;..P
014960:  52 4F 43 45 44 55 52 45 20 57 72 69 74 65 43 61    ROCEDURE WriteCa
014970:  72 64 28 69 3A 43 41 52 44 49 4E 41 4C 29 3B 0D    rd(i:CARDINAL);.
014980:  0A 56 41 52 09 74 3A 41 52 52 41 59 5B 30 2E 2E    .VAR.t:ARRAY[0..
014990:  33 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 6A 2C    3] OF CHAR;...j,
0149A0:  6B 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47    k:CARDINAL;..BEG
0149B0:  49 4E 0D 0A 09 6B 3A 3D 48 49 47 48 28 74 29 3B    IN...k:=HIGH(t);
0149C0:  0D 0A 09 57 48 49 4C 45 20 69 3C 3E 30 20 44 4F    ...WHILE i<>0 DO
0149D0:  0D 0A 09 09 6A 3A 3D 69 20 44 49 56 20 31 30 3B    ....j:=i DIV 10;
0149E0:  0D 0A 09 09 74 5B 6B 5D 3A 3D 43 48 52 28 4F 52    ....t[k]:=CHR(OR
0149F0:  44 28 27 30 27 29 2B 69 2D 31 30 2A 6A 29 3B 0D    D('0')+i-10*j);.
014A00:  0A 09 09 69 3A 3D 6A 3B 0D 0A 09 09 44 45 43 28    ...i:=j;....DEC(
014A10:  6B 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 46 4F    k);....END;...FO
014A20:  52 20 6B 3A 3D 6B 2B 31 20 54 4F 20 48 49 47 48    R k:=k+1 TO HIGH
014A30:  28 74 29 20 44 4F 20 57 72 69 74 65 28 74 5B 6B    (t) DO Write(t[k
014A40:  5D 29 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 57 72    ]) END;...END Wr
014A50:  69 74 65 43 61 72 64 3B 0D 0A 42 45 47 49 4E 0D    iteCard;..BEGIN.
014A60:  0A 09 49 46 20 45 72 72 6F 72 4F 72 64 69 6E 61    ..IF ErrorOrdina
014A70:  6C 3E 3D 45 72 72 6F 72 43 6F 75 6E 74 20 54 48    l>=ErrorCount TH
014A80:  45 4E 20 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A    EN RETURN END;..
014A90:  09 47 6F 74 6F 78 79 28 30 2C 53 63 72 65 65 6E    .Gotoxy(0,Screen
014AA0:  44 65 70 74 68 2D 31 29 3B 0D 0A 09 45 72 72 6F    Depth-1);...Erro
014AB0:  72 4E 75 6D 62 65 72 3A 3D 45 72 72 6F 72 4C 69    rNumber:=ErrorLi
014AC0:  73 74 5B 45 72 72 6F 72 4F 72 64 69 6E 61 6C 5D    st[ErrorOrdinal]
014AD0:  2E 45 72 72 6F 72 4E 75 6D 3B 0D 0A 09 53 63 72    .ErrorNum;...Scr
014AE0:  65 65 6E 43 6F 6E 74 72 6F 6C 28 44 65 6C 45 6F    eenControl(DelEo
014AF0:  6C 29 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E    l);...WriteStrin
014B00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014B10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014B20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014B30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014B40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014B50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014B60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014B70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014B80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014B90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014BA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014BB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014BC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014BD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014BE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014BF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014C00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014C10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014C20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014C30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014C40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014C50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014C60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014C70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014C80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014C90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014CA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014CB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014CC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014CD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014CE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014CF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
014D00:  67 28 27 45 72 72 6F 72 20 27 29 3B 0D 0A 09 57    g('Error ');...W
014D10:  72 69 74 65 43 61 72 64 28 45 72 72 6F 72 4E 75    riteCard(ErrorNu
014D20:  6D 62 65 72 29 3B 0D 0A 09 57 72 69 74 65 53 74    mber);...WriteSt
014D30:  72 69 6E 67 28 27 28 27 29 3B 57 72 69 74 65 43    ring('(');WriteC
014D40:  61 72 64 28 45 72 72 6F 72 4F 72 64 69 6E 61 6C    ard(ErrorOrdinal
014D50:  2B 31 29 3B 0D 0A 09 57 72 69 74 65 53 74 72 69    +1);...WriteStri
014D60:  6E 67 28 27 20 6F 66 20 27 29 3B 57 72 69 74 65    ng(' of ');Write
014D70:  43 61 72 64 28 45 72 72 6F 72 43 6F 75 6E 74 29    Card(ErrorCount)
014D80:  3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28    ;...WriteString(
014D90:  27 29 20 3A 27 29 3B 0D 0A 09 4C 6F 6F 6B 75 70    ') :');...Lookup
014DA0:  28 66 2C 27 45 52 52 4D 53 47 2E 44 41 54 20 27    (f,'ERRMSG.DAT '
014DB0:  2C 72 65 70 6C 79 29 3B 0D 0A 0D 0A 09 28 2A 4C    ,reply);.....(*L
014DC0:  6F 6F 6B 75 70 20 6F 70 65 6E 73 20 74 68 65 20    ookup opens the 
014DD0:  66 69 6C 65 20 66 6F 72 20 69 6E 70 75 74 2F 6F    file for input/o
014DE0:  75 74 70 75 74 0D 0A 09 20 20 72 65 70 6C 79 20    utput...  reply 
014DF0:  72 65 74 75 72 6E 73 20 7A 65 72 6F 20 69 66 20    returns zero if 
014E00:  6E 6F 20 66 69 6C 65 20 69 73 20 66 6F 75 6E 64    no file is found
014E10:  0D 0A 09 20 20 61 20 64 65 76 69 63 65 20 6E 61    ...  a device na
014E20:  6D 65 20 63 61 6E 20 62 65 20 75 73 65 64 20 69    me can be used i
014E30:  6E 20 66 72 6F 6E 74 20 6F 66 20 74 68 65 20 66    n front of the f
014E40:  69 6C 65 20 6E 61 6D 65 0D 0A 09 20 49 6E 20 66    ile name... In f
014E50:  61 63 74 2C 20 79 6F 75 20 63 61 6E 20 75 73 65    act, you can use
014E60:  20 61 20 6E 6F 6E 2D 64 69 73 63 20 66 69 6C 65     a non-disc file
014E70:  20 6E 61 6D 65 20 28 65 67 20 50 55 4E 3A 20 6F     name (eg PUN: o
014E80:  72 20 43 4F 4E 3A 29 0D 0A 09 20 62 75 74 20 69    r CON:)... but i
014E90:  66 20 79 6F 75 20 64 6F 20 74 68 69 73 2C 20 79    f you do this, y
014EA0:  6F 75 20 6D 75 73 74 20 64 6F 20 79 6F 75 72 20    ou must do your 
014EB0:  49 4F 20 74 68 72 6F 75 67 68 20 74 68 65 20 6D    IO through the m
014EC0:  6F 64 75 6C 65 0D 0A 09 20 53 74 72 65 61 6D 73    odule... Streams
014ED0:  20 28 6F 72 20 49 6E 4F 75 74 2C 20 77 68 69 63     (or InOut, whic
014EE0:  68 20 63 61 6C 6C 73 20 73 74 72 65 61 6D 73 29    h calls streams)
014EF0:  2C 20 61 73 20 74 68 65 20 49 4F 20 74 6F 20 74    , as the IO to t
014F00:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
014F10:  45 20 45 64 69 74 53 74 61 74 75 73 3B 0D 0A 0D    E EditStatus;...
014F20:  0A 28 2A 09 53 61 76 65 2F 72 65 74 75 72 6E 20    .(*.Save/return 
014F30:  65 64 69 74 20 73 74 61 74 75 73 20 66 6F 72 20    edit status for 
014F40:  61 20 66 69 6C 65 0D 0A 0D 0A 09 54 68 65 20 66    a file.....The f
014F50:  69 6C 65 20 45 44 49 54 53 54 41 54 2E 44 41 54    ile EDITSTAT.DAT
014F60:  20 6F 6E 20 74 68 65 20 64 65 66 61 75 6C 74 20     on the default 
014F70:  64 72 69 76 65 20 69 73 20 61 6C 77 61 79 73 20    drive is always 
014F80:  75 73 65 64 0D 0A 09 66 6F 72 20 65 64 69 74 20    used...for edit 
014F90:  73 74 61 74 69 69 2A 29 0D 0A 46 52 4F 4D 20 46    statii*)..FROM F
014FA0:  69 6C 65 73 20 20 49 4D 50 4F 52 54 20 46 49 4C    iles  IMPORT FIL
014FB0:  45 3B 0D 0A 46 52 4F 4D 09 43 50 4D 20 49 4D 50    E;..FROM.CPM IMP
014FC0:  4F 52 54 20 61 6C 66 61 2C 65 78 74 65 6E 3B 0D    ORT alfa,exten;.
014FD0:  0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 50 6F    .PROCEDURE GetPo
014FE0:  73 69 74 69 6F 6E 28 46 6E 3A 46 49 4C 45 29 3A    sition(Fn:FILE):
014FF0:  43 41 52 44 49 4E 41 4C 3B 0D 0A 0D 0A 28 2A 09    CARDINAL;....(*.
015000:  67 65 74 20 66 69 6C 65 20 70 6F 73 69 74 69 6F    get file positio
015010:  6E 20 28 63 68 61 72 61 63 74 65 72 20 6E 75 6D    n (character num
015020:  62 65 72 29 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44    ber)*)....PROCED
015030:  55 52 45 20 53 65 74 50 6F 73 69 74 69 6F 6E 28    URE SetPosition(
015040:  46 6E 3A 46 49 4C 45 3B 70 6F 73 3A 43 41 52 44    Fn:FILE;pos:CARD
015050:  49 4E 41 4C 29 3B 0D 0A 0D 0A 28 2A 09 73 65 74    INAL);....(*.set
015060:  20 66 69 6C 65 20 70 6F 73 69 74 69 6F 6E 2A 29     file position*)
015070:  0D 0A 45 4E 44 20 45 64 69 74 53 74 61 74 75 73    ..END EditStatus
015080:  2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
015090:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0150A0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0150B0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0150C0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0150D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0150E0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0150F0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
015100:  68 65 0D 0A 09 20 73 65 72 69 61 6C 20 64 65 76    he... serial dev
015110:  69 63 65 73 20 69 73 20 70 65 72 66 6F 72 6D 65    ices is performe
015120:  64 20 62 79 20 74 68 61 74 20 6D 6F 64 75 6C 65    d by that module
015130:  20 28 69 74 20 63 61 6C 6C 73 20 46 69 6C 65 73     (it calls Files
015140:  0D 0A 09 20 74 6F 20 64 6F 20 49 4F 20 74 6F 20    ... to do IO to 
015150:  64 69 73 63 20 64 65 76 69 63 65 73 29 0D 0A 2A    disc devices)..*
015160:  29 0D 0A 09 49 46 20 72 65 70 6C 79 3D 30 20 54    )...IF reply=0 T
015170:  48 45 4E 09 09 28 2A 4F 4B 20 2D 20 66 69 6C 65    HEN..(*OK - file
015180:  20 66 6F 75 6E 64 2A 29 0D 0A 09 09 0D 0A 0D 0A     found*)........
015190:  09 09 28 2A 72 65 61 64 20 74 68 65 20 66 69 72    ..(*read the fir
0151A0:  73 74 20 31 20 6F 72 20 74 77 6F 20 62 6C 6F 63    st 1 or two bloc
0151B0:  6B 73 20 6F 66 20 74 68 65 20 65 72 72 6F 72 20    ks of the error 
0151C0:  0D 0A 09 09 20 20 6D 65 73 73 61 67 65 20 66 69    ....  message fi
0151D0:  6C 65 2C 20 63 6F 75 6E 74 69 6E 20 74 68 65 20    le, countin the 
0151E0:  63 68 61 72 61 63 74 65 72 73 20 70 72 65 63 65    characters prece
0151F0:  64 69 6E 67 20 74 68 65 0D 0A 09 09 20 20 65 72    ding the....  er
015200:  72 6F 72 20 65 6D 73 73 61 67 65 20 77 65 20 77    ror emssage we w
015210:  61 6E 74 20 2A 29 0D 0A 09 09 52 65 61 64 42 6C    ant *)....ReadBl
015220:  6F 63 6B 28 66 2C 41 44 52 28 62 29 2C 30 2C 31    ock(f,ADR(b),0,1
015230:  32 38 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 6A 3A    28,reply);....j:
015240:  3D 45 72 72 6F 72 4E 75 6D 62 65 72 3B 0D 0A 09    =ErrorNumber;...
015250:  09 49 46 20 45 72 72 6F 72 4E 75 6D 62 65 72 3E    .IF ErrorNumber>
015260:  31 32 38 20 54 48 45 4E 0D 0A 09 09 09 69 3A 3D    128 THEN.....i:=
015270:  43 6F 75 6E 74 28 31 32 38 29 3B 0D 0A 09 09 09    Count(128);.....
015280:  52 65 61 64 42 6C 6F 63 6B 28 66 2C 41 44 52 28    ReadBlock(f,ADR(
015290:  62 29 2C 31 2C 31 32 38 2C 72 65 70 6C 79 29 3B    b),1,128,reply);
0152A0:  0D 0A 09 09 09 6A 3A 3D 6A 2D 31 32 38 0D 0A 09    .....j:=j-128...
0152B0:  09 45 4C 53 45 0D 0A 09 09 09 69 3A 3D 30 3B 0D    .ELSE.....i:=0;.
0152C0:  0A 09 09 09 45 4E 44 3B 0D 0A 09 09 69 3A 3D 69    ....END;....i:=i
0152D0:  2B 43 6F 75 6E 74 28 6A 2D 31 29 3B 0D 0A 09 09    +Count(j-1);....
0152E0:  4C 65 6E 67 74 68 3A 3D 4F 52 44 28 62 5B 6A 2D    Length:=ORD(b[j-
0152F0:  31 5D 29 3B 0D 0A 09 09 6A 3A 3D 69 20 44 49 56    1]);....j:=i DIV
015300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015400:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015410:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015420:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015430:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015440:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015450:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015460:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015470:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015480:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015490:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015500:  20 31 32 38 3B 20 28 2A 62 6C 6F 63 6B 20 74 6F     128; (*block to
015510:  20 72 65 61 64 2A 29 0D 0A 09 09 69 3A 3D 69 20     read*)....i:=i 
015520:  2D 20 31 32 38 2A 6A 3B 20 28 2A 6F 66 66 73 65    - 128*j; (*offse
015530:  74 20 6F 66 20 66 69 72 73 74 20 63 68 61 72 61    t of first chara
015540:  63 74 65 72 20 69 6E 20 62 6C 6F 63 6B 2A 29 0D    cter in block*).
015550:  0A 09 09 52 65 61 64 42 6C 6F 63 6B 28 66 2C 41    ...ReadBlock(f,A
015560:  44 52 28 62 29 2C 6A 2B 32 2C 31 32 38 2C 72 65    DR(b),j+2,128,re
015570:  70 6C 79 29 3B 0D 0A 09 09 46 4F 52 20 6B 3A 3D    ply);....FOR k:=
015580:  30 20 54 4F 20 4C 65 6E 67 74 68 2D 31 20 44 4F    0 TO Length-1 DO
015590:  0D 0A 09 09 09 49 46 20 69 3D 31 32 38 20 54 48    .....IF i=128 TH
0155A0:  45 4E 20 0D 0A 09 09 09 09 49 4E 43 28 6A 29 3B    EN ......INC(j);
0155B0:  0D 0A 09 09 09 09 52 65 61 64 42 6C 6F 63 6B 28    ......ReadBlock(
0155C0:  66 2C 41 44 52 28 62 29 2C 6A 2B 32 2C 31 32 38    f,ADR(b),j+2,128
0155D0:  2C 72 65 70 6C 79 29 20 0D 0A 09 09 09 09 69 3A    ,reply) ......i:
0155E0:  3D 30 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09    =0;......END;...
0155F0:  09 09 74 5B 6B 5D 3A 3D 62 5B 69 5D 3B 0D 0A 09    ..t[k]:=b[i];...
015600:  09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 09 45 4E    ..INC(i);.....EN
015610:  44 3B 0D 0A 09 09 74 5B 4C 65 6E 67 74 68 5D 3A    D;....t[Length]:
015620:  3D 30 63 3B 0D 0A 09 09 57 72 69 74 65 53 74 72    =0c;....WriteStr
015630:  69 6E 67 28 74 29 3B 0D 0A 09 45 4C 53 45 0D 0A    ing(t);...ELSE..
015640:  09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20    ..WriteString(' 
015650:  43 6F 75 6C 64 20 6E 6F 74 20 6F 70 65 6E 20 65    Could not open e
015660:  72 72 6F 72 20 6D 65 73 73 61 67 65 73 20 66 69    rror messages fi
015670:  6C 65 27 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    le');....END;...
015680:  62 6C 3A 3D 4C 61 62 65 6C 4F 70 28 46 69 6C 65    bl:=LabelOp(File
015690:  73 5B 43 75 72 72 65 6E 74 46 69 6C 65 5D 2C 46    s[CurrentFile],F
0156A0:  41 4C 53 45 2C 43 48 52 28 45 72 72 6F 72 4F 72    ALSE,CHR(ErrorOr
0156B0:  64 69 6E 61 6C 2B 30 62 30 68 29 29 3B 0D 0A 09    dinal+0b0h));...
0156C0:  52 65 44 69 73 70 6C 61 79 3B 0D 0A 28 2A 09 44    ReDisplay;..(*.D
0156D0:  69 73 70 6C 61 79 46 69 6C 65 28 46 69 6C 65 73    isplayFile(Files
0156E0:  5B 43 75 72 72 65 6E 74 46 69 6C 65 5D 2C 43 75    [CurrentFile],Cu
0156F0:  72 72 65 6E 74 57 69 6E 64 6F 77 2C 54 68 69 73    rrentWindow,This
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:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
015810:  4F 44 55 4C 45 20 45 64 69 74 53 74 61 74 75 73    ODULE EditStatus
015820:  3B 0D 0A 0D 0A 28 2A 09 53 61 76 65 2F 72 65 74    ;....(*.Save/ret
015830:  75 72 6E 20 65 64 69 74 20 73 74 61 74 75 73 20    urn edit status 
015840:  66 6F 72 20 61 20 66 69 6C 65 0D 0A 0D 0A 09 54    for a file.....T
015850:  68 65 20 66 69 6C 65 20 45 44 49 54 53 54 41 54    he file EDITSTAT
015860:  2E 44 41 54 20 6F 6E 20 74 68 65 20 64 65 66 61    .DAT on the defa
015870:  75 6C 74 20 64 72 69 76 65 20 69 73 20 61 6C 77    ult drive is alw
015880:  61 79 73 20 75 73 65 64 0D 0A 09 66 6F 72 20 65    ays used...for e
015890:  64 69 74 20 73 74 61 74 69 69 2A 29 0D 0A 46 52    dit statii*)..FR
0158A0:  4F 4D 20 46 69 6C 65 73 20 49 4D 50 4F 52 54 20    OM Files IMPORT 
0158B0:  4C 6F 6F 6B 75 70 2C 43 72 65 61 74 65 2C 43 6C    Lookup,Create,Cl
0158C0:  6F 73 65 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B    ose,SeqReadBlock
0158D0:  2C 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 53    ,SeqWriteBlock,S
0158E0:  65 74 42 6C 6F 63 6B 2C 0D 0A 09 09 43 6F 6E 76    etBlock,....Conv
0158F0:  65 72 74 46 69 6C 65 4E 61 6D 65 3B 0D 0A 46 52    ertFileName;..FR
015900:  4F 4D 20 53 63 72 65 65 6E 49 4F 20 49 4D 50 4F    OM ScreenIO IMPO
015910:  52 54 20 47 6F 74 6F 78 79 2C 53 63 72 65 65 6E    RT Gotoxy,Screen
015920:  44 65 70 74 68 3B 0D 0A 46 52 4F 4D 20 53 59 53    Depth;..FROM SYS
015930:  54 45 4D 20 49 4D 50 4F 52 54 20 41 44 52 2C 54    TEM IMPORT ADR,T
015940:  53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 54 65 72 6D    SIZE;..FROM Term
015950:  69 6E 61 6C 20 49 4D 50 4F 52 54 20 57 72 69 74    inal IMPORT Writ
015960:  65 53 74 72 69 6E 67 3B 0D 0A 54 59 50 45 09 46    eString;..TYPE.F
015970:  69 6C 65 52 65 63 3D 52 45 43 4F 52 44 0D 0A 09    ileRec=RECORD...
015980:  09 46 69 6C 65 66 6E 3A 61 6C 66 61 3B 0D 0A 09    .Filefn:alfa;...
015990:  09 46 69 6C 65 66 74 3A 65 78 74 65 6E 3B 0D 0A    .Fileft:exten;..
0159A0:  09 09 46 69 6C 65 50 6F 73 3A 43 41 52 44 49 4E    ..FilePos:CARDIN
0159B0:  41 4C 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 43    AL;....END;....C
0159C0:  4F 4E 53 54 09 42 79 74 65 73 50 65 72 42 6C 6F    ONST.BytesPerBlo
0159D0:  63 6B 3D 31 32 38 3B 09 28 2A 42 79 74 65 73 20    ck=128;.(*Bytes 
0159E0:  70 65 72 20 64 69 73 63 20 62 6C 6F 63 6B 2A 29    per disc block*)
0159F0:  0D 0A 09 45 6E 74 72 69 65 73 50 65 72 42 6C 6F    ...EntriesPerBlo
015A00:  61 6E 20 62 65 20 6F 70 65 6E 65 64 2A 29 0D 0A    an be opened*)..
015A10:  09 4C 6F 6F 6B 75 70 28 64 61 74 66 69 6C 65 2C    .Lookup(datfile,
015A20:  27 45 44 49 54 53 54 41 54 2E 44 41 54 20 27 2C    'EDITSTAT.DAT ',
015A30:  72 65 70 6C 79 29 3B 0D 0A 09 49 46 20 72 65 70    reply);...IF rep
015A40:  6C 79 3C 3E 30 20 54 48 45 4E 0D 0A 09 09 43 72    ly<>0 THEN....Cr
015A50:  65 61 74 65 28 64 61 74 66 69 6C 65 2C 27 45 44    eate(datfile,'ED
015A60:  49 54 53 54 41 54 2E 44 41 54 27 2C 72 65 70 6C    ITSTAT.DAT',repl
015A70:  79 29 3B 0D 0A 09 09 49 46 20 72 65 70 6C 79 3C    y);....IF reply<
015A80:  3E 30 20 54 48 45 4E 20 0D 0A 09 09 09 47 6F 74    >0 THEN .....Got
015A90:  6F 78 79 28 30 2C 53 63 72 65 65 6E 44 65 70 74    oxy(0,ScreenDept
015AA0:  68 2D 31 29 3B 0D 0A 09 09 09 57 72 69 74 65 53    h-1);.....WriteS
015AB0:  74 72 69 6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F    tring(' Could no
015AC0:  74 20 6F 70 65 6E 20 73 74 61 74 75 73 20 66 69    t open status fi
015AD0:  6C 65 27 29 3B 0D 0A 09 09 09 6F 70 65 6E 65 64    le');.....opened
015AE0:  3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 09 45 4E 44    :=FALSE;.....END
015AF0:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 42 6C 6F 63    ;....END;...Bloc
015B00:  6B 4E 6F 3A 3D 36 30 30 30 30 3B 09 28 2A 73 65    kNo:=60000;.(*se
015B10:  74 20 69 6D 70 6F 73 73 69 62 6C 79 20 62 69 67    t impossibly big
015B20:  2A 29 0D 0A 09 0D 0A 09 45 4E 44 20 45 64 69 74    *)......END Edit
015B30:  53 74 61 74 75 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A    Status..........
015B40:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
015B50:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
015B60:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
015B70:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
015B80:  6D 6F 64 75 6C 65 20 28 69 74 20 63 61 6C 6C 73    module (it calls
015B90:  20 46 69 6C 65 73 0D 0A 09 20 74 6F 20 64 6F 20     Files... to do 
015BA0:  49 4F 20 74 6F 20 64 69 73 63 20 64 65 76 69 63    IO to disc devic
015BB0:  65 73 29 0D 0A 2A 29 0D 0A 09 49 46 20 72 65 70    es)..*)...IF rep
015BC0:  6C 79 3D 30 20 54 48 45 4E 09 09 28 2A 4F 4B 20    ly=0 THEN..(*OK 
015BD0:  2D 20 66 69 6C 65 20 66 6F 75 6E 64 2A 29 0D 0A    - file found*)..
015BE0:  09 09 0D 0A 0D 0A 09 09 28 2A 72 65 61 64 20 74    ........(*read t
015BF0:  68 65 20 66 69 72 73 74 20 31 20 6F 72 20 74 77    he first 1 or tw
015C00:  63 6B 3D 28 42 79 74 65 73 50 65 72 42 6C 6F 63    ck=(BytesPerBloc
015C10:  6B 2D 54 53 49 5A 45 28 43 41 52 44 49 4E 41 4C    k-TSIZE(CARDINAL
015C20:  29 29 20 44 49 56 20 54 53 49 5A 45 28 46 69 6C    )) DIV TSIZE(Fil
015C30:  65 52 65 63 29 3B 0D 0A 09 46 69 6C 6C 53 69 7A    eRec);...FillSiz
015C40:  65 3D 42 79 74 65 73 50 65 72 42 6C 6F 63 6B 2D    e=BytesPerBlock-
015C50:  54 53 49 5A 45 28 43 41 52 44 49 4E 41 4C 29 2D    TSIZE(CARDINAL)-
015C60:  45 6E 74 72 69 65 73 50 65 72 42 6C 6F 63 6B 2A    EntriesPerBlock*
015C70:  54 53 49 5A 45 28 46 69 6C 65 52 65 63 29 3B 0D    TSIZE(FileRec);.
015C80:  0A 54 59 50 45 09 42 6C 6F 63 6B 3D 52 45 43 4F    .TYPE.Block=RECO
015C90:  52 44 0D 0A 09 09 45 6E 74 72 69 65 73 3A 43 41    RD....Entries:CA
015CA0:  52 44 49 4E 41 4C 3B 09 28 2A 69 6E 20 74 68 69    RDINAL;.(*in thi
015CB0:  73 20 62 6C 6F 63 6B 2A 29 0D 0A 09 09 46 69 6C    s block*)....Fil
015CC0:  65 45 6E 74 72 79 3A 41 52 52 41 59 5B 30 2E 2E    eEntry:ARRAY[0..
015CD0:  45 6E 74 72 69 65 73 50 65 72 42 6C 6F 63 6B 2D    EntriesPerBlock-
015CE0:  31 5D 20 4F 46 20 46 69 6C 65 52 65 63 3B 0D 0A    1] OF FileRec;..
015CF0:  09 09 46 69 6C 6C 65 72 3A 41 52 52 41 59 5B 31    ..Filler:ARRAY[1
015D00:  2E 2E 46 69 6C 6C 53 69 7A 65 5D 20 4F 46 20 43    ..FillSize] OF C
015D10:  48 41 52 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A    HAR;....END;....
015D20:  56 41 52 09 64 61 74 66 69 6C 65 3A 46 49 4C 45    VAR.datfile:FILE
015D30:  3B 0D 0A 09 42 6C 6F 63 6B 4E 6F 3A 43 41 52 44    ;...BlockNo:CARD
015D40:  49 4E 41 4C 3B 0D 0A 09 45 6E 74 72 79 4E 6F 3A    INAL;...EntryNo:
015D50:  43 41 52 44 49 4E 41 4C 3B 0D 0A 09 42 75 66 66    CARDINAL;...Buff
015D60:  65 72 3A 42 6C 6F 63 6B 3B 0D 0A 09 66 3A 46 49    er:Block;...f:FI
015D70:  4C 45 3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45    LE;...reply:INTE
015D80:  47 45 52 3B 0D 0A 09 6F 70 65 6E 65 64 3A 42 4F    GER;...opened:BO
015D90:  4F 4C 45 41 4E 3B 0D 0A 09 63 68 3A 43 48 41 52    OLEAN;...ch:CHAR
015DA0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 57 72 69    ;..PROCEDURE Wri
015DB0:  74 65 46 69 6C 65 3B 0D 0A 42 45 47 49 4E 0D 0A    teFile;..BEGIN..
015DC0:  09 53 65 74 42 6C 6F 63 6B 28 64 61 74 66 69 6C    .SetBlock(datfil
015DD0:  65 2C 42 6C 6F 63 6B 4E 6F 29 3B 0D 0A 09 53 65    e,BlockNo);...Se
015DE0:  71 57 72 69 74 65 42 6C 6F 63 6B 28 64 61 74 66    qWriteBlock(datf
015DF0:  69 6C 65 2C 41 44 52 28 42 75 66 66 65 72 29 2C    ile,ADR(Buffer),
015E00:  69 6E 65 28 29 3A 49 4E 54 45 47 45 52 3B 0D 0A    ine():INTEGER;..
015E10:  0D 0A 28 2A 09 6D 6F 76 65 20 20 74 6F 20 73 74    ..(*.move  to st
015E20:  61 72 74 20 6F 66 20 6E 65 78 74 20 6C 69 6E 65    art of next line
015E30:  0D 0A 09 72 65 74 75 72 6E 73 20 63 68 61 72 61    ...returns chara
015E40:  63 74 65 72 73 20 61 64 76 61 6E 63 65 64 0D 0A    cters advanced..
015E50:  09 70 6F 73 69 74 69 6F 6E 73 20 74 6F 20 66 69    .positions to fi
015E60:  72 73 74 20 63 68 61 72 61 63 74 65 72 20 6F 66    rst character of
015E70:  20 6E 65 78 74 20 6C 69 6E 65 2A 29 0D 0A 56 41     next line*)..VA
015E80:  52 09 70 6F 73 3A 49 4E 54 45 47 45 52 3B 0D 0A    R.pos:INTEGER;..
015E90:  09 62 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47    .b:BOOLEAN;..BEG
015EA0:  49 4E 0D 0A 09 41 64 76 61 6E 63 65 4F 4B 3A 3D    IN...AdvanceOK:=
015EB0:  54 52 55 45 3B 0D 0A 09 70 6F 73 3A 3D 30 3B 0D    TRUE;...pos:=0;.
015EC0:  0A 09 4C 4F 4F 50 0D 0A 09 09 63 68 3A 3D 57 6F    ..LOOP....ch:=Wo
015ED0:  72 6B 69 6E 67 5E 2E 43 68 61 72 73 5B 43 68 61    rking^.Chars[Cha
015EE0:  72 50 6F 73 5D 3B 0D 0A 09 09 49 46 20 63 68 3D    rPos];....IF ch=
015EF0:  45 4F 46 20 54 48 45 4E 20 0D 0A 09 09 09 41 64    EOF THEN .....Ad
015F00:  76 61 6E 63 65 4F 4B 3A 3D 46 41 4C 53 45 3B 0D    vanceOK:=FALSE;.
015F10:  0A 09 09 09 45 58 49 54 20 0D 0A 09 09 09 45 4E    ....EXIT .....EN
015F20:  44 3B 0D 0A 09 09 49 46 20 28 63 68 3D 43 52 29    D;....IF (ch=CR)
015F30:  20 4F 52 20 28 63 68 3D 4C 46 29 20 4F 52 20 28     OR (ch=LF) OR (
015F40:  63 68 3D 46 46 29 20 54 48 45 4E 20 0D 0A 09 09    ch=FF) THEN ....
015F50:  09 49 46 20 4E 4F 54 20 41 64 76 61 6E 63 65 28    .IF NOT Advance(
015F60:  29 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B    ) THEN EXIT END;
015F70:  0D 0A 09 09 09 63 68 3A 3D 57 6F 72 6B 69 6E 67    .....ch:=Working
015F80:  5E 2E 43 68 61 72 73 5B 43 68 61 72 50 6F 73 5D    ^.Chars[CharPos]
015F90:  3B 0D 0A 09 09 09 49 46 20 63 68 3D 4C 46 20 54    ;.....IF ch=LF T
015FA0:  48 45 4E 20 62 3A 3D 41 64 76 61 6E 63 65 28 29    HEN b:=Advance()
015FB0:  20 45 4E 44 3B 0D 0A 09 09 09 45 58 49 54 0D 0A     END;.....EXIT..
015FC0:  09 09 09 45 4E 44 3B 0D 0A 09 09 49 4E 43 28 70    ...END;....INC(p
015FD0:  6F 73 29 3B 0D 0A 09 09 49 46 20 4E 4F 54 20 41    os);....IF NOT A
015FE0:  64 76 61 6E 63 65 28 29 20 54 48 45 4E 20 0D 0A    dvance() THEN ..
015FF0:  09 09 09 41 64 76 61 6E 63 65 4F 4B 3A 3D 46 41    ...AdvanceOK:=FA
016000:  42 79 74 65 73 50 65 72 42 6C 6F 63 6B 2C 72 65    BytesPerBlock,re
016010:  70 6C 79 29 3B 0D 0A 09 43 6C 6F 73 65 28 64 61    ply);...Close(da
016020:  74 66 69 6C 65 29 3B 0D 0A 09 4C 6F 6F 6B 75 70    tfile);...Lookup
016030:  28 64 61 74 66 69 6C 65 2C 27 45 44 49 54 53 54    (datfile,'EDITST
016040:  41 54 2E 44 41 54 20 27 2C 72 65 70 6C 79 29 3B    AT.DAT ',reply);
016050:  0D 0A 09 45 4E 44 20 57 72 69 74 65 46 69 6C 65    ...END WriteFile
016060:  3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 4D    ;....PROCEDURE M
016070:  61 6B 65 45 6E 74 72 79 3B 0D 0A 42 45 47 49 4E    akeEntry;..BEGIN
016080:  0D 0A 09 57 49 54 48 20 42 75 66 66 65 72 2E 46    ...WITH Buffer.F
016090:  69 6C 65 45 6E 74 72 79 5B 45 6E 74 72 79 4E 6F    ileEntry[EntryNo
0160A0:  5D 20 44 4F 0D 0A 09 09 46 69 6C 65 66 6E 3A 3D    ] DO....Filefn:=
0160B0:  66 2E 66 2E 66 63 62 66 6E 3B 0D 0A 09 09 46 69    f.f.fcbfn;....Fi
0160C0:  6C 65 66 74 3A 3D 66 2E 66 2E 66 63 62 66 74 3B    left:=f.f.fcbft;
0160D0:  0D 0A 09 09 46 69 6C 65 50 6F 73 3A 3D 30 3B 0D    ....FilePos:=0;.
0160E0:  0A 09 09 45 4E 44 3B 0D 0A 09 57 72 69 74 65 46    ...END;...WriteF
0160F0:  69 6C 65 3B 0D 0A 09 45 4E 44 20 4D 61 6B 65 45    ile;...END MakeE
016100:  6E 74 72 79 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    ntry;....PROCEDU
016110:  52 45 20 45 78 61 6D 69 6E 65 42 6C 6F 63 6B 3B    RE ExamineBlock;
016120:  0D 0A 42 45 47 49 4E 0D 0A 09 45 6E 74 72 79 4E    ..BEGIN...EntryN
016130:  6F 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 28 45    o:=0;...WHILE (E
016140:  6E 74 72 79 4E 6F 3C 42 75 66 66 65 72 2E 45 6E    ntryNo<Buffer.En
016150:  74 72 69 65 73 29 20 0D 0A 09 20 20 20 20 41 4E    tries) ...    AN
016160:  44 20 28 20 20 20 28 42 75 66 66 65 72 2E 46 69    D (   (Buffer.Fi
016170:  6C 65 45 6E 74 72 79 5B 45 6E 74 72 79 4E 6F 5D    leEntry[EntryNo]
016180:  2E 46 69 6C 65 66 6E 3C 3E 66 2E 66 2E 66 63 62    .Filefn<>f.f.fcb
016190:  66 6E 29 0D 0A 09 09 20 20 4F 52 20 28 42 75 66    fn)....  OR (Buf
0161A0:  66 65 72 2E 46 69 6C 65 45 6E 74 72 79 5B 45 6E    fer.FileEntry[En
0161B0:  74 72 79 4E 6F 5D 2E 46 69 6C 65 66 74 3C 3E 66    tryNo].Fileft<>f
0161C0:  2E 66 2E 66 63 62 66 74 29 29 20 44 4F 0D 0A 09    .f.fcbft)) DO...
0161D0:  09 49 4E 43 28 45 6E 74 72 79 4E 6F 29 3B 0D 0A    .INC(EntryNo);..
0161E0:  09 09 45 4E 44 3B 0D 0A 09 49 46 20 45 6E 74 72    ..END;...IF Entr
0161F0:  79 4E 6F 3E 3D 42 75 66 66 65 72 2E 45 6E 74 72    yNo>=Buffer.Entr
016200:  4C 53 45 3B 0D 0A 09 09 09 45 58 49 54 20 0D 0A    LSE;.....EXIT ..
016210:  09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20    ...END;....END; 
016220:  28 2A 4C 4F 4F 50 2A 29 0D 0A 09 52 45 54 55 52    (*LOOP*)...RETUR
016230:  4E 20 70 6F 73 3B 0D 0A 09 45 4E 44 20 41 64 76    N pos;...END Adv
016240:  61 6E 63 65 4C 69 6E 65 3B 0D 0A 0D 0A 09 0D 0A    anceLine;.......
016250:  50 52 4F 43 45 44 55 52 45 20 52 65 74 72 6C 69    PROCEDURE Retrli
016260:  6E 65 28 56 41 52 20 66 3A 45 64 69 74 46 69 6C    ne(VAR f:EditFil
016270:  65 3B 56 41 52 20 6C 65 6E 2C 70 6F 73 3A 49 4E    e;VAR len,pos:IN
016280:  54 45 47 45 52 3B 56 41 52 20 70 3A 50 6F 73 69    TEGER;VAR p:Posi
016290:  74 69 6F 6E 3B 0D 0A 09 09 56 41 52 20 6C 69 6E    tion;....VAR lin
0162A0:  65 73 6D 6F 76 65 64 3A 49 4E 54 45 47 45 52 3B    esmoved:INTEGER;
0162B0:  6C 69 6E 65 73 74 6F 6D 6F 76 65 3A 49 4E 54 45    linestomove:INTE
0162C0:  47 45 52 29 3B 0D 0A 28 2A 09 72 65 74 75 72 6E    GER);..(*.return
0162D0:  20 74 68 65 20 70 6F 73 69 74 69 6F 6E 20 69 6E     the position in
0162E0:  20 74 68 65 20 63 75 72 72 65 6E 74 20 6C 69 6E     the current lin
0162F0:  65 2A 29 0D 0A 56 41 52 09 63 68 3A 43 48 41 52    e*)..VAR.ch:CHAR
016300:  3B 0D 0A 09 69 3A 49 4E 54 45 47 45 52 3B 0D 0A    ;...i:INTEGER;..
016310:  09 62 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47    .b:BOOLEAN;..BEG
016320:  49 4E 0D 0A 09 73 65 74 63 75 72 70 6F 73 28 66    IN...setcurpos(f
016330:  29 3B 0D 0A 09 6C 69 6E 65 73 6D 6F 76 65 64 3A    );...linesmoved:
016340:  3D 30 3B 0D 0A 0D 0A 09 49 46 20 43 68 61 72 50    =0;.....IF CharP
016350:  6F 73 3E 49 4E 54 45 47 45 52 28 57 6F 72 6B 69    os>INTEGER(Worki
016360:  6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 20 54 48    ng^.BlockLen) TH
016370:  45 4E 0D 0A 09 09 43 68 61 72 50 6F 73 3A 3D 57    EN....CharPos:=W
016380:  6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E    orking^.BlockLen
016390:  20 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 49 46     ....END;.....IF
0163A0:  20 6C 69 6E 65 73 74 6F 6D 6F 76 65 3D 2D 31 36     linestomove=-16
0163B0:  37 33 36 20 54 48 45 4E 20 28 2A 67 6F 20 74 6F    736 THEN (*go to
0163C0:  20 74 6F 70 20 6F 66 20 66 69 6C 65 0D 0A 09 09     top of file....
0163D0:  09 09 20 20 20 20 54 68 69 73 20 69 73 20 61 20    ..    This is a 
0163E0:  72 65 63 65 6E 74 20 6D 6F 64 20 74 6F 20 73 70    recent mod to sp
0163F0:  65 65 64 20 75 70 20 0D 0A 09 09 09 09 20 20 20    eed up ......   
016400:  69 65 73 20 54 48 45 4E 0D 0A 09 09 49 46 20 42    ies THEN....IF B
016410:  75 66 66 65 72 2E 45 6E 74 72 69 65 73 3C 48 49    uffer.Entries<HI
016420:  47 48 28 42 75 66 66 65 72 2E 46 69 6C 65 45 6E    GH(Buffer.FileEn
016430:  74 72 79 29 20 54 48 45 4E 0D 0A 09 09 09 49 4E    try) THEN.....IN
016440:  43 28 42 75 66 66 65 72 2E 45 6E 74 72 69 65 73    C(Buffer.Entries
016450:  29 3B 0D 0A 09 09 09 4D 61 6B 65 45 6E 74 72 79    );.....MakeEntry
016460:  3B 0D 0A 09 09 45 4C 53 45 09 45 6E 74 72 79 4E    ;....ELSE.EntryN
016470:  6F 3A 3D 36 30 30 30 30 20 45 4E 44 3B 09 0D 0A    o:=60000 END;...
016480:  09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 45 78 61    ..END;...END Exa
016490:  6D 69 6E 65 42 6C 6F 63 6B 3B 0D 0A 50 52 4F 43    mineBlock;..PROC
0164A0:  45 44 55 52 45 20 53 65 61 72 63 68 3B 0D 0A 0D    EDURE Search;...
0164B0:  0A 28 2A 09 46 69 6E 64 20 65 6E 74 72 79 20 2D    .(*.Find entry -
0164C0:  20 63 72 65 61 74 65 20 65 6E 74 72 79 20 69 66     create entry if
0164D0:  20 6E 65 63 63 65 73 73 61 72 79 2A 29 0D 0A 42     neccessary*)..B
0164E0:  45 47 49 4E 0D 0A 09 49 46 20 42 6C 6F 63 6B 4E    EGIN...IF BlockN
0164F0:  6F 3C 36 30 30 30 30 20 54 48 45 4E 20 45 78 61    o<60000 THEN Exa
016500:  6D 69 6E 65 42 6C 6F 63 6B 0D 0A 09 45 4C 53 45    mineBlock...ELSE
016510:  20 45 6E 74 72 79 4E 6F 3A 3D 36 30 30 30 30 20     EntryNo:=60000 
016520:  45 4E 44 3B 0D 0A 09 49 46 20 45 6E 74 72 79 4E    END;...IF EntryN
016530:  6F 3D 36 30 30 30 30 20 54 48 45 4E 0D 0A 09 09    o=60000 THEN....
016540:  53 65 74 42 6C 6F 63 6B 28 64 61 74 66 69 6C 65    SetBlock(datfile
016550:  2C 30 29 3B 0D 0A 09 09 42 6C 6F 63 6B 4E 6F 3A    ,0);....BlockNo:
016560:  3D 30 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 48 49    =0....END;...WHI
016570:  4C 45 20 45 6E 74 72 79 4E 6F 3D 36 30 30 30 30    LE EntryNo=60000
016580:  20 44 4F 0D 0A 09 09 53 65 71 52 65 61 64 42 6C     DO....SeqReadBl
016590:  6F 63 6B 28 64 61 74 66 69 6C 65 2C 41 44 52 28    ock(datfile,ADR(
0165A0:  42 75 66 66 65 72 29 2C 42 79 74 65 73 50 65 72    Buffer),BytesPer
0165B0:  42 6C 6F 63 6B 2C 72 65 70 6C 79 29 3B 0D 0A 09    Block,reply);...
0165C0:  09 49 46 20 72 65 70 6C 79 3C 3E 42 79 74 65 73    .IF reply<>Bytes
0165D0:  50 65 72 42 6C 6F 63 6B 20 54 48 45 4E 0D 0A 09    PerBlock THEN...
0165E0:  09 09 42 75 66 66 65 72 2E 45 6E 74 72 69 65 73    ..Buffer.Entries
0165F0:  3A 3D 31 3B 0D 0A 09 09 09 45 6E 74 72 79 4E 6F    :=1;.....EntryNo
016600:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
016610:  45 20 4B 65 79 62 6F 61 72 64 3B 0D 0A 0D 0A 0D    E Keyboard;.....
016620:  0A 28 2A 09 41 63 74 20 6F 6E 20 63 6F 6D 6D 61    .(*.Act on comma
016630:  6E 64 73 20 65 6E 74 65 72 65 64 20 66 72 6F 6D    nds entered from
016640:  20 74 68 65 20 6B 65 79 62 6F 61 72 64 20 0D 0A     the keyboard ..
016650:  0D 0A 09 54 68 69 73 20 6D 6F 64 75 6C 65 20 68    ...This module h
016660:  61 6E 64 6C 65 73 20 6B 65 79 62 6F 61 72 64 20    andles keyboard 
016670:  64 65 73 70 61 74 63 68 20 64 75 72 69 6E 67 20    despatch during 
016680:  66 69 6C 65 20 65 64 69 74 74 69 6E 67 2A 29 0D    file editting*).
016690:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 49 6E 74    ...PROCEDURE Int
0166A0:  65 72 70 72 65 74 3B 0D 0A 0D 0A 28 2A 09 53 74    erpret;....(*.St
0166B0:  61 72 74 20 6B 65 79 62 6F 61 72 64 20 69 6E 74    art keyboard int
0166C0:  65 72 70 72 65 74 61 74 69 6F 6E 20 28 65 66 66    erpretation (eff
0166D0:  65 63 74 69 76 65 6C 79 20 65 64 69 74 20 6D 6F    ectively edit mo
0166E0:  64 65 29 2A 29 0D 0A 45 4E 44 20 4B 65 79 62 6F    de)*)..END Keybo
0166F0:  61 72 64 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 00    ard.............
016700:  72 72 6F 72 4F 72 64 69 6E 61 6C 2B 30 62 30 68    rrorOrdinal+0b0h
016710:  29 29 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 3B    ));...ReDisplay;
016720:  0D 0A 28 2A 09 44 69 73 70 6C 61 79 46 69 6C 65    ..(*.DisplayFile
016730:  28 46 69 6C 65 73 5B 43 75 72 72 65 6E 74 46 69    (Files[CurrentFi
016740:  6C 65 5D 2C 43 75 72 72 65 6E 74 57 69 6E 64 6F    le],CurrentWindo
016750:  77 2C 54 68 69 73 78 2C 54 68 69 73 79 29 3B 2A    w,Thisx,Thisy);*
016760:  29 0D 0A 09 47 6F 74 6F 78 79 28 54 68 69 73 78    )...Gotoxy(Thisx
016770:  2C 54 68 69 73 79 29 3B 0D 0A 09 63 75 72 78 5B    ,Thisy);...curx[
016780:  43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D    CurrentWindow]:=
016790:  54 68 69 73 78 3B 0D 0A 09 63 75 72 79 5B 43 75    Thisx;...cury[Cu
0167A0:  72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D 54 68    rrentWindow]:=Th
0167B0:  69 73 79 3B 0D 0A 09 45 4E 44 20 44 69 73 70 6C    isy;...END Displ
0167C0:  61 79 45 72 72 6F 72 3B 09 0D 0A 42 45 47 49 4E    ayError;...BEGIN
0167D0:  0D 0A 09 57 69 6E 64 6F 77 73 3A 3D 30 3B 0D 0A    ...Windows:=0;..
0167E0:  09 45 4E 44 20 45 64 69 74 44 69 73 70 6C 61 79    .END EditDisplay
0167F0:  2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
016800:  3A 3D 30 3B 0D 0A 09 09 09 4D 61 6B 65 45 6E 74    :=0;.....MakeEnt
016810:  72 79 3B 0D 0A 09 09 45 4C 53 45 09 0D 0A 09 09    ry;....ELSE.....
016820:  09 45 78 61 6D 69 6E 65 42 6C 6F 63 6B 3B 0D 0A    .ExamineBlock;..
016830:  09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 20 45 6E    ...END;....IF En
016840:  74 72 79 4E 6F 3D 36 30 30 30 30 20 54 48 45 4E    tryNo=60000 THEN
016850:  20 49 4E 43 28 42 6C 6F 63 6B 4E 6F 29 20 45 4E     INC(BlockNo) EN
016860:  44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44    D;....END;...END
016870:  20 53 65 61 72 63 68 3B 0D 0A 09 09 0D 0A 0D 0A     Search;........
016880:  50 52 4F 43 45 44 55 52 45 20 47 65 74 50 6F 73    PROCEDURE GetPos
016890:  69 74 69 6F 6E 28 46 6E 3A 46 49 4C 45 29 3A 43    ition(Fn:FILE):C
0168A0:  41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D    ARDINAL;..BEGIN.
0168B0:  0A 09 66 3A 3D 46 6E 3B 0D 0A 09 49 46 20 6F 70    ..f:=Fn;...IF op
0168C0:  65 6E 65 64 20 54 48 45 4E 0D 0A 09 09 53 65 61    ened THEN....Sea
0168D0:  72 63 68 3B 0D 0A 09 09 52 45 54 55 52 4E 20 42    rch;....RETURN B
0168E0:  75 66 66 65 72 2E 46 69 6C 65 45 6E 74 72 79 5B    uffer.FileEntry[
0168F0:  45 6E 74 72 79 4E 6F 5D 2E 46 69 6C 65 50 6F 73    EntryNo].FilePos
016900:  3B 0D 0A 09 45 4C 53 45 09 52 45 54 55 52 4E 20    ;...ELSE.RETURN 
016910:  30 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 47 65 74    0 END;...END Get
016920:  50 6F 73 69 74 69 6F 6E 3B 0D 0A 0D 0A 50 52 4F    Position;....PRO
016930:  43 45 44 55 52 45 20 53 65 74 50 6F 73 69 74 69    CEDURE SetPositi
016940:  6F 6E 28 46 6E 3A 46 49 4C 45 3B 50 6F 73 3A 43    on(Fn:FILE;Pos:C
016950:  41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E    ARDINAL);..BEGIN
016960:  0D 0A 09 66 3A 3D 46 6E 3B 0D 0A 09 49 46 20 6F    ...f:=Fn;...IF o
016970:  70 65 6E 65 64 20 54 48 45 4E 0D 0A 09 09 53 65    pened THEN....Se
016980:  61 72 63 68 3B 0D 0A 09 09 42 75 66 66 65 72 2E    arch;....Buffer.
016990:  46 69 6C 65 45 6E 74 72 79 5B 45 6E 74 72 79 4E    FileEntry[EntryN
0169A0:  6F 5D 2E 46 69 6C 65 50 6F 73 3A 3D 50 6F 73 3B    o].FilePos:=Pos;
0169B0:  0D 0A 09 09 57 72 69 74 65 46 69 6C 65 0D 0A 09    ....WriteFile...
0169C0:  09 45 4E 44 0D 0A 09 45 4E 44 20 53 65 74 50 6F    .END...END SetPo
0169D0:  73 69 74 69 6F 6E 3B 0D 0A 0D 0A 42 45 47 49 4E    sition;....BEGIN
0169E0:  0D 0A 09 6F 70 65 6E 65 64 3A 3D 54 52 55 45 3B    ...opened:=TRUE;
0169F0:  09 28 2A 61 73 73 75 6D 65 20 66 69 6C 65 20 63    .(*assume file c
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:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016B10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016B20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016B30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016B40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016B50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016B60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016B70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016B80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016B90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016BA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016BB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016BC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016BD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016BE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016BF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016C00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016C10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016C20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016C30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016C40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016C50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016C60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016C70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016C80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016C90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016CA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016CB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016CC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016CD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016CE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016CF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
016D00:  28 2A 65 73 63 61 70 65 20 73 6F 6D 65 74 68 69    (*escape somethi
016D10:  6E 67 2A 29 0D 0A 09 09 52 65 61 64 41 43 68 61    ng*)....ReadACha
016D20:  72 28 63 68 29 3B 0D 0A 09 09 4D 61 63 72 6F 28    r(ch);....Macro(
016D30:  63 68 2C 50 61 72 56 61 6C 75 65 29 3B 0D 0A 09    ch,ParValue);...
016D40:  09 50 61 72 56 61 6C 75 65 3A 3D 30 3B 0D 0A 09    .ParValue:=0;...
016D50:  45 4C 53 49 46 20 63 68 3D 31 31 78 20 54 48 45    ELSIF ch=11x THE
016D60:  4E 20 51 75 69 63 6B 0D 0A 09 45 4C 53 45 0D 0A    N Quick...ELSE..
016D70:  09 09 46 6F 75 6E 64 3A 3D 54 52 55 45 3B 20 28    ..Found:=TRUE; (
016D80:  2A 53 65 74 20 66 61 6C 73 65 20 61 73 20 73 69    *Set false as si
016D90:  67 6E 20 6F 66 20 66 61 69 6C 75 72 65 20 2A 29    gn of failure *)
016DA0:  0D 0A 09 09 57 48 49 4C 45 20 28 50 61 72 56 61    ....WHILE (ParVa
016DB0:  6C 75 65 3E 30 29 20 41 4E 44 20 46 6F 75 6E 64    lue>0) AND Found
016DC0:  20 44 4F 20 0D 0A 09 09 09 49 46 20 43 68 65 63     DO .....IF Chec
016DD0:  6B 49 6E 74 65 72 72 75 70 74 28 29 20 54 48 45    kInterrupt() THE
016DE0:  4E 20 50 61 72 56 61 6C 75 65 3A 3D 30 20 0D 0A    N ParValue:=0 ..
016DF0:  09 09 09 45 4C 53 45 0D 0A 09 09 09 09 44 45 43    ...ELSE......DEC
016E00:  28 50 61 72 56 61 6C 75 65 29 3B 0D 0A 09 09 09    (ParValue);.....
016E10:  09 49 46 20 63 68 3E 43 48 52 28 31 32 37 29 20    .IF ch>CHR(127) 
016E20:  54 48 45 4E 20 63 68 3A 3D 43 48 52 28 4F 52 44    THEN ch:=CHR(ORD
016E30:  28 63 68 29 2D 31 32 38 29 20 45 4E 44 3B 0D 0A    (ch)-128) END;..
016E40:  09 09 09 09 4D 61 69 6E 54 61 62 6C 65 5B 63 68    ....MainTable[ch
016E50:  5D 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09    ];......END;....
016E60:  09 45 4E 44 3B 0D 0A 09 09 50 61 72 56 61 6C 75    .END;....ParValu
016E70:  65 3A 3D 30 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    e:=0;....END;...
016E80:  45 4E 44 20 45 73 63 61 70 65 43 6F 75 6E 74 3B    END EscapeCount;
016E90:  0D 0A 50 52 4F 43 45 44 55 52 45 20 45 73 63 61    ..PROCEDURE Esca
016EA0:  70 65 3B 0D 0A 56 41 52 20 53 61 76 65 42 61 63    pe;..VAR SaveBac
016EB0:  6B 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49    k:BOOLEAN;..BEGI
016EC0:  4E 0D 0A 09 52 65 61 64 41 43 68 61 72 28 63 68    N...ReadAChar(ch
016ED0:  29 3B 0D 0A 09 49 46 20 63 68 3D 27 2D 27 20 54    );...IF ch='-' T
016EE0:  48 45 4E 0D 0A 09 09 42 61 63 6B 77 61 72 64 73    HEN....Backwards
016EF0:  3A 3D 54 52 55 45 3B 0D 0A 09 09 52 65 61 64 41    :=TRUE;....ReadA
016F00:  28 2A 09 4B 65 79 62 6F 61 72 64 20 64 65 73 70    (*.Keyboard desp
016F10:  61 74 63 68 65 72 20 61 6E 64 20 73 6F 6D 65 20    atcher and some 
016F20:  65 64 69 74 69 6E 67 20 66 75 6E 63 74 69 6F 6E    editing function
016F30:  73 0D 0A 0D 0A 09 43 6F 70 79 72 69 67 68 74 20    s.....Copyright 
016F40:  28 43 29 20 44 61 76 65 20 4D 6F 6F 72 65 20 46    (C) Dave Moore F
016F50:  54 4C 20 4D 6F 64 75 6C 61 2D 32 20 31 39 38 36    TL Modula-2 1986
016F60:  0D 0A 0D 0A 09 4D 6F 64 69 66 69 63 61 74 69 6F    .....Modificatio
016F70:  6E 73 3A 0D 0A 09 09 32 30 20 4A 75 6C 79 20 38    ns:....20 July 8
016F80:  36 20 48 61 6E 64 6C 69 6E 67 20 6F 66 20 62 61    6 Handling of ba
016F90:  63 6B 77 61 72 64 73 20 63 68 61 6E 67 65 64 20    ckwards changed 
016FA0:  73 6F 20 74 68 61 74 20 64 69 72 65 63 74 69 6F    so that directio
016FB0:  6E 0D 0A 09 09 09 20 20 20 6F 66 20 66 69 6E 64    n.....   of find
016FC0:  20 72 65 6D 61 69 6E 73 20 73 61 6D 65 20 75 6E     remains same un
016FD0:  6C 65 73 73 20 65 78 70 6C 69 63 69 74 20 63 6F    less explicit co
016FE0:  75 6E 74 20 65 6E 74 65 72 65 64 2E 0D 0A 09 09    unt entered.....
016FF0:  09 20 20 20 54 68 69 73 20 61 6C 6C 6F 77 73 20    .   This allows 
017000:  75 73 65 20 6F 66 20 6A 75 73 74 20 5E 4C 20 66    use of just ^L f
017010:  6F 72 20 62 61 63 6B 77 61 72 64 73 20 73 65 61    or backwards sea
017020:  72 63 68 65 73 0D 0A 0D 0A 2A 29 0D 0A 0D 0A 49    rches....*)....I
017030:  4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D 4F    MPLEMENTATION MO
017040:  44 55 4C 45 20 4B 65 79 62 6F 61 72 64 3B 0D 0A    DULE Keyboard;..
017050:  0D 0A 46 52 4F 4D 09 53 63 72 65 65 6E 44 75 6D    ..FROM.ScreenDum
017060:  6D 79 20 49 4D 50 4F 52 54 20 52 69 6E 67 42 65    my IMPORT RingBe
017070:  6C 6C 2C 47 6F 74 6F 78 79 2C 43 6C 65 61 72 53    ll,Gotoxy,ClearS
017080:  63 72 65 65 6E 2C 4F 75 74 70 75 74 54 6F 53 63    creen,OutputToSc
017090:  72 65 65 6E 3B 0D 0A 46 52 4F 4D 09 45 64 69 74    reen;..FROM.Edit
0170A0:  44 69 73 70 6C 61 79 20 49 4D 50 4F 52 54 20 45    Display IMPORT E
0170B0:  72 72 6F 72 4D 65 73 73 61 67 65 2C 57 69 6E 64    rrorMessage,Wind
0170C0:  6F 77 73 2C 44 69 73 70 6C 61 79 45 72 72 6F 72    ows,DisplayError
0170D0:  2C 45 72 72 6F 72 4F 72 64 69 6E 61 6C 3B 0D 0A    ,ErrorOrdinal;..
0170E0:  46 52 4F 4D 09 45 64 69 74 43 6F 6E 74 72 6F 6C    FROM.EditControl
0170F0:  20 49 4D 50 4F 52 54 20 49 6E 73 4F 6E 65 43 68     IMPORT InsOneCh
017100:  43 68 61 72 28 63 68 29 3B 0D 0A 09 09 45 73 63    Char(ch);....Esc
017110:  61 70 65 43 6F 75 6E 74 3B 0D 0A 09 09 0D 0A 09    apeCount;.......
017120:  45 4C 53 49 46 20 28 63 68 3E 3D 27 30 27 29 20    ELSIF (ch>='0') 
017130:  41 4E 44 20 28 63 68 3C 3D 27 39 27 29 20 54 48    AND (ch<='9') TH
017140:  45 4E 20 0D 0A 09 09 42 61 63 6B 77 61 72 64 73    EN ....Backwards
017150:  3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 45 73 63 61    :=FALSE;....Esca
017160:  70 65 43 6F 75 6E 74 0D 0A 09 45 4C 53 49 46 20    peCount...ELSIF 
017170:  63 68 3D 30 34 78 20 54 48 45 4E 20 44 65 66 4D    ch=04x THEN DefM
017180:  61 63 72 6F 3B 52 65 64 69 73 70 6C 61 79 0D 0A    acro;Redisplay..
017190:  09 45 4C 53 49 46 20 63 68 3D 30 63 78 20 54 48    .ELSIF ch=0cx TH
0171A0:  45 4E 20 4C 65 61 72 6E 4D 61 63 72 6F 3B 52 65    EN LearnMacro;Re
0171B0:  64 69 73 70 6C 61 79 0D 0A 09 45 4C 53 49 46 20    display...ELSIF 
0171C0:  63 68 3D 31 30 78 20 54 48 45 4E 20 43 6C 65 61    ch=10x THEN Clea
0171D0:  72 53 63 72 65 65 6E 3B 50 72 69 6E 74 4D 61 63    rScreen;PrintMac
0171E0:  72 6F 73 3B 52 65 64 69 73 70 6C 61 79 0D 0A 09    ros;Redisplay...
0171F0:  45 4C 53 45 20 4D 61 63 72 6F 28 63 68 2C 31 29    ELSE Macro(ch,1)
017200:  20 45 4E 44 3B 0D 0A 09 45 4E 44 20 45 73 63 61     END;...END Esca
017210:  70 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45    pe;..PROCEDURE E
017220:  6E 64 69 6E 74 65 72 70 72 65 74 3B 0D 0A 0D 0A    ndinterpret;....
017230:  28 2A 09 45 6E 64 20 6B 65 79 62 6F 61 72 64 20    (*.End keyboard 
017240:  69 6E 74 65 72 70 72 65 74 61 74 69 6F 6E 0D 0A    interpretation..
017250:  0D 0A 09 4E 6F 74 65 20 74 68 61 74 20 74 68 69    ...Note that thi
017260:  73 20 6D 6F 64 75 6C 65 20 63 61 6E 20 62 65 20    s module can be 
017270:  61 73 73 69 67 6E 65 64 20 74 6F 20 61 20 6B 65    assigned to a ke
017280:  79 20 73 6F 20 74 68 61 74 20 79 6F 75 20 63 61    y so that you ca
017290:  6E 0D 0A 09 65 78 69 74 20 66 72 6F 6D 20 65 64    n...exit from ed
0172A0:  69 74 20 6D 6F 64 65 20 67 72 61 63 65 66 75 6C    it mode graceful
0172B0:  6C 79 0D 0A 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09    ly..*)..BEGIN...
0172C0:  69 6E 74 65 72 70 72 65 74 69 6E 67 3A 3D 46 41    interpreting:=FA
0172D0:  4C 53 45 3B 0D 0A 09 45 4E 44 20 45 6E 64 69 6E    LSE;...END Endin
0172E0:  74 65 72 70 72 65 74 3B 0D 0A 50 52 4F 43 45 44    terpret;..PROCED
0172F0:  55 52 45 20 49 6E 73 43 68 61 72 3B 0D 0A 42 45    URE InsChar;..BE
017300:  61 72 2C 44 65 6C 4F 6E 65 43 68 61 72 2C 44 65    ar,DelOneChar,De
017310:  6C 54 6F 45 4F 4C 2C 44 65 6C 46 75 6C 6C 4C 69    lToEOL,DelFullLi
017320:  6E 65 2C 0D 0A 09 09 09 20 20 20 4C 65 66 74 2C    ne,.....   Left,
017330:  52 69 67 68 74 2C 44 6F 77 6E 2C 55 70 2C 55 70    Right,Down,Up,Up
017340:  53 63 72 65 65 6E 2C 44 6F 77 6E 53 63 72 65 65    Screen,DownScree
017350:  6E 2C 54 6F 70 2C 42 6F 74 74 6F 6D 2C 0D 0A 09    n,Top,Bottom,...
017360:  09 09 20 20 20 43 75 72 72 65 6E 74 57 69 6E 64    ..   CurrentWind
017370:  6F 77 2C 46 69 6C 65 73 4F 70 65 6E 65 64 2C 63    ow,FilesOpened,c
017380:  75 72 78 2C 63 75 72 79 2C 43 68 61 6E 67 65 57    urx,cury,ChangeW
017390:  69 6E 64 6F 77 2C 0D 0A 09 09 09 20 20 20 53 63    indow,.....   Sc
0173A0:  72 6F 6C 6C 55 70 2C 53 63 72 6F 6C 6C 44 6F 77    rollUp,ScrollDow
0173B0:  6E 2C 52 65 73 65 74 53 63 72 65 65 6E 50 6F 73    n,ResetScreenPos
0173C0:  2C 0D 0A 09 09 09 20 20 20 54 6F 70 2C 42 6F 74    ,.....   Top,Bot
0173D0:  74 6F 6D 2C 46 61 72 4C 65 66 74 2C 46 61 72 52    tom,FarLeft,FarR
0173E0:  69 67 68 74 2C 46 69 6C 65 73 2C 53 65 61 72 63    ight,Files,Searc
0173F0:  68 2C 4F 76 65 72 57 72 69 74 65 2C 20 0D 0A 09    h,OverWrite, ...
017400:  09 09 20 20 20 46 69 6E 64 57 6F 72 64 2C 52 65    ..   FindWord,Re
017410:  44 69 73 70 6C 61 79 2C 47 6F 54 6F 4C 61 62 65    Display,GoToLabe
017420:  6C 2C 55 70 64 61 74 65 64 2C 43 75 72 72 65 6E    l,Updated,Curren
017430:  74 46 69 6C 65 2C 0D 0A 09 09 09 20 20 20 54 68    tFile,.....   Th
017440:  69 73 78 2C 54 68 69 73 79 2C 57 69 6E 64 6F 77    isx,Thisy,Window
017450:  46 69 6C 65 2C 4D 6F 76 65 64 4F 4B 3B 0D 0A 46    File,MovedOK;..F
017460:  52 4F 4D 09 4D 61 6B 65 45 64 69 74 20 49 4D 50    ROM.MakeEdit IMP
017470:  4F 52 54 20 50 72 65 70 61 72 65 53 74 72 69 6E    ORT PrepareStrin
017480:  67 2C 46 69 6E 64 53 74 72 69 6E 67 2C 4C 61 62    g,FindString,Lab
017490:  65 6C 4F 70 2C 42 6C 6F 63 6B 43 6F 70 79 2C 42    elOp,BlockCopy,B
0174A0:  6C 6F 63 6B 44 65 6C 2C 0D 0A 09 09 09 45 72 72    lockDel,.....Err
0174B0:  6F 72 43 6F 75 6E 74 3B 0D 0A 46 52 4F 4D 09 44    orCount;..FROM.D
0174C0:  6F 4D 65 6E 75 20 20 49 4D 50 4F 52 54 20 20 20    oMenu  IMPORT   
0174D0:  20 20 47 65 74 53 74 72 69 6E 67 2C 52 65 64 69      GetString,Redi
0174E0:  73 70 6C 61 79 3B 0D 0A 46 52 4F 4D 09 4D 61 63    splay;..FROM.Mac
0174F0:  72 6F 73 09 49 4D 50 4F 52 54 09 44 65 66 4D 61    ros.IMPORT.DefMa
017500:  47 49 4E 0D 0A 09 49 46 20 49 6E 73 65 72 74 4D    GIN...IF InsertM
017510:  6F 64 65 20 54 48 45 4E 20 0D 0A 09 09 49 6E 73    ode THEN ....Ins
017520:  4F 6E 65 43 68 61 72 28 63 68 29 3B 0D 0A 09 45    OneChar(ch);...E
017530:  4C 53 45 0D 0A 09 09 4F 76 65 72 57 72 69 74 65    LSE....OverWrite
017540:  28 63 68 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    (ch);....END;...
017550:  45 4E 44 20 49 6E 73 43 68 61 72 3B 0D 0A 50 52    END InsChar;..PR
017560:  4F 43 45 44 55 52 45 20 42 72 65 61 6B 4C 69 6E    OCEDURE BreakLin
017570:  65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 6E 73 4F    e;..BEGIN...InsO
017580:  6E 65 43 68 61 72 28 30 64 78 29 3B 0D 0A 09 4C    neChar(0dx);...L
017590:  65 66 74 3B 0D 0A 09 45 4E 44 20 42 72 65 61 6B    eft;...END Break
0175A0:  4C 69 6E 65 3B 0D 0A 56 41 52 09 4C 65 6E 3A 43    Line;..VAR.Len:C
0175B0:  41 52 44 49 4E 41 4C 3D 30 3B 0D 0A 09 52 65 70    ARDINAL=0;...Rep
0175C0:  6C 61 63 65 53 74 72 69 6E 67 3A 41 52 52 41 59    laceString:ARRAY
0175D0:  5B 30 2E 2E 36 30 5D 20 4F 46 20 43 48 41 52 3B    [0..60] OF CHAR;
0175E0:  0D 0A 09 52 4C 65 6E 3A 49 4E 54 45 47 45 52 3B    ...RLen:INTEGER;
0175F0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 44 6F 46 69    ..PROCEDURE DoFi
017600:  6E 64 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 09 28    nd;..BEGIN.....(
017610:  2A 20 74 68 65 20 70 61 73 73 69 6E 67 20 6F 66    * the passing of
017620:  20 74 68 65 20 62 61 63 6B 77 61 72 64 73 20 73     the backwards s
017630:  74 61 74 75 73 20 69 73 20 61 20 72 65 61 6C 20    tatus is a real 
017640:  6B 6C 75 64 67 65 0D 0A 09 20 20 20 77 68 69 63    kludge...   whic
017650:  68 20 77 61 73 20 69 6E 74 72 6F 64 75 63 65 64    h was introduced
017660:  20 61 73 20 61 20 71 75 69 63 6B 20 66 69 78 20     as a quick fix 
017670:  77 68 69 6C 65 20 49 20 77 61 73 20 61 20 6C 6F    while I was a lo
017680:  6E 67 0D 0A 09 20 20 20 77 61 79 20 66 72 6F 6D    ng...   way from
017690:  20 68 6F 6D 65 2C 20 74 6F 20 61 76 6F 69 64 20     home, to avoid 
0176A0:  68 61 76 69 6E 67 20 74 6F 20 75 70 64 61 74 65    having to update
0176B0:  20 6D 79 20 77 6F 72 6B 20 64 69 73 63 73 0D 0A     my work discs..
0176C0:  09 20 20 20 61 74 20 68 6F 6D 65 20 77 69 74 68    .   at home with
0176D0:  20 74 6F 6F 20 6D 75 63 68 20 73 74 75 66 66 20     too much stuff 
0176E0:  2A 29 0D 0A 0D 0A 09 49 46 20 4C 65 6E 3E 30 20    *).....IF Len>0 
0176F0:  54 48 45 4E 20 0D 0A 09 09 49 46 20 42 61 63 6B    THEN ....IF Back
017700:  63 72 6F 2C 52 65 61 64 41 43 68 61 72 2C 4D 61    cro,ReadAChar,Ma
017710:  63 72 6F 2C 4C 65 61 72 6E 4D 61 63 72 6F 2C 50    cro,LearnMacro,P
017720:  72 69 6E 74 4D 61 63 72 6F 73 2C 0D 0A 09 09 09    rintMacros,.....
017730:  43 68 65 63 6B 49 6E 74 65 72 72 75 70 74 2C 46    CheckInterrupt,F
017740:  6F 75 6E 64 3B 0D 0A 28 2A 09 41 63 74 20 6F 6E    ound;..(*.Act on
017750:  20 63 6F 6D 6D 61 6E 64 73 20 65 6E 74 65 72 65     commands entere
017760:  64 20 66 72 6F 6D 20 74 68 65 20 6B 65 79 62 6F    d from the keybo
017770:  61 72 64 20 0D 0A 0D 0A 09 54 68 69 73 20 6D 6F    ard .....This mo
017780:  64 75 6C 65 20 68 61 6E 64 6C 65 73 20 6B 65 79    dule handles key
017790:  62 6F 61 72 64 20 64 65 73 70 61 74 63 68 20 64    board despatch d
0177A0:  75 72 69 6E 67 20 66 69 6C 65 20 65 64 69 74 74    uring file editt
0177B0:  69 6E 67 2A 29 0D 0A 0D 0A 54 59 50 45 09 54 61    ing*)....TYPE.Ta
0177C0:  62 41 72 72 61 79 3D 41 52 52 41 59 20 5B 30 78    bArray=ARRAY [0x
0177D0:  2E 2E 37 66 78 5D 20 4F 46 20 50 52 4F 43 3B 0D    ..7fx] OF PROC;.
0177E0:  0A 09 54 61 62 6C 65 3D 50 4F 49 4E 54 45 52 20    ..Table=POINTER 
0177F0:  54 4F 20 54 61 62 41 52 52 41 59 3B 0D 0A 56 41    TO TabARRAY;..VA
017800:  52 09 0D 0A 09 63 68 3A 43 48 41 52 3B 0D 0A 09    R....ch:CHAR;...
017810:  4D 61 69 6E 54 61 62 6C 65 3A 54 61 62 41 72 72    MainTable:TabArr
017820:  61 79 3B 0D 0A 09 69 6E 74 65 72 70 72 65 74 69    ay;...interpreti
017830:  6E 67 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09 50 61    ng:BOOLEAN;...Pa
017840:  72 56 61 6C 75 65 3A 49 4E 54 45 47 45 52 3D 30    rValue:INTEGER=0
017850:  3B 0D 0A 09 47 72 6F 75 70 4F 66 43 6F 64 65 73    ;...GroupOfCodes
017860:  3A 41 52 52 41 59 5B 31 2E 2E 33 30 5D 20 4F 46    :ARRAY[1..30] OF
017870:  20 43 48 41 52 3B 0D 0A 09 47 72 6F 75 70 4C 65     CHAR;...GroupLe
017880:  6E 2C 47 72 6F 75 70 50 6F 73 3A 43 41 52 44 49    n,GroupPos:CARDI
017890:  4E 41 4C 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41    NAL;...i:CARDINA
0178A0:  4C 3B 0D 0A 09 49 6E 73 65 72 74 4D 6F 64 65 3A    L;...InsertMode:
0178B0:  42 4F 4F 4C 45 41 4E 3D 54 52 55 45 3B 0D 0A 09    BOOLEAN=TRUE;...
0178C0:  4E 6F 42 65 6C 6C 3A 42 4F 4F 4C 45 41 4E 3D 46    NoBell:BOOLEAN=F
0178D0:  41 4C 53 45 3B 0D 0A 09 42 61 63 6B 77 61 72 64    ALSE;...Backward
0178E0:  73 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B    s:BOOLEAN=FALSE;
0178F0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 42 65 6C 6C    ..PROCEDURE Bell
017900:  77 61 72 64 73 20 54 48 45 4E 20 46 6F 75 6E 64    wards THEN Found
017910:  3A 3D 53 65 61 72 63 68 28 52 65 70 6C 61 63 65    :=Search(Replace
017920:  53 74 72 69 6E 67 2C 52 4C 65 6E 2C 4C 65 6E 2B    String,RLen,Len+
017930:  31 32 38 29 0D 0A 09 09 45 4C 53 45 20 46 6F 75    128)....ELSE Fou
017940:  6E 64 3A 3D 53 65 61 72 63 68 28 52 65 70 6C 61    nd:=Search(Repla
017950:  63 65 53 74 72 69 6E 67 2C 52 4C 65 6E 2C 4C 65    ceString,RLen,Le
017960:  6E 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D    n) END;....END;.
017970:  0A 09 45 4E 44 20 44 6F 46 69 6E 64 3B 0D 0A 50    ..END DoFind;..P
017980:  52 4F 43 45 44 55 52 45 20 46 69 6E 64 3B 0D 0A    ROCEDURE Find;..
017990:  56 41 52 09 53 65 61 72 63 68 53 74 72 69 6E 67    VAR.SearchString
0179A0:  3A 41 52 52 41 59 5B 30 2E 2E 36 30 5D 20 4F 46    :ARRAY[0..60] OF
0179B0:  20 43 48 41 52 3B 0D 0A 42 45 47 49 4E 0D 0A 09     CHAR;..BEGIN...
0179C0:  47 65 74 53 74 72 69 6E 67 28 53 65 61 72 63 68    GetString(Search
0179D0:  53 74 72 69 6E 67 2C 4C 65 6E 2C 27 46 69 6E 64    String,Len,'Find
0179E0:  3A 27 29 3B 0D 0A 09 49 46 20 4C 65 6E 3E 30 20    :');...IF Len>0 
0179F0:  54 48 45 4E 0D 0A 09 09 50 72 65 70 61 72 65 53    THEN....PrepareS
017A00:  74 72 69 6E 67 28 53 65 61 72 63 68 53 74 72 69    tring(SearchStri
017A10:  6E 67 2C 4C 65 6E 29 3B 0D 0A 09 09 52 4C 65 6E    ng,Len);....RLen
017A20:  3A 3D 2D 31 3B 0D 0A 09 09 44 6F 46 69 6E 64 3B    :=-1;....DoFind;
017A30:  0D 0A 09 45 4C 53 45 0D 0A 09 09 52 65 44 69 73    ...ELSE....ReDis
017A40:  70 6C 61 79 3B 0D 0A 09 09 45 4E 44 3B 0A 09 45    play;....END;..E
017A50:  4E 44 20 46 69 6E 64 3B 0D 0A 50 52 4F 43 45 44    ND Find;..PROCED
017A60:  55 52 45 20 52 65 70 6C 61 63 65 3B 0D 0A 56 41    URE Replace;..VA
017A70:  52 09 53 65 61 72 63 68 53 74 72 69 6E 67 3A 41    R.SearchString:A
017A80:  52 52 41 59 5B 30 2E 2E 36 30 5D 20 4F 46 20 43    RRAY[0..60] OF C
017A90:  48 41 52 3B 0D 0A 09 4C 3A 43 41 52 44 49 4E 41    HAR;...L:CARDINA
017AA0:  4C 3B 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 47    L;.....BEGIN...G
017AB0:  65 74 53 74 72 69 6E 67 28 53 65 61 72 63 68 53    etString(SearchS
017AC0:  74 72 69 6E 67 2C 4C 65 6E 2C 27 41 6C 74 65 72    tring,Len,'Alter
017AD0:  3A 27 29 3B 0D 0A 09 49 46 20 4C 65 6E 3E 30 20    :');...IF Len>0 
017AE0:  54 48 45 4E 0D 0A 09 09 50 72 65 70 61 72 65 53    THEN....PrepareS
017AF0:  74 72 69 6E 67 28 53 65 61 72 63 68 53 74 72 69    tring(SearchStri
017B00:  3B 0D 0A 0D 0A 28 2A 09 72 69 6E 67 20 74 68 65    ;....(*.ring the
017B10:  20 62 65 6C 6C 20 2D 20 70 72 69 6D 61 72 69 6C     bell - primaril
017B20:  6C 79 20 75 73 65 64 20 66 6F 72 20 75 6E 2D 61    ly used for un-a
017B30:  73 73 69 67 6E 65 64 20 6B 65 79 73 2A 29 0D 0A    ssigned keys*)..
017B40:  42 45 47 49 4E 0D 0A 09 49 46 20 4E 4F 54 20 4E    BEGIN...IF NOT N
017B50:  6F 42 65 6C 6C 20 54 48 45 4E 0D 0A 09 09 52 69    oBell THEN....Ri
017B60:  6E 67 42 65 6C 6C 3B 0D 0A 09 09 45 4E 44 3B 0D    ngBell;....END;.
017B70:  0A 09 50 61 72 56 61 6C 75 65 3A 3D 30 3B 0D 0A    ..ParValue:=0;..
017B80:  09 45 4E 44 20 42 65 6C 6C 3B 0D 0A 50 52 4F 43    .END Bell;..PROC
017B90:  45 44 55 52 45 20 51 75 69 63 6B 3B 46 4F 52 57    EDURE Quick;FORW
017BA0:  41 52 44 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    ARD;..PROCEDURE 
017BB0:  45 73 63 61 70 65 43 6F 75 6E 74 3B 0D 0A 0D 0A    EscapeCount;....
017BC0:  28 2A 09 65 73 63 61 70 65 20 63 68 61 72 61 63    (*.escape charac
017BD0:  74 65 72 20 70 72 6F 63 65 73 73 69 6E 67 0D 0A    ter processing..
017BE0:  0D 0A 09 69 66 20 66 6F 6C 6C 6F 77 65 64 20 62    ...if followed b
017BF0:  79 20 6E 75 6D 62 65 72 2C 20 72 65 70 65 61 74    y number, repeat
017C00:  73 20 6E 65 78 74 20 6B 65 79 20 67 69 76 65 6E    s next key given
017C10:  20 6E 75 6D 62 65 72 20 6F 66 20 74 69 6D 65 73     number of times
017C20:  0D 0A 2A 29 0D 0A 56 41 52 09 69 3A 49 4E 54 45    ..*)..VAR.i:INTE
017C30:  47 45 52 3B 0D 0A 42 45 47 49 4E 0D 0A 09 50 61    GER;..BEGIN...Pa
017C40:  72 56 61 6C 75 65 3A 3D 30 3B 0D 0A 09 4C 4F 4F    rValue:=0;...LOO
017C50:  50 0D 0A 09 09 49 46 20 28 63 68 3E 3D 27 30 27    P....IF (ch>='0'
017C60:  29 20 41 4E 44 20 28 63 68 3C 3D 27 39 27 29 20    ) AND (ch<='9') 
017C70:  54 48 45 4E 0D 0A 09 09 09 50 61 72 56 61 6C 75    THEN.....ParValu
017C80:  65 3A 3D 31 30 2A 50 61 72 56 61 6C 75 65 2B 28    e:=10*ParValue+(
017C90:  4F 52 44 28 63 68 29 2D 4F 52 44 28 27 30 27 29    ORD(ch)-ORD('0')
017CA0:  29 0D 0A 09 09 45 4C 53 45 20 0D 0A 09 09 09 45    )....ELSE .....E
017CB0:  58 49 54 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    XIT.....END;....
017CC0:  52 65 61 64 41 43 68 61 72 28 63 68 29 3B 0D 0A    ReadAChar(ch);..
017CD0:  09 09 45 4E 44 3B 28 2A 4C 4F 4F 50 2A 29 0D 0A    ..END;(*LOOP*)..
017CE0:  0D 0A 09 49 46 20 28 63 68 3D 31 62 78 29 20 4F    ...IF (ch=1bx) O
017CF0:  52 20 28 63 68 3D 30 61 78 29 20 54 48 45 4E 20    R (ch=0ax) THEN 
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:  6E 67 2C 4C 65 6E 29 3B 0D 0A 09 09 47 65 74 53    ng,Len);....GetS
017E10:  74 72 69 6E 67 28 52 65 70 6C 61 63 65 53 74 72    tring(ReplaceStr
017E20:  69 6E 67 2C 4C 2C 27 54 6F 20 20 20 3A 27 29 3B    ing,L,'To   :');
017E30:  0D 0A 09 09 52 4C 65 6E 3A 3D 4C 3B 0D 0A 09 09    ....RLen:=L;....
017E40:  44 6F 46 69 6E 64 3B 0D 0A 09 45 4C 53 45 0D 0A    DoFind;...ELSE..
017E50:  09 09 52 65 44 69 73 70 6C 61 79 3B 0D 0A 09 09    ..ReDisplay;....
017E60:  45 4E 44 3B 0D 0A 09 45 4E 44 20 52 65 70 6C 61    END;...END Repla
017E70:  63 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53    ce;..PROCEDURE S
017E80:  65 74 55 70 64 61 74 65 64 3B 0D 0A 42 45 47 49    etUpdated;..BEGI
017E90:  4E 0D 0A 09 55 70 64 61 74 65 64 5B 43 75 72 72    N...Updated[Curr
017EA0:  65 6E 74 46 69 6C 65 5D 3A 3D 54 52 55 45 0D 0A    entFile]:=TRUE..
017EB0:  09 45 4E 44 20 53 65 74 55 70 64 61 74 65 64 3B    .END SetUpdated;
017EC0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65 6C 41    ..PROCEDURE DelA
017ED0:  42 6C 6F 63 6B 28 69 3A 43 41 52 44 49 4E 41 4C    Block(i:CARDINAL
017EE0:  29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 56 41 52 20    ):BOOLEAN;..VAR 
017EF0:  09 62 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09 6A 3A    .b:BOOLEAN;...j:
017F00:  43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E    CARDINAL;..BEGIN
017F10:  0D 0A 09 62 3A 3D 42 6C 6F 63 6B 44 65 6C 28 46    ...b:=BlockDel(F
017F20:  69 6C 65 73 5B 69 5D 29 3B 0D 0A 09 6A 3A 3D 43    iles[i]);...j:=C
017F30:  75 72 72 65 6E 74 46 69 6C 65 3B 0D 0A 09 43 68    urrentFile;...Ch
017F40:  61 6E 67 65 57 69 6E 64 6F 77 28 69 29 3B 0D 0A    angeWindow(i);..
017F50:  09 52 65 64 69 73 70 6C 61 79 3B 0D 0A 09 43 68    .Redisplay;...Ch
017F60:  61 6E 67 65 57 69 6E 64 6F 77 28 6A 29 3B 0D 0A    angeWindow(j);..
017F70:  09 52 45 54 55 52 4E 20 62 0D 0A 09 45 4E 44 20    .RETURN b...END 
017F80:  44 65 6C 41 42 6C 6F 63 6B 3B 0D 0A 50 52 4F 43    DelABlock;..PROC
017F90:  45 44 55 52 45 20 44 65 66 4C 61 62 65 6C 3B 0D    EDURE DefLabel;.
017FA0:  0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B    .VAR.i:CARDINAL;
017FB0:  0D 0A 09 62 2C 72 3A 42 4F 4F 4C 45 41 4E 3B 0D    ...b,r:BOOLEAN;.
017FC0:  0A 42 45 47 49 4E 0D 0A 09 52 65 61 64 41 43 68    .BEGIN...ReadACh
017FD0:  61 72 28 63 68 29 3B 0D 0A 09 69 3A 3D 43 75 72    ar(ch);...i:=Cur
017FE0:  72 65 6E 74 57 69 6E 64 6F 77 3B 0D 0A 0D 0A 09    rentWindow;.....
017FF0:  28 2A 09 49 66 20 63 6F 6E 74 72 6F 6C 20 42 27    (*.If control B'
018000:  68 29 3B 0D 0A 09 09 49 46 20 63 68 3E 43 48 52    h);....IF ch>CHR
018010:  28 31 32 37 29 20 54 48 45 4E 20 63 68 3A 3D 43    (127) THEN ch:=C
018020:  48 52 28 4F 52 44 28 63 68 29 2D 31 32 38 29 20    HR(ORD(ch)-128) 
018030:  45 4E 44 3B 0D 0A 09 09 4D 61 69 6E 54 61 62 6C    END;....MainTabl
018040:  65 5B 63 68 5D 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    e[ch];....END;..
018050:  09 45 4E 44 20 49 6E 74 65 72 70 72 65 74 3B 0D    .END Interpret;.
018060:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 6C 69    ...PROCEDURE Fli
018070:  70 49 6E 73 65 72 74 3B 0D 0A 42 45 47 49 4E 0D    pInsert;..BEGIN.
018080:  0A 09 49 6E 73 65 72 74 4D 6F 64 65 3A 3D 4E 4F    ..InsertMode:=NO
018090:  54 20 49 6E 73 65 72 74 4D 6F 64 65 3B 0D 0A 09    T InsertMode;...
0180A0:  45 4E 44 20 46 6C 69 70 49 6E 73 65 72 74 3B 0D    END FlipInsert;.
0180B0:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65 6C    ...PROCEDURE Del
0180C0:  57 6F 72 64 3B 0D 0A 42 45 47 49 4E 0D 0A 09 46    Word;..BEGIN...F
0180D0:  69 6E 64 57 6F 72 64 28 46 41 4C 53 45 2C 54 52    indWord(FALSE,TR
0180E0:  55 45 29 3B 0D 0A 09 45 4E 44 20 44 65 6C 57 6F    UE);...END DelWo
0180F0:  72 64 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45    rd;....PROCEDURE
018100:  20 46 6F 72 77 61 72 64 57 6F 72 64 3B 0D 0A 42     ForwardWord;..B
018110:  45 47 49 4E 0D 0A 09 46 69 6E 64 57 6F 72 64 28    EGIN...FindWord(
018120:  46 41 4C 53 45 2C 46 41 4C 53 45 29 3B 0D 0A 09    FALSE,FALSE);...
018130:  45 4E 44 20 46 6F 72 77 61 72 64 57 6F 72 64 3B    END ForwardWord;
018140:  0D 0A 50 52 4F 43 45 44 55 52 45 20 42 61 63 6B    ..PROCEDURE Back
018150:  77 61 72 64 57 6F 72 64 3B 0D 0A 42 45 47 49 4E    wardWord;..BEGIN
018160:  0D 0A 09 46 69 6E 64 57 6F 72 64 28 54 52 55 45    ...FindWord(TRUE
018170:  2C 46 41 4C 53 45 29 3B 0D 0A 09 45 4E 44 20 42    ,FALSE);...END B
018180:  61 63 6B 77 61 72 64 57 6F 72 64 3B 0D 0A 0D 0A    ackwardWord;....
018190:  28 2A 09 49 6E 69 74 69 61 6C 69 73 65 20 61 20    (*.Initialise a 
0181A0:  6B 65 79 62 6F 61 72 64 20 64 69 73 70 61 74 63    keyboard dispatc
0181B0:  68 20 74 61 62 6C 65 73 2A 29 0D 0A 0D 0A 42 45    h tables*)....BE
0181C0:  47 49 4E 0D 0A 09 46 4F 52 20 63 68 3A 3D 30 78    GIN...FOR ch:=0x
0181D0:  20 54 4F 20 37 66 78 20 44 4F 20 4D 61 69 6E 54     TO 7fx DO MainT
0181E0:  61 62 6C 65 5B 63 68 5D 3A 3D 42 65 6C 6C 20 45    able[ch]:=Bell E
0181F0:  4E 44 3B 0D 0A 09 0D 0A 09 4D 61 69 6E 54 61 62    ND;......MainTab
018200:  73 20 69 6E 74 65 72 76 65 6E 65 2C 20 63 68 61    s intervene, cha
018210:  6E 67 65 20 73 6F 75 72 63 65 20 77 69 6E 64 6F    nge source windo
018220:  77 2A 29 0D 0A 09 57 48 49 4C 45 20 63 68 3D 30    w*)...WHILE ch=0
018230:  32 78 20 28 2A 43 54 52 4C 20 42 2A 29 20 44 4F    2x (*CTRL B*) DO
018240:  0D 0A 09 09 49 46 20 69 3E 3D 57 69 6E 64 6F 77    ....IF i>=Window
018250:  73 20 54 48 45 4E 20 69 3A 3D 31 20 45 4C 53 45    s THEN i:=1 ELSE
018260:  20 49 4E 43 28 69 29 20 45 4E 44 3B 0D 0A 09 09     INC(i) END;....
018270:  47 6F 74 6F 78 79 28 63 75 72 78 5B 69 5D 2C 63    Gotoxy(curx[i],c
018280:  75 72 79 5B 69 5D 29 3B 0D 0A 09 09 52 65 61 64    ury[i]);....Read
018290:  41 43 68 61 72 28 63 68 29 3B 0D 0A 09 09 45 4E    AChar(ch);....EN
0182A0:  44 3B 0D 0A 09 63 68 3A 3D 43 41 50 28 63 68 29    D;...ch:=CAP(ch)
0182B0:  3B 0D 0A 09 72 3A 3D 46 41 4C 53 45 3B 0D 0A 09    ;...r:=FALSE;...
0182C0:  69 3A 3D 57 69 6E 64 6F 77 46 69 6C 65 5B 69 5D    i:=WindowFile[i]
0182D0:  3B 0D 0A 09 43 41 53 45 20 63 68 20 4F 46 0D 0A    ;...CASE ch OF..
0182E0:  09 09 27 43 27 2C 30 33 78 3A 62 3A 3D 42 6C 6F    ..'C',03x:b:=Blo
0182F0:  63 6B 43 6F 70 79 28 46 69 6C 65 73 5B 69 5D 2C    ckCopy(Files[i],
018300:  46 69 6C 65 73 5B 43 75 72 72 65 6E 74 46 69 6C    Files[CurrentFil
018310:  65 5D 29 3B 0D 0A 09 09 09 7C 0D 0A 09 09 27 59    e]);.....|....'Y
018320:  27 2C 31 39 78 3A 62 3A 3D 44 65 6C 41 42 6C 6F    ',19x:b:=DelABlo
018330:  63 6B 28 69 29 3B 0D 0A 09 09 09 7C 0D 0A 09 09    ck(i);.....|....
018340:  27 56 27 2C 31 36 78 3A 62 3A 3D 42 6C 6F 63 6B    'V',16x:b:=Block
018350:  43 6F 70 79 28 46 69 6C 65 73 5B 69 5D 2C 46 69    Copy(Files[i],Fi
018360:  6C 65 73 5B 43 75 72 72 65 6E 74 46 69 6C 65 5D    les[CurrentFile]
018370:  29 3B 0D 0A 09 09 09 49 46 20 62 20 20 54 48 45    );.....IF b  THE
018380:  4E 20 62 3A 3D 44 65 6C 41 42 6C 6F 63 6B 28 69    N b:=DelABlock(i
018390:  29 20 45 4E 44 3B 0D 0A 09 09 09 7C 0D 0A 09 09    ) END;.....|....
0183A0:  45 4C 53 45 20 0D 0A 09 09 09 62 3A 3D 20 4C 61    ELSE .....b:= La
0183B0:  62 65 6C 4F 70 28 46 69 6C 65 73 5B 43 75 72 72    belOp(Files[Curr
0183C0:  65 6E 74 46 69 6C 65 5D 2C 54 52 55 45 2C 63 68    entFile],TRUE,ch
0183D0:  29 3B 0D 0A 09 09 09 72 3A 3D 54 52 55 45 3B 0D    );.....r:=TRUE;.
0183E0:  0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 62 20 54    ...END;...IF b T
0183F0:  48 45 4E 0D 0A 09 09 49 46 20 4E 4F 54 20 72 20    HEN....IF NOT r 
018400:  6C 65 5B 31 62 78 5D 3A 3D 45 73 63 61 70 65 3B    le[1bx]:=Escape;
018410:  0D 0A 0D 0A 09 28 2A 09 70 72 69 6E 74 61 62 6C    .....(*.printabl
018420:  65 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65    e characters are
018430:  20 69 6E 73 65 72 74 65 64 20 61 73 20 69 73 20     inserted as is 
018440:  2A 29 0D 0A 0D 0A 09 46 4F 52 20 63 68 3A 3D 27    *).....FOR ch:='
018450:  20 27 20 54 4F 20 27 7E 27 20 44 4F 20 4D 61 69     ' TO '~' DO Mai
018460:  6E 54 61 62 6C 65 5B 63 68 5D 3A 3D 49 6E 73 43    nTable[ch]:=InsC
018470:  68 61 72 20 45 4E 44 3B 0D 0A 09 4D 61 69 6E 54    har END;...MainT
018480:  61 62 6C 65 5B 30 64 78 5D 3A 3D 49 6E 73 43 68    able[0dx]:=InsCh
018490:  61 72 3B 0D 0A 09 4D 61 69 6E 54 61 62 6C 65 5B    ar;...MainTable[
0184A0:  30 39 78 5D 3A 3D 49 6E 73 43 68 61 72 3B 0D 0A    09x]:=InsChar;..
0184B0:  0D 0A 09 28 2A 09 63 75 72 73 6F 72 20 63 6F 6E    ...(*.cursor con
0184C0:  74 72 6F 6C 20 6B 65 79 73 2A 29 0D 0A 0D 0A 09    trol keys*).....
0184D0:  4D 61 69 6E 54 61 62 6C 65 5B 31 33 78 5D 3A 3D    MainTable[13x]:=
0184E0:  4C 65 66 74 3B 0D 0A 09 4D 61 69 6E 54 61 62 6C    Left;...MainTabl
0184F0:  65 5B 31 38 78 5D 3A 3D 44 6F 77 6E 3B 0D 0A 09    e[18x]:=Down;...
018500:  4D 61 69 6E 54 61 62 6C 65 5B 30 34 78 5D 3A 3D    MainTable[04x]:=
018510:  52 69 67 68 74 3B 0D 0A 09 4D 61 69 6E 54 61 62    Right;...MainTab
018520:  6C 65 5B 30 35 78 5D 3A 3D 55 70 3B 0D 0A 0D 0A    le[05x]:=Up;....
018530:  09 28 2A 09 4F 74 68 65 72 20 63 6F 6E 74 72 6F    .(*.Other contro
018540:  6C 20 6B 65 79 73 2A 29 0D 0A 0D 0A 09 4D 61 69    l keys*).....Mai
018550:  6E 54 61 62 6C 65 5B 30 37 78 5D 3A 3D 44 65 6C    nTable[07x]:=Del
018560:  4F 6E 65 43 68 61 72 3B 09 28 2A 43 74 72 6C 20    OneChar;.(*Ctrl 
018570:  47 2A 29 0D 0A 09 4D 61 69 6E 54 61 62 6C 65 5B    G*)...MainTable[
018580:  31 39 78 5D 3A 3D 44 65 6C 46 75 6C 6C 4C 69 6E    19x]:=DelFullLin
018590:  65 3B 09 28 2A 43 74 72 6C 20 59 2A 29 0D 0A 09    e;.(*Ctrl Y*)...
0185A0:  4D 61 69 6E 54 61 62 6C 65 5B 31 36 78 5D 3A 3D    MainTable[16x]:=
0185B0:  46 6C 69 70 49 6E 73 65 72 74 3B 09 28 2A 43 74    FlipInsert;.(*Ct
0185C0:  72 6C 20 56 2A 29 0D 0A 09 4D 61 69 6E 54 61 62    rl V*)...MainTab
0185D0:  6C 65 5B 30 65 78 5D 3A 3D 42 72 65 61 6B 4C 69    le[0ex]:=BreakLi
0185E0:  6E 65 3B 09 28 2A 43 74 72 6C 20 4E 2A 29 0D 0A    ne;.(*Ctrl N*)..
0185F0:  09 4D 61 69 6E 54 61 62 6C 65 5B 30 38 78 5D 3A    .MainTable[08x]:
018600:  54 48 45 4E 20 52 65 44 69 73 70 6C 61 79 3B 53    THEN ReDisplay;S
018610:  65 74 55 70 64 61 74 65 64 20 45 4E 44 3B 0D 0A    etUpdated END;..
018620:  09 45 4C 53 45 0D 0A 09 09 49 46 20 72 20 54 48    .ELSE....IF r TH
018630:  45 4E 20 45 72 72 6F 72 4D 65 73 73 61 67 65 28    EN ErrorMessage(
018640:  27 42 61 64 20 6C 61 62 65 6C 27 2C 27 20 27 29    'Bad label',' ')
018650:  3B 0D 0A 09 09 45 4C 53 45 20 45 72 72 6F 72 4D    ;....ELSE ErrorM
018660:  65 73 73 61 67 65 28 27 42 6C 6F 63 6B 20 55 6E    essage('Block Un
018670:  64 65 66 69 6E 65 64 27 2C 27 20 27 29 20 45 4E    defined',' ') EN
018680:  44 3B 0D 0A 09 09 47 6F 74 6F 78 79 28 54 68 69    D;....Gotoxy(Thi
018690:  73 78 2C 54 68 69 73 79 29 3B 0D 0A 09 09 45 4E    sx,Thisy);....EN
0186A0:  44 3B 0D 0A 09 45 4E 44 20 44 65 66 4C 61 62 65    D;...END DefLabe
0186B0:  6C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4D 6F    l;..PROCEDURE Mo
0186C0:  76 65 54 6F 45 72 72 6F 72 3B 0D 0A 50 52 4F 43    veToError;..PROC
0186D0:  45 44 55 52 45 20 47 6F 74 6F 45 72 72 6F 72 28    EDURE GotoError(
0186E0:  69 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45    i:CARDINAL);..BE
0186F0:  47 49 4E 0D 0A 09 49 46 20 69 3C 45 72 72 6F 72    GIN...IF i<Error
018700:  43 6F 75 6E 74 20 54 48 45 4E 20 45 72 72 6F 72    Count THEN Error
018710:  4F 72 64 69 6E 61 6C 3A 3D 69 3B 44 69 73 70 6C    Ordinal:=i;Displ
018720:  61 79 45 72 72 6F 72 0D 0A 09 45 4C 53 45 0D 0A    ayError...ELSE..
018730:  09 09 45 72 72 6F 72 4D 65 73 73 61 67 65 28 27    ..ErrorMessage('
018740:  20 4E 6F 20 73 75 63 68 20 65 72 72 6F 72 20 27     No such error '
018750:  2C 27 20 27 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    ,' ');....END;..
018760:  09 45 4E 44 20 47 6F 74 6F 45 72 72 6F 72 3B 0D    .END GotoError;.
018770:  0A 0D 0A 42 45 47 49 4E 0D 0A 09 52 65 61 64 41    ...BEGIN...ReadA
018780:  43 68 61 72 28 63 68 29 3B 0D 0A 09 63 68 3A 3D    Char(ch);...ch:=
018790:  43 41 50 28 63 68 29 3B 0D 0A 09 43 41 53 45 20    CAP(ch);...CASE 
0187A0:  63 68 20 4F 46 0D 0A 09 09 27 4E 27 2C 30 65 78    ch OF....'N',0ex
0187B0:  3A 47 6F 74 6F 45 72 72 6F 72 28 45 72 72 6F 72    :GotoError(Error
0187C0:  4F 72 64 69 6E 61 6C 2B 31 29 7C 0D 0A 09 09 27    Ordinal+1)|....'
0187D0:  50 27 2C 31 30 78 3A 47 6F 74 6F 45 72 72 6F 72    P',10x:GotoError
0187E0:  28 45 72 72 6F 72 4F 72 64 69 6E 61 6C 2D 31 29    (ErrorOrdinal-1)
0187F0:  7C 0D 0A 09 09 27 43 27 2C 30 33 78 3A 47 6F 74    |....'C',03x:Got
018800:  3D 4C 65 66 74 3B 09 09 28 2A 43 74 72 6C 20 48    =Left;..(*Ctrl H
018810:  20 28 42 61 63 6B 73 70 61 63 65 29 2A 29 0D 0A     (Backspace)*)..
018820:  09 4D 61 69 6E 54 61 62 6C 65 5B 31 61 78 5D 3A    .MainTable[1ax]:
018830:  3D 53 63 72 6F 6C 6C 44 6F 77 6E 3B 09 28 2A 43    =ScrollDown;.(*C
018840:  74 72 6C 20 5A 2A 29 0D 0A 09 4D 61 69 6E 54 61    trl Z*)...MainTa
018850:  62 6C 65 5B 30 33 78 5D 3A 3D 44 6F 77 6E 53 63    ble[03x]:=DownSc
018860:  72 65 65 6E 3B 09 28 2A 43 74 72 6C 20 43 2A 29    reen;.(*Ctrl C*)
018870:  0D 0A 09 4D 61 69 6E 54 61 62 6C 65 5B 31 32 78    ...MainTable[12x
018880:  5D 3A 3D 55 70 53 63 72 65 65 6E 3B 09 28 2A 43    ]:=UpScreen;.(*C
018890:  74 72 6C 20 52 2A 29 0D 0A 09 4D 61 69 6E 54 61    trl R*)...MainTa
0188A0:  62 6C 65 5B 31 34 78 5D 3A 3D 44 65 6C 57 6F 72    ble[14x]:=DelWor
0188B0:  64 3B 09 28 2A 43 74 72 6C 20 54 2A 29 0D 0A 09    d;.(*Ctrl T*)...
0188C0:  4D 61 69 6E 54 61 62 6C 65 5B 30 36 78 5D 3A 3D    MainTable[06x]:=
0188D0:  46 6F 72 77 61 72 64 57 6F 72 64 3B 09 28 2A 43    ForwardWord;.(*C
0188E0:  74 72 6C 20 46 2A 29 0D 0A 09 4D 61 69 6E 54 61    trl F*)...MainTa
0188F0:  62 6C 65 5B 30 61 78 5D 3A 3D 45 73 63 61 70 65    ble[0ax]:=Escape
018900:  3B 09 09 28 2A 74 72 65 61 74 20 6C 69 6E 65 20    ;..(*treat line 
018910:  66 65 65 64 20 61 73 20 69 66 20 65 73 63 61 70    feed as if escap
018920:  65 2A 29 0D 0A 09 4D 61 69 6E 54 61 62 6C 65 5B    e*)...MainTable[
018930:  30 31 78 5D 3A 3D 42 61 63 6B 77 61 72 64 57 6F    01x]:=BackwardWo
018940:  72 64 3B 09 28 2A 43 74 72 6C 20 41 2A 29 0D 0A    rd;.(*Ctrl A*)..
018950:  09 4D 61 69 6E 54 61 62 6C 65 5B 31 31 78 5D 3A    .MainTable[11x]:
018960:  3D 51 75 69 63 6B 3B 09 09 28 2A 43 74 72 6C 20    =Quick;..(*Ctrl 
018970:  51 2A 29 0D 0A 09 4D 61 69 6E 54 61 62 6C 65 5B    Q*)...MainTable[
018980:  30 32 78 5D 3A 3D 57 69 6E 64 6F 77 3B 09 09 28    02x]:=Window;..(
018990:  2A 43 74 72 6C 20 42 2A 29 0D 0A 09 4D 61 69 6E    *Ctrl B*)...Main
0189A0:  54 61 62 6C 65 5B 31 37 78 5D 3A 3D 53 63 72 6F    Table[17x]:=Scro
0189B0:  6C 6C 55 70 3B 09 28 2A 43 74 72 6C 20 57 2A 29    llUp;.(*Ctrl W*)
0189C0:  0D 0A 09 4D 61 69 6E 54 61 62 6C 65 5B 30 62 78    ...MainTable[0bx
0189D0:  5D 3A 3D 44 65 66 4C 61 62 65 6C 3B 09 28 2A 43    ]:=DefLabel;.(*C
0189E0:  74 72 6C 20 4B 2A 29 0D 0A 09 4D 61 69 6E 54 61    trl K*)...MainTa
0189F0:  62 6C 65 5B 37 66 78 5D 3A 3D 44 65 6C 42 61 63    ble[7fx]:=DelBac
018A00:  6F 45 72 72 6F 72 28 45 72 72 6F 72 4F 72 64 69    oError(ErrorOrdi
018A10:  6E 61 6C 29 7C 0D 0A 09 09 27 30 27 2E 2E 27 39    nal)|....'0'..'9
018A20:  27 3A 47 6F 74 6F 45 72 72 6F 72 28 4F 52 44 28    ':GotoError(ORD(
018A30:  63 68 29 2D 4F 52 44 28 27 30 27 29 29 0D 0A 09    ch)-ORD('0'))...
018A40:  09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4D 6F 76 65    .END;...END Move
018A50:  54 6F 45 72 72 6F 72 3B 0D 0A 50 52 4F 43 45 44    ToError;..PROCED
018A60:  55 52 45 20 51 75 69 63 6B 3B 0D 0A 56 41 52 09    URE Quick;..VAR.
018A70:  46 69 72 73 74 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A    First:BOOLEAN;..
018A80:  42 45 47 49 4E 0D 0A 09 46 69 72 73 74 3A 3D 54    BEGIN...First:=T
018A90:  52 55 45 3B 0D 0A 09 52 65 61 64 41 43 68 61 72    RUE;...ReadAChar
018AA0:  28 63 68 29 3B 0D 0A 09 63 68 3A 3D 43 41 50 28    (ch);...ch:=CAP(
018AB0:  63 68 29 3B 0D 0A 09 49 46 20 50 61 72 56 61 6C    ch);...IF ParVal
018AC0:  75 65 3D 30 20 54 48 45 4E 20 50 61 72 56 61 6C    ue=0 THEN ParVal
018AD0:  75 65 3A 3D 31 20 45 4E 44 3B 0D 0A 09 57 48 49    ue:=1 END;...WHI
018AE0:  4C 45 20 50 61 72 56 61 6C 75 65 3E 30 20 44 4F    LE ParValue>0 DO
018AF0:  0D 0A 09 20 20 43 41 53 45 20 63 68 20 4F 46 0D    ...  CASE ch OF.
018B00:  0A 09 20 20 20 20 27 45 27 2C 30 35 78 3A 4D 6F    ..    'E',05x:Mo
018B10:  76 65 54 6F 45 72 72 6F 72 7C 0D 0A 09 20 20 20    veToError|...   
018B20:  20 27 59 27 2C 31 39 78 3A 44 65 6C 54 6F 45 4F     'Y',19x:DelToEO
018B30:  4C 7C 0D 0A 09 20 20 20 20 27 44 27 2C 30 34 78    L|...    'D',04x
018B40:  3A 46 61 72 52 69 67 68 74 7C 0D 0A 09 20 20 20    :FarRight|...   
018B50:  20 27 53 27 2C 31 33 78 3A 46 61 72 4C 65 66 74     'S',13x:FarLeft
018B60:  7C 0D 0A 09 20 20 20 20 27 52 27 2C 31 32 78 3A    |...    'R',12x:
018B70:  54 6F 70 7C 0D 0A 09 20 20 20 20 27 43 27 2C 30    Top|...    'C',0
018B80:  33 78 3A 42 6F 74 74 6F 6D 7C 0D 0A 09 20 20 20    3x:Bottom|...   
018B90:  20 27 46 27 2C 30 36 78 3A 49 46 20 46 69 72 73     'F',06x:IF Firs
018BA0:  74 20 54 48 45 4E 20 46 69 6E 64 20 45 4C 53 45    t THEN Find ELSE
018BB0:  20 44 6F 46 69 6E 64 20 45 4E 44 7C 20 0D 0A 09     DoFind END| ...
018BC0:  20 20 20 20 27 41 27 2C 30 31 78 3A 49 46 20 46        'A',01x:IF F
018BD0:  69 72 73 74 20 54 48 45 4E 20 52 65 70 6C 61 63    irst THEN Replac
018BE0:  65 20 45 4C 53 45 20 44 6F 46 69 6E 64 20 45 4E    e ELSE DoFind EN
018BF0:  44 7C 0D 0A 09 20 20 20 20 27 47 27 2C 30 37 78    D|...    'G',07x
018C00:  6B 3B 09 28 2A 44 65 6C 20 2A 29 0D 0A 09 4D 61    k;.(*Del *)...Ma
018C10:  69 6E 54 61 62 6C 65 5B 30 63 78 5D 3A 3D 44 6F    inTable[0cx]:=Do
018C20:  46 69 6E 64 3B 09 09 28 2A 43 74 72 6C 20 4C 2A    Find;..(*Ctrl L*
018C30:  29 0A 09 4D 61 69 6E 54 61 62 6C 65 5B 31 66 78    )..MainTable[1fx
018C40:  5D 3A 3D 44 65 6C 42 61 63 6B 3B 09 28 2A 5E 2D    ]:=DelBack;.(*^-
018C50:  20 6F 6E 20 4F 73 62 6F 72 6E 65 20 31 2A 29 0D     on Osborne 1*).
018C60:  0A 0D 0A 09 28 2A 09 54 68 65 20 6E 65 78 74 20    ....(*.The next 
018C70:  6B 65 79 2C 20 20 61 73 73 69 67 6E 65 64 20 74    key,  assigned t
018C80:  6F 20 45 6E 64 69 6E 74 65 72 70 72 65 74 20 69    o Endinterpret i
018C90:  73 20 63 61 6C 6C 65 64 2C 0D 0A 09 09 27 4D 65    s called,....'Me
018CA0:  6E 75 27 20 69 6E 20 74 68 65 20 64 6F 63 75 6D    nu' in the docum
018CB0:  65 6E 74 61 74 69 6F 6E 2E 20 54 68 61 74 20 69    entation. That i
018CC0:  73 2C 20 74 6F 20 70 72 6F 63 65 73 73 20 61 20    s, to process a 
018CD0:  6D 65 6E 75 2C 0D 0A 09 09 77 65 20 64 72 6F 70    menu,....we drop
018CE0:  20 6F 75 74 20 6F 66 20 65 64 69 74 20 6D 6F 64     out of edit mod
018CF0:  65 2E 20 54 68 65 20 63 61 6C 6C 69 6E 67 20 72    e. The calling r
018D00:  6F 75 74 69 6E 65 20 28 4D 65 29 20 74 68 65 20    outine (Me) the 
018D10:  63 61 6C 6C 73 0D 0A 09 09 74 68 65 20 6D 65 6E    calls....the men
018D20:  75 20 72 6F 75 74 69 6E 65 20 2D 20 6E 6F 74 20    u routine - not 
018D30:  74 68 69 73 20 6D 6F 64 75 6C 65 2A 29 0D 0A 0D    this module*)...
018D40:  0A 09 4D 61 69 6E 54 61 62 6C 65 5B 30 66 78 5D    ..MainTable[0fx]
018D50:  3A 3D 45 6E 64 69 6E 74 65 72 70 72 65 74 3B 09    :=Endinterpret;.
018D60:  28 2A 43 74 72 6C 20 4F 2A 29 0D 0A 09 45 4E 44    (*Ctrl O*)...END
018D70:  20 4B 65 79 62 6F 61 72 64 2E 0D 0A 1A 1A 1A 1A     Keyboard.......
018D80:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
018D90:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
018DA0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
018DB0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
018DC0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
018DD0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
018DE0:  1A 1A 1A 1A 1A 1A 1A 1A 44 4F 43 20 00 00 00 00    ........DOC ....
018DF0:  00 00 00 00 00 00 5B B6 4A 0D 58 0E 53 63 00 00    ......[.J.X.Sc..
018E00:  3A 4E 6F 42 65 6C 6C 3A 3D 4E 4F 54 20 4E 6F 42    :NoBell:=NOT NoB
018E10:  65 6C 6C 7C 0D 0A 09 20 20 20 20 27 4B 27 2C 27    ell|...    'K','
018E20:  42 27 2C 27 30 27 2E 2E 27 39 27 3A 47 6F 54 6F    B','0'..'9':GoTo
018E30:  4C 61 62 65 6C 28 63 68 29 3B 0D 0A 09 20 09 45    Label(ch);... .E
018E40:  4E 44 3B 0D 0A 09 20 20 46 69 72 73 74 3A 3D 46    ND;...  First:=F
018E50:  41 4C 53 45 3B 0D 0A 09 20 20 44 45 43 28 50 61    ALSE;...  DEC(Pa
018E60:  72 56 61 6C 75 65 29 3B 0D 0A 09 20 20 45 4E 44    rValue);...  END
018E70:  3B 0D 0A 09 45 4E 44 20 51 75 69 63 6B 3B 0D 0A    ;...END Quick;..
018E80:  50 52 4F 43 45 44 55 52 45 20 57 69 6E 64 6F 77    PROCEDURE Window
018E90:  3B 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41    ;..VAR.i:CARDINA
018EA0:  4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 69 3A 3D 43    L;..BEGIN...i:=C
018EB0:  75 72 72 65 6E 74 57 69 6E 64 6F 77 2B 31 3B 0D    urrentWindow+1;.
018EC0:  0A 09 49 46 20 69 3E 57 69 6E 64 6F 77 73 20 54    ..IF i>Windows T
018ED0:  48 45 4E 20 69 3A 3D 31 20 45 4E 44 3B 0D 0A 09    HEN i:=1 END;...
018EE0:  43 68 61 6E 67 65 57 69 6E 64 6F 77 28 69 29 3B    ChangeWindow(i);
018EF0:  0D 0A 09 52 65 44 69 73 70 6C 61 79 3B 0D 0A 09    ...ReDisplay;...
018F00:  45 4E 44 20 57 69 6E 64 6F 77 3B 0D 0A 50 52 4F    END Window;..PRO
018F10:  43 45 44 55 52 45 20 44 65 6C 42 61 63 6B 3B 0D    CEDURE DelBack;.
018F20:  0A 42 45 47 49 4E 0D 0A 09 4C 65 66 74 3B 0D 0A    .BEGIN...Left;..
018F30:  09 49 46 20 4D 6F 76 65 64 4F 4B 20 54 48 45 4E    .IF MovedOK THEN
018F40:  20 44 65 6C 4F 6E 65 43 68 61 72 20 45 4E 44 3B     DelOneChar END;
018F50:  0D 0A 09 45 4E 44 20 44 65 6C 42 61 63 6B 3B 0D    ...END DelBack;.
018F60:  0A 50 52 4F 43 45 44 55 52 45 20 49 6E 74 65 72    .PROCEDURE Inter
018F70:  70 72 65 74 3B 0D 0A 0D 0A 28 2A 09 53 74 61 72    pret;....(*.Star
018F80:  74 20 6B 65 79 62 6F 61 72 64 20 69 6E 74 65 72    t keyboard inter
018F90:  70 72 65 74 61 74 69 6F 6E 2A 29 0D 0A 42 45 47    pretation*)..BEG
018FA0:  49 4E 0D 0A 09 52 65 73 65 74 53 63 72 65 65 6E    IN...ResetScreen
018FB0:  50 6F 73 3B 0D 0A 09 69 6E 74 65 72 70 72 65 74    Pos;...interpret
018FC0:  69 6E 67 3A 3D 54 52 55 45 3B 0D 0A 09 50 61 72    ing:=TRUE;...Par
018FD0:  56 61 6C 75 65 3A 3D 30 3B 0D 0A 09 57 48 49 4C    Value:=0;...WHIL
018FE0:  45 20 69 6E 74 65 72 70 72 65 74 69 6E 67 20 44    E interpreting D
018FF0:  4F 0D 0A 09 09 52 65 61 64 41 43 68 61 72 28 63    O....ReadAChar(c
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:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019110:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019120:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019130:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019140:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019150:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019160:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019170:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019180:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019190:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0191A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0191B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0191C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0191D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0191E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0191F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019200:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019210:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019220:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019230:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019240:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019250:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019260:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019270:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019280:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019290:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0192A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0192B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0192C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0192D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0192E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0192F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
019300:  61 63 72 6F 50 6F 69 6E 74 3B 0D 0A 09 4C 65 61    acroPoint;...Lea
019310:  72 6E 63 68 3A 43 48 41 52 3B 0D 0A 09 4C 65 61    rnch:CHAR;...Lea
019320:  72 6E 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3B 0D    rnLen:CARDINAL;.
019330:  0A 09 4C 65 61 72 6E 69 6E 67 3A 42 4F 4F 4C 45    ..Learning:BOOLE
019340:  41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 54 65 78 74    AN=FALSE;...Text
019350:  3A 41 52 52 41 59 5B 31 2E 2E 36 30 5D 20 4F 46    :ARRAY[1..60] OF
019360:  20 43 48 41 52 3B 0D 0A 09 69 3A 43 41 52 44 49     CHAR;...i:CARDI
019370:  4E 41 4C 3B 0D 0A 09 4B 65 79 53 65 71 3A 41 52    NAL;...KeySeq:AR
019380:  52 41 59 5B 31 2E 2E 31 30 5D 20 4F 46 20 43 48    RAY[1..10] OF CH
019390:  41 52 3B 0D 0A 09 4B 65 79 43 68 61 69 6E 42 61    AR;...KeyChainBa
0193A0:  73 65 3A 50 4B 65 79 43 68 61 69 6E 3D 4E 49 4C    se:PKeyChain=NIL
0193B0:  3B 09 28 2A 62 61 73 65 20 6F 66 20 74 61 62 6C    ;.(*base of tabl
0193C0:  65 20 6F 66 20 6B 65 79 20 64 65 66 73 2A 29 0D    e of key defs*).
0193D0:  0A 09 4C 61 73 74 4B 65 79 50 6F 73 2C 4B 65 79    ..LastKeyPos,Key
0193E0:  50 6F 73 3A 50 4B 65 79 43 68 61 69 6E 3B 09 28    Pos:PKeyChain;.(
0193F0:  2A 70 6F 69 6E 74 65 72 73 20 75 73 65 64 20 66    *pointers used f
019400:  6F 72 20 73 65 61 72 63 68 69 6E 67 2A 29 0D 0A    or searching*)..
019410:  09 4C 65 61 72 6E 4B 65 79 3A 50 4B 65 79 43 68    .LearnKey:PKeyCh
019420:  61 69 6E 3B 09 09 28 2A 70 6F 69 6E 74 65 72 20    ain;..(*pointer 
019430:  74 6F 20 6B 65 79 20 62 65 69 6E 67 20 64 65 66    to key being def
019440:  69 6E 65 64 2A 29 0D 0A 0D 0A 09 28 2A 09 6B 65    ined*).....(*.ke
019450:  65 70 20 61 20 63 69 72 63 75 6C 61 72 20 62 75    ep a circular bu
019460:  66 66 65 72 20 6F 66 20 63 68 61 72 61 63 74 65    ffer of characte
019470:  72 73 20 77 68 69 6C 65 20 6D 61 74 63 68 69 6E    rs while matchin
019480:  67 20 69 73 0D 0A 09 09 68 61 70 70 65 6E 69 6E    g is....happenin
019490:  67 2A 29 0D 0A 0D 0A 09 69 6E 3A 43 41 52 44 49    g*).....in:CARDI
0194A0:  4E 41 4C 3D 31 3B 0D 0A 09 6F 75 74 3A 43 41 52    NAL=1;...out:CAR
0194B0:  44 49 4E 41 4C 3D 31 3B 0D 0A 09 6C 6F 6F 6B 3A    DINAL=1;...look:
0194C0:  43 41 52 44 49 4E 41 4C 3B 0D 0A 09 42 75 66 66    CARDINAL;...Buff
0194D0:  65 72 3A 41 52 52 41 59 5B 31 2E 2E 31 31 5D 20    er:ARRAY[1..11] 
0194E0:  4F 46 20 43 48 41 52 3B 09 0D 0A 09 53 68 6F 77    OF CHAR;....Show
0194F0:  43 68 61 6E 67 65 3A 42 4F 4F 4C 45 41 4E 3B 0D    Change:BOOLEAN;.
019500:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
019510:  45 20 4D 61 63 72 6F 73 3B 0D 0A 0D 0A 28 2A 09    E Macros;....(*.
019520:  41 20 73 69 6D 70 6C 65 20 6D 61 63 72 6F 20 70    A simple macro p
019530:  72 6F 63 65 73 73 6F 72 20 66 6F 72 20 20 74 68    rocessor for  th
019540:  65 20 65 64 69 74 6F 72 0D 0A 0D 0A 09 43 61 6E    e editor.....Can
019550:  20 70 72 6F 62 61 62 6C 79 20 62 65 20 65 61 73     probably be eas
019560:  69 6C 79 20 68 61 63 6B 65 64 20 66 6F 72 20 6F    ily hacked for o
019570:  74 68 65 72 20 70 75 72 70 6F 73 65 73 2A 29 0D    ther purposes*).
019580:  0A 0D 0A 56 41 52 09 46 6F 75 6E 64 3A 42 4F 4F    ...VAR.Found:BOO
019590:  4C 45 41 4E 3D 54 52 55 45 3B 0D 0A 0D 0A 28 2A    LEAN=TRUE;....(*
0195A0:  09 46 6F 75 6E 64 20 69 73 20 61 20 76 61 72 69    .Found is a vari
0195B0:  61 62 6C 65 20 77 68 69 63 68 2C 20 69 66 20 73    able which, if s
0195C0:  65 74 20 74 6F 20 66 61 6C 73 65 2C 20 77 69 6C    et to false, wil
0195D0:  6C 20 61 62 6F 72 74 20 61 6C 6C 0D 0A 09 6D 61    l abort all...ma
0195E0:  63 72 6F 73 20 2A 29 0D 0A 50 52 4F 43 45 44 55    cros *)..PROCEDU
0195F0:  52 45 20 4C 65 61 72 6E 4D 61 63 72 6F 3B 0D 0A    RE LearnMacro;..
019600:  50 52 4F 43 45 44 55 52 45 20 44 65 66 4D 61 63    PROCEDURE DefMac
019610:  72 6F 3B 0D 0A 0D 0A 28 2A 09 64 65 66 69 6E 65    ro;....(*.define
019620:  20 61 20 6D 61 63 72 6F 20 2A 29 0D 0A 0D 0A 50     a macro *)....P
019630:  52 4F 43 45 44 55 52 45 20 52 65 61 64 41 43 68    ROCEDURE ReadACh
019640:  61 72 28 56 41 52 20 63 68 3A 43 48 41 52 29 3B    ar(VAR ch:CHAR);
019650:  0D 0A 0D 0A 28 2A 09 72 65 61 64 20 6E 65 78 74    ....(*.read next
019660:  20 63 68 61 72 61 63 74 65 72 20 2D 20 66 72 6F     character - fro
019670:  6D 20 6D 61 63 72 6F 20 69 66 20 6F 6E 65 20 61    m macro if one a
019680:  63 74 69 76 65 0D 0A 09 09 09 20 20 20 20 2D 20    ctive.....    - 
019690:  66 72 6F 6D 20 74 65 72 6D 69 6E 61 6C 20 69 66    from terminal if
0196A0:  20 6E 6F 74 09 2A 29 0D 0A 0D 0A 50 52 4F 43 45     not.*)....PROCE
0196B0:  44 55 52 45 20 4D 61 63 72 6F 28 63 68 3A 43 48    DURE Macro(ch:CH
0196C0:  41 52 3B 72 65 70 65 61 74 3A 49 4E 54 45 47 45    AR;repeat:INTEGE
0196D0:  52 29 3B 0D 0A 0D 0A 28 2A 09 73 74 61 72 74 20    R);....(*.start 
0196E0:  6D 61 63 72 6F 20 77 69 74 68 20 67 69 76 65 6E    macro with given
0196F0:  20 63 68 61 72 61 63 74 65 72 20 76 61 6C 75 65     character value
019700:  0A 50 52 4F 43 45 44 55 52 45 20 53 65 61 72 63    .PROCEDURE Searc
019710:  68 54 6F 4E 65 78 74 28 63 68 3A 43 48 41 52 29    hToNext(ch:CHAR)
019720:  3B 0D 0A 0D 0A 28 2A 09 53 65 61 72 63 68 20 66    ;....(*.Search f
019730:  6F 72 20 74 68 65 20 63 68 61 72 61 63 74 65 72    or the character
019740:  20 63 68 0D 0A 0D 0A 09 4B 65 79 50 6F 73 20 70     ch.....KeyPos p
019750:  6F 69 6E 74 73 20 74 6F 20 74 68 65 20 66 69 72    oints to the fir
019760:  73 74 20 74 61 62 6C 65 20 20 74 6F 20 65 78 61    st table  to exa
019770:  6D 69 6E 65 0D 0A 09 66 6F 72 20 61 20 6D 61 74    mine...for a mat
019780:  63 68 0D 0A 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09    ch..*)..BEGIN...
019790:  57 48 49 4C 45 20 28 4B 65 79 50 6F 73 3C 3E 4E    WHILE (KeyPos<>N
0197A0:  49 4C 29 20 41 4E 44 20 28 4B 65 79 50 6F 73 5E    IL) AND (KeyPos^
0197B0:  2E 63 68 3C 3E 63 68 29 20 44 4F 0D 0A 09 09 4B    .ch<>ch) DO....K
0197C0:  65 79 50 6F 73 3A 3D 4B 65 79 50 6F 73 5E 2E 4E    eyPos:=KeyPos^.N
0197D0:  65 78 74 41 6C 74 3B 0D 0A 09 09 45 4E 44 3B 0D    extAlt;....END;.
0197E0:  0A 09 45 4E 44 20 53 65 61 72 63 68 54 6F 4E 65    ..END SearchToNe
0197F0:  78 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 42    xt;..PROCEDURE B
019800:  75 69 6C 64 4B 65 79 53 65 71 3B 0D 0A 0D 0A 28    uildKeySeq;....(
019810:  2A 09 45 6E 74 65 72 20 61 20 6B 65 79 20 73 65    *.Enter a key se
019820:  71 75 65 6E 63 65 20 69 6E 74 6F 20 74 68 65 20    quence into the 
019830:  6B 65 79 20 73 65 71 75 65 6E 63 65 20 74 72 65    key sequence tre
019840:  65 0D 0A 0D 0A 09 4F 6E 20 65 6E 74 72 79 2C 20    e.....On entry, 
019850:  4B 65 79 53 65 71 20 63 6F 6E 74 61 69 6E 73 20    KeySeq contains 
019860:  73 65 71 75 65 6E 63 65 20 74 6F 20 62 75 69 6C    sequence to buil
019870:  64 0D 0A 0D 0A 09 4F 6E 20 65 78 69 74 2C 20 4B    d.....On exit, K
019880:  65 79 50 6F 73 20 70 6F 69 6E 74 73 20 74 6F 20    eyPos points to 
019890:  65 6E 74 72 79 20 66 6F 72 20 6D 61 63 72 6F 20    entry for macro 
0198A0:  70 6F 69 6E 74 65 72 2A 29 0D 0A 42 45 47 49 4E    pointer*)..BEGIN
0198B0:  0D 0A 09 69 3A 3D 31 3B 0D 0A 09 4B 65 79 50 6F    ...i:=1;...KeyPo
0198C0:  73 3A 3D 4B 65 79 43 68 61 69 6E 42 61 73 65 3B    s:=KeyChainBase;
0198D0:  0D 0A 09 4C 61 73 74 4B 65 79 50 6F 73 3A 3D 4E    ...LastKeyPos:=N
0198E0:  49 4C 3B 0D 0A 09 28 2A 20 46 69 72 73 74 20 73    IL;...(* First s
0198F0:  63 61 6E 20 64 6F 77 6E 20 63 6F 6D 6D 6F 6E 20    can down common 
019900:  0D 0A 09 28 6D 75 73 74 20 62 65 20 61 6C 70 68    ...(must be alph
019910:  61 29 2A 29 0D 0A 50 52 4F 43 45 44 55 52 45 20    a)*)..PROCEDURE 
019920:  53 74 6F 72 65 4D 61 63 72 6F 73 3B 0D 0A 50 52    StoreMacros;..PR
019930:  4F 43 45 44 55 52 45 20 50 72 69 6E 74 4D 61 63    OCEDURE PrintMac
019940:  72 6F 73 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    ros;..PROCEDURE 
019950:  43 68 65 63 6B 49 6E 74 65 72 72 75 70 74 28 29    CheckInterrupt()
019960:  3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 45 4E 44 20 4D    :BOOLEAN;..END M
019970:  61 63 72 6F 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A    acros...........
019980:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
019990:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0199A0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0199B0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0199C0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0199D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0199E0:  1A 1A 1A 1A 1A 30 30 20 4D 4F 44 20 00 00 00 00    .....00 MOD ....
0199F0:  00 00 00 00 00 00 9B 4C 01 0D D7 27 01 04 00 00    .......L...'....
019A00:  6D 69 6E 65 42 6C 6F 63 6B 0D 0A 09 45 4C 53 45    mineBlock...ELSE
019A10:  20 45 6E 74 72 79 4E 6F 3A 3D 36 30 30 30 30 20     EntryNo:=60000 
019A20:  45 4E 44 3B 0D 0A 09 49 46 20 45 6E 74 72 79 4E    END;...IF EntryN
019A30:  6F 3D 36 30 30 30 30 20 54 48 45 4E 0D 0A 09 09    o=60000 THEN....
019A40:  53 65 74 42 6C 6F 63 6B 28 64 61 74 66 69 6C 65    SetBlock(datfile
019A50:  2C 30 29 3B 0D 0A 09 09 42 6C 6F 63 6B 4E 6F 3A    ,0);....BlockNo:
019A60:  3D 30 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 48 49    =0....END;...WHI
019A70:  4C 45 20 45 6E 74 72 79 4E 6F 3D 36 30 30 30 30    LE EntryNo=60000
019A80:  20 44 4F 0D 0A 09 09 53 65 71 52 65 61 64 42 6C     DO....SeqReadBl
019A90:  6F 63 6B 28 64 61 74 66 69 6C 65 2C 41 44 52 28    ock(datfile,ADR(
019AA0:  42 75 66 66 65 72 29 2C 42 79 74 65 73 50 65 72    Buffer),BytesPer
019AB0:  42 6C 6F 63 6B 2C 72 65 70 6C 79 29 3B 0D 0A 09    Block,reply);...
019AC0:  09 49 46 20 72 65 70 6C 79 3C 3E 42 79 74 65 73    .IF reply<>Bytes
019AD0:  50 65 72 42 6C 6F 63 6B 20 54 48 45 4E 0D 0A 09    PerBlock THEN...
019AE0:  09 09 42 75 66 66 65 72 2E 45 6E 74 72 69 65 73    ..Buffer.Entries
019AF0:  3A 3D 31 3B 0D 0A 09 09 09 45 6E 74 72 79 4E 6F    :=1;.....EntryNo
019B00:  70 61 72 74 20 2A 29 0D 0A 0D 0A 09 57 48 49 4C    part *).....WHIL
019B10:  45 20 28 4B 65 79 50 6F 73 3C 3E 4E 49 4C 29 20    E (KeyPos<>NIL) 
019B20:  41 4E 44 20 20 28 4B 65 79 53 65 71 5B 69 5D 3C    AND  (KeySeq[i]<
019B30:  3E 27 20 27 29 20 44 4F 0D 0A 09 09 0D 0A 09 09    >' ') DO........
019B40:  53 65 61 72 63 68 54 6F 4E 65 78 74 28 4B 65 79    SearchToNext(Key
019B50:  53 65 71 5B 69 5D 29 3B 0D 0A 09 09 49 46 20 4B    Seq[i]);....IF K
019B60:  65 79 50 6F 73 3C 3E 4E 49 4C 20 54 48 45 4E 20    eyPos<>NIL THEN 
019B70:  0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09    .....INC(i);....
019B80:  09 4C 61 73 74 4B 65 79 50 6F 73 3A 3D 4B 65 79    .LastKeyPos:=Key
019B90:  50 6F 73 3B 0D 0A 09 09 09 4C 65 61 72 6E 4B 65    Pos;.....LearnKe
019BA0:  79 3A 3D 4B 65 79 50 6F 73 3B 0D 0A 09 09 09 4B    y:=KeyPos;.....K
019BB0:  65 79 50 6F 73 3A 3D 4B 65 79 50 6F 73 5E 2E 4E    eyPos:=KeyPos^.N
019BC0:  65 78 74 43 68 61 72 3B 0D 0A 09 09 09 45 4E 44    extChar;.....END
019BD0:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 4B    ;....END;...IF K
019BE0:  65 79 53 65 71 5B 69 5D 3D 27 20 27 20 54 48 45    eySeq[i]=' ' THE
019BF0:  4E 20 28 2A 6D 75 73 74 20 61 6C 72 65 61 64 79    N (*must already
019C00:  20 62 65 20 69 6E 20 74 61 62 6C 65 2A 29 0D 0A     be in table*)..
019C10:  09 09 52 45 54 55 52 4E 0D 0A 09 09 45 4E 44 3B    ..RETURN....END;
019C20:  0D 0A 09 0D 0A 09 28 2A 20 41 73 73 75 6D 69 6E    ......(* Assumin
019C30:  67 20 74 68 69 73 20 69 73 20 6E 6F 74 20 74 68    g this is not th
019C40:  65 20 66 69 72 73 74 20 65 6E 74 72 79 2C 20 4C    e first entry, L
019C50:  61 73 74 4B 65 79 50 6F 73 20 70 6F 69 6E 74 73    astKeyPos points
019C60:  0D 0A 09 20 20 20 74 6F 20 74 68 65 20 65 6E 74    ...   to the ent
019C70:  72 79 20 74 6F 20 77 68 69 63 68 20 77 65 20 73    ry to which we s
019C80:  68 6F 75 6C 64 20 61 74 74 61 63 68 20 74 68 69    hould attach thi
019C90:  73 20 6E 65 77 20 63 68 61 72 61 63 74 65 72 0D    s new character.
019CA0:  0A 09 2A 29 0D 0A 09 57 48 49 4C 45 20 20 28 4B    ..*)...WHILE  (K
019CB0:  65 79 53 65 71 5B 69 5D 3C 3E 27 20 27 29 20 44    eySeq[i]<>' ') D
019CC0:  4F 0D 0A 09 09 4E 45 57 28 4B 65 79 50 6F 73 29    O....NEW(KeyPos)
019CD0:  3B 0D 0A 09 09 57 49 54 48 20 4B 65 79 50 6F 73    ;....WITH KeyPos
019CE0:  5E 20 44 4F 0D 0A 09 09 09 63 68 3A 3D 4B 65 79    ^ DO.....ch:=Key
019CF0:  53 65 71 5B 69 5D 3B 0D 0A 09 09 09 4E 65 78 74    Seq[i];.....Next
019D00:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
019D10:  4F 44 55 4C 45 20 4D 61 63 72 6F 73 3B 0D 0A 46    ODULE Macros;..F
019D20:  52 4F 4D 09 44 6F 4D 65 6E 75 20 49 4D 50 4F 52    ROM.DoMenu IMPOR
019D30:  54 20 47 65 74 53 74 72 69 6E 67 2C 52 65 64 69    T GetString,Redi
019D40:  73 70 6C 61 79 3B 0D 0A 46 52 4F 4D 09 53 74 6F    splay;..FROM.Sto
019D50:  72 61 67 65 20 49 4D 50 4F 52 54 20 20 41 4C 4C    rage IMPORT  ALL
019D60:  4F 43 41 54 45 2C 44 45 41 4C 4C 4F 43 41 54 45    OCATE,DEALLOCATE
019D70:  3B 0D 0A 46 52 4F 4D 09 54 65 72 6D 69 6E 61 6C    ;..FROM.Terminal
019D80:  20 49 4D 50 4F 52 54 20 42 75 73 79 52 65 61 64     IMPORT BusyRead
019D90:  2C 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72 69    ,WriteString,Wri
019DA0:  74 65 4C 6E 2C 57 72 69 74 65 3B 0D 0A 46 52 4F    teLn,Write;..FRO
019DB0:  4D 09 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46    M.Files IMPORT F
019DC0:  49 4C 45 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B    ILE,SeqReadBlock
019DD0:  2C 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 4C    ,SeqWriteBlock,L
019DE0:  6F 6F 6B 75 70 2C 43 72 65 61 74 65 2C 43 6C 6F    ookup,Create,Clo
019DF0:  73 65 3B 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D    se;..FROM.SYSTEM
019E00:  20 49 4D 50 4F 52 54 20 41 44 52 2C 54 53 49 5A     IMPORT ADR,TSIZ
019E10:  45 3B 0D 0A 46 52 4F 4D 09 45 64 69 74 44 69 73    E;..FROM.EditDis
019E20:  70 6C 61 79 20 49 4D 50 4F 52 54 20 45 72 72 6F    play IMPORT Erro
019E30:  72 4D 65 73 73 61 67 65 3B 0D 0A 46 52 4F 4D 09    rMessage;..FROM.
019E40:  46 61 73 74 4D 6F 76 65 20 49 4D 50 4F 52 54 20    FastMove IMPORT 
019E50:  4D 6F 76 65 75 70 3B 0D 0A 46 52 4F 4D 09 53 63    Moveup;..FROM.Sc
019E60:  72 65 65 6E 44 75 20 49 4D 50 4F 52 54 20 4F 75    reenDu IMPORT Ou
019E70:  74 70 75 74 54 6F 53 63 72 65 65 6E 3B 0D 0A 43    tputToScreen;..C
019E80:  4F 4E 53 54 09 42 6C 6F 63 6B 4C 65 6E 3D 31 32    ONST.BlockLen=12
019E90:  38 3B 0D 0A 09 45 53 43 3D 31 62 78 3B 0D 0A 54    8;...ESC=1bx;..T
019EA0:  59 50 45 0D 0A 09 4B 65 79 44 65 66 3D 52 45 43    YPE...KeyDef=REC
019EB0:  4F 52 44 0D 0A 09 09 4C 65 6E 67 74 68 3A 5B 31    ORD....Length:[1
019EC0:  2E 2E 36 31 5D 3B 0D 0A 09 09 43 6F 6D 6D 43 68    ..61];....CommCh
019ED0:  61 72 73 3A 41 52 52 41 59 5B 31 2E 2E 32 30 5D    ars:ARRAY[1..20]
019EE0:  20 4F 46 20 43 48 41 52 3B 0D 0A 09 09 45 4E 44     OF CHAR;....END
019EF0:  3B 0D 0A 09 50 4B 65 79 44 65 66 3D 50 4F 49 4E    ;...PKeyDef=POIN
019F00:  43 68 61 72 3A 3D 4E 49 4C 3B 0D 0A 09 09 09 54    Char:=NIL;.....T
019F10:  65 72 6D 69 6E 61 74 6F 72 3A 3D 46 41 4C 53 45    erminator:=FALSE
019F20:  3B 0D 0A 09 09 09 49 46 20 4C 61 73 74 4B 65 79    ;.....IF LastKey
019F30:  50 6F 73 3C 3E 4E 49 4C 20 54 48 45 4E 0D 0A 09    Pos<>NIL THEN...
019F40:  09 09 09 4E 65 78 74 41 6C 74 3A 3D 4C 61 73 74    ...NextAlt:=Last
019F50:  4B 65 79 50 6F 73 5E 2E 4E 65 78 74 43 68 61 72    KeyPos^.NextChar
019F60:  3B 0D 0A 09 09 09 09 4C 61 73 74 4B 65 79 50 6F    ;......LastKeyPo
019F70:  73 5E 2E 4E 65 78 74 43 68 61 72 3A 3D 4B 65 79    s^.NextChar:=Key
019F80:  50 6F 73 3B 0D 0A 09 09 09 45 4C 53 45 0D 0A 09    Pos;.....ELSE...
019F90:  09 09 09 4E 65 78 74 41 6C 74 3A 3D 4B 65 79 43    ...NextAlt:=KeyC
019FA0:  68 61 69 6E 42 61 73 65 3B 0D 0A 09 09 09 09 4B    hainBase;......K
019FB0:  65 79 43 68 61 69 6E 42 61 73 65 3A 3D 4B 65 79    eyChainBase:=Key
019FC0:  50 6F 73 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A    Pos;......END;..
019FD0:  09 09 09 45 4E 44 3B 0D 0A 09 09 4C 61 73 74 4B    ...END;....LastK
019FE0:  65 79 50 6F 73 3A 3D 4B 65 79 50 6F 73 3B 0D 0A    eyPos:=KeyPos;..
019FF0:  09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 45 4E 44    ..INC(i);....END
01A000:  3B 0D 0A 09 4C 65 61 72 6E 4B 65 79 3A 3D 4B 65    ;...LearnKey:=Ke
01A010:  79 50 6F 73 3B 0D 0A 09 45 4E 44 20 42 75 69 6C    yPos;...END Buil
01A020:  64 4B 65 79 53 65 71 3B 20 0D 0A 0D 0A 50 52 4F    dKeySeq; ....PRO
01A030:  43 45 44 55 52 45 20 57 61 69 74 46 6F 72 43 68    CEDURE WaitForCh
01A040:  3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4E 4F    ;..BEGIN...IF NO
01A050:  54 20 53 68 6F 77 43 68 61 6E 67 65 20 54 48 45    T ShowChange THE
01A060:  4E 0D 0A 09 09 53 68 6F 77 43 68 61 6E 67 65 3A    N....ShowChange:
01A070:  3D 54 52 55 45 3B 0D 0A 09 09 4F 75 74 70 75 74    =TRUE;....Output
01A080:  54 6F 53 63 72 65 65 6E 28 54 52 55 45 29 3B 0D    ToScreen(TRUE);.
01A090:  0A 09 09 52 65 64 69 73 70 6C 61 79 3B 0D 0A 09    ...Redisplay;...
01A0A0:  09 45 4E 44 3B 0D 0A 09 52 45 50 45 41 54 0D 0A    .END;...REPEAT..
01A0B0:  09 09 42 75 73 79 52 65 61 64 28 63 68 29 3B 0D    ..BusyRead(ch);.
01A0C0:  0A 09 09 55 4E 54 49 4C 20 63 68 3C 3E 30 78 3B    ...UNTIL ch<>0x;
01A0D0:  0D 0A 09 45 4E 44 20 57 61 69 74 46 6F 72 43 68    ...END WaitForCh
01A0E0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68 65    ;..PROCEDURE Che
01A0F0:  63 6B 49 6E 74 65 72 72 75 70 74 28 29 3A 42 4F    ckInterrupt():BO
01A100:  54 45 52 20 54 4F 20 4B 65 79 44 65 66 3B 0D 0A    TER TO KeyDef;..
01A110:  09 4D 61 63 72 6F 50 6F 69 6E 74 3D 52 45 43 4F    .MacroPoint=RECO
01A120:  52 44 0D 0A 09 09 50 6F 73 3A 43 41 52 44 49 4E    RD....Pos:CARDIN
01A130:  41 4C 3B 0D 0A 09 09 44 65 66 3A 50 4B 65 79 44    AL;....Def:PKeyD
01A140:  65 66 3B 0D 0A 09 09 43 6F 75 6E 74 3A 49 4E 54    ef;....Count:INT
01A150:  45 47 45 52 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    EGER;....END;...
01A160:  50 4B 65 79 43 68 61 69 6E 3D 50 4F 49 4E 54 45    PKeyChain=POINTE
01A170:  52 20 54 4F 20 4B 65 79 43 68 61 69 6E 3B 0D 0A    R TO KeyChain;..
01A180:  09 4B 65 79 43 68 61 69 6E 3D 52 45 43 4F 52 44    .KeyChain=RECORD
01A190:  0D 0A 09 09 63 68 3A 43 48 41 52 3B 0D 0A 09 09    ....ch:CHAR;....
01A1A0:  4E 65 78 74 41 6C 74 3A 50 4B 65 79 43 68 61 69    NextAlt:PKeyChai
01A1B0:  6E 3B 20 28 2A 6E 65 78 74 20 61 6C 74 65 72 6E    n; (*next altern
01A1C0:  61 74 69 76 65 2A 29 0D 0A 09 09 43 41 53 45 20    ative*)....CASE 
01A1D0:  54 65 72 6D 69 6E 61 74 6F 72 3A 42 4F 4F 4C 45    Terminator:BOOLE
01A1E0:  41 4E 20 4F 46 0D 0A 09 09 09 54 52 55 45 3A 20    AN OF.....TRUE: 
01A1F0:  28 2A 74 65 72 6D 69 6E 61 74 65 73 20 61 20 6B    (*terminates a k
01A200:  65 79 20 73 65 71 75 65 6E 63 65 20 2A 29 0D 0A    ey sequence *)..
01A210:  09 09 09 09 44 65 66 3A 50 4B 65 79 44 65 66 7C    ....Def:PKeyDef|
01A220:  0D 0A 09 09 09 46 41 4C 53 45 3A 20 28 2A 69 6E    .....FALSE: (*in
01A230:  20 74 68 65 20 6D 6F 64 64 6C 65 20 6F 66 20 61     the moddle of a
01A240:  20 6B 65 79 20 73 65 71 75 65 6E 63 65 20 2A 29     key sequence *)
01A250:  0D 0A 09 09 09 09 4E 65 78 74 43 68 61 72 3A 50    ......NextChar:P
01A260:  4B 65 79 43 68 61 69 6E 0D 0A 09 09 09 45 4E 44    KeyChain.....END
01A270:  3B 20 28 2A 43 41 53 45 2A 29 0D 0A 09 09 45 4E    ; (*CASE*)....EN
01A280:  44 3B 28 2A 52 45 43 4F 52 44 2A 29 0D 0A 09 09    D;(*RECORD*)....
01A290:  09 09 0D 0A 56 41 52 0D 0A 09 63 68 3A 43 48 41    ....VAR...ch:CHA
01A2A0:  52 3B 0D 0A 09 43 6F 6D 6D 61 6E 64 73 3A 41 52    R;...Commands:AR
01A2B0:  52 41 59 5B 27 40 27 2E 2E 27 5A 27 5D 20 4F 46    RAY['@'..'Z'] OF
01A2C0:  20 50 4B 65 79 44 65 66 3B 0D 0A 09 4D 61 63 72     PKeyDef;...Macr
01A2D0:  6F 44 65 70 74 68 3A 43 41 52 44 49 4E 41 4C 3D    oDepth:CARDINAL=
01A2E0:  30 3B 0D 0A 09 4D 61 63 72 6F 53 74 61 63 6B 3A    0;...MacroStack:
01A2F0:  41 52 52 41 59 5B 31 2E 2E 35 5D 20 4F 46 20 4D    ARRAY[1..5] OF M
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:  4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 43 68 65    OLEAN;....(*.Che
01A410:  63 6B 20 74 68 65 20 6B 65 79 62 6F 61 72 64 20    ck the keyboard 
01A420:  66 6F 72 20 61 6E 20 69 6E 74 65 72 75 70 74 20    for an interupt 
01A430:  28 43 6F 6E 74 72 6F 6C 20 55 29 0D 0A 0D 0A 09    (Control U).....
01A440:  41 6C 73 6F 2C 20 69 66 20 45 73 63 61 70 65 20    Also, if Escape 
01A450:  68 61 73 20 62 65 65 6E 20 74 79 70 65 64 2C 20    has been typed, 
01A460:  73 74 6F 70 20 74 65 72 6D 69 6E 61 6C 20 6F 75    stop terminal ou
01A470:  74 70 75 74 0D 0A 09 75 6E 74 69 6C 20 61 6E 6F    tput...until ano
01A480:  74 68 65 72 20 63 68 61 72 61 63 74 65 72 20 69    ther character i
01A490:  73 20 74 79 70 65 64 2A 29 0D 0A 0D 0A 56 41 52    s typed*)....VAR
01A4A0:  09 63 68 31 3A 43 48 41 52 3B 0D 0A 42 45 47 49    .ch1:CHAR;..BEGI
01A4B0:  4E 0D 0A 09 42 75 73 79 52 65 61 64 28 63 68 31    N...BusyRead(ch1
01A4C0:  29 3B 0D 0A 09 43 41 53 45 20 63 68 31 20 4F 46    );...CASE ch1 OF
01A4D0:  20 0D 0A 09 09 31 35 78 3A 52 45 54 55 52 4E 20     ....15x:RETURN 
01A4E0:  54 52 55 45 0D 0A 09 09 20 20 20 20 7C 0D 0A 09    TRUE....    |...
01A4F0:  09 31 62 78 3A 53 68 6F 77 43 68 61 6E 67 65 3A    .1bx:ShowChange:
01A500:  3D 46 41 4C 53 45 3B 0D 0A 09 09 20 20 20 20 4F    =FALSE;....    O
01A510:  75 74 70 75 74 54 6F 53 63 72 65 65 6E 28 46 41    utputToScreen(FA
01A520:  4C 53 45 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    LSE);....END;...
01A530:  52 45 54 55 52 4E 20 46 41 4C 53 45 0D 0A 09 45    RETURN FALSE...E
01A540:  4E 44 20 43 68 65 63 6B 49 6E 74 65 72 72 75 70    ND CheckInterrup
01A550:  74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65    t;..PROCEDURE Ge
01A560:  74 41 43 68 61 72 28 56 41 52 20 63 68 31 3A 43    tAChar(VAR ch1:C
01A570:  48 41 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49    HAR);..BEGIN...I
01A580:  46 20 4D 61 63 72 6F 44 65 70 74 68 3D 30 20 54    F MacroDepth=0 T
01A590:  48 45 4E 0D 0A 09 09 57 61 69 74 46 6F 72 43 68    HEN....WaitForCh
01A5A0:  3B 0D 0A 09 09 63 68 31 3A 3D 63 68 3B 0D 0A 09    ;....ch1:=ch;...
01A5B0:  09 49 46 20 4C 65 61 72 6E 69 6E 67 20 41 4E 44    .IF Learning AND
01A5C0:  20 28 4C 65 61 72 6E 4C 65 6E 3C 48 49 47 48 28     (LearnLen<HIGH(
01A5D0:  54 65 78 74 29 29 20 54 48 45 4E 0D 0A 09 09 09    Text)) THEN.....
01A5E0:  49 4E 43 28 4C 65 61 72 6E 4C 65 6E 29 3B 0D 0A    INC(LearnLen);..
01A5F0:  09 09 09 54 65 78 74 5B 4C 65 61 72 6E 4C 65 6E    ...Text[LearnLen
01A600:  73 69 6F 6E 20 64 69 64 20 73 6F 29 2C 20 62 75    sion did so), bu
01A610:  74 20 74 68 61 74 20 77 6F 75 6C 64 20 70 72 65    t that would pre
01A620:  76 65 6E 74 20 74 68 65 0D 0A 09 09 09 09 75 73    vent the......us
01A630:  65 20 6F 66 20 72 65 70 65 61 74 20 63 6F 75 6E    e of repeat coun
01A640:  74 73 20 77 69 74 68 20 66 75 6E 63 74 69 6F 6E    ts with function
01A650:  2F 61 72 72 6F 77 0D 0A 09 09 09 09 6B 65 79 73    /arrow......keys
01A660:  2E 20 53 6F 20 69 6E 73 74 65 61 64 20 45 53 43    . So instead ESC
01A670:  20 40 20 69 73 20 72 65 74 75 72 6E 65 64 2C 20     @ is returned, 
01A680:  77 68 65 72 65 0D 0A 09 09 09 09 45 53 43 20 40    where......ESC @
01A690:  20 69 73 20 61 6C 77 61 79 73 20 74 68 65 20 6D     is always the m
01A6A0:  61 63 72 6F 20 77 65 20 6A 75 73 74 20 66 6F 75    acro we just fou
01A6B0:  6E 64 2A 29 0D 0A 0D 0A 09 09 09 09 43 6F 6D 6D    nd*)........Comm
01A6C0:  61 6E 64 73 5B 27 40 27 5D 3A 3D 44 65 66 3B 0D    ands['@']:=Def;.
01A6D0:  0A 09 09 09 09 53 70 65 63 69 61 6C 53 65 71 75    .....SpecialSequ
01A6E0:  65 6E 63 65 3A 3D 54 52 55 45 3B 0D 0A 09 09 09    ence:=TRUE;.....
01A6F0:  09 52 65 73 75 6C 74 3A 3D 45 53 43 3B 0D 0A 09    .Result:=ESC;...
01A700:  09 09 0D 0A 09 09 09 09 52 45 54 55 52 4E 3B 0D    ........RETURN;.
01A710:  0A 09 09 09 45 4C 53 45 0D 0A 09 09 09 09 4B 65    ....ELSE......Ke
01A720:  79 50 6F 73 3A 3D 4E 65 78 74 43 68 61 72 3B 0D    yPos:=NextChar;.
01A730:  0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E    .....END;.....EN
01A740:  44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44    D;....END;...END
01A750:  20 52 65 61 64 41 43 68 61 72 3B 0D 0A 09 09 09     ReadAChar;.....
01A760:  09 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65    ....PROCEDURE Ge
01A770:  74 44 65 66 43 68 61 72 3B 0D 0A 56 41 52 09 54    tDefChar;..VAR.T
01A780:  65 78 74 3A 41 52 52 41 59 5B 31 2E 2E 31 5D 20    ext:ARRAY[1..1] 
01A790:  4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E 0D    OF CHAR;..BEGIN.
01A7A0:  0A 09 47 65 74 53 74 72 69 6E 67 28 54 65 78 74    ..GetString(Text
01A7B0:  2C 4C 65 61 72 6E 4C 65 6E 2C 27 43 68 61 72 20    ,LearnLen,'Char 
01A7C0:  74 6F 20 64 65 66 69 6E 65 3A 27 29 3B 0D 0A 09    to define:');...
01A7D0:  4C 65 61 72 6E 63 68 3A 3D 43 41 50 28 54 65 78    Learnch:=CAP(Tex
01A7E0:  74 5B 31 5D 29 3B 0D 0A 09 49 46 20 4C 65 61 72    t[1]);...IF Lear
01A7F0:  6E 63 68 3D 45 53 43 20 54 48 45 4E 0D 0A 09 09    nch=ESC THEN....
01A800:  5D 3A 3D 63 68 3B 0D 0A 09 09 09 45 4E 44 3B 0D    ]:=ch;.....END;.
01A810:  0A 09 45 4C 53 45 0D 0A 09 09 57 49 54 48 20 4D    ..ELSE....WITH M
01A820:  61 63 72 6F 53 74 61 63 6B 5B 4D 61 63 72 6F 44    acroStack[MacroD
01A830:  65 70 74 68 5D 20 44 4F 0D 0A 09 09 09 49 46 20    epth] DO.....IF 
01A840:  50 6F 73 3E 44 65 66 5E 2E 4C 65 6E 67 74 68 20    Pos>Def^.Length 
01A850:  54 48 45 4E 0D 0A 09 09 09 20 20 20 20 44 45 43    THEN.....    DEC
01A860:  28 43 6F 75 6E 74 29 3B 0D 0A 09 09 09 20 20 20    (Count);.....   
01A870:  20 49 46 20 43 68 65 63 6B 49 6E 74 65 72 72 75     IF CheckInterru
01A880:  70 74 28 29 20 4F 52 20 4E 4F 54 20 46 6F 75 6E    pt() OR NOT Foun
01A890:  64 20 54 48 45 4E 0D 0A 09 09 09 09 4D 61 63 72    d THEN......Macr
01A8A0:  6F 44 65 70 74 68 3A 3D 31 3B 0D 0A 09 09 09 09    oDepth:=1;......
01A8B0:  43 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09 09 09 45    Count:=0;......E
01A8C0:  4E 44 3B 0D 0A 09 09 09 20 20 20 20 49 46 20 43    ND;.....    IF C
01A8D0:  6F 75 6E 74 3C 31 20 54 48 45 4E 0D 0A 09 09 09    ount<1 THEN.....
01A8E0:  09 44 45 43 28 4D 61 63 72 6F 44 65 70 74 68 29    .DEC(MacroDepth)
01A8F0:  3B 0D 0A 09 09 09 20 20 20 20 45 4C 53 45 0D 0A    ;.....    ELSE..
01A900:  09 09 09 09 50 6F 73 3A 3D 31 3B 0D 0A 09 09 09    ....Pos:=1;.....
01A910:  09 45 4E 44 3B 0D 0A 09 09 09 20 20 20 20 47 65    .END;.....    Ge
01A920:  74 41 43 68 61 72 28 63 68 31 29 3B 0D 0A 09 09    tAChar(ch1);....
01A930:  09 45 4C 53 45 0D 0A 09 09 09 09 63 68 31 3A 3D    .ELSE......ch1:=
01A940:  44 65 66 5E 2E 43 6F 6D 6D 43 68 61 72 73 5B 50    Def^.CommChars[P
01A950:  6F 73 5D 3B 0D 0A 09 09 09 09 49 4E 43 28 50 6F    os];......INC(Po
01A960:  73 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09    s);......END;...
01A970:  09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    ..END;....END;..
01A980:  09 45 4E 44 20 47 65 74 41 43 68 61 72 3B 0D 0A    .END GetAChar;..
01A990:  50 52 4F 43 45 44 55 52 45 20 41 64 64 4D 61 63    PROCEDURE AddMac
01A9A0:  72 6F 28 70 3A 50 4B 65 79 44 65 66 3B 72 65 70    ro(p:PKeyDef;rep
01A9B0:  65 61 74 3A 49 4E 54 45 47 45 52 29 3B 0D 0A 42    eat:INTEGER);..B
01A9C0:  45 47 49 4E 0D 0A 09 49 46 20 28 70 3C 3E 4E 49    EGIN...IF (p<>NI
01A9D0:  4C 29 20 41 4E 44 20 28 4D 61 63 72 6F 44 65 70    L) AND (MacroDep
01A9E0:  74 68 3C 3D 48 49 47 48 28 4D 61 63 72 6F 53 74    th<=HIGH(MacroSt
01A9F0:  61 63 6B 29 29 20 54 48 45 4E 0D 0A 0D 0A 09 09    ack)) THEN......
01AA00:  47 65 74 53 74 72 69 6E 67 28 4B 65 79 53 65 71    GetString(KeySeq
01AA10:  2C 4C 65 61 72 6E 4C 65 6E 2C 27 4B 65 79 20 74    ,LearnLen,'Key t
01AA20:  6F 20 64 65 66 69 6E 65 3A 27 29 3B 0D 0A 09 09    o define:');....
01AA30:  42 75 69 6C 64 4B 65 79 53 65 71 3B 0D 0A 09 09    BuildKeySeq;....
01AA40:  45 4E 44 3B 0D 0A 09 45 4E 44 20 47 65 74 44 65    END;...END GetDe
01AA50:  66 43 68 61 72 3B 0D 0A 50 52 4F 43 45 44 55 52    fChar;..PROCEDUR
01AA60:  45 20 44 65 66 4D 61 63 72 6F 54 65 78 74 3B 0D    E DefMacroText;.
01AA70:  0A 56 41 52 09 70 3A 50 4B 65 79 44 65 66 3B 0D    .VAR.p:PKeyDef;.
01AA80:  0A 42 45 47 49 4E 0D 0A 09 49 46 20 4C 65 61 72    .BEGIN...IF Lear
01AA90:  6E 4C 65 6E 3E 30 20 54 48 45 4E 0D 0A 09 09 41    nLen>0 THEN....A
01AAA0:  4C 4C 4F 43 41 54 45 28 70 2C 54 53 49 5A 45 28    LLOCATE(p,TSIZE(
01AAB0:  43 41 52 44 49 4E 41 4C 29 2B 4C 65 61 72 6E 4C    CARDINAL)+LearnL
01AAC0:  65 6E 29 3B 0D 0A 09 09 49 46 20 4C 65 61 72 6E    en);....IF Learn
01AAD0:  63 68 3D 45 53 43 20 54 48 45 4E 20 0D 0A 09 09    ch=ESC THEN ....
01AAE0:  09 4C 65 61 72 6E 4B 65 79 5E 2E 44 65 66 3A 3D    .LearnKey^.Def:=
01AAF0:  70 3B 0D 0A 09 09 09 4C 65 61 72 6E 4B 65 79 5E    p;.....LearnKey^
01AB00:  2E 54 65 72 6D 69 6E 61 74 6F 72 3A 3D 54 52 55    .Terminator:=TRU
01AB10:  45 0D 0A 09 09 45 4C 53 45 20 0D 0A 09 09 09 43    E....ELSE .....C
01AB20:  6F 6D 6D 61 6E 64 73 5B 4C 65 61 72 6E 63 68 5D    ommands[Learnch]
01AB30:  3A 3D 70 20 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09    :=p .....END;...
01AB40:  09 57 49 54 48 20 70 5E 20 44 4F 0D 0A 09 09 09    .WITH p^ DO.....
01AB50:  4C 65 6E 67 74 68 3A 3D 4C 65 61 72 6E 4C 65 6E    Length:=LearnLen
01AB60:  3B 0D 0A 09 09 09 46 4F 52 20 4C 65 61 72 6E 4C    ;.....FOR LearnL
01AB70:  65 6E 3A 3D 4C 65 61 72 6E 4C 65 6E 20 54 4F 20    en:=LearnLen TO 
01AB80:  31 20 42 59 20 2D 31 20 44 4F 0D 0A 09 09 09 09    1 BY -1 DO......
01AB90:  43 6F 6D 6D 43 68 61 72 73 5B 4C 65 61 72 6E 4C    CommChars[LearnL
01ABA0:  65 6E 5D 3A 3D 54 65 78 74 5B 4C 65 61 72 6E 4C    en]:=Text[LearnL
01ABB0:  65 6E 5D 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A    en];......END;..
01ABC0:  09 09 09 45 4E 44 3B 0D 0A 0D 0A 09 09 45 4E 44    ...END;......END
01ABD0:  3B 0D 0A 09 45 4E 44 20 44 65 66 4D 61 63 72 6F    ;...END DefMacro
01ABE0:  54 65 78 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45    Text;..PROCEDURE
01ABF0:  20 4C 65 61 72 6E 4D 61 63 72 6F 3B 0D 0A 0D 0A     LearnMacro;....
01AC00:  28 2A 6D 61 6B 65 20 73 75 72 65 20 74 68 61 74    (*make sure that
01AC10:  20 6D 61 63 72 6F 20 69 73 20 6E 6F 74 20 72 65     macro is not re
01AC20:  63 75 72 73 69 76 65 2A 29 0D 0A 0D 0A 0D 0A 09    cursive*).......
01AC30:  09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 4D 61 63    .FOR i:=1 TO Mac
01AC40:  72 6F 44 65 70 74 68 20 44 4F 0D 0A 09 09 09 49    roDepth DO.....I
01AC50:  46 20 4D 61 63 72 6F 53 74 61 63 6B 5B 69 5D 2E    F MacroStack[i].
01AC60:  44 65 66 3D 70 20 54 48 45 4E 0D 0A 09 09 09 09    Def=p THEN......
01AC70:  45 72 72 6F 72 4D 65 73 73 61 67 65 28 27 52 65    ErrorMessage('Re
01AC80:  63 75 72 73 69 76 65 20 6D 61 63 72 6F 73 21 27    cursive macros!'
01AC90:  2C 27 20 27 29 3B 0D 0A 09 09 09 09 4D 61 63 72    ,' ');......Macr
01ACA0:  6F 44 65 70 74 68 3A 3D 30 3B 0D 0A 09 09 09 09    oDepth:=0;......
01ACB0:  52 45 54 55 52 4E 3B 0D 0A 09 09 09 09 45 4E 44    RETURN;......END
01ACC0:  3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 4E    ;.....END;....IN
01ACD0:  43 28 4D 61 63 72 6F 44 65 70 74 68 29 3B 0D 0A    C(MacroDepth);..
01ACE0:  09 09 57 49 54 48 20 4D 61 63 72 6F 53 74 61 63    ..WITH MacroStac
01ACF0:  6B 5B 4D 61 63 72 6F 44 65 70 74 68 5D 20 44 4F    k[MacroDepth] DO
01AD00:  0D 0A 09 09 09 50 6F 73 3A 3D 31 3B 0D 0A 09 09    .....Pos:=1;....
01AD10:  09 44 65 66 3A 3D 70 3B 0D 0A 09 09 09 43 6F 75    .Def:=p;.....Cou
01AD20:  6E 74 3A 3D 72 65 70 65 61 74 3B 0D 0A 09 09 09    nt:=repeat;.....
01AD30:  45 4E 44 3B 28 2A 57 49 54 48 2A 29 0D 0A 09 09    END;(*WITH*)....
01AD40:  45 4E 44 3B 28 2A 70 3C 3E 4E 49 4C 20 65 74 63    END;(*p<>NIL etc
01AD50:  2A 29 0D 0A 09 45 4E 44 20 41 64 64 4D 61 63 72    *)...END AddMacr
01AD60:  6F 3B 0D 0A 56 41 52 09 53 70 65 63 69 61 6C 53    o;..VAR.SpecialS
01AD70:  65 71 75 65 6E 63 65 3A 42 4F 4F 4C 45 41 4E 3D    equence:BOOLEAN=
01AD80:  46 41 4C 53 45 3B 0D 0A 50 52 4F 43 45 44 55 52    FALSE;..PROCEDUR
01AD90:  45 20 52 65 61 64 41 43 68 61 72 28 56 41 52 20    E ReadAChar(VAR 
01ADA0:  52 65 73 75 6C 74 3A 43 48 41 52 29 3B 0D 0A 0D    Result:CHAR);...
01ADB0:  0A 28 2A 09 72 65 61 64 20 6E 65 78 74 20 63 68    .(*.read next ch
01ADC0:  61 72 61 63 74 65 72 2C 20 63 68 65 63 6B 69 6E    aracter, checkin
01ADD0:  67 20 66 6F 72 20 61 72 72 6F 77 73 2F 66 75 6E    g for arrows/fun
01ADE0:  63 74 69 6F 6E 20 6B 65 79 73 0D 0A 09 69 6E 20    ction keys...in 
01ADF0:  61 6E 64 20 6F 75 74 20 70 6F 69 6E 74 20 74 6F    and out point to
01AE00:  28 2A 09 4C 65 61 72 6E 20 61 20 6D 61 63 72 6F    (*.Learn a macro
01AE10:  20 64 65 66 69 6E 69 74 69 6F 6E 09 0D 0A 09 63     definition....c
01AE20:  61 6C 6C 65 64 20 61 74 20 65 69 74 68 65 72 20    alled at either 
01AE30:  65 6E 64 20 6F 66 20 64 65 66 69 6E 69 74 69 6F    end of definitio
01AE40:  6E 2A 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09 49    n*)....BEGIN...I
01AE50:  46 20 4E 4F 54 20 4C 65 61 72 6E 69 6E 67 20 54    F NOT Learning T
01AE60:  48 45 4E 0D 0A 09 09 47 65 74 44 65 66 43 68 61    HEN....GetDefCha
01AE70:  72 3B 0D 0A 09 09 4C 65 61 72 6E 69 6E 67 3A 3D    r;....Learning:=
01AE80:  54 52 55 45 3B 0D 0A 09 09 4C 65 61 72 6E 4C 65    TRUE;....LearnLe
01AE90:  6E 3A 3D 30 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09    n:=0;...ELSE....
01AEA0:  4C 65 61 72 6E 4C 65 6E 3A 3D 4C 65 61 72 6E 4C    LearnLen:=LearnL
01AEB0:  65 6E 2D 32 3B 0D 0A 09 09 44 65 66 4D 61 63 72    en-2;....DefMacr
01AEC0:  6F 54 65 78 74 3B 0D 0A 09 09 4C 65 61 72 6E 69    oText;....Learni
01AED0:  6E 67 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 45 4E    ng:=FALSE;....EN
01AEE0:  44 3B 0D 0A 09 45 4E 44 20 4C 65 61 72 6E 4D 61    D;...END LearnMa
01AEF0:  63 72 6F 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    cro;..PROCEDURE 
01AF00:  44 65 66 4D 61 63 72 6F 3B 0D 0A 42 45 47 49 4E    DefMacro;..BEGIN
01AF10:  0D 0A 09 47 65 74 44 65 66 43 68 61 72 3B 0D 0A    ...GetDefChar;..
01AF20:  09 49 46 20 28 4C 65 61 72 6E 63 68 3E 3D 27 41    .IF (Learnch>='A
01AF30:  27 29 20 41 4E 44 20 28 4C 65 61 72 6E 63 68 3C    ') AND (Learnch<
01AF40:  3D 27 5A 27 29 20 4F 52 20 28 4C 65 61 72 6E 63    ='Z') OR (Learnc
01AF50:  68 3D 45 53 43 29 20 54 48 45 4E 0D 0A 09 09 47    h=ESC) THEN....G
01AF60:  65 74 53 74 72 69 6E 67 28 54 65 78 74 2C 4C 65    etString(Text,Le
01AF70:  61 72 6E 4C 65 6E 2C 27 4D 61 63 72 6F 3A 27 29    arnLen,'Macro:')
01AF80:  3B 0D 0A 09 09 44 65 66 4D 61 63 72 6F 54 65 78    ;....DefMacroTex
01AF90:  74 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44    t;....END;...END
01AFA0:  20 44 65 66 4D 61 63 72 6F 3B 0D 0A 50 52 4F 43     DefMacro;..PROC
01AFB0:  45 44 55 52 45 20 4D 61 63 72 6F 28 63 68 3A 43    EDURE Macro(ch:C
01AFC0:  48 41 52 3B 72 65 70 65 61 74 3A 49 4E 54 45 47    HAR;repeat:INTEG
01AFD0:  45 52 29 3B 0D 0A 56 41 52 09 69 3A 43 41 52 44    ER);..VAR.i:CARD
01AFE0:  49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 63    INAL;..BEGIN...c
01AFF0:  68 3A 3D 43 41 50 28 63 68 29 3B 0D 0A 09 49 46    h:=CAP(ch);...IF
01B000:  20 74 68 65 20 63 68 61 72 61 63 74 65 72 73 20     the characters 
01B010:  77 68 69 63 68 20 68 61 76 65 20 62 65 65 6E 20    which have been 
01B020:  72 65 61 64 20 61 68 65 61 64 0D 0A 09 42 79 20    read ahead...By 
01B030:  52 65 61 64 41 43 68 61 72 20 69 6E 20 61 6E 20    ReadAChar in an 
01B040:  61 74 74 65 6D 70 74 20 74 6F 20 72 65 73 6F 6C    attempt to resol
01B050:  76 65 20 61 20 6D 61 63 72 6F 0D 0A 0D 0A 09 57    ve a macro.....W
01B060:  68 65 6E 20 52 65 61 64 41 43 68 61 72 20 69 73    hen ReadAChar is
01B070:  20 65 6E 74 65 72 65 64 2C 20 69 66 20 74 68 69     entered, if thi
01B080:  73 20 62 75 66 66 65 72 20 69 73 20 6E 6F 74 20    s buffer is not 
01B090:  65 6D 70 74 79 2C 0D 0A 09 74 68 65 20 66 69 72    empty,...the fir
01B0A0:  73 74 20 63 68 61 72 61 63 74 65 72 20 69 73 20    st character is 
01B0B0:  74 6F 20 62 65 20 6C 6F 6F 6B 65 64 20 75 70 20    to be looked up 
01B0C0:  74 6F 20 73 65 65 20 69 66 20 69 74 20 69 73 20    to see if it is 
01B0D0:  61 20 0D 0A 09 73 74 61 72 74 20 6F 66 20 61 20    a ...start of a 
01B0E0:  6B 65 79 20 64 65 66 69 6E 69 74 69 6F 6E 2A 29    key definition*)
01B0F0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 49 6E 63 50    ..PROCEDURE IncP
01B100:  6F 69 6E 74 65 72 28 56 41 52 20 69 3A 43 41 52    ointer(VAR i:CAR
01B110:  44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A    DINAL);..BEGIN..
01B120:  09 49 46 20 69 3D 48 49 47 48 28 42 75 66 66 65    .IF i=HIGH(Buffe
01B130:  72 29 20 54 48 45 4E 20 69 3A 3D 30 20 45 4E 44    r) THEN i:=0 END
01B140:  3B 0D 0A 09 49 4E 43 28 69 29 3B 0D 0A 09 45 4E    ;...INC(i);...EN
01B150:  44 20 49 6E 63 50 6F 69 6E 74 65 72 3B 0D 0A 42    D IncPointer;..B
01B160:  45 47 49 4E 0D 0A 09 6C 6F 6F 6B 3A 3D 6F 75 74    EGIN...look:=out
01B170:  3B 0D 0A 09 49 46 20 53 70 65 63 69 61 6C 53 65    ;...IF SpecialSe
01B180:  71 75 65 6E 63 65 20 54 48 45 4E 20 0D 0A 0D 0A    quence THEN ....
01B190:  09 09 28 2A 20 40 20 69 73 20 75 73 65 64 20 66    ..(* @ is used f
01B1A0:  6F 72 20 66 75 6E 63 74 69 6F 6E 2F 61 72 72 6F    or function/arro
01B1B0:  77 20 6B 65 79 73 20 61 73 20 61 20 6D 61 63 72    w keys as a macr
01B1C0:  6F 0D 0A 09 09 20 20 20 73 6F 20 74 68 61 74 20    o....   so that 
01B1D0:  72 65 70 65 61 74 20 63 6F 75 6E 74 73 20 63 61    repeat counts ca
01B1E0:  6E 20 73 74 69 6C 6C 20 62 65 20 75 73 65 64 2A    n still be used*
01B1F0:  29 0D 0A 0D 0A 09 09 52 65 73 75 6C 74 3A 3D 27    )......Result:='
01B200:  20 63 68 3C 27 20 27 20 54 48 45 4E 20 63 68 3A     ch<' ' THEN ch:
01B210:  3D 43 48 52 28 4F 52 44 28 63 68 29 2B 36 34 29    =CHR(ORD(ch)+64)
01B220:  20 45 4E 44 3B 0D 0A 09 49 46 20 28 63 68 3E 3D     END;...IF (ch>=
01B230:  27 40 27 29 20 41 4E 44 20 28 63 68 3C 3D 27 5A    '@') AND (ch<='Z
01B240:  27 29 20 54 48 45 4E 0D 0A 09 09 41 64 64 4D 61    ') THEN....AddMa
01B250:  63 72 6F 28 43 6F 6D 6D 61 6E 64 73 5B 63 68 5D    cro(Commands[ch]
01B260:  2C 72 65 70 65 61 74 29 3B 0D 0A 09 09 45 4E 44    ,repeat);....END
01B270:  3B 0D 0A 09 45 4E 44 20 4D 61 63 72 6F 3B 0D 0A    ;...END Macro;..
01B280:  56 41 52 09 46 3A 46 49 4C 45 3B 0D 0A 09 72 65    VAR.F:FILE;...re
01B290:  70 6C 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 50 52    ply:INTEGER;..PR
01B2A0:  4F 43 45 44 55 52 45 20 4C 6F 61 64 4D 61 63 72    OCEDURE LoadMacr
01B2B0:  6F 73 3B 0D 0A 56 41 52 09 42 6C 6F 63 6B 3A 41    os;..VAR.Block:A
01B2C0:  52 52 41 59 5B 30 2E 2E 42 6C 6F 63 6B 4C 65 6E    RRAY[0..BlockLen
01B2D0:  2D 31 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 42 45    -1] OF CHAR;..BE
01B2E0:  47 49 4E 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 53 65    GIN...LOOP....Se
01B2F0:  71 52 65 61 64 42 6C 6F 63 6B 28 46 2C 41 44 52    qReadBlock(F,ADR
01B300:  28 42 6C 6F 63 6B 29 2C 42 6C 6F 63 6B 4C 65 6E    (Block),BlockLen
01B310:  2C 72 65 70 6C 79 29 3B 0D 0A 09 09 49 46 20 72    ,reply);....IF r
01B320:  65 70 6C 79 3C 3E 42 6C 6F 63 6B 4C 65 6E 20 54    eply<>BlockLen T
01B330:  48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D 0A 09    HEN EXIT END;...
01B340:  09 72 65 70 6C 79 3A 3D 30 3B 0D 0A 09 09 57 48    .reply:=0;....WH
01B350:  49 4C 45 20 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D    ILE Block[reply]
01B360:  3C 3E 30 78 20 44 4F 0D 0A 09 09 09 4C 65 61 72    <>0x DO.....Lear
01B370:  6E 4C 65 6E 3A 3D 4F 52 44 28 42 6C 6F 63 6B 5B    nLen:=ORD(Block[
01B380:  72 65 70 6C 79 5D 29 3B 0D 0A 09 09 09 4C 65 61    reply]);.....Lea
01B390:  72 6E 63 68 3A 3D 42 6C 6F 63 6B 5B 72 65 70 6C    rnch:=Block[repl
01B3A0:  79 2B 31 5D 3B 0D 0A 09 09 09 49 46 20 4C 65 61    y+1];.....IF Lea
01B3B0:  72 6E 63 68 3D 45 53 43 20 54 48 45 4E 0D 0A 09    rnch=ESC THEN...
01B3C0:  09 09 09 4D 6F 76 65 75 70 28 41 44 52 28 42 6C    ...Moveup(ADR(Bl
01B3D0:  6F 63 6B 5B 72 65 70 6C 79 2B 32 5D 29 2C 41 44    ock[reply+2]),AD
01B3E0:  52 28 4B 65 79 53 65 71 29 2C 31 30 29 3B 0D 0A    R(KeySeq),10);..
01B3F0:  09 09 09 09 42 75 69 6C 64 4B 65 79 53 65 71 3B    ....BuildKeySeq;
01B400:  40 27 3B 0D 0A 09 09 53 70 65 63 69 61 6C 53 65    @';....SpecialSe
01B410:  71 75 65 6E 63 65 3A 3D 46 41 4C 53 45 3B 0D 0A    quence:=FALSE;..
01B420:  09 09 52 45 54 55 52 4E 0D 0A 09 09 45 4E 44 3B    ..RETURN....END;
01B430:  0D 0A 09 4B 65 79 50 6F 73 3A 3D 4B 65 79 43 68    ...KeyPos:=KeyCh
01B440:  61 69 6E 42 61 73 65 3B 0D 0A 09 4C 4F 4F 50 0D    ainBase;...LOOP.
01B450:  0A 09 09 49 46 20 69 6E 3C 3E 6C 6F 6F 6B 20 54    ...IF in<>look T
01B460:  48 45 4E 0D 0A 09 09 09 52 65 73 75 6C 74 3A 3D    HEN.....Result:=
01B470:  42 75 66 66 65 72 5B 6C 6F 6F 6B 5D 3B 0D 0A 09    Buffer[look];...
01B480:  09 09 49 6E 63 50 6F 69 6E 74 65 72 28 6C 6F 6F    ..IncPointer(loo
01B490:  6B 29 3B 0D 0A 09 09 45 4C 53 45 0D 0A 09 09 09    k);....ELSE.....
01B4A0:  47 65 74 41 43 68 61 72 28 52 65 73 75 6C 74 29    GetAChar(Result)
01B4B0:  3B 0D 0A 09 09 09 42 75 66 66 65 72 5B 69 6E 5D    ;.....Buffer[in]
01B4C0:  3A 3D 52 65 73 75 6C 74 3B 0D 0A 09 09 09 49 6E    :=Result;.....In
01B4D0:  63 50 6F 69 6E 74 65 72 28 69 6E 29 3B 0D 0A 09    cPointer(in);...
01B4E0:  09 09 6C 6F 6F 6B 3A 3D 69 6E 3B 0D 0A 09 09 09    ..look:=in;.....
01B4F0:  45 4E 44 3B 0D 0A 09 09 53 65 61 72 63 68 54 6F    END;....SearchTo
01B500:  4E 65 78 74 28 52 65 73 75 6C 74 29 3B 0D 0A 09    Next(Result);...
01B510:  09 49 46 20 4B 65 79 50 6F 73 3D 4E 49 4C 20 54    .IF KeyPos=NIL T
01B520:  48 45 4E 0D 0A 09 09 09 52 65 73 75 6C 74 3A 3D    HEN.....Result:=
01B530:  42 75 66 66 65 72 5B 6F 75 74 5D 3B 0D 0A 09 09    Buffer[out];....
01B540:  09 49 6E 63 50 6F 69 6E 74 65 72 28 6F 75 74 29    .IncPointer(out)
01B550:  3B 0D 0A 09 09 09 52 45 54 55 52 4E 0D 0A 09 09    ;.....RETURN....
01B560:  09 45 4E 44 3B 0D 0A 09 09 57 49 54 48 20 4B 65    .END;....WITH Ke
01B570:  79 50 6F 73 5E 20 44 4F 0D 0A 09 09 09 49 46 20    yPos^ DO.....IF 
01B580:  54 65 72 6D 69 6E 61 74 6F 72 20 54 48 45 4E 0D    Terminator THEN.
01B590:  0A 09 09 09 09 6F 75 74 3A 3D 6C 6F 6F 6B 3B 0D    .....out:=look;.
01B5A0:  0A 09 09 09 09 69 6E 3A 3D 6C 6F 6F 6B 3B 0D 0A    .....in:=look;..
01B5B0:  0D 0A 09 09 09 09 28 2A 20 77 65 20 63 6F 75 6C    ......(* we coul
01B5C0:  64 20 61 64 64 20 74 68 65 20 6D 61 63 72 6F 20    d add the macro 
01B5D0:  0D 0A 09 09 09 09 64 69 72 65 63 74 6C 79 20 61    ......directly a
01B5E0:  74 20 74 68 69 73 20 70 6F 69 6E 74 20 28 74 68    t this point (th
01B5F0:  65 20 66 69 72 73 74 0D 0A 09 09 09 09 76 65 72    e first......ver
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:  0D 0A 09 09 09 09 72 65 70 6C 79 3A 3D 72 65 70    ......reply:=rep
01B710:  6C 79 2B 31 30 3B 0D 0A 09 09 09 09 45 4E 44 3B    ly+10;......END;
01B720:  0D 0A 0D 0A 09 09 09 72 65 70 6C 79 3A 3D 72 65    .......reply:=re
01B730:  70 6C 79 2B 32 3B 0D 0A 09 09 09 46 4F 52 20 69    ply+2;.....FOR i
01B740:  3A 3D 31 20 54 4F 20 4C 65 61 72 6E 4C 65 6E 20    :=1 TO LearnLen 
01B750:  44 4F 0D 0A 09 09 09 09 54 65 78 74 5B 69 5D 3A    DO......Text[i]:
01B760:  3D 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D 3B 0D 0A    =Block[reply];..
01B770:  09 09 09 09 49 4E 43 28 72 65 70 6C 79 29 3B 0D    ....INC(reply);.
01B780:  0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 44 65    .....END;.....De
01B790:  66 4D 61 63 72 6F 54 65 78 74 3B 0D 0A 09 09 09    fMacroText;.....
01B7A0:  45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45    END;....END;...E
01B7B0:  4E 44 20 4C 6F 61 64 4D 61 63 72 6F 73 3B 09 09    ND LoadMacros;..
01B7C0:  09 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 74 6F    ...PROCEDURE Sto
01B7D0:  72 65 4D 61 63 72 6F 73 3B 0D 0A 56 41 52 09 42    reMacros;..VAR.B
01B7E0:  6C 6F 63 6B 3A 41 52 52 41 59 5B 30 2E 2E 42 6C    lock:ARRAY[0..Bl
01B7F0:  6F 63 6B 4C 65 6E 2D 31 5D 20 4F 46 20 43 48 41    ockLen-1] OF CHA
01B800:  52 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20    R;....PROCEDURE 
01B810:  53 74 6F 72 65 4F 6E 65 4D 61 63 72 6F 28 70 3A    StoreOneMacro(p:
01B820:  50 4B 65 79 44 65 66 29 3B 0D 0A 42 45 47 49 4E    PKeyDef);..BEGIN
01B830:  0D 0A 09 49 46 20 70 3C 3E 4E 49 4C 20 54 48 45    ...IF p<>NIL THE
01B840:  4E 0D 0A 09 09 57 49 54 48 20 70 5E 20 44 4F 0D    N....WITH p^ DO.
01B850:  0A 09 09 09 49 46 20 28 72 65 70 6C 79 2B 4C 65    ....IF (reply+Le
01B860:  6E 67 74 68 2B 31 34 29 3E 3D 42 6C 6F 63 6B 4C    ngth+14)>=BlockL
01B870:  65 6E 20 54 48 45 4E 0D 0A 09 09 09 09 42 6C 6F    en THEN......Blo
01B880:  63 6B 5B 72 65 70 6C 79 5D 3A 3D 30 78 3B 0D 0A    ck[reply]:=0x;..
01B890:  09 09 09 09 53 65 71 57 72 69 74 65 42 6C 6F 63    ....SeqWriteBloc
01B8A0:  6B 28 46 2C 41 44 52 28 42 6C 6F 63 6B 29 2C 42    k(F,ADR(Block),B
01B8B0:  6C 6F 63 6B 4C 65 6E 2C 72 65 70 6C 79 29 3B 0D    lockLen,reply);.
01B8C0:  0A 09 09 09 09 72 65 70 6C 79 3A 3D 30 3B 0D 0A    .....reply:=0;..
01B8D0:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 42 6C 6F    ....END;.....Blo
01B8E0:  63 6B 5B 72 65 70 6C 79 5D 3A 3D 43 48 52 28 4C    ck[reply]:=CHR(L
01B8F0:  65 6E 67 74 68 29 3B 0D 0A 09 09 09 42 6C 6F 63    ength);.....Bloc
01B900:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
01B910:  45 20 4D 61 6B 65 45 64 69 74 73 3B 0D 0A 0D 0A    E MakeEdits;....
01B920:  0D 0A 28 2A 09 52 6F 75 74 69 6E 65 73 20 74 6F    ..(*.Routines to
01B930:  20 65 64 69 74 20 61 20 66 69 6C 65 0D 0A 0D 0A     edit a file....
01B940:  09 28 69 2E 65 2E 2C 20 61 63 74 75 61 6C 6C 79    .(i.e., actually
01B950:  20 6D 61 6B 65 20 63 68 61 6E 67 65 73 20 74 6F     make changes to
01B960:  20 74 68 65 20 66 69 6C 65 29 0D 0A 0D 0A 09 44     the file).....D
01B970:  20 4D 6F 6F 72 65 20 31 31 20 4A 61 6E 20 38 35     Moore 11 Jan 85
01B980:  2A 29 0D 0A 0D 0A 46 52 4F 4D 20 46 69 6C 65 73    *)....FROM Files
01B990:  20 49 4D 50 4F 52 54 20 46 69 6C 65 4E 61 6D 65     IMPORT FileName
01B9A0:  3B 0D 0A 0D 0A 54 59 50 45 09 45 64 69 74 46 69    ;....TYPE.EditFi
01B9B0:  6C 65 3B 0D 0A 09 50 6F 73 69 74 69 6F 6E 3B 0D    le;...Position;.
01B9C0:  0A 09 0D 0A 09 45 72 72 6F 72 52 65 63 6F 72 64    .....ErrorRecord
01B9D0:  3D 52 45 43 4F 52 44 0D 0A 09 09 45 72 72 6F 72    =RECORD....Error
01B9E0:  4E 75 6D 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09    Num:CARDINAL;...
01B9F0:  09 43 68 61 72 50 3A 43 41 52 44 49 4E 41 4C 3B    .CharP:CARDINAL;
01BA00:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 72 72 6F 72    ....END;...Error
01BA10:  41 72 72 61 79 3D 41 52 52 41 59 5B 30 2E 2E 39    Array=ARRAY[0..9
01BA20:  5D 20 4F 46 20 45 72 72 6F 72 52 65 63 6F 72 64    ] OF ErrorRecord
01BA30:  3B 0D 0A 56 41 52 09 45 72 72 6F 72 4C 69 73 74    ;..VAR.ErrorList
01BA40:  3A 45 72 72 6F 72 41 72 72 61 79 3B 0D 0A 09 45    :ErrorArray;...E
01BA50:  72 72 6F 72 43 6F 75 6E 74 3A 43 41 52 44 49 4E    rrorCount:CARDIN
01BA60:  41 4C 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45    AL;....PROCEDURE
01BA70:  20 4F 70 65 6E 46 69 6C 65 28 56 41 52 20 66 3A     OpenFile(VAR f:
01BA80:  45 64 69 74 46 69 6C 65 3B 66 6E 3A 46 69 6C 65    EditFile;fn:File
01BA90:  4E 61 6D 65 3B 56 41 52 20 72 65 70 6C 79 3A 49    Name;VAR reply:I
01BAA0:  4E 54 45 47 45 52 3B 50 6F 73 3A 43 41 52 44 49    NTEGER;Pos:CARDI
01BAB0:  4E 41 4C 29 3B 0D 0A 0D 0A 28 2A 09 4C 6F 61 64    NAL);....(*.Load
01BAC0:  20 74 68 65 20 66 69 6C 65 20 69 6E 74 6F 20 6D     the file into m
01BAD0:  65 6D 6F 72 79 0D 0A 0D 0A 09 49 66 20 69 6E 73    emory.....If ins
01BAE0:  75 66 66 69 63 69 65 6E 74 20 6D 65 6D 6F 72 79    ufficient memory
01BAF0:  2C 20 72 65 74 75 72 6E 73 20 72 65 70 6C 79 3D    , returns reply=
01BB00:  6B 5B 72 65 70 6C 79 2B 31 5D 3A 3D 4C 65 61 72    k[reply+1]:=Lear
01BB10:  6E 63 68 3B 0D 0A 09 09 09 49 46 20 4C 65 61 72    nch;.....IF Lear
01BB20:  6E 63 68 3D 45 53 43 20 54 48 45 4E 0D 0A 09 09    nch=ESC THEN....
01BB30:  09 09 4D 6F 76 65 75 70 28 41 44 52 28 4B 65 79    ..Moveup(ADR(Key
01BB40:  53 65 71 29 2C 41 44 52 28 42 6C 6F 63 6B 5B 72    Seq),ADR(Block[r
01BB50:  65 70 6C 79 2B 32 5D 29 2C 31 30 29 3B 0D 0A 09    eply+2]),10);...
01BB60:  09 09 09 72 65 70 6C 79 3A 3D 72 65 70 6C 79 2B    ...reply:=reply+
01BB70:  31 30 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09    10;......END;...
01BB80:  09 09 72 65 70 6C 79 3A 3D 72 65 70 6C 79 2B 32    ..reply:=reply+2
01BB90:  3B 0D 0A 09 09 09 46 4F 52 20 69 3A 3D 31 20 54    ;.....FOR i:=1 T
01BBA0:  4F 20 4C 65 6E 67 74 68 20 44 4F 0D 0A 09 09 09    O Length DO.....
01BBB0:  09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D 3A 3D 43    .Block[reply]:=C
01BBC0:  6F 6D 6D 43 68 61 72 73 5B 69 5D 3B 0D 0A 09 09    ommChars[i];....
01BBD0:  09 09 49 4E 43 28 72 65 70 6C 79 29 3B 0D 0A 09    ..INC(reply);...
01BBE0:  09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B    ...END;.....END;
01BBF0:  28 2A 57 49 54 48 20 70 5E 2A 29 0D 0A 09 09 45    (*WITH p^*)....E
01BC00:  4E 44 20 28 2A 49 46 20 3C 3E 4E 49 4C 2A 29 0D    ND (*IF <>NIL*).
01BC10:  0A 09 45 4E 44 20 53 74 6F 72 65 4F 6E 65 4D 61    ..END StoreOneMa
01BC20:  63 72 6F 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    cro;..PROCEDURE 
01BC30:  4F 75 74 4B 65 79 53 65 71 28 43 68 61 72 4E 6F    OutKeySeq(CharNo
01BC40:  3A 43 41 52 44 49 4E 41 4C 3B 70 3A 50 4B 65 79    :CARDINAL;p:PKey
01BC50:  43 68 61 69 6E 29 3B 0D 0A 42 45 47 49 4E 0D 0A    Chain);..BEGIN..
01BC60:  09 49 46 20 70 3C 3E 4E 49 4C 20 54 48 45 4E 0D    .IF p<>NIL THEN.
01BC70:  0A 09 09 57 49 54 48 20 70 5E 20 44 4F 0D 0A 09    ...WITH p^ DO...
01BC80:  09 09 4B 65 79 53 65 71 5B 43 68 61 72 4E 6F 5D    ..KeySeq[CharNo]
01BC90:  3A 3D 63 68 3B 0D 0A 09 09 09 49 46 20 54 65 72    :=ch;.....IF Ter
01BCA0:  6D 69 6E 61 74 6F 72 20 54 48 45 4E 0D 0A 09 09    minator THEN....
01BCB0:  09 09 53 74 6F 72 65 4F 6E 65 4D 61 63 72 6F 28    ..StoreOneMacro(
01BCC0:  44 65 66 29 3B 0D 0A 09 09 09 45 4C 53 45 0D 0A    Def);.....ELSE..
01BCD0:  09 09 09 09 4F 75 74 4B 65 79 53 65 71 28 43 68    ....OutKeySeq(Ch
01BCE0:  61 72 4E 6F 2B 31 2C 4E 65 78 74 43 68 61 72 29    arNo+1,NextChar)
01BCF0:  3B 0D 0A 09 09 09 09 4B 65 79 53 65 71 5B 43 68    ;......KeySeq[Ch
01BD00:  2D 33 0D 0A 09 69 66 20 66 69 6C 65 20 6E 6F 74    -3...if file not
01BD10:  20 66 6F 75 6E 64 2C 20 72 65 74 75 72 6E 73 20     found, returns 
01BD20:  72 65 70 6C 79 3D 2D 32 0D 0A 09 72 65 70 6C 79    reply=-2...reply
01BD30:  3E 30 20 69 66 20 6F 6B 2C 20 72 65 74 75 72 6E    >0 if ok, return
01BD40:  73 20 62 6C 6F 63 6B 73 20 72 65 61 64 2A 29 0D    s blocks read*).
01BD50:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 6F    ...PROCEDURE Clo
01BD60:  73 65 46 69 6C 65 28 56 41 52 20 66 3A 45 64 69    seFile(VAR f:Edi
01BD70:  74 46 69 6C 65 3B 56 41 52 20 72 65 70 6C 79 3A    tFile;VAR reply:
01BD80:  49 4E 54 45 47 45 52 29 3B 0D 0A 0D 0A 28 2A 09    INTEGER);....(*.
01BD90:  57 72 69 74 65 20 6F 75 74 20 63 68 61 6E 67 65    Write out change
01BDA0:  73 20 74 6F 20 61 6E 20 65 64 69 74 20 66 69 6C    s to an edit fil
01BDB0:  65 20 61 6E 64 20 63 6C 6F 73 65 20 69 74 0D 0A    e and close it..
01BDC0:  09 44 6F 6E 65 20 72 65 74 75 72 6E 73 20 66 61    .Done returns fa
01BDD0:  6C 73 65 20 69 66 20 6F 75 74 20 6F 66 20 64 69    lse if out of di
01BDE0:  73 63 20 73 70 61 63 65 2A 29 0D 0A 0D 0A 50 52    sc space*)....PR
01BDF0:  4F 43 45 44 55 52 45 20 41 62 61 6E 64 6F 6E 46    OCEDURE AbandonF
01BE00:  69 6C 65 28 66 3A 45 64 69 74 46 69 6C 65 29 3B    ile(f:EditFile);
01BE10:  0D 0A 0D 0A 28 2A 09 41 62 61 6E 64 6F 6E 20 63    ....(*.Abandon c
01BE20:  68 61 6E 67 65 73 20 74 6F 20 61 6E 20 65 64 69    hanges to an edi
01BE30:  74 20 66 69 6C 65 2A 29 0D 0A 50 52 4F 43 45 44    t file*)..PROCED
01BE40:  55 52 45 20 47 65 74 50 6F 73 69 74 69 6F 6E 28    URE GetPosition(
01BE50:  56 41 52 20 66 3A 45 64 69 74 46 69 6C 65 3B 56    VAR f:EditFile;V
01BE60:  41 52 20 70 3A 50 6F 73 69 74 69 6F 6E 29 3B 0D    AR p:Position);.
01BE70:  0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 50 6F    .PROCEDURE SetPo
01BE80:  73 69 74 69 6F 6E 28 56 41 52 20 66 3A 45 64 69    sition(VAR f:Edi
01BE90:  74 46 69 6C 65 3B 70 3A 50 6F 73 69 74 69 6F 6E    tFile;p:Position
01BEA0:  29 3B 0D 0A 28 2A 09 67 65 74 2F 73 65 74 20 70    );..(*.get/set p
01BEB0:  6F 73 69 74 69 6F 6E 20 69 6E 20 61 20 66 69 6C    osition in a fil
01BEC0:  65 0D 0A 09 47 65 74 50 6F 73 69 74 69 6F 6E 20    e...GetPosition 
01BED0:  72 65 74 75 72 6E 73 20 74 68 65 20 63 75 72 65    returns the cure
01BEE0:  6E 74 20 70 6F 73 69 74 69 6F 6E 0D 0A 09 44 65    nt position...De
01BEF0:  66 69 6E 65 4C 61 62 65 6C 20 64 65 66 69 6E 65    fineLabel define
01BF00:  61 72 4E 6F 2B 31 5D 3A 3D 27 20 27 3B 0D 0A 09    arNo+1]:=' ';...
01BF10:  09 09 09 45 4E 44 3B 0D 0A 09 09 09 4F 75 74 4B    ...END;.....OutK
01BF20:  65 79 53 65 71 28 43 68 61 72 4E 6F 2C 4E 65 78    eySeq(CharNo,Nex
01BF30:  74 41 6C 74 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D    tAlt);.....END;.
01BF40:  0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4F 75    ...END;...END Ou
01BF50:  74 4B 65 79 53 65 71 3B 0D 0A 42 45 47 49 4E 0D    tKeySeq;..BEGIN.
01BF60:  0A 09 4C 65 61 72 6E 63 68 3A 3D 27 41 27 3B 0D    ..Learnch:='A';.
01BF70:  0A 09 57 48 49 4C 45 20 28 43 6F 6D 6D 61 6E 64    ..WHILE (Command
01BF80:  73 5B 4C 65 61 72 6E 63 68 5D 3D 4E 49 4C 29 20    s[Learnch]=NIL) 
01BF90:  41 4E 44 20 28 4C 65 61 72 6E 63 68 3C 3D 27 5A    AND (Learnch<='Z
01BFA0:  27 29 20 44 4F 20 0D 0A 09 09 4C 65 61 72 6E 63    ') DO ....Learnc
01BFB0:  68 3A 3D 43 48 52 28 4F 52 44 28 4C 65 61 72 6E    h:=CHR(ORD(Learn
01BFC0:  63 68 29 2B 31 29 3B 0D 0A 09 09 45 4E 44 3B 0D    ch)+1);....END;.
01BFD0:  0A 09 49 46 20 4C 65 61 72 6E 63 68 3E 27 5A 27    ..IF Learnch>'Z'
01BFE0:  20 54 48 45 4E 20 52 45 54 55 52 4E 20 45 4E 44     THEN RETURN END
01BFF0:  3B 0D 0A 09 43 72 65 61 74 65 28 46 2C 27 4D 41    ;...Create(F,'MA
01C000:  43 52 4F 53 2E 44 41 54 20 27 2C 72 65 70 6C 79    CROS.DAT ',reply
01C010:  29 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30    );...IF reply<>0
01C020:  20 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74     THEN....WriteSt
01C030:  72 69 6E 67 28 27 20 63 6F 75 6C 64 20 6E 6F 74    ring(' could not
01C040:  20 73 61 76 65 20 6D 61 63 72 6F 73 20 66 69 6C     save macros fil
01C050:  65 27 29 3B 0D 0A 09 09 57 72 69 74 65 4C 6E 3B    e');....WriteLn;
01C060:  0D 0A 09 09 52 45 54 55 52 4E 0D 0A 09 09 45 4E    ....RETURN....EN
01C070:  44 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30    D;...IF reply<>0
01C080:  20 54 48 45 4E 20 52 45 54 55 52 4E 20 45 4E 44     THEN RETURN END
01C090:  3B 0D 0A 09 72 65 70 6C 79 3A 3D 30 3B 0D 0A 09    ;...reply:=0;...
01C0A0:  46 4F 52 20 4C 65 61 72 6E 63 68 3A 3D 27 41 27    FOR Learnch:='A'
01C0B0:  20 54 4F 20 27 5A 27 20 44 4F 20 53 74 6F 72 65     TO 'Z' DO Store
01C0C0:  4F 6E 65 4D 61 63 72 6F 28 43 6F 6D 6D 61 6E 64    OneMacro(Command
01C0D0:  73 5B 4C 65 61 72 6E 63 68 5D 29 20 45 4E 44 3B    s[Learnch]) END;
01C0E0:  0D 0A 0D 0A 09 28 2A 4E 6F 77 20 6F 75 74 70 75    .....(*Now outpu
01C0F0:  74 20 6B 65 79 20 73 65 71 75 65 6E 63 65 73 2A    t key sequences*
01C100:  73 20 61 20 6C 61 62 65 6C 0D 0A 09 54 68 69 73    s a label...This
01C110:  20 6C 61 62 65 6C 20 6D 75 73 74 20 6E 6F 74 20     label must not 
01C120:  62 65 20 61 6C 74 65 72 65 64 20 75 6E 6C 65 73    be altered unles
01C130:  73 20 69 74 20 69 73 20 64 65 6C 65 74 65 64 0D    s it is deleted.
01C140:  0A 09 77 69 74 68 20 44 65 6C 50 6F 73 69 74 69    ..with DelPositi
01C150:  6F 6E 20 66 69 72 73 74 2A 29 0D 0A 0D 0A 50 52    on first*)....PR
01C160:  4F 43 45 44 55 52 45 20 4C 61 62 65 6C 4F 70 28    OCEDURE LabelOp(
01C170:  56 41 52 20 66 3A 45 64 69 74 46 69 6C 65 3B 44    VAR f:EditFile;D
01C180:  65 66 69 6E 65 3A 42 4F 4F 4C 45 41 4E 3B 63 68    efine:BOOLEAN;ch
01C190:  3A 43 48 41 52 29 3A 42 4F 4F 4C 45 41 4E 3B 0D    :CHAR):BOOLEAN;.
01C1A0:  0A 0D 0A 28 2A 09 44 65 66 69 6E 65 20 6F 72 20    ...(*.Define or 
01C1B0:  73 65 74 20 61 20 6C 61 62 65 6C 0D 0A 09 63 68    set a label...ch
01C1C0:  20 69 73 20 61 20 63 68 61 72 61 63 74 65 72 20     is a character 
01C1D0:  66 72 6F 6D 20 74 68 65 20 73 65 74 20 30 2E 2E    from the set 0..
01C1E0:  39 2C 42 2C 4B 0D 0A 2A 29 0D 0A 0D 0A 50 52 4F    9,B,K..*)....PRO
01C1F0:  43 45 44 55 52 45 20 44 65 6C 43 68 61 72 73 28    CEDURE DelChars(
01C200:  56 41 52 20 66 3A 45 64 69 74 46 69 6C 65 3B 6E    VAR f:EditFile;n
01C210:  75 6D 62 65 72 3A 49 4E 54 45 47 45 52 29 3B 0D    umber:INTEGER);.
01C220:  0A 0D 0A 28 2A 09 64 65 6C 65 74 65 20 61 20 6E    ...(*.delete a n
01C230:  75 6D 62 65 72 20 6F 66 20 63 68 61 72 61 63 74    umber of charact
01C240:  65 72 73 0D 0A 09 69 66 20 6E 75 6D 62 65 72 20    ers...if number 
01C250:  69 73 20 3C 30 2C 20 69 74 20 68 61 73 20 74 68    is <0, it has th
01C260:  65 20 66 6F 6C 6C 6F 77 69 6E 67 20 6D 65 61 6E    e following mean
01C270:  69 6E 67 73 3A 0D 0A 09 2D 31 20 64 65 6C 65 74    ings:...-1 delet
01C280:  65 20 74 6F 20 65 6E 64 20 6F 66 20 6C 69 6E 65    e to end of line
01C290:  0D 0A 09 2D 32 20 64 65 6C 65 74 65 20 65 6E 74    ...-2 delete ent
01C2A0:  69 72 65 20 6C 69 6E 65 0D 0A 09 2D 33 20 64 65    ire line...-3 de
01C2B0:  6C 65 74 65 20 72 65 6D 61 69 6E 64 65 72 20 6F    lete remainder o
01C2C0:  66 20 66 69 6C 65 2A 29 0D 0A 50 52 4F 43 45 44    f file*)..PROCED
01C2D0:  55 52 45 20 49 6E 73 43 68 61 72 73 28 56 41 52    URE InsChars(VAR
01C2E0:  20 66 3A 45 64 69 74 46 69 6C 65 3B 56 41 52 20     f:EditFile;VAR 
01C2F0:  53 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 3B    S:ARRAY OF CHAR;
01C300:  29 0D 0A 0D 0A 09 4C 65 61 72 6E 63 68 3A 3D 45    ).....Learnch:=E
01C310:  53 43 3B 0D 0A 09 4B 65 79 53 65 71 3A 3D 27 20    SC;...KeySeq:=' 
01C320:  20 20 20 20 20 20 20 20 20 27 3B 0D 0A 09 4F 75             ';...Ou
01C330:  74 4B 65 79 53 65 71 28 31 2C 4B 65 79 43 68 61    tKeySeq(1,KeyCha
01C340:  69 6E 42 61 73 65 29 3B 0D 0A 09 0D 0A 09 49 46    inBase);......IF
01C350:  20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A     reply<>0 THEN..
01C360:  09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D 3A 3D    ..Block[reply]:=
01C370:  30 78 3B 0D 0A 09 09 53 65 71 57 72 69 74 65 42    0x;....SeqWriteB
01C380:  6C 6F 63 6B 28 46 2C 41 44 52 28 42 6C 6F 63 6B    lock(F,ADR(Block
01C390:  29 2C 42 6C 6F 63 6B 4C 65 6E 2C 72 65 70 6C 79    ),BlockLen,reply
01C3A0:  29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 43 6C 6F    );....END;...Clo
01C3B0:  73 65 28 46 29 3B 0D 0A 09 45 4E 44 20 53 74 6F    se(F);...END Sto
01C3C0:  72 65 4D 61 63 72 6F 73 3B 0D 0A 50 52 4F 43 45    reMacros;..PROCE
01C3D0:  44 55 52 45 20 4F 75 74 43 68 28 63 68 3A 43 48    DURE OutCh(ch:CH
01C3E0:  41 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46    AR);..BEGIN...IF
01C3F0:  20 63 68 3C 27 20 27 20 54 48 45 4E 0D 0A 09 09     ch<' ' THEN....
01C400:  57 72 69 74 65 28 27 5E 27 29 3B 57 72 69 74 65    Write('^');Write
01C410:  28 43 48 52 28 4F 52 44 28 63 68 29 2B 36 34 29    (CHR(ORD(ch)+64)
01C420:  29 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 72 69    );...ELSE....Wri
01C430:  74 65 28 63 68 29 3B 0D 0A 09 09 45 4E 44 3B 0D    te(ch);....END;.
01C440:  0A 09 45 4E 44 20 4F 75 74 43 68 3B 0D 0A 50 52    ..END OutCh;..PR
01C450:  4F 43 45 44 55 52 45 20 50 72 69 6E 74 4D 61 63    OCEDURE PrintMac
01C460:  72 6F 73 3B 0D 0A 42 45 47 49 4E 0D 0A 09 46 4F    ros;..BEGIN...FO
01C470:  52 20 63 68 3A 3D 27 41 27 20 54 4F 20 27 5A 27    R ch:='A' TO 'Z'
01C480:  20 44 4F 0D 0A 09 09 49 46 20 43 6F 6D 6D 61 6E     DO....IF Comman
01C490:  64 73 5B 63 68 5D 3C 3E 4E 49 4C 20 54 48 45 4E    ds[ch]<>NIL THEN
01C4A0:  20 0D 0A 09 09 20 20 20 20 57 49 54 48 20 43 6F     ....    WITH Co
01C4B0:  6D 6D 61 6E 64 73 5B 63 68 5D 5E 20 44 4F 0D 0A    mmands[ch]^ DO..
01C4C0:  09 09 09 4F 75 74 43 68 28 63 68 29 3B 0D 0A 09    ...OutCh(ch);...
01C4D0:  09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 4C 65    ..FOR i:=1 TO Le
01C4E0:  6E 67 74 68 20 44 4F 20 0D 0A 09 09 09 09 4F 75    ngth DO ......Ou
01C4F0:  74 43 68 28 43 6F 6D 6D 43 68 61 72 73 5B 69 5D    tCh(CommChars[i]
01C500:  6C 65 6E 3A 49 4E 54 45 47 45 52 29 3B 0D 0A 28    len:INTEGER);..(
01C510:  2A 09 69 6E 73 65 72 74 20 63 68 61 72 61 63 74    *.insert charact
01C520:  65 72 73 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55    ers*)....PROCEDU
01C530:  52 45 20 52 65 74 72 6C 69 6E 65 28 56 41 52 20    RE Retrline(VAR 
01C540:  66 3A 45 64 69 74 46 69 6C 65 3B 56 41 52 20 6C    f:EditFile;VAR l
01C550:  65 6E 2C 70 6F 73 3A 49 4E 54 45 47 45 52 3B 0D    en,pos:INTEGER;.
01C560:  0A 09 09 56 41 52 20 70 3A 50 6F 73 69 74 69 6F    ...VAR p:Positio
01C570:  6E 3B 56 41 52 20 4C 69 6E 65 73 6D 6F 76 65 64    n;VAR Linesmoved
01C580:  3A 49 4E 54 45 47 45 52 3B 4C 69 6E 65 73 3A 49    :INTEGER;Lines:I
01C590:  4E 54 45 47 45 52 29 3B 0D 0A 0D 0A 28 2A 09 72    NTEGER);....(*.r
01C5A0:  65 74 75 72 6E 20 69 6E 66 6F 72 6D 61 74 69 6F    eturn informatio
01C5B0:  6E 20 61 62 6F 75 74 20 61 20 6C 69 6E 65 20 66    n about a line f
01C5C0:  6F 72 20 74 68 65 20 67 69 76 65 6E 20 66 69 6C    or the given fil
01C5D0:  65 0D 0A 0D 0A 09 6C 65 6E 20 72 65 74 75 72 6E    e.....len return
01C5E0:  73 20 74 68 65 20 6C 65 6E 67 74 68 20 6F 66 20    s the length of 
01C5F0:  74 68 65 20 6C 69 6E 65 0D 0A 09 70 6F 73 20 72    the line...pos r
01C600:  65 74 75 72 6E 73 20 63 75 72 72 65 6E 74 20 70    eturns current p
01C610:  6F 73 69 74 69 6F 6E 20 69 6E 20 74 68 65 20 6C    osition in the l
01C620:  69 6E 65 20 28 63 68 61 72 61 63 74 65 72 20 6E    ine (character n
01C630:  75 6D 62 65 72 29 0D 0A 09 70 20 20 20 72 65 74    umber)...p   ret
01C640:  75 72 6E 73 20 70 6F 73 69 74 69 6F 6E 20 6F 66    urns position of
01C650:  20 73 74 61 72 74 20 6F 66 20 6C 69 6E 65 0D 0A     start of line..
01C660:  09 4C 69 6E 65 73 6D 6F 76 65 64 20 72 65 74 75    .Linesmoved retu
01C670:  72 6E 73 20 6E 75 6D 62 65 72 20 6F 66 20 6C 69    rns number of li
01C680:  6E 65 73 20 61 63 74 75 61 6C 6C 79 20 6D 6F 76    nes actually mov
01C690:  65 64 20 2D 20 62 75 74 20 6F 6E 6C 79 0D 0A 09    ed - but only...
01C6A0:  09 69 66 20 6D 6F 76 65 20 77 61 73 20 6E 65 67    .if move was neg
01C6B0:  61 74 69 76 65 2E 20 52 65 74 75 72 6E 73 20 6E    ative. Returns n
01C6C0:  65 67 61 74 69 76 65 20 76 61 6C 75 65 0D 0A 09    egative value...
01C6D0:  6C 69 6E 65 73 20 28 69 6E 70 75 74 29 20 69 73    lines (input) is
01C6E0:  20 6E 75 6D 62 65 72 20 6F 66 20 6C 69 6E 65 73     number of lines
01C6F0:  20 74 6F 20 6D 6F 76 65 20 66 72 6F 6D 20 63 75     to move from cu
01C700:  29 20 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09    ) ......END;....
01C710:  09 45 4E 44 3B 0D 0A 09 09 20 20 20 20 57 72 69    .END;....    Wri
01C720:  74 65 4C 6E 3B 0D 0A 09 09 20 20 20 20 45 4E 44    teLn;....    END
01C730:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 72 69 74    ;....END;...Writ
01C740:  65 53 74 72 69 6E 67 28 27 20 45 6E 74 65 72 20    eString(' Enter 
01C750:  61 6E 79 20 63 68 61 72 61 63 74 65 72 20 74 6F    any character to
01C760:  20 63 6F 6E 74 69 6E 75 65 20 3A 27 29 3B 0D 0A     continue :');..
01C770:  09 57 61 69 74 46 6F 72 43 68 3B 0D 0A 09 45 4E    .WaitForCh;...EN
01C780:  44 20 50 72 69 6E 74 4D 61 63 72 6F 73 3B 0D 0A    D PrintMacros;..
01C790:  42 45 47 49 4E 0D 0A 09 46 4F 52 20 63 68 3A 3D    BEGIN...FOR ch:=
01C7A0:  27 40 27 20 54 4F 20 27 5A 27 20 44 4F 20 43 6F    '@' TO 'Z' DO Co
01C7B0:  6D 6D 61 6E 64 73 5B 63 68 5D 3A 3D 4E 49 4C 20    mmands[ch]:=NIL 
01C7C0:  45 4E 44 3B 0D 0A 09 53 68 6F 77 43 68 61 6E 67    END;...ShowChang
01C7D0:  65 3A 3D 54 52 55 45 3B 0D 0A 09 4C 6F 6F 6B 75    e:=TRUE;...Looku
01C7E0:  70 28 46 2C 27 4D 41 43 52 4F 53 2E 44 41 54 20    p(F,'MACROS.DAT 
01C7F0:  27 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 20 72    ',reply);...IF r
01C800:  65 70 6C 79 3D 30 20 54 48 45 4E 0D 0A 09 09 4C    eply=0 THEN....L
01C810:  6F 61 64 4D 61 63 72 6F 73 3B 0D 0A 09 09 45 4E    oadMacros;....EN
01C820:  44 3B 0D 0A 09 09 0D 0A 09 45 4E 44 20 4D 61 63    D;.......END Mac
01C830:  72 6F 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ros.............
01C840:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01C850:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01C860:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01C870:  1A 1A 1A 1A 1A 1A 1A 1A 29 3B 0D 0A 09 09 09 57    ........);.....W
01C880:  30 32 78 5D 3A 3D 57 69 6E 64 6F 77 3B 09 09 28    02x]:=Window;..(
01C890:  2A 43 74 72 6C 20 42 2A 29 0D 0A 09 4D 61 69 6E    *Ctrl B*)...Main
01C8A0:  54 61 62 6C 65 5B 31 37 78 5D 3A 3D 53 63 72 6F    Table[17x]:=Scro
01C8B0:  6C 6C 55 70 3B 09 28 2A 43 74 72 6C 20 57 2A 29    llUp;.(*Ctrl W*)
01C8C0:  0D 0A 09 4D 61 69 6E 54 61 62 6C 65 5B 30 62 78    ...MainTable[0bx
01C8D0:  5D 3A 3D 44 65 66 4C 61 62 65 6C 3B 09 28 2A 43    ]:=DefLabel;.(*C
01C8E0:  74 72 6C 20 4B 2A 29 0D 0A 09 4D 61 69 6E 54 61    trl K*)...MainTa
01C8F0:  62 6C 65 5B 37 66 78 5D 3A 3D 44 65 6C 42 61 63    ble[7fx]:=DelBac
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:  72 72 65 6E 74 20 6C 69 6E 65 0D 0A 2A 29 0D 0A    rrent line..*)..
01CA10:  09 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 61    ...PROCEDURE Rea
01CA20:  64 4E 65 78 74 43 68 61 72 28 56 41 52 20 70 3A    dNextChar(VAR p:
01CA30:  50 6F 73 69 74 69 6F 6E 3B 56 41 52 20 63 68 3A    Position;VAR ch:
01CA40:  43 48 41 52 29 3B 0D 0A 28 2A 09 52 65 61 64 20    CHAR);..(*.Read 
01CA50:  6E 65 78 74 20 63 68 61 72 61 63 74 65 72 20 66    next character f
01CA60:  72 6F 6D 20 61 20 6C 69 6E 65 0D 0A 09 70 20 6D    rom a line...p m
01CA70:  75 73 74 20 62 65 20 61 20 70 6F 73 69 74 69 6F    ust be a positio
01CA80:  6E 20 72 65 74 75 72 6E 65 64 20 62 79 20 52 65    n returned by Re
01CA90:  74 72 6C 69 6E 65 20 6F 72 20 52 65 61 64 43 68    trline or ReadCh
01CAA0:  20 2D 20 6E 6F 74 20 47 65 74 50 6F 73 69 74 69     - not GetPositi
01CAB0:  6F 6E 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52    on*)....PROCEDUR
01CAC0:  45 20 50 72 65 70 61 72 65 53 74 72 69 6E 67 28    E PrepareString(
01CAD0:  73 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 3B    s:ARRAY OF CHAR;
01CAE0:  6C 65 6E 3A 49 4E 54 45 47 45 52 29 3B 0D 0A 0D    len:INTEGER);...
01CAF0:  0A 28 2A 09 70 72 65 70 61 72 65 20 61 20 73 74    .(*.prepare a st
01CB00:  72 69 6E 67 20 66 6F 72 20 75 73 65 20 69 6E 20    ring for use in 
01CB10:  61 20 66 69 6E 64 20 63 6F 6D 6D 61 6E 64 2A 29    a find command*)
01CB20:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 42 61    ....PROCEDURE Ba
01CB30:  63 6B 4F 6E 65 43 68 61 72 28 56 41 52 20 66 3A    ckOneChar(VAR f:
01CB40:  45 64 69 74 46 69 6C 65 29 3A 42 4F 4F 4C 45 41    EditFile):BOOLEA
01CB50:  4E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 6F    N;..PROCEDURE Fo
01CB60:  72 77 61 72 64 4F 6E 65 43 68 61 72 28 56 41 52    rwardOneChar(VAR
01CB70:  20 66 3A 45 64 69 74 46 69 6C 65 29 3A 42 4F 4F     f:EditFile):BOO
01CB80:  4C 45 41 4E 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55    LEAN;....PROCEDU
01CB90:  52 45 20 46 69 6E 64 53 74 72 69 6E 67 28 56 41    RE FindString(VA
01CBA0:  52 20 66 3A 45 64 69 74 46 69 6C 65 3B 42 61 63    R f:EditFile;Bac
01CBB0:  6B 77 61 72 64 73 3A 42 4F 4F 4C 45 41 4E 29 3A    kwards:BOOLEAN):
01CBC0:  42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 41    BOOLEAN;....(*.A
01CBD0:  63 74 75 61 6C 6C 79 20 66 69 6E 64 20 74 68 65    ctually find the
01CBE0:  20 6E 65 78 74 20 6F 63 63 75 72 72 65 6E 63 65     next occurrence
01CBF0:  20 6F 66 20 74 68 65 20 73 74 72 69 6E 67 09 0D     of the string..
01CC00:  6E 6E 69 6E 67 20 6F 66 20 63 75 72 72 65 6E 74    nning of current
01CC10:  20 6C 69 6E 65 0D 0A 09 09 6D 6F 76 65 20 72 65     line....move re
01CC20:  71 75 69 72 65 64 20 6E 75 6D 62 65 72 20 6F 66    quired number of
01CC30:  20 6C 69 6E 65 73 2A 29 0D 0A 0D 0A 09 20 20 20     lines*).....   
01CC40:  20 49 46 20 6C 69 6E 65 73 74 6F 6D 6F 76 65 3C     IF linestomove<
01CC50:  30 20 54 48 45 4E 0D 0A 09 09 57 48 49 4C 45 20    0 THEN....WHILE 
01CC60:  09 28 6C 69 6E 65 73 74 6F 6D 6F 76 65 3C 30 29    .(linestomove<0)
01CC70:  0D 0A 09 09 20 20 20 20 20 41 4E 44 20 28 28 43    ....     AND ((C
01CC80:  68 61 72 50 6F 73 3E 30 29 20 4F 52 20 28 57 6F    harPos>0) OR (Wo
01CC90:  72 6B 69 6E 67 5E 2E 50 72 65 64 3C 3E 4E 49 4C    rking^.Pred<>NIL
01CCA0:  29 29 20 44 4F 0D 0A 09 09 09 49 4E 43 28 6C 69    )) DO.....INC(li
01CCB0:  6E 65 73 74 6F 6D 6F 76 65 29 3B 0D 0A 0D 0A 09    nestomove);.....
01CCC0:  09 09 28 2A 6D 6F 76 65 20 62 61 63 6B 20 6F 76    ..(*move back ov
01CCD0:  65 72 20 63 72 2F 6C 66 2A 29 0D 0A 0D 0A 09 09    er cr/lf*)......
01CCE0:  09 49 46 20 42 61 63 6B 75 70 28 29 20 41 4E 44    .IF Backup() AND
01CCF0:  20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61 72 73     (Working^.Chars
01CD00:  5B 43 68 61 72 50 6F 73 5D 3D 4C 46 29 20 54 48    [CharPos]=LF) TH
01CD10:  45 4E 0D 0A 09 09 09 09 62 3A 3D 42 61 63 6B 75    EN......b:=Backu
01CD20:  70 28 29 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09    p()......END;...
01CD30:  09 09 44 45 43 28 6C 69 6E 65 73 6D 6F 76 65 64    ..DEC(linesmoved
01CD40:  29 3B 0D 0A 09 09 09 6C 65 6E 3A 3D 42 61 63 6B    );.....len:=Back
01CD50:  75 70 4C 69 6E 65 28 29 3B 0D 0A 09 09 09 45 4E    upLine();.....EN
01CD60:  44 3B 0D 0A 09 20 20 20 20 45 4C 53 45 0D 0A 09    D;...    ELSE...
01CD70:  09 57 48 49 4C 45 20 09 28 6C 69 6E 65 73 74 6F    .WHILE .(linesto
01CD80:  6D 6F 76 65 3E 30 29 0D 0A 09 09 09 41 4E 44 20    move>0).....AND 
01CD90:  28 20 20 28 43 68 61 72 50 6F 73 3C 49 4E 54 45    (  (CharPos<INTE
01CDA0:  47 45 52 28 57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F    GER(Working^.Blo
01CDB0:  63 6B 4C 65 6E 29 29 0D 0A 09 09 09 20 20 20 20    ckLen)).....    
01CDC0:  4F 52 20 28 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78    OR (Working^.Nex
01CDD0:  74 3C 3E 4E 49 4C 29 29 20 44 4F 20 0D 0A 0D 0A    t<>NIL)) DO ....
01CDE0:  09 09 09 44 45 43 28 6C 69 6E 65 73 74 6F 6D 6F    ...DEC(linestomo
01CDF0:  76 65 29 3B 0D 0A 09 09 09 6C 65 6E 3A 3D 41 64    ve);.....len:=Ad
01CE00:  0A 0D 0A 09 44 6F 6E 65 20 72 65 74 75 72 6E 73    ....Done returns
01CE10:  20 74 72 75 65 20 69 66 20 6F 6E 65 20 69 73 20     true if one is 
01CE20:  66 6F 75 6E 64 2A 29 0D 0A 50 52 4F 43 45 44 55    found*)..PROCEDU
01CE30:  52 45 20 47 65 74 43 75 72 72 65 6E 74 43 68 61    RE GetCurrentCha
01CE40:  72 28 56 41 52 20 66 3A 45 64 69 74 46 69 6C 65    r(VAR f:EditFile
01CE50:  29 3A 43 48 41 52 3B 0D 0A 0D 0A 28 2A 09 52 65    ):CHAR;....(*.Re
01CE60:  74 75 72 6E 20 63 68 61 72 61 63 74 65 72 20 63    turn character c
01CE70:  75 72 72 65 6E 74 6C 79 20 70 6F 73 69 74 69 6F    urrently positio
01CE80:  6E 65 64 20 74 6F 2A 29 0D 0A 0D 0A 50 52 4F 43    ned to*)....PROC
01CE90:  45 44 55 52 45 20 43 61 6C 6C 57 69 74 68 46 69    EDURE CallWithFi
01CEA0:  6C 65 28 6E 61 6D 65 3A 41 52 52 41 59 20 4F 46    le(name:ARRAY OF
01CEB0:  20 43 48 41 52 3B 56 41 52 20 66 3A 45 64 69 74     CHAR;VAR f:Edit
01CEC0:  46 69 6C 65 29 3B 0D 0A 50 52 4F 43 45 44 55 52    File);..PROCEDUR
01CED0:  45 20 46 69 6C 65 54 79 70 65 28 56 41 52 20 66    E FileType(VAR f
01CEE0:  3A 45 64 69 74 46 69 6C 65 29 3A 43 41 52 44 49    :EditFile):CARDI
01CEF0:  4E 41 4C 3B 0D 0A 0D 0A 28 2A 09 43 61 6C 6C 20    NAL;....(*.Call 
01CF00:  70 72 6F 67 72 61 6D 20 77 69 74 68 20 66 69 6C    program with fil
01CF10:  65 20 61 73 20 70 61 72 61 6D 65 74 65 72 2A 29    e as parameter*)
01CF20:  0D 0A 50 52 4F 43 45 44 55 52 45 20 42 6C 6F 63    ..PROCEDURE Bloc
01CF30:  6B 43 6F 70 79 28 56 41 52 20 46 72 6F 6D 46 69    kCopy(VAR FromFi
01CF40:  6C 65 2C 54 6F 46 69 6C 65 3A 45 64 69 74 46 69    le,ToFile:EditFi
01CF50:  6C 65 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 50 52    le):BOOLEAN;..PR
01CF60:  4F 43 45 44 55 52 45 20 42 6C 6F 63 6B 44 65 6C    OCEDURE BlockDel
01CF70:  28 56 41 52 20 46 72 6F 6D 46 69 6C 65 3A 45 64    (VAR FromFile:Ed
01CF80:  69 74 46 69 6C 65 29 3A 42 4F 4F 4C 45 41 4E 3B    itFile):BOOLEAN;
01CF90:  0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65 66 69    ..PROCEDURE Defi
01CFA0:  6E 65 45 72 72 6F 72 73 28 56 41 52 20 66 3A 45    neErrors(VAR f:E
01CFB0:  64 69 74 46 69 6C 65 29 3B 0D 0A 45 4E 44 20 4D    ditFile);..END M
01CFC0:  61 6B 65 45 64 69 74 73 2E 0D 0A 0D 0A 0D 0A 09    akeEdits........
01CFD0:  0D 0A 0D 0A 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01CFE0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01CFF0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01D000:  76 61 6E 63 65 4C 69 6E 65 28 29 3B 0D 0A 09 09    vanceLine();....
01D010:  09 49 46 20 41 64 76 61 6E 63 65 4F 4B 20 54 48    .IF AdvanceOK TH
01D020:  45 4E 20 49 4E 43 28 6C 69 6E 65 73 6D 6F 76 65    EN INC(linesmove
01D030:  64 29 20 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B    d) END;.....END;
01D040:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 20 20 20 20 45    ....END;...    E
01D050:  4E 44 3B 0D 0A 09 73 61 76 65 63 75 72 70 6F 73    ND;...savecurpos
01D060:  28 66 29 3B 70 3A 3D 66 2E 43 75 72 50 6F 73 3B    (f);p:=f.CurPos;
01D070:  0D 0A 09 49 46 20 57 6F 72 6B 69 6E 67 5E 2E 43    ...IF Working^.C
01D080:  68 61 72 73 5B 43 68 61 72 50 6F 73 5D 3D 45 4F    hars[CharPos]=EO
01D090:  46 20 54 48 45 4E 0D 0A 0D 0A 09 09 28 2A 49 46    F THEN......(*IF
01D0A0:  20 77 65 20 61 72 65 20 61 74 20 65 6E 64 20 6F     we are at end o
01D0B0:  66 20 66 69 6C 65 2C 20 72 65 70 6F 73 69 74 69    f file, repositi
01D0C0:  6F 6E 20 74 6F 20 73 74 61 72 74 0D 0A 09 09 20    on to start.... 
01D0D0:  20 6F 66 20 63 75 72 72 65 6E 74 20 6C 69 6E 65     of current line
01D0E0:  20 61 73 20 52 65 74 72 6C 69 6E 65 20 61 6C 77     as Retrline alw
01D0F0:  61 79 73 20 72 65 74 75 72 6E 73 0D 0A 09 09 20    ays returns.... 
01D100:  20 70 6F 73 69 74 69 6F 6E 20 61 73 20 61 74 20     position as at 
01D110:  73 74 61 72 74 20 6F 66 20 6C 69 6E 65 2A 29 0D    start of line*).
01D120:  0A 0D 0A 09 09 6C 65 6E 3A 3D 42 61 63 6B 75 70    .....len:=Backup
01D130:  4C 69 6E 65 28 29 3B 0D 0A 09 09 73 61 76 65 63    Line();....savec
01D140:  75 72 70 6F 73 28 66 29 3B 0D 0A 09 09 70 3A 3D    urpos(f);....p:=
01D150:  66 2E 43 75 72 50 6F 73 3B 0D 0A 09 09 70 6F 73    f.CurPos;....pos
01D160:  3A 3D 6C 65 6E 0D 0A 09 45 4C 53 45 0D 0A 09 09    :=len...ELSE....
01D170:  6C 65 6E 3A 3D 41 64 76 61 6E 63 65 4C 69 6E 65    len:=AdvanceLine
01D180:  28 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 66 2E    ();....END;...f.
01D190:  43 75 72 50 6F 73 3A 3D 70 3B 0D 0A 09 45 4E 44    CurPos:=p;...END
01D1A0:  20 52 65 74 72 6C 69 6E 65 3B 0D 0A 50 52 4F 43     Retrline;..PROC
01D1B0:  45 44 55 52 45 20 52 65 61 64 4E 65 78 74 43 68    EDURE ReadNextCh
01D1C0:  61 72 28 56 41 52 20 70 3A 50 6F 73 69 74 69 6F    ar(VAR p:Positio
01D1D0:  6E 3B 56 41 52 20 63 68 3A 43 48 41 52 29 3B 0D    n;VAR ch:CHAR);.
01D1E0:  0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20 70 20    .BEGIN...WITH p 
01D1F0:  44 4F 0D 0A 09 09 49 46 20 4F 66 66 73 65 74 3E    DO....IF Offset>
01D200:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01D210:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01D220:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01D230:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
01D240:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 28 1A DE 20    ............(.. 
01D250:  2F 1A 2B 1A E1 20 2C 1A 2D 1A FF FF 04 21 73 1A    /.+.. ,.-....!s.
01D260:  FF FF FF FF FF FF 07 1F FF FF 36 1A 37 1A 38 1A    ..........6.7.8.
01D270:  FF FF FF FF 3B 1A FF FF 3D 1A FF FF FF FF FF FF    ....;...=.......
01D280:  63 68 0D 0A 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09    ch..*)..BEGIN...
01D290:  57 48 49 4C 45 20 28 4B 65 79 50 6F 73 3C 3E 4E    WHILE (KeyPos<>N
01D2A0:  49 4C 29 20 41 4E 44 20 28 4B 65 79 50 6F 73 5E    IL) AND (KeyPos^
01D2B0:  2E 63 68 3C 3E 63 68 29 20 44 4F 0D 0A 09 09 4B    .ch<>ch) DO....K
01D2C0:  65 79 50 6F 73 3A 3D 4B 65 79 50 6F 73 5E 2E 4E    eyPos:=KeyPos^.N
01D2D0:  65 78 74 41 6C 74 3B 0D 0A 09 09 45 4E 44 3B 0D    extAlt;....END;.
01D2E0:  0A 09 45 4E 44 20 53 65 61 72 63 68 54 6F 4E 65    ..END SearchToNe
01D2F0:  78 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 42    xt;..PROCEDURE B
01D300:  75 69 6C 64 4B 65 79 53 65 71 3B 0D 0A 0D 0A 28    uildKeySeq;....(
01D310:  2A 09 45 6E 74 65 72 20 61 20 6B 65 79 20 73 65    *.Enter a key se
01D320:  71 75 65 6E 63 65 20 69 6E 74 6F 20 74 68 65 20    quence into the 
01D330:  6B 65 79 20 73 65 71 75 65 6E 63 65 20 74 72 65    key sequence tre
01D340:  65 0D 0A 0D 0A 09 4F 6E 20 65 6E 74 72 79 2C 20    e.....On entry, 
01D350:  4B 65 79 53 65 71 20 63 6F 6E 74 61 69 6E 73 20    KeySeq contains 
01D360:  73 65 71 75 65 6E 63 65 20 74 6F 20 62 75 69 6C    sequence to buil
01D370:  64 0D 0A 0D 0A 09 4F 6E 20 65 78 69 74 2C 20 4B    d.....On exit, K
01D380:  65 79 50 6F 73 20 70 6F 69 6E 74 73 20 74 6F 20    eyPos points to 
01D390:  65 6E 74 72 79 20 66 6F 72 20 6D 61 63 72 6F 20    entry for macro 
01D3A0:  70 6F 69 6E 74 65 72 2A 29 0D 0A 42 45 47 49 4E    pointer*)..BEGIN
01D3B0:  0D 0A 09 69 3A 3D 31 3B 0D 0A 09 4B 65 79 50 6F    ...i:=1;...KeyPo
01D3C0:  73 3A 3D 4B 65 79 43 68 61 69 6E 42 61 73 65 3B    s:=KeyChainBase;
01D3D0:  0D 0A 09 4C 61 73 74 4B 65 79 50 6F 73 3A 3D 4E    ...LastKeyPos:=N
01D3E0:  49 4C 3B 0D 0A 09 28 2A 20 46 69 72 73 74 20 73    IL;...(* First s
01D3F0:  63 61 6E 20 64 6F 77 6E 20 63 6F 6D 6D 6F 6E 20    can down common 
01D400:  3D 42 6C 6F 63 6B 5E 2E 42 6C 6F 63 6B 4C 65 6E    =Block^.BlockLen
01D410:  20 54 48 45 4E 0D 0A 09 09 09 49 46 20 42 6C 6F     THEN.....IF Blo
01D420:  63 6B 5E 2E 4E 65 78 74 3D 4E 49 4C 20 54 48 45    ck^.Next=NIL THE
01D430:  4E 0D 0A 09 09 09 09 63 68 3A 3D 45 4F 46 3B 0D    N......ch:=EOF;.
01D440:  0A 09 09 09 09 52 45 54 55 52 4E 0D 0A 09 09 09    .....RETURN.....
01D450:  45 4C 53 45 0D 0A 09 09 09 09 42 6C 6F 63 6B 3A    ELSE......Block:
01D460:  3D 42 6C 6F 63 6B 5E 2E 4E 65 78 74 3B 0D 0A 09    =Block^.Next;...
01D470:  09 09 09 4F 66 66 73 65 74 3A 3D 30 3B 0D 0A 09    ...Offset:=0;...
01D480:  09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B    ...END;.....END;
01D490:  0D 0A 09 09 63 68 3A 3D 42 6C 6F 63 6B 5E 2E 43    ....ch:=Block^.C
01D4A0:  68 61 72 73 5B 4F 66 66 73 65 74 5D 3B 0D 0A 09    hars[Offset];...
01D4B0:  09 49 46 20 63 68 3C 3E 45 4F 46 20 54 48 45 4E    .IF ch<>EOF THEN
01D4C0:  20 4F 66 66 73 65 74 3A 3D 4F 66 66 73 65 74 2B     Offset:=Offset+
01D4D0:  31 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    1 END;....END;..
01D4E0:  09 45 4E 44 20 52 65 61 64 4E 65 78 74 43 68 61    .END ReadNextCha
01D4F0:  72 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65    r;..PROCEDURE Ge
01D500:  74 43 75 72 72 65 6E 74 43 68 61 72 28 56 41 52    tCurrentChar(VAR
01D510:  20 66 3A 45 64 69 74 46 69 6C 65 29 3A 43 48 41     f:EditFile):CHA
01D520:  52 3B 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09 70 6F    R;....BEGIN...po
01D530:  73 3A 3D 66 2E 43 75 72 50 6F 73 3B 0D 0A 09 52    s:=f.CurPos;...R
01D540:  65 61 64 4E 65 78 74 43 68 61 72 28 70 6F 73 2C    eadNextChar(pos,
01D550:  63 68 29 3B 0D 0A 09 52 45 54 55 52 4E 20 63 68    ch);...RETURN ch
01D560:  0D 0A 09 45 4E 44 20 47 65 74 43 75 72 72 65 6E    ...END GetCurren
01D570:  74 43 68 61 72 3B 0D 0A 50 52 4F 43 45 44 55 52    tChar;..PROCEDUR
01D580:  45 20 20 42 61 63 6B 4F 6E 65 43 68 61 72 28 56    E  BackOneChar(V
01D590:  41 52 20 66 3A 45 64 69 74 46 69 6C 65 29 3A 42    AR f:EditFile):B
01D5A0:  4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A    OOLEAN;..BEGIN..
01D5B0:  09 73 65 74 63 75 72 70 6F 73 28 66 29 3B 0D 0A    .setcurpos(f);..
01D5C0:  09 62 3A 3D 42 61 63 6B 75 70 28 29 3B 0D 0A 09    .b:=Backup();...
01D5D0:  73 61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D 0A    savecurpos(f);..
01D5E0:  09 52 45 54 55 52 4E 20 62 0D 0A 09 45 4E 44 20    .RETURN b...END 
01D5F0:  42 61 63 6B 4F 6E 65 43 68 61 72 3B 09 09 09 09    BackOneChar;....
01D600:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D610:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D620:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D630:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D640:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D650:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D660:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D670:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D680:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D690:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D6A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D6B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D6C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D6D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D6E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D6F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D7A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D7B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D7C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D7D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D7E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D7F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01D800:  0D 0A 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 20    .....PROCEDURE  
01D810:  46 6F 72 77 61 72 64 4F 6E 65 43 68 61 72 28 56    ForwardOneChar(V
01D820:  41 52 20 66 3A 45 64 69 74 46 69 6C 65 29 3A 42    AR f:EditFile):B
01D830:  4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A    OOLEAN;..BEGIN..
01D840:  09 73 65 74 63 75 72 70 6F 73 28 66 29 3B 0D 0A    .setcurpos(f);..
01D850:  09 62 3A 3D 41 64 76 61 6E 63 65 28 29 3B 0D 0A    .b:=Advance();..
01D860:  09 73 61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D    .savecurpos(f);.
01D870:  0A 09 52 45 54 55 52 4E 20 62 0D 0A 09 45 4E 44    ..RETURN b...END
01D880:  20 46 6F 72 77 61 72 64 4F 6E 65 43 68 61 72 3B     ForwardOneChar;
01D890:  09 09 09 09 0D 0A 56 41 52 09 53 74 72 69 6E 67    ......VAR.String
01D8A0:  3A 41 52 52 41 59 5B 30 2E 2E 35 39 5D 20 4F 46    :ARRAY[0..59] OF
01D8B0:  20 43 48 41 52 3B 0D 0A 09 53 74 72 69 6E 67 4C     CHAR;...StringL
01D8C0:  65 6E 3A 43 41 52 44 49 4E 41 4C 3D 30 3B 09 0D    en:CARDINAL=0;..
01D8D0:  0A 09 4D 61 74 63 68 43 68 61 72 4E 6F 3A 43 41    ..MatchCharNo:CA
01D8E0:  52 44 49 4E 41 4C 3B 0D 0A 09 4D 61 74 63 68 43    RDINAL;...MatchC
01D8F0:  68 61 72 3A 43 48 41 52 3B 0D 0A 0D 0A 50 52 4F    har:CHAR;....PRO
01D900:  43 45 44 55 52 45 20 4D 61 74 63 68 65 73 28 29    CEDURE Matches()
01D910:  3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E    :BOOLEAN;..BEGIN
01D920:  0D 0A 09 52 45 54 55 52 4E 20 28 57 6F 72 6B 69    ...RETURN (Worki
01D930:  6E 67 5E 2E 43 68 61 72 73 5B 43 68 61 72 50 6F    ng^.Chars[CharPo
01D940:  73 5D 3D 53 74 72 69 6E 67 5B 4D 61 74 63 68 43    s]=String[MatchC
01D950:  68 61 72 4E 6F 5D 29 0D 0A 09 20 20 20 20 4F 52    harNo])...    OR
01D960:  20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61 72 73     (Working^.Chars
01D970:  5B 43 68 61 72 50 6F 73 5D 3D 43 41 50 28 53 74    [CharPos]=CAP(St
01D980:  72 69 6E 67 5B 4D 61 74 63 68 43 68 61 72 4E 6F    ring[MatchCharNo
01D990:  5D 29 29 0D 0A 09 45 4E 44 20 4D 61 74 63 68 65    ]))...END Matche
01D9A0:  73 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 72    s;..PROCEDURE Pr
01D9B0:  65 70 61 72 65 53 74 72 69 6E 67 28 73 3A 41 52    epareString(s:AR
01D9C0:  52 41 59 20 4F 46 20 43 48 41 52 3B 6C 65 6E 3A    RAY OF CHAR;len:
01D9D0:  49 4E 54 45 47 45 52 29 3B 0D 0A 0D 0A 42 45 47    INTEGER);....BEG
01D9E0:  49 4E 0D 0A 09 53 74 72 69 6E 67 4C 65 6E 3A 3D    IN...StringLen:=
01D9F0:  6C 65 6E 3B 0D 0A 09 4D 6F 76 65 75 70 28 41 44    len;...Moveup(AD
01DA00:  20 20 5E 51 43 20 61 6E 64 20 5E 51 52 2A 29 0D      ^QC and ^QR*).
01DA10:  0A 09 09 57 6F 72 6B 69 6E 67 3A 3D 66 2E 43 68    ...Working:=f.Ch
01DA20:  61 69 6E 3B 0D 0A 09 09 43 68 61 72 50 6F 73 3A    ain;....CharPos:
01DA30:  3D 30 3B 0D 0A 09 09 70 6F 73 3A 3D 30 3B 0D 0A    =0;....pos:=0;..
01DA40:  09 45 4C 53 49 46 20 6C 69 6E 65 73 74 6F 6D 6F    .ELSIF linestomo
01DA50:  76 65 3D 31 36 37 33 36 20 54 48 45 4E 0D 0A 09    ve=16736 THEN...
01DA60:  09 57 48 49 4C 45 20 57 6F 72 6B 69 6E 67 5E 2E    .WHILE Working^.
01DA70:  4E 65 78 74 3C 3E 4E 49 4C 20 44 4F 0D 0A 09 09    Next<>NIL DO....
01DA80:  09 57 6F 72 6B 69 6E 67 3A 3D 57 6F 72 6B 69 6E    .Working:=Workin
01DA90:  67 5E 2E 4E 65 78 74 3B 0D 0A 09 09 09 45 4E 44    g^.Next;.....END
01DAA0:  3B 0D 0A 09 09 43 68 61 72 50 6F 73 3A 3D 4F 52    ;....CharPos:=OR
01DAB0:  44 28 57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B    D(Working^.Block
01DAC0:  4C 65 6E 29 3B 0D 0A 09 09 49 46 20 57 6F 72 6B    Len);....IF Work
01DAD0:  69 6E 67 5E 2E 43 68 61 72 73 5B 43 68 61 72 50    ing^.Chars[CharP
01DAE0:  6F 73 2D 31 5D 3D 45 4F 46 20 54 48 45 4E 0D 0A    os-1]=EOF THEN..
01DAF0:  09 09 09 44 45 43 28 43 68 61 72 50 6F 73 29 3B    ...DEC(CharPos);
01DB00:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 73 61 76    .....END;....sav
01DB10:  65 63 75 72 70 6F 73 28 66 29 3B 0D 0A 09 09 70    ecurpos(f);....p
01DB20:  3A 3D 66 2E 43 75 72 50 6F 73 3B 0D 0A 09 09 70    :=f.CurPos;....p
01DB30:  6F 73 3A 3D 42 61 63 6B 75 70 4C 69 6E 65 28 29    os:=BackupLine()
01DB40:  3B 0D 0A 09 09 66 2E 43 75 72 50 6F 73 3A 3D 70    ;....f.CurPos:=p
01DB50:  3B 0D 0A 09 45 4C 53 45 0D 0A 09 20 20 20 20 28    ;...ELSE...    (
01DB60:  2A 63 68 61 73 65 20 62 61 63 6B 77 61 72 64 73    *chase backwards
01DB70:  20 75 6E 74 69 6C 20 61 20 43 52 2C 20 4C 46 20     until a CR, LF 
01DB80:  6F 72 20 46 46 20 69 73 20 66 6F 75 6E 64 20 61    or FF is found a
01DB90:  6E 64 0D 0A 09 20 20 20 20 20 20 63 61 6C 63 75    nd...      calcu
01DBA0:  6C 61 74 65 20 70 6F 73 69 74 69 6F 6E 20 69 6E    late position in
01DBB0:  20 6C 69 6E 65 2A 29 0D 0A 09 20 20 20 20 70 6F     line*)...    po
01DBC0:  73 3A 3D 42 61 63 6B 75 70 4C 69 6E 65 28 29 3B    s:=BackupLine();
01DBD0:  0D 0A 09 20 20 20 20 6C 65 6E 3A 3D 30 3B 0D 0A    ...    len:=0;..
01DBE0:  0D 0A 09 20 20 20 20 28 2A 09 6E 6F 77 20 70 6F    ...    (*.now po
01DBF0:  73 69 74 69 6F 6E 65 64 20 74 6F 20 62 65 67 69    sitioned to begi
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:  52 28 73 29 2C 41 44 52 28 53 74 72 69 6E 67 29    R(s),ADR(String)
01DD10:  2C 6C 65 6E 29 3B 0D 0A 09 45 4E 44 20 50 72 65    ,len);...END Pre
01DD20:  70 61 72 65 53 74 72 69 6E 67 3B 0D 0A 28 2A 09    pareString;..(*.
01DD30:  70 72 65 70 61 72 65 20 61 20 73 74 72 69 6E 67    prepare a string
01DD40:  20 66 6F 72 20 75 73 65 20 69 6E 20 61 20 66 69     for use in a fi
01DD50:  6E 64 20 63 6F 6D 6D 61 6E 64 2A 29 0D 0A 0D 0A    nd command*)....
01DD60:  50 52 4F 43 45 44 55 52 45 20 46 69 6E 64 53 74    PROCEDURE FindSt
01DD70:  72 69 6E 67 28 56 41 52 20 66 3A 45 64 69 74 46    ring(VAR f:EditF
01DD80:  69 6C 65 3B 42 61 63 6B 77 61 72 64 73 3A 42 4F    ile;Backwards:BO
01DD90:  4F 4C 45 41 4E 29 3A 42 4F 4F 4C 45 41 4E 3B 0D    OLEAN):BOOLEAN;.
01DDA0:  0A 0D 0A 0D 0A 28 2A 09 62 61 63 6B 77 61 72 64    .....(*.backward
01DDB0:  73 20 6E 6F 74 20 79 65 74 20 69 6D 70 6C 65 6D    s not yet implem
01DDC0:  65 6E 74 65 64 2A 29 0D 0A 42 45 47 49 4E 0D 0A    ented*)..BEGIN..
01DDD0:  09 49 46 20 53 74 72 69 6E 67 4C 65 6E 3D 30 20    .IF StringLen=0 
01DDE0:  54 48 45 4E 20 52 45 54 55 52 4E 20 54 52 55 45    THEN RETURN TRUE
01DDF0:  20 45 4E 44 3B 0D 0A 09 73 65 74 63 75 72 70 6F     END;...setcurpo
01DE00:  73 28 66 29 3B 0D 0A 09 49 46 20 42 61 63 6B 77    s(f);...IF Backw
01DE10:  61 72 64 73 20 54 48 45 4E 0D 0A 09 09 4D 61 74    ards THEN....Mat
01DE20:  63 68 43 68 61 72 3A 3D 53 74 72 69 6E 67 5B 53    chChar:=String[S
01DE30:  74 72 69 6E 67 4C 65 6E 2D 31 5D 3B 0D 0A 09 09    tringLen-1];....
01DE40:  4C 4F 4F 50 0D 0A 09 09 09 49 46 20 4E 4F 54 20    LOOP.....IF NOT 
01DE50:  42 61 63 6B 75 70 28 29 20 54 48 45 4E 20 45 58    Backup() THEN EX
01DE60:  49 54 20 45 4E 44 3B 0D 0A 09 09 09 49 46 20 28    IT END;.....IF (
01DE70:  57 6F 72 6B 69 6E 67 5E 2E 43 68 61 72 73 5B 43    Working^.Chars[C
01DE80:  68 61 72 50 6F 73 5D 3D 4D 61 74 63 68 43 68 61    harPos]=MatchCha
01DE90:  72 29 20 0D 0A 09 09 09 20 20 4F 52 20 28 57 6F    r) .....  OR (Wo
01DEA0:  72 6B 69 6E 67 5E 2E 43 68 61 72 73 5B 43 68 61    rking^.Chars[Cha
01DEB0:  72 50 6F 73 5D 3D 43 41 50 28 4D 61 74 63 68 43    rPos]=CAP(MatchC
01DEC0:  68 61 72 29 29 20 54 48 45 4E 0D 0A 09 09 09 09    har)) THEN......
01DED0:  4D 61 74 63 68 43 68 61 72 4E 6F 3A 3D 53 74 72    MatchCharNo:=Str
01DEE0:  69 6E 67 4C 65 6E 2D 32 3B 0D 0A 09 09 09 09 73    ingLen-2;......s
01DEF0:  61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D 0A 09    avecurpos(f);...
01DF00:  65 74 50 6F 73 69 74 69 6F 6E 28 56 41 52 20 66    etPosition(VAR f
01DF10:  3A 45 64 69 74 46 69 6C 65 3B 70 3A 50 6F 73 69    :EditFile;p:Posi
01DF20:  74 69 6F 6E 29 3B 0D 0A 28 2A 09 67 65 74 2F 73    tion);..(*.get/s
01DF30:  65 74 20 70 6F 73 69 74 69 6F 6E 20 69 6E 20 61    et position in a
01DF40:  20 66 69 6C 65 2A 29 0D 0A 42 45 47 49 4E 0D 0A     file*)..BEGIN..
01DF50:  09 66 2E 43 75 72 50 6F 73 3A 3D 70 3B 0D 0A 09    .f.CurPos:=p;...
01DF60:  0D 0A 09 28 2A 09 70 6F 69 6E 74 65 72 20 6D 61    ...(*.pointer ma
01DF70:  79 20 62 65 20 70 6F 69 6E 74 69 6E 67 20 6A 75    y be pointing ju
01DF80:  73 74 20 61 66 74 65 72 20 65 6E 64 20 6F 66 20    st after end of 
01DF90:  62 6C 6F 63 6B 0D 0A 09 09 28 61 66 74 65 72 20    block....(after 
01DFA0:  64 65 6C 65 74 65 73 29 2C 20 72 65 67 75 6C 61    deletes), regula
01DFB0:  72 69 7A 65 20 74 68 61 74 20 73 69 74 75 61 74    rize that situat
01DFC0:  69 6F 6E 2A 29 0D 0A 0D 0A 09 57 49 54 48 20 66    ion*).....WITH f
01DFD0:  2E 43 75 72 50 6F 73 20 44 4F 0D 0A 09 09 49 46    .CurPos DO....IF
01DFE0:  20 09 20 20 20 20 28 4F 66 66 73 65 74 3E 3D 42     .    (Offset>=B
01DFF0:  6C 6F 63 6B 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 20    lock^.BlockLen) 
01E000:  0D 0A 09 09 09 41 4E 44 20 28 42 6C 6F 63 6B 5E    .....AND (Block^
01E010:  2E 4E 65 78 74 3C 3E 4E 49 4C 29 20 54 48 45 4E    .Next<>NIL) THEN
01E020:  0D 0A 09 09 09 4F 66 66 73 65 74 3A 3D 30 3B 0D    .....Offset:=0;.
01E030:  0A 09 09 09 42 6C 6F 63 6B 3A 3D 42 6C 6F 63 6B    ....Block:=Block
01E040:  5E 2E 4E 65 78 74 0D 0A 09 09 09 45 4E 44 3B 0D    ^.Next.....END;.
01E050:  0A 09 09 45 4E 44 3B 20 0D 0A 09 45 4E 44 20 53    ...END; ...END S
01E060:  65 74 50 6F 73 69 74 69 6F 6E 3B 0D 0A 50 52 4F    etPosition;..PRO
01E070:  43 45 44 55 52 45 20 4C 61 62 65 6C 4F 70 28 56    CEDURE LabelOp(V
01E080:  41 52 20 66 3A 45 64 69 74 46 69 6C 65 3B 44 65    AR f:EditFile;De
01E090:  66 69 6E 65 3A 42 4F 4F 4C 45 41 4E 3B 63 68 3A    fine:BOOLEAN;ch:
01E0A0:  43 48 41 52 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A    CHAR):BOOLEAN;..
01E0B0:  28 2A 0D 0A 09 70 65 72 66 6F 72 6D 20 61 20 6C    (*...perform a l
01E0C0:  61 62 65 6C 20 6F 70 65 72 61 74 69 6F 6E 20 2C    abel operation ,
01E0D0:  20 72 65 74 75 72 6E 20 74 72 75 65 20 69 66 20     return true if 
01E0E0:  73 75 63 63 65 73 73 66 75 6C 0D 0A 09 44 65 66    successful...Def
01E0F0:  69 6E 65 20 69 73 20 74 72 75 65 20 69 66 20 74    ine is true if t
01E100:  09 09 09 57 48 49 4C 45 20 28 4D 61 74 63 68 43    ...WHILE (MatchC
01E110:  68 61 72 4E 6F 3E 30 29 0D 0A 09 09 09 09 20 20    harNo>0)......  
01E120:  20 20 41 4E 44 20 28 42 61 63 6B 75 70 28 29 29      AND (Backup())
01E130:  0D 0A 09 09 09 09 20 20 20 20 41 4E 44 20 4D 61    ......    AND Ma
01E140:  74 63 68 65 73 28 29 20 44 4F 0D 0A 09 09 09 09    tches() DO......
01E150:  09 44 45 43 28 4D 61 74 63 68 43 68 61 72 4E 6F    .DEC(MatchCharNo
01E160:  29 3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09    );.......END;...
01E170:  09 09 09 49 46 20 4D 61 74 63 68 43 68 61 72 4E    ...IF MatchCharN
01E180:  6F 3C 30 20 54 48 45 4E 20 52 45 54 55 52 4E 20    o<0 THEN RETURN 
01E190:  54 52 55 45 3B 20 45 4E 44 3B 0D 0A 09 09 09 09    TRUE; END;......
01E1A0:  49 46 20 42 61 63 6B 75 70 28 29 20 41 4E 44 20    IF Backup() AND 
01E1B0:  4D 61 74 63 68 65 73 28 29 20 0D 0A 09 09 09 09    Matches() ......
01E1C0:  20 20 20 41 4E 44 20 28 4D 61 74 63 68 43 68 61       AND (MatchCha
01E1D0:  72 4E 6F 3C 3D 30 29 20 54 48 45 4E 0D 0A 09 09    rNo<=0) THEN....
01E1E0:  09 09 09 52 45 54 55 52 4E 20 54 52 55 45 3B 0D    ...RETURN TRUE;.
01E1F0:  0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 09    ......END;......
01E200:  73 65 74 63 75 72 70 6F 73 28 66 29 3B 0D 0A 09    setcurpos(f);...
01E210:  09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B    ...END;.....END;
01E220:  0D 0A 09 45 4C 53 45 0D 0A 09 09 4D 61 74 63 68    ...ELSE....Match
01E230:  43 68 61 72 3A 3D 53 74 72 69 6E 67 5B 30 5D 3B    Char:=String[0];
01E240:  0D 0A 09 09 4C 4F 4F 50 0D 0A 09 09 09 49 46 20    ....LOOP.....IF 
01E250:  4E 4F 54 20 41 64 76 61 6E 63 65 28 29 20 54 48    NOT Advance() TH
01E260:  45 4E 20 45 58 49 54 20 45 4E 44 3B 0D 0A 09 09    EN EXIT END;....
01E270:  09 49 46 20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68    .IF (Working^.Ch
01E280:  61 72 73 5B 43 68 61 72 50 6F 73 5D 3D 4D 61 74    ars[CharPos]=Mat
01E290:  63 68 43 68 61 72 29 0D 0A 09 09 09 20 20 4F 52    chChar).....  OR
01E2A0:  20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61 72 73     (Working^.Chars
01E2B0:  5B 43 68 61 72 50 6F 73 5D 3D 43 41 50 28 4D 61    [CharPos]=CAP(Ma
01E2C0:  74 63 68 43 68 61 72 29 29 20 54 48 45 4E 0D 0A    tchChar)) THEN..
01E2D0:  09 09 09 09 4D 61 74 63 68 43 68 61 72 4E 6F 3A    ....MatchCharNo:
01E2E0:  3D 31 3B 0D 0A 09 09 09 09 73 61 76 65 63 75 72    =1;......savecur
01E2F0:  70 6F 73 28 66 29 3B 0D 0A 09 09 09 09 57 48 49    pos(f);......WHI
01E300:  68 65 20 6F 70 65 72 61 74 69 6F 6E 20 69 73 20    he operation is 
01E310:  61 20 64 65 66 69 6E 65 20 6C 61 62 65 6C 0D 0A    a define label..
01E320:  09 69 74 20 69 73 20 66 61 6C 73 65 20 69 66 20    .it is false if 
01E330:  69 74 20 69 73 20 61 20 67 6F 74 6F 20 6C 61 62    it is a goto lab
01E340:  65 6C 0D 0A 2A 29 0D 0A 0D 0A 56 41 52 09 69 3A    el..*)....VAR.i:
01E350:  43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E    CARDINAL;..BEGIN
01E360:  0D 0A 09 28 2A 24 41 5E 2A 29 0D 0A 09 63 68 3A    ...(*$A^*)...ch:
01E370:  3D 43 41 50 28 63 68 29 3B 0D 0A 09 43 41 53 45    =CAP(ch);...CASE
01E380:  20 63 68 20 4F 46 0D 0A 09 09 27 42 27 3A 20 69     ch OF....'B': i
01E390:  3A 3D 31 30 7C 0D 0A 09 09 27 5E 4B 27 2C 27 4B    :=10|....'^K','K
01E3A0:  27 3A 20 69 3A 3D 31 31 7C 0D 0A 09 09 31 78 2E    ': i:=11|....1x.
01E3B0:  2E 33 78 3A 69 3A 3D 4F 52 44 28 63 68 29 2B 31    .3x:i:=ORD(ch)+1
01E3C0:  31 7C 0D 0A 09 09 27 30 27 2E 2E 27 39 27 3A 69    1|....'0'..'9':i
01E3D0:  3A 3D 4F 52 44 28 63 68 29 2D 4F 52 44 28 27 30    :=ORD(ch)-ORD('0
01E3E0:  27 29 7C 0D 0A 09 09 30 62 30 78 2E 2E 30 62 39    ')|....0b0x..0b9
01E3F0:  78 3A 69 3A 3D 4F 52 44 28 63 68 29 2D 30 62 30    x:i:=ORD(ch)-0b0
01E400:  68 2B 31 35 0D 0A 09 09 45 4C 53 45 20 52 45 54    h+15....ELSE RET
01E410:  55 52 4E 20 46 41 4C 53 45 0D 0A 09 09 45 4E 44    URN FALSE....END
01E420:  3B 0D 0A 09 49 46 20 44 65 66 69 6E 65 20 54 48    ;...IF Define TH
01E430:  45 4E 0D 0A 09 09 47 65 74 50 6F 73 69 74 69 6F    EN....GetPositio
01E440:  6E 28 66 2C 66 2E 4C 61 62 65 6C 73 5B 69 5D 29    n(f,f.Labels[i])
01E450:  3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 49 46 20 66    ;...ELSE....IF f
01E460:  2E 4C 61 62 65 6C 73 5B 69 5D 2E 42 6C 6F 63 6B    .Labels[i].Block
01E470:  3D 4E 49 4C 20 54 48 45 4E 20 52 45 54 55 52 4E    =NIL THEN RETURN
01E480:  20 46 41 4C 53 45 20 45 4E 44 3B 0D 0A 09 09 53     FALSE END;....S
01E490:  65 74 50 6F 73 69 74 69 6F 6E 28 66 2C 66 2E 4C    etPosition(f,f.L
01E4A0:  61 62 65 6C 73 5B 69 5D 29 3B 0D 0A 09 20 09 45    abels[i]);... .E
01E4B0:  4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 54 52 55    ND;...RETURN TRU
01E4C0:  45 3B 0D 0A 09 45 4E 44 20 4C 61 62 65 6C 4F 70    E;...END LabelOp
01E4D0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 41 64 76    ;..PROCEDURE Adv
01E4E0:  61 6E 63 65 28 29 3A 42 4F 4F 4C 45 41 4E 3B 0D    ance():BOOLEAN;.
01E4F0:  0A 0D 0A 28 2A 09 61 64 76 61 6E 63 65 20 61 20    ...(*.advance a 
01E500:  4C 45 20 28 4D 61 74 63 68 43 68 61 72 4E 6F 3C    LE (MatchCharNo<
01E510:  53 74 72 69 6E 67 4C 65 6E 29 0D 0A 09 09 09 09    StringLen)......
01E520:  20 20 20 20 41 4E 44 20 28 41 64 76 61 6E 63 65        AND (Advance
01E530:  28 29 29 0D 0A 09 09 09 09 20 20 20 20 41 4E 44    ())......    AND
01E540:  20 20 4D 61 74 63 68 65 73 28 29 20 44 4F 0D 0A      Matches() DO..
01E550:  09 09 09 09 09 49 4E 43 28 4D 61 74 63 68 43 68    .....INC(MatchCh
01E560:  61 72 4E 6F 29 3B 0D 0A 09 09 09 09 09 45 4E 44    arNo);.......END
01E570:  3B 0D 0A 09 09 09 09 49 46 20 4D 61 74 63 68 43    ;......IF MatchC
01E580:  68 61 72 4E 6F 3E 3D 53 74 72 69 6E 67 4C 65 6E    harNo>=StringLen
01E590:  20 54 48 45 4E 0D 0A 09 09 09 09 09 52 45 54 55     THEN.......RETU
01E5A0:  52 4E 20 54 52 55 45 3B 0D 0A 09 09 09 09 09 45    RN TRUE;.......E
01E5B0:  4E 44 3B 0D 0A 09 09 09 09 73 65 74 63 75 72 70    ND;......setcurp
01E5C0:  6F 73 28 66 29 3B 0D 0A 09 09 09 09 45 4E 44 3B    os(f);......END;
01E5D0:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44    .....END;....END
01E5E0:  3B 0D 0A 09 73 61 76 65 63 75 72 70 6F 73 28 66    ;...savecurpos(f
01E5F0:  29 3B 0D 0A 09 52 45 54 55 52 4E 20 46 41 4C 53    );...RETURN FALS
01E600:  45 3B 0D 0A 09 45 4E 44 20 46 69 6E 64 53 74 72    E;...END FindStr
01E610:  69 6E 67 3B 0D 0A 28 2A 09 41 63 74 75 61 6C 6C    ing;..(*.Actuall
01E620:  79 20 66 69 6E 64 20 74 68 65 20 6E 65 78 74 20    y find the next 
01E630:  6F 63 63 75 72 72 65 6E 63 65 20 6F 66 20 74 68    occurrence of th
01E640:  65 20 73 74 72 69 6E 67 09 0D 0A 0D 0A 09 44 6F    e string......Do
01E650:  6E 65 20 72 65 74 75 72 6E 73 20 74 72 75 65 20    ne returns true 
01E660:  69 66 20 6F 6E 65 20 69 73 20 66 6F 75 6E 64 2A    if one is found*
01E670:  29 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 61 6C    )..PROCEDURE Cal
01E680:  6C 57 69 74 68 46 69 6C 65 28 4E 61 6D 65 3A 41    lWithFile(Name:A
01E690:  52 52 41 59 20 4F 46 20 43 48 41 52 3B 56 41 52    RRAY OF CHAR;VAR
01E6A0:  20 66 3A 45 64 69 74 46 69 6C 65 29 3B 0D 0A 42     f:EditFile);..B
01E6B0:  45 47 49 4E 0D 0A 09 4D 61 6B 65 43 61 6C 6C 28    EGIN...MakeCall(
01E6C0:  4E 61 6D 65 2C 66 2E 66 2E 66 29 3B 0D 0A 09 45    Name,f.f.f);...E
01E6D0:  4E 44 20 43 61 6C 6C 57 69 74 68 46 69 6C 65 3B    ND CallWithFile;
01E6E0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 6C 65    ..PROCEDURE File
01E6F0:  54 79 70 65 28 56 41 52 20 66 3A 45 64 69 74 46    Type(VAR f:EditF
01E700:  63 68 61 72 61 63 74 65 72 20 70 6F 73 69 74 69    character positi
01E710:  6F 6E 20 69 6E 20 74 68 65 20 63 75 72 72 65 6E    on in the curren
01E720:  74 20 66 69 6C 65 2A 29 0D 0A 42 45 47 49 4E 09    t file*)..BEGIN.
01E730:  09 0D 0A 09 49 4E 43 28 43 68 61 72 50 6F 73 29    ....INC(CharPos)
01E740:  3B 0D 0A 09 49 46 20 43 68 61 72 50 6F 73 3E 3D    ;...IF CharPos>=
01E750:  49 4E 54 45 47 45 52 28 57 6F 72 6B 69 6E 67 5E    INTEGER(Working^
01E760:  2E 42 6C 6F 63 6B 4C 65 6E 29 20 54 48 45 4E 0D    .BlockLen) THEN.
01E770:  0A 09 09 0D 0A 09 09 49 46 20 57 6F 72 6B 69 6E    .......IF Workin
01E780:  67 5E 2E 4E 65 78 74 3C 3E 4E 49 4C 20 54 48 45    g^.Next<>NIL THE
01E790:  4E 0D 0A 09 09 09 57 6F 72 6B 69 6E 67 3A 3D 57    N.....Working:=W
01E7A0:  6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3B 0D 0A 09    orking^.Next;...
01E7B0:  09 09 43 68 61 72 50 6F 73 3A 3D 30 3B 0D 0A 09    ..CharPos:=0;...
01E7C0:  09 45 4C 53 45 0D 0A 09 09 09 52 45 54 55 52 4E    .ELSE.....RETURN
01E7D0:  20 46 41 4C 53 45 0D 0A 09 09 09 45 4E 44 3B 0D     FALSE.....END;.
01E7E0:  0A 09 09 45 4E 44 3B 20 28 2A 43 68 61 72 50 6F    ...END; (*CharPo
01E7F0:  73 3E 42 6C 6F 63 6B 4C 65 6E 2A 29 0D 0A 09 52    s>BlockLen*)...R
01E800:  45 54 55 52 4E 20 57 6F 72 6B 69 6E 67 5E 2E 43    ETURN Working^.C
01E810:  68 61 72 73 5B 43 68 61 72 50 6F 73 5D 3C 3E 45    hars[CharPos]<>E
01E820:  4F 46 0D 0A 09 45 4E 44 20 41 64 76 61 6E 63 65    OF...END Advance
01E830:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 49 6E 73    ;..PROCEDURE Ins
01E840:  69 64 65 42 6C 6F 63 6B 28 56 41 52 20 46 3A 45    ideBlock(VAR F:E
01E850:  64 69 74 46 69 6C 65 29 3A 42 4F 4F 4C 45 41 4E    ditFile):BOOLEAN
01E860:  3B 0D 0A 0D 0A 28 2A 09 43 68 65 63 6B 20 69 66    ;....(*.Check if
01E870:  20 63 75 72 72 65 6E 74 20 70 6F 73 69 74 69 6F     current positio
01E880:  6E 20 69 73 20 69 6E 73 69 64 65 20 62 6C 6F 63    n is inside bloc
01E890:  6B 20 2A 29 0D 0A 56 41 52 09 62 3A 50 54 65 78    k *)..VAR.b:PTex
01E8A0:  74 3B 0D 0A 09 43 6F 75 6C 64 42 65 3A 42 4F 4F    t;...CouldBe:BOO
01E8B0:  4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 73    LEAN;..BEGIN...s
01E8C0:  65 74 63 75 72 70 6F 73 28 46 29 3B 0D 0A 09 49    etcurpos(F);...I
01E8D0:  46 20 28 46 2E 4C 61 62 65 6C 73 5B 31 30 5D 2E    F (F.Labels[10].
01E8E0:  42 6C 6F 63 6B 3D 4E 49 4C 29 20 4F 52 20 28 46    Block=NIL) OR (F
01E8F0:  2E 4C 61 62 65 6C 73 5B 31 31 5D 2E 42 6C 6F 63    .Labels[11].Bloc
01E900:  69 6C 65 29 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    ile):CARDINAL;..
01E910:  42 45 47 49 4E 0D 0A 09 49 46 20 66 2E 66 2E 66    BEGIN...IF f.f.f
01E920:  2E 66 63 62 66 74 3D 27 4D 4F 44 27 20 54 48 45    .fcbft='MOD' THE
01E930:  4E 20 52 45 54 55 52 4E 20 31 0D 0A 09 45 4C 53    N RETURN 1...ELS
01E940:  49 46 20 66 2E 66 2E 66 2E 66 63 62 66 74 3D 27    IF f.f.f.fcbft='
01E950:  44 45 46 27 20 54 48 45 4E 20 52 45 54 55 52 4E    DEF' THEN RETURN
01E960:  20 32 0D 0A 09 45 4C 53 45 20 52 45 54 55 52 4E     2...ELSE RETURN
01E970:  20 30 0D 0A 09 09 45 4E 44 0D 0A 09 45 4E 44 20     0....END...END 
01E980:  46 69 6C 65 54 79 70 65 3B 0D 0A 50 52 4F 43 45    FileType;..PROCE
01E990:  44 55 52 45 20 4D 6F 76 65 54 6F 43 68 61 72 28    DURE MoveToChar(
01E9A0:  56 41 52 20 46 69 6C 65 3A 45 64 69 74 46 69 6C    VAR File:EditFil
01E9B0:  65 3B 50 6F 73 3A 43 41 52 44 49 4E 41 4C 29 3B    e;Pos:CARDINAL);
01E9C0:  0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C    ..VAR.i:CARDINAL
01E9D0:  3B 77 3A 50 54 65 78 74 3B 0D 0A 42 45 47 49 4E    ;w:PText;..BEGIN
01E9E0:  0D 0A 09 57 6F 72 6B 69 6E 67 3A 3D 46 69 6C 65    ...Working:=File
01E9F0:  2E 43 68 61 69 6E 3B 0D 0A 09 77 3A 3D 4E 49 4C    .Chain;...w:=NIL
01EA00:  3B 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 4C 4F 4F 50    ;...i:=0;...LOOP
01EA10:  0D 0A 09 09 49 46 20 57 6F 72 6B 69 6E 67 3D 4E    ....IF Working=N
01EA20:  49 4C 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44    IL THEN EXIT END
01EA30:  3B 0D 0A 09 09 69 3A 3D 69 2B 4F 52 44 28 57 6F    ;....i:=i+ORD(Wo
01EA40:  72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29    rking^.BlockLen)
01EA50:  3B 0D 0A 09 09 77 3A 3D 57 6F 72 6B 69 6E 67 3B    ;....w:=Working;
01EA60:  0D 0A 09 09 49 46 20 69 3C 50 6F 73 20 54 48 45    ....IF i<Pos THE
01EA70:  4E 20 57 6F 72 6B 69 6E 67 3A 3D 57 6F 72 6B 69    N Working:=Worki
01EA80:  6E 67 5E 2E 4E 65 78 74 20 45 4C 53 45 20 45 58    ng^.Next ELSE EX
01EA90:  49 54 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D    IT END;....END;.
01EAA0:  0A 09 49 46 20 57 6F 72 6B 69 6E 67 3D 4E 49 4C    ..IF Working=NIL
01EAB0:  20 54 48 45 4E 20 0D 0A 09 09 57 6F 72 6B 69 6E     THEN ....Workin
01EAC0:  67 3A 3D 77 3B 0D 0A 09 09 43 68 61 72 50 6F 73    g:=w;....CharPos
01EAD0:  3A 3D 77 5E 2E 42 6C 6F 63 6B 4C 65 6E 3B 0D 0A    :=w^.BlockLen;..
01EAE0:  09 45 4C 53 45 0D 0A 09 09 43 68 61 72 50 6F 73    .ELSE....CharPos
01EAF0:  3A 3D 50 6F 73 2D 28 69 2D 4F 52 44 28 57 6F 72    :=Pos-(i-ORD(Wor
01EB00:  6B 3D 4E 49 4C 29 20 54 48 45 4E 0D 0A 09 09 52    k=NIL) THEN....R
01EB10:  45 54 55 52 4E 20 46 41 4C 53 45 3B 0D 0A 09 09    ETURN FALSE;....
01EB20:  45 4E 44 3B 0D 0A 09 62 3A 3D 46 2E 4C 61 62 65    END;...b:=F.Labe
01EB30:  6C 73 5B 31 30 5D 2E 42 6C 6F 63 6B 3B 0D 0A 0D    ls[10].Block;...
01EB40:  0A 09 57 48 49 4C 45 20 28 62 3C 3E 4E 49 4C 29    ..WHILE (b<>NIL)
01EB50:  20 41 4E 44 20 28 62 3C 3E 46 2E 4C 61 62 65 6C     AND (b<>F.Label
01EB60:  73 5B 31 31 5D 2E 42 6C 6F 63 6B 29 20 41 4E 44    s[11].Block) AND
01EB70:  20 28 62 3C 3E 57 6F 72 6B 69 6E 67 29 20 44 4F     (b<>Working) DO
01EB80:  0D 0A 09 09 62 3A 3D 62 5E 2E 4E 65 78 74 3B 0D    ....b:=b^.Next;.
01EB90:  0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 0D 0A 09 28    ...END;........(
01EBA0:  2A 69 66 20 65 6E 64 20 70 72 65 63 65 64 65 73    *if end precedes
01EBB0:  20 62 65 67 69 6E 6E 69 6E 67 20 6F 66 20 62 6C     beginning of bl
01EBC0:  6F 63 6B 2A 29 0D 0A 09 43 6F 75 6C 64 42 65 3A    ock*)...CouldBe:
01EBD0:  3D 62 3D 57 6F 72 6B 69 6E 67 3B 0D 0A 09 49 46    =b=Working;...IF
01EBE0:  20 4E 4F 54 20 43 6F 75 6C 64 42 65 20 54 48 45     NOT CouldBe THE
01EBF0:  4E 20 52 45 54 55 52 4E 20 46 41 4C 53 45 20 45    N RETURN FALSE E
01EC00:  4E 44 3B 0D 0A 09 49 46 20 62 3D 46 2E 4C 61 62    ND;...IF b=F.Lab
01EC10:  65 6C 73 5B 31 30 5D 2E 42 6C 6F 63 6B 20 54 48    els[10].Block TH
01EC20:  45 4E 0D 0A 09 09 28 2A 09 69 6E 20 73 74 61 72    EN....(*.in star
01EC30:  74 20 62 6C 6F 63 6B 20 2D 20 63 68 65 63 6B 20    t block - check 
01EC40:  61 66 74 65 72 20 6C 61 62 65 6C 20 73 74 61 72    after label star
01EC50:  74 2A 29 0D 0A 09 09 43 6F 75 6C 64 42 65 3A 3D    t*)....CouldBe:=
01EC60:  43 68 61 72 50 6F 73 3E 3D 4F 52 44 28 46 2E 4C    CharPos>=ORD(F.L
01EC70:  61 62 65 6C 73 5B 31 30 5D 2E 4F 66 66 73 65 74    abels[10].Offset
01EC80:  29 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 62    )....END;...IF b
01EC90:  3D 46 2E 4C 61 62 65 6C 73 5B 31 31 5D 2E 42 6C    =F.Labels[11].Bl
01ECA0:  6F 63 6B 20 54 48 45 4E 0D 0A 09 09 28 2A 09 69    ock THEN....(*.i
01ECB0:  6E 20 73 74 61 72 74 20 62 6C 6F 63 6B 20 2D 20    n start block - 
01ECC0:  63 68 65 63 6B 20 61 66 74 65 72 20 6C 61 62 65    check after labe
01ECD0:  6C 20 73 74 61 72 74 2A 29 0D 0A 09 09 43 6F 75    l start*)....Cou
01ECE0:  6C 64 42 65 3A 3D 43 6F 75 6C 64 42 65 20 41 4E    ldBe:=CouldBe AN
01ECF0:  44 20 28 43 68 61 72 50 6F 73 3C 3D 4F 52 44 28    D (CharPos<=ORD(
01ED00:  6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 29    king^.BlockLen))
01ED10:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 73 61 76 65    ;....END;...save
01ED20:  63 75 72 70 6F 73 28 46 69 6C 65 29 3B 0D 0A 09    curpos(File);...
01ED30:  45 4E 44 20 4D 6F 76 65 54 6F 43 68 61 72 3B 0D    END MoveToChar;.
01ED40:  0A 50 52 4F 43 45 44 55 52 45 20 44 65 66 69 6E    .PROCEDURE Defin
01ED50:  65 45 72 72 6F 72 73 28 56 41 52 20 66 3A 45 64    eErrors(VAR f:Ed
01ED60:  69 74 46 69 6C 65 29 3B 0D 0A 56 41 52 09 69 3A    itFile);..VAR.i:
01ED70:  43 41 52 44 49 4E 41 4C 3B 0D 0A 09 62 3A 42 4F    CARDINAL;...b:BO
01ED80:  4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A 09    OLEAN;..BEGIN...
01ED90:  49 46 20 45 72 72 6F 72 43 6F 75 6E 74 3D 30 20    IF ErrorCount=0 
01EDA0:  54 48 45 4E 20 52 45 54 55 52 4E 20 45 4E 44 3B    THEN RETURN END;
01EDB0:  0D 0A 09 46 4F 52 20 69 3A 3D 30 20 54 4F 20 45    ...FOR i:=0 TO E
01EDC0:  72 72 6F 72 43 6F 75 6E 74 2D 31 20 44 4F 0D 0A    rrorCount-1 DO..
01EDD0:  09 09 4D 6F 76 65 54 6F 43 68 61 72 28 66 2C 45    ..MoveToChar(f,E
01EDE0:  72 72 6F 72 4C 69 73 74 5B 69 5D 2E 43 68 61 72    rrorList[i].Char
01EDF0:  50 29 3B 0D 0A 09 09 62 3A 3D 4C 61 62 65 6C 4F    P);....b:=LabelO
01EE00:  70 28 66 2C 54 52 55 45 2C 43 48 52 28 30 62 30    p(f,TRUE,CHR(0b0
01EE10:  68 2B 69 29 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    h+i));....END;..
01EE20:  09 45 4E 44 20 44 65 66 69 6E 65 45 72 72 6F 72    .END DefineError
01EE30:  73 3B 0D 0A 0D 0A 45 4E 44 20 4D 61 6B 65 45 64    s;....END MakeEd
01EE40:  69 74 73 2E 0D 0A 1A 6E 74 2D 31 20 44 4F 0D 0A    its....nt-1 DO..
01EE50:  09 09 4D 6F 76 65 54 6F 43 68 61 72 28 66 2C 45    ..MoveToChar(f,E
01EE60:  72 72 6F 72 4C 69 73 74 5B 69 5D 2E 43 68 61 72    rrorList[i].Char
01EE70:  50 29 3B 0D 0A 09 09 62 3A 3D 4C 61 62 65 6C 4F    P);....b:=LabelO
01EE80:  69 72 64 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42    ird:CARDINAL;..B
01EE90:  45 47 49 4E 0D 0A 09 54 68 69 72 64 3A 3D 54 65    EGIN...Third:=Te
01EEA0:  78 74 4C 65 6E 20 44 49 56 20 33 3B 0D 0A 09 49    xtLen DIV 3;...I
01EEB0:  46 20 4E 4F 54 20 43 68 65 63 6B 42 6C 6F 63 6B    F NOT CheckBlock
01EEC0:  28 46 72 6F 6D 46 69 6C 65 29 20 54 48 45 4E 20    (FromFile) THEN 
01EED0:  52 45 54 55 52 4E 20 46 41 4C 53 45 20 45 4E 44    RETURN FALSE END
01EEE0:  3B 0D 0A 09 57 49 54 48 20 46 72 6F 6D 46 69 6C    ;...WITH FromFil
01EEF0:  65 2E 4C 61 62 65 6C 73 5B 31 30 5D 20 44 4F 0D    e.Labels[10] DO.
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:  46 2E 4C 61 62 65 6C 73 5B 31 31 5D 2E 4F 66 66    F.Labels[11].Off
01F010:  73 65 74 29 29 0D 0A 09 09 45 4E 44 3B 0D 0A 09    set))....END;...
01F020:  49 46 20 43 6F 75 6C 64 42 65 20 54 48 45 4E 0D    IF CouldBe THEN.
01F030:  0A 09 09 57 48 49 4C 45 20 28 62 3C 3E 4E 49 4C    ...WHILE (b<>NIL
01F040:  29 20 41 4E 44 20 28 62 3C 3E 46 2E 4C 61 62 65    ) AND (b<>F.Labe
01F050:  6C 73 5B 31 31 5D 2E 42 6C 6F 63 6B 29 20 44 4F    ls[11].Block) DO
01F060:  20 62 3A 3D 62 5E 2E 4E 65 78 74 20 45 4E 44 3B     b:=b^.Next END;
01F070:  0D 0A 09 09 43 6F 75 6C 64 42 65 3A 3D 62 3C 3E    ....CouldBe:=b<>
01F080:  4E 49 4C 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45    NIL....END;...RE
01F090:  54 55 52 4E 20 43 6F 75 6C 64 42 65 3B 0D 0A 09    TURN CouldBe;...
01F0A0:  45 4E 44 20 49 6E 73 69 64 65 42 6C 6F 63 6B 3B    END InsideBlock;
01F0B0:  0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68    ....PROCEDURE Ch
01F0C0:  65 63 6B 42 6C 6F 63 6B 28 56 41 52 20 46 3A 45    eckBlock(VAR F:E
01F0D0:  64 69 74 46 69 6C 65 29 3A 42 4F 4F 4C 45 41 4E    ditFile):BOOLEAN
01F0E0:  3B 0D 0A 0D 0A 28 2A 09 43 68 65 63 6B 20 69 66    ;....(*.Check if
01F0F0:  20 62 65 67 69 6E 20 61 6E 64 20 65 6E 64 20 6F     begin and end o
01F100:  66 20 62 6C 6F 63 6B 20 68 61 76 65 20 62 65 65    f block have bee
01F110:  6E 20 63 6F 72 72 65 63 74 6C 79 20 73 65 74 20    n correctly set 
01F120:  75 70 2A 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09    up*)....BEGIN...
01F130:  49 46 20 28 46 2E 4C 61 62 65 6C 73 5B 31 30 5D    IF (F.Labels[10]
01F140:  2E 42 6C 6F 63 6B 3D 4E 49 4C 29 20 4F 52 20 28    .Block=NIL) OR (
01F150:  46 2E 4C 61 62 65 6C 73 5B 31 31 5D 2E 42 6C 6F    F.Labels[11].Blo
01F160:  63 6B 3D 4E 49 4C 29 20 54 48 45 4E 0D 0A 09 09    ck=NIL) THEN....
01F170:  52 45 54 55 52 4E 20 46 41 4C 53 45 3B 0D 0A 09    RETURN FALSE;...
01F180:  09 45 4E 44 3B 0D 0A 09 57 6F 72 6B 69 6E 67 3A    .END;...Working:
01F190:  3D 46 2E 4C 61 62 65 6C 73 5B 31 30 5D 2E 42 6C    =F.Labels[10].Bl
01F1A0:  6F 63 6B 3B 0D 0A 09 72 65 70 6C 79 3A 3D 30 3B    ock;...reply:=0;
01F1B0:  0D 0A 0D 0A 09 57 48 49 4C 45 20 28 57 6F 72 6B    .....WHILE (Work
01F1C0:  69 6E 67 3C 3E 4E 49 4C 29 20 41 4E 44 20 28 57    ing<>NIL) AND (W
01F1D0:  6F 72 6B 69 6E 67 3C 3E 46 2E 4C 61 62 65 6C 73    orking<>F.Labels
01F1E0:  5B 31 31 5D 2E 42 6C 6F 63 6B 29 20 44 4F 0D 0A    [11].Block) DO..
01F1F0:  09 09 72 65 70 6C 79 3A 3D 72 65 70 6C 79 2B 4F    ..reply:=reply+O
01F200:  62 65 6C 73 5B 32 35 5D 3A 3D 43 75 72 50 6F 73    bels[25]:=CurPos
01F210:  3B 0D 0A 09 09 43 75 72 50 6F 73 3A 3D 4C 61 62    ;....CurPos:=Lab
01F220:  65 6C 73 5B 31 30 5D 3B 0D 0A 09 20 20 20 20 20    els[10];...     
01F230:  20 20 20 44 65 6C 43 68 61 72 73 28 46 72 6F 6D       DelChars(From
01F240:  46 69 6C 65 2C 72 65 70 6C 79 29 3B 0D 0A 09 09    File,reply);....
01F250:  43 75 72 50 6F 73 3A 3D 4C 61 62 65 6C 73 5B 32    CurPos:=Labels[2
01F260:  35 5D 3B 0D 0A 09 09 4C 61 62 65 6C 73 5B 32 35    5];....Labels[25
01F270:  5D 2E 42 6C 6F 63 6B 3A 3D 4E 49 4C 3B 0D 0A 09    ].Block:=NIL;...
01F280:  09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 54    .END;...RETURN T
01F290:  52 55 45 3B 0D 0A 09 45 4E 44 20 42 6C 6F 63 6B    RUE;...END Block
01F2A0:  44 65 6C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20    Del;..PROCEDURE 
01F2B0:  52 65 6C 6F 63 61 74 65 4C 61 62 65 6C 73 28 56    RelocateLabels(V
01F2C0:  41 52 20 66 3A 45 64 69 74 46 69 6C 65 3B 6E 75    AR f:EditFile;nu
01F2D0:  6D 62 65 72 3A 49 4E 54 45 47 45 52 29 3B 0D 0A    mber:INTEGER);..
01F2E0:  28 2A 09 52 65 6C 6F 63 61 74 65 20 6C 61 62 65    (*.Relocate labe
01F2F0:  6C 73 20 66 6F 72 20 74 68 65 20 63 75 72 72 65    ls for the curre
01F300:  6E 74 20 62 6C 6F 63 6B 0D 0A 09 6E 75 6D 62 65    nt block...numbe
01F310:  72 20 69 73 20 6E 75 6D 62 65 72 20 6F 66 20 63    r is number of c
01F320:  68 61 72 61 63 74 65 72 73 20 62 65 69 6E 67 20    haracters being 
01F330:  64 65 6C 65 74 65 64 20 0D 0A 09 28 2D 76 65 20    deleted ...(-ve 
01F340:  66 6F 72 20 69 6E 73 65 72 74 69 6F 6E 73 29 0D    for insertions).
01F350:  0A 2A 29 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20    .*)..BEGIN..    
01F360:  20 20 20 20 46 4F 52 20 72 65 70 6C 79 3A 3D 30        FOR reply:=0
01F370:  20 54 4F 20 48 49 47 48 28 66 2E 4C 61 62 65 6C     TO HIGH(f.Label
01F380:  73 29 20 44 4F 0D 0A 09 09 57 49 54 48 20 66 2E    s) DO....WITH f.
01F390:  4C 61 62 65 6C 73 5B 72 65 70 6C 79 5D 20 44 4F    Labels[reply] DO
01F3A0:  0D 0A 09 09 09 49 46 20 28 42 6C 6F 63 6B 3D 57    .....IF (Block=W
01F3B0:  6F 72 6B 69 6E 67 29 20 41 4E 44 20 28 4F 52 44    orking) AND (ORD
01F3C0:  28 4F 66 66 73 65 74 29 3E 3D 43 68 61 72 50 6F    (Offset)>=CharPo
01F3D0:  73 29 20 54 48 45 4E 0D 0A 09 09 09 09 49 46 20    s) THEN......IF 
01F3E0:  28 6E 75 6D 62 65 72 3D 4F 52 44 28 57 6F 72 6B    (number=ORD(Work
01F3F0:  69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 29 20    ing^.BlockLen)) 
01F400:  52 44 28 57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63    RD(Working^.Bloc
01F410:  6B 4C 65 6E 29 3B 0D 0A 09 09 57 6F 72 6B 69 6E    kLen);....Workin
01F420:  67 3A 3D 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74    g:=Working^.Next
01F430:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 49 46    ;....END;.....IF
01F440:  20 57 6F 72 6B 69 6E 67 3D 4E 49 4C 20 54 48 45     Working=NIL THE
01F450:  4E 20 52 45 54 55 52 4E 20 46 41 4C 53 45 20 45    N RETURN FALSE E
01F460:  4E 44 3B 0D 0A 09 0D 0A 09 28 2A 69 66 20 65 6E    ND;......(*if en
01F470:  64 20 70 72 65 63 65 64 65 73 20 62 65 67 69 6E    d precedes begin
01F480:  6E 69 6E 67 20 6F 66 20 62 6C 6F 63 6B 2A 29 0D    ning of block*).
01F490:  0A 0D 0A 09 72 65 70 6C 79 3A 3D 72 65 70 6C 79    ....reply:=reply
01F4A0:  2B 4F 52 44 28 46 2E 4C 61 62 65 6C 73 5B 31 31    +ORD(F.Labels[11
01F4B0:  5D 2E 4F 66 66 73 65 74 29 2D 4F 52 44 28 46 2E    ].Offset)-ORD(F.
01F4C0:  4C 61 62 65 6C 73 5B 31 30 5D 2E 4F 66 66 73 65    Labels[10].Offse
01F4D0:  74 29 3B 0D 0A 09 52 45 54 55 52 4E 20 72 65 70    t);...RETURN rep
01F4E0:  6C 79 3E 3D 30 0D 0A 09 45 4E 44 20 43 68 65 63    ly>=0...END Chec
01F4F0:  6B 42 6C 6F 63 6B 3B 0D 0A 50 52 4F 43 45 44 55    kBlock;..PROCEDU
01F500:  52 45 20 42 6C 6F 63 6B 43 6F 70 79 28 56 41 52    RE BlockCopy(VAR
01F510:  20 46 72 6F 6D 46 69 6C 65 2C 54 6F 46 69 6C 65     FromFile,ToFile
01F520:  3A 45 64 69 74 46 69 6C 65 29 3A 42 4F 4F 4C 45    :EditFile):BOOLE
01F530:  41 4E 3B 0D 0A 0D 0A 28 2A 09 43 61 72 65 66 75    AN;....(*.Carefu
01F540:  6C 20 2D 20 45 61 73 79 20 2D 20 4F 75 63 68 21    l - Easy - Ouch!
01F550:  0D 0A 0D 0A 09 46 72 6F 6D 46 69 6C 65 20 61 6E    .....FromFile an
01F560:  64 20 54 6F 46 69 6C 65 20 6D 61 79 20 62 65 20    d ToFile may be 
01F570:  74 68 65 20 73 61 6D 65 20 20 76 61 72 69 61 62    the same  variab
01F580:  6C 65 2A 29 0D 0A 0D 0A 56 41 52 09 69 3A 49 4E    le*)....VAR.i:IN
01F590:  54 45 47 45 52 3B 0D 0A 09 63 3A 41 52 52 41 59    TEGER;...c:ARRAY
01F5A0:  5B 31 2E 2E 54 65 78 74 4C 65 6E 5D 20 4F 46 20    [1..TextLen] OF 
01F5B0:  43 48 41 52 3B 0D 0A 09 70 2C 71 2C 72 3A 50 6F    CHAR;...p,q,r:Po
01F5C0:  73 69 74 69 6F 6E 3B 0D 0A 0D 0A 28 2A 09 54 68    sition;....(*.Th
01F5D0:  69 73 20 63 6F 64 65 20 69 73 20 61 20 6C 69 74    is code is a lit
01F5E0:  74 6C 65 20 6F 64 64 20 66 6F 72 20 74 68 65 20    tle odd for the 
01F5F0:  66 6F 6C 6C 6F 77 69 6E 67 20 72 65 61 73 6F 6E    following reason
01F600:  54 48 45 4E 0D 0A 09 09 09 09 09 42 6C 6F 63 6B    THEN.......Block
01F610:  3A 3D 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3B    :=Working^.Next;
01F620:  0D 0A 09 09 09 09 09 4F 66 66 73 65 74 3A 3D 30    .......Offset:=0
01F630:  3B 0D 0A 09 09 09 09 45 4C 53 49 46 20 28 6E 75    ;......ELSIF (nu
01F640:  6D 62 65 72 2B 43 68 61 72 50 6F 73 29 3E 4F 52    mber+CharPos)>OR
01F650:  44 28 4F 66 66 73 65 74 29 20 54 48 45 4E 0D 0A    D(Offset) THEN..
01F660:  09 09 09 09 09 4F 66 66 73 65 74 3A 3D 43 68 61    .....Offset:=Cha
01F670:  72 50 6F 73 0D 0A 09 09 09 09 45 4C 53 45 0D 0A    rPos......ELSE..
01F680:  09 09 09 09 09 4F 66 66 73 65 74 3A 3D 4F 52 44    .....Offset:=ORD
01F690:  28 4F 66 66 73 65 74 29 2D 6E 75 6D 62 65 72 0D    (Offset)-number.
01F6A0:  0A 09 09 09 09 09 45 4E 44 3B 28 2A 49 46 2A 29    ......END;(*IF*)
01F6B0:  0D 0A 09 09 09 09 45 4E 44 3B 28 2A 49 46 20 42    ......END;(*IF B
01F6C0:  6C 6F 63 6B 3D 57 6F 72 6B 69 6E 67 20 65 74 63    lock=Working etc
01F6D0:  2A 29 0D 0A 09 09 09 45 4E 44 3B 20 28 2A 57 49    *).....END; (*WI
01F6E0:  54 48 2A 29 0D 0A 09 09 45 4E 44 3B 28 2A 46 4F    TH*)....END;(*FO
01F6F0:  52 2A 29 0D 0A 09 45 4E 44 20 52 65 6C 6F 63 61    R*)...END Reloca
01F700:  74 65 4C 61 62 65 6C 73 3B 0D 0A 0D 0A 0D 0A 50    teLabels;......P
01F710:  52 4F 43 45 44 55 52 45 20 44 65 6C 43 68 61 72    ROCEDURE DelChar
01F720:  73 28 56 41 52 20 66 3A 45 64 69 74 46 69 6C 65    s(VAR f:EditFile
01F730:  3B 6E 75 6D 62 65 72 3A 49 4E 54 45 47 45 52 29    ;number:INTEGER)
01F740:  3B 0D 0A 0D 0A 28 2A 09 64 65 6C 65 74 65 20 61    ;....(*.delete a
01F750:  20 6E 75 6D 62 65 72 20 6F 66 20 63 68 61 72 61     number of chara
01F760:  63 74 65 72 73 2A 29 0D 0A 0D 0A 50 52 4F 43 45    cters*)....PROCE
01F770:  44 55 52 45 20 44 65 6C 49 6E 42 6C 6F 63 6B 28    DURE DelInBlock(
01F780:  6E 75 6D 62 65 72 3A 49 4E 54 45 47 45 52 29 3B    number:INTEGER);
01F790:  0D 0A 0D 0A 28 2A 09 50 65 72 66 6F 72 6D 20 61    ....(*.Perform a
01F7A0:  20 64 65 6C 65 74 65 20 77 68 69 63 68 20 64 6F     delete which do
01F7B0:  65 73 20 6E 6F 74 20 73 70 61 6E 20 61 20 62 6C    es not span a bl
01F7C0:  6F 63 6B 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 52    ock*)..BEGIN...R
01F7D0:  65 6C 6F 63 61 74 65 4C 61 62 65 6C 73 28 66 2C    elocateLabels(f,
01F7E0:  6E 75 6D 62 65 72 29 3B 0D 0A 09 57 49 54 48 20    number);...WITH 
01F7F0:  57 6F 72 6B 69 6E 67 5E 20 44 4F 0D 0A 09 09 49    Working^ DO....I
01F800:  3A 0D 0A 0D 0A 09 31 2F 09 49 6E 73 43 68 61 72    :.....1/.InsChar
01F810:  73 20 63 61 6E 6E 6F 74 20 69 6E 73 65 72 74 20    s cannot insert 
01F820:  6D 6F 72 65 20 74 68 61 6E 20 68 61 6C 66 20 61    more than half a
01F830:  20 62 6C 6F 63 6B 20 6F 66 20 63 68 61 72 61 63     block of charac
01F840:  74 65 72 73 0D 0A 09 32 2F 09 49 66 20 79 6F 75    ters...2/.If you
01F850:  20 64 6F 6E 27 74 20 72 65 61 64 20 61 74 20 6C     don't read at l
01F860:  65 61 73 74 20 61 20 62 6C 6F 63 6B 20 61 74 20    east a block at 
01F870:  61 20 74 69 6D 65 20 61 6E 64 20 74 68 65 0D 0A    a time and the..
01F880:  09 09 74 6F 20 61 6E 64 20 66 72 6F 6D 20 66 69    ..to and from fi
01F890:  6C 65 73 20 61 72 65 20 74 68 65 20 73 61 6D 65    les are the same
01F8A0:  2C 20 79 6F 75 20 6D 61 79 20 68 61 76 65 20 74    , you may have t
01F8B0:  6F 20 63 68 61 6E 67 65 20 74 68 65 0D 0A 09 09    o change the....
01F8C0:  70 6F 73 69 74 69 6F 6E 20 69 6E 20 74 68 65 20    position in the 
01F8D0:  66 72 6F 6D 20 66 69 6C 65 20 74 6F 20 72 65 66    from file to ref
01F8E0:  6C 65 63 74 20 69 6E 73 65 72 74 69 6F 6E 73 2C    lect insertions,
01F8F0:  20 77 68 69 63 68 20 69 73 0D 0A 09 09 61 77 6B     which is....awk
01F900:  77 61 72 64 20 28 74 68 6F 75 67 68 20 79 6F 75    ward (though you
01F910:  20 63 6F 75 6C 64 20 61 6C 77 61 79 73 20 61 64     could always ad
01F920:  64 20 61 20 74 65 6D 70 6F 72 61 72 79 20 6C 61    d a temporary la
01F930:  62 65 6C 29 0D 0A 0D 0A 09 54 68 65 72 65 66 6F    bel).....Therefo
01F940:  72 65 2C 20 74 65 78 74 20 69 73 20 72 65 61 64    re, text is read
01F950:  20 61 6E 64 20 74 68 65 6E 20 69 6E 73 65 72 74     and then insert
01F960:  65 64 20 69 6E 20 75 70 20 74 6F 20 74 68 72 65    ed in up to thre
01F970:  65 20 67 6F 65 73 21 2A 29 0D 0A 0D 0A 09 54 68    e goes!*).....Th
01F980:  69 72 64 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42    ird:CARDINAL;..B
01F990:  45 47 49 4E 0D 0A 09 54 68 69 72 64 3A 3D 54 65    EGIN...Third:=Te
01F9A0:  78 74 4C 65 6E 20 44 49 56 20 33 3B 0D 0A 09 49    xtLen DIV 3;...I
01F9B0:  46 20 4E 4F 54 20 43 68 65 63 6B 42 6C 6F 63 6B    F NOT CheckBlock
01F9C0:  28 46 72 6F 6D 46 69 6C 65 29 20 54 48 45 4E 20    (FromFile) THEN 
01F9D0:  52 45 54 55 52 4E 20 46 41 4C 53 45 20 45 4E 44    RETURN FALSE END
01F9E0:  3B 0D 0A 09 57 49 54 48 20 46 72 6F 6D 46 69 6C    ;...WITH FromFil
01F9F0:  65 2E 4C 61 62 65 6C 73 5B 31 30 5D 20 44 4F 0D    e.Labels[10] DO.
01FA00:  46 20 28 6E 75 6D 62 65 72 3D 4F 52 44 28 42 6C    F (number=ORD(Bl
01FA10:  6F 63 6B 4C 65 6E 29 29 20 28 2A 3D 3E 43 68 61    ockLen)) (*=>Cha
01FA20:  72 50 6F 73 3D 30 2A 29 20 54 48 45 4E 0D 0A 09    rPos=0*) THEN...
01FA30:  09 09 28 2A 44 65 6C 65 74 65 20 62 6C 6F 63 6B    ..(*Delete block
01FA40:  2A 29 0D 0A 0D 0A 09 09 09 49 46 20 4E 65 78 74    *).......IF Next
01FA50:  3C 3E 4E 49 4C 20 54 48 45 4E 20 4E 65 78 74 5E    <>NIL THEN Next^
01FA60:  2E 50 72 65 64 3A 3D 50 72 65 64 20 45 4E 44 3B    .Pred:=Pred END;
01FA70:  0D 0A 09 09 09 49 46 20 50 72 65 64 3C 3E 4E 49    .....IF Pred<>NI
01FA80:  4C 20 54 48 45 4E 20 0D 0A 09 09 09 09 50 72 65    L THEN ......Pre
01FA90:  64 5E 2E 4E 65 78 74 3A 3D 4E 65 78 74 3B 0D 0A    d^.Next:=Next;..
01FAA0:  09 09 09 09 44 49 53 50 4F 53 45 28 57 6F 72 6B    ....DISPOSE(Work
01FAB0:  69 6E 67 29 3B 0D 0A 09 09 09 45 4C 53 49 46 20    ing);.....ELSIF 
01FAC0:  4E 65 78 74 3C 3E 4E 49 4C 20 54 48 45 4E 20 0D    Next<>NIL THEN .
01FAD0:  0A 09 09 09 09 66 2E 43 68 61 69 6E 3A 3D 4E 65    .....f.Chain:=Ne
01FAE0:  78 74 3B 0D 0A 09 09 09 09 44 49 53 50 4F 53 45    xt;......DISPOSE
01FAF0:  28 57 6F 72 6B 69 6E 67 29 3B 0D 0A 09 09 09 45    (Working);.....E
01FB00:  4C 53 45 09 28 2A 6F 6E 6C 79 20 62 6C 6F 63 6B    LSE.(*only block
01FB10:  20 69 6E 20 66 69 6C 65 20 73 6F 20 6B 65 65 70     in file so keep
01FB20:  2A 29 0D 0A 09 09 09 09 42 6C 6F 63 6B 4C 65 6E    *)......BlockLen
01FB30:  3A 3D 31 3B 0D 0A 09 09 09 09 57 6F 72 6B 69 6E    :=1;......Workin
01FB40:  67 5E 2E 43 68 61 72 73 5B 30 5D 3A 3D 45 4F 46    g^.Chars[0]:=EOF
01FB50:  3B 0D 0A 09 09 09 09 45 4E 44 3B 28 2A 50 72 65    ;......END;(*Pre
01FB60:  64 3C 3E 4E 49 4C 2A 29 0D 0A 09 09 45 4C 53 45    d<>NIL*)....ELSE
01FB70:  09 0D 0A 09 09 09 49 46 20 4F 52 44 28 42 6C 6F    ......IF ORD(Blo
01FB80:  63 6B 4C 65 6E 29 3E 28 43 68 61 72 50 6F 73 2B    ckLen)>(CharPos+
01FB90:  6E 75 6D 62 65 72 29 20 54 48 45 4E 0D 0A 09 09    number) THEN....
01FBA0:  09 20 20 20 20 4D 6F 76 65 64 6F 77 6E 28 41 44    .    Movedown(AD
01FBB0:  52 28 43 68 61 72 73 5B 43 68 61 72 50 6F 73 2B    R(Chars[CharPos+
01FBC0:  6E 75 6D 62 65 72 5D 29 2C 0D 0A 09 09 09 09 41    number]),......A
01FBD0:  44 52 28 43 68 61 72 73 5B 43 68 61 72 50 6F 73    DR(Chars[CharPos
01FBE0:  5D 29 2C 0D 0A 09 09 09 09 4F 52 44 28 42 6C 6F    ]),......ORD(Blo
01FBF0:  63 6B 4C 65 6E 29 2D 4F 52 44 28 43 68 61 72 50    ckLen)-ORD(CharP
01FC00:  0A 09 09 43 68 61 72 50 6F 73 3A 3D 4F 66 66 73    ...CharPos:=Offs
01FC10:  65 74 3B 0D 0A 09 09 57 6F 72 6B 69 6E 67 3A 3D    et;....Working:=
01FC20:  42 6C 6F 63 6B 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    Block;....END;..
01FC30:  09 43 68 61 72 73 72 65 61 64 3A 3D 30 3B 0D 0A    .Charsread:=0;..
01FC40:  09 69 3A 3D 72 65 70 6C 79 3B 0D 0A 09 72 3A 3D    .i:=reply;...r:=
01FC50:  46 72 6F 6D 46 69 6C 65 2E 43 75 72 50 6F 73 3B    FromFile.CurPos;
01FC60:  0D 0A 09 71 3A 3D 54 6F 46 69 6C 65 2E 43 75 72    ...q:=ToFile.Cur
01FC70:  50 6F 73 3B 0D 0A 09 46 72 6F 6D 46 69 6C 65 2E    Pos;...FromFile.
01FC80:  43 75 72 50 6F 73 3A 3D 46 72 6F 6D 46 69 6C 65    CurPos:=FromFile
01FC90:  2E 4C 61 62 65 6C 73 5B 31 30 5D 3B 0D 0A 09 4C    .Labels[10];...L
01FCA0:  4F 4F 50 0D 0A 09 09 49 46 20 69 3D 30 20 54 48    OOP....IF i=0 TH
01FCB0:  45 4E 20 0D 0A 09 09 09 45 58 49 54 20 0D 0A 09    EN .....EXIT ...
01FCC0:  09 09 45 4E 44 3B 0D 0A 09 09 49 4E 43 28 43 68    ..END;....INC(Ch
01FCD0:  61 72 73 72 65 61 64 29 3B 0D 0A 09 09 63 5B 43    arsread);....c[C
01FCE0:  68 61 72 73 72 65 61 64 5D 3A 3D 57 6F 72 6B 69    harsread]:=Worki
01FCF0:  6E 67 5E 2E 43 68 61 72 73 5B 43 68 61 72 50 6F    ng^.Chars[CharPo
01FD00:  73 5D 3B 0D 0A 09 09 49 46 20 28 43 68 61 72 73    s];....IF (Chars
01FD10:  72 65 61 64 3D 48 49 47 48 28 63 29 29 20 4F 52    read=HIGH(c)) OR
01FD20:  20 28 69 3D 31 29 20 54 48 45 4E 0D 0A 09 09 09     (i=1) THEN.....
01FD30:  73 61 76 65 63 75 72 70 6F 73 28 46 72 6F 6D 46    savecurpos(FromF
01FD40:  69 6C 65 29 3B 0D 0A 09 09 09 70 3A 3D 46 72 6F    ile);.....p:=Fro
01FD50:  6D 46 69 6C 65 2E 43 75 72 50 6F 73 3B 0D 0A 09    mFile.CurPos;...
01FD60:  09 09 54 6F 46 69 6C 65 2E 43 75 72 50 6F 73 3A    ..ToFile.CurPos:
01FD70:  3D 71 3B 0D 0A 09 09 09 57 48 49 4C 45 20 43 68    =q;.....WHILE Ch
01FD80:  61 72 73 72 65 61 64 3E 30 20 44 4F 0D 0A 09 09    arsread>0 DO....
01FD90:  09 09 49 46 20 43 68 61 72 73 72 65 61 64 3E 54    ..IF Charsread>T
01FDA0:  68 69 72 64 20 54 48 45 4E 0D 0A 09 09 09 09 09    hird THEN.......
01FDB0:  49 6E 73 43 68 61 72 73 28 54 6F 46 69 6C 65 2C    InsChars(ToFile,
01FDC0:  63 2C 54 68 69 72 64 29 3B 0D 0A 09 09 09 09 09    c,Third);.......
01FDD0:  43 68 61 72 73 72 65 61 64 3A 3D 43 68 61 72 73    Charsread:=Chars
01FDE0:  72 65 61 64 2D 54 68 69 72 64 3B 0D 0A 09 09 09    read-Third;.....
01FDF0:  09 09 4D 6F 76 65 64 6F 77 6E 28 41 44 52 28 63    ..Movedown(ADR(c
01FE00:  6F 73 29 2D 6E 75 6D 62 65 72 29 3B 0D 0A 09 09    os)-number);....
01FE10:  09 09 45 4E 44 3B 0D 0A 09 09 09 42 6C 6F 63 6B    ..END;.....Block
01FE20:  4C 65 6E 3A 3D 4F 52 44 28 42 6C 6F 63 6B 4C 65    Len:=ORD(BlockLe
01FE30:  6E 29 2D 6E 75 6D 62 65 72 3B 0D 0A 09 09 09 49    n)-number;.....I
01FE40:  46 20 28 4E 65 78 74 3D 4E 49 4C 29 20 41 4E 44    F (Next=NIL) AND
01FE50:  20 28 43 68 61 72 73 5B 42 6C 6F 63 6B 4C 65 6E     (Chars[BlockLen
01FE60:  2D 31 5D 3C 3E 45 4F 46 29 20 54 48 45 4E 0D 0A    -1]<>EOF) THEN..
01FE70:  09 09 09 09 43 68 61 72 73 5B 42 6C 6F 63 6B 4C    ....Chars[BlockL
01FE80:  65 6E 5D 3A 3D 45 4F 46 3B 0D 0A 09 09 09 09 49    en]:=EOF;......I
01FE90:  4E 43 28 42 6C 6F 63 6B 4C 65 6E 29 3B 20 0D 0A    NC(BlockLen); ..
01FEA0:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44    ....END;.....END
01FEB0:  28 2A 20 42 6C 6F 63 6B 20 6E 6F 74 20 6E 6F 77    (* Block not now
01FEC0:  20 65 6D 70 74 79 2A 29 3B 0D 0A 09 09 45 4E 44     empty*);....END
01FED0:  3B 28 2A 57 49 54 48 2A 29 0D 0A 09 45 4E 44 20    ;(*WITH*)...END 
01FEE0:  44 65 6C 49 6E 42 6C 6F 63 6B 3B 0D 0A 0D 0A 56    DelInBlock;....V
01FEF0:  41 52 09 4E 65 78 74 42 6C 6F 63 6B 3A 50 54 65    AR.NextBlock:PTe
01FF00:  78 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 73 65 74    xt;..BEGIN...set
01FF10:  63 75 72 70 6F 73 28 66 29 3B 0D 0A 09 57 48 49    curpos(f);...WHI
01FF20:  4C 45 20 28 6E 75 6D 62 65 72 3E 30 29 20 41 4E    LE (number>0) AN
01FF30:  44 20 28 57 6F 72 6B 69 6E 67 3C 3E 4E 49 4C 29    D (Working<>NIL)
01FF40:  20 44 4F 0D 0A 09 09 4E 65 78 74 42 6C 6F 63 6B     DO....NextBlock
01FF50:  3A 3D 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3B    :=Working^.Next;
01FF60:  0D 0A 09 09 49 46 20 6E 75 6D 62 65 72 3C 3D 28    ....IF number<=(
01FF70:  4F 52 44 28 57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F    ORD(Working^.Blo
01FF80:  63 6B 4C 65 6E 29 2D 43 68 61 72 50 6F 73 29 20    ckLen)-CharPos) 
01FF90:  54 48 45 4E 0D 0A 09 09 09 44 65 6C 49 6E 42 6C    THEN.....DelInBl
01FFA0:  6F 63 6B 28 6E 75 6D 62 65 72 29 3B 0D 0A 09 09    ock(number);....
01FFB0:  09 6E 75 6D 62 65 72 3A 3D 30 3B 0D 0A 09 09 45    .number:=0;....E
01FFC0:  4C 53 45 0D 0A 09 09 09 6E 75 6D 62 65 72 3A 3D    LSE.....number:=
01FFD0:  6E 75 6D 62 65 72 2D 4F 52 44 28 57 6F 72 6B 69    number-ORD(Worki
01FFE0:  6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 2B 43 68    ng^.BlockLen)+Ch
01FFF0:  61 72 50 6F 73 3B 0D 0A 09 09 09 44 65 6C 49 6E    arPos;.....DelIn
020000:  5B 54 68 69 72 64 2B 31 5D 29 2C 0D 0A 09 09 09    [Third+1]),.....
020010:  09 09 09 41 44 52 28 63 29 2C 43 68 61 72 73 72    ...ADR(c),Charsr
020020:  65 61 64 29 3B 0D 0A 09 09 09 09 45 4C 53 45 0D    ead);......ELSE.
020030:  0A 09 09 09 09 09 49 6E 73 43 68 61 72 73 28 54    ......InsChars(T
020040:  6F 46 69 6C 65 2C 63 2C 43 68 61 72 73 72 65 61    oFile,c,Charsrea
020050:  64 29 3B 0D 0A 09 09 09 09 09 43 68 61 72 73 72    d);.......Charsr
020060:  65 61 64 3A 3D 30 3B 0D 0A 09 09 09 09 09 45 4E    ead:=0;.......EN
020070:  44 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09    D;......END;....
020080:  09 71 3A 3D 54 6F 46 69 6C 65 2E 43 75 72 50 6F    .q:=ToFile.CurPo
020090:  73 3B 0D 0A 09 09 09 46 72 6F 6D 46 69 6C 65 2E    s;.....FromFile.
0200A0:  43 75 72 50 6F 73 3A 3D 70 3B 0D 0A 09 09 09 73    CurPos:=p;.....s
0200B0:  65 74 63 75 72 70 6F 73 28 46 72 6F 6D 46 69 6C    etcurpos(FromFil
0200C0:  65 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    e);.....END;....
0200D0:  49 46 20 4E 4F 54 20 41 64 76 61 6E 63 65 28 29    IF NOT Advance()
0200E0:  20 54 48 45 4E 20 45 58 49 54 20 28 2A 20 6E 65     THEN EXIT (* ne
0200F0:  76 65 72 20 74 61 6B 65 6E 2A 29 20 45 4E 44 3B    ver taken*) END;
020100:  0D 0A 09 09 44 45 43 28 69 29 3B 0D 0A 09 09 45    ....DEC(i);....E
020110:  4E 44 3B 09 28 2A 4C 4F 4F 50 2A 29 0D 0A 09 46    ND;.(*LOOP*)...F
020120:  72 6F 6D 46 69 6C 65 2E 43 75 72 50 6F 73 3A 3D    romFile.CurPos:=
020130:  72 3B 0D 0A 09 54 6F 46 69 6C 65 2E 43 75 72 50    r;...ToFile.CurP
020140:  6F 73 3A 3D 71 3B 0D 0A 09 52 45 54 55 52 4E 20    os:=q;...RETURN 
020150:  54 52 55 45 3B 0D 0A 09 45 4E 44 20 42 6C 6F 63    TRUE;...END Bloc
020160:  6B 43 6F 70 79 3B 0D 0A 50 52 4F 43 45 44 55 52    kCopy;..PROCEDUR
020170:  45 20 42 6C 6F 63 6B 44 65 6C 28 56 41 52 20 46    E BlockDel(VAR F
020180:  72 6F 6D 46 69 6C 65 3A 45 64 69 74 46 69 6C 65    romFile:EditFile
020190:  29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 56 41 52 09    ):BOOLEAN;..VAR.
0201A0:  70 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A 42 45 47    p:Position;..BEG
0201B0:  49 4E 0D 0A 09 49 46 20 4E 4F 54 20 43 68 65 63    IN...IF NOT Chec
0201C0:  6B 42 6C 6F 63 6B 28 46 72 6F 6D 46 69 6C 65 29    kBlock(FromFile)
0201D0:  20 54 48 45 4E 20 52 45 54 55 52 4E 20 46 41 4C     THEN RETURN FAL
0201E0:  53 45 20 45 4E 44 3B 0D 0A 09 57 49 54 48 20 46    SE END;...WITH F
0201F0:  72 6F 6D 46 69 6C 65 20 44 4F 0D 0A 09 09 4C 61    romFile DO....La
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:  42 6C 6F 63 6B 28 4F 52 44 28 57 6F 72 6B 69 6E    Block(ORD(Workin
020310:  67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 2D 43 68 61    g^.BlockLen)-Cha
020320:  72 50 6F 73 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D    rPos);.....END;.
020330:  0A 09 09 49 46 20 28 6E 75 6D 62 65 72 3E 30 29    ...IF (number>0)
020340:  20 4F 52 20 28 57 6F 72 6B 69 6E 67 3D 4E 49 4C     OR (Working=NIL
020350:  29 20 54 48 45 4E 20 0D 0A 09 09 09 57 6F 72 6B    ) THEN .....Work
020360:  69 6E 67 3A 3D 4E 65 78 74 42 6C 6F 63 6B 3B 0D    ing:=NextBlock;.
020370:  0A 09 09 09 43 68 61 72 50 6F 73 3A 3D 30 3B 20    ....CharPos:=0; 
020380:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44    .....END;....END
020390:  3B 20 28 2A 57 48 49 4C 45 2A 29 0D 0A 09 49 46    ; (*WHILE*)...IF
0203A0:  20 57 6F 72 6B 69 6E 67 3D 4E 49 4C 20 54 48 45     Working=NIL THE
0203B0:  4E 20 0D 0A 09 09 57 6F 72 6B 69 6E 67 3A 3D 66    N ....Working:=f
0203C0:  2E 43 68 61 69 6E 3B 0D 0A 09 09 57 48 49 4C 45    .Chain;....WHILE
0203D0:  20 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3C 3E     Working^.Next<>
0203E0:  4E 49 4C 20 44 4F 20 57 6F 72 6B 69 6E 67 3A 3D    NIL DO Working:=
0203F0:  57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 20 45 4E    Working^.Next EN
020400:  44 3B 0D 0A 09 09 43 68 61 72 50 6F 73 3A 3D 57    D;....CharPos:=W
020410:  6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E    orking^.BlockLen
020420:  0D 0A 09 09 45 4E 44 3B 28 2A 64 65 6C 65 74 65    ....END;(*delete
020430:  64 20 65 76 65 72 79 74 68 69 6E 67 2A 29 0D 0A    d everything*)..
020440:  09 73 61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D    .savecurpos(f);.
020450:  0A 09 45 4E 44 20 44 65 6C 43 68 61 72 73 3B 0D    ..END DelChars;.
020460:  0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 49 6E 73    ...PROCEDURE Ins
020470:  43 68 61 72 73 28 56 41 52 20 66 3A 45 64 69 74    Chars(VAR f:Edit
020480:  46 69 6C 65 3B 56 41 52 20 53 3A 41 52 52 41 59    File;VAR S:ARRAY
020490:  20 4F 46 20 43 48 41 52 3B 6C 65 6E 3A 49 4E 54     OF CHAR;len:INT
0204A0:  45 47 45 52 29 3B 0D 0A 28 2A 09 69 6E 73 65 72    EGER);..(*.inser
0204B0:  74 20 63 68 61 72 61 63 74 65 72 73 2A 29 0D 0A    t characters*)..
0204C0:  56 41 52 09 6C 65 66 74 2C 66 6F 6C 6C 6F 77 73    VAR.left,follows
0204D0:  3A 49 4E 54 45 47 45 52 3B 0D 0A 09 4D 61 69 6E    :INTEGER;...Main
0204E0:  42 6C 6F 63 6B 3A 50 54 65 78 74 3B 0D 0A 50 52    Block:PText;..PR
0204F0:  4F 43 45 44 55 52 45 20 49 6E 73 49 6E 42 6C 6F    OCEDURE InsInBlo
020500:  69 6E 65 28 29 3A 49 4E 54 45 47 45 52 3B 0D 0A    ine():INTEGER;..
020510:  0D 0A 28 2A 09 6D 6F 76 65 20 20 74 6F 20 73 74    ..(*.move  to st
020520:  61 72 74 20 6F 66 20 6E 65 78 74 20 6C 69 6E 65    art of next line
020530:  0D 0A 09 72 65 74 75 72 6E 73 20 63 68 61 72 61    ...returns chara
020540:  63 74 65 72 73 20 61 64 76 61 6E 63 65 64 0D 0A    cters advanced..
020550:  09 70 6F 73 69 74 69 6F 6E 73 20 74 6F 20 66 69    .positions to fi
020560:  72 73 74 20 63 68 61 72 61 63 74 65 72 20 6F 66    rst character of
020570:  20 6E 65 78 74 20 6C 69 6E 65 2A 29 0D 0A 56 41     next line*)..VA
020580:  52 09 70 6F 73 3A 49 4E 54 45 47 45 52 3B 0D 0A    R.pos:INTEGER;..
020590:  09 62 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47    .b:BOOLEAN;..BEG
0205A0:  49 4E 0D 0A 09 41 64 76 61 6E 63 65 4F 4B 3A 3D    IN...AdvanceOK:=
0205B0:  54 52 55 45 3B 0D 0A 09 70 6F 73 3A 3D 30 3B 0D    TRUE;...pos:=0;.
0205C0:  0A 09 4C 4F 4F 50 0D 0A 09 09 63 68 3A 3D 57 6F    ..LOOP....ch:=Wo
0205D0:  72 6B 69 6E 67 5E 2E 43 68 61 72 73 5B 43 68 61    rking^.Chars[Cha
0205E0:  72 50 6F 73 5D 3B 0D 0A 09 09 49 46 20 63 68 3D    rPos];....IF ch=
0205F0:  45 4F 46 20 54 48 45 4E 20 0D 0A 09 09 09 41 64    EOF THEN .....Ad
020600:  76 61 6E 63 65 4F 4B 3A 3D 46 41 4C 53 45 3B 0D    vanceOK:=FALSE;.
020610:  0A 09 09 09 45 58 49 54 20 0D 0A 09 09 09 45 4E    ....EXIT .....EN
020620:  44 3B 0D 0A 09 09 49 46 20 28 63 68 3D 43 52 29    D;....IF (ch=CR)
020630:  20 4F 52 20 28 63 68 3D 4C 46 29 20 4F 52 20 28     OR (ch=LF) OR (
020640:  63 68 3D 46 46 29 20 54 48 45 4E 20 0D 0A 09 09    ch=FF) THEN ....
020650:  09 49 46 20 4E 4F 54 20 41 64 76 61 6E 63 65 28    .IF NOT Advance(
020660:  29 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B    ) THEN EXIT END;
020670:  0D 0A 09 09 09 63 68 3A 3D 57 6F 72 6B 69 6E 67    .....ch:=Working
020680:  5E 2E 43 68 61 72 73 5B 43 68 61 72 50 6F 73 5D    ^.Chars[CharPos]
020690:  3B 0D 0A 09 09 09 49 46 20 63 68 3D 4C 46 20 54    ;.....IF ch=LF T
0206A0:  48 45 4E 20 62 3A 3D 41 64 76 61 6E 63 65 28 29    HEN b:=Advance()
0206B0:  20 45 4E 44 3B 0D 0A 09 09 09 45 58 49 54 0D 0A     END;.....EXIT..
0206C0:  09 09 09 45 4E 44 3B 0D 0A 09 09 49 4E 43 28 70    ...END;....INC(p
0206D0:  6F 73 29 3B 0D 0A 09 09 49 46 20 4E 4F 54 20 41    os);....IF NOT A
0206E0:  64 76 61 6E 63 65 28 29 20 54 48 45 4E 20 0D 0A    dvance() THEN ..
0206F0:  09 09 09 41 64 76 61 6E 63 65 4F 4B 3A 3D 46 41    ...AdvanceOK:=FA
020700:  63 6B 3B 0D 0A 56 41 52 09 73 74 61 72 74 3A 49    ck;..VAR.start:I
020710:  4E 54 45 47 45 52 3B 0D 0A 09 69 3A 49 4E 54 45    NTEGER;...i:INTE
020720:  47 45 52 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 09    GER;..BEGIN.....
020730:  09 28 2A 61 64 6A 75 73 74 20 6C 61 62 65 6C 73    .(*adjust labels
020740:  2A 29 0D 0A 09 52 65 6C 6F 63 61 74 65 4C 61 62    *)...RelocateLab
020750:  65 6C 73 28 66 2C 2D 6C 65 6E 29 3B 0D 0A 09 73    els(f,-len);...s
020760:  74 61 72 74 3A 3D 30 3B 0D 0A 09 57 49 54 48 20    tart:=0;...WITH 
020770:  57 6F 72 6B 69 6E 67 5E 20 44 4F 0D 0A 09 09 49    Working^ DO....I
020780:  46 20 4F 52 44 28 42 6C 6F 63 6B 4C 65 6E 29 3E    F ORD(BlockLen)>
020790:  43 68 61 72 50 6F 73 20 54 48 45 4E 0D 0A 09 09    CharPos THEN....
0207A0:  20 20 20 20 4D 6F 76 65 75 70 28 41 44 52 28 43        Moveup(ADR(C
0207B0:  68 61 72 73 5B 43 68 61 72 50 6F 73 5D 29 2C 41    hars[CharPos]),A
0207C0:  44 52 28 43 68 61 72 73 5B 43 68 61 72 50 6F 73    DR(Chars[CharPos
0207D0:  2B 6C 65 6E 5D 29 2C 0D 0A 09 09 09 4F 52 44 28    +len]),.....ORD(
0207E0:  42 6C 6F 63 6B 4C 65 6E 29 2D 43 68 61 72 50 6F    BlockLen)-CharPo
0207F0:  73 29 3B 0D 0A 09 09 20 20 20 20 45 4E 44 3B 0D    s);....    END;.
020800:  0A 09 09 42 6C 6F 63 6B 4C 65 6E 3A 3D 4F 52 44    ...BlockLen:=ORD
020810:  28 42 6C 6F 63 6B 4C 65 6E 29 2B 6C 65 6E 3B 0D    (BlockLen)+len;.
020820:  0A 09 09 57 48 49 4C 45 20 6C 65 6E 3E 30 20 44    ...WHILE len>0 D
020830:  4F 0D 0A 09 09 09 43 68 61 72 73 5B 43 68 61 72    O.....Chars[Char
020840:  50 6F 73 5D 3A 3D 53 5B 73 74 61 72 74 5D 3B 0D    Pos]:=S[start];.
020850:  0A 09 09 09 49 4E 43 28 73 74 61 72 74 29 3B 0D    ....INC(start);.
020860:  0A 09 09 09 44 45 43 28 6C 65 6E 29 3B 0D 0A 09    ....DEC(len);...
020870:  09 09 49 4E 43 28 43 68 61 72 50 6F 73 29 3B 0D    ..INC(CharPos);.
020880:  0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B    ....END;....END;
020890:  0D 0A 09 45 4E 44 20 49 6E 73 49 6E 42 6C 6F 63    ...END InsInBloc
0208A0:  6B 3B 0D 0A 09 09 09 0D 0A 28 2A 09 49 66 20 74    k;.......(*.If t
0208B0:  65 78 74 20 77 69 6C 6C 20 66 69 74 20 69 6E 20    ext will fit in 
0208C0:  63 75 72 72 65 6E 74 20 62 6C 6F 63 6B 2C 20 65    current block, e
0208D0:  6E 74 65 72 20 69 6E 20 63 75 72 72 65 6E 74 20    nter in current 
0208E0:  62 6C 6F 63 6B 0D 0A 09 65 6C 73 65 20 73 70 6C    block...else spl
0208F0:  69 74 20 62 6C 6F 63 6B 20 61 6E 64 20 65 6E 74    it block and ent
020900:  4C 53 45 3B 0D 0A 09 09 09 45 58 49 54 20 0D 0A    LSE;.....EXIT ..
020910:  09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20    ...END;....END; 
020920:  28 2A 4C 4F 4F 50 2A 29 0D 0A 09 52 45 54 55 52    (*LOOP*)...RETUR
020930:  4E 20 70 6F 73 3B 0D 0A 09 45 4E 44 20 41 64 76    N pos;...END Adv
020940:  61 6E 63 65 4C 69 6E 65 3B 0D 0A 0D 0A 09 0D 0A    anceLine;.......
020950:  50 52 4F 43 45 44 55 52 45 20 52 65 74 72 6C 69    PROCEDURE Retrli
020960:  6E 65 28 56 41 52 20 66 3A 45 64 69 74 46 69 6C    ne(VAR f:EditFil
020970:  65 3B 56 41 52 20 6C 65 6E 2C 70 6F 73 3A 49 4E    e;VAR len,pos:IN
020980:  54 45 47 45 52 3B 56 41 52 20 70 3A 50 6F 73 69    TEGER;VAR p:Posi
020990:  74 69 6F 6E 3B 0D 0A 09 09 56 41 52 20 6C 69 6E    tion;....VAR lin
0209A0:  65 73 6D 6F 76 65 64 3A 49 4E 54 45 47 45 52 3B    esmoved:INTEGER;
0209B0:  6C 69 6E 65 73 74 6F 6D 6F 76 65 3A 49 4E 54 45    linestomove:INTE
0209C0:  47 45 52 29 3B 0D 0A 28 2A 09 72 65 74 75 72 6E    GER);..(*.return
0209D0:  20 74 68 65 20 70 6F 73 69 74 69 6F 6E 20 69 6E     the position in
0209E0:  20 74 68 65 20 63 75 72 72 65 6E 74 20 6C 69 6E     the current lin
0209F0:  65 2A 29 0D 0A 56 41 52 09 63 68 3A 43 48 41 52    e*)..VAR.ch:CHAR
020A00:  3B 0D 0A 09 69 3A 49 4E 54 45 47 45 52 3B 0D 0A    ;...i:INTEGER;..
020A10:  09 62 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47    .b:BOOLEAN;..BEG
020A20:  49 4E 0D 0A 09 73 65 74 63 75 72 70 6F 73 28 66    IN...setcurpos(f
020A30:  29 3B 0D 0A 09 6C 69 6E 65 73 6D 6F 76 65 64 3A    );...linesmoved:
020A40:  3D 30 3B 0D 0A 0D 0A 09 49 46 20 43 68 61 72 50    =0;.....IF CharP
020A50:  6F 73 3E 49 4E 54 45 47 45 52 28 57 6F 72 6B 69    os>INTEGER(Worki
020A60:  6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29 20 54 48    ng^.BlockLen) TH
020A70:  45 4E 0D 0A 09 09 43 68 61 72 50 6F 73 3A 3D 57    EN....CharPos:=W
020A80:  6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E    orking^.BlockLen
020A90:  20 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 49 46     ....END;.....IF
020AA0:  20 6C 69 6E 65 73 74 6F 6D 6F 76 65 3D 2D 31 36     linestomove=-16
020AB0:  37 33 36 20 54 48 45 4E 20 28 2A 67 6F 20 74 6F    736 THEN (*go to
020AC0:  20 74 6F 70 20 6F 66 20 66 69 6C 65 0D 0A 09 09     top of file....
020AD0:  09 09 20 20 20 20 54 68 69 73 20 69 73 20 61 20    ..    This is a 
020AE0:  72 65 63 65 6E 74 20 6D 6F 64 20 74 6F 20 73 70    recent mod to sp
020AF0:  65 65 64 20 75 70 20 0D 0A 09 09 09 09 20 20 20    eed up ......   
020B00:  65 72 20 69 6E 20 61 70 70 72 6F 70 72 69 61 74    er in appropriat
020B10:  65 20 62 6C 6F 63 6B 2A 29 0D 0A 0D 0A 42 45 47    e block*)....BEG
020B20:  49 4E 0D 0A 09 73 65 74 63 75 72 70 6F 73 28 66    IN...setcurpos(f
020B30:  29 3B 0D 0A 09 6C 65 66 74 3A 3D 54 65 78 74 4C    );...left:=TextL
020B40:  65 6E 2D 4F 52 44 28 57 6F 72 6B 69 6E 67 5E 2E    en-ORD(Working^.
020B50:  42 6C 6F 63 6B 4C 65 6E 29 3B 0D 0A 0D 0A 09 28    BlockLen);.....(
020B60:  2A 09 6C 65 66 74 20 69 73 20 63 68 61 72 61 63    *.left is charac
020B70:  74 65 72 73 20 6C 65 66 74 20 69 6E 20 62 6C 6F    ters left in blo
020B80:  63 6B 2A 29 0D 0A 0D 0A 09 49 46 20 6C 65 66 74    ck*).....IF left
020B90:  3E 3D 6C 65 6E 20 54 48 45 4E 20 49 6E 73 49 6E    >=len THEN InsIn
020BA0:  42 6C 6F 63 6B 0D 0A 09 45 4C 53 45 0D 0A 0D 0A    Block...ELSE....
020BB0:  09 09 28 2A 73 70 6C 69 74 20 74 68 65 20 62 6C    ..(*split the bl
020BC0:  6F 63 6B 20 73 6F 20 74 68 61 74 20 61 66 74 65    ock so that afte
020BD0:  72 20 69 6E 73 65 72 74 20 74 68 65 20 74 77 6F    r insert the two
020BE0:  20 62 6C 6F 63 6B 73 0D 0A 09 09 20 20 77 69 6C     blocks....  wil
020BF0:  6C 20 62 65 20 61 70 70 72 6F 78 20 65 71 75 61    l be approx equa
020C00:  6C 20 69 6E 20 73 69 7A 65 2A 29 0D 0A 09 09 6C    l in size*)....l
020C10:  65 66 74 3A 3D 4F 52 44 28 57 6F 72 6B 69 6E 67    eft:=ORD(Working
020C20:  5E 2E 42 6C 6F 63 6B 4C 65 6E 29 20 44 49 56 20    ^.BlockLen) DIV 
020C30:  32 3B 0D 0A 09 09 4D 61 69 6E 42 6C 6F 63 6B 3A    2;....MainBlock:
020C40:  3D 57 6F 72 6B 69 6E 67 3B 0D 0A 09 09 4E 65 77    =Working;....New
020C50:  42 6C 6F 63 6B 3B 0D 0A 09 09 57 6F 72 6B 69 6E    Block;....Workin
020C60:  67 5E 2E 50 72 65 64 3A 3D 4D 61 69 6E 42 6C 6F    g^.Pred:=MainBlo
020C70:  63 6B 3B 0D 0A 09 09 46 4F 52 20 72 65 70 6C 79    ck;....FOR reply
020C80:  3A 3D 30 20 54 4F 20 48 49 47 48 28 66 2E 4C 61    :=0 TO HIGH(f.La
020C90:  62 65 6C 73 29 20 44 4F 0D 0A 09 09 09 57 49 54    bels) DO.....WIT
020CA0:  48 20 66 2E 4C 61 62 65 6C 73 5B 72 65 70 6C 79    H f.Labels[reply
020CB0:  5D 20 44 4F 0D 0A 09 09 09 09 49 46 20 28 42 6C    ] DO......IF (Bl
020CC0:  6F 63 6B 3D 4D 61 69 6E 42 6C 6F 63 6B 29 20 41    ock=MainBlock) A
020CD0:  4E 44 20 28 4F 52 44 28 4F 66 66 73 65 74 29 3E    ND (ORD(Offset)>
020CE0:  3D 6C 65 66 74 29 20 54 48 45 4E 0D 0A 09 09 09    =left) THEN.....
020CF0:  09 09 42 6C 6F 63 6B 3A 3D 57 6F 72 6B 69 6E 67    ..Block:=Working
020D00:  20 20 5E 51 43 20 61 6E 64 20 5E 51 52 2A 29 0D      ^QC and ^QR*).
020D10:  0A 09 09 57 6F 72 6B 69 6E 67 3A 3D 66 2E 43 68    ...Working:=f.Ch
020D20:  61 69 6E 3B 0D 0A 09 09 43 68 61 72 50 6F 73 3A    ain;....CharPos:
020D30:  3D 30 3B 0D 0A 09 09 70 6F 73 3A 3D 30 3B 0D 0A    =0;....pos:=0;..
020D40:  09 45 4C 53 49 46 20 6C 69 6E 65 73 74 6F 6D 6F    .ELSIF linestomo
020D50:  76 65 3D 31 36 37 33 36 20 54 48 45 4E 0D 0A 09    ve=16736 THEN...
020D60:  09 57 48 49 4C 45 20 57 6F 72 6B 69 6E 67 5E 2E    .WHILE Working^.
020D70:  4E 65 78 74 3C 3E 4E 49 4C 20 44 4F 0D 0A 09 09    Next<>NIL DO....
020D80:  09 57 6F 72 6B 69 6E 67 3A 3D 57 6F 72 6B 69 6E    .Working:=Workin
020D90:  67 5E 2E 4E 65 78 74 3B 0D 0A 09 09 09 45 4E 44    g^.Next;.....END
020DA0:  3B 0D 0A 09 09 43 68 61 72 50 6F 73 3A 3D 4F 52    ;....CharPos:=OR
020DB0:  44 28 57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B    D(Working^.Block
020DC0:  4C 65 6E 29 3B 0D 0A 09 09 49 46 20 57 6F 72 6B    Len);....IF Work
020DD0:  69 6E 67 5E 2E 43 68 61 72 73 5B 43 68 61 72 50    ing^.Chars[CharP
020DE0:  6F 73 2D 31 5D 3D 45 4F 46 20 54 48 45 4E 0D 0A    os-1]=EOF THEN..
020DF0:  09 09 09 44 45 43 28 43 68 61 72 50 6F 73 29 3B    ...DEC(CharPos);
020E00:  0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 73 61 76    .....END;....sav
020E10:  65 63 75 72 70 6F 73 28 66 29 3B 0D 0A 09 09 70    ecurpos(f);....p
020E20:  3A 3D 66 2E 43 75 72 50 6F 73 3B 0D 0A 09 09 70    :=f.CurPos;....p
020E30:  6F 73 3A 3D 42 61 63 6B 75 70 4C 69 6E 65 28 29    os:=BackupLine()
020E40:  3B 0D 0A 09 09 66 2E 43 75 72 50 6F 73 3A 3D 70    ;....f.CurPos:=p
020E50:  3B 0D 0A 09 45 4C 53 45 0D 0A 09 20 20 20 20 28    ;...ELSE...    (
020E60:  2A 63 68 61 73 65 20 62 61 63 6B 77 61 72 64 73    *chase backwards
020E70:  20 75 6E 74 69 6C 20 61 20 43 52 2C 20 4C 46 20     until a CR, LF 
020E80:  6F 72 20 46 46 20 69 73 20 66 6F 75 6E 64 20 61    or FF is found a
020E90:  6E 64 0D 0A 09 20 20 20 20 20 20 63 61 6C 63 75    nd...      calcu
020EA0:  6C 61 74 65 20 70 6F 73 69 74 69 6F 6E 20 69 6E    late position in
020EB0:  20 6C 69 6E 65 2A 29 0D 0A 09 20 20 20 20 70 6F     line*)...    po
020EC0:  73 3A 3D 42 61 63 6B 75 70 4C 69 6E 65 28 29 3B    s:=BackupLine();
020ED0:  0D 0A 09 20 20 20 20 6C 65 6E 3A 3D 30 3B 0D 0A    ...    len:=0;..
020EE0:  0D 0A 09 20 20 20 20 28 2A 09 6E 6F 77 20 70 6F    ...    (*.now po
020EF0:  73 69 74 69 6F 6E 65 64 20 74 6F 20 62 65 67 69    sitioned to begi
020F00:  3B 0D 0A 09 09 09 09 09 4F 66 66 73 65 74 3A 3D    ;.......Offset:=
020F10:  4F 52 44 28 4F 66 66 73 65 74 29 2D 6C 65 66 74    ORD(Offset)-left
020F20:  3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09    ;.......END;....
020F30:  09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D    ..END;.....END;.
020F40:  0A 09 09 09 09 09 0D 0A 09 09 57 49 54 48 20 4D    ..........WITH M
020F50:  61 69 6E 42 6C 6F 63 6B 5E 20 44 4F 0D 0A 09 09    ainBlock^ DO....
020F60:  09 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78 74 3A 3D    .Working^.Next:=
020F70:  4E 65 78 74 3B 0D 0A 09 09 09 49 46 20 4E 65 78    Next;.....IF Nex
020F80:  74 3C 3E 4E 49 4C 20 54 48 45 4E 20 4E 65 78 74    t<>NIL THEN Next
020F90:  5E 2E 50 72 65 64 3A 3D 57 6F 72 6B 69 6E 67 20    ^.Pred:=Working 
020FA0:  45 4E 44 3B 0D 0A 09 09 09 4E 65 78 74 3A 3D 57    END;.....Next:=W
020FB0:  6F 72 6B 69 6E 67 3B 0D 0A 09 09 09 57 6F 72 6B    orking;.....Work
020FC0:  69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 3A 3D 4F    ing^.BlockLen:=O
020FD0:  52 44 28 42 6C 6F 63 6B 4C 65 6E 29 2D 6C 65 66    RD(BlockLen)-lef
020FE0:  74 3B 0D 0A 09 09 09 42 6C 6F 63 6B 4C 65 6E 3A    t;.....BlockLen:
020FF0:  3D 6C 65 66 74 3B 0D 0A 09 09 09 4D 6F 76 65 75    =left;.....Moveu
021000:  70 28 41 44 52 28 43 68 61 72 73 5B 42 6C 6F 63    p(ADR(Chars[Bloc
021010:  6B 4C 65 6E 5D 29 2C 0D 0A 09 09 09 20 20 20 20    kLen]),.....    
021020:  41 44 52 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61    ADR(Working^.Cha
021030:  72 73 29 2C 0D 0A 09 09 09 20 20 20 20 6C 65 66    rs),.....    lef
021040:  74 2B 31 29 3B 0D 0A 09 09 09 49 46 20 43 68 61    t+1);.....IF Cha
021050:  72 50 6F 73 3C 4F 52 44 28 42 6C 6F 63 6B 4C 65    rPos<ORD(BlockLe
021060:  6E 29 20 54 48 45 4E 20 57 6F 72 6B 69 6E 67 3A    n) THEN Working:
021070:  3D 4D 61 69 6E 42 6C 6F 63 6B 0D 0A 09 09 09 45    =MainBlock.....E
021080:  4C 53 45 20 43 68 61 72 50 6F 73 3A 3D 43 68 61    LSE CharPos:=Cha
021090:  72 50 6F 73 2D 4F 52 44 28 42 6C 6F 63 6B 4C 65    rPos-ORD(BlockLe
0210A0:  6E 29 20 45 4E 44 3B 0D 0A 09 09 09 49 6E 73 49    n) END;.....InsI
0210B0:  6E 42 6C 6F 63 6B 3B 0D 0A 09 09 09 45 4E 44 3B    nBlock;.....END;
0210C0:  28 2A 57 49 54 48 2A 29 0D 0A 09 09 45 4E 44 3B    (*WITH*)....END;
0210D0:  28 2A 6C 65 66 74 3E 3D 6C 65 6E 2A 29 0D 0A 09    (*left>=len*)...
0210E0:  73 61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D 0A    savecurpos(f);..
0210F0:  09 45 4E 44 20 49 6E 73 43 68 61 72 73 3B 0D 0A    .END InsChars;..
021100:  6E 6E 69 6E 67 20 6F 66 20 63 75 72 72 65 6E 74    nning of current
021110:  20 6C 69 6E 65 0D 0A 09 09 6D 6F 76 65 20 72 65     line....move re
021120:  71 75 69 72 65 64 20 6E 75 6D 62 65 72 20 6F 66    quired number of
021130:  20 6C 69 6E 65 73 2A 29 0D 0A 0D 0A 09 20 20 20     lines*).....   
021140:  20 49 46 20 6C 69 6E 65 73 74 6F 6D 6F 76 65 3C     IF linestomove<
021150:  30 20 54 48 45 4E 0D 0A 09 09 57 48 49 4C 45 20    0 THEN....WHILE 
021160:  09 28 6C 69 6E 65 73 74 6F 6D 6F 76 65 3C 30 29    .(linestomove<0)
021170:  0D 0A 09 09 20 20 20 20 20 41 4E 44 20 28 28 43    ....     AND ((C
021180:  68 61 72 50 6F 73 3E 30 29 20 4F 52 20 28 57 6F    harPos>0) OR (Wo
021190:  72 6B 69 6E 67 5E 2E 50 72 65 64 3C 3E 4E 49 4C    rking^.Pred<>NIL
0211A0:  29 29 20 44 4F 0D 0A 09 09 09 49 4E 43 28 6C 69    )) DO.....INC(li
0211B0:  6E 65 73 74 6F 6D 6F 76 65 29 3B 0D 0A 0D 0A 09    nestomove);.....
0211C0:  09 09 28 2A 6D 6F 76 65 20 62 61 63 6B 20 6F 76    ..(*move back ov
0211D0:  65 72 20 63 72 2F 6C 66 2A 29 0D 0A 0D 0A 09 09    er cr/lf*)......
0211E0:  09 49 46 20 42 61 63 6B 75 70 28 29 20 41 4E 44    .IF Backup() AND
0211F0:  20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61 72 73     (Working^.Chars
021200:  5B 43 68 61 72 50 6F 73 5D 3D 4C 46 29 20 54 48    [CharPos]=LF) TH
021210:  45 4E 0D 0A 09 09 09 09 62 3A 3D 42 61 63 6B 75    EN......b:=Backu
021220:  70 28 29 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09    p()......END;...
021230:  09 09 44 45 43 28 6C 69 6E 65 73 6D 6F 76 65 64    ..DEC(linesmoved
021240:  29 3B 0D 0A 09 09 09 6C 65 6E 3A 3D 42 61 63 6B    );.....len:=Back
021250:  75 70 4C 69 6E 65 28 29 3B 0D 0A 09 09 09 45 4E    upLine();.....EN
021260:  44 3B 0D 0A 09 20 20 20 20 45 4C 53 45 0D 0A 09    D;...    ELSE...
021270:  09 57 48 49 4C 45 20 09 28 6C 69 6E 65 73 74 6F    .WHILE .(linesto
021280:  6D 6F 76 65 3E 30 29 0D 0A 09 09 09 41 4E 44 20    move>0).....AND 
021290:  28 20 20 28 43 68 61 72 50 6F 73 3C 49 4E 54 45    (  (CharPos<INTE
0212A0:  47 45 52 28 57 6F 72 6B 69 6E 67 5E 2E 42 6C 6F    GER(Working^.Blo
0212B0:  63 6B 4C 65 6E 29 29 0D 0A 09 09 09 20 20 20 20    ckLen)).....    
0212C0:  4F 52 20 28 57 6F 72 6B 69 6E 67 5E 2E 4E 65 78    OR (Working^.Nex
0212D0:  74 3C 3E 4E 49 4C 29 29 20 44 4F 20 0D 0A 0D 0A    t<>NIL)) DO ....
0212E0:  09 09 09 44 45 43 28 6C 69 6E 65 73 74 6F 6D 6F    ...DEC(linestomo
0212F0:  76 65 29 3B 0D 0A 09 09 09 6C 65 6E 3A 3D 41 64    ve);.....len:=Ad
021300:  0D 0A 0D 0A 56 41 52 09 62 3A 42 4F 4F 4C 45 41    ....VAR.b:BOOLEA
021310:  4E 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20    N;....PROCEDURE 
021320:  42 61 63 6B 75 70 4C 69 6E 65 28 29 3A 49 4E 54    BackupLine():INT
021330:  45 47 45 52 3B 0D 0A 0D 0A 28 2A 09 42 61 63 6B    EGER;....(*.Back
021340:  75 70 20 74 6F 20 62 65 67 69 6E 6E 69 6E 67 20    up to beginning 
021350:  6F 66 20 63 75 72 72 65 6E 74 20 6C 69 6E 65 0D    of current line.
021360:  0A 09 72 65 74 75 72 6E 73 20 6E 75 6D 62 65 72    ..returns number
021370:  20 6F 66 20 63 68 61 72 61 63 74 65 72 73 20 62     of characters b
021380:  61 63 6B 65 64 20 75 70 0D 0A 0D 0A 09 61 66 74    acked up.....aft
021390:  65 72 20 74 68 65 20 63 61 6C 6C 2C 20 74 68 65    er the call, the
0213A0:  20 70 6F 73 69 74 69 6F 6E 20 69 73 20 74 68 65     position is the
0213B0:  20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72     first character
0213C0:  0D 0A 09 61 66 74 65 72 20 6F 66 20 74 68 65 20    ...after of the 
0213D0:  6C 69 6E 65 2A 29 0D 0A 56 41 52 09 70 6F 73 3A    line*)..VAR.pos:
0213E0:  49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E 0D    INTEGER;..BEGIN.
0213F0:  0A 09 70 6F 73 3A 3D 30 3B 0D 0A 09 4C 4F 4F 50    ..pos:=0;...LOOP
021400:  0D 0A 09 09 49 46 20 4E 4F 54 20 42 61 63 6B 75    ....IF NOT Backu
021410:  70 28 29 20 54 48 45 4E 20 45 58 49 54 20 45 4E    p() THEN EXIT EN
021420:  44 3B 0D 0A 09 09 63 68 3A 3D 57 6F 72 6B 69 6E    D;....ch:=Workin
021430:  67 5E 2E 43 68 61 72 73 5B 43 68 61 72 50 6F 73    g^.Chars[CharPos
021440:  5D 3B 0D 0A 09 09 49 46 20 28 28 63 68 3D 43 52    ];....IF ((ch=CR
021450:  29 20 4F 52 20 28 63 68 3D 4C 46 29 20 4F 52 20    ) OR (ch=LF) OR 
021460:  28 63 68 3D 46 46 29 29 20 20 54 48 45 4E 20 0D    (ch=FF))  THEN .
021470:  0A 09 09 09 62 3A 3D 41 64 76 61 6E 63 65 28 29    ....b:=Advance()
021480:  3B 0D 0A 09 09 09 45 58 49 54 20 0D 0A 09 09 09    ;.....EXIT .....
021490:  45 4E 44 3B 0D 0A 09 09 70 6F 73 3A 3D 70 6F 73    END;....pos:=pos
0214A0:  2B 31 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 4C 4F    +1;....END; (*LO
0214B0:  4F 50 2A 29 0D 0A 09 52 45 54 55 52 4E 20 70 6F    OP*)...RETURN po
0214C0:  73 3B 0D 0A 09 45 4E 44 20 42 61 63 6B 75 70 4C    s;...END BackupL
0214D0:  69 6E 65 3B 0D 0A 56 41 52 09 41 64 76 61 6E 63    ine;..VAR.Advanc
0214E0:  65 4F 4B 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 50 52    eOK:BOOLEAN;..PR
0214F0:  4F 43 45 44 55 52 45 20 41 64 76 61 6E 63 65 4C    OCEDURE AdvanceL
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:  76 61 6E 63 65 4C 69 6E 65 28 29 3B 0D 0A 09 09    vanceLine();....
021610:  09 49 46 20 41 64 76 61 6E 63 65 4F 4B 20 54 48    .IF AdvanceOK TH
021620:  45 4E 20 49 4E 43 28 6C 69 6E 65 73 6D 6F 76 65    EN INC(linesmove
021630:  64 29 20 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B    d) END;.....END;
021640:  0D 0A 09 09 45 4E 44 3B 0D 0A 09 20 20 20 20 45    ....END;...    E
021650:  4E 44 3B 0D 0A 09 73 61 76 65 63 75 72 70 6F 73    ND;...savecurpos
021660:  28 66 29 3B 70 3A 3D 66 2E 43 75 72 50 6F 73 3B    (f);p:=f.CurPos;
021670:  0D 0A 09 49 46 20 57 6F 72 6B 69 6E 67 5E 2E 43    ...IF Working^.C
021680:  68 61 72 73 5B 43 68 61 72 50 6F 73 5D 3D 45 4F    hars[CharPos]=EO
021690:  46 20 54 48 45 4E 0D 0A 0D 0A 09 09 28 2A 49 46    F THEN......(*IF
0216A0:  20 77 65 20 61 72 65 20 61 74 20 65 6E 64 20 6F     we are at end o
0216B0:  66 20 66 69 6C 65 2C 20 72 65 70 6F 73 69 74 69    f file, repositi
0216C0:  6F 6E 20 74 6F 20 73 74 61 72 74 0D 0A 09 09 20    on to start.... 
0216D0:  20 6F 66 20 63 75 72 72 65 6E 74 20 6C 69 6E 65     of current line
0216E0:  20 61 73 20 52 65 74 72 6C 69 6E 65 20 61 6C 77     as Retrline alw
0216F0:  61 79 73 20 72 65 74 75 72 6E 73 0D 0A 09 09 20    ays returns.... 
021700:  20 70 6F 73 69 74 69 6F 6E 20 61 73 20 61 74 20     position as at 
021710:  73 74 61 72 74 20 6F 66 20 6C 69 6E 65 2A 29 0D    start of line*).
021720:  0A 0D 0A 09 09 6C 65 6E 3A 3D 42 61 63 6B 75 70    .....len:=Backup
021730:  4C 69 6E 65 28 29 3B 0D 0A 09 09 73 61 76 65 63    Line();....savec
021740:  75 72 70 6F 73 28 66 29 3B 0D 0A 09 09 70 3A 3D    urpos(f);....p:=
021750:  66 2E 43 75 72 50 6F 73 3B 0D 0A 09 09 70 6F 73    f.CurPos;....pos
021760:  3A 3D 6C 65 6E 0D 0A 09 45 4C 53 45 0D 0A 09 09    :=len...ELSE....
021770:  6C 65 6E 3A 3D 41 64 76 61 6E 63 65 4C 69 6E 65    len:=AdvanceLine
021780:  28 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 66 2E    ();....END;...f.
021790:  43 75 72 50 6F 73 3A 3D 70 3B 0D 0A 09 45 4E 44    CurPos:=p;...END
0217A0:  20 52 65 74 72 6C 69 6E 65 3B 0D 0A 50 52 4F 43     Retrline;..PROC
0217B0:  45 44 55 52 45 20 52 65 61 64 4E 65 78 74 43 68    EDURE ReadNextCh
0217C0:  61 72 28 56 41 52 20 70 3A 50 6F 73 69 74 69 6F    ar(VAR p:Positio
0217D0:  6E 3B 56 41 52 20 63 68 3A 43 48 41 52 29 3B 0D    n;VAR ch:CHAR);.
0217E0:  0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20 70 20    .BEGIN...WITH p 
0217F0:  44 4F 0D 0A 09 09 49 46 20 4F 66 66 73 65 74 3E    DO....IF Offset>
021800:  65 28 29 29 0D 0A 09 09 09 09 20 20 20 20 41 4E    e())......    AN
021810:  44 20 20 4D 61 74 63 68 65 73 28 29 20 44 4F 0D    D  Matches() DO.
021820:  0A 09 09 09 09 09 49 4E 43 28 4D 61 74 63 68 43    ......INC(MatchC
021830:  68 61 72 4E 6F 29 3B 0D 0A 09 09 09 09 09 45 4E    harNo);.......EN
021840:  44 3B 0D 0A 09 09 09 09 49 46 20 4D 61 74 63 68    D;......IF Match
021850:  43 68 61 72 4E 6F 3E 3D 53 74 72 69 6E 67 4C 65    CharNo>=StringLe
021860:  6E 20 54 48 45 4E 0D 0A 09 09 09 09 09 52 45 54    n THEN.......RET
021870:  55 52 4E 20 54 52 55 45 3B 0D 0A 09 09 09 09 09    URN TRUE;.......
021880:  45 4E 44 3B 0D 0A 09 09 09 09 73 65 74 63 75 72    END;......setcur
021890:  70 6F 73 28 66 29 3B 0D 0A 09 09 09 09 45 4E 44    pos(f);......END
0218A0:  3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E    ;.....END;....EN
0218B0:  44 3B 0D 0A 09 73 61 76 65 63 75 72 70 6F 73 28    D;...savecurpos(
0218C0:  66 29 3B 0D 0A 09 52 45 54 55 52 4E 20 46 41 4C    f);...RETURN FAL
0218D0:  53 45 3B 0D 0A 09 45 4E 44 20 46 69 6E 64 53 74    SE;...END FindSt
0218E0:  72 69 6E 67 3B 0D 0A 28 2A 09 41 63 74 75 61 6C    ring;..(*.Actual
0218F0:  6C 79 20 66 69 6E 64 20 74 68 65 20 6E 65 78 74    ly find the next
021900:  20 6F 63 63 75 72 72 65 6E 63 65 20 6F 66 20 74     occurrence of t
021910:  68 65 20 73 74 72 69 6E 67 09 0D 0A 0D 0A 09 44    he string......D
021920:  6F 6E 65 20 72 65 74 75 72 6E 73 20 74 72 75 65    one returns true
021930:  20 69 66 20 6F 6E 65 20 69 73 20 66 6F 75 6E 64     if one is found
021940:  2A 29 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 61    *)..PROCEDURE Ca
021950:  6C 6C 57 69 74 68 46 69 6C 65 28 4E 61 6D 65 3A    llWithFile(Name:
021960:  41 52 52 41 59 20 4F 46 20 43 48 41 52 3B 56 41    ARRAY OF CHAR;VA
021970:  52 20 66 3A 45 64 69 74 46 69 6C 65 29 3B 0D 0A    R f:EditFile);..
021980:  42 45 47 49 4E 0D 0A 09 4D 61 6B 65 43 61 6C 6C    BEGIN...MakeCall
021990:  28 4E 61 6D 65 2C 66 2E 66 2E 66 29 3B 0D 0A 09    (Name,f.f.f);...
0219A0:  45 4E 44 20 43 61 6C 6C 57 69 74 68 46 69 6C 65    END CallWithFile
0219B0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 6C    ;..PROCEDURE Fil
0219C0:  65 54 79 70 65 28 56 41 52 20 66 3A 45 64 69 74    eType(VAR f:Edit
0219D0:  46 69 6C 65 29 3A 43 41 52 44 49 4E 41 4C 3B 0D    File):CARDINAL;.
0219E0:  0A 42 45 47 49 4E 0D 0A 09 49 46 20 66 2E 66 2E    .BEGIN...IF f.f.
0219F0:  66 2E 66 63 62 66 74 3D 27 4D 4F 44 27 20 54 48    f.fcbft='MOD' TH
021A00:  3D 42 6C 6F 63 6B 5E 2E 42 6C 6F 63 6B 4C 65 6E    =Block^.BlockLen
021A10:  20 54 48 45 4E 0D 0A 09 09 09 49 46 20 42 6C 6F     THEN.....IF Blo
021A20:  63 6B 5E 2E 4E 65 78 74 3D 4E 49 4C 20 54 48 45    ck^.Next=NIL THE
021A30:  4E 0D 0A 09 09 09 09 63 68 3A 3D 45 4F 46 3B 0D    N......ch:=EOF;.
021A40:  0A 09 09 09 09 52 45 54 55 52 4E 0D 0A 09 09 09    .....RETURN.....
021A50:  45 4C 53 45 0D 0A 09 09 09 09 42 6C 6F 63 6B 3A    ELSE......Block:
021A60:  3D 42 6C 6F 63 6B 5E 2E 4E 65 78 74 3B 0D 0A 09    =Block^.Next;...
021A70:  09 09 09 4F 66 66 73 65 74 3A 3D 30 3B 0D 0A 09    ...Offset:=0;...
021A80:  09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B    ...END;.....END;
021A90:  0D 0A 09 09 63 68 3A 3D 42 6C 6F 63 6B 5E 2E 43    ....ch:=Block^.C
021AA0:  68 61 72 73 5B 4F 66 66 73 65 74 5D 3B 0D 0A 09    hars[Offset];...
021AB0:  09 49 46 20 63 68 3C 3E 45 4F 46 20 54 48 45 4E    .IF ch<>EOF THEN
021AC0:  20 4F 66 66 73 65 74 3A 3D 4F 66 66 73 65 74 2B     Offset:=Offset+
021AD0:  31 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    1 END;....END;..
021AE0:  09 45 4E 44 20 52 65 61 64 4E 65 78 74 43 68 61    .END ReadNextCha
021AF0:  72 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65    r;..PROCEDURE Ge
021B00:  74 43 75 72 72 65 6E 74 43 68 61 72 28 56 41 52    tCurrentChar(VAR
021B10:  20 66 3A 45 64 69 74 46 69 6C 65 29 3A 43 48 41     f:EditFile):CHA
021B20:  52 3B 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09 70 6F    R;....BEGIN...po
021B30:  73 3A 3D 66 2E 43 75 72 50 6F 73 3B 0D 0A 09 52    s:=f.CurPos;...R
021B40:  65 61 64 4E 65 78 74 43 68 61 72 28 70 6F 73 2C    eadNextChar(pos,
021B50:  63 68 29 3B 0D 0A 09 52 45 54 55 52 4E 20 63 68    ch);...RETURN ch
021B60:  0D 0A 09 45 4E 44 20 47 65 74 43 75 72 72 65 6E    ...END GetCurren
021B70:  74 43 68 61 72 3B 0D 0A 50 52 4F 43 45 44 55 52    tChar;..PROCEDUR
021B80:  45 20 20 42 61 63 6B 4F 6E 65 43 68 61 72 28 56    E  BackOneChar(V
021B90:  41 52 20 66 3A 45 64 69 74 46 69 6C 65 29 3A 42    AR f:EditFile):B
021BA0:  4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A    OOLEAN;..BEGIN..
021BB0:  09 73 65 74 63 75 72 70 6F 73 28 66 29 3B 0D 0A    .setcurpos(f);..
021BC0:  09 62 3A 3D 42 61 63 6B 75 70 28 29 3B 0D 0A 09    .b:=Backup();...
021BD0:  73 61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D 0A    savecurpos(f);..
021BE0:  09 52 45 54 55 52 4E 20 62 0D 0A 09 45 4E 44 20    .RETURN b...END 
021BF0:  42 61 63 6B 4F 6E 65 43 68 61 72 3B 09 09 09 09    BackOneChar;....
021C00:  45 4E 20 52 45 54 55 52 4E 20 31 0D 0A 09 45 4C    EN RETURN 1...EL
021C10:  53 49 46 20 66 2E 66 2E 66 2E 66 63 62 66 74 3D    SIF f.f.f.fcbft=
021C20:  27 44 45 46 27 20 54 48 45 4E 20 52 45 54 55 52    'DEF' THEN RETUR
021C30:  4E 20 32 0D 0A 09 45 4C 53 45 20 52 45 54 55 52    N 2...ELSE RETUR
021C40:  4E 20 30 0D 0A 09 09 45 4E 44 0D 0A 09 45 4E 44    N 0....END...END
021C50:  20 46 69 6C 65 54 79 70 65 3B 0D 0A 50 52 4F 43     FileType;..PROC
021C60:  45 44 55 52 45 20 4D 6F 76 65 54 6F 43 68 61 72    EDURE MoveToChar
021C70:  28 56 41 52 20 46 69 6C 65 3A 45 64 69 74 46 69    (VAR File:EditFi
021C80:  6C 65 3B 50 6F 73 3A 43 41 52 44 49 4E 41 4C 29    le;Pos:CARDINAL)
021C90:  3B 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41    ;..VAR.i:CARDINA
021CA0:  4C 3B 77 3A 50 54 65 78 74 3B 0D 0A 42 45 47 49    L;w:PText;..BEGI
021CB0:  4E 0D 0A 09 57 6F 72 6B 69 6E 67 3A 3D 46 69 6C    N...Working:=Fil
021CC0:  65 2E 43 68 61 69 6E 3B 0D 0A 09 77 3A 3D 4E 49    e.Chain;...w:=NI
021CD0:  4C 3B 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 4C 4F 4F    L;...i:=0;...LOO
021CE0:  50 0D 0A 09 09 49 46 20 57 6F 72 6B 69 6E 67 3D    P....IF Working=
021CF0:  4E 49 4C 20 54 48 45 4E 20 45 58 49 54 20 45 4E    NIL THEN EXIT EN
021D00:  44 3B 0D 0A 09 09 69 3A 3D 69 2B 4F 52 44 28 57    D;....i:=i+ORD(W
021D10:  6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E    orking^.BlockLen
021D20:  29 3B 0D 0A 09 09 77 3A 3D 57 6F 72 6B 69 6E 67    );....w:=Working
021D30:  3B 0D 0A 09 09 49 46 20 69 3C 50 6F 73 20 54 48    ;....IF i<Pos TH
021D40:  45 4E 20 57 6F 72 6B 69 6E 67 3A 3D 57 6F 72 6B    EN Working:=Work
021D50:  69 6E 67 5E 2E 4E 65 78 74 20 45 4C 53 45 20 45    ing^.Next ELSE E
021D60:  58 49 54 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B    XIT END;....END;
021D70:  0D 0A 09 49 46 20 57 6F 72 6B 69 6E 67 3D 4E 49    ...IF Working=NI
021D80:  4C 20 54 48 45 4E 20 0D 0A 09 09 57 6F 72 6B 69    L THEN ....Worki
021D90:  6E 67 3A 3D 77 3B 0D 0A 09 09 43 68 61 72 50 6F    ng:=w;....CharPo
021DA0:  73 3A 3D 77 5E 2E 42 6C 6F 63 6B 4C 65 6E 3B 0D    s:=w^.BlockLen;.
021DB0:  0A 09 45 4C 53 45 0D 0A 09 09 43 68 61 72 50 6F    ..ELSE....CharPo
021DC0:  73 3A 3D 50 6F 73 2D 28 69 2D 4F 52 44 28 57 6F    s:=Pos-(i-ORD(Wo
021DD0:  72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29    rking^.BlockLen)
021DE0:  29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 73 61 76    );....END;...sav
021DF0:  65 63 75 72 70 6F 73 28 46 69 6C 65 29 3B 0D 0A    ecurpos(File);..
021E00:  0D 0A 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 20    .....PROCEDURE  
021E10:  46 6F 72 77 61 72 64 4F 6E 65 43 68 61 72 28 56    ForwardOneChar(V
021E20:  41 52 20 66 3A 45 64 69 74 46 69 6C 65 29 3A 42    AR f:EditFile):B
021E30:  4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A    OOLEAN;..BEGIN..
021E40:  09 73 65 74 63 75 72 70 6F 73 28 66 29 3B 0D 0A    .setcurpos(f);..
021E50:  09 62 3A 3D 41 64 76 61 6E 63 65 28 29 3B 0D 0A    .b:=Advance();..
021E60:  09 73 61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D    .savecurpos(f);.
021E70:  0A 09 52 45 54 55 52 4E 20 62 0D 0A 09 45 4E 44    ..RETURN b...END
021E80:  20 46 6F 72 77 61 72 64 4F 6E 65 43 68 61 72 3B     ForwardOneChar;
021E90:  09 09 09 09 0D 0A 56 41 52 09 53 74 72 69 6E 67    ......VAR.String
021EA0:  3A 41 52 52 41 59 5B 30 2E 2E 35 39 5D 20 4F 46    :ARRAY[0..59] OF
021EB0:  20 43 48 41 52 3B 0D 0A 09 53 74 72 69 6E 67 4C     CHAR;...StringL
021EC0:  65 6E 3A 43 41 52 44 49 4E 41 4C 3D 30 3B 09 0D    en:CARDINAL=0;..
021ED0:  0A 09 4D 61 74 63 68 43 68 61 72 4E 6F 3A 43 41    ..MatchCharNo:CA
021EE0:  52 44 49 4E 41 4C 3B 0D 0A 09 4D 61 74 63 68 43    RDINAL;...MatchC
021EF0:  68 61 72 3A 43 48 41 52 3B 0D 0A 0D 0A 50 52 4F    har:CHAR;....PRO
021F00:  43 45 44 55 52 45 20 4D 61 74 63 68 65 73 28 29    CEDURE Matches()
021F10:  3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E    :BOOLEAN;..BEGIN
021F20:  0D 0A 09 52 45 54 55 52 4E 20 28 57 6F 72 6B 69    ...RETURN (Worki
021F30:  6E 67 5E 2E 43 68 61 72 73 5B 43 68 61 72 50 6F    ng^.Chars[CharPo
021F40:  73 5D 3D 53 74 72 69 6E 67 5B 4D 61 74 63 68 43    s]=String[MatchC
021F50:  68 61 72 4E 6F 5D 29 0D 0A 09 20 20 20 20 4F 52    harNo])...    OR
021F60:  20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61 72 73     (Working^.Chars
021F70:  5B 43 68 61 72 50 6F 73 5D 3D 43 41 50 28 53 74    [CharPos]=CAP(St
021F80:  72 69 6E 67 5B 4D 61 74 63 68 43 68 61 72 4E 6F    ring[MatchCharNo
021F90:  5D 29 29 0D 0A 09 45 4E 44 20 4D 61 74 63 68 65    ]))...END Matche
021FA0:  73 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 72    s;..PROCEDURE Pr
021FB0:  65 70 61 72 65 53 74 72 69 6E 67 28 73 3A 41 52    epareString(s:AR
021FC0:  52 41 59 20 4F 46 20 43 48 41 52 3B 6C 65 6E 3A    RAY OF CHAR;len:
021FD0:  49 4E 54 45 47 45 52 29 3B 0D 0A 0D 0A 42 45 47    INTEGER);....BEG
021FE0:  49 4E 0D 0A 09 53 74 72 69 6E 67 4C 65 6E 3A 3D    IN...StringLen:=
021FF0:  6C 65 6E 3B 0D 0A 09 4D 6F 76 65 75 70 28 41 44    len;...Moveup(AD
022000:  09 45 4E 44 20 4D 6F 76 65 54 6F 43 68 61 72 3B    .END MoveToChar;
022010:  0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65 66 69    ..PROCEDURE Defi
022020:  6E 65 45 72 72 6F 72 73 28 56 41 52 20 66 3A 45    neErrors(VAR f:E
022030:  64 69 74 46 69 6C 65 29 3B 0D 0A 56 41 52 09 69    ditFile);..VAR.i
022040:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 62 3A 42    :CARDINAL;...b:B
022050:  4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A    OOLEAN;..BEGIN..
022060:  09 49 46 20 45 72 72 6F 72 43 6F 75 6E 74 3D 30    .IF ErrorCount=0
022070:  20 54 48 45 4E 20 52 45 54 55 52 4E 20 45 4E 44     THEN RETURN END
022080:  3B 0D 0A 09 46 4F 52 20 69 3A 3D 30 20 54 4F 20    ;...FOR i:=0 TO 
022090:  45 72 72 6F 72 43 6F 75 6E 74 2D 31 20 44 4F 0D    ErrorCount-1 DO.
0220A0:  0A 09 09 4D 6F 76 65 54 6F 43 68 61 72 28 66 2C    ...MoveToChar(f,
0220B0:  45 72 72 6F 72 4C 69 73 74 5B 69 5D 2E 43 68 61    ErrorList[i].Cha
0220C0:  72 50 29 3B 0D 0A 09 09 62 3A 3D 4C 61 62 65 6C    rP);....b:=Label
0220D0:  4F 70 28 66 2C 54 52 55 45 2C 43 48 52 28 30 62    Op(f,TRUE,CHR(0b
0220E0:  30 68 2B 69 29 29 3B 0D 0A 09 09 45 4E 44 3B 0D    0h+i));....END;.
0220F0:  0A 09 45 4E 44 20 44 65 66 69 6E 65 45 72 72 6F    ..END DefineErro
022100:  72 73 3B 0D 0A 0D 0A 45 4E 44 20 4D 61 6B 65 45    rs;....END MakeE
022110:  64 69 74 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A    dits............
022120:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
022130:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
022140:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
022150:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
022160:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
022170:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
022180:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 00    ................
022190:  00 00 00 00 00 00 00 00 00 00 30 00 80 19 00 00    ..........0.....
0221A0:  45 44 49 54 53 54 41 54 44 45 46 20 80 00 00 00    EDITSTATDEF ....
0221B0:  00 00 00 00 00 00 00 00 00 00 32 00 00 02 00 00    ..........2.....
0221C0:  45 44 49 54 53 54 41 54 4D 4F 44 20 80 00 00 00    EDITSTATMOD ....
0221D0:  00 00 00 00 00 00 00 00 00 00 33 00 80 0B 00 00    ..........3.....
0221E0:  46 49 4C 45 4F 50 53 20 44 45 46 20 80 00 00 00    FILEOPS DEF ....
0221F0:  00 00 00 00 00 00 00 00 00 00 35 00 00 02 00 00    ..........5.....
022200:  52 28 73 29 2C 41 44 52 28 53 74 72 69 6E 67 29    R(s),ADR(String)
022210:  2C 6C 65 6E 29 3B 0A 09 45 4E 44 20 50 72 65 70    ,len);..END Prep
022220:  61 72 65 53 74 72 69 6E 67 3B 0D 0A 28 2A 09 70    areString;..(*.p
022230:  72 65 70 61 72 65 20 61 20 73 74 72 69 6E 67 20    repare a string 
022240:  66 6F 72 20 75 73 65 20 69 6E 20 61 20 66 69 6E    for use in a fin
022250:  64 20 63 6F 6D 6D 61 6E 64 2A 29 0D 0A 0D 0A 50    d command*)....P
022260:  52 4F 43 45 44 55 52 45 20 46 69 6E 64 53 74 72    ROCEDURE FindStr
022270:  69 6E 67 28 56 41 52 20 66 3A 45 64 69 74 46 69    ing(VAR f:EditFi
022280:  6C 65 3B 42 61 63 6B 77 61 72 64 73 3A 42 4F 4F    le;Backwards:BOO
022290:  4C 45 41 4E 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A    LEAN):BOOLEAN;..
0222A0:  0D 0A 0D 0A 28 2A 09 62 61 63 6B 77 61 72 64 73    ....(*.backwards
0222B0:  20 6E 6F 74 20 79 65 74 20 69 6D 70 6C 65 6D 65     not yet impleme
0222C0:  6E 74 65 64 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09    nted*)..BEGIN...
0222D0:  49 46 20 53 74 72 69 6E 67 4C 65 6E 3D 30 20 54    IF StringLen=0 T
0222E0:  48 45 4E 20 52 45 54 55 52 4E 20 54 52 55 45 20    HEN RETURN TRUE 
0222F0:  45 4E 44 3B 0D 0A 09 73 65 74 63 75 72 70 6F 73    END;...setcurpos
022300:  28 66 29 3B 0D 0A 09 49 46 20 42 61 63 6B 77 61    (f);...IF Backwa
022310:  72 64 73 20 54 48 45 4E 0D 0A 09 09 4D 61 74 63    rds THEN....Matc
022320:  68 43 68 61 72 3A 3D 53 74 72 69 6E 67 5B 53 74    hChar:=String[St
022330:  72 69 6E 67 4C 65 6E 2D 31 5D 3B 0D 0A 09 09 4C    ringLen-1];....L
022340:  4F 4F 50 0D 0A 09 09 09 49 46 20 4E 4F 54 20 42    OOP.....IF NOT B
022350:  61 63 6B 75 70 28 29 20 54 48 45 4E 20 45 58 49    ackup() THEN EXI
022360:  54 20 45 4E 44 3B 0D 0A 09 09 09 49 46 20 28 57    T END;.....IF (W
022370:  6F 72 6B 69 6E 67 5E 2E 43 68 61 72 73 5B 43 68    orking^.Chars[Ch
022380:  61 72 50 6F 73 5D 3D 4D 61 74 63 68 43 68 61 72    arPos]=MatchChar
022390:  29 20 0D 0A 09 09 09 20 20 4F 52 20 28 57 6F 72    ) .....  OR (Wor
0223A0:  6B 69 6E 67 5E 2E 43 68 61 72 73 5B 43 68 61 72    king^.Chars[Char
0223B0:  50 6F 73 5D 3D 43 41 50 28 4D 61 74 63 68 43 68    Pos]=CAP(MatchCh
0223C0:  61 72 29 29 20 54 48 45 4E 0D 0A 09 09 09 09 4D    ar)) THEN......M
0223D0:  61 74 63 68 43 68 61 72 4E 6F 3A 3D 53 74 72 69    atchCharNo:=Stri
0223E0:  6E 67 4C 65 6E 2D 32 3B 0D 0A 09 09 09 09 73 61    ngLen-2;......sa
0223F0:  76 65 63 75 72 70 6F 73 28 66 29 3B 0D 0A 09 09    vecurpos(f);....
022400:  4D 4F 44 55 4C 45 20 6D 65 3B 0D 0A 0D 0A 28 2A    MODULE me;....(*
022410:  09 4D 6F 64 75 6C 61 20 20 65 64 69 74 6F 72 0D    .Modula  editor.
022420:  0A 0D 0A 09 44 61 76 65 20 4D 6F 6F 72 65 20 31    ....Dave Moore 1
022430:  20 46 65 62 20 38 35 0D 0A 0D 0A 09 54 68 69 73     Feb 85.....This
022440:  20 69 73 20 74 68 65 20 6D 61 69 6E 20 6D 6F 64     is the main mod
022450:  75 6C 65 20 66 6F 72 20 74 68 65 20 65 64 69 74    ule for the edit
022460:  6F 72 0D 0A 0D 0A 09 49 20 68 61 76 65 20 61 64    or.....I have ad
022470:  64 65 64 20 73 6F 6D 65 20 63 6F 6D 6D 65 6E 74    ded some comment
022480:  73 20 61 74 20 76 65 72 73 69 6F 6E 20 31 2E 32    s at version 1.2
022490:  20 77 68 69 63 68 20 73 68 6F 75 6C 64 20 62 65     which should be
0224A0:  20 0D 0A 09 77 6F 72 74 68 20 72 65 61 64 69 6E     ...worth readin
0224B0:  67 20 69 66 20 79 6F 75 20 61 72 65 20 74 72 79    g if you are try
0224C0:  69 6E 67 20 74 6F 20 6C 65 61 72 6E 20 74 6F 20    ing to learn to 
0224D0:  77 72 69 74 65 20 69 6E 20 4D 6F 64 75 6C 61 2D    write in Modula-
0224E0:  32 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D 20 45 64    2..*)....FROM Ed
0224F0:  69 74 43 6F 6E 74 72 6F 6C 20 49 4D 50 4F 52 54    itControl IMPORT
022500:  20 46 69 6C 65 73 2C 46 69 6C 65 73 4F 70 65 6E     Files,FilesOpen
022510:  65 64 2C 63 75 72 78 2C 63 75 72 79 2C 43 75 72    ed,curx,cury,Cur
022520:  72 65 6E 74 57 69 6E 64 6F 77 2C 43 68 61 6E 67    rentWindow,Chang
022530:  65 57 69 6E 64 6F 77 2C 0D 0A 09 09 09 52 65 73    eWindow,.....Res
022540:  65 74 53 63 72 65 65 6E 50 6F 73 2C 43 75 72 72    etScreenPos,Curr
022550:  65 6E 74 46 69 6C 65 3B 0D 0A 46 52 4F 4D 20 45    entFile;..FROM E
022560:  64 69 74 44 69 73 70 6C 61 79 20 49 4D 50 4F 52    ditDisplay IMPOR
022570:  54 20 45 72 72 6F 72 4D 65 73 73 61 67 65 2C 53    T ErrorMessage,S
022580:  65 74 57 69 6E 64 6F 77 73 2C 44 69 73 70 6C 61    etWindows,Displa
022590:  79 46 69 6C 65 2C 57 69 6E 64 6F 77 73 2C 0D 0A    yFile,Windows,..
0225A0:  09 09 44 69 73 70 6C 61 79 45 72 72 6F 72 2C 45    ..DisplayError,E
0225B0:  72 72 6F 72 4F 72 64 69 6E 61 6C 3B 0D 0A 0D 0A    rrorOrdinal;....
0225C0:  46 52 4F 4D 20 44 6F 4D 65 6E 75 20 49 4D 50 4F    FROM DoMenu IMPO
0225D0:  52 54 20 44 6F 4D 65 6E 75 4F 70 2C 4F 70 65 6E    RT DoMenuOp,Open
0225E0:  3B 0D 0A 0D 0A 46 52 4F 4D 20 4B 65 79 42 6F 61    ;....FROM KeyBoa
0225F0:  72 64 20 49 4D 50 4F 52 54 20 49 6E 74 65 72 70    rd IMPORT Interp
022600:  09 09 57 48 49 4C 45 20 28 4D 61 74 63 68 43 68    ..WHILE (MatchCh
022610:  61 72 4E 6F 3E 30 29 0D 0A 09 09 09 09 20 20 20    arNo>0)......   
022620:  20 41 4E 44 20 28 42 61 63 6B 75 70 28 29 29 0D     AND (Backup()).
022630:  0A 09 09 09 09 20 20 20 20 41 4E 44 20 4D 61 74    .....    AND Mat
022640:  63 68 65 73 28 29 20 44 4F 0D 0A 09 09 09 09 09    ches() DO.......
022650:  44 45 43 28 4D 61 74 63 68 43 68 61 72 4E 6F 29    DEC(MatchCharNo)
022660:  3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09    ;.......END;....
022670:  09 09 49 46 20 42 61 63 6B 75 70 28 29 20 41 4E    ..IF Backup() AN
022680:  44 20 4D 61 74 63 68 65 73 28 29 20 0D 0A 09 09    D Matches() ....
022690:  09 09 20 20 20 41 4E 44 20 28 4D 61 74 63 68 43    ..   AND (MatchC
0226A0:  68 61 72 4E 6F 3D 30 29 20 54 48 45 4E 0D 0A 09    harNo=0) THEN...
0226B0:  09 09 09 09 52 45 54 55 52 4E 20 54 52 55 45 3B    ....RETURN TRUE;
0226C0:  0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09    .......END;.....
0226D0:  09 73 65 74 63 75 72 70 6F 73 28 66 29 3B 0D 0A    .setcurpos(f);..
0226E0:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44    ....END;.....END
0226F0:  3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 4D 61 74 63    ;...ELSE....Matc
022700:  68 43 68 61 72 3A 3D 53 74 72 69 6E 67 5B 30 5D    hChar:=String[0]
022710:  3B 0D 0A 09 09 4C 4F 4F 50 0D 0A 09 09 09 49 46    ;....LOOP.....IF
022720:  20 4E 4F 54 20 41 64 76 61 6E 63 65 28 29 20 54     NOT Advance() T
022730:  48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D 0A 09    HEN EXIT END;...
022740:  09 09 49 46 20 28 57 6F 72 6B 69 6E 67 5E 2E 43    ..IF (Working^.C
022750:  68 61 72 73 5B 43 68 61 72 50 6F 73 5D 3D 4D 61    hars[CharPos]=Ma
022760:  74 63 68 43 68 61 72 29 0D 0A 09 09 09 20 20 4F    tchChar).....  O
022770:  52 20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61 72    R (Working^.Char
022780:  73 5B 43 68 61 72 50 6F 73 5D 3D 43 41 50 28 4D    s[CharPos]=CAP(M
022790:  61 74 63 68 43 68 61 72 29 29 20 54 48 45 4E 0D    atchChar)) THEN.
0227A0:  0A 09 09 09 09 4D 61 74 63 68 43 68 61 72 4E 6F    .....MatchCharNo
0227B0:  3A 3D 31 3B 0D 0A 09 09 09 09 73 61 76 65 63 75    :=1;......savecu
0227C0:  72 70 6F 73 28 66 29 3B 0D 0A 09 09 09 09 57 48    rpos(f);......WH
0227D0:  49 4C 45 20 28 4D 61 74 63 68 43 68 61 72 4E 6F    ILE (MatchCharNo
0227E0:  3C 53 74 72 69 6E 67 4C 65 6E 29 0D 0A 09 09 09    <StringLen).....
0227F0:  09 20 20 20 20 41 4E 44 20 28 41 64 76 61 6E 63    .    AND (Advanc
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:  72 65 74 3B 0D 0A 46 52 4F 4D 09 4D 61 6B 65 45    ret;..FROM.MakeE
022910:  64 69 74 20 49 4D 50 4F 52 54 20 44 65 66 69 6E    dit IMPORT Defin
022920:  65 45 72 72 6F 72 73 2C 45 72 72 6F 72 4C 69 73    eErrors,ErrorLis
022930:  74 2C 45 72 72 6F 72 43 6F 75 6E 74 3B 0D 0A 46    t,ErrorCount;..F
022940:  52 4F 4D 09 46 61 73 74 4D 6F 76 65 20 49 4D 50    ROM.FastMove IMP
022950:  4F 52 54 20 4D 6F 76 65 75 70 3B 0D 0A 28 2A 0D    ORT Moveup;..(*.
022960:  0A 09 54 68 65 20 6D 6F 64 75 6C 65 73 20 61 62    ..The modules ab
022970:  6F 76 65 20 61 72 65 20 70 61 72 74 20 6F 66 20    ove are part of 
022980:  74 68 65 20 65 64 69 74 6F 72 0D 0A 09 54 68 65    the editor...The
022990:  20 66 6F 6C 6C 6F 77 69 6E 67 20 6D 6F 64 75 6C     following modul
0229A0:  65 73 20 61 72 65 20 61 6C 6C 20 67 65 6E 65 72    es are all gener
0229B0:  61 6C 20 70 75 72 70 6F 73 65 20 6D 6F 64 75 6C    al purpose modul
0229C0:  65 73 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D 20 43    es..*)....FROM C
0229D0:  6F 6D 6D 61 6E 64 20 49 4D 50 4F 52 54 20 50 61    ommand IMPORT Pa
0229E0:  72 63 6C 61 73 73 2C 6E 61 6D 65 2C 73 74 72 69    rclass,name,stri
0229F0:  6E 67 2C 6F 70 74 69 6F 6E 2C 0D 0A 09 09 20 20    ng,option,....  
022A00:  20 54 65 78 74 2C 50 61 72 61 6D 65 74 65 72 2C     Text,Parameter,
022A10:  47 65 74 50 61 72 61 6D 73 3B 0D 0A 0D 0A 28 2A    GetParams;....(*
022A20:  09 43 6F 6D 6D 61 6E 64 20 63 72 61 63 6B 73 20    .Command cracks 
022A30:  74 68 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65    the command line
022A40:  20 70 61 72 61 6D 65 74 65 72 73 20 77 68 69 63     parameters whic
022A50:  68 20 61 72 65 20 73 65 74 20 75 70 0D 0A 09 62    h are set up...b
022A60:  79 20 43 50 2F 4D 20 61 74 20 61 64 64 72 65 73    y CP/M at addres
022A70:  73 20 38 30 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D    s 80..*)....FROM
022A80:  20 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 69     Files IMPORT Fi
022A90:  6C 65 4E 61 6D 65 2C 46 49 4C 45 2C 4C 6F 6F 6B    leName,FILE,Look
022AA0:  75 70 2C 52 65 61 64 42 6C 6F 63 6B 2C 53 65 74    up,ReadBlock,Set
022AB0:  42 6C 6F 63 6B 3B 0D 0A 0D 0A 28 2A 09 46 69 6C    Block;....(*.Fil
022AC0:  65 73 20 69 73 20 74 68 65 20 66 69 6C 65 20 6F    es is the file o
022AD0:  72 69 65 6E 74 65 64 20 62 6C 6F 63 6B 20 6C 65    riented block le
022AE0:  76 65 6C 20 49 4F 20 73 79 73 74 65 6D 2A 29 0D    vel IO system*).
022AF0:  0A 0D 0A 46 52 4F 4D 20 53 59 53 54 45 4D 20 49    ...FROM SYSTEM I
022B00:  69 6C 65 72 20 61 6C 6C 6F 77 73 20 79 6F 75 20    iler allows you 
022B10:  74 6F 20 74 79 70 65 20 62 72 65 61 6B 20 77 69    to type break wi
022B20:  74 68 20 74 79 70 65 73 0D 0A 09 09 20 20 61 6E    th types....  an
022B30:  64 20 76 61 72 69 61 62 6C 65 73 20 6D 6F 72 65    d variables more
022B40:  20 74 68 61 6E 20 74 77 6F 20 62 79 74 65 73 20     than two bytes 
022B50:  69 6E 20 6C 65 6E 67 74 68 2C 20 77 68 69 63 68    in length, which
022B60:  20 73 69 6D 70 6C 69 66 79 73 0D 0A 09 09 20 20     simplifys....  
022B70:  74 68 69 73 20 63 6F 64 65 20 67 72 65 61 74 65    this code greate
022B80:  6C 79 2E 20 57 68 61 74 20 69 73 20 68 61 70 70    ly. What is happ
022B90:  65 6E 69 6E 67 20 69 73 20 74 68 61 74 20 43 68    ening is that Ch
022BA0:  61 72 73 20 69 73 20 72 65 61 6C 6C 79 0D 0A 09    ars is really...
022BB0:  09 20 20 6F 66 20 74 79 70 65 20 41 52 52 41 59    .  of type ARRAY
022BC0:  5B 73 6F 6D 65 74 68 69 6E 67 5D 20 4F 46 20 43    [something] OF C
022BD0:  48 41 52 2C 20 61 6E 64 20 69 73 20 6E 6F 74 20    HAR, and is not 
022BE0:  74 68 65 20 73 61 6D 65 20 61 73 20 46 69 6C 65    the same as File
022BF0:  4E 61 6D 65 0D 0A 09 09 0D 0A 09 09 20 20 42 79    Name........  By
022C00:  20 70 75 74 74 69 6E 67 20 74 68 65 20 76 61 72     putting the var
022C10:  69 61 62 6C 65 20 69 6E 20 46 69 6C 65 4E 61 6D    iable in FileNam
022C20:  65 28 29 2C 20 69 74 73 20 74 79 70 65 20 69 73    e(), its type is
022C30:  20 63 68 61 6E 67 65 64 20 74 6F 0D 0A 09 09 20     changed to.... 
022C40:  20 62 65 20 46 69 6C 65 4E 61 6D 65 2E 20 54 68     be FileName. Th
022C50:  69 73 20 69 73 6E 27 74 20 72 65 61 6C 6C 79 20    is isn't really 
022C60:  61 20 63 6F 65 72 63 69 6F 6E 20 73 69 6E 63 65    a coercion since
022C70:  20 74 68 65 20 64 61 74 61 20 69 73 20 6E 6F 74     the data is not
022C80:  0D 0A 09 09 20 20 61 6C 74 65 72 65 64 20 69 6E    ....  altered in
022C90:  20 61 6E 79 20 77 61 79 2E 20 49 74 20 73 69 6D     any way. It sim
022CA0:  70 6C 79 20 64 65 66 65 61 74 73 20 74 68 65 20    ply defeats the 
022CB0:  63 6F 6D 70 69 6C 65 72 27 73 20 74 79 70 65 0D    compiler's type.
022CC0:  0A 09 09 20 20 63 68 65 63 6B 69 6E 67 2E 20 20    ...  checking.  
022CD0:  2A 29 0D 0A 0D 0A 09 20 09 09 4F 70 65 6E 28 46    *)..... ..Open(F
022CE0:  69 6C 65 4E 61 6D 65 28 43 68 61 72 73 29 2C 46    ileName(Chars),F
022CF0:  69 6C 65 50 6F 73 69 74 69 6F 6E 29 3B 0D 0A 09    ilePosition);...
022D00:  4D 50 4F 52 54 20 41 44 52 3B 0D 0A 0D 0A 46 52    MPORT ADR;....FR
022D10:  4F 4D 20 53 74 6F 72 61 67 65 20 49 4D 50 4F 52    OM Storage IMPOR
022D20:  54 20 46 75 6C 6C 55 70 3B 0D 0A 0D 0A 28 2A 09    T FullUp;....(*.
022D30:  54 65 72 6D 69 6E 61 6C 20 69 73 20 74 68 65 20    Terminal is the 
022D40:  73 74 61 6E 64 61 72 64 20 74 65 72 6D 69 6E 61    standard termina
022D50:  6C 20 69 6E 70 75 74 2D 6F 75 74 70 75 74 20 6D    l input-output m
022D60:  6F 64 75 6C 65 0D 0A 0D 0A 09 49 74 20 69 73 20    odule.....It is 
022D70:  61 6C 73 6F 20 70 6F 73 73 69 62 6C 65 20 74 6F    also possible to
022D80:  20 64 6F 20 49 6E 70 75 74 2D 4F 75 74 70 75 74     do Input-Output
022D90:  20 74 6F 20 74 68 65 20 74 65 72 6D 69 6E 61 6C     to the terminal
022DA0:  0D 0A 09 74 68 72 6F 75 67 68 20 74 68 65 20 6D    ...through the m
022DB0:  6F 64 75 6C 65 73 20 53 74 72 65 61 6D 73 20 61    odules Streams a
022DC0:  6E 64 20 49 6E 4F 75 74 2C 20 62 75 74 20 74 68    nd InOut, but th
022DD0:  65 73 65 0D 0A 09 69 6E 63 72 65 61 73 65 20 74    ese...increase t
022DE0:  68 65 20 73 69 7A 65 20 6F 66 20 74 68 65 20 70    he size of the p
022DF0:  72 6F 67 72 61 6D 20 61 6E 64 20 61 72 65 20 6F    rogram and are o
022E00:  6E 6C 79 20 72 65 71 75 69 72 65 64 20 69 66 20    nly required if 
022E10:  0D 0A 09 79 6F 75 20 77 61 6E 74 20 74 6F 20 64    ...you want to d
022E20:  6F 20 6D 6F 72 65 20 70 6F 77 65 72 66 75 6C 20    o more powerful 
022E30:  74 68 69 6E 67 73 2C 20 73 75 63 68 20 61 73 20    things, such as 
022E40:  66 69 6C 65 0D 0A 09 72 65 64 69 72 65 63 74 69    file...redirecti
022E50:  6F 6E 20 61 6E 64 20 6E 75 6D 62 65 72 20 63 6F    on and number co
022E60:  6E 76 65 72 73 69 6F 6E 2E 20 49 66 20 61 6C 6C    nversion. If all
022E70:  20 79 6F 75 20 77 61 6E 74 20 69 73 20 6E 75 6D     you want is num
022E80:  62 65 72 20 0D 0A 09 63 6F 6E 76 65 72 73 69 6F    ber ...conversio
022E90:  6E 2C 20 53 6D 61 6C 6C 49 4F 20 63 61 6E 20 62    n, SmallIO can b
022EA0:  65 20 75 73 65 64 20 2A 29 20 0D 0A 0D 0A 56 41    e used *) ....VA
022EB0:  52 09 50 61 72 73 3A 41 52 52 41 59 5B 30 2E 2E    R.Pars:ARRAY[0..
022EC0:  33 5D 20 4F 46 20 50 61 72 61 6D 65 74 65 72 3B    3] OF Parameter;
022ED0:  0D 0A 09 50 61 72 43 6F 75 6E 74 3A 49 4E 54 45    ...ParCount:INTE
022EE0:  47 45 52 3B 0D 0A 0D 0A 09 28 2A 09 50 61 72 73    GER;.....(*.Pars
022EF0:  20 69 73 20 61 6E 20 61 72 72 61 79 20 69 6E 74     is an array int
022F00:  09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    ..END;....END;..
022F10:  09 49 46 20 45 72 72 6F 72 43 6F 75 6E 74 3E 30    .IF ErrorCount>0
022F20:  20 54 48 45 4E 20 44 65 66 69 6E 65 45 72 72 6F     THEN DefineErro
022F30:  72 73 28 46 69 6C 65 73 5B 43 75 72 72 65 6E 74    rs(Files[Current
022F40:  46 69 6C 65 5D 29 20 45 4E 44 3B 0D 0A 09 45 4E    File]) END;...EN
022F50:  44 20 4F 70 65 6E 46 69 6C 65 73 3B 09 09 09 09    D OpenFiles;....
022F60:  0D 0A 50 52 4F 43 45 44 55 52 45 20 4D 65 6D 46    ..PROCEDURE MemF
022F70:  75 6C 6C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 45 72    ull;..BEGIN...Er
022F80:  72 6F 72 4D 65 73 73 61 67 65 28 27 20 4D 65 6D    rorMessage(' Mem
022F90:  6F 72 79 20 69 73 20 66 75 6C 6C 20 2D 20 70 6C    ory is full - pl
022FA0:  65 61 73 65 20 73 61 76 65 20 66 69 6C 65 73 20    ease save files 
022FB0:  6E 6F 77 27 2C 27 20 27 29 3B 0D 0A 09 44 6F 4D    now',' ');...DoM
022FC0:  65 6E 75 4F 70 3B 0D 0A 09 45 4E 44 20 4D 65 6D    enuOp;...END Mem
022FD0:  46 75 6C 6C 3B 0D 0A 56 41 52 09 63 63 63 3A 43    Full;..VAR.ccc:C
022FE0:  48 41 52 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 09    HAR;..BEGIN.....
022FF0:  28 2A 47 65 74 50 61 72 61 6D 73 20 72 65 61 64    (*GetParams read
023000:  73 20 74 68 65 20 70 61 72 61 6D 65 74 65 72 73    s the parameters
023010:  20 66 72 6F 6D 20 74 68 65 20 63 6F 6D 6D 61 6E     from the comman
023020:  64 20 6C 69 6E 65 2A 29 0D 0A 0D 0A 09 46 75 6C    d line*).....Ful
023030:  6C 55 70 3A 3D 4D 65 6D 46 75 6C 6C 3B 0D 0A 09    lUp:=MemFull;...
023040:  47 65 74 50 61 72 61 6D 73 28 50 61 72 73 2C 50    GetParams(Pars,P
023050:  61 72 43 6F 75 6E 74 29 3B 0D 0A 09 46 69 6C 65    arCount);...File
023060:  73 4F 70 65 6E 65 64 3A 3D 30 3B 0D 0A 09 49 46    sOpened:=0;...IF
023070:  20 50 61 72 43 6F 75 6E 74 3E 30 20 54 48 45 4E     ParCount>0 THEN
023080:  20 4F 70 65 6E 46 69 6C 65 73 20 45 4E 44 3B 0D     OpenFiles END;.
023090:  0A 09 49 46 20 45 72 72 6F 72 43 6F 75 6E 74 3C    ..IF ErrorCount<
0230A0:  3E 30 20 54 48 45 4E 20 44 69 73 70 6C 61 79 45    >0 THEN DisplayE
0230B0:  72 72 6F 72 20 45 4E 44 3B 0D 0A 09 49 46 20 46    rror END;...IF F
0230C0:  69 6C 65 73 4F 70 65 6E 65 64 3E 30 20 54 48 45    ilesOpened>0 THE
0230D0:  4E 20 43 68 61 6E 67 65 57 69 6E 64 6F 77 28 31    N ChangeWindow(1
0230E0:  29 20 45 4E 44 3B 0D 0A 09 4C 4F 4F 50 0D 0A 0D    ) END;...LOOP...
0230F0:  0A 09 09 28 2A 74 68 69 73 20 6C 6F 6F 70 20 67    ...(*this loop g
023100:  6F 20 77 68 69 63 68 20 43 6F 6D 6D 61 6E 64 20    o which Command 
023110:  77 69 6C 6C 20 70 6C 61 63 65 0D 0A 09 09 74 68    will place....th
023120:  65 20 70 61 72 61 6D 65 74 65 72 73 20 65 6E 74    e parameters ent
023130:  65 72 65 64 20 6F 6E 20 74 68 65 20 63 6F 6D 6D    ered on the comm
023140:  61 6E 64 20 6C 69 6E 65 0D 0A 09 09 0D 0A 09 09    and line........
023150:  49 74 20 6E 65 65 64 20 6F 6E 6C 79 20 62 65 20    It need only be 
023160:  61 73 20 6C 61 72 67 65 20 61 73 20 74 68 65 20    as large as the 
023170:  6E 75 6D 62 65 72 20 6F 66 20 70 61 72 61 6D 65    number of parame
023180:  74 65 72 73 0D 0A 09 09 79 6F 75 20 65 78 70 65    ters....you expe
023190:  63 74 20 74 6F 20 62 65 20 65 6E 74 65 72 65 64    ct to be entered
0231A0:  20 6F 6E 20 74 68 65 20 63 6F 6D 6D 61 6E 64 20     on the command 
0231B0:  6C 69 6E 65 0D 0A 0D 0A 09 09 54 68 65 20 65 64    line......The ed
0231C0:  69 74 6F 72 20 65 78 70 65 63 74 73 20 75 70 20    itor expects up 
0231D0:  74 6F 20 66 6F 75 72 20 70 61 72 61 6D 65 74 65    to four paramete
0231E0:  72 73 3A 20 74 68 72 65 65 0D 0A 09 09 66 69 6C    rs: three....fil
0231F0:  65 20 6E 61 6D 65 73 20 61 6E 64 20 73 6F 6D 65    e names and some
023200:  20 6F 70 74 69 6F 6E 73 2C 20 61 6C 74 68 6F 75     options, althou
023210:  67 68 20 74 68 65 20 6F 70 74 69 6F 6E 73 0D 0A    gh the options..
023220:  09 09 61 72 65 20 63 75 72 72 65 6E 74 6C 79 20    ..are currently 
023230:  6F 6E 6C 79 20 75 73 65 64 20 62 79 20 74 68 65    only used by the
023240:  20 63 6F 6D 70 69 6C 65 72 20 77 68 65 6E 20 69     compiler when i
023250:  74 20 0D 0A 09 09 6C 69 6E 6B 73 20 74 6F 20 74    t ....links to t
023260:  68 65 20 65 64 69 74 6F 72 20 61 66 74 65 72 20    he editor after 
023270:  61 6E 20 65 72 72 6F 72 20 61 6E 64 20 69 6E 20    an error and in 
023280:  74 68 61 74 0D 0A 09 09 63 61 73 65 2C 20 74 68    that....case, th
023290:  65 72 65 20 69 73 20 6F 6E 6C 79 20 6F 6E 65 20    ere is only one 
0232A0:  6F 74 68 65 72 20 70 61 72 61 6D 65 74 65 72 0D    other parameter.
0232B0:  0A 09 2A 29 0D 0A 0D 0A 09 6B 3A 49 4E 54 45 47    ..*).....k:INTEG
0232C0:  45 52 3B 0D 0A 09 69 2C 6A 3A 43 41 52 44 49 4E    ER;...i,j:CARDIN
0232D0:  41 4C 3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45    AL;...reply:INTE
0232E0:  47 45 52 3B 0D 0A 09 66 6E 3A 46 69 6C 65 4E 61    GER;...fn:FileNa
0232F0:  6D 65 3B 0D 0A 09 63 68 3A 43 48 41 52 3B 0D 0A    me;...ch:CHAR;..
023300:  6F 65 73 20 72 6F 75 6E 64 20 66 6F 72 20 65 76    oes round for ev
023310:  65 72 20 73 69 6E 63 65 20 74 68 65 72 65 20 69    er since there i
023320:  73 20 61 6E 0D 0A 09 09 20 20 65 78 70 6C 69 63    s an....  explic
023330:  69 74 20 48 41 4C 54 20 69 6E 20 64 6F 6D 65 6E    it HALT in domen
023340:  75 20 74 6F 20 73 74 6F 70 20 74 68 65 20 70 72    u to stop the pr
023350:  6F 67 72 61 6D 2A 29 0D 0A 0D 0A 09 09 49 46 20    ogram*)......IF 
023360:  46 69 6C 65 73 4F 70 65 6E 65 64 3E 30 20 54 48    FilesOpened>0 TH
023370:  45 4E 20 0D 0A 09 09 09 49 6E 74 65 72 70 72 65    EN .....Interpre
023380:  74 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 69    t;.....END;....i
023390:  3A 3D 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 3B    :=CurrentWindow;
0233A0:  09 0D 0A 09 09 6B 3A 3D 43 75 72 72 65 6E 74 46    .....k:=CurrentF
0233B0:  69 6C 65 3B 0D 0A 0D 0A 09 09 28 2A 72 65 6D 65    ile;......(*reme
0233C0:  6D 62 65 72 20 63 75 72 72 65 6E 74 20 77 69 6E    mber current win
0233D0:  64 6F 77 20 73 69 6E 63 65 20 44 6F 6D 65 6E 75    dow since Domenu
0233E0:  4F 70 20 6D 61 79 20 63 68 61 6E 67 65 20 69 74    Op may change it
0233F0:  2A 29 0D 0A 0D 0A 09 09 6A 3A 3D 46 69 6C 65 73    *)......j:=Files
023400:  4F 70 65 6E 65 64 3B 0D 0A 09 09 44 6F 4D 65 6E    Opened;....DoMen
023410:  75 4F 70 3B 09 28 2A 65 78 70 6C 69 63 69 74 20    uOp;.(*explicit 
023420:  65 78 69 74 20 69 6E 20 74 68 69 73 20 6D 6F 64    exit in this mod
023430:  75 6C 65 2A 29 0D 0A 09 09 49 46 20 28 69 3D 43    ule*)....IF (i=C
023440:  75 72 72 65 6E 74 57 69 6E 64 6F 77 29 20 41 4E    urrentWindow) AN
023450:  44 20 28 57 69 6E 64 6F 77 73 3E 30 29 20 54 48    D (Windows>0) TH
023460:  45 4E 0D 0A 0D 0A 09 09 09 28 2A 61 66 74 65 72    EN.......(*after
023470:  20 6D 65 6E 75 2C 20 72 65 64 69 73 70 6C 61 79     menu, redisplay
023480:  20 77 69 6E 64 6F 77 20 69 6E 20 77 68 69 63 68     window in which
023490:  20 74 68 65 0D 0A 09 09 09 20 20 77 69 6E 64 6F     the.....  windo
0234A0:  77 20 70 6F 70 70 65 64 20 75 70 2A 29 0D 0A 0D    w popped up*)...
0234B0:  0A 09 09 09 44 69 73 70 6C 61 79 46 69 6C 65 28    ....DisplayFile(
0234C0:  46 69 6C 65 73 5B 6B 5D 2C 69 2C 63 75 72 78 5B    Files[k],i,curx[
0234D0:  69 5D 2C 63 75 72 79 5B 69 5D 29 3B 0D 0A 09 09    i],cury[i]);....
0234E0:  09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A    .END;....END; (*
0234F0:  4C 4F 4F 50 2A 29 0D 0A 0D 0A 09 45 4E 44 20 6D    LOOP*).....END m
023500:  0D 0A 28 2A 09 45 72 72 6F 72 20 64 69 73 70 6C    ..(*.Error displ
023510:  61 79 20 72 6F 75 74 69 6E 65 0D 0A 0D 0A 09 49    ay routine.....I
023520:  66 20 74 68 65 20 65 64 69 74 6F 72 20 69 73 20    f the editor is 
023530:  65 6E 74 65 72 65 64 20 61 73 20 74 68 65 20 72    entered as the r
023540:  65 73 75 6C 74 20 6F 66 20 61 20 63 6F 6D 70 69    esult of a compi
023550:  6C 61 74 69 6F 6E 20 65 72 72 6F 72 2C 0D 0A 09    lation error,...
023560:  74 68 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65    the command line
023570:  20 63 6F 6E 73 69 73 74 73 20 6F 66 20 74 68 65     consists of the
023580:  20 6E 61 6D 65 20 6F 66 20 74 68 65 20 66 69 6C     name of the fil
023590:  65 20 77 68 69 63 68 20 77 61 73 0D 0A 09 62 65    e which was...be
0235A0:  69 6E 67 20 63 6F 6D 70 69 6C 65 64 20 66 6F 6C    ing compiled fol
0235B0:  6C 6F 77 65 64 20 62 79 20 61 6E 20 6F 70 74 69    lowed by an opti
0235C0:  6F 6E 2E 20 54 68 65 20 6F 70 74 69 6F 6E 20 63    on. The option c
0235D0:  6F 6E 74 61 69 6E 73 0D 0A 09 74 77 6F 20 69 6E    ontains...two in
0235E0:  74 65 67 65 72 20 76 61 6C 75 65 73 20 69 6E 20    teger values in 
0235F0:  62 69 6E 61 72 79 20 28 73 6F 20 79 6F 75 20 63    binary (so you c
023600:  61 6E 6E 6F 74 20 65 6E 74 65 72 20 73 61 6D 65    annot enter same
023610:  20 66 72 6F 6D 0D 0A 09 74 68 65 20 43 50 2F 4D     from...the CP/M
023620:  20 70 72 6F 6D 70 74 20 2D 20 6F 72 20 61 74 20     prompt - or at 
023630:  6C 65 61 73 74 20 6E 6F 74 20 65 61 73 69 6C 79    least not easily
023640:  29 2E 20 47 69 76 69 6E 67 20 74 68 65 20 70 6F    ). Giving the po
023650:  73 69 74 69 6F 6E 0D 0A 09 6F 66 20 74 68 65 20    sition...of the 
023660:  65 72 72 6F 72 20 69 6E 20 74 68 65 20 66 69 6C    error in the fil
023670:  65 20 61 6E 64 20 74 68 65 20 65 72 72 6F 72 20    e and the error 
023680:  6E 75 6D 62 65 72 2A 29 0D 0A 0D 0A 0D 0A 28 2A    number*)......(*
023690:  09 57 6F 72 6B 20 74 68 72 6F 75 67 68 20 74 68    .Work through th
0236A0:  65 20 70 61 72 61 6D 65 74 65 72 73 20 6F 70 65    e parameters ope
0236B0:  6E 69 6E 67 20 74 68 65 20 66 69 6C 65 73 20 74    ning the files t
0236C0:  6F 20 62 65 20 65 64 69 74 65 64 0D 0A 09 50 61    o be edited...Pa
0236D0:  72 73 20 61 6E 64 20 50 61 72 43 6F 75 6E 74 20    rs and ParCount 
0236E0:  68 61 76 65 20 61 6C 72 65 61 64 79 20 62 65 65    have already bee
0236F0:  6E 20 73 65 74 20 75 70 20 62 79 20 61 20 63 61    n set up by a ca
023700:  65 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 45 4E    e.............EN
023710:  44 3B 20 28 2A 43 68 61 72 50 6F 73 3E 42 6C 6F    D; (*CharPos>Blo
023720:  63 6B 4C 65 6E 2A 29 0D 0A 09 52 45 54 55 52 4E    ckLen*)...RETURN
023730:  20 57 6F 72 6B 69 6E 67 5E 2E 43 68 61 72 73 5B     Working^.Chars[
023740:  43 68 61 72 50 6F 73 5D 3C 3E 45 4F 46 0D 0A 09    CharPos]<>EOF...
023750:  45 4E 44 20 41 64 76 61 6E 63 65 3B 0D 0A 0D 0A    END Advance;....
023760:  50 52 4F 43 45 44 55 52 45 20 43 68 65 63 6B 42    PROCEDURE CheckB
023770:  6C 6F 63 6B 28 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    lock(...........
023780:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
023790:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 18 8F 65 01 00    .............e..
0237A0:  31 35 46 45 42 38 37 20 44 4F 43 20 00 00 00 00    15FEB87 DOC ....
0237B0:  00 00 00 00 00 00 AC 3B 50 0E 51 0D 8F 65 01 00    .......;P.Q..e..
0237C0:  46 49 58 45 53 20 20 20 44 4F 43 20 00 00 00 00    FIXES   DOC ....
0237D0:  00 00 00 00 00 00 F0 73 50 0E 47 25 74 05 00 00    .......sP.G%t...
0237E0:  46 49 58 45 53 20 20 20 42 41 4B 20 00 00 00 00    FIXES   BAK ....
0237F0:  00 00 00 00 00 00 E2 70 50 0E F1 21 D4 03 00 00    .......pP..!....
023800:  70 28 41 44 52 28 43 68 61 72 73 5B 42 6C 6F 63    p(ADR(Chars[Bloc
023810:  6B 4C 65 6E 5D 29 2C 0D 0A 09 09 09 20 20 20 20    kLen]),.....    
023820:  41 44 52 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61    ADR(Working^.Cha
023830:  72 73 29 2C 0D 0A 09 09 09 20 20 20 20 6C 65 66    rs),.....    lef
023840:  74 2B 31 29 3B 0D 0A 09 09 09 49 46 20 43 68 61    t+1);.....IF Cha
023850:  72 50 6F 73 3C 4F 52 44 28 42 6C 6F 63 6B 4C 65    rPos<ORD(BlockLe
023860:  6E 29 20 54 48 45 4E 20 57 6F 72 6B 69 6E 67 3A    n) THEN Working:
023870:  3D 4D 61 69 6E 42 6C 6F 63 6B 0D 0A 09 09 09 45    =MainBlock.....E
023880:  4C 53 45 20 43 68 61 72 50 6F 73 3A 3D 43 68 61    LSE CharPos:=Cha
023890:  72 50 6F 73 2D 4F 52 44 28 42 6C 6F 63 6B 4C 65    rPos-ORD(BlockLe
0238A0:  6E 29 20 45 4E 44 3B 0D 0A 09 09 09 49 6E 73 49    n) END;.....InsI
0238B0:  6E 42 6C 6F 63 6B 3B 0D 0A 09 09 09 45 4E 44 3B    nBlock;.....END;
0238C0:  28 2A 57 49 54 48 2A 29 0D 0A 09 09 45 4E 44 3B    (*WITH*)....END;
0238D0:  28 2A 6C 65 66 74 3E 3D 6C 65 6E 2A 29 0D 0A 09    (*left>=len*)...
0238E0:  73 61 76 65 63 75 72 70 6F 73 28 66 29 3B 0D 0A    savecurpos(f);..
0238F0:  09 45 4E 44 20 49 6E 73 43 68 61 72 73 3B 0D 0A    .END InsChars;..
023900:  6C 6C 20 74 6F 0D 0A 09 74 68 65 20 43 6F 6D 6D    ll to...the Comm
023910:  61 6E 64 20 6D 6F 64 75 6C 65 2A 29 0D 0A 0D 0A    and module*)....
023920:  50 52 4F 43 45 44 55 52 45 20 4F 70 65 6E 46 69    PROCEDURE OpenFi
023930:  6C 65 73 3B 0D 0A 56 41 52 09 6B 3A 49 4E 54 45    les;..VAR.k:INTE
023940:  47 45 52 3B 0D 0A 09 46 69 6C 65 50 6F 73 69 74    GER;...FilePosit
023950:  69 6F 6E 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42    ion:CARDINAL;..B
023960:  45 47 49 4E 0D 0A 0D 0A 09 28 2A 09 63 68 65 63    EGIN.....(*.chec
023970:  6B 20 66 6F 72 20 6F 70 74 69 6F 6E 20 67 69 76    k for option giv
023980:  69 6E 67 20 65 72 72 6F 72 20 6E 75 6D 62 65 72    ing error number
023990:  20 61 6E 64 20 70 6F 73 69 74 69 6F 6E 2A 29 0D     and position*).
0239A0:  0A 09 45 72 72 6F 72 43 6F 75 6E 74 3A 3D 30 3B    ..ErrorCount:=0;
0239B0:  0D 0A 09 45 72 72 6F 72 4F 72 64 69 6E 61 6C 3A    ...ErrorOrdinal:
0239C0:  3D 30 3B 0D 0A 09 57 49 54 48 20 50 61 72 73 5B    =0;...WITH Pars[
0239D0:  50 61 72 43 6F 75 6E 74 2D 31 5D 5E 20 44 4F 0D    ParCount-1]^ DO.
0239E0:  0A 09 09 49 46 20 43 6C 61 73 73 3D 6F 70 74 69    ...IF Class=opti
0239F0:  6F 6E 20 54 48 45 4E 0D 0A 09 09 09 45 72 72 6F    on THEN.....Erro
023A00:  72 43 6F 75 6E 74 3A 3D 46 69 6C 65 50 6F 73 3B    rCount:=FilePos;
023A10:  0D 0A 09 09 09 4D 6F 76 65 75 70 28 41 44 52 28    .....Moveup(ADR(
023A20:  43 68 61 72 73 5B 32 5D 29 2C 41 44 52 28 45 72    Chars[2]),ADR(Er
023A30:  72 6F 72 4C 69 73 74 29 2C 34 2A 45 72 72 6F 72    rorList),4*Error
023A40:  43 6F 75 6E 74 29 3B 0D 0A 09 09 09 44 45 43 28    Count);.....DEC(
023A50:  50 61 72 43 6F 75 6E 74 29 3B 0D 0A 09 09 45 4C    ParCount);....EL
023A60:  53 45 0D 0A 09 09 09 46 69 6C 65 50 6F 73 69 74    SE.....FilePosit
023A70:  69 6F 6E 3A 3D 36 35 35 33 35 0D 0A 09 09 09 45    ion:=65535.....E
023A80:  4E 44 3B 28 2A 49 46 2A 29 0D 0A 09 09 45 4E 44    ND;(*IF*)....END
023A90:  3B 09 0D 0A 09 46 4F 52 20 6B 3A 3D 30 20 54 4F    ;....FOR k:=0 TO
023AA0:  20 50 61 72 43 6F 75 6E 74 2D 31 20 44 4F 0D 0A     ParCount-1 DO..
023AB0:  09 09 57 49 54 48 20 50 61 72 73 5B 6B 5D 5E 20    ..WITH Pars[k]^ 
023AC0:  44 4F 0D 0A 0D 0A 09 09 28 2A 20 4E 6F 74 65 20    DO......(* Note 
023AD0:  74 68 65 20 65 78 74 65 6E 73 69 6F 6E 20 62 65    the extension be
023AE0:  6C 6F 77 3A 0D 0A 0D 0A 09 09 20 20 41 73 20 6F    low:......  As o
023AF0:  66 20 56 31 2E 32 2C 20 54 68 65 20 63 6F 6D 70    f V1.2, The comp
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:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
023C10:  45 20 4D 65 6E 75 3B 0D 0A 0D 0A 28 2A 09 4D 65    E Menu;....(*.Me
023C20:  6E 75 20 64 72 69 76 65 72 0D 0A 0D 0A 09 42 72    nu driver.....Br
023C30:  69 6E 67 20 75 70 20 61 20 6D 65 6E 75 20 61 74    ing up a menu at
023C40:  20 73 65 6C 65 63 74 65 64 20 70 6F 69 6E 74 20     selected point 
023C50:  6F 6E 20 73 63 72 65 65 6E 20 61 6E 64 20 61 63    on screen and ac
023C60:  63 65 70 74 20 61 6E 20 6F 70 74 69 6F 6E 0D 0A    cept an option..
023C70:  0D 0A 09 6F 70 74 69 6F 6E 73 20 63 61 6E 20 62    ...options can b
023C80:  65 20 73 65 6C 65 63 74 65 64 20 65 69 74 68 65    e selected eithe
023C90:  72 20 62 79 20 73 74 72 69 6B 69 6E 67 20 66 69    r by striking fi
023CA0:  72 73 74 20 63 68 61 72 61 63 74 65 72 20 6F 66    rst character of
023CB0:  0D 0A 0D 0A 09 6F 70 74 69 6F 6E 20 6F 72 20 62    .....option or b
023CC0:  79 20 65 6E 74 65 72 69 6E 67 20 6F 70 74 69 6F    y entering optio
023CD0:  6E 20 6E 6F 20 28 6C 69 6D 69 74 65 64 20 74 6F    n no (limited to
023CE0:  20 30 2D 39 29 0D 0A 0D 0A 09 6F 70 74 69 6F 6E     0-9).....option
023CF0:  20 30 20 69 73 20 61 6C 77 61 79 73 20 65 78 69     0 is always exi
023D00:  74 20 77 69 74 68 6F 75 74 20 73 65 6C 65 63 74    t without select
023D10:  69 6F 6E 20 61 73 20 69 73 20 65 73 63 61 70 65    ion as is escape
023D20:  2A 29 0D 0A 0D 0A 54 59 50 45 09 4D 65 6E 75 54    *)....TYPE.MenuT
023D30:  65 78 74 3D 41 52 52 41 59 5B 31 2E 2E 31 31 5D    ext=ARRAY[1..11]
023D40:  20 4F 46 20 43 48 41 52 3B 0D 0A 0D 0A 50 52 4F     OF CHAR;....PRO
023D50:  43 45 44 55 52 45 20 47 65 74 46 72 6F 6D 4D 65    CEDURE GetFromMe
023D60:  6E 75 28 56 41 52 20 54 65 78 74 3A 41 52 52 41    nu(VAR Text:ARRA
023D70:  59 20 4F 46 20 4D 65 6E 75 54 65 78 74 3B 78 2C    Y OF MenuText;x,
023D80:  79 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 64    y:CARDINAL;....d
023D90:  65 70 74 68 2C 63 6F 6C 75 6D 6E 73 3A 43 41 52    epth,columns:CAR
023DA0:  44 49 4E 41 4C 29 3A 43 41 52 44 49 4E 41 4C 3B    DINAL):CARDINAL;
023DB0:  0D 0A 0D 0A 28 2A 20 09 54 65 78 74 20 69 73 20    ....(* .Text is 
023DC0:  74 68 65 20 74 65 78 74 20 74 6F 20 64 69 73 70    the text to disp
023DD0:  6C 61 79 0D 0A 0D 0A 09 78 20 61 6E 64 20 79 20    lay.....x and y 
023DE0:  61 72 65 20 74 68 65 20 70 6F 73 69 74 69 6F 6E    are the position
023DF0:  20 66 6F 72 20 74 68 65 20 74 6F 70 20 6C 65 66     for the top lef
023E00:  69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6F    irst character o
023E10:  66 20 6D 65 6E 75 20 61 73 20 6F 70 74 69 6F 6E    f menu as option
023E20:  0D 0A 09 41 6C 77 61 79 73 20 6D 6F 76 65 20 2D    ...Always move -
023E30:  20 73 6F 20 74 68 61 74 20 69 66 20 6D 6F 72 65     so that if more
023E40:  20 74 68 61 6E 20 6F 6E 65 20 63 6F 6D 6D 61 6E     than one comman
023E50:  64 20 73 74 61 72 74 73 20 77 69 74 68 0D 0A 09    d starts with...
023E60:  74 68 65 20 73 61 6D 65 20 63 68 61 72 61 63 74    the same charact
023E70:  65 72 20 79 6F 75 20 63 61 6E 20 67 65 74 20 74    er you can get t
023E80:  6F 20 6F 74 68 65 72 20 74 68 61 6E 20 74 68 65    o other than the
023E90:  20 66 69 72 73 74 20 2A 29 0D 0A 56 41 52 09 69     first *)..VAR.i
023EA0:  3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E    :INTEGER;..BEGIN
023EB0:  0D 0A 09 69 3A 3D 48 49 47 48 28 54 65 78 74 29    ...i:=HIGH(Text)
023EC0:  3B 0D 0A 09 52 45 50 45 41 54 0D 0A 09 09 43 68    ;...REPEAT....Ch
023ED0:  61 6E 67 65 4F 70 74 69 6F 6E 28 31 29 3B 0D 0A    angeOption(1);..
023EE0:  09 09 44 45 43 28 69 29 3B 0D 0A 09 09 55 4E 54    ..DEC(i);....UNT
023EF0:  49 4C 20 28 69 3C 30 29 20 4F 52 20 28 43 41 50    IL (i<0) OR (CAP
023F00:  28 54 65 78 74 5B 4F 70 74 69 6F 6E 4E 6F 5D 5B    (Text[OptionNo][
023F10:  31 5D 29 3D 43 41 50 28 63 68 29 29 3B 0D 0A 09    1])=CAP(ch));...
023F20:  45 4E 44 20 43 68 61 6E 67 65 50 6F 73 3B 0D 0A    END ChangePos;..
023F30:  42 45 47 49 4E 0D 0A 09 28 2A 09 64 72 61 77 20    BEGIN...(*.draw 
023F40:  74 68 65 20 62 6F 78 2A 29 0D 0A 0D 0A 09 78 31    the box*).....x1
023F50:  3A 3D 78 2B 28 77 69 64 74 68 2B 31 29 2A 63 6F    :=x+(width+1)*co
023F60:  6C 75 6D 6E 73 3B 0D 0A 09 79 31 3A 3D 79 2B 64    lumns;...y1:=y+d
023F70:  65 70 74 68 2B 31 3B 0D 0A 09 44 72 61 77 42 6F    epth+1;...DrawBo
023F80:  78 28 78 2C 79 31 2C 78 31 2C 79 29 3B 0D 0A 09    x(x,y1,x1,y);...
023F90:  53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 44 69    ScreenControl(Di
023FA0:  6D 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74    m);...ScreenCont
023FB0:  72 6F 6C 28 53 74 61 72 74 47 72 61 70 68 29 3B    rol(StartGraph);
023FC0:  0D 0A 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 63    ...FOR i:=1 TO c
023FD0:  6F 6C 75 6D 6E 73 2D 31 20 44 4F 0D 0A 09 09 78    olumns-1 DO....x
023FE0:  31 3A 3D 78 2B 69 2A 28 77 69 64 74 68 2B 31 29    1:=x+i*(width+1)
023FF0:  3B 0D 0A 09 09 46 4F 52 20 6A 3A 3D 79 2B 31 20    ;....FOR j:=y+1 
024000:  74 20 63 6F 72 6E 65 72 20 6F 66 20 74 68 65 20    t corner of the 
024010:  62 6F 78 0D 0A 09 64 65 70 74 68 20 69 73 20 74    box...depth is t
024020:  68 65 20 6E 75 6D 62 65 72 20 6F 66 20 6F 70 74    he number of opt
024030:  69 6F 6E 73 20 69 6E 20 61 20 63 6F 6C 75 6D 6E    ions in a column
024040:  0D 0A 09 63 6F 6C 75 6D 6E 73 20 69 73 20 74 68    ...columns is th
024050:  65 20 6E 75 6D 62 65 72 20 6F 66 20 63 6F 6C 75    e number of colu
024060:  6D 6E 73 20 74 68 61 74 20 77 69 6C 6C 20 62 65    mns that will be
024070:  20 72 65 71 75 69 72 65 64 09 2A 29 0D 0A 0D 0A     required.*)....
024080:  45 4E 44 20 4D 65 6E 75 2E 0D 0A 1A 1A 1A 1A 1A    END Menu........
024090:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0240A0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0240B0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0240C0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0240D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0240E0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0240F0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024100:  76 61 6E 63 65 4F 4B 3A 3D 46 41 4C 53 45 3B 0D    vanceOK:=FALSE;.
024110:  0A 09 09 09 45 58 49 54 20 0D 0A 09 09 09 45 4E    ....EXIT .....EN
024120:  44 3B 0D 0A 09 09 49 46 20 28 63 68 3D 43 52 29    D;....IF (ch=CR)
024130:  20 4F 52 20 28 63 68 3D 4C 46 29 20 4F 52 20 28     OR (ch=LF) OR (
024140:  63 68 3D 46 46 29 20 54 48 45 4E 20 0D 0A 09 09    ch=FF) THEN ....
024150:  09 49 46 20 4E 4F 54 20 41 64 76 61 6E 63 65 28    .IF NOT Advance(
024160:  29 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B    ) THEN EXIT END;
024170:  0D 0A 09 09 09 63 68 3A 3D 57 6F 72 6B 69 6E 67    .....ch:=Working
024180:  5E 2E 43 68 61 72 73 5B 43 68 61 72 50 6F 73 5D    ^.Chars[CharPos]
024190:  3B 0D 0A 09 09 09 49 46 20 63 68 3D 4C 46 20 54    ;.....IF ch=LF T
0241A0:  48 45 4E 20 62 3A 3D 41 64 76 61 6E 63 65 28 29    HEN b:=Advance()
0241B0:  20 45 4E 44 3B 0D 0A 09 09 09 45 58 49 54 0D 0A     END;.....EXIT..
0241C0:  09 09 09 45 4E 44 3B 0D 0A 09 09 49 4E 43 28 70    ...END;....INC(p
0241D0:  6F 73 29 3B 0D 0A 09 09 49 46 20 4E 4F 54 20 41    os);....IF NOT A
0241E0:  64 76 61 6E 63 65 28 29 20 54 48 45 4E 20 0D 0A    dvance() THEN ..
0241F0:  09 09 09 41 64 76 61 6E 63 65 4F 4B 3A 3D 46 41    ...AdvanceOK:=FA
024200:  54 4F 20 79 31 2D 31 20 44 4F 0D 0A 09 09 09 47    TO y1-1 DO.....G
024210:  6F 74 6F 78 79 28 78 31 2C 6A 29 3B 0D 0A 09 09    otoxy(x1,j);....
024220:  09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 56    .ScreenControl(V
024230:  65 72 74 69 63 61 6C 29 3B 0D 0A 09 09 09 45 4E    ertical);.....EN
024240:  44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53 63 72    D;....END;...Scr
024250:  65 65 6E 43 6F 6E 74 72 6F 6C 28 45 6E 64 47 72    eenControl(EndGr
024260:  61 70 68 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F    aph);...ScreenCo
024270:  6E 74 72 6F 6C 28 4E 6F 72 6D 61 6C 29 3B 0D 0A    ntrol(Normal);..
024280:  0D 0A 09 28 2A 77 65 20 6E 6F 77 20 68 61 76 65    ...(*we now have
024290:  20 61 20 62 6F 78 20 61 72 6F 75 6E 64 20 74 68     a box around th
0242A0:  65 20 6D 65 6E 75 20 77 69 74 68 20 64 69 6D 20    e menu with dim 
0242B0:  62 61 72 73 20 62 65 74 77 65 65 6E 20 63 6F 6C    bars between col
0242C0:  75 6D 6E 73 2A 29 0D 0A 0D 0A 09 4F 70 74 69 6F    umns*).....Optio
0242D0:  6E 4E 6F 3A 3D 30 3B 09 28 2A 61 63 74 75 61 6C    nNo:=0;.(*actual
0242E0:  6C 79 20 6F 6E 65 20 6C 65 73 73 20 74 68 61 6E    ly one less than
0242F0:  20 76 61 6C 75 65 20 72 65 74 75 72 6E 65 64 2A     value returned*
024300:  29 0D 0A 09 6A 3A 3D 30 3B 09 09 28 2A 72 6F 77    )...j:=0;..(*row
024310:  20 6E 75 6D 62 65 72 2A 29 0D 0A 09 78 31 3A 3D     number*)...x1:=
024320:  78 2B 31 3B 09 28 2A 70 6F 73 69 74 69 6F 6E 20    x+1;.(*position 
024330:  66 6F 72 20 74 65 78 74 2A 29 0D 0A 09 79 31 3A    for text*)...y1:
024340:  3D 79 2B 31 3B 09 0D 0A 09 46 4F 52 20 69 3A 3D    =y+1;....FOR i:=
024350:  30 20 54 4F 20 48 49 47 48 28 54 65 78 74 29 20    0 TO HIGH(Text) 
024360:  44 4F 09 0D 0A 09 09 47 6F 74 6F 78 79 28 78 31    DO.....Gotoxy(x1
024370:  2C 79 31 29 3B 0D 0A 09 09 57 72 69 74 65 53 74    ,y1);....WriteSt
024380:  72 69 6E 67 28 54 65 78 74 5B 69 5D 29 3B 0D 0A    ring(Text[i]);..
024390:  09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 49 46 20    ..INC(j);....IF 
0243A0:  6A 3D 64 65 70 74 68 20 54 48 45 4E 20 28 2A 6E    j=depth THEN (*n
0243B0:  65 78 74 20 63 6F 6C 75 6D 6E 2A 29 0D 0A 09 09    ext column*)....
0243C0:  09 78 31 3A 3D 78 31 2B 77 69 64 74 68 2B 31 3B    .x1:=x1+width+1;
0243D0:  0D 0A 09 09 09 79 31 3A 3D 79 2B 31 3B 0D 0A 09    .....y1:=y+1;...
0243E0:  09 09 6A 3A 3D 30 0D 0A 09 09 45 4C 53 45 0D 0A    ..j:=0....ELSE..
0243F0:  09 09 09 49 4E 43 28 79 31 29 3B 0D 0A 09 09 09    ...INC(y1);.....
024400:  28 2A 09 6D 65 6E 75 20 68 61 6E 64 6C 65 72 0D    (*.menu handler.
024410:  0A 0D 0A 09 43 6F 70 79 72 69 67 68 74 20 44 61    ....Copyright Da
024420:  76 65 20 4D 6F 6F 72 65 20 46 54 4C 20 4D 6F 64    ve Moore FTL Mod
024430:  75 6C 61 2D 32 20 31 39 38 36 0D 0A 0D 0A 09 4D    ula-2 1986.....M
024440:  6F 64 69 66 69 63 61 74 69 6F 6E 73 3A 09 43 68    odifications:.Ch
024450:  61 6E 67 65 64 20 74 6F 20 61 6C 6C 6F 77 20 70    anged to allow p
024460:  6F 73 69 74 69 6F 6E 20 74 6F 20 6F 70 74 69 6F    osition to optio
024470:  6E 20 75 73 69 6E 67 20 66 69 72 73 74 0D 0A 09    n using first...
024480:  09 09 6C 65 74 74 65 72 20 6F 66 20 6F 70 74 69    ..letter of opti
024490:  6F 6E 2E 20 49 66 20 6D 6F 72 65 20 74 68 61 6E    on. If more than
0244A0:  20 6F 6E 65 20 6F 70 74 69 6F 6E 20 73 74 61 72     one option star
0244B0:  74 73 0D 0A 09 09 09 77 69 74 68 20 61 20 67 69    ts.....with a gi
0244C0:  76 65 6E 20 6C 65 74 74 65 72 2C 20 61 6C 77 61    ven letter, alwa
0244D0:  79 73 20 6D 6F 76 65 73 20 74 6F 20 6E 65 78 74    ys moves to next
0244E0:  20 2A 29 0D 0A 0D 0A 0D 0A 49 4D 50 4C 45 4D 45     *)......IMPLEME
0244F0:  4E 54 41 54 49 4F 4E 20 4D 4F 44 55 4C 45 20 4D    NTATION MODULE M
024500:  65 6E 75 3B 0D 0A 0D 0A 28 2A 09 4D 65 6E 75 20    enu;....(*.Menu 
024510:  64 72 69 76 65 72 0D 0A 0D 0A 09 42 72 69 6E 67    driver.....Bring
024520:  20 75 70 20 61 20 6D 65 6E 75 20 61 74 20 73 65     up a menu at se
024530:  6C 65 63 74 65 64 20 70 6F 69 6E 74 20 6F 6E 20    lected point on 
024540:  73 63 72 65 65 6E 20 61 6E 64 20 61 63 63 65 70    screen and accep
024550:  74 20 61 6E 20 6F 70 74 69 6F 6E 0D 0A 0D 0A 09    t an option.....
024560:  6F 70 74 69 6F 6E 73 20 63 61 6E 20 62 65 20 73    options can be s
024570:  65 6C 65 63 74 65 64 20 65 69 74 68 65 72 20 62    elected either b
024580:  79 20 73 74 72 69 6B 69 6E 67 20 66 69 72 73 74    y striking first
024590:  20 63 68 61 72 61 63 74 65 72 20 6F 66 0D 0A 0D     character of...
0245A0:  0A 09 6F 70 74 69 6F 6E 20 6F 72 20 62 79 20 65    ..option or by e
0245B0:  6E 74 65 72 69 6E 67 20 6F 70 74 69 6F 6E 20 6E    ntering option n
0245C0:  6F 20 28 6C 69 6D 69 74 65 64 20 74 6F 20 30 2D    o (limited to 0-
0245D0:  39 29 0D 0A 0D 0A 09 6F 70 74 69 6F 6E 20 30 20    9).....option 0 
0245E0:  69 73 20 61 6C 77 61 79 73 20 65 78 69 74 20 77    is always exit w
0245F0:  69 74 68 6F 75 74 20 73 65 6C 65 63 74 69 6F 6E    ithout selection
024600:  45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 46    END;....END; (*F
024610:  4F 52 2A 29 0D 0A 0D 0A 09 28 2A 66 69 6E 69 73    OR*).....(*finis
024620:  68 20 6F 66 66 20 63 75 72 72 65 6E 74 20 63 6F    h off current co
024630:  6C 75 6D 6E 2A 29 0D 0A 0D 0A 09 49 46 20 79 31    lumn*).....IF y1
024640:  3C 3E 28 79 2B 31 29 20 54 48 45 4E 0D 0A 09 09    <>(y+1) THEN....
024650:  57 48 49 4C 45 20 6A 3C 64 65 70 74 68 20 44 4F    WHILE j<depth DO
024660:  0D 0A 09 09 09 47 6F 74 6F 78 79 28 78 31 2C 79    .....Gotoxy(x1,y
024670:  31 29 3B 0D 0A 09 09 09 57 72 69 74 65 53 74 72    1);.....WriteStr
024680:  69 6E 67 28 27 20 20 20 20 20 20 20 20 20 20 20    ing('           
024690:  27 29 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 3B 0D    ');.....INC(j);.
0246A0:  0A 09 09 09 49 4E 43 28 79 31 29 3B 0D 0A 09 09    ....INC(y1);....
0246B0:  09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09    .END;....END;...
0246C0:  0D 0A 09 28 2A 61 63 63 65 70 74 20 61 6E 20 6F    ...(*accept an o
0246D0:  70 74 69 6F 6E 2A 29 0D 0A 0D 0A 09 4C 4F 4F 50    ption*).....LOOP
0246E0:  0D 0A 0D 0A 09 09 28 2A 69 6E 76 65 72 73 65 20    ......(*inverse 
0246F0:  63 75 72 72 65 6E 74 6C 79 20 73 65 6C 65 63 74    currently select
024700:  65 64 20 6F 70 74 69 6F 6E 2A 29 0D 0A 0D 0A 09    ed option*).....
024710:  09 78 31 3A 3D 78 2B 31 3B 0D 0A 09 09 79 31 3A    .x1:=x+1;....y1:
024720:  3D 79 2B 31 2B 4F 70 74 69 6F 6E 4E 6F 3B 0D 0A    =y+1+OptionNo;..
024730:  09 09 57 48 49 4C 45 20 79 31 3E 3D 28 79 2B 64    ..WHILE y1>=(y+d
024740:  65 70 74 68 2B 31 29 20 44 4F 0D 0A 09 09 09 79    epth+1) DO.....y
024750:  31 3A 3D 79 31 2D 64 65 70 74 68 3B 0D 0A 09 09    1:=y1-depth;....
024760:  09 78 31 3A 3D 78 31 2B 77 69 64 74 68 2B 31 0D    .x1:=x1+width+1.
024770:  0A 09 09 09 45 4E 44 3B 0D 0A 09 09 47 6F 74 6F    ....END;....Goto
024780:  78 79 28 78 31 2C 79 31 29 3B 0D 0A 09 09 53 63    xy(x1,y1);....Sc
024790:  72 65 65 6E 43 6F 6E 74 72 6F 6C 28 49 6E 76 65    reenControl(Inve
0247A0:  72 73 65 29 3B 0D 0A 09 09 57 72 69 74 65 53 74    rse);....WriteSt
0247B0:  72 69 6E 67 28 54 65 78 74 5B 4F 70 74 69 6F 6E    ring(Text[Option
0247C0:  4E 6F 5D 29 3B 0D 0A 09 09 53 63 72 65 65 6E 43    No]);....ScreenC
0247D0:  6F 6E 74 72 6F 6C 28 4E 6F 72 6D 61 6C 29 3B 0D    ontrol(Normal);.
0247E0:  0A 09 09 47 6F 74 6F 78 79 28 78 31 2C 79 31 29    ...Gotoxy(x1,y1)
0247F0:  3B 0D 0A 09 09 52 45 50 45 41 54 0D 0A 09 09 09    ;....REPEAT.....
024800:  20 61 73 20 69 73 20 65 73 63 61 70 65 2A 29 0D     as is escape*).
024810:  0A 0D 0A 46 52 4F 4D 09 53 63 72 65 65 6E 49 4F    ...FROM.ScreenIO
024820:  09 49 4D 50 4F 52 54 09 47 6F 74 6F 78 79 2C 44    .IMPORT.Gotoxy,D
024830:  72 61 77 42 6F 78 2C 44 69 6D 2C 53 74 61 72 74    rawBox,Dim,Start
024840:  47 72 61 70 68 2C 0D 0A 09 09 09 09 45 6E 64 47    Graph,......EndG
024850:  72 61 70 68 2C 56 65 72 74 69 63 61 6C 2C 49 6E    raph,Vertical,In
024860:  76 65 72 73 65 2C 4E 6F 72 6D 61 6C 2C 0D 0A 09    verse,Normal,...
024870:  09 09 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C    ...ScreenControl
024880:  2C 52 69 6E 67 42 65 6C 6C 3B 0D 0A 46 52 4F 4D    ,RingBell;..FROM
024890:  09 54 65 72 6D 69 6E 61 6C 09 49 4D 50 4F 52 54    .Terminal.IMPORT
0248A0:  20 09 57 72 69 74 65 53 74 72 69 6E 67 2C 52 65     .WriteString,Re
0248B0:  61 64 2C 57 72 69 74 65 2C 42 75 73 79 52 65 61    ad,Write,BusyRea
0248C0:  64 3B 0D 0A 43 4F 4E 53 54 09 77 69 64 74 68 3D    d;..CONST.width=
0248D0:  31 31 3B 09 28 2A 77 69 64 74 68 20 6F 66 20 6F    11;.(*width of o
0248E0:  6E 65 20 6F 70 74 69 6F 6E 2A 29 0D 0A 09 45 53    ne option*)...ES
0248F0:  43 3D 31 62 78 3B 0D 0A 09 43 52 3D 30 64 78 3B    C=1bx;...CR=0dx;
024900:  0D 0A 09 43 74 72 6C 58 3D 31 38 78 3B 0D 0A 09    ...CtrlX=18x;...
024910:  43 74 72 6C 45 3D 30 35 78 3B 0D 0A 09 43 74 72    CtrlE=05x;...Ctr
024920:  6C 44 3D 30 34 78 3B 0D 0A 09 43 74 72 6C 53 3D    lD=04x;...CtrlS=
024930:  31 33 78 3B 0D 0A 09 4C 46 3D 30 61 78 3B 0D 0A    13x;...LF=0ax;..
024940:  09 42 53 3D 30 38 78 3B 0D 0A 50 52 4F 43 45 44    .BS=08x;..PROCED
024950:  55 52 45 20 47 65 74 46 72 6F 6D 4D 65 6E 75 28    URE GetFromMenu(
024960:  56 41 52 20 54 65 78 74 3A 41 52 52 41 59 20 4F    VAR Text:ARRAY O
024970:  46 20 4D 65 6E 75 54 65 78 74 3B 78 2C 79 3A 43    F MenuText;x,y:C
024980:  41 52 44 49 4E 41 4C 3B 0D 0A 09 09 64 65 70 74    ARDINAL;....dept
024990:  68 2C 63 6F 6C 75 6D 6E 73 3A 43 41 52 44 49 4E    h,columns:CARDIN
0249A0:  41 4C 29 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 0D    AL):CARDINAL;...
0249B0:  0A 28 2A 20 09 54 65 78 74 20 69 73 20 74 68 65    .(* .Text is the
0249C0:  20 74 65 78 74 20 74 6F 20 64 69 73 70 6C 61 79     text to display
0249D0:  0D 0A 0D 0A 0D 0A 09 78 20 61 6E 64 20 79 20 61    .......x and y a
0249E0:  72 65 20 74 68 65 20 70 6F 73 69 74 69 6F 6E 20    re the position 
0249F0:  66 6F 72 20 74 68 65 20 74 6F 70 20 6C 65 66 74    for the top left
024A00:  42 75 73 79 52 65 61 64 28 63 68 29 3B 0D 0A 09    BusyRead(ch);...
024A10:  09 09 55 4E 54 49 4C 20 63 68 3C 3E 30 78 3B 0D    ..UNTIL ch<>0x;.
024A20:  0A 09 09 47 6F 74 6F 78 79 28 78 31 2C 79 31 29    ...Gotoxy(x1,y1)
024A30:  3B 0D 0A 09 09 53 63 72 65 65 6E 43 6F 6E 74 72    ;....ScreenContr
024A40:  6F 6C 28 4E 6F 72 6D 61 6C 29 3B 0D 0A 09 09 57    ol(Normal);....W
024A50:  72 69 74 65 53 74 72 69 6E 67 28 54 65 78 74 5B    riteString(Text[
024A60:  4F 70 74 69 6F 6E 4E 6F 5D 29 3B 0D 0A 09 09 43    OptionNo]);....C
024A70:  41 53 45 20 43 41 50 28 63 68 29 20 4F 46 0D 0A    ASE CAP(ch) OF..
024A80:  09 09 45 53 43 2C 27 20 27 3A 20 52 45 54 55 52    ..ESC,' ': RETUR
024A90:  4E 20 30 7C 0D 0A 09 09 43 52 3A 20 20 52 45 54    N 0|....CR:  RET
024AA0:  55 52 4E 20 4F 70 74 69 6F 6E 4E 6F 2B 31 7C 0D    URN OptionNo+1|.
024AB0:  0A 09 09 43 74 72 6C 53 2C 42 53 3A 43 68 61 6E    ...CtrlS,BS:Chan
024AC0:  67 65 4F 70 74 69 6F 6E 28 2D 64 65 70 74 68 29    geOption(-depth)
024AD0:  7C 0D 0A 09 09 43 74 72 6C 45 3A 43 68 61 6E 67    |....CtrlE:Chang
024AE0:  65 4F 70 74 69 6F 6E 28 2D 31 29 7C 0D 0A 09 09    eOption(-1)|....
024AF0:  43 74 72 6C 44 3A 43 68 61 6E 67 65 4F 70 74 69    CtrlD:ChangeOpti
024B00:  6F 6E 28 64 65 70 74 68 29 7C 0D 0A 09 09 43 74    on(depth)|....Ct
024B10:  72 6C 58 2C 4C 46 3A 43 68 61 6E 67 65 4F 70 74    rlX,LF:ChangeOpt
024B20:  69 6F 6E 28 31 29 7C 0D 0A 09 09 27 41 27 2E 2E    ion(1)|....'A'..
024B30:  27 5A 27 3A 43 68 61 6E 67 65 50 6F 73 7C 0D 0A    'Z':ChangePos|..
024B40:  09 09 45 4C 53 45 20 53 63 72 65 65 6E 43 6F 6E    ..ELSE ScreenCon
024B50:  74 72 6F 6C 28 52 69 6E 67 42 65 6C 6C 29 0D 0A    trol(RingBell)..
024B60:  09 09 45 4E 44 3B 28 2A 63 61 73 65 2A 29 0D 0A    ..END;(*case*)..
024B70:  09 09 45 4E 44 3B 28 2A 4C 4F 4F 50 2A 29 0D 0A    ..END;(*LOOP*)..
024B80:  09 45 4E 44 20 47 65 74 46 72 6F 6D 4D 65 6E 75    .END GetFromMenu
024B90:  3B 0D 0A 09 45 4E 44 20 4D 65 6E 75 2E 0D 0A 1A    ;...END Menu....
024BA0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024BB0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024BC0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024BD0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024BE0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024BF0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024C00:  20 63 6F 72 6E 65 72 20 6F 66 20 74 68 65 20 62     corner of the b
024C10:  6F 78 0D 0A 09 64 65 70 74 68 20 69 73 20 74 68    ox...depth is th
024C20:  65 20 6E 75 6D 62 65 72 20 6F 66 20 6F 70 74 69    e number of opti
024C30:  6F 6E 73 20 69 6E 20 61 20 63 6F 6C 75 6D 6E 0D    ons in a column.
024C40:  0A 09 63 6F 6C 75 6D 6E 73 20 69 73 20 74 68 65    ..columns is the
024C50:  20 6E 75 6D 62 65 72 20 6F 66 20 63 6F 6C 75 6D     number of colum
024C60:  6E 73 20 74 68 61 74 20 77 69 6C 6C 20 62 65 20    ns that will be 
024C70:  72 65 71 75 69 72 65 64 09 2A 29 0D 0A 0D 0A 56    required.*)....V
024C80:  41 52 09 78 31 2C 79 31 3A 43 41 52 44 49 4E 41    AR.x1,y1:CARDINA
024C90:  4C 3B 0D 0A 09 69 2C 6A 3A 43 41 52 44 49 4E 41    L;...i,j:CARDINA
024CA0:  4C 3B 0D 0A 09 4F 70 74 69 6F 6E 4E 6F 3A 43 41    L;...OptionNo:CA
024CB0:  52 44 49 4E 41 4C 3B 0D 0A 09 63 68 3A 43 48 41    RDINAL;...ch:CHA
024CC0:  52 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68    R;..PROCEDURE Ch
024CD0:  61 6E 67 65 4F 70 74 69 6F 6E 28 62 79 3A 49 4E    angeOption(by:IN
024CE0:  54 45 47 45 52 29 3B 0D 0A 0D 0A 28 2A 09 63 68    TEGER);....(*.ch
024CF0:  61 6E 67 65 20 74 68 65 20 63 75 72 72 65 6E 74    ange the current
024D00:  20 6F 70 74 69 6F 6E 20 6E 75 6D 62 65 72 20 79     option number y
024D10:  20 67 69 76 65 6E 20 69 6E 63 72 65 6D 65 6E 74     given increment
024D20:  0D 0A 0D 0A 09 65 6E 73 75 72 65 20 69 74 20 72    .....ensure it r
024D30:  65 6D 61 69 6E 73 20 69 6E 20 72 61 6E 67 65 2A    emains in range*
024D40:  29 0D 0A 42 45 47 49 4E 0D 0A 09 62 79 3A 3D 62    )..BEGIN...by:=b
024D50:  79 2B 49 4E 54 45 47 45 52 28 4F 70 74 69 6F 6E    y+INTEGER(Option
024D60:  4E 6F 29 3B 0D 0A 09 49 46 20 62 79 3C 30 20 54    No);...IF by<0 T
024D70:  48 45 4E 20 62 79 3A 3D 48 49 47 48 28 54 65 78    HEN by:=HIGH(Tex
024D80:  74 29 20 0D 0A 09 45 4C 53 49 46 20 62 79 3E 48    t) ...ELSIF by>H
024D90:  49 47 48 28 54 65 78 74 29 20 54 48 45 4E 20 62    IGH(Text) THEN b
024DA0:  79 3A 3D 30 20 45 4E 44 3B 0D 0A 09 4F 70 74 69    y:=0 END;...Opti
024DB0:  6F 6E 4E 6F 3A 3D 62 79 0D 0A 09 45 4E 44 20 43    onNo:=by...END C
024DC0:  68 61 6E 67 65 4F 70 74 69 6F 6E 3B 0D 0A 50 52    hangeOption;..PR
024DD0:  4F 43 45 44 55 52 45 20 43 68 61 6E 67 65 50 6F    OCEDURE ChangePo
024DE0:  73 3B 0D 0A 0D 0A 28 2A 09 43 68 61 6E 67 65 20    s;....(*.Change 
024DF0:  70 6F 73 69 74 69 6F 6E 20 75 73 69 6E 67 20 66    position using f
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:  1A 1A 1A 1A 0A 09 09 09 45 4E 44 3B 0D 0A 09 09    ........END;....
024F10:  4C 6F 63 3A 3D 4C 6F 63 2B 31 32 38 3B 0D 0A 09    Loc:=Loc+128;...
024F20:  09 45 4E 44 3B 0D 0A 09 45 4E 44 20 43 6F 6D 70    .END;...END Comp
024F30:  42 69 6E 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    Bin.............
024F40:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024F50:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024F60:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024F70:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
024F80:  44 20 4D 61 74 63 68 65 73 28 29 20 0D 0A 09 09    D Matches() ....
024F90:  09 09 20 20 20 41 4E 44 20 28 4D 61 74 63 68 43    ..   AND (MatchC
024FA0:  68 61 72 4E 6F 3D 30 29 20 54 48 45 4E 0D 0A 09    harNo=0) THEN...
024FB0:  09 09 09 09 52 45 54 55 52 4E 20 54 52 55 45 3B    ....RETURN TRUE;
024FC0:  0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09    .......END;.....
024FD0:  09 73 65 74 63 75 72 70 6F 73 28 66 29 3B 0D 0A    .setcurpos(f);..
024FE0:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44    ....END;.....END
024FF0:  3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 4D 61 74 63    ;...ELSE....Matc
025000:  68 43 68 61 72 3A 3D 53 74 72 69 6E 67 5B 30 5D    hChar:=String[0]
025010:  3B 0D 0A 09 09 4C 4F 4F 50 0D 0A 09 09 09 49 46    ;....LOOP.....IF
025020:  20 4E 4F 54 20 41 64 76 61 6E 63 65 28 29 20 54     NOT Advance() T
025030:  48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D 0A 09    HEN EXIT END;...
025040:  09 09 49 46 20 28 57 6F 72 6B 69 6E 67 5E 2E 43    ..IF (Working^.C
025050:  68 61 72 73 5B 43 68 61 72 50 6F 73 5D 3D 4D 61    hars[CharPos]=Ma
025060:  74 63 68 43 68 61 72 29 0D 0A 09 09 09 20 20 4F    tchChar).....  O
025070:  52 20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61 72    R (Working^.Char
025080:  73 5B 43 68 61 72 50 6F 73 5D 3D 43 41 50 28 4D    s[CharPos]=CAP(M
025090:  61 74 63 68 43 68 61 72 29 29 20 54 48 45 4E 0D    atchChar)) THEN.
0250A0:  0A 09 09 09 09 4D 61 74 63 68 43 68 61 72 4E 6F    .....MatchCharNo
0250B0:  3A 3D 31 3B 0D 0A 09 09 09 09 73 61 76 65 63 75    :=1;......savecu
0250C0:  72 70 6F 73 28 66 29 3B 0D 0A 09 09 09 09 57 48    rpos(f);......WH
0250D0:  49 4C 45 20 28 4D 61 74 63 68 43 68 61 72 4E 6F    ILE (MatchCharNo
0250E0:  3C 53 74 72 69 6E 67 4C 65 6E 29 0D 0A 09 09 09    <StringLen).....
0250F0:  09 20 20 20 20 41 4E 44 20 28 41 64 76 61 6E 63    .    AND (Advanc
025100:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
025110:  45 20 53 63 72 65 65 6E 44 75 6D 6D 79 3B 0D 0A    E ScreenDummy;..
025120:  0D 0A 28 2A 09 74 68 69 73 20 6D 6F 64 75 6C 65    ..(*.this module
025130:  20 77 61 73 20 77 72 69 74 74 65 6E 20 74 6F 20     was written to 
025140:  65 6E 61 62 6C 65 0D 0A 09 73 65 76 65 72 61 6C    enable...several
025150:  20 6D 6F 64 75 6C 65 73 20 74 6F 20 62 65 20 63     modules to be c
025160:  6F 6D 70 69 6C 65 64 0D 0A 09 6F 6E 20 6D 61 63    ompiled...on mac
025170:  68 69 6E 65 73 20 77 69 74 68 20 74 69 67 68 74    hines with tight
025180:  20 54 50 41 27 73 2E 20 54 68 65 20 73 61 6D 65     TPA's. The same
025190:  0D 0A 09 74 68 69 6E 67 20 63 61 6E 20 62 65 20    ...thing can be 
0251A0:  64 6F 6E 65 20 77 69 74 68 20 6F 74 68 65 72 20    done with other 
0251B0:  6D 6F 64 75 6C 65 73 20 69 66 0D 0A 09 79 6F 75    modules if...you
0251C0:  72 20 54 50 41 20 69 73 20 74 69 67 68 74 65 72    r TPA is tighter
0251D0:  20 74 68 61 6E 20 74 68 61 74 20 6F 66 20 6D 79     than that of my
0251E0:  20 74 65 73 74 0D 0A 09 6D 61 63 68 69 6E 65 2E     test...machine.
0251F0:  0D 0A 0D 0A 09 57 68 61 74 20 68 61 73 20 62 65    .....What has be
025200:  65 6E 20 64 6F 6E 65 20 69 73 20 74 6F 20 72 65    en done is to re
025210:  70 6C 61 63 65 20 61 20 6C 61 72 67 65 0D 0A 09    place a large...
025220:  73 79 6D 62 6F 6C 20 74 61 62 6C 65 20 28 74 68    symbol table (th
025230:  61 74 20 6F 66 20 53 63 72 65 65 6E 49 4F 29 20    at of ScreenIO) 
025240:  77 69 74 68 20 61 20 0D 0A 09 73 6D 61 6C 6C 20    with a ...small 
025250:  73 79 6D 62 6F 6C 20 74 61 62 6C 65 20 28 74 68    symbol table (th
025260:  69 73 20 6D 6F 64 75 6C 65 29 2E 20 54 68 69 73    is module). This
025270:  0D 0A 09 72 65 64 75 63 65 73 20 74 68 65 20 73    ...reduces the s
025280:  79 6D 62 6F 6C 20 74 61 62 6C 65 20 73 70 61 63    ymbol table spac
025290:  65 20 75 73 65 64 20 62 79 20 74 68 65 0D 0A 09    e used by the...
0252A0:  63 61 6C 6C 69 6E 67 20 6D 6F 64 75 6C 65 73 2E    calling modules.
0252B0:  20 54 68 69 73 20 69 73 20 66 75 72 74 68 65 72     This is further
0252C0:  20 64 69 73 63 75 73 73 65 64 0D 0A 09 69 6E 20     discussed...in 
0252D0:  74 68 65 20 6D 61 6E 75 61 6C 2E 0D 0A 2A 29 0D    the manual...*).
0252E0:  0A 50 52 4F 43 45 44 55 52 45 20 43 6C 65 61 72    .PROCEDURE Clear
0252F0:  53 63 72 65 65 6E 3B 0D 0A 50 52 4F 43 45 44 55    Screen;..PROCEDU
025300:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
025310:  45 20 52 65 73 65 74 44 69 73 63 3B 0D 0A 50 52    E ResetDisc;..PR
025320:  4F 43 45 44 55 52 45 20 52 65 73 65 74 41 6C 6C    OCEDURE ResetAll
025330:  44 69 73 63 73 3B 0D 0A 45 4E 44 20 52 65 73 65    Discs;..END Rese
025340:  74 44 69 73 63 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A    tDisc...........
025350:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025360:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025370:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025380:  45 4E 44 3B 0D 0A 09 09 09 09 73 65 74 63 75 72    END;......setcur
025390:  70 6F 73 28 66 29 3B 0D 0A 09 09 09 09 45 4E 44    pos(f);......END
0253A0:  3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E    ;.....END;....EN
0253B0:  44 3B 0D 0A 09 73 61 76 65 63 75 72 70 6F 73 28    D;...savecurpos(
0253C0:  66 29 3B 0D 0A 09 52 45 54 55 52 4E 20 46 41 4C    f);...RETURN FAL
0253D0:  53 45 3B 0D 0A 09 45 4E 44 20 46 69 6E 64 53 74    SE;...END FindSt
0253E0:  72 69 6E 67 3B 0D 0A 28 2A 09 41 63 74 75 61 6C    ring;..(*.Actual
0253F0:  6C 79 20 66 69 6E 64 20 74 68 65 20 6E 65 78 74    ly find the next
025400:  20 6F 63 63 75 72 72 65 6E 63 65 20 6F 66 20 74     occurrence of t
025410:  68 65 20 73 74 72 69 6E 67 09 0D 0A 0D 0A 09 44    he string......D
025420:  6F 6E 65 20 72 65 74 75 72 6E 73 20 74 72 75 65    one returns true
025430:  20 69 66 20 6F 6E 65 20 69 73 20 66 6F 75 6E 64     if one is found
025440:  2A 29 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 61    *)..PROCEDURE Ca
025450:  6C 6C 57 69 74 68 46 69 6C 65 28 4E 61 6D 65 3A    llWithFile(Name:
025460:  41 52 52 41 59 20 4F 46 20 43 48 41 52 3B 56 41    ARRAY OF CHAR;VA
025470:  52 20 66 3A 45 64 69 74 46 69 6C 65 29 3B 0D 0A    R f:EditFile);..
025480:  42 45 47 49 4E 0D 0A 09 4D 61 6B 65 43 61 6C 6C    BEGIN...MakeCall
025490:  28 4E 61 6D 65 2C 66 2E 66 2E 66 29 3B 0D 0A 09    (Name,f.f.f);...
0254A0:  45 4E 44 20 43 61 6C 6C 57 69 74 68 46 69 6C 65    END CallWithFile
0254B0:  3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 6C    ;..PROCEDURE Fil
0254C0:  65 54 79 70 65 28 56 41 52 20 66 3A 45 64 69 74    eType(VAR f:Edit
0254D0:  46 69 6C 65 29 3A 43 41 52 44 49 4E 41 4C 3B 0D    File):CARDINAL;.
0254E0:  0A 42 45 47 49 4E 0D 0A 09 49 46 20 66 2E 66 2E    .BEGIN...IF f.f.
0254F0:  66 2E 66 63 62 66 74 3D 27 4D 4F 44 27 20 54 48    f.fcbft='MOD' TH
025500:  52 45 20 47 6F 74 6F 78 79 28 78 2C 79 3A 43 41    RE Gotoxy(x,y:CA
025510:  52 44 49 4E 41 4C 29 3B 0D 0A 50 52 4F 43 45 44    RDINAL);..PROCED
025520:  55 52 45 20 52 69 6E 67 42 65 6C 6C 3B 0D 0A 50    URE RingBell;..P
025530:  52 4F 43 45 44 55 52 45 20 4F 75 74 70 75 74 54    ROCEDURE OutputT
025540:  6F 53 63 72 65 65 6E 28 62 3A 42 4F 4F 4C 45 41    oScreen(b:BOOLEA
025550:  4E 29 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20    N);..PROCEDURE  
025560:  44 72 61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32    DrawBox(x1,y1,x2
025570:  2C 79 32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A    ,y2:CARDINAL);..
025580:  45 4E 44 20 53 63 72 65 65 6E 44 75 6D 6D 79 2E    END ScreenDummy.
025590:  0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0255A0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0255B0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0255C0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0255D0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0255E0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
0255F0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025600:  20 46 69 6C 65 73 2C 46 69 6C 65 73 4F 70 65 6E     Files,FilesOpen
025610:  65 64 2C 63 75 72 78 2C 63 75 72 79 2C 43 75 72    ed,curx,cury,Cur
025620:  72 65 6E 74 57 69 6E 64 6F 77 2C 43 68 61 6E 67    rentWindow,Chang
025630:  65 57 69 6E 64 6F 77 2C 0D 0A 09 09 09 52 65 73    eWindow,.....Res
025640:  65 74 53 63 72 65 65 6E 50 6F 73 2C 43 75 72 72    etScreenPos,Curr
025650:  65 6E 74 46 69 6C 65 3B 0D 0A 46 52 4F 4D 20 45    entFile;..FROM E
025660:  64 69 74 44 69 73 70 6C 61 79 20 49 4D 50 4F 52    ditDisplay IMPOR
025670:  54 20 45 72 72 6F 72 4D 65 73 73 61 67 65 2C 53    T ErrorMessage,S
025680:  65 74 57 69 6E 64 6F 77 73 2C 44 69 73 70 6C 61    etWindows,Displa
025690:  79 46 69 6C 65 2C 57 69 6E 64 6F 77 73 2C 0D 0A    yFile,Windows,..
0256A0:  09 09 44 69 73 70 6C 61 79 45 72 72 6F 72 2C 45    ..DisplayError,E
0256B0:  72 72 6F 72 4F 72 64 69 6E 61 6C 3B 0D 0A 0D 0A    rrorOrdinal;....
0256C0:  46 52 4F 4D 20 44 6F 4D 65 6E 75 20 49 4D 50 4F    FROM DoMenu IMPO
0256D0:  52 54 20 44 6F 4D 65 6E 75 4F 70 2C 4F 70 65 6E    RT DoMenuOp,Open
0256E0:  3B 0D 0A 0D 0A 46 52 4F 4D 20 4B 65 79 42 6F 61    ;....FROM KeyBoa
0256F0:  72 64 20 49 4D 50 4F 52 54 20 49 6E 74 65 72 70    rd IMPORT Interp
025700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025800:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025810:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025820:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025830:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025840:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025850:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025860:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025870:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025880:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025890:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025900:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
025910:  4F 44 55 4C 45 20 53 63 72 65 65 6E 44 75 6D 6D    ODULE ScreenDumm
025920:  79 3B 0D 0A 49 4D 50 4F 52 54 09 53 63 72 65 65    y;..IMPORT.Scree
025930:  6E 49 4F 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52    nIO;....PROCEDUR
025940:  45 20 43 6C 65 61 72 53 63 72 65 65 6E 3B 0D 0A    E ClearScreen;..
025950:  42 45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 49 4F    BEGIN...ScreenIO
025960:  2E 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 53    .ScreenControl(S
025970:  63 72 65 65 6E 49 4F 2E 43 6C 65 61 72 53 63 72    creenIO.ClearScr
025980:  65 65 6E 29 3B 0D 0A 09 45 4E 44 20 43 6C 65 61    een);...END Clea
025990:  72 53 63 72 65 65 6E 3B 0D 0A 50 52 4F 43 45 44    rScreen;..PROCED
0259A0:  55 52 45 20 47 6F 74 6F 78 79 28 78 2C 79 3A 43    URE Gotoxy(x,y:C
0259B0:  41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E    ARDINAL);..BEGIN
0259C0:  0D 0A 09 53 63 72 65 65 6E 49 4F 2E 47 6F 74 6F    ...ScreenIO.Goto
0259D0:  78 79 28 78 2C 79 29 3B 0D 0A 09 45 4E 44 20 47    xy(x,y);...END G
0259E0:  6F 74 6F 78 79 3B 0D 0A 50 52 4F 43 45 44 55 52    otoxy;..PROCEDUR
0259F0:  45 20 52 69 6E 67 42 65 6C 6C 3B 0D 0A 42 45 47    E RingBell;..BEG
025A00:  49 4E 0D 0A 09 53 63 72 65 65 6E 49 4F 2E 53 63    IN...ScreenIO.Sc
025A10:  72 65 65 6E 43 6F 6E 74 72 6F 6C 28 53 63 72 65    reenControl(Scre
025A20:  65 6E 49 4F 2E 52 69 6E 67 42 65 6C 6C 29 3B 0D    enIO.RingBell);.
025A30:  0A 09 45 4E 44 20 52 69 6E 67 42 65 6C 6C 3B 0D    ..END RingBell;.
025A40:  0A 50 52 4F 43 45 44 55 52 45 20 4F 75 74 70 75    .PROCEDURE Outpu
025A50:  74 54 6F 53 63 72 65 65 6E 28 62 3A 42 4F 4F 4C    tToScreen(b:BOOL
025A60:  45 41 4E 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 53    EAN);..BEGIN...S
025A70:  63 72 65 65 6E 49 4F 2E 4F 75 74 70 75 74 54 6F    creenIO.OutputTo
025A80:  53 63 72 65 65 6E 28 62 29 3B 0D 0A 09 45 4E 44    Screen(b);...END
025A90:  20 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 3B     OutputToScreen;
025AA0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44 72 61    ..PROCEDURE  Dra
025AB0:  77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C 79 32    wBox(x1,y1,x2,y2
025AC0:  3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47    :CARDINAL);..BEG
025AD0:  49 4E 0D 0A 09 53 63 72 65 65 6E 49 4F 2E 44 72    IN...ScreenIO.Dr
025AE0:  61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C 79    awBox(x1,y1,x2,y
025AF0:  32 29 3B 0D 0A 09 45 4E 44 20 44 72 61 77 42 6F    2);...END DrawBo
025B00:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
025B10:  4F 44 55 4C 45 20 52 65 73 65 74 44 69 73 63 3B    ODULE ResetDisc;
025B20:  0D 0A 46 52 4F 4D 09 43 50 4D 20 49 4D 50 4F 52    ..FROM.CPM IMPOR
025B30:  54 20 42 44 4F 53 2C 72 73 64 66 63 3B 0D 0A 50    T BDOS,rsdfc;..P
025B40:  52 4F 43 45 44 55 52 45 20 52 65 73 65 74 41 6C    ROCEDURE ResetAl
025B50:  6C 44 69 73 63 73 3B 0D 0A 56 41 52 09 63 3A 43    lDiscs;..VAR.c:C
025B60:  41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D    ARDINAL;..BEGIN.
025B70:  0A 09 63 3A 3D 42 44 4F 53 28 72 73 64 66 63 2C    ..c:=BDOS(rsdfc,
025B80:  30 33 66 68 29 3B 0D 0A 09 45 4E 44 20 52 65 73    03fh);...END Res
025B90:  65 74 41 6C 6C 44 69 73 63 73 3B 0D 0A 45 4E 44    etAllDiscs;..END
025BA0:  20 52 65 73 65 74 44 69 73 63 2E 0D 0A 1A 1A 1A     ResetDisc......
025BB0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025BC0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025BD0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025BE0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025BF0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025C00:  44 3B 0D 0A 09 09 69 3A 3D 69 2B 4F 52 44 28 57    D;....i:=i+ORD(W
025C10:  6F 72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E    orking^.BlockLen
025C20:  29 3B 0D 0A 09 09 77 3A 3D 57 6F 72 6B 69 6E 67    );....w:=Working
025C30:  3B 0D 0A 09 09 49 46 20 69 3C 50 6F 73 20 54 48    ;....IF i<Pos TH
025C40:  45 4E 20 57 6F 72 6B 69 6E 67 3A 3D 57 6F 72 6B    EN Working:=Work
025C50:  69 6E 67 5E 2E 4E 65 78 74 20 45 4C 53 45 20 45    ing^.Next ELSE E
025C60:  58 49 54 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B    XIT END;....END;
025C70:  0D 0A 09 49 46 20 57 6F 72 6B 69 6E 67 3D 4E 49    ...IF Working=NI
025C80:  4C 20 54 48 45 4E 20 0D 0A 09 09 57 6F 72 6B 69    L THEN ....Worki
025C90:  6E 67 3A 3D 77 3B 0D 0A 09 09 43 68 61 72 50 6F    ng:=w;....CharPo
025CA0:  73 3A 3D 77 5E 2E 42 6C 6F 63 6B 4C 65 6E 3B 0D    s:=w^.BlockLen;.
025CB0:  0A 09 45 4C 53 45 0D 0A 09 09 43 68 61 72 50 6F    ..ELSE....CharPo
025CC0:  73 3A 3D 50 6F 73 2D 28 69 2D 4F 52 44 28 57 6F    s:=Pos-(i-ORD(Wo
025CD0:  72 6B 69 6E 67 5E 2E 42 6C 6F 63 6B 4C 65 6E 29    rking^.BlockLen)
025CE0:  29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 73 61 76    );....END;...sav
025CF0:  65 63 75 72 70 6F 73 28 46 69 6C 65 29 3B 0D 0A    ecurpos(File);..
025D00:  78 3B 0D 0A 45 4E 44 20 53 63 72 65 65 6E 44 75    x;..END ScreenDu
025D10:  6D 6D 79 2E 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A    mmy.............
025D20:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025D30:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025D40:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025D50:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025D60:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025D70:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
025D80:  20 64 6F 20 49 6E 70 75 74 2D 4F 75 74 70 75 74     do Input-Output
025D90:  20 74 6F 20 74 68 65 20 74 65 72 6D 69 6E 61 6C     to the terminal
025DA0:  0D 0A 09 74 68 72 6F 75 67 68 20 74 68 65 20 6D    ...through the m
025DB0:  6F 64 75 6C 65 73 20 53 74 72 65 61 6D 73 20 61    odules Streams a
025DC0:  6E 64 20 49 6E 4F 75 74 2C 20 62 75 74 20 74 68    nd InOut, but th
025DD0:  65 73 65 0D 0A 09 69 6E 63 72 65 61 73 65 20 74    ese...increase t
025DE0:  68 65 20 73 69 7A 65 20 6F 66 20 74 68 65 20 70    he size of the p
025DF0:  72 6F 67 72 61 6D 20 61 6E 64 20 61 72 65 20 6F    rogram and are o
025E00:  6E 6C 79 20 72 65 71 75 69 72 65 64 20 69 66 20    nly required if 
025E10:  0D 0A 09 79 6F 75 20 77 61 6E 74 20 74 6F 20 64    ...you want to d
025E20:  6F 20 6D 6F 72 65 20 70 6F 77 65 72 66 75 6C 20    o more powerful 
025E30:  74 68 69 6E 67 73 2C 20 73 75 63 68 20 61 73 20    things, such as 
025E40:  66 69 6C 65 0D 0A 09 72 65 64 69 72 65 63 74 69    file...redirecti
025E50:  6F 6E 20 61 6E 64 20 6E 75 6D 62 65 72 20 63 6F    on and number co
025E60:  6E 76 65 72 73 69 6F 6E 2E 20 49 66 20 61 6C 6C    nversion. If all
025E70:  20 79 6F 75 20 77 61 6E 74 20 69 73 20 6E 75 6D     you want is num
025E80:  62 65 72 20 0D 0A 09 63 6F 6E 76 65 72 73 69 6F    ber ...conversio
025E90:  6E 2C 20 53 6D 61 6C 6C 49 4F 20 63 61 6E 20 62    n, SmallIO can b
025EA0:  65 20 75 73 65 64 20 2A 29 20 0D 0A 0D 0A 56 41    e used *) ....VA
025EB0:  52 09 50 61 72 73 3A 41 52 52 41 59 5B 30 2E 2E    R.Pars:ARRAY[0..
025EC0:  33 5D 20 4F 46 20 50 61 72 61 6D 65 74 65 72 3B    3] OF Parameter;
025ED0:  0D 0A 09 50 61 72 43 6F 75 6E 74 3A 49 4E 54 45    ...ParCount:INTE
025EE0:  47 45 52 3B 0D 0A 0D 0A 09 28 2A 09 50 61 72 73    GER;.....(*.Pars
025EF0:  20 69 73 20 61 6E 20 61 72 72 61 79 20 69 6E 74     is an array int
025F00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025F10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025F20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025F30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025F40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025F50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025F60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025F70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025F80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025F90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025FA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025FB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025FC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025FD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025FE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025FF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
026090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0260A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0260B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0260C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0260D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0260E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0260F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
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:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
026210:  45 20 53 63 72 65 65 6E 49 4F 3B 0D 0A 0D 0A 28    E ScreenIO;....(
026220:  2A 09 53 63 72 65 65 6E 20 68 61 6E 64 6C 69 6E    *.Screen handlin
026230:  67 20 72 6F 75 74 69 6E 65 73 20 66 6F 72 20 63    g routines for c
026240:  75 72 73 6F 72 20 70 6F 73 69 74 69 6F 6E 2C 20    ursor position, 
026250:  61 74 74 72 69 62 75 74 65 20 65 74 63 0D 0A 0D    attribute etc...
026260:  0A 09 53 70 65 63 69 66 69 63 20 74 6F 20 74 68    ..Specific to th
026270:  69 73 20 63 6F 6D 70 69 6C 65 72 2A 29 0D 0A 0D    is compiler*)...
026280:  0A 46 52 4F 4D 09 53 59 53 54 45 4D 20 49 4D 50    .FROM.SYSTEM IMP
026290:  4F 52 54 20 42 59 54 45 3B 0D 0A 46 52 4F 4D 09    ORT BYTE;..FROM.
0262A0:  46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 69 6C    Files IMPORT Fil
0262B0:  65 4E 61 6D 65 3B 0D 0A 54 59 50 45 09 45 64 69    eName;..TYPE.Edi
0262C0:  74 73 3D 28 44 69 6D 2C 42 72 69 67 68 74 2C 4E    ts=(Dim,Bright,N
0262D0:  6F 72 6D 61 6C 2C 49 6E 76 65 72 73 65 2C 42 6C    ormal,Inverse,Bl
0262E0:  69 6E 6B 2C 53 74 61 72 74 47 72 61 70 68 2C 45    ink,StartGraph,E
0262F0:  6E 64 47 72 61 70 68 2C 0D 0A 09 09 44 65 6C 43    ndGraph,....DelC
026300:  68 61 72 2C 44 65 6C 4C 69 6E 65 2C 49 6E 73 43    har,DelLine,InsC
026310:  68 61 72 2C 49 6E 73 4C 69 6E 65 2C 44 65 6C 45    har,InsLine,DelE
026320:  6F 6C 2C 44 65 6C 45 6F 73 2C 43 6C 65 61 72 53    ol,DelEos,ClearS
026330:  63 72 65 65 6E 2C 0D 0A 09 09 48 6F 72 69 7A 6F    creen,....Horizo
026340:  6E 74 61 6C 2C 56 65 72 74 69 63 61 6C 2C 43 6F    ntal,Vertical,Co
026350:  72 6E 65 72 4C 4C 2C 43 6F 72 6E 65 72 55 4C 2C    rnerLL,CornerUL,
026360:  43 6F 72 6E 65 72 55 52 2C 43 6F 72 6E 65 72 4C    CornerUR,CornerL
026370:  52 2C 0D 0A 09 09 53 74 61 72 74 78 79 2C 4D 69    R,....Startxy,Mi
026380:  64 64 6C 65 58 59 2C 45 6E 64 58 59 2C 52 69 6E    ddleXY,EndXY,Rin
026390:  67 42 65 6C 6C 2C 4D 6F 76 65 4C 65 66 74 2C 4D    gBell,MoveLeft,M
0263A0:  6F 76 65 52 69 67 68 74 2C 0D 0A 09 09 4D 6F 76    oveRight,....Mov
0263B0:  65 44 6F 77 6E 2C 4D 6F 76 65 55 70 29 3B 0D 0A    eDown,MoveUp);..
0263C0:  0D 0A 09 28 2A 09 54 68 65 20 65 64 69 74 74 69    ...(*.The editti
0263D0:  6E 67 20 6D 6E 65 6D 6F 6E 69 63 73 20 68 61 76    ng mnemonics hav
0263E0:  65 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20    e the following 
0263F0:  6D 65 61 6E 69 6E 67 20 0D 0A 0D 0A 09 09 44 69    meaning ......Di
026400:  3B 0D 0A 0D 0A 28 2A 09 09 64 72 61 77 20 61 20    ;....(*..draw a 
026410:  62 6F 78 20 66 6F 72 20 61 20 77 69 6E 64 6F 77    box for a window
026420:  20 6F 6E 20 74 68 65 20 73 63 72 65 65 6E 0D 0A     on the screen..
026430:  0D 0A 09 09 78 31 2C 79 31 20 20 69 73 20 74 68    ....x1,y1  is th
026440:  65 20 6C 6F 77 65 72 20 6C 65 66 74 20 63 6F 72    e lower left cor
026450:  6E 65 72 0D 0A 09 09 78 32 2C 79 32 20 20 69 73    ner....x2,y2  is
026460:  20 75 70 70 65 72 20 72 69 67 68 74 20 63 6F 72     upper right cor
026470:  6E 65 72 2A 29 0D 0A 50 52 4F 43 45 44 55 52 45    ner*)..PROCEDURE
026480:  20 43 6C 69 70 28 78 31 2C 79 31 2C 78 32 2C 79     Clip(x1,y1,x2,y
026490:  32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 28 2A    2:CARDINAL);..(*
0264A0:  09 09 53 65 74 20 63 6C 69 70 20 62 6F 75 6E 64    ..Set clip bound
0264B0:  61 72 69 65 73 0D 0A 09 09 75 73 65 64 20 62 79    aries....used by
0264C0:  20 57 69 6E 64 6F 77 73 20 77 68 65 6E 20 64 72     Windows when dr
0264D0:  61 77 69 6E 67 20 62 6F 78 65 73 20 73 6F 20 74    awing boxes so t
0264E0:  68 61 74 20 6F 6E 6C 79 20 74 68 65 0D 0A 09 09    hat only the....
0264F0:  70 61 72 74 73 20 6F 66 20 74 68 65 20 62 6F 78    parts of the box
026500:  65 73 20 6D 61 73 6B 65 64 20 61 72 65 20 72 65    es masked are re
026510:  2D 64 72 61 77 6E 0D 0A 09 09 68 61 73 20 6E 6F    -drawn....has no
026520:  20 65 66 66 65 63 74 20 65 78 63 65 70 74 20 69     effect except i
026530:  6E 20 44 72 61 77 42 6F 78 2A 29 0D 0A 56 41 52    n DrawBox*)..VAR
026540:  09 53 63 72 65 65 6E 44 65 70 74 68 2C 53 63 72    .ScreenDepth,Scr
026550:  65 65 6E 57 69 64 74 68 3A 43 41 52 44 49 4E 41    eenWidth:CARDINA
026560:  4C 3B 0D 0A 09 4D 61 64 65 43 68 61 6E 67 65 3A    L;...MadeChange:
026570:  42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 09 28 2A 09    BOOLEAN;.....(*.
026580:  43 6F 6E 74 72 6F 6C 20 69 73 20 74 68 65 20 63    Control is the c
026590:  75 72 72 65 6E 74 20 63 6F 6E 74 72 6F 6C 20 63    urrent control c
0265A0:  6F 64 65 20 73 65 74 20 66 6F 72 20 74 68 65 20    ode set for the 
0265B0:  74 65 72 6D 69 6E 61 6C 0D 0A 0D 0A 09 09 4D 61    terminal......Ma
0265C0:  64 65 43 68 61 6E 67 65 20 69 73 20 54 52 55 45    deChange is TRUE
0265D0:  20 6F 6E 20 72 65 74 75 72 6E 20 66 72 6F 6D 20     on return from 
0265E0:  53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 20 69 66    ScreenControl if
0265F0:  20 74 68 65 20 0D 0A 09 09 72 65 71 75 69 72 65     the ....require
026600:  6D 2C 42 72 69 67 68 74 2C 4E 6F 72 6D 61 6C 2C    m,Bright,Normal,
026610:  49 6E 76 65 72 73 65 2C 42 6C 69 6E 6B 0D 0A 0D    Inverse,Blink...
026620:  0A 09 09 09 45 6E 74 65 72 20 74 68 65 20 67 69    ....Enter the gi
026630:  76 65 6E 20 6D 6F 64 65 2E 20 4D 6F 64 65 73 20    ven mode. Modes 
026640:  73 68 6F 75 6C 64 20 6E 6F 74 20 62 65 20 63 6F    should not be co
026650:  6D 62 69 6E 65 64 0D 0A 09 09 09 61 73 20 74 6F    mbined.....as to
026660:  6F 20 6D 75 63 68 20 76 61 72 69 61 74 69 6F 6E    o much variation
026670:  20 65 78 69 73 74 73 20 62 65 74 77 65 65 6E 20     exists between 
026680:  74 65 72 6D 69 6E 61 6C 73 20 69 6E 0D 0A 09 09    terminals in....
026690:  09 74 68 69 73 20 61 72 65 61 0D 0A 0D 0A 09 09    .this area......
0266A0:  53 74 61 72 74 47 72 61 70 68 2C 45 6E 64 47 72    StartGraph,EndGr
0266B0:  61 70 68 0D 0A 0D 0A 09 09 09 45 6E 74 65 72 20    aph.......Enter 
0266C0:  61 6E 64 20 65 78 69 74 20 67 72 61 70 68 69 63    and exit graphic
0266D0:  20 63 68 61 72 61 63 74 65 72 20 73 65 74 20 6D     character set m
0266E0:  6F 64 65 0D 0A 09 09 09 55 73 65 64 20 66 6F 72    ode.....Used for
0266F0:  20 64 72 61 77 69 6E 67 20 62 61 72 73 20 61 72     drawing bars ar
026700:  6F 75 6E 64 20 77 69 6E 64 6F 77 73 0D 0A 09 09    ound windows....
026710:  09 49 66 20 79 6F 75 72 20 74 65 72 6D 69 6E 61    .If your termina
026720:  6C 20 63 61 6E 20 64 6F 20 74 68 69 73 20 77 69    l can do this wi
026730:  74 68 20 6F 72 64 69 6E 61 72 79 20 63 68 61 72    th ordinary char
026740:  61 63 74 65 72 73 2C 0D 0A 09 09 09 73 65 74 20    acters,.....set 
026750:  74 68 65 73 65 20 73 65 71 75 65 6E 63 65 73 20    these sequences 
026760:  65 6D 70 74 79 20 61 6E 64 20 70 75 74 20 74 68    empty and put th
026770:  65 20 72 65 71 75 69 72 65 64 20 0D 0A 09 09 09    e required .....
026780:  63 68 61 72 61 63 74 65 72 73 20 69 6E 20 74 68    characters in th
026790:  65 20 73 65 71 75 65 6E 63 65 73 20 62 65 6C 6F    e sequences belo
0267A0:  77 0D 0A 0D 0A 09 09 44 65 6C 43 68 61 72 2C 44    w......DelChar,D
0267B0:  65 6C 4C 69 6E 65 2C 49 6E 73 43 68 61 72 2C 49    elLine,InsChar,I
0267C0:  6E 73 4C 69 6E 65 2C 44 65 6C 45 6F 6C 2C 44 65    nsLine,DelEol,De
0267D0:  6C 45 6F 73 2C 43 6C 65 61 72 53 63 72 65 65 6E    lEos,ClearScreen
0267E0:  0D 0A 0D 0A 09 09 09 50 65 72 66 6F 72 6D 20 74    .......Perform t
0267F0:  68 65 20 76 61 72 69 6F 75 73 20 65 64 69 74 74    he various editt
026800:  64 20 63 6F 64 65 20 69 73 20 69 6D 70 6C 65 6D    d code is implem
026810:  65 6E 74 65 64 2C 20 65 6C 73 65 20 66 61 6C 73    ented, else fals
026820:  65 0D 0A 0D 0A 09 09 45 64 69 74 44 69 73 70 20    e......EditDisp 
026830:  63 6F 6E 74 61 69 6E 73 20 63 6F 64 65 20 74 6F    contains code to
026840:  20 73 69 6D 75 6C 61 74 65 20 73 6F 6D 65 20 63     simulate some c
026850:  6F 64 65 73 20 77 68 65 6E 20 74 68 65 79 0D 0A    odes when they..
026860:  09 09 61 72 65 20 6E 6F 74 20 69 6D 70 6C 65 6D    ..are not implem
026870:  65 6E 74 65 64 2A 29 0D 0A 0D 0A 28 2A 09 4E 65    ented*)....(*.Ne
026880:  77 20 72 6F 75 74 69 6E 65 73 20 61 64 64 65 64    w routines added
026890:  20 61 74 20 76 65 72 73 69 6F 6E 20 31 2E 30 32     at version 1.02
0268A0:  0D 0A 0D 0A 09 54 68 65 73 65 20 72 6F 75 74 69    .....These routi
0268B0:  6E 65 73 20 6D 6F 76 65 20 74 68 65 20 72 65 73    nes move the res
0268C0:  70 6F 73 69 62 69 6C 74 79 20 66 6F 72 20 73 63    posibilty for sc
0268D0:  72 6F 6C 6C 69 6E 67 20 77 69 74 68 69 6E 20 61    rolling within a
0268E0:  20 77 69 6E 64 6F 77 20 66 72 6F 6D 0D 0A 09 45     window from...E
0268F0:  64 69 74 53 74 61 74 20 74 6F 20 53 63 72 65 65    ditStat to Scree
026900:  6E 49 4F 0D 0A 0D 0A 09 54 68 69 73 20 69 73 20    nIO.....This is 
026910:  64 6F 6E 65 20 73 6F 20 74 68 61 74 2C 20 77 68    done so that, wh
026920:  65 6E 20 77 6F 72 6B 69 6E 67 20 77 69 74 68 20    en working with 
026930:  74 68 65 20 6D 65 6D 6F 72 79 20 6D 61 70 70 65    the memory mappe
026940:  64 20 76 65 72 73 69 6F 6E 20 6F 66 20 53 63 72    d version of Scr
026950:  65 65 6E 49 4F 2C 0D 0A 09 54 68 65 20 42 61 72    eenIO,...The Bar
026960:  73 20 6E 65 65 64 20 6E 6F 74 20 6A 75 6D 70 20    s need not jump 
026970:  75 70 20 61 6E 64 20 64 6F 77 6E 20 77 68 65 6E    up and down when
026980:  20 61 20 77 69 6E 64 6F 77 20 69 73 20 73 63 72     a window is scr
026990:  6F 6C 6C 65 64 2A 29 0D 0A 50 52 4F 43 45 44 55    olled*)..PROCEDU
0269A0:  52 45 20 53 63 72 6F 6C 6C 57 69 6E 64 6F 77 55    RE ScrollWindowU
0269B0:  70 28 53 74 61 72 74 4C 69 6E 65 2C 45 6E 64 4C    p(StartLine,EndL
0269C0:  69 6E 65 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A    ine:CARDINAL);..
0269D0:  50 52 4F 43 45 44 55 52 45 20 53 63 72 6F 6C 6C    PROCEDURE Scroll
0269E0:  57 69 6E 64 6F 77 44 6F 77 6E 28 53 74 61 72 74    WindowDown(Start
0269F0:  4C 69 6E 65 2C 45 6E 64 4C 69 6E 65 3A 43 41 52    Line,EndLine:CAR
026A00:  69 6E 67 20 73 65 71 75 65 6E 63 65 73 0D 0A 09    ing sequences...
026A10:  09 09 44 65 6C 45 6F 6C 20 64 65 6C 65 74 65 73    ..DelEol deletes
026A20:  20 66 72 6F 6D 20 75 6E 64 65 72 20 63 75 72 73     from under curs
026A30:  6F 72 20 74 6F 20 65 6E 64 20 6F 66 20 6C 69 6E    or to end of lin
026A40:  65 0D 0A 09 09 09 44 65 6C 45 6F 73 20 64 65 6C    e.....DelEos del
026A50:  65 74 65 73 20 66 72 6F 6D 20 75 6E 64 65 72 20    etes from under 
026A60:  63 75 72 73 6F 72 20 74 6F 20 65 6E 64 20 6F 66    cursor to end of
026A70:  20 73 63 72 65 65 6E 0D 0A 09 09 09 43 6C 65 61     screen.....Clea
026A80:  72 73 63 72 65 65 6E 20 68 6F 6D 65 73 20 74 68    rscreen homes th
026A90:  65 20 63 75 72 73 6F 72 20 61 73 20 77 65 6C 6C    e cursor as well
026AA0:  20 28 74 6F 20 74 6F 70 20 6C 65 66 74 29 0D 0A     (to top left)..
026AB0:  0D 0A 09 09 48 6F 72 69 7A 6F 6E 74 61 6C 2C 56    ....Horizontal,V
026AC0:  65 72 74 69 63 61 6C 2C 43 6F 72 6E 65 72 4C 4C    ertical,CornerLL
026AD0:  2C 43 6F 72 6E 65 72 55 4C 2C 43 6F 72 6E 65 72    ,CornerUL,Corner
026AE0:  55 52 2C 43 6F 72 6E 65 72 4C 52 0D 0A 0D 0A 09    UR,CornerLR.....
026AF0:  09 09 43 68 61 72 61 63 74 65 72 20 73 65 71 75    ..Character sequ
026B00:  65 6E 63 65 73 20 74 6F 20 64 72 61 77 20 68 6F    ences to draw ho
026B10:  72 69 7A 6F 6E 74 61 6C 20 61 6E 64 20 76 65 72    rizontal and ver
026B20:  74 69 63 61 6C 0D 0A 09 09 09 62 61 72 73 20 61    tical.....bars a
026B30:  72 6F 75 6E 64 20 77 69 6E 64 6F 77 73 20 61 6E    round windows an
026B40:  64 20 74 6F 20 64 6F 20 74 68 65 20 63 6F 72 6E    d to do the corn
026B50:  65 72 73 20 28 6C 6F 77 65 72 20 6C 65 66 74 2C    ers (lower left,
026B60:  0D 0A 09 09 09 75 70 70 65 72 20 6C 65 66 74 2C    .....upper left,
026B70:  20 75 70 70 65 72 20 72 69 67 68 74 2C 6C 6F 77     upper right,low
026B80:  65 72 20 72 69 67 68 74 29 0D 0A 0D 0A 09 09 53    er right)......S
026B90:  74 61 72 74 78 79 2C 4D 69 64 64 6C 65 58 59 2C    tartxy,MiddleXY,
026BA0:  45 6E 64 58 59 0D 0A 0D 0A 09 09 09 54 68 65 20    EndXY.......The 
026BB0:  63 68 61 72 61 63 74 65 72 20 73 65 71 75 65 6E    character sequen
026BC0:  63 65 73 20 74 6F 20 73 74 61 72 74 20 61 20 63    ces to start a c
026BD0:  75 72 73 6F 72 20 61 64 64 72 65 73 73 0D 0A 09    ursor address...
026BE0:  09 09 63 6F 6D 6D 61 6E 64 2C 20 66 6F 72 20 62    ..command, for b
026BF0:  65 74 77 65 65 6E 20 74 68 65 20 63 6F 2D 6F 72    etween the co-or
026C00:  44 49 4E 41 4C 29 3B 0D 0A 50 52 4F 43 45 44 55    DINAL);..PROCEDU
026C10:  52 45 20 4F 75 74 70 75 74 54 6F 53 63 72 65 65    RE OutputToScree
026C20:  6E 28 54 75 72 6E 4F 6E 3A 42 4F 4F 4C 45 41 4E    n(TurnOn:BOOLEAN
026C30:  29 3B 0D 0A 0D 0A 28 2A 09 43 61 6C 6C 20 74 68    );....(*.Call th
026C40:  69 73 20 72 6F 75 74 69 6E 65 20 77 69 74 68 20    is routine with 
026C50:  46 41 4C 53 45 20 74 6F 20 70 72 65 76 65 6E 74    FALSE to prevent
026C60:  20 6F 75 74 70 75 74 20 67 6F 69 6E 67 20 74 6F     output going to
026C70:  20 74 68 65 0D 0A 09 73 63 72 65 65 6E 2E 20 54     the...screen. T
026C80:  68 69 73 20 61 6C 6C 6F 77 73 20 79 6F 75 20 74    his allows you t
026C90:  6F 20 73 75 70 70 72 65 73 73 20 6F 75 74 70 75    o suppress outpu
026CA0:  74 20 77 68 69 6C 65 20 6C 61 72 67 65 20 61 6D    t while large am
026CB0:  6F 75 6E 74 73 0D 0A 09 6F 66 20 73 63 72 65 65    ounts...of scree
026CC0:  6E 20 61 6C 74 65 72 61 74 69 6F 6E 73 20 61 72    n alterations ar
026CD0:  65 20 62 65 69 6E 67 20 6D 61 64 65 20 74 6F 20    e being made to 
026CE0:  73 70 65 65 64 20 75 70 20 61 20 70 72 6F 67 72    speed up a progr
026CF0:  61 6D 2E 20 4F 66 0D 0A 09 63 6F 75 72 73 65 2C    am. Of...course,
026D00:  20 79 6F 75 20 6D 75 73 74 20 72 65 2D 65 6E 61     you must re-ena
026D10:  62 6C 65 20 73 63 72 65 65 6E 20 6F 75 74 70 75    ble screen outpu
026D20:  74 20 61 6E 64 20 74 68 65 6E 20 72 65 2D 64 72    t and then re-dr
026D30:  61 77 20 74 68 65 0D 0A 09 73 63 72 65 65 6E 20    aw the...screen 
026D40:  6C 61 74 65 72 2E 20 54 68 69 73 20 69 73 20 75    later. This is u
026D50:  73 65 64 20 62 79 20 74 68 65 20 65 64 69 74 6F    sed by the edito
026D60:  72 20 74 6F 20 73 75 70 70 72 65 73 73 20 73 63    r to suppress sc
026D70:  72 65 65 6E 0D 0A 09 61 6C 74 65 72 61 74 69 6F    reen...alteratio
026D80:  6E 73 20 64 75 72 69 6E 67 20 65 78 65 63 75 74    ns during execut
026D90:  69 6F 6E 20 6F 66 20 72 65 70 65 61 74 73 20 2A    ion of repeats *
026DA0:  29 0D 0A 45 4E 44 20 53 63 72 65 65 6E 49 4F 2E    )..END ScreenIO.
026DB0:  0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
026DC0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
026DD0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
026DE0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
026DF0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
026E00:  64 69 6E 61 74 65 73 20 61 6E 64 20 61 66 74 65    dinates and afte
026E10:  72 20 74 68 65 0D 0A 09 09 09 63 75 72 73 6F 72    r the.....cursor
026E20:  20 61 64 64 72 65 73 73 20 63 6F 6D 6D 61 6E 64     address command
026E30:  2E 0D 0A 0D 0A 09 09 4D 6F 76 65 4C 65 66 74 2C    .......MoveLeft,
026E40:  4D 6F 76 65 52 69 67 68 74 2C 4D 6F 76 65 44 6F    MoveRight,MoveDo
026E50:  77 6E 2C 4D 6F 76 65 55 70 0D 0A 0D 0A 09 09 09    wn,MoveUp.......
026E60:  43 75 72 73 6F 72 20 6D 6F 76 65 20 63 6F 6D 6D    Cursor move comm
026E70:  61 6E 64 73 0D 0A 09 09 2A 29 0D 0A 09 28 2A 09    ands....*)...(*.
026E80:  59 6F 75 20 73 68 6F 75 6C 64 20 6E 6F 74 20 6E    You should not n
026E90:  65 65 64 20 74 6F 20 75 73 65 20 74 68 65 20 6E    eed to use the n
026EA0:  65 78 74 20 66 65 77 20 74 79 70 65 20 64 65 63    ext few type dec
026EB0:  6C 61 72 61 74 69 6F 6E 73 0D 0A 09 09 54 68 65    larations....The
026EC0:  79 20 61 72 65 20 69 6E 63 6C 75 64 65 64 20 68    y are included h
026ED0:  65 72 65 20 66 6F 72 20 75 73 65 20 62 79 20 74    ere for use by t
026EE0:  68 65 20 63 6F 6E 66 69 67 75 72 61 74 69 6F 6E    he configuration
026EF0:  20 70 72 6F 67 72 61 6D 2A 29 0D 0A 0D 0A 0D 0A     program*)......
026F00:  50 52 4F 43 45 44 55 52 45 20 47 6F 74 6F 78 79    PROCEDURE Gotoxy
026F10:  28 78 2C 79 3A 43 41 52 44 49 4E 41 4C 29 3B 09    (x,y:CARDINAL);.
026F20:  09 0D 0A 0D 0A 28 2A 09 09 50 6F 73 69 74 69 6F    .....(*..Positio
026F30:  6E 20 74 6F 20 67 69 76 65 6E 20 63 6F 6F 72 64    n to given coord
026F40:  69 6E 61 74 65 73 0D 0A 09 09 74 6F 70 20 6C 65    inates....top le
026F50:  66 74 20 69 73 20 61 6C 77 61 79 73 20 30 2C 30    ft is always 0,0
026F60:  2C 20 77 68 69 63 68 20 6D 65 61 6E 73 20 74 68    , which means th
026F70:  61 74 0D 0A 09 09 74 68 65 20 62 69 67 67 65 72    at....the bigger
026F80:  20 79 20 69 73 2C 20 74 68 65 20 66 75 72 74 68     y is, the furth
026F90:  65 72 20 64 6F 77 6E 20 74 68 65 20 73 63 72 65    er down the scre
026FA0:  65 6E 0D 0A 0D 0A 09 09 78 20 69 73 20 63 6F 6C    en......x is col
026FB0:  75 6D 6E 2C 20 79 20 69 73 20 72 6F 77 0D 0A 0D    umn, y is row...
026FC0:  0A 09 09 41 20 27 53 74 61 6E 64 61 72 64 27 20    ...A 'Standard' 
026FD0:  53 63 72 65 65 6E 20 69 73 20 38 30 20 62 79 20    Screen is 80 by 
026FE0:  32 34 2E 20 54 68 65 20 6C 69 6D 69 74 20 69 73    24. The limit is
026FF0:  20 73 65 74 20 62 79 0D 0A 09 09 74 68 65 20 74     set by....the t
027000:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
027010:  4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D    ODULE ScreenIO;.
027020:  0A 46 52 4F 4D 20 54 65 72 6D 69 6E 61 6C 20 49    .FROM Terminal I
027030:  4D 50 4F 52 54 20 43 68 61 72 52 6F 75 74 69 6E    MPORT CharRoutin
027040:  65 2C 43 68 61 72 45 6E 61 62 6C 65 64 3B 0D 0A    e,CharEnabled;..
027050:  46 52 4F 4D 20 46 69 6C 65 73 20 49 4D 50 4F 52    FROM Files IMPOR
027060:  54 20 4C 6F 6F 6B 75 70 2C 46 49 4C 45 2C 52 65    T Lookup,FILE,Re
027070:  61 64 42 6C 6F 63 6B 3B 0D 0A 46 52 4F 4D 20 46    adBlock;..FROM F
027080:  61 73 74 4D 6F 76 65 20 49 4D 50 4F 52 54 20 4D    astMove IMPORT M
027090:  6F 76 65 75 70 3B 0D 0A 46 52 4F 4D 20 53 59 53    oveup;..FROM SYS
0270A0:  54 45 4D 20 49 4D 50 4F 52 54 20 41 44 52 2C 53    TEM IMPORT ADR,S
0270B0:  49 5A 45 2C 57 4F 52 44 3B 0D 0A 46 52 4F 4D 09    IZE,WORD;..FROM.
0270C0:  43 50 4D 20 49 4D 50 4F 52 54 20 77 63 63 66 63    CPM IMPORT wccfc
0270D0:  2C 42 44 4F 53 3B 0D 0A 28 2A 09 53 63 72 65 65    ,BDOS;..(*.Scree
0270E0:  6E 20 68 61 6E 64 6C 69 6E 67 20 72 6F 75 74 69    n handling routi
0270F0:  6E 65 73 20 66 6F 72 20 63 75 72 73 6F 72 20 70    nes for cursor p
027100:  6F 73 69 74 69 6F 6E 2C 20 61 74 74 72 69 62 75    osition, attribu
027110:  74 65 20 65 74 63 0D 0A 0D 0A 09 54 68 69 73 20    te etc.....This 
027120:  6D 6F 64 75 6C 65 20 69 73 20 73 70 65 63 69 66    module is specif
027130:  69 63 20 74 6F 20 74 68 69 73 20 63 6F 6D 70 69    ic to this compi
027140:  6C 65 72 2A 29 0D 0A 54 59 50 45 0D 0A 09 43 6F    ler*)..TYPE...Co
027150:  6E 74 72 6F 6C 53 65 71 75 65 6E 63 65 3D 52 45    ntrolSequence=RE
027160:  43 4F 52 44 0D 0A 09 09 43 68 61 72 73 3A 41 52    CORD....Chars:AR
027170:  52 41 59 5B 31 2E 2E 37 5D 20 4F 46 20 43 48 41    RAY[1..7] OF CHA
027180:  52 3B 0D 0A 09 09 53 65 71 4C 65 6E 3A 42 59 54    R;....SeqLen:BYT
027190:  45 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 0D 0A    E;....END;......
0271A0:  09 43 6F 6E 74 72 6F 6C 43 6F 64 65 73 3D 52 45    .ControlCodes=RE
0271B0:  43 4F 52 44 0D 0A 09 09 45 64 69 74 53 65 71 75    CORD....EditSequ
0271C0:  65 6E 63 65 73 3A 41 52 52 41 59 20 45 64 69 74    ences:ARRAY Edit
0271D0:  73 20 4F 46 20 43 6F 6E 74 72 6F 6C 53 65 71 75    s OF ControlSequ
0271E0:  65 6E 63 65 3B 0D 0A 09 09 41 73 63 69 69 3A 42    ence;....Ascii:B
0271F0:  4F 4F 4C 45 41 4E 3B 20 28 2A 74 72 75 65 20 69    OOLEAN; (*true i
027200:  65 72 6D 69 6E 61 6C 20 64 65 66 69 6E 69 74 69    erminal definiti
027210:  6F 6E 20 66 69 6C 65 09 2A 29 0D 0A 0D 0A 50 52    on file.*)....PR
027220:  4F 43 45 44 55 52 45 20 4C 6F 61 64 54 65 72 6D    OCEDURE LoadTerm
027230:  43 6F 64 65 28 66 69 6C 65 6E 61 6D 65 3A 46 69    Code(filename:Fi
027240:  6C 65 4E 61 6D 65 29 3B 0D 0A 0D 0A 28 2A 09 09    leName);....(*..
027250:  4C 6F 61 64 20 74 68 65 20 74 65 72 6D 69 6E 61    Load the termina
027260:  6C 20 64 65 66 69 6E 69 74 69 6F 6E 20 66 6F 72    l definition for
027270:  20 74 68 65 20 63 75 72 72 65 6E 74 20 74 65 72     the current ter
027280:  6D 69 6E 61 6C 0D 0A 0D 0A 09 09 66 69 6C 65 6E    minal......filen
027290:  61 6D 65 20 69 73 20 74 68 65 20 6E 61 6D 65 20    ame is the name 
0272A0:  6F 66 20 74 68 65 20 66 69 6C 65 20 74 6F 20 72    of the file to r
0272B0:  65 61 64 0D 0A 0D 0A 09 09 4E 6F 72 6D 61 6C 6C    ead......Normall
0272C0:  79 2C 20 77 68 65 6E 20 74 68 65 20 70 72 6F 67    y, when the prog
0272D0:  72 61 6D 20 69 73 20 6C 6F 61 64 65 64 2C 20 74    ram is loaded, t
0272E0:  68 65 20 66 69 6C 65 0D 0A 09 09 27 54 45 52 4D    he file....'TERM
0272F0:  49 4E 41 4C 2E 43 4F 44 27 20 69 73 20 6C 6F 61    INAL.COD' is loa
027300:  64 65 64 20 66 72 6F 6D 20 74 68 65 20 6C 6F 67    ded from the log
027310:  67 65 64 20 69 6E 20 64 69 73 63 0D 0A 09 09 54    ged in disc....T
027320:  68 69 73 20 72 6F 75 74 69 6E 65 20 6F 6E 6C 79    his routine only
027330:  20 6E 65 65 64 73 20 74 6F 20 62 65 20 75 73 65     needs to be use
027340:  64 20 69 66 20 74 68 61 74 0D 0A 09 09 66 69 6C    d if that....fil
027350:  65 20 69 73 20 6E 6F 74 20 74 68 65 20 6F 6E 65    e is not the one
027360:  20 74 6F 20 75 73 65 20 28 65 67 2C 20 74 6F 20     to use (eg, to 
027370:  73 77 61 70 20 73 63 72 65 65 6E 73 2A 29 20 0D    swap screens*) .
027380:  0A 0D 0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45    .......PROCEDURE
027390:  20 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 73     ScreenControl(s
0273A0:  3A 45 64 69 74 73 29 3B 0D 0A 0D 0A 28 2A 09 09    :Edits);....(*..
0273B0:  50 65 72 66 6F 72 6D 20 61 20 73 63 72 65 65 6E    Perform a screen
0273C0:  20 63 6F 6E 74 72 6F 6C 20 6F 70 65 72 61 74 69     control operati
0273D0:  6F 6E 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52    on*)....PROCEDUR
0273E0:  45 20 20 44 72 61 77 42 6F 78 28 78 31 2C 79 31    E  DrawBox(x1,y1
0273F0:  2C 78 32 2C 79 32 3A 43 41 52 44 49 4E 41 4C 29    ,x2,y2:CARDINAL)
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:  66 20 63 6F 2D 6F 72 64 69 6E 61 74 65 73 20 6F    f co-ordinates o
027510:  75 74 20 6F 75 74 70 75 74 20 61 73 20 0D 0A 09    ut output as ...
027520:  09 09 09 20 61 73 63 69 69 20 6E 75 6D 62 65 72    ... ascii number
027530:  73 20 72 61 74 68 65 72 20 74 68 61 6E 20 62 69    s rather than bi
027540:  6E 61 72 79 2A 29 0D 0A 09 09 43 6F 6C 75 6D 6E    nary*)....Column
027550:  46 69 72 73 74 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A    First:BOOLEAN;..
027560:  09 09 41 64 64 72 65 73 73 49 6E 47 72 61 70 68    ..AddressInGraph
027570:  3A 42 4F 4F 4C 45 41 4E 3B 20 28 2A 74 72 75 65    :BOOLEAN; (*true
027580:  20 69 66 20 63 61 6E 20 63 68 61 6E 67 65 20 63     if can change c
027590:  6F 6F 72 64 69 6E 61 74 65 73 0D 0A 09 09 09 09    oordinates......
0275A0:  09 20 20 69 6E 20 67 72 61 70 68 20 6D 6F 64 65    .  in graph mode
0275B0:  2A 29 0D 0A 09 09 43 61 72 72 69 61 67 65 52 65    *)....CarriageRe
0275C0:  74 75 72 6E 3A 42 4F 4F 4C 45 41 4E 3B 20 28 2A    turn:BOOLEAN; (*
0275D0:  74 72 75 65 20 69 66 20 63 61 72 72 69 61 67 65    true if carriage
0275E0:  20 72 65 74 75 72 6E 20 72 65 74 75 72 6E 73 20     return returns 
0275F0:  0D 0A 09 09 09 09 09 20 20 74 6F 20 73 74 61 72    .......  to star
027600:  74 20 6F 66 20 63 75 72 72 65 6E 74 20 72 6F 77    t of current row
027610:  2A 29 0D 0A 09 09 53 63 72 65 65 6E 44 65 70 74    *)....ScreenDept
027620:  68 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 53    h:CARDINAL;....S
027630:  63 72 65 65 6E 57 69 64 74 68 3A 43 41 52 44 49    creenWidth:CARDI
027640:  4E 41 4C 3B 0D 0A 09 09 58 59 4F 66 66 73 65 74    NAL;....XYOffset
027650:  3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 45 4E    :CARDINAL;....EN
027660:  44 3B 20 0D 0A 09 09 0D 0A 0D 0A 56 41 52 09 43    D; ........VAR.C
027670:  6F 6E 74 72 6F 6C 3A 43 6F 6E 74 72 6F 6C 43 6F    ontrol:ControlCo
027680:  64 65 73 3B 0D 0A 09 41 63 74 69 76 65 3A 42 4F    des;...Active:BO
027690:  4F 4C 45 41 4E 3B 0D 0A 09 49 6E 47 72 61 70 68    OLEAN;...InGraph
0276A0:  3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09 4C 6F 77 78    :BOOLEAN;...Lowx
0276B0:  2C 48 69 67 68 78 2C 4C 6F 77 79 2C 48 69 67 68    ,Highx,Lowy,High
0276C0:  79 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 4F 75    y:CARDINAL;...Ou
0276D0:  74 70 75 74 45 6E 61 62 6C 65 64 3A 42 4F 4F 4C    tputEnabled:BOOL
0276E0:  45 41 4E 3B 0D 0A 28 2A 50 52 4F 43 45 44 55 52    EAN;..(*PROCEDUR
0276F0:  45 20 57 72 69 74 65 28 69 3A 43 48 41 52 29 3B    E Write(i:CHAR);
027700:  6B 28 66 6E 2C 41 44 52 28 62 6C 6F 63 6B 29 2C    k(fn,ADR(block),
027710:  30 2C 53 49 5A 45 28 62 6C 6F 63 6B 29 2C 72 65    0,SIZE(block),re
027720:  70 6C 79 29 3B 0D 0A 09 09 41 63 74 69 76 65 3A    ply);....Active:
027730:  3D 72 65 70 6C 79 3E 3D 53 49 5A 45 28 43 6F 6E    =reply>=SIZE(Con
027740:  74 72 6F 6C 29 3B 0D 0A 09 09 4D 6F 76 65 75 70    trol);....Moveup
027750:  28 41 44 52 28 62 6C 6F 63 6B 29 2C 41 44 52 28    (ADR(block),ADR(
027760:  43 6F 6E 74 72 6F 6C 29 2C 53 49 5A 45 28 43 6F    Control),SIZE(Co
027770:  6E 74 72 6F 6C 29 29 3B 0D 0A 09 09 45 4E 44 3B    ntrol));....END;
027780:  0D 0A 09 53 63 72 65 65 6E 57 69 64 74 68 3A 3D    ...ScreenWidth:=
027790:  43 6F 6E 74 72 6F 6C 2E 53 63 72 65 65 6E 57 69    Control.ScreenWi
0277A0:  64 74 68 3B 0D 0A 09 53 63 72 65 65 6E 44 65 70    dth;...ScreenDep
0277B0:  74 68 3A 3D 43 6F 6E 74 72 6F 6C 2E 53 63 72 65    th:=Control.Scre
0277C0:  65 6E 44 65 70 74 68 3B 0D 0A 09 45 4E 44 20 4C    enDepth;...END L
0277D0:  6F 61 64 54 65 72 6D 43 6F 64 65 3B 0D 0A 0D 0A    oadTermCode;....
0277E0:  50 52 4F 43 45 44 55 52 45 20 53 63 72 65 65 6E    PROCEDURE Screen
0277F0:  43 6F 6E 74 72 6F 6C 28 73 3A 45 64 69 74 73 29    Control(s:Edits)
027800:  3B 0D 0A 0D 0A 28 2A 09 09 50 65 72 66 6F 72 6D    ;....(*..Perform
027810:  20 61 20 73 63 72 65 65 6E 20 63 6F 6E 74 72 6F     a screen contro
027820:  6C 20 6F 70 65 72 61 74 69 6F 6E 2A 29 0D 0A 56    l operation*)..V
027830:  41 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A    AR.i:CARDINAL;..
027840:  42 45 47 49 4E 0D 0A 09 49 46 20 41 63 74 69 76    BEGIN...IF Activ
027850:  65 20 41 4E 44 20 4F 75 74 70 75 74 45 6E 61 62    e AND OutputEnab
027860:  6C 65 64 20 54 48 45 4E 0D 0A 09 09 57 49 54 48    led THEN....WITH
027870:  20 43 6F 6E 74 72 6F 6C 2E 45 64 69 74 53 65 71     Control.EditSeq
027880:  75 65 6E 63 65 73 5B 73 5D 20 44 4F 0D 0A 09 09    uences[s] DO....
027890:  09 4D 61 64 65 43 68 61 6E 67 65 3A 3D 53 65 71    .MadeChange:=Seq
0278A0:  4C 65 6E 3E 30 3B 0D 0A 09 09 09 46 4F 52 20 69    Len>0;.....FOR i
0278B0:  3A 3D 31 20 54 4F 20 4F 52 44 28 53 65 71 4C 65    :=1 TO ORD(SeqLe
0278C0:  6E 29 20 44 4F 20 57 72 69 74 65 28 43 68 61 72    n) DO Write(Char
0278D0:  73 5B 69 5D 29 20 45 4E 44 3B 0D 0A 09 09 09 45    s[i]) END;.....E
0278E0:  4E 44 3B 0D 0A 09 09 49 46 20 4E 4F 54 20 43 6F    ND;....IF NOT Co
0278F0:  6E 74 72 6F 6C 2E 41 64 64 72 65 73 73 49 6E 47    ntrol.AddressInG
027900:  0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 28 69 3E    ..BEGIN...IF (i>
027910:  3D 27 20 27 29 20 41 4E 44 20 28 69 3C 3D 27 7A    =' ') AND (i<='z
027920:  27 29 20 54 48 45 4E 20 54 65 72 6D 69 6E 61 6C    ') THEN Terminal
027930:  2E 57 72 69 74 65 28 69 29 0D 0A 09 45 4C 53 45    .Write(i)...ELSE
027940:  20 0D 0A 09 09 54 65 72 6D 69 6E 61 6C 2E 57 72     ....Terminal.Wr
027950:  69 74 65 28 27 3C 27 29 3B 0D 0A 09 09 57 72 69    ite('<');....Wri
027960:  74 65 48 65 78 28 4F 52 44 28 69 29 2C 33 29 3B    teHex(ORD(i),3);
027970:  0D 0A 09 09 54 65 72 6D 69 6E 61 6C 2E 57 72 69    ....Terminal.Wri
027980:  74 65 28 27 3E 27 29 3B 0D 0A 09 09 45 4E 44 3B    te('>');....END;
027990:  0D 0A 09 45 4E 44 20 57 72 69 74 65 3B 2A 29 0D    ...END Write;*).
0279A0:  0A 50 52 4F 43 45 44 55 52 45 20 57 72 69 74 65    .PROCEDURE Write
0279B0:  28 62 3A 43 48 41 52 29 3B 0D 0A 56 41 52 09 69    (b:CHAR);..VAR.i
0279C0:  3A 49 4E 54 45 47 45 52 3B 09 28 2A 6E 65 65 64    :INTEGER;.(*need
0279D0:  65 64 20 74 6F 20 61 76 6F 69 64 20 63 6F 6E 66    ed to avoid conf
0279E0:  6C 69 63 74 20 77 69 74 68 20 67 6C 6F 62 61 6C    lict with global
0279F0:  2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4F    *)..BEGIN...IF O
027A00:  75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45    utputEnabled THE
027A10:  4E 0D 0A 09 09 69 3A 3D 42 44 4F 53 28 77 63 63    N....i:=BDOS(wcc
027A20:  66 63 2C 57 4F 52 44 28 62 29 29 0D 0A 09 09 45    fc,WORD(b))....E
027A30:  4E 44 3B 0D 0A 09 45 4E 44 20 57 72 69 74 65 3B    ND;...END Write;
027A40:  0D 0A 50 52 4F 43 45 44 55 52 45 20 57 72 69 74    ..PROCEDURE Writ
027A50:  65 41 73 63 69 69 28 69 3A 49 4E 54 45 47 45 52    eAscii(i:INTEGER
027A60:  29 3B 0D 0A 56 41 52 09 54 65 78 74 3A 41 52 52    );..VAR.Text:ARR
027A70:  41 59 5B 31 2E 2E 33 5D 20 4F 46 20 43 48 41 52    AY[1..3] OF CHAR
027A80:  3B 0D 0A 09 6A 2C 6B 3A 49 4E 54 45 47 45 52 3B    ;...j,k:INTEGER;
027A90:  0D 0A 42 45 47 49 4E 0D 0A 09 6A 3A 3D 33 3B 0D    ..BEGIN...j:=3;.
027AA0:  0A 09 57 48 49 4C 45 20 28 6A 3E 30 29 20 41 4E    ..WHILE (j>0) AN
027AB0:  44 20 28 69 3C 3E 30 29 20 44 4F 0D 0A 09 09 6B    D (i<>0) DO....k
027AC0:  3A 3D 69 20 44 49 56 20 31 30 3B 0D 0A 09 09 54    :=i DIV 10;....T
027AD0:  65 78 74 5B 6A 5D 3A 3D 43 48 52 28 69 2D 31 30    ext[j]:=CHR(i-10
027AE0:  2A 6B 2B 4F 52 44 28 27 30 27 29 29 3B 0D 0A 09    *k+ORD('0'));...
027AF0:  09 69 3A 3D 6B 3B 0D 0A 09 09 6A 3A 3D 6A 2D 31    .i:=k;....j:=j-1
027B00:  72 61 70 68 20 54 48 45 4E 0D 0A 09 09 09 49 46    raph THEN.....IF
027B10:  20 73 3D 53 74 61 72 74 47 72 61 70 68 20 54 48     s=StartGraph TH
027B20:  45 4E 20 49 6E 47 72 61 70 68 3A 3D 54 52 55 45    EN InGraph:=TRUE
027B30:  0D 0A 09 09 09 45 4C 53 49 46 20 73 3D 45 6E 64    .....ELSIF s=End
027B40:  47 72 61 70 68 20 54 48 45 4E 20 49 6E 47 72 61    Graph THEN InGra
027B50:  70 68 3A 3D 46 41 4C 53 45 20 45 4E 44 3B 0D 0A    ph:=FALSE END;..
027B60:  09 09 09 45 4E 44 3B 0D 0A 09 45 4C 53 45 20 20    ...END;...ELSE  
027B70:  4D 61 64 65 43 68 61 6E 67 65 3A 3D 46 41 4C 53    MadeChange:=FALS
027B80:  45 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44    E;....END;...END
027B90:  20 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 3B 0D     ScreenControl;.
027BA0:  0A 50 52 4F 43 45 44 55 52 45 20 49 6E 42 6F 75    .PROCEDURE InBou
027BB0:  6E 64 28 78 2C 79 3A 43 41 52 44 49 4E 41 4C 3B    nd(x,y:CARDINAL;
027BC0:  63 68 3A 45 64 69 74 73 29 3B 0D 0A 42 45 47 49    ch:Edits);..BEGI
027BD0:  4E 0D 0A 09 49 46 20 09 28 78 3E 3D 4C 6F 77 78    N...IF .(x>=Lowx
027BE0:  29 20 41 4E 44 20 28 78 3C 3D 48 69 67 68 78 29    ) AND (x<=Highx)
027BF0:  0D 0A 09 20 20 41 4E 44 09 28 79 3E 3D 4C 6F 77    ...  AND.(y>=Low
027C00:  79 29 20 41 4E 44 20 28 79 3C 3D 48 69 67 68 79    y) AND (y<=Highy
027C10:  29 20 54 48 45 4E 20 0D 0A 09 09 53 63 72 65 65    ) THEN ....Scree
027C20:  6E 43 6F 6E 74 72 6F 6C 28 63 68 29 3B 0D 0A 09    nControl(ch);...
027C30:  09 45 4E 44 0D 0A 09 45 4E 44 20 49 6E 42 6F 75    .END...END InBou
027C40:  6E 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20    nd;..PROCEDURE  
027C50:  44 72 61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32    DrawBox(x1,y1,x2
027C60:  2C 79 32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A    ,y2:CARDINAL);..
027C70:  0D 0A 28 2A 09 09 64 72 61 77 20 61 20 62 6F 78    ..(*..draw a box
027C80:  20 66 6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E     for a window on
027C90:  20 74 68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09     the screen.....
027CA0:  09 78 31 2C 79 31 20 20 69 73 20 74 68 65 20 6C    .x1,y1  is the l
027CB0:  6F 77 65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72    ower left corner
027CC0:  0D 0A 09 09 78 32 2C 79 32 20 20 69 73 20 75 70    ....x2,y2  is up
027CD0:  70 65 72 20 72 69 67 68 74 20 63 6F 72 6E 65 72    per right corner
027CE0:  2A 29 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E    *)..VAR.i:CARDIN
027CF0:  41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20    AL;..BEGIN..    
027D00:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 46 4F 52 20    ;....END;...FOR 
027D10:  6B 3A 3D 6A 2B 31 20 54 4F 20 33 20 44 4F 20 57    k:=j+1 TO 3 DO W
027D20:  72 69 74 65 28 54 65 78 74 5B 6B 5D 29 20 45 4E    rite(Text[k]) EN
027D30:  44 3B 0D 0A 09 45 4E 44 20 57 72 69 74 65 41 73    D;...END WriteAs
027D40:  63 69 69 3B 20 0D 0A 50 52 4F 43 45 44 55 52 45    cii; ..PROCEDURE
027D50:  20 47 6F 74 6F 78 79 28 78 2C 79 3A 43 41 52 44     Gotoxy(x,y:CARD
027D60:  49 4E 41 4C 29 3B 09 09 0D 0A 0D 0A 28 2A 09 09    INAL);......(*..
027D70:  50 6F 73 69 74 69 6F 6E 20 74 6F 20 67 69 76 65    Position to give
027D80:  6E 20 63 6F 6F 72 64 69 6E 61 74 65 73 0D 0A 09    n coordinates...
027D90:  09 74 6F 70 20 6C 65 66 74 20 69 73 20 61 6C 77    .top left is alw
027DA0:  61 79 73 20 30 2C 30 20 0D 0A 0D 0A 09 09 78 20    ays 0,0 ......x 
027DB0:  69 73 20 63 6F 6C 75 6D 6E 2C 20 79 20 69 73 20    is column, y is 
027DC0:  72 6F 77 0D 0A 0D 0A 09 09 41 20 27 53 74 61 6E    row......A 'Stan
027DD0:  64 61 72 64 27 20 53 63 72 65 65 6E 20 69 73 20    dard' Screen is 
027DE0:  38 30 20 62 79 20 32 34 2E 20 54 68 65 20 6C 69    80 by 24. The li
027DF0:  6D 69 74 20 69 73 20 73 65 74 20 62 79 0D 0A 09    mit is set by...
027E00:  09 74 68 65 20 74 65 72 6D 69 6E 61 6C 20 64 65    .the terminal de
027E10:  66 69 6E 69 74 69 6F 6E 20 66 69 6C 65 09 2A 29    finition file.*)
027E20:  0D 0A 56 41 52 09 69 2C 6A 3A 49 4E 54 45 47 45    ..VAR.i,j:INTEGE
027E30:  52 3B 0D 0A 09 69 6E 67 3A 42 4F 4F 4C 45 41 4E    R;...ing:BOOLEAN
027E40:  3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46    ;..BEGIN..    IF
027E50:  20 41 63 74 69 76 65 20 41 4E 44 20 4F 75 74 70     Active AND Outp
027E60:  75 74 45 6E 61 62 6C 65 64 20 54 48 45 4E 0D 0A    utEnabled THEN..
027E70:  09 57 49 54 48 20 43 6F 6E 74 72 6F 6C 20 44 4F    .WITH Control DO
027E80:  0D 0A 09 09 69 6E 67 3A 3D 49 6E 47 72 61 70 68    ....ing:=InGraph
027E90:  3B 0D 0A 09 09 49 46 20 49 6E 47 72 61 70 68 20    ;....IF InGraph 
027EA0:  54 48 45 4E 20 53 63 72 65 65 6E 43 6F 6E 74 72    THEN ScreenContr
027EB0:  6F 6C 28 45 6E 64 47 72 61 70 68 29 20 45 4E 44    ol(EndGraph) END
027EC0:  3B 0D 0A 09 09 53 63 72 65 65 6E 43 6F 6E 74 72    ;....ScreenContr
027ED0:  6F 6C 28 53 74 61 72 74 78 79 29 3B 0D 0A 09 09    ol(Startxy);....
027EE0:  49 46 20 43 6F 6C 75 6D 6E 46 69 72 73 74 20 54    IF ColumnFirst T
027EF0:  48 45 4E 0D 0A 09 09 09 69 3A 3D 78 2B 58 59 4F    HEN.....i:=x+XYO
027F00:  49 46 20 41 63 74 69 76 65 20 41 4E 44 20 4F 75    IF Active AND Ou
027F10:  74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45 4E    tputEnabled THEN
027F20:  0D 0A 09 57 49 54 48 20 43 6F 6E 74 72 6F 6C 20    ...WITH Control 
027F30:  44 4F 0D 0A 09 09 47 6F 74 6F 78 79 28 78 31 2C    DO....Gotoxy(x1,
027F40:  79 31 29 3B 0D 0A 09 09 53 63 72 65 65 6E 43 6F    y1);....ScreenCo
027F50:  6E 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68    ntrol(StartGraph
027F60:  29 3B 0D 0A 09 09 49 6E 42 6F 75 6E 64 28 78 31    );....InBound(x1
027F70:  2C 79 31 2C 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A    ,y1,CornerLL);..
027F80:  09 09 46 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F    ..FOR i:=x1+1 TO
027F90:  20 78 32 2D 31 20 44 4F 20 49 6E 42 6F 75 6E 64     x2-1 DO InBound
027FA0:  28 69 2C 79 31 2C 48 6F 72 69 7A 6F 6E 74 61 6C    (i,y1,Horizontal
027FB0:  29 20 45 4E 44 3B 0D 0A 09 09 49 6E 42 6F 75 6E    ) END;....InBoun
027FC0:  64 28 78 32 2C 79 31 2C 43 6F 72 6E 65 72 4C 52    d(x2,y1,CornerLR
027FD0:  29 3B 0D 0A 09 09 47 6F 74 6F 78 79 28 78 31 2C    );....Gotoxy(x1,
027FE0:  79 32 29 3B 0D 0A 09 09 49 6E 42 6F 75 6E 64 28    y2);....InBound(
027FF0:  78 31 2C 79 32 2C 43 6F 72 6E 65 72 55 4C 29 3B    x1,y2,CornerUL);
028000:  0D 0A 09 09 46 4F 52 20 69 3A 3D 78 31 2B 31 20    ....FOR i:=x1+1 
028010:  54 4F 20 78 32 2D 31 20 44 4F 20 49 6E 42 6F 75    TO x2-1 DO InBou
028020:  6E 64 28 69 2C 79 32 2C 48 6F 72 69 7A 6F 6E 74    nd(i,y2,Horizont
028030:  61 6C 29 20 45 4E 44 3B 0D 0A 09 09 49 6E 42 6F    al) END;....InBo
028040:  75 6E 64 28 78 32 2C 79 32 2C 43 6F 72 6E 65 72    und(x2,y2,Corner
028050:  55 52 29 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 79    UR);....FOR i:=y
028060:  32 2B 31 20 54 4F 20 79 31 2D 31 20 20 44 4F 0D    2+1 TO y1-1  DO.
028070:  0A 09 09 09 47 6F 74 6F 78 79 28 78 32 2C 69 29    ....Gotoxy(x2,i)
028080:  3B 0D 0A 09 09 09 49 6E 42 6F 75 6E 64 28 78 32    ;.....InBound(x2
028090:  2C 69 2C 56 65 72 74 69 63 61 6C 29 3B 0D 0A 09    ,i,Vertical);...
0280A0:  09 09 45 4E 44 3B 0D 0A 09 09 46 4F 52 20 69 3A    ..END;....FOR i:
0280B0:  3D 79 32 2B 31 20 54 4F 20 79 31 2D 31 20 44 4F    =y2+1 TO y1-1 DO
0280C0:  0D 0A 09 09 09 47 6F 74 6F 78 79 28 78 31 2C 69    .....Gotoxy(x1,i
0280D0:  29 3B 0D 0A 09 09 09 49 6E 42 6F 75 6E 64 28 78    );.....InBound(x
0280E0:  31 2C 69 2C 56 65 72 74 69 63 61 6C 29 3B 0D 0A    1,i,Vertical);..
0280F0:  09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28    ...END;....END;(
028100:  66 66 73 65 74 3B 0D 0A 09 09 09 6A 3A 3D 79 2B    ffset;.....j:=y+
028110:  58 59 4F 66 66 73 65 74 3B 0D 0A 09 09 45 4C 53    XYOffset;....ELS
028120:  45 0D 0A 09 09 09 69 3A 3D 79 2B 58 59 4F 66 66    E.....i:=y+XYOff
028130:  73 65 74 3B 0D 0A 09 09 09 6A 3A 3D 78 2B 58 59    set;.....j:=x+XY
028140:  4F 66 66 73 65 74 3B 0D 0A 09 09 09 45 4E 44 3B    Offset;.....END;
028150:  0D 0A 09 09 49 46 20 41 73 63 69 69 20 54 48 45    ....IF Ascii THE
028160:  4E 20 57 72 69 74 65 41 73 63 69 69 28 69 29 0D    N WriteAscii(i).
028170:  0A 09 09 45 4C 53 45 20 57 72 69 74 65 28 43 48    ...ELSE Write(CH
028180:  52 28 69 29 29 20 45 4E 44 3B 0D 0A 09 09 53 63    R(i)) END;....Sc
028190:  72 65 65 6E 43 6F 6E 74 72 6F 6C 28 4D 69 64 64    reenControl(Midd
0281A0:  6C 65 58 59 29 3B 0D 0A 09 09 49 46 20 41 73 63    leXY);....IF Asc
0281B0:  69 69 20 54 48 45 4E 20 57 72 69 74 65 41 73 63    ii THEN WriteAsc
0281C0:  69 69 28 6A 29 0D 0A 09 09 45 4C 53 45 20 57 72    ii(j)....ELSE Wr
0281D0:  69 74 65 28 43 48 52 28 6A 29 29 20 45 4E 44 3B    ite(CHR(j)) END;
0281E0:  0D 0A 09 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F    ....ScreenContro
0281F0:  6C 28 45 6E 64 58 59 29 3B 0D 0A 09 09 45 4E 44    l(EndXY);....END
028200:  3B 20 28 2A 57 49 54 48 2A 29 0D 0A 09 49 46 20    ; (*WITH*)...IF 
028210:  69 6E 67 20 54 48 45 4E 20 53 63 72 65 65 6E 43    ing THEN ScreenC
028220:  6F 6E 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70    ontrol(StartGrap
028230:  68 29 20 45 4E 44 3B 0D 0A 09 45 4E 44 28 2A 49    h) END;...END(*I
028240:  46 2A 29 0D 0A 20 20 20 20 45 4E 44 20 47 6F 74    F*)..    END Got
028250:  6F 78 79 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52    oxy;....PROCEDUR
028260:  45 20 4C 6F 61 64 54 65 72 6D 43 6F 64 65 28 66    E LoadTermCode(f
028270:  69 6C 65 6E 61 6D 65 3A 46 69 6C 65 4E 61 6D 65    ilename:FileName
028280:  29 3B 0D 0A 56 41 52 09 66 6E 3A 46 49 4C 45 3B    );..VAR.fn:FILE;
028290:  0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52    ...reply:INTEGER
0282A0:  3B 0D 0A 0D 0A 28 2A 09 09 64 65 66 69 6E 65 20    ;....(*..define 
0282B0:  61 20 74 65 6D 70 6F 72 61 72 79 20 61 72 65 61    a temporary area
0282C0:  20 66 6F 72 20 72 65 61 64 69 6E 67 20 6F 66 20     for reading of 
0282D0:  66 69 6C 65 0D 0A 09 09 69 74 20 6D 75 73 74 20    file....it must 
0282E0:  62 65 20 65 71 75 61 6C 20 69 6E 20 73 69 7A 65    be equal in size
0282F0:  20 74 6F 20 74 68 65 20 73 69 7A 65 20 6F 66 20     to the size of 
028300:  2A 57 49 54 48 20 43 6F 6E 74 72 6F 6C 2A 29 0D    *WITH Control*).
028310:  0A 09 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C    ...ScreenControl
028320:  28 45 6E 64 47 72 61 70 68 29 3B 0D 0A 09 45 4E    (EndGraph);...EN
028330:  44 3B 20 28 2A 49 46 20 41 63 74 69 76 65 2A 29    D; (*IF Active*)
028340:  0D 0A 20 20 20 20 45 4E 44 20 44 72 61 77 42 6F    ..    END DrawBo
028350:  78 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C    x;..PROCEDURE Cl
028360:  69 70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43    ip(x1,y1,x2,y2:C
028370:  41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E    ARDINAL);..BEGIN
028380:  0D 0A 09 4C 6F 77 78 3A 3D 78 31 3B 0D 0A 09 48    ...Lowx:=x1;...H
028390:  69 67 68 78 3A 3D 78 32 3B 0D 0A 09 4C 6F 77 79    ighx:=x2;...Lowy
0283A0:  3A 3D 79 32 3B 0D 0A 09 48 69 67 68 79 3A 3D 79    :=y2;...Highy:=y
0283B0:  31 3B 0D 0A 09 45 4E 44 20 43 6C 69 70 3B 0D 0A    1;...END Clip;..
0283C0:  50 52 4F 43 45 44 55 52 45 20 53 63 72 6F 6C 6C    PROCEDURE Scroll
0283D0:  57 69 6E 64 6F 77 55 70 28 53 74 61 72 74 6F 66    WindowUp(Startof
0283E0:  57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 69 6E 64    Window,EndofWind
0283F0:  6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 42    ow:CARDINAL);..B
028400:  45 47 49 4E 0D 0A 09 47 6F 74 6F 78 79 28 30 2C    EGIN...Gotoxy(0,
028410:  45 6E 64 6F 66 57 69 6E 64 6F 77 29 3B 0D 0A 09    EndofWindow);...
028420:  53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 44 65    ScreenControl(De
028430:  6C 4C 69 6E 65 29 3B 0D 0A 09 47 6F 74 6F 78 79    lLine);...Gotoxy
028440:  28 30 2C 53 74 61 72 74 6F 66 57 69 6E 64 6F 77    (0,StartofWindow
028450:  29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72    );...ScreenContr
028460:  6F 6C 28 49 6E 73 4C 69 6E 65 29 3B 0D 0A 09 45    ol(InsLine);...E
028470:  4E 44 20 53 63 72 6F 6C 6C 57 69 6E 64 6F 77 55    ND ScrollWindowU
028480:  70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63    p;..PROCEDURE Sc
028490:  72 6F 6C 6C 57 69 6E 64 6F 77 44 6F 77 6E 28 53    rollWindowDown(S
0284A0:  74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64    tartofWindow,End
0284B0:  6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41    ofWindow:CARDINA
0284C0:  4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74    L);..BEGIN...Got
0284D0:  6F 78 79 28 30 2C 53 74 61 72 74 6F 66 57 69 6E    oxy(0,StartofWin
0284E0:  64 6F 77 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F    dow);...ScreenCo
0284F0:  6E 74 72 6F 6C 28 44 65 6C 4C 69 6E 65 29 3B 0D    ntrol(DelLine);.
028500:  63 6F 6E 74 72 6F 6C 2C 20 70 61 64 64 65 64 0D    control, padded.
028510:  0A 09 09 6F 75 74 20 74 6F 20 61 20 6D 75 6C 74    ...out to a mult
028520:  69 70 6C 65 20 6F 66 20 31 32 38 20 62 79 74 65    iple of 128 byte
028530:  73 2A 29 0D 0A 0D 0A 09 62 6C 6F 63 6B 3A 41 52    s*).....block:AR
028540:  52 41 59 5B 30 2E 2E 31 32 38 2A 28 53 49 5A 45    RAY[0..128*(SIZE
028550:  28 43 6F 6E 74 72 6F 6C 29 20 44 49 56 20 31 32    (Control) DIV 12
028560:  38 29 2B 31 32 37 5D 20 4F 46 20 43 48 41 52 3B    8)+127] OF CHAR;
028570:  0D 0A 0D 0A 28 2A 09 09 4C 6F 61 64 20 74 68 65    ....(*..Load the
028580:  20 74 65 72 6D 69 6E 61 6C 20 64 65 66 69 6E 69     terminal defini
028590:  74 69 6F 6E 20 66 6F 72 20 74 68 65 20 63 75 72    tion for the cur
0285A0:  72 65 6E 74 20 74 65 72 6D 69 6E 61 6C 0D 0A 0D    rent terminal...
0285B0:  0A 09 09 66 69 6C 65 6E 61 6D 65 20 69 73 20 74    ...filename is t
0285C0:  68 65 20 6E 61 6D 65 20 6F 66 20 74 68 65 20 66    he name of the f
0285D0:  69 6C 65 20 74 6F 20 72 65 61 64 0D 0A 0D 0A 09    ile to read.....
0285E0:  09 4E 6F 72 6D 61 6C 6C 79 2C 20 77 68 65 6E 20    .Normally, when 
0285F0:  74 68 65 20 70 72 6F 67 72 61 6D 20 69 73 20 6C    the program is l
028600:  6F 61 64 65 64 2C 20 74 68 65 20 66 69 6C 65 0D    oaded, the file.
028610:  0A 09 09 27 54 45 52 4D 49 4E 41 4C 2E 43 4F 44    ...'TERMINAL.COD
028620:  27 20 69 73 20 6C 6F 61 64 65 64 20 66 72 6F 6D    ' is loaded from
028630:  20 74 68 65 20 6C 6F 67 67 65 64 20 69 6E 20 64     the logged in d
028640:  69 73 63 0D 0A 09 09 54 68 69 73 20 72 6F 75 74    isc....This rout
028650:  69 6E 65 20 6F 6E 6C 79 20 6E 65 65 64 73 20 74    ine only needs t
028660:  6F 20 62 65 20 75 73 65 64 20 69 66 20 74 68 61    o be used if tha
028670:  74 0D 0A 09 09 66 69 6C 65 20 69 73 20 6E 6F 74    t....file is not
028680:  20 74 68 65 20 6F 6E 65 20 74 6F 20 75 73 65 20     the one to use 
028690:  28 65 67 2C 20 74 6F 20 73 77 61 70 20 73 63 72    (eg, to swap scr
0286A0:  65 65 6E 73 2A 29 20 0D 0A 0D 0A 42 45 47 49 4E    eens*) ....BEGIN
0286B0:  0D 0A 09 4C 6F 6F 6B 75 70 28 66 6E 2C 66 69 6C    ...Lookup(fn,fil
0286C0:  65 6E 61 6D 65 2C 72 65 70 6C 79 29 3B 0D 0A 09    ename,reply);...
0286D0:  49 46 20 72 65 70 6C 79 3C 30 20 54 48 45 4E 20    IF reply<0 THEN 
0286E0:  41 63 74 69 76 65 3A 3D 46 41 4C 53 45 0D 0A 09    Active:=FALSE...
0286F0:  45 4C 53 45 0D 0A 09 09 52 65 61 64 42 6C 6F 63    ELSE....ReadBloc
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:  0A 09 47 6F 74 6F 78 79 28 30 2C 45 6E 64 6F 66    ..Gotoxy(0,Endof
028810:  57 69 6E 64 6F 77 29 3B 20 20 20 0D 0A 09 53 63    Window);   ...Sc
028820:  72 65 65 6E 43 6F 6E 74 72 6F 6C 28 49 6E 73 4C    reenControl(InsL
028830:  69 6E 65 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F    ine);...ScreenCo
028840:  6E 74 72 6F 6C 28 44 65 6C 45 6F 6C 29 3B 20 20    ntrol(DelEol);  
028850:  20 0D 0A 09 45 4E 44 20 53 63 72 6F 6C 6C 57 69     ...END ScrollWi
028860:  6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 28 2A 09    ndowDown;....(*.
028870:  43 75 72 73 6F 72 20 62 6C 69 6E 6B 20 72 6F 75    Cursor blink rou
028880:  74 69 6E 65 20 2D 20 6F 6E 6C 79 20 73 75 70 70    tine - only supp
028890:  6F 72 74 65 64 20 69 6E 20 6D 65 6D 6F 72 79 20    orted in memory 
0288A0:  6D 61 70 70 65 64 0D 0A 09 76 65 72 73 69 6F 6E    mapped...version
0288B0:  20 6F 66 20 73 63 72 65 65 6E 69 6F 2A 29 0D 0A     of screenio*)..
0288C0:  50 52 4F 43 45 44 55 52 45 20 4F 75 74 70 75 74    PROCEDURE Output
0288D0:  54 6F 53 63 72 65 65 6E 28 4F 6E 3A 42 4F 4F 4C    ToScreen(On:BOOL
0288E0:  45 41 4E 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4F    EAN);..BEGIN...O
0288F0:  75 74 70 75 74 45 6E 61 62 6C 65 64 3A 3D 4F 6E    utputEnabled:=On
028900:  0D 0A 09 45 4E 44 20 4F 75 74 70 75 74 54 6F 53    ...END OutputToS
028910:  63 72 65 65 6E 3B 09 0D 0A 0D 0A 42 45 47 49 4E    creen;.....BEGIN
028920:  09 28 2A 49 6E 69 74 69 61 6C 69 73 61 74 69 6F    .(*Initialisatio
028930:  6E 20 70 61 72 74 2A 29 0D 0A 09 43 68 61 72 52    n part*)...CharR
028940:  6F 75 74 69 6E 65 3A 3D 57 72 69 74 65 3B 0D 0A    outine:=Write;..
028950:  09 43 68 61 72 45 6E 61 62 6C 65 64 3A 3D 54 52    .CharEnabled:=TR
028960:  55 45 3B 09 0D 0A 0D 0A 09 49 6E 47 72 61 70 68    UE;......InGraph
028970:  3A 3D 46 41 4C 53 45 3B 0D 0A 09 4F 75 74 70 75    :=FALSE;...Outpu
028980:  74 45 6E 61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D    tEnabled:=TRUE;.
028990:  0A 09 4C 6F 61 64 54 65 72 6D 43 6F 64 65 28 27    ..LoadTermCode('
0289A0:  43 4F 4E 54 52 4F 4C 2E 44 41 54 27 29 3B 0D 0A    CONTROL.DAT');..
0289B0:  09 4C 6F 77 78 3A 3D 30 3B 4C 6F 77 79 3A 3D 30    .Lowx:=0;Lowy:=0
0289C0:  3B 0D 0A 09 48 69 67 68 78 3A 3D 39 39 39 3B 48    ;...Highx:=999;H
0289D0:  69 67 68 79 3A 3D 39 39 39 3B 0D 0A 09 53 63 72    ighy:=999;...Scr
0289E0:  65 65 6E 57 69 64 74 68 3A 3D 43 6F 6E 74 72 6F    eenWidth:=Contro
0289F0:  6C 2E 53 63 72 65 65 6E 57 69 64 74 68 3B 0D 0A    l.ScreenWidth;..
028A00:  4F 52 44 28 27 41 27 29 2D 31 29 3B 0D 0A 09 09    ORD('A')-1);....
028A10:  49 4E 43 28 69 29 3B 0D 0A 09 09 63 6F 6D 6D 61    INC(i);....comma
028A20:  6E 64 5B 69 5D 3A 3D 27 3A 27 3B 0D 0A 09 09 49    nd[i]:=':';....I
028A30:  4E 43 28 69 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    NC(i);....END;..
028A40:  09 57 48 49 4C 45 20 28 6A 3C 3D 38 29 20 41 4E    .WHILE (j<=8) AN
028A50:  44 20 28 66 63 62 31 2E 66 63 62 66 6E 5B 6A 5D    D (fcb1.fcbfn[j]
028A60:  3C 3E 27 20 27 29 20 44 4F 0D 0A 09 09 63 6F 6D    <>' ') DO....com
028A70:  6D 61 6E 64 5B 69 5D 3A 3D 66 63 62 31 2E 66 63    mand[i]:=fcb1.fc
028A80:  62 66 6E 5B 6A 5D 3B 0D 0A 09 09 49 4E 43 28 69    bfn[j];....INC(i
028A90:  29 3B 0D 0A 09 09 49 4E 43 28 6A 29 3B 0D 0A 09    );....INC(j);...
028AA0:  09 45 4E 44 3B 0D 0A 09 6A 3A 3D 31 3B 0D 0A 09    .END;...j:=1;...
028AB0:  63 6F 6D 6D 61 6E 64 5B 69 5D 3A 3D 27 2E 27 3B    command[i]:='.';
028AC0:  0D 0A 09 49 4E 43 28 69 29 3B 0D 0A 09 57 48 49    ...INC(i);...WHI
028AD0:  4C 45 20 28 6A 3C 3D 33 29 20 41 4E 44 20 28 66    LE (j<=3) AND (f
028AE0:  2E 66 63 62 66 74 5B 6A 5D 3C 3E 27 20 27 29 20    .fcbft[j]<>' ') 
028AF0:  44 4F 0D 0A 09 09 63 6F 6D 6D 61 6E 64 5B 69 5D    DO....command[i]
028B00:  3A 3D 66 63 62 31 2E 66 63 62 66 74 5B 6A 5D 3B    :=fcb1.fcbft[j];
028B10:  0D 0A 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 49    ....INC(i);....I
028B20:  4E 43 28 6A 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A    NC(j);....END;..
028B30:  09 6A 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 28    .j:=0;...WHILE (
028B40:  6A 3C 3D 48 49 47 48 28 70 72 6F 67 6E 61 6D 65    j<=HIGH(progname
028B50:  29 29 20 41 4E 44 20 28 70 72 6F 67 6E 61 6D 65    )) AND (progname
028B60:  5B 6A 5D 3C 3E 27 5B 27 29 20 44 4F 20 49 4E 43    [j]<>'[') DO INC
028B70:  28 6A 29 20 45 4E 44 3B 0D 0A 09 49 46 20 28 6A    (j) END;...IF (j
028B80:  3C 48 49 47 48 28 70 72 6F 67 6E 61 6D 65 29 29    <HIGH(progname))
028B90:  20 54 48 45 4E 20 0D 0A 09 09 63 6F 6D 6D 61 6E     THEN ....comman
028BA0:  64 5B 69 5D 3A 3D 27 5B 27 3B 0D 0A 09 09 49 4E    d[i]:='[';....IN
028BB0:  43 28 69 29 3B 0D 0A 09 09 63 6F 6D 6D 61 6E 64    C(i);....command
028BC0:  5B 69 5D 3A 3D 70 72 6F 67 6E 61 6D 65 5B 6A 2B    [i]:=progname[j+
028BD0:  31 5D 3B 0D 0A 09 09 49 4E 43 28 69 29 3B 0D 0A    1];....INC(i);..
028BE0:  09 09 45 4E 44 3B 0D 0A 09 63 6F 6D 6D 61 6E 64    ..END;...command
028BF0:  6C 65 6E 3A 3D 69 3B 0D 0A 09 66 2E 66 63 62 66    len:=i;...f.fcbf
028C00:  09 53 63 72 65 65 6E 44 65 70 74 68 3A 3D 43 6F    .ScreenDepth:=Co
028C10:  6E 74 72 6F 6C 2E 53 63 72 65 65 6E 44 65 70 74    ntrol.ScreenDept
028C20:  68 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72    h;...ScreenContr
028C30:  6F 6C 28 43 6C 65 61 72 53 63 72 65 65 6E 29 3B    ol(ClearScreen);
028C40:  0D 0A 09 45 4E 44 20 53 63 72 65 65 6E 49 4F 2E    ...END ScreenIO.
028C50:  0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
028C60:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
028C70:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
028C80:  20 54 50 41 27 73 2E 20 54 68 65 20 73 61 6D 65     TPA's. The same
028C90:  0D 0A 09 74 68 69 6E 67 20 63 61 6E 20 62 65 20    ...thing can be 
028CA0:  64 6F 6E 65 20 77 69 74 68 20 6F 74 68 65 72 20    done with other 
028CB0:  6D 6F 64 75 6C 65 73 20 69 66 0D 0A 09 79 6F 75    modules if...you
028CC0:  72 20 54 50 41 20 69 73 20 74 69 67 68 74 65 72    r TPA is tighter
028CD0:  20 74 68 61 6E 20 74 68 61 74 20 6F 66 20 6D 79     than that of my
028CE0:  20 74 65 73 74 0D 0A 09 6D 61 63 68 69 6E 65 2E     test...machine.
028CF0:  0D 0A 0D 0A 09 57 68 61 74 20 68 61 73 20 62 65    .....What has be
028D00:  65 6E 20 64 6F 6E 65 20 69 73 20 74 6F 20 72 65    en done is to re
028D10:  70 6C 61 63 65 20 61 20 6C 61 72 67 65 0D 0A 09    place a large...
028D20:  73 79 6D 62 6F 6C 20 74 61 62 6C 65 20 28 74 68    symbol table (th
028D30:  61 74 20 6F 66 20 53 63 72 65 65 6E 49 4F 29 20    at of ScreenIO) 
028D40:  77 69 74 68 20 61 20 0D 0A 09 73 6D 61 6C 6C 20    with a ...small 
028D50:  73 79 6D 62 6F 6C 20 74 61 62 6C 65 20 28 74 68    symbol table (th
028D60:  69 73 20 6D 6F 64 75 6C 65 29 2E 20 54 68 69 73    is module). This
028D70:  0D 0A 09 72 65 64 75 63 65 73 20 74 68 65 20 73    ...reduces the s
028D80:  79 6D 62 6F 6C 20 74 61 62 6C 65 20 73 70 61 63    ymbol table spac
028D90:  65 20 75 73 65 64 20 62 79 20 74 68 65 0D 0A 09    e used by the...
028DA0:  63 61 6C 6C 69 6E 67 20 6D 6F 64 75 6C 65 73 2E    calling modules.
028DB0:  20 54 68 69 73 20 69 73 20 66 75 72 74 68 65 72     This is further
028DC0:  20 64 69 73 63 75 73 73 65 64 0D 0A 09 69 6E 20     discussed...in 
028DD0:  74 68 65 20 6D 61 6E 75 61 6C 2E 0D 0A 2A 29 0D    the manual...*).
028DE0:  0A 50 52 4F 43 45 44 55 52 45 20 43 6C 65 61 72    .PROCEDURE Clear
028DF0:  53 63 72 65 65 6E 3B 0D 0A 50 52 4F 43 45 44 55    Screen;..PROCEDU
028E00:  6E 3A 3D 27 20 20 20 20 20 20 20 20 27 3B 0D 0A    n:='        ';..
028E10:  09 46 4F 52 20 69 3A 3D 30 20 54 4F 20 6A 2D 31    .FOR i:=0 TO j-1
028E20:  20 44 4F 0D 0A 09 09 66 2E 66 63 62 66 6E 5B 69     DO....f.fcbfn[i
028E30:  2B 31 5D 3A 3D 70 72 6F 67 6E 61 6D 65 5B 69 5D    +1]:=progname[i]
028E40:  3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 66 2E 66 63    ;....END;...f.fc
028E50:  62 66 74 3A 3D 27 43 4F 4D 27 3B 0D 0A 09 66 2E    bft:='COM';...f.
028E60:  66 63 62 64 6E 3A 3D 30 3B 0D 0A 09 66 2E 66 63    fcbdn:=0;...f.fc
028E70:  62 65 78 3A 3D 30 3B 0D 0A 09 66 2E 66 63 62 63    bex:=0;...f.fcbc
028E80:  72 3A 3D 30 3B 0D 0A 09 4C 6F 61 64 41 6E 64 45    r:=0;...LoadAndE
028E90:  78 65 63 75 74 65 28 66 29 3B 0D 0A 09 45 4E 44    xecute(f);...END
028EA0:  20 4D 61 6B 65 43 61 6C 6C 3B 09 0D 0A 45 4E 44     MakeCall;...END
028EB0:  20 53 65 74 55 70 43 61 6C 6C 2E 0D 0A 0D 0A 1A     SetUpCall......
028EC0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
028ED0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
028EE0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
028EF0:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
028F00:  6F 75 6E 64 20 77 69 6E 64 6F 77 73 0D 0A 09 09    ound windows....
028F10:  09 49 66 20 79 6F 75 72 20 74 65 72 6D 69 6E 61    .If your termina
028F20:  6C 20 63 61 6E 20 64 6F 20 74 68 69 73 20 77 69    l can do this wi
028F30:  74 68 20 6F 72 64 69 6E 61 72 79 20 63 68 61 72    th ordinary char
028F40:  61 63 74 65 72 73 2C 0D 0A 09 09 09 73 65 74 20    acters,.....set 
028F50:  74 68 65 73 65 20 73 65 71 75 65 6E 63 65 73 20    these sequences 
028F60:  65 6D 70 74 79 20 61 6E 64 20 70 75 74 20 74 68    empty and put th
028F70:  65 20 72 65 71 75 69 72 65 64 20 0D 0A 09 09 09    e required .....
028F80:  63 68 61 72 61 63 74 65 72 73 20 69 6E 20 74 68    characters in th
028F90:  65 20 73 65 71 75 65 6E 63 65 73 20 62 65 6C 6F    e sequences belo
028FA0:  77 0D 0A 0D 0A 09 09 44 65 6C 43 68 61 72 2C 44    w......DelChar,D
028FB0:  65 6C 4C 69 6E 65 2C 49 6E 73 43 68 61 72 2C 49    elLine,InsChar,I
028FC0:  6E 73 4C 69 6E 65 2C 44 65 6C 45 6F 6C 2C 44 65    nsLine,DelEol,De
028FD0:  6C 45 6F 73 2C 43 6C 65 61 72 53 63 72 65 65 6E    lEos,ClearScreen
028FE0:  0D 0A 0D 0A 09 09 09 50 65 72 66 6F 72 6D 20 74    .......Perform t
028FF0:  68 65 20 76 61 72 69 6F 75 73 20 65 64 69 74 74    he various editt
029000:  44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C    DEFINITION MODUL
029010:  45 20 53 65 74 55 70 43 61 6C 6C 3B 0D 0A 0D 0A    E SetUpCall;....
029020:  28 2A 09 53 45 54 20 55 70 20 63 61 6C 6C 20 70    (*.SET Up call p
029030:  61 72 61 6D 65 74 65 72 73 20 66 6F 72 20 61 20    arameters for a 
029040:  70 72 6F 67 72 61 6D 20 61 6E 64 20 63 68 61 69    program and chai
029050:  6E 20 74 6F 20 69 74 0D 0A 0D 0A 09 54 68 69 73    n to it.....This
029060:  20 6D 6F 64 75 6C 65 20 69 73 20 75 73 65 64 20     module is used 
029070:  62 79 20 74 68 65 20 65 64 69 74 6F 72 20 66 6F    by the editor fo
029080:  72 20 63 61 6C 6C 69 6E 67 20 74 68 65 0D 0A 09    r calling the...
029090:  63 6F 6D 70 69 6C 65 72 73 2E 0D 0A 0D 0A 09 54    compilers......T
0290A0:  68 65 20 73 65 63 6F 6E 64 20 70 61 72 61 6D 65    he second parame
0290B0:  74 65 72 20 69 73 20 74 68 65 20 66 63 62 20 66    ter is the fcb f
0290C0:  6F 72 20 74 68 65 20 66 69 6C 65 20 77 68 69 63    or the file whic
0290D0:  68 20 69 73 20 74 6F 20 62 65 20 63 6F 6D 70 69    h is to be compi
0290E0:  6C 65 64 0D 0A 0D 0A 09 49 74 20 77 69 6C 6C 20    led.....It will 
0290F0:  62 65 20 73 65 74 20 75 70 20 6F 6E 20 74 68 65    be set up on the
029100:  20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 61 73     command line as
029110:  20 61 20 70 61 72 61 6D 65 74 65 72 2E 20 49 74     a parameter. It
029120:  20 77 69 6C 6C 20 62 65 20 66 6F 6C 6C 6F 77 65     will be followe
029130:  64 0D 0A 09 62 79 20 2F 45 20 61 73 20 61 6E 20    d...by /E as an 
029140:  6F 70 74 69 6F 6E 2E 0D 0A 0D 0A 09 49 66 20 74    option......If t
029150:  68 69 73 20 69 73 20 74 6F 6F 20 63 6C 65 76 65    his is too cleve
029160:  72 20 66 6F 72 20 79 6F 75 72 20 72 65 71 75 69    r for your requi
029170:  72 65 6D 65 6E 74 73 2C 20 79 6F 75 20 63 6F 75    rements, you cou
029180:  6C 64 20 75 73 65 20 74 68 65 20 6D 6F 64 75 6C    ld use the modul
029190:  65 0D 0A 09 27 43 68 61 69 6E 27 20 64 69 72 65    e...'Chain' dire
0291A0:  63 74 6C 79 2E 0D 0A 09 2A 29 0D 0A 0D 0A 46 52    ctly....*)....FR
0291B0:  4F 4D 20 09 43 50 4D 20 49 4D 50 4F 52 54 20 66    OM .CPM IMPORT f
0291C0:  63 62 2C 61 6C 66 61 3B 0D 0A 50 52 4F 43 45 44    cb,alfa;..PROCED
0291D0:  55 52 45 20 4D 61 6B 65 43 61 6C 6C 28 70 72 6F    URE MakeCall(pro
0291E0:  67 6E 61 6D 65 3A 41 52 52 41 59 20 4F 46 20 43    gname:ARRAY OF C
0291F0:  48 41 52 3B 56 41 52 20 66 3A 66 63 62 29 3B 0D    HAR;VAR f:fcb);.
029200:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029210:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029220:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029230:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029240:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029250:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029260:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029270:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029280:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029290:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0292A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0292B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0292C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0292D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0292E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0292F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0293A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0293B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0293C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0293D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0293E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0293F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029400:  0A 45 4E 44 20 53 65 74 55 70 43 61 6C 6C 2E 0D    .END SetUpCall..
029410:  0A 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
029420:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
029430:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
029440:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
029450:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
029460:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
029470:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
029480:  65 65 6E 29 3B 0D 0A 09 45 4E 44 20 43 6C 65 61    een);...END Clea
029490:  72 53 63 72 65 65 6E 3B 0D 0A 50 52 4F 43 45 44    rScreen;..PROCED
0294A0:  55 52 45 20 47 6F 74 6F 78 79 28 78 2C 79 3A 43    URE Gotoxy(x,y:C
0294B0:  41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E    ARDINAL);..BEGIN
0294C0:  0D 0A 09 53 63 72 65 65 6E 49 4F 2E 47 6F 74 6F    ...ScreenIO.Goto
0294D0:  78 79 28 78 2C 79 29 3B 0D 0A 09 45 4E 44 20 47    xy(x,y);...END G
0294E0:  6F 74 6F 78 79 3B 0D 0A 50 52 4F 43 45 44 55 52    otoxy;..PROCEDUR
0294F0:  45 20 52 69 6E 67 42 65 6C 6C 3B 0D 0A 42 45 47    E RingBell;..BEG
029500:  49 4E 0D 0A 09 53 63 72 65 65 6E 49 4F 2E 53 63    IN...ScreenIO.Sc
029510:  72 65 65 6E 43 6F 6E 74 72 6F 6C 28 53 63 72 65    reenControl(Scre
029520:  65 6E 49 4F 2E 52 69 6E 67 42 65 6C 6C 29 3B 0D    enIO.RingBell);.
029530:  0A 09 45 4E 44 20 52 69 6E 67 42 65 6C 6C 3B 0D    ..END RingBell;.
029540:  0A 50 52 4F 43 45 44 55 52 45 20 4F 75 74 70 75    .PROCEDURE Outpu
029550:  74 54 6F 53 63 72 65 65 6E 28 62 3A 42 4F 4F 4C    tToScreen(b:BOOL
029560:  45 41 4E 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 53    EAN);..BEGIN...S
029570:  63 72 65 65 6E 49 4F 2E 4F 75 74 70 75 74 54 6F    creenIO.OutputTo
029580:  53 63 72 65 65 6E 28 62 29 3B 0D 0A 09 45 4E 44    Screen(b);...END
029590:  20 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 3B     OutputToScreen;
0295A0:  0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44 72 61    ..PROCEDURE  Dra
0295B0:  77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C 79 32    wBox(x1,y1,x2,y2
0295C0:  3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47    :CARDINAL);..BEG
0295D0:  49 4E 0D 0A 09 53 63 72 65 65 6E 49 4F 2E 44 72    IN...ScreenIO.Dr
0295E0:  61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C 79    awBox(x1,y1,x2,y
0295F0:  32 29 3B 0D 0A 09 45 4E 44 20 44 72 61 77 42 6F    2);...END DrawBo
029600:  6D 64 20 73 63 72 65 65 6E 69 6F 2E 64 65 66 0D    md screenio.def.
029610:  0A 6D 64 20 73 63 72 65 65 6E 64 75 2E 64 65 66    .md screendu.def
029620:  0D 0A 6D 64 20 72 65 73 65 74 64 69 73 2E 64 65    ..md resetdis.de
029630:  66 0D 0A 6D 32 20 73 63 72 65 65 6E 69 6F 2E 6D    f..m2 screenio.m
029640:  6F 64 0D 0A 6D 64 20 6D 61 6B 65 65 64 69 74 2E    od..md makeedit.
029650:  64 65 66 0D 0A 6D 64 20 65 64 69 74 73 74 61 74    def..md editstat
029660:  2E 64 65 66 0D 0A 6D 32 20 6D 61 6B 65 65 64 69    .def..m2 makeedi
029670:  74 2E 6D 6F 64 0D 0A 6D 64 20 65 64 69 74 63 6F    t.mod..md editco
029680:  6E 74 2E 64 65 66 0D 0A 6D 64 20 6D 61 63 72 6F    nt.def..md macro
029690:  73 2E 64 65 66 0D 0A 6D 64 20 6D 65 6E 75 2E 64    s.def..md menu.d
0296A0:  65 66 0D 0A 6D 64 20 64 6F 6D 65 6E 75 2E 64 65    ef..md domenu.de
0296B0:  66 0D 0A 6D 64 20 65 64 69 74 64 69 73 70 2E 64    f..md editdisp.d
0296C0:  65 66 0D 0A 6D 64 20 73 65 74 75 70 63 61 6C 2E    ef..md setupcal.
0296D0:  64 65 66 0D 0A 6D 64 20 65 64 69 74 63 6F 6E 74    def..md editcont
0296E0:  2E 64 65 66 0D 0A 6D 64 20 6B 65 79 62 6F 61 72    .def..md keyboar
0296F0:  64 2E 64 65 66 0D 0A 6D 32 20 6D 65 6E 75 2E 6D    d.def..m2 menu.m
029700:  6F 64 0D 0A 6D 32 20 65 64 69 74 73 74 61 74 2E    od..m2 editstat.
029710:  6D 6F 64 0D 0A 6D 32 20 6D 61 63 72 6F 73 2E 6D    mod..m2 macros.m
029720:  6F 64 0D 0A 6D 32 20 64 6F 6D 65 6E 75 2E 6D 6F    od..m2 domenu.mo
029730:  64 0D 0A 6D 32 20 65 64 69 74 64 69 73 70 2E 6D    d..m2 editdisp.m
029740:  6F 64 0D 0A 6D 32 20 65 64 69 74 63 6F 6E 74 2E    od..m2 editcont.
029750:  6D 6F 64 0D 0A 6D 32 20 6D 65 2E 6D 6F 64 0D 0A    mod..m2 me.mod..
029760:  6D 32 20 73 63 72 65 65 6E 64 75 2E 6D 6F 64 0D    m2 screendu.mod.
029770:  0A 6D 32 20 72 65 73 65 74 64 69 73 2E 6D 6F 64    .m2 resetdis.mod
029780:  0D 0A 6D 32 20 6B 65 79 62 6F 61 72 64 2E 6D 6F    ..m2 keyboard.mo
029790:  64 0D 0A 6D 32 20 73 65 74 75 70 63 61 6C 2E 6D    d..m2 setupcal.m
0297A0:  6F 64 0D 0A 6D 32 20 6D 61 63 72 6F 73 2E 6D 6F    od..m2 macros.mo
0297B0:  64 0D 0A 6D 32 20 6D 61 6B 65 65 64 69 74 2E 6D    d..m2 makeedit.m
0297C0:  6F 64 0D 0A 6D 32 20 6D 65 2E 6D 6F 64 0D 0A 6D    od..m2 me.mod..m
0297D0:  6C 20 6D 65 2F 64 0D 0A 1A 65 2E 6D 6F 64 0D 0A    l me/d...e.mod..
0297E0:  6D 32 20 73 63 72 65 65 6E 64 75 2E 6D 6F 64 0D    m2 screendu.mod.
0297F0:  0A 6D 32 20 72 65 73 65 74 64 69 73 2E 6D 6F 64    .m2 resetdis.mod
029800:  49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D    IMPLEMENTATION M
029810:  4F 44 55 4C 45 20 53 65 74 55 70 43 61 6C 6C 3B    ODULE SetUpCall;
029820:  0D 0A 0D 0A 28 2A 09 53 45 54 20 55 70 20 63 61    ....(*.SET Up ca
029830:  6C 6C 20 70 61 72 61 6D 65 74 65 72 73 20 66 6F    ll parameters fo
029840:  72 20 61 20 70 72 6F 67 72 61 6D 20 61 6E 64 20    r a program and 
029850:  63 68 61 69 6E 20 74 6F 20 69 74 0D 0A 09 2A 29    chain to it...*)
029860:  0D 0A 46 52 4F 4D 09 43 68 61 69 6E 20 49 4D 50    ..FROM.Chain IMP
029870:  4F 52 54 20 4C 6F 61 64 41 6E 64 45 78 65 63 75    ORT LoadAndExecu
029880:  74 65 3B 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D    te;..FROM.SYSTEM
029890:  20 49 4D 50 4F 52 54 20 42 59 54 45 3B 0D 0A 28     IMPORT BYTE;..(
0298A0:  2A 09 4C 6F 77 20 63 6F 72 65 20 76 61 72 69 61    *.Low core varia
0298B0:  62 6C 65 73 2A 29 0D 0A 56 41 52 09 66 63 62 31    bles*)..VAR.fcb1
0298C0:  5B 35 63 68 5D 3A 66 63 62 3B 0D 0A 09 66 63 62    [5ch]:fcb;...fcb
0298D0:  32 5B 36 63 68 5D 3A 66 63 62 3B 0D 0A 09 63 6F    2[6ch]:fcb;...co
0298E0:  6D 6D 61 6E 64 6C 65 6E 5B 38 30 68 5D 3A 42 59    mmandlen[80h]:BY
0298F0:  54 45 3B 0D 0A 09 63 6F 6D 6D 61 6E 64 5B 38 31    TE;...command[81
029900:  68 5D 3A 41 52 52 41 59 5B 30 2E 2E 38 30 5D 20    h]:ARRAY[0..80] 
029910:  4F 46 20 43 48 41 52 3B 0D 0A 09 69 2C 6A 3A 49    OF CHAR;...i,j:I
029920:  4E 54 45 47 45 52 3B 0D 0A 50 52 4F 43 45 44 55    NTEGER;..PROCEDU
029930:  52 45 20 4D 61 6B 65 43 61 6C 6C 28 70 72 6F 67    RE MakeCall(prog
029940:  6E 61 6D 65 3A 41 52 52 41 59 20 4F 46 20 43 48    name:ARRAY OF CH
029950:  41 52 3B 56 41 52 20 66 3A 66 63 62 29 3B 0D 0A    AR;VAR f:fcb);..
029960:  42 45 47 49 4E 0D 0A 20 09 66 63 62 31 3A 3D 66    BEGIN.. .fcb1:=f
029970:  3B 0D 0A 09 66 63 62 32 2E 66 63 62 64 6E 3A 3D    ;...fcb2.fcbdn:=
029980:  30 3B 0D 0A 09 66 63 62 32 2E 66 63 62 66 6E 5B    0;...fcb2.fcbfn[
029990:  31 5D 3A 3D 27 20 27 3B 0D 0A 09 28 2A 73 65 74    1]:=' ';...(*set
0299A0:  20 75 70 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65     up command line
0299B0:  2A 29 0D 0A 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 6A    *).....i:=0;...j
0299C0:  3A 3D 31 3B 0D 0A 09 49 46 20 66 63 62 31 2E 66    :=1;...IF fcb1.f
0299D0:  63 62 64 6E 3C 3E 30 20 54 48 45 4E 0D 0A 09 09    cbdn<>0 THEN....
0299E0:  63 6F 6D 6D 61 6E 64 5B 69 5D 3A 3D 43 48 52 28    command[i]:=CHR(
0299F0:  4F 52 44 28 66 63 62 31 2E 66 63 62 64 6E 29 2B    ORD(fcb1.fcbdn)+
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:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029B10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029B20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029B30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029B40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029B50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029B60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029B70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029B80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029B90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029BA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029BB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029BC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029BD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029BE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029BF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029C00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029C10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029C20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029C30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029C40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029C50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029C60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029C70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029C80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029C90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029CA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029CB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029CC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029CD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029CE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029CF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029D00:  25 00 00 FE FE 35 26 00 33 FE 0A FF 02 00 23 00    %....5&.3.....#.
029D10:  00 FE FE 35 24 00 33 FE 02 02 02 00 01 3E 00 05    ...5$.3......>..
029D20:  FE 01 02 01 00 05 00 00 FF 02 00 0B 00 02 FF 02    ................
029D30:  00 01 00 00 05 03 12 02 00 00 00 00 00 00 00 FE    ................
029D40:  35 2F 00 33 FE 0A FF 02 00 32 00 00 FE 01 03 01    5/.3.....2......
029D50:  00 02 00 04 03 01 00 00 19 00 FF FE 33 FE 0A FF    ............3...
029D60:  02 00 30 00 00 FE FE 35 32 00 35 31 00 33 FE 0A    ..0....52.51.3..
029D70:  FF 02 00 34 00 00 FE 00 03 01 00 0A 00 00 03 01    ...4............
029D80:  00 0C 03 01 02 01 00 05 00 00 FF 02 00 0B 00 00    ................
029D90:  FF 02 00 0B 00 01 00 02 00 05 00 02 08 02 00 01    ................
029DA0:  03 00 01 03 12 02 00 00 00 01 00 00 00 01 00 02    ................
029DB0:  00 05 00 02 FF 02 00 01 05 00 01 01 02 01 00 05    ................
029DC0:  00 02 FF 02 00 01 3E 00 05 00 03 01 00 0C 03 01    ......>.........
029DD0:  02 01 00 05 00 00 FF 02 00 0B 00 00 FF 02 00 0B    ................
029DE0:  00 01 00 02 00 05 00 02 08 02 00 01 03 00 01 03    ................
029DF0:  12 02 00 00 00 01 00 00 00 01 00 02 00 05 00 02    ................
029E00:  FF 02 00 01 05 00 01 09 02 01 00 03 01 02 01 00    ................
029E10:  05 00 02 FF 02 00 01 3E 00 05 FE 33 FE 02 0F 02    .......>...3....
029E20:  00 01 3C 00 05 FE 03 12 02 00 00 00 01 00 00 00    ..<.............
029E30:  FE 33 FE FE 08 FF 02 00 00 17 00 05 FF 02 00 00    .3..............
029E40:  01 00 02 00 05 00 02 05 02 00 02 06 00 F1 FF FE    ................
029E50:  35 35 00 33 FE 0A FF 02 00 36 00 00 FE 00 03 01    55.3.....6......
029E60:  00 09 00 00 03 01 00 09 00 00 03 01 00 0C 02 01    ................
029E70:  0F 02 00 05 00 02 FF 02 00 01 3C 00 05 01 0F 02    ..........<.....
029E80:  00 05 00 02 FF 02 00 01 00 00 06 04 03 01 00 00    ................
029E90:  19 00 FF 04 03 01 00 00 1F 00 FF FE 33 FE 02 0F    ............3...
029EA0:  02 00 01 3C 00 05 FE 00 0F 02 00 00 00 01 0F 02    ...<............
029EB0:  00 05 00 02 FF 02 00 01 3C 00 05 03 12 02 00 00    ........<.......
029EC0:  00 01 00 00 00 FE 33 FE 0A FF 02 00 35 00 00 FE    ......3.....5...
029ED0:  FE 35 36 00 33 FE 0A FF 02 00 38 00 00 FE 00 03    .56.3.....8.....
029EE0:  01 00 0C 06 01 0F 02 00 05 00 02 FF 02 00 01 3C    ...............<
029EF0:  00 05 01 0F 02 00 05 00 02 FF 02 00 01 00 00 06    ................
029F00:  FF 01 0C 01 00 05 00 00 FF 02 00 0B 00 01 00 02    ................
029F10:  00 05 00 02 08 02 00 03 00 00 FF 03 12 02 00 00    ................
029F20:  00 00 00 00 00 FE 33 FE 0A FF 02 00 23 00 00 FE    ......3.....#...
029F30:  00 03 01 00 0C 03 01 08 02 00 05 00 00 FF 02 00    ................
029F40:  0B 00 01 00 02 00 05 00 02 08 02 00 03 00 00 FF    ................
029F50:  03 12 02 00 00 00 8D 00 00 00 03 10 02 00 00 00    ................
029F60:  FF FF 00 00 FE 33 FE 01 02 02 00 05 00 02 02 02    .....3..........
029F70:  00 02 04 00 0E FE 03 0A 01 00 00 00 1A 00 00 00    ................
029F80:  FE 19 2C 03 02 33 FE 0A FF 02 00 1F 00 00 FE FE    ..,..3..........
029F90:  33 FE 0A FF 02 00 22 00 00 FE FE 35 23 00 33 FE    3....."....5#.3.
029FA0:  02 08 02 00 03 00 00 FF FE 01 08 02 00 05 00 00    ................
029FB0:  FF 02 00 0B 00 01 00 02 00 05 00 02 08 02 00 03    ................
029FC0:  00 00 FF 03 12 02 00 00 00 8D 00 00 00 FE 33 FE    ..............3.
029FD0:  02 0C 02 00 03 02 00 FF FE 01 0C 01 00 09 00 03    ................
029FE0:  12 02 00 00 00 00 00 00 00 FE 35 22 00 35 21 00    ..........5".5!.
029FF0:  35 20 00 33 FE 01 02 02 00 05 00 02 02 02 00 02    5 .3............
02A000:  04 00 0E FE 01 02 01 00 05 00 00 FF 02 00 0B 00    ................
02A010:  00 FF 02 00 0B 00 01 00 02 00 05 00 02 08 02 00    ................
02A020:  03 00 00 FF 03 12 02 00 00 00 01 00 00 00 01 0C    ................
02A030:  01 00 05 00 02 FF 02 00 03 02 00 FF FE 33 FE 0A    .............3..
02A040:  FF 02 00 25 00 00 FE 00 03 01 00 0C 07 01 02 01    ...%............
02A050:  00 05 00 01 FF 02 00 05 00 02 02 02 00 02 04 00    ................
02A060:  0E 03 0A 01 00 00 00 1A 00 00 00 FE 33 FE 02 0C    ............3...
02A070:  02 00 03 02 00 FF FE 00 0C 01 00 00 00 01 0C 01    ................
02A080:  00 05 00 02 FF 02 00 03 02 00 FF 03 12 02 00 00    ................
02A090:  00 01 00 00 00 FE 35 25 00 35 24 00 2C 03 01 35    ......5%.5$.,..5
02A0A0:  1F 00 2E 1F 00 24 08 0F 35 0F 00 2F 02 00 00 0F    .....$..5../....
02A0B0:  00 02 06 00 33 FE 02 05 02 00 01 08 00 01 FE 01    ....3...........
02A0C0:  05 03 00 05 00 00 FF 02 00 0B 00 01 00 02 00 05    ................
02A0D0:  00 02 05 02 00 02 04 00 EE 03 12 02 00 00 00 28    ...............(
02A0E0:  00 00 00 FE 33 FE FE 08 FF 02 00 00 0A 00 05 FF    ....3...........
02A0F0:  02 00 00 02 00 02 00 01 08 00 01 05 FF 02 00 00    ................
02A100:  FE 33 FE 02 FF 02 00 02 08 00 00 FE 01 FF 02 00    .3..............
02A110:  08 00 03 03 01 00 00 00 01 00 00 00 FE 33 FE 0A    .............3..
02A120:  FF 02 00 20 00 00 FE FE 35 38 00 35 37 00 33 FE    ... ....58.57.3.
02A130:  FE 08 FF 02 00 00 16 00 05 FF 02 00 00 01 00 02    ................
02A140:  00 05 00 02 05 02 00 02 06 00 F1 FF FE 35 34 00    .............54.
02A150:  35 33 00 33 FE 0A FF 02 00 2F 00 00 FE FE 35 30    53.3...../....50
02A160:  00 35 23 00 33 FE FE 08 FF 02 00 00 17 00 05 FF    .5#.3...........
02A170:  02 00 00 01 00 02 00 05 00 02 05 02 00 02 06 00    ................
02A180:  F1 FF FE 33 FE 02 FF 02 00 02 08 00 00 FE 01 FF    ...3............
02A190:  02 00 08 00 03 03 01 00 00 00 00 00 00 00 FE 33    ...............3
02A1A0:  FE 0A FF 02 00 20 00 00 FE FE 35 20 00 2E 20 00    ..... ....5 .. .
02A1B0:  24 08 10 35 10 00 2F 02 00 00 10 00 00 0C 00 16    $..5../.........
02A1C0:  01 0A 00 33 FE FE 08 FF 02 00 06 01 00 05 FF 02    ...3............
02A1D0:  00 01 01 04 FF FF 05 00 01 FF 02 00 05 00 02 04    ................
02A1E0:  02 00 02 0A 00 01 05 FF 02 00 00 01 12 02 00 05    ................
02A1F0:  00 02 00 02 00 02 08 00 01 05 FF 02 00 00 01 12    ................
02A200:  02 00 05 00 02 00 02 00 02 06 00 01 05 FF 02 00    ................
02A210:  00 00 00 02 00 0B 00 00 00 02 00 0B 00 01 00 02    ................
02A220:  00 05 00 02 05 02 00 02 04 00 00 03 12 02 00 00    ................
02A230:  00 00 00 00 00 03 12 02 00 00 00 01 00 00 00 FF    ................
02A240:  FE 35 20 00 2E 20 00 24 08 11 35 11 00 2F 02 00    .5 .. .$..5../..
02A250:  00 11 00 02 06 00 36 04 01 4D 4F 44 00 33 FE 0A    ......6..MOD.3..
02A260:  FF 02 00 22 00 00 FE 00 03 01 00 0D 03 01 04 03    ..."............
02A270:  00 05 00 00 FF 02 00 0B 00 00 00 02 00 0B 00 00    ................
02A280:  00 02 00 0B 00 01 00 02 00 05 00 02 05 02 00 02    ................
02A290:  04 00 9B 03 12 02 00 00 00 00 00 00 00 03 12 02    ................
02A2A0:  00 00 00 01 00 00 00 03 12 02 00 00 00 09 00 00    ................
02A2B0:  00 03 0A 03 00 01 00 00 00 00 00 FE 33 FE 02 0F    ............3...
02A2C0:  02 00 02 06 00 00 FE 03 12 02 00 00 00 01 00 00    ................
02A2D0:  00 FE 33 FE 0A FF 02 00 20 00 00 FE FE 33 FE 0A    ..3..... ....3..
02A2E0:  FF 02 00 21 00 00 FE FE 35 22 00 36 04 02 44 45    ...!....5".6..DE
02A2F0:  46 00 33 FE 0A FF 02 00 23 00 00 FE 00 03 01 00    F.3.....#.......
02A300:  02 00 02 00 01 07 00 01 FF FE 33 FE 02 FF 02 00    ..........3.....
02A310:  02 06 00 00 FE 01 FF 02 00 08 00 01 02 01 00 05    ................
02A320:  00 02 FF 02 00 01 07 00 01 FE 33 FE 0A FF 02 00    ..........3.....
02A330:  1F 00 00 FE FE 35 1F 00 2E 1F 00 24 08 0C 35 0C    .....5.....$..5.
02A340:  00 2F 02 00 00 0C 00 02 06 00 33 FE FE 08 FF 02    ./........3.....
02A350:  00 00 16 00 05 FF 02 00 00 01 00 02 00 05 00 02    ................
02A360:  05 02 00 02 04 00 FF FF FE 33 FE 02 03 02 00 01    .........3......
02A370:  00 00 03 FE 04 03 01 00 00 18 00 FF FE 33 FE FE    .............3..
02A380:  08 FF 02 00 00 17 00 05 FF 02 00 00 01 00 02 00    ................
02A390:  05 00 02 05 02 00 02 04 00 FF FF FE 33 FE 02 FF    ............3...
02A3A0:  02 00 02 06 00 00 FE 01 FF 02 00 08 00 01 03 01    ................
02A3B0:  00 05 00 02 FF 02 00 01 00 00 03 FE 33 FE 0A FF    ............3...
02A3C0:  02 00 1F 00 00 FE FE 35 1F 00 2E 1F 00 24 08 0D    .......5.....$..
02A3D0:  35 0D 00 2F 02 00 00 0D 00 02 06 00 33 FE FE 08    5../........3...
02A3E0:  FF 02 00 00 16 00 05 FF 02 00 00 01 00 02 00 05    ................
02A3F0:  00 02 05 02 00 02 04 00 FF FF FE 33 FE 02 03 02    ...........3....
02A400:  00 01 00 00 03 FE 04 03 01 00 00 19 00 FF FE 33    ...............3
02A410:  FE FE 08 FF 02 00 00 17 00 05 FF 02 00 00 01 00    ................
02A420:  02 00 05 00 02 05 02 00 02 04 00 FF FF FE 33 FE    ..............3.
02A430:  02 FF 02 00 02 06 00 00 FE 01 FF 02 00 08 00 01    ................
02A440:  03 01 00 05 00 02 FF 02 00 01 00 00 03 FE 33 FE    ..............3.
02A450:  0A FF 02 00 1F 00 00 FE FE 35 1F 00 2E 1F 00 24    .........5.....$
02A460:  1B 06 02 00 01 1C 06 00 00 31 02 00 00 1C 06 02    .........1......
02A470:  00 08 1F 1B 05 3F 00 00 35 1F 00 2F 02 00 00 1F    .....?..5../....
02A480:  00 02 04 00 33 FE 02 FF 02 00 02 04 00 00 FE 01    ....3...........
02A490:  FF 02 00 08 00 00 03 01 00 0A 00 00 03 01 00 0C    ................
02A4A0:  03 01 02 01 00 05 00 00 FF 02 00 0B 00 00 FF 02    ................
02A4B0:  00 0B 00 01 00 02 00 05 00 02 08 02 00 01 03 00    ................
02A4C0:  01 03 12 02 00 00 00 01 00 00 00 01 00 02 00 05    ................
02A4D0:  00 02 FF 02 00 01 05 00 01 01 02 01 00 05 00 00    ................
02A4E0:  FF 02 00 0B 00 02 FF 02 00 01 00 00 05 01 0F 02    ................
02A4F0:  00 05 00 02 FF 02 00 01 3C 00 05 00 03 01 00 0C    ........<.......
02A500:  0D 03 01 04 03 00 05 00 00 FF 02 00 0B 00 00 00    ................
02A510:  02 00 0B 00 00 00 02 00 0B 00 01 00 02 00 05 00    ................
02A520:  02 05 02 00 02 04 00 9B 03 12 02 00 00 00 00 00    ................
02A530:  00 00 03 12 02 00 00 00 01 00 00 00 03 12 02 00    ................
02A540:  00 00 09 00 00 00 03 0A 03 00 02 00 00 00 00 00    ................
02A550:  FE 33 FE 02 0F 02 00 02 06 00 00 FE 03 12 02 00    .3..............
02A560:  00 00 02 00 00 00 FE 33 FE 0A FF 02 00 20 00 00    .......3..... ..
02A570:  FE FE 33 FE 0A FF 02 00 21 00 00 FE FE 35 23 00    ..3.....!....5#.
02A580:  33 FE 02 0F 02 00 02 06 00 00 FE 03 12 02 00 00    3...............
02A590:  00 00 00 00 00 FE 33 FE 0A FF 02 00 20 00 00 FE    ......3..... ...
02A5A0:  FE 35 21 00 35 20 00 2E 20 00 24 08 20 35 20 00    .5!.5 .. .$. 5 .
02A5B0:  2F 02 FC FF 20 00 00 08 00 33 FE 02 08 02 00 01    /... ....3......
02A5C0:  03 00 01 FE 01 08 02 00 05 00 00 FF 02 00 0B 00    ................
02A5D0:  01 00 02 00 05 00 02 05 02 00 02 06 00 D0 03 12    ................
02A5E0:  02 00 00 00 26 00 00 00 FE 33 FE 02 08 02 00 02    ....&....3......
02A5F0:  FC FF FF FE 03 10 02 00 00 00 FF FF 00 00 FE 33    ...............3
02A600:  FE 02 0F 02 00 02 FE FF FF FE 03 12 02 00 00 00    ................
02A610:  00 00 00 00 FE 35 22 00 33 FE 0A FF 02 00 25 00    .....5".3.....%.
02A620:  00 FE 00 03 01 00 0C 03 01 08 02 00 05 00 02 FF    ................
02A630:  02 00 01 03 00 01 03 10 02 00 00 00 FF FF 00 00    ................
02A640:  FE 33 FE 0A FF 02 00 23 00 00 FE FE 35 25 00 35    .3.....#....5%.5
02A650:  24 00 33 FE 02 0F 02 00 02 FE FF FF FE 00 0F 02    $.3.............
02A660:  00 00 00 01 0F 02 00 05 00 02 FF 02 00 02 FE FF    ................
02A670:  FF 01 12 02 00 08 00 01 0C 01 00 05 00 00 FF 02    ................
02A680:  00 0B 00 01 00 02 00 05 00 02 08 02 00 01 03 00    ................
02A690:  01 03 12 02 00 00 00 00 00 00 00 FE 33 FE 02 08    ............3...
02A6A0:  02 00 02 FC FF FF FE 01 08 02 00 05 00 02 FF 02    ................
02A6B0:  00 01 03 00 01 FE 33 FE 0A FF 02 00 27 00 00 FE    ......3.....'...
02A6C0:  00 03 01 00 0C 02 01 0F 02 00 05 00 02 FF 02 00    ................
02A6D0:  02 FE FF FF 01 0F 02 00 05 00 02 FF 02 00 02 04    ................
02A6E0:  00 2A FE 33 FE 02 08 02 00 01 03 00 01 FE 01 08    .*.3............
02A6F0:  02 00 05 00 00 FF 02 00 0B 00 01 00 02 00 05 00    ................
02A700:  03 01 02 01 00 05 00 00 FF 02 00 0B 00 00 FF 02    ................
02A710:  00 0B 00 01 00 02 00 05 00 02 08 02 00 01 03 00    ................
02A720:  01 03 12 02 00 00 00 01 00 00 00 01 00 02 00 05    ................
02A730:  00 02 FF 02 00 01 05 00 01 09 02 01 00 03 01 02    ................
02A740:  01 00 05 00 00 FF 02 00 0B 00 02 FF 02 00 01 00    ................
02A750:  00 05 01 0F 02 00 05 00 02 FF 02 00 01 3C 00 05    .............<..
02A760:  FE 33 FE 0A FF 02 00 20 00 00 FE FE 35 20 00 2E    .3..... ....5 ..
02A770:  20 00 24 08 0B 35 0B 00 2F 02 00 00 0B 00 00 0C     .$..5../.......
02A780:  00 16 01 0A 00 33 FE 02 0F 02 00 01 00 00 06 FE    .....3..........
02A790:  01 00 02 00 05 00 02 FF 02 00 02 04 00 03 FE 33    ...............3
02A7A0:  FE FE 08 FF 02 00 05 01 00 05 FF 02 00 00 01 10    ................
02A7B0:  02 00 05 00 02 04 02 00 02 0A 00 81 05 FF 02 00    ................
02A7C0:  00 02 10 02 00 01 00 00 05 05 FF 02 00 00 01 00    ................
02A7D0:  02 00 05 00 02 FF 02 00 02 04 00 03 FF FE 35 20    ..............5 
02A7E0:  00 2E 20 00 24 08 0E 35 0E 00 2F 02 00 00 0E 00    .. .$..5../.....
02A7F0:  02 08 00 33 FE 0A FF 02 00 22 00 00 FE 00 03 01    ...3....."......
02A800:  00 0C 03 01 0F 02 00 05 00 02 FF 02 00 01 00 00    ................
02A810:  06 03 12 02 00 00 00 00 00 00 00 FE 33 FE 02 FF    ............3...
02A820:  02 00 02 08 00 00 FE 01 FF 02 00 08 00 03 03 01    ................
02A830:  00 00 00 01 00 00 00 FE 33 FE 0A FF 02 00 20 00    ........3..... .
02A840:  00 FE FE 35 22 00 35 21 00 33 FE FE 08 FF 02 00    ...5".5!.3......
02A850:  00 16 00 05 FF 02 00 00 01 00 02 00 05 00 02 05    ................
02A860:  02 00 02 06 00 F1 FF FE 33 FE 0A FF 02 00 24 00    ........3.....$.
02A870:  00 FE 01 03 01 00 05 00 02 FF 02 00 02 04 00 01    ................
02A880:  FE 33 FE 02 02 02 00 01 3E 00 05 FE 01 02 01 00    .3......>.......
02A890:  05 00 00 FF 02 00 0B 00 02 FF 02 00 01 00 00 05    ................
02A8A0:  00 0F 02 00 01 00 01 0F 02 00 05 00 02 FF 02 00    ................
02A8B0:  01 00 00 06 03 12 02 00 00 00 01 00 00 00 FE 35    ...............5
02A8C0:  25 00 33 FE 0A FF 02 00 28 00 00 FE 01 03 01 00    %.3.....(.......
02A8D0:  02 00 04 03 01 00 00 18 00 FF FE 33 FE 0A FF 02    ...........3....
02A8E0:  00 26 00 00 FE FE 35 28 00 35 27 00 33 FE 0A FF    .&....5(.5'.3...
02A8F0:  02 00 2A 00 00 FE 00 03 01 00 0A 00 00 03 01 00    ..*.............
02A900:  02 08 02 00 01 03 00 01 03 12 02 00 00 00 8D 00    ................
02A910:  00 00 FE 33 FE 0A FF 02 00 26 00 00 FE FE 35 27    ...3.....&....5'
02A920:  00 33 FE 0A FF 02 00 23 00 00 FE FE 35 26 00 33    .3.....#....5&.3
02A930:  FE 0A FF 02 00 22 00 00 FE FE 35 23 00 33 FE 0A    ....."....5#.3..
02A940:  FF 02 00 29 00 00 FE 00 03 01 00 0C 03 01 08 02    ...)............
02A950:  00 05 00 02 FF 02 00 01 03 00 01 03 10 02 00 00    ................
02A960:  00 FF FF 00 00 FE 33 FE 02 08 02 00 01 03 00 01    ......3.........
02A970:  FE 01 08 02 00 05 00 02 FF 02 00 02 FC FF FF FE    ................
02A980:  33 FE 02 00 02 00 01 05 00 01 FE 01 00 02 00 08    3...............
02A990:  00 01 0C 01 00 05 00 00 FF 02 00 0B 00 01 00 02    ................
02A9A0:  00 05 00 02 08 02 00 02 FC FF FF 03 12 02 00 00    ................
02A9B0:  00 00 00 00 00 FE 33 FE 0A FF 02 00 28 00 00 FE    ......3.....(...
02A9C0:  FE 35 29 00 33 FE 02 00 02 00 01 05 00 01 FE 00    .5).3...........
02A9D0:  0F 02 00 01 00 01 0F 02 00 05 00 02 FF 02 00 02    ................
02A9E0:  04 00 2A 00 0F 02 00 01 00 01 0F 02 00 05 00 02    ..*.............
02A9F0:  FF 02 00 02 FE FF FF 01 12 02 00 08 00 01 0C 01    ................
02AA00:  00 05 00 00 FF 02 00 0B 00 01 00 02 00 05 00 02    ................
02AA10:  08 02 00 01 03 00 01 03 12 02 00 00 00 00 00 00    ................
02AA20:  00 FE 35 28 00 33 FE FE 08 FF 02 00 00 17 00 05    ..5(.3..........
02AA30:  FF 02 00 00 01 00 02 00 05 00 02 05 02 00 02 06    ................
02AA40:  00 D0 FF FE 35 21 00 2E 21 00 24 08 14 35 14 00    ....5!..!.$..5..
02AA50:  2F 02 FD FF 14 00 00 06 00 33 FE 0A FF 02 00 23    /........3.....#
02AA60:  00 00 FE 00 03 01 00 0C 03 01 0F 02 00 05 00 02    ................
02AA70:  FF 02 00 01 28 00 00 03 12 02 00 00 00 00 00 00    ....(...........
02AA80:  00 FE 19 33 FE 0A FF 02 00 21 00 00 FE FE 35 23    ...3.....!....5#
02AA90:  00 35 22 00 2B 00 24 00 01 00 33 FE 02 0F 02 00    .5".+.$...3.....
02AAA0:  02 FE FF FF FE 03 12 02 00 00 00 00 00 00 00 FE    ................
02AAB0:  33 FE FE 00 0F 02 00 01 00 01 0F 02 00 05 00 02    3...............
02AAC0:  FF 02 00 01 28 00 00 03 12 02 00 00 00 01 00 00    ....(...........
02AAD0:  00 FE 33 FE FE 08 FF 02 00 00 20 00 05 FF 02 00    ..3....... .....
02AAE0:  00 01 00 02 00 05 00 02 05 02 00 02 04 00 00 05    ................
02AAF0:  FF 02 00 00 01 0F 02 00 05 00 00 FF 02 00 0B 00    ................
02AB00:  0C 03 01 02 01 00 05 00 00 FF 02 00 0B 00 00 FF    ................
02AB10:  02 00 0B 00 01 00 02 00 05 00 02 08 02 00 01 03    ................
02AB20:  00 01 03 12 02 00 00 00 01 00 00 00 01 00 02 00    ................
02AB30:  05 00 02 FF 02 00 01 05 00 01 01 02 01 00 05 00    ................
02AB40:  02 FF 02 00 01 3E 00 05 00 03 01 00 0C 03 01 02    .....>..........
02AB50:  01 00 05 00 00 FF 02 00 0B 00 00 FF 02 00 0B 00    ................
02AB60:  01 00 02 00 05 00 02 08 02 00 01 03 00 01 03 12    ................
02AB70:  02 00 00 00 01 00 00 00 01 00 02 00 05 00 02 FF    ................
02AB80:  02 00 01 05 00 01 09 02 01 00 03 01 02 01 00 05    ................
02AB90:  00 02 FF 02 00 01 3E 00 05 FE 33 FE 02 0F 02 00    ......>...3.....
02ABA0:  01 3C 00 05 FE 00 0F 02 00 01 00 01 0F 02 00 05    .<..............
02ABB0:  00 02 FF 02 00 01 00 00 06 03 12 02 00 00 00 02    ................
02ABC0:  00 00 00 FE 33 FE FE 08 FF 02 00 00 17 00 05 FF    ....3...........
02ABD0:  02 00 00 01 00 02 00 05 00 02 05 02 00 02 06 00    ................
02ABE0:  F1 FF FE 35 2B 00 33 FE 0A FF 02 00 2C 00 00 FE    ...5+.3.....,...
02ABF0:  00 03 01 00 09 00 00 03 01 00 09 00 00 03 01 00    ................
02AC00:  0C 04 01 0F 02 00 05 00 02 FF 02 00 01 3C 00 05    .............<..
02AC10:  03 12 02 00 00 00 00 00 00 00 04 03 01 00 00 18    ................
02AC20:  00 FF 04 03 01 00 00 1F 00 FF FE 33 FE 02 0F 02    ...........3....
02AC30:  00 01 3C 00 05 FE 00 0F 02 00 01 00 01 0F 02 00    ..<.............
02AC40:  05 00 02 FF 02 00 01 3C 00 05 03 12 02 00 00 00    .......<........
02AC50:  01 00 00 00 FE 33 FE 0A FF 02 00 2B 00 00 FE FE    .....3.....+....
02AC60:  35 2C 00 33 FE 0A FF 02 00 2E 00 00 FE 00 03 01    5,.3............
02AC70:  00 09 00 00 03 01 00 09 00 04 03 01 00 00 18 00    ................
02AC80:  FF 04 03 01 00 00 1F 00 FF 00 03 01 00 0C 03 01    ................
02AC90:  0F 02 00 05 00 02 FF 02 00 01 3C 00 05 03 12 02    ..........<.....
02ACA0:  00 00 00 00 00 00 00 FE 33 FE 02 FF 02 00 02 08    ........3.......
02ACB0:  00 00 FE 01 FF 02 00 08 00 03 03 01 00 00 00 01    ................
02ACC0:  00 00 00 FE 33 FE 0A FF 02 00 20 00 00 FE FE 35    ....3..... ....5
02ACD0:  2E 00 35 2D 00 33 FE FE 08 FF 02 00 00 16 00 05    ..5-.3..........
02ACE0:  FF 02 00 00 01 00 02 00 05 00 02 05 02 00 02 06    ................
02ACF0:  00 F1 FF FE 35 2A 00 35 29 00 33 FE 0A FF 02 00    ....5*.5).3.....
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:  00 00 02 00 0B 00 02 FF 02 00 01 00 00 00 00 00    ................
02AE10:  02 00 02 00 01 0F 02 00 05 00 02 FF 02 00 02 FE    ................
02AE20:  FF FF 03 12 02 00 00 00 04 00 00 00 03 12 02 00    ................
02AE30:  00 00 02 00 00 00 FF FE 33 FE 02 03 02 00 02 FD    ........3.......
02AE40:  FF FF FE 04 03 01 00 00 06 00 05 FF 02 00 00 01    ................
02AE50:  00 02 00 05 00 02 05 02 00 02 04 00 00 05 FF 02    ................
02AE60:  00 00 03 03 01 00 00 00 01 00 00 00 05 FF 02 00    ................
02AE70:  00 01 02 01 00 09 00 00 0F 02 00 00 00 03 12 02    ................
02AE80:  00 00 00 B0 00 00 00 01 0F 02 00 05 00 02 FF 02    ................
02AE90:  00 02 FE FF FF FF FE 2B 02 24 00 01 00 35 25 00    .......+.$...5%.
02AEA0:  35 21 00 2E 21 00 24 35 21 00 3B 08 20 35 20 00    5!..!.$5!.;. 5 .
02AEB0:  2F 02 FC FF 20 00 00 08 00 33 FE 02 08 02 00 01    /... ....3......
02AEC0:  03 00 01 FE 01 08 02 00 05 00 00 FF 02 00 0B 00    ................
02AED0:  01 00 02 00 05 00 02 05 02 00 02 06 00 D0 03 12    ................
02AEE0:  02 00 00 00 26 00 00 00 FE 33 FE 02 08 02 00 02    ....&....3......
02AEF0:  FC FF FF FE 03 10 02 00 00 00 FF FF 00 00 FE 33    ...............3
02AF00:  02 00 00 00 01 00 00 00 01 00 02 00 05 00 02 FF    ................
02AF10:  02 00 01 05 00 01 FE 33 FE 0A FF 02 00 23 00 00    .......3.....#..
02AF20:  FE 00 03 01 00 0C 03 01 02 01 00 05 00 02 FF 02    ................
02AF30:  00 01 07 00 01 03 0A 01 00 00 00 1A 00 00 00 FE    ................
02AF40:  33 FE 02 03 02 00 01 00 00 04 FE 03 03 01 00 00    3...............
02AF50:  00 00 00 00 00 FE 33 FE 0A FF 02 00 21 00 00 FE    ......3.....!...
02AF60:  FE 35 23 00 35 22 00 33 FE 0A FF 02 00 25 00 00    .5#.5".3.....%..
02AF70:  FE 00 03 01 00 0A 00 00 03 01 00 0A 00 00 03 01    ................
02AF80:  00 0C 03 01 02 01 00 05 00 02 FF 02 00 01 07 00    ................
02AF90:  01 03 0A 01 00 00 00 0D 00 00 00 00 03 01 00 0C    ................
02AFA0:  03 01 02 01 00 05 00 02 FF 02 00 01 07 00 01 03    ................
02AFB0:  0A 01 00 00 00 0A 00 00 00 00 03 01 00 0C 03 01    ................
02AFC0:  02 01 00 05 00 02 FF 02 00 01 07 00 01 03 0A 01    ................
02AFD0:  00 00 00 0C 00 00 00 FE 33 FE 0A FF 02 00 27 00    ........3.....'.
02AFE0:  00 FE 01 03 01 00 02 00 04 03 01 00 00 19 00 FF    ................
02AFF0:  FE 33 FE 0A FF 02 00 21 00 00 FE FE 35 27 00 35    .3.....!....5'.5
02B000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B0A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B0B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B0C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B0D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B0E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B0F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B100:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B110:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B120:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B130:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B140:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B150:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B160:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B170:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B180:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B190:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B1A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B1B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B1C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B1D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B1E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B1F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B200:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B210:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B220:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B230:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B240:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B250:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B260:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B270:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B280:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B290:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B2A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B2B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B2C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B2D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B2E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B2F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B3A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B3B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B3C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B3D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B3E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B3F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02B400:  12 02 00 00 00 17 37 00 1F 02 00 00 00 21 08 53    ......7......!.S
02B410:  63 72 65 65 6E 49 4F 09 00 00 00 65 00 21 08 54    creenIO....e.!.T
02B420:  65 72 6D 69 6E 61 6C 0B 00 00 00 18 00 08 01 35    erminal........5
02B430:  02 00 2F 03 00 00 02 00 00 06 00 33 FE 02 00 02    ../........3....
02B440:  00 03 04 00 00 FE 00 00 02 00 00 00 01 00 02 00    ................
02B450:  05 00 02 FF 02 00 03 04 00 00 01 00 02 00 05 00    ................
02B460:  02 FF 02 00 02 F6 FF FF FE 33 FE 0A FF 02 00 05    .........3......
02B470:  00 00 FE 00 03 01 00 0C 02 01 00 02 00 05 00 02    ................
02B480:  FF 02 00 03 04 00 00 03 12 02 00 00 00 00 00 00    ................
02B490:  00 FE 33 FE 02 00 02 00 03 04 00 00 FE 01 12 02    ..3.............
02B4A0:  00 05 00 02 00 02 00 02 10 00 00 FE 33 FE 0A FF    ............3...
02B4B0:  02 00 04 00 00 FE FE 35 05 00 33 FE 0A FF 02 00    .......5..3.....
02B4C0:  06 00 00 FE 00 03 01 00 0C 04 01 00 02 00 05 00    ................
02B4D0:  02 FF 02 00 03 04 00 00 01 12 02 00 05 00 02 00    ................
02B4E0:  02 00 02 10 00 00 FE 33 FE 02 00 02 00 03 04 00    .......3........
02B4F0:  00 FE 03 12 02 00 00 00 00 00 00 00 FE 35 06 00    .............5..
02B500:  35 04 00 33 FE 02 0F 02 00 02 F6 FF FF FE 01 00    5..3............
02B510:  02 00 05 00 02 FF 02 00 03 04 00 00 FE 35 03 00    .............5..
02B520:  2E 03 00 24 35 03 00 2F 03 FE FF 03 00 00 04 00    ...$5../........
02B530:  33 FE 02 00 02 00 03 FE FF FF FE 01 12 02 00 05    3...............
02B540:  00 02 00 02 00 02 10 00 00 FE 35 05 00 33 FE FE    ..........5..3..
02B550:  08 FF 02 00 00 02 00 05 FF 02 00 00 03 12 02 00    ................
02B560:  00 00 01 00 00 00 FF FE 33 FE 02 00 02 00 03 FE    ........3.......
02B570:  FF FF FE 00 00 02 00 01 00 01 00 02 00 05 00 02    ................
02B580:  FF 02 00 03 FE FF FF 03 12 02 00 00 00 01 00 00    ................
02B590:  00 FE 33 FE 0A FF 02 00 05 00 00 FE 00 03 01 00    ..3.............
02B5A0:  0A 00 00 03 01 00 0C 02 01 00 02 00 05 00 02 FF    ................
02B5B0:  02 00 03 FE FF FF 03 12 02 00 00 00 00 00 00 00    ................
02B5C0:  00 03 01 00 0C 03 09 02 01 00 03 01 02 01 00 05    ................
02B5D0:  00 00 FF 02 00 0B 00 00 FF 02 00 00 00 00 FF 02    ................
02B5E0:  00 0B 00 01 FF 02 00 05 00 02 04 02 00 02 12 00    ................
02B5F0:  00 00 00 02 00 02 00 01 0F 02 00 05 00 02 FF 02    ................
02B600:  21 08 4D 61 6B 65 45 64 69 74 15 00 00 00 23 00    !.MakeEdit....#.
02B610:  21 08 54 65 72 6D 69 6E 61 6C 0B 00 00 00 18 00    !.Terminal......
02B620:  1B 00 95 01 00 12 1A 00 00 00 17 1D 00 1F 1A 00    ................
02B630:  00 00 18 00 00 00 00 00 00 00 00 11 34 00 B7 ED    ............4...
02B640:  52 CA 11 89 2A D3 01 26 00 FD 75 0C C3 43 89 21    R...*..&..u..C.!
02B650:  01 00 B7 ED 52 CA 26 89 21 02 00 B7 ED 52 C2 43    ....R.&.!....R.C
02B660:  89 2A D3 01 11 02 00 B7 ED 52 FD 2A 5A 87 FD 75    .*.......R.*Z..u
02B670:  0E DD 6E 04 DD 66 05 E5 CD 7C 7D C3 43 89 E1 22    ..n..f...|}.C.."
02B680:  00 05 00 02 00 02 00 02 0A 00 03 FE 03 12 02 00    ................
02B690:  00 00 00 00 00 00 FE 33 FE 0A FF 02 00 22 00 00    .......3....."..
02B6A0:  FE FE 35 23 00 33 FE 0A FF 02 00 24 00 00 FE 00    ..5#.3.....$....
02B6B0:  03 01 00 0C 03 01 00 02 00 05 00 02 FF 02 00 02    ................
02B6C0:  04 00 83 03 12 02 00 00 00 60 41 00 00 FE 35 25    .........`A...5%
02B6D0:  00 33 FE 0A FF 02 00 26 00 00 FE 00 03 01 00 0C    .3.....&........
02B6E0:  07 01 08 02 00 05 00 00 FF 02 00 0B 00 01 00 02    ................
02B6F0:  00 05 00 02 08 02 00 01 03 00 01 03 12 02 00 00    ................
02B700:  00 8D 00 00 00 03 10 02 00 00 00 FF FF 00 00 FE    ................
02B710:  33 FE 02 08 02 00 01 03 00 01 FE 01 08 02 00 05    3...............
02B720:  00 00 FF 02 00 0B 00 01 00 02 00 05 00 02 08 02    ................
02B730:  00 01 03 00 01 03 12 02 00 00 00 8D 00 00 00 FE    ................
02B740:  33 FE 0A FF 02 00 25 00 00 FE FE 35 26 00 33 FE    3.....%....5&.3.
02B750:  02 00 02 00 01 05 00 01 FE 01 12 02 00 08 00 01    ................
02B760:  0C 01 00 05 00 00 FF 02 00 0B 00 01 00 02 00 05    ................
02B770:  00 02 08 02 00 01 03 00 01 03 12 02 00 00 00 00    ................
02B780:  00 00 00 FE 33 FE 0A FF 02 00 28 00 00 FE 00 03    ....3.....(.....
02B790:  01 00 0C 03 01 02 01 00 05 00 00 FF 02 00 0B 00    ................
02B7A0:  00 FF 02 00 0B 00 01 00 02 00 05 00 02 08 02 00    ................
02B7B0:  01 03 00 01 03 12 02 00 00 00 01 00 00 00 00 00    ................
02B7C0:  02 00 01 00 01 00 02 00 05 00 02 FF 02 00 01 05    ................
02B7D0:  00 01 03 12 02 00 00 00 01 00 00 00 03 0A 01 00    ................
02B7E0:  00 00 1A 00 00 00 FE 33 FE 02 00 02 00 01 05 00    .......3........
02B7F0:  01 FE 00 00 02 00 01 00 01 00 02 00 05 00 02 FF    ................
02B800:  00 02 F6 FF FF 03 12 02 00 00 00 0B 00 00 00 03    ................
02B810:  00 02 00 00 00 FF FF 00 00 03 12 02 00 00 00 01    ................
02B820:  00 00 00 09 02 01 00 03 01 02 01 00 05 00 02 FF    ................
02B830:  02 00 02 F5 FF FF FE 35 04 00 2E 04 00 24 35 01    .......5.....$5.
02B840:  00 2F 02 F5 FF 01 00 03 14 00 33 FE 02 0F 02 00    ./........3.....
02B850:  02 FE FF FF FE 00 0F 02 00 00 00 01 0F 02 00 05    ................
02B860:  00 02 FF 02 00 02 0C 00 50 00 0F 02 00 02 00 03    ........P.......
02B870:  12 02 00 00 00 0C 00 00 00 01 0F 02 00 05 00 02    ................
02B880:  FF 02 00 02 06 00 66 FE 33 FE 02 0F 02 00 02 FC    ......f.3.......
02B890:  FF FF FE 00 0F 02 00 00 00 00 0F 02 00 00 00 01    ................
02B8A0:  0F 02 00 05 00 02 FF 02 00 02 0A 00 03 01 0F 02    ................
02B8B0:  00 05 00 02 FF 02 00 02 08 00 01 03 12 02 00 00    ................
02B8C0:  00 01 00 00 00 FE 33 FE FE 08 FF 02 00 01 04 00    ......3.........
02B8D0:  05 FF 02 00 00 01 0F 02 00 05 00 02 FF 02 00 02    ................
02B8E0:  0C 00 50 05 FF 02 00 00 01 0F 02 00 05 00 02 FF    ..P.............
02B8F0:  02 00 02 FC FF FF 05 FF 02 00 00 01 0F 02 00 05    ................
02B900:  00 02 FF 02 00 02 FE FF FF 05 FF 02 00 00 01 0F    ................
02B910:  02 00 05 00 02 FF 02 00 02 0A 00 03 FF FE 33 FE    ..............3.
02B920:  FE 08 FF 02 00 01 03 00 05 FF 02 00 00 03 0E 01    ................
02B930:  00 00 00 00 00 00 00 FF FE 33 FE FE 08 FF 02 00    .........3......
02B940:  01 03 00 05 FF 02 00 00 03 0E 01 00 00 00 05 00    ................
02B950:  00 00 FF FE 2B 00 05 00 01 00 33 FE 02 0F 02 00    ....+.....3.....
02B960:  02 FA FF FF FE 03 12 02 00 00 00 01 00 00 00 FE    ................
02B970:  33 FE FE 00 0F 02 00 01 00 01 0F 02 00 05 00 02    3...............
02B980:  FF 02 00 02 06 00 66 03 12 02 00 00 00 01 00 00    ......f.........
02B990:  00 FE 33 FE 02 0F 02 00 02 FE FF FF FE 00 0F 02    ..3.............
02B9A0:  00 00 00 01 0F 02 00 05 00 02 FF 02 00 02 0C 00    ................
02B9B0:  50 00 0F 02 00 02 00 01 0F 02 00 05 00 02 FF 02    P...............
02B9C0:  00 02 FA FF FF 03 12 02 00 00 00 0C 00 00 00 FE    ................
02B9D0:  2B 00 07 00 01 00 33 FE 02 0F 02 00 02 F8 FF FF    +.....3.........
02B9E0:  FE 00 0F 02 00 00 00 01 0F 02 00 05 00 02 FF 02    ................
02B9F0:  00 02 0A 00 03 03 12 02 00 00 00 01 00 00 00 FE    ................
02BA00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BA10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BA20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BA30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BA40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BA50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BA60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BA70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BA80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BA90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BAA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BAB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BAC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BAD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BAE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BAF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BB00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BB10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BB20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BB30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BB40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BB50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BB60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BB70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BB80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BB90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BBA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BBB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BBC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BBD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BBE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BBF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02BC00:  21 05 46 69 6C 65 73 0E 00 00 00 4C 00 12 05 00    !.Files....L....
02BC10:  00 00 17 11 00 1F 05 00 00 00 18 00 00 00 00 00    ................
02BC20:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02BC30:  00 00 00 00 00 00 00 00 00 00 00 11 34 00 B7 ED    ............4...
02BC40:  52 CA 11 89 2A D3 01 26 00 FD 75 0C C3 43 89 21    R...*..&..u..C.!
02BC50:  01 00 B7 ED 52 CA 26 89 21 02 00 B7 ED 52 C2 43    ....R.&.!....R.C
02BC60:  89 2A D3 01 11 02 00 B7 ED 52 FD 2A 5A 87 FD 75    .*.......R.*Z..u
02BC70:  0E DD 6E 04 DD 66 05 E5 CD 7C 7D C3 43 89 E1 22    ..n..f...|}.C.."
02BC80:  6C 65 3B 42 61 63 6B 77 61 72 64 73 3A 42 4F 4F    le;Backwards:BOO
02BC90:  4C 45 41 4E 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A    LEAN):BOOLEAN;..
02BCA0:  0D 0A 0D 0A 28 2A 09 62 61 63 6B 77 61 72 64 73    ....(*.backwards
02BCB0:  20 6E 6F 74 20 79 65 74 20 69 6D 70 6C 65 6D 65     not yet impleme
02BCC0:  6E 74 65 64 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09    nted*)..BEGIN...
02BCD0:  49 46 20 53 74 72 69 6E 67 4C 65 6E 3D 30 20 54    IF StringLen=0 T
02BCE0:  48 45 4E 20 52 45 54 55 52 4E 20 54 52 55 45 20    HEN RETURN TRUE 
02BCF0:  45 4E 44 3B 0D 0A 09 73 65 74 63 75 72 70 6F 73    END;...setcurpos
02BD00:  28 66 29 3B 0D 0A 09 49 46 20 42 61 63 6B 77 61    (f);...IF Backwa
02BD10:  72 64 73 20 54 48 45 4E 0D 0A 09 09 4D 61 74 63    rds THEN....Matc
02BD20:  68 43 68 61 72 3A 3D 53 74 72 69 6E 67 5B 53 74    hChar:=String[St
02BD30:  72 69 6E 67 4C 65 6E 2D 31 5D 3B 0D 0A 09 09 4C    ringLen-1];....L
02BD40:  4F 4F 50 0D 0A 09 09 09 49 46 20 4E 4F 54 20 42    OOP.....IF NOT B
02BD50:  61 63 6B 75 70 28 29 20 54 48 45 4E 20 45 58 49    ackup() THEN EXI
02BD60:  54 20 45 4E 44 3B 0D 0A 09 09 09 49 46 20 28 57    T END;.....IF (W
02BD70:  6F 72 6B 69 6E 67 5E 2E 43 68 61 72 73 5B 43 68    orking^.Chars[Ch
02BD80:  61 72 50 6F 73 5D 3D 4D 61 74 63 68 43 68 61 72    arPos]=MatchChar
02BD90:  29 20 0D 0A 09 09 09 20 20 4F 52 20 28 57 6F 72    ) .....  OR (Wor
02BDA0:  6B 69 6E 67 5E 2E 43 68 61 72 73 5B 43 68 61 72    king^.Chars[Char
02BDB0:  50 6F 73 5D 3D 43 41 50 28 4D 61 74 63 68 43 68    Pos]=CAP(MatchCh
02BDC0:  61 72 29 29 20 54 48 45 4E 0D 0A 09 09 09 09 4D    ar)) THEN......M
02BDD0:  61 74 63 68 43 68 61 72 4E 6F 3A 3D 53 74 72 69    atchCharNo:=Stri
02BDE0:  6E 67 4C 65 6E 2D 32 3B 0D 0A 09 09 09 09 73 61    ngLen-2;......sa
02BDF0:  76 65 63 75 72 70 6F 73 28 66 29 3B 0D 0A 09 09    vecurpos(f);....
02BE00:  1B 00 01 00 01 1C 00 00 00 31 01 01 1C 00 01 00    .........1......
02BE10:  12 08 00 00 00 17 4B 00 1F 08 00 00 00 18 00 00    ......K.........
02BE20:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02BE30:  00 00 00 00 00 00 00 00 00 00 00 11 34 00 B7 ED    ............4...
02BE40:  52 CA 11 89 2A D3 01 26 00 FD 75 0C C3 43 89 21    R...*..&..u..C.!
02BE50:  01 00 B7 ED 52 CA 26 89 21 02 00 B7 ED 52 C2 43    ....R.&.!....R.C
02BE60:  89 2A D3 01 11 02 00 B7 ED 52 FD 2A 5A 87 FD 75    .*.......R.*Z..u
02BE70:  0E DD 6E 04 DD 66 05 E5 CD 7C 7D C3 43 89 E1 22    ..n..f...|}.C.."
02BE80:  01 02 01 00 05 00 00 FF 02 00 0B 00 00 FF 02 00    ................
02BE90:  0B 00 01 00 02 00 05 00 02 08 02 00 01 03 00 01    ................
02BEA0:  03 12 02 00 00 00 01 00 00 00 01 00 02 00 05 00    ................
02BEB0:  02 FF 02 00 01 05 00 01 03 0A 01 00 00 00 1A 00    ................
02BEC0:  00 00 FE 33 FE 01 00 02 00 05 00 02 00 02 00 02    ...3............
02BED0:  0C 00 00 FE 04 00 02 00 00 1D 00 FF FE 33 FE FE    .............3..
02BEE0:  08 FF 02 00 00 17 00 05 FF 02 00 00 01 00 02 00    ................
02BEF0:  05 00 02 05 02 00 02 0E 00 FF FF FE 33 FE 01 05    ............3...
02BF00:  02 00 05 00 02 05 02 00 02 08 00 00 FE 01 05 03    ................
02BF10:  00 05 00 00 FF 02 00 0B 00 01 00 02 00 05 00 02    ................
02BF20:  05 02 00 02 0E 00 FF 03 12 02 00 00 00 28 00 00    .............(..
02BF30:  00 FE 33 FE 01 00 02 00 05 00 02 00 02 00 02 0A    ..3.............
02BF40:  00 03 FE 01 00 02 00 05 00 01 FF 02 00 05 00 02    ................
02BF50:  00 02 00 02 0C 00 00 FE 33 FE 0A FF 02 00 33 00    ........3.....3.
02BF60:  00 FE FE 35 34 00 33 FE 01 00 02 00 05 00 02 00    ...54.3.........
02BF70:  02 00 02 0C 00 00 FE 04 00 02 00 00 1E 00 FF FE    ................
02BF80:  35 33 00 33 FE 00 05 02 00 0B 00 01 00 02 00 05    53.3............
02BF90:  00 02 05 02 00 02 0E 00 FF 03 12 02 00 00 00 28    ...............(
02BFA0:  00 00 00 FE 01 05 03 00 05 00 01 FF 02 00 05 00    ................
02BFB0:  02 05 02 00 02 08 00 00 FE 35 1F 00 2E 1F 00 24    .........5.....$
02BFC0:  08 0A 35 0A 00 2F 02 00 00 0A 00 00 08 00 2C 03    ..5../........,.
02BFD0:  00 33 FE FE 01 FF 02 00 05 00 02 05 02 00 02 06    .3..............
02BFE0:  00 01 FE 33 FE 0A FF 02 00 21 00 00 FE 00 03 01    ...3.....!......
02BFF0:  00 0C 06 01 0C 01 00 05 00 02 FF 02 00 03 02 00    ................
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:  12 02 00 00 00 17 2E 00 1F 02 00 00 00 18 00 00    ................
02C310:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C320:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C330:  00 00 00 00 00 00 00 00 00 00 00 11 34 00 B7 ED    ............4...
02C340:  52 CA 11 89 2A D3 01 26 00 FD 75 0C C3 43 89 21    R...*..&..u..C.!
02C350:  01 00 B7 ED 52 CA 26 89 21 02 00 B7 ED 52 C2 43    ....R.&.!....R.C
02C360:  89 2A D3 01 11 02 00 B7 ED 52 FD 2A 5A 87 FD 75    .*.......R.*Z..u
02C370:  0E DD 6E 04 DD 66 05 E5 CD 7C 7D C3 43 89 E1 22    ..n..f...|}.C.."
02C380:  3B 0D 0A 09 46 4F 52 20 69 3A 3D 30 20 54 4F 20    ;...FOR i:=0 TO 
02C390:  45 72 72 6F 72 43 6F 75 6E 74 2D 31 20 44 4F 0D    ErrorCount-1 DO.
02C3A0:  0A 09 09 4D 6F 76 65 54 6F 43 68 61 72 28 66 2C    ...MoveToChar(f,
02C3B0:  45 72 72 6F 72 4C 69 73 74 5B 69 5D 2E 43 68 61    ErrorList[i].Cha
02C3C0:  72 50 29 3B 0D 0A 09 09 62 3A 3D 4C 61 62 65 6C    rP);....b:=Label
02C3D0:  4F 70 28 66 2C 54 52 55 45 2C 43 48 52 28 30 62    Op(f,TRUE,CHR(0b
02C3E0:  30 68 2B 69 29 29 3B 0D 0A 09 09 45 4E 44 3B 0D    0h+i));....END;.
02C3F0:  0A 09 45 4E 44 20 44 65 66 69 6E 65 45 72 72 6F    ..END DefineErro
02C400:  72 73 3B 0D 0A 0D 0A 45 4E 44 20 4D 61 6B 65 45    rs;....END MakeE
02C410:  64 69 74 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A    dits............
02C420:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02C430:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02C440:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02C450:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02C460:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02C470:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A    ................
02C480:  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 00    ................
02C490:  00 00 00 00 00 00 00 00 00 00 30 00 80 19 00 00    ..........0.....
02C4A0:  45 44 49 54 53 54 41 54 44 45 46 20 80 00 00 00    EDITSTATDEF ....
02C4B0:  00 00 00 00 00 00 00 00 00 00 32 00 00 02 00 00    ..........2.....
02C4C0:  45 44 49 54 53 54 41 54 4D 4F 44 20 80 00 00 00    EDITSTATMOD ....
02C4D0:  00 00 00 00 00 00 00 00 00 00 33 00 80 0B 00 00    ..........3.....
02C4E0:  46 49 4C 45 4F 50 53 20 44 45 46 20 80 00 00 00    FILEOPS DEF ....
02C4F0:  00 00 00 00 00 00 00 00 00 00 35 00 00 02 00 00    ..........5.....
02C500:  21 08 53 63 72 65 65 6E 49 4F 09 00 00 00 65 00    !.ScreenIO....e.
02C510:  21 08 4D 61 6B 65 45 64 69 74 15 00 00 00 23 00    !.MakeEdit....#.
02C520:  1B 00 06 00 00 12 06 00 00 00 17 11 00 1F 06 00    ................
02C530:  00 00 18 00 00 00 00 00 00 00 00 11 34 00 B7 ED    ............4...
02C540:  52 CA 11 89 2A D3 01 26 00 FD 75 0C C3 43 89 21    R...*..&..u..C.!
02C550:  01 00 B7 ED 52 CA 26 89 21 02 00 B7 ED 52 C2 43    ....R.&.!....R.C
02C560:  89 2A D3 01 11 02 00 B7 ED 52 FD 2A 5A 87 FD 75    .*.......R.*Z..u
02C570:  0E DD 6E 04 DD 66 05 E5 CD 7C 7D C3 43 89 E1 22    ..n..f...|}.C.."
02C580:  44 20 4D 61 74 63 68 65 73 28 29 20 0D 0A 09 09    D Matches() ....
02C590:  09 09 20 20 20 41 4E 44 20 28 4D 61 74 63 68 43    ..   AND (MatchC
02C5A0:  68 61 72 4E 6F 3D 30 29 20 54 48 45 4E 0D 0A 09    harNo=0) THEN...
02C5B0:  09 09 09 09 52 45 54 55 52 4E 20 54 52 55 45 3B    ....RETURN TRUE;
02C5C0:  0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09    .......END;.....
02C5D0:  09 73 65 74 63 75 72 70 6F 73 28 66 29 3B 0D 0A    .setcurpos(f);..
02C5E0:  09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44    ....END;.....END
02C5F0:  3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 4D 61 74 63    ;...ELSE....Matc
02C600:  68 43 68 61 72 3A 3D 53 74 72 69 6E 67 5B 30 5D    hChar:=String[0]
02C610:  3B 0D 0A 09 09 4C 4F 4F 50 0D 0A 09 09 09 49 46    ;....LOOP.....IF
02C620:  20 4E 4F 54 20 41 64 76 61 6E 63 65 28 29 20 54     NOT Advance() T
02C630:  48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D 0A 09    HEN EXIT END;...
02C640:  09 09 49 46 20 28 57 6F 72 6B 69 6E 67 5E 2E 43    ..IF (Working^.C
02C650:  68 61 72 73 5B 43 68 61 72 50 6F 73 5D 3D 4D 61    hars[CharPos]=Ma
02C660:  74 63 68 43 68 61 72 29 0D 0A 09 09 09 20 20 4F    tchChar).....  O
02C670:  52 20 28 57 6F 72 6B 69 6E 67 5E 2E 43 68 61 72    R (Working^.Char
02C680:  73 5B 43 68 61 72 50 6F 73 5D 3D 43 41 50 28 4D    s[CharPos]=CAP(M
02C690:  61 74 63 68 43 68 61 72 29 29 20 54 48 45 4E 0D    atchChar)) THEN.
02C6A0:  0A 09 09 09 09 4D 61 74 63 68 43 68 61 72 4E 6F    .....MatchCharNo
02C6B0:  3A 3D 31 3B 0D 0A 09 09 09 09 73 61 76 65 63 75    :=1;......savecu
02C6C0:  72 70 6F 73 28 66 29 3B 0D 0A 09 09 09 09 57 48    rpos(f);......WH
02C6D0:  49 4C 45 20 28 4D 61 74 63 68 43 68 61 72 4E 6F    ILE (MatchCharNo
02C6E0:  3C 53 74 72 69 6E 67 4C 65 6E 29 0D 0A 09 09 09    <StringLen).....
02C6F0:  09 20 20 20 20 41 4E 44 20 28 41 64 76 61 6E 63    .    AND (Advanc
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:  33 FE FE 00 0F 02 00 01 00 01 0F 02 00 05 00 02    3...............
02CB10:  FF 02 00 02 FC FF FF 03 12 02 00 00 00 01 00 00    ................
02CB20:  00 FE 33 FE FE 08 FF 02 00 01 01 00 05 FF 02 00    ..3.............
02CB30:  00 01 0F 02 00 05 00 02 FF 02 00 02 FE FF FF 05    ................
02CB40:  FF 02 00 00 01 0F 02 00 05 00 02 FF 02 00 02 F8    ................
02CB50:  FF FF FF FE 33 FE FE 08 FF 02 00 01 03 00 05 FF    ....3...........
02CB60:  02 00 00 03 0E 01 00 00 00 0F 00 00 00 FF FE 2B    ...............+
02CB70:  02 07 00 01 00 35 08 00 2B 02 05 00 01 00 35 06    .....5..+.....5.
02CB80:  00 33 FE FE 08 FF 02 00 01 03 00 05 FF 02 00 00    .3..............
02CB90:  03 0E 01 00 00 00 06 00 00 00 FF FE 33 FE FE 08    ............3...
02CBA0:  FF 02 00 01 03 00 05 FF 02 00 00 03 0E 01 00 00    ................
02CBB0:  00 02 00 00 00 FF FE 33 FE 02 0F 02 00 02 F6 FF    .......3........
02CBC0:  FF FE 03 12 02 00 00 00 00 00 00 00 FE 33 FE 02    .............3..
02CBD0:  0F 02 00 02 F8 FF FF FE 03 12 02 00 00 00 00 00    ................
02CBE0:  00 00 FE 33 FE 02 0F 02 00 02 FE FF FF FE 00 0F    ...3............
02CBF0:  02 00 00 00 01 0F 02 00 05 00 02 FF 02 00 02 0C    ................
02CC00:  00 50 03 12 02 00 00 00 01 00 00 00 FE 33 FE 02    .P...........3..
02CC10:  0F 02 00 02 FC FF FF FE 00 0F 02 00 00 00 01 0F    ................
02CC20:  02 00 05 00 02 FF 02 00 02 0A 00 03 03 12 02 00    ................
02CC30:  00 00 01 00 00 00 FE 2B 00 09 00 01 00 33 FE 02    .......+.....3..
02CC40:  0F 02 00 02 FA FF FF FE 03 12 02 00 00 00 00 00    ................
02CC50:  00 00 FE 33 FE FE 01 12 02 00 05 00 02 00 02 00    ...3............
02CC60:  02 10 00 00 FE 33 FE FE 08 FF 02 00 01 01 00 05    .....3..........
02CC70:  FF 02 00 00 01 0F 02 00 05 00 02 FF 02 00 02 FE    ................
02CC80:  FF FF 05 FF 02 00 00 01 0F 02 00 05 00 02 FF 02    ................
02CC90:  00 02 FC FF FF FF FE 33 FE FE 08 FF 02 00 02 07    .......3........
02CCA0:  00 05 FF 02 00 01 01 04 0B 00 05 00 00 FF 02 00    ................
02CCB0:  0B 00 01 FF 02 00 05 00 02 04 02 00 02 12 00 00    ................
02CCC0:  00 00 02 00 02 00 01 0F 02 00 05 00 02 FF 02 00    ................
02CCD0:  02 FA FF FF 03 12 02 00 00 00 0B 00 00 00 05 FF    ................
02CCE0:  02 00 00 03 12 02 00 00 00 0A 00 00 00 05 FF 02    ................
02CCF0:  00 00 03 12 02 00 00 00 0B 00 00 00 FF FE 33 FE    ..............3.
02CD00:  21 03 43 50 4D 03 00 00 00 7A 00 12 02 00 00 00    !.CPM....z......
02CD10:  17 1A 00 1F 02 00 00 00 18 00 00 00 00 00 00 00    ................
02CD20:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02CD30:  00 00 00 00 00 00 00 00 00 00 00 11 34 00 B7 ED    ............4...
02CD40:  52 CA 11 89 2A D3 01 26 00 FD 75 0C C3 43 89 21    R...*..&..u..C.!
02CD50:  01 00 B7 ED 52 CA 26 89 21 02 00 B7 ED 52 C2 43    ....R.&.!....R.C
02CD60:  89 2A D3 01 11 02 00 B7 ED 52 FD 2A 5A 87 FD 75    .*.......R.*Z..u
02CD70:  0E DD 6E 04 DD 66 05 E5 CD 7C 7D C3 43 89 E1 22    ..n..f...|}.C.."
02CD80:  CA FF FE 33 FE 02 FF 02 00 02 08 00 00 FE 01 FF    ...3............
02CD90:  02 00 08 00 03 03 01 00 00 00 00 00 00 00 FE 33    ...............3
02CDA0:  FE 0A FF 02 00 20 00 00 FE FE 35 20 00 2E 20 00    ..... ....5 .. .
02CDB0:  24 08 10 35 10 00 2F 02 00 00 10 00 00 0C 00 16    $..5../.........
02CDC0:  01 0A 00 33 FE FE 08 FF 02 00 06 01 00 05 FF 02    ...3............
02CDD0:  00 01 01 04 FF FF 05 00 01 FF 02 00 05 00 02 04    ................
02CDE0:  02 00 02 0A 00 01 05 FF 02 00 00 01 12 02 00 05    ................
02CDF0:  00 02 00 02 00 02 08 00 01 05 FF 02 00 00 01 12    ................
02CE00:  02 00 05 00 02 00 02 00 02 06 00 01 05 FF 02 00    ................
02CE10:  00 00 00 02 00 0B 00 00 00 02 00 0B 00 01 00 02    ................
02CE20:  00 05 00 02 05 02 00 02 04 00 00 03 12 02 00 00    ................
02CE30:  00 00 00 00 00 03 12 02 00 00 00 01 00 00 00 FF    ................
02CE40:  FE 35 20 00 2E 20 00 24 08 11 35 11 00 2F 02 00    .5 .. .$..5../..
02CE50:  00 11 00 02 06 00 36 04 01 4D 4F 44 00 33 FE 0A    ......6..MOD.3..
02CE60:  FF 02 00 22 00 00 FE 00 03 01 00 0D 03 01 04 03    ..."............
02CE70:  00 05 00 00 FF 02 00 0B 00 00 00 02 00 0B 00 00    ................
02CE80:  00 02 00 0B 00 01 00 02 00 05 00 02 05 02 00 02    ................
02CE90:  04 00 74 03 12 02 00 00 00 00 00 00 00 03 12 02    ..t.............
02CEA0:  00 00 00 01 00 00 00 03 12 02 00 00 00 09 00 00    ................
02CEB0:  00 03 0A 03 00 01 00 00 00 00 00 FE 33 FE 02 0F    ............3...
02CEC0:  02 00 02 06 00 00 FE 03 12 02 00 00 00 01 00 00    ................
02CED0:  00 FE 33 FE 0A FF 02 00 20 00 00 FE FE 33 FE 0A    ..3..... ....3..
02CEE0:  FF 02 00 21 00 00 FE FE 35 22 00 36 04 02 44 45    ...!....5".6..DE
02CEF0:  46 00 33 FE 0A FF 02 00 23 00 00 FE 00 03 01 00    F.3.....#.......
02CF00:  02 0F 02 00 02 F8 FF FF FE 00 0F 02 00 00 00 01    ................
02CF10:  0F 02 00 05 00 02 FF 02 00 02 F8 FF FF 03 12 02    ................
02CF20:  00 00 00 01 00 00 00 FE 33 FE 0A FF 02 00 0C 00    ........3.......
02CF30:  00 FE 00 03 01 00 0C 03 01 0F 02 00 05 00 02 FF    ................
02CF40:  02 00 02 F8 FF FF 01 0F 02 00 05 00 02 FF 02 00    ................
02CF50:  02 08 00 01 FE 33 FE 02 0F 02 00 02 FE FF FF FE    .....3..........
02CF60:  00 0F 02 00 00 00 00 0F 02 00 00 00 01 0F 02 00    ................
02CF70:  05 00 02 FF 02 00 02 FE FF FF 03 12 02 00 00 00    ................
02CF80:  0B 00 00 00 03 12 02 00 00 00 01 00 00 00 FE 33    ...............3
02CF90:  FE 02 0F 02 00 02 FC FF FF FE 00 0F 02 00 00 00    ................
02CFA0:  01 0F 02 00 05 00 02 FF 02 00 02 0A 00 03 03 12    ................
02CFB0:  02 00 00 00 01 00 00 00 FE 33 FE 02 0F 02 00 02    .........3......
02CFC0:  F8 FF FF FE 03 12 02 00 00 00 00 00 00 00 FE 33    ...............3
02CFD0:  FE 0A FF 02 00 0B 00 00 FE FE 35 0C 00 33 FE 02    ..........5..3..
02CFE0:  0F 02 00 02 FC FF FF FE 00 0F 02 00 00 00 01 0F    ................
02CFF0:  02 00 05 00 02 FF 02 00 02 FC FF FF 03 12 02 00    ................
02D000:  00 00 01 00 00 00 FE 35 0B 00 2B 02 09 00 01 00    .......5..+.....
02D010:  35 0A 00 33 FE 0A FF 02 00 0E 00 00 FE 00 03 01    5..3............
02D020:  00 0C 07 01 0F 02 00 05 00 02 FF 02 00 02 FC FF    ................
02D030:  FF 00 0F 02 00 00 00 01 0F 02 00 05 00 02 FF 02    ................
02D040:  00 02 0A 00 03 03 12 02 00 00 00 01 00 00 00 FE    ................
02D050:  35 0F 00 33 FE 0A FF 02 00 10 00 00 FE 00 03 01    5..3............
02D060:  00 0C 02 01 0F 02 00 05 00 02 FF 02 00 02 F8 FF    ................
02D070:  FF 01 0F 02 00 05 00 02 FF 02 00 02 08 00 01 FE    ................
02D080:  33 FE FE 08 FF 02 00 01 01 00 05 FF 02 00 00 01    3...............
02D090:  0F 02 00 05 00 02 FF 02 00 02 FE FF FF 05 FF 02    ................
02D0A0:  00 00 01 0F 02 00 05 00 02 FF 02 00 02 FC FF FF    ................
02D0B0:  FF FE 36 0C 01 20 20 20 20 20 20 20 20 20 20 20    ..6..           
02D0C0:  00 33 FE FE 08 FF 02 00 02 07 00 05 FF 02 00 01    .3..............
02D0D0:  03 0A 0B 00 01 00 00 00 00 00 05 FF 02 00 00 03    ................
02D0E0:  12 02 00 00 00 0A 00 00 00 05 FF 02 00 00 03 12    ................
02D0F0:  02 00 00 00 0B 00 00 00 FF FE 33 FE 02 0F 02 00    ..........3.....
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:  02 F8 FF FF FE 00 0F 02 00 00 00 01 0F 02 00 05    ................
02D410:  00 02 FF 02 00 02 F8 FF FF 03 12 02 00 00 00 01    ................
02D420:  00 00 00 FE 33 FE 02 0F 02 00 02 FC FF FF FE 00    ....3...........
02D430:  0F 02 00 00 00 01 0F 02 00 05 00 02 FF 02 00 02    ................
02D440:  FC FF FF 03 12 02 00 00 00 01 00 00 00 FE 33 FE    ..............3.
02D450:  0A FF 02 00 0F 00 00 FE FE 35 10 00 35 0E 00 35    .........5..5..5
02D460:  0D 00 35 11 00 33 FE 02 0F 02 00 02 FE FF FF FE    ..5..3..........
02D470:  00 0F 02 00 00 00 01 0F 02 00 05 00 02 FF 02 00    ................
02D480:  02 0C 00 50 03 12 02 00 00 00 01 00 00 00 FE 33    ...P...........3
02D490:  FE 02 0F 02 00 02 FC FF FF FE 00 0F 02 00 00 00    ................
02D4A0:  00 0F 02 00 00 00 01 0F 02 00 05 00 02 FF 02 00    ................
02D4B0:  02 0A 00 03 03 12 02 00 00 00 01 00 00 00 01 0F    ................
02D4C0:  02 00 05 00 02 FF 02 00 02 F6 FF FF FE 35 13 00    .............5..
02D4D0:  33 FE 0A FF 02 00 14 00 00 FE 00 03 01 00 0C 06    3...............
02D4E0:  01 0F 02 00 05 00 02 FF 02 00 02 FC FF FF 00 0F    ................
02D4F0:  02 00 00 00 00 0F 02 00 00 00 01 0F 02 00 05 00    ................
02D500:  02 FF 02 00 02 0A 00 03 01 0F 02 00 05 00 02 FF    ................
02D510:  02 00 02 08 00 01 03 12 02 00 00 00 01 00 00 00    ................
02D520:  FE 33 FE 02 0F 02 00 02 FC FF FF FE 00 0F 02 00    .3..............
02D530:  01 00 01 0F 02 00 05 00 02 FF 02 00 02 FC FF FF    ................
02D540:  01 0F 02 00 05 00 02 FF 02 00 02 08 00 01 FE 33    ...............3
02D550:  FE 02 0F 02 00 02 FE FF FF FE 00 0F 02 00 00 00    ................
02D560:  00 0F 02 00 00 00 01 0F 02 00 05 00 02 FF 02 00    ................
02D570:  02 FE FF FF 03 12 02 00 00 00 0B 00 00 00 03 12    ................
02D580:  02 00 00 00 01 00 00 00 FE 33 FE 0A FF 02 00 13    .........3......
02D590:  00 00 FE FE 35 14 00 33 FE FE 08 FF 02 00 01 01    ....5..3........
02D5A0:  00 05 FF 02 00 00 01 0F 02 00 05 00 02 FF 02 00    ................
02D5B0:  02 FE FF FF 05 FF 02 00 00 01 0F 02 00 05 00 02    ................
02D5C0:  FF 02 00 02 FC FF FF FF FE 33 FE FE 08 FF 02 00    .........3......
02D5D0:  01 03 00 05 FF 02 00 00 03 0E 01 00 00 00 03 00    ................
02D5E0:  00 00 FF FE 33 FE FE 08 FF 02 00 02 07 00 05 FF    ....3...........
02D5F0:  02 00 01 01 04 0B 00 05 00 00 FF 02 00 0B 00 01    ................
02D600:  00 00 03 0F 02 00 00 00 60 EA 00 00 FE 33 FE FE    ........`....3..
02D610:  08 FF 02 00 03 09 00 05 FF 02 00 00 02 00 02 00    ................
02D620:  01 00 00 00 05 FF 02 00 00 02 10 02 00 01 2A 00    ..............*.
02D630:  00 05 FF 02 00 00 03 12 02 00 00 00 80 00 00 00    ................
02D640:  05 FF 02 00 00 02 00 02 00 01 D0 00 00 FF FE 33    ...............3
02D650:  FE 0A FF 02 00 0F 00 00 FE 00 03 01 00 0C 07 01    ................
02D660:  00 02 00 05 00 02 FF 02 00 01 D0 00 00 03 12 02    ................
02D670:  00 00 00 80 00 00 00 FE 33 FE 00 0F 02 00 0B 00    ........3.......
02D680:  02 00 02 00 01 2A 00 00 03 12 02 00 00 00 00 00    .....*..........
02D690:  00 00 FE 03 12 02 00 00 00 01 00 00 00 FE 33 FE    ..............3.
02D6A0:  02 0F 02 00 01 28 00 00 FE 03 12 02 00 00 00 00    .....(..........
02D6B0:  00 00 00 FE 33 FE FE 08 FF 02 00 00 04 00 FF FE    ....3...........
02D6C0:  33 FE 0A FF 02 00 0E 00 00 FE FE 35 0F 00 33 FE    3..........5..3.
02D6D0:  FE 08 FF 02 00 00 05 00 FF FE 35 0E 00 33 FE 0A    ..........5..3..
02D6E0:  FF 02 00 11 00 00 FE 00 03 01 00 0C 03 01 0F 02    ................
02D6F0:  00 05 00 02 FF 02 00 01 28 00 00 03 0F 02 00 00    ........(.......
02D700:  00 60 EA 00 00 FE 33 FE 02 0F 02 00 01 26 00 00    .`....3......&..
02D710:  FE 00 0F 02 00 00 00 01 0F 02 00 05 00 02 FF 02    ................
02D720:  00 01 26 00 00 03 12 02 00 00 00 01 00 00 00 FE    ..&.............
02D730:  35 11 00 35 10 00 33 FE 0A FF 02 00 0C 00 00 FE    5..5..3.........
02D740:  FE 35 0D 00 35 07 00 2E 07 00 24 08 01 35 01 00    .5..5.....$..5..
02D750:  2F 02 00 00 01 00 02 2A 00 33 FE 02 05 02 00 01    /......*.3......
02D760:  AA 00 00 FE 01 05 26 00 05 00 02 FF 02 00 02 04    ......&.........
02D770:  00 1C FE 33 FE 0A FF 02 00 09 00 00 FE 01 03 01    ...3............
02D780:  00 05 00 02 FF 02 00 01 D2 00 00 FE 33 FE FE 08    ............3...
02D790:  FF 02 00 00 06 00 FF FE 33 FE 02 0F 02 00 02 2A    ........3......*
02D7A0:  00 00 FE 01 0F 02 00 05 00 00 FF 02 00 0B 00 00    ................
02D7B0:  00 02 00 0B 00 00 FF 02 00 0B 00 02 00 02 00 01    ................
02D7C0:  2A 00 00 03 12 02 00 00 00 02 00 00 00 00 00 02    *...............
02D7D0:  00 02 00 01 0F 02 00 05 00 02 FF 02 00 01 28 00    ..............(.
02D7E0:  00 03 12 02 00 00 00 0D 00 00 00 03 12 02 00 00    ................
02D7F0:  00 0B 00 00 00 FE 33 FE 0A FF 02 00 07 00 00 FE    ......3.........
02D800:  FF 02 00 05 00 02 04 02 00 02 12 00 00 00 00 02    ................
02D810:  00 02 00 01 0F 02 00 05 00 02 FF 02 00 02 F6 FF    ................
02D820:  FF 03 12 02 00 00 00 0B 00 00 00 05 FF 02 00 00    ................
02D830:  03 12 02 00 00 00 0A 00 00 00 05 FF 02 00 00 03    ................
02D840:  12 02 00 00 00 0B 00 00 00 FF FE 33 FE FE 08 FF    ...........3....
02D850:  02 00 01 03 00 05 FF 02 00 00 03 0E 01 00 00 00    ................
02D860:  02 00 00 00 FF FE 33 FE FE 08 FF 02 00 01 01 00    ......3.........
02D870:  05 FF 02 00 00 01 0F 02 00 05 00 02 FF 02 00 02    ................
02D880:  FE FF FF 05 FF 02 00 00 01 0F 02 00 05 00 02 FF    ................
02D890:  02 00 02 FC FF FF FF FE 35 15 00 33 FE FE 08 FF    ........5..3....
02D8A0:  02 00 02 03 00 05 FF 02 00 00 02 00 02 00 02 F5    ................
02D8B0:  FF FF FF FE 33 FE 0A FF 02 00 15 00 00 FE 00 03    ....3...........
02D8C0:  01 00 0C 07 01 02 01 00 05 00 02 FF 02 00 02 F5    ................
02D8D0:  FF FF 03 0A 01 00 00 00 00 00 00 00 FE 33 FE FE    .............3..
02D8E0:  08 FF 02 00 01 01 00 05 FF 02 00 00 01 0F 02 00    ................
02D8F0:  05 00 02 FF 02 00 02 FE FF FF 05 FF 02 00 00 01    ................
02D900:  0F 02 00 05 00 02 FF 02 00 02 FC FF FF FF FE 33    ...............3
02D910:  FE FE 08 FF 02 00 01 03 00 05 FF 02 00 00 03 0E    ................
02D920:  01 00 00 00 02 00 00 00 FF FE 33 FE FE 08 FF 02    ..........3.....
02D930:  00 02 07 00 05 FF 02 00 01 01 04 0B 00 05 00 00    ................
02D940:  FF 02 00 0B 00 01 FF 02 00 05 00 02 04 02 00 02    ................
02D950:  12 00 00 00 00 02 00 02 00 01 0F 02 00 05 00 02    ................
02D960:  FF 02 00 02 F6 FF FF 03 12 02 00 00 00 0B 00 00    ................
02D970:  00 05 FF 02 00 00 03 12 02 00 00 00 0A 00 00 00    ................
02D980:  05 FF 02 00 00 03 12 02 00 00 00 0B 00 00 00 FF    ................
02D990:  FE 2A 33 FE FE 01 00 02 00 08 00 09 02 01 00 03    .*3.............
02D9A0:  01 02 01 00 05 00 02 FF 02 00 02 F5 FF FF FE 2D    ...............-
02D9B0:  17 00 00 1B 00 01 20 00 33 FE 02 0F 02 00 02 14    ...... .3.......
02D9C0:  00 00 FE 03 12 02 00 00 00 00 00 00 00 FE 33 FE    ..............3.
02D9D0:  0A FF 02 00 04 00 00 FE FE 33 FE 0A FF 02 00 16    .........3......
02D9E0:  00 00 FE FE 35 17 00 2D 18 00 01 0D 00 33 FE 02    ....5..-.....3..
02D9F0:  0F 02 00 02 14 00 00 FE 00 0F 02 00 00 00 01 0F    ................
02DA00:  FE 33 FE 0A FF 02 00 08 00 00 FE FE 35 09 00 33    .3..........5..3
02DA10:  FE 02 0F 02 00 02 2A 00 00 FE 03 12 02 00 00 00    ......*.........
02DA20:  00 00 00 00 FE 33 FE 0A FF 02 00 07 00 00 FE FE    .....3..........
02DA30:  35 08 00 35 07 00 2E 07 00 24 08 02 35 02 00 2F    5..5.....$..5../
02DA40:  02 00 00 02 00 00 2C 00 33 FE 02 05 02 00 01 AA    ......,.3.......
02DA50:  00 00 FE 01 05 26 00 05 00 02 FF 02 00 02 06 00    .....&..........
02DA60:  1E FE 33 FE 0A FF 02 00 09 00 00 FE 01 03 01 00    ..3.............
02DA70:  05 00 02 FF 02 00 01 D2 00 00 FE 33 FE FE 08 FF    ...........3....
02DA80:  02 00 00 06 00 FF FE 33 FE 00 0F 02 00 0B 00 00    .......3........
02DA90:  00 02 00 0B 00 00 FF 02 00 0B 00 02 00 02 00 01    ................
02DAA0:  2A 00 00 03 12 02 00 00 00 02 00 00 00 00 00 02    *...............
02DAB0:  00 02 00 01 0F 02 00 05 00 02 FF 02 00 01 28 00    ..............(.
02DAC0:  00 03 12 02 00 00 00 0D 00 00 00 03 12 02 00 00    ................
02DAD0:  00 0B 00 00 00 FE 01 0F 02 00 05 00 02 FF 02 00    ................
02DAE0:  02 04 00 2A FE 33 FE FE 08 FF 02 00 00 03 00 FF    ...*.3..........
02DAF0:  FE 35 09 00 35 08 00 35 07 00 2E 07 00 24 22 33    .5..5..5.....$"3
02DB00:  FE 02 03 02 00 01 D2 00 00 FE 03 03 01 00 00 00    ................
02DB10:  01 00 00 00 FE 36 0E 02 45 44 49 54 53 54 41 54    .....6..EDITSTAT
02DB20:  2E 44 41 54 20 00 33 FE FE 08 FF 02 00 03 02 00    .DAT .3.........
02DB30:  05 FF 02 00 00 02 00 02 00 01 00 00 00 05 FF 02    ................
02DB40:  00 01 03 0A 0D 00 02 00 00 00 00 00 05 FF 02 00    ................
02DB50:  00 03 12 02 00 00 00 0C 00 00 00 05 FF 02 00 00    ................
02DB60:  03 12 02 00 00 00 0D 00 00 00 05 FF 02 00 00 02    ................
02DB70:  00 02 00 01 D0 00 00 FF FE 33 FE 0A FF 02 00 09    .........3......
02DB80:  00 00 FE 00 03 01 00 0C 07 01 00 02 00 05 00 02    ................
02DB90:  FF 02 00 01 D0 00 00 03 12 02 00 00 00 00 00 00    ................
02DBA0:  00 FE 36 0D 03 45 44 49 54 53 54 41 54 2E 44 41    ..6..EDITSTAT.DA
02DBB0:  54 00 33 FE FE 08 FF 02 00 03 03 00 05 FF 02 00    T.3.............
02DBC0:  00 02 00 02 00 01 00 00 00 05 FF 02 00 01 03 0A    ................
02DBD0:  0C 00 03 00 00 00 00 00 05 FF 02 00 00 03 12 02    ................
02DBE0:  00 00 00 0B 00 00 00 05 FF 02 00 00 03 12 02 00    ................
02DBF0:  00 00 0C 00 00 00 05 FF 02 00 00 02 00 02 00 01    ................
02DC00:  02 00 05 00 02 FF 02 00 02 F6 FF FF 03 12 02 00    ................
02DC10:  00 00 01 00 00 00 FE 33 FE 0A FF 02 00 04 00 00    .......3........
02DC20:  FE FE 33 FE 0A FF 02 00 16 00 00 FE FE 35 18 00    ..3..........5..
02DC30:  2D 19 00 00 13 00 01 08 00 33 FE FE 08 FF 02 00    -........3......
02DC40:  00 02 00 05 FF 02 00 00 01 00 02 00 00 00 01 0F    ................
02DC50:  02 00 05 00 02 FF 02 00 02 08 00 01 FF FE 33 FE    ..............3.
02DC60:  0A FF 02 00 16 00 00 FE FE 35 19 00 2D 1A 00 01    .........5..-...
02DC70:  05 00 33 FE FE 08 FF 02 00 00 02 00 05 FF 02 00    ..3.............
02DC80:  00 03 00 02 00 00 00 FF FF 00 00 FF FE 33 FE 0A    .............3..
02DC90:  FF 02 00 16 00 00 FE FE 35 1A 00 2D 1B 00 01 04    ........5..-....
02DCA0:  00 33 FE FE 08 FF 02 00 00 02 00 05 FF 02 00 00    .3..............
02DCB0:  01 0F 02 00 05 00 02 FF 02 00 02 08 00 01 FF FE    ................
02DCC0:  33 FE 0A FF 02 00 16 00 00 FE FE 35 1B 00 2D 1C    3..........5..-.
02DCD0:  00 00 18 00 01 0A 00 33 FE FE 08 FF 02 00 00 02    .......3........
02DCE0:  00 05 FF 02 00 00 03 12 02 00 00 00 01 00 00 00    ................
02DCF0:  FF FE 33 FE 0A FF 02 00 16 00 00 FE FE 35 1C 00    ..3..........5..
02DD00:  2D 1D 00 02 41 00 01 5A 00 33 FE FE 08 FF 02 00    -...A..Z.3......
02DD10:  00 03 00 FF FE 33 FE 0A FF 02 00 16 00 00 FE FE    .....3..........
02DD20:  35 1D 00 33 FE FE 08 FF 02 00 01 03 00 05 FF 02    5..3............
02DD30:  00 00 03 0E 01 00 00 00 17 00 00 00 FF FE 35 16    ..............5.
02DD40:  00 33 FE 0A FF 02 00 11 00 00 FE FE 35 12 00 35    .3..........5..5
02DD50:  04 00 2E 02 00 24 35 02 00 3B 00 0F 02 00 00 00    .....$5..;......
02DD60:  00 0F 02 00 00 00 01 0F 02 00 05 00 02 FF 02 00    ................
02DD70:  02 FE FF FF 03 12 02 00 00 00 0B 00 00 00 03 12    ................
02DD80:  73 5B 43 68 61 72 50 6F 73 5D 3D 43 41 50 28 4D    s[CharPos]=CAP(M
02DD90:  61 74 63 68 43 68 61 72 29 29 20 54 48 45 4E 0D    atchChar)) THEN.
02DDA0:  0A 09 09 09 09 4D 61 74 63 68 43 68 61 72 4E 6F    .....MatchCharNo
02DDB0:  3A 3D 31 3B 0D 0A 09 09 09 09 73 61 76 65 63 75    :=1;......savecu
02DDC0:  72 70 6F 73 28 66 29 3B 0D 0A 09 09 09 09 57 48    rpos(f);......WH
02DDD0:  49 4C 45 20 28 4D 61 74 63 68 43 68 61 72 4E 6F    ILE (MatchCharNo
02DDE0:  3C 53 74 72 69 6E 67 4C 65 6E 29 0D 0A 09 09 09    <StringLen).....
02DDF0:  09 20 20 20 20 41 4E 44 20 28 41 64 76 61 6E 63    .    AND (Advanc
02DE00:  D0 00 00 FF FE 33 FE 0A FF 02 00 0B 00 00 FE 00    .....3..........
02DE10:  03 01 00 0C 07 01 00 02 00 05 00 02 FF 02 00 01    ................
02DE20:  D0 00 00 03 12 02 00 00 00 00 00 00 00 FE 33 FE    ..............3.
02DE30:  FE 08 FF 02 00 04 01 00 05 FF 02 00 00 03 12 02    ................
02DE40:  00 00 00 00 00 00 00 05 FF 02 00 00 00 0F 02 00    ................
02DE50:  01 00 01 0F 02 00 05 00 02 FF 02 00 FC 00 00 00    ................
02DE60:  03 12 02 00 00 00 01 00 00 00 FF FE 36 1C 04 20    ............6.. 
02DE70:  43 6F 75 6C 64 20 6E 6F 74 20 6F 70 65 6E 20 73    Could not open s
02DE80:  74 61 74 75 73 20 66 69 6C 65 00 33 FE FE 08 FF    tatus file.3....
02DE90:  02 00 06 07 00 05 FF 02 00 01 03 0A 1B 00 04 00    ................
02DEA0:  00 00 00 00 05 FF 02 00 00 03 12 02 00 00 00 1A    ................
02DEB0:  00 00 00 05 FF 02 00 00 03 12 02 00 00 00 1B 00    ................
02DEC0:  00 00 FF FE 33 FE 02 03 02 00 01 D2 00 00 FE 03    ....3...........
02DED0:  03 01 00 00 00 00 00 00 00 FE 35 0B 00 35 0A 00    ..........5..5..
02DEE0:  35 09 00 35 08 00 33 FE 02 0F 02 00 01 26 00 00    5..5..3......&..
02DEF0:  FE 03 0F 02 00 00 00 60 EA 00 00 FE 23 35 07 00    .......`....#5..
02DF00:  3B 60 EA 00 00 FE 33 FE 02 0F 02 00 01 26 00 00    ;`....3......&..
02DF10:  FE 00 0F 02 00 00 00 01 0F 02 00 05 00 02 FF 02    ................
02DF20:  00 01 26 00 00 03 12 02 00 00 00 01 00 00 00 FE    ..&.............
02DF30:  35 11 00 35 10 00 33 FE 0A FF 02 00 0C 00 00 FE    5..5..3.........
02DF40:  FE 35 0D 00 35 07 00 2E 07 00 24 08 01 35 01 00    .5..5.....$..5..
02DF50:  2F 02 00 00 01 00 02 2A 00 33 FE 02 05 02 00 01    /......*.3......
02DF60:  AA 00 00 FE 01 05 26 00 05 00 02 FF 02 00 02 04    ......&.........
02DF70:  00 1C FE 33 FE 0A FF 02 00 09 00 00 FE 01 03 01    ...3............
02DF80:  74 29 20 0D 0A 09 45 4C 53 49 46 20 62 79 3E 48    t) ...ELSIF by>H
02DF90:  49 47 48 28 54 65 78 74 29 20 54 48 45 4E 20 62    IGH(Text) THEN b
02DFA0:  79 3A 3D 30 20 45 4E 44 3B 0D 0A 09 4F 70 74 69    y:=0 END;...Opti
02DFB0:  6F 6E 4E 6F 3A 3D 62 79 0D 0A 09 45 4E 44 20 43    onNo:=by...END C
02DFC0:  68 61 6E 67 65 4F 70 74 69 6F 6E 3B 0D 0A 50 52    hangeOption;..PR
02DFD0:  4F 43 45 44 55 52 45 20 43 68 61 6E 67 65 50 6F    OCEDURE ChangePo
02DFE0:  73 3B 0D 0A 0D 0A 28 2A 09 43 68 61 6E 67 65 20    s;....(*.Change 
02DFF0:  70 6F 73 69 74 69 6F 6E 20 75 73 69 6E 67 20 66    position using f
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:  6D 64 20 61 3A 73 63 72 65 65 6E 64 75 2E 64 65    md a:screendu.de
02E210:  66 0D 0A 6D 64 20 61 3A 72 65 73 65 74 64 69 73    f..md a:resetdis
02E220:  2E 64 65 66 0D 0A 6D 64 20 61 3A 6D 61 6B 65 65    .def..md a:makee
02E230:  64 69 74 2E 64 65 66 0D 0A 6D 64 20 61 3A 65 64    dit.def..md a:ed
02E240:  69 74 73 74 61 74 2E 64 65 66 0D 0A 6D 32 20 61    itstat.def..m2 a
02E250:  3A 6D 61 6B 65 65 64 69 74 2E 6D 6F 64 0D 0A 6D    :makeedit.mod..m
02E260:  64 20 61 3A 65 64 69 74 63 6F 6E 74 2E 64 65 66    d a:editcont.def
02E270:  0D 0A 6D 64 20 61 3A 6D 61 63 72 6F 73 2E 64 65    ..md a:macros.de
02E280:  66 0D 0A 6D 64 20 61 3A 6D 65 6E 75 2E 64 65 66    f..md a:menu.def
02E290:  0D 0A 6D 64 20 61 3A 64 6F 6D 65 6E 75 2E 64 65    ..md a:domenu.de
02E2A0:  66 0D 0A 6D 64 20 61 3A 65 64 69 74 64 69 73 70    f..md a:editdisp
02E2B0:  2E 64 65 66 0D 0A 6D 64 20 61 3A 73 65 74 75 70    .def..md a:setup
02E2C0:  63 61 6C 2E 64 65 66 0D 0A 6D 64 20 61 3A 65 64    cal.def..md a:ed
02E2D0:  69 74 63 6F 6E 74 2E 64 65 66 0D 0A 6D 64 20 61    itcont.def..md a
02E2E0:  3A 6B 65 79 62 6F 61 72 64 2E 64 65 66 0D 0A 6D    :keyboard.def..m
02E2F0:  32 20 61 3A 6D 65 6E 75 2E 6D 6F 64 0D 0A 6D 32    2 a:menu.mod..m2
02E300:  20 61 3A 65 64 69 74 73 74 61 74 2E 6D 6F 64 0D     a:editstat.mod.
02E310:  0A 6D 32 20 61 3A 6D 61 63 72 6F 73 2E 6D 6F 64    .m2 a:macros.mod
02E320:  0D 0A 6D 32 20 61 3A 64 6F 6D 65 6E 75 2E 6D 6F    ..m2 a:domenu.mo
02E330:  64 0D 0A 6D 32 20 61 3A 65 64 69 74 64 69 73 70    d..m2 a:editdisp
02E340:  2E 6D 6F 64 0D 0A 6D 32 20 61 3A 65 64 69 74 63    .mod..m2 a:editc
02E350:  6F 6E 74 2E 6D 6F 64 0D 0A 6D 32 20 61 3A 6D 65    ont.mod..m2 a:me
02E360:  2E 6D 6F 64 0D 0A 6D 32 20 61 3A 73 63 72 65 65    .mod..m2 a:scree
02E370:  6E 64 75 2E 6D 6F 64 0D 0A 6D 32 20 61 3A 72 65    ndu.mod..m2 a:re
02E380:  73 65 74 64 69 73 2E 6D 6F 64 0D 0A 6D 32 20 61    setdis.mod..m2 a
02E390:  3A 6B 65 79 62 6F 61 72 64 2E 6D 6F 64 0D 0A 6D    :keyboard.mod..m
02E3A0:  32 20 61 3A 73 65 74 75 70 63 61 6C 2E 6D 6F 64    2 a:setupcal.mod
02E3B0:  0D 0A 6D 32 20 61 3A 6D 61 63 72 6F 73 2E 6D 6F    ..m2 a:macros.mo
02E3C0:  64 0D 0A 6D 32 20 61 3A 6D 61 6B 65 65 64 69 74    d..m2 a:makeedit
02E3D0:  2E 6D 6F 64 0D 0A 6D 32 20 61 3A 6D 65 2E 6D 6F    .mod..m2 a:me.mo
02E3E0:  64 0D 0A 1A 0D 0A 6D 32 20 61 3A 73 63 72 65 65    d.....m2 a:scree
02E3F0:  6E 64 75 2E 6D 6F 64 0D 0A 6D 32 20 61 3A 72 65    ndu.mod..m2 a:re
02E400:  02 00 07 00 00 FE FE 35 08 00 33 FE 0A FF 02 00    .......5..3.....
02E410:  0A 00 00 FE 00 03 01 00 0C 06 01 0F 02 00 05 00    ................
02E420:  02 FF 02 00 01 28 00 00 01 0F 02 00 05 00 00 FF    .....(..........
02E430:  02 00 0B 00 02 00 02 00 01 2A 00 00 03 12 02 00    .........*......
02E440:  00 00 00 00 00 00 FE 33 FE 0A FF 02 00 0C 00 00    .......3........
02E450:  FE 00 03 01 00 0C 02 01 0F 02 00 05 00 00 FF 02    ................
02E460:  00 0B 00 02 00 02 00 01 2A 00 00 03 12 02 00 00    ........*.......
02E470:  00 00 00 00 00 03 12 02 00 00 00 08 00 00 00 FE    ................
02E480:  33 FE 00 0F 02 00 0B 00 02 00 02 00 01 2A 00 00    3............*..
02E490:  03 12 02 00 00 00 00 00 00 00 FE 00 0F 02 00 00    ................
02E4A0:  00 01 0F 02 00 05 00 00 FF 02 00 0B 00 02 00 02    ................
02E4B0:  00 01 2A 00 00 03 12 02 00 00 00 00 00 00 00 03    ..*.............
02E4C0:  12 02 00 00 00 01 00 00 00 FE 33 FE FE 08 FF 02    ..........3.....
02E4D0:  00 00 04 00 FF FE 33 FE 0A FF 02 00 0B 00 00 FE    ......3.........
02E4E0:  FE 35 0C 00 33 FE 02 0F 02 00 01 28 00 00 FE 03    .5..3......(....
02E4F0:  0F 02 00 00 00 60 EA 00 00 FE 35 0B 00 35 0A 00    .....`....5..5..
02E500:  35 09 00 35 06 00 2E 06 00 24 08 06 35 06 00 2F    5..5.....$..5../
02E510:  02 00 00 06 00 00 04 00 33 FE 0A FF 02 00 09 00    ........3.......
02E520:  00 FE 00 03 01 00 0C 02 01 0F 02 00 05 00 02 FF    ................
02E530:  02 00 01 26 00 00 03 0F 02 00 00 00 60 EA 00 00    ...&........`...
02E540:  FE 33 FE FE 08 FF 02 00 00 05 00 FF FE 33 FE 0A    .3...........3..
02E550:  FF 02 00 08 00 00 FE FE 35 09 00 33 FE 02 0F 02    ........5..3....
02E560:  00 01 28 00 00 FE 03 0F 02 00 00 00 60 EA 00 00    ..(.........`...
02E570:  FE 35 08 00 33 FE 0A FF 02 00 0B 00 00 FE 00 03    .5..3...........
02E580:  01 00 0C 03 01 0F 02 00 05 00 02 FF 02 00 01 28    ...............(
02E590:  00 00 03 0F 02 00 00 00 60 EA 00 00 FE 33 FE FE    ........`....3..
02E5A0:  08 FF 02 00 03 0D 00 05 FF 02 00 00 02 00 02 00    ................
02E5B0:  01 00 00 00 05 FF 02 00 00 03 12 02 00 00 00 00    ................
02E5C0:  00 00 00 FF FE 33 FE 02 0F 02 00 01 26 00 00 FE    .....3......&...
02E5D0:  03 12 02 00 00 00 00 00 00 00 FE 35 0B 00 35 0A    ...........5..5.
02E5E0:  00 35 0C 00 33 FE 0A FF 02 00 0D 00 00 FE 00 03    .5..3...........
02E5F0:  01 00 0C 03 01 0F 02 00 05 00 02 FF 02 00 01 28    ...............(
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 4A 03 E6 05 80 08 1B 0B B6 0D 51 10 EB    ...J.........Q..
02F920:  12 86 15 BA 18 AF 00 4A 03 E4 05 7D 08 17 0B B1    .......J...}....
02F930:  0D 4C 10 E7 12 82 15 BC 18 AE 00 49 03 E4 05 7E    .L.........I...~
02F940:  08 18 0B B3 0D 4F 10 EA 12 85 15 BA 18 AF 00 4B    .....O.........K
02F950:  03 E5 05 7E 08 17 0B B1 0D 4D 10 E9 12 86 15 B9    ...~.....M......
02F960:  18 AE 00 48 03 E3 05 7E 08 1A 0B B5 0D 4F 10 E9    ...H...~.....O..
02F970:  12 84 15 B9 18 AE 00 4A 03 E3 05 7C 08 16 0B B0    .......J...|....
02F980:  0D 4B 10 E5 12 81 15 B8 18 AF 00 4A 03 E3 05 7C    .K.........J...|
02F990:  08 17 0B B2 0D 4E 10 E8 12 82 15 B8 18 B0 00 4C    .....N.........L
02F9A0:  03 E6 05 7E 08 16 0B B0 0D 4C 10 E8 12 84 15 B6    ...~.....L......
02F9B0:  18 AD 00 48 03 E2 05 7D 08 17 0B B2 0D 4D 10 E7    ...H...}.....M..
02F9C0:  12 82 15 B8 18 AE 00 4A 03 E4 05 7B 08 15 0B AE    .......J...{....
02F9D0:  0D 49 10 E4 12 7F 15 B5 18 AE 00 47 03 E1 05 7A    .I.........G...z
02F9E0:  08 14 0B AE 0D 49 10 E4 12 7F 15 B3 18 AF 00 4B    .....I.........K
02F9F0:  03 E4 05 7D 08 16 0B AF 0D 49 10 E5 12 80 15 B2    ...}.....I......
02FA00:  18 B0 00 49 03 E3 05 7C 08 17 0B B2 0D 4D 10 E7    ...I...|.....M..
02FA10:  12 81 15 B4 18 AF 00 4B 03 E6 05 7E 08 16 0B AF    .......K...~....
02FA20:  0D 49 10 E5 12 80 15 B1 18 AE 00 47 03 E1 05 7A    .I.........G...z
02FA30:  08 14 0B AD 0D 47 10 E3 12 7D 15 B0 18 AE 00 49    .....G...}.....I
02FA40:  03 E3 05 7D 08 16 0B B0 0D 49 10 E3 12 7F 15 B0    ...}.....I......
02FA50:  18 AF 00 48 03 E1 05 79 08 13 0B AE 0D 49 10 E3    ...H...y.....I..
02FA60:  12 7F 15 B0 18 B0 00 4A 03 E5 05 7E 08 17 0B AF    .......J...~....
02FA70:  0D 49 10 E4 12 80 15 AC 18 AF 00 48 03 E1 05 7A    .I.........H...z
02FA80:  08 14 0B AF 0D 4A 10 E4 12 7E 15 B0 18 AF 00 4A    .....J...~.....J
02FA90:  03 E5 05 7F 08 18 0B B0 0D 4A 10 E4 12 80 15 AF    .........J......
02FAA0:  18 AE 00 47 03 DF 05 78 08 12 0B AB 0D 46 10 E1    ...G...x.....F..
02FAB0:  12 7C 15 AB 18 B0 00 48 03 E2 05 7C 08 15 0B AE    .|.....H...|....
02FAC0:  0D 47 10 E1 12 7C 15 AB 18 AD 00 45 03 DD 05 75    .G...|.....E...u
02FAD0:  08 10 0B AA 0D 47 10 E1 12 7B 15 AC 18 AF 00 4A    .....G...{.....J
02FAE0:  03 E5 05 7D 08 15 0B AD 0D 48 10 E2 12 7D 15 AA    ...}.....H...}..
02FAF0:  18 AD 00 46 03 DF 05 77 08 0E 0B A6 0D 41 10 DC    ...F...w.....A..
02FB00:  12 78 15 A7 18 AF 00 48 03 E1 05 7C 08 14 0B AC    .x.....H...|....
02FB10:  0D 45 10 DF 12 79 15 A8 18 AD 00 45 03 DC 05 74    .E...y.....E...t
02FB20:  08 0E 0B A9 0D 44 10 DE 12 79 15 A8 18 AE 00 48    .....D...y.....H
02FB30:  03 E2 05 7C 08 14 0B AD 0D 46 10 E0 12 7B 15 A4    ...|.....F...{..
02FB40:  18 AF 00 47 03 DF 05 76 08 0E 0B A7 0D 41 10 DB    ...G...v.....A..
02FB50:  12 76 15 A5 18 AE 00 47 03 DF 05 79 08 12 0B AA    .v.....G...y....
02FB60:  0D 44 10 DD 12 78 15 A4 18 AD 00 45 03 DD 05 74    .D...x.....E...t
02FB70:  08 0D 0B A7 0D 41 10 DC 12 78 15 A2 18 AE 00 47    .....A...x.....G
02FB80:  03 E0 05 7B 08 14 0B AB 0D 44 10 DD 12 77 15 A1    ...{.....D...w..
02FB90:  18 AF 00 47 03 DE 05 75 08 0F 0B A7 0D 40 10 D9    ...G...u.....@..
02FBA0:  12 74 15 A2 18 AD 00 46 03 DF 05 77 08 10 0B AA    .t.....F...w....
02FBB0:  0D 43 10 DC 12 76 15 A1 18 AD 00 46 03 DE 05 75    .C...v.....F...u
02FBC0:  08 0D 0B A5 0D 40 10 DB 12 78 15 9F 18 AD 00 46    .....@...x.....F
02FBD0:  03 E0 05 79 08 14 0B AA 0D 42 10 DC 12 75 15 9F    ...y.....B...u..
02FBE0:  18 AD 00 44 03 DB 05 72 08 0C 0B A4 0D 3C 10 D5    ...D...r.....<..
02FBF0:  12 70 15 A1 18 AC 00 44 03 DD 05 74 08 0F 0B A7    .p.....D...t....
02FC00:  0D 41 10 D9 12 73 15 9E 18 AD 00 46 03 DD 05 74    .A...s.....F...t
02FC10:  08 0E 0B A5 0D 3F 10 DA 12 74 15 9E 18 AC 00 45    .....?...t.....E
02FC20:  03 DE 05 76 08 13 0B AB 0D 46 10 DC 12 74 15       ...v.....F...t.
RESULT OF SEARCH :
PRO=371   CHEA=0   COD=28   MUSI=0   COP=14   GRA=74   WRIT=139   198=7   199=0   STARTER=0   KBI=0   CAAV=0   L.TOURNIER=0  
EXTENDED CPC DSK File    SAMdisk150708(  RAFBGCHDIE  RAFBGCHDIE  RAFBGCHDIEWP   
   COMSD      COMWD      COM!README!ED!  -2JULY1987 -BACKUPNOW!-VERSION124DOMENU
  DEFDOMENU  MOD9EDITCONTDEFRECMPED SUBEDITCONTMODm#$%&'()*+,-./0EDITDISPDEF8SCR
EENIOMOD- !"EDITDISPMOD3ABCDEFEDITSTATDEFGr+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) $ LEDITSTATMODHIJMAKEEDITMOD12345679KeKEYBOARDDEFLKEYBOARDMODDMNOPQRSTUMAC
ROS  DEFVMACROS  MODOWXYZMAKEEDITDEFabcdMAKEEDITMODfghiMAKEEDITMOD uvwxME      M
OD&yzMENU    DEFMENU    MODRESETDISDEFRESETDISMODSCREENDUDEFSCREENDUMOD2! !2U2  
!  2"V####2X6 A!!e(G2 eG!eA. (+4(1nf( +#M7NU2U(# .#!eGX8% (nfVutXNWEnfut!eGR(( X
(SCREENIODEF SCREENIOBAK-SETUPCALDEFSETUPCALMOD RECMPED BAKEDITSTATRELMAKEEDITRE
LKEDITCONTRELMACROS  RELMENU    REL£DOMENU  RELEDITDISPRELSETUPCALRELKEYBOARDREL
RECMPED SUB# 00P*Vnf"YG72KY28y( #kbG(M#.!NK!d Ur+ x # A  0!jR0SD V1.0 by Adam De
nning (C) HiSoft 1986  $$ S$  $R $  $K  Recs $  Disc free space $function i sour
c an Man  librar formy1-1  DO  Gotoxy(x2,i)  ScreenControl(Vertical)  END  FOR i
y2+1 TO y1-1 DO  Gotoxy(x1,i)  ScreenControl(Vertica! !  !222  2!G7£o(! !$  q(a 
2y Wp((2R8#!(Gw#2# .# WDEL V2.0 (C) 1987 HiSoft  $Drive is R/O!$No matching file
s$  Cannot delete!$  Delete (Y/N/A/Q/P) $*"QRhB8KGB h2!l #- #Q(B #  2mh2BF!m  ! 
 ! !!Q(G2 !Q!LB!"L# B( -B qa 2b(1w(,y 2p(!B2(22BQB2#bk6"!F# #(h2(4!+6B#6A#V6K"!#
3  RAFBGCHDIE**    The submit file RECMPED.SUB can be used to recompile the edit
or    SUBMIT RECMPED    the distributed form of this file assumes that the files
 are all on the  current drive.  You may want to add "B" in front the filenames 
being  compiled (or add whatever drive name you are using).  Note that SUBMIT on
ly  works from drive A on many computers.   Mapping your keyboard.   If you want
 to modify the editor to use your keyboard arrow keys and function keys, you wil
l want to edit the module KEYBOARD.MO                           Notes for       
                     FTL Modula-2 Editor/ToolKit disc                           
 Workman & Associates      This disc contains the entire sources for the FTL Mod
ula-2 editor and a number of utilities which you may find useful.       See the 
end of this file for more details on the utilities.  They are    COMPDIRa direct
ory compare program.  This program is invaluable to software developers who need
 to ensure that their distribution discs are complete and contD,  then recompile
 the editor (see above).   Editor Cook's Guide.    The main modules in the edito
r are    METhe top level module.  EDITCONTControls the screen display.  EDITDISP
Some other screen display procedures--essentially part  of EDITCONT, kept separa
te for ease of maintenance.  MAKEEDITPerforms the changes to the file(s) being e
dited.  KEYBOARDAccepts input from the keyboard and calls appropriate  routines 
to perform the requested edit functions.  DOMENUSupports the options menu (that 
ain the latest versions of files. See the file COMPDIR.MOD and instructions belo
w.  COMPAREan Ascii file comparison program.  This program does line-by- line co
mparisons of files.  It uses a powerful comparison  method which rarely gets los
t, and which can detect block moves.  See the file COMPARE.MOD and the documenta
tion below.   CATa generalised listing module intended primarily for use on  RCP
Ms.  It can do tab expansion, line numbering, string search, position by line nu
mber and wild cais, open file,  comp/exit, etc).  EDITSTATPicks up the file posi
tion for a file when it's opened.  MACROSHandles macro expansion and definition,
 including the  learn mode.  Makes and saves them "on the fly" during edits, too
.  SETUPCAL        Editor uses this module to call the compilers.  See  also the
 module CHAIN for another example of this.   Note for users or abusers of dumb t
erminals.    You must rename EDITCONT.DMB and EDITDISP.DMB to end in .MOD before
  recompiling the dumb editor (without inrds.   See the file CAT.MOD and the doc
umentation below.      PATTERNThis is a pattern matching module which matches co
mplex  (even recursive!) patterns.  See PATTERN.DEF for description  of use, and
 TestPat.MOD as an example.   SCREENIOThe screen input-output routines used by t
he editor.  The  standard version of ScreenIO (SCREENIO.MOD), plus some memory  
mapped versions are supplied.  SCREENIO.OSB is for the Osborne  1, SCREENIO.MBE 
is for the MicroBee, and SCREENIO.EAR is for  the Earth sert/delete line or clea
r to  end of line).  Mind you don't overwrite your only copy of ME.COM  while ex
perimenting--and copy ME.COM from your original disks if  you have any doubts.  
 If strapped for room, or just experimenting, MACROS.MBE has no  function key co
de and therefore is smaller.  As before, rename  it to MACROS.MOD before recompi
ling.   SAMPLE PROGRAM INSTRUCTIONS    CAT.MOD      A file display program witho
ut the shortcomings of 'type'.  CAT can   Number output lines  Page outpComputer
s' Z80 Card.  To produce a memory mapped  version, start with the MicroBee, as t
hat is the most standard.   To replace the standard version of ScreenIO by a mem
ory mapped  version, simply compile the memory mapped implementation module  in 
place of the standard implementation module--no changes are  needed in the defin
ition module.  NOTE the Osborne version is  for Osborne Is only, NOT the Executi
ve.  The Vixen is also  slightly different.   Compiling the editor. ************
*******  RAFBGCHDIEut  Expand tabs to spaces  Wrap lines for listing to terminal
s without auto-line wrap  Reposition by line number or by string search  Use wil
d cards on the command line  See non-printing characters in hex (other than CR/L
F/TAB)    CAT is not a CP/M implementation of the cat program on UNIX it is more
 like  UNIX's MORE.    To run the program    CAT   file list /options  or  CAT  
 file list options    The options may also be omitted.  The "file list" is a lis
t of file names or  wild cards which matcstring is searched for again.    NToggl
e line numbering option.  IToggle tab expansion option.  WToggle software line w
rap option.  If the W is followed by a  number, the number resets the screen wid
th.  PToggle page mode. If the P is followed y a number, it resets  the page len
gth.  Note that the first P on any command line  always causes page mode to be c
leared, as page mode is always  enabled when the command line is processed.  Hen
ce, to just  change the page length, you must do P20P (say).h file names.  For e
xample    CAT b*.def b*.mod   will list the definition files, then the module fi
les.    An option is zero or more alphabetics.  Some of the alphabetics may be  
followed by a number.  If a number is included, it must immediately follow  the 
option character--it must not be separated.    The options are    P - use page m
ode.  At the end of every page of output, CAT will  prompt for a command (see be
low).  The option may be followed by the number  of lines to a page.  Default le
ngth i  QQuit this file.  Ctrl CReturn to CP/M.      Compare - compare two Ascii
 files line by line      This program displays the differences between two files
.  It presents the  output in a reasonably readable form (it would look beaut on
 a colour printer).  The program is based on a method described by Paul Heckel i
n 'A Technique  for Isolating Differences between Files', Communications of the 
ACM, Vol 21  No 4, April 1978, pp 264-268.  To run the program   s 24. W - Set s
oftware line wrap.  Lines longer than the line width will be  wrapped around by 
the software.  This is useful if your terminal will not  perform hardware line w
raps.  It also prevents any text falling off the top  of screen as the result of
 hardware line wraps.  "W" may be followed by the  number of columns on the scre
en.  Default width is 80.  I - Expand tabs.  Tabs are expanded to an appropriate
 number of spaces.  N - Number lines. Each line is preceded by a line number.   
 Examples    COMPARE old file,new file,List file    The third file is optional. 
 If omitted, the output is to the printer.  You  can use device names (e.g. TTY)
 as well as disc file names.    The two files are compared line by line.  Lines 
which have been deleted from  the old file are printed in italics.  Inserted lin
es are printed in bold.  Lines which have been moved to a new position are print
ed in their new  position surrounded by lines of asterisks.  You may need to pat
ch the printer  control codes for your priCAT  b*.def/NP    Use page mode and nu
mber the lines.    CAT  b*.def/P16W64N    Use page mode and software wrap with p
agelength 16 and width 64.    CAT Commands    At the end of a page of output in 
page mode, Cat will stop and ask for a  command.  You may then enter any of the 
commands described below.  In fact, you can enter a command character at any tim
e.  When Cat determines  that a character has been typed, it will bring up the '
Command  ' prompt,  display the character you typed, and go into panter.  These 
are very near the beginning of the  program (see the .MOD file).  Each control c
ode can be up to 8 characters long  and is terminated by a value of 0 if less th
an characters are required.  Naturally, you may also change the .COM file.   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.    How the program works      For each line, a hash total ige
 mode.  Multiple commands may  be placed on a line.  The commands are           
     Display some help information.  number         Restart listing from given l
ine number.  + or - number  Advance (or retire) by the given number of lines.  /
string/       Restart listing from next occurence of string. The delimiters  can
 be any printing non-alphanumeric character.    A number and a search string can
 be combined to search from a  given line number.  If no string is entered ("//"
), the  previously entered   RAFBGCHDIEs calculated.  Then the unique lines in e
ach file  are identified.  When a unique line matches a unique line in the secon
d file,  the two lines are cross-linked.    Next, lines adjacent to cross-linked
 lines are compared and, if identical,  they are linked.  This grows the area of
 linking outwards from pairs of   matching unique lines (and also from the begin
ning and end of the files) until  as many lines as possible have been cross-link
ed.    Finally the text is scanned and printed out.  Lines in the new f mutually
 exclusive.    CIf file names match, compare the file contents as well.  EOutput
 file names which match to list file.  AOutput file names which have been added 
to the second list.  DOutput file names which have been deleted from the first l
ist.  MOutput file names which differ in contents.    These options may be combi
ned.  Examples    To check that every '.mod' file has a '.rel' file   Compdir b*
.mod b*.rel/n    To write the deleted names to a file so that the missing  '.rel
'  files may ile which are  not linked to anything in the old file are insertion
s.  Unlinked lines in the  old file are deletions.  Lines in the new file which 
link to out-of-order old  file lines are parts of a block move.    Further Work 
   A number of things can be done with this program    1/  Make it work on three
 files.  Often, a new version of a program is created (say, for another machine)
 and  then the original version is modified.  The problem is then inserting the 
 new changes to the original file into thebe discovered    Compdir b*.mod b*.rel
 bcomps.sub/nd    If you intend to regenerate those files, edit the file to add 
"M2 " to the  start of each line.  If you are using the Modula-2 editor, do one 
in learn  mode and then do the rest with a repeated execution of the defined mac
ro.    To create a list of all definition and implementation modules on disc B  
  Compdir b*.mod b*.def t.lst/ade    Happy Modulating!!      DF      COM CRDISKC
OMPEXE b other version, while retaining  any changes made toproduce that version
.  Probably fairly difficult to do.   2/   Make it work across machines.  Someti
mes, one of the files is on another machine.  It would be nice to  have the old 
file on the remote machine and only transfer the checksums and  the lines which 
have been deleted across the link.  Fairly easy, but  reliability of the link wi
ll cause problems.  3/   Write a pair of extract/merge programs.  Continuing on 
from point 2, write a program to creatDEFINITION MODULE DoMenu    (*Menu process
or for editor*)  FROM Files IMPORT FileName,FILE,Close,Create  PROCEDURE Redispl
ay  PROCEDURE DoMenuOp  PROCEDURE Open(fnFileNamePosCARDINAL)  PROCEDURE GetStri
ng(VAR sARRAY OF CHARVAR lenCARDINALpromptARRAY OF CHAR)  END DoMenu.  ed primar
ily for use on  RCPMs.  It can do tab expansion, line numbering, string search, 
position by line number and wild cae a differences file  and another to merge th
e differences on a remote machine.  This should be  quite easy, given 2.    Alto
gether, these three extensions would be about right for a term project for  one 
student.  Of course, if anyone out there wants to do this, we'll happily  give a
uthor's credit.    CompDir - Compare two directories      CompDir compares disc 
directories.  The comparison may use the full file  name, just the base name, or
 (not very useful) just the extension.  Optionally, you may create a file contai
ning a list of the file names added,  deleted or matching.    The command to cal
l the program takes the form    COMPDIR wild card, wild card , list file /option
s    Where each wild card produces one of the lists to compare.    To compare tw
o discs    COMPDIR a*.* b*.*    Options are any of the following    TCompare onl
y file extension (by default, the whole name is compared).  Ncompare only file n
ame--base name, minus the extension.    T and N are  RAFBGCHDIE(*Perform menu op
erations    Copyright,  Dave Moore FTL Modula-2 1986    26 June 86  D Moore  Put
 BackSpace inside IF to improve  backspacing performance of GetString    *)  IMP
LEMENTATION MODULE DoMenu    (*menu processor for editor    contains all command
s which are performed from a menu*)  FROMTerminal IMPORT Write,WriteString,ReadS
tring,ReadBuffer,WriteLn,Read,  BusyRead,ClearCharBuffer  FROM MakeEdits IMPORT 
OpenFile,CloseFile,AbandonFile,CallWithFile,FileType,LabelOp  FROMMenu IMPORTesF
ilesOpened,TRUE,CHR(Windows))  SetLeftMarg(FilesFilesOpened,Windows,  curxWindow
s,curyWindows)  UpdatedFilesOpenedFALSE  ChangeWindow(Windows)  END(*replyvariou
s values*)  END(*fn1' '*)      Redisplay      END Open    PROCEDURE SetBoxPos(VA
R yCARDINAL)  BEGIN  IF Windows2 THEN y13*(CurrentWindow-1)  ELSIF CurrentWindow
0 THEN y0  ELSEy8*(CurrentWindow-1) END  END SetBoxPos  VARx,y,charsCARDINAL  PR
OCEDURE BackSpace  BEGIN  Write(08x)  Write(' GetFromMenu,MenuText  FROM EditCon
trol IMPORT CurrentWindow,CurrentFile,FilesOpened,curx,cury,Files,  ElideWindow,
ChangeWindow,ResetScreenPos,Updated,LeftMargin,  MakeWindow,WindowFile,FilePosit
ion  FROMEditDisplay IMPORT ErrorMessage,SetWindows,DisplayFile,SetLeftMarg,Wind
ows  FROMMacros IMPORT StoreMacros  FROMScreenDummy IMPORT ClearScreen,DrawBox,G
otoxy  FROMResetDisc IMPORT ResetAllDiscs  VARTextARRAY 0..9 OF MenuText   'Open
  File ',  'Save  File ',  'Close File ',   ')  Write(08x)  DEC(chars)  END Back
Space  PROCEDURE GetString(VAR sARRAY OF CHARVAR lenCARDINALpromptARRAY OF CHAR)
  BEGIN  SetBoxPos(y)  DrawBox(11,y+3,14+HIGH(s)+HIGH(prompt),y+1)  Gotoxy(12,y+
2)  FOR x0 TO HIGH(prompt) DO Write(promptx) END  FOR x0 TO HIGH(s) DO Write(' '
) END  Gotoxy(12+HIGH(prompt)+1,y+2)  len0ch0x  chars0  LOOP  IF lenHIGH(s) THEN
 EXIT END  REPEAT  BusyRead(ch)  UNTIL ch0x  IF ch0dx THEN EXIT END  IF (ch08x) 
OR (ch13'Split File ',  'Compile    ',  'Comp/Exit  ',  'Quit File  ',  'Quit Wi
ndow',  'Exit Edit  ',  'Reset Disc '  cCARDINAL  replyINTEGER  iCARDINAL  chCHA
R  PROCEDURE Redisplay  BEGIN  SetWindows(Windows)  FOR i1 TO Windows DO  Displa
yFile(FilesWindowFilei,i,curxi,curyi)  END  ResetScreenPos  END Redisplay  PROCE
DURE ClearDisplay  BEGIN  Gotoxy(0,0)  ClearScreen  END ClearDisplay  PROCEDURE 
Really()BOOLEAN  BEGIN  WriteString(' (Y/N) ')  REx) OR (ch7fx) THEN  IF len0 TH
EN   DEC(len)  IF slen' ' THEN BackSpace END  BackSpace  END  ELSIF ch18x THEN  
FOR len1 TO chars DO BackSpace END  len0  chars0  ELSE  IF ch' ' THEN   Write(''
)  Write(CHR(ORD(ch)+64))  INC(chars)  ELSE Write(ch) END  INC(chars)  slench  I
NC(len)  END  END(*WHILE*)  FOR xlen TO HIGH(s) DO sx' ' END  END GetString    P
ROCEDURE DoMenuOp  VARyCARDINAL  fnFileName  PRPEAT  BusyRead(ch)  chCAP(ch)  UN
TIL (ch'Y') OR (ch'N')  Write(ch)  RETURN ch'Y'  END Really  PROCEDURE Open(fnFi
leNamePosCARDINAL)  (*Open the file whose name is in fn    re-adjust the display
 as required*)  VARfFILE  bBOOLEAN  BEGIN      IF fn1' ' THEN   OpenFile(FilesFi
lesOpened+1,fn,reply,Pos)  IF reply(-2) THEN  ClearDisplay  WriteString(' Create
 ')  WriteString(fn)    IF Really() THEN  Create(f,fn,reply)  IF reply0 THEN  re
ply-4  OCEDURE WriteAwayFile  BEGIN  CloseFile(FilesCurrentFile,reply)  IF reply
-1 THEN   ErrorMessage('Disc Full ',' ')  ELSIF reply-2 THEN  ErrorMessage('Dire
ctory Full ',' ')  END  UpdatedCurrentFileFALSE  END WriteAwayFile  PROCEDURE Sa
veFiles  VARiINTEGER  BEGIN  iCurrentFile  reply0  FOR CurrentFile1 TO FilesOpen
ed DO  IF UpdatedCurrentFile THEN WriteAwayFile END  IF reply0 THEN RETURN END  
END  CurrentFilei  END SaveFiles  PROCEDURE PrepareToLeaveELSE  Close(f)  OpenFi
le(FilesFilesOpened+1,fn,reply,Pos)  END  END  END (*reply-2*)  IF reply(-4) THE
N  ErrorMessage('Could not create ',fn)  ELSIF reply(-3) THEN  ErrorMessage('Out
 of Memory loading ',fn )  ELSIF reply(-2) THEN  ErrorMessage('File not found',f
n)  ELSIF reply0 THEN  ErrorMessage(' Other error opening file',fn)  ELSE (*file
 ok*)  INC(FilesOpened)  INC(Windows)  WindowFileWindowsFilesOpened  SetWindows(
Windows)  bLabelOp(Fil  RAFBGCHDIE  BEGIN  SaveFiles  IF reply0 THEN  ClearDispl
ay  StoreMacros  END  END PrepareToLeave    PROCEDURE CallCompilers(opt1,opt2ARR
AY OF CHAR)  BEGIN  PrepareToLeave  IF reply0 THEN      CASE FileType(FilesCurre
ntFile) OF  1CallWithFile(opt1,FilesCurrentFile)  2CallWithFile(opt2,FilesCurren
tFile)  END  Redisplay  ErrorMessage(' Invalid File Type',' ')      END(*IF*)  E
ND CallCompilers  PROCEDURE CountRefs()CARDINAL  VARjCARDINAL  BEGIN  j0  FOR i1
 )  W and is terminated by a value of 0 if less than characters are required.  N
aturally, you may also change the .COM file.   The control characters in the sup
plied program are set for a STAR DPS510,  which is supposed to be Epson compatib
le, so the program may well run 'as is'  on Epsons and Epson clones.    How the 
program works      For each line, a hash total iTO Windows DO  IF WindowFileiCur
rentFile THEN INC(j) END  END  RETURN j  END CountRefs  PROCEDURE RemoveFile  VA
Rj,kCARDINALchCHAR  BEGIN  jCurrentFile  k1  WHILE kWindows DO  IF WindowFilekj 
THEN   ElideWindow(k)  (*which decrements windows*)  ELSE IF WindowFilekj THEN  
DEC(WindowFilek)  END       INC(k)       END  END  AbandonFile(Filesj)  FOR ij+1
 TO FilesOpened DO   Filesi-1Filesi  Updatedi-1Updatedi  END  DEC(FilesOpened)  
ChangeWindow(1)    Redisplay  END RemoveFile  PROCEDURE CheckRemoveFile  BEGIN  
IF UpdatedCurrentFile THEN  ClearDisplay  WriteString(' File updated - Are you s
ure ')  IF NOT Really() THEN   Redisplay  RETURN   END  END  RemoveFile  END Che
ckRemoveFile  BEGIN  SetBoxPos(y)  cGetFromMenu(Text,10,y,5,2)  ClearCharBuffer 
 IF (FilesOpened0) AND (c IN 2..8) THEN  ErrorMessage('You have to be editing a 
file to do this',' ')  ELSE CASE c OF  1IF WindDEFINITION MODULE EditControl  FR
OM MakeEdits IMPORT EditFile,Position  FROM Terminal IMPORT Write,WriteLn    (*E
ditor control - data areas for file and routines which actually  perform edit fu
nctions by calling makeedit to edit the file and  editdisp to change the screen*
)  CONST  MaxEditFiles3    VARFiles ARRAY1..MaxEditFiles OF EditFile  FilesOpene
dCARDINAL  CurrentFile,CurrentWindowCARDINAL  FilePositionARRAY1..MaxEditFiles O
F Position  curx,curyARRAY1..MaxEditFiles OF CARDIows3 THEN ErrorMessage(' 3 win
dows is max allowed',' ')    ELSE  GetString(fn,y,'File')  Open(fn,65535)  END  
    2WriteAwayFile      3WriteAwayFile    IF reply0 THEN   RemoveFile  END      
4IF Windows3 THEN ErrorMessage(' 3 windows is max allowed',' ')    ELSE  MakeWin
dow  SetWindows(Windows)  ChangeWindow(CurrentWindow)  Redisplay  END    5CallCo
mpilers('M2E ','MDE ')  6CallCompilers('M2 ','MD ')  7IF FilesOpened0 THEN  Chec
kRemoveFile  ENAL  Thisx,ThisyCARDINAL  LeftMarginARRAY1..MaxEditFiles OF CARDIN
AL  LineLenINTEGER  LinePosINTEGER  UpdatedARRAY1..MaxEditFiles OF BOOLEAN  Wind
owFileARRAY1..MaxEditFiles OF CARDINAL  MovedOKBOOLEAN  PROCEDURE InsOneChar(chC
HAR)  PROCEDURE DelOneChar  PROCEDURE DelToEOL  PROCEDURE DelFullLine  PROCEDURE
 Left  PROCEDURE Right  PROCEDURE Down  PROCEDURE Up  PROCEDURE UpScreen  PROCED
URE DownScreen  PROCEDURE Top  PROCEDURE Bottom  PROCEDURE ChangeWindow(iINTEGER
)  ND(*FilesOpened*)      8IF FilesOpened0 THEN  IF CountRefs()1 THEN     ElideW
indow(CurrentWindow)    ChangeWindow(1)    Redisplay    ELSE CheckRemoveFile END
  END      9PrepareToLeave    IF reply0 THEN HALT END  10 ResetAllDiscs     Erro
rMessage(' All discs now read/write',' ')     END  END (*IF FilesOpened etc *)  
END DoMenuOp  END DoMenu.  List THEN  WriteChar(List,Device)  WriteChar(List,ch)
  END  WriteString(Name  RAFBGCHDIEPROCEDURE ElideWindow(iINTEGER)  PROCEDURE Ma
keWindow  PROCEDURE ScrollUp  PROCEDURE ScrollDown  PROCEDURE ResetScreenPos  PR
OCEDURE FarRight  PROCEDURE FarLeft  PROCEDURE Search(ReplaceARRAY OF CHARRLenIN
TEGERLenCARDINAL)BOOLEAN  PROCEDURE OverWrite(chCHAR)  PROCEDURE FindWord(BackWa
rdBOOLEANDeleteBOOLEAN)  PROCEDURE ReDisplay  PROCEDURE GoToLabel(chCHAR)  END E
ditControl.  T  DEF Ex  if co-ordinates out output as    ascii numbers rather th
an binary*)  ColumnFirstBOOLEAN  AddressInGraphBOOLEAN (*true if can change coor
dinates    in graph mode*)  CarriageReturnBOOLEAN (*true if carriage return retu
rns     to start of current row*)  ScreenDepthCARDINAL  ScreenWidthCARDINAL  XYO
ffsetCARDINAL  END       VARControlControlCodes  ActiveBOOLEAN  InGraphBOOLEAN  
Lowx,Highx,Lowy,HighyCARDINAL  OutputEnabledBOOLEAN  (*PROCEDURE Write(iCHAR)  B
EGIN  IF (i' ') AND (i'z') THEN Terminal.Write(i)  ELSE   Terminal.Write('')  Wr
iteHex(ORD(i),3)  Terminal.Write('')  END  END Write*)  PROCEDURE Write(bCHAR)  
VARiINTEGER(*needed to avoid conflict with global*)  BEGIN  IF OutputEnabled THE
N  iBDOS(diofc,WORD(b))  END  END Write  PROCEDURE WriteAscii(iINTEGER)  VARText
ARRAY1..3 OF CHAR  j,kINTEGER  BEGIN  j3  WHILE (j0) AND (i0) DO  ki DIV 10  Tex
tjCHR(i-10*k+ORD('0'))  ik  jj-1md screenio.def  md screendu.def  md resetdis.de
f  m2 screenio.mod  md makeedit.def  md editstat.def  m2 makeedit.mod  md editco
nt.def  md macros.def  md menu.def  md domenu.def  md editdisp.def  md setupcal.
def  md editcont.def  md keyboard.def  m2 menu.mod  m2 editstat.mod  m2 macros.m
od  m2 domenu.mod  m2 editdisp.mod  m2 editcont.mod  m2 me.mod  m2 screendu.mod 
 m2 resetdis.mod  m2 keyboard.mod  m2 setupcal.mod  m2 macros.mod  m2 makeedit.m
od  m2 me.mod  ml me/d  e.mod  m2 screendu.mod  m2 resetdis.mod  END  FOR kj+1 T
O 3 DO Write(Textk) END  END WriteAscii   PROCEDURE Gotoxy(x,yCARDINAL)    (*Pos
ition to given coordinates  top left is always 0,0     x is column, y is row    
A 'Standard' Screen is 80 by 24. The limit is set by  the terminal definition fi
le*)  VARi,jINTEGER  ingBOOLEAN  BEGIN      IF Active AND OutputEnabled THEN  WI
TH Control DO  ingInGraph  IF InGraph THEN ScreenControl(EndGraph) END  ScreenCo
ntrol(Startxy)  IF ColumnFirst THEN  ix+XYOon,SetPosition,ReadNextChar,FindStrin
g,  LabelOp  FROM EditDisplay IMPORT DisplayFile,ErrorMessage,Windows,LinesPerWi
ndow  FROM ScreenIO IMPORT Edits,DelChar,DelLine,InsChar,InsLine,DelEol,MoveUp, 
 MoveDown,MoveLeft,MoveRight,Gotoxy,ClearScreen,  ScreenControl,  ScreenWidth,Sc
reenDepth,MadeChange  FROM IntLogic IMPORT IAND  FROMSYSTEM IMPORT ADR  CONSTCR0
dx  TAB09x  LF0ax  EOF1ax  (*A remark on the use of LinePos and curx    LinePos 
always points to the number of the characteffset  jy+XYOffset  ELSE  iy+XYOffset
  jx+XYOffset  END  IF Ascii THEN WriteAscii(i)  ELSE Write(CHR(i)) END  ScreenC
ontrol(MiddleXY)  IF Ascii THEN WriteAscii(j)  ELSE Write(CHR(j)) END  ScreenCon
trol(EndXY)  END (*WITH*)  IF ing THEN ScreenControl(StartGraph) END  END(*IF*) 
     END Gotoxy    PROCEDURE LoadTermCode(filenameFileName)  VARfnFILE  replyINT
EGER    (*define a temporary area for reading of file  it must be equal in size 
to the size of IMPLEMENTATION MODULE ScreenIO  FROM Terminal IMPORT CharRoutine,
CharEnabled  FROM Files IMPORT Lookup,FILE,ReadBlock  FROM FastMove IMPORT Moveu
p  FROM SYSTEM IMPORT ADR,SIZE,WORD  FROMCPM IMPORT diofc,BDOS  (*Screen handlin
g routines for cursor position, attribute etc    This module is specific to this
 compiler*)  TYPE  ControlSequenceRECORD  CharsARRAY1..7 OF CHAR  SeqLenBYTE  EN
D      ControlCodesRECORD  EditSequencesARRAY Edits OF ControlSequence  AsciiBOO
LEAN (*true i  RAFBGCHDIEcontrol, padded  out to a multiple of 128 bytes*)    bl
ockARRAY0..128*(SIZE(Control) DIV 128)+127 OF CHAR    (*Load the terminal defini
tion for the current terminal    filename is the name of the file to read    Nor
mally, when the program is loaded, the file  'TERMINAL.COD' is loaded from the l
ogged in disc  This routine only needs to be used if that  file is not the one t
o use (eg, to swap screens*)     BEGIN  Lookup(fn,filename,reply)  IF reply0 THE
N ActiveFALSE  ELSE  ReadBloc Gotoxy(0,EndofWindow)     ScreenControl(InsLine)  
ScreenControl(DelEol)     END ScrollWindowDown    (*Cursor blink routine - only 
supported in memory mapped  version of screenio*)  PROCEDURE OutputToScreen(OnBO
OLEAN)  BEGIN  OutputEnabledOn  END OutputToScreen    BEGIN(*Initialisation part
*)  CharRoutineWrite  CharEnabledTRUE    InGraphFALSE  OutputEnabledTRUE  LoadTe
rmCode('CONTROL.DAT')  Lowx0Lowy0  Highx999Highy999  ScreenWidthControl.ScreenWi
dth  k(fn,ADR(block),0,SIZE(block),reply)  ActivereplySIZE(Control)  Moveup(ADR(
block),ADR(Control),SIZE(Control))  END  ScreenWidthControl.ScreenWidth  ScreenD
epthControl.ScreenDepth  END LoadTermCode    PROCEDURE ScreenControl(sEdits)    
(*Perform a screen control operation*)  VARiCARDINAL  BEGIN  IF Active AND Outpu
tEnabled THEN  WITH Control.EditSequencess DO  MadeChangeSeqLen0  FOR i1 TO ORD(
SeqLen) DO Write(Charsi) END  END  IF NOT Control.AddressInGScreenDepthControl.S
creenDepth  ScreenControl(ClearScreen)  END ScreenIO.  y999  ScreenWidthControl.
ScreenWidth  astMove IMPORT Moveup  FROM SYSTEM IMPORT ADR,SIZE,WORD  FROMCPM IM
PORT wccfc,BDOS  (*Screen handling routines for cursor position, attribute etc  
  This module is specific to this compiler*)  TYPE  ControlSequenceRECORD  Chars
ARRAY1..7 OF CHAR  SeqLenBYTE  END      ControlCodesRECORD  EditSequencesARRAY E
dits OF ControlSequence  AsciiBOOLEAN (*true iraph THEN  IF sStartGraph THEN InG
raphTRUE  ELSIF sEndGraph THEN InGraphFALSE END  END  ELSE  MadeChangeFALSE  END
  END ScreenControl  PROCEDURE InBound(x,yCARDINALchEdits)  BEGIN  IF (xLowx) AN
D (xHighx)    AND(yLowy) AND (yHighy) THEN   ScreenControl(ch)  END  END InBound
  PROCEDURE  DrawBox(x1,y1,x2,y2CARDINAL)    (*draw a box for a window on the sc
reen    x1,y1  is the lower left corner  x2,y2  is upper right corner*)  VARiCAR
DINAL  BEGIN      IMPLEMENTATION MODULE EditControl    (*Editor control - data a
reas for file and routines which actually  perform edit functions by calling mak
eedit to edit the file and  editdisp to change the screen*)    FROM MakeEdits IM
PORT InsChars,DelChars,Retrline,BackOneChar,ForwardOneChar,  GetCurrentChar,GetP
osition,SetPosition,ReadNextChar,FindString,  LabelOp  FROM EditDisplay IMPORT D
isplayFile,ErrorMessage,Windows,LinesPerWindow  FROM ScreenIO IMPORT Edits,DelCh
ar,DelLine,InsChar,InsLine,DelEol,MoveUpIF Active AND OutputEnabled THEN  WITH C
ontrol DO  Gotoxy(x1,y1)  ScreenControl(StartGraph)  InBound(x1,y1,CornerLL)  FO
R ix1+1 TO x2-1 DO InBound(i,y1,Horizontal) END  InBound(x2,y1,CornerLR)  Gotoxy
(x1,y2)  InBound(x1,y2,CornerUL)  FOR ix1+1 TO x2-1 DO InBound(i,y2,Horizontal) 
END  InBound(x2,y2,CornerUR)  FOR iy2+1 TO y1-1  DO  Gotoxy(x2,i)  InBound(x2,i,
Vertical)  END  FOR iy2+1 TO y1-1 DO  Gotoxy(x1,i)  InBound(x1,i,Vertical)  END 
 END(,  MoveDown,MoveLeft,MoveRight,Gotoxy,ClearScreen,  ScreenControl,ScrollWin
dowUp,ScrollWindowDown,  ScreenWidth,ScreenDepth  FROM IntLogic IMPORT IAND  FRO
MSYSTEM IMPORT ADR  CONSTCR0dx  TAB09x  LF0ax  EOF1ax  (*A remark on the use of 
LinePos and curx    LinePos always points to the number of the character within 
the  text line. It need not be the same as the position on the  screen because o
f the use of tab characters*)  TYPEPEditFilePOINTER TO EditFile  VARiINTEGER  c*
WITH Control*)  ScreenControl(EndGraph)  END (*IF Active*)      END DrawBox  PRO
CEDURE Clip(x1,y1,x2,y2CARDINAL)  BEGIN  Lowxx1  Highxx2  Lowyy2  Highyy1  END C
lip  PROCEDURE ScrollWindowUp(StartofWindow,EndofWindowCARDINAL)  BEGIN  Gotoxy(
0,EndofWindow)  ScreenControl(DelLine)  Gotoxy(0,StartofWindow)  ScreenControl(I
nsLine)  END ScrollWindowUp  PROCEDURE ScrollWindowDown(StartofWindow,EndofWindo
wCARDINAL)  BEGIN  Gotoxy(0,StartofWindow)  ScreenControl(DelLine)    R A F B G 
C H D I ECARDINAL  StartofWindow,EndofWindowCARDINAL  chCHAR  CurrentLeftMarginC
ARDINAL  FileLimitBOOLEAN  ReDrawnBOOLEAN  CurFilePtrPEditFile  PROCEDURE Change
PosFORWARD  PROCEDURE DoScreenChange(CodeEdits)  BEGIN  ScreenControl(Code)  END
 DoScreenChange      VARlinesmovedINTEGER  pPosition    PROCEDURE SetLinePos(mov
eINTEGER)  BEGIN  Retrline(CurFilePtr,LineLen,LinePos,p,linesmoved,move)  END Se
tLinePos  PROCEDURE MarkAsUpdated  BEGIN  UpdatedCurrentFileTRUE  END MarkCurren
tLeftMargin) THEN EXIT END  IF chTAB THEN   REPEAT  IF cCurrentLeftMargin THEN W
rite(' ') END   INC(c)  UNTIL IAND(c,7)1  ELSE  IF cCurrentLeftMargin THEN Write
(ch) END  INC(c)  END  END(*LOOP*)  END WritePartLine  PROCEDURE WriteLine  BEGI
N  WritePartLine(1)  END WriteLine  PROCEDURE RemoveLine    (*Remove a line from
 the screen and bring another line up at the bottom    Thisy gives line to remov
e*)  VARpPosition  BEGIN  Gotoxy(0,Thisy)  ScrolAsUpdated  PROCEDURE DelToEOL  B
EGIN  MarkAsUpdated  IF LinePosLineLen THEN   DelChars(CurFilePtr,LineLen-LinePo
s)   END  LineLenLinePos  DoScreenChange(DelEol)  END DelToEOL  VAR  bBOOLEAN  P
ROCEDURE ResetPos  BEGIN  Gotoxy(Thisx,Thisy)  END ResetPos  PROCEDURE ReDisplay
Window  BEGIN  DisplayFile(CurFilePtr,CurrentWindow,Thisx,Thisy)  ResetPos  curx
CurrentWindowThisx  curyCurrentWindowThisy  ReDrawnTRUE  END ReDisplayWindow  PR
OCEDURE ReDisplay  BEGIN lWindowDown(Thisy,EndofWindow)  iEndofWindow-Thisy+1  G
etPosition(CurFilePtr,p)  SetLinePos(i)  IF linesmovedi THEN  MovedOKTRUE  Gotox
y(0,EndofWindow)  WriteLine  END  SetPosition(CurFilePtr,p)  END RemoveLine  PRO
CEDURE DelFullLine  BEGIN  MarkAsUpdated  RemoveLine  SetLinePos(0)  DelChars(Cu
rFilePtr,LineLen+2)  LinePos0  IF CurrentLeftMargin0 THEN   ChangeMargin(-INTEGE
R(CurrentLeftMargin))  END  Thisx0  ResetPos  LinePos0  SetLinePos(0)  E ReDispl
ayWindow  SetLinePos(0)  ChangePos  END ReDisplay  PROCEDURE ChangeMargin(IncINT
EGER)  BEGIN  IF (Inc0) AND  (CurrentLeftMarginCARDINAL(-Inc)) THEN   Inc-INTEGE
R(CurrentLeftMargin)   END  IF (Inc0) AND (ThisxCARDINAL(Inc)) THEN IncThisx END
  CurrentLeftMarginINTEGER(CurrentLeftMargin)+Inc  ThisxINTEGER(Thisx)-Inc  curx
CurrentWindowThisx  LeftMarginCurrentWindowCurrentLeftMargin  ReDisplayWindow  R
esetPos  END ChangeMargin    PROCEDURE ChangePos  VND DelFullLine      PROCEDURE
 ScrollTextUp    (*Scroll up one line in the file  (which means the text scrolls
 down - backwards to  what you might think at first)*)    VARpPosition  SaveLine
Len,SaveLinePosCARDINAL  BEGIN  SaveLineLenLineLen  SaveLinePosLinePos  iStartof
Window-Thisy-1  GetPosition(CurFilePtr,p)  SetLinePos(i)  IF linesmovedi THEN  M
ovedOKTRUE  ScrollWindowUp(StartofWindow,EndofWindow)  Gotoxy(0,StartofWindow)  
WriteLine  ELSE  MovedOKFALSE  ARiCARDINAL  BEGIN  IF LineLenLinePos THEN   Line
PosLineLen  END  Thisx0  i0  LOOP  INC(i)  chGetCurrentChar(CurFilePtr)  IF (iCA
RDINAL(LinePos)) OR (chEOF) THEN EXIT END  IF chTAB THEN ThisxIAND(Thisx+8,0fff8
h)   ELSE  INC(Thisx) END  bForwardOneChar(CurFilePtr)   END  iThisx  WHILE This
x(ScreenWidth+CurrentLeftMargin) DO  ChangeMargin(32)  Thisxi  END  WHILE ThisxC
urrentLeftMargin DO  ChangeMargin(-32)  Thisxi  END  ThisxEND  SetPosition(CurFi
lePtr,p)  ResetPos  LineLenSaveLineLen  LinePosSaveLinePos  END ScrollTextUp  PR
OCEDURE ScrollUp  BEGIN  ScrollTextUp  IF MovedOK THEN  IF ThisyEndofWindow THEN
   INC(Thisy)  ResetPos  ELSE   LineMove(-1)  ResetPos  END  END  END ScrollUp  
PROCEDURE ScrollTextDown  VARpPosition  SaveLineLen,SaveLinePosCARDINAL  BEGIN  
SaveLineLenLineLen  SaveLinePosLinePos  iEndofWindow-Thisy+1  GetPosition(CurFil
ePtr,p)  SetLiThisx-CurrentLeftMargin  curxCurrentWindowThisx  ResetPos  END Cha
ngePos    PROCEDURE LineMove(byINTEGER)  VARiINTEGER  BEGIN  ReDrawnFALSE  iLine
Pos  SetLinePos(by)  LinePosi  ChangePos  IF ABS(by)1 THEN  ReDisplayWindow  END
  END LineMove  VARpwPosition  PROCEDURE WritePartLine(cCARDINAL)  BEGIN  DoScre
enChange(DelEol)  GetPosition(CurFilePtr,pw)  LOOP  ReadNextChar(pw,ch)  IF (ch0
dx) OR (ch1ax) OR (ch0ax) THEN EXIT END  IF c(ScreenWidth+  RAFBGCHDIEnePos(i)  
IF linesmovedi THEN  MovedOKTRUE  ScrollWindowDown(StartofWindow,EndofWindow)  G
otoxy(0,EndofWindow)  WriteLine  ResetPos  ELSE  MovedOKFALSE  END  SetPosition(
CurFilePtr,p)  ResetPos  LineLenSaveLineLen  LinePosSaveLinePos  END ScrollTextD
own  PROCEDURE ScrollDown  BEGIN  ScrollTextDown  IF MovedOK THEN  IF ThisyStart
ofWindow THEN   DEC(Thisy)  ResetPos  ELSE  LineMove(1)  ResetPos  END  END  END
 ScrollDown  PROCEDURE LN Right END  END FindWord  PROCEDURE Down  BEGIN  LineMo
ve(1)  FileLimitlinesmoved0  IF linesmoved0 THEN  IF (ThisyEndofWindow) THEN  IN
C(Thisy)  ScrollTextDown  DEC(Thisy)  ResetPos  ELSIF  NOT ReDrawn THEN   INC(Th
isy)  ResetPos  END  END   END Down    PROCEDURE RedoLine  BEGIN  Gotoxy(0,Thisy
)  SetLinePos(0)  WriteLine  ChangePos  END RedoLine    PROCEDURE InsOneChar(chC
HAR)  VARCH1ARRAY0..0 OF CHAR  BEGIN  ReDrawnFALSE  MarkAsUpdeft  VARchCHAR  Sav
eLineLenCARDINAL  pPosition  BEGIN  MovedOKTRUE  ReDrawnFALSE  SaveLineLenLineLe
n  GetPosition(CurFilePtr,p)  IF LinePos0 THEN  bBackOneChar(CurFilePtr)  chGetC
urrentChar(CurFilePtr)  IF (CurrentLeftMargin0) AND (Thisx0) THEN  ChangeMargin(
-32)  END  DEC(LinePos)  IF NOT ReDrawn THEN  IF chTAB THEN  DEC(Thisx)  ResetPo
s  ELSE  LineMove(0)  END  END    ELSE  Thisx1023  LinePos1023  Up  Iated  CH10c
h  InsChars(CurFilePtr,CH1,1)  INC(LinePos)  INC(LineLen)  IF chCR THEN  CH10LF 
 InsChars(CurFilePtr,CH1,1)  ResetPos  DoScreenChange(DelEol)  IF ThisyEndofWind
ow THEN  (*ScrollTextDown*)  ScrollWindowDown(StartofWindow,EndofWindow)  DEC(Th
isy)  END  Gotoxy(0,EndofWindow)  ScrollWindowUp(Thisy+1,EndofWindow)  ResetPos 
 INC(Thisy)  ResetPos  LinePos0  RedoLine  ELSIF chTAB THEN RedoLine  ELSE  IF T
hisx(ScreenWidth-F NOT MovedOK THEN  LinePos0  LineLenSaveLineLen  SetPosition(C
urFilePtr,p)  Thisx0  ResetPos  END  END  END Left  PROCEDURE Right  VARchCHAR  
iCARDINAL  BEGIN  chGetCurrentChar(CurFilePtr)  IF ch1ax (*on EOF char*) THEN RE
TURN END  IF LinePosLineLen THEN  Thisx0  LinePos0  Down    ELSE    IF chTAB THE
N i9 ELSE i1 END  IF (Thisx+i)(ScreenWidth-1) THEN  ChangeMargin(32)  END  bForw
ardOneChar(CurFilePtr)  INC(LineP1) THEN  ChangeMargin(32)  END  IF NOT ReDrawn 
THEN  IF LinePosLineLen THEN  bBackOneChar(CurFilePtr)  WritePartLine(CurrentLef
tMargin+Thisx+1)  INC(Thisx)  bForwardOneChar(CurFilePtr)  ELSE  Write(ch)  INC(
Thisx)  END  END  END  ResetPos  END InsOneChar  PROCEDURE DelOneChar  BEGIN  Ma
rkAsUpdated  chGetCurrentChar(CurFilePtr)  IF LinePosLineLen THEN i2  ELSE i1 EN
D  DelChars(CurFilePtr,i)  IF i2 THEN  IF ThisyEos)  IF chTAB THEN  INC(Thisx)  
ResetPos  ELSE    (*if moves over tabs are slow, replace the    repeated moves r
ight by a gotoxy*)  ThisxIAND(Thisx+8,0fff8h)  ResetPos  END  END  END Right    
PROCEDURE AlphaNum(chCHAR)BOOLEAN  BEGIN  chCAP(ch)  RETURN ((ch'A') AND (ch'Z')
) OR ((ch'0') AND (ch'9'))  END AlphaNum    PROCEDURE FindWord(BackwardBOOLEANDe
leteBOOLEAN)    (*Find a word and optionally delete it    A word is a string alp
hanumerics or andofWindow THEN   INC(Thisy)  iLinePos  RemoveLine  LinePosi  DEC
(Thisy)  RedoLine  END  ELSE  DEC(LineLen)  WritePartLine(CurrentLeftMargin+This
x+1)  END  (*ELSIF chTAB THEN  RedoLine  ELSE  LineLenLineLen-1  DoScreenChange(
DelChar)  END*)  ResetPos  END DelOneChar  PROCEDURE OverWrite(chCHAR)  VARCH1AR
RAY0..0 OF CHAR  BEGIN  CH10GetCurrentChar(CurFilePtr)  IF (CH10CR) AND (chCR) A
ND (CH101ax) THEN  IF (CH10TAB) A string of marks, tabs  or spoaces    The curso
r is repositioned*)  VARchCHAR  b1BOOLEAN  BEGIN  FileLimitFALSE  IF Backward TH
EN   Left  IF NOT MovedOK THEN RETURN END  END  chGetCurrentChar(CurFilePtr)  b1
AlphaNum(ch)  IF chEOF THEN RETURN END  REPEAT  IF Delete THEN DelOneChar END  I
F Backward   THEN Left  ELSIF NOT Delete THEN Right END  chGetCurrentChar(CurFil
ePtr)  UNTIL  (b1AlphaNum(ch)) OR FileLimit OR (chEOF)  IF Backward AND NOT File
Limit THE  RAFBGCHDIEND (chTAB) THEN  DelChars(CurFilePtr,1)  CH10ch  InsChars(C
urFilePtr,CH1,1)  bBackOneChar(CurFilePtr)  Write(ch)  ResetPos  Right  UpdatedC
urrentFileTRUE  ELSE  DelOneChar  InsOneChar(ch)  END  ELSE  InsOneChar(ch)  END
  END OverWrite  PROCEDURE Up    BEGIN  IF ThisyStartofWindow THEN  ScrollTextUp
  END  LineMove(-1)  FileLimitlinesmoved0  IF (linesmoved0) AND (ThisyStartofWin
dow) AND NOT ReDrawn THEN   DEC(Thisy)NoINTEGER)  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 CHARRLenINTEGERLenCARDINA
L)BOOLEAN    (*search for string and replace if found*)  VARbBOOLEAN  FoundBOOLE
AN  iCARDINAL  BEGIN  bLen128  IF b THEN LenLen-128 END  FoundFindString(CurFile
Ptr,b)  IF F  ResetPos  END  END Up  PROCEDURE UpScreen  BEGIN  LineMove(1-INTEG
ER(LinesPerWindow))  END UpScreen  PROCEDURE DownScreen  BEGIN  LineMove(LinesPe
rWindow-1)  END DownScreen  PROCEDURE Top  BEGIN  LinePos0  LineMove(-16736)  EN
D Top  PROCEDURE Bottom  BEGIN  LinePos999  LineMove(16736)  END Bottom  PROCEDU
RE FarLeft  BEGIN  IF CurrentLeftMargin0 THEN   ChangeMargin(-INTEGER(CurrentLef
tMargin))  END  SetLinePos(0)  LinePos0  ChangePos  END FarLeft  PROCEound AND (
RLen0) THEN  MarkAsUpdated  IF b THEN  FOR i2 TO Len DO  bBackOneChar(CurFilePtr
)  END  END  DelChars(CurFilePtr,Len)   InsChars(CurFilePtr,Replace,RLen)  bBack
OneChar(CurFilePtr)  END  ReDisplay  RETURN Found  END Search  PROCEDURE GoToLab
el(chCHAR)  BEGIN  IF LabelOp(CurFilePtr,FALSE,ch) THEN  ReDisplay  ELSE  ErrorM
essage(' Label not defined',' ')  ResetPos  END  END GoToLabel  BEGIN  CurrentWi
ndow0  CurrentFile0  DURE FarRight  BEGIN  SetLinePos(0)  LinePosLineLen  Change
Pos  END FarRight  PROCEDURE ChangeWindow(NoINTEGER)  VARbBOOLEAN  BEGIN  IF Cur
rentWindow0 THEN  curxCurrentWindowThisx  curyCurrentWindowThisy  bLabelOp(CurFi
lePtr,TRUE,CHR(CurrentWindow))  END  CurrentWindowNo    IF CurrentWindowWindows 
THEN CurrentWindowWindows END  IF CurrentWindow0 THEN  (*set up a pointer to the
 current file to save index calculation    every time the file is referencCurFil
ePtrPEditFile(ADR(Files1))  END EditControl.      END GoToLabel  BEGIN  CurrentW
indow0  CurrentFile0   (CurrentLeftMarginCARDINAL(-Inc)) THEN   Inc-INTEGER(Curr
entLeftMargin)   END  IF (Inc0) AND (ThisxCARDINAL(Inc)) THEN IncThisx END  Curr
entLeftMarginINTEGER(CurrentLeftMargin)+Inc  ThisxINTEGER(Thisx)-Inc  curxCurren
tWindowThisx  LeftMarginCurrentWindowCurrentLeftMargin  ReDisplayWindow  ResetPo
s  END ChangeMargin    PROCEDURE ChangePos  Ved*)  CurrentFileWindowFileCurrentW
indow  CurFilePtrPEditFile(ADR(FilesCurrentFile))  bLabelOp(CurFilePtr,FALSE,CHR
(CurrentWindow))  ThisxcurxCurrentWindow  ThisycuryCurrentWindow  CurrentLeftMar
ginLeftMarginCurrentWindow  SetLinePos(0)  ChangePos  i(ScreenDepth-Windows) DIV
 Windows  StartofWindowCARDINAL(i+1)*(CurrentWindow-1)  ELSE   StartofWindow0  i
0   END  IF CurrentWindowWindows THEN  EndofWindowStartofWindow+CARDINAL(i-1)  I
MPLEMENTATION MODULE MakeEdits      (*Routines to edit a file    (i.e., actually
 make changes to the file)    D Moore 11 Jan 85*)  FROM Files IMPORT FILE,Lookup
,Create,SeqReadBlock,SeqWriteBlock,  MakeBAK,Close  FROMStorage IMPORT ALLOCATE,
DEALLOCATE,FreeSpace  FROMSYSTEM IMPORT ADR,BYTE  FROM  FastMove IMPORT Moveup,M
ovedown,Searchup,Searchdown  FROMSetUpCall IMPORT MakeCall  IMPORTEditStatus  CO
NSTTextLen140(* must exceed a block on the disc     remaining space is for paddi
ng*)  ELSE  EndofWindowScreenDepth-2  END    END ChangeWindow  PROCEDURE ResetSc
reenPos  BEGIN  IF CurrentWindow0 THEN  ThisxcurxCurrentWindow  ThisycuryCurrent
Window  ResetPos  END  END ResetScreenPos  PROCEDURE MoveWindow(from,toCARDINAL)
  VARbBOOLEAN  BEGIN  curxtocurxfrom  curytocuryfrom  LeftMargintoLeftMarginfrom
  WindowFiletoWindowFilefrom  bLabelOp(FilesWindowFileto,TRUE,CHR(to))  END Move
Window  PROCEDURE ElideWindow(Window   R A F B G C H D I EBlockSize128(* charact
ers in a disc block*)  HeadRoom512(*minimum head room to leave between stack and
 heap*)  CR0dx  LF0ax  FF0cx  EOF1ax  TYPEPTextPOINTER TO Text  PPositionPOINTER
 TO Position  TextRECORD  BlockLenBYTE  CharsARRAY0..TextLen-1 OF CHAR  NextPTex
t(*next block*)  PredPText(*preceding block*)  END      PositionRECORD  BlockPTe
xt  OffsetBYTE  END  EditFileRECORD  fFILE  ChainPText  CurPosPosition  LabelsAR
RAY0. CharPos0  savecurpos(f)  END  EXIT  ELSE    WHILE (i0) AND (Working.Charsi
-1EOF) DO  DEC(i)  END  IF (Working.Charsi-10ax) AND (iBlockSize) THEN  INC(i)  
Working.Charsi-1EOF  END  Working.BlockLeni  IF CharsreadCharno  THEN   CharPosC
harno-Charsread  savecurpos(f)  pWorking  IF (Working.CharsCharPosLF)      AND B
ackup() THEN  savecurpos(f)  END  Workingp  END  Charsr.24 OF Position    (*labe
ls 0 to 9 are  k0 to k9     10 is kB     11 is kk     12 through 14 are the posi
tions in the windows     15 through 24 are error markers*)    END  VARDoneBOOLEA
N  replyINTEGER    (*variables used for text position during move operations etc
*)    WorkingPText  CharPosINTEGER  chCHAR  posPosition  pos1,pos2PPosition  Cha
rno,CharsreadCARDINAL    PROCEDURE NewBlock  BEGIN  NEW(Working)  Working.PredNI
L  Working.NextNIL  END NewBeadCharsread+ORD(Working.BlockLen)  END  pWorking  r
eplyreply+1  END (*read file loop*)  Close(f.f)  END OpenFile    PROCEDURE Close
File(VAR fEditFileVAR replyINTEGER)  VAR  bARRAY0..BlockSize-1 OF CHAR  posINTEG
ER  BEGIN  MakeBAK(f.f,reply)  Charno1  IF reply0 THEN   Workingf.Chain  pos0  r
eplyBlockSize  LOOP      IF  (WorkingNIL) THEN EXIT END      WITH Working DO  FO
R i0 TO INTEGER(BlockLen)-1 DO  IF posBlockSize THEN  lock    PROCEDURE setcurpo
s(VAR fEditFile)  BEGIN  WITH f.CurPos DO  WorkingBlock  CharPosOffset  END  END
 setcurpos    PROCEDURE savecurpos(VAR fEditFile)  BEGIN  WITH f.CurPos DO  IF C
harPosORD(Working.BlockLen) THEN   CharPosWorking.BlockLen   END  BlockWorking  
OffsetCharPos  END  END savecurpos  VARiINTEGER  PROCEDURE Backup()BOOLEAN    (*
back up a character position in the current file  returns TRUE if successful*)  
BEGIN  IF CharPos0 THEN  SeqWriteBlock(f.f,ADR(b),BlockSize,  reply)  pos0  IF r
eplyBlockSize THEN EXIT END  END (*IF*)  bposCharsi  INC(pos)  END(*FOR*)    IF 
Workingf.CurPos.Block THEN      EditStatus.SetPosition(f.f,Charno+ORD(f.CurPos.O
ffset))      END  CharnoCharno+ORD(BlockLen)  WorkingNext  END(*WITH Working*)  
    END (*WHILE WorkingNIL and not disc full*)  FOR pospos TO BlockSize-1 DO bpo
sEOF END  IF replyBlockSize THEN   Se IF Working.PredNIL THEN  WorkingWorking.Pr
ed  CharPosWorking.BlockLen  ELSE  RETURN FALSE  END  END (*CharPos0*)  DEC(Char
Pos)  RETURN TRUE  END Backup  PROCEDURE OpenFile(VAR fEditFilefnFileNameVAR rep
lyINTEGERPosCARDINAL)  VARpPText  BEGIN  Lookup(f.f,fn,reply)  IF Pos65535 THEN 
CharnoEditStatus.GetPosition(f.f)  ELSE CharnoPos END  Charsread0  IF reply0 THE
N   reply-2  RETURN  END  pNIL  reply0  FOR i0 TO HIGH(f.LabelqWriteBlock(f.f,AD
R(b),BlockSize,reply)   END  Close(f.f)  IF replyBlockSize THEN reply-1  ELSE re
ply0 END  ELSEreply-2   END  END CloseFile      PROCEDURE AbandonFile(fEditFile)
  VARpPText  (*Abandon changes to an edit file*)  BEGIN  Workingf.Chain  WHILE W
orkingNIL DO   pWorking.Next  DISPOSE(Working)  Workingp  END  END AbandonFile  
PROCEDURE GetPosition(VAR fEditFileVAR pPosition)  BEGIN  pf.CurPos  END GetPosi
tion    PROCEDURE Ss) DO f.Labelsi.BlockNIL END  LOOP(*read in the file*)  IF Fr
eeSpace()HeadRoom THEN  AbandonFile(f)  reply-3  RETURN  END  NewBlock  Working.
Predp  IF pNIL THEN f.ChainWorking  ELSE p.NextWorking END  SeqReadBlock(f.f,ADR
(Working.Chars),BlockSize,i)  IF iBlockSize THEN (*end of file found*)  IF pNIL 
THEN   p.NextNIL  DISPOSE(Working)  ELSE(*always keep at least one block*)  Work
ing.BlockLen1     Working.Chars0EOF   RAFBGCHDIEetPosition(VAR fEditFilepPositio
n)  (*get/set position in a file*)  BEGIN  f.CurPosp    (*pointer may be pointin
g just after end of block  (after deletes), regularize that situation*)    WITH 
f.CurPos DO  IF     (OffsetBlock.BlockLen)   AND (Block.NextNIL) THEN  Offset0  
BlockBlock.Next  END  END   END SetPosition  PROCEDURE LabelOp(VAR fEditFileDefi
neBOOLEANchCHAR)BOOLEAN  (*  perform a label operation , return true if successf
ul  Define is true if t   (*redisplay as much text as will fit in the window  fo
r the given file starting at the current position in the file    curx and cury r
eturn the screen co-ordinates for the  current position in the file*)    PROCEDU
RE SetLeftMarg(fEditFilewindowINTEGERVAR curx,curyCARDINAL)    (*Set up left mar
gin of a newly opened file *)  PROCEDURE DisplayError  VARWindowsCARDINAL  Lines
PerWindowCARDINAL  END EditDisplay.  he operation is a define label  it is false
 if it is a goto label  *)    VARiCARDINAL  BEGIN  (*$A*)  chCAP(ch)  CASE ch OF
  'B' i10  'K','K' i11  1x..3xiORD(ch)+11  '0'..'9'iORD(ch)-ORD('0')  0b0x..0b9x
iORD(ch)-0b0h+15  ELSE RETURN FALSE  END  IF Define THEN  GetPosition(f,f.Labels
i)  ELSE  IF f.Labelsi.BlockNIL THEN RETURN FALSE END  SetPosition(f,f.Labelsi) 
  END  RETURN TRUE  END LabelOp  PROCEDURE Advance()BOOLEAN    (*advance a F.Lab
els11.Offset))  END  IF CouldBe THEN  WHILE (bNIL) AND (bF.Labels11.Block) DO bb
.Next END  CouldBebNIL  END  RETURN CouldBe  END InsideBlock    PROCEDURE CheckB
lock(VAR FEditFile)BOOLEAN    (*Check if begin and end of block have been correc
tly set up*)    BEGIN  IF (F.Labels10.BlockNIL) OR (F.Labels11.BlockNIL) THEN  R
ETURN FALSE  END  WorkingF.Labels10.Block  reply0    WHILE (WorkingNIL) AND (Wor
kingF.Labels11.Block) DO  replyreply+Ocharacter position in the current file*)  
BEGIN  INC(CharPos)  IF CharPosINTEGER(Working.BlockLen) THEN    IF Working.Next
NIL THEN  WorkingWorking.Next  CharPos0  ELSE  RETURN FALSE  END  END (*CharPosB
lockLen*)  RETURN Working.CharsCharPosEOF  END Advance  PROCEDURE InsideBlock(VA
R FEditFile)BOOLEAN    (*Check if current position is inside block *)  VARbPText
  CouldBeBOOLEAN  BEGIN  setcurpos(F)  IF (F.Labels10.BlockNIL) OR (F.Labels11.B
locRD(Working.BlockLen)  WorkingWorking.Next  END    IF WorkingNIL THEN RETURN F
ALSE END    (*if end precedes beginning of block*)    replyreply+ORD(F.Labels11.
Offset)-ORD(F.Labels10.Offset)  RETURN reply0  END CheckBlock  PROCEDURE BlockCo
py(VAR FromFile,ToFileEditFile)BOOLEAN    (*Careful - Easy - Ouch!    FromFile a
nd ToFile may be the same  variable*)    VARiINTEGER  cARRAY1..TextLen OF CHAR  
p,q,rPosition    (*This code is a little odd for the following reasonkNIL) THEN 
 RETURN FALSE  END  bF.Labels10.Block    WHILE (bNIL) AND (bF.Labels11.Block) AN
D (bWorking) DO  bb.Next  END      (*if end precedes beginning of block*)  Could
BebWorking  IF NOT CouldBe THEN RETURN FALSE END  IF bF.Labels10.Block THEN  (*i
n start block - check after label start*)  CouldBeCharPosORD(F.Labels10.Offset) 
 END  IF bF.Labels11.Block THEN  (*in start block - check after label start*)  C
ouldBeCouldBe AND (CharPosORD(    1/InsChars cannot insert more than half a bloc
k of characters  2/If you don't read at least a block at a time and the  to and 
from files are the same, you may have to change the  position in the from file t
o reflect insertions, which is  awkward (though you could always add a temporary
 label)    Therefore, text is read and then inserted in up to three goes!*)    T
hirdCARDINAL  BEGIN  ThirdTextLen DIV 3  IF NOT CheckBlock(FromFile) THEN RETURN
 FALSE END  WITH FromFile.Labels10 DO DEFINITION MODULE EditDisplay  (*Display p
art of a file being edited*)    FROM ScreenIO  IMPORT Edits  FROM MakeEdits IMPO
RT EditFile  VARErrorOrdinalCARDINAL  PROCEDURE ErrorMessage(s1,s2ARRAY OF CHAR)
    (*Display error message at bottom of screen*)    PROCEDURE SetWindows(iINTEG
ER)    (*set number of edit windows in use - you must refresh the entire  screen
 with calls to DisplayFile after a call to this  routine*)    PROCEDURE DisplayF
ile(fEditFilewindowINTEGERVAR curx,curyCARDINAL)   RAFBGCHDIE CharPosOffset  Wor
kingBlock  END  Charsread0  ireply  rFromFile.CurPos  qToFile.CurPos  FromFile.C
urPosFromFile.Labels10  LOOP  IF i0 THEN   EXIT   END  INC(Charsread)  cCharsrea
dWorking.CharsCharPos  IF (CharsreadHIGH(c)) OR (i1) THEN  savecurpos(FromFile) 
 pFromFile.CurPos  ToFile.CurPosq  WHILE Charsread0 DO  IF CharsreadThird THEN  
InsChars(ToFile,c,Third)  CharsreadCharsread-Third  Movedown(ADR(cos)-number)  E
ND  BlockLenORD(BlockLen)-number  IF (NextNIL) AND (CharsBlockLen-1EOF) THEN  Ch
arsBlockLenEOF  INC(BlockLen)   END  END(* Block not now empty*)  END(*WITH*)  E
ND DelInBlock    VARNextBlockPText  BEGIN  setcurpos(f)  WHILE (number0) AND (Wo
rkingNIL) DO  NextBlockWorking.Next  IF number(ORD(Working.BlockLen)-CharPos) TH
EN  DelInBlock(number)  number0  ELSE  numbernumber-ORD(Working.BlockLen)+CharPo
s  DelInThird+1),  ADR(c),Charsread)  ELSE  InsChars(ToFile,c,Charsread)  Charsr
ead0  END  END  qToFile.CurPos  FromFile.CurPosp  setcurpos(FromFile)  END  IF N
OT Advance() THEN EXIT (* never taken*) END  DEC(i)  END(*LOOP*)  FromFile.CurPo
sr  ToFile.CurPosq  RETURN TRUE  END BlockCopy  PROCEDURE BlockDel(VAR FromFileE
ditFile)BOOLEAN  VARpPosition  BEGIN  IF NOT CheckBlock(FromFile) THEN RETURN FA
LSE END  WITH FromFile DO  LaBlock(ORD(Working.BlockLen)-CharPos)  END  IF (numb
er0) OR (WorkingNIL) THEN   WorkingNextBlock  CharPos0   END  END (*WHILE*)  IF 
WorkingNIL THEN   Workingf.Chain  WHILE Working.NextNIL DO WorkingWorking.Next E
ND  CharPosWorking.BlockLen  END(*deleted everything*)  savecurpos(f)  END DelCh
ars    PROCEDURE InsChars(VAR fEditFileVAR SARRAY OF CHARlenINTEGER)  (*insert c
haracters*)  VARleft,followsINTEGER  MainBlockPText  PROCEDURE InsInBlobels25Cur
Pos  CurPosLabels10          DelChars(FromFile,reply)  CurPosLabels25  Labels25.
BlockNIL  END  RETURN TRUE  END BlockDel  PROCEDURE RelocateLabels(VAR fEditFile
numberINTEGER)  (*Relocate labels for the current block  number is number of cha
racters being deleted   (-ve for insertions)  *)  BEGIN          FOR reply0 TO H
IGH(f.Labels) DO  WITH f.Labelsreply DO  IF (BlockWorking) AND (ORD(Offset)CharP
os) THEN  IF (numberORD(Working.BlockLen)) ck  VARstartINTEGER  iINTEGER  BEGIN 
   (*adjust labels*)  RelocateLabels(f,-len)  start0  WITH Working DO  IF ORD(Bl
ockLen)CharPos THEN      Moveup(ADR(CharsCharPos),ADR(CharsCharPos+len),  ORD(Bl
ockLen)-CharPos)      END  BlockLenORD(BlockLen)+len  WHILE len0 DO  CharsCharPo
sSstart  INC(start)  DEC(len)  INC(CharPos)  END  END  END InsInBlock    (*If te
xt will fit in current block, enter in current block  else split block and entTH
EN  BlockWorking.Next  Offset0  ELSIF (number+CharPos)ORD(Offset) THEN  OffsetCh
arPos  ELSE  OffsetORD(Offset)-number  END(*IF*)  END(*IF BlockWorking etc*)  EN
D (*WITH*)  END(*FOR*)  END RelocateLabels      PROCEDURE DelChars(VAR fEditFile
numberINTEGER)    (*delete a number of characters*)    PROCEDURE DelInBlock(numb
erINTEGER)    (*Perform a delete which does not span a block*)  BEGIN  RelocateL
abels(f,number)  WITH Working DO  Ier in appropriate block*)    BEGIN  setcurpos
(f)  leftTextLen-ORD(Working.BlockLen)    (*left is characters left in block*)  
  IF leftlen THEN InsInBlock  ELSE    (*split the block so that after insert the
 two blocks    will be approx equal in size*)  leftORD(Working.BlockLen) DIV 2  
MainBlockWorking  NewBlock  Working.PredMainBlock  FOR reply0 TO HIGH(f.Labels) 
DO  WITH f.Labelsreply DO  IF (BlockMainBlock) AND (ORD(Offset)left) THEN  Block
WorkingF (numberORD(BlockLen)) (*CharPos0*) THEN  (*Delete block*)    IF NextNIL
 THEN Next.PredPred END  IF PredNIL THEN   Pred.NextNext  DISPOSE(Working)  ELSI
F NextNIL THEN   f.ChainNext  DISPOSE(Working)  ELSE(*only block in file so keep
*)  BlockLen1  Working.Chars0EOF  END(*PredNIL*)  ELSE  IF ORD(BlockLen)(CharPos
+number) THEN      Movedown(ADR(CharsCharPos+number),  ADR(CharsCharPos),  ORD(B
lockLen)-ORD(CharP  RAFBGCHDIE  OffsetORD(Offset)-left  END  END  END    WITH Ma
inBlock DO  Working.NextNext  IF NextNIL THEN Next.PredWorking END  NextWorking 
 Working.BlockLenORD(BlockLen)-left  BlockLenleft  Moveup(ADR(CharsBlockLen),   
   ADR(Working.Chars),      left+1)  IF CharPosORD(BlockLen) THEN WorkingMainBlo
ck  ELSE CharPosCharPos-ORD(BlockLen) END  InsInBlock  END(*WITH*)  END(*leftlen
*)  savecurpos(f)  END InsChars  ndowINTEGERVAR curx,curyCARDINAL)  BEGIN  Retrl
ine(f,len,charsin,pos,moved,0)  linepos0  FOR ic0 TO charsin DO  ReadNextChar(po
s,ch)  IF ch09x THEN lineposIAND(linepos+8,0fff8h)  ELSE INC(linepos) END  END  
LeftMarg0  WHILE linepos(LeftMarg+ScreenWidth) DO  LeftMargLeftMarg+32  END  Lef
tMarginwindowLeftMarg  END SetLeftMarg  PROCEDURE DisplayFile(fEditFilewindowINT
EGERVAR curx,curyCARDINAL)    (*redisplay as much text as will fit in the window
  for th    VARbBOOLEAN    PROCEDURE BackupLine()INTEGER    (*Backup to beginnin
g of current line  returns number of characters backed up    after the call, the
 position is the first character  after of the line*)  VARposINTEGER  BEGIN  pos
0  LOOP  IF NOT Backup() THEN EXIT END  chWorking.CharsCharPos  IF ((chCR) OR (c
hLF) OR (chFF))  THEN   bAdvance()  EXIT   END  pospos+1  END (*LOOP*)  RETURN p
os  END BackupLine  VARAdvanceOKBOOLEAN  PROCEDURE AdvanceLe given file starting
 at the current position in the file*)  VARi,j,k,lineposCARDINAL  movedoneINTEGE
R  startlineINTEGER (*first line of window*)  BEGIN  LeftMargLeftMarginwindow  s
tartline(INTEGER(LinesPerWindow)+1)*(window-1)  Gotoxy(0,startline)    (*first l
ine of this window*)  i0(*line within window*)  kLinesPerWindow DIV 2  Retrline(
f,len,charsin,pos,moved,-k)    LOOP    (*check if this is the line we were posit
ioned to upon entry*)    linepos0  j0  LOIMPLEMENTATION MODULE EditDisplay  (*Di
splay part of a file being edited*)  FROMSCREENIO IMPORT Gotoxy,ScreenControl,  
MadeChange,ScreenWidth,ScreenDepth  FROM Terminal IMPORT WriteString,Write,Write
Ln,Read  FROM MakeEdits IMPORT Position,Retrline,ReadNextChar,ErrorList,ErrorCou
nt,LabelOp  FROMEditCont IMPORT LeftMargin,Files,CurrentWindow,CurrentFile,Thisx
,Thisy,  curx,cury,ReDisplay  FROM IntLogic IMPORT IAND  FROMFiles IMPORT Lookup
,Close,FILE,ReadBlock  FROMSYSTEM IMPORT ADR  CONSTOP  IF (moved0) AND (jCARDINA
L(charsin)) THEN  curxlinepos-LeftMarg  curyi+CARDINAL(startline)  END  INC(j)  
IF jCARDINAL(len) THEN EXIT END    (*check for cursor line*)    ReadNextChar(pos
,ch)  IF ch09x THEN   REPEAT  INC(linepos)  IF (lineposLeftMarg)   AND (linepos(
ScreenWidth+LeftMarg)) THEN   Write(' ')   END  UNTIL IAND(linepos,7)0  ELSIF ch
EOF THEN EXIT  ELSE   INC(linepos)  IF (lineposLeftMarg)  EOF1ax    PROCEDURE Er
rorMessage(s1,s2ARRAY OF CHAR)    (*Display error message at bottom of screen*) 
 VAR iINTEGER  BEGIN  Gotoxy(0,ScreenDepth-1)  ScreenControl(RingBell)  ScreenCo
ntrol(DelEol)  WriteString(s1)WriteString(s2)  END ErrorMessage  PROCEDURE SetWi
ndows(iINTEGER)    (*set number of edit windows in use - you must refresh the en
tire  screen with calls to DisplayFile after a call to this  routine*)  VARj,kCA
RDINAL    BEGIN  Windowsi  ScreenControl(ClearScreen)  AND (linepos(ScreenWidth+
LeftMarg)) THEN   Write(ch)   END  END(*IF chvarious things*)  END (*inner loop*
)  INC(i)  IF linepos(ScreenWidth+LeftMarg) THEN   ScreenControl(DelEol)   END  
IF iLinesPerWindow THEN EXIT  ELSE   WriteLn  linepos0  END  INC(moved)  Retrlin
e(f,len,ic,pos,movedone,1)  IF movedone0 THEN  FOR ii+1 TO LinesPerWindow DO  Sc
reenControl(DelEol)  WriteLn  END  EXIT  END  END(*LOOP*)  END DisplayFIF Window
s1 THEN  LinesPerWindow(ScreenDepth-Windows) DIV Windows  ELSELinesPerWindowScre
enDepth-1 END  FOR j2 TO Windows DO  Gotoxy(0,(LinesPerWindow+1)*(j-1)-1)  Scree
nControl(StartGraph)  FOR k1 TO ScreenWidth DO   ScreenControl(Horizontal)  END 
 ScreenControl(EndGraph)  END  END SetWindows  (*put a line between the windows*
)    VARchCHAR  posPosition  charsin,icINTEGER  len,movedINTEGER  linepos,LeftMa
rgCARDINAL  PROCEDURE SetLeftMarg(fEditFilewi  RAFBGCHDIEile  PROCEDURE DisplayE
rror    (*The error message file contains the messages,     The first two blocks
 give the lengths of the error messages  The remaining blocks give the text of t
he error messages *)  TYPETextARRAY0..63 OF CHAR    VARfFILE(*FILE is a type exp
orted from the module Files*)    bARRAY 0..127 OF CHAR  i,j,k,LengthCARDINAL  tT
ext  ErrorNumberCARDINAL  replyINTEGER  blBOOLEAN  PROCEDURE Count(kCARDINAL)CAR
DINAL  VARiCARDINAL  BEGIN  i0  IF k0 THEx,Thisy)*)  Gotoxy(Thisx,Thisy)  curxCu
rrentWindowThisx  curyCurrentWindowThisy  END DisplayError  BEGIN  Windows0  END
 EditDisplay.  (f,len,charsin,pos,moved,0)  linepos0  FOR ic0 TO charsin DO  Rea
dNextChar(pos,ch)  IF ch09x THEN lineposIAND(liN RETURN 0 END  FOR kk-1 TO 0 BY 
-1 DO  ii+ORD(bk)  END  RETURN i  END Count  PROCEDURE WriteCard(iCARDINAL)  VAR
tARRAY0..3 OF CHAR  j,kCARDINAL  BEGIN  kHIGH(t)  WHILE i0 DO  ji DIV 10  tkCHR(
ORD('0')+i-10*j)  ij  DEC(k)  END  FOR kk+1 TO HIGH(t) DO Write(tk) END  END Wri
teCard  BEGIN  IF ErrorOrdinalErrorCount THEN RETURN END  Gotoxy(0,ScreenDepth-1
)  ErrorNumberErrorListErrorOrdinal.ErrorNum  ScreenControl(DelEol)  WriteString
('Error ')  WriteCard(ErrorNumber)  WriteString('(')WriteCard(ErrorOrdinal+1)  W
riteString(' of ')WriteCard(ErrorCount)  WriteString(') ')  Lookup(f,'ERRMSG.DAT
 ',reply)    (*Lookup opens the file for input/output    reply returns zero if n
o 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 (eg PUN or CON)   but if you do this, you mus
t do your IO through the module   Streams (or InOut, which calls streams), as th
e IO to tDEFINITION MODULE EditStatus    (*Save/return edit status for a file   
 The file EDITSTAT.DAT on the default drive is always used  for edit statii*)  F
ROM Files  IMPORT FILE  FROMCPM IMPORT alfa,exten  PROCEDURE GetPosition(FnFILE)
CARDINAL    (*get file position (character number)*)    PROCEDURE SetPosition(Fn
FILEposCARDINAL)    (*set file position*)  END EditStatus.  he   serial devices 
is performed by that module (it calls Files   to do IO to disc devices)  *)  IF 
reply0 THEN(*OK - file found*)      (*read the first 1 or two blocks of the erro
r     message file, countin the characters preceding the    error emssage we wan
t *)  ReadBlock(f,ADR(b),0,128,reply)  jErrorNumber  IF ErrorNumber128 THEN  iCo
unt(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 cha
racter in block*)  ReadBlock(f,ADR(b),j+2,128,reply)  FOR k0 TO Length-1 DO  IF 
i128 THEN   INC(j)  ReadBlock(f,ADR(b),j+2,128,reply)   i0  END  tkbi  INC(i)  E
ND  tLength0c  WriteString(t)  ELSE  WriteString(' Could not open error messages
 file')  END  blLabelOp(FilesCurrentFile,FALSE,CHR(ErrorOrdinal+0b0h))  ReDispla
y  (*DisplayFile(FilesCurrentFile,CurrentWindow,This  RAFBGCHDIEIMPLEMENTATION M
ODULE EditStatus    (*Save/return edit status for a file    The file EDITSTAT.DA
T on the default drive is always used  for edit statii*)  FROM Files IMPORT Look
up,Create,Close,SeqReadBlock,SeqWriteBlock,SetBlock,  ConvertFileName  FROM Scre
enIO IMPORT Gotoxy,ScreenDepth  FROM SYSTEM IMPORT ADR,TSIZE  FROM Terminal IMPO
RT WriteString  TYPEFileRecRECORD  Filefnalfa  Fileftexten  FilePosCARDINAL  END
    CONSTBytesPerBlock128(*Bytes per disc block*)  EntriesPerBloan be opened*)  
Lookup(datfile,'EDITSTAT.DAT ',reply)  IF reply0 THEN  Create(datfile,'EDITSTAT.
DAT',reply)  IF reply0 THEN   Gotoxy(0,ScreenDepth-1)  WriteString(' Could not o
pen status file')  openedFALSE  END  END  BlockNo60000(*set impossibly big*)    
END EditStatus.  module (it calls Files   to do IO to disc devices)  *)  IF repl
y0 THEN(*OK - file found*)      (*read the first 1 or twck(BytesPerBlock-TSIZE(C
ARDINAL)) DIV TSIZE(FileRec)  FillSizeBytesPerBlock-TSIZE(CARDINAL)-EntriesPerBl
ock*TSIZE(FileRec)  TYPEBlockRECORD  EntriesCARDINAL(*in this block*)  FileEntry
ARRAY0..EntriesPerBlock-1 OF FileRec  FillerARRAY1..FillSize OF CHAR  END    VAR
datfileFILE  BlockNoCARDINAL  EntryNoCARDINAL  BufferBlock  fFILE  replyINTEGER 
 openedBOOLEAN  chCHAR  PROCEDURE WriteFile  BEGIN  SetBlock(datfile,BlockNo)  S
eqWriteBlock(datfile,ADR(Buffer),ine()INTEGER    (*move  to start of next line  
returns characters advanced  positions to first character of next line*)  VARpos
INTEGER  bBOOLEAN  BEGIN  AdvanceOKTRUE  pos0  LOOP  chWorking.CharsCharPos  IF 
chEOF THEN   AdvanceOKFALSE  EXIT   END  IF (chCR) OR (chLF) OR (chFF) THEN   IF
 NOT Advance() THEN EXIT END  chWorking.CharsCharPos  IF chLF THEN bAdvance() EN
D  EXIT  END  INC(pos)  IF NOT Advance() THEN   AdvanceOKFABytesPerBlock,reply) 
 Close(datfile)  Lookup(datfile,'EDITSTAT.DAT ',reply)  END WriteFile    PROCEDU
RE MakeEntry  BEGIN  WITH Buffer.FileEntryEntryNo DO  Filefnf.f.fcbfn  Fileftf.f
.fcbft  FilePos0  END  WriteFile  END MakeEntry    PROCEDURE ExamineBlock  BEGIN
  EntryNo0  WHILE (EntryNoBuffer.Entries)       AND (   (Buffer.FileEntryEntryNo
.Filefnf.f.fcbfn)    OR (Buffer.FileEntryEntryNo.Fileftf.f.fcbft)) DO  INC(Entry
No)  END  IF EntryNoBuffer.EntrLSE  EXIT   END  END (*LOOP*)  RETURN pos  END Ad
vanceLine      PROCEDURE Retrline(VAR fEditFileVAR len,posINTEGERVAR pPosition  
VAR linesmovedINTEGERlinestomoveINTEGER)  (*return the position in the current l
ine*)  VARchCHAR  iINTEGER  bBOOLEAN  BEGIN  setcurpos(f)  linesmoved0    IF Cha
rPosINTEGER(Working.BlockLen) THEN  CharPosWorking.BlockLen   END    IF linestom
ove-16736 THEN (*go to top of file      This is a recent mod to speed up      ie
s THEN  IF Buffer.EntriesHIGH(Buffer.FileEntry) THEN  INC(Buffer.Entries)  MakeE
ntry  ELSEEntryNo60000 END  END  END ExamineBlock  PROCEDURE Search    (*Find en
try - create entry if neccessary*)  BEGIN  IF BlockNo60000 THEN ExamineBlock  EL
SE EntryNo60000 END  IF EntryNo60000 THEN  SetBlock(datfile,0)  BlockNo0  END  W
HILE EntryNo60000 DO  SeqReadBlock(datfile,ADR(Buffer),BytesPerBlock,reply)  IF 
replyBytesPerBlock THEN  Buffer.Entries1  EntryNoDEFINITION MODULE Keyboard     
 (*Act on commands entered from the keyboard     This module handles keyboard de
spatch during file editting*)    PROCEDURE Interpret    (*Start keyboard interpr
etation (effectively edit mode)*)  END Keyboard.  rrorOrdinal+0b0h))  ReDisplay 
 (*DisplayFile(FilesCurrentFile,CurrentWindow,Thisx,Thisy)*)  Gotoxy(Thisx,Thisy
)  curxCurrentWindowThisx  curyCurrentWindowThisy  END DisplayError  BEGIN  Wind
ows0  END EditDisplay.  0  MakeEntry  ELSE  ExamineBlock  END  IF EntryNo60000 T
HEN INC(BlockNo) END  END  END Search      PROCEDURE GetPosition(FnFILE)CARDINAL
  BEGIN  fFn  IF opened THEN  Search  RETURN Buffer.FileEntryEntryNo.FilePos  EL
SERETURN 0 END  END GetPosition    PROCEDURE SetPosition(FnFILEPosCARDINAL)  BEG
IN  fFn  IF opened THEN  Search  Buffer.FileEntryEntryNo.FilePosPos  WriteFile  
END  END SetPosition    BEGIN  openedTRUE(*assume file c  RAFBGCHDIE(*escape som
ething*)  ReadAChar(ch)  Macro(ch,ParValue)  ParValue0  ELSIF ch11x THEN Quick  
ELSE  FoundTRUE (*Set false as sign of failure *)  WHILE (ParValue0) AND Found D
O   IF CheckInterrupt() THEN ParValue0   ELSE  DEC(ParValue)  IF chCHR(127) THEN
 chCHR(ORD(ch)-128) END  MainTablech  END  END  ParValue0  END  END EscapeCount 
 PROCEDURE Escape  VAR SaveBackBOOLEAN  BEGIN  ReadAChar(ch)  IF ch'-' THEN  Bac
kwardsTRUE  ReadA(*Keyboard despatcher and some editing functions    Copyright (
C) Dave Moore FTL Modula-2 1986    Modifications  20 July 86 Handling of backwar
ds changed so that direction     of find remains same unless explicit count ente
red.     This allows use of just L for backwards searches    *)    IMPLEMENTATIO
N MODULE Keyboard    FROMScreenDummy IMPORT RingBell,Gotoxy,ClearScreen,OutputTo
Screen  FROMEditDisplay IMPORT ErrorMessage,Windows,DisplayError,ErrorOrdinal  F
ROMEditControl IMPORT InsOneChChar(ch)  EscapeCount    ELSIF (ch'0') AND (ch'9')
 THEN   BackwardsFALSE  EscapeCount  ELSIF ch04x THEN DefMacroRedisplay  ELSIF c
h0cx THEN LearnMacroRedisplay  ELSIF ch10x THEN ClearScreenPrintMacrosRedisplay 
 ELSE Macro(ch,1) END  END Escape  PROCEDURE Endinterpret    (*End keyboard inte
rpretation    Note that this module can be assigned to a key so that you can  ex
it from edit mode gracefully  *)  BEGIN  interpretingFALSE  END Endinterpret  PR
OCEDURE InsChar  BEar,DelOneChar,DelToEOL,DelFullLine,     Left,Right,Down,Up,Up
Screen,DownScreen,Top,Bottom,     CurrentWindow,FilesOpened,curx,cury,ChangeWind
ow,     ScrollUp,ScrollDown,ResetScreenPos,     Top,Bottom,FarLeft,FarRight,File
s,Search,OverWrite,      FindWord,ReDisplay,GoToLabel,Updated,CurrentFile,     T
hisx,Thisy,WindowFile,MovedOK  FROMMakeEdit IMPORT PrepareString,FindString,Labe
lOp,BlockCopy,BlockDel,  ErrorCount  FROMDoMenu  IMPORT     GetString,Redisplay 
 FROMMacrosIMPORTDefMaGIN  IF InsertMode THEN   InsOneChar(ch)  ELSE  OverWrite(
ch)  END  END InsChar  PROCEDURE BreakLine  BEGIN  InsOneChar(0dx)  Left  END Br
eakLine  VARLenCARDINAL0  ReplaceStringARRAY0..60 OF CHAR  RLenINTEGER  PROCEDUR
E DoFind  BEGIN    (* the passing of the backwards status is a real kludge     w
hich was introduced as a quick fix while I was a long     way from home, to avoi
d having to update my work discs     at home with too much stuff *)    IF Len0 T
HEN   IF Backcro,ReadAChar,Macro,LearnMacro,PrintMacros,  CheckInterrupt,Found  
(*Act on commands entered from the keyboard     This module handles keyboard des
patch during file editting*)    TYPETabArrayARRAY 0x..7fx OF PROC  TablePOINTER 
TO TabARRAY  VAR  chCHAR  MainTableTabArray  interpretingBOOLEAN  ParValueINTEGE
R0  GroupOfCodesARRAY1..30 OF CHAR  GroupLen,GroupPosCARDINAL  iCARDINAL  Insert
ModeBOOLEANTRUE  NoBellBOOLEANFALSE  BackwardsBOOLEANFALSE  PROCEDURE Bellwards 
THEN FoundSearch(ReplaceString,RLen,Len+128)  ELSE FoundSearch(ReplaceString,RLe
n,Len) END  END  END DoFind  PROCEDURE Find  VARSearchStringARRAY0..60 OF CHAR  
BEGIN  GetString(SearchString,Len,'Find')  IF Len0 THEN  PrepareString(SearchStr
ing,Len)  RLen-1  DoFind  ELSE  ReDisplay  END END Find  PROCEDURE Replace  VARS
earchStringARRAY0..60 OF CHAR  LCARDINAL    BEGIN  GetString(SearchString,Len,'A
lter')  IF Len0 THEN  PrepareString(SearchStri    (*ring the bell - primarilly u
sed for un-assigned keys*)  BEGIN  IF NOT NoBell THEN  RingBell  END  ParValue0 
 END Bell  PROCEDURE QuickFORWARD  PROCEDURE EscapeCount    (*escape character p
rocessing    if followed by number, repeats next key given number of times  *)  
VARiINTEGER  BEGIN  ParValue0  LOOP  IF (ch'0') AND (ch'9') THEN  ParValue10*Par
Value+(ORD(ch)-ORD('0'))  ELSE   EXIT  END  ReadAChar(ch)  END(*LOOP*)    IF (ch
1bx) OR (ch0ax) THEN   RAFBGCHDIEng,Len)  GetString(ReplaceString,L,'To   ')  RL
enL  DoFind  ELSE  ReDisplay  END  END Replace  PROCEDURE SetUpdated  BEGIN  Upd
atedCurrentFileTRUE  END SetUpdated  PROCEDURE DelABlock(iCARDINAL)BOOLEAN  VAR 
bBOOLEAN  jCARDINAL  BEGIN  bBlockDel(Filesi)  jCurrentFile  ChangeWindow(i)  Re
display  ChangeWindow(j)  RETURN b  END DelABlock  PROCEDURE DefLabel  VARiCARDI
NAL  b,rBOOLEAN  BEGIN  ReadAChar(ch)  iCurrentWindow    (*If control B'h)  IF c
hCHR(127) THEN chCHR(ORD(ch)-128) END  MainTablech  END  END Interpret    PROCED
URE FlipInsert  BEGIN  InsertModeNOT InsertMode  END FlipInsert    PROCEDURE Del
Word  BEGIN  FindWord(FALSE,TRUE)  END DelWord    PROCEDURE ForwardWord  BEGIN  
FindWord(FALSE,FALSE)  END ForwardWord  PROCEDURE BackwardWord  BEGIN  FindWord(
TRUE,FALSE)  END BackwardWord    (*Initialise a keyboard dispatch tables*)    BE
GIN  FOR ch0x TO 7fx DO MainTablechBell END    MainTabs intervene, change source
 window*)  WHILE ch02x (*CTRL B*) DO  IF iWindows THEN i1 ELSE INC(i) END  Gotox
y(curxi,curyi)  ReadAChar(ch)  END  chCAP(ch)  rFALSE  iWindowFilei  CASE ch OF 
 'C',03xbBlockCopy(Filesi,FilesCurrentFile)    'Y',19xbDelABlock(i)    'V',16xbB
lockCopy(Filesi,FilesCurrentFile)  IF b  THEN bDelABlock(i) END    ELSE   b Labe
lOp(FilesCurrentFile,TRUE,ch)  rTRUE  END  IF b THEN  IF NOT r le1bxEscape    (*
printable characters are inserted as is *)    FOR ch' ' TO '' DO MainTablechInsC
har END  MainTable0dxInsChar  MainTable09xInsChar    (*cursor control keys*)    
MainTable13xLeft  MainTable18xDown  MainTable04xRight  MainTable05xUp    (*Other
 control keys*)    MainTable07xDelOneChar(*Ctrl G*)  MainTable19xDelFullLine(*Ct
rl Y*)  MainTable16xFlipInsert(*Ctrl V*)  MainTable0exBreakLine(*Ctrl N*)  MainT
able08xTHEN ReDisplaySetUpdated END  ELSE  IF r THEN ErrorMessage('Bad label',' 
')  ELSE ErrorMessage('Block Undefined',' ') END  Gotoxy(Thisx,Thisy)  END  END 
DefLabel  PROCEDURE MoveToError  PROCEDURE GotoError(iCARDINAL)  BEGIN  IF iErro
rCount THEN ErrorOrdinaliDisplayError  ELSE  ErrorMessage(' No such error ',' ')
  END  END GotoError    BEGIN  ReadAChar(ch)  chCAP(ch)  CASE ch OF  'N',0exGoto
Error(ErrorOrdinal+1)  'P',10xGotoError(ErrorOrdinal-1)  'C',03xGotLeft(*Ctrl H 
(Backspace)*)  MainTable1axScrollDown(*Ctrl Z*)  MainTable03xDownScreen(*Ctrl C*
)  MainTable12xUpScreen(*Ctrl R*)  MainTable14xDelWord(*Ctrl T*)  MainTable06xFo
rwardWord(*Ctrl F*)  MainTable0axEscape(*treat line feed as if escape*)  MainTab
le01xBackwardWord(*Ctrl A*)  MainTable11xQuick(*Ctrl Q*)  MainTable02xWindow(*Ct
rl B*)  MainTable17xScrollUp(*Ctrl W*)  MainTable0bxDefLabel(*Ctrl K*)  MainTabl
e7fxDelBacoError(ErrorOrdinal)  '0'..'9'GotoError(ORD(ch)-ORD('0'))  END  END Mo
veToError  PROCEDURE Quick  VARFirstBOOLEAN  BEGIN  FirstTRUE  ReadAChar(ch)  ch
CAP(ch)  IF ParValue0 THEN ParValue1 END  WHILE ParValue0 DO    CASE ch OF      
'E',05xMoveToError      'Y',19xDelToEOL      'D',04xFarRight      'S',13xFarLeft
      'R',12xTop      'C',03xBottom      'F',06xIF First THEN Find ELSE DoFind E
ND       'A',01xIF First THEN Replace ELSE DoFind END      'G',07xk(*Del *)  Mai
nTable0cxDoFind(*Ctrl L*) MainTable1fxDelBack(*- on Osborne 1*)    (*The next ke
y,  assigned to Endinterpret is called,  'Menu' in the documentation. That is, t
o process a menu,  we drop out of edit mode. The calling routine (Me) the calls 
 the menu routine - not this module*)    MainTable0fxEndinterpret(*Ctrl O*)  END
 Keyboard.  DOC J XScNoBellNOT NoBell      'K','B','0'..'9'GoToLabel(ch)   END  
  FirstFALSE    DEC(ParValue)    END  END Quick  PROCEDURE Window  VARiCARDINAL 
 BEGIN  iCurrentWindow+1  IF iWindows THEN i1 END  ChangeWindow(i)  ReDisplay  E
ND Window  PROCEDURE DelBack  BEGIN  Left  IF MovedOK THEN DelOneChar END  END D
elBack  PROCEDURE Interpret    (*Start keyboard interpretation*)  BEGIN  ResetSc
reenPos  interpretingTRUE  ParValue0  WHILE interpreting DO  ReadAChar(c  RAFBGC
HDIEacroPoint  LearnchCHAR  LearnLenCARDINAL  LearningBOOLEANFALSE  TextARRAY1..
60 OF CHAR  iCARDINAL  KeySeqARRAY1..10 OF CHAR  KeyChainBasePKeyChainNIL(*base 
of table of key defs*)  LastKeyPos,KeyPosPKeyChain(*pointers used for searching*
)  LearnKeyPKeyChain(*pointer to key being defined*)    (*keep a circular buffer
 of characters while matching is  happening*)    inCARDINAL1  outCARDINAL1  look
CARDINAL  BufferARRAY1..11 OF CHAR  ShowChangeBOOLEAN DEFINITION MODULE Macros  
  (*A simple macro processor for  the editor    Can probably be easily hacked fo
r other purposes*)    VARFoundBOOLEANTRUE    (*Found is a variable which, if set
 to false, will abort all  macros *)  PROCEDURE LearnMacro  PROCEDURE DefMacro  
  (*define a macro *)    PROCEDURE ReadAChar(VAR chCHAR)    (*read next characte
r - from macro if one active      - from terminal if not*)    PROCEDURE Macro(ch
CHARrepeatINTEGER)    (*start macro with given character value PROCEDURE SearchT
oNext(chCHAR)    (*Search for the character ch    KeyPos points to the first tab
le  to examine  for a match  *)  BEGIN  WHILE (KeyPosNIL) AND (KeyPos.chch) DO  
KeyPosKeyPos.NextAlt  END  END SearchToNext  PROCEDURE BuildKeySeq    (*Enter a 
key sequence into the key sequence tree    On entry, KeySeq contains sequence to
 build    On exit, KeyPos points to entry for macro pointer*)  BEGIN  i1  KeyPos
KeyChainBase  LastKeyPosNIL  (* First scan down common   (must be alpha)*)  PROC
EDURE StoreMacros  PROCEDURE PrintMacros  PROCEDURE CheckInterrupt()BOOLEAN  END
 Macros.  00 MOD L 'mineBlock  ELSE EntryNo60000 END  IF EntryNo60000 THEN  SetB
lock(datfile,0)  BlockNo0  END  WHILE EntryNo60000 DO  SeqReadBlock(datfile,ADR(
Buffer),BytesPerBlock,reply)  IF replyBytesPerBlock THEN  Buffer.Entries1  Entry
Nopart *)    WHILE (KeyPosNIL) AND  (KeySeqi' ') DO    SearchToNext(KeySeqi)  IF
 KeyPosNIL THEN   INC(i)  LastKeyPosKeyPos  LearnKeyKeyPos  KeyPosKeyPos.NextCha
r  END  END  IF KeySeqi' ' THEN (*must already be in table*)  RETURN  END    (* 
Assuming this is not the first entry, LastKeyPos points     to the entry to whic
h we should attach this new character  *)  WHILE  (KeySeqi' ') DO  NEW(KeyPos)  
WITH KeyPos DO  chKeySeqi  NextIMPLEMENTATION MODULE Macros  FROMDoMenu IMPORT G
etString,Redisplay  FROMStorage IMPORT  ALLOCATE,DEALLOCATE  FROMTerminal IMPORT
 BusyRead,WriteString,WriteLn,Write  FROMFiles IMPORT FILE,SeqReadBlock,SeqWrite
Block,Lookup,Create,Close  FROMSYSTEM IMPORT ADR,TSIZE  FROMEditDisplay IMPORT E
rrorMessage  FROMFastMove IMPORT Moveup  FROMScreenDu IMPORT OutputToScreen  CON
STBlockLen128  ESC1bx  TYPE  KeyDefRECORD  Length1..61  CommCharsARRAY1..20 OF C
HAR  END  PKeyDefPOINCharNIL  TerminatorFALSE  IF LastKeyPosNIL THEN  NextAltLas
tKeyPos.NextChar  LastKeyPos.NextCharKeyPos  ELSE  NextAltKeyChainBase  KeyChain
BaseKeyPos  END  END  LastKeyPosKeyPos  INC(i)  END  LearnKeyKeyPos  END BuildKe
ySeq     PROCEDURE WaitForCh  BEGIN  IF NOT ShowChange THEN  ShowChangeTRUE  Out
putToScreen(TRUE)  Redisplay  END  REPEAT  BusyRead(ch)  UNTIL ch0x  END WaitFor
Ch  PROCEDURE CheckInterrupt()BOTER TO KeyDef  MacroPointRECORD  PosCARDINAL  De
fPKeyDef  CountINTEGER  END  PKeyChainPOINTER TO KeyChain  KeyChainRECORD  chCHA
R  NextAltPKeyChain (*next alternative*)  CASE TerminatorBOOLEAN OF  TRUE (*term
inates a key sequence *)  DefPKeyDef  FALSE (*in the moddle of a key sequence *)
  NextCharPKeyChain  END (*CASE*)  END(*RECORD*)    VAR  chCHAR  CommandsARRAY''
..'Z' OF PKeyDef  MacroDepthCARDINAL0  MacroStackARRAY1..5 OF M  RAFBGCHDIEOLEAN
    (*Check the keyboard for an interupt (Control U)    Also, if Escape has been
 typed, stop terminal output  until another character is typed*)    VARch1CHAR  
BEGIN  BusyRead(ch1)  CASE ch1 OF   15xRETURN TRUE        1bxShowChangeFALSE    
  OutputToScreen(FALSE)  END  RETURN FALSE  END CheckInterrupt  PROCEDURE GetACh
ar(VAR ch1CHAR)  BEGIN  IF MacroDepth0 THEN  WaitForCh  ch1ch  IF Learning AND (
LearnLenHIGH(Text)) THEN  INC(LearnLen)  TextLearnLension did so), but that woul
d prevent the  use of repeat counts with function/arrow  keys. So instead ESC  i
s returned, where  ESC  is always the macro we just found*)    Commands''Def  Sp
ecialSequenceTRUE  ResultESC    RETURN  ELSE  KeyPosNextChar  END  END  END  END
 ReadAChar    PROCEDURE GetDefChar  VARTextARRAY1..1 OF CHAR  BEGIN  GetString(T
ext,LearnLen,'Char to define')  LearnchCAP(Text1)  IF LearnchESC THEN  ch  END  
ELSE  WITH MacroStackMacroDepth DO  IF PosDef.Length THEN      DEC(Count)      I
F CheckInterrupt() OR NOT Found THEN  MacroDepth1  Count0  END      IF Count1 TH
EN  DEC(MacroDepth)      ELSE  Pos1  END      GetAChar(ch1)  ELSE  ch1Def.CommCh
arsPos  INC(Pos)  END  END  END  END GetAChar  PROCEDURE AddMacro(pPKeyDefrepeat
INTEGER)  BEGIN  IF (pNIL) AND (MacroDepthHIGH(MacroStack)) THEN    GetString(Ke
ySeq,LearnLen,'Key to define')  BuildKeySeq  END  END GetDefChar  PROCEDURE DefM
acroText  VARpPKeyDef  BEGIN  IF LearnLen0 THEN  ALLOCATE(p,TSIZE(CARDINAL)+Lear
nLen)  IF LearnchESC THEN   LearnKey.Defp  LearnKey.TerminatorTRUE  ELSE   Comma
ndsLearnchp   END  WITH p DO  LengthLearnLen  FOR LearnLenLearnLen TO 1 BY -1 DO
  CommCharsLearnLenTextLearnLen  END  END    END  END DefMacroText  PROCEDURE Le
arnMacro    (*make sure that macro is not recursive*)      FOR i1 TO MacroDepth 
DO  IF MacroStacki.Defp THEN  ErrorMessage('Recursive macros!',' ')  MacroDepth0
  RETURN  END  END  INC(MacroDepth)  WITH MacroStackMacroDepth DO  Pos1  Defp  C
ountrepeat  END(*WITH*)  END(*pNIL etc*)  END AddMacro  VARSpecialSequenceBOOLEA
NFALSE  PROCEDURE ReadAChar(VAR ResultCHAR)    (*read next character, checking f
or arrows/function keys  in and out point to(*Learn a macro definition  called a
t either end of definition*)    BEGIN  IF NOT Learning THEN  GetDefChar  Learnin
gTRUE  LearnLen0  ELSE  LearnLenLearnLen-2  DefMacroText  LearningFALSE  END  EN
D LearnMacro  PROCEDURE DefMacro  BEGIN  GetDefChar  IF (Learnch'A') AND (Learnc
h'Z') OR (LearnchESC) THEN  GetString(Text,LearnLen,'Macro')  DefMacroText  END 
 END DefMacro  PROCEDURE Macro(chCHARrepeatINTEGER)  VARiCARDINAL  BEGIN  chCAP(
ch)  IF the characters which have been read ahead  By ReadAChar in an attempt to
 resolve a macro    When ReadAChar is entered, if this buffer is not empty,  the
 first character is to be looked up to see if it is a   start of a key definitio
n*)  PROCEDURE IncPointer(VAR iCARDINAL)  BEGIN  IF iHIGH(Buffer) THEN i0 END  I
NC(i)  END IncPointer  BEGIN  lookout  IF SpecialSequence THEN     (*  is used f
or function/arrow keys as a macro     so that repeat counts can still be used*) 
   Result' ch' ' THEN chCHR(ORD(ch)+64) END  IF (ch'') AND (ch'Z') THEN  AddMacr
o(Commandsch,repeat)  END  END Macro  VARFFILE  replyINTEGER  PROCEDURE LoadMacr
os  VARBlockARRAY0..BlockLen-1 OF CHAR  BEGIN  LOOP  SeqReadBlock(F,ADR(Block),B
lockLen,reply)  IF replyBlockLen THEN EXIT END  reply0  WHILE Blockreply0x DO  L
earnLenORD(Blockreply)  LearnchBlockreply+1  IF LearnchESC THEN  Moveup(ADR(Bloc
kreply+2),ADR(KeySeq),10)  BuildKeySeq'  SpecialSequenceFALSE  RETURN  END  KeyP
osKeyChainBase  LOOP  IF inlook THEN  ResultBufferlook  IncPointer(look)  ELSE  
GetAChar(Result)  BufferinResult  IncPointer(in)  lookin  END  SearchToNext(Resu
lt)  IF KeyPosNIL THEN  ResultBufferout  IncPointer(out)  RETURN  END  WITH KeyP
os DO  IF Terminator THEN  outlook  inlook    (* we could add the macro   direct
ly at this point (the first  ver  RAFBGCHDIE  replyreply+10  END    replyreply+2
  FOR i1 TO LearnLen DO  TextiBlockreply  INC(reply)  END  DefMacroText  END  EN
D  END LoadMacros  PROCEDURE StoreMacros  VARBlockARRAY0..BlockLen-1 OF CHAR    
PROCEDURE StoreOneMacro(pPKeyDef)  BEGIN  IF pNIL THEN  WITH p DO  IF (reply+Len
gth+14)BlockLen THEN  Blockreply0x  SeqWriteBlock(F,ADR(Block),BlockLen,reply)  
reply0  END  BlockreplyCHR(Length)  BlocDEFINITION MODULE MakeEdits      (*Routi
nes to edit a file    (i.e., actually make changes to the file)    D Moore 11 Ja
n 85*)    FROM Files IMPORT FileName    TYPEEditFile  Position    ErrorRecordREC
ORD  ErrorNumCARDINAL  CharPCARDINAL  END  ErrorArrayARRAY0..9 OF ErrorRecord  V
ARErrorListErrorArray  ErrorCountCARDINAL    PROCEDURE OpenFile(VAR fEditFilefnF
ileNameVAR replyINTEGERPosCARDINAL)    (*Load the file into memory    If insuffi
cient memory, returns replykreply+1Learnch  IF LearnchESC THEN  Moveup(ADR(KeySe
q),ADR(Blockreply+2),10)  replyreply+10  END  replyreply+2  FOR i1 TO Length DO 
 BlockreplyCommCharsi  INC(reply)  END  END(*WITH p*)  END (*IF NIL*)  END Store
OneMacro  PROCEDURE OutKeySeq(CharNoCARDINALpPKeyChain)  BEGIN  IF pNIL THEN  WI
TH p DO  KeySeqCharNoch  IF Terminator THEN  StoreOneMacro(Def)  ELSE  OutKeySeq
(CharNo+1,NextChar)  KeySeqCh-3  if file not found, returns reply-2  reply0 if o
k, returns blocks read*)    PROCEDURE CloseFile(VAR fEditFileVAR replyINTEGER)  
  (*Write out changes to an edit file and close it  Done returns false if out of
 disc space*)    PROCEDURE AbandonFile(fEditFile)    (*Abandon changes to an edi
t file*)  PROCEDURE GetPosition(VAR fEditFileVAR pPosition)  PROCEDURE SetPositi
on(VAR fEditFilepPosition)  (*get/set position in a file  GetPosition returns th
e curent position  DefineLabel definearNo+1' '  END  OutKeySeq(CharNo,NextAlt)  
END  END  END OutKeySeq  BEGIN  Learnch'A'  WHILE (CommandsLearnchNIL) AND (Lear
nch'Z') DO   LearnchCHR(ORD(Learnch)+1)  END  IF Learnch'Z' THEN RETURN END  Cre
ate(F,'MACROS.DAT ',reply)  IF reply0 THEN  WriteString(' could not save macros 
file')  WriteLn  RETURN  END  IF reply0 THEN RETURN END  reply0  FOR Learnch'A' 
TO 'Z' DO StoreOneMacro(CommandsLearnch) END    (*Now output key sequences*s a l
abel  This label must not be altered unless it is deleted  with DelPosition firs
t*)    PROCEDURE LabelOp(VAR fEditFileDefineBOOLEANchCHAR)BOOLEAN    (*Define or
 set a label  ch is a character from the set 0..9,B,K  *)    PROCEDURE DelChars(
VAR fEditFilenumberINTEGER)    (*delete a number of characters  if number is 0, 
it has the following meanings  -1 delete to end of line  -2 delete entire line  
-3 delete remainder of file*)  PROCEDURE InsChars(VAR fEditFileVAR SARRAY OF CHA
R)    LearnchESC  KeySeq'          '  OutKeySeq(1,KeyChainBase)    IF reply0 THE
N  Blockreply0x  SeqWriteBlock(F,ADR(Block),BlockLen,reply)  END  Close(F)  END 
StoreMacros  PROCEDURE OutCh(chCHAR)  BEGIN  IF ch' ' THEN  Write('')Write(CHR(O
RD(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(CommCharsilenINTEGER)  (*insert characters*)    PROCEDUR
E Retrline(VAR fEditFileVAR len,posINTEGER  VAR pPositionVAR LinesmovedINTEGERLi
nesINTEGER)    (*return information about a line for the given file    len retur
ns the length of the line  pos returns current position in the line (character n
umber)  p   returns position of start of line  Linesmoved returns number of line
s actually moved - but only  if move was negative. Returns negative value  lines
 (input) is number of lines to move from cu)   END  END      WriteLn      END  E
ND  WriteString(' Enter any character to continue ')  WaitForCh  END PrintMacros
  BEGIN  FOR ch'' TO 'Z' DO CommandschNIL END  ShowChangeTRUE  Lookup(F,'MACROS.
DAT ',reply)  IF reply0 THEN  LoadMacros  END    END Macros.  )  W02xWindow(*Ctr
l B*)  MainTable17xScrollUp(*Ctrl W*)  MainTable0bxDefLabel(*Ctrl K*)  MainTable
7fxDelBac  RAFBGCHDIErrent line  *)    PROCEDURE ReadNextChar(VAR pPositionVAR c
hCHAR)  (*Read next character from a line  p must be a position returned by Retr
line or ReadCh - not GetPosition*)    PROCEDURE PrepareString(sARRAY OF CHARlenI
NTEGER)    (*prepare a string for use in a find command*)    PROCEDURE BackOneCh
ar(VAR fEditFile)BOOLEAN  PROCEDURE ForwardOneChar(VAR fEditFile)BOOLEAN    PROC
EDURE FindString(VAR fEditFileBackwardsBOOLEAN)BOOLEAN    (*Actually find the ne
xt occurrence of the string nning of current line  move required number of lines
*)        IF linestomove0 THEN  WHILE (linestomove0)       AND ((CharPos0) OR (W
orking.PredNIL)) DO  INC(linestomove)    (*move back over cr/lf*)    IF Backup()
 AND (Working.CharsCharPosLF) THEN  bBackup()  END  DEC(linesmoved)  lenBackupLi
ne()  END      ELSE  WHILE (linestomove0)  AND (  (CharPosINTEGER(Working.BlockL
en))      OR (Working.NextNIL)) DO     DEC(linestomove)  lenAd   Done returns tr
ue if one is found*)  PROCEDURE GetCurrentChar(VAR fEditFile)CHAR    (*Return ch
aracter currently positioned to*)    PROCEDURE CallWithFile(nameARRAY OF CHARVAR
 fEditFile)  PROCEDURE FileType(VAR fEditFile)CARDINAL    (*Call program with fi
le as parameter*)  PROCEDURE BlockCopy(VAR FromFile,ToFileEditFile)BOOLEAN  PROC
EDURE BlockDel(VAR FromFileEditFile)BOOLEAN  PROCEDURE DefineErrors(VAR fEditFil
e)  END MakeEdits.              vanceLine()  IF AdvanceOK THEN INC(linesmoved) E
ND  END  END      END  savecurpos(f)pf.CurPos  IF Working.CharsCharPosEOF THEN  
  (*IF we are at end of file, reposition to start    of current line as Retrline
 always returns    position as at start of line*)    lenBackupLine()  savecurpos
(f)  pf.CurPos  poslen  ELSE  lenAdvanceLine()  END  f.CurPosp  END Retrline  PR
OCEDURE ReadNextChar(VAR pPositionVAR chCHAR)  BEGIN  WITH p DO  IF Offset( /+ ,
-!s678ch  *)  BEGIN  WHILE (KeyPosNIL) AND (KeyPos.chch) DO  KeyPosKeyPos.NextAl
t  END  END SearchToNext  PROCEDURE BuildKeySeq    (*Enter a key sequence into t
he key sequence tree    On entry, KeySeq contains sequence to build    On exit, 
KeyPos points to entry for macro pointer*)  BEGIN  i1  KeyPosKeyChainBase  LastK
eyPosNIL  (* First scan down common Block.BlockLen THEN  IF Block.NextNIL THEN  
chEOF  RETURN  ELSE  BlockBlock.Next  Offset0  END  END  chBlock.CharsOffset  IF
 chEOF THEN OffsetOffset+1 END  END  END ReadNextChar  PROCEDURE GetCurrentChar(
VAR fEditFile)CHAR    BEGIN  posf.CurPos  ReadNextChar(pos,ch)  RETURN ch  END G
etCurrentChar  PROCEDURE  BackOneChar(VAR fEditFile)BOOLEAN  BEGIN  setcurpos(f)
  bBackup()  savecurpos(f)  RETURN b  END BackOneChar    PROCEDURE  ForwardOneCh
ar(VAR fEditFile)BOOLEAN  BEGIN  setcurpos(f)  bAdvance()  savecurpos(f)  RETURN
 b  END ForwardOneChar  VARStringARRAY0..59 OF CHAR  StringLenCARDINAL0  MatchCh
arNoCARDINAL  MatchCharCHAR    PROCEDURE Matches()BOOLEAN  BEGIN  RETURN (Workin
g.CharsCharPosStringMatchCharNo)      OR (Working.CharsCharPosCAP(StringMatchCha
rNo))  END Matches  PROCEDURE PrepareString(sARRAY OF CHARlenINTEGER)    BEGIN  
StringLenlen  Moveup(AD  QC and QR*)  Workingf.Chain  CharPos0  pos0  ELSIF line
stomove16736 THEN  WHILE Working.NextNIL DO  WorkingWorking.Next  END  CharPosOR
D(Working.BlockLen)  IF Working.CharsCharPos-1EOF THEN  DEC(CharPos)  END  savec
urpos(f)  pf.CurPos  posBackupLine()  f.CurPosp  ELSE      (*chase backwards unt
il a CR, LF or FF is found and        calculate position in line*)      posBacku
pLine()      len0        (*now positioned to begi  RAFBGCHDIER(s),ADR(String),le
n)  END PrepareString  (*prepare a string for use in a find command*)    PROCEDU
RE FindString(VAR fEditFileBackwardsBOOLEAN)BOOLEAN      (*backwards not yet imp
lemented*)  BEGIN  IF StringLen0 THEN RETURN TRUE END  setcurpos(f)  IF Backward
s THEN  MatchCharStringStringLen-1  LOOP  IF NOT Backup() THEN EXIT END  IF (Wor
king.CharsCharPosMatchChar)     OR (Working.CharsCharPosCAP(MatchChar)) THEN  Ma
tchCharNoStringLen-2  savecurpos(f)  etPosition(VAR fEditFilepPosition)  (*get/s
et position in a file*)  BEGIN  f.CurPosp    (*pointer may be pointing just afte
r end of block  (after deletes), regularize that situation*)    WITH f.CurPos DO
  IF     (OffsetBlock.BlockLen)   AND (Block.NextNIL) THEN  Offset0  BlockBlock.
Next  END  END   END SetPosition  PROCEDURE LabelOp(VAR fEditFileDefineBOOLEANch
CHAR)BOOLEAN  (*  perform a label operation , return true if successful  Define 
is true if tWHILE (MatchCharNo0)      AND (Backup())      AND Matches() DO  DEC(
MatchCharNo)  END  IF MatchCharNo0 THEN RETURN TRUE END  IF Backup() AND Matches
()      AND (MatchCharNo0) THEN  RETURN TRUE  END  setcurpos(f)  END  END  ELSE 
 MatchCharString0  LOOP  IF NOT Advance() THEN EXIT END  IF (Working.CharsCharPo
sMatchChar)    OR (Working.CharsCharPosCAP(MatchChar)) THEN  MatchCharNo1  savec
urpos(f)  WHIhe operation is a define label  it is false if it is a goto label  
*)    VARiCARDINAL  BEGIN  (*$A*)  chCAP(ch)  CASE ch OF  'B' i10  'K','K' i11  
1x..3xiORD(ch)+11  '0'..'9'iORD(ch)-ORD('0')  0b0x..0b9xiORD(ch)-0b0h+15  ELSE R
ETURN FALSE  END  IF Define THEN  GetPosition(f,f.Labelsi)  ELSE  IF f.Labelsi.B
lockNIL THEN RETURN FALSE END  SetPosition(f,f.Labelsi)   END  RETURN TRUE  END 
LabelOp  PROCEDURE Advance()BOOLEAN    (*advance a LE (MatchCharNoStringLen)    
  AND (Advance())      AND  Matches() DO  INC(MatchCharNo)  END  IF MatchCharNoS
tringLen THEN  RETURN TRUE  END  setcurpos(f)  END  END  END  savecurpos(f)  RET
URN FALSE  END FindString  (*Actually find the next occurrence of the string    
Done returns true if one is found*)  PROCEDURE CallWithFile(NameARRAY OF CHARVAR
 fEditFile)  BEGIN  MakeCall(Name,f.f.f)  END CallWithFile  PROCEDURE FileType(V
AR fEditFcharacter position in the current file*)  BEGIN  INC(CharPos)  IF CharP
osINTEGER(Working.BlockLen) THEN    IF Working.NextNIL THEN  WorkingWorking.Next
  CharPos0  ELSE  RETURN FALSE  END  END (*CharPosBlockLen*)  RETURN Working.Cha
rsCharPosEOF  END Advance  PROCEDURE InsideBlock(VAR FEditFile)BOOLEAN    (*Chec
k if current position is inside block *)  VARbPText  CouldBeBOOLEAN  BEGIN  setc
urpos(F)  IF (F.Labels10.BlockNIL) OR (F.Labels11.Blocile)CARDINAL  BEGIN  IF f.
f.f.fcbft'MOD' THEN RETURN 1  ELSIF f.f.f.fcbft'DEF' THEN RETURN 2  ELSE RETURN 
0  END  END FileType  PROCEDURE MoveToChar(VAR FileEditFilePosCARDINAL)  VARiCAR
DINALwPText  BEGIN  WorkingFile.Chain  wNIL  i0  LOOP  IF WorkingNIL THEN EXIT E
ND  ii+ORD(Working.BlockLen)  wWorking  IF iPos THEN WorkingWorking.Next ELSE EX
IT END  END  IF WorkingNIL THEN   Workingw  CharPosw.BlockLen  ELSE  CharPosPos-
(i-ORD(WorkNIL) THEN  RETURN FALSE  END  bF.Labels10.Block    WHILE (bNIL) AND (
bF.Labels11.Block) AND (bWorking) DO  bb.Next  END      (*if end precedes beginn
ing of block*)  CouldBebWorking  IF NOT CouldBe THEN RETURN FALSE END  IF bF.Lab
els10.Block THEN  (*in start block - check after label start*)  CouldBeCharPosOR
D(F.Labels10.Offset)  END  IF bF.Labels11.Block THEN  (*in start block - check a
fter label start*)  CouldBeCouldBe AND (CharPosORD(king.BlockLen))  END  savecur
pos(File)  END MoveToChar  PROCEDURE DefineErrors(VAR fEditFile)  VARiCARDINAL  
bBOOLEAN  BEGIN  IF ErrorCount0 THEN RETURN END  FOR i0 TO ErrorCount-1 DO  Move
ToChar(f,ErrorListi.CharP)  bLabelOp(f,TRUE,CHR(0b0h+i))  END  END DefineErrors 
   END MakeEdits.  nt-1 DO  MoveToChar(f,ErrorListi.CharP)  bLabelOirdCARDINAL  
BEGIN  ThirdTextLen DIV 3  IF NOT CheckBlock(FromFile) THEN RETURN FALSE END  WI
TH FromFile.Labels10 DO   RAFBGCHDIEF.Labels11.Offset))  END  IF CouldBe THEN  W
HILE (bNIL) AND (bF.Labels11.Block) DO bb.Next END  CouldBebNIL  END  RETURN Cou
ldBe  END InsideBlock    PROCEDURE CheckBlock(VAR FEditFile)BOOLEAN    (*Check i
f begin and end of block have been correctly set up*)    BEGIN  IF (F.Labels10.B
lockNIL) OR (F.Labels11.BlockNIL) THEN  RETURN FALSE  END  WorkingF.Labels10.Blo
ck  reply0    WHILE (WorkingNIL) AND (WorkingF.Labels11.Block) DO  replyreply+Ob
els25CurPos  CurPosLabels10          DelChars(FromFile,reply)  CurPosLabels25  L
abels25.BlockNIL  END  RETURN TRUE  END BlockDel  PROCEDURE RelocateLabels(VAR f
EditFilenumberINTEGER)  (*Relocate labels for the current block  number is numbe
r of characters being deleted   (-ve for insertions)  *)  BEGIN          FOR rep
ly0 TO HIGH(f.Labels) DO  WITH f.Labelsreply DO  IF (BlockWorking) AND (ORD(Offs
et)CharPos) THEN  IF (numberORD(Working.BlockLen)) RD(Working.BlockLen)  Working
Working.Next  END    IF WorkingNIL THEN RETURN FALSE END    (*if end precedes be
ginning of block*)    replyreply+ORD(F.Labels11.Offset)-ORD(F.Labels10.Offset)  
RETURN reply0  END CheckBlock  PROCEDURE BlockCopy(VAR FromFile,ToFileEditFile)B
OOLEAN    (*Careful - Easy - Ouch!    FromFile and ToFile may be the same  varia
ble*)    VARiINTEGER  cARRAY1..TextLen OF CHAR  p,q,rPosition    (*This code is 
a little odd for the following reasonTHEN  BlockWorking.Next  Offset0  ELSIF (nu
mber+CharPos)ORD(Offset) THEN  OffsetCharPos  ELSE  OffsetORD(Offset)-number  EN
D(*IF*)  END(*IF BlockWorking etc*)  END (*WITH*)  END(*FOR*)  END RelocateLabel
s      PROCEDURE DelChars(VAR fEditFilenumberINTEGER)    (*delete a number of ch
aracters*)    PROCEDURE DelInBlock(numberINTEGER)    (*Perform a delete which do
es not span a block*)  BEGIN  RelocateLabels(f,number)  WITH Working DO  I    1/
InsChars cannot insert more than half a block of characters  2/If you don't read
 at least a block at a time and the  to and from files are the same, you may hav
e to change the  position in the from file to reflect insertions, which is  awkw
ard (though you could always add a temporary label)    Therefore, text is read a
nd then inserted in up to three goes!*)    ThirdCARDINAL  BEGIN  ThirdTextLen DI
V 3  IF NOT CheckBlock(FromFile) THEN RETURN FALSE END  WITH FromFile.Labels10 D
O F (numberORD(BlockLen)) (*CharPos0*) THEN  (*Delete block*)    IF NextNIL THEN
 Next.PredPred END  IF PredNIL THEN   Pred.NextNext  DISPOSE(Working)  ELSIF Nex
tNIL THEN   f.ChainNext  DISPOSE(Working)  ELSE(*only block in file so keep*)  B
lockLen1  Working.Chars0EOF  END(*PredNIL*)  ELSE  IF ORD(BlockLen)(CharPos+numb
er) THEN      Movedown(ADR(CharsCharPos+number),  ADR(CharsCharPos),  ORD(BlockL
en)-ORD(CharP CharPosOffset  WorkingBlock  END  Charsread0  ireply  rFromFile.Cu
rPos  qToFile.CurPos  FromFile.CurPosFromFile.Labels10  LOOP  IF i0 THEN   EXIT 
  END  INC(Charsread)  cCharsreadWorking.CharsCharPos  IF (CharsreadHIGH(c)) OR 
(i1) THEN  savecurpos(FromFile)  pFromFile.CurPos  ToFile.CurPosq  WHILE Charsre
ad0 DO  IF CharsreadThird THEN  InsChars(ToFile,c,Third)  CharsreadCharsread-Thi
rd  Movedown(ADR(cos)-number)  END  BlockLenORD(BlockLen)-number  IF (NextNIL) A
ND (CharsBlockLen-1EOF) THEN  CharsBlockLenEOF  INC(BlockLen)   END  END(* Block
 not now empty*)  END(*WITH*)  END DelInBlock    VARNextBlockPText  BEGIN  setcu
rpos(f)  WHILE (number0) AND (WorkingNIL) DO  NextBlockWorking.Next  IF number(O
RD(Working.BlockLen)-CharPos) THEN  DelInBlock(number)  number0  ELSE  numbernum
ber-ORD(Working.BlockLen)+CharPos  DelInThird+1),  ADR(c),Charsread)  ELSE  InsC
hars(ToFile,c,Charsread)  Charsread0  END  END  qToFile.CurPos  FromFile.CurPosp
  setcurpos(FromFile)  END  IF NOT Advance() THEN EXIT (* never taken*) END  DEC
(i)  END(*LOOP*)  FromFile.CurPosr  ToFile.CurPosq  RETURN TRUE  END BlockCopy  
PROCEDURE BlockDel(VAR FromFileEditFile)BOOLEAN  VARpPosition  BEGIN  IF NOT Che
ckBlock(FromFile) THEN RETURN FALSE END  WITH FromFile DO  La  RAFBGCHDIEBlock(O
RD(Working.BlockLen)-CharPos)  END  IF (number0) OR (WorkingNIL) THEN   WorkingN
extBlock  CharPos0   END  END (*WHILE*)  IF WorkingNIL THEN   Workingf.Chain  WH
ILE Working.NextNIL DO WorkingWorking.Next END  CharPosWorking.BlockLen  END(*de
leted everything*)  savecurpos(f)  END DelChars    PROCEDURE InsChars(VAR fEditF
ileVAR SARRAY OF CHARlenINTEGER)  (*insert characters*)  VARleft,followsINTEGER 
 MainBlockPText  PROCEDURE InsInBloine()INTEGER    (*move  to start of next line
  returns characters advanced  positions to first character of next line*)  VARp
osINTEGER  bBOOLEAN  BEGIN  AdvanceOKTRUE  pos0  LOOP  chWorking.CharsCharPos  I
F chEOF THEN   AdvanceOKFALSE  EXIT   END  IF (chCR) OR (chLF) OR (chFF) THEN   
IF NOT Advance() THEN EXIT END  chWorking.CharsCharPos  IF chLF THEN bAdvance() 
END  EXIT  END  INC(pos)  IF NOT Advance() THEN   AdvanceOKFAck  VARstartINTEGER
  iINTEGER  BEGIN    (*adjust labels*)  RelocateLabels(f,-len)  start0  WITH Wor
king DO  IF ORD(BlockLen)CharPos THEN      Moveup(ADR(CharsCharPos),ADR(CharsCha
rPos+len),  ORD(BlockLen)-CharPos)      END  BlockLenORD(BlockLen)+len  WHILE le
n0 DO  CharsCharPosSstart  INC(start)  DEC(len)  INC(CharPos)  END  END  END Ins
InBlock    (*If text will fit in current block, enter in current block  else spl
it block and entLSE  EXIT   END  END (*LOOP*)  RETURN pos  END AdvanceLine      
PROCEDURE Retrline(VAR fEditFileVAR len,posINTEGERVAR pPosition  VAR linesmovedI
NTEGERlinestomoveINTEGER)  (*return the position in the current line*)  VARchCHA
R  iINTEGER  bBOOLEAN  BEGIN  setcurpos(f)  linesmoved0    IF CharPosINTEGER(Wor
king.BlockLen) THEN  CharPosWorking.BlockLen   END    IF linestomove-16736 THEN 
(*go to top of file      This is a recent mod to speed up      er in appropriate
 block*)    BEGIN  setcurpos(f)  leftTextLen-ORD(Working.BlockLen)    (*left is 
characters left in block*)    IF leftlen THEN InsInBlock  ELSE    (*split the bl
ock so that after insert the two blocks    will be approx equal in size*)  leftO
RD(Working.BlockLen) DIV 2  MainBlockWorking  NewBlock  Working.PredMainBlock  F
OR reply0 TO HIGH(f.Labels) DO  WITH f.Labelsreply DO  IF (BlockMainBlock) AND (
ORD(Offset)left) THEN  BlockWorking  QC and QR*)  Workingf.Chain  CharPos0  pos0
  ELSIF linestomove16736 THEN  WHILE Working.NextNIL DO  WorkingWorking.Next  EN
D  CharPosORD(Working.BlockLen)  IF Working.CharsCharPos-1EOF THEN  DEC(CharPos)
  END  savecurpos(f)  pf.CurPos  posBackupLine()  f.CurPosp  ELSE      (*chase b
ackwards until a CR, LF or FF is found and        calculate position in line*)  
    posBackupLine()      len0        (*now positioned to begi  OffsetORD(Offset)
-left  END  END  END    WITH MainBlock DO  Working.NextNext  IF NextNIL THEN Nex
t.PredWorking END  NextWorking  Working.BlockLenORD(BlockLen)-left  BlockLenleft
  Moveup(ADR(CharsBlockLen),      ADR(Working.Chars),      left+1)  IF CharPosOR
D(BlockLen) THEN WorkingMainBlock  ELSE CharPosCharPos-ORD(BlockLen) END  InsInB
lock  END(*WITH*)  END(*leftlen*)  savecurpos(f)  END InsChars  nning of current
 line  move required number of lines*)        IF linestomove0 THEN  WHILE (lines
tomove0)       AND ((CharPos0) OR (Working.PredNIL)) DO  INC(linestomove)    (*m
ove back over cr/lf*)    IF Backup() AND (Working.CharsCharPosLF) THEN  bBackup(
)  END  DEC(linesmoved)  lenBackupLine()  END      ELSE  WHILE (linestomove0)  A
ND (  (CharPosINTEGER(Working.BlockLen))      OR (Working.NextNIL)) DO     DEC(l
inestomove)  lenAd    VARbBOOLEAN    PROCEDURE BackupLine()INTEGER    (*Backup t
o beginning of current line  returns number of characters backed up    after the
 call, the position is the first character  after of the line*)  VARposINTEGER  
BEGIN  pos0  LOOP  IF NOT Backup() THEN EXIT END  chWorking.CharsCharPos  IF ((c
hCR) OR (chLF) OR (chFF))  THEN   bAdvance()  EXIT   END  pospos+1  END (*LOOP*)
  RETURN pos  END BackupLine  VARAdvanceOKBOOLEAN  PROCEDURE AdvanceL  RAFBGCHDI
EvanceLine()  IF AdvanceOK THEN INC(linesmoved) END  END  END      END  savecurp
os(f)pf.CurPos  IF Working.CharsCharPosEOF THEN    (*IF we are at end of file, r
eposition to start    of current line as Retrline always returns    position as 
at start of line*)    lenBackupLine()  savecurpos(f)  pf.CurPos  poslen  ELSE  l
enAdvanceLine()  END  f.CurPosp  END Retrline  PROCEDURE ReadNextChar(VAR pPosit
ionVAR chCHAR)  BEGIN  WITH p DO  IF Offsete())      AND  Matches() DO  INC(Matc
hCharNo)  END  IF MatchCharNoStringLen THEN  RETURN TRUE  END  setcurpos(f)  END
  END  END  savecurpos(f)  RETURN FALSE  END FindString  (*Actually find the nex
t occurrence of the string    Done returns true if one is found*)  PROCEDURE Cal
lWithFile(NameARRAY OF CHARVAR fEditFile)  BEGIN  MakeCall(Name,f.f.f)  END Call
WithFile  PROCEDURE FileType(VAR fEditFile)CARDINAL  BEGIN  IF f.f.f.fcbft'MOD' 
THBlock.BlockLen THEN  IF Block.NextNIL THEN  chEOF  RETURN  ELSE  BlockBlock.Ne
xt  Offset0  END  END  chBlock.CharsOffset  IF chEOF THEN OffsetOffset+1 END  EN
D  END ReadNextChar  PROCEDURE GetCurrentChar(VAR fEditFile)CHAR    BEGIN  posf.
CurPos  ReadNextChar(pos,ch)  RETURN ch  END GetCurrentChar  PROCEDURE  BackOneC
har(VAR fEditFile)BOOLEAN  BEGIN  setcurpos(f)  bBackup()  savecurpos(f)  RETURN
 b  END BackOneCharEN RETURN 1  ELSIF f.f.f.fcbft'DEF' THEN RETURN 2  ELSE RETUR
N 0  END  END FileType  PROCEDURE MoveToChar(VAR FileEditFilePosCARDINAL)  VARiC
ARDINALwPText  BEGIN  WorkingFile.Chain  wNIL  i0  LOOP  IF WorkingNIL THEN EXIT
 END  ii+ORD(Working.BlockLen)  wWorking  IF iPos THEN WorkingWorking.Next ELSE 
EXIT END  END  IF WorkingNIL THEN   Workingw  CharPosw.BlockLen  ELSE  CharPosPo
s-(i-ORD(Working.BlockLen))  END  savecurpos(File)      PROCEDURE  ForwardOneCha
r(VAR fEditFile)BOOLEAN  BEGIN  setcurpos(f)  bAdvance()  savecurpos(f)  RETURN 
b  END ForwardOneChar  VARStringARRAY0..59 OF CHAR  StringLenCARDINAL0  MatchCha
rNoCARDINAL  MatchCharCHAR    PROCEDURE Matches()BOOLEAN  BEGIN  RETURN (Working
.CharsCharPosStringMatchCharNo)      OR (Working.CharsCharPosCAP(StringMatchChar
No))  END Matches  PROCEDURE PrepareString(sARRAY OF CHARlenINTEGER)    BEGIN  S
tringLenlen  Moveup(ADEND MoveToChar  PROCEDURE DefineErrors(VAR fEditFile)  VAR
iCARDINAL  bBOOLEAN  BEGIN  IF ErrorCount0 THEN RETURN END  FOR i0 TO ErrorCount
-1 DO  MoveToChar(f,ErrorListi.CharP)  bLabelOp(f,TRUE,CHR(0b0h+i))  END  END De
fineErrors    END MakeEdits.  0EDITSTATDEF 2EDITSTATMOD 3FILEOPS DEF 5R(s),ADR(S
tring),len) END PrepareString  (*prepare a string for use in a find command*)   
 PROCEDURE FindString(VAR fEditFileBackwardsBOOLEAN)BOOLEAN      (*backwards not
 yet implemented*)  BEGIN  IF StringLen0 THEN RETURN TRUE END  setcurpos(f)  IF 
Backwards THEN  MatchCharStringStringLen-1  LOOP  IF NOT Backup() THEN EXIT END 
 IF (Working.CharsCharPosMatchChar)     OR (Working.CharsCharPosCAP(MatchChar)) 
THEN  MatchCharNoStringLen-2  savecurpos(f)  MODULE me    (*Modula  editor    Da
ve Moore 1 Feb 85    This is the main module for the editor    I have added some
 comments at version 1.2 which should be   worth reading if you are trying to le
arn to write in Modula-2  *)    FROM EditControl IMPORT Files,FilesOpened,curx,c
ury,CurrentWindow,ChangeWindow,  ResetScreenPos,CurrentFile  FROM EditDisplay IM
PORT ErrorMessage,SetWindows,DisplayFile,Windows,  DisplayError,ErrorOrdinal    
FROM DoMenu IMPORT DoMenuOp,Open    FROM KeyBoard IMPORT InterpWHILE (MatchCharN
o0)      AND (Backup())      AND Matches() DO  DEC(MatchCharNo)  END  IF Backup(
) AND Matches()      AND (MatchCharNo0) THEN  RETURN TRUE  END  setcurpos(f)  EN
D  END  ELSE  MatchCharString0  LOOP  IF NOT Advance() THEN EXIT END  IF (Workin
g.CharsCharPosMatchChar)    OR (Working.CharsCharPosCAP(MatchChar)) THEN  MatchC
harNo1  savecurpos(f)  WHILE (MatchCharNoStringLen)      AND (Advanc  RAFBGCHDIE
ret  FROMMakeEdit IMPORT DefineErrors,ErrorList,ErrorCount  FROMFastMove IMPORT 
Moveup  (*  The modules above are part of the editor  The following modules are 
all general purpose modules  *)    FROM Command IMPORT Parclass,name,string,opti
on,     Text,Parameter,GetParams    (*Command cracks the command line parameters
 which are set up  by CP/M at address 80  *)    FROM Files IMPORT FileName,FILE,
Lookup,ReadBlock,SetBlock    (*Files is the file oriented block level IO system*
)    FROM SYSTEM Iiler allows you to type break with types    and variables more
 than two bytes in length, which simplifys    this code greately. What is happen
ing is that Chars is really    of type ARRAYsomething OF CHAR, and is not the sa
me as FileName      By putting the variable in FileName(), its type is changed t
o    be FileName. This isn't really a coercion since the data is not    altered 
in any way. It simply defeats the compiler's type    checking.  *)     Open(File
Name(Chars),FilePosition)  MPORT ADR    FROM Storage IMPORT FullUp    (*Terminal
 is the standard terminal input-output module    It is also possible to do Input
-Output to the terminal  through the modules Streams and InOut, but these  incre
ase the size of the program and are only required if   you want to do more power
ful things, such as file  redirection and number conversion. If all you want is 
number   conversion, SmallIO can be used *)     VARParsARRAY0..3 OF Parameter  P
arCountINTEGER    (*Pars is an array intEND  END  IF ErrorCount0 THEN DefineErro
rs(FilesCurrentFile) END  END OpenFiles  PROCEDURE MemFull  BEGIN  ErrorMessage(
' Memory is full - please save files now',' ')  DoMenuOp  END MemFull  VARcccCHA
R  BEGIN    (*GetParams reads the parameters from the command line*)    FullUpMe
mFull  GetParams(Pars,ParCount)  FilesOpened0  IF ParCount0 THEN OpenFiles END  
IF ErrorCount0 THEN DisplayError END  IF FilesOpened0 THEN ChangeWindow(1) END  
LOOP    (*this loop go which Command will place  the parameters entered on the c
ommand line    It need only be as large as the number of parameters  you expect 
to be entered on the command line    The editor expects up to four parameters th
ree  file names and some options, although the options  are currently only used 
by the compiler when it   links to the editor after an error and in that  case, 
there is only one other parameter  *)    kINTEGER  i,jCARDINAL  replyINTEGER  fn
FileName  chCHAR  oes round for ever since there is an    explicit HALT in domen
u to stop the program*)    IF FilesOpened0 THEN   Interpret  END  iCurrentWindow
  kCurrentFile    (*remember current window since DomenuOp may change it*)    jF
ilesOpened  DoMenuOp(*explicit exit in this module*)  IF (iCurrentWindow) AND (W
indows0) THEN    (*after menu, redisplay window in which the    window popped up
*)    DisplayFile(Filesk,i,curxi,curyi)  END  END (*LOOP*)    END m  (*Error dis
play routine    If the editor is entered as the result of a compilation error,  
the command line consists of the name of the file which was  being compiled foll
owed by an option. The option contains  two integer values in binary (so you can
not enter same from  the CP/M prompt - or at least not easily). Giving the posit
ion  of the error in the file and the error number*)      (*Work through the par
ameters opening the files to be edited  Pars and ParCount have already been set 
up by a cae.  END (*CharPosBlockLen*)  RETURN Working.CharsCharPosEOF  END Advan
ce    PROCEDURE CheckBlock(e15FEB87 DOC PQ eFIXES   DOC sPG%tFIXES   BAK pP!p(AD
R(CharsBlockLen),      ADR(Working.Chars),      left+1)  IF CharPosORD(BlockLen)
 THEN WorkingMainBlock  ELSE CharPosCharPos-ORD(BlockLen) END  InsInBlock  END(*
WITH*)  END(*leftlen*)  savecurpos(f)  END InsChars  ll to  the Command module*)
    PROCEDURE OpenFiles  VARkINTEGER  FilePositionCARDINAL  BEGIN    (*check for
 option giving error number and position*)  ErrorCount0  ErrorOrdinal0  WITH Par
sParCount-1 DO  IF Classoption THEN  ErrorCountFilePos  Moveup(ADR(Chars2),ADR(E
rrorList),4*ErrorCount)  DEC(ParCount)  ELSE  FilePosition65535  END(*IF*)  END 
 FOR k0 TO ParCount-1 DO  WITH Parsk DO    (* Note the extension below      As o
f V1.2, The comp  RAFBGCHDIEDEFINITION MODULE Menu    (*Menu driver    Bring up 
a menu at selected point on screen and accept an option    options can be select
ed either by striking first character of    option or by entering option no (lim
ited to 0-9)    option 0 is always exit without selection as is escape*)    TYPE
MenuTextARRAY1..11 OF CHAR    PROCEDURE GetFromMenu(VAR TextARRAY OF MenuTextx,y
CARDINAL  depth,columnsCARDINAL)CARDINAL    (* Text is the text to display    x 
and y are the position for the top lefirst character of menu as option  Always m
ove - so that if more than one command starts with  the same character you can g
et to other than the first *)  VARiINTEGER  BEGIN  iHIGH(Text)  REPEAT  ChangeOp
tion(1)  DEC(i)  UNTIL (i0) OR (CAP(TextOptionNo1)CAP(ch))  END ChangePos  BEGIN
  (*draw the box*)    x1x+(width+1)*columns  y1y+depth+1  DrawBox(x,y1,x1,y)  Sc
reenControl(Dim)  ScreenControl(StartGraph)  FOR i1 TO columns-1 DO  x1x+i*(widt
h+1)  FOR jy+1 t corner of the box  depth is the number of options in a column  
columns is the number of columns that will be required*)    END Menu.  vanceOKFA
LSE  EXIT   END  IF (chCR) OR (chLF) OR (chFF) THEN   IF NOT Advance() THEN EXIT
 END  chWorking.CharsCharPos  IF chLF THEN bAdvance() END  EXIT  END  INC(pos)  
IF NOT Advance() THEN   AdvanceOKFATO y1-1 DO  Gotoxy(x1,j)  ScreenControl(Verti
cal)  END  END  ScreenControl(EndGraph)  ScreenControl(Normal)    (*we now have 
a box around the menu with dim bars between columns*)    OptionNo0(*actually one
 less than value returned*)  j0(*row number*)  x1x+1(*position for text*)  y1y+1
  FOR i0 TO HIGH(Text) DO  Gotoxy(x1,y1)  WriteString(Texti)  INC(j)  IF jdepth 
THEN (*next column*)  x1x1+width+1  y1y+1  j0  ELSE  INC(y1)  (*menu handler    
Copyright Dave Moore FTL Modula-2 1986    ModificationsChanged to allow position
 to option using first  letter of option. If more than one option starts  with a
 given letter, always moves to next *)      IMPLEMENTATION MODULE Menu    (*Menu
 driver    Bring up a menu at selected point on screen and accept an option    o
ptions can be selected either by striking first character of    option or by ent
ering option no (limited to 0-9)    option 0 is always exit without selectionEND
  END (*FOR*)    (*finish off current column*)    IF y1(y+1) THEN  WHILE jdepth 
DO  Gotoxy(x1,y1)  WriteString('           ')  INC(j)  INC(y1)  END  END    (*ac
cept an option*)    LOOP    (*inverse currently selected option*)    x1x+1  y1y+
1+OptionNo  WHILE y1(y+depth+1) DO  y1y1-depth  x1x1+width+1  END  Gotoxy(x1,y1)
  ScreenControl(Inverse)  WriteString(TextOptionNo)  ScreenControl(Normal)  Goto
xy(x1,y1)  REPEAT   as is escape*)    FROMScreenIOIMPORTGotoxy,DrawBox,Dim,Start
Graph,  EndGraph,Vertical,Inverse,Normal,  ScreenControl,RingBell  FROMTerminalI
MPORT WriteString,Read,Write,BusyRead  CONSTwidth11(*width of one option*)  ESC1
bx  CR0dx  CtrlX18x  CtrlE05x  CtrlD04x  CtrlS13x  LF0ax  BS08x  PROCEDURE GetFr
omMenu(VAR TextARRAY OF MenuTextx,yCARDINAL  depth,columnsCARDINAL)CARDINAL    (
* Text is the text to display      x and y are the position for the top leftBusy
Read(ch)  UNTIL ch0x  Gotoxy(x1,y1)  ScreenControl(Normal)  WriteString(TextOpti
onNo)  CASE CAP(ch) OF  ESC,' ' RETURN 0  CR  RETURN OptionNo+1  CtrlS,BSChangeO
ption(-depth)  CtrlEChangeOption(-1)  CtrlDChangeOption(depth)  CtrlX,LFChangeOp
tion(1)  'A'..'Z'ChangePos  ELSE ScreenControl(RingBell)  END(*case*)  END(*LOOP
*)  END GetFromMenu  END Menu.   corner of the box  depth is the number of optio
ns in a column  columns is the number of columns that will be required*)    VARx
1,y1CARDINAL  i,jCARDINAL  OptionNoCARDINAL  chCHAR  PROCEDURE ChangeOption(byIN
TEGER)    (*change the current option number y given increment    ensure it rema
ins in range*)  BEGIN  byby+INTEGER(OptionNo)  IF by0 THEN byHIGH(Text)   ELSIF 
byHIGH(Text) THEN by0 END  OptionNoby  END ChangeOption  PROCEDURE ChangePos    
(*Change position using f  RAFBGCHDIE END  LocLoc+128  END  END CompBin.  D Matc
hes()      AND (MatchCharNo0) THEN  RETURN TRUE  END  setcurpos(f)  END  END  EL
SE  MatchCharString0  LOOP  IF NOT Advance() THEN EXIT END  IF (Working.CharsCha
rPosMatchChar)    OR (Working.CharsCharPosCAP(MatchChar)) THEN  MatchCharNo1  sa
vecurpos(f)  WHILE (MatchCharNoStringLen)      AND (AdvancDEFINITION MODULE Scre
enDummy    (*this module was written to enable  several modules to be compiled  
on machines with tight TPA's. The same  thing can be done with other modules if 
 your TPA is tighter than that of my test  machine.    What has been done is to 
replace a large  symbol table (that of ScreenIO) with a   small symbol table (th
is module). This  reduces the symbol table space used by the  calling modules. T
his is further discussed  in the manual.  *)  PROCEDURE ClearScreen  PROCEDUDEFI
NITION MODULE ResetDisc  PROCEDURE ResetAllDiscs  END ResetDisc.  END  setcurpos
(f)  END  END  END  savecurpos(f)  RETURN FALSE  END FindString  (*Actually find
 the next occurrence of the string    Done returns true if one is found*)  PROCE
DURE CallWithFile(NameARRAY OF CHARVAR fEditFile)  BEGIN  MakeCall(Name,f.f.f)  
END CallWithFile  PROCEDURE FileType(VAR fEditFile)CARDINAL  BEGIN  IF f.f.f.fcb
ft'MOD' THRE Gotoxy(x,yCARDINAL)  PROCEDURE RingBell  PROCEDURE OutputToScreen(b
BOOLEAN)  PROCEDURE  DrawBox(x1,y1,x2,y2CARDINAL)  END ScreenDummy.   Files,File
sOpened,curx,cury,CurrentWindow,ChangeWindow,  ResetScreenPos,CurrentFile  FROM 
EditDisplay IMPORT ErrorMessage,SetWindows,DisplayFile,Windows,  DisplayError,Er
rorOrdinal    FROM DoMenu IMPORT DoMenuOp,Open    FROM KeyBoard IMPORT InterpIMP
LEMENTATION MODULE ScreenDummy  IMPORTScreenIO    PROCEDURE ClearScreen  BEGIN  
ScreenIO.ScreenControl(ScreenIO.ClearScreen)  END ClearScreen  PROCEDURE Gotoxy(
x,yCARDINAL)  BEGIN  ScreenIO.Gotoxy(x,y)  END Gotoxy  PROCEDURE RingBell  BEGIN
  ScreenIO.ScreenControl(ScreenIO.RingBell)  END RingBell  PROCEDURE OutputToScr
een(bBOOLEAN)  BEGIN  ScreenIO.OutputToScreen(b)  END OutputToScreen  PROCEDURE 
 DrawBox(x1,y1,x2,y2CARDINAL)  BEGIN  ScreenIO.DrawBox(x1,y1,x2,y2)  END DrawBoI
MPLEMENTATION MODULE ResetDisc  FROMCPM IMPORT BDOS,rsdfc  PROCEDURE ResetAllDis
cs  VARcCARDINAL  BEGIN  cBDOS(rsdfc,03fh)  END ResetAllDiscs  END ResetDisc.  D
  ii+ORD(Working.BlockLen)  wWorking  IF iPos THEN WorkingWorking.Next ELSE EXIT
 END  END  IF WorkingNIL THEN   Workingw  CharPosw.BlockLen  ELSE  CharPosPos-(i
-ORD(Working.BlockLen))  END  savecurpos(File)  x  END ScreenDummy.     do Input
-Output to the terminal  through the modules Streams and InOut, but these  incre
ase the size of the program and are only required if   you want to do more power
ful things, such as file  redirection and number conversion. If all you want is 
number   conversion, SmallIO can be used *)     VARParsARRAY0..3 OF Parameter  P
arCountINTEGER    (*Pars is an array int   R A F B G C H D I EDEFINITION MODULE 
ScreenIO    (*Screen handling routines for cursor position, attribute etc    Spe
cific to this compiler*)    FROMSYSTEM IMPORT BYTE  FROMFiles IMPORT FileName  T
YPEEdits(Dim,Bright,Normal,Inverse,Blink,StartGraph,EndGraph,  DelChar,DelLine,I
nsChar,InsLine,DelEol,DelEos,ClearScreen,  Horizontal,Vertical,CornerLL,CornerUL
,CornerUR,CornerLR,  Startxy,MiddleXY,EndXY,RingBell,MoveLeft,MoveRight,  MoveDo
wn,MoveUp)    (*The editting mnemonics have the following meaning     Di    (*dr
aw a box for a window on the screen    x1,y1  is the lower left corner  x2,y2  i
s upper right corner*)  PROCEDURE Clip(x1,y1,x2,y2CARDINAL)  (*Set clip boundari
es  used by Windows when drawing boxes so that only the  parts of the boxes mask
ed are re-drawn  has no effect except in DrawBox*)  VARScreenDepth,ScreenWidthCA
RDINAL  MadeChangeBOOLEAN    (*Control is the current control code set for the t
erminal    MadeChange is TRUE on return from ScreenControl if the   requirem,Bri
ght,Normal,Inverse,Blink    Enter the given mode. Modes should not be combined  
as too much variation exists between terminals in  this area    StartGraph,EndGr
aph    Enter and exit graphic character set mode  Used for drawing bars around w
indows  If your terminal can do this with ordinary characters,  set these sequen
ces empty and put the required   characters in the sequences below    DelChar,De
lLine,InsChar,InsLine,DelEol,DelEos,ClearScreen    Perform the various edittd co
de is implemented, else false    EditDisp contains code to simulate some codes w
hen they  are not implemented*)    (*New routines added at version 1.02    These
 routines move the resposibilty for scrolling within a window from  EditStat to 
ScreenIO    This is done so that, when working with the memory mapped version of
 ScreenIO,  The Bars need not jump up and down when a window is scrolled*)  PROC
EDURE ScrollWindowUp(StartLine,EndLineCARDINAL)  PROCEDURE ScrollWindowDown(Star
tLine,EndLineCARing sequences  DelEol deletes from under cursor to end of line  
DelEos deletes from under cursor to end of screen  Clearscreen homes the cursor 
as well (to top left)    Horizontal,Vertical,CornerLL,CornerUL,CornerUR,CornerLR
    Character sequences to draw horizontal and vertical  bars around windows and
 to do the corners (lower left,  upper left, upper right,lower right)    Startxy
,MiddleXY,EndXY    The character sequences to start a cursor address  command, f
or between the co-orDINAL)  PROCEDURE OutputToScreen(TurnOnBOOLEAN)    (*Call th
is routine with FALSE to prevent output going to the  screen. This allows you to
 suppress output while large amounts  of screen alterations are being made to sp
eed up a program. Of  course, you must re-enable screen output and then re-draw 
the  screen later. This is used by the editor to suppress screen  alterations du
ring execution of repeats *)  END ScreenIO.  dinates and after the  cursor addre
ss command.    MoveLeft,MoveRight,MoveDown,MoveUp    Cursor move commands  *)  (
*You should not need to use the next few type declarations  They are included he
re for use by the configuration program*)      PROCEDURE Gotoxy(x,yCARDINAL)    
(*Position to given coordinates  top left is always 0,0, which means that  the b
igger y is, the further down the screen    x is column, y is row    A 'Standard'
 Screen is 80 by 24. The limit is set by  the tIMPLEMENTATION MODULE ScreenIO  F
ROM Terminal IMPORT CharRoutine,CharEnabled  FROM Files IMPORT Lookup,FILE,ReadB
lock  FROM FastMove IMPORT Moveup  FROM SYSTEM IMPORT ADR,SIZE,WORD  FROMCPM IMP
ORT wccfc,BDOS  (*Screen handling routines for cursor position, attribute etc   
 This module is specific to this compiler*)  TYPE  ControlSequenceRECORD  CharsA
RRAY1..7 OF CHAR  SeqLenBYTE  END      ControlCodesRECORD  EditSequencesARRAY Ed
its OF ControlSequence  AsciiBOOLEAN (*true ierminal definition file*)    PROCED
URE LoadTermCode(filenameFileName)    (*Load the terminal definition for the cur
rent terminal    filename is the name of the file to read    Normally, when the 
program is loaded, the file  'TERMINAL.COD' is loaded from the logged in disc  T
his routine only needs to be used if that  file is not the one to use (eg, to sw
ap screens*)         PROCEDURE ScreenControl(sEdits)    (*Perform a screen contr
ol operation*)    PROCEDURE  DrawBox(x1,y1,x2,y2CARDINAL)  !R!A!F!B!G!C!H!D!I!Ef
 co-ordinates out output as    ascii numbers rather than binary*)  ColumnFirstBO
OLEAN  AddressInGraphBOOLEAN (*true if can change coordinates    in graph mode*)
  CarriageReturnBOOLEAN (*true if carriage return returns     to start of curren
t row*)  ScreenDepthCARDINAL  ScreenWidthCARDINAL  XYOffsetCARDINAL  END       V
ARControlControlCodes  ActiveBOOLEAN  InGraphBOOLEAN  Lowx,Highx,Lowy,HighyCARDI
NAL  OutputEnabledBOOLEAN  (*PROCEDURE Write(iCHAR)k(fn,ADR(block),0,SIZE(block)
,reply)  ActivereplySIZE(Control)  Moveup(ADR(block),ADR(Control),SIZE(Control))
  END  ScreenWidthControl.ScreenWidth  ScreenDepthControl.ScreenDepth  END LoadT
ermCode    PROCEDURE ScreenControl(sEdits)    (*Perform a screen control operati
on*)  VARiCARDINAL  BEGIN  IF Active AND OutputEnabled THEN  WITH Control.EditSe
quencess DO  MadeChangeSeqLen0  FOR i1 TO ORD(SeqLen) DO Write(Charsi) END  END 
 IF NOT Control.AddressInG  BEGIN  IF (i' ') AND (i'z') THEN Terminal.Write(i)  
ELSE   Terminal.Write('')  WriteHex(ORD(i),3)  Terminal.Write('')  END  END Writ
e*)  PROCEDURE Write(bCHAR)  VARiINTEGER(*needed to avoid conflict with global*)
  BEGIN  IF OutputEnabled THEN  iBDOS(wccfc,WORD(b))  END  END Write  PROCEDURE 
WriteAscii(iINTEGER)  VARTextARRAY1..3 OF CHAR  j,kINTEGER  BEGIN  j3  WHILE (j0
) AND (i0) DO  ki DIV 10  TextjCHR(i-10*k+ORD('0'))  ik  jj-1raph THEN  IF sStar
tGraph THEN InGraphTRUE  ELSIF sEndGraph THEN InGraphFALSE END  END  ELSE  MadeC
hangeFALSE  END  END ScreenControl  PROCEDURE InBound(x,yCARDINALchEdits)  BEGIN
  IF (xLowx) AND (xHighx)    AND(yLowy) AND (yHighy) THEN   ScreenControl(ch)  E
ND  END InBound  PROCEDURE  DrawBox(x1,y1,x2,y2CARDINAL)    (*draw a box for a w
indow on the screen    x1,y1  is the lower left corner  x2,y2  is upper right co
rner*)  VARiCARDINAL  BEGIN        END  FOR kj+1 TO 3 DO Write(Textk) END  END W
riteAscii   PROCEDURE Gotoxy(x,yCARDINAL)    (*Position to given coordinates  to
p left is always 0,0     x is column, y is row    A 'Standard' Screen is 80 by 2
4. The limit is set by  the terminal definition file*)  VARi,jINTEGER  ingBOOLEA
N  BEGIN      IF Active AND OutputEnabled THEN  WITH Control DO  ingInGraph  IF 
InGraph THEN ScreenControl(EndGraph) END  ScreenControl(Startxy)  IF ColumnFirst
 THEN  ix+XYOIF Active AND OutputEnabled THEN  WITH Control DO  Gotoxy(x1,y1)  S
creenControl(StartGraph)  InBound(x1,y1,CornerLL)  FOR ix1+1 TO x2-1 DO InBound(
i,y1,Horizontal) END  InBound(x2,y1,CornerLR)  Gotoxy(x1,y2)  InBound(x1,y2,Corn
erUL)  FOR ix1+1 TO x2-1 DO InBound(i,y2,Horizontal) END  InBound(x2,y2,CornerUR
)  FOR iy2+1 TO y1-1  DO  Gotoxy(x2,i)  InBound(x2,i,Vertical)  END  FOR iy2+1 T
O y1-1 DO  Gotoxy(x1,i)  InBound(x1,i,Vertical)  END  END(ffset  jy+XYOffset  EL
SE  iy+XYOffset  jx+XYOffset  END  IF Ascii THEN WriteAscii(i)  ELSE Write(CHR(i
)) END  ScreenControl(MiddleXY)  IF Ascii THEN WriteAscii(j)  ELSE Write(CHR(j))
 END  ScreenControl(EndXY)  END (*WITH*)  IF ing THEN ScreenControl(StartGraph) 
END  END(*IF*)      END Gotoxy    PROCEDURE LoadTermCode(filenameFileName)  VARf
nFILE  replyINTEGER    (*define a temporary area for reading of file  it must be
 equal in size to the size of *WITH Control*)  ScreenControl(EndGraph)  END (*IF
 Active*)      END DrawBox  PROCEDURE Clip(x1,y1,x2,y2CARDINAL)  BEGIN  Lowxx1  
Highxx2  Lowyy2  Highyy1  END Clip  PROCEDURE ScrollWindowUp(StartofWindow,Endof
WindowCARDINAL)  BEGIN  Gotoxy(0,EndofWindow)  ScreenControl(DelLine)  Gotoxy(0,
StartofWindow)  ScreenControl(InsLine)  END ScrollWindowUp  PROCEDURE ScrollWind
owDown(StartofWindow,EndofWindowCARDINAL)  BEGIN  Gotoxy(0,StartofWindow)  Scree
nControl(DelLine) control, padded  out to a multiple of 128 bytes*)    blockARRA
Y0..128*(SIZE(Control) DIV 128)+127 OF CHAR    (*Load the terminal definition fo
r the current terminal    filename is the name of the file to read    Normally, 
when the program is loaded, the file  'TERMINAL.COD' is loaded from the logged i
n disc  This routine only needs to be used if that  file is not the one to use (
eg, to swap screens*)     BEGIN  Lookup(fn,filename,reply)  IF reply0 THEN Activ
eFALSE  ELSE  ReadBloc  "R"A"F"B"G"C"H"D"I"E Gotoxy(0,EndofWindow)     ScreenCon
trol(InsLine)  ScreenControl(DelEol)     END ScrollWindowDown    (*Cursor blink 
routine - only supported in memory mapped  version of screenio*)  PROCEDURE Outp
utToScreen(OnBOOLEAN)  BEGIN  OutputEnabledOn  END OutputToScreen    BEGIN(*Init
ialisation part*)  CharRoutineWrite  CharEnabledTRUE    InGraphFALSE  OutputEnab
ledTRUE  LoadTermCode('CONTROL.DAT')  Lowx0Lowy0  Highx999Highy999  ScreenWidthC
ontrol.ScreenWidth  ORD('A')-1)  INC(i)  commandi''  INC(i)  END  WHILE (j8) AND
 (fcb1.fcbfnj' ') DO  commandifcb1.fcbfnj  INC(i)  INC(j)  END  j1  commandi'.' 
 INC(i)  WHILE (j3) AND (f.fcbftj' ') DO  commandifcb1.fcbftj  INC(i)  INC(j)  E
ND  j0  WHILE (jHIGH(progname)) AND (prognamej'') DO INC(j) END  IF (jHIGH(progn
ame)) THEN   commandi''  INC(i)  commandiprognamej+1  INC(i)  END  commandleni  
f.fcbfScreenDepthControl.ScreenDepth  ScreenControl(ClearScreen)  END ScreenIO. 
  TPA's. The same  thing can be done with other modules if  your TPA is tighter 
than that of my test  machine.    What has been done is to replace a large  symb
ol table (that of ScreenIO) with a   small symbol table (this module). This  red
uces the symbol table space used by the  calling modules. This is further discus
sed  in the manual.  *)  PROCEDURE ClearScreen  PROCEDUn'        '  FOR i0 TO j-
1 DO  f.fcbfni+1prognamei  END  f.fcbft'COM'  f.fcbdn0  f.fcbex0  f.fcbcr0  Load
AndExecute(f)  END MakeCall  END SetUpCall.    ound windows  If your terminal ca
n do this with ordinary characters,  set these sequences empty and put the requi
red   characters in the sequences below    DelChar,DelLine,InsChar,InsLine,DelEo
l,DelEos,ClearScreen    Perform the various edittDEFINITION MODULE SetUpCall    
(*SET Up call parameters for a program and chain to it    This module is used by
 the editor for calling the  compilers.    The second parameter is the fcb for t
he file which is to be compiled    It will be set up on the command line as a pa
rameter. It will be followed  by /E as an option.    If this is too clever for y
our requirements, you could use the module  'Chain' directly.  *)    FROM CPM IM
PORT fcb,alfa  PROCEDURE MakeCall(prognameARRAY OF CHARVAR ffcb)  END SetUpCall.
    een)  END ClearScreen  PROCEDURE Gotoxy(x,yCARDINAL)  BEGIN  ScreenIO.Gotoxy
(x,y)  END Gotoxy  PROCEDURE RingBell  BEGIN  ScreenIO.ScreenControl(ScreenIO.Ri
ngBell)  END RingBell  PROCEDURE OutputToScreen(bBOOLEAN)  BEGIN  ScreenIO.Outpu
tToScreen(b)  END OutputToScreen  PROCEDURE  DrawBox(x1,y1,x2,y2CARDINAL)  BEGIN
  ScreenIO.DrawBox(x1,y1,x2,y2)  END DrawBomd screenio.def  md screendu.def  md 
resetdis.def  m2 screenio.mod  md makeedit.def  md editstat.def  m2 makeedit.mod
  md editcont.def  md macros.def  md menu.def  md domenu.def  md editdisp.def  m
d setupcal.def  md editcont.def  md keyboard.def  m2 menu.mod  m2 editstat.mod  
m2 macros.mod  m2 domenu.mod  m2 editdisp.mod  m2 editcont.mod  m2 me.mod  m2 sc
reendu.mod  m2 resetdis.mod  m2 keyboard.mod  m2 setupcal.mod  m2 macros.mod  m2
 makeedit.mod  m2 me.mod  ml me/d  e.mod  m2 screendu.mod  m2 resetdis.modIMPLEM
ENTATION MODULE SetUpCall    (*SET Up call parameters for a program and chain to
 it  *)  FROMChain IMPORT LoadAndExecute  FROMSYSTEM IMPORT BYTE  (*Low core var
iables*)  VARfcb15chfcb  fcb26chfcb  commandlen80hBYTE  command81hARRAY0..80 OF 
CHAR  i,jINTEGER  PROCEDURE MakeCall(prognameARRAY OF CHARVAR ffcb)  BEGIN   fcb
1f  fcb2.fcbdn0  fcb2.fcbfn1' '  (*set up command line*)    i0  j1  IF fcb1.fcbd
n0 THEN  commandiCHR(ORD(fcb1.fcbdn)+  #R#A#F#B#G#C#H#D#I#E%5&3 #5$35/3 23 05251
3 4 33553 633 5563 83 #3 ,3 3 "5#335"5!5 33 % 35%5$,5.$5/3(3 33  5857354533 /505
#333  5 . $5/ 3 5 . $5/6MOD3 "  33  3 !5"6DEF3 #33 5.$5/33333 5.$ 5 / 33333 5.$1
5/3   33  3 !5#33  5!5 . $ 5 / 3&335"3 %3 #5%5$333 '*33  5 . $5/ 33 5 . $5/3 "33
  5"5!33 $35%3 (3 &5(5'3 * 3 &5'3 #5&3 "5#3 )333 (5)3*5(35!.!$5/3 #(3 !5#5"+$33(
3 335+3 ,33 +5,3 .33  5.5-35*5)3   $R$A$F$B$G$C$H$D$I$E3+$5%5!.!$5! 5 / 3&333 # 
33 !5#5"3 %       3 '3 !5'57!ScreenIOe!Terminal5/33 33 53 35535.$5/35333  !MakeE
dit#!Terminal4R*&uC!R&!RC*R*ZunfC" 3 "5#3 $A5%3 &33 %5&33 ( 35.$5/3Pf3 3P 33+33f
3P+3 !FilesL4R*&uC!R&!RC*R*ZunfC"leBackwardsBOOLEAN)BOOLEAN      (*backwards not
 yet implemented*)  BEGIN  IF StringLen0 THEN RETURN TRUE END  setcurpos(f)  IF 
Backwards THEN  MatchCharStringStringLen-1  LOOP  IF NOT Backup() THEN EXIT END 
 IF (Working.CharsCharPosMatchChar)     OR (Working.CharsCharPosCAP(MatchChar)) 
THEN  MatchCharNoStringLen-2  savecurpos(f)  1K4R*&uC!R&!RC*R*ZunfC" 333(3 3 354
3533(5.$ 5 / ,33 !  %R%A%F%B%G%C%H%D%I%E.4R*&uC!R&!RC*R*ZunfC"  FOR i0 TO ErrorC
ount-1 DO  MoveToChar(f,ErrorListi.CharP)  bLabelOp(f,TRUE,CHR(0b0h+i))  END  EN
D DefineErrors    END MakeEdits.  0EDITSTATDEF 2EDITSTATMOD 3FILEOPS DEF 5!Scree
nIOe!MakeEdit#4R*&uC!R&!RC*R*ZunfC"D Matches()      AND (MatchCharNo0) THEN  RET
URN TRUE  END  setcurpos(f)  END  END  ELSE  MatchCharString0  LOOP  IF NOT Adva
nce() THEN EXIT END  IF (Working.CharsCharPosMatchChar)    OR (Working.CharsChar
PosCAP(MatchChar)) THEN  MatchCharNo1  savecurpos(f)  WHILE (MatchCharNoStringLe
n)      AND (Advanc333+5+533333P3 +3333 3!CPMz4R*&uC!R&!RC*R*ZunfC"33  5 . $5/ 3
 5 . $5/6MOD3 " t 33  3 !5"6DEF3 #3 33 33 535+5 3  53 36           3  3  &R&A&F&
B&G&C&H&D&I&E33 555 53P3 53  333 53333*3 3*3(33 5353 (3&&553 5 5.$5/*3&3 33**( 3
  33533  333 *3- 33 3 5- 33 53*3 55.$5/,3&3 33*( *3555.$"36EDITSTAT.DAT 3   3 6 
EDITSTAT.DAT3 3 3 5-33 5-33 5-33 5- 33 5-AZ33 5353 55.$5sCharPosCAP(MatchChar)) 
THEN  MatchCharNo1  savecurpos(f)  WHILE (MatchCharNoStringLen)      AND (Advanc
3 36 Could not open status file3 355 553&#53&&553 5 5.$5/*3&3 t)   ELSIF byHIGH(
Text) THEN by0 END  OptionNoby  END ChangeOption  PROCEDURE ChangePos    (*Chang
e position using fmd ascreendu.def  md aresetdis.def  md amakeedit.def  md aedit
stat.def  m2 amakeedit.mod  md aeditcont.def  md amacros.def  md amenu.def  md a
domenu.def  md aeditdisp.def  md asetupcal.def  md aeditcont.def  md akeyboard.d
ef  m2 amenu.mod  m2 aeditstat.mod  m2 amacros.mod  m2 adomenu.mod  m2 aeditdisp
.mod  m2 aeditcont.mod  m2 ame.mod  m2 ascreendu.mod  m2 aresetdis.mod  m2 akeyb
oard.mod  m2 asetupcal.mod  m2 amacros.mod  m2 amakeedit.mod  m2 ame.mod    m2 a
screendu.mod  m2 are53  (*3 *3**33 53(55 55.$5/3 &33 53(53 (3 3&55 53  (  'R'A'F
'B'G'C'H'D'I'E  J QJ LI OK MH OJ KJ NL LH MJ IGz IK II MK IGz GI IHy IJ IHz JJ J
Gx FH GEu GJ HFw AxH EyEt DyH FGv AvGy DxEt  AxG DwGu tFw CvFu  xFy BuDr pDt AsF
t tEv Ft
Tous droits réservés. Reproduction sans autorisation interdite. © Kukulcan