GDSX Manual
USKELEX and USKELEXC Listings
Extended General Device Support (GDSX) Manual–134303
B-22
USKELEXC Listing
CALL NOTIFY^IO^COMPLETIONX(WT^IOCB);
CALL INCR^INDEX(OLDEST);
! TAKE THIS WT^RD OFF THE LIST
IF (OLDEST <> NEWEST) THEN ! MORE WT^RDS PENDING
CALL WT^RD^TO^LINE;
END;
WT^RD^OP -> ! OLDEST WT^RD ON LIST IS FINISHED
BEGIN ! AND TEXT HAS BEEN READ AT THE PROMPT
@DH^IOCB := WT^RD^IOCB^LIST[OLDEST];
@DH^BUF := DH^IOCB.BUFADDRX;
@LH^BUF := LINE^IOCB.BUFADDRX;
IF (LINE^IOCB.ERR = 0) THEN
BEGIN ! NORMAL COMPLETION
DH^BUF ':=' LH^BUF FOR LINE^IOCB.IOCNT BYTES;
DH^IOCB.IOCNT := LINE^IOCB.IOCNT;
DH^IOCB.ERR := 0;
END
ELSE
BEGIN ! PASS I/O PROCESS FS ERR BACK TO APPL
DH^IOCB.IOCNT := 0;
DH^IOCB.ERR := LINE^IOCB.ERR;
END;
CALL NOTIFY^IO^COMPLETIONX(DH^IOCB);
END;
OTHERWISE ->
CALL PROCESS_DEBUG_;
END; ! CASE
CALL DEALLOCATEIOCB(LINE^IOCB); ! TSCODE ALLOCATED THIS IOCB.
END; ! SUBPROC
!===========================================================================
! Line^Handler Procedure MAIN ENTRY POINT begins here
!===========================================================================
CALL ^READUPDATEX(IN^QUEUE^FILE^NUM); ! GET INTERTASK MESSAGE
IF <> THEN CALL PROCESS_DEBUG_;
OLDEST := NEWEST := 0;
@MSG^BUF := GETEXTPOOL(10,1024); ! FROM EXTENDED BUFFER POOL
IF @MSG^BUF = 0D THEN CALL PROCESS_DEBUG_;
WHILE (-1) DO
BEGIN
EVT := WAIT^EVENT((DISP^ITC+DISP^IOC+DISP^CAN+DISP^STOP),-1D);
CASE (EVT) OF
BEGIN
E^ITC -> ! INTERTASK MESSAGE RECEIVED FROM A D^H
BEGIN
CALL PROCESS^DH^REQ;
CALL ^READUPDATEX(IN^QUEUE^FILE^NUM); ! GET NEXT MESSAGE
END;
E^IOC -> ! LINE I/O COMPLETED
CALL LINE^IO^CMPLT;
E^CAN -> ! ITC OPERATION CANCELED
CALL CANCEL^ITC;
CALL ^READUPDATEX(IN^QUEUE^FILE^NUM); ! GET NEXT MESSAGE