Listing of file='@GENPART' on disk='vmedia/turbo-1.30.01.wvd.zip'
# Sector 633, program filename = '@GENPART' 0005 REM !@GENPART 07/20/91 By PLS (mod.by KKB 0006 REM ! Copyright Wang Laboratories 1985, 1986, 1989, 1990, 1991, 1993 : REM ! All rights reserved 0007 REM .REM%0 Var + meaning for TBO.CRF 0008 COM V9 : REM /new logic @2405 rem%%S9=SPACESK 0009 REM % TURBO 32 PART BUG & VLSI BOOT PROB FIXED. KKB 01/03/92 0010 DIM A$34,A(64),A0(64),B,B$(64)1,B0,B1,C$64,C0$1,C2$2,C1,C2,C3,C6,D,D$4,D$ (33)3,D1$4,D2,D3,E,E$1,E9,F,F$8,F0,F0$8,F1$8,F2$8,I,I1,I2,I3,I$44,K$1,K1$ 2 : C$=$PSTAT(1) 0011 DIM J$(1) : J$=STR(C$,9,1) : REM % Corrected "Invalid Configuration" problems with VLSI & 386. 3/3/93 MEB 0012 DIM J,K,L,L$52,L$(4)52,L1,L9,M,M1,M2,M$78,M1$80,N,N7,N8,N9,O1,P,P$8,P$(64 )8,Q,Q0,Q1,Q2,Q$(128)2,Q1$8,Q1$(15)8,Q2$3,Q2$(15)3,Q3$2,Q3$(15)2,Q4$(8)8, R(64),R0(64),S,S$48,S0,S2,S(64),S9,T$64,T,T1,T1$(15)13,T2,T2$(15)10 0013 DIM U,U$1,U0$1,U1,U6,U7,U9,W$1,W,W0$48,W1$,W2$,W3$(16)8,W4$(33)3,W5$(15)1 3,W9$,X,X$1,Y$1,Y1,Z,Z$4,Z$(1)3,A$(4)34,S$(4)48,P1$8 0014 REM %0 C0$ OS.type, C2$ OS.rel.# : REM %0 O1 Config.via.CPU, F0 Config.via.item 0015 %STR(C$,9,2)="W ": REM /.TEMP FOR TESTING 0016 C0$=STR(C$,9) : HEXUNPACKSTR(C$,10,1)TO C2$ : F0$="@SYSFILE" 0018 O1=10 : IF C0$="T"THEN 20 : O1=4 : IF C0$="W"THEN 19 : O1=3 : IF C2$>"33"THEN 22 : O1=2 : IF C2$<"26"THEN O1=1 : GOTO 22 0019 IF C2$>="20"THEN O1=5 : REM %%O1=5 0020 BIN(U0$)=0 : IF C0$<>"M"THEN C0$="W" 0021 REM %0 L1 $INIT ok? 0=N 1=Y 0022 L1=0 : IF #PART=1AND #TERM=1THEN L1=1 : IF C0$="M"AND SPACEK<62THEN L1=0 : IF C0$="W"AND SPACEK<1024THEN L1=0 : IF L1=0THEN 24 : L1=0 : M$=$PSTAT(2) : ERRORL1=1 0024 I$=" ## ######## (##) (##)" 0026 C2,V9=0 : INIT(00)A$() : Q1$(),Q2$(),Q3$(),T1$(),T2$()=ALL(20) : SELECT PRINT 005(80) 0028 REM %0 U1 Max.#.parts, M Min.part.size, T1 Max.#.terminals, M1 Max.#.conf igs 0030 U1=16 : M=2 : T1=16 : M1=16 : S1=1024*8 : P1,P0=1 0032 IF O1<4THEN 50 : U1=64 : T1=64 0038 REM %0 B # memory banks, A( Avail.mem./bank, R( Remain.mem./bank : REM %0 I Current Part.ptr, L Load Flag (msg.dsply), S9 Total Sys.mem. 0040 REM %0 B$( Display flags (Bank boundaries) : REM %0 P$ Reconfig.PASSWORD, U # Partitions, T2 # terminals 0044 REM .Partition (I) tables : REM %0 A$ Part(I).#.pages, S( Part(I) size, T$ Part(I).term.# : REM %0 P$( Part(I).ProgName, C$ Part(I) Prog?(Y/N) 0046 REM -- F$,F1$,F2$ = Config.name : REM -- E$ = Display flag (' '=Partitions, 'E'=Dev.tbl, 'H'=Help, 'L'=Conf ig.menu 0050 P$="SYSTEM" 0052 GOSUB 135 0054 REM %^..Initialization (& possible automatic execution) : REM %.User modifiable code 0056 REM %.by CPU # allow unique "@SYSFILE" 0058 IF #ID=9999999999THEN F0$="@SYS1234" 0060 M$=$MSG : X$=$PSTAT(2) : ERROR$MSG,M$=" " 0065 GOSUB 2400 : REM /.Find Space 0070 GOSUB 150 0072 REM .Retain native CPU memory : S0=S9 : MAT MOVE A()TO A0() : MAT MOVE R()TO R0() : B0=B : U$=" " : IF O1>3THEN U$=HEX(00) 0075 GOTO 95 : REM %Delete this GOTO to prompt for memory size 0080 GOSUB '198 : L$=HEX(0000) : PRINTUSING TO L$,"####.##",S9 0085 PRINT AT(3,0); : LINPUT "Amount of memory available for partitioning (in K)?"STR(L$,3,6) : CONVERT STR(L$,3,6)TO S9 : ERRORGOTO 85 0090 S9=FNT(S9) : IF S9>229THEN 85 : GOSUB 160 : GOTO 115 0095 REM %Initially LOAD a DEFAULT Configuration (pass name to SubRoutine '205 ) : GOSUB '205("current") : IF F1$<>F$THEN 115 : E$="?" : L=1 : IF F0=2THEN U0$=U$ : F9$=F$ 0100 GOTO 1150 : REM %Delete this GOTO for AUTOMATIC EXECUTION 0105 GOTO 420 : REM %Delete this GOTO to Randomize PASSWORD 0110 CONVERT RND(1)TO P$,(.#######) : GOTO 425 0115 GOSUB 320 : GOSUB 135 : L=0 : IF F$=" "THEN 130 : GOTO 1150 0120 PRINT AT(U7,0,80); : IF L<>0THEN PRINT "Configuration '";F$;"' loaded. "; : L=0 : RETURN 0125 REM %.'0 Clear all partitions 0130 DEFFN'0 : F0,F=0 : GOSUB 2800 : FOR I=1TO 15 : Q1$(I),Q2$(I),Q3$(I)=" " : NEXT I : GOSUB '191 : REM Set T1$() : RETURN CLEAR ALL : GOSUB 135 : GOSUB '204 : GOTO 176 0135 MAT S=ZER : C$=ALL("Y") : P$()=ALL(" ") : U,L=0 : U7,U6=22 : MAT MOVE A()TO R() : B$()=ALL(" ") : E$=" " : RETURN 0145 REM % *** CALCULATE MEMORY SIZE *** 0150 IF C0$<>"W"THEN 160 : MAT A=ZER : A(1)=S9 : B=1 : RETURN 0160 MAT A=ZER : A(1)=MIN(S9,61) : J=S9-61 : X=1 0165 IF J<=0OR X=U1THEN RETURN : X=X+1 : A(X)=MIN(J,56) : J=J-56 : GOTO 165 0170 REM %.'4 Edit configuration 0175 DEFFN'04 : F=4 : RETURN CLEAR ALL : GOSUB '204 0176 REM .Calculate RAM disk : X=0 : FOR I=1TO U1 : X=X+S(I) : NEXT I : K=1+MOD(K,U) : PRINT AT(3,0,50); : IF F0=-2THEN GOSUB 2690 : IF C0$="W"AND F0=0THEN GOSUB 2700 : X=X9-X : IF X<0THEN 180 0178 N9=N8 : IF N8<2THEN N9=4*X : D$=HEX(0340) : MAT SEARCHD$(),=D$TO Q3$ : IF Q3$>HEX(0000)THEN REM PRINT" RAM disk memory";N9;"sectors" 0180 GOSUB 120 0185 IF E$<>" "OR U=0THEN 175 : IF K<1OR K>U1THEN K=1 : PRINT HEX(0E);"Edit which partition (default =";K;")"; : INPUT K : ERRORGOTO 180 0190 IF K<>INT(K)OR K<=0OR K>UTHEN 180 : X=INT((K-1)/16) : P0=(16*X)+1 : IF P1<>P0THEN 260 : GOSUB 230 0195 X=S(K) : PRINT AT(U7,0,80); : PRINT "Partition size (default =";X;"K)"; : INPUT X : ERRORGOTO 195 0200 IF X<MAND X<>0THEN 195 : X=FNT(X) : IF X>A(1)THEN 195 : IF S(K)=XTHEN 204 : S(K)=X : GOSUB 1920 : GOSUB 230 0204 IF F0=0THEN GOSUB 1232 0205 T=VAL(STR(T$,K)) : PRINT AT(U7,0,80);"Terminal (default =";T;")"; : INPUT T : ERRORGOTO 205 0210 IF T<>INT(T)OR T<0OR T>T1THEN 205 : IF VAL(STR(T$,K,1))=TTHEN 215 : STR(T$,K,1)=BIN(T) : GOSUB 235 0215 X$=STR(C$,K,1) : PRINT AT(U7,0,80); : INPUT "Enable programming (Y or N) ",X$ : $TRAN(X$,"YyNn")R : IF POS("YN"=X$)=0THEN 215 : IF STR(C$,K,1)=X$THEN 220 : STR(C$,K,1)=X$ : GOSUB 230 0220 IF P$(K)<>" "THEN P1$=P$(K) : PRINT AT(U7,0,80) : LINPUT "Name of program to load?"?-P1$ : P$(K)=P1$ : GOSUB 240 : GOTO 175 0230 PRINT HEX(0E); : GOSUB '206(K) : GOTO 250 0235 PRINT HEX(0E); 0240 GOSUB '206(-K) 0250 K1=MOD(K-1,16)+1 : PRINT AT(K1+4,1);"*" : RETURN 0260 REM .New page : REM .Save 16 old params : X=INT(P1/16)+1 : A$(X)=A$ : S$(X)=S$ : REM .Move in 16 new page items : Z=INT(P0/16)+1 : A$=A$(Z) : S$=S$(Z) 0265 PRINT AT(2,34);"Page ";Z;"of";INT((U-1)/16)+1 0270 FOR X=1TO 16 : PRINT AT(4+X,0,50) : NEXT X : X=K : FOR K=P0TO MIN(P0+15,U) : GOSUB '206(K) : NEXT K : P1=P0 : K=X : GOTO 180 0300 REM %.'1 Clear Device table 0310 DEFFN'01 : F=1 : GOSUB 320 : E$="?" : GOTO 1390 0320 D$()=ALL(00) : D$(1)=HEX(021500) : D$(2)=HEX(031000) : D$(3)=HEX(032000) : D$(4)=HEX(033000) : D$(5)=HEX(034000) : RETURN 0330 REM %.'2 Divide memory 0335 DEFFN'02 : F=2 : RETURN CLEAR ALL : GOSUB '204 : L$()=ALL(00) : B$(U)="Y" : MAT SEARCHB$(),="Y"TO STR(L$(),3) : B$(U)="N" 0340 IF ABS(F0)=2THEN 350 : IF F0=0AND C0$="W"THEN 350 0342 IF B=1THEN 380 : Q3$="A" : PRINT AT(U7,0,80); : LINPUT "Divide memory evenly in which bank (default = all)",Q3$ : X$=Q3$ : IF X$="A"OR X$="a"THEN 380 : CONVERT STR(Q3$,,NUM(Q3$))TO J : ERRORGOTO 340 0345 IF J<1OR J>BTHEN 342 : F0=1 : GOSUB 355 : GOTO 385 0350 X=S9 : PRINT AT(U7,0,80);"Divide how much program memory (default =";X;"K)"; : INPUT X : ERRORGOTO 350 0352 IF X<MOR X>S9THEN 350 : F0=2 : R(1)=X : A,J=1 : N=0 : X=U : GOSUB 360 : GOTO 385 0355 N=0 : X=VAL(STR(L$(),2*J+1),2) : IF X=0THEN 385 : A=VAL(STR(L$(),2*(J-1)+1),2)+1 0360 FOR I=ATO X : IF S(I)=0THEN N=N+1 : NEXT I : IF N=0THEN RETURN : S2=FNT(R(J)/N) 0365 IF S2>=MTHEN 370 : S2=J : GOSUB 1920 : GOSUB '200 : PRINT AT(U7,0,80);"TOO LITTLE REMAINING MEMORY"; : IF B>1THEN PRINTUSING " IN BANK #",S2; : PRINT ". "; : GOTO 185 0370 IF R(J)-(S2*N)<0THEN S2=S2-.25 : FOR I=VAL(STR(L$(),2*(J-1)+1),2)+1TO VAL(STR(L$(),2*J+1),2) : IF S(I)=0THEN S(I)=S2 : NEXT I : RETURN 0380 F0=1 : FOR J=1TO B : GOSUB 355 : NEXT J 0385 K=0 : GOSUB 1920 : GOSUB '200 : GOTO 175 0390 REM %.'15 Execute configuration 0395 DEFFN'15 : F=15 : RETURN CLEAR ALL : GOSUB '204 : IF C0$="W"THEN GOSUB 2710 : IF L1=1THEN 400 : M1$="SYSTEM HAS ALREADY BEEN CONFIGURED." : GOSUB '196 : GOTO 185 0400 IF O1=4AND W>16THEN F0=-2 : IF J$="W"AND W>16THEN 403 : IF F0>-1THEN 405 0403 M1$="INVALID CONFIGURATION FOR THIS CPU." : GOSUB '196 : GOTO 1150 0405 GOSUB 1860 : IF X$="T"THEN GOSUB '200 0410 PRINT AT(U7,0,80);"Check configuration. OK to execute (Y or N)"; 0415 KEYIN X$,415,415 : X$="N" : INPUT X$ : ON POS("YyNn"=X$)GOTO 420,420,180,180 : GOTO 410 0420 PRINT AT(U7,0,80); : LINPUT "Reconfiguration password?"?-P$ 0425 GOSUB 510 : IF X>S0THEN 630 : GOTO 840 0500 REM .%.OK configuration 0510 FOR I=1TO 15 : IF Q2$(I)=" "OR Q2$(I)=HEX(000000)THEN 530 : Q2$=ALL(00) : HEXPACKQ2$FROMQ2$(I) : ROTATEC(Q2$,-4) : MAT SEARCHD$(),=STR(Q2$,,2)TO Q3$STEP 3 : IF VAL(STR(Q2$,2))<>4AND VAL(Q3$,2)=0THEN 680 : NEXT I 0530 X=0 : FOR I=1TO U : K=S(I) : IF K=0THEN 640 : IF K<MTHEN 620 : X=X+K : NEXT I 0590 A$=ALL(00) : IF ABS(F0)=2THEN 610 0600 REM %VLSI : FOR I=1TO B : IF R(I)<0THEN 650 : NEXT I : FOR I=1TO U : STR(A$,I,1)=BIN(S(I)*4) : NEXT I : RETURN 0610 REM %.386 : IF X>A(1)THEN 630 : FOR I=1TO U : Q0=S(I)*4 : Q1=INT(Q0/256) : Q2=Q0-Q1*256 : Q=I*2-1 : STR(A$(),Q,1)=BIN(Q1) : STR(A$(),Q+1,1)=BIN(Q2) : NEXT I : RETURN 0620 PRINT AT(U6,0,80);HEX(07);"SIZE OF PARTITION";I;"IS ILLEGAL. "; : GOTO 185 0630 M1$="Configuration too large" : GOSUB '196 : GOTO 185 0640 M1$="All partitions require some memory" : GOSUB '196 : GOTO 175 0650 PRINT AT(U6,0,80);HEX(07);"AVAILABLE MEMORY EXCEEDED IN BANK";I;". "; : GOTO 185 0680 M1$="Re-edit, printer "&Q2$(I)&" is not in the device table" : GOSUB '196 : GOTO 176 0840 D$(33)=ALL(00) : I=1 : FOR D=1TO 32 : IF STR(D$(D),2,1)=HEX(00)THEN 850 : D$=D$(D) : D$(D)=ALL(00) : D$(I)=D$ : I=I+1 : GOTO 860 0850 D$(D)=ALL(00) 0860 NEXT D : PACK(####.##)S$()FROMS() 0870 DATA LOAD DC OPEN T#0,F0$ : ERRORGOTO 890 0880 F$="current" : GOSUB 2760 0890 MAT REDIM P$(U1)8,A$(U1+2)2 : IF U<64THEN STR(T$,U+1)=ALL(00) : $TRAN(C$,HEX(014E00590020))R : FOR I=1TO U1 : IF P$(I)<>" "THEN STR(C$,I,1)=OR HEX(02) : NEXT I : T9$=T$ : C9$=C$ 0900 GOSUB '192 : REM PACK DRIVER DATA FOR INIT STATEMENT 0901 E=0 : $MSG=M$ 0902 REM % Test OS type to $INIT : ON O1GOTO 904,903,903 : GOTO 905 0903 REM .MVP>2.6 : $INIT(A$,T9$,C9$,P$(),D$(),P$,T2$()) : ERRORE=ERR : IF E=88THEN GOSUB '217 : IF E=82THEN GOSUB '219 : ELSE GOSUB '218 0904 REM .MVP<2.6 : $INIT(A$,T9$,C9$,P$(),D$(),P$) : ERRORE=ERR : IF E=88THEN GOSUB '217 : IF E=82THEN GOSUB '219 : ELSE GOSUB '218 0905 REM .CS/386 : IF U$>HEX(00)THEN U$=ADDHEX(FF) : U$=U$AND HEX(1F) : $INIT(U$,A$(),STR(T$,,U1),STR(C$,,U1),P$(),D$(),P$,T2$()) : ERRORE=ERR : IF E=88THEN GOSUB '217 : IF E=82THEN GOSUB '219 : ELSE GOSUB '218 0910 REM .$INIT arg1,arg2,arg3,arg4,arg5,[arg6],[arg7] ref p.16-47 : REM .Arg.1 Part.size : REM .Arg.2 Term #s : REM .Arg.3 Part.modes : REM .Arg.4 Prog.Names : REM .Arg.5 Device table : REM .Arg.6 PASSWORD : REM .Arg.7 Printer Tables 0912 REM .Arg.0 CPU (CS/386 only) 0919 REM %.'9 Save Configuration 0920 DEFFN'09 : F=9 : RETURN CLEAR ALL : GOSUB '204 : GOSUB 1860 : IF X$="T"THEN GOSUB '200 : PACK(####.##)S$()FROMS() : S$=S$(1) : GOSUB 510 0930 PRINT AT(U7,0,80);"Check configuration to save. Configuration name?"; : LINPUT ?-F$ : IF F$=" "THEN 930 0940 LIMITS T#0,F0$,D,I,D2,D3 : ERRORGOSUB 1120 : GOTO 940 0950 IF D3>0THEN 980 : IF D3=-2THEN 970 : DATA SAVE DC OPEN T#0,(3*(M1+1)+2)F0$ : ERRORGOSUB 1120 : GOTO 940 0960 F$="current" : GOSUB 2760 : DATA SAVE DC #0,END : GOTO 940 0970 DATA SAVE DC OPEN T#0,F0$,F0$ : GOTO 960 0980 DATA LOAD DC OPEN T#0,F0$ : D,I=0 0990 DATA LOAD DC #0,F1$,W : IF END THEN 1020 : D=D+3 : IF F1$=" "AND I=0THEN I=D : IF F$<>F1$THEN 990 0995 IF INT((W-1)/16)+1<>INT((U-1)/16)+1THEN 1015 1000 PRINT AT(U7,0,80);"Configuration '";F$;"' already exists. Overwrite it ( Y or N)"; : INPUT X$ : ON POS("YyNn"=X$)GOTO 1050,1050,1010,1010 : GOTO 1000 1010 PRINT AT(U7,0,80); : GOTO 1030 1015 PRINT AT(U7,0,80);"Configuration size differs. "; : GOTO 1030 1020 IF I>0THEN 1070 : IF D2<3*(M1+1)+2THEN 1090 : GOSUB 1340 : PRINT AT(U7,0,80);"CONFIGURATION FILE FULL. "; 1030 F1$=" " : LINPUT "Old configuration to overwrite?"?-F1$ : IF F1$="current"OR F1$=" "THEN 1010 : DBACKSPACE #0,BEG 1040 DATA LOAD DC #0,F2$,W : IF END THEN 1080 : IF F2$<>F1$THEN 1040 1045 IF INT((W-1)/16)+1<>INT((U-1)/16)+1THEN 1015 1050 DBACKSPACE #0,3S : GOSUB 2760 1060 GOTO 1110 1070 DBACKSPACE #0,BEG : DSKIP #0,IS : GOTO 1050 1080 PRINT AT(U7,0,80);"'";F1$;"' DOES NOT EXIST. "; : GOTO 1030 1090 GOSUB 2760 1100 DATA SAVE DC #0,END 1110 PRINT AT(U7,0,80);"Configuration '";F$;"' saved. "; : GOTO 185 1120 PRINT AT(U7,0,80); : X=ERR : IF X=95THEN PRINT "DISK IS WRITE PROTECTED, "; : ELSE PRINT "ERROR";X; 1130 X$=" " : LINPUT "Key 'RETURN' to retry."?X$ : RETURN 1140 REM %.'8 Load Configuration from disk 1150 DEFFN'08 : F=8 : RETURN CLEAR ALL : E$=" " : GOSUB 1340 : GOSUB 2800 1155 IF F9$<>" "THEN GOSUB '205(F9$) : F9$=" " 1160 GOSUB 120 : F1$=" " 1170 LINPUT "Name of configuration to load?"?-F1$ : IF F1$=" "THEN 1190 : PRINT AT(U7,0,80); 1180 GOSUB '205(F1$) : IF F$<>F1$THEN 1190 : P0,L=1 : GOTO 175 1190 PRINT AT(U7,0,80);"'";F1$;"' DOES NOT EXIST. "; : GOTO 1170 1200 REM %*** LOAD S.R. *** 1210 DEFFN'205(F1$) : F0=0 : F$=" " : DATA LOAD DC OPEN T#0,F0$ : ERRORM1$="NO CONFIGURATIONS SAVED." : GOSUB '196 : RETURN 1220 GOSUB 2730 : IF LEN(W9$)>1THEN 2320 : F$=F2$ : U=W : U$=W$ : S$(),S$=W0$ : T$=W1$ : C$=W2$ : P$()=W3$() : D$()=W4$() : T1$()=W5$() : U9=VAL(U$) : IF END THEN 1226 : IF F$<>F1$THEN 1220 : IF W>16THEN 2740 : GOSUB 1232 1226 T2=0 : Y$=HEX(01) : IF STR(T$,32,1)=HEX(20)THEN STR(T$,32,1)=HEX(80) : $TRAN(T$,HEX(0020))R : $TRAN(T$,HEX(2080))R : IF U<32THEN STR(T$,32,1)=HEX(00) : REM .Set T2 = # terminals used 1228 MAT SEARCHT$,=Y$TO Q3$ : IF Q3$>HEX(0000)THEN T2=T2+1 : Y$=ADDHEX(01) : IF VAL(Y$)<=T1THEN 1228 1230 GOSUB '190 : U6=MIN(22,U+6) : UNPACK(####.##)S$()TO S() : B$()=ALL(" ") : MAT A=ZER : A(1)=S1 : IF ABS(F0)<>1THEN 1920 : A(1)=61 : FOR B=2TO 16 : A(B)=56 : NEXT B : GOTO 1920 1232 IF U$<" "THEN F0=2 : IF U$=" "THEN F0=1 : IF C0$="W"AND U$=" "THEN F0=-F0 : IF C0$<>"W"AND U$<" "THEN F0=-F0 : RETURN 1234 REM % If ERROR finding '$INIT' then EXECUTE following ERROR routine. 1235 DEFFN'219 : PRINT HEX(06);AT(23,0,80);"Printer driver table not on current platter (D ISK ERROR ";E;")";HEX(0F) : STOP # 1236 DEFFN'218 : PRINT HEX(06);AT(23,0,80);"Error number";E;"encountered initializing syst em." : PRINT "Incorrect configuration , specified file is not a driver table or not enough memory.";HEX(0F) : STOP # 1237 DEFFN'217 : PRINT HEX(06);AT(23,0,80);"Printer driver table error (DISK ERROR ";E;")" ;HEX(0F) : STOP # 1240 REM %.'10 Delete configuration 1250 DEFFN'10 : F=10 : RETURN CLEAR ALL : GOSUB 1340 1260 PRINT AT(U7,0,80); 1270 F$,F1$=" " : LINPUT "Delete which configuration? "?-F1$ 1280 IF F1$="current"THEN 1260 : DBACKSPACE #0,BEG 1285 REM .Remove unwanted configuration from @SYSFILE 1290 GOSUB 2730 : IF END THEN 1320 : IF F1$<>F2$THEN 1290 : Z=3*(INT((W-1)/16)+1) : REM /.Set # Sectors to remove 1295 IF W>16THEN DSKIP #0,Z-3S 1296 REM .Following loop -- Read - skip back - write - skip up repeat 1300 GOSUB 2730 : IF END THEN 1310 : DBACKSPACE #0,3+ZS : DATA SAVE DC #0,F2$,W,STR(W9$,,1),W0$,W1$,W2$,W3$(),W4$(),W5$() : DSKIP #0,ZS : GOTO 1300 1310 DBACKSPACE #0,ZS : DATA SAVE DC #0,END : E$="?" : GOTO 1150 1320 PRINT AT(U6,0,80);"CONFIGURATION '";F1$;"' DOES NOT EXIST. "; : GOTO 1270 1330 REM %*** LIST STORED CONFIGURATIONS *** 1340 DATA LOAD DC OPEN T#0,F0$ : ERRORM1$="NO CONFIGURATIONS SAVED." : GOSUB '196 : IF U=0THEN 130 : GOTO 185 1350 IF E$="L"THEN RETURN : E$="L" 1360 GOSUB '201 : PRINT AT(4,0);"O.K. Configuration (#Partitions) (CPU number)" : I=0 1370 GOSUB 2730 : IF END THEN RETURN : IF F2$<=" "THEN 1370 : IF W$>" "THEN 1370 1372 IF W$=" "THEN C2$=".." : ELSE CONVERT VAL(W$)TO C2$,(##) 1374 Y$=" " : IF O1>3AND W$<" "THEN Y$="y" : IF O1<4AND W$=" "THEN Y$="y" 1375 IF W=UAND W$=U$AND W0$=S$AND W1$=T$AND W2$=C$AND W3$()=P$()AND W4$()=D$() AND W5$()=T1$()THEN PRINT HEX(060E); : PRINTUSING I$,Y$;F2$;W;C2$ : GOTO 1370 1380 REM %.'5 Edit Device table 1385 DEFFN'05 : F=5 1390 RETURN CLEAR ALL : IF E$="E"THEN 1480 : E$="E" 1400 GOSUB '201 : PRINT AT(2,0);" DEVICE PARTITION DEVICE PARTITION" : GOSUB '202(0) : D=1 1410 PRINT AT(U7,0,80);HEX(0E);"Edit which entry (default =";D;")"; : INPUT D : ERRORGOTO 1410 1420 IF D<>INT(D)OR D<=0OR D>32THEN 1410 : PRINT HEX(0E); : GOSUB '202(D) : IF D<17THEN PRINT AT(2+D,0);"*" : ELSE PRINT AT(2+D-16,24);"*" 1430 HEXUNPACKSTR(D$(D),1,2)TO D$ : P=VAL(STR(D$(D),3)) 1440 D1$="/"&STR(D$,2) : PRINT AT(U7,0,80);"Device address (default = /";STR(D$,2);", /000 to dele te entry)"; : INPUT D1$ : M1$=" " : PRINT AT(U7,0,80);HEX(060E);M1$;HEX(0F) : IF STR(D1$,2,1)="D"THEN 1440 : IF VER(D1$,"/HHH")<>4THEN 1440 : IF D1$="/000"THEN 1500 1442 IF POS("Aa"=STR(D1$,2,1))>0THEN 1440 : STR(Z$,1)=HEX(30) 1443 STR(Z$,2)=STR(D1$,2) : HEXPACKZ$(1)FROMZ$ : STR(Z$(1),3)=HEX(00) 1444 FOR Z=1TO 32 : IF Z=DTHEN 1446 : IF STR(D$(Z),2,1)<>STR(Z$(1),2,1)THEN 1446 1445 M1$="Device address already assigned." : GOSUB '196 : GOTO 1440 1446 NEXT Z 1447 STR(D$,2)=STR(D1$,2) : PRINT HEX(0E); : GOSUB '203(D) : HEXPACKD$(D)FROMD$ : STR(D$(D),3)=HEX(00) 1450 X=0 : PRINT AT(U7,0,80);"Allocate device to which partition (default = all)"; : INPUT X : ERRORGOTO 1450 1460 IF X<0OR X>UOR X<>INT(X)THEN 1450 : P=X : GOSUB '203(D) 1470 HEXPACKD$(D)FROMD$ : STR(D$(D),3)=BIN(P) 1480 IF D<17THEN PRINT AT(2+D,0);" "; : ELSE PRINT AT(2+D-16,24);" " 1490 D=1+MOD(D,32) : GOTO 1410 1500 FOR J=DTO 32 : D$(J)=D$(J+1) : GOSUB '202(J) : NEXT J : GOTO 1410 1510 REM %*** EDIT $MSG *** 1520 DEFFN'06 : F=6 : RETURN CLEAR ALL 1530 PRINT AT(0,0);AT(U7-1,0,80);"Broadcast message:" : LINPUT ?-M$ : PRINT AT(U7-1,0,159); : GOTO 175 1540 REM %*** DISPLAY DEVICE TABLE *** 1550 DEFFN'202(I) : IF I=0THEN 1580 1560 HEXUNPACKSTR(D$(I),1,2)TO D$ : P=VAL(STR(D$(I),3)) 1570 DEFFN'203(I) : PRINT HEX(06);AT(3+MOD((I-1),16),24*INT((I-1)/16),18); : PRINTUSING " ##.",I; : IF STR(D$,2,3)="000"THEN RETURN : PRINT " /";STR(D$,2,3);" "; : IF P=0THEN PRINT "all" : ELSE PRINT P : RETURN 1580 FOR I=1TO 32 : GOSUB 1560 : NEXT I : RETURN 1690 REM %.'200 *** DISPLAY ALL PARTITIONS *** 1710 DEFFN'200 : IF O1>3THEN 1715 : FOR I=MIN(2,U)TO U : GOSUB '206(-I) : NEXT I : GOSUB '206(1) : RETURN 1715 FOR I=P0+1TO MIN(U,P0+15) : GOSUB '206(-I) : NEXT I : GOSUB '206(P0) : RETURN 1720 REM '206 DISPLAY ONE PARTITION 1730 DEFFN'206(I) : J=ABS(I) : L$=HEX(0000) : Z=J-P0 : IF Z<0THEN Z=0 1740 IF S(J)>0THEN PRINTUSING TO L$,1820,J,S(J),VAL(STR(T$,J)),STR(C$,J,1),P$( J); : ELSE PRINTUSING TO L$,1820,J," -",VAL(STR(T$,J)),STR(C$,J,1),P$(J); 1750 IF B$(J)="Y"THEN STR(L$,5)=OR ALL(80) 1760 IF J<=UTHEN PRINT HEX(06);AT(5+Z,0);STR(L$,3);TAB(50);HEX(0F); 1770 IF I<0OR ABS(F0)=2THEN 1780 : IF C0$="W"AND F0=0THEN 1780 : PRINT AT(2,17); : FOR J=1TO B : PRINTUSING "-## ",R(J); : NEXT J 1780 IF ABS(I)>INT(5/M)OR B=1THEN 1810 : X=0 : FOR J=1TO INT(5/M) : X=X+S(J) 1785 Z=J-P0 1790 IF X<=5AND S(J)>0THEN X$="u" : ELSE X$=" " : IF B$(J)="Y"THEN 1810 1800 IF S(J)>0THEN PRINT AT(5+Z,7);STR(X$,,1) : IF B$(J)="Y"THEN J=U : NEXT J 1810 I=ABS(I) : E$=" " : RETURN 1820 % ## ####.## ### # ########## 1830 REM %*** TRUNCATE TO PAGES *** 1840 DEFFNT(X)=-.25*INT(-4*X) 1850 REM %*** PAD MEMORY BANKS *** 1860 X$="F" : MAT SEARCHB$(),="Y"TO L$ 1870 FOR I=0TO B-2 : J=VAL(STR(L$,2*I+1),2) : IF J=0THEN 1900 1880 IF R(I+1)=0THEN 1890 : S(J)=S(J)+R(I+1) : X$="T" 1890 NEXT I 1900 GOSUB 1920 : RETURN 1910 REM %*** CALCULATE REMAINING SPACE *** 1920 MAT MOVE A()TO R() : J=1 : IF B$(1)=" "THEN 1970 1930 FOR I=1TO U : R(J)=R(J)-S(I) : IF B$(I)="N"THEN 1950 : J=J+1 : IF J>BTHEN I=U 1950 NEXT I : RETURN 1960 REM ESTABLISH BANK BOUNDARIES 1970 B$()=ALL("N") : IF U$<" "THEN 1985 : FOR I=1TO U : IF R(J)-S(I)>=0OR J+1>BTHEN 1980 : J=J+1 : B$(I-1)="Y" 1980 R(J)=R(J)-S(I) : IF J=BAND R(J)<0THEN R(J)=0 : NEXT I : RETURN 1985 FOR I=1TO U : R(1)=R(1)-S(I) : NEXT I : RETURN 1990 REM %*** PARTITION DISPLAY *** 2000 DEFFN'204 : IF E$<>" "OR U=0THEN 2010 : IF K<=0OR K>UTHEN RETURN : K1=MOD(K-1,16)+1 : PRINT AT(K1+5,0,2); : GOSUB '206(K) : E$=" " : RETURN 2010 E$=" " : GOSUB '201 : IF ABS(F0)=2OR F0=0AND O1>3THEN 2035 2020 PRINT AT(1,0,80);"Available memory:"; : FOR I=1TO B : PRINTUSING "-## ",A(I); : NEXT I : PRINT AT(2,0,80);"Remaining memory:"; : FOR I=1TO B : PRINTUSING "-## ",R(I); : NEXT I : GOTO 2040 2035 PRINT AT(2,0,50); : PRINTUSING 2715,"Available";S9 : B=1 : IF F=0THEN GOSUB 2170 2040 PRINT AT(0,0) 2050 IF U>0THEN 2120 : PRINT AT(5,0,52); : INPUT "No. of terminals",T2 : ERRORGOTO 2050 2060 IF T2>T1OR T2<1THEN 2050 : B$()=ALL("N") : U=0 : FOR I=1TO B : X=-1 2070 PRINT AT(5+I,0,52);"No. of partitions in "; : IF B=1THEN PRINT "system"; : ELSE PRINT "bank";I; : INPUT X : ERRORGOTO 2070 2075 IF X<>INT(X)THEN 2070 : IF X=0AND I=1THEN 2070 2076 IF U+X<=U1THEN 2080 : PRINT HEX(07);"NUMBER OF PARTITIONS EXCEEDS";U1 : GOTO 2070 2080 IF X<0OR X>U1THEN 2070 : IF X=0THEN 2090 : U=U+X : B$(MIN(U1,U))="Y" : NEXT I 2090 B$(MIN(U1,U))="N" : U6=MIN(22,U+6) : IF U<=U1THEN 2100 : U=0 : U6=19 : PRINT HEX(07);"NUMBER OF PARTITIONS EXCEEDS";U1 : GOTO 2060 2100 FOR I=6TO 22 : PRINT AT(I,0,52); : NEXT I 2110 T$=ALL(00) : FOR I=1TO T2 : STR(T$,I,1)=BIN(MOD(I-1,T2)+1) : NEXT I 2120 IF U<>INT(U)OR U<=0OR U>U1THEN 2050 2125 PRINT AT(4,0,52); : PRINT "Partitions =";U," Terminals =";T2;TAB(35);"CPU number =";VAL(U$) 2130 PRINT AT(5,0,52);"PARTITION SIZE(K) TERMINAL PROGRAMMABLE PROGRAM" 2140 GOSUB '200 : RETURN 2160 DEFFN'11 : F=11 : RETURN CLEAR ALL : IF U$=" "THEN 175 : GOSUB 2170 : PRINT AT(3,0,52); : GOTO 175 2170 PRINT AT(0,0);AT(MIN(22,U6),0,80);AT(4,0,52); : IF U9<1THEN U9=1 : INPUT "CPU number ( 1 - 31 )",U9 : ERRORGOTO 2170 2180 IF U9<>INT(U9)OR U9>31OR U9<1THEN 2170 : BIN(U0$)=U9 : U$=U0$ : RETURN 2300 REM % ERROR HANDLER FOR NEW GENPART WITH OLD SYSFILE 2310 GOSUB '198 : M1$=ERR$(E) : IF E=74THEN 2320 : PRINT AT(4,0);"Error while loading ";F0$;E;"= ";M1$ : PRINT AT(18,0); : END 2320 PRINT AT(4,0,5*80);"In order to use this version of the 2200 MVP operatin g system, the System "; : PRINT "Configuration File ('";F0$;"') must be converted to a new format." ;HEX(0D0A) 2340 PRINT AT(8,0); : Y$="Y" : LINPUT "Do you want to run the conversion program ",-Y$ : ERRORGOTO 2340 2350 IF Y$="Y"OR Y$="y"THEN 2360 : END 2360 V9=1 : STOP # : LOAD T"@MODSYSF" : ERRORE=ERR 2370 PRINT : PRINT "Sorry - cannot run '@MODSYSF' (Disk error ";E;")" : END 2390 REM %^.TBO S.R.s 2392 REM .determine RAM memory : REM .On 386 use SPACE SK : REM .on VLSI boot use SPACEK : REM .On VLSI subsequent tis tough 2400 GOSUB '198 : S9=SPACEK : IF C0$="W"THEN 2405 : REM .VLSI : B=INT(S9/56) : IF S9<=61THEN GOSUB 2410 2402 A(1)=61 : FOR I=2TO U1 : A(I)=56 : NEXT I : RETURN 2405 REM %%S9=\F3SK : REM .386 CODE : RETURN 2410 REM .Not VLSI boot : FOR I=1TO U1 : L$=ALL(00) : L$=$PSTAT(I) : ERRORI=U1 : GOTO 2430 2420 B=VAL(STR(L$,11)) : REM /.B = last used bank 2430 NEXT I 2440 B1,N9=0 : D$="340" : SELECT #1<D$> : VERIFY T#1,(0,0)N9 : ERRORGOTO 2480 2450 PRINT AT(5,0,50);"EXAMINING RAM DISK" : GOSUB 2600 : REM /.Find RAM disk : N9=N8 : B1=INT(N9/256) : IF N9/256>B1THEN B1=B1+1 : REM /.B1 = Banks of RAM disk 2480 B=B+B1 : S9=(56*B)+5 : IF B>16THEN B=16 : RETURN 2600 N9,E9=36000 : IF C2$<"31"THEN 2635 2620 REM ".Verify gross blocks" : M2=16*64*4 : S=100 : GOSUB 2660 2630 REM ".Verify fine blocks " : E9,N9=N8 : M2=S : GOSUB 2660 : IF N8>0THEN 2640 2635 REM .Check within main memory : I1=(17-B)*4*64 : VERIFY T#1,(0,I1)N8 : N7=1 2640 PRINT "Sectors of RAM disk = ";N8-1 : RETURN 2650 E9=E9-M2 2660 N8=N9 : I2=E9 : I1=E9-S : IF I1>0THEN 2670 : N9,N8=0 : RETURN 2670 VERIFY T#1,(I1,I2)N9 : IF N9>0THEN 2650 : RETURN 2690 PRINT AT(1,0,200);"CS/386 configuration" : PRINTUSING 2715;"Available",S1 : S9=S1 2700 R(1)=S9-X : PRINTUSING 2715,"Remaining",R(1) 2710 IF U$<" "THEN PRINT AT(4,35);"CPU number =";U9 : RETURN 2715 %######### memory: -##,###,### K 2720 REM .S.R. to read config item 2730 DATA LOAD DC #0,F2$,W,W9$,W0$,W1$,W2$,W3$(),W4$(),W5$() : ERRORE=ERR : GOTO 2300 2735 W$=W9$ : RETURN 2740 REM .LOAD >16 partitions : IF F$=F1$THEN 2745 : DSKIP #0,3*(INT((W-1)/16)+1)-3S : GOTO 1220 2745 GOSUB 1232 : S$(1)=S$ : FOR X=2TO 4 : GOSUB '194(X) : NEXT X : GOTO 1226 2750 DEFFN'194(X) : IF U<16*X-15THEN RETURN : GOSUB 2730 : STR(S$(),X*48-47)=W0$ : STR(T$,X*16-15)=W1$ : STR(C$,X*16-15)=W2$ : STR(P$(),X*128-127)=W3$() : RETURN 2758 REM .S.R. to write config item 2760 GOSUB '191 : IF O1<4AND F0<>-2THEN U$=" " : IF J$="M"THEN 2770 2765 M1$=HEX(004080C0) : FOR X=1TO 4 : GOSUB '193(X) : NEXT X : GOTO 2775 2770 M1$=HEX(204080C0) : FOR X=1TO 4 : GOSUB '193(X) : NEXT X 2775 RETURN 2780 DEFFN'193(X) : IF X>INT((U-1)/16)+1THEN RETURN : U$=U$AND HEX(1F)XOR STR(M1$,X) : W0$=STR(S$(),X*48-47,48) : W1$=STR(T$,X*16-15,16) : W2$=STR(C$,X*16-15,16) : STR(W3$(),,16*8)=STR(P$(),X*128-127) 2790 IF C0$="M"THEN U$=" " : DATA SAVE DC #0,F$,U,U$,W0$,W1$,W2$,W3$(),D$(),T1$() : ERRORGOSUB 1120 : GOTO 2760 2795 RETURN 2800 B=B0 : S9=S0 : MAT MOVE A0()TO A() : MAT MOVE R0()TO R() : U$=U0$ : RETURN 3000 DEFFN'198 : PRINT HEX(03060E);TAB(10);"***** Multiuser BASIC-2 Partition Generation P rogram *****" : PRINT TAB(8);"(c) Copr. Wang Laboratories, Inc. 1986/87/89/90/91/93";HEX (01) : RETURN 3005 DEFFN'126 3006 DEFFN'127 : PRINT HEX(060E);AT(23,0,80); : PRINT "(Returning to System Menu)";HEX(01) : $PSTAT=" " : LOAD T"@MENU" 3010 DEFFN'201 : K=0 : GOSUB '198 3020 PRINT AT(3,51);BOX(18,28);" \CC\E9\F3\F4\A0\EF\E6\A0\EF\F0\F4\E9\EF \EE\F3:" 3030 PRINT AT(4,52);"'00 - clear partitions";AT(5,52);"'01 - clear device tabl e"; 3040 PRINT AT(7,52);"'02 - divide memory evenly";AT(8,52);"'04 - edit partitio ns"; 3050 PRINT AT(9,52);"'05 - edit device table";AT(10,52);"'06 - edit $MSG"; 3060 IF O1<>1THEN PRINT AT(11,52);"'07 - select printer driver"; 3070 PRINT AT(13,52);"'08 - load configuration";AT(14,52);"'09 - save configur ation"; 3080 PRINT AT(15,52);"'10 - delete configuration";AT(20,52);"Press FN/TAB to e xit" 3085 IF U$<" "THEN PRINT AT(17,52);"'11 - edit CPU number" 3090 IF L1=0THEN RETURN : PRINT AT(19,52);"'15 - execute" : IF F0>0THEN B=B0 : RETURN 4000 DEFFN'07 : F=7 : REM % DRIVER TABLE ENTRY POINT : IF O1=1THEN RETURN : C2,C1,C3=0 4020 RETURN CLEAR ALL : E$="T" : IF C1>=1THEN Q1$(C1)=" " : GOSUB '198 : GOSUB '201 : PRINT TAB(14);AT(4,7,45);"\C4\F2\E9\F6\E5\F2 \D4\E1\E2\EC\E5 \CE\E1\ED\E5 \D0\F2\E9\EE\F4\E5\F2 \C1\E4\E4\F2\E5\F3\F3 \D4\E5\F2\ED\A0\A3" : PRINT : FOR I=1TO 15 : PRINT AT(5+I,1); : PRINTUSING " ##.",I; : NEXT I 4030 REM % Set C2 = # of different drivers 4040 FOR I=1TO 15 : IF Q1$(I)=" "THEN 4050 : C3=C3+1 : PRINT AT(5+I,10);Q1$(I);AT(5+I,32);Q2$(I);AT(5+I,47);Q3$(I) 4042 IF C3<>1THEN 4043 : Q4$(1)=Q1$(I) : C2=1 : GOTO 4050 4043 I3=1 : FOR I1=1TO C2 : IF Q1$(I)<>Q4$(I1)THEN 4046 : I1=C2 : I3=0 4046 NEXT I1 : IF I3=0THEN 4050 : C2=C2+1 : Q4$(C2)=Q1$(I) 4050 NEXT I : IF C3=0THEN 4070 4070 PRINT HEX(06);AT(5+C1,0);" " : C1=C1+1 : IF C1>15THEN C1=1 4075 PRINT AT(U7,0,80);"Edit which driver entry (default=";C1;")"; : INPUT C1 : ERRORGOTO 4075 4080 IF C1>15OR C1<1THEN 4070 : Q1$=Q1$(C1) : Q2$=Q2$(C1) : Q3$=Q3$(C1) 4090 PRINT HEX(0E06);AT(5+C1,0);"*";AT(5+C1,10,30);Q1$;AT(5+C1,32);Q2$;AT(5+C1 ,47);Q3$; : PRINT HEX(0F) 4100 PRINT AT(U7,0,80); : LINPUT "Enter Driver Table Name: (enter '0' to delete from configuration) ",?-Q1$ : IF Q1$=" "THEN 4100 : IF Q1$<>"0"THEN 4120 4115 REM .Delete : IF C1=15THEN 4116 : FOR I=C1TO 14 : Q1$(I)=Q1$(I+1) : Q2$(I)=Q2$(I+1) : Q3$(I)=Q3$(I+1) : NEXT I 4116 Q1$(15),Q2$(15),Q3$(15)=" " : GOTO 4000 4120 LIMITS T#0,Q1$,I1,I,I,I : IF I=2THEN 4125 : M1$="File not found on default disk" : GOSUB '196 : GOTO 4100 4125 DATA LOAD BA T#0,(I1)Q$() : IF Q$(1)=HEX(6911)OR Q$(1)=HEX(6A11)THEN 4130 : M1$=Q1$&" is not a printer driver file" : GOSUB '196 : GOTO 4100 4130 REM CHECK FOR NEW UNIQUE DRIVER NAMES : I3=0 : FOR I1=1TO 7 : IF Q1$<>Q4$(I1)THEN 4135 : I3=1 : I1=7 4135 NEXT I1 : IF I3=1THEN 4138 : C2=C2+1 : Q4$(C2)=Q1$ 4138 C3=C3+1 4140 IF C2<8THEN 4150 : M1$="Maximum number of drivers is seven" : GOSUB '196 : C2=7 : Q1$(C1)=" " : GOTO 4070 4150 PRINT AT(5+C1,10,8);Q1$;AT(U7,0,80); : LINPUT "Enter Associated Printer Address:"?-Q2$ 4180 IF VER(Q2$,"HHH")<3THEN 4210 : IF POS("027C4"=STR(Q2$,1))=0THEN 4210 : IF STR(Q2$,2,1)>"0"THEN 4220 : IF STR(Q2$,2,2)="04"THEN 4220 4210 M1$="Illegal value" : GOSUB '196 : GOTO 4150 4220 REM CHECK FOR DUPLICATE ADDRESS : IF STR(Q2$,2)="04"THEN 4290 4230 C6=0 : FOR I=1TO 15 : IF C1=ITHEN 4240 : IF STR(Q2$,2)<>STR(Q2$(I),2)THEN 4240 : C6=1 4240 NEXT I : IF C6=0THEN 4290 : M1$="Duplicate printer address - re-enter" : GOSUB '196 : GOTO 4150 4290 PRINT AT(5+C1,32,5);Q2$ 4300 REM CHECK FOR TERMINAL PRINTER 4305 IF STR(Q2$,2,2)="04"THEN 4310 : Q3$=" " : GOTO 4360 4310 PRINT AT(U7,0,80); : LINPUT "Enter Terminal no. (between 1 and 64)",?-Q3$ : ERRORGOTO 4310 4320 CONVERT Q3$TO I1 : ERRORPRINT HEX(07) : GOTO 4310 4325 IF I1<1OR I1>64THEN 4310 : C6=0 : FOR I2=1TO 15 : IF I2=C1THEN 4340 : CONVERT Q3$(I2)TO I3 : ERRORGOTO 4340 4330 IF I1<>I3THEN 4340 : C6=1 : I2=15 4340 NEXT I2 4345 IF C6=0THEN 4350 : M1$="Terminal port already allocated" : GOSUB '196 : GOTO 4310 4350 CONVERT I1TO Q3$,(##) 4360 PRINT AT(5+C1,47,3);Q3$ : Q1$(C1)=Q1$ : Q2$(C1)=Q2$ : Q3$(C1)=Q3$ : GOTO 4070 5000 REM % SUBROUTINES FOR PRINTER DRIVER TABLE 5010 DEFFN'190 : REM CONVERT @SYSFILE T1$() ARRAY TO INDIVIDUAL DRIVER ARRAYS FOR DISPLA 5020 FOR I=1TO 15 : Q1$(I)=STR(T1$(I),1,8) : Q2$(I)=STR(T1$(I),9,3) : Q3$(I)=STR(T1$(I),12,2) : NEXT I : RETURN 5050 DEFFN'191 : REM CONVERT DISPLAY DATA FOR PRINTER DRIVER TO @SYSFILE FORMAT 5060 FOR I=1TO 15 : STR(T1$(I),1,8)=Q1$(I) : STR(T1$(I),9,3)=Q2$(I) : STR(T1$(I),12,2)=Q3$(I) : IF Q1$(I)=" "THEN STR(T1$(I),9,5)=" " : NEXT I : RETURN 5100 DEFFN'192 : REM CONVERT PRINTABLE DRIVER TABLE DATA TO FORMAT FOR $INIT STATEMENT : IF O1=1THEN RETURN : REM SKIP IF OLD OS 5110 FOR I=1TO 15 : STR(T2$(I),1,8)=Q1$(I) : IF STR(T2$(I),1,8)=HEX(0000000000000000)THEN STR(T2$(I),1,8)=ALL(20) : IF STR(T2$(I),1,8)=HEX(20)THEN 5130 5120 IF STR(Q2$(I),2,2)=HEX(0000)THEN STR(Q2$(I),2,2)=HEX(3030) : HEXPACKSTR(T2$(I),9,1)FROMSTR(Q2$(I),2,2) : IF Q3$(I)=" "OR Q3$(I)=HEX(0000)THEN Q3$(I)="00" : CONVERT Q3$(I)TO A9 : STR(T2$(I),10,1)=BIN(A9) 5130 NEXT I : RETURN 8000 REM % Next/Prev Screen Routine 8010 REM % Scan Keyboard : $IF ON /001,8020 : GOTO 8010 8020 REM % Get the Char. : K$=" " : KEYIN K$,,8100 8021 IF K$=HEX(0D)THEN GOSUB 8200 : ELSE IF K$=HEX(08)AND C=2THEN DO : C=1 : PRINT K$; : END DO 8022 IF K$=HEX(08)AND C=2THEN DO : C=1 : PRINT K$; : END DO 8030 REM % Check if Numeral key : IF POS("0123456789"=K$)>0THEN DO : IF C<3THEN STR(K1$,C,1)=K$ : IF C<3THEN PRINT K$; : C=C+1 : END DO : IF C>3THEN PRINT HEX(07); : IF C>2THEN 8010 8090 GOTO 8010 8100 REM % Check for Next/Prev/SF'5/SF'6 : STOP # 8110 IF POS(HEX(05064342)=K$)>0THEN STOP # 8200 RETURN 8900 STOP 9100 DEFFN'196 : REM DISPLAY MESSAGE M1$, BEEP, AND DELAY 9110 PRINT AT(U7,0,80);HEX(06070E); : SELECT P9 : PRINT M1$;HEX(0F0C) : SELECT P : RETURN 9200 DEFFN'195 : REM CHECK FOR UNIQUE DRIVER NAMES : I3=0 : FOR I=1TO 15 : IF Q1$(I)=" "THEN 9210 : IF Q1$(C1)<>Q4$(I)THEN 9210 : I3=1 : I=15 9210 NEXT I : IF I3=1THEN C2=C2+1 : RETURN 9990 DEFFN'12 : LIST D9990 : PRINT F$,"Parts=";U," CPU=";HEXOF(U$),HEXOF(W0$) : PRINT "W1$ = Terminals ";HEXOF(W1$) : PRINT "W2$ = Programmable ";W2$ : PRINT "W3$() = Boot program ";W3$() : PRINT "D$()=";HEXOF(D$()) : PRINT "T1$() = ";HEXOF(T1$()) : RETURN