! SSI
include "inc:util.imp"
include "inc:fs.imp"
externalroutine openstreams(string (255)which,defaults)
string (255)array d(2:7)
integer i
onevent 3,4,9 start
selectoutput(0); printstring(event_message); newline
stop
finish
d(i) = "" for i = 2,1,7
for i = 1,1,2 cycle
defineparam("in1",d(2),0)
defineparam("in2",d(4),0)
defineparam("in3",d(6),0)
defineparam("out1",d(3),pamnewgroup)
defineparam("out2",d(5),0)
defineparam("out3",d(7),0)
processparameters(defaults) if i=1
processparameters(which) if i=2
repeat
openinput(i,d(2*i)) for i = 1,1,3
selectinput(1)
openoutput(i,d(2*i+1)) for i = 1,1,3
selectoutput(1)
end
externalroutine delete(string (255)file)
integer x
x = fcomm('D'<<8,file)
end
externalroutine rename(string (255)old,new)
string (63)s
integer x
s = old.",".new
x = fcomm('B'<<8,s)
end
externalroutine copy(string (255)from,to)
string (63)s
integer x
s = from.",".to
x = fcomm('O'<<8,s)
end
externalroutine permit(string (255)file,perms)
string (63)s
integer x
s = file.",".perms
x = fcomm('E'<<8,s)
end
externalroutine quote(string (255) pass) ;!Added by JHB
string (63) s
integer x
s = pass
x = fcomm('Q'<<8,s)
end
externalstring (255)fn finfo(string (255)directory,integer number)
ownstring (255)s
s = directory.","
number = number&1023
s = s.tostring(number>>4+'0')
s = s.tostring(number&15+'0')
length(s) = fcommr('F'<<8,s,charno(s,1),255)
result = s
end
externalstring (255)fn ninfo(string (255)file)
string (255)s
length(s) = fcommr('N'<<8,file,charno(s,1),255)
result = s
end
recordformat finfof(string (23)name,string (5)perms,string (9)date,time,
integer blocks,extents)
externalroutine unpack finfo(string (255)s,record (finfof)name r)
integer pos=1
routine scan
pos = pos+1 while pos<=length(s) and charno(s,pos)=' '
end
integerfn d
integer n=0,k
scan
cycle
result = n if pos>length(s); pos = pos+1; k = charno(s,pos-1)-'0'
result = n if k<0 or k>9; n = n*10+k
repeat
end
routine w(string (*)name t,integer max)
integer k
scan; t = ""
cycle
returnif pos>length(s) or max<=0
k = charno(s,pos); pos = pos+1; max = max-1
returnif k=' '
t = t.tostring(k)
repeat
end
r = 0
w(r_name,23); w(r_perms,5); w(r_date,9); w(r_time,9)
r_blocks = d; r_extents = d
end
externalroutine getdir(string (255)dir,bytename a)
bytearray b(0:1535)
integer n,p,x
dir = dir.":" unless dir=""
dir = dir."directory"
x=fcomm('S'<<8,dir)
p = 1
cycle
n = fcommr('X0'+x,"",b(p),1536-p)
p = p+n
while p>2 and b(p-2)=' ' cycle
p = p-1; b(p-1) = nl
repeat
repeatuntil n#512
n = fcomm('K0'+x,"")
b(0) = nl; b(p) = 0
while p#1 cycle
n = 0
cycle
p = p-1; n = n+1; b(p) = b(p-1)
repeatuntil b(p)=nl
b(p) = n-1
repeat
n = addr(a); p = 0
cycle
p = p+1; byteinteger(n) = b(p); n = n+1
repeatuntil b(p)=0
end
endoffile