constinteger true = 1, false = 0
include "inc:util.imp"
include "managr:addefs.inc"
include "inc:fs.imp"
include "inc:fsutil.imp"
include "managr:admin.inc"
begin
constinteger fln = 255 ;!File and path names, host names
constinteger uln = 31 ;!User names and passwords
constinteger dln = 63 ;!Directories
string (255) printdir ;! "lp1" or "lp2"
recordformat DTE FM(bytearray a(1:6))
recordformat FS STAT FM(byte no, string (255) message)
integerfn FS DEFAULT UTNO
!Dummy
result = 0
end
externalstring (255) fnspec finfo(string (dln) directory, integer no)
routine FS FINFO(integer utno, string (dln) directory,
integer fileno, record (fs stat fm) name status)
!Dummy
status_no = 0
status_message = finfo(directory, fileno)
end
routine FS TRANSFER FILE (integer s utno, string (fln) s file,
integer d utno, string (fln) d file, record (fs stat fm) name status)
string (fln) s,t
d file = s.(".").t while d file -> s.(":").t
copy(s file, printdir.":".d file)
!Dummy
end
integerfn FS FILESIZE (integer utno, string (fln) filename,
record (fs stat fm) name status)
on 3, 9 start
status_no = 1; result = -1
finish
status_no = 0
result = filesize(printdir.":".filename)
end
routine FS REPORT ERROR(integer tno, string (255) text,
record (fs stat fm) name status)
!Dummy
end
routine FS LOGON FILESTORE(string (fln) host,
string (uln) user, pass, integername tno, record (fs stat fm) name status)
!Dummy
! %integer i
status_no = 0
! i = fcomm('Q'<<8, "")
end
routine FS LOGOFF FILESTORE(integer no, record (fs stat fm) name status)
!Dummy
status_no = 0
end
owninteger i, ctno, laser utno, user utno, size, auta, autl
predicate authorised
record (admin fm) data
false unless find dir(current user, data)
true if data_group & 1<<laser bit # 0
false
end
record (fs stat fm) status
ownbyteinteger opt = 0, printer=0
record (dte fm) laser dte
ownstring (63) pling="",user="", param="", s="", t = ""
define param("File", param, 0)
define enum param("L24,L34 -- Copier Room 2419, Room 3421", printer, 0)
define enum param("NOqueue,Queue", opt, 0)
process parameters(cli param)
user utno = fs default utno
if printer=1 then printdir = "lp2" else printdir="lp1"
fs logon filestore("bravo", printdir, "", laser utno, status)
fs report error(0, "Laser", status)
if not authorised start
printline("Sorry, you aren't accredited for LASER - see Linda Wilkie"); return
finish
if param # "" start
param = param.".lay" if exists(param.".lay")
!Try <filename>.lay first
size = fs filesize(laser utno, param, status) ;!Size = -1 if file doesn't fs exist
pling = ""
if status_no = 0 and size >= 0 start
printstring(param. " is on the queue already. (O)verwrite, (Q)uit or (S)econd copy?")
readsymbol(i) until i & 16_5f = 'O' or i & 16_5f = 'Q' or i & 16_5f = 'S'
return if i & 16_5f = 'Q'
pling = "!" if i & 16_5f = 'S'
finish
if exists(param) start
fs transfer file(user utno, param, laser utno, pling.param, status)
else
printline("No access to ".param)
finish
finish
! Now handle a -QUEUE request. basically just a FILES.
if opt = 1 start
printstring("Laser queue")
i = 1
cycle
fs finfo(laser utno, printdir, i, status)
exit if status_message = "" or status_no # 0
t = status_message unless status_message -> t.(" ").s
to lower(t); charno(t, 1) = charno(t, 1) & 16_5f
printsymbol(':') and newline if i = 1
printstring(t); if i & 3 = 0 then newline else spaces(20-length(t))
i = i + 1
repeat
printline(" empty") if i = 1
newline if i & 3 # 1
fs report error(laser utno, "Laser Info", status)
finish
fs logoff filestore(laser utno, status)
fs report error(0, "Laser", status)
endofprogram