image of READY prompt

Wang2200.org

Listing of file='@GENPART' on disk='vmedia/701-2294V.wvd.zip'

# Sector 317, program filename = '@GENPART'
0005 REM % Prog = @GENPART   By PLS (modified by SPM)  Date = 05/09/86  Rel 2.
     7
0006 REM % COPYRIGHT WANG LABORATORIES 1985, 1986
0008 REM ST 01/09/85
   : COM V9
0010 DIM A$17,S(16),C$16,X$1,S$32,T$16,F$8,F1$8,F2$8,P$(16)8,D$4,D$(33)3,D1$4,
     E$1,M$78,Y$1,Z$4,Z$(1)3
0015 DIM A(8),B$(16)1,R(8),B,L$52,P$8,M$(3)80,Q1$(15)8,Q2$(15)3,Q3$(15)2,Q3(15
     ),T1$(15)13,T2$(15)10
0018 DIM M1$80,Q4$(8)8,P1$29
0020 C2=0
   : Q1$(),Q2$(),Q3$(),T1$(),T2$()=ALL(20)
   : V9=0
0025 REM -- MAX NO. OF PARTITIONS
   : U1=16
0030 REM -- MIN PARTITION SIZE
   : M=1.25
0035 REM -- MAX NUMBER OF TERMINALS
   : T1=16
0040 REM -- M1 MAX NO. OF CONFIGURATIONS TO BE SAVED ON DISK
   : M1=10
0045 REM -- STR(A$,I,1) = SIZE OF PARTITION I (BINARY NO. OF PAGES)
   : REM -- S(I) SIZE OF PARTITION I
   : REM -- S9 = TOTAL AVAILABLE MEMORY IN SYSTEM
   : REM -- B = NUMBER OF MEMORY BANKS
   : REM -- A() = AVAILABLE MEMORY IN EACH BANK
0050 REM -- R() = REMAINING MEMORY IN EACH BANK
   : REM -- P$(I) = NAME OF PROGRAM TO LOAD FOR PARTITION I
   : REM -- STR(C$,I,1) = PROGRAMMABILITY ('Y' OR 'N') OF PARTITION I
   : REM -- K = CURRENT PARTITION
   : REM -- STR(T$,I,1) = TERMINAL NUMBER FOR PARTITION I
0055 REM -- L = LOAD FLAG (FOR DISPLAYING MESSAGES)
   : REM -- F$,F1$,F2$ = CONFIGURATION NAME
   : REM -- E$ = DISPLAY FLAG (' '=PARTITIONS, 'E'=DEVICE TABLE, 'H'=HELP, 'L'
     =CONFIGURATION MENU
   : REM -- B$() = DISPLAY FLAGS (BANK BOUNDARIES)
0060 REM -- U = NO. OF PARTITIONS
   : REM -- T2= NO. OF TERMINALS
   : REM -- P$ = RECONFIGURATION PASSWORD
   : P$="SYSTEM"
0065 REM %*** INITIALIZATION (AND POSSIBLE AUTOMATIC EXECUTION) ***
0068 P1$=$PSTAT(1)
   : UNPACK(#.#)STR(P1$,10,1)TO O
   : REM OS VERSION
0070 M$=$MSG
   : X$=$PSTAT(2)
   : ERROR$MSG,M$=" "
0075 GOSUB 150
   : GOTO 95
   : REM DELETE 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>229 THEN 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
0100 GOTO 1150
   : REM DELETE GOTO FOR AUTOMATIC EXECUTION
0105 GOTO 420
   : REM DELETE GOTO TO RANDOMIZE PASSWORD
0110 CONVERT RND(1) TO P$,(.#######)
   : GOTO 425
0115 GOSUB 235
   : GOSUB 135
   : L=0
   : IF F$=" " THEN GOTO 130
   : ELSE GOTO 1150
0120 PRINT AT(U6,0,80);
   : IF L=0 THEN RETURN
   : PRINT "Configuration '";F$; "' loaded.  ";
   : L=0
   : RETURN
0125 REM %*** CLEAR ALL PARTITIONS ***
0130 DEFFN'00
   : FOR I=1TO 15
   : Q1$(I),Q2$(I),Q3$(I)=" "
   : NEXT I
   : GOSUB '191
   : REM CLEAR T1$()
   : RETURN  CLEAR  ALL
   : GOSUB 135
   : GOSUB '204
   : GOTO 175
0135 MAT S=ZER
   : C$=ALL("Y")
   : P$()=ALL(" ")
0140 U,L=0
   : U6=20
   : MAT MOVE A() TO R()
   : B$()=ALL(" ")
   : E$=" "
   : RETURN
0145 REM % *** CALCULATE MEMORY SIZE ***
0150 S9=0
   : FOR I=1 TO U1
   : L$=$PSTAT(I)
   : ERRORI=U1
   : L$=ALL(00)
0155 UNPACK (##.##) STR(L$,12,2) TO X
   : S9=S9+X
   : NEXT I
   : S9=MAX(S9,SPACEK)
0160 MAT A=ZER
   : A(1)=MIN(S9,61)
   : J=S9-61
   : B=1
0165 IF J<=0 THEN RETURN
   : B=B+1
   : A(B)=MIN(J,56)
   : J=J-56
   : GOTO 165
0170 REM %*** CHANGE TERMINAL DATA ***
0175 DEFFN'04
   : RETURN  CLEAR  ALL
   : GOSUB '204
   : K=1+MOD(K,U)
0180 GOSUB 120
0185 IF E$<>" " OR U=0 THEN 175
   : IF K=0THEN K=1
   : PRINT HEX(0E);"Edit which partition (default =";K;")";
   : INPUT K
   : ERRORGOTO 180
0190 IF K<>INT(K) OR K<=0 OR K>U THEN 180
   : PRINT HEX(0E);
   : GOSUB '206(K)
   : PRINT AT(4+K,1);"*";
0195 X=S(K)
   : PRINT AT(U6,0,80);
   : PRINT "Partition size (default =";X;"K)";
   : INPUT X
   : ERRORGOTO 195
0200 IF X<M AND X<>0 THEN 195
   : X=FNT(X)
   : IF S(K)=X THEN 205
   : S(K)=X
   : GOSUB 1920
   : PRINT HEX(0E);
   : GOSUB '206(K)
   : PRINT AT(4+K,1);"*"
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<0 OR T>T2 THEN 205
   : IF VAL(STR(T$,K,1))=T THEN 215
   : STR(T$,K,1)=BIN(T)
   : PRINT HEX(0E);
   : GOSUB '206(-K)
   : PRINT AT(K+4,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+4,1);"*"
0220 PRINT AT(U6,0,80)
   : LINPUT "Name of program to load?"?-P$(K)
   : GOSUB '206(-K)
   : PRINT AT(K+4,1);"*"
   : GOTO 175
0225 REM %*** DEFAULT DEVICE TABLE ***
0230 DEFFN'01
   : GOSUB 235
   : E$="?"
   : GOTO 1390
0235 D$()=ALL(00)
   : D$(1)=HEX(021500)
   : D$(2)=HEX(031000)
   : D$(3)=HEX(032000)
   : RETURN
0330 REM %*** ALLOCATE REMAINING MEMORY ***
0335 DEFFN'02
   : RETURN  CLEAR  ALL
   : GOSUB '204
   : L$=HEX(0000)
   : B$(U)="Y"
   : MAT SEARCH B$(),="Y" TO STR(L$,3)
   : B$(U)="N"
0340 IF B=1 THEN 380
   : X$="A"
   : PRINT AT(U6,0,80);
   : INPUT "Divide memory evenly in which bank (default = all)",X$
0345 IF X$="A" OR X$="a" THEN 380
   : CONVERT X$ TO J
   : ERRORGOTO 340
0350 GOSUB 355
   : GOTO 385
0355 N=0
   : X=VAL(STR(L$,2*J+1),2)
   : IF X=0 THEN 385
   : FOR I=VAL(STR(L$,2*(J-1)+1),2)+1 TO X
   : IF S(I)=0 THEN N=N+1
   : NEXT I
0360 IF N=0 THEN 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>1 THEN PRINTUSING " IN BANK #",S2;
   : PRINT ".   ";
   : GOTO 185
0370 IF R(J)-(S2*N)<0 THEN S2=S2-.25
0375 FOR I=VAL(STR(L$,2*(J-1)+1),2)+1 TO VAL(STR(L$,2*J+1),2)
   : IF S(I)=0 THEN S(I)=S2
   : NEXT I
   : RETURN
0380 FOR J=1 TO B
   : GOSUB 355
   : NEXT J
0385 K=0
   : GOSUB 1920
   : GOSUB '200
   : GOTO 175
0390 REM %*** CONFIGURE PARTITIONS ***
0395 DEFFN'15
   : RETURN  CLEAR  ALL
   : GOSUB '204
   : X$=$PSTAT(2)
   : ERRORGOTO 405
0400 PRINT AT(U6,0,80);"SYSTEM HAS ALREADY BEEN CONFIGURED.  ";HEX(07);
   : GOTO 185
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 FOR K=1 TO U
   : IF S(K)>=M THEN 430
   : PRINT AT(U6,0,80);HEX(07);"SIZE OF PARTITION";K;"IS ILLEGAL.  ";
   : GOTO 185
0430 NEXT K
0810 FOR I=1 TO B
   : IF R(I)>=0 THEN 820
   : PRINT AT(U6,0,80);HEX(07);"AVAILABLE MEMORY EXCEEDED IN BANK";I;".   ";
   : GOTO 185
0820 NEXT I
0830 A$=ALL(00)
   : FOR I=1TO U
   : STR(A$,I,1)=BIN(S(I)*4)
   : NEXT I
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$ FROM S()
0870 DATA LOAD DC OPEN T "@SYSFILE"
   : ERRORGOTO 890
0880 GOSUB '191
   : REM PACK DRIVER DATA
   : DATA SAVE DC "current ",U,S$,T$,C$,P$(),D$(),T1$()
   : ERRORREM WRITE PROTECT
0890 $TRAN(C$,HEX(014E0059))R
   : FOR I=1 TO 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 REM % CHECK OS TYPE FOR $INIT STATEMENT
   : IF O<2.6THEN 904
0903 E=0
   : $MSG=M$
   : $INIT (A$,T$,C$,P$(),D$(),P$,T2$())
   : ERRORE=ERR
   : IF E=88 THEN GOSUB '217
   : IF E=82 THEN GOSUB '219
   : ELSE GOSUB '218
0904 E=0
   : $MSG=M$
   : $INIT (A$,T$,C$,P$(),D$(),P$)
   : ERRORE=ERR
   : IF E=88 THEN GOSUB '217
   : IF E=82 THEN GOSUB '219
   : ELSE GOSUB '218
0910 REM %*** SAVE CONFIGURATION ON DISK ***
0920 DEFFN'09
   : RETURN  CLEAR  ALL
   : GOSUB '204
   : GOSUB 1860
   : IF X$="T" THEN GOSUB '200
   : PACK(##.##) S$ FROM S()
0930 PRINT AT(U6,0,80);"Check configuration to save.  Configuration name?";
   : LINPUT ?-F$
   : IF F$=" " THEN 930
0940 LIMITS T"@SYSFILE",D,I,D2,D3
   : ERRORGOSUB 1120
   : GOTO 940
0950 IF D3>0 THEN 980
   : IF D3=-2THEN 970
   : DATA SAVE DC OPEN T (3*(M1+1)+2)"@SYSFILE"
   : ERRORGOSUB 1120
   : GOTO 940
0960 GOSUB '191
   : DATA SAVE DC "current ",U,S$,T$,C$,P$(),D$(),T1$()
   : DATA SAVE DC END
   : GOTO 940
0970 DATA SAVE DC OPEN T "@SYSFILE","@SYSFILE"
   : GOTO 960
0980 DATA LOAD DC OPEN T "@SYSFILE"
   : D,I=0
0990 DATA LOAD DC 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)+2 THEN 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 BEG
1040 DATA LOAD DC F2$
   : IF END  THEN 1080
   : IF F2$<>F1$ THEN 1040
1050 DBACKSPACE 3S
   : GOSUB '191
   : DATA SAVE DC F$,U,S$,T$,C$,P$(),D$(),T1$()
   : ERRORGOSUB 1120
   : GOTO 980
1060 GOTO 1110
1070 DBACKSPACE BEG
   : DSKIP IS
   : GOTO 1050
1080 PRINT AT(U6,0,80);"'";F1$;"' DOES NOT EXIST.  ";
   : GOTO 1030
1090 GOSUB '191
   : DATA SAVE DC F$,U,S$,T$,C$,P$(),D$(),T1$()
   : ERRORGOSUB 1120
   : GOTO 980
1100 DATA SAVE DC END
1110 PRINT AT(U6,0,80);"Configuration '";F$;"' saved.  ";
   : GOTO 185
1120 PRINT AT(U6,0,80);
   : X=ERR
   : IF X=95 THEN PRINT "DISK IS WRITE PROTECTED, ";
   : ELSE PRINT "ERROR";X;
1130 X$=" "
   : LINPUT "Key 'RETURN' to retry."?X$
   : RETURN
1140 REM %*** LOAD CONFIGURATION FROM DISK ***
1150 DEFFN'08
   : RETURN  CLEAR  ALL
   : GOSUB 1340
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 SUBROUTINE ***
1210 DEFFN'205(F1$)
   : F$=" "
   : DATA LOAD DC OPEN T"@SYSFILE"
   : ERRORPRINT HEX(03);AT(U6,0,80);"NO CONFIGURATIONS SAVED.  ";
   : RETURN
1220 DATA LOAD DC F$,U,S$,T$,C$,P$(),D$(),T1$()
   : ERRORE=ERR
   : GOTO 2300
   : REM ADDED FOR THIS @GENPART TRYING TO LOAD OLD @SYSFILE
1225 IF END  THEN 1230
   : IF F$<>F1$ THEN 1220
1230 GOSUB '190
   : U6=MAX(20,U+6)
   : UNPACK(##.##) S$ TO S()
   : T2=T1
   : B$()=ALL(" ")
   : GOSUB 1920
   : 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 %*** DELETE CONFIGURATION ***
1250 DEFFN'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 BEG
1290 DATA LOAD DC F2$
   : IF END  THEN 1320
   : IF F1$<>F2$ THEN 1290
1300 DBACKSPACE 3S
   : DATA SAVE DC F$,U,S$,T$,C$,P$(),D$(),T1$()
   : ERRORGOSUB 1120
   : GOTO 1280
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 "@SYSFILE"
   : ERRORPRINT HEX(030E); AT(U6,0,80);"NO CONFIGURATIONS SAVED.  ";
   : IF U=0 THEN 130
   : GOTO 185
1350 IF E$="L" THEN RETURN
   : E$="L"
1360 GOSUB '201
   : PRINT AT(4,0);"List of stored configurations (#Partitions)"
1370 DATA LOAD DC F2$,T
   : IF END  THEN RETURN
   : IF F2$>" " THEN PRINT ,F2$,"(";T;")"
   : GOTO 1370
1380 REM %*** EDIT DEVICE TABLE ***
1390 DEFFN'05
   : 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(20,0,80);HEX(0E);"Edit which entry (default =";D;")";
   : INPUT D
   : ERRORGOTO 1410
1420 IF D<>INT(D) OR D<=0 OR D>32 THEN 1410
   : PRINT HEX(0E);
   : GOSUB '202(D)
   : IF D<17 THEN PRINT AT(2+D,0);"*"
   : ELSE PRINT AT(2+D-16,24);"*"
1430 HEXUNPACK STR(D$(D),1,2) TO D$
   : P=VAL(STR(D$(D),3))
1440 D1$="/" & STR(D$,2)
   : PRINT AT(20,0,80);"Device address (default = /";STR(D$,2);", /000 to dele
     te entry)";
   : INPUT D1$
   : M1$=" "
   : PRINT AT(22,0,80);HEX(06070E);M1$;HEX(0F)
   : IF VER(D1$,"/HHH")<>4 THEN 1440
   : IF D1$="/000" THEN 1500
1442 STR(Z$,1)=HEX(30)
1443 STR(Z$,2)=STR(D1$,2)
   : HEXPACK Z$(1) FROM Z$
   : STR(Z$(1),3)=HEX(00)
1444 FOR Z=1 TO 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)
   : HEXPACK D$(D) FROM D$
   : STR(D$(D),3)=HEX(00)
1450 X=0
   : PRINT AT(20,0,80);"Allocate device to which partition (default = all)";
   : INPUT X
   : ERRORGOTO 1450
1460 IF X<0 OR X>16 OR X<>INT(X) THEN 1450
   : P=X
   : GOSUB '203(D)
1470 HEXPACK D$(D) FROM D$
   : STR(D$(D),3)=BIN(P)
1480 IF D<17 THEN PRINT AT(2+D,0);" ";
   : ELSE PRINT AT(2+D-16,24);" "
1490 D=1+MOD(D,32)
   : GOTO 1410
1500 FOR J=D TO 32
   : D$(J)=D$(J+1)
   : GOSUB '202(J)
   : NEXT J
   : GOTO 1410
1510 REM %*** EDIT $MSG ***
1520 DEFFN'06
   : RETURN  CLEAR  ALL
   : GOSUB '204
1530 PRINT AT(MIN(21,U6),0,80);"Broadcast message:"
   : LINPUT -M$
   : PRINT AT(MIN(21,U6),0,159);
   : GOTO 175
1540 REM %*** DISPLAY DEVICE TABLE ***
1550 DEFFN'202(I)
   : IF I=0 THEN 1580
1560 HEXUNPACK STR(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=0 THEN PRINT "all"
   : ELSE PRINT P
   : RETURN
1580 FOR I=1 TO 32
   : GOSUB 1560
   : NEXT I
   : RETURN
1590 REM % *** DISPLAY TITLE & OPTIONS ***
1690 REM %*** DISPLAY PARTITIONS ***
1700 REM '200 DISPLAYS ALL PARTITIONS
1710 DEFFN'200
   : FOR I=MIN(2,U) TO U
   : GOSUB '206(-I)
   : NEXT I
   : GOSUB '206(1)
   : RETURN
1720 REM '206 DISPLAYS ONLY ONE PARTITION
1730 DEFFN'206(I)
   : J=ABS(I)
   : L$=HEX(0000)
1740 IF S(J)>0 THEN 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(4+J,0);STR(L$,3);TAB(50);HEX(0F);
1770 IF I<0 THEN 1780
   : PRINT AT(2,17);
   : FOR J=1 TO B
   : PRINTUSING "-##.## ",R(J);
   : NEXT J
1780 IF ABS(I)>INT(5/M) OR B=1 THEN 1810
   : X=0
   : FOR J=1 TO INT(5/M)
   : X=X+S(J)
1790 IF X<=5 AND S(J)>0 THEN X$="u"
   : ELSE X$=" "
   : IF B$(J)="Y" THEN 1810
1800 PRINT AT(4+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 SEARCH B$(),="Y" TO L$
1870 FOR I=0 TO B-2
   : J=VAL(STR(L$,2*I+1),2)
   : IF J=0 THEN 1900
1880 IF R(I+1)=0 THEN 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=1 TO U
   : R(J)=R(J)-S(I)
1940 IF B$(I)="N" THEN 1950
   : J=J+1
   : IF J<=B THEN 1950
   : RETURN
1950 NEXT I
   : RETURN
1960 REM ESTABLISH BANK BOUNDARIES
1970 B$()=ALL("N")
   : FOR I=1 TO U
   : IF R(J)-S(I)>=0 OR J+1>B THEN 1980
   : J=J+1
   : B$(I-1)="Y"
1980 R(J)=R(J)-S(I)
   : NEXT I
   : RETURN
1990 REM %*** PARTITION DISPLAY ***
2000 DEFFN'204
   : IF E$<>" " OR U=0 THEN 2010
   : IF K<=0 OR K>UTHEN RETURN
   : PRINT AT(K+4,0,2);
   : GOSUB '206(K)
   : E$=" "
   : RETURN
2010 E$=" "
   : GOSUB '201
   : PRINT AT(1,0,80);"Available memory:";
2020 FOR I=1 TO B
   : PRINTUSING "-##.## ",A(I);
   : NEXT I
2030 PRINT AT(2,0);"Remaining memory:";
2040 FOR I=1 TO B
   : PRINTUSING "-##.## ",A(I);
   : NEXT I
2050 IF U>0 THEN 2120
   : PRINT AT(4,0,52);
   : INPUT "No. of terminals",T2
   : ERRORGOTO 2050
2060 IF T2>T1 OR T2<1 THEN 2050
   : B$()=ALL("N")
   : U=0
   : FOR I=1 TO B
   : X=-1
2070 PRINT AT(4+I,0,52);"No. of partitions";
   : IF B>1 THEN PRINT " in bank";I;
   : INPUT X
   : ERRORGOTO 2070
2075 IF X=0AND I<=1THEN GOTO 2070
2080 IF X<0 THEN 2070
   : IF X=0 THEN 2090
   : U=U+X
   : B$(MIN(U1,U))="Y"
   : NEXT I
   : B$(MIN(U1,U))="N"
2090 B$(MIN(U1,U))="N"
   : U6=MAX(20,U+6)
   : IF U<=U1 THEN 2100
   : U=0
   : U6=19
   : PRINT HEX(07);"NUMBER OF PARTITIONS EXCEEDS";U1
   : GOTO 2060
2100 FOR I=5 TO 10
   : PRINT AT(I,0,52);
   : NEXT I
2110 T$=ALL(00)
   : FOR I=1 TO U
   : STR(T$,I,1)=BIN(MOD(I-1,T2)+1)
   : NEXT I
2120 IF U<>INT(U) OR U<=0 OR U>U1 THEN 2050
2130 PRINT AT(4,0,52);"PARTITION SIZE(K) TERMINAL PROGRAMMABLE PROGRAM"
2140 GOSUB '200
   : RETURN
2300 REM % ERROR HANDLER FOR NEW GENPART WITH OLD SYSFILE
2310 GOSUB '198
   : IF E=74THEN 2320
   : PRINT AT(4,0);"Error while loading @SYSFILE ";E
   : PRINT AT(18,0);
   : END
2320 PRINT AT(4,0);"In order to use this version of the 2200 MVP operating sys
     tem, the System ";HEX(0D0A);"Configuration File ('@SYSFILE') must be conv
     erted 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
3000 DEFFN'198
   : PRINT HEX(03060E);TAB(12);"***** Wang 2200 MVP Partition Generation Progr
     am *****"
   : PRINT TAB(20);"(c) Copr. Wang Laboratories, Inc. 1986"
   : PRINT AT(23,0);"Press FN/TAB to exit.";HEX(01)
   : RETURN
3005 DEFFN'126
3006 DEFFN'127
   : PRINT HEX(060E);AT(23,0,80);"(Returning to System Menu)";HEX(01)
   : $PSTAT=" "
   : LOAD T"@MENU"
3010 DEFFN'201
   : K=0
   : GOSUB '198
3020 PRINT AT(3,52);BOX(16,27);"       \CC\E9\F3\F4\A0\EF\E6\A0\EF\F0\F4\E9\EF
     \EE\F3:"
3030 PRINT AT(4,53);"SF'00 - clear partitions";AT(5,53);"SF'01 - clear device
     table";
3040 PRINT AT(7,53);"SF'02 - divide mem. evenly";AT(9,53);"SF'04 - edit partit
     ions";
3050 PRINT AT(10,53);"SF'05 - edit device table";AT(11,53);"SF'06 - edit $MSG"
     ;
3060 IF O<2.6THEN 3070
   : PRINT AT(13,53);"SF'07 - select prt. driver";
3070 PRINT AT(14,53);"SF'08 - load configuration";AT(15,53);"SF'09 - save conf
     iguration";
3080 PRINT AT(16,53);"SF'10 - delete config.";
3090 PRINT AT(18,53);"SF'15 - execute"
3100 RETURN
4000 DEFFN'07
   : REM % DRIVER TABLE ENTRY POINT
   : IF O<2.6THEN RETURN
   : C2,C1,C3=0
4020 RETURN  CLEAR  ALL
   : E$="T"
   : IF C1>=1 THEN 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=1 TO 15
   : PRINT AT(5+I,1);
   : PRINTUSING "  ##.",I;
   : NEXT I
4030 REM % MUST INITIALLY COUNT C2 = # OF DIFFERENT DRIVERS
4040 FOR I = 1 TO 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
4055 FOR I=1TO C3
4070 PRINT HEX(06);AT(5+C1,0);" "
   : C1=C1+1
   : IF C1>15 THEN C1=1
   : PRINT AT(22,0,80);"Edit which driver entry (default=";C1;")";
   : INPUT C1
   : ERRORGOTO 4070
4080 IF C1>15 OR C1<1 THEN 4070
4090 PRINT HEX(0E06);AT(5+C1,0);"*";AT(5+C1,10,30);Q1$(C1);AT(5+C1,32);Q2$(C1)
     ;AT(5+C1,47);Q3$(C1);
   : PRINT HEX(0F)
4100 PRINT AT(22,0,80);
   : LINPUT "Enter Driver Table Name: (enter '0' to delete from configuration)
     ",-Q1$(C1)
   : IF Q1$(C1)="        "THEN 4100
   : IF Q1$(C1)<>"0" THEN 4120
4114 IF C1=15 THEN   GOTO 4116
4115 FOR I=C1 TO 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  Q1$(C1),I,I,I,I
   : IF I=2THEN 4130
   : M1$="File not found on default disk"
   : GOSUB '196
   : GOTO 4100
4130 REM CHECK FOR NEW UNIQUE DRIVER NAMES
   : I3=0
   : FOR I1=1 TO 7
   : IF Q1$(C1)<>Q4$(I1) THEN 4135
   : I3=1
   : I1=7
4135 NEXT I1
   : IF I3=1THEN 4138
   : C2=C2+1
   : Q4$(C2)=Q1$(C1)
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$(C1);AT(22,0,80);
   : LINPUT "Enter Associated Printer Address:"-Q2$(C1)
4180 IF STR(Q2$(C1),1,1)="0"THEN 4190
   : IF STR(Q2$(C1),1,1)="2"THEN 4190
4181 IF STR(Q2$(C1),1,1)="7"THEN 4190
   : IF STR(Q2$(C1),1,1)="C"THEN 4190
   : IF STR(Q2$(C1),1,1)<>"4"THEN 4210
4190 IF STR(Q2$(C1),2,2)="04"THEN 4220
   : IF STR(Q2$(C1),2,1)<"1"THEN 4210
4200 IF STR(Q2$(C1),3,1)<"0"THEN 4210
   : IF STR(Q2$(C1),3,1)<="F"THEN 4220
4210 M1$="Illegal value"
   : GOSUB '196
   : GOTO 4150
4220 REM CHECK FOR DUPLICATE ADDRESS
   : IF STR(Q2$(C1),2)="04"THEN 4290
4230 C6=0
   : FOR I=1TO 15
   : IF C1=ITHEN 4240
   : IF STR(Q2$(C1),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$(C1)
4300 REM CHECK FOR TERMINAL PRINTER
4305 IF STR(Q2$(C1),2,2)="04" THEN 4310
   : Q3$(C1)=" "
   : GOTO 4360
4310 PRINT AT(22,0,80);
   : LINPUT "Enter Terminal no. (between 1 and 16)",-Q3$(C1)
   : ERRORGOTO 4310
4320 CONVERT Q3$(C1)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$(C1),(##)
4360 PRINT AT(5+C1,47,3);Q3$(C1)
   : 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 5070
5065 STR(T1$(I),9,5)=" "
5070 NEXT I
   : RETURN
5100 DEFFN'192
   : REM CONVERT PRINTABLE DRIVER TABLE DATA TO FORMAT FOR $INIT STATEMENT
   : IF O<2.6THEN 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
9000 STOP
9100 DEFFN'196
   : REM DISPLAY MESSAGE M1$, BEEP, AND DELAY
9110 PRINT AT(22,0,80);HEX(06070E);
   : PRINT M1$;HEX(0F)
   : FOR I=1TO 4000
   : NEXT I
   : RETURN
9200 DEFFN'195
   : REM CHECK FOR UNIQUE DRIVER NAMES
   : I3=0
   : FOR I=1 TO 15
   : IF Q1$(I)=" "THEN 9210
   : IF Q1$(C1)<>Q4$(I) THEN 9210
   : I3=1
   : I=15
9210 NEXT I
   : IF I3=1THEN                  C2=C 2+1
   : RETURN