|
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: 7184 (0x1c10) Types: TextFile Names: »DEQ.S«
└─⟦881c1028e⟧ Bits:30005102 8" CR80 Floppy CR80FD_0061 ( VOL: SCC.V NSC Directory: Queue_test.D ) └─⟦4f56469eb⟧ └─ ⟦this⟧ »QUEUE_TEST.D!DEQ.S«
MAINMODULE DEQ; %LIST "--------------------------------------------------------------- " DEQUEUE UTILITY "--------------------------------------------------------------- " READS ALL MTCB'S AND POSSIBLE " ASSOCIATED MESSAGE FILES FROM A " QUEUE SPECIFIED BY TERMINAL AND " QUEUE NUMBER. A READING FROM A TERMINAL " GROUP IS MADE IF QUE=-1; " CALL: " DEQ MTCB: <MTCB_FILE> MSG: <MESSAGE FILE> " TER=XX QUE=YY " %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 IMPORT PROCEDURE MTCBMINIT(R3;R6):ERROR_DONE; %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:)'; CONST Q_FIRSTENTRY = 1; %SOURCE READUSERPARAMS.S %SOURCE WRITEINTEGERS.S "--------------------------------------------------------------- PROCEDURE DEQUEUED(R6); VAR SAV6: INTEGER; "--------------------------------------------------------------- BEGIN R6 => SAV6; ADDRESS(Q_CTBL) => R4; TER_NO => R0; QUE_NO => R1; R0 => R4@QIOCB.W1; R1 => R4@QIOCB.W2; IF R1 = -1 THEN BEGIN "READ FROM GROUP SWITCH MON(QACCESS,READ_GR_EL,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(QUEFILETYPE) => R4,ADDRESS('READ Q-GROUP(:0:)')=>R5,R7,R6); END; R4@QIOCB.W5 => R1 => QUE_NO_DEL; END ELSE BEGIN R1 => QUE_NO_DEL; Q_FIRSTENTRY => R2 => R4@QIOCB.W3; SWITCH MON(QACCESS,READ_NON,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(QUEFILETYPE) => R4,ADDRESS('READ ELEMENT(:0:)')=>R5,R7,R6); END; END "END IF"; R4@QIOCB.W1 => R2 => MTCB_INDX; EXIT(SAV6); END; "--------------------------------------------------------------- PROCEDURE DELETEQENTRY(R6); VAR SAV6: INTEGER; "--------------------------------------------------------------- BEGIN R6 => SAV6; ADDRESS(Q_CTBL) => R4; TER_NO => R0 => R4@QIOCB.W1; QUE_NO_DEL => R1 => R4@QIOCB.W2; Q_FIRSTENTRY => R2 => R4@QIOCB.W3; SWITCH MON(QACCESS,DEL,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(QUEFILETYPE) => R4,ADDRESS('DELETE ELEMENT(:0:)')=>R5,R7,R6); END; EXIT(SAV6); END; "--------------------------------------------------------------- PROCEDURE WRITEMTCBD(R6); VAR SAV6: INTEGER; CONST LINE_INTEGER_COUNT = 10; "--------------------------------------------------------------- BEGIN R6 => SAV6; MTCB_INDX => R0; ADDRESS(MTCB_BUF) => R1; SWITCH MON(MTCB,READ,R0,R1,R7): X2 TO ERR: FILEERROR(ADDRESS(QUEFILETYPE) => R4,ADDRESS('READMTCB(:0:)')=>R5,R7,R6); END; IF R1@INTEGER = MTCB_P THEN SIZE(PSEUDO) => R2 ELSE SIZE(REAL) => R2 "END IF"; LINE_INTEGER_COUNT => R0; ADDRESS(MTCBFILETYPE) => R4; WHILE R2 >= R0 DO BEGIN WRITEINTEGERS(R0,R1,R4,R6); R1+R0; R2-R0; END "END WHILE"; IF R2 >= 0 THEN BEGIN R2 => R0; WRITEINTEGERS(R0,R1,R4,R6); END "END IF"; R4@FILETYPE.S => R4; SWITCH MON(STREAM,OUTNL,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(MTCBFILETYPE) => R4,ADDRESS('NL TO FILE (:0:)')=>R5,R7,R6); END; SWITCH MON(STREAM,FLUSH,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(MTCBFILETYPE) => R4,ADDRESS('FLUSH (:0:)')=>R5,R7,R6); END; EXIT(SAV6); END; "--------------------------------------------------------------- PROCEDURE WRITEMSGD(R6); VAR SAV6: INTEGER; CONST BUF_SZ = 10; MAX_FILESIZE = 1000; " INTEGERS VAR MSG_BUF: ARRAY[0..BUF_SZ-1] OF INTEGER; MTCB_FADDR: FILE_ADDRESS; INTEGER_CNT: INTEGER; READ_SWITCH: INTEGER; CONST READING = 0; STOPREAD = 1; "--------------------------------------------------------------- BEGIN R6 => SAV6; MTCB_INDX => R0; ADDRESS(MTCB_FADDR) => R1; SWITCH MON(MTCB,GETFILE,R0,R1,R7): X2 TO ERR: FILEERROR(ADDRESS(QUEFILETYPE) => R4,ADDRESS('GETFILE(:0:)')=>R5,R7,R6); END; R4 => QUEFILETYPE.F; ADDRESS(QUEFILETYPE) => R4; OPENSTREAM(R4,INPUT_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('SETPOSITION(:0:)')=>R5,R7,R6); END; READING => R0 => READ_SWITCH; MAX_FILESIZE => R0 => INTEGER_CNT; REPEAT ADDRESS(MSG_BUF) => R1; BUF_SZ*2 => R2; QUEFILETYPE.S => R4; SWITCH MON(STREAM,INREC,R1,R2,R4,R7): X2 TO ERR: IF R7 = EOF THEN STOPREAD => R0 => READ_SWITCH ELSE FILEERROR(ADDRESS(QUEFILETYPE) => R4, ADDRESS('READ RECORD(:0:)') => R5,R7,R6); "END IF"; END; R2+1 SHIFTLL 1 => R0; ADDRESS(MSGFILETYPE) => R4; WRITEINTEGERS(R0,R1,R4,R6); INTEGER_CNT => R2-R0 => INTEGER_CNT; IF R2 < 0 THEN STOPREAD => R2 => READ_SWITCH; UNTIL READ_SWITCH => R2 = STOPREAD; R4@FILETYPE.S => R4; SWITCH MON(STREAM,OUTNL,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(MSGFILETYPE) => R4,ADDRESS('OUTPUT NL(:0:)')=>R5,R7,R6); END; SWITCH MON(STREAM,FLUSH,R4,R7): X2 TO ERR: FILEERROR(ADDRESS(MSGFILETYPE) => R4,ADDRESS('FLUSH(:0:)')=>R5,R7,R6); END; CLOSESTREAM(ADDRESS(MTCBFILETYPE)=>R4,R6); DISMANTLEFILE(R4,R6); EXIT(SAV6); END; LABEL DEQ_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); ADDRESS(MTCBFILETYPE) => R4; ADDRESS(COUTFILETYPE) => 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(COUTFILETYPE) => 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); CLOSESTREAM(ADDRESS(PFILETYPE) => R4,R6); DISMANTLEFILE(R4,R6); ADDRESS(MTCBFILETYPE) => R4; OPENSTREAM(R4,OUTPUT_MODE => R3,R6); ADDRESS(MSGFILETYPE) => R4; OPENSTREAM(R4,OUTPUT_MODE => R3,R6); DEQ_CONTINUE: DEQUEUED(R6); WRITEMTCBD(R6); ADDRESS(MTCB_BUF) => R4; IF R4@INTEGER = MTCB_R THEN BEGIN WRITEMSGD(R6); END; DELETEQENTRY(R6); GOTO DEQ_CONTINUE END; ENDMODULE L