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

⟦af98a7a44⟧ TextFile

    Length: 1812 (0x714)
    Types: TextFile
    Names: »CANCEL.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⟧ »CANCEL.S« 

TextFile

«ff»
"CANCEL.S    "
"----------------"
«ff»
PROCEDURE LIST_CANCELLED(OP : INIT_OPERATION_TYPE);
BEGIN
   WRITETEXT('OPERATION (:0:)');
   WRITEHEX (OP.OPREF);
   WRITETEXT(' ON CRID (:0:)');
   WRITEHEX (OP.CRID);
   WRITETEXT(' CANCELLED.(:0:)');
   WRITENL;
END; " LIST_CANCELLED "

PROCEDURE INT_CANCEL(PC, SP : INTEGER;VAR CC : COMPLETION_CODE);
"**********************************************************************
  AUTHOR:           TLM
  DATE:             810421
***********************************************************************
  COMMENTS:
**********************************************************************"
CONST TDX_TIMEOUT = #607;
VAR   CRID        :  INTEGER;
      OPREF       :  OPERATION_REFERENCE;
      I           :  INTEGER;
BEGIN
   VM := CODE[PC + XVARMASK];
   GET_PARAMETER(VM, 1, PC, SP, CRID);
   GET_PARAMETER(VM, 2, PC, SP, OPREF);
   
   IF CRID <> 0 THEN
   BEGIN    "CANCEL ALL INITIATED READ OPS. ON THIS CRID"
      FOR I := 1 TO MAX_INIT_OPS DO
      BEGIN
         IF (INIT_OPERATIONS[I].OCCUPIED)
            AND
            (INIT_OPERATIONS[I].CRID = CRID)
            AND
            (INIT_OPERATIONS[I].KIND = INIT_READ_KD)
         THEN
         BEGIN
            CANCEL_OPERATION(INIT_OPERATIONS[I].OPREF, CC);
            LIST_CANCELLED(INIT_OPERATIONS[I]);
            INIT_OPERATIONS[I].OCCUPIED := FALSE;
         END;
      END
   END
   ELSE
   BEGIN
      CANCEL_OPERATION(OPREF, CC);
      FOR I := 1 TO MAX_INIT_OPS DO
      BEGIN
         IF INIT_OPERATIONS[I].OCCUPIED
            AND
            (INIT_OPERATIONS[I].OPREF = OPREF)
         THEN
         BEGIN
            LIST_CANCELLED(INIT_OPERATIONS[I]);
            INIT_OPERATIONS[I].OCCUPIED := FALSE;
         END;
      END;
   END;
   IF CC = TDX_TIMEOUT THEN CC := IO_OK;
END; " INT_CANCEL " «a5»