GDSX Manual
LINE^HANDLER Example, Design
Extended General Device Support (GDSX) Manual–134303
7-18
LINE^HANDLER Procedure
threads. When the ^WRITE completes, the IOCB is removed from the queue by 
incrementing the oldest index. 
Cancel^ITC Procedure
Example 7-6 shows the code for the CANCEL^ITC subprocedure. Most of this 
procedure is described under “E^CAN” on page 7-11. 
Before this procedure is called, TSCODE finds the IOCB associated with the canceled 
request and puts the IOCB in a canceled state by setting iocb.state equal to 
IO^CANCELED.  When the LINE^HANDLER task scans the queue of IOCBs, a list 
item marked for cancellation is set to 0 to indicate the cancellation. In the 
WT^RD^TO^LINE SUBPROC, list items equal to 0 are skipped when the queue is 
scanned for the next IOCB address for a ^WRITEREAD.  
Caution. Although TSCODE handles deallocation of IOCBs for intertask communication 
completed with NOTIFY^IO^COMPLETION, it will not deallocate LINE IOCBs. If the LINE 
IOCB is not deallocated, eventually the GDSX process runs out of IOCBs. The default for the 
maximum number of IOCBs is 128.
Example 7-6. CANCEL^ITC Subprocedure
SUBPROC CANCEL^ITC;
 BEGIN
 INT X;
 INT .EXT Q^IOCB(IOCB^TEMPLATE); 
 IF (OLDEST = NEWEST) THEN CALL DEBUG; ! SANITY CHECK
 X := OLDEST;
 WHILE (X <> NEWEST) DO ! SCAN LIST LOOKING FOR CANCELED IOCBS
 BEGIN
 @Q^IOCB := WT^RD^IOCB^LIST[X];
 IF (Q^IOCB.STATE = IO^CANCELED) THEN ! (NOTE SPELLING)
 BEGIN
 WT^RD^IOCB^LIST[X] := 0D; ! MARK AS “CANCELED“ 
 CALL NOTIFY^IO^COMPLETIONX(Q^IOCB);
 END;
 CALL INCR^INDEX(X);
 END;
 IF (WT^RD^IOCB^LIST[OLDEST] = 0D) THEN 
 BEGIN ! THE WT^RD OUTSTANDING TO LINE WAS CANCELED
 CALL ^CANCEL(LINE^FILE^NUM);
 IF <> THEN CALL DEBUG;
 MSG^BUF ':=' [“ D^H TASK STOPPED "];
 CALL ^WRITEX(LINE^FILE^NUM,MSG^BUF,18);
 IF <> THEN CALL 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 DEBUG; 
 CALL DEALLOCATEIOCB(LINE^IOCB);
 CALL WT^RD^TO^LINE; ! ADVANCE TO NEXT QUEUED REQUEST (IF ANY)
 END;
 END; ! SUBPROC










