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];
}...