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

⟦1677b6c46⟧ TextFile

    Length: 2950 (0xb86)
    Types: TextFile
    Names: »INITAPPEND.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⟧ »INITAPPEND.S« 

TextFile

«ff»
"INITAPPEND.S"
"----------------"

PROCEDURE INT_INITAPPEND(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;
      MEMORY             : MEMORY_PARM;
      ADDR               : WORD_ADDRESS;
      WORDS              : INTEGER;
      OK                 : BOOLEAN;
      LOCAL_ADR,
      EXTERNAL_ADR        : BYTE_ADDRESS;
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);

   GENERATE_DATA(PC, NOOFBYTES, PATTERNNO, BUFFERNO);

   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;
            GET_ABS_ADDR(BUFFERS[4].BUFFER[0], 
                         LOCAL_ADR.WORD_ADDR);
            GET_BUFFER_ADDR(MEMORY,
                            EXTERNAL_ADR.WORD_ADDR,
                            WORDS, OK);
            LOCAL_ADR.BYTE_DISPLACEMENT := 0;
            EXTERNAL_ADR.BYTE_DISPLACEMENT := 0;
            COPY(LOCAL_ADR, EXTERNAL_ADR, NOOFBYTES);

            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_APPEND_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_APPEND_KD;
               INIT_OPERATIONS[I].CRID     := CRID;
               INIT_OPERATIONS[I].ORIGINATOR_LINE := 0;
               INIT_OPERATIONS[I].BUFFER_NO:= BUFFERNO;
               INIT_OPERATIONS[I].BYTELENGTH := NOOFBYTES;
               INIT_OPERATIONS[I].MEMORY := MEMORY;
               FOUND := TRUE;
            END
            ELSE RELEASE_BUFFER(MEMORY, OK);
         END
         ELSE
         BEGIN
            WRITETEXT('FAILED TO ALLOCATE INIT_APPEND BUFFER (:0:)');
            WRITENL;
         END;
      END;
   UNTIL FOUND OR (I >= MAX_INIT_OPS);
END; " INT_INITAPPEND " «a5»