|
|
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: 3904 (0xf40)
Types: TextFile
Names: »CHECK_INIT_OPS.S«
└─⟦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«
«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 "