! APM FILES utility. R Thonnes et al 6/84 ! Parameters: ! Target is file name or names. Wild cards accepted in filename but not directory ! Default is all files for current directory. ! Output is output file name (default = console) ! Full specifies that size and date info should be displayed for each file ! Order may be by date or alphabetic ! Hide specifies whether "hidden" files (beginning with '.') are to be ! suppressed (default = yes) ! One line of total files and blocks in the directory is displayed when wild ! cards are used. ! If Totals is specified only this line is displayed. ! ! GDMR 02/02/87 Fixed to recognise hierarchic directories properly. ! Case-mangling "improved" slightly ! GDMR 09/02/87 NInfo removed from Util.Imp to here, with addition of ! event-3 trap ! JHB 21/04/88 Takes screen width from SCREENCOLS rather than assuming 80. ! Note o/p to files will retain this width. %option "-nocheck-nodiag" @16_3FA0 %byte screenrows,screencols %include "inc:util.imp" %include "inc:fs.imp" %include "inc:fsutil.imp" %begin %externalstring(255)%fnspec FINFO(%string(255)directory,%integer number) %string(255)%fn Ninfo(%string(255) filename) %string(255) response = "Dummy" %on 3 %start %result = filename . " " . event_message %finish length(response) = fcommr('N' << 8, filename, charno(response, 1), 255) %result = response %end %routinespec files(%string(255)target) ! PAM interface %constinteger dateorder=1,alphaorder=2 %string(255)target="",output="", s="" %integer full=0,hide=16_80000000 %byte order=dateorder,tots=0 defineparam("Target",target,0) defineparam("Output",output,pamnewgroup) definebooleanparams("Full",full,0) definebooleanparams("Hide",hide,0) defineenumparam("Order,Date,Alpha",order,0) define enum param("ALL,TOtals",tots,0) ;!JHB mod to display totals only. processparameters(cliparam) ! Main program openoutput(1,output) %and selectoutput(1) %unless output="" files(target) ! End of main program %string(255)%fn standardise(%string(255) s) %integer i, case = 0 %bytename k %result = "" %if s = "" %for i = 1,1,length(s) %cycle k == charno(s,i) %if 'A'<=k&95<='Z' %start k = k&95+case; case = 32 %else %if k = ' ' %result = s %else case = 0 %finish %repeat %result = s %end %predicate split at last colon(%string(255) what, %string(*)%name before, after) %integer i, pos = 0 %false %if what = "" ! Look for the last colon %for i = 1, 1, length(what) %cycle pos = i %if charno(what, i) = ':' %repeat %false %if pos = 0; ! None found before = sub string(what, 1, pos - 1) after = sub string(what, pos + 1, length(what)) %true %end %routine files(%string(255)target) %string(255)directory,file,thisfile, full name %routine dofiles %recordformat f(%record(f)%name left,right,%string(255)s) %record(f)%name root, this %constinteger fieldwid=13 %integer printed,maxperline %routine separate(%integer len) %if len<0 %start newline %unless printed=0; printed = 0 %elseif printed=maxperline printed = 0; newline %else spaces(fieldwid-len) %finish %end %record(f)%map add(%record(f)%name cell,tree) %result == cell %if tree==nil %if cell_s0 %start printline(finfo(directory,0)) %if tots = 0 %start openinput(1, directory.":Directory") select input(1) dofiles %finish %else full name = directory . ":" . file length(full name) = length(full name) - 1 %c %if charno(full name, length(full name)) = '?' printline(standardise(ninfo(full name))) %finish %end %endofprogram