! VAX NLINES program, GDMR/NJR
! Utility to count the number of records in a VMS file
!
! Revision History, in reverse order
!
! 2.1.0 18-Jul-1986 JGH Converted to run from VMS .CLD file
!
external string (31) Product Code = "NLINES",
Version = "2",
Release = "1",
Revision = "0"
from Imp include Cliparse, RMS, Processes, Log Names, Sys Misc
begin
string (127) file
const integer EOF = 16_1827A,
NSC = 16_10001,
NMF = 16_182CA,
top bit = 16_10000000
string (15) defnam
record (FABFM) F = 0
record (RABFM) R = 0
record (NAMFM) N = 0
integer status, count, files, total
string (255) junk
string (255) ES, RS
if Qualifier Present ("IDENTIFY") start
Print String (Product Code." version ".version.".".release)
Print String (".".Revision) if Revision#"0"
Newline
return unless Qualifier Present ("FILE")
finish
defnam = "*" . translate ("EXTENSION")
F_bid = FAB BID; F_bln = FAB BLN
R_bid = RAB BID; R_bln = RAB BLN
R_fab == F
R_rop = RAB ROP LOC
F_fop = FAB FOP SQO ! FAB FOP NAM
F_fac = FAB FAC GET
F_dna = addr (defnam) + 1; F_dns = length (defnam)
F_nam == N
N_bid = NAM BID; N_bln = NAM BLN
N_rsa = addr (RS) + 1; N_rss = 255
N_esa = addr (ES) + 1; N_ess = 255
File = Qualifier S ("FILE")
F_fna = addr (file) + 1; F_fns = length (file)
status = RMS PARSE (F)
EXIT (status) if status & 1 = 0
total = 0
files = 0
cycle
status = RMS SEARCH (F)
exit if status = NMF
EXIT (status) if status & 1 = 0
status = RMS OPEN (F)
if status & 1 = 0 start
length (RS) = N_rsl; print string (RS); print string(" - ")
Print String(Get Message(Status))
new line
continue
finish
if F_RFM = FAB RFM UDF start
Length(RS) = N_RSL ; Print String(RS)
Print String(" - UDF format files have no lines")
New Line
Status = RMS CLOSE(F)
continue
finish
status = RMS CONNECT (R)
if status&1 = 0 start
Print String(Get Message(Status))
new line
continue
finish
length (RS) = N_rsl
files = files + 1
count = 0
count = count + 1 and status = RMS FIND (R) until status & 1 = 0
count = count - 1
if status = EOF start
print string (RS . " contains")
write (count, 1)
print string(" record")
print symbol('s') unless count = 1
new line
else
Print String(Get Message(Status)." - ")
write(count, 1)
print string (" lines were counted")
new line
finish
total = total + count
status = RMS CLOSE (F)
EXIT (status) if status & 1 = 0
repeat
if files > 1 start
print string ("Total of "); write (total, 0)
print string (" records")
new line
finish
end