;RTSCAN.ACT Jeff Reister 4/15/87››;For use with public domain›;ACTION! runtime library.››;Utility to scan an ACTION! source›;file looking for calls to library›;routines. Prints out the names of›;and number of calls to runtime›;library routines.››INCLUDE "D3:RECORDS.ACT"›INCLUDE "D3:RUNTIME.ACT"›INCLUDE "D3:RECUTILS.ACT"›INCLUDE "D3:FILESCAN.ACT"››MODULE››BYTE ARRAY› files(300), outname(30)››CARD ARRAY› fnames(10)››BYTE› numfiles›››PROC Normalize(BYTE ARRAY str, ext)›;Changes str to a standard file name.›;Adds extension ext if there is not›;one to start with.›BYTE› len, indx, i›› len=str(0)›;remove blanks› indx=0› DO› IF (indx=len) THEN› len=0› EXIT› ELSE› indx==+1› IF (str(indx)<>' ) THEN› FOR i=indx TO len DO› str(i-indx+1)=str(i)› OD› len=len-indx+1› EXIT› FI› FI› OD›;add device spec› IF (len<2) OR (len=2 AND str(2)<>':)› OR (len>2 AND str(2)<>': AND str(3)<>':) THEN› i=len› len==+3› WHILE (i) DO› str(i+3)=str(i)› i==-1› OD› SAssign(str,"D1:",1,3)› FI›;add extension› str(0)=len› i=3› DO› IF (i>str(0)) OR (str(i)=' ) THEN› str(i)='.› i==+1› SAssign(str,ext,i,i+ext(0))› EXIT› ELSEIF (str(i)='.) THEN› EXIT› FI› i==+1› OD›RETURN›››PROC Init()› Error=MyError› fnames(0)=files› FOR numfiles=0 TO 8 DO› fnames(numfiles+1)=fnames(numfiles)+30› OD› ClrRecs()›RETURN›››PROC GetNames()›;Get the input and output file names.›BYTE ARRAY› f›› PrintE("} ÁÃÔÉÏΡ Æéìå Óãáîîåò ")› PrintE("(for public domain runtime library)")› PutE()› PrintE("Enter input file names ...")› numfiles=0› WHILE numfiles<10 DO› f=fnames(numfiles)› Put('?)› InputS(f)› IF f(0) THEN› Normalize(f,"ACT")› numfiles==+1› ELSE› EXIT› FI› OD› IF numfiles THEN› PrintE("Enter output file name ...")› Put('?)› InputS(outname)› IF outname(0)=0 THEN› numfiles=0› FI› FI›RETURN›››PROC More()›;Do more files?›BYTE› c›› PrintF("%EMore (Y/N)?%E")› Close(1)› Open(1,"K:",4,0)› c=GetD(1)› Close(1)› IF c='N or c='n THEN› DOS()› FI›RETURN›››PROC Scan()›;Scan a number of source files›;for calls to library routines.›BYTE› i›› DO› Init()› GetNames()› IF numfiles THEN› PutE()› FOR i=1 TO numfiles DO› PrintF("Scanning %S%E",fnames(i-1))› ScanFile(fnames(i-1))› OD› errflg=0› PrintF("%EWriting %S%E",outname)› Open(INFILE,outname,8,0)› IF errflg=0 THEN› device=INFILE› PrintList()› device=0› FI› Close(INFILE)› FI› More()› OD›