.title CREKOM ; Generates the KOM database .inclu "b:global" .psect .inclu "b:komfil" bgn: trap 0 trap 1 inc (r1)+ inc (r1)+ mov #space, (r1) .fss mov firqb+fqprot-1, r3 write #yxkom errprt #0 write #CR2LF mov #EOFS, r2 mov #EOFS-Files, r0 ; Number of files * 2 10$: jsr pc, @#clrfqb movb #crefq, @#firqb+fqfun movb r0, @#firqb+fqfil ; Unit number * 2 mov #^rKOM, @#firqb+fqnam1 mov -(r2), @#firqb+fqnam1+2 mov #^rDAT, @#firqb+fqext mov r3, @#firqb+fqprot-1 mov #200+32768., @#firqb+fqmode mov KOMDEV, @#firqb+fqdev mov KOMDVN, @#firqb+fqdevn mov #10, @#firqb+fqsiz calfip call @#error dec r0 sob r0, 10$ ; Dump current date into certain locations .date mov #dat, r3 15$: mov (r3)+, r2 beq 18$ mov #xrb, r1 mov (r1)+, (r2)+ mov (r1)+, (r2)+ br 15$ ; Save data in file(s) 18$: mov #buff, r3 clr r4 20$: add #2, r4 mov (r3)+, r2 ; Pointer to data in R2 beq 30$ mov (r2)+, r1 ; first word = length. sub #2, r1 beq 20$ mov r1, r5 clr r0 div #512., r0 ; Round up to 512*n tst r1 beq 21$ inc r0 21$: ash #9., r0 trap 1 mov r0, (r1) mov (r1)+, (r1)+ mov r2, (r1)+ mov r4, (r1)+ inc (r1) .write call @#error br 20$ 30$: write #eoCRE jmp @#$exit text yxkom, <"CREKOM V1.0 "> text eoCRE, <"Databasen skapad!"<15><12>> .even dat: g1 g2 g3 g4 g5 .word 0 buff: .word f1 .word f2 .word f3 .word f4 .word f5 .word 0 .psect data f1: .word f2-f1 ; Fil 1. Nod Anv{ndning. ; ; 1 ** RESERVERAD ** ; 2 ** RESERVERAD ** ; 3 ** RESERVERAD ** ; 4 ** RESERVERAD ** ; 5,6 INFO ; 7,8 [NDRINGAR ; 9-48 HIGH ; 49 PERSON 1 ; 50 M\TE 2 ; 51 M\TE 3 ; 52 MEDLEMSKAP (1) ; 53 MEDLEMMAR (2) ; 54 MEDLEMMAR (3) ; 55 MOTTAGNA (1) ; 56 MOTTAGNA (2) ; 57 MOTTAGNA (3) ; 58 M\TE 4 ; 59 MEDLEMMAR (4) ; 60 MOTTAGNA (4) ; First BLOCK ; (1,2,3,4) .word 61. ; F|rsta lediga nod .word 0 ; Pekare till lediga noder listan .blkb 508. ; INFO .word 1 ; INFO (5) g1: .blkw 2 ; Skapelse tid. .byte 60. ; PPN med absoluta privilegier. .byte 254. ; -"- -"- -"- .word 2 ; Presentation av personer .word 3 ; Presentation av m|ten .word 7000. ; Fysiskt inl{ggs max. .blkw 2 ; System meddelande .blkw0 2 ; H|gsta logiska inl{ggs # .word 0 ; H|gsta skapade fysiskta inl{gg .word 4 ; Antal grupper. .word 0 ; Editerings nummer (=0) .word 1 ; Status ord (KOM avst{ngd) .word 0,0 ; S|k ord f|r inl{gg. .word 0 ; Editerings nummer f|r texter. .word 0 ; *** reserverat *** .word 4 ; M|te f|r KOM-Administration 1$: .blkb0 1000-<1$-g1+2> ; [NDRINGAR .blkb 10.*512. ; HIGH ;PERSON 1 (KOM-Administrat|ren) q1: .word 3 ; PERSON (49) .word 0 ; Pekare till n{sta (ingen) .word 0 ; Pekare till f|reg. (ingen) .word 1 ; PERSON # = 1. .word 1 ; Skapare. g2: .blkw 2 ; Skapelse tid. .word xAU!xSM!xExp!xSAC!xEE!xBL!xANW ; Flagg ord. .blkw0 2 ; Presentations ord. .word 3 ; Antal medlemskap. .word 52. ; Pekare till f|rsta MEDLEMSSKAP .word 52. ; Pekare till sista. (samma) .word 55. ; Pekare till MOTTAGNA .word 55. ; SlutPekare till MOTTAGNA .byte xAdm ; Privs. Administrat|r. .byte -1 ; Alla priv. flaggor p} (default) .blkw 9. ; Konton .ascii "??????" ; L|senord. .word 0,0 ; Senast inne. .word 0 ; Antal markerade. .word 0 ; Pekare till MARKERADE (se fil 2) .word 0 ; SlutPekare till ovan. (samma) .word 0 ; Antal l{sta brev .word 55. ; Pekare till MOTTAGET-block. .word 0,0 ; Lapp p} d|rren. 100$: .blkb0 200-<100$-q1+2> ; *** RESERVERADE *** .word 0 ; HIGH (Antal mottagna brev) ; M\TE 2 (Presentation av nya KOM-medlemmar) q2: .word 4 ; M\TE (50) .word 0. ; Pekare till n{sta. .word 0 ; Pekare till f|reg. (ingen) .word 2 ; M\TES # = 2. .word 1 ; Skapare. g3: .blkw 2 ; Skapelse tid. .word xOPN+xWP ; Flagg ord. .blkw0 2 ; Presentations ord. .word 1 ; Antal medlemmar. .word 53. ; Pekare till f|rsta MEDLEMMAR .word 53. ; Pekare till sista. (samma) .word 56. ; Pekare till MOTTAGNA .word 56. ; SlutPekare till MOTTAGNA .word 0,0 ; Senast inne, tid & datum 100$: .blkb0 200-<100$-q2+2> ; *** RESERVERADE *** .word 0 ; HIGH ; M\TE 3 (Presentation av nya m|ten) q3: .word 4 ; M\TE (8) .word 0. ; Pekare till n{sta (ingen) .word 0. ; Pekare till f|reg. .word 3 ; M\TES # = 3. .word 1 ; Skapare. g4: .blkw 2 ; Skapelse tid. .word xOPN+xWP ; Flagg ord. .blkw0 2 ; Presentations ord. .word 1 ; Antal medlemmar. .word 54. ; Pekare till f|rsta MEDLEMMAR .word 54. ; Pekare till sista. (samma) .word 57. ; Pekare till MOTTAGNA .word 57. ; SlutPekare till MOTTAGNA .word 0, 0 ; Senast aktivt, datum & tid 100$: .blkb0 200-<100$-q3+2> ; *** RESERVERADE *** .word 0 ; HIGH ; MEDLEMSSKAP till PERSON 1 .word 6 ; MEDLEMSSKAP (9) .word 0 ; n{sta MEDLEMSSKAP (ingen) .word 0 ; f|reg. enl. ovan (ingen h{r heller) .word ; ** RESERVARAT ** .word 2,0,0 ; Medlemsskap i m|te 2 .word 3,0,0 ; - "" - 3 .word 4,0,0 ; - "" - 4 .blkw0 100-15 ; Array [1..30,1..3] of Integer ; MEDLEMMAR till M\TE 2 & 3 .rept 2 .word 5 ; MEDLEMMAR (10 & 11) .word 0 ; n{sta MEDLEMMAR (ingen) .word 0 ; f|reg. enl. ovan (ingen h{r heller) .word 1 .blkw0 100-4 ; 1 ord per medlem. .endr ; MOTTAGET till GRUPP 1 & 2 & 3 .rept 3 .word 7 ; MOTTAGET (12 & 13 & 14) .word 0 ; Pekare till n{sta. (ingen) .word 0 ; Bak}tPekare (ingen) .word ; ** RESERVERAD ** .blkw0 100-4 ; mottagna inl{gg (2 ord / mottaget) .endr meet4: .word 4 ; M\TE 4 (58) .word 0 .word 0 .word 4 ; Logiskt nummer, 4 .word 1 ; Skapare = PERSON 1 g5: .blkw 2 ; Skapelse datum & tid. .word 0 ; Flagg-ord .word 0, 0 ; Presentation av gruppen. .word 1 ; Antal medlemmar .word 59. ; Pekare till f|rsta MEDLEMMAR .word 59. ; Pekare till sista MEDLEMMAR .word 60. ; F|rsta MOTTAGET .word 60. ; Sista MOTTAGET .word 0, 0 ; Senast aktivt, datum &tid . = meet4+200 .word 5 ; MEDLEMMAR (59) .word 0 ; N{sta MEDLEMMAR (ingen) .word 0 ; F|reg}ende MEDLEMMAR .word 1 ; PERSON 1 .blkb0 170 .word 7 ; MOTTAGET (60) .word 0 .word 0 ; Ingen pekare till n{sta. .word ; *** RESERVERAD *** .blkb0 170 f2: .word f3-f2 ;Fil 2 Nod Anv{ndning ; 1 ** RESERVERAD ** ; 2 ** RESERVERAD ** ; 3 ** RESERVERAD ** ; 4 ** RESERVERAD ** ; 5 ** RESERVERAD ** ; 6 ** RESERVERAD ** ; 7 ** RESERVERAD ** ; 8 ** RESERVERAD ** ; 9 ** RESERVERAD ** ; 10 ** RESERVERAD ** ; 11 ** RESERVERAD ** ; 12 ** RESERVERAD ** ; 13 ** RESERVERAD ** ; 14 ** RESERVERAD ** ; 15 ** RESERVERAD ** ; 16 ** RESERVERAD ** ; 17-32 N[RVARANDE ;F|rsta blocket ; (1-16) .word 33. ; Pekare till f|rsta lediga record. .word 0 ; L{nkad lista av lediga noder. .blkb0 508. .blkb0 512. ; N{rvarande f3: .word f4-f3 ;Fil 3 ; Inl{ggs texter. ; ORD1 = Pekare till f|rsta lediga block. (1 based) ; ORD2 = Pekare till f|rsta lediga ord i blocket. (0 based) .word 2 .word 0 .blkb0 508. f4: .word f5-f4 ;Fil 4 ; Best}r av enbart en (1) nodtyp enligt: ; Ord Anv{ndning ; ; 1 Typ av grupp (som innehar noden) ; 0 = Oanv{nd ; 1 = Person ; 2 = M|te ; 2 Fysiskt gruppnummer. ; 3-32 STRING (Gruppens namn (ex. KOM-Administrat|ren)) ; ; STRING: ; Byte 1 L{ngden ; Byte 2-60 Texten. ;Block 1 .word 17. ; F|rsta lediga nod .word 9.+4. ; Lista av lediga noder (se fil 1&2) .blkb0 508. ;data om KOM-Administrat|ren) (9) .word 1 ; person .word 49. ; allid #1 .byte 20$-10$ 10$: .ascii "KOM-Administrat|ren" 20$: .blkb0 73-<20$-10$> ; (10) q5: .word 2 ; m|te .word 50. ; #2 .byte 20$-10$ 10$: .ascii "Presentation (av nya) KOM-deltagare" 20$: .blkb0 73-<20$-10$> ; (11) q6: .word 2 ; m|te .word 51. ; grupp 3 .byte 20$-10$ 10$: .ascii "Presentation (av nya) m|ten" 20$: .blkb0 73-<20$-10$> q7: .word 2 ; M\TE .word 58. ; grupp 4 .byte 20$-10$ 10$: .ascii "KOM Administration" 20$: .blkb0 73-<20$-10$> ; L{nkad lista av fria noder .word 0 ; Ledig (13) .word 14. ; N{sta .blkb0 60. .word 0 ; Ledig (14) .word 15. ; N{sta .blkb0 60. .word 0 ; (15) .word 16. .blkb0 60. .word 0 ; (16) .word 0 ; Sista lediga nod .blkb0 60. f5: .word ef5-f5 ;Fil 5 ; Varje ord {r en nod med ett fysiskt inl{ggs nummer ; eller 0 om inl{gget inte existerar. ; Det logiska nummret best{ms av positionen i filen ; 256 per block. .word 3. ; F|rsta lediga nod b|rjar i block 2. .word 0 ; L{nkad lista av lediga (= inga) ef5: .blkb0 1000 ; Fil 6 anv{nds inte l{ngre f6: .word ef6-f6 ;Fil 6 ; Fil 6 anv{nds f|r att tempor{rt lagra vilka inl{gg som en person har ; l{st. .word 5 ; F|rsta lediga nod finns i block 2 .word 0 ; Inga lediga block. ef6: ; Beskrivning av KOM datafilstruktur. ; ; I varje fil (1-5) {r f|rsta blocket reserverat f|r att ; anv{ndningen av RSTS/E diskmode 5 (guarded update) skall fungera. ; RSTS/E har den }sikten att man m}ste ha block 1 i en fil |ppnad i mode ; 5 (1+4) explicit "lockad" f|r att f} ut|ka filens storlek. ; Det skulle d} vara ol{mpligt att sammtidigt lagra data i block 1 ; d} det skulle sl|a ner KOM avsev{rt att ofta accessa block 1. .end bgn