1 REM Ins{nd av Kristoffer Eriksson <5357>    1986-05-06 01.59.36
10 ! save XSCHMOD, 1986-05-06 01.30
20 ! +-----------------------------------------------------+
21 ! ! XSCHMOD 1.05 - [ndra filskydd o {gare p} flera filer!
22 ! ! F|r LUX-NET med ABC800-serien.                      !
23 ! ! F}r kopieras fritt f|r icke-kommersiella syften,    !
24 ! ! f|rutsatt att denna info bevaras.                   !
25 ! ! Av Kristoffer Eriksson, 1984, 85, 86.               !
26 ! +-----------------------------------------------------+
27 ! Programmet inneh}ller {ven en hel del anv{ndbara rutiner f|r LUX-NET.
28 ! 
29 ! Ver  / Datum    / Sign       / ]tg{rd
30 ! X.00 / 84-12-18 / SKE <5357> /
31 ! 1.00 / 85-02-06 / SKE        / Nya biblioteksrutiner, ny FNChmod
32 ! 1.01 / 85-02-25 / SKE        / Felaktig RETURN i FNChkurval$ r{ttad
33 ! 1.02 / 85-03-14 / SKE        / PF5 p} Ja-Nej-fr}gor }tg{rdad
34 ! 1.03 / 85-10-30 / SKE        / H{nging i FNJanej r{ttad
35 ! 1.04 / 85-11-20 / SKE        / [ven [gare, Grupp och Datum
36 ! 1.05 / 86-05-06 / SKE        / FNLib version 86-01-21
100 ! 
990 INTEGER : EXTEND : ! NO RESUME
1000 ! 
1010 ! Lib$ <- Filnamn (11+1 tkn/namn)
1020 ! 
1030 DEF FNLib(Enhet$,Urval$,Sizeopt,Oldopt) LOCAL S1,S2,F,E,A$=16,N$=11,Dev,L,G
1040   L=12-(Sizeopt<>0)
1050   DIM Lib$=L*256
1060   Lib$=" " : POKE VAROOT(Lib$)+4,0,L
1070   Dev=FNDevnr(Enhet$)
1080   ON ERROR GOTO 1310
1090   OPEN Enhet$ AS FILE 1
1100   IF INSTR(1,"LFD:UFD:PFD:",Enhet$) THEN S1=0 : S2=1 ELSE S1=14 : S2=16
1110   IF Oldopt AND S1<>0 THEN S1=6 : S2=8 : G=4 ELSE G=1
1120   POSIT #1,S1*253*G+236
1130   GET #1 A$ COUNT 16-(Oldopt AND 8)
1140   WHILE LEN(A$)
1150     IF ASCII(A$)=0 THEN 1260
1160     POSIT #1,S2*253*G+1
1170     N=16 : WHILE N
1180       GET #1 N$ COUNT 11
1190       IF N$=STRING$(11,255) OR N$=STRING$(11,0) THEN 1240
1200       IF NOT FNUrval(Urval$,N$) THEN 1240
1210       MID$(Lib$,F*L+1,12)=N$+" "
1220       IF Sizeopt THEN MID$(Lib$,F*L+12,2)=CVT%$(FNSize(Dev,N$))
1230       F=F+1
1240       IF N>1 THEN GET #1 N$ COUNT 5
1250     N=N-1 : WEND 
1260     S2=S2+1
1270   A$=RIGHT$(A$,2) : WEND 
1280   CLOSE 1
1290   POKE VAROOT(Lib$)+4,F*L,SWAP%(F*L)
1300   RETURN E
1310   E=ERRCODE : GOTO 1290
1320 FNEND 
1330 ! 
1335 ! Denna rutin utnyttjas inte i detta program.
1340 DEF FNSize(Dv,Fil$) LOCAL K$=22,K,F$=12,S
1350   REM ASSEMBLERING AV LFD:DOSOPEN.ASM. 1985-02-05 19.43.59
1360   K$=CHR$(14,4,6,0,205,24,96,17,255,255,212,42,96,212,45,96,33,0,0,208,111,201)
1370   F$=Fil$
1380   MID$(K$,2,1)=CHR$(Dv)
1390   K=CALL(VARPTR(K$),VARPTR(F$)) : IF K<>0 THEN 1430 ! RIB -> Dosbuf0
1400   S=PEEK2(62720+236)
1410   K$=CHR$(6,0,205,33,96,33,0,0,208,111,201)
1420   K=CALL(VARPTR(K$)) ! St{ng fil
1430   RETURN S
1440 FNEND 
1450 ! 
1460 ! 
1470 ! Kolla att filnamnet N$ (11 tkn) matchar Urval$ (inkl ".")
1480 ! 
1490 DEF FNUrval(Urval$,N$) LOCAL P,P2
1500   P=INSTR(1,Urval$,".")
1510   IF LEFT$(N$,P-1)<>LEFT$(Urval$,P-1) THEN 1540
1520   IF MID$(N$,9,LEN(Urval$)-P)=RIGHT$(Urval$,P+1) THEN RETURN -1
1530   ! 
1540   IF INSTR(1,Urval$,"?")=0 THEN RETURN 0
1550   P=1 : P2=1 : WHILE P<=LEN(Urval$)
1560     IF MID$(Urval$,P,1)="." THEN P2=8 : GOTO 1590
1570     IF MID$(Urval$,P,1)=MID$(N$,P2,1) THEN 1590
1580     IF MID$(Urval$,P,1)<>"?" THEN RETURN 0
1590   P=P+1 : P2=P2+1 : WEND 
1600   RETURN -1
1610 FNEND 
1620 ! 
1630 ! Kontrollera att urval$ ser ut som ett filnamn
1640 ! 
1650 DEF FNChkurval$(Urval$) LOCAL S$=15,P
1660   IF LEN(Urval$)>12 THEN RETURN "!"
1670   S$=FNCaps$(Urval$)
1680   IF LEN(S$) IF RIGHT$(S$,LEN(S$))="/" THEN S$=LEFT$(S$,LEN(S$)-1)+".U"
1690   P=INSTR(1,S$,".") : IF P=0 THEN S$=S$+"." : GOTO 1690
1700   IF P>9 OR LEN(S$)-P>3 THEN RETURN "!"
1710   IF INSTR(P+1,S$,".") THEN RETURN "!"
1720   P=1 : WHILE P<=LEN(S$)
1730     IF INSTR(1,"ABCDEFGHIJKLMNOPQRSTUVWXYZ][\0123456789.?",MID$(S$,P,1))=0 THEN RETURN "!"
1740   P=P+1 : WEND 
1750   RETURN S$
1760 FNEND 
1770 ! 
1780 ! Kontrollera att enheten finns och har bibliotek
1790 ! 
1800 DEF FNChkenhet$(Enhet$) LOCAL S$=5,P
1810   IF LEN(Enhet$)>4 THEN RETURN "!"
1820   S$=FNCaps$(Enhet$)
1830   P=INSTR(1,S$,":") : IF P=0 THEN S$=S$+":" : GOTO 1830
1840   IF P<>LEN(S$) OR P=1 OR P>4 THEN RETURN "!"
1850   P=FNDevadr(LEFT$(S$,P-1))
1860   IF P>=0 AND P<24576 OR PEEK(P+7)>31 THEN RETURN "!"
1870   RETURN S$
1880 FNEND 
1890 ! 
1900 DEF FNDevadr(Enhet$) LOCAL A
1910   A=PEEK2(65403)
1920   WHILE A
1930     IF CHR$(PEEK(A+2),PEEK(A+3),PEEK(A+4))=LEFT$(Enhet$+"   ",3) THEN RETURN A
1940   A=PEEK2(A) : WEND 
1950   RETURN 0
1960 FNEND 
1970 ! 
1980 DEF FNDevnr(Enhet$) LOCAL A
1990   A=FNDevadr(Enhet$)
2000   IF A THEN RETURN PEEK(A+7) ELSE RETURN A
2010 FNEND 
2020 ! 
2030 DEF FNCaps$(S$) LOCAL P,T$=160
2040   T$=S$
2050   WHILE P="`" THEN MID$(T$,P,1)=CHR$(ASCII(MID$(T$,P,1))-32)
2080   WEND 
2090   RETURN T$
2100 FNEND 
2980 ! 
2990 ! ___
3000 ! Typ: 1=alfanumeriskt, 2=numeriskt
3010 DEF FNGet$(Max,Deflt$,Typ) LOCAL X,P,X$=320,Gt$=1,R,K,D
3020   X$=Deflt$ : X=0 : K=PEEK(SYS(10)+82) : R=PEEK(SYS(10)+83)
3030   ; CYA;
3040   WHILE X=0
3050     ; CUR(R,K) LEFT$(X$+STRING$(Max,95),Max) CUR(R,K+P);
3060     Gt$=FNInkey$ : X=INSTR(1,CHR$(13,196,198,192,8,9,9,9,24,199),Gt$)
3070     ON X+1 GOTO 3140,3190,3190,3190,3190,3080,3090,3190,3190,3100,3120
3080     IF Max>1 THEN P=P+(P>0) : GOTO 3180 ELSE 3190
3090     P=P-(P=Max THEN X$=RIGHT$(X$,Max+1) ELSE X$=""
3110     P=0 : GOTO 3180
3120     IF LEN(X$) THEN P=P+(P>=LEN(X$)) ELSE 3180
3130     X$=LEFT$(X$,P)+RIGHT$(X$,P+2) : P=P+(P>LEN(X$)) : GOTO 3180
3140     IF Gt$>CHR$(127) OR Gt$<" " OR (Typ=2 AND (Gt$<"0" OR Gt$>"9")) THEN ; CHR$(7); : GOTO 3180
3150     IF D=0 THEN X$=""
3160     IF LEN(X$)=320 THEN X$=LEFT$(X$,319)
3170     IF P1 THEN 3230
3210   IF LEN(X$)>Max THEN X$=LEFT$(X$,Max)
3220   Op=1 : GOTO 3240
3230   Op=(INSTR(1,"7 254 368",NUM$(X))-5)/2 : X$=Deflt$
3240   ; CUR(R,K) X$ SPACE$(Max-LEN(X$)) CUR(R,K); : RETURN X$
3250 FNEND 
3260 ! 
3270 DEF FNInkey$ LOCAL Gt$=1,A,C,B,S
3280   S=80/PEEK(SYS(10)+84)
3290   WHILE 1
3300     A=30720+PEEK(SYS(10)+83)*80+PEEK(SYS(10)+82)*S
3310     B=INP(53)
3320     C=PEEK2(SYS(10)+82)
3330     OUT 56,11,57,9,56,14,57,SWAP%(A),56,15,57,A,56,10,57,8 OR 96
3340     WHILE SYS(5)<128 : IF S=1 THEN ; CUR(0,59) GRN TIME$;
3350     WEND 
3360     OUT 56,11,57,9,56,10,57,40
3370     OUT 53,B
3380     POKE SYS(10)+82,C,SWAP%(C)
3390     GET Gt$ : IF Gt$<>CHR$(247) THEN RETURN Gt$
3400     ON ERROR GOTO 3500
3410     PREPARE LEFT$("R",-((PEEK(24688) AND 254)=8))+"PR:" AS FILE 99
3420     A=30800 : WHILE A<32720
3430       B=A-80 : WHILE B31 THEN ; #99 CHR$(C); ELSE ; #99 " ";
3470       B=B+S : WEND 
3480     A=A+80 : ; #99 : WEND 
3490     CLOSE 99
3500   WEND 
3510 FNEND 
3520 ! 
3530 DEF FNJanej(Deflt$) LOCAL Gt$=1
3540   WHILE 1
3550     Gt$="" : WHILE Gt$="" : Gt$=FNGet$(1,Deflt$,1) : WEND 
3560     IF INSTR(1,"Jj",Gt$) THEN ; "J" CHR$(8); : RETURN -1
3570     IF INSTR(1,"Nn",Gt$) THEN ; "N" CHR$(8); : RETURN 0
3580   ; CHR$(7); : WEND 
3590 FNEND 
3980 ! 
3990 ! ___
4000 DEF FNFel(N,Typ) LOCAL Gt$=1
4010   ; CUR(23,0) CHR$(7) RED NWBG YEL "> ";
4020   IF Typ=1 THEN ; FNBasicfel$(N); : GOTO 4060
4030   IF Typ=2 THEN ; FNDosfel$(N); : GOTO 4060
4040   IF Typ=3 THEN ; FNNettrap$(N); : GOTO 4060
4050   ON N GOSUB 4100,4110
4060   ; " <" BLBG;
4070   WHILE INSTR(1,CHR$(24,192),FNInkey$)=0 : WEND 
4080   ; CUR(23,0) SPACE$(PEEK(SYS(10)+84));
4090   RETURN N OR SWAP%(Typ)
4100   ; "Felaktig enhet"; : RETURN 
4110   ; "Felaktigt urval"; : RETURN 
4120   ; "Felaktigt anv{ndarnamn"; : RETURN 
4130 FNEND 
4140 ! 
4150 DEF FNBasicfel$(X)
4160   IF X=48 THEN RETURN "Fel i biblioteket"
4170   IF X=35 THEN RETURN "Kontrollsummafel vid l{sning"
4180   IF X=36 THEN RETURN "Kontrollsummafel vid skrivning."
4190   IF X=39 THEN RETURN "Filen skrivskyddad"
4200   IF X=40 THEN RETURN "Filen l{sskyddad"
4210   IF X=41 THEN RETURN "Skivan {r full"
4220   IF X=42 THEN RETURN "Enheten ej klar"
4230   IF X=43 THEN RETURN "Skivan skrivskyddad"
4240   IF X=46 THEN RETURN "Biblioteket ej inst{llt"
4250   IF X=52 THEN RETURN "G}r inte p} denna enhet"
4260   IF X=51 THEN RETURN "Enheten upptagen"
4270   RETURN "Felkod "+NUM$(X)
4280 FNEND 
4290 ! 
4300 DEF FNDosfel$(N)
4310   IF N AND 1 THEN RETURN "Enheten upptagen"
4320   IF N AND 2 THEN RETURN "Fel order till enheten"
4330   IF N AND 8 THEN RETURN "Kontrollsumma-fel"
4340   IF N AND 16 THEN RETURN "Hittar inte sektorn"
4350   IF N AND 64 THEN RETURN "Skrivskyddad fil"
4360   IF N AND 128 THEN RETURN "Enheten ej klar"
4370   RETURN "Ok{nt dosfel: "+NUM$(N)
4380 FNEND 
4390 ! 
4400 DEF FNNettrap$(N)
4410   IF N=132 THEN RETURN "Filen skyddad"
4420   RETURN "Net-trap "+NUM$(N)
4430 FNEND 
4440 ! 
5000 ! ___
5010 DEF FNSetrib(Dv,Fil$,Grp.,[g$,Tid$,Stat) LOCAL K$=22,K,F$=12,T,S,B$=0
5020   REM ASSEMBLERING AV LFD:DOSOPEN.ASM. 1985-02-05 19.43.59
5030   K$=CHR$(14,4,6,0,205,24,96,17,255,255,212,42,96,212,45,96,33,0,0,208,111,201)
5040   POKE VAROOT(B$),0,1,0,SWAP%(62720),0,1
5050   F$=Fil$
5060   MID$(K$,2,1)=CHR$(Dv)
5070   K=CALL(VARPTR(K$),VARPTR(F$)) : IF K<>0 THEN 5170 ! RIB -> Dosbuf0
5080   IF Grp.>=0 THEN MID$(B$,239,2)=CVT%$(Grp.)
5090   IF LEN([g$) THEN MID$(B$,241,8)=LEFT$(FNCaps$([g$)+SPACE$(8),8)
5100   IF LEN(Tid$) THEN MID$(B$,249,6)=Tid$
5110   S=ASCII(MID$(B$,256,1)) AND 128
5120   IF Stat>=0 THEN MID$(B$,256,1)=CHR$(S OR Stat)
5130   K=FNTalknet(14+64,11,0*16,10,0,0,0*16)
5140   IF K THEN RETURN -K
5150   K$=CHR$(6,0,205,33,96,33,0,0,208,111,201)
5160   K=CALL(VARPTR(K$)) : IF K=0 THEN RETURN 0 ! St{ng fil
5170   RETURN K
5180 FNEND 
5190 ! 
5200 DEF FNSkyddskod(Skydd$) LOCAL S,V,I
5210   S=63 : I=1
5220   WHILE I<=LEN(Skydd$) AND I<=2
5230     IF INSTR(1,"Bb",MID$(Skydd$,I,1)) THEN S=S OR 128 : GOTO 5260
5240     IF INSTR(1,"Xx",MID$(Skydd$,I,1)) THEN S=S OR 64 : GOTO 5260
5250     IF INSTR(1,"SsLl",MID$(Skydd$,I,1)) THEN 5270
5260   I=I+1 : WEND 
5270   V=0 : WHILE I<=LEN(Skydd$) AND V>=0
5280     IF INSTR(1,"Ss",MID$(Skydd$,I,1)) THEN S=S XOR 2^(V OR 1) : GOTO 5300
5290     IF INSTR(1,"Ll",MID$(Skydd$,I,1)) THEN S=S XOR 2^(V AND 254)
5300   I=I+1 : V=V+1 : WEND 
5310   RETURN S
5320 FNEND 
5330 ! 
5340 DEF FNTalknet(Fc,Sfc,B,C,D,E,X) LOCAL Z
5350   POKE 64798,X
5360   POKE 64961,Fc,Sfc,C,B,E,D
5370   Z=CALL(24672)
5380   RETURN PEEK(64962)
5390 FNEND 
5400 ! 
5410 DEF FNR$ LOCAL S$=0,P1,P2
5420   POKE VAROOT(S$),80,0,0,SWAP%(30720),80,0
5430   P1=INSTR(3,S$,"") : IF P1=0 THEN 5460
5440   P2=INSTR(P1+2,S$,"") : IF P2=0 THEN 5460
5450   RETURN MID$(S$,P1+1,P2-P1-1)
5460   RETURN " (c) Kristoffer Eriksson"
5470 FNEND 
6000 ! 
6010 ! Initiera Fil-visnings-f|nstret
6020 ! Wr0, Wk0 = F|nstrets placering, Wak = Antal kolumner, Wl = Antal rader
6030 ! Wr = Aktuell rad |verst i f|nstret
6040 ! 
6050 DEF FNFwinit LOCAL I
6060   Wr0=2 : Wk0=2 : Wr=0 : Wak=5 : IF Wid<80 THEN Wak=2
6070   Wl=(LEN(Lib$)/12+Wak-1)/Wak : IF Wl>19 THEN Wl=19
6080   Z=FNRuta(Wr0,Wk0,Wl,15*Wak+1,GYEL)
6090   I=0 : WHILE I=(Wr+Wl)*Wak THEN D=1 : GOTO 6170
6160   GOTO 6190
6170   Z=FNScroll(Wr0,Wk0,Wl,Wak*15+1,D) : Wr=Wr+D
6180   ; CUR(Wr0+P0/Wak-Wr,Wk0) YEL FNFwrad$(P0/Wak*Wak)
6190   ; CUR(Wr0+P0/Wak-Wr,Wk0+3+MOD(P0,Wak)*15);
6200   RETURN 0
6210 FNEND 
6220 ! 
6230 DEF FNFwrad$(P0) LOCAL P
6240   P=P0*12+1 : WHILE P" T$; : RETURN 0
6340   I=1 : WHILE I<=LEN(T$)+2
6350     PUT CHR$(ASCII(MID$("  "+T$,I,1)) OR 128)
6360   I=I+1 : WEND 
6370   RETURN 0
6380 FNEND 
6390 DEF FNInv806$
6400   OUT 53,INP(53) AND 192 OR (INP(53) AND 7)*8 OR (INP(53) AND 56)/8
6410   RETURN ""
6420 FNEND 
6430 ! 
6440 DEF FNPlocka LOCAL P,Gt$=1,I
6450   Z=FNFwinit
6460   ; CUR(22,0) YEL "RETURN=M{rk/M{rk ej, PF1=Klart,        " YEL "PF3=<--, PF4=-->, PF5=Upp, PF7=Ned";
6470   ! 
6480   Gt$=" " : WHILE ASCII(Gt$)<>192
6490     Z=FNFwcur(I)
6500     IF Gt$<>"A" THEN Gt$=FNInkey$
6510     P=INSTR(1,CHR$(13,8,9,194,195,196,198,192,211)+"Aa",Gt$)
6520     ON P+1 GOTO 6540,6560,6630,6620,6630,6620,6640,6650,6660,6550,6550,6550
6530     ! 
6540     ; CHR$(7); : GOTO 6500
6550     Gt$="A"
6560     P=MID$(Lib$,I*12+12,1)="J" AND Gt$<>"A"
6570     MID$(Lib$,I*12+12,1)=MID$(" J",P+2,1)
6580     ; CHR$(8,8);
6590     P=FNInv(MID$(Lib$,I*12+1,8)+"."+MID$(Lib$,I*12+9,3)+" ", NOT P)
6600     IF I=LEN(Lib$)/12-1 AND Gt$="A" THEN Gt$=""
6610     ! 
6620     I=I-(I0) : GOTO 6660
6640     I=I-(Wak AND I>=Wak) : GOTO 6660
6650     IF I30800+R*80
6920     POKE VAROOT(D$),B2,0,I,SWAP%(I),B2,0
6930     POKE VAROOT(S$),B2,0,I-80,SWAP%(I-80),B2,0
6940     D$=S$
6950   I=I-80 : WEND 
6960   ; CUR(R,K) WHT SPACE$(B-1);
6970   RETURN -1
6980 FNEND 
6990 ! 
7000 ! ________________________________________________________________
7010 DIM Dv$=4,Urval$=12,A$=80,Skydd$=8,Fil$=12,[gare$=8,Tid$=17,Rub$=80
7020 Grupp.=-1
7030 Wid=PEEK(SYS(10)+84)
7040 Abc=800 : IF PEEK(39)=4 THEN Abc=806 ELSE IF PEEK(39)=3 THEN Abc=802
7050 IF Abc=806 THEN Sattr=PEEK(PEEK2(116)+6) : POKE PEEK2(116)+6,4
7060 ! 
7070 Rub$=FNR$
7080 ; CHR$(12) GRN " XSCHMOD 1.05 ";
7090 PUT Rub$
7100 IF Wid=80 THEN ; CUR(0,58) " " ELSE ; CUR(0,39) ""
7110 ; GRN STRING$(Wid-1,ASCII("-"))
7120 ; GRN "Systemrutiner - [ndra filstatus"
7130 ! 
7140 DATA Enhet: _,"Urval:  ",,"Ny      [gare:  ","Grupp:  ",,
7150 DATA "Beh|righeter    ",Login l{s: N,[gare skriv: J
7160 DATA [gare l{s: J,Grupp skriv: N,Grupp l{s: J,\vriga skriv: N,\vriga l{s: N
7170 RESTORE 7140
7180 FOR I=1 TO 14
7190   READ A$
7200   ; CUR(I+3,17-LEN(A$)) YEL A$
7210 NEXT I 
7220 Skydd$="--sl-l--"
7230 ; CUR(18,16) YEL Skydd$
7240 ; CUR(22,0) YEL "PF1=Meny0, PF5=Upp, PF7=Ned"
7250 ; CUR(21,0) GRN STRING$(Wid-1,ASCII("-"))
7260 ! __
7270 ; CUR(4,17); : Dv$=FNGet$(4,Dv$,1)
7280 ON Op+2 GOTO 7270,8170,7290
7290 A$=FNChkenhet$(Dv$)
7300 IF A$="!" THEN Z=FNFel(1,0) : GOTO 7270 ELSE Dv$=A$ : ; Dv$
7310 Dv=PEEK(FNDevadr(LEFT$(Dv$,LEN(Dv$)-1))+7)
7320 ! __
7330 ; CUR(5,17); : Urval$=FNGet$(12,Urval$,1)
7340 ON Op+2 GOTO 7270,8170,7350
7350 A$=FNChkurval$(Urval$)
7360 IF A$="!" THEN Z=FNFel(2,0) : GOTO 7330 ELSE Urval$=A$ : ; Urval$
7370 ! __
7380 ; CUR(7,17); : [gare$=FNGet$(8,[gare$,1)
7390 ON Op+2 GOTO 7330,8170,7400
7400 A$=FNChkurval$([gare$)
7410 IF INSTR(1,A$,"?") THEN A$="!"
7420 IF A$<>"!" THEN A$=LEFT$(A$,INSTR(1,A$,".")-1)
7430 IF A$="!" THEN Z=FNFel(3,0) : GOTO 7330 ELSE [gare$=A$ : ; [gare$
7440 ! __
7450 IF Grupp.>=0 THEN A$=NUM$(Grupp.) ELSE A$=""
7460 ; CUR(8,17); : A$=FNGet$(6,A$,1)
7470 ON Op+2 GOTO 7380,8170,7480
7480 IF A$="" THEN Grupp.=-1 : GOTO 7520
7490 ON ERROR GOTO 7460 : Grupp.=FIX(VAL(A$))
7500 IF Grupp.<0 THEN Grupp.=65536.+Grupp.
7510 ; LEFT$(NUM$(Grupp.)+SPACE$(6),6)
7520 ! __
7530 I=2
7540 ; CUR(20,0) YEL "TOM = Of|r{ndrat filskydd"
7550 WHILE I<=8
7560   ; CUR(9+I,17);
7570   A$=FNCaps$(FNGet$(1,MID$("JJJN ",INSTR(1,"xsl-*",MID$(Skydd$,I,1)),1),1))
7580   IF Op=0 THEN 8170
7590   IF A$=" " OR A$="*" OR A$="" THEN Skydd$="-*******" : GOTO 7620
7600   IF A$<>"J" AND A$<>"N" THEN ; CHR$(7); : GOTO 7570
7610   MID$(Skydd$,I,1)=MID$(MID$("bxslslsl",I,1)+"-",2+(A$="J"),1)
7620   ; CUR(18,16) YEL Skydd$
7630   I=I+Op
7640   IF I=1 THEN ; CUR(20,0) SPACE$(35) : GOTO 7450
7650 WEND 
7660 IF Skydd$="-*******" THEN Skydd=-1 : GOTO 7690
7670 IF INSTR(1,Skydd$,"*") THEN 7550
7680 Skydd=FNSkyddskod(Skydd$)
7690 ! 
7700 ! __Biblioteket__
7710 ; CUR(22,0) SPACE$(Wid) CUR(22,0) YEL "S|ker '" Dv$+Urval$ "'."
7720 Z=FNLib(Dv$,Urval$,0,0)
7730 ; CUR(22,0) SPACE$(Wid)
7740 IF Z THEN Z=FNFel(Z,1) : GOTO 8170
7750 ; CUR(2,0) SPACE$(19*Wid);
7760 IF Lib$="" THEN ; CUR(3,0) YEL "Inga filer funna." : GOTO 8170
7770 ! 
7780 ! __V{lj filer__
7790 IF Wid<=40 THEN ; CUR(1,35) GRN CUR(21,35) GRN
7800 Z=FNPlocka
7810 ! 
7820 ! __Kontrollfr}ga__
7830 ; CUR(22,0) SPACE$(79) CUR(22,0);
7840 ; YEL "Ska de m{rkta filerna f} angiven status ? ";
7850 IF NOT FNJanej("N") OR Op<>1 THEN 7080
7860 ! 
7870 ! __Rensa ut icke valda__
7880 I=1 : WHILE I"J" THEN 7910
7900   MID$(Lib$,I+11,1)=" " : I=I+12 : GOTO 7920
7910   Lib$=LEFT$(Lib$,I-1)+RIGHT$(Lib$,I+12)
7920 WEND 
7930 ; CUR(2,0) SPACE$(19*Wid) GRN STRING$(Wid-1,ASCII("-"))
7940 IF Wid<=40 THEN ; CUR(21,35) GRN
7950 Z=FNFwinit
7960 IF Lib$="" THEN 8170
7970 ! 
7980 ! __Utf|r chmod__
7990 ; CUR(22,0) SPACE$(79);
8000 I=0 : I0=0
8010 WHILE I192
8020   Fil$=MID$(Lib$,I*12+1,11)
8030   Z=FNFwcur(I)
8040   ; CUR(22,0) YEL [gare$ " " Skydd$ "  Fil: " LEFT$(Fil$,8) "." RIGHT$(Fil$,9);
8050   Z=FNSetrib(Dv,Fil$,Grupp.,[gare$,Tid$,Skydd)
8060   IF Z<0 THEN Z=FNFel(-Z,3) : GOTO 8110
8070   IF Z THEN Z=FNFel(Z,1) : GOTO 8110
8080   MID$(Lib$,I*12+12,1)="J"
8090   Z=FNFwcur(I) : ; CHR$(8,8);
8100   Z=FNInv(LEFT$(Fil$,8)+"."+RIGHT$(Fil$,9)+" ",-1)
8110 I=I+1 : WEND 
8120 CLOSE 
8130 IF SYS(5)>127 THEN GET A$
8140 GOTO 8180
8150 ! 
8160 ! __
8170 ; CUR(21,0) GRN STRING$(Wid-1,ASCII("-")) " ";
8180 ; CUR(22,0) SPACE$(Wid) CUR(22,0) YEL "[ndra skydd p} fler filer J/N ? ";
8190 IF FNJanej("N") THEN 7080 ELSE IF Op<>1 THEN 8190
8200 ; CUR(23,0) YEL "Programbyte..." SPACE$(50);
8210 IF Abc=806 THEN POKE PEEK2(116)+6,Sattr
8220 ON ERROR GOTO 8230 : CHAIN "XSMENU0"
8230 ; CUR(22,0) SPACE$(2*Wid-1) CUR(21,0);
8240 END