|
|
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 - metrics - download
Length: 2950 (0xb86)
Types: TextFile
Names: »INITAPPEND.S«
└─⟦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«
«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»