Guardian Programmer's Guide

Table Of Contents
Writing a Terminal Simulator
Guardian Programmer’s Guide 421922-014
24 - 8
Processing I/O Requests
.
.
CALL READUPDATEX(RECV^NUM,SBUFFER,RCOUNT,BYTES^READ);
CALL FILE_GETINFO_(RECV^NUM,ERROR);
CALL FILE_GETRECEIVEINFO_(RECEIVE^INFO);
IF ERROR = 6 THEN !system message
BEGIN
.
.
END;
IF ERROR = 0 THEN !user message
BEGIN
PROCESS^HANDLE ':=' RECEIVE^INFO[6] FOR 10;
MESSAGE^TAG := RECEIVE^INFO[2];
BYTES^TO^RETURN := RECEIVE^INFO[1];
IO^TYPE := RECEIVE^INFO[0];
CASE OF IO^TYPE
BEGIN
! I/O is a WRITE; send message on to the terminal and
! reply to requester:
1 -> BEGIN
ERROR^RETURN := 0;
WCOUNT := BYTES^READ;
CALL WRITEX(TERM^NUM,SBUFFER,WCOUNT);
IF <> THEN
CALL FILE_GETINFO_(TERM^NUM,ERROR^RETURN);
CALL REPLYX(!buffer!,
!write^count!,
!count^written!,
!message^tag!,
ERROR^RETURN);
END;
! I/O is a READ; read message from terminal and reply to
! requester process:
2 -> BEGIN
ERROR^RETURN := 0;
RCOUNT := BYTES^TO^RETURN;
CALL READX(TERM^NUM,SBUFFER,RCOUNT,BYTES^READ);
IF <> THEN
CALL FILE_GETINFO_(TERM^NUM,ERROR^RETURN);
CALL REPLYX(SBUFFER,
BYTES^READ,
!count^written!,
!message^tag!,
ERROR^RETURN);
END;