DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦8f4969300⟧ TextFile

    Length: 8406 (0x20d6)
    Types: TextFile
    Names: »ENQ.S«

Derivation

└─⟦881c1028e⟧ Bits:30005102 8" CR80 Floppy CR80FD_0061 ( VOL: SCC.V NSC Directory: Queue_test.D )
    └─⟦4f56469eb⟧ 
        └─ ⟦this⟧ »QUEUE_TEST.D!ENQ.S« 

TextFile

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 «nul»