100 REM. SET-UP FOR "KSORT": CREATES FILE FOR "KBASET.SV" 110 DIM N$=18, X$=3, Y$=3 120 ! 130 PRINT: PRINT "OUTPUT DEV:FILNAM.EX"; 140 INPUT N$ 150 OPEN N$ FOR OUTPUT AS FILE 1 160 L=0: R$=CHR$(13) ! LENGTH OF RECS.; CARRIAGE RETURN 170 PRINT 180 PRINT "FIXED-LENGTH RECORDS (TYPE Y) OR VARIABLE (N) "; 190 INPUT X$: IF X$<>"Y" THEN IF X$<>"N" THEN 170 200 PRINT #1,X$; 210 IF X$="N" THEN 340 ! VARIABLE, TREATED SEPARATELY 220 ! FIXED: 230 PRINT "THE FIXED LENGTH OF YOUR RECORDS IS ALWAYS ";: INPUT X 240 L=X ! SAVE LENGTH 250 GOSUB 820 260 PRINT #1,X$;R$; ! C.R. TO END NUMBER 270 IF INT(384/X)=384/X THEN 430 280 IF X>=384 THEN 430 290 PRINT "ARE YOUR RECORDS PADDED AT BLOCK ENDS (Y)," 300 PRINT "OR DO THEY RUN CONTINUOUSLY ACROSS BLOCK BOUNDARIES (N) "; 310 INPUT X$: IF X$<>"Y" THEN IF X$<>"N" THEN 290 320 GOTO 430 ! ..AND GET KEYS 330 !-------- 340 PRINT "VARIABLE RECORDS MUST ALWAYS END WITH A DEFINITE CHARACTER." 350 PRINT "TYPE EITHER (A) THE CHARACTER OR (B) ITS 2-DIGIT DECIMAL" 360 PRINT "VALUE: ";: INPUT X$ 370 IF LEN(X$)>2 THEN 350 380 IF LEN(X$)<2 THEN 430 390 Y$=MID(X$,1,1): D=ASCII(Y$)-48 400 Y$=MID(X$,2,1): D=10*D+ASCII(Y$)-48 410 X$=CHR$(D) 420 !-------- 430 PRINT #1,X$; 440 PRINT: PRINT "DESCRIBE UP TO 8 PHYSICAL KEYS--YOU CAN STOP EARLIER" 450 PRINT "BY TYPING A 'STARTS AT' VALUE OF 0 ." 460 X0=0 470 PRINT 480 FOR K=1 TO 8 490 PRINT "KEY #";K 500 PRINT "STARTS WITH CHARACTER NO. ";: INPUT X: GOSUB 820 510 IF X=0 THEN 550 520 IF X<=X0 THEN PRINT,"PHYSICAL ORDER??": GOTO 500 530 IF L>0 THEN IF X>L THEN PRINT,"BEYOND LIMITS!": GOTO 500 540 X0=X ! SAVE X 550 PRINT #1,X$;R$; 560 IF X=0 THEN 660 570 PRINT "ENDS WITH CHAR. NO. ";: INPUT X: GOSUB 820 580 IF X0 THEN IF X>L THEN PRINT,"BEYOND LIMITS!": GOTO 570 600 X0=X 610 PRINT #1,X$;R$; 620 PRINT "ORDER: A, D, OR Q ";: INPUT X$ 630 IF X$<>"A" THEN IF X$<>"D" THEN IF X$<>"Q" THEN 620 640 PRINT #1,X$; 650 NEXT K 660 PRINT 670 PRINT "NOW LIST LOGICAL [ = SORTING ] ORDER OF KEYS BY TYPING" 680 PRINT "IN THEIR PHYSICAL NUMBERS BELOW, E.G., 3,1,2. A ZERO" 690 PRINT "CAUSES IMMEDIATE END-OF-LIST." 700 PRINT 710 FOR J=1 TO K-1 720 PRINT "PRIORITY";J;"IS KEY # "; 730 INPUT X: IF X>K-1 THEN PRINT "-- DOESN'T EXIST --": GOTO 730 740 IF X=0 THEN PRINT #1,"0";: GOTO 770 750 GOSUB 820: PRINT #1,X$;R$; 760 NEXT J 770 PRINT #1,CHR$(26); ! END THE FILE 780 PRINT: CLOSE 790 PRINT "^C AND .R KBASET -- WE'RE DONE." 800 STOP 810 REM. SUBR. TO CONVERT NUMBER TO STRING: 820 D=100: A=0: X$="": X1=X ! SAVE "X" 830 FOR I=1 TO 2 840 Q=INT(X1/D): X1=X1-D*Q: IF Q>0 THEN A=48 ! NUMERAL CODE 850 D=D/10 860 IF A>0 THEN X$=X$+CHR$(A+Q) 870 NEXT I 880 X$=X$+CHR$(48+X1) ! LAST DIGIT ALWAYS RECORDED 890 RETURN 900 END