.title KOM ; Initierings rutiner till KOM .inclu "b:global" APR1 = 1 APR2 = 2 APR3 = 3 APR4 = 4 APR5 = 5 .psect .globl KOMAVS .globl INLNK .globl EOKOM KOMAVS: .byte 10$-KOMAVS-1 .ascii "KOM {r f|r tillf{llet avst{ngt."<15><12> 10$: .even KOMAVA: .byte 10$-KOMAVA-1 .ascii "(Databasen {r st{ngd)"<15><12><12> 10$: .even .inclu "b:komfil" ; KOM filedefinitions. INIT: .ttnch ; No Echo mov #^RKOM, @#firqb+fqnam1 mov #^R..., @#firqb+fqnam1+2 .name ; Set work name clr @#Me mov #LinLen-2, @#MaxLin clr @#Line clr PTerm ; Default term-typ (dummy crt) clrb @#xrb+xrci .postn mov #Width,r0 clr (r0) ; ? movb @#xrb,(r0) decb (r0) movb @#firqb+fqjob, r0 asr r0 mov r0, @#Job write #welKOM ; Write a friendly phrase with version. errprt #0 write #CRLF mov #xSM+xELIN+xBL, @#MyFlags mov #UnProm, @#Stat clr @#KSW movb #UU.SYS,@#Firqb+fqfun clr @#firqb+4 .UUO mov @#firqb+26,@#PPN movb @#Firqb+5,@#TERM OPFIL: mov #EOFS,r2 ; Open files mov #EOFS-Files, r0 ; Number of files * 2 10$: mov #firqb+fqfun, r1 movb #opnfq, (r1)+ mov r0, (r1)+ ; Unit number * 2 mov KOMPPN, (r1)+ mov #^RKOM, (r1)+ mov -(r2), (r1)+ mov #^RDAT, (r1)+ mov #1+8.+128.+32768., firqb+fqmode mov KOMDEV, firqb+fqdev mov KOMDVN, firqb+fqdevn calfip jsr pc, @#error dec r0 sob r0, 10$ write #CRLF ; Attach to KOM overlay library. call clrfqb movb #ATRFQ, Firqb+fqfil mov KOMLIB, Firqb+12 mov KOMLIB+2, Firqb+14 mov #1, Firqb+22 ; Read Only. .plas ; Attach Resedent Library call Error mov Firqb+Fqppn, OLIde ; mov Firqb+Fqnam1, OLSiz call clrfqb movb #CRAFQ, Firqb+Fqfil movb #APR3, Firqb+7 mov #Firqb+12,r1 mov #128., (r1)+ mov OLIde, (r1)+ mov OvlTbl+SegB, (r1)+ mov OvlTbl+SegB+2, (r1)+ mov #200,(r1) ; ReadOnly, Mapping. .plas call Error mov firqb+fqppn, OWIde ; Window ID mov #SegB, curseg ; Current maped segment. ; Attach to KOM group-and command library. call clrfqb movb #ATRFQ, Firqb+fqfil mov KOMRES, Firqb+12 mov KOMRES+2, Firqb+14 mov #2, Firqb+22 .plas ; Attach Resedent Library call Error mov Firqb+Fqppn, LibIde mov Firqb+Fqnam1, LibSiz call clrfqb movb #CRAFQ, Firqb+Fqfil movb #APR4, Firqb+7 mov #Firqb+12,r1 ; There WAS a bug here! mov #128., (r1)+ mov LibIde, (r1)+ clr (r1)+ clr (r1)+ mov #202, (r1) ; Write access and Mapping .plas call Error mov firqb+fqppn, WinIde ; Window ID clr CurSek ; Current maped sektion. mov #100, ResLim bis #UseRes, KSW ; Now we uses a RESLIB ; for our commands. mov #2,r2 gos Get, <#1, r2, #FB1, #1, #Lock> ; Get INFO-block cmp #xDBVer, FB1+32 ; Right DATABASE Version beq 20$ iot 20$: bit #1, FB1+34 beq 40$ cmp PPN, FB1+6 beq 40$ mov #1,r0 call Releas Write #KOMAVS jmp $exit 40$: mov FB1+16, systm ; Systemmedelande (LONG) mov FB1+20, systm+2 mov FB1+44, systmN mov FB1+110, HshSiz ; # of entrys in hash-table. mov FB1+112, HshEnd ALIINI: mov #Alias1, r1 ; Alias INIT. mov r1, LstMem clr (r1)+ mov #GRPLST, (r1)+ ; Link to KOMRES. clr (r1)+ ; rArg clr (r1)+ ; Priority none. clr (r1)+ ; rPri2 clr (r1)+ ; rTyp clr (r1)+ ; rStr mov r1, NxtMem mov #BasAdr, r5 ; LIBINF cmp #xLibUi, (r5) beq RESINI jmp CONT RESINI: mov #1, r0 ; Init. Resedent Library call Exlock mov #xLibIn, (r5)+ mov FB1+22, (r5)+ ; # of created text's mov FB1+24, (r5)+ mov #17, (r5)+ ; Edit # for groups mov #17, (r5)+ ; Edit # for texts mov FB1+34, (r5)+ ; DSW clr (r5)+ ; LSW2 mov #FB1+62, r1 mov (r1)+, (r5)+ ; N[TPERSON n movb (r1)+, r0 movb r0, (r5)+ 5$: movb (r1)+, (r5)+ ; KOM's net-address sob r0, 5$ mov #PreLst, r1 call GetAdr mov r1, r5 mov #64.*4, r0 10$: clr (r5)+ sob r0, 10$ mov FB1+30, r4 ; Number of groups. mov FB1+42, tmp mov #FSTGRP, NxtAdr ; Start addres of grouplist mov #GRPLST, LstAdr ; Previous linked group. mov LibSiz, r1 asr r1 asr r1 bic #177037, r1 mov r1, LibSiz ; Highest possible sektion. clr r1 ; Number of linked groups. INLNK: mov r4,r3 beq 50$ cmp #</1000>*10, r3 ; Maximum number of groups bhis 10$ ; to be read. mov #</1000>*10, r3 10$: mov r3,r5 dec r5 ash #-3,r5 ; Number of blocks left to get inc r5 mov #stkend+2,r0 gos Get, <#4, r2, r0, r5, #Unlock> add r5,r2 20$: inc r1 dec r4 tst (r0) beq 30$ call maklst cmp #-1, NxtAdr beq 50$ 30$: add #64.,r0 sob r3,20$ br INLNK 50$: mov #LibInf, r1 call GETADR mov r1,r5 add #100, r1 mov LstAdr, (r1)+ mov NxtAdr, (r1)+ mov LibSiz, (r1) mov #xLibRd, (r5) mov #1, 10(r5) ; Edit # for texts mov #Mutex, r1 call GetAdr mov #-1, (r1)+ ; Init value for this semaphore. clr (r1)+ ; Owner job nr (no one now). CONT: mov #1, r0 call Releas bit #1, 12(r5) ; Is KOM "turned off"? beq 505$ Write #komava 505$: cmp #xLibRd, (r5) beq 530$ 510$: cmp #xLibIn, (r5) ; This is not possible! beq 520$ ; You can't be here! iot 520$: mov #2, xrb .sleep br 505$ 530$: mov 6(r5), EditNr cmp #-1, 102(r5) bne SCRINI Write #MAF SCRINI: ; Determin terminal type movb @#TERM, r2 ; get kb-no bic #^c77, r2 asl r2 asl r2 asl r2 add #FB1, r2 ; make it pointer for first block of tty.sys clrb (r2) ; default noting now jsr pc, @#clrfqb mov #405, r0 ; open $tty.sys on channel 14 movb #2, (r0)+ mov #2*14., (r0)+ mov #1.*256.+2., (r0)+ mov (pc)+, (r0)+ .rad50 /TTY/ tst (r0)+ mov (pc)+, (r0)+ .rad50 /SYS/ calfip ; don't mind about failures right now jsr pc, @#clrxrb mov #1000, (r1)+ ; get first (second) block of $tty.sys tst (r1)+ mov #FB1, (r1)+ mov #2*14., (r1)+ cmp TERM, #64. blo 300$ mov #2, (r1) 300$: .read ; don't mind about failures right now 19$: jsr pc, clrfqb movb #2*14., @#406 ; close the file calfip ; don't mind about failures right now mov r2, r0 clr r1 clrb 7(r2) ; set up a safety catch (just in case...) 20$: bitb #157, (r2)+ ; anything (but space or null) ? beq 30$ ; no, end here inc r1 ; yes, count it br 20$ 30$: tst r1 ; got any string ? beq OKSK ; No! Whatt: mov r0, NxtAdr mov #GrpLst, r1 10$: call GetAdr mov r1, r4 cmp #4, rPri1(r4) bne 30$ add #rStr, r1 movb (r1)+, r0 mov #TmpStr, r2 gos cvt$$, mov r2, r1 clr r3 bisb (r1)+, r3 cmp #8., r3 blo 30$ mov NxtAdr, r2 20$: cmpb (r2)+, (r1)+ bne 30$ tstb (r2) bne 25$ sob r3, 20$ br FooTTy 25$: sob r3, 20$ 30$: mov rNxt(r4), r1 bne 10$ OKSK: mov #GRPLST, r1 ; Ok{nd sk{rm call GetAdr br CalTTy FooTTy: mov r4, r1 CalTTy: call MOVTTD mov #EOMEM, r0 ; End Of Memory mov #-1, MemLim ; No previous seting. jmp SETCOR ; Exit (And set proper CORE) EOKOM: .End INIT