.title DstHdl .includ 'b:global' sect code RAHDL: cmp #3, Level bhi 999$ mov #4, r0 call FixLst bcs 999$ mov Found(r0), r1 call GetAdr mov #PrsPro, r5 mov #6, r0 10$: mov (r1)+, (r5)+ sob r0, 10$ mov #PrsPro, r5 bit #ADMPRV, KSW bne 50$ cmp Me,(r5) beq 50$ gos getrec, <#1, rArg(r5), #FB1, #Unlock> cmp Me,10(r1) beq 50$ Write #DHIR br 999$ 50$: tst (pc)+ 999$: sec rts pc oADDD: call rahdl bcs 999$ cmp #10, rPri1(r5) ; NetPerson? bne 30$ ; No! ; AddDistributionlistToNetPerson gos AskDTN, br 999$ 30$: PARSER #NetLst, #33, #MottT call pcr2lf tst level beq 140$ clr r0 call DoAdDs bcs 140$ tst r2 beq 30$ gos WrToP, bcc 40$ Write #DHIR br 30$ 40$: gos ChgDis, bcc 30$ mov r2, r0 call PrtNam Write #AAIDL br 30$ 140$: 999$: rts pc proc AskDTN, begin 10$: PARSER #DstCmd, #-1, #MottF call pcr2lf mov level, r4 ; Save level beq 999$ 50$: REPARS #2, #MottT bcs 10$ mov #2, r0 call DoAdDs bcs 10$ tst r2 beq 200$ mov #PStr1, r1 push (r1) mov Strs+2, r0 sub r1, r0 sub #2, r0 movb r0, (r1) ; PStr1 are now a string with ; newsgroup-name. gos @WtToDo(r5), pop PStr1 ; ! bcc 200$ mov r2, r0 call prtnam tst r3 beq 180$ Write #KoSp Write r3 180$: Write ErrTxt(r5) 200$: cmp #1, r4 bne 10$ mov r4, Level clr LnkLvl br 50$ 999$: ret proc AddDTN, Var LstRec, word Var CurRec, word begin push gos GetRec <#1, NetRec(r5), #FB1, #Unlock> add #146, r1 mov (r1), LstRec(r5) mov -(r1), r4 mov -(r1), r3 beq 100$ 60$: mov r4, CurRec(r5) beq 100$ gos TryRec, <#1, r4, #FB1, #Unlock> mov r1, r4 add #14, r1 mov MtF(r5), r0 call EqualP bcc 110$ mov 2(r4), r4 sob r3, 60$ 100$: clr CurRec(r5) mov #FB1+4, r2 clr (r2) clr -(r2) clr -(r2) br 120$ 110$: mov r4, r2 add #6, r2 120$: call ccoff call MtxBgn gos AdToDi, bcs 300$ mov CurRec(r5), r4 bne 200$ mov #1, r0 mov #FB2, r1 call spawn mov (r1), r4 mov #12, (r1)+ clr (r1)+ mov LstRec(r5), (r1)+ mov (r2)+, (r1)+ ; Nr of groups in dist.-list. mov (r2)+, (r1)+ ; Pointer to 1'st DISTRIBUTION. mov (r2)+, (r1)+ mov MtF(r5), r2 clr r0 bisb (r2)+, r0 movb r0, (r1)+ 130$: movb (r2)+, (r1)+ sob r0, 130$ mov LstRec(r5), r0 beq 140$ gos PutGet, <#1, r0, #FB2> mov r4, 2(r1) 140$: gos PutGet, <#1, NetRec(r5), #FB2> add #142, r1 inc (r1)+ tst (r1)+ bne 150$ mov r4, -2(r1) 150$: mov r4, (r1) br 250$ 200$: gos GetRec, <#1, r4, #FB2,> add #6, r1 mov (r2)+, (r1)+ mov (r2)+, (r1)+ mov (r2)+, (r1)+ 250$: gos Put, <#1,, #FB2> clr r0 br 999$ 300$: mov #-1, r0 999$: call ccon call MtxEnd tst r0 beq 1000$ sec 1000$: pop ret DoAdDs: call fixlst ; r0 Are to point att 1'st pos. bcs 200$ call fixgrp bcs 200$ mov r1, r3 bne 50$ cmp r2, (r5) bne 70$ mov r2, r0 call prtnam Write #FATxt br 200$ 50$: cmpb #116., (r3) ; Max length of string. bhi 70$ Write #FLN br 200$ 70$: tst (pc)+ ; clear carry and skip 200$: clr r2 ; clear r2 AND carry:n 999$: rts pc oSUBD: call rahdl bcs 999$ cmp #10, rPri1(r5) ; NetPerson? bne 30$ ; No! ; SubDistributionlistToNetPerson gos AskDTN, br 999$ 30$: PARSER #NetLst, #33, #MottT call pcr2lf tst level beq 140$ clr r0 call DoAdDs tst r2 beq 30$ gos ChgDis, bcc 30$ mov r2, r0 call PrtNam Write #KoSp ; ": " Write r3 Write #ANIDL br 30$ 140$: 999$: rts pc proc ChgDis, begin push clr r2 call MtxBgn call ccoff gos GetRec, <#1, To(r5), #FB1, #UnLock> mov r1, r3 add #142, r3 gos @WtToDo(r5), adc r2 gos GetRec, <#1, To(r5), #FB2,> add #142, r1 mov (r3)+, (r1)+ mov (r3)+, (r1)+ mov (r3), (r1) gos put, <#1,,#FB2> call MtxEnd call ccon tst r2 beq 999$ sec 999$: pop ret proc AdToDi, Var Nr, word Var ErrFlg, word Var NetRec, word begin push mov Ptr(r5), r4 clr ErrFlg(r5) clr NetRec(r5) mov NetStr(r5), r2 beq 5$ mov #1,r0 mov #FB2, r1 call spawn mov (r1), NetRec(r5) mov r1, NetStr(r5) mov #11, (r1)+ ; Nodtyp = MOTTAGARF[LT clr (r1)+ ; N{sta nod (Saknas) clr (r1)+ ; F|reg}ende (Saknas) clr (r1)+ ; ** Reserverat ** clr (r1)+ ; ** Reserverat ** clr (r1)+ ; ** Reserverat ** mov r2, r0 call MovStr mov NetRec(r5), r0 gos Put, <#1,, #FB2> 5$: mov 2(r4), r2 ; DISTRUBUTION beq 40$ mov (r4), Nr(r5) ; Antal mottagare i listan. clr FB3-2 10$: gos tryrec, <#1, r2, #FB3, #Lock> mov #20., r3 mov 2(r1), r2 add #10, r1 20$: dec Nr(r5) blt 30$ cmp (r1)+, Grp(r5) beq 22$ cmp (r1)+, (r1)+ sob r3, 20$ tst Nr(r5) bgt 10$ br 40$ 22$: tst NetRec(r5) beq 28$ tst (r1)+ bne 24$ mov NetRec(r5), -2(r1) 24$: mov (r1), r2 mov NetRec(r5), (r1) gos Put, <#1,,#FB3> tst r2 beq 170$ 26$: Gos GetRec, <#1, NetRec(r5), #FB2,> mov r2, 4(r1) ; F|reg}ende MOTTAGARF[LT gos PutGet, <#1,r2,#FB2> mov NetRec(r5), 2(r1) gos Put, <#1,,#FB2> br 170$ 28$: mov #-1, ErrFlg(r5) jmp 999$ 30$: mov Grp(r5), (r1)+ mov NetRec(r5), (r1)+ mov NetRec(r5), (r1)+ 35$: gos put <#1, r0, #FB3> br 100$ 40$: mov #1,r0 ; Gammal noden var full - mov #FB3, r1 ; - vi f}r skapa en till. call spawn mov (r1), r3 mov #10, (r1)+ ; Nodtyp = DISTRUBUTION clr (r1)+ ; N{sta nod (Saknas) mov 4(r4), r2 mov r2, (r1)+ ; F|reg}ende. clr (r1)+ ; ** Reserverad ** mov Grp(r5), (r1)+ mov NetRec(r5), (r1)+ mov NetRec(r5), (r1)+ gos put <#1, r0, #FB3> mov r3, 4(r4) tst r2 beq 50$ gos getrec <#1, r2, #FB3, #Lock> mov r3, 2(r1) br 35$ 50$: mov r3, 2(r4) 100$: inc (r4) ; En mottagare till... 170$: 999$: tst ErrFlg(r5) beq 1000$ sec ; N}got blev fel! 1000$: pop ret proc SbFmDi, Var Nr, word Var Rec, word Var Pos, word Var Nxt, word Var Prv, word Var PrvRec, word begin push mov Ptr(r5), r4 mov 2(r4), r2 ; DISTRUBUTION beq 30$ mov (r4), Nr(r5) ; Antal mottagare i listan. clr FB3-2 10$: gos tryrec, <#1, r2, #FB3, #Lock> mov r1, Pos(r5) mov r2, Rec(r5) mov 2(r1), r2 mov #20., r3 add #10, r1 20$: dec Nr(r5) blt 30$ cmp (r1)+, Grp(r5) beq 100$ cmp (r1)+, (r1)+ sob r3, 20$ tst r2 bne 10$ 30$: jmp 999$ 100$: neg Pos(r5) add r1, Pos(r5) tst NetStr(r5) bne 140$ ; No special receiver-field given -> Remove all! mov (r1)+, r3 ; 1'st MOTTAGARF[LT 110$: mov r3, r2 beq 300$ gos getrec, <#1, r2, #Fb3, #Lock> mov 2(r1), r3 gos Dispos <#1, r2, #Fb3> br 110$ 140$: mov (r1)+, r3 ; 1'st MOTTAGARF[LT beq 30$ 150$: gos tryrec, <#1, r3, #FB3, #Lock> mov 2(r1), Nxt(r5) mov 4(r1), Prv(r5) add #14, r1 mov NetStr(r5), r0 call EqualP bcc 160$ mov Nxt(r5), r3 bne 150$ jmp 999$ ; Ok, we know what to remove -> Time to make a move! 160$: gos RmvRec, bcs 300$ ; We just removed the last record ; in the list. mov Nxt(r5), r0 bis Prv(r5), r0 beq 400$ ; Update last and/or first pointers. gos getrec, <#1, Rec(r5), #Fb3, #Lock> add Pos(r5), r1 tst Prv(r5) bne 180$ mov Nxt(r5), (r1) bne 190$ 180$: mov Prv(r5), 2(r1) 190$: gos Put, <#1,, #Fb3> br 400$ 300$: dec (r4) ; One group in this DISTRIBUTION ; list is to be removed. gos getrec, <#1, 4(r4), #Fb3, #Lock> ; get last record mov 4(r1), PrvRec(r5) ; 2'nd last record mov (r4), r3 ; # of groups in list clr r2 div #20., r2 mul #6, r3 add r3, r1 ; pointer to last group add #10, r1 mov (r1)+, Nr(r5) ; Group # (temp. storage) mov (r1)+, Nxt(r5) ; 1'st MOTTAGARF[LT mov (r1), Prv(r5) ; Last - " - gos tryrec, <#1, Rec(r5), #Fb3, #Lock> add Pos(r5), r1 mov Nr(r5), -2(r1) mov Nxt(r5), (r1)+ mov Prv(r5), (r1) gos put, <#1,, #Fb3> tst r3 bne 350$ ; We just moved the only group in the last record -> Remove ; the hole record cmp 4(r4), 2(r4) bne 330$ clr 2(r4) 330$: gos Dispos, <#1, 4(r4), #Fb3> mov PrvRec(r5), 4(r4) 350$: 400$: tst (pc)+ 999$: sec 1000$: pop ret proc RmvRec, begin gos Dispos, <#1, Rec(r5), #Fb3> mov Nxt(r5), r0 bne 40$ mov Prv(r5), r0 beq 100$ gos GetRec, <#1, r0, #FB3, #Lock> br 60$ 40$: gos GetRec, <#1, r0, #FB3, #Lock> mov Prv(r5), r0 mov r0, 4(r1) beq 80$ gos PutGet, <#1, r0, #FB3> 60$: mov Nxt(r5), 2(r1) 80$: gos put <#1,,#Fb3> tst (pc)+ 100$: sec ret proc SubDTN, Var CurRec, word Var PrvRec, word Var NxtRec, word Var errFlg, word begin push clr ErrFlg(r5) gos GetRec <#1, NetRec(r5), #FB1, #Unlock> mov 142(r1), r3 mov 144(r1), r4 beq 100$ 60$: mov r4, CurRec(r5) beq 100$ gos TryRec, <#1, r4, #FB1, #Unlock> mov 2(r1), NxtRec(r5) mov 4(r1), PrvRec(r5) mov r1, r4 add #14, r1 mov MtF(r5), r0 call EqualP bcc 110$ mov 2(r4), r4 sob r3, 60$ 100$: jmp 999$ 110$: call ccoff call MtxBgn add #6, r4 gos SbFmDi, adc ErrFlg(r5) bne 800$ tst (r4) ; Anything left? beq 300$ ; No, remove this field. gos GetRec, <#1, CurRec(r5), #Fb2,> add #6, r1 mov (r4)+, (r1)+ mov (r4)+, (r1)+ mov (r4), (r1) gos Put, <#1,, #Fb2> br 800$ 300$: gos RmvRec, gos GetRec, <#1, NetRec(r5), #Fb1,> add #142, r1 dec (r1)+ cmp (r1)+, CurRec(r5) bne 310$ mov NxtRec(r5), -2(r1) 310$: cmp (r1), Currec(r5) bne 320$ mov PrvRec(r5), (r1) 320$: gos Put, <#1,, #Fb1> 800$: call MtxEnd call ccon tst ErrFlg(r5) beq 1000$ 999$: sec 1000$: pop ret Text AAIDL, <" {r redan med i distrubutionslistan."> Text ANIDL, <" ing}r inte i distributionslistan."> Text FLN, <"Namnet {r f|rl}ngt (max 120 tecken)."> Text FATxt, <" f}r automatiskt texten."> Text MottF, <"Ange mottagarf{lt"> Text MottT, <"Ange mottagare"> .end