Listing of file='@GENPART' on disk='vmedia/mvp-cs386-1.19X.wvd.zip'
# Sector 1041, program filename = '@GENPART' 0005 REM !@GENPART 04/12/90 By PLS (mod.by TBO) 0006 REM ! Copyright Wang Laboratories 1985, 1986, 1989, 1990 : REM ! All rights reserved 0007 REM .REM%0 Var + meaning for TBO.CRF 0008 COM V9 : C$=$PSTAT(1) : IF STR(C$,9,1)="W"THEN LOAD T#0,"@GEN.386"2405,2405BEG 10 0010 DIM A$34,A(16),A0(16),B,B$(16)1,B0,B1,C$16,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,J,K,L,L $52,L1,L9,M,M1,M2,M$78,M1$80,N,N7,N8,N9,O1,P,P$8,P$(16)8 : C$=$PSTAT(1) 0012 DIM 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(16),R0(16),S,S$48,S0,S2,S(16),S9,T$16,T,T1,T1$(15)13,T2,T2$(15)10,U,U$ 1,U0$1,U1,U9,U6,W$1,W,W0$48,W1$,W2$,W3$(16)8,W4$(33)3,W5$(15)13,W9$,X,X$1 ,Y$1,Y1,Z,Z$4,Z$(1)3 0014 REM %0 C0$ OS.type, C2$ OS.rel.# : REM %0 O1 Config.via.CPU, F0 Config.via.item 0016 C0$=STR(C$,9) : HEXUNPACKSTR(C$,10,1)TO C2$ 0018 O1=4 : IF C0$="W"THEN 20 : O1=3 : IF C2$>"33"THEN 20 : O1=2 : IF C2$<"26"THEN O1=1 0020 IF O1=4THEN BIN(U0$)=0 : F0$="@SYSFILE" 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 : 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 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=4THEN 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 235 : GOSUB 135 : L=0 : IF F$=" "THEN 130 : GOTO 1150 0120 PRINT AT(U6,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 : 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 : PRINT HEX(0E); : GOSUB '206(K) : PRINT AT(5+K,1);"*"; 0195 X=S(K) : PRINT AT(U6,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 : PRINT HEX(0E); : GOSUB '206(K) : PRINT AT(K+5,1);"*" 0204 IF F0=0THEN GOSUB 1232 0205 T=VAL(STR(T$,K)) : PRINT AT(U6,0,80);"Terminal (default =";T;")"; : INPUT T : ERRORGOTO 205 0210 IF T<>INT(T)OR T<0OR T>16THEN 205 : IF VAL(STR(T$,K,1))=TTHEN 215 : STR(T$,K,1)=BIN(T) : PRINT HEX(0E); : GOSUB '206(-K) : PRINT AT(K+5,1);"*" 0215 X$=STR(C$,K,1) : PRINT AT(U6,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$ : PRINT HEX(0E); : GOSUB '206(-K) : PRINT AT(K+5,1);"*" 0220 PRINT AT(U6,0,80) : LINPUT "Name of program to load?"?-P$(K) : GOSUB '206(-K) : PRINT AT(K+5,1);"*" : GOTO 175 0225 REM %.'1 Clear Device table 0230 DEFFN'01 : F=1 : GOSUB 235 : E$="?" : GOTO 1390 0235 D$()=ALL(00) : D$(1)=HEX(021500) : D$(2)=HEX(031000) : D$(3)=HEX(032000) : D$(4)=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(U6,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(U6,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(U6,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 : PRINT AT(U6,0,80);"SYSTEM HAS ALREADY BEEN CONFIGURED. ";HEX(07); : GOTO 185 0400 IF F0>-1THEN 405 : PRINT AT(U6,0,80);"INVALID CONFIGURATION FOR THIS CPU. ";HEX(07); : GOTO 1150 0405 GOSUB 1860 : IF X$="T"THEN GOSUB '200 0410 PRINT AT(U6,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(U6,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 PRINT AT(6+U,0);"All partitions require some memory" : 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 $TRAN(C$,HEX(014E0059))R : FOR I=1TO 16 : IF P$(I)<>" "THEN STR(C$,I,1)=OR HEX(02) : NEXT I 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,,,905 0903 REM .MVP>2.6 : $INIT(A$,T$,C$,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$,T$,C$,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) : $INIT(U$,A$,T$,C$,P$(),D$(),P$,T2$()) : ERRORE=ERR : IF E=88THEN GOSUB '217 : IF E=82THEN GOSUB '219 : ELSE GOSUB '218 0910 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() : GOSUB 510 0930 PRINT AT(U6,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$ : IF END THEN 1020 : D=D+3 : IF F1$=" "AND I=0THEN I=D : IF F$<>F1$THEN 990 1000 PRINT AT(U6,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(U6,0,80); : GOTO 1030 1020 IF I>0THEN 1070 : IF D2<3*(M1+1)+2THEN 1090 : GOSUB 1340 : PRINT AT(U6,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$ : IF END THEN 1080 : IF F2$<>F1$THEN 1040 1050 DBACKSPACE #0,3S : GOSUB 2760 1060 GOTO 1110 1070 DBACKSPACE #0,BEG : DSKIP #0,IS : GOTO 1050 1080 PRINT AT(U6,0,80);"'";F1$;"' DOES NOT EXIST. "; : GOTO 1030 1090 GOSUB 2760 1100 DATA SAVE DC #0,END 1110 PRINT AT(U6,0,80);"Configuration '";F$;"' saved. "; : GOTO 185 1120 PRINT AT(U6,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(U6,0,80); 1180 GOSUB '205(F1$) : IF F$<>F1$THEN 1190 : L=1 : GOTO 175 1190 PRINT AT(U6,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$=W0$ : T$=W1$ : C$=W2$ : P$()=W3$() : D$()=W4$() : T1$()=W5$() : U9=VAL(U$) : IF END THEN 1226 : IF F$<>F1$THEN 1220 : GOSUB 1232 1226 T2=0 : Y$=HEX(01) : 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=MAX(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(U6,0,80); 1270 F$,F1$=" " : LINPUT "Delete which configuration? "?-F1$ 1280 IF F1$="current"THEN 1260 : DBACKSPACE #0,BEG 1290 DATA LOAD DC #0,F2$ : IF END THEN 1320 : IF F1$<>F2$THEN 1290 1300 DBACKSPACE #0,3S : GOSUB 2760 1310 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 1372 IF W$=" "THEN C2$=".." : ELSE CONVERT VAL(W$)TO C2$,(##) 1374 Y$=" " : IF O1=4AND 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(22,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(22,0,80);"Device address (default = /";STR(D$,2);", /000 to dele te entry)"; : INPUT D1$ : M1$=" " : PRINT AT(22,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(22,0,80);"Allocate device to which partition (default = all)"; : INPUT X : ERRORGOTO 1450 1460 IF X<0OR X>16OR 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(MIN(21,U6),0,80);"Broadcast message:" : LINPUT ?-M$ : PRINT AT(MIN(22,U6),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 : FOR I=MIN(2,U)TO U : GOSUB '206(-I) : NEXT I : GOSUB '206(1) : RETURN 1720 REM '206 DISPLAY ONE PARTITION 1730 DEFFN'206(I) : J=ABS(I) : L$=HEX(0000) 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 PRINT HEX(06);AT(5+J,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) 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+J,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 : PRINT AT(K+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=MAX(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 U : 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);"No. of terminals ";T2 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 : 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 .ALL386 : STOP # 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,27,23);"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 2740 W$=W9$ : RETURN 2750 REM .S.R. to write config item 2760 GOSUB '191 : IF O1<4AND F0<>-2THEN U$=" " : DATA SAVE DC #0,F$,U,U$,S$,T$,C$,P$(),D$(),T1$() : ERRORGOSUB 1120 : GOTO 2760 2770 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(11);"(c) Copr. Wang Laboratories, Inc. 1986, 1987, 1989, 1990"; 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(22,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(22,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(22,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(22,0,80); : LINPUT "Enter Terminal no. (between 1 and 16)",?-Q3$ : ERRORGOTO 4310 4320 CONVERT Q3$TO I1 : ERRORPRINT HEX(07) : GOTO 4310 4325 IF I1<1OR I1>16THEN 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 DISPLAY 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" : HEXPACKSTR(T2$(I),10)FROMQ3$(I) : IF VAL(STR(T2$(I),10))>9THEN STR(T2$(I),10)=STR(T2$(I),10)ADDHEX(FA) 5130 NEXT I : RETURN 9100 DEFFN'196 : REM DISPLAY MESSAGE M1$, BEEP, AND DELAY 9110 PRINT AT(22,0,80);HEX(06070E); : PRINT M1$;HEX(0F0C) : FOR I=1TO 4000 : NEXT I : 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