image of READY prompt

Wang2200.org

Listing of file='SORT' on disk='vmedia/701-2048D.wvd.zip'

# Sector 673, program filename = 'SORT'
0010 REM SORT,00-00(02/20/76),12003A
0310 COM I2,I2$2
   : COM D0$2,D1$2,D2$2,O$8,M0$2,M2$2
   : COM N3$2,K2$3
   : COM T1$1,T2$1
   : COM L1,D2,D3,D6,D9,R0,K
   : DIM V2$56,V3$56,V6$10,V8$10,V9$10
   : DIM Z$8,Y$1,D$(4)64,X1$2,B$1,Y1$1,K1$1
0420 DIM I$11,W1$11,O1$11,Z1$11
   : DIM Q6$64,E$30,E1$8
0480 M=S
0500 PRINT HEX(030A0A0A0A)
   : PRINT "ISS DISK SORT UTILITY"
   : IF M>=8THEN 530
   : STOP "MEMORY SIZE TOO SMALL"
0530 GOSUB '45("INPUT",6,1)
   : Z$,I$=Z1$
   : LIMITS T#1,Z$,I0,X,I1
   : I3=I0+I1-2
   : DATA LOAD BA T#1,(I3,X)D$()
   : Y$=HEX(F0)
   : AND (Y$,STR(D$(1),1,1))
   : IF Y$=HEX(A0)THEN 750
   : GOSUB '2("INPUT INVALID")
   : GOTO 530
0750 DATA LOAD BA T#1,(I0,X)D$()
0770 GOSUB '245("RECORDS PER BLOCK",2,0)
   : R0=Q9
   : GOSUB '3("RECORDS PER BLOCK",7,0)
   : IF R0<1THEN 1890
   : IF R0>255THEN 1890
   : R=55
   : IF R0=1THEN 870
   : R=38
0870 V=0
   : L2=0
   : N2=0
   : P=3
   : A1=I0+1
   : B3=1
   : C=0
1010 X=INT((P-1)/64)
   : Y=P-64*X
   : X=X+1
   : Y$=STR(D$(X),Y,1)
   : IF Y$=HEX(FD)THEN 1390
   : C=C+1
   : IF C>1THEN 1340
   : V=V+1
   : IF V<=RTHEN 1150
   : GOSUB '248(0,0,4)
   : GOSUB '99("TOO MANY FIELDS")
1150 Y1$=Y$
   : IF Y$=HEX(08)THEN 1220
   : STR(V2$,V,1)=HEX(00)
   : IF Y$<HEX(81)THEN 1200
   : IF Y$<HEX(C1)THEN 1240
1200 GOSUB '248(0,0,4)
   : GOSUB '99("INVALID RECORD FORMAT")
1220 N2=N2+1
   : STR(V2$,V,1)=HEX(01)
1240 AND (Y$,7F)
   : STR(V3$,V,1)=Y$
   : L2=L2+VAL(Y$)
1280 IF C<R0THEN 1300
   : C=0
1300 P=P+1+VAL(STR(V3$,V,1))
   : IF P>256THEN 1200
   : GOTO 1010
1340 IF Y$=Y1$THEN 1280
1350 GOSUB '248(0,0,4)
   : GOSUB '99("NOT BLOCKED AS SPECIFIED")
1390 Y$=STR(D$(1),1,1)
   : IF Y$=HEX(81)THEN 1490
   : IF Y$<>HEX(82)THEN 1200
   : B3=B3+1
   : DATA LOAD BA T#1,(A1,A1)D$()
   : IF B3<>VAL(STR(D$(1),2,1))THEN 1200
   : P=3
   : GOTO 1010
1490 IF C>0THEN 1350
1510 E$="STARTING RECORD # TO BE SORTED"
   : GOSUB '245(E$,8,0)
   : L0=Q9
   : GOSUB '3(E$,8,0)
   : IF L0<1THEN 1850
1550 GOSUB '243("NUMBER OF RECORDS TO BE SORTED (OR ALL)",8)
   : Z$=Q6$
   : GOSUB '1("NUMBER OF RECORDS TO BE SORTED",9,0)
   : L1=9E9
   : IF Z$="ALL"THEN 1660
   : IF NUM(Z$)=0THEN 1870
   : CONVERT STR(Z$,1,NUM(Z$))TO L1
   : IF L1<1THEN 1870
1630 IF L1<>INT(L1)THEN 1870
1660 X=INT((L0-1)/R0)
   : I2=L0-R0*X
   : Y=I0+X*B3
   : IF Y>I3-1THEN 1820
   : Z=(I3-I0)/B3
   : IF Z<>INT(Z)THEN 1200
   : Z=Z*R0-L0+1
   : IF Z>L1THEN 1770
   : L1=Z
1770 X=INT(Y/256)
   : BIN(I2$)=X
   : BIN(STR(I2$,2))=Y-256*X
   : GOTO 1950
1820 GOSUB '2("STARTING RECORD TOO HIGH")
   : GOSUB '248(8,0,2)
   : GOTO 1510
1850 GOSUB '2("INVALID")
   : GOTO 1510
1870 GOSUB '2("INVALID")
   : GOTO 1550
1890 GOSUB '2("INVALID")
   : GOTO 770
1910 GOSUB '2("INVALID")
   : GOTO 1950
1950 GOSUB '245("NUMBER OF KEY FIELDS (1 TO 10)",2,0)
   : K0=Q9
   : GOSUB '3("NUMBER OF KEY FIELDS",10,0)
   : IF K0<1THEN 1910
   : IF K0>10THEN 1910
   : IF K0>VTHEN 1910
   : B$=HEX(01)
   : INIT(00)V9$
   : K2=0
   : K3=0
   : K1$=HEX(00)
   : A=0
   : N1=0
   : FOR X=1TO K0
2070 Q6$="ENTER SEQUENCE NUMBER OF KEY FIELD    IN RECORD"
   : CONVERT XTO STR(Q6$,36,2),(##)
   : GOSUB '245(Q6$,2,0)
   : IF Q9<1THEN 2120
   : IF Q9<=VTHEN 2140
2120 GOSUB '2("RE-ENTER")
   : GOTO 2070
2140 Y=Q9
   : IF STR(V2$,Y,1)>HEX(01)THEN 2120
   : GOSUB '248(11,A,0)
   : IF X>1THEN 2220
   : PRINTUSING 2200,Y
   : A=13
   : GOTO 2250
2200 %KEY FIELDS ##
2210 %, ##
2220 PRINTUSING 2210,Y
   : A=A+4
2250 IF STR(V2$,Y,1)<HEX(01)THEN 2270
   : N1=N1+1
2270 OR (STR(V2$,Y,1),02)
   : ADDC(K1$,STR(V3$,Y,1))
   : IF K1$<HEX(41)THEN 2320
   : GOSUB '248(0,0,4)
   : GOSUB '99("SORT KEY TOO LONG")
2320 Q6$="KEY FIELD    ASCENDING OR DESCENDING? (A OR D)"
   : CONVERT XTO STR(Q6$,11,2),(##)
   : GOSUB '243(Q6$,1)
   : Y$=Q6$
   : IF Y$=" "THEN 2495
   : IF Y$="A"THEN 2440
   : IF Y$="D"THEN 2420
   : GOSUB '2("RE-ENTER")
   : GOTO 2320
2420 STR(V9$,X,1)=HEX(01)
   : K2=K2+1
   : IF STR(V2$,Y,1)=HEX(03)THEN 2440
   : K3=K3+1
2440 GOSUB '248(11,A,0)
   : A=A+1
   : PRINT Y$
2495 STR(V6$,X,1)=B$
   : ADDC(B$,STR(V3$,Y,1))
   : BIN(STR(V8$,X,1))=Y
   : NEXT X
   : K=VAL(K1$)
   : L=L2+8*N1
2580 GOSUB '45("WORK",12,2)
   : Z$,W1$=Z1$
   : LIMITS T#2,Z$,S0,S9,Z
   : S9=S9-S0+1
   : GOSUB '43
   : D0$=X1$
   : IF S9<25THEN 4110
   : IF W1$<>I$THEN 2890
   : GOSUB '2("DUPLICATE FILE")
   : GOTO 4120
2890 D2$=D0$
   : S0=S0+15
   : GOSUB '43
   : M0$,D1$=X1$
   : M0=M*1024-698
   : IF L-K>64THEN 3190
   : IF K/L<.4THEN 3190
3090 T1$="R"
   : M2=M0-3400
   : L3=L
   : U=1+SGN(L-K)
   : Z=2+12*V+24*N2+12*N1+3*(V+N1)*SGN(R0-1)
   : M2=M2-(38+150*U+27*V+16*N2+R0*L2+K+L3+10*K3+(12*V+3*N2+3*K3+12*K0+13*N1)*
     SGN(R0-1))
   : GOTO 3290
3190 T1$="K"
   : M2=M0-3100
   : L3=K+3
   : U=2
   : Z=13+12*K0+3*K0*SGN(R0-1)
3290 M1=M0-2200
   : X=41+138*U+42*N1+15*V+L3-7*N2+8*N1*R0+R0*L2+10*K2+(9*V+3*N2-12*N1+3*K2)*S
     GN(R0-1)
   : M1=M1-Z-X
   : D2=129
   : T2$="L"
   : GOSUB 3490
   : IF D6<6THEN 3570
   : GOSUB 3510
   : GOSUB 3530
   : D9=D2
   : GOSUB '42
   : X=INT(4095/D2)
3466 IF D3<XTHEN 3470
   : D3=X
3470 IF D6<XTHEN 3930
   : D6=X
   : GOTO 3930
3490 D6=INT((M2-D2*2*L3)/(10+D2*L3))
   : RETURN
3510 D2=INT((M2-D6*10)/(L3*(D6+2)))
   : RETURN
3530 D3=INT((M1-D2*2*(L3+1))/(3+D2*L3))
   : RETURN
3570 D6=6
   : GOSUB 3510
   : IF L3>20THEN 3690
   : X=(L3+U)/253
   : Y=X*D2
   : Z=Y-INT(Y)
   : IF Z>.5THEN 3690
   : D2=D2-INT(Z/X+1)
3690 GOSUB '42
   : IF Q7<128THEN 3750
   : D2=D2-1
   : GOTO 3690
3750 IF D2>5THEN 3810
   : IF T1$="R"THEN 3190
   : GOSUB '248(0,0,4)
   : GOSUB '99("NO ROOM TO SORT")
3810 GOSUB 3490
   : GOSUB 3530
   : D9=D2
   : X=D2+D2*D3
   : IF X>255THEN 3930
   : T2$="S"
   : D9=INT(((M1+109+43*U-L3*D2)/(2+L3))/D2)*D2
   : D3=1
3930 N3$=HEX(0000)
   : BIN(STR(N3$,2))=B
   : INIT(00)K2$
   : BIN(STR(K2$,3))=D2-1
   : XOR (K2$,FF)
4020 Y=INT((L1-1)/(D9*D3))+1
   : Z=INT((Y-1)/36)+1
   : Q8=(INT((L1-1)/D2)+1)*B
4080 IF S9>=15+Z+Q8THEN 4150
   : IF T1$="R"THEN 3190
4110 GOSUB '2("WORK SPACE TOO SMALL")
4120 GOSUB '248(12,0,1)
   : GOTO 2580
4150 S0=S0+Z
   : GOSUB '43
   : M2$=X1$
4200 GOSUB '45("OUTPUT",13,3)
   : O$,O1$=Z1$
   : IF I$=O1$THEN 4290
   : IF W1$<>O1$THEN 4320
4290 GOSUB '2("DUPLICATE FILE")
   : GOTO 4200
4320 P=(INT((L1-1)/R0)+1)*B3+2
4330 GOSUB '243("IS OUTPUT FILE CATALOGUED? (Y OR N)",1)
   : Y$=Q6$
   : GOSUB '1("CATALOGUED",13,45)
   : IF Y$="Y"THEN 4420
   : IF Y$=" "THEN 4420
   : IF Y$="N"THEN 4520
   : GOSUB '2("RE-ENTER")
   : GOTO 4330
4420 X,Y=0
   : LIMITS T#3,O$,X,Y,Z
   : IF P<=Y-X+1THEN 4550
   : GOSUB '2("OUTPUT SPACE TOO SMALL")
   : GOTO 4200
4520 DATA SAVE DC OPEN T$#3,P,O$
   : DATA SAVE DC CLOSE#3
4550 GOSUB '248(0,0,4)
   : DATA SAVE DA T$#2,(D0$,X1$)V2$,V3$,V6$,V8$,V9$,U,V,L3,K0
   : LOAD DC T#0,"DSM200BA"
4620 DEFFN'1(E$,Q6,Q7)
   : E1$=Q6$
   : GOSUB '248(Q6,Q7,1)
   : PRINT E$;"  ";E1$
   : RETURN
4690 DEFFN'2(Q6$)
   : PRINT HEX(010A0A0A)
   : PRINT Q6$
   : RETURN
4723 DEFFN'99(Q6$)
   : GOSUB '2(Q6$)
   : GOSUB '243("KEY RETURN(EXEC) TO RESUME",0)
   : COM CLEAR I2
   : LOAD DC T#0,"START055"
4750 DEFFN'3(E$,Q6,Q7)
   : GOSUB '248(Q6,Q7,1)
   : PRINT E$;" ";Q9
   : RETURN
4840 DEFFN'42
   : B=1
   : Q6=0
   : Q7=250
   : Q8=K+1
   : Q9=0
4900 X=INT(Q7/Q8)
   : IF X+Q9>=D2THEN 4980
   : Q9=Q9+X
   : Q7=253
   : B=B+1
   : GOTO 4900
4980 Q7=Q7-Q8*(D2-Q9)
   : IF Q6=1THEN 5050
   : IF U=1THEN 5050
   : Q6=1
   : Q8=L3-K+1
   : Q9=0
   : GOTO 4900
5050 RETURN
5320 DEFFN'43
   : X=INT(S0/256)
   : BIN(X1$)=X
   : BIN(STR(X1$,2,1))=S0-256*X
   : RETURN
5460 DEFFN'45(Z$,X,Y)
   : E$=Z$
   : Z=LEN(E$)+2
   : STR(E$,Z)="FILE NAME"
   : GOSUB '243(E$,8)
   : Z1$=Q6$
   : GOSUB '1(E$,X,0)
5530 STR(E$,Z)="FILE DEVICE ADDRESS"
   : GOSUB '243(E$,3)
   : STR(Z1$,9)=Q6$
   : GOSUB '1("DEVICE",X,30)
   : IF E1$="310"THEN 5650
   : IF E1$="320"THEN 5730
   : IF E1$="B20"THEN 5770
   : IF E1$="B10"THEN 5690
   : IF E1$="350"THEN 5810
5620 GOSUB '2("INVALID DEVICE ADDRESS")
   : E$=Z$
   : GOTO 5530
5650 ON YGOTO 5660,5670,5680
   : STOP
5660 SELECT #1310
   : RETURN
5670 SELECT #2310
   : RETURN
5680 SELECT #3310
   : RETURN
5690 ON YGOTO 5700,5710,5720
   : STOP
5700 SELECT #1B10
   : RETURN
5710 SELECT #2B10
   : RETURN
5720 SELECT #3B10
   : RETURN
5730 ON YGOTO 5740,5750,5760
   : STOP
5740 SELECT #1320
   : RETURN
5750 SELECT #2320
   : RETURN
5760 SELECT #3320
   : RETURN
5770 ON YGOTO 5780,5790,5800
   : STOP
5780 SELECT #1B20
   : RETURN
5790 SELECT #2B20
   : RETURN
5800 SELECT #3B20
   : RETURN
5810 ON YGOTO 5820,5830,5840
   : STOP
5820 SELECT #1350
   : RETURN
5830 SELECT #2350
   : RETURN
5840 SELECT #3350
   : RETURN
8975 DEFFN'242(W0,Q6$)
   : IF W0<=0THEN 9405
   : IF W0=1THEN 8990
   : STR(Q6$,2)=STR(Q6$,1,W0-1)
8990 PRINT Q6$;
   : RETURN
9010 DEFFN'243(Q6$,Q0)
   : GOSUB 9200
9022 SELECT CO 205
   : Q6$=" "
   : INPUT Q6$
   : IF Q0=0THEN 9231
   : IF LEN(Q6$)<=Q0THEN 9231
   : GOSUB 9150
9032 DEFFN'244(Q0)
   : GOSUB 9220
   : GOSUB 9210
   : GOTO 9022
9038 DEFFN'245(Q6$,Q2,Q3)
   : Q0=ABS(Q2)+Q3+1
   : GOSUB 9200
9044 GOSUB '242(ABS(Q2)+2,HEX(09))
   : PRINT "/"
   : GOSUB 9220
   : SELECT CO 205
   : Q9,W0=-1E-99
   : INPUT Q9
   : IF W0=Q9THEN 9058
   : IF Q9>=0THEN 9070
   : IF Q2<=0THEN 9070
9058 GOSUB 9150
9060 DEFFN'246(Q2,Q3)
   : Q0=ABS(Q2)+Q3+1
   : GOSUB 9220
   : GOSUB 9210
   : GOTO 9044
9070 IF ABS(Q9)>=10^ABS(Q2)THEN 9058
   : W0=ABS(Q9*10^Q3)
   : IF INT(W0)<>W0THEN 9058
   : GOTO 9288
9150 GOSUB 9288
   : PRINT "RE-ENTER"
   : RETURN
9200 GOSUB 9405
   : PRINT HEX(010A);STR(Q6$,1);
9210 GOSUB 9405
   : GOSUB '242(Q0+2,"-")
   : PRINT TAB(64)
9220 PRINT HEX(010A0A)
   : RETURN
9231 PRINT HEX(0A);TAB(64)
   : GOTO 9405
9288 Q6=3
   : Q7=0
   : Q8=1
9290 DEFFN'248(Q6,Q7,Q8)
   : GOSUB 9405
   : IF Q8<1THEN 9350
   : GOSUB 9350
   : SELECT PRINT 205
   : Q6$=" "
   : PRINT STR(Q6$,Q7+1)
   : IF Q8<2THEN 9350
   : FOR W0=2TO Q8
   : PRINT HEX(0A);STR(Q6$,1)
   : NEXT W0
9350 PRINT HEX(01)
   : GOSUB '242(Q7,HEX(09))
   : GOSUB '242(Q6,HEX(0A))
9405 SELECT PRINT 005(64),CO 005
   : RETURN