0 REM SORT/MERGE - VARIABLE LENGTH RECORDS›10 SS=PEEK(203)+1:SE=PEEK(204)+1:T=PEEK(206):POKE 203,SS:POKE 204,SE›20 XL=FRE(0)-600:DIM X$(XL),F$(15),R$(251),T$(251),D$(7)›30 Q1=210:Q2=600:Q3=40000:D$="D1:TEMP":T$(1)=" ":T$(251)=" ":T$(2)=T$(1)›40 ? "ENTER FILE NAME (Dn:name.ext)":INPUT F$›45 TRAP 40:DO=VAL(F$(2,2)):IF DO<1 OR DO>4 THEN 40›50 ? "DRIVE NUMBER FOR SORTED FILE ";:TRAP 50:INPUT DN›55 IF DN<1 OR DN>4 THEN 50›57 ? "INSERT ";F$;" IN DRIVE ";DO:IF DN<>DO THEN ? "AND BLANK DISK IN DRIVE ";DN›58 D$(2,2)=STR$(DO):? "PRESS RETURN ";:INPUT R$›60 ? "FINDING LONGEST RECORD LENGTH":TRAP Q2:OPEN #2,4,0,F$:R=0›70 TRAP 80:INPUT #2,R$:L=LEN(R$):IF L>R THEN R=L›75 GOTO 70›80 CLOSE #2:? "LONGEST LENGTH IS ";R:IF R>250 THEN ? "TOO LONG":END ›100 POKE 205,R+1:? "LOADING ";F$:TRAP Q2:OPEN #2,4,0,F$:M=0›120 L=1:? "PASS 1 - ";:GOSUB 500:IF M=0 THEN 160›140 ? "WRITING ";D$:OPEN #3,8,0,D$:GOSUB 560›150 ? "PASS 2 - ";:L=1:GOSUB 500›160 CLOSE #2:TRAP Q2:IF DO=DN THEN ? "DELETING ";F$:XIO 36,#3,0,0,F$›170 F$(2,2)=STR$(DN):OPEN #3,8,0,F$›180 ? "WRITING ";F$:IF M=0 THEN GOSUB 560:GOTO 400›200 TRAP Q2:OPEN #2,4,0,D$:J=1:A=1:B=1:AE=1:BE=1›210 IF A=1 THEN TRAP 330:INPUT #2,R$:TRAP Q3›220 IF B=1 THEN TRAP 340:RL=ASC(X$(J,J)):T$=X$(J+1,J+RL):J=J+R+1:TRAP Q3›230 IF AE=0 AND BE=0 THEN 390›240 IF AE=1 AND BE=0 THEN 300›245 IF AE=0 AND BE=1 THEN 310›250 IF T=1 THEN 280›260 IF R$(SS,SE)>T$(SS,SE) THEN 310›270 GOTO 300›280 IF R$(SS,SE)