ViewPoint Manual
Sample Custom Status Server
ViewPoint Manual—426801-001
D-14
Custom Server Code
--
-------------------------------------------------------------------------------
INT Error := 0;
LITERAL System^Message = 6;
 CALL READUPDATE ( Rcv^Fnum, Buffer, Zvpt^Ipc^Len, Actual^Length );
 IF > THEN
 BEGIN
 CALL Fileinfo ( Rcv^Fnum, Error );
  IF Error = System^Message
 THEN
 BEGIN
  CASE $ABS ( Buffer[0] ) - 30 OF
  BEGIN
 !0! Num^Requesters := Num^Requesters + 1; ! -30 Open Msg from Requester
 !1! Num^Requesters := Num^Requesters - 1; ! -31 Close Msg from Requester
   OTHERWISE;
  END; !End of Case
 END    !End of System^Message
 END    !End of IF > THEN
 ELSE IF Error <> 0 THEN CALL ABEND;
 IF Error = 0 THEN Status := Recv^User^Msg
 ELSE IF ( Error = 6 AND Num^Requesters = 0 ) THEN Status:= Recv^End^of^file
 ELSE IF ( Error = 6 AND Num^Requesters > 0 )
   THEN Status := Recv^System^Msg^From^User;
END; ! PROC Read^Receive^Message
?PAGE "REPLY^RECEIVE^MESSAGE"
PROC Reply^Receive^Message ( Buffer, Length ) VARIABLE;
INT .Buffer;  ! INPUT,OPTIONAL: Text of the reply. Omit
        !        only if 'Length' is zero.
INT  Length;    ! INPUT,OPTIONAL:  Length of the reply, in
        !        bytes. Default is zero.
BEGIN
-------------------------------------------------------------------------------!
--
-- This procedure will reply to a $RECEIVE message that was read by    !
-- 'Read^Receive^Message'.                      !
--
-------------------------------------------------------------------------------!
 IF NOT $PARAM ( Buffer ) THEN @Buffer := 0;
 IF NOT $PARAM ( Length ) THEN Length := 0;
 CALL REPLY ( Buffer, Length );
END; ! PROC Reply^Receive^Message
?PAGE "SERVER PROCESSING"
PROC Server^Processing;
BEGIN
-------------------------------------------------------------------------------
--
-- This routine is called after all initialization is complete.
-- It will execute the server's main processing loop.
--
-- The implementation of this routine is appropriate for servers
-- that are single-threaded and are never interested in processing
-- system messages. For each user request, 'Server^PerformRequest'
-- is called to execute the request.
--
-------------------------------------------------------------------------------
INT .Request^Buf [0:Zvpt^Ipc^Len]; ! Request buffer
INT .Reply^Buf [0:Zvpt^Ipc^Len]; ! Reply buffer
INT  Request^Len;       ! Length of request
INT  Reply^Len;        ! Length of reply
INT  Status;          ! Status parameters of Read^Receive^Message
 WHILE 1 DO
 BEGIN
  CALL Read^Receive^Message ( Request^Buf, Request^Len, Status );
  IF Status = Recv^User^Msg THEN
    CALL Server^Perform^Request ( Request^Buf, Request^Len,
                Reply^Buf,  Reply^Len )
  ELSE IF Status = Recv^System^Msg^From^User THEN Reply^Len := 0
  ELSE IF Status = Recv^End^Of^File THEN RETURN;
 CALL Reply^Receive^Message ( Reply^Buf, Reply^Len );
 END;
END; ! PROC Server^Processing
?PAGE "STATUS SERVER PRODUCT VERSION PROCEDURE T2001C00^03FEB88"
PROC T2001C00^03FEB88;










