10 '----------------------------------------------------------------- 12 REM SCHEDIT.BAS 18 June 83 thru 10 Jul 83 14 REM derived from 15 REM SCHEDULE.BAS 15 Aug thru 10 Sep 82 16 REM 18 REM Author: Hurle F. Priser 20 '----------------------------------------------------------------- 22 %INCLUDE SCHEDCOM 98 GOTO 1000 'program driver 100 '-------------------------------------------- 102 REM BEGIN SUBROUTINES 104 '-------------------------------------------- 106 ' STRING PRINT ROUTINES 108 A=(80-LEN(A$))/2:PRINT TAB(A);A$:RETURN 110 A=(80-LEN(A$))/2:PRINT TAB(A);A$;:A$=INPUT$(1):RETURN 112 PRINT TAB(POS(0)-3);CHR$(11);:A$=INPUT$(1):RETURN 116 PRINT" _______"; TAB(POS(0)-8);CHR$(11);:LINE INPUT A$:RETURN 118 GOSUB 108:PRINT :PRINT TAB(25);"DO YOU WANT TO DO THIS ? (Y/N) ____";:GOSUB 112 120 PRINT:PRINT:RETURN 122 PRINT :PRINT J;". ";J$(J);" = ____________________";TAB(POS(0)-20);CHR$(11); 124 LINE INPUT A$:IF A$<>"" THEN J$(J)=A$ 126 IF LEN(J$(J))<=20 THEN 130 128 PRINT"Job name TOO LONG. Press and reenter";:LINE INPUT A$ :PRINT CHR$(11);CHR$(11);:GOTO 122 130 RETURN 140 ' Input job length 142 PRINT" ____";:PRINT TAB(POS(0)-4);CHR$(11); 144 LINE INPUT X$:IF X$<>"" THEN X%=VAL(X$):L(J)=INT((X%+1)/2) 146 RETURN 200 '----------------- CONTROL SUBROUTINES ----------------------- 202 ' Expand predecessor table 204 FOR J=1 TO NJ:P(J,A)=P(J,B):P(J,B)=P(J,C):P(J,C)=P(J,D):NEXT J 'COLUMNS 206 FOR K=1 TO NJ:P(A,K)=P(B,K):P(B,K)=P(C,K):P(C,K)=P(D,K):NEXT K 'ROWS 208 RETURN 300 ' Input file name sub 302 PRINT TAB(19);"Type in NAME desired without the .SCH ==> "; 304 GOSUB 116:WO$=A$:IF WO$="" THEN PRINT CHR$(11);:GOTO 302 'Repeat 306 RETURN 310 ' List jobs by name 312 FOR J=1 TO LJ :PRINT J;". ";J$(J);TAB(28);"= ";USING C$;L(J)*2;:PRINT" ";SF$ :NEXT J 314 RETURN 1000 '-------------------------------------------------- 1002 REM PROGRAM DIRECTOR 1004 '-------------------------------------------------- 1030 IF M=2 THEN GOSUB 2100 :IF A$="N" THEN 1200 ELSE M=3:GOTO 1200 'init new file 1090 IF M=7 THEN GOSUB 5100 :IF A$="N" THEN 1200 ELSE M=4:GOTO 1200 'change job name or length 1110 IF M=9 THEN GOSUB 5200 :IF A$="N" THEN 1200 ELSE M=8:GOTO 1200 'add a job 1120 IF M=10 THEN GOSUB 5300 :IF A$="N" THEN 1200 ELSE M=8:GOTO 1200 'delete a job 1200 CHAIN "SCHEMENU" 2100 '------------------------------------------ 2102 REM INITIALIZE NEW DATA 2104 '------------------------------------------ 2106 REM INITIALIZE NEW SCHEDULE 2108 REM INPUT JOB DATA 2110 ' 2112 REM ENTER: -- 2114 ' 2116 REM EXIT: NJ=NUMBER OF JOBS, LJ=LAST JOB 2118 REM J$(J)=JOB NAMES 2120 REM L(J)=JOB LENGTHS 2122 REM P(J,K)=PREDECESSOR TABLE 2124 REM WO$=FILE NAME 2126 PRINT CLS$:A$="*** CREATE A NEW SCHEDULE ***":GOSUB 118 :PRINT:IF A$="N" THEN RETURN 2127 PRINT TAB(25);"Limit to ";MAX%;" jobs maximum" 2128 A$="Limit the SCHEDULE name to 8 letters." :GOSUB 108:GOSUB 300 'Get filename 2130 INPUT"HOW MANY JOBS ARE THERE";LJ:NJ=LJ+2:PRINT 2131 IF LJ>MAX% THEN PRINT"***** TOO MANY. PLEASE LIMIT TO ";MAX%;" JOBS ****" :GOTO 2130 2132 PRINT:PRINT"LIMIT JOB NAMES TO 20 CHARACTERS":PRINT 2134 FOR J=1 TO LJ 2136 J$(J)="Enter new job name (20 chrs max)":GOSUB 122 'Get job name 2138 PRINT"HOW LONG IN ";SF$;" IS ";J$(J);:GOSUB 140 2140 NEXT J 2142 J$(0)="START":J$(NJ)="NONE":J$(NJ-1)="END" 2144 A$="":RETURN 5100 '------------------------------------------ 5102 REM CHANGE JOB NAMES & LENGTHS 5104 '------------------------------------------ 5106 PRINT CLS$:A$="***** CHANGE JOB LENGTHS *****":GOSUB 118 :PRINT:IF A$="N" THEN RETURN 5108 PRINT"A. THE CURRENT JOB NAME IS SHOWN, TYPE IN CHANGE IF ANY." 5110 PRINT"B. THE JOB LENGTH IS SHOWN, TYPE IN CHANGE IF ANY." 5112 PRINT"Note: If no change is desired, then just press .":PRINT 5114 PRINT"-------------------------------------------------------" 5116 FOR J=1 TO LJ : A$="" : X=0 5118 GOSUB 122 'get job name 5120 PRINT TAB(5);"LENGTH = ";USINGC$;L(J)*2; 5122 GOSUB 140 'get job length 5124 NEXT J 5126 PRINT:PRINT"THIS IS WHAT YOU HAVE" 5128 GOSUB 310:PRINT 'List the jobs 5134 A$="DO YOU WANT TO DO THIS AGAIN (Y/N)":GOSUB 110 5136 IF A$="N" THEN LET A$="":RETURN 5138 IF A$<>"Y" THEN PRINT CHR$(11):GOTO 5134 5140 PRINT:GOTO 5114 5200 '------------------------------------------ 5202 REM ADD A JOB 5204 '------------------------------------------ 5206 PRINT CLS$:A$="***** ADD A JOB *****":GOSUB 118 5208 IF A$="N" THEN RETURN 5209 IF LJ=>MAX% THEN PRINT"*** SORRY, YOU HAVE ";MAX%;" JOBS NOW ***" :FOR I=1 TO 1000:NEXT I:A$="N":RETURN 5210 GOSUB 310 'list jobs 5212 NJ=NJ+1:LJ=LJ+1:CP=CP+1 :A=NJ:B=NJ-1:C=NJ-2:D=NJ-3:GOSUB 202 'Advance arrays 5214 J=LJ:J$(J)="New job name":GOSUB 122 'Enter job name 5216 PRINT:PRINT"HOW LONG IN ";SF$;" IS THE JOB ___"; 5218 PRINT TAB(POS(0)-4);CHR$(11);:INPUT X 5220 L(LJ)=INT(X/2+.5) 5222 GOSUB 310 'list jobs 5224 PRINT:A$="DO YOU WANT TO ENTER ANOTHER JOB (Y/N) ___":GOSUB 110:PRINT 5226 IF A$="Y" THEN 5210 5228 IF A$<>"N" THEN PRINT CHR$(11);:GOTO 5224 5230 J$(NJ-1)="END":J$(NJ)="NONE" 'Restore end tags 5232 PRINT:PRINT"*** REDO Preceeding jobs for job# ";LJ;", and job# ";LJ+1;"." :PRINT:A$="Write these down, and press .":GOSUB 110:RETURN 5300 '------------------------------------------ 5302 REM DELETE A JOB 5304 '------------------------------------------ 5306 PRINT CLS$:A$="***** DELETE A JOB *****":GOSUB 118 5308 IF A$="N" THEN RETURN 5310 GOSUB 310 'list jobs 5312 NJ=NJ-1:LJ=LJ-1:CP=CP-1 'DECREMENT POINTERS 5314 PRINT:PRINT"ENTER THE JOB # THAT YOU WANT TO DELETE ==>";:INPUT Y 5316 IF Y>LJ+1 THEN PRINT"Too large. Check the list and try again." :GOSUB 310:GOTO 5314 5318 FOR K=1 TO NJ:FOR J=Y TO NJ:A=J+1:P(J,K)=P(A,K):NEXT J:NEXT K :FOR J=1 TO NJ:FOR K=Y TO NJ:A=K+1:P(J,K)=P(J,A):NEXT K:NEXT J :FOR J=Y TO NJ:J$(J)=J$(J+1):L(J)=L(J+1):NEXT J 'COMPRESS ARRAYS 5320 GOSUB 310 'list jobs 5322 PRINT:A$="DO YOU WANT TO DELETE ANOTHER JOB (Y/N) ___":GOSUB 110:PRINT 5324 IF A$="Y" THEN 5310 5326 PRINT :A$="Check predecessors for jobs you need to REDO, then press ANY KEY." :GOSUB 110 5328 RETURN 10000 END  PRINT :A$="Check predecessors for jobs you need to REDO, th