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

⟦bd879bc78⟧ TextFile

    Length: 3904 (0xf40)
    Types: TextFile
    Names: »CHECK_INIT_OPS.S«

Derivation

└─⟦f81e11cf7⟧ Bits:30005196 8" CR80 Floppy CR80FD_0194 ( CR/D/2497 TEST-TDX VS0102 Source moduler Att. Holger Bay 820208/AEK )
    └─⟦d066df9e9⟧ 
        └─ ⟦this⟧ »CHECK_INIT_OPS.S« 

TextFile

«ff»
"CHECK_INIT_OPS.S"
"----------------"

PROCEDURE CHECK_INIT_OPS(REPEATING        : BOOLEAN;
                         VAR ANY_FINISHED : BOOLEAN);
"**********************************************************************
  AUTHOR:           TLM
  DATE:             810323
***********************************************************************
  COMMENTS:
  This procedure runs through all INIT operations hanging out.
  If any of them have finished they are logged to the output file.
  In the read case:
         maybe a data check is performed.
         mayby the input buffer is dumped.
         the input buffer is released.
***********************************************************************
  CHANGE RECORD:
  VERSION    AUTHOR/DATE    DESCRIPTION OF CHANGE
  -------    -----------    ---------------------
**********************************************************************"
VAR   I              :  INTEGER;
      OPREF          :  OPERATION_REFERENCE;
      FINISHED       :  BOOLEAN;
      CC             :  COMPLETION_CODE;
      LOCAL_ADR,
      EXTERNAL_ADR   :  BYTE_ADDRESS;
      SIZE_IN_WORDS  :  INTEGER;
      OK             :  BOOLEAN;
      BYTES          :  INTEGER;
BEGIN
   ANY_FINISHED := FALSE;
   FOR I := 1 TO MAX_INIT_OPS DO
   BEGIN
      IF INIT_OPERATIONS[I].OCCUPIED THEN
      BEGIN
         TEST_OPERATION(INIT_OPERATIONS[I].OPREF, FINISHED, CC);
         IF FINISHED THEN
         BEGIN
            ANY_FINISHED := TRUE;
            INIT_OPERATIONS[I].OCCUPIED := FALSE;
            IF (NOT REPEATING) OR (CC <> IO_OK)
               OR
               ((INIT_OPERATIONS[I].KIND = INIT_READ_KD)
                AND
                (INIT_OPERATIONS[I].DUMP_AT_COMPLETION))
            THEN
            BEGIN
               WRITENL;
               WRITETEXT('*** INIT-(:0:)');
               CASE INIT_OPERATIONS[I].KIND OF
                  INIT_READ_KD    : WRITETEXT('READ  (:0:)');
                  INIT_APPEND_KD  : WRITETEXT('APPEND(:0:)')
               END;
               WRITETEXT(' COMPLETED ***(:0:)');
               WRITETEXT(' CRID = (:0:)');
               WRITEHEX (INIT_OPERATIONS[I].CRID);
               WRITENL;
            END;
            CHECK_TRANSFER(INIT_OPERATIONS[I].FILE_ADR, CC);
            IF CC <> IO_OK THEN
            BEGIN
               WRITETEXT('*** BAD COMPLETION CODE *** CC = (:0:)');
               WRITEHEX(CC);
               WRITENL;
            END
            ELSE
            BEGIN
               IF INIT_OPERATIONS[I].KIND = INIT_READ_KD THEN
               BEGIN
                  BYTES := SHORT(INIT_OPERATIONS[I].
                                 FILE_ADR.TRANSFERRED_BYTES);
                  GET_ABS_ADDR(BUFFERS[3].BUFFER[0],
                               LOCAL_ADR.WORD_ADDR);
                  GET_BUFFER_ADDR(INIT_OPERATIONS[I].MEMORY,
                                  EXTERNAL_ADR.WORD_ADDR,
                                  SIZE_IN_WORDS, OK);
                  LOCAL_ADR.BYTE_DISPLACEMENT := 0;
                  EXTERNAL_ADR.BYTE_DISPLACEMENT := 0;
                  COPY(EXTERNAL_ADR, LOCAL_ADR,
                       BYTES);
                  IF INIT_OPERATIONS[I].EXPECTED_PATTERN <> 0
                  THEN
                     CHECK_DATA(BYTES,
                                INIT_OPERATIONS[I].EXPECTED_PATTERN,
                                "BUFFER" 3);
                  IF INIT_OPERATIONS[I].DUMP_AT_COMPLETION THEN
                     PERFORM_DUMP("BUFFER" 3, 0,
                                  "FROM  " 0,
                                  "TO   " (BYTES DIV 2) + (BYTES MOD 2));
               END;
            END;
            RELEASE_BUFFER(INIT_OPERATIONS[I].MEMORY, OK);
            IF NOT OK THEN
            BEGIN
               WRITETEXT('RELEASE BUFFER NOT OK (:0:)');
               WRITENL;
            END;
         END;
      END;
   END;
END; " CHECK_INIT_OPS "