ViewPoint Manual
Sample Custom Status Server
ViewPoint Manual—426801-001
D-13
Custom Server Code
BEGIN
-------------------------------------------------------------------------------
--
-- Perform the processing necessary to perform the request contained in
-- 'RequestBuffer'. Formulate a reply in 'ReplyBuffer'.
--
-------------------------------------------------------------------------------
INT .EXT Request^Header ( Zvpt^Request^Header^Def ) = Request^Buffer;
INT .EXT Reply^Header  ( Zvpt^Reply^Header^Def )  = Reply^Buffer;
INT .EXT Sub^Request^Buffer := @Request^Buffer[Len^Wsz(Zvpt^Request^Header^Def)];
INT .EXT Sub^Reply^Buffer := @Reply^Buffer[Len^Wsz(Zvpt^Reply^Header^Def)];
INT Sub^Request^Len;
INT Sub^Reply^Len := 0;
INT    Request^Code := Request^Header.Z^Request^code;
INT Error := 0;
 Return^Error := 0;
 Return^Error^Detail := 0;
 Sub^Request^Len := Request^Len - Len^Bsz ( Zvpt^Request^Header^Def );
 Sub^Reply^Len := 0;
 IF Sub^Request^Len < 0 THEN Return^Error := ( Zerr^Stat^Collect^Request )
 ELSE
 BEGIN
 CASE Request^code OF
 BEGIN
  Z^Get^Version^Code -> ;
  Z^Scan^Item^Code  -> Return^Error := Scan^Item    ( Sub^Request^Buffer,
                        Sub^Request^Len,
                        Sub^Reply^Buffer,
                        Sub^Reply^Len);
  Z^Next^Item^Code  -> Return^Error := Scan^Next^Item ( Sub^Request^Buffer,
                        Sub^Request^Len,
                        Sub^Reply^Buffer,
                        Sub^Reply^Len );
  Z^Check^Item^Code  -> Return^Error := Check^Item   ( Sub^Request^Buffer,
                        Sub^Request^Len,
                        Sub^Reply^Buffer,
                        Sub^Reply^Len );
  Z^Sample^Item^Code -> Return^Error := Sample^Item   ( Sub^Request^Buffer,
                        Sub^Request^Len,
                        Sub^Reply^Buffer,
                        Sub^Reply^Len );
  OTHERWISE     -> Return^Error := Zerr^Stat^Collect^Request;
 END; -- case.
 END;  -- Begin case.
 IF Return^Error = 0 THEN
  Reply^Header.Z^Ipc^Hdr.Z^Pw^Reply^Code := 0
 ELSE
 BEGIN
  Reply^Header.Z^Ipc^Hdr.Z^Ipc^Retn^Code := Return^Error;
 Reply^Header.Z^Ipc^Hdr.Z^Ipc^Retn^Code^Detail := Return^Error^Detail;
  Reply^Header.Z^Ipc^Hdr.Z^Pw^Reply^Code := 3;
 END; -- error caught.
 Reply^Header.Z^Ipc^Hdr.Z^Version^Code ':=' [Current^Version];
 Reply^Len := Sub^Reply^Len + Len^Bsz ( Reply^Header );
END; ! Server^Perform^Request.
?PAGE "READ RECEIVE MESSAGE"
PROC Read^Receive^Message ( Buffer, Actual^Length, Status ) VARIABLE;
INT .Buffer;     ! OUTPUT: The message is returned here.
            !    The buffer should be at least
         !   'Max^Request + 1' bytes long.
INT .Actual^Length;   ! OUTPUT: Actual length of message returned.
INT .Status;     ! OUTPUT: Type of message read. One of:
            !     Recv^User^Msg = 0
            !     Recv^System^Msg^From^User = 1
            !     Recv^System^Msg^From^System = 2
            !     Recv^End^Of^File = 3.
BEGIN
-------------------------------------------------------------------------------
--
-- This procedure will read one message from $RECEIVE. It will then
-- verify if it is a system message and if so will check for OPEN messages
-- and CLOSE messages to update the Num^Requesters counter. If this is any
-- other system message we do not do anything with them. If it is a user
-- message we will set the Status variable to 1.










