;Alto->8086 small-c compiler rev 2.0
C←CODE SEGMENT
$INCLUDE(8086LIB.D)
$INCLUDE(nrpcagent.DEC)
ASSUME CS:C←CODE, DS:C←DATA
; #include <Env.h>
; extern int CallFailed;
; extern int ImportFailed;
; extern int *StartBonsai();
; extern CallBonsai();
; extern CleanupCall();
; extern AllocWordsFromPkt();
; extern StringToPkt();
; extern Block();
; extern Marshall();
; extern MoveBlock();
; extern Swab();
; extern Zero();
; extern CONT();
; extern ENABLE();
; extern struct ShortSTRING *CStringToString();
; extern struct ImportInstance *ImportInterface();
; extern struct VersionRange *matchAllVersions;
; static struct ImportInstance agentInstance[1];
; static struct ShortSTRING *agentRope;
; int /* really Authentication */
; AgentAuthenticate(nonceId, caller, callee, lvAuthenticator)
←AgentAuthenticate:
; int nonceId, caller, callee, *lvAuthenticator;
PUSH BP
MOV BP,SP
PUSH CX
PUSH BX
; {
; struct Seal sl;
; struct Seal1 csr;
; int *ap, *sp;
; int authentication;
; if (ENABLE(CallFailed, &CONT, &sl)) return (0);
ADD SP,0FFF0X
MOV BX,←CallFailed
PUSH BX
;&←sl
LEA BX,[BP-8]
MOV CX,OFFSET ←CONT
CALL ←ENABLE
POP DX
OR BX,BX
JZ X1
XOR BX,BX
MOV SP,BP
POP BP
RET;
X1:
; sp = ap = StartBonsai(agentInstance, &csr);
;&←csr
LEA BX,[BP-14]
LEA CX,←agentInstance
CALL ←StartBonsai
; ←ap ← BX
MOV [BP-16],BX
; ←sp ← BX
MOV [BP-18],BX
; *ap++ = Swab(doAuthenticate); /* procedure index */
ADD WORD PTR [BP-16],2
; BX ← ←ap
MOV BX,[BP-16]
PUSH BX
MOV BX,4
CALL ←Swab
MOV CX,BX
POP BX
MOV [BX-2],CX
; if (nonceId) Marshall(true, ap, nonceId, 2);
; BX ← ←nonceId
MOV BX,[BP+6]
OR BX,BX
JZ X2
MOV BX,0FFFFX
PUSH BX
; BX ← ←ap
MOV BX,[BP-16]
PUSH BX
MOV BX,2
; CX ← ←nonceId
MOV CX,[BP+6]
CALL ←Marshall
ADD SP,4
; else Zero(ap, 2);
JR X3
X2:
MOV BX,2
; CX ← ←ap
MOV CX,[BP-16]
CALL ←Zero
X3:
; ap += 2;
ADD WORD PTR [BP-16],4
; ap = StringToPkt(ap, caller);
; BX ← ←caller
MOV BX,[BP+4]
; CX ← ←ap
MOV CX,[BP-16]
CALL ←StringToPkt
; ←ap ← BX
MOV [BP-16],BX
; ap = StringToPkt(ap, callee);
; BX ← ←callee
MOV BX,[BP-2]
; CX ← ←ap
MOV CX,[BP-16]
CALL ←StringToPkt
; ←ap ← BX
MOV [BP-16],BX
; CallBonsai(&csr, ap-sp);
; BX ← ←sp
MOV BX,[BP-18]
; CX ← ←ap
MOV CX,[BP-16]
SUB CX,BX
SHR CX
MOV BX,CX
;&←csr
LEA CX,[BP-14]
CALL ←CallBonsai
; ap = sp;
; BX ← ←sp
MOV BX,[BP-18]
; ←ap ← BX
MOV [BP-16],BX
; authentication = AllocWordsFromPkt(&ap, false);
XOR BX,BX
;&←ap
LEA CX,[BP-16]
CALL ←AllocWordsFromPkt
; ←authentication ← BX
POP DX
PUSH BX
; *lvAuthenticator = AllocWordsFromPkt(&ap, false);
XOR BX,BX
;&←ap
LEA CX,[BP-16]
CALL ←AllocWordsFromPkt
MOV CX,BX
; BX ← ←lvAuthenticator
MOV BX,[BP-4]
MOV [BX],CX
; CleanupCall(&csr);
;&←csr
LEA BX,[BP-14]
CALL ←CleanupCall
; return (authentication);
; BX ← ←authentication
POP BX
PUSH BX
MOV SP,BP
POP BP
RET;
; };
; int Vitae(clientMachine, range, interfaceType, lvclientRname, lvclientInstance, lvserverInstance)
←Vitae:
; int clientMachine;
; int *range;
; struct ShortSTRING *interfaceType;
; struct ShortSTRING **lvclientRname;
; struct ShortSTRING **lvclientInstance;
; struct ShortSTRING **lvserverInstance;
PUSH BP
MOV BP,SP
PUSH CX
PUSH BX
; {
; struct Seal sl;
; struct Seal1 csr;
; int serverMachine;
; int *ap, *sp;
; if (ENABLE(CallFailed, &CONT, &sl)) return (0);
ADD SP,0FFF0X
MOV BX,←CallFailed
PUSH BX
;&←sl
LEA BX,[BP-8]
MOV CX,OFFSET ←CONT
CALL ←ENABLE
POP DX
OR BX,BX
JZ X4
XOR BX,BX
MOV SP,BP
POP BP
RET;
X4:
; sp = ap = StartBonsai(agentInstance, &csr);
;&←csr
LEA BX,[BP-14]
LEA CX,←agentInstance
CALL ←StartBonsai
; ←ap ← BX
MOV [BP-18],BX
; ←sp ← BX
POP DX
PUSH BX
; *ap++ = Swab(doVitae); /* procedure index */
ADD WORD PTR [BP-18],2
; BX ← ←ap
MOV BX,[BP-18]
PUSH BX
MOV BX,5
CALL ←Swab
MOV CX,BX
POP BX
MOV [BX-2],CX
; *ap++ = clientMachine; /* byte pair really */
ADD WORD PTR [BP-18],2
; BX ← ←ap
MOV BX,[BP-18]
; CX ← ←clientMachine
MOV CX,[BP+10]
MOV [BX-2],CX
; if (range) Marshall(true, ap, range, 2);
; BX ← ←range
MOV BX,[BP+8]
OR BX,BX
JZ X5
MOV BX,0FFFFX
PUSH BX
; BX ← ←ap
MOV BX,[BP-18]
PUSH BX
MOV BX,2
; CX ← ←range
MOV CX,[BP+8]
CALL ←Marshall
ADD SP,4
; else Zero(ap, 2);
JR X6
X5:
MOV BX,2
; CX ← ←ap
MOV CX,[BP-18]
CALL ←Zero
X6:
; ap += 2;
ADD WORD PTR [BP-18],4
; ap = StringToPkt(ap, interfaceType);
; BX ← ←interfaceType
MOV BX,[BP+6]
; CX ← ←ap
MOV CX,[BP-18]
CALL ←StringToPkt
; ←ap ← BX
MOV [BP-18],BX
; CallBonsai(&csr, ap-sp);
; BX ← ←sp
POP BX
PUSH BX
; CX ← ←ap
MOV CX,[BP-18]
SUB CX,BX
SHR CX
MOV BX,CX
;&←csr
LEA CX,[BP-14]
CALL ←CallBonsai
; serverMachine = *sp++;
ADD WORD PTR [BP-20],2
; BX ← ←sp
POP BX
PUSH BX
MOV CX,[BX-2]
; ←serverMachine ← CX
MOV [BP-16],CX
; *lvclientRname = AllocStringFromPkt(&sp);
;&←sp
LEA BX,[BP-20]
CALL ←AllocStringFromPkt
MOV CX,BX
; BX ← ←lvclientRname
MOV BX,[BP+4]
MOV [BX],CX
; *lvclientInstance = AllocStringFromPkt(&sp);
;&←sp
LEA BX,[BP-20]
CALL ←AllocStringFromPkt
MOV CX,BX
; BX ← ←lvclientInstance
MOV BX,[BP-2]
MOV [BX],CX
; *lvserverInstance = AllocStringFromPkt(&sp);
;&←sp
LEA BX,[BP-20]
CALL ←AllocStringFromPkt
MOV CX,BX
; BX ← ←lvserverInstance
MOV BX,[BP-4]
MOV [BX],CX
; CleanupCall(&csr);
;&←csr
LEA BX,[BP-14]
CALL ←CleanupCall
; return (serverMachine);
; BX ← ←serverMachine
MOV BX,[BP-16]
MOV SP,BP
POP BP
RET;
; };
; int /*BOOL*/ AgentInitialize()
←AgentInitialize:
PUSH BP
MOV BP,SP
; {
; struct InterfaceName interface;
; struct Seal sl;
ADD SP,0FFF4X
; Zero(&interface, lenInterfaceName);
MOV BX,4
;&←interface
LEA CX,[BP-8]
CALL ←Zero
; interface.type = agentRope;
MOV BX,←agentRope
; ←interface ← BX
MOV [BP-8],BX
; interface.instance = 0;
MOV WORD PTR [BP-6],0
; Move2(&interface.version, matchAllVersions);
MOV BX,←matchAllVersions
;&←interface
LEA CX,[BP-4]
CALL ←Move2
; if (ENABLE(ImportFailed, &CONT, &sl)) return (false);
MOV BX,←ImportFailed
PUSH BX
;&←sl
LEA BX,[BP-12]
MOV CX,OFFSET ←CONT
CALL ←ENABLE
POP DX
OR BX,BX
JZ X7
XOR BX,BX
MOV SP,BP
POP BP
RET;
X7:
; ImportInterface(0, &interface, agentInstance);
XOR BX,BX
PUSH BX
LEA BX,←agentInstance
;&←interface
LEA CX,[BP-8]
CALL ←ImportInterface
POP DX
; Block();
CALL ←Block
; return (true);
MOV BX,0FFFFX
MOV SP,BP
POP BP
RET;
; };
; AgentRopes()
←AgentRopes:
PUSH BP
MOV BP,SP
; {
; agentRope = CStringToString("Agent.Lark");
MOV BX,"Agent.Lark"
CALL ←CStringToString
MOV ←agentRope,BX
; };
MOV SP,BP
POP BP
RET;
; Externals Declared Here
PUBLIC ←AgentAuthenticate
PUBLIC ←Vitae
PUBLIC ←AgentInitialize
PUBLIC ←AgentRopes
C←CODE ENDS
; Number of Bytes of Code = 01FDX, (509)