GDSX Manual
USKELEX and USKELEXC Listings
Extended General Device Support (GDSX) Manual–134303
B-21
USKELEXC Listing
IF <> THEN CALL PROCESS_DEBUG_;
MSG^BUF ':=' [" D^H TASK STOPPED "];
CALL ^WRITEX(LINE^FILE^NUM,MSG^BUF,18);
IF <> THEN CALL PROCESS_DEBUG_;
CALL WAIT^EVENT(DISP^IOC,-1D); ! WAIT FOR
! ^WRITE TO COMPLETE
@LINE^IOCB := ^LISTEN(0,LINE^FILE^NUM,0);
IF @LINE^IOCB = 0D THEN CALL PROCESS_DEBUG_;
CALL DEALLOCATEIOCB(LINE^IOCB);
CALL WT^RD^TO^LINE; ! ADVANCE TO NEXT QUEUED REQUEST (IF ANY)
END;
END; ! SUBPROC
?PAGE
SUBPROC PROCESS^DH^REQ;
BEGIN
@DH^IOCB := ^LISTEN(0,0,1); ! PICK UP REQUEST FROM D^H
IF @DH^IOCB = 0D THEN RETURN;
CASE DH^IOCB.OPTYPE OF
BEGIN
WT^RD^OP -> ! PUT A NEW WT^RD REQUEST ON THE LIST
BEGIN
WT^RD^IOCB^LIST[NEWEST] := @DH^IOCB;
IF (OLDEST = NEWEST) THEN ! NO OTHER
! WT^RD IS OUTSTANDING
BEGIN
CALL INCR^INDEX(NEWEST);
CALL WT^RD^TO^LINE;
END
ELSE
CALL INCR^INDEX(NEWEST);
END;
WT^OP ->
BEGIN
@WT^IOCB := @DH^IOCB; ! SAVE IOCB FROM WRITE OP
! (REQUESTER DESIGN ENSURES THAT NO MORE THAN
! ONE WILL BE OUTSTANDING)
CALL WT^TO^LINE;
END;
OTHERWISE ->
CALL PROCESS_DEBUG_;
END; ! CASE
END; ! SUBPROC
?PAGE
SUBPROC LINE^IO^CMPLT;
BEGIN
INT .EXT DH^BUF;
INT .EXT LH^BUF;
@LINE^IOCB := ^LISTEN(0,LINE^FILE^NUM,0);
IF @LINE^IOCB = 0D THEN RETURN;
CASE LINE^IOCB.OPTYPE OF
BEGIN
WT^OP -> ! THE SINGLE OUTSTANDING WRITE OP IS FINISHED
BEGIN
WT^IOCB.ERR := LINE^IOCB.ERR; ! PASS I/O
! PROCESS FS ERR BACK