Using NS3000/iX Network Services (36920-90008)

Chapter 7 155
Remote Process Management
RPM Program 1
else
writeln('IpcErrMsg result is ', newresult:1);
terminate;
end;
procedure check ( result : integer);
{error procedure}
begin
if result << >> 0 then
leave (result); {failed}
end;
{error handling procedure}
{The following procedure receives one message that was sent via an ipcsend call.
It assumes that the length (number of bytes) of the message was sent as the
first 2 bytes of data and that the length value does not include those 2 bytes.}
procedure receive ( connection : integer;
var rbfr : datatype;
var rlen : smallint;
var errorcode : integer ) ;
const
head_len = 2;
type
length_buffer_type = packed array[1..2] of char;
header_len_type = record case integer of
0: ( word: smallint );
1: ( byte: length_buffer_type);
end;
var i, j : integer;
dlen : integer;
header_len : header_len_type;
tempbfr : datatype;
@COMPUTERTXT = begin { procedure receive }
i:=0;
errorcode := 0;
while (i < head_len) and (errorcode = 0) do { get length of message }
begin
dlen := head_len - i;
ipcrecv ( connection, tempbfr, dlen, ,, errorcode );
if errorcode = 0
then strmove(dlen, tempbfr, 1, header_len.byte, i+1);
i := i + dlen;
end;
if errorcode = 0 then
begin
rlen := header_len.word;
i := 0;
while (i < rlen) and (errorcode = 0) do { get the message }
begin
dlen := header_len.word - i;
ipcrecv
( connection, tempbfr, dlen, , , errorcode );
if errorcode = 0
then strmove(dlen, tempbfr, 1, rbfr, i+1);
i := i + dlen;
end;
end