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

⟦69e3dc5af⟧ TextFile

    Length: 2670 (0xa6e)
    Types: TextFile
    Names: »INITREAD.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⟧ »INITREAD.S« 

TextFile

«ff»
"INITREAD.S"
"----------------"

PROCEDURE INT_INITREAD(PC, SP : INTEGER;VAR CC : COMPLETION_CODE);
"**********************************************************************
  AUTHOR:           TLM
  DATE:             810323
***********************************************************************
  COMMENTS:
**********************************************************************"
VAR   
      CRID        :  INTEGER;
      NOOFBYTES   :  INTEGER;
      PATTERNNO   :  INTEGER;
      BUFFERNO    :  INTEGER;
      OPREF       :  OPERATION_REFERENCE;
      I           :  INTEGER;
      FOUND       :  BOOLEAN;
      DUMP_AT_COMPLETION : INTEGER;
      MEMORY             : MEMORY_PARM;
      ADDR               : WORD_ADDRESS;
      WORDS              : INTEGER;
      OK                 : BOOLEAN;
BEGIN
   VM := CODE[PC + XVARMASK];
   GET_PARAMETER(VM, 1, PC, SP, CRID);
   GET_PARAMETER(VM, 2, PC, SP, NOOFBYTES);
   BUFFERNO := CODE[PC + XPARAMS + 3];
   GET_PARAMETER(VM, 4, PC, SP, PATTERNNO);
   GET_PARAMETER(VM, 5, PC, SP, DUMP_AT_COMPLETION);

   GET_FD(CRID, F);
   
   BLEP@.LINK := NIL;
   BLEP@.XL   := EXTERNAL;

   I := 0;
   FOUND := FALSE;
   REPEAT
      I := SUCC(I);
      IF NOT INIT_OPERATIONS[I].OCCUPIED THEN
      BEGIN
         GET_BUFFER(NOOFBYTES DIV 2 + 1, MEMORY, ADDR, WORDS, OK);
         IF OK THEN
         BEGIN
            BLEP@.MEMORY := MEMORY;
            INIT_OPERATIONS[I].FILE_ADR.FIRST_BYTE := 0L;
            INIT_OPERATIONS[I].FILE_ADR.BYTE_COUNT := LONG(NOOFBYTES);
            INIT_OPERATIONS[I].FILE_ADR.TRANSFERRED_BYTES := 0L;
   
            INIT_READ_BYTES(F, INIT_OPERATIONS[I].FILE_ADR, 
                              BLEP, OPREF, CC);
   
            IF CC = IO_OK THEN
            BEGIN
               INIT_OPERATIONS[I].OCCUPIED := TRUE;
               INIT_OPERATIONS[I].OPREF    := OPREF;
               INIT_OPERATIONS[I].KIND     := INIT_READ_KD;
               INIT_OPERATIONS[I].CRID     := CRID;
               INIT_OPERATIONS[I].ORIGINATOR_LINE := 0;
               INIT_OPERATIONS[I].BUFFER_NO:= BUFFERNO;
               INIT_OPERATIONS[I].EXPECTED_PATTERN := PATTERNNO;
               INIT_OPERATIONS[I].BYTELENGTH := NOOFBYTES;
               INIT_OPERATIONS[I].MEMORY := MEMORY;
               INIT_OPERATIONS[I].DUMP_AT_COMPLETION := 
                              DUMP_AT_COMPLETION = 1;
               FOUND := TRUE;
            END
            ELSE RELEASE_BUFFER(MEMORY, OK);
         END
         ELSE
         BEGIN
            WRITETEXT('FAILED TO ALLOCATE INIT_READ BUFFER (:0:)');
            WRITENL;
         END;
      END;
   UNTIL FOUND OR (I >= MAX_INIT_OPS);
END; " INT_INITREAD " «a5»