!%include "inc:fs.imp"
! A couple of useful utilities for dealing with files. MATCHES & WILDNESS.
! also CURRENT USER, CURRENT DIRECTORY and SET DIRECTORY, HDX to I
! JHB added CURRENT FS 19/1/87
! These may ultimately be installed. JHB 22/10/84
integerfn wildness(string (*)name s)
integer k,i,w=0
for i=1,1,length(s) cycle
k = charno(s,i); w = w+1 if k='*' or k='%'
repeat
result = w
end
predicate Matches(string (*) name s, p)
! S=Subject, P=Pattern. Pattern is the one with the stars in it.
integer slen = 0, plen = 0
predicate m (integer spos,ppos)
integer psym = 0,ssym = 0
cycle
if ppos=plen start
true if spos=slen
false
finish
ppos = ppos+1; psym = charno(p,ppos)
exitif psym='*'
falseif spos=slen
spos = spos+1; ssym = charno(s,spos)
psym = ssym if ssym!32=psym!32 and 'a'<=psym!32<='z'
unless ssym=psym start
falseunless psym='%'
finish
repeat
cycle
trueif m(spos,ppos)
exitif spos=slen
spos = spos+1; ssym = charno(s,spos)
repeat
false
end
slen = length(s)
plen = length(p)
true if m(0,0)
false
end
string (7) fn Current Directory
string (255) Me
integer I = 1
on 3,9 start ; result = ""; finish
Length (Me) = Fcommr ('F'<<8, "", Charno (Me, 1), 255)
I = I + 1 while Charno (Me, I) # ' '
Length (Me) = I - 1
result = Me
end
routine set directory(string (63)d)
integer x
x = fcomm('J'<<8,d)
end
string (7) fn current fs(integer how)
!Returns short or long name of the current filestore or just a hex number
conststring (1) array hex(0:15) = c
"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"
string (7) s
s = hex(rdte>>4).hex(rdte&15)
if how = 0 start
s = "A" if rdte = 16_14
s = "B" if rdte = 16_15
s = "C" if rdte = 16_1B
s = "D" if rdte = 16_35
s = "M" if rdte = 16_44
s = "V" if rdte = 16_72
elseif how=1
s = "Alpha" if rdte = 16_14
s = "Bravo" if rdte = 16_15
s = "Charlie" if rdte = 16_1B
s = "Delta" if rdte = 16_35
s = "Met" if rdte = 16_44
s = "Vax" if rdte = 16_72
finish
result =s
end
string (7) fn Current User
string (255) This Dir, This User
integer I
on 3,9 start ; result = ""; finish
This Dir = Current Directory
result = "" if this dir = "" or this dir = "ANON"
set directory("")
This User = Current Directory
set directory(this dir)
if this user -> (":").this user start ; finish
result = This User
end
integerfn hdx to i(string (*) name s, integername p)
!Return the value of the "high-density hex" number if any, starting at
! charno(p, s), advancing p past any digits actually processed
integer n, k
result = -1 if s = "" or s = "????"
n = 0
cycle
result = n if p > length(s); p = p + 1
k = charno(s, p-1) - '0'
result = n if k < 0; n = n<<4 + k
repeat
end
endoffile