;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 ; 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)