> NetFSUtl/s 0.10 , 01-May-1999 v0.10 JGH: Initial version  (D Veneer for network commands adjusting for FileSwitch oddities. 2G On RISC OS 3+, FileSwitch preprocess many filing system commands. ]":EQUB 13 v EQUB 0 .NetFSUtils_Help IEQUS "NetFSUtils translates *Free, *Ex and *Rename on NetFS.":EQUB 13  EQUB 0  ALIGN : : .Initialise stmfd (sp)!,{link} mov r0,#6 mov r3,#128 6swi "OS_Module" ; Claim 128 bytes of workspace 3str r2,[r12] ; Save pointer to workspace : &mov r0,#15 ; FSControlVec  adr r1,SJFSControl ldr r2,[r12]  0swi "OS_Claim" ; Hook into OS_FSControl *: 4adr r0,SetAlias >/swi "XOS_CLI" ; Claim '*FREE' command Hmov r0,#0 R*cmp r0,r0 ; Clear flags, etc \ldmfd (sp)!,{pc} f: p: z .Finalise stmfd (sp)!,{link} adr r0,UnSetAlias 1swi "XOS_CLI" ; Release '*FREE' command : &mov r0,#15 ; FSControlVec adr r1,SJFSControl ldr r2,[r12] .swi "OS_Release" ; Release OS_FSControl : 2ldr r2,[r12] ; Get pointer to workspace cmp r2,#0 movne r0,#7 1swine "OS_Module" ; Release it if it exists mov r0,#0 'str r0,[r12] ; Clear pointer *cmp r0,r0 ; Clear flags, etc $ldmfd (sp)!,{pc} . .SetAlias 8.EQUS "Set Alias$Free NetFree %*0":EQUB 13 B.UnSetAlias L#EQUS "UnSet Alias$Free":EQUB 13 V ALIGN `: j: t2.NetFree ; *NetFree [] ~*stmfd (sp)!,{r0,link} ; r0=>parameters 0bl CheckNetFS ; If current FS NetFS? bne NotNetFree 8adr r0,RunFree ; If NetFS, point to '/%.Free' 5swi "OS_CLI" ; Issue replacement command ldmfd (sp)!,{r0,pc} : .NotNetFree 3ldmfd (sp)!,{r1} ; Get r1=>parameters back 1ldr r12,[r12] ; Get workspace pointer -adr r0,ROMFree ; Point to '%Free ' 5bl CommandReplace ; Build replacement command 5swi "OS_CLI" ; Issue replacement command ldmfd (sp)!,{pc}  .RunFree EQUS "/%.Free":EQUB 13  .ROMFree (EQUS "%Free " 2 ALIGN <: F: P.SJFSControl Zcmp r0,#6 dbeq SJEx ncmp r0,#25 xbeq SJRename #movs pc,link ; Pass on : :  .SJEx /stmfd (sp)!,{r0-r4,link} ; r1=>parameters bl CheckNetPath 5ldmnefd (sp)!,{r0-r4,link} ; Restore if not NetFS 5movnes pc,link ; Pass on if not NetFS +adr r0,NetEX ; R0=>'/EX ' ;bl CommandReplace ; Create replacement command :swi "OS_CLI" ; Issue replacement command (ldmfd (sp)!,{r0-r4,link} ; Restore &ldmfd (sp)!,{pc} ; Claim  .NetEX EQUS "net:/EX "  ALIGN ": ,: 6 .SJRename @8stmfd (sp)!,{r0-r9,link} ; r1=>oldname, r2=newname J4mov r0,#3 ; File being modified T>mov r6,#7 ; No special field, r1=>oldname ^>mov r7,#0 ; No special field, r2=>newname h?ldr r8,NetFSWord ; Filing system information word r'mov r9,#520 ; Rename |Bswi "OS_UpCall" ; Warn Filer about rename operation : ,mov r5,r2 ; r5=>oldname bl CheckNetPath 1ldmnefd (sp)!,{r0-r9,link} ; Not NET, restore 1movnes pc,link ; Not NET, pass on ,mov r4,r1 ; r4=>oldname mov r1,r5 bl CheckNetPath 1ldmnefd (sp)!,{r0-r9,link} ; Not NET, restore 1movnes pc,link ; Not NET, pass on 9mov r5,r1 ; r5=>newname, r4=>oldname : .adr r0,NetRename ; r0=>'RENAME ' ,mov r1,r4 ; r1=>oldname Dbl CommandReplace ; Create start of replacement command mov r4,#" " &8strb r4,[r2,#-1] ; Replace with 0,mov r1,r5 ; r1=>newname :/bl CommandLp2 ; Add to command D: N9mov r1,r0 ; r1=>command in workspace X-mov r0,#0 ; r0=NetOp_Cmd berror in workspace  swi "XOS_GenerateError" *-ldmfd (sp)!,{pc} ; Return error 4.NetFSWord >EQUD &86C60505 H.NetRename REQUS "RENAME " \ ALIGN f.errUnknown p1EQUD 254:EQUS "Unexpected FSOp result":EQUB 0 z ALIGN : : ; On entry, R1=>pathname 0; On exit, R1=>pathname, net prefix skipped ; R0,R2 corrupted &; EQ=NetFS, NE=not NetFS ; .CheckNetPath stmfd (sp)!,{r1,link} mov r0,#13 mov r2,#0 /swi "XOS_FSControl" ; Check for fs prefix ; bad prefix - VS ; no prefix - 13,r1,0 ; unknown - 13,r1,0  ; net prefix - 13,5,non-zero $;movvs r2,#0 ; Flawed prefix, force to unknown .cmp r2,#0 87beq CheckNetFS1 ; No prefix, check current FS Bcmp r1,#5 L3ldmfd (sp)!,{r1} ; Get r1=>parameters back V4ldmnefd (sp)!,{pc} ; NE=not NET filing system `.CheckNetPrefix j,ldrb r0,[r1],#1 ; Step past prefix tcmp r0,#":" ~bne CheckNetPrefix 0ldmfd (sp)!,{pc} ; EQ=NET filing system : .CheckNetFS stmfd (sp)!,{r1,link} .CheckNetFS1 mov r0,#0 mov r1,#0 6swi "OS_Args" ; Find current filing system .CheckNetFS2 cmp r0,#5 0ldmfd (sp)!,{r1,pc} ; EQ=NET filing system : : '; On entry, R0=>replacement command  ; R1=>command line '; On exit, R0=>newly built command (0; R1=>after in source command 2.; R2=>after in dest command <(; R3=remaining buffer size F; R4= P; Z.CommandReplace d&mov r2,r12 ; R2=>workspace n&mov r3,#127 ; Buffer size-1 x.CommandLp1 1ldrb r4,[r0],#1 ; Copy replacement command strb r4,[r2],#1 (sub r3,r3,#1 ; Decrement count cmp r4,#" " )bne CommandLp1 ; Loop until space .CommandLp2 *ldrb r4,[r1],#1 ; Copy command line strb r4,[r2],#1 (subs r3,r3,#1 ; Decrement count beq CommandEnd cmp r4,#"!" 9bcs CommandLp2 ; Loop until space or control code .CommandEnd mov r4,#13 /strb r4,[r2,#-1] ; Ensure terminator 1mov r0,r12 ; R0=>command in workspace "mov pc,link ,: 6] @)"SAVE NetFSUtils "+~mcode%+" "+~O% J*SetType NetFSUtils Module T*Stamp NetFSUtils