SPI Programming Manual (G06.24+, H06.03+, J06.03+)

SPI Programming Examples
SPI Programming Manual427506-006
E-84
Example E-19: Routines for TAL Requesters and
Servers
!
! If debug^flag is set, then bring up the server in DEBUG.
!
l^process^flags.<15> := debug^flag;
l^priority.<0> := debug^flag;
process^id ':=' " " & process^id [0] FOR $OCCURS (process^id) - 1;
CALL newprocess (server^name, l^priority, !memory pages!, !processor!,
process^id, file^error, process^name, !home term!,
l^process^flags);
IF file^error THEN
BEGIN
CALL report^newprocess^error (server^name, file^error);
RETURN;
END;
CALL open^server;
END; ! -- of PROC restart^server;
?PAGE "write^read^server"
!==========================================================================!
! Proc : write^read^server !
! Function : This procedure will write a message to the server and reason !
! the reply. It handles any file errors on the server’s file. !
!==========================================================================!
PROC write^read^server;
BEGIN
INT
l^await^done,
l^op^done,
l^recoverable^err;
l^op^done := false;
DO
BEGIN
CALL writereadx (srvr^file^num, req^buffer, max^bufsize,
$OCCURS (req^buffer), read^count);
IF <> THEN CALL get^file^error (srvr^file^num);
l^await^done := false;
DO
BEGIN
file^num := -1; ! Don’t Cancel
CALL awaitiox (file^num, !buffer!, read^count, !tag!, time^to^wait);
IF < THEN
BEGIN
CALL fileinfo (file^num, file^error);
IF file^error = 40 THEN ! TIMEOUT Error
BEGIN
sline ':=' "Waiting for the Server" -> @sp;
CALL writex (term, sline, @sp '-' @sline);
IF <> THEN CALL get^file^error (term);
END ELSE ! IF file^error = 40 ELSE
Example E-19. TAL File: SETRUTIL Supporting Code (page3of4)