Browse Source

* most functions found in main DLL's
still some missing
use 'make dllnames' to get missing names

pierre 27 years ago
parent
commit
36a555ead1
6 changed files with 1992 additions and 1896 deletions
  1. 392 392
      rtl/win32/ascdef.pp
  2. 392 392
      rtl/win32/ascfun.pp
  3. 316 313
      rtl/win32/func.pp
  4. 102 9
      rtl/win32/makefile
  5. 395 395
      rtl/win32/unidef.pp
  6. 395 395
      rtl/win32/unifun.pp

File diff suppressed because it is too large
+ 392 - 392
rtl/win32/ascdef.pp


File diff suppressed because it is too large
+ 392 - 392
rtl/win32/ascfun.pp


File diff suppressed because it is too large
+ 316 - 313
rtl/win32/func.pp


+ 102 - 9
rtl/win32/makefile

@@ -128,16 +128,19 @@ OBJECTS=strings objpas \
 #	base messages defines
 #	base messages defines
 
 
 # Files used by windows.pp
 # Files used by windows.pp
-WINDOWS_FILES=base.pp errors.pp defines.pp \
-	struct.pp ascfun.pp ascdef.pp \
-	unifun.pp unidef.pp func.pp
+WINDOWS_FILES=base errors defines \
+	struct ascfun ascdef \
+	unifun unidef func
 
 
 # Add Prefix and Suffixes
 # Add Prefix and Suffixes
 PPUOBJECTS=$(addsuffix $(PPUEXT), $(OBJECTS))
 PPUOBJECTS=$(addsuffix $(PPUEXT), $(OBJECTS))
 
 
+WINDOWS_SOURCE_FILES=$(addsuffix .pp,$(WINDOWS_FILES))
+
 .PHONY : all install clean \
 .PHONY : all install clean \
 	 libs libsclean \
 	 libs libsclean \
 	 diffs diffclean \
 	 diffs diffclean \
+	dllnames test
 
 
 all : $(OBJLOADERS) $(PPUOBJECTS)
 all : $(OBJLOADERS) $(PPUOBJECTS)
 
 
@@ -187,7 +190,7 @@ messages$(PPUEXT) : messages.pp $(SYSTEMPPU)
 defines$(PPUEXT) : defines.pp $(SYSTEMPPU)
 defines$(PPUEXT) : defines.pp $(SYSTEMPPU)
 	$(PP) $(OPT) defines.pp $(REDIR)
 	$(PP) $(OPT) defines.pp $(REDIR)
 
 
-windows$(PPUEXT) : windows.pp $(WINDOWS_INCLUDE) $(SYSTEMPPU)
+windows$(PPUEXT) : windows.pp $(WINDOWS_SOURCE_FILES) $(SYSTEMPPU)
 	$(PP) $(OPT) windows.pp $(REDIR)
 	$(PP) $(OPT) windows.pp $(REDIR)
 
 
 #
 #
@@ -237,6 +240,97 @@ libinstall: staticlibinstall
 libsclean : clean
 libsclean : clean
 	-$(DEL) *$(SMARTLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
 	-$(DEL) *$(SMARTLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
 
 
+# Getting DLL names
+# not present in headers !!
+
+# first get the list of all exported function names
+# uses pedump 
+# for system dll 's
+# gdi32.exp will contain all exported functions names of gdi32.dll
+
+WINDOWS_DIR:=c:/windows
+%.exp : $(WINDOWS_DIR)/system/%.dll
+	pedump $< > $*.tmp
+	sed -n -e "s/Addr:\(.*\)Ord:\(.*\)Name: \(.*\)/@\3@/p" $*.tmp > $*.exp
+	-rm $*.tmp
+
+# list of usefull dll's for windows.pp
+dllexps : gdi32.exp kernel32.exp advapi32.exp user32.exp mapi32.exp  \
+	comdlg32.exp shell32.exp mpr.exp comctl32.exp version.exp \
+	opengl32.exp spoolss.exp
+
+# get a complete listing of all system dll's
+allexps : $(notdir $(patsubst %.dll,%.exp,$(wildcard $(WINDOWS_DIR)/system/*.dll)))
+
+# extract the dllnames for which the real dll file is not 
+# known yet
+# func.lst will contain all functions for which we still do
+# not know the origin DLL
+%.lst : %.pp
+	@echo listing DLL function names of $*.pp
+	sed -n -e "s/\(.*\)External_library name '\([^']*\)'\(.*\)/\2/p" $*.pp > $*.lst
+
+# get the DLL name from the listing in .exp files
+# of the current target 
+define grepname
+$(filter %.dll,$(subst .exp:,.dll ,$(shell grep @$*@ *.exp)))
+endef
+
+# creating of a sed script that
+# will substitute all External_library 
+# by the real name of the DLL if found in exports files
+
+# two stages
+# because you cannot set a variable inside the commands
+# Level 1 : set filename variable
+# Level 2 :
+%.sub : %.lst
+	@echo getting DLL file name for $*
+	-rm $*.sub
+	@echo # Substitutions for $* >$*.sub
+# call make for all names in lst file
+# define LongList if there is an error 
+# because the list is too long
+ifdef LongList
+	$(foreach name,$(shell cat $*.lst),$(MAKE) subfile=$*.sub $(name).find ; )
+else
+	$(MAKE) subfile=$*.sub $(addsuffix .find,$(shell cat $*.lst))
+endif
+# resubstitute unfound ones !!
+	@echo s/external \'\' name \'\([^\']*\)\'/external\
+	External_library name \'\1\'/ >>$*.sub
+	@echo # End of substitutions for $* >>$*.sub
+
+# Change file according to function found in export
+# list remaining unfound functions in $*.mis
+%.npp : %.sub
+	sed -f $*.sub $*.pp > $*.npp
+	sed -n -e "s/\(.*\)External_library name \'\([^\']*\)\'\(.*\)/\2/p" $*.npp > $*.mis
+
+%.find : 
+	@echo $* is in $(grepname)
+ifdef subfile
+	@echo s/external External_library name \'$*\'/external\
+	\'$(filter %.dll,$(subst .exp:,.dll ,$(shell grep @$*@ *.exp)))\'\
+	name \'$*\'/ >>$(subfile)
+else
+	@echo external \
+	\'$(filter %.dll,$(subst .exp:,.dll ,$(shell grep @$*@ *.exp)))\'\
+	name $* 
+endif
+
+dllnames:
+	$(MAKE) $(addsuffix .lst,$(WINDOWS_FILES))
+
+test:
+	@echo namelist of $(filename) is "$(namelist)"
+
+ascdef.pp : ascfun.pp ascdef.sed
+	sed -f ascdef.sed ascfun.pp > ascdef.pp
+
+unidef.pp : unifun.pp unidef.sed
+	sed -f unidef.sed unifun.pp > unidef.pp
+
 #####################################################################
 #####################################################################
 # Default targets
 # Default targets
 #####################################################################
 #####################################################################
@@ -245,11 +339,10 @@ include $(CFG)/makefile.def
 
 
 #
 #
 # $Log$
 # $Log$
-# Revision 1.8  1998-08-31 11:53:57  pierre
-#   * compilable windows.pp file
-#     still to do :
-#      - findout problems
-#      - findout the correct DLL for each call !!
+# Revision 1.9  1998-09-03 17:14:54  pierre
+#   * most functions found in main DLL's
+#     still some missing
+#     use 'make dllnames' to get missing names
 #
 #
 # Revision 1.7  1998/08/21 15:17:01  peter
 # Revision 1.7  1998/08/21 15:17:01  peter
 #   * win32 compiles a bit better, no growheap crash
 #   * win32 compiles a bit better, no growheap crash

File diff suppressed because it is too large
+ 395 - 395
rtl/win32/unidef.pp


File diff suppressed because it is too large
+ 395 - 395
rtl/win32/unifun.pp


Some files were not shown because too many files changed in this diff