1000 ! * CHOWN.BAC 1005 INTEGER : EXTEND 1010 ; '** Change owner on a file **' 1020 ; ' Ver X.03, 1985-02-15' 1030 ; ' Copyright 1984 Dataindustrier AB' 1040 ; 1050 ! * Written by Benny L|fgren 1060 ! ** ** ** ** ** ** ** ** ** ** ** 1070 ! * 1080 ! * Ver date / Ver nb / Sign / Note 1090 ! * 84-08-01 / X.00 / BL / Main 1100 ! * 84-10-31 / X.01 / L-G / Write error code from central 1110 ! * 85-02-15 / X.02 / BL / Accessible from DOS, FNStartpar$ handling 1120 ! * 85-02-15 / X.03 / BL / Talknet calls NETCALL + checks if Lux-net 1130 ! * 1140 ! ** ** ** ** ** ** ** ** ** ** ** 1150 ! * 1160 ! EJECT 1170 ! ******************************** 1180 ! * 1190 ! * Main routine 1200 ! * 1210 File$=FNStartpar$ : IF File$=SPACE$(LEN(File$)) GOTO 1270 1220 WHILE ASCII(File$)=32 : File$=RIGHT$(File$,2) : WEND ! Skip spaces 1230 I=INSTR(1,Stpar$,",") : IF I=0 I=INSTR(1,Stpar$," ") 1240 IF I Newown$=LEFT$(File$,I-1) : File$=RIGHT$(File$,I+1) 1250 GOTO 1280 1260 ! 1270 INPUT "File: "File$ : IF File$="" GOTO 1460 1280 IF INSTR(1,File$,':')=0 Dr=255 : GOTO 1320 1290 Dr=FNDrsel(LEFT$(File$,INSTR(1,File$,':'))) : IF Dr GOTO 1310 1300 ; "Invalid drive." : GOTO 1270 1310 File$=RIGHT$(File$,INSTR(1,File$,':')+1) : IF File$="" File$="/" 1320 File$=FNCaps$(File$) : IF RIGHT$(File$,LEN(File$))<>"/" File$=File$+"/" 1330 File$=File$+CHR$(13) : Prg$=CHR$(1,Dr,0,205,24,96,216,33,0,0,201) 1340 Z=CALL(VARPTR(Prg$),VARPTR(File$)) ! Open long file name 1350 IF Z ; "Error at open: " Z : GOTO 1460 1360 Prg$=CHR$(1,Dr,0,205,63,96,195,45,96) 1370 Z=CALL(VARPTR(Prg$)) ! Read RIB 1380 IF Z ; "Error at RIB read: " Z : GOTO 1440 1390 IF Newown$=SPACE$(LEN(Newown$)) INPUT "New owner: "Newown$ 1400 Newown$=LEFT$(FNCaps$(Newown$)+SPACE$(11),11) 1410 Z=FNTalknet(14+16,11,0,6,SWAP%(VARPTR(Newown$)),VARPTR(Newown$)) 1420 IF Z=-1 ; "No Lux-net or too old Lux-net DOS." : GOTO 1440 1430 IF Z ; 'Errcode from central ' Z 1440 Prg$=CHR$(1,Dr,0,195,33,96) : Z=CALL(VARPTR(Prg$)) ! Close file 1450 ! 1460 ; FNExit 1470 ! 1480 ! ********************************* 1490 ! * 1500 ! * Scan device table for disk 1510 ! * 1520 DEF FNDrsel(A$) LOCAL I,Dr$=3,Ptr 1530 IF RIGHT$(A$,LEN(A$))=":" Dr$=LEFT$(A$,LEN(A$)-1) ELSE Dr$=A$ 1540 Dr$=FNCaps$(Dr$) : WHILE LEN(Dr$)<3 : Dr$=Dr$+" " : WEND 1550 Ptr=PEEK2(65403) 1560 WHILE Ptr : I=0 1570 WHILE I<3 : I=I+1 1580 IF PEEK(Ptr+1+I)<>ASCII(RIGHT$(Dr$,I)) GOTO 1600 1590 WEND : GOTO 1620 1600 Ptr=PEEK2(Ptr) 1610 WEND : RETURN 0 ! Drive not found 1620 I=PEEK(Ptr+7) : IF I>3 RETURN I 1630 RETURN PEEK(PEEK2(24683)) ! DR_: conversion 1640 FNEND 1650 ! 1660 ! ********************************* 1670 ! * 1680 ! * Convert lower case to caps 1690 ! * 1700 DEF FNCaps$(A$) LOCAL I,Str$=160,Char$=1 1710 WHILE I'_' AND Char$<'' Char$=CHR$(ASCII(Char$)-32) 1730 Str$=Str$+Char$ 1740 WEND : RETURN Str$ 1750 FNEND 1760 ! 1770 ! ********************************* 1780 ! * 1790 ! * Do communication with net central. 1800 ! * 1810 DEF FNTalknet(Fc,Sfc,B,C,D,E) LOCAL Z 1820 IF PEEK(PEEK2(24616))=201 RETURN -1 ! This is no Lux-net!!! 1830 POKE 64798,255 ! 0FFH -> BSAVE. => TFT. fake (use DOSBUF0). 1840 POKE 64961,Fc ! FC -> MSG.FC (Function code). 1850 POKE 64962,Sfc ! SFC -> MSG.SFC (Subfunction code). 1860 POKE 64963,C,B ! MSG.PDN, MSG.ERRB (BC register to/from central). 1870 POKE 64965,E,D ! Register DE to/from central. 1880 Z=CALL(24615) ! NETCALL. => Talk to net central 1890 RETURN PEEK(64962) 1900 FNEND 1910 ! 1920 ! ********************************* 1930 ! * 1940 ! * Check if device is remote or local 1950 ! * 1960 DEF FNRemote(Devnr) 1970 OUT 1,PEEK(PEEK2(24683)+(Devnr AND 29)) AND 63 1980 IF (PEEK(PEEK2(24683)+(Devnr AND 29)+1) AND 128)=0 RETURN 0 1990 IF (Devnr AND 3)<=1 OR INP(Stat)=255 THEN RETURN -1 ELSE RETURN 0 2000 FNEND 2010 ! 2020 ! ********************************* 2030 ! * 2040 ! * Check if user entered from DOS or BASIC 2050 ! * 2060 DEF FNChkdos LOCAL I 2070 I=PEEK2(65302)-160 2080 WHILE I<160 : IF PEEK2(I)=-212 RETURN -1 2090 IF PEEK(I)<>13 I=I+1 : WEND 2100 RETURN 0 2110 FNEND 2120 ! 2130 ! ********************************** 2140 ! * 2150 ! * Get start parameter string (if any) 2160 ! * 2170 DEF FNStartpar$ LOCAL Cmdsp,I,Cmd$=160 2180 Cmdsp=PEEK2(65302)-160 2190 WHILE I<160 : I=I+1 : IF PEEK(Cmdsp+I-1)=44 GOTO 2220 2200 IF PEEK(Cmdsp+I-1)=13 RETURN '' ! No startpar string 2210 WEND : RETURN '' ! No startpar string 2220 IF PEEK(Cmdsp+I)=255 I=I+1 ! Skip DOS-entry flag 2230 WHILE I<160 : IF PEEK(Cmdsp+I)=13 GOTO 2260 2240 IF PEEK(Cmdsp+I)<32 OR PEEK(Cmdsp+I)>127 RETURN '' 2250 Cmd$=Cmd$+CHR$(PEEK(Cmdsp+I)) : I=I+1 : WEND 2260 RETURN Cmd$ 2270 FNEND 2280 ! 2290 ! ************************************* 2300 ! * 2310 ! * Exit to DOS or BASIC 2320 ! * 2330 DEF FNExit LOCAL A$=21,A 2340 IF FNChkdos=0 GOTO 2390 ELSE CLOSE ! We MUST close ALL files!!! 2350 A$='CMDINT SYS'+CHR$(14,255,205,27,96,216,195,3,193) 2360 A=VARPTR(A$) 2370 IF CALL(A+11,A) ; "Can't load CMDINT.SYS, press any key for RESET!"; 2380 GET A$ : IF CALL(0) REM Just a miracle would get through here... 2390 END ! End to get out of a function is ugly but... 2400 FNEND