Title DSVRST -- by Mark K. Lottor, 1986 Search MacSym,MonSym StdAC. PDLen==40 PDList: Block PDLen ;interrupt things PC1: 0 ;Interrupt PC storage, level 1 PC2: 0 ;level 2 PC3: 0 ;level 3 FooBuf: Block 40 ;used for putting foo into ;IPCF Stuff FkPid: .IPCII ;function 0 ;no copies OurNam: Block 10 PidLn=.-FkPid ;length of block OurPid: 0 ;our pid FPid: 0 ;foreign pid ResLn=10 DesBlk: Block ResLn ResBlk: Block ResLn LevTab: PC1 PC2 PC3 ChnTab: Repeat <^d36>,<0> ;Nothing on other channels. Start: RESET% Move p,[Iowd PDLen,PDList] Call GetPid ;get us a pid Call GetFP ;get the foreign pid ; Tmsg ;Loop: movei 1,.priin ; CFIBF% ; PBIN% ; Txz 1,40 ; Cain 1,"Y" call SIPCF ; Cain 1,"N" ; Jrst [tmsg ; jrst Exit] Jrst Exit ;send an IPCF to FPID SIPCF: ; Tmsg Setzm TxPag*1000 Movx 1,IP%CFV Movem 1,DesBlk+.IPCFL ;flags Move 1,OurPid Movem 1,DesBlk+.IPCFS ;our pid Move 1,FPid ;F pid Movem 1,DesBlk+.IPCFR ;send to fpid Move 1,[1000,,TxPag] ;length,,address of message Movem 1,DesBlk+.IPCFP ;save function pointer Movei 1,.IPCFP+1 ;length of pdb Movei 2,DesBlk ;address of description block MSEND% Erjmp Error Tmsg < Server should be restarting now. > Ret OurPrm: Asciz /Our pid name: / ;get our pid GetPid: ; Hrroi 1,OurPrm ; PSOUT% ; Hrroi 1,OurNam ; Movx 2,RD%BEL!RD%CRF+<10*5-1> ; Hrroi 3,OurPrm ; RDTTY% ; erjmp error ; Setz 2, ; Dpb 2,1 Hrroi 1,OurNam Hrroi 2,[Asciz /DSVRST/] Setz 3, SOUT% ;get pid named OurNam Move 1,[IP%CPD] ;create a pid Movem 1,DesBlk+.IPCFL ;save in flag word area Setzm DesBlk+.IPCFS ;no pid yet so use 0 Setzm DesBlk+.IPCFR ;0 means send to Info Move 1,[PidLn,,FkPid] ;pid data block stuff Movem 1,DesBlk+.IPCFP ;save function pointer Movei 1,.IPCFP+1 ;length of pdb Movei 2,DesBlk ;address of ipcf block MSEND% ;send request to INFO Erjmp Error Setzm DesBlk+.IPCFL ;no flags Move 1,DesBlk+.IPCFS ;get our pid Movem 1,OurPid ;save it for later Movem 1,DesBlk+.IPCFR ;we are reciever Setzm DesBlk+.IPCFS ;no sender yet Move 1,[ResLn,,ResBlk] ;destination buffer Movem 1,DesBlk+.IPCFP Movei 1,.IPCFP+1 ;length of message Movei 2,DesBlk MRECV% ;get reply from INFO Erjmp Error Ret ;got our pid FPrm: Asciz /Foreign pid name: / ;get foreign pid GetFP: ; Hrroi 1,FPrm ; PSOUT% ; Hrroi 1,OurNam ; Movx 2,RD%BEL!RD%CRF+<10*5-1> ; Hrroi 3,FPrm ; RDTTY% ; erjmp error ; Setz 2, ; Dpb 2,1 Hrroi 1,OurNam Hrroi 2,[Asciz /DSVCTL/] Setz 3, SOUT% ;get pid of OurNam Movei 1,.IPCIW ;return pid for name given Movem 1,FkPid ;store in function block Setzm DesBlk+.IPCFL ;no flags Move 1,OurPid Movem 1,DesBlk+.IPCFS ;our pid Setzm DesBlk+.IPCFR ;0 means send to Info Move 1,[PidLn,,FkPid];pid data block stuff Movem 1,DesBlk+.IPCFP ;save function pointer Movei 1,.IPCFP+1 ;length of pdb Movei 2,DesBlk ;address of ipc block MSEND% Erjmp Error Setzm DesBlk+.IPCFL ;no flags Setzm DesBlk+.IPCFS ;no sender Move 1,OurPid ;our pid Movem 1,DesBlk+.IPCFR ;we are the reciever Move 1,[ResLn,,ResBlk] ;destination buffer Movem 1,DesBlk+.IPCFP ;save the function pointer Movei 1,.IPCFP+1 ;length of the pdb in 1, address still in 2 Movei 2,DesBlk MRECV% ;receive a message Erjmp Error Load 1,IP%CFE,DesBlk Cain 1,.IPCNN Jrst [Tmsg < DSV controlling process not found > jrst exit] Move 1,ResBlk+.IPCI1 ;get pid Movem 1,FPid ;save it Ret ;string move routines MovStr: Tlce 1,-1 Tlcn 1,-1 Hrli 1,440700 Tlce 2,-1 Tlcn 2,-1 Hrli 2,440700 MovSt1: Ildb 3,2 Jumpe 3,MovRet Idpb 3,1 Jrst MovSt1 MovRet: Ret MovSt0: Tlce 1,-1 Tlcn 1,-1 Hrli 1,440700 Tlce 2,-1 Tlcn 2,-1 Hrli 2,440700 MovSt2: Ildb 3,2 Idpb 3,1 Jumpn 3,MovSt2 Ret ;error routine and exit routine Error: Hrroi 1,[Asciz /Error: /] Call ErrMsg Jrst Exit ErrMsg: ESOUT% Movei 1,.PRIOU Hrloi 2,.FHSLF Setz 3, ERSTR% Erjmp Error Erjmp Error Tmsg < > Ret Exit: HALTF% Jrst Exit TxPag==:<.+3777>/1000 TxBlk==:TxPag*1000 RxPag==:<.+3777>/1000 RxBlk==:RxPag*1000 End Start