RapunzelP2200V3ServerImpl.Mesa
Copyright (C) 1986 by Xerox Corporation. All rights reserved.
Generated by Willie-Sue.pa at March 18, 1987 11:26:20 am PST
using Sirocco [2.0] of January 31, 1987 1:52:42 am PST
DIRECTORY
CrRPC,
RapunzelP2200V3;
RapunzelP2200V3ServerImpl:
CEDAR
PROGRAM
IMPORTS CrRPC, RapunzelP2200V3 ~ {
OPEN RapunzelP2200V3;
PokeSeqShortCaller:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, beginReturn: CrRPC.BeginReturnProc] ~ {
address: CARD32;
valueSeq: SeqShort;
{
address ← CrRPC.GetCard32[s];
};
{
valueSeq ← UProc19[h, s];
};
[] ← PokeSeqShort[h, address, valueSeq];
beginReturn[h];
};
PokeLongCaller:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, beginReturn: CrRPC.BeginReturnProc] ~ {
address: CARD32;
value: CARD32;
{
address ← CrRPC.GetCard32[s];
};
{
value ← CrRPC.GetCard32[s];
};
[] ← PokeLong[h, address, value];
beginReturn[h];
};
SetShftAddrsCaller:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, beginReturn: CrRPC.BeginReturnProc] ~ {
shftA: CARD32;
shftB: CARD32;
{
shftA ← CrRPC.GetCard32[s];
};
{
shftB ← CrRPC.GetCard32[s];
};
[] ← SetShftAddrs[h, shftA, shftB];
beginReturn[h];
};
DoCmdsCaller:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, beginReturn: CrRPC.BeginReturnProc] ~ {
cmdSeq: SeqCmd;
resultSeq: SeqResult;
{
cmdSeq ← UProc20[h, s];
};
[resultSeq] ← DoCmds[h, cmdSeq];
beginReturn[h];
{
MProc21[h, s, resultSeq];
};
};
PeekSeqLongCaller:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, beginReturn: CrRPC.BeginReturnProc] ~ {
address: CARD32;
count: CARD16;
resultSeq: SeqLong;
{
address ← CrRPC.GetCard32[s];
};
{
count ← CrRPC.GetCard16[s];
};
[resultSeq] ← PeekSeqLong[h, address, count];
beginReturn[h];
{
MProc22[h, s, resultSeq];
};
};
PeekLongCaller:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, beginReturn: CrRPC.BeginReturnProc] ~ {
address: CARD32;
result: CARD32;
{
address ← CrRPC.GetCard32[s];
};
[result] ← PeekLong[h, address];
beginReturn[h];
{
CrRPC.PutCard32[s, result];
};
};
PeekSeqShortCaller:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, beginReturn: CrRPC.BeginReturnProc] ~ {
address: CARD32;
count: CARD16;
resultSeq: SeqShort;
{
address ← CrRPC.GetCard32[s];
};
{
count ← CrRPC.GetCard16[s];
};
[resultSeq] ← PeekSeqShort[h, address, count];
beginReturn[h];
{
MProc23[h, s, resultSeq];
};
};
PeekShortCaller:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, beginReturn: CrRPC.BeginReturnProc] ~ {
address: CARD32;
result: CARD16;
{
address ← CrRPC.GetCard32[s];
};
[result] ← PeekShort[h, address];
beginReturn[h];
{
CrRPC.PutCard16[s, result];
};
};
PokeShortCaller:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, beginReturn: CrRPC.BeginReturnProc] ~ {
address: CARD32;
value: CARD16;
{
address ← CrRPC.GetCard32[s];
};
{
value ← CrRPC.GetCard16[s];
};
[] ← PokeShort[h, address, value];
beginReturn[h];
};
Server: CrRPC.ServerProc ~ {
[h: Handle, s: STREAM, pgm: CARD32, pgmVersion: CARD16, proc: CARD16, beginReturn: BeginReturnProc, beginError: BeginErrorProc, beginReject: BeginRejectProc]
ENABLE {
RapunzelP2200V3.Fault => {
-- (0 )
beginError[h, 0 ];
CrRPC.PutCard16[s, ORD[code]];
CrRPC.PutCard32[s, address];
GOTO Finished;
};
};
IF (pgmVersion # 3)
THEN {
beginReject[h, CrRPC.noSuchVersion];
CrRPC.PutCard16[s, 3]; --low
CrRPC.PutCard16[s, 3]; --high
RETURN
};
SELECT proc
FROM
6 => PokeSeqShortCaller[h, s, beginReturn];
8 => PokeLongCaller[h, s, beginReturn];
10 => SetShftAddrsCaller[h, s, beginReturn];
9 => DoCmdsCaller[h, s, beginReturn];
5 => PeekSeqLongCaller[h, s, beginReturn];
7 => PeekLongCaller[h, s, beginReturn];
4 => PeekSeqShortCaller[h, s, beginReturn];
1 => PeekShortCaller[h, s, beginReturn];
3 => PokeShortCaller[h, s, beginReturn];
ENDCASE => {
beginReject[h, CrRPC.noSuchProcedure];
};
EXITS
Finished => { NULL };
};
Unmarshal / Marshal Procs --
UProc19:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM]
RETURNS [res: SeqShort] ~ {
{
length25: CARDINAL ~ CrRPC.GetCard16[s];
res ← NEW[SeqShortObject[length25]];
FOR i24:
CARDINAL
IN [0..length25)
DO
res.body[i24] ← CrRPC.GetCard16[s];
ENDLOOP;
};
};
MProc23:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, val: SeqShort] ~ {
CrRPC.PutCard16[s, val.length];
FOR i26:
CARDINAL
IN [0..val.length)
DO
CrRPC.PutCard16[s, val.body[i26]];
ENDLOOP;
};
UProc20:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM]
RETURNS [res: SeqCmd] ~ {
{
length28: CARDINAL ~ CrRPC.GetCard16[s];
res ← NEW[SeqCmdObject[length28]];
FOR i27:
CARDINAL
IN [0..length28)
DO
res.body[i27] ← UProc29[h, s];
ENDLOOP;
};
};
UProc29:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM]
RETURNS [res: Cmd] ~ {
{
tag30: OpCode ~ VAL[CrRPC.GetCard16[s]];
SELECT tag30
FROM
peekShort => {
temp31: PeekShortCmd;
temp31.address ← CrRPC.GetCard32[s];
res ← NEW[CmdObject.peekShort ← [peekShort[temp31]]] };
pokeShort => {
temp31: PokeShortCmd;
temp31.address ← CrRPC.GetCard32[s];
temp31.value ← CrRPC.GetCard16[s];
res ← NEW[CmdObject.pokeShort ← [pokeShort[temp31]]] };
pokeLong => {
temp31: PokeLongCmd;
temp31.address ← CrRPC.GetCard32[s];
temp31.value ← CrRPC.GetCard32[s];
res ← NEW[CmdObject.pokeLong ← [pokeLong[temp31]]] };
shftRead => {
temp31: ShftReadCmd;
temp31.address ← CrRPC.GetCard32[s];
temp31.numRepeats ← CrRPC.GetCard16[s];
res ← NEW[CmdObject.shftRead ← [shftRead[temp31]]] };
shftWrite => {
temp31: ShftWriteCmd;
temp31.address ← CrRPC.GetCard32[s];
temp31.numRepeats ← CrRPC.GetCard16[s];
res ← NEW[CmdObject.shftWrite ← [shftWrite[temp31]]] };
returnLength => {
temp31: ReturnLengthCmd;
temp31.returnLength ← CrRPC.GetCard16[s];
res ← NEW[CmdObject.returnLength ← [returnLength[temp31]]] };
ENDCASE => ERROR;
};
};
MProc22:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, val: SeqLong] ~ {
CrRPC.PutCard16[s, val.length];
FOR i32:
CARDINAL
IN [0..val.length)
DO
CrRPC.PutCard32[s, val.body[i32]];
ENDLOOP;
};
MProc21:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, val: SeqResult] ~ {
CrRPC.PutCard16[s, val.length];
FOR i33:
CARDINAL
IN [0..val.length)
DO
MProc34[h, s, val.body[i33]];
ENDLOOP;
};
MProc34:
PROC [h: CrRPC.Handle, s: CrRPC.
STREAM, val: Result] ~ {
CrRPC.PutCard16[s, ORD[val.type]];
WITH val
SELECT
FROM
it:
REF ResultObject.peekShort => {
CrRPC.PutCard16[s, it^.peekShort.value];
};
it:
REF ResultObject.pokeShort => {
NULL; -- RECORD [] --
};
it:
REF ResultObject.pokeLong => {
NULL; -- RECORD [] --
};
it:
REF ResultObject.shftRead => {
CrRPC.PutCard16[s, it^.shftRead.numRepeats];
};
it:
REF ResultObject.shftWrite => {
CrRPC.PutCard16[s, it^.shftWrite.numRepeats];
};
it:
REF ResultObject.returnLength => {
NULL; -- RECORD [] --
};
ENDCASE;
};
CrRPC.RegisterServerProc[pgm~2200, serverProc~Server, pgmVersion~3];
CrRPC.EnsureListener[class~$SPP];
}...