GDSX Manual

USKELEX and USKELEXC Listings
Extended General Device Support (GDSX) Manual134303
B-7
USKELEX Listing
?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 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
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];