GDSX Manual
USKELEX and USKELEXC Listings
Extended General Device Support (GDSX) Manual–134303
B-3
USKELEX Listing
BEGIN ! THIS PROCEDURE PERFORMS DATASTREAM
INT I; ! CONVERSION, CHANGING LOWERCASE
STRING LEFT^HALF; ! CHARACTERS TO UPPERCASE. IT IS
! CALLED ONLY FOR OUTBOUND (TO IOP)
@S^TERM^BUF := @TERM^BUF; ! REQUESTS.
@S^RCV^BUF := @RCV^BUF;
FOR I := 0 TO (RQSTR^WT^CT - 1) DO
BEGIN
LEFT^HALF := S^RCV^BUF[I].<8:11>;
IF (LEFT^HALF = 6 OR LEFT^HALF = 7) THEN ! IF LEFT HALF OF BYTE
BEGIN ! IS 6 OR 7 (BASE 10),
S^TERM^BUF[I] := S^RCV^BUF[I] LAND %337; ! CHANGE BIT SO LEFT
END ! HALF OF BYTE IS 4 OR 5,
ELSE S^TERM^BUF[I] := S^RCV^BUF[I]; ! ELSE LEAVE IT ALONE.
END; ! FOR
END; ! SUBPROC
?PAGE
!===========================================================================
! Device^Handler Procedure MAIN ENTRY POINT begins here
!===========================================================================
WHILE (1) DO
BEGIN
@RCV^BUF := GETEXTPOOL(10,BUF^SIZE); ! FROM EXT BUFFER POOL
IF @RCV^BUF = 0D THEN CALL DEBUG; ! (BYTE ADDRESSABLE)
@E^RCV^BUF := @RCV^BUF;
TAKE^OVER := FALSE;
CALL ^READUPDATEX(DOLR^RCV,RCV^BUF,BUF^SIZE);
IF <> THEN CALL DEBUG;
CALL ^AWAITIOX(DOLR^RCV,@RCV^BUF,RQSTR^WT^CT);
IF = THEN ! (CCE) NORMAL COMPLETION
CALL ^RECEIVEINFO(,,,,RQSTR^RD^CT,RQST^TYPE)
ELSE IF > THEN ! (CCG) SYSTEM MSG RECEIVED
BEGIN
IF RCV^BUF[0] = -32 THEN
RQST^TYPE := CTRL
ELSE IF RCV^BUF[0] = -33 THEN
RQST^TYPE := SET^MD
ELSE
CALL DEBUG;
END
ELSE
CALL DEBUG; ! (CCL) ERROR
IF ^CHECKPOINT(2) THEN
BEGIN
TAKE^OVER := TRUE;
CALL ^RECLAIMBUFFER(@E^RCV^BUF, 10);
IF <> THEN CALL DEBUG;
@RCV^BUF := @E^RCV^BUF;
END;
@TERM^BUF := GETEXTPOOL(10,BUF^SIZE);
IF @TERM^BUF = 0D THEN CALL DEBUG;
CASE RQST^TYPE OF
BEGIN
WT^RD -> ! WRITEREAD
BEGIN
IF (NOT TAKE^OVER) THEN
BEGIN