File PERT.

Directory of image this file is from
This file as a plain text file

/PERT, PROJECT EVALUATION AND REVIEW TECHNIQUE
/
/
/TESTING MAINLINE
START,	OPEN	;DEVICE SYS;FILENA ACTIVS.DA;ACTIVS
	GONEG	;OPENER
	OPEN	;DEVICE SYS;FILENA NODES.DA;NODES
	GONEG	;OPENER
	PRINT 13	;TEXT '_NEW PROJECT?'
	YESNO	;STP
	GOSUB	;CLRACT	/CLR.ACTIVITY FILE
	GOSUB	;INALL	/INPUT NEW PROJECT
ST5,	MOVE	;FKEYS	;KEYS	;8
	GOSUB	;SORT	/SORT ACTIVITIES IN START NODE ORDER
	INCREM	;GOSWITCH
STP,	PRINT 11	;TEXT '_PRINT OUT?'
	YESNO	;STC
	GOSUB	;PRTALL
STC,	PRINT 9	;TEXT '_CHANGES?'
	YESNO	;STGO
	GOSUB	;CHANGE
	GOTO	;ST5
STGO,	GOIFZO	;END	;GOSWITCH
	GOSUB	;CLRNODES
	GOSUB	;PROCESS
	CLEARW	;GOSWITCH
	GOTO	;STP
END,	CLOSE	;FILENA ACTIVS.DA	;ACTIVS
	CLOSE	;FILENA NODES.DA	;NODES
	EXIT
OPENER,	PRINT 11;TEXT '_FILE ERROR'
	EXIT

/PROCESS ROUTINE / /FORWARD PASS, CALC. ES,EF FOR EACH ACTIVITY /CALC. ET FOR EACH NODE PROCESS, 0;0 CLEARW ;BPASS CLRWDS ;3;K PR5, LOADIM ;1 ADDTO ;K GOSUB ;GETACT GONEG ;PR9 MOVE1 ;INI ;INODE MOVE1 ;FIN ;JNODE LOAD1 ;INODE GOSUB ;GETNODE MOVE2 ;ET ;ES LOAD2 ;T ADD2 ;ES STORE2 ;EF LOAD1 ;JNODE GOSUB ;GETNODE LOAD2 ;EF SUBT2 ;ET GOIF ;PR6 ;PR6 MOVE2 ;EF ;ET GOSUB ;PUTNODE PR6, LOAD2 ;EF SUBT2 ;TMIN GOIF ;PR8 ;PR8 MOVE2 ;EF ;TMIN PR8, GOSUB ;PUTACT GOTO ;PR5 /BACKWARD PASS /CALC. LFN,LS,TS FOR EACH ACTIVITY /CALC. LT FOR EACH MODE PR9, INCREM ;BPASS PRINT 12;TEXT '_TOTAL TIME=' LOAD2 ;TMIN PRINTU ;MASK ;10 /*** MOVE ;BKEYS ;KEYS ;8 /*** GOSUB ;SORT /SORT TO FINISH NODE ORDER PR10, LOAD ;K SUBTIM ;1 STORE ;K GOZERO ;PR12 GOSUB ;GETACT GONEG ;PR10 MOVE1 ;INI ;INODE MOVE1 ;FIN ;JNODE LOAD1 ;JNODE GOSUB ;GETNODE MOVE2 ;LT ;LFN LOAD2 ;LFN SUBT2 ;T STORE2 ;LS LOAD1 ;INODE GOSUB ;GETNODE LOAD2 ;LT SUBT2 ;LS GONEG ;PR11 MOVE2 ;LS ;LT GOSUB ;PUTNODE PR11, LOAD2 ;LS SUBT2 ;ES STORE2 ;TS GOSUB ;PUTACT GOTO ;PR10 / /CALC. FREE SLACK= ACTIV. TOTAL SLACK LESS FINISH NODE TOTAL SLACK PR12, CLRWDS ;3;K PR14, LOADIM ;1 ADDTO ;K GOSUB ;GETACT GONEG ;PR20 MOVE1 ;FIN ;JNODE LOAD1 ;JNODE GOSUB ;GETNODE LOAD2 ;TS SUBT2 ;LT ADD2 ;ET STORE2 ;FS GOSUB ;PUTACT GOTO ;PR14 /END OF PROCESS LOOP PR20, GOTO ;PROCESS /
CLRACT, 0;0 MOVE-1 ;ACTIVS ;FILEWK ;9 GOSUB ;CLRALL CLRWDS-8 ;2;ACTIVS+4 CLOSE;FILENA ACTIVS.DA;ACTIVS GOTO ;CLRACT CLRNODES, 0;0 MOVE-1 ;NODES ;FILEWK ;9 GOSUB ;CLRALL CLRWDS-8 ;2;NODES+4 CLOSE;FILENA NODES.DA;NODES GOTO ;CLRNODES CLRALL, 0;0 CLRAL2, LOAD2 ;FILEWK FILL-8 ;-1;XAREA ;256 WRITAB INCGOZ ;CLRALL ;FLWFLN INCREM ;FLWBLK GOTO ;CLRAL2 / /PRINT DETAIL LINE PRTLIN, 0;0 PRINT 1;TEXT '_' LOAD1 ;ACTNUM PRINTU ;MASK ;6 LOAD1 ;INI PRINTU ;MASK ;6 LOAD1 ;FIN PRINTU ;MASK ;6 CLEARW ;COUNT PLIN, LOADX1 ;COUNT LOAD2 ;T SIGN2 PRINTU ;MASK ;6 DO ;PLIN ;COUNT ;2;12 PRINTX ;DESCR ;20 GOTO ;PRTLIN / /PRINT ALL ACTIVITIES PRTALL, 0;0 CLRWDS ;3;K PRINT 1;TEXT '_' PRINT 60;TEXT ' ACT. START FIN. TIME EARL. EARL. LATE LATE TOTAL FREE' PRINT 1;TEXT '_' PRINT 61;TEXT ' NUM. NODE NODE START S FIN. START FIN. SLACK SLACK' PRTA, LOADIM ;1 ADDTO ;K GOSUB ;GETACT GONEG ;PRTALL GOSUB ;PRTLIN GOTO ;PRTA / /FIND NODE IN ACC. ELSE MAKE NEW RECORD GETNODE, 0;0 STORE1 ;TEMP READSQ ;NODES GONEG ;NONOD STORE2 ;NODTEM GETREC ;NORCID GOIFZO ;NONO2 ;BPASS LOAD2 ;LT SIGN2 ADDIM ;1 GONZRO ;NONO2 MOVE2 ;TMIN ;LT NONO2, LOAD1 ;NORCID GOIFEQ ;NONOD ;-1 GOTO ;GETNODE NONOD, CLEARW ;NORCID MOVE2 ;S ;ET LOAD2 ;NODTEM PUTREC ;NORCID WRITE GOTO ;GETNODE PUTNODE, 0;0 LOAD1 ;TEMP READSQ ;NODES INCREM ;NORCID PUTREC ;NORCID WRITE GOTO ;PUTNODE TEMP, 0 NODP, 0 NODTEM, 0;0 /NODES RECORD 3000 RECORDS OF 5 WORDS NORCID, 0 ET, 0;0 LT, 0;0 / /GET ACTIVITY RECORD GETACT, 0;0 LOAD ;K READSQ ;ACTIVS GONEG ;GETACT GETREC ;ACRCID LOAD1 ;ACTNUM GOIFEQ ;ENDACT ;-1 GOTO ;GETACT ENDACT, SIGN1 GOTO ;GETACT PUTACT, 0;0 /PUT RECORD BACK LOAD ;K READSQ ;ACTIVS GONEG ;PUTACT PUTREC ;ACRCID LOAD ;K GOZERO ;PUTA2 WRITE GOTO ;PUTACT PUTA2, WRITSQ GOTO ;PUTACT / / / / WORK AREAS FKEYS, 2;3;1;4;5;0;0;0 BKEYS, 3;2;1;4;5;0;0;0 MASK, TEXT ' -' BPASS, 0 INODE, 0 JNODE, 0 K, 0;0;0 COUNT, 0 D, 0;0 S, 0;0 TMIN, 0;0 / GOSWITCH,0 FILEWK, 0 FLWBLK, 0;0 FLWINX, 0 FLWUNU, 0;0 FLWLEN, 0;0 FLWFLN, 0 /ACTIVITY FILE RECORD ACRCID, 0 ACTNUM, 0 INI, 0 /INITIAL NODE FIN, 0 /FINAL NODE T, 0;0 /TIME FOR ACTIVITY ES, 0;0 /EARLIEST START EF, 0;0 /EARLIEST FINISH LS, 0;0 /LATEST START LFN, 0;0 /LATEST FINISH TS, 0;0 /TOTAL SLACK FS, 0;0 /FREE SLACK DESCR, ZBLOCK 10 /20 CHARS ZBLOCK 5 /32 WORDS LONG /CHANGE ACTIVITIES ROUTINE / CHANGE, 0;0 /******* GOTO ;CHANGE / / /TEMP INPUT ROUTINE INALL, 0;0 PRINT 37 ;TEXT '_NUM. S.NODE F.NODE TIME DESCRIPTION' INP2, PRINT 1;TEXT '_' TYPIN K30 GONEG ;INALL STORE1 ;ACTNUM CLRWDS ;16;INI PRINTU ;MASK ;6 TYPIN K10 PRINTU ;MASK ;6 STORE1 ;INI TYPIN K10 PRINTU ;MASK ;6 STORE1 ;FIN TYPIN K20 PRINTU ;MASK ;8 STORE2 ;T TYPTEX ;DESCR ;20 PRINT 4;TEXT ' OK?' YESNO ;INP2 CLEAR READSQ ;ACTIVS GONEG ;INALL PUTREC ;ACRCID WRITSQ GONEG ;INALL GOTO ;INP2 PROG=. OCTAL FIELD 0 *6200 ACTIVS, ZBLOCK 11 NODES, ZBLOCK 11
NAMFIL=ACTIVS /SORT SHELL DISK AND CORE FIELD 1 *PROG SORT, 0;0 CLRWDS ;7;SP1 MOVE1-1 ;NAMFIL+4 ;SORTNB /FIRST UNUSED BLOCK INCREM ;SORTNB LOAD1-1 ;NAMFIL+10 /IS THE FILE FULL? SIGN1 NEGATE SUBT1-1 ;NAMFIL+3 /NO.OF INDEX BLOCKS SUBT1-1 ;NAMFIL+4 /FIRST UNUSED GOIF ;SRTB4 ;SRTB4 /YES INCREM ;SORTNB SRTB4, LOAD-1 ;NAMFIL STORE ;BFIRST /DEVICE LOAD1-1 ;NAMFIL+1 /FIRST BLOCK OF FILE ADD1-1 ;NAMFIL+3 SUBTIM ;1 STORE1 ;BFIRST+1 /FIRST DATA BLOCK-1 LOADIM ;400 /256 DIVID1-1 ;LENREC STORE1 ;SORTN MULT1-1 ;LENREC STORE1 ;LENGTH STORE1 ;SL1 STORE1 ;PL1 STORE1 ;PL2 STORE1 ;SL2 LOAD1-1 ;LENREC STORE1 ;SORLEN MOVE ;KEYS ;SORKEY ;10 LOAD1 ;SORTN MULTIM ;2 STORE1 ;SORTN /NO. OF RECORDS IN SORT AREA LOAD1 ;SORTNB STORE1 ;SORTMB SRTB20, LOAD1 ;SORTMB SHIFTR 1 STORE1 ;SORTMB GOIF ;SORT ;.+1 SRTB30, LOAD1 ;SORTNB SUBT1 ;SORTMB STORE1 ;SORTKB MOVIM ;1;SORTJB SRTB41, MOVE1 ;SORTJB ;SORTIB SRTB49, LOAD1 ;SORTIB ADD1 ;SORTMB STORE1 ;SORTLB GOSUB ;BGETCOM /GET BLOCKS, SORT, WRITE BACK GOIFZO ;SRTB60 ;SWITCH LOAD1 ;SORTIB SUBT1 ;SORTMB STORE1 ;SORTIB SUBTIM ;1 GOIF ;SRTB49 ;SRTB60 GOTO ;SRTB49 SRTB60, LOAD1 ;SORTJB ADDIM ;1 STORE1 ;SORTJB SUBT1 ;SORTKB GOIF ;SRTB41 ;SRTB41 GOTO ;SRTB20 BGETCOM, 0;0 LOAD2 ;BFIRST ADD1 ;SORTIB READAB GOIF ;.+2 ;ERRORT MOVE-1 ;XAREA ;SORTA SL1, 200 LOAD2 ;BFIRST ADD1 ;SORTLB READAB GOIF ;.+2 ;ERRORT LOADX2 ;LENGTH MOVE-1 ;XAREA ;SORTA SL2, 200 GOSUB ;CORSORT GOIFZO ;BGETCOM ;SWITCH LOADX1 ;LENGTH MOVE-10 ;SORTA ;XAREA PL2, 400 LOAD2 ;BFIRST ADD1 ;SORTLB WRITAB GOIF ;.+2 ;ERRORT MOVE-10 ;SORTA ;XAREA PL1, 400 LOAD2 ;BFIRST ADD1 ;SORTIB WRITAB GOIF ;.+2 ;ERRORT GOTO ;BGETCOM CORSORT, 0;0 CLEARW 1 ;SWITCH LOADIM ;2 STORE1 ;SORTM GOPAL 1 ;SORT20 GOIFZO ;CORSORT ;SWITCH LOAD1 ;SORTN STORE1 ;SORTM GOPAL 1 ;SORT20 GOTO ;CORSORT ERRORT, PRINT 21 ;TEXT '_SORT DISK ERROR_' EXIT
/PAL SUBROUTINE, CORE SORT PAGE SORT20, 0 CIF CDF 10 SORT21, CLA CLL TAD SORTM /M RAR /DIVIDE BY 2 DCA SORTM /M=M/2 TAD SORTM SPA SNA CLA JMP OUT20 /JMP I SORT20 SORT30, TAD SORTM CIA TAD SORTN DCA SORTK /K=N-M CLA CLL IAC DCA SORTJ /J=1 SORT41, CLA CLL TAD SORTJ DCA SORTI /I=J SORT49, CLA CLL TAD SORTI TAD SORTM DCA SORTL /L=I+M DCA SORSW /CLEAR SW JMS SORCOM CLA CLL TAD SORSW SNA JMP SORT60 CLA CLL TAD SORTM CIA TAD SORTI DCA SORTI /I=I-M CLA CLL CMA TAD SORTI SMA /IF I-1<0 JMP SORT49 /NO SORT60, CLA CLL IAC /=1 TAD SORTJ DCA SORTJ /J=J+1 TAD SORTK CIA TAD SORTJ /IF J-K>0 SPA SNA CLA JMP SORT41 JMP SORT21 OUT20, CDF CIF 0 JMP I SORT20 /OF PAGE LITERALS FIT HERE PAGE SORCOM, 0 CLA CLL CMA TAD SORTI JMS MULLEN /I-1 X LENGTH OF RECORD DCA SXI /START OF RECRD 1 CLA CLL CMA /-1 TAD SORTL JMS MULLEN DCA SXL /ST. OF REC. 2 DCA SX1 /CLEAR SLOOPS, TAD SX1 /KEY COUNT TAD TADKEYS / (TAD KEYS DCA .+1 0 /TAD KEYS INSTR. TAD ADSORTA /ADDRESS OF SORTA DCA SP3 /POINT TO WORD IN REC. TO BE COMPARED TAD SP3 TAD SXI /PLUS REC. 1 DCA SP1 /WORD IN REC 1 TAD SP3 TAD SXL DCA SP2 /WORD IN REC 2 TO BE COMP. /COMPARE KEY WORDS LOGICALLY TAD I SP1 /GET WORD 1 SPA CLA JMP SXGLAM /NEG. TAD I SP2 SPA JMP SXCRES /A<B SXGAB, CIA /NEGATE TAD I SP1 JMP SXCRES /RESULT IN AC. SXGLAM, CLA CLL TAD I SP2 SPA JMP SXGAB / CLA CLL IAC /=1 SXCRES, SPA SNA /RESULT IN AC HERE,SKIP IF A>B JMP SXINC /AROUND SWAP ROUTINE /SWAP TWO RECORDS CLA CLL TAD SXI TAD ADSORTA DCA SP4 /POINT REC. 1 TAD SXL TAD ADSORTA DCA SP5 /REC 2 TAD SORLEN /LENGTH CIA DCA SP3 /COUNT DOWN SWALOP, TAD I SP4 MLD TAD I SP5 DCA I SP4 SWP DCA I SP5 ISZ SP4 ISZ SP5 ISZ SP3 /COUNTER JMP SWALOP ISZ SORSW ISZ SWITCH JMP I SORCOM /OUT /COUNT DOWN KEYS SXINC, SZA /EQUAL COMPARE JMP I SORCOM / NO ISZ SX1 /KEY COUNT + 1 CLA CLL IAC RTL /=4 RAL /=8 CIA /=-8 TAD SX1 SMA CLA JMP I SORCOM /OUT EQUAL COMPARE JMP SLOOPS MULLEN, 0 /MULTIPLY BY LENGTH SPA SNA JMP I MULLEN /EXIT IF ZERO CIA DCA SP3 /COUNTER TAD SORLEN ISZ SP3 JMP .-2 JMP I MULLEN /DATA AREAS----------------- SP1,0 SP2,0 SP3,0 SP4,0 SP5,0 SXI,0 SXL,0 SX1,0 SORSW,0 TADKEYS, TAD SORKEY ADSORTA, SORTA SORLEN,0 SORKEY, ZBLOCK 10 /KEYS SWITCH,0 SORTI,0 SORTJ,0 SORTK,0 SORTL,0 SORTM,0 SORTN,0 KEYS, 3;2;1;4;5;1;0;0;0 SORTNB, 0 SORTIB, 0 SORTMB, 0 SORTLB, 0 SORTJB, 0 SORTKB, 0 LENGTH, 0 BFIRST, 0;0;0 LENREC=NAMFIL+6 SORTA, ZBLOCK 1000 /2 X 256 WORD AREAS /TEMP END $



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search