home *** CD-ROM | disk | FTP | other *** search
- /* offset.rexx $VER: v1.1a_1991-04-20 E.Lundevall */
- parse arg lib funcs
-
- private = ''
- if lib = '' then do
- say 'Usage: offset library [ function | offset ][function | offset ]...'
- exit
- end
-
- pos = index(lib,'.library')
- if pos = 0 then do
- pos = index(lib,'.resource')
- if pos = 0 then
- pos = index(lib,'.device')
- end
-
- if pos ~= 0 then lib = left(lib,pos-1) /* Strip extension */
-
- filename = 'FD:' || lib || '_lib.fd'
-
- if ~open(fdfil,filename,'R') then do
- say 'Could not open fd file -' filename
- exit 20
- end
-
- if funcs = '' then loopend = 1
- else loopend = words(funcs)
-
- do loop = 1 to loopend
- bang = 0
- func = word(funcs,loop)
- if left(func,1) = '!' then do /* Search for substring */
- func = right(func,length(func)-1)
- bang = 1
- end
- else if index(func,'$') ~= 0 then do /* Translate hex offset to decimal */
- func = translate(func,'','$')
- if index(func,'-') = 1 then func = 0 - x2d(right(func,length(func)-2))
- else func = x2d(func) - 65536
- end
-
- call seek(fdfil,0,'B') /* Go to start of fd file */
- do until word(line,1) = '##bias'
- line = readln(fdfil)
- end
-
- offset = 0 - word(line,2) /* Initial offset */
-
- if datatype(func) = NUM then do /* Look for an offset value */
- offset = offset + 6
- do until offset = func | eof(fdfil)
- line = readln(fdfil)
- if left(line,1) = '*' then iterate
- if left(line,2) = '##' then do
- if word(line,1) = '##public' then private = ''
- else if word(line,1) = '##private' then private = '*private*'
- iterate
- end
- offset = offset - 6
- end
- if ~eof(fdfil) then say '$'d2x(offset,4) '-$'d2x(0-offset) offset line private
- end
- else do
- func = upper(func)
- do until word(line,1) = '##end' /* Look for a function, or all functions */
- line = readln(fdfil)
- if left(line,1) = '*' then iterate
- if left(line,2) = '##' then do
- if word(line,1) = '##public' then private = ''
- else if word(line,1) = '##private' then private = '*private*'
- iterate
- end
- parse var line name '(' dummy
- if bang = 1 & index(upper(name),func) ~= 0 | func = '' then
- say '$'d2x(offset,4) '-$'d2x(0-offset) offset line private
- else if func = upper(name) then do
- say '$'d2x(offset,4) '-$'d2x(0-offset) offset line private
- leave
- end
- offset = offset - 6
- end
- end
- end
- call close(fdfil)
-
-
-