MACHINE              Rename_Client(TOK,inbufsize,outbufsize)

SEES                 String_TYPE, Bool_TYPE

VARIABLES            in,inptr,outptr

INVARIANT
            in : 0..inbufsize &
            inptr : 0..in &
            outptr : 0..outbufsize
   
INITIALISATION       in,inptr,outptr := 0,0,0

OPERATIONS


  /*** operation to initialise ipaddress,port and reset pointers ***/

  Rename_INIT(ipaddress : STRING & port : NAT) =
  BEGIN in,inptr,outptr := 0,0,0 END;



  /*** operations on the socket ***/

  rep <-- Rename_CONNECT = BEGIN rep :: BOOL END;

  rep <-- Rename_WRITE =
  CHOICE
    rep := TRUE || outptr := 0
  OR
    rep := FALSE
  END;

  rep,pp <-- Rename_READ  = 
  ANY bufsize WHERE  bufsize : 0..inbufsize THEN
    CHOICE
      rep := TRUE || pp := bufsize || in := bufsize || inptr := 0
    OR
      rep := FALSE || pp := 0
    END
  END;

  rep <-- Rename_CLOSE = BEGIN rep :: BOOL END;



  /*** operations to read from the input buffer ***/

  tok <-- Rename_GET_TOK(toksize : 1..4 ) =
  IF inptr+toksize <= in THEN
    tok :: TOK || inptr := inptr + toksize
  ELSE
    tok :: TOK
  END;

  ss <-- Rename_GET_STR =
  IF inptr + 3 <= in THEN
    ANY str, newptr  WHERE
      str : STRING &  newptr = inptr + size(str) + 3
    THEN
      ss := str || inptr := newptr
    END
  ELSE
    ss :: STRING
  END;

  rep <-- Rename_GET_FIL(filename : STRING) =
  CHOICE
    ANY newptr  WHERE newptr : 0..in & newptr > inptr THEN
      inptr := newptr ||
      rep := TRUE
    END
  OR
    rep := FALSE
  END;



  /*** operations to to write the output buffer ***/

  Rename_PUT_TOK(tok : TOK & toksize : 1..4 ) =
  IF outptr+toksize <= outbufsize THEN
    outptr := outptr+toksize
  END;

  Rename_PUT_STR(ss:STRING) =
  IF outptr+size(ss)+3 <= outbufsize THEN
    outptr := outptr+size(ss)+3 
  END;



  /*** operations to get and set the input buffer pointer ***/

  Rename_SET_IN_PTR(ptr : NAT) = PRE ptr <= inptr THEN inptr := ptr END;

  ptr <-- Rename_GET_IN_PTR = BEGIN ptr := inptr END;



  /*** operations to get and set the output buffer pointer ***/

  Rename_SET_OUT_PTR(ptr : NAT) =  PRE ptr <= outptr THEN outptr := ptr END;

  ptr <-- Rename_GET_OUT_PTR = BEGIN ptr := outptr END


END


Analysed Constructs

Hypertext Constructs Page

On-line Help

Help Contents Page
Index

Document Last Updated: Wed Aug 25 17:35:45 1999

B-Toolkit Beta 4.55