parm z="*~" anyparm filter = TRUE # ... LISTFX.UTIL.SYS # Version : B.00.24(12/14/2004) Original Date: 09/08/96 # Command file that produces an 'extended' 'listf' output of a fileset. # It includes the file name, owner, file code, record count, sector count, # creation date, mod date & time, and access date, all on a single line per # file. Also 'selects' using file attributes (preset or user specified). # Added ability to 'prefix' the output produced when the $NAMES parameter # is used. The prefix can be any ONE word string and MUST adhere to the # format: '$$xxxxx' (i.e. $$purge) # #12/14/2004 Added capability to accept the '$DESC' specification and thus # produce the sorted list in descending order. # # 7/14/2004 Added capability to sort by 'CRE','ACC', or 'MOD' dates AND # changed the '$pmcap' code to handle 'open' executables. # #10/19/2004 Added logic to detect and report infinite loop condition caused # by incorrect "$TODAY" specification. # setvar insidempex SETVAR(insideqedit, 0) if "!z" <> "~" AND (insidempex <> 0 OR insideqedit <> 0 OR hpcmdnum=0) then setvar _cm "![BASENAME(hpfile)]" run CI.PUB.SYS;PARM=3;info='!hpfile "!z",![ANYPARM(!filter)]' return elseif NOT BOUND(_cm) then echo !-1 > lsfxtfil INPUT _cm < lsfxtfil setvar _cm WORD(_cm) endif if "!z" = "*~" then setvar _e "echo " setvar _ex "return " else setvar _e SETVAR(_ex, "# ") endif !_e Author: Paul H. Christidis christidis@raytheon.com !_e Version: 2004.12.14 [B.00.24] !_e !_e Usage: !_cm [FileSet] [Select_Expression] !_e !_e Where: !_e FileSet = A :LISTFILE style fileset (If using the (fset,fset,..) !_e format then it MUST be included in quotes). !_e !_e Select_Expression = An expression comprised of coded FINFO function !_e calls. A number of 'predefined' FINFO parameters, constants, !_e and options are available along with the capability of !_e specifying any of the additional FINFO parameters. !_e !_e The 'predefined' items/constants/options are: !_e $fcode - The sting mnemonic for the file's file code. !_e $icode - The integer value for the file's file code. !_e $eof - The number of records in the file. !_e $recsize - File's record size in 'positive' bytes. !_e $credate - File's creation date. !_e $moddate - File's last modification date. !_e $accdate - File's last access date. !_e $sectors - Number of sectors allocated to file. !_e $finfo( - To invoke any other 'finfo' item. !_e $exec - List ONLY executables (PROG & NMPRG files). !_e $today - The current day in 'yyyymmdd' format. !_e $names - To list only the file name (listfile,6). !_e $ymd - List dates in 'yyyy/mmdd' format. !_e $pmcap - List ONLY run modules with PM capability. !_e Note: '$pmcap' requires a 'successful' READ to qualifying files, !_e and will change the file's access date. !_e $xxxSORT - 'xxx' can be "CRE", "ACC", or "MOD" (in same precedence). !_e Qualifying files are sorted by indicated date, while the output !_e is limited to the 'posix' file name and the create, access, !_e and modify dates. [Requires that the command file 'DATESORT' !_e IS present AND collocated with THIS command file.] !_e $desc - Produce 'sorted' list in descending order. !_e $$xxxxx - Used ONLY with the '$names' parameter. In the output !_e the 'xxxxx' string will precede the file name. Can be used !_e to create a simple command file that can then be executed. !_e Examples: !_e :!_cm @,$fcode = 'prog' OR $icode = 1030 !_e !_e :!_cm @,($fcode = 'prog' OR $icode = 1030) AND $accdate<>$today !_e !_e :!_cm ./[B-W]@ $eof < 1000 AND ($credate > $today-(18*30) ) !_e :NOTE: Correct evaluation of "$today" expressions REQUIRE that they !_e contain NO spaces AND the command file "DTOFFSET" IS present AND col- !_e located with THIS command file. IN its absence the expression's result !_e MUST evaluate within the current month. !_e !_e :!_cm "(./[B-W]@,/SYS/PUB/@)" $eof<1000 AND $finfo("limit")>25000 !_e !_e :!_cm "(./[B-W]@,/SYS/PUB/@)" $eof<100 AND $pmcap $names !_e !_e :!_cm "(./[B-W]@,/SYS/PUB/@)" $eof<100 $modsort $desc !_e !_e :!_cm log##@.pub.sys $credate<$today-7 $names $$purge !_ex if "!z" <> "~" then if BOUND(oldmsgfence) then setvar hpmsgfence oldmsgfence setvar hpautocont _lfcont endif setvar _lfYMD FALSE setvar _lfcont hpautocont setvar hpautocont TRUE setvar oldmsgfence hpmsgfence setvar hpmsgfence 2 setvar _lfDtOffSet "DTOFFSET."+ XWORD(hpfile,".") setvar _lfDateSort "DATESORT."+ XWORD(hpfile,".") setvar _lfExec '($FCODE="PROG" OR $FCODE="NMPRG")' setvar _lfSortDate -9999 setvar _lfPmErr FALSE # ** Build temp file, set various variables and then ** # ** perform a listfile fset,6 to a temporary file. ** purge lfx!hppin,temp > $null file lfx!hppin;rec=-256,,v,ascii;disc=300000;nocctl;temp file listfilx=lfx!hppin,oldtemp;DEL setvar _lfPage 60 setvar _lfToday ![RHT(hpdatef,4)+RHT("0!hpmonth",2)+RHT("0!hpdate",2)] setvar _lfTotFil SETVAR(_lfloop, SETVAR(cierror, 0)) listfile !z,6 >*lfx!hppin if cierror = 0 then # Pass expression through file to preserve quotes (") or ('), evaluate date # expressions, replace tokens, validate and proceed to process file list. echo !filter > lsfxtfil INPUT _lfSelExp $null setvar _lfSelExp UPS(REPL(REPL(_lfSelExp,","," "),";"," ")) + " " if FINFO(_lfDtOffSet, 0) then while SETVAR(_lfPos, POS("$TODAY", _lfSelExp)) <> 0 do setvar _lfTemp _lfToday setvar _lfDelta WORD(_lfSelExp, " ", 1,, _lfPos+6) setjcw cierror = 0 setvar _lfDeltaCheck ![_lfDelta] if cierror <> 0 then setvar _lfDelta "" endif if LEN(_lfDelta) <> 0 then xeq !_lfDtOffSet 1, !_lfDelta, "_lfTemp" endif setvar _lfSelExp REPL(_lfSelExp,"$TODAY!_lfDelta","!_lfTemp",1,_lfPos) if SETVAR(_lfloop, _lfloop + 1) > 15 then xeq !hpfile echo **** echo +-+ Error in $TODAY expression causing an infinite loop. echo +-+ Check "NOTE:" about its syntax in the above help text. echo !_lfSelExp echo **** setvar hpmsgfence oldmsgfence return endif endwhile else setvar _lfSelExp REPL(_lfSelExp, "$TODAY", _lfToday) endif # if SETVAR(_lfPmCaps, POS("$PMCAP", _lfSelExp) <> 0) then setvar _lfSelExp REPL(_lfSelExp, "$PMCAP", _lfExec) setvar _lfEqSpec3 SETVAR(_lfEqSpec1, "shr") + ";gmulti" setvar _lfEqSpec4 SETVAR(_lfEqSpec2, "lock;gmulti") +";shr" build xpmotx;rec=128,,f,binary;temp >$null setvar _lfExec "" endif # setvar _lfSelExp REPL(_lfSelExp,"$EXEC", _lfExec) setvar _lfSelExp REPL(_lfSelExp,"$FCODE", "FINFO(_lfFL,9)") setvar _lfSelExp REPL(_lfSelExp,"$ICODE", "FINFO(_lfFL,-9)") setvar _lfSelExp REPL(_lfSelExp,"$EOF" , "FINFO(_lfFL,19)") setvar _lfSelExp REPL(_lfSelExp,"$RECSIZE","- FINFO(_lfFL,14)") setvar _lfSelExp REPL(_lfSelExp,"$CREDATE","FINFO(_lfFL,-6)") setvar _lfSelExp REPL(_lfSelExp,"$ACCDATE","FINFO(_lfFL,-7)") setvar _lfSelExp REPL(_lfSelExp,"$MODDATE","FINFO(_lfFL,-8)") setvar _lfSelExp REPL(_lfSelExp,"$SECTORS","FINFO(_lfFL,58)") setvar _lfSelExp REPL(_lfSelExp,"$FINFO(" ,"FINFO(_lfFL,") # if SETVAR(_lfListNames, POS("$NAMES", _lfSelExp) <> 0) then setvar _lfSelExp REPL(_lfSelExp,"$NAMES","") endif # if SETVAR(_lfPos, POS("$CRESORT", _lfSelExp)) <> 0 then setvar _lfSelExp REPL(_lfSelExp,"$CRESORT","", 1, _lfPos) setvar _lfSortDate MAX(_lfSortDate, -6) endif if SETVAR(_lfPos, POS("$ACCSORT", _lfSelExp)) <> 0 then setvar _lfSelExp REPL(_lfSelExp,"$ACCSORT","", 1, _lfPos) setvar _lfSortDate MAX(_lfSortDate, -7) endif if SETVAR(_lfPos, POS("$MODSORT", _lfSelExp)) <> 0 then setvar _lfSelExp REPL(_lfSelExp,"$MODSORT","", 1, _lfPos) setvar _lfSortDate MAX(_lfSortDate, -8) endif if SETVAR(_lfDtSorted, _lfSortDate <> -9999) then setvar _lfSrtLabl & STR("CreateAccessModify",(6*(ABS(_lfSortDate) MOD 6)+1), 6) + " Date" endif # setvar _lfSortDir "" if SETVAR(_lfPos, POS("$DESC", _lfSelExp)) <> 0 then setvar _lfSortDir "-r" setvar _lfSelExp REPL(_lfSelExp,"$DESC","", 1, _lfPos) endif # setvar _lfPreFix "" if SETVAR(_lfPos, POS("$$", _lfSelExp)) <> 0 then setvar _lfPreFix WORD(_lfSelExp," ",,,_lfPos) + " " - "$$" setvar _lfSelExp REPL(_lfSelExp,"$$!_lfPreFix","") endif # setvar _lfYMD POS("$YMD", _lfSelExp) <> 0 OR _lfYMD setvar _lfSelExp REPL(_lfSelExp,"$YMD","") setvar _lfFL "*listfilx" if LEN(SETVAR(_lfSelExp, RTRIM(LTRIM(_lfSelExp)))) = 0 then setvar _lfSelExp TRUE endif # errclear setvar _lfT !_lfSelExp if cierror = 0 then if _lfDtSorted then if SETVAR(_lfDtSorted, FINFO(_lfDateSort, 0)) then xeq !_lfDateSort lfx!hppin !_lfSortDate else echo ![CHR(7)] **Error: Sort Command file is missing.. Sort ignored ** endif endif xeq !hpfile ~ < *listfilx else echo **** echo Invalid Selection Expression, Syntax OR Bad $token(s) specified: echo !_lfSelExp echo **** endif endif # if _lfTotFil = 0 then echo +-+-+ No files selected in fileset "!z" +-+-+ endif # ******************* clean up ********************* setvar hpmsgfence oldmsgfence deletevar oldmsgfence, _cm setvar hpautocont _lfcont if BOUND(traceon) AND traceon then showvar _lf@ else deletevar _lf@, _e, _ex endif reset listfilx reset lfx!hppin return # +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+ # + Section that parses the listfx file # +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+ else if NOT _lfListNames then echo echo ![CHR(27)+"&a0c-1R"+CHR(27)+"J"+CHR(27)+"&a0c-1R"] setvar _lfHdGroup SETVAR(_lfHdAcct, " ") setvar _lfGrp SETVAR(_lfAcct, " ") setvar _lfTotSect SETVAR(_lfPgCount, 0) setvar _lfLineCnt _lfPage # setvar _lfH1 "![CHR(12)]Account = !!_lfHdAcct Group = " + & "!!_lfHdGroup !!hpdatef, !!hptimef Page: !!_lfPgCount" if _lfDtSorted then setvar _lfH2 "Posix File Name [SORT = !!_lfSrtLabl] Cre-Date " + & "Mod-Date & time Acc-Date" setvar _lfH3 "----------------------------------------- --------- " + & "----------------- ---------" setvar _lfD1 "echo !!_lfDName !!_lfCdt !!_lfMdt !!_lfAdt" else setvar _lfH2 "Filename Owner Code Records Sectors Cre-Date " + & "Mod-Date & time Acc-Date" setvar _lfH3 "-------- -------- ----- ------- ------- --------- " + & "----------------- ---------" setvar _lfD1 "echo !!_lfDName!!_lfAccs!!_lfOwner !!_lfCode " + & "!!_lfRecs !!_lfSect !!_lfCdt !!_lfMdt !!_lfAdt" endif endif # ********************* loop ***************************** setvar _lfLoop,FINFO(hpstdin, 19) while SETVAR(_lfLoop, _lfLoop - 1) >= 0 #Execute "selection criteria" and see if PMCAP is also being checked * setvar _lfFL WORD(INPUT(), ,-1) if SETVAR(_lfSelectIt, _lfDtSorted OR (!_lfSelExp)) AND _lfPmCaps then if FINFO(_lfFL, 61) <> 0 then setvar cierror SETVAR(_lfIdx, 0) + 1 while cierror <> 0 AND SETVAR(_lfIdx, _lfIdx+1) <= 4 do print $null > xpmotx setvar cierror 0 file xpmflx=!_lfFL,old;![_lfEqSpec!_lfIdx] print *xpmflx;start=1;end=1 > xpmotx endwhile INPUT _lfCapRec;readcnt=100 0 if SETVAR(_lfSelectIt, BOUND(_lfCapRec)) then setvar _lfCap STR(_lfCapRec, 98*(POS(FINFO(_lfFL,9),"NMPRG"))+2, 1) deletevar _lfCapRec setvar _lfSelectIt 64 BAND ORD(_lfCap) = 64 endif endif #* If "selected" get fcode, group, account, file name and fcreator * #* Unless we are only listing the file name, then print it. #* Also get a "posix" display name if a "sorted" list was requested. if _lfSelectIt then setvar _lfTotFil _lfTotFil + 1 if _lfListNames then echo !_lfPreFix!_lfFL else setvar _lfIncrmnt,1 if _lfDtSorted then setvar _lfDName LFT(FINFO(_lfFL,38)+RPT(" ",40), 41) else setvar _lfCode ,LFT("![FINFO(_lfFL,9)] ", 5) setvar _lfGrp ,LFT("![FINFO(_lfFL,2)] ",8) if cierror = 9984 then setvar _lfGrp "N/A " endif setvar _lfCh "/" setjcw cierror = 0 setvar _lfAcct ,LFT("![FINFO(_lfFL,3)] ",8) if cierror = 9984 then setvar _lfAcct ,LFT("![FINFO(_lfFL,45)] ",8) setvar _lfCh "" endif setvar _lfFName FINFO(_lfFL,38) & - RTRIM("/!_lfAcct") - RTRIM("/!_lfGrp") - _lfCh # if LEN(_lfFName) > 8 then setvar _lfIncrmnt,2 setvar _lfDName "^ ^^^ ^ " elseif LEN(_lfFName) > 0 then setvar _lfDName,LFT("!_lfFName ",8) else setvar _lfDName DWNS(LFT("!_lfGrp ",8)) endif setvar _lfOwner,LFT(WORD(FINFO(_lfFL, 43), ".") + " ",8) # ** Get Access, record & sector counts, accumulate total sectors ** setvar _lfAccs STR(" *",1+MIN(1, FINFO(_lfFL, 61)),1) endif setvar _lfRecs,RHT(" ![FINFO(_lfFL, 19)]",8) setvar _lfSect,RHT(" ![FINFO(_lfFL, 58)]",8) setvar _lfTotSect, _lfTotSect + !_lfSect # # ******** Creation, Modification and Access dates ******* if _lfYMD then setvar _lfCdt,"![FINFO(_lfFL, -6)]" setvar _lfCdt,LFT(_lfCdt,4)+"/"+RHT(_lfCdt,4) setvar _lfMdt,"![FINFO(_lfFL, -8)]" + ", ![FINFO(_lfFL, 24)]" setvar _lfMdt,LFT(_lfMdt,4)+"/"+STR(_lfMdt,5,4) & +STR(_lfMdt,10,6) +DWNS(RHT(_lfMdt,2)) setvar _lfAdt,"![FINFO(_lfFL, -7)]" setvar _lfAdt,LFT(_lfAdt,4)+"/"+RHT(_lfAdt,4) else setvar _lfCdt,RHT(FINFO(_lfFL, 6), 12) setvar _lfCdt,LFT(_lfCdt,1)+DWNS(STR(_lfCdt,2,5))+"/"+RHT(_lfCdt,2) setvar _lfMdt,RHT(FINFO(_lfFL, 8),12) + ", ![FINFO(_lfFL, 24)]" setvar _lfMdt,LFT(_lfMdt,1)+DWNS(STR(_lfMdt,2,5))+"/"+STR(_lfMdt,11,2) & +STR(_lfMdt,14,6) +DWNS(RHT(_lfMdt,2)) setvar _lfAdt,RHT(FINFO(_lfFL, 7),12) setvar _lfAdt,LFT(_lfAdt,1)+DWNS(STR(_lfAdt,2,5))+"/"+RHT(_lfAdt,2) endif # ************* echo heading and file info ************* if _lfLineCnt=_lfPage OR _lfHdGroup<>_lfGrp OR _lfHdAcct<>_lfAcct then setvar _lfPgCount _lfPgCount + 1 setvar _lfHdGroup _lfGrp setvar _lfHdAcct _lfAcct setvar _lfLineCnt, 0 echo !_lfH1 echo echo !_lfH2 echo !_lfH3 endif if _lfIncrmnt = 2 then echo !_lfFName endif !_lfD1 setvar _lfLineCnt _lfLineCnt + _lfIncrmnt endif endif endwhile # # *** END LOOP: display sector total if more than one file *** if (NOT _lfListNames) AND _lfTotFil >1 then setvar _lfSect,RHT(" !_lfTotSect",9) echo --------- echo Total Sectors: !_lfSect (!_lfTotFil) Files endif if _lfPmCaps AND _lfPmErr then echo echo ![CHR(7)]WARNING: Unable to access some of the executable files.. endif endif return