DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 8406 (0x20d6) Types: TextFile Names: »ENQ.S«
└─⟦881c1028e⟧ Bits:30005102 8" CR80 Floppy CR80FD_0061 ( VOL: SCC.V NSC Directory: Queue_test.D ) └─⟦4f56469eb⟧ └─ ⟦this⟧ »QUEUE_TEST.D!ENQ.S«
MAINMODULE ENQ; %LIST "--------------------------------------------------------------- " " ENQUEUE UTILITY: " "---------------------------------------------------------------- " " QUEUES A MTCB WITH A POSSIBLE MESSAGE-FILE INTO A QUEUE " SPECIFYED BY TERMINAL NO. AND QUEUE NO. " " " CALL: " ENQ MTCB:<MTCB_FILE> MSG:<MSG_FILE> TER= XX QUE= YY " " WHERE XX AND YY IS DECIMAL QUEUE NUMBERS. " " %SOURCE @**GENS.D*SWELLPREFIX.D*GENERALPARAMS.S %SOURCE @**GENS.D*SWELLPREFIX.D*MONITORNAMES.S %SOURCE @**GENS.D*SWELLPREFIX.D*IOSPARAMS.S %SOURCE @**SCCNAMES.D*SCCNAME.N %SOURCE @**SCCNAMES.D*SCCDATA.N %SOURCE @**SCCNAMES.D*NSSMTCB.N %SOURCE @**SCCNAMES.D*SCC_PROCESS.N %SOURCE @**NM_NAMES.D*SUPPORT.N %SOURCE @**NM_NAMES.D*QACCESS_TYPES.S %SOURCE @**GENS.D*UTILITYHELP.D*UTH.I %LIST %PRINT " REDEFINITION OF MON INFILE,INELEMENT EXIT VALUES: " CONST INFIOERROR= IF_ERROR; INFSYNTAX= IF_SYNTAX; INELERROR= IE_ERROR; INELNUMBER= IE_NUMBER; INELID= IE_IDENTIFIER; INELSPECIAL= IE_SPECIAL; TYPE INFID_EXIT= INFILEID_EXITS; INEL_EXIT= INELEMENT_EXITS; VAR Q_CTBL: QIOCB; MTCB_BUF: ARRAY[0..SIZE(REAL)-1] OF INTEGER; MTCB_INDX: INTEGER; TER_NO: INTEGER; QUE_NO: INTEGER; QUE_NO_DEL:INTEGER; MSGFILETYPE: FILETYPE; QUEFILETYPE: FILETYPE; MTCBFILETYPE: FILETYPE; SIGNAL_NAME1: PROCESS_NAME; INIT QUEFILETYPE.NAME = 'Q MON CALL(:0:)(:0:)'; IMPORT PROCEDURE MTCBMINIT(R3;R6):ERROR_DONE; %SOURCE READUSERPARAMS.S %SOURCE WRITEINTEGERS.S PROCEDURE READINTEGERS " CALL RETURN (R0; " MAX NO. OF INTEGERS " INTEGERS READ R1; " REF. INTE- UNCH " GER ARRAY R4; " REF. FILE UNCH " TYPE R6):X2; " LINK " RETURN: LINK: NL DETECTED " LINK+1: MAX. INTEGERS FOUND VAR SAV0,SAV1,SAV4,SAV6: INTEGER; CONST NL=10; LABEL END_INTEGER; "--------------------------------------------------------------- BEGIN R6 => SAV6; R0 => SAV0; R1 => SAV1; R4 => SAV4; R1 => R0; REPEAT SAV4 => R4; R4@FILETYPE.S => R4; SWITCH MON(STREAM,INELEMENT,6=>R1,R3,R4,R5,R0=>R6,R7): INEL_EXIT TO INELERROR: FILEERROR(SAV4 => R4, ADDRESS('INELEMENT(:0:)') => R5,R7,R6); INELID: FILEERROR(SAV4 => R4, ADDRESS('ELEMENT IN(:0:)') => R5,R3=>R7,R6); INELSPECIAL: BEGIN IF R3 = NL THEN GOTO END_INTEGER; IF R3 <> SP THEN FILEERROR(SAV4 => R4, ADDRESS('SPACIAL IN(:0:)') => R5,R3=>R7,R6); END; INELNUMBER: BEGIN R0+1; SAV0 => R1-1 => SAV0; END; END; UNTIL SAV0 => R1 < 1; SAV6 => R1+1 => SAV6; END_INTEGER: SAV1 => R1; R0-R1; SAV4 => R4; EXIT(SAV6); END; "--------------------------------------------------------------- PROCEDURE READMTCBD(R6); VAR INTGCNT: INTEGER; SAV6: INTEGER; CONST WAIT_MTCB = 1; WRITE_MASK = #7FF; "--------------------------------------------------------------- BEGIN R6 => SAV6; MON (STREAM,OUTTEXTB,COUTFILETYPE.S => R4, ADDRESS('MTCBDATA FROM: (:0:)')=> R6,R7):ERROR_DONE; MON (STREAM,OUTREC,(2*SIZE(FILE_NAME)) => R2, ADDRESS(MTCBFILETYPE) => R1,R4,R7):ERROR_DONE; MON (STREAM,OUTNL,R4,R7):ERROR_DONE; MON (STREAM,FLUSH,R4,R7):ERROR_DONE; ADDRESS(MTCBFILETYPE) => R4; ADDRESS(MTCB_BUF) => R1; SIZE(MTCB_BUF) => R0 => R2; 0 => R3; WHILE R2-1 >= 0 DO R3 => R1@A[R2]; SWITCH READINTEGERS(R0,R1,R4,R6): X2 TO 1: REPEAT INB(R4,R3,R6) UNTIL R3 = NL; END; R0 => INTGCNT; IF R0 = 0 THEN MON (TERMINATE,#8000 => R0,LOCATION(READMTCBD) => R1,R7); R1 => R4; R4@INTEGER => R1; SWITCH MON(MTCB,CREAT,WAIT_MTCB => R0,R1,R7): X2 TO ERR: FILEERROR(ADDRESS(MTCBFILETYPE) => R4,ADDRESS('CREATEMTCB(:0:)')=>R5,R7,R6); END; R0 => MTCB_INDX; ADDRESS(MTCB_INDX) => R0; ADDRESS(MTCB_BUF) => R1; SWITCH MON(MTCB,WRITE,R0,R1,WRITE_MASK => R2,R7): X2 TO ERR: FILEERROR(ADDRESS(MTCBFILETYPE) => R4,ADDRESS('WRITEMTCB(:0:)')=>R5,R7,R6); END; ADDRESS(COUTFILETYPE) => R4; REPEAT INTGCNT => R6; IF R6 >= 11 THEN 8 => R0 ELSE R6 => R0; R6 - R0 => INTGCNT; WRITEINTEGERS(R0,R1,R4,R6); R1+R0; UNTIL INTGCNT => R6 < 1; MON (STREAM,FLUSH,COUTFILETYPE.S=>R4,R7):ERROR_DONE; EXIT(SAV6); END; "--------------------------------------------------------------- PROCEDURE READMSGD (R6); CONST BUF_SZ = 50; VAR SAV6: INTEGER; VAR MSG_BUF: ARRAY[0..BUF_SZ-1] OF INTEGER; VAR END_READ: INTEGER; CONST READING = 0; STOPREAD = 1; IMF_FILE = 1; PDB_FILE = 2; VAR MTCB_FADDR: FILE_ADDRESS; "--------------------------------------------------------------- BEGIN R6 => SAV6; ADDRESS(MTCB_INDX) => R0; ADDRESS(MTCB_FADDR) => R1; SWITCH MON(MTCB,CREATEFILE,R0,R1,PDB_FILE => R2,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(MTCBFILETYPE) => R4,ADDRESS('CREATEFILE(:0:)')=>R5,R7,R6); END; R4 => QUEFILETYPE.F; ADDRESS(QUEFILETYPE) => R4; OPENSTREAM(R4,OUTPUT_MODE => R3,R6); ADDRESS(MTCB_FADDR) => R1; R4@FILETYPE.S => R4; SWITCH MON(STREAM,SETPOSITION,R1,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(QUEFILETYPE) => R4,ADDRESS('SET POS(:0:)')=>R5,R7,R6); END; REPEAT ADDRESS(MSGFILETYPE) => R4; ADDRESS(MSG_BUF) => R1; SIZE(MSG_BUF) => R0; SWITCH READINTEGERS(R0,R1,R4,R6): X2 TO 0: STOPREAD => R6 => END_READ; END; R0 => R2 SHIFTLL 1; " MAKE BYTE COUNT QUEFILETYPE.S => R4; SWITCH MON(STREAM,OUTREC,R1,R2,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(QUEFILETYPE) => R4,ADDRESS('OUTREC(:0:)')=>R5,R7,R6); END; UNTIL END_READ => R6 = STOPREAD; SWITCH MON(STREAM,FLUSH,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(QUEFILETYPE) => R4, ADDRESS('FLUSH(:0:)')=>R5,R7,R6); END; ADDRESS(QUEFILETYPE) => R4; CLOSESTREAM(R4,R6); DISMANTLEFILE(R4,R6); EXIT(SAV6); END; "--------------------------------------------------------------- PROCEDURE QUEUED (R6); VAR SAV6: INTEGER; CONST Q_ENTRYNO = 0; " LAST ENTRY "--------------------------------------------------------------- BEGIN R6 => SAV6; ADDRESS(Q_CTBL) => R4; TER_NO => R0 => R4@QIOCB.W1; QUE_NO => R0 => R4@QIOCB.W2; Q_ENTRYNO => R0 => R4@QIOCB.W3; MTCB_INDX => R0 => R4@QIOCB.W4; SWITCH MON(QACCESS,INS,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(MTCBFILETYPE) => R4,ADDRESS('ENQUEUE(:0:)') => R5,R7,R6); END; ADDRESS(SIGNAL_NAME1) => R0; IF R0@INTEGER <> 0 THEN MON (SENDSIGNAL,R0,R7); EXIT(SAV6); END; "--------------------------------------------------------------- " " ENQUEUE UTILITY " "--------------------------------------------------------------- " QUEUES A MTCB WITH A POSSIBLE " MESSAGE FILE INTO A QUEUE SPECIFIED " BY TERM AND QUEUE NO. " " CALL: " ENQ MTCB:<MTCB_FILE> MSG:<MESSAGE_FILE> " TER = XX QUE = YY LABEL ENQ_CONTINUE; "--------------------------------------------------------------- BEGIN SWITCH MTCBMINIT(MAC_ALL => R3,R6):ERROR_DONE TO ERR: BEGIN R7=>R0; R6=>R1; SETS(R0,15); MON (TERMINATE,R0,R1,R7); END; END; ACCEPTFILES(R6); READSYSPARAMS(R6); OPENSTREAM(ADDRESS(CINFILETYPE) => R4,INPUT_MODE => R3,R6); ADDRESS(MTCBFILETYPE) => R4; ADDRESS(CINFILETYPE) => R5; R5@FILETYPE.F => R3 => R4@FILETYPE.F; R5@FILETYPE.S => R3 => R4@FILETYPE.S; MOVM(SIZE(FILE_NAME), R5@FILE_NAME, R4@FILE_NAME); ADDRESS(MSGFILETYPE) => R4; ADDRESS(CINFILETYPE) => R5; R5@FILETYPE.F => R3 => R4@FILETYPE.F; R5@FILETYPE.S => R3 => R4@FILETYPE.S; MOVM(SIZE(FILE_NAME), R5@FILE_NAME, R4@FILE_NAME); READUSERPARAMS(R6); QUE_NO => R6; IF R6 = -1 THEN FILEERROR(ADDRESS(PFILETYPE)=>R4,ADDRESS('ILL. QUEUE NO.(:0:)')=>R5,R7,R6); CLOSESTREAM(ADDRESS(PFILETYPE) => R4,R6); DISMANTLEFILE(R4,R6); ADDRESS(MTCBFILETYPE) => R4; OPENSTREAM(R4,INPUT_MODE => R3,R6); ADDRESS(MSGFILETYPE) => R4; OPENSTREAM(R4,INPUT_MODE => R3,R6); ENQ_CONTINUE: READMTCBD(R6); ADDRESS(MTCB_BUF) => R4; IF R4@INTEGER = MTCB_R THEN BEGIN READMSGD(R6); END; QUEUED(R6); GOTO ENQ_CONTINUE; END; ENDMODULE