2 * $Id
: chkdef.
cmd,v
1.2 1998/08/29 21:45:58 tom Exp $
4 * Author
: Juan Jose Garcia Ripoll
<worm@arrakis.es
>.
5 * Webpage
: http
://www.arrakis.es
/~worm
/
7 * chkdef.
cmd - checks that a .def file has no conflicts and is properly
10 * returns nonzero
if two symbols have the same code or a line has a wrong
15 * the standard output shows conflicts.
19 def_file
= translate
(def_file
,'\','/')
24 * `cmp' is zero
when the file is valid
25 * `codes
' associates a name to a code
26 * `names' associates a code to a name
33 * This sed expression cleans empty lines
, comments and special .DEF
34 * commands
, such as LIBRARY...
, EXPORTS...
, etc
36 tidy_up
= '"s/[ ][ ]*/ /g;s/;.*//g;/^[ ]*$/d;/^[a-zA-Z]/d;"'
39 * First we
find all public symbols from the original DLL. All this
40 * information is pushed into a REXX private list with the RXQUEUE
44 'type' def_file
'| sed' tidy_up
'| sort | rxqueue'
48 * We retrieve the symbol name
(NEW_NAME
) and its code
(NEW_CODE
)
50 parse pull
'"' new_name
'"' '@'new_code rest
52 when (new_code
= '') |
(new_name
= '') then
53 /* The input was
not properly formatted
*/
55 say 'Error: symbol "'new_name
'" has no export code or is empty'
58 when codes.new_name \
= 0 then
59 /* This symbol was already defined
*/
60 if codes.new_name \
= new_code
then
63 say 'Symbol "'new_name
'" multiply defined'
65 when names.new_code \
= '' then
66 /* This code was already assigned to a symbol
*/
67 if names.new_code \
= new_name
then
70 say 'Conflict with "'names.new_code
'" & "'new_name
'" being @'new_code
74 codes.new_name
= new_code
75 names.new_code
= new_name