5 MODE7 10 REM Program MERGE 20 REM by D. Ambrose 100 110 T%=TOP:B%=T%:LOMEM=&5000 120 DIM P$(16) 130 CLS:VDU15 135 PRINT"Press any key when the program/disc drive stops" 140 PRINT "PROCovly appended by PROCjoin" 150 PROCjoin("OVLY"):T%=TOP:C%=T% 155 A=GET 160 PRINT "DATA blocks D1-D4 appended by PROCjoin":PRINT 170 FOR J%=1 TO 4 180 f$="D"+STR$(J%):PROCjoin(f$):T%=TOP 190 NEXT 200 FOR I%=1 TO 16:READ P$(I%):NEXT 210 FOR I%=1 TO 13 STEP 4:PRINTTAB(4) P$(I%):NEXT 220 PRINT 225 A=GET 230 PRINT "Clear memory, and start again with PROCovly":PRINT 240 FOR I%=C% TO T%:?I%=0:NEXT 250 T%=C% 260 FOR J%=1 TO 4 270 f$="D"+STR$(J%):PROCovly(f$):T%=FNend+1 280 NEXT 290 RESTORE:FOR I%=1 TO 16:READ P$(I%):NEXT 300 FOR I%=2 TO 14 STEP 4:PRINTTAB(4) P$(I%):NEXT 310 PRINT 315 A=GET 320 PRINT "LOAD and READ DATA blocks one after the other" 330 PRINT "first with PROCjoin":PRINT 340 FOR J%=1 TO 4 350 f$="D"+STR$(J%):T%=C%:PROCjoin(f$) 360 RESTORE:FOR I%=1 TO 4:READ P$(I%):NEXT:PRINTTAB(4) P$(3) 370 NEXT:PRINT 380 A=GET 390 PRINT "and now with PROCovly":PRINT 400 FOR J%=1 TO 4 410 f$="D"+STR$(J%):PROCovly(f$) 420 RESTORE:FOR I%=1 TO 4:READ P$(I%):NEXT:PRINTTAB(4) P$(4) 430 NEXT 435 A=GET 440 PRINT:PRINT "Program ends at original length" 450 ?(B%-1)=&FF 460 VDU14:END 470 1000 DEF PROCjoin(f$):LOCAL N%,X%,Y% 1010 DIM N% 9,ctrlblk% 17 1020 $N%=f$+CHR$&0D 1030 REM Put address of file in ctrlblk 1040 ?ctrlblk%=N%MOD&100:?(ctrlblk%+1)=N%DIV&100 1050 A%=&FF:REM A%=&FF to LOAD, A%=0 to SAVE 1060 REM Put address of ctrlblk in X and Y registers 1070 X%=ctrlblk%MOD&100:Y%=ctrlblk%DIV&100 1080 REM If ctrlblk%+6=0 file is LOADed at address in ctrlblk%+2 1090 ?(ctrlblk%+6)=0 1100 !(ctrlblk%+2)=&0000+T%-2 1110 CALL &FFDD 1120 REM RESET TOP 1130 ?&12=(T%+ctrlblk%!&0A-2)MOD&100 1140 ?&13=(T%+ctrlblk%!&0A-2)DIV&100 1150 ENDPROC 1160 1170 DEF FNN="MERGE"