000000: 45 58 54 45 4E 44 45 44 20 43 50 43 20 44 53 4B EXTENDED CPC DSK
000010: 20 46 69 6C 65 0D 0A 44 69 73 6B 2D 49 6E 66 6F File..Disk-Info
000020: 0D 0A 53 41 4D 64 69 73 6B 31 35 30 37 30 38 00 ..SAMdisk150708.
000030: 28 01 00 00 13 13 13 13 13 13 13 13 13 13 13 13 (...............
000040: 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 ................
000050: 13 13 13 13 13 13 13 13 13 13 13 13 00 00 00 00 ................
000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000100: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
000110: 00 00 01 00 02 09 52 E5 00 00 41 02 00 00 00 02 ......R...A.....
000120: 00 00 46 02 00 00 00 02 00 00 42 02 00 00 00 02 ..F.......B.....
000130: 00 00 47 02 00 00 00 02 00 00 43 02 00 00 00 02 ..G.......C.....
000140: 00 00 48 02 00 00 00 02 00 00 44 02 00 00 00 02 ..H.......D.....
000150: 00 00 49 02 00 00 00 02 00 00 45 02 00 00 00 02 ..I.......E.....
000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0001F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0002A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0002B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0002C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0002D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0002E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0002F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0003A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0003B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0003C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0003D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0003E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0003F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0004A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0004B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0004C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0004D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0004E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0004F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0005A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0005B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0005C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0005D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0005E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0005F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0006A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0006B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0006C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0006D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0006E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0006F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0007A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0007B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0007C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0007D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0007E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0007F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0008A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0008B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0008C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0008D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0008E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0008F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0009A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0009B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0009C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0009D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0009E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0009F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000A00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000A10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000A20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000A30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000A40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000A50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000A60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000A70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000A80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000A90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000AA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000AB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000AC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000AD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000AE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000AF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000B00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000B10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000B20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000B30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000B40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000B50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000B60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000B70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000B80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000B90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000BF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000C90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000CA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000CB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000CC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000CD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000CE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000CF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000D00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000D10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000D20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000D30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000D40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000D50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000D60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000D70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000D80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000D90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000DA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000DB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000DC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000DD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000DE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000DF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000E90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000EA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000EB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000EC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000ED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000EE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000EF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000F90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
000FF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0010A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0010B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0010C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0010D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0010E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0010F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0011A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0011B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0011C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0011D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0011E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0011F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0012F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0013F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001400: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
001410: 01 00 01 00 02 09 52 E5 01 00 41 02 00 00 00 02 ......R...A.....
001420: 01 00 46 02 00 00 00 02 01 00 42 02 00 00 00 02 ..F.......B.....
001430: 01 00 47 02 00 00 00 02 01 00 43 02 00 00 00 02 ..G.......C.....
001440: 01 00 48 02 00 00 00 02 01 00 44 02 00 00 00 02 ..H.......D.....
001450: 01 00 49 02 00 00 00 02 01 00 45 02 00 00 00 02 ..I.......E.....
001460: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
001470: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
001480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
001490: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0014F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
001500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0015A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0015B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0015C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0015D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0015E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0015F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0016A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0016B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0016C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0016D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0016E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0016F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0017A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0017B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0017C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0017D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0017E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0017F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0018A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0018B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0018C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0018D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0018E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0018F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0019F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001A90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001AF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001B90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001BA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001BB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001BC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001BD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001BE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001BF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001C00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001C10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001C20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001C30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001C40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001C50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001C60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001C70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001C80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001C90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001CA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001CB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001CC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001CD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001CE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001CF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001D00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001D10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001D20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001D30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001D40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001D50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001D60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001D70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001D80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001D90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001DA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001DB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001DC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001DD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001DE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001DF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001E00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001E10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001E20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001E30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001E40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001E50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001E60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001E70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001E80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001E90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001EA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001EB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001EC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001ED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001EE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001EF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001F00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001F10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001F20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001F30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001F40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001F50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001F60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001F70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001F80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001F90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001FA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001FB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001FC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001FD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001FE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
001FF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0020A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0020B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0020C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0020D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0020E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0020F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0021A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0021B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0021C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0021D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0021E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0021F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0022A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0022B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0022C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0022D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0022E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0022F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0023A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0023B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0023C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0023D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0023E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0023F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0024A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0024B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0024C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0024D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0024E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0024F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0025A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0025B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0025C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0025D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0025E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0025F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0026A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0026B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0026C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0026D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0026E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0026F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002700: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
002710: 02 00 01 00 02 09 52 E5 02 00 41 02 00 00 00 02 ......R...A.....
002720: 02 00 46 02 00 00 00 02 02 00 42 02 00 00 00 02 ..F.......B.....
002730: 02 00 47 02 00 00 00 02 02 00 43 02 00 00 00 02 ..G.......C.....
002740: 02 00 48 02 00 00 00 02 02 00 44 02 00 00 00 02 ..H.......D.....
002750: 02 00 49 02 00 00 00 02 02 00 45 02 00 00 00 02 ..I.......E.....
002760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0027F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002800: 00 57 50 20 20 20 20 20 20 43 4F 4D 00 00 00 08 .WP COM....
002810: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002820: 00 53 44 20 20 20 20 20 20 43 4F 4D 00 00 00 07 .SD COM....
002830: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002840: 00 57 44 20 20 20 20 20 20 43 4F 4D 00 00 00 04 .WD COM....
002850: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002860: 00 2D 32 4A 55 4C 59 31 39 38 37 20 00 00 00 00 .-2JULY1987 ....
002870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002880: 00 2D 42 41 43 4B 55 50 4E 4F 57 21 00 00 00 00 .-BACKUPNOW!....
002890: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0028A0: 00 2D 56 45 52 53 49 4F 4E 31 32 34 00 00 00 00 .-VERSION124....
0028B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0028C0: 00 43 41 54 20 20 20 20 20 4D 4F 44 00 00 00 80 .CAT MOD....
0028D0: 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 ................
0028E0: 00 43 41 54 20 20 20 20 20 4D 4F 44 01 00 00 04 .CAT MOD....
0028F0: 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002900: 00 43 4F 4D 4D 41 4E 44 20 44 45 46 00 00 00 09 .COMMAND DEF....
002910: 16 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002920: 00 43 4F 4D 4D 41 4E 44 20 4D 4F 44 00 00 00 0C .COMMAND MOD....
002930: 18 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002940: 00 43 4F 4D 50 41 52 45 20 4D 4F 44 00 00 00 61 .COMPARE MOD...a
002950: 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 00 00 00 ...... !"#$%&...
002960: 00 43 4F 4D 50 42 49 4E 20 4D 4F 44 00 00 00 0D .COMPBIN MOD....
002970: 27 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '(..............
002980: 00 43 4F 4D 50 44 49 52 20 4D 4F 44 00 00 00 4E .COMPDIR MOD...N
002990: 29 2A 2B 2C 2D 2E 2F 30 31 32 00 00 00 00 00 00 )*+,-./012......
0029A0: 00 46 49 4C 45 4F 50 53 20 44 45 46 00 00 00 04 .FILEOPS DEF....
0029B0: 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3...............
0029C0: 00 46 49 4C 45 4F 50 53 20 4D 4F 44 00 00 00 14 .FILEOPS MOD....
0029D0: 34 35 36 00 00 00 00 00 00 00 00 00 00 00 00 00 456.............
0029E0: 00 47 45 54 46 49 4C 45 53 44 45 46 00 00 00 06 .GETFILESDEF....
0029F0: 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7...............
002A00: 01 0B 00 ED B0 D1 E1 72 2B 73 2B F1 77 0E 17 11 .......r+s+.w...
002A10: 22 05 CD 05 00 11 22 05 D5 0E 13 CD 05 00 D1 0E ".....".........
002A20: 16 CD 05 00 3C 28 18 CD 77 03 C0 11 22 05 D5 0E ....<(..w..."...
002A30: 10 CD 05 00 D1 0E 13 CD 05 00 11 A8 04 18 03 11 ................
002A40: 9B 04 0E 09 C3 05 00 5F 0E 02 18 F8 7E C6 40 23 ......._....~.@#
002A50: E5 CD 47 03 1E 3A CD 48 03 E1 06 0B E5 C5 3E 03 ..G..:.H......>.
002A60: B8 20 07 E5 1E 2E CD 48 03 E1 5E CB BB 73 CD 48 . .....H..^..s.H
002A70: 03 C1 E1 23 10 E6 C9 AF 32 F8 04 67 6F 22 FB 04 ...#....2..go"..
002A80: 11 51 11 D5 0E 1A CD 05 00 11 FE 04 0E 14 CD 05 .Q..............
002A90: 00 D1 A7 20 19 2A FB 04 23 22 FB 04 21 80 00 19 ... .*..#"..!...
002AA0: ED 5B F9 04 EB ED 52 30 DA 3E 01 32 F8 04 ED 4B .[....R0.>.2...K
002AB0: FB 04 78 B1 28 23 11 51 11 C5 D5 0E 1A CD 05 00 ..x.(#.Q........
002AC0: 11 22 05 0E 15 CD 05 00 D1 C1 A7 28 02 AF C9 21 .".........(...!
002AD0: 80 00 19 EB 0B 78 B1 20 E0 3A F8 04 A7 20 98 11 .....x. .:... ..
002AE0: 22 05 0E 10 CD 05 00 3C C9 4F AF 21 81 00 1E 02 "......<.O.!....
002AF0: D5 E5 11 0A 00 21 00 00 06 10 CB 11 17 ED 6A ED .....!........j.
002B00: 52 30 01 19 3F 10 F3 CB 11 17 55 E1 72 2B D1 1D R0..?.....U.r+..
002B10: 20 DE 06 02 CB 81 78 FE 01 20 02 CB C1 23 7E B7 .....x.. ...#~.
002B20: 20 08 CB 41 20 04 3E 20 18 04 CB C1 C6 30 E5 C5 ..A .> .....0..
002B30: CD 47 03 C1 E1 10 DF C9 AF 32 F7 04 32 F4 04 47 .G.......2..2..G
002B40: 3A 80 00 4F 21 81 00 3E 2D ED B1 C0 2B 2B 7E FE :..O!..>-...++~.
002B50: 20 23 23 20 F2 7E 23 FE 51 28 08 FE 42 C0 32 F5 ## .~#.Q(..B.2.
002B60: 04 18 F2 32 F7 04 18 ED 57 50 20 56 33 2E 30 20 ...2....WP V3.0
002B70: 28 43 29 20 31 39 38 37 20 48 69 53 6F 66 74 0D (C) 1987 HiSoft.
002B80: 0A 42 75 66 66 65 72 20 73 69 7A 65 3A 20 24 0D .Buffer size: $.
002B90: 0A 24 4E 6F 20 66 69 6C 65 73 24 20 4F 70 65 6E .$No files$ Open
002BA0: 20 66 61 69 6C 65 64 24 20 44 69 73 63 20 49 2F failed$ Disc I/
002BB0: 4F 20 65 72 72 6F 72 20 28 46 75 6C 6C 20 3F 29 O error (Full ?)
002BC0: 24 20 74 6F 20 24 20 20 53 61 6D 65 24 20 20 43 $ to $ Same$ C
002BD0: 6F 70 79 20 28 59 2F 4E 2F 41 2F 51 2F 50 2F 42 opy (Y/N/A/Q/P/B
002BE0: 2F 57 29 3F 20 24 00 3F 3F 3F 3F 3F 3F 3F 3F 3F /W)? $.?????????
002BF0: 3F 3F 00 00 00 00 00 00 00 00 00 00 00 00 20 4C ??............ L
002C00: 00 47 45 54 46 49 4C 45 53 4D 4F 44 00 00 00 0F .GETFILESMOD....
002C10: 38 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 89..............
002C20: 00 49 4D 50 4F 52 54 20 20 44 45 46 00 00 00 17 .IMPORT DEF....
002C30: 3A 3B 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 :;<.............
002C40: 00 49 4D 50 4F 52 54 20 20 4D 4F 44 00 00 00 3E .IMPORT MOD...>
002C50: 3D 3E 3F 40 41 42 43 44 00 00 00 00 00 00 00 00 =>?@ABCD........
002C60: 00 4D 41 43 52 4F 53 20 20 4D 42 45 00 00 00 33 .MACROS MBE...3
002C70: 45 46 47 48 49 4A 4B 00 00 00 00 00 00 00 00 00 EFGHIJK.........
002C80: 00 4D 4C 55 20 20 20 20 20 4D 4F 44 00 00 00 64 .MLU MOD...d
002C90: 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 00 00 00 LMNOPQRSTUVWX...
002CA0: 00 50 41 54 54 45 52 4E 20 44 45 46 00 00 00 30 .PATTERN DEF...0
002CB0: 59 5A 5B 5C 5D 5E 00 00 00 00 00 00 00 00 00 00 YZ[\]^..........
002CC0: 00 50 41 54 54 45 52 4E 20 4D 4F 44 00 00 00 35 .PATTERN MOD...5
002CD0: 5F 60 61 62 63 64 65 00 00 00 00 00 00 00 00 00 _`abcde.........
002CE0: 00 53 43 52 45 45 4E 49 4F 45 41 52 00 00 00 55 .SCREENIOEAR...U
002CF0: 66 67 68 69 6A 6B 6C 6D 6E 6F 70 00 00 00 00 00 fghijklmnop.....
002D00: 00 53 43 52 45 45 4E 49 4F 4D 42 45 00 00 00 53 .SCREENIOMBE...S
002D10: 71 72 73 74 75 76 77 78 79 7A 7B 00 00 00 00 00 qrstuvwxyz{.....
002D20: 00 53 43 52 45 45 4E 49 4F 4F 53 42 00 00 00 50 .SCREENIOOSB...P
002D30: 7C 7D 7E 7F 80 81 82 83 84 85 00 00 00 00 00 00 |}~.............
002D40: 00 54 45 53 54 50 41 54 20 4D 4F 44 00 00 00 0C .TESTPAT MOD....
002D50: 86 87 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
002D60: 00 45 44 49 54 43 4F 4E 54 44 4D 42 00 00 00 6E .EDITCONTDMB...n
002D70: 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 00 00 ................
002D80: 00 45 44 49 54 44 49 53 50 44 4D 42 00 00 00 35 .EDITDISPDMB...5
002D90: 96 97 98 99 9A 9B 9C 00 00 00 00 00 00 00 00 00 ................
002DA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002DB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002DC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002DD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002DE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002DF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
002E00: ED 7B 06 00 11 F3 03 CD 87 01 0E 19 CD 05 00 32 .{.............2
002E10: 5C 04 21 80 00 7E A7 20 0B 21 1F 04 11 5C 00 01 \.!..~. .!...\..
002E20: 0C 00 ED B0 AF 32 55 04 32 5F 04 11 5C 00 D5 DD .....2U.2_..\...
002E30: E1 DD 7E 01 FE 20 20 0B D5 13 21 20 04 01 0B 00 ..~.. ...! ....
002E40: ED B0 D1 1A B7 20 04 3A 5C 04 3C 3D 32 5D 04 5F ..... .:\.<=2]._
002E50: 0E 0E CD 05 00 0E 1F CD 05 00 22 56 04 23 23 23 .........."V.###
002E60: 23 7E 32 58 04 11 5C 00 DD 36 0C 3F 0E 11 CD 05 #~2X..\..6.?....
002E70: 00 3C 20 18 11 41 04 CD 87 01 CD 1B 03 3A 5C 04 .< ..A.......:\.
002E80: 5F 0E 0E CD 05 00 C7 0E 09 C3 05 00 3D 87 87 87 _...........=...
002E90: 87 87 5F 16 00 21 80 00 19 3A 5F 04 F5 E5 21 65 .._..!...:_...!e
002EA0: 04 B7 28 07 47 11 10 00 19 10 FD D1 01 10 00 EB ..(.G...........
002EB0: ED B0 F1 3C 32 5F 04 0E 12 CD 05 00 3C 20 CD CD ...<2_......< ..
002EC0: 65 02 3A 5F 04 47 DD 21 65 04 C5 DD CB 00 7E CC e.:_.G.!e.....~.
002ED0: DC 01 11 10 00 DD 19 C1 10 F0 18 98 CD 41 02 11 .............A..
002EE0: 2E 04 DD CB 0A 7E 28 03 11 2B 04 CD 87 01 11 34 .....~(..+.....4
002EF0: 04 DD CB 09 7E 28 03 11 31 04 CD 87 01 DD 6E 0F ....~(..1.....n.
002F00: DD 66 0E 7D B4 28 13 7D E6 07 20 01 2B CB 3C CB .f.}.(.}.. .+.<.
002F10: 1D CB 3C CB 1D CB 3C CB 1D 23 4D 7C CD A2 03 11 ..<...<..#M|....
002F20: 37 04 CD 87 01 DD 4E 0F DD 7E 0E CD A2 03 11 1A 7.....N..~......
002F30: 04 3A 55 04 EE 01 32 55 04 28 03 11 1D 04 C3 87 .:U...2U.(......
002F40: 01 DD E5 E1 06 0B 23 E5 C5 3E 03 B8 20 09 E5 1E ......#..>.. ...
002F50: 2E 0E 02 CD 05 00 E1 5E CB BB 0E 02 CD 05 00 C1 .......^........
002F60: E1 23 10 E3 C9 DD 21 65 04 3A 5F 04 47 C5 3A 58 .#....!e.:_.G.:X
002F70: 04 DD BE 0C 38 25 DD 7E 0F FE 80 20 1E CD CC 02 ....8%.~... ....
002F80: 28 19 FD CB 00 FE FD 6E 0F FD 66 0E DD 5E 0F DD (......n..f..^..
002F90: 56 0E 19 DD 75 0F DD 74 0E 18 E2 3A 58 04 B7 C4 V...u..t...:X...
002FA0: AB 02 11 10 00 DD 19 C1 10 C3 C9 3C 5F DD 4E 0C ...........<_.N.
002FB0: AF 57 CD DD 03 7D B7 C8 45 DD 6E 0F DD 66 0E 11 .W...}..E.n..f..
002FC0: 80 00 19 10 FD DD 75 0F DD 74 0E C9 FD 21 65 04 ......u..t...!e.
002FD0: C5 3A 5F 04 47 DD E5 FD E5 E1 D1 A7 ED 52 28 09 .:_.G........R(.
002FE0: FD CB 00 7E CC 08 03 28 0A 11 10 00 FD 19 10 E5 ...~...(........
002FF0: AF C1 C9 3A 58 04 B7 28 0B DD E5 FD E5 DD E1 CD ...:X..(........
003000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0030A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0030B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0030C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0030D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0030E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0030F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0031A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0031B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0031C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0031D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0031E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0031F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003200: AB 02 DD E1 F6 01 C1 C9 DD E5 FD E5 D1 E1 C5 06 ................
003210: 0B 23 13 1A BE 20 02 10 F8 C1 C9 0E 0C CD 05 00 .#... ..........
003220: FE 30 30 50 DD 2A 56 04 DD 6E 05 DD 66 06 22 59 .00P.*V..n..f."Y
003230: 04 DD 7E 02 D6 02 47 AF 37 17 10 FD 32 5B 04 0E ..~...G.7...2[..
003240: 1B CD 05 00 ED 4B 59 04 03 11 00 00 3E 08 32 5E .....KY.....>.2^
003250: 04 CB 16 38 01 13 0B 79 B0 28 09 3A 5E 04 3D 20 ...8...y.(.:^.=
003260: ED 23 18 E8 6B 62 3A 5B 04 47 05 28 03 19 10 FD .#..kb:[.G.(....
003270: 7C 4D 18 23 3A 5D 04 0E 2E 5F CD 05 00 06 03 DD |M.#:]..._......
003280: 21 80 00 DD CB 02 3E DD CB 01 1E DD CB 00 1E 10 !.....>.........
003290: F2 DD 7E 01 DD 4E 00 CD A2 03 3E 4B 5F 0E 02 C3 ..~..N....>K_...
0032A0: 05 00 21 64 04 1E 05 D5 E5 11 0A 00 CD DD 03 55 ..!d...........U
0032B0: E1 72 2B D1 1D 20 F0 06 05 CB 81 78 FE 01 20 02 .r+.. .....x.. .
0032C0: CB C1 23 7E B7 20 08 CB 41 20 04 3E 20 18 04 CB ..#~. ..A .> ...
0032D0: C1 C6 30 E5 C5 CD 9C 03 C1 E1 10 DF C9 21 00 00 ..0..........!..
0032E0: 06 10 CB 11 17 ED 6A ED 52 30 01 19 3F 10 F3 CB ......j.R0..?...
0032F0: 11 17 C9 53 44 20 56 31 2E 30 20 62 79 20 41 64 ...SD V1.0 by Ad
003300: 61 6D 20 44 65 6E 6E 69 6E 67 20 28 43 29 20 48 am Denning (C) H
003310: 69 53 6F 66 74 20 31 39 38 36 0D 0A 24 09 24 00 iSoft 1986..$.$.
003320: 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 20 53 24 20 20 ??????????? S$
003330: 24 52 20 24 20 20 24 4B 20 20 52 65 63 73 3A 20 $R $ $K Recs:
003340: 24 0D 0A 44 69 73 63 20 66 72 65 65 20 73 70 61 $..Disc free spa
003350: 63 65 3A 20 24 66 75 6E 63 74 69 6F 6E F3 20 69 ce: $function. i
003360: EE 20 73 6F 75 72 63 E5 20 61 6E E4 20 4D 61 6E . sourc. an. Man
003370: F8 20 8D 0A 6C 69 62 72 61 72 F9 20 66 6F 72 6D . ..librar. form
003380: 6E 73 20 64 75 72 69 6E 67 20 65 78 65 63 75 74 ns during execut
003390: 69 6F 6E 20 6F 66 20 72 65 70 65 61 74 73 20 2A ion of repeats *
0033A0: 29 0D 0A 45 4E 44 20 53 63 72 65 65 6E 49 4F 2E )..END ScreenIO.
0033B0: 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0033C0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0033D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0033E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0033F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
003400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0034A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0034B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0034C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0034D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0034E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0034F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0035A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0035B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0035C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0035D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0035E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0035F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003600: ED 7B 06 00 11 7C 02 CD 3A 01 21 80 00 7E B7 20 .{...|..:.!..~.
003610: 0B 21 E0 02 11 5C 00 01 0C 00 ED B0 11 5C 00 D5 .!...\.......\..
003620: DD E1 DD 7E 01 FE 20 20 16 D5 13 21 E1 02 01 0B ...~.. ...!....
003630: 00 ED B0 D1 18 09 CD 3A 01 C7 0E 09 C3 05 00 AF .......:........
003640: 32 EC 02 32 ED 02 1A 32 EE 02 0E 11 CD 05 00 3C 2..2...2.......<
003650: 20 05 11 A6 02 18 DF F5 3A EE 02 B7 20 09 0E 19 .......:... ...
003660: CD 05 00 3C 32 EE 02 21 00 00 47 37 CB 15 CB 14 ...<2..!..G7....
003670: A7 10 F9 E5 0E 1D CD 05 00 D1 7D A3 6F 7C A2 B5 ..........}£o|..
003680: 28 05 11 98 02 18 AF F1 3D 87 87 87 87 87 5F 16 (.......=....._.
003690: 00 21 80 00 19 CD FB 01 0E 12 CD 05 00 3C 20 E8 .!...........< .
0036A0: 21 EF 02 E5 CD 24 02 3A ED 02 B7 20 1E 11 C9 02 !....$.:... ....
0036B0: CD 3A 01 0E 01 CD 05 00 F6 20 FE 71 28 3C FE 61 .:....... .q(<.a
0036C0: 20 05 32 ED 02 18 04 FE 79 20 03 CD 57 02 F5 11 .2.....y ..W...
0036D0: 95 02 CD 3A 01 F1 E1 FE 70 3A EC 02 28 0C 11 0C ...:....p:..(...
0036E0: 00 19 3D 28 15 32 EC 02 18 B9 11 F4 FF 19 11 EF ..=(.2..........
0036F0: 02 B7 ED 52 19 38 03 3C 18 EB C7 23 E5 11 0C 00 ...R.8.<...#....
003700: 21 00 00 3A EC 02 B7 28 04 47 19 10 FD 11 EF 02 !..:...(.G......
003710: 19 F5 3A EE 02 77 F1 23 D1 EB 01 0B 00 ED B0 3C ..:..w.#.......<
003720: 32 EC 02 C9 7E 23 E5 C6 40 5F 0E 02 CD 05 00 1E 2...~#..@_......
003730: 3A 0E 02 CD 05 00 E1 06 0B E5 C5 3E 03 B8 20 09 :..........>.. .
003740: E5 1E 2E 0E 02 CD 05 00 E1 5E CB BB 0E 02 CD 05 .........^......
003750: 00 C1 E1 23 10 E3 C9 D1 E1 E5 D5 11 5C 00 01 0C ...#........\...
003760: 00 ED B0 11 5C 00 D5 DD E1 DD CB 09 7E 20 07 0E ....\.......~ ..
003770: 13 CD 05 00 3C C0 11 B8 02 C3 3A 01 57 44 45 4C ....<.....:.WDEL
003780: 20 56 32 2E 30 20 28 43 29 20 31 39 38 37 20 48 V2.0 (C) 1987 H
003790: 69 53 6F 66 74 0D 0A 24 44 72 69 76 65 20 69 73 iSoft..$Drive is
0037A0: 20 52 2F 4F 21 24 4E 6F 20 6D 61 74 63 68 69 6E R/O!$No matchin
0037B0: 67 20 66 69 6C 65 73 24 20 20 43 61 6E 6E 6F 74 g files$ Cannot
0037C0: 20 64 65 6C 65 74 65 21 24 20 20 44 65 6C 65 74 delete!$ Delet
0037D0: 65 20 28 59 2F 4E 2F 41 2F 51 2F 50 29 3F 20 24 e (Y/N/A/Q/P)? $
0037E0: 00 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 00 00 00 00 .???????????....
0037F0: FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 ................
003800: 2A 06 00 F9 11 00 FF 19 22 F9 04 11 51 11 A7 ED *......."...Q...
003810: 52 7C 1F 1F E6 3F 3C F5 11 68 04 CD 42 03 CD 38 R|...?<..h..B..8
003820: 04 F1 CD E9 03 3E 4B CD 47 03 11 8F 04 CD 42 03 .....>K.G.....B.
003830: 3A 5C 00 B7 20 03 CD 68 01 32 F3 04 21 6C 00 7E :\.. ..h.2..!l.~
003840: B7 20 1C 23 7E FE 2D 20 13 23 7E FE 51 28 04 FE . .#~.- .#~.Q(..
003850: 42 20 09 23 7E FE 20 20 03 32 6D 00 CD 68 01 32 B .#~. .2m..h.2
003860: F2 04 18 0B CD 42 03 C7 0E 19 CD 05 00 3C C9 11 .....B.......<..
003870: 46 05 01 0B 00 21 6D 00 7E FE 20 20 03 21 E7 04 F....!m.~. .!..
003880: ED B0 11 5C 00 D5 DD E1 DD 7E 01 FE 20 20 0B D5 ...\.....~.. ..
003890: 13 21 E7 04 01 0B 00 ED B0 D1 0E 11 CD 05 00 3C .!.............<
0038A0: 20 05 11 92 04 18 BD 3D 87 87 87 87 87 5F 16 00 ......=....._..
0038B0: 21 80 00 19 3A F4 04 F5 E5 21 51 05 B7 28 07 47 !...:....!Q..(.G
0038C0: 11 0B 00 19 10 FD D1 13 01 0B 00 EB ED B0 F1 3C ...............<
0038D0: 32 F4 04 0E 12 CD 05 00 3C 20 CC 21 51 05 E5 CD 2.......< .!Q...
0038E0: 9B 02 21 FE 04 CD 4C 03 11 C1 04 CD 42 03 21 22 ..!...L.....B.!"
0038F0: 05 E5 CD 4C 03 E1 11 FE 04 06 0C 1A BE 23 13 20 ...L.........#.
003900: 10 10 F8 11 C6 04 CD 42 03 3A FD 04 B7 28 3C 18 .......B.:...(<.
003910: 5B 3A F7 04 B7 20 2D 11 CD 04 CD 42 03 0E 01 CD [:... -....B....
003920: 05 00 F6 20 FE 71 CA 00 00 FE 61 20 05 32 F7 04 ... .q....a .2..
003930: 18 0C FE 62 28 31 FE 77 28 2C FE 79 20 09 3A F5 ...b(1.w(,.y .:.
003940: 04 32 F6 04 CD CC 02 FE 70 28 21 11 8F 04 CD 42 .2......p(!....B
003950: 03 E1 11 0B 00 19 AF 32 FD 04 3A F4 04 3D 28 C6 .......2..:..=(.
003960: 32 F4 04 C3 DE 01 AF 32 F6 04 18 D8 11 8F 04 CD 2......2........
003970: 42 03 E1 11 F5 FF 19 01 51 05 B7 ED 42 09 DA 00 B.......Q...B...
003980: 00 3E 01 32 FD 04 3A F4 04 3C 18 D4 01 23 00 E5 .>.2..:..<...#..
003990: D5 62 6B 13 36 00 ED B0 D1 E1 C9 E5 11 FE 04 CD .bk.6...........
0039A0: 8C 02 3A F3 04 12 13 01 0B 00 ED B0 11 22 05 CD ..:.........."..
0039B0: 8C 02 3A F2 04 12 13 21 46 05 06 0B 7E FE 3F 23 ..:....!F...~.?#
0039C0: E3 20 01 7E 23 E3 12 13 10 F2 E1 C9 11 FE 04 0E . .~#...........
0039D0: 0F CD 05 00 3C 28 68 AF 32 1E 05 3A F6 04 B7 28 ....<(h.2..:...(
0039E0: 34 21 2B 05 7E F5 36 42 23 5E 36 41 23 56 36 4B 4!+.~.6B#^6A#V6K
0039F0: E5 D5 11 22 05 0E 13 CD 05 00 21 23 05 11 33 05 ..."......!#..3.
003A00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
003A10: 03 00 01 00 02 09 52 E5 03 00 41 02 00 00 00 02 ......R...A.....
003A20: 03 00 46 02 00 00 00 02 03 00 42 02 00 00 00 02 ..F.......B.....
003A30: 03 00 47 02 00 00 00 02 03 00 43 02 00 00 00 02 ..G.......C.....
003A40: 03 00 48 02 00 00 00 02 03 00 44 02 00 00 00 02 ..H.......D.....
003A50: 03 00 49 02 00 00 00 02 03 00 45 02 00 00 00 02 ..I.......E.....
003A60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003A70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003A80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003A90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003AF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
003B00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003B10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003B20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003B30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003B40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003B50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003B60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003B70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003B80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003B90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003BA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003BB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003BC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003BD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003BE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003BF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003C00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003C10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003C20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003C30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003C40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003C50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003C60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003C70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003C80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003C90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003CA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003CB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003CC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003CD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003CE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003CF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
003D00: 67 74 68 20 77 68 65 6E 20 65 6E 64 2D 6F 66 2D gth when end-of-
003D10: 66 69 6C 65 20 69 73 0D 0A 09 09 09 20 20 20 65 file is..... e
003D20: 6E 63 6F 75 6E 74 65 72 65 64 0D 0A 2A 29 0D 0A ncountered..*)..
003D30: 09 42 75 66 66 65 72 3A 41 52 52 41 59 5B 30 2E .Buffer:ARRAY[0.
003D40: 2E 42 75 66 66 65 72 53 69 7A 65 2D 31 5D 20 4F .BufferSize-1] O
003D50: 46 20 43 48 41 52 3B 0D 0A 09 4E 65 78 74 42 6C F CHAR;...NextBl
003D60: 6F 63 6B 4E 6F 2C 42 6C 6F 63 6B 4E 6F 3A 43 41 ockNo,BlockNo:CA
003D70: 52 44 49 4E 41 4C 3B 0D 0A 09 43 68 61 72 50 6F RDINAL;...CharPo
003D80: 73 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 43 68 s:CARDINAL;...Ch
003D90: 61 72 43 6F 75 6E 74 3A 43 41 52 44 49 4E 41 4C arCount:CARDINAL
003DA0: 3B 0D 0A 09 50 61 67 65 4E 75 6D 62 65 72 3A 49 ;...PageNumber:I
003DB0: 4E 54 45 47 45 52 3B 0D 0A 09 50 61 67 65 4C 65 NTEGER;...PageLe
003DC0: 6E 3A 43 41 52 44 49 4E 41 4C 3D 32 34 3B 0D 0A n:CARDINAL=24;..
003DD0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 61 64 ..PROCEDURE Read
003DE0: 42 75 66 66 65 72 3B 0D 0A 42 45 47 49 4E 0D 0A Buffer;..BEGIN..
003DF0: 09 42 6C 6F 63 6B 4E 6F 3A 3D 4E 65 78 74 42 6C .BlockNo:=NextBl
003E00: 6F 63 6B 4E 6F 3B 09 0D 0A 09 52 65 61 64 42 6C ockNo;....ReadBl
003E10: 6F 63 6B 28 49 6E 66 2C 41 44 52 28 42 75 66 66 ock(Inf,ADR(Buff
003E20: 65 72 29 2C 30 2C 42 75 66 66 65 72 53 69 7A 65 er),0,BufferSize
003E30: 2C 72 65 70 6C 79 29 3B 0D 0A 09 43 68 61 72 43 ,reply);...CharC
003E40: 6F 75 6E 74 3A 3D 72 65 70 6C 79 3B 0D 0A 0D 0A ount:=reply;....
003E50: 09 28 2A 50 61 64 20 72 65 73 74 20 6F 66 20 62 .(*Pad rest of b
003E60: 75 66 66 65 72 20 77 69 74 68 20 65 6E 64 2D 6F uffer with end-o
003E70: 66 2D 66 69 6C 65 20 63 68 61 72 61 63 74 65 72 f-file character
003E80: 73 0D 0A 09 20 20 4E 6F 72 6D 61 6C 6C 79 2C 20 s... Normally,
003E90: 43 68 61 72 43 6F 75 6E 74 20 77 69 6C 6C 20 65 CharCount will e
003EA0: 71 75 61 6C 20 48 49 47 48 28 62 75 66 66 65 72 qual HIGH(buffer
003EB0: 29 2B 31 2C 20 73 6F 20 6E 6F 0D 0A 09 20 20 70 )+1, so no... p
003EC0: 61 64 64 69 6E 67 20 74 61 6B 65 73 20 70 6C 61 adding takes pla
003ED0: 63 65 2A 29 0D 0A 0D 0A 09 46 4F 52 20 43 68 61 ce*).....FOR Cha
003EE0: 72 50 6F 73 3A 3D 43 68 61 72 43 6F 75 6E 74 20 rPos:=CharCount
003EF0: 54 4F 20 48 49 47 48 28 42 75 66 66 65 72 29 20 TO HIGH(Buffer)
003F00: 4D 4F 44 55 4C 45 20 43 61 74 3B 0D 0A 0D 0A 28 MODULE Cat;....(
003F10: 2A 09 4C 69 73 74 20 6F 6E 65 20 6F 66 20 6D 6F *.List one of mo
003F20: 72 65 20 66 69 6C 65 73 20 74 6F 20 74 68 65 20 re files to the
003F30: 74 65 72 6D 69 6E 61 6C 0D 0A 0D 0A 0D 0A 09 43 terminal.......C
003F40: 61 6C 6C 20 69 73 20 43 41 54 20 20 20 3C 28 77 all is CAT <(w
003F50: 69 6C 64 20 63 61 72 64 29 20 66 69 6C 65 20 6E ild card) file n
003F60: 61 6D 65 3E 2C 2E 2E 2E 2E 20 5B 4F 70 74 69 6F ame>,.... [Optio
003F70: 6E 73 0D 0A 0D 0A 09 57 68 65 72 65 20 74 68 65 ns.....Where the
003F80: 20 77 69 6C 64 20 63 61 72 64 20 66 69 6C 65 20 wild card file
003F90: 6E 61 6D 65 73 20 61 72 65 20 74 68 65 20 6E 61 names are the na
003FA0: 6D 65 73 20 6F 66 20 66 69 6C 65 73 20 74 6F 20 mes of files to
003FB0: 6C 69 73 74 0D 0A 09 54 68 65 20 6F 70 74 69 6F list...The optio
003FC0: 6E 73 20 61 72 65 3A 0D 0A 0D 0A 09 09 50 20 2D ns are:......P -
003FD0: 20 72 75 6E 20 69 6E 20 70 61 67 65 20 6D 6F 64 run in page mod
003FE0: 65 0D 0A 09 09 20 20 20 20 69 6E 20 70 61 67 65 e.... in page
003FF0: 20 6D 6F 64 65 2C 20 61 74 20 74 68 65 20 65 6E mode, at the en
004000: 64 20 6F 66 20 65 61 63 68 20 73 63 72 65 65 6E d of each screen
004010: 20 6F 66 20 6F 75 74 70 75 74 2C 0D 0A 09 09 20 of output,....
004020: 20 20 20 61 20 70 72 6F 6D 70 74 20 6C 69 6E 65 a prompt line
004030: 20 69 73 20 70 72 65 73 65 6E 74 65 64 2E 0D 0A is presented...
004040: 0D 0A 09 09 20 20 20 50 20 6D 61 79 20 62 65 20 .... P may be
004050: 66 6F 6C 6C 6F 77 65 64 20 62 79 20 74 68 65 20 followed by the
004060: 73 63 72 65 65 6E 20 6C 65 6E 67 74 68 20 69 6E screen length in
004070: 20 6C 69 6E 65 73 0D 0A 09 09 20 20 20 20 20 64 lines.... d
004080: 65 66 61 75 6C 74 20 69 73 20 32 34 0D 0A 0D 0A efault is 24....
004090: 09 09 4E 20 2D 20 6F 75 74 70 75 74 20 6C 69 6E ..N - output lin
0040A0: 65 20 6E 75 6D 62 65 72 73 0D 0A 09 09 57 20 2D e numbers....W -
0040B0: 20 77 72 61 70 20 6C 69 6E 65 73 20 6C 6F 6E 67 wrap lines long
0040C0: 65 72 20 74 68 61 6E 20 73 63 72 65 65 6E 20 77 er than screen w
0040D0: 69 64 74 68 0D 0A 09 09 20 20 20 20 57 20 6D 61 idth.... W ma
0040E0: 79 20 62 65 20 66 6F 6C 6C 6F 77 65 64 20 62 79 y be followed by
0040F0: 20 73 63 72 65 65 6E 20 77 69 64 74 68 20 69 6E screen width in
004100: 44 4F 20 42 75 66 66 65 72 5B 43 68 61 72 50 6F DO Buffer[CharPo
004110: 73 5D 3A 3D 45 4F 46 20 45 4E 44 3B 0D 0A 09 43 s]:=EOF END;...C
004120: 68 61 72 50 6F 73 3A 3D 30 3B 0D 0A 0D 0A 09 28 harPos:=0;.....(
004130: 2A 09 69 6E 63 72 65 6D 65 6E 74 20 4E 65 78 74 *.increment Next
004140: 42 6C 6F 63 6B 20 74 6F 20 61 6C 6C 6F 77 20 66 Block to allow f
004150: 6F 72 20 64 61 74 61 20 72 65 61 64 2A 29 0D 0A or data read*)..
004160: 0D 0A 09 4E 65 78 74 42 6C 6F 63 6B 4E 6F 3A 3D ...NextBlockNo:=
004170: 49 4E 54 45 47 45 52 28 42 6C 6F 63 6B 4E 6F 29 INTEGER(BlockNo)
004180: 2B 72 65 70 6C 79 20 44 49 56 20 42 6C 6F 63 6B +reply DIV Block
004190: 53 69 7A 65 3B 0D 0A 09 45 4E 44 20 52 65 61 64 Size;...END Read
0041A0: 42 75 66 66 65 72 3B 0D 0A 0D 0A 56 41 52 09 63 Buffer;....VAR.c
0041B0: 68 3A 43 48 41 52 3B 09 09 28 2A 6E 65 78 74 20 h:CHAR;..(*next
0041C0: 63 68 61 72 61 63 74 65 72 20 72 65 61 64 2A 29 character read*)
0041D0: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 4E 65 ....PROCEDURE Ne
0041E0: 78 74 43 68 61 72 3B 0D 0A 42 45 47 49 4E 0D 0A xtChar;..BEGIN..
0041F0: 09 49 46 20 43 68 61 72 50 6F 73 3E 3D 43 68 61 .IF CharPos>=Cha
004200: 72 43 6F 75 6E 74 20 54 48 45 4E 20 0D 0A 09 09 rCount THEN ....
004210: 52 65 61 64 42 75 66 66 65 72 3B 0D 0A 09 09 45 ReadBuffer;....E
004220: 4E 44 3B 20 20 28 2A 49 46 20 43 68 61 72 50 6F ND; (*IF CharPo
004230: 73 3E 3D 43 68 61 72 43 6F 75 6E 74 2A 29 0D 0A s>=CharCount*)..
004240: 09 63 68 3A 3D 42 75 66 66 65 72 5B 43 68 61 72 .ch:=Buffer[Char
004250: 50 6F 73 5D 3B 0D 0A 09 49 4E 43 28 43 68 61 72 Pos];...INC(Char
004260: 50 6F 73 29 3B 0D 0A 09 45 4E 44 20 4E 65 78 74 Pos);...END Next
004270: 43 68 61 72 3B 0D 0A 0D 0A 28 2A 09 46 69 6C 65 Char;....(*.File
004280: 20 70 6F 73 69 74 69 6F 6E 69 6E 67 20 72 6F 75 positioning rou
004290: 74 69 6E 65 73 0D 0A 0D 0A 09 59 6F 75 20 63 61 tines.....You ca
0042A0: 6E 20 70 6F 73 69 74 69 6F 6E 20 61 20 66 69 6C n position a fil
0042B0: 65 20 62 79 3A 0D 0A 0D 0A 09 09 69 29 09 47 69 e by:......i).Gi
0042C0: 76 69 6E 67 20 74 68 65 20 6E 75 6D 62 65 72 20 ving the number
0042D0: 6F 66 20 74 68 65 20 6C 69 6E 65 20 74 6F 20 6C of the line to l
0042E0: 69 73 74 20 66 72 6F 6D 0D 0A 09 09 69 69 29 09 ist from....ii).
0042F0: 47 69 76 69 6E 67 20 61 20 73 74 72 69 6E 67 20 Giving a string
004300: 20 63 68 61 72 61 63 74 65 72 73 0D 0A 09 09 20 characters....
004310: 20 20 20 64 65 66 61 75 6C 74 20 69 73 20 38 30 default is 80
004320: 0D 0A 0D 0A 09 09 49 20 2D 20 65 78 70 61 6E 64 ......I - expand
004330: 20 74 61 62 73 20 74 6F 20 73 70 61 63 65 73 0D tabs to spaces.
004340: 0A 0D 0A 0D 0A 0D 0A 09 46 6F 72 20 65 78 61 6D ........For exam
004350: 70 6C 65 3A 0D 0A 0D 0A 09 09 43 41 54 20 62 3A ple:......CAT b:
004360: 2A 2E 64 65 66 20 62 3A 2A 2E 6D 6F 64 20 62 3A *.def b:*.mod b:
004370: 2A 2E 73 75 62 5B 50 31 36 57 31 30 30 4E 0D 0A *.sub[P16W100N..
004380: 0D 0A 0D 0A 0D 0A 09 54 68 69 73 20 69 73 20 61 .......This is a
004390: 20 68 61 63 6B 20 6F 66 20 74 68 65 20 4C 49 53 hack of the LIS
0043A0: 54 20 70 72 6F 67 72 61 6D 20 77 68 69 63 68 20 T program which
0043B0: 63 6F 6D 65 73 20 77 69 74 68 20 6D 79 0D 0A 09 comes with my...
0043C0: 4D 6F 64 75 6C 61 2D 32 20 63 6F 6D 70 69 6C 65 Modula-2 compile
0043D0: 72 2E 20 28 42 75 74 20 68 69 67 68 6C 79 20 6D r. (But highly m
0043E0: 6F 64 69 66 69 65 64 29 0D 0A 0D 0A 09 4C 69 6D odified).....Lim
0043F0: 69 74 61 74 69 6F 6E 73 3A 0D 0A 09 3D 3D 3D 3D itations:...====
004400: 3D 3D 3D 3D 3D 3D 3D 3D 0D 0A 09 09 41 74 20 6D ========....At m
004410: 6F 73 74 20 31 30 20 28 77 69 6C 64 20 63 61 72 ost 10 (wild car
004420: 64 29 20 66 69 6C 65 20 6E 61 6D 65 73 20 63 61 d) file names ca
004430: 6E 20 62 65 20 75 73 65 64 0D 0A 09 09 45 61 63 n be used....Eac
004440: 68 20 77 69 6C 64 20 63 61 72 64 20 73 68 6F 75 h wild card shou
004450: 6C 64 20 6E 6F 74 20 6D 61 74 63 68 20 6D 6F 72 ld not match mor
004460: 65 20 74 68 61 6E 20 31 30 30 20 61 63 74 75 61 e than 100 actua
004470: 6C 20 66 69 6C 65 73 0D 0A 0D 0A 09 44 61 76 65 l files.....Dave
004480: 20 4D 6F 6F 72 65 20 2A 29 0D 0A 0D 0A 46 52 4F Moore *)....FRO
004490: 4D 20 53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 M SYSTEM IMPORT
0044A0: 41 44 44 52 45 53 53 2C 41 44 52 2C 54 53 49 5A ADDRESS,ADR,TSIZ
0044B0: 45 3B 0D 0A 46 52 4F 4D 20 43 6F 6D 6D 61 6E 64 E;..FROM Command
0044C0: 20 49 4D 50 4F 52 54 20 50 61 72 61 6D 65 74 65 IMPORT Paramete
0044D0: 72 2C 50 61 72 63 6C 61 73 73 2C 47 65 74 50 61 r,Parclass,GetPa
0044E0: 72 61 6D 73 3B 0D 0A 46 52 4F 4D 20 46 69 6C 65 rams;..FROM File
0044F0: 73 20 49 4D 50 4F 52 54 20 46 69 6C 65 4E 61 6D s IMPORT FileNam
004500: 74 6F 20 6C 69 73 74 20 69 6E 20 74 68 65 20 66 to list in the f
004510: 6F 72 6D 20 2F 73 74 72 69 6E 67 2F 20 28 77 68 orm /string/ (wh
004520: 65 72 65 0D 0A 09 09 09 2F 20 69 73 20 61 6E 79 ere...../ is any
004530: 20 6E 6F 6E 2D 61 6C 70 68 61 6E 75 6D 65 72 69 non-alphanumeri
004540: 63 20 63 68 61 72 61 63 74 65 72 29 0D 0A 09 09 c character)....
004550: 69 69 69 29 09 41 20 63 6F 6D 62 69 6E 61 74 69 iii).A combinati
004560: 6F 6E 20 6F 66 20 74 68 65 20 74 77 6F 3A 20 31 on of the two: 1
004570: 30 2F 73 74 72 69 6E 67 2F 20 74 6F 20 73 74 61 0/string/ to sta
004580: 72 74 20 73 65 61 72 63 68 0D 0A 09 09 09 61 74 rt search.....at
004590: 20 61 20 67 69 76 65 6E 20 6C 69 6E 65 2E 0D 0A a given line...
0045A0: 2A 29 0D 0A 54 59 50 45 09 50 6F 73 69 74 69 6F *)..TYPE.Positio
0045B0: 6E 3D 52 45 43 4F 52 44 0D 0A 09 09 42 6C 6F 63 n=RECORD....Bloc
0045C0: 6B 4E 75 6D 62 65 72 3A 43 41 52 44 49 4E 41 4C kNumber:CARDINAL
0045D0: 3B 09 09 28 2A 42 6C 6F 63 6B 20 69 6E 20 77 68 ;..(*Block in wh
0045E0: 69 63 68 20 6C 69 6E 65 20 73 74 61 72 74 73 2A ich line starts*
0045F0: 29 0D 0A 09 09 43 68 61 72 4F 66 66 73 65 74 3A )....CharOffset:
004600: 43 41 52 44 49 4E 41 4C 3B 09 09 28 2A 43 68 61 CARDINAL;..(*Cha
004610: 72 61 63 74 65 72 20 6F 66 66 73 65 74 20 69 6E racter offset in
004620: 20 62 75 66 66 65 72 2A 29 0D 0A 09 09 45 4E 44 buffer*)....END
004630: 3B 0D 0A 56 41 52 09 50 6F 73 54 61 62 6C 65 3A ;..VAR.PosTable:
004640: 41 52 52 41 59 5B 31 2E 2E 32 30 30 30 5D 20 4F ARRAY[1..2000] O
004650: 46 20 20 50 6F 73 69 74 69 6F 6E 3B 0D 0A 0D 0A F Position;....
004660: 09 28 2A 54 68 69 73 20 63 6F 64 65 20 63 6F 75 .(*This code cou
004670: 6C 64 20 62 65 20 6D 61 64 65 20 6D 6F 72 65 20 ld be made more
004680: 66 61 6E 63 79 20 62 79 20 68 61 76 69 6E 67 20 fancy by having
004690: 61 6E 20 69 6E 63 72 65 6D 65 6E 74 20 73 69 7A an increment siz
0046A0: 65 0D 0A 09 20 20 73 6F 20 74 68 61 74 20 61 73 e... so that as
0046B0: 20 74 68 65 20 50 6F 73 54 61 62 6C 65 20 62 65 the PosTable be
0046C0: 63 6F 6D 65 73 20 66 75 6C 6C 2C 20 65 76 65 72 comes full, ever
0046D0: 79 20 73 65 63 6F 6E 64 20 65 6E 74 72 79 20 69 y second entry i
0046E0: 73 0D 0A 09 20 20 72 65 6D 6F 76 65 64 20 61 6E s... removed an
0046F0: 64 20 74 68 65 20 69 6E 63 72 65 6D 65 6E 74 20 d the increment
004700: 65 2C 46 49 4C 45 2C 4C 6F 6F 6B 75 70 2C 43 72 e,FILE,Lookup,Cr
004710: 65 61 74 65 2C 52 65 61 64 42 6C 6F 63 6B 2C 53 eate,ReadBlock,S
004720: 65 74 42 6C 6F 63 6B 3B 0D 0A 46 52 4F 4D 20 47 etBlock;..FROM G
004730: 65 74 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 47 etFiles IMPORT G
004740: 65 74 4E 61 6D 65 73 3B 0D 0A 46 52 4F 4D 20 54 etNames;..FROM T
004750: 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 57 erminal IMPORT W
004760: 72 69 74 65 53 74 72 69 6E 67 2C 57 72 69 74 65 riteString,Write
004770: 4C 6E 2C 57 72 69 74 65 2C 52 65 61 64 2C 42 75 Ln,Write,Read,Bu
004780: 73 79 52 65 61 64 2C 43 6C 65 61 72 43 68 61 72 syRead,ClearChar
004790: 42 75 66 66 65 72 3B 0D 0A 46 52 4F 4D 20 53 6F Buffer;..FROM So
0047A0: 72 74 20 49 4D 50 4F 52 54 20 53 6F 72 74 52 65 rt IMPORT SortRe
0047B0: 63 6F 72 64 73 3B 0D 0A 46 52 4F 4D 20 49 6E 74 cords;..FROM Int
0047C0: 4C 6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E Logic IMPORT IAN
0047D0: 44 3B 0D 0A 46 52 4F 4D 20 53 6D 61 6C 6C 49 4F D;..FROM SmallIO
0047E0: 20 49 4D 50 4F 52 54 20 57 72 69 74 65 49 6E 74 IMPORT WriteInt
0047F0: 2C 57 72 69 74 65 48 65 78 2C 57 72 69 74 65 43 ,WriteHex,WriteC
004800: 61 72 64 3B 0D 0A 43 4F 4E 53 54 09 42 75 66 66 ard;..CONST.Buff
004810: 65 72 53 69 7A 65 3D 34 30 39 36 3B 09 09 28 2A erSize=4096;..(*
004820: 42 79 74 65 73 20 74 6F 20 72 65 61 64 20 69 6E Bytes to read in
004830: 20 61 20 73 69 6E 67 6C 65 20 62 6C 6F 63 6B 2A a single block*
004840: 29 0D 0A 09 42 6C 6F 63 6B 53 69 7A 65 3D 31 32 )...BlockSize=12
004850: 38 3B 09 09 09 28 2A 42 6C 6F 63 6B 20 73 69 7A 8;...(*Block siz
004860: 65 20 69 6E 20 62 79 74 65 73 2D 2D 75 73 65 64 e in bytes--used
004870: 20 66 6F 72 20 72 61 6E 64 6F 6D 0D 0A 09 09 09 for random.....
004880: 09 09 20 20 70 6F 73 69 74 69 6F 6E 69 6E 67 2A .. positioning*
004890: 29 0D 0A 0D 0A 09 43 52 3D 30 64 78 3B 0D 0A 09 ).....CR=0dx;...
0048A0: 4C 46 3D 30 61 78 3B 0D 0A 09 54 41 42 3D 30 39 LF=0ax;...TAB=09
0048B0: 78 3B 0D 0A 09 45 4F 46 3D 31 61 78 3B 0D 0A 09 x;...EOF=1ax;...
0048C0: 42 53 3D 30 38 78 3B 0D 0A 09 44 45 4C 3D 37 46 BS=08x;...DEL=7F
0048D0: 78 3B 0D 0A 0D 0A 54 59 50 45 20 09 50 46 69 6C x;....TYPE .PFil
0048E0: 65 4E 61 6D 65 3D 50 4F 49 4E 54 45 52 20 54 4F eName=POINTER TO
0048F0: 20 46 69 6C 65 4E 61 6D 65 3B 0D 0A 0D 0A 56 41 FileName;....VA
004900: 64 6F 75 62 6C 65 64 2E 20 42 75 74 20 66 65 77 doubled. But few
004910: 20 66 69 6C 65 73 20 77 69 6C 6C 20 68 61 76 65 files will have
004920: 20 6D 6F 72 65 20 0D 0A 09 20 20 74 68 61 6E 20 more ... than
004930: 32 30 30 30 20 6C 69 6E 65 73 20 69 6E 20 74 68 2000 lines in th
004940: 65 6D 2C 20 73 6F 20 69 74 20 64 69 64 6E 27 74 em, so it didn't
004950: 20 73 65 65 6D 20 77 6F 72 74 68 20 74 68 65 20 seem worth the
004960: 65 78 74 72 61 20 65 66 66 6F 72 74 2E 0D 0A 0D extra effort....
004970: 0A 09 20 20 59 6F 75 20 63 61 6E 20 63 68 61 6E .. You can chan
004980: 67 65 20 74 68 65 20 75 70 70 65 72 20 62 6F 75 ge the upper bou
004990: 6E 64 20 61 74 20 77 69 6C 6C 20 74 6F 20 63 68 nd at will to ch
0049A0: 61 6E 67 65 20 74 68 65 20 73 69 7A 65 20 6F 66 ange the size of
0049B0: 20 74 68 65 0D 0A 09 20 20 74 61 62 6C 65 2E 20 the... table.
0049C0: 20 2A 29 0D 0A 0D 0A 09 48 69 67 68 57 61 74 65 *).....HighWate
0049D0: 72 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 54 68 r:CARDINAL;.(*Th
0049E0: 65 20 74 6F 70 20 65 6E 74 72 79 20 69 6E 20 50 e top entry in P
0049F0: 6F 73 74 61 62 6C 65 20 77 68 69 63 68 20 69 73 ostable which is
004A00: 20 76 61 6C 69 64 2A 29 0D 0A 56 41 52 09 4C 69 valid*)..VAR.Li
004A10: 6E 65 4F 66 46 69 6C 65 3A 43 41 52 44 49 4E 41 neOfFile:CARDINA
004A20: 4C 3B 0D 0A 09 43 6F 6E 74 69 6E 75 61 74 69 6F L;...Continuatio
004A30: 6E 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B n:BOOLEAN=FALSE;
004A40: 09 28 2A 74 72 75 65 20 69 66 20 6C 69 6E 65 20 .(*true if line
004A50: 69 73 20 63 6F 6E 74 69 6E 75 61 74 69 6F 6E 20 is continuation
004A60: 6F 66 0D 0A 09 09 09 09 09 20 20 70 72 65 76 69 of....... previ
004A70: 6F 75 73 20 6C 69 6E 65 2A 29 0D 0A 0D 0A 50 52 ous line*)....PR
004A80: 4F 43 45 44 55 52 45 20 41 64 64 4D 61 72 6B 65 OCEDURE AddMarke
004A90: 72 3B 0D 0A 0D 0A 28 2A 09 41 64 64 20 61 20 6D r;....(*.Add a m
004AA0: 61 72 6B 65 72 20 74 6F 20 74 68 65 20 70 6F 73 arker to the pos
004AB0: 69 74 69 6F 6E 20 74 61 62 6C 65 2E 20 20 4C 69 ition table. Li
004AC0: 6E 4F 66 46 69 6C 65 20 67 69 76 65 73 20 6C 69 nOfFile gives li
004AD0: 6E 65 20 6E 75 6D 62 65 72 2A 29 0D 0A 42 45 47 ne number*)..BEG
004AE0: 49 4E 0D 0A 09 49 46 20 28 4C 69 6E 65 4F 66 46 IN...IF (LineOfF
004AF0: 69 6C 65 3C 48 49 47 48 28 50 6F 73 54 61 62 6C ile<HIGH(PosTabl
004B00: 52 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B R.reply:INTEGER;
004B10: 0D 0A 09 69 2C 6A 3A 49 4E 54 45 47 45 52 3B 0D ...i,j:INTEGER;.
004B20: 0A 09 49 6E 66 3A 46 49 4C 45 3B 09 28 2A 69 6E ..Inf:FILE;.(*in
004B30: 70 75 74 20 66 69 6C 65 2A 29 0D 0A 0D 0A 09 28 put file*).....(
004B40: 2A 09 54 68 65 20 69 6E 70 75 74 20 69 73 20 62 *.The input is b
004B50: 75 66 66 65 72 65 64 3A 0D 0A 09 09 42 75 66 66 uffered:....Buff
004B60: 65 72 20 20 20 20 20 63 6F 6E 74 61 69 6E 73 20 er contains
004B70: 74 68 65 20 74 65 78 74 20 74 6F 20 62 75 66 66 the text to buff
004B80: 65 72 0D 0A 09 09 42 6C 6F 63 6B 4E 6F 20 20 20 er....BlockNo
004B90: 20 63 6F 6E 74 61 69 6E 73 20 74 68 65 20 6E 75 contains the nu
004BA0: 6D 62 65 72 20 6F 66 20 74 68 65 20 66 69 72 73 mber of the firs
004BB0: 74 20 62 6C 6F 63 6B 20 69 6E 20 74 68 65 20 62 t block in the b
004BC0: 75 66 66 65 72 0D 0A 09 09 09 20 20 20 54 68 69 uffer..... Thi
004BD0: 73 20 76 61 72 69 61 62 6C 65 20 69 73 20 6D 6F s variable is mo
004BE0: 64 69 66 69 65 64 20 62 79 20 74 68 65 20 72 61 dified by the ra
004BF0: 6E 64 6F 6D 20 70 6F 73 69 74 69 6F 6E 69 6E 67 ndom positioning
004C00: 0D 0A 09 09 09 20 20 20 63 6F 64 65 20 74 6F 20 ..... code to
004C10: 72 65 66 6C 65 63 74 20 63 68 61 6E 67 65 73 20 reflect changes
004C20: 69 6E 20 74 68 65 20 66 69 6C 65 20 70 6F 73 69 in the file posi
004C30: 74 69 6F 6E 0D 0A 09 09 43 68 61 72 50 6F 73 20 tion....CharPos
004C40: 20 20 20 67 69 76 65 73 20 74 68 65 20 63 68 61 gives the cha
004C50: 72 61 63 74 65 72 20 6E 75 6D 62 65 72 20 6F 66 racter number of
004C60: 20 74 68 65 20 6E 65 78 74 20 63 68 61 72 61 63 the next charac
004C70: 74 65 72 20 74 6F 20 0D 0A 09 09 09 20 20 20 62 ter to ..... b
004C80: 65 20 6C 69 73 74 65 64 20 66 72 6F 6D 20 74 68 e listed from th
004C90: 65 20 62 75 66 66 65 72 0D 0A 09 09 43 68 61 72 e buffer....Char
004CA0: 43 6F 75 6E 74 20 20 67 69 76 65 73 20 6E 75 6D Count gives num
004CB0: 62 65 72 20 6F 66 20 76 61 6C 69 64 20 63 68 61 ber of valid cha
004CC0: 72 61 63 74 65 72 73 20 69 6E 20 74 68 65 20 62 racters in the b
004CD0: 75 66 66 65 72 2C 20 69 74 20 6D 61 79 20 62 65 uffer, it may be
004CE0: 0D 0A 09 09 09 20 20 20 6C 65 73 73 20 74 68 61 ..... less tha
004CF0: 6E 20 74 68 65 20 62 75 66 66 65 72 20 6C 65 6E n the buffer len
004D00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
004D10: 04 00 01 00 02 09 52 E5 04 00 41 02 00 00 00 02 ......R...A.....
004D20: 04 00 46 02 00 00 00 02 04 00 42 02 00 00 00 02 ..F.......B.....
004D30: 04 00 47 02 00 00 00 02 04 00 43 02 00 00 00 02 ..G.......C.....
004D40: 04 00 48 02 00 00 00 02 04 00 44 02 00 00 00 02 ..H.......D.....
004D50: 04 00 49 02 00 00 00 02 04 00 45 02 00 00 00 02 ..I.......E.....
004D60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004D70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004D80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004D90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004DF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
004E00: 65 29 29 20 41 4E 44 20 28 4C 69 6E 65 4F 66 46 e)) AND (LineOfF
004E10: 69 6C 65 3E 48 69 67 68 57 61 74 65 72 29 20 54 ile>HighWater) T
004E20: 48 45 4E 0D 0A 09 09 48 69 67 68 57 61 74 65 72 HEN....HighWater
004E30: 3A 3D 4C 69 6E 65 4F 66 46 69 6C 65 3B 0D 0A 09 :=LineOfFile;...
004E40: 09 57 49 54 48 20 50 6F 73 54 61 62 6C 65 5B 48 .WITH PosTable[H
004E50: 69 67 68 57 61 74 65 72 5D 20 44 4F 0D 0A 09 09 ighWater] DO....
004E60: 09 42 6C 6F 63 6B 4E 75 6D 62 65 72 3A 3D 42 6C .BlockNumber:=Bl
004E70: 6F 63 6B 4E 6F 3B 0D 0A 09 09 09 43 68 61 72 4F ockNo;.....CharO
004E80: 66 66 73 65 74 3A 3D 43 68 61 72 50 6F 73 0D 0A ffset:=CharPos..
004E90: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D ...END;....END;.
004EA0: 0A 09 45 4E 44 20 41 64 64 4D 61 72 6B 65 72 3B ..END AddMarker;
004EB0: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 ....PROCEDURE Re
004EC0: 70 6F 73 69 74 69 6F 6E 46 69 6C 65 3B 0D 0A 0D positionFile;...
004ED0: 0A 28 2A 09 52 65 70 6F 73 69 74 69 6F 6E 20 66 .(*.Reposition f
004EE0: 69 6C 65 20 74 6F 20 6C 69 6E 65 20 6E 75 6D 62 ile to line numb
004EF0: 65 72 20 67 69 76 65 6E 20 62 79 20 4C 69 6E 65 er given by Line
004F00: 4F 66 46 69 6C 65 2E 0D 0A 0D 0A 09 54 68 69 73 OfFile......This
004F10: 20 6C 69 6E 65 20 6E 75 6D 62 65 72 20 6E 65 65 line number nee
004F20: 64 20 6E 6F 74 20 62 65 20 77 69 74 68 69 6E 20 d not be within
004F30: 74 68 65 20 70 61 72 74 20 6F 66 20 74 68 65 20 the part of the
004F40: 66 69 6C 65 0D 0A 09 61 6C 72 65 61 64 79 20 65 file...already e
004F50: 78 61 6D 69 6E 65 64 20 28 6F 72 20 70 72 65 76 xamined (or prev
004F60: 69 6F 75 73 6C 79 20 73 6B 69 70 70 65 64 29 20 iously skipped)
004F70: 73 6F 20 74 68 61 74 20 69 74 20 6D 61 79 20 62 so that it may b
004F80: 65 0D 0A 09 6E 65 63 65 73 73 61 72 79 20 74 6F e...necessary to
004F90: 20 61 64 76 61 6E 63 65 20 61 73 20 66 61 72 20 advance as far
004FA0: 61 73 20 70 6F 73 73 69 62 6C 65 20 61 6E 64 20 as possible and
004FB0: 74 68 65 6E 20 73 63 61 6E 20 66 6F 72 77 61 72 then scan forwar
004FC0: 64 2E 0D 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74 d......This rout
004FD0: 69 6E 65 20 6F 6E 6C 79 20 68 61 6E 64 6C 65 73 ine only handles
004FE0: 20 70 6F 73 69 74 69 6F 6E 69 6E 67 20 62 79 20 positioning by
004FF0: 6C 69 6E 65 20 6E 75 6D 62 65 72 2D 2D 73 65 65 line number--see
005000: 3A 3D 6E 63 68 3B 0D 0A 09 09 09 45 4E 44 3B 20 :=nch;.....END;
005010: 28 2A 49 46 20 63 68 3D 42 53 20 65 74 63 2A 29 (*IF ch=BS etc*)
005020: 0D 0A 09 09 45 4E 44 3B 28 2A 4C 4F 4F 50 2A 29 ....END;(*LOOP*)
005030: 0D 0A 0D 0A 09 73 74 72 69 6E 67 5B 6C 65 6E 2B .....string[len+
005040: 31 5D 3A 3D 30 78 3B 09 28 2A 73 65 74 20 73 6F 1]:=0x;.(*set so
005050: 20 73 74 72 69 6E 67 20 63 61 6E 20 6C 61 74 65 string can late
005060: 72 20 62 65 20 70 72 69 6E 74 65 64 2A 29 0D 0A r be printed*)..
005070: 0D 0A 09 49 46 20 6C 65 6E 3C 3E 30 20 54 48 45 ...IF len<>0 THE
005080: 4E 0D 0A 09 09 4C 61 73 74 4C 65 6E 3A 3D 6C 65 N....LastLen:=le
005090: 6E 3B 0D 0A 09 09 4C 61 73 74 53 74 72 69 6E 67 n;....LastString
0050A0: 3A 3D 73 74 72 69 6E 67 3B 0D 0A 09 09 45 4E 44 :=string;....END
0050B0: 3B 0D 0A 09 49 46 20 4C 61 73 74 4C 65 6E 3D 30 ;...IF LastLen=0
0050C0: 20 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 THEN....WriteSt
0050D0: 72 69 6E 67 28 27 20 45 72 72 6F 72 20 2D 20 6E ring(' Error - n
0050E0: 6F 20 70 72 65 76 69 6F 75 73 20 73 65 61 72 63 o previous searc
0050F0: 68 20 73 74 72 69 6E 67 27 29 3B 0D 0A 09 09 57 h string');....W
005100: 72 69 74 65 4C 6E 3B 0D 0A 09 45 4C 53 45 09 28 riteLn;...ELSE.(
005110: 2A 73 74 61 72 74 20 6D 61 74 63 68 2A 29 0D 0A *start match*)..
005120: 09 09 50 61 72 74 69 61 6C 73 3A 3D 30 3B 0D 0A ..Partials:=0;..
005130: 09 09 4C 4F 4F 50 0D 0A 09 09 09 49 46 20 63 68 ..LOOP.....IF ch
005140: 3D 45 4F 46 20 54 48 45 4E 20 45 58 49 54 20 45 =EOF THEN EXIT E
005150: 4E 44 3B 0D 0A 09 09 09 57 48 49 4C 45 20 63 68 ND;.....WHILE ch
005160: 3D 43 52 20 44 4F 0D 0A 09 09 09 09 4E 65 78 74 =CR DO......Next
005170: 43 68 61 72 3B 0D 0A 09 09 09 09 49 46 20 63 68 Char;......IF ch
005180: 3D 4C 46 20 54 48 45 4E 20 4E 65 78 74 43 68 61 =LF THEN NextCha
005190: 72 20 45 4E 44 3B 0D 0A 09 09 09 09 49 4E 43 28 r END;......INC(
0051A0: 4C 69 6E 65 4F 66 46 69 6C 65 29 3B 0D 0A 09 09 LineOfFile);....
0051B0: 09 09 41 64 64 4D 61 72 6B 65 72 3B 0D 0A 09 09 ..AddMarker;....
0051C0: 09 09 45 4E 44 3B 0D 0A 09 09 09 28 2A 61 64 64 ..END;.....(*add
0051D0: 20 61 20 6E 65 77 20 70 61 72 74 69 61 6C 20 6D a new partial m
0051E0: 61 74 63 68 20 77 68 69 63 68 20 68 61 73 20 6A atch which has j
0051F0: 75 73 74 20 6D 61 74 63 68 65 64 0D 0A 09 09 09 ust matched.....
005200: 20 0D 0A 09 53 65 61 72 63 68 20 66 6F 72 20 70 ...Search for p
005210: 6F 73 69 74 69 6F 6E 69 6E 67 20 62 79 20 73 74 ositioning by st
005220: 72 69 6E 67 20 6D 61 74 63 68 2E 2A 29 0D 0A 0D ring match.*)...
005230: 0A 56 41 52 09 52 65 71 75 69 72 65 64 3A 43 41 .VAR.Required:CA
005240: 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A RDINAL;..BEGIN..
005250: 09 52 65 71 75 69 72 65 64 3A 3D 4C 69 6E 65 4F .Required:=LineO
005260: 66 46 69 6C 65 3B 0D 0A 0D 0A 28 2A 09 20 20 09 fFile;....(*. .
005270: 52 65 63 61 6C 63 75 6C 61 74 65 20 70 61 67 65 Recalculate page
005280: 20 6E 75 6D 62 65 72 20 61 73 73 75 6D 69 6E 67 number assuming
005290: 20 74 68 61 74 20 6E 6F 20 6C 69 6E 65 73 20 6F that no lines o
0052A0: 76 65 72 66 6C 6F 77 65 64 20 28 74 68 61 74 0D verflowed (that.
0052B0: 0A 09 09 69 73 2C 20 74 68 61 74 20 74 68 65 20 ...is, that the
0052C0: 6D 61 78 69 6D 75 6D 20 6E 75 6D 62 65 72 20 6F maximum number o
0052D0: 66 20 6C 69 6E 65 73 20 6F 63 63 75 72 65 64 20 f lines occured
0052E0: 6F 6E 20 65 61 63 68 20 70 61 67 65 29 2E 0D 0A on each page)...
0052F0: 0D 0A 09 20 20 09 4E 6F 74 65 20 74 68 61 74 20 ... .Note that
005300: 74 68 65 20 70 61 67 65 20 6E 75 6D 62 65 72 20 the page number
005310: 69 73 20 61 6C 77 61 79 73 20 69 6E 63 72 65 6D is always increm
005320: 65 6E 74 65 64 20 62 65 66 6F 72 65 20 69 74 20 ented before it
005330: 69 73 0D 0A 09 09 70 72 69 6E 74 65 64 20 73 6F is....printed so
005340: 20 74 68 61 74 20 74 68 69 73 20 63 6F 64 65 20 that this code
005350: 64 6F 65 73 20 6E 6F 74 20 72 65 73 75 6C 74 20 does not result
005360: 69 6E 20 70 61 67 65 20 6E 75 6D 62 65 72 73 20 in page numbers
005370: 74 68 61 74 0D 0A 09 09 61 72 65 20 6F 6E 65 20 that....are one
005380: 74 6F 6F 20 73 6D 61 6C 6C 2E 0D 0A 2A 29 0D 0A too small...*)..
005390: 0D 0A 09 50 61 67 65 4E 75 6D 62 65 72 3A 3D 28 ...PageNumber:=(
0053A0: 4C 69 6E 65 4F 66 46 69 6C 65 2D 31 29 20 44 49 LineOfFile-1) DI
0053B0: 56 20 28 50 61 67 65 4C 65 6E 2D 32 29 3B 0D 0A V (PageLen-2);..
0053C0: 09 49 46 20 4C 69 6E 65 4F 66 46 69 6C 65 3E 48 .IF LineOfFile>H
0053D0: 69 67 68 57 61 74 65 72 20 54 48 45 4E 20 4C 69 ighWater THEN Li
0053E0: 6E 65 4F 66 46 69 6C 65 3A 3D 48 69 67 68 57 61 neOfFile:=HighWa
0053F0: 74 65 72 20 45 4E 44 3B 0D 0A 09 43 6F 6E 74 69 ter END;...Conti
005400: 20 20 74 68 65 20 6E 75 6C 6C 20 73 74 72 69 6E the null strin
005410: 67 2A 29 0D 0A 0D 0A 09 09 09 49 4E 43 28 50 61 g*).......INC(Pa
005420: 72 74 69 61 6C 73 29 3B 0D 0A 09 09 09 50 61 72 rtials);.....Par
005430: 74 69 61 6C 50 6F 73 5B 50 61 72 74 69 61 6C 73 tialPos[Partials
005440: 5D 3A 3D 31 3B 0D 0A 0D 0A 09 09 09 28 2A 74 72 ]:=1;.......(*tr
005450: 79 20 74 6F 20 61 64 76 61 6E 63 65 20 61 6C 6C y to advance all
005460: 20 74 68 65 20 65 78 69 73 74 69 6E 67 20 70 61 the existing pa
005470: 72 74 69 61 6C 6C 79 20 63 6F 6D 70 6C 65 74 65 rtially complete
005480: 64 0D 0A 09 09 09 20 20 6D 61 74 63 68 65 73 2A d..... matches*
005490: 29 0D 0A 0D 0A 09 09 09 6A 3A 3D 30 3B 0D 0A 09 ).......j:=0;...
0054A0: 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 50 61 ..FOR i:=1 TO Pa
0054B0: 72 74 69 61 6C 73 20 44 4F 0D 0A 09 09 09 09 6E rtials DO......n
0054C0: 63 68 3A 3D 4C 61 73 74 53 74 72 69 6E 67 5B 50 ch:=LastString[P
0054D0: 61 72 74 69 61 6C 50 6F 73 5B 69 5D 5D 3B 0D 0A artialPos[i]];..
0054E0: 09 09 09 09 49 46 20 28 6E 63 68 3D 63 68 29 20 ....IF (nch=ch)
0054F0: 4F 52 20 28 43 41 50 28 6E 63 68 29 3D 63 68 29 OR (CAP(nch)=ch)
005500: 20 54 48 45 4E 0D 0A 0D 0A 09 09 09 09 28 2A 20 THEN........(*
005510: 74 68 65 20 74 77 6F 20 63 6F 6E 64 69 74 69 6F the two conditio
005520: 6E 73 20 69 6E 20 74 68 65 20 61 62 6F 76 65 20 ns in the above
005530: 6C 69 6E 65 0D 0A 09 09 09 09 20 20 20 70 72 6F line...... pro
005540: 76 69 64 65 20 66 6F 72 20 6C 6F 77 65 72 20 63 vide for lower c
005550: 61 73 65 20 74 6F 20 69 6E 20 74 68 65 20 6D 61 ase to in the ma
005560: 74 63 68 20 0D 0A 09 09 09 09 20 20 20 73 74 72 tch ...... str
005570: 69 6E 67 20 74 6F 20 6D 61 74 63 68 20 65 69 74 ing to match eit
005580: 68 65 72 20 63 61 73 65 2A 29 0D 0A 0D 0A 09 09 her case*)......
005590: 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 ...INC(j);......
0055A0: 09 50 61 72 74 69 61 6C 50 6F 73 5B 6A 5D 3A 3D .PartialPos[j]:=
0055B0: 50 61 72 74 69 61 6C 50 6F 73 5B 69 5D 2B 31 3B PartialPos[i]+1;
0055C0: 0D 0A 09 09 09 09 09 49 46 20 50 61 72 74 69 61 .......IF Partia
0055D0: 6C 50 6F 73 5B 6A 5D 3E 4C 61 73 74 4C 65 6E 20 lPos[j]>LastLen
0055E0: 54 48 45 4E 20 0D 0A 09 09 09 09 09 09 45 58 49 THEN ........EXI
0055F0: 54 20 20 28 2A 6D 61 74 63 68 20 66 6F 75 6E 64 T (*match found
005600: 6E 75 61 74 69 6F 6E 3A 3D 46 41 4C 53 45 3B 0D nuation:=FALSE;.
005610: 0A 0D 0A 09 49 46 20 4C 69 6E 65 4F 66 46 69 6C ....IF LineOfFil
005620: 65 3E 30 20 54 48 45 4E 0D 0A 09 20 20 20 20 57 e>0 THEN... W
005630: 49 54 48 20 50 6F 73 54 61 62 6C 65 5B 4C 69 6E ITH PosTable[Lin
005640: 65 4F 66 46 69 6C 65 5D 20 44 4F 0D 0A 09 09 49 eOfFile] DO....I
005650: 46 20 42 6C 6F 63 6B 4E 75 6D 62 65 72 3C 3E 42 F BlockNumber<>B
005660: 6C 6F 63 6B 4E 6F 20 54 48 45 4E 0D 0A 09 09 09 lockNo THEN.....
005670: 53 65 74 42 6C 6F 63 6B 28 49 6E 66 2C 42 6C 6F SetBlock(Inf,Blo
005680: 63 6B 4E 75 6D 62 65 72 29 3B 0D 0A 09 09 09 4E ckNumber);.....N
005690: 65 78 74 42 6C 6F 63 6B 4E 6F 3A 3D 42 6C 6F 63 extBlockNo:=Bloc
0056A0: 6B 4E 75 6D 62 65 72 3B 0D 0A 09 09 09 52 65 61 kNumber;.....Rea
0056B0: 64 42 75 66 66 65 72 3B 0D 0A 09 09 09 45 4E 44 dBuffer;.....END
0056C0: 3B 0D 0A 09 09 43 68 61 72 50 6F 73 3A 3D 43 68 ;....CharPos:=Ch
0056D0: 61 72 4F 66 66 73 65 74 2D 31 3B 0D 0A 09 09 4E arOffset-1;....N
0056E0: 65 78 74 43 68 61 72 3B 09 09 28 2A 72 65 2D 70 extChar;..(*re-p
0056F0: 72 69 6D 65 20 63 68 61 72 61 63 74 65 72 20 70 rime character p
005700: 6F 69 6E 74 65 72 2A 29 0D 0A 0D 0A 09 09 28 2A ointer*)......(*
005710: 09 54 68 65 20 72 65 71 75 69 72 65 64 20 63 68 .The required ch
005720: 61 72 61 63 74 65 72 20 69 73 20 6F 6E 65 20 6C aracter is one l
005730: 65 73 73 20 74 68 61 6E 20 74 68 65 20 0D 0A 09 ess than the ...
005740: 09 09 73 61 76 65 64 20 6D 61 72 6B 65 72 20 61 ..saved marker a
005750: 73 20 74 68 65 20 63 68 61 72 61 63 74 65 72 20 s the character
005760: 70 6F 69 6E 74 65 72 20 69 73 0D 0A 09 09 09 69 pointer is.....i
005770: 6E 63 72 65 6D 65 6E 74 65 64 20 61 66 74 65 72 ncremented after
005780: 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61 the first chara
005790: 63 74 65 72 20 6F 66 20 74 68 65 20 6C 69 6E 65 cter of the line
0057A0: 20 69 73 0D 0A 09 09 09 72 65 74 75 72 6E 65 64 is.....returned
0057B0: 2E 20 42 75 74 20 74 68 65 20 62 6C 6F 63 6B 20 . But the block
0057C0: 69 73 20 63 6F 72 72 65 63 74 2C 20 62 65 63 61 is correct, beca
0057D0: 75 73 65 20 74 68 65 0D 0A 09 09 09 27 70 6F 73 use the.....'pos
0057E0: 69 74 69 6F 6E 20 62 65 79 6F 6E 64 20 65 6E 64 ition beyond end
0057F0: 20 6F 66 20 62 6C 6F 63 6B 27 20 69 73 20 6E 6F of block' is no
005800: 2A 29 0D 0A 09 09 09 09 09 09 45 4E 44 3B 0D 0A *)........END;..
005810: 09 09 09 09 09 0D 0A 09 09 09 09 09 45 4E 44 3B ............END;
005820: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 50 ......END;.....P
005830: 61 72 74 69 61 6C 73 3A 3D 6A 3B 0D 0A 09 09 09 artials:=j;.....
005840: 4E 65 78 74 43 68 61 72 3B 0D 0A 09 09 09 45 4E NextChar;.....EN
005850: 44 3B 0D 0A 09 09 28 2A 65 69 74 68 65 72 20 63 D;....(*either c
005860: 68 3D 45 4F 46 20 6F 72 20 61 20 6D 61 74 63 68 h=EOF or a match
005870: 20 68 61 73 20 62 65 65 6E 20 66 6F 75 6E 64 2A has been found*
005880: 29 0D 0A 09 09 49 46 20 63 68 3D 45 4F 46 20 54 )....IF ch=EOF T
005890: 48 45 4E 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B HEN.....WriteLn;
0058A0: 0D 0A 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 .....WriteString
0058B0: 28 4C 61 73 74 53 74 72 69 6E 67 29 3B 0D 0A 09 (LastString);...
0058C0: 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
0058D0: 63 6F 75 6C 64 20 6E 6F 74 20 62 65 20 66 6F 75 could not be fou
0058E0: 6E 64 27 29 3B 0D 0A 09 09 45 4C 53 45 0D 0A 09 nd');....ELSE...
0058F0: 09 09 52 65 70 6F 73 69 74 69 6F 6E 46 69 6C 65 ..RepositionFile
005900: 3B 20 28 2A 74 6F 20 73 74 61 72 74 20 6F 66 20 ; (*to start of
005910: 63 75 72 72 65 6E 74 20 6C 69 6E 65 2A 29 0D 0A current line*)..
005920: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 ...END;....END;(
005930: 2A 73 65 61 72 63 68 20 73 74 72 69 6E 67 20 65 *search string e
005940: 6E 74 65 72 65 64 20 6F 72 20 65 78 69 73 74 65 ntered or existe
005950: 64 2A 29 0D 0A 09 45 4E 44 20 53 65 61 72 63 68 d*)...END Search
005960: 3B 0D 0A 09 0D 0A 28 2A 09 4F 70 74 69 6F 6E 20 ;.....(*.Option
005970: 66 6C 61 67 73 20 61 6E 64 20 73 63 72 65 65 6E flags and screen
005980: 20 64 69 6D 65 6E 73 69 6F 6E 73 2A 29 0D 0A 0D dimensions*)...
005990: 0A 56 41 52 09 50 61 67 65 4D 6F 64 65 3A 42 4F .VAR.PageMode:BO
0059A0: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 4C OLEAN=FALSE;...L
0059B0: 69 6E 65 57 72 61 70 3A 42 4F 4F 4C 45 41 4E 3D ineWrap:BOOLEAN=
0059C0: 46 41 4C 53 45 3B 0D 0A 09 4E 75 6D 62 65 72 4C FALSE;...NumberL
0059D0: 69 6E 65 73 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C ines:BOOLEAN=FAL
0059E0: 53 45 3B 0D 0A 09 45 78 70 61 6E 64 54 61 62 73 SE;...ExpandTabs
0059F0: 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D :BOOLEAN=FALSE;.
005A00: 74 20 63 68 65 63 6B 65 64 0D 0A 09 09 09 75 6E t checked.....un
005A10: 74 69 6C 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E til the followin
005A20: 67 20 63 68 61 72 61 63 74 65 72 20 69 73 20 73 g character is s
005A30: 6F 75 67 68 74 2A 29 0D 0A 09 09 45 4E 44 3B 28 ought*)....END;(
005A40: 2A 57 49 54 48 2A 29 0D 0A 09 20 20 20 20 45 4E *WITH*)... EN
005A50: 44 3B 28 2A 49 46 20 4C 69 6E 65 4F 66 46 69 6C D;(*IF LineOfFil
005A60: 65 3E 30 2A 29 0D 0A 09 57 48 49 4C 45 20 4C 69 e>0*)...WHILE Li
005A70: 6E 65 4F 66 46 69 6C 65 3C 52 65 71 75 69 72 65 neOfFile<Require
005A80: 64 20 44 4F 0D 0A 09 09 57 48 49 4C 45 20 63 68 d DO....WHILE ch
005A90: 3C 3E 43 52 20 44 4F 20 4E 65 78 74 43 68 61 72 <>CR DO NextChar
005AA0: 20 45 4E 44 3B 0D 0A 09 09 4E 65 78 74 43 68 61 END;....NextCha
005AB0: 72 3B 0D 0A 09 09 49 46 20 63 68 3D 4C 46 20 54 r;....IF ch=LF T
005AC0: 48 45 4E 20 4E 65 78 74 43 68 61 72 20 45 4E 44 HEN NextChar END
005AD0: 3B 0D 0A 09 09 49 4E 43 28 4C 69 6E 65 4F 66 46 ;....INC(LineOfF
005AE0: 69 6C 65 29 3B 0D 0A 09 09 41 64 64 4D 61 72 6B ile);....AddMark
005AF0: 65 72 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E er;....END;...EN
005B00: 44 20 52 65 70 6F 73 69 74 69 6F 6E 46 69 6C 65 D RepositionFile
005B10: 3B 0D 0A 0D 0A 54 59 50 45 09 4D 61 74 63 68 53 ;....TYPE.MatchS
005B20: 74 72 69 6E 67 3D 41 52 52 41 59 5B 31 2E 2E 36 tring=ARRAY[1..6
005B30: 30 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 0D 0A 56 0] OF CHAR;....V
005B40: 41 52 09 4C 61 73 74 53 74 72 69 6E 67 3A 4D 61 AR.LastString:Ma
005B50: 74 63 68 53 74 72 69 6E 67 3B 0D 0A 09 4C 61 73 tchString;...Las
005B60: 74 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3D 30 3B tLen:CARDINAL=0;
005B70: 09 28 2A 6C 65 6E 67 74 68 20 6F 66 20 6C 61 73 .(*length of las
005B80: 74 20 6D 61 74 63 68 65 64 20 73 74 72 69 6E 67 t matched string
005B90: 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 *)....PROCEDURE
005BA0: 53 65 61 72 63 68 28 44 65 6C 69 6D 69 74 65 72 Search(Delimiter
005BB0: 3A 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09 53 65 :CHAR);....(*.Se
005BC0: 61 72 63 68 20 66 6F 72 20 61 20 73 74 72 69 6E arch for a strin
005BD0: 67 20 66 72 6F 6D 20 74 68 65 20 63 75 72 72 65 g from the curre
005BE0: 6E 74 20 70 6F 73 69 74 69 6F 6E 20 69 6E 20 74 nt position in t
005BF0: 68 65 20 66 69 6C 65 0D 0A 09 0D 0A 09 54 68 69 he file......Thi
005C00: 0A 09 50 61 67 65 57 69 64 74 68 3A 43 41 52 44 ..PageWidth:CARD
005C10: 49 4E 41 4C 3D 38 30 3B 0D 0A 09 4C 69 6E 65 4E INAL=80;...LineN
005C20: 75 6D 62 65 72 3A 43 41 52 44 49 4E 41 4C 3B 0D umber:CARDINAL;.
005C30: 0A 0D 0A 0D 0A 56 41 52 09 45 6E 64 4F 66 46 69 .....VAR.EndOfFi
005C40: 6C 65 3A 42 4F 4F 4C 45 41 4E 3B 09 09 28 2A 73 le:BOOLEAN;..(*s
005C50: 65 74 20 74 72 75 65 20 61 66 74 65 72 20 2A 2A et true after **
005C60: 20 45 6E 64 20 6F 66 20 46 69 6C 65 20 2A 2A 20 End of File **
005C70: 68 61 73 0D 0A 09 09 09 09 09 20 20 62 65 65 6E has....... been
005C80: 20 6F 75 74 70 75 74 20 62 79 20 57 72 69 74 65 output by Write
005C90: 4C 69 6E 65 2A 29 0D 0A 0D 0A 28 2A 09 57 72 69 Line*)....(*.Wri
005CA0: 74 65 20 61 20 6C 69 6E 65 20 6F 66 20 6F 75 74 te a line of out
005CB0: 70 75 74 09 0D 0A 09 54 68 65 20 66 69 72 73 74 put....The first
005CC0: 20 63 68 61 72 61 63 74 65 72 20 6F 66 20 74 68 character of th
005CD0: 65 20 6C 69 6E 65 20 74 6F 20 62 65 20 77 72 69 e line to be wri
005CE0: 74 74 65 6E 20 6D 75 73 74 0D 0A 09 62 65 20 61 tten must...be a
005CF0: 76 61 69 6C 61 62 6C 65 20 69 6E 20 74 68 65 20 vailable in the
005D00: 76 61 72 69 61 62 6C 65 20 63 68 20 62 65 66 6F variable ch befo
005D10: 72 65 20 65 6E 74 72 79 20 74 6F 20 74 68 65 20 re entry to the
005D20: 72 6F 75 74 69 6E 65 0D 0A 09 2A 29 0D 0A 0D 0A routine...*)....
005D30: 50 52 4F 43 45 44 55 52 45 20 57 72 69 74 65 4C PROCEDURE WriteL
005D40: 69 6E 65 3B 0D 0A 56 41 52 09 43 68 61 72 73 57 ine;..VAR.CharsW
005D50: 72 69 74 74 65 6E 3A 43 41 52 44 49 4E 41 4C 3B ritten:CARDINAL;
005D60: 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 09 43 68 ....BEGIN.....Ch
005D70: 61 72 73 57 72 69 74 74 65 6E 3A 3D 30 3B 0D 0A arsWritten:=0;..
005D80: 0D 0A 09 49 46 20 4E 75 6D 62 65 72 4C 69 6E 65 ...IF NumberLine
005D90: 73 20 54 48 45 4E 0D 0A 09 09 49 46 20 43 6F 6E s THEN....IF Con
005DA0: 74 69 6E 75 61 74 69 6F 6E 20 54 48 45 4E 20 0D tinuation THEN .
005DB0: 0A 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 ....WriteString(
005DC0: 27 20 20 20 20 20 20 27 29 3B 0D 0A 09 09 45 4C ' ');....EL
005DD0: 53 45 09 0D 0A 09 09 09 57 72 69 74 65 49 6E 74 SE......WriteInt
005DE0: 28 4C 69 6E 65 4F 66 46 69 6C 65 2C 35 29 3B 0D (LineOfFile,5);.
005DF0: 0A 09 09 09 57 72 69 74 65 28 27 7C 27 29 3B 0D ....Write('|');.
005E00: 73 20 72 6F 75 74 69 6E 65 20 64 6F 65 73 20 61 s routine does a
005E10: 20 70 6C 61 69 6E 20 73 69 6D 70 6C 65 20 73 65 plain simple se
005E20: 61 72 63 68 2E 20 54 68 65 72 65 20 61 72 65 20 arch. There are
005E30: 6D 75 63 68 0D 0A 09 66 61 73 74 65 72 20 77 61 much...faster wa
005E40: 79 73 20 6F 66 20 64 6F 69 6E 67 20 73 65 61 72 ys of doing sear
005E50: 63 68 65 73 2C 20 62 75 74 20 74 68 65 79 20 61 ches, but they a
005E60: 72 65 20 70 72 6F 62 61 62 6C 79 0D 0A 09 67 6F re probably...go
005E70: 69 6E 67 20 74 6F 20 62 65 20 73 77 61 6D 70 65 ing to be swampe
005E80: 64 20 62 79 20 74 68 65 20 49 4F 20 74 69 6D 65 d by the IO time
005E90: 20 61 6E 79 77 61 79 2A 29 0D 0A 56 41 52 09 73 anyway*)..VAR.s
005EA0: 74 72 69 6E 67 3A 4D 61 74 63 68 53 74 72 69 6E tring:MatchStrin
005EB0: 67 3B 0D 0A 09 6C 65 6E 3A 43 41 52 44 49 4E 41 g;...len:CARDINA
005EC0: 4C 3B 0D 0A 09 6E 63 68 3A 43 48 41 52 3B 0D 0A L;...nch:CHAR;..
005ED0: 09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .i,j:CARDINAL;..
005EE0: 09 50 61 72 74 69 61 6C 50 6F 73 3A 41 52 52 41 .PartialPos:ARRA
005EF0: 59 5B 31 2E 2E 36 30 5D 20 4F 46 20 43 41 52 44 Y[1..60] OF CARD
005F00: 49 4E 41 4C 3B 0D 0A 09 50 61 72 74 69 61 6C 73 INAL;...Partials
005F10: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 :CARDINAL;..BEGI
005F20: 4E 0D 0A 09 6C 65 6E 3A 3D 30 3B 0D 0A 09 4C 4F N...len:=0;...LO
005F30: 4F 50 0D 0A 09 09 52 65 61 64 28 6E 63 68 29 3B OP....Read(nch);
005F40: 0D 0A 09 09 49 46 20 28 6E 63 68 3D 42 53 29 20 ....IF (nch=BS)
005F50: 4F 52 20 28 6E 63 68 3D 44 45 4C 29 20 54 48 45 OR (nch=DEL) THE
005F60: 4E 0D 0A 09 09 09 49 46 20 6C 65 6E 3E 30 20 54 N.....IF len>0 T
005F70: 48 45 4E 20 44 45 43 28 6C 65 6E 29 20 45 4E 44 HEN DEC(len) END
005F80: 3B 0D 0A 09 09 45 4C 53 49 46 20 28 6E 63 68 3D ;....ELSIF (nch=
005F90: 44 65 6C 69 6D 69 74 65 72 29 20 4F 52 20 28 6C Delimiter) OR (l
005FA0: 65 6E 3D 48 49 47 48 28 73 74 72 69 6E 67 29 29 en=HIGH(string))
005FB0: 0D 0A 09 09 09 4F 52 20 28 6E 63 68 3D 43 52 29 .....OR (nch=CR)
005FC0: 20 4F 52 20 28 6E 63 68 3D 4C 46 29 20 54 48 45 OR (nch=LF) THE
005FD0: 4E 0D 0A 09 09 09 45 58 49 54 0D 0A 09 09 45 4C N.....EXIT....EL
005FE0: 53 45 0D 0A 09 09 09 49 4E 43 28 6C 65 6E 29 3B SE.....INC(len);
005FF0: 0D 0A 09 09 09 73 74 72 69 6E 67 5B 6C 65 6E 5D .....string[len]
006000: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
006010: 05 00 01 00 02 09 52 E5 05 00 41 02 00 00 00 02 ......R...A.....
006020: 05 00 46 02 00 00 00 02 05 00 42 02 00 00 00 02 ..F.......B.....
006030: 05 00 47 02 00 00 00 02 05 00 43 02 00 00 00 02 ..G.......C.....
006040: 05 00 48 02 00 00 00 02 05 00 44 02 00 00 00 02 ..H.......D.....
006050: 05 00 49 02 00 00 00 02 05 00 45 02 00 00 00 02 ..I.......E.....
006060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
006070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
006080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
006090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
006100: 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B ....END;....END;
006110: 0D 0A 09 49 46 20 4E 4F 54 20 43 6F 6E 74 69 6E ...IF NOT Contin
006120: 75 61 74 69 6F 6E 20 54 48 45 4E 20 0D 0A 09 09 uation THEN ....
006130: 41 64 64 4D 61 72 6B 65 72 3B 0D 0A 09 09 49 4E AddMarker;....IN
006140: 43 28 4C 69 6E 65 4F 66 46 69 6C 65 29 3B 0D 0A C(LineOfFile);..
006150: 09 09 45 4E 44 3B 0D 0A 09 43 6F 6E 74 69 6E 75 ..END;...Continu
006160: 61 74 69 6F 6E 3A 3D 46 41 4C 53 45 3B 0D 0A 0D ation:=FALSE;...
006170: 0A 09 4C 4F 4F 50 0D 0A 0D 0A 09 09 28 2A 73 74 ..LOOP......(*st
006180: 72 69 70 20 74 6F 70 20 62 69 74 20 2D 20 73 68 rip top bit - sh
006190: 6F 75 6C 64 20 70 72 6F 62 61 62 6C 79 20 62 65 ould probably be
0061A0: 20 6F 70 74 69 6F 6E 20 63 6F 6E 74 72 6F 6C 6C option controll
0061B0: 65 64 2A 29 0D 0A 0D 0A 09 09 49 46 20 43 68 61 ed*)......IF Cha
0061C0: 72 73 57 72 69 74 74 65 6E 3E 3D 50 61 67 65 57 rsWritten>=PageW
0061D0: 69 64 74 68 20 54 48 45 4E 20 0D 0A 09 09 09 43 idth THEN .....C
0061E0: 6F 6E 74 69 6E 75 61 74 69 6F 6E 3A 3D 54 52 55 ontinuation:=TRU
0061F0: 45 3B 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B 0D E;.....WriteLn;.
006200: 0A 09 09 09 52 45 54 55 52 4E 0D 0A 09 09 09 45 ....RETURN.....E
006210: 4E 44 3B 0D 0A 0D 0A 09 09 49 46 20 63 68 3E 38 ND;......IF ch>8
006220: 30 78 20 54 48 45 4E 20 63 68 3A 3D 43 48 52 28 0x THEN ch:=CHR(
006230: 4F 52 44 28 63 68 29 2D 38 30 68 29 20 45 4E 44 ORD(ch)-80h) END
006240: 3B 0D 0A 0D 0A 09 09 43 41 53 45 20 63 68 20 4F ;......CASE ch O
006250: 46 0D 0A 09 09 45 4F 46 3A 09 28 2A 45 6E 64 20 F....EOF:.(*End
006260: 6F 66 20 46 69 6C 65 20 63 68 61 72 61 63 74 65 of File characte
006270: 72 20 66 6F 75 6E 64 2C 0D 0A 09 09 09 20 20 28 r found,..... (
006280: 65 69 74 68 65 72 20 66 72 6F 6D 20 66 69 6C 65 either from file
006290: 20 6F 72 20 67 65 6E 65 72 61 74 65 64 20 62 79 or generated by
0062A0: 20 4E 65 78 74 43 68 61 72 29 0D 0A 09 09 09 20 NextChar).....
0062B0: 20 69 66 20 6E 6F 74 68 69 6E 67 20 68 61 73 20 if nothing has
0062C0: 62 65 65 6E 20 70 72 69 6E 74 65 64 20 6F 6E 20 been printed on
0062D0: 6C 69 6E 65 2C 0D 0A 09 09 09 20 20 6A 75 73 74 line,..... just
0062E0: 20 72 65 74 75 72 6E 20 65 6E 64 20 6F 66 20 66 return end of f
0062F0: 69 6C 65 20 73 74 61 74 75 73 0D 0A 09 09 09 20 ile status.....
006300: 4F 46 20 50 61 72 61 6D 65 74 65 72 3B 0D 0A 09 OF Parameter;...
006310: 43 6F 75 6E 74 3A 49 4E 54 45 47 45 52 3B 0D 0A Count:INTEGER;..
006320: 09 4E 61 6D 65 73 3A 41 52 52 41 59 20 5B 30 2E .Names:ARRAY [0.
006330: 2E 31 30 30 5D 20 4F 46 20 46 69 6C 65 4E 61 6D .100] OF FileNam
006340: 65 3B 0D 0A 09 4E 61 6D 65 43 6F 75 6E 74 20 3A e;...NameCount :
006350: 20 49 4E 54 45 47 45 52 3B 0D 0A 09 43 6F 75 6E INTEGER;...Coun
006360: 74 65 72 20 3A 20 49 4E 54 45 47 45 52 3B 0D 0A ter : INTEGER;..
006370: 09 43 6E 74 65 72 20 3A 20 49 4E 54 45 47 45 52 .Cnter : INTEGER
006380: 3B 0D 0A 0D 0A 28 2A 09 4F 75 74 70 75 74 20 74 ;....(*.Output t
006390: 68 65 20 66 69 6C 65 20 61 6C 72 65 61 64 79 20 he file already
0063A0: 6F 70 65 6E 65 64 2A 29 0D 0A 0D 0A 09 0D 0A 50 opened*).......P
0063B0: 52 4F 43 45 44 55 52 45 20 4F 75 74 70 75 74 46 ROCEDURE OutputF
0063C0: 69 6C 65 28 4E 61 6D 65 3A 41 52 52 41 59 20 4F ile(Name:ARRAY O
0063D0: 46 20 43 48 41 52 29 3B 0D 0A 56 41 52 09 63 68 F CHAR);..VAR.ch
0063E0: 3A 43 48 41 52 3B 0D 0A 09 69 3A 43 41 52 44 49 :CHAR;...i:CARDI
0063F0: 4E 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 NAL;..PROCEDURE
006400: 50 61 67 65 48 65 61 64 65 72 3B 0D 0A 42 45 47 PageHeader;..BEG
006410: 49 4E 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 IN...WriteLn;...
006420: 57 72 69 74 65 53 74 72 69 6E 67 28 4E 61 6D 65 WriteString(Name
006430: 29 3B 0D 0A 0D 0A 09 28 2A 20 49 66 20 74 65 72 );.....(* If ter
006440: 6D 69 6E 61 6C 20 73 75 70 70 6F 72 74 73 20 74 minal supports t
006450: 61 62 73 2C 20 70 75 74 20 70 61 67 65 20 6E 75 abs, put page nu
006460: 6D 62 65 72 20 6F 6E 20 72 69 67 68 74 20 68 61 mber on right ha
006470: 6E 64 20 73 69 64 65 0D 0A 09 6F 66 20 73 63 72 nd side...of scr
006480: 65 65 6E 2C 20 6F 74 68 65 72 77 69 73 65 20 6A een, otherwise j
006490: 75 73 74 20 67 6F 20 69 6E 20 31 30 20 63 68 61 ust go in 10 cha
0064A0: 72 73 20 74 6F 20 73 61 76 65 20 74 69 6D 65 20 rs to save time
0064B0: 6F 6E 0D 0A 09 61 6C 6F 77 20 6C 69 6E 6B 73 2A on...alow links*
0064C0: 29 0D 0A 0D 0A 09 49 46 20 4E 4F 54 20 45 78 70 ).....IF NOT Exp
0064D0: 61 6E 64 54 61 62 73 20 54 48 45 4E 0D 0A 09 09 andTabs THEN....
0064E0: 46 4F 52 20 69 3A 3D 32 37 20 54 4F 20 50 61 67 FOR i:=27 TO Pag
0064F0: 65 57 69 64 74 68 20 42 59 20 38 20 44 4F 20 57 eWidth BY 8 DO W
006500: 20 49 66 20 6C 69 6E 65 20 77 61 73 20 69 6E 63 If line was inc
006510: 6F 6D 70 6C 65 74 65 2C 20 70 72 69 6E 74 20 3C omplete, print <
006520: 45 4F 46 3E 20 61 6E 64 20 0D 0A 09 09 09 20 20 EOF> and .....
006530: 72 65 74 75 72 6E 2A 29 0D 0A 0D 0A 09 09 09 49 return*).......I
006540: 46 20 28 43 68 61 72 73 57 72 69 74 74 65 6E 3D F (CharsWritten=
006550: 30 29 20 54 48 45 4E 0D 0A 09 09 09 09 57 72 69 0) THEN......Wri
006560: 74 65 53 74 72 69 6E 67 28 27 20 20 09 20 20 2A teString(' . *
006570: 2A 20 45 6E 64 20 6F 66 20 46 69 6C 65 20 2A 2A * End of File **
006580: 27 29 3B 0D 0A 09 09 09 09 45 6E 64 4F 66 46 69 ');......EndOfFi
006590: 6C 65 3A 3D 54 52 55 45 3B 0D 0A 09 09 09 45 4C le:=TRUE;.....EL
0065A0: 53 45 0D 0A 09 09 09 09 57 72 69 74 65 53 74 72 SE......WriteStr
0065B0: 69 6E 67 28 27 3C 45 4F 46 3E 27 29 3B 0D 0A 09 ing('<EOF>');...
0065C0: 09 09 09 45 4E 44 3B 0D 0A 09 09 09 52 45 54 55 ...END;.....RETU
0065D0: 52 4E 3B 0D 0A 09 09 09 7C 0D 0A 0D 0A 09 09 43 RN;.....|......C
0065E0: 52 3A 09 28 2A 43 61 72 72 69 61 67 65 20 72 65 R:.(*Carriage re
0065F0: 74 75 72 6E 20 66 6F 75 6E 64 2A 29 0D 0A 09 09 turn found*)....
006600: 09 4E 65 78 74 43 68 61 72 3B 0D 0A 09 09 09 49 .NextChar;.....I
006610: 46 20 28 63 68 3D 4C 46 29 20 54 48 45 4E 20 4E F (ch=LF) THEN N
006620: 65 78 74 43 68 61 72 20 45 4E 44 3B 0D 0A 09 09 extChar END;....
006630: 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 45 58 .WriteLn;.....EX
006640: 49 54 3B 0D 0A 09 09 09 7C 0D 0A 09 09 4C 46 3A IT;.....|....LF:
006650: 09 28 2A 6D 75 73 74 20 62 65 20 61 20 73 74 72 .(*must be a str
006660: 61 79 20 6C 69 6E 65 20 66 65 65 64 2C 20 74 72 ay line feed, tr
006670: 65 61 74 20 61 73 20 61 0D 0A 09 09 09 20 20 6C eat as a..... l
006680: 69 6E 65 20 74 65 72 6D 69 6E 61 74 6F 72 2A 29 ine terminator*)
006690: 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 .....WriteLn;...
0066A0: 09 09 45 58 49 54 3B 0D 0A 09 09 09 7C 0D 0A 09 ..EXIT;.....|...
0066B0: 09 54 41 42 3A 09 52 45 50 45 41 54 0D 0A 09 09 .TAB:.REPEAT....
0066C0: 09 09 49 4E 43 28 43 68 61 72 73 57 72 69 74 74 ..INC(CharsWritt
0066D0: 65 6E 29 3B 0D 0A 09 09 09 09 49 46 20 43 68 61 en);......IF Cha
0066E0: 72 73 57 72 69 74 74 65 6E 3E 3D 50 61 67 65 57 rsWritten>=PageW
0066F0: 69 64 74 68 20 54 48 45 4E 0D 0A 09 09 09 09 09 idth THEN.......
006700: 72 69 74 65 28 54 41 42 29 20 45 4E 44 3B 0D 0A rite(TAB) END;..
006710: 09 45 4C 53 45 0D 0A 09 09 46 4F 52 20 69 3A 3D .ELSE....FOR i:=
006720: 31 20 54 4F 20 31 30 20 44 4F 20 57 72 69 74 65 1 TO 10 DO Write
006730: 28 27 20 27 29 20 45 4E 44 3B 0D 0A 09 09 45 4E (' ') END;....EN
006740: 44 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 D;...WriteString
006750: 28 27 50 61 67 65 3A 20 27 29 3B 0D 0A 09 57 72 ('Page: ');...Wr
006760: 69 74 65 49 6E 74 28 50 61 67 65 4E 75 6D 62 65 iteInt(PageNumbe
006770: 72 2C 35 29 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B r,5);...WriteLn;
006780: 0D 0A 09 45 4E 44 20 50 61 67 65 48 65 61 64 65 ...END PageHeade
006790: 72 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 r;....PROCEDURE
0067A0: 4E 75 6D 62 65 72 28 29 3A 43 41 52 44 49 4E 41 Number():CARDINA
0067B0: 4C 3B 0D 0A 54 59 50 45 09 43 68 61 72 53 65 74 L;..TYPE.CharSet
0067C0: 3D 53 45 54 20 4F 46 20 43 48 41 52 3B 0D 0A 56 =SET OF CHAR;..V
0067D0: 41 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A AR.i:CARDINAL;..
0067E0: 42 45 47 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 BEGIN...i:=0;...
0067F0: 57 48 49 4C 45 20 63 68 20 49 4E 20 43 68 61 72 WHILE ch IN Char
006800: 53 65 74 7B 27 30 27 2E 2E 27 39 27 2C 42 53 2C Set{'0'..'9',BS,
006810: 44 45 4C 7D 20 44 4F 0D 0A 09 09 49 46 20 28 63 DEL} DO....IF (c
006820: 68 3D 42 53 29 20 4F 52 20 28 63 68 3D 44 45 4C h=BS) OR (ch=DEL
006830: 29 20 54 48 45 4E 20 69 3A 3D 69 20 44 49 56 20 ) THEN i:=i DIV
006840: 31 30 0D 0A 09 09 45 4C 53 45 0D 0A 09 09 09 69 10....ELSE.....i
006850: 3A 3D 31 30 2A 69 2B 28 4F 52 44 28 63 68 29 2D :=10*i+(ORD(ch)-
006860: 4F 52 44 28 27 30 27 29 29 3B 0D 0A 09 09 09 45 ORD('0'));.....E
006870: 4E 44 3B 0D 0A 09 09 52 65 61 64 28 63 68 29 3B ND;....Read(ch);
006880: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 ....END;...RETUR
006890: 4E 20 69 0D 0A 09 45 4E 44 20 4E 75 6D 62 65 72 N i...END Number
0068A0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 72 69 ;..PROCEDURE Pri
0068B0: 6E 74 48 65 6C 70 3B 0D 0A 42 45 47 49 4E 0D 0A ntHelp;..BEGIN..
0068C0: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 45 .WriteString(' E
0068D0: 78 61 6D 70 6C 65 73 20 6F 66 20 70 6F 73 73 69 xamples of possi
0068E0: 62 6C 65 20 72 65 73 70 6F 6E 73 65 73 3A 27 29 ble responses:')
0068F0: 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 ;WriteLn;...Writ
006900: 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 09 09 43 WriteLn;.......C
006910: 6F 6E 74 69 6E 75 61 74 69 6F 6E 3A 3D 54 52 55 ontinuation:=TRU
006920: 45 3B 0D 0A 09 09 09 09 09 52 45 54 55 52 4E 09 E;.......RETURN.
006930: 28 2A 6E 6F 74 65 20 74 68 61 74 20 74 61 62 20 (*note that tab
006940: 67 65 74 73 20 70 72 6F 63 65 73 73 65 64 20 61 gets processed a
006950: 67 61 69 6E 0D 0A 09 09 09 09 09 09 20 20 61 74 gain........ at
006960: 20 73 74 61 72 74 20 6F 66 20 6E 65 78 74 20 6C start of next l
006970: 69 6E 65 2A 29 0D 0A 09 09 09 09 09 45 4E 44 3B ine*).......END;
006980: 0D 0A 09 09 09 09 49 46 20 45 78 70 61 6E 64 54 ......IF ExpandT
006990: 61 62 73 20 4F 52 20 4E 75 6D 62 65 72 4C 69 6E abs OR NumberLin
0069A0: 65 73 20 54 48 45 4E 20 57 72 69 74 65 28 27 20 es THEN Write('
0069B0: 27 29 20 45 4E 44 3B 0D 0A 09 09 09 09 55 4E 54 ') END;......UNT
0069C0: 49 4C 20 49 41 4E 44 28 43 68 61 72 73 57 72 69 IL IAND(CharsWri
0069D0: 74 74 65 6E 2C 37 29 3D 37 3B 0D 0A 09 09 09 49 tten,7)=7;.....I
0069E0: 46 20 4E 4F 54 20 28 45 78 70 61 6E 64 54 61 62 F NOT (ExpandTab
0069F0: 73 20 4F 52 20 4E 75 6D 62 65 72 4C 69 6E 65 73 s OR NumberLines
006A00: 29 20 54 48 45 4E 20 57 72 69 74 65 28 54 41 42 ) THEN Write(TAB
006A10: 29 20 45 4E 44 3B 0D 0A 09 09 09 7C 0D 0A 09 09 ) END;.....|....
006A20: 30 78 2E 2E 31 66 78 3A 09 28 2A 6E 6F 6E 2D 70 0x..1fx:.(*non-p
006A30: 72 69 6E 74 69 6E 67 20 63 68 61 72 61 63 74 65 rinting characte
006A40: 72 73 2E 20 54 68 69 73 20 69 73 20 63 68 65 61 rs. This is chea
006A50: 74 69 6E 67 0D 0A 09 09 09 09 20 20 73 6C 69 67 ting...... slig
006A60: 68 74 6C 79 20 2D 20 73 68 6F 75 6C 64 20 65 78 htly - should ex
006A70: 63 6C 75 64 65 20 43 52 20 4C 46 20 61 6E 64 20 clude CR LF and
006A80: 54 41 42 2A 29 0D 0A 09 09 09 49 46 20 43 68 61 TAB*).....IF Cha
006A90: 72 73 57 72 69 74 74 65 6E 3E 3D 28 50 61 67 65 rsWritten>=(Page
006AA0: 57 69 64 74 68 2D 34 29 20 54 48 45 4E 0D 0A 09 Width-4) THEN...
006AB0: 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 ...WriteLn;.....
006AC0: 09 43 6F 6E 74 69 6E 75 61 74 69 6F 6E 3A 3D 54 .Continuation:=T
006AD0: 52 55 45 3B 0D 0A 09 09 09 09 52 45 54 55 52 4E RUE;......RETURN
006AE0: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 57 ......END;.....W
006AF0: 72 69 74 65 28 27 3C 27 29 3B 0D 0A 09 09 09 57 rite('<');.....W
006B00: 65 53 74 72 69 6E 67 28 27 20 3F 20 20 20 20 20 eString(' ?
006B10: 20 20 20 20 20 20 2D 20 54 68 69 73 20 6D 65 73 - This mes
006B20: 73 61 67 65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D sage');WriteLn;.
006B30: 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
006B40: 32 32 37 20 20 20 20 20 20 20 20 20 2D 20 20 6C 227 - l
006B50: 69 73 74 20 66 72 6F 6D 20 6C 69 6E 65 20 32 32 ist from line 22
006B60: 37 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 7');WriteLn;...W
006B70: 72 69 74 65 53 74 72 69 6E 67 28 27 20 2B 32 30 riteString(' +20
006B80: 20 6F 72 20 2D 32 30 20 20 2D 20 67 6F 20 66 6F or -20 - go fo
006B90: 72 77 61 72 64 20 28 62 61 63 6B 29 20 32 30 20 rward (back) 20
006BA0: 6C 69 6E 65 73 27 29 3B 0D 0A 09 57 72 69 74 65 lines');...Write
006BB0: 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E Ln;...WriteStrin
006BC0: 67 28 27 20 71 20 28 6F 72 20 51 29 20 20 20 20 g(' q (or Q)
006BD0: 2D 20 67 6F 20 74 6F 20 6E 65 78 74 20 66 69 6C - go to next fil
006BE0: 65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 e');WriteLn;...W
006BF0: 72 69 74 65 53 74 72 69 6E 67 28 27 20 43 6F 6E riteString(' Con
006C00: 74 72 6F 6C 20 43 20 20 20 20 20 20 20 2D 20 61 trol C - a
006C10: 62 6F 72 74 20 72 75 6E 27 29 3B 57 72 69 74 65 bort run');Write
006C20: 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E Ln;...WriteStrin
006C30: 67 28 27 2F 73 74 72 69 6E 67 2F 20 20 20 20 20 g('/string/
006C40: 2D 20 6C 69 73 74 20 66 72 6F 6D 20 6E 65 78 74 - list from next
006C50: 20 6F 63 63 75 72 65 6E 63 65 20 6F 66 20 73 74 occurence of st
006C60: 72 69 6E 67 27 29 3B 0D 0A 09 57 72 69 74 65 4C ring');...WriteL
006C70: 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 n;...WriteString
006C80: 28 27 31 30 30 2F 73 74 72 69 6E 67 2F 20 20 2D ('100/string/ -
006C90: 20 6C 69 73 74 20 66 72 6F 6D 20 66 69 72 73 74 list from first
006CA0: 20 6F 63 63 75 72 65 6E 63 65 20 61 66 74 65 72 occurence after
006CB0: 20 6C 69 6E 65 20 31 30 30 27 29 3B 0D 0A 09 57 line 100');...W
006CC0: 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 riteLn;...WriteS
006CD0: 74 72 69 6E 67 28 27 50 32 30 20 20 20 20 20 20 tring('P20
006CE0: 20 20 20 20 2D 20 74 6F 67 67 6C 65 20 70 61 67 - toggle pag
006CF0: 65 20 6D 6F 64 65 20 73 65 74 20 32 30 20 6C 69 e mode set 20 li
006D00: 72 69 74 65 48 65 78 28 4F 52 44 28 63 68 29 2C riteHex(ORD(ch),
006D10: 32 29 3B 0D 0A 09 09 09 57 72 69 74 65 28 27 3E 2);.....Write('>
006D20: 27 29 3B 0D 0A 09 09 09 43 68 61 72 73 57 72 69 ');.....CharsWri
006D30: 74 74 65 6E 3A 3D 43 68 61 72 73 57 72 69 74 74 tten:=CharsWritt
006D40: 65 6E 2B 34 3B 0D 0A 09 09 09 7C 0D 0A 09 09 45 en+4;.....|....E
006D50: 4C 53 45 09 57 72 69 74 65 28 63 68 29 3B 0D 0A LSE.Write(ch);..
006D60: 09 09 09 49 4E 43 28 43 68 61 72 73 57 72 69 74 ...INC(CharsWrit
006D70: 74 65 6E 29 3B 0D 0A 09 09 09 45 4E 44 3B 28 2A ten);.....END;(*
006D80: 43 41 53 45 2A 29 0D 0A 09 09 4E 65 78 74 43 68 CASE*)....NextCh
006D90: 61 72 3B 0D 0A 09 09 45 4E 44 3B 28 2A 4C 4F 4F ar;....END;(*LOO
006DA0: 50 2A 29 0D 0A 09 45 4E 44 20 57 72 69 74 65 4C P*)...END WriteL
006DB0: 69 6E 65 3B 09 09 0D 0A 0D 0A 28 2A 09 54 68 65 ine;......(*.The
006DC0: 20 6E 65 78 74 20 72 6F 75 74 69 6E 65 20 69 73 next routine is
006DD0: 20 75 73 65 64 20 62 79 20 74 68 65 20 73 6F 72 used by the sor
006DE0: 74 20 6D 6F 64 75 6C 65 0D 0A 09 74 6F 20 70 65 t module...to pe
006DF0: 72 66 6F 72 6D 20 6B 65 79 20 63 6F 6D 70 61 72 rform key compar
006E00: 69 73 6F 6E 73 2A 29 0D 0A 0D 0A 50 52 4F 43 45 isons*)....PROCE
006E10: 44 55 52 45 20 43 6F 6D 70 61 72 28 61 2C 62 3A DURE Compar(a,b:
006E20: 41 44 44 52 45 53 53 29 3A 42 4F 4F 4C 45 41 4E ADDRESS):BOOLEAN
006E30: 3B 0D 0A 56 41 52 09 70 2C 71 3A 50 46 69 6C 65 ;..VAR.p,q:PFile
006E40: 4E 61 6D 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 70 Name;..BEGIN...p
006E50: 3A 3D 50 46 69 6C 65 4E 61 6D 65 28 61 29 3B 0D :=PFileName(a);.
006E60: 0A 09 71 3A 3D 50 46 69 6C 65 4E 61 6D 65 28 62 ..q:=PFileName(b
006E70: 29 3B 0D 0A 09 52 45 54 55 52 4E 20 70 5E 3E 71 );...RETURN p^>q
006E80: 5E 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 72 3B 0D ^...END Compar;.
006E90: 0A 50 52 4F 43 45 44 55 52 45 20 55 73 61 67 65 .PROCEDURE Usage
006EA0: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 ;..BEGIN...Write
006EB0: 53 74 72 69 6E 67 28 27 55 73 61 67 65 20 69 73 String('Usage is
006EC0: 3A 20 20 20 43 41 54 20 66 69 6C 65 2C 66 69 6C : CAT file,fil
006ED0: 65 2C 2E 2E 2E 27 29 3B 57 72 69 74 65 4C 6E 3B e,...');WriteLn;
006EE0: 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
006EF0: 20 20 20 20 20 20 6F 72 20 20 20 20 43 41 54 20 or CAT
006F00: 6E 65 73 20 70 65 72 20 70 61 67 65 27 29 3B 0D nes per page');.
006F10: 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 ..WriteLn;...Wri
006F20: 74 65 53 74 72 69 6E 67 28 27 57 36 34 20 20 20 teString('W64
006F30: 20 20 20 20 20 20 20 2D 20 74 6F 67 67 6C 65 20 - toggle
006F40: 6C 69 6E 65 20 77 72 61 70 2C 20 73 65 74 20 36 line wrap, set 6
006F50: 34 20 63 6F 6C 75 6D 6E 73 20 70 65 72 20 6C 69 4 columns per li
006F60: 6E 65 27 29 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B ne');...WriteLn;
006F70: 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
006F80: 49 20 20 20 20 20 20 20 20 20 20 20 20 2D 20 74 I - t
006F90: 6F 67 67 6C 65 20 74 61 62 73 20 65 78 70 61 6E oggle tabs expan
006FA0: 73 69 6F 6E 27 29 3B 0D 0A 09 57 72 69 74 65 4C sion');...WriteL
006FB0: 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 n;...WriteString
006FC0: 28 27 4E 20 20 20 20 20 20 20 20 20 20 20 20 2D ('N -
006FD0: 20 74 6F 67 67 6C 65 20 6C 69 6E 65 20 6E 75 6D toggle line num
006FE0: 62 65 72 69 6E 67 27 29 3B 57 72 69 74 65 4C 6E bering');WriteLn
006FF0: 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 ;...WriteString(
007000: 27 20 43 6F 6D 6D 61 6E 64 3A 27 29 3B 0D 0A 09 ' Command:');...
007010: 45 4E 44 20 50 72 69 6E 74 48 65 6C 70 3B 09 0D END PrintHelp;..
007020: 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 4E 65 77 ...PROCEDURE New
007030: 56 61 6C 75 65 28 56 41 52 20 64 65 66 61 75 6C Value(VAR defaul
007040: 74 3A 43 41 52 44 49 4E 41 4C 3B 6C 69 6D 69 74 t:CARDINAL;limit
007050: 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 56 41 52 :CARDINAL);..VAR
007060: 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 .i:CARDINAL;..BE
007070: 47 49 4E 0D 0A 09 52 65 61 64 28 63 68 29 3B 0D GIN...Read(ch);.
007080: 0A 09 69 3A 3D 4E 75 6D 62 65 72 28 29 3B 0D 0A ..i:=Number();..
007090: 09 49 46 20 69 3E 3D 6C 69 6D 69 74 20 54 48 45 .IF i>=limit THE
0070A0: 4E 20 64 65 66 61 75 6C 74 3A 3D 69 20 45 4E 44 N default:=i END
0070B0: 0D 0A 09 45 4E 44 20 4E 65 77 56 61 6C 75 65 3B ...END NewValue;
0070C0: 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 45 6E 64 .....BEGIN...End
0070D0: 4F 66 46 69 6C 65 3A 3D 46 41 4C 53 45 3B 0D 0A OfFile:=FALSE;..
0070E0: 09 4E 65 78 74 42 6C 6F 63 6B 4E 6F 3A 3D 30 3B .NextBlockNo:=0;
0070F0: 0D 0A 09 4C 69 6E 65 4E 75 6D 62 65 72 3A 3D 32 ...LineNumber:=2
007100: 66 69 6C 65 2C 66 69 6C 65 2C 2E 2E 2E 5B 6F 70 file,file,...[op
007110: 74 69 6F 6E 73 27 29 3B 57 72 69 74 65 4C 6E 3B tions');WriteLn;
007120: 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
007130: 20 77 68 65 72 65 20 66 69 6C 65 20 69 73 20 61 where file is a
007140: 20 66 69 6C 65 20 74 6F 20 6C 69 73 74 20 6F 72 file to list or
007150: 20 61 20 77 69 6C 64 20 63 61 72 64 20 66 6F 72 a wild card for
007160: 20 66 69 6C 65 73 20 74 6F 20 6C 69 73 74 27 29 files to list')
007170: 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 ;...WriteLn;...W
007180: 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 riteLn;...WriteS
007190: 74 72 69 6E 67 28 27 20 54 68 65 20 6F 70 74 69 tring(' The opti
0071A0: 6F 6E 73 20 61 72 65 3A 27 29 3B 57 72 69 74 65 ons are:');Write
0071B0: 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E Ln;...WriteStrin
0071C0: 67 28 27 09 09 50 20 2D 20 6F 75 74 70 75 74 20 g('..P - output
0071D0: 69 6E 20 70 61 67 65 20 6D 6F 64 65 27 29 3B 57 in page mode');W
0071E0: 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 riteLn;...WriteS
0071F0: 74 72 69 6E 67 28 27 09 09 4E 20 2D 20 6E 75 6D tring('..N - num
007200: 62 65 72 20 6C 69 6E 65 73 20 6F 6E 20 6F 75 74 ber lines on out
007210: 70 75 74 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A put');WriteLn;..
007220: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 .WriteString('..
007230: 57 20 2D 20 77 72 61 70 20 6C 6F 6E 67 20 6C 69 W - wrap long li
007240: 6E 65 73 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A nes');WriteLn;..
007250: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 .WriteString('..
007260: 49 20 2D 20 65 78 70 61 6E 64 20 74 61 62 73 20 I - expand tabs
007270: 74 6F 20 73 70 61 63 65 73 27 29 3B 57 72 69 74 to spaces');Writ
007280: 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D eLn;...WriteLn;.
007290: 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
0072A0: 66 6F 72 20 65 78 61 6D 70 6C 65 3A 20 20 43 41 for example: CA
0072B0: 54 20 2A 2E 44 45 46 5B 50 31 36 57 32 30 4E 27 T *.DEF[P16W20N'
0072C0: 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 48 41 4C );WriteLn;...HAL
0072D0: 54 0D 0A 09 45 4E 44 20 55 73 61 67 65 3B 0D 0A T...END Usage;..
0072E0: 0D 0A 0D 0A 0D 0A 0D 0A 56 41 52 09 50 61 72 61 ........VAR.Para
0072F0: 6D 3A 41 52 52 41 59 20 5B 30 2E 2E 31 30 5D 20 m:ARRAY [0..10]
007300: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
007310: 06 00 01 00 02 09 52 E5 06 00 41 02 00 00 00 02 ......R...A.....
007320: 06 00 46 02 00 00 00 02 06 00 42 02 00 00 00 02 ..F.......B.....
007330: 06 00 47 02 00 00 00 02 06 00 43 02 00 00 00 02 ..G.......C.....
007340: 06 00 48 02 00 00 00 02 06 00 44 02 00 00 00 02 ..H.......D.....
007350: 06 00 49 02 00 00 00 02 06 00 45 02 00 00 00 02 ..I.......E.....
007360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
007370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
007380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
007390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0073F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
007400: 3B 0D 0A 09 4C 69 6E 65 4F 66 46 69 6C 65 3A 3D ;...LineOfFile:=
007410: 31 3B 0D 0A 09 50 61 67 65 4E 75 6D 62 65 72 3A 1;...PageNumber:
007420: 3D 31 3B 0D 0A 09 43 68 61 72 50 6F 73 3A 3D 31 =1;...CharPos:=1
007430: 3B 0D 0A 09 43 68 61 72 43 6F 75 6E 74 3A 3D 30 ;...CharCount:=0
007440: 3B 0D 0A 09 48 69 67 68 57 61 74 65 72 3A 3D 30 ;...HighWater:=0
007450: 3B 0D 0A 09 4E 65 78 74 43 68 61 72 3B 09 28 2A ;...NextChar;.(*
007460: 70 72 69 6D 65 20 6C 6F 6F 6B 2D 61 68 65 61 64 prime look-ahead
007470: 20 63 68 61 72 61 63 74 65 72 2A 29 0D 0A 09 57 character*)...W
007480: 72 69 74 65 4C 6E 3B 0D 0A 09 48 69 67 68 57 61 riteLn;...HighWa
007490: 74 65 72 3A 3D 30 3B 0D 0A 09 49 46 20 50 61 67 ter:=0;...IF Pag
0074A0: 65 4D 6F 64 65 20 54 48 45 4E 0D 0A 09 09 50 61 eMode THEN....Pa
0074B0: 67 65 48 65 61 64 65 72 3B 0D 0A 09 09 45 4E 44 geHeader;....END
0074C0: 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 49 46 20 20 ;...LOOP....IF
0074D0: 45 6E 64 4F 66 46 69 6C 65 20 54 48 45 4E 20 45 EndOfFile THEN E
0074E0: 58 49 54 20 45 4E 44 3B 0D 0A 09 09 57 72 69 74 XIT END;....Writ
0074F0: 65 4C 69 6E 65 3B 0D 0A 09 09 49 4E 43 28 4C 69 eLine;....INC(Li
007500: 6E 65 4E 75 6D 62 65 72 29 3B 0D 0A 0D 0A 09 09 neNumber);......
007510: 28 2A 20 63 68 65 63 6B 20 66 6F 72 20 61 6E 79 (* check for any
007520: 74 68 69 6E 67 20 74 79 70 65 73 20 61 74 20 63 thing types at c
007530: 6F 6E 73 6F 6C 65 0D 0A 09 09 20 20 20 69 66 20 onsole.... if
007540: 63 74 72 6C 20 63 2C 20 74 68 65 20 61 62 6F 72 ctrl c, the abor
007550: 74 2C 20 69 66 20 71 20 6F 72 20 51 2A 29 0D 0A t, if q or Q*)..
007560: 0D 0A 09 09 42 75 73 79 52 65 61 64 28 63 68 29 ....BusyRead(ch)
007570: 3B 0D 0A 09 09 49 46 20 28 50 61 67 65 4D 6F 64 ;....IF (PageMod
007580: 65 20 41 4E 44 20 28 28 4C 69 6E 65 4E 75 6D 62 e AND ((LineNumb
007590: 65 72 3E 3D 50 61 67 65 4C 65 6E 29 20 4F 52 20 er>=PageLen) OR
0075A0: 45 6E 64 4F 66 46 69 6C 65 29 29 20 0D 0A 09 09 EndOfFile)) ....
0075B0: 20 20 20 4F 52 20 28 63 68 3C 3E 30 78 29 20 54 OR (ch<>0x) T
0075C0: 48 45 4E 0D 0A 09 09 09 49 46 20 45 6E 64 4F 66 HEN.....IF EndOf
0075D0: 46 69 6C 65 20 54 48 45 4E 20 44 45 43 28 43 68 File THEN DEC(Ch
0075E0: 61 72 50 6F 73 29 20 45 4E 44 3B 0D 0A 09 09 09 arPos) END;.....
0075F0: 45 6E 64 4F 66 46 69 6C 65 3A 3D 46 41 4C 53 45 EndOfFile:=FALSE
007600: 4C 69 6E 65 73 3A 3D 54 52 55 45 3B 0D 0A 09 09 Lines:=TRUE;....
007610: 09 09 20 20 20 20 49 4E 43 28 69 29 7C 0D 0A 09 .. INC(i)|...
007620: 09 09 09 27 50 27 3A 50 61 67 65 4D 6F 64 65 3A ...'P':PageMode:
007630: 3D 54 52 55 45 3B 0D 0A 09 09 09 09 20 20 20 20 =TRUE;......
007640: 49 4E 43 28 69 29 3B 0D 0A 09 09 09 09 20 20 20 INC(i);......
007650: 20 50 61 67 65 4C 65 6E 3A 3D 47 65 74 4E 75 6D PageLen:=GetNum
007660: 28 43 68 61 72 73 2C 69 2C 4F 52 44 28 4C 65 6E (Chars,i,ORD(Len
007670: 67 74 68 29 29 3B 0D 0A 09 09 09 09 20 20 20 20 gth));......
007680: 49 46 20 50 61 67 65 4C 65 6E 3D 30 20 54 48 45 IF PageLen=0 THE
007690: 4E 20 50 61 67 65 4C 65 6E 3A 3D 32 34 20 45 4E N PageLen:=24 EN
0076A0: 44 3B 0D 0A 0D 0A 09 09 09 09 09 28 2A 43 68 65 D;.........(*Che
0076B0: 63 6B 20 70 61 67 65 20 6C 65 6E 67 74 68 20 69 ck page length i
0076C0: 73 20 72 65 61 73 6F 6E 61 62 6C 65 2A 29 0D 0A s reasonable*)..
0076D0: 0D 0A 09 09 09 09 20 20 20 20 49 46 20 50 61 67 ...... IF Pag
0076E0: 65 4C 65 6E 3C 31 30 20 54 48 45 4E 0D 0A 09 09 eLen<10 THEN....
0076F0: 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 ...WriteLn;.....
007700: 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
007710: 2A 2A 2A 20 50 61 67 65 20 6C 65 6E 67 74 68 20 *** Page length
007720: 74 6F 6F 20 73 68 6F 72 74 20 2A 2A 2A 27 29 3B too short ***');
007730: 0D 0A 09 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D .......WriteLn;.
007740: 0A 09 09 09 09 09 55 73 61 67 65 0D 0A 09 09 09 ......Usage.....
007750: 09 09 45 4E 44 0D 0A 09 09 09 09 20 20 20 20 7C ..END...... |
007760: 0D 0A 09 09 09 09 45 4C 53 45 0D 0A 09 09 09 09 ......ELSE......
007770: 20 20 20 20 55 73 61 67 65 0D 0A 09 09 09 09 20 Usage......
007780: 20 20 20 45 4E 44 3B 28 2A 43 41 53 45 2A 29 0D END;(*CASE*).
007790: 0A 09 09 09 09 45 4E 44 3B 28 2A 57 48 49 4C 45 .....END;(*WHILE
0077A0: 2A 29 0D 0A 09 09 09 45 4E 44 3B 20 28 2A 57 49 *).....END; (*WI
0077B0: 54 48 2A 29 0D 0A 09 09 44 45 43 28 43 6F 75 6E TH*)....DEC(Coun
0077C0: 74 29 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 49 46 t);....END; (*IF
0077D0: 20 6F 70 74 69 6F 6E 2A 29 0D 0A 0D 0A 09 49 46 option*).....IF
0077E0: 20 43 6F 75 6E 74 3D 30 20 54 48 45 4E 20 55 73 Count=0 THEN Us
0077F0: 61 67 65 20 45 4E 44 3B 0D 0A 09 49 46 20 4E 75 age END;...IF Nu
007800: 3B 0D 0A 09 09 09 50 61 67 65 4D 6F 64 65 3A 3D ;.....PageMode:=
007810: 54 52 55 45 3B 0D 0A 09 09 09 57 72 69 74 65 53 TRUE;.....WriteS
007820: 74 72 69 6E 67 28 27 20 43 6F 6D 6D 61 6E 64 20 tring(' Command
007830: 3A 27 29 3B 0D 0A 09 09 09 49 46 20 63 68 3D 30 :');.....IF ch=0
007840: 78 20 54 48 45 4E 20 52 65 61 64 28 63 68 29 20 x THEN Read(ch)
007850: 0D 0A 09 09 09 45 4C 53 45 20 09 57 72 69 74 65 .....ELSE .Write
007860: 28 63 68 29 3B 0D 0A 09 09 09 09 43 6C 65 61 72 (ch);......Clear
007870: 43 68 61 72 42 75 66 66 65 72 0D 0A 09 09 09 09 CharBuffer......
007880: 45 4E 44 3B 0D 0A 09 09 09 4C 4F 4F 50 0D 0A 09 END;.....LOOP...
007890: 09 09 20 20 20 20 43 41 53 45 20 43 41 50 28 63 .. CASE CAP(c
0078A0: 68 29 20 4F 46 0D 0A 09 09 09 09 27 50 27 3A 50 h) OF......'P':P
0078B0: 61 67 65 4D 6F 64 65 3A 3D 4E 4F 54 20 50 61 67 ageMode:=NOT Pag
0078C0: 65 4D 6F 64 65 3B 0D 0A 09 09 09 09 20 20 20 20 eMode;......
0078D0: 4E 65 77 56 61 6C 75 65 28 50 61 67 65 4C 65 6E NewValue(PageLen
0078E0: 2C 31 32 29 7C 0D 0A 09 09 09 09 27 4E 27 3A 4E ,12)|......'N':N
0078F0: 75 6D 62 65 72 4C 69 6E 65 73 3A 3D 4E 4F 54 20 umberLines:=NOT
007900: 4E 75 6D 62 65 72 4C 69 6E 65 73 3B 52 65 61 64 NumberLines;Read
007910: 28 63 68 29 7C 0D 0A 09 09 09 09 27 49 27 3A 45 (ch)|......'I':E
007920: 78 70 61 6E 64 54 61 62 73 3A 3D 4E 4F 54 20 45 xpandTabs:=NOT E
007930: 78 70 61 6E 64 54 61 62 73 3B 52 65 61 64 28 63 xpandTabs;Read(c
007940: 68 29 7C 0D 0A 09 09 09 09 27 57 27 3A 4C 69 6E h)|......'W':Lin
007950: 65 57 72 61 70 3A 3D 4E 4F 54 20 4C 69 6E 65 57 eWrap:=NOT LineW
007960: 72 61 70 3B 0D 0A 09 09 09 09 20 20 20 20 4E 65 rap;...... Ne
007970: 77 56 61 6C 75 65 28 50 61 67 65 57 69 64 74 68 wValue(PageWidth
007980: 2C 34 30 29 7C 0D 0A 09 09 09 09 27 3F 27 3A 50 ,40)|......'?':P
007990: 72 69 6E 74 48 65 6C 70 3B 52 65 61 64 28 63 68 rintHelp;Read(ch
0079A0: 29 7C 0D 0A 09 09 09 09 27 2B 27 3A 52 65 61 64 )|......'+':Read
0079B0: 28 63 68 29 3B 0D 0A 09 09 09 20 09 20 20 20 20 (ch);..... .
0079C0: 4C 69 6E 65 4F 66 46 69 6C 65 3A 3D 4C 69 6E 65 LineOfFile:=Line
0079D0: 4F 66 46 69 6C 65 2B 4E 75 6D 62 65 72 28 29 0D OfFile+Number().
0079E0: 0A 09 09 09 09 20 20 20 20 52 65 70 6F 73 69 74 ..... Reposit
0079F0: 69 6F 6E 46 69 6C 65 7C 0D 0A 09 09 09 09 27 2D ionFile|......'-
007A00: 6D 62 65 72 4C 69 6E 65 73 20 54 48 45 4E 20 50 mberLines THEN P
007A10: 61 67 65 57 69 64 74 68 3A 3D 50 61 67 65 57 69 ageWidth:=PageWi
007A20: 64 74 68 2D 36 20 45 4E 44 3B 0D 0A 0D 0A 09 46 dth-6 END;.....F
007A30: 4F 52 20 69 3A 3D 30 20 54 4F 20 43 41 52 44 49 OR i:=0 TO CARDI
007A40: 4E 41 4C 28 43 6F 75 6E 74 2D 31 29 20 44 4F 0D NAL(Count-1) DO.
007A50: 0A 09 09 47 65 74 4E 61 6D 65 73 28 50 61 72 61 ...GetNames(Para
007A60: 6D 5B 69 5D 5E 2E 43 68 61 72 73 2C 4E 61 6D 65 m[i]^.Chars,Name
007A70: 73 2C 4E 61 6D 65 43 6F 75 6E 74 29 3B 0D 0A 09 s,NameCount);...
007A80: 09 49 46 20 4E 61 6D 65 43 6F 75 6E 74 3E 31 20 .IF NameCount>1
007A90: 54 48 45 4E 0D 0A 09 09 09 53 6F 72 74 52 65 63 THEN.....SortRec
007AA0: 6F 72 64 73 28 41 44 52 28 4E 61 6D 65 73 29 2C ords(ADR(Names),
007AB0: 43 41 52 44 49 4E 41 4C 28 4E 61 6D 65 43 6F 75 CARDINAL(NameCou
007AC0: 6E 74 29 2C 0D 0A 09 09 09 09 54 53 49 5A 45 28 nt),......TSIZE(
007AD0: 46 69 6C 65 4E 61 6D 65 29 2C 43 6F 6D 70 61 72 FileName),Compar
007AE0: 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 46 );.....END;....F
007AF0: 4F 52 20 6A 3A 3D 30 20 54 4F 20 4E 61 6D 65 43 OR j:=0 TO NameC
007B00: 6F 75 6E 74 2D 31 20 44 4F 0D 0A 09 09 09 4C 6F ount-1 DO.....Lo
007B10: 6F 6B 75 70 28 49 6E 66 2C 4E 61 6D 65 73 5B 6A okup(Inf,Names[j
007B20: 5D 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 09 49 46 ],reply);.....IF
007B30: 20 72 65 70 6C 79 3C 30 20 54 48 45 4E 0D 0A 09 reply<0 THEN...
007B40: 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
007B50: 20 43 6F 75 6C 64 20 6E 6F 74 20 6F 70 65 6E 20 Could not open
007B60: 27 29 3B 0D 0A 09 09 09 09 57 72 69 74 65 53 74 ');......WriteSt
007B70: 72 69 6E 67 28 4E 61 6D 65 73 5B 6A 5D 29 3B 0D ring(Names[j]);.
007B80: 0A 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 .....WriteLn;...
007B90: 09 09 45 4C 53 45 0D 0A 09 09 09 09 4F 75 74 70 ..ELSE......Outp
007BA0: 75 74 46 69 6C 65 28 4E 61 6D 65 73 5B 6A 5D 29 utFile(Names[j])
007BB0: 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 ;......END;.....
007BC0: 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 END;....END;...E
007BD0: 4E 44 20 4C 69 73 74 69 74 3B 09 09 09 0D 0A 42 ND Listit;.....B
007BE0: 45 47 49 4E 0D 0A 09 4C 69 73 74 69 74 3B 0D 0A EGIN...Listit;..
007BF0: 09 45 4E 44 20 43 61 74 2E 0D 0A 1A 1A 1A 1A 1A .END Cat........
007C00: 27 3A 52 65 61 64 28 63 68 29 3B 0D 0A 09 09 09 ':Read(ch);.....
007C10: 09 20 20 20 20 69 3A 3D 4E 75 6D 62 65 72 28 29 . i:=Number()
007C20: 3B 0D 0A 09 09 09 09 20 20 20 20 49 46 20 69 3E ;...... IF i>
007C30: 4C 69 6E 65 4F 66 46 69 6C 65 20 54 48 45 4E 20 LineOfFile THEN
007C40: 4C 69 6E 65 4F 66 46 69 6C 65 3A 3D 31 0D 0A 09 LineOfFile:=1...
007C50: 09 09 09 20 20 20 20 45 4C 53 45 20 4C 69 6E 65 ... ELSE Line
007C60: 4F 66 46 69 6C 65 3A 3D 4C 69 6E 65 4F 66 46 69 OfFile:=LineOfFi
007C70: 6C 65 2D 69 20 45 4E 44 3B 0D 0A 09 09 09 09 20 le-i END;......
007C80: 20 20 20 52 65 70 6F 73 69 74 69 6F 6E 46 69 6C RepositionFil
007C90: 65 0D 0A 09 09 09 09 20 20 20 20 7C 0D 0A 09 09 e...... |....
007CA0: 09 09 27 30 27 2E 2E 27 39 27 3A 4C 69 6E 65 4F ..'0'..'9':LineO
007CB0: 66 46 69 6C 65 3A 3D 4E 75 6D 62 65 72 28 29 3B fFile:=Number();
007CC0: 0D 0A 09 09 09 09 09 20 52 65 70 6F 73 69 74 69 ....... Repositi
007CD0: 6F 6E 46 69 6C 65 7C 0D 0A 09 09 09 09 27 21 27 onFile|......'!'
007CE0: 2E 2E 27 2A 27 2C 27 2C 27 2C 27 2E 27 2C 27 2F ..'*',',','.','/
007CF0: 27 2C 27 3A 27 2E 2E 27 40 27 2C 27 7B 27 2E 2E ',':'..'@','{'..
007D00: 27 7E 27 2C 0D 0A 09 09 09 09 27 5B 27 2E 2E 27 '~',......'['..'
007D10: 60 27 3A 0D 0A 09 09 09 09 09 53 65 61 72 63 68 `':.......Search
007D20: 28 63 68 29 3B 52 65 61 64 28 63 68 29 7C 0D 0A (ch);Read(ch)|..
007D30: 09 09 09 09 0D 0A 09 09 09 09 30 33 78 3A 0D 0A ..........03x:..
007D40: 09 09 09 09 09 48 41 4C 54 7C 0D 0A 09 09 09 09 .....HALT|......
007D50: 45 4C 53 45 20 45 58 49 54 0D 0A 09 09 09 09 45 ELSE EXIT......E
007D60: 4E 44 28 2A 43 41 53 45 2A 29 3B 0D 0A 09 09 09 ND(*CASE*);.....
007D70: 20 20 20 20 45 4E 44 3B 28 2A 4C 4F 4F 50 2A 29 END;(*LOOP*)
007D80: 0D 0A 09 09 09 49 46 20 43 41 50 28 63 68 29 3D .....IF CAP(ch)=
007D90: 27 51 27 20 54 48 45 4E 20 45 58 49 54 20 45 4E 'Q' THEN EXIT EN
007DA0: 44 3B 0D 0A 09 09 09 49 4E 43 28 50 61 67 65 4E D;.....INC(PageN
007DB0: 75 6D 62 65 72 29 3B 0D 0A 09 09 09 50 61 67 65 umber);.....Page
007DC0: 48 65 61 64 65 72 3B 0D 0A 09 09 09 4C 69 6E 65 Header;.....Line
007DD0: 4E 75 6D 62 65 72 3A 3D 32 3B 0D 0A 09 09 09 45 Number:=2;.....E
007DE0: 4E 44 3B 0D 0A 0D 0A 09 09 45 4E 44 3B 0D 0A 09 ND;......END;...
007DF0: 45 4E 44 20 4F 75 74 70 75 74 46 69 6C 65 3B 0D END OutputFile;.
007E00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007E10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007E20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007E30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007E40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007E50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007E60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007E70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007E80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007E90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007EA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007EB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007EC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007ED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007EE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007EF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007F00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007F10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007F20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007F30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007F40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007F50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007F60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007F70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007F80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007F90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007FA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007FB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007FC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007FD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007FE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
007FF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008000: 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 4C 69 73 ...PROCEDURE Lis
008010: 74 69 74 3B 0D 0A 56 41 52 09 69 3A 43 41 52 44 tit;..VAR.i:CARD
008020: 49 4E 41 4C 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 INAL;....PROCEDU
008030: 52 45 20 47 65 74 4E 75 6D 28 43 68 61 72 73 3A RE GetNum(Chars:
008040: 41 52 52 41 59 20 4F 46 20 43 48 41 52 3B 56 41 ARRAY OF CHAR;VA
008050: 52 20 50 6F 73 3A 43 41 52 44 49 4E 41 4C 3B 4C R Pos:CARDINAL;L
008060: 65 6E 3A 43 41 52 44 49 4E 41 4C 29 3A 43 41 52 en:CARDINAL):CAR
008070: 44 49 4E 41 4C 3B 0D 0A 0D 0A 28 2A 09 47 65 74 DINAL;....(*.Get
008080: 20 61 20 6E 75 6D 62 65 72 20 66 72 6F 6D 20 61 a number from a
008090: 20 70 61 72 61 6D 65 74 65 72 20 69 6E 20 74 68 parameter in th
0080A0: 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 2A 29 e command line*)
0080B0: 0D 0A 54 59 50 45 09 43 68 61 72 53 65 74 3D 53 ..TYPE.CharSet=S
0080C0: 45 54 20 4F 46 20 43 48 41 52 3B 0D 0A 56 41 52 ET OF CHAR;..VAR
0080D0: 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 .i:CARDINAL;..BE
0080E0: 47 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 57 48 GIN...i:=0;...WH
0080F0: 49 4C 45 20 28 50 6F 73 3C 4C 65 6E 29 20 41 4E ILE (Pos<Len) AN
008100: 44 20 28 43 68 61 72 73 5B 50 6F 73 5D 20 49 4E D (Chars[Pos] IN
008110: 20 43 68 61 72 53 65 74 7B 27 30 27 2E 2E 27 39 CharSet{'0'..'9
008120: 27 7D 29 20 44 4F 0D 0A 09 09 69 3A 3D 31 30 2A '}) DO....i:=10*
008130: 69 2B 4F 52 44 28 43 68 61 72 73 5B 50 6F 73 5D i+ORD(Chars[Pos]
008140: 29 2D 4F 52 44 28 27 30 27 29 3B 0D 0A 09 09 49 )-ORD('0');....I
008150: 4E 43 28 50 6F 73 29 3B 0D 0A 09 09 45 4E 44 3B NC(Pos);....END;
008160: 09 0D 0A 09 52 45 54 55 52 4E 20 69 0D 0A 09 45 ....RETURN i...E
008170: 4E 44 20 47 65 74 4E 75 6D 3B 0D 0A 42 45 47 49 ND GetNum;..BEGI
008180: 4E 0D 0A 0D 0A 09 47 65 74 50 61 72 61 6D 73 28 N.....GetParams(
008190: 50 61 72 61 6D 2C 43 6F 75 6E 74 29 3B 0D 0A 20 Param,Count);..
0081A0: 20 20 20 20 20 20 20 43 6F 75 6E 74 65 72 20 3A Counter :
0081B0: 3D 20 31 3B 0D 0A 20 20 20 20 20 20 20 20 49 46 = 1;.. IF
0081C0: 20 43 6F 75 6E 74 3D 30 20 54 48 45 4E 20 55 73 Count=0 THEN Us
0081D0: 61 67 65 20 45 4E 44 3B 0D 0A 0D 0A 09 49 46 20 age END;.....IF
0081E0: 50 61 72 61 6D 5B 43 6F 75 6E 74 2D 31 5D 5E 2E Param[Count-1]^.
0081F0: 43 6C 61 73 73 3D 6F 70 74 69 6F 6E 20 54 48 45 Class=option THE
008200: 44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C DEFINITION MODUL
008210: 45 20 43 6F 6D 6D 61 6E 64 3B 0D 0A 0D 0A 28 2A E Command;....(*
008220: 09 43 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 70 72 .Command line pr
008230: 6F 63 65 73 73 6F 72 2A 29 0D 0A 46 52 4F 4D 20 ocessor*)..FROM
008240: 53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 42 59 SYSTEM IMPORT BY
008250: 54 45 3B 0D 0A 0D 0A 54 59 50 45 0D 0A 09 50 61 TE;....TYPE...Pa
008260: 72 63 6C 61 73 73 3D 28 6E 61 6D 65 2C 73 74 72 rclass=(name,str
008270: 69 6E 67 2C 6F 70 74 69 6F 6E 29 3B 0D 0A 0D 0A ing,option);....
008280: 09 28 2A 09 50 61 72 63 6C 61 73 73 20 69 73 20 .(*.Parclass is
008290: 61 20 62 65 73 74 20 67 75 65 73 73 20 73 74 79 a best guess sty
0082A0: 6C 65 20 6F 66 20 74 68 69 6E 67 3A 0D 0A 09 09 le of thing:....
0082B0: 49 66 20 74 68 65 20 70 61 72 61 6D 65 74 65 72 If the parameter
0082C0: 20 69 73 20 69 6E 20 71 75 6F 74 65 73 20 69 74 is in quotes it
0082D0: 20 69 73 20 61 20 73 74 72 69 6E 67 0D 0A 09 09 is a string....
0082E0: 49 66 20 69 74 20 66 6F 6C 6C 6F 77 73 20 61 20 If it follows a
0082F0: 27 5B 27 20 6F 72 20 61 20 27 2F 27 20 69 74 20 '[' or a '/' it
008300: 69 73 20 61 6E 20 6F 70 74 69 6F 6E 0D 0A 09 09 is an option....
008310: 28 74 68 65 72 65 20 69 73 20 6F 6E 6C 79 20 65 (there is only e
008320: 76 65 72 20 6F 6E 65 20 6F 70 74 69 6F 6E 20 70 ver one option p
008330: 61 72 61 6D 65 74 65 72 2E 20 49 74 20 69 73 0D arameter. It is.
008340: 0A 09 09 61 6C 77 61 79 73 20 6C 61 73 74 2C 20 ...always last,
008350: 61 6E 64 20 69 74 20 63 6F 6E 74 61 69 6E 73 20 and it contains
008360: 65 76 65 72 79 74 68 69 6E 67 20 66 72 6F 6D 20 everything from
008370: 74 68 65 20 2F 20 6F 72 20 0D 0A 09 09 5B 20 6F the / or ....[ o
008380: 6E 77 61 72 64 73 0D 0A 09 09 45 76 65 72 79 74 nwards....Everyt
008390: 68 69 6E 67 20 65 6C 73 65 20 69 73 20 61 20 6E hing else is a n
0083A0: 61 6D 65 20 28 6E 6F 20 76 61 6C 69 64 69 74 79 ame (no validity
0083B0: 20 63 68 65 63 6B 69 6E 67 20 70 65 72 66 6F 72 checking perfor
0083C0: 6D 65 64 2A 29 0D 0A 0D 0A 09 54 65 78 74 3D 52 med*).....Text=R
0083D0: 45 43 4F 52 44 0D 0A 09 09 4C 65 6E 67 74 68 3A ECORD....Length:
0083E0: 42 59 54 45 3B 09 09 28 2A 72 65 74 75 72 6E 73 BYTE;..(*returns
0083F0: 20 62 79 74 65 73 20 69 6E 20 70 61 72 61 6D 65 bytes in parame
008400: 4E 0D 0A 09 09 57 49 54 48 20 50 61 72 61 6D 5B N....WITH Param[
008410: 43 6F 75 6E 74 2D 31 5D 5E 20 44 4F 0D 0A 0D 0A Count-1]^ DO....
008420: 09 09 09 28 2A 09 52 65 63 6F 67 6E 69 73 65 20 ...(*.Recognise
008430: 66 6C 61 67 73 2A 29 0D 0A 0D 0A 09 09 09 69 3A flags*).......i:
008440: 3D 30 3B 0D 0A 09 09 09 57 48 49 4C 45 20 69 3C =0;.....WHILE i<
008450: 43 41 52 44 49 4E 41 4C 28 4C 65 6E 67 74 68 29 CARDINAL(Length)
008460: 20 44 4F 0D 0A 09 09 09 09 43 41 53 45 20 43 68 DO......CASE Ch
008470: 61 72 73 5B 69 5D 20 4F 46 0D 0A 09 09 09 09 27 ars[i] OF......'
008480: 49 27 3A 45 78 70 61 6E 64 54 61 62 73 3A 3D 54 I':ExpandTabs:=T
008490: 52 55 45 3B 0D 0A 09 09 09 09 20 20 20 20 49 4E RUE;...... IN
0084A0: 43 28 69 29 7C 0D 0A 09 09 09 09 27 57 27 3A 4C C(i)|......'W':L
0084B0: 69 6E 65 57 72 61 70 3A 3D 54 52 55 45 3B 0D 0A ineWrap:=TRUE;..
0084C0: 09 09 09 09 20 20 20 20 49 4E 43 28 69 29 3B 0D .... INC(i);.
0084D0: 0A 09 09 09 09 20 20 20 20 50 61 67 65 57 69 64 ..... PageWid
0084E0: 74 68 3A 3D 47 65 74 4E 75 6D 28 43 68 61 72 73 th:=GetNum(Chars
0084F0: 2C 69 2C 4F 52 44 28 4C 65 6E 67 74 68 29 29 3B ,i,ORD(Length));
008500: 0D 0A 09 09 09 09 20 20 20 20 49 46 20 50 61 67 ...... IF Pag
008510: 65 57 69 64 74 68 3D 30 20 54 48 45 4E 20 50 61 eWidth=0 THEN Pa
008520: 67 65 57 69 64 74 68 3A 3D 38 30 20 45 4E 44 3B geWidth:=80 END;
008530: 0D 0A 0D 0A 09 09 09 09 09 28 2A 43 68 65 63 6B .........(*Check
008540: 20 70 61 67 65 20 77 69 64 74 68 20 69 73 20 72 page width is r
008550: 65 61 73 6F 6E 61 62 6C 65 2A 29 0D 0A 0D 0A 09 easonable*).....
008560: 09 09 09 20 20 20 20 49 46 20 50 61 67 65 57 69 ... IF PageWi
008570: 64 74 68 3C 33 32 20 54 48 45 4E 0D 0A 09 09 09 dth<32 THEN.....
008580: 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 09 ..WriteLn;......
008590: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 2A .WriteString(' *
0085A0: 2A 2A 20 50 61 67 65 20 77 69 64 74 68 20 74 6F ** Page width to
0085B0: 6F 20 6E 61 72 72 6F 77 20 2A 2A 2A 27 29 3B 0D o narrow ***');.
0085C0: 0A 09 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A ......WriteLn;..
0085D0: 09 09 09 09 09 55 73 61 67 65 3B 0D 0A 09 09 09 .....Usage;.....
0085E0: 09 09 45 4E 44 3B 0D 0A 09 09 09 09 20 20 20 7C ..END;...... |
0085F0: 0D 0A 09 09 09 09 27 4E 27 3A 4E 75 6D 62 65 72 ......'N':Number
008600: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
008610: 07 00 01 00 02 09 52 E5 07 00 41 02 00 00 00 02 ......R...A.....
008620: 07 00 46 02 00 00 00 02 07 00 42 02 00 00 00 02 ..F.......B.....
008630: 07 00 47 02 00 00 00 02 07 00 43 02 00 00 00 02 ..G.......C.....
008640: 07 00 48 02 00 00 00 02 07 00 44 02 00 00 00 02 ..H.......D.....
008650: 07 00 49 02 00 00 00 02 07 00 45 02 00 00 00 02 ..I.......E.....
008660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
008670: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
008680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
008690: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0086F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
008700: 74 65 72 2A 29 0D 0A 09 09 54 65 72 6D 69 6E 61 ter*)....Termina
008710: 74 6F 72 3A 43 48 41 52 3B 09 28 2A 72 65 74 75 tor:CHAR;.(*retu
008720: 72 6E 73 20 6E 65 78 74 20 63 68 61 72 61 63 74 rns next charact
008730: 65 72 2C 20 6F 72 0D 0A 09 09 09 09 09 64 65 6C er, or.......del
008740: 69 6D 69 74 65 72 20 66 6F 72 20 73 74 72 69 6E imiter for strin
008750: 67 73 2A 29 09 0D 0A 09 09 43 6C 61 73 73 3A 50 gs*).....Class:P
008760: 61 72 63 6C 61 73 73 3B 09 09 28 2A 63 6C 61 73 arclass;..(*clas
008770: 73 20 6F 66 20 70 61 72 61 6D 65 74 65 72 2A 29 s of parameter*)
008780: 0D 0A 09 09 43 41 53 45 20 3A 42 4F 4F 4C 45 41 ....CASE :BOOLEA
008790: 4E 20 4F 46 0D 0A 09 09 20 20 20 20 46 41 4C 53 N OF.... FALS
0087A0: 45 3A 46 69 6C 65 50 6F 73 3A 43 41 52 44 49 4E E:FilePos:CARDIN
0087B0: 41 4C 3B 45 72 72 6F 72 4E 6F 3A 43 41 52 44 49 AL;ErrorNo:CARDI
0087C0: 4E 41 4C 7C 0D 0A 09 09 20 20 20 20 54 52 55 45 NAL|.... TRUE
0087D0: 3A 43 68 61 72 73 3A 41 52 52 41 59 5B 30 2E 2E :Chars:ARRAY[0..
0087E0: 31 32 37 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 127] OF CHAR;...
0087F0: 09 20 20 20 20 45 4E 44 0D 0A 09 09 09 09 09 28 . END.......(
008800: 2A 70 61 72 61 6D 65 74 65 72 20 2D 20 61 6C 77 *parameter - alw
008810: 61 79 73 20 74 65 72 6D 69 6E 61 74 65 64 20 62 ays terminated b
008820: 79 0D 0A 09 09 09 09 09 20 20 61 20 7A 65 72 6F y....... a zero
008830: 20 62 79 74 65 2C 20 62 75 74 20 74 68 61 74 20 byte, but that
008840: 62 79 74 65 20 69 73 20 6E 6F 74 0D 0A 09 09 09 byte is not.....
008850: 09 09 20 20 69 6E 63 6C 75 64 65 64 20 69 6E 20 .. included in
008860: 74 68 65 20 6C 65 6E 67 74 68 2A 29 0D 0A 09 09 the length*)....
008870: 45 4E 44 3B 0D 0A 0D 0A 09 50 61 72 61 6D 65 74 END;.....Paramet
008880: 65 72 3D 50 4F 49 4E 54 45 52 20 54 4F 20 54 65 er=POINTER TO Te
008890: 78 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 xt;..PROCEDURE G
0088A0: 65 74 50 61 72 61 6D 73 28 56 41 52 20 70 3A 41 etParams(VAR p:A
0088B0: 52 52 41 59 20 4F 46 20 50 61 72 61 6D 65 74 65 RRAY OF Paramete
0088C0: 72 3B 56 41 52 20 63 6F 75 6E 74 3A 49 4E 54 45 r;VAR count:INTE
0088D0: 47 45 52 29 3B 0D 0A 28 2A 09 63 72 61 63 6B 20 GER);..(*.crack
0088E0: 74 68 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 the command line
0088F0: 2A 29 0D 0A 56 41 52 09 43 6F 6D 6D 4C 65 6E 67 *)..VAR.CommLeng
008900: 28 6A 29 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 (j)......END;...
008910: 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 09 42 75 ..INC(i);.....Bu
008920: 69 6C 64 28 6A 2D 69 2C 43 6F 6D 6D 54 65 78 74 ild(j-i,CommText
008930: 5B 69 2D 31 5D 2C 73 74 72 69 6E 67 29 3B 0D 0A [i-1],string);..
008940: 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 7C ...INC(j);.....|
008950: 0D 0A 09 09 45 4C 53 45 09 6A 3A 3D 69 2B 31 3B ....ELSE.j:=i+1;
008960: 0D 0A 09 09 09 57 48 49 4C 45 20 09 09 28 43 6F .....WHILE ..(Co
008970: 6D 6D 54 65 78 74 5B 6A 5D 3C 3E 27 20 27 29 20 mmText[j]<>' ')
008980: 0D 0A 09 09 09 09 41 4E 44 09 28 43 6F 6D 6D 54 ......AND.(CommT
008990: 65 78 74 5B 6A 5D 3C 3E 27 2C 27 29 20 0D 0A 09 ext[j]<>',') ...
0089A0: 09 09 09 41 4E 44 09 28 43 6F 6D 6D 54 65 78 74 ...AND.(CommText
0089B0: 5B 6A 5D 3C 3E 27 5B 27 29 0D 0A 09 09 09 09 41 [j]<>'[')......A
0089C0: 4E 44 09 28 43 6F 6D 6D 54 65 78 74 5B 6A 5D 3C ND.(CommText[j]<
0089D0: 3E 27 2F 27 29 0D 0A 09 09 09 09 41 4E 44 20 09 >'/')......AND .
0089E0: 28 6A 3C 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C (j<INTEGER(CommL
0089F0: 65 6E 67 74 68 29 29 20 44 4F 0D 0A 09 09 09 09 ength)) DO......
008A00: 49 4E 43 28 6A 29 0D 0A 09 09 09 09 45 4E 44 3B INC(j)......END;
008A10: 0D 0A 09 09 09 42 75 69 6C 64 28 6A 2D 69 2C 43 .....Build(j-i,C
008A20: 6F 6D 6D 54 65 78 74 5B 6A 5D 2C 6E 61 6D 65 29 ommText[j],name)
008A30: 3B 0D 0A 09 09 09 45 4E 44 3B 28 2A 63 61 73 65 ;.....END;(*case
008A40: 2A 29 0D 0A 09 09 0D 0A 09 09 69 3A 3D 6A 3B 0D *)........i:=j;.
008A50: 0A 09 09 49 46 20 43 6F 6D 6D 54 65 78 74 5B 69 ...IF CommText[i
008A60: 5D 3D 27 2C 27 20 54 48 45 4E 20 49 4E 43 28 69 ]=',' THEN INC(i
008A70: 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28 ) END;....END; (
008A80: 2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 47 65 *LOOP*)...END Ge
008A90: 74 50 61 72 61 6D 73 3B 0D 0A 09 09 09 09 0D 0A tParams;........
008AA0: 45 4E 44 20 43 6F 6D 6D 61 6E 64 2E 0D 0A 1A 1A END Command.....
008AB0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
008AC0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
008AD0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
008AE0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
008AF0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
008B00: 74 68 5B 38 30 68 5D 3A 42 59 54 45 3B 0D 0A 09 th[80h]:BYTE;...
008B10: 43 6F 6D 6D 54 65 78 74 5B 38 31 68 5D 3A 41 52 CommText[81h]:AR
008B20: 52 41 59 5B 30 2E 2E 31 32 36 5D 20 4F 46 20 43 RAY[0..126] OF C
008B30: 48 41 52 3B 20 0D 0A 45 4E 44 20 43 6F 6D 6D 61 HAR; ..END Comma
008B40: 6E 64 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A nd..............
008B50: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
008B60: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
008B70: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
008B80: 64 20 62 79 20 74 68 65 20 49 4F 20 74 69 6D 65 d by the IO time
008B90: 20 61 6E 79 77 61 79 2A 29 0D 0A 56 41 52 09 73 anyway*)..VAR.s
008BA0: 74 72 69 6E 67 3A 4D 61 74 63 68 53 74 72 69 6E tring:MatchStrin
008BB0: 67 3B 0D 0A 09 6C 65 6E 3A 43 41 52 44 49 4E 41 g;...len:CARDINA
008BC0: 4C 3B 0D 0A 09 6E 63 68 3A 43 48 41 52 3B 0D 0A L;...nch:CHAR;..
008BD0: 09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .i,j:CARDINAL;..
008BE0: 09 50 61 72 74 69 61 6C 50 6F 73 3A 41 52 52 41 .PartialPos:ARRA
008BF0: 59 5B 31 2E 2E 36 30 5D 20 4F 46 20 43 41 52 44 Y[1..60] OF CARD
008C00: 49 4E 41 4C 3B 0D 0A 09 50 61 72 74 69 61 6C 73 INAL;...Partials
008C10: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 :CARDINAL;..BEGI
008C20: 4E 0D 0A 09 6C 65 6E 3A 3D 30 3B 0D 0A 09 4C 4F N...len:=0;...LO
008C30: 4F 50 0D 0A 09 09 52 65 61 64 28 6E 63 68 29 3B OP....Read(nch);
008C40: 0D 0A 09 09 49 46 20 28 6E 63 68 3D 42 53 29 20 ....IF (nch=BS)
008C50: 4F 52 20 28 6E 63 68 3D 44 45 4C 29 20 54 48 45 OR (nch=DEL) THE
008C60: 4E 0D 0A 09 09 09 49 46 20 6C 65 6E 3E 30 20 54 N.....IF len>0 T
008C70: 48 45 4E 20 44 45 43 28 6C 65 6E 29 20 45 4E 44 HEN DEC(len) END
008C80: 3B 0D 0A 09 09 45 4C 53 49 46 20 28 6E 63 68 3D ;....ELSIF (nch=
008C90: 44 65 6C 69 6D 69 74 65 72 29 20 4F 52 20 28 6C Delimiter) OR (l
008CA0: 65 6E 3D 48 49 47 48 28 73 74 72 69 6E 67 29 29 en=HIGH(string))
008CB0: 0D 0A 09 09 09 4F 52 20 28 6E 63 68 3D 43 52 29 .....OR (nch=CR)
008CC0: 20 4F 52 20 28 6E 63 68 3D 4C 46 29 20 54 48 45 OR (nch=LF) THE
008CD0: 4E 0D 0A 09 09 09 45 58 49 54 0D 0A 09 09 45 4C N.....EXIT....EL
008CE0: 53 45 0D 0A 09 09 09 49 4E 43 28 6C 65 6E 29 3B SE.....INC(len);
008CF0: 0D 0A 09 09 09 73 74 72 69 6E 67 5B 6C 65 6E 5D .....string[len]
008D00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008D10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008D20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008D30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008D40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008D50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008D60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008D70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008D80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008D90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008DA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008DB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008DC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008DD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008DE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008DF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008E00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008E10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008E20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008E30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008E40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008E50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008E60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008E70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008E80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008E90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008EA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008EB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008EC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008ED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008EE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008EF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008F00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008F10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008F20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008F30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008F40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008F50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008F60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008F70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008F80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008F90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008FA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008FB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008FC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008FD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008FE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
008FF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0090A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0090B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0090C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0090D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0090E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0090F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
009100: 4D 4F 44 55 4C 45 20 43 6F 6D 70 61 72 65 3B 0D MODULE Compare;.
009110: 0A 0D 0A 28 2A 09 43 6F 6D 70 61 72 65 20 74 77 ...(*.Compare tw
009120: 6F 20 66 69 6C 65 73 0D 0A 0D 0A 09 43 61 6C 6C o files.....Call
009130: 20 69 73 20 43 4F 4D 50 41 52 45 20 20 20 6F 6C is COMPARE ol
009140: 64 20 66 69 6C 65 2C 6E 65 77 20 66 69 6C 65 2C d file,new file,
009150: 5B 4C 69 73 74 20 66 69 6C 65 5D 0D 0A 0D 0A 09 [List file].....
009160: 54 68 65 20 74 77 6F 20 66 69 6C 65 73 20 61 72 The two files ar
009170: 65 20 63 6F 6D 70 61 72 65 64 20 6C 69 6E 65 20 e compared line
009180: 62 79 20 6C 69 6E 65 0D 0A 0D 0A 09 6C 69 6E 65 by line.....line
009190: 73 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65 s which have bee
0091A0: 6E 20 64 65 6C 65 74 65 64 20 66 72 6F 6D 20 74 n deleted from t
0091B0: 68 65 20 6F 6C 64 20 66 69 6C 65 20 61 72 65 20 he old file are
0091C0: 70 72 69 6E 74 65 64 20 69 6E 20 69 74 61 6C 69 printed in itali
0091D0: 63 73 0D 0A 09 6C 69 6E 65 73 20 77 68 69 63 68 cs...lines which
0091E0: 20 68 61 76 65 20 62 65 65 6E 20 69 6E 73 65 72 have been inser
0091F0: 74 65 64 20 61 72 65 20 70 72 69 6E 74 65 64 20 ted are printed
009200: 69 6E 20 65 6D 70 68 61 73 69 73 65 64 20 6D 6F in emphasised mo
009210: 64 65 0D 0A 09 6C 69 6E 65 73 20 77 68 69 63 68 de...lines which
009220: 20 68 61 76 65 20 62 65 65 6E 20 6D 6F 76 65 64 have been moved
009230: 20 74 6F 20 61 20 6E 65 77 20 70 6F 73 69 74 69 to a new positi
009240: 6F 6E 20 61 72 65 20 70 72 69 6E 74 65 64 20 69 on are printed i
009250: 6E 20 74 68 65 69 72 20 6E 65 77 0D 0A 09 70 6F n their new...po
009260: 73 69 74 69 6F 6E 20 77 69 74 68 20 61 20 62 6F sition with a bo
009270: 78 20 73 75 72 72 6F 75 6E 64 69 6E 67 20 74 68 x surrounding th
009280: 65 6D 0D 0A 0D 0A 09 59 6F 75 20 6D 61 79 20 6E em.....You may n
009290: 65 65 64 20 74 6F 20 70 61 74 63 68 20 74 68 65 eed to patch the
0092A0: 20 70 72 69 6E 74 65 72 20 63 6F 6E 74 72 6F 6C printer control
0092B0: 20 63 6F 64 65 73 20 66 6F 72 20 79 6F 75 72 20 codes for your
0092C0: 70 72 69 6E 74 65 72 0D 0A 09 54 68 65 73 65 20 printer...These
0092D0: 63 6F 6E 74 72 6F 6C 20 63 6F 64 65 73 20 61 72 control codes ar
0092E0: 65 20 61 74 20 61 62 6F 75 74 20 61 64 64 72 65 e at about addre
0092F0: 73 73 20 31 30 34 68 20 69 6E 20 74 68 65 20 63 ss 104h in the c
009300: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
009310: 4F 44 55 4C 45 20 43 6F 6D 6D 61 6E 64 3B 0D 0A ODULE Command;..
009320: 0D 0A 0D 0A 28 2A 09 43 6F 6D 6D 61 6E 64 20 6C ....(*.Command l
009330: 69 6E 65 20 70 72 6F 63 65 73 73 6F 72 2A 29 0D ine processor*).
009340: 0A 46 52 4F 4D 20 53 74 6F 72 61 67 65 20 49 4D .FROM Storage IM
009350: 50 4F 52 54 20 41 4C 4C 4F 43 41 54 45 3B 0D 0A PORT ALLOCATE;..
009360: 46 52 4F 4D 20 53 59 53 54 45 4D 20 20 49 4D 50 FROM SYSTEM IMP
009370: 4F 52 54 20 41 44 44 52 45 53 53 3B 0D 0A 56 41 ORT ADDRESS;..VA
009380: 52 09 69 2C 6A 2C 6B 3A 49 4E 54 45 47 45 52 3B R.i,j,k:INTEGER;
009390: 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 50 ..PROCEDURE GetP
0093A0: 61 72 61 6D 73 28 56 41 52 20 70 3A 41 52 52 41 arams(VAR p:ARRA
0093B0: 59 20 4F 46 20 50 61 72 61 6D 65 74 65 72 3B 56 Y OF Parameter;V
0093C0: 41 52 20 63 6F 75 6E 74 3A 49 4E 54 45 47 45 52 AR count:INTEGER
0093D0: 29 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 42 75 );..PROCEDURE Bu
0093E0: 69 6C 64 28 6C 65 6E 3A 49 4E 54 45 47 45 52 3B ild(len:INTEGER;
0093F0: 63 68 3A 43 48 41 52 3B 63 3A 50 61 72 63 6C 61 ch:CHAR;c:Parcla
009400: 73 73 29 3B 0D 0A 56 41 52 09 61 64 3A 41 44 44 ss);..VAR.ad:ADD
009410: 52 45 53 53 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A RESS;..BEGIN....
009420: 09 41 4C 4C 4F 43 41 54 45 28 61 64 2C 6C 65 6E .ALLOCATE(ad,len
009430: 2B 34 29 3B 0D 0A 09 70 5B 63 6F 75 6E 74 5D 3A +4);...p[count]:
009440: 3D 61 64 3B 0D 0A 09 57 49 54 48 20 70 5B 63 6F =ad;...WITH p[co
009450: 75 6E 74 5D 5E 20 44 4F 0D 0A 09 09 49 46 20 6A unt]^ DO....IF j
009460: 3E 3D 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C 65 >=INTEGER(CommLe
009470: 6E 67 74 68 29 54 48 45 4E 20 54 65 72 6D 69 6E ngth)THEN Termin
009480: 61 74 6F 72 3A 3D 30 64 78 0D 0A 09 09 45 4C 53 ator:=0dx....ELS
009490: 45 20 54 65 72 6D 69 6E 61 74 6F 72 3A 3D 63 68 E Terminator:=ch
0094A0: 20 45 4E 44 3B 0D 0A 09 09 4C 65 6E 67 74 68 3A END;....Length:
0094B0: 3D 6C 65 6E 3B 0D 0A 09 09 43 6C 61 73 73 3A 3D =len;....Class:=
0094C0: 63 3B 0D 0A 09 09 46 4F 52 20 6B 3A 3D 30 20 54 c;....FOR k:=0 T
0094D0: 4F 20 6C 65 6E 2D 31 20 44 4F 0D 0A 09 09 09 43 O len-1 DO.....C
0094E0: 68 61 72 73 5B 6B 5D 3A 3D 43 6F 6D 6D 54 65 78 hars[k]:=CommTex
0094F0: 74 5B 69 2B 6B 5D 3B 0D 0A 09 09 09 45 4E 44 3B t[i+k];.....END;
009500: 6F 6D 20 66 69 6C 65 20 28 69 2E 65 2E 20 0D 0A om file (i.e. ..
009510: 09 76 65 72 79 20 6E 65 61 72 20 74 68 65 20 62 .very near the b
009520: 65 67 69 6E 6E 69 6E 67 29 20 45 61 63 68 20 63 eginning) Each c
009530: 6F 6E 74 72 6F 6C 20 63 6F 64 65 20 63 61 6E 20 ontrol code can
009540: 62 65 20 75 70 20 74 6F 20 38 20 63 68 61 72 61 be up to 8 chara
009550: 63 74 65 72 73 20 6C 6F 6E 67 0D 0A 09 61 6E 64 cters long...and
009560: 20 69 73 20 74 65 72 6D 69 6E 61 74 65 64 20 62 is terminated b
009570: 79 20 61 20 76 61 6C 75 65 20 6F 66 20 30 20 69 y a value of 0 i
009580: 66 20 6C 65 73 73 20 74 68 61 6E 20 38 20 63 68 f less than 8 ch
009590: 61 72 61 63 74 65 72 73 20 69 73 20 72 65 71 75 aracters is requ
0095A0: 69 72 65 64 0D 0A 0D 0A 09 54 68 65 20 63 6F 6E ired.....The con
0095B0: 74 72 6F 6C 20 63 68 61 72 61 63 74 65 72 73 20 trol characters
0095C0: 69 6E 20 74 68 65 20 73 75 70 70 6C 69 65 64 20 in the supplied
0095D0: 70 72 6F 67 72 61 6D 20 61 72 65 20 73 65 74 20 program are set
0095E0: 66 6F 72 20 61 20 53 54 41 52 20 44 50 53 35 31 for a STAR DPS51
0095F0: 30 2C 0D 0A 09 77 68 69 63 68 20 69 73 20 73 75 0,...which is su
009600: 70 70 6F 73 65 64 20 74 6F 20 62 65 20 45 70 73 pposed to be Eps
009610: 6F 6E 20 63 6F 6D 70 61 74 69 62 6C 65 2C 20 73 on compatible, s
009620: 6F 20 74 68 65 20 70 72 6F 67 72 61 6D 20 6D 61 o the program ma
009630: 79 20 77 65 6C 6C 20 72 75 6E 20 27 61 73 20 69 y well run 'as i
009640: 73 27 0D 0A 09 6F 6E 20 45 70 73 6F 6E 73 20 61 s'...on Epsons a
009650: 6E 64 20 45 70 73 6F 6E 20 63 6C 6F 6E 65 73 0D nd Epson clones.
009660: 0A 0D 0A 09 54 68 65 20 70 72 6F 67 72 61 6D 20 ....The program
009670: 69 73 20 62 61 73 65 64 20 6F 6E 20 61 20 6D 65 is based on a me
009680: 74 68 6F 64 20 64 65 73 63 72 69 62 65 64 20 62 thod described b
009690: 79 20 50 61 75 6C 20 48 65 63 6B 65 6C 20 27 41 y Paul Heckel 'A
0096A0: 20 54 65 63 68 6E 69 71 75 65 20 66 6F 72 0D 0A Technique for..
0096B0: 09 49 73 6F 6C 61 74 69 6E 67 20 44 69 66 66 65 .Isolating Diffe
0096C0: 72 65 6E 63 65 73 20 62 65 74 77 65 65 6E 20 46 rences between F
0096D0: 69 6C 65 73 27 2C 20 43 6F 6D 6D 75 6E 69 63 61 iles', Communica
0096E0: 74 69 6F 6E 73 20 6F 66 20 74 68 65 20 41 43 4D tions of the ACM
0096F0: 2C 20 56 6F 6C 20 32 31 0D 0A 09 4E 6F 20 34 2C , Vol 21...No 4,
009700: 0D 0A 09 09 43 68 61 72 73 5B 6C 65 6E 5D 3A 3D ....Chars[len]:=
009710: 30 78 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 63 6F 0x;....END;...co
009720: 75 6E 74 3A 3D 63 6F 75 6E 74 2B 31 0D 0A 09 45 unt:=count+1...E
009730: 4E 44 20 42 75 69 6C 64 3B 0D 0A 28 2A 09 63 72 ND Build;..(*.cr
009740: 61 63 6B 20 74 68 65 20 63 6F 6D 6D 61 6E 64 20 ack the command
009750: 6C 69 6E 65 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 line*)..BEGIN...
009760: 69 3A 3D 30 3B 0D 0A 09 63 6F 75 6E 74 3A 3D 30 i:=0;...count:=0
009770: 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 49 46 20 63 ;...LOOP....IF c
009780: 6F 75 6E 74 3E 48 49 47 48 28 70 29 20 54 48 45 ount>HIGH(p) THE
009790: 4E 20 0D 0A 09 09 09 45 58 49 54 20 0D 0A 09 09 N .....EXIT ....
0097A0: 09 45 4E 44 3B 0D 0A 09 09 57 48 49 4C 45 20 28 .END;....WHILE (
0097B0: 69 3C 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C 65 i<INTEGER(CommLe
0097C0: 6E 67 74 68 29 29 20 41 4E 44 20 28 43 6F 6D 6D ngth)) AND (Comm
0097D0: 54 65 78 74 5B 69 5D 3D 27 20 27 29 20 44 4F 0D Text[i]=' ') DO.
0097E0: 0A 09 09 09 49 4E 43 28 69 29 0D 0A 09 09 09 45 ....INC(i).....E
0097F0: 4E 44 3B 0D 0A 09 09 49 46 20 69 3E 3D 49 4E 54 ND;....IF i>=INT
009800: 45 47 45 52 28 43 6F 6D 6D 4C 65 6E 67 74 68 29 EGER(CommLength)
009810: 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D THEN EXIT END;.
009820: 0A 09 09 43 41 53 45 20 43 6F 6D 6D 54 65 78 74 ...CASE CommText
009830: 5B 69 5D 20 4F 46 0D 0A 09 09 27 5B 27 2C 27 2F [i] OF....'[','/
009840: 27 3A 28 2A 4F 70 74 69 6F 6E 20 66 6F 75 6E 64 ':(*Option found
009850: 2A 29 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D 0A *).....INC(i);..
009860: 09 09 09 42 75 69 6C 64 28 49 4E 54 45 47 45 52 ...Build(INTEGER
009870: 28 43 6F 6D 6D 4C 65 6E 67 74 68 29 2D 69 2C 30 (CommLength)-i,0
009880: 64 78 2C 6F 70 74 69 6F 6E 29 3B 0D 0A 09 09 09 dx,option);.....
009890: 45 58 49 54 0D 0A 09 09 09 7C 0D 0A 09 09 27 22 EXIT.....|....'"
0098A0: 27 2C 22 27 22 3A 6A 3A 3D 69 2B 31 3B 0D 0A 09 ',"'":j:=i+1;...
0098B0: 09 09 57 48 49 4C 45 20 28 43 6F 6D 6D 54 65 78 ..WHILE (CommTex
0098C0: 74 5B 69 5D 3C 3E 43 6F 6D 6D 54 65 78 74 5B 6A t[i]<>CommText[j
0098D0: 5D 29 20 0D 0A 09 09 09 09 41 4E 44 20 28 6A 3C ]) ......AND (j<
0098E0: 49 4E 54 45 47 45 52 28 43 6F 6D 6D 4C 65 6E 67 INTEGER(CommLeng
0098F0: 74 68 29 29 20 44 4F 0D 0A 09 09 09 09 49 4E 43 th)) DO......INC
009900: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
009910: 08 00 01 00 02 09 52 E5 08 00 41 02 00 00 00 02 ......R...A.....
009920: 08 00 46 02 00 00 00 02 08 00 42 02 00 00 00 02 ..F.......B.....
009930: 08 00 47 02 00 00 00 02 08 00 43 02 00 00 00 02 ..G.......C.....
009940: 08 00 48 02 00 00 00 02 08 00 44 02 00 00 00 02 ..H.......D.....
009950: 08 00 49 02 00 00 00 02 08 00 45 02 00 00 00 02 ..I.......E.....
009960: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
009970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
009980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
009990: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0099F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
009A00: 20 41 70 72 69 6C 20 31 39 37 38 2C 20 70 70 20 April 1978, pp
009A10: 32 36 34 2D 32 36 38 2E 20 0D 0A 0D 0A 09 42 61 264-268. .....Ba
009A20: 73 69 63 61 6C 6C 79 2C 20 74 68 65 20 74 65 63 sically, the tec
009A30: 68 6E 69 71 75 65 20 63 6F 6E 73 69 73 74 73 20 hnique consists
009A40: 6F 66 20 63 6F 6D 70 61 72 69 6E 67 20 74 68 65 of comparing the
009A50: 20 74 77 6F 20 66 69 6C 65 73 20 74 6F 20 66 69 two files to fi
009A60: 6E 64 20 61 6C 6C 0D 0A 09 74 68 65 20 75 6E 69 nd all...the uni
009A70: 71 75 65 20 6C 69 6E 65 73 20 69 6E 20 65 61 63 que lines in eac
009A80: 68 20 77 68 69 63 68 20 6D 61 74 63 68 20 61 20 h which match a
009A90: 75 6E 69 71 75 65 20 6C 69 6E 65 20 69 6E 20 74 unique line in t
009AA0: 68 65 20 6F 74 68 65 72 2E 20 54 68 65 73 65 20 he other. These
009AB0: 0D 0A 09 6C 69 6E 65 73 20 67 69 76 65 20 66 69 ...lines give fi
009AC0: 78 65 64 20 70 6F 69 6E 74 73 20 66 72 6F 6D 20 xed points from
009AD0: 77 68 69 63 68 20 6D 61 74 63 68 69 6E 67 20 72 which matching r
009AE0: 65 67 69 6F 6E 73 20 63 61 6E 20 62 65 20 67 72 egions can be gr
009AF0: 6F 77 6E 20 6F 75 74 77 61 72 64 73 2E 0D 0A 09 own outwards....
009B00: 4F 6E 63 65 20 61 6C 6C 20 74 68 65 20 72 65 67 Once all the reg
009B10: 69 6F 6E 73 20 73 6F 20 70 72 6F 64 75 63 65 64 ions so produced
009B20: 20 68 61 76 65 20 62 65 65 6E 20 63 72 65 61 74 have been creat
009B30: 65 64 2C 20 61 6E 79 20 6C 69 6E 65 20 69 6E 20 ed, any line in
009B40: 74 68 65 20 6F 6C 64 20 66 69 6C 65 20 0D 0A 09 the old file ...
009B50: 77 68 69 63 68 20 69 73 20 6E 6F 74 20 61 74 74 which is not att
009B60: 61 63 68 65 64 20 74 6F 20 61 20 6C 69 6E 65 20 ached to a line
009B70: 69 6E 20 74 68 65 20 6E 65 77 20 66 69 6C 65 20 in the new file
009B80: 69 73 20 61 20 64 65 6C 65 74 69 6F 6E 2E 20 41 is a deletion. A
009B90: 6E 79 20 6C 69 6E 65 20 69 6E 20 74 68 65 20 0D ny line in the .
009BA0: 0A 09 6E 65 77 20 66 69 6C 65 20 77 68 69 63 68 ..new file which
009BB0: 20 69 73 20 6E 6F 74 20 61 74 74 61 63 68 65 64 is not attached
009BC0: 20 74 6F 20 61 20 6C 69 6E 65 20 69 6E 20 74 68 to a line in th
009BD0: 65 20 6F 6C 64 20 66 69 6C 65 20 69 73 20 61 6E e old file is an
009BE0: 20 69 6E 73 65 72 74 69 6F 6E 2C 20 77 68 69 6C insertion, whil
009BF0: 65 0D 0A 09 61 20 62 6C 6F 63 6B 20 6D 6F 76 65 e...a block move
009C00: 45 20 52 65 61 64 53 74 72 65 61 6D 28 56 41 52 E ReadStream(VAR
009C10: 20 73 3A 53 54 52 45 41 4D 3B 56 41 52 20 48 61 s:STREAM;VAR Ha
009C20: 73 68 3A 48 61 73 68 41 72 72 61 79 29 3A 43 41 sh:HashArray):CA
009C30: 52 44 49 4E 41 4C 3B 0D 0A 28 2A 0D 0A 09 52 65 RDINAL;..(*...Re
009C40: 61 64 20 69 6E 20 61 20 66 69 6C 65 20 61 6E 64 ad in a file and
009C50: 20 63 61 6C 63 75 6C 61 74 65 20 74 68 65 20 68 calculate the h
009C60: 61 73 68 20 74 6F 74 61 6C 73 20 66 6F 72 20 74 ash totals for t
009C70: 68 65 20 66 69 6C 65 0D 0A 2A 29 0D 0A 56 41 52 he file..*)..VAR
009C80: 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 4C .i:CARDINAL;...L
009C90: 69 6E 65 3A 41 52 52 41 59 5B 31 2E 2E 38 30 5D ine:ARRAY[1..80]
009CA0: 20 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E OF CHAR;..BEGIN
009CB0: 0D 0A 09 53 77 69 74 63 68 49 6E 53 74 72 65 61 ...SwitchInStrea
009CC0: 6D 28 73 29 3B 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 m(s);...i:=0;...
009CD0: 0D 0A 09 57 48 49 4C 45 20 28 69 3C 48 49 47 48 ...WHILE (i<HIGH
009CE0: 28 48 61 73 68 29 29 20 41 4E 44 20 28 4E 4F 54 (Hash)) AND (NOT
009CF0: 20 45 4F 53 28 73 29 29 20 44 4F 0D 0A 09 09 52 EOS(s)) DO....R
009D00: 65 61 64 4C 69 6E 65 28 4C 69 6E 65 29 3B 0D 0A eadLine(Line);..
009D10: 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 48 61 73 ..INC(i);....Has
009D20: 68 5B 69 5D 3A 3D 43 61 6C 63 48 61 73 68 28 4C h[i]:=CalcHash(L
009D30: 69 6E 65 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 ine);....END;...
009D40: 52 65 73 65 74 28 73 29 3B 0D 0A 09 50 6F 70 49 Reset(s);...PopI
009D50: 6E 53 74 72 65 61 6D 3B 0D 0A 09 52 45 54 55 52 nStream;...RETUR
009D60: 4E 20 69 3B 0D 0A 09 45 4E 44 20 52 65 61 64 53 N i;...END ReadS
009D70: 74 72 65 61 6D 3B 0D 0A 0D 0A 09 20 20 20 0D 0A tream;..... ..
009D80: 50 52 4F 43 45 44 55 52 45 20 55 73 61 67 65 3B PROCEDURE Usage;
009D90: 0D 0A 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 53 ..BEGIN...WriteS
009DA0: 74 72 69 6E 67 28 27 55 73 61 67 65 20 69 73 3A tring('Usage is:
009DB0: 20 20 20 43 4F 4D 50 41 52 45 20 6F 6C 64 20 66 COMPARE old f
009DC0: 69 6C 65 2C 6E 65 77 20 66 69 6C 65 27 29 3B 57 ile,new file');W
009DD0: 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 riteLn;...WriteS
009DE0: 74 72 69 6E 67 28 27 20 20 20 20 20 20 6F 72 20 tring(' or
009DF0: 20 20 20 43 4F 4D 50 41 52 45 20 6F 6C 64 20 66 COMPARE old f
009E00: 20 69 73 20 65 6E 63 6F 75 6E 74 65 72 65 64 20 is encountered
009E10: 77 68 65 6E 20 74 68 65 20 6C 69 6E 65 73 20 70 when the lines p
009E20: 6F 69 6E 74 65 64 20 74 6F 20 69 6E 20 74 68 65 ointed to in the
009E30: 20 6F 6C 64 20 66 69 6C 65 20 61 72 65 20 66 75 old file are fu
009E40: 72 74 68 65 72 0D 0A 09 64 6F 77 6E 20 74 68 65 rther...down the
009E50: 20 66 69 6C 65 20 74 68 61 6E 20 73 6F 6D 65 20 file than some
009E60: 6F 74 68 65 72 20 6C 69 6E 65 73 20 77 68 69 63 other lines whic
009E70: 68 20 68 61 76 65 20 6E 6F 74 20 79 65 74 20 62 h have not yet b
009E80: 65 65 6E 20 70 72 6F 63 65 73 73 65 64 20 61 6E een processed an
009E90: 64 20 77 68 69 63 68 0D 0A 09 61 72 65 20 61 73 d which...are as
009EA0: 73 6F 63 69 61 74 65 64 20 77 69 74 68 20 6C 69 sociated with li
009EB0: 6E 65 73 20 69 6E 20 74 68 65 20 6E 65 77 20 66 nes in the new f
009EC0: 69 6C 65 2E 0D 0A 0D 0A 09 2A 29 0D 0A 0D 0A 46 ile......*)....F
009ED0: 52 4F 4D 20 09 53 59 53 54 45 4D 20 09 09 49 4D ROM .SYSTEM ..IM
009EE0: 50 4F 52 54 20 41 44 44 52 45 53 53 2C 41 44 52 PORT ADDRESS,ADR
009EF0: 2C 54 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 09 43 ,TSIZE;..FROM .C
009F00: 6F 6D 6D 61 6E 64 20 09 49 4D 50 4F 52 54 20 50 ommand .IMPORT P
009F10: 61 72 61 6D 65 74 65 72 2C 50 61 72 63 6C 61 73 arameter,Parclas
009F20: 73 2C 47 65 74 50 61 72 61 6D 73 3B 0D 0A 46 52 s,GetParams;..FR
009F30: 4F 4D 20 09 46 69 6C 65 73 20 09 09 49 4D 50 4F OM .Files ..IMPO
009F40: 52 54 20 46 69 6C 65 4E 61 6D 65 2C 46 49 4C 45 RT FileName,FILE
009F50: 2C 4C 6F 6F 6B 75 70 2C 43 72 65 61 74 65 3B 0D ,Lookup,Create;.
009F60: 0A 46 52 4F 4D 20 09 53 74 72 65 61 6D 73 20 09 .FROM .Streams .
009F70: 49 4D 50 4F 52 54 20 43 6F 6E 6E 65 63 74 2C 44 IMPORT Connect,D
009F80: 69 73 63 6F 6E 6E 65 63 74 2C 53 54 52 45 41 4D isconnect,STREAM
009F90: 2C 69 6E 70 75 74 2C 6F 75 74 70 75 74 2C 57 72 ,input,output,Wr
009FA0: 69 74 65 43 68 61 72 2C 0D 0A 09 09 09 09 52 65 iteChar,......Re
009FB0: 61 64 43 68 61 72 2C 45 4F 53 2C 57 72 69 74 65 adChar,EOS,Write
009FC0: 52 65 63 2C 52 65 73 65 74 3B 0D 0A 46 52 4F 4D Rec,Reset;..FROM
009FD0: 20 09 54 65 72 6D 69 6E 61 6C 09 49 4D 50 4F 52 .Terminal.IMPOR
009FE0: 54 20 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72 T WriteString,Wr
009FF0: 69 74 65 4C 6E 3B 0D 0A 46 52 4F 4D 20 09 53 6F iteLn;..FROM .So
00A000: 69 6C 65 2C 6E 65 77 20 66 69 6C 65 2C 6F 75 74 ile,new file,out
00A010: 70 75 74 20 66 69 6C 65 27 29 3B 0D 0A 09 57 72 put file');...Wr
00A020: 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 4C 6E iteLn;...WriteLn
00A030: 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 ;...WriteString(
00A040: 27 20 66 6F 72 20 65 78 61 6D 70 6C 65 3A 20 20 ' for example:
00A050: 43 4F 4D 50 41 52 45 20 4D 45 2E 42 41 4B 20 4D COMPARE ME.BAK M
00A060: 45 2E 4D 4F 44 27 29 3B 57 72 69 74 65 4C 6E 3B E.MOD');WriteLn;
00A070: 0D 0A 09 48 41 4C 54 0D 0A 09 45 4E 44 20 55 73 ...HALT...END Us
00A080: 61 67 65 3B 0D 0A 0D 0A 56 41 52 09 4F 6C 64 4C age;....VAR.OldL
00A090: 69 6E 6B 2C 4E 65 77 4C 69 6E 6B 3A 48 61 73 68 ink,NewLink:Hash
00A0A0: 41 72 72 61 79 3B 0D 0A 0D 0A 09 28 2A 09 4F 6C Array;.....(*.Ol
00A0B0: 64 4C 69 6E 6B 20 63 6F 6E 74 61 69 6E 73 20 74 dLink contains t
00A0C0: 68 65 20 6E 75 6D 62 65 72 20 6F 66 20 61 20 6C he number of a l
00A0D0: 69 6E 65 20 69 6E 20 74 68 65 20 6E 65 77 20 66 ine in the new f
00A0E0: 69 6C 65 20 77 68 69 63 68 20 69 73 0D 0A 09 09 ile which is....
00A0F0: 6C 69 6E 6B 65 64 20 74 6F 20 61 20 67 69 76 65 linked to a give
00A100: 6E 20 6C 69 6E 65 20 69 6E 20 74 68 65 20 6F 6C n line in the ol
00A110: 64 20 66 69 6C 65 2C 20 61 6E 64 20 76 69 63 65 d file, and vice
00A120: 2D 76 65 72 73 61 0D 0A 09 09 41 6E 20 65 6E 74 -versa....An ent
00A130: 72 79 20 63 6F 6E 74 61 69 6E 73 20 7A 65 72 6F ry contains zero
00A140: 20 69 66 20 6E 6F 20 6C 69 6E 6B 20 68 61 73 20 if no link has
00A150: 62 65 65 6E 20 6D 61 64 65 2A 29 0D 0A 0D 0A 0D been made*).....
00A160: 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 6E ...PROCEDURE Gen
00A170: 65 72 61 74 65 4C 69 6E 6B 73 3B 0D 0A 56 41 52 erateLinks;..VAR
00A180: 09 69 2C 6A 2C 6B 3A 43 41 52 44 49 4E 41 4C 3B .i,j,k:CARDINAL;
00A190: 0D 0A 09 63 6F 75 6E 74 3A 43 41 52 44 49 4E 41 ...count:CARDINA
00A1A0: 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 46 4F 52 20 L;..BEGIN...FOR
00A1B0: 69 3A 3D 31 20 54 4F 20 48 49 47 48 28 4F 6C 64 i:=1 TO HIGH(Old
00A1C0: 4C 69 6E 6B 29 20 44 4F 0D 0A 09 09 4F 6C 64 4C Link) DO....OldL
00A1D0: 69 6E 6B 5B 69 5D 3A 3D 30 3B 0D 0A 09 09 4E 65 ink[i]:=0;....Ne
00A1E0: 77 4C 69 6E 6B 5B 69 5D 3A 3D 30 3B 0D 0A 09 09 wLink[i]:=0;....
00A1F0: 45 4E 44 3B 0D 0A 0D 0A 09 28 2A 09 6C 6F 6F 6B END;.....(*.look
00A200: 72 74 20 09 09 49 4D 50 4F 52 54 20 53 6F 72 74 rt ..IMPORT Sort
00A210: 52 65 63 6F 72 64 73 3B 0D 0A 46 52 4F 4D 20 09 Records;..FROM .
00A220: 49 6E 4F 75 74 20 09 09 49 4D 50 4F 52 54 20 57 InOut ..IMPORT W
00A230: 72 69 74 65 43 61 72 64 2C 53 77 69 74 63 68 49 riteCard,SwitchI
00A240: 6E 53 74 72 65 61 6D 2C 53 77 69 74 63 68 4F 75 nStream,SwitchOu
00A250: 74 53 74 72 65 61 6D 2C 0D 0A 09 09 09 09 50 6F tStream,......Po
00A260: 70 49 6E 53 74 72 65 61 6D 2C 50 6F 70 4F 75 74 pInStream,PopOut
00A270: 53 74 72 65 61 6D 2C 52 65 61 64 4C 69 6E 65 3B Stream,ReadLine;
00A280: 0D 0A 43 4F 4E 53 54 09 4D 61 78 46 69 6C 65 53 ..CONST.MaxFileS
00A290: 69 7A 65 3D 32 30 30 30 3B 09 28 2A 6C 69 6E 65 ize=2000;.(*line
00A2A0: 73 20 69 6E 20 66 69 6C 65 20 6D 61 78 2A 29 0D s in file max*).
00A2B0: 0A 09 46 46 3D 30 63 78 3B 0D 0A 09 54 41 42 3D ..FF=0cx;...TAB=
00A2C0: 30 39 78 3B 0D 0A 09 4C 46 3D 30 61 78 3B 0D 0A 09x;...LF=0ax;..
00A2D0: 09 43 52 3D 30 64 78 3B 0D 0A 54 59 50 45 20 09 .CR=0dx;..TYPE .
00A2E0: 50 46 69 6C 65 4E 61 6D 65 3D 50 4F 49 4E 54 45 PFileName=POINTE
00A2F0: 52 20 54 4F 20 46 69 6C 65 4E 61 6D 65 3B 0D 0A R TO FileName;..
00A300: 09 50 72 69 6E 74 43 6F 6E 74 72 6F 6C 3D 41 52 .PrintControl=AR
00A310: 52 41 59 5B 30 2E 2E 37 5D 20 4F 46 20 43 48 41 RAY[0..7] OF CHA
00A320: 52 3B 0D 0A 56 41 52 09 0D 0A 09 28 2A 09 50 72 R;..VAR....(*.Pr
00A330: 69 6E 74 65 72 20 43 6F 6E 74 72 6F 6C 20 43 6F inter Control Co
00A340: 64 65 73 20 61 20 7A 65 72 6F 20 62 79 74 65 20 des a zero byte
00A350: 74 65 72 6D 69 6E 61 74 65 73 09 2A 29 0D 0A 0D terminates.*)...
00A360: 0A 09 49 74 61 6C 69 63 73 4F 6E 09 3A 50 72 69 ..ItalicsOn.:Pri
00A370: 6E 74 43 6F 6E 74 72 6F 6C 09 3D 5B 31 62 78 2C ntControl.=[1bx,
00A380: 27 34 27 2C 30 5D 3B 0D 0A 09 49 74 61 6C 69 63 '4',0];...Italic
00A390: 73 4F 66 66 09 3A 50 72 69 6E 74 43 6F 6E 74 72 sOff.:PrintContr
00A3A0: 6F 6C 09 3D 5B 31 62 78 2C 27 35 27 2C 30 5D 3B ol.=[1bx,'5',0];
00A3B0: 0D 0A 09 42 6F 6C 64 4F 6E 09 09 3A 50 72 69 6E ...BoldOn..:Prin
00A3C0: 74 43 6F 6E 74 72 6F 6C 09 3D 5B 31 62 78 2C 27 tControl.=[1bx,'
00A3D0: 45 27 2C 30 5D 3B 0D 0A 09 42 6F 6C 64 4F 66 66 E',0];...BoldOff
00A3E0: 09 09 3A 50 72 69 6E 74 43 6F 6E 74 72 6F 6C 09 ..:PrintControl.
00A3F0: 3D 5B 31 62 78 2C 27 46 27 2C 30 5D 3B 0D 0A 0D =[1bx,'F',0];...
00A400: 20 66 6F 72 20 61 6C 6C 20 6F 6C 64 20 6C 69 6E for all old lin
00A410: 65 73 20 77 68 69 63 68 20 6D 61 74 63 68 20 65 es which match e
00A420: 78 61 63 74 6C 79 20 6F 6E 65 20 6E 65 77 20 6C xactly one new l
00A430: 69 6E 65 2A 29 0D 0A 0D 0A 09 46 4F 52 20 69 3A ine*).....FOR i:
00A440: 3D 30 20 54 4F 20 4F 6C 64 4C 65 6E 20 44 4F 0D =0 TO OldLen DO.
00A450: 0A 09 09 63 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09 ...count:=0;....
00A460: 6A 3A 3D 31 3B 0D 0A 09 09 57 48 49 4C 45 20 28 j:=1;....WHILE (
00A470: 63 6F 75 6E 74 3C 32 29 20 41 4E 44 20 28 6A 3C count<2) AND (j<
00A480: 3D 4E 65 77 4C 65 6E 29 20 44 4F 0D 0A 09 09 09 =NewLen) DO.....
00A490: 49 46 20 4F 6C 64 48 61 73 68 5B 69 5D 3D 4E 65 IF OldHash[i]=Ne
00A4A0: 77 48 61 73 68 5B 6A 5D 20 54 48 45 4E 20 0D 0A wHash[j] THEN ..
00A4B0: 09 09 09 09 49 4E 43 28 63 6F 75 6E 74 29 3B 20 ....INC(count);
00A4C0: 0D 0A 09 09 09 09 6B 3A 3D 6A 3B 0D 0A 09 09 09 ......k:=j;.....
00A4D0: 09 45 4E 44 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 .END;.....INC(j)
00A4E0: 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 ;.....END;....IF
00A4F0: 20 63 6F 75 6E 74 3D 31 20 54 48 45 4E 0D 0A 0D count=1 THEN...
00A500: 0A 09 09 28 2A 70 6F 73 73 69 62 6C 65 20 6D 61 ...(*possible ma
00A510: 74 63 68 20 2D 20 63 68 65 63 6B 20 74 68 61 74 tch - check that
00A520: 20 74 68 65 20 6E 65 77 20 6C 69 6E 65 20 6F 6E the new line on
00A530: 6C 79 20 6D 61 74 63 68 65 73 20 74 68 69 73 20 ly matches this
00A540: 6F 6C 64 20 6C 69 6E 65 2A 29 0D 0A 0D 0A 09 09 old line*)......
00A550: 09 63 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09 09 6A .count:=0;.....j
00A560: 3A 3D 31 3B 0D 0A 09 09 09 57 48 49 4C 45 20 28 :=1;.....WHILE (
00A570: 63 6F 75 6E 74 3C 32 29 20 41 4E 44 20 28 6A 3C count<2) AND (j<
00A580: 3D 4F 6C 64 4C 65 6E 29 20 44 4F 0D 0A 09 09 09 =OldLen) DO.....
00A590: 09 49 46 20 4F 6C 64 48 61 73 68 5B 6A 5D 3D 4E .IF OldHash[j]=N
00A5A0: 65 77 48 61 73 68 5B 6B 5D 20 54 48 45 4E 20 0D ewHash[k] THEN .
00A5B0: 0A 09 09 09 09 09 49 4E 43 28 63 6F 75 6E 74 29 ......INC(count)
00A5C0: 3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 ;.......END;....
00A5D0: 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 45 ..INC(j);......E
00A5E0: 4E 44 3B 0D 0A 09 09 09 49 46 20 63 6F 75 6E 74 ND;.....IF count
00A5F0: 3D 31 20 54 48 45 4E 0D 0A 0D 0A 09 09 09 28 2A =1 THEN.......(*
00A600: 0A 09 4C 69 73 74 3A 53 54 52 45 41 4D 3B 0D 0A ..List:STREAM;..
00A610: 09 4C 69 73 74 46 3A 46 49 4C 45 3B 0D 0A 09 72 .ListF:FILE;...r
00A620: 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 eply:INTEGER;...
00A630: 69 2C 6A 3A 49 4E 54 45 47 45 52 3B 0D 0A 0D 0A i,j:INTEGER;....
00A640: 09 4F 6C 64 73 3A 53 54 52 45 41 4D 3B 0D 0A 09 .Olds:STREAM;...
00A650: 4F 6C 64 66 3A 46 49 4C 45 3B 0D 0A 09 0D 0A 09 Oldf:FILE;......
00A660: 4E 65 77 73 3A 53 54 52 45 41 4D 3B 0D 0A 09 4E News:STREAM;...N
00A670: 65 77 66 3A 46 49 4C 45 3B 0D 0A 0D 0A 09 63 68 ewf:FILE;.....ch
00A680: 3A 43 48 41 52 3B 0D 0A 09 43 68 61 72 50 6F 73 :CHAR;...CharPos
00A690: 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 70 6F 73 :CARDINAL;.(*pos
00A6A0: 69 74 69 6F 6E 20 69 6E 20 6C 69 6E 65 2A 29 0D ition in line*).
00A6B0: 0A 09 0D 0A 0D 0A 28 2A 09 46 6F 72 20 65 61 63 ......(*.For eac
00A6C0: 68 20 66 69 6C 65 2C 20 77 65 20 68 61 76 65 20 h file, we have
00A6D0: 61 6E 20 61 72 72 61 79 20 6F 66 20 68 61 73 68 an array of hash
00A6E0: 20 74 6F 74 61 6C 73 20 66 6F 72 20 74 68 65 20 totals for the
00A6F0: 6C 69 6E 65 73 20 6F 66 20 74 68 65 20 66 69 6C lines of the fil
00A700: 65 0D 0A 09 55 73 69 6E 67 20 68 61 73 68 20 74 e...Using hash t
00A710: 6F 74 61 6C 73 20 69 6E 73 74 65 61 64 20 6F 66 otals instead of
00A720: 20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 6C 69 the original li
00A730: 6E 65 73 20 63 61 75 73 65 73 20 61 20 73 6C 69 nes causes a sli
00A740: 67 68 74 20 63 68 61 6E 63 65 0D 0A 09 74 68 61 ght chance...tha
00A750: 74 20 6C 69 6E 65 73 20 77 69 6C 6C 20 6D 61 74 t lines will mat
00A760: 63 68 20 77 68 65 6E 20 74 68 65 79 20 73 68 6F ch when they sho
00A770: 75 6C 64 20 6E 6F 74 2C 20 62 75 74 20 61 6C 6C uld not, but all
00A780: 6F 77 73 20 6C 61 72 67 65 72 20 66 69 6C 65 73 ows larger files
00A790: 0D 0A 09 74 6F 20 62 65 20 63 6F 6D 70 61 72 65 ...to be compare
00A7A0: 64 20 61 6E 64 20 61 6C 73 6F 20 6D 61 6B 65 73 d and also makes
00A7B0: 20 69 74 20 70 6F 73 73 69 62 6C 65 20 74 6F 20 it possible to
00A7C0: 65 78 74 65 6E 64 20 74 68 65 20 70 72 6F 67 72 extend the progr
00A7D0: 61 6D 20 69 6E 20 74 68 65 20 66 75 74 75 72 65 am in the future
00A7E0: 0D 0A 09 74 6F 20 77 6F 72 6B 20 77 69 74 68 20 ...to work with
00A7F0: 72 65 61 73 6F 6E 61 62 6C 65 20 73 70 65 65 64 reasonable speed
00A800: 09 74 68 65 20 6C 69 6E 65 73 20 61 72 65 20 75 .the lines are u
00A810: 6E 69 71 75 65 20 61 6E 64 20 74 68 65 79 20 6D nique and they m
00A820: 61 74 63 68 20 2D 20 73 65 74 20 75 70 20 63 72 atch - set up cr
00A830: 6F 73 73 20 70 6F 69 6E 74 65 72 73 2A 29 0D 0A oss pointers*)..
00A840: 0D 0A 09 09 09 09 4F 6C 64 4C 69 6E 6B 5B 6B 5D ......OldLink[k]
00A850: 3A 3D 69 3B 0D 0A 09 09 09 09 4E 65 77 4C 69 6E :=i;......NewLin
00A860: 6B 5B 69 5D 3A 3D 6B 3B 0D 0A 09 09 09 09 45 4E k[i]:=k;......EN
00A870: 44 3B 0D 0A 09 09 09 45 4E 44 3B 20 28 2A 49 46 D;.....END; (*IF
00A880: 20 63 6F 75 6E 74 3D 31 20 28 74 68 65 20 6F 75 count=1 (the ou
00A890: 74 65 72 20 6F 6E 65 29 2A 29 0D 0A 09 09 45 4E ter one)*)....EN
00A8A0: 44 3B 20 28 2A 46 4F 52 20 69 2A 29 0D 0A 0D 0A D; (*FOR i*)....
00A8B0: 09 28 2A 09 61 74 20 74 68 69 73 20 70 6F 69 6E .(*.at this poin
00A8C0: 74 2C 20 4E 65 77 4C 69 6E 6B 5B 69 5D 3D 6A 20 t, NewLink[i]=j
00A8D0: 3C 3D 3E 20 4F 6C 64 4C 69 6E 65 5B 6A 5D 3D 69 <=> OldLine[j]=i
00A8E0: 0D 0A 09 09 54 68 69 73 20 63 6F 6E 64 69 74 69 ....This conditi
00A8F0: 6F 6E 20 69 73 20 63 65 6E 74 72 61 6C 20 74 6F on is central to
00A900: 20 74 68 65 20 77 68 6F 6C 65 20 70 72 6F 67 72 the whole progr
00A910: 61 6D 09 2A 29 20 09 0D 0A 0D 0A 09 28 2A 09 6E am.*) ......(*.n
00A920: 6F 77 20 74 68 61 74 20 74 68 65 20 75 6E 69 71 ow that the uniq
00A930: 75 65 20 6C 69 6E 65 73 20 61 72 65 20 63 72 6F ue lines are cro
00A940: 73 73 2D 6C 69 6E 6B 65 64 2C 20 77 65 20 61 74 ss-linked, we at
00A950: 74 65 6D 70 74 20 74 6F 20 27 67 72 6F 77 27 0D tempt to 'grow'.
00A960: 0A 09 09 74 68 65 20 6C 69 6E 6B 73 20 6F 75 74 ...the links out
00A970: 77 61 72 64 73 20 66 72 6F 6D 20 74 68 65 20 63 wards from the c
00A980: 72 6F 73 73 2D 6C 69 6E 6B 65 64 20 6C 69 6E 65 ross-linked line
00A990: 73 2A 29 0D 0A 0D 0A 09 6B 3A 3D 31 3B 0D 0A 09 s*).....k:=1;...
00A9A0: 57 48 49 4C 45 20 28 6B 3C 3D 4F 6C 64 4C 65 6E WHILE (k<=OldLen
00A9B0: 29 20 44 4F 0D 0A 09 09 49 46 20 4E 65 77 4C 69 ) DO....IF NewLi
00A9C0: 6E 6B 5B 6B 5D 3C 3E 30 20 54 48 45 4E 20 0D 0A nk[k]<>0 THEN ..
00A9D0: 0D 0A 09 09 09 28 2A 67 72 6F 77 20 62 61 63 6B .....(*grow back
00A9E0: 77 61 72 64 73 2A 29 0D 0A 0D 0A 09 09 09 6A 3A wards*).......j:
00A9F0: 3D 4E 65 77 4C 69 6E 6B 5B 6B 5D 2D 31 3B 0D 0A =NewLink[k]-1;..
00AA00: 20 77 68 65 6E 20 6F 6E 65 20 6F 66 20 74 68 65 when one of the
00AA10: 20 66 69 6C 65 73 20 69 73 20 6F 6E 20 61 20 72 files is on a r
00AA20: 65 6D 6F 74 65 20 6D 61 63 68 69 6E 65 0D 0A 09 emote machine...
00AA30: 73 69 6E 63 65 20 74 68 65 6E 20 6F 6E 6C 79 20 since then only
00AA40: 74 68 65 20 68 61 73 68 20 74 6F 74 61 6C 73 20 the hash totals
00AA50: 61 6E 64 20 74 68 65 20 61 6C 74 65 72 65 64 20 and the altered
00AA60: 6C 69 6E 65 73 20 6E 65 65 64 20 74 6F 20 62 65 lines need to be
00AA70: 20 74 72 61 6E 73 6D 69 74 74 65 64 2A 29 0D 0A transmitted*)..
00AA80: 0D 0A 54 59 50 45 09 48 61 73 68 41 72 72 61 79 ..TYPE.HashArray
00AA90: 3D 41 52 52 41 59 5B 31 2E 2E 4D 61 78 46 69 6C =ARRAY[1..MaxFil
00AAA0: 65 53 69 7A 65 5D 20 4F 46 20 43 41 52 44 49 4E eSize] OF CARDIN
00AAB0: 41 4C 3B 0D 0A 56 41 52 09 4F 6C 64 48 61 73 68 AL;..VAR.OldHash
00AAC0: 2C 4E 65 77 48 61 73 68 3A 48 61 73 68 41 72 72 ,NewHash:HashArr
00AAD0: 61 79 3B 0D 0A 09 4F 6C 64 4C 65 6E 2C 4E 65 77 ay;...OldLen,New
00AAE0: 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 50 Len:CARDINAL;..P
00AAF0: 52 4F 43 45 44 55 52 45 20 43 61 6C 63 48 61 73 ROCEDURE CalcHas
00AB00: 68 28 56 41 52 09 54 65 78 74 3A 41 52 52 41 59 h(VAR.Text:ARRAY
00AB10: 20 4F 46 20 43 48 41 52 29 3A 43 41 52 44 49 4E OF CHAR):CARDIN
00AB20: 41 4C 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 AL;..VAR.i,j:CAR
00AB30: 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 DINAL;..BEGIN...
00AB40: 69 3A 3D 30 3B 0D 0A 09 6A 3A 3D 30 3B 0D 0A 09 i:=0;...j:=0;...
00AB50: 57 48 49 4C 45 20 28 69 3C 3D 48 49 47 48 28 54 WHILE (i<=HIGH(T
00AB60: 65 78 74 29 29 20 41 4E 44 20 28 54 65 78 74 5B ext)) AND (Text[
00AB70: 69 5D 3C 3E 30 78 29 20 44 4F 0D 0A 0D 0A 09 09 i]<>0x) DO......
00AB80: 28 2A 09 61 64 64 20 79 6F 75 72 20 66 61 76 6F (*.add your favo
00AB90: 75 72 69 74 65 20 68 61 73 68 69 6E 67 20 66 75 urite hashing fu
00ABA0: 6E 63 74 69 6F 6E 20 68 65 72 65 2A 29 0D 0A 0D nction here*)...
00ABB0: 0A 09 09 6A 3A 3D 33 2A 6A 2B 4F 52 44 28 54 65 ...j:=3*j+ORD(Te
00ABC0: 78 74 5B 69 5D 29 3B 0D 0A 09 09 49 4E 43 28 69 xt[i]);....INC(i
00ABD0: 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54 );....END;...RET
00ABE0: 55 52 4E 20 6A 3B 0D 0A 09 45 4E 44 20 43 61 6C URN j;...END Cal
00ABF0: 63 48 61 73 68 3B 0D 0A 50 52 4F 43 45 44 55 52 cHash;..PROCEDUR
00AC00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
00AC10: 09 00 01 00 02 09 52 E5 09 00 41 02 00 00 00 02 ......R...A.....
00AC20: 09 00 46 02 00 00 00 02 09 00 42 02 00 00 00 02 ..F.......B.....
00AC30: 09 00 47 02 00 00 00 02 09 00 43 02 00 00 00 02 ..G.......C.....
00AC40: 09 00 48 02 00 00 00 02 09 00 44 02 00 00 00 02 ..H.......D.....
00AC50: 09 00 49 02 00 00 00 02 09 00 45 02 00 00 00 02 ..I.......E.....
00AC60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00AC70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00AC80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00AC90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00ACF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00AD00: 09 09 09 69 3A 3D 6B 2D 31 3B 0D 0A 09 09 09 57 ...i:=k-1;.....W
00AD10: 48 49 4C 45 20 28 6A 3E 30 29 20 41 4E 44 20 28 HILE (j>0) AND (
00AD20: 69 3E 30 29 20 41 4E 44 20 28 4F 6C 64 4C 69 6E i>0) AND (OldLin
00AD30: 6B 5B 6A 2B 31 5D 3D 69 2B 31 29 0D 0A 09 09 09 k[j+1]=i+1).....
00AD40: 09 41 4E 44 20 28 4E 65 77 48 61 73 68 5B 6A 5D .AND (NewHash[j]
00AD50: 3D 4F 6C 64 48 61 73 68 5B 69 5D 29 20 0D 0A 09 =OldHash[i]) ...
00AD60: 09 09 09 41 4E 44 20 28 4F 6C 64 4C 69 6E 6B 5B ...AND (OldLink[
00AD70: 6A 5D 3D 30 29 20 41 4E 44 20 28 4E 65 77 4C 69 j]=0) AND (NewLi
00AD80: 6E 6B 5B 69 5D 3D 30 29 20 44 4F 0D 0A 09 09 09 nk[i]=0) DO.....
00AD90: 09 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3A 3D 69 3B 0D .OldLink[j]:=i;.
00ADA0: 0A 09 09 09 09 4E 65 77 4C 69 6E 6B 5B 69 5D 3A .....NewLink[i]:
00ADB0: 3D 6A 3B 0D 0A 0D 0A 09 09 09 09 28 2A 20 6E 6F =j;........(* no
00ADC0: 74 65 20 63 65 6E 74 72 61 6C 20 70 72 65 64 69 te central predi
00ADD0: 63 61 74 65 20 73 74 69 6C 6C 20 73 61 74 69 73 cate still satis
00ADE0: 66 69 65 64 2A 29 0D 0A 0D 0A 09 09 09 09 44 45 fied*)........DE
00ADF0: 43 28 69 29 3B 0D 0A 09 09 09 09 44 45 43 28 6A C(i);......DEC(j
00AE00: 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 );......END;....
00AE10: 09 6A 3A 3D 4E 65 77 4C 69 6E 6B 5B 6B 5D 2B 31 .j:=NewLink[k]+1
00AE20: 3B 0D 0A 09 09 09 69 3A 3D 6B 2B 31 3B 0D 0A 0D ;.....i:=k+1;...
00AE30: 0A 09 09 09 28 2A 67 72 6F 77 20 66 6F 72 77 61 ....(*grow forwa
00AE40: 72 64 73 20 2D 20 28 73 6C 69 67 68 74 20 6F 70 rds - (slight op
00AE50: 74 69 6D 69 73 61 74 69 6F 6E 29 20 74 68 65 72 timisation) ther
00AE60: 65 20 69 73 20 6E 6F 20 6E 65 65 64 20 74 6F 0D e is no need to.
00AE70: 0A 09 09 09 20 20 63 68 65 63 6B 20 66 6F 72 20 .... check for
00AE80: 6E 6F 6E 7A 65 72 6F 20 6C 69 6E 6B 73 20 6F 6E nonzero links on
00AE90: 20 74 68 65 20 66 6F 72 77 61 72 64 20 70 61 73 the forward pas
00AEA0: 73 20 73 69 6E 63 65 20 6E 6F 6E 2D 7A 65 72 6F s since non-zero
00AEB0: 20 6C 69 6E 6B 73 0D 0A 09 09 09 20 20 3D 3E 4C links..... =>L
00AEC0: 69 6E 65 73 20 6D 61 74 63 68 20 61 6E 64 20 61 ines match and a
00AED0: 72 65 20 75 6E 69 71 75 65 2C 20 61 6E 64 20 74 re unique, and t
00AEE0: 68 65 20 62 61 63 6B 20 70 61 73 73 20 77 6F 75 he back pass wou
00AEF0: 6C 64 20 62 65 20 65 6D 70 74 79 2A 29 0D 0A 0D ld be empty*)...
00AF00: 74 65 45 6F 6C 3B 0D 0A 09 45 4E 44 20 49 6E 73 teEol;...END Ins
00AF10: 65 72 74 65 64 3B 0D 0A 50 52 4F 43 45 44 55 52 erted;..PROCEDUR
00AF20: 45 20 4E 6F 43 68 61 6E 67 65 3B 0D 0A 42 45 47 E NoChange;..BEG
00AF30: 49 4E 0D 0A 09 47 65 74 4C 69 6E 65 28 4E 65 77 IN...GetLine(New
00AF40: 73 2C 6E 65 77 6C 69 6E 65 29 3B 0D 0A 09 47 65 s,newline);...Ge
00AF50: 74 4C 69 6E 65 28 4F 6C 64 73 2C 6F 6C 64 6C 69 tLine(Olds,oldli
00AF60: 6E 65 29 3B 09 0D 0A 09 50 72 69 6E 74 28 6E 65 ne);....Print(ne
00AF70: 77 6C 69 6E 65 29 3B 0D 0A 09 57 72 69 74 65 45 wline);...WriteE
00AF80: 6F 6C 0D 0A 09 45 4E 44 20 4E 6F 43 68 61 6E 67 ol...END NoChang
00AF90: 65 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 e;....PROCEDURE
00AFA0: 42 6C 6F 63 6B 4D 6F 76 65 3B 0D 0A 56 41 52 20 BlockMove;..VAR
00AFB0: 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 i:CARDINAL;..BEG
00AFC0: 49 4E 0D 0A 09 46 4F 52 20 69 3A 3D 31 20 54 4F IN...FOR i:=1 TO
00AFD0: 20 32 35 20 44 4F 20 57 72 69 74 65 43 68 61 72 25 DO WriteChar
00AFE0: 28 4C 69 73 74 2C 27 2A 27 29 20 45 4E 44 3B 0D (List,'*') END;.
00AFF0: 0A 09 50 72 69 6E 74 28 27 20 42 6C 6F 63 6B 20 ..Print(' Block
00B000: 6D 6F 76 65 64 20 66 72 6F 6D 20 6C 69 6E 65 20 moved from line
00B010: 27 29 3B 0D 0A 09 53 77 69 74 63 68 4F 75 74 53 ');...SwitchOutS
00B020: 74 72 65 61 6D 28 4C 69 73 74 29 3B 0D 0A 09 57 tream(List);...W
00B030: 72 69 74 65 43 61 72 64 28 4F 6C 64 4C 69 6E 6B riteCard(OldLink
00B040: 5B 6E 65 77 69 6E 64 65 78 5D 2C 36 29 3B 0D 0A [newindex],6);..
00B050: 09 50 6F 70 4F 75 74 53 74 72 65 61 6D 3B 0D 0A .PopOutStream;..
00B060: 09 46 4F 52 20 69 3A 3D 32 35 2B 32 39 2B 31 20 .FOR i:=25+29+1
00B070: 54 4F 20 37 39 20 44 4F 20 57 72 69 74 65 43 68 TO 79 DO WriteCh
00B080: 61 72 28 4C 69 73 74 2C 27 2A 27 29 20 45 4E 44 ar(List,'*') END
00B090: 3B 0D 0A 09 57 72 69 74 65 45 6F 6C 3B 0D 0A 09 ;...WriteEol;...
00B0A0: 69 3A 3D 4F 6C 64 4C 69 6E 6B 5B 6E 65 77 69 6E i:=OldLink[newin
00B0B0: 64 65 78 5D 3B 0D 0A 09 57 48 49 4C 45 20 28 6E dex];...WHILE (n
00B0C0: 65 77 69 6E 64 65 78 3C 3D 4E 65 77 4C 65 6E 29 ewindex<=NewLen)
00B0D0: 20 41 4E 44 20 28 69 3D 4F 6C 64 4C 69 6E 6B 5B AND (i=OldLink[
00B0E0: 6E 65 77 69 6E 64 65 78 5D 29 20 44 4F 0D 0A 09 newindex]) DO...
00B0F0: 09 47 65 74 4C 69 6E 65 28 4E 65 77 73 2C 6E 65 .GetLine(News,ne
00B100: 0A 09 09 09 57 48 49 4C 45 20 28 6A 3C 3D 4E 65 ....WHILE (j<=Ne
00B110: 77 4C 65 6E 29 20 41 4E 44 20 28 69 3C 3D 4F 6C wLen) AND (i<=Ol
00B120: 64 4C 65 6E 29 20 41 4E 44 20 28 4F 6C 64 4C 69 dLen) AND (OldLi
00B130: 6E 6B 5B 6A 2D 31 5D 3D 69 2D 31 29 20 0D 0A 09 nk[j-1]=i-1) ...
00B140: 09 09 09 41 4E 44 20 28 4E 65 77 48 61 73 68 5B ...AND (NewHash[
00B150: 6A 5D 3D 4F 6C 64 48 61 73 68 5B 69 5D 29 20 44 j]=OldHash[i]) D
00B160: 4F 0D 0A 09 09 09 09 4F 6C 64 4C 69 6E 6B 5B 6A O......OldLink[j
00B170: 5D 3A 3D 69 3B 0D 0A 09 09 09 09 4E 65 77 4C 69 ]:=i;......NewLi
00B180: 6E 6B 5B 69 5D 3A 3D 6A 3B 0D 0A 0D 0A 09 09 09 nk[i]:=j;.......
00B190: 09 28 2A 73 74 69 6C 6C 20 68 6F 6C 64 73 2A 29 .(*still holds*)
00B1A0: 0D 0A 20 09 09 09 09 49 4E 43 28 69 29 3B 0D 0A .. ....INC(i);..
00B1B0: 09 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 ....INC(j);.....
00B1C0: 09 45 4E 44 3B 0D 0A 09 09 09 6B 3A 3D 69 3B 0D .END;.....k:=i;.
00B1D0: 0A 09 09 45 4C 53 45 09 49 4E 43 28 6B 29 0D 0A ...ELSE.INC(k)..
00B1E0: 09 09 09 45 4E 44 20 28 2A 57 48 49 4C 45 20 6B ...END (*WHILE k
00B1F0: 3C 3D 4F 6C 64 4C 65 6E 2A 29 3B 0D 0A 09 09 45 <=OldLen*);....E
00B200: 4E 44 3B 0D 0A 0D 0A 09 28 2A 67 72 6F 77 20 66 ND;.....(*grow f
00B210: 6F 72 77 61 72 64 73 20 66 72 6F 6D 20 62 65 67 orwards from beg
00B220: 69 6E 6E 69 6E 67 20 6F 66 20 66 69 6C 65 73 2A inning of files*
00B230: 29 0D 0A 0D 0A 09 69 3A 3D 31 3B 0D 0A 09 6A 3A ).....i:=1;...j:
00B240: 3D 31 3B 0D 0A 09 57 48 49 4C 45 20 28 69 3C 3D =1;...WHILE (i<=
00B250: 4F 6C 64 4C 65 6E 29 20 41 4E 44 20 28 6A 3C 3D OldLen) AND (j<=
00B260: 4E 65 77 4C 65 6E 29 20 0D 0A 09 09 41 4E 44 20 NewLen) ....AND
00B270: 28 4F 6C 64 48 61 73 68 5B 69 5D 3D 4E 65 77 48 (OldHash[i]=NewH
00B280: 61 73 68 5B 6A 5D 29 20 0D 0A 09 09 41 4E 44 20 ash[j]) ....AND
00B290: 28 4E 65 77 4C 69 6E 6B 5B 69 5D 3D 30 29 20 41 (NewLink[i]=0) A
00B2A0: 4E 44 20 28 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3D 30 ND (OldLink[j]=0
00B2B0: 29 20 44 4F 0D 0A 0D 0A 09 09 28 2A 74 68 65 20 ) DO......(*the
00B2C0: 6C 61 73 74 20 6C 69 6E 65 20 6F 66 20 74 68 65 last line of the
00B2D0: 20 63 6F 6E 64 69 74 69 6F 6E 20 69 73 20 70 72 condition is pr
00B2E0: 6F 62 61 62 6C 79 20 6E 6F 74 0D 0A 09 09 20 20 obably not....
00B2F0: 6E 65 63 65 73 73 61 72 79 2C 20 62 75 74 20 61 necessary, but a
00B300: 77 6C 69 6E 65 29 3B 0D 0A 09 09 50 72 69 6E 74 wline);....Print
00B310: 28 6E 65 77 6C 69 6E 65 29 3B 0D 0A 09 09 57 72 (newline);....Wr
00B320: 69 74 65 45 6F 6C 3B 0D 0A 09 09 49 4E 43 28 6E iteEol;....INC(n
00B330: 65 77 69 6E 64 65 78 29 3B 0D 0A 09 09 49 4E 43 ewindex);....INC
00B340: 28 69 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 46 (i);....END;...F
00B350: 4F 52 20 69 3A 3D 31 20 54 4F 20 37 39 20 44 4F OR i:=1 TO 79 DO
00B360: 20 57 72 69 74 65 43 68 61 72 28 4C 69 73 74 2C WriteChar(List,
00B370: 27 2A 27 29 20 45 4E 44 3B 0D 0A 09 57 72 69 74 '*') END;...Writ
00B380: 65 45 6F 6C 3B 0D 0A 09 45 4E 44 20 42 6C 6F 63 eEol;...END Bloc
00B390: 6B 4D 6F 76 65 3B 0D 0A 0D 0A 42 45 47 49 4E 0D kMove;....BEGIN.
00B3A0: 0A 09 0D 0A 09 6F 6C 64 69 6E 64 65 78 3A 3D 31 .....oldindex:=1
00B3B0: 3B 09 28 2A 63 75 72 72 65 6E 74 20 6C 69 6E 65 ;.(*current line
00B3C0: 20 69 6E 20 6F 6C 64 20 66 69 6C 65 2A 29 0D 0A in old file*)..
00B3D0: 09 6E 65 77 69 6E 64 65 78 3A 3D 31 3B 09 28 2A .newindex:=1;.(*
00B3E0: 63 75 72 72 65 6E 74 20 6C 69 6E 65 20 69 6E 20 current line in
00B3F0: 6E 65 77 20 62 75 66 66 65 72 2A 29 0D 0A 0D 0A new buffer*)....
00B400: 09 28 2A 09 43 61 75 74 69 6F 6E 3A 20 57 65 6C .(*.Caution: Wel
00B410: 6C 20 63 6F 6D 6D 65 6E 74 65 64 20 63 6F 64 65 l commented code
00B420: 20 61 68 65 61 64 0D 0A 09 09 09 20 50 72 6F 67 ahead..... Prog
00B430: 72 61 6D 6D 65 72 20 70 72 6F 62 61 62 6C 79 20 rammer probably
00B440: 64 69 64 6E 27 74 20 75 6E 64 65 72 73 74 61 6E didn't understan
00B450: 64 20 77 68 61 74 20 68 65 20 77 61 73 20 64 6F d what he was do
00B460: 69 6E 67 20 0D 0A 09 09 0D 0A 09 09 2A 29 0D 0A ing ........*)..
00B470: 09 57 48 49 4C 45 20 28 6F 6C 64 69 6E 64 65 78 .WHILE (oldindex
00B480: 3C 3D 4F 6C 64 4C 65 6E 29 20 4F 52 20 28 6E 65 <=OldLen) OR (ne
00B490: 77 69 6E 64 65 78 3C 3D 4E 65 77 4C 65 6E 29 20 windex<=NewLen)
00B4A0: 44 4F 0D 0A 09 09 28 2A 09 66 69 72 73 74 20 63 DO....(*.first c
00B4B0: 68 65 63 6B 20 69 66 20 65 69 74 68 65 72 20 69 heck if either i
00B4C0: 6E 64 65 78 20 69 73 20 6F 66 66 20 65 6E 64 0D ndex is off end.
00B4D0: 0A 09 09 09 6F 66 20 66 69 6C 65 2A 29 0D 0A 09 ....of file*)...
00B4E0: 0D 0A 09 09 49 46 20 6E 65 77 69 6E 64 65 78 3E ....IF newindex>
00B4F0: 4E 65 77 4C 65 6E 20 54 48 45 4E 20 0D 0A 09 09 NewLen THEN ....
00B500: 76 6F 69 64 73 20 77 6F 72 72 79 69 6E 67 20 61 voids worrying a
00B510: 62 6F 75 74 20 70 61 74 68 6F 6C 6F 67 69 63 61 bout pathologica
00B520: 6C 20 63 61 73 65 2A 29 0D 0A 0D 0A 09 09 4E 65 l case*)......Ne
00B530: 77 4C 69 6E 6B 5B 69 5D 3A 3D 6A 3B 0D 0A 09 09 wLink[i]:=j;....
00B540: 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3A 3D 69 3B 0D 0A OldLink[j]:=i;..
00B550: 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 49 4E 43 ..INC(i);....INC
00B560: 28 6A 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A (j);....END;....
00B570: 09 28 2A 67 72 6F 77 20 62 61 63 6B 77 61 72 64 .(*grow backward
00B580: 73 20 66 72 6F 6D 20 65 6E 64 20 6F 66 20 66 69 s from end of fi
00B590: 6C 65 73 2A 29 0D 0A 09 69 3A 3D 4F 6C 64 4C 65 les*)...i:=OldLe
00B5A0: 6E 3B 0D 0A 09 6A 3A 3D 4E 65 77 4C 65 6E 3B 0D n;...j:=NewLen;.
00B5B0: 0A 09 57 48 49 4C 45 20 28 69 3E 30 29 20 41 4E ..WHILE (i>0) AN
00B5C0: 44 20 28 6A 3E 30 29 20 0D 0A 09 09 41 4E 44 20 D (j>0) ....AND
00B5D0: 28 4F 6C 64 48 61 73 68 5B 69 5D 3D 4E 65 77 48 (OldHash[i]=NewH
00B5E0: 61 73 68 5B 6A 5D 29 0D 0A 09 09 41 4E 44 20 28 ash[j])....AND (
00B5F0: 4E 65 77 4C 69 6E 6B 5B 69 5D 3D 30 29 20 41 4E NewLink[i]=0) AN
00B600: 44 20 28 4F 6C 64 4C 69 6E 6B 5B 6A 5D 3D 30 29 D (OldLink[j]=0)
00B610: 20 44 4F 0D 0A 09 09 4E 65 77 4C 69 6E 6B 5B 69 DO....NewLink[i
00B620: 5D 3A 3D 6A 3B 0D 0A 09 09 4F 6C 64 4C 69 6E 6B ]:=j;....OldLink
00B630: 5B 6A 5D 3A 3D 69 3B 0D 0A 09 09 44 45 43 28 69 [j]:=i;....DEC(i
00B640: 29 3B 0D 0A 09 09 44 45 43 28 6A 29 3B 0D 0A 09 );....DEC(j);...
00B650: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 47 65 6E 65 .END;...END Gene
00B660: 72 61 74 65 4C 69 6E 6B 73 3B 0D 0A 0D 0A 0D 0A rateLinks;......
00B670: 50 52 4F 43 45 44 55 52 45 20 57 72 69 74 65 52 PROCEDURE WriteR
00B680: 65 73 75 6C 74 73 3B 0D 0A 56 41 52 09 6F 6C 64 esults;..VAR.old
00B690: 69 6E 64 65 78 2C 6E 65 77 69 6E 64 65 78 3A 43 index,newindex:C
00B6A0: 41 52 44 49 4E 41 4C 3B 0D 0A 09 6F 6C 64 6C 69 ARDINAL;...oldli
00B6B0: 6E 65 2C 6E 65 77 6C 69 6E 65 3A 41 52 52 41 59 ne,newline:ARRAY
00B6C0: 20 5B 31 2E 2E 38 30 5D 20 4F 46 20 43 48 41 52 [1..80] OF CHAR
00B6D0: 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 ;....PROCEDURE G
00B6E0: 65 74 4C 69 6E 65 28 56 41 52 20 73 3A 53 54 52 etLine(VAR s:STR
00B6F0: 45 41 4D 3B 56 41 52 20 6C 3A 41 52 52 41 59 20 EAM;VAR l:ARRAY
00B700: 09 44 65 6C 65 74 65 64 3B 0D 0A 09 09 09 49 4E .Deleted;.....IN
00B710: 43 28 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 09 09 C(oldindex);....
00B720: 45 4C 53 49 46 20 6F 6C 64 69 6E 64 65 78 3E 4F ELSIF oldindex>O
00B730: 6C 64 4C 65 6E 20 54 48 45 4E 0D 0A 09 09 09 49 ldLen THEN.....I
00B740: 6E 73 65 72 74 65 64 3B 0D 0A 09 09 09 49 4E 43 nserted;.....INC
00B750: 28 6E 65 77 69 6E 64 65 78 29 3B 0D 0A 09 09 45 (newindex);....E
00B760: 4C 53 49 46 20 4E 65 77 4C 69 6E 6B 5B 6F 6C 64 LSIF NewLink[old
00B770: 69 6E 64 65 78 5D 3D 30 20 54 48 45 4E 0D 0A 09 index]=0 THEN...
00B780: 09 09 44 65 6C 65 74 65 64 3B 0D 0A 09 09 09 49 ..Deleted;.....I
00B790: 4E 43 28 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 09 NC(oldindex);...
00B7A0: 09 45 4C 53 49 46 20 4F 6C 64 4C 69 6E 6B 5B 6E .ELSIF OldLink[n
00B7B0: 65 77 69 6E 64 65 78 5D 3D 30 20 54 48 45 4E 0D ewindex]=0 THEN.
00B7C0: 0A 09 09 09 49 6E 73 65 72 74 65 64 3B 0D 0A 09 ....Inserted;...
00B7D0: 09 09 49 4E 43 28 6E 65 77 69 6E 64 65 78 29 3B ..INC(newindex);
00B7E0: 0D 0A 0D 0A 09 09 28 2A 09 69 66 20 70 6F 69 6E ......(*.if poin
00B7F0: 74 65 72 73 20 6D 61 74 63 68 2C 20 6C 69 6E 65 ters match, line
00B800: 20 69 73 20 75 6E 63 68 61 6E 67 65 64 0D 0A 09 is unchanged...
00B810: 09 09 6F 72 20 69 66 20 61 20 70 6F 69 6E 74 65 ..or if a pointe
00B820: 72 20 69 73 20 7A 65 72 6F 2C 20 6C 69 6E 65 20 r is zero, line
00B830: 69 73 20 6E 65 77 20 6F 72 20 64 65 6C 65 74 65 is new or delete
00B840: 64 2A 29 0D 0A 0D 0A 09 09 45 4C 53 49 46 20 28 d*)......ELSIF (
00B850: 4E 65 77 4C 69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 NewLink[oldindex
00B860: 5D 3D 6E 65 77 69 6E 64 65 78 29 20 0D 0A 09 09 ]=newindex) ....
00B870: 20 20 20 20 41 4E 44 20 28 4F 6C 64 4C 69 6E 6B AND (OldLink
00B880: 5B 6E 65 77 69 6E 64 65 78 5D 3D 6F 6C 64 69 6E [newindex]=oldin
00B890: 64 65 78 29 20 54 48 45 4E 0D 0A 09 09 09 4E 6F dex) THEN.....No
00B8A0: 43 68 61 6E 67 65 3B 0D 0A 09 09 09 49 4E 43 28 Change;.....INC(
00B8B0: 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 09 09 09 49 oldindex);.....I
00B8C0: 4E 43 28 6E 65 77 69 6E 64 65 78 29 3B 0D 0A 0D NC(newindex);...
00B8D0: 0A 0D 0A 28 2A 09 09 20 20 6E 6F 6E 65 20 6F 66 ...(*.. none of
00B8E0: 20 74 68 65 20 61 62 6F 76 65 3A 20 70 6F 69 6E the above: poin
00B8F0: 74 65 72 73 20 64 6F 6E 27 74 20 6D 61 74 63 68 ters don't match
00B900: 4F 46 20 43 48 41 52 29 3B 0D 0A 42 45 47 49 4E OF CHAR);..BEGIN
00B910: 0D 0A 09 53 77 69 74 63 68 49 6E 53 74 72 65 61 ...SwitchInStrea
00B920: 6D 28 73 29 3B 0D 0A 09 52 65 61 64 4C 69 6E 65 m(s);...ReadLine
00B930: 28 6C 29 3B 0D 0A 09 50 6F 70 49 6E 53 74 72 65 (l);...PopInStre
00B940: 61 6D 3B 0D 0A 09 45 4E 44 20 47 65 74 4C 69 6E am;...END GetLin
00B950: 65 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 e;....PROCEDURE
00B960: 50 72 69 6E 74 28 61 3A 41 52 52 41 59 20 4F 46 Print(a:ARRAY OF
00B970: 20 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09 4F 75 CHAR);....(*.Ou
00B980: 74 70 75 74 20 61 20 6C 69 6E 65 20 74 72 75 6E tput a line trun
00B990: 63 61 74 69 6E 67 20 74 72 61 69 6C 69 6E 67 20 cating trailing
00B9A0: 73 70 61 63 65 73 2A 29 0D 0A 0D 0A 56 41 52 20 spaces*)....VAR
00B9B0: 09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .i,j:CARDINAL;..
00B9C0: 42 45 47 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 BEGIN...i:=0;...
00B9D0: 6A 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 28 69 j:=0;...WHILE (i
00B9E0: 3C 3D 48 49 47 48 28 61 29 29 20 41 4E 44 20 28 <=HIGH(a)) AND (
00B9F0: 61 5B 69 5D 3C 3E 30 78 29 20 44 4F 0D 0A 09 09 a[i]<>0x) DO....
00BA00: 49 46 20 61 5B 69 5D 3C 3E 27 20 27 20 54 48 45 IF a[i]<>' ' THE
00BA10: 4E 0D 0A 09 09 09 46 4F 52 20 6A 3A 3D 6A 20 54 N.....FOR j:=j T
00BA20: 4F 20 69 20 44 4F 20 57 72 69 74 65 43 68 61 72 O i DO WriteChar
00BA30: 28 4C 69 73 74 2C 61 5B 6A 5D 29 20 45 4E 44 3B (List,a[j]) END;
00BA40: 0D 0A 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 .....INC(j);....
00BA50: 09 45 4E 44 3B 0D 0A 09 09 49 4E 43 28 69 29 3B .END;....INC(i);
00BA60: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 0D 0A 09 45 4E ....END;......EN
00BA70: 44 20 50 72 69 6E 74 3B 0D 0A 0D 0A 50 52 4F 43 D Print;....PROC
00BA80: 45 44 55 52 45 20 57 72 69 74 65 45 6F 6C 3B 0D EDURE WriteEol;.
00BA90: 0A 42 45 47 49 4E 0D 0A 28 2A 09 64 65 62 75 67 .BEGIN..(*.debug
00BAA0: 20 63 6F 64 65 20 63 6F 6D 6D 65 6E 74 65 64 20 code commented
00BAB0: 6F 75 74 0D 0A 0D 0A 09 53 77 69 74 63 68 4F 75 out.....SwitchOu
00BAC0: 74 53 74 72 65 61 6D 28 4C 69 73 74 29 3B 0D 0A tStream(List);..
00BAD0: 09 57 72 69 74 65 43 61 72 64 28 6F 6C 64 69 6E .WriteCard(oldin
00BAE0: 64 65 78 2C 36 29 3B 57 72 69 74 65 43 61 72 64 dex,6);WriteCard
00BAF0: 28 4E 65 77 4C 69 6E 6B 5B 6F 6C 64 69 6E 64 65 (NewLink[oldinde
00BB00: 20 62 75 74 0D 0A 09 09 20 20 65 61 63 68 20 70 but.... each p
00BB10: 6F 69 6E 74 65 72 20 70 6F 69 6E 74 73 20 73 6F ointer points so
00BB20: 6D 65 77 68 65 72 65 0D 0A 0D 0A 09 09 20 20 49 mewhere...... I
00BB30: 66 20 74 68 65 20 74 65 78 74 20 69 6E 20 74 68 f the text in th
00BB40: 65 20 6E 65 77 20 66 69 6C 65 20 70 6F 69 6E 74 e new file point
00BB50: 65 64 20 74 6F 20 62 79 20 74 68 65 20 6F 6C 64 ed to by the old
00BB60: 20 66 69 6C 65 20 68 61 73 0D 0A 09 09 20 20 62 file has.... b
00BB70: 65 65 6E 20 70 61 73 73 65 64 2C 20 69 74 20 68 een passed, it h
00BB80: 61 73 20 61 6C 72 65 61 64 79 20 62 65 65 6E 20 as already been
00BB90: 77 72 69 74 74 65 6E 20 73 6F 20 77 65 20 69 67 written so we ig
00BBA0: 6E 6F 72 65 20 74 68 65 0D 0A 09 09 20 20 6F 6C nore the.... ol
00BBB0: 64 20 6C 69 6E 65 20 61 6E 64 20 6C 6F 6F 6B 20 d line and look
00BBC0: 66 6F 72 20 73 6F 6D 65 74 68 69 6E 67 20 6D 6F for something mo
00BBD0: 72 65 20 69 6E 74 65 72 65 73 74 69 6E 67 20 28 re interesting (
00BBE0: 65 2E 67 2E 20 0D 0A 09 09 20 20 61 20 53 63 6F e.g. .... a Sco
00BBF0: 74 73 6D 61 6E 20 77 69 6E 6E 69 6E 67 20 57 69 tsman winning Wi
00BC00: 6D 62 6C 65 64 6F 6E 29 0D 0A 0D 0A 09 09 20 20 mbledon)......
00BC10: 42 65 63 61 75 73 65 20 6F 66 20 74 68 65 20 63 Because of the c
00BC20: 65 6E 74 72 61 6C 20 70 72 65 64 69 63 61 74 65 entral predicate
00BC30: 2C 20 77 65 20 6B 6E 6F 77 20 74 68 61 74 0D 0A , we know that..
00BC40: 0D 0A 09 09 20 20 4E 65 77 4C 69 6E 6B 5B 4F 6C .... NewLink[Ol
00BC50: 64 4C 69 6E 6B 5B 6E 65 77 69 6E 64 65 78 5D 5D dLink[newindex]]
00BC60: 3D 6E 65 77 69 6E 64 65 78 0D 0A 09 09 20 61 6E =newindex.... an
00BC70: 64 0D 0A 09 09 20 20 4F 6C 64 4C 69 6E 6B 5B 4E d.... OldLink[N
00BC80: 65 77 4C 69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 5D ewLink[oldindex]
00BC90: 5D 3D 6F 6C 64 69 6E 64 65 78 0D 0A 0D 0A 2A 29 ]=oldindex....*)
00BCA0: 0D 0A 0D 0A 09 09 45 4C 53 49 46 20 4E 65 77 4C ......ELSIF NewL
00BCB0: 69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 5D 3C 6E 65 ink[oldindex]<ne
00BCC0: 77 69 6E 64 65 78 20 54 48 45 4E 0D 0A 09 09 09 windex THEN.....
00BCD0: 53 6B 69 70 4F 6C 64 3B 0D 0A 09 09 09 49 4E 43 SkipOld;.....INC
00BCE0: 28 6F 6C 64 69 6E 64 65 78 29 3B 0D 0A 0D 0A 28 (oldindex);....(
00BCF0: 2A 20 09 09 20 20 20 73 6F 20 4E 65 77 4C 69 6E * .. so NewLin
00BD00: 78 5D 2C 36 29 3B 0D 0A 09 57 72 69 74 65 43 61 x],6);...WriteCa
00BD10: 72 64 28 6E 65 77 69 6E 64 65 78 2C 36 29 3B 57 rd(newindex,6);W
00BD20: 72 69 74 65 43 61 72 64 28 4F 6C 64 4C 69 6E 6B riteCard(OldLink
00BD30: 5B 6E 65 77 69 6E 64 65 78 5D 2C 36 29 3B 0D 0A [newindex],6);..
00BD40: 09 50 6F 70 4F 75 74 53 74 72 65 61 6D 3B 0D 0A .PopOutStream;..
00BD50: 2A 29 0D 0A 09 57 72 69 74 65 43 68 61 72 28 4C *)...WriteChar(L
00BD60: 69 73 74 2C 30 64 78 29 3B 0D 0A 09 57 72 69 74 ist,0dx);...Writ
00BD70: 65 43 68 61 72 28 4C 69 73 74 2C 30 61 78 29 3B eChar(List,0ax);
00BD80: 0D 0A 09 45 4E 44 20 57 72 69 74 65 45 6F 6C 3B ...END WriteEol;
00BD90: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65 ....PROCEDURE De
00BDA0: 6C 65 74 65 64 3B 0D 0A 0D 0A 28 2A 09 50 72 69 leted;....(*.Pri
00BDB0: 6E 74 20 6F 75 74 20 61 20 6C 69 6E 65 20 66 72 nt out a line fr
00BDC0: 6F 6D 20 74 68 65 20 6F 6C 64 20 66 69 6C 65 2A om the old file*
00BDD0: 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09 47 65 74 )....BEGIN...Get
00BDE0: 4C 69 6E 65 28 4F 6C 64 73 2C 6F 6C 64 6C 69 6E Line(Olds,oldlin
00BDF0: 65 29 3B 0D 0A 09 50 72 69 6E 74 28 49 74 61 6C e);...Print(Ital
00BE00: 69 63 73 4F 6E 29 3B 0D 0A 09 50 72 69 6E 74 28 icsOn);...Print(
00BE10: 6F 6C 64 6C 69 6E 65 29 3B 0D 0A 09 50 72 69 6E oldline);...Prin
00BE20: 74 28 49 74 61 6C 69 63 73 4F 66 66 29 3B 0D 0A t(ItalicsOff);..
00BE30: 09 57 72 69 74 65 45 6F 6C 3B 0D 0A 09 45 4E 44 .WriteEol;...END
00BE40: 20 44 65 6C 65 74 65 64 3B 0D 0A 0D 0A 50 52 4F Deleted;....PRO
00BE50: 43 45 44 55 52 45 20 53 6B 69 70 4F 6C 64 3B 0D CEDURE SkipOld;.
00BE60: 0A 42 45 47 49 4E 0D 0A 09 47 65 74 4C 69 6E 65 .BEGIN...GetLine
00BE70: 28 4F 6C 64 73 2C 6F 6C 64 6C 69 6E 65 29 3B 0D (Olds,oldline);.
00BE80: 0A 09 45 4E 44 20 53 6B 69 70 4F 6C 64 3B 0D 0A ..END SkipOld;..
00BE90: 0D 0A 50 52 4F 43 45 44 55 52 45 20 49 6E 73 65 ..PROCEDURE Inse
00BEA0: 72 74 65 64 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 rted;..BEGIN...G
00BEB0: 65 74 4C 69 6E 65 28 4E 65 77 73 2C 6E 65 77 6C etLine(News,newl
00BEC0: 69 6E 65 29 3B 0D 0A 09 50 72 69 6E 74 28 42 6F ine);...Print(Bo
00BED0: 6C 64 4F 6E 29 3B 0D 0A 09 50 72 69 6E 74 28 6E ldOn);...Print(n
00BEE0: 65 77 6C 69 6E 65 29 3B 0D 0A 09 50 72 69 6E 74 ewline);...Print
00BEF0: 28 42 6F 6C 64 4F 66 66 29 3B 0D 0A 09 57 72 69 (BoldOff);...Wri
00BF00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
00BF10: 0A 00 01 00 02 09 52 E5 0A 00 41 02 00 00 00 02 ......R...A.....
00BF20: 0A 00 46 02 00 00 00 02 0A 00 42 02 00 00 00 02 ..F.......B.....
00BF30: 0A 00 47 02 00 00 00 02 0A 00 43 02 00 00 00 02 ..G.......C.....
00BF40: 0A 00 48 02 00 00 00 02 0A 00 44 02 00 00 00 02 ..H.......D.....
00BF50: 0A 00 49 02 00 00 00 02 0A 00 45 02 00 00 00 02 ..I.......E.....
00BF60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BF70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BF80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BF90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00BFF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00C000: 6B 5B 6F 6C 64 69 6E 64 65 78 5D 3E 3D 6E 65 77 k[oldindex]>=new
00C010: 69 6E 64 65 78 0D 0A 0D 0A 09 09 20 20 20 62 75 index...... bu
00C020: 74 2C 20 69 66 20 4E 65 77 4C 69 6E 6B 5B 6F 6C t, if NewLink[ol
00C030: 64 69 6E 64 65 78 5D 3D 6E 65 77 69 6E 64 65 78 dindex]=newindex
00C040: 20 74 68 65 6E 20 0D 0A 09 09 09 20 20 20 4F 6C then ..... Ol
00C050: 64 4C 69 6E 6B 5B 6E 65 77 69 6E 64 65 78 5D 3D dLink[newindex]=
00C060: 4F 6C 64 4C 69 6E 6B 5B 4E 65 77 4C 69 6E 6B 5B OldLink[NewLink[
00C070: 6F 6C 64 69 6E 64 65 78 5D 5D 3D 6E 65 77 6C 69 oldindex]]=newli
00C080: 6E 6B 0D 0A 09 09 09 77 68 69 63 68 20 69 73 20 nk.....which is
00C090: 6E 6F 74 20 74 72 75 65 20 28 73 69 6E 63 65 20 not true (since
00C0A0: 74 68 65 20 63 72 6F 73 73 2D 6C 69 6E 6B 65 64 the cross-linked
00C0B0: 20 63 61 73 65 20 77 61 73 20 68 61 6E 64 6C 65 case was handle
00C0C0: 64 0D 0A 09 09 09 65 61 72 6C 69 65 72 29 0D 0A d.....earlier)..
00C0D0: 0D 0A 09 09 20 20 48 65 6E 63 65 20 4E 65 77 4C .... Hence NewL
00C0E0: 69 6E 6B 5B 6F 6C 64 69 6E 64 65 78 5D 3E 6E 65 ink[oldindex]>ne
00C0F0: 77 69 6E 64 65 78 20 61 6E 64 20 77 65 20 63 61 windex and we ca
00C100: 6E 20 6C 65 61 76 65 20 74 68 65 20 6C 69 6E 65 n leave the line
00C110: 20 74 69 6C 6C 20 6C 61 74 65 72 0D 0A 0D 0A 09 till later.....
00C120: 09 20 20 57 65 20 6D 75 73 74 20 74 68 65 72 65 . We must there
00C130: 66 6F 72 65 20 64 6F 20 73 6F 6D 65 74 68 69 6E fore do somethin
00C140: 67 20 77 69 74 68 20 74 68 65 20 6E 65 77 20 6C g with the new l
00C150: 69 6E 65 20 2D 20 69 74 20 69 73 20 74 68 65 0D ine - it is the.
00C160: 0A 09 09 20 20 73 74 61 72 74 20 6F 66 20 61 20 ... start of a
00C170: 6D 6F 76 65 64 20 62 6C 6F 63 6B 0D 0A 2A 29 0D moved block..*).
00C180: 0A 20 09 09 45 4C 53 45 0D 0A 09 09 09 42 6C 6F . ..ELSE.....Blo
00C190: 63 6B 4D 6F 76 65 3B 09 28 2A 69 6E 63 20 6F 66 ckMove;.(*inc of
00C1A0: 20 6E 65 77 69 6E 64 65 78 20 64 6F 6E 65 20 69 newindex done i
00C1B0: 6E 20 62 6C 6F 63 6B 6D 6F 76 65 2A 29 0D 0A 09 n blockmove*)...
00C1C0: 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 2A ..END;....END;(*
00C1D0: 4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 57 72 69 LOOP*)...END Wri
00C1E0: 74 65 52 65 73 75 6C 74 73 3B 0D 0A 0D 0A 56 41 teResults;....VA
00C1F0: 52 09 50 61 72 61 6D 3A 41 52 52 41 59 20 5B 30 R.Param:ARRAY [0
00C200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C3A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C3B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C3C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C3D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C3E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C3F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
00C400: 2E 2E 32 5D 20 4F 46 20 50 61 72 61 6D 65 74 65 ..2] OF Paramete
00C410: 72 3B 0D 0A 09 43 6F 75 6E 74 3A 49 4E 54 45 47 r;...Count:INTEG
00C420: 45 52 3B 0D 0A 09 0D 0A 50 52 4F 43 45 44 55 52 ER;.....PROCEDUR
00C430: 45 20 4F 70 65 6E 49 6E 70 75 74 28 56 41 52 20 E OpenInput(VAR
00C440: 73 3A 53 54 52 45 41 4D 3B 56 41 52 20 66 3A 46 s:STREAM;VAR f:F
00C450: 49 4C 45 3B 70 61 72 61 6D 3A 50 61 72 61 6D 65 ILE;param:Parame
00C460: 74 65 72 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4C ter);..BEGIN...L
00C470: 6F 6F 6B 75 70 28 66 2C 46 69 6C 65 4E 61 6D 65 ookup(f,FileName
00C480: 28 70 61 72 61 6D 5E 2E 43 68 61 72 73 29 2C 72 (param^.Chars),r
00C490: 65 70 6C 79 29 3B 0D 0A 09 49 46 20 72 65 70 6C eply);...IF repl
00C4A0: 79 3C 30 20 54 48 45 4E 0D 0A 09 09 57 72 69 74 y<0 THEN....Writ
00C4B0: 65 53 74 72 69 6E 67 28 27 20 43 6F 75 6C 64 20 eString(' Could
00C4C0: 6E 6F 74 20 6F 70 65 6E 20 27 29 3B 0D 0A 09 09 not open ');....
00C4D0: 57 72 69 74 65 53 74 72 69 6E 67 28 70 61 72 61 WriteString(para
00C4E0: 6D 5E 2E 43 68 61 72 73 29 3B 0D 0A 09 09 57 72 m^.Chars);....Wr
00C4F0: 69 74 65 4C 6E 3B 0D 0A 09 09 48 41 4C 54 3B 0D iteLn;....HALT;.
00C500: 0A 09 09 45 4E 44 3B 0D 0A 09 43 6F 6E 6E 65 63 ...END;...Connec
00C510: 74 28 73 2C 66 2C 69 6E 70 75 74 29 3B 0D 0A 09 t(s,f,input);...
00C520: 45 4E 44 20 4F 70 65 6E 49 6E 70 75 74 3B 0D 0A END OpenInput;..
00C530: 50 52 4F 43 45 44 55 52 45 20 4F 70 65 6E 46 69 PROCEDURE OpenFi
00C540: 6C 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 09 les;..BEGIN.....
00C550: 28 2A 09 49 6E 70 75 74 20 74 68 65 20 70 61 72 (*.Input the par
00C560: 61 6D 65 74 65 72 73 2C 20 63 6F 6E 6E 65 63 74 ameters, connect
00C570: 20 74 68 65 20 66 69 6C 65 73 20 74 6F 20 73 74 the files to st
00C580: 72 65 61 6D 73 2A 29 0D 0A 0D 0A 09 47 65 74 50 reams*).....GetP
00C590: 61 72 61 6D 73 28 50 61 72 61 6D 2C 43 6F 75 6E arams(Param,Coun
00C5A0: 74 29 3B 0D 0A 0D 0A 09 28 2A 09 49 66 20 6C 65 t);.....(*.If le
00C5B0: 73 73 20 74 68 61 6E 20 32 20 70 61 72 61 6D 65 ss than 2 parame
00C5C0: 74 65 72 73 2C 20 67 69 76 65 20 75 73 61 67 65 ters, give usage
00C5D0: 20 61 6E 64 20 65 78 69 74 2A 29 0D 0A 0D 0A 09 and exit*).....
00C5E0: 49 46 20 43 6F 75 6E 74 3C 32 20 54 48 45 4E 20 IF Count<2 THEN
00C5F0: 55 73 61 67 65 20 45 4E 44 3B 0D 0A 0D 0A 09 28 Usage END;.....(
00C600: 4D 4F 44 55 4C 45 20 43 6F 6D 70 42 69 6E 3B 0D MODULE CompBin;.
00C610: 0A 0D 0A 28 2A 09 43 6F 6D 70 61 72 65 20 74 77 ...(*.Compare tw
00C620: 6F 20 62 69 6E 61 72 79 20 66 69 6C 65 73 20 2A o binary files *
00C630: 29 0D 0A 0D 0A 46 52 4F 4D 09 54 65 72 6D 69 6E )....FROM.Termin
00C640: 61 6C 20 49 4D 50 4F 52 54 20 57 72 69 74 65 53 al IMPORT WriteS
00C650: 74 72 69 6E 67 2C 57 72 69 74 65 4C 6E 3B 0D 0A tring,WriteLn;..
00C660: 46 52 4F 4D 09 53 6D 61 6C 6C 49 4F 20 20 49 4D FROM.SmallIO IM
00C670: 50 4F 52 54 20 57 72 69 74 65 48 65 78 3B 0D 0A PORT WriteHex;..
00C680: 46 52 4F 4D 09 53 74 72 65 61 6D 73 20 49 4D 50 FROM.Streams IMP
00C690: 4F 52 54 20 44 69 72 65 63 74 69 6F 6E 3B 0D 0A ORT Direction;..
00C6A0: 46 52 4F 4D 09 51 75 69 63 6B 53 74 72 20 49 4D FROM.QuickStr IM
00C6B0: 50 4F 52 54 20 53 74 72 65 61 6D 52 65 63 6F 72 PORT StreamRecor
00C6C0: 64 2C 4F 70 65 6E 53 74 72 65 61 6D 73 2C 4F 70 d,OpenStreams,Op
00C6D0: 74 69 6F 6E 73 53 65 74 3B 0D 0A 46 52 4F 4D 09 tionsSet;..FROM.
00C6E0: 53 59 53 54 45 4D 20 20 20 49 4D 50 4F 52 54 20 SYSTEM IMPORT
00C6F0: 41 44 52 2C 42 59 54 45 3B 0D 0A 46 52 4F 4D 09 ADR,BYTE;..FROM.
00C700: 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 49 4C Files IMPORT FIL
00C710: 45 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B 3B 0D E,SeqReadBlock;.
00C720: 0A 56 41 52 09 49 6E 31 2C 49 6E 32 3A 46 49 4C .VAR.In1,In2:FIL
00C730: 45 3B 0D 0A 09 42 6C 6F 63 6B 31 2C 42 6C 6F 63 E;...Block1,Bloc
00C740: 6B 32 3A 41 52 52 41 59 20 5B 30 2E 2E 31 32 37 k2:ARRAY [0..127
00C750: 5D 20 4F 46 20 42 59 54 45 3B 0D 0A 09 72 65 70 ] OF BYTE;...rep
00C760: 6C 79 31 2C 72 65 70 6C 79 32 3A 49 4E 54 45 47 ly1,reply2:INTEG
00C770: 45 52 3B 0D 0A 09 4C 6F 63 3A 43 41 52 44 49 4E ER;...Loc:CARDIN
00C780: 41 4C 3B 0D 0A 09 69 2C 6A 3A 43 41 52 44 49 4E AL;...i,j:CARDIN
00C790: 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 56 AL;..PROCEDURE V
00C7A0: 65 72 79 51 75 69 63 6B 28 29 3A 42 4F 4F 4C 45 eryQuick():BOOLE
00C7B0: 41 4E 3B 0D 0A 0D 0A 28 2A 09 4F 70 65 6E 20 61 AN;....(*.Open a
00C7C0: 20 73 74 72 65 61 6D 20 66 6F 72 20 69 6E 70 75 stream for inpu
00C7D0: 74 20 61 6E 64 20 61 20 73 74 72 65 61 6D 20 66 t and a stream f
00C7E0: 6F 72 20 6F 75 74 70 75 74 20 2A 29 0D 0A 56 41 or output *)..VA
00C7F0: 52 09 53 3A 41 52 52 41 59 5B 31 2E 2E 32 5D 20 R.S:ARRAY[1..2]
00C800: 2A 09 49 66 20 33 20 70 61 72 61 6D 65 74 65 72 *.If 3 parameter
00C810: 73 2C 20 74 68 69 72 64 20 70 61 72 61 6D 65 74 s, third paramet
00C820: 65 72 20 69 73 20 66 69 6C 65 20 74 6F 20 72 65 er is file to re
00C830: 63 65 69 76 65 20 6F 75 74 70 75 74 0D 0A 09 09 ceive output....
00C840: 6F 74 68 65 72 77 69 73 65 2C 20 61 74 74 61 63 otherwise, attac
00C850: 68 20 6F 75 74 70 75 74 20 74 6F 20 74 68 65 20 h output to the
00C860: 70 72 69 6E 74 65 72 20 28 4C 53 54 3A 29 0D 0A printer (LST:)..
00C870: 09 2A 29 0D 0A 0D 0A 09 49 46 20 43 6F 75 6E 74 .*).....IF Count
00C880: 3D 33 20 54 48 45 4E 0D 0A 09 09 43 72 65 61 74 =3 THEN....Creat
00C890: 65 28 4C 69 73 74 46 2C 46 69 6C 65 4E 61 6D 65 e(ListF,FileName
00C8A0: 28 50 61 72 61 6D 5B 43 6F 75 6E 74 2D 31 5D 5E (Param[Count-1]^
00C8B0: 2E 43 68 61 72 73 29 2C 72 65 70 6C 79 29 3B 0D .Chars),reply);.
00C8C0: 0A 09 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54 ...IF reply<>0 T
00C8D0: 48 45 4E 0D 0A 09 09 09 57 72 69 74 65 53 74 72 HEN.....WriteStr
00C8E0: 69 6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F 74 20 ing(' Could not
00C8F0: 63 72 65 61 74 65 20 6C 69 73 74 20 66 69 6C 65 create list file
00C900: 27 29 3B 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B ');.....WriteLn;
00C910: 0D 0A 09 09 09 48 41 4C 54 3B 0D 0A 09 09 09 45 .....HALT;.....E
00C920: 4E 44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 43 72 ND;...ELSE....Cr
00C930: 65 61 74 65 28 4C 69 73 74 46 2C 27 4C 53 54 3A eate(ListF,'LST:
00C940: 27 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 45 4E 44 ',reply);....END
00C950: 3B 0D 0A 09 43 6F 6E 6E 65 63 74 28 4C 69 73 74 ;...Connect(List
00C960: 2C 4C 69 73 74 46 2C 6F 75 74 70 75 74 29 3B 0D ,ListF,output);.
00C970: 0A 0D 0A 09 28 2A 09 4F 70 65 6E 20 74 68 65 20 ....(*.Open the
00C980: 66 69 6C 65 73 20 74 6F 20 62 65 20 63 6F 6D 70 files to be comp
00C990: 61 72 65 64 09 2A 29 0D 0A 09 0D 0A 09 4F 70 65 ared.*)......Ope
00C9A0: 6E 49 6E 70 75 74 28 4F 6C 64 73 2C 4F 6C 64 66 nInput(Olds,Oldf
00C9B0: 2C 50 61 72 61 6D 5B 30 5D 29 3B 0D 0A 09 4F 70 ,Param[0]);...Op
00C9C0: 65 6E 49 6E 70 75 74 28 4E 65 77 73 2C 4E 65 77 enInput(News,New
00C9D0: 66 2C 50 61 72 61 6D 5B 31 5D 29 3B 09 0D 0A 09 f,Param[1]);....
00C9E0: 45 4E 44 20 4F 70 65 6E 46 69 6C 65 73 3B 0D 0A END OpenFiles;..
00C9F0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 61 64 ..PROCEDURE Read
00CA00: 4F 46 20 53 74 72 65 61 6D 52 65 63 6F 72 64 3B OF StreamRecord;
00CA10: 0D 0A 09 6F 3A 4F 70 74 69 6F 6E 73 53 65 74 3B ...o:OptionsSet;
00CA20: 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20 53 ..BEGIN...WITH S
00CA30: 5B 31 5D 20 44 4F 0D 0A 09 09 49 73 53 74 72 65 [1] DO....IsStre
00CA40: 61 6D 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 44 69 am:=FALSE;....Di
00CA50: 72 3A 3D 69 6E 70 75 74 3B 0D 0A 09 09 4C 6F 6F r:=input;....Loo
00CA60: 6B 75 70 46 69 72 73 74 3A 3D 46 41 4C 53 45 3B kupFirst:=FALSE;
00CA70: 0D 0A 09 09 4D 75 73 74 53 75 70 70 6C 79 3A 3D ....MustSupply:=
00CA80: 46 41 4C 53 45 3B 0D 0A 09 09 46 69 6C 65 3A 3D FALSE;....File:=
00CA90: 41 44 52 28 49 6E 31 29 3B 0D 0A 09 09 45 4E 44 ADR(In1);....END
00CAA0: 3B 0D 0A 09 57 49 54 48 20 53 5B 32 5D 20 44 4F ;...WITH S[2] DO
00CAB0: 0D 0A 09 09 49 73 53 74 72 65 61 6D 3A 3D 46 41 ....IsStream:=FA
00CAC0: 4C 53 45 3B 0D 0A 09 09 44 65 66 61 75 6C 74 4E LSE;....DefaultN
00CAD0: 61 6D 65 3A 3D 27 43 4F 4E 3A 27 3B 0D 0A 09 09 ame:='CON:';....
00CAE0: 44 69 72 3A 3D 69 6E 70 75 74 3B 0D 0A 09 09 4C Dir:=input;....L
00CAF0: 6F 6F 6B 75 70 46 69 72 73 74 3A 3D 46 41 4C 53 ookupFirst:=FALS
00CB00: 45 3B 0D 0A 09 09 4D 75 73 74 53 75 70 70 6C 79 E;....MustSupply
00CB10: 3A 3D 54 52 55 45 3B 0D 0A 09 09 46 69 6C 65 3A :=TRUE;....File:
00CB20: 3D 41 44 52 28 49 6E 32 29 3B 0D 0A 09 09 45 4E =ADR(In2);....EN
00CB30: 44 3B 0D 0A 09 52 45 54 55 52 4E 20 4F 70 65 6E D;...RETURN Open
00CB40: 53 74 72 65 61 6D 73 28 53 2C 6F 29 3B 0D 0A 09 Streams(S,o);...
00CB50: 45 4E 44 20 56 65 72 79 51 75 69 63 6B 3B 0D 0A END VeryQuick;..
00CB60: 42 45 47 49 4E 0D 0A 09 49 46 20 20 56 65 72 79 BEGIN...IF Very
00CB70: 51 75 69 63 6B 28 29 20 54 48 45 4E 0D 0A 09 09 Quick() THEN....
00CB80: 57 72 69 74 65 53 74 72 69 6E 67 28 27 46 69 6C WriteString('Fil
00CB90: 65 73 20 6E 6F 74 20 66 6F 75 6E 64 20 27 29 3B es not found ');
00CBA0: 0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 ....WriteLn;....
00CBB0: 48 41 4C 54 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 HALT;....END;...
00CBC0: 4C 6F 63 3A 3D 30 3B 0D 0A 09 4C 4F 4F 50 0D 0A Loc:=0;...LOOP..
00CBD0: 09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 28 49 ..SeqReadBlock(I
00CBE0: 6E 31 2C 41 44 52 28 42 6C 6F 63 6B 31 29 2C 31 n1,ADR(Block1),1
00CBF0: 32 38 2C 72 65 70 6C 79 31 29 3B 0D 0A 09 09 53 28,reply1);....S
00CC00: 49 6E 70 75 74 46 69 6C 65 73 3B 0D 0A 42 45 47 InputFiles;..BEG
00CC10: 49 4E 0D 0A 0D 0A 09 57 72 69 74 65 53 74 72 69 IN.....WriteStri
00CC20: 6E 67 28 27 20 52 65 61 64 69 6E 67 20 6F 6C 64 ng(' Reading old
00CC30: 20 66 69 6C 65 20 27 29 3B 0D 0A 09 4F 6C 64 4C file ');...OldL
00CC40: 65 6E 3A 3D 52 65 61 64 53 74 72 65 61 6D 28 4F en:=ReadStream(O
00CC50: 6C 64 73 2C 4F 6C 64 48 61 73 68 29 3B 0D 0A 09 lds,OldHash);...
00CC60: 57 72 69 74 65 43 61 72 64 28 4F 6C 64 4C 65 6E WriteCard(OldLen
00CC70: 2C 35 29 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 ,5);...WriteStri
00CC80: 6E 67 28 27 20 6C 69 6E 65 73 20 66 6F 75 6E 64 ng(' lines found
00CC90: 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 0D 0A 09 ');WriteLn;.....
00CCA0: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 52 65 WriteString(' Re
00CCB0: 61 64 69 6E 67 20 6E 65 77 20 66 69 6C 65 20 27 ading new file '
00CCC0: 29 3B 0D 0A 09 4E 65 77 4C 65 6E 3A 3D 52 65 61 );...NewLen:=Rea
00CCD0: 64 53 74 72 65 61 6D 28 4E 65 77 73 2C 4E 65 77 dStream(News,New
00CCE0: 48 61 73 68 29 3B 0D 0A 09 57 72 69 74 65 43 61 Hash);...WriteCa
00CCF0: 72 64 28 4E 65 77 4C 65 6E 2C 35 29 3B 0D 0A 09 rd(NewLen,5);...
00CD00: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 6C 69 WriteString(' li
00CD10: 6E 65 73 20 66 6F 75 6E 64 27 29 3B 57 72 69 74 nes found');Writ
00CD20: 65 4C 6E 3B 0D 0A 09 45 4E 44 20 52 65 61 64 49 eLn;...END ReadI
00CD30: 6E 70 75 74 46 69 6C 65 73 3B 0D 0A 0D 0A 42 45 nputFiles;....BE
00CD40: 47 49 4E 09 28 2A 6D 61 69 6E 20 70 72 6F 67 72 GIN.(*main progr
00CD50: 61 6D 2A 29 0D 0A 0D 0A 09 4F 70 65 6E 46 69 6C am*).....OpenFil
00CD60: 65 73 3B 0D 0A 09 52 65 61 64 49 6E 70 75 74 46 es;...ReadInputF
00CD70: 69 6C 65 73 3B 0D 0A 0D 0A 09 57 72 69 74 65 53 iles;.....WriteS
00CD80: 74 72 69 6E 67 28 27 20 47 65 6E 65 72 61 74 69 tring(' Generati
00CD90: 6E 67 20 63 72 6F 73 73 20 6C 69 6E 6B 73 27 29 ng cross links')
00CDA0: 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 47 65 6E 65 ;WriteLn;...Gene
00CDB0: 72 61 74 65 4C 69 6E 6B 73 3B 0D 0A 09 57 72 69 rateLinks;...Wri
00CDC0: 74 65 53 74 72 69 6E 67 28 27 20 4C 69 73 74 69 teString(' Listi
00CDD0: 6E 67 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 0D ng');WriteLn;...
00CDE0: 0A 09 28 2A 72 65 70 6F 73 69 74 69 6F 6E 20 73 ..(*reposition s
00CDF0: 74 72 65 61 6D 73 20 74 6F 20 62 65 67 69 6E 6E treams to beginn
00CE00: 65 71 52 65 61 64 42 6C 6F 63 6B 28 49 6E 32 2C eqReadBlock(In2,
00CE10: 41 44 52 28 42 6C 6F 63 6B 32 29 2C 31 32 38 2C ADR(Block2),128,
00CE20: 72 65 70 6C 79 32 29 3B 0D 0A 09 09 57 72 69 74 reply2);....Writ
00CE30: 65 48 65 78 28 4C 6F 63 2C 34 29 3B 0D 0A 09 09 eHex(Loc,4);....
00CE40: 57 72 69 74 65 53 74 72 69 6E 67 28 30 64 78 29 WriteString(0dx)
00CE50: 3B 0D 0A 09 09 49 46 20 28 72 65 70 6C 79 31 3C ;....IF (reply1<
00CE60: 3E 31 32 38 29 20 4F 52 20 28 72 65 70 6C 79 32 >128) OR (reply2
00CE70: 3C 3E 31 32 38 29 20 54 48 45 4E 20 45 58 49 54 <>128) THEN EXIT
00CE80: 20 45 4E 44 3B 0D 0A 09 09 69 3A 3D 30 3B 0D 0A END;....i:=0;..
00CE90: 09 09 57 48 49 4C 45 20 28 69 3C 31 32 38 29 20 ..WHILE (i<128)
00CEA0: 41 4E 44 20 28 42 6C 6F 63 6B 31 5B 69 5D 3D 42 AND (Block1[i]=B
00CEB0: 6C 6F 63 6B 32 5B 69 5D 29 20 44 4F 20 49 4E 43 lock2[i]) DO INC
00CEC0: 28 69 29 20 45 4E 44 3B 0D 0A 09 09 49 46 20 69 (i) END;....IF i
00CED0: 3C 31 32 38 20 54 48 45 4E 0D 0A 09 09 09 46 4F <128 THEN.....FO
00CEE0: 52 20 69 3A 3D 30 20 54 4F 20 31 32 37 20 42 59 R i:=0 TO 127 BY
00CEF0: 20 38 20 44 4F 0D 0A 09 09 09 09 57 72 69 74 65 8 DO......Write
00CF00: 48 65 78 28 4C 6F 63 2B 69 2C 34 29 3B 0D 0A 09 Hex(Loc+i,4);...
00CF10: 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
00CF20: 3A 27 29 3B 0D 0A 09 09 09 09 46 4F 52 20 6A 3A :');......FOR j:
00CF30: 3D 69 20 54 4F 20 69 2B 37 20 44 4F 0D 0A 09 09 =i TO i+7 DO....
00CF40: 09 09 09 57 72 69 74 65 48 65 78 28 42 6C 6F 63 ...WriteHex(Bloc
00CF50: 6B 31 5B 6A 5D 2C 32 29 3B 0D 0A 09 09 09 09 09 k1[j],2);.......
00CF60: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 27 29 WriteString(' ')
00CF70: 3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 ;.......END;....
00CF80: 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
00CF90: 27 29 3B 0D 0A 09 09 09 09 46 4F 52 20 6A 3A 3D ');......FOR j:=
00CFA0: 69 20 54 4F 20 69 2B 37 20 44 4F 0D 0A 09 09 09 i TO i+7 DO.....
00CFB0: 09 09 57 72 69 74 65 48 65 78 28 42 6C 6F 63 6B ..WriteHex(Block
00CFC0: 32 5B 6A 5D 2C 32 29 3B 0D 0A 09 09 09 09 09 57 2[j],2);.......W
00CFD0: 72 69 74 65 53 74 72 69 6E 67 28 27 20 27 29 3B riteString(' ');
00CFE0: 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 .......END;.....
00CFF0: 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 09 45 .WriteLn;......E
00D000: 69 6E 67 2A 29 0D 0A 0D 0A 09 52 65 73 65 74 28 ing*).....Reset(
00D010: 4E 65 77 73 29 3B 0D 0A 09 52 65 73 65 74 28 4F News);...Reset(O
00D020: 6C 64 73 29 3B 0D 0A 09 0D 0A 09 57 72 69 74 65 lds);......Write
00D030: 52 65 73 75 6C 74 73 3B 0D 0A 09 44 69 73 63 6F Results;...Disco
00D040: 6E 6E 65 63 74 28 4C 69 73 74 2C 54 52 55 45 29 nnect(List,TRUE)
00D050: 3B 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 72 65 2E ;...END Compare.
00D060: 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00D070: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00D080: 66 20 6C 65 73 73 20 74 68 61 6E 20 38 20 63 68 f less than 8 ch
00D090: 61 72 61 63 74 65 72 73 20 69 73 20 72 65 71 75 aracters is requ
00D0A0: 69 72 65 64 0D 0A 0D 0A 09 54 68 65 20 63 6F 6E ired.....The con
00D0B0: 74 72 6F 6C 20 63 68 61 72 61 63 74 65 72 73 20 trol characters
00D0C0: 69 6E 20 74 68 65 20 73 75 70 70 6C 69 65 64 20 in the supplied
00D0D0: 70 72 6F 67 72 61 6D 20 61 72 65 20 73 65 74 20 program are set
00D0E0: 66 6F 72 20 61 20 53 54 41 52 20 44 50 53 35 31 for a STAR DPS51
00D0F0: 30 2C 0D 0A 09 77 68 69 63 68 20 69 73 20 73 75 0,...which is su
00D100: 70 70 6F 73 65 64 20 74 6F 20 62 65 20 45 70 73 pposed to be Eps
00D110: 6F 6E 20 63 6F 6D 70 61 74 69 62 6C 65 2C 20 73 on compatible, s
00D120: 6F 20 74 68 65 20 70 72 6F 67 72 61 6D 20 6D 61 o the program ma
00D130: 79 20 77 65 6C 6C 20 72 75 6E 20 27 61 73 20 69 y well run 'as i
00D140: 73 27 0D 0A 09 6F 6E 20 45 70 73 6F 6E 73 20 61 s'...on Epsons a
00D150: 6E 64 20 45 70 73 6F 6E 20 63 6C 6F 6E 65 73 0D nd Epson clones.
00D160: 0A 0D 0A 09 54 68 65 20 70 72 6F 67 72 61 6D 20 ....The program
00D170: 69 73 20 62 61 73 65 64 20 6F 6E 20 61 20 6D 65 is based on a me
00D180: 74 68 6F 64 20 64 65 73 63 72 69 62 65 64 20 62 thod described b
00D190: 79 20 50 61 75 6C 20 48 65 63 6B 65 6C 20 27 41 y Paul Heckel 'A
00D1A0: 20 54 65 63 68 6E 69 71 75 65 20 66 6F 72 0D 0A Technique for..
00D1B0: 09 49 73 6F 6C 61 74 69 6E 67 20 44 69 66 66 65 .Isolating Diffe
00D1C0: 72 65 6E 63 65 73 20 62 65 74 77 65 65 6E 20 46 rences between F
00D1D0: 69 6C 65 73 27 2C 20 43 6F 6D 6D 75 6E 69 63 61 iles', Communica
00D1E0: 74 69 6F 6E 73 20 6F 66 20 74 68 65 20 41 43 4D tions of the ACM
00D1F0: 2C 20 56 6F 6C 20 32 31 0D 0A 09 4E 6F 20 34 2C , Vol 21...No 4,
00D200: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
00D210: 0B 00 01 00 02 09 52 E5 0B 00 41 02 00 00 00 02 ......R...A.....
00D220: 0B 00 46 02 00 00 00 02 0B 00 42 02 00 00 00 02 ..F.......B.....
00D230: 0B 00 47 02 00 00 00 02 0B 00 43 02 00 00 00 02 ..G.......C.....
00D240: 0B 00 48 02 00 00 00 02 0B 00 44 02 00 00 00 02 ..H.......D.....
00D250: 0B 00 49 02 00 00 00 02 0B 00 45 02 00 00 00 02 ..I.......E.....
00D260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D2F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00D300: 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 ND;.....END;....
00D310: 4C 6F 63 3A 3D 4C 6F 63 2B 31 32 38 3B 0D 0A 09 Loc:=Loc+128;...
00D320: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 43 6F 6D 70 .END;...END Comp
00D330: 42 69 6E 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A Bin.............
00D340: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00D350: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00D360: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00D370: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
00D380: 3A 43 48 41 52 3B 0D 0A 09 43 68 61 72 50 6F 73 :CHAR;...CharPos
00D390: 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 70 6F 73 :CARDINAL;.(*pos
00D3A0: 69 74 69 6F 6E 20 69 6E 20 6C 69 6E 65 2A 29 0D ition in line*).
00D3B0: 0A 09 0D 0A 0D 0A 28 2A 09 46 6F 72 20 65 61 63 ......(*.For eac
00D3C0: 68 20 66 69 6C 65 2C 20 77 65 20 68 61 76 65 20 h file, we have
00D3D0: 61 6E 20 61 72 72 61 79 20 6F 66 20 68 61 73 68 an array of hash
00D3E0: 20 74 6F 74 61 6C 73 20 66 6F 72 20 74 68 65 20 totals for the
00D3F0: 6C 69 6E 65 73 20 6F 66 20 74 68 65 20 66 69 6C lines of the fil
00D400: 65 0D 0A 09 55 73 69 6E 67 20 68 61 73 68 20 74 e...Using hash t
00D410: 6F 74 61 6C 73 20 69 6E 73 74 65 61 64 20 6F 66 otals instead of
00D420: 20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 6C 69 the original li
00D430: 6E 65 73 20 63 61 75 73 65 73 20 61 20 73 6C 69 nes causes a sli
00D440: 67 68 74 20 63 68 61 6E 63 65 0D 0A 09 74 68 61 ght chance...tha
00D450: 74 20 6C 69 6E 65 73 20 77 69 6C 6C 20 6D 61 74 t lines will mat
00D460: 63 68 20 77 68 65 6E 20 74 68 65 79 20 73 68 6F ch when they sho
00D470: 75 6C 64 20 6E 6F 74 2C 20 62 75 74 20 61 6C 6C uld not, but all
00D480: 6F 77 73 20 6C 61 72 67 65 72 20 66 69 6C 65 73 ows larger files
00D490: 0D 0A 09 74 6F 20 62 65 20 63 6F 6D 70 61 72 65 ...to be compare
00D4A0: 64 20 61 6E 64 20 61 6C 73 6F 20 6D 61 6B 65 73 d and also makes
00D4B0: 20 69 74 20 70 6F 73 73 69 62 6C 65 20 74 6F 20 it possible to
00D4C0: 65 78 74 65 6E 64 20 74 68 65 20 70 72 6F 67 72 extend the progr
00D4D0: 61 6D 20 69 6E 20 74 68 65 20 66 75 74 75 72 65 am in the future
00D4E0: 0D 0A 09 74 6F 20 77 6F 72 6B 20 77 69 74 68 20 ...to work with
00D4F0: 72 65 61 73 6F 6E 61 62 6C 65 20 73 70 65 65 64 reasonable speed
00D500: 29 0D 0A 0D 0A 54 59 50 45 20 09 0D 0A 09 43 6F )....TYPE ....Co
00D510: 6D 70 43 6C 61 73 73 3D 28 57 68 6F 6C 65 2C 4E mpClass=(Whole,N
00D520: 61 6D 65 2C 54 79 70 65 29 3B 0D 0A 09 46 69 6C ame,Type);...Fil
00D530: 65 52 65 63 6F 72 64 3D 52 45 43 4F 52 44 0D 0A eRecord=RECORD..
00D540: 09 09 44 65 76 69 63 65 3A 43 48 41 52 3B 0D 0A ..Device:CHAR;..
00D550: 09 09 4E 61 6D 65 3A 41 52 52 41 59 5B 31 2E 2E ..Name:ARRAY[1..
00D560: 38 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 09 54 8] OF CHAR;....T
00D570: 79 70 65 3A 41 52 52 41 59 5B 31 2E 2E 33 5D 20 ype:ARRAY[1..3]
00D580: 4F 46 20 43 48 41 52 3B 0D 0A 09 09 45 4E 44 3B OF CHAR;....END;
00D590: 0D 0A 09 50 46 69 6C 65 4E 61 6D 65 3D 50 4F 49 ...PFileName=POI
00D5A0: 4E 54 45 52 20 54 4F 20 46 69 6C 65 52 65 63 6F NTER TO FileReco
00D5B0: 72 64 3B 0D 0A 09 46 69 6C 65 41 72 72 61 79 3D rd;...FileArray=
00D5C0: 41 52 52 41 59 5B 31 2E 2E 4D 61 78 46 69 6C 65 ARRAY[1..MaxFile
00D5D0: 73 5D 20 4F 46 20 46 69 6C 65 52 65 63 6F 72 64 s] OF FileRecord
00D5E0: 3B 0D 0A 56 41 52 09 0D 0A 09 50 61 72 61 6D 3A ;..VAR....Param:
00D5F0: 41 52 52 41 59 5B 31 2E 2E 34 5D 20 4F 46 20 50 ARRAY[1..4] OF P
00D600: 61 72 61 6D 65 74 65 72 3B 09 09 28 2A 61 72 65 arameter;..(*are
00D610: 61 20 66 6F 72 20 63 6F 6D 6D 61 6E 64 20 6C 69 a for command li
00D620: 6E 65 2A 29 0D 0A 09 43 6F 75 6E 74 3A 49 4E 54 ne*)...Count:INT
00D630: 45 47 45 52 3B 09 09 09 09 28 2A 70 61 72 61 6D EGER;....(*param
00D640: 65 74 65 72 73 2A 29 0D 0A 0D 0A 09 4C 65 66 74 eters*).....Left
00D650: 4E 61 6D 65 73 2C 52 69 67 68 74 4E 61 6D 65 73 Names,RightNames
00D660: 3A 46 69 6C 65 41 72 72 61 79 3B 0D 0A 09 4C 65 :FileArray;...Le
00D670: 66 74 4E 61 6D 65 43 6F 75 6E 74 2C 52 69 67 68 ftNameCount,Righ
00D680: 74 4E 61 6D 65 43 6F 75 6E 74 3A 49 4E 54 45 47 tNameCount:INTEG
00D690: 45 52 3B 0D 0A 0D 0A 09 43 6F 6D 70 63 6C 61 73 ER;.....Compclas
00D6A0: 73 3A 43 6F 6D 70 43 6C 61 73 73 3D 57 68 6F 6C s:CompClass=Whol
00D6B0: 65 3B 0D 0A 09 4F 75 74 70 75 74 41 64 64 65 64 e;...OutputAdded
00D6C0: 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D :BOOLEAN=FALSE;.
00D6D0: 0A 09 4F 75 74 70 75 74 45 71 75 61 6C 3A 42 4F ..OutputEqual:BO
00D6E0: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 43 OLEAN=FALSE;...C
00D6F0: 6F 6D 70 61 72 65 43 6F 6E 74 65 6E 74 73 3A 42 ompareContents:B
00D700: 28 2A 09 09 52 65 76 69 73 69 6F 6E 20 48 69 73 (*..Revision His
00D710: 74 6F 72 79 3A 0D 0A 0D 0A 09 09 32 34 20 4D 61 tory:......24 Ma
00D720: 72 63 68 20 38 36 20 20 44 61 76 65 20 4D 6F 6F rch 86 Dave Moo
00D730: 72 65 0D 0A 09 09 09 46 69 78 65 64 20 63 6F 6D re.....Fixed com
00D740: 70 69 6C 61 74 69 6F 6E 20 65 72 72 6F 72 73 20 pilation errors
00D750: 63 61 75 73 65 64 20 62 79 20 75 70 67 72 61 64 caused by upgrad
00D760: 69 6E 67 20 6F 66 0D 0A 09 09 09 63 6F 6D 70 69 ing of.....compi
00D770: 6C 65 72 20 65 72 72 6F 72 20 63 68 65 63 6B 69 ler error checki
00D780: 6E 67 2E 0D 0A 09 09 09 49 6E 63 72 65 61 73 65 ng......Increase
00D790: 64 20 4D 61 78 46 69 6C 65 73 20 74 6F 20 35 31 d MaxFiles to 51
00D7A0: 32 2E 0D 0A 0D 0A 09 09 42 75 67 73 3A 0D 0A 0D 2.......Bugs:...
00D7B0: 0A 09 09 09 46 61 69 6C 73 20 69 66 20 6D 6F 72 ....Fails if mor
00D7C0: 65 20 74 68 61 6E 20 4D 61 78 46 69 6C 65 73 20 e than MaxFiles
00D7D0: 66 69 6C 65 73 20 61 72 65 20 66 6F 75 6E 64 2E files are found.
00D7E0: 20 54 68 69 73 0D 0A 09 09 09 69 73 20 6E 6F 74 This.....is not
00D7F0: 20 61 20 70 72 6F 62 6C 65 6D 20 75 6E 64 65 72 a problem under
00D800: 20 43 50 2F 4D 20 73 69 6E 63 65 20 64 69 72 65 CP/M since dire
00D810: 63 74 6F 72 69 65 73 20 66 69 6C 6C 0D 0A 09 09 ctories fill....
00D820: 09 62 65 66 6F 72 65 20 74 68 61 74 20 6D 61 6E .before that man
00D830: 79 20 66 69 6C 65 73 20 61 72 65 20 66 6F 75 6E y files are foun
00D840: 64 2C 20 62 75 74 20 69 74 20 63 61 6E 20 63 61 d, but it can ca
00D850: 75 73 65 0D 0A 09 09 09 70 72 6F 62 6C 65 6D 73 use.....problems
00D860: 20 75 6E 64 65 72 20 4D 53 44 4F 53 20 28 77 69 under MSDOS (wi
00D870: 74 68 20 61 20 5A 38 30 20 63 61 72 64 29 0D 0A th a Z80 card)..
00D880: 2A 29 0D 0A 09 09 09 0D 0A 0D 0A 28 2A 24 6C 2D *).........(*$l-
00D890: 2A 29 0D 0A 4D 4F 44 55 4C 45 20 43 6F 6D 70 44 *)..MODULE CompD
00D8A0: 69 72 3B 0D 0A 0D 0A 28 2A 09 43 6F 6D 70 44 69 ir;....(*.CompDi
00D8B0: 72 20 2D 20 43 6F 6D 70 61 72 65 20 74 77 6F 20 r - Compare two
00D8C0: 64 69 72 65 63 74 6F 72 69 65 73 0D 0A 0D 0A 09 directories.....
00D8D0: 44 61 76 65 20 4D 6F 6F 72 65 0D 0A 09 43 65 72 Dave Moore...Cer
00D8E0: 65 6E 6B 6F 66 20 43 6F 6D 70 75 74 69 6E 67 0D enkof Computing.
00D8F0: 0A 09 50 4F 20 42 6F 78 20 33 30 35 20 57 79 6E ..PO Box 305 Wyn
00D900: 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 OOLEAN=FALSE;...
00D910: 4F 75 74 70 75 74 44 65 6C 65 74 65 64 3A 42 4F OutputDeleted:BO
00D920: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 4F OLEAN=FALSE;...O
00D930: 75 74 70 75 74 4D 6F 64 69 66 69 65 64 3A 42 4F utputModified:BO
00D940: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 0D 0A OLEAN=FALSE;....
00D950: 09 4C 69 73 74 4F 70 65 6E 3A 42 4F 4F 4C 45 41 .ListOpen:BOOLEA
00D960: 4E 3D 46 41 4C 53 45 3B 0D 0A 09 4C 69 73 74 3A N=FALSE;...List:
00D970: 53 54 52 45 41 4D 3B 0D 0A 09 4C 69 73 74 46 3A STREAM;...ListF:
00D980: 46 49 4C 45 3B 0D 0A 50 52 4F 43 45 44 55 52 45 FILE;..PROCEDURE
00D990: 20 43 72 61 63 6B 46 69 6C 65 4E 61 6D 65 28 54 CrackFileName(T
00D9A0: 65 78 74 3A 41 52 52 41 59 20 4F 46 20 43 48 41 ext:ARRAY OF CHA
00D9B0: 52 3B 56 41 52 20 52 65 63 3A 46 69 6C 65 52 65 R;VAR Rec:FileRe
00D9C0: 63 6F 72 64 29 3B 0D 0A 0D 0A 28 2A 09 43 6F 6E cord);....(*.Con
00D9D0: 76 65 72 74 20 74 68 65 20 74 65 78 74 20 66 6F vert the text fo
00D9E0: 72 6D 20 6F 66 20 61 20 66 69 6C 65 20 6E 61 6D rm of a file nam
00D9F0: 65 20 74 6F 20 74 68 65 0D 0A 09 65 78 70 61 6E e to the...expan
00DA00: 64 65 64 20 66 6F 72 6D 2A 29 0D 0A 56 41 52 09 ded form*)..VAR.
00DA10: 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 i,j:CARDINAL;..B
00DA20: 45 47 49 4E 0D 0A 09 57 49 54 48 20 52 65 63 20 EGIN...WITH Rec
00DA30: 44 4F 0D 0A 09 09 49 46 20 54 65 78 74 5B 31 5D DO....IF Text[1]
00DA40: 3D 27 3A 27 20 54 48 45 4E 0D 0A 09 09 09 44 65 =':' THEN.....De
00DA50: 76 69 63 65 3A 3D 43 41 50 28 54 65 78 74 5B 30 vice:=CAP(Text[0
00DA60: 5D 29 3B 0D 0A 09 09 09 69 3A 3D 32 3B 0D 0A 09 ]);.....i:=2;...
00DA70: 09 45 4C 53 45 0D 0A 09 09 09 44 65 76 69 63 65 .ELSE.....Device
00DA80: 3A 3D 27 20 27 3B 0D 0A 09 09 09 69 3A 3D 30 3B :=' ';.....i:=0;
00DA90: 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 6A 3A 3D .....END;....j:=
00DAA0: 31 3B 0D 0A 0D 0A 09 09 28 2A 09 70 69 63 6B 20 1;......(*.pick
00DAB0: 75 70 20 66 69 6C 65 20 6E 61 6D 65 20 2A 29 0D up file name *).
00DAC0: 0A 0D 0A 09 09 57 48 49 4C 45 20 20 20 28 69 3C .....WHILE (i<
00DAD0: 3D 48 49 47 48 28 54 65 78 74 29 29 0D 0A 09 09 =HIGH(Text))....
00DAE0: 20 20 20 20 41 4E 44 09 28 54 65 78 74 5B 69 5D AND.(Text[i]
00DAF0: 3C 3E 30 78 29 0D 0A 09 09 20 20 20 20 41 4E 44 <>0x).... AND
00DB00: 6E 75 6D 20 43 65 6E 74 72 61 6C 20 34 31 37 38 num Central 4178
00DB10: 0D 0A 0D 0A 0D 0A 09 43 61 6C 6C 20 69 73 20 43 .......Call is C
00DB20: 4F 4D 50 44 49 52 20 20 20 77 69 6C 64 20 63 61 OMPDIR wild ca
00DB30: 72 64 2C 77 69 6C 64 20 63 61 72 64 2C 6C 69 73 rd,wild card,lis
00DB40: 74 20 66 69 6C 65 20 5B 6F 70 74 69 6F 6E 73 0D t file [options.
00DB50: 0A 0D 0A 09 57 68 65 72 65 20 65 61 63 68 20 77 ....Where each w
00DB60: 69 6C 64 20 63 61 72 64 20 70 72 6F 64 75 63 65 ild card produce
00DB70: 73 20 6F 6E 65 20 6F 66 20 74 68 65 20 6C 69 73 s one of the lis
00DB80: 74 73 20 74 6F 20 63 6F 6D 70 61 72 65 0D 0A 0D ts to compare...
00DB90: 0A 09 46 6F 72 20 65 78 61 6D 70 6C 65 2C 20 74 ..For example, t
00DBA0: 6F 20 63 6F 6D 70 61 72 65 20 74 77 6F 20 64 69 o compare two di
00DBB0: 73 63 73 2C 20 64 6F 3A 20 43 4F 4D 50 44 49 52 scs, do: COMPDIR
00DBC0: 20 61 3A 2A 2E 2A 20 62 3A 2A 2E 2A 0D 0A 0D 0A a:*.* b:*.*....
00DBD0: 09 4F 70 74 69 6F 6E 73 20 61 72 65 20 61 6E 79 .Options are any
00DBE0: 20 6F 66 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E of the followin
00DBF0: 67 3A 0D 0A 09 09 54 09 63 6F 6D 70 61 72 65 20 g:....T.compare
00DC00: 6F 6E 6C 79 20 66 69 6C 65 20 74 79 70 65 20 28 only file type (
00DC10: 62 79 20 64 65 66 61 75 6C 74 2C 20 74 68 65 20 by default, the
00DC20: 77 68 6F 6C 65 20 6E 61 6D 65 20 69 73 20 63 6F whole name is co
00DC30: 6D 70 61 72 65 64 29 0D 0A 09 09 09 28 62 79 20 mpared).....(by
00DC40: 66 69 6C 65 20 74 79 70 65 2C 20 49 20 6D 65 61 file type, I mea
00DC50: 6E 20 74 68 65 20 28 33 29 20 63 68 61 72 61 63 n the (3) charac
00DC60: 74 65 72 73 20 61 66 74 65 72 20 74 68 65 20 64 ters after the d
00DC70: 6F 74 29 0D 0A 09 09 4E 09 63 6F 6D 70 61 72 65 ot)....N.compare
00DC80: 20 6F 6E 6C 79 20 66 69 6C 65 20 6E 61 6D 65 0D only file name.
00DC90: 0A 09 09 43 09 69 66 20 66 69 6C 65 20 6E 61 6D ...C.if file nam
00DCA0: 65 73 20 6D 61 74 63 68 2C 20 63 68 65 63 6B 20 es match, check
00DCB0: 66 69 6C 65 20 63 6F 6E 74 65 6E 74 73 20 61 73 file contents as
00DCC0: 20 77 65 6C 6C 0D 0A 09 09 0D 0A 09 09 0D 0A 09 well...........
00DCD0: 09 09 54 68 65 73 65 20 74 77 6F 20 6F 70 74 69 ..These two opti
00DCE0: 6F 6E 73 20 61 72 65 20 6D 75 74 75 61 6C 6C 79 ons are mutually
00DCF0: 20 65 78 63 6C 75 73 69 76 65 0D 0A 0D 0A 09 09 exclusive......
00DD00: 20 28 54 65 78 74 5B 69 5D 3C 3E 27 20 27 29 0D (Text[i]<>' ').
00DD10: 0A 09 09 20 20 20 20 41 4E 44 09 28 54 65 78 74 ... AND.(Text
00DD20: 5B 69 5D 3C 3E 27 2E 27 29 20 44 4F 0D 0A 09 09 [i]<>'.') DO....
00DD30: 09 49 46 20 20 6A 3C 3D 48 49 47 48 28 4E 61 6D .IF j<=HIGH(Nam
00DD40: 65 29 20 54 48 45 4E 20 4E 61 6D 65 5B 6A 5D 3A e) THEN Name[j]:
00DD50: 3D 54 65 78 74 5B 69 5D 20 45 4E 44 3B 0D 0A 09 =Text[i] END;...
00DD60: 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 49 4E ..INC(j);.....IN
00DD70: 43 28 69 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A C(i);.....END;..
00DD80: 09 09 46 4F 52 20 6A 3A 3D 6A 20 54 4F 20 48 49 ..FOR j:=j TO HI
00DD90: 47 48 28 4E 61 6D 65 29 20 44 4F 20 4E 61 6D 65 GH(Name) DO Name
00DDA0: 5B 6A 5D 3A 3D 30 78 20 45 4E 44 3B 0D 0A 0D 0A [j]:=0x END;....
00DDB0: 09 09 28 2A 4E 6F 74 65 20 74 68 61 74 20 49 20 ..(*Note that I
00DDC0: 75 73 65 20 7A 65 72 6F 20 69 6E 73 74 65 61 64 use zero instead
00DDD0: 20 6F 66 20 62 6C 61 6E 6B 20 66 69 6C 6C 20 74 of blank fill t
00DDE0: 6F 20 73 69 6D 70 6C 69 66 79 20 6C 69 73 74 69 o simplify listi
00DDF0: 6E 67 0D 0A 09 09 20 20 6F 66 20 74 68 65 20 6E ng.... of the n
00DE00: 61 6D 65 73 2A 29 0D 0A 09 09 6A 3A 3D 31 3B 0D ames*)....j:=1;.
00DE10: 0A 09 09 49 46 20 54 65 78 74 5B 69 5D 3D 27 2E ...IF Text[i]='.
00DE20: 27 20 54 48 45 4E 20 49 4E 43 28 69 29 20 45 4E ' THEN INC(i) EN
00DE30: 44 3B 0D 0A 09 09 57 48 49 4C 45 20 20 20 28 69 D;....WHILE (i
00DE40: 3C 3D 48 49 47 48 28 54 65 78 74 29 29 0D 0A 09 <=HIGH(Text))...
00DE50: 09 20 20 20 20 41 4E 44 09 28 54 65 78 74 5B 69 . AND.(Text[i
00DE60: 5D 3C 3E 30 78 29 0D 0A 09 09 20 20 20 20 41 4E ]<>0x).... AN
00DE70: 44 09 28 54 65 78 74 5B 69 5D 3C 3E 27 20 27 29 D.(Text[i]<>' ')
00DE80: 20 44 4F 0D 0A 09 09 09 49 46 20 20 6A 3C 3D 48 DO.....IF j<=H
00DE90: 49 47 48 28 54 79 70 65 29 20 54 48 45 4E 20 54 IGH(Type) THEN T
00DEA0: 79 70 65 5B 6A 5D 3A 3D 54 65 78 74 5B 69 5D 20 ype[j]:=Text[i]
00DEB0: 45 4E 44 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 3B END;.....INC(j);
00DEC0: 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D 0A 09 09 .....INC(i);....
00DED0: 09 45 4E 44 3B 0D 0A 09 09 46 4F 52 20 6A 3A 3D .END;....FOR j:=
00DEE0: 6A 20 54 4F 20 48 49 47 48 28 54 79 70 65 29 20 j TO HIGH(Type)
00DEF0: 44 4F 20 54 79 70 65 5B 6A 5D 3A 3D 30 78 20 45 DO Type[j]:=0x E
00DF00: 45 09 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61 E.Output file na
00DF10: 6D 65 73 20 77 68 69 63 68 20 6D 61 74 63 68 20 mes which match
00DF20: 74 6F 20 6C 69 73 74 20 66 69 6C 65 0D 0A 09 09 to list file....
00DF30: 41 09 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61 A.Output file na
00DF40: 6D 65 73 20 77 68 69 63 68 20 68 61 76 65 20 62 mes which have b
00DF50: 65 65 6E 20 61 64 64 65 64 20 74 6F 20 74 68 65 een added to the
00DF60: 20 73 65 63 6F 6E 64 20 6C 69 73 74 0D 0A 09 09 second list....
00DF70: 44 09 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61 D.Output file na
00DF80: 6D 65 73 20 77 68 69 63 68 20 68 61 76 65 20 62 mes which have b
00DF90: 65 65 6E 20 64 65 6C 65 74 65 64 20 66 72 6F 6D een deleted from
00DFA0: 20 74 68 65 20 66 69 72 73 74 20 6C 69 73 74 0D the first list.
00DFB0: 0A 09 09 4D 09 4F 75 74 70 75 74 20 66 69 6C 65 ...M.Output file
00DFC0: 73 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65 s which have bee
00DFD0: 6E 20 6D 6F 64 69 66 69 65 64 20 74 6F 20 74 68 n modified to th
00DFE0: 65 20 6C 69 73 74 20 66 69 6C 65 0D 0A 0D 0A 09 e list file.....
00DFF0: 09 09 54 68 65 73 65 20 6F 70 74 69 6F 6E 73 20 ..These options
00E000: 6D 61 79 20 62 65 20 63 6F 6D 62 69 6E 65 64 0D may be combined.
00E010: 0A 0D 0A 0D 0A 09 54 68 65 20 70 72 6F 67 72 61 ......The progra
00E020: 6D 20 63 61 6E 20 62 65 20 76 65 72 79 20 75 73 m can be very us
00E030: 65 66 75 6C 20 66 6F 72 20 75 70 64 61 74 69 6E eful for updatin
00E040: 67 20 64 69 73 63 73 20 62 61 73 65 64 20 6F 6E g discs based on
00E050: 20 74 68 65 69 72 0D 0A 09 65 78 69 73 74 69 6E their...existin
00E060: 67 20 63 6F 6E 74 65 6E 74 73 2C 20 77 68 69 63 g contents, whic
00E070: 68 20 69 73 20 61 6E 20 61 72 65 61 20 69 6E 20 h is an area in
00E080: 77 68 69 63 68 20 73 77 65 65 70 20 69 73 20 77 which sweep is w
00E090: 65 61 6B 2E 20 0D 0A 0D 0A 09 54 68 69 73 20 69 eak. .....This i
00E0A0: 73 20 61 20 6D 6F 64 69 66 69 65 64 20 61 6E 64 s a modified and
00E0B0: 20 65 6E 68 61 6E 63 65 64 20 76 65 72 73 69 6F enhanced versio
00E0C0: 6E 20 6F 66 20 74 68 65 20 6F 72 69 67 69 6E 61 n of the origina
00E0D0: 6C 20 43 6F 6D 70 44 69 72 20 70 72 6F 67 72 61 l CompDir progra
00E0E0: 6D 0D 0A 09 77 68 69 63 68 20 77 61 73 20 77 72 m...which was wr
00E0F0: 69 74 74 65 6E 20 66 6F 72 20 65 78 70 6F 73 69 itten for exposi
00E100: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 2A 57 49 54 ND;....END;(*WIT
00E110: 48 2A 29 0D 0A 09 45 4E 44 20 43 72 61 63 6B 46 H*)...END CrackF
00E120: 69 6C 65 4E 61 6D 65 3B 0D 0A 09 0D 0A 50 52 4F ileName;.....PRO
00E130: 43 45 44 55 52 45 20 55 73 61 67 65 3B 0D 0A 42 CEDURE Usage;..B
00E140: 45 47 49 4E 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D EGIN...WriteLn;.
00E150: 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 55 ..WriteString('U
00E160: 73 61 67 65 20 69 73 3A 20 20 20 43 4F 4D 50 44 sage is: COMPD
00E170: 49 52 20 77 69 6C 64 20 63 61 72 64 20 66 69 6C IR wild card fil
00E180: 65 20 6E 61 6D 65 27 29 3B 0D 0A 09 57 72 69 74 e name');...Writ
00E190: 65 53 74 72 69 6E 67 28 27 2C 20 77 69 6C 64 20 eString(', wild
00E1A0: 63 61 72 64 20 66 69 6C 65 20 6E 61 6D 65 20 5B card file name [
00E1B0: 2C 20 6C 69 73 74 20 66 69 6C 65 5D 20 5B 2F 6F , list file] [/o
00E1C0: 70 74 69 6F 6E 73 5D 27 29 3B 0D 0A 09 57 72 69 ptions]');...Wri
00E1D0: 74 65 4C 6E 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 teLn;WriteLn;...
00E1E0: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 4F 70 WriteString(' Op
00E1F0: 74 69 6F 6E 73 20 61 72 65 3A 20 20 27 29 3B 57 tions are: ');W
00E200: 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 riteLn;...WriteS
00E210: 74 72 69 6E 67 28 27 09 09 54 09 63 6F 6D 70 61 tring('..T.compa
00E220: 72 65 20 6F 6E 6C 79 20 66 69 6C 65 20 74 79 70 re only file typ
00E230: 65 20 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 e ');WriteLn;...
00E240: 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 4E WriteString('..N
00E250: 09 63 6F 6D 70 61 72 65 20 6F 6E 6C 79 20 66 69 .compare only fi
00E260: 6C 65 20 6E 61 6D 65 27 29 3B 57 72 69 74 65 4C le name');WriteL
00E270: 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 n;...WriteString
00E280: 28 27 09 09 43 09 63 6F 6D 70 61 72 65 20 63 6F ('..C.compare co
00E290: 6E 74 65 6E 74 73 20 6F 66 20 6D 61 74 63 68 69 ntents of matchi
00E2A0: 6E 67 20 66 69 6C 65 73 27 29 3B 57 72 69 74 65 ng files');Write
00E2B0: 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E Ln;...WriteStrin
00E2C0: 67 28 27 09 09 45 09 4F 75 74 70 75 74 20 66 69 g('..E.Output fi
00E2D0: 6C 65 20 6E 61 6D 65 73 20 77 68 69 63 68 20 6D le names which m
00E2E0: 61 74 63 68 20 74 6F 20 6C 69 73 74 20 66 69 6C atch to list fil
00E2F0: 65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 e');WriteLn;...W
00E300: 74 6F 72 79 20 70 75 72 70 6F 73 65 73 2E 20 54 tory purposes. T
00E310: 68 65 20 70 72 6F 67 72 61 6D 20 69 73 20 77 72 he program is wr
00E320: 69 74 74 65 6E 20 69 6E 20 0D 0A 09 46 54 4C 20 itten in ...FTL
00E330: 4D 6F 64 75 6C 61 2D 32 2E 0D 0A 09 2A 29 0D 0A Modula-2....*)..
00E340: 0D 0A 46 52 4F 4D 20 09 53 59 53 54 45 4D 20 09 ..FROM .SYSTEM .
00E350: 09 49 4D 50 4F 52 54 20 41 44 44 52 45 53 53 2C .IMPORT ADDRESS,
00E360: 41 44 52 2C 54 53 49 5A 45 3B 0D 0A 46 52 4F 4D ADR,TSIZE;..FROM
00E370: 20 09 43 6F 6D 6D 61 6E 64 20 09 49 4D 50 4F 52 .Command .IMPOR
00E380: 54 20 50 61 72 61 6D 65 74 65 72 2C 50 61 72 63 T Parameter,Parc
00E390: 6C 61 73 73 2C 47 65 74 50 61 72 61 6D 73 3B 0D lass,GetParams;.
00E3A0: 0A 46 52 4F 4D 20 09 54 65 72 6D 69 6E 61 6C 09 .FROM .Terminal.
00E3B0: 49 4D 50 4F 52 54 20 57 72 69 74 65 53 74 72 69 IMPORT WriteStri
00E3C0: 6E 67 2C 57 72 69 74 65 4C 6E 2C 57 72 69 74 65 ng,WriteLn,Write
00E3D0: 3B 0D 0A 46 52 4F 4D 20 09 53 6F 72 74 20 09 09 ;..FROM .Sort ..
00E3E0: 49 4D 50 4F 52 54 20 53 6F 72 74 52 65 63 6F 72 IMPORT SortRecor
00E3F0: 64 73 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 20 ds;..FROM.Files
00E400: 09 09 49 4D 50 4F 52 54 20 46 69 6C 65 4E 61 6D ..IMPORT FileNam
00E410: 65 2C 46 49 4C 45 2C 43 72 65 61 74 65 3B 0D 0A e,FILE,Create;..
00E420: 46 52 4F 4D 09 47 65 74 46 69 6C 65 73 09 49 4D FROM.GetFiles.IM
00E430: 50 4F 52 54 20 47 65 74 4E 61 6D 65 73 3B 0D 0A PORT GetNames;..
00E440: 46 52 4F 4D 09 53 74 72 69 6E 67 73 09 09 49 4D FROM.Strings..IM
00E450: 50 4F 52 54 20 4C 65 6E 67 74 68 3B 0D 0A 46 52 PORT Length;..FR
00E460: 4F 4D 09 53 74 72 65 61 6D 73 09 09 49 4D 50 4F OM.Streams..IMPO
00E470: 52 54 20 53 54 52 45 41 4D 2C 43 6F 6E 6E 65 63 RT STREAM,Connec
00E480: 74 2C 44 69 73 63 6F 6E 6E 65 63 74 2C 57 72 69 t,Disconnect,Wri
00E490: 74 65 43 68 61 72 2C 44 69 72 65 63 74 69 6F 6E teChar,Direction
00E4A0: 3B 0D 0A 49 4D 50 4F 52 54 09 49 6E 4F 75 74 3B ;..IMPORT.InOut;
00E4B0: 0D 0A 46 52 4F 4D 09 46 69 6C 65 4F 70 73 09 09 ..FROM.FileOps..
00E4C0: 49 4D 50 4F 52 54 20 46 69 6C 65 43 6F 6D 70 3B IMPORT FileComp;
00E4D0: 0D 0A 43 4F 4E 53 54 09 4D 61 78 46 69 6C 65 73 ..CONST.MaxFiles
00E4E0: 3D 35 31 32 3B 09 28 2A 6D 61 78 20 66 69 6C 65 =512;.(*max file
00E4F0: 73 20 74 6F 20 62 65 20 6D 61 74 63 68 65 64 2A s to be matched*
00E500: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
00E510: 0C 00 01 00 02 09 52 E5 0C 00 41 02 00 00 00 02 ......R...A.....
00E520: 0C 00 46 02 00 00 00 02 0C 00 42 02 00 00 00 02 ..F.......B.....
00E530: 0C 00 47 02 00 00 00 02 0C 00 43 02 00 00 00 02 ..G.......C.....
00E540: 0C 00 48 02 00 00 00 02 0C 00 44 02 00 00 00 02 ..H.......D.....
00E550: 0C 00 49 02 00 00 00 02 0C 00 45 02 00 00 00 02 ..I.......E.....
00E560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E5F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E600: 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 41 09 riteString('..A.
00E610: 4F 75 74 70 75 74 20 66 69 6C 65 20 6E 61 6D 65 Output file name
00E620: 73 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65 s which have bee
00E630: 6E 20 61 64 64 65 64 20 74 6F 20 74 68 65 20 73 n added to the s
00E640: 65 63 6F 6E 64 20 6C 69 73 74 27 29 3B 57 72 69 econd list');Wri
00E650: 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 teLn;...WriteStr
00E660: 69 6E 67 28 27 09 09 44 09 4F 75 74 70 75 74 20 ing('..D.Output
00E670: 66 69 6C 65 20 6E 61 6D 65 73 20 77 68 69 63 68 file names which
00E680: 20 68 61 76 65 20 62 65 65 6E 20 64 65 6C 65 74 have been delet
00E690: 65 64 20 66 72 6F 6D 20 74 68 65 20 66 69 72 73 ed from the firs
00E6A0: 74 20 6C 69 73 74 27 29 3B 57 72 69 74 65 4C 6E t list');WriteLn
00E6B0: 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 ;...WriteString(
00E6C0: 27 09 09 4D 09 4F 75 74 70 75 74 20 66 69 6C 65 '..M.Output file
00E6D0: 20 6E 61 6D 65 73 20 6F 66 20 6D 6F 64 69 66 69 names of modifi
00E6E0: 65 64 20 66 69 6C 65 73 20 27 29 3B 57 72 69 74 ed files ');Writ
00E6F0: 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 eLn;...WriteStri
00E700: 6E 67 28 27 09 09 09 28 49 6D 70 6C 69 65 73 20 ng('...(Implies
00E710: 43 20 6F 70 74 69 6F 6E 29 27 29 3B 57 72 69 74 C option)');Writ
00E720: 65 4C 6E 3B 0D 0A 09 48 41 4C 54 0D 0A 09 45 4E eLn;...HALT...EN
00E730: 44 20 55 73 61 67 65 3B 0D 0A 0D 0A 0D 0A 50 52 D Usage;......PR
00E740: 4F 43 45 44 55 52 45 20 47 65 74 4F 70 74 69 6F OCEDURE GetOptio
00E750: 6E 73 28 70 3A 50 61 72 61 6D 65 74 65 72 29 3B ns(p:Parameter);
00E760: 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C ..VAR.i:CARDINAL
00E770: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20 ;..BEGIN...WITH
00E780: 70 5E 20 44 4F 0D 0A 09 09 69 3A 3D 30 3B 0D 0A p^ DO....i:=0;..
00E790: 09 09 4C 4F 4F 50 0D 0A 09 09 09 43 41 53 45 20 ..LOOP.....CASE
00E7A0: 43 68 61 72 73 5B 69 5D 20 4F 46 0D 0A 09 09 09 Chars[i] OF.....
00E7B0: 09 30 78 3A 45 58 49 54 7C 0D 0A 09 09 09 09 27 .0x:EXIT|......'
00E7C0: 54 27 3A 43 6F 6D 70 63 6C 61 73 73 3A 3D 54 79 T':Compclass:=Ty
00E7D0: 70 65 7C 0D 0A 09 09 09 09 27 4E 27 3A 43 6F 6D pe|......'N':Com
00E7E0: 70 63 6C 61 73 73 3A 3D 4E 61 6D 65 7C 0D 0A 09 pclass:=Name|...
00E7F0: 09 09 09 27 45 27 3A 4F 75 74 70 75 74 45 71 75 ...'E':OutputEqu
00E800: 69 74 65 53 74 72 69 6E 67 28 4E 61 6D 65 29 3B iteString(Name);
00E810: 0D 0A 09 09 57 72 69 74 65 43 68 61 72 28 4C 69 ....WriteChar(Li
00E820: 73 74 2C 27 2E 27 29 3B 0D 0A 09 09 49 6E 4F 75 st,'.');....InOu
00E830: 74 2E 57 72 69 74 65 53 74 72 69 6E 67 28 54 79 t.WriteString(Ty
00E840: 70 65 29 3B 0D 0A 09 09 49 6E 4F 75 74 2E 57 72 pe);....InOut.Wr
00E850: 69 74 65 4C 6E 3B 0D 0A 09 09 45 4E 44 3B 0D 0A iteLn;....END;..
00E860: 09 45 4E 44 20 57 72 69 74 65 54 6F 4C 69 73 74 .END WriteToList
00E870: 3B 0D 0A 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 ;.....PROCEDURE
00E880: 57 72 69 74 65 4E 61 6D 65 28 56 41 52 20 4E 3A WriteName(VAR N:
00E890: 46 69 6C 65 52 65 63 6F 72 64 3B 54 6F 4C 69 73 FileRecord;ToLis
00E8A0: 74 3A 42 4F 4F 4C 45 41 4E 29 3B 0D 0A 0D 0A 28 t:BOOLEAN);....(
00E8B0: 2A 09 6F 75 74 70 75 74 20 61 20 66 69 6C 65 20 *.output a file
00E8C0: 72 65 63 6F 72 64 20 61 73 20 61 20 76 61 6C 69 record as a vali
00E8D0: 64 20 66 69 6C 65 20 6E 61 6D 65 0D 0A 09 49 46 d file name...IF
00E8E0: 20 54 6F 6C 69 73 74 2C 20 6F 75 74 70 75 74 20 Tolist, output
00E8F0: 69 74 20 74 6F 20 6C 69 73 74 20 61 73 20 77 65 it to list as we
00E900: 6C 6C 2A 29 0D 0A 0D 0A 56 41 52 09 69 3A 43 41 ll*)....VAR.i:CA
00E910: 52 44 49 4E 41 4C 3B 0D 0A 09 63 68 3A 43 48 41 RDINAL;...ch:CHA
00E920: 52 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 R;..BEGIN...WITH
00E930: 20 4E 20 44 4F 0D 0A 09 09 49 46 20 44 65 76 69 N DO....IF Devi
00E940: 63 65 3C 3E 27 20 27 20 54 48 45 4E 20 0D 0A 09 ce<>' ' THEN ...
00E950: 09 09 63 68 3A 3D 27 3A 27 0D 0A 09 09 45 4C 53 ..ch:=':'....ELS
00E960: 45 0D 0A 09 09 09 63 68 3A 3D 27 20 27 0D 0A 09 E.....ch:=' '...
00E970: 09 09 45 4E 44 3B 0D 0A 09 09 57 72 69 74 65 28 ..END;....Write(
00E980: 44 65 76 69 63 65 29 3B 0D 0A 09 09 57 72 69 74 Device);....Writ
00E990: 65 28 63 68 29 3B 0D 0A 09 09 49 46 20 54 6F 4C e(ch);....IF ToL
00E9A0: 69 73 74 20 54 48 45 4E 0D 0A 09 09 09 57 72 69 ist THEN.....Wri
00E9B0: 74 65 43 68 61 72 28 4C 69 73 74 2C 44 65 76 69 teChar(List,Devi
00E9C0: 63 65 29 3B 0D 0A 09 09 09 57 72 69 74 65 43 68 ce);.....WriteCh
00E9D0: 61 72 28 4C 69 73 74 2C 63 68 29 3B 0D 0A 09 09 ar(List,ch);....
00E9E0: 09 45 4E 44 3B 0D 0A 09 09 57 72 69 74 65 53 74 .END;....WriteSt
00E9F0: 72 69 6E 67 28 4E 61 6D 65 29 3B 0D 0A 09 09 57 ring(Name);....W
00EA00: 61 6C 3A 3D 54 52 55 45 7C 0D 0A 09 09 09 09 27 al:=TRUE|......'
00EA10: 41 27 3A 4F 75 74 70 75 74 41 64 64 65 64 3A 3D A':OutputAdded:=
00EA20: 54 52 55 45 7C 0D 0A 09 09 09 09 27 44 27 3A 4F TRUE|......'D':O
00EA30: 75 74 70 75 74 44 65 6C 65 74 65 64 3A 3D 54 52 utputDeleted:=TR
00EA40: 55 45 7C 0D 0A 09 09 09 09 27 4D 27 3A 4F 75 74 UE|......'M':Out
00EA50: 70 75 74 4D 6F 64 69 66 69 65 64 3A 3D 54 52 55 putModified:=TRU
00EA60: 45 3B 0D 0A 09 09 09 09 20 20 20 20 43 6F 6D 70 E;...... Comp
00EA70: 61 72 65 43 6F 6E 74 65 6E 74 73 3A 3D 54 52 55 areContents:=TRU
00EA80: 45 7C 0D 0A 09 09 09 09 27 43 27 3A 43 6F 6D 70 E|......'C':Comp
00EA90: 61 72 65 43 6F 6E 74 65 6E 74 73 3A 3D 54 52 55 areContents:=TRU
00EAA0: 45 0D 0A 09 09 09 09 45 4C 53 45 20 55 73 61 67 E......ELSE Usag
00EAB0: 65 3B 0D 0A 09 09 09 09 45 4E 44 3B 28 2A 55 73 e;......END;(*Us
00EAC0: 61 67 65 2A 29 0D 0A 09 09 09 49 4E 43 28 69 29 age*).....INC(i)
00EAD0: 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E ;.....END;....EN
00EAE0: 44 3B 28 2A 57 49 54 48 2A 29 0D 0A 09 45 4E 44 D;(*WITH*)...END
00EAF0: 20 47 65 74 4F 70 74 69 6F 6E 73 3B 0D 0A 09 09 GetOptions;....
00EB00: 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6F 6D ...PROCEDURE Com
00EB10: 70 61 72 28 61 2C 62 3A 41 44 44 52 45 53 53 29 par(a,b:ADDRESS)
00EB20: 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 :BOOLEAN;....(*.
00EB30: 6B 65 79 20 63 6F 6D 70 61 72 69 73 6F 6E 20 72 key comparison r
00EB40: 6F 75 74 69 6E 65 20 66 6F 72 20 74 68 65 20 73 outine for the s
00EB50: 6F 72 74 20 6D 6F 64 75 6C 65 0D 0A 09 52 65 74 ort module...Ret
00EB60: 75 72 6E 73 20 54 52 55 45 20 69 66 20 61 20 69 urns TRUE if a i
00EB70: 73 20 67 72 65 61 74 65 72 20 74 68 61 6E 20 62 s greater than b
00EB80: 0D 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74 69 6E .....This routin
00EB90: 65 20 61 6C 77 61 79 73 20 63 6F 6D 70 61 72 65 e always compare
00EBA0: 73 20 74 68 65 20 66 75 6C 6C 20 6E 61 6D 65 20 s the full name
00EBB0: 61 73 20 69 74 20 69 73 20 75 73 65 64 0D 0A 09 as it is used...
00EBC0: 66 6F 72 20 73 6F 72 74 69 6E 67 2E 20 54 68 65 for sorting. The
00EBD0: 20 65 71 75 61 6C 69 74 79 20 72 6F 75 74 69 6E equality routin
00EBE0: 65 20 6F 6E 6C 79 20 63 6F 6D 70 61 72 65 73 20 e only compares
00EBF0: 74 68 65 20 70 61 72 74 0D 0A 09 6F 66 20 74 68 the part...of th
00EC00: 72 69 74 65 28 27 2E 27 29 3B 0D 0A 09 09 57 72 rite('.');....Wr
00EC10: 69 74 65 53 74 72 69 6E 67 28 54 79 70 65 29 3B iteString(Type);
00EC20: 0D 0A 09 09 49 46 20 54 6F 4C 69 73 74 20 54 48 ....IF ToList TH
00EC30: 45 4E 0D 0A 09 09 09 57 72 69 74 65 54 6F 4C 69 EN.....WriteToLi
00EC40: 73 74 28 4E 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D st(N);.....END;.
00EC50: 0A 0D 0A 09 09 28 2A 4E 6F 77 20 70 61 64 20 6E .....(*Now pad n
00EC60: 61 6D 65 20 6F 75 74 20 74 6F 20 31 36 20 63 6F ame out to 16 co
00EC70: 6C 75 6D 6E 73 2A 29 0D 0A 0D 0A 09 09 46 4F 52 lumns*)......FOR
00EC80: 20 69 3A 3D 4C 65 6E 67 74 68 28 4E 61 6D 65 29 i:=Length(Name)
00EC90: 2B 4C 65 6E 67 74 68 28 54 79 70 65 29 2B 34 20 +Length(Type)+4
00ECA0: 54 4F 20 31 36 20 44 4F 0D 0A 09 09 09 57 72 69 TO 16 DO.....Wri
00ECB0: 74 65 28 27 20 27 29 3B 0D 0A 09 09 09 45 4E 44 te(' ');.....END
00ECC0: 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 ;....END;...END
00ECD0: 57 72 69 74 65 4E 61 6D 65 3B 0D 0A 50 52 4F 43 WriteName;..PROC
00ECE0: 45 44 55 52 45 20 50 72 69 6E 74 4C 65 66 74 3B EDURE PrintLeft;
00ECF0: 0D 0A 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 4E ..BEGIN...WriteN
00ED00: 61 6D 65 28 4C 65 66 74 4E 61 6D 65 73 5B 69 5D ame(LeftNames[i]
00ED10: 2C 4F 75 74 70 75 74 44 65 6C 65 74 65 64 29 3B ,OutputDeleted);
00ED20: 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 45 4E ...WriteLn;...EN
00ED30: 44 20 50 72 69 6E 74 4C 65 66 74 3B 0D 0A 50 52 D PrintLeft;..PR
00ED40: 4F 43 45 44 55 52 45 20 50 72 69 6E 74 52 69 67 OCEDURE PrintRig
00ED50: 68 74 3B 0D 0A 42 45 47 49 4E 0D 0A 20 09 57 72 ht;..BEGIN.. .Wr
00ED60: 69 74 65 53 74 72 69 6E 67 28 27 20 20 20 20 20 iteString('
00ED70: 20 20 20 20 20 20 20 20 20 20 20 27 29 3B 0D 0A ');..
00ED80: 09 57 72 69 74 65 4E 61 6D 65 28 52 69 67 68 74 .WriteName(Right
00ED90: 4E 61 6D 65 73 5B 6A 5D 2C 4F 75 74 70 75 74 41 Names[j],OutputA
00EDA0: 64 64 65 64 29 3B 0D 0A 09 57 72 69 74 65 4C 6E dded);...WriteLn
00EDB0: 3B 0D 0A 09 45 4E 44 20 50 72 69 6E 74 52 69 67 ;...END PrintRig
00EDC0: 68 74 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 ht;....PROCEDURE
00EDD0: 20 43 6F 6D 70 61 72 65 4F 4B 28 66 31 2C 66 32 CompareOK(f1,f2
00EDE0: 3A 46 69 6C 65 52 65 63 6F 72 64 29 3A 42 4F 4F :FileRecord):BOO
00EDF0: 4C 45 41 4E 3B 0D 0A 0D 0A 56 41 52 09 66 6E 31 LEAN;....VAR.fn1
00EE00: 65 20 6E 61 6D 65 20 72 65 71 75 65 73 74 65 64 e name requested
00EE10: 20 62 79 20 74 68 65 20 66 6C 61 67 73 2E 20 41 by the flags. A
00EE20: 73 20 61 20 72 65 73 75 6C 74 2C 20 61 20 74 65 s a result, a te
00EE30: 73 74 0D 0A 09 66 6F 72 20 65 71 75 61 6C 69 74 st...for equalit
00EE40: 79 20 73 68 6F 75 6C 64 20 62 65 20 6D 61 64 65 y should be made
00EE50: 20 66 69 72 73 74 2A 29 0D 0A 0D 0A 56 41 52 09 first*)....VAR.
00EE60: 70 2C 71 3A 50 46 69 6C 65 4E 61 6D 65 3B 0D 0A p,q:PFileName;..
00EE70: 42 45 47 49 4E 0D 0A 09 70 3A 3D 50 46 69 6C 65 BEGIN...p:=PFile
00EE80: 4E 61 6D 65 28 61 29 3B 0D 0A 09 71 3A 3D 50 46 Name(a);...q:=PF
00EE90: 69 6C 65 4E 61 6D 65 28 62 29 3B 0D 0A 09 43 41 ileName(b);...CA
00EEA0: 53 45 20 43 6F 6D 70 63 6C 61 73 73 20 4F 46 0D SE Compclass OF.
00EEB0: 0A 09 09 54 79 70 65 3A 49 46 20 20 70 5E 2E 54 ...Type:IF p^.T
00EEC0: 79 70 65 3C 3E 71 5E 2E 54 79 70 65 20 54 48 45 ype<>q^.Type THE
00EED0: 4E 20 52 45 54 55 52 4E 20 70 5E 2E 54 79 70 65 N RETURN p^.Type
00EEE0: 3E 71 5E 2E 54 79 70 65 0D 0A 09 09 20 20 20 20 >q^.Type....
00EEF0: 20 45 4C 53 45 20 52 45 54 55 52 4E 20 70 5E 2E ELSE RETURN p^.
00EF00: 4E 61 6D 65 3E 71 5E 2E 4E 61 6D 65 20 45 4E 44 Name>q^.Name END
00EF10: 3B 20 0D 0A 09 09 09 7C 0D 0A 09 09 4E 61 6D 65 ; .....|....Name
00EF20: 2C 57 68 6F 6C 65 3A 49 46 20 70 5E 2E 4E 61 6D ,Whole:IF p^.Nam
00EF30: 65 3C 3E 71 5E 2E 4E 61 6D 65 20 54 48 45 4E 20 e<>q^.Name THEN
00EF40: 52 45 54 55 52 4E 20 70 5E 2E 4E 61 6D 65 3E 71 RETURN p^.Name>q
00EF50: 5E 2E 4E 61 6D 65 0D 0A 09 09 20 20 20 20 20 20 ^.Name....
00EF60: 45 4C 53 45 20 52 45 54 55 52 4E 20 70 5E 2E 54 ELSE RETURN p^.T
00EF70: 79 70 65 3E 71 5E 2E 54 79 70 65 20 45 4E 44 3B ype>q^.Type END;
00EF80: 0D 0A 09 09 45 4E 44 3B 28 2A 43 41 53 45 2A 29 ....END;(*CASE*)
00EF90: 0D 0A 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 72 3B .....END Compar;
00EFA0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 71 75 61 ..PROCEDURE Equa
00EFB0: 6C 28 70 2C 71 3A 46 69 6C 65 52 65 63 6F 72 64 l(p,q:FileRecord
00EFC0: 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A ):BOOLEAN;....(*
00EFD0: 09 63 6F 6D 70 61 72 65 20 74 6F 20 6E 61 6D 65 .compare to name
00EFE0: 73 20 66 6F 72 20 65 71 75 61 6C 69 74 79 0D 0A s for equality..
00EFF0: 09 70 61 74 74 65 72 6E 65 64 20 61 66 74 65 72 .patterned after
00F000: 2C 66 6E 32 3A 46 69 6C 65 4E 61 6D 65 3B 0D 0A ,fn2:FileName;..
00F010: 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 4E ..PROCEDURE SetN
00F020: 61 6D 65 28 66 3A 46 69 6C 65 52 65 63 6F 72 64 ame(f:FileRecord
00F030: 3B 56 41 52 20 66 6E 3A 46 69 6C 65 4E 61 6D 65 ;VAR fn:FileName
00F040: 29 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 44 );..VAR.i,j:CARD
00F050: 49 4E 41 4C 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 INAL;....PROCEDU
00F060: 52 45 20 50 75 74 28 63 68 3A 43 48 41 52 29 3B RE Put(ch:CHAR);
00F070: 0D 0A 42 45 47 49 4E 0D 0A 09 66 6E 5B 69 5D 3A ..BEGIN...fn[i]:
00F080: 3D 63 68 3B 0D 0A 09 49 4E 43 28 69 29 3B 0D 0A =ch;...INC(i);..
00F090: 09 45 4E 44 20 50 75 74 3B 0D 0A 0D 0A 42 45 47 .END Put;....BEG
00F0A0: 49 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 57 49 54 IN...i:=0;...WIT
00F0B0: 48 20 66 20 44 4F 0D 0A 09 09 49 46 20 44 65 76 H f DO....IF Dev
00F0C0: 69 63 65 3C 3E 27 20 27 20 54 48 45 4E 20 0D 0A ice<>' ' THEN ..
00F0D0: 09 09 09 50 75 74 28 44 65 76 69 63 65 29 3B 0D ...Put(Device);.
00F0E0: 0A 09 09 09 50 75 74 28 27 3A 27 29 3B 0D 0A 09 ....Put(':');...
00F0F0: 09 09 45 4E 44 3B 0D 0A 09 09 6A 3A 3D 31 3B 0D ..END;....j:=1;.
00F100: 0A 09 09 57 48 49 4C 45 20 28 6A 3C 3D 48 49 47 ...WHILE (j<=HIG
00F110: 48 28 4E 61 6D 65 29 29 20 41 4E 44 20 28 4E 61 H(Name)) AND (Na
00F120: 6D 65 5B 6A 5D 3C 3E 30 78 29 20 44 4F 0D 0A 09 me[j]<>0x) DO...
00F130: 09 09 50 75 74 28 4E 61 6D 65 5B 6A 5D 29 3B 0D ..Put(Name[j]);.
00F140: 0A 09 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 ....INC(j);.....
00F150: 45 4E 44 3B 0D 0A 09 09 6A 3A 3D 31 3B 0D 0A 09 END;....j:=1;...
00F160: 09 50 75 74 28 27 2E 27 29 3B 0D 0A 09 09 57 48 .Put('.');....WH
00F170: 49 4C 45 20 28 6A 3C 3D 48 49 47 48 28 54 79 70 ILE (j<=HIGH(Typ
00F180: 65 29 29 20 41 4E 44 20 28 54 79 70 65 5B 6A 5D e)) AND (Type[j]
00F190: 3C 3E 30 78 29 20 44 4F 0D 0A 09 09 09 50 75 74 <>0x) DO.....Put
00F1A0: 28 54 79 70 65 5B 6A 5D 29 3B 0D 0A 09 09 09 49 (Type[j]);.....I
00F1B0: 4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D NC(j);.....END;.
00F1C0: 0A 09 09 57 48 49 4C 45 20 69 3C 3D 48 49 47 48 ...WHILE i<=HIGH
00F1D0: 28 66 6E 29 20 44 4F 20 50 75 74 28 27 20 27 29 (fn) DO Put(' ')
00F1E0: 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 END;....END;...
00F1F0: 45 4E 44 20 53 65 74 4E 61 6D 65 3B 0D 0A 42 45 END SetName;..BE
00F200: 20 74 68 65 20 70 72 65 63 65 64 69 6E 67 20 72 the preceding r
00F210: 6F 75 74 69 6E 65 2A 29 0D 0A 0D 0A 0D 0A 42 45 outine*)......BE
00F220: 47 49 4E 0D 0A 09 43 41 53 45 20 43 6F 6D 70 63 GIN...CASE Compc
00F230: 6C 61 73 73 20 4F 46 0D 0A 09 09 54 79 70 65 3A lass OF....Type:
00F240: 52 45 54 55 52 4E 20 70 2E 54 79 70 65 3D 71 2E RETURN p.Type=q.
00F250: 54 79 70 65 7C 0D 0A 09 09 4E 61 6D 65 3A 52 45 Type|....Name:RE
00F260: 54 55 52 4E 20 70 2E 4E 61 6D 65 3D 71 2E 4E 61 TURN p.Name=q.Na
00F270: 6D 65 7C 0D 0A 09 09 57 68 6F 6C 65 3A 49 46 20 me|....Whole:IF
00F280: 70 2E 4E 61 6D 65 3C 3E 71 2E 4E 61 6D 65 20 54 p.Name<>q.Name T
00F290: 48 45 4E 20 52 45 54 55 52 4E 20 46 41 4C 53 45 HEN RETURN FALSE
00F2A0: 0D 0A 09 09 20 20 20 20 20 20 45 4C 53 45 20 52 .... ELSE R
00F2B0: 45 54 55 52 4E 20 70 2E 54 79 70 65 3D 71 2E 54 ETURN p.Type=q.T
00F2C0: 79 70 65 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B ype END;....END;
00F2D0: 28 2A 43 41 53 45 2A 29 0D 0A 0D 0A 09 45 4E 44 (*CASE*).....END
00F2E0: 20 45 71 75 61 6C 3B 0D 0A 0D 0A 50 52 4F 43 45 Equal;....PROCE
00F2F0: 44 55 52 45 20 45 78 70 61 6E 64 4E 61 6D 65 73 DURE ExpandNames
00F300: 28 50 61 72 61 6D 3A 50 61 72 61 6D 65 74 65 72 (Param:Parameter
00F310: 3B 56 41 52 20 4E 61 6D 65 73 3A 46 69 6C 65 41 ;VAR Names:FileA
00F320: 72 72 61 79 3B 0D 0A 09 09 09 56 41 52 20 4E 61 rray;.....VAR Na
00F330: 6D 65 43 6F 75 6E 74 3A 49 4E 54 45 47 45 52 29 meCount:INTEGER)
00F340: 3B 0D 0A 0D 0A 28 2A 09 45 78 70 61 6E 64 20 77 ;....(*.Expand w
00F350: 69 6C 64 20 63 61 72 64 20 66 69 6C 65 20 6E 61 ild card file na
00F360: 6D 65 20 69 6E 74 6F 20 6C 69 73 74 20 6F 66 20 me into list of
00F370: 66 69 6C 65 73 0D 0A 09 61 6E 64 20 73 6F 72 74 files...and sort
00F380: 20 72 65 73 75 6C 74 20 2A 29 0D 0A 56 41 52 09 result *)..VAR.
00F390: 69 2C 6A 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 4E i,j:INTEGER;...N
00F3A0: 61 6D 65 54 65 78 74 3A 41 52 52 41 59 20 5B 31 ameText:ARRAY [1
00F3B0: 2E 2E 4D 61 78 46 69 6C 65 73 5D 20 4F 46 20 46 ..MaxFiles] OF F
00F3C0: 69 6C 65 4E 61 6D 65 3B 0D 0A 09 54 65 78 74 3A ileName;...Text:
00F3D0: 41 52 52 41 59 5B 30 2E 2E 35 5D 20 4F 46 20 43 ARRAY[0..5] OF C
00F3E0: 48 41 52 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 HAR;..BEGIN...IF
00F3F0: 20 28 50 61 72 61 6D 5E 2E 43 68 61 72 73 5B 32 (Param^.Chars[2
00F400: 47 49 4E 0D 0A 09 53 65 74 4E 61 6D 65 28 66 31 GIN...SetName(f1
00F410: 2C 66 6E 31 29 3B 0D 0A 09 53 65 74 4E 61 6D 65 ,fn1);...SetName
00F420: 28 66 32 2C 66 6E 32 29 3B 0D 0A 09 52 45 54 55 (f2,fn2);...RETU
00F430: 52 4E 20 46 69 6C 65 43 6F 6D 70 28 66 6E 31 2C RN FileComp(fn1,
00F440: 66 6E 32 29 0D 0A 09 45 4E 44 20 43 6F 6D 70 61 fn2)...END Compa
00F450: 72 65 4F 4B 3B 0D 0A 09 09 0D 0A 56 41 52 09 72 reOK;......VAR.r
00F460: 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 eply:INTEGER;..B
00F470: 45 47 49 4E 0D 0A 0D 0A 0D 0A 09 47 65 74 50 61 EGIN.......GetPa
00F480: 72 61 6D 73 28 50 61 72 61 6D 2C 43 6F 75 6E 74 rams(Param,Count
00F490: 29 3B 0D 0A 09 49 46 20 28 43 6F 75 6E 74 3E 30 );...IF (Count>0
00F4A0: 29 20 41 4E 44 20 28 50 61 72 61 6D 5B 43 6F 75 ) AND (Param[Cou
00F4B0: 6E 74 5D 5E 2E 43 6C 61 73 73 3D 6F 70 74 69 6F nt]^.Class=optio
00F4C0: 6E 29 20 54 48 45 4E 0D 0A 09 09 47 65 74 4F 70 n) THEN....GetOp
00F4D0: 74 69 6F 6E 73 28 50 61 72 61 6D 5B 43 6F 75 6E tions(Param[Coun
00F4E0: 74 5D 29 3B 0D 0A 09 09 44 45 43 28 43 6F 75 6E t]);....DEC(Coun
00F4F0: 74 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 t);....END;...IF
00F500: 20 43 6F 75 6E 74 3C 32 20 54 48 45 4E 20 55 73 Count<2 THEN Us
00F510: 61 67 65 20 45 4E 44 3B 0D 0A 20 20 20 20 20 20 age END;..
00F520: 20 20 49 46 20 43 6F 75 6E 74 3D 33 20 54 48 45 IF Count=3 THE
00F530: 4E 20 0D 0A 09 09 43 72 65 61 74 65 28 4C 69 73 N ....Create(Lis
00F540: 74 46 2C 46 69 6C 65 4E 61 6D 65 28 50 61 72 61 tF,FileName(Para
00F550: 6D 5B 33 5D 5E 2E 43 68 61 72 73 29 2C 72 65 70 m[3]^.Chars),rep
00F560: 6C 79 29 3B 0D 0A 09 09 49 46 20 72 65 70 6C 79 ly);....IF reply
00F570: 3C 30 20 54 48 45 4E 0D 0A 09 09 09 57 72 69 74 <0 THEN.....Writ
00F580: 65 53 74 72 69 6E 67 28 27 20 43 6F 75 6C 64 20 eString(' Could
00F590: 6E 6F 74 20 6F 70 65 6E 20 6F 75 74 70 75 74 20 not open output
00F5A0: 66 69 6C 65 20 27 29 3B 0D 0A 09 09 09 57 72 69 file ');.....Wri
00F5B0: 74 65 53 74 72 69 6E 67 28 50 61 72 61 6D 5B 33 teString(Param[3
00F5C0: 5D 5E 2E 43 68 61 72 73 29 3B 0D 0A 09 09 09 57 ]^.Chars);.....W
00F5D0: 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 48 41 4C 54 riteLn;.....HALT
00F5E0: 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 43 6F ;.....END;....Co
00F5F0: 6E 6E 65 63 74 28 4C 69 73 74 2C 4C 69 73 74 46 nnect(List,ListF
00F600: 5D 3D 30 78 29 20 41 4E 44 20 28 50 61 72 61 6D ]=0x) AND (Param
00F610: 5E 2E 43 68 61 72 73 5B 31 5D 3D 27 3A 27 29 20 ^.Chars[1]=':')
00F620: 54 48 45 4E 0D 0A 09 09 54 65 78 74 3A 3D 27 20 THEN....Text:='
00F630: 3A 2A 2E 2A 27 3B 0D 0A 09 09 54 65 78 74 5B 30 :*.*';....Text[0
00F640: 5D 3A 3D 50 61 72 61 6D 5E 2E 43 68 61 72 73 5B ]:=Param^.Chars[
00F650: 30 5D 3B 0D 0A 09 09 47 65 74 4E 61 6D 65 73 28 0];....GetNames(
00F660: 54 65 78 74 2C 4E 61 6D 65 54 65 78 74 2C 4E 61 Text,NameText,Na
00F670: 6D 65 43 6F 75 6E 74 29 3B 0D 0A 09 45 4C 53 45 meCount);...ELSE
00F680: 0D 0A 09 09 47 65 74 4E 61 6D 65 73 28 50 61 72 ....GetNames(Par
00F690: 61 6D 5E 2E 43 68 61 72 73 2C 4E 61 6D 65 54 65 am^.Chars,NameTe
00F6A0: 78 74 2C 4E 61 6D 65 43 6F 75 6E 74 29 3B 0D 0A xt,NameCount);..
00F6B0: 09 09 45 4E 44 3B 0D 0A 09 0D 0A 09 28 2A 63 72 ..END;......(*cr
00F6C0: 61 63 6B 20 6E 61 6D 65 73 2A 29 0D 0A 0D 0A 09 ack names*).....
00F6D0: 46 4F 52 20 69 3A 3D 31 20 54 4F 20 4E 61 6D 65 FOR i:=1 TO Name
00F6E0: 43 6F 75 6E 74 20 44 4F 0D 0A 09 09 43 72 61 63 Count DO....Crac
00F6F0: 6B 46 69 6C 65 4E 61 6D 65 28 4E 61 6D 65 54 65 kFileName(NameTe
00F700: 78 74 5B 69 5D 2C 4E 61 6D 65 73 5B 69 5D 29 3B xt[i],Names[i]);
00F710: 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 49 46 20 ....END;.....IF
00F720: 4E 61 6D 65 43 6F 75 6E 74 3E 31 20 54 48 45 4E NameCount>1 THEN
00F730: 0D 0A 09 09 53 6F 72 74 52 65 63 6F 72 64 73 28 ....SortRecords(
00F740: 41 44 52 28 4E 61 6D 65 73 29 2C 43 41 52 44 49 ADR(Names),CARDI
00F750: 4E 41 4C 28 4E 61 6D 65 43 6F 75 6E 74 29 2C 0D NAL(NameCount),.
00F760: 0A 09 09 09 54 53 49 5A 45 28 46 69 6C 65 52 65 ....TSIZE(FileRe
00F770: 63 6F 72 64 29 2C 43 6F 6D 70 61 72 29 3B 0D 0A cord),Compar);..
00F780: 09 09 45 4E 44 3B 0D 0A 09 09 09 0D 0A 09 09 09 ..END;..........
00F790: 0D 0A 09 45 4E 44 20 45 78 70 61 6E 64 4E 61 6D ...END ExpandNam
00F7A0: 65 73 3B 0D 0A 0D 0A 56 41 52 09 69 2C 6A 3A 49 es;....VAR.i,j:I
00F7B0: 4E 54 45 47 45 52 3B 0D 0A 50 52 4F 43 45 44 55 NTEGER;..PROCEDU
00F7C0: 52 45 20 57 72 69 74 65 54 6F 4C 69 73 74 28 56 RE WriteToList(V
00F7D0: 41 52 20 4E 3A 46 69 6C 65 52 65 63 6F 72 64 29 AR N:FileRecord)
00F7E0: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 49 54 48 20 ;..BEGIN...WITH
00F7F0: 4E 20 44 4F 0D 0A 09 09 49 6E 4F 75 74 2E 57 72 N DO....InOut.Wr
00F800: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
00F810: 0D 00 01 00 02 09 52 E5 0D 00 41 02 00 00 00 02 ......R...A.....
00F820: 0D 00 46 02 00 00 00 02 0D 00 42 02 00 00 00 02 ..F.......B.....
00F830: 0D 00 47 02 00 00 00 02 0D 00 43 02 00 00 00 02 ..G.......C.....
00F840: 0D 00 48 02 00 00 00 02 0D 00 44 02 00 00 00 02 ..H.......D.....
00F850: 0D 00 49 02 00 00 00 02 0D 00 45 02 00 00 00 02 ..I.......E.....
00F860: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F890: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F8F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00F900: 2C 6F 75 74 70 75 74 29 3B 0D 0A 09 09 49 6E 4F ,output);....InO
00F910: 75 74 2E 53 77 69 74 63 68 4F 75 74 53 74 72 65 ut.SwitchOutStre
00F920: 61 6D 28 4C 69 73 74 29 3B 0D 0A 09 09 4C 69 73 am(List);....Lis
00F930: 74 4F 70 65 6E 3A 3D 54 52 55 45 3B 0D 0A 09 45 tOpen:=TRUE;...E
00F940: 4C 53 45 0D 0A 09 09 49 46 20 4F 75 74 70 75 74 LSE....IF Output
00F950: 41 64 64 65 64 20 4F 52 20 4F 75 74 70 75 74 44 Added OR OutputD
00F960: 65 6C 65 74 65 64 20 4F 52 20 0D 0A 09 09 20 20 eleted OR ....
00F970: 20 4F 75 74 70 75 74 45 71 75 61 6C 20 4F 52 20 OutputEqual OR
00F980: 4F 75 74 70 75 74 4D 6F 64 69 66 69 65 64 20 54 OutputModified T
00F990: 48 45 4E 20 0D 0A 09 09 09 57 72 69 74 65 53 74 HEN .....WriteSt
00F9A0: 72 69 6E 67 28 27 20 41 20 44 20 45 20 61 6E 64 ring(' A D E and
00F9B0: 20 4D 20 6F 70 74 69 6F 6E 73 20 72 65 71 75 69 M options requi
00F9C0: 72 65 20 6F 75 74 70 75 74 20 66 69 6C 65 20 6E re output file n
00F9D0: 61 6D 65 24 27 29 0D 0A 09 09 09 57 72 69 74 65 ame$').....Write
00F9E0: 4C 6E 3B 0D 0A 09 09 09 55 73 61 67 65 3B 0D 0A Ln;.....Usage;..
00F9F0: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D ...END;....END;.
00FA00: 0A 09 45 78 70 61 6E 64 4E 61 6D 65 73 28 50 61 ..ExpandNames(Pa
00FA10: 72 61 6D 5B 31 5D 2C 4C 65 66 74 4E 61 6D 65 73 ram[1],LeftNames
00FA20: 2C 4C 65 66 74 4E 61 6D 65 43 6F 75 6E 74 29 3B ,LeftNameCount);
00FA30: 0D 0A 09 45 78 70 61 6E 64 4E 61 6D 65 73 28 50 ...ExpandNames(P
00FA40: 61 72 61 6D 5B 32 5D 2C 52 69 67 68 74 4E 61 6D aram[2],RightNam
00FA50: 65 73 2C 52 69 67 68 74 4E 61 6D 65 43 6F 75 6E es,RightNameCoun
00FA60: 74 29 3B 0D 0A 0D 0A 09 28 2A 6E 6F 77 20 70 65 t);.....(*now pe
00FA70: 72 66 6F 72 6D 20 6D 65 72 67 65 20 70 61 73 73 rform merge pass
00FA80: 20 6F 66 20 74 77 6F 20 6C 69 73 74 73 2A 29 0D of two lists*).
00FA90: 0A 0D 0A 09 69 3A 3D 31 3B 0D 0A 09 6A 3A 3D 31 ....i:=1;...j:=1
00FAA0: 3B 0D 0A 09 57 48 49 4C 45 20 28 69 3C 3D 4C 65 ;...WHILE (i<=Le
00FAB0: 66 74 4E 61 6D 65 43 6F 75 6E 74 29 20 41 4E 44 ftNameCount) AND
00FAC0: 20 28 6A 3C 3D 52 69 67 68 74 4E 61 6D 65 43 6F (j<=RightNameCo
00FAD0: 75 6E 74 29 20 44 4F 0D 0A 09 09 49 46 20 45 71 unt) DO....IF Eq
00FAE0: 75 61 6C 28 4C 65 66 74 4E 61 6D 65 73 5B 69 5D ual(LeftNames[i]
00FAF0: 2C 52 69 67 68 74 4E 61 6D 65 73 5B 6A 5D 29 20 ,RightNames[j])
00FB00: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
00FB10: 4F 44 55 4C 45 20 46 69 6C 65 4F 70 73 3B 0D 0A ODULE FileOps;..
00FB20: 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D 09 49 4D ..FROM.SYSTEM.IM
00FB30: 50 4F 52 54 20 42 59 54 45 2C 41 44 52 2C 41 44 PORT BYTE,ADR,AD
00FB40: 44 52 45 53 53 3B 0D 0A 46 52 4F 4D 09 53 54 4F DRESS;..FROM.STO
00FB50: 52 41 47 45 20 49 4D 50 4F 52 54 20 46 72 65 65 RAGE IMPORT Free
00FB60: 53 70 61 63 65 2C 41 4C 4C 4F 43 41 54 45 2C 44 Space,ALLOCATE,D
00FB70: 45 41 4C 4C 4F 43 41 54 45 2C 52 45 4C 45 41 53 EALLOCATE,RELEAS
00FB80: 45 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 09 49 E;..FROM.Files.I
00FB90: 4D 50 4F 52 54 20 4C 6F 6F 6B 75 70 2C 43 72 65 MPORT Lookup,Cre
00FBA0: 61 74 65 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B ate,SeqReadBlock
00FBB0: 2C 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 43 ,SeqWriteBlock,C
00FBC0: 6C 6F 73 65 2C 0D 0A 09 09 09 46 49 4C 45 2C 46 lose,.....FILE,F
00FBD0: 69 6C 65 4E 61 6D 65 3B 0D 0A 46 52 4F 4D 09 54 ileName;..FROM.T
00FBE0: 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 57 erminal IMPORT W
00FBF0: 72 69 74 65 53 74 72 69 6E 67 2C 57 72 69 74 65 riteString,Write
00FC00: 4C 6E 3B 0D 0A 0D 0A 28 2A 09 50 65 72 66 6F 72 Ln;....(*.Perfor
00FC10: 6D 20 73 6F 6D 65 20 66 69 6C 65 20 6F 70 65 72 m some file oper
00FC20: 61 74 69 6F 6E 73 20 2A 29 0D 0A 0D 0A 54 59 50 ations *)....TYP
00FC30: 45 09 50 42 6C 6F 63 6B 3D 50 4F 49 4E 54 45 52 E.PBlock=POINTER
00FC40: 20 54 4F 20 42 6C 6F 63 6B 3B 0D 0A 09 42 6C 6F TO Block;...Blo
00FC50: 63 6B 3D 41 52 52 41 59 5B 30 2E 2E 31 32 37 5D ck=ARRAY[0..127]
00FC60: 20 4F 46 20 42 59 54 45 3B 0D 0A 56 41 52 09 62 OF BYTE;..VAR.b
00FC70: 31 2C 62 32 3A 50 42 6C 6F 63 6B 3B 0D 0A 09 69 1,b2:PBlock;...i
00FC80: 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 42 ,j:CARDINAL;...B
00FC90: 75 66 66 53 69 7A 65 3A 43 41 52 44 49 4E 41 4C uffSize:CARDINAL
00FCA0: 3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 ;...reply:INTEGE
00FCB0: 52 3B 0D 0A 09 66 31 2C 66 32 3A 46 49 4C 45 3B R;...f1,f2:FILE;
00FCC0: 0D 0A 09 72 65 70 6C 79 31 2C 72 65 70 6C 79 32 ...reply1,reply2
00FCD0: 3A 49 4E 54 45 47 45 52 3B 0D 0A 50 52 4F 43 45 :INTEGER;..PROCE
00FCE0: 44 55 52 45 20 53 65 74 55 70 28 43 6F 75 6E 74 DURE SetUp(Count
00FCF0: 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A 28 :CARDINAL);....(
00FD00: 54 48 45 4E 0D 0A 0D 0A 09 09 09 57 72 69 74 65 THEN.......Write
00FD10: 4E 61 6D 65 28 4C 65 66 74 4E 61 6D 65 73 5B 69 Name(LeftNames[i
00FD20: 5D 2C 4F 75 74 70 75 74 45 71 75 61 6C 29 3B 0D ],OutputEqual);.
00FD30: 0A 09 09 09 57 72 69 74 65 4E 61 6D 65 28 52 69 ....WriteName(Ri
00FD40: 67 68 74 4E 61 6D 65 73 5B 6A 5D 2C 46 41 4C 53 ghtNames[j],FALS
00FD50: 45 29 3B 0D 0A 09 09 09 49 46 20 43 6F 6D 70 61 E);.....IF Compa
00FD60: 72 65 43 6F 6E 74 65 6E 74 73 20 41 4E 44 20 0D reContents AND .
00FD70: 0A 09 09 09 20 20 4E 4F 54 20 43 6F 6D 70 61 72 .... NOT Compar
00FD80: 65 4F 4B 28 4C 65 66 74 4E 61 6D 65 73 5B 69 5D eOK(LeftNames[i]
00FD90: 2C 52 69 67 68 74 4E 61 6D 65 73 5B 6A 5D 29 20 ,RightNames[j])
00FDA0: 54 48 45 4E 0D 0A 09 09 09 09 57 72 69 74 65 53 THEN......WriteS
00FDB0: 74 72 69 6E 67 28 27 20 46 69 6C 65 73 20 44 69 tring(' Files Di
00FDC0: 66 66 65 72 20 27 29 3B 0D 0A 09 09 09 09 49 46 ffer ');......IF
00FDD0: 20 4F 75 74 70 75 74 4D 6F 64 69 66 69 65 64 20 OutputModified
00FDE0: 54 48 45 4E 0D 0A 09 09 09 09 09 57 72 69 74 65 THEN.......Write
00FDF0: 54 6F 4C 69 73 74 28 4C 65 66 74 4E 61 6D 65 73 ToList(LeftNames
00FE00: 5B 69 5D 29 3B 0D 0A 09 09 09 09 09 45 4E 44 3B [i]);.......END;
00FE10: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 57 ......END;.....W
00FE20: 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 49 4E 43 28 riteLn;.....INC(
00FE30: 69 29 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 3B 0D i);.....INC(j);.
00FE40: 0A 0D 0A 09 09 45 4C 53 49 46 20 4E 4F 54 20 43 .....ELSIF NOT C
00FE50: 6F 6D 70 61 72 28 41 44 52 28 4C 65 66 74 4E 61 ompar(ADR(LeftNa
00FE60: 6D 65 73 5B 69 5D 29 2C 41 44 52 28 52 69 67 68 mes[i]),ADR(Righ
00FE70: 74 4E 61 6D 65 73 5B 6A 5D 29 29 20 54 48 45 4E tNames[j])) THEN
00FE80: 0D 0A 0D 0A 09 09 09 50 72 69 6E 74 4C 65 66 74 .......PrintLeft
00FE90: 3B 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D 0A 0D ;.....INC(i);...
00FEA0: 0A 09 09 45 4C 53 45 20 28 2A 4C 65 66 74 6E 61 ...ELSE (*Leftna
00FEB0: 6D 65 73 5B 69 5D 3E 52 69 67 68 74 4E 61 6D 65 mes[i]>RightName
00FEC0: 73 5B 6A 5D 2A 29 0D 0A 09 0D 0A 09 09 09 50 72 s[j]*)........Pr
00FED0: 69 6E 74 52 69 67 68 74 3B 09 0D 0A 09 09 09 49 intRight;......I
00FEE0: 4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E 44 3B 28 NC(j);.....END;(
00FEF0: 2A 49 46 2A 29 0D 0A 09 09 45 4E 44 3B 28 2A 57 *IF*)....END;(*W
00FF00: 2A 09 53 65 74 20 75 70 20 31 20 6F 72 20 32 20 *.Set up 1 or 2
00FF10: 62 75 66 66 65 72 73 20 75 73 69 6E 67 20 61 6C buffers using al
00FF20: 6C 20 61 76 61 69 6C 61 62 6C 65 20 6D 65 6D 6F l available memo
00FF30: 72 79 20 2A 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A ry *)....BEGIN..
00FF40: 09 69 3A 3D 28 46 72 65 65 53 70 61 63 65 28 29 .i:=(FreeSpace()
00FF50: 2D 31 30 32 34 29 20 44 49 56 20 31 32 38 3B 0D -1024) DIV 128;.
00FF60: 0A 09 49 46 20 69 3C 43 6F 75 6E 74 20 54 48 45 ..IF i<Count THE
00FF70: 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 N....WriteString
00FF80: 28 27 20 4F 75 74 20 6F 66 20 4D 65 6D 6F 72 79 (' Out of Memory
00FF90: 20 69 6E 20 46 69 6C 65 4F 70 73 27 29 3B 0D 0A in FileOps');..
00FFA0: 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 48 41 ..WriteLn;....HA
00FFB0: 4C 54 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 69 3A LT;....END;...i:
00FFC0: 3D 69 20 44 49 56 20 43 6F 75 6E 74 3B 0D 0A 09 =i DIV Count;...
00FFD0: 42 75 66 66 53 69 7A 65 3A 3D 31 32 38 2A 69 3B BuffSize:=128*i;
00FFE0: 0D 0A 09 41 4C 4C 4F 43 41 54 45 28 62 31 2C 42 ...ALLOCATE(b1,B
00FFF0: 75 66 66 53 69 7A 65 29 3B 0D 0A 09 49 46 20 43 uffSize);...IF C
010000: 6F 75 6E 74 3D 32 20 54 48 45 4E 20 41 4C 4C 4F ount=2 THEN ALLO
010010: 43 41 54 45 28 62 32 2C 42 75 66 66 53 69 7A 65 CATE(b2,BuffSize
010020: 29 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 53 65 74 ) END;...END Set
010030: 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 Up;..PROCEDURE F
010040: 72 65 65 55 70 28 69 3A 43 41 52 44 49 4E 41 4C reeUp(i:CARDINAL
010050: 29 3B 0D 0A 28 2A 09 72 65 6C 65 61 73 65 20 62 );..(*.release b
010060: 75 66 66 65 72 73 20 2D 20 75 73 65 64 20 74 6F uffers - used to
010070: 20 64 69 73 70 6F 73 65 20 74 68 65 6D 20 62 75 dispose them bu
010080: 74 20 6E 6F 77 0D 0A 09 64 6F 65 73 20 61 20 72 t now...does a r
010090: 65 6C 65 61 73 65 20 77 68 69 63 68 20 69 73 20 elease which is
0100A0: 66 61 73 74 65 72 2E 20 41 73 20 61 20 72 65 73 faster. As a res
0100B0: 75 6C 74 20 70 61 72 61 6D 65 74 65 72 20 69 73 ult parameter is
0100C0: 20 6E 6F 74 20 72 65 71 75 69 72 65 64 0D 0A 20 not required..
0100D0: 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 52 45 4C 45 *)..BEGIN...RELE
0100E0: 41 53 45 28 41 44 44 52 45 53 53 28 62 31 29 29 ASE(ADDRESS(b1))
0100F0: 3B 0D 0A 09 45 4E 44 20 46 72 65 65 55 70 3B 0D ;...END FreeUp;.
010100: 48 49 4C 45 2A 29 0D 0A 0D 0A 09 28 2A 70 72 6F HILE*).....(*pro
010110: 63 65 73 73 20 73 74 72 61 67 67 6C 65 72 73 2A cess stragglers*
010120: 29 0D 0A 0D 0A 09 57 48 49 4C 45 20 69 3C 3D 4C ).....WHILE i<=L
010130: 65 66 74 4E 61 6D 65 43 6F 75 6E 74 20 44 4F 0D eftNameCount DO.
010140: 0A 09 09 50 72 69 6E 74 4C 65 66 74 3B 0D 0A 09 ...PrintLeft;...
010150: 09 49 4E 43 28 69 29 3B 0D 0A 09 09 45 4E 44 3B .INC(i);....END;
010160: 0D 0A 0D 0A 09 57 48 49 4C 45 20 6A 3C 3D 52 69 .....WHILE j<=Ri
010170: 67 68 74 4E 61 6D 65 43 6F 75 6E 74 20 44 4F 0D ghtNameCount DO.
010180: 0A 09 09 50 72 69 6E 74 52 69 67 68 74 3B 0D 0A ...PrintRight;..
010190: 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 45 4E 44 ..INC(j);....END
0101A0: 3B 0D 0A 09 49 46 20 4C 69 73 74 4F 70 65 6E 20 ;...IF ListOpen
0101B0: 54 48 45 4E 0D 0A 09 09 44 69 73 63 6F 6E 6E 65 THEN....Disconne
0101C0: 63 74 28 4C 69 73 74 2C 54 52 55 45 29 3B 0D 0A ct(List,TRUE);..
0101D0: 09 09 45 4E 44 3B 09 0D 0A 09 45 4E 44 20 43 6F ..END;....END Co
0101E0: 6D 70 44 69 72 2E 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A mpDir...........
0101F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
010200: 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 49 4C Files IMPORT FIL
010210: 45 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B 3B 0D E,SeqReadBlock;.
010220: 0A 56 41 52 09 49 6E 31 2C 49 6E 32 3A 46 49 4C .VAR.In1,In2:FIL
010230: 45 3B 0D 0A 09 42 6C 6F 63 6B 31 2C 42 6C 6F 63 E;...Block1,Bloc
010240: 6B 32 3A 41 52 52 41 59 20 5B 30 2E 2E 31 32 37 k2:ARRAY [0..127
010250: 5D 20 4F 46 20 42 59 54 45 3B 0D 0A 09 72 65 70 ] OF BYTE;...rep
010260: 6C 79 31 2C 72 65 70 6C 79 32 3A 49 4E 54 45 47 ly1,reply2:INTEG
010270: 45 52 3B 0D 0A 09 4C 6F 63 3A 43 41 52 44 49 4E ER;...Loc:CARDIN
010280: 41 4C 3B 0D 0A 09 69 2C 6A 3A 43 41 52 44 49 4E AL;...i,j:CARDIN
010290: 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 56 AL;..PROCEDURE V
0102A0: 65 72 79 51 75 69 63 6B 28 29 3A 42 4F 4F 4C 45 eryQuick():BOOLE
0102B0: 41 4E 3B 0D 0A 0D 0A 28 2A 09 4F 70 65 6E 20 61 AN;....(*.Open a
0102C0: 20 73 74 72 65 61 6D 20 66 6F 72 20 69 6E 70 75 stream for inpu
0102D0: 74 20 61 6E 64 20 61 20 73 74 72 65 61 6D 20 66 t and a stream f
0102E0: 6F 72 20 6F 75 74 70 75 74 20 2A 29 0D 0A 56 41 or output *)..VA
0102F0: 52 09 53 3A 41 52 52 41 59 5B 31 2E 2E 32 5D 20 R.S:ARRAY[1..2]
010300: 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 6C ...PROCEDURE Fil
010310: 65 43 6F 6D 70 28 66 6E 31 2C 66 6E 32 3A 41 52 eComp(fn1,fn2:AR
010320: 52 41 59 20 4F 46 20 43 48 41 52 29 3A 42 4F 4F RAY OF CHAR):BOO
010330: 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 43 6F 6D 70 LEAN;....(*.Comp
010340: 61 72 65 20 74 77 6F 20 66 69 6C 65 73 20 2D 20 are two files -
010350: 72 65 74 75 72 6E 20 54 52 55 45 20 69 66 20 65 return TRUE if e
010360: 71 75 61 6C 20 2A 29 0D 0A 56 41 52 09 69 3A 49 qual *)..VAR.i:I
010370: 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E 0D 0A NTEGER;..BEGIN..
010380: 09 53 65 74 55 70 28 32 29 3B 0D 0A 09 4C 6F 6F .SetUp(2);...Loo
010390: 6B 75 70 28 66 31 2C 46 69 6C 65 4E 61 6D 65 28 kup(f1,FileName(
0103A0: 66 6E 31 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 fn1),reply);...I
0103B0: 46 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 20 F reply<>0 THEN
0103C0: 0D 0A 09 09 46 72 65 65 55 70 28 32 29 3B 0D 0A ....FreeUp(2);..
0103D0: 09 09 52 45 54 55 52 4E 20 46 41 4C 53 45 20 0D ..RETURN FALSE .
0103E0: 0A 09 09 45 4E 44 3B 0D 0A 09 4C 6F 6F 6B 75 70 ...END;...Lookup
0103F0: 28 66 32 2C 46 69 6C 65 4E 61 6D 65 28 66 6E 32 (f2,FileName(fn2
010400: 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 20 72 ),reply);...IF r
010410: 65 70 6C 79 3C 3E 30 20 54 48 45 4E 20 0D 0A 09 eply<>0 THEN ...
010420: 09 46 72 65 65 55 70 28 32 29 3B 0D 0A 09 09 52 .FreeUp(2);....R
010430: 45 54 55 52 4E 20 46 41 4C 53 45 20 0D 0A 09 09 ETURN FALSE ....
010440: 45 4E 44 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 53 END;...LOOP....S
010450: 65 71 52 65 61 64 42 6C 6F 63 6B 28 66 31 2C 41 eqReadBlock(f1,A
010460: 44 52 28 62 31 5E 29 2C 42 75 66 66 53 69 7A 65 DR(b1^),BuffSize
010470: 2C 72 65 70 6C 79 31 29 3B 0D 0A 09 09 53 65 71 ,reply1);....Seq
010480: 52 65 61 64 42 6C 6F 63 6B 28 66 32 2C 41 44 52 ReadBlock(f2,ADR
010490: 28 62 32 5E 29 2C 42 75 66 66 53 69 7A 65 2C 72 (b2^),BuffSize,r
0104A0: 65 70 6C 79 32 29 3B 0D 0A 09 09 49 46 20 72 65 eply2);....IF re
0104B0: 70 6C 79 31 3C 3E 72 65 70 6C 79 32 20 54 48 45 ply1<>reply2 THE
0104C0: 4E 0D 0A 09 09 09 46 72 65 65 55 70 28 32 29 3B N.....FreeUp(2);
0104D0: 0D 0A 09 09 09 52 45 54 55 52 4E 20 46 41 4C 53 .....RETURN FALS
0104E0: 45 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 E.....END;....IF
0104F0: 20 72 65 70 6C 79 31 3C 3D 30 20 54 48 45 4E 20 reply1<=0 THEN
010500: 44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C DEFINITION MODUL
010510: 45 20 46 69 6C 65 4F 70 73 3B 0D 0A 0D 0A 28 2A E FileOps;....(*
010520: 09 50 65 72 66 6F 72 6D 20 73 6F 6D 65 20 66 69 .Perform some fi
010530: 6C 65 20 6F 70 65 72 61 74 69 6F 6E 73 20 2A 29 le operations *)
010540: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 ....PROCEDURE Fi
010550: 6C 65 43 6F 6D 70 28 66 31 2C 66 32 3A 41 52 52 leComp(f1,f2:ARR
010560: 41 59 20 4F 46 20 43 48 41 52 29 3A 42 4F 4F 4C AY OF CHAR):BOOL
010570: 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 43 6F 6D 70 61 EAN;....(*.Compa
010580: 72 65 20 74 77 6F 20 66 69 6C 65 73 20 2D 20 72 re two files - r
010590: 65 74 75 72 6E 20 54 52 55 45 20 69 66 20 65 71 eturn TRUE if eq
0105A0: 75 61 6C 0D 0A 0D 0A 09 49 46 20 65 69 74 68 65 ual.....IF eithe
0105B0: 72 20 66 69 6C 65 20 69 73 20 6E 6F 74 20 70 72 r file is not pr
0105C0: 65 73 65 6E 74 2C 20 46 41 4C 53 45 20 69 73 20 esent, FALSE is
0105D0: 72 65 74 75 72 6E 65 64 0D 0A 09 46 41 4C 53 45 returned...FALSE
0105E0: 20 69 73 20 73 74 69 6C 6C 20 72 65 74 75 72 6E is still return
0105F0: 65 64 20 69 66 20 6E 65 69 74 68 65 72 20 66 69 ed if neither fi
010600: 6C 65 20 69 73 20 70 72 65 73 65 6E 74 20 2A 29 le is present *)
010610: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 ....PROCEDURE Fi
010620: 6C 65 4D 6F 76 65 28 66 31 2C 66 32 3A 41 52 52 leMove(f1,f2:ARR
010630: 41 59 20 4F 46 20 43 48 41 52 29 3A 42 4F 4F 4C AY OF CHAR):BOOL
010640: 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 4D 6F 76 65 20 EAN;....(*.Move
010650: 66 31 20 74 6F 20 66 32 20 2D 20 72 65 74 75 72 f1 to f2 - retur
010660: 6E 73 20 54 52 55 45 20 69 66 20 73 75 63 63 65 ns TRUE if succe
010670: 73 73 66 75 6C 20 2A 29 0D 0A 0D 0A 45 4E 44 20 ssful *)....END
010680: 46 69 6C 65 4F 70 73 2E 0D 0A 0D 0A 0D 0A 1A 1A FileOps.........
010690: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0106A0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0106B0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0106C0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0106D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0106E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0106F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
010700: 0D 0A 09 09 09 46 72 65 65 55 70 28 32 29 3B 0D .....FreeUp(2);.
010710: 0A 09 09 09 52 45 54 55 52 4E 20 54 52 55 45 20 ....RETURN TRUE
010720: 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 46 4F 52 .....END;....FOR
010730: 20 69 3A 3D 30 20 54 4F 20 72 65 70 6C 79 31 2D i:=0 TO reply1-
010740: 31 20 44 4F 0D 0A 09 09 09 49 46 20 62 31 5E 5B 1 DO.....IF b1^[
010750: 69 5D 3C 3E 62 32 5E 5B 69 5D 20 54 48 45 4E 20 i]<>b2^[i] THEN
010760: 0D 0A 09 09 09 09 46 72 65 65 55 70 28 32 29 3B ......FreeUp(2);
010770: 0D 0A 09 09 09 09 52 45 54 55 52 4E 20 46 41 4C ......RETURN FAL
010780: 53 45 20 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 SE ......END;...
010790: 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 28 2A ..END;....END;(*
0107A0: 4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 46 69 6C LOOP*)...END Fil
0107B0: 65 43 6F 6D 70 3B 0D 0A 50 52 4F 43 45 44 55 52 eComp;..PROCEDUR
0107C0: 45 20 46 69 6C 65 4D 6F 76 65 28 66 6E 31 2C 66 E FileMove(fn1,f
0107D0: 6E 32 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 n2:ARRAY OF CHAR
0107E0: 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 ):BOOLEAN;..BEGI
0107F0: 4E 0D 0A 09 53 65 74 55 70 28 31 29 3B 0D 0A 09 N...SetUp(1);...
010800: 4C 6F 6F 6B 75 70 28 66 31 2C 46 69 6C 65 4E 61 Lookup(f1,FileNa
010810: 6D 65 28 66 6E 31 29 2C 72 65 70 6C 79 29 3B 0D me(fn1),reply);.
010820: 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54 48 ..IF reply<>0 TH
010830: 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E EN....WriteStrin
010840: 67 28 27 20 49 6E 70 75 74 20 66 69 6C 65 20 6E g(' Input file n
010850: 6F 74 20 66 6F 75 6E 64 20 27 29 3B 0D 0A 09 09 ot found ');....
010860: 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 46 72 65 65 WriteLn;....Free
010870: 55 70 28 31 29 3B 0D 0A 09 09 52 45 54 55 52 4E Up(1);....RETURN
010880: 20 46 41 4C 53 45 3B 0D 0A 09 09 45 4E 44 3B 0D FALSE;....END;.
010890: 0A 09 43 72 65 61 74 65 28 66 32 2C 46 69 6C 65 ..Create(f2,File
0108A0: 4E 61 6D 65 28 66 6E 32 29 2C 72 65 70 6C 79 29 Name(fn2),reply)
0108B0: 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 ;...IF reply<>0
0108C0: 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 THEN....WriteStr
0108D0: 69 6E 67 28 27 20 44 69 72 65 63 74 6F 72 79 20 ing(' Directory
0108E0: 66 75 6C 6C 20 27 29 3B 0D 0A 09 09 57 72 69 74 full ');....Writ
0108F0: 65 4C 6E 3B 0D 0A 09 09 46 72 65 65 55 70 28 31 eLn;....FreeUp(1
010900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0109A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0109B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0109C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0109D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0109E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0109F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010A00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010A10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010A20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010A30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010A40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010A50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010A60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010A70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010A80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010A90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010AA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010AB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010AC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010AD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010AE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010AF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
010B00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
010B10: 0E 00 01 00 02 09 52 E5 0E 00 41 02 00 00 00 02 ......R...A.....
010B20: 0E 00 46 02 00 00 00 02 0E 00 42 02 00 00 00 02 ..F.......B.....
010B30: 0E 00 47 02 00 00 00 02 0E 00 43 02 00 00 00 02 ..G.......C.....
010B40: 0E 00 48 02 00 00 00 02 0E 00 44 02 00 00 00 02 ..H.......D.....
010B50: 0E 00 49 02 00 00 00 02 0E 00 45 02 00 00 00 02 ..I.......E.....
010B60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010B70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010B80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010B90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010BF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
010C00: 29 3B 0D 0A 09 09 52 45 54 55 52 4E 20 46 41 4C );....RETURN FAL
010C10: 53 45 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C 4F SE;....END;...LO
010C20: 4F 50 0D 0A 09 09 53 65 71 52 65 61 64 42 6C 6F OP....SeqReadBlo
010C30: 63 6B 28 66 31 2C 41 44 52 28 62 31 5E 29 2C 42 ck(f1,ADR(b1^),B
010C40: 75 66 66 53 69 7A 65 2C 72 65 70 6C 79 31 29 3B uffSize,reply1);
010C50: 0D 0A 09 09 49 46 20 72 65 70 6C 79 31 3C 3D 30 ....IF reply1<=0
010C60: 20 54 48 45 4E 0D 0A 09 09 09 43 6C 6F 73 65 28 THEN.....Close(
010C70: 66 31 29 3B 0D 0A 09 09 09 43 6C 6F 73 65 28 66 f1);.....Close(f
010C80: 32 29 3B 0D 0A 09 09 09 46 72 65 65 55 70 28 31 2);.....FreeUp(1
010C90: 29 3B 0D 0A 09 09 09 52 45 54 55 52 4E 20 54 52 );.....RETURN TR
010CA0: 55 45 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 UE;.....END;....
010CB0: 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 28 66 32 SeqWriteBlock(f2
010CC0: 2C 41 44 52 28 62 32 5E 29 2C 42 75 66 66 53 69 ,ADR(b2^),BuffSi
010CD0: 7A 65 2C 72 65 70 6C 79 32 29 3B 0D 0A 09 09 49 ze,reply2);....I
010CE0: 46 20 72 65 70 6C 79 32 3C 3E 72 65 70 6C 79 31 F reply2<>reply1
010CF0: 20 54 48 45 4E 0D 0A 09 09 09 57 72 69 74 65 53 THEN.....WriteS
010D00: 74 72 69 6E 67 28 27 20 44 69 73 63 20 66 75 6C tring(' Disc ful
010D10: 6C 20 27 29 3B 0D 0A 09 09 09 57 72 69 74 65 4C l ');.....WriteL
010D20: 6E 3B 0D 0A 09 09 09 46 72 65 65 55 70 28 31 29 n;.....FreeUp(1)
010D30: 3B 0D 0A 09 09 09 52 45 54 55 52 4E 20 46 41 4C ;.....RETURN FAL
010D40: 53 45 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 SE;.....END;....
010D50: 45 4E 44 3B 0D 0A 09 45 4E 44 20 46 69 6C 65 4D END;...END FileM
010D60: 6F 76 65 3B 0D 0A 0D 0A 45 4E 44 20 46 69 6C 65 ove;....END File
010D70: 4F 70 73 2E 0D 0A 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A Ops.............
010D80: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
010D90: 1A 00 00 00 00 00 52 42 82 0D 30 02 80 03 00 00 ......RB..0.....
010DA0: 54 45 53 54 4E 45 53 54 4D 4F 44 20 00 00 00 00 TESTNESTMOD ....
010DB0: 00 00 00 00 00 00 67 3E 52 0D 08 1F 5B 01 00 00 ......g>R...[...
010DC0: 53 4D 41 4C 4C 49 4F 20 52 45 4C 20 00 00 00 00 SMALLIO REL ....
010DD0: 00 00 00 00 00 00 AF 42 82 0D 38 02 00 09 00 00 .......B..8.....
010DE0: 42 55 49 4C 44 4C 49 42 42 41 54 20 00 00 00 00 BUILDLIBBAT ....
010DF0: 00 00 00 00 00 00 87 9D 79 0C AB 13 00 03 00 00 ........y.......
010E00: 2C 6E 61 6D 65 29 3B 0D 0A 0D 0A 09 49 46 20 66 ,name);.....IF f
010E10: 2E 66 63 62 64 6E 3D 30 20 54 48 45 4E 20 44 65 .fcbdn=0 THEN De
010E20: 76 43 68 61 72 3A 3D 27 20 27 0D 0A 09 45 4C 53 vChar:=' '...ELS
010E30: 45 20 44 65 76 43 68 61 72 3A 3D 43 48 52 28 4F E DevChar:=CHR(O
010E40: 52 44 28 66 2E 66 63 62 64 6E 29 2B 28 4F 52 44 RD(f.fcbdn)+(ORD
010E50: 28 27 41 27 29 2D 31 29 29 20 45 4E 44 3B 0D 0A ('A')-1)) END;..
010E60: 0D 0A 0D 0A 09 28 2A 09 4E 6F 77 20 73 63 61 6E .....(*.Now scan
010E70: 20 66 6F 72 20 6D 61 74 63 68 69 6E 67 20 6E 61 for matching na
010E80: 6D 65 73 2A 29 0D 0A 0D 0A 09 69 3A 3D 42 44 4F mes*).....i:=BDO
010E90: 53 28 73 64 61 66 63 2C 41 44 52 28 64 6D 61 29 S(sdafc,ADR(dma)
010EA0: 29 3B 09 28 2A 73 65 74 20 64 6D 61 20 62 75 66 );.(*set dma buf
010EB0: 66 65 72 20 61 64 64 72 65 73 73 2A 29 09 0D 0A fer address*)...
010EC0: 09 69 3A 3D 42 44 4F 53 28 73 66 6F 66 63 2C 41 .i:=BDOS(sfofc,A
010ED0: 44 52 28 66 29 29 3B 09 09 28 2A 73 74 61 72 74 DR(f));..(*start
010EE0: 20 73 65 61 72 63 68 2A 29 0D 0A 09 43 6F 75 6E search*)...Coun
010EF0: 74 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 69 3C t:=0;...WHILE i<
010F00: 3E 32 35 35 20 44 4F 0D 0A 09 09 6A 3A 3D 30 3B >255 DO....j:=0;
010F10: 0D 0A 09 09 49 46 20 44 65 76 43 68 61 72 3C 3E ....IF DevChar<>
010F20: 27 20 27 20 54 48 45 4E 0D 0A 09 09 09 6E 61 6D ' ' THEN.....nam
010F30: 65 5B 30 5D 3A 3D 44 65 76 43 68 61 72 3B 0D 0A e[0]:=DevChar;..
010F40: 09 09 09 6E 61 6D 65 5B 31 5D 3A 3D 27 3A 27 3B ...name[1]:=':';
010F50: 0D 0A 09 09 09 6A 3A 3D 32 3B 0D 0A 09 09 09 45 .....j:=2;.....E
010F60: 4E 44 3B 0D 0A 09 09 57 49 54 48 20 64 6D 61 5B ND;....WITH dma[
010F70: 69 5D 20 44 4F 0D 0A 09 09 09 6B 3A 3D 31 3B 0D i] DO.....k:=1;.
010F80: 0A 09 09 09 57 48 49 4C 45 20 28 6B 3C 3D 48 49 ....WHILE (k<=HI
010F90: 47 48 28 64 69 72 66 6E 29 29 20 41 4E 44 20 28 GH(dirfn)) AND (
010FA0: 64 69 72 66 6E 5B 6B 5D 3C 3E 27 20 27 29 20 44 dirfn[k]<>' ') D
010FB0: 4F 0D 0A 09 09 09 09 6E 61 6D 65 5B 6A 5D 3A 3D O......name[j]:=
010FC0: 64 69 72 66 6E 5B 6B 5D 3B 0D 0A 09 09 09 09 49 dirfn[k];......I
010FD0: 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 49 4E 43 28 NC(j);......INC(
010FE0: 6B 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 k);......END;...
010FF0: 09 09 6E 61 6D 65 5B 6A 5D 3A 3D 27 2E 27 3B 0D ..name[j]:='.';.
011000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0110A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0110B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0110C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0110D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0110E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0110F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0111A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0111B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0111C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0111D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0111E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0111F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
011200: 0A 09 09 09 6B 3A 3D 31 3B 49 4E 43 28 6A 29 3B ....k:=1;INC(j);
011210: 0D 0A 09 09 09 57 48 49 4C 45 20 28 6B 3C 3D 48 .....WHILE (k<=H
011220: 49 47 48 28 64 69 72 66 74 29 29 20 41 4E 44 20 IGH(dirft)) AND
011230: 28 64 69 72 66 74 5B 6B 5D 3C 3E 27 20 27 29 20 (dirft[k]<>' ')
011240: 44 4F 0D 0A 09 09 09 09 6E 61 6D 65 5B 6A 5D 3A DO......name[j]:
011250: 3D 64 69 72 66 74 5B 6B 5D 3B 0D 0A 09 09 09 09 =dirft[k];......
011260: 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 49 4E 43 INC(j);......INC
011270: 28 6B 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A (k);......END;..
011280: 09 09 09 45 4E 44 3B 20 28 2A 57 49 54 48 20 44 ...END; (*WITH D
011290: 4D 41 2A 29 0D 0A 09 09 46 4F 52 20 6A 3A 3D 6A MA*)....FOR j:=j
0112A0: 20 54 4F 20 48 49 47 48 28 6E 61 6D 65 29 20 44 TO HIGH(name) D
0112B0: 4F 20 6E 61 6D 65 5B 6A 5D 3A 3D 27 20 27 20 45 O name[j]:=' ' E
0112C0: 4E 44 3B 0D 0A 09 09 6E 61 6D 65 73 5B 43 6F 75 ND;....names[Cou
0112D0: 6E 74 5D 3A 3D 6E 61 6D 65 3B 0D 0A 09 09 49 4E nt]:=name;....IN
0112E0: 43 28 43 6F 75 6E 74 29 3B 0D 0A 09 09 69 3A 3D C(Count);....i:=
0112F0: 42 44 4F 53 28 73 6E 6F 66 63 2C 41 44 52 28 66 BDOS(snofc,ADR(f
011300: 29 29 3B 09 28 2A 67 6F 20 74 6F 20 6E 65 78 74 ));.(*go to next
011310: 2A 29 0D 0A 09 09 45 4E 44 3B 20 28 2A 57 48 49 *)....END; (*WHI
011320: 4C 45 20 69 3C 3E 32 35 35 2A 29 0D 0A 09 0D 0A LE i<>255*).....
011330: 09 69 3A 3D 42 44 4F 53 28 73 64 61 66 63 2C 38 .i:=BDOS(sdafc,8
011340: 30 48 29 3B 09 09 28 2A 72 65 73 65 74 20 74 6F 0H);..(*reset to
011350: 20 64 65 66 61 75 6C 74 2A 29 0D 0A 09 0D 0A 09 default*)......
011360: 45 4E 44 20 53 65 61 72 63 68 46 6F 72 46 69 6C END SearchForFil
011370: 65 4E 61 6D 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A eNames;..BEGIN..
011380: 0D 0A 09 28 2A 20 43 6F 6E 76 65 72 74 20 50 61 ...(* Convert Pa
011390: 74 74 65 72 6E 20 74 6F 20 61 20 66 69 6C 65 20 ttern to a file
0113A0: 6E 61 6D 65 2A 29 0D 0A 09 0D 0A 09 6A 3A 3D 48 name*)......j:=H
0113B0: 49 47 48 28 50 61 74 74 65 72 6E 29 3B 0D 0A 09 IGH(Pattern);...
0113C0: 57 69 6C 64 43 61 72 64 3A 3D 46 41 4C 53 45 3B WildCard:=FALSE;
0113D0: 0D 0A 09 49 46 20 6A 3E 48 49 47 48 28 6E 61 6D ...IF j>HIGH(nam
0113E0: 65 29 20 54 48 45 4E 20 6A 3A 3D 48 49 47 48 28 e) THEN j:=HIGH(
0113F0: 6E 61 6D 65 29 20 45 4E 44 3B 0D 0A 09 46 4F 52 name) END;...FOR
011400: 44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C DEFINITION MODUL
011410: 45 20 47 65 74 46 69 6C 65 73 3B 0D 0A 0D 0A 28 E GetFiles;....(
011420: 2A 09 47 65 74 20 61 20 6C 69 73 74 20 6F 66 20 *.Get a list of
011430: 66 69 6C 65 20 6E 61 6D 65 73 20 6D 65 65 74 69 file names meeti
011440: 6E 67 20 61 20 77 69 6C 64 63 61 72 64 20 64 65 ng a wildcard de
011450: 73 63 72 69 70 74 69 6F 6E 2A 29 0D 0A 46 52 4F scription*)..FRO
011460: 4D 20 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 M Files IMPORT F
011470: 69 6C 65 4E 61 6D 65 3B 0D 0A 50 52 4F 43 45 44 ileName;..PROCED
011480: 55 52 45 20 47 65 74 4E 61 6D 65 73 28 50 61 74 URE GetNames(Pat
011490: 74 65 72 6E 3A 41 52 52 41 59 20 4F 46 20 43 48 tern:ARRAY OF CH
0114A0: 41 52 3B 0D 0A 09 09 56 41 52 09 6E 61 6D 65 73 AR;....VAR.names
0114B0: 3A 41 52 52 41 59 20 4F 46 20 46 69 6C 65 4E 61 :ARRAY OF FileNa
0114C0: 6D 65 3B 56 41 52 20 63 6F 75 6E 74 3A 49 4E 54 me;VAR count:INT
0114D0: 45 47 45 52 29 3B 0D 0A 0D 0A 28 2A 09 50 61 74 EGER);....(*.Pat
0114E0: 74 65 72 6E 20 69 73 20 61 20 70 61 74 74 65 72 tern is a patter
0114F0: 6E 20 74 6F 20 75 73 65 20 66 6F 72 20 74 68 65 n to use for the
011500: 20 73 65 61 72 63 68 0D 0A 09 6E 61 6D 65 73 20 search...names
011510: 72 65 74 75 72 6E 73 20 61 20 6C 69 73 74 20 6F returns a list o
011520: 66 20 6D 61 74 63 68 69 6E 67 20 66 69 6C 65 20 f matching file
011530: 6E 61 6D 65 20 28 77 69 74 68 20 6E 6F 20 64 65 name (with no de
011540: 76 69 63 65 20 6E 61 6D 65 0D 0A 09 09 6F 6E 20 vice name....on
011550: 74 68 65 20 66 72 6F 6E 74 29 0D 0A 09 63 6F 75 the front)...cou
011560: 6E 74 20 72 65 74 75 72 6E 73 20 6E 75 6D 62 65 nt returns numbe
011570: 72 20 6F 66 20 6E 61 6D 65 73 20 72 65 74 75 72 r of names retur
011580: 6E 65 64 20 69 6E 20 6E 61 6D 65 73 0D 0A 0D 0A ned in names....
011590: 09 49 66 20 74 68 65 20 67 69 76 65 6E 20 6E 61 .If the given na
0115A0: 6D 65 20 63 6F 6E 74 61 69 6E 73 20 6E 6F 20 77 me contains no w
0115B0: 69 6C 64 20 63 61 72 64 2C 20 69 74 20 69 73 20 ild card, it is
0115C0: 61 6C 77 61 79 73 20 72 65 74 75 72 6E 65 64 0D always returned.
0115D0: 0A 09 61 73 20 74 68 65 20 6F 6E 6C 79 20 6D 61 ..as the only ma
0115E0: 74 63 68 2C 20 77 68 65 74 68 65 72 20 69 74 20 tch, whether it
0115F0: 65 78 69 73 74 73 20 6F 72 20 6E 6F 74 20 0D 0A exists or not ..
011600: 20 69 3A 3D 30 20 54 4F 20 6A 20 44 4F 20 0D 0A i:=0 TO j DO ..
011610: 09 09 6E 61 6D 65 5B 69 5D 3A 3D 50 61 74 74 65 ..name[i]:=Patte
011620: 72 6E 5B 69 5D 3B 0D 0A 09 09 49 46 20 28 6E 61 rn[i];....IF (na
011630: 6D 65 5B 69 5D 3D 27 2A 27 29 20 4F 52 20 28 6E me[i]='*') OR (n
011640: 61 6D 65 5B 69 5D 3D 27 3F 27 29 20 54 48 45 4E ame[i]='?') THEN
011650: 20 57 69 6C 64 43 61 72 64 3A 3D 54 52 55 45 20 WildCard:=TRUE
011660: 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 46 END;....END;...F
011670: 4F 52 20 69 3A 3D 69 2B 31 20 54 4F 20 48 49 47 OR i:=i+1 TO HIG
011680: 48 28 6E 61 6D 65 29 20 44 4F 20 6E 61 6D 65 5B H(name) DO name[
011690: 69 5D 3A 3D 27 20 27 20 45 4E 44 3B 0D 0A 0D 0A i]:=' ' END;....
0116A0: 09 49 46 20 57 69 6C 64 43 61 72 64 20 54 48 45 .IF WildCard THE
0116B0: 4E 20 53 65 61 72 63 68 46 6F 72 46 69 6C 65 4E N SearchForFileN
0116C0: 61 6D 65 73 0D 0A 09 45 4C 53 45 0D 0A 09 09 43 ames...ELSE....C
0116D0: 6F 75 6E 74 3A 3D 31 3B 0D 0A 09 09 6E 61 6D 65 ount:=1;....name
0116E0: 73 5B 30 5D 3A 3D 6E 61 6D 65 0D 0A 09 09 45 4E s[0]:=name....EN
0116F0: 44 3B 0D 0A 09 45 4E 44 20 47 65 74 4E 61 6D 65 D;...END GetName
011700: 73 3B 0D 0A 45 4E 44 20 47 65 74 46 69 6C 65 73 s;..END GetFiles
011710: 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
011720: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
011730: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
011740: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
011750: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
011760: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
011770: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
011780: 70 5E 20 44 4F 0D 0A 09 09 69 3A 3D 30 3B 0D 0A p^ DO....i:=0;..
011790: 09 09 4C 4F 4F 50 0D 0A 09 09 09 43 41 53 45 20 ..LOOP.....CASE
0117A0: 43 68 61 72 73 5B 69 5D 20 4F 46 0D 0A 09 09 09 Chars[i] OF.....
0117B0: 09 30 78 3A 45 58 49 54 7C 0D 0A 09 09 09 09 27 .0x:EXIT|......'
0117C0: 54 27 3A 43 6F 6D 70 63 6C 61 73 73 3A 3D 54 79 T':Compclass:=Ty
0117D0: 70 65 7C 0D 0A 09 09 09 09 27 4E 27 3A 43 6F 6D pe|......'N':Com
0117E0: 70 63 6C 61 73 73 3A 3D 4E 61 6D 65 7C 0D 0A 09 pclass:=Name|...
0117F0: 09 09 09 27 45 27 3A 4F 75 74 70 75 74 45 71 75 ...'E':OutputEqu
011800: 0D 0A 09 57 68 69 6C 65 20 74 68 69 73 20 6D 65 ...While this me
011810: 61 6E 73 20 74 68 61 74 20 74 68 69 73 20 72 6F ans that this ro
011820: 75 74 69 6E 65 20 63 61 6E 6E 6F 74 20 62 65 20 utine cannot be
011830: 75 73 65 64 20 74 6F 20 63 68 65 63 6B 20 66 6F used to check fo
011840: 72 0D 0A 09 74 68 65 20 65 78 69 73 74 65 6E 63 r...the existenc
011850: 65 20 6F 66 20 61 20 66 69 6C 65 2C 20 69 74 20 e of a file, it
011860: 63 61 6E 20 62 65 20 75 73 65 64 20 74 6F 20 63 can be used to c
011870: 6F 6E 76 65 72 74 20 61 20 70 61 72 61 6D 65 74 onvert a paramet
011880: 65 72 0D 0A 09 74 6F 20 61 20 66 69 6C 65 6E 61 er...to a filena
011890: 6D 65 20 61 73 20 72 65 71 75 69 72 65 64 20 62 me as required b
0118A0: 79 20 74 68 65 20 6D 6F 64 75 6C 65 20 46 69 6C y the module Fil
0118B0: 65 73 20 2A 29 0D 0A 45 4E 44 20 47 65 74 46 69 es *)..END GetFi
0118C0: 6C 65 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A les.............
0118D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0118E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0118F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
011900: 61 72 61 6D 65 74 65 72 3B 09 09 28 2A 61 72 65 arameter;..(*are
011910: 61 20 66 6F 72 20 63 6F 6D 6D 61 6E 64 20 6C 69 a for command li
011920: 6E 65 2A 29 0D 0A 09 43 6F 75 6E 74 3A 49 4E 54 ne*)...Count:INT
011930: 45 47 45 52 3B 09 09 09 09 28 2A 70 61 72 61 6D EGER;....(*param
011940: 65 74 65 72 73 2A 29 0D 0A 0D 0A 09 4C 65 66 74 eters*).....Left
011950: 4E 61 6D 65 73 2C 52 69 67 68 74 4E 61 6D 65 73 Names,RightNames
011960: 3A 46 69 6C 65 41 72 72 61 79 3B 0D 0A 09 4C 65 :FileArray;...Le
011970: 66 74 4E 61 6D 65 43 6F 75 6E 74 2C 52 69 67 68 ftNameCount,Righ
011980: 74 4E 61 6D 65 43 6F 75 6E 74 3A 49 4E 54 45 47 tNameCount:INTEG
011990: 45 52 3B 0D 0A 0D 0A 09 43 6F 6D 70 63 6C 61 73 ER;.....Compclas
0119A0: 73 3A 43 6F 6D 70 43 6C 61 73 73 3D 57 68 6F 6C s:CompClass=Whol
0119B0: 65 3B 0D 0A 09 4F 75 74 70 75 74 41 64 64 65 64 e;...OutputAdded
0119C0: 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D :BOOLEAN=FALSE;.
0119D0: 0A 09 4F 75 74 70 75 74 45 71 75 61 6C 3A 42 4F ..OutputEqual:BO
0119E0: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 43 OLEAN=FALSE;...C
0119F0: 6F 6D 70 61 72 65 43 6F 6E 74 65 6E 74 73 3A 42 ompareContents:B
011A00: 44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C DEFINITION MODUL
011A10: 45 20 49 6D 70 6F 72 74 3B 0D 0A 0D 0A 28 2A 09 E Import;....(*.
011A20: 54 68 69 73 20 6D 6F 64 75 6C 65 20 61 6C 6C 6F This module allo
011A30: 77 73 20 79 6F 75 20 74 6F 20 70 69 63 6B 20 75 ws you to pick u
011A40: 70 0D 0A 09 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 p...information
011A50: 61 62 6F 75 74 20 73 79 6D 62 6F 6C 73 20 65 78 about symbols ex
011A60: 70 6F 72 74 65 64 0D 0A 09 66 72 6F 6D 20 61 6E ported...from an
011A70: 6F 74 68 65 72 20 6D 6F 64 75 6C 65 2E 20 49 74 other module. It
011A80: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 is used by the
011A90: 61 73 73 65 6D 62 6C 65 72 0D 0A 09 43 6F 70 79 assembler...Copy
011AA0: 72 69 67 68 74 20 28 43 29 20 44 61 76 65 20 4D right (C) Dave M
011AB0: 6F 6F 72 65 2C 20 46 54 4C 20 4D 6F 64 75 6C 61 oore, FTL Modula
011AC0: 2D 32 20 31 39 38 36 0D 0A 09 54 68 69 73 20 69 -2 1986...This i
011AD0: 73 20 61 20 67 65 6E 65 72 69 63 20 6D 6F 64 75 s a generic modu
011AE0: 6C 65 0D 0A 20 2A 29 0D 0A 46 52 4F 4D 09 53 59 le.. *)..FROM.SY
011AF0: 53 54 45 4D 20 49 4D 50 4F 52 54 20 42 59 54 45 STEM IMPORT BYTE
011B00: 2C 41 44 44 52 45 53 53 3B 0D 0A 46 52 4F 4D 09 ,ADDRESS;..FROM.
011B10: 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 69 6C Files IMPORT Fil
011B20: 65 4E 61 6D 65 3B 0D 0A 54 59 50 45 09 61 6C 66 eName;..TYPE.alf
011B30: 61 09 3D 20 41 52 52 41 59 5B 31 2E 2E 33 32 5D a.= ARRAY[1..32]
011B40: 20 4F 46 20 43 48 41 52 3B 20 0D 0A 09 0D 0A 09 OF CHAR; ......
011B50: 74 79 70 65 63 6C 61 73 73 3D 28 69 6E 74 74 79 typeclass=(intty
011B60: 70 65 2C 72 65 61 6C 74 79 70 65 2C 63 68 61 72 pe,realtype,char
011B70: 74 79 70 65 2C 62 6F 6F 6C 74 79 70 65 2C 0D 0A type,booltype,..
011B80: 09 09 61 72 72 61 79 74 79 70 65 2C 72 65 63 6F ..arraytype,reco
011B90: 72 64 74 79 70 65 2C 73 75 62 72 74 79 70 65 2C rdtype,subrtype,
011BA0: 66 6F 72 77 61 72 64 72 65 66 2C 70 6F 69 6E 74 forwardref,point
011BB0: 74 79 70 65 2C 0D 0A 09 09 73 65 74 74 79 70 65 type,....settype
011BC0: 2C 73 74 72 69 6E 67 74 79 70 65 2C 77 6F 72 64 ,stringtype,word
011BD0: 74 79 70 65 2C 62 79 74 65 74 79 70 65 2C 70 72 type,bytetype,pr
011BE0: 74 79 70 65 2C 65 6E 75 6D 74 79 70 65 2C 0D 0A type,enumtype,..
011BF0: 09 09 63 61 72 64 74 79 70 65 2C 61 64 64 72 74 ..cardtype,addrt
011C00: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
011C10: 4F 44 55 4C 45 20 47 65 74 46 69 6C 65 73 3B 0D ODULE GetFiles;.
011C20: 0A 46 52 4F 4D 20 43 50 4D 20 49 4D 50 4F 52 54 .FROM CPM IMPORT
011C30: 20 42 44 4F 53 2C 42 44 4F 53 48 4C 2C 73 66 6F BDOS,BDOSHL,sfo
011C40: 66 63 2C 73 6E 6F 66 63 2C 66 63 62 2C 73 64 61 fc,snofc,fcb,sda
011C50: 66 63 3B 0D 0A 46 52 4F 4D 20 43 50 4D 42 49 4F fc;..FROM CPMBIO
011C60: 53 20 49 4D 50 4F 52 54 20 64 69 72 65 63 74 6F S IMPORT directo
011C70: 72 79 3B 0D 0A 46 52 4F 4D 20 53 59 53 54 45 4D ry;..FROM SYSTEM
011C80: 20 49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 46 52 IMPORT ADR;..FR
011C90: 4F 4D 20 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 OM Files IMPORT
011CA0: 43 6F 6E 76 65 72 74 46 69 6C 65 4E 61 6D 65 3B ConvertFileName;
011CB0: 0D 0A 28 2A 09 47 65 74 20 61 20 6C 69 73 74 20 ..(*.Get a list
011CC0: 6F 66 20 66 69 6C 65 20 6E 61 6D 65 73 20 6D 65 of file names me
011CD0: 65 74 69 6E 67 20 61 20 77 69 6C 64 63 61 72 64 eting a wildcard
011CE0: 20 64 65 73 63 72 69 70 74 69 6F 6E 2A 29 0D 0A description*)..
011CF0: 56 41 52 09 69 2C 6A 2C 6B 3A 49 4E 54 45 47 45 VAR.i,j,k:INTEGE
011D00: 52 3B 0D 0A 09 66 3A 66 63 62 3B 0D 0A 09 6E 61 R;...f:fcb;...na
011D10: 6D 65 3A 46 69 6C 65 4E 61 6D 65 3B 0D 0A 09 44 me:FileName;...D
011D20: 65 76 43 68 61 72 3A 43 48 41 52 3B 0D 0A 09 57 evChar:CHAR;...W
011D30: 69 6C 64 43 61 72 64 3A 42 4F 4F 4C 45 41 4E 3B ildCard:BOOLEAN;
011D40: 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 4E ..PROCEDURE GetN
011D50: 61 6D 65 73 28 50 61 74 74 65 72 6E 3A 41 52 52 ames(Pattern:ARR
011D60: 41 59 20 4F 46 20 43 48 41 52 3B 56 41 52 20 6E AY OF CHAR;VAR n
011D70: 61 6D 65 73 3A 41 52 52 41 59 20 4F 46 20 46 69 ames:ARRAY OF Fi
011D80: 6C 65 4E 61 6D 65 3B 0D 0A 09 09 20 20 56 41 52 leName;.... VAR
011D90: 20 43 6F 75 6E 74 3A 49 4E 54 45 47 45 52 29 3B Count:INTEGER);
011DA0: 0D 0A 56 41 52 09 64 6D 61 3A 41 52 52 41 59 20 ..VAR.dma:ARRAY
011DB0: 5B 30 2E 2E 33 5D 20 4F 46 20 64 69 72 65 63 74 [0..3] OF direct
011DC0: 6F 72 79 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 ory;....PROCEDUR
011DD0: 45 20 53 65 61 72 63 68 46 6F 72 46 69 6C 65 4E E SearchForFileN
011DE0: 61 6D 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43 ames;..BEGIN...C
011DF0: 6F 6E 76 65 72 74 46 69 6C 65 4E 61 6D 65 28 66 onvertFileName(f
011E00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
011E10: 0F 00 01 00 02 09 52 E5 0F 00 41 02 00 00 00 02 ......R...A.....
011E20: 0F 00 46 02 00 00 00 02 0F 00 42 02 00 00 00 02 ..F.......B.....
011E30: 0F 00 47 02 00 00 00 02 0F 00 43 02 00 00 00 02 ..G.......C.....
011E40: 0F 00 48 02 00 00 00 02 0F 00 44 02 00 00 00 02 ..H.......D.....
011E50: 0F 00 49 02 00 00 00 02 0F 00 45 02 00 00 00 02 ..I.......E.....
011E60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011E70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011E80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011E90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011EA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011EB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011EC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011ED0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011EE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011EF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
011F00: 79 70 65 2C 75 6E 6B 6E 6F 77 6E 74 79 70 65 2C ype,unknowntype,
011F10: 69 6E 74 6F 72 63 61 72 64 29 3B 0D 0A 09 70 6E intorcard);...pn
011F20: 61 6D 65 3D 50 4F 49 4E 54 45 52 20 54 4F 20 6E ame=POINTER TO n
011F30: 61 6D 65 3B 0D 0A 0D 0A 09 70 70 61 72 61 6D 3D ame;.....pparam=
011F40: 50 4F 49 4E 54 45 52 20 54 4F 20 70 61 72 61 6D POINTER TO param
011F50: 3B 0D 0A 09 70 61 72 61 6D 3D 52 45 43 4F 52 44 ;...param=RECORD
011F60: 0D 0A 09 09 76 61 72 70 61 72 3A 42 4F 4F 4C 45 ....varpar:BOOLE
011F70: 41 4E 3B 0D 0A 09 09 76 61 72 74 79 70 65 3A 70 AN;....vartype:p
011F80: 6E 61 6D 65 3B 0D 0A 09 09 6E 65 78 74 3A 70 70 name;....next:pp
011F90: 61 72 61 6D 3B 0D 0A 09 09 6F 70 65 6E 61 72 72 aram;....openarr
011FA0: 61 79 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09 09 45 ay:BOOLEAN;....E
011FB0: 4E 44 3B 0D 0A 09 6F 62 6A 65 63 74 09 3D 20 28 ND;...object.= (
011FC0: 20 28 2A 20 74 79 70 65 73 20 6F 66 20 73 79 6D (* types of sym
011FD0: 62 6F 6C 20 74 61 62 6C 65 20 65 6E 74 72 79 73 bol table entrys
011FE0: 20 2A 29 0D 0A 09 09 63 6F 6E 73 74 61 6E 74 2C *)....constant,
011FF0: 20 70 72 6F 7A 65 64 75 72 65 2C 20 66 75 6E 6B prozedure, funk
012000: 74 69 6F 6E 2C 0D 0A 09 09 76 61 72 69 61 62 6C tion,....variabl
012010: 65 2C 20 74 69 70 65 2C 73 74 64 70 72 6F 63 2C e, tipe,stdproc,
012020: 73 74 64 66 75 6E 63 2C 6D 6F 64 63 6C 61 73 73 stdfunc,modclass
012030: 2C 6C 69 6E 6B 63 6C 61 73 73 2C 66 6F 72 72 65 ,linkclass,forre
012040: 66 65 72 0D 0A 09 09 29 3B 0D 0A 09 76 66 6F 72 fer....);...vfor
012050: 6D 3D 42 59 54 45 3B 0D 0A 09 6E 61 6D 65 3D 52 m=BYTE;...name=R
012060: 45 43 4F 52 44 0D 0A 09 09 6C 6F 77 65 72 3A 70 ECORD....lower:p
012070: 6E 61 6D 65 3B 0D 0A 09 09 75 70 70 65 72 3A 70 name;....upper:p
012080: 6E 61 6D 65 3B 0D 0A 09 09 65 78 70 6F 72 74 6C name;....exportl
012090: 69 6E 6B 3A 70 6E 61 6D 65 3B 0D 0A 09 09 6E 74 ink:pname;....nt
0120A0: 79 70 65 3A 70 6E 61 6D 65 3B 0D 0A 09 09 43 41 ype:pname;....CA
0120B0: 53 45 20 6E 61 6D 65 63 6C 61 73 73 3A 6F 62 6A SE nameclass:obj
0120C0: 65 63 74 20 4F 46 0D 0A 09 09 63 6F 6E 73 74 61 ect OF....consta
0120D0: 6E 74 3A 76 61 6C 75 3A 49 4E 54 45 47 45 52 3B nt:valu:INTEGER;
0120E0: 0D 0A 09 09 09 43 41 53 45 20 3A 49 4E 54 45 47 .....CASE :INTEG
0120F0: 45 52 20 4F 46 0D 0A 09 09 09 09 30 3A 61 63 74 ER OF......0:act
012100: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
012110: 4F 44 55 4C 45 20 49 6D 70 6F 72 74 3B 20 0D 0A ODULE Import; ..
012120: 0D 0A 28 2A 20 09 41 20 6D 6F 64 75 6C 65 20 74 ..(* .A module t
012130: 6F 20 70 65 72 66 6F 72 6D 20 65 78 70 6F 72 74 o perform export
012140: 73 20 61 6E 64 20 69 6D 70 6F 72 74 73 20 66 6F s and imports fo
012150: 72 20 6D 6F 64 75 6C 61 2D 32 20 0D 0A 20 20 09 r modula-2 .. .
012160: 70 72 6F 67 72 61 6D 73 2E 20 54 68 69 73 20 6D programs. This m
012170: 6F 64 75 6C 65 20 77 69 6C 6C 20 72 65 61 64 20 odule will read
012180: 53 59 4D 20 66 69 6C 65 73 20 63 72 65 61 74 65 SYM files create
012190: 64 20 62 79 20 74 68 65 0D 0A 09 46 54 4C 20 4D d by the...FTL M
0121A0: 6F 64 75 6C 61 2D 32 20 63 6F 6D 70 69 6C 65 72 odula-2 compiler
0121B0: 20 0D 0A 0D 0A 09 54 68 69 73 20 6D 6F 64 75 6C .....This modul
0121C0: 65 20 64 6F 65 73 20 6E 6F 74 20 63 6F 6E 74 61 e does not conta
0121D0: 69 6E 20 61 6C 6C 20 74 68 65 20 63 6F 64 65 20 in all the code
0121E0: 72 65 71 75 69 72 65 64 20 74 6F 20 69 6D 70 6F required to impo
0121F0: 72 74 0D 0A 09 6D 75 6C 74 69 70 6C 65 20 73 79 rt...multiple sy
012200: 6D 62 6F 6C 20 74 61 62 6C 65 73 2E 20 46 6F 72 mbol tables. For
012210: 20 74 68 69 73 20 72 65 61 73 6F 6E 2C 20 69 66 this reason, if
012220: 20 79 6F 75 20 75 73 65 20 74 68 69 73 0D 0A 09 you use this...
012230: 6D 6F 64 75 6C 65 20 74 6F 20 69 6D 70 6F 72 74 module to import
012240: 20 73 65 76 65 72 61 6C 20 73 79 6D 62 6F 6C 20 several symbol
012250: 74 61 62 6C 65 73 2C 20 74 68 65 79 20 77 69 6C tables, they wil
012260: 6C 20 6E 6F 74 20 62 65 20 6C 69 6E 6B 65 64 0D l not be linked.
012270: 0A 09 74 6F 67 65 74 68 65 72 20 63 6F 72 72 65 ..together corre
012280: 63 74 6C 79 2E 20 54 68 69 73 20 6D 65 61 6E 73 ctly. This means
012290: 20 74 68 61 74 20 79 6F 75 20 63 61 6E 6E 6F 74 that you cannot
0122A0: 20 64 6F 20 74 79 70 65 20 63 68 65 63 6B 69 6E do type checkin
0122B0: 67 0D 0A 09 75 73 69 6E 67 20 74 68 69 73 20 6D g...using this m
0122C0: 6F 64 75 6C 65 2E 0D 0A 0D 0A 09 4C 65 74 20 6D odule......Let m
0122D0: 65 20 65 78 70 6C 61 69 6E 20 74 68 61 74 20 6D e explain that m
0122E0: 6F 72 65 20 74 68 6F 72 6F 75 67 68 6C 79 2E 20 ore thoroughly.
0122F0: 45 61 63 68 20 53 59 4D 20 54 61 62 6C 65 20 63 Each SYM Table c
012300: 76 61 6C 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 09 val:INTEGER;....
012310: 09 09 20 20 65 6E 75 6D 3A 42 4F 4F 4C 45 41 4E .. enum:BOOLEAN
012320: 7C 0D 0A 09 09 09 09 31 3A 72 76 61 6C 3A 52 45 |......1:rval:RE
012330: 41 4C 0D 0A 09 09 09 09 45 4E 44 7C 0D 0A 09 09 AL......END|....
012340: 70 72 6F 7A 65 64 75 72 65 2C 66 75 6E 6B 74 69 prozedure,funkti
012350: 6F 6E 3A 0D 0A 09 09 09 70 61 64 72 3A 49 4E 54 on:.....padr:INT
012360: 45 47 45 52 3B 0D 0A 09 09 09 66 6F 72 72 65 66 EGER;.....forref
012370: 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 09 09 09 63 6F :BOOLEAN;.....co
012380: 64 65 61 64 72 3A 49 4E 54 45 47 45 52 3B 0D 0A deadr:INTEGER;..
012390: 09 09 09 70 72 6F 63 6D 6F 64 3A 42 59 54 45 3B ...procmod:BYTE;
0123A0: 0D 0A 09 09 09 65 78 69 73 74 6F 70 65 6E 3A 42 .....existopen:B
0123B0: 4F 4F 4C 45 41 4E 3B 0D 0A 09 09 09 7C 0D 0A 09 OOLEAN;.....|...
0123C0: 09 76 61 72 69 61 62 6C 65 3A 61 64 64 72 73 3A .variable:addrs:
0123D0: 49 4E 54 45 47 45 52 3B 0D 0A 09 09 09 20 67 72 INTEGER;..... gr
0123E0: 6F 75 70 3A 42 59 54 45 3B 0D 0A 09 09 09 20 66 oup:BYTE;..... f
0123F0: 6F 72 6D 3A 76 66 6F 72 6D 3B 7C 0D 0A 09 09 74 orm:vform;|....t
012400: 69 70 65 3A 09 73 69 7A 65 3A 49 4E 54 45 47 45 ipe:.size:INTEGE
012410: 52 3B 0D 0A 09 09 09 43 41 53 45 20 63 6C 61 73 R;.....CASE clas
012420: 73 3A 74 79 70 65 63 6C 61 73 73 20 4F 46 0D 0A s:typeclass OF..
012430: 09 09 09 09 61 72 72 61 79 74 79 70 65 3A 65 6C ....arraytype:el
012440: 65 6D 74 79 70 65 3A 70 6E 61 6D 65 3B 0D 0A 09 emtype:pname;...
012450: 09 09 09 09 20 20 69 6E 64 65 78 74 79 70 65 3A .... indextype:
012460: 70 6E 61 6D 65 7C 28 2A 6E 69 6C 3D 3E 6E 6F 6E pname|(*nil=>non
012470: 65 2A 29 0D 0A 09 09 09 09 72 65 63 6F 72 64 74 e*)......recordt
012480: 79 70 65 3A 73 75 62 66 69 65 6C 64 73 3A 70 6E ype:subfields:pn
012490: 61 6D 65 7C 0D 0A 09 09 09 09 73 75 62 72 74 79 ame|......subrty
0124A0: 70 65 2C 65 6E 75 6D 74 79 70 65 3A 6C 6F 77 3A pe,enumtype:low:
0124B0: 49 4E 54 45 47 45 52 3B 0D 0A 09 09 09 09 09 20 INTEGER;.......
0124C0: 20 20 20 20 20 20 20 20 20 68 69 67 68 3A 49 4E high:IN
0124D0: 54 45 47 45 52 3B 0D 0A 09 09 09 09 09 09 20 20 TEGER;........
0124E0: 62 74 79 70 65 3A 70 6E 61 6D 65 7C 0D 0A 09 09 btype:pname|....
0124F0: 09 09 70 6F 69 6E 74 74 79 70 65 2C 73 65 74 74 ..pointtype,sett
012500: 6F 6D 74 61 69 6E 73 20 61 20 0D 0A 09 63 6F 70 omtains a ...cop
012510: 79 20 6F 66 20 65 76 65 72 79 20 64 65 63 6C 61 y of every decla
012520: 72 61 74 69 6F 6E 20 77 68 69 63 68 20 69 73 20 ration which is
012530: 75 73 65 64 20 69 6E 20 74 68 65 20 53 59 4D 20 used in the SYM
012540: 74 61 62 6C 65 2E 20 46 6F 72 0D 0A 09 65 78 61 table. For...exa
012550: 6D 70 6C 65 2C 20 69 74 20 79 6F 75 20 69 6D 70 mple, it you imp
012560: 6F 72 74 20 42 59 54 45 20 66 72 6F 6D 20 53 59 ort BYTE from SY
012570: 53 54 45 4D 2C 20 74 68 65 72 65 20 69 73 20 61 STEM, there is a
012580: 20 63 6F 70 79 20 6F 66 20 74 68 65 0D 0A 09 64 copy of the...d
012590: 65 63 6C 61 72 61 74 69 6F 6E 20 66 6F 72 20 42 eclaration for B
0125A0: 59 54 45 2E 20 41 20 73 79 6D 62 6F 6C 20 6C 69 YTE. A symbol li
0125B0: 6B 65 20 42 59 54 45 20 69 73 20 6C 69 6B 65 6C ke BYTE is likel
0125C0: 79 20 74 6F 20 62 65 20 69 6D 70 6F 72 74 65 64 y to be imported
0125D0: 0D 0A 09 62 79 20 61 20 6E 75 6D 62 65 72 20 6F ...by a number o
0125E0: 66 20 64 69 66 66 65 72 65 6E 74 20 73 79 6D 62 f different symb
0125F0: 6F 6C 20 74 61 62 6C 65 73 20 61 6E 64 20 73 6F ol tables and so
012600: 20 73 65 76 65 72 61 6C 20 63 6F 70 69 65 73 0D several copies.
012610: 0A 09 6F 66 20 74 68 65 20 64 65 63 6C 61 72 61 ..of the declara
012620: 74 69 6F 6E 20 77 69 6C 6C 20 65 78 69 73 74 2E tion will exist.
012630: 20 49 6E 20 74 68 65 20 63 6F 6D 70 69 6C 65 72 In the compiler
012640: 2C 20 61 6C 6C 20 74 68 65 73 65 20 61 72 65 20 , all these are
012650: 6C 69 6E 6B 65 64 0D 0A 09 74 6F 67 65 74 68 65 linked...togethe
012660: 72 20 73 6F 20 74 68 61 74 20 42 59 54 45 20 6F r so that BYTE o
012670: 6E 6C 79 20 68 61 73 20 6F 6E 65 20 61 63 74 69 nly has one acti
012680: 76 65 20 64 65 66 69 6E 69 74 69 6F 6E 2E 20 4F ve definition. O
012690: 74 68 65 72 77 69 73 65 2C 20 0D 0A 09 76 61 72 therwise, ...var
0126A0: 69 61 62 6C 65 73 20 6F 66 20 74 79 70 65 20 42 iables of type B
0126B0: 59 54 45 20 69 6D 70 6F 72 74 65 64 20 66 72 6F YTE imported fro
0126C0: 6D 20 64 69 66 66 65 72 65 6E 74 20 6D 6F 64 75 m different modu
0126D0: 6C 65 73 20 77 6F 75 6C 64 20 6E 6F 74 0D 0A 09 les would not...
0126E0: 62 65 20 63 6F 6D 70 61 74 69 62 6C 65 2E 09 0D be compatible...
0126F0: 0A 0D 0A 09 4E 6F 72 20 64 6F 65 73 20 69 74 20 ....Nor does it
012700: 79 70 65 3A 72 65 66 74 79 70 65 3A 70 6E 61 6D ype:reftype:pnam
012710: 65 7C 0D 0A 09 09 09 09 70 72 74 79 70 65 3A 70 e|......prtype:p
012720: 72 70 61 72 73 3A 70 70 61 72 61 6D 7C 0D 0A 09 rpars:pparam|...
012730: 09 09 09 75 6E 6B 6E 6F 77 6E 74 79 70 65 2C 66 ...unknowntype,f
012740: 6F 72 77 61 72 64 72 65 66 3A 74 6D 6F 64 6E 6F orwardref:tmodno
012750: 3A 49 4E 54 45 47 45 52 7C 0D 0A 09 09 09 09 45 :INTEGER|......E
012760: 4E 44 3B 0D 0A 09 09 09 09 7C 0D 0A 09 09 73 74 ND;......|....st
012770: 64 70 72 6F 63 3A 73 74 64 6F 72 64 3A 49 4E 54 dproc:stdord:INT
012780: 45 47 45 52 7C 0D 0A 09 09 73 74 64 66 75 6E 63 EGER|....stdfunc
012790: 3A 0D 0A 09 09 09 67 65 6E 6C 69 73 74 3A 70 6E :.....genlist:pn
0127A0: 61 6D 65 3B 0D 0A 09 09 09 73 74 64 63 6C 61 73 ame;.....stdclas
0127B0: 73 3A 42 59 54 45 3B 0D 0A 09 09 09 70 61 72 74 s:BYTE;.....part
0127C0: 79 70 65 3A 70 6E 61 6D 65 3B 0D 0A 09 09 09 63 ype:pname;.....c
0127D0: 6F 6D 70 61 74 3A 42 59 54 45 3B 0D 0A 09 09 09 ompat:BYTE;.....
0127E0: 43 41 53 45 20 3A 49 4E 54 45 47 45 52 20 4F 46 CASE :INTEGER OF
0127F0: 0D 0A 09 09 09 09 30 3A 66 75 6E 63 6E 6F 3A 42 ......0:funcno:B
012800: 59 54 45 7C 0D 0A 09 09 09 09 31 3A 66 75 6E 63 YTE|......1:func
012810: 64 6F 70 3A 42 59 54 45 3B 66 75 6E 63 63 6F 6E dop:BYTE;funccon
012820: 73 74 3A 49 4E 54 45 47 45 52 7C 0D 0A 09 09 09 st:INTEGER|.....
012830: 09 32 3A 66 75 6E 63 6D 6F 70 3A 42 59 54 45 7C .2:funcmop:BYTE|
012840: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 7C ......END;.....|
012850: 0D 0A 09 09 6D 6F 64 63 6C 61 73 73 3A 6D 61 67 ....modclass:mag
012860: 69 63 3A 49 4E 54 45 47 45 52 3B 09 28 2A 6D 61 ic:INTEGER;.(*ma
012870: 67 69 63 20 6E 75 6D 62 65 72 2A 29 0D 0A 09 09 gic number*)....
012880: 09 6E 65 78 74 6D 6F 64 75 6C 65 3A 70 6E 61 6D .nextmodule:pnam
012890: 65 3B 09 28 2A 6E 65 78 74 20 69 6D 70 6F 72 74 e;.(*next import
0128A0: 65 64 20 6D 6F 64 75 6C 65 2A 29 0D 0A 09 09 09 ed module*).....
0128B0: 6D 6F 64 6E 61 6D 65 73 3A 70 6E 61 6D 65 3B 09 modnames:pname;.
0128C0: 09 28 2A 73 79 6D 62 6F 6C 20 74 61 62 6C 65 2A .(*symbol table*
0128D0: 29 0D 0A 09 09 09 6D 6F 64 6C 69 73 74 3A 70 6E ).....modlist:pn
0128E0: 61 6D 65 3B 09 09 28 2A 6C 69 6E 6B 65 64 20 6C ame;..(*linked l
0128F0: 69 73 74 20 6F 66 20 6E 61 6D 65 73 2A 29 0D 0A ist of names*)..
012900: 63 6F 6E 74 61 69 6E 20 74 68 65 20 63 6F 64 65 contain the code
012910: 20 74 6F 20 70 72 6F 63 65 73 73 20 74 68 65 20 to process the
012920: 69 6D 70 6F 72 74 20 6C 69 73 74 0D 0A 09 2A 29 import list...*)
012930: 0D 0A 46 52 4F 4D 09 46 61 73 74 4D 6F 76 65 20 ..FROM.FastMove
012940: 49 4D 50 4F 52 54 20 4D 6F 76 65 75 70 3B 0D 0A IMPORT Moveup;..
012950: 46 52 4F 4D 09 53 74 6F 72 61 67 65 20 49 4D 50 FROM.Storage IMP
012960: 4F 52 54 20 41 4C 4C 4F 43 41 54 45 3B 0D 0A 46 ORT ALLOCATE;..F
012970: 52 4F 4D 09 54 65 72 6D 69 6E 61 6C 20 49 4D 50 ROM.Terminal IMP
012980: 4F 52 54 20 57 72 69 74 65 53 74 72 69 6E 67 2C ORT WriteString,
012990: 57 72 69 74 65 4C 6E 3B 0D 0A 46 52 4F 4D 09 53 WriteLn;..FROM.S
0129A0: 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 41 44 52 YSTEM IMPORT ADR
0129B0: 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 20 49 4D ;..FROM.Files IM
0129C0: 50 4F 52 54 20 4C 6F 6F 6B 75 70 2C 53 65 71 52 PORT Lookup,SeqR
0129D0: 65 61 64 42 6C 6F 63 6B 2C 43 6C 6F 73 65 2C 46 eadBlock,Close,F
0129E0: 49 4C 45 3B 0D 0A 43 4F 4E 53 54 09 42 69 67 67 ILE;..CONST.Bigg
0129F0: 65 73 74 46 69 6C 65 3D 38 31 39 31 3B 09 28 2A estFile=8191;.(*
012A00: 62 69 67 67 65 73 74 20 73 79 6D 20 66 69 6C 65 biggest sym file
012A10: 20 72 65 61 64 61 62 6C 65 2A 29 20 20 0D 0A 0D readable*) ...
012A20: 0A 56 41 52 20 0D 0A 09 43 4F 4D 50 4C 49 4E 4B .VAR ...COMPLINK
012A30: 3A 70 6E 61 6D 65 3B 20 0D 0A 09 50 4C 49 4E 4B :pname; ...PLINK
012A40: 2C 4C 41 53 54 4C 49 4E 4B 2C 6E 6C 69 6E 6B 3A ,LASTLINK,nlink:
012A50: 70 6E 61 6D 65 3B 20 0D 0A 09 52 45 4C 4F 46 46 pname; ...RELOFF
012A60: 2C 47 4C 4F 42 52 45 4C 4F 46 46 2C 52 45 4C 42 ,GLOBRELOFF,RELB
012A70: 41 53 45 3A 43 41 52 44 49 4E 41 4C 3B 20 0D 0A ASE:CARDINAL; ..
012A80: 09 53 49 44 3A 61 6C 66 61 3B 20 0D 0A 09 48 49 .SID:alfa; ...HI
012A90: 44 45 41 4C 4C 3A 42 4F 4F 4C 45 41 4E 3D 46 41 DEALL:BOOLEAN=FA
012AA0: 4C 53 45 3B 20 0D 0A 09 48 49 44 45 4F 54 48 45 LSE; ...HIDEOTHE
012AB0: 52 53 3A 42 4F 4F 4C 45 41 4E 3B 20 0D 0A 09 4E RS:BOOLEAN; ...N
012AC0: 45 57 4D 4F 44 4E 41 4D 45 3A 70 6E 61 6D 65 3B EWMODNAME:pname;
012AD0: 20 0D 0A 09 4D 4F 44 55 4C 45 4E 41 4D 45 3A 61 ...MODULENAME:a
012AE0: 6C 66 61 3B 20 0D 0A 09 4D 4F 44 55 4C 45 50 4E lfa; ...MODULEPN
012AF0: 54 3A 70 6E 61 6D 65 3B 20 0D 0A 09 44 49 53 50 T:pname; ...DISP
012B00: 09 09 09 61 6E 6F 6E 6C 69 73 74 3A 70 6E 61 6D ...anonlist:pnam
012B10: 65 3B 09 09 28 2A 61 6E 6F 6E 79 6D 6F 75 73 20 e;..(*anonymous
012B20: 6E 61 6D 65 73 2A 29 0D 0A 09 09 09 6D 6F 64 62 names*).....modb
012B30: 61 73 65 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A ase:CARDINAL;.(*
012B40: 66 6F 72 20 74 61 62 6C 65 20 72 65 6C 6F 63 61 for table reloca
012B50: 74 69 6F 6E 2A 29 0D 0A 09 09 09 67 6C 6F 62 61 tion*).....globa
012B60: 6C 62 61 73 65 3A 43 41 52 44 49 4E 41 4C 3B 09 lbase:CARDINAL;.
012B70: 28 2A 66 6F 72 20 67 6C 6F 62 61 6C 20 72 65 6C (*for global rel
012B80: 6F 63 61 74 69 6F 6E 2A 29 0D 0A 09 09 09 6D 6F ocation*).....mo
012B90: 64 64 65 62 75 67 3A 42 4F 4F 4C 45 41 4E 3B 09 ddebug:BOOLEAN;.
012BA0: 28 2A 74 72 75 65 20 69 66 20 63 6F 6D 70 69 6C (*true if compil
012BB0: 65 64 20 77 69 74 68 20 64 65 62 75 67 2A 29 0D ed with debug*).
012BC0: 0A 0D 0A 09 09 09 28 2A 54 68 65 20 66 6F 6C 6C ......(*The foll
012BD0: 6F 77 69 6E 67 20 76 61 72 69 61 62 6C 65 73 20 owing variables
012BE0: 67 69 76 65 20 74 68 65 20 73 74 61 74 65 20 6F give the state o
012BF0: 66 20 74 68 65 0D 0A 09 09 09 76 61 72 69 61 62 f the.....variab
012C00: 6C 65 73 20 61 66 74 65 72 20 74 68 65 20 64 65 les after the de
012C10: 66 20 6D 6F 64 75 6C 65 20 69 73 20 63 6F 6D 70 f module is comp
012C20: 69 6C 65 64 2A 29 20 0D 0A 0D 0A 09 09 09 6D 64 iled*) .......md
012C30: 67 72 6F 75 70 6E 6F 3A 49 4E 54 45 47 45 52 3B groupno:INTEGER;
012C40: 09 28 2A 6E 75 6D 62 65 72 20 6F 66 20 76 61 72 .(*number of var
012C50: 69 61 62 6C 65 20 67 72 6F 75 70 73 2A 29 0D 0A iable groups*)..
012C60: 09 09 09 6D 64 63 6F 6E 73 74 6E 6F 3A 49 4E 54 ...mdconstno:INT
012C70: 45 47 45 52 3B 09 28 2A 6E 75 6D 62 65 72 20 6F EGER;.(*number o
012C80: 66 20 63 6F 6E 73 74 61 6E 74 73 20 2A 29 0D 0A f constants *)..
012C90: 09 09 09 6D 64 6C 61 62 6E 6F 3A 49 4E 54 45 47 ...mdlabno:INTEG
012CA0: 45 52 3B 09 28 2A 6E 75 6D 62 65 72 20 6F 66 20 ER;.(*number of
012CB0: 70 72 6F 63 65 64 75 72 65 73 2A 29 0D 0A 09 09 procedures*)....
012CC0: 09 6D 64 6D 6F 64 75 6C 65 6E 6F 3A 49 4E 54 45 .mdmoduleno:INTE
012CD0: 47 45 52 3B 09 28 2A 6E 75 6D 62 65 72 20 66 6F GER;.(*number fo
012CE0: 20 6E 65 78 74 20 69 6D 70 6F 72 74 65 64 20 6D next imported m
012CF0: 6F 64 75 6C 65 2A 29 0D 0A 09 09 09 6D 64 72 65 odule*).....mdre
012D00: 4C 41 59 20 3A 20 70 6E 61 6D 65 3B 20 0D 0A 09 LAY : pname; ...
012D10: 4C 41 53 54 4E 41 4D 45 3A 20 70 6E 61 6D 65 3B LASTNAME: pname;
012D20: 0D 0A 09 4E 41 4D 45 50 4E 54 3A 70 6E 61 6D 65 ...NAMEPNT:pname
012D30: 3B 20 0D 0A 0D 0A 28 2A 09 53 79 6D 62 6F 6C 20 ; ....(*.Symbol
012D40: 74 61 62 6C 65 20 65 6E 74 72 69 65 73 20 63 6F table entries co
012D50: 6E 73 69 73 74 20 6F 66 20 61 20 4E 41 4D 45 20 nsist of a NAME
012D60: 72 65 63 6F 72 64 20 70 72 65 63 65 64 65 64 0D record preceded.
012D70: 0A 09 62 79 20 61 20 69 64 65 6E 74 69 66 69 65 ..by a identifie
012D80: 72 20 6C 65 6E 67 74 68 20 42 59 54 45 20 70 72 r length BYTE pr
012D90: 65 63 65 64 65 64 20 62 79 20 74 68 65 20 69 64 eceded by the id
012DA0: 65 6E 74 69 66 69 65 72 0D 0A 09 73 74 6F 72 65 entifier...store
012DB0: 64 20 62 61 63 6B 77 61 72 64 73 2E 20 54 68 65 d backwards. The
012DC0: 20 74 6F 70 20 62 69 74 20 6F 66 20 74 68 65 20 top bit of the
012DD0: 6C 65 6E 67 74 68 20 69 73 20 73 65 74 20 74 6F length is set to
012DE0: 20 27 68 69 64 65 27 0D 0A 09 74 68 65 20 69 64 'hide'...the id
012DF0: 65 6E 74 69 66 69 65 72 2E 20 54 68 65 20 73 65 entifier. The se
012E00: 63 6F 6E 64 20 74 6F 70 20 62 69 74 20 69 73 20 cond top bit is
012E10: 75 73 65 64 20 74 6F 20 6D 61 72 6B 20 61 63 63 used to mark acc
012E20: 65 73 73 69 62 6C 65 20 0D 0A 09 73 79 6D 62 6F essible ...symbo
012E30: 6C 73 20 74 68 6F 75 67 68 20 74 68 69 73 20 69 ls though this i
012E40: 73 20 6E 6F 74 20 64 6F 6E 65 20 62 79 20 74 68 s not done by th
012E50: 69 73 20 76 65 72 73 69 6F 6E 20 6F 66 20 74 68 is version of th
012E60: 65 20 0D 0A 09 69 6D 70 6F 72 74 20 6D 6F 64 75 e ...import modu
012E70: 6C 65 20 2A 29 0D 0A 09 0D 0A 50 52 4F 43 45 44 le *).....PROCED
012E80: 55 52 45 20 48 49 44 45 28 70 3A 41 44 44 52 45 URE HIDE(p:ADDRE
012E90: 53 53 29 3B 0D 0A 0D 0A 28 2A 09 48 69 64 65 20 SS);....(*.Hide
012EA0: 61 6E 20 69 64 65 6E 74 69 66 69 65 72 0D 0A 0D an identifier...
012EB0: 0A 09 41 6E 20 69 64 65 6E 74 69 66 69 65 72 20 ..An identifier
012EC0: 69 73 20 68 69 64 64 65 6E 20 62 79 20 73 65 74 is hidden by set
012ED0: 74 69 6E 67 20 74 68 65 20 74 6F 70 20 62 69 74 ting the top bit
012EE0: 0D 0A 09 6F 66 20 74 68 65 20 62 79 74 65 20 70 ...of the byte p
012EF0: 72 65 63 65 64 69 6E 67 20 74 68 65 20 70 6F 69 receding the poi
012F00: 6C 6F 66 66 73 65 74 3A 49 4E 54 45 47 45 52 3B loffset:INTEGER;
012F10: 09 28 2A 72 65 6C 20 63 6F 64 65 20 62 75 66 66 .(*rel code buff
012F20: 65 72 20 70 6F 69 6E 74 65 72 2A 29 0D 0A 09 09 er pointer*)....
012F30: 09 6D 64 72 65 6C 62 6C 6F 63 6B 3A 49 4E 54 45 .mdrelblock:INTE
012F40: 47 45 52 3B 09 28 2A 61 6E 64 20 62 6C 6F 63 6B GER;.(*and block
012F50: 20 6E 75 6D 62 65 72 2A 29 20 0D 0A 09 09 09 7C number*) .....|
012F60: 0D 0A 09 09 6C 69 6E 6B 63 6C 61 73 73 3A 6C 69 ....linkclass:li
012F70: 6E 6B 3A 70 6E 61 6D 65 0D 0A 09 09 45 4E 44 3B nk:pname....END;
012F80: 0D 0A 09 20 20 20 20 45 4E 44 3B 0D 0A 56 41 52 ... END;..VAR
012F90: 09 49 44 3A 61 6C 66 61 3B 0D 0A 50 52 4F 43 45 .ID:alfa;..PROCE
012FA0: 44 55 52 45 20 52 45 54 52 4E 41 4D 45 28 50 3A DURE RETRNAME(P:
012FB0: 41 44 44 52 45 53 53 29 3B 0D 0A 50 52 4F 43 45 ADDRESS);..PROCE
012FC0: 44 55 52 45 20 4C 4F 4F 4B 55 50 28 69 64 3A 61 DURE LOOKUP(id:a
012FD0: 6C 66 61 3B 74 61 62 3A 70 6E 61 6D 65 29 3A 70 lfa;tab:pname):p
012FE0: 6E 61 6D 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 name;..PROCEDURE
012FF0: 20 4C 4F 41 44 46 49 4C 45 28 66 6E 3A 46 69 6C LOADFILE(fn:Fil
013000: 65 4E 61 6D 65 29 3A 70 6E 61 6D 65 3B 0D 0A 45 eName):pname;..E
013010: 4E 44 20 49 6D 70 6F 72 74 2E 0D 0A 0D 0A 1A 1A ND Import.......
013020: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
013030: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
013040: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
013050: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
013060: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 46 20 00 00 00 00 ..........F ....
013070: 00 00 00 00 00 00 D6 51 90 0D 45 00 9B 03 00 00 .......Q..E.....
013080: 09 57 72 69 74 65 4E 61 6D 65 28 52 69 67 68 74 .WriteName(Right
013090: 4E 61 6D 65 73 5B 6A 5D 2C 4F 75 74 70 75 74 41 Names[j],OutputA
0130A0: 64 64 65 64 29 3B 0D 0A 09 57 72 69 74 65 4C 6E dded);...WriteLn
0130B0: 3B 0D 0A 09 45 4E 44 20 50 72 69 6E 74 52 69 67 ;...END PrintRig
0130C0: 68 74 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 ht;....PROCEDURE
0130D0: 20 43 6F 6D 70 61 72 65 4F 4B 28 66 31 2C 66 32 CompareOK(f1,f2
0130E0: 3A 46 69 6C 65 52 65 63 6F 72 64 29 3A 42 4F 4F :FileRecord):BOO
0130F0: 4C 45 41 4E 3B 0D 0A 0D 0A 56 41 52 09 66 6E 31 LEAN;....VAR.fn1
013100: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
013110: 10 00 01 00 02 09 52 E5 10 00 41 02 00 00 00 02 ......R...A.....
013120: 10 00 46 02 00 00 00 02 10 00 42 02 00 00 00 02 ..F.......B.....
013130: 10 00 47 02 00 00 00 02 10 00 43 02 00 00 00 02 ..G.......C.....
013140: 10 00 48 02 00 00 00 02 10 00 44 02 00 00 00 02 ..H.......D.....
013150: 10 00 49 02 00 00 00 02 10 00 45 02 00 00 00 02 ..I.......E.....
013160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
013170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
013180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
013190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0131F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
013200: 6E 74 65 72 20 2A 29 0D 0A 42 45 47 49 4E 0D 0A nter *)..BEGIN..
013210: 09 70 3A 3D 41 44 44 52 45 53 53 28 43 41 52 44 .p:=ADDRESS(CARD
013220: 49 4E 41 4C 28 70 29 2D 31 29 3B 0D 0A 09 49 46 INAL(p)-1);...IF
013230: 20 70 5E 3C 31 32 38 20 54 48 45 4E 20 70 5E 3A p^<128 THEN p^:
013240: 3D 70 5E 2B 31 32 38 20 45 4E 44 3B 0D 0A 09 45 =p^+128 END;...E
013250: 4E 44 20 48 49 44 45 3B 0D 0A 50 52 4F 43 45 44 ND HIDE;..PROCED
013260: 55 52 45 20 55 4E 48 49 44 45 28 70 3A 41 44 44 URE UNHIDE(p:ADD
013270: 52 45 53 53 29 3B 0D 0A 0D 0A 28 2A 09 48 69 64 RESS);....(*.Hid
013280: 65 20 61 6E 20 69 64 65 6E 74 69 66 69 65 72 0D e an identifier.
013290: 0A 0D 0A 09 41 6E 20 69 64 65 6E 74 69 66 69 65 ....An identifie
0132A0: 72 20 69 73 20 68 69 64 64 65 6E 20 62 79 20 73 r is hidden by s
0132B0: 65 74 74 69 6E 67 20 74 68 65 20 74 6F 70 20 62 etting the top b
0132C0: 69 74 0D 0A 09 6F 66 20 74 68 65 20 62 79 74 65 it...of the byte
0132D0: 20 70 72 65 63 65 64 69 6E 67 20 74 68 65 20 70 preceding the p
0132E0: 6F 69 6E 74 65 72 20 2A 29 0D 0A 42 45 47 49 4E ointer *)..BEGIN
0132F0: 0D 0A 09 70 3A 3D 41 44 44 52 45 53 53 28 43 41 ...p:=ADDRESS(CA
013300: 52 44 49 4E 41 4C 28 70 29 2D 31 29 3B 0D 0A 09 RDINAL(p)-1);...
013310: 49 46 20 70 5E 3E 3D 31 32 38 20 54 48 45 4E 20 IF p^>=128 THEN
013320: 70 5E 3A 3D 70 5E 2D 31 32 38 20 45 4E 44 3B 0D p^:=p^-128 END;.
013330: 0A 09 45 4E 44 20 55 4E 48 49 44 45 3B 0D 0A 50 ..END UNHIDE;..P
013340: 52 4F 43 45 44 55 52 45 20 52 45 54 52 4E 41 4D ROCEDURE RETRNAM
013350: 45 28 70 3A 41 44 44 52 45 53 53 29 3B 0D 0A 56 E(p:ADDRESS);..V
013360: 41 52 09 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 AR.i:INTEGER;...
013370: 6C 65 6E 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 len:INTEGER;..BE
013380: 47 49 4E 0D 0A 09 70 3A 3D 41 44 44 52 45 53 53 GIN...p:=ADDRESS
013390: 28 43 41 52 44 49 4E 41 4C 28 70 29 2D 31 29 3B (CARDINAL(p)-1);
0133A0: 0D 0A 09 6C 65 6E 3A 3D 4F 52 44 28 70 5E 29 3B ...len:=ORD(p^);
0133B0: 0D 0A 09 28 2A 63 6C 65 61 72 20 74 6F 70 20 74 ...(*clear top t
0133C0: 77 6F 20 62 69 74 73 20 2A 29 0D 0A 0D 0A 09 49 wo bits *).....I
0133D0: 46 20 6C 65 6E 3E 3D 31 32 38 20 54 48 45 4E 20 F len>=128 THEN
0133E0: 6C 65 6E 3A 3D 6C 65 6E 2D 31 32 38 20 45 4E 44 len:=len-128 END
0133F0: 3B 0D 0A 09 49 46 20 6C 65 6E 3E 3D 36 34 20 54 ;...IF len>=64 T
013400: 6C 69 6E 6B 3A 3D 52 45 4C 50 4E 54 52 28 6C 69 link:=RELPNTR(li
013410: 6E 6B 29 3B 20 0D 0A 09 09 09 09 7C 0D 0A 09 09 nk); ......|....
013420: 09 20 20 20 20 45 4E 44 3B 20 28 2A 63 61 73 65 . END; (*case
013430: 20 6E 61 6D 65 63 6C 61 73 73 2A 29 0D 0A 09 09 nameclass*)....
013440: 09 6E 6C 69 6E 6B 3A 3D 65 78 70 6F 72 74 6C 69 .nlink:=exportli
013450: 6E 6B 3B 20 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 nk; .....END;...
013460: 09 20 20 20 20 45 4E 44 3B 20 28 2A 77 68 69 6C . END; (*whil
013470: 65 20 6E 6C 69 6E 6B 3C 3E 6E 69 6C 2A 29 0D 0A e nlink<>nil*)..
013480: 09 45 4E 44 20 52 45 4C 4F 43 41 54 45 3B 20 28 .END RELOCATE; (
013490: 2A 72 65 6C 6F 63 61 74 65 2A 29 0D 0A 50 52 4F *relocate*)..PRO
0134A0: 43 45 44 55 52 45 20 52 45 41 44 46 49 4C 45 28 CEDURE READFILE(
0134B0: 66 6E 3A 46 69 6C 65 4E 61 6D 65 29 3A 42 4F 4F fn:FileName):BOO
0134C0: 4C 45 41 4E 3B 0D 0A 54 59 50 45 09 42 6C 6F 63 LEAN;..TYPE.Bloc
0134D0: 6B 3D 41 52 52 41 59 5B 30 2E 2E 31 32 37 5D 20 k=ARRAY[0..127]
0134E0: 4F 46 20 42 59 54 45 3B 0D 0A 09 70 42 6C 6F 63 OF BYTE;...pBloc
0134F0: 6B 3D 50 4F 49 4E 54 45 52 20 54 4F 20 42 6C 6F k=POINTER TO Blo
013500: 63 6B 3B 0D 0A 56 41 52 09 66 3A 46 49 4C 45 3B ck;..VAR.f:FILE;
013510: 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52 ...reply:INTEGER
013520: 3B 0D 0A 09 46 69 72 73 74 3A 42 4F 4F 4C 45 41 ;...First:BOOLEA
013530: 4E 3B 0D 0A 09 70 3A 70 42 6C 6F 63 6B 3B 0D 0A N;...p:pBlock;..
013540: 09 62 3A 41 52 52 41 59 5B 30 2E 2E 42 69 67 67 .b:ARRAY[0..Bigg
013550: 65 73 74 46 69 6C 65 5D 20 4F 46 20 42 59 54 45 estFile] OF BYTE
013560: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 72 65 70 6C 79 ;..BEGIN...reply
013570: 3A 3D 31 3B 0D 0A 09 57 48 49 4C 45 20 28 72 65 :=1;...WHILE (re
013580: 70 6C 79 3C 48 49 47 48 28 66 6E 29 29 20 41 4E ply<HIGH(fn)) AN
013590: 44 20 28 66 6E 5B 72 65 70 6C 79 5D 3C 3E 27 2E D (fn[reply]<>'.
0135A0: 27 29 20 41 4E 44 20 28 66 6E 5B 72 65 70 6C 79 ') AND (fn[reply
0135B0: 5D 3C 3E 27 20 27 29 0D 0A 09 09 41 4E 44 20 28 ]<>' ')....AND (
0135C0: 66 6E 5B 72 65 70 6C 79 5D 3C 3E 30 78 29 20 44 fn[reply]<>0x) D
0135D0: 4F 0D 0A 09 09 49 4E 43 28 72 65 70 6C 79 29 3B O....INC(reply);
0135E0: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 72 65 ....END;...IF re
0135F0: 70 6C 79 3E 48 49 47 48 28 66 6E 29 20 54 48 45 ply>HIGH(fn) THE
013600: 48 45 4E 20 6C 65 6E 3A 3D 6C 65 6E 2D 36 34 20 HEN len:=len-64
013610: 45 4E 44 3B 0D 0A 09 49 46 20 6C 65 6E 3E 3D 33 END;...IF len>=3
013620: 32 20 54 48 45 4E 20 6C 65 6E 3A 3D 6C 65 6E 2D 2 THEN len:=len-
013630: 33 32 20 45 4E 44 3B 0D 0A 0D 0A 09 46 4F 52 20 32 END;.....FOR
013640: 69 3A 3D 31 20 54 4F 20 6C 65 6E 20 44 4F 0D 0A i:=1 TO len DO..
013650: 09 09 70 3A 3D 41 44 44 52 45 53 53 28 43 41 52 ..p:=ADDRESS(CAR
013660: 44 49 4E 41 4C 28 70 29 2D 31 29 3B 0D 0A 09 09 DINAL(p)-1);....
013670: 49 44 5B 69 5D 3A 3D 43 48 52 28 70 5E 29 3B 0D ID[i]:=CHR(p^);.
013680: 0A 09 09 45 4E 44 3B 0D 0A 09 46 4F 52 20 69 3A ...END;...FOR i:
013690: 3D 6C 65 6E 2B 31 20 54 4F 20 48 49 47 48 28 49 =len+1 TO HIGH(I
0136A0: 44 29 20 44 4F 20 49 44 5B 69 5D 3A 3D 27 20 27 D) DO ID[i]:=' '
0136B0: 20 45 4E 44 3B 09 0D 0A 09 45 4E 44 20 52 45 54 END;....END RET
0136C0: 52 4E 41 4D 45 3B 0D 0A 0D 0A 50 52 4F 43 45 44 RNAME;....PROCED
0136D0: 55 52 45 20 4C 4F 4F 4B 55 50 28 4C 49 44 3A 61 URE LOOKUP(LID:a
0136E0: 6C 66 61 3B 54 41 42 4C 45 3A 70 6E 61 6D 65 29 lfa;TABLE:pname)
0136F0: 3A 70 6E 61 6D 65 3B 0D 0A 42 45 47 49 4E 0D 0A :pname;..BEGIN..
013700: 09 4C 41 53 54 4E 41 4D 45 3A 3D 4E 49 4C 3B 0D .LASTNAME:=NIL;.
013710: 0A 09 4C 4F 4F 50 0D 0A 09 09 0D 0A 09 09 49 46 ..LOOP........IF
013720: 20 54 41 42 4C 45 3D 4E 49 4C 20 54 48 45 4E 20 TABLE=NIL THEN
013730: 45 58 49 54 20 45 4E 44 3B 0D 0A 09 09 4C 41 53 EXIT END;....LAS
013740: 54 4E 41 4D 45 3A 3D 54 41 42 4C 45 3B 0D 0A 09 TNAME:=TABLE;...
013750: 09 52 45 54 52 4E 41 4D 45 28 54 41 42 4C 45 29 .RETRNAME(TABLE)
013760: 3B 0D 0A 09 09 49 46 20 49 44 3C 4C 49 44 20 54 ;....IF ID<LID T
013770: 48 45 4E 20 54 41 42 4C 45 3A 3D 54 41 42 4C 45 HEN TABLE:=TABLE
013780: 5E 2E 75 70 70 65 72 0D 0A 09 09 45 4C 53 49 46 ^.upper....ELSIF
013790: 20 49 44 3E 4C 49 44 20 54 48 45 4E 20 54 41 42 ID>LID THEN TAB
0137A0: 4C 45 3A 3D 54 41 42 4C 45 5E 2E 6C 6F 77 65 72 LE:=TABLE^.lower
0137B0: 0D 0A 09 09 45 4C 53 45 20 45 58 49 54 20 45 4E ....ELSE EXIT EN
0137C0: 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54 D;....END;...RET
0137D0: 55 52 4E 20 54 41 42 4C 45 0D 0A 09 45 4E 44 20 URN TABLE...END
0137E0: 4C 4F 4F 4B 55 50 3B 0D 0A 50 52 4F 43 45 44 55 LOOKUP;..PROCEDU
0137F0: 52 45 20 52 45 4C 50 4E 54 52 28 46 49 45 4C 44 RE RELPNTR(FIELD
013800: 4E 20 52 45 54 55 52 4E 20 46 41 4C 53 45 20 45 N RETURN FALSE E
013810: 4E 44 3B 0D 0A 09 49 46 20 66 6E 5B 72 65 70 6C ND;...IF fn[repl
013820: 79 5D 3C 3E 27 2E 27 20 54 48 45 4E 0D 0A 09 09 y]<>'.' THEN....
013830: 49 46 20 28 72 65 70 6C 79 2B 33 29 3E 48 49 47 IF (reply+3)>HIG
013840: 48 28 66 6E 29 20 54 48 45 4E 20 52 45 54 55 52 H(fn) THEN RETUR
013850: 4E 20 46 41 4C 53 45 20 45 4E 44 3B 0D 0A 09 09 N FALSE END;....
013860: 66 6E 5B 72 65 70 6C 79 5D 3A 3D 27 2E 27 3B 0D fn[reply]:='.';.
013870: 0A 09 09 66 6E 5B 72 65 70 6C 79 2B 31 5D 3A 3D ...fn[reply+1]:=
013880: 27 53 27 3B 0D 0A 09 09 66 6E 5B 72 65 70 6C 79 'S';....fn[reply
013890: 2B 32 5D 3A 3D 27 59 27 3B 0D 0A 09 09 66 6E 5B +2]:='Y';....fn[
0138A0: 72 65 70 6C 79 2B 33 5D 3A 3D 27 4D 27 3B 0D 0A reply+3]:='M';..
0138B0: 09 09 66 6E 5B 72 65 70 6C 79 2B 34 5D 3A 3D 27 ..fn[reply+4]:='
0138C0: 20 27 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C 6F ';....END;...Lo
0138D0: 6F 6B 75 70 28 66 2C 66 6E 2C 72 65 70 6C 79 29 okup(f,fn,reply)
0138E0: 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 ;...IF reply<>0
0138F0: 54 48 45 4E 20 0D 0A 09 09 57 72 69 74 65 53 74 THEN ....WriteSt
013900: 72 69 6E 67 28 27 20 46 69 6C 65 20 6E 6F 74 20 ring(' File not
013910: 66 6F 75 6E 64 27 29 3B 57 72 69 74 65 53 74 72 found');WriteStr
013920: 69 6E 67 28 66 6E 29 3B 57 72 69 74 65 4C 6E 3B ing(fn);WriteLn;
013930: 0D 0A 09 09 52 45 54 55 52 4E 20 46 41 4C 53 45 ....RETURN FALSE
013940: 20 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 28 2A ....END;.....(*
013950: 52 65 61 64 20 74 68 65 20 64 61 74 61 20 2A 29 Read the data *)
013960: 0D 0A 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 28 ...SeqReadBlock(
013970: 66 2C 41 44 52 28 62 29 2C 53 49 5A 45 28 62 29 f,ADR(b),SIZE(b)
013980: 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 20 72 65 ,reply);...IF re
013990: 70 6C 79 3D 30 20 54 48 45 4E 20 0D 0A 09 09 57 ply=0 THEN ....W
0139A0: 72 69 74 65 53 74 72 69 6E 67 28 27 53 59 4D 20 riteString('SYM
0139B0: 46 69 6C 65 20 45 6D 70 74 79 20 27 29 3B 57 72 File Empty ');Wr
0139C0: 69 74 65 4C 6E 3B 0D 0A 09 09 52 45 54 55 52 4E iteLn;....RETURN
0139D0: 20 46 41 4C 53 45 20 0D 0A 09 09 45 4E 44 3B 0D FALSE ....END;.
0139E0: 0A 09 49 46 20 72 65 70 6C 79 3D 53 49 5A 45 28 ..IF reply=SIZE(
0139F0: 62 29 20 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 b) THEN....Write
013A00: 53 3A 41 44 44 52 45 53 53 29 3A 41 44 44 52 45 S:ADDRESS):ADDRE
013A10: 53 53 3B 20 0D 0A 0D 0A 28 2A 09 52 65 6C 6F 63 SS; ....(*.Reloc
013A20: 61 74 65 20 61 20 70 6F 69 6E 74 65 72 20 0D 0A ate a pointer ..
013A30: 0D 0A 09 54 68 65 72 65 20 61 72 65 20 74 77 6F ...There are two
013A40: 20 61 72 65 61 73 20 77 68 69 63 68 20 74 68 65 areas which the
013A50: 20 70 6F 69 6E 74 65 72 20 6D 61 79 20 6E 65 65 pointer may nee
013A60: 64 0D 0A 09 72 65 6C 6F 63 61 74 69 6E 67 20 72 d...relocating r
013A70: 65 6C 61 74 69 76 65 20 74 6F 20 28 73 65 65 20 elative to (see
013A80: 43 68 75 72 63 68 69 6C 6C 29 2E 20 54 68 65 20 Churchill). The
013A90: 67 6C 6F 62 61 6C 73 0D 0A 09 73 79 6D 62 6F 6C globals...symbol
013AA0: 20 74 61 62 6C 65 20 61 6E 64 20 74 68 65 20 6C table and the l
013AB0: 6F 63 61 6C 20 73 79 6D 62 6F 6C 73 20 74 61 62 ocal symbols tab
013AC0: 6C 65 2E 0D 0A 0D 0A 09 54 68 65 20 67 6C 6F 62 le......The glob
013AD0: 61 6C 20 73 79 6D 62 6F 6C 20 74 61 62 6C 65 20 al symbol table
013AE0: 69 73 20 61 73 73 75 6D 65 64 20 74 6F 20 62 65 is assumed to be
013AF0: 20 6C 6F 77 65 72 20 69 6E 20 6D 65 6D 6F 72 79 lower in memory
013B00: 2A 29 0D 0A 56 41 52 09 61 3A 41 44 44 52 45 53 *)..VAR.a:ADDRES
013B10: 53 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 46 S;..BEGIN...IF F
013B20: 49 45 4C 44 53 3D 4E 49 4C 20 54 48 45 4E 20 0D IELDS=NIL THEN .
013B30: 0A 09 20 20 20 20 09 61 3A 3D 4E 49 4C 20 0D 0A .. .a:=NIL ..
013B40: 09 45 4C 53 49 46 20 43 41 52 44 49 4E 41 4C 28 .ELSIF CARDINAL(
013B50: 46 49 45 4C 44 53 29 3C 52 45 4C 42 41 53 45 20 FIELDS)<RELBASE
013B60: 54 48 45 4E 0D 0A 09 09 61 3A 3D 41 44 44 52 45 THEN....a:=ADDRE
013B70: 53 53 28 43 41 52 44 49 4E 41 4C 28 46 49 45 4C SS(CARDINAL(FIEL
013B80: 44 53 29 2D 47 4C 4F 42 52 45 4C 4F 46 46 29 0D DS)-GLOBRELOFF).
013B90: 0A 09 45 4C 53 45 0D 0A 09 09 61 3A 3D 41 44 44 ..ELSE....a:=ADD
013BA0: 52 45 53 53 28 43 41 52 44 49 4E 41 4C 28 46 49 RESS(CARDINAL(FI
013BB0: 45 4C 44 53 29 2D 52 45 4C 4F 46 46 29 0D 0A 09 ELDS)-RELOFF)...
013BC0: 20 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 .END;...RETURN
013BD0: 61 0D 0A 20 20 20 20 20 20 09 45 4E 44 20 52 45 a.. .END RE
013BE0: 4C 50 4E 54 52 3B 20 0D 0A 0D 0A 50 52 4F 43 45 LPNTR; ....PROCE
013BF0: 44 55 52 45 20 52 45 4C 4F 43 41 54 45 3B 20 0D DURE RELOCATE; .
013C00: 53 74 72 69 6E 67 28 27 20 53 59 4D 20 66 69 6C String(' SYM fil
013C10: 65 20 74 6F 6F 20 6C 61 72 67 65 20 27 29 3B 0D e too large ');.
013C20: 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 52 ...WriteLn;....R
013C30: 45 54 55 52 4E 20 46 41 4C 53 45 3B 0D 0A 09 09 ETURN FALSE;....
013C40: 45 4E 44 3B 0D 0A 09 41 4C 4C 4F 43 41 54 45 28 END;...ALLOCATE(
013C50: 70 2C 72 65 70 6C 79 29 3B 0D 0A 09 4D 6F 76 65 p,reply);...Move
013C60: 75 70 28 41 44 52 28 62 29 2C 70 2C 72 65 70 6C up(ADR(b),p,repl
013C70: 79 29 3B 0D 0A 09 47 4C 4F 42 52 45 4C 4F 46 46 y);...GLOBRELOFF
013C80: 3A 3D 30 3B 0D 0A 09 4E 45 57 4D 4F 44 4E 41 4D :=0;...NEWMODNAM
013C90: 45 3A 3D 70 6E 61 6D 65 28 43 41 52 44 49 4E 41 E:=pname(CARDINA
013CA0: 4C 28 70 29 2B 4F 52 44 28 62 5B 30 5D 29 2B 32 L(p)+ORD(b[0])+2
013CB0: 29 3B 0D 0A 09 52 45 54 52 4E 41 4D 45 28 4E 45 );...RETRNAME(NE
013CC0: 57 4D 4F 44 4E 41 4D 45 29 3B 0D 0A 09 52 45 4C WMODNAME);...REL
013CD0: 4F 46 46 3A 3D 4E 45 57 4D 4F 44 4E 41 4D 45 5E OFF:=NEWMODNAME^
013CE0: 2E 6D 6F 64 62 61 73 65 2D 43 41 52 44 49 4E 41 .modbase-CARDINA
013CF0: 4C 28 70 29 3B 0D 0A 09 52 45 4C 42 41 53 45 3A L(p);...RELBASE:
013D00: 3D 4E 45 57 4D 4F 44 4E 41 4D 45 5E 2E 6D 6F 64 =NEWMODNAME^.mod
013D10: 62 61 73 65 3B 0D 0A 09 43 6C 6F 73 65 28 66 29 base;...Close(f)
013D20: 3B 0D 0A 09 52 45 54 55 52 4E 20 54 52 55 45 3B ;...RETURN TRUE;
013D30: 0D 0A 09 45 4E 44 20 52 45 41 44 46 49 4C 45 3B ...END READFILE;
013D40: 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 4E 54 45 ..PROCEDURE ENTE
013D50: 52 4E 41 4D 45 3B 20 0D 0A 56 41 52 09 53 49 44 RNAME; ..VAR.SID
013D60: 3A 61 6C 66 61 3B 0D 0A 42 45 47 49 4E 0D 0A 09 :alfa;..BEGIN...
013D70: 52 45 54 52 4E 41 4D 45 28 43 4F 4D 50 4C 49 4E RETRNAME(COMPLIN
013D80: 4B 29 3B 20 0D 0A 09 53 49 44 3A 3D 49 44 3B 0D K); ...SID:=ID;.
013D90: 0A 09 4E 41 4D 45 50 4E 54 3A 3D 4C 4F 4F 4B 55 ..NAMEPNT:=LOOKU
013DA0: 50 28 49 44 2C 44 49 53 50 4C 41 59 29 3B 20 0D P(ID,DISPLAY); .
013DB0: 0A 09 49 46 20 4C 41 53 54 4E 41 4D 45 3D 4E 49 ..IF LASTNAME=NI
013DC0: 4C 20 54 48 45 4E 20 44 49 53 50 4C 41 59 3A 3D L THEN DISPLAY:=
013DD0: 43 4F 4D 50 4C 49 4E 4B 0D 0A 09 45 4C 53 45 0D COMPLINK...ELSE.
013DE0: 0A 09 09 52 45 54 52 4E 41 4D 45 28 4C 41 53 54 ...RETRNAME(LAST
013DF0: 4E 41 4D 45 29 3B 0D 0A 09 09 49 46 20 49 44 3C NAME);....IF ID<
013E00: 0A 28 2A 20 52 65 6C 6F 63 61 74 65 20 6F 6E 65 .(* Relocate one
013E10: 20 6F 66 20 74 68 65 20 65 6E 74 72 79 20 6C 69 of the entry li
013E20: 73 74 73 20 6A 75 73 74 20 65 6E 74 65 72 65 64 sts just entered
013E30: 20 0D 0A 20 20 0D 0A 20 20 41 6C 73 6F 2C 20 69 .. .. Also, i
013E40: 66 20 61 6E 79 20 65 6E 74 72 79 20 69 73 20 61 f any entry is a
013E50: 20 6C 69 6E 6B 2C 20 72 65 70 6C 61 63 65 20 70 link, replace p
013E60: 6F 69 6E 74 65 72 20 62 79 20 70 6F 69 6E 74 65 ointer by pointe
013E70: 72 20 74 6F 20 0D 0A 20 20 6C 69 6E 6B 65 64 20 r to .. linked
013E80: 6F 62 6A 65 63 74 2A 29 0D 0A 56 41 52 09 4F 4C object*)..VAR.OL
013E90: 44 50 41 52 3A 70 70 61 72 61 6D 3B 0D 0A 42 45 DPAR:pparam;..BE
013EA0: 47 49 4E 0D 0A 09 57 48 49 4C 45 20 6E 6C 69 6E GIN...WHILE nlin
013EB0: 6B 3C 3E 4E 49 4C 20 44 4F 20 0D 0A 09 20 20 20 k<>NIL DO ...
013EC0: 20 57 49 54 48 20 6E 6C 69 6E 6B 5E 20 44 4F 20 WITH nlink^ DO
013ED0: 0D 0A 09 09 52 45 54 52 4E 41 4D 45 28 6E 6C 69 ....RETRNAME(nli
013EE0: 6E 6B 29 3B 0D 0A 09 09 6E 74 79 70 65 3A 3D 52 nk);....ntype:=R
013EF0: 45 4C 50 4E 54 52 28 6E 74 79 70 65 29 3B 20 0D ELPNTR(ntype); .
013F00: 0A 09 09 6C 6F 77 65 72 3A 3D 52 45 4C 50 4E 54 ...lower:=RELPNT
013F10: 52 28 6C 6F 77 65 72 29 3B 20 0D 0A 09 09 75 70 R(lower); ....up
013F20: 70 65 72 3A 3D 52 45 4C 50 4E 54 52 28 75 70 70 per:=RELPNTR(upp
013F30: 65 72 29 3B 20 0D 0A 0D 0A 09 09 65 78 70 6F 72 er); ......expor
013F40: 74 6C 69 6E 6B 3A 3D 52 45 4C 50 4E 54 52 28 65 tlink:=RELPNTR(e
013F50: 78 70 6F 72 74 6C 69 6E 6B 29 3B 20 0D 0A 09 09 xportlink); ....
013F60: 43 41 53 45 20 6E 61 6D 65 63 6C 61 73 73 20 4F CASE nameclass O
013F70: 46 20 0D 0A 09 09 09 74 69 70 65 3A 0D 0A 09 09 F .....tipe:....
013F80: 09 20 20 20 20 43 41 53 45 20 63 6C 61 73 73 20 . CASE class
013F90: 4F 46 20 0D 0A 09 09 09 09 20 20 20 20 61 72 72 OF ...... arr
013FA0: 61 79 74 79 70 65 3A 0D 0A 09 09 09 09 09 65 6C aytype:.......el
013FB0: 65 6D 74 79 70 65 3A 3D 52 45 4C 50 4E 54 52 28 emtype:=RELPNTR(
013FC0: 65 6C 65 6D 74 79 70 65 29 3B 20 0D 0A 09 09 09 elemtype); .....
013FD0: 09 09 69 6E 64 65 78 74 79 70 65 3A 3D 52 45 4C ..indextype:=REL
013FE0: 50 4E 54 52 28 69 6E 64 65 78 74 79 70 65 29 3B PNTR(indextype);
013FF0: 20 0D 0A 09 09 09 09 09 7C 0D 0A 09 09 09 09 20 .......|......
014000: 53 49 44 20 54 48 45 4E 20 4C 41 53 54 4E 41 4D SID THEN LASTNAM
014010: 45 5E 2E 75 70 70 65 72 3A 3D 43 4F 4D 50 4C 49 E^.upper:=COMPLI
014020: 4E 4B 0D 0A 09 09 45 4C 53 45 20 4C 41 53 54 4E NK....ELSE LASTN
014030: 41 4D 45 5E 2E 6C 6F 77 65 72 3A 3D 43 4F 4D 50 AME^.lower:=COMP
014040: 4C 49 4E 4B 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 LINK END;....END
014050: 3B 0D 0A 09 43 4F 4D 50 4C 49 4E 4B 5E 2E 75 70 ;...COMPLINK^.up
014060: 70 65 72 3A 3D 4E 49 4C 3B 0D 0A 09 43 4F 4D 50 per:=NIL;...COMP
014070: 4C 49 4E 4B 5E 2E 6C 6F 77 65 72 3A 3D 4E 49 4C LINK^.lower:=NIL
014080: 3B 0D 0A 09 09 0D 0A 20 20 20 20 20 20 45 4E 44 ;...... END
014090: 20 45 4E 54 45 52 4E 41 4D 45 3B 20 0D 0A 0D 0A ENTERNAME; ....
0140A0: 50 52 4F 43 45 44 55 52 45 20 4D 45 52 47 45 4E PROCEDURE MERGEN
0140B0: 41 4D 45 53 3B 20 0D 0A 28 2A 20 0D 0A 20 20 6D AMES; ..(* .. m
0140C0: 65 72 67 65 20 74 68 65 20 6E 61 6D 65 73 20 70 erge the names p
0140D0: 6F 69 6E 74 65 64 20 74 6F 20 62 79 20 63 6F 6D ointed to by com
0140E0: 70 6C 69 6E 6B 20 69 6E 74 6F 20 74 68 65 20 74 plink into the t
0140F0: 61 62 6C 65 20 6F 6E 65 20 62 65 6C 6F 77 20 74 able one below t
014100: 68 65 20 0D 0A 20 20 74 6F 70 20 6F 66 20 74 68 he .. top of th
014110: 65 20 64 69 73 70 6C 61 79 20 0D 0A 20 20 0D 0A e display .. ..
014120: 20 20 4E 6F 74 65 20 74 68 61 74 20 74 68 65 20 Note that the
014130: 68 65 61 70 20 69 73 20 6E 6F 74 20 63 75 74 20 heap is not cut
014140: 62 61 63 6B 20 73 69 6E 63 65 20 74 68 61 74 20 back since that
014150: 0D 0A 20 20 68 61 73 20 61 6C 72 65 61 64 79 20 .. has already
014160: 62 65 65 6E 20 64 6F 6E 65 20 62 79 20 74 68 65 been done by the
014170: 20 63 6F 6D 70 72 65 73 73 20 72 6F 75 74 69 6E compress routin
014180: 65 2C 20 69 66 20 72 65 71 75 69 72 65 64 2A 29 e, if required*)
014190: 0D 0A 56 41 52 20 50 3A 70 6E 61 6D 65 3B 20 0D ..VAR P:pname; .
0141A0: 0A 42 45 47 49 4E 0D 0A 09 43 4F 4D 50 4C 49 4E .BEGIN...COMPLIN
0141B0: 4B 3A 3D 4E 45 57 4D 4F 44 4E 41 4D 45 5E 2E 6D K:=NEWMODNAME^.m
0141C0: 6F 64 6C 69 73 74 3B 20 0D 0A 09 57 48 49 4C 45 odlist; ...WHILE
0141D0: 20 28 43 4F 4D 50 4C 49 4E 4B 3C 3E 4E 49 4C 29 (COMPLINK<>NIL)
0141E0: 20 44 4F 20 0D 0A 09 09 45 4E 54 45 52 4E 41 4D DO ....ENTERNAM
0141F0: 45 3B 20 0D 0A 09 09 43 4F 4D 50 4C 49 4E 4B 3A E; ....COMPLINK:
014200: 20 20 20 72 65 63 6F 72 64 74 79 70 65 3A 0D 0A recordtype:..
014210: 09 09 09 09 09 73 75 62 66 69 65 6C 64 73 3A 3D .....subfields:=
014220: 52 45 4C 50 4E 54 52 28 73 75 62 66 69 65 6C 64 RELPNTR(subfield
014230: 73 29 3B 20 0D 0A 09 09 09 09 09 7C 0D 0A 09 09 s); .......|....
014240: 09 09 20 20 20 20 73 75 62 72 74 79 70 65 2C 65 .. subrtype,e
014250: 6E 75 6D 74 79 70 65 3A 0D 0A 09 09 09 09 09 62 numtype:.......b
014260: 74 79 70 65 3A 3D 52 45 4C 50 4E 54 52 28 62 74 type:=RELPNTR(bt
014270: 79 70 65 29 3B 20 0D 0A 09 09 09 09 09 7C 0D 0A ype); .......|..
014280: 09 09 09 09 20 20 20 20 70 6F 69 6E 74 74 79 70 .... pointtyp
014290: 65 2C 73 65 74 74 79 70 65 3A 0D 0A 09 09 09 09 e,settype:......
0142A0: 09 72 65 66 74 79 70 65 3A 3D 52 45 4C 50 4E 54 .reftype:=RELPNT
0142B0: 52 28 72 65 66 74 79 70 65 29 3B 20 0D 0A 09 09 R(reftype); ....
0142C0: 09 09 09 7C 0D 0A 09 09 09 09 20 20 20 20 70 72 ...|...... pr
0142D0: 74 79 70 65 3A 0D 0A 09 09 09 09 09 70 72 70 61 type:.......prpa
0142E0: 72 73 3A 3D 52 45 4C 50 4E 54 52 28 70 72 70 61 rs:=RELPNTR(prpa
0142F0: 72 73 29 3B 20 0D 0A 09 09 09 09 09 4F 4C 44 50 rs); .......OLDP
014300: 41 52 3A 3D 70 72 70 61 72 73 3B 20 0D 0A 09 09 AR:=prpars; ....
014310: 09 09 09 57 48 49 4C 45 20 4F 4C 44 50 41 52 3C ...WHILE OLDPAR<
014320: 3E 4E 49 4C 20 44 4F 20 0D 0A 09 09 09 09 09 20 >NIL DO .......
014330: 20 20 20 57 49 54 48 20 4F 4C 44 50 41 52 5E 20 WITH OLDPAR^
014340: 44 4F 20 0D 0A 09 09 09 09 09 09 76 61 72 74 79 DO ........varty
014350: 70 65 3A 3D 52 45 4C 50 4E 54 52 28 76 61 72 74 pe:=RELPNTR(vart
014360: 79 70 65 29 3B 20 0D 0A 09 09 09 09 09 09 6E 65 ype); ........ne
014370: 78 74 3A 3D 52 45 4C 50 4E 54 52 28 6E 65 78 74 xt:=RELPNTR(next
014380: 29 3B 20 0D 0A 09 09 09 09 09 09 4F 4C 44 50 41 ); ........OLDPA
014390: 52 3A 3D 6E 65 78 74 3B 20 0D 0A 09 09 09 09 09 R:=next; .......
0143A0: 09 45 4E 44 3B 0D 0A 09 09 09 09 09 20 20 20 20 .END;.......
0143B0: 45 4E 44 3B 0D 0A 09 09 09 09 09 20 0D 0A 09 09 END;....... ....
0143C0: 09 09 09 7C 0D 0A 09 09 09 09 20 20 20 20 45 4E ...|...... EN
0143D0: 44 3B 0D 0A 09 09 09 09 7C 28 2A 63 61 73 65 20 D;......|(*case
0143E0: 63 6C 61 73 73 2A 29 0D 0A 09 09 09 20 20 20 20 class*).....
0143F0: 6C 69 6E 6B 63 6C 61 73 73 3A 0D 0A 09 09 09 09 linkclass:......
014400: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
014410: 11 00 01 00 02 09 52 E5 11 00 41 02 00 00 00 02 ......R...A.....
014420: 11 00 46 02 00 00 00 02 11 00 42 02 00 00 00 02 ..F.......B.....
014430: 11 00 47 02 00 00 00 02 11 00 43 02 00 00 00 02 ..G.......C.....
014440: 11 00 48 02 00 00 00 02 11 00 44 02 00 00 00 02 ..H.......D.....
014450: 11 00 49 02 00 00 00 02 11 00 45 02 00 00 00 02 ..I.......E.....
014460: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
014470: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
014480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
014490: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0144F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
014500: 3D 43 4F 4D 50 4C 49 4E 4B 5E 2E 65 78 70 6F 72 =COMPLINK^.expor
014510: 74 6C 69 6E 6B 3B 20 0D 0A 09 09 45 4E 44 3B 0D tlink; ....END;.
014520: 0A 09 45 4E 44 20 4D 45 52 47 45 4E 41 4D 45 53 ..END MERGENAMES
014530: 3B 20 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 ; ....PROCEDURE
014540: 4C 4F 41 44 46 49 4C 45 28 66 6E 3A 46 69 6C 65 LOADFILE(fn:File
014550: 4E 61 6D 65 29 3A 70 6E 61 6D 65 3B 0D 0A 28 2A Name):pname;..(*
014560: 20 6C 6F 61 64 20 61 20 66 69 6C 65 20 74 6F 20 load a file to
014570: 62 65 20 69 6D 70 6F 72 74 65 64 20 20 20 0D 0A be imported ..
014580: 20 20 0D 0A 20 20 72 65 6C 6F 63 61 74 65 20 74 .. relocate t
014590: 68 65 20 65 6E 74 72 69 65 73 20 2A 29 0D 0A 20 he entries *)..
0145A0: 20 0D 0A 56 41 52 20 09 54 49 44 3A 61 6C 66 61 ..VAR .TID:alfa
0145B0: 3B 20 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 44 ; .....BEGIN...D
0145C0: 49 53 50 4C 41 59 3A 3D 4E 49 4C 3B 0D 0A 09 47 ISPLAY:=NIL;...G
0145D0: 4C 4F 42 52 45 4C 4F 46 46 3A 3D 30 3B 0D 0A 09 LOBRELOFF:=0;...
0145E0: 49 46 20 4E 4F 54 20 52 45 41 44 46 49 4C 45 28 IF NOT READFILE(
0145F0: 66 6E 29 20 54 48 45 4E 20 0D 0A 09 20 20 20 20 fn) THEN ...
014600: 52 45 54 55 52 4E 20 4E 49 4C 0D 0A 09 20 20 20 RETURN NIL...
014610: 20 45 4E 44 3B 0D 0A 28 2A 09 6E 65 77 6D 6F 64 END;..(*.newmod
014620: 6E 61 6D 65 20 70 6F 69 6E 74 73 20 74 6F 20 65 name points to e
014630: 6E 74 72 79 20 66 6F 72 20 66 69 72 73 74 20 6D ntry for first m
014640: 6F 64 75 6C 65 20 6E 61 6D 65 20 0D 0A 20 20 20 odule name ..
014650: 20 09 77 68 69 63 68 20 69 73 20 74 68 65 20 6E .which is the n
014660: 61 6D 65 20 6F 66 20 74 68 65 20 6D 6F 64 75 6C ame of the modul
014670: 65 20 62 65 69 6E 67 20 6C 6F 61 64 65 64 20 0D e being loaded .
014680: 0A 20 20 20 20 09 69 74 20 69 73 20 66 6F 6C 6C . .it is foll
014690: 6F 77 65 64 20 62 79 20 61 20 63 68 61 69 6E 20 owed by a chain
0146A0: 6F 66 20 6E 61 6D 65 73 20 6F 66 20 6D 6F 64 75 of names of modu
0146B0: 6C 65 73 20 0D 0A 20 20 20 09 69 6D 70 6F 72 74 les .. .import
0146C0: 65 64 20 62 79 20 74 68 61 74 20 6D 6F 64 75 6C ed by that modul
0146D0: 65 20 0D 0A 20 20 0D 0A 20 20 09 69 6E 20 74 68 e .. .. .in th
0146E0: 65 20 63 61 73 65 20 6F 66 20 74 68 65 20 66 69 e case of the fi
0146F0: 72 73 74 20 6D 6F 64 75 6C 65 2C 20 77 65 20 6D rst module, we m
014700: 28 2A 09 6B 65 65 70 20 61 20 63 69 72 63 75 6C (*.keep a circul
014710: 61 72 20 62 75 66 66 65 72 20 6F 66 20 63 68 61 ar buffer of cha
014720: 72 61 63 74 65 72 73 20 77 68 69 6C 65 20 6D 61 racters while ma
014730: 74 63 68 69 6E 67 20 69 73 0D 0A 09 09 68 61 70 tching is....hap
014740: 70 65 6E 69 6E 67 2A 29 0D 0A 0D 0A 0D 0A 50 52 pening*)......PR
014750: 4F 43 45 44 55 52 45 20 57 61 69 74 46 6F 72 43 OCEDURE WaitForC
014760: 68 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4E h;..BEGIN...IF N
014770: 4F 54 20 53 68 6F 77 43 68 61 6E 67 65 20 54 48 OT ShowChange TH
014780: 45 4E 0D 0A 09 09 53 68 6F 77 43 68 61 6E 67 65 EN....ShowChange
014790: 3A 3D 54 52 55 45 3B 0D 0A 09 09 4F 75 74 70 75 :=TRUE;....Outpu
0147A0: 74 54 6F 53 63 72 65 65 6E 28 54 52 55 45 29 3B tToScreen(TRUE);
0147B0: 0D 0A 09 09 52 65 64 69 73 70 6C 61 79 3B 0D 0A ....Redisplay;..
0147C0: 09 09 45 4E 44 3B 0D 0A 09 52 45 50 45 41 54 0D ..END;...REPEAT.
0147D0: 0A 09 09 42 75 73 79 52 65 61 64 28 63 68 29 3B ...BusyRead(ch);
0147E0: 0D 0A 09 09 55 4E 54 49 4C 20 63 68 3C 3E 30 78 ....UNTIL ch<>0x
0147F0: 3B 0D 0A 09 45 4E 44 20 57 61 69 74 46 6F 72 43 ;...END WaitForC
014800: 68 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68 h;..PROCEDURE Ch
014810: 65 63 6B 49 6E 74 65 72 72 75 70 74 28 29 3A 42 eckInterrupt():B
014820: 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 43 68 OOLEAN;....(*.Ch
014830: 65 63 6B 20 74 68 65 20 6B 65 79 62 6F 61 72 64 eck the keyboard
014840: 20 66 6F 72 20 61 6E 20 69 6E 74 65 72 75 70 74 for an interupt
014850: 20 28 43 6F 6E 74 72 6F 6C 20 55 29 0D 0A 0D 0A (Control U)....
014860: 09 41 6C 73 6F 2C 20 69 66 20 45 73 63 61 70 65 .Also, if Escape
014870: 20 68 61 73 20 62 65 65 6E 20 74 79 70 65 64 2C has been typed,
014880: 20 73 74 6F 70 20 74 65 72 6D 69 6E 61 6C 20 6F stop terminal o
014890: 75 74 70 75 74 0D 0A 09 75 6E 74 69 6C 20 61 6E utput...until an
0148A0: 6F 74 68 65 72 20 63 68 61 72 61 63 74 65 72 20 other character
0148B0: 69 73 20 74 79 70 65 64 2A 29 0D 0A 0D 0A 56 41 is typed*)....VA
0148C0: 52 09 63 68 31 3A 43 48 41 52 3B 0D 0A 42 45 47 R.ch1:CHAR;..BEG
0148D0: 49 4E 0D 0A 09 42 75 73 79 52 65 61 64 28 63 68 IN...BusyRead(ch
0148E0: 31 29 3B 0D 0A 09 43 41 53 45 20 63 68 31 20 4F 1);...CASE ch1 O
0148F0: 46 20 0D 0A 09 09 31 35 78 3A 52 45 54 55 52 4E F ....15x:RETURN
014900: 75 73 74 20 73 65 74 20 74 68 65 20 0D 0A 20 20 ust set the ..
014910: 09 6E 75 6D 62 65 72 73 20 6F 66 20 74 68 65 20 .numbers of the
014920: 76 61 72 69 61 62 6C 65 73 20 74 6F 20 6D 6F 64 variables to mod
014930: 75 6C 65 6E 6F 20 0D 0A 20 20 09 62 75 74 20 74 uleno .. .but t
014940: 68 69 73 20 69 73 20 69 72 72 65 6C 65 76 61 6E his is irrelevan
014950: 74 20 66 6F 72 20 74 68 65 20 6F 74 68 65 72 20 t for the other
014960: 0D 0A 20 20 09 6D 6F 64 75 6C 65 73 20 61 73 20 .. .modules as
014970: 74 68 65 20 76 61 72 69 61 62 6C 65 73 20 63 61 the variables ca
014980: 6E 6E 6F 74 20 62 65 20 61 63 63 65 73 73 65 64 nnot be accessed
014990: 20 0D 0A 20 20 09 75 6E 6C 65 73 73 20 65 78 70 .. .unless exp
0149A0: 6C 69 63 69 74 6C 79 20 69 6D 70 6F 72 74 65 64 licitly imported
0149B0: 20 2A 29 0D 0A 0D 0A 09 43 4F 4D 50 4C 49 4E 4B *).....COMPLINK
0149C0: 3A 3D 4E 45 57 4D 4F 44 4E 41 4D 45 3B 20 0D 0A :=NEWMODNAME; ..
0149D0: 09 57 48 49 4C 45 20 43 4F 4D 50 4C 49 4E 4B 3C .WHILE COMPLINK<
0149E0: 3E 4E 49 4C 20 44 4F 20 0D 0A 09 20 20 20 20 57 >NIL DO ... W
0149F0: 49 54 48 20 43 4F 4D 50 4C 49 4E 4B 5E 20 44 4F ITH COMPLINK^ DO
014A00: 20 0D 0A 09 09 52 45 54 52 4E 41 4D 45 28 43 4F ....RETRNAME(CO
014A10: 4D 50 4C 49 4E 4B 29 3B 0D 0A 09 09 6D 6F 64 6C MPLINK);....modl
014A20: 69 73 74 3A 3D 52 45 4C 50 4E 54 52 28 6D 6F 64 ist:=RELPNTR(mod
014A30: 6C 69 73 74 29 3B 20 0D 0A 09 09 61 6E 6F 6E 6C list); ....anonl
014A40: 69 73 74 3A 3D 52 45 4C 50 4E 54 52 28 61 6E 6F ist:=RELPNTR(ano
014A50: 6E 6C 69 73 74 29 3B 20 0D 0A 09 09 6E 6C 69 6E nlist); ....nlin
014A60: 6B 3A 3D 6D 6F 64 6C 69 73 74 3B 20 0D 0A 09 09 k:=modlist; ....
014A70: 52 45 4C 4F 43 41 54 45 3B 0D 0A 09 09 6E 6C 69 RELOCATE;....nli
014A80: 6E 6B 3A 3D 61 6E 6F 6E 6C 69 73 74 3B 20 0D 0A nk:=anonlist; ..
014A90: 09 09 52 45 4C 4F 43 41 54 45 3B 0D 0A 09 09 6E ..RELOCATE;....n
014AA0: 65 78 74 6D 6F 64 75 6C 65 3A 3D 52 45 4C 50 4E extmodule:=RELPN
014AB0: 54 52 28 6E 65 78 74 6D 6F 64 75 6C 65 29 3B 20 TR(nextmodule);
014AC0: 0D 0A 09 09 43 4F 4D 50 4C 49 4E 4B 3A 3D 6E 65 ....COMPLINK:=ne
014AD0: 78 74 6D 6F 64 75 6C 65 3B 20 0D 0A 09 09 45 4E xtmodule; ....EN
014AE0: 44 3B 0D 0A 09 20 20 20 20 45 4E 44 3B 0D 0A 09 D;... END;...
014AF0: 4D 45 52 47 45 4E 41 4D 45 53 3B 0D 0A 09 4E 45 MERGENAMES;...NE
014B00: 20 54 52 55 45 0D 0A 09 09 20 20 20 20 7C 0D 0A TRUE.... |..
014B10: 09 09 31 62 78 3A 53 68 6F 77 43 68 61 6E 67 65 ..1bx:ShowChange
014B20: 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 20 20 20 20 :=FALSE;....
014B30: 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 28 46 OutputToScreen(F
014B40: 41 4C 53 45 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A ALSE);....END;..
014B50: 09 52 45 54 55 52 4E 20 46 41 4C 53 45 0D 0A 09 .RETURN FALSE...
014B60: 45 4E 44 20 43 68 65 63 6B 49 6E 74 65 72 72 75 END CheckInterru
014B70: 70 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 pt;..PROCEDURE G
014B80: 65 74 41 43 68 61 72 28 56 41 52 20 63 68 31 3A etAChar(VAR ch1:
014B90: 43 48 41 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 CHAR);..BEGIN...
014BA0: 49 46 20 4D 61 63 72 6F 44 65 70 74 68 3D 30 20 IF MacroDepth=0
014BB0: 54 48 45 4E 0D 0A 09 09 57 61 69 74 46 6F 72 43 THEN....WaitForC
014BC0: 68 3B 0D 0A 09 09 63 68 31 3A 3D 63 68 3B 0D 0A h;....ch1:=ch;..
014BD0: 09 09 49 46 20 4C 65 61 72 6E 69 6E 67 20 41 4E ..IF Learning AN
014BE0: 44 20 28 4C 65 61 72 6E 4C 65 6E 3C 48 49 47 48 D (LearnLen<HIGH
014BF0: 28 54 65 78 74 29 29 20 54 48 45 4E 0D 0A 09 09 (Text)) THEN....
014C00: 09 49 4E 43 28 4C 65 61 72 6E 4C 65 6E 29 3B 0D .INC(LearnLen);.
014C10: 0A 09 09 09 54 65 78 74 5B 4C 65 61 72 6E 4C 65 ....Text[LearnLe
014C20: 6E 5D 3A 3D 63 68 3B 0D 0A 09 09 09 45 4E 44 3B n]:=ch;.....END;
014C30: 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 49 54 48 20 ...ELSE....WITH
014C40: 4D 61 63 72 6F 53 74 61 63 6B 5B 4D 61 63 72 6F MacroStack[Macro
014C50: 44 65 70 74 68 5D 20 44 4F 0D 0A 09 09 09 49 46 Depth] DO.....IF
014C60: 20 50 6F 73 3E 44 65 66 5E 2E 4C 65 6E 67 74 68 Pos>Def^.Length
014C70: 20 54 48 45 4E 0D 0A 09 09 09 20 20 20 20 44 45 THEN..... DE
014C80: 43 28 43 6F 75 6E 74 29 3B 0D 0A 09 09 09 20 20 C(Count);.....
014C90: 20 20 49 46 20 43 68 65 63 6B 49 6E 74 65 72 72 IF CheckInterr
014CA0: 75 70 74 28 29 20 4F 52 20 4E 4F 54 20 46 6F 75 upt() OR NOT Fou
014CB0: 6E 64 20 54 48 45 4E 0D 0A 09 09 09 09 4D 61 63 nd THEN......Mac
014CC0: 72 6F 44 65 70 74 68 3A 3D 31 3B 0D 0A 09 09 09 roDepth:=1;.....
014CD0: 09 43 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 09 09 09 .Count:=0;......
014CE0: 45 4E 44 3B 0D 0A 09 09 09 20 20 20 20 49 46 20 END;..... IF
014CF0: 43 6F 75 6E 74 3C 31 20 54 48 45 4E 0D 0A 09 09 Count<1 THEN....
014D00: 57 4D 4F 44 4E 41 4D 45 5E 2E 6D 6F 64 6E 61 6D WMODNAME^.modnam
014D10: 65 73 3A 3D 44 49 53 50 4C 41 59 3B 09 20 20 20 es:=DISPLAY;.
014D20: 20 20 0D 0A 09 52 45 54 55 52 4E 20 4E 45 57 4D ...RETURN NEWM
014D30: 4F 44 4E 41 4D 45 3B 20 0D 0A 09 20 0D 0A 09 45 ODNAME; ... ...E
014D40: 4E 44 20 4C 4F 41 44 46 49 4C 45 3B 20 0D 0A 09 ND LOADFILE; ...
014D50: 45 4E 44 20 49 6D 70 6F 72 74 2E 0D 0A 20 0D 0A END Import... ..
014D60: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
014D70: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
014D80: 1A 1A 1A 1A 20 20 20 20 42 41 4B 20 00 00 00 00 .... BAK ....
014D90: 00 00 00 00 00 00 77 51 90 0D 17 22 A4 20 00 00 ......wQ...". ..
014DA0: 41 4E 53 49 20 20 20 20 53 59 53 00 00 00 00 00 ANSI SYS.....
014DB0: 00 00 00 00 00 00 60 6D 67 0A A1 00 73 06 00 00 ......`mg...s...
014DC0: 41 53 53 49 47 4E 20 20 43 4F 4D 00 00 00 00 00 ASSIGN COM.....
014DD0: 00 00 00 00 00 00 60 6D 67 0A A2 00 E5 05 00 00 ......`mg.......
014DE0: 41 54 54 52 49 42 20 20 45 58 45 00 00 00 00 00 ATTRIB EXE.....
014DF0: 00 00 00 00 00 00 60 6D 67 0A A3 00 F3 3A 00 00 ......`mg.£..:..
014E00: 29 29 3B 09 28 2A 67 6F 20 74 6F 20 6E 65 78 74 ));.(*go to next
014E10: 2A 29 0D 0A 09 09 45 4E 44 3B 20 28 2A 57 48 49 *)....END; (*WHI
014E20: 4C 45 20 69 3C 3E 32 35 35 2A 29 0D 0A 09 0D 0A LE i<>255*).....
014E30: 09 69 3A 3D 42 44 4F 53 28 73 64 61 66 63 2C 38 .i:=BDOS(sdafc,8
014E40: 30 48 29 3B 09 09 28 2A 72 65 73 65 74 20 74 6F 0H);..(*reset to
014E50: 20 64 65 66 61 75 6C 74 2A 29 0D 0A 09 0D 0A 09 default*)......
014E60: 45 4E 44 20 53 65 61 72 63 68 46 6F 72 46 69 6C END SearchForFil
014E70: 65 4E 61 6D 65 73 3B 0D 0A 42 45 47 49 4E 0D 0A eNames;..BEGIN..
014E80: 0D 0A 09 28 2A 20 43 6F 6E 76 65 72 74 20 50 61 ...(* Convert Pa
014E90: 74 74 65 72 6E 20 74 6F 20 61 20 66 69 6C 65 20 ttern to a file
014EA0: 6E 61 6D 65 2A 29 0D 0A 09 0D 0A 09 6A 3A 3D 48 name*)......j:=H
014EB0: 49 47 48 28 50 61 74 74 65 72 6E 29 3B 0D 0A 09 IGH(Pattern);...
014EC0: 57 69 6C 64 43 61 72 64 3A 3D 46 41 4C 53 45 3B WildCard:=FALSE;
014ED0: 0D 0A 09 49 46 20 6A 3E 48 49 47 48 28 6E 61 6D ...IF j>HIGH(nam
014EE0: 65 29 20 54 48 45 4E 20 6A 3A 3D 48 49 47 48 28 e) THEN j:=HIGH(
014EF0: 6E 61 6D 65 29 20 45 4E 44 3B 0D 0A 09 46 4F 52 name) END;...FOR
014F00: 09 09 44 45 43 28 4D 61 63 72 6F 44 65 70 74 68 ..DEC(MacroDepth
014F10: 29 3B 0D 0A 09 09 09 20 20 20 20 45 4C 53 45 0D );..... ELSE.
014F20: 0A 09 09 09 09 50 6F 73 3A 3D 31 3B 0D 0A 09 09 .....Pos:=1;....
014F30: 09 09 45 4E 44 3B 0D 0A 09 09 09 20 20 20 20 47 ..END;..... G
014F40: 65 74 41 43 68 61 72 28 63 68 31 29 3B 0D 0A 09 etAChar(ch1);...
014F50: 09 09 45 4C 53 45 0D 0A 09 09 09 09 63 68 31 3A ..ELSE......ch1:
014F60: 3D 44 65 66 5E 2E 43 6F 6D 6D 43 68 61 72 73 5B =Def^.CommChars[
014F70: 50 6F 73 5D 3B 0D 0A 09 09 09 09 49 4E 43 28 50 Pos];......INC(P
014F80: 6F 73 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A os);......END;..
014F90: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D ...END;....END;.
014FA0: 0A 09 45 4E 44 20 47 65 74 41 43 68 61 72 3B 0D ..END GetAChar;.
014FB0: 0A 50 52 4F 43 45 44 55 52 45 20 41 64 64 4D 61 .PROCEDURE AddMa
014FC0: 63 72 6F 28 70 3A 50 4B 65 79 44 65 66 3B 72 65 cro(p:PKeyDef;re
014FD0: 70 65 61 74 3A 49 4E 54 45 47 45 52 29 3B 0D 0A peat:INTEGER);..
014FE0: 42 45 47 49 4E 0D 0A 09 49 46 20 28 70 3C 3E 4E BEGIN...IF (p<>N
014FF0: 49 4C 29 20 41 4E 44 20 28 4D 61 63 72 6F 44 65 IL) AND (MacroDe
015000: 70 74 68 3C 3D 48 49 47 48 28 4D 61 63 72 6F 53 pth<=HIGH(MacroS
015010: 74 61 63 6B 29 29 20 54 48 45 4E 0D 0A 0D 0A 09 tack)) THEN.....
015020: 09 28 2A 6D 61 6B 65 20 73 75 72 65 20 74 68 61 .(*make sure tha
015030: 74 20 6D 61 63 72 6F 20 69 73 20 6E 6F 74 20 72 t macro is not r
015040: 65 63 75 72 73 69 76 65 2A 29 0D 0A 0D 0A 0D 0A ecursive*)......
015050: 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 4D 61 ..FOR i:=1 TO Ma
015060: 63 72 6F 44 65 70 74 68 20 44 4F 0D 0A 09 09 09 croDepth DO.....
015070: 49 46 20 4D 61 63 72 6F 53 74 61 63 6B 5B 69 5D IF MacroStack[i]
015080: 2E 44 65 66 3D 70 20 54 48 45 4E 0D 0A 09 09 09 .Def=p THEN.....
015090: 09 45 72 72 6F 72 4D 65 73 73 61 67 65 28 27 52 .ErrorMessage('R
0150A0: 65 63 75 72 73 69 76 65 20 6D 61 63 72 6F 73 21 ecursive macros!
0150B0: 27 2C 27 20 27 29 3B 0D 0A 09 09 09 09 4D 61 63 ',' ');......Mac
0150C0: 72 6F 44 65 70 74 68 3A 3D 30 3B 0D 0A 09 09 09 roDepth:=0;.....
0150D0: 09 52 45 54 55 52 4E 3B 0D 0A 09 09 09 09 45 4E .RETURN;......EN
0150E0: 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 D;.....END;....I
0150F0: 4E 43 28 4D 61 63 72 6F 44 65 70 74 68 29 3B 0D NC(MacroDepth);.
015100: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
015110: 4F 44 55 4C 45 20 4D 61 63 72 6F 73 3B 0D 0A 0D ODULE Macros;...
015120: 0A 28 2A 09 54 68 69 73 20 69 73 20 61 20 73 70 .(*.This is a sp
015130: 65 63 69 61 6C 20 76 65 72 73 69 6F 6E 20 6F 66 ecial version of
015140: 20 6D 61 63 72 6F 73 20 66 6F 72 20 6D 61 63 68 macros for mach
015150: 69 6E 65 73 0D 0A 09 77 68 69 63 68 20 64 6F 20 ines...which do
015160: 6E 6F 74 20 68 61 76 65 20 66 75 6E 63 74 69 6F not have functio
015170: 6E 20 6B 65 79 73 20 61 74 20 61 6C 6C 2C 20 73 n keys at all, s
015180: 6F 20 64 6F 0D 0A 09 6E 6F 74 20 6E 65 65 64 20 o do...not need
015190: 74 68 65 20 65 78 74 72 61 20 63 6F 64 65 20 66 the extra code f
0151A0: 6F 72 20 66 75 6E 63 74 69 6F 6E 20 6B 65 79 20 or function key
0151B0: 64 65 74 65 63 74 69 6F 6E 2A 29 0D 0A 0D 0A 46 detection*)....F
0151C0: 52 4F 4D 09 44 6F 4D 65 6E 75 20 49 4D 50 4F 52 ROM.DoMenu IMPOR
0151D0: 54 20 47 65 74 53 74 72 69 6E 67 2C 52 65 64 69 T GetString,Redi
0151E0: 73 70 6C 61 79 3B 0D 0A 46 52 4F 4D 09 53 74 6F splay;..FROM.Sto
0151F0: 72 61 67 65 20 49 4D 50 4F 52 54 20 20 41 4C 4C rage IMPORT ALL
015200: 4F 43 41 54 45 2C 44 45 41 4C 4C 4F 43 41 54 45 OCATE,DEALLOCATE
015210: 3B 0D 0A 46 52 4F 4D 09 54 65 72 6D 69 6E 61 6C ;..FROM.Terminal
015220: 20 49 4D 50 4F 52 54 20 42 75 73 79 52 65 61 64 IMPORT BusyRead
015230: 2C 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72 69 ,WriteString,Wri
015240: 74 65 4C 6E 2C 57 72 69 74 65 3B 0D 0A 46 52 4F teLn,Write;..FRO
015250: 4D 09 46 69 6C 65 73 20 49 4D 50 4F 52 54 20 46 M.Files IMPORT F
015260: 49 4C 45 2C 53 65 71 52 65 61 64 42 6C 6F 63 6B ILE,SeqReadBlock
015270: 2C 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 4C ,SeqWriteBlock,L
015280: 6F 6F 6B 75 70 2C 43 72 65 61 74 65 2C 43 6C 6F ookup,Create,Clo
015290: 73 65 3B 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D se;..FROM.SYSTEM
0152A0: 20 49 4D 50 4F 52 54 20 41 44 52 2C 54 53 49 5A IMPORT ADR,TSIZ
0152B0: 45 3B 0D 0A 46 52 4F 4D 09 45 64 69 74 44 69 73 E;..FROM.EditDis
0152C0: 70 6C 61 79 20 49 4D 50 4F 52 54 20 45 72 72 6F play IMPORT Erro
0152D0: 72 4D 65 73 73 61 67 65 3B 0D 0A 46 52 4F 4D 09 rMessage;..FROM.
0152E0: 46 61 73 74 4D 6F 76 65 20 49 4D 50 4F 52 54 20 FastMove IMPORT
0152F0: 4D 6F 76 65 75 70 3B 0D 0A 46 52 4F 4D 09 53 63 Moveup;..FROM.Sc
015300: 0A 09 09 57 49 54 48 20 4D 61 63 72 6F 53 74 61 ...WITH MacroSta
015310: 63 6B 5B 4D 61 63 72 6F 44 65 70 74 68 5D 20 44 ck[MacroDepth] D
015320: 4F 0D 0A 09 09 09 50 6F 73 3A 3D 31 3B 0D 0A 09 O.....Pos:=1;...
015330: 09 09 44 65 66 3A 3D 70 3B 0D 0A 09 09 09 43 6F ..Def:=p;.....Co
015340: 75 6E 74 3A 3D 72 65 70 65 61 74 3B 0D 0A 09 09 unt:=repeat;....
015350: 09 45 4E 44 3B 28 2A 57 49 54 48 2A 29 0D 0A 09 .END;(*WITH*)...
015360: 09 45 4E 44 3B 28 2A 70 3C 3E 4E 49 4C 20 65 74 .END;(*p<>NIL et
015370: 63 2A 29 0D 0A 09 45 4E 44 20 41 64 64 4D 61 63 c*)...END AddMac
015380: 72 6F 3B 0D 0A 56 41 52 09 53 70 65 63 69 61 6C ro;..VAR.Special
015390: 53 65 71 75 65 6E 63 65 3A 42 4F 4F 4C 45 41 4E Sequence:BOOLEAN
0153A0: 3D 46 41 4C 53 45 3B 0D 0A 50 52 4F 43 45 44 55 =FALSE;..PROCEDU
0153B0: 52 45 20 52 65 61 64 41 43 68 61 72 28 56 41 52 RE ReadAChar(VAR
0153C0: 20 52 65 73 75 6C 74 3A 43 48 41 52 29 3B 0D 0A Result:CHAR);..
0153D0: 0D 0A 28 2A 09 72 65 61 64 20 6E 65 78 74 20 63 ..(*.read next c
0153E0: 68 61 72 61 63 74 65 72 2C 20 63 68 65 63 6B 69 haracter, checki
0153F0: 6E 67 20 66 6F 72 20 61 72 72 6F 77 73 2F 66 75 ng for arrows/fu
015400: 6E 63 74 69 6F 6E 20 6B 65 79 73 0D 0A 09 69 6E nction keys...in
015410: 20 61 6E 64 20 6F 75 74 20 70 6F 69 6E 74 20 74 and out point t
015420: 6F 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73 o the characters
015430: 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65 6E which have been
015440: 20 72 65 61 64 20 61 68 65 61 64 0D 0A 09 42 79 read ahead...By
015450: 20 52 65 61 64 41 43 68 61 72 20 69 6E 20 61 6E ReadAChar in an
015460: 20 61 74 74 65 6D 70 74 20 74 6F 20 72 65 73 6F attempt to reso
015470: 6C 76 65 20 61 20 6D 61 63 72 6F 0D 0A 0D 0A 09 lve a macro.....
015480: 57 68 65 6E 20 52 65 61 64 41 43 68 61 72 20 69 When ReadAChar i
015490: 73 20 65 6E 74 65 72 65 64 2C 20 69 66 20 74 68 s entered, if th
0154A0: 69 73 20 62 75 66 66 65 72 20 69 73 20 6E 6F 74 is buffer is not
0154B0: 20 65 6D 70 74 79 2C 0D 0A 09 74 68 65 20 66 69 empty,...the fi
0154C0: 72 73 74 20 63 68 61 72 61 63 74 65 72 20 69 73 rst character is
0154D0: 20 74 6F 20 62 65 20 6C 6F 6F 6B 65 64 20 75 70 to be looked up
0154E0: 20 74 6F 20 73 65 65 20 69 66 20 69 74 20 69 73 to see if it is
0154F0: 20 61 20 0D 0A 09 73 74 61 72 74 20 6F 66 20 61 a ...start of a
015500: 72 65 65 6E 49 4F 20 49 4D 50 4F 52 54 20 4F 75 reenIO IMPORT Ou
015510: 74 70 75 74 54 6F 53 63 72 65 65 6E 3B 0D 0A 43 tputToScreen;..C
015520: 4F 4E 53 54 09 42 6C 6F 63 6B 4C 65 6E 3D 31 32 ONST.BlockLen=12
015530: 38 3B 0D 0A 09 45 53 43 3D 31 62 78 3B 0D 0A 54 8;...ESC=1bx;..T
015540: 59 50 45 0D 0A 09 4B 65 79 44 65 66 3D 52 45 43 YPE...KeyDef=REC
015550: 4F 52 44 0D 0A 09 09 4C 65 6E 67 74 68 3A 5B 31 ORD....Length:[1
015560: 2E 2E 36 31 5D 3B 0D 0A 09 09 43 6F 6D 6D 43 68 ..61];....CommCh
015570: 61 72 73 3A 41 52 52 41 59 5B 31 2E 2E 32 30 5D ars:ARRAY[1..20]
015580: 20 4F 46 20 43 48 41 52 3B 0D 0A 09 09 45 4E 44 OF CHAR;....END
015590: 3B 0D 0A 09 50 4B 65 79 44 65 66 3D 50 4F 49 4E ;...PKeyDef=POIN
0155A0: 54 45 52 20 54 4F 20 4B 65 79 44 65 66 3B 0D 0A TER TO KeyDef;..
0155B0: 09 4D 61 63 72 6F 50 6F 69 6E 74 3D 52 45 43 4F .MacroPoint=RECO
0155C0: 52 44 0D 0A 09 09 50 6F 73 3A 43 41 52 44 49 4E RD....Pos:CARDIN
0155D0: 41 4C 3B 0D 0A 09 09 44 65 66 3A 50 4B 65 79 44 AL;....Def:PKeyD
0155E0: 65 66 3B 0D 0A 09 09 43 6F 75 6E 74 3A 49 4E 54 ef;....Count:INT
0155F0: 45 47 45 52 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 EGER;....END;...
015600: 09 09 09 0D 0A 56 41 52 0D 0A 09 63 68 3A 43 48 .....VAR...ch:CH
015610: 41 52 3B 0D 0A 09 43 6F 6D 6D 61 6E 64 73 3A 41 AR;...Commands:A
015620: 52 52 41 59 5B 27 40 27 2E 2E 27 5A 27 5D 20 4F RRAY['@'..'Z'] O
015630: 46 20 50 4B 65 79 44 65 66 3B 0D 0A 09 4D 61 63 F PKeyDef;...Mac
015640: 72 6F 44 65 70 74 68 3A 43 41 52 44 49 4E 41 4C roDepth:CARDINAL
015650: 3D 30 3B 0D 0A 09 4D 61 63 72 6F 53 74 61 63 6B =0;...MacroStack
015660: 3A 41 52 52 41 59 5B 31 2E 2E 35 5D 20 4F 46 20 :ARRAY[1..5] OF
015670: 4D 61 63 72 6F 50 6F 69 6E 74 3B 0D 0A 09 4C 65 MacroPoint;...Le
015680: 61 72 6E 63 68 3A 43 48 41 52 3B 0D 0A 09 4C 65 arnch:CHAR;...Le
015690: 61 72 6E 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3B arnLen:CARDINAL;
0156A0: 0D 0A 09 4C 65 61 72 6E 69 6E 67 3A 42 4F 4F 4C ...Learning:BOOL
0156B0: 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 54 65 78 EAN=FALSE;...Tex
0156C0: 74 3A 41 52 52 41 59 5B 31 2E 2E 36 30 5D 20 4F t:ARRAY[1..60] O
0156D0: 46 20 43 48 41 52 3B 0D 0A 09 69 3A 43 41 52 44 F CHAR;...i:CARD
0156E0: 49 4E 41 4C 3B 0D 0A 09 53 68 6F 77 43 68 61 6E INAL;...ShowChan
0156F0: 67 65 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 0D 0A 09 ge:BOOLEAN;.....
015700: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
015710: 12 00 01 00 02 09 52 E5 12 00 41 02 00 00 00 02 ......R...A.....
015720: 12 00 46 02 00 00 00 02 12 00 42 02 00 00 00 02 ..F.......B.....
015730: 12 00 47 02 00 00 00 02 12 00 43 02 00 00 00 02 ..G.......C.....
015740: 12 00 48 02 00 00 00 02 12 00 44 02 00 00 00 02 ..H.......D.....
015750: 12 00 49 02 00 00 00 02 12 00 45 02 00 00 00 02 ..I.......E.....
015760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
015770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
015780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
015790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0157F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
015800: 20 6B 65 79 20 64 65 66 69 6E 69 74 69 6F 6E 2A key definition*
015810: 29 0D 0A 42 45 47 49 4E 0D 0A 09 47 65 74 41 43 )..BEGIN...GetAC
015820: 68 61 72 28 52 65 73 75 6C 74 29 3B 0D 0A 09 45 har(Result);...E
015830: 4E 44 20 52 65 61 64 41 43 68 61 72 3B 0D 0A 09 ND ReadAChar;...
015840: 09 09 09 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 ......PROCEDURE
015850: 47 65 74 44 65 66 43 68 61 72 3B 0D 0A 56 41 52 GetDefChar;..VAR
015860: 09 54 65 78 74 3A 41 52 52 41 59 5B 31 2E 2E 31 .Text:ARRAY[1..1
015870: 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 ] OF CHAR;..BEGI
015880: 4E 0D 0A 09 47 65 74 53 74 72 69 6E 67 28 54 65 N...GetString(Te
015890: 78 74 2C 4C 65 61 72 6E 4C 65 6E 2C 27 43 68 61 xt,LearnLen,'Cha
0158A0: 72 20 74 6F 20 64 65 66 69 6E 65 3A 27 29 3B 0D r to define:');.
0158B0: 0A 09 4C 65 61 72 6E 63 68 3A 3D 43 41 50 28 54 ..Learnch:=CAP(T
0158C0: 65 78 74 5B 31 5D 29 3B 0D 0A 09 45 4E 44 20 47 ext[1]);...END G
0158D0: 65 74 44 65 66 43 68 61 72 3B 0D 0A 50 52 4F 43 etDefChar;..PROC
0158E0: 45 44 55 52 45 20 44 65 66 4D 61 63 72 6F 54 65 EDURE DefMacroTe
0158F0: 78 74 3B 0D 0A 56 41 52 09 70 3A 50 4B 65 79 44 xt;..VAR.p:PKeyD
015900: 65 66 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 ef;..BEGIN...IF
015910: 4C 65 61 72 6E 4C 65 6E 3E 30 20 54 48 45 4E 0D LearnLen>0 THEN.
015920: 0A 09 09 41 4C 4C 4F 43 41 54 45 28 70 2C 54 53 ...ALLOCATE(p,TS
015930: 49 5A 45 28 43 41 52 44 49 4E 41 4C 29 2B 4C 65 IZE(CARDINAL)+Le
015940: 61 72 6E 4C 65 6E 29 3B 0D 0A 09 09 43 6F 6D 6D arnLen);....Comm
015950: 61 6E 64 73 5B 4C 65 61 72 6E 63 68 5D 3A 3D 70 ands[Learnch]:=p
015960: 20 0D 0A 09 09 57 49 54 48 20 70 5E 20 44 4F 0D ....WITH p^ DO.
015970: 0A 09 09 09 4C 65 6E 67 74 68 3A 3D 4C 65 61 72 ....Length:=Lear
015980: 6E 4C 65 6E 3B 0D 0A 09 09 09 46 4F 52 20 4C 65 nLen;.....FOR Le
015990: 61 72 6E 4C 65 6E 3A 3D 4C 65 61 72 6E 4C 65 6E arnLen:=LearnLen
0159A0: 20 54 4F 20 31 20 42 59 20 2D 31 20 44 4F 0D 0A TO 1 BY -1 DO..
0159B0: 09 09 09 09 43 6F 6D 6D 43 68 61 72 73 5B 4C 65 ....CommChars[Le
0159C0: 61 72 6E 4C 65 6E 5D 3A 3D 54 65 78 74 5B 4C 65 arnLen]:=Text[Le
0159D0: 61 72 6E 4C 65 6E 5D 3B 0D 0A 09 09 09 09 45 4E arnLen];......EN
0159E0: 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 0D 0A 09 D;.....END;.....
0159F0: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 44 65 66 4D .END;...END DefM
015A00: 73 65 71 75 65 6E 63 65 73 2A 29 0D 0A 09 49 46 sequences*)...IF
015A10: 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A reply<>0 THEN..
015A20: 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D 3A 3D ..Block[reply]:=
015A30: 30 78 3B 0D 0A 09 09 53 65 71 57 72 69 74 65 42 0x;....SeqWriteB
015A40: 6C 6F 63 6B 28 46 2C 41 44 52 28 42 6C 6F 63 6B lock(F,ADR(Block
015A50: 29 2C 42 6C 6F 63 6B 4C 65 6E 2C 72 65 70 6C 79 ),BlockLen,reply
015A60: 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 43 );....END;.....C
015A70: 6C 6F 73 65 28 46 29 3B 0D 0A 09 45 4E 44 20 53 lose(F);...END S
015A80: 74 6F 72 65 4D 61 63 72 6F 73 3B 0D 0A 50 52 4F toreMacros;..PRO
015A90: 43 45 44 55 52 45 20 4F 75 74 43 68 28 63 68 3A CEDURE OutCh(ch:
015AA0: 43 48 41 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 CHAR);..BEGIN...
015AB0: 49 46 20 63 68 3C 27 20 27 20 54 48 45 4E 0D 0A IF ch<' ' THEN..
015AC0: 09 09 57 72 69 74 65 28 27 5E 27 29 3B 57 72 69 ..Write('^');Wri
015AD0: 74 65 28 43 48 52 28 4F 52 44 28 63 68 29 2B 36 te(CHR(ORD(ch)+6
015AE0: 34 29 29 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 4));...ELSE....W
015AF0: 72 69 74 65 28 63 68 29 3B 0D 0A 09 09 45 4E 44 rite(ch);....END
015B00: 3B 0D 0A 09 45 4E 44 20 4F 75 74 43 68 3B 0D 0A ;...END OutCh;..
015B10: 50 52 4F 43 45 44 55 52 45 20 50 72 69 6E 74 4D PROCEDURE PrintM
015B20: 61 63 72 6F 73 3B 0D 0A 42 45 47 49 4E 0D 0A 09 acros;..BEGIN...
015B30: 46 4F 52 20 63 68 3A 3D 27 41 27 20 54 4F 20 27 FOR ch:='A' TO '
015B40: 5A 27 20 44 4F 0D 0A 09 09 49 46 20 43 6F 6D 6D Z' DO....IF Comm
015B50: 61 6E 64 73 5B 63 68 5D 3C 3E 4E 49 4C 20 54 48 ands[ch]<>NIL TH
015B60: 45 4E 20 0D 0A 09 09 20 20 20 20 57 49 54 48 20 EN .... WITH
015B70: 43 6F 6D 6D 61 6E 64 73 5B 63 68 5D 5E 20 44 4F Commands[ch]^ DO
015B80: 0D 0A 09 09 09 4F 75 74 43 68 28 63 68 29 3B 0D .....OutCh(ch);.
015B90: 0A 09 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 ....FOR i:=1 TO
015BA0: 4C 65 6E 67 74 68 20 44 4F 20 0D 0A 09 09 09 09 Length DO ......
015BB0: 4F 75 74 43 68 28 43 6F 6D 6D 43 68 61 72 73 5B OutCh(CommChars[
015BC0: 69 5D 29 20 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A i]) ......END;..
015BD0: 09 09 09 45 4E 44 3B 0D 0A 09 09 20 20 20 20 57 ...END;.... W
015BE0: 72 69 74 65 4C 6E 3B 0D 0A 09 09 20 20 20 20 45 riteLn;.... E
015BF0: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 72 ND;....END;...Wr
015C00: 61 63 72 6F 54 65 78 74 3B 0D 0A 50 52 4F 43 45 acroText;..PROCE
015C10: 44 55 52 45 20 4C 65 61 72 6E 4D 61 63 72 6F 3B DURE LearnMacro;
015C20: 0D 0A 0D 0A 28 2A 09 4C 65 61 72 6E 20 61 20 6D ....(*.Learn a m
015C30: 61 63 72 6F 20 64 65 66 69 6E 69 74 69 6F 6E 09 acro definition.
015C40: 0D 0A 09 63 61 6C 6C 65 64 20 61 74 20 65 69 74 ...called at eit
015C50: 68 65 72 20 65 6E 64 20 6F 66 20 64 65 66 69 6E her end of defin
015C60: 69 74 69 6F 6E 2A 29 0D 0A 0D 0A 42 45 47 49 4E ition*)....BEGIN
015C70: 0D 0A 09 49 46 20 4E 4F 54 20 4C 65 61 72 6E 69 ...IF NOT Learni
015C80: 6E 67 20 54 48 45 4E 0D 0A 09 09 47 65 74 44 65 ng THEN....GetDe
015C90: 66 43 68 61 72 3B 0D 0A 09 09 4C 65 61 72 6E 69 fChar;....Learni
015CA0: 6E 67 3A 3D 54 52 55 45 3B 0D 0A 09 09 4C 65 61 ng:=TRUE;....Lea
015CB0: 72 6E 4C 65 6E 3A 3D 30 3B 0D 0A 09 45 4C 53 45 rnLen:=0;...ELSE
015CC0: 0D 0A 09 09 4C 65 61 72 6E 4C 65 6E 3A 3D 4C 65 ....LearnLen:=Le
015CD0: 61 72 6E 4C 65 6E 2D 32 3B 0D 0A 09 09 44 65 66 arnLen-2;....Def
015CE0: 4D 61 63 72 6F 54 65 78 74 3B 0D 0A 09 09 4C 65 MacroText;....Le
015CF0: 61 72 6E 69 6E 67 3A 3D 46 41 4C 53 45 3B 0D 0A arning:=FALSE;..
015D00: 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4C 65 61 ..END;...END Lea
015D10: 72 6E 4D 61 63 72 6F 3B 0D 0A 50 52 4F 43 45 44 rnMacro;..PROCED
015D20: 55 52 45 20 44 65 66 4D 61 63 72 6F 3B 0D 0A 42 URE DefMacro;..B
015D30: 45 47 49 4E 0D 0A 09 47 65 74 44 65 66 43 68 61 EGIN...GetDefCha
015D40: 72 3B 0D 0A 09 49 46 20 28 4C 65 61 72 6E 63 68 r;...IF (Learnch
015D50: 3E 3D 27 41 27 29 20 41 4E 44 20 28 4C 65 61 72 >='A') AND (Lear
015D60: 6E 63 68 3C 3D 27 5A 27 29 20 4F 52 20 28 4C 65 nch<='Z') OR (Le
015D70: 61 72 6E 63 68 3D 45 53 43 29 20 54 48 45 4E 0D arnch=ESC) THEN.
015D80: 0A 09 09 47 65 74 53 74 72 69 6E 67 28 54 65 78 ...GetString(Tex
015D90: 74 2C 4C 65 61 72 6E 4C 65 6E 2C 27 4D 61 63 72 t,LearnLen,'Macr
015DA0: 6F 3A 27 29 3B 0D 0A 09 09 44 65 66 4D 61 63 72 o:');....DefMacr
015DB0: 6F 54 65 78 74 3B 0D 0A 09 09 45 4E 44 3B 0D 0A oText;....END;..
015DC0: 09 45 4E 44 20 44 65 66 4D 61 63 72 6F 3B 0D 0A .END DefMacro;..
015DD0: 50 52 4F 43 45 44 55 52 45 20 4D 61 63 72 6F 28 PROCEDURE Macro(
015DE0: 63 68 3A 43 48 41 52 3B 72 65 70 65 61 74 3A 49 ch:CHAR;repeat:I
015DF0: 4E 54 45 47 45 52 29 3B 0D 0A 56 41 52 09 69 3A NTEGER);..VAR.i:
015E00: 69 74 65 53 74 72 69 6E 67 28 27 20 45 6E 74 65 iteString(' Ente
015E10: 72 20 61 6E 79 20 63 68 61 72 61 63 74 65 72 20 r any character
015E20: 74 6F 20 63 6F 6E 74 69 6E 75 65 20 3A 27 29 3B to continue :');
015E30: 0D 0A 09 57 61 69 74 46 6F 72 43 68 3B 0D 0A 09 ...WaitForCh;...
015E40: 45 4E 44 20 50 72 69 6E 74 4D 61 63 72 6F 73 3B END PrintMacros;
015E50: 0D 0A 42 45 47 49 4E 0D 0A 09 53 68 6F 77 43 68 ..BEGIN...ShowCh
015E60: 61 6E 67 65 3A 3D 54 52 55 45 3B 0D 0A 09 46 4F ange:=TRUE;...FO
015E70: 52 20 63 68 3A 3D 27 40 27 20 54 4F 20 27 5A 27 R ch:='@' TO 'Z'
015E80: 20 44 4F 20 43 6F 6D 6D 61 6E 64 73 5B 63 68 5D DO Commands[ch]
015E90: 3A 3D 4E 49 4C 20 45 4E 44 3B 0D 0A 09 4C 6F 6F :=NIL END;...Loo
015EA0: 6B 75 70 28 46 2C 27 4D 41 43 52 4F 53 2E 44 41 kup(F,'MACROS.DA
015EB0: 54 20 27 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 T ',reply);...IF
015EC0: 20 72 65 70 6C 79 3D 30 20 54 48 45 4E 0D 0A 09 reply=0 THEN...
015ED0: 09 4C 6F 61 64 4D 61 63 72 6F 73 3B 0D 0A 09 09 .LoadMacros;....
015EE0: 45 4E 44 3B 0D 0A 09 09 0D 0A 09 45 4E 44 20 4D END;.......END M
015EF0: 61 63 72 6F 73 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A acros...........
015F00: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
015F10: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
015F20: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
015F30: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
015F40: 1A 44 49 53 43 32 20 20 42 41 54 20 00 00 00 00 .DISC2 BAT ....
015F50: 00 00 00 00 00 00 08 82 21 0D E1 0B 3A 01 00 00 ........!...:...
015F60: 4C 44 49 53 43 33 20 20 42 41 54 20 00 00 00 00 LDISC3 BAT ....
015F70: 00 00 00 00 00 00 75 92 21 0D E2 0B 5E 03 00 00 ......u.!...^...
015F80: 5E 2E 75 70 70 65 72 0D 0A 09 09 45 4C 53 49 46 ^.upper....ELSIF
015F90: 20 49 44 3E 4C 49 44 20 54 48 45 4E 20 54 41 42 ID>LID THEN TAB
015FA0: 4C 45 3A 3D 54 41 42 4C 45 5E 2E 6C 6F 77 65 72 LE:=TABLE^.lower
015FB0: 0D 0A 09 09 45 4C 53 45 20 45 58 49 54 20 45 4E ....ELSE EXIT EN
015FC0: 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 54 D;....END;...RET
015FD0: 55 52 4E 20 54 41 42 4C 45 0D 0A 09 45 4E 44 20 URN TABLE...END
015FE0: 4C 4F 4F 4B 55 50 3B 0D 0A 50 52 4F 43 45 44 55 LOOKUP;..PROCEDU
015FF0: 52 45 20 52 45 4C 50 4E 54 52 28 46 49 45 4C 44 RE RELPNTR(FIELD
016000: 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E CARDINAL;..BEGIN
016010: 0D 0A 09 63 68 3A 3D 43 41 50 28 63 68 29 3B 0D ...ch:=CAP(ch);.
016020: 0A 09 49 46 20 63 68 3C 27 20 27 20 54 48 45 4E ..IF ch<' ' THEN
016030: 20 63 68 3A 3D 43 48 52 28 4F 52 44 28 63 68 29 ch:=CHR(ORD(ch)
016040: 2B 36 34 29 20 45 4E 44 3B 0D 0A 09 49 46 20 28 +64) END;...IF (
016050: 63 68 3E 3D 27 40 27 29 20 41 4E 44 20 28 63 68 ch>='@') AND (ch
016060: 3C 3D 27 5A 27 29 20 54 48 45 4E 0D 0A 09 09 41 <='Z') THEN....A
016070: 64 64 4D 61 63 72 6F 28 43 6F 6D 6D 61 6E 64 73 ddMacro(Commands
016080: 5B 63 68 5D 2C 72 65 70 65 61 74 29 3B 0D 0A 09 [ch],repeat);...
016090: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4D 61 63 72 .END;...END Macr
0160A0: 6F 3B 0D 0A 56 41 52 09 46 3A 46 49 4C 45 3B 0D o;..VAR.F:FILE;.
0160B0: 0A 09 72 65 70 6C 79 3A 49 4E 54 45 47 45 52 3B ..reply:INTEGER;
0160C0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 4C 6F 61 64 ..PROCEDURE Load
0160D0: 4D 61 63 72 6F 73 3B 0D 0A 56 41 52 09 42 6C 6F Macros;..VAR.Blo
0160E0: 63 6B 3A 41 52 52 41 59 5B 30 2E 2E 42 6C 6F 63 ck:ARRAY[0..Bloc
0160F0: 6B 4C 65 6E 2D 31 5D 20 4F 46 20 43 48 41 52 3B kLen-1] OF CHAR;
016100: 0D 0A 42 45 47 49 4E 0D 0A 09 4C 4F 4F 50 0D 0A ..BEGIN...LOOP..
016110: 09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 28 46 ..SeqReadBlock(F
016120: 2C 41 44 52 28 42 6C 6F 63 6B 29 2C 42 6C 6F 63 ,ADR(Block),Bloc
016130: 6B 4C 65 6E 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 kLen,reply);....
016140: 49 46 20 72 65 70 6C 79 3C 3E 42 6C 6F 63 6B 4C IF reply<>BlockL
016150: 65 6E 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 en THEN EXIT END
016160: 3B 0D 0A 09 09 72 65 70 6C 79 3A 3D 30 3B 0D 0A ;....reply:=0;..
016170: 09 09 57 48 49 4C 45 20 42 6C 6F 63 6B 5B 72 65 ..WHILE Block[re
016180: 70 6C 79 5D 3C 3E 30 78 20 44 4F 0D 0A 09 09 09 ply]<>0x DO.....
016190: 4C 65 61 72 6E 4C 65 6E 3A 3D 4F 52 44 28 42 6C LearnLen:=ORD(Bl
0161A0: 6F 63 6B 5B 72 65 70 6C 79 5D 29 3B 0D 0A 09 09 ock[reply]);....
0161B0: 09 4C 65 61 72 6E 63 68 3A 3D 42 6C 6F 63 6B 5B .Learnch:=Block[
0161C0: 72 65 70 6C 79 2B 31 5D 3B 0D 0A 09 09 09 72 65 reply+1];.....re
0161D0: 70 6C 79 3A 3D 72 65 70 6C 79 2B 32 3B 0D 0A 09 ply:=reply+2;...
0161E0: 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 4C 65 ..FOR i:=1 TO Le
0161F0: 61 72 6E 4C 65 6E 20 44 4F 0D 0A 09 09 09 09 54 arnLen DO......T
016200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0162A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0162B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0162C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0162D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0162E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0162F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0163A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0163B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0163C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0163D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0163E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0163F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
016400: 65 78 74 5B 69 5D 3A 3D 42 6C 6F 63 6B 5B 72 65 ext[i]:=Block[re
016410: 70 6C 79 5D 3B 0D 0A 09 09 09 09 49 4E 43 28 72 ply];......INC(r
016420: 65 70 6C 79 29 3B 0D 0A 09 09 09 09 45 4E 44 3B eply);......END;
016430: 0D 0A 09 09 09 44 65 66 4D 61 63 72 6F 54 65 78 .....DefMacroTex
016440: 74 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 t;.....END;....E
016450: 4E 44 3B 0D 0A 09 45 4E 44 20 4C 6F 61 64 4D 61 ND;...END LoadMa
016460: 63 72 6F 73 3B 09 09 09 0D 0A 50 52 4F 43 45 44 cros;.....PROCED
016470: 55 52 45 20 53 74 6F 72 65 4D 61 63 72 6F 73 3B URE StoreMacros;
016480: 0D 0A 56 41 52 09 42 6C 6F 63 6B 3A 41 52 52 41 ..VAR.Block:ARRA
016490: 59 5B 30 2E 2E 42 6C 6F 63 6B 4C 65 6E 2D 31 5D Y[0..BlockLen-1]
0164A0: 20 4F 46 20 43 48 41 52 3B 0D 0A 0D 0A 50 52 4F OF CHAR;....PRO
0164B0: 43 45 44 55 52 45 20 53 74 6F 72 65 4F 6E 65 4D CEDURE StoreOneM
0164C0: 61 63 72 6F 28 70 3A 50 4B 65 79 44 65 66 29 3B acro(p:PKeyDef);
0164D0: 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 70 3C 3E ..BEGIN...IF p<>
0164E0: 4E 49 4C 20 54 48 45 4E 0D 0A 09 09 57 49 54 48 NIL THEN....WITH
0164F0: 20 70 5E 20 44 4F 0D 0A 09 09 09 49 46 20 28 72 p^ DO.....IF (r
016500: 65 70 6C 79 2B 4C 65 6E 67 74 68 2B 31 34 29 3E eply+Length+14)>
016510: 3D 42 6C 6F 63 6B 4C 65 6E 20 54 48 45 4E 0D 0A =BlockLen THEN..
016520: 09 09 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D ....Block[reply]
016530: 3A 3D 30 78 3B 0D 0A 09 09 09 09 53 65 71 57 72 :=0x;......SeqWr
016540: 69 74 65 42 6C 6F 63 6B 28 46 2C 41 44 52 28 42 iteBlock(F,ADR(B
016550: 6C 6F 63 6B 29 2C 42 6C 6F 63 6B 4C 65 6E 2C 72 lock),BlockLen,r
016560: 65 70 6C 79 29 3B 0D 0A 09 09 09 09 72 65 70 6C eply);......repl
016570: 79 3A 3D 30 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D y:=0;......END;.
016580: 0A 09 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 5D ....Block[reply]
016590: 3A 3D 43 48 52 28 4C 65 6E 67 74 68 29 3B 0D 0A :=CHR(Length);..
0165A0: 09 09 09 42 6C 6F 63 6B 5B 72 65 70 6C 79 2B 31 ...Block[reply+1
0165B0: 5D 3A 3D 4C 65 61 72 6E 63 68 3B 0D 0A 09 09 09 ]:=Learnch;.....
0165C0: 72 65 70 6C 79 3A 3D 72 65 70 6C 79 2B 32 3B 0D reply:=reply+2;.
0165D0: 0A 09 09 09 46 4F 52 20 69 3A 3D 31 20 54 4F 20 ....FOR i:=1 TO
0165E0: 4C 65 6E 67 74 68 20 44 4F 0D 0A 09 09 09 09 42 Length DO......B
0165F0: 6C 6F 63 6B 5B 72 65 70 6C 79 5D 3A 3D 43 6F 6D lock[reply]:=Com
016600: 4D 4F 44 55 4C 45 20 4D 79 4C 55 3B 0D 0A 0D 0A MODULE MyLU;....
016610: 28 2A 09 44 61 76 65 20 4D 6F 6F 72 65 27 73 20 (*.Dave Moore's
016620: 6F 77 6E 20 76 65 72 73 69 6F 6E 20 6F 66 20 4C own version of L
016630: 55 20 66 6F 72 20 75 73 65 20 77 69 74 68 20 68 U for use with h
016640: 69 73 20 4D 6F 64 75 6C 61 2D 32 0D 0A 09 63 6F is Modula-2...co
016650: 6D 70 69 6C 65 72 20 2A 29 0D 0A 0D 0A 46 52 4F mpiler *)....FRO
016660: 4D 09 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 M.Terminal IMPOR
016670: 54 20 57 72 69 74 65 53 74 72 69 6E 67 2C 57 72 T WriteString,Wr
016680: 69 74 65 4C 6E 2C 52 65 61 64 53 74 72 69 6E 67 iteLn,ReadString
016690: 2C 57 72 69 74 65 3B 20 0D 0A 46 52 4F 4D 09 46 ,Write; ..FROM.F
0166A0: 69 6C 65 73 20 09 49 4D 50 4F 52 54 20 46 49 4C iles .IMPORT FIL
0166B0: 45 2C 52 65 61 64 42 6C 6F 63 6B 2C 57 72 69 74 E,ReadBlock,Writ
0166C0: 65 42 6C 6F 63 6B 2C 4C 6F 6F 6B 75 70 2C 43 72 eBlock,Lookup,Cr
0166D0: 65 61 74 65 2C 46 69 6C 65 4E 61 6D 65 2C 0D 0A eate,FileName,..
0166E0: 09 09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B 2C ...SeqReadBlock,
0166F0: 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 2C 43 6F SeqWriteBlock,Co
016700: 6E 76 65 72 74 46 69 6C 65 4E 61 6D 65 2C 43 6C nvertFileName,Cl
016710: 6F 73 65 2C 0D 0A 09 09 09 4D 61 6B 65 42 41 4B ose,.....MakeBAK
016720: 2C 53 65 74 42 6C 6F 63 6B 2C 44 65 76 69 63 65 ,SetBlock,Device
016730: 74 79 70 65 3B 0D 0A 46 52 4F 4D 09 53 6D 61 6C type;..FROM.Smal
016740: 6C 49 4F 20 49 4D 50 4F 52 54 20 52 65 61 64 43 lIO IMPORT ReadC
016750: 61 72 64 2C 57 72 69 74 65 43 61 72 64 2C 57 72 ard,WriteCard,Wr
016760: 69 74 65 48 65 78 3B 0D 0A 46 52 4F 4D 09 53 59 iteHex;..FROM.SY
016770: 53 54 45 4D 20 20 49 4D 50 4F 52 54 20 42 59 54 STEM IMPORT BYT
016780: 45 2C 41 44 52 2C 54 53 49 5A 45 3B 0D 0A 46 52 E,ADR,TSIZE;..FR
016790: 4F 4D 09 43 50 4D 09 49 4D 50 4F 52 54 20 66 63 OM.CPM.IMPORT fc
0167A0: 62 2C 61 6C 66 61 2C 65 78 74 65 6E 2C 6F 70 6E b,alfa,exten,opn
0167B0: 66 63 2C 42 44 4F 53 3B 0D 0A 46 52 4F 4D 09 53 fc,BDOS;..FROM.S
0167C0: 74 72 69 6E 67 73 20 49 4D 50 4F 52 54 20 4C 65 trings IMPORT Le
0167D0: 6E 67 74 68 3B 0D 0A 46 52 4F 4D 09 53 74 6F 72 ngth;..FROM.Stor
0167E0: 61 67 65 20 49 4D 50 4F 52 54 20 41 4C 4C 4F 43 age IMPORT ALLOC
0167F0: 41 54 45 3B 0D 0A 54 59 50 45 0D 0A 09 49 6E 64 ATE;..TYPE...Ind
016800: 6D 43 68 61 72 73 5B 69 5D 3B 0D 0A 09 09 09 09 mChars[i];......
016810: 49 4E 43 28 72 65 70 6C 79 29 3B 0D 0A 09 09 09 INC(reply);.....
016820: 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 28 2A .END;.....END;(*
016830: 57 49 54 48 20 70 5E 2A 29 0D 0A 09 09 45 4E 44 WITH p^*)....END
016840: 20 28 2A 49 46 20 3C 3E 4E 49 4C 2A 29 0D 0A 09 (*IF <>NIL*)...
016850: 45 4E 44 20 53 74 6F 72 65 4F 6E 65 4D 61 63 72 END StoreOneMacr
016860: 6F 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4C 65 61 72 o;..BEGIN...Lear
016870: 6E 63 68 3A 3D 27 41 27 3B 0D 0A 09 57 48 49 4C nch:='A';...WHIL
016880: 45 20 28 43 6F 6D 6D 61 6E 64 73 5B 4C 65 61 72 E (Commands[Lear
016890: 6E 63 68 5D 3D 4E 49 4C 29 20 41 4E 44 20 28 4C nch]=NIL) AND (L
0168A0: 65 61 72 6E 63 68 3C 3D 27 5A 27 29 20 44 4F 20 earnch<='Z') DO
0168B0: 0D 0A 09 09 4C 65 61 72 6E 63 68 3A 3D 43 48 52 ....Learnch:=CHR
0168C0: 28 4F 52 44 28 4C 65 61 72 6E 63 68 29 2B 31 29 (ORD(Learnch)+1)
0168D0: 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 4C ;....END;...IF L
0168E0: 65 61 72 6E 63 68 3E 27 5A 27 20 54 48 45 4E 20 earnch>'Z' THEN
0168F0: 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 43 72 RETURN END;...Cr
016900: 65 61 74 65 28 46 2C 27 4D 41 43 52 4F 53 2E 44 eate(F,'MACROS.D
016910: 41 54 20 27 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 AT ',reply);...I
016920: 46 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D F reply<>0 THEN.
016930: 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
016940: 20 63 6F 75 6C 64 20 6E 6F 74 20 73 61 76 65 20 could not save
016950: 6D 61 63 72 6F 73 20 66 69 6C 65 27 29 3B 0D 0A macros file');..
016960: 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 52 45 ..WriteLn;....RE
016970: 54 55 52 4E 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 TURN....END;...I
016980: 46 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 20 F reply<>0 THEN
016990: 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 72 65 RETURN END;...re
0169A0: 70 6C 79 3A 3D 30 3B 0D 0A 09 46 4F 52 20 4C 65 ply:=0;...FOR Le
0169B0: 61 72 6E 63 68 3A 3D 27 41 27 20 54 4F 20 27 5A arnch:='A' TO 'Z
0169C0: 27 20 44 4F 20 53 74 6F 72 65 4F 6E 65 4D 61 63 ' DO StoreOneMac
0169D0: 72 6F 28 43 6F 6D 6D 61 6E 64 73 5B 4C 65 61 72 ro(Commands[Lear
0169E0: 6E 63 68 5D 29 20 45 4E 44 3B 0D 0A 0D 0A 09 28 nch]) END;.....(
0169F0: 2A 4E 6F 77 20 6F 75 74 70 75 74 20 6B 65 79 20 *Now output key
016A00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
016A10: 13 00 01 00 02 09 52 E5 13 00 41 02 00 00 00 02 ......R...A.....
016A20: 13 00 46 02 00 00 00 02 13 00 42 02 00 00 00 02 ..F.......B.....
016A30: 13 00 47 02 00 00 00 02 13 00 43 02 00 00 00 02 ..G.......C.....
016A40: 13 00 48 02 00 00 00 02 13 00 44 02 00 00 00 02 ..H.......D.....
016A50: 13 00 49 02 00 00 00 02 13 00 45 02 00 00 00 02 ..I.......E.....
016A60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016A70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016A80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016A90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016AF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016B00: 65 78 52 65 63 6F 72 64 3D 52 45 43 4F 52 44 0D exRecord=RECORD.
016B10: 0A 09 09 53 74 61 74 75 73 3A 42 59 54 45 3B 0D ...Status:BYTE;.
016B20: 0A 09 09 42 61 73 65 4E 61 6D 65 3A 61 6C 66 61 ...BaseName:alfa
016B30: 3B 0D 0A 09 09 45 78 74 3A 65 78 74 65 6E 3B 0D ;....Ext:exten;.
016B40: 0A 09 09 53 74 61 72 74 53 65 63 74 6F 72 3A 43 ...StartSector:C
016B50: 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 4C 65 6E 67 ARDINAL;....Leng
016B60: 74 68 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 th:CARDINAL;....
016B70: 44 61 74 65 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A Date:CARDINAL;..
016B80: 09 09 54 69 6D 65 3A 43 41 52 44 49 4E 41 4C 3B ..Time:CARDINAL;
016B90: 0D 0A 09 09 53 63 72 75 6E 63 68 65 64 3A 42 4F ....Scrunched:BO
016BA0: 4F 4C 45 41 4E 3B 0D 0A 09 09 46 69 6C 6C 65 72 OLEAN;....Filler
016BB0: 20 3A 41 52 52 41 59 20 5B 31 2E 2E 31 31 5D 20 :ARRAY [1..11]
016BC0: 4F 46 20 42 59 54 45 3B 0D 0A 09 09 45 4E 44 3B OF BYTE;....END;
016BD0: 0D 0A 09 49 6E 64 65 78 3D 41 52 52 41 59 5B 31 ...Index=ARRAY[1
016BE0: 2E 2E 31 32 38 5D 20 4F 46 20 49 6E 64 65 78 52 ..128] OF IndexR
016BF0: 65 63 6F 72 64 3B 0D 0A 56 41 52 09 4C 69 62 3A ecord;..VAR.Lib:
016C00: 46 49 4C 45 3B 0D 0A 09 4C 69 62 4E 61 6D 65 3A FILE;...LibName:
016C10: 46 69 6C 65 4E 61 6D 65 3B 0D 0A 09 72 65 70 6C FileName;...repl
016C20: 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 44 69 72 y:INTEGER;...Dir
016C30: 65 63 74 6F 72 79 3A 49 6E 64 65 78 3B 0D 0A 09 ectory:Index;...
016C40: 53 6C 6F 74 73 3A 43 41 52 44 49 4E 41 4C 3B 0D Slots:CARDINAL;.
016C50: 0A 09 4E 65 78 74 53 65 63 74 6F 72 3A 43 41 52 ..NextSector:CAR
016C60: 44 49 4E 41 4C 3B 0D 0A 09 69 2C 6A 3A 43 41 52 DINAL;...i,j:CAR
016C70: 44 49 4E 41 4C 3B 0D 0A 09 43 6F 6D 6D 61 6E 64 DINAL;...Command
016C80: 43 48 3A 43 48 41 52 3B 0D 0A 09 46 4E 61 6D 65 CH:CHAR;...FName
016C90: 3A 46 69 6C 65 4E 61 6D 65 3B 0D 0A 50 52 4F 43 :FileName;..PROC
016CA0: 45 44 55 52 45 20 52 65 61 64 43 6F 6D 6D 61 6E EDURE ReadComman
016CB0: 64 3B 0D 0A 28 2A 09 72 65 61 64 20 61 6E 20 69 d;..(*.read an i
016CC0: 6E 70 75 74 20 63 6F 6D 6D 61 6E 64 2C 20 72 65 nput command, re
016CD0: 74 75 72 6E 20 63 6F 6D 6D 61 6E 64 20 6C 65 74 turn command let
016CE0: 74 65 72 20 69 6E 20 43 6F 6D 6D 61 6E 64 43 48 ter in CommandCH
016CF0: 0D 0A 09 72 65 74 75 72 6E 20 66 69 6C 65 20 6E ...return file n
016D00: 2C 4F 75 74 50 6F 73 3A 43 41 52 44 49 4E 41 4C ,OutPos:CARDINAL
016D10: 3B 0D 0A 09 63 68 3A 43 48 41 52 3B 0D 0A 09 45 ;...ch:CHAR;...E
016D20: 6F 66 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 50 52 4F of:BOOLEAN;..PRO
016D30: 43 45 44 55 52 45 20 45 6E 74 65 72 49 64 28 73 CEDURE EnterId(s
016D40: 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 29 3B :ARRAY OF CHAR);
016D50: 0D 0A 56 41 52 09 72 3A 50 4E 61 6D 65 3B 0D 0A ..VAR.r:PName;..
016D60: 09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .i,j:CARDINAL;..
016D70: 42 45 47 49 4E 0D 0A 09 6A 3A 3D 4C 65 6E 67 74 BEGIN...j:=Lengt
016D80: 68 28 73 29 3B 0D 0A 09 41 4C 4C 4F 43 41 54 45 h(s);...ALLOCATE
016D90: 28 72 2C 6A 2B 54 53 49 5A 45 28 43 41 52 44 49 (r,j+TSIZE(CARDI
016DA0: 4E 41 4C 29 2B 54 53 49 5A 45 28 50 4E 61 6D 65 NAL)+TSIZE(PName
016DB0: 29 2B 31 29 3B 0D 0A 09 0D 0A 09 72 5E 2E 43 6F )+1);......r^.Co
016DC0: 64 65 3A 3D 43 6F 64 65 3B 0D 0A 09 57 49 54 48 de:=Code;...WITH
016DD0: 20 72 5E 20 44 4F 0D 0A 09 09 4E 65 78 74 3A 3D r^ DO....Next:=
016DE0: 54 61 62 6C 65 3B 0D 0A 09 09 54 61 62 6C 65 3A Table;....Table:
016DF0: 3D 72 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 30 20 =r;....FOR i:=0
016E00: 54 4F 20 6A 2D 31 20 44 4F 20 54 65 78 74 5B 69 TO j-1 DO Text[i
016E10: 5D 3A 3D 73 5B 69 5D 20 45 4E 44 3B 0D 0A 09 09 ]:=s[i] END;....
016E20: 54 65 78 74 5B 6A 5D 3A 3D 30 78 3B 0D 0A 09 09 Text[j]:=0x;....
016E30: 45 4E 44 3B 0D 0A 09 45 4E 44 20 45 6E 74 65 72 END;...END Enter
016E40: 49 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 Id;..PROCEDURE E
016E50: 6E 74 65 72 47 49 64 28 4C 65 6E 3A 43 41 52 44 nterGId(Len:CARD
016E60: 49 4E 41 4C 3B 73 3A 41 52 52 41 59 20 4F 46 20 INAL;s:ARRAY OF
016E70: 43 48 41 52 29 3B 0D 0A 56 41 52 20 09 69 2C 6A CHAR);..VAR .i,j
016E80: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 69 64 3A :CARDINAL;...id:
016E90: 49 64 65 6E 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 Ident;..BEGIN...
016EA0: 69 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 28 69 i:=0;...WHILE (i
016EB0: 3C 48 49 47 48 28 73 29 29 20 44 4F 0D 0A 09 09 <HIGH(s)) DO....
016EC0: 46 4F 52 20 6A 3A 3D 69 20 54 4F 20 69 2B 4C 65 FOR j:=i TO i+Le
016ED0: 6E 2D 31 20 44 4F 0D 0A 09 09 09 69 64 5B 6A 2D n-1 DO.....id[j-
016EE0: 69 5D 3A 3D 73 5B 6A 5D 0D 0A 09 09 09 45 4E 44 i]:=s[j].....END
016EF0: 3B 0D 0A 09 09 69 64 5B 4C 65 6E 5D 3A 3D 30 78 ;....id[Len]:=0x
016F00: 61 6D 65 20 69 6E 20 46 4E 61 6D 65 2A 29 0D 0A ame in FName*)..
016F10: 56 41 52 09 54 65 78 74 3A 41 52 52 41 59 5B 31 VAR.Text:ARRAY[1
016F20: 2E 2E 32 30 5D 20 4F 46 20 43 48 41 52 3B 0D 0A ..20] OF CHAR;..
016F30: 09 69 2C 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .i,j:CARDINAL;..
016F40: 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 53 74 72 BEGIN...WriteStr
016F50: 69 6E 67 28 27 43 6F 6D 6D 61 6E 64 3A 27 29 3B ing('Command:');
016F60: 0D 0A 09 52 65 61 64 53 74 72 69 6E 67 28 54 65 ...ReadString(Te
016F70: 78 74 29 3B 0D 0A 09 43 6F 6D 6D 61 6E 64 43 48 xt);...CommandCH
016F80: 3A 3D 43 41 50 28 54 65 78 74 5B 31 5D 29 3B 0D :=CAP(Text[1]);.
016F90: 0A 09 69 3A 3D 32 3B 0D 0A 09 57 48 49 4C 45 20 ..i:=2;...WHILE
016FA0: 28 69 3C 3D 48 49 47 48 28 54 65 78 74 29 29 20 (i<=HIGH(Text))
016FB0: 41 4E 44 20 28 54 65 78 74 5B 69 5D 3D 27 20 27 AND (Text[i]=' '
016FC0: 29 20 44 4F 0D 0A 09 09 49 4E 43 28 69 29 20 0D ) DO....INC(i) .
016FD0: 0A 09 09 45 4E 44 3B 0D 0A 09 6A 3A 3D 30 3B 0D ...END;...j:=0;.
016FE0: 0A 09 57 48 49 4C 45 20 28 6A 3C 3D 48 49 47 48 ..WHILE (j<=HIGH
016FF0: 28 46 4E 61 6D 65 29 29 20 41 4E 44 20 28 69 3C (FName)) AND (i<
017000: 3D 48 49 47 48 28 54 65 78 74 29 29 20 41 4E 44 =HIGH(Text)) AND
017010: 20 28 54 65 78 74 5B 69 5D 3C 3E 30 63 29 20 44 (Text[i]<>0c) D
017020: 4F 0D 0A 09 09 46 4E 61 6D 65 5B 6A 5D 3A 3D 43 O....FName[j]:=C
017030: 41 50 28 54 65 78 74 5B 69 5D 29 3B 0D 0A 09 09 AP(Text[i]);....
017040: 49 4E 43 28 6A 29 3B 0D 0A 09 09 49 4E 43 28 69 INC(j);....INC(i
017050: 29 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 48 49 4C )....END;...WHIL
017060: 45 20 6A 3C 3D 48 49 47 48 28 46 4E 61 6D 65 29 E j<=HIGH(FName)
017070: 20 44 4F 0D 0A 09 09 46 4E 61 6D 65 5B 6A 5D 3A DO....FName[j]:
017080: 3D 27 20 27 3B 0D 0A 09 09 49 4E 43 28 6A 29 0D =' ';....INC(j).
017090: 0A 09 09 45 4E 44 0D 0A 09 45 4E 44 20 52 65 61 ...END...END Rea
0170A0: 64 43 6F 6D 6D 61 6E 64 3B 20 20 0D 0A 50 52 4F dCommand; ..PRO
0170B0: 43 45 44 55 52 45 20 41 64 64 45 6E 74 72 79 28 CEDURE AddEntry(
0170C0: 4E 61 6D 65 3A 66 63 62 3B 50 6F 73 69 74 69 6F Name:fcb;Positio
0170D0: 6E 2C 53 69 7A 65 2C 45 44 61 74 65 2C 45 54 69 n,Size,EDate,ETi
0170E0: 6D 65 3A 43 41 52 44 49 4E 41 4C 3B 53 63 3A 42 me:CARDINAL;Sc:B
0170F0: 4F 4F 4C 45 41 4E 29 3B 0D 0A 56 41 52 09 69 2C OOLEAN);..VAR.i,
017100: 3B 0D 0A 09 09 45 6E 74 65 72 49 64 28 69 64 29 ;....EnterId(id)
017110: 3B 0D 0A 09 09 49 4E 43 28 43 6F 64 65 29 3B 0D ;....INC(Code);.
017120: 0A 09 09 69 3A 3D 69 2B 4C 65 6E 3B 0D 0A 09 09 ...i:=i+Len;....
017130: 45 4E 44 3B 0D 0A 09 45 4E 44 20 45 6E 74 65 72 END;...END Enter
017140: 47 49 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 GId;..PROCEDURE
017150: 53 65 74 55 70 4E 61 6D 65 73 3B 0D 0A 56 41 52 SetUpNames;..VAR
017160: 09 73 3A 49 64 65 6E 74 3B 0D 0A 50 52 4F 43 45 .s:Ident;..PROCE
017170: 44 55 52 45 20 50 75 74 49 64 3B 0D 0A 42 45 47 DURE PutId;..BEG
017180: 49 4E 0D 0A 09 73 5B 69 5D 3A 3D 30 78 3B 0D 0A IN...s[i]:=0x;..
017190: 09 45 6E 74 65 72 49 64 28 73 29 3B 0D 0A 09 49 .EnterId(s);...I
0171A0: 4E 43 28 43 6F 64 65 29 3B 0D 0A 09 45 4E 44 20 NC(Code);...END
0171B0: 50 75 74 49 64 3B 0D 0A 42 45 47 49 4E 0D 0A 09 PutId;..BEGIN...
0171C0: 43 6F 64 65 3A 3D 31 32 38 3B 0D 0A 09 45 6E 74 Code:=128;...Ent
0171D0: 65 72 47 49 64 28 32 2C 27 42 59 44 4F 49 46 49 erGId(2,'BYDOIFI
0171E0: 4E 4F 46 4F 52 54 4F 27 29 3B 0D 0A 09 45 6E 74 NOFORTO');...Ent
0171F0: 65 72 47 49 64 28 33 2C 27 41 4E 44 44 49 56 45 erGId(3,'ANDDIVE
017200: 4E 44 46 4F 52 4D 4F 44 4E 4F 54 53 45 54 56 41 NDFORMODNOTSETVA
017210: 52 41 44 52 27 29 3B 0D 0A 09 45 6E 74 65 72 47 RADR');...EnterG
017220: 49 64 28 34 2C 27 43 41 53 45 45 4C 53 45 45 58 Id(4,'CASEELSEEX
017230: 49 54 46 52 4F 4D 4C 4F 4F 50 54 48 45 4E 54 59 ITFROMLOOPTHENTY
017240: 50 45 57 49 54 48 48 49 47 48 43 48 41 52 54 52 PEWITHHIGHCHARTR
017250: 55 45 27 29 3B 0D 0A 09 45 6E 74 65 72 47 49 64 UE');...EnterGId
017260: 28 35 2C 27 41 52 52 41 59 42 45 47 49 4E 43 4F (5,'ARRAYBEGINCO
017270: 4E 53 54 45 4C 53 49 46 55 4E 54 49 4C 57 48 49 NSTELSIFUNTILWHI
017280: 4C 45 46 41 4C 53 45 27 29 3B 0D 0A 09 45 6E 74 LEFALSE');...Ent
017290: 65 72 47 49 64 28 36 2C 27 45 58 50 4F 52 54 49 erGId(6,'EXPORTI
0172A0: 4D 50 4F 52 54 4D 4F 44 55 4C 45 52 45 43 4F 52 MPORTMODULERECOR
0172B0: 44 52 45 50 45 41 54 52 45 54 55 52 4E 27 29 3B DREPEATRETURN');
0172C0: 0D 0A 09 45 6E 74 65 72 47 49 64 28 37 2C 27 50 ...EnterGId(7,'P
0172D0: 4F 49 4E 54 45 52 57 72 69 74 65 4C 6E 49 4E 54 OINTERWriteLnINT
0172E0: 45 47 45 52 41 44 44 52 45 53 53 42 4F 4F 4C 45 EGERADDRESSBOOLE
0172F0: 41 4E 27 29 3B 0D 0A 09 45 6E 74 65 72 47 49 64 AN');...EnterGId
017300: 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 j:CARDINAL;..BEG
017310: 49 4E 0D 0A 09 69 3A 3D 32 3B 0D 0A 09 57 48 49 IN...i:=2;...WHI
017320: 4C 45 20 28 69 3C 3D 53 6C 6F 74 73 29 20 41 4E LE (i<=Slots) AN
017330: 44 20 28 44 69 72 65 63 74 6F 72 79 5B 69 5D 2E D (Directory[i].
017340: 53 74 61 74 75 73 3C 3E 30 66 66 68 29 20 44 4F Status<>0ffh) DO
017350: 20 49 4E 43 28 69 29 20 45 4E 44 3B 0D 0A 09 49 INC(i) END;...I
017360: 46 20 69 3E 53 6C 6F 74 73 20 54 48 45 4E 0D 0A F i>Slots THEN..
017370: 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
017380: 44 69 72 65 63 74 6F 72 79 20 66 75 6C 6C 20 2D Directory full -
017390: 20 72 65 64 6F 20 77 69 74 68 20 6D 6F 72 65 20 redo with more
0173A0: 73 6C 6F 74 73 27 29 3B 0D 0A 09 09 57 72 69 74 slots');....Writ
0173B0: 65 4C 6E 3B 0D 0A 09 09 48 41 4C 54 3B 0D 0A 09 eLn;....HALT;...
0173C0: 09 45 4E 44 3B 0D 0A 09 57 49 54 48 20 44 69 72 .END;...WITH Dir
0173D0: 65 63 74 6F 72 79 5B 69 5D 20 44 4F 0D 0A 09 09 ectory[i] DO....
0173E0: 53 74 61 74 75 73 3A 3D 30 3B 0D 0A 09 09 42 61 Status:=0;....Ba
0173F0: 73 65 4E 61 6D 65 3A 3D 4E 61 6D 65 2E 66 63 62 seName:=Name.fcb
017400: 66 6E 3B 0D 0A 09 09 45 78 74 3A 3D 4E 61 6D 65 fn;....Ext:=Name
017410: 2E 66 63 62 66 74 3B 0D 0A 09 09 53 74 61 72 74 .fcbft;....Start
017420: 53 65 63 74 6F 72 3A 3D 50 6F 73 69 74 69 6F 6E Sector:=Position
017430: 3B 0D 0A 09 09 4C 65 6E 67 74 68 3A 3D 53 69 7A ;....Length:=Siz
017440: 65 3B 0D 0A 09 09 44 61 74 65 3A 3D 45 44 61 74 e;....Date:=EDat
017450: 65 3B 0D 0A 09 09 54 69 6D 65 3A 3D 45 54 69 6D e;....Time:=ETim
017460: 65 3B 0D 0A 09 09 53 63 72 75 6E 63 68 65 64 3A e;....Scrunched:
017470: 3D 53 63 3B 0D 0A 09 09 46 4F 52 20 6A 3A 3D 31 =Sc;....FOR j:=1
017480: 20 54 4F 20 48 49 47 48 28 46 69 6C 6C 65 72 29 TO HIGH(Filler)
017490: 20 44 4F 20 46 69 6C 6C 65 72 5B 6A 5D 3A 3D 30 DO Filler[j]:=0
0174A0: 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 0D 0A 09 45 END;....END...E
0174B0: 4E 44 20 41 64 64 45 6E 74 72 79 3B 0D 0A 50 52 ND AddEntry;..PR
0174C0: 4F 43 45 44 55 52 45 20 46 69 6E 64 4E 61 6D 65 OCEDURE FindName
0174D0: 28 66 3A 66 63 62 29 3A 43 41 52 44 49 4E 41 4C (f:fcb):CARDINAL
0174E0: 3B 0D 0A 28 2A 09 66 69 6E 64 20 61 20 6E 61 6D ;..(*.find a nam
0174F0: 65 20 2D 20 72 65 74 75 72 6E 20 30 20 69 66 20 e - return 0 if
017500: 28 38 2C 27 43 41 52 44 49 4E 41 4C 54 65 72 6D (8,'CARDINALTerm
017510: 69 6E 61 6C 27 29 3B 0D 0A 09 45 6E 74 65 72 47 inal');...EnterG
017520: 49 64 28 39 2C 27 50 52 4F 43 45 44 55 52 45 51 Id(9,'PROCEDUREQ
017530: 55 41 4C 49 46 49 45 44 43 6F 70 79 72 69 67 68 UALIFIEDCopyrigh
017540: 74 27 29 3B 0D 0A 09 45 6E 74 65 72 49 64 28 27 t');...EnterId('
017550: 44 45 46 49 4E 49 54 49 4F 4E 27 29 3B 49 4E 43 DEFINITION');INC
017560: 28 43 6F 64 65 29 3B 0D 0A 09 45 6E 74 65 72 49 (Code);...EnterI
017570: 64 28 27 57 72 69 74 65 53 74 72 69 6E 67 27 29 d('WriteString')
017580: 3B 49 4E 43 28 43 6F 64 65 29 3B 0D 0A 09 28 2A ;INC(Code);...(*
017590: 09 45 6E 74 65 72 20 74 61 62 20 63 6F 64 65 73 .Enter tab codes
0175A0: 2A 29 0D 0A 09 46 4F 52 20 69 3A 3D 31 20 54 4F *)...FOR i:=1 TO
0175B0: 20 36 20 44 4F 0D 0A 09 09 73 5B 69 2D 31 5D 3A 6 DO....s[i-1]:
0175C0: 3D 30 39 78 3B 0D 0A 09 09 50 75 74 49 64 3B 0D =09x;....PutId;.
0175D0: 0A 09 09 45 4E 44 3B 0D 0A 09 28 2A 09 65 6E 74 ...END;...(*.ent
0175E0: 65 72 20 73 70 61 63 65 20 73 65 71 75 65 6E 63 er space sequenc
0175F0: 65 73 2A 29 0D 0A 09 73 5B 30 5D 3A 3D 27 20 27 es*)...s[0]:=' '
017600: 3B 0D 0A 09 46 4F 52 20 69 3A 3D 32 20 54 4F 20 ;...FOR i:=2 TO
017610: 36 20 44 4F 0D 0A 09 09 73 5B 69 2D 31 5D 3A 3D 6 DO....s[i-1]:=
017620: 27 20 27 3B 0D 0A 09 09 50 75 74 49 64 3B 0D 0A ' ';....PutId;..
017630: 09 09 45 4E 44 3B 0D 0A 09 28 2A 09 45 6E 74 65 ..END;...(*.Ente
017640: 72 20 43 52 2F 4C 46 20 63 6F 64 65 2A 29 0D 0A r CR/LF code*)..
017650: 09 73 5B 30 5D 3A 3D 30 64 78 3B 0D 0A 09 73 5B .s[0]:=0dx;...s[
017660: 31 5D 3A 3D 30 61 78 3B 0D 0A 09 69 3A 3D 32 3B 1]:=0ax;...i:=2;
017670: 0D 0A 09 50 75 74 49 64 3B 0D 0A 09 46 4F 52 20 ...PutId;...FOR
017680: 69 3A 3D 33 20 54 4F 20 36 20 44 4F 0D 0A 09 09 i:=3 TO 6 DO....
017690: 73 5B 69 2D 31 5D 3A 3D 30 39 78 3B 0D 0A 09 09 s[i-1]:=09x;....
0176A0: 50 75 74 49 64 3B 0D 0A 09 09 45 4E 44 3B 0D 0A PutId;....END;..
0176B0: 0D 0A 09 45 4E 44 20 53 65 74 55 70 4E 61 6D 65 ...END SetUpName
0176C0: 73 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 s;..PROCEDURE Ge
0176D0: 74 43 68 61 72 3B 0D 0A 56 41 52 09 72 65 70 6C tChar;..VAR.repl
0176E0: 79 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 y:INTEGER;..BEGI
0176F0: 4E 0D 0A 09 49 46 20 49 6E 50 6F 73 3E 48 49 47 N...IF InPos>HIG
017700: 6E 6F 74 20 66 6F 75 6E 64 20 2A 29 0D 0A 56 41 not found *)..VA
017710: 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 R.i:CARDINAL;..B
017720: 45 47 49 4E 0D 0A 09 69 3A 3D 32 3B 0D 0A 09 4C EGIN...i:=2;...L
017730: 4F 4F 50 0D 0A 09 09 49 46 20 69 3E 53 6C 6F 74 OOP....IF i>Slot
017740: 73 20 54 48 45 4E 20 52 45 54 55 52 4E 20 30 20 s THEN RETURN 0
017750: 45 4E 44 3B 0D 0A 09 09 57 49 54 48 20 44 69 72 END;....WITH Dir
017760: 65 63 74 6F 72 79 5B 69 5D 20 44 4F 0D 0A 09 09 ectory[i] DO....
017770: 09 49 46 20 28 53 74 61 74 75 73 3D 30 29 20 41 .IF (Status=0) A
017780: 4E 44 20 28 42 61 73 65 4E 61 6D 65 3D 66 2E 66 ND (BaseName=f.f
017790: 63 62 66 6E 29 20 41 4E 44 20 28 45 78 74 3D 66 cbfn) AND (Ext=f
0177A0: 2E 66 63 62 66 74 29 20 54 48 45 4E 0D 0A 09 09 .fcbft) THEN....
0177B0: 09 09 52 45 54 55 52 4E 20 69 0D 0A 09 09 09 09 ..RETURN i......
0177C0: 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 END;.....END;...
0177D0: 09 49 4E 43 28 69 29 3B 0D 0A 09 09 45 4E 44 3B .INC(i);....END;
0177E0: 0D 0A 09 45 4E 44 20 46 69 6E 64 4E 61 6D 65 3B ...END FindName;
0177F0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 54 72 61 6E ..PROCEDURE Tran
017800: 73 66 65 72 28 56 41 52 20 46 72 6F 6D 2C 54 6F sfer(VAR From,To
017810: 3A 46 49 4C 45 3B 4D 61 78 53 65 63 74 6F 72 73 :FILE;MaxSectors
017820: 3A 43 41 52 44 49 4E 41 4C 29 3A 43 41 52 44 49 :CARDINAL):CARDI
017830: 4E 41 4C 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 NAL;..VAR.i,j:CA
017840: 52 44 49 4E 41 4C 3B 0D 0A 09 72 65 70 6C 79 3A RDINAL;...reply:
017850: 49 4E 54 45 47 45 52 3B 0D 0A 09 42 75 66 66 65 INTEGER;...Buffe
017860: 72 3A 41 52 52 41 59 5B 30 2E 2E 31 30 32 33 5D r:ARRAY[0..1023]
017870: 20 4F 46 20 42 59 54 45 3B 0D 0A 42 45 47 49 4E OF BYTE;..BEGIN
017880: 0D 0A 09 6A 3A 3D 30 3B 0D 0A 09 4C 4F 4F 50 0D ...j:=0;...LOOP.
017890: 0A 09 09 49 46 20 4D 61 78 53 65 63 74 6F 72 73 ...IF MaxSectors
0178A0: 3E 38 20 54 48 45 4E 20 69 3A 3D 38 2A 31 32 38 >8 THEN i:=8*128
0178B0: 20 45 4C 53 45 20 69 3A 3D 4D 61 78 53 65 63 74 ELSE i:=MaxSect
0178C0: 6F 72 73 2A 31 32 38 20 45 4E 44 3B 0D 0A 09 09 ors*128 END;....
0178D0: 53 65 71 52 65 61 64 42 6C 6F 63 6B 28 46 72 6F SeqReadBlock(Fro
0178E0: 6D 2C 41 44 52 28 42 75 66 66 65 72 29 2C 69 2C m,ADR(Buffer),i,
0178F0: 72 65 70 6C 79 29 3B 0D 0A 09 09 49 46 20 72 65 reply);....IF re
017900: 48 28 42 75 66 66 65 72 49 6E 29 20 54 48 45 4E H(BufferIn) THEN
017910: 0D 0A 09 09 53 65 71 52 65 61 64 42 6C 6F 63 6B ....SeqReadBlock
017920: 28 46 72 6F 6D 2C 41 44 52 28 42 75 66 66 65 72 (From,ADR(Buffer
017930: 49 6E 29 2C 53 49 5A 45 28 42 75 66 66 65 72 49 In),SIZE(BufferI
017940: 6E 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 49 6E n),reply);....In
017950: 50 6F 73 3A 3D 30 3B 0D 0A 09 09 45 4E 44 3B 0D Pos:=0;....END;.
017960: 0A 09 63 68 3A 3D 42 75 66 66 65 72 49 6E 5B 49 ..ch:=BufferIn[I
017970: 6E 50 6F 73 5D 3B 0D 0A 28 2A 09 57 72 69 74 65 nPos];..(*.Write
017980: 43 61 72 64 28 49 6E 50 6F 73 2C 34 29 3B 57 72 Card(InPos,4);Wr
017990: 69 74 65 53 74 72 69 6E 67 28 27 20 27 29 3B 57 iteString(' ');W
0179A0: 72 69 74 65 48 65 78 28 4F 52 44 28 63 68 29 2C riteHex(ORD(ch),
0179B0: 34 29 3B 57 72 69 74 65 4C 6E 3B 2A 29 0D 0A 09 4);WriteLn;*)...
0179C0: 49 4E 43 28 49 6E 50 6F 73 29 3B 0D 0A 09 45 4E INC(InPos);...EN
0179D0: 44 20 47 65 74 43 68 61 72 3B 0D 0A 50 52 4F 43 D GetChar;..PROC
0179E0: 45 44 55 52 45 20 46 6C 75 73 68 4F 75 74 3B 0D EDURE FlushOut;.
0179F0: 0A 56 41 52 09 72 65 70 6C 79 3A 49 4E 54 45 47 .VAR.reply:INTEG
017A00: 45 52 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 4C ER;...i:CARDINAL
017A10: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4F 75 ;..BEGIN...IF Ou
017A20: 74 50 6F 73 3D 30 20 54 48 45 4E 20 52 45 54 55 tPos=0 THEN RETU
017A30: 52 4E 20 45 4E 44 3B 0D 0A 09 69 3A 3D 31 32 38 RN END;...i:=128
017A40: 2A 28 28 4F 75 74 50 6F 73 2B 31 32 37 29 20 44 *((OutPos+127) D
017A50: 49 56 20 31 32 38 29 3B 0D 0A 09 49 46 20 69 3E IV 128);...IF i>
017A60: 48 49 47 48 28 42 75 66 66 65 72 4F 75 74 29 20 HIGH(BufferOut)
017A70: 54 48 45 4E 20 69 3A 3D 48 49 47 48 28 42 75 66 THEN i:=HIGH(Buf
017A80: 66 65 72 4F 75 74 29 20 45 4E 44 3B 0D 0A 09 57 ferOut) END;...W
017A90: 48 49 4C 45 20 4F 75 74 50 6F 73 3C 69 20 44 4F HILE OutPos<i DO
017AA0: 0D 0A 09 09 42 75 66 66 65 72 4F 75 74 5B 4F 75 ....BufferOut[Ou
017AB0: 74 50 6F 73 5D 3A 3D 31 61 78 3B 0D 0A 09 09 49 tPos]:=1ax;....I
017AC0: 4E 43 28 4F 75 74 50 6F 73 29 3B 0D 0A 09 09 45 NC(OutPos);....E
017AD0: 4E 44 3B 0D 0A 09 49 4E 43 28 69 29 3B 0D 0A 09 ND;...INC(i);...
017AE0: 53 65 71 57 72 69 74 65 42 6C 6F 63 6B 28 54 6F SeqWriteBlock(To
017AF0: 2C 41 44 52 28 42 75 66 66 65 72 4F 75 74 29 2C ,ADR(BufferOut),
017B00: 70 6C 79 3D 30 20 54 48 45 4E 20 45 58 49 54 20 ply=0 THEN EXIT
017B10: 45 4E 44 3B 0D 0A 09 09 53 65 71 57 72 69 74 65 END;....SeqWrite
017B20: 42 6C 6F 63 6B 28 54 6F 2C 41 44 52 28 42 75 66 Block(To,ADR(Buf
017B30: 66 65 72 29 2C 72 65 70 6C 79 2C 72 65 70 6C 79 fer),reply,reply
017B40: 29 3B 0D 0A 09 09 6A 3A 3D 6A 2B 43 41 52 44 49 );....j:=j+CARDI
017B50: 4E 41 4C 28 72 65 70 6C 79 29 20 44 49 56 20 31 NAL(reply) DIV 1
017B60: 32 38 3B 0D 0A 09 09 49 46 20 4D 61 78 53 65 63 28;....IF MaxSec
017B70: 74 6F 72 73 3C 3D 38 20 54 48 45 4E 20 45 58 49 tors<=8 THEN EXI
017B80: 54 20 45 4E 44 3B 0D 0A 09 09 4D 61 78 53 65 63 T END;....MaxSec
017B90: 74 6F 72 73 3A 3D 4D 61 78 53 65 63 74 6F 72 73 tors:=MaxSectors
017BA0: 2D 38 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 -8;....END;...RE
017BB0: 54 55 52 4E 20 6A 3B 0D 0A 09 45 4E 44 20 54 72 TURN j;...END Tr
017BC0: 61 6E 73 66 65 72 3B 0D 0A 50 52 4F 43 45 44 55 ansfer;..PROCEDU
017BD0: 52 45 20 55 6E 53 63 72 75 6E 63 68 28 56 41 52 RE UnScrunch(VAR
017BE0: 20 46 72 6F 6D 2C 54 6F 3A 46 49 4C 45 29 3B 0D From,To:FILE);.
017BF0: 0A 54 59 50 45 09 50 4E 61 6D 65 3D 50 4F 49 4E .TYPE.PName=POIN
017C00: 54 45 52 20 54 4F 20 4E 61 6D 65 3B 0D 0A 09 49 TER TO Name;...I
017C10: 64 65 6E 74 3D 41 52 52 41 59 5B 30 2E 2E 36 30 dent=ARRAY[0..60
017C20: 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 4E 61 6D ] OF CHAR;...Nam
017C30: 65 3D 52 45 43 4F 52 44 0D 0A 09 09 43 6F 64 65 e=RECORD....Code
017C40: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 4E 65 :CARDINAL;....Ne
017C50: 78 74 3A 50 4E 61 6D 65 3B 0D 0A 09 09 54 65 78 xt:PName;....Tex
017C60: 74 3A 49 64 65 6E 74 3B 0D 0A 09 09 45 4E 44 3B t:Ident;....END;
017C70: 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 44 49 4E ..VAR.i,j:CARDIN
017C80: 41 4C 3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 AL;...reply:INTE
017C90: 47 45 52 3B 0D 0A 09 42 75 66 66 65 72 49 6E 2C GER;...BufferIn,
017CA0: 42 75 66 66 65 72 4F 75 74 3A 41 52 52 41 59 5B BufferOut:ARRAY[
017CB0: 30 2E 2E 31 30 32 33 5D 20 4F 46 20 42 59 54 45 0..1023] OF BYTE
017CC0: 3B 0D 0A 09 54 61 62 6C 65 3A 50 4E 61 6D 65 3B ;...Table:PName;
017CD0: 0D 0A 09 70 3A 50 4E 61 6D 65 3B 0D 0A 09 43 6F ...p:PName;...Co
017CE0: 64 65 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 49 de:CARDINAL;...I
017CF0: 64 3A 49 64 65 6E 74 3B 0D 0A 09 49 6E 50 6F 73 d:Ident;...InPos
017D00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
017D10: 14 00 01 00 02 09 52 E5 14 00 41 02 00 00 00 02 ......R...A.....
017D20: 14 00 46 02 00 00 00 02 14 00 42 02 00 00 00 02 ..F.......B.....
017D30: 14 00 47 02 00 00 00 02 14 00 43 02 00 00 00 02 ..G.......C.....
017D40: 14 00 48 02 00 00 00 02 14 00 44 02 00 00 00 02 ..H.......D.....
017D50: 14 00 49 02 00 00 00 02 14 00 45 02 00 00 00 02 ..I.......E.....
017D60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017D70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017D80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017D90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017DF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
017E00: 69 2C 72 65 70 6C 79 29 3B 0D 0A 09 4F 75 74 50 i,reply);...OutP
017E10: 6F 73 3A 3D 30 3B 0D 0A 09 45 4E 44 20 46 6C 75 os:=0;...END Flu
017E20: 73 68 4F 75 74 3B 0D 0A 50 52 4F 43 45 44 55 52 shOut;..PROCEDUR
017E30: 45 20 50 75 74 43 68 61 72 28 63 68 3A 43 48 41 E PutChar(ch:CHA
017E40: 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 R);..BEGIN...IF
017E50: 4F 75 74 50 6F 73 3E 48 49 47 48 28 42 75 66 66 OutPos>HIGH(Buff
017E60: 65 72 49 6E 29 20 54 48 45 4E 20 46 6C 75 73 68 erIn) THEN Flush
017E70: 4F 75 74 20 45 4E 44 3B 0D 0A 09 42 75 66 66 65 Out END;...Buffe
017E80: 72 4F 75 74 5B 4F 75 74 50 6F 73 5D 3A 3D 63 68 rOut[OutPos]:=ch
017E90: 3B 0D 0A 09 49 4E 43 28 4F 75 74 50 6F 73 29 3B ;...INC(OutPos);
017EA0: 0D 0A 09 45 4E 44 20 50 75 74 43 68 61 72 3B 0D ...END PutChar;.
017EB0: 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 65 74 ...PROCEDURE Get
017EC0: 43 6F 64 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43 Code;..BEGIN...C
017ED0: 6F 64 65 3A 3D 30 3B 0D 0A 09 49 46 20 63 68 3C ode:=0;...IF ch<
017EE0: 27 20 27 20 54 48 45 4E 0D 0A 09 09 43 6F 64 65 ' ' THEN....Code
017EF0: 3A 3D 4F 52 44 28 63 68 29 2A 32 35 36 3B 0D 0A :=ORD(ch)*256;..
017F00: 09 09 47 65 74 43 68 61 72 3B 0D 0A 09 09 45 4E ..GetChar;....EN
017F10: 44 3B 0D 0A 09 43 6F 64 65 3A 3D 43 6F 64 65 2B D;...Code:=Code+
017F20: 4F 52 44 28 63 68 29 3B 0D 0A 09 45 4E 44 20 47 ORD(ch);...END G
017F30: 65 74 43 6F 64 65 3B 0D 0A 50 52 4F 43 45 44 55 etCode;..PROCEDU
017F40: 52 45 20 50 75 74 49 64 3B 0D 0A 56 41 52 09 69 RE PutId;..VAR.i
017F50: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 70 3A 50 :CARDINAL;...p:P
017F60: 4E 61 6D 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 Name;..BEGIN...G
017F70: 65 74 43 6F 64 65 3B 0D 0A 09 70 3A 3D 54 61 62 etCode;...p:=Tab
017F80: 6C 65 3B 0D 0A 09 57 48 49 4C 45 20 28 70 3C 3E le;...WHILE (p<>
017F90: 4E 49 4C 29 20 41 4E 44 20 28 70 5E 2E 43 6F 64 NIL) AND (p^.Cod
017FA0: 65 3C 3E 43 6F 64 65 29 20 44 4F 20 0D 0A 09 09 e<>Code) DO ....
017FB0: 70 3A 3D 70 5E 2E 4E 65 78 74 20 0D 0A 09 09 45 p:=p^.Next ....E
017FC0: 4E 44 3B 0D 0A 09 49 46 20 70 3D 4E 49 4C 20 54 ND;...IF p=NIL T
017FD0: 48 45 4E 20 0D 0A 09 09 57 72 69 74 65 53 74 72 HEN ....WriteStr
017FE0: 69 6E 67 28 27 20 65 72 72 6F 72 20 69 6E 20 50 ing(' error in P
017FF0: 75 74 49 64 27 29 3B 0D 0A 09 09 57 72 69 74 65 utId');....Write
018000: 72 65 63 74 6F 72 79 5B 69 5D 20 44 4F 0D 0A 09 rectory[i] DO...
018010: 09 09 53 74 61 74 75 73 3A 3D 30 66 66 68 3B 0D ..Status:=0ffh;.
018020: 0A 09 09 09 42 61 73 65 4E 61 6D 65 3A 3D 27 20 ....BaseName:='
018030: 20 20 20 20 20 20 20 27 3B 0D 0A 09 09 09 45 78 ';.....Ex
018040: 74 3A 3D 27 20 20 20 27 3B 0D 0A 09 09 09 45 4E t:=' ';.....EN
018050: 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 49 54 D;....END;...WIT
018060: 48 20 44 69 72 65 63 74 6F 72 79 5B 31 5D 20 44 H Directory[1] D
018070: 4F 0D 0A 09 09 53 74 61 74 75 73 3A 3D 30 3B 0D O....Status:=0;.
018080: 0A 09 09 4C 65 6E 67 74 68 3A 3D 53 6C 6F 74 73 ...Length:=Slots
018090: 20 44 49 56 20 34 3B 0D 0A 09 09 53 74 61 72 74 DIV 4;....Start
0180A0: 53 65 63 74 6F 72 3A 3D 30 3B 0D 0A 09 09 45 4E Sector:=0;....EN
0180B0: 44 3B 0D 0A 09 4E 65 78 74 53 65 63 74 6F 72 3A D;...NextSector:
0180C0: 3D 53 6C 6F 74 73 20 44 49 56 20 34 3B 0D 0A 09 =Slots DIV 4;...
0180D0: 45 4E 44 20 47 65 74 53 6C 6F 74 43 6F 75 6E 74 END GetSlotCount
0180E0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4F 70 65 ;..PROCEDURE Ope
0180F0: 6E 4C 69 62 72 61 72 79 3B 0D 0A 28 2A 09 6F 70 nLibrary;..(*.op
018100: 65 6E 20 74 68 65 20 6C 69 62 72 61 72 79 20 66 en the library f
018110: 69 6C 65 20 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 ile *)..BEGIN...
018120: 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 45 6E WriteString(' En
018130: 74 65 72 20 6E 61 6D 65 20 6F 66 20 6C 69 62 72 ter name of libr
018140: 61 72 79 20 66 69 6C 65 3A 27 29 3B 0D 0A 09 52 ary file:');...R
018150: 65 61 64 53 74 72 69 6E 67 28 4C 69 62 4E 61 6D eadString(LibNam
018160: 65 29 3B 0D 0A 09 4C 6F 6F 6B 75 70 28 4C 69 62 e);...Lookup(Lib
018170: 2C 4C 69 62 4E 61 6D 65 2C 72 65 70 6C 79 29 3B ,LibName,reply);
018180: 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54 ...IF reply<>0 T
018190: 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 72 69 HEN....WriteStri
0181A0: 6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F 74 20 66 ng(' Could not f
0181B0: 69 6E 64 20 74 68 61 74 20 66 69 6C 65 20 2D 20 ind that file -
0181C0: 63 72 65 61 74 65 20 69 74 20 3F 27 29 3B 0D 0A create it ?');..
0181D0: 09 09 49 46 20 59 65 73 28 29 20 54 48 45 4E 0D ..IF Yes() THEN.
0181E0: 0A 09 09 09 43 72 65 61 74 65 28 4C 69 62 2C 4C ....Create(Lib,L
0181F0: 69 62 4E 61 6D 65 2C 72 65 70 6C 79 29 3B 0D 0A ibName,reply);..
018200: 43 61 72 64 28 43 6F 64 65 2C 34 29 3B 0D 0A 09 Card(Code,4);...
018210: 09 57 72 69 74 65 53 74 72 69 6E 67 28 54 61 62 .WriteString(Tab
018220: 6C 65 5E 2E 54 65 78 74 29 3B 0D 0A 09 09 57 72 le^.Text);....Wr
018230: 69 74 65 4C 6E 3B 0D 0A 09 09 52 45 54 55 52 4E iteLn;....RETURN
018240: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 69 3A 3D 30 3B ....END;...i:=0;
018250: 0D 0A 09 57 49 54 48 20 70 5E 20 44 4F 0D 0A 09 ...WITH p^ DO...
018260: 09 57 48 49 4C 45 20 54 65 78 74 5B 69 5D 3C 3E .WHILE Text[i]<>
018270: 30 78 20 44 4F 0D 0A 09 09 09 50 75 74 43 68 61 0x DO.....PutCha
018280: 72 28 54 65 78 74 5B 69 5D 29 3B 0D 0A 09 09 09 r(Text[i]);.....
018290: 49 4E 43 28 69 29 3B 0D 0A 09 09 09 45 4E 44 3B INC(i);.....END;
0182A0: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 50 ....END;...END P
0182B0: 75 74 49 64 3B 0D 0A 50 52 4F 43 45 44 55 52 45 utId;..PROCEDURE
0182C0: 20 44 65 66 43 6F 64 65 3B 0D 0A 56 41 52 09 49 DefCode;..VAR.I
0182D0: 64 3A 49 64 65 6E 74 3B 0D 0A 09 69 3A 43 41 52 d:Ident;...i:CAR
0182E0: 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 DINAL;..BEGIN...
0182F0: 47 65 74 43 68 61 72 3B 0D 0A 09 49 46 20 63 68 GetChar;...IF ch
018300: 3D 30 78 20 54 48 45 4E 20 45 6F 66 3A 3D 54 52 =0x THEN Eof:=TR
018310: 55 45 3B 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A UE;RETURN END;..
018320: 09 69 3A 3D 30 3B 0D 0A 09 57 48 49 4C 45 20 63 .i:=0;...WHILE c
018330: 68 3C 3E 30 78 20 44 4F 0D 0A 09 09 49 64 5B 69 h<>0x DO....Id[i
018340: 5D 3A 3D 63 68 3B 0D 0A 09 09 50 75 74 43 68 61 ]:=ch;....PutCha
018350: 72 28 63 68 29 3B 0D 0A 09 09 47 65 74 43 68 61 r(ch);....GetCha
018360: 72 3B 0D 0A 09 09 49 4E 43 28 69 29 3B 0D 0A 09 r;....INC(i);...
018370: 09 45 4E 44 3B 0D 0A 09 49 64 5B 69 5D 3A 3D 30 .END;...Id[i]:=0
018380: 63 3B 0D 0A 09 47 65 74 43 68 61 72 3B 0D 0A 09 c;...GetChar;...
018390: 47 65 74 43 6F 64 65 3B 0D 0A 09 45 6E 74 65 72 GetCode;...Enter
0183A0: 49 64 28 49 64 29 3B 0D 0A 09 45 4E 44 20 44 65 Id(Id);...END De
0183B0: 66 43 6F 64 65 3B 0D 0A 09 09 0D 0A 42 45 47 49 fCode;......BEGI
0183C0: 4E 0D 0A 09 54 61 62 6C 65 3A 3D 4E 49 4C 3B 0D N...Table:=NIL;.
0183D0: 0A 09 53 65 74 55 70 4E 61 6D 65 73 3B 0D 0A 09 ..SetUpNames;...
0183E0: 6A 3A 3D 30 3B 0D 0A 09 49 6E 50 6F 73 3A 3D 48 j:=0;...InPos:=H
0183F0: 49 47 48 28 42 75 66 66 65 72 49 6E 29 2B 31 3B IGH(BufferIn)+1;
018400: 09 09 09 49 46 20 72 65 70 6C 79 3C 3E 30 20 54 ...IF reply<>0 T
018410: 48 45 4E 0D 0A 09 09 09 09 57 72 69 74 65 53 74 HEN......WriteSt
018420: 72 69 6E 67 28 27 20 63 6F 75 6C 64 20 6E 6F 74 ring(' could not
018430: 20 63 72 65 61 74 65 20 69 74 20 65 69 74 68 65 create it eithe
018440: 72 27 29 3B 0D 0A 09 09 09 09 57 72 69 74 65 4C r');......WriteL
018450: 6E 3B 0D 0A 09 09 09 09 48 41 4C 54 0D 0A 09 09 n;......HALT....
018460: 09 09 45 4E 44 3B 0D 0A 09 09 09 47 65 74 53 6C ..END;.....GetSl
018470: 6F 74 43 6F 75 6E 74 3B 0D 0A 09 09 45 4C 53 45 otCount;....ELSE
018480: 0D 0A 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 .....WriteString
018490: 28 27 20 72 75 6E 20 63 61 6E 63 65 6C 6C 65 64 (' run cancelled
0184A0: 27 29 3B 0D 0A 09 09 09 57 72 69 74 65 4C 6E 3B ');.....WriteLn;
0184B0: 0D 0A 09 09 09 48 41 4C 54 3B 0D 0A 09 09 09 45 .....HALT;.....E
0184C0: 4E 44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 52 65 ND;...ELSE....Re
0184D0: 61 64 42 6C 6F 63 6B 28 4C 69 62 2C 41 44 52 28 adBlock(Lib,ADR(
0184E0: 44 69 72 65 63 74 6F 72 79 29 2C 30 2C 53 49 5A Directory),0,SIZ
0184F0: 45 28 44 69 72 65 63 74 6F 72 79 29 2C 72 65 70 E(Directory),rep
018500: 6C 79 29 3B 0D 0A 09 09 53 6C 6F 74 73 3A 3D 34 ly);....Slots:=4
018510: 2A 44 69 72 65 63 74 6F 72 79 5B 31 5D 2E 4C 65 *Directory[1].Le
018520: 6E 67 74 68 3B 0D 0A 09 09 57 72 69 74 65 43 61 ngth;....WriteCa
018530: 72 64 28 53 6C 6F 74 73 2C 34 29 3B 57 72 69 74 rd(Slots,4);Writ
018540: 65 53 74 72 69 6E 67 28 27 20 73 6C 6F 74 73 20 eString(' slots
018550: 66 6F 75 6E 64 27 29 3B 57 72 69 74 65 4C 6E 3B found');WriteLn;
018560: 0D 0A 09 09 4E 65 78 74 53 65 63 74 6F 72 3A 3D ....NextSector:=
018570: 30 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 31 20 54 0;....FOR i:=1 T
018580: 4F 20 53 6C 6F 74 73 20 44 4F 0D 0A 09 09 09 57 O Slots DO.....W
018590: 49 54 48 20 44 69 72 65 63 74 6F 72 79 5B 69 5D ITH Directory[i]
0185A0: 20 44 4F 0D 0A 09 09 09 09 49 46 20 53 74 61 74 DO......IF Stat
0185B0: 75 73 3C 3E 30 66 66 68 20 54 48 45 4E 0D 0A 09 us<>0ffh THEN...
0185C0: 09 09 09 09 6A 3A 3D 4C 65 6E 67 74 68 2B 53 74 ....j:=Length+St
0185D0: 61 72 74 53 65 63 74 6F 72 3B 0D 0A 09 09 09 09 artSector;......
0185E0: 09 49 46 20 6A 3E 4E 65 78 74 53 65 63 74 6F 72 .IF j>NextSector
0185F0: 20 54 48 45 4E 20 4E 65 78 74 53 65 63 74 6F 72 THEN NextSector
018600: 0D 0A 09 4F 75 74 50 6F 73 3A 3D 30 3B 0D 0A 09 ...OutPos:=0;...
018610: 47 65 74 43 68 61 72 3B 0D 0A 09 45 6F 66 3A 3D GetChar;...Eof:=
018620: 46 41 4C 53 45 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 FALSE;...LOOP...
018630: 09 49 46 20 63 68 3D 30 78 20 54 48 45 4E 20 44 .IF ch=0x THEN D
018640: 65 66 43 6F 64 65 20 0D 0A 09 09 45 4C 53 49 46 efCode ....ELSIF
018650: 20 28 63 68 3E 30 37 66 78 29 20 4F 52 20 28 63 (ch>07fx) OR (c
018660: 68 3C 27 20 27 29 20 54 48 45 4E 20 50 75 74 49 h<' ') THEN PutI
018670: 64 0D 0A 09 09 45 4C 53 45 20 50 75 74 43 68 61 d....ELSE PutCha
018680: 72 28 63 68 29 20 45 4E 44 3B 0D 0A 09 09 47 65 r(ch) END;....Ge
018690: 74 43 68 61 72 3B 0D 0A 09 09 49 46 20 45 6F 66 tChar;....IF Eof
0186A0: 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D THEN EXIT END;.
0186B0: 0A 09 09 45 4E 44 3B 0D 0A 09 46 6C 75 73 68 4F ...END;...FlushO
0186C0: 75 74 3B 0D 0A 09 45 4E 44 20 55 6E 53 63 72 75 ut;...END UnScru
0186D0: 6E 63 68 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 nch;..PROCEDURE
0186E0: 44 6F 41 64 64 69 74 69 6F 6E 28 56 41 52 20 66 DoAddition(VAR f
0186F0: 3A 46 49 4C 45 3B 53 63 3A 42 4F 4F 4C 45 41 4E :FILE;Sc:BOOLEAN
018700: 29 3B 0D 0A 56 41 52 09 69 2C 6A 3A 43 41 52 44 );..VAR.i,j:CARD
018710: 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 69 INAL;..BEGIN...i
018720: 3A 3D 46 69 6E 64 4E 61 6D 65 28 66 2E 66 29 3B :=FindName(f.f);
018730: 0D 0A 09 49 46 20 69 3C 3E 30 20 54 48 45 4E 20 ...IF i<>0 THEN
018740: 44 69 72 65 63 74 6F 72 79 5B 69 5D 2E 53 74 61 Directory[i].Sta
018750: 74 75 73 3A 3D 30 66 66 68 20 45 4E 44 3B 0D 0A tus:=0ffh END;..
018760: 09 53 65 74 42 6C 6F 63 6B 28 4C 69 62 2C 4E 65 .SetBlock(Lib,Ne
018770: 78 74 53 65 63 74 6F 72 29 3B 0D 0A 09 6A 3A 3D xtSector);...j:=
018780: 4E 65 78 74 53 65 63 74 6F 72 3B 0D 0A 09 4E 65 NextSector;...Ne
018790: 78 74 53 65 63 74 6F 72 3A 3D 4E 65 78 74 53 65 xtSector:=NextSe
0187A0: 63 74 6F 72 2B 54 72 61 6E 73 66 65 72 28 66 2C ctor+Transfer(f,
0187B0: 4C 69 62 2C 36 35 35 33 35 29 3B 0D 0A 09 43 6C Lib,65535);...Cl
0187C0: 6F 73 65 28 66 29 3B 20 0D 0A 09 41 64 64 45 6E ose(f); ...AddEn
0187D0: 74 72 79 28 66 2E 66 2C 6A 2C 4E 65 78 74 53 65 try(f.f,j,NextSe
0187E0: 63 74 6F 72 2D 6A 2C 30 2C 30 2C 53 63 29 3B 0D ctor-j,0,0,Sc);.
0187F0: 0A 09 45 4E 44 20 44 6F 41 64 64 69 74 69 6F 6E ..END DoAddition
018800: 3A 3D 6A 20 45 4E 44 3B 0D 0A 09 09 09 09 09 45 :=j END;.......E
018810: 4E 44 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 ND;......END;...
018820: 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A ..END;....END;..
018830: 09 45 4E 44 20 4F 70 65 6E 4C 69 62 72 61 72 79 .END OpenLibrary
018840: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 6F ;..PROCEDURE Clo
018850: 73 65 4C 69 62 72 61 72 79 3B 0D 0A 42 45 47 49 seLibrary;..BEGI
018860: 4E 0D 0A 09 57 72 69 74 65 42 6C 6F 63 6B 28 4C N...WriteBlock(L
018870: 69 62 2C 41 44 52 28 44 69 72 65 63 74 6F 72 79 ib,ADR(Directory
018880: 29 2C 30 2C 31 32 38 2A 28 53 6C 6F 74 73 20 44 ),0,128*(Slots D
018890: 49 56 20 34 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 IV 4),reply);...
0188A0: 43 6C 6F 73 65 28 4C 69 62 29 3B 0D 0A 09 45 4E Close(Lib);...EN
0188B0: 44 20 43 6C 6F 73 65 4C 69 62 72 61 72 79 3B 0D D CloseLibrary;.
0188C0: 0A 50 52 4F 43 45 44 55 52 45 20 44 65 6C 65 74 .PROCEDURE Delet
0188D0: 65 46 69 6C 65 28 66 6E 3A 41 52 52 41 59 20 4F eFile(fn:ARRAY O
0188E0: 46 20 43 48 41 52 29 3B 0D 0A 56 41 52 09 66 3A F CHAR);..VAR.f:
0188F0: 66 63 62 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 fcb;...i:CARDINA
018900: 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43 6F 6E 76 L;..BEGIN...Conv
018910: 65 72 74 46 69 6C 65 4E 61 6D 65 28 66 2C 46 69 ertFileName(f,Fi
018920: 6C 65 4E 61 6D 65 28 66 6E 29 29 3B 0D 0A 09 69 leName(fn));...i
018930: 3A 3D 46 69 6E 64 4E 61 6D 65 28 66 29 3B 0D 0A :=FindName(f);..
018940: 09 49 46 20 69 3D 30 20 54 48 45 4E 20 0D 0A 09 .IF i=0 THEN ...
018950: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 43 .WriteString(' C
018960: 6F 75 6C 64 20 6E 6F 74 20 66 69 6E 64 20 3A 27 ould not find :'
018970: 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E );....WriteStrin
018980: 67 28 66 6E 29 3B 0D 0A 09 09 57 72 69 74 65 4C g(fn);....WriteL
018990: 6E 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 72 69 74 n...ELSE....Writ
0189A0: 65 53 74 72 69 6E 67 28 66 6E 29 3B 0D 0A 09 09 eString(fn);....
0189B0: 57 72 69 74 65 53 74 72 69 6E 67 28 66 6E 29 3B WriteString(fn);
0189C0: 0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 ....WriteLn;....
0189D0: 44 69 72 65 63 74 6F 72 79 5B 69 5D 2E 53 74 61 Directory[i].Sta
0189E0: 74 75 73 3A 3D 30 66 66 68 3B 0D 0A 09 09 45 4E tus:=0ffh;....EN
0189F0: 44 3B 0D 0A 09 45 4E 44 20 44 65 6C 65 74 65 46 D;...END DeleteF
018A00: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 41 64 64 ;..PROCEDURE Add
018A10: 46 69 6C 65 28 66 6E 3A 41 52 52 41 59 20 4F 46 File(fn:ARRAY OF
018A20: 20 43 48 41 52 3B 53 63 3A 42 4F 4F 4C 45 41 4E CHAR;Sc:BOOLEAN
018A30: 29 3B 0D 0A 28 2A 09 63 6F 70 79 20 61 20 66 69 );..(*.copy a fi
018A40: 6C 65 20 69 6E 74 6F 20 74 68 65 20 63 75 72 72 le into the curr
018A50: 65 6E 74 20 6C 69 62 72 61 72 79 2A 29 0D 0A 56 ent library*)..V
018A60: 41 52 09 66 3A 46 49 4C 45 3B 0D 0A 09 69 2C 6A AR.f:FILE;...i,j
018A70: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 42 75 66 :CARDINAL;...Buf
018A80: 66 65 72 3A 41 52 52 41 59 5B 30 2E 2E 31 30 32 fer:ARRAY[0..102
018A90: 33 5D 20 4F 46 20 42 59 54 45 3B 0D 0A 42 45 47 3] OF BYTE;..BEG
018AA0: 49 4E 0D 0A 09 4C 6F 6F 6B 75 70 28 66 2C 46 69 IN...Lookup(f,Fi
018AB0: 6C 65 4E 61 6D 65 28 66 6E 29 2C 72 65 70 6C 79 leName(fn),reply
018AC0: 29 3B 0D 0A 09 49 46 20 72 65 70 6C 79 3C 3E 30 );...IF reply<>0
018AD0: 20 54 48 45 4E 0D 0A 09 09 57 72 69 74 65 53 74 THEN....WriteSt
018AE0: 72 69 6E 67 28 27 46 69 6C 65 20 3A 27 29 3B 0D ring('File :');.
018AF0: 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 66 ...WriteString(f
018B00: 6E 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 n);....WriteStri
018B10: 6E 67 28 27 20 6E 6F 74 20 66 6F 75 6E 64 27 29 ng(' not found')
018B20: 3B 0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 ;....WriteLn;...
018B30: 09 52 45 54 55 52 4E 3B 0D 0A 09 09 45 4E 44 3B .RETURN;....END;
018B40: 0D 0A 09 44 6F 41 64 64 69 74 69 6F 6E 28 66 2C ...DoAddition(f,
018B50: 53 63 29 3B 0D 0A 09 45 4E 44 20 41 64 64 46 69 Sc);...END AddFi
018B60: 6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 59 le;..PROCEDURE Y
018B70: 65 73 28 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 56 es():BOOLEAN;..V
018B80: 41 52 09 73 3A 41 52 52 41 59 5B 31 2E 2E 33 5D AR.s:ARRAY[1..3]
018B90: 20 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E OF CHAR;..BEGIN
018BA0: 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 52 65 61 64 53 ...LOOP....ReadS
018BB0: 74 72 69 6E 67 28 73 29 3B 0D 0A 09 09 43 41 53 tring(s);....CAS
018BC0: 45 20 43 41 50 28 73 5B 31 5D 29 20 4F 46 0D 0A E CAP(s[1]) OF..
018BD0: 09 09 09 27 59 27 3A 52 45 54 55 52 4E 20 54 52 ...'Y':RETURN TR
018BE0: 55 45 7C 0D 0A 09 09 09 27 4E 27 3A 52 45 54 55 UE|.....'N':RETU
018BF0: 52 4E 20 46 41 4C 53 45 7C 0D 0A 09 09 09 45 4C RN FALSE|.....EL
018C00: 69 6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 ile;..PROCEDURE
018C10: 45 78 74 72 61 63 74 46 69 6C 65 28 66 6E 3A 41 ExtractFile(fn:A
018C20: 52 52 41 59 20 4F 46 20 43 48 41 52 29 3B 0D 0A RRAY OF CHAR);..
018C30: 56 41 52 09 66 3A 66 63 62 3B 0D 0A 09 69 3A 43 VAR.f:fcb;...i:C
018C40: 41 52 44 49 4E 41 4C 3B 0D 0A 09 66 6F 3A 46 49 ARDINAL;...fo:FI
018C50: 4C 45 3B 0D 0A 42 45 47 49 4E 0D 0A 09 43 6F 6E LE;..BEGIN...Con
018C60: 76 65 72 74 46 69 6C 65 4E 61 6D 65 28 66 2C 46 vertFileName(f,F
018C70: 69 6C 65 4E 61 6D 65 28 66 6E 29 29 3B 0D 0A 09 ileName(fn));...
018C80: 69 3A 3D 46 69 6E 64 4E 61 6D 65 28 66 29 3B 0D i:=FindName(f);.
018C90: 0A 09 49 46 20 69 3D 30 20 54 48 45 4E 20 0D 0A ..IF i=0 THEN ..
018CA0: 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
018CB0: 43 6F 75 6C 64 20 6E 6F 74 20 66 69 6E 64 20 3A Could not find :
018CC0: 27 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 ');....WriteStri
018CD0: 6E 67 28 66 6E 29 3B 0D 0A 09 09 57 72 69 74 65 ng(fn);....Write
018CE0: 4C 6E 0D 0A 09 45 4C 53 45 0D 0A 09 09 57 72 69 Ln...ELSE....Wri
018CF0: 74 65 53 74 72 69 6E 67 28 27 45 78 74 72 61 63 teString('Extrac
018D00: 74 69 6E 67 20 27 29 3B 0D 0A 09 09 57 72 69 74 ting ');....Writ
018D10: 65 53 74 72 69 6E 67 28 66 6E 29 3B 0D 0A 09 09 eString(fn);....
018D20: 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 43 72 65 61 WriteLn;....Crea
018D30: 74 65 28 66 6F 2C 46 69 6C 65 4E 61 6D 65 28 66 te(fo,FileName(f
018D40: 6E 29 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 49 46 n),reply);....IF
018D50: 20 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A reply<>0 THEN..
018D60: 09 09 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
018D70: 20 43 6F 75 6C 64 20 6E 6F 74 20 63 72 65 61 74 Could not creat
018D80: 65 20 27 29 3B 0D 0A 09 09 09 57 72 69 74 65 53 e ');.....WriteS
018D90: 74 72 69 6E 67 28 66 6E 29 3B 0D 0A 09 09 09 57 tring(fn);.....W
018DA0: 72 69 74 65 4C 6E 3B 0D 0A 09 09 09 52 45 54 55 riteLn;.....RETU
018DB0: 52 4E 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 57 RN.....END;....W
018DC0: 49 54 48 20 44 69 72 65 63 74 6F 72 79 5B 69 5D ITH Directory[i]
018DD0: 20 44 4F 0D 0A 09 09 09 53 65 74 42 6C 6F 63 6B DO.....SetBlock
018DE0: 28 4C 69 62 2C 53 74 61 72 74 53 65 63 74 6F 72 (Lib,StartSector
018DF0: 29 3B 0D 0A 09 09 09 49 46 20 53 63 72 75 6E 63 );.....IF Scrunc
018E00: 53 45 0D 0A 09 09 09 09 57 72 69 74 65 4C 6E 3B SE......WriteLn;
018E10: 0D 0A 09 09 09 09 57 72 69 74 65 53 74 72 69 6E ......WriteStrin
018E20: 67 28 27 20 50 6C 65 61 73 65 20 65 6E 74 65 72 g(' Please enter
018E30: 20 59 65 73 20 6F 72 20 4E 6F 3A 27 29 3B 0D 0A Yes or No:');..
018E40: 09 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B ....END;....END;
018E50: 0D 0A 09 45 4E 44 20 59 65 73 3B 0D 0A 50 52 4F ...END Yes;..PRO
018E60: 43 45 44 55 52 45 20 47 65 74 53 6C 6F 74 43 6F CEDURE GetSlotCo
018E70: 75 6E 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 72 unt;..BEGIN...Wr
018E80: 69 74 65 53 74 72 69 6E 67 28 27 20 48 6F 77 20 iteString(' How
018E90: 6D 61 6E 79 20 73 6C 6F 74 73 20 3F 27 29 3B 0D many slots ?');.
018EA0: 0A 09 52 65 61 64 43 61 72 64 28 53 6C 6F 74 73 ..ReadCard(Slots
018EB0: 29 3B 0D 0A 09 49 46 20 53 6C 6F 74 73 3E 48 49 );...IF Slots>HI
018EC0: 47 48 28 44 69 72 65 63 74 6F 72 79 29 20 54 48 GH(Directory) TH
018ED0: 45 4E 0D 0A 09 09 57 72 69 74 65 43 61 72 64 28 EN....WriteCard(
018EE0: 48 49 47 48 28 44 69 72 65 63 74 6F 72 79 29 2C HIGH(Directory),
018EF0: 34 29 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 4);....WriteStri
018F00: 6E 67 28 27 20 69 73 20 6D 61 78 69 6D 75 6D 20 ng(' is maximum
018F10: 73 6C 6F 74 73 20 61 6C 6C 6F 77 65 64 20 62 79 slots allowed by
018F20: 20 74 68 69 73 20 70 72 6F 67 72 61 6D 27 29 3B this program');
018F30: 0D 0A 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 ....WriteLn;....
018F40: 53 6C 6F 74 73 3A 3D 48 49 47 48 28 44 69 72 65 Slots:=HIGH(Dire
018F50: 63 74 6F 72 79 29 3B 0D 0A 09 09 45 4E 44 3B 0D ctory);....END;.
018F60: 0A 09 53 6C 6F 74 73 3A 3D 34 2A 28 28 53 6C 6F ..Slots:=4*((Slo
018F70: 74 73 2B 33 29 20 44 49 56 20 34 29 3B 0D 0A 09 ts+3) DIV 4);...
018F80: 49 46 20 53 6C 6F 74 73 3D 30 20 54 48 45 4E 20 IF Slots=0 THEN
018F90: 48 41 4C 54 20 45 4E 44 3B 0D 0A 09 57 72 69 74 HALT END;...Writ
018FA0: 65 43 61 72 64 28 53 6C 6F 74 73 2C 34 29 3B 0D eCard(Slots,4);.
018FB0: 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 ..WriteString('
018FC0: 53 6C 6F 74 73 20 61 6C 6C 6F 63 61 74 65 64 27 Slots allocated'
018FD0: 29 3B 0D 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 );...WriteLn;...
018FE0: 46 4F 52 20 69 3A 3D 31 20 54 4F 20 53 6C 6F 74 FOR i:=1 TO Slot
018FF0: 73 20 44 4F 20 0D 0A 09 09 57 49 54 48 20 44 69 s DO ....WITH Di
019000: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
019010: 15 00 01 00 02 09 52 E5 15 00 41 02 00 00 00 02 ......R...A.....
019020: 15 00 46 02 00 00 00 02 15 00 42 02 00 00 00 02 ..F.......B.....
019030: 15 00 47 02 00 00 00 02 15 00 43 02 00 00 00 02 ..G.......C.....
019040: 15 00 48 02 00 00 00 02 15 00 44 02 00 00 00 02 ..H.......D.....
019050: 15 00 49 02 00 00 00 02 15 00 45 02 00 00 00 02 ..I.......E.....
019060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
019070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
019080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
019090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
019100: 68 65 64 20 54 48 45 4E 20 55 6E 53 63 72 75 6E hed THEN UnScrun
019110: 63 68 28 4C 69 62 2C 66 6F 29 3B 0D 0A 09 09 09 ch(Lib,fo);.....
019120: 45 4C 53 45 20 69 3A 3D 54 72 61 6E 73 66 65 72 ELSE i:=Transfer
019130: 28 4C 69 62 2C 66 6F 2C 4C 65 6E 67 74 68 29 20 (Lib,fo,Length)
019140: 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 END;.....END;...
019150: 09 43 6C 6F 73 65 28 66 6F 29 3B 0D 0A 09 09 45 .Close(fo);....E
019160: 4E 44 3B 0D 0A 09 45 4E 44 20 45 78 74 72 61 63 ND;...END Extrac
019170: 74 46 69 6C 65 3B 0D 0A 50 52 4F 43 45 44 55 52 tFile;..PROCEDUR
019180: 45 20 44 69 73 70 6C 61 79 4E 61 6D 65 28 20 64 E DisplayName( d
019190: 3A 49 6E 64 65 78 52 65 63 6F 72 64 29 3B 0D 0A :IndexRecord);..
0191A0: 56 41 52 09 6A 3A 43 41 52 44 49 4E 41 4C 3B 0D VAR.j:CARDINAL;.
0191B0: 0A 42 45 47 49 4E 0D 0A 09 6A 3A 3D 31 3B 0D 0A .BEGIN...j:=1;..
0191C0: 09 57 49 54 48 20 64 20 44 4F 0D 0A 09 09 57 48 .WITH d DO....WH
0191D0: 49 4C 45 20 28 6A 3C 3D 38 29 20 41 4E 44 20 28 ILE (j<=8) AND (
0191E0: 42 61 73 65 4E 61 6D 65 5B 6A 5D 3C 3E 27 20 27 BaseName[j]<>' '
0191F0: 29 20 44 4F 0D 0A 09 09 09 57 72 69 74 65 28 42 ) DO.....Write(B
019200: 61 73 65 4E 61 6D 65 5B 6A 5D 29 3B 0D 0A 09 09 aseName[j]);....
019210: 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E 44 .INC(j);.....END
019220: 3B 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E 67 ;....WriteString
019230: 28 27 2E 27 29 3B 0D 0A 09 09 57 72 69 74 65 53 ('.');....WriteS
019240: 74 72 69 6E 67 28 45 78 74 29 3B 0D 0A 09 09 57 tring(Ext);....W
019250: 48 49 4C 45 20 6A 3C 3D 38 20 44 4F 20 0D 0A 09 HILE j<=8 DO ...
019260: 09 09 57 72 69 74 65 28 27 20 27 29 3B 0D 0A 09 ..Write(' ');...
019270: 09 09 49 4E 43 28 6A 29 3B 0D 0A 09 09 09 45 4E ..INC(j);.....EN
019280: 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 D;....END;...END
019290: 20 44 69 73 70 6C 61 79 4E 61 6D 65 3B 0D 0A 0D DisplayName;...
0192A0: 0A 50 52 4F 43 45 44 55 52 45 20 4C 69 73 74 4E .PROCEDURE ListN
0192B0: 61 6D 65 73 3B 0D 0A 56 41 52 09 69 2C 6A 2C 6B ames;..VAR.i,j,k
0192C0: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 :CARDINAL;..BEGI
0192D0: 4E 0D 0A 09 6B 3A 3D 30 3B 0D 0A 09 46 4F 52 20 N...k:=0;...FOR
0192E0: 69 3A 3D 32 20 54 4F 20 53 6C 6F 74 73 20 44 4F i:=2 TO Slots DO
0192F0: 0D 0A 09 09 57 49 54 48 20 44 69 72 65 63 74 6F ....WITH Directo
019300: 61 74 65 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A ate');WriteLn;..
019310: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 .WriteString('..
019320: 44 20 2D 20 44 65 6C 65 74 65 27 29 3B 57 72 69 D - Delete');Wri
019330: 74 65 4C 6E 3B 20 0D 0A 09 57 72 69 74 65 53 74 teLn; ...WriteSt
019340: 72 69 6E 67 28 27 09 09 45 20 2D 20 45 78 74 72 ring('..E - Extr
019350: 61 63 74 27 29 3B 57 72 69 74 65 4C 6E 3B 0D 0A act');WriteLn;..
019360: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 09 09 .WriteString('..
019370: 4C 20 2D 20 4C 69 73 74 20 66 69 6C 65 73 27 29 L - List files')
019380: 3B 57 72 69 74 65 4C 6E 3B 0D 0A 09 57 72 69 74 ;WriteLn;...Writ
019390: 65 53 74 72 69 6E 67 28 27 09 09 52 20 2D 20 52 eString('..R - R
0193A0: 65 6F 72 67 61 6E 69 7A 65 27 29 3B 57 72 69 74 eorganize');Writ
0193B0: 65 4C 6E 3B 0D 0A 09 57 72 69 74 65 53 74 72 69 eLn;...WriteStri
0193C0: 6E 67 28 27 09 09 55 20 2D 20 55 70 64 61 74 65 ng('..U - Update
0193D0: 20 41 6C 6C 27 29 3B 57 72 69 74 65 4C 6E 3B 0D All');WriteLn;.
0193E0: 0A 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 4C 4F 4F ..WriteLn;...LOO
0193F0: 50 0D 0A 09 09 52 65 61 64 43 6F 6D 6D 61 6E 64 P....ReadCommand
019400: 3B 0D 0A 09 09 43 41 53 45 20 43 6F 6D 6D 61 6E ;....CASE Comman
019410: 64 43 48 20 4F 46 20 0D 0A 09 09 09 27 46 27 3A dCH OF .....'F':
019420: 43 6C 6F 73 65 4C 69 62 72 61 72 79 3B 45 58 49 CloseLibrary;EXI
019430: 54 7C 0D 0A 09 09 09 27 41 27 3A 41 64 64 46 69 T|.....'A':AddFi
019440: 6C 65 28 46 4E 61 6D 65 2C 46 41 4C 53 45 29 7C le(FName,FALSE)|
019450: 0D 0A 09 09 09 27 53 27 3A 41 64 64 46 69 6C 65 .....'S':AddFile
019460: 28 46 4E 61 6D 65 2C 54 52 55 45 29 7C 0D 0A 09 (FName,TRUE)|...
019470: 09 09 27 44 27 3A 44 65 6C 65 74 65 46 69 6C 65 ..'D':DeleteFile
019480: 28 46 4E 61 6D 65 29 7C 0D 0A 09 09 09 27 45 27 (FName)|.....'E'
019490: 3A 45 78 74 72 61 63 74 46 69 6C 65 28 46 4E 61 :ExtractFile(FNa
0194A0: 6D 65 29 7C 0D 0A 09 09 09 27 4C 27 3A 4C 69 73 me)|.....'L':Lis
0194B0: 74 4E 61 6D 65 73 7C 0D 0A 09 09 09 27 55 27 3A tNames|.....'U':
0194C0: 55 70 64 61 74 65 41 6C 6C 7C 0D 0A 09 09 09 27 UpdateAll|.....'
0194D0: 52 27 3A 52 65 6F 72 67 3B 09 0D 0A 09 09 09 45 R':Reorg;......E
0194E0: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E ND;....END;...EN
0194F0: 44 20 4D 79 4C 55 2E 0D 0A 20 1A 0F FD 02 00 00 D MyLU... ......
019500: 72 79 5B 69 5D 20 44 4F 0D 0A 09 09 09 49 46 20 ry[i] DO.....IF
019510: 53 74 61 74 75 73 3C 3E 30 66 66 68 20 54 48 45 Status<>0ffh THE
019520: 4E 0D 0A 09 09 09 09 44 69 73 70 6C 61 79 4E 61 N......DisplayNa
019530: 6D 65 28 44 69 72 65 63 74 6F 72 79 5B 69 5D 29 me(Directory[i])
019540: 3B 0D 0A 09 09 09 09 57 72 69 74 65 43 61 72 64 ;......WriteCard
019550: 28 4C 65 6E 67 74 68 2A 31 32 38 2C 35 29 3B 0D (Length*128,5);.
019560: 0A 09 09 09 09 49 4E 43 28 6B 29 3B 0D 0A 09 09 .....INC(k);....
019570: 09 09 49 46 20 6B 3D 34 20 54 48 45 4E 20 57 72 ..IF k=4 THEN Wr
019580: 69 74 65 4C 6E 3B 6B 3A 3D 30 0D 0A 09 09 09 09 iteLn;k:=0......
019590: 45 4C 53 45 20 57 72 69 74 65 53 74 72 69 6E 67 ELSE WriteString
0195A0: 28 27 20 20 27 29 20 45 4E 44 3B 0D 0A 09 09 09 (' ') END;.....
0195B0: 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A .END;.....END;..
0195C0: 09 09 45 4E 44 3B 0D 0A 09 49 46 20 6B 3C 3E 30 ..END;...IF k<>0
0195D0: 20 54 48 45 4E 20 57 72 69 74 65 4C 6E 20 45 4E THEN WriteLn EN
0195E0: 44 3B 0D 0A 09 45 4E 44 20 4C 69 73 74 4E 61 6D D;...END ListNam
0195F0: 65 73 3B 20 0D 0A 50 52 4F 43 45 44 55 52 45 20 es; ..PROCEDURE
019600: 53 65 74 55 70 46 63 62 28 56 41 52 20 66 3A 46 SetUpFcb(VAR f:F
019610: 49 4C 45 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 20 ILE);..BEGIN...
019620: 20 20 20 66 2E 64 65 76 74 79 70 65 3A 3D 64 69 f.devtype:=di
019630: 73 63 3B 0D 0A 09 20 20 20 20 66 2E 65 6F 66 3A sc;... f.eof:
019640: 3D 46 41 4C 53 45 3B 0D 0A 09 20 20 20 20 57 49 =FALSE;... WI
019650: 54 48 20 66 2E 66 20 44 4F 0D 0A 09 09 66 63 62 TH f.f DO....fcb
019660: 65 78 3A 3D 30 3B 0D 0A 09 09 66 63 62 63 72 3A ex:=0;....fcbcr:
019670: 3D 30 3B 0D 0A 09 09 63 70 6D 72 65 73 3A 3D 30 =0;....cpmres:=0
019680: 3B 0D 0A 09 09 66 63 62 72 63 3A 3D 30 3B 0D 0A ;....fcbrc:=0;..
019690: 09 09 66 63 62 72 6E 2E 6C 6F 77 6F 72 64 65 72 ..fcbrn.loworder
0196A0: 3A 3D 30 3B 0D 0A 09 09 66 63 62 72 6E 2E 68 69 :=0;....fcbrn.hi
0196B0: 67 68 6F 72 64 65 72 3A 3D 30 3B 0D 0A 09 09 45 ghorder:=0;....E
0196C0: 4E 44 3B 0D 0A 09 45 4E 44 20 53 65 74 55 70 46 ND;...END SetUpF
0196D0: 63 62 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 cb;..PROCEDURE R
0196E0: 65 6F 72 67 3B 0D 0A 56 41 52 09 69 2C 6A 2C 6B eorg;..VAR.i,j,k
0196F0: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 4F 6C 64 :CARDINAL;...Old
019700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0197A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0197B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0197C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0197D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0197E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0197F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0198A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0198B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0198C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0198D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0198E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0198F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
019900: 44 69 72 3A 49 6E 64 65 78 3B 0D 0A 09 4F 6C 64 Dir:Index;...Old
019910: 53 6C 6F 74 73 3A 43 41 52 44 49 4E 41 4C 3B 0D Slots:CARDINAL;.
019920: 0A 09 4F 6C 64 4C 69 62 3A 46 49 4C 45 3B 0D 0A ..OldLib:FILE;..
019930: 42 45 47 49 4E 0D 0A 09 4F 6C 64 4C 69 62 3A 3D BEGIN...OldLib:=
019940: 4C 69 62 3B 0D 0A 09 43 6C 6F 73 65 28 4C 69 62 Lib;...Close(Lib
019950: 29 3B 0D 0A 09 4D 61 6B 65 42 41 4B 28 4C 69 62 );...MakeBAK(Lib
019960: 2C 72 65 70 6C 79 29 3B 0D 0A 09 4F 6C 64 44 69 ,reply);...OldDi
019970: 72 3A 3D 44 69 72 65 63 74 6F 72 79 3B 0D 0A 09 r:=Directory;...
019980: 4F 6C 64 53 6C 6F 74 73 3A 3D 53 6C 6F 74 73 3B OldSlots:=Slots;
019990: 0D 0A 09 53 65 74 55 70 46 63 62 28 4F 6C 64 4C ...SetUpFcb(OldL
0199A0: 69 62 29 3B 0D 0A 09 4F 6C 64 4C 69 62 2E 66 2E ib);...OldLib.f.
0199B0: 66 63 62 66 74 3A 3D 27 42 41 4B 27 3B 0D 0A 09 fcbft:='BAK';...
0199C0: 6B 3A 3D 42 44 4F 53 28 6F 70 6E 66 63 2C 41 44 k:=BDOS(opnfc,AD
0199D0: 52 28 4F 6C 64 4C 69 62 2E 66 29 29 3B 0D 0A 09 R(OldLib.f));...
0199E0: 43 72 65 61 74 65 28 4C 69 62 2C 4C 69 62 4E 61 Create(Lib,LibNa
0199F0: 6D 65 2C 72 65 70 6C 79 29 3B 0D 0A 09 49 46 20 me,reply);...IF
019A00: 72 65 70 6C 79 3C 3E 30 20 54 48 45 4E 0D 0A 09 reply<>0 THEN...
019A10: 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 20 43 .WriteString(' C
019A20: 6F 75 6C 64 20 6E 6F 74 20 63 72 65 61 74 65 20 ould not create
019A30: 6E 65 77 20 6C 69 62 72 61 72 79 27 29 3B 0D 0A new library');..
019A40: 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 52 45 ..WriteLn;....RE
019A50: 54 55 52 4E 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 TURN....END;...W
019A60: 72 69 74 65 53 74 72 69 6E 67 28 27 20 4F 6C 64 riteString(' Old
019A70: 20 6C 69 62 72 61 72 79 20 68 61 64 20 27 29 3B library had ');
019A80: 57 72 69 74 65 43 61 72 64 28 4F 6C 64 53 6C 6F WriteCard(OldSlo
019A90: 74 73 2C 34 29 3B 0D 0A 09 57 72 69 74 65 53 74 ts,4);...WriteSt
019AA0: 72 69 6E 67 28 27 20 73 6C 6F 74 73 27 29 3B 57 ring(' slots');W
019AB0: 72 69 74 65 4C 6E 3B 0D 0A 09 47 65 74 53 6C 6F riteLn;...GetSlo
019AC0: 74 43 6F 75 6E 74 3B 0D 0A 09 46 4F 52 20 69 3A tCount;...FOR i:
019AD0: 3D 32 20 54 4F 20 4F 6C 64 53 6C 6F 74 73 20 44 =2 TO OldSlots D
019AE0: 4F 0D 0A 09 09 57 49 54 48 20 4F 6C 64 44 69 72 O....WITH OldDir
019AF0: 5B 69 5D 20 44 4F 0D 0A 09 09 09 49 46 20 53 74 [i] DO.....IF St
019B00: 44 45 46 49 4E 49 54 49 4F 4E 20 4D 4F 44 55 4C DEFINITION MODUL
019B10: 45 20 50 61 74 74 65 72 6E 3B 0D 0A 0D 0A 28 2A E Pattern;....(*
019B20: 09 54 68 69 73 20 69 73 20 61 20 70 61 74 74 65 .This is a patte
019B30: 72 6E 20 6D 61 74 63 68 69 6E 67 20 6D 6F 64 75 rn matching modu
019B40: 6C 65 0D 0A 0D 0A 09 44 61 76 65 20 4D 6F 6F 72 le.....Dave Moor
019B50: 65 2C 20 46 54 4C 20 4D 6F 64 75 6C 61 2D 32 0D e, FTL Modula-2.
019B60: 0A 0D 0A 09 54 6F 20 6D 61 74 63 68 20 61 20 70 ....To match a p
019B70: 61 74 74 65 72 6E 20 77 69 74 68 20 74 68 69 73 attern with this
019B80: 20 6D 6F 64 75 6C 65 2C 20 79 6F 75 20 6D 75 73 module, you mus
019B90: 74 20 63 72 65 61 74 65 20 61 0D 0A 09 70 61 74 t create a...pat
019BA0: 74 65 72 6E 20 64 65 73 63 72 69 70 74 69 6F 6E tern description
019BB0: 20 77 69 74 68 20 74 68 65 20 22 43 72 65 61 74 with the "Creat
019BC0: 65 22 20 66 75 6E 63 74 69 6F 6E 73 2C 20 61 6E e" functions, an
019BD0: 64 20 74 68 65 6E 20 0D 0A 09 75 73 65 20 74 68 d then ...use th
019BE0: 65 20 4D 61 74 63 68 50 61 74 74 65 72 6E 20 66 e MatchPattern f
019BF0: 75 6E 63 74 69 6F 6E 2E 0D 0A 0D 0A 09 54 68 69 unction......Thi
019C00: 73 20 66 75 6E 63 74 69 6F 6E 20 72 65 74 75 72 s function retur
019C10: 6E 73 20 61 20 74 72 65 65 20 64 65 73 63 72 69 ns a tree descri
019C20: 62 69 6E 67 20 74 68 65 20 6D 61 74 63 68 2C 20 bing the match,
019C30: 69 66 20 73 75 63 63 65 73 73 66 75 6C 2C 0D 0A if successful,..
019C40: 09 6F 72 20 4E 49 4C 20 69 66 20 6E 6F 74 20 73 .or NIL if not s
019C50: 75 63 63 65 73 73 66 75 6C 2E 0D 0A 0D 0A 09 0D uccessful.......
019C60: 0A 2A 29 0D 0A 54 59 50 45 0D 0A 0D 0A 28 2A 09 .*)..TYPE....(*.
019C70: 54 68 65 20 70 72 6F 67 72 61 6D 20 6D 61 74 63 The program matc
019C80: 68 65 73 20 61 20 74 72 65 65 20 72 65 70 72 65 hes a tree repre
019C90: 73 65 6E 74 69 6E 67 20 61 20 70 61 74 74 65 72 senting a patter
019CA0: 6E 0D 0A 09 74 68 65 72 65 20 61 72 65 20 61 20 n...there are a
019CB0: 76 61 72 69 65 74 79 20 6F 66 20 6E 6F 64 65 20 variety of node
019CC0: 74 79 70 65 73 2A 29 0D 0A 09 0D 0A 09 4E 6F 64 types*)......Nod
019CD0: 65 54 79 70 65 3D 28 53 74 72 69 6E 67 2C 20 09 eType=(String, .
019CE0: 28 2A 20 41 20 73 74 72 69 6E 67 20 6F 66 20 63 (* A string of c
019CF0: 68 61 72 73 2A 29 0D 0A 09 09 20 20 41 6E 79 4F hars*).... AnyO
019D00: 61 74 75 73 3C 3E 30 66 66 68 20 54 48 45 4E 0D atus<>0ffh THEN.
019D10: 0A 09 09 09 09 53 65 74 42 6C 6F 63 6B 28 4F 6C .....SetBlock(Ol
019D20: 64 4C 69 62 2C 53 74 61 72 74 53 65 63 74 6F 72 dLib,StartSector
019D30: 29 3B 0D 0A 09 09 09 09 53 65 74 42 6C 6F 63 6B );......SetBlock
019D40: 28 4C 69 62 2C 4E 65 78 74 53 65 63 74 6F 72 29 (Lib,NextSector)
019D50: 3B 0D 0A 09 09 09 09 6B 3A 3D 4E 65 78 74 53 65 ;......k:=NextSe
019D60: 63 74 6F 72 3B 0D 0A 09 09 09 09 6A 3A 3D 54 72 ctor;......j:=Tr
019D70: 61 6E 73 66 65 72 28 4F 6C 64 4C 69 62 2C 4C 69 ansfer(OldLib,Li
019D80: 62 2C 4C 65 6E 67 74 68 29 3B 0D 0A 09 09 09 09 b,Length);......
019D90: 41 64 64 45 6E 74 72 79 28 66 63 62 28 4F 6C 64 AddEntry(fcb(Old
019DA0: 44 69 72 5B 69 5D 29 2C 6B 2C 6A 2C 44 61 74 65 Dir[i]),k,j,Date
019DB0: 2C 54 69 6D 65 2C 53 63 72 75 6E 63 68 65 64 29 ,Time,Scrunched)
019DC0: 3B 0D 0A 09 09 09 09 4E 65 78 74 53 65 63 74 6F ;......NextSecto
019DD0: 72 3A 3D 4E 65 78 74 53 65 63 74 6F 72 2B 6A 3B r:=NextSector+j;
019DE0: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 ......END;.....E
019DF0: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E ND;....END;...EN
019E00: 44 20 52 65 6F 72 67 3B 0D 0A 50 52 4F 43 45 44 D Reorg;..PROCED
019E10: 55 52 45 20 55 70 64 61 74 65 41 6C 6C 3B 0D 0A URE UpdateAll;..
019E20: 56 41 52 09 69 2C 6A 2C 6B 3A 43 41 52 44 49 4E VAR.i,j,k:CARDIN
019E30: 41 4C 3B 0D 0A 09 66 3A 46 49 4C 45 3B 0D 0A 42 AL;...f:FILE;..B
019E40: 45 47 49 4E 0D 0A 09 69 3A 3D 30 3B 49 46 20 46 EGIN...i:=0;IF F
019E50: 4E 61 6D 65 5B 30 5D 3D 27 20 27 20 54 48 45 4E Name[0]=' ' THEN
019E60: 20 46 4E 61 6D 65 5B 30 5D 3A 3D 27 40 27 20 45 FName[0]:='@' E
019E70: 4E 44 3B 0D 0A 09 57 48 49 4C 45 20 28 69 3C 3D ND;...WHILE (i<=
019E80: 48 49 47 48 28 46 4E 61 6D 65 29 29 41 4E 44 20 HIGH(FName))AND
019E90: 28 46 4E 61 6D 65 5B 69 5D 3C 3E 27 20 27 29 20 (FName[i]<>' ')
019EA0: 44 4F 0D 0A 09 09 57 72 69 74 65 53 74 72 69 6E DO....WriteStrin
019EB0: 67 28 27 20 53 65 61 72 63 68 69 6E 67 20 64 69 g(' Searching di
019EC0: 73 6B 20 27 29 3B 0D 0A 09 09 57 72 69 74 65 28 sk ');....Write(
019ED0: 46 4E 61 6D 65 5B 69 5D 29 3B 0D 0A 09 09 57 72 FName[i]);....Wr
019EE0: 69 74 65 4C 6E 3B 0D 0A 09 09 46 4F 52 20 6A 3A iteLn;....FOR j:
019EF0: 3D 32 20 54 4F 20 53 6C 6F 74 73 20 44 4F 0D 0A =2 TO Slots DO..
019F00: 66 2C 09 28 2A 20 41 20 63 68 61 72 61 63 74 65 f,.(* A characte
019F10: 72 20 66 72 6F 6D 20 61 20 73 65 74 2A 29 0D 0A r from a set*)..
019F20: 09 09 20 20 41 6C 74 65 72 6E 61 74 69 76 65 73 .. Alternatives
019F30: 2C 09 28 2A 20 4F 6E 65 20 6F 66 20 74 77 6F 20 ,.(* One of two
019F40: 61 6C 74 65 72 6E 61 74 69 76 65 73 2A 29 0D 0A alternatives*)..
019F50: 09 09 20 20 43 6F 6E 63 61 74 2C 09 28 2A 20 43 .. Concat,.(* C
019F60: 6F 6E 63 61 74 65 6E 61 74 65 20 74 77 6F 20 70 oncatenate two p
019F70: 61 74 74 65 72 6E 73 2A 29 0D 0A 09 09 20 20 52 atterns*).... R
019F80: 69 67 68 74 4C 69 6D 69 74 29 3B 09 28 2A 20 4D ightLimit);.(* M
019F90: 61 6B 65 20 73 75 72 65 20 61 74 20 72 69 67 68 ake sure at righ
019FA0: 74 20 62 6F 75 6E 64 61 72 79 2A 29 0D 0A 0D 0A t boundary*)....
019FB0: 09 43 68 61 72 53 65 74 3D 53 45 54 20 4F 46 20 .CharSet=SET OF
019FC0: 43 48 41 52 3B 0D 0A 0D 0A 09 50 4E 6F 64 65 3D CHAR;.....PNode=
019FD0: 50 4F 49 4E 54 45 52 20 54 4F 20 4E 6F 64 65 3B POINTER TO Node;
019FE0: 0D 0A 0D 0A 09 50 53 74 61 74 75 73 3D 50 4F 49 .....PStatus=POI
019FF0: 4E 54 45 52 20 54 4F 20 53 74 61 74 65 3B 0D 0A NTER TO State;..
01A000: 0D 0A 28 2A 09 49 66 20 61 20 6D 61 74 63 68 20 ..(*.If a match
01A010: 69 73 20 73 75 63 63 65 73 73 66 75 6C 2C 20 74 is successful, t
01A020: 68 65 20 6D 61 74 63 68 20 69 73 20 72 65 74 75 he match is retu
01A030: 72 6E 65 64 20 62 79 20 61 20 74 72 65 65 20 6F rned by a tree o
01A040: 66 0D 0A 09 73 74 61 74 65 73 2E 20 45 61 63 68 f...states. Each
01A050: 20 6E 6F 64 65 20 69 6E 20 74 68 65 20 74 72 65 node in the tre
01A060: 65 20 67 69 76 65 73 20 74 68 65 20 73 74 61 72 e gives the star
01A070: 74 20 70 6F 73 69 74 69 6F 6E 20 6F 66 20 74 68 t position of th
01A080: 65 0D 0A 09 6D 61 74 63 68 20 61 6E 64 20 74 68 e...match and th
01A090: 65 20 70 6F 73 69 74 69 6F 6E 20 6F 66 20 74 68 e position of th
01A0A0: 65 20 6E 65 78 74 20 63 68 61 72 61 63 74 65 72 e next character
01A0B0: 20 66 6F 6C 6C 6F 77 69 6E 67 20 74 68 65 20 6D following the m
01A0C0: 61 74 63 68 2E 0D 0A 0D 0A 09 49 74 20 61 6C 73 atch......It als
01A0D0: 6F 20 63 6F 6E 74 61 69 6E 73 20 61 20 70 6F 69 o contains a poi
01A0E0: 6E 74 65 72 20 74 6F 20 74 68 65 20 70 61 74 74 nter to the patt
01A0F0: 65 72 6E 20 6E 6F 64 65 20 77 68 69 63 68 20 77 ern node which w
01A100: 09 09 09 57 49 54 48 20 44 69 72 65 63 74 6F 72 ...WITH Director
01A110: 79 5B 6A 5D 20 44 4F 0D 0A 09 09 09 09 49 46 20 y[j] DO......IF
01A120: 53 74 61 74 75 73 3C 3E 30 66 66 68 20 54 48 45 Status<>0ffh THE
01A130: 4E 0D 0A 09 09 09 09 20 20 20 20 66 2E 66 3A 3D N...... f.f:=
01A140: 66 63 62 28 44 69 72 65 63 74 6F 72 79 5B 6A 5D fcb(Directory[j]
01A150: 29 3B 0D 0A 09 09 09 09 20 20 20 20 53 65 74 55 );...... SetU
01A160: 70 46 63 62 28 66 29 3B 0D 0A 09 09 09 09 20 20 pFcb(f);......
01A170: 20 20 66 2E 66 2E 66 63 62 64 6E 3A 3D 4F 52 44 f.f.fcbdn:=ORD
01A180: 28 46 4E 61 6D 65 5B 69 5D 29 2D 4F 52 44 28 27 (FName[i])-ORD('
01A190: 41 27 29 2B 31 3B 0D 0A 09 09 09 09 20 20 20 20 A')+1;......
01A1A0: 6B 3A 3D 42 44 4F 53 28 6F 70 6E 66 63 2C 41 44 k:=BDOS(opnfc,AD
01A1B0: 52 28 66 2E 66 29 29 3B 0D 0A 09 09 09 09 20 20 R(f.f));......
01A1C0: 20 20 49 46 20 6B 3C 3E 30 66 66 68 20 54 48 45 IF k<>0ffh THE
01A1D0: 4E 0D 0A 09 09 09 09 09 57 72 69 74 65 53 74 72 N.......WriteStr
01A1E0: 69 6E 67 28 27 20 55 70 64 61 74 69 6E 67 3A 27 ing(' Updating:'
01A1F0: 29 3B 0D 0A 09 09 09 09 09 44 69 73 70 6C 61 79 );.......Display
01A200: 4E 61 6D 65 28 49 6E 64 65 78 52 65 63 6F 72 64 Name(IndexRecord
01A210: 28 66 2E 66 29 29 3B 0D 0A 09 09 09 09 09 57 72 (f.f));.......Wr
01A220: 69 74 65 4C 6E 3B 09 0D 0A 09 09 09 09 09 44 6F iteLn;........Do
01A230: 41 64 64 69 74 69 6F 6E 28 66 2C 53 63 72 75 6E Addition(f,Scrun
01A240: 63 68 65 64 29 3B 0D 0A 09 09 09 09 09 45 4E 44 ched);.......END
01A250: 3B 0D 0A 09 09 09 09 20 20 20 20 45 4E 44 3B 0D ;...... END;.
01A260: 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4E .....END;.....EN
01A270: 44 3B 0D 0A 09 09 49 4E 43 28 69 29 3B 0D 0A 09 D;....INC(i);...
01A280: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 55 70 64 61 .END;...END Upda
01A290: 74 65 41 6C 6C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 teAll;..BEGIN...
01A2A0: 4F 70 65 6E 4C 69 62 72 61 72 79 3B 0D 0A 09 57 OpenLibrary;...W
01A2B0: 72 69 74 65 53 74 72 69 6E 67 28 27 20 43 6F 6D riteString(' Com
01A2C0: 6D 61 6E 64 73 20 61 72 65 3A 09 46 20 2D 20 46 mands are:.F - F
01A2D0: 69 6E 69 73 68 27 29 3B 57 72 69 74 65 4C 6E 3B inish');WriteLn;
01A2E0: 0D 0A 09 57 72 69 74 65 53 74 72 69 6E 67 28 27 ...WriteString('
01A2F0: 09 09 41 20 2D 20 41 64 64 20 6F 72 20 75 70 64 ..A - Add or upd
01A300: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
01A310: 16 00 01 00 02 09 52 E5 16 00 41 02 00 00 00 02 ......R...A.....
01A320: 16 00 46 02 00 00 00 02 16 00 42 02 00 00 00 02 ..F.......B.....
01A330: 16 00 47 02 00 00 00 02 16 00 43 02 00 00 00 02 ..G.......C.....
01A340: 16 00 48 02 00 00 00 02 16 00 44 02 00 00 00 02 ..H.......D.....
01A350: 16 00 49 02 00 00 00 02 16 00 45 02 00 00 00 02 ..I.......E.....
01A360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A3F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A400: 61 73 20 6D 61 74 63 68 65 64 2E 0D 0A 0D 0A 09 as matched......
01A410: 54 68 69 73 20 69 6E 66 6F 72 6D 61 74 69 6F 6E This information
01A420: 20 68 61 73 20 74 6F 20 62 65 20 6B 65 70 74 20 has to be kept
01A430: 73 65 70 61 72 61 74 65 6C 79 20 66 72 6F 6D 20 separately from
01A440: 74 68 65 20 70 61 74 74 65 72 6E 20 64 65 63 72 the pattern decr
01A450: 69 70 74 69 6F 6E 0D 0A 09 6E 6F 64 65 20 62 65 iption...node be
01A460: 63 61 75 73 65 20 61 20 67 69 76 65 6E 20 70 61 cause a given pa
01A470: 74 74 65 72 6E 20 6E 6F 64 65 20 63 61 6E 20 6D ttern node can m
01A480: 61 74 63 68 20 73 65 76 65 72 61 6C 20 74 69 6D atch several tim
01A490: 65 73 20 69 6E 20 61 20 67 69 76 65 6E 0D 0A 09 es in a given...
01A4A0: 70 61 74 74 65 72 6E 2C 20 65 69 74 68 65 72 20 pattern, either
01A4B0: 62 65 63 61 75 73 65 20 6F 66 20 72 65 63 75 72 because of recur
01A4C0: 73 69 6F 6E 2C 20 6F 72 20 62 65 63 61 75 73 65 sion, or because
01A4D0: 20 79 6F 75 20 68 61 76 65 20 63 68 6F 73 65 6E you have chosen
01A4E0: 20 74 6F 0D 0A 09 73 61 76 65 20 73 70 61 63 65 to...save space
01A4F0: 20 62 79 20 75 73 69 6E 67 20 61 20 73 69 6E 67 by using a sing
01A500: 6C 65 20 6E 6F 64 65 20 69 6E 20 73 65 76 65 72 le node in sever
01A510: 61 6C 20 64 69 66 66 65 72 65 6E 74 20 70 6C 61 al different pla
01A520: 63 65 73 20 69 6E 20 61 20 0D 0A 09 70 61 74 74 ces in a ...patt
01A530: 65 72 6E 2E 0D 0A 0D 0A 2A 29 09 0D 0A 0D 0A 09 ern.....*)......
01A540: 53 74 61 74 65 3D 52 45 43 4F 52 44 0D 0A 09 09 State=RECORD....
01A550: 53 74 61 74 75 73 3A 43 41 52 44 49 4E 41 4C 3B Status:CARDINAL;
01A560: 09 28 2A 09 53 74 61 74 75 73 20 69 73 20 61 20 .(*.Status is a
01A570: 73 74 61 74 75 73 20 66 69 65 6C 64 20 75 73 65 status field use
01A580: 64 0D 0A 09 09 09 09 09 09 66 6F 72 20 62 61 63 d........for bac
01A590: 6B 2D 74 72 61 63 6B 69 6E 67 20 62 79 20 74 68 k-tracking by th
01A5A0: 65 20 6E 6F 64 65 0D 0A 09 09 09 09 09 09 63 6C e node........cl
01A5B0: 61 73 73 65 73 20 41 6C 74 65 72 6E 61 74 69 76 asses Alternativ
01A5C0: 65 73 20 61 6E 64 20 0D 0A 09 09 09 09 09 09 41 es and ........A
01A5D0: 6E 79 4F 66 0D 0A 0D 0A 09 09 09 09 09 09 57 68 nyOf..........Wh
01A5E0: 65 6E 20 77 65 20 61 72 65 20 62 61 63 6B 74 72 en we are backtr
01A5F0: 61 63 6B 69 6E 67 20 74 6F 20 74 72 79 20 0D 0A acking to try ..
01A600: 74 74 65 72 6E 0D 0A 09 77 69 6C 6C 20 6F 6E 6C ttern...will onl
01A610: 79 20 6D 61 74 63 68 20 74 68 65 20 66 69 72 73 y match the firs
01A620: 74 20 22 61 22 20 61 6E 64 20 74 68 65 6E 20 72 t "a" and then r
01A630: 65 74 75 72 6E 2E 20 57 65 20 6D 75 73 74 20 61 eturn. We must a
01A640: 64 64 20 61 0D 0A 09 22 4C 69 6D 69 74 4E 6F 64 dd a..."LimitNod
01A650: 65 22 20 74 6F 20 65 6E 73 75 72 65 20 74 68 61 e" to ensure tha
01A660: 74 20 61 6C 6C 20 74 68 65 20 73 74 72 69 6E 67 t all the string
01A670: 20 69 73 20 6D 61 74 63 68 65 64 0D 0A 0D 0A 09 is matched.....
01A680: 45 31 3A 3D 43 72 65 61 74 65 43 6F 6E 63 61 74 E1:=CreateConcat
01A690: 4E 6F 64 65 28 45 2C 43 72 65 61 74 65 4C 69 6D Node(E,CreateLim
01A6A0: 69 74 4E 6F 64 65 28 29 29 3B 0D 0A 0D 0A 09 45 itNode());.....E
01A6B0: 31 20 77 69 6C 6C 20 65 6E 73 75 72 65 20 74 68 1 will ensure th
01A6C0: 61 74 20 61 6C 6C 20 6F 66 20 74 68 65 20 73 74 at all of the st
01A6D0: 72 69 6E 67 20 69 73 20 6D 61 74 63 68 65 64 0D ring is matched.
01A6E0: 0A 2A 29 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 .*)..PROCEDURE C
01A6F0: 72 65 61 74 65 53 74 72 69 6E 67 4E 6F 64 65 28 reateStringNode(
01A700: 73 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 29 s:ARRAY OF CHAR)
01A710: 3A 50 4E 6F 64 65 3B 0D 0A 0D 0A 28 2A 09 43 72 :PNode;....(*.Cr
01A720: 65 61 74 65 20 61 20 6E 6F 64 65 20 77 68 69 63 eate a node whic
01A730: 68 20 6D 61 74 63 68 65 73 20 61 20 66 69 78 65 h matches a fixe
01A740: 64 20 73 74 72 69 6E 67 0D 0A 0D 0A 09 73 20 69 d string.....s i
01A750: 73 20 74 68 65 20 73 74 72 69 6E 67 20 74 6F 20 s the string to
01A760: 6D 61 74 63 68 2A 29 0D 0A 0D 0A 50 52 4F 43 45 match*)....PROCE
01A770: 44 55 52 45 20 43 72 65 61 74 65 41 6C 74 4E 6F DURE CreateAltNo
01A780: 64 65 28 70 2C 71 3A 50 4E 6F 64 65 29 3A 50 4E de(p,q:PNode):PN
01A790: 6F 64 65 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 68 ode;....(*.Match
01A7A0: 20 65 69 74 68 65 72 20 70 20 6F 72 20 71 20 2A either p or q *
01A7B0: 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 )....PROCEDURE C
01A7C0: 72 65 61 74 65 41 6E 79 4F 66 4E 6F 64 65 28 73 reateAnyOfNode(s
01A7D0: 3A 43 68 61 72 53 65 74 3B 6D 69 6E 2C 6D 61 78 :CharSet;min,max
01A7E0: 3A 43 41 52 44 49 4E 41 4C 3B 4C 6F 6E 67 65 73 :CARDINAL;Longes
01A7F0: 74 3A 42 4F 4F 4C 45 41 4E 29 3A 50 4E 6F 64 65 t:BOOLEAN):PNode
01A800: 09 09 09 09 09 09 61 6E 20 61 6C 74 65 72 6E 61 ......an alterna
01A810: 74 69 76 65 20 6D 61 74 63 68 20 6F 72 20 61 20 tive match or a
01A820: 6C 6F 6E 67 65 72 0D 0A 09 09 09 09 09 09 6F 6E longer........on
01A830: 65 2C 20 74 68 69 73 20 76 61 6C 75 65 20 69 73 e, this value is
01A840: 20 69 6E 63 72 65 6D 65 6E 74 65 64 0D 0A 0D 0A incremented....
01A850: 09 09 09 09 09 09 57 68 65 6E 20 77 65 20 61 72 ......When we ar
01A860: 65 20 74 72 61 63 6B 69 6E 67 20 66 6F 72 77 61 e tracking forwa
01A870: 72 64 2C 20 0D 0A 09 09 09 09 09 09 69 74 20 69 rd, ........it i
01A880: 73 20 69 6E 69 74 69 61 6C 69 7A 65 64 2A 29 0D s initialized*).
01A890: 0A 0D 0A 09 09 4D 61 74 63 68 65 64 41 74 3A 43 .....MatchedAt:C
01A8A0: 41 52 44 49 4E 41 4C 3B 09 09 28 2A 20 50 6F 73 ARDINAL;..(* Pos
01A8B0: 69 74 69 6F 6E 20 61 74 20 77 68 69 63 68 20 74 ition at which t
01A8C0: 68 69 73 20 0D 0A 09 09 09 09 09 09 20 20 20 6E his ........ n
01A8D0: 6F 64 65 20 6D 61 74 63 68 65 64 2A 29 0D 0A 09 ode matched*)...
01A8E0: 09 50 61 74 74 65 72 6E 4E 6F 64 65 3A 50 4E 6F .PatternNode:PNo
01A8F0: 64 65 3B 09 09 28 2A 20 50 6F 69 6E 74 65 72 20 de;..(* Pointer
01A900: 74 6F 20 70 61 74 74 65 72 6E 20 6E 6F 64 65 20 to pattern node
01A910: 0D 0A 09 09 09 09 09 09 20 20 20 6D 61 74 63 68 ........ match
01A920: 65 64 20 62 79 20 74 68 69 73 20 73 74 61 74 75 ed by this statu
01A930: 73 20 6E 6F 64 65 2A 29 0D 0A 09 09 4D 61 74 63 s node*)....Matc
01A940: 68 65 64 54 6F 3A 43 41 52 44 49 4E 41 4C 3B 09 hedTo:CARDINAL;.
01A950: 09 28 2A 20 50 6F 73 69 74 69 6F 6E 20 6F 66 20 .(* Position of
01A960: 63 68 61 72 61 63 74 65 72 20 61 66 74 65 72 0D character after.
01A970: 0A 09 09 09 09 09 09 20 20 20 6C 61 73 74 20 63 ....... last c
01A980: 68 61 72 61 63 74 65 72 20 6D 61 74 63 68 65 64 haracter matched
01A990: 20 62 79 20 0D 0A 09 09 09 09 09 09 20 20 20 70 by ........ p
01A9A0: 61 74 74 65 72 6E 2A 29 0D 0A 09 09 4C 65 66 74 attern*)....Left
01A9B0: 2C 52 69 67 68 74 3A 50 53 74 61 74 75 73 3B 09 ,Right:PStatus;.
01A9C0: 09 28 2A 20 50 6F 69 6E 74 65 72 20 74 6F 20 73 .(* Pointer to s
01A9D0: 75 62 73 74 61 74 75 73 20 74 72 65 65 0D 0A 09 ubstatus tree...
01A9E0: 09 09 09 09 20 20 20 20 20 09 20 20 20 4C 65 66 .... . Lef
01A9F0: 74 20 69 73 20 75 73 65 64 20 66 6F 72 20 41 6C t is used for Al
01AA00: 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 68 20 61 6E ;....(*.Match an
01AA10: 79 20 63 68 61 72 61 63 74 65 72 20 69 6E 20 73 y character in s
01AA20: 65 74 20 22 73 22 0D 0A 0D 0A 09 6D 69 6E 20 61 et "s".....min a
01AA30: 6E 64 20 6D 61 78 20 61 72 65 20 74 68 65 20 6D nd max are the m
01AA40: 69 6E 69 6D 75 6D 20 61 6E 64 20 6D 61 78 69 6D inimum and maxim
01AA50: 75 6D 20 63 68 61 72 61 63 74 65 72 73 20 74 6F um characters to
01AA60: 20 6D 61 74 63 68 0D 0A 0D 0A 09 4E 6F 72 6D 61 match.....Norma
01AA70: 6C 6C 79 2C 20 74 68 65 20 66 69 72 73 74 20 61 lly, the first a
01AA80: 74 74 65 6D 70 74 20 6D 61 74 63 68 65 73 20 74 ttempt matches t
01AA90: 68 65 20 73 68 6F 72 74 65 73 74 20 61 63 63 65 he shortest acce
01AAA0: 70 74 61 62 6C 65 20 6E 75 6D 62 65 72 0D 0A 09 ptable number...
01AAB0: 6F 66 20 63 68 61 72 61 63 74 65 72 73 2E 20 49 of characters. I
01AAC0: 6E 20 74 68 69 73 20 63 61 73 65 2C 20 74 6F 20 n this case, to
01AAD0: 6D 61 74 63 68 20 6D 6F 72 65 20 63 68 61 72 61 match more chara
01AAE0: 63 74 65 72 73 2C 20 62 61 63 6B 74 72 61 63 6B cters, backtrack
01AAF0: 69 6E 67 0D 0A 09 6D 75 73 74 20 62 65 20 70 65 ing...must be pe
01AB00: 72 66 6F 72 6D 65 64 2E 0D 0A 0D 0A 09 49 66 20 rformed......If
01AB10: 79 6F 75 20 6B 6E 6F 77 20 74 68 61 74 20 6D 61 you know that ma
01AB20: 74 63 68 69 6E 67 20 74 68 65 20 6D 6F 73 74 20 tching the most
01AB30: 70 6F 73 73 69 62 6C 65 20 63 68 61 72 61 63 74 possible charact
01AB40: 65 72 73 20 77 69 6C 6C 20 6E 6F 74 20 63 61 75 ers will not cau
01AB50: 73 65 0D 0A 09 74 68 65 20 70 61 74 74 65 72 6E se...the pattern
01AB60: 20 74 6F 20 66 61 69 6C 20 28 66 6F 72 20 65 78 to fail (for ex
01AB70: 61 6D 70 6C 65 2C 20 77 68 65 6E 20 6D 61 74 63 ample, when matc
01AB80: 68 69 6E 67 20 69 64 65 6E 74 69 66 69 65 72 73 hing identifiers
01AB90: 20 69 6E 20 0D 0A 09 4D 6F 64 75 6C 61 2D 32 2C in ...Modula-2,
01ABA0: 20 69 6E 20 77 68 69 63 68 20 69 64 65 6E 74 69 in which identi
01ABB0: 66 69 65 72 73 20 63 61 6E 6E 6F 74 20 72 75 6E fiers cannot run
01ABC0: 20 74 6F 67 65 74 68 65 72 2C 20 74 68 65 6E 20 together, then
01ABD0: 73 70 65 63 69 66 79 69 6E 67 0D 0A 09 54 52 55 specifying...TRU
01ABE0: 45 20 66 6F 72 20 4C 6F 6E 67 65 73 74 20 77 69 E for Longest wi
01ABF0: 6C 6C 20 70 72 6F 64 75 63 65 20 61 20 66 61 73 ll produce a fas
01AC00: 74 65 72 6E 61 74 69 76 65 73 0D 0A 09 09 09 09 ternatives......
01AC10: 09 09 20 20 20 42 6F 74 68 20 4C 65 66 74 20 61 .. Both Left a
01AC20: 6E 64 20 52 69 67 68 74 20 61 72 65 20 75 73 65 nd Right are use
01AC30: 64 0D 0A 09 09 09 09 09 09 20 20 20 66 6F 72 20 d........ for
01AC40: 43 6F 6E 63 61 6E 74 65 6E 61 74 69 6F 6E 2A 29 Concantenation*)
01AC50: 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 4E 6F 64 ....END;.....Nod
01AC60: 65 3D 52 45 43 4F 52 44 0D 0A 09 09 43 41 53 45 e=RECORD....CASE
01AC70: 20 4E 54 79 70 65 3A 4E 6F 64 65 54 79 70 65 20 NType:NodeType
01AC80: 4F 46 0D 0A 09 09 09 53 74 72 69 6E 67 3A 0D 0A OF.....String:..
01AC90: 09 09 09 09 54 65 78 74 4C 65 6E 3A 43 41 52 44 ....TextLen:CARD
01ACA0: 49 4E 41 4C 3B 0D 0A 09 09 09 09 54 65 78 74 3A INAL;......Text:
01ACB0: 41 52 52 41 59 5B 30 2E 2E 30 5D 20 4F 46 20 43 ARRAY[0..0] OF C
01ACC0: 48 41 52 3B 0D 0A 09 09 09 09 7C 0D 0A 09 09 09 HAR;......|.....
01ACD0: 41 6E 79 4F 66 3A 0D 0A 09 09 09 09 4D 61 74 63 AnyOf:......Matc
01ACE0: 68 3A 43 68 61 72 53 65 74 3B 0D 0A 09 09 09 09 h:CharSet;......
01ACF0: 4D 69 6E 43 6F 75 6E 74 2C 4D 61 78 43 6F 75 6E MinCount,MaxCoun
01AD00: 74 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 09 09 t:CARDINAL;.....
01AD10: 09 46 61 73 74 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A .Fast:BOOLEAN;..
01AD20: 09 09 09 09 7C 0D 0A 09 09 09 41 6C 74 65 72 6E ....|.....Altern
01AD30: 61 74 69 76 65 73 2C 43 6F 6E 63 61 74 3A 0D 0A atives,Concat:..
01AD40: 09 09 09 09 46 69 72 73 74 2C 53 65 63 6F 6E 64 ....First,Second
01AD50: 3A 50 4E 6F 64 65 3B 0D 0A 09 09 09 09 28 2A 20 :PNode;......(*
01AD60: 69 66 20 65 69 74 68 65 72 20 69 73 20 6E 75 6C if either is nul
01AD70: 6C 2C 20 69 74 20 6D 61 74 63 68 65 73 20 74 68 l, it matches th
01AD80: 65 20 6E 75 6C 6C 20 73 74 72 69 6E 67 2A 29 0D e null string*).
01AD90: 0A 09 09 09 09 7C 0D 0A 09 09 09 45 4E 44 3B 0D .....|.....END;.
01ADA0: 0A 09 09 09 09 0D 0A 09 09 45 4E 44 3B 09 0D 0A .........END;...
01ADB0: 0D 0A 28 2A 09 54 68 65 20 66 6F 6C 6C 6F 77 69 ..(*.The followi
01ADC0: 6E 67 20 66 75 6E 63 74 69 6F 6E 73 20 72 65 74 ng functions ret
01ADD0: 75 72 6E 20 61 20 6E 6F 64 65 20 72 65 70 72 65 urn a node repre
01ADE0: 73 65 6E 74 69 6E 67 20 61 20 70 61 74 74 65 72 senting a patter
01ADF0: 6E 20 74 6F 20 62 65 0D 0A 09 6D 61 74 63 68 65 n to be...matche
01AE00: 74 65 72 20 70 61 74 74 65 72 6E 20 6D 61 74 63 ter pattern matc
01AE10: 68 0D 0A 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 h..*)....PROCEDU
01AE20: 52 45 20 43 72 65 61 74 65 43 6F 6E 63 61 74 4E RE CreateConcatN
01AE30: 6F 64 65 28 70 2C 71 3A 50 4E 6F 64 65 29 3A 50 ode(p,q:PNode):P
01AE40: 4E 6F 64 65 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 Node;....(*.Matc
01AE50: 68 20 70 61 74 74 65 72 6E 20 70 20 66 6F 6C 6C h pattern p foll
01AE60: 6F 77 65 64 20 62 79 20 70 61 74 74 65 72 6E 20 owed by pattern
01AE70: 71 20 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 q *)....PROCEDUR
01AE80: 45 20 43 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 E CreateLimitNod
01AE90: 65 28 29 3A 50 4E 6F 64 65 3B 0D 0A 0D 0A 28 2A e():PNode;....(*
01AEA0: 09 4D 61 74 63 68 20 6F 6E 6C 79 20 69 66 20 61 .Match only if a
01AEB0: 6C 6C 20 6F 66 20 74 68 65 20 73 74 72 69 6E 67 ll of the string
01AEC0: 20 68 61 73 20 62 65 65 6E 20 6D 61 74 63 68 65 has been matche
01AED0: 64 20 0D 0A 0D 0A 09 42 65 77 61 72 65 3A 0D 0A d .....Beware:..
01AEE0: 0D 0A 09 09 44 6F 20 6E 6F 74 20 75 73 65 20 61 ....Do not use a
01AEF0: 20 6C 69 6D 69 74 20 6E 6F 64 65 20 61 73 20 70 limit node as p
01AF00: 61 72 74 20 6F 66 20 61 20 70 61 74 74 65 72 6E art of a pattern
01AF10: 20 77 68 69 63 68 0D 0A 09 09 63 61 6E 20 62 65 which....can be
01AF20: 20 63 61 6C 6C 65 64 20 72 65 63 75 72 73 69 76 called recursiv
01AF30: 65 6C 79 20 28 73 75 63 68 20 61 73 20 22 45 22 ely (such as "E"
01AF40: 20 61 62 6F 76 65 29 2E 20 49 66 20 79 6F 75 20 above). If you
01AF50: 64 6F 2C 0D 0A 09 09 74 68 65 20 70 61 74 74 65 do,....the patte
01AF60: 72 6E 20 6D 61 74 63 68 65 72 20 77 69 6C 6C 20 rn matcher will
01AF70: 61 74 74 65 6D 70 74 20 74 6F 20 6D 61 74 63 68 attempt to match
01AF80: 20 74 68 65 20 65 6E 64 20 6F 66 20 74 68 65 0D the end of the.
01AF90: 0A 09 09 73 74 72 69 6E 67 20 6F 6E 20 65 76 65 ...string on eve
01AFA0: 72 79 20 72 65 63 75 72 73 69 6F 6E 2C 20 77 68 ry recursion, wh
01AFB0: 69 63 68 20 6D 61 79 20 70 72 65 76 65 6E 74 20 ich may prevent
01AFC0: 72 65 63 75 72 73 69 6F 6E 20 61 74 20 61 6C 6C recursion at all
01AFD0: 0D 0A 0D 0A 2A 29 0D 0A 0D 0A 50 52 4F 43 45 44 ....*)....PROCED
01AFE0: 55 52 45 20 4D 61 74 63 68 50 61 74 74 65 72 6E URE MatchPattern
01AFF0: 28 70 3A 50 4E 6F 64 65 3B 73 3A 41 52 52 41 59 (p:PNode;s:ARRAY
01B000: 64 2E 0D 0A 0D 0A 09 53 6F 6D 65 20 6F 66 20 74 d......Some of t
01B010: 68 65 20 66 75 6E 63 74 69 6F 6E 73 20 72 65 71 he functions req
01B020: 75 69 72 65 20 6F 74 68 65 72 20 70 61 74 74 65 uire other patte
01B030: 72 6E 73 20 61 73 20 70 61 72 61 6D 65 74 65 72 rns as parameter
01B040: 73 2E 20 54 68 65 73 65 0D 0A 09 63 61 6E 20 62 s. These...can b
01B050: 65 20 67 65 6E 65 72 61 74 65 64 20 75 73 69 6E e generated usin
01B060: 67 20 6E 65 73 74 65 64 20 66 75 6E 63 74 69 6F g nested functio
01B070: 6E 20 63 61 6C 6C 73 2E 0D 0A 0D 0A 09 52 65 63 n calls......Rec
01B080: 75 72 73 69 6F 6E 20 69 73 20 70 6F 73 73 69 62 ursion is possib
01B090: 6C 65 2C 20 62 75 74 20 73 6F 6D 65 20 65 78 74 le, but some ext
01B0A0: 72 61 20 77 6F 72 6B 20 69 73 20 72 65 71 75 69 ra work is requi
01B0B0: 72 65 64 20 74 6F 20 64 65 66 69 6E 65 20 61 0D red to define a.
01B0C0: 0A 09 72 65 63 75 72 73 69 76 65 20 70 61 74 74 ..recursive patt
01B0D0: 65 72 6E 2E 20 59 6F 75 20 6D 75 73 74 20 61 6C ern. You must al
01B0E0: 6C 6F 63 61 74 65 20 73 74 6F 72 61 67 65 20 66 locate storage f
01B0F0: 6F 72 20 61 20 72 65 63 75 72 73 69 76 65 20 70 or a recursive p
01B100: 61 74 74 65 72 6E 0D 0A 09 62 65 66 6F 72 65 20 attern...before
01B110: 69 74 20 69 73 20 75 73 65 64 2C 20 61 6E 64 20 it is used, and
01B120: 74 68 65 6E 20 61 73 73 69 67 6E 20 69 74 73 20 then assign its
01B130: 63 6F 6E 74 65 6E 74 73 20 61 66 74 65 72 20 69 contents after i
01B140: 74 20 69 73 20 64 65 66 69 6E 65 64 2E 0D 0A 0D t is defined....
01B150: 0A 09 46 6F 72 20 65 78 61 6D 70 6C 65 2C 20 73 ..For example, s
01B160: 75 70 70 6F 73 65 20 77 65 20 77 61 6E 74 20 74 uppose we want t
01B170: 6F 20 73 65 74 20 75 70 20 61 20 70 61 74 74 65 o set up a patte
01B180: 72 6E 20 77 68 69 63 68 20 6D 61 74 63 68 65 73 rn which matches
01B190: 20 61 20 73 74 72 69 6E 67 0D 0A 09 6F 66 20 61 a string...of a
01B1A0: 27 73 2E 20 54 68 65 20 70 61 74 74 65 72 6E 20 's. The pattern
01B1B0: 63 61 6E 20 62 65 20 67 69 76 65 6E 20 62 79 20 can be given by
01B1C0: 74 68 65 20 67 72 61 6D 6D 61 72 3A 0D 0A 0D 0A the grammar:....
01B1D0: 09 45 2D 3E 61 7C 61 45 0D 0A 0D 0A 09 54 68 69 .E->a|aE.....Thi
01B1E0: 73 20 77 6F 75 6C 64 20 62 65 20 73 65 74 20 75 s would be set u
01B1F0: 70 20 61 73 20 66 6F 6C 6C 6F 77 73 3A 0D 0A 0D p as follows:...
01B200: 20 4F 46 20 43 48 41 52 29 3A 50 53 74 61 74 75 OF CHAR):PStatu
01B210: 73 3B 0D 0A 0D 0A 28 2A 09 4D 61 74 63 68 20 61 s;....(*.Match a
01B220: 20 50 61 74 74 65 72 6E 20 0D 0A 09 70 20 69 73 Pattern ...p is
01B230: 20 74 68 65 20 72 6F 6F 74 20 6F 66 20 74 68 65 the root of the
01B240: 20 70 61 74 74 65 72 6E 20 74 6F 20 6D 61 74 63 pattern to matc
01B250: 68 0D 0A 09 73 20 69 73 20 74 68 65 20 74 65 78 h...s is the tex
01B260: 74 20 74 6F 20 6D 61 74 63 68 0D 0A 0D 0A 09 54 t to match.....T
01B270: 68 65 20 66 75 6E 63 74 69 6F 6E 20 72 65 74 75 he function retu
01B280: 72 6E 73 20 61 20 74 72 65 65 20 69 66 20 74 68 rns a tree if th
01B290: 65 20 6D 61 74 63 68 20 69 73 20 73 75 63 63 65 e match is succe
01B2A0: 73 73 66 75 6C 2E 0D 0A 09 49 74 20 72 65 74 75 ssful....It retu
01B2B0: 72 6E 73 20 4E 49 4C 20 69 66 20 74 68 65 20 6D rns NIL if the m
01B2C0: 61 74 63 68 20 66 61 69 6C 73 2E 0D 0A 0D 0A 09 atch fails......
01B2D0: 54 68 65 20 6D 61 74 63 68 20 6D 75 73 74 20 73 The match must s
01B2E0: 74 61 72 74 20 61 74 20 74 68 65 20 62 65 67 69 tart at the begi
01B2F0: 6E 6E 69 6E 67 20 6F 66 20 74 68 65 20 73 74 72 nning of the str
01B300: 69 6E 67 2C 20 62 75 74 20 69 74 0D 0A 09 6E 65 ing, but it...ne
01B310: 65 64 20 6E 6F 74 20 6D 61 74 63 68 20 74 68 65 ed not match the
01B320: 20 65 6E 74 69 72 65 20 73 74 72 69 6E 67 20 2D entire string -
01B330: 20 74 68 69 73 20 63 61 6E 20 62 65 20 66 6F 72 this can be for
01B340: 63 65 64 20 62 79 20 75 73 69 6E 67 0D 0A 09 61 ced by using...a
01B350: 20 6C 69 6D 69 74 20 6E 6F 64 65 2E 20 0D 0A 0D limit node. ...
01B360: 0A 09 49 66 20 79 6F 75 20 77 61 6E 74 20 74 6F ..If you want to
01B370: 20 75 6E 2D 61 6E 63 68 6F 72 20 74 68 65 20 6D un-anchor the m
01B380: 61 74 63 68 20 66 72 6F 6D 20 74 68 65 20 62 65 atch from the be
01B390: 67 69 6E 6E 69 6E 67 20 6F 66 20 74 68 65 0D 0A ginning of the..
01B3A0: 09 73 74 72 69 6E 67 2C 20 75 73 65 20 61 20 70 .string, use a p
01B3B0: 61 74 74 65 72 6E 3A 0D 0A 0D 0A 09 09 43 72 65 attern:......Cre
01B3C0: 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 28 0D 0A ateConcatNode(..
01B3D0: 09 09 09 43 72 65 61 74 65 41 6E 79 4F 66 4E 6F ...CreateAnyOfNo
01B3E0: 64 65 28 43 68 61 72 53 65 74 7B 30 78 2E 2E 30 de(CharSet{0x..0
01B3F0: 66 66 78 7D 2C 30 2C 36 34 30 30 30 2C 46 41 4C ffx},0,64000,FAL
01B400: 0A 09 4E 45 57 28 45 29 3B 0D 0A 09 74 65 6D 70 ..NEW(E);...temp
01B410: 3A 3D 43 72 65 61 74 65 41 6C 74 4E 6F 64 65 28 :=CreateAltNode(
01B420: 0D 0A 09 09 20 20 20 43 72 65 61 74 65 53 74 72 .... CreateStr
01B430: 69 6E 67 4E 6F 64 65 28 27 61 27 29 2C 0D 0A 09 ingNode('a'),...
01B440: 09 20 20 20 43 72 65 61 74 65 43 6F 6E 63 61 74 . CreateConcat
01B450: 4E 6F 64 65 28 0D 0A 09 09 09 43 72 65 61 74 65 Node(.....Create
01B460: 53 74 72 69 6E 67 4E 6F 64 65 28 27 61 27 29 2C StringNode('a'),
01B470: 0D 0A 09 09 09 45 29 0D 0A 09 09 20 20 20 29 3B .....E).... );
01B480: 0D 0A 09 45 5E 3A 3D 74 65 6D 70 5E 3B 0D 0A 0D ...E^:=temp^;...
01B490: 0A 09 57 65 20 68 61 76 65 20 61 6C 6C 6F 63 61 ..We have alloca
01B4A0: 74 65 64 20 22 45 22 20 66 69 72 73 74 20 73 6F ted "E" first so
01B4B0: 20 74 68 61 74 20 69 74 20 63 61 6E 20 62 65 20 that it can be
01B4C0: 75 73 65 64 20 69 6E 20 74 68 65 0D 0A 09 66 75 used in the...fu
01B4D0: 6E 63 74 69 6F 6E 2E 20 57 65 20 63 6F 75 6C 64 nction. We could
01B4E0: 20 6E 6F 74 20 73 69 6D 70 6C 79 20 61 73 73 69 not simply assi
01B4F0: 67 6E 20 74 68 65 20 70 6F 69 6E 74 65 72 20 72 gn the pointer r
01B500: 65 74 75 72 6E 65 64 20 62 79 0D 0A 09 43 72 65 eturned by...Cre
01B510: 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 20 74 6F ateConcatNode to
01B520: 20 45 2C 20 73 69 6E 63 65 20 74 68 65 6E 20 74 E, since then t
01B530: 68 65 20 45 20 75 73 65 64 20 69 6E 20 74 68 65 he E used in the
01B540: 20 66 75 6E 63 74 69 6F 6E 0D 0A 09 77 6F 75 6C function...woul
01B550: 64 20 62 65 20 70 6F 69 6E 74 69 6E 67 20 65 6C d be pointing el
01B560: 73 65 77 68 65 72 65 2E 20 49 6E 73 74 65 61 64 sewhere. Instead
01B570: 2C 20 77 65 20 6D 75 73 74 20 63 6F 70 79 20 74 , we must copy t
01B580: 68 65 20 63 6F 6E 74 65 6E 74 73 0D 0A 09 6F 66 he contents...of
01B590: 20 74 65 6D 70 20 69 6E 74 6F 20 45 20 73 6F 20 temp into E so
01B5A0: 74 68 61 74 20 74 68 65 20 70 6F 69 6E 74 65 72 that the pointer
01B5B0: 73 20 72 65 6D 61 69 6E 20 63 6F 72 72 65 63 74 s remain correct
01B5C0: 2E 0D 0A 0D 0A 09 54 68 69 73 20 70 61 74 74 65 ......This patte
01B5D0: 72 6E 20 22 45 22 20 69 73 20 6E 6F 74 20 79 65 rn "E" is not ye
01B5E0: 74 20 72 65 61 64 79 20 74 6F 20 62 65 20 75 73 t ready to be us
01B5F0: 65 64 2C 20 73 69 6E 63 65 20 74 68 65 20 70 61 ed, since the pa
01B600: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
01B610: 17 00 01 00 02 09 52 E5 17 00 41 02 00 00 00 02 ......R...A.....
01B620: 17 00 46 02 00 00 00 02 17 00 42 02 00 00 00 02 ..F.......B.....
01B630: 17 00 47 02 00 00 00 02 17 00 43 02 00 00 00 02 ..G.......C.....
01B640: 17 00 48 02 00 00 00 02 17 00 44 02 00 00 00 02 ..H.......D.....
01B650: 17 00 49 02 00 00 00 02 17 00 45 02 00 00 00 02 ..I.......E.....
01B660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B670: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B690: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B6F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B700: 53 45 29 2C 0D 0A 09 09 09 45 29 3B 0D 0A 0D 0A SE),.....E);....
01B710: 09 77 68 65 72 65 20 45 20 69 73 20 74 68 65 20 .where E is the
01B720: 70 61 74 74 65 72 6E 20 74 6F 20 62 65 20 6D 61 pattern to be ma
01B730: 74 63 68 65 64 20 69 6E 20 75 6E 2D 61 6E 63 68 tched in un-anch
01B740: 6F 72 65 64 20 6D 6F 64 65 2E 0D 0A 0D 0A 09 54 ored mode......T
01B750: 68 65 20 74 72 65 65 20 72 65 74 75 72 6E 65 64 he tree returned
01B760: 20 62 79 20 74 68 65 20 70 61 74 74 65 72 6E 20 by the pattern
01B770: 6D 61 74 63 68 65 72 20 63 6F 6E 74 61 69 6E 73 matcher contains
01B780: 2C 20 69 6E 20 65 76 65 72 79 20 6E 6F 64 65 2C , in every node,
01B790: 20 74 68 65 0D 0A 09 66 69 72 73 74 20 63 68 61 the...first cha
01B7A0: 72 61 63 74 65 72 20 6D 61 74 63 68 65 64 20 62 racter matched b
01B7B0: 79 20 74 68 65 20 70 61 74 74 65 72 6E 2C 20 61 y the pattern, a
01B7C0: 6E 64 20 74 68 65 20 70 6F 73 69 74 69 6F 6E 20 nd the position
01B7D0: 6F 66 20 74 68 65 20 6E 65 78 74 0D 0A 09 63 68 of the next...ch
01B7E0: 61 72 61 63 74 65 72 20 66 6F 6C 6C 6F 77 69 6E aracter followin
01B7F0: 67 20 74 68 65 20 6D 61 74 63 68 20 28 73 6F 20 g the match (so
01B800: 74 68 61 74 20 74 68 65 20 64 69 66 66 65 72 65 that the differe
01B810: 6E 63 65 20 62 65 74 77 65 65 6E 20 74 68 65 73 nce between thes
01B820: 65 0D 0A 09 74 77 6F 20 76 61 6C 75 65 73 20 67 e...two values g
01B830: 69 76 65 73 20 74 68 65 20 6E 75 6D 62 65 72 20 ives the number
01B840: 6F 66 20 63 68 61 72 61 63 74 65 72 73 20 6D 61 of characters ma
01B850: 74 63 68 65 64 29 2E 0D 0A 0D 0A 09 49 6E 20 61 tched)......In a
01B860: 64 64 69 74 69 6F 6E 2C 20 65 61 63 68 20 6E 6F ddition, each no
01B870: 64 65 20 63 6F 6E 74 61 69 6E 73 20 61 20 70 6F de contains a po
01B880: 69 6E 74 65 72 20 74 6F 20 74 68 65 20 70 61 74 inter to the pat
01B890: 74 65 72 6E 20 6E 6F 64 65 20 6D 61 74 63 68 65 tern node matche
01B8A0: 64 0D 0A 09 61 6E 64 20 69 74 20 6D 61 79 20 63 d...and it may c
01B8B0: 6F 6E 74 61 69 6E 20 70 6F 69 6E 74 65 72 73 20 ontain pointers
01B8C0: 74 6F 20 73 75 62 2D 70 61 74 74 65 72 6E 73 20 to sub-patterns
01B8D0: 77 68 69 63 68 20 77 65 72 65 20 6D 61 74 63 68 which were match
01B8E0: 65 64 2E 0D 0A 0D 0A 2A 29 0D 0A 45 4E 44 20 50 ed.....*)..END P
01B8F0: 61 74 74 65 72 6E 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A attern..........
01B900: 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 28 L;..PROCEDURE P(
01B910: 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 ):BOOLEAN;..BEGI
01B920: 4E 0D 0A 09 28 2A 20 52 65 63 75 72 73 69 76 65 N...(* Recursive
01B930: 6C 79 20 6D 61 74 63 68 20 74 68 65 20 70 61 74 ly match the pat
01B940: 74 65 72 6E 20 2A 29 0D 0A 09 57 49 54 48 20 70 tern *)...WITH p
01B950: 5E 20 44 4F 0D 0A 20 09 20 20 20 20 50 6F 73 3A ^ DO.. . Pos:
01B960: 3D 71 5E 2E 4D 61 74 63 68 65 64 41 74 3B 0D 0A =q^.MatchedAt;..
01B970: 09 20 20 20 20 53 74 61 72 74 50 6F 73 3A 3D 50 . StartPos:=P
01B980: 6F 73 3B 0D 0A 09 20 20 20 20 74 65 6D 70 3A 3D os;... temp:=
01B990: 4E 49 4C 3B 0D 0A 09 20 20 20 20 4D 61 74 63 68 NIL;... Match
01B9A0: 53 74 61 74 75 73 3A 3D 71 5E 2E 53 74 61 74 75 Status:=q^.Statu
01B9B0: 73 3B 0D 0A 09 20 20 20 20 43 41 53 45 20 4E 54 s;... CASE NT
01B9C0: 79 70 65 20 4F 46 0D 0A 09 09 53 74 72 69 6E 67 ype OF....String
01B9D0: 2C 52 69 67 68 74 4C 69 6D 69 74 3A 0D 0A 09 09 ,RightLimit:....
01B9E0: 09 74 65 6D 70 3A 3D 50 61 74 74 65 72 6E 28 70 .temp:=Pattern(p
01B9F0: 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 52 45 54 ,s,Pos);.....RET
01BA00: 55 52 4E 20 74 65 6D 70 3C 3E 4E 49 4C 3B 0D 0A URN temp<>NIL;..
01BA10: 09 09 09 7C 20 28 2A 73 74 72 69 6E 67 20 65 74 ...| (*string et
01BA20: 63 2A 29 0D 0A 09 09 41 6E 79 4F 66 3A 0D 0A 09 c*)....AnyOf:...
01BA30: 09 09 50 6F 73 3A 3D 71 5E 2E 4D 61 74 63 68 65 ..Pos:=q^.Matche
01BA40: 64 54 6F 3B 0D 0A 09 09 09 49 46 20 28 4D 61 74 dTo;.....IF (Mat
01BA50: 63 68 53 74 61 74 75 73 3C 4D 61 78 43 6F 75 6E chStatus<MaxCoun
01BA60: 74 29 20 41 4E 44 20 28 73 5B 50 6F 73 5D 20 49 t) AND (s[Pos] I
01BA70: 4E 20 4D 61 74 63 68 29 20 54 48 45 4E 0D 0A 09 N Match) THEN...
01BA80: 09 09 09 49 4E 43 28 4D 61 74 63 68 53 74 61 74 ...INC(MatchStat
01BA90: 75 73 29 3B 0D 0A 09 09 09 09 43 68 61 6E 67 65 us);......Change
01BAA0: 64 3A 3D 54 52 55 45 3B 0D 0A 09 09 09 09 52 45 d:=TRUE;......RE
01BAB0: 54 55 52 4E 20 54 52 55 45 3B 0D 0A 09 09 09 09 TURN TRUE;......
01BAC0: 45 4E 44 3B 0D 0A 09 09 09 52 45 54 55 52 4E 20 END;.....RETURN
01BAD0: 46 41 4C 53 45 3B 0D 0A 09 09 09 7C 0D 0A 09 09 FALSE;.....|....
01BAE0: 41 6C 74 65 72 6E 61 74 69 76 65 73 3A 0D 0A 09 Alternatives:...
01BAF0: 09 09 49 46 20 4D 61 74 63 68 53 74 61 74 75 73 ..IF MatchStatus
01BB00: 28 2A 24 6C 2D 2A 29 0D 0A 49 4D 50 4C 45 4D 45 (*$l-*)..IMPLEME
01BB10: 4E 54 41 54 49 4F 4E 20 4D 4F 44 55 4C 45 20 50 NTATION MODULE P
01BB20: 61 74 74 65 72 6E 3B 0D 0A 0D 0A 28 2A 09 54 68 attern;....(*.Th
01BB30: 69 73 20 69 73 20 61 20 70 61 74 74 65 72 6E 20 is is a pattern
01BB40: 6D 61 74 63 68 69 6E 67 20 6D 6F 64 75 6C 65 0D matching module.
01BB50: 0A 0D 0A 09 44 61 76 65 20 4D 6F 6F 72 65 2C 20 ....Dave Moore,
01BB60: 46 54 4C 20 4D 6F 64 75 6C 61 2D 32 0D 0A 0D 0A FTL Modula-2....
01BB70: 2A 29 0D 0A 0D 0A 46 52 4F 4D 09 53 54 4F 52 41 *)....FROM.STORA
01BB80: 47 45 20 49 4D 50 4F 52 54 20 41 4C 4C 4F 43 41 GE IMPORT ALLOCA
01BB90: 54 45 2C 44 45 41 4C 4C 4F 43 41 54 45 3B 0D 0A TE,DEALLOCATE;..
01BBA0: 46 52 4F 4D 09 53 74 72 69 6E 67 73 20 49 4D 50 FROM.Strings IMP
01BBB0: 4F 52 54 20 4C 65 6E 67 74 68 3B 0D 0A 46 52 4F ORT Length;..FRO
01BBC0: 4D 09 53 59 53 54 45 4D 09 49 4D 50 4F 52 54 20 M.SYSTEM.IMPORT
01BBD0: 54 53 49 5A 45 3B 0D 0A 56 41 52 09 69 2C 6A 3A TSIZE;..VAR.i,j:
01BBE0: 43 41 52 44 49 4E 41 4C 3B 0D 0A 0D 0A 09 43 68 CARDINAL;.....Ch
01BBF0: 61 6E 67 65 64 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A anged:BOOLEAN;..
01BC00: 09 4C 65 6E 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A .Len:CARDINAL;..
01BC10: 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 72 65 61 ..PROCEDURE Crea
01BC20: 74 65 53 74 72 69 6E 67 4E 6F 64 65 28 73 3A 41 teStringNode(s:A
01BC30: 52 52 41 59 20 4F 46 20 43 48 41 52 29 3A 50 4E RRAY OF CHAR):PN
01BC40: 6F 64 65 3B 0D 0A 56 41 52 09 70 3A 50 4E 6F 64 ode;..VAR.p:PNod
01BC50: 65 3B 0D 0A 42 45 47 49 4E 0D 0A 0D 0A 28 2A 54 e;..BEGIN....(*T
01BC60: 68 69 73 20 70 72 6F 63 65 64 75 72 65 20 69 73 his procedure is
01BC70: 20 70 72 6F 76 69 64 65 64 20 74 6F 20 61 6C 6C provided to all
01BC80: 6F 77 20 74 68 65 20 63 72 65 61 74 69 6F 6E 20 ow the creation
01BC90: 6F 66 20 6E 6F 64 65 73 0D 0A 20 20 66 6F 72 20 of nodes.. for
01BCA0: 73 74 72 69 6E 67 73 20 65 61 73 69 6C 6C 79 2E strings easilly.
01BCB0: 20 4F 6E 6C 79 20 74 68 65 20 72 65 71 75 69 72 Only the requir
01BCC0: 65 64 20 61 6D 6F 75 6E 74 20 6F 66 20 6D 65 6D ed amount of mem
01BCD0: 6F 72 79 20 69 73 20 61 6C 6C 6F 63 61 74 65 64 ory is allocated
01BCE0: 2A 29 0D 0A 0D 0A 09 69 3A 3D 4C 65 6E 67 74 68 *).....i:=Length
01BCF0: 28 73 29 3B 0D 0A 09 41 4C 4C 4F 43 41 54 45 28 (s);...ALLOCATE(
01BD00: 3D 31 20 54 48 45 4E 0D 0A 09 09 09 09 4D 61 74 =1 THEN......Mat
01BD10: 63 68 4C 65 66 74 3A 3D 42 61 63 6B 54 72 61 63 chLeft:=BackTrac
01BD20: 6B 28 71 5E 2E 4C 65 66 74 2C 73 2C 50 6F 73 29 k(q^.Left,s,Pos)
01BD30: 3B 0D 0A 09 09 09 09 49 46 20 28 4D 61 74 63 68 ;......IF (Match
01BD40: 4C 65 66 74 3C 3E 4E 49 4C 29 20 41 4E 44 20 43 Left<>NIL) AND C
01BD50: 68 61 6E 67 65 64 20 54 48 45 4E 20 0D 0A 09 09 hanged THEN ....
01BD60: 09 09 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A ...RETURN TRUE..
01BD70: 09 09 09 09 45 4C 53 45 0D 0A 09 09 09 09 09 4D ....ELSE.......M
01BD80: 61 74 63 68 53 74 61 74 75 73 3A 3D 32 3B 0D 0A atchStatus:=2;..
01BD90: 09 09 09 09 09 43 68 61 6E 67 65 64 3A 3D 54 52 .....Changed:=TR
01BDA0: 55 45 3B 0D 0A 09 09 09 09 09 50 6F 73 3A 3D 53 UE;.......Pos:=S
01BDB0: 74 61 72 74 50 6F 73 3B 0D 0A 09 09 09 09 09 4D tartPos;.......M
01BDC0: 61 74 63 68 4C 65 66 74 3A 3D 50 61 74 74 65 72 atchLeft:=Patter
01BDD0: 6E 28 53 65 63 6F 6E 64 2C 73 2C 50 6F 73 29 3B n(Second,s,Pos);
01BDE0: 0D 0A 09 09 09 09 09 52 45 54 55 52 4E 20 4D 61 .......RETURN Ma
01BDF0: 74 63 68 4C 65 66 74 3C 3E 4E 49 4C 3B 0D 0A 09 tchLeft<>NIL;...
01BE00: 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 4C 53 ....END;.....ELS
01BE10: 45 20 28 2A 53 74 61 74 75 73 3D 32 2A 29 0D 0A E (*Status=2*)..
01BE20: 09 09 09 09 4D 61 74 63 68 4C 65 66 74 3A 3D 42 ....MatchLeft:=B
01BE30: 61 63 6B 54 72 61 63 6B 28 71 5E 2E 4C 65 66 74 ackTrack(q^.Left
01BE40: 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 09 52 45 ,s,Pos);......RE
01BE50: 54 55 52 4E 20 4D 61 74 63 68 4C 65 66 74 3C 3E TURN MatchLeft<>
01BE60: 4E 49 4C 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A NIL;......END;..
01BE70: 09 09 09 7C 0D 0A 09 09 43 6F 6E 63 61 74 3A 0D ...|....Concat:.
01BE80: 0A 0D 0A 09 09 09 28 2A 20 73 65 65 20 69 66 20 ......(* see if
01BE90: 77 65 20 63 61 6E 20 62 61 63 6B 74 72 61 63 6B we can backtrack
01BEA0: 20 6F 6E 20 74 68 65 20 73 65 63 6F 6E 64 20 73 on the second s
01BEB0: 74 72 69 6E 67 2A 29 0D 0A 0D 0A 09 09 09 50 6F tring*).......Po
01BEC0: 73 3A 3D 4D 61 74 63 68 53 74 61 74 75 73 3B 0D s:=MatchStatus;.
01BED0: 0A 09 09 09 4D 61 74 63 68 4C 65 66 74 3A 3D 71 ....MatchLeft:=q
01BEE0: 5E 2E 4C 65 66 74 3B 0D 0A 09 09 09 4D 61 74 63 ^.Left;.....Matc
01BEF0: 68 52 69 67 68 74 3A 3D 42 61 63 6B 54 72 61 63 hRight:=BackTrac
01BF00: 70 2C 69 2B 33 2A 54 53 49 5A 45 28 43 41 52 44 p,i+3*TSIZE(CARD
01BF10: 49 4E 41 4C 29 2B 54 53 49 5A 45 28 4E 6F 64 65 INAL)+TSIZE(Node
01BF20: 54 79 70 65 29 29 3B 0D 0A 09 57 49 54 48 20 70 Type));...WITH p
01BF30: 5E 20 44 4F 0D 0A 09 09 46 4F 52 20 6A 3A 3D 30 ^ DO....FOR j:=0
01BF40: 20 54 4F 20 69 2D 31 20 44 4F 20 0D 0A 09 09 09 TO i-1 DO .....
01BF50: 54 65 78 74 5B 6A 5D 3A 3D 73 5B 6A 5D 20 0D 0A Text[j]:=s[j] ..
01BF60: 09 09 09 45 4E 44 3B 0D 0A 09 09 54 65 78 74 4C ...END;....TextL
01BF70: 65 6E 3A 3D 69 3B 0D 0A 09 09 4E 54 79 70 65 3A en:=i;....NType:
01BF80: 3D 53 74 72 69 6E 67 3B 0D 0A 09 09 45 4E 44 3B =String;....END;
01BF90: 0D 0A 09 52 45 54 55 52 4E 20 70 3B 0D 0A 09 45 ...RETURN p;...E
01BFA0: 4E 44 20 43 72 65 61 74 65 53 74 72 69 6E 67 4E ND CreateStringN
01BFB0: 6F 64 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 ode;..PROCEDURE
01BFC0: 43 72 65 61 74 65 41 6C 74 4E 6F 64 65 28 6D 2C CreateAltNode(m,
01BFD0: 71 3A 50 4E 6F 64 65 29 3A 50 4E 6F 64 65 3B 0D q:PNode):PNode;.
01BFE0: 0A 56 41 52 09 70 3A 50 4E 6F 64 65 3B 0D 0A 42 .VAR.p:PNode;..B
01BFF0: 45 47 49 4E 0D 0A 09 4E 45 57 28 70 29 3B 0D 0A EGIN...NEW(p);..
01C000: 09 57 49 54 48 20 70 5E 20 44 4F 0D 0A 09 09 4E .WITH p^ DO....N
01C010: 54 79 70 65 3A 3D 41 6C 74 65 72 6E 61 74 69 76 Type:=Alternativ
01C020: 65 73 3B 0D 0A 09 09 46 69 72 73 74 3A 3D 6D 3B es;....First:=m;
01C030: 0D 0A 09 09 53 65 63 6F 6E 64 3A 3D 71 3B 0D 0A ....Second:=q;..
01C040: 09 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 ..END;...RETURN
01C050: 70 0D 0A 09 45 4E 44 20 43 72 65 61 74 65 41 6C p...END CreateAl
01C060: 74 4E 6F 64 65 3B 0D 0A 50 52 4F 43 45 44 55 52 tNode;..PROCEDUR
01C070: 45 20 43 72 65 61 74 65 41 6E 79 4F 66 4E 6F 64 E CreateAnyOfNod
01C080: 65 28 73 3A 43 68 61 72 53 65 74 3B 6D 69 6E 2C e(s:CharSet;min,
01C090: 6D 61 78 3A 43 41 52 44 49 4E 41 4C 3B 4C 6F 6E max:CARDINAL;Lon
01C0A0: 67 65 73 74 3A 42 4F 4F 4C 45 41 4E 29 3A 50 4E gest:BOOLEAN):PN
01C0B0: 6F 64 65 3B 0D 0A 56 41 52 09 70 3A 50 4E 6F 64 ode;..VAR.p:PNod
01C0C0: 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4E 45 57 28 e;..BEGIN...NEW(
01C0D0: 70 29 3B 0D 0A 09 57 49 54 48 20 70 5E 20 44 4F p);...WITH p^ DO
01C0E0: 0D 0A 09 09 4E 54 79 70 65 3A 3D 41 6E 79 4F 66 ....NType:=AnyOf
01C0F0: 3B 0D 0A 09 09 4D 69 6E 43 6F 75 6E 74 3A 3D 6D ;....MinCount:=m
01C100: 6B 28 71 5E 2E 52 69 67 68 74 2C 73 2C 50 6F 73 k(q^.Right,s,Pos
01C110: 29 3B 0D 0A 09 09 09 49 46 20 28 4D 61 74 63 68 );.....IF (Match
01C120: 52 69 67 68 74 3C 3E 4E 49 4C 29 20 41 4E 44 20 Right<>NIL) AND
01C130: 43 68 61 6E 67 65 64 20 54 48 45 4E 0D 0A 09 09 Changed THEN....
01C140: 09 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A 09 ..RETURN TRUE...
01C150: 09 09 09 45 4E 44 3B 0D 0A 09 09 09 50 6F 73 3A ...END;.....Pos:
01C160: 3D 71 5E 2E 4D 61 74 63 68 65 64 41 74 3B 0D 0A =q^.MatchedAt;..
01C170: 09 09 09 0D 0A 09 09 09 28 2A 20 69 66 20 6E 6F ........(* if no
01C180: 74 2C 20 74 72 79 20 74 6F 20 62 61 63 6B 74 72 t, try to backtr
01C190: 61 63 6B 20 74 68 65 20 66 69 72 73 74 20 73 74 ack the first st
01C1A0: 72 69 6E 67 0D 0A 09 09 09 20 20 20 75 6E 74 69 ring..... unti
01C1B0: 6C 20 74 68 65 20 73 65 63 6F 6E 64 20 73 74 72 l the second str
01C1C0: 69 6E 67 20 6D 61 74 63 68 65 73 2A 29 09 09 09 ing matches*)...
01C1D0: 0D 0A 09 09 09 43 68 61 6E 67 65 64 3A 3D 46 41 .....Changed:=FA
01C1E0: 4C 53 45 3B 0D 0A 09 09 09 53 61 76 65 50 6F 73 LSE;.....SavePos
01C1F0: 3A 3D 50 6F 73 3B 0D 0A 09 09 09 4C 4F 4F 50 0D :=Pos;.....LOOP.
01C200: 0A 09 09 09 09 50 6F 73 3A 3D 53 61 76 65 50 6F .....Pos:=SavePo
01C210: 73 3B 0D 0A 09 09 09 09 4D 61 74 63 68 4C 65 66 s;......MatchLef
01C220: 74 3A 3D 42 61 63 6B 54 72 61 63 6B 28 71 5E 2E t:=BackTrack(q^.
01C230: 4C 65 66 74 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 Left,s,Pos);....
01C240: 09 09 49 46 20 28 4D 61 74 63 68 4C 65 66 74 3D ..IF (MatchLeft=
01C250: 4E 49 4C 29 20 4F 52 20 4E 4F 54 20 43 68 61 6E NIL) OR NOT Chan
01C260: 67 65 64 20 54 48 45 4E 20 45 58 49 54 20 45 4E ged THEN EXIT EN
01C270: 44 3B 0D 0A 09 09 09 09 4D 61 74 63 68 52 69 67 D;......MatchRig
01C280: 68 74 3A 3D 50 61 74 74 65 72 6E 28 53 65 63 6F ht:=Pattern(Seco
01C290: 6E 64 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 09 nd,s,Pos);......
01C2A0: 49 46 20 4D 61 74 63 68 52 69 67 68 74 3C 3E 4E IF MatchRight<>N
01C2B0: 49 4C 20 54 48 45 4E 0D 0A 09 09 09 09 09 52 45 IL THEN.......RE
01C2C0: 54 55 52 4E 20 54 52 55 45 0D 0A 09 09 09 09 09 TURN TRUE.......
01C2D0: 45 4E 44 3B 0D 0A 09 09 09 09 43 68 61 6E 67 65 END;......Change
01C2E0: 64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 09 09 45 d:=FALSE;......E
01C2F0: 4E 44 3B 0D 0A 09 09 09 50 6F 73 3A 3D 53 74 61 ND;.....Pos:=Sta
01C300: 69 6E 3B 0D 0A 09 09 4D 61 78 43 6F 75 6E 74 3A in;....MaxCount:
01C310: 3D 6D 61 78 3B 0D 0A 09 09 46 61 73 74 3A 3D 4C =max;....Fast:=L
01C320: 6F 6E 67 65 73 74 3B 0D 0A 09 09 4D 61 74 63 68 ongest;....Match
01C330: 3A 3D 73 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 :=s;....END;...R
01C340: 45 54 55 52 4E 20 70 0D 0A 09 45 4E 44 20 43 72 ETURN p...END Cr
01C350: 65 61 74 65 41 6E 79 4F 66 4E 6F 64 65 3B 0D 0A eateAnyOfNode;..
01C360: 50 52 4F 43 45 44 55 52 45 20 43 72 65 61 74 65 PROCEDURE Create
01C370: 43 6F 6E 63 61 74 4E 6F 64 65 28 6D 2C 71 3A 50 ConcatNode(m,q:P
01C380: 4E 6F 64 65 29 3A 50 4E 6F 64 65 3B 0D 0A 56 41 Node):PNode;..VA
01C390: 52 09 70 3A 50 4E 6F 64 65 3B 0D 0A 42 45 47 49 R.p:PNode;..BEGI
01C3A0: 4E 0D 0A 09 4E 45 57 28 70 29 3B 0D 0A 09 57 49 N...NEW(p);...WI
01C3B0: 54 48 20 70 5E 20 44 4F 0D 0A 09 09 4E 54 79 70 TH p^ DO....NTyp
01C3C0: 65 3A 3D 43 6F 6E 63 61 74 3B 0D 0A 09 09 46 69 e:=Concat;....Fi
01C3D0: 72 73 74 3A 3D 6D 3B 0D 0A 09 09 53 65 63 6F 6E rst:=m;....Secon
01C3E0: 64 3A 3D 71 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 d:=q;....END;...
01C3F0: 52 45 54 55 52 4E 20 70 0D 0A 09 45 4E 44 20 43 RETURN p...END C
01C400: 72 65 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 3B reateConcatNode;
01C410: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 72 ....PROCEDURE Cr
01C420: 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 28 29 3A eateLimitNode():
01C430: 50 4E 6F 64 65 3B 0D 0A 56 41 52 09 70 3A 50 4E PNode;..VAR.p:PN
01C440: 6F 64 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4E 45 ode;..BEGIN...NE
01C450: 57 28 70 29 3B 0D 0A 09 70 5E 2E 4E 54 79 70 65 W(p);...p^.NType
01C460: 3A 3D 52 69 67 68 74 4C 69 6D 69 74 3B 0D 0A 09 :=RightLimit;...
01C470: 52 45 54 55 52 4E 20 70 3B 0D 0A 09 45 4E 44 20 RETURN p;...END
01C480: 43 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 3B CreateLimitNode;
01C490: 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 61 74 74 ..PROCEDURE Patt
01C4A0: 65 72 6E 28 70 3A 50 4E 6F 64 65 3B 56 41 52 20 ern(p:PNode;VAR
01C4B0: 73 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 3B s:ARRAY OF CHAR;
01C4C0: 56 41 52 20 50 6F 73 3A 43 41 52 44 49 4E 41 4C VAR Pos:CARDINAL
01C4D0: 29 3A 50 53 74 61 74 75 73 3B 46 4F 52 57 41 52 ):PStatus;FORWAR
01C4E0: 44 3B 0D 0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 D;......PROCEDUR
01C4F0: 45 20 42 61 63 6B 54 72 61 63 6B 28 71 3A 50 53 E BackTrack(q:PS
01C500: 72 74 50 6F 73 3B 0D 0A 09 09 09 52 45 54 55 52 rtPos;.....RETUR
01C510: 4E 20 46 41 4C 53 45 0D 0A 09 09 09 7C 09 09 09 N FALSE.....|...
01C520: 0D 0A 09 09 09 45 4E 44 20 28 2A 43 41 53 45 2A .....END (*CASE*
01C530: 29 0D 0A 09 09 45 4E 44 20 28 2A 57 49 54 48 2A )....END (*WITH*
01C540: 29 0D 0A 09 45 4E 44 20 50 3B 0D 0A 42 45 47 49 )...END P;..BEGI
01C550: 4E 0D 0A 09 70 3A 3D 71 5E 2E 50 61 74 74 65 72 N...p:=q^.Patter
01C560: 6E 4E 6F 64 65 3B 0D 0A 09 49 46 20 50 28 29 20 nNode;...IF P()
01C570: 54 48 45 4E 0D 0A 09 09 49 46 20 74 65 6D 70 3C THEN....IF temp<
01C580: 3E 4E 49 4C 20 54 48 45 4E 0D 0A 09 09 09 71 5E >NIL THEN.....q^
01C590: 3A 3D 74 65 6D 70 5E 3B 0D 0A 09 09 09 44 49 53 :=temp^;.....DIS
01C5A0: 50 4F 53 45 28 74 65 6D 70 29 3B 0D 0A 09 09 45 POSE(temp);....E
01C5B0: 4C 53 45 0D 0A 20 09 09 20 20 20 20 57 49 54 48 LSE.. .. WITH
01C5C0: 20 71 5E 20 44 4F 0D 0A 20 09 09 09 53 74 61 74 q^ DO.. ...Stat
01C5D0: 75 73 3A 3D 4D 61 74 63 68 53 74 61 74 75 73 3B us:=MatchStatus;
01C5E0: 0D 0A 09 09 09 50 61 74 74 65 72 6E 4E 6F 64 65 .....PatternNode
01C5F0: 3A 3D 70 3B 0D 0A 09 09 09 4D 61 74 63 68 65 64 :=p;.....Matched
01C600: 41 74 3A 3D 53 74 61 72 74 50 6F 73 3B 0D 0A 09 At:=StartPos;...
01C610: 09 09 4D 61 74 63 68 65 64 54 6F 3A 3D 50 6F 73 ..MatchedTo:=Pos
01C620: 3B 0D 0A 09 09 09 4C 65 66 74 3A 3D 4D 61 74 63 ;.....Left:=Matc
01C630: 68 4C 65 66 74 3B 0D 0A 09 09 09 52 69 67 68 74 hLeft;.....Right
01C640: 3A 3D 4D 61 74 63 68 52 69 67 68 74 3B 0D 0A 09 :=MatchRight;...
01C650: 09 09 45 4E 44 3B 0D 0A 09 09 20 20 20 20 45 4E ..END;.... EN
01C660: 44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 44 49 53 D;...ELSE....DIS
01C670: 50 4F 53 45 28 71 29 3B 0D 0A 09 09 43 68 61 6E POSE(q);....Chan
01C680: 67 65 64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 45 ged:=FALSE;....E
01C690: 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 71 3B 0D ND;...RETURN q;.
01C6A0: 0A 09 45 4E 44 20 42 61 63 6B 54 72 61 63 6B 3B ..END BackTrack;
01C6B0: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 50 61 ....PROCEDURE Pa
01C6C0: 74 74 65 72 6E 28 70 3A 50 4E 6F 64 65 3B 56 41 ttern(p:PNode;VA
01C6D0: 52 20 73 3A 41 52 52 41 59 20 4F 46 20 43 48 41 R s:ARRAY OF CHA
01C6E0: 52 3B 56 41 52 20 50 6F 73 3A 43 41 52 44 49 4E R;VAR Pos:CARDIN
01C6F0: 41 4C 29 3A 50 53 74 61 74 75 73 3B 0D 0A 0D 0A AL):PStatus;....
01C700: 74 61 74 75 73 3B 56 41 52 20 73 3A 41 52 52 41 tatus;VAR s:ARRA
01C710: 59 20 4F 46 20 43 48 41 52 3B 56 41 52 20 50 6F Y OF CHAR;VAR Po
01C720: 73 3A 43 41 52 44 49 4E 41 4C 29 3A 50 53 74 61 s:CARDINAL):PSta
01C730: 74 75 73 3B 0D 0A 0D 0A 28 2A 09 70 65 72 66 6F tus;....(*.perfo
01C740: 72 6D 20 62 61 63 6B 74 72 61 63 6B 69 6E 67 20 rm backtracking
01C750: 61 66 74 65 72 20 61 20 66 61 69 6C 75 72 65 0D after a failure.
01C760: 0A 0D 0A 09 52 65 74 75 72 6E 73 20 54 52 55 45 ....Returns TRUE
01C770: 20 69 66 20 61 20 6E 65 77 20 6D 61 74 63 68 20 if a new match
01C780: 77 61 73 20 66 6F 75 6E 64 20 66 6F 72 20 6E 6F was found for no
01C790: 64 65 20 70 0D 0A 0D 0A 09 4F 6E 20 65 6E 74 72 de p.....On entr
01C7A0: 79 20 74 68 65 20 66 69 72 73 74 20 74 69 6D 65 y the first time
01C7B0: 2C 20 43 68 61 6E 67 65 64 20 6D 75 73 74 20 62 , Changed must b
01C7C0: 65 20 66 61 6C 73 65 0D 0A 09 69 74 20 77 69 6C e false...it wil
01C7D0: 6C 20 62 65 20 73 65 74 20 74 72 75 65 20 62 79 l be set true by
01C7E0: 20 74 68 65 20 66 69 72 73 74 20 6E 6F 64 65 20 the first node
01C7F0: 77 68 69 63 68 20 65 78 74 65 6E 64 73 20 69 74 which extends it
01C800: 73 20 6D 61 74 63 68 0D 0A 09 48 65 6E 63 65 2C s match...Hence,
01C810: 20 43 68 61 6E 67 65 64 20 6D 75 73 74 20 62 65 Changed must be
01C820: 20 74 72 75 65 20 69 66 20 62 61 63 6B 74 72 61 true if backtra
01C830: 63 6B 69 6D 6E 67 20 69 73 20 63 6F 6D 70 6C 65 ckimng is comple
01C840: 74 65 6C 79 20 73 75 63 63 65 73 73 66 75 6C 2A tely successful*
01C850: 29 0D 0A 0D 0A 56 41 52 09 63 6F 75 6E 74 3A 43 )....VAR.count:C
01C860: 41 52 44 49 4E 41 4C 3B 0D 0A 09 53 74 61 72 74 ARDINAL;...Start
01C870: 50 6F 73 2C 4C 61 73 74 50 6F 73 3A 43 41 52 44 Pos,LastPos:CARD
01C880: 49 4E 41 4C 3B 0D 0A 09 70 3A 50 4E 6F 64 65 3B INAL;...p:PNode;
01C890: 0D 0A 09 53 61 76 65 4D 61 74 63 68 3A 43 41 52 ...SaveMatch:CAR
01C8A0: 44 49 4E 41 4C 3B 0D 0A 09 4D 61 74 63 68 4C 65 DINAL;...MatchLe
01C8B0: 66 74 2C 4D 61 74 63 68 52 69 67 68 74 3A 50 53 ft,MatchRight:PS
01C8C0: 74 61 74 75 73 3B 0D 0A 09 74 65 6D 70 3A 50 53 tatus;...temp:PS
01C8D0: 74 61 74 75 73 3B 0D 0A 09 4D 61 74 63 68 53 74 tatus;...MatchSt
01C8E0: 61 74 75 73 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A atus:CARDINAL;..
01C8F0: 09 53 61 76 65 50 6F 73 3A 43 41 52 44 49 4E 41 .SavePos:CARDINA
01C900: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
01C910: 18 00 01 00 02 09 52 E5 18 00 41 02 00 00 00 02 ......R...A.....
01C920: 18 00 46 02 00 00 00 02 18 00 42 02 00 00 00 02 ..F.......B.....
01C930: 18 00 47 02 00 00 00 02 18 00 43 02 00 00 00 02 ..G.......C.....
01C940: 18 00 48 02 00 00 00 02 18 00 44 02 00 00 00 02 ..H.......D.....
01C950: 18 00 49 02 00 00 00 02 18 00 45 02 00 00 00 02 ..I.......E.....
01C960: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C990: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01C9F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01CA00: 28 2A 09 54 68 69 73 20 70 72 6F 63 65 64 75 72 (*.This procedur
01CA10: 65 20 6D 61 74 63 68 65 73 20 66 6F 72 77 61 72 e matches forwar
01CA20: 64 20 2A 29 0D 0A 56 41 52 09 63 6F 75 6E 74 3A d *)..VAR.count:
01CA30: 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 53 74 61 72 CARDINAL;...Star
01CA40: 74 50 6F 73 2C 4C 61 73 74 50 6F 73 3A 43 41 52 tPos,LastPos:CAR
01CA50: 44 49 4E 41 4C 3B 0D 0A 09 53 61 76 65 4D 61 74 DINAL;...SaveMat
01CA60: 63 68 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 51 ch:CARDINAL;...Q
01CA70: 3A 50 53 74 61 74 75 73 3B 0D 0A 09 4D 61 74 63 :PStatus;...Matc
01CA80: 68 53 74 61 74 75 73 3A 43 41 52 44 49 4E 41 4C hStatus:CARDINAL
01CA90: 3B 0D 0A 09 4D 61 74 63 68 4C 65 66 74 2C 4D 61 ;...MatchLeft,Ma
01CAA0: 74 63 68 52 69 67 68 74 3A 50 53 74 61 74 75 73 tchRight:PStatus
01CAB0: 3B 0D 0A 09 53 61 76 65 50 6F 73 3A 43 41 52 44 ;...SavePos:CARD
01CAC0: 49 4E 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 INAL;..PROCEDURE
01CAD0: 20 50 28 29 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 P():BOOLEAN;..B
01CAE0: 45 47 49 4E 0D 0A 09 28 2A 20 52 65 63 75 72 73 EGIN...(* Recurs
01CAF0: 69 76 65 6C 79 20 6D 61 74 63 68 20 74 68 65 20 ively match the
01CB00: 70 61 74 74 65 72 6E 20 2A 29 0D 0A 09 57 49 54 pattern *)...WIT
01CB10: 48 20 70 5E 20 44 4F 0D 0A 09 20 20 20 20 53 74 H p^ DO... St
01CB20: 61 72 74 50 6F 73 3A 3D 50 6F 73 3B 0D 0A 09 20 artPos:=Pos;...
01CB30: 20 20 20 43 41 53 45 20 4E 54 79 70 65 20 4F 46 CASE NType OF
01CB40: 0D 0A 09 09 53 74 72 69 6E 67 3A 0D 0A 09 09 09 ....String:.....
01CB50: 49 46 20 28 4C 65 6E 2D 50 6F 73 29 3C 54 65 78 IF (Len-Pos)<Tex
01CB60: 74 4C 65 6E 20 54 48 45 4E 20 52 45 54 55 52 4E tLen THEN RETURN
01CB70: 20 46 41 4C 53 45 0D 0A 09 09 09 45 4C 53 45 0D FALSE.....ELSE.
01CB80: 0A 09 09 09 09 69 3A 3D 30 3B 0D 0A 09 09 09 09 .....i:=0;......
01CB90: 57 48 49 4C 45 20 28 69 3C 54 65 78 74 4C 65 6E WHILE (i<TextLen
01CBA0: 29 20 41 4E 44 20 28 73 5B 50 6F 73 5D 3D 54 65 ) AND (s[Pos]=Te
01CBB0: 78 74 5B 69 5D 29 20 44 4F 0D 0A 09 09 09 09 09 xt[i]) DO.......
01CBC0: 49 4E 43 28 50 6F 73 29 3B 0D 0A 09 09 09 09 09 INC(Pos);.......
01CBD0: 49 4E 43 28 69 29 3B 0D 0A 09 09 09 09 09 45 4E INC(i);.......EN
01CBE0: 44 3B 0D 0A 09 09 09 09 49 46 20 69 3D 54 65 78 D;......IF i=Tex
01CBF0: 74 4C 65 6E 20 54 48 45 4E 20 0D 0A 09 09 09 09 tLen THEN ......
01CC00: 74 74 65 72 6E 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A ttern...........
01CC10: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01CC20: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01CC30: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01CC40: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01CC50: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01CC60: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01CC70: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
01CC80: 61 74 63 68 20 73 65 76 65 72 61 6C 20 74 69 6D atch several tim
01CC90: 65 73 20 69 6E 20 61 20 67 69 76 65 6E 0D 0A 09 es in a given...
01CCA0: 70 61 74 74 65 72 6E 2C 20 65 69 74 68 65 72 20 pattern, either
01CCB0: 62 65 63 61 75 73 65 20 6F 66 20 72 65 63 75 72 because of recur
01CCC0: 73 69 6F 6E 2C 20 6F 72 20 62 65 63 61 75 73 65 sion, or because
01CCD0: 20 79 6F 75 20 68 61 76 65 20 63 68 6F 73 65 6E you have chosen
01CCE0: 20 74 6F 0D 0A 09 73 61 76 65 20 73 70 61 63 65 to...save space
01CCF0: 20 62 79 20 75 73 69 6E 67 20 61 20 73 69 6E 67 by using a sing
01CD00: 6C 65 20 6E 6F 64 65 20 69 6E 20 73 65 76 65 72 le node in sever
01CD10: 61 6C 20 64 69 66 66 65 72 65 6E 74 20 70 6C 61 al different pla
01CD20: 63 65 73 20 69 6E 20 61 20 0D 0A 09 70 61 74 74 ces in a ...patt
01CD30: 65 72 6E 2E 0D 0A 0D 0A 2A 29 09 0D 0A 0D 0A 09 ern.....*)......
01CD40: 53 74 61 74 65 3D 52 45 43 4F 52 44 0D 0A 09 09 State=RECORD....
01CD50: 53 74 61 74 75 73 3A 43 41 52 44 49 4E 41 4C 3B Status:CARDINAL;
01CD60: 09 28 2A 09 53 74 61 74 75 73 20 69 73 20 61 20 .(*.Status is a
01CD70: 73 74 61 74 75 73 20 66 69 65 6C 64 20 75 73 65 status field use
01CD80: 64 0D 0A 09 09 09 09 09 09 66 6F 72 20 62 61 63 d........for bac
01CD90: 6B 2D 74 72 61 63 6B 69 6E 67 20 62 79 20 74 68 k-tracking by th
01CDA0: 65 20 6E 6F 64 65 0D 0A 09 09 09 09 09 09 63 6C e node........cl
01CDB0: 61 73 73 65 73 20 41 6C 74 65 72 6E 61 74 69 76 asses Alternativ
01CDC0: 65 73 20 61 6E 64 20 0D 0A 09 09 09 09 09 09 41 es and ........A
01CDD0: 6E 79 4F 66 0D 0A 0D 0A 09 09 09 09 09 09 57 68 nyOf..........Wh
01CDE0: 65 6E 20 77 65 20 61 72 65 20 62 61 63 6B 74 72 en we are backtr
01CDF0: 61 63 6B 69 6E 67 20 74 6F 20 74 72 79 20 0D 0A acking to try ..
01CE00: 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A 09 09 .RETURN TRUE....
01CE10: 09 09 45 4C 53 45 0D 0A 09 09 09 09 09 50 6F 73 ..ELSE.......Pos
01CE20: 3A 3D 50 6F 73 2D 69 3B 0D 0A 09 09 09 09 09 52 :=Pos-i;.......R
01CE30: 45 54 55 52 4E 20 46 41 4C 53 45 3B 0D 0A 09 09 ETURN FALSE;....
01CE40: 09 09 09 45 4E 44 3B 0D 0A 09 09 09 09 45 4E 44 ...END;......END
01CE50: 3B 28 2A 20 6C 6F 6E 67 20 65 6E 6F 75 67 68 20 ;(* long enough
01CE60: 74 6F 20 6D 61 74 63 68 2A 29 0D 0A 09 09 09 7C to match*).....|
01CE70: 20 28 2A 73 74 72 69 6E 67 2A 29 0D 0A 09 09 41 (*string*)....A
01CE80: 6E 79 4F 66 3A 09 4D 61 74 63 68 53 74 61 74 75 nyOf:.MatchStatu
01CE90: 73 3A 3D 30 3B 0D 0A 09 09 09 57 48 49 4C 45 20 s:=0;.....WHILE
01CEA0: 28 4D 61 74 63 68 53 74 61 74 75 73 3C 4D 69 6E (MatchStatus<Min
01CEB0: 43 6F 75 6E 74 29 20 41 4E 44 20 28 73 5B 50 6F Count) AND (s[Po
01CEC0: 73 5D 20 49 4E 20 4D 61 74 63 68 29 20 44 4F 0D s] IN Match) DO.
01CED0: 0A 09 09 09 09 49 4E 43 28 50 6F 73 29 3B 0D 0A .....INC(Pos);..
01CEE0: 09 09 09 09 49 4E 43 28 4D 61 74 63 68 53 74 61 ....INC(MatchSta
01CEF0: 74 75 73 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D tus);......END;.
01CF00: 0A 09 09 09 49 46 20 46 61 73 74 20 54 48 45 4E ....IF Fast THEN
01CF10: 0D 0A 09 09 09 09 57 48 49 4C 45 20 28 4D 61 74 ......WHILE (Mat
01CF20: 63 68 53 74 61 74 75 73 3C 4D 61 78 43 6F 75 6E chStatus<MaxCoun
01CF30: 74 29 20 41 4E 44 20 28 73 5B 50 6F 73 5D 20 49 t) AND (s[Pos] I
01CF40: 4E 20 4D 61 74 63 68 29 20 44 4F 0D 0A 09 09 09 N Match) DO.....
01CF50: 09 09 49 4E 43 28 50 6F 73 29 3B 0D 0A 09 09 09 ..INC(Pos);.....
01CF60: 09 09 49 4E 43 28 4D 61 74 63 68 53 74 61 74 75 ..INC(MatchStatu
01CF70: 73 29 3B 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A s);.......END;..
01CF80: 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 52 45 54 ....END;.....RET
01CF90: 55 52 4E 20 4D 61 74 63 68 53 74 61 74 75 73 3E URN MatchStatus>
01CFA0: 3D 4D 69 6E 43 6F 75 6E 74 3B 0D 0A 09 09 09 7C =MinCount;.....|
01CFB0: 0D 0A 09 09 41 6C 74 65 72 6E 61 74 69 76 65 73 ....Alternatives
01CFC0: 3A 0D 0A 09 09 09 09 4D 61 74 63 68 4C 65 66 74 :......MatchLeft
01CFD0: 3A 3D 50 61 74 74 65 72 6E 28 46 69 72 73 74 2C :=Pattern(First,
01CFE0: 73 2C 50 6F 73 29 0D 0A 09 09 09 09 49 46 20 20 s,Pos)......IF
01CFF0: 4D 61 74 63 68 4C 65 66 74 3C 3E 4E 49 4C 20 54 MatchLeft<>NIL T
01D000: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
01D010: 4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D ODULE ScreenIO;.
01D020: 0A 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 74 68 ...(*.This is th
01D030: 65 20 45 61 72 74 68 20 43 50 45 4D 20 76 65 72 e Earth CPEM ver
01D040: 73 69 6F 6E 20 6F 66 20 53 63 72 65 65 6E 49 4F sion of ScreenIO
01D050: 0D 0A 0D 0A 09 59 6F 75 20 6E 65 65 64 20 72 65 .....You need re
01D060: 76 20 30 2E 32 32 20 6F 72 20 6C 61 74 65 72 20 v 0.22 or later
01D070: 6F 66 20 43 50 45 4D 20 74 6F 20 75 73 65 20 74 of CPEM to use t
01D080: 68 69 73 20 70 72 6F 67 72 61 6D 0D 0A 09 49 74 his program...It
01D090: 20 75 73 65 73 20 69 6E 74 20 31 36 68 20 74 6F uses int 16h to
01D0A0: 20 70 65 72 66 6F 72 6D 20 49 4F 2C 20 73 6F 20 perform IO, so
01D0B0: 79 6F 75 72 20 6D 61 63 68 69 6E 65 20 6D 75 73 your machine mus
01D0C0: 74 20 62 65 20 49 42 4D 20 0D 0A 09 63 6F 6D 70 t be IBM ...comp
01D0D0: 61 74 69 62 6C 65 20 61 74 20 74 68 65 20 42 49 atible at the BI
01D0E0: 4F 53 20 6C 65 76 65 6C 0D 0A 0D 0A 09 54 68 69 OS level.....Thi
01D0F0: 73 20 69 73 20 61 20 73 6C 69 67 68 74 6C 79 20 s is a slightly
01D100: 6D 6F 64 69 66 69 65 64 20 76 65 72 73 69 6F 6E modified version
01D110: 20 6F 66 20 53 63 72 65 65 6E 49 4F 2E 49 42 4D of ScreenIO.IBM
01D120: 20 77 68 69 63 68 20 77 69 6C 6C 0D 0A 09 62 65 which will...be
01D130: 20 61 76 61 69 6C 61 62 6C 65 20 77 68 65 6E 20 available when
01D140: 74 68 65 20 4D 53 44 4F 53 20 76 65 72 73 69 6F the MSDOS versio
01D150: 6E 20 6F 66 20 74 68 65 20 63 6F 6D 70 69 6C 65 n of the compile
01D160: 72 20 69 73 20 72 75 6E 6E 69 6E 67 0D 0A 0D 0A r is running....
01D170: 09 54 68 65 20 64 69 66 66 65 72 65 6E 63 65 20 .The difference
01D180: 69 73 20 74 68 61 74 20 74 68 69 73 20 76 65 72 is that this ver
01D190: 73 69 6F 6E 20 62 75 66 66 65 72 73 20 73 63 72 sion buffers scr
01D1A0: 65 65 6E 20 6F 75 74 70 75 74 20 69 6E 20 6F 72 een output in or
01D1B0: 64 65 72 20 74 6F 0D 0A 09 73 70 65 65 64 20 75 der to...speed u
01D1C0: 70 20 73 63 72 65 65 6E 20 6F 75 74 70 75 74 2C p screen output,
01D1D0: 20 61 73 20 63 68 61 72 61 63 74 65 72 20 61 74 as character at
01D1E0: 20 61 20 74 69 6D 65 20 77 61 73 20 74 6F 6F 20 a time was too
01D1F0: 73 6C 6F 77 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D slow..*)....FROM
01D200: 48 45 4E 20 0D 0A 09 09 09 09 09 4D 61 74 63 68 HEN .......Match
01D210: 53 74 61 74 75 73 3A 3D 31 3B 0D 0A 09 09 09 09 Status:=1;......
01D220: 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A 09 09 .RETURN TRUE....
01D230: 09 09 45 4C 53 45 0D 0A 09 09 09 09 09 0D 0A 09 ..ELSE..........
01D240: 09 09 09 09 4D 61 74 63 68 53 74 61 74 75 73 3A ....MatchStatus:
01D250: 3D 32 3B 0D 0A 09 09 09 09 09 4D 61 74 63 68 4C =2;.......MatchL
01D260: 65 66 74 3A 3D 50 61 74 74 65 72 6E 28 53 65 63 eft:=Pattern(Sec
01D270: 6F 6E 64 2C 73 2C 50 6F 73 29 3B 20 0D 0A 09 09 ond,s,Pos); ....
01D280: 09 09 09 52 45 54 55 52 4E 20 4D 61 74 63 68 4C ...RETURN MatchL
01D290: 65 66 74 3C 3E 4E 49 4C 0D 0A 09 09 09 09 09 45 eft<>NIL.......E
01D2A0: 4E 44 3B 0D 0A 09 09 09 7C 0D 0A 09 09 43 6F 6E ND;.....|....Con
01D2B0: 63 61 74 3A 0D 0A 09 09 09 4D 61 74 63 68 4C 65 cat:.....MatchLe
01D2C0: 66 74 3A 3D 50 61 74 74 65 72 6E 28 46 69 72 73 ft:=Pattern(Firs
01D2D0: 74 2C 73 2C 50 6F 73 29 3B 0D 0A 09 09 09 49 46 t,s,Pos);.....IF
01D2E0: 20 4D 61 74 63 68 4C 65 66 74 3C 3E 4E 49 4C 20 MatchLeft<>NIL
01D2F0: 54 48 45 4E 0D 0A 09 09 09 09 4D 61 74 63 68 53 THEN......MatchS
01D300: 74 61 74 75 73 3A 3D 50 6F 73 3B 0D 0A 09 09 09 tatus:=Pos;.....
01D310: 09 4D 61 74 63 68 52 69 67 68 74 3A 3D 50 61 74 .MatchRight:=Pat
01D320: 74 65 72 6E 28 53 65 63 6F 6E 64 2C 73 2C 50 6F tern(Second,s,Po
01D330: 73 29 3B 0D 0A 09 09 09 09 49 46 20 4D 61 74 63 s);......IF Matc
01D340: 68 52 69 67 68 74 3C 3E 4E 49 4C 20 54 48 45 4E hRight<>NIL THEN
01D350: 0D 0A 09 09 09 09 09 52 45 54 55 52 4E 20 54 52 .......RETURN TR
01D360: 55 45 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 UE.......END;...
01D370: 09 09 09 43 68 61 6E 67 65 64 3A 3D 46 41 4C 53 ...Changed:=FALS
01D380: 45 3B 0D 0A 09 09 09 09 53 61 76 65 50 6F 73 3A E;......SavePos:
01D390: 3D 50 6F 73 3B 0D 0A 09 09 09 09 4C 4F 4F 50 0D =Pos;......LOOP.
01D3A0: 0A 09 09 09 09 09 50 6F 73 3A 3D 53 61 76 65 50 ......Pos:=SaveP
01D3B0: 6F 73 3B 0D 0A 09 09 09 09 09 4D 61 74 63 68 4C os;.......MatchL
01D3C0: 65 66 74 3A 3D 42 61 63 6B 54 72 61 63 6B 28 4D eft:=BackTrack(M
01D3D0: 61 74 63 68 4C 65 66 74 2C 73 2C 50 6F 73 29 3B atchLeft,s,Pos);
01D3E0: 0D 0A 09 09 09 09 09 49 46 20 28 4D 61 74 63 68 .......IF (Match
01D3F0: 4C 65 66 74 3D 4E 49 4C 29 20 4F 52 20 4E 4F 54 Left=NIL) OR NOT
01D400: 20 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 Terminal IMPORT
01D410: 20 43 68 61 72 52 6F 75 74 69 6E 65 2C 43 68 61 CharRoutine,Cha
01D420: 72 45 6E 61 62 6C 65 64 2C 42 6C 69 6E 6B 52 6F rEnabled,BlinkRo
01D430: 75 74 69 6E 65 2C 42 6C 69 6E 6B 45 6E 61 62 6C utine,BlinkEnabl
01D440: 65 64 3B 0D 0A 46 52 4F 4D 20 53 59 53 54 45 4D ed;..FROM SYSTEM
01D450: 20 49 4D 50 4F 52 54 20 41 44 52 2C 53 49 5A 45 IMPORT ADR,SIZE
01D460: 3B 0D 0A 46 52 4F 4D 20 43 50 4D 20 49 4D 50 4F ;..FROM CPM IMPO
01D470: 52 54 20 77 63 63 66 63 2C 42 44 4F 53 3B 0D 0A RT wccfc,BDOS;..
01D480: 46 52 4F 4D 20 49 6E 74 4C 6F 67 69 63 20 49 4D FROM IntLogic IM
01D490: 50 4F 52 54 20 49 41 4E 44 3B 0D 0A 46 52 4F 4D PORT IAND;..FROM
01D4A0: 20 53 79 73 43 61 6C 6C 20 49 4D 50 4F 52 54 20 SysCall IMPORT
01D4B0: 49 6E 74 2C 50 61 63 6B 65 74 2C 52 65 61 64 4F Int,Packet,ReadO
01D4C0: 72 57 72 69 74 65 3B 0D 0A 0D 0A 28 2A 09 53 63 rWrite;....(*.Sc
01D4D0: 72 65 65 6E 20 68 61 6E 64 6C 69 6E 67 20 72 6F reen handling ro
01D4E0: 75 74 69 6E 65 73 20 66 6F 72 20 63 75 72 73 6F utines for curso
01D4F0: 72 20 70 6F 73 69 74 69 6F 6E 2C 20 61 74 74 72 r position, attr
01D500: 69 62 75 74 65 20 65 74 63 0D 0A 0D 0A 09 53 70 ibute etc.....Sp
01D510: 65 63 69 66 69 63 20 74 6F 20 74 68 69 73 20 63 ecific to this c
01D520: 6F 6D 70 69 6C 65 72 2A 29 0D 0A 0D 0A 43 4F 4E ompiler*)....CON
01D530: 53 54 09 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 ST.LogScreenWidt
01D540: 68 3D 38 30 3B 09 28 2A 4C 6F 67 69 63 61 6C 20 h=80;.(*Logical
01D550: 73 63 72 65 65 6E 20 77 69 64 74 68 20 0D 0A 09 screen width ...
01D560: 09 09 09 28 6D 61 6E 79 20 70 65 6F 70 6C 65 20 ...(many people
01D570: 6F 6E 6C 79 20 68 61 76 65 20 38 30 29 2A 29 0D only have 80)*).
01D580: 0A 09 52 6F 77 57 69 64 74 68 3D 38 30 3B 09 09 ..RowWidth=80;..
01D590: 28 2A 77 69 64 74 68 20 6F 66 20 6D 65 6D 6F 72 (*width of memor
01D5A0: 79 20 66 6F 72 20 6F 6E 65 20 72 6F 77 20 0D 0A y for one row ..
01D5B0: 09 09 09 09 28 69 2E 65 2E 20 6E 75 6D 62 65 72 ....(i.e. number
01D5C0: 20 6F 66 20 62 79 74 65 73 2A 29 0D 0A 09 4C 6F of bytes*)...Lo
01D5D0: 67 53 63 72 65 65 6E 44 65 70 74 68 3D 32 34 3B gScreenDepth=24;
01D5E0: 09 09 28 2A 4C 69 6E 65 73 20 6F 6E 20 74 68 65 ..(*Lines on the
01D5F0: 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 68 61 72 screen*)...Char
01D600: 20 43 68 61 6E 67 65 64 20 54 48 45 4E 0D 0A 09 Changed THEN...
01D610: 09 09 09 09 09 45 58 49 54 0D 0A 09 09 09 09 09 .....EXIT.......
01D620: 09 45 4E 44 3B 0D 0A 09 09 09 09 09 4D 61 74 63 .END;.......Matc
01D630: 68 52 69 67 68 74 3A 3D 50 61 74 74 65 72 6E 28 hRight:=Pattern(
01D640: 53 65 63 6F 6E 64 2C 73 2C 50 6F 73 29 0D 0A 09 Second,s,Pos)...
01D650: 09 09 09 09 49 46 20 4D 61 74 63 68 52 69 67 68 ....IF MatchRigh
01D660: 74 3C 3E 4E 49 4C 20 54 48 45 4E 0D 0A 09 09 09 t<>NIL THEN.....
01D670: 09 09 09 52 45 54 55 52 4E 20 54 52 55 45 0D 0A ...RETURN TRUE..
01D680: 09 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 09 ......END;......
01D690: 09 43 68 61 6E 67 65 64 3A 3D 46 41 4C 53 45 3B .Changed:=FALSE;
01D6A0: 0D 0A 09 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 .......END;.....
01D6B0: 09 45 4E 44 3B 0D 0A 09 09 09 50 6F 73 3A 3D 53 .END;.....Pos:=S
01D6C0: 74 61 72 74 50 6F 73 3B 0D 0A 09 09 09 52 45 54 tartPos;.....RET
01D6D0: 55 52 4E 20 46 41 4C 53 45 0D 0A 09 09 09 7C 09 URN FALSE.....|.
01D6E0: 09 09 0D 0A 09 09 52 69 67 68 74 4C 69 6D 69 74 ......RightLimit
01D6F0: 3A 0D 0A 09 09 09 52 45 54 55 52 4E 20 50 6F 73 :.....RETURN Pos
01D700: 3D 4C 65 6E 0D 0A 09 09 09 45 4E 44 3B 20 28 2A =Len.....END; (*
01D710: 43 41 53 45 2A 29 0D 0A 09 09 45 4E 44 20 28 2A CASE*)....END (*
01D720: 57 49 54 48 2A 29 0D 0A 09 45 4E 44 20 50 3B 0D WITH*)...END P;.
01D730: 0A 42 45 47 49 4E 0D 0A 09 49 46 20 50 28 29 20 .BEGIN...IF P()
01D740: 54 48 45 4E 0D 0A 09 09 4E 45 57 28 51 29 3B 0D THEN....NEW(Q);.
01D750: 0A 09 09 57 49 54 48 20 51 5E 20 44 4F 0D 0A 09 ...WITH Q^ DO...
01D760: 09 09 53 74 61 74 75 73 3A 3D 4D 61 74 63 68 53 ..Status:=MatchS
01D770: 74 61 74 75 73 3B 0D 0A 09 09 09 50 61 74 74 65 tatus;.....Patte
01D780: 72 6E 4E 6F 64 65 3A 3D 70 3B 0D 0A 09 09 09 4D rnNode:=p;.....M
01D790: 61 74 63 68 65 64 41 74 3A 3D 53 74 61 72 74 50 atchedAt:=StartP
01D7A0: 6F 73 3B 0D 0A 09 09 09 4D 61 74 63 68 65 64 54 os;.....MatchedT
01D7B0: 6F 3A 3D 50 6F 73 3B 0D 0A 09 09 09 4C 65 66 74 o:=Pos;.....Left
01D7C0: 3A 3D 4D 61 74 63 68 4C 65 66 74 3B 0D 0A 09 09 :=MatchLeft;....
01D7D0: 09 52 69 67 68 74 3A 3D 4D 61 74 63 68 52 69 67 .Right:=MatchRig
01D7E0: 68 74 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 45 ht;.....END;...E
01D7F0: 4C 53 45 0D 0A 09 09 51 3A 3D 4E 49 4C 3B 0D 0A LSE....Q:=NIL;..
01D800: 49 6E 63 72 65 6D 65 6E 74 3D 31 3B 09 28 2A 6E Increment=1;.(*n
01D810: 75 6D 62 65 72 20 6F 66 20 62 79 74 65 73 20 62 umber of bytes b
01D820: 65 74 77 65 65 6E 20 63 68 61 72 61 63 74 65 72 etween character
01D830: 73 2A 29 0D 0A 09 53 63 72 65 65 6E 53 69 7A 65 s*)...ScreenSize
01D840: 3D 38 30 2A 32 34 3B 09 28 2A 6E 75 6D 62 65 72 =80*24;.(*number
01D850: 20 6F 66 20 62 79 74 65 73 20 69 6E 20 73 63 72 of bytes in scr
01D860: 65 65 6E 20 61 72 65 61 2A 29 0D 0A 0D 0A 09 43 een area*).....C
01D870: 52 3D 30 64 78 3B 09 09 09 28 2A 43 61 72 72 69 R=0dx;...(*Carri
01D880: 61 67 65 20 72 65 74 75 72 6E 2A 29 0D 0A 09 4C age return*)...L
01D890: 46 3D 30 61 78 3B 09 09 09 28 2A 4C 69 6E 65 20 F=0ax;...(*Line
01D8A0: 66 65 65 64 2A 29 0D 0A 09 54 41 42 3D 30 39 78 feed*)...TAB=09x
01D8B0: 3B 09 09 28 2A 54 41 42 2A 29 0D 0A 09 42 53 3D ;..(*TAB*)...BS=
01D8C0: 30 38 78 3B 0D 0A 56 41 52 0D 0A 09 42 75 66 66 08x;..VAR...Buff
01D8D0: 65 72 3A 41 52 52 41 59 5B 30 2E 2E 31 32 35 5D er:ARRAY[0..125]
01D8E0: 20 4F 46 20 42 59 54 45 3B 20 28 2A 42 75 66 66 OF BYTE; (*Buff
01D8F0: 65 72 20 66 6F 72 20 75 70 20 74 6F 20 61 20 6C er for up to a l
01D900: 69 6E 65 20 2A 29 0D 0A 09 42 61 73 65 41 64 64 ine *)...BaseAdd
01D910: 72 3A 43 41 52 44 49 4E 41 4C 3D 30 42 30 30 30 r:CARDINAL=0B000
01D920: 68 3B 20 28 2A 73 65 67 20 61 64 64 72 65 73 73 h; (*seg address
01D930: 20 6F 66 20 61 64 61 70 74 65 72 20 2D 20 63 68 of adapter - ch
01D940: 61 6E 67 65 20 66 6F 72 20 63 6F 6C 6F 75 72 2A ange for colour*
01D950: 29 0D 0A 09 42 75 66 66 65 72 52 6F 77 3A 43 41 )...BufferRow:CA
01D960: 52 44 49 4E 41 4C 3B 09 28 2A 52 6F 77 20 42 65 RDINAL;.(*Row Be
01D970: 69 6E 67 20 73 61 76 65 64 20 2A 29 0D 0A 09 42 ing saved *)...B
01D980: 75 66 66 65 72 43 6F 6C 3A 43 41 52 44 49 4E 41 ufferCol:CARDINA
01D990: 4C 3B 09 28 2A 53 74 61 72 74 20 43 6F 6C 75 6D L;.(*Start Colum
01D9A0: 6E 2A 29 0D 0A 09 42 75 66 66 65 72 43 6F 75 6E n*)...BufferCoun
01D9B0: 74 3A 43 41 52 44 49 4E 41 4C 3D 30 3B 20 28 2A t:CARDINAL=0; (*
01D9C0: 45 4E 74 72 69 65 73 20 69 6E 20 62 75 66 66 65 ENtries in buffe
01D9D0: 72 20 2A 29 09 0D 0A 09 41 74 74 72 69 62 75 74 r *)....Attribut
01D9E0: 65 73 3A 43 41 52 44 49 4E 41 4C 3D 37 3B 0D 0A es:CARDINAL=7;..
01D9F0: 09 53 63 72 65 65 6E 50 6F 73 3A 43 41 52 44 49 .ScreenPos:CARDI
01DA00: 09 09 45 4E 44 3B 0D 0A 09 52 45 54 55 52 4E 20 ..END;...RETURN
01DA10: 51 3B 0D 0A 09 45 4E 44 20 50 61 74 74 65 72 6E Q;...END Pattern
01DA20: 3B 0D 0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 ;......PROCEDURE
01DA30: 20 4D 61 74 63 68 50 61 74 74 65 72 6E 28 70 3A MatchPattern(p:
01DA40: 50 4E 6F 64 65 3B 73 3A 41 52 52 41 59 20 4F 46 PNode;s:ARRAY OF
01DA50: 20 43 48 41 52 29 3A 50 53 74 61 74 75 73 3B 0D CHAR):PStatus;.
01DA60: 0A 0D 0A 28 2A 09 4D 61 74 63 68 20 61 20 50 61 ...(*.Match a Pa
01DA70: 74 74 65 72 6E 20 0D 0A 09 70 20 69 73 20 74 68 ttern ...p is th
01DA80: 65 20 72 6F 6F 74 20 6F 66 20 74 68 65 20 70 61 e root of the pa
01DA90: 74 74 65 72 6E 20 74 6F 20 6D 61 74 63 68 0D 0A ttern to match..
01DAA0: 09 73 20 69 73 20 74 68 65 20 74 65 78 74 20 74 .s is the text t
01DAB0: 6F 20 6D 61 74 63 68 0D 0A 0D 0A 09 54 68 65 20 o match.....The
01DAC0: 66 75 6E 63 74 69 6F 6E 20 72 65 74 75 72 6E 73 function returns
01DAD0: 20 74 72 75 65 20 6F 6E 6C 79 20 69 66 20 74 68 true only if th
01DAE0: 65 20 73 74 72 69 6E 67 20 6D 61 74 63 68 65 73 e string matches
01DAF0: 0D 0A 09 63 6F 6D 70 6C 65 74 65 6C 79 2E 0D 0A ...completely...
01DB00: 0D 0A 09 4F 66 20 63 6F 75 72 73 65 2C 20 79 6F ...Of course, yo
01DB10: 75 20 63 61 6E 20 61 6C 77 61 79 73 20 75 73 65 u can always use
01DB20: 64 20 72 65 70 65 61 74 65 64 20 73 65 74 73 20 d repeated sets
01DB30: 6F 66 20 61 6E 79 74 68 69 6E 67 0D 0A 09 61 74 of anything...at
01DB40: 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 61 the beginning a
01DB50: 6E 64 2E 6F 72 20 65 6E 64 20 6F 66 20 61 20 73 nd.or end of a s
01DB60: 74 72 69 6E 67 20 69 6E 20 6F 72 64 65 72 20 74 tring in order t
01DB70: 6F 0D 0A 09 6D 61 74 63 68 20 6F 6E 6C 79 20 70 o...match only p
01DB80: 61 72 74 20 6F 66 20 61 20 73 74 72 69 6E 67 2A art of a string*
01DB90: 29 0D 0A 0D 0A 56 41 52 09 50 6F 73 3A 43 41 52 )....VAR.Pos:CAR
01DBA0: 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 DINAL;..BEGIN...
01DBB0: 50 6F 73 3A 3D 30 3B 0D 0A 09 4C 65 6E 3A 3D 4C Pos:=0;...Len:=L
01DBC0: 65 6E 67 74 68 28 73 29 3B 0D 0A 09 52 45 54 55 ength(s);...RETU
01DBD0: 52 4E 20 50 61 74 74 65 72 6E 28 70 2C 73 2C 50 RN Pattern(p,s,P
01DBE0: 6F 73 29 3B 0D 0A 09 45 4E 44 20 4D 61 74 63 68 os);...END Match
01DBF0: 50 61 74 74 65 72 6E 3B 0D 0A 45 4E 44 20 50 61 Pattern;..END Pa
01DC00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
01DC10: 19 00 01 00 02 09 52 E5 19 00 41 02 00 00 00 02 ......R...A.....
01DC20: 19 00 46 02 00 00 00 02 19 00 42 02 00 00 00 02 ..F.......B.....
01DC30: 19 00 47 02 00 00 00 02 19 00 43 02 00 00 00 02 ..G.......C.....
01DC40: 19 00 48 02 00 00 00 02 19 00 44 02 00 00 00 02 ..H.......D.....
01DC50: 19 00 49 02 00 00 00 02 19 00 45 02 00 00 00 02 ..I.......E.....
01DC60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DC70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DC80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DC90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DCF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01DD00: 4E 41 4C 3B 09 28 2A 6E 65 78 74 20 63 68 61 72 NAL;.(*next char
01DD10: 61 63 74 65 72 20 70 6F 73 69 74 69 6F 6E 20 6F acter position o
01DD20: 6E 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 6F 6C n screen*)...Col
01DD30: 4E 6F 2C 52 6F 77 4E 6F 3A 43 41 52 44 49 4E 41 No,RowNo:CARDINA
01DD40: 4C 3B 09 28 2A 77 68 69 63 68 20 72 65 70 72 65 L;.(*which repre
01DD50: 73 65 6E 74 73 20 74 68 65 20 67 69 76 65 6E 20 sents the given
01DD60: 70 6F 73 69 74 69 6F 6E 2A 29 0D 0A 0D 0A 09 28 position*).....(
01DD70: 2A 09 43 6F 6E 74 72 6F 6C 20 61 74 74 72 69 62 *.Control attrib
01DD80: 75 74 65 73 2A 29 0D 0A 0D 0A 09 48 61 6C 66 49 utes*).....HalfI
01DD90: 6E 74 65 6E 73 69 74 79 3A 42 4F 4F 4C 45 41 4E ntensity:BOOLEAN
01DDA0: 3D 46 41 4C 53 45 3B 09 28 2A 74 72 75 65 20 69 =FALSE;.(*true i
01DDB0: 66 20 69 6E 20 68 61 6C 66 20 69 6E 74 65 6E 73 f in half intens
01DDC0: 69 74 79 20 6D 6F 64 65 2A 29 0D 0A 09 45 6E 68 ity mode*)...Enh
01DDD0: 61 6E 63 65 64 56 69 64 65 6F 3A 42 4F 4F 4C 45 ancedVideo:BOOLE
01DDE0: 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 55 6E 64 65 AN=FALSE;...Unde
01DDF0: 72 4C 69 6E 65 3A 42 4F 4F 4C 45 41 4E 3D 46 41 rLine:BOOLEAN=FA
01DE00: 4C 53 45 3B 09 28 2A 74 72 75 65 20 69 66 20 69 LSE;.(*true if i
01DE10: 6E 20 75 6E 64 65 72 6C 69 6E 65 20 6D 6F 64 65 n underline mode
01DE20: 2A 29 0D 0A 09 49 6E 76 65 72 73 65 56 69 64 65 *)...InverseVide
01DE30: 6F 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B o:BOOLEAN=FALSE;
01DE40: 0D 0A 09 42 6C 69 6E 6B 69 6E 67 3A 42 4F 4F 4C ...Blinking:BOOL
01DE50: 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 69 2C 6A EAN=FALSE;...i,j
01DE60: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 63 68 3A :CARDINAL;...ch:
01DE70: 43 48 41 52 3B 0D 0A 0D 0A 28 2A 09 54 68 65 20 CHAR;....(*.The
01DE80: 6E 65 78 74 20 66 65 77 20 72 6F 75 74 69 6E 65 next few routine
01DE90: 73 20 68 61 6E 64 6C 65 20 74 68 65 20 63 75 72 s handle the cur
01DEA0: 73 6F 72 0D 0A 0D 0A 09 57 61 73 55 6E 64 65 72 sor.....WasUnder
01DEB0: 4C 69 6E 65 64 20 69 73 20 74 72 75 65 20 69 66 Lined is true if
01DEC0: 20 74 68 65 20 63 68 61 72 61 63 74 65 72 20 75 the character u
01DED0: 6E 64 65 72 20 74 68 65 20 63 75 72 73 6F 72 0D nder the cursor.
01DEE0: 0A 09 73 74 61 72 74 65 64 20 6F 75 74 20 75 6E ..started out un
01DEF0: 64 65 72 6C 69 6E 65 64 0D 0A 09 0D 0A 09 54 69 derlined......Ti
01DF00: 77 4E 6F 29 20 4F 52 20 28 42 75 66 66 65 72 43 wNo) OR (BufferC
01DF10: 6F 6C 2A 32 2B 42 75 66 66 65 72 43 6F 75 6E 74 ol*2+BufferCount
01DF20: 3C 3E 32 2A 43 6F 6C 4E 6F 29 0D 0A 09 09 4F 52 <>2*ColNo)....OR
01DF30: 20 28 42 75 66 66 65 72 43 6F 75 6E 74 3D 31 32 (BufferCount=12
01DF40: 36 29 20 54 48 45 4E 20 0D 0A 09 09 46 6C 75 73 6) THEN ....Flus
01DF50: 68 42 75 66 66 65 72 3B 0D 0A 09 09 45 4E 44 3B hBuffer;....END;
01DF60: 0D 0A 09 49 46 20 42 75 66 66 65 72 43 6F 75 6E ...IF BufferCoun
01DF70: 74 3D 30 20 54 48 45 4E 0D 0A 09 09 42 75 66 66 t=0 THEN....Buff
01DF80: 65 72 52 6F 77 3A 3D 52 6F 77 4E 6F 3B 0D 0A 09 erRow:=RowNo;...
01DF90: 09 42 75 66 66 65 72 43 6F 6C 3A 3D 43 6F 6C 4E .BufferCol:=ColN
01DFA0: 6F 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 42 75 66 o;....END;...Buf
01DFB0: 66 65 72 5B 42 75 66 66 65 72 43 6F 75 6E 74 5D fer[BufferCount]
01DFC0: 3A 3D 4F 52 44 28 63 68 29 3B 0D 0A 09 49 4E 43 :=ORD(ch);...INC
01DFD0: 28 42 75 66 66 65 72 43 6F 75 6E 74 29 3B 0D 0A (BufferCount);..
01DFE0: 09 42 75 66 66 65 72 5B 42 75 66 66 65 72 43 6F .Buffer[BufferCo
01DFF0: 75 6E 74 5D 3A 3D 41 74 74 72 69 62 75 74 65 73 unt]:=Attributes
01E000: 3B 0D 0A 09 49 4E 43 28 42 75 66 66 65 72 43 6F ;...INC(BufferCo
01E010: 75 6E 74 29 3B 0D 0A 09 53 63 72 65 65 6E 50 6F unt);...ScreenPo
01E020: 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B 43 68 61 s:=ScreenPos+Cha
01E030: 72 49 6E 63 72 65 6D 65 6E 74 3B 0D 0A 09 49 4E rIncrement;...IN
01E040: 43 28 43 6F 6C 4E 6F 29 3B 0D 0A 09 49 46 20 43 C(ColNo);...IF C
01E050: 6F 6C 4E 6F 3E 3D 4C 6F 67 53 63 72 65 65 6E 57 olNo>=LogScreenW
01E060: 69 64 74 68 20 54 48 45 4E 0D 0A 09 09 49 46 20 idth THEN....IF
01E070: 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 72 65 65 6E RowNo<(LogScreen
01E080: 44 65 70 74 68 2D 31 29 20 54 48 45 4E 0D 0A 09 Depth-1) THEN...
01E090: 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 ..INC(RowNo);...
01E0A0: 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 09 45 ..ColNo:=0;....E
01E0B0: 4C 53 45 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E LSE.....DEC(ColN
01E0C0: 6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 o);.....DEC(Scre
01E0D0: 65 6E 50 6F 73 29 3B 0D 0A 09 09 09 45 4E 44 3B enPos);.....END;
01E0E0: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 50 ....END;...END P
01E0F0: 75 74 61 6E 64 49 6E 63 3B 0D 0A 0D 0A 50 52 4F utandInc;....PRO
01E100: 6D 65 54 6F 43 68 61 6E 67 65 20 69 73 20 61 20 meToChange is a
01E110: 63 6F 75 6E 74 65 72 20 74 68 61 74 20 64 65 74 counter that det
01E120: 65 72 6D 69 6E 65 73 20 77 68 65 6E 20 74 68 65 ermines when the
01E130: 20 63 75 72 73 6F 72 20 73 68 6F 75 6C 64 0D 0A cursor should..
01E140: 09 62 65 20 63 68 61 6E 67 65 64 20 66 72 6F 6D .be changed from
01E150: 20 69 74 73 20 63 75 72 72 65 6E 74 20 76 61 6C its current val
01E160: 75 65 20 74 6F 20 69 74 73 20 6E 65 67 61 74 69 ue to its negati
01E170: 76 65 2C 20 74 6F 20 61 6C 6C 6F 77 20 62 6C 69 ve, to allow bli
01E180: 6E 6B 69 6E 67 0D 0A 2A 29 0D 0A 56 41 52 09 57 nking..*)..VAR.W
01E190: 61 73 55 6E 64 65 72 4C 69 6E 65 64 3A 42 4F 4F asUnderLined:BOO
01E1A0: 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 54 69 LEAN=FALSE;...Ti
01E1B0: 6D 65 54 6F 43 68 61 6E 67 65 3A 49 4E 54 45 47 meToChange:INTEG
01E1C0: 45 52 3D 30 3B 0D 0A 09 4F 75 74 70 75 74 45 6E ER=0;...OutputEn
01E1D0: 61 62 6C 65 64 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A abled:BOOLEAN;..
01E1E0: 09 70 3A 50 61 63 6B 65 74 3B 0D 0A 28 2A 09 42 .p:Packet;..(*.B
01E1F0: 6C 69 6E 6B 20 63 75 72 73 6F 72 20 2D 20 64 65 link cursor - de
01E200: 63 72 65 6D 65 6E 74 20 74 69 6D 65 72 2C 20 69 crement timer, i
01E210: 66 20 6E 65 67 61 74 69 76 65 20 72 65 73 65 74 f negative reset
01E220: 20 61 6E 64 0D 0A 09 63 68 61 6E 67 65 20 74 6F and...change to
01E230: 70 20 62 69 74 20 6F 66 20 63 68 61 72 61 63 74 p bit of charact
01E240: 65 72 20 75 6E 64 65 72 20 63 75 72 73 6F 72 2A er under cursor*
01E250: 29 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 )..PROCEDURE Set
01E260: 43 75 72 73 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A Cursor;..BEGIN..
01E270: 28 2A 09 4D 6F 76 65 20 63 75 72 73 6F 72 20 74 (*.Move cursor t
01E280: 6F 20 63 75 72 72 65 6E 74 20 73 63 72 65 65 6E o current screen
01E290: 20 70 6F 73 69 74 69 6F 6E 20 2A 29 0D 0A 0D 0A position *)....
01E2A0: 09 57 49 54 48 20 70 20 44 4F 0D 0A 09 09 41 58 .WITH p DO....AX
01E2B0: 3A 3D 30 32 30 30 68 3B 0D 0A 09 09 44 58 3A 3D :=0200h;....DX:=
01E2C0: 32 35 36 2A 52 6F 77 4E 6F 2B 43 6F 6C 4E 6F 3B 256*RowNo+ColNo;
01E2D0: 0D 0A 09 09 42 58 3A 3D 30 3B 0D 0A 09 09 45 4E ....BX:=0;....EN
01E2E0: 44 3B 0D 0A 09 49 6E 74 28 70 29 3B 0D 0A 09 0D D;...Int(p);....
01E2F0: 0A 0D 0A 28 2A 09 57 61 73 55 6E 64 65 72 4C 69 ...(*.WasUnderLi
01E300: 43 45 44 55 52 45 20 57 72 69 74 65 28 63 68 3A CEDURE Write(ch:
01E310: 43 48 41 52 29 3B 0D 0A 28 2A 09 57 72 69 74 65 CHAR);..(*.Write
01E320: 20 61 20 63 68 61 72 61 63 74 65 72 0D 0A 0D 0A a character....
01E330: 09 54 68 69 73 20 72 6F 75 74 69 6E 65 20 69 73 .This routine is
01E340: 20 75 73 65 64 20 62 79 20 74 65 72 6D 69 6E 61 used by termina
01E350: 6C 20 77 68 65 6E 20 74 68 69 73 20 76 65 72 73 l when this vers
01E360: 69 6F 6E 20 6F 66 20 53 63 72 65 65 6E 49 4F 20 ion of ScreenIO
01E370: 0D 0A 09 69 73 20 69 6E 20 75 73 65 20 62 65 63 ...is in use bec
01E380: 61 75 73 65 20 61 20 66 6C 61 67 20 69 73 20 73 ause a flag is s
01E390: 65 74 20 62 79 20 74 68 65 20 69 6E 69 74 69 61 et by the initia
01E3A0: 6C 69 73 61 74 69 6F 6E 20 6F 66 20 74 68 69 73 lisation of this
01E3B0: 20 6D 6F 64 75 6C 65 20 0D 0A 09 74 6F 67 65 74 module ...toget
01E3C0: 68 65 72 20 77 69 74 68 20 74 68 65 20 61 64 64 her with the add
01E3D0: 72 65 73 73 20 6F 66 20 74 68 69 73 20 72 6F 75 ress of this rou
01E3E0: 74 69 6E 65 0D 0A 0D 0A 2A 29 0D 0A 42 45 47 49 tine....*)..BEGI
01E3F0: 4E 0D 0A 20 20 20 20 49 46 20 4F 75 74 70 75 74 N.. IF Output
01E400: 45 6E 61 62 6C 65 64 20 54 48 45 4E 0D 0A 09 43 Enabled THEN...C
01E410: 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 09 49 46 learCursor;...IF
01E420: 20 63 68 3E 30 37 66 78 20 54 48 45 4E 20 63 68 ch>07fx THEN ch
01E430: 3A 3D 43 48 52 28 4F 52 44 28 63 68 29 2D 31 32 :=CHR(ORD(ch)-12
01E440: 38 29 20 45 4E 44 3B 0D 0A 09 49 46 20 63 68 3D 8) END;...IF ch=
01E450: 43 52 20 54 48 45 4E 0D 0A 09 09 53 63 72 65 65 CR THEN....Scree
01E460: 6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2D nPos:=ScreenPos-
01E470: 43 6F 6C 4E 6F 3B 0D 0A 09 09 43 6F 6C 4E 6F 3A ColNo;....ColNo:
01E480: 3D 30 3B 0D 0A 09 45 4C 53 49 46 20 63 68 3D 4C =0;...ELSIF ch=L
01E490: 46 20 54 48 45 4E 0D 0A 09 09 49 46 20 52 6F 77 F THEN....IF Row
01E4A0: 4E 6F 3C 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 No<(LogScreenDep
01E4B0: 74 68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 49 th-1) THEN.....I
01E4C0: 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 NC(RowNo);.....S
01E4D0: 63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E creenPos:=Screen
01E4E0: 50 6F 73 2B 52 6F 77 57 69 64 74 68 3B 0D 0A 09 Pos+RowWidth;...
01E4F0: 09 09 45 4E 44 0D 0A 09 45 4C 53 49 46 20 63 68 ..END...ELSIF ch
01E500: 6E 65 64 3A 3D 53 63 72 65 65 6E 5B 53 63 72 65 ned:=Screen[Scre
01E510: 65 6E 50 6F 73 5D 3E 3D 38 30 78 3B 0D 0A 09 53 enPos]>=80x;...S
01E520: 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D creen[ScreenPos]
01E530: 3A 3D 43 48 52 28 4F 52 44 28 53 63 72 65 65 6E :=CHR(ORD(Screen
01E540: 5B 53 63 72 65 65 6E 50 6F 73 5D 29 2B 31 32 38 [ScreenPos])+128
01E550: 29 3B 2A 29 0D 0A 09 45 4E 44 20 53 65 74 43 75 );*)...END SetCu
01E560: 72 73 6F 72 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 rsor;....PROCEDU
01E570: 52 45 20 46 6C 75 73 68 42 75 66 66 65 72 3B 0D RE FlushBuffer;.
01E580: 0A 56 41 52 09 70 3A 50 61 63 6B 65 74 3B 0D 0A .VAR.p:Packet;..
01E590: 42 45 47 49 4E 0D 0A 09 49 46 20 42 75 66 66 65 BEGIN...IF Buffe
01E5A0: 72 43 6F 75 6E 74 3E 30 20 54 48 45 4E 20 0D 0A rCount>0 THEN ..
01E5B0: 09 09 57 49 54 48 20 70 20 44 4F 0D 0A 09 09 09 ..WITH p DO.....
01E5C0: 49 6E 74 4E 6F 3A 3D 42 75 66 66 65 72 43 6F 75 IntNo:=BufferCou
01E5D0: 6E 74 3B 0D 0A 09 09 09 41 58 3A 3D 41 44 52 28 nt;.....AX:=ADR(
01E5E0: 42 75 66 66 65 72 29 3B 0D 0A 09 09 09 42 58 3A Buffer);.....BX:
01E5F0: 3D 42 75 66 66 65 72 52 6F 77 2A 31 36 30 2B 42 =BufferRow*160+B
01E600: 75 66 66 65 72 43 6F 6C 2A 32 3B 0D 0A 09 09 09 ufferCol*2;.....
01E610: 43 58 3A 3D 42 61 73 65 41 64 64 72 3B 0D 0A 09 CX:=BaseAddr;...
01E620: 09 09 52 65 61 64 4F 72 57 72 69 74 65 28 54 52 ..ReadOrWrite(TR
01E630: 55 45 2C 70 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D UE,p);.....END;.
01E640: 0A 09 09 45 4E 44 3B 0D 0A 09 42 75 66 66 65 72 ...END;...Buffer
01E650: 43 6F 75 6E 74 3A 3D 30 3B 0D 0A 09 53 65 74 43 Count:=0;...SetC
01E660: 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 20 46 6C 75 ursor;...END Flu
01E670: 73 68 42 75 66 66 65 72 3B 0D 0A 0D 0A 50 52 4F shBuffer;....PRO
01E680: 43 45 44 55 52 45 20 42 6C 69 6E 6B 43 75 72 73 CEDURE BlinkCurs
01E690: 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 28 2A 09 09 or;..BEGIN..(*..
01E6A0: 44 6F 65 73 20 6E 6F 74 68 69 6E 67 20 28 79 65 Does nothing (ye
01E6B0: 74 29 20 6F 6E 20 45 61 72 74 68 20 63 61 72 64 t) on Earth card
01E6C0: 20 76 65 72 73 69 6F 6E 20 0D 0A 09 44 45 43 28 version ...DEC(
01E6D0: 54 69 6D 65 54 6F 43 68 61 6E 67 65 29 3B 0D 0A TimeToChange);..
01E6E0: 09 49 46 20 54 69 6D 65 54 6F 43 68 61 6E 67 65 .IF TimeToChange
01E6F0: 3C 30 20 54 48 45 4E 0D 0A 09 09 54 69 6D 65 54 <0 THEN....TimeT
01E700: 3D 42 53 20 54 48 45 4E 0D 0A 09 09 49 46 20 43 =BS THEN....IF C
01E710: 6F 6C 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09 olNo>0 THEN.....
01E720: 44 45 43 28 43 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 DEC(ColNo);.....
01E730: 44 45 43 28 53 63 72 65 65 6E 50 6F 73 29 3B 0D DEC(ScreenPos);.
01E740: 0A 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49 46 20 ....END...ELSIF
01E750: 63 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 09 4C ch=TAB THEN....L
01E760: 4F 4F 50 0D 0A 09 09 09 49 46 20 43 6F 6C 4E 6F OOP.....IF ColNo
01E770: 3E 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68 >=LogScreenWidth
01E780: 2D 31 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 -1 THEN EXIT END
01E790: 3B 0D 0A 09 09 09 50 75 74 61 6E 64 49 6E 63 28 ;.....PutandInc(
01E7A0: 27 20 27 29 3B 0D 0A 09 09 09 49 46 20 49 41 4E ' ');.....IF IAN
01E7B0: 44 28 43 6F 6C 4E 6F 2C 37 29 3D 30 20 54 48 45 D(ColNo,7)=0 THE
01E7C0: 4E 20 45 58 49 54 20 45 4E 44 0D 0A 09 09 09 45 N EXIT END.....E
01E7D0: 4E 44 20 28 2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4C ND (*LOOP*)...EL
01E7E0: 53 45 0D 0A 09 09 49 46 20 55 6E 64 65 72 4C 69 SE....IF UnderLi
01E7F0: 6E 65 20 4F 52 20 45 6E 68 61 6E 63 65 64 56 69 ne OR EnhancedVi
01E800: 64 65 6F 20 4F 52 20 42 6C 69 6E 6B 69 6E 67 20 deo OR Blinking
01E810: 4F 52 20 49 6E 76 65 72 73 65 56 69 64 65 6F 20 OR InverseVideo
01E820: 54 48 45 4E 0D 0A 09 09 09 41 74 74 72 69 62 75 THEN.....Attribu
01E830: 74 65 73 3A 3D 31 3B 0D 0A 09 09 09 45 4E 44 3B tes:=1;.....END;
01E840: 0D 0A 09 09 50 75 74 61 6E 64 49 6E 63 28 63 68 ....PutandInc(ch
01E850: 29 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 4E 6F 74 );....END; (*Not
01E860: 20 43 52 20 6F 72 20 4C 46 20 6F 72 20 54 41 42 CR or LF or TAB
01E870: 2A 29 0D 0A 09 41 74 74 72 69 62 75 74 65 73 3A *)...Attributes:
01E880: 3D 37 3B 0D 0A 09 53 65 74 43 75 72 73 6F 72 3B =7;...SetCursor;
01E890: 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45 4E 44 ...END;.. END
01E8A0: 20 57 72 69 74 65 3B 0D 0A 0D 0A 50 52 4F 43 45 Write;....PROCE
01E8B0: 44 55 52 45 20 53 63 72 65 65 6E 43 6F 6E 74 72 DURE ScreenContr
01E8C0: 6F 6C 28 73 3A 45 64 69 74 73 29 3B 0D 0A 0D 0A ol(s:Edits);....
01E8D0: 28 2A 09 09 50 65 72 66 6F 72 6D 20 61 20 73 63 (*..Perform a sc
01E8E0: 72 65 65 6E 20 63 6F 6E 74 72 6F 6C 20 6F 70 65 reen control ope
01E8F0: 72 61 74 69 6F 6E 0D 0A 0D 0A 09 09 4D 61 79 20 ration......May
01E900: 6F 43 68 61 6E 67 65 3A 3D 39 30 30 3B 09 28 2A oChange:=900;.(*
01E910: 63 68 61 6E 67 65 20 74 6F 20 63 68 61 6E 67 65 change to change
01E920: 20 62 6C 69 6E 6B 20 72 61 74 65 2A 29 0D 0A 09 blink rate*)...
01E930: 09 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F .Screen[ScreenPo
01E940: 73 5D 3A 3D 43 48 52 28 4F 52 44 28 53 63 72 65 s]:=CHR(ORD(Scre
01E950: 65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 29 2B 31 en[ScreenPos])+1
01E960: 32 38 29 0D 0A 09 09 45 4E 44 0D 0A 2A 29 0D 0A 28)....END..*)..
01E970: 09 46 6C 75 73 68 42 75 66 66 65 72 3B 0D 0A 09 .FlushBuffer;...
01E980: 45 4E 44 20 42 6C 69 6E 6B 43 75 72 73 6F 72 3B END BlinkCursor;
01E990: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C ....PROCEDURE Cl
01E9A0: 65 61 72 43 75 72 73 6F 72 3B 0D 0A 42 45 47 49 earCursor;..BEGI
01E9B0: 4E 0D 0A 28 2A 09 41 6C 73 6F 20 75 6E 2D 69 6D N..(*.Also un-im
01E9C0: 70 6C 65 6D 65 6E 74 65 64 0D 0A 0D 0A 09 49 46 plemented.....IF
01E9D0: 20 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 (Screen[ScreenP
01E9E0: 6F 73 5D 3E 37 66 78 29 3C 3E 57 61 73 55 6E 64 os]>7fx)<>WasUnd
01E9F0: 65 72 4C 69 6E 65 64 20 54 48 45 4E 0D 0A 09 09 erLined THEN....
01EA00: 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 Screen[ScreenPos
01EA10: 5D 3A 3D 43 48 52 28 4F 52 44 28 53 63 72 65 65 ]:=CHR(ORD(Scree
01EA20: 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 29 2B 31 32 n[ScreenPos])+12
01EA30: 38 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 61 8);....END;...Wa
01EA40: 73 55 6E 64 65 72 4C 69 6E 65 64 3A 3D 46 41 4C sUnderLined:=FAL
01EA50: 53 45 3B 0D 0A 2A 29 0D 0A 09 45 4E 44 20 43 6C SE;..*)...END Cl
01EA60: 65 61 72 43 75 72 73 6F 72 3B 0D 0A 09 09 09 0D earCursor;......
01EA70: 0A 09 09 09 0D 0A 50 52 4F 43 45 44 55 52 45 20 ......PROCEDURE
01EA80: 47 6F 74 6F 78 79 28 78 2C 79 3A 43 41 52 44 49 Gotoxy(x,y:CARDI
01EA90: 4E 41 4C 29 3B 09 09 0D 0A 0D 0A 28 2A 09 09 50 NAL);......(*..P
01EAA0: 6F 73 69 74 69 6F 6E 20 74 6F 20 67 69 76 65 6E osition to given
01EAB0: 20 63 6F 6F 72 64 69 6E 61 74 65 73 0D 0A 09 09 coordinates....
01EAC0: 74 6F 70 20 6C 65 66 74 20 69 73 20 61 6C 77 61 top left is alwa
01EAD0: 79 73 20 30 2C 30 20 0D 0A 0D 0A 09 09 78 20 69 ys 0,0 ......x i
01EAE0: 73 20 63 6F 6C 75 6D 6E 2C 20 79 20 69 73 20 72 s column, y is r
01EAF0: 6F 77 0D 0A 0D 0A 09 09 41 20 27 53 74 61 6E 64 ow......A 'Stand
01EB00: 6E 65 65 64 20 61 6C 74 65 72 61 74 69 6F 6E 20 need alteration
01EB10: 66 6F 72 20 76 61 72 69 6F 75 73 20 6D 61 63 68 for various mach
01EB20: 69 6E 65 73 2A 29 0D 0A 42 45 47 49 4E 0D 0A 20 ines*)..BEGIN..
01EB30: 20 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62 IF OutputEnab
01EB40: 6C 65 64 20 54 48 45 4E 0D 0A 09 46 6C 75 73 68 led THEN...Flush
01EB50: 42 75 66 66 65 72 3B 0D 0A 09 43 6C 65 61 72 43 Buffer;...ClearC
01EB60: 75 72 73 6F 72 3B 0D 0A 09 43 41 53 45 20 73 20 ursor;...CASE s
01EB70: 4F 46 0D 0A 09 44 69 6D 3A 48 61 6C 66 49 6E 74 OF...Dim:HalfInt
01EB80: 65 6E 73 69 74 79 3A 3D 54 52 55 45 7C 0D 0A 09 ensity:=TRUE|...
01EB90: 42 72 69 67 68 74 3A 09 48 61 6C 66 49 6E 74 65 Bright:.HalfInte
01EBA0: 6E 73 69 74 79 3A 3D 46 41 4C 53 45 0D 0A 09 09 nsity:=FALSE....
01EBB0: 45 6E 68 61 6E 63 65 64 56 69 64 65 6F 3A 3D 54 EnhancedVideo:=T
01EBC0: 52 55 45 7C 0D 0A 09 4E 6F 72 6D 61 6C 3A 09 48 RUE|...Normal:.H
01EBD0: 61 6C 66 49 6E 74 65 6E 73 69 74 79 3A 3D 46 41 alfIntensity:=FA
01EBE0: 4C 53 45 3B 0D 0A 09 09 45 6E 68 61 6E 63 65 64 LSE;....Enhanced
01EBF0: 56 69 64 65 6F 3A 3D 46 41 4C 53 45 3B 0D 0A 09 Video:=FALSE;...
01EC00: 09 49 6E 76 65 72 73 65 56 69 64 65 6F 3A 3D 46 .InverseVideo:=F
01EC10: 41 4C 53 45 3B 0D 0A 09 09 42 6C 69 6E 6B 69 6E ALSE;....Blinkin
01EC20: 67 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 55 6E 64 g:=FALSE;....Und
01EC30: 65 72 4C 69 6E 65 3A 3D 46 41 4C 53 45 7C 0D 0A erLine:=FALSE|..
01EC40: 09 49 6E 76 65 72 73 65 3A 49 6E 76 65 72 73 65 .Inverse:Inverse
01EC50: 56 69 64 65 6F 3A 3D 54 52 55 45 7C 0D 0A 09 42 Video:=TRUE|...B
01EC60: 6C 69 6E 6B 3A 42 6C 69 6E 6B 69 6E 67 3A 3D 54 link:Blinking:=T
01EC70: 52 55 45 7C 0D 0A 09 53 74 61 72 74 47 72 61 70 RUE|...StartGrap
01EC80: 68 2C 45 6E 64 47 72 61 70 68 3A 28 2A 64 6F 20 h,EndGraph:(*do
01EC90: 6E 6F 74 68 69 6E 67 2A 29 7C 0D 0A 09 44 65 6C nothing*)|...Del
01ECA0: 43 68 61 72 3A 28 2A 4D 6F 76 65 20 72 65 73 74 Char:(*Move rest
01ECB0: 20 6F 66 20 6C 69 6E 65 20 75 70 20 6F 6E 65 2C of line up one,
01ECC0: 20 61 64 64 20 62 6C 61 6E 6B 20 74 6F 20 65 6E add blank to en
01ECD0: 64 2A 29 0D 0A 09 09 69 3A 3D 43 6F 6C 4E 6F 3B d*)....i:=ColNo;
01ECE0: 0D 0A 09 09 46 4F 52 20 6A 3A 3D 43 6F 6C 4E 6F ....FOR j:=ColNo
01ECF0: 20 54 4F 20 52 6F 77 57 69 64 74 68 2D 32 20 44 TO RowWidth-2 D
01ED00: 61 72 64 27 20 53 63 72 65 65 6E 20 69 73 20 38 ard' Screen is 8
01ED10: 30 20 62 79 20 32 34 2E 20 54 68 65 20 6C 69 6D 0 by 24. The lim
01ED20: 69 74 20 69 73 20 73 65 74 20 62 79 0D 0A 09 09 it is set by....
01ED30: 74 68 65 20 74 65 72 6D 69 6E 61 6C 20 64 65 66 the terminal def
01ED40: 69 6E 69 74 69 6F 6E 20 66 69 6C 65 09 2A 29 0D inition file.*).
01ED50: 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F .BEGIN.. IF O
01ED60: 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45 utputEnabled THE
01ED70: 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B N...ClearCursor;
01ED80: 0D 0A 09 43 6F 6C 4E 6F 3A 3D 78 3B 0D 0A 09 52 ...ColNo:=x;...R
01ED90: 6F 77 4E 6F 3A 3D 79 3B 0D 0A 09 53 63 72 65 65 owNo:=y;...Scree
01EDA0: 6E 50 6F 73 3A 3D 43 6F 6C 4E 6F 2B 52 6F 77 4E nPos:=ColNo+RowN
01EDB0: 6F 2A 43 68 61 72 49 6E 63 72 65 6D 65 6E 74 2A o*CharIncrement*
01EDC0: 52 6F 77 57 69 64 74 68 3B 0D 0A 09 49 46 20 53 RowWidth;...IF S
01EDD0: 63 72 65 65 6E 50 6F 73 3E 3D 53 63 72 65 65 6E creenPos>=Screen
01EDE0: 53 69 7A 65 20 54 48 45 4E 0D 0A 09 09 43 6F 6C Size THEN....Col
01EDF0: 4E 6F 3A 3D 30 3B 0D 0A 09 09 52 6F 77 4E 6F 3A No:=0;....RowNo:
01EE00: 3D 30 3B 0D 0A 09 09 53 63 72 65 65 6E 50 6F 73 =0;....ScreenPos
01EE10: 3A 3D 30 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 :=0;....END;...E
01EE20: 4E 44 3B 0D 0A 20 20 20 20 46 6C 75 73 68 42 75 ND;.. FlushBu
01EE30: 66 66 65 72 3B 0D 0A 20 20 20 20 45 4E 44 20 47 ffer;.. END G
01EE40: 6F 74 6F 78 79 3B 0D 0A 0D 0A 50 52 4F 43 45 44 otoxy;....PROCED
01EE50: 55 52 45 20 50 75 74 61 6E 64 49 6E 63 28 63 68 URE PutandInc(ch
01EE60: 3A 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A 09 6F 75 :CHAR);....(*.ou
01EE70: 74 70 75 74 20 61 20 63 68 61 72 61 63 74 65 72 tput a character
01EE80: 20 61 6E 64 20 69 6E 63 72 65 6D 65 6E 74 20 70 and increment p
01EE90: 6F 69 6E 74 65 72 73 2A 29 0D 0A 0D 0A 42 45 47 ointers*)....BEG
01EEA0: 49 4E 0D 0A 09 49 46 20 42 75 66 66 65 72 43 6F IN...IF BufferCo
01EEB0: 75 6E 74 3D 30 20 54 48 45 4E 0D 0A 09 09 42 75 unt=0 THEN....Bu
01EEC0: 66 66 65 72 52 6F 77 3A 3D 52 6F 77 4E 6F 3B 0D fferRow:=RowNo;.
01EED0: 0A 09 09 42 75 66 66 65 72 43 6F 6C 3A 3D 43 6F ...BufferCol:=Co
01EEE0: 6C 4E 6F 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 lNo;....END;...I
01EEF0: 46 20 28 42 75 66 66 65 72 52 6F 77 3C 3E 52 6F F (BufferRow<>Ro
01EF00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
01EF10: 1A 00 01 00 02 09 52 E5 1A 00 41 02 00 00 00 02 ......R...A.....
01EF20: 1A 00 46 02 00 00 00 02 1A 00 42 02 00 00 00 02 ..F.......B.....
01EF30: 1A 00 47 02 00 00 00 02 1A 00 43 02 00 00 00 02 ..G.......C.....
01EF40: 1A 00 48 02 00 00 00 02 1A 00 44 02 00 00 00 02 ..H.......D.....
01EF50: 1A 00 49 02 00 00 00 02 1A 00 45 02 00 00 00 02 ..I.......E.....
01EF60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EF70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EF80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EF90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01EFF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01F000: 4F 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 6A 2B 31 O.....ColNo:=j+1
01F010: 3B 0D 0A 09 09 09 53 65 74 43 75 72 73 6F 72 3B ;.....SetCursor;
01F020: 0D 0A 09 09 09 57 49 54 48 20 70 20 44 4F 0D 0A .....WITH p DO..
01F030: 09 09 09 09 41 58 3A 3D 38 30 30 68 3B 0D 0A 09 ....AX:=800h;...
01F040: 09 09 09 42 58 3A 3D 30 3B 0D 0A 09 09 09 09 49 ...BX:=0;......I
01F050: 6E 74 28 70 29 3B 09 28 2A 52 65 61 64 20 63 68 nt(p);.(*Read ch
01F060: 61 72 61 63 74 65 72 20 2A 29 0D 0A 09 09 09 09 aracter *)......
01F070: 63 68 3A 3D 43 48 52 28 43 41 52 44 49 4E 41 4C ch:=CHR(CARDINAL
01F080: 28 41 58 29 29 3B 0D 0A 09 09 09 09 44 45 43 28 (AX));......DEC(
01F090: 43 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 09 53 65 74 ColNo);......Set
01F0A0: 43 75 72 73 6F 72 3B 0D 0A 09 09 09 09 42 58 3A Cursor;......BX:
01F0B0: 3D 37 3B 0D 0A 09 09 09 09 41 58 3A 3D 30 39 30 =7;......AX:=090
01F0C0: 30 48 2B 4F 52 44 28 63 68 29 3B 0D 0A 09 09 09 0H+ORD(ch);.....
01F0D0: 09 43 58 3A 3D 31 3B 0D 0A 09 09 09 09 49 6E 74 .CX:=1;......Int
01F0E0: 28 70 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A (p);......END;..
01F0F0: 09 09 09 45 4E 44 3B 0D 0A 09 09 43 6F 6C 4E 6F ...END;....ColNo
01F100: 3A 3D 52 6F 77 57 69 64 74 68 2D 31 3B 0D 0A 09 :=RowWidth-1;...
01F110: 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A 09 09 57 .SetCursor;....W
01F120: 49 54 48 20 70 20 44 4F 0D 0A 09 09 09 41 58 3A ITH p DO.....AX:
01F130: 3D 30 39 32 30 68 3B 0D 0A 09 09 09 42 58 3A 3D =0920h;.....BX:=
01F140: 37 3B 0D 0A 09 09 09 43 58 3A 3D 31 3B 0D 0A 09 7;.....CX:=1;...
01F150: 09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 09 45 4E ..Int(p);.....EN
01F160: 44 3B 0D 0A 09 09 43 6F 6C 4E 6F 3A 3D 69 3B 0D D;....ColNo:=i;.
01F170: 0A 09 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A 09 ...SetCursor;...
01F180: 09 7C 0D 0A 09 44 65 6C 4C 69 6E 65 3A 28 2A 4D .|...DelLine:(*M
01F190: 6F 76 65 20 72 65 73 74 20 6F 66 20 73 63 72 65 ove rest of scre
01F1A0: 65 6E 20 75 70 20 61 20 6C 69 6E 65 2C 20 61 64 en up a line, ad
01F1B0: 64 20 62 6C 61 6E 6B 20 6C 69 6E 65 20 61 74 20 d blank line at
01F1C0: 65 6E 64 2A 29 0D 0A 09 09 57 49 54 48 20 70 20 end*)....WITH p
01F1D0: 44 4F 0D 0A 09 09 09 41 58 3A 3D 30 36 30 31 68 DO.....AX:=0601h
01F1E0: 3B 0D 0A 09 09 09 43 58 3A 3D 32 35 36 2A 52 6F ;.....CX:=256*Ro
01F1F0: 77 4E 6F 3B 0D 0A 09 09 09 44 58 3A 3D 32 35 36 wNo;.....DX:=256
01F200: 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 63 72 65 65 owNo);.....Scree
01F210: 6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B nPos:=ScreenPos+
01F220: 52 6F 77 57 69 64 74 68 3B 0D 0A 09 09 09 45 4E RowWidth;.....EN
01F230: 44 7C 0D 0A 09 4D 6F 76 65 55 70 3A 49 46 20 52 D|...MoveUp:IF R
01F240: 6F 77 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09 owNo>0 THEN.....
01F250: 44 45 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 DEC(RowNo);.....
01F260: 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 ScreenPos:=Scree
01F270: 6E 50 6F 73 2D 52 6F 77 57 69 64 74 68 3B 0D 0A nPos-RowWidth;..
01F280: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 ...END;....END;
01F290: 28 2A 43 41 53 45 2A 29 0D 0A 09 53 65 74 43 75 (*CASE*)...SetCu
01F2A0: 72 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 rsor;...END;..
01F2B0: 20 20 45 4E 44 20 53 63 72 65 65 6E 43 6F 6E 74 END ScreenCont
01F2C0: 72 6F 6C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 rol;..PROCEDURE
01F2D0: 53 63 72 6F 6C 6C 57 69 6E 64 6F 77 55 70 28 53 ScrollWindowUp(S
01F2E0: 74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 tartofWindow,End
01F2F0: 6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 ofWindow:CARDINA
01F300: 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 L);..BEGIN..
01F310: 49 46 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 IF OutputEnabled
01F320: 20 41 4E 44 20 28 53 74 61 72 74 6F 66 57 69 6E AND (StartofWin
01F330: 64 6F 77 3C 45 6E 64 6F 66 57 69 6E 64 6F 77 29 dow<EndofWindow)
01F340: 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 THEN...ClearCur
01F350: 73 6F 72 3B 0D 0A 09 57 49 54 48 20 70 20 44 4F sor;...WITH p DO
01F360: 0D 0A 09 09 41 58 3A 3D 30 37 30 31 68 0D 0A 09 ....AX:=0701h...
01F370: 09 43 58 3A 3D 32 35 36 2A 53 74 61 72 74 6F 66 .CX:=256*Startof
01F380: 57 69 6E 64 6F 77 3B 0D 0A 09 09 44 58 3A 3D 32 Window;....DX:=2
01F390: 35 36 2A 45 6E 64 6F 66 57 69 6E 64 6F 77 2B 4C 56*EndofWindow+L
01F3A0: 6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D 31 3B ogScreenWidth-1;
01F3B0: 0D 0A 09 09 42 58 3A 3D 30 37 30 30 68 3B 0D 0A ....BX:=0700h;..
01F3C0: 09 09 45 4E 44 3B 0D 0A 09 49 6E 74 28 70 29 3B ..END;...Int(p);
01F3D0: 0D 0A 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A 09 ...SetCursor;...
01F3E0: 45 4E 44 3B 0D 0A 20 20 20 20 45 4E 44 20 53 63 END;.. END Sc
01F3F0: 72 6F 6C 6C 57 69 6E 64 6F 77 55 70 3B 0D 0A 50 rollWindowUp;..P
01F400: 2A 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 68 *(LogScreenDepth
01F410: 2D 31 29 2B 4C 6F 67 53 63 72 65 65 6E 57 69 64 -1)+LogScreenWid
01F420: 74 68 2D 31 3B 0D 0A 09 09 09 42 58 3A 3D 30 37 th-1;.....BX:=07
01F430: 30 30 68 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 00h;.....END;...
01F440: 09 49 6E 74 28 70 29 3B 0D 0A 09 09 7C 0D 0A 09 .Int(p);....|...
01F450: 49 6E 73 43 68 61 72 3A 28 2A 4D 6F 76 65 20 72 InsChar:(*Move r
01F460: 65 73 74 20 6F 66 20 6C 69 6E 65 20 75 70 20 6F est of line up o
01F470: 6E 65 2C 20 61 64 64 20 62 6C 61 6E 6B 20 74 6F ne, add blank to
01F480: 20 65 6E 64 2A 29 0D 0A 09 09 69 3A 3D 43 6F 6C end*)....i:=Col
01F490: 4E 6F 3B 0D 0A 09 09 46 4F 52 20 6A 3A 3D 52 6F No;....FOR j:=Ro
01F4A0: 77 57 69 64 74 68 2D 32 20 54 4F 20 43 6F 6C 4E wWidth-2 TO ColN
01F4B0: 6F 20 42 59 20 2D 31 20 44 4F 0D 0A 09 09 09 43 o BY -1 DO.....C
01F4C0: 6F 6C 4E 6F 3A 3D 6A 3B 0D 0A 09 09 09 53 65 74 olNo:=j;.....Set
01F4D0: 43 75 72 73 6F 72 3B 0D 0A 09 09 09 57 49 54 48 Cursor;.....WITH
01F4E0: 20 70 20 44 4F 0D 0A 09 09 09 09 41 58 3A 3D 38 p DO......AX:=8
01F4F0: 30 30 68 3B 0D 0A 09 09 09 09 42 58 3A 3D 30 3B 00h;......BX:=0;
01F500: 0D 0A 09 09 09 09 49 6E 74 28 70 29 3B 09 28 2A ......Int(p);.(*
01F510: 52 65 61 64 20 63 68 61 72 61 63 74 65 72 20 2A Read character *
01F520: 29 0D 0A 09 09 09 09 63 68 3A 3D 43 48 52 28 43 )......ch:=CHR(C
01F530: 41 52 44 49 4E 41 4C 28 41 58 29 29 3B 0D 0A 09 ARDINAL(AX));...
01F540: 09 09 09 49 4E 43 28 43 6F 6C 4E 6F 29 3B 0D 0A ...INC(ColNo);..
01F550: 09 09 09 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A ....SetCursor;..
01F560: 09 09 09 09 42 58 3A 3D 37 3B 0D 0A 09 09 09 09 ....BX:=7;......
01F570: 41 58 3A 3D 30 39 30 30 48 2B 4F 52 44 28 63 68 AX:=0900H+ORD(ch
01F580: 29 3B 0D 0A 09 09 09 09 43 58 3A 3D 31 3B 0D 0A );......CX:=1;..
01F590: 09 09 09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 09 ....Int(p);.....
01F5A0: 09 45 4E 44 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A .END;.....END;..
01F5B0: 09 09 43 6F 6C 4E 6F 3A 3D 69 3B 0D 0A 09 09 53 ..ColNo:=i;....S
01F5C0: 65 74 43 75 72 73 6F 72 3B 0D 0A 09 09 57 49 54 etCursor;....WIT
01F5D0: 48 20 70 20 44 4F 0D 0A 09 09 09 41 58 3A 3D 30 H p DO.....AX:=0
01F5E0: 39 32 30 68 3B 0D 0A 09 09 09 42 58 3A 3D 37 3B 920h;.....BX:=7;
01F5F0: 0D 0A 09 09 09 43 58 3A 3D 31 3B 0D 0A 09 09 09 .....CX:=1;.....
01F600: 52 4F 43 45 44 55 52 45 20 53 63 72 6F 6C 6C 57 ROCEDURE ScrollW
01F610: 69 6E 64 6F 77 44 6F 77 6E 28 53 74 61 72 74 6F indowDown(Starto
01F620: 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 69 6E fWindow,EndofWin
01F630: 64 6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A dow:CARDINAL);..
01F640: 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F 75 BEGIN.. IF Ou
01F650: 74 70 75 74 45 6E 61 62 6C 65 64 20 41 4E 44 20 tputEnabled AND
01F660: 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 3C 45 (StartofWindow<E
01F670: 6E 64 6F 66 57 69 6E 64 6F 77 29 20 54 48 45 4E ndofWindow) THEN
01F680: 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D ...ClearCursor;.
01F690: 0A 09 57 49 54 48 20 70 20 44 4F 0D 0A 09 09 41 ..WITH p DO....A
01F6A0: 58 3A 3D 30 36 30 31 68 0D 0A 09 09 43 58 3A 3D X:=0601h....CX:=
01F6B0: 32 35 36 2A 53 74 61 72 74 6F 66 57 69 6E 64 6F 256*StartofWindo
01F6C0: 77 3B 0D 0A 09 09 44 58 3A 3D 32 35 36 2A 45 6E w;....DX:=256*En
01F6D0: 64 6F 66 57 69 6E 64 6F 77 2B 4C 6F 67 53 63 72 dofWindow+LogScr
01F6E0: 65 65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 09 42 eenWidth-1;....B
01F6F0: 58 3A 3D 30 37 30 30 68 3B 0D 0A 09 09 45 4E 44 X:=0700h;....END
01F700: 3B 0D 0A 09 49 6E 74 28 70 29 3B 0D 0A 09 53 65 ;...Int(p);...Se
01F710: 74 43 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D tCursor;...END;.
01F720: 0A 20 20 20 20 45 4E 44 20 53 63 72 6F 6C 6C 57 . END ScrollW
01F730: 69 6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 50 52 indowDown;....PR
01F740: 4F 43 45 44 55 52 45 20 4C 6F 61 64 54 65 72 6D OCEDURE LoadTerm
01F750: 43 6F 64 65 28 46 3A 46 69 6C 65 4E 61 6D 65 29 Code(F:FileName)
01F760: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 28 2A 6E 6F 74 ;..BEGIN...(*not
01F770: 20 69 6D 70 6C 65 6D 65 6E 74 65 64 20 69 6E 20 implemented in
01F780: 74 68 69 73 20 76 65 72 73 69 6F 6E 2A 29 0D 0A this version*)..
01F790: 09 45 4E 44 20 4C 6F 61 64 54 65 72 6D 43 6F 64 .END LoadTermCod
01F7A0: 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C e;..PROCEDURE Cl
01F7B0: 69 70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43 ip(x1,y1,x2,y2:C
01F7C0: 41 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E ARDINAL);..BEGIN
01F7D0: 0D 0A 09 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D 65 ...(*not impleme
01F7E0: 6E 74 65 64 20 69 6E 20 74 68 69 73 20 76 65 72 nted in this ver
01F7F0: 73 69 6F 6E 2A 29 0D 0A 09 45 4E 44 20 43 6C 69 sion*)...END Cli
01F800: 49 6E 74 28 70 29 3B 0D 0A 09 09 09 45 4E 44 3B Int(p);.....END;
01F810: 0D 0A 09 09 53 65 74 43 75 72 73 6F 72 3B 0D 0A ....SetCursor;..
01F820: 09 09 7C 0D 0A 09 49 6E 73 4C 69 6E 65 3A 28 2A ..|...InsLine:(*
01F830: 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 73 63 72 Move rest of scr
01F840: 65 65 6E 20 75 70 20 61 20 6C 69 6E 65 2C 20 61 een up a line, a
01F850: 64 64 20 62 6C 61 6E 6B 20 6C 69 6E 65 20 61 74 dd blank line at
01F860: 20 65 6E 64 2A 29 0D 0A 09 09 57 49 54 48 20 70 end*)....WITH p
01F870: 20 44 4F 0D 0A 09 09 09 41 58 3A 3D 30 37 30 31 DO.....AX:=0701
01F880: 68 3B 0D 0A 09 09 09 43 58 3A 3D 32 35 36 2A 52 h;.....CX:=256*R
01F890: 6F 77 4E 6F 3B 0D 0A 09 09 09 44 58 3A 3D 32 35 owNo;.....DX:=25
01F8A0: 36 2A 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 6*(LogScreenDept
01F8B0: 68 2D 31 29 2B 4C 6F 67 53 63 72 65 65 6E 57 69 h-1)+LogScreenWi
01F8C0: 64 74 68 2D 31 3B 0D 0A 09 09 09 42 58 3A 3D 30 dth-1;.....BX:=0
01F8D0: 37 30 30 68 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 700h;.....END;..
01F8E0: 09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 7C 0D 0A ..Int(p);....|..
01F8F0: 09 44 65 6C 45 6F 6C 3A 49 46 20 43 6F 6C 4E 6F .DelEol:IF ColNo
01F900: 2B 31 3C 52 6F 77 57 69 64 74 68 20 54 48 45 4E +1<RowWidth THEN
01F910: 0D 0A 09 09 09 57 49 54 48 20 70 20 44 4F 0D 0A .....WITH p DO..
01F920: 09 09 09 09 41 58 3A 3D 30 39 32 30 68 3B 0D 0A ....AX:=0920h;..
01F930: 09 09 09 09 42 58 3A 3D 37 3B 0D 0A 09 09 09 09 ....BX:=7;......
01F940: 43 58 3A 3D 52 6F 77 57 69 64 74 68 2D 43 6F 6C CX:=RowWidth-Col
01F950: 4E 6F 2D 31 3B 0D 0A 09 09 09 09 49 6E 74 28 70 No-1;......Int(p
01F960: 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 );......END;....
01F970: 09 45 4E 44 3B 0D 0A 09 09 7C 0D 0A 09 44 65 6C .END;....|...Del
01F980: 45 6F 73 3A 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D Eos:(*not implem
01F990: 65 6E 74 65 64 20 2D 20 62 75 74 20 73 69 6D 69 ented - but simi
01F9A0: 6C 61 72 20 74 6F 20 70 72 65 76 69 6F 75 73 2A lar to previous*
01F9B0: 29 7C 0D 0A 09 43 6C 65 61 72 53 63 72 65 65 6E )|...ClearScreen
01F9C0: 3A 0D 0A 09 09 09 28 2A 4F 73 62 6F 72 6E 65 20 :.....(*Osborne
01F9D0: 73 70 65 63 69 66 69 63 20 2D 20 68 6F 6D 65 20 specific - home
01F9E0: 73 63 72 65 65 6E 20 61 6E 64 20 63 75 72 73 6F screen and curso
01F9F0: 72 20 0D 0A 09 09 09 20 70 6F 73 69 74 69 6F 6E r ..... position
01FA00: 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44 p;..PROCEDURE D
01FA10: 72 61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C rawBox(x1,y1,x2,
01FA20: 79 32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D y2:CARDINAL);...
01FA30: 0A 28 2A 09 09 64 72 61 77 20 61 20 62 6F 78 20 .(*..draw a box
01FA40: 66 6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E 20 for a window on
01FA50: 74 68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09 09 the screen......
01FA60: 78 31 2C 79 31 20 20 69 73 20 74 68 65 20 6C 6F x1,y1 is the lo
01FA70: 77 65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72 0D wer left corner.
01FA80: 0A 09 09 78 32 2C 79 32 20 20 69 73 20 75 70 70 ...x2,y2 is upp
01FA90: 65 72 20 72 69 67 68 74 20 63 6F 72 6E 65 72 2A er right corner*
01FAA0: 29 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 )..VAR.i:CARDINA
01FAB0: 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 L;..BEGIN.. I
01FAC0: 46 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 F OutputEnabled
01FAD0: 54 48 45 4E 0D 0A 09 47 6F 74 6F 78 79 28 78 31 THEN...Gotoxy(x1
01FAE0: 2C 79 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F ,y1);...ScreenCo
01FAF0: 6E 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68 ntrol(StartGraph
01FB00: 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 );...ScreenContr
01FB10: 6F 6C 28 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A 09 ol(CornerLL);...
01FB20: 46 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 FOR i:=x1+1 TO x
01FB30: 32 2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 2-1 DO ScreenCon
01FB40: 74 72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 trol(Horizontal)
01FB50: 20 45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F END;...ScreenCo
01FB60: 6E 74 72 6F 6C 28 43 6F 72 6E 65 72 4C 52 29 3B ntrol(CornerLR);
01FB70: 0D 0A 09 47 6F 74 6F 78 79 28 78 31 2C 79 32 29 ...Gotoxy(x1,y2)
01FB80: 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F ;...ScreenContro
01FB90: 6C 28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46 l(CornerUL);...F
01FBA0: 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 OR i:=x1+1 TO x2
01FBB0: 2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 -1 DO ScreenCont
01FBC0: 72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 rol(Horizontal)
01FBD0: 45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E END;...ScreenCon
01FBE0: 74 72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D trol(CornerUR);.
01FBF0: 0A 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F ..FOR i:=y2+1 TO
01FC00: 20 61 73 20 73 74 6F 72 65 64 20 69 6E 20 42 49 as stored in BI
01FC10: 4F 53 20 74 61 62 6C 65 73 2A 29 0D 0A 09 09 0D OS tables*).....
01FC20: 0A 09 09 09 28 2A 6E 6F 77 20 63 6C 65 61 72 20 ....(*now clear
01FC30: 64 69 73 70 6C 61 79 20 6D 65 6D 6F 72 79 2A 29 display memory*)
01FC40: 0D 0A 09 09 57 49 54 48 20 70 20 44 4F 0D 0A 09 ....WITH p DO...
01FC50: 09 09 41 58 3A 3D 30 36 30 30 68 3B 0D 0A 09 09 ..AX:=0600h;....
01FC60: 09 43 58 3A 3D 30 3B 0D 0A 09 09 09 44 58 3A 3D .CX:=0;.....DX:=
01FC70: 32 35 36 2A 28 4C 6F 67 53 63 72 65 65 6E 44 65 256*(LogScreenDe
01FC80: 70 74 68 2D 31 29 2B 4C 6F 67 53 63 72 65 65 6E pth-1)+LogScreen
01FC90: 57 69 64 74 68 2D 31 3B 0D 0A 09 09 09 42 58 3A Width-1;.....BX:
01FCA0: 3D 30 37 30 30 68 3B 0D 0A 09 09 09 45 4E 44 3B =0700h;.....END;
01FCB0: 0D 0A 09 09 49 6E 74 28 70 29 3B 0D 0A 09 09 53 ....Int(p);....S
01FCC0: 63 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 09 creenPos:=0;....
01FCD0: 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 09 52 6F 77 ColNo:=0;....Row
01FCE0: 4E 6F 3A 3D 30 0D 0A 09 09 7C 0D 0A 0D 0A 09 28 No:=0....|.....(
01FCF0: 2A 20 54 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20 * The following
01FD00: 67 72 61 70 68 69 63 73 20 63 68 61 72 61 63 74 graphics charact
01FD10: 65 72 73 20 77 69 6C 6C 20 6E 65 65 64 20 74 6F ers will need to
01FD20: 20 62 65 20 6D 6F 64 69 66 69 65 64 20 66 6F 72 be modified for
01FD30: 20 0D 0A 09 20 20 20 64 69 66 66 65 72 65 6E 74 ... different
01FD40: 20 64 69 73 70 6C 61 79 20 73 79 73 74 65 6D 73 display systems
01FD50: 2A 29 0D 0A 0D 0A 09 48 6F 72 69 7A 6F 6E 74 61 *).....Horizonta
01FD60: 6C 3A 50 75 74 61 6E 64 49 6E 63 28 30 63 64 78 l:PutandInc(0cdx
01FD70: 29 7C 0D 0A 09 56 65 72 74 69 63 61 6C 3A 50 75 )|...Vertical:Pu
01FD80: 74 61 6E 64 49 6E 63 28 30 62 61 78 29 7C 0D 0A tandInc(0bax)|..
01FD90: 09 43 6F 72 6E 65 72 4C 4C 3A 50 75 74 61 6E 64 .CornerLL:Putand
01FDA0: 49 6E 63 28 30 63 38 78 29 7C 0D 0A 09 43 6F 72 Inc(0c8x)|...Cor
01FDB0: 6E 65 72 55 4C 3A 50 75 74 61 6E 64 49 6E 63 28 nerUL:PutandInc(
01FDC0: 30 63 39 78 29 7C 0D 0A 09 43 6F 72 6E 65 72 55 0c9x)|...CornerU
01FDD0: 52 3A 50 75 74 61 6E 64 49 6E 63 28 30 62 62 78 R:PutandInc(0bbx
01FDE0: 29 7C 0D 0A 09 43 6F 72 6E 65 72 4C 52 3A 50 75 )|...CornerLR:Pu
01FDF0: 74 61 6E 64 49 6E 63 28 30 62 63 78 29 7C 0D 0A tandInc(0bcx)|..
01FE00: 20 79 31 2D 31 20 20 44 4F 0D 0A 09 09 47 6F 74 y1-1 DO....Got
01FE10: 6F 78 79 28 78 32 2C 69 29 3B 0D 0A 09 09 53 63 oxy(x2,i);....Sc
01FE20: 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 reenControl(Vert
01FE30: 69 63 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A ical);....END;..
01FE40: 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 .FOR i:=y2+1 TO
01FE50: 79 31 2D 31 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 y1-1 DO....Gotox
01FE60: 79 28 78 31 2C 69 29 3B 0D 0A 09 09 53 63 72 65 y(x1,i);....Scre
01FE70: 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 63 enControl(Vertic
01FE80: 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 al);....END;...E
01FE90: 4E 44 3B 0D 0A 20 20 20 20 45 4E 44 20 44 72 61 ND;.. END Dra
01FEA0: 77 42 6F 78 3B 0D 0A 50 52 4F 43 45 44 55 52 45 wBox;..PROCEDURE
01FEB0: 20 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 28 OutputToScreen(
01FEC0: 4F 6E 3A 42 4F 4F 4C 45 41 4E 29 3B 0D 0A 42 45 On:BOOLEAN);..BE
01FED0: 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E 61 62 GIN...OutputEnab
01FEE0: 6C 65 64 3A 3D 4F 6E 0D 0A 09 45 4E 44 20 4F 75 led:=On...END Ou
01FEF0: 74 70 75 74 54 6F 53 63 72 65 65 6E 3B 09 0D 0A tputToScreen;...
01FF00: 42 45 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E BEGIN...OutputEn
01FF10: 61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D 0A 09 28 abled:=TRUE;...(
01FF20: 2A 09 53 65 74 20 75 70 20 50 43 47 20 43 68 61 *.Set up PCG Cha
01FF30: 72 61 63 74 65 72 73 2A 29 0D 0A 09 53 63 72 65 racters*)...Scre
01FF40: 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 70 2E 49 6E enPos:=0;...p.In
01FF50: 74 4E 6F 3A 3D 31 36 3B 09 28 2A 69 6E 74 65 72 tNo:=16;.(*inter
01FF60: 72 75 70 74 20 66 6F 72 20 76 69 64 65 6F 20 6F rupt for video o
01FF70: 6E 20 38 30 38 38 2A 29 09 0D 0A 09 42 6C 69 6E n 8088*)....Blin
01FF80: 6B 52 6F 75 74 69 6E 65 3A 3D 42 6C 69 6E 6B 43 kRoutine:=BlinkC
01FF90: 75 72 73 6F 72 3B 0D 0A 09 42 6C 69 6E 6B 45 6E ursor;...BlinkEn
01FFA0: 61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D 0A 09 53 abled:=TRUE;...S
01FFB0: 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 43 6C 65 creenControl(Cle
01FFC0: 61 72 53 63 72 65 65 6E 29 3B 0D 0A 09 43 6F 6C arScreen);...Col
01FFD0: 4E 6F 3A 3D 30 3B 0D 0A 09 52 6F 77 4E 6F 3A 3D No:=0;...RowNo:=
01FFE0: 30 3B 0D 0A 09 43 68 61 72 52 6F 75 74 69 6E 65 0;...CharRoutine
01FFF0: 3A 3D 57 72 69 74 65 3B 0D 0A 09 43 68 61 72 45 :=Write;...CharE
020000: 09 53 74 61 72 74 78 79 2C 4D 69 64 64 6C 65 58 .Startxy,MiddleX
020010: 59 2C 45 6E 64 58 59 3A 28 2A 63 75 72 73 6F 72 Y,EndXY:(*cursor
020020: 20 61 64 64 72 65 73 73 69 6E 67 20 2D 20 6E 6F addressing - no
020030: 74 20 72 65 71 75 69 72 65 64 2A 29 7C 0D 0A 09 t required*)|...
020040: 52 69 6E 67 42 65 6C 6C 3A 69 3A 3D 42 44 4F 53 RingBell:i:=BDOS
020050: 28 77 63 63 66 63 2C 37 29 7C 0D 0A 09 4D 6F 76 (wccfc,7)|...Mov
020060: 65 4C 65 66 74 3A 49 46 20 43 6F 6C 4E 6F 3E 30 eLeft:IF ColNo>0
020070: 20 54 48 45 4E 20 0D 0A 09 09 09 44 45 43 28 43 THEN .....DEC(C
020080: 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 olNo);.....DEC(S
020090: 63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C creenPos);....EL
0200A0: 53 49 46 20 52 6F 77 4E 6F 3E 30 20 54 48 45 4E SIF RowNo>0 THEN
0200B0: 0D 0A 09 09 09 44 45 43 28 52 6F 77 4E 6F 29 3B .....DEC(RowNo);
0200C0: 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 4C 6F 67 53 .....ColNo:=LogS
0200D0: 63 72 65 65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 creenWidth-1;...
0200E0: 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C ..ScreenPos:=Col
0200F0: 4E 6F 2B 52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 No+RowNo*RowWidt
020100: 68 3B 0D 0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F h;.....END|...Mo
020110: 76 65 52 69 67 68 74 3A 49 46 20 43 6F 6C 4E 6F veRight:IF ColNo
020120: 3C 28 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68 <(LogScreenWidth
020130: 2D 31 29 20 54 48 45 4E 20 0D 0A 09 09 09 49 4E -1) THEN .....IN
020140: 43 28 43 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 49 4E C(ColNo);.....IN
020150: 43 28 53 63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 C(ScreenPos);...
020160: 09 45 4C 53 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F .ELSIF RowNo<(Lo
020170: 67 53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 20 gScreenDepth-1)
020180: 54 48 45 4E 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D THEN.....ColNo:=
020190: 30 3B 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 0;.....INC(RowNo
0201A0: 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F 73 );.....ScreenPos
0201B0: 3A 3D 52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 :=RowNo*RowWidth
0201C0: 3B 0D 0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 ;.....END|...Mov
0201D0: 65 44 6F 77 6E 3A 49 46 20 52 6F 77 4E 6F 3C 28 eDown:IF RowNo<(
0201E0: 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 68 2D 31 LogScreenDepth-1
0201F0: 29 20 54 48 45 4E 0D 0A 09 09 09 49 4E 43 28 52 ) THEN.....INC(R
020200: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
020210: 1B 00 01 00 02 09 52 E5 1B 00 41 02 00 00 00 02 ......R...A.....
020220: 1B 00 46 02 00 00 00 02 1B 00 42 02 00 00 00 02 ..F.......B.....
020230: 1B 00 47 02 00 00 00 02 1B 00 43 02 00 00 00 02 ..G.......C.....
020240: 1B 00 48 02 00 00 00 02 1B 00 44 02 00 00 00 02 ..H.......D.....
020250: 1B 00 49 02 00 00 00 02 1B 00 45 02 00 00 00 02 ..I.......E.....
020260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
020270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
020280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
020290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0202F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
020300: 6E 61 62 6C 65 64 3A 3D 54 52 55 45 3B 09 0D 0A nabled:=TRUE;...
020310: 09 53 63 72 65 65 6E 57 69 64 74 68 3A 3D 4C 6F .ScreenWidth:=Lo
020320: 67 53 63 72 65 65 6E 57 69 64 74 68 3B 0D 0A 09 gScreenWidth;...
020330: 53 63 72 65 65 6E 44 65 70 74 68 3A 3D 4C 6F 67 ScreenDepth:=Log
020340: 53 63 72 65 65 6E 44 65 70 74 68 3B 0D 0A 09 45 ScreenDepth;...E
020350: 4E 44 20 53 63 72 65 65 6E 49 4F 2E 0D 0A 1A 1A ND ScreenIO.....
020360: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
020370: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
020380: 65 20 72 6F 6F 74 20 6F 66 20 74 68 65 20 70 61 e root of the pa
020390: 74 74 65 72 6E 20 74 6F 20 6D 61 74 63 68 0D 0A ttern to match..
0203A0: 09 73 20 69 73 20 74 68 65 20 74 65 78 74 20 74 .s is the text t
0203B0: 6F 20 6D 61 74 63 68 0D 0A 0D 0A 09 54 68 65 20 o match.....The
0203C0: 66 75 6E 63 74 69 6F 6E 20 72 65 74 75 72 6E 73 function returns
0203D0: 20 74 72 75 65 20 6F 6E 6C 79 20 69 66 20 74 68 true only if th
0203E0: 65 20 73 74 72 69 6E 67 20 6D 61 74 63 68 65 73 e string matches
0203F0: 0D 0A 09 63 6F 6D 70 6C 65 74 65 6C 79 2E 0D 0A ...completely...
020400: 0D 0A 09 4F 66 20 63 6F 75 72 73 65 2C 20 79 6F ...Of course, yo
020410: 75 20 63 61 6E 20 61 6C 77 61 79 73 20 75 73 65 u can always use
020420: 64 20 72 65 70 65 61 74 65 64 20 73 65 74 73 20 d repeated sets
020430: 6F 66 20 61 6E 79 74 68 69 6E 67 0D 0A 09 61 74 of anything...at
020440: 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 61 the beginning a
020450: 6E 64 2E 6F 72 20 65 6E 64 20 6F 66 20 61 20 73 nd.or end of a s
020460: 74 72 69 6E 67 20 69 6E 20 6F 72 64 65 72 20 74 tring in order t
020470: 6F 0D 0A 09 6D 61 74 63 68 20 6F 6E 6C 79 20 70 o...match only p
020480: 61 72 74 20 6F 66 20 61 20 73 74 72 69 6E 67 2A art of a string*
020490: 29 0D 0A 0D 0A 56 41 52 09 50 6F 73 3A 43 41 52 )....VAR.Pos:CAR
0204A0: 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E 0D 0A 09 DINAL;..BEGIN...
0204B0: 50 6F 73 3A 3D 30 3B 0D 0A 09 4C 65 6E 3A 3D 4C Pos:=0;...Len:=L
0204C0: 65 6E 67 74 68 28 73 29 3B 0D 0A 09 52 45 54 55 ength(s);...RETU
0204D0: 52 4E 20 50 61 74 74 65 72 6E 28 70 2C 73 2C 50 RN Pattern(p,s,P
0204E0: 6F 73 29 3B 0D 0A 09 45 4E 44 20 4D 61 74 63 68 os);...END Match
0204F0: 50 61 74 74 65 72 6E 3B 0D 0A 45 4E 44 20 50 61 Pattern;..END Pa
020500: 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 69 OLEAN=FALSE;...i
020510: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 0D 0A 28 2A :CARDINAL;....(*
020520: 09 54 68 65 20 6E 65 78 74 20 66 65 77 20 72 6F .The next few ro
020530: 75 74 69 6E 65 73 20 68 61 6E 64 6C 65 20 74 68 utines handle th
020540: 65 20 63 75 72 73 6F 72 0D 0A 0D 0A 09 57 61 73 e cursor.....Was
020550: 55 6E 64 65 72 4C 69 6E 65 64 20 69 73 20 74 72 UnderLined is tr
020560: 75 65 20 69 66 20 74 68 65 20 63 68 61 72 61 63 ue if the charac
020570: 74 65 72 20 75 6E 64 65 72 20 74 68 65 20 63 75 ter under the cu
020580: 72 73 6F 72 0D 0A 09 73 74 61 72 74 65 64 20 6F rsor...started o
020590: 75 74 20 75 6E 64 65 72 6C 69 6E 65 64 0D 0A 09 ut underlined...
0205A0: 0D 0A 09 54 69 6D 65 54 6F 43 68 61 6E 67 65 20 ...TimeToChange
0205B0: 69 73 20 61 20 63 6F 75 6E 74 65 72 20 74 68 61 is a counter tha
0205C0: 74 20 64 65 74 65 72 6D 69 6E 65 73 20 77 68 65 t determines whe
0205D0: 6E 20 74 68 65 20 63 75 72 73 6F 72 20 73 68 6F n the cursor sho
0205E0: 75 6C 64 0D 0A 09 62 65 20 63 68 61 6E 67 65 64 uld...be changed
0205F0: 20 66 72 6F 6D 20 69 74 73 20 63 75 72 72 65 6E from its curren
020600: 74 20 76 61 6C 75 65 20 74 6F 20 69 74 73 20 6E t value to its n
020610: 65 67 61 74 69 76 65 2C 20 74 6F 20 61 6C 6C 6F egative, to allo
020620: 77 20 62 6C 69 6E 6B 69 6E 67 0D 0A 2A 29 0D 0A w blinking..*)..
020630: 56 41 52 09 57 61 73 55 6E 64 65 72 4C 69 6E 65 VAR.WasUnderLine
020640: 64 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B d:BOOLEAN=FALSE;
020650: 0D 0A 09 54 69 6D 65 54 6F 43 68 61 6E 67 65 3A ...TimeToChange:
020660: 49 4E 54 45 47 45 52 3D 30 3B 0D 0A 09 4F 75 74 INTEGER=0;...Out
020670: 70 75 74 45 6E 61 62 6C 65 64 3A 42 4F 4F 4C 45 putEnabled:BOOLE
020680: 41 4E 3B 0D 0A 0D 0A 28 2A 09 42 6C 69 6E 6B 20 AN;....(*.Blink
020690: 63 75 72 73 6F 72 20 2D 20 64 65 63 72 65 6D 65 cursor - decreme
0206A0: 6E 74 20 74 69 6D 65 72 2C 20 69 66 20 6E 65 67 nt timer, if neg
0206B0: 61 74 69 76 65 20 72 65 73 65 74 20 61 6E 64 0D ative reset and.
0206C0: 0A 09 63 68 61 6E 67 65 20 74 6F 70 20 62 69 74 ..change top bit
0206D0: 20 6F 66 20 63 68 61 72 61 63 74 65 72 20 75 6E of character un
0206E0: 64 65 72 20 63 75 72 73 6F 72 2A 29 0D 0A 0D 0A der cursor*)....
0206F0: 50 52 4F 43 45 44 55 52 45 20 42 6C 69 6E 6B 43 PROCEDURE BlinkC
020700: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
020710: 4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D ODULE ScreenIO;.
020720: 0A 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 74 68 ...(*.This is th
020730: 65 20 6D 65 6D 6F 72 79 20 6D 61 70 70 65 64 20 e memory mapped
020740: 76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72 65 65 version of scree
020750: 6E 20 69 6E 70 75 74 2D 6F 75 74 70 75 74 0D 0A n input-output..
020760: 0D 0A 09 54 6F 20 75 73 65 20 69 74 20 6F 6E 20 ...To use it on
020770: 79 6F 75 72 20 6D 61 63 68 69 6E 65 2C 20 79 6F your machine, yo
020780: 75 20 6D 61 79 20 6E 65 65 64 20 74 6F 20 63 68 u may need to ch
020790: 61 6E 67 65 20 73 6F 6D 65 20 6F 66 20 74 68 65 ange some of the
0207A0: 20 0D 0A 09 63 6F 6E 73 74 61 6E 74 73 20 62 65 ...constants be
0207B0: 6C 6F 77 0D 0A 0D 0A 09 54 68 65 20 6D 6F 64 75 low.....The modu
0207C0: 6C 65 20 61 73 73 75 6D 65 73 20 74 68 61 74 20 le assumes that
0207D0: 74 68 65 20 6D 65 6D 6F 72 79 20 66 6F 72 20 74 the memory for t
0207E0: 68 65 20 73 63 72 65 65 6E 20 69 73 20 63 6F 6E he screen is con
0207F0: 74 69 67 75 6F 75 73 20 0D 0A 09 61 6E 64 20 69 tiguous ...and i
020800: 6E 20 74 68 65 20 64 65 66 61 75 6C 74 20 62 61 n the default ba
020810: 6E 6B 2E 20 28 49 66 20 69 74 20 69 73 20 69 6E nk. (If it is in
020820: 20 61 6E 6F 74 68 65 72 20 62 61 6E 6B 2C 20 79 another bank, y
020830: 6F 75 20 77 69 6C 6C 20 68 61 76 65 20 0D 0A 09 ou will have ...
020840: 74 6F 20 63 68 61 6E 67 65 20 74 68 65 20 63 6F to change the co
020850: 64 65 20 6F 66 20 74 68 65 20 6D 6F 64 75 6C 65 de of the module
020860: 20 61 70 70 72 6F 70 72 69 61 74 65 6C 79 29 0D appropriately).
020870: 0A 0D 0A 09 54 68 65 20 76 61 6C 75 65 73 20 73 ....The values s
020880: 65 74 20 62 65 6C 6F 77 20 61 72 65 20 66 6F 72 et below are for
020890: 20 61 6E 20 4F 73 62 6F 72 6E 65 20 31 20 77 69 an Osborne 1 wi
0208A0: 74 68 20 53 63 72 65 65 6E 20 50 61 63 6B 0D 0A th Screen Pack..
0208B0: 0D 0A 09 4E 6F 74 65 20 74 68 61 74 20 74 68 69 ...Note that thi
0208C0: 73 20 76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72 s version of scr
0208D0: 65 65 6E 69 6F 20 64 6F 65 73 20 6E 6F 74 20 75 eenio does not u
0208E0: 73 65 20 74 68 65 20 74 65 72 6D 69 6E 61 6C 20 se the terminal
0208F0: 0D 0A 09 64 65 66 69 6E 69 74 69 6F 6E 20 66 69 ...definition fi
020900: 75 72 73 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 ursor;..BEGIN...
020910: 44 45 43 28 54 69 6D 65 54 6F 43 68 61 6E 67 65 DEC(TimeToChange
020920: 29 3B 0D 0A 09 49 46 20 54 69 6D 65 54 6F 43 68 );...IF TimeToCh
020930: 61 6E 67 65 3C 30 20 54 48 45 4E 0D 0A 09 09 54 ange<0 THEN....T
020940: 69 6D 65 54 6F 43 68 61 6E 67 65 3A 3D 39 30 30 imeToChange:=900
020950: 3B 09 28 2A 63 68 61 6E 67 65 20 74 6F 20 63 68 ;.(*change to ch
020960: 61 6E 67 65 20 62 6C 69 6E 6B 20 72 61 74 65 2A ange blink rate*
020970: 29 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 65 )....Screen[Scre
020980: 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 28 enPos]:=CHR(ORD(
020990: 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 Screen[ScreenPos
0209A0: 5D 29 2B 31 32 38 29 0D 0A 09 09 45 4E 44 0D 0A ])+128)....END..
0209B0: 09 45 4E 44 20 42 6C 69 6E 6B 43 75 72 73 6F 72 .END BlinkCursor
0209C0: 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 ;....PROCEDURE C
0209D0: 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 42 45 47 learCursor;..BEG
0209E0: 49 4E 0D 0A 09 49 46 20 28 53 63 72 65 65 6E 5B IN...IF (Screen[
0209F0: 53 63 72 65 65 6E 50 6F 73 5D 3E 37 66 78 29 3C ScreenPos]>7fx)<
020A00: 3E 57 61 73 55 6E 64 65 72 4C 69 6E 65 64 20 54 >WasUnderLined T
020A10: 48 45 4E 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 HEN....Screen[Sc
020A20: 72 65 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 reenPos]:=CHR(OR
020A30: 44 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 D(Screen[ScreenP
020A40: 6F 73 5D 29 2B 31 32 38 29 3B 0D 0A 09 09 45 4E os])+128);....EN
020A50: 44 3B 0D 0A 09 57 61 73 55 6E 64 65 72 4C 69 6E D;...WasUnderLin
020A60: 65 64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 45 4E 44 ed:=FALSE;...END
020A70: 20 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 50 ClearCursor;..P
020A80: 52 4F 43 45 44 55 52 45 20 53 65 74 43 75 72 73 ROCEDURE SetCurs
020A90: 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 61 73 or;..BEGIN...Was
020AA0: 55 6E 64 65 72 4C 69 6E 65 64 3A 3D 53 63 72 65 UnderLined:=Scre
020AB0: 65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3E 3D 38 en[ScreenPos]>=8
020AC0: 30 78 3B 0D 0A 09 53 63 72 65 65 6E 5B 53 63 72 0x;...Screen[Scr
020AD0: 65 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 eenPos]:=CHR(ORD
020AE0: 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F (Screen[ScreenPo
020AF0: 73 5D 29 2B 31 32 38 29 3B 0D 0A 09 45 4E 44 20 s])+128);...END
020B00: 6C 65 2E 20 48 65 6E 63 65 2C 20 74 68 65 20 67 le. Hence, the g
020B10: 72 61 70 68 69 63 73 20 63 68 61 72 61 63 74 65 raphics characte
020B20: 72 73 20 66 6F 72 20 74 68 65 20 62 6F 78 20 61 rs for the box a
020B30: 72 65 0D 0A 09 68 61 72 64 20 63 6F 64 65 64 20 re...hard coded
020B40: 69 6E 20 74 68 65 20 66 69 6C 65 0D 0A 0D 0A 09 in the file.....
020B50: 54 68 69 73 20 76 65 72 73 69 6F 6E 20 77 69 6C This version wil
020B60: 6C 20 6E 6F 74 20 73 75 70 70 6F 72 74 20 68 61 l not support ha
020B70: 6C 66 20 69 6E 74 65 6E 73 69 74 79 20 6F 6E 20 lf intensity on
020B80: 74 68 65 20 4F 73 62 6F 72 6E 65 20 73 69 6E 63 the Osborne sinc
020B90: 65 20 0D 0A 09 74 68 61 74 20 66 61 63 69 6C 69 e ...that facili
020BA0: 74 79 20 64 6F 65 73 20 6E 6F 74 20 77 6F 72 6B ty does not work
020BB0: 20 61 73 20 64 6F 63 75 6D 65 6E 74 65 64 2E 20 as documented.
020BC0: 54 68 69 73 20 6D 61 79 20 62 65 20 73 6F 6D 65 This may be some
020BD0: 74 68 69 6E 67 0D 0A 09 74 6F 20 64 6F 20 77 69 thing...to do wi
020BE0: 74 68 20 6D 79 20 4F 73 62 6F 72 6E 65 20 68 61 th my Osborne ha
020BF0: 76 69 6E 67 20 62 65 65 6E 20 68 61 63 6B 65 64 ving been hacked
020C00: 0D 0A 0D 0A 09 54 68 69 73 20 76 65 72 73 69 6F .....This versio
020C10: 6E 20 77 69 6C 6C 20 6E 6F 74 20 73 63 72 6F 6C n will not scrol
020C20: 6C 20 74 68 65 20 73 63 72 65 65 6E 20 65 69 74 l the screen eit
020C30: 68 65 72 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D 20 her..*)....FROM
020C40: 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 Terminal IMPORT
020C50: 43 68 61 72 52 6F 75 74 69 6E 65 2C 43 68 61 72 CharRoutine,Char
020C60: 45 6E 61 62 6C 65 64 2C 42 6C 69 6E 6B 52 6F 75 Enabled,BlinkRou
020C70: 74 69 6E 65 2C 42 6C 69 6E 6B 45 6E 61 62 6C 65 tine,BlinkEnable
020C80: 64 3B 0D 0A 46 52 4F 4D 20 46 61 73 74 4D 6F 76 d;..FROM FastMov
020C90: 65 20 49 4D 50 4F 52 54 20 4D 6F 76 65 75 70 2C e IMPORT Moveup,
020CA0: 4D 6F 76 65 64 6F 77 6E 3B 0D 0A 46 52 4F 4D 20 Movedown;..FROM
020CB0: 53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 41 44 SYSTEM IMPORT AD
020CC0: 52 2C 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 43 50 R,SIZE;..FROM CP
020CD0: 4D 20 49 4D 50 4F 52 54 20 77 63 63 66 63 2C 42 M IMPORT wccfc,B
020CE0: 44 4F 53 3B 0D 0A 28 2A 46 52 4F 4D 20 4F 73 62 DOS;..(*FROM Osb
020CF0: 6F 72 6E 65 20 49 4D 50 4F 52 54 20 42 61 6E 6B orne IMPORT Bank
020D00: 53 65 74 43 75 72 73 6F 72 3B 0D 0A 0D 0A 50 52 SetCursor;....PR
020D10: 4F 43 45 44 55 52 45 20 47 6F 74 6F 78 79 28 78 OCEDURE Gotoxy(x
020D20: 2C 79 3A 43 41 52 44 49 4E 41 4C 29 3B 09 09 0D ,y:CARDINAL);...
020D30: 0A 0D 0A 28 2A 09 09 50 6F 73 69 74 69 6F 6E 20 ...(*..Position
020D40: 74 6F 20 67 69 76 65 6E 20 63 6F 6F 72 64 69 6E to given coordin
020D50: 61 74 65 73 0D 0A 09 09 74 6F 70 20 6C 65 66 74 ates....top left
020D60: 20 69 73 20 61 6C 77 61 79 73 20 30 2C 30 20 0D is always 0,0 .
020D70: 0A 0D 0A 09 09 78 20 69 73 20 63 6F 6C 75 6D 6E .....x is column
020D80: 2C 20 79 20 69 73 20 72 6F 77 0D 0A 0D 0A 09 09 , y is row......
020D90: 41 20 27 53 74 61 6E 64 61 72 64 27 20 53 63 72 A 'Standard' Scr
020DA0: 65 65 6E 20 69 73 20 38 30 20 62 79 20 32 34 2E een is 80 by 24.
020DB0: 20 54 68 65 20 6C 69 6D 69 74 20 69 73 20 73 65 The limit is se
020DC0: 74 20 62 79 0D 0A 09 09 74 68 65 20 74 65 72 6D t by....the term
020DD0: 69 6E 61 6C 20 64 65 66 69 6E 69 74 69 6F 6E 20 inal definition
020DE0: 66 69 6C 65 09 2A 29 0D 0A 42 45 47 49 4E 0D 0A file.*)..BEGIN..
020DF0: 20 20 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 IF OutputEna
020E00: 62 6C 65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 bled THEN...Clea
020E10: 72 43 75 72 73 6F 72 3B 0D 0A 09 43 6F 6C 4E 6F rCursor;...ColNo
020E20: 3A 3D 78 3B 0D 0A 09 52 6F 77 4E 6F 3A 3D 79 3B :=x;...RowNo:=y;
020E30: 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D 43 6F ...ScreenPos:=Co
020E40: 6C 4E 6F 2B 52 6F 77 4E 6F 2A 43 68 61 72 49 6E lNo+RowNo*CharIn
020E50: 63 72 65 6D 65 6E 74 2A 52 6F 77 57 69 64 74 68 crement*RowWidth
020E60: 3B 0D 0A 09 49 46 20 53 63 72 65 65 6E 50 6F 73 ;...IF ScreenPos
020E70: 3E 3D 53 63 72 65 65 6E 53 69 7A 65 20 54 48 45 >=ScreenSize THE
020E80: 4E 0D 0A 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A N....ColNo:=0;..
020E90: 09 09 52 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 09 53 ..RowNo:=0;....S
020EA0: 63 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 09 creenPos:=0;....
020EB0: 45 4E 44 3B 0D 0A 09 53 65 74 43 75 72 73 6F 72 END;...SetCursor
020EC0: 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45 4E ;...END;.. EN
020ED0: 44 20 47 6F 74 6F 78 79 3B 0D 0A 0D 0A 50 52 4F D Gotoxy;....PRO
020EE0: 43 45 44 55 52 45 20 50 75 74 61 6E 64 49 6E 63 CEDURE PutandInc
020EF0: 28 63 68 3A 43 48 41 52 29 3B 0D 0A 0D 0A 28 2A (ch:CHAR);....(*
020F00: 32 3B 2A 29 0D 0A 46 52 4F 4D 20 49 6E 74 4C 6F 2;*)..FROM IntLo
020F10: 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E 44 3B gic IMPORT IAND;
020F20: 0D 0A 0D 0A 28 2A 09 53 63 72 65 65 6E 20 68 61 ....(*.Screen ha
020F30: 6E 64 6C 69 6E 67 20 72 6F 75 74 69 6E 65 73 20 ndling routines
020F40: 66 6F 72 20 63 75 72 73 6F 72 20 70 6F 73 69 74 for cursor posit
020F50: 69 6F 6E 2C 20 61 74 74 72 69 62 75 74 65 20 65 ion, attribute e
020F60: 74 63 0D 0A 0D 0A 09 53 70 65 63 69 66 69 63 20 tc.....Specific
020F70: 74 6F 20 74 68 69 73 20 63 6F 6D 70 69 6C 65 72 to this compiler
020F80: 2A 29 0D 0A 0D 0A 43 4F 4E 53 54 09 4C 6F 67 53 *)....CONST.LogS
020F90: 63 72 65 65 6E 57 69 64 74 68 3D 38 30 3B 09 28 creenWidth=80;.(
020FA0: 2A 4C 6F 67 69 63 61 6C 20 73 63 72 65 65 6E 20 *Logical screen
020FB0: 77 69 64 74 68 20 0D 0A 09 09 09 09 28 6D 61 6E width ......(man
020FC0: 79 20 70 65 6F 70 6C 65 20 6F 6E 6C 79 20 68 61 y people only ha
020FD0: 76 65 20 38 30 29 2A 29 0D 0A 09 52 6F 77 57 69 ve 80)*)...RowWi
020FE0: 64 74 68 3D 38 30 3B 09 09 28 2A 77 69 64 74 68 dth=80;..(*width
020FF0: 20 6F 66 20 6D 65 6D 6F 72 79 20 66 6F 72 20 6F of memory for o
021000: 6E 65 20 72 6F 77 20 0D 0A 09 09 09 09 28 69 2E ne row ......(i.
021010: 65 2E 20 6E 75 6D 62 65 72 20 6F 66 20 62 79 74 e. number of byt
021020: 65 73 2A 29 0D 0A 09 4C 6F 67 53 63 72 65 65 6E es*)...LogScreen
021030: 44 65 70 74 68 3D 32 34 3B 09 09 28 2A 4C 69 6E Depth=24;..(*Lin
021040: 65 73 20 6F 6E 20 74 68 65 20 73 63 72 65 65 6E es on the screen
021050: 2A 29 0D 0A 09 53 63 72 65 65 6E 53 74 61 72 74 *)...ScreenStart
021060: 3D 30 66 30 30 30 68 3B 09 28 2A 62 61 73 65 20 =0f000h;.(*base
021070: 6F 66 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 68 of screen*)...Ch
021080: 61 72 49 6E 63 72 65 6D 65 6E 74 3D 31 3B 09 28 arIncrement=1;.(
021090: 2A 6E 75 6D 62 65 72 20 6F 66 20 62 79 74 65 73 *number of bytes
0210A0: 20 62 65 74 77 65 65 6E 20 63 68 61 72 61 63 74 between charact
0210B0: 65 72 73 2A 29 0D 0A 09 53 63 72 65 65 6E 53 69 ers*)...ScreenSi
0210C0: 7A 65 3D 38 30 2A 32 34 3B 09 28 2A 6E 75 6D 62 ze=80*24;.(*numb
0210D0: 65 72 20 6F 66 20 62 79 74 65 73 20 69 6E 20 73 er of bytes in s
0210E0: 63 72 65 65 6E 20 61 72 65 61 2A 29 0D 0A 0D 0A creen area*)....
0210F0: 09 43 52 3D 30 64 78 3B 09 09 09 28 2A 43 61 72 .CR=0dx;...(*Car
021100: 09 6F 75 74 70 75 74 20 61 20 63 68 61 72 61 63 .output a charac
021110: 74 65 72 20 61 6E 64 20 69 6E 63 72 65 6D 65 6E ter and incremen
021120: 74 20 70 6F 69 6E 74 65 72 73 2A 29 0D 0A 0D 0A t pointers*)....
021130: 42 45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 5B 53 BEGIN...Screen[S
021140: 63 72 65 65 6E 50 6F 73 5D 3A 3D 63 68 3B 0D 0A creenPos]:=ch;..
021150: 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63 ...ScreenPos:=Sc
021160: 72 65 65 6E 50 6F 73 2B 43 68 61 72 49 6E 63 72 reenPos+CharIncr
021170: 65 6D 65 6E 74 3B 0D 0A 09 49 4E 43 28 43 6F 6C ement;...INC(Col
021180: 4E 6F 29 3B 0D 0A 09 49 46 20 43 6F 6C 4E 6F 3E No);...IF ColNo>
021190: 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68 20 =LogScreenWidth
0211A0: 54 48 45 4E 0D 0A 09 09 49 46 20 52 6F 77 4E 6F THEN....IF RowNo
0211B0: 3C 28 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 68 <(LogScreenDepth
0211C0: 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 49 4E 43 -1) THEN.....INC
0211D0: 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 43 6F 6C (RowNo);.....Col
0211E0: 4E 6F 3A 3D 30 3B 0D 0A 09 09 45 4C 53 45 0D 0A No:=0;....ELSE..
0211F0: 09 09 09 44 45 43 28 43 6F 6C 4E 6F 29 3B 0D 0A ...DEC(ColNo);..
021200: 09 09 09 44 45 43 28 53 63 72 65 65 6E 50 6F 73 ...DEC(ScreenPos
021210: 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 );.....END;....E
021220: 4E 44 3B 0D 0A 09 45 4E 44 20 50 75 74 61 6E 64 ND;...END Putand
021230: 49 6E 63 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 Inc;....PROCEDUR
021240: 45 20 57 72 69 74 65 28 63 68 3A 43 48 41 52 29 E Write(ch:CHAR)
021250: 3B 0D 0A 28 2A 09 57 72 69 74 65 20 61 20 63 68 ;..(*.Write a ch
021260: 61 72 61 63 74 65 72 0D 0A 0D 0A 09 54 68 69 73 aracter.....This
021270: 20 72 6F 75 74 69 6E 65 20 69 73 20 75 73 65 64 routine is used
021280: 20 62 79 20 74 65 72 6D 69 6E 61 6C 20 77 68 65 by terminal whe
021290: 6E 20 74 68 69 73 20 76 65 72 73 69 6F 6E 20 6F n this version o
0212A0: 66 20 53 63 72 65 65 6E 49 4F 20 0D 0A 09 69 73 f ScreenIO ...is
0212B0: 20 69 6E 20 75 73 65 20 62 65 63 61 75 73 65 20 in use because
0212C0: 61 20 66 6C 61 67 20 69 73 20 73 65 74 20 62 79 a flag is set by
0212D0: 20 74 68 65 20 69 6E 69 74 69 61 6C 69 73 61 74 the initialisat
0212E0: 69 6F 6E 20 6F 66 20 74 68 69 73 20 6D 6F 64 75 ion of this modu
0212F0: 6C 65 20 0D 0A 09 74 6F 67 65 74 68 65 72 20 77 le ...together w
021300: 72 69 61 67 65 20 72 65 74 75 72 6E 2A 29 0D 0A riage return*)..
021310: 09 4C 46 3D 30 61 78 3B 09 09 09 28 2A 4C 69 6E .LF=0ax;...(*Lin
021320: 65 20 66 65 65 64 2A 29 0D 0A 09 54 41 42 3D 30 e feed*)...TAB=0
021330: 39 78 3B 09 09 28 2A 54 41 42 2A 29 0D 0A 09 42 9x;..(*TAB*)...B
021340: 53 3D 30 38 78 3B 0D 0A 56 41 52 0D 0A 09 53 63 S=08x;..VAR...Sc
021350: 72 65 65 6E 5B 30 66 30 30 30 68 5D 3A 41 52 52 reen[0f000h]:ARR
021360: 41 59 5B 30 2E 2E 53 63 72 65 65 6E 53 69 7A 65 AY[0..ScreenSize
021370: 2D 31 5D 20 4F 46 20 43 48 41 52 3B 0D 0A 09 50 -1] OF CHAR;...P
021380: 43 47 5B 30 66 38 30 30 68 5D 3A 41 52 52 41 59 CG[0f800h]:ARRAY
021390: 5B 30 2E 2E 34 38 5D 20 4F 46 20 43 48 41 52 3B [0..48] OF CHAR;
0213A0: 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 43 41 52 ...ScreenPos:CAR
0213B0: 44 49 4E 41 4C 3B 09 28 2A 6E 65 78 74 20 63 68 DINAL;.(*next ch
0213C0: 61 72 61 63 74 65 72 20 70 6F 73 69 74 69 6F 6E aracter position
0213D0: 20 6F 6E 20 73 63 72 65 65 6E 2A 29 0D 0A 09 43 on screen*)...C
0213E0: 6F 6C 4E 6F 2C 52 6F 77 4E 6F 3A 43 41 52 44 49 olNo,RowNo:CARDI
0213F0: 4E 41 4C 3B 09 28 2A 77 68 69 63 68 20 72 65 70 NAL;.(*which rep
021400: 72 65 73 65 6E 74 73 20 74 68 65 20 67 69 76 65 resents the give
021410: 6E 20 70 6F 73 69 74 69 6F 6E 2A 29 0D 0A 0D 0A n position*)....
021420: 09 28 2A 09 43 6F 6E 74 72 6F 6C 20 61 74 74 72 .(*.Control attr
021430: 69 62 75 74 65 73 2A 29 0D 0A 0D 0A 09 48 61 6C ibutes*).....Hal
021440: 66 49 6E 74 65 6E 73 69 74 79 3A 42 4F 4F 4C 45 fIntensity:BOOLE
021450: 41 4E 3D 46 41 4C 53 45 3B 09 28 2A 74 72 75 65 AN=FALSE;.(*true
021460: 20 69 66 20 69 6E 20 68 61 6C 66 20 69 6E 74 65 if in half inte
021470: 6E 73 69 74 79 20 6D 6F 64 65 2A 29 0D 0A 09 45 nsity mode*)...E
021480: 6E 68 61 6E 63 65 64 56 69 64 65 6F 3A 42 4F 4F nhancedVideo:BOO
021490: 4C 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 55 6E LEAN=FALSE;...Un
0214A0: 64 65 72 4C 69 6E 65 3A 42 4F 4F 4C 45 41 4E 3D derLine:BOOLEAN=
0214B0: 46 41 4C 53 45 3B 09 28 2A 74 72 75 65 20 69 66 FALSE;.(*true if
0214C0: 20 69 6E 20 75 6E 64 65 72 6C 69 6E 65 20 6D 6F in underline mo
0214D0: 64 65 2A 29 0D 0A 09 49 6E 76 65 72 73 65 56 69 de*)...InverseVi
0214E0: 64 65 6F 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 deo:BOOLEAN=FALS
0214F0: 45 3B 0D 0A 09 42 6C 69 6E 6B 69 6E 67 3A 42 4F E;...Blinking:BO
021500: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
021510: 1C 00 01 00 02 09 52 E5 1C 00 41 02 00 00 00 02 ......R...A.....
021520: 1C 00 46 02 00 00 00 02 1C 00 42 02 00 00 00 02 ..F.......B.....
021530: 1C 00 47 02 00 00 00 02 1C 00 43 02 00 00 00 02 ..G.......C.....
021540: 1C 00 48 02 00 00 00 02 1C 00 44 02 00 00 00 02 ..H.......D.....
021550: 1C 00 49 02 00 00 00 02 1C 00 45 02 00 00 00 02 ..I.......E.....
021560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
021570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
021580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
021590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0215F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
021600: 69 74 68 20 74 68 65 20 61 64 64 72 65 73 73 20 ith the address
021610: 6F 66 20 74 68 69 73 20 72 6F 75 74 69 6E 65 0D of this routine.
021620: 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74 69 6E 65 ....This routine
021630: 20 77 69 6C 6C 20 6E 65 65 64 20 63 68 61 6E 67 will need chang
021640: 69 6E 67 20 66 6F 72 20 64 69 66 66 65 72 65 6E ing for differen
021650: 74 20 76 69 64 65 6F 20 73 79 73 74 65 6D 73 0D t video systems.
021660: 0A 0D 0A 09 54 68 65 20 4F 73 62 6F 72 6E 65 20 ....The Osborne
021670: 31 20 69 73 20 76 65 72 79 20 6C 69 6D 69 74 65 1 is very limite
021680: 64 20 2D 20 61 6C 6C 20 79 6F 75 20 63 61 6E 20 d - all you can
021690: 64 6F 20 69 73 0D 0A 09 75 6E 64 65 72 6C 69 6E do is...underlin
0216A0: 65 20 61 6E 64 20 68 61 6C 66 20 69 6E 74 65 6E e and half inten
0216B0: 73 69 74 79 2E 20 41 6C 6C 20 6F 74 68 65 72 73 sity. All others
0216C0: 20 61 72 65 20 6D 61 70 70 65 64 20 6F 6E 74 6F are mapped onto
0216D0: 20 74 68 65 73 65 20 74 77 6F 0D 0A 2A 29 0D 0A these two..*)..
0216E0: 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F 75 BEGIN.. IF Ou
0216F0: 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45 4E tputEnabled THEN
021700: 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D ...ClearCursor;.
021710: 0A 09 49 46 20 63 68 3E 30 37 66 78 20 54 48 45 ..IF ch>07fx THE
021720: 4E 20 63 68 3A 3D 43 48 52 28 4F 52 44 28 63 68 N ch:=CHR(ORD(ch
021730: 29 2D 31 32 38 29 20 45 4E 44 3B 0D 0A 09 49 46 )-128) END;...IF
021740: 20 63 68 3D 43 52 20 54 48 45 4E 0D 0A 09 09 53 ch=CR THEN....S
021750: 63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E creenPos:=Screen
021760: 50 6F 73 2D 43 6F 6C 4E 6F 3B 0D 0A 09 09 43 6F Pos-ColNo;....Co
021770: 6C 4E 6F 3A 3D 30 3B 0D 0A 09 45 4C 53 49 46 20 lNo:=0;...ELSIF
021780: 63 68 3D 4C 46 20 54 48 45 4E 0D 0A 09 09 49 46 ch=LF THEN....IF
021790: 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 72 65 65 RowNo<(LogScree
0217A0: 6E 44 65 70 74 68 2D 31 29 20 54 48 45 4E 0D 0A nDepth-1) THEN..
0217B0: 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A ...INC(RowNo);..
0217C0: 09 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63 ...ScreenPos:=Sc
0217D0: 72 65 65 6E 50 6F 73 2B 52 6F 77 57 69 64 74 68 reenPos+RowWidth
0217E0: 3B 0D 0A 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49 ;.....END...ELSI
0217F0: 46 20 63 68 3D 42 53 20 54 48 45 4E 0D 0A 09 09 F ch=BS THEN....
021800: 69 66 69 63 20 2D 20 68 6F 6D 65 20 73 63 72 65 ific - home scre
021810: 65 6E 20 61 6E 64 20 63 75 72 73 6F 72 20 0D 0A en and cursor ..
021820: 09 09 09 20 70 6F 73 69 74 69 6F 6E 20 61 73 20 ... position as
021830: 73 74 6F 72 65 64 20 69 6E 20 42 49 4F 53 20 74 stored in BIOS t
021840: 61 62 6C 65 73 2A 29 0D 0A 09 09 0D 0A 09 09 09 ables*).........
021850: 28 2A 6E 6F 77 20 63 6C 65 61 72 20 64 69 73 70 (*now clear disp
021860: 6C 61 79 20 6D 65 6D 6F 72 79 2A 29 0D 0A 09 09 lay memory*)....
021870: 20 20 20 20 53 63 72 65 65 6E 5B 30 5D 3A 3D 27 Screen[0]:='
021880: 20 27 3B 0D 0A 09 09 20 20 20 20 4D 6F 76 65 75 ';.... Moveu
021890: 70 28 41 44 52 28 53 63 72 65 65 6E 5B 31 5D 29 p(ADR(Screen[1])
0218A0: 2C 41 44 52 28 53 63 72 65 65 6E 5B 30 5D 29 2C ,ADR(Screen[0]),
0218B0: 53 63 72 65 65 6E 53 69 7A 65 2D 31 29 3B 0D 0A ScreenSize-1);..
0218C0: 09 09 20 20 20 20 53 63 72 65 65 6E 50 6F 73 3A .. ScreenPos:
0218D0: 3D 30 3B 0D 0A 09 09 20 20 20 20 43 6F 6C 4E 6F =0;.... ColNo
0218E0: 3A 3D 30 3B 0D 0A 09 09 20 20 20 20 52 6F 77 4E :=0;.... RowN
0218F0: 6F 3A 3D 30 0D 0A 09 09 20 20 20 20 7C 0D 0A 0D o:=0.... |...
021900: 0A 09 28 2A 20 54 68 65 20 66 6F 6C 6C 6F 77 69 ..(* The followi
021910: 6E 67 20 67 72 61 70 68 69 63 73 20 63 68 61 72 ng graphics char
021920: 61 63 74 65 72 73 20 77 69 6C 6C 20 6E 65 65 64 acters will need
021930: 20 74 6F 20 62 65 20 6D 6F 64 69 66 69 65 64 20 to be modified
021940: 66 6F 72 20 0D 0A 09 20 20 20 64 69 66 66 65 72 for ... differ
021950: 65 6E 74 20 64 69 73 70 6C 61 79 20 73 79 73 74 ent display syst
021960: 65 6D 73 2A 29 0D 0A 0D 0A 09 48 6F 72 69 7A 6F ems*).....Horizo
021970: 6E 74 61 6C 3A 50 75 74 61 6E 64 49 6E 63 28 38 ntal:PutandInc(8
021980: 31 78 29 7C 0D 0A 09 56 65 72 74 69 63 61 6C 3A 1x)|...Vertical:
021990: 50 75 74 61 6E 64 49 6E 63 28 38 30 78 29 7C 0D PutandInc(80x)|.
0219A0: 0A 09 43 6F 72 6E 65 72 4C 4C 3A 50 75 74 61 6E ..CornerLL:Putan
0219B0: 64 49 6E 63 28 38 34 78 29 7C 0D 0A 09 43 6F 72 dInc(84x)|...Cor
0219C0: 6E 65 72 55 4C 3A 50 75 74 61 6E 64 49 6E 63 28 nerUL:PutandInc(
0219D0: 38 32 78 29 7C 0D 0A 09 43 6F 72 6E 65 72 55 52 82x)|...CornerUR
0219E0: 3A 50 75 74 61 6E 64 49 6E 63 28 38 33 78 29 7C :PutandInc(83x)|
0219F0: 0D 0A 09 43 6F 72 6E 65 72 4C 52 3A 50 75 74 61 ...CornerLR:Puta
021A00: 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48 45 4E 0D IF ColNo>0 THEN.
021A10: 0A 09 09 09 44 45 43 28 43 6F 6C 4E 6F 29 3B 0D ....DEC(ColNo);.
021A20: 0A 09 09 09 44 45 43 28 53 63 72 65 65 6E 50 6F ....DEC(ScreenPo
021A30: 73 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 5B 53 s);.....Screen[S
021A40: 63 72 65 65 6E 50 6F 73 5D 3A 3D 27 20 27 0D 0A creenPos]:=' '..
021A50: 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49 46 20 63 ...END...ELSIF c
021A60: 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 09 4C 4F h=TAB THEN....LO
021A70: 4F 50 0D 0A 09 09 09 49 46 20 43 6F 6C 4E 6F 3E OP.....IF ColNo>
021A80: 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D =LogScreenWidth-
021A90: 31 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 1 THEN EXIT END;
021AA0: 0D 0A 09 09 09 53 63 72 65 65 6E 5B 53 63 72 65 .....Screen[Scre
021AB0: 65 6E 50 6F 73 5D 3A 3D 27 20 27 3B 0D 0A 09 09 enPos]:=' ';....
021AC0: 09 49 4E 43 28 53 63 72 65 65 6E 50 6F 73 29 3B .INC(ScreenPos);
021AD0: 0D 0A 09 09 09 49 4E 43 28 43 6F 6C 4E 6F 29 3B .....INC(ColNo);
021AE0: 0D 0A 09 09 09 49 46 20 49 41 4E 44 28 43 6F 6C .....IF IAND(Col
021AF0: 4E 6F 2C 37 29 3D 30 20 54 48 45 4E 20 45 58 49 No,7)=0 THEN EXI
021B00: 54 20 45 4E 44 0D 0A 09 09 09 45 4E 44 20 28 2A T END.....END (*
021B10: 4C 4F 4F 50 2A 29 0D 0A 09 45 4C 53 45 09 0D 0A LOOP*)...ELSE...
021B20: 09 09 49 46 20 55 6E 64 65 72 4C 69 6E 65 20 4F ..IF UnderLine O
021B30: 52 20 45 6E 68 61 6E 63 65 64 56 69 64 65 6F 20 R EnhancedVideo
021B40: 4F 52 20 42 6C 69 6E 6B 69 6E 67 20 4F 52 20 49 OR Blinking OR I
021B50: 6E 76 65 72 73 65 56 69 64 65 6F 20 54 48 45 4E nverseVideo THEN
021B60: 20 0D 0A 09 09 09 63 68 3A 3D 43 48 52 28 4F 52 .....ch:=CHR(OR
021B70: 44 28 63 68 29 2B 31 32 38 29 0D 0A 09 09 09 45 D(ch)+128).....E
021B80: 4E 44 3B 0D 0A 09 09 50 75 74 61 6E 64 49 6E 63 ND;....PutandInc
021B90: 28 63 68 29 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A (ch);....END; (*
021BA0: 4E 6F 74 20 43 52 20 6F 72 20 4C 46 20 6F 72 20 Not CR or LF or
021BB0: 54 41 42 2A 29 0D 0A 09 53 65 74 43 75 72 73 6F TAB*)...SetCurso
021BC0: 72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45 r;...END;.. E
021BD0: 4E 44 20 57 72 69 74 65 3B 0D 0A 0D 0A 0D 0A 50 ND Write;......P
021BE0: 52 4F 43 45 44 55 52 45 20 53 63 72 65 65 6E 43 ROCEDURE ScreenC
021BF0: 6F 6E 74 72 6F 6C 28 73 3A 45 64 69 74 73 29 3B ontrol(s:Edits);
021C00: 6E 64 49 6E 63 28 38 35 78 29 7C 0D 0A 09 53 74 ndInc(85x)|...St
021C10: 61 72 74 78 79 2C 4D 69 64 64 6C 65 58 59 2C 45 artxy,MiddleXY,E
021C20: 6E 64 58 59 3A 28 2A 63 75 72 73 6F 72 20 61 64 ndXY:(*cursor ad
021C30: 64 72 65 73 73 69 6E 67 20 2D 20 6E 6F 74 20 72 dressing - not r
021C40: 65 71 75 69 72 65 64 2A 29 7C 0D 0A 09 52 69 6E equired*)|...Rin
021C50: 67 42 65 6C 6C 3A 69 3A 3D 42 44 4F 53 28 77 63 gBell:i:=BDOS(wc
021C60: 63 66 63 2C 37 29 7C 0D 0A 09 4D 6F 76 65 4C 65 cfc,7)|...MoveLe
021C70: 66 74 3A 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48 ft:IF ColNo>0 TH
021C80: 45 4E 20 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E EN .....DEC(ColN
021C90: 6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 o);.....DEC(Scre
021CA0: 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C 53 49 46 enPos);....ELSIF
021CB0: 20 52 6F 77 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09 RowNo>0 THEN...
021CC0: 09 09 44 45 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 ..DEC(RowNo);...
021CD0: 09 09 43 6F 6C 4E 6F 3A 3D 4C 6F 67 53 63 72 65 ..ColNo:=LogScre
021CE0: 65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 09 09 53 enWidth-1;.....S
021CF0: 63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C 4E 6F 2B creenPos:=ColNo+
021D00: 52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D RowNo*RowWidth;.
021D10: 0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 52 ....END|...MoveR
021D20: 69 67 68 74 3A 49 46 20 43 6F 6C 4E 6F 3C 28 4C ight:IF ColNo<(L
021D30: 6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D 31 29 ogScreenWidth-1)
021D40: 20 54 48 45 4E 20 0D 0A 09 09 09 49 4E 43 28 43 THEN .....INC(C
021D50: 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 49 4E 43 28 53 olNo);.....INC(S
021D60: 63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C creenPos);....EL
021D70: 53 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 SIF RowNo<(LogSc
021D80: 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 48 45 reenDepth-1) THE
021D90: 4E 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D N.....ColNo:=0;.
021DA0: 0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D ....INC(RowNo);.
021DB0: 0A 09 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 52 ....ScreenPos:=R
021DC0: 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D 0A owNo*RowWidth;..
021DD0: 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 44 6F ...END|...MoveDo
021DE0: 77 6E 3A 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 wn:IF RowNo<(Log
021DF0: 53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 ScreenDepth-1) T
021E00: 0D 0A 0D 0A 28 2A 09 09 50 65 72 66 6F 72 6D 20 ....(*..Perform
021E10: 61 20 73 63 72 65 65 6E 20 63 6F 6E 74 72 6F 6C a screen control
021E20: 20 6F 70 65 72 61 74 69 6F 6E 0D 0A 0D 0A 09 09 operation......
021E30: 4D 61 79 20 6E 65 65 64 20 61 6C 74 65 72 61 74 May need alterat
021E40: 69 6F 6E 20 66 6F 72 20 76 61 72 69 6F 75 73 20 ion for various
021E50: 6D 61 63 68 69 6E 65 73 2A 29 0D 0A 0D 0A 42 45 machines*)....BE
021E60: 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F 75 74 70 GIN.. IF Outp
021E70: 75 74 45 6E 61 62 6C 65 64 20 54 48 45 4E 0D 0A utEnabled THEN..
021E80: 09 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 09 .ClearCursor;...
021E90: 43 41 53 45 20 73 20 4F 46 0D 0A 09 44 69 6D 3A CASE s OF...Dim:
021EA0: 48 61 6C 66 49 6E 74 65 6E 73 69 74 79 3A 3D 54 HalfIntensity:=T
021EB0: 52 55 45 7C 0D 0A 09 42 72 69 67 68 74 3A 09 48 RUE|...Bright:.H
021EC0: 61 6C 66 49 6E 74 65 6E 73 69 74 79 3A 3D 46 41 alfIntensity:=FA
021ED0: 4C 53 45 0D 0A 09 09 45 6E 68 61 6E 63 65 64 56 LSE....EnhancedV
021EE0: 69 64 65 6F 3A 3D 54 52 55 45 7C 0D 0A 09 4E 6F ideo:=TRUE|...No
021EF0: 72 6D 61 6C 3A 09 48 61 6C 66 49 6E 74 65 6E 73 rmal:.HalfIntens
021F00: 69 74 79 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 45 ity:=FALSE;....E
021F10: 6E 68 61 6E 63 65 64 56 69 64 65 6F 3A 3D 46 41 nhancedVideo:=FA
021F20: 4C 53 45 3B 0D 0A 09 09 49 6E 76 65 72 73 65 56 LSE;....InverseV
021F30: 69 64 65 6F 3A 3D 46 41 4C 53 45 3B 0D 0A 09 09 ideo:=FALSE;....
021F40: 42 6C 69 6E 6B 69 6E 67 3A 3D 46 41 4C 53 45 3B Blinking:=FALSE;
021F50: 0D 0A 09 09 55 6E 64 65 72 4C 69 6E 65 3A 3D 46 ....UnderLine:=F
021F60: 41 4C 53 45 7C 0D 0A 09 49 6E 76 65 72 73 65 3A ALSE|...Inverse:
021F70: 49 6E 76 65 72 73 65 56 69 64 65 6F 3A 3D 54 52 InverseVideo:=TR
021F80: 55 45 7C 0D 0A 09 42 6C 69 6E 6B 3A 42 6C 69 6E UE|...Blink:Blin
021F90: 6B 69 6E 67 3A 3D 54 52 55 45 7C 0D 0A 09 53 74 king:=TRUE|...St
021FA0: 61 72 74 47 72 61 70 68 2C 45 6E 64 47 72 61 70 artGraph,EndGrap
021FB0: 68 3A 28 2A 64 6F 20 6E 6F 74 68 69 6E 67 2A 29 h:(*do nothing*)
021FC0: 7C 0D 0A 09 44 65 6C 43 68 61 72 3A 28 2A 4D 6F |...DelChar:(*Mo
021FD0: 76 65 20 72 65 73 74 20 6F 66 20 6C 69 6E 65 20 ve rest of line
021FE0: 75 70 20 6F 6E 65 2C 20 61 64 64 20 62 6C 61 6E up one, add blan
021FF0: 6B 20 74 6F 20 65 6E 64 2A 29 0D 0A 09 09 4D 6F k to end*)....Mo
022000: 48 45 4E 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E HEN.....INC(RowN
022010: 6F 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F o);.....ScreenPo
022020: 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B 52 6F 77 s:=ScreenPos+Row
022030: 57 69 64 74 68 3B 0D 0A 09 09 09 45 4E 44 7C 0D Width;.....END|.
022040: 0A 09 4D 6F 76 65 55 70 3A 49 46 20 52 6F 77 4E ..MoveUp:IF RowN
022050: 6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09 44 45 43 o>0 THEN.....DEC
022060: 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 63 72 (RowNo);.....Scr
022070: 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F eenPos:=ScreenPo
022080: 73 2D 52 6F 77 57 69 64 74 68 3B 0D 0A 09 09 09 s-RowWidth;.....
022090: 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 43 END;....END; (*C
0220A0: 41 53 45 2A 29 0D 0A 09 53 65 74 43 75 72 73 6F ASE*)...SetCurso
0220B0: 72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 20 45 r;...END;.. E
0220C0: 4E 44 20 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C ND ScreenControl
0220D0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63 72 ;..PROCEDURE Scr
0220E0: 6F 6C 6C 57 69 6E 64 6F 77 55 70 28 53 74 61 72 ollWindowUp(Star
0220F0: 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 tofWindow,EndofW
022100: 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B indow:CARDINAL);
022110: 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 ..BEGIN.. IF
022120: 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 OutputEnabled TH
022130: 45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 EN...ClearCursor
022140: 3B 0D 0A 09 4D 6F 76 65 75 70 28 41 44 52 28 53 ;...Moveup(ADR(S
022150: 63 72 65 65 6E 5B 28 53 74 61 72 74 6F 66 57 69 creen[(StartofWi
022160: 6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 5D 29 ndow)*RowWidth])
022170: 2C 0D 0A 09 09 20 41 44 52 28 53 63 72 65 65 6E ,.... ADR(Screen
022180: 5B 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2B [(StartofWindow+
022190: 31 29 2A 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 1)*RowWidth]),..
0221A0: 09 09 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2D .. (EndofWindow-
0221B0: 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 29 2A 52 StartofWindow)*R
0221C0: 6F 77 57 69 64 74 68 29 3B 0D 0A 09 46 4F 52 20 owWidth);...FOR
0221D0: 69 3A 3D 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 i:=StartofWindow
0221E0: 2A 52 6F 77 57 69 64 74 68 20 54 4F 20 28 53 74 *RowWidth TO (St
0221F0: 61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52 artofWindow+1)*R
022200: 76 65 64 6F 77 6E 28 41 44 52 28 53 63 72 65 65 vedown(ADR(Scree
022210: 6E 5B 53 63 72 65 65 6E 50 6F 73 2B 31 5D 29 2C n[ScreenPos+1]),
022220: 41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 65 65 ADR(Screen[Scree
022230: 6E 50 6F 73 5D 29 2C 52 6F 77 57 69 64 74 68 2D nPos]),RowWidth-
022240: 43 6F 6C 4E 6F 2D 31 29 3B 0D 0A 09 09 53 63 72 ColNo-1);....Scr
022250: 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 2D 43 6F een[ScreenPos-Co
022260: 6C 4E 6F 2B 52 6F 77 57 69 64 74 68 2D 31 5D 3A lNo+RowWidth-1]:
022270: 3D 27 20 27 7C 0D 0A 09 44 65 6C 4C 69 6E 65 3A =' '|...DelLine:
022280: 28 2A 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 73 (*Move rest of s
022290: 63 72 65 65 6E 20 75 70 20 61 20 6C 69 6E 65 2C creen up a line,
0222A0: 20 61 64 64 20 62 6C 61 6E 6B 20 6C 69 6E 65 20 add blank line
0222B0: 61 74 20 65 6E 64 2A 29 0D 0A 09 09 4D 6F 76 65 at end*)....Move
0222C0: 64 6F 77 6E 28 41 44 52 28 53 63 72 65 65 6E 5B down(ADR(Screen[
0222D0: 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B ScreenPos-ColNo+
0222E0: 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 09 RowWidth]),.....
0222F0: 20 41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 65 ADR(Screen[Scre
022300: 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 5D 29 2C 0D 0A enPos-ColNo]),..
022310: 09 09 09 53 63 72 65 65 6E 53 69 7A 65 2D 53 63 ...ScreenSize-Sc
022320: 72 65 65 6E 50 6F 73 2B 43 6F 6C 4E 6F 2D 52 6F reenPos+ColNo-Ro
022330: 77 57 69 64 74 68 29 3B 0D 0A 09 09 46 4F 52 20 wWidth);....FOR
022340: 69 3A 3D 53 63 72 65 65 6E 53 69 7A 65 2D 52 6F i:=ScreenSize-Ro
022350: 77 57 69 64 74 68 20 54 4F 20 53 63 72 65 65 6E wWidth TO Screen
022360: 53 69 7A 65 2D 31 20 44 4F 20 53 63 72 65 65 6E Size-1 DO Screen
022370: 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 3B 0D 0A 09 [i]:=' ' END;...
022380: 09 7C 0D 0A 09 49 6E 73 43 68 61 72 3A 28 2A 4D .|...InsChar:(*M
022390: 6F 76 65 20 72 65 73 74 20 6F 66 20 6C 69 6E 65 ove rest of line
0223A0: 20 72 69 67 68 74 20 6F 6E 65 20 63 68 61 72 61 right one chara
0223B0: 63 74 65 72 2C 20 6C 61 73 74 20 63 68 61 72 61 cter, last chara
0223C0: 63 74 65 72 20 6D 61 79 20 62 65 20 6C 6F 73 74 cter may be lost
0223D0: 2A 29 0D 0A 09 09 4D 6F 76 65 75 70 28 41 44 52 *)....Moveup(ADR
0223E0: 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F (Screen[ScreenPo
0223F0: 73 5D 29 2C 41 44 52 28 53 63 72 65 65 6E 5B 53 s]),ADR(Screen[S
022400: 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D 0A 09 09 owWidth-1 DO....
022410: 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 3B 0D Screen[i]:=' ';.
022420: 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 43 75 72 ...END;...SetCur
022430: 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D 0A 20 20 20 sor;...END;..
022440: 20 45 4E 44 20 53 63 72 6F 6C 6C 57 69 6E 64 6F END ScrollWindo
022450: 77 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 wUp;..PROCEDURE
022460: 53 63 72 6F 6C 6C 57 69 6E 64 6F 77 44 6F 77 6E ScrollWindowDown
022470: 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 (StartofWindow,E
022480: 6E 64 6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 ndofWindow:CARDI
022490: 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 NAL);..BEGIN..
0224A0: 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62 6C IF OutputEnabl
0224B0: 65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 43 ed THEN...ClearC
0224C0: 75 72 73 6F 72 3B 0D 0A 09 4D 6F 76 65 64 6F 77 ursor;...Movedow
0224D0: 6E 28 41 44 52 28 53 63 72 65 65 6E 5B 28 53 74 n(ADR(Screen[(St
0224E0: 61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52 artofWindow+1)*R
0224F0: 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 20 41 owWidth]),.... A
022500: 44 52 28 53 63 72 65 65 6E 5B 28 53 74 61 72 74 DR(Screen[(Start
022510: 6F 66 57 69 6E 64 6F 77 29 2A 52 6F 77 57 69 64 ofWindow)*RowWid
022520: 74 68 5D 29 2C 0D 0A 09 09 20 28 45 6E 64 6F 66 th]),.... (Endof
022530: 57 69 6E 64 6F 77 2D 53 74 61 72 74 6F 66 57 69 Window-StartofWi
022540: 6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 29 3B ndow)*RowWidth);
022550: 0D 0A 09 46 4F 52 20 69 3A 3D 45 6E 64 6F 66 57 ...FOR i:=EndofW
022560: 69 6E 64 6F 77 2A 52 6F 77 57 69 64 74 68 20 54 indow*RowWidth T
022570: 4F 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2B 31 O (EndofWindow+1
022580: 29 2A 52 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D )*RowWidth-1 DO.
022590: 0A 09 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 ...Screen[i]:='
0225A0: 27 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 ';....END;...Set
0225B0: 43 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 3B 0D 0A Cursor;...END;..
0225C0: 20 20 20 20 45 4E 44 20 53 63 72 6F 6C 6C 57 69 END ScrollWi
0225D0: 6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 50 52 4F ndowDown;....PRO
0225E0: 43 45 44 55 52 45 20 4C 6F 61 64 54 65 72 6D 43 CEDURE LoadTermC
0225F0: 6F 64 65 28 46 3A 46 69 6C 65 4E 61 6D 65 29 3B ode(F:FileName);
022600: 63 72 65 65 6E 50 6F 73 2B 31 5D 29 2C 52 6F 77 creenPos+1]),Row
022610: 57 69 64 74 68 2D 43 6F 6C 4E 6F 2D 31 29 3B 0D Width-ColNo-1);.
022620: 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 65 65 6E ...Screen[Screen
022630: 50 6F 73 5D 3A 3D 27 20 27 7C 0D 0A 09 49 6E 73 Pos]:=' '|...Ins
022640: 4C 69 6E 65 3A 28 2A 4D 6F 76 65 20 72 65 73 74 Line:(*Move rest
022650: 20 6F 66 20 73 63 72 65 65 6E 20 64 6F 77 6E 20 of screen down
022660: 6F 6E 65 20 6C 69 6E 65 2C 20 61 64 64 20 62 6C one line, add bl
022670: 61 6E 6B 20 6C 69 6E 65 2A 29 0D 0A 09 09 4D 6F ank line*)....Mo
022680: 76 65 75 70 28 41 44 52 28 53 63 72 65 65 6E 5B veup(ADR(Screen[
022690: 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 5D ScreenPos-ColNo]
0226A0: 29 2C 41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 ),ADR(Screen[Scr
0226B0: 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52 6F 77 eenPos-ColNo+Row
0226C0: 57 69 64 74 68 5D 29 2C 0D 0A 09 09 53 63 72 65 Width]),....Scre
0226D0: 65 6E 53 69 7A 65 2D 53 63 72 65 65 6E 50 6F 73 enSize-ScreenPos
0226E0: 2B 43 6F 6C 4E 6F 2D 52 6F 77 57 69 64 74 68 29 +ColNo-RowWidth)
0226F0: 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 53 63 72 65 ;....FOR i:=Scre
022700: 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 20 54 4F 20 53 enPos-ColNo TO S
022710: 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52 creenPos-ColNo+R
022720: 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D 0A 09 09 owWidth-1 DO....
022730: 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 3B .Screen[i]:=' ';
022740: 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 7C 0D 0A .....END;....|..
022750: 09 44 65 6C 45 6F 6C 3A 46 4F 52 20 69 3A 3D 53 .DelEol:FOR i:=S
022760: 63 72 65 65 6E 50 6F 73 20 54 4F 20 53 63 72 65 creenPos TO Scre
022770: 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52 6F 77 57 enPos-ColNo+RowW
022780: 69 64 74 68 2D 31 20 44 4F 20 53 63 72 65 65 6E idth-1 DO Screen
022790: 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 7C 0D 0A 09 [i]:=' ' END|...
0227A0: 44 65 6C 45 6F 73 3A 46 4F 52 20 69 3A 3D 53 63 DelEos:FOR i:=Sc
0227B0: 72 65 65 6E 50 6F 73 20 54 4F 20 53 63 72 65 65 reenPos TO Scree
0227C0: 6E 53 69 7A 65 2D 31 20 44 4F 20 53 63 72 65 65 nSize-1 DO Scree
0227D0: 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 7C 0D 0A n[i]:=' ' END|..
0227E0: 09 43 6C 65 61 72 53 63 72 65 65 6E 3A 0D 0A 09 .ClearScreen:...
0227F0: 09 09 28 2A 4F 73 62 6F 72 6E 65 20 73 70 65 63 ..(*Osborne spec
022800: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
022810: 1D 00 01 00 02 09 52 E5 1D 00 41 02 00 00 00 02 ......R...A.....
022820: 1D 00 46 02 00 00 00 02 1D 00 42 02 00 00 00 02 ..F.......B.....
022830: 1D 00 47 02 00 00 00 02 1D 00 43 02 00 00 00 02 ..G.......C.....
022840: 1D 00 48 02 00 00 00 02 1D 00 44 02 00 00 00 02 ..H.......D.....
022850: 1D 00 49 02 00 00 00 02 1D 00 45 02 00 00 00 02 ..I.......E.....
022860: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
022870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
022880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
022890: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0228F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
022900: 0D 0A 42 45 47 49 4E 0D 0A 09 28 2A 6E 6F 74 20 ..BEGIN...(*not
022910: 69 6D 70 6C 65 6D 65 6E 74 65 64 20 69 6E 20 74 implemented in t
022920: 68 69 73 20 76 65 72 73 69 6F 6E 2A 29 0D 0A 09 his version*)...
022930: 45 4E 44 20 4C 6F 61 64 54 65 72 6D 43 6F 64 65 END LoadTermCode
022940: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 69 ;..PROCEDURE Cli
022950: 70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43 41 p(x1,y1,x2,y2:CA
022960: 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D RDINAL);..BEGIN.
022970: 0A 09 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D 65 6E ..(*not implemen
022980: 74 65 64 20 69 6E 20 74 68 69 73 20 76 65 72 73 ted in this vers
022990: 69 6F 6E 2A 29 0D 0A 09 45 4E 44 20 43 6C 69 70 ion*)...END Clip
0229A0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44 72 ;..PROCEDURE Dr
0229B0: 61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C 79 awBox(x1,y1,x2,y
0229C0: 32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A 2:CARDINAL);....
0229D0: 28 2A 09 09 64 72 61 77 20 61 20 62 6F 78 20 66 (*..draw a box f
0229E0: 6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E 20 74 or a window on t
0229F0: 68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09 09 78 he screen......x
022A00: 31 2C 79 31 20 20 69 73 20 74 68 65 20 6C 6F 77 1,y1 is the low
022A10: 65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72 0D 0A er left corner..
022A20: 09 09 78 32 2C 79 32 20 20 69 73 20 75 70 70 65 ..x2,y2 is uppe
022A30: 72 20 72 69 67 68 74 20 63 6F 72 6E 65 72 2A 29 r right corner*)
022A40: 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C ..VAR.i:CARDINAL
022A50: 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 ;..BEGIN.. IF
022A60: 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 OutputEnabled T
022A70: 48 45 4E 0D 0A 09 47 6F 74 6F 78 79 28 78 31 2C HEN...Gotoxy(x1,
022A80: 79 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E y1);...ScreenCon
022A90: 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68 29 trol(StartGraph)
022AA0: 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F ;...ScreenContro
022AB0: 6C 28 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A 09 46 l(CornerLL);...F
022AC0: 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 OR i:=x1+1 TO x2
022AD0: 2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 -1 DO ScreenCont
022AE0: 72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 rol(Horizontal)
022AF0: 45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E END;...ScreenCon
022B00: 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 4D IMPLEMENTATION M
022B10: 4F 44 55 4C 45 20 53 63 72 65 65 6E 49 4F 3B 0D ODULE ScreenIO;.
022B20: 0A 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 74 68 ...(*.This is th
022B30: 65 20 6D 65 6D 6F 72 79 20 6D 61 70 70 65 64 20 e memory mapped
022B40: 76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72 65 65 version of scree
022B50: 6E 20 69 6E 70 75 74 2D 6F 75 74 70 75 74 0D 0A n input-output..
022B60: 0D 0A 09 54 6F 20 75 73 65 20 69 74 20 6F 6E 20 ...To use it on
022B70: 79 6F 75 72 20 6D 61 63 68 69 6E 65 2C 20 79 6F your machine, yo
022B80: 75 20 6D 61 79 20 6E 65 65 64 20 74 6F 20 63 68 u may need to ch
022B90: 61 6E 67 65 20 73 6F 6D 65 20 6F 66 20 74 68 65 ange some of the
022BA0: 20 0D 0A 09 63 6F 6E 73 74 61 6E 74 73 20 62 65 ...constants be
022BB0: 6C 6F 77 0D 0A 0D 0A 09 54 68 65 20 6D 6F 64 75 low.....The modu
022BC0: 6C 65 20 61 73 73 75 6D 65 73 20 74 68 61 74 20 le assumes that
022BD0: 74 68 65 20 6D 65 6D 6F 72 79 20 66 6F 72 20 74 the memory for t
022BE0: 68 65 20 73 63 72 65 65 6E 20 69 73 20 63 6F 6E he screen is con
022BF0: 74 69 67 75 6F 75 73 20 0D 0A 09 61 6E 64 20 69 tiguous ...and i
022C00: 6E 20 74 68 65 20 64 65 66 61 75 6C 74 20 62 61 n the default ba
022C10: 6E 6B 2E 20 28 49 66 20 69 74 20 69 73 20 69 6E nk. (If it is in
022C20: 20 61 6E 6F 74 68 65 72 20 62 61 6E 6B 2C 20 79 another bank, y
022C30: 6F 75 20 77 69 6C 6C 20 68 61 76 65 20 0D 0A 09 ou will have ...
022C40: 74 6F 20 63 68 61 6E 67 65 20 74 68 65 20 63 6F to change the co
022C50: 64 65 20 6F 66 20 74 68 65 20 6D 6F 64 75 6C 65 de of the module
022C60: 20 61 70 70 72 6F 70 72 69 61 74 65 6C 79 29 0D appropriately).
022C70: 0A 0D 0A 09 54 68 65 20 76 61 6C 75 65 73 20 73 ....The values s
022C80: 65 74 20 62 65 6C 6F 77 20 61 72 65 20 66 6F 72 et below are for
022C90: 20 61 6E 20 4F 73 62 6F 72 6E 65 20 31 20 77 69 an Osborne 1 wi
022CA0: 74 68 20 53 63 72 65 65 6E 20 50 61 63 6B 0D 0A th Screen Pack..
022CB0: 0D 0A 09 4E 6F 74 65 20 74 68 61 74 20 74 68 69 ...Note that thi
022CC0: 73 20 76 65 72 73 69 6F 6E 20 6F 66 20 73 63 72 s version of scr
022CD0: 65 65 6E 69 6F 20 64 6F 65 73 20 6E 6F 74 20 75 eenio does not u
022CE0: 73 65 20 74 68 65 20 74 65 72 6D 69 6E 61 6C 20 se the terminal
022CF0: 0D 0A 09 64 65 66 69 6E 69 74 69 6F 6E 20 66 69 ...definition fi
022D00: 74 72 6F 6C 28 43 6F 72 6E 65 72 4C 52 29 3B 0D trol(CornerLR);.
022D10: 0A 09 47 6F 74 6F 78 79 28 78 31 2C 79 32 29 3B ..Gotoxy(x1,y2);
022D20: 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C ...ScreenControl
022D30: 28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46 4F (CornerUL);...FO
022D40: 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 2D R i:=x1+1 TO x2-
022D50: 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 72 1 DO ScreenContr
022D60: 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 45 ol(Horizontal) E
022D70: 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 ND;...ScreenCont
022D80: 72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D 0A rol(CornerUR);..
022D90: 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 .FOR i:=y2+1 TO
022DA0: 79 31 2D 31 20 20 44 4F 0D 0A 09 09 47 6F 74 6F y1-1 DO....Goto
022DB0: 78 79 28 78 32 2C 69 29 3B 0D 0A 09 09 53 63 72 xy(x2,i);....Scr
022DC0: 65 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 eenControl(Verti
022DD0: 63 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 cal);....END;...
022DE0: 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 79 FOR i:=y2+1 TO y
022DF0: 31 2D 31 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 79 1-1 DO....Gotoxy
022E00: 28 78 31 2C 69 29 3B 0D 0A 09 09 53 63 72 65 65 (x1,i);....Scree
022E10: 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 63 61 nControl(Vertica
022E20: 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 45 4E l);....END;...EN
022E30: 44 3B 0D 0A 20 20 20 20 45 4E 44 20 44 72 61 77 D;.. END Draw
022E40: 42 6F 78 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 Box;..PROCEDURE
022E50: 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 28 4F OutputToScreen(O
022E60: 6E 3A 42 4F 4F 4C 45 41 4E 29 3B 0D 0A 42 45 47 n:BOOLEAN);..BEG
022E70: 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E 61 62 6C IN...OutputEnabl
022E80: 65 64 3A 3D 4F 6E 0D 0A 09 45 4E 44 20 4F 75 74 ed:=On...END Out
022E90: 70 75 74 54 6F 53 63 72 65 65 6E 3B 09 0D 0A 42 putToScreen;...B
022EA0: 45 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 6E 61 EGIN...OutputEna
022EB0: 62 6C 65 64 3A 3D 54 52 55 45 3B 0D 0A 09 28 2A bled:=TRUE;...(*
022EC0: 09 53 65 74 20 75 70 20 50 43 47 20 43 68 61 72 .Set up PCG Char
022ED0: 61 63 74 65 72 73 2A 29 0D 0A 09 46 4F 52 20 69 acters*)...FOR i
022EE0: 3A 3D 30 20 54 4F 20 36 2A 31 36 2D 31 20 44 4F :=0 TO 6*16-1 DO
022EF0: 20 50 43 47 5B 69 5D 3A 3D 30 78 20 45 4E 44 3B PCG[i]:=0x END;
022F00: 6C 65 2E 20 48 65 6E 63 65 2C 20 74 68 65 20 67 le. Hence, the g
022F10: 72 61 70 68 69 63 73 20 63 68 61 72 61 63 74 65 raphics characte
022F20: 72 73 20 66 6F 72 20 74 68 65 20 62 6F 78 20 61 rs for the box a
022F30: 72 65 0D 0A 09 68 61 72 64 20 63 6F 64 65 64 20 re...hard coded
022F40: 69 6E 20 74 68 65 20 66 69 6C 65 0D 0A 0D 0A 09 in the file.....
022F50: 54 68 69 73 20 76 65 72 73 69 6F 6E 20 77 69 6C This version wil
022F60: 6C 20 6E 6F 74 20 73 75 70 70 6F 72 74 20 68 61 l not support ha
022F70: 6C 66 20 69 6E 74 65 6E 73 69 74 79 20 6F 6E 20 lf intensity on
022F80: 74 68 65 20 4F 73 62 6F 72 6E 65 20 73 69 6E 63 the Osborne sinc
022F90: 65 20 0D 0A 09 74 68 61 74 20 66 61 63 69 6C 69 e ...that facili
022FA0: 74 79 20 64 6F 65 73 20 6E 6F 74 20 77 6F 72 6B ty does not work
022FB0: 20 61 73 20 64 6F 63 75 6D 65 6E 74 65 64 2E 20 as documented.
022FC0: 54 68 69 73 20 6D 61 79 20 62 65 20 73 6F 6D 65 This may be some
022FD0: 74 68 69 6E 67 0D 0A 09 74 6F 20 64 6F 20 77 69 thing...to do wi
022FE0: 74 68 20 6D 79 20 4F 73 62 6F 72 6E 65 20 68 61 th my Osborne ha
022FF0: 76 69 6E 67 20 62 65 65 6E 20 68 61 63 6B 65 64 ving been hacked
023000: 0D 0A 0D 0A 09 54 68 69 73 20 76 65 72 73 69 6F .....This versio
023010: 6E 20 77 69 6C 6C 20 6E 6F 74 20 73 63 72 6F 6C n will not scrol
023020: 6C 20 74 68 65 20 73 63 72 65 65 6E 20 65 69 74 l the screen eit
023030: 68 65 72 0D 0A 2A 29 0D 0A 0D 0A 46 52 4F 4D 20 her..*)....FROM
023040: 54 65 72 6D 69 6E 61 6C 20 49 4D 50 4F 52 54 20 Terminal IMPORT
023050: 43 68 61 72 52 6F 75 74 69 6E 65 2C 43 68 61 72 CharRoutine,Char
023060: 45 6E 61 62 6C 65 64 2C 42 6C 69 6E 6B 52 6F 75 Enabled,BlinkRou
023070: 74 69 6E 65 2C 42 6C 69 6E 6B 45 6E 61 62 6C 65 tine,BlinkEnable
023080: 64 3B 0D 0A 46 52 4F 4D 20 46 61 73 74 4D 6F 76 d;..FROM FastMov
023090: 65 20 49 4D 50 4F 52 54 20 4D 6F 76 65 75 70 2C e IMPORT Moveup,
0230A0: 4D 6F 76 65 64 6F 77 6E 3B 0D 0A 46 52 4F 4D 20 Movedown;..FROM
0230B0: 53 59 53 54 45 4D 20 49 4D 50 4F 52 54 20 41 44 SYSTEM IMPORT AD
0230C0: 52 2C 53 49 5A 45 3B 0D 0A 46 52 4F 4D 20 43 50 R,SIZE;..FROM CP
0230D0: 4D 20 49 4D 50 4F 52 54 20 77 63 63 66 63 2C 42 M IMPORT wccfc,B
0230E0: 44 4F 53 3B 0D 0A 28 2A 46 52 4F 4D 20 4F 73 62 DOS;..(*FROM Osb
0230F0: 6F 72 6E 65 20 49 4D 50 4F 52 54 20 42 61 6E 6B orne IMPORT Bank
023100: 0D 0A 09 46 4F 52 20 69 3A 3D 30 20 54 4F 20 31 ...FOR i:=0 TO 1
023110: 30 20 44 4F 20 50 43 47 5B 69 5D 3A 3D 33 63 78 0 DO PCG[i]:=3cx
023120: 20 45 4E 44 3B 0D 0A 09 28 2A 09 48 6F 72 69 7A END;...(*.Horiz
023130: 6F 6E 74 61 6C 20 62 61 72 2A 29 0D 0A 09 46 4F ontal bar*)...FO
023140: 52 20 69 3A 3D 31 36 2B 33 20 54 4F 20 31 36 2B R i:=16+3 TO 16+
023150: 33 2B 34 20 44 4F 20 50 43 47 5B 69 5D 3A 3D 30 3+4 DO PCG[i]:=0
023160: 66 66 78 20 45 4E 44 3B 0D 0A 09 28 2A 09 55 70 ffx END;...(*.Up
023170: 70 65 72 20 4C 65 66 74 2A 29 0D 0A 09 46 4F 52 per Left*)...FOR
023180: 20 69 3A 3D 32 2A 31 36 2B 33 20 54 4F 20 32 2A i:=2*16+3 TO 2*
023190: 31 36 2B 33 2B 34 20 44 4F 20 50 43 47 5B 69 5D 16+3+4 DO PCG[i]
0231A0: 3A 3D 33 66 78 20 45 4E 44 3B 0D 0A 09 46 4F 52 :=3fx END;...FOR
0231B0: 20 69 3A 3D 32 2A 31 36 2B 33 2B 35 20 54 4F 20 i:=2*16+3+5 TO
0231C0: 33 2A 31 36 2D 31 20 44 4F 20 50 43 47 5B 69 5D 3*16-1 DO PCG[i]
0231D0: 3A 3D 33 63 78 20 45 4E 44 3B 0D 0A 09 28 2A 09 :=3cx END;...(*.
0231E0: 55 70 70 65 72 20 52 69 67 68 74 2A 29 0D 0A 09 Upper Right*)...
0231F0: 46 4F 52 20 69 3A 3D 33 2A 31 36 2B 33 20 54 4F FOR i:=3*16+3 TO
023200: 20 33 2A 31 36 2B 33 2B 34 20 44 4F 20 50 43 47 3*16+3+4 DO PCG
023210: 5B 69 5D 3A 3D 30 66 63 78 20 45 4E 44 3B 0D 0A [i]:=0fcx END;..
023220: 09 46 4F 52 20 69 3A 3D 33 2A 31 36 2B 33 2B 35 .FOR i:=3*16+3+5
023230: 20 54 4F 20 34 2A 31 36 2D 31 20 44 4F 20 50 43 TO 4*16-1 DO PC
023240: 47 5B 69 5D 3A 3D 33 63 78 20 45 4E 44 3B 0D 0A G[i]:=3cx END;..
023250: 09 28 2A 09 4C 6F 77 65 72 20 4C 65 66 74 2A 29 .(*.Lower Left*)
023260: 0D 0A 09 46 4F 52 20 69 3A 3D 34 2A 31 36 20 54 ...FOR i:=4*16 T
023270: 4F 20 34 2A 31 36 2B 32 20 44 4F 20 50 43 47 5B O 4*16+2 DO PCG[
023280: 69 5D 3A 3D 33 63 78 20 45 4E 44 3B 0D 0A 09 46 i]:=3cx END;...F
023290: 4F 52 20 69 3A 3D 34 2A 31 36 2B 33 20 54 4F 20 OR i:=4*16+3 TO
0232A0: 34 2A 31 36 2B 33 2B 34 20 44 4F 20 50 43 47 5B 4*16+3+4 DO PCG[
0232B0: 69 5D 3A 3D 33 66 78 20 45 4E 44 3B 0D 0A 09 28 i]:=3fx END;...(
0232C0: 2A 09 4C 6F 77 65 72 20 52 69 67 68 74 2A 29 0D *.Lower Right*).
0232D0: 0A 09 46 4F 52 20 69 3A 3D 35 2A 31 36 20 54 4F ..FOR i:=5*16 TO
0232E0: 20 35 2A 31 36 2B 32 20 44 4F 20 50 43 47 5B 69 5*16+2 DO PCG[i
0232F0: 5D 3A 3D 30 33 63 78 20 45 4E 44 3B 0D 0A 09 46 ]:=03cx END;...F
023300: 32 3B 2A 29 0D 0A 46 52 4F 4D 20 49 6E 74 4C 6F 2;*)..FROM IntLo
023310: 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E 44 3B gic IMPORT IAND;
023320: 0D 0A 0D 0A 28 2A 09 53 63 72 65 65 6E 20 68 61 ....(*.Screen ha
023330: 6E 64 6C 69 6E 67 20 72 6F 75 74 69 6E 65 73 20 ndling routines
023340: 66 6F 72 20 63 75 72 73 6F 72 20 70 6F 73 69 74 for cursor posit
023350: 69 6F 6E 2C 20 61 74 74 72 69 62 75 74 65 20 65 ion, attribute e
023360: 74 63 0D 0A 0D 0A 09 53 70 65 63 69 66 69 63 20 tc.....Specific
023370: 74 6F 20 74 68 69 73 20 63 6F 6D 70 69 6C 65 72 to this compiler
023380: 2A 29 0D 0A 0D 0A 43 4F 4E 53 54 09 4C 6F 67 53 *)....CONST.LogS
023390: 63 72 65 65 6E 57 69 64 74 68 3D 31 30 30 3B 09 creenWidth=100;.
0233A0: 28 2A 4C 6F 67 69 63 61 6C 20 73 63 72 65 65 6E (*Logical screen
0233B0: 20 77 69 64 74 68 20 0D 0A 09 09 09 09 28 6D 61 width ......(ma
0233C0: 6E 79 20 70 65 6F 70 6C 65 20 6F 6E 6C 79 20 68 ny people only h
0233D0: 61 76 65 20 38 30 29 2A 29 0D 0A 09 52 6F 77 57 ave 80)*)...RowW
0233E0: 69 64 74 68 3D 31 32 38 3B 09 09 28 2A 77 69 64 idth=128;..(*wid
0233F0: 74 68 20 6F 66 20 6D 65 6D 6F 72 79 20 66 6F 72 th of memory for
023400: 20 6F 6E 65 20 72 6F 77 20 0D 0A 09 09 09 09 28 one row ......(
023410: 69 2E 65 2E 20 6E 75 6D 62 65 72 20 6F 66 20 62 i.e. number of b
023420: 79 74 65 73 2A 29 0D 0A 09 4C 6F 67 53 63 72 65 ytes*)...LogScre
023430: 65 6E 44 65 70 74 68 3D 32 34 3B 09 09 28 2A 4C enDepth=24;..(*L
023440: 69 6E 65 73 20 6F 6E 20 74 68 65 20 73 63 72 65 ines on the scre
023450: 65 6E 2A 29 0D 0A 09 53 63 72 65 65 6E 53 74 61 en*)...ScreenSta
023460: 72 74 3D 30 66 30 30 30 68 3B 09 28 2A 62 61 73 rt=0f000h;.(*bas
023470: 65 20 6F 66 20 73 63 72 65 65 6E 2A 29 0D 0A 09 e of screen*)...
023480: 43 68 61 72 49 6E 63 72 65 6D 65 6E 74 3D 31 3B CharIncrement=1;
023490: 09 28 2A 6E 75 6D 62 65 72 20 6F 66 20 62 79 74 .(*number of byt
0234A0: 65 73 20 62 65 74 77 65 65 6E 20 63 68 61 72 61 es between chara
0234B0: 63 74 65 72 73 2A 29 0D 0A 09 53 63 72 65 65 6E cters*)...Screen
0234C0: 53 69 7A 65 3D 31 32 38 2A 33 32 3B 09 28 2A 6E Size=128*32;.(*n
0234D0: 75 6D 62 65 72 20 6F 66 20 62 79 74 65 73 20 69 umber of bytes i
0234E0: 6E 20 73 63 72 65 65 6E 20 61 72 65 61 2A 29 0D n screen area*).
0234F0: 0A 0D 0A 09 43 52 3D 30 64 78 3B 09 09 09 28 2A ....CR=0dx;...(*
023500: 4F 52 20 69 3A 3D 35 2A 31 36 2B 33 20 54 4F 20 OR i:=5*16+3 TO
023510: 35 2A 31 36 2B 33 2B 34 20 44 4F 20 50 43 47 5B 5*16+3+4 DO PCG[
023520: 69 5D 3A 3D 30 66 63 78 20 45 4E 44 3B 0D 0A 09 i]:=0fcx END;...
023530: 53 63 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 ScreenPos:=0;...
023540: 0D 0A 09 42 6C 69 6E 6B 52 6F 75 74 69 6E 65 3A ...BlinkRoutine:
023550: 3D 42 6C 69 6E 6B 43 75 72 73 6F 72 3B 0D 0A 09 =BlinkCursor;...
023560: 42 6C 69 6E 6B 45 6E 61 62 6C 65 64 3A 3D 54 52 BlinkEnabled:=TR
023570: 55 45 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 UE;...ScreenCont
023580: 72 6F 6C 28 43 6C 65 61 72 53 63 72 65 65 6E 29 rol(ClearScreen)
023590: 3B 0D 0A 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 ;...ColNo:=0;...
0235A0: 52 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 43 68 61 72 RowNo:=0;...Char
0235B0: 52 6F 75 74 69 6E 65 3A 3D 57 72 69 74 65 3B 0D Routine:=Write;.
0235C0: 0A 09 43 68 61 72 45 6E 61 62 6C 65 64 3A 3D 54 ..CharEnabled:=T
0235D0: 52 55 45 3B 09 0D 0A 09 53 63 72 65 65 6E 57 69 RUE;....ScreenWi
0235E0: 64 74 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 57 69 dth:=LogScreenWi
0235F0: 64 74 68 3B 0D 0A 09 53 63 72 65 65 6E 44 65 70 dth;...ScreenDep
023600: 74 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 44 65 70 th:=LogScreenDep
023610: 74 68 3B 0D 0A 09 45 4E 44 20 53 63 72 65 65 6E th;...END Screen
023620: 49 4F 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A IO..............
023630: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
023640: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
023650: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
023660: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
023670: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
023680: 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F ;...ScreenContro
023690: 6C 28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46 l(CornerUL);...F
0236A0: 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 OR i:=x1+1 TO x2
0236B0: 2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 -1 DO ScreenCont
0236C0: 72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 rol(Horizontal)
0236D0: 45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E END;...ScreenCon
0236E0: 74 72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D trol(CornerUR);.
0236F0: 0A 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F ..FOR i:=y2+1 TO
023700: 43 61 72 72 69 61 67 65 20 72 65 74 75 72 6E 2A Carriage return*
023710: 29 0D 0A 09 4C 46 3D 30 61 78 3B 09 09 09 28 2A )...LF=0ax;...(*
023720: 4C 69 6E 65 20 66 65 65 64 2A 29 0D 0A 09 54 41 Line feed*)...TA
023730: 42 3D 30 39 78 3B 09 09 28 2A 54 41 42 2A 29 0D B=09x;..(*TAB*).
023740: 0A 09 42 53 3D 30 38 78 3B 0D 0A 56 41 52 0D 0A ..BS=08x;..VAR..
023750: 09 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 3A 42 .OutputEnabled:B
023760: 4F 4F 4C 45 41 4E 3B 0D 0A 09 53 63 72 65 65 6E OOLEAN;...Screen
023770: 5B 30 66 30 30 30 68 5D 3A 41 52 52 41 59 5B 30 [0f000h]:ARRAY[0
023780: 2E 2E 53 63 72 65 65 6E 53 69 7A 65 2D 31 5D 20 ..ScreenSize-1]
023790: 4F 46 20 43 48 41 52 3B 0D 0A 09 53 63 72 65 65 OF CHAR;...Scree
0237A0: 6E 50 6F 73 3A 43 41 52 44 49 4E 41 4C 3B 09 28 nPos:CARDINAL;.(
0237B0: 2A 6E 65 78 74 20 63 68 61 72 61 63 74 65 72 20 *next character
0237C0: 70 6F 73 69 74 69 6F 6E 20 6F 6E 20 73 63 72 65 position on scre
0237D0: 65 6E 2A 29 0D 0A 09 43 6F 6C 4E 6F 2C 52 6F 77 en*)...ColNo,Row
0237E0: 4E 6F 3A 43 41 52 44 49 4E 41 4C 3B 09 28 2A 77 No:CARDINAL;.(*w
0237F0: 68 69 63 68 20 72 65 70 72 65 73 65 6E 74 73 20 hich represents
023800: 74 68 65 20 67 69 76 65 6E 20 70 6F 73 69 74 69 the given positi
023810: 6F 6E 2A 29 0D 0A 0D 0A 09 28 2A 09 43 6F 6E 74 on*).....(*.Cont
023820: 72 6F 6C 20 61 74 74 72 69 62 75 74 65 73 2A 29 rol attributes*)
023830: 0D 0A 0D 0A 09 48 61 6C 66 49 6E 74 65 6E 73 69 .....HalfIntensi
023840: 74 79 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 ty:BOOLEAN=FALSE
023850: 3B 09 28 2A 74 72 75 65 20 69 66 20 69 6E 20 68 ;.(*true if in h
023860: 61 6C 66 20 69 6E 74 65 6E 73 69 74 79 20 6D 6F alf intensity mo
023870: 64 65 2A 29 0D 0A 09 45 6E 68 61 6E 63 65 64 56 de*)...EnhancedV
023880: 69 64 65 6F 3A 42 4F 4F 4C 45 41 4E 3D 46 41 4C ideo:BOOLEAN=FAL
023890: 53 45 3B 0D 0A 09 55 6E 64 65 72 4C 69 6E 65 3A SE;...UnderLine:
0238A0: 42 4F 4F 4C 45 41 4E 3D 46 41 4C 53 45 3B 09 28 BOOLEAN=FALSE;.(
0238B0: 2A 74 72 75 65 20 69 66 20 69 6E 20 75 6E 64 65 *true if in unde
0238C0: 72 6C 69 6E 65 20 6D 6F 64 65 2A 29 0D 0A 09 49 rline mode*)...I
0238D0: 6E 76 65 72 73 65 56 69 64 65 6F 3A 42 4F 4F 4C nverseVideo:BOOL
0238E0: 45 41 4E 3D 46 41 4C 53 45 3B 0D 0A 09 42 6C 69 EAN=FALSE;...Bli
0238F0: 6E 6B 69 6E 67 3A 42 4F 4F 4C 45 41 4E 3D 46 41 nking:BOOLEAN=FA
023900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0239A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0239B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0239C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0239D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0239E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0239F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023A00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023A10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023A20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023A30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023A40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023A50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023A60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023A70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023A80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023A90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023AA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023AB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023AC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023AD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023AE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023AF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
023B00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
023B10: 1E 00 01 00 02 09 52 E5 1E 00 41 02 00 00 00 02 ......R...A.....
023B20: 1E 00 46 02 00 00 00 02 1E 00 42 02 00 00 00 02 ..F.......B.....
023B30: 1E 00 47 02 00 00 00 02 1E 00 43 02 00 00 00 02 ..G.......C.....
023B40: 1E 00 48 02 00 00 00 02 1E 00 44 02 00 00 00 02 ..H.......D.....
023B50: 1E 00 49 02 00 00 00 02 1E 00 45 02 00 00 00 02 ..I.......E.....
023B60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023B70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023B80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023B90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023BF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
023C00: 4C 53 45 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 LSE;...i:CARDINA
023C10: 4C 3B 0D 0A 0D 0A 28 2A 09 54 68 65 20 6E 65 78 L;....(*.The nex
023C20: 74 20 66 65 77 20 72 6F 75 74 69 6E 65 73 20 68 t few routines h
023C30: 61 6E 64 6C 65 20 74 68 65 20 63 75 72 73 6F 72 andle the cursor
023C40: 0D 0A 0D 0A 09 57 61 73 55 6E 64 65 72 4C 69 6E .....WasUnderLin
023C50: 65 64 20 69 73 20 74 72 75 65 20 69 66 20 74 68 ed is true if th
023C60: 65 20 63 68 61 72 61 63 74 65 72 20 75 6E 64 65 e character unde
023C70: 72 20 74 68 65 20 63 75 72 73 6F 72 0D 0A 09 73 r the cursor...s
023C80: 74 61 72 74 65 64 20 6F 75 74 20 75 6E 64 65 72 tarted out under
023C90: 6C 69 6E 65 64 0D 0A 09 0D 0A 09 54 69 6D 65 54 lined......TimeT
023CA0: 6F 43 68 61 6E 67 65 20 69 73 20 61 20 63 6F 75 oChange is a cou
023CB0: 6E 74 65 72 20 74 68 61 74 20 64 65 74 65 72 6D nter that determ
023CC0: 69 6E 65 73 20 77 68 65 6E 20 74 68 65 20 63 75 ines when the cu
023CD0: 72 73 6F 72 20 73 68 6F 75 6C 64 0D 0A 09 62 65 rsor should...be
023CE0: 20 63 68 61 6E 67 65 64 20 66 72 6F 6D 20 69 74 changed from it
023CF0: 73 20 63 75 72 72 65 6E 74 20 76 61 6C 75 65 20 s current value
023D00: 74 6F 20 69 74 73 20 6E 65 67 61 74 69 76 65 2C to its negative,
023D10: 20 74 6F 20 61 6C 6C 6F 77 20 62 6C 69 6E 6B 69 to allow blinki
023D20: 6E 67 0D 0A 2A 29 0D 0A 56 41 52 09 57 61 73 55 ng..*)..VAR.WasU
023D30: 6E 64 65 72 4C 69 6E 65 64 3A 42 4F 4F 4C 45 41 nderLined:BOOLEA
023D40: 4E 3D 46 41 4C 53 45 3B 0D 0A 09 54 69 6D 65 54 N=FALSE;...TimeT
023D50: 6F 43 68 61 6E 67 65 3A 49 4E 54 45 47 45 52 3D oChange:INTEGER=
023D60: 30 3B 0D 0A 0D 0A 28 2A 09 42 6C 69 6E 6B 20 63 0;....(*.Blink c
023D70: 75 72 73 6F 72 20 2D 20 64 65 63 72 65 6D 65 6E ursor - decremen
023D80: 74 20 74 69 6D 65 72 2C 20 69 66 20 6E 65 67 61 t timer, if nega
023D90: 74 69 76 65 20 72 65 73 65 74 20 61 6E 64 0D 0A tive reset and..
023DA0: 09 63 68 61 6E 67 65 20 74 6F 70 20 62 69 74 20 .change top bit
023DB0: 6F 66 20 63 68 61 72 61 63 74 65 72 20 75 6E 64 of character und
023DC0: 65 72 20 63 75 72 73 6F 72 2A 29 0D 0A 0D 0A 50 er cursor*)....P
023DD0: 52 4F 43 45 44 55 52 45 20 42 6C 69 6E 6B 43 75 ROCEDURE BlinkCu
023DE0: 72 73 6F 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 44 rsor;..BEGIN...D
023DF0: 45 43 28 54 69 6D 65 54 6F 43 68 61 6E 67 65 29 EC(TimeToChange)
023E00: 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 65 );.....DEC(Scree
023E10: 6E 50 6F 73 29 3B 0D 0A 09 09 09 53 63 72 65 65 nPos);.....Scree
023E20: 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3A 3D 27 20 n[ScreenPos]:='
023E30: 27 0D 0A 09 09 09 45 4E 44 0D 0A 09 45 4C 53 49 '.....END...ELSI
023E40: 46 20 63 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 F ch=TAB THEN...
023E50: 09 4C 4F 4F 50 0D 0A 09 09 09 49 46 20 43 6F 6C .LOOP.....IF Col
023E60: 4E 6F 3E 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 No>=LogScreenWid
023E70: 74 68 2D 31 20 54 48 45 4E 20 45 58 49 54 20 45 th-1 THEN EXIT E
023E80: 4E 44 3B 0D 0A 09 09 09 53 63 72 65 65 6E 5B 53 ND;.....Screen[S
023E90: 63 72 65 65 6E 50 6F 73 5D 3A 3D 27 20 27 3B 0D creenPos]:=' ';.
023EA0: 0A 09 09 09 49 4E 43 28 53 63 72 65 65 6E 50 6F ....INC(ScreenPo
023EB0: 73 29 3B 0D 0A 09 09 09 49 4E 43 28 43 6F 6C 4E s);.....INC(ColN
023EC0: 6F 29 3B 0D 0A 09 09 09 49 46 20 49 41 4E 44 28 o);.....IF IAND(
023ED0: 43 6F 6C 4E 6F 2C 37 29 3D 30 20 54 48 45 4E 20 ColNo,7)=0 THEN
023EE0: 45 58 49 54 20 45 4E 44 0D 0A 09 09 09 45 4E 44 EXIT END.....END
023EF0: 20 28 2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4C 53 45 (*LOOP*)...ELSE
023F00: 09 0D 0A 09 09 49 46 20 55 6E 64 65 72 4C 69 6E .....IF UnderLin
023F10: 65 20 4F 52 20 45 6E 68 61 6E 63 65 64 56 69 64 e OR EnhancedVid
023F20: 65 6F 20 4F 52 20 42 6C 69 6E 6B 69 6E 67 20 4F eo OR Blinking O
023F30: 52 20 49 6E 76 65 72 73 65 56 69 64 65 6F 20 54 R InverseVideo T
023F40: 48 45 4E 20 0D 0A 09 09 09 63 68 3A 3D 43 48 52 HEN .....ch:=CHR
023F50: 28 4F 52 44 28 63 68 29 2B 31 32 38 29 0D 0A 09 (ORD(ch)+128)...
023F60: 09 09 45 4E 44 3B 0D 0A 09 09 50 75 74 61 6E 64 ..END;....Putand
023F70: 49 6E 63 28 63 68 29 3B 0D 0A 09 09 45 4E 44 3B Inc(ch);....END;
023F80: 20 28 2A 4E 6F 74 20 43 52 20 6F 72 20 4C 46 20 (*Not CR or LF
023F90: 6F 72 20 54 41 42 2A 29 0D 0A 09 53 65 74 43 75 or TAB*)...SetCu
023FA0: 72 73 6F 72 3B 0D 0A 09 45 4E 44 20 0D 0A 20 20 rsor;...END ..
023FB0: 20 20 45 4E 44 20 57 72 69 74 65 3B 0D 0A 0D 0A END Write;....
023FC0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63 72 65 ..PROCEDURE Scre
023FD0: 65 6E 43 6F 6E 74 72 6F 6C 28 73 3A 45 64 69 74 enControl(s:Edit
023FE0: 73 29 3B 0D 0A 0D 0A 28 2A 09 09 50 65 72 66 6F s);....(*..Perfo
023FF0: 72 6D 20 61 20 73 63 72 65 65 6E 20 63 6F 6E 74 rm a screen cont
024000: 3B 0D 0A 09 49 46 20 54 69 6D 65 54 6F 43 68 61 ;...IF TimeToCha
024010: 6E 67 65 3C 30 20 54 48 45 4E 0D 0A 09 09 54 69 nge<0 THEN....Ti
024020: 6D 65 54 6F 43 68 61 6E 67 65 3A 3D 39 30 30 3B meToChange:=900;
024030: 09 28 2A 63 68 61 6E 67 65 20 74 6F 20 63 68 61 .(*change to cha
024040: 6E 67 65 20 62 6C 69 6E 6B 20 72 61 74 65 2A 29 nge blink rate*)
024050: 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 65 65 ....Screen[Scree
024060: 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 28 53 nPos]:=CHR(ORD(S
024070: 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 5D creen[ScreenPos]
024080: 29 2B 31 32 38 29 0D 0A 09 09 45 4E 44 0D 0A 09 )+128)....END...
024090: 45 4E 44 20 42 6C 69 6E 6B 43 75 72 73 6F 72 3B END BlinkCursor;
0240A0: 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C ....PROCEDURE Cl
0240B0: 65 61 72 43 75 72 73 6F 72 3B 0D 0A 42 45 47 49 earCursor;..BEGI
0240C0: 4E 0D 0A 09 49 46 20 28 53 63 72 65 65 6E 5B 53 N...IF (Screen[S
0240D0: 63 72 65 65 6E 50 6F 73 5D 3E 37 66 78 29 3C 3E creenPos]>7fx)<>
0240E0: 57 61 73 55 6E 64 65 72 4C 69 6E 65 64 20 54 48 WasUnderLined TH
0240F0: 45 4E 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 EN....Screen[Scr
024100: 65 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 eenPos]:=CHR(ORD
024110: 28 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F (Screen[ScreenPo
024120: 73 5D 29 2B 31 32 38 29 3B 0D 0A 09 09 45 4E 44 s])+128);....END
024130: 3B 0D 0A 09 57 61 73 55 6E 64 65 72 4C 69 6E 65 ;...WasUnderLine
024140: 64 3A 3D 46 41 4C 53 45 3B 0D 0A 09 45 4E 44 20 d:=FALSE;...END
024150: 43 6C 65 61 72 43 75 72 73 6F 72 3B 0D 0A 50 52 ClearCursor;..PR
024160: 4F 43 45 44 55 52 45 20 53 65 74 43 75 72 73 6F OCEDURE SetCurso
024170: 72 3B 0D 0A 42 45 47 49 4E 0D 0A 09 57 61 73 55 r;..BEGIN...WasU
024180: 6E 64 65 72 4C 69 6E 65 64 3A 3D 53 63 72 65 65 nderLined:=Scree
024190: 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3E 3D 38 30 n[ScreenPos]>=80
0241A0: 78 3B 0D 0A 09 53 63 72 65 65 6E 5B 53 63 72 65 x;...Screen[Scre
0241B0: 65 6E 50 6F 73 5D 3A 3D 43 48 52 28 4F 52 44 28 enPos]:=CHR(ORD(
0241C0: 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 Screen[ScreenPos
0241D0: 5D 29 2B 31 32 38 29 3B 0D 0A 09 45 4E 44 20 53 ])+128);...END S
0241E0: 65 74 43 75 72 73 6F 72 3B 0D 0A 0D 0A 50 52 4F etCursor;....PRO
0241F0: 43 45 44 55 52 45 20 47 6F 74 6F 78 79 28 78 2C CEDURE Gotoxy(x,
024200: 72 6F 6C 20 6F 70 65 72 61 74 69 6F 6E 0D 0A 0D rol operation...
024210: 0A 09 09 4D 61 79 20 6E 65 65 64 20 61 6C 74 65 ...May need alte
024220: 72 61 74 69 6F 6E 20 66 6F 72 20 76 61 72 69 6F ration for vario
024230: 75 73 20 6D 61 63 68 69 6E 65 73 2A 29 0D 0A 0D us machines*)...
024240: 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 4F .BEGIN.. IF O
024250: 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 45 utputEnabled THE
024260: 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 3B N...ClearCursor;
024270: 0D 0A 09 43 41 53 45 20 73 20 4F 46 0D 0A 09 44 ...CASE s OF...D
024280: 69 6D 3A 48 61 6C 66 49 6E 74 65 6E 73 69 74 79 im:HalfIntensity
024290: 3A 3D 54 52 55 45 7C 0D 0A 09 42 72 69 67 68 74 :=TRUE|...Bright
0242A0: 3A 09 48 61 6C 66 49 6E 74 65 6E 73 69 74 79 3A :.HalfIntensity:
0242B0: 3D 46 41 4C 53 45 0D 0A 09 09 45 6E 68 61 6E 63 =FALSE....Enhanc
0242C0: 65 64 56 69 64 65 6F 3A 3D 54 52 55 45 7C 0D 0A edVideo:=TRUE|..
0242D0: 09 4E 6F 72 6D 61 6C 3A 09 48 61 6C 66 49 6E 74 .Normal:.HalfInt
0242E0: 65 6E 73 69 74 79 3A 3D 46 41 4C 53 45 3B 0D 0A ensity:=FALSE;..
0242F0: 09 09 45 6E 68 61 6E 63 65 64 56 69 64 65 6F 3A ..EnhancedVideo:
024300: 3D 46 41 4C 53 45 3B 0D 0A 09 09 49 6E 76 65 72 =FALSE;....Inver
024310: 73 65 56 69 64 65 6F 3A 3D 46 41 4C 53 45 3B 0D seVideo:=FALSE;.
024320: 0A 09 09 42 6C 69 6E 6B 69 6E 67 3A 3D 46 41 4C ...Blinking:=FAL
024330: 53 45 3B 0D 0A 09 09 55 6E 64 65 72 4C 69 6E 65 SE;....UnderLine
024340: 3A 3D 46 41 4C 53 45 7C 0D 0A 09 49 6E 76 65 72 :=FALSE|...Inver
024350: 73 65 3A 49 6E 76 65 72 73 65 56 69 64 65 6F 3A se:InverseVideo:
024360: 3D 54 52 55 45 7C 0D 0A 09 42 6C 69 6E 6B 3A 42 =TRUE|...Blink:B
024370: 6C 69 6E 6B 69 6E 67 3A 3D 54 52 55 45 7C 0D 0A linking:=TRUE|..
024380: 09 53 74 61 72 74 47 72 61 70 68 2C 45 6E 64 47 .StartGraph,EndG
024390: 72 61 70 68 3A 28 2A 64 6F 20 6E 6F 74 68 69 6E raph:(*do nothin
0243A0: 67 2A 29 7C 0D 0A 09 44 65 6C 43 68 61 72 3A 28 g*)|...DelChar:(
0243B0: 2A 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 6C 69 *Move rest of li
0243C0: 6E 65 20 75 70 20 6F 6E 65 2C 20 61 64 64 20 62 ne up one, add b
0243D0: 6C 61 6E 6B 20 74 6F 20 65 6E 64 2A 29 0D 0A 09 lank to end*)...
0243E0: 09 4D 6F 76 65 64 6F 77 6E 28 41 44 52 28 53 63 .Movedown(ADR(Sc
0243F0: 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 2B 31 reen[ScreenPos+1
024400: 79 3A 43 41 52 44 49 4E 41 4C 29 3B 09 09 0D 0A y:CARDINAL);....
024410: 0D 0A 28 2A 09 09 50 6F 73 69 74 69 6F 6E 20 74 ..(*..Position t
024420: 6F 20 67 69 76 65 6E 20 63 6F 6F 72 64 69 6E 61 o given coordina
024430: 74 65 73 0D 0A 09 09 74 6F 70 20 6C 65 66 74 20 tes....top left
024440: 69 73 20 61 6C 77 61 79 73 20 30 2C 30 20 0D 0A is always 0,0 ..
024450: 0D 0A 09 09 78 20 69 73 20 63 6F 6C 75 6D 6E 2C ....x is column,
024460: 20 79 20 69 73 20 72 6F 77 0D 0A 0D 0A 09 09 41 y is row......A
024470: 20 27 53 74 61 6E 64 61 72 64 27 20 53 63 72 65 'Standard' Scre
024480: 65 6E 20 69 73 20 38 30 20 62 79 20 32 34 2E 20 en is 80 by 24.
024490: 54 68 65 20 6C 69 6D 69 74 20 69 73 20 73 65 74 The limit is set
0244A0: 20 62 79 0D 0A 09 09 74 68 65 20 74 65 72 6D 69 by....the termi
0244B0: 6E 61 6C 20 64 65 66 69 6E 69 74 69 6F 6E 20 66 nal definition f
0244C0: 69 6C 65 09 2A 29 0D 0A 42 45 47 49 4E 0D 0A 20 ile.*)..BEGIN..
0244D0: 20 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62 IF OutputEnab
0244E0: 6C 65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 led THEN...Clear
0244F0: 43 75 72 73 6F 72 3B 0D 0A 09 43 6F 6C 4E 6F 3A Cursor;...ColNo:
024500: 3D 78 3B 0D 0A 09 52 6F 77 4E 6F 3A 3D 79 3B 0D =x;...RowNo:=y;.
024510: 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C ..ScreenPos:=Col
024520: 4E 6F 2B 52 6F 77 4E 6F 2A 43 68 61 72 49 6E 63 No+RowNo*CharInc
024530: 72 65 6D 65 6E 74 2A 52 6F 77 57 69 64 74 68 3B rement*RowWidth;
024540: 0D 0A 09 49 46 20 53 63 72 65 65 6E 50 6F 73 3E ...IF ScreenPos>
024550: 3D 53 63 72 65 65 6E 53 69 7A 65 20 54 48 45 4E =ScreenSize THEN
024560: 0D 0A 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 ....ColNo:=0;...
024570: 09 52 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 09 53 63 .RowNo:=0;....Sc
024580: 72 65 65 6E 50 6F 73 3A 3D 30 3B 0D 0A 09 09 45 reenPos:=0;....E
024590: 4E 44 3B 0D 0A 09 53 65 74 43 75 72 73 6F 72 3B ND;...SetCursor;
0245A0: 0D 0A 20 20 20 20 09 45 4E 44 20 0D 0A 20 20 20 .. .END ..
0245B0: 20 45 4E 44 20 47 6F 74 6F 78 79 3B 0D 0A 0D 0A END Gotoxy;....
0245C0: 50 52 4F 43 45 44 55 52 45 20 50 75 74 61 6E 64 PROCEDURE Putand
0245D0: 49 6E 63 28 63 68 3A 43 48 41 52 29 3B 0D 0A 0D Inc(ch:CHAR);...
0245E0: 0A 28 2A 09 6F 75 74 70 75 74 20 61 20 63 68 61 .(*.output a cha
0245F0: 72 61 63 74 65 72 20 61 6E 64 20 69 6E 63 72 65 racter and incre
024600: 5D 29 2C 41 44 52 28 53 63 72 65 65 6E 5B 53 63 ]),ADR(Screen[Sc
024610: 72 65 65 6E 50 6F 73 5D 29 2C 52 6F 77 57 69 64 reenPos]),RowWid
024620: 74 68 2D 43 6F 6C 4E 6F 2D 31 29 3B 0D 0A 09 09 th-ColNo-1);....
024630: 53 63 72 65 65 6E 5B 53 63 72 65 65 6E 50 6F 73 Screen[ScreenPos
024640: 2D 43 6F 6C 4E 6F 2B 52 6F 77 57 69 64 74 68 2D -ColNo+RowWidth-
024650: 31 5D 3A 3D 27 20 27 7C 0D 0A 09 44 65 6C 4C 69 1]:=' '|...DelLi
024660: 6E 65 3A 28 2A 4D 6F 76 65 20 72 65 73 74 20 6F ne:(*Move rest o
024670: 66 20 73 63 72 65 65 6E 20 75 70 20 61 20 6C 69 f screen up a li
024680: 6E 65 2C 20 61 64 64 20 62 6C 61 6E 6B 20 6C 69 ne, add blank li
024690: 6E 65 20 61 74 20 65 6E 64 2A 29 0D 0A 09 09 4D ne at end*)....M
0246A0: 6F 76 65 64 6F 77 6E 28 41 44 52 28 53 63 72 65 ovedown(ADR(Scre
0246B0: 65 6E 5B 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C en[ScreenPos-Col
0246C0: 4E 6F 2B 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A No+RowWidth]),..
0246D0: 09 09 09 20 41 44 52 28 53 63 72 65 65 6E 5B 53 ... ADR(Screen[S
0246E0: 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 5D 29 creenPos-ColNo])
0246F0: 2C 0D 0A 09 09 09 53 63 72 65 65 6E 53 69 7A 65 ,.....ScreenSize
024700: 2D 53 63 72 65 65 6E 50 6F 73 2B 43 6F 6C 4E 6F -ScreenPos+ColNo
024710: 2D 52 6F 77 57 69 64 74 68 29 3B 0D 0A 09 09 46 -RowWidth);....F
024720: 4F 52 20 69 3A 3D 53 63 72 65 65 6E 53 69 7A 65 OR i:=ScreenSize
024730: 2D 52 6F 77 57 69 64 74 68 20 54 4F 20 53 63 72 -RowWidth TO Scr
024740: 65 65 6E 53 69 7A 65 2D 31 20 44 4F 20 53 63 72 eenSize-1 DO Scr
024750: 65 65 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 3B een[i]:=' ' END;
024760: 0D 0A 09 09 7C 0D 0A 09 49 6E 73 43 68 61 72 3A ....|...InsChar:
024770: 28 2A 4D 6F 76 65 20 72 65 73 74 20 6F 66 20 6C (*Move rest of l
024780: 69 6E 65 20 72 69 67 68 74 20 6F 6E 65 20 63 68 ine right one ch
024790: 61 72 61 63 74 65 72 2C 20 6C 61 73 74 20 63 68 aracter, last ch
0247A0: 61 72 61 63 74 65 72 20 6D 61 79 20 62 65 20 6C aracter may be l
0247B0: 6F 73 74 2A 29 0D 0A 09 09 4D 6F 76 65 75 70 28 ost*)....Moveup(
0247C0: 41 44 52 28 53 63 72 65 65 6E 5B 53 63 72 65 65 ADR(Screen[Scree
0247D0: 6E 50 6F 73 5D 29 2C 41 44 52 28 53 63 72 65 65 nPos]),ADR(Scree
0247E0: 6E 5B 53 63 72 65 65 6E 50 6F 73 2B 31 5D 29 2C n[ScreenPos+1]),
0247F0: 52 6F 77 57 69 64 74 68 2D 43 6F 6C 4E 6F 2D 31 RowWidth-ColNo-1
024800: 6D 65 6E 74 20 70 6F 69 6E 74 65 72 73 2A 29 0D ment pointers*).
024810: 0A 0D 0A 42 45 47 49 4E 0D 0A 09 53 63 72 65 65 ...BEGIN...Scree
024820: 6E 5B 53 63 72 65 65 6E 50 6F 73 5D 3A 3D 63 68 n[ScreenPos]:=ch
024830: 3B 0D 0A 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A ;.....ScreenPos:
024840: 3D 53 63 72 65 65 6E 50 6F 73 2B 43 68 61 72 49 =ScreenPos+CharI
024850: 6E 63 72 65 6D 65 6E 74 3B 0D 0A 09 49 4E 43 28 ncrement;...INC(
024860: 43 6F 6C 4E 6F 29 3B 0D 0A 09 49 46 20 43 6F 6C ColNo);...IF Col
024870: 4E 6F 3E 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 No>=LogScreenWid
024880: 74 68 20 54 48 45 4E 0D 0A 09 09 49 46 20 52 6F th THEN....IF Ro
024890: 77 4E 6F 3C 28 4C 6F 67 53 63 72 65 65 6E 44 65 wNo<(LogScreenDe
0248A0: 70 74 68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 pth-1) THEN.....
0248B0: 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 INC(RowNo);.....
0248C0: 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 09 45 4C 53 ColNo:=0;....ELS
0248D0: 45 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E 6F 29 E.....DEC(ColNo)
0248E0: 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 65 6E ;.....DEC(Screen
0248F0: 50 6F 73 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A Pos);.....END;..
024900: 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 50 75 74 ..END;...END Put
024910: 61 6E 64 49 6E 63 3B 0D 0A 0D 0A 50 52 4F 43 45 andInc;....PROCE
024920: 44 55 52 45 20 57 72 69 74 65 28 63 68 3A 43 48 DURE Write(ch:CH
024930: 41 52 29 3B 0D 0A 28 2A 09 57 72 69 74 65 20 61 AR);..(*.Write a
024940: 20 63 68 61 72 61 63 74 65 72 0D 0A 0D 0A 09 54 character.....T
024950: 68 69 73 20 72 6F 75 74 69 6E 65 20 69 73 20 75 his routine is u
024960: 73 65 64 20 62 79 20 74 65 72 6D 69 6E 61 6C 20 sed by terminal
024970: 77 68 65 6E 20 74 68 69 73 20 76 65 72 73 69 6F when this versio
024980: 6E 20 6F 66 20 53 63 72 65 65 6E 49 4F 20 0D 0A n of ScreenIO ..
024990: 09 69 73 20 69 6E 20 75 73 65 20 62 65 63 61 75 .is in use becau
0249A0: 73 65 20 61 20 66 6C 61 67 20 69 73 20 73 65 74 se a flag is set
0249B0: 20 62 79 20 74 68 65 20 69 6E 69 74 69 61 6C 69 by the initiali
0249C0: 73 61 74 69 6F 6E 20 6F 66 20 74 68 69 73 20 6D sation of this m
0249D0: 6F 64 75 6C 65 20 0D 0A 09 74 6F 67 65 74 68 65 odule ...togethe
0249E0: 72 20 77 69 74 68 20 74 68 65 20 61 64 64 72 65 r with the addre
0249F0: 73 73 20 6F 66 20 74 68 69 73 20 72 6F 75 74 69 ss of this routi
024A00: 29 3B 0D 0A 09 09 53 63 72 65 65 6E 5B 53 63 72 );....Screen[Scr
024A10: 65 65 6E 50 6F 73 5D 3A 3D 27 20 27 7C 0D 0A 09 eenPos]:=' '|...
024A20: 49 6E 73 4C 69 6E 65 3A 28 2A 4D 6F 76 65 20 72 InsLine:(*Move r
024A30: 65 73 74 20 6F 66 20 73 63 72 65 65 6E 20 64 6F est of screen do
024A40: 77 6E 20 6F 6E 65 20 6C 69 6E 65 2C 20 61 64 64 wn one line, add
024A50: 20 62 6C 61 6E 6B 20 6C 69 6E 65 2A 29 0D 0A 09 blank line*)...
024A60: 09 4D 6F 76 65 75 70 28 41 44 52 28 53 63 72 65 .Moveup(ADR(Scre
024A70: 65 6E 5B 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C en[ScreenPos-Col
024A80: 4E 6F 5D 29 2C 41 44 52 28 53 63 72 65 65 6E 5B No]),ADR(Screen[
024A90: 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B ScreenPos-ColNo+
024AA0: 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 53 RowWidth]),....S
024AB0: 63 72 65 65 6E 53 69 7A 65 2D 53 63 72 65 65 6E creenSize-Screen
024AC0: 50 6F 73 2B 43 6F 6C 4E 6F 2D 52 6F 77 57 69 64 Pos+ColNo-RowWid
024AD0: 74 68 29 3B 0D 0A 09 09 46 4F 52 20 69 3A 3D 53 th);....FOR i:=S
024AE0: 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 20 54 creenPos-ColNo T
024AF0: 4F 20 53 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E O ScreenPos-ColN
024B00: 6F 2B 52 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D o+RowWidth-1 DO.
024B10: 0A 09 09 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 ....Screen[i]:='
024B20: 20 27 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 ';.....END;....
024B30: 7C 0D 0A 09 44 65 6C 45 6F 6C 3A 46 4F 52 20 69 |...DelEol:FOR i
024B40: 3A 3D 53 63 72 65 65 6E 50 6F 73 20 54 4F 20 53 :=ScreenPos TO S
024B50: 63 72 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 2B 52 creenPos-ColNo+R
024B60: 6F 77 57 69 64 74 68 2D 31 20 44 4F 20 53 63 72 owWidth-1 DO Scr
024B70: 65 65 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 7C een[i]:=' ' END|
024B80: 0D 0A 09 44 65 6C 45 6F 73 3A 46 4F 52 20 69 3A ...DelEos:FOR i:
024B90: 3D 53 63 72 65 65 6E 50 6F 73 20 54 4F 20 53 63 =ScreenPos TO Sc
024BA0: 72 65 65 6E 53 69 7A 65 2D 31 20 44 4F 20 53 63 reenSize-1 DO Sc
024BB0: 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 20 45 4E 44 reen[i]:=' ' END
024BC0: 7C 0D 0A 09 43 6C 65 61 72 53 63 72 65 65 6E 3A |...ClearScreen:
024BD0: 0D 0A 09 09 09 28 2A 4F 73 62 6F 72 6E 65 20 73 .....(*Osborne s
024BE0: 70 65 63 69 66 69 63 20 2D 20 68 6F 6D 65 20 73 pecific - home s
024BF0: 63 72 65 65 6E 20 61 6E 64 20 63 75 72 73 6F 72 creen and cursor
024C00: 6E 65 0D 0A 0D 0A 09 54 68 69 73 20 72 6F 75 74 ne.....This rout
024C10: 69 6E 65 20 77 69 6C 6C 20 6E 65 65 64 20 63 68 ine will need ch
024C20: 61 6E 67 69 6E 67 20 66 6F 72 20 64 69 66 66 65 anging for diffe
024C30: 72 65 6E 74 20 76 69 64 65 6F 20 73 79 73 74 65 rent video syste
024C40: 6D 73 0D 0A 0D 0A 09 54 68 65 20 4F 73 62 6F 72 ms.....The Osbor
024C50: 6E 65 20 31 20 69 73 20 76 65 72 79 20 6C 69 6D ne 1 is very lim
024C60: 69 74 65 64 20 2D 20 61 6C 6C 20 79 6F 75 20 63 ited - all you c
024C70: 61 6E 20 64 6F 20 69 73 0D 0A 09 75 6E 64 65 72 an do is...under
024C80: 6C 69 6E 65 20 61 6E 64 20 68 61 6C 66 20 69 6E line and half in
024C90: 74 65 6E 73 69 74 79 2E 20 41 6C 6C 20 6F 74 68 tensity. All oth
024CA0: 65 72 73 20 61 72 65 20 6D 61 70 70 65 64 20 6F ers are mapped o
024CB0: 6E 74 6F 20 74 68 65 73 65 20 74 77 6F 0D 0A 2A nto these two..*
024CC0: 29 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 )..BEGIN.. IF
024CD0: 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 OutputEnabled T
024CE0: 48 45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F HEN...ClearCurso
024CF0: 72 3B 0D 0A 09 49 46 20 63 68 3E 30 37 66 78 20 r;...IF ch>07fx
024D00: 54 48 45 4E 20 63 68 3A 3D 43 48 52 28 4F 52 44 THEN ch:=CHR(ORD
024D10: 28 63 68 29 2D 31 32 38 29 20 45 4E 44 3B 0D 0A (ch)-128) END;..
024D20: 09 49 46 20 63 68 3D 43 52 20 54 48 45 4E 0D 0A .IF ch=CR THEN..
024D30: 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 53 63 72 ..ScreenPos:=Scr
024D40: 65 65 6E 50 6F 73 2D 43 6F 6C 4E 6F 3B 0D 0A 09 eenPos-ColNo;...
024D50: 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 45 4C 53 .ColNo:=0;...ELS
024D60: 49 46 20 63 68 3D 4C 46 20 54 48 45 4E 0D 0A 09 IF ch=LF THEN...
024D70: 09 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 .IF RowNo<(LogSc
024D80: 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 48 45 reenDepth-1) THE
024D90: 4E 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 N.....INC(RowNo)
024DA0: 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F 73 3A ;.....ScreenPos:
024DB0: 3D 53 63 72 65 65 6E 50 6F 73 2B 52 6F 77 57 69 =ScreenPos+RowWi
024DC0: 64 74 68 3B 0D 0A 09 09 09 45 4E 44 0D 0A 09 45 dth;.....END...E
024DD0: 4C 53 49 46 20 63 68 3D 42 53 20 54 48 45 4E 0D LSIF ch=BS THEN.
024DE0: 0A 09 09 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48 ...IF ColNo>0 TH
024DF0: 45 4E 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E 6F EN.....DEC(ColNo
024E00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
024E10: 1F 00 01 00 02 09 52 E5 1F 00 41 02 00 00 00 02 ......R...A.....
024E20: 1F 00 46 02 00 00 00 02 1F 00 42 02 00 00 00 02 ..F.......B.....
024E30: 1F 00 47 02 00 00 00 02 1F 00 43 02 00 00 00 02 ..G.......C.....
024E40: 1F 00 48 02 00 00 00 02 1F 00 44 02 00 00 00 02 ..H.......D.....
024E50: 1F 00 49 02 00 00 00 02 1F 00 45 02 00 00 00 02 ..I.......E.....
024E60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024E70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024E80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024E90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024EA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024EB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024EC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024ED0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024EE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024EF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
024F00: 20 0D 0A 09 09 09 20 70 6F 73 69 74 69 6F 6E 20 ..... position
024F10: 61 73 20 73 74 6F 72 65 64 20 69 6E 20 42 49 4F as stored in BIO
024F20: 53 20 74 61 62 6C 65 73 2A 29 0D 0A 09 09 20 20 S tables*)....
024F30: 20 20 69 3A 3D 42 44 4F 53 28 77 63 63 66 63 2C i:=BDOS(wccfc,
024F40: 31 62 68 29 3B 69 3A 3D 42 44 4F 53 28 77 63 63 1bh);i:=BDOS(wcc
024F50: 66 63 2C 4F 52 44 28 27 53 27 29 29 3B 0D 0A 09 fc,ORD('S'));...
024F60: 09 20 20 20 20 69 3A 3D 42 44 4F 53 28 77 63 63 . i:=BDOS(wcc
024F70: 66 63 2C 33 32 29 3B 69 3A 3D 42 44 4F 53 28 77 fc,32);i:=BDOS(w
024F80: 63 63 66 63 2C 33 32 29 3B 0D 0A 09 09 20 20 20 ccfc,32);....
024F90: 20 69 3A 3D 42 44 4F 53 28 77 63 63 66 63 2C 31 i:=BDOS(wccfc,1
024FA0: 62 68 29 3B 69 3A 3D 42 44 4F 53 28 77 63 63 66 bh);i:=BDOS(wccf
024FB0: 63 2C 4F 52 44 28 27 3D 27 29 29 3B 0D 0A 09 09 c,ORD('='));....
024FC0: 20 20 20 20 69 3A 3D 42 44 4F 53 28 77 63 63 66 i:=BDOS(wccf
024FD0: 63 2C 33 32 29 3B 69 3A 3D 42 44 4F 53 28 77 63 c,32);i:=BDOS(wc
024FE0: 63 66 63 2C 33 32 29 3B 0D 0A 09 09 20 20 20 20 cfc,32);....
024FF0: 28 2A 42 61 6E 6B 32 28 41 44 52 28 53 63 72 65 (*Bank2(ADR(Scre
025000: 65 6E 5B 30 5D 29 2C 41 44 52 28 53 63 72 65 65 en[0]),ADR(Scree
025010: 6E 5B 53 63 72 65 65 6E 53 69 7A 65 2D 31 5D 29 n[ScreenSize-1])
025020: 2C 38 30 68 29 2A 29 0D 0A 09 09 0D 0A 09 09 09 ,80h)*).........
025030: 28 2A 6E 6F 77 20 63 6C 65 61 72 20 64 69 73 70 (*now clear disp
025040: 6C 61 79 20 6D 65 6D 6F 72 79 2A 29 0D 0A 09 09 lay memory*)....
025050: 20 20 20 20 53 63 72 65 65 6E 5B 30 5D 3A 3D 27 Screen[0]:='
025060: 20 27 3B 0D 0A 09 09 20 20 20 20 4D 6F 76 65 75 ';.... Moveu
025070: 70 28 41 44 52 28 53 63 72 65 65 6E 5B 31 5D 29 p(ADR(Screen[1])
025080: 2C 41 44 52 28 53 63 72 65 65 6E 5B 30 5D 29 2C ,ADR(Screen[0]),
025090: 53 63 72 65 65 6E 53 69 7A 65 2D 31 29 3B 0D 0A ScreenSize-1);..
0250A0: 09 09 20 20 20 20 53 63 72 65 65 6E 50 6F 73 3A .. ScreenPos:
0250B0: 3D 30 3B 0D 0A 09 09 20 20 20 20 43 6F 6C 4E 6F =0;.... ColNo
0250C0: 3A 3D 30 3B 0D 0A 09 09 20 20 20 20 52 6F 77 4E :=0;.... RowN
0250D0: 6F 3A 3D 30 0D 0A 09 09 20 20 20 20 7C 0D 0A 0D o:=0.... |...
0250E0: 0A 09 28 2A 20 54 68 65 20 66 6F 6C 6C 6F 77 69 ..(* The followi
0250F0: 6E 67 20 67 72 61 70 68 69 63 73 20 63 68 61 72 ng graphics char
025100: 09 09 78 32 2C 79 32 20 20 69 73 20 75 70 70 65 ..x2,y2 is uppe
025110: 72 20 72 69 67 68 74 20 63 6F 72 6E 65 72 2A 29 r right corner*)
025120: 0D 0A 56 41 52 09 69 3A 43 41 52 44 49 4E 41 4C ..VAR.i:CARDINAL
025130: 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 ;..BEGIN.. IF
025140: 20 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 OutputEnabled T
025150: 48 45 4E 0D 0A 09 47 6F 74 6F 78 79 28 78 31 2C HEN...Gotoxy(x1,
025160: 79 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E y1);...ScreenCon
025170: 74 72 6F 6C 28 53 74 61 72 74 47 72 61 70 68 29 trol(StartGraph)
025180: 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F ;...ScreenContro
025190: 6C 28 43 6F 72 6E 65 72 4C 4C 29 3B 0D 0A 09 46 l(CornerLL);...F
0251A0: 4F 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 OR i:=x1+1 TO x2
0251B0: 2D 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 -1 DO ScreenCont
0251C0: 72 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 rol(Horizontal)
0251D0: 45 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E END;...ScreenCon
0251E0: 74 72 6F 6C 28 43 6F 72 6E 65 72 4C 52 29 3B 0D trol(CornerLR);.
0251F0: 0A 09 47 6F 74 6F 78 79 28 78 31 2C 79 32 29 3B ..Gotoxy(x1,y2);
025200: 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C ...ScreenControl
025210: 28 43 6F 72 6E 65 72 55 4C 29 3B 0D 0A 09 46 4F (CornerUL);...FO
025220: 52 20 69 3A 3D 78 31 2B 31 20 54 4F 20 78 32 2D R i:=x1+1 TO x2-
025230: 31 20 44 4F 20 53 63 72 65 65 6E 43 6F 6E 74 72 1 DO ScreenContr
025240: 6F 6C 28 48 6F 72 69 7A 6F 6E 74 61 6C 29 20 45 ol(Horizontal) E
025250: 4E 44 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 ND;...ScreenCont
025260: 72 6F 6C 28 43 6F 72 6E 65 72 55 52 29 3B 0D 0A rol(CornerUR);..
025270: 09 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 .FOR i:=y2+1 TO
025280: 79 31 2D 31 20 20 44 4F 0D 0A 09 09 47 6F 74 6F y1-1 DO....Goto
025290: 78 79 28 78 32 2C 69 29 3B 0D 0A 09 09 53 63 72 xy(x2,i);....Scr
0252A0: 65 65 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 eenControl(Verti
0252B0: 63 61 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 cal);....END;...
0252C0: 46 4F 52 20 69 3A 3D 79 32 2B 31 20 54 4F 20 79 FOR i:=y2+1 TO y
0252D0: 31 2D 31 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 79 1-1 DO....Gotoxy
0252E0: 28 78 31 2C 69 29 3B 0D 0A 09 09 53 63 72 65 65 (x1,i);....Scree
0252F0: 6E 43 6F 6E 74 72 6F 6C 28 56 65 72 74 69 63 61 nControl(Vertica
025300: 61 63 74 65 72 73 20 77 69 6C 6C 20 6E 65 65 64 acters will need
025310: 20 74 6F 20 62 65 20 6D 6F 64 69 66 69 65 64 20 to be modified
025320: 66 6F 72 20 0D 0A 09 20 20 20 64 69 66 66 65 72 for ... differ
025330: 65 6E 74 20 64 69 73 70 6C 61 79 20 73 79 73 74 ent display syst
025340: 65 6D 73 2A 29 0D 0A 0D 0A 09 48 6F 72 69 7A 6F ems*).....Horizo
025350: 6E 74 61 6C 3A 50 75 74 61 6E 64 49 6E 63 28 31 ntal:PutandInc(1
025360: 62 78 29 7C 0D 0A 09 56 65 72 74 69 63 61 6C 3A bx)|...Vertical:
025370: 50 75 74 61 6E 64 49 6E 63 28 30 62 78 29 7C 0D PutandInc(0bx)|.
025380: 0A 09 43 6F 72 6E 65 72 4C 4C 3A 50 75 74 61 6E ..CornerLL:Putan
025390: 64 49 6E 63 28 31 63 78 29 7C 0D 0A 09 43 6F 72 dInc(1cx)|...Cor
0253A0: 6E 65 72 55 4C 3A 50 75 74 61 6E 64 49 6E 63 28 nerUL:PutandInc(
0253B0: 30 66 78 29 7C 0D 0A 09 43 6F 72 6E 65 72 55 52 0fx)|...CornerUR
0253C0: 3A 50 75 74 61 6E 64 49 6E 63 28 31 30 78 29 7C :PutandInc(10x)|
0253D0: 0D 0A 09 43 6F 72 6E 65 72 4C 52 3A 50 75 74 61 ...CornerLR:Puta
0253E0: 6E 64 49 6E 63 28 31 66 78 29 7C 0D 0A 09 53 74 ndInc(1fx)|...St
0253F0: 61 72 74 78 79 2C 4D 69 64 64 6C 65 58 59 2C 45 artxy,MiddleXY,E
025400: 6E 64 58 59 3A 28 2A 63 75 72 73 6F 72 20 61 64 ndXY:(*cursor ad
025410: 64 72 65 73 73 69 6E 67 20 2D 20 6E 6F 74 20 72 dressing - not r
025420: 65 71 75 69 72 65 64 2A 29 7C 0D 0A 09 52 69 6E equired*)|...Rin
025430: 67 42 65 6C 6C 3A 69 3A 3D 42 44 4F 53 28 77 63 gBell:i:=BDOS(wc
025440: 63 66 63 2C 37 29 7C 0D 0A 09 4D 6F 76 65 4C 65 cfc,7)|...MoveLe
025450: 66 74 3A 49 46 20 43 6F 6C 4E 6F 3E 30 20 54 48 ft:IF ColNo>0 TH
025460: 45 4E 20 0D 0A 09 09 09 44 45 43 28 43 6F 6C 4E EN .....DEC(ColN
025470: 6F 29 3B 0D 0A 09 09 09 44 45 43 28 53 63 72 65 o);.....DEC(Scre
025480: 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C 53 49 46 enPos);....ELSIF
025490: 20 52 6F 77 4E 6F 3E 30 20 54 48 45 4E 0D 0A 09 RowNo>0 THEN...
0254A0: 09 09 44 45 43 28 52 6F 77 4E 6F 29 3B 0D 0A 09 ..DEC(RowNo);...
0254B0: 09 09 43 6F 6C 4E 6F 3A 3D 4C 6F 67 53 63 72 65 ..ColNo:=LogScre
0254C0: 65 6E 57 69 64 74 68 2D 31 3B 0D 0A 09 09 09 53 enWidth-1;.....S
0254D0: 63 72 65 65 6E 50 6F 73 3A 3D 43 6F 6C 4E 6F 2B creenPos:=ColNo+
0254E0: 52 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D RowNo*RowWidth;.
0254F0: 0A 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 52 ....END|...MoveR
025500: 6C 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 20 20 20 l);....END;..
025510: 20 20 09 45 4E 44 0D 0A 20 20 20 20 45 4E 44 20 .END.. END
025520: 44 72 61 77 42 6F 78 3B 0D 0A 50 52 4F 43 45 44 DrawBox;..PROCED
025530: 55 52 45 20 4F 75 74 70 75 74 54 6F 53 63 72 65 URE OutputToScre
025540: 65 6E 28 4F 6E 3A 42 4F 4F 4C 45 41 4E 29 3B 0D en(On:BOOLEAN);.
025550: 0A 42 45 47 49 4E 0D 0A 09 4F 75 74 70 75 74 45 .BEGIN...OutputE
025560: 6E 61 62 6C 65 64 3A 3D 4F 6E 0D 0A 09 45 4E 44 nabled:=On...END
025570: 20 4F 75 74 70 75 74 54 6F 53 63 72 65 65 6E 3B OutputToScreen;
025580: 09 0D 0A 42 45 47 49 4E 0D 0A 09 4F 75 74 70 75 ...BEGIN...Outpu
025590: 74 45 6E 61 62 6C 65 64 3A 3D 54 52 55 45 3B 0D tEnabled:=TRUE;.
0255A0: 0A 09 42 6C 69 6E 6B 52 6F 75 74 69 6E 65 3A 3D ..BlinkRoutine:=
0255B0: 42 6C 69 6E 6B 43 75 72 73 6F 72 3B 0D 0A 09 42 BlinkCursor;...B
0255C0: 6C 69 6E 6B 45 6E 61 62 6C 65 64 3A 3D 54 52 55 linkEnabled:=TRU
0255D0: 45 3B 0D 0A 09 53 63 72 65 65 6E 50 6F 73 3A 3D E;...ScreenPos:=
0255E0: 30 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 0;...ScreenContr
0255F0: 6F 6C 28 43 6C 65 61 72 53 63 72 65 65 6E 29 3B ol(ClearScreen);
025600: 0D 0A 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D 0A 09 52 ...ColNo:=0;...R
025610: 6F 77 4E 6F 3A 3D 30 3B 0D 0A 09 43 68 61 72 52 owNo:=0;...CharR
025620: 6F 75 74 69 6E 65 3A 3D 57 72 69 74 65 3B 0D 0A outine:=Write;..
025630: 09 43 68 61 72 45 6E 61 62 6C 65 64 3A 3D 54 52 .CharEnabled:=TR
025640: 55 45 3B 09 0D 0A 09 53 63 72 65 65 6E 57 69 64 UE;....ScreenWid
025650: 74 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 57 69 64 th:=LogScreenWid
025660: 74 68 3B 0D 0A 09 53 63 72 65 65 6E 44 65 70 74 th;...ScreenDept
025670: 68 3A 3D 4C 6F 67 53 63 72 65 65 6E 44 65 70 74 h:=LogScreenDept
025680: 68 3B 0D 0A 09 45 4E 44 20 53 63 72 65 65 6E 49 h;...END ScreenI
025690: 4F 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A O...............
0256A0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0256B0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0256C0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0256D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0256E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0256F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
025700: 69 67 68 74 3A 49 46 20 43 6F 6C 4E 6F 3C 28 4C ight:IF ColNo<(L
025710: 6F 67 53 63 72 65 65 6E 57 69 64 74 68 2D 31 29 ogScreenWidth-1)
025720: 20 54 48 45 4E 20 0D 0A 09 09 09 49 4E 43 28 43 THEN .....INC(C
025730: 6F 6C 4E 6F 29 3B 0D 0A 09 09 09 49 4E 43 28 53 olNo);.....INC(S
025740: 63 72 65 65 6E 50 6F 73 29 3B 0D 0A 09 09 45 4C creenPos);....EL
025750: 53 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 53 63 SIF RowNo<(LogSc
025760: 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 48 45 reenDepth-1) THE
025770: 4E 0D 0A 09 09 09 43 6F 6C 4E 6F 3A 3D 30 3B 0D N.....ColNo:=0;.
025780: 0A 09 09 09 49 4E 43 28 52 6F 77 4E 6F 29 3B 0D ....INC(RowNo);.
025790: 0A 09 09 09 53 63 72 65 65 6E 50 6F 73 3A 3D 52 ....ScreenPos:=R
0257A0: 6F 77 4E 6F 2A 52 6F 77 57 69 64 74 68 3B 0D 0A owNo*RowWidth;..
0257B0: 09 09 09 45 4E 44 7C 0D 0A 09 4D 6F 76 65 44 6F ...END|...MoveDo
0257C0: 77 6E 3A 49 46 20 52 6F 77 4E 6F 3C 28 4C 6F 67 wn:IF RowNo<(Log
0257D0: 53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 20 54 ScreenDepth-1) T
0257E0: 48 45 4E 0D 0A 09 09 09 49 4E 43 28 52 6F 77 4E HEN.....INC(RowN
0257F0: 6F 29 3B 0D 0A 09 09 09 53 63 72 65 65 6E 50 6F o);.....ScreenPo
025800: 73 3A 3D 53 63 72 65 65 6E 50 6F 73 2B 52 6F 77 s:=ScreenPos+Row
025810: 57 69 64 74 68 3B 0D 0A 09 09 09 45 4E 44 7C 0D Width;.....END|.
025820: 0A 09 4D 6F 76 65 55 70 3A 49 46 20 52 6F 77 4E ..MoveUp:IF RowN
025830: 6F 3E 30 20 54 48 45 4E 0D 0A 09 09 09 44 45 43 o>0 THEN.....DEC
025840: 28 52 6F 77 4E 6F 29 3B 0D 0A 09 09 09 53 63 72 (RowNo);.....Scr
025850: 65 65 6E 50 6F 73 3A 3D 53 63 72 65 65 6E 50 6F eenPos:=ScreenPo
025860: 73 2D 52 6F 77 57 69 64 74 68 3B 0D 0A 09 09 09 s-RowWidth;.....
025870: 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 28 2A 43 END;....END; (*C
025880: 41 53 45 2A 29 0D 0A 09 53 65 74 43 75 72 73 6F ASE*)...SetCurso
025890: 72 3B 0D 0A 09 45 4E 44 20 0D 0A 20 20 20 20 45 r;...END .. E
0258A0: 4E 44 20 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C ND ScreenControl
0258B0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 63 72 ;..PROCEDURE Scr
0258C0: 6F 6C 6C 57 69 6E 64 6F 77 55 70 28 53 74 61 72 ollWindowUp(Star
0258D0: 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 tofWindow,EndofW
0258E0: 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C 29 3B indow:CARDINAL);
0258F0: 0D 0A 42 45 47 49 4E 0D 0A 20 20 20 20 49 46 20 ..BEGIN.. IF
025900: 4D 4F 44 55 4C 45 20 54 65 73 74 3B 0D 0A 0D 0A MODULE Test;....
025910: 28 2A 09 54 65 73 74 20 6F 66 20 70 61 74 74 65 (*.Test of patte
025920: 72 6E 20 6D 61 74 63 68 20 6D 6F 64 75 6C 65 20 rn match module
025930: 2A 29 0D 0A 0D 0A 46 52 4F 4D 09 54 65 72 6D 69 *)....FROM.Termi
025940: 6E 61 6C 20 49 4D 50 4F 52 54 20 57 72 69 74 65 nal IMPORT Write
025950: 53 74 72 69 6E 67 2C 52 65 61 64 53 74 72 69 6E String,ReadStrin
025960: 67 2C 57 72 69 74 65 4C 6E 3B 0D 0A 46 52 4F 4D g,WriteLn;..FROM
025970: 09 50 61 74 74 65 72 6E 20 49 4D 50 4F 52 54 20 .Pattern IMPORT
025980: 4E 6F 64 65 54 79 70 65 2C 50 4E 6F 64 65 2C 43 NodeType,PNode,C
025990: 72 65 61 74 65 53 74 72 69 6E 67 4E 6F 64 65 2C reateStringNode,
0259A0: 4D 61 74 63 68 50 61 74 74 65 72 6E 2C 43 68 61 MatchPattern,Cha
0259B0: 72 53 65 74 2C 0D 0A 09 09 09 43 72 65 61 74 65 rSet,.....Create
0259C0: 41 6C 74 4E 6F 64 65 2C 43 72 65 61 74 65 53 74 AltNode,CreateSt
0259D0: 72 69 6E 67 4E 6F 64 65 2C 0D 0A 09 09 09 43 72 ringNode,.....Cr
0259E0: 65 61 74 65 41 6E 79 4F 66 4E 6F 64 65 2C 43 72 eateAnyOfNode,Cr
0259F0: 65 61 74 65 43 6F 6E 63 61 74 4E 6F 64 65 2C 43 eateConcatNode,C
025A00: 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 3B 0D reateLimitNode;.
025A10: 0A 46 52 4F 4D 09 53 74 6F 72 61 67 65 20 49 4D .FROM.Storage IM
025A20: 50 4F 52 54 20 41 4C 4C 4F 43 41 54 45 3B 0D 0A PORT ALLOCATE;..
025A30: 56 41 52 09 45 78 70 31 2C 45 78 70 2C 54 65 72 VAR.Exp1,Exp,Ter
025A40: 6D 2C 46 61 63 74 3A 50 4E 6F 64 65 3B 0D 0A 09 m,Fact:PNode;...
025A50: 74 65 6D 70 3A 50 4E 6F 64 65 3B 0D 0A 42 45 47 temp:PNode;..BEG
025A60: 49 4E 0D 0A 09 4E 45 57 28 45 78 70 29 3B 0D 0A IN...NEW(Exp);..
025A70: 09 4E 45 57 28 54 65 72 6D 29 3B 0D 0A 09 46 61 .NEW(Term);...Fa
025A80: 63 74 3A 3D 43 72 65 61 74 65 41 6C 74 4E 6F 64 ct:=CreateAltNod
025A90: 65 28 0D 0A 09 09 43 72 65 61 74 65 41 6E 79 4F e(....CreateAnyO
025AA0: 66 4E 6F 64 65 28 43 68 61 72 53 65 74 7B 27 41 fNode(CharSet{'A
025AB0: 27 2E 2E 27 5A 27 2C 27 30 27 2E 2E 27 39 27 2C '..'Z','0'..'9',
025AC0: 27 61 27 2E 2E 27 7A 27 7D 2C 31 2C 33 30 30 30 'a'..'z'},1,3000
025AD0: 30 2C 54 52 55 45 29 2C 0D 0A 09 09 43 72 65 61 0,TRUE),....Crea
025AE0: 74 65 43 6F 6E 63 61 74 4E 6F 64 65 28 0D 0A 09 teConcatNode(...
025AF0: 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74 4E 6F ..CreateConcatNo
025B00: 4F 75 74 70 75 74 45 6E 61 62 6C 65 64 20 54 48 OutputEnabled TH
025B10: 45 4E 0D 0A 09 43 6C 65 61 72 43 75 72 73 6F 72 EN...ClearCursor
025B20: 3B 0D 0A 09 4D 6F 76 65 75 70 28 41 44 52 28 53 ;...Moveup(ADR(S
025B30: 63 72 65 65 6E 5B 28 53 74 61 72 74 6F 66 57 69 creen[(StartofWi
025B40: 6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 5D 29 ndow)*RowWidth])
025B50: 2C 0D 0A 09 09 20 41 44 52 28 53 63 72 65 65 6E ,.... ADR(Screen
025B60: 5B 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2B [(StartofWindow+
025B70: 31 29 2A 52 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 1)*RowWidth]),..
025B80: 09 09 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2D .. (EndofWindow-
025B90: 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 29 2A 52 StartofWindow)*R
025BA0: 6F 77 57 69 64 74 68 29 3B 0D 0A 09 46 4F 52 20 owWidth);...FOR
025BB0: 69 3A 3D 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 i:=StartofWindow
025BC0: 2A 52 6F 77 57 69 64 74 68 20 54 4F 20 28 53 74 *RowWidth TO (St
025BD0: 61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52 artofWindow+1)*R
025BE0: 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D 0A 09 09 owWidth-1 DO....
025BF0: 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 27 3B 0D Screen[i]:=' ';.
025C00: 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 43 75 72 ...END;...SetCur
025C10: 73 6F 72 3B 0D 0A 09 45 4E 44 20 0D 0A 20 20 20 sor;...END ..
025C20: 20 45 4E 44 20 53 63 72 6F 6C 6C 57 69 6E 64 6F END ScrollWindo
025C30: 77 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 wUp;..PROCEDURE
025C40: 53 63 72 6F 6C 6C 57 69 6E 64 6F 77 44 6F 77 6E ScrollWindowDown
025C50: 28 53 74 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 (StartofWindow,E
025C60: 6E 64 6F 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 ndofWindow:CARDI
025C70: 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D 0A 20 20 NAL);..BEGIN..
025C80: 20 20 49 46 20 4F 75 74 70 75 74 45 6E 61 62 6C IF OutputEnabl
025C90: 65 64 20 54 48 45 4E 0D 0A 09 43 6C 65 61 72 43 ed THEN...ClearC
025CA0: 75 72 73 6F 72 3B 0D 0A 09 4D 6F 76 65 64 6F 77 ursor;...Movedow
025CB0: 6E 28 41 44 52 28 53 63 72 65 65 6E 5B 28 53 74 n(ADR(Screen[(St
025CC0: 61 72 74 6F 66 57 69 6E 64 6F 77 2B 31 29 2A 52 artofWindow+1)*R
025CD0: 6F 77 57 69 64 74 68 5D 29 2C 0D 0A 09 09 20 41 owWidth]),.... A
025CE0: 44 52 28 53 63 72 65 65 6E 5B 28 53 74 61 72 74 DR(Screen[(Start
025CF0: 6F 66 57 69 6E 64 6F 77 29 2A 52 6F 77 57 69 64 ofWindow)*RowWid
025D00: 64 65 28 0D 0A 09 09 09 09 43 72 65 61 74 65 53 de(......CreateS
025D10: 74 72 69 6E 67 4E 6F 64 65 28 27 28 27 29 2C 0D tringNode('('),.
025D20: 0A 09 09 09 09 45 78 70 29 2C 0D 0A 09 09 09 43 .....Exp),.....C
025D30: 72 65 61 74 65 53 74 72 69 6E 67 4E 6F 64 65 28 reateStringNode(
025D40: 27 29 27 29 0D 0A 09 09 09 29 0D 0A 09 09 29 3B ')').....)....);
025D50: 0D 0A 09 74 65 6D 70 3A 3D 43 72 65 61 74 65 41 ...temp:=CreateA
025D60: 6C 74 4E 6F 64 65 28 0D 0A 09 09 46 61 63 74 2C ltNode(....Fact,
025D70: 0D 0A 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74 ....CreateConcat
025D80: 4E 6F 64 65 28 0D 0A 09 09 09 46 61 63 74 2C 0D Node(.....Fact,.
025D90: 0A 09 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74 ....CreateConcat
025DA0: 4E 6F 64 65 28 0D 0A 09 09 09 09 43 72 65 61 74 Node(......Creat
025DB0: 65 53 74 72 69 6E 67 4E 6F 64 65 28 27 2A 27 29 eStringNode('*')
025DC0: 2C 0D 0A 09 09 09 09 54 65 72 6D 29 0D 0A 09 09 ,......Term)....
025DD0: 09 29 0D 0A 09 09 29 3B 0D 0A 09 54 65 72 6D 5E .)....);...Term^
025DE0: 3A 3D 74 65 6D 70 5E 3B 0D 0A 09 74 65 6D 70 3A :=temp^;...temp:
025DF0: 3D 43 72 65 61 74 65 41 6C 74 4E 6F 64 65 28 0D =CreateAltNode(.
025E00: 0A 09 09 20 20 20 20 54 65 72 6D 2C 0D 0A 09 09 ... Term,....
025E10: 20 20 20 20 43 72 65 61 74 65 43 6F 6E 63 61 74 CreateConcat
025E20: 4E 6F 64 65 28 0D 0A 09 09 09 54 65 72 6D 2C 0D Node(.....Term,.
025E30: 0A 09 09 09 43 72 65 61 74 65 43 6F 6E 63 61 74 ....CreateConcat
025E40: 4E 6F 64 65 28 0D 0A 09 09 09 09 43 72 65 61 74 Node(......Creat
025E50: 65 53 74 72 69 6E 67 4E 6F 64 65 28 27 2B 27 29 eStringNode('+')
025E60: 2C 0D 0A 09 09 09 09 45 78 70 29 0D 0A 09 09 09 ,......Exp).....
025E70: 29 0D 0A 09 09 20 20 20 20 29 3B 0D 0A 09 45 78 ).... );...Ex
025E80: 70 5E 3A 3D 74 65 6D 70 5E 3B 0D 0A 09 45 78 70 p^:=temp^;...Exp
025E90: 31 3A 3D 43 72 65 61 74 65 43 6F 6E 63 61 74 4E 1:=CreateConcatN
025EA0: 6F 64 65 28 0D 0A 09 09 45 78 70 2C 0D 0A 09 09 ode(....Exp,....
025EB0: 43 72 65 61 74 65 4C 69 6D 69 74 4E 6F 64 65 28 CreateLimitNode(
025EC0: 29 29 3B 0D 0A 09 49 46 20 4D 61 74 63 68 50 61 ));...IF MatchPa
025ED0: 74 74 65 72 6E 28 45 78 70 31 2C 27 32 2A 32 27 ttern(Exp1,'2*2'
025EE0: 29 3C 3E 4E 49 4C 20 54 48 45 4E 20 57 72 69 74 )<>NIL THEN Writ
025EF0: 65 53 74 72 69 6E 67 28 27 31 3A 20 20 4F 4B 27 eString('1: OK'
025F00: 74 68 5D 29 2C 0D 0A 09 09 20 28 45 6E 64 6F 66 th]),.... (Endof
025F10: 57 69 6E 64 6F 77 2D 53 74 61 72 74 6F 66 57 69 Window-StartofWi
025F20: 6E 64 6F 77 29 2A 52 6F 77 57 69 64 74 68 29 3B ndow)*RowWidth);
025F30: 0D 0A 09 46 4F 52 20 69 3A 3D 45 6E 64 6F 66 57 ...FOR i:=EndofW
025F40: 69 6E 64 6F 77 2A 52 6F 77 57 69 64 74 68 20 54 indow*RowWidth T
025F50: 4F 20 28 45 6E 64 6F 66 57 69 6E 64 6F 77 2B 31 O (EndofWindow+1
025F60: 29 2A 52 6F 77 57 69 64 74 68 2D 31 20 44 4F 0D )*RowWidth-1 DO.
025F70: 0A 09 09 53 63 72 65 65 6E 5B 69 5D 3A 3D 27 20 ...Screen[i]:='
025F80: 27 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53 65 74 ';....END;...Set
025F90: 43 75 72 73 6F 72 3B 0D 0A 09 45 4E 44 20 0D 0A Cursor;...END ..
025FA0: 20 20 20 20 45 4E 44 20 53 63 72 6F 6C 6C 57 69 END ScrollWi
025FB0: 6E 64 6F 77 44 6F 77 6E 3B 0D 0A 0D 0A 50 52 4F ndowDown;....PRO
025FC0: 43 45 44 55 52 45 20 4C 6F 61 64 54 65 72 6D 43 CEDURE LoadTermC
025FD0: 6F 64 65 28 46 3A 46 69 6C 65 4E 61 6D 65 29 3B ode(F:FileName);
025FE0: 0D 0A 42 45 47 49 4E 0D 0A 09 28 2A 6E 6F 74 20 ..BEGIN...(*not
025FF0: 69 6D 70 6C 65 6D 65 6E 74 65 64 20 69 6E 20 74 implemented in t
026000: 68 69 73 20 76 65 72 73 69 6F 6E 2A 29 0D 0A 09 his version*)...
026010: 45 4E 44 20 4C 6F 61 64 54 65 72 6D 43 6F 64 65 END LoadTermCode
026020: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 69 ;..PROCEDURE Cli
026030: 70 28 78 31 2C 79 31 2C 78 32 2C 79 32 3A 43 41 p(x1,y1,x2,y2:CA
026040: 52 44 49 4E 41 4C 29 3B 0D 0A 42 45 47 49 4E 0D RDINAL);..BEGIN.
026050: 0A 09 28 2A 6E 6F 74 20 69 6D 70 6C 65 6D 65 6E ..(*not implemen
026060: 74 65 64 20 69 6E 20 74 68 69 73 20 76 65 72 73 ted in this vers
026070: 69 6F 6E 2A 29 0D 0A 09 45 4E 44 20 43 6C 69 70 ion*)...END Clip
026080: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 20 44 72 ;..PROCEDURE Dr
026090: 61 77 42 6F 78 28 78 31 2C 79 31 2C 78 32 2C 79 awBox(x1,y1,x2,y
0260A0: 32 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A 2:CARDINAL);....
0260B0: 28 2A 09 09 64 72 61 77 20 61 20 62 6F 78 20 66 (*..draw a box f
0260C0: 6F 72 20 61 20 77 69 6E 64 6F 77 20 6F 6E 20 74 or a window on t
0260D0: 68 65 20 73 63 72 65 65 6E 0D 0A 0D 0A 09 09 78 he screen......x
0260E0: 31 2C 79 31 20 20 69 73 20 74 68 65 20 6C 6F 77 1,y1 is the low
0260F0: 65 72 20 6C 65 66 74 20 63 6F 72 6E 65 72 0D 0A er left corner..
026100: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
026110: 20 00 01 00 02 09 52 E5 20 00 41 02 00 00 00 02 .....R. .A.....
026120: 20 00 46 02 00 00 00 02 20 00 42 02 00 00 00 02 .F..... .B.....
026130: 20 00 47 02 00 00 00 02 20 00 43 02 00 00 00 02 .G..... .C.....
026140: 20 00 48 02 00 00 00 02 20 00 44 02 00 00 00 02 .H..... .D.....
026150: 20 00 49 02 00 00 00 02 20 00 45 02 00 00 00 02 .I..... .E.....
026160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
026170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
026180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
026190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0261F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
026200: 29 20 45 4E 44 3B 0D 0A 09 49 46 20 4D 61 74 63 ) END;...IF Matc
026210: 68 50 61 74 74 65 72 6E 28 45 78 70 31 2C 27 32 hPattern(Exp1,'2
026220: 2B 33 2A 32 27 29 3C 3E 4E 49 4C 20 54 48 45 4E +3*2')<>NIL THEN
026230: 20 57 72 69 74 65 53 74 72 69 6E 67 28 27 32 3A WriteString('2:
026240: 20 20 4F 4B 27 29 20 45 4E 44 3B 0D 0A 09 49 46 OK') END;...IF
026250: 20 4D 61 74 63 68 50 61 74 74 65 72 6E 28 45 78 MatchPattern(Ex
026260: 70 31 2C 27 32 2A 28 32 2B 33 29 27 29 3C 3E 4E p1,'2*(2+3)')<>N
026270: 49 4C 20 54 48 45 4E 20 57 72 69 74 65 53 74 72 IL THEN WriteStr
026280: 69 6E 67 28 27 33 3A 20 20 4F 4B 27 29 20 45 4E ing('3: OK') EN
026290: 44 3B 0D 0A 09 49 46 20 4D 61 74 63 68 50 61 74 D;...IF MatchPat
0262A0: 74 65 72 6E 28 45 78 70 31 2C 27 32 2A 32 2A 33 tern(Exp1,'2*2*3
0262B0: 2A 34 27 29 3C 3E 4E 49 4C 20 54 48 45 4E 20 57 *4')<>NIL THEN W
0262C0: 72 69 74 65 53 74 72 69 6E 67 28 27 34 3A 20 20 riteString('4:
0262D0: 4F 4B 27 29 20 45 4E 44 3B 0D 0A 09 49 46 20 4D OK') END;...IF M
0262E0: 61 74 63 68 50 61 74 74 65 72 6E 28 45 78 70 31 atchPattern(Exp1
0262F0: 2C 27 32 2A 32 2B 33 2A 37 27 29 3C 3E 4E 49 4C ,'2*2+3*7')<>NIL
026300: 20 54 48 45 4E 20 57 72 69 74 65 53 74 72 69 6E THEN WriteStrin
026310: 67 28 27 35 3A 20 20 4F 4B 27 29 20 45 4E 44 3B g('5: OK') END;
026320: 0D 0A 09 49 46 20 4D 61 74 63 68 50 61 74 74 65 ...IF MatchPatte
026330: 72 6E 28 45 78 70 31 2C 27 32 2A 32 2B 33 2A 34 rn(Exp1,'2*2+3*4
026340: 2B 28 39 2B 38 29 27 29 3C 3E 4E 49 4C 20 54 48 +(9+8)')<>NIL TH
026350: 45 4E 20 57 72 69 74 65 53 74 72 69 6E 67 28 27 EN WriteString('
026360: 36 3A 20 20 4F 4B 27 29 20 45 4E 44 3B 0D 0A 09 6: OK') END;...
026370: 49 46 20 4D 61 74 63 68 50 61 74 74 65 72 6E 28 IF MatchPattern(
026380: 45 78 70 31 2C 27 32 2B 2B 32 27 29 3C 3E 4E 49 Exp1,'2++2')<>NI
026390: 4C 20 54 48 45 4E 20 57 72 69 74 65 53 74 72 69 L THEN WriteStri
0263A0: 6E 67 28 27 37 3A 20 6E 6F 74 20 6F 6B 20 27 29 ng('7: not ok ')
0263B0: 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 54 65 73 74 END;...END Test
0263C0: 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0263D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0263E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
0263F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
026400: 69 6E 65 50 6F 73 28 6D 6F 76 65 3A 49 4E 54 45 inePos(move:INTE
026410: 47 45 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 52 GER);..BEGIN...R
026420: 65 74 72 6C 69 6E 65 28 43 75 72 46 69 6C 65 50 etrline(CurFileP
026430: 74 72 5E 2C 4C 69 6E 65 4C 65 6E 2C 4C 69 6E 65 tr^,LineLen,Line
026440: 50 6F 73 2C 70 2C 6C 69 6E 65 73 6D 6F 76 65 64 Pos,p,linesmoved
026450: 2C 6D 6F 76 65 29 3B 0D 0A 09 45 4E 44 20 53 65 ,move);...END Se
026460: 74 4C 69 6E 65 50 6F 73 3B 0D 0A 50 52 4F 43 45 tLinePos;..PROCE
026470: 44 55 52 45 20 4D 61 72 6B 41 73 55 70 64 61 74 DURE MarkAsUpdat
026480: 65 64 3B 0D 0A 42 45 47 49 4E 0D 0A 09 55 70 64 ed;..BEGIN...Upd
026490: 61 74 65 64 5B 43 75 72 72 65 6E 74 46 69 6C 65 ated[CurrentFile
0264A0: 5D 3A 3D 54 52 55 45 0D 0A 09 45 4E 44 20 4D 61 ]:=TRUE...END Ma
0264B0: 72 6B 41 73 55 70 64 61 74 65 64 3B 0D 0A 50 52 rkAsUpdated;..PR
0264C0: 4F 43 45 44 55 52 45 20 52 65 73 65 74 50 6F 73 OCEDURE ResetPos
0264D0: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 6F 78 ;..BEGIN...Gotox
0264E0: 79 28 54 68 69 73 78 2C 54 68 69 73 79 29 3B 0D y(Thisx,Thisy);.
0264F0: 0A 09 45 4E 44 20 52 65 73 65 74 50 6F 73 3B 0D ..END ResetPos;.
026500: 0A 50 52 4F 43 45 44 55 52 45 20 43 6C 65 61 72 .PROCEDURE Clear
026510: 52 65 73 74 4F 66 4C 69 6E 65 3B 0D 0A 42 45 47 RestOfLine;..BEG
026520: 49 4E 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 IN...ScreenContr
026530: 6F 6C 28 44 65 6C 45 6F 6C 29 3B 0D 0A 09 49 46 ol(DelEol);...IF
026540: 20 4E 4F 54 20 4D 61 64 65 43 68 61 6E 67 65 20 NOT MadeChange
026550: 54 48 45 4E 0D 0A 09 09 46 4F 52 20 63 3A 3D 54 THEN....FOR c:=T
026560: 68 69 73 78 2B 31 20 54 4F 20 53 63 72 65 65 6E hisx+1 TO Screen
026570: 57 69 64 74 68 20 44 4F 20 57 72 69 74 65 28 27 Width DO Write('
026580: 20 27 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B ') END;....END;
026590: 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 45 ...ResetPos;...E
0265A0: 4E 44 20 43 6C 65 61 72 52 65 73 74 4F 66 4C 69 ND ClearRestOfLi
0265B0: 6E 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 ne;..PROCEDURE D
0265C0: 65 6C 54 6F 45 4F 4C 3B 0D 0A 56 41 52 09 69 3A elToEOL;..VAR.i:
0265D0: 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 4E CARDINAL;..BEGIN
0265E0: 0D 0A 09 4D 61 72 6B 41 73 55 70 64 61 74 65 64 ...MarkAsUpdated
0265F0: 3B 0D 0A 09 49 46 20 4C 69 6E 65 50 6F 73 3C 3D ;...IF LinePos<=
026600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0266A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0266B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0266C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0266D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0266E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0266F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0267A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0267B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0267C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0267D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0267E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
0267F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
026800: 4C 69 6E 65 4C 65 6E 20 54 48 45 4E 20 0D 0A 09 LineLen THEN ...
026810: 09 44 65 6C 43 68 61 72 73 28 43 75 72 46 69 6C .DelChars(CurFil
026820: 65 50 74 72 5E 2C 4C 69 6E 65 4C 65 6E 2D 4C 69 ePtr^,LineLen-Li
026830: 6E 65 50 6F 73 29 20 0D 0A 09 09 45 4E 44 3B 0D nePos) ....END;.
026840: 0A 09 4C 69 6E 65 4C 65 6E 3A 3D 4C 69 6E 65 50 ..LineLen:=LineP
026850: 6F 73 3B 0D 0A 09 43 6C 65 61 72 52 65 73 74 4F os;...ClearRestO
026860: 66 4C 69 6E 65 3B 0D 0A 09 45 4E 44 20 44 65 6C fLine;...END Del
026870: 54 6F 45 4F 4C 3B 0D 0A 56 41 52 09 0D 0A 09 62 ToEOL;..VAR....b
026880: 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 50 52 4F 43 45 :BOOLEAN;..PROCE
026890: 44 55 52 45 20 52 65 44 69 73 70 6C 61 79 57 69 DURE ReDisplayWi
0268A0: 6E 64 6F 77 3B 0D 0A 42 45 47 49 4E 0D 0A 09 44 ndow;..BEGIN...D
0268B0: 69 73 70 6C 61 79 46 69 6C 65 28 43 75 72 46 69 isplayFile(CurFi
0268C0: 6C 65 50 74 72 5E 2C 43 75 72 72 65 6E 74 57 69 lePtr^,CurrentWi
0268D0: 6E 64 6F 77 2C 54 68 69 73 78 2C 54 68 69 73 79 ndow,Thisx,Thisy
0268E0: 29 3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A );...ResetPos;..
0268F0: 09 63 75 72 78 5B 43 75 72 72 65 6E 74 57 69 6E .curx[CurrentWin
026900: 64 6F 77 5D 3A 3D 54 68 69 73 78 3B 0D 0A 09 63 dow]:=Thisx;...c
026910: 75 72 79 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F ury[CurrentWindo
026920: 77 5D 3A 3D 54 68 69 73 79 3B 0D 0A 09 52 65 44 w]:=Thisy;...ReD
026930: 72 61 77 6E 3A 3D 54 52 55 45 3B 0D 0A 09 45 4E rawn:=TRUE;...EN
026940: 44 20 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F D ReDisplayWindo
026950: 77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 w;..PROCEDURE Re
026960: 44 69 73 70 6C 61 79 3B 0D 0A 42 45 47 49 4E 0D Display;..BEGIN.
026970: 0A 09 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F ..ReDisplayWindo
026980: 77 3B 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 w;...SetLinePos(
026990: 30 29 3B 0D 0A 09 43 68 61 6E 67 65 50 6F 73 3B 0);...ChangePos;
0269A0: 0D 0A 09 45 4E 44 20 52 65 44 69 73 70 6C 61 79 ...END ReDisplay
0269B0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68 61 ;..PROCEDURE Cha
0269C0: 6E 67 65 4D 61 72 67 69 6E 28 49 6E 63 3A 49 4E ngeMargin(Inc:IN
0269D0: 54 45 47 45 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A TEGER);..BEGIN..
0269E0: 09 49 46 20 28 49 6E 63 3C 30 29 20 41 4E 44 20 .IF (Inc<0) AND
0269F0: 20 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 (CurrentLeftMar
026A00: 0D 0A 28 2A 09 54 68 69 73 20 69 73 20 61 20 76 ..(*.This is a v
026A10: 65 72 73 69 6F 6E 20 6F 66 20 65 64 69 74 63 6F ersion of editco
026A20: 6E 74 20 66 6F 72 20 70 65 6F 70 6C 65 20 77 69 nt for people wi
026A30: 74 68 0D 0A 09 64 75 6D 62 20 74 65 72 6D 69 6E th...dumb termin
026A40: 61 6C 73 2E 20 20 54 68 65 20 6F 6E 6C 79 20 66 als. The only f
026A50: 61 63 69 6C 69 74 69 65 73 20 77 68 69 63 68 20 acilities which
026A60: 74 68 69 73 20 76 65 72 73 69 6F 6E 0D 0A 09 6F this version...o
026A70: 66 20 45 44 49 54 43 4F 4E 54 20 61 73 73 75 6D f EDITCONT assum
026A80: 65 73 20 69 73 20 47 6F 74 6F 78 79 20 61 6E 64 es is Gotoxy and
026A90: 20 74 68 65 20 61 62 69 6C 69 74 79 20 74 6F 20 the ability to
026AA0: 68 69 67 68 6C 69 67 68 74 0D 0A 09 69 6E 20 73 highlight...in s
026AB0: 6F 6D 65 20 77 61 79 20 2A 29 0D 0A 0D 0A 28 2A ome way *)....(*
026AC0: 24 6C 2D 2A 29 0D 0A 49 4D 50 4C 45 4D 45 4E 54 $l-*)..IMPLEMENT
026AD0: 41 54 49 4F 4E 20 4D 4F 44 55 4C 45 20 45 64 69 ATION MODULE Edi
026AE0: 74 43 6F 6E 74 72 6F 6C 3B 0D 0A 0D 0A 28 2A 09 tControl;....(*.
026AF0: 45 64 69 74 6F 72 20 63 6F 6E 74 72 6F 6C 20 2D Editor control -
026B00: 20 64 61 74 61 20 61 72 65 61 73 20 66 6F 72 20 data areas for
026B10: 66 69 6C 65 20 61 6E 64 20 72 6F 75 74 69 6E 65 file and routine
026B20: 73 20 77 68 69 63 68 20 61 63 74 75 61 6C 6C 79 s which actually
026B30: 0D 0A 09 70 65 72 66 6F 72 6D 20 65 64 69 74 20 ...perform edit
026B40: 66 75 6E 63 74 69 6F 6E 73 20 62 79 20 63 61 6C functions by cal
026B50: 6C 69 6E 67 20 6D 61 6B 65 65 64 69 74 20 74 6F ling makeedit to
026B60: 20 65 64 69 74 20 74 68 65 20 66 69 6C 65 20 61 edit the file a
026B70: 6E 64 0D 0A 09 65 64 69 74 64 69 73 70 20 74 6F nd...editdisp to
026B80: 20 63 68 61 6E 67 65 20 74 68 65 20 73 63 72 65 change the scre
026B90: 65 6E 2A 29 0D 0A 0D 0A 46 52 4F 4D 20 4D 61 6B en*)....FROM Mak
026BA0: 65 45 64 69 74 73 20 49 4D 50 4F 52 54 20 49 6E eEdits IMPORT In
026BB0: 73 43 68 61 72 73 2C 44 65 6C 43 68 61 72 73 2C sChars,DelChars,
026BC0: 52 65 74 72 6C 69 6E 65 2C 42 61 63 6B 4F 6E 65 Retrline,BackOne
026BD0: 43 68 61 72 2C 46 6F 72 77 61 72 64 4F 6E 65 43 Char,ForwardOneC
026BE0: 68 61 72 2C 0D 0A 09 09 47 65 74 43 75 72 72 65 har,....GetCurre
026BF0: 6E 74 43 68 61 72 2C 47 65 74 50 6F 73 69 74 69 ntChar,GetPositi
026C00: 67 69 6E 3C 43 41 52 44 49 4E 41 4C 28 2D 49 6E gin<CARDINAL(-In
026C10: 63 29 29 20 54 48 45 4E 20 0D 0A 09 09 49 6E 63 c)) THEN ....Inc
026C20: 3A 3D 2D 49 4E 54 45 47 45 52 28 43 75 72 72 65 :=-INTEGER(Curre
026C30: 6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 20 0D 0A ntLeftMargin) ..
026C40: 09 09 45 4E 44 3B 0D 0A 09 49 46 20 28 49 6E 63 ..END;...IF (Inc
026C50: 3E 30 29 20 41 4E 44 20 28 54 68 69 73 78 3C 43 >0) AND (Thisx<C
026C60: 41 52 44 49 4E 41 4C 28 49 6E 63 29 29 20 54 48 ARDINAL(Inc)) TH
026C70: 45 4E 20 49 6E 63 3A 3D 54 68 69 73 78 20 45 4E EN Inc:=Thisx EN
026C80: 44 3B 0D 0A 09 43 75 72 72 65 6E 74 4C 65 66 74 D;...CurrentLeft
026C90: 4D 61 72 67 69 6E 3A 3D 49 4E 54 45 47 45 52 28 Margin:=INTEGER(
026CA0: 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 CurrentLeftMargi
026CB0: 6E 29 2B 49 6E 63 3B 0D 0A 09 54 68 69 73 78 3A n)+Inc;...Thisx:
026CC0: 3D 49 4E 54 45 47 45 52 28 54 68 69 73 78 29 2D =INTEGER(Thisx)-
026CD0: 49 6E 63 3B 0D 0A 09 63 75 72 78 5B 43 75 72 72 Inc;...curx[Curr
026CE0: 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D 54 68 69 73 entWindow]:=This
026CF0: 78 3B 0D 0A 09 4C 65 66 74 4D 61 72 67 69 6E 5B x;...LeftMargin[
026D00: 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D CurrentWindow]:=
026D10: 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 CurrentLeftMargi
026D20: 6E 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 57 69 n;...ReDisplayWi
026D30: 6E 64 6F 77 3B 0D 0A 09 52 65 73 65 74 50 6F 73 ndow;...ResetPos
026D40: 3B 0D 0A 09 45 4E 44 20 43 68 61 6E 67 65 4D 61 ;...END ChangeMa
026D50: 72 67 69 6E 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 rgin;....PROCEDU
026D60: 52 45 20 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 56 RE ChangePos;..V
026D70: 41 52 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A AR.i:CARDINAL;..
026D80: 42 45 47 49 4E 0D 0A 09 49 46 20 4C 69 6E 65 4C BEGIN...IF LineL
026D90: 65 6E 3C 4C 69 6E 65 50 6F 73 20 54 48 45 4E 20 en<LinePos THEN
026DA0: 0D 0A 09 09 4C 69 6E 65 50 6F 73 3A 3D 4C 69 6E ....LinePos:=Lin
026DB0: 65 4C 65 6E 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 eLen;....END;...
026DC0: 54 68 69 73 78 3A 3D 30 3B 0D 0A 09 69 3A 3D 30 Thisx:=0;...i:=0
026DD0: 3B 09 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 49 4E 43 ;....LOOP....INC
026DE0: 28 69 29 3B 0D 0A 09 09 63 68 3A 3D 47 65 74 43 (i);....ch:=GetC
026DF0: 75 72 72 65 6E 74 43 68 61 72 28 43 75 72 46 69 urrentChar(CurFi
026E00: 6F 6E 2C 53 65 74 50 6F 73 69 74 69 6F 6E 2C 52 on,SetPosition,R
026E10: 65 61 64 4E 65 78 74 43 68 61 72 2C 46 69 6E 64 eadNextChar,Find
026E20: 53 74 72 69 6E 67 2C 0D 0A 09 09 4C 61 62 65 6C String,....Label
026E30: 4F 70 3B 0D 0A 46 52 4F 4D 20 45 64 69 74 44 69 Op;..FROM EditDi
026E40: 73 70 6C 61 79 20 49 4D 50 4F 52 54 20 44 69 73 splay IMPORT Dis
026E50: 70 6C 61 79 46 69 6C 65 2C 45 72 72 6F 72 4D 65 playFile,ErrorMe
026E60: 73 73 61 67 65 2C 57 69 6E 64 6F 77 73 2C 4C 69 ssage,Windows,Li
026E70: 6E 65 73 50 65 72 57 69 6E 64 6F 77 3B 0D 0A 46 nesPerWindow;..F
026E80: 52 4F 4D 20 53 63 72 65 65 6E 49 4F 20 49 4D 50 ROM ScreenIO IMP
026E90: 4F 52 54 20 45 64 69 74 73 2C 44 65 6C 43 68 61 ORT Edits,DelCha
026EA0: 72 2C 44 65 6C 4C 69 6E 65 2C 49 6E 73 43 68 61 r,DelLine,InsCha
026EB0: 72 2C 49 6E 73 4C 69 6E 65 2C 44 65 6C 45 6F 6C r,InsLine,DelEol
026EC0: 2C 4D 6F 76 65 55 70 2C 0D 0A 09 09 09 4D 6F 76 ,MoveUp,.....Mov
026ED0: 65 44 6F 77 6E 2C 4D 6F 76 65 4C 65 66 74 2C 4D eDown,MoveLeft,M
026EE0: 6F 76 65 52 69 67 68 74 2C 47 6F 74 6F 78 79 2C oveRight,Gotoxy,
026EF0: 43 6C 65 61 72 53 63 72 65 65 6E 2C 0D 0A 09 09 ClearScreen,....
026F00: 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 2C 0D .ScreenControl,.
026F10: 0A 09 09 09 53 63 72 65 65 6E 57 69 64 74 68 2C ....ScreenWidth,
026F20: 53 63 72 65 65 6E 44 65 70 74 68 2C 4D 61 64 65 ScreenDepth,Made
026F30: 43 68 61 6E 67 65 3B 0D 0A 46 52 4F 4D 20 49 6E Change;..FROM In
026F40: 74 4C 6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41 tLogic IMPORT IA
026F50: 4E 44 3B 09 0D 0A 46 52 4F 4D 09 53 59 53 54 45 ND;...FROM.SYSTE
026F60: 4D 20 49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 43 M IMPORT ADR;..C
026F70: 4F 4E 53 54 09 43 52 3D 30 64 78 3B 0D 0A 09 54 ONST.CR=0dx;...T
026F80: 41 42 3D 30 39 78 3B 0D 0A 09 4C 46 3D 30 61 78 AB=09x;...LF=0ax
026F90: 3B 0D 0A 09 45 4F 46 3D 31 61 78 3B 0D 0A 28 2A ;...EOF=1ax;..(*
026FA0: 09 41 20 72 65 6D 61 72 6B 20 6F 6E 20 74 68 65 .A remark on the
026FB0: 20 75 73 65 20 6F 66 20 4C 69 6E 65 50 6F 73 20 use of LinePos
026FC0: 61 6E 64 20 63 75 72 78 0D 0A 0D 0A 09 4C 69 6E and curx.....Lin
026FD0: 65 50 6F 73 20 61 6C 77 61 79 73 20 70 6F 69 6E ePos always poin
026FE0: 74 73 20 74 6F 20 74 68 65 20 6E 75 6D 62 65 72 ts to the number
026FF0: 20 6F 66 20 74 68 65 20 63 68 61 72 61 63 74 65 of the characte
027000: 6C 65 50 74 72 5E 29 3B 0D 0A 09 09 49 46 20 28 lePtr^);....IF (
027010: 69 3E 43 41 52 44 49 4E 41 4C 28 4C 69 6E 65 50 i>CARDINAL(LineP
027020: 6F 73 29 29 20 4F 52 20 28 63 68 3D 45 4F 46 29 os)) OR (ch=EOF)
027030: 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B 0D THEN EXIT END;.
027040: 0A 09 09 49 46 20 63 68 3D 54 41 42 20 54 48 45 ...IF ch=TAB THE
027050: 4E 20 54 68 69 73 78 3A 3D 49 41 4E 44 28 54 68 N Thisx:=IAND(Th
027060: 69 73 78 2B 38 2C 30 66 66 66 38 68 29 20 0D 0A isx+8,0fff8h) ..
027070: 09 09 45 4C 53 45 20 20 49 4E 43 28 54 68 69 73 ..ELSE INC(This
027080: 78 29 20 45 4E 44 3B 0D 0A 09 09 62 3A 3D 46 6F x) END;....b:=Fo
027090: 72 77 61 72 64 4F 6E 65 43 68 61 72 28 43 75 72 rwardOneChar(Cur
0270A0: 46 69 6C 65 50 74 72 5E 29 20 0D 0A 09 09 45 4E FilePtr^) ....EN
0270B0: 44 3B 0D 0A 09 69 3A 3D 54 68 69 73 78 3B 0D 0A D;...i:=Thisx;..
0270C0: 09 57 48 49 4C 45 20 54 68 69 73 78 3E 3D 28 53 .WHILE Thisx>=(S
0270D0: 63 72 65 65 6E 57 69 64 74 68 2B 43 75 72 72 65 creenWidth+Curre
0270E0: 6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 20 44 4F ntLeftMargin) DO
0270F0: 0D 0A 09 09 43 68 61 6E 67 65 4D 61 72 67 69 6E ....ChangeMargin
027100: 28 33 32 29 3B 0D 0A 09 09 54 68 69 73 78 3A 3D (32);....Thisx:=
027110: 69 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 57 48 49 i;....END;...WHI
027120: 4C 45 20 54 68 69 73 78 3C 43 75 72 72 65 6E 74 LE Thisx<Current
027130: 4C 65 66 74 4D 61 72 67 69 6E 20 44 4F 0D 0A 09 LeftMargin DO...
027140: 09 43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 33 .ChangeMargin(-3
027150: 32 29 3B 0D 0A 09 09 54 68 69 73 78 3A 3D 69 3B 2);....Thisx:=i;
027160: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 54 68 69 73 78 ....END;...Thisx
027170: 3A 3D 54 68 69 73 78 2D 43 75 72 72 65 6E 74 4C :=Thisx-CurrentL
027180: 65 66 74 4D 61 72 67 69 6E 3B 0D 0A 09 63 75 72 eftMargin;...cur
027190: 78 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D x[CurrentWindow]
0271A0: 3A 3D 54 68 69 73 78 3B 0D 0A 09 52 65 73 65 74 :=Thisx;...Reset
0271B0: 50 6F 73 3B 0D 0A 09 45 4E 44 20 43 68 61 6E 67 Pos;...END Chang
0271C0: 65 50 6F 73 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 ePos;....PROCEDU
0271D0: 52 45 20 4C 69 6E 65 4D 6F 76 65 28 62 79 3A 49 RE LineMove(by:I
0271E0: 4E 54 45 47 45 52 29 3B 0D 0A 56 41 52 09 69 3A NTEGER);..VAR.i:
0271F0: 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 4E 0D INTEGER;..BEGIN.
027200: 72 20 77 69 74 68 69 6E 20 74 68 65 0D 0A 09 74 r within the...t
027210: 65 78 74 20 6C 69 6E 65 2E 20 49 74 20 6E 65 65 ext line. It nee
027220: 64 20 6E 6F 74 20 62 65 20 74 68 65 20 73 61 6D d not be the sam
027230: 65 20 61 73 20 74 68 65 20 70 6F 73 69 74 69 6F e as the positio
027240: 6E 20 6F 6E 20 74 68 65 0D 0A 09 73 63 72 65 65 n on the...scree
027250: 6E 20 62 65 63 61 75 73 65 20 6F 66 20 74 68 65 n because of the
027260: 20 75 73 65 20 6F 66 20 74 61 62 20 63 68 61 72 use of tab char
027270: 61 63 74 65 72 73 2A 29 0D 0A 54 59 50 45 09 50 acters*)..TYPE.P
027280: 45 64 69 74 46 69 6C 65 3D 50 4F 49 4E 54 45 52 EditFile=POINTER
027290: 20 54 4F 20 45 64 69 74 46 69 6C 65 3B 0D 0A 56 TO EditFile;..V
0272A0: 41 52 09 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 09 AR.i:INTEGER;...
0272B0: 63 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 53 74 c:CARDINAL;...St
0272C0: 61 72 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F artofWindow,Endo
0272D0: 66 57 69 6E 64 6F 77 3A 43 41 52 44 49 4E 41 4C fWindow:CARDINAL
0272E0: 3B 0D 0A 09 63 68 3A 43 48 41 52 3B 0D 0A 09 43 ;...ch:CHAR;...C
0272F0: 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 6E urrentLeftMargin
027300: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 09 46 69 6C :CARDINAL;...Fil
027310: 65 4C 69 6D 69 74 3A 42 4F 4F 4C 45 41 4E 3B 0D eLimit:BOOLEAN;.
027320: 0A 09 52 65 44 72 61 77 6E 3A 42 4F 4F 4C 45 41 ..ReDrawn:BOOLEA
027330: 4E 3B 0D 0A 09 43 75 72 46 69 6C 65 50 74 72 3A N;...CurFilePtr:
027340: 50 45 64 69 74 46 69 6C 65 3B 0D 0A 50 52 4F 43 PEditFile;..PROC
027350: 45 44 55 52 45 20 43 68 61 6E 67 65 50 6F 73 3B EDURE ChangePos;
027360: 46 4F 52 57 41 52 44 3B 0D 0A 50 52 4F 43 45 44 FORWARD;..PROCED
027370: 55 52 45 20 44 6F 53 63 72 65 65 6E 43 68 61 6E URE DoScreenChan
027380: 67 65 28 43 6F 64 65 3A 45 64 69 74 73 29 3B 0D ge(Code:Edits);.
027390: 0A 42 45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 43 .BEGIN...ScreenC
0273A0: 6F 6E 74 72 6F 6C 28 43 6F 64 65 29 3B 0D 0A 09 ontrol(Code);...
0273B0: 45 4E 44 20 44 6F 53 63 72 65 65 6E 43 68 61 6E END DoScreenChan
0273C0: 67 65 3B 0D 0A 0D 0A 0D 0A 56 41 52 09 6C 69 6E ge;......VAR.lin
0273D0: 65 73 6D 6F 76 65 64 3A 49 4E 54 45 47 45 52 3B esmoved:INTEGER;
0273E0: 0D 0A 09 70 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A ...p:Position;..
0273F0: 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 4C ..PROCEDURE SetL
027400: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
027410: 21 00 01 00 02 09 52 E5 21 00 41 02 00 00 00 02 !.....R.!.A.....
027420: 21 00 46 02 00 00 00 02 21 00 42 02 00 00 00 02 !.F.....!.B.....
027430: 21 00 47 02 00 00 00 02 21 00 43 02 00 00 00 02 !.G.....!.C.....
027440: 21 00 48 02 00 00 00 02 21 00 44 02 00 00 00 02 !.H.....!.D.....
027450: 21 00 49 02 00 00 00 02 21 00 45 02 00 00 00 02 !.I.....!.E.....
027460: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
027470: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
027480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
027490: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0274F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
027500: 0A 09 52 65 44 72 61 77 6E 3A 3D 46 41 4C 53 45 ..ReDrawn:=FALSE
027510: 3B 0D 0A 09 69 3A 3D 4C 69 6E 65 50 6F 73 3B 0D ;...i:=LinePos;.
027520: 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 62 79 29 ..SetLinePos(by)
027530: 3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D 69 3B 0D ;...LinePos:=i;.
027540: 0A 09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 28 2A ..ChangePos;..(*
027550: 09 49 46 20 41 42 53 28 62 79 29 3E 31 20 54 48 .IF ABS(by)>1 TH
027560: 45 4E 0D 0A 09 09 52 65 44 69 73 70 6C 61 79 57 EN....ReDisplayW
027570: 69 6E 64 6F 77 3B 0D 0A 09 09 45 4E 44 3B 2A 29 indow;....END;*)
027580: 0D 0A 09 45 4E 44 20 4C 69 6E 65 4D 6F 76 65 3B ...END LineMove;
027590: 0D 0A 56 41 52 09 70 77 3A 50 6F 73 69 74 69 6F ..VAR.pw:Positio
0275A0: 6E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 57 72 n;..PROCEDURE Wr
0275B0: 69 74 65 50 61 72 74 4C 69 6E 65 28 63 3A 43 41 itePartLine(c:CA
0275C0: 52 44 49 4E 41 4C 29 3B 0D 0A 56 41 52 09 53 61 RDINAL);..VAR.Sa
0275D0: 76 65 78 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 vex:CARDINAL;..B
0275E0: 45 47 49 4E 0D 0A 09 47 65 74 50 6F 73 69 74 69 EGIN...GetPositi
0275F0: 6F 6E 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 70 on(CurFilePtr^,p
027600: 77 29 3B 0D 0A 09 4C 4F 4F 50 0D 0A 09 09 52 65 w);...LOOP....Re
027610: 61 64 4E 65 78 74 43 68 61 72 28 70 77 2C 63 68 adNextChar(pw,ch
027620: 29 3B 0D 0A 09 09 49 46 20 28 63 68 3D 30 64 78 );....IF (ch=0dx
027630: 29 20 4F 52 20 28 63 68 3D 31 61 78 29 20 4F 52 ) OR (ch=1ax) OR
027640: 20 28 63 68 3D 30 61 78 29 20 54 48 45 4E 20 45 (ch=0ax) THEN E
027650: 58 49 54 20 45 4E 44 3B 0D 0A 09 09 49 46 20 63 XIT END;....IF c
027660: 3E 3D 28 53 63 72 65 65 6E 57 69 64 74 68 2B 43 >=(ScreenWidth+C
027670: 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 69 6E urrentLeftMargin
027680: 29 20 54 48 45 4E 20 45 58 49 54 20 45 4E 44 3B ) THEN EXIT END;
027690: 0D 0A 09 09 49 46 20 63 68 3D 54 41 42 20 54 48 ....IF ch=TAB TH
0276A0: 45 4E 20 0D 0A 09 09 09 52 45 50 45 41 54 0D 0A EN .....REPEAT..
0276B0: 09 09 09 09 49 46 20 63 3E 43 75 72 72 65 6E 74 ....IF c>Current
0276C0: 4C 65 66 74 4D 61 72 67 69 6E 20 54 48 45 4E 20 LeftMargin THEN
0276D0: 57 72 69 74 65 28 27 20 27 29 20 45 4E 44 3B 20 Write(' ') END;
0276E0: 0D 0A 09 09 09 09 49 4E 43 28 63 29 3B 0D 0A 09 ......INC(c);...
0276F0: 09 09 09 55 4E 54 49 4C 20 49 41 4E 44 28 63 2C ...UNTIL IAND(c,
027700: 76 65 28 2D 31 29 3B 0D 0A 09 09 09 52 65 73 65 ve(-1);.....Rese
027710: 74 50 6F 73 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A tPos;.....END;..
027720: 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 53 63 72 ..END;...END Scr
027730: 6F 6C 6C 55 70 3B 0D 0A 50 52 4F 43 45 44 55 52 ollUp;..PROCEDUR
027740: 45 20 53 63 72 6F 6C 6C 44 6F 77 6E 3B 0D 0A 42 E ScrollDown;..B
027750: 45 47 49 4E 0D 0A 09 53 63 72 6F 6C 6C 54 65 78 EGIN...ScrollTex
027760: 74 28 31 29 3B 0D 0A 09 49 46 20 4D 6F 76 65 64 t(1);...IF Moved
027770: 4F 4B 20 54 48 45 4E 0D 0A 09 09 49 46 20 54 68 OK THEN....IF Th
027780: 69 73 79 3E 53 74 61 72 74 6F 66 57 69 6E 64 6F isy>StartofWindo
027790: 77 20 54 48 45 4E 20 0D 0A 09 09 09 44 45 43 28 w THEN .....DEC(
0277A0: 54 68 69 73 79 29 3B 0D 0A 09 09 45 4C 53 45 0D Thisy);....ELSE.
0277B0: 0A 09 09 09 4C 69 6E 65 4D 6F 76 65 28 31 29 3B ....LineMove(1);
0277C0: 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 .....END;....END
0277D0: 3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 ;...ResetPos;...
0277E0: 45 4E 44 20 53 63 72 6F 6C 6C 44 6F 77 6E 3B 0D END ScrollDown;.
0277F0: 0A 50 52 4F 43 45 44 55 52 45 20 4C 65 66 74 3B .PROCEDURE Left;
027800: 0D 0A 56 41 52 09 63 68 3A 43 48 41 52 3B 0D 0A ..VAR.ch:CHAR;..
027810: 09 53 61 76 65 4C 69 6E 65 4C 65 6E 3A 43 41 52 .SaveLineLen:CAR
027820: 44 49 4E 41 4C 3B 0D 0A 09 70 3A 50 6F 73 69 74 DINAL;...p:Posit
027830: 69 6F 6E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4D 6F ion;..BEGIN...Mo
027840: 76 65 64 4F 4B 3A 3D 54 52 55 45 3B 0D 0A 09 52 vedOK:=TRUE;...R
027850: 65 44 72 61 77 6E 3A 3D 46 41 4C 53 45 3B 0D 0A eDrawn:=FALSE;..
027860: 09 53 61 76 65 4C 69 6E 65 4C 65 6E 3A 3D 4C 69 .SaveLineLen:=Li
027870: 6E 65 4C 65 6E 3B 0D 0A 09 47 65 74 50 6F 73 69 neLen;...GetPosi
027880: 74 69 6F 6E 28 43 75 72 46 69 6C 65 50 74 72 5E tion(CurFilePtr^
027890: 2C 70 29 3B 0D 0A 09 49 46 20 4C 69 6E 65 50 6F ,p);...IF LinePo
0278A0: 73 3E 30 20 54 48 45 4E 0D 0A 09 09 62 3A 3D 42 s>0 THEN....b:=B
0278B0: 61 63 6B 4F 6E 65 43 68 61 72 28 43 75 72 46 69 ackOneChar(CurFi
0278C0: 6C 65 50 74 72 5E 29 3B 0D 0A 09 09 63 68 3A 3D lePtr^);....ch:=
0278D0: 47 65 74 43 75 72 72 65 6E 74 43 68 61 72 28 43 GetCurrentChar(C
0278E0: 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 09 urFilePtr^);....
0278F0: 49 46 20 28 43 75 72 72 65 6E 74 4C 65 66 74 4D IF (CurrentLeftM
027900: 37 29 3D 31 3B 0D 0A 09 09 45 4C 53 45 0D 0A 09 7)=1;....ELSE...
027910: 09 09 49 46 20 63 3E 43 75 72 72 65 6E 74 4C 65 ..IF c>CurrentLe
027920: 66 74 4D 61 72 67 69 6E 20 54 48 45 4E 20 57 72 ftMargin THEN Wr
027930: 69 74 65 28 63 68 29 20 45 4E 44 3B 0D 0A 09 09 ite(ch) END;....
027940: 09 49 4E 43 28 63 29 3B 0D 0A 09 09 09 45 4E 44 .INC(c);.....END
027950: 3B 0D 0A 09 09 45 4E 44 28 2A 4C 4F 4F 50 2A 29 ;....END(*LOOP*)
027960: 3B 0D 0A 09 53 61 76 65 78 3A 3D 54 68 69 73 78 ;...Savex:=Thisx
027970: 3B 0D 0A 09 49 46 20 63 3C 43 75 72 72 65 6E 74 ;...IF c<Current
027980: 4C 65 66 74 4D 61 72 67 69 6E 20 54 48 45 4E 20 LeftMargin THEN
027990: 54 68 69 73 78 3A 3D 30 3B 0D 0A 09 45 4C 53 45 Thisx:=0;...ELSE
0279A0: 20 54 68 69 73 78 3A 3D 63 2D 43 75 72 72 65 6E Thisx:=c-Curren
0279B0: 74 4C 65 66 74 4D 61 72 67 69 6E 20 45 4E 44 3B tLeftMargin END;
0279C0: 0D 0A 09 43 6C 65 61 72 52 65 73 74 4F 66 4C 69 ...ClearRestOfLi
0279D0: 6E 65 3B 0D 0A 09 54 68 69 73 78 3A 3D 53 61 76 ne;...Thisx:=Sav
0279E0: 65 78 3B 0D 0A 09 45 4E 44 20 57 72 69 74 65 50 ex;...END WriteP
0279F0: 61 72 74 4C 69 6E 65 3B 0D 0A 50 52 4F 43 45 44 artLine;..PROCED
027A00: 55 52 45 20 57 72 69 74 65 4C 69 6E 65 3B 0D 0A URE WriteLine;..
027A10: 42 45 47 49 4E 0D 0A 09 57 72 69 74 65 50 61 72 BEGIN...WritePar
027A20: 74 4C 69 6E 65 28 31 29 3B 0D 0A 09 45 4E 44 20 tLine(1);...END
027A30: 57 72 69 74 65 4C 69 6E 65 3B 0D 0A 50 52 4F 43 WriteLine;..PROC
027A40: 45 44 55 52 45 20 53 63 72 6F 6C 6C 57 69 6E 64 EDURE ScrollWind
027A50: 6F 77 28 53 74 61 72 74 2C 45 6E 64 3A 43 41 52 ow(Start,End:CAR
027A60: 44 49 4E 41 4C 3B 42 79 3A 49 4E 54 45 47 45 52 DINAL;By:INTEGER
027A70: 29 3B 0D 0A 28 2A 09 53 63 72 6F 6C 6C 20 74 68 );..(*.Scroll th
027A80: 65 20 77 69 6E 64 6F 77 20 62 79 20 72 65 64 69 e window by redi
027A90: 73 70 6C 61 79 69 6E 67 20 61 6C 6C 20 6F 72 20 splaying all or
027AA0: 70 61 72 74 20 6F 66 20 69 74 0D 0A 0D 0A 09 53 part of it.....S
027AB0: 74 61 72 74 20 61 6E 64 20 45 6E 64 20 67 69 76 tart and End giv
027AC0: 65 20 61 63 74 75 61 6C 20 73 63 72 65 65 6E 20 e actual screen
027AD0: 70 6F 69 73 74 69 6F 6E 73 20 28 69 6E 20 79 29 poistions (in y)
027AE0: 20 66 6F 72 0D 0A 09 74 68 65 20 74 6F 70 20 61 for...the top a
027AF0: 6E 64 20 62 6F 74 74 6F 6D 20 6F 66 20 74 68 65 nd bottom of the
027B00: 61 72 67 69 6E 3E 30 29 20 41 4E 44 20 28 54 68 argin>0) AND (Th
027B10: 69 73 78 3D 30 29 20 54 48 45 4E 0D 0A 09 09 09 isx=0) THEN.....
027B20: 43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 33 32 ChangeMargin(-32
027B30: 29 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 44 );.....END;....D
027B40: 45 43 28 4C 69 6E 65 50 6F 73 29 3B 0D 0A 09 09 EC(LinePos);....
027B50: 49 46 20 4E 4F 54 20 52 65 44 72 61 77 6E 20 54 IF NOT ReDrawn T
027B60: 48 45 4E 0D 0A 09 09 09 49 46 20 63 68 3C 3E 54 HEN.....IF ch<>T
027B70: 41 42 20 54 48 45 4E 0D 0A 09 09 09 09 44 45 43 AB THEN......DEC
027B80: 28 54 68 69 73 78 29 3B 0D 0A 09 09 09 09 52 65 (Thisx);......Re
027B90: 73 65 74 50 6F 73 3B 0D 0A 09 09 09 45 4C 53 45 setPos;.....ELSE
027BA0: 0D 0A 09 09 09 09 4C 69 6E 65 4D 6F 76 65 28 30 ......LineMove(0
027BB0: 29 3B 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 );......END;....
027BC0: 09 45 4E 44 3B 0D 0A 0D 0A 09 45 4C 53 45 0D 0A .END;.....ELSE..
027BD0: 09 09 54 68 69 73 78 3A 3D 31 30 32 33 3B 0D 0A ..Thisx:=1023;..
027BE0: 09 09 4C 69 6E 65 50 6F 73 3A 3D 31 30 32 33 3B ..LinePos:=1023;
027BF0: 0D 0A 09 09 55 70 3B 0D 0A 09 09 49 46 20 4E 4F ....Up;....IF NO
027C00: 54 20 4D 6F 76 65 64 4F 4B 20 54 48 45 4E 0D 0A T MovedOK THEN..
027C10: 09 09 09 4C 69 6E 65 50 6F 73 3A 3D 30 3B 0D 0A ...LinePos:=0;..
027C20: 09 09 09 4C 69 6E 65 4C 65 6E 3A 3D 53 61 76 65 ...LineLen:=Save
027C30: 4C 69 6E 65 4C 65 6E 3B 0D 0A 09 09 09 53 65 74 LineLen;.....Set
027C40: 50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69 6C 65 Position(CurFile
027C50: 50 74 72 5E 2C 70 29 3B 0D 0A 09 09 09 54 68 69 Ptr^,p);.....Thi
027C60: 73 78 3A 3D 30 3B 0D 0A 09 09 09 52 65 73 65 74 sx:=0;.....Reset
027C70: 50 6F 73 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 Pos;.....END;...
027C80: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 4C 65 66 74 .END;...END Left
027C90: 3B 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 ;....PROCEDURE R
027CA0: 69 67 68 74 3B 0D 0A 56 41 52 09 63 68 3A 43 48 ight;..VAR.ch:CH
027CB0: 41 52 3B 0D 0A 09 69 3A 43 41 52 44 49 4E 41 4C AR;...i:CARDINAL
027CC0: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 63 68 3A 3D 47 ;..BEGIN...ch:=G
027CD0: 65 74 43 75 72 72 65 6E 74 43 68 61 72 28 43 75 etCurrentChar(Cu
027CE0: 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 49 46 rFilePtr^);...IF
027CF0: 20 63 68 3D 31 61 78 20 28 2A 6F 6E 20 45 4F 46 ch=1ax (*on EOF
027D00: 20 73 63 72 6F 6C 6C 2A 29 0D 0A 56 41 52 09 0D scroll*)..VAR..
027D10: 0A 09 70 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A 09 ..p:Position;...
027D20: 69 3A 49 4E 54 45 47 45 52 3B 0D 0A 42 45 47 49 i:INTEGER;..BEGI
027D30: 4E 0D 0A 09 47 65 74 50 6F 73 69 74 69 6F 6E 28 N...GetPosition(
027D40: 43 75 72 46 69 6C 65 50 74 72 5E 2C 70 29 3B 0D CurFilePtr^,p);.
027D50: 0A 09 69 3A 3D 49 4E 54 45 47 45 52 28 53 74 61 ..i:=INTEGER(Sta
027D60: 72 74 29 2D 49 4E 54 45 47 45 52 28 54 68 69 73 rt)-INTEGER(This
027D70: 79 29 2B 42 79 3B 0D 0A 09 53 65 74 4C 69 6E 65 y)+By;...SetLine
027D80: 50 6F 73 28 69 29 3B 0D 0A 09 4D 6F 76 65 64 4F Pos(i);...MovedO
027D90: 4B 3A 3D 46 41 4C 53 45 3B 0D 0A 09 49 46 20 6C K:=FALSE;...IF l
027DA0: 69 6E 65 73 6D 6F 76 65 64 3C 3E 69 20 54 48 45 inesmoved<>i THE
027DB0: 4E 20 52 45 54 55 52 4E 20 45 4E 44 3B 0D 0A 09 N RETURN END;...
027DC0: 4D 6F 76 65 64 4F 4B 3A 3D 54 52 55 45 3B 0D 0A MovedOK:=TRUE;..
027DD0: 09 69 3A 3D 53 74 61 72 74 3B 0D 0A 09 4C 4F 4F .i:=Start;...LOO
027DE0: 50 0D 0A 09 09 49 46 20 43 41 52 44 49 4E 41 4C P....IF CARDINAL
027DF0: 28 69 29 3E 45 6E 64 20 54 48 45 4E 20 45 58 49 (i)>End THEN EXI
027E00: 54 20 45 4E 44 3B 0D 0A 09 09 47 6F 74 6F 78 79 T END;....Gotoxy
027E10: 28 30 2C 69 29 3B 0D 0A 09 09 57 72 69 74 65 4C (0,i);....WriteL
027E20: 69 6E 65 3B 0D 0A 09 09 53 65 74 4C 69 6E 65 50 ine;....SetLineP
027E30: 6F 73 28 31 29 0D 0A 09 09 49 46 20 6C 69 6E 65 os(1)....IF line
027E40: 73 6D 6F 76 65 64 3C 3E 31 20 54 48 45 4E 20 45 smoved<>1 THEN E
027E50: 58 49 54 20 45 4E 44 3B 09 0D 0A 09 09 49 4E 43 XIT END;.....INC
027E60: 28 69 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 53 (i);....END;...S
027E70: 65 74 50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69 etPosition(CurFi
027E80: 6C 65 50 74 72 5E 2C 70 29 3B 0D 0A 09 53 65 74 lePtr^,p);...Set
027E90: 4C 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 43 68 LinePos(0);...Ch
027EA0: 61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E 44 20 53 angePos;...END S
027EB0: 63 72 6F 6C 6C 57 69 6E 64 6F 77 3B 0D 0A 50 52 crollWindow;..PR
027EC0: 4F 43 45 44 55 52 45 20 52 65 6D 6F 76 65 4C 69 OCEDURE RemoveLi
027ED0: 6E 65 3B 0D 0A 0D 0A 28 2A 09 52 65 6D 6F 76 65 ne;....(*.Remove
027EE0: 20 61 20 6C 69 6E 65 20 66 72 6F 6D 20 74 68 65 a line from the
027EF0: 20 73 63 72 65 65 6E 20 61 6E 64 20 62 72 69 6E screen and brin
027F00: 20 63 68 61 72 2A 29 20 54 48 45 4E 20 52 45 54 char*) THEN RET
027F10: 55 52 4E 20 45 4E 44 3B 0D 0A 09 62 3A 3D 46 6F URN END;...b:=Fo
027F20: 72 77 61 72 64 4F 6E 65 43 68 61 72 28 43 75 72 rwardOneChar(Cur
027F30: 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 49 46 20 FilePtr^);...IF
027F40: 4C 69 6E 65 50 6F 73 3E 3D 4C 69 6E 65 4C 65 6E LinePos>=LineLen
027F50: 20 54 48 45 4E 0D 0A 09 09 54 68 69 73 78 3A 3D THEN....Thisx:=
027F60: 30 3B 0D 0A 09 09 4C 69 6E 65 50 6F 73 3A 3D 30 0;....LinePos:=0
027F70: 3B 0D 0A 09 09 62 3A 3D 42 61 63 6B 4F 6E 65 43 ;....b:=BackOneC
027F80: 68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 har(CurFilePtr^)
027F90: 3B 0D 0A 09 09 44 6F 77 6E 3B 0D 0A 0D 0A 09 45 ;....Down;.....E
027FA0: 4C 53 45 0D 0A 0D 0A 09 09 49 46 20 63 68 3D 54 LSE......IF ch=T
027FB0: 41 42 20 54 48 45 4E 20 69 3A 3D 39 20 45 4C 53 AB THEN i:=9 ELS
027FC0: 45 20 69 3A 3D 31 20 45 4E 44 3B 0D 0A 09 09 49 E i:=1 END;....I
027FD0: 46 20 28 54 68 69 73 78 2B 69 29 3E 3D 28 53 63 F (Thisx+i)>=(Sc
027FE0: 72 65 65 6E 57 69 64 74 68 2D 31 29 20 54 48 45 reenWidth-1) THE
027FF0: 4E 0D 0A 09 09 09 43 68 61 6E 67 65 4D 61 72 67 N.....ChangeMarg
028000: 69 6E 28 33 32 29 3B 0D 0A 09 09 09 45 4E 44 3B in(32);.....END;
028010: 0D 0A 09 09 49 4E 43 28 4C 69 6E 65 50 6F 73 29 ....INC(LinePos)
028020: 3B 0D 0A 09 09 49 46 20 63 68 3C 3E 54 41 42 20 ;....IF ch<>TAB
028030: 54 48 45 4E 0D 0A 09 09 09 49 4E 43 28 54 68 69 THEN.....INC(Thi
028040: 73 78 29 3B 0D 0A 09 09 09 52 65 73 65 74 50 6F sx);.....ResetPo
028050: 73 3B 0D 0A 09 09 45 4C 53 45 0D 0A 0D 0A 09 09 s;....ELSE......
028060: 09 28 2A 69 66 20 6D 6F 76 65 73 20 6F 76 65 72 .(*if moves over
028070: 20 74 61 62 73 20 61 72 65 20 73 6C 6F 77 2C 20 tabs are slow,
028080: 72 65 70 6C 61 63 65 20 74 68 65 0D 0A 09 09 09 replace the.....
028090: 20 20 72 65 70 65 61 74 65 64 20 6D 6F 76 65 73 repeated moves
0280A0: 20 72 69 67 68 74 20 62 79 20 61 20 67 6F 74 6F right by a goto
0280B0: 78 79 2A 29 0D 0A 09 09 09 54 68 69 73 78 3A 3D xy*).....Thisx:=
0280C0: 49 41 4E 44 28 54 68 69 73 78 2B 38 2C 30 66 66 IAND(Thisx+8,0ff
0280D0: 66 38 68 29 3B 0D 0A 09 09 09 52 65 73 65 74 50 f8h);.....ResetP
0280E0: 6F 73 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 os;.....END;....
0280F0: 45 4E 44 3B 0D 0A 09 45 4E 44 20 52 69 67 68 74 END;...END Right
028100: 67 20 61 6E 6F 74 68 65 72 20 6C 69 6E 65 20 75 g another line u
028110: 70 20 61 74 20 74 68 65 20 62 6F 74 74 6F 6D 0D p at the bottom.
028120: 0A 0D 0A 09 54 68 69 73 79 20 67 69 76 65 73 20 ....Thisy gives
028130: 6C 69 6E 65 20 74 6F 20 72 65 6D 6F 76 65 2A 29 line to remove*)
028140: 0D 0A 56 41 52 09 70 3A 50 6F 73 69 74 69 6F 6E ..VAR.p:Position
028150: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 6F 78 ;..BEGIN...Gotox
028160: 79 28 30 2C 54 68 69 73 79 29 3B 0D 0A 09 53 63 y(0,Thisy);...Sc
028170: 72 6F 6C 6C 57 69 6E 64 6F 77 28 54 68 69 73 79 rollWindow(Thisy
028180: 2C 45 6E 64 6F 66 57 69 6E 64 6F 77 2C 31 29 3B ,EndofWindow,1);
028190: 0D 0A 09 69 3A 3D 45 6E 64 6F 66 57 69 6E 64 6F ...i:=EndofWindo
0281A0: 77 2D 54 68 69 73 79 2B 31 3B 0D 0A 09 47 65 74 w-Thisy+1;...Get
0281B0: 50 6F 73 69 74 69 6F 6E 28 43 75 72 46 69 6C 65 Position(CurFile
0281C0: 50 74 72 5E 2C 70 29 3B 0D 0A 09 53 65 74 4C 69 Ptr^,p);...SetLi
0281D0: 6E 65 50 6F 73 28 69 29 3B 0D 0A 09 49 46 20 6C nePos(i);...IF l
0281E0: 69 6E 65 73 6D 6F 76 65 64 3D 69 20 54 48 45 4E inesmoved=i THEN
0281F0: 0D 0A 09 09 4D 6F 76 65 64 4F 4B 3A 3D 54 52 55 ....MovedOK:=TRU
028200: 45 3B 0D 0A 09 09 47 6F 74 6F 78 79 28 30 2C 45 E;....Gotoxy(0,E
028210: 6E 64 6F 66 57 69 6E 64 6F 77 29 3B 0D 0A 09 09 ndofWindow);....
028220: 57 72 69 74 65 4C 69 6E 65 3B 0D 0A 09 09 45 4E WriteLine;....EN
028230: 44 3B 0D 0A 09 53 65 74 50 6F 73 69 74 69 6F 6E D;...SetPosition
028240: 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 70 29 3B (CurFilePtr^,p);
028250: 0D 0A 09 45 4E 44 20 52 65 6D 6F 76 65 4C 69 6E ...END RemoveLin
028260: 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 44 65 e;..PROCEDURE De
028270: 6C 46 75 6C 6C 4C 69 6E 65 3B 0D 0A 42 45 47 49 lFullLine;..BEGI
028280: 4E 0D 0A 09 4D 61 72 6B 41 73 55 70 64 61 74 65 N...MarkAsUpdate
028290: 64 3B 0D 0A 09 52 65 6D 6F 76 65 4C 69 6E 65 3B d;...RemoveLine;
0282A0: 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 30 29 ...SetLinePos(0)
0282B0: 3B 0D 0A 09 44 65 6C 43 68 61 72 73 28 43 75 72 ;...DelChars(Cur
0282C0: 46 69 6C 65 50 74 72 5E 2C 4C 69 6E 65 4C 65 6E FilePtr^,LineLen
0282D0: 2B 32 29 3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D +2);...LinePos:=
0282E0: 30 3B 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 4C 0;...IF CurrentL
0282F0: 65 66 74 4D 61 72 67 69 6E 3E 30 20 54 48 45 4E eftMargin>0 THEN
028300: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 41 6C 70 ;..PROCEDURE Alp
028310: 68 61 4E 75 6D 28 63 68 3A 43 48 41 52 29 3A 42 haNum(ch:CHAR):B
028320: 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A OOLEAN;..BEGIN..
028330: 09 63 68 3A 3D 43 41 50 28 63 68 29 3B 0D 0A 09 .ch:=CAP(ch);...
028340: 52 45 54 55 52 4E 20 28 28 63 68 3E 3D 27 41 27 RETURN ((ch>='A'
028350: 29 20 41 4E 44 20 28 63 68 3C 3D 27 5A 27 29 29 ) AND (ch<='Z'))
028360: 20 4F 52 20 28 28 63 68 3E 3D 27 30 27 29 20 41 OR ((ch>='0') A
028370: 4E 44 20 28 63 68 3C 3D 27 39 27 29 29 3B 0D 0A ND (ch<='9'));..
028380: 09 45 4E 44 20 41 6C 70 68 61 4E 75 6D 3B 0D 0A .END AlphaNum;..
028390: 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 69 6E 64 ..PROCEDURE Find
0283A0: 57 6F 72 64 28 42 61 63 6B 77 61 72 64 3A 42 4F Word(Backward:BO
0283B0: 4F 4C 45 41 4E 3B 44 65 6C 65 74 65 3A 42 4F 4F OLEAN;Delete:BOO
0283C0: 4C 45 41 4E 29 3B 0D 0A 0D 0A 28 2A 09 46 69 6E LEAN);....(*.Fin
0283D0: 64 20 61 20 77 6F 72 64 20 61 6E 64 20 6F 70 74 d a word and opt
0283E0: 69 6F 6E 61 6C 6C 79 20 64 65 6C 65 74 65 20 69 ionally delete i
0283F0: 74 0D 0A 0D 0A 09 41 20 77 6F 72 64 20 69 73 20 t.....A word is
028400: 61 20 73 74 72 69 6E 67 20 61 6C 70 68 61 6E 75 a string alphanu
028410: 6D 65 72 69 63 73 20 6F 72 20 61 20 73 74 72 69 merics or a stri
028420: 6E 67 20 6F 66 20 6D 61 72 6B 73 2C 20 74 61 62 ng of marks, tab
028430: 73 20 20 6F 72 20 73 70 6F 61 63 65 73 0D 0A 0D s or spoaces...
028440: 0A 09 54 68 65 20 63 75 72 73 6F 72 20 69 73 20 ..The cursor is
028450: 72 65 70 6F 73 69 74 69 6F 6E 65 64 2A 29 0D 0A repositioned*)..
028460: 56 41 52 09 63 68 3A 43 48 41 52 3B 0D 0A 09 62 VAR.ch:CHAR;...b
028470: 31 3A 42 4F 4F 4C 45 41 4E 3B 0D 0A 42 45 47 49 1:BOOLEAN;..BEGI
028480: 4E 0D 0A 09 46 69 6C 65 4C 69 6D 69 74 3A 3D 46 N...FileLimit:=F
028490: 41 4C 53 45 3B 0D 0A 09 49 46 20 42 61 63 6B 77 ALSE;...IF Backw
0284A0: 61 72 64 20 54 48 45 4E 20 0D 0A 09 09 4C 65 66 ard THEN ....Lef
0284B0: 74 3B 0D 0A 09 09 49 46 20 4E 4F 54 20 4D 6F 76 t;....IF NOT Mov
0284C0: 65 64 4F 4B 20 54 48 45 4E 20 52 45 54 55 52 4E edOK THEN RETURN
0284D0: 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 END;....END;...
0284E0: 63 68 3A 3D 47 65 74 43 75 72 72 65 6E 74 43 68 ch:=GetCurrentCh
0284F0: 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B ar(CurFilePtr^);
028500: 20 0D 0A 09 09 43 68 61 6E 67 65 4D 61 72 67 69 ....ChangeMargi
028510: 6E 28 2D 49 4E 54 45 47 45 52 28 43 75 72 72 65 n(-INTEGER(Curre
028520: 6E 74 4C 65 66 74 4D 61 72 67 69 6E 29 29 0D 0A ntLeftMargin))..
028530: 09 09 45 4E 44 3B 0D 0A 09 54 68 69 73 78 3A 3D ..END;...Thisx:=
028540: 30 3B 0D 0A 09 52 65 73 65 74 50 6F 73 3B 0D 0A 0;...ResetPos;..
028550: 09 4C 69 6E 65 50 6F 73 3A 3D 30 3B 0D 0A 09 53 .LinePos:=0;...S
028560: 65 74 4C 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 etLinePos(0);...
028570: 45 4E 44 20 44 65 6C 46 75 6C 6C 4C 69 6E 65 3B END DelFullLine;
028580: 0D 0A 0D 0A 0D 0A 50 52 4F 43 45 44 55 52 45 20 ......PROCEDURE
028590: 53 63 72 6F 6C 6C 54 65 78 74 28 42 79 3A 49 4E ScrollText(By:IN
0285A0: 54 45 47 45 52 29 3B 0D 0A 0D 0A 28 2A 09 53 63 TEGER);....(*.Sc
0285B0: 72 6F 6C 6C 20 75 70 20 6F 6E 65 20 6C 69 6E 65 roll up one line
0285C0: 20 69 6E 20 74 68 65 20 66 69 6C 65 0D 0A 09 28 in the file...(
0285D0: 77 68 69 63 68 20 6D 65 61 6E 73 20 74 68 65 20 which means the
0285E0: 74 65 78 74 20 73 63 72 6F 6C 6C 73 20 64 6F 77 text scrolls dow
0285F0: 6E 20 2D 20 62 61 63 6B 77 61 72 64 73 20 74 6F n - backwards to
028600: 0D 0A 09 77 68 61 74 20 79 6F 75 20 6D 69 67 68 ...what you migh
028610: 74 20 74 68 69 6E 6B 20 61 74 20 66 69 72 73 74 t think at first
028620: 29 2A 29 0D 0A 0D 0A 42 45 47 49 4E 0D 0A 09 53 )*)....BEGIN...S
028630: 63 72 6F 6C 6C 57 69 6E 64 6F 77 28 53 74 61 72 crollWindow(Star
028640: 74 6F 66 57 69 6E 64 6F 77 2C 45 6E 64 6F 66 57 tofWindow,EndofW
028650: 69 6E 64 6F 77 2C 42 79 29 3B 0D 0A 09 45 4E 44 indow,By);...END
028660: 20 53 63 72 6F 6C 6C 54 65 78 74 3B 0D 0A 50 52 ScrollText;..PR
028670: 4F 43 45 44 55 52 45 20 53 63 72 6F 6C 6C 55 70 OCEDURE ScrollUp
028680: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 0D 0A 09 53 63 ;..BEGIN......Sc
028690: 72 6F 6C 6C 54 65 78 74 28 2D 31 29 3B 0D 0A 09 rollText(-1);...
0286A0: 49 46 20 4D 6F 76 65 64 4F 4B 20 54 48 45 4E 0D IF MovedOK THEN.
0286B0: 0A 09 09 49 46 20 54 68 69 73 79 3C 45 6E 64 6F ...IF Thisy<Endo
0286C0: 66 57 69 6E 64 6F 77 20 54 48 45 4E 20 0D 0A 09 fWindow THEN ...
0286D0: 09 09 49 4E 43 28 54 68 69 73 79 29 3B 0D 0A 09 ..INC(Thisy);...
0286E0: 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 09 45 ..ResetPos;....E
0286F0: 4C 53 45 20 09 0D 0A 09 09 09 4C 69 6E 65 4D 6F LSE ......LineMo
028700: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
028710: 22 00 01 00 02 09 52 E5 22 00 41 02 00 00 00 02 ".....R.".A.....
028720: 22 00 46 02 00 00 00 02 22 00 42 02 00 00 00 02 ".F.....".B.....
028730: 22 00 47 02 00 00 00 02 22 00 43 02 00 00 00 02 ".G.....".C.....
028740: 22 00 48 02 00 00 00 02 22 00 44 02 00 00 00 02 ".H.....".D.....
028750: 22 00 49 02 00 00 00 02 22 00 45 02 00 00 00 02 ".I.....".E.....
028760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
028770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
028780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
028790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0287F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
028800: 0D 0A 09 62 31 3A 3D 41 6C 70 68 61 4E 75 6D 28 ...b1:=AlphaNum(
028810: 63 68 29 3B 0D 0A 09 49 46 20 63 68 3D 45 4F 46 ch);...IF ch=EOF
028820: 20 54 48 45 4E 20 52 45 54 55 52 4E 20 45 4E 44 THEN RETURN END
028830: 3B 0D 0A 09 52 45 50 45 41 54 0D 0A 09 09 49 46 ;...REPEAT....IF
028840: 20 44 65 6C 65 74 65 20 54 48 45 4E 20 44 65 6C Delete THEN Del
028850: 4F 6E 65 43 68 61 72 20 45 4E 44 3B 0D 0A 09 09 OneChar END;....
028860: 49 46 20 42 61 63 6B 77 61 72 64 20 20 20 54 48 IF Backward TH
028870: 45 4E 20 4C 65 66 74 0D 0A 09 09 45 4C 53 49 46 EN Left....ELSIF
028880: 20 4E 4F 54 20 44 65 6C 65 74 65 20 54 48 45 4E NOT Delete THEN
028890: 20 52 69 67 68 74 20 45 4E 44 3B 0D 0A 09 09 63 Right END;....c
0288A0: 68 3A 3D 47 65 74 43 75 72 72 65 6E 74 43 68 61 h:=GetCurrentCha
0288B0: 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D r(CurFilePtr^);.
0288C0: 0A 09 09 55 4E 54 49 4C 20 20 28 62 31 3C 3E 41 ...UNTIL (b1<>A
0288D0: 6C 70 68 61 4E 75 6D 28 63 68 29 29 20 4F 52 20 lphaNum(ch)) OR
0288E0: 46 69 6C 65 4C 69 6D 69 74 20 4F 52 20 28 63 68 FileLimit OR (ch
0288F0: 3D 45 4F 46 29 3B 0D 0A 09 49 46 20 42 61 63 6B =EOF);...IF Back
028900: 77 61 72 64 20 41 4E 44 20 4E 4F 54 20 46 69 6C ward AND NOT Fil
028910: 65 4C 69 6D 69 74 20 54 48 45 4E 20 52 69 67 68 eLimit THEN Righ
028920: 74 20 45 4E 44 3B 0D 0A 09 45 4E 44 20 46 69 6E t END;...END Fin
028930: 64 57 6F 72 64 3B 0D 0A 50 52 4F 43 45 44 55 52 dWord;..PROCEDUR
028940: 45 20 44 6F 77 6E 3B 0D 0A 42 45 47 49 4E 0D 0A E Down;..BEGIN..
028950: 09 4C 69 6E 65 4D 6F 76 65 28 31 29 3B 0D 0A 09 .LineMove(1);...
028960: 46 69 6C 65 4C 69 6D 69 74 3A 3D 6C 69 6E 65 73 FileLimit:=lines
028970: 6D 6F 76 65 64 3D 30 3B 0D 0A 09 49 46 20 6C 69 moved=0;...IF li
028980: 6E 65 73 6D 6F 76 65 64 3E 30 20 54 48 45 4E 0D nesmoved>0 THEN.
028990: 0A 09 09 49 46 20 28 54 68 69 73 79 3E 3D 45 6E ...IF (Thisy>=En
0289A0: 64 6F 66 57 69 6E 64 6F 77 29 20 54 48 45 4E 0D dofWindow) THEN.
0289B0: 0A 09 09 09 52 65 44 69 73 70 6C 61 79 57 69 6E ....ReDisplayWin
0289C0: 64 6F 77 3B 0D 0A 09 09 45 4C 53 49 46 20 20 4E dow;....ELSIF N
0289D0: 4F 54 20 52 65 44 72 61 77 6E 20 54 48 45 4E 20 OT ReDrawn THEN
0289E0: 0D 0A 09 09 09 49 4E 43 28 54 68 69 73 79 29 3B .....INC(Thisy);
0289F0: 0D 0A 09 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A .....ResetPos;..
028A00: 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C 69 6E 65 ;....END;...Line
028A10: 4D 6F 76 65 28 2D 31 29 3B 0D 0A 09 46 69 6C 65 Move(-1);...File
028A20: 4C 69 6D 69 74 3A 3D 6C 69 6E 65 73 6D 6F 76 65 Limit:=linesmove
028A30: 64 3D 30 3B 0D 0A 09 49 46 20 28 6C 69 6E 65 73 d=0;...IF (lines
028A40: 6D 6F 76 65 64 3C 3E 30 29 20 41 4E 44 20 28 54 moved<>0) AND (T
028A50: 68 69 73 79 3E 53 74 61 72 74 6F 66 57 69 6E 64 hisy>StartofWind
028A60: 6F 77 29 20 41 4E 44 20 4E 4F 54 20 52 65 44 72 ow) AND NOT ReDr
028A70: 61 77 6E 20 54 48 45 4E 20 0D 0A 09 09 44 45 43 awn THEN ....DEC
028A80: 28 54 68 69 73 79 29 3B 0D 0A 09 09 52 65 73 65 (Thisy);....Rese
028A90: 74 50 6F 73 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 tPos;....END;...
028AA0: 45 4E 44 20 55 70 3B 0D 0A 50 52 4F 43 45 44 55 END Up;..PROCEDU
028AB0: 52 45 20 55 70 53 63 72 65 65 6E 3B 0D 0A 42 45 RE UpScreen;..BE
028AC0: 47 49 4E 0D 0A 09 4C 69 6E 65 4D 6F 76 65 28 31 GIN...LineMove(1
028AD0: 2D 49 4E 54 45 47 45 52 28 4C 69 6E 65 73 50 65 -INTEGER(LinesPe
028AE0: 72 57 69 6E 64 6F 77 29 29 3B 0D 0A 09 52 65 44 rWindow));...ReD
028AF0: 69 73 70 6C 61 79 57 69 6E 64 6F 77 3B 0D 0A 09 isplayWindow;...
028B00: 45 4E 44 20 55 70 53 63 72 65 65 6E 3B 0D 0A 50 END UpScreen;..P
028B10: 52 4F 43 45 44 55 52 45 20 44 6F 77 6E 53 63 72 ROCEDURE DownScr
028B20: 65 65 6E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 4C 69 een;..BEGIN...Li
028B30: 6E 65 4D 6F 76 65 28 4C 69 6E 65 73 50 65 72 57 neMove(LinesPerW
028B40: 69 6E 64 6F 77 2D 31 29 3B 0D 0A 09 52 65 44 69 indow-1);...ReDi
028B50: 73 70 6C 61 79 57 69 6E 64 6F 77 3B 0D 0A 09 45 splayWindow;...E
028B60: 4E 44 20 44 6F 77 6E 53 63 72 65 65 6E 3B 0D 0A ND DownScreen;..
028B70: 50 52 4F 43 45 44 55 52 45 20 54 6F 70 3B 0D 0A PROCEDURE Top;..
028B80: 42 45 47 49 4E 0D 0A 09 4C 69 6E 65 50 6F 73 3A BEGIN...LinePos:
028B90: 3D 30 3B 0D 0A 09 4C 69 6E 65 4D 6F 76 65 28 2D =0;...LineMove(-
028BA0: 31 36 37 33 36 29 3B 0D 0A 09 52 65 44 69 73 70 16736);...ReDisp
028BB0: 6C 61 79 57 69 6E 64 6F 77 3B 0D 0A 09 45 4E 44 layWindow;...END
028BC0: 20 54 6F 70 3B 0D 0A 50 52 4F 43 45 44 55 52 45 Top;..PROCEDURE
028BD0: 20 42 6F 74 74 6F 6D 3B 0D 0A 42 45 47 49 4E 0D Bottom;..BEGIN.
028BE0: 0A 09 4C 69 6E 65 50 6F 73 3A 3D 39 39 39 3B 0D ..LinePos:=999;.
028BF0: 0A 09 4C 69 6E 65 4D 6F 76 65 28 31 36 37 33 36 ..LineMove(16736
028C00: 09 09 09 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 20 ...END;....END;
028C10: 0D 0A 09 45 4E 44 20 44 6F 77 6E 3B 0D 0A 0D 0A ...END Down;....
028C20: 50 52 4F 43 45 44 55 52 45 20 52 65 64 6F 4C 69 PROCEDURE RedoLi
028C30: 6E 65 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 ne;..BEGIN...Got
028C40: 6F 78 79 28 30 2C 54 68 69 73 79 29 3B 0D 0A 09 oxy(0,Thisy);...
028C50: 53 65 74 4C 69 6E 65 50 6F 73 28 30 29 3B 0D 0A SetLinePos(0);..
028C60: 09 57 72 69 74 65 4C 69 6E 65 3B 0D 0A 09 43 68 .WriteLine;...Ch
028C70: 61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E 44 20 52 angePos;...END R
028C80: 65 64 6F 4C 69 6E 65 3B 0D 0A 0D 0A 50 52 4F 43 edoLine;....PROC
028C90: 45 44 55 52 45 20 49 6E 73 4F 6E 65 43 68 61 72 EDURE InsOneChar
028CA0: 28 63 68 3A 43 48 41 52 29 3B 0D 0A 56 41 52 09 (ch:CHAR);..VAR.
028CB0: 43 48 31 3A 41 52 52 41 59 5B 30 2E 2E 30 5D 20 CH1:ARRAY[0..0]
028CC0: 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E 0D OF CHAR;..BEGIN.
028CD0: 0A 09 52 65 44 72 61 77 6E 3A 3D 46 41 4C 53 45 ..ReDrawn:=FALSE
028CE0: 3B 0D 0A 09 4D 61 72 6B 41 73 55 70 64 61 74 65 ;...MarkAsUpdate
028CF0: 64 3B 0D 0A 09 43 48 31 5B 30 5D 3A 3D 63 68 3B d;...CH1[0]:=ch;
028D00: 0D 0A 09 49 6E 73 43 68 61 72 73 28 43 75 72 46 ...InsChars(CurF
028D10: 69 6C 65 50 74 72 5E 2C 43 48 31 2C 31 29 3B 0D ilePtr^,CH1,1);.
028D20: 0A 09 49 4E 43 28 4C 69 6E 65 50 6F 73 29 3B 0D ..INC(LinePos);.
028D30: 0A 09 49 4E 43 28 4C 69 6E 65 4C 65 6E 29 3B 0D ..INC(LineLen);.
028D40: 0A 09 49 46 20 63 68 3D 43 52 20 54 48 45 4E 0D ..IF ch=CR THEN.
028D50: 0A 09 09 43 48 31 5B 30 5D 3A 3D 4C 46 3B 0D 0A ...CH1[0]:=LF;..
028D60: 09 09 49 6E 73 43 68 61 72 73 28 43 75 72 46 69 ..InsChars(CurFi
028D70: 6C 65 50 74 72 5E 2C 43 48 31 2C 31 29 3B 0D 0A lePtr^,CH1,1);..
028D80: 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A 09 09 43 ..ResetPos;....C
028D90: 6C 65 61 72 52 65 73 74 4F 66 4C 69 6E 65 3B 0D learRestOfLine;.
028DA0: 0A 09 09 49 46 20 54 68 69 73 79 3E 3D 45 6E 64 ...IF Thisy>=End
028DB0: 6F 66 57 69 6E 64 6F 77 20 54 48 45 4E 0D 0A 09 ofWindow THEN...
028DC0: 09 09 53 63 72 6F 6C 6C 54 65 78 74 28 30 29 3B ..ScrollText(0);
028DD0: 0D 0A 09 09 09 44 45 43 28 54 68 69 73 79 29 3B .....DEC(Thisy);
028DE0: 0D 0A 09 09 45 4C 53 45 20 20 20 20 53 63 72 6F ....ELSE Scro
028DF0: 6C 6C 57 69 6E 64 6F 77 28 54 68 69 73 79 2B 31 llWindow(Thisy+1
028E00: 29 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 57 69 );...ReDisplayWi
028E10: 6E 64 6F 77 3B 0D 0A 09 45 4E 44 20 42 6F 74 74 ndow;...END Bott
028E20: 6F 6D 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 46 om;..PROCEDURE F
028E30: 61 72 4C 65 66 74 3B 0D 0A 42 45 47 49 4E 0D 0A arLeft;..BEGIN..
028E40: 09 49 46 20 43 75 72 72 65 6E 74 4C 65 66 74 4D .IF CurrentLeftM
028E50: 61 72 67 69 6E 3E 30 20 54 48 45 4E 20 0D 0A 09 argin>0 THEN ...
028E60: 09 43 68 61 6E 67 65 4D 61 72 67 69 6E 28 2D 49 .ChangeMargin(-I
028E70: 4E 54 45 47 45 52 28 43 75 72 72 65 6E 74 4C 65 NTEGER(CurrentLe
028E80: 66 74 4D 61 72 67 69 6E 29 29 0D 0A 09 09 45 4E ftMargin))....EN
028E90: 44 3B 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 D;...SetLinePos(
028EA0: 30 29 3B 0D 0A 09 4C 69 6E 65 50 6F 73 3A 3D 30 0);...LinePos:=0
028EB0: 3B 0D 0A 09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A ;...ChangePos;..
028EC0: 09 45 4E 44 20 46 61 72 4C 65 66 74 3B 0D 0A 50 .END FarLeft;..P
028ED0: 52 4F 43 45 44 55 52 45 20 46 61 72 52 69 67 68 ROCEDURE FarRigh
028EE0: 74 3B 0D 0A 42 45 47 49 4E 0D 0A 09 53 65 74 4C t;..BEGIN...SetL
028EF0: 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 4C 69 6E inePos(0);...Lin
028F00: 65 50 6F 73 3A 3D 4C 69 6E 65 4C 65 6E 3B 0D 0A ePos:=LineLen;..
028F10: 09 43 68 61 6E 67 65 50 6F 73 3B 0D 0A 09 45 4E .ChangePos;...EN
028F20: 44 20 46 61 72 52 69 67 68 74 3B 0D 0A 50 52 4F D FarRight;..PRO
028F30: 43 45 44 55 52 45 20 43 68 61 6E 67 65 57 69 6E CEDURE ChangeWin
028F40: 64 6F 77 28 4E 6F 3A 49 4E 54 45 47 45 52 29 3B dow(No:INTEGER);
028F50: 0D 0A 56 41 52 09 62 3A 42 4F 4F 4C 45 41 4E 3B ..VAR.b:BOOLEAN;
028F60: 0D 0A 09 69 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A ...i:CARDINAL;..
028F70: 42 45 47 49 4E 0D 0A 09 49 46 20 43 75 72 72 65 BEGIN...IF Curre
028F80: 6E 74 57 69 6E 64 6F 77 3C 3E 30 20 54 48 45 4E ntWindow<>0 THEN
028F90: 0D 0A 09 09 63 75 72 78 5B 43 75 72 72 65 6E 74 ....curx[Current
028FA0: 57 69 6E 64 6F 77 5D 3A 3D 54 68 69 73 78 3B 0D Window]:=Thisx;.
028FB0: 0A 09 09 63 75 72 79 5B 43 75 72 72 65 6E 74 57 ...cury[CurrentW
028FC0: 69 6E 64 6F 77 5D 3A 3D 54 68 69 73 79 3B 0D 0A indow]:=Thisy;..
028FD0: 09 09 62 3A 3D 4C 61 62 65 6C 4F 70 28 43 75 72 ..b:=LabelOp(Cur
028FE0: 46 69 6C 65 50 74 72 5E 2C 54 52 55 45 2C 43 48 FilePtr^,TRUE,CH
028FF0: 52 28 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 29 R(CurrentWindow)
029000: 2C 45 6E 64 6F 66 57 69 6E 64 6F 77 2C 2D 31 29 ,EndofWindow,-1)
029010: 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 4E ;.....END;....IN
029020: 43 28 54 68 69 73 79 29 3B 0D 0A 09 09 52 65 73 C(Thisy);....Res
029030: 65 74 50 6F 73 3B 0D 0A 09 09 4C 69 6E 65 50 6F etPos;....LinePo
029040: 73 3A 3D 30 3B 0D 0A 09 09 52 65 64 6F 4C 69 6E s:=0;....RedoLin
029050: 65 3B 0D 0A 09 45 4C 53 49 46 20 63 68 3D 54 41 e;...ELSIF ch=TA
029060: 42 20 54 48 45 4E 20 52 65 64 6F 4C 69 6E 65 09 B THEN RedoLine.
029070: 0D 0A 09 45 4C 53 45 0D 0A 09 09 49 46 20 54 68 ...ELSE....IF Th
029080: 69 73 78 3E 3D 28 53 63 72 65 65 6E 57 69 64 74 isx>=(ScreenWidt
029090: 68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 43 68 h-1) THEN.....Ch
0290A0: 61 6E 67 65 4D 61 72 67 69 6E 28 33 32 29 3B 0D angeMargin(32);.
0290B0: 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 20 4E ....END;....IF N
0290C0: 4F 54 20 52 65 44 72 61 77 6E 20 54 48 45 4E 0D OT ReDrawn THEN.
0290D0: 0A 09 09 09 49 46 20 4C 69 6E 65 50 6F 73 3C 4C ....IF LinePos<L
0290E0: 69 6E 65 4C 65 6E 20 54 48 45 4E 0D 0A 09 09 09 ineLen THEN.....
0290F0: 09 62 3A 3D 42 61 63 6B 4F 6E 65 43 68 61 72 28 .b:=BackOneChar(
029100: 43 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 CurFilePtr^);...
029110: 09 09 09 57 72 69 74 65 50 61 72 74 4C 69 6E 65 ...WritePartLine
029120: 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 (CurrentLeftMarg
029130: 69 6E 2B 54 68 69 73 78 2B 31 29 3B 0D 0A 09 09 in+Thisx+1);....
029140: 09 09 49 4E 43 28 54 68 69 73 78 29 3B 0D 0A 09 ..INC(Thisx);...
029150: 09 09 09 62 3A 3D 46 6F 72 77 61 72 64 4F 6E 65 ...b:=ForwardOne
029160: 43 68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E Char(CurFilePtr^
029170: 29 3B 09 09 09 09 0D 0A 09 09 09 45 4C 53 45 0D );.........ELSE.
029180: 0A 09 09 09 09 57 72 69 74 65 28 63 68 29 3B 0D .....Write(ch);.
029190: 0A 09 09 09 09 49 4E 43 28 54 68 69 73 78 29 3B .....INC(Thisx);
0291A0: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 ......END;.....E
0291B0: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 65 ND;....END;...Re
0291C0: 73 65 74 50 6F 73 3B 0D 0A 09 45 4E 44 20 49 6E setPos;...END In
0291D0: 73 4F 6E 65 43 68 61 72 3B 0D 0A 50 52 4F 43 45 sOneChar;..PROCE
0291E0: 44 55 52 45 20 44 65 6C 4F 6E 65 43 68 61 72 3B DURE DelOneChar;
0291F0: 0D 0A 42 45 47 49 4E 0D 0A 09 4D 61 72 6B 41 73 ..BEGIN...MarkAs
029200: 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 43 75 72 );....END;...Cur
029210: 72 65 6E 74 57 69 6E 64 6F 77 3A 3D 4E 6F 3B 0D rentWindow:=No;.
029220: 0A 09 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 57 .....IF CurrentW
029230: 69 6E 64 6F 77 3E 57 69 6E 64 6F 77 73 20 54 48 indow>Windows TH
029240: 45 4E 20 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 EN CurrentWindow
029250: 3A 3D 57 69 6E 64 6F 77 73 20 45 4E 44 3B 0D 0A :=Windows END;..
029260: 09 49 46 20 43 75 72 72 65 6E 74 57 69 6E 64 6F .IF CurrentWindo
029270: 77 3C 3E 30 20 54 48 45 4E 0D 0A 09 09 28 2A 73 w<>0 THEN....(*s
029280: 65 74 20 75 70 20 61 20 70 6F 69 6E 74 65 72 20 et up a pointer
029290: 74 6F 20 74 68 65 20 63 75 72 72 65 6E 74 20 66 to the current f
0292A0: 69 6C 65 20 74 6F 20 73 61 76 65 20 69 6E 64 65 ile to save inde
0292B0: 78 20 63 61 6C 63 75 6C 61 74 69 6F 6E 0D 0A 09 x calculation...
0292C0: 09 20 20 65 76 65 72 79 20 74 69 6D 65 20 74 68 . every time th
0292D0: 65 20 66 69 6C 65 20 69 73 20 72 65 66 65 72 65 e file is refere
0292E0: 6E 63 65 64 2A 29 0D 0A 09 09 43 75 72 72 65 6E nced*)....Curren
0292F0: 74 46 69 6C 65 3A 3D 57 69 6E 64 6F 77 46 69 6C tFile:=WindowFil
029300: 65 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D e[CurrentWindow]
029310: 3B 0D 0A 09 09 43 75 72 46 69 6C 65 50 74 72 3A ;....CurFilePtr:
029320: 3D 50 45 64 69 74 46 69 6C 65 28 41 44 52 28 46 =PEditFile(ADR(F
029330: 69 6C 65 73 5B 43 75 72 72 65 6E 74 46 69 6C 65 iles[CurrentFile
029340: 5D 29 29 3B 0D 0A 09 09 62 3A 3D 4C 61 62 65 6C ]));....b:=Label
029350: 4F 70 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 46 Op(CurFilePtr^,F
029360: 41 4C 53 45 2C 43 48 52 28 43 75 72 72 65 6E 74 ALSE,CHR(Current
029370: 57 69 6E 64 6F 77 29 29 3B 0D 0A 09 09 54 68 69 Window));....Thi
029380: 73 78 3A 3D 63 75 72 78 5B 43 75 72 72 65 6E 74 sx:=curx[Current
029390: 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 54 68 69 73 Window];....This
0293A0: 79 3A 3D 63 75 72 79 5B 43 75 72 72 65 6E 74 57 y:=cury[CurrentW
0293B0: 69 6E 64 6F 77 5D 3B 0D 0A 09 09 43 75 72 72 65 indow];....Curre
0293C0: 6E 74 4C 65 66 74 4D 61 72 67 69 6E 3A 3D 4C 65 ntLeftMargin:=Le
0293D0: 66 74 4D 61 72 67 69 6E 5B 43 75 72 72 65 6E 74 ftMargin[Current
0293E0: 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 53 65 74 4C Window];....SetL
0293F0: 69 6E 65 50 6F 73 28 30 29 3B 0D 0A 09 09 43 68 inePos(0);....Ch
029400: 55 70 64 61 74 65 64 3B 0D 0A 09 63 68 3A 3D 47 Updated;...ch:=G
029410: 65 74 43 75 72 72 65 6E 74 43 68 61 72 28 43 75 etCurrentChar(Cu
029420: 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 49 46 rFilePtr^);...IF
029430: 20 4C 69 6E 65 50 6F 73 3D 4C 69 6E 65 4C 65 6E LinePos=LineLen
029440: 20 54 48 45 4E 20 69 3A 3D 32 0D 0A 09 45 4C 53 THEN i:=2...ELS
029450: 45 20 69 3A 3D 31 20 45 4E 44 3B 0D 0A 09 44 65 E i:=1 END;...De
029460: 6C 43 68 61 72 73 28 43 75 72 46 69 6C 65 50 74 lChars(CurFilePt
029470: 72 5E 2C 69 29 3B 0D 0A 09 49 46 20 69 3D 32 20 r^,i);...IF i=2
029480: 54 48 45 4E 0D 0A 09 09 49 46 20 54 68 69 73 79 THEN....IF Thisy
029490: 3C 45 6E 64 6F 66 57 69 6E 64 6F 77 20 54 48 45 <EndofWindow THE
0294A0: 4E 20 0D 0A 09 09 09 49 4E 43 28 54 68 69 73 79 N .....INC(Thisy
0294B0: 29 3B 0D 0A 09 09 09 69 3A 3D 4C 69 6E 65 50 6F );.....i:=LinePo
0294C0: 73 3B 0D 0A 09 09 09 52 65 6D 6F 76 65 4C 69 6E s;.....RemoveLin
0294D0: 65 3B 0D 0A 09 09 09 4C 69 6E 65 50 6F 73 3A 3D e;.....LinePos:=
0294E0: 69 3B 0D 0A 09 09 09 44 45 43 28 54 68 69 73 79 i;.....DEC(Thisy
0294F0: 29 3B 0D 0A 09 09 09 52 65 64 6F 4C 69 6E 65 3B );.....RedoLine;
029500: 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 45 4C 53 45 .....END;...ELSE
029510: 09 0D 0A 09 09 44 45 43 28 4C 69 6E 65 4C 65 6E .....DEC(LineLen
029520: 29 3B 0D 0A 09 09 57 72 69 74 65 50 61 72 74 4C );....WritePartL
029530: 69 6E 65 28 43 75 72 72 65 6E 74 4C 65 66 74 4D ine(CurrentLeftM
029540: 61 72 67 69 6E 2B 54 68 69 73 78 2B 31 29 3B 0D argin+Thisx+1);.
029550: 0A 09 09 45 4E 44 3B 0D 0A 28 2A 09 45 4C 53 49 ...END;..(*.ELSI
029560: 46 20 63 68 3D 54 41 42 20 54 48 45 4E 0D 0A 09 F ch=TAB THEN...
029570: 09 52 65 64 6F 4C 69 6E 65 0D 0A 09 45 4C 53 45 .RedoLine...ELSE
029580: 0D 0A 09 09 4C 69 6E 65 4C 65 6E 3A 3D 4C 69 6E ....LineLen:=Lin
029590: 65 4C 65 6E 2D 31 3B 0D 0A 09 09 44 6F 53 63 72 eLen-1;....DoScr
0295A0: 65 65 6E 43 68 61 6E 67 65 28 44 65 6C 43 68 61 eenChange(DelCha
0295B0: 72 29 3B 0D 0A 09 09 45 4E 44 3B 2A 29 0D 0A 09 r);....END;*)...
0295C0: 52 65 73 65 74 50 6F 73 3B 0D 0A 09 45 4E 44 20 ResetPos;...END
0295D0: 44 65 6C 4F 6E 65 43 68 61 72 3B 0D 0A 50 52 4F DelOneChar;..PRO
0295E0: 43 45 44 55 52 45 20 4F 76 65 72 57 72 69 74 65 CEDURE OverWrite
0295F0: 28 63 68 3A 43 48 41 52 29 3B 0D 0A 56 41 52 09 (ch:CHAR);..VAR.
029600: 61 6E 67 65 50 6F 73 3B 0D 0A 09 09 69 3A 3D 28 angePos;....i:=(
029610: 53 63 72 65 65 6E 44 65 70 74 68 2D 57 69 6E 64 ScreenDepth-Wind
029620: 6F 77 73 29 20 44 49 56 20 57 69 6E 64 6F 77 73 ows) DIV Windows
029630: 3B 0D 0A 09 09 53 74 61 72 74 6F 66 57 69 6E 64 ;....StartofWind
029640: 6F 77 3A 3D 28 69 2B 31 29 2A 28 43 75 72 72 65 ow:=(i+1)*(Curre
029650: 6E 74 57 69 6E 64 6F 77 2D 31 29 3B 0D 0A 09 45 ntWindow-1);...E
029660: 4C 53 45 20 0D 0A 09 09 53 74 61 72 74 6F 66 57 LSE ....StartofW
029670: 69 6E 64 6F 77 3A 3D 30 3B 0D 0A 09 09 69 3A 3D indow:=0;....i:=
029680: 30 20 0D 0A 09 09 45 4E 44 3B 0D 0A 09 49 46 20 0 ....END;...IF
029690: 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 3C 57 69 CurrentWindow<Wi
0296A0: 6E 64 6F 77 73 20 54 48 45 4E 0D 0A 09 09 45 6E ndows THEN....En
0296B0: 64 6F 66 57 69 6E 64 6F 77 3A 3D 53 74 61 72 74 dofWindow:=Start
0296C0: 6F 66 57 69 6E 64 6F 77 2B 69 2D 31 3B 0D 0A 09 ofWindow+i-1;...
0296D0: 45 4C 53 45 0D 0A 09 09 45 6E 64 6F 66 57 69 6E ELSE....EndofWin
0296E0: 64 6F 77 3A 3D 53 63 72 65 65 6E 44 65 70 74 68 dow:=ScreenDepth
0296F0: 2D 32 0D 0A 09 09 45 4E 44 3B 0D 0A 0D 0A 09 45 -2....END;.....E
029700: 4E 44 20 43 68 61 6E 67 65 57 69 6E 64 6F 77 3B ND ChangeWindow;
029710: 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 73 65 ..PROCEDURE Rese
029720: 74 53 63 72 65 65 6E 50 6F 73 3B 0D 0A 42 45 47 tScreenPos;..BEG
029730: 49 4E 0D 0A 09 49 46 20 43 75 72 72 65 6E 74 57 IN...IF CurrentW
029740: 69 6E 64 6F 77 3C 3E 30 20 54 48 45 4E 0D 0A 09 indow<>0 THEN...
029750: 09 54 68 69 73 78 3A 3D 63 75 72 78 5B 43 75 72 .Thisx:=curx[Cur
029760: 72 65 6E 74 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 rentWindow];....
029770: 54 68 69 73 79 3A 3D 63 75 72 79 5B 43 75 72 72 Thisy:=cury[Curr
029780: 65 6E 74 57 69 6E 64 6F 77 5D 3B 0D 0A 09 09 52 entWindow];....R
029790: 65 73 65 74 50 6F 73 3B 0D 0A 09 09 45 4E 44 3B esetPos;....END;
0297A0: 0D 0A 09 45 4E 44 20 52 65 73 65 74 53 63 72 65 ...END ResetScre
0297B0: 65 6E 50 6F 73 3B 0D 0A 50 52 4F 43 45 44 55 52 enPos;..PROCEDUR
0297C0: 45 20 4D 6F 76 65 57 69 6E 64 6F 77 28 66 72 6F E MoveWindow(fro
0297D0: 6D 2C 74 6F 3A 43 41 52 44 49 4E 41 4C 29 3B 0D m,to:CARDINAL);.
0297E0: 0A 56 41 52 09 62 3A 42 4F 4F 4C 45 41 4E 3B 0D .VAR.b:BOOLEAN;.
0297F0: 0A 42 45 47 49 4E 0D 0A 09 63 75 72 78 5B 74 6F .BEGIN...curx[to
029800: 43 48 31 3A 41 52 52 41 59 5B 30 2E 2E 30 5D 20 CH1:ARRAY[0..0]
029810: 4F 46 20 43 48 41 52 3B 0D 0A 42 45 47 49 4E 0D OF CHAR;..BEGIN.
029820: 0A 09 43 48 31 5B 30 5D 3A 3D 47 65 74 43 75 72 ..CH1[0]:=GetCur
029830: 72 65 6E 74 43 68 61 72 28 43 75 72 46 69 6C 65 rentChar(CurFile
029840: 50 74 72 5E 29 3B 0D 0A 09 49 46 20 28 43 48 31 Ptr^);...IF (CH1
029850: 5B 30 5D 3C 3E 43 52 29 20 41 4E 44 20 28 63 68 [0]<>CR) AND (ch
029860: 3C 3E 43 52 29 20 41 4E 44 20 28 43 48 31 5B 30 <>CR) AND (CH1[0
029870: 5D 3C 3E 31 61 78 29 20 54 48 45 4E 0D 0A 09 09 ]<>1ax) THEN....
029880: 49 46 20 28 43 48 31 5B 30 5D 3C 3E 54 41 42 29 IF (CH1[0]<>TAB)
029890: 20 41 4E 44 20 28 63 68 3C 3E 54 41 42 29 20 54 AND (ch<>TAB) T
0298A0: 48 45 4E 0D 0A 09 09 09 44 65 6C 43 68 61 72 73 HEN.....DelChars
0298B0: 28 43 75 72 46 69 6C 65 50 74 72 5E 2C 31 29 3B (CurFilePtr^,1);
0298C0: 0D 0A 09 09 09 43 48 31 5B 30 5D 3A 3D 63 68 3B .....CH1[0]:=ch;
0298D0: 0D 0A 09 09 09 49 6E 73 43 68 61 72 73 28 43 75 .....InsChars(Cu
0298E0: 72 46 69 6C 65 50 74 72 5E 2C 43 48 31 2C 31 29 rFilePtr^,CH1,1)
0298F0: 3B 0D 0A 09 09 09 62 3A 3D 42 61 63 6B 4F 6E 65 ;.....b:=BackOne
029900: 43 68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E Char(CurFilePtr^
029910: 29 3B 0D 0A 09 09 09 57 72 69 74 65 28 63 68 29 );.....Write(ch)
029920: 3B 0D 0A 09 09 09 52 65 73 65 74 50 6F 73 3B 0D ;.....ResetPos;.
029930: 0A 09 09 09 52 69 67 68 74 3B 0D 0A 09 09 09 4D ....Right;.....M
029940: 61 72 6B 41 73 55 70 64 61 74 65 64 3B 0D 0A 09 arkAsUpdated;...
029950: 09 45 4C 53 45 0D 0A 09 09 09 44 65 6C 4F 6E 65 .ELSE.....DelOne
029960: 43 68 61 72 3B 0D 0A 09 09 09 49 6E 73 4F 6E 65 Char;.....InsOne
029970: 43 68 61 72 28 63 68 29 3B 0D 0A 09 09 09 45 4E Char(ch);.....EN
029980: 44 3B 0D 0A 09 45 4C 53 45 0D 0A 09 09 49 6E 73 D;...ELSE....Ins
029990: 4F 6E 65 43 68 61 72 28 63 68 29 3B 0D 0A 09 09 OneChar(ch);....
0299A0: 45 4E 44 3B 0D 0A 09 45 4E 44 20 4F 76 65 72 57 END;...END OverW
0299B0: 72 69 74 65 3B 0D 0A 50 52 4F 43 45 44 55 52 45 rite;..PROCEDURE
0299C0: 20 55 70 3B 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A Up;.....BEGIN..
0299D0: 09 49 46 20 54 68 69 73 79 3C 3D 53 74 61 72 74 .IF Thisy<=Start
0299E0: 6F 66 57 69 6E 64 6F 77 20 54 48 45 4E 0D 0A 09 ofWindow THEN...
0299F0: 09 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F 77 .ReDisplayWindow
029A00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
029A10: 23 00 01 00 02 09 52 E5 23 00 41 02 00 00 00 02 #.....R.#.A.....
029A20: 23 00 46 02 00 00 00 02 23 00 42 02 00 00 00 02 #.F.....#.B.....
029A30: 23 00 47 02 00 00 00 02 23 00 43 02 00 00 00 02 #.G.....#.C.....
029A40: 23 00 48 02 00 00 00 02 23 00 44 02 00 00 00 02 #.H.....#.D.....
029A50: 23 00 49 02 00 00 00 02 23 00 45 02 00 00 00 02 #.I.....#.E.....
029A60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029A70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029A80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029A90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029AF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
029B00: 5D 3A 3D 63 75 72 78 5B 66 72 6F 6D 5D 3B 0D 0A ]:=curx[from];..
029B10: 09 63 75 72 79 5B 74 6F 5D 3A 3D 63 75 72 79 5B .cury[to]:=cury[
029B20: 66 72 6F 6D 5D 3B 0D 0A 09 4C 65 66 74 4D 61 72 from];...LeftMar
029B30: 67 69 6E 5B 74 6F 5D 3A 3D 4C 65 66 74 4D 61 72 gin[to]:=LeftMar
029B40: 67 69 6E 5B 66 72 6F 6D 5D 3B 0D 0A 09 57 69 6E gin[from];...Win
029B50: 64 6F 77 46 69 6C 65 5B 74 6F 5D 3A 3D 57 69 6E dowFile[to]:=Win
029B60: 64 6F 77 46 69 6C 65 5B 66 72 6F 6D 5D 3B 0D 0A dowFile[from];..
029B70: 09 62 3A 3D 4C 61 62 65 6C 4F 70 28 46 69 6C 65 .b:=LabelOp(File
029B80: 73 5B 57 69 6E 64 6F 77 46 69 6C 65 5B 74 6F 5D s[WindowFile[to]
029B90: 5D 2C 54 52 55 45 2C 43 48 52 28 74 6F 29 29 3B ],TRUE,CHR(to));
029BA0: 0D 0A 09 45 4E 44 20 4D 6F 76 65 57 69 6E 64 6F ...END MoveWindo
029BB0: 77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 6C w;..PROCEDURE El
029BC0: 69 64 65 57 69 6E 64 6F 77 28 57 69 6E 64 6F 77 ideWindow(Window
029BD0: 4E 6F 3A 49 4E 54 45 47 45 52 29 3B 0D 0A 42 45 No:INTEGER);..BE
029BE0: 47 49 4E 0D 0A 09 46 4F 52 20 69 3A 3D 57 69 6E GIN...FOR i:=Win
029BF0: 64 6F 77 4E 6F 2B 31 20 54 4F 20 49 4E 54 45 47 dowNo+1 TO INTEG
029C00: 45 52 28 57 69 6E 64 6F 77 73 29 20 44 4F 0D 0A ER(Windows) DO..
029C10: 09 09 4D 6F 76 65 57 69 6E 64 6F 77 28 69 2C 69 ..MoveWindow(i,i
029C20: 2D 31 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 44 -1);....END;...D
029C30: 45 43 28 57 69 6E 64 6F 77 73 29 3B 0D 0A 09 43 EC(Windows);...C
029C40: 75 72 72 65 6E 74 57 69 6E 64 6F 77 3A 3D 30 3B urrentWindow:=0;
029C50: 0D 0A 09 45 4E 44 20 45 6C 69 64 65 57 69 6E 64 ...END ElideWind
029C60: 6F 77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 4D ow;..PROCEDURE M
029C70: 61 6B 65 57 69 6E 64 6F 77 3B 0D 0A 42 45 47 49 akeWindow;..BEGI
029C80: 4E 0D 0A 09 49 4E 43 28 57 69 6E 64 6F 77 73 29 N...INC(Windows)
029C90: 3B 0D 0A 09 4D 6F 76 65 57 69 6E 64 6F 77 28 43 ;...MoveWindow(C
029CA0: 75 72 72 65 6E 74 57 69 6E 64 6F 77 2C 57 69 6E urrentWindow,Win
029CB0: 64 6F 77 73 29 3B 0D 0A 09 45 4E 44 20 4D 61 6B dows);...END Mak
029CC0: 65 57 69 6E 64 6F 77 3B 0D 0A 50 52 4F 43 45 44 eWindow;..PROCED
029CD0: 55 52 45 20 53 65 61 72 63 68 28 52 65 70 6C 61 URE Search(Repla
029CE0: 63 65 3A 41 52 52 41 59 20 4F 46 20 43 48 41 52 ce:ARRAY OF CHAR
029CF0: 3B 52 4C 65 6E 3A 49 4E 54 45 47 45 52 3B 4C 65 ;RLen:INTEGER;Le
029D00: 0A 09 47 6F 74 6F 78 79 28 30 2C 53 63 72 65 65 ..Gotoxy(0,Scree
029D10: 6E 44 65 70 74 68 2D 31 29 3B 0D 0A 09 57 72 69 nDepth-1);...Wri
029D20: 74 65 53 74 72 69 6E 67 28 73 31 29 3B 57 72 69 teString(s1);Wri
029D30: 74 65 53 74 72 69 6E 67 28 73 32 29 3B 0D 0A 09 teString(s2);...
029D40: 45 4E 44 20 45 72 72 6F 72 4D 65 73 73 61 67 65 END ErrorMessage
029D50: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 53 65 74 ;..PROCEDURE Set
029D60: 57 69 6E 64 6F 77 73 28 69 3A 49 4E 54 45 47 45 Windows(i:INTEGE
029D70: 52 29 3B 0D 0A 0D 0A 28 2A 09 73 65 74 20 6E 75 R);....(*.set nu
029D80: 6D 62 65 72 20 6F 66 20 65 64 69 74 20 77 69 6E mber of edit win
029D90: 64 6F 77 73 20 69 6E 20 75 73 65 20 2D 20 79 6F dows in use - yo
029DA0: 75 20 6D 75 73 74 20 72 65 66 72 65 73 68 20 74 u must refresh t
029DB0: 68 65 20 65 6E 74 69 72 65 0D 0A 09 73 63 72 65 he entire...scre
029DC0: 65 6E 20 77 69 74 68 20 63 61 6C 6C 73 20 74 6F en with calls to
029DD0: 20 44 69 73 70 6C 61 79 46 69 6C 65 20 61 66 74 DisplayFile aft
029DE0: 65 72 20 61 20 63 61 6C 6C 20 74 6F 20 74 68 69 er a call to thi
029DF0: 73 0D 0A 09 72 6F 75 74 69 6E 65 2A 29 0D 0A 56 s...routine*)..V
029E00: 41 52 09 6A 2C 6B 3A 43 41 52 44 49 4E 41 4C 3B AR.j,k:CARDINAL;
029E10: 0D 0A 09 0D 0A 42 45 47 49 4E 0D 0A 09 57 69 6E .....BEGIN...Win
029E20: 64 6F 77 73 3A 3D 69 3B 0D 0A 09 53 63 72 65 65 dows:=i;...Scree
029E30: 6E 43 6F 6E 74 72 6F 6C 28 43 6C 65 61 72 53 63 nControl(ClearSc
029E40: 72 65 65 6E 29 3B 0D 0A 09 49 46 20 57 69 6E 64 reen);...IF Wind
029E50: 6F 77 73 3E 31 20 54 48 45 4E 0D 0A 09 09 4C 69 ows>1 THEN....Li
029E60: 6E 65 73 50 65 72 57 69 6E 64 6F 77 3A 3D 28 53 nesPerWindow:=(S
029E70: 63 72 65 65 6E 44 65 70 74 68 2D 57 69 6E 64 6F creenDepth-Windo
029E80: 77 73 29 20 44 49 56 20 57 69 6E 64 6F 77 73 3B ws) DIV Windows;
029E90: 0D 0A 09 45 4C 53 45 09 4C 69 6E 65 73 50 65 72 ...ELSE.LinesPer
029EA0: 57 69 6E 64 6F 77 3A 3D 53 63 72 65 65 6E 44 65 Window:=ScreenDe
029EB0: 70 74 68 2D 31 20 45 4E 44 3B 0D 0A 09 46 4F 52 pth-1 END;...FOR
029EC0: 20 6A 3A 3D 32 20 54 4F 20 57 69 6E 64 6F 77 73 j:=2 TO Windows
029ED0: 20 44 4F 0D 0A 09 09 47 6F 74 6F 78 79 28 30 2C DO....Gotoxy(0,
029EE0: 28 4C 69 6E 65 73 50 65 72 57 69 6E 64 6F 77 2B (LinesPerWindow+
029EF0: 31 29 2A 28 6A 2D 31 29 2D 31 29 3B 0D 0A 09 09 1)*(j-1)-1);....
029F00: 6E 3A 43 41 52 44 49 4E 41 4C 29 3A 42 4F 4F 4C n:CARDINAL):BOOL
029F10: 45 41 4E 3B 0D 0A 0D 0A 28 2A 09 73 65 61 72 63 EAN;....(*.searc
029F20: 68 20 66 6F 72 20 73 74 72 69 6E 67 20 61 6E 64 h for string and
029F30: 20 72 65 70 6C 61 63 65 20 69 66 20 66 6F 75 6E replace if foun
029F40: 64 2A 29 0D 0A 56 41 52 09 62 3A 42 4F 4F 4C 45 d*)..VAR.b:BOOLE
029F50: 41 4E 3B 0D 0A 09 46 6F 75 6E 64 3A 42 4F 4F 4C AN;...Found:BOOL
029F60: 45 41 4E 3B 0D 0A 42 45 47 49 4E 0D 0A 09 62 3A EAN;..BEGIN...b:
029F70: 3D 4C 65 6E 3E 31 32 38 3B 0D 0A 09 49 46 20 62 =Len>128;...IF b
029F80: 20 54 48 45 4E 20 4C 65 6E 3A 3D 4C 65 6E 2D 31 THEN Len:=Len-1
029F90: 32 38 20 45 4E 44 3B 0D 0A 09 46 6F 75 6E 64 3A 28 END;...Found:
029FA0: 3D 46 69 6E 64 53 74 72 69 6E 67 28 43 75 72 46 =FindString(CurF
029FB0: 69 6C 65 50 74 72 5E 2C 62 29 3B 0D 0A 09 49 46 ilePtr^,b);...IF
029FC0: 20 46 6F 75 6E 64 20 41 4E 44 20 28 52 4C 65 6E Found AND (RLen
029FD0: 3E 3D 30 29 20 54 48 45 4E 0D 0A 09 09 4D 61 72 >=0) THEN....Mar
029FE0: 6B 41 73 55 70 64 61 74 65 64 3B 0D 0A 09 09 44 kAsUpdated;....D
029FF0: 65 6C 43 68 61 72 73 28 43 75 72 46 69 6C 65 50 elChars(CurFileP
02A000: 74 72 5E 2C 4C 65 6E 29 20 0D 0A 09 09 49 6E 73 tr^,Len) ....Ins
02A010: 43 68 61 72 73 28 43 75 72 46 69 6C 65 50 74 72 Chars(CurFilePtr
02A020: 5E 2C 52 65 70 6C 61 63 65 2C 52 4C 65 6E 29 3B ^,Replace,RLen);
02A030: 0D 0A 09 09 62 3A 3D 42 61 63 6B 4F 6E 65 43 68 ....b:=BackOneCh
02A040: 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E 29 3B ar(CurFilePtr^);
02A050: 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 65 44 69 73 ....END;...ReDis
02A060: 70 6C 61 79 3B 0D 0A 09 52 45 54 55 52 4E 20 46 play;...RETURN F
02A070: 6F 75 6E 64 3B 0D 0A 09 45 4E 44 20 53 65 61 72 ound;...END Sear
02A080: 63 68 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 47 ch;..PROCEDURE G
02A090: 6F 54 6F 4C 61 62 65 6C 28 63 68 3A 43 48 41 52 oToLabel(ch:CHAR
02A0A0: 29 3B 0D 0A 42 45 47 49 4E 0D 0A 09 49 46 20 4C );..BEGIN...IF L
02A0B0: 61 62 65 6C 4F 70 28 43 75 72 46 69 6C 65 50 74 abelOp(CurFilePt
02A0C0: 72 5E 2C 46 41 4C 53 45 2C 63 68 29 20 54 48 45 r^,FALSE,ch) THE
02A0D0: 4E 0D 0A 09 09 52 65 44 69 73 70 6C 61 79 3B 0D N....ReDisplay;.
02A0E0: 0A 09 45 4C 53 45 0D 0A 09 09 45 72 72 6F 72 4D ..ELSE....ErrorM
02A0F0: 65 73 73 61 67 65 28 27 20 4C 61 62 65 6C 20 6E essage(' Label n
02A100: 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 53 74 ScreenControl(St
02A110: 61 72 74 47 72 61 70 68 29 3B 0D 0A 09 09 46 4F artGraph);....FO
02A120: 52 20 6B 3A 3D 31 20 54 4F 20 53 63 72 65 65 6E R k:=1 TO Screen
02A130: 57 69 64 74 68 20 44 4F 20 0D 0A 09 09 09 53 63 Width DO .....Sc
02A140: 72 65 65 6E 43 6F 6E 74 72 6F 6C 28 48 6F 72 69 reenControl(Hori
02A150: 7A 6F 6E 74 61 6C 29 3B 0D 0A 09 09 09 45 4E 44 zontal);.....END
02A160: 3B 0D 0A 09 09 53 63 72 65 65 6E 43 6F 6E 74 72 ;....ScreenContr
02A170: 6F 6C 28 45 6E 64 47 72 61 70 68 29 3B 0D 0A 09 ol(EndGraph);...
02A180: 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 53 65 74 57 .END;...END SetW
02A190: 69 6E 64 6F 77 73 3B 0D 0A 09 28 2A 70 75 74 20 indows;...(*put
02A1A0: 61 20 6C 69 6E 65 20 62 65 74 77 65 65 6E 20 74 a line between t
02A1B0: 68 65 20 77 69 6E 64 6F 77 73 2A 29 0D 0A 0D 0A he windows*)....
02A1C0: 56 41 52 09 63 68 3A 43 48 41 52 3B 0D 0A 09 70 VAR.ch:CHAR;...p
02A1D0: 6F 73 3A 50 6F 73 69 74 69 6F 6E 3B 0D 0A 09 63 os:Position;...c
02A1E0: 68 61 72 73 69 6E 2C 69 63 3A 49 4E 54 45 47 45 harsin,ic:INTEGE
02A1F0: 52 3B 0D 0A 09 6C 65 6E 2C 6D 6F 76 65 64 3A 49 R;...len,moved:I
02A200: 4E 54 45 47 45 52 3B 0D 0A 09 6C 69 6E 65 70 6F NTEGER;...linepo
02A210: 73 2C 4C 65 66 74 4D 61 72 67 3A 43 41 52 44 49 s,LeftMarg:CARDI
02A220: 4E 41 4C 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 NAL;..PROCEDURE
02A230: 53 65 74 4C 65 66 74 4D 61 72 67 28 66 3A 45 64 SetLeftMarg(f:Ed
02A240: 69 74 46 69 6C 65 3B 77 69 6E 64 6F 77 3A 49 4E itFile;window:IN
02A250: 54 45 47 45 52 3B 56 41 52 20 63 75 72 78 2C 63 TEGER;VAR curx,c
02A260: 75 72 79 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A ury:CARDINAL);..
02A270: 42 45 47 49 4E 0D 0A 09 52 65 74 72 6C 69 6E 65 BEGIN...Retrline
02A280: 28 66 2C 6C 65 6E 2C 63 68 61 72 73 69 6E 2C 70 (f,len,charsin,p
02A290: 6F 73 2C 6D 6F 76 65 64 2C 30 29 3B 0D 0A 09 6C os,moved,0);...l
02A2A0: 69 6E 65 70 6F 73 3A 3D 30 3B 0D 0A 09 46 4F 52 inepos:=0;...FOR
02A2B0: 20 69 63 3A 3D 30 20 54 4F 20 63 68 61 72 73 69 ic:=0 TO charsi
02A2C0: 6E 20 44 4F 0D 0A 09 09 52 65 61 64 4E 65 78 74 n DO....ReadNext
02A2D0: 43 68 61 72 28 70 6F 73 2C 63 68 29 3B 0D 0A 09 Char(pos,ch);...
02A2E0: 09 49 46 20 63 68 3D 30 39 78 20 54 48 45 4E 20 .IF ch=09x THEN
02A2F0: 6C 69 6E 65 70 6F 73 3A 3D 49 41 4E 44 28 6C 69 linepos:=IAND(li
02A300: 6F 74 20 64 65 66 69 6E 65 64 27 2C 27 20 27 29 ot defined',' ')
02A310: 3B 0D 0A 09 09 52 65 73 65 74 50 6F 73 3B 0D 0A ;....ResetPos;..
02A320: 09 09 45 4E 44 3B 0D 0A 09 45 4E 44 20 47 6F 54 ..END;...END GoT
02A330: 6F 4C 61 62 65 6C 3B 09 09 0D 0A 42 45 47 49 4E oLabel;....BEGIN
02A340: 0D 0A 09 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 ...CurrentWindow
02A350: 3A 3D 30 3B 0D 0A 09 43 75 72 72 65 6E 74 46 69 :=0;...CurrentFi
02A360: 6C 65 3A 3D 30 3B 0D 0A 09 43 75 72 46 69 6C 65 le:=0;...CurFile
02A370: 50 74 72 3A 3D 50 45 64 69 74 46 69 6C 65 28 41 Ptr:=PEditFile(A
02A380: 44 52 28 46 69 6C 65 73 5B 31 5D 29 29 3B 0D 0A DR(Files[1]));..
02A390: 09 45 4E 44 20 45 64 69 74 43 6F 6E 74 72 6F 6C .END EditControl
02A3A0: 2E 0D 0A 0D 0A 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
02A3B0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
02A3C0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
02A3D0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
02A3E0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
02A3F0: 1A 1A 1A 1A 1A 1A FF 0F 00 00 00 00 00 00 00 00 ................
02A400: 64 6F 77 5D 3A 3D 54 68 69 73 78 3B 0D 0A 09 63 dow]:=Thisx;...c
02A410: 75 72 79 5B 43 75 72 72 65 6E 74 57 69 6E 64 6F ury[CurrentWindo
02A420: 77 5D 3A 3D 54 68 69 73 79 3B 0D 0A 09 52 65 44 w]:=Thisy;...ReD
02A430: 72 61 77 6E 3A 3D 54 52 55 45 3B 0D 0A 09 45 4E rawn:=TRUE;...EN
02A440: 44 20 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F D ReDisplayWindo
02A450: 77 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 52 65 w;..PROCEDURE Re
02A460: 44 69 73 70 6C 61 79 3B 0D 0A 42 45 47 49 4E 0D Display;..BEGIN.
02A470: 0A 09 52 65 44 69 73 70 6C 61 79 57 69 6E 64 6F ..ReDisplayWindo
02A480: 77 3B 0D 0A 09 53 65 74 4C 69 6E 65 50 6F 73 28 w;...SetLinePos(
02A490: 30 29 3B 0D 0A 09 43 68 61 6E 67 65 50 6F 73 3B 0);...ChangePos;
02A4A0: 0D 0A 09 45 4E 44 20 52 65 44 69 73 70 6C 61 79 ...END ReDisplay
02A4B0: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 68 61 ;..PROCEDURE Cha
02A4C0: 6E 67 65 4D 61 72 67 69 6E 28 49 6E 63 3A 49 4E ngeMargin(Inc:IN
02A4D0: 54 45 47 45 52 29 3B 0D 0A 42 45 47 49 4E 0D 0A TEGER);..BEGIN..
02A4E0: 09 49 46 20 28 49 6E 63 3C 30 29 20 41 4E 44 20 .IF (Inc<0) AND
02A4F0: 20 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 (CurrentLeftMar
02A500: 6E 65 70 6F 73 2B 38 2C 30 66 66 66 38 68 29 0D nepos+8,0fff8h).
02A510: 0A 09 09 45 4C 53 45 20 49 4E 43 28 6C 69 6E 65 ...ELSE INC(line
02A520: 70 6F 73 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 pos) END;....END
02A530: 3B 0D 0A 09 4C 65 66 74 4D 61 72 67 3A 3D 30 3B ;...LeftMarg:=0;
02A540: 0D 0A 09 57 48 49 4C 45 20 6C 69 6E 65 70 6F 73 ...WHILE linepos
02A550: 3E 28 4C 65 66 74 4D 61 72 67 2B 53 63 72 65 65 >(LeftMarg+Scree
02A560: 6E 57 69 64 74 68 29 20 44 4F 0D 0A 09 09 4C 65 nWidth) DO....Le
02A570: 66 74 4D 61 72 67 3A 3D 4C 65 66 74 4D 61 72 67 ftMarg:=LeftMarg
02A580: 2B 33 32 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 4C +32;....END;...L
02A590: 65 66 74 4D 61 72 67 69 6E 5B 77 69 6E 64 6F 77 eftMargin[window
02A5A0: 5D 3A 3D 4C 65 66 74 4D 61 72 67 3B 0D 0A 09 45 ]:=LeftMarg;...E
02A5B0: 4E 44 20 53 65 74 4C 65 66 74 4D 61 72 67 3B 0D ND SetLeftMarg;.
02A5C0: 0A 50 52 4F 43 45 44 55 52 45 20 44 69 73 70 6C .PROCEDURE Displ
02A5D0: 61 79 46 69 6C 65 28 66 3A 45 64 69 74 46 69 6C ayFile(f:EditFil
02A5E0: 65 3B 77 69 6E 64 6F 77 3A 49 4E 54 45 47 45 52 e;window:INTEGER
02A5F0: 3B 56 41 52 20 63 75 72 78 2C 63 75 72 79 3A 43 ;VAR curx,cury:C
02A600: 41 52 44 49 4E 41 4C 29 3B 0D 0A 0D 0A 28 2A 09 ARDINAL);....(*.
02A610: 72 65 64 69 73 70 6C 61 79 20 61 73 20 6D 75 63 redisplay as muc
02A620: 68 20 74 65 78 74 20 61 73 20 77 69 6C 6C 20 66 h text as will f
02A630: 69 74 20 69 6E 20 74 68 65 20 77 69 6E 64 6F 77 it in the window
02A640: 0D 0A 09 66 6F 72 20 74 68 65 20 67 69 76 65 6E ...for the given
02A650: 20 66 69 6C 65 20 73 74 61 72 74 69 6E 67 20 61 file starting a
02A660: 74 20 74 68 65 20 63 75 72 72 65 6E 74 20 70 6F t the current po
02A670: 73 69 74 69 6F 6E 20 69 6E 20 74 68 65 20 66 69 sition in the fi
02A680: 6C 65 2A 29 0D 0A 56 41 52 09 69 2C 6A 2C 6B 2C le*)..VAR.i,j,k,
02A690: 6C 69 6E 65 70 6F 73 3A 43 41 52 44 49 4E 41 4C linepos:CARDINAL
02A6A0: 3B 0D 0A 09 6D 6F 76 65 64 6F 6E 65 3A 49 4E 54 ;...movedone:INT
02A6B0: 45 47 45 52 3B 09 0D 0A 09 73 74 61 72 74 6C 69 EGER;....startli
02A6C0: 6E 65 3A 49 4E 54 45 47 45 52 3B 20 28 2A 66 69 ne:INTEGER; (*fi
02A6D0: 72 73 74 20 6C 69 6E 65 20 6F 66 20 77 69 6E 64 rst line of wind
02A6E0: 6F 77 2A 29 0D 0A 42 45 47 49 4E 0D 0A 09 4C 65 ow*)..BEGIN...Le
02A6F0: 66 74 4D 61 72 67 3A 3D 4C 65 66 74 4D 61 72 67 ftMarg:=LeftMarg
02A700: 28 2A 09 54 68 69 73 20 69 73 20 74 68 65 20 64 (*.This is the d
02A710: 75 6D 62 20 73 63 72 65 65 6E 20 76 65 72 73 69 umb screen versi
02A720: 6F 6E 20 6F 66 20 45 64 69 74 44 69 73 70 6C 61 on of EditDispla
02A730: 79 0D 0A 0D 0A 09 49 74 20 75 73 65 73 20 77 72 y.....It uses wr
02A740: 69 74 65 73 20 6F 66 20 62 6C 61 6E 6B 73 20 74 ites of blanks t
02A750: 6F 20 63 6C 65 61 72 20 74 68 65 20 72 65 73 74 o clear the rest
02A760: 20 6F 66 20 65 61 63 68 20 6C 69 6E 65 20 69 6E of each line in
02A770: 73 74 65 61 64 20 6F 66 0D 0A 09 44 65 6C 65 74 stead of...Delet
02A780: 65 20 74 6F 20 45 4F 4C 20 2A 29 0D 0A 0D 0A 0D e to EOL *).....
02A790: 0A 49 4D 50 4C 45 4D 45 4E 54 41 54 49 4F 4E 20 .IMPLEMENTATION
02A7A0: 4D 4F 44 55 4C 45 20 45 64 69 74 44 69 73 70 6C MODULE EditDispl
02A7B0: 61 79 3B 0D 0A 28 2A 09 44 69 73 70 6C 61 79 20 ay;..(*.Display
02A7C0: 70 61 72 74 20 6F 66 20 61 20 66 69 6C 65 20 62 part of a file b
02A7D0: 65 69 6E 67 20 65 64 69 74 65 64 2A 29 0D 0A 46 eing edited*)..F
02A7E0: 52 4F 4D 09 53 43 52 45 45 4E 49 4F 20 49 4D 50 ROM.SCREENIO IMP
02A7F0: 4F 52 54 20 47 6F 74 6F 78 79 2C 53 63 72 65 65 ORT Gotoxy,Scree
02A800: 6E 43 6F 6E 74 72 6F 6C 2C 0D 0A 09 09 09 4D 61 nControl,.....Ma
02A810: 64 65 43 68 61 6E 67 65 2C 53 63 72 65 65 6E 57 deChange,ScreenW
02A820: 69 64 74 68 2C 53 63 72 65 65 6E 44 65 70 74 68 idth,ScreenDepth
02A830: 3B 0D 0A 46 52 4F 4D 20 09 54 65 72 6D 69 6E 61 ;..FROM .Termina
02A840: 6C 20 49 4D 50 4F 52 54 20 57 72 69 74 65 53 74 l IMPORT WriteSt
02A850: 72 69 6E 67 2C 57 72 69 74 65 2C 57 72 69 74 65 ring,Write,Write
02A860: 4C 6E 2C 52 65 61 64 2C 3B 0D 0A 46 52 4F 4D 20 Ln,Read,;..FROM
02A870: 09 4D 61 6B 65 45 64 69 74 73 20 49 4D 50 4F 52 .MakeEdits IMPOR
02A880: 54 20 50 6F 73 69 74 69 6F 6E 2C 52 65 74 72 6C T Position,Retrl
02A890: 69 6E 65 2C 52 65 61 64 4E 65 78 74 43 68 61 72 ine,ReadNextChar
02A8A0: 2C 45 72 72 6F 72 4C 69 73 74 2C 45 72 72 6F 72 ,ErrorList,Error
02A8B0: 43 6F 75 6E 74 2C 4C 61 62 65 6C 4F 70 3B 0D 0A Count,LabelOp;..
02A8C0: 46 52 4F 4D 09 45 64 69 74 43 6F 6E 74 20 49 4D FROM.EditCont IM
02A8D0: 50 4F 52 54 20 4C 65 66 74 4D 61 72 67 69 6E 2C PORT LeftMargin,
02A8E0: 46 69 6C 65 73 2C 43 75 72 72 65 6E 74 57 69 6E Files,CurrentWin
02A8F0: 64 6F 77 2C 43 75 72 72 65 6E 74 46 69 6C 65 2C dow,CurrentFile,
02A900: 69 6E 5B 77 69 6E 64 6F 77 5D 3B 0D 0A 09 73 74 in[window];...st
02A910: 61 72 74 6C 69 6E 65 3A 3D 28 49 4E 54 45 47 45 artline:=(INTEGE
02A920: 52 28 4C 69 6E 65 73 50 65 72 57 69 6E 64 6F 77 R(LinesPerWindow
02A930: 29 2B 31 29 2A 28 77 69 6E 64 6F 77 2D 31 29 3B )+1)*(window-1);
02A940: 0D 0A 09 47 6F 74 6F 78 79 28 30 2C 73 74 61 72 ...Gotoxy(0,star
02A950: 74 6C 69 6E 65 29 3B 0D 0A 0D 0A 09 28 2A 66 69 tline);.....(*fi
02A960: 72 73 74 20 6C 69 6E 65 20 6F 66 20 74 68 69 73 rst line of this
02A970: 20 77 69 6E 64 6F 77 2A 29 0D 0A 09 69 3A 3D 30 window*)...i:=0
02A980: 3B 09 28 2A 6C 69 6E 65 20 77 69 74 68 69 6E 20 ;.(*line within
02A990: 77 69 6E 64 6F 77 2A 29 0D 0A 09 6B 3A 3D 4C 69 window*)...k:=Li
02A9A0: 6E 65 73 50 65 72 57 69 6E 64 6F 77 20 44 49 56 nesPerWindow DIV
02A9B0: 20 32 3B 0D 0A 09 52 65 74 72 6C 69 6E 65 28 66 2;...Retrline(f
02A9C0: 2C 6C 65 6E 2C 63 68 61 72 73 69 6E 2C 70 6F 73 ,len,charsin,pos
02A9D0: 2C 6D 6F 76 65 64 2C 2D 6B 29 3B 0D 0A 09 0D 0A ,moved,-k);.....
02A9E0: 09 4C 4F 4F 50 0D 0A 0D 0A 09 09 28 2A 63 68 65 .LOOP......(*che
02A9F0: 63 6B 20 69 66 20 74 68 69 73 20 69 73 20 74 68 ck if this is th
02AA00: 65 20 6C 69 6E 65 20 77 65 20 77 65 72 65 20 70 e line we were p
02AA10: 6F 73 69 74 69 6F 6E 65 64 20 74 6F 20 75 70 6F ositioned to upo
02AA20: 6E 20 65 6E 74 72 79 2A 29 0D 0A 0D 0A 09 09 6C n entry*)......l
02AA30: 69 6E 65 70 6F 73 3A 3D 30 3B 0D 0A 09 09 6A 3A inepos:=0;....j:
02AA40: 3D 30 3B 0D 0A 09 09 4C 4F 4F 50 0D 0A 09 09 09 =0;....LOOP.....
02AA50: 49 46 20 28 6D 6F 76 65 64 3D 30 29 20 41 4E 44 IF (moved=0) AND
02AA60: 20 28 6A 3C 3D 43 41 52 44 49 4E 41 4C 28 63 68 (j<=CARDINAL(ch
02AA70: 61 72 73 69 6E 29 29 20 54 48 45 4E 0D 0A 09 09 arsin)) THEN....
02AA80: 09 09 63 75 72 78 3A 3D 6C 69 6E 65 70 6F 73 2D ..curx:=linepos-
02AA90: 4C 65 66 74 4D 61 72 67 3B 0D 0A 09 09 09 09 63 LeftMarg;......c
02AAA0: 75 72 79 3A 3D 69 2B 43 41 52 44 49 4E 41 4C 28 ury:=i+CARDINAL(
02AAB0: 73 74 61 72 74 6C 69 6E 65 29 0D 0A 09 09 09 09 startline)......
02AAC0: 45 4E 44 3B 0D 0A 09 09 09 49 4E 43 28 6A 29 3B END;.....INC(j);
02AAD0: 0D 0A 09 09 09 49 46 20 6A 3E 43 41 52 44 49 4E .....IF j>CARDIN
02AAE0: 41 4C 28 6C 65 6E 29 20 54 48 45 4E 20 45 58 49 AL(len) THEN EXI
02AAF0: 54 20 45 4E 44 3B 0D 0A 0D 0A 09 09 09 28 2A 63 T END;.......(*c
02AB00: 54 68 69 73 78 2C 54 68 69 73 79 2C 0D 0A 09 09 Thisx,Thisy,....
02AB10: 09 63 75 72 78 2C 63 75 72 79 2C 52 65 44 69 73 .curx,cury,ReDis
02AB20: 70 6C 61 79 3B 0D 0A 46 52 4F 4D 20 09 49 6E 74 play;..FROM .Int
02AB30: 4C 6F 67 69 63 20 49 4D 50 4F 52 54 20 49 41 4E Logic IMPORT IAN
02AB40: 44 3B 0D 0A 46 52 4F 4D 09 46 69 6C 65 73 20 49 D;..FROM.Files I
02AB50: 4D 50 4F 52 54 20 4C 6F 6F 6B 75 70 2C 43 6C 6F MPORT Lookup,Clo
02AB60: 73 65 2C 46 49 4C 45 2C 52 65 61 64 42 6C 6F 63 se,FILE,ReadBloc
02AB70: 6B 3B 0D 0A 46 52 4F 4D 09 53 59 53 54 45 4D 20 k;..FROM.SYSTEM
02AB80: 49 4D 50 4F 52 54 20 41 44 52 3B 0D 0A 43 4F 4E IMPORT ADR;..CON
02AB90: 53 54 09 45 4F 46 3D 31 61 78 3B 0D 0A 50 52 4F ST.EOF=1ax;..PRO
02ABA0: 43 45 44 55 52 45 20 43 6C 65 61 72 54 6F 45 6E CEDURE ClearToEn
02ABB0: 64 28 69 3A 43 41 52 44 49 4E 41 4C 29 3B 0D 0A d(i:CARDINAL);..
02ABC0: 42 45 47 49 4E 0D 0A 09 53 63 72 65 65 6E 43 6F BEGIN...ScreenCo
02ABD0: 6E 74 72 6F 6C 28 44 65 6C 45 6F 6C 29 3B 0D 0A ntrol(DelEol);..
02ABE0: 09 49 46 20 4E 4F 54 20 4D 61 64 65 43 68 61 6E .IF NOT MadeChan
02ABF0: 67 65 20 54 48 45 4E 0D 0A 09 09 46 4F 52 20 69 ge THEN....FOR i
02AC00: 3A 3D 69 20 54 4F 20 53 63 72 65 65 6E 57 69 64 :=i TO ScreenWid
02AC10: 74 68 2D 31 20 44 4F 20 57 72 69 74 65 28 27 20 th-1 DO Write('
02AC20: 27 29 20 45 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D ') END;....END;.
02AC30: 0A 09 45 4E 44 20 43 6C 65 61 72 54 6F 45 6E 64 ..END ClearToEnd
02AC40: 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 45 72 72 ;..PROCEDURE Err
02AC50: 6F 72 4D 65 73 73 61 67 65 28 73 31 2C 73 32 3A orMessage(s1,s2:
02AC60: 41 52 52 41 59 20 4F 46 20 43 48 41 52 29 3B 0D ARRAY OF CHAR);.
02AC70: 0A 0D 0A 28 2A 09 44 69 73 70 6C 61 79 20 65 72 ...(*.Display er
02AC80: 72 6F 72 20 6D 65 73 73 61 67 65 20 61 74 20 62 ror message at b
02AC90: 6F 74 74 6F 6D 20 6F 66 20 73 63 72 65 65 6E 2A ottom of screen*
02ACA0: 29 0D 0A 56 41 52 20 69 3A 49 4E 54 45 47 45 52 )..VAR i:INTEGER
02ACB0: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 47 6F 74 6F 78 ;..BEGIN...Gotox
02ACC0: 79 28 30 2C 53 63 72 65 65 6E 44 65 70 74 68 2D y(0,ScreenDepth-
02ACD0: 31 29 3B 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 1);...ScreenCont
02ACE0: 72 6F 6C 28 52 69 6E 67 42 65 6C 6C 29 3B 0D 0A rol(RingBell);..
02ACF0: 09 43 6C 65 61 72 54 6F 45 6E 64 28 31 29 3B 0D .ClearToEnd(1);.
02AD00: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
02AD10: 24 00 01 00 02 09 52 E5 24 00 41 02 00 00 00 02 $.....R.$.A.....
02AD20: 24 00 46 02 00 00 00 02 24 00 42 02 00 00 00 02 $.F.....$.B.....
02AD30: 24 00 47 02 00 00 00 02 24 00 43 02 00 00 00 02 $.G.....$.C.....
02AD40: 24 00 48 02 00 00 00 02 24 00 44 02 00 00 00 02 $.H.....$.D.....
02AD50: 24 00 49 02 00 00 00 02 24 00 45 02 00 00 00 02 $.I.....$.E.....
02AD60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02AD70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02AD80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02AD90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADA0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADB0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02ADF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02AE00: 68 65 63 6B 20 66 6F 72 20 63 75 72 73 6F 72 20 heck for cursor
02AE10: 6C 69 6E 65 2A 29 0D 0A 0D 0A 09 09 09 52 65 61 line*).......Rea
02AE20: 64 4E 65 78 74 43 68 61 72 28 70 6F 73 2C 63 68 dNextChar(pos,ch
02AE30: 29 3B 0D 0A 09 09 09 49 46 20 63 68 3D 30 39 78 );.....IF ch=09x
02AE40: 20 54 48 45 4E 20 0D 0A 09 09 09 09 52 45 50 45 THEN ......REPE
02AE50: 41 54 0D 0A 09 09 09 09 09 49 4E 43 28 6C 69 6E AT.......INC(lin
02AE60: 65 70 6F 73 29 3B 0D 0A 09 09 09 09 09 49 46 20 epos);.......IF
02AE70: 28 6C 69 6E 65 70 6F 73 3E 4C 65 66 74 4D 61 72 (linepos>LeftMar
02AE80: 67 29 20 0D 0A 09 09 09 09 09 41 4E 44 20 28 6C g) .......AND (l
02AE90: 69 6E 65 70 6F 73 3C 28 53 63 72 65 65 6E 57 69 inepos<(ScreenWi
02AEA0: 64 74 68 2B 4C 65 66 74 4D 61 72 67 29 29 20 54 dth+LeftMarg)) T
02AEB0: 48 45 4E 20 0D 0A 09 09 09 09 09 09 57 72 69 74 HEN ........Writ
02AEC0: 65 28 27 20 27 29 20 0D 0A 09 09 09 09 09 09 45 e(' ') ........E
02AED0: 4E 44 3B 0D 0A 09 09 09 09 09 55 4E 54 49 4C 20 ND;.......UNTIL
02AEE0: 49 41 4E 44 28 6C 69 6E 65 70 6F 73 2C 37 29 3D IAND(linepos,7)=
02AEF0: 30 3B 0D 0A 09 09 09 45 4C 53 49 46 20 63 68 3D 0;.....ELSIF ch=
02AF00: 45 4F 46 20 54 48 45 4E 20 45 58 49 54 0D 0A 09 EOF THEN EXIT...
02AF10: 09 09 45 4C 53 45 20 0D 0A 09 09 09 09 49 4E 43 ..ELSE ......INC
02AF20: 28 6C 69 6E 65 70 6F 73 29 3B 0D 0A 09 09 09 09 (linepos);......
02AF30: 49 46 20 28 6C 69 6E 65 70 6F 73 3E 4C 65 66 74 IF (linepos>Left
02AF40: 4D 61 72 67 29 0D 0A 09 09 09 09 41 4E 44 20 28 Marg)......AND (
02AF50: 6C 69 6E 65 70 6F 73 3C 28 53 63 72 65 65 6E 57 linepos<(ScreenW
02AF60: 69 64 74 68 2B 4C 65 66 74 4D 61 72 67 29 29 20 idth+LeftMarg))
02AF70: 54 48 45 4E 20 0D 0A 09 09 09 09 09 57 72 69 74 THEN .......Writ
02AF80: 65 28 63 68 29 20 0D 0A 09 09 09 09 09 45 4E 44 e(ch) .......END
02AF90: 3B 0D 0A 09 09 09 09 45 4E 44 3B 28 2A 49 46 20 ;......END;(*IF
02AFA0: 63 68 3D 76 61 72 69 6F 75 73 20 74 68 69 6E 67 ch=various thing
02AFB0: 73 2A 29 0D 0A 09 09 09 45 4E 44 20 28 2A 69 6E s*).....END (*in
02AFC0: 6E 65 72 20 6C 6F 6F 70 2A 29 3B 0D 0A 09 09 49 ner loop*);....I
02AFD0: 4E 43 28 69 29 3B 0D 0A 09 09 49 46 20 6C 69 6E NC(i);....IF lin
02AFE0: 65 70 6F 73 3E 3D 4C 65 66 74 4D 61 72 67 20 54 epos>=LeftMarg T
02AFF0: 48 45 4E 0D 0A 09 09 09 43 6C 65 61 72 54 6F 45 HEN.....ClearToE
02B000: 6F 20 62 6C 6F 63 6B 73 20 6F 66 20 74 68 65 20 o blocks of the
02B010: 65 72 72 6F 72 20 0D 0A 09 09 20 20 6D 65 73 73 error .... mess
02B020: 61 67 65 20 66 69 6C 65 2C 20 63 6F 75 6E 74 69 age file, counti
02B030: 6E 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73 n the characters
02B040: 20 70 72 65 63 65 64 69 6E 67 20 74 68 65 0D 0A preceding the..
02B050: 09 09 20 20 65 72 72 6F 72 20 65 6D 73 73 61 67 .. error emssag
02B060: 65 20 77 65 20 77 61 6E 74 20 2A 29 0D 0A 09 09 e we want *)....
02B070: 52 65 61 64 42 6C 6F 63 6B 28 66 2C 41 44 52 28 ReadBlock(f,ADR(
02B080: 62 29 2C 30 2C 31 32 38 2C 72 65 70 6C 79 29 3B b),0,128,reply);
02B090: 0D 0A 09 09 6A 3A 3D 45 72 72 6F 72 4E 75 6D 62 ....j:=ErrorNumb
02B0A0: 65 72 3B 0D 0A 09 09 49 46 20 45 72 72 6F 72 4E er;....IF ErrorN
02B0B0: 75 6D 62 65 72 3E 31 32 38 20 54 48 45 4E 0D 0A umber>128 THEN..
02B0C0: 09 09 09 69 3A 3D 43 6F 75 6E 74 28 31 32 38 29 ...i:=Count(128)
02B0D0: 3B 0D 0A 09 09 09 52 65 61 64 42 6C 6F 63 6B 28 ;.....ReadBlock(
02B0E0: 66 2C 41 44 52 28 62 29 2C 31 2C 31 32 38 2C 72 f,ADR(b),1,128,r
02B0F0: 65 70 6C 79 29 3B 0D 0A 09 09 09 6A 3A 3D 6A 2D eply);.....j:=j-
02B100: 31 32 38 0D 0A 09 09 45 4C 53 45 0D 0A 09 09 09 128....ELSE.....
02B110: 69 3A 3D 30 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A i:=0;.....END;..
02B120: 09 09 69 3A 3D 69 2B 43 6F 75 6E 74 28 6A 2D 31 ..i:=i+Count(j-1
02B130: 29 3B 0D 0A 09 09 4C 65 6E 67 74 68 3A 3D 4F 52 );....Length:=OR
02B140: 44 28 62 5B 6A 2D 31 5D 29 3B 0D 0A 09 09 6A 3A D(b[j-1]);....j:
02B150: 3D 69 20 44 49 56 20 31 32 38 3B 20 28 2A 62 6C =i DIV 128; (*bl
02B160: 6F 63 6B 20 74 6F 20 72 65 61 64 2A 29 0D 0A 09 ock to read*)...
02B170: 09 69 3A 3D 69 20 2D 20 31 32 38 2A 6A 3B 20 28 .i:=i - 128*j; (
02B180: 2A 6F 66 66 73 65 74 20 6F 66 20 66 69 72 73 74 *offset of first
02B190: 20 63 68 61 72 61 63 74 65 72 20 69 6E 20 62 6C character in bl
02B1A0: 6F 63 6B 2A 29 0D 0A 09 09 52 65 61 64 42 6C 6F ock*)....ReadBlo
02B1B0: 63 6B 28 66 2C 41 44 52 28 62 29 2C 6A 2B 32 2C ck(f,ADR(b),j+2,
02B1C0: 31 32 38 2C 72 65 70 6C 79 29 3B 0D 0A 09 09 46 128,reply);....F
02B1D0: 4F 52 20 6B 3A 3D 30 20 54 4F 20 4C 65 6E 67 74 OR k:=0 TO Lengt
02B1E0: 68 2D 31 20 44 4F 0D 0A 09 09 09 49 46 20 69 3D h-1 DO.....IF i=
02B1F0: 31 32 38 20 54 48 45 4E 20 0D 0A 09 09 09 09 49 128 THEN ......I
02B200: 6E 64 28 6C 69 6E 65 70 6F 73 2B 31 2D 4C 65 66 nd(linepos+1-Lef
02B210: 74 4D 61 72 67 29 3B 0D 0A 09 09 45 4C 53 45 0D tMarg);....ELSE.
02B220: 0A 09 09 09 43 6C 65 61 72 54 6F 45 6E 64 28 31 ....ClearToEnd(1
02B230: 29 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 ).....END;....IF
02B240: 20 69 3D 4C 69 6E 65 73 50 65 72 57 69 6E 64 6F i=LinesPerWindo
02B250: 77 20 54 48 45 4E 20 45 58 49 54 0D 0A 09 09 45 w THEN EXIT....E
02B260: 4C 53 45 20 0D 0A 09 09 09 57 72 69 74 65 4C 6E LSE .....WriteLn
02B270: 3B 0D 0A 09 09 09 6C 69 6E 65 70 6F 73 3A 3D 30 ;.....linepos:=0
02B280: 3B 0D 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 4E ;.....END;....IN
02B290: 43 28 6D 6F 76 65 64 29 3B 09 0D 0A 09 09 52 65 C(moved);.....Re
02B2A0: 74 72 6C 69 6E 65 28 66 2C 6C 65 6E 2C 69 63 2C trline(f,len,ic,
02B2B0: 70 6F 73 2C 6D 6F 76 65 64 6F 6E 65 2C 31 29 3B pos,movedone,1);
02B2C0: 0D 0A 09 09 49 46 20 6D 6F 76 65 64 6F 6E 65 3D ....IF movedone=
02B2D0: 30 20 54 48 45 4E 0D 0A 09 09 09 46 4F 52 20 69 0 THEN.....FOR i
02B2E0: 3A 3D 69 2B 31 20 54 4F 20 4C 69 6E 65 73 50 65 :=i+1 TO LinesPe
02B2F0: 72 57 69 6E 64 6F 77 20 44 4F 0D 0A 09 09 09 09 rWindow DO......
02B300: 43 6C 65 61 72 54 6F 45 6E 64 28 31 29 3B 0D 0A ClearToEnd(1);..
02B310: 09 09 09 09 57 72 69 74 65 4C 6E 3B 0D 0A 09 09 ....WriteLn;....
02B320: 09 09 45 4E 44 3B 0D 0A 09 09 09 45 58 49 54 0D ..END;.....EXIT.
02B330: 0A 09 09 09 45 4E 44 0D 0A 09 09 45 4E 44 3B 28 ....END....END;(
02B340: 2A 4C 4F 4F 50 2A 29 0D 0A 09 45 4E 44 20 44 69 *LOOP*)...END Di
02B350: 73 70 6C 61 79 46 69 6C 65 3B 0D 0A 50 52 4F 43 splayFile;..PROC
02B360: 45 44 55 52 45 20 44 69 73 70 6C 61 79 45 72 72 EDURE DisplayErr
02B370: 6F 72 3B 0D 0A 0D 0A 28 2A 09 54 68 65 20 65 72 or;....(*.The er
02B380: 72 6F 72 20 6D 65 73 73 61 67 65 20 66 69 6C 65 ror message file
02B390: 20 63 6F 6E 74 61 69 6E 73 20 74 68 65 20 6D 65 contains the me
02B3A0: 73 73 61 67 65 73 2C 20 0D 0A 0D 0A 09 54 68 65 ssages, .....The
02B3B0: 20 66 69 72 73 74 20 74 77 6F 20 62 6C 6F 63 6B first two block
02B3C0: 73 20 67 69 76 65 20 74 68 65 20 6C 65 6E 67 74 s give the lengt
02B3D0: 68 73 20 6F 66 20 74 68 65 20 65 72 72 6F 72 20 hs of the error
02B3E0: 6D 65 73 73 61 67 65 73 0D 0A 09 54 68 65 20 72 messages...The r
02B3F0: 65 6D 61 69 6E 69 6E 67 20 62 6C 6F 63 6B 73 20 emaining blocks
02B400: 4E 43 28 6A 29 3B 0D 0A 09 09 09 09 52 65 61 64 NC(j);......Read
02B410: 42 6C 6F 63 6B 28 66 2C 41 44 52 28 62 29 2C 6A Block(f,ADR(b),j
02B420: 2B 32 2C 31 32 38 2C 72 65 70 6C 79 29 20 0D 0A +2,128,reply) ..
02B430: 09 09 09 09 69 3A 3D 30 3B 0D 0A 09 09 09 09 45 ....i:=0;......E
02B440: 4E 44 3B 0D 0A 09 09 09 74 5B 6B 5D 3A 3D 62 5B ND;.....t[k]:=b[
02B450: 69 5D 3B 0D 0A 09 09 09 49 4E 43 28 69 29 3B 0D i];.....INC(i);.
02B460: 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 74 5B 4C 65 ....END;....t[Le
02B470: 6E 67 74 68 5D 3A 3D 30 63 3B 0D 0A 09 09 57 72 ngth]:=0c;....Wr
02B480: 69 74 65 53 74 72 69 6E 67 28 74 29 3B 0D 0A 09 iteString(t);...
02B490: 45 4C 53 45 0D 0A 09 09 57 72 69 74 65 53 74 72 ELSE....WriteStr
02B4A0: 69 6E 67 28 27 20 43 6F 75 6C 64 20 6E 6F 74 20 ing(' Could not
02B4B0: 6F 70 65 6E 20 65 72 72 6F 72 20 6D 65 73 73 61 open error messa
02B4C0: 67 65 73 20 66 69 6C 65 27 29 3B 0D 0A 09 09 45 ges file');....E
02B4D0: 4E 44 3B 0D 0A 09 62 6C 3A 3D 4C 61 62 65 6C 4F ND;...bl:=LabelO
02B4E0: 70 28 46 69 6C 65 73 5B 43 75 72 72 65 6E 74 46 p(Files[CurrentF
02B4F0: 69 6C 65 5D 2C 46 41 4C 53 45 2C 43 48 52 28 45 ile],FALSE,CHR(E
02B500: 72 72 6F 72 4F 72 64 69 6E 61 6C 2B 30 62 30 68 rrorOrdinal+0b0h
02B510: 29 29 3B 0D 0A 09 52 65 44 69 73 70 6C 61 79 3B ));...ReDisplay;
02B520: 0D 0A 28 2A 09 44 69 73 70 6C 61 79 46 69 6C 65 ..(*.DisplayFile
02B530: 28 46 69 6C 65 73 5B 43 75 72 72 65 6E 74 46 69 (Files[CurrentFi
02B540: 6C 65 5D 2C 43 75 72 72 65 6E 74 57 69 6E 64 6F le],CurrentWindo
02B550: 77 2C 54 68 69 73 78 2C 54 68 69 73 79 29 3B 2A w,Thisx,Thisy);*
02B560: 29 0D 0A 09 47 6F 74 6F 78 79 28 54 68 69 73 78 )...Gotoxy(Thisx
02B570: 2C 54 68 69 73 79 29 3B 0D 0A 09 63 75 72 78 5B ,Thisy);...curx[
02B580: 43 75 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D CurrentWindow]:=
02B590: 54 68 69 73 78 3B 0D 0A 09 63 75 72 79 5B 43 75 Thisx;...cury[Cu
02B5A0: 72 72 65 6E 74 57 69 6E 64 6F 77 5D 3A 3D 54 68 rrentWindow]:=Th
02B5B0: 69 73 79 3B 0D 0A 09 45 4E 44 20 44 69 73 70 6C isy;...END Displ
02B5C0: 61 79 45 72 72 6F 72 3B 09 0D 0A 42 45 47 49 4E ayError;...BEGIN
02B5D0: 0D 0A 09 57 69 6E 64 6F 77 73 3A 3D 30 3B 0D 0A ...Windows:=0;..
02B5E0: 09 45 4E 44 20 45 64 69 74 44 69 73 70 6C 61 79 .END EditDisplay
02B5F0: 2E 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
02B600: 67 69 76 65 20 74 68 65 20 74 65 78 74 20 6F 66 give the text of
02B610: 20 74 68 65 20 65 72 72 6F 72 20 6D 65 73 73 61 the error messa
02B620: 67 65 73 20 2A 29 0D 0A 54 59 50 45 09 54 65 78 ges *)..TYPE.Tex
02B630: 74 3D 41 52 52 41 59 5B 30 2E 2E 36 33 5D 20 4F t=ARRAY[0..63] O
02B640: 46 20 43 48 41 52 3B 0D 0A 0D 0A 56 41 52 09 66 F CHAR;....VAR.f
02B650: 3A 46 49 4C 45 3B 09 09 09 28 2A 46 49 4C 45 20 :FILE;...(*FILE
02B660: 69 73 20 61 20 74 79 70 65 20 65 78 70 6F 72 74 is a type export
02B670: 65 64 20 66 72 6F 6D 20 74 68 65 20 6D 6F 64 75 ed from the modu
02B680: 6C 65 20 46 69 6C 65 73 2A 29 0D 0A 0D 0A 09 62 le Files*).....b
02B690: 3A 41 52 52 41 59 20 5B 30 2E 2E 31 32 37 5D 20 :ARRAY [0..127]
02B6A0: 4F 46 20 43 48 41 52 3B 0D 0A 09 69 2C 6A 2C 6B OF CHAR;...i,j,k
02B6B0: 2C 4C 65 6E 67 74 68 3A 43 41 52 44 49 4E 41 4C ,Length:CARDINAL
02B6C0: 3B 0D 0A 09 74 3A 54 65 78 74 3B 0D 0A 09 45 72 ;...t:Text;...Er
02B6D0: 72 6F 72 4E 75 6D 62 65 72 3A 43 41 52 44 49 4E rorNumber:CARDIN
02B6E0: 41 4C 3B 0D 0A 09 72 65 70 6C 79 3A 49 4E 54 45 AL;...reply:INTE
02B6F0: 47 45 52 3B 0D 0A 09 62 6C 3A 42 4F 4F 4C 45 41 GER;...bl:BOOLEA
02B700: 4E 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 43 6F N;..PROCEDURE Co
02B710: 75 6E 74 28 6B 3A 43 41 52 44 49 4E 41 4C 29 3A unt(k:CARDINAL):
02B720: 43 41 52 44 49 4E 41 4C 3B 0D 0A 56 41 52 09 69 CARDINAL;..VAR.i
02B730: 3A 43 41 52 44 49 4E 41 4C 3B 0D 0A 42 45 47 49 :CARDINAL;..BEGI
02B740: 4E 0D 0A 09 69 3A 3D 30 3B 0D 0A 09 49 46 20 6B N...i:=0;...IF k
02B750: 3D 30 20 54 48 45 4E 20 52 45 54 55 52 4E 20 30 =0 THEN RETURN 0
02B760: 20 45 4E 44 3B 0D 0A 09 46 4F 52 20 6B 3A 3D 6B END;...FOR k:=k
02B770: 2D 31 20 54 4F 20 30 20 42 59 20 2D 31 20 44 4F -1 TO 0 BY -1 DO
02B780: 0D 0A 09 09 69 3A 3D 69 2B 4F 52 44 28 62 5B 6B ....i:=i+ORD(b[k
02B790: 5D 29 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 45 ]);....END;...RE
02B7A0: 54 55 52 4E 20 69 0D 0A 09 45 4E 44 20 43 6F 75 TURN i...END Cou
02B7B0: 6E 74 3B 0D 0A 50 52 4F 43 45 44 55 52 45 20 57 nt;..PROCEDURE W
02B7C0: 72 69 74 65 43 61 72 64 28 69 3A 43 41 52 44 49 riteCard(i:CARDI
02B7D0: 4E 41 4C 29 3B 0D 0A 56 41 52 09 74 3A 41 52 52 NAL);..VAR.t:ARR
02B7E0: 41 59 5B 30 2E 2E 33 5D 20 4F 46 20 43 48 41 52 AY[0..3] OF CHAR
02B7F0: 3B 0D 0A 09 6A 2C 6B 3A 43 41 52 44 49 4E 41 4C ;...j,k:CARDINAL
02B800: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................
02B810: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 5D 3A 3D 44 6F ...........]:=Do
02B820: 46 69 6E 64 3B 09 09 28 2A 43 74 72 6C 20 4C 2A Find;..(*Ctrl L*
02B830: 29 0A 09 4D 61 69 6E 54 61 62 6C 65 5B 31 66 78 )..MainTable[1fx
02B840: 5D 3A 3D 44 65 6C 42 61 63 6B 3B 09 28 2A 5E 2D ]:=DelBack;.(*^-
02B850: 20 6F 6E 20 4F 73 62 6F 72 6E 65 20 31 2A 29 0D on Osborne 1*).
02B860: 0A 0D 0A 09 28 2A 09 54 68 65 20 6E 65 78 74 20 ....(*.The next
02B870: 6B 65 79 2C 20 20 61 73 73 69 67 6E 65 64 20 74 key, assigned t
02B880: 69 73 78 3E 3D 28 53 63 72 65 65 6E 57 69 64 74 isx>=(ScreenWidt
02B890: 68 2D 31 29 20 54 48 45 4E 0D 0A 09 09 09 43 68 h-1) THEN.....Ch
02B8A0: 61 6E 67 65 4D 61 72 67 69 6E 28 33 32 29 3B 0D angeMargin(32);.
02B8B0: 0A 09 09 09 45 4E 44 3B 0D 0A 09 09 49 46 20 4E ....END;....IF N
02B8C0: 4F 54 20 52 65 44 72 61 77 6E 20 54 48 45 4E 0D OT ReDrawn THEN.
02B8D0: 0A 09 09 09 49 46 20 4C 69 6E 65 50 6F 73 3C 4C ....IF LinePos<L
02B8E0: 69 6E 65 4C 65 6E 20 54 48 45 4E 0D 0A 09 09 09 ineLen THEN.....
02B8F0: 09 62 3A 3D 42 61 63 6B 4F 6E 65 43 68 61 72 28 .b:=BackOneChar(
02B900: 43 75 72 46 69 6C 65 50 74 72 5E 29 3B 0D 0A 09 CurFilePtr^);...
02B910: 09 09 09 57 72 69 74 65 50 61 72 74 4C 69 6E 65 ...WritePartLine
02B920: 28 43 75 72 72 65 6E 74 4C 65 66 74 4D 61 72 67 (CurrentLeftMarg
02B930: 69 6E 2B 54 68 69 73 78 2B 31 29 3B 0D 0A 09 09 in+Thisx+1);....
02B940: 09 09 49 4E 43 28 54 68 69 73 78 29 3B 0D 0A 09 ..INC(Thisx);...
02B950: 09 09 09 62 3A 3D 46 6F 72 77 61 72 64 4F 6E 65 ...b:=ForwardOne
02B960: 43 68 61 72 28 43 75 72 46 69 6C 65 50 74 72 5E Char(CurFilePtr^
02B970: 29 3B 09 09 09 09 0D 0A 09 09 09 45 4C 53 45 0D );.........ELSE.
02B980: 0A 09 09 09 09 57 72 69 74 65 28 63 68 29 3B 0D .....Write(ch);.
02B990: 0A 09 09 09 09 49 4E 43 28 54 68 69 73 78 29 3B .....INC(Thisx);
02B9A0: 0D 0A 09 09 09 09 45 4E 44 3B 0D 0A 09 09 09 45 ......END;.....E
02B9B0: 4E 44 3B 0D 0A 09 09 45 4E 44 3B 0D 0A 09 52 65 ND;....END;...Re
02B9C0: 73 65 74 50 6F 73 3B 0D 0A 09 45 4E 44 20 49 6E setPos;...END In
02B9D0: 73 4F 6E 65 43 68 61 72 3B 0D 0A 50 52 4F 43 45 sOneChar;..PROCE
02B9E0: 44 55 52 45 20 44 65 6C 4F 6E 65 43 68 61 72 3B DURE DelOneChar;
02B9F0: 0D 0A 42 45 47 49 4E 0D 0A 09 4D 61 72 6B 41 73 ..BEGIN...MarkAs
02BA00: 3B 0D 0A 42 45 47 49 4E 0D 0A 09 6B 3A 3D 48 49 ;..BEGIN...k:=HI
02BA10: 47 48 28 74 29 3B 0D 0A 09 57 48 49 4C 45 20 69 GH(t);...WHILE i
02BA20: 3C 3E 30 20 44 4F 0D 0A 09 09 6A 3A 3D 69 20 44 <>0 DO....j:=i D
02BA30: 49 56 20 31 30 3B 0D 0A 09 09 74 5B 6B 5D 3A 3D IV 10;....t[k]:=
02BA40: 43 48 52 28 4F 52 44 28 27 30 27 29 2B 69 2D 31 CHR(ORD('0')+i-1
02BA50: 30 2A 6A 29 3B 0D 0A 09 09 69 3A 3D 6A 3B 0D 0A 0*j);....i:=j;..
02BA60: 09 09 44 45 43 28 6B 29 3B 0D 0A 09 09 45 4E 44 ..DEC(k);....END
02BA70: 3B 0D 0A 09 46 4F 52 20 6B 3A 3D 6B 2B 31 20 54 ;...FOR k:=k+1 T
02BA80: 4F 20 48 49 47 48 28 74 29 20 44 4F 20 57 72 69 O HIGH(t) DO Wri
02BA90: 74 65 28 74 5B 6B 5D 29 20 45 4E 44 3B 0D 0A 09 te(t[k]) END;...
02BAA0: 45 4E 44 20 57 72 69 74 65 43 61 72 64 3B 0D 0A END WriteCard;..
02BAB0: 42 45 47 49 4E 0D 0A 09 49 46 20 45 72 72 6F 72 BEGIN...IF Error
02BAC0: 4F 72 64 69 6E 61 6C 3E 3D 45 72 72 6F 72 43 6F Ordinal>=ErrorCo
02BAD0: 75 6E 74 20 54 48 45 4E 20 52 45 54 55 52 4E 20 unt THEN RETURN
02BAE0: 45 4E 44 3B 0D 0A 09 47 6F 74 6F 78 79 28 30 2C END;...Gotoxy(0,
02BAF0: 53 63 72 65 65 6E 44 65 70 74 68 2D 31 29 3B 0D ScreenDepth-1);.
02BB00: 0A 09 45 72 72 6F 72 4E 75 6D 62 65 72 3A 3D 45 ..ErrorNumber:=E
02BB10: 72 72 6F 72 4C 69 73 74 5B 45 72 72 6F 72 4F 72 rrorList[ErrorOr
02BB20: 64 69 6E 61 6C 5D 2E 45 72 72 6F 72 4E 75 6D 3B dinal].ErrorNum;
02BB30: 0D 0A 09 53 63 72 65 65 6E 43 6F 6E 74 72 6F 6C ...ScreenControl
02BB40: 28 44 65 6C 45 6F 6C 29 3B 0D 0A 09 57 72 69 74 (DelEol);...Writ
02BB50: 65 53 74 72 69 6E 67 28 27 45 72 72 6F 72 20 27 eString('Error '
02BB60: 29 3B 0D 0A 09 57 72 69 74 65 43 61 72 64 28 45 );...WriteCard(E
02BB70: 72 72 6F 72 4E 75 6D 62 65 72 29 3B 0D 0A 09 57 rrorNumber);...W
02BB80: 72 69 74 65 53 74 72 69 6E 67 28 27 28 27 29 3B riteString('(');
02BB90: 57 72 69 74 65 43 61 72 64 28 45 72 72 6F 72 4F WriteCard(ErrorO
02BBA0: 72 64 69 6E 61 6C 2B 31 29 3B 0D 0A 09 57 72 69 rdinal+1);...Wri
02BBB0: 74 65 53 74 72 69 6E 67 28 27 20 6F 66 20 27 29 teString(' of ')
02BBC0: 3B 57 72 69 74 65 43 61 72 64 28 45 72 72 6F 72 ;WriteCard(Error
02BBD0: 43 6F 75 6E 74 29 3B 0D 0A 09 57 72 69 74 65 53 Count);...WriteS
02BBE0: 74 72 69 6E 67 28 27 29 20 3A 27 29 3B 0D 0A 09 tring(') :');...
02BBF0: 4C 6F 6F 6B 75 70 28 66 2C 27 45 52 52 4D 53 47 Lookup(f,'ERRMSG
02BC00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BC90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BCF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BD90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BDF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02BE00: 2E 44 41 54 20 27 2C 72 65 70 6C 79 29 3B 0D 0A .DAT ',reply);..
02BE10: 0D 0A 09 28 2A 4C 6F 6F 6B 75 70 20 6F 70 65 6E ...(*Lookup open
02BE20: 73 20 74 68 65 20 66 69 6C 65 20 66 6F 72 20 69 s the file for i
02BE30: 6E 70 75 74 2F 6F 75 74 70 75 74 0D 0A 09 20 20 nput/output...
02BE40: 72 65 70 6C 79 20 72 65 74 75 72 6E 73 20 7A 65 reply returns ze
02BE50: 72 6F 20 69 66 20 6E 6F 20 66 69 6C 65 20 69 73 ro if no file is
02BE60: 20 66 6F 75 6E 64 0D 0A 09 20 20 61 20 64 65 76 found... a dev
02BE70: 69 63 65 20 6E 61 6D 65 20 63 61 6E 20 62 65 20 ice name can be
02BE80: 75 73 65 64 20 69 6E 20 66 72 6F 6E 74 20 6F 66 used in front of
02BE90: 20 74 68 65 20 66 69 6C 65 20 6E 61 6D 65 0D 0A the file name..
02BEA0: 09 20 49 6E 20 66 61 63 74 2C 20 79 6F 75 20 63 . In fact, you c
02BEB0: 61 6E 20 75 73 65 20 61 20 6E 6F 6E 2D 64 69 73 an use a non-dis
02BEC0: 63 20 66 69 6C 65 20 6E 61 6D 65 20 28 65 67 20 c file name (eg
02BED0: 50 55 4E 3A 20 6F 72 20 43 4F 4E 3A 29 0D 0A 09 PUN: or CON:)...
02BEE0: 20 62 75 74 20 69 66 20 79 6F 75 20 64 6F 20 74 but if you do t
02BEF0: 68 69 73 2C 20 79 6F 75 20 6D 75 73 74 20 64 6F his, you must do
02BF00: 20 79 6F 75 72 20 49 4F 20 74 68 72 6F 75 67 68 your IO through
02BF10: 20 74 68 65 20 6D 6F 64 75 6C 65 0D 0A 09 20 53 the module... S
02BF20: 74 72 65 61 6D 73 20 28 6F 72 20 49 6E 4F 75 74 treams (or InOut
02BF30: 2C 20 77 68 69 63 68 20 63 61 6C 6C 73 20 73 74 , which calls st
02BF40: 72 65 61 6D 73 29 2C 20 61 73 20 74 68 65 20 49 reams), as the I
02BF50: 4F 20 74 6F 20 74 68 65 0D 0A 09 20 73 65 72 69 O to the... seri
02BF60: 61 6C 20 64 65 76 69 63 65 73 20 69 73 20 70 65 al devices is pe
02BF70: 72 66 6F 72 6D 65 64 20 62 79 20 74 68 61 74 20 rformed by that
02BF80: 6D 6F 64 75 6C 65 20 28 69 74 20 63 61 6C 6C 73 module (it calls
02BF90: 20 46 69 6C 65 73 0D 0A 09 20 74 6F 20 64 6F 20 Files... to do
02BFA0: 49 4F 20 74 6F 20 64 69 73 63 20 64 65 76 69 63 IO to disc devic
02BFB0: 65 73 29 0D 0A 2A 29 0D 0A 09 49 46 20 72 65 70 es)..*)...IF rep
02BFC0: 6C 79 3D 30 20 54 48 45 4E 09 09 28 2A 4F 4B 20 ly=0 THEN..(*OK
02BFD0: 2D 20 66 69 6C 65 20 66 6F 75 6E 64 2A 29 0D 0A - file found*)..
02BFE0: 09 09 0D 0A 0D 0A 09 09 28 2A 72 65 61 64 20 74 ........(*read t
02BFF0: 68 65 20 66 69 72 73 74 20 31 20 6F 72 20 74 77 he first 1 or tw
02C000: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
02C010: 25 00 01 00 02 09 52 E5 25 00 41 02 00 00 00 02 %.....R.%.A.....
02C020: 25 00 46 02 00 00 00 02 25 00 42 02 00 00 00 02 %.F.....%.B.....
02C030: 25 00 47 02 00 00 00 02 25 00 43 02 00 00 00 02 %.G.....%.C.....
02C040: 25 00 48 02 00 00 00 02 25 00 44 02 00 00 00 02 %.H.....%.D.....
02C050: 25 00 49 02 00 00 00 02 25 00 45 02 00 00 00 02 %.I.....%.E.....
02C060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C0F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02C100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C3F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C4F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C6F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C7F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C8F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02C9F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CA90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CAF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CB90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CBF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CC90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CCF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CD90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CDF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CE90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CEA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CEB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CEC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CEE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CEF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CF90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02CFF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D0F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D300: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
02D310: 26 00 01 00 02 09 52 E5 26 00 41 02 00 00 00 02 &.....R.&.A.....
02D320: 26 00 46 02 00 00 00 02 26 00 42 02 00 00 00 02 &.F.....&.B.....
02D330: 26 00 47 02 00 00 00 02 26 00 43 02 00 00 00 02 &.G.....&.C.....
02D340: 26 00 48 02 00 00 00 02 26 00 44 02 00 00 00 02 &.H.....&.D.....
02D350: 26 00 49 02 00 00 00 02 26 00 45 02 00 00 00 02 &.I.....&.E.....
02D360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D3F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02D400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D4F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D6F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D7F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D8F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02D9F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DA90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DAF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DB90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DBF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DC90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DCF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DD90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DDF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DE90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DEA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DEB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DEC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DEE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DEF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DF90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02DFF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E0F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E3F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E4F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E600: 54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00 Track-Info......
02E610: 27 00 01 00 02 09 52 E5 27 00 41 02 00 00 00 02 '.....R.'.A.....
02E620: 27 00 46 02 00 00 00 02 27 00 42 02 00 00 00 02 '.F.....'.B.....
02E630: 27 00 47 02 00 00 00 02 27 00 43 02 00 00 00 02 '.G.....'.C.....
02E640: 27 00 48 02 00 00 00 02 27 00 44 02 00 00 00 02 '.H.....'.D.....
02E650: 27 00 49 02 00 00 00 02 27 00 45 02 00 00 00 02 '.I.....'.E.....
02E660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E670: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E690: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E6F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02E700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E7F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E8F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E900: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E910: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E920: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E930: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E940: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E950: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E960: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E970: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E980: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E990: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02E9F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EA90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EAF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EB90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EBF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EC90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ECF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02ED90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EDF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EE90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EEA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EEB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EEC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EED0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EEE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EEF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF00: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF10: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF20: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF30: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF40: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF50: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF60: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF70: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF80: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EF90: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFA0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFB0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFC0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFD0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFE0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02EFF0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F000: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F010: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F020: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F030: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F040: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F050: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F060: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F070: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F080: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F090: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F0F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F100: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F110: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F120: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F130: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F140: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F150: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F160: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F170: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F180: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F190: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F1F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F200: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F210: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F220: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F230: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F240: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F250: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F260: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F270: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F280: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F290: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F2F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F300: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F310: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F320: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F330: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F340: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F350: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F360: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F370: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F380: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F390: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F3F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F400: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F410: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F420: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F430: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F440: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F450: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F460: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F470: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F480: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F490: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F4F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F500: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F510: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F520: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F530: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F540: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F550: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F560: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F570: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F580: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F590: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F5F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F600: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F610: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F620: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F630: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F640: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F650: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F660: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F670: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F680: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F690: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F6F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F700: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F710: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F720: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F730: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F740: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F750: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F760: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F770: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F780: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F790: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F7F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F800: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F810: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F820: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F830: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F840: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F850: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F860: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F870: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F880: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F890: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8A0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8B0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8C0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8D0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8E0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F8F0: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
02F900: 4F 66 66 73 65 74 2D 49 6E 66 6F 0D 0A 00 00 BB Offset-Info.....
02F910: 18 AF 00 4B 03 E6 05 81 08 1C 0B B6 0D 52 10 ED ...K.........R..
02F920: 12 86 15 BA 18 B1 00 4A 03 E4 05 81 08 1D 0B BA .......J........
02F930: 0D 55 10 EF 12 8A 15 B9 18 B0 00 4B 03 E5 05 80 .U.........K....
02F940: 08 1B 0B B7 0D 52 10 EC 12 88 15 B9 18 B0 00 49 .....R.........I
02F950: 03 E4 05 81 08 1D 0B BB 0D 57 10 F0 12 89 15 BA .........W......
02F960: 18 AF 00 4A 03 E6 05 82 08 1C 0B B7 0D 53 10 ED ...J.........S..
02F970: 12 87 15 BA 18 AF 00 48 03 E1 05 7E 08 1A 0B B6 .......H...~....
02F980: 0D 53 10 ED 12 87 15 B8 18 AF 00 49 03 E4 05 81 .S.........I....
02F990: 08 1C 0B B6 0D 51 10 EB 12 87 15 B7 18 AE 00 46 .....Q.........F
02F9A0: 03 DF 05 7C 08 1A 0B B7 0D 54 10 EC 12 86 15 B8 ...|.....T......
02F9B0: 18 B0 00 4B 03 EB 05 81 08 1E 0B B8 0D 53 10 EC ...K.........S..
02F9C0: 12 86 15 B6 18 B0 00 49 03 E2 05 7D 08 19 0B B5 .......I...}....
02F9D0: 0D 51 10 EC 12 85 15 B5 18 AF 00 49 03 E4 05 7F .Q.........I....
02F9E0: 08 1A 0B B4 0D 4E 10 E8 12 84 15 B6 18 AE 00 46 .....N.........F
02F9F0: 03 E1 05 7C 08 19 0B B4 0D 51 10 ED 12 85 15 B5 ...|.....Q......
02FA00: 18 B0 00 49 03 E6 05 80 08 1C 0B B6 0D 50 10 EA ...I.........P..
02FA10: 12 84 15 B2 18 B0 00 48 03 E1 05 7B 08 16 0B B3 .......H...{....
02FA20: 0D 4E 10 E8 12 82 15 B0 18 B0 00 49 03 E4 05 7F .N.........I....
02FA30: 08 1A 0B B4 0D 4E 10 E7 12 81 15 B2 18 B0 00 49 .....N.........I
02FA40: 03 E3 05 7E 08 19 0B B4 0D 50 10 EC 12 86 15 B0 ...~.....P......
02FA50: 18 B0 00 49 03 E4 05 81 08 1E 0B B9 0D 52 10 EB ...I.........R..
02FA60: 12 84 15 AE 18 AE 00 46 03 DE 05 79 08 14 0B AF .......F...y....
02FA70: 0D 49 10 E2 12 7E 15 AE 18 AF 00 48 03 E1 05 7D .I...~.....H...}
02FA80: 08 19 0B B5 0D 4F 10 E6 12 7F 15 AF 18 AF 00 49 .....O.........I
02FA90: 03 E2 05 7C 08 18 0B B3 0D 4F 10 EA 12 84 15 AC ...|.....O......
02FAA0: 18 B0 00 49 03 E3 05 7F 08 1C 0B B7 0D 51 10 E9 ...I.........Q..
02FAB0: 12 82 15 AC 18 AF 00 47 03 E0 05 7A 08 14 0B AF .......G...z....
02FAC0: 0D 49 10 E2 12 7D 15 AC 18 AF 00 47 03 E0 05 7C .I...}.....G...|
02FAD0: 08 18 0B B4 0D 4D 10 E5 12 7E 15 AC 18 B0 00 49 .....M...~.....I
02FAE0: 03 E2 05 7D 08 17 0B B3 0D 50 10 E8 12 83 15 A8 ...}.....P......
02FAF0: 18 AE 00 46 03 DF 05 7B 08 17 0B B3 0D 4D 10 E4 ...F...{.....M..
02FB00: 12 7D 15 A9 18 B0 00 49 03 E2 05 7B 08 15 0B AF .}.....I...{....
02FB10: 0D 4A 10 E3 12 7D 15 A8 18 AE 00 46 03 E0 05 7B .J...}.....F...{
02FB20: 08 16 0B B1 0D 4C 10 E3 12 7C 15 A7 18 AE 00 47 .....L...|.....G
02FB30: 03 E0 05 7A 08 14 0B AD 0D 48 10 E3 12 7D 15 A4 ...z.....H...}..
02FB40: 18 AE 00 46 03 DE 05 79 08 16 0B B1 0D 4A 10 E1 ...F...y.....J..
02FB50: 12 7A 15 A5 18 B0 00 49 03 E2 05 7B 08 15 0B AE .z.....I...{....
02FB60: 0D 48 10 E0 12 7A 15 A4 18 AD 00 46 03 DE 05 79 .H...z.....F...y
02FB70: 08 13 0B AE 0D 4A 10 E2 12 7A 15 A3 18 AF 00 48 .....J...z.£...H
02FB80: 03 E1 05 7B 08 15 0B AE 0D 49 10 E2 12 7C 15 A0 ...{.....I...|..
02FB90: 18 AE 00 46 03 DF 05 79 08 15 0B B0 0D 4A 10 E2 ...F...y.....J..
02FBA0: 12 7A 15 A2 18 AE 00 48 03 E1 05 7A 08 14 0B AE .z.....H...z....
02FBB0: 0D 47 10 DF 12 78 15 A1 18 AF 00 47 03 DF 05 78 .G...x.....G...x
02FBC0: 08 14 0B AF 0D 4A 10 E2 12 79 15 A0 18 AE 00 47 .....J...y.....G
02FBD0: 03 E0 05 7A 08 13 0B AE 0D 47 10 E0 12 79 15 9E ...z.....G...y..
02FBE0: 18 AF 00 46 03 DF 05 7A 08 15 0B AF 0D 4A 10 E3 ...F...z.....J..
02FBF0: 12 7A 15 A0 18 AE 00 47 03 E1 05 7A 08 14 0B AC .z.....G...z....
02FC00: 0D 46 10 DE 12 77 15 9F 18 AD 00 44 03 DD 05 77 .F...w.....D...w
02FC10: 08 13 0B AD 0D 47 10 DF 12 79 15 9D 18 AE 00 46 .....G...y.....F
02FC20: 03 DE 05 77 08 11 0B AA 0D 44 10 DC 12 76 15 ...w.....D...v.
RESULT OF SEARCH :
PRO=274 CHEA=1 COD=51 MUSI=0 COP=8 GRA=37 WRIT=425 198=5 199=0 STARTER=0 KBI=0 CAAV=0 L.TOURNIER=0
EXTENDED CPC DSK File SAMdisk150708( RAFBGCHDIE RAFBGCHDIE RAFBGCHDIEWP
COMSD COMWD COM-2JULY1987 -BACKUPNOW!-VERSION124CAT MOD CAT
MODCOMMAND DEFCOMMAND MODCOMPARE MODa !"#$%&COMPBIN MOD '(COMPDIR MODN)*+,-./0
12FILEOPS DEF3FILEOPS MOD456GETFILESDEF7r+s+w""(w"#GH .HsH#2go"Q *#"!R02Kx(#Q"(!
x "O! !jR0Ur+ x # A 0G22GO!-++ ## #Q(B22WP V3.0 (C) 1987 HiSoft Buffer size $
$No files$ Open failed$ Disc I/O error (Full )$ to $ Same$ Copy (Y/N/A/Q/P/B
/W) $ LGETFILESMOD89IMPORT DEFIMPORT MODABCDMACROS MBE3EFGHIJKMLU MODdLMN
OPQRSTUVWXPATTERN DEF0YZPATTERN MOD5abcdeSCREENIOEARUfghijklmnopSCREENIOMBESqrst
uvwxyzSCREENIOOSBPTESTPAT MODEDITCONTDMBnEDITDISPDMB52! !2U2 ! 2"V####2X6 A!!e
(G2 eG!eA. (+4(1nf( +#M7NU2U(# .#!eGX8% (nfVutXNWEnfut!eGR(( X(# 00P*Vnf"YG72KY2
8y( #kbG(M#.!NK!d Ur+ x # A 0!jR0SD V1.0 by Adam Denning (C) HiSoft 1986 $$ S$
$R $ $K Recs $ Disc free space $function i sourc an Man librar formns duri
ng execution of repeats *) END ScreenIO. ! ! !222 2!G7£o(! !$ q(a 2y Wp((2R
8#!(Gw#2# .# WDEL V2.0 (C) 1987 HiSoft $Drive is R/O!$No matching files$ Canno
t delete!$ Delete (Y/N/A/Q/P) $*"QRhB8KGB h2!l #- #Q(B # 2mh2BF!m ! ! !!Q(G2
!Q!LB!"L# B( -B qa 2b(1w(,y 2p(!B2(22BQB2#bk6"!F# #(h2(4!+6B#6A#V6K"!#3 RAFBGC
HDIEgth when end-of-file is encountered *) BufferARRAY0..BufferSize-1 OF C
HAR NextBlockNo,BlockNoCARDINAL CharPosCARDINAL CharCountCARDINAL PageNumber
INTEGER PageLenCARDINAL24 PROCEDURE ReadBuffer BEGIN BlockNoNextBlockNo R
eadBlock(Inf,ADR(Buffer),0,BufferSize,reply) CharCountreply (*Pad rest of bu
ffer with end-of-file characters Normally, CharCount will equal HIGH(buffer)+
1, so no padding takes place*) FOR CharPosCharCount TO HIGH(Buffer) MODULE
Cat (*List one of more files to the terminal Call is CAT (wild card)
file name,.... Options Where the wild card file names are the names of files
to list The options are P - run in page mode in page mode, at the end o
f each screen of output, a prompt line is presented. P may be followe
d by the screen length in lines default is 24 N - output line numbers
W - wrap lines longer than screen width W may be followed by screen width i
nDO BufferCharPosEOF END CharPos0 (*increment NextBlock to allow for data re
ad*) NextBlockNoINTEGER(BlockNo)+reply DIV BlockSize END ReadBuffer VARch
CHAR(*next character read*) PROCEDURE NextChar BEGIN IF CharPosCharCount TH
EN ReadBuffer END (*IF CharPosCharCount*) chBufferCharPos INC(CharPos) EN
D NextChar (*File positioning routines You can position a file by i)Giv
ing the number of the line to list from ii)Giving a string characters def
ault is 80 I - expand tabs to spaces For example CAT b*.def b*.mod
b*.subP16W100N This is a hack of the LIST program which comes with my Mo
dula-2 compiler. (But highly modified) Limitations At most 10 (wild card)
file names can be used Each wild card should not match more than 100 actual fil
es Dave Moore *) FROM SYSTEM IMPORT ADDRESS,ADR,TSIZE FROM Command IMPORT
Parameter,Parclass,GetParams FROM Files IMPORT FileNamto list in the form /str
ing/ (where / is any non-alphanumeric character) iii)A combination of the two
10/string/ to start search at a given line. *) TYPEPositionRECORD BlockNumbe
rCARDINAL(*Block in which line starts*) CharOffsetCARDINAL(*Character offset in
buffer*) END VARPosTableARRAY1..2000 OF Position (*This code could be mad
e more fancy by having an increment size so that as the PosTable becomes full
, every second entry is removed and the increment e,FILE,Lookup,Create,ReadBl
ock,SetBlock FROM GetFiles IMPORT GetNames FROM Terminal IMPORT WriteString,Wr
iteLn,Write,Read,BusyRead,ClearCharBuffer FROM Sort IMPORT SortRecords FROM In
tLogic IMPORT IAND FROM SmallIO IMPORT WriteInt,WriteHex,WriteCard CONSTBuffer
Size4096(*Bytes to read in a single block*) BlockSize128(*Block size in bytes--
used for random positioning*) CR0dx LF0ax TAB09x EOF1ax BS08x DEL7Fx
TYPE PFileNamePOINTER TO FileName VAdoubled. But few files will have more
than 2000 lines in them, so it didn't seem worth the extra effort. You
can change the upper bound at will to change the size of the table. *) Hi
ghWaterCARDINAL(*The top entry in Postable which is valid*) VARLineOfFileCARDIN
AL ContinuationBOOLEANFALSE(*true if line is continuation of previous line*)
PROCEDURE AddMarker (*Add a marker to the position table. LinOfFile give
s line number*) BEGIN IF (LineOfFileHIGH(PosTablRreplyINTEGER i,jINTEGER Inf
FILE(*input file*) (*The input is buffered Buffer contains the text to b
uffer BlockNo contains the number of the first block in the buffer This
variable is modified by the random positioning code to reflect changes in th
e file position CharPos gives the character number of the next character to
be listed from the buffer CharCount gives number of valid characters in t
he buffer, it may be less than the buffer len RAFBGCHDIEe)) AND (LineOfFile
HighWater) THEN HighWaterLineOfFile WITH PosTableHighWater DO BlockNumberBloc
kNo CharOffsetCharPos END END END AddMarker PROCEDURE RepositionFile (
*Reposition file to line number given by LineOfFile. This line number need no
t be within the part of the file already examined (or previously skipped) so th
at it may be necessary to advance as far as possible and then scan forward.
This routine only handles positioning by line number--seench END (*IF chBS etc*
) END(*LOOP*) stringlen+10x(*set so string can later be printed*) IF len0
THEN LastLenlen LastStringstring END IF LastLen0 THEN WriteString(' Error
- no previous search string') WriteLn ELSE(*start match*) Partials0 LOOP IF
chEOF THEN EXIT END WHILE chCR DO NextChar IF chLF THEN NextChar END INC(Li
neOfFile) AddMarker END (*add a new partial match which has just matched
Search for positioning by string match.*) VARRequiredCARDINAL BEGIN Require
dLineOfFile (* Recalculate page number assuming that no lines overflowed (th
at is, that the maximum number of lines occured on each page). Note that t
he page number is always incremented before it is printed so that this code doe
s not result in page numbers that are one too small. *) PageNumber(LineOfFi
le-1) DIV (PageLen-2) IF LineOfFileHighWater THEN LineOfFileHighWater END Cont
i the null string*) INC(Partials) PartialPosPartials1 (*try to advance a
ll the existing partially completed matches*) j0 FOR i1 TO Partials DO n
chLastStringPartialPosi IF (nchch) OR (CAP(nch)ch) THEN (* the two condition
s in the above line provide for lower case to in the match string to ma
tch either case*) INC(j) PartialPosjPartialPosi+1 IF PartialPosjLastLen THE
N EXIT (*match foundnuationFALSE IF LineOfFile0 THEN WITH PosTableLin
eOfFile DO IF BlockNumberBlockNo THEN SetBlock(Inf,BlockNumber) NextBlockNoBl
ockNumber ReadBuffer END CharPosCharOffset-1 NextChar(*re-prime character po
inter*) (*The required character is one less than the saved marker as the c
haracter pointer is incremented after the first character of the line is retur
ned. But the block is correct, because the 'position beyond end of block' is no
*) END END END Partialsj NextChar END (*either chEOF or a match has bee
n found*) IF chEOF THEN WriteLn WriteString(LastString) WriteString(' could
not be found') ELSE RepositionFile (*to start of current line*) END END(*sea
rch string entered or existed*) END Search (*Option flags and screen dimensi
ons*) VARPageModeBOOLEANFALSE LineWrapBOOLEANFALSE NumberLinesBOOLEANFALSE
ExpandTabsBOOLEANFALSE t checked until the following character is sought*) EN
D(*WITH*) END(*IF LineOfFile0*) WHILE LineOfFileRequired DO WHILE chCR DO
NextChar END NextChar IF chLF THEN NextChar END INC(LineOfFile) AddMarker
END END RepositionFile TYPEMatchStringARRAY1..60 OF CHAR VARLastStringMat
chString LastLenCARDINAL0(*length of last matched string*) PROCEDURE Search(
DelimiterCHAR) (*Search for a string from the current position in the file
Thi PageWidthCARDINAL80 LineNumberCARDINAL VAREndOfFileBOOLEAN(*set true
after ** End of File ** has been output by WriteLine*) (*Write a line of o
utput The first character of the line to be written must be available in the v
ariable ch before entry to the routine *) PROCEDURE WriteLine VARCharsWritt
enCARDINAL BEGIN CharsWritten0 IF NumberLines THEN IF Continuation THE
N WriteString(' ') ELSE WriteInt(LineOfFile,5) Write('') s routine doe
s a plain simple search. There are much faster ways of doing searches, but they
are probably going to be swamped by the IO time anyway*) VARstringMatchString
lenCARDINAL nchCHAR i,jCARDINAL PartialPosARRAY1..60 OF CARDINAL PartialsC
ARDINAL BEGIN len0 LOOP Read(nch) IF (nchBS) OR (nchDEL) THEN IF len0 THEN
DEC(len) END ELSIF (nchDelimiter) OR (lenHIGH(string)) OR (nchCR) OR (nchLF)
THEN EXIT ELSE INC(len) stringlen RAFBGCHDIE END END IF NOT Continuation
THEN AddMarker INC(LineOfFile) END ContinuationFALSE LOOP (*strip top
bit - should probably be option controlled*) IF CharsWrittenPageWidth THEN
ContinuationTRUE WriteLn RETURN END IF ch80x THEN chCHR(ORD(ch)-80h) END
CASE ch OF EOF(*End of File character found, (either from file or generat
ed by NextChar) if nothing has been printed on line, just return end of fi
le status OF Parameter CountINTEGER NamesARRAY 0..100 OF FileName NameCount
INTEGER Counter INTEGER Cnter INTEGER (*Output the file already opened*
) PROCEDURE OutputFile(NameARRAY OF CHAR) VARchCHAR iCARDINAL PROCEDURE
PageHeader BEGIN WriteLn WriteString(Name) (* If terminal supports tabs, p
ut page number on right hand side of screen, otherwise just go in 10 chars to s
ave time on alow links*) IF NOT ExpandTabs THEN FOR i27 TO PageWidth BY 8 D
O W If line was incomplete, print EOF and return*) IF (CharsWritten0) THE
N WriteString(' ** End of File **') EndOfFileTRUE ELSE WriteString('EOF')
END RETURN CR(*Carriage return found*) NextChar IF (chLF) THEN NextCha
r END WriteLn EXIT LF(*must be a stray line feed, treat as a line termin
ator*) WriteLn EXIT TABREPEAT INC(CharsWritten) IF CharsWrittenPageWidth
THEN rite(TAB) END ELSE FOR i1 TO 10 DO Write(' ') END END WriteString('Pag
e ') WriteInt(PageNumber,5) WriteLn END PageHeader PROCEDURE Number()CARDI
NAL TYPECharSetSET OF CHAR VARiCARDINAL BEGIN i0 WHILE ch IN CharSet'0'..'9
',BS,DEL DO IF (chBS) OR (chDEL) THEN ii DIV 10 ELSE i10*i+(ORD(ch)-ORD('0'))
END Read(ch) END RETURN i END Number PROCEDURE PrintHelp BEGIN WriteStr
ing(' Examples of possible responses')WriteLn WritWriteLn ContinuationTRUE RE
TURN(*note that tab gets processed again at start of next line*) END IF Exp
andTabs OR NumberLines THEN Write(' ') END UNTIL IAND(CharsWritten,7)7 IF NOT
(ExpandTabs OR NumberLines) THEN Write(TAB) END 0x..1fx(*non-printing charact
ers. This is cheating slightly - should exclude CR LF and TAB*) IF CharsWrit
ten(PageWidth-4) THEN WriteLn ContinuationTRUE RETURN END Write('') WeStri
ng(' - This message')WriteLn WriteString(' 227 - list from
line 227')WriteLn WriteString(' +20 or -20 - go forward (back) 20 lines') Wri
teLn WriteString(' q (or Q) - go to next file')WriteLn WriteString(' Contro
l C - abort run')WriteLn WriteString('/string/ - list from next occur
ence of string') WriteLn WriteString('100/string/ - list from first occurence
after line 100') WriteLn WriteString('P20 - toggle page mode set 20
liriteHex(ORD(ch),2) Write('') CharsWrittenCharsWritten+4 ELSEWrite(ch) IN
C(CharsWritten) END(*CASE*) NextChar END(*LOOP*) END WriteLine (*The next
routine is used by the sort module to perform key comparisons*) PROCEDURE C
ompar(a,bADDRESS)BOOLEAN VARp,qPFileName BEGIN pPFileName(a) qPFileName(b)
RETURN pq END Compar PROCEDURE Usage BEGIN WriteString('Usage is CAT file,
file,...')WriteLn WriteString(' or CAT nes per page') WriteLn WriteSt
ring('W64 - toggle line wrap, set 64 columns per line') WriteLn Write
String('I - toggle tabs expansion') WriteLn WriteString('N
- toggle line numbering')WriteLn WriteString(' Command') END PrintHelp P
ROCEDURE NewValue(VAR defaultCARDINALlimitCARDINAL) VARiCARDINAL BEGIN Read(c
h) iNumber() IF ilimit THEN defaulti END END NewValue BEGIN EndOfFileFALS
E NextBlockNo0 LineNumber2file,file,...options')WriteLn WriteString(' where f
ile is a file to list or a wild card for files to list') WriteLn WriteLn Writ
eString(' The options are')WriteLn WriteString('P - output in page mode')WriteL
n WriteString('N - number lines on output')WriteLn WriteString('W - wrap long
lines')WriteLn WriteString('I - expand tabs to spaces')WriteLn WriteLn WriteS
tring(' for example CAT *.DEFP16W20N')WriteLn HALT END Usage VARPara
mARRAY 0..10 RAFBGCHDIE LineOfFile1 PageNumber1 CharPos1 CharCount0 HighW
ater0 NextChar(*prime look-ahead character*) WriteLn HighWater0 IF PageMode
THEN PageHeader END LOOP IF EndOfFile THEN EXIT END WriteLine INC(LineNum
ber) (* check for anything types at console if ctrl c, the abort, if q or
Q*) BusyRead(ch) IF (PageMode AND ((LineNumberPageLen) OR EndOfFile))
OR (ch0x) THEN IF EndOfFile THEN DEC(CharPos) END EndOfFileFALSELinesTRUE
INC(i) 'P'PageModeTRUE INC(i) PageLenGetNum(Chars,i,ORD(Length))
IF PageLen0 THEN PageLen24 END (*Check page length is reasonable*) I
F PageLen10 THEN WriteLn WriteString(' *** Page length too short ***') WriteL
n Usage END ELSE Usage END(*CASE*) END(*WHILE*) END (*WITH*
) DEC(Count) END (*IF option*) IF Count0 THEN Usage END IF Nu PageModeTRU
E WriteString(' Command ') IF ch0x THEN Read(ch) ELSE Write(ch) ClearCharBu
ffer END LOOP CASE CAP(ch) OF 'P'PageModeNOT PageMode NewValue(Page
Len,12) 'N'NumberLinesNOT NumberLinesRead(ch) 'I'ExpandTabsNOT ExpandTabsRead(
ch) 'W'LineWrapNOT LineWrap NewValue(PageWidth,40) ''PrintHelpRead(ch) '
+'Read(ch) LineOfFileLineOfFile+Number() RepositionFile '-mberLines
THEN PageWidthPageWidth-6 END FOR i0 TO CARDINAL(Count-1) DO GetNames(Parami
.Chars,Names,NameCount) IF NameCount1 THEN SortRecords(ADR(Names),CARDINAL(Nam
eCount), TSIZE(FileName),Compar) END FOR j0 TO NameCount-1 DO Lookup(Inf,Nam
esj,reply) IF reply0 THEN WriteString(' Could not open ') WriteString(Namesj)
WriteLn ELSE OutputFile(Namesj) END END END END Listit BEGIN Listit E
ND Cat. 'Read(ch) iNumber() IF iLineOfFile THEN LineOfFile1 ELSE
LineOfFileLineOfFile-i END RepositionFile '0'..'9'LineOfFileNumber(
) RepositionFile '!'..'*',',','.','/',''..'',''..'', ''..'' Search(ch)Read(
ch) 03x HALT ELSE EXIT END(*CASE*) END(*LOOP*) IF CAP(ch)'Q' THEN EX
IT END INC(PageNumber) PageHeader LineNumber2 END END END OutputFile
PROCEDURE Listit VARiCARDINAL PROCEDURE GetNum(CharsARRAY OF CHARVAR PosCARD
INALLenCARDINAL)CARDINAL (*Get a number from a parameter in the command line*
) TYPECharSetSET OF CHAR VARiCARDINAL BEGIN i0 WHILE (PosLen) AND (CharsPos
IN CharSet'0'..'9') DO i10*i+ORD(CharsPos)-ORD('0') INC(Pos) END RETURN i
END GetNum BEGIN GetParams(Param,Count) Counter 1 IF Coun
t0 THEN Usage END IF ParamCount-1.Classoption THEDEFINITION MODULE Command
(*Command line processor*) FROM SYSTEM IMPORT BYTE TYPE Parclass(name,stri
ng,option) (*Parclass is a best guess style of thing If the parameter is in
quotes it is a string If it follows a '' or a '/' it is an option (there is on
ly ever one option parameter. It is always last, and it contains everything fro
m the / or onwards Everything else is a name (no validity checking performed
*) TextRECORD LengthBYTE(*returns bytes in parameN WITH ParamCount-1 DO
(*Recognise flags*) i0 WHILE iCARDINAL(Length) DO CASE Charsi OF 'I'Expand
TabsTRUE INC(i) 'W'LineWrapTRUE INC(i) PageWidthGetNum(Chars,i,O
RD(Length)) IF PageWidth0 THEN PageWidth80 END (*Check page width is rea
sonable*) IF PageWidth32 THEN WriteLn WriteString(' *** Page width too
narrow ***') WriteLn Usage END 'N'Number RAFBGCHDIEter*) TerminatorCH
AR(*returns next character, or delimiter for strings*) ClassParclass(*class of
parameter*) CASE BOOLEAN OF FALSEFilePosCARDINALErrorNoCARDINAL TRUE
CharsARRAY0..127 OF CHAR END (*parameter - always terminated by a zero
byte, but that byte is not included in the length*) END ParameterPOINTER
TO Text PROCEDURE GetParams(VAR pARRAY OF ParameterVAR countINTEGER) (*crack t
he command line*) VARCommLeng(j) END INC(i) Build(j-i,CommTexti-1,string) I
NC(j) ELSEji+1 WHILE (CommTextj' ') AND(CommTextj',') AND(CommTextj'')
AND(CommTextj'/') AND (jINTEGER(CommLength)) DO INC(j) END Build(j-i,CommTex
tj,name) END(*case*) ij IF CommTexti',' THEN INC(i) END END (*LOOP*) END
GetParams END Command. th80hBYTE CommText81hARRAY0..126 OF CHAR END Comma
nd. d by the IO time anyway*) VARstringMatchString lenCARDINAL nchCHAR i,jC
ARDINAL PartialPosARRAY1..60 OF CARDINAL PartialsCARDINAL BEGIN len0 LOOP
Read(nch) IF (nchBS) OR (nchDEL) THEN IF len0 THEN DEC(len) END ELSIF (nchDel
imiter) OR (lenHIGH(string)) OR (nchCR) OR (nchLF) THEN EXIT ELSE INC(len)
stringlenMODULE Compare (*Compare two files Call is COMPARE old file,new
file,List file The two files are compared line by line lines which have b
een deleted from the old file are printed in italics lines which have been inse
rted are printed in emphasised mode lines which have been moved to a new positi
on are printed in their new position with a box surrounding them You may nee
d to patch the printer control codes for your printer These control codes are a
t about address 104h in the cIMPLEMENTATION MODULE Command (*Command line p
rocessor*) FROM Storage IMPORT ALLOCATE FROM SYSTEM IMPORT ADDRESS VARi,j,kI
NTEGER PROCEDURE GetParams(VAR pARRAY OF ParameterVAR countINTEGER) PROCEDURE
Build(lenINTEGERchCHARcParclass) VARadADDRESS BEGIN ALLOCATE(ad,len+4) pco
untad WITH pcount DO IF jINTEGER(CommLength)THEN Terminator0dx ELSE Terminato
rch END Lengthlen Classc FOR k0 TO len-1 DO CharskCommTexti+k ENDom file (i
.e. very near the beginning) Each control code can be up to 8 characters long
and is terminated by a value of 0 if less than 8 characters is required The
control characters in the supplied program are set for a STAR DPS510, which is
supposed to be Epson compatible, so the program may well run 'as is' on Epsons
and Epson clones The program is based on a method described by Paul Heckel 'A
Technique for Isolating Differences between Files', Communications of the ACM,
Vol 21 No 4, Charslen0x END countcount+1 END Build (*crack the command li
ne*) BEGIN i0 count0 LOOP IF countHIGH(p) THEN EXIT END WHILE (iINTEGE
R(CommLength)) AND (CommTexti' ') DO INC(i) END IF iINTEGER(CommLength) THEN
EXIT END CASE CommTexti OF '','/'(*Option found*) INC(i) Build(INTEGER(CommL
ength)-i,0dx,option) EXIT '"',"'"ji+1 WHILE (CommTextiCommTextj) AND (jIN
TEGER(CommLength)) DO INC RAFBGCHDIE April 1978, pp 264-268. Basically, th
e technique consists of comparing the two files to find all the unique lines in
each which match a unique line in the other. These lines give fixed points fr
om which matching regions can be grown outwards. Once all the regions so produc
ed have been created, any line in the old file which is not attached to a line
in the new file is a deletion. Any line in the new file which is not attached
to a line in the old file is an insertion, while a block moveE ReadStream(VAR
sSTREAMVAR HashHashArray)CARDINAL (* Read in a file and calculate the hash tot
als for the file *) VARiCARDINAL LineARRAY1..80 OF CHAR BEGIN SwitchInStrea
m(s) i0 WHILE (iHIGH(Hash)) AND (NOT EOS(s)) DO ReadLine(Line) INC(i) Has
hiCalcHash(Line) END Reset(s) PopInStream RETURN i END ReadStream P
ROCEDURE Usage BEGIN WriteString('Usage is COMPARE old file,new file')WriteL
n WriteString(' or COMPARE old f is encountered when the lines pointed
to in the old file are further down the file than some other lines which have n
ot yet been processed and which are associated with lines in the new file. *
) FROM SYSTEM IMPORT ADDRESS,ADR,TSIZE FROM Command IMPORT Parameter,Parclas
s,GetParams FROM Files IMPORT FileName,FILE,Lookup,Create FROM Streams IMPORT
Connect,Disconnect,STREAM,input,output,WriteChar, ReadChar,EOS,WriteRec,Reset
FROM TerminalIMPORT WriteString,WriteLn FROM Soile,new file,output file') Writ
eLn WriteLn WriteString(' for example COMPARE ME.BAK ME.MOD')WriteLn HALT E
ND Usage VAROldLink,NewLinkHashArray (*OldLink contains the number of a li
ne in the new file which is linked to a given line in the old file, and vice-ve
rsa An entry contains zero if no link has been made*) PROCEDURE Generate
Links VARi,j,kCARDINAL countCARDINAL BEGIN FOR i1 TO HIGH(OldLink) DO OldLi
nki0 NewLinki0 END (*lookrt IMPORT SortRecords FROM InOut IMPORT WriteCard
,SwitchInStream,SwitchOutStream, PopInStream,PopOutStream,ReadLine CONSTMaxFil
eSize2000(*lines in file max*) FF0cx TAB09x LF0ax CR0dx TYPE PFileNamePOINT
ER TO FileName PrintControlARRAY0..7 OF CHAR VAR (*Printer Control Codes a ze
ro byte terminates*) ItalicsOnPrintControl1bx,'4',0 ItalicsOffPrintControl1b
x,'5',0 BoldOnPrintControl1bx,'E',0 BoldOffPrintControl1bx,'F',0 for all ol
d lines which match exactly one new line*) FOR i0 TO OldLen DO count0 j1 W
HILE (count2) AND (jNewLen) DO IF OldHashiNewHashj THEN INC(count) kj END
INC(j) END IF count1 THEN (*possible match - check that the new line only
matches this old line*) count0 j1 WHILE (count2) AND (jOldLen) DO IF OldHa
shjNewHashk THEN INC(count) END INC(j) END IF count1 THEN (* ListSTREAM
ListFFILE replyINTEGER i,jINTEGER OldsSTREAM OldfFILE NewsSTREAM New
fFILE chCHAR CharPosCARDINAL(*position in line*) (*For each file, we ha
ve an array of hash totals for the lines of the file Using hash totals instead
of the original lines causes a slight chance that lines will match when they sh
ould not, but allows larger files to be compared and also makes it possible to
extend the program in the future to work with reasonable speedthe lines are uni
que and they match - set up cross pointers*) OldLinkki NewLinkik END END (
*IF count1 (the outer one)*) END (*FOR i*) (*at this point, NewLinkij OldLi
neji This condition is central to the whole program*) (*now that the unique
lines are cross-linked, we attempt to 'grow' the links outwards from the cross
-linked lines*) k1 WHILE (kOldLen) DO IF NewLinkk0 THEN (*grow backward
s*) jNewLinkk-1 when one of the files is on a remote machine since then on
ly the hash totals and the altered lines need to be transmitted*) TYPEHashArr
ayARRAY1..MaxFileSize OF CARDINAL VAROldHash,NewHashHashArray OldLen,NewLenCAR
DINAL PROCEDURE CalcHash(VARTextARRAY OF CHAR)CARDINAL VARi,jCARDINAL BEGIN
i0 j0 WHILE (iHIGH(Text)) AND (Texti0x) DO (*add your favourite hashing fun
ction here*) j3*j+ORD(Texti) INC(i) END RETURN j END CalcHash PROCEDUR
RAFBGCHDIEik-1 WHILE (j0) AND (i0) AND (OldLinkj+1i+1) AND (NewHashjOldHashi)
AND (OldLinkj0) AND (NewLinki0) DO OldLinkji NewLinkij (* note central pr
edicate still satisfied*) DEC(i) DEC(j) END jNewLinkk+1 ik+1 (*grow fo
rwards - (slight optimisation) there is no need to check for nonzero links on
the forward pass since non-zero links Lines match and are unique, and the ba
ck pass would be empty*) teEol END Inserted PROCEDURE NoChange BEGIN GetLi
ne(News,newline) GetLine(Olds,oldline) Print(newline) WriteEol END NoChange
PROCEDURE BlockMove VAR iCARDINAL BEGIN FOR i1 TO 25 DO WriteChar(List,'*'
) END Print(' Block moved from line ') SwitchOutStream(List) WriteCard(OldLin
knewindex,6) PopOutStream FOR i25+29+1 TO 79 DO WriteChar(List,'*') END Write
Eol iOldLinknewindex WHILE (newindexNewLen) AND (iOldLinknewindex) DO GetLine
(News,ne WHILE (jNewLen) AND (iOldLen) AND (OldLinkj-1i-1) AND (NewHashjOldHas
hi) DO OldLinkji NewLinkij (*still holds*) INC(i) INC(j) END ki ELSEI
NC(k) END (*WHILE kOldLen*) END (*grow forwards from beginning of files*)
i1 j1 WHILE (iOldLen) AND (jNewLen) AND (OldHashiNewHashj) AND (NewLinki
0) AND (OldLinkj0) DO (*the last line of the condition is probably not nec
essary, but awline) Print(newline) WriteEol INC(newindex) INC(i) END FOR i
1 TO 79 DO WriteChar(List,'*') END WriteEol END BlockMove BEGIN oldindex
1(*current line in old file*) newindex1(*current line in new buffer*) (*Caut
ion Well commented code ahead Programmer probably didn't understand what he wa
s doing *) WHILE (oldindexOldLen) OR (newindexNewLen) DO (*first check if
either index is off end of file*) IF newindexNewLen THEN voids worrying ab
out pathological case*) NewLinkij OldLinkji INC(i) INC(j) END (*grow b
ackwards from end of files*) iOldLen jNewLen WHILE (i0) AND (j0) AND (OldHa
shiNewHashj) AND (NewLinki0) AND (OldLinkj0) DO NewLinkij OldLinkji DEC(i)
DEC(j) END END GenerateLinks PROCEDURE WriteResults VARoldindex,newindex
CARDINAL oldline,newlineARRAY 1..80 OF CHAR PROCEDURE GetLine(VAR sSTREAMVAR
lARRAY Deleted INC(oldindex) ELSIF oldindexOldLen THEN Inserted INC(newinde
x) ELSIF NewLinkoldindex0 THEN Deleted INC(oldindex) ELSIF OldLinknewindex0
THEN Inserted INC(newindex) (*if pointers match, line is unchanged or if a
pointer is zero, line is new or deleted*) ELSIF (NewLinkoldindexnewindex)
AND (OldLinknewindexoldindex) THEN NoChange INC(oldindex) INC(newindex)
(* none of the above pointers don't matchOF CHAR) BEGIN SwitchInStream(s)
ReadLine(l) PopInStream END GetLine PROCEDURE Print(aARRAY OF CHAR) (*
Output a line truncating trailing spaces*) VAR i,jCARDINAL BEGIN i0 j0 WH
ILE (iHIGH(a)) AND (ai0x) DO IF ai' ' THEN FOR jj TO i DO WriteChar(List,aj) E
ND INC(j) END INC(i) END END Print PROCEDURE WriteEol BEGIN (*debug
code commented out SwitchOutStream(List) WriteCard(oldindex,6)WriteCard(NewL
inkoldinde but each pointer points somewhere If the text in the new file
pointed to by the old file has been passed, it has already been written so w
e ignore the old line and look for something more interesting (e.g. a Sco
tsman winning Wimbledon) Because of the central predicate, we know that
NewLinkOldLinknewindexnewindex and OldLinkNewLinkoldindexoldindex *)
ELSIF NewLinkoldindexnewindex THEN SkipOld INC(oldindex) (* so NewLinx
,6) WriteCard(newindex,6)WriteCard(OldLinknewindex,6) PopOutStream *) WriteC
har(List,0dx) WriteChar(List,0ax) END WriteEol PROCEDURE Deleted (*Print
out a line from the old file*) BEGIN GetLine(Olds,oldline) Print(ItalicsOn
) Print(oldline) Print(ItalicsOff) WriteEol END Deleted PROCEDURE SkipOld
BEGIN GetLine(Olds,oldline) END SkipOld PROCEDURE Inserted BEGIN GetLin
e(News,newline) Print(BoldOn) Print(newline) Print(BoldOff) Wri R A F B G
C H D I Ekoldindexnewindex but, if NewLinkoldindexnewindex then OldLi
nknewindexOldLinkNewLinkoldindexnewlink which is not true (since the cross-link
ed case was handled earlier) Hence NewLinkoldindexnewindex and we can leav
e the line till later We must therefore do something with the new line - it
is the start of a moved block *) ELSE BlockMove(*inc of newindex done in
blockmove*) END END(*LOOP*) END WriteResults VARParamARRAY 0..2 OF Parame
ter CountINTEGER PROCEDURE OpenInput(VAR sSTREAMVAR fFILEparamParameter) BE
GIN Lookup(f,FileName(param.Chars),reply) IF reply0 THEN WriteString(' Could
not open ') WriteString(param.Chars) WriteLn HALT END Connect(s,f,input) E
ND OpenInput PROCEDURE OpenFiles BEGIN (*Input the parameters, connect the
files to streams*) GetParams(Param,Count) (*If less than 2 parameters, giv
e usage and exit*) IF Count2 THEN Usage END (MODULE CompBin (*Compare t
wo binary files *) FROMTerminal IMPORT WriteString,WriteLn FROMSmallIO IMPO
RT WriteHex FROMStreams IMPORT Direction FROMQuickStr IMPORT StreamRecord,Open
Streams,OptionsSet FROMSYSTEM IMPORT ADR,BYTE FROMFiles IMPORT FILE,SeqReadB
lock VARIn1,In2FILE Block1,Block2ARRAY 0..127 OF BYTE reply1,reply2INTEGER L
ocCARDINAL i,jCARDINAL PROCEDURE VeryQuick()BOOLEAN (*Open a stream for inp
ut and a stream for output *) VARSARRAY1..2 *If 3 parameters, third parameter i
s file to receive output otherwise, attach output to the printer (LST) *) I
F Count3 THEN Create(ListF,FileName(ParamCount-1.Chars),reply) IF reply0 THEN
WriteString(' Could not create list file') WriteLn HALT END ELSE Create(Li
stF,'LST',reply) END Connect(List,ListF,output) (*Open the files to be comp
ared*) OpenInput(Olds,Oldf,Param0) OpenInput(News,Newf,Param1) END OpenFile
s PROCEDURE ReadOF StreamRecord oOptionsSet BEGIN WITH S1 DO IsStreamFALS
E Dirinput LookupFirstFALSE MustSupplyFALSE FileADR(In1) END WITH S2 DO I
sStreamFALSE DefaultName'CON' Dirinput LookupFirstFALSE MustSupplyTRUE File
ADR(In2) END RETURN OpenStreams(S,o) END VeryQuick BEGIN IF VeryQuick() TH
EN WriteString('Files not found ') WriteLn HALT END Loc0 LOOP SeqReadBloc
k(In1,ADR(Block1),128,reply1) SInputFiles BEGIN WriteString(' Reading old f
ile ') OldLenReadStream(Olds,OldHash) WriteCard(OldLen,5) WriteString(' lines
found')WriteLn WriteString(' Reading new file ') NewLenReadStream(News,NewH
ash) WriteCard(NewLen,5) WriteString(' lines found')WriteLn END ReadInputFile
s BEGIN(*main program*) OpenFiles ReadInputFiles WriteString(' Generat
ing cross links')WriteLn GenerateLinks WriteString(' Listing')WriteLn (*rep
osition streams to beginneqReadBlock(In2,ADR(Block2),128,reply2) WriteHex(Loc,4
) WriteString(0dx) IF (reply1128) OR (reply2128) THEN EXIT END i0 WHILE (i12
8) AND (Block1iBlock2i) DO INC(i) END IF i128 THEN FOR i0 TO 127 BY 8 DO Writ
eHex(Loc+i,4) WriteString('') FOR ji TO i+7 DO WriteHex(Block1j,2) WriteStri
ng(' ') END WriteString(' ') FOR ji TO i+7 DO WriteHex(Block2j,2) WriteStri
ng(' ') END WriteLn Eing*) Reset(News) Reset(Olds) WriteResults Disco
nnect(List,TRUE) END Compare. f less than 8 characters is required The cont
rol characters in the supplied program are set for a STAR DPS510, which is supp
osed to be Epson compatible, so the program may well run 'as is' on Epsons and
Epson clones The program is based on a method described by Paul Heckel 'A Tec
hnique for Isolating Differences between Files', Communications of the ACM, Vol
21 No 4, RAFBGCHDIEND END LocLoc+128 END END CompBin. CHAR CharPosCARDI
NAL(*position in line*) (*For each file, we have an array of hash totals fo
r the lines of the file Using hash totals instead of the original lines causes
a slight chance that lines will match when they should not, but allows larger f
iles to be compared and also makes it possible to extend the program in the fut
ure to work with reasonable speed) TYPE CompClass(Whole,Name,Type) FileRe
cordRECORD DeviceCHAR NameARRAY1..8 OF CHAR TypeARRAY1..3 OF CHAR END PFile
NamePOINTER TO FileRecord FileArrayARRAY1..MaxFiles OF FileRecord VAR ParamAR
RAY1..4 OF Parameter(*area for command line*) CountINTEGER(*parameters*) Lef
tNames,RightNamesFileArray LeftNameCount,RightNameCountINTEGER CompclassComp
ClassWhole OutputAddedBOOLEANFALSE OutputEqualBOOLEANFALSE CompareContentsB(*
Revision History 24 March 86 Dave Moore Fixed compilation errors caused by
upgrading of compiler error checking. Increased MaxFiles to 512. Bugs Fa
ils if more than MaxFiles files are found. This is not a problem under CP/M sin
ce directories fill before that many files are found, but it can cause problem
s under MSDOS (with a Z80 card) *) (*$l-*) MODULE CompDir (*CompDir -
Compare two directories Dave Moore Cerenkof Computing PO Box 305 WynOOLEANF
ALSE OutputDeletedBOOLEANFALSE OutputModifiedBOOLEANFALSE ListOpenBOOLEANFA
LSE ListSTREAM ListFFILE PROCEDURE CrackFileName(TextARRAY OF CHARVAR RecFile
Record) (*Convert the text form of a file name to the expanded form*) VARi,
jCARDINAL BEGIN WITH Rec DO IF Text1'' THEN DeviceCAP(Text0) i2 ELSE Devi
ce' ' i0 END j1 (*pick up file name *) WHILE (iHIGH(Text)) AND(T
exti0x) ANDnum Central 4178 Call is COMPDIR wild card,wild card,list
file options Where each wild card produces one of the lists to compare Fo
r example, to compare two discs, do COMPDIR a*.* b*.* Options are any of the
following Tcompare only file type (by default, the whole name is compared) (by
file type, I mean the (3) characters after the dot) Ncompare only file name C
if file names match, check file contents as well These two options are mutu
ally exclusive (Texti' ') AND(Texti'.') DO IF jHIGH(Name) THEN NamejT
exti END INC(j) INC(i) END FOR jj TO HIGH(Name) DO Namej0x END (*Note tha
t I use zero instead of blank fill to simplify listing of the names*) j1 IF
Texti'.' THEN INC(i) END WHILE (iHIGH(Text)) AND(Texti0x) AND(Text
i' ') DO IF jHIGH(Type) THEN TypejTexti END INC(j) INC(i) END FOR jj TO HI
GH(Type) DO Typej0x EEOutput file names which match to list file AOutput file n
ames which have been added to the second list DOutput file names which have bee
n deleted from the first list MOutput files which have been modified to the lis
t file These options may be combined The program can be very useful for
updating discs based on their existing contents, which is an area in which swee
p is weak. This is a modified and enhanced version of the original CompDir p
rogram which was written for exposiND END(*WITH*) END CrackFileName PROCED
URE Usage BEGIN WriteLn WriteString('Usage is COMPDIR wild card file name')
WriteString(', wild card file name , list file /options') WriteLnWriteLn Wri
teString(' Options are ')WriteLn WriteString('Tcompare only file type ')WriteL
n WriteString('Ncompare only file name')WriteLn WriteString('Ccompare contents
of matching files')WriteLn WriteString('EOutput file names which match to list
file')WriteLn Wtory purposes. The program is written in FTL Modula-2. *)
FROM SYSTEM IMPORT ADDRESS,ADR,TSIZE FROM Command IMPORT Parameter,Parclass,Ge
tParams FROM TerminalIMPORT WriteString,WriteLn,Write FROM Sort IMPORT SortRec
ords FROMFiles IMPORT FileName,FILE,Create FROMGetFilesIMPORT GetNames FROMSt
ringsIMPORT Length FROMStreamsIMPORT STREAM,Connect,Disconnect,WriteChar,Direct
ion IMPORTInOut FROMFileOpsIMPORT FileComp CONSTMaxFiles512(*max files to be
matched* RAFBGCHDIEriteString('AOutput file names which have been added to the
second list')WriteLn WriteString('DOutput file names which have been deleted fr
om the first list')WriteLn WriteString('MOutput file names of modified files ')
WriteLn WriteString('(Implies C option)')WriteLn HALT END Usage PROCEDUR
E GetOptions(pParameter) VARiCARDINAL BEGIN WITH p DO i0 LOOP CASE Charsi
OF 0xEXIT 'T'CompclassType 'N'CompclassName 'E'OutputEquiteString(Name) Wri
teChar(List,'.') InOut.WriteString(Type) InOut.WriteLn END END WriteToList
PROCEDURE WriteName(VAR NFileRecordToListBOOLEAN) (*output a file record as
a valid file name IF Tolist, output it to list as well*) VARiCARDINAL chCH
AR BEGIN WITH N DO IF Device' ' THEN ch'' ELSE ch' ' END Write(Device)
Write(ch) IF ToList THEN WriteChar(List,Device) WriteChar(List,ch) END Wri
teString(Name) WalTRUE 'A'OutputAddedTRUE 'D'OutputDeletedTRUE 'M'OutputModi
fiedTRUE CompareContentsTRUE 'C'CompareContentsTRUE ELSE Usage END(*Usag
e*) INC(i) END END(*WITH*) END GetOptions PROCEDURE Compar(a,bADDRESS)BOO
LEAN (*key comparison routine for the sort module Returns TRUE if a is great
er than b This routine always compares the full name as it is used for sorti
ng. The equality routine only compares the part of thrite('.') WriteString(Typ
e) IF ToList THEN WriteToList(N) END (*Now pad name out to 16 columns*)
FOR iLength(Name)+Length(Type)+4 TO 16 DO Write(' ') END END END WriteName
PROCEDURE PrintLeft BEGIN WriteName(LeftNamesi,OutputDeleted) WriteLn END P
rintLeft PROCEDURE PrintRight BEGIN WriteString(' ') WriteNa
me(RightNamesj,OutputAdded) WriteLn END PrintRight PROCEDURE CompareOK(f1,f
2FileRecord)BOOLEAN VARfn1e name requested by the flags. As a result, a test
for equality should be made first*) VARp,qPFileName BEGIN pPFileName(a) q
PFileName(b) CASE Compclass OF TypeIF p.Typeq.Type THEN RETURN p.Typeq.Type
ELSE RETURN p.Nameq.Name END Name,WholeIF p.Nameq.Name THEN RETURN p.Na
meq.Name ELSE RETURN p.Typeq.Type END END(*CASE*) END Compar PROCEDU
RE Equal(p,qFileRecord)BOOLEAN (*compare to names for equality patterned aft
er,fn2FileName PROCEDURE SetName(fFileRecordVAR fnFileName) VARi,jCARDINAL
PROCEDURE Put(chCHAR) BEGIN fnich INC(i) END Put BEGIN i0 WITH f DO
IF Device' ' THEN Put(Device) Put('') END j1 WHILE (jHIGH(Name)) AND (Name
j0x) DO Put(Namej) INC(j) END j1 Put('.') WHILE (jHIGH(Type)) AND (Typej0x
) DO Put(Typej) INC(j) END WHILE iHIGH(fn) DO Put(' ') END END END SetName
BE the preceding routine*) BEGIN CASE Compclass OF TypeRETURN p.Typeq.T
ype NameRETURN p.Nameq.Name WholeIF p.Nameq.Name THEN RETURN FALSE ELSE
RETURN p.Typeq.Type END END(*CASE*) END Equal PROCEDURE ExpandNames(Para
mParameterVAR NamesFileArray VAR NameCountINTEGER) (*Expand wild card file n
ame into list of files and sort result *) VARi,jINTEGER NameTextARRAY 1..MaxF
iles OF FileName TextARRAY0..5 OF CHAR BEGIN IF (Param.Chars2GIN SetName(f1,
fn1) SetName(f2,fn2) RETURN FileComp(fn1,fn2) END CompareOK VARreplyINTEGE
R BEGIN GetParams(Param,Count) IF (Count0) AND (ParamCount.Classoption) T
HEN GetOptions(ParamCount) DEC(Count) END IF Count2 THEN Usage END
IF Count3 THEN Create(ListF,FileName(Param3.Chars),reply) IF reply0 THEN Wri
teString(' Could not open output file ') WriteString(Param3.Chars) WriteLn HA
LT END Connect(List,ListF0x) AND (Param.Chars1'') THEN Text' *.*' Text0Param
.Chars0 GetNames(Text,NameText,NameCount) ELSE GetNames(Param.Chars,NameText,
NameCount) END (*crack names*) FOR i1 TO NameCount DO CrackFileName(Name
Texti,Namesi) END IF NameCount1 THEN SortRecords(ADR(Names),CARDINAL(NameCo
unt), TSIZE(FileRecord),Compar) END END ExpandNames VARi,jINTEGER PRO
CEDURE WriteToList(VAR NFileRecord) BEGIN WITH N DO InOut.Wr R A F B G C H
D I E,output) InOut.SwitchOutStream(List) ListOpenTRUE ELSE IF OutputAdded O
R OutputDeleted OR OutputEqual OR OutputModified THEN WriteString(' A D E
and M options require output file name$') WriteLn Usage END END ExpandName
s(Param1,LeftNames,LeftNameCount) ExpandNames(Param2,RightNames,RightNameCount)
(*now perform merge pass of two lists*) i1 j1 WHILE (iLeftNameCount) AN
D (jRightNameCount) DO IF Equal(LeftNamesi,RightNamesj) IMPLEMENTATION MODULE F
ileOps FROMSYSTEMIMPORT BYTE,ADR,ADDRESS FROMSTORAGE IMPORT FreeSpace,ALLOCA
TE,DEALLOCATE,RELEASE FROMFilesIMPORT Lookup,Create,SeqReadBlock,SeqWriteBlock,
Close, FILE,FileName FROMTerminal IMPORT WriteString,WriteLn (*Perform some
file operations *) TYPEPBlockPOINTER TO Block BlockARRAY0..127 OF BYTE VAR
b1,b2PBlock i,jCARDINAL BuffSizeCARDINAL replyINTEGER f1,f2FILE reply1,repl
y2INTEGER PROCEDURE SetUp(CountCARDINAL) (THEN WriteName(LeftNamesi,Outpu
tEqual) WriteName(RightNamesj,FALSE) IF CompareContents AND NOT CompareOK(
LeftNamesi,RightNamesj) THEN WriteString(' Files Differ ') IF OutputModified T
HEN WriteToList(LeftNamesi) END END WriteLn INC(i) INC(j) ELSIF NOT Com
par(ADR(LeftNamesi),ADR(RightNamesj)) THEN PrintLeft INC(i) ELSE (*Leftna
mesiRightNamesj*) PrintRight INC(j) END(*IF*) END(*W*Set up 1 or 2 buffers
using all available memory *) BEGIN i(FreeSpace()-1024) DIV 128 IF iCount
THEN WriteString(' Out of Memory in FileOps') WriteLn HALT END ii DIV Count
BuffSize128*i ALLOCATE(b1,BuffSize) IF Count2 THEN ALLOCATE(b2,BuffSize) END
END SetUp PROCEDURE FreeUp(iCARDINAL) (*release buffers - used to dispose th
em but now does a release which is faster. As a result parameter is not require
d *) BEGIN RELEASE(ADDRESS(b1)) END FreeUp HILE*) (*process stragglers*)
WHILE iLeftNameCount DO PrintLeft INC(i) END WHILE jRightNameCount DO
PrintRight INC(j) END IF ListOpen THEN Disconnect(List,TRUE) END END Comp
Dir. Files IMPORT FILE,SeqReadBlock VARIn1,In2FILE Block1,Block2ARRAY 0..12
7 OF BYTE reply1,reply2INTEGER LocCARDINAL i,jCARDINAL PROCEDURE VeryQuick()
BOOLEAN (*Open a stream for input and a stream for output *) VARSARRAY1..2
PROCEDURE FileComp(fn1,fn2ARRAY OF CHAR)BOOLEAN (*Compare two files - retur
n TRUE if equal *) VARiINTEGER BEGIN SetUp(2) Lookup(f1,FileName(fn1),reply)
IF reply0 THEN FreeUp(2) RETURN FALSE END Lookup(f2,FileName(fn2),reply)
IF reply0 THEN FreeUp(2) RETURN FALSE END LOOP SeqReadBlock(f1,ADR(b1),
BuffSize,reply1) SeqReadBlock(f2,ADR(b2),BuffSize,reply2) IF reply1reply2 THEN
FreeUp(2) RETURN FALSE END IF reply10 THEN DEFINITION MODULE FileOps (*P
erform some file operations *) PROCEDURE FileComp(f1,f2ARRAY OF CHAR)BOOLEAN
(*Compare two files - return TRUE if equal IF either file is not present,
FALSE is returned FALSE is still returned if neither file is present *) PROC
EDURE FileMove(f1,f2ARRAY OF CHAR)BOOLEAN (*Move f1 to f2 - returns TRUE if s
uccessful *) END FileOps. FreeUp(2) RETURN TRUE END FOR i0 TO repl
y1-1 DO IF b1ib2i THEN FreeUp(2) RETURN FALSE END END END(*LOOP*) END F
ileComp PROCEDURE FileMove(fn1,fn2ARRAY OF CHAR)BOOLEAN BEGIN SetUp(1) Looku
p(f1,FileName(fn1),reply) IF reply0 THEN WriteString(' Input file not found ')
WriteLn FreeUp(1) RETURN FALSE END Create(f2,FileName(fn2),reply) IF repl
y0 THEN WriteString(' Directory full ') WriteLn FreeUp(1 RAFBGCHDIE) RETURN
FALSE END LOOP SeqReadBlock(f1,ADR(b1),BuffSize,reply1) IF reply10 THEN Cl
ose(f1) Close(f2) FreeUp(1) RETURN TRUE END SeqWriteBlock(f2,ADR(b2),BuffSi
ze,reply2) IF reply2reply1 THEN WriteString(' Disc full ') WriteLn FreeUp(1)
RETURN FALSE END END END FileMove END FileOps. RB 0TESTNESTMOD gR S
MALLIO REL B 8BUILDLIBBAT y,name) IF f.fcbdn0 THEN DevChar' ' ELSE DevCharCH
R(ORD(f.fcbdn)+(ORD('A')-1)) END (*Now scan for matching names*) iBDOS(s
dafc,ADR(dma))(*set dma buffer address*) iBDOS(sfofc,ADR(f))(*start search*) C
ount0 WHILE i255 DO j0 IF DevChar' ' THEN name0DevChar name1'' j2 END WI
TH dmai DO k1 WHILE (kHIGH(dirfn)) AND (dirfnk' ') DO namejdirfnk INC(j) IN
C(k) END namej'.' k1INC(j) WHILE (kHIGH(dirft)) AND (dirftk' ') DO namejdir
ftk INC(j) INC(k) END END (*WITH DMA*) FOR jj TO HIGH(name) DO namej' ' END
namesCountname INC(Count) iBDOS(snofc,ADR(f))(*go to next*) END (*WHILE i25
5*) iBDOS(sdafc,80H)(*reset to default*) END SearchForFileNames BEGIN
(* Convert Pattern to a file name*) jHIGH(Pattern) WildCardFALSE IF jHIGH(n
ame) THEN jHIGH(name) END FORDEFINITION MODULE GetFiles (*Get a list of file
names meeting a wildcard description*) FROM Files IMPORT FileName PROCEDURE G
etNames(PatternARRAY OF CHAR VARnamesARRAY OF FileNameVAR countINTEGER) (*Pa
ttern is a pattern to use for the search names returns a list of matching file
name (with no device name on the front) count returns number of names returned
in names If the given name contains no wild card, it is always returned as
the only match, whether it exists or not i0 TO j DO nameiPatterni IF (name
i'*') OR (namei'') THEN WildCardTRUE END END FOR ii+1 TO HIGH(name) DO namei'
' END IF WildCard THEN SearchForFileNames ELSE Count1 names0name END END
GetNames END GetFiles. p DO i0 LOOP CASE Charsi OF 0xEXIT 'T'CompclassTy
pe 'N'CompclassName 'E'OutputEqu While this means that this routine cannot be
used to check for the existence of a file, it can be used to convert a paramet
er to a filename as required by the module Files *) END GetFiles. arameter(*a
rea for command line*) CountINTEGER(*parameters*) LeftNames,RightNamesFileAr
ray LeftNameCount,RightNameCountINTEGER CompclassCompClassWhole OutputAdded
BOOLEANFALSE OutputEqualBOOLEANFALSE CompareContentsBDEFINITION MODULE Import
(*This module allows you to pick up information about symbols exported from
another module. It is used by the assembler Copyright (C) Dave Moore, FTL Modu
la-2 1986 This is a generic module *) FROMSYSTEM IMPORT BYTE,ADDRESS FROMFi
les IMPORT FileName TYPEalfa ARRAY1..32 OF CHAR typeclass(inttype,realtype,
chartype,booltype, arraytype,recordtype,subrtype,forwardref,pointtype, settype
,stringtype,wordtype,bytetype,prtype,enumtype, cardtype,addrtIMPLEMENTATION MOD
ULE GetFiles FROM CPM IMPORT BDOS,BDOSHL,sfofc,snofc,fcb,sdafc FROM CPMBIOS IM
PORT directory FROM SYSTEM IMPORT ADR FROM Files IMPORT ConvertFileName (*Get
a list of file names meeting a wildcard description*) VARi,j,kINTEGER ffcb n
ameFileName DevCharCHAR WildCardBOOLEAN PROCEDURE GetNames(PatternARRAY OF CH
ARVAR namesARRAY OF FileName VAR CountINTEGER) VARdmaARRAY 0..3 OF directory
PROCEDURE SearchForFileNames BEGIN ConvertFileName(f RAFBGCHDIEype,unknow
ntype,intorcard) pnamePOINTER TO name pparamPOINTER TO param paramRECORD v
arparBOOLEAN vartypepname nextpparam openarrayBOOLEAN END object ( (* types
of symbol table entrys *) constant, prozedure, funktion, variable, tipe,stdpr
oc,stdfunc,modclass,linkclass,forrefer ) vformBYTE nameRECORD lowerpname up
perpname exportlinkpname ntypepname CASE nameclassobject OF constantvaluINTE
GER CASE INTEGER OF 0actIMPLEMENTATION MODULE Import (* A module to perfor
m exports and imports for modula-2 programs. This module will read SYM files
created by the FTL Modula-2 compiler This module does not contain all the
code required to import multiple symbol tables. For this reason, if you use thi
s module to import several symbol tables, they will not be linked together cor
rectly. This means that you cannot do type checking using this module. Let m
e explain that more thoroughly. Each SYM Table cvalINTEGER enumBOOLEAN 1rval
REAL END prozedure,funktion padrINTEGER forrefBOOLEAN codeadrINTEGER procm
odBYTE existopenBOOLEAN variableaddrsINTEGER groupBYTE formvform tipesi
zeINTEGER CASE classtypeclass OF arraytypeelemtypepname indextypepname(*nil
none*) recordtypesubfieldspname subrtype,enumtypelowINTEGER highINT
EGER btypepname pointtype,settomtains a copy of every declaration which is
used in the SYM table. For example, it you import BYTE from SYSTEM, there is a
copy of the declaration for BYTE. A symbol like BYTE is likely to be imported
by a number of different symbol tables and so several copies of the declaratio
n will exist. In the compiler, all these are linked together so that BYTE only
has one active definition. Otherwise, variables of type BYTE imported from dif
ferent modules would not be compatible. Nor does it ypereftypepname prtypep
rparspparam unknowntype,forwardreftmodnoINTEGER END stdprocstdordINTEGER s
tdfunc genlistpname stdclassBYTE partypepname compatBYTE CASE INTEGER OF 0
funcnoBYTE 1funcdopBYTEfuncconstINTEGER 2funcmopBYTE END modclassmagicINTE
GER(*magic number*) nextmodulepname(*next imported module*) modnamespname(*sym
bol table*) modlistpname(*linked list of names*) contain the code to process t
he import list *) FROMFastMove IMPORT Moveup FROMStorage IMPORT ALLOCATE FRO
MTerminal IMPORT WriteString,WriteLn FROMSYSTEM IMPORT ADR FROMFiles IMPORT Lo
okup,SeqReadBlock,Close,FILE CONSTBiggestFile8191(*biggest sym file readable*)
VAR COMPLINKpname PLINK,LASTLINK,nlinkpname RELOFF,GLOBRELOFF,RELBASE
CARDINAL SIDalfa HIDEALLBOOLEANFALSE HIDEOTHERSBOOLEAN NEWMODNAMEpname
MODULENAMEalfa MODULEPNTpname DISPanonlistpname(*anonymous names*) modbase
CARDINAL(*for table relocation*) globalbaseCARDINAL(*for global relocation*) m
oddebugBOOLEAN(*true if compiled with debug*) (*The following variables give
the state of the variables after the def module is compiled*) mdgroupnoINTE
GER(*number of variable groups*) mdconstnoINTEGER(*number of constants *) mdla
bnoINTEGER(*number of procedures*) mdmodulenoINTEGER(*number fo next imported m
odule*) mdreLAY pname LASTNAME pname NAMEPNTpname (*Symbol table entrie
s consist of a NAME record preceded by a identifier length BYTE preceded by the
identifier stored backwards. The top bit of the length is set to 'hide' the i
dentifier. The second top bit is used to mark accessible symbols though this i
s not done by this version of the import module *) PROCEDURE HIDE(pADDRESS)
(*Hide an identifier An identifier is hidden by setting the top bit of t
he byte preceding the poiloffsetINTEGER(*rel code buffer pointer*) mdrelblockIN
TEGER(*and block number*) linkclasslinkpname END END VARIDalfa PROCE
DURE RETRNAME(PADDRESS) PROCEDURE LOOKUP(idalfatabpname)pname PROCEDURE LOADFI
LE(fnFileName)pname END Import. F Q EWriteName(RightNamesj,OutputAdded) Wri
teLn END PrintRight PROCEDURE CompareOK(f1,f2FileRecord)BOOLEAN VARfn1 R
AFBGCHDIEnter *) BEGIN pADDRESS(CARDINAL(p)-1) IF p128 THEN pp+128 END END H
IDE PROCEDURE UNHIDE(pADDRESS) (*Hide an identifier An identifier is hidd
en by setting the top bit of the byte preceding the pointer *) BEGIN pADDRESS
(CARDINAL(p)-1) IF p128 THEN pp-128 END END UNHIDE PROCEDURE RETRNAME(pADDRES
S) VARiINTEGER lenINTEGER BEGIN pADDRESS(CARDINAL(p)-1) lenORD(p) (*clear
top two bits *) IF len128 THEN lenlen-128 END IF len64 TlinkRELPNTR(link)
END (*case nameclass*) nlinkexportlink END END (*while nlinknil*)
END RELOCATE (*relocate*) PROCEDURE READFILE(fnFileName)BOOLEAN TYPEBlockARRA
Y0..127 OF BYTE pBlockPOINTER TO Block VARfFILE replyINTEGER FirstBOOLEAN p
pBlock bARRAY0..BiggestFile OF BYTE BEGIN reply1 WHILE (replyHIGH(fn)) AND (
fnreply'.') AND (fnreply' ') AND (fnreply0x) DO INC(reply) END IF replyHIGH(
fn) THEHEN lenlen-64 END IF len32 THEN lenlen-32 END FOR i1 TO len DO pADDR
ESS(CARDINAL(p)-1) IDiCHR(p) END FOR ilen+1 TO HIGH(ID) DO IDi' ' END END RE
TRNAME PROCEDURE LOOKUP(LIDalfaTABLEpname)pname BEGIN LASTNAMENIL LOOP
IF TABLENIL THEN EXIT END LASTNAMETABLE RETRNAME(TABLE) IF IDLID THEN TABLETA
BLE.upper ELSIF IDLID THEN TABLETABLE.lower ELSE EXIT END END RETURN TABLE
END LOOKUP PROCEDURE RELPNTR(FIELDN RETURN FALSE END IF fnreply'.' THEN IF (r
eply+3)HIGH(fn) THEN RETURN FALSE END fnreply'.' fnreply+1'S' fnreply+2'Y' f
nreply+3'M' fnreply+4' ' END Lookup(f,fn,reply) IF reply0 THEN WriteString
(' File not found')WriteString(fn)WriteLn RETURN FALSE END (*Read the data
*) SeqReadBlock(f,ADR(b),SIZE(b),reply) IF reply0 THEN WriteString('SYM Fil
e Empty ')WriteLn RETURN FALSE END IF replySIZE(b) THEN WriteSADDRESS)ADDRE
SS (*Relocate a pointer There are two areas which the pointer may need
relocating relative to (see Churchill). The globals symbol table and the local
symbols table. The global symbol table is assumed to be lower in memory*) VA
RaADDRESS BEGIN IF FIELDSNIL THEN aNIL ELSIF CARDINAL(FIELDS)RELBASE T
HEN aADDRESS(CARDINAL(FIELDS)-GLOBRELOFF) ELSE aADDRESS(CARDINAL(FIELDS)-RELO
FF) END RETURN a END RELPNTR PROCEDURE RELOCATE String(' SYM file
too large ') WriteLn RETURN FALSE END ALLOCATE(p,reply) Moveup(ADR(b),p,re
ply) GLOBRELOFF0 NEWMODNAMEpname(CARDINAL(p)+ORD(b0)+2) RETRNAME(NEWMODNAME)
RELOFFNEWMODNAME.modbase-CARDINAL(p) RELBASENEWMODNAME.modbase Close(f) RETU
RN TRUE END READFILE PROCEDURE ENTERNAME VARSIDalfa BEGIN RETRNAME(COMPLIN
K) SIDID NAMEPNTLOOKUP(ID,DISPLAY) IF LASTNAMENIL THEN DISPLAYCOMPLINK ELS
E RETRNAME(LASTNAME) IF ID (* Relocate one of the entry lists just entered
Also, if any entry is a link, replace pointer by pointer to linked obje
ct*) VAROLDPARpparam BEGIN WHILE nlinkNIL DO WITH nlink DO RETRNAME(n
link) ntypeRELPNTR(ntype) lowerRELPNTR(lower) upperRELPNTR(upper) expor
tlinkRELPNTR(exportlink) CASE nameclass OF tipe CASE class OF arr
aytype elemtypeRELPNTR(elemtype) indextypeRELPNTR(indextype) SID THEN LA
STNAME.upperCOMPLINK ELSE LASTNAME.lowerCOMPLINK END END COMPLINK.upperNIL C
OMPLINK.lowerNIL END ENTERNAME PROCEDURE MERGENAMES (* merge
the names pointed to by complink into the table one below the top of the dis
play Note that the heap is not cut back since that has already been
done by the compress routine, if required*) VAR Ppname BEGIN COMPLINKNEWMODN
AME.modlist WHILE (COMPLINKNIL) DO ENTERNAME COMPLINK recordtype subfie
ldsRELPNTR(subfields) subrtype,enumtype btypeRELPNTR(btype) poi
nttype,settype reftypeRELPNTR(reftype) prtype prparsRELPNTR(prpars)
OLDPARprpars WHILE OLDPARNIL DO WITH OLDPAR DO vartypeRELPNTR(vartype)
nextRELPNTR(next) OLDPARnext END END END (*case class*)
linkclass RAFBGCHDIECOMPLINK.exportlink END END MERGENAMES PROCEDU
RE LOADFILE(fnFileName)pname (* load a file to be imported relocate t
he entries *) VAR TIDalfa BEGIN DISPLAYNIL GLOBRELOFF0 IF NOT READFI
LE(fn) THEN RETURN NIL END (*newmodname points to entry for first mo
dule name which is the name of the module being loaded it is followe
d by a chain of names of modules imported by that module in the cas
e of the first module, we m(*keep a circular buffer of characters while matching
is happening*) PROCEDURE WaitForCh BEGIN IF NOT ShowChange THEN ShowCh
angeTRUE OutputToScreen(TRUE) Redisplay END REPEAT BusyRead(ch) UNTIL ch0x
END WaitForCh PROCEDURE CheckInterrupt()BOOLEAN (*Check the keyboard for a
n interupt (Control U) Also, if Escape has been typed, stop terminal output
until another character is typed*) VARch1CHAR BEGIN BusyRead(ch1) CASE ch1
OF 15xRETURNust set the numbers of the variables to moduleno but this
is irrelevant for the other modules as the variables cannot be accessed
unless explicitly imported *) COMPLINKNEWMODNAME WHILE COMPLINKNIL DO
WITH COMPLINK DO RETRNAME(COMPLINK) modlistRELPNTR(modlist) anonlistRELPN
TR(anonlist) nlinkmodlist RELOCATE nlinkanonlist RELOCATE nextmoduleRELP
NTR(nextmodule) COMPLINKnextmodule END END MERGENAMES NE TRUE
1bxShowChangeFALSE OutputToScreen(FALSE) END RETURN FALSE END CheckInter
rupt PROCEDURE GetAChar(VAR ch1CHAR) BEGIN IF MacroDepth0 THEN WaitForCh ch
1ch IF Learning AND (LearnLenHIGH(Text)) THEN INC(LearnLen) TextLearnLench E
ND ELSE WITH MacroStackMacroDepth DO IF PosDef.Length THEN DEC(Count)
IF CheckInterrupt() OR NOT Found THEN MacroDepth1 Count0 END IF Count
1 THEN WMODNAME.modnamesDISPLAY RETURN NEWMODNAME END LOADFILE END
Import. BAK wQ " ANSI SYSmg sASSIGN COMmg ATTRIB EXEmg £))(*go to
next*) END (*WHILE i255*) iBDOS(sdafc,80H)(*reset to default*) END Search
ForFileNames BEGIN (* Convert Pattern to a file name*) jHIGH(Pattern) Wi
ldCardFALSE IF jHIGH(name) THEN jHIGH(name) END FORDEC(MacroDepth) ELSE
Pos1 END GetAChar(ch1) ELSE ch1Def.CommCharsPos INC(Pos) END END END
END GetAChar PROCEDURE AddMacro(pPKeyDefrepeatINTEGER) BEGIN IF (pNIL) AND
(MacroDepthHIGH(MacroStack)) THEN (*make sure that macro is not recursive*)
FOR i1 TO MacroDepth DO IF MacroStacki.Defp THEN ErrorMessage('Recursive m
acros!',' ') MacroDepth0 RETURN END END INC(MacroDepth) IMPLEMENTATION MODU
LE Macros (*This is a special version of macros for machines which do not ha
ve function keys at all, so do not need the extra code for function key detecti
on*) FROMDoMenu IMPORT GetString,Redisplay FROMStorage IMPORT ALLOCATE,DEAL
LOCATE FROMTerminal IMPORT BusyRead,WriteString,WriteLn,Write FROMFiles IMPORT
FILE,SeqReadBlock,SeqWriteBlock,Lookup,Create,Close FROMSYSTEM IMPORT ADR,TSIZ
E FROMEditDisplay IMPORT ErrorMessage FROMFastMove IMPORT Moveup FROMSc WITH
MacroStackMacroDepth DO Pos1 Defp Countrepeat END(*WITH*) END(*pNIL etc*)
END AddMacro VARSpecialSequenceBOOLEANFALSE PROCEDURE ReadAChar(VAR ResultCHAR
) (*read next character, checking for arrows/function keys in and out point
to the characters which have been read ahead By ReadAChar in an attempt to reso
lve a macro When ReadAChar is entered, if this buffer is not empty, the firs
t character is to be looked up to see if it is a start of areenIO IMPORT Outpu
tToScreen CONSTBlockLen128 ESC1bx TYPE KeyDefRECORD Length1..61 CommCharsA
RRAY1..20 OF CHAR END PKeyDefPOINTER TO KeyDef MacroPointRECORD PosCARDINAL
DefPKeyDef CountINTEGER END VAR chCHAR CommandsARRAY''..'Z' OF PKeyDef
MacroDepthCARDINAL0 MacroStackARRAY1..5 OF MacroPoint LearnchCHAR LearnLenCAR
DINAL LearningBOOLEANFALSE TextARRAY1..60 OF CHAR iCARDINAL ShowChangeBOOLEA
N RAFBGCHDIE key definition*) BEGIN GetAChar(Result) END ReadAChar PR
OCEDURE GetDefChar VARTextARRAY1..1 OF CHAR BEGIN GetString(Text,LearnLen,'Ch
ar to define') LearnchCAP(Text1) END GetDefChar PROCEDURE DefMacroText VARpP
KeyDef BEGIN IF LearnLen0 THEN ALLOCATE(p,TSIZE(CARDINAL)+LearnLen) Commands
Learnchp WITH p DO LengthLearnLen FOR LearnLenLearnLen TO 1 BY -1 DO CommCh
arsLearnLenTextLearnLen END END END END DefMsequences*) IF reply0 THEN B
lockreply0x SeqWriteBlock(F,ADR(Block),BlockLen,reply) END Close(F) END St
oreMacros PROCEDURE OutCh(chCHAR) BEGIN IF ch' ' THEN Write('')Write(CHR(ORD
(ch)+64)) ELSE Write(ch) END END OutCh PROCEDURE PrintMacros BEGIN FOR ch
'A' TO 'Z' DO IF CommandschNIL THEN WITH Commandsch DO OutCh(ch) FOR i1
TO Length DO OutCh(CommCharsi) END END WriteLn END END WracroT
ext PROCEDURE LearnMacro (*Learn a macro definition called at either end of
definition*) BEGIN IF NOT Learning THEN GetDefChar LearningTRUE LearnLen
0 ELSE LearnLenLearnLen-2 DefMacroText LearningFALSE END END LearnMacro P
ROCEDURE DefMacro BEGIN GetDefChar IF (Learnch'A') AND (Learnch'Z') OR (Learn
chESC) THEN GetString(Text,LearnLen,'Macro') DefMacroText END END DefMacro
PROCEDURE Macro(chCHARrepeatINTEGER) VARiiteString(' Enter any character to con
tinue ') WaitForCh END PrintMacros BEGIN ShowChangeTRUE FOR ch'' TO 'Z' DO
CommandschNIL END Lookup(F,'MACROS.DAT ',reply) IF reply0 THEN LoadMacros EN
D END Macros. DISC2 BAT ! LDISC3 BAT u! .upper ELSIF IDLID THEN TABLETABL
E.lower ELSE EXIT END END RETURN TABLE END LOOKUP PROCEDURE RELPNTR(FIELDCA
RDINAL BEGIN chCAP(ch) IF ch' ' THEN chCHR(ORD(ch)+64) END IF (ch'') AND (ch
'Z') THEN AddMacro(Commandsch,repeat) END END Macro VARFFILE replyINTEGER
PROCEDURE LoadMacros VARBlockARRAY0..BlockLen-1 OF CHAR BEGIN LOOP SeqReadBl
ock(F,ADR(Block),BlockLen,reply) IF replyBlockLen THEN EXIT END reply0 WHILE
Blockreply0x DO LearnLenORD(Blockreply) LearnchBlockreply+1 replyreply+2 FOR
i1 TO LearnLen DO TextiBlockreply INC(reply) END DefMacroText END END EN
D LoadMacros PROCEDURE StoreMacros VARBlockARRAY0..BlockLen-1 OF CHAR PROCE
DURE StoreOneMacro(pPKeyDef) BEGIN IF pNIL THEN WITH p DO IF (reply+Length+1
4)BlockLen THEN Blockreply0x SeqWriteBlock(F,ADR(Block),BlockLen,reply) reply
0 END BlockreplyCHR(Length) Blockreply+1Learnch replyreply+2 FOR i1 TO Leng
th DO BlockreplyComMODULE MyLU (*Dave Moore's own version of LU for use with
his Modula-2 compiler *) FROMTerminal IMPORT WriteString,WriteLn,ReadString
,Write FROMFiles IMPORT FILE,ReadBlock,WriteBlock,Lookup,Create,FileName, Seq
ReadBlock,SeqWriteBlock,ConvertFileName,Close, MakeBAK,SetBlock,Devicetype FRO
MSmallIO IMPORT ReadCard,WriteCard,WriteHex FROMSYSTEM IMPORT BYTE,ADR,TSIZE
FROMCPMIMPORT fcb,alfa,exten,opnfc,BDOS FROMStrings IMPORT Length FROMStorage
IMPORT ALLOCATE TYPE IndmCharsi INC(reply) END END(*WITH p*) END (*IF NIL*
) END StoreOneMacro BEGIN Learnch'A' WHILE (CommandsLearnchNIL) AND (Learnch
'Z') DO LearnchCHR(ORD(Learnch)+1) END IF Learnch'Z' THEN RETURN END Create
(F,'MACROS.DAT ',reply) IF reply0 THEN WriteString(' could not save macros fil
e') WriteLn RETURN END IF reply0 THEN RETURN END reply0 FOR Learnch'A' TO
'Z' DO StoreOneMacro(CommandsLearnch) END (*Now output key RAFBGCHDIEexReco
rdRECORD StatusBYTE BaseNamealfa Extexten StartSectorCARDINAL LengthCARDINA
L DateCARDINAL TimeCARDINAL ScrunchedBOOLEAN Filler ARRAY 1..11 OF BYTE END
IndexARRAY1..128 OF IndexRecord VARLibFILE LibNameFileName replyINTEGER Di
rectoryIndex SlotsCARDINAL NextSectorCARDINAL i,jCARDINAL CommandCHCHAR FNa
meFileName PROCEDURE ReadCommand (*read an input command, return command lette
r in CommandCH return file n,OutPosCARDINAL chCHAR EofBOOLEAN PROCEDURE Ente
rId(sARRAY OF CHAR) VARrPName i,jCARDINAL BEGIN jLength(s) ALLOCATE(r,j+TSI
ZE(CARDINAL)+TSIZE(PName)+1) r.CodeCode WITH r DO NextTable Tabler FOR i0
TO j-1 DO Textisi END Textj0x END END EnterId PROCEDURE EnterGId(LenCARDINA
LsARRAY OF CHAR) VAR i,jCARDINAL idIdent BEGIN i0 WHILE (iHIGH(s)) DO FOR
ji TO i+Len-1 DO idj-isj END idLen0xame in FName*) VARTextARRAY1..20 OF CHAR
i,jCARDINAL BEGIN WriteString('Command') ReadString(Text) CommandCHCAP(Tex
t1) i2 WHILE (iHIGH(Text)) AND (Texti' ') DO INC(i) END j0 WHILE (jHIGH(F
Name)) AND (iHIGH(Text)) AND (Texti0c) DO FNamejCAP(Texti) INC(j) INC(i) END
WHILE jHIGH(FName) DO FNamej' ' INC(j) END END ReadCommand PROCEDURE Ad
dEntry(NamefcbPosition,Size,EDate,ETimeCARDINALScBOOLEAN) VARi, EnterId(id) I
NC(Code) ii+Len END END EnterGId PROCEDURE SetUpNames VARsIdent PROCEDURE
PutId BEGIN si0x EnterId(s) INC(Code) END PutId BEGIN Code128 EnterGId(2
,'BYDOIFINOFORTO') EnterGId(3,'ANDDIVENDFORMODNOTSETVARADR') EnterGId(4,'CASEE
LSEEXITFROMLOOPTHENTYPEWITHHIGHCHARTRUE') EnterGId(5,'ARRAYBEGINCONSTELSIFUNTIL
WHILEFALSE') EnterGId(6,'EXPORTIMPORTMODULERECORDREPEATRETURN') EnterGId(7,'PO
INTERWriteLnINTEGERADDRESSBOOLEAN') EnterGIdjCARDINAL BEGIN i2 WHILE (iSlots
) AND (Directoryi.Status0ffh) DO INC(i) END IF iSlots THEN WriteString(' Direc
tory full - redo with more slots') WriteLn HALT END WITH Directoryi DO Stat
us0 BaseNameName.fcbfn ExtName.fcbft StartSectorPosition LengthSize DateEDa
te TimeETime ScrunchedSc FOR j1 TO HIGH(Filler) DO Fillerj0 END END END Add
Entry PROCEDURE FindName(ffcb)CARDINAL (*find a name - return 0 if (8,'CARDINA
LTerminal') EnterGId(9,'PROCEDUREQUALIFIEDCopyright') EnterId('DEFINITION')INC
(Code) EnterId('WriteString')INC(Code) (*Enter tab codes*) FOR i1 TO 6 DO si
-109x PutId END (*enter space sequences*) s0' ' FOR i2 TO 6 DO si-1' ' Pu
tId END (*Enter CR/LF code*) s00dx s10ax i2 PutId FOR i3 TO 6 DO si-109x
PutId END END SetUpNames PROCEDURE GetChar VARreplyINTEGER BEGIN IF In
PosHIGnot found *) VARiCARDINAL BEGIN i2 LOOP IF iSlots THEN RETURN 0 END
WITH Directoryi DO IF (Status0) AND (BaseNamef.fcbfn) AND (Extf.fcbft) THEN RE
TURN i END END INC(i) END END FindName PROCEDURE Transfer(VAR From,ToFILEM
axSectorsCARDINAL)CARDINAL VARi,jCARDINAL replyINTEGER BufferARRAY0..1023 OF
BYTE BEGIN j0 LOOP IF MaxSectors8 THEN i8*128 ELSE iMaxSectors*128 END SeqR
eadBlock(From,ADR(Buffer),i,reply) IF reH(BufferIn) THEN SeqReadBlock(From,ADR
(BufferIn),SIZE(BufferIn),reply) InPos0 END chBufferInInPos (*WriteCard(InPo
s,4)WriteString(' ')WriteHex(ORD(ch),4)WriteLn*) INC(InPos) END GetChar PROCE
DURE FlushOut VARreplyINTEGER iCARDINAL BEGIN IF OutPos0 THEN RETURN END i1
28*((OutPos+127) DIV 128) IF iHIGH(BufferOut) THEN iHIGH(BufferOut) END WHILE
OutPosi DO BufferOutOutPos1ax INC(OutPos) END INC(i) SeqWriteBlock(To,ADR(B
ufferOut),ply0 THEN EXIT END SeqWriteBlock(To,ADR(Buffer),reply,reply) jj+CARD
INAL(reply) DIV 128 IF MaxSectors8 THEN EXIT END MaxSectorsMaxSectors-8 END
RETURN j END Transfer PROCEDURE UnScrunch(VAR From,ToFILE) TYPEPNamePOINTER T
O Name IdentARRAY0..60 OF CHAR NameRECORD CodeCARDINAL NextPName TextIdent
END VARi,jCARDINAL replyINTEGER BufferIn,BufferOutARRAY0..1023 OF BYTE Tabl
ePName pPName CodeCARDINAL IdIdent InPos RAFBGCHDIEi,reply) OutPos0 END F
lushOut PROCEDURE PutChar(chCHAR) BEGIN IF OutPosHIGH(BufferIn) THEN FlushOut
END BufferOutOutPosch INC(OutPos) END PutChar PROCEDURE GetCode BEGIN C
ode0 IF ch' ' THEN CodeORD(ch)*256 GetChar END CodeCode+ORD(ch) END GetCod
e PROCEDURE PutId VARiCARDINAL pPName BEGIN GetCode pTable WHILE (pNIL) A
ND (p.CodeCode) DO pp.Next END IF pNIL THEN WriteString(' error in PutId'
) Writerectoryi DO Status0ffh BaseName' ' Ext' ' END END WITH Di
rectory1 DO Status0 LengthSlots DIV 4 StartSector0 END NextSectorSlots DIV
4 END GetSlotCount PROCEDURE OpenLibrary (*open the library file *) BEGIN W
riteString(' Enter name of library file') ReadString(LibName) Lookup(Lib,LibNa
me,reply) IF reply0 THEN WriteString(' Could not find that file - create it ')
IF Yes() THEN Create(Lib,LibName,reply) Card(Code,4) WriteString(Table.Text
) WriteLn RETURN END i0 WITH p DO WHILE Texti0x DO PutChar(Texti) INC(i)
END END END PutId PROCEDURE DefCode VARIdIdent iCARDINAL BEGIN GetChar
IF ch0x THEN EofTRUERETURN END i0 WHILE ch0x DO Idich PutChar(ch) GetChar
INC(i) END Idi0c GetChar GetCode EnterId(Id) END DefCode BEGIN TableN
IL SetUpNames j0 InPosHIGH(BufferIn)+1IF reply0 THEN WriteString(' could not
create it either') WriteLn HALT END GetSlotCount ELSE WriteString(' run c
ancelled') WriteLn HALT END ELSE ReadBlock(Lib,ADR(Directory),0,SIZE(Direct
ory),reply) Slots4*Directory1.Length WriteCard(Slots,4)WriteString(' slots fou
nd')WriteLn NextSector0 FOR i1 TO Slots DO WITH Directoryi DO IF Status0ffh
THEN jLength+StartSector IF jNextSector THEN NextSector OutPos0 GetChar Eof
FALSE LOOP IF ch0x THEN DefCode ELSIF (ch07fx) OR (ch' ') THEN PutId ELSE P
utChar(ch) END GetChar IF Eof THEN EXIT END END FlushOut END UnScrunch PRO
CEDURE DoAddition(VAR fFILEScBOOLEAN) VARi,jCARDINAL BEGIN iFindName(f.f) IF
i0 THEN Directoryi.Status0ffh END SetBlock(Lib,NextSector) jNextSector NextS
ectorNextSector+Transfer(f,Lib,65535) Close(f) AddEntry(f.f,j,NextSector-j,0,
0,Sc) END DoAdditionj END END END END END END OpenLibrary PROCEDURE Close
Library BEGIN WriteBlock(Lib,ADR(Directory),0,128*(Slots DIV 4),reply) Close(
Lib) END CloseLibrary PROCEDURE DeleteFile(fnARRAY OF CHAR) VARffcb iCARDINA
L BEGIN ConvertFileName(f,FileName(fn)) iFindName(f) IF i0 THEN WriteStrin
g(' Could not find ') WriteString(fn) WriteLn ELSE WriteString(fn) WriteStr
ing(fn) WriteLn Directoryi.Status0ffh END END DeleteF PROCEDURE AddFile(fnA
RRAY OF CHARScBOOLEAN) (*copy a file into the current library*) VARfFILE i,jC
ARDINAL BufferARRAY0..1023 OF BYTE BEGIN Lookup(f,FileName(fn),reply) IF rep
ly0 THEN WriteString('File ') WriteString(fn) WriteString(' not found') Writ
eLn RETURN END DoAddition(f,Sc) END AddFile PROCEDURE Yes()BOOLEAN VARsARR
AY1..3 OF CHAR BEGIN LOOP ReadString(s) CASE CAP(s1) OF 'Y'RETURN TRUE 'N'
RETURN FALSE ELile PROCEDURE ExtractFile(fnARRAY OF CHAR) VARffcb iCARDINAL
foFILE BEGIN ConvertFileName(f,FileName(fn)) iFindName(f) IF i0 THEN Writ
eString(' Could not find ') WriteString(fn) WriteLn ELSE WriteString('Extrac
ting ') WriteString(fn) WriteLn Create(fo,FileName(fn),reply) IF reply0 THEN
WriteString(' Could not create ') WriteString(fn) WriteLn RETURN END WITH
Directoryi DO SetBlock(Lib,StartSector) IF ScruncSE WriteLn WriteString(' P
lease enter Yes or No') END END END Yes PROCEDURE GetSlotCount BEGIN Write
String(' How many slots ') ReadCard(Slots) IF SlotsHIGH(Directory) THEN Write
Card(HIGH(Directory),4) WriteString(' is maximum slots allowed by this program'
) WriteLn SlotsHIGH(Directory) END Slots4*((Slots+3) DIV 4) IF Slots0 THEN
HALT END WriteCard(Slots,4) WriteString(' Slots allocated') WriteLn FOR i1 T
O Slots DO WITH Di RAFBGCHDIEhed THEN UnScrunch(Lib,fo) ELSE iTransfer(Lib,f
o,Length) END END Close(fo) END END ExtractFile PROCEDURE DisplayName( dInd
exRecord) VARjCARDINAL BEGIN j1 WITH d DO WHILE (j8) AND (BaseNamej' ') DO
Write(BaseNamej) INC(j) END WriteString('.') WriteString(Ext) WHILE j8 DO
Write(' ') INC(j) END END END DisplayName PROCEDURE ListNames VARi,j,k
CARDINAL BEGIN k0 FOR i2 TO Slots DO WITH Directoate')WriteLn WriteString('
D - Delete')WriteLn WriteString('E - Extract')WriteLn WriteString('L - List f
iles')WriteLn WriteString('R - Reorganize')WriteLn WriteString('U - Update All
')WriteLn WriteLn LOOP ReadCommand CASE CommandCH OF 'F'CloseLibraryEXIT
'A'AddFile(FName,FALSE) 'S'AddFile(FName,TRUE) 'D'DeleteFile(FName) 'E'Extrac
tFile(FName) 'L'ListNames 'U'UpdateAll 'R'Reorg END END END MyLU. ryi DO
IF Status0ffh THEN DisplayName(Directoryi) WriteCard(Length*128,5) INC(k)
IF k4 THEN WriteLnk0 ELSE WriteString(' ') END END END END IF k0 THEN Writ
eLn END END ListNames PROCEDURE SetUpFcb(VAR fFILE) BEGIN f.devtypedisc
f.eofFALSE WITH f.f DO fcbex0 fcbcr0 cpmres0 fcbrc0 fcbrn.loword
er0 fcbrn.highorder0 END END SetUpFcb PROCEDURE Reorg VARi,j,kCARDINAL Old
DirIndex OldSlotsCARDINAL OldLibFILE BEGIN OldLibLib Close(Lib) MakeBAK(Li
b,reply) OldDirDirectory OldSlotsSlots SetUpFcb(OldLib) OldLib.f.fcbft'BAK'
kBDOS(opnfc,ADR(OldLib.f)) Create(Lib,LibName,reply) IF reply0 THEN WriteStr
ing(' Could not create new library') WriteLn RETURN END WriteString(' Old li
brary had ')WriteCard(OldSlots,4) WriteString(' slots')WriteLn GetSlotCount F
OR i2 TO OldSlots DO WITH OldDiri DO IF StDEFINITION MODULE Pattern (*This
is a pattern matching module Dave Moore, FTL Modula-2 To match a pattern w
ith this module, you must create a pattern description with the "Create" functi
ons, and then use the MatchPattern function. This function returns a tree d
escribing the match, if successful, or NIL if not successful. *) TYPE
(*The program matches a tree representing a pattern there are a variety of node
types*) NodeType(String, (* A string of chars*) AnyOatus0ffh THEN SetBlo
ck(OldLib,StartSector) SetBlock(Lib,NextSector) kNextSector jTransfer(OldLib,
Lib,Length) AddEntry(fcb(OldDiri),k,j,Date,Time,Scrunched) NextSectorNextSecto
r+j END END END END Reorg PROCEDURE UpdateAll VARi,j,kCARDINAL fFILE BEG
IN i0IF FName0' ' THEN FName0'' END WHILE (iHIGH(FName))AND (FNamei' ') DO Wr
iteString(' Searching disk ') Write(FNamei) WriteLn FOR j2 TO Slots DO f,(*
A character from a set*) Alternatives,(* One of two alternatives*) Concat,
(* Concatenate two patterns*) RightLimit)(* Make sure at right boundary*)
CharSetSET OF CHAR PNodePOINTER TO Node PStatusPOINTER TO State (*If a
match is successful, the match is returned by a tree of states. Each node in th
e tree gives the start position of the match and the position of the next chara
cter following the match. It also contains a pointer to the pattern node whic
h wWITH Directoryj DO IF Status0ffh THEN f.ffcb(Directoryj) SetUpFcb(
f) f.f.fcbdnORD(FNamei)-ORD('A')+1 kBDOS(opnfc,ADR(f.f)) IF k0ffh
THEN WriteString(' Updating') DisplayName(IndexRecord(f.f)) WriteLn DoAddit
ion(f,Scrunched) END END END END INC(i) END END UpdateAll BEGIN Ope
nLibrary WriteString(' Commands areF - Finish')WriteLn WriteString('A - Add or
upd RAFBGCHDIEas matched. This information has to be kept separately from t
he pattern decription node because a given pattern node can match several times
in a given pattern, either because of recursion, or because you have chosen to
save space by using a single node in several different places in a pattern.
*) StateRECORD StatusCARDINAL(*Status is a status field used for back-tr
acking by the node classes Alternatives and AnyOf When we are backtracking
to try ttern will only match the first "a" and then return. We must add a "
LimitNode" to ensure that all the string is matched E1CreateConcatNode(E,Crea
teLimitNode()) E1 will ensure that all of the string is matched *) PROCEDUR
E CreateStringNode(sARRAY OF CHAR)PNode (*Create a node which matches a fixed
string s is the string to match*) PROCEDURE CreateAltNode(p,qPNode)PNode
(*Match either p or q *) PROCEDURE CreateAnyOfNode(sCharSetmin,maxCARDINAL
LongestBOOLEAN)PNodean alternative match or a longer one, this value is increme
nted When we are tracking forward, it is initialized*) MatchedAtCARDINAL
(* Position at which this node matched*) PatternNodePNode(* Pointer to pat
tern node matched by this status node*) MatchedToCARDINAL(* Position of ch
aracter after last character matched by pattern*) Left,RightPStatus(*
Pointer to substatus tree Left is used for Al (*Match any character
in set "s" min and max are the minimum and maximum characters to match Nor
mally, the first attempt matches the shortest acceptable number of characters.
In this case, to match more characters, backtracking must be performed. If y
ou know that matching the most possible characters will not cause the pattern t
o fail (for example, when matching identifiers in Modula-2, in which identifie
rs cannot run together, then specifying TRUE for Longest will produce a fastern
atives Both Left and Right are used for Concantenation*) END NodeREC
ORD CASE NTypeNodeType OF String TextLenCARDINAL TextARRAY0..0 OF CHAR An
yOf MatchCharSet MinCount,MaxCountCARDINAL FastBOOLEAN Alternatives,Concat
First,SecondPNode (* if either is null, it matches the null string*) END
END (*The following functions return a node representing a pattern to be m
atcheter pattern match *) PROCEDURE CreateConcatNode(p,qPNode)PNode (*Mat
ch pattern p followed by pattern q *) PROCEDURE CreateLimitNode()PNode (*M
atch only if all of the string has been matched Beware Do not use a limit
node as part of a pattern which can be called recursively (such as "E" above).
If you do, the pattern matcher will attempt to match the end of the string on
every recursion, which may prevent recursion at all *) PROCEDURE MatchPat
tern(pPNodesARRAYd. Some of the functions require other patterns as parameter
s. These can be generated using nested function calls. Recursion is possible
, but some extra work is required to define a recursive pattern. You must alloc
ate storage for a recursive pattern before it is used, and then assign its cont
ents after it is defined. For example, suppose we want to set up a pattern wh
ich matches a string of a's. The pattern can be given by the grammar E-aaE
This would be set up as follows OF CHAR)PStatus (*Match a Pattern p is
the root of the pattern to match s is the text to match The function return
s a tree if the match is successful. It returns NIL if the match fails. The
match must start at the beginning of the string, but it need not match the enti
re string - this can be forced by using a limit node. If you want to un-anc
hor the match from the beginning of the string, use a pattern CreateConcatNo
de( CreateAnyOfNode(CharSet0x..0ffx,0,64000,FAL NEW(E) tempCreateAltNode(
CreateStringNode('a'), CreateConcatNode( CreateStringNode('a'), E) )
Etemp We have allocated "E" first so that it can be used in the function. We
could not simply assign the pointer returned by CreateConcatNode to E, since t
hen the E used in the function would be pointing elsewhere. Instead, we must co
py the contents of temp into E so that the pointers remain correct. This pat
tern "E" is not yet ready to be used, since the pa RAFBGCHDIESE), E) where
E is the pattern to be matched in un-anchored mode. The tree returned by the
pattern matcher contains, in every node, the first character matched by the pat
tern, and the position of the next character following the match (so that the d
ifference between these two values gives the number of characters matched).
In addition, each node contains a pointer to the pattern node matched and it ma
y contain pointers to sub-patterns which were matched. *) END Pattern. L P
ROCEDURE P()BOOLEAN BEGIN (* Recursively match the pattern *) WITH p DO
Posq.MatchedAt StartPosPos tempNIL MatchStatusq.Status CASE
NType OF String,RightLimit tempPattern(p,s,Pos) RETURN tempNIL (*string et
c*) AnyOf Posq.MatchedTo IF (MatchStatusMaxCount) AND (sPos IN Match) THEN I
NC(MatchStatus) ChangedTRUE RETURN TRUE END RETURN FALSE Alternatives IF
MatchStatus(*$l-*) IMPLEMENTATION MODULE Pattern (*This is a pattern matchi
ng module Dave Moore, FTL Modula-2 *) FROMSTORAGE IMPORT ALLOCATE,DEALL
OCATE FROMStrings IMPORT Length FROMSYSTEMIMPORT TSIZE VARi,jCARDINAL Chan
gedBOOLEAN LenCARDINAL PROCEDURE CreateStringNode(sARRAY OF CHAR)PNode VARp
PNode BEGIN (*This procedure is provided to allow the creation of nodes f
or strings easilly. Only the required amount of memory is allocated*) iLength
(s) ALLOCATE(1 THEN MatchLeftBackTrack(q.Left,s,Pos) IF (MatchLeftNIL) AND Ch
anged THEN RETURN TRUE ELSE MatchStatus2 ChangedTRUE PosStartPos MatchLef
tPattern(Second,s,Pos) RETURN MatchLeftNIL END ELSE (*Status2*) MatchLeftBac
kTrack(q.Left,s,Pos) RETURN MatchLeftNIL END Concat (* see if we can bac
ktrack on the second string*) PosMatchStatus MatchLeftq.Left MatchRightBack
Tracp,i+3*TSIZE(CARDINAL)+TSIZE(NodeType)) WITH p DO FOR j0 TO i-1 DO Textjs
j END TextLeni NTypeString END RETURN p END CreateStringNode PROCEDURE C
reateAltNode(m,qPNode)PNode VARpPNode BEGIN NEW(p) WITH p DO NTypeAlternati
ves Firstm Secondq END RETURN p END CreateAltNode PROCEDURE CreateAnyOfNod
e(sCharSetmin,maxCARDINALLongestBOOLEAN)PNode VARpPNode BEGIN NEW(p) WITH p
DO NTypeAnyOf MinCountmk(q.Right,s,Pos) IF (MatchRightNIL) AND Changed THEN
RETURN TRUE END Posq.MatchedAt (* if not, try to backtrack the first string
until the second string matches*) ChangedFALSE SavePosPos LOOP PosSaveP
os MatchLeftBackTrack(q.Left,s,Pos) IF (MatchLeftNIL) OR NOT Changed THEN EXIT
END MatchRightPattern(Second,s,Pos) IF MatchRightNIL THEN RETURN TRUE END
ChangedFALSE END PosStain MaxCountmax FastLongest Matchs END RETURN p EN
D CreateAnyOfNode PROCEDURE CreateConcatNode(m,qPNode)PNode VARpPNode BEGIN
NEW(p) WITH p DO NTypeConcat Firstm Secondq END RETURN p END CreateConcat
Node PROCEDURE CreateLimitNode()PNode VARpPNode BEGIN NEW(p) p.NTypeRight
Limit RETURN p END CreateLimitNode PROCEDURE Pattern(pPNodeVAR sARRAY OF CHAR
VAR PosCARDINAL)PStatusFORWARD PROCEDURE BackTrack(qPSrtPos RETURN FALSE
END (*CASE*) END (*WITH*) END P BEGIN pq.PatternNode IF P() THEN IF temp
NIL THEN qtemp DISPOSE(temp) ELSE WITH q DO StatusMatchStatus Patter
nNodep MatchedAtStartPos MatchedToPos LeftMatchLeft RightMatchRight END
END ELSE DISPOSE(q) ChangedFALSE END RETURN q END BackTrack PROCEDURE
Pattern(pPNodeVAR sARRAY OF CHARVAR PosCARDINAL)PStatus tatusVAR sARRAY OF C
HARVAR PosCARDINAL)PStatus (*perform backtracking after a failure Returns
TRUE if a new match was found for node p On entry the first time, Changed mus
t be false it will be set true by the first node which extends its match Hence
, Changed must be true if backtrackimng is completely successful*) VARcountCA
RDINAL StartPos,LastPosCARDINAL pPNode SaveMatchCARDINAL MatchLeft,MatchRigh
tPStatus tempPStatus MatchStatusCARDINAL SavePosCARDINA RAFBGCHDIE(*This pro
cedure matches forward *) VARcountCARDINAL StartPos,LastPosCARDINAL SaveMatch
CARDINAL QPStatus MatchStatusCARDINAL MatchLeft,MatchRightPStatus SavePosCAR
DINAL PROCEDURE P()BOOLEAN BEGIN (* Recursively match the pattern *) WITH p
DO StartPosPos CASE NType OF String IF (Len-Pos)TextLen THEN RETURN
FALSE ELSE i0 WHILE (iTextLen) AND (sPosTexti) DO INC(Pos) INC(i) END IF
iTextLen THEN ttern. atch several times in a given pattern, either because o
f recursion, or because you have chosen to save space by using a single node in
several different places in a pattern. *) StateRECORD StatusCARDINAL(*
Status is a status field used for back-tracking by the node classes Alternativ
es and AnyOf When we are backtracking to try RETURN TRUE ELSE PosPos-i
RETURN FALSE END END(* long enough to match*) (*string*) AnyOfMatchStatus0
WHILE (MatchStatusMinCount) AND (sPos IN Match) DO INC(Pos) INC(MatchStatus)
END IF Fast THEN WHILE (MatchStatusMaxCount) AND (sPos IN Match) DO INC(Pos
) INC(MatchStatus) END END RETURN MatchStatusMinCount Alternatives Match
LeftPattern(First,s,Pos) IF MatchLeftNIL TIMPLEMENTATION MODULE ScreenIO (*
This is the Earth CPEM version of ScreenIO You need rev 0.22 or later of CPEM
to use this program It uses int 16h to perform IO, so your machine must be IBM
compatible at the BIOS level This is a slightly modified version of Screen
IO.IBM which will be available when the MSDOS version of the compiler is runnin
g The difference is that this version buffers screen output in order to spee
d up screen output, as character at a time was too slow *) FROMHEN MatchSt
atus1 RETURN TRUE ELSE MatchStatus2 MatchLeftPattern(Second,s,Pos) RETUR
N MatchLeftNIL END Concat MatchLeftPattern(First,s,Pos) IF MatchLeftNIL TH
EN MatchStatusPos MatchRightPattern(Second,s,Pos) IF MatchRightNIL THEN RETU
RN TRUE END ChangedFALSE SavePosPos LOOP PosSavePos MatchLeftBackTrack(Mat
chLeft,s,Pos) IF (MatchLeftNIL) OR NOT Terminal IMPORT CharRoutine,CharEnabled,
BlinkRoutine,BlinkEnabled FROM SYSTEM IMPORT ADR,SIZE FROM CPM IMPORT wccfc,BD
OS FROM IntLogic IMPORT IAND FROM SysCall IMPORT Int,Packet,ReadOrWrite (*S
creen handling routines for cursor position, attribute etc Specific to this c
ompiler*) CONSTLogScreenWidth80(*Logical screen width (many people only hav
e 80)*) RowWidth80(*width of memory for one row (i.e. number of bytes*) LogS
creenDepth24(*Lines on the screen*) Char Changed THEN EXIT END MatchRightPat
tern(Second,s,Pos) IF MatchRightNIL THEN RETURN TRUE END ChangedFALSE END
END PosStartPos RETURN FALSE RightLimit RETURN PosLen END (*CASE*) END (
*WITH*) END P BEGIN IF P() THEN NEW(Q) WITH Q DO StatusMatchStatus Patter
nNodep MatchedAtStartPos MatchedToPos LeftMatchLeft RightMatchRight END EL
SE QNIL Increment1(*number of bytes between characters*) ScreenSize80*24(*num
ber of bytes in screen area*) CR0dx(*Carriage return*) LF0ax(*Line feed*) T
AB09x(*TAB*) BS08x VAR BufferARRAY0..125 OF BYTE (*Buffer for up to a line *)
BaseAddrCARDINAL0B000h (*seg address of adapter - change for colour*) BufferR
owCARDINAL(*Row Being saved *) BufferColCARDINAL(*Start Column*) BufferCountCA
RDINAL0 (*ENtries in buffer *) AttributesCARDINAL7 ScreenPosCARDIEND RETURN Q
END Pattern PROCEDURE MatchPattern(pPNodesARRAY OF CHAR)PStatus (*Matc
h a Pattern p is the root of the pattern to match s is the text to match T
he function returns true only if the string matches completely. Of course, y
ou can always used repeated sets of anything at the beginning and.or end of a s
tring in order to match only part of a string*) VARPosCARDINAL BEGIN Pos0
LenLength(s) RETURN Pattern(p,s,Pos) END MatchPattern END Pa RAFBGCHDIENAL(
*next character position on screen*) ColNo,RowNoCARDINAL(*which represents the
given position*) (*Control attributes*) HalfIntensityBOOLEANFALSE(*true if
in half intensity mode*) EnhancedVideoBOOLEANFALSE UnderLineBOOLEANFALSE(*tru
e if in underline mode*) InverseVideoBOOLEANFALSE BlinkingBOOLEANFALSE i,jCAR
DINAL chCHAR (*The next few routines handle the cursor WasUnderLined is t
rue if the character under the cursor started out underlined TiwNo) OR (Buff
erCol*2+BufferCount2*ColNo) OR (BufferCount126) THEN FlushBuffer END IF Buf
ferCount0 THEN BufferRowRowNo BufferColColNo END BufferBufferCountORD(ch) I
NC(BufferCount) BufferBufferCountAttributes INC(BufferCount) ScreenPosScreenP
os+CharIncrement INC(ColNo) IF ColNoLogScreenWidth THEN IF RowNo(LogScreenDep
th-1) THEN INC(RowNo) ColNo0 ELSE DEC(ColNo) DEC(ScreenPos) END END END
PutandInc PROmeToChange is a counter that determines when the cursor should
be changed from its current value to its negative, to allow blinking *) VARWas
UnderLinedBOOLEANFALSE TimeToChangeINTEGER0 OutputEnabledBOOLEAN pPacket (*B
link cursor - decrement timer, if negative reset and change top bit of characte
r under cursor*) PROCEDURE SetCursor BEGIN (*Move cursor to current screen po
sition *) WITH p DO AX0200h DX256*RowNo+ColNo BX0 END Int(p) (*WasU
nderLiCEDURE Write(chCHAR) (*Write a character This routine is used by termi
nal when this version of ScreenIO is in use because a flag is set by the initi
alisation of this module together with the address of this routine *) BEGI
N IF OutputEnabled THEN ClearCursor IF ch07fx THEN chCHR(ORD(ch)-128) END
IF chCR THEN ScreenPosScreenPos-ColNo ColNo0 ELSIF chLF THEN IF RowNo(LogS
creenDepth-1) THEN INC(RowNo) ScreenPosScreenPos+RowWidth END ELSIF chnedScr
eenScreenPos80x ScreenScreenPosCHR(ORD(ScreenScreenPos)+128)*) END SetCursor
PROCEDURE FlushBuffer VARpPacket BEGIN IF BufferCount0 THEN WITH p DO In
tNoBufferCount AXADR(Buffer) BXBufferRow*160+BufferCol*2 CXBaseAddr ReadOrWr
ite(TRUE,p) END END BufferCount0 SetCursor END FlushBuffer PROCEDURE Bli
nkCursor BEGIN (*Does nothing (yet) on Earth card version DEC(TimeToChange)
IF TimeToChange0 THEN TimeTBS THEN IF ColNo0 THEN DEC(ColNo) DEC(ScreenPos)
END ELSIF chTAB THEN LOOP IF ColNoLogScreenWidth-1 THEN EXIT END PutandInc
(' ') IF IAND(ColNo,7)0 THEN EXIT END END (*LOOP*) ELSE IF UnderLine OR Enha
ncedVideo OR Blinking OR InverseVideo THEN Attributes1 END PutandInc(ch) END
(*Not CR or LF or TAB*) Attributes7 SetCursor END END Write PROCEDUR
E ScreenControl(sEdits) (*Perform a screen control operation May oChange90
0(*change to change blink rate*) ScreenScreenPosCHR(ORD(ScreenScreenPos)+128)
END *) FlushBuffer END BlinkCursor PROCEDURE ClearCursor BEGIN (*Also un
-implemented IF (ScreenScreenPos7fx)WasUnderLined THEN ScreenScreenPosCHR(OR
D(ScreenScreenPos)+128) END WasUnderLinedFALSE *) END ClearCursor PROCE
DURE Gotoxy(x,yCARDINAL) (*Position to given coordinates top left is always
0,0 x is column, y is row A 'Standneed alteration for various machines*)
BEGIN IF OutputEnabled THEN FlushBuffer ClearCursor CASE s OF DimHalfI
ntensityTRUE BrightHalfIntensityFALSE EnhancedVideoTRUE NormalHalfIntensityFA
LSE EnhancedVideoFALSE InverseVideoFALSE BlinkingFALSE UnderLineFALSE Inver
seInverseVideoTRUE BlinkBlinkingTRUE StartGraph,EndGraph(*do nothing*) DelCha
r(*Move rest of line up one, add blank to end*) iColNo FOR jColNo TO RowWidth-
2 Dard' Screen is 80 by 24. The limit is set by the terminal definition file*)
BEGIN IF OutputEnabled THEN ClearCursor ColNox RowNoy ScreenPosColNo+R
owNo*CharIncrement*RowWidth IF ScreenPosScreenSize THEN ColNo0 RowNo0 Screen
Pos0 END END FlushBuffer END Gotoxy PROCEDURE PutandInc(chCHAR)
(*output a character and increment pointers*) BEGIN IF BufferCount0 THEN
BufferRowRowNo BufferColColNo END IF (BufferRowRo RAFBGCHDIEO ColNoj+1 Set
Cursor WITH p DO AX800h BX0 Int(p)(*Read character *) chCHR(CARDINAL(AX))
DEC(ColNo) SetCursor BX7 AX0900H+ORD(ch) CX1 Int(p) END END ColNoRowWidt
h-1 SetCursor WITH p DO AX0920h BX7 CX1 Int(p) END ColNoi SetCursor
DelLine(*Move rest of screen up a line, add blank line at end*) WITH p DO AX06
01h CX256*RowNo DX256owNo) ScreenPosScreenPos+RowWidth END MoveUpIF RowNo0
THEN DEC(RowNo) ScreenPosScreenPos-RowWidth END END (*CASE*) SetCursor END
END ScreenControl PROCEDURE ScrollWindowUp(StartofWindow,EndofWindowCARDI
NAL) BEGIN IF OutputEnabled AND (StartofWindowEndofWindow) THEN ClearCurs
or WITH p DO AX0701h CX256*StartofWindow DX256*EndofWindow+LogScreenWidth-1
BX0700h END Int(p) SetCursor END END ScrollWindowUp P*(LogScreenDepth
-1)+LogScreenWidth-1 BX0700h END Int(p) InsChar(*Move rest of line up one,
add blank to end*) iColNo FOR jRowWidth-2 TO ColNo BY -1 DO ColNoj SetCurso
r WITH p DO AX800h BX0 Int(p)(*Read character *) chCHR(CARDINAL(AX)) INC(C
olNo) SetCursor BX7 AX0900H+ORD(ch) CX1 Int(p) END END ColNoi SetCursor
WITH p DO AX0920h BX7 CX1 ROCEDURE ScrollWindowDown(StartofWindow,EndofWin
dowCARDINAL) BEGIN IF OutputEnabled AND (StartofWindowEndofWindow) THEN C
learCursor WITH p DO AX0601h CX256*StartofWindow DX256*EndofWindow+LogScreen
Width-1 BX0700h END Int(p) SetCursor END END ScrollWindowDown PROCE
DURE LoadTermCode(FFileName) BEGIN (*not implemented in this version*) END Lo
adTermCode PROCEDURE Clip(x1,y1,x2,y2CARDINAL) BEGIN (*not implemented in thi
s version*) END CliInt(p) END SetCursor InsLine(*Move rest of screen up a
line, add blank line at end*) WITH p DO AX0701h CX256*RowNo DX256*(LogScreen
Depth-1)+LogScreenWidth-1 BX0700h END Int(p) DelEolIF ColNo+1RowWidth THEN
WITH p DO AX0920h BX7 CXRowWidth-ColNo-1 Int(p) END END DelEos(*not i
mplemented - but similar to previous*) ClearScreen (*Osborne specific - home s
creen and cursor positionp PROCEDURE DrawBox(x1,y1,x2,y2CARDINAL) (*draw
a box for a window on the screen x1,y1 is the lower left corner x2,y2 is
upper right corner*) VARiCARDINAL BEGIN IF OutputEnabled THEN Gotoxy(x1,
y1) ScreenControl(StartGraph) ScreenControl(CornerLL) FOR ix1+1 TO x2-1 DO Sc
reenControl(Horizontal) END ScreenControl(CornerLR) Gotoxy(x1,y2) ScreenContr
ol(CornerUL) FOR ix1+1 TO x2-1 DO ScreenControl(Horizontal) END ScreenControl(
CornerUR) FOR iy2+1 TO as stored in BIOS tables*) (*now clear display memory
*) WITH p DO AX0600h CX0 DX256*(LogScreenDepth-1)+LogScreenWidth-1 BX0700h
END Int(p) ScreenPos0 ColNo0 RowNo0 (* The following graphics characte
rs will need to be modified for different display systems*) HorizontalPu
tandInc(0cdx) VerticalPutandInc(0bax) CornerLLPutandInc(0c8x) CornerULPutandI
nc(0c9x) CornerURPutandInc(0bbx) CornerLRPutandInc(0bcx) y1-1 DO Gotoxy(x2
,i) ScreenControl(Vertical) END FOR iy2+1 TO y1-1 DO Gotoxy(x1,i) ScreenCon
trol(Vertical) END END END DrawBox PROCEDURE OutputToScreen(OnBOOLEAN)
BEGIN OutputEnabledOn END OutputToScreen BEGIN OutputEnabledTRUE (*Set up P
CG Characters*) ScreenPos0 p.IntNo16(*interrupt for video on 8088*) BlinkRout
ineBlinkCursor BlinkEnabledTRUE ScreenControl(ClearScreen) ColNo0 RowNo0 Ch
arRoutineWrite CharEStartxy,MiddleXY,EndXY(*cursor addressing - not required*)
RingBelliBDOS(wccfc,7) MoveLeftIF ColNo0 THEN DEC(ColNo) DEC(ScreenPos) EL
SIF RowNo0 THEN DEC(RowNo) ColNoLogScreenWidth-1 ScreenPosColNo+RowNo*RowWidt
h END MoveRightIF ColNo(LogScreenWidth-1) THEN INC(ColNo) INC(ScreenPos) E
LSIF RowNo(LogScreenDepth-1) THEN ColNo0 INC(RowNo) ScreenPosRowNo*RowWidth
END MoveDownIF RowNo(LogScreenDepth-1) THEN INC(R RAFBGCHDIEnabledTRUE Scree
nWidthLogScreenWidth ScreenDepthLogScreenDepth END ScreenIO. e root of the pa
ttern to match s is the text to match The function returns true only if the
string matches completely. Of course, you can always used repeated sets of a
nything at the beginning and.or end of a string in order to match only part of
a string*) VARPosCARDINAL BEGIN Pos0 LenLength(s) RETURN Pattern(p,s,Pos
) END MatchPattern END PaOLEANFALSE iCARDINAL (*The next few routines hand
le the cursor WasUnderLined is true if the character under the cursor starte
d out underlined TimeToChange is a counter that determines when the cursor sh
ould be changed from its current value to its negative, to allow blinking *)
VARWasUnderLinedBOOLEANFALSE TimeToChangeINTEGER0 OutputEnabledBOOLEAN (*Bl
ink cursor - decrement timer, if negative reset and change top bit of character
under cursor*) PROCEDURE BlinkCIMPLEMENTATION MODULE ScreenIO (*This is t
he memory mapped version of screen input-output To use it on your machine, yo
u may need to change some of the constants below The module assumes that th
e memory for the screen is contiguous and in the default bank. (If it is in an
other bank, you will have to change the code of the module appropriately) T
he values set below are for an Osborne 1 with Screen Pack Note that this vers
ion of screenio does not use the terminal definition fiursor BEGIN DEC(TimeT
oChange) IF TimeToChange0 THEN TimeToChange900(*change to change blink rate*)
ScreenScreenPosCHR(ORD(ScreenScreenPos)+128) END END BlinkCursor PROCEDURE
ClearCursor BEGIN IF (ScreenScreenPos7fx)WasUnderLined THEN ScreenScreenPosC
HR(ORD(ScreenScreenPos)+128) END WasUnderLinedFALSE END ClearCursor PROCEDUR
E SetCursor BEGIN WasUnderLinedScreenScreenPos80x ScreenScreenPosCHR(ORD(Scre
enScreenPos)+128) END le. Hence, the graphics characters for the box are hard
coded in the file This version will not support half intensity on the Osborne
since that facility does not work as documented. This may be something to do
with my Osborne having been hacked This version will not scroll the screen e
ither *) FROM Terminal IMPORT CharRoutine,CharEnabled,BlinkRoutine,BlinkEnab
led FROM FastMove IMPORT Moveup,Movedown FROM SYSTEM IMPORT ADR,SIZE FROM CPM
IMPORT wccfc,BDOS (*FROM Osborne IMPORT BankSetCursor PROCEDURE Gotoxy(x,yC
ARDINAL) (*Position to given coordinates top left is always 0,0 x is col
umn, y is row A 'Standard' Screen is 80 by 24. The limit is set by the termi
nal definition file*) BEGIN IF OutputEnabled THEN ClearCursor ColNox Ro
wNoy ScreenPosColNo+RowNo*CharIncrement*RowWidth IF ScreenPosScreenSize THEN
ColNo0 RowNo0 ScreenPos0 END SetCursor END END Gotoxy PROCEDURE Put
andInc(chCHAR) (*2*) FROM IntLogic IMPORT IAND (*Screen handling routines
for cursor position, attribute etc Specific to this compiler*) CONSTLogSc
reenWidth80(*Logical screen width (many people only have 80)*) RowWidth80(*wi
dth of memory for one row (i.e. number of bytes*) LogScreenDepth24(*Lines on
the screen*) ScreenStart0f000h(*base of screen*) CharIncrement1(*number of byt
es between characters*) ScreenSize80*24(*number of bytes in screen area*) CR
0dx(*Caroutput a character and increment pointers*) BEGIN ScreenScreenPosch
ScreenPosScreenPos+CharIncrement INC(ColNo) IF ColNoLogScreenWidth THEN IF
RowNo(LogScreenDepth-1) THEN INC(RowNo) ColNo0 ELSE DEC(ColNo) DEC(ScreenP
os) END END END PutandInc PROCEDURE Write(chCHAR) (*Write a character
This routine is used by terminal when this version of ScreenIO is in use becau
se a flag is set by the initialisation of this module together wriage return*)
LF0ax(*Line feed*) TAB09x(*TAB*) BS08x VAR Screen0f000hARRAY0..ScreenSize-
1 OF CHAR PCG0f800hARRAY0..48 OF CHAR ScreenPosCARDINAL(*next character positi
on on screen*) ColNo,RowNoCARDINAL(*which represents the given position*) (*
Control attributes*) HalfIntensityBOOLEANFALSE(*true if in half intensity mod
e*) EnhancedVideoBOOLEANFALSE UnderLineBOOLEANFALSE(*true if in underline mode
*) InverseVideoBOOLEANFALSE BlinkingBO RAFBGCHDIEith the address of this rout
ine This routine will need changing for different video systems The Osborn
e 1 is very limited - all you can do is underline and half intensity. All other
s are mapped onto these two *) BEGIN IF OutputEnabled THEN ClearCursor
IF ch07fx THEN chCHR(ORD(ch)-128) END IF chCR THEN ScreenPosScreenPos-ColNo C
olNo0 ELSIF chLF THEN IF RowNo(LogScreenDepth-1) THEN INC(RowNo) ScreenPosSc
reenPos+RowWidth END ELSIF chBS THEN ific - home screen and cursor positio
n as stored in BIOS tables*) (*now clear display memory*) Screen0' '
Moveup(ADR(Screen1),ADR(Screen0),ScreenSize-1) ScreenPos0 ColNo0
RowNo0 (* The following graphics characters will need to be modified
for different display systems*) HorizontalPutandInc(81x) VerticalPutand
Inc(80x) CornerLLPutandInc(84x) CornerULPutandInc(82x) CornerURPutandInc(83x)
CornerLRPutaIF ColNo0 THEN DEC(ColNo) DEC(ScreenPos) ScreenScreenPos' ' EN
D ELSIF chTAB THEN LOOP IF ColNoLogScreenWidth-1 THEN EXIT END ScreenScreenP
os' ' INC(ScreenPos) INC(ColNo) IF IAND(ColNo,7)0 THEN EXIT END END (*LOOP*)
ELSE IF UnderLine OR EnhancedVideo OR Blinking OR InverseVideo THEN chCHR(O
RD(ch)+128) END PutandInc(ch) END (*Not CR or LF or TAB*) SetCursor END
END Write PROCEDURE ScreenControl(sEdits)ndInc(85x) Startxy,MiddleXY,End
XY(*cursor addressing - not required*) RingBelliBDOS(wccfc,7) MoveLeftIF ColNo
0 THEN DEC(ColNo) DEC(ScreenPos) ELSIF RowNo0 THEN DEC(RowNo) ColNoLogScre
enWidth-1 ScreenPosColNo+RowNo*RowWidth END MoveRightIF ColNo(LogScreenWidth-
1) THEN INC(ColNo) INC(ScreenPos) ELSIF RowNo(LogScreenDepth-1) THEN ColNo0
INC(RowNo) ScreenPosRowNo*RowWidth END MoveDownIF RowNo(LogScreenDepth-1) T
(*Perform a screen control operation May need alteration for various mach
ines*) BEGIN IF OutputEnabled THEN ClearCursor CASE s OF DimHalfInten
sityTRUE BrightHalfIntensityFALSE EnhancedVideoTRUE NormalHalfIntensityFALSE
EnhancedVideoFALSE InverseVideoFALSE BlinkingFALSE UnderLineFALSE InverseIn
verseVideoTRUE BlinkBlinkingTRUE StartGraph,EndGraph(*do nothing*) DelChar(*M
ove rest of line up one, add blank to end*) MoHEN INC(RowNo) ScreenPosScreenP
os+RowWidth END MoveUpIF RowNo0 THEN DEC(RowNo) ScreenPosScreenPos-RowWidth
END END (*CASE*) SetCursor END END ScreenControl PROCEDURE ScrollWindo
wUp(StartofWindow,EndofWindowCARDINAL) BEGIN IF OutputEnabled THEN ClearC
ursor Moveup(ADR(Screen(StartofWindow)*RowWidth), ADR(Screen(StartofWindow+1)
*RowWidth), (EndofWindow-StartofWindow)*RowWidth) FOR iStartofWindow*RowWidth
TO (StartofWindow+1)*Rvedown(ADR(ScreenScreenPos+1),ADR(ScreenScreenPos),RowWid
th-ColNo-1) ScreenScreenPos-ColNo+RowWidth-1' ' DelLine(*Move rest of screen u
p a line, add blank line at end*) Movedown(ADR(ScreenScreenPos-ColNo+RowWidth),
ADR(ScreenScreenPos-ColNo), ScreenSize-ScreenPos+ColNo-RowWidth) FOR iScree
nSize-RowWidth TO ScreenSize-1 DO Screeni' ' END InsChar(*Move rest of line r
ight one character, last character may be lost*) Moveup(ADR(ScreenScreenPos),AD
R(ScreenSowWidth-1 DO Screeni' ' END SetCursor END END ScrollWindowUp
PROCEDURE ScrollWindowDown(StartofWindow,EndofWindowCARDINAL) BEGIN IF Out
putEnabled THEN ClearCursor Movedown(ADR(Screen(StartofWindow+1)*RowWidth),
ADR(Screen(StartofWindow)*RowWidth), (EndofWindow-StartofWindow)*RowWidth) FO
R iEndofWindow*RowWidth TO (EndofWindow+1)*RowWidth-1 DO Screeni' ' END SetCu
rsor END END ScrollWindowDown PROCEDURE LoadTermCode(FFileName)creenPos
+1),RowWidth-ColNo-1) ScreenScreenPos' ' InsLine(*Move rest of screen down one
line, add blank line*) Moveup(ADR(ScreenScreenPos-ColNo),ADR(ScreenScreenPos-C
olNo+RowWidth), ScreenSize-ScreenPos+ColNo-RowWidth) FOR iScreenPos-ColNo TO S
creenPos-ColNo+RowWidth-1 DO Screeni' ' END DelEolFOR iScreenPos TO ScreenP
os-ColNo+RowWidth-1 DO Screeni' ' END DelEosFOR iScreenPos TO ScreenSize-1 DO S
creeni' ' END ClearScreen (*Osborne spec RAFBGCHDIE BEGIN (*not implemented
in this version*) END LoadTermCode PROCEDURE Clip(x1,y1,x2,y2CARDINAL) BEGIN
(*not implemented in this version*) END Clip PROCEDURE DrawBox(x1,y1,x2,y2C
ARDINAL) (*draw a box for a window on the screen x1,y1 is the lower left
corner x2,y2 is upper right corner*) VARiCARDINAL BEGIN IF OutputEnable
d THEN Gotoxy(x1,y1) ScreenControl(StartGraph) ScreenControl(CornerLL) FOR i
x1+1 TO x2-1 DO ScreenControl(Horizontal) END ScreenConIMPLEMENTATION MODULE Sc
reenIO (*This is the memory mapped version of screen input-output To use i
t on your machine, you may need to change some of the constants below The m
odule assumes that the memory for the screen is contiguous and in the default
bank. (If it is in another bank, you will have to change the code of the modul
e appropriately) The values set below are for an Osborne 1 with Screen Pack
Note that this version of screenio does not use the terminal definition fitr
ol(CornerLR) Gotoxy(x1,y2) ScreenControl(CornerUL) FOR ix1+1 TO x2-1 DO Scree
nControl(Horizontal) END ScreenControl(CornerUR) FOR iy2+1 TO y1-1 DO Gotoxy
(x2,i) ScreenControl(Vertical) END FOR iy2+1 TO y1-1 DO Gotoxy(x1,i) Screen
Control(Vertical) END END END DrawBox PROCEDURE OutputToScreen(OnBOOLEAN
) BEGIN OutputEnabledOn END OutputToScreen BEGIN OutputEnabledTRUE (*Set u
p PCG Characters*) FOR i0 TO 6*16-1 DO PCGi0x ENDle. Hence, the graphics charac
ters for the box are hard coded in the file This version will not support ha
lf intensity on the Osborne since that facility does not work as documented. T
his may be something to do with my Osborne having been hacked This version w
ill not scroll the screen either *) FROM Terminal IMPORT CharRoutine,CharEna
bled,BlinkRoutine,BlinkEnabled FROM FastMove IMPORT Moveup,Movedown FROM SYSTE
M IMPORT ADR,SIZE FROM CPM IMPORT wccfc,BDOS (*FROM Osborne IMPORT Bank FOR i
0 TO 10 DO PCGi3cx END (*Horizontal bar*) FOR i16+3 TO 16+3+4 DO PCGi0ffx END
(*Upper Left*) FOR i2*16+3 TO 2*16+3+4 DO PCGi3fx END FOR i2*16+3+5 TO 3*16-1
DO PCGi3cx END (*Upper Right*) FOR i3*16+3 TO 3*16+3+4 DO PCGi0fcx END FOR i
3*16+3+5 TO 4*16-1 DO PCGi3cx END (*Lower Left*) FOR i4*16 TO 4*16+2 DO PCGi3c
x END FOR i4*16+3 TO 4*16+3+4 DO PCGi3fx END (*Lower Right*) FOR i5*16 TO 5*1
6+2 DO PCGi03cx END F2*) FROM IntLogic IMPORT IAND (*Screen handling routin
es for cursor position, attribute etc Specific to this compiler*) CONSTLog
ScreenWidth100(*Logical screen width (many people only have 80)*) RowWidth128
(*width of memory for one row (i.e. number of bytes*) LogScreenDepth24(*Lines
on the screen*) ScreenStart0f000h(*base of screen*) CharIncrement1(*number of
bytes between characters*) ScreenSize128*32(*number of bytes in screen area*)
CR0dx(*OR i5*16+3 TO 5*16+3+4 DO PCGi0fcx END ScreenPos0 BlinkRoutineBlin
kCursor BlinkEnabledTRUE ScreenControl(ClearScreen) ColNo0 RowNo0 CharRouti
neWrite CharEnabledTRUE ScreenWidthLogScreenWidth ScreenDepthLogScreenDepth
END ScreenIO. ScreenControl(CornerUL) FOR ix1+1 TO x2-1 DO ScreenControl(Hor
izontal) END ScreenControl(CornerUR) FOR iy2+1 TOCarriage return*) LF0ax(*Lin
e feed*) TAB09x(*TAB*) BS08x VAR OutputEnabledBOOLEAN Screen0f000hARRAY0..S
creenSize-1 OF CHAR ScreenPosCARDINAL(*next character position on screen*) Col
No,RowNoCARDINAL(*which represents the given position*) (*Control attributes*
) HalfIntensityBOOLEANFALSE(*true if in half intensity mode*) EnhancedVideoB
OOLEANFALSE UnderLineBOOLEANFALSE(*true if in underline mode*) InverseVideoBOO
LEANFALSE BlinkingBOOLEANFA RAFBGCHDIELSE iCARDINAL (*The next few routine
s handle the cursor WasUnderLined is true if the character under the cursor
started out underlined TimeToChange is a counter that determines when the cur
sor should be changed from its current value to its negative, to allow blinking
*) VARWasUnderLinedBOOLEANFALSE TimeToChangeINTEGER0 (*Blink cursor - dec
rement timer, if negative reset and change top bit of character under cursor*)
PROCEDURE BlinkCursor BEGIN DEC(TimeToChange)) DEC(ScreenPos) ScreenScree
nPos' ' END ELSIF chTAB THEN LOOP IF ColNoLogScreenWidth-1 THEN EXIT END Sc
reenScreenPos' ' INC(ScreenPos) INC(ColNo) IF IAND(ColNo,7)0 THEN EXIT END E
ND (*LOOP*) ELSE IF UnderLine OR EnhancedVideo OR Blinking OR InverseVideo THE
N chCHR(ORD(ch)+128) END PutandInc(ch) END (*Not CR or LF or TAB*) SetCurs
or END END Write PROCEDURE ScreenControl(sEdits) (*Perform a scre
en cont IF TimeToChange0 THEN TimeToChange900(*change to change blink rate*)
ScreenScreenPosCHR(ORD(ScreenScreenPos)+128) END END BlinkCursor PROCEDURE
ClearCursor BEGIN IF (ScreenScreenPos7fx)WasUnderLined THEN ScreenScreenPosCH
R(ORD(ScreenScreenPos)+128) END WasUnderLinedFALSE END ClearCursor PROCEDURE
SetCursor BEGIN WasUnderLinedScreenScreenPos80x ScreenScreenPosCHR(ORD(Scree
nScreenPos)+128) END SetCursor PROCEDURE Gotoxy(x,rol operation May need
alteration for various machines*) BEGIN IF OutputEnabled THEN ClearCurs
or CASE s OF DimHalfIntensityTRUE BrightHalfIntensityFALSE EnhancedVideoTRUE
NormalHalfIntensityFALSE EnhancedVideoFALSE InverseVideoFALSE BlinkingFALSE
UnderLineFALSE InverseInverseVideoTRUE BlinkBlinkingTRUE StartGraph,EndGrap
h(*do nothing*) DelChar(*Move rest of line up one, add blank to end*) Movedown
(ADR(ScreenScreenPos+1yCARDINAL) (*Position to given coordinates top left is
always 0,0 x is column, y is row A 'Standard' Screen is 80 by 24. The li
mit is set by the terminal definition file*) BEGIN IF OutputEnabled THEN
ClearCursor ColNox RowNoy ScreenPosColNo+RowNo*CharIncrement*RowWidth IF Sc
reenPosScreenSize THEN ColNo0 RowNo0 ScreenPos0 END SetCursor END
END Gotoxy PROCEDURE PutandInc(chCHAR) (*output a character and incre),A
DR(ScreenScreenPos),RowWidth-ColNo-1) ScreenScreenPos-ColNo+RowWidth-1' ' DelL
ine(*Move rest of screen up a line, add blank line at end*) Movedown(ADR(Screen
ScreenPos-ColNo+RowWidth), ADR(ScreenScreenPos-ColNo), ScreenSize-ScreenPos+C
olNo-RowWidth) FOR iScreenSize-RowWidth TO ScreenSize-1 DO Screeni' ' END In
sChar(*Move rest of line right one character, last character may be lost*) Move
up(ADR(ScreenScreenPos),ADR(ScreenScreenPos+1),RowWidth-ColNo-1ment pointers*)
BEGIN ScreenScreenPosch ScreenPosScreenPos+CharIncrement INC(ColNo) IF C
olNoLogScreenWidth THEN IF RowNo(LogScreenDepth-1) THEN INC(RowNo) ColNo0 EL
SE DEC(ColNo) DEC(ScreenPos) END END END PutandInc PROCEDURE Write(chCHA
R) (*Write a character This routine is used by terminal when this version of
ScreenIO is in use because a flag is set by the initialisation of this module
together with the address of this routi) ScreenScreenPos' ' InsLine(*Move r
est of screen down one line, add blank line*) Moveup(ADR(ScreenScreenPos-ColNo)
,ADR(ScreenScreenPos-ColNo+RowWidth), ScreenSize-ScreenPos+ColNo-RowWidth) FOR
iScreenPos-ColNo TO ScreenPos-ColNo+RowWidth-1 DO Screeni' ' END DelEolFOR
iScreenPos TO ScreenPos-ColNo+RowWidth-1 DO Screeni' ' END DelEosFOR iScreenPo
s TO ScreenSize-1 DO Screeni' ' END ClearScreen (*Osborne specific - home scre
en and cursorne This routine will need changing for different video systems
The Osborne 1 is very limited - all you can do is underline and half intensit
y. All others are mapped onto these two *) BEGIN IF OutputEnabled THEN C
learCursor IF ch07fx THEN chCHR(ORD(ch)-128) END IF chCR THEN ScreenPosScreen
Pos-ColNo ColNo0 ELSIF chLF THEN IF RowNo(LogScreenDepth-1) THEN INC(RowNo)
ScreenPosScreenPos+RowWidth END ELSIF chBS THEN IF ColNo0 THEN DEC(ColNo R
AFBGCHDIE position as stored in BIOS tables*) iBDOS(wccfc,1bh)iBDOS(wccf
c,ORD('S')) iBDOS(wccfc,32)iBDOS(wccfc,32) iBDOS(wccfc,1bh)iBDOS(wccfc
,ORD('')) iBDOS(wccfc,32)iBDOS(wccfc,32) (*Bank2(ADR(Screen0),ADR(Scre
enScreenSize-1),80h)*) (*now clear display memory*) Screen0' ' Move
up(ADR(Screen1),ADR(Screen0),ScreenSize-1) ScreenPos0 ColNo0 RowN
o0 (* The following graphics charx2,y2 is upper right corner*) VARiCA
RDINAL BEGIN IF OutputEnabled THEN Gotoxy(x1,y1) ScreenControl(StartGrap
h) ScreenControl(CornerLL) FOR ix1+1 TO x2-1 DO ScreenControl(Horizontal) END
ScreenControl(CornerLR) Gotoxy(x1,y2) ScreenControl(CornerUL) FOR ix1+1 TO x
2-1 DO ScreenControl(Horizontal) END ScreenControl(CornerUR) FOR iy2+1 TO y1-1
DO Gotoxy(x2,i) ScreenControl(Vertical) END FOR iy2+1 TO y1-1 DO Gotoxy(x
1,i) ScreenControl(Verticaacters will need to be modified for different di
splay systems*) HorizontalPutandInc(1bx) VerticalPutandInc(0bx) CornerLLPut
andInc(1cx) CornerULPutandInc(0fx) CornerURPutandInc(10x) CornerLRPutandInc(1
fx) Startxy,MiddleXY,EndXY(*cursor addressing - not required*) RingBelliBDOS(w
ccfc,7) MoveLeftIF ColNo0 THEN DEC(ColNo) DEC(ScreenPos) ELSIF RowNo0 THEN
DEC(RowNo) ColNoLogScreenWidth-1 ScreenPosColNo+RowNo*RowWidth END MoveRl)
END END END DrawBox PROCEDURE OutputToScreen(OnBOOLEAN) BEGIN Out
putEnabledOn END OutputToScreen BEGIN OutputEnabledTRUE BlinkRoutineBlinkCur
sor BlinkEnabledTRUE ScreenPos0 ScreenControl(ClearScreen) ColNo0 RowNo0 C
harRoutineWrite CharEnabledTRUE ScreenWidthLogScreenWidth ScreenDepthLogScree
nDepth END ScreenIO. ightIF ColNo(LogScreenWidth-1) THEN INC(ColNo) INC(Scr
eenPos) ELSIF RowNo(LogScreenDepth-1) THEN ColNo0 INC(RowNo) ScreenPosRowNo*
RowWidth END MoveDownIF RowNo(LogScreenDepth-1) THEN INC(RowNo) ScreenPosScr
eenPos+RowWidth END MoveUpIF RowNo0 THEN DEC(RowNo) ScreenPosScreenPos-RowWi
dth END END (*CASE*) SetCursor END END ScreenControl PROCEDURE Scroll
WindowUp(StartofWindow,EndofWindowCARDINAL) BEGIN IF MODULE Test (*Test
of pattern match module *) FROMTerminal IMPORT WriteString,ReadString,WriteL
n FROMPattern IMPORT NodeType,PNode,CreateStringNode,MatchPattern,CharSet, Cre
ateAltNode,CreateStringNode, CreateAnyOfNode,CreateConcatNode,CreateLimitNode
FROMStorage IMPORT ALLOCATE VARExp1,Exp,Term,FactPNode tempPNode BEGIN NEW(E
xp) NEW(Term) FactCreateAltNode( CreateAnyOfNode(CharSet'A'..'Z','0'..'9','a'
..'z',1,30000,TRUE), CreateConcatNode( CreateConcatNoOutputEnabled THEN Clear
Cursor Moveup(ADR(Screen(StartofWindow)*RowWidth), ADR(Screen(StartofWindow+1
)*RowWidth), (EndofWindow-StartofWindow)*RowWidth) FOR iStartofWindow*RowWidt
h TO (StartofWindow+1)*RowWidth-1 DO Screeni' ' END SetCursor END END
ScrollWindowUp PROCEDURE ScrollWindowDown(StartofWindow,EndofWindowCARDINAL) B
EGIN IF OutputEnabled THEN ClearCursor Movedown(ADR(Screen(StartofWindow+
1)*RowWidth), ADR(Screen(StartofWindow)*RowWidde( CreateStringNode('('), Exp
), CreateStringNode(')') ) ) tempCreateAltNode( Fact, CreateConcatNode( F
act, CreateConcatNode( CreateStringNode('*'), Term) ) ) Termtemp tempCrea
teAltNode( Term, CreateConcatNode( Term, CreateConcatNode( CreateSt
ringNode('+'), Exp) ) ) Exptemp Exp1CreateConcatNode( Exp, CreateLimi
tNode()) IF MatchPattern(Exp1,'2*2')NIL THEN WriteString('1 OK'th), (EndofWi
ndow-StartofWindow)*RowWidth) FOR iEndofWindow*RowWidth TO (EndofWindow+1)*RowW
idth-1 DO Screeni' ' END SetCursor END END ScrollWindowDown PROCEDU
RE LoadTermCode(FFileName) BEGIN (*not implemented in this version*) END Load
TermCode PROCEDURE Clip(x1,y1,x2,y2CARDINAL) BEGIN (*not implemented in this
version*) END Clip PROCEDURE DrawBox(x1,y1,x2,y2CARDINAL) (*draw a box for
a window on the screen x1,y1 is the lower left corner R A F B G C H D I
E) END IF MatchPattern(Exp1,'2+3*2')NIL THEN WriteString('2 OK') END IF Matc
hPattern(Exp1,'2*(2+3)')NIL THEN WriteString('3 OK') END IF MatchPattern(Exp1,
'2*2*3*4')NIL THEN WriteString('4 OK') END IF MatchPattern(Exp1,'2*2+3*7')NIL
THEN WriteString('5 OK') END IF MatchPattern(Exp1,'2*2+3*4+(9+8)')NIL THEN Wri
teString('6 OK') END IF MatchPattern(Exp1,'2++2')NIL THEN WriteString('7 not o
k ') END END Test. inePos(moveINTEGER) BEGIN Retrline(CurFilePtr,LineLen,Lin
ePos,p,linesmoved,move) END SetLinePos PROCEDURE MarkAsUpdated BEGIN Updated
CurrentFileTRUE END MarkAsUpdated PROCEDURE ResetPos BEGIN Gotoxy(Thisx,This
y) END ResetPos PROCEDURE ClearRestOfLine BEGIN ScreenControl(DelEol) IF NO
T MadeChange THEN FOR cThisx+1 TO ScreenWidth DO Write(' ') END END ResetPos
END ClearRestOfLine PROCEDURE DelToEOL VARiCARDINAL BEGIN MarkAsUpdated IF
LinePosLineLen THEN DelChars(CurFilePtr,LineLen-LinePos) END LineLenLinePo
s ClearRestOfLine END DelToEOL VAR bBOOLEAN PROCEDURE ReDisplayWindow BEGI
N DisplayFile(CurFilePtr,CurrentWindow,Thisx,Thisy) ResetPos curxCurrentWindo
wThisx curyCurrentWindowThisy ReDrawnTRUE END ReDisplayWindow PROCEDURE ReDi
splay BEGIN ReDisplayWindow SetLinePos(0) ChangePos END ReDisplay PROCEDUR
E ChangeMargin(IncINTEGER) BEGIN IF (Inc0) AND (CurrentLeftMar (*This is a v
ersion of editcont for people with dumb terminals. The only facilities which t
his version of EDITCONT assumes is Gotoxy and the ability to highlight in some
way *) (*$l-*) IMPLEMENTATION MODULE EditControl (*Editor control - data
areas for file and routines which actually perform edit functions by calling m
akeedit to edit the file and editdisp to change the screen*) FROM MakeEdits
IMPORT InsChars,DelChars,Retrline,BackOneChar,ForwardOneChar, GetCurrentChar,Ge
tPositiginCARDINAL(-Inc)) THEN Inc-INTEGER(CurrentLeftMargin) END IF (Inc0)
AND (ThisxCARDINAL(Inc)) THEN IncThisx END CurrentLeftMarginINTEGER(CurrentLef
tMargin)+Inc ThisxINTEGER(Thisx)-Inc curxCurrentWindowThisx LeftMarginCurrent
WindowCurrentLeftMargin ReDisplayWindow ResetPos END ChangeMargin PROCEDUR
E ChangePos VARiCARDINAL BEGIN IF LineLenLinePos THEN LinePosLineLen END
Thisx0 i0 LOOP INC(i) chGetCurrentChar(CurFion,SetPosition,ReadNextChar,Find
String, LabelOp FROM EditDisplay IMPORT DisplayFile,ErrorMessage,Windows,Lines
PerWindow FROM ScreenIO IMPORT Edits,DelChar,DelLine,InsChar,InsLine,DelEol,Mov
eUp, MoveDown,MoveLeft,MoveRight,Gotoxy,ClearScreen, ScreenControl, ScreenWid
th,ScreenDepth,MadeChange FROM IntLogic IMPORT IAND FROMSYSTEM IMPORT ADR CON
STCR0dx TAB09x LF0ax EOF1ax (*A remark on the use of LinePos and curx Lin
ePos always points to the number of the charactelePtr) IF (iCARDINAL(LinePos))
OR (chEOF) THEN EXIT END IF chTAB THEN ThisxIAND(Thisx+8,0fff8h) ELSE INC(Th
isx) END bForwardOneChar(CurFilePtr) END iThisx WHILE Thisx(ScreenWidth+Cur
rentLeftMargin) DO ChangeMargin(32) Thisxi END WHILE ThisxCurrentLeftMargin
DO ChangeMargin(-32) Thisxi END ThisxThisx-CurrentLeftMargin curxCurrentWin
dowThisx ResetPos END ChangePos PROCEDURE LineMove(byINTEGER) VARiINTEGER
BEGIN r within the text line. It need not be the same as the position on the
screen because of the use of tab characters*) TYPEPEditFilePOINTER TO EditFile
VARiINTEGER cCARDINAL StartofWindow,EndofWindowCARDINAL chCHAR CurrentLeftM
arginCARDINAL FileLimitBOOLEAN ReDrawnBOOLEAN CurFilePtrPEditFile PROCEDURE
ChangePosFORWARD PROCEDURE DoScreenChange(CodeEdits) BEGIN ScreenControl(Code
) END DoScreenChange VARlinesmovedINTEGER pPosition PROCEDURE SetL !R
!A!F!B!G!C!H!D!I!E ReDrawnFALSE iLinePos SetLinePos(by) LinePosi ChangePos
(*IF ABS(by)1 THEN ReDisplayWindow END*) END LineMove VARpwPosition PROCEDU
RE WritePartLine(cCARDINAL) VARSavexCARDINAL BEGIN GetPosition(CurFilePtr,pw)
LOOP ReadNextChar(pw,ch) IF (ch0dx) OR (ch1ax) OR (ch0ax) THEN EXIT END IF
c(ScreenWidth+CurrentLeftMargin) THEN EXIT END IF chTAB THEN REPEAT IF cCurr
entLeftMargin THEN Write(' ') END INC(c) UNTIL IAND(c,ve(-1) ResetPos END
END END ScrollUp PROCEDURE ScrollDown BEGIN ScrollText(1) IF MovedOK THEN
IF ThisyStartofWindow THEN DEC(Thisy) ELSE LineMove(1) END END ResetPos
END ScrollDown PROCEDURE Left VARchCHAR SaveLineLenCARDINAL pPosition BEGIN
MovedOKTRUE ReDrawnFALSE SaveLineLenLineLen GetPosition(CurFilePtr,p) IF L
inePos0 THEN bBackOneChar(CurFilePtr) chGetCurrentChar(CurFilePtr) IF (Curren
tLeftM7)1 ELSE IF cCurrentLeftMargin THEN Write(ch) END INC(c) END END(*LOO
P*) SavexThisx IF cCurrentLeftMargin THEN Thisx0 ELSE Thisxc-CurrentLeftMargi
n END ClearRestOfLine ThisxSavex END WritePartLine PROCEDURE WriteLine BEGI
N WritePartLine(1) END WriteLine PROCEDURE ScrollWindow(Start,EndCARDINALByIN
TEGER) (*Scroll the window by redisplaying all or part of it Start and End g
ive actual screen poistions (in y) for the top and bottom of theargin0) AND (Th
isx0) THEN ChangeMargin(-32) END DEC(LinePos) IF NOT ReDrawn THEN IF chTAB
THEN DEC(Thisx) ResetPos ELSE LineMove(0) END END ELSE Thisx1023 Line
Pos1023 Up IF NOT MovedOK THEN LinePos0 LineLenSaveLineLen SetPosition(CurF
ilePtr,p) Thisx0 ResetPos END END END Left PROCEDURE Right VARchCHAR i
CARDINAL BEGIN chGetCurrentChar(CurFilePtr) IF ch1ax (*on EOF scroll*) VAR
pPosition iINTEGER BEGIN GetPosition(CurFilePtr,p) iINTEGER(Start)-INTEGER(T
hisy)+By SetLinePos(i) MovedOKFALSE IF linesmovedi THEN RETURN END MovedOKTR
UE iStart LOOP IF CARDINAL(i)End THEN EXIT END Gotoxy(0,i) WriteLine SetLi
nePos(1) IF linesmoved1 THEN EXIT END INC(i) END SetPosition(CurFilePtr,p)
SetLinePos(0) ChangePos END ScrollWindow PROCEDURE RemoveLine (*Remove a l
ine from the screen and brin char*) THEN RETURN END bForwardOneChar(CurFilePtr)
IF LinePosLineLen THEN Thisx0 LinePos0 bBackOneChar(CurFilePtr) Down EL
SE IF chTAB THEN i9 ELSE i1 END IF (Thisx+i)(ScreenWidth-1) THEN ChangeMarg
in(32) END INC(LinePos) IF chTAB THEN INC(Thisx) ResetPos ELSE (*if mov
es over tabs are slow, replace the repeated moves right by a gotoxy*) ThisxI
AND(Thisx+8,0fff8h) ResetPos END END END Rightg another line up at the botto
m Thisy gives line to remove*) VARpPosition BEGIN Gotoxy(0,Thisy) ScrollW
indow(Thisy,EndofWindow,1) iEndofWindow-Thisy+1 GetPosition(CurFilePtr,p) Set
LinePos(i) IF linesmovedi THEN MovedOKTRUE Gotoxy(0,EndofWindow) WriteLine
END SetPosition(CurFilePtr,p) END RemoveLine PROCEDURE DelFullLine BEGIN Ma
rkAsUpdated RemoveLine SetLinePos(0) DelChars(CurFilePtr,LineLen+2) LinePos0
IF CurrentLeftMargin0 THEN PROCEDURE AlphaNum(chCHAR)BOOLEAN BEGIN chCAP(ch
) RETURN ((ch'A') AND (ch'Z')) OR ((ch'0') AND (ch'9')) END AlphaNum PROCED
URE FindWord(BackwardBOOLEANDeleteBOOLEAN) (*Find a word and optionally delet
e it A word is a string alphanumerics or a string of marks, tabs or spoaces
The cursor is repositioned*) VARchCHAR b1BOOLEAN BEGIN FileLimitFALSE IF
Backward THEN Left IF NOT MovedOK THEN RETURN END END chGetCurrentChar(Cur
FilePtr) ChangeMargin(-INTEGER(CurrentLeftMargin)) END Thisx0 ResetPos Lin
ePos0 SetLinePos(0) END DelFullLine PROCEDURE ScrollText(ByINTEGER) (*
Scroll up one line in the file (which means the text scrolls down - backwards t
o what you might think at first)*) BEGIN ScrollWindow(StartofWindow,EndofWi
ndow,By) END ScrollText PROCEDURE ScrollUp BEGIN ScrollText(-1) IF MovedO
K THEN IF ThisyEndofWindow THEN INC(Thisy) ResetPos ELSE LineMo "R"A"F"B
"G"C"H"D"I"E b1AlphaNum(ch) IF chEOF THEN RETURN END REPEAT IF Delete THEN D
elOneChar END IF Backward THEN Left ELSIF NOT Delete THEN Right END chGetCu
rrentChar(CurFilePtr) UNTIL (b1AlphaNum(ch)) OR FileLimit OR (chEOF) IF Backw
ard AND NOT FileLimit THEN Right END END FindWord PROCEDURE Down BEGIN LineM
ove(1) FileLimitlinesmoved0 IF linesmoved0 THEN IF (ThisyEndofWindow) THEN R
eDisplayWindow ELSIF NOT ReDrawn THEN INC(Thisy) ResetPos END LineMove(
-1) FileLimitlinesmoved0 IF (linesmoved0) AND (ThisyStartofWindow) AND NOT ReD
rawn THEN DEC(Thisy) ResetPos END END Up PROCEDURE UpScreen BEGIN LineMo
ve(1-INTEGER(LinesPerWindow)) ReDisplayWindow END UpScreen PROCEDURE DownScre
en BEGIN LineMove(LinesPerWindow-1) ReDisplayWindow END DownScreen PROCEDUR
E Top BEGIN LinePos0 LineMove(-16736) ReDisplayWindow END Top PROCEDURE Bo
ttom BEGIN LinePos999 LineMove(16736END END END Down PROCEDURE RedoLine
BEGIN Gotoxy(0,Thisy) SetLinePos(0) WriteLine ChangePos END RedoLine P
ROCEDURE InsOneChar(chCHAR) VARCH1ARRAY0..0 OF CHAR BEGIN ReDrawnFALSE MarkA
sUpdated CH10ch InsChars(CurFilePtr,CH1,1) INC(LinePos) INC(LineLen) IF chC
R THEN CH10LF InsChars(CurFilePtr,CH1,1) ResetPos ClearRestOfLine IF ThisyE
ndofWindow THEN ScrollText(0) DEC(Thisy) ELSE ScrollWindow(Thisy+1) ReDis
playWindow END Bottom PROCEDURE FarLeft BEGIN IF CurrentLeftMargin0 THEN C
hangeMargin(-INTEGER(CurrentLeftMargin)) END SetLinePos(0) LinePos0 ChangePo
s END FarLeft PROCEDURE FarRight BEGIN SetLinePos(0) LinePosLineLen Change
Pos END FarRight PROCEDURE ChangeWindow(NoINTEGER) VARbBOOLEAN iCARDINAL BE
GIN IF CurrentWindow0 THEN curxCurrentWindowThisx curyCurrentWindowThisy bLa
belOp(CurFilePtr,TRUE,CHR(CurrentWindow),EndofWindow,-1) END INC(Thisy) Reset
Pos LinePos0 RedoLine ELSIF chTAB THEN RedoLine ELSE IF Thisx(ScreenWidth-1
) THEN ChangeMargin(32) END IF NOT ReDrawn THEN IF LinePosLineLen THEN bBac
kOneChar(CurFilePtr) WritePartLine(CurrentLeftMargin+Thisx+1) INC(Thisx) bFor
wardOneChar(CurFilePtr) ELSE Write(ch) INC(Thisx) END END END ResetPos E
ND InsOneChar PROCEDURE DelOneChar BEGIN MarkAs) END CurrentWindowNo IF
CurrentWindowWindows THEN CurrentWindowWindows END IF CurrentWindow0 THEN (*se
t up a pointer to the current file to save index calculation every time the f
ile is referenced*) CurrentFileWindowFileCurrentWindow CurFilePtrPEditFile(ADR
(FilesCurrentFile)) bLabelOp(CurFilePtr,FALSE,CHR(CurrentWindow)) ThisxcurxCur
rentWindow ThisycuryCurrentWindow CurrentLeftMarginLeftMarginCurrentWindow Se
tLinePos(0) ChUpdated chGetCurrentChar(CurFilePtr) IF LinePosLineLen THEN i2
ELSE i1 END DelChars(CurFilePtr,i) IF i2 THEN IF ThisyEndofWindow THEN INC
(Thisy) iLinePos RemoveLine LinePosi DEC(Thisy) RedoLine END ELSE DEC(Li
neLen) WritePartLine(CurrentLeftMargin+Thisx+1) END (*ELSIF chTAB THEN RedoL
ine ELSE LineLenLineLen-1 DoScreenChange(DelChar) END*) ResetPos END DelOn
eChar PROCEDURE OverWrite(chCHAR) VARangePos i(ScreenDepth-Windows) DIV Windo
ws StartofWindow(i+1)*(CurrentWindow-1) ELSE StartofWindow0 i0 END IF Cu
rrentWindowWindows THEN EndofWindowStartofWindow+i-1 ELSE EndofWindowScreenDe
pth-2 END END ChangeWindow PROCEDURE ResetScreenPos BEGIN IF CurrentWindo
w0 THEN ThisxcurxCurrentWindow ThisycuryCurrentWindow ResetPos END END Rese
tScreenPos PROCEDURE MoveWindow(from,toCARDINAL) VARbBOOLEAN BEGIN curxtoCH1
ARRAY0..0 OF CHAR BEGIN CH10GetCurrentChar(CurFilePtr) IF (CH10CR) AND (chCR)
AND (CH101ax) THEN IF (CH10TAB) AND (chTAB) THEN DelChars(CurFilePtr,1) CH10
ch InsChars(CurFilePtr,CH1,1) bBackOneChar(CurFilePtr) Write(ch) ResetPos R
ight MarkAsUpdated ELSE DelOneChar InsOneChar(ch) END ELSE InsOneChar(ch)
END END OverWrite PROCEDURE Up BEGIN IF ThisyStartofWindow THEN ReDispl
ayWindow #R#A#F#B#G#C#H#D#I#Ecurxfrom curytocuryfrom LeftMargintoLeftMarginfr
om WindowFiletoWindowFilefrom bLabelOp(FilesWindowFileto,TRUE,CHR(to)) END Mo
veWindow PROCEDURE ElideWindow(WindowNoINTEGER) BEGIN FOR iWindowNo+1 TO INTE
GER(Windows) DO MoveWindow(i,i-1) END DEC(Windows) CurrentWindow0 END Elide
Window PROCEDURE MakeWindow BEGIN INC(Windows) MoveWindow(CurrentWindow,Wind
ows) END MakeWindow PROCEDURE Search(ReplaceARRAY OF CHARRLenINTEGERLe Gotoxy(
0,ScreenDepth-1) WriteString(s1)WriteString(s2) END ErrorMessage PROCEDURE Se
tWindows(iINTEGER) (*set number of edit windows in use - you must refresh the
entire screen with calls to DisplayFile after a call to this routine*) VARj,
kCARDINAL BEGIN Windowsi ScreenControl(ClearScreen) IF Windows1 THEN Line
sPerWindow(ScreenDepth-Windows) DIV Windows ELSELinesPerWindowScreenDepth-1 END
FOR j2 TO Windows DO Gotoxy(0,(LinesPerWindow+1)*(j-1)-1) nCARDINAL)BOOLEAN
(*search for string and replace if found*) VARbBOOLEAN FoundBOOLEAN BEGIN
bLen128 IF b THEN LenLen-128 END FoundFindString(CurFilePtr,b) IF Found AND
(RLen0) THEN MarkAsUpdated DelChars(CurFilePtr,Len) InsChars(CurFilePtr,Repl
ace,RLen) bBackOneChar(CurFilePtr) END ReDisplay RETURN Found END Search P
ROCEDURE GoToLabel(chCHAR) BEGIN IF LabelOp(CurFilePtr,FALSE,ch) THEN ReDispl
ay ELSE ErrorMessage(' Label nScreenControl(StartGraph) FOR k1 TO ScreenWidth
DO ScreenControl(Horizontal) END ScreenControl(EndGraph) END END SetWindo
ws (*put a line between the windows*) VARchCHAR posPosition charsin,icINTE
GER len,movedINTEGER linepos,LeftMargCARDINAL PROCEDURE SetLeftMarg(fEditFile
windowINTEGERVAR curx,curyCARDINAL) BEGIN Retrline(f,len,charsin,pos,moved,0)
linepos0 FOR ic0 TO charsin DO ReadNextChar(pos,ch) IF ch09x THEN lineposIAN
D(liot defined',' ') ResetPos END END GoToLabel BEGIN CurrentWindow0 Curre
ntFile0 CurFilePtrPEditFile(ADR(Files1)) END EditControl. dowThisx curyC
urrentWindowThisy ReDrawnTRUE END ReDisplayWindow PROCEDURE ReDisplay BEGIN
ReDisplayWindow SetLinePos(0) ChangePos END ReDisplay PROCEDURE ChangeMargi
n(IncINTEGER) BEGIN IF (Inc0) AND (CurrentLeftMarnepos+8,0fff8h) ELSE INC(li
nepos) END END LeftMarg0 WHILE linepos(LeftMarg+ScreenWidth) DO LeftMargLeft
Marg+32 END LeftMarginwindowLeftMarg END SetLeftMarg PROCEDURE DisplayFile(f
EditFilewindowINTEGERVAR curx,curyCARDINAL) (*redisplay as much text as will
fit in the window for the given file starting at the current position in the fi
le*) VARi,j,k,lineposCARDINAL movedoneINTEGER startlineINTEGER (*first line o
f window*) BEGIN LeftMargLeftMarg(*This is the dumb screen version of EditDisp
lay It uses writes of blanks to clear the rest of each line instead of Delet
e to EOL *) IMPLEMENTATION MODULE EditDisplay (*Display part of a file bei
ng edited*) FROMSCREENIO IMPORT Gotoxy,ScreenControl, MadeChange,ScreenWidth,S
creenDepth FROM Terminal IMPORT WriteString,Write,WriteLn,Read, FROM MakeEdits
IMPORT Position,Retrline,ReadNextChar,ErrorList,ErrorCount,LabelOp FROMEditCon
t IMPORT LeftMargin,Files,CurrentWindow,CurrentFile,inwindow startline(INTEGER(
LinesPerWindow)+1)*(window-1) Gotoxy(0,startline) (*first line of this windo
w*) i0(*line within window*) kLinesPerWindow DIV 2 Retrline(f,len,charsin,pos
,moved,-k) LOOP (*check if this is the line we were positioned to upon ent
ry*) linepos0 j0 LOOP IF (moved0) AND (jCARDINAL(charsin)) THEN curxlinep
os-LeftMarg curyi+CARDINAL(startline) END INC(j) IF jCARDINAL(len) THEN EXIT
END (*cThisx,Thisy, curx,cury,ReDisplay FROM IntLogic IMPORT IAND FROMFil
es IMPORT Lookup,Close,FILE,ReadBlock FROMSYSTEM IMPORT ADR CONSTEOF1ax PROCE
DURE ClearToEnd(iCARDINAL) BEGIN ScreenControl(DelEol) IF NOT MadeChange THEN
FOR ii TO ScreenWidth-1 DO Write(' ') END END END ClearToEnd PROCEDURE Erro
rMessage(s1,s2ARRAY OF CHAR) (*Display error message at bottom of screen*) V
AR iINTEGER BEGIN Gotoxy(0,ScreenDepth-1) ScreenControl(RingBell) ClearToEnd
(1) $R$A$F$B$G$C$H$D$I$Eheck for cursor line*) ReadNextChar(pos,ch) IF ch0
9x THEN REPEAT INC(linepos) IF (lineposLeftMarg) AND (linepos(ScreenWidth+
LeftMarg)) THEN Write(' ') END UNTIL IAND(linepos,7)0 ELSIF chEOF THEN EXI
T ELSE INC(linepos) IF (lineposLeftMarg) AND (linepos(ScreenWidth+LeftMarg)
) THEN Write(ch) END END(*IF chvarious things*) END (*inner loop*) INC(i)
IF lineposLeftMarg THEN ClearToEo blocks of the error message file, count
in the characters preceding the error emssage we want *) ReadBlock(f,ADR(b),
0,128,reply) jErrorNumber IF ErrorNumber128 THEN iCount(128) ReadBlock(f,ADR
(b),1,128,reply) jj-128 ELSE i0 END ii+Count(j-1) LengthORD(bj-1) ji DIV
128 (*block to read*) ii - 128*j (*offset of first character in block*) ReadBl
ock(f,ADR(b),j+2,128,reply) FOR k0 TO Length-1 DO IF i128 THEN Ind(linepos+1
-LeftMarg) ELSE ClearToEnd(1) END IF iLinesPerWindow THEN EXIT ELSE Write
Ln linepos0 END INC(moved) Retrline(f,len,ic,pos,movedone,1) IF movedone0 T
HEN FOR ii+1 TO LinesPerWindow DO ClearToEnd(1) WriteLn END EXIT END END(
*LOOP*) END DisplayFile PROCEDURE DisplayError (*The error message file con
tains the messages, The first two blocks give the lengths of the error messa
ges The remaining blocks NC(j) ReadBlock(f,ADR(b),j+2,128,reply) i0 END tk
bi INC(i) END tLength0c WriteString(t) ELSE WriteString(' Could not open e
rror messages file') END blLabelOp(FilesCurrentFile,FALSE,CHR(ErrorOrdinal+0b0
h)) ReDisplay (*DisplayFile(FilesCurrentFile,CurrentWindow,Thisx,Thisy)*) Got
oxy(Thisx,Thisy) curxCurrentWindowThisx curyCurrentWindowThisy END DisplayErr
or BEGIN Windows0 END EditDisplay. give the text of the error messages *) T
YPETextARRAY0..63 OF CHAR VARfFILE(*FILE is a type exported from the module F
iles*) bARRAY 0..127 OF CHAR i,j,k,LengthCARDINAL tText ErrorNumberCARDINA
L replyINTEGER blBOOLEAN PROCEDURE Count(kCARDINAL)CARDINAL VARiCARDINAL BE
GIN i0 IF k0 THEN RETURN 0 END FOR kk-1 TO 0 BY -1 DO ii+ORD(bk) END RETUR
N i END Count PROCEDURE WriteCard(iCARDINAL) VARtARRAY0..3 OF CHAR j,kCARDIN
ALDoFind(*Ctrl L*) MainTable1fxDelBack(*- on Osborne 1*) (*The next key, ass
igned tisx(ScreenWidth-1) THEN ChangeMargin(32) END IF NOT ReDrawn THEN IF L
inePosLineLen THEN bBackOneChar(CurFilePtr) WritePartLine(CurrentLeftMargin+Th
isx+1) INC(Thisx) bForwardOneChar(CurFilePtr) ELSE Write(ch) INC(Thisx) EN
D END END ResetPos END InsOneChar PROCEDURE DelOneChar BEGIN MarkAs BEGI
N kHIGH(t) WHILE i0 DO ji DIV 10 tkCHR(ORD('0')+i-10*j) ij DEC(k) END FO
R kk+1 TO HIGH(t) DO Write(tk) END END WriteCard BEGIN IF ErrorOrdinalErrorCo
unt THEN RETURN END Gotoxy(0,ScreenDepth-1) ErrorNumberErrorListErrorOrdinal.E
rrorNum ScreenControl(DelEol) WriteString('Error ') WriteCard(ErrorNumber) W
riteString('(')WriteCard(ErrorOrdinal+1) WriteString(' of ')WriteCard(ErrorCoun
t) WriteString(') ') Lookup(f,'ERRMSG.DAT ',reply) (*Lookup opens the file
for input/output reply returns zero if no file is found a device name can
be used in front of the file name In fact, you can use a non-disc file name (e
g PUN or CON) but if you do this, you must do your IO through the module Str
eams (or InOut, which calls streams), as the IO to the serial devices is perfo
rmed by that module (it calls Files to do IO to disc devices) *) IF reply0 T
HEN(*OK - file found*) (*read the first 1 or tw %R%A%F%B%G%C%H%D%I%E &R&A
&F&B&G&C&H&D&I&E 'R'A'F'B'G'C'H'D'I'E K RJ UK RI WJ SH SI QF TK SI QI NF QI PH
NI NI PI RFy IH OI OI QGz IG MI PF MI JF LGz HFy JzI HzFy Jz£H IFy JzHz GxGx Jy
Gz GyFz JzGz FwDw GyFw Dv