-
Notifications
You must be signed in to change notification settings - Fork 20
/
dsnsrch.rx
124 lines (108 loc) · 3.02 KB
/
dsnsrch.rx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/* REXX */
/* DSNSRCH = Dataset Search */
/* Based on */
/* https://github.com/ayoul3/Rexx_scripts/blob/master/REXX.SEARCH */
/* Usage: Run CATMAP3 to get a list of datasets and your */
/* access to them */
/* Extract the dataset names of all the dataset you have */
/* READ or greater access to and place them in a dataset */
/* Then call this script with the name of that dataset */
/* Author: Phil Young - NetSPI */
/* License: MIT */
PARSE ARG INDD STRING
VERBOSE = 1
skip_unformatted = 1
Say "*** Opening list of datasets to search:" INDD
address tso "alloc file(input) dataset('"INDD"') SHR"
if RC \= 0 then do
say '*** ! Error allocating file' INDD
return
end
address tso "execio * diskr input (stem input. finis)"
address tso "free file(input)"
do i = 1 to input.0
X = SYSDNS("'"input.i"'")
if X \= 'OK' then interate
call listdsi "'"input.i"'"
if SYSRECFM = "U" then do
/* Skip Unformatted datasets, they're usually loadlib */
if skip_unformatted then iterate
end
say "*** Searching" input.i
if sysdsorg ="PO" then
do
call outtrap "mbrs."
address tso "LISTDS" "'"input.i"' members"
call outtrap 'off'
idx = 0
do j=1 to mbrs.0
if mbrs.j ="--MEMBERS--" then do
idx=1
end
if idx =1 & mbrs.j \= "--MEMBERS--" then do
tmp = input.i||"("||strip(mbrs.j,'B')||")"
call searchDS tmp,STRING
end
end
end
else if sysdsorg="VS" then do
call outtrap "entries."
address tso "LISTCAT ENTRY('"input.i"')"
call outtrap "off"
if word(entries.1,1) ="DATA" then do
call searchVS input.i,STRING,TYPE,REST
end
else if word(entries.1,1)="CLUSTER" then do
DT_DATA = word(entries.3,3)
parse var DT_DATA HLQ_D "." RRRR
if HLQ_D <> HLQ then do
call searchVS DT_DATA,STRING
end
end
end
else if sysdsorg ="PS" then do
call searchDS input.i,STRING
end
end
exit
searchVS:
procedure
DT_NAME = arg(1)
STRING = translate(arg(2))
call outtrap "lines."
address tso "PRINT INDATASET('"DT_NAME"')"
call outtrap "off"
if RC <>0 then do
say "*** ! Error reading VSAM file " DT_NAME
end
do k=1 to lines.0
if (index(lines.k,STRING) > 0) then,
do
out=DT_NAME k lines.k
say "!!! Found -" out
end
end
return
exit
searchDS:
procedure
DT_NAME =arg(1)
STRING = translate(arg(2))
DT_NAME = strip(DT_NAME,'B')
address tso "alloc file(input) dataset('"DT_NAME"') SHR"
if RC \= 0 then
do
say '*** ! Error allocating file' DT_NAME
return
end
address tso "execio * diskr input (stem input. finis)"
address tso "free file(input)"
do j=1 to input.0
input.j =translate(input.j)
if (index(input.j,STRING) > 0) then,
do
out = DT_NAME j input.j
say "!!! Found -" out
end
end
return