# strip everything before this # cd to your version of Tk-804.025_beta15 # and feed this file to /bin/sh # # touch PNG/libpng/scripts/makefile.hpux.ia64 chmod 0444 PNG/libpng/scripts/makefile.hpux.ia64 patch -p1 -N <<'__END_OF_PATCH__' Index: Change.log --- Tk-804.025_beta15/Change.log 2004-02-28 17:26:35.000000000 +0000 +++ Tk-804.025_beta16/Change.log 2004-03-07 20:22:24.000000000 +0000 @@ -1,3 +1,58 @@ +Change 3173 on 2004/03/07 by nick@llama + + Work round LVs (e.g. substr) not upgrading to UTF-8 + when asked. (https://rt.cpan.org/Ticket/Display.html?id=5529) + +Change 3172 on 2004/03/07 by nick@llama + + fileevent fix for socket with autoflush + from MHX@cpan.org (which long been sitting in RT queue) + +Change 3171 on 2004/03/06 by nick@llama + + Remove some gcc-isms from PNG/libpng makefile.solaris + Based on mail from Mun Johl + +Change 3170 on 2004/03/06 by nick@camel + + Allow for possible skipped tearoff entry in a menubar + menu when computing index for active element + for <> etc. + +Change 3169 on 2004/03/06 by nick@llama + + Steve's patch to TIEHANDLE docs in Text. + +Change 3168 on 2004/03/06 by nick@llama + + HPUX/IA64 fix for libpng from + "SEIP,CHRISTOPHER (HP-Roseville,ex1)" + +Change 3167 on 2004/03/06 by nick@llama + + Steve's patch to make listbox demos take focus. + +Change 3166 on 2004/02/29 by nick@llama + + VTABLE cleanup load side + +Change 3165 on 2004/02/29 by nick@llama + + A little more protection on loading + wrong vtables. + +Change 3164 on 2004/02/29 by nick@llama + + tkImgGIF does not need vtables + +Change 3163 on 2004/02/29 by nick@llama + + AIX PNG patch + +Change 3162 on 2004/02/28 by nick@llama + + Tk-804.025_beta15 Release Preparation + Change 3161 on 2004/02/28 by nick@llama Fix my e-mail address in a few spots Index: Compound/Compound.xs --- Tk-804.025_beta15/Compound/Compound.xs 2003-11-20 19:57:03.000000000 +0000 +++ Tk-804.025_beta16/Compound/Compound.xs 2004-02-29 13:17:02.000000000 +0000 @@ -19,8 +19,7 @@ #include "pTk/tkVMacro.h" DECLARE_VTABLES; -TixVtab *TixVptr ; -TixintVtab *TixintVptr ; +DECLARE_TIX; extern Tk_ImageType tixCompoundImageType; @@ -33,7 +32,6 @@ BOOT: { IMPORT_VTABLES; - TixVptr = INT2PTR(TixVtab *, SvIV(perl_get_sv("Tk::TixVtab",5))); - TixintVptr = INT2PTR(TixintVtab *, SvIV(perl_get_sv("Tk::TixintVtab",5))); + IMPORT_TIX; Tk_CreateImageType(&tixCompoundImageType); } Index: Event/Event.xs --- Tk-804.025_beta15/Event/Event.xs 2004-01-12 21:31:32.000000000 +0000 +++ Tk-804.025_beta16/Event/Event.xs 2004-03-07 18:51:17.000000000 +0000 @@ -472,6 +472,7 @@ IO *tmpio = GvIOp(filePtr->untied); IoIFP(tmpio) = IoIFP(filePtr->io); IoOFP(tmpio) = IoOFP(filePtr->io); + IoFLAGS(tmpio) = IoFLAGS(filePtr->io); return newRV((SV *) filePtr->untied); } return &PL_sv_undef; Index: HList/HList.xs --- Tk-804.025_beta15/HList/HList.xs 2003-12-09 22:00:55.000000000 +0000 +++ Tk-804.025_beta16/HList/HList.xs 2004-02-29 13:17:41.000000000 +0000 @@ -20,8 +20,7 @@ DECLARE_VTABLES; -TixVtab *TixVptr ; -TixintVtab *TixintVptr ; +DECLARE_TIX; MODULE = Tk::HList PACKAGE = Tk @@ -37,6 +36,5 @@ BOOT: { IMPORT_VTABLES; - TixVptr = INT2PTR(TixVtab *, SvIV(perl_get_sv("Tk::TixVtab",5))); - TixintVptr = INT2PTR(TixintVtab *, SvIV(perl_get_sv("Tk::TixintVtab",5))); + IMPORT_TIX; } Index: IO/IO.xs --- Tk-804.025_beta15/IO/IO.xs 2003-12-07 13:28:21.000000000 +0000 +++ Tk-804.025_beta16/IO/IO.xs 2004-02-29 13:09:24.000000000 +0000 @@ -20,8 +20,7 @@ #include "tkGlue.h" #include "tkGlue.m" -TkeventVtab *TkeventVptr; - +DECLARE_EVENT; #define InputStream PerlIO * #define OutputStream PerlIO * @@ -291,5 +290,5 @@ BOOT: { - TkeventVptr = INT2PTR(TkeventVtab *, SvIV(perl_get_sv("Tk::TkeventVtab",GV_ADDWARN|GV_ADD))); + IMPORT_EVENT; } Index: InputO/InputO.xs --- Tk-804.025_beta15/InputO/InputO.xs 2003-12-09 22:00:43.000000000 +0000 +++ Tk-804.025_beta16/InputO/InputO.xs 2004-02-29 13:22:43.000000000 +0000 @@ -20,8 +20,7 @@ DECLARE_VTABLES; -TixVtab *TixVptr ; -TixintVtab *TixintVptr ; +DECLARE_TIX; MODULE = Tk::InputO PACKAGE = Tk @@ -37,6 +36,5 @@ BOOT: { IMPORT_VTABLES; - TixVptr = INT2PTR(TixVtab *, SvIV(perl_get_sv("Tk::TixVtab",5))); - TixintVptr = INT2PTR(TixintVtab *, SvIV(perl_get_sv("Tk::TixintVtab",5))); + IMPORT_TIX; } Index: JPEG/JPEG.xs --- Tk-804.025_beta15/JPEG/JPEG.xs 2003-11-20 19:40:36.000000000 +0000 +++ Tk-804.025_beta16/JPEG/JPEG.xs 2004-02-29 13:05:24.000000000 +0000 @@ -23,8 +23,7 @@ extern Tk_PhotoImageFormat imgFmtJPEG; DECLARE_VTABLES; -TkimgphotoVtab *TkimgphotoVptr; -ImgintVtab *ImgintVptr; +DECLARE_PHOTO; MODULE = Tk::JPEG PACKAGE = Tk::JPEG @@ -33,7 +32,6 @@ BOOT: { IMPORT_VTABLES; - TkimgphotoVptr = (TkimgphotoVtab *) SvIV(FindTkVarName("TkimgphotoVtab",5)); \ - ImgintVptr = (ImgintVtab *) SvIV(FindTkVarName("ImgintVtab",5)); \ + IMPORT_PHOTO; Tk_CreatePhotoImageFormat(&imgFmtJPEG); } Index: MANIFEST --- Tk-804.025_beta15/MANIFEST 2004-01-02 18:41:44.000000000 +0000 +++ Tk-804.025_beta16/MANIFEST 2004-03-06 13:30:05.000000000 +0000 @@ -658,6 +658,7 @@ PNG/libpng/scripts/makefile.gcmmx PNG/libpng/scripts/makefile.hpgcc PNG/libpng/scripts/makefile.hpux +PNG/libpng/scripts/makefile.hpux.ia64 PNG/libpng/scripts/makefile.ibmc PNG/libpng/scripts/makefile.intel PNG/libpng/scripts/makefile.knr Index: Mwm/Mwm.xs --- Tk-804.025_beta15/Mwm/Mwm.xs 2003-11-20 19:52:14.000000000 +0000 +++ Tk-804.025_beta16/Mwm/Mwm.xs 2004-02-29 13:18:31.000000000 +0000 @@ -21,8 +21,7 @@ DECLARE_VTABLES; -TixVtab *TixVptr ; -TixintVtab *TixintVptr ; +DECLARE_TIX; MODULE = Tk::Mwm PACKAGE = Tk::Mwm @@ -32,8 +31,7 @@ BOOT: { IMPORT_VTABLES; - TixVptr = INT2PTR(TixVtab *, SvIV(perl_get_sv("Tk::TixVtab",5))); - TixintVptr = INT2PTR(TixintVtab *, SvIV(perl_get_sv("Tk::TixintVtab",5))); + IMPORT_TIX; /* Initialize the display item types */ #if !defined(__WIN32__) && !defined(__PM__) Lang_TkSubCommand("mwm",Tix_MwmCmd); Index: NBFrame/NBFrame.xs --- Tk-804.025_beta15/NBFrame/NBFrame.xs 2003-12-09 21:59:07.000000000 +0000 +++ Tk-804.025_beta16/NBFrame/NBFrame.xs 2004-02-29 13:04:08.000000000 +0000 @@ -20,8 +20,7 @@ DECLARE_VTABLES; -TixVtab *TixVptr ; -TixintVtab *TixintVptr ; +DECLARE_TIX; MODULE = Tk::NBFrame PACKAGE = Tk @@ -34,10 +33,8 @@ TKXSRETURN(XSTkCommand(cv,1,Tix_NoteBookFrameCmd,items,&ST(0))); } - BOOT: { IMPORT_VTABLES; - TixVptr = INT2PTR(TixVtab *, SvIV(perl_get_sv("Tk::TixVtab",5))); - TixintVptr = INT2PTR(TixintVtab *, SvIV(perl_get_sv("Tk::TixintVtab",5))); + IMPORT_TIX; } Index: PNG/MANIFEST --- Tk-804.025_beta15/PNG/MANIFEST 2003-12-21 11:37:31.000000000 +0000 +++ Tk-804.025_beta16/PNG/MANIFEST 2004-03-06 13:29:38.000000000 +0000 @@ -148,6 +148,7 @@ libpng/scripts/makefile.gcmmx libpng/scripts/makefile.hpgcc libpng/scripts/makefile.hpux +libpng/scripts/makefile.hpux.ia64 libpng/scripts/makefile.ibmc libpng/scripts/makefile.intel libpng/scripts/makefile.knr Index: PNG/PNG.xs --- Tk-804.025_beta15/PNG/PNG.xs 2003-11-29 11:39:29.000000000 +0000 +++ Tk-804.025_beta16/PNG/PNG.xs 2004-02-29 13:31:00.000000000 +0000 @@ -14,17 +14,16 @@ #include "pTk/tkInt.h" #include "tkGlue.h" #include "tkGlue.m" -#include "pTk/tkVMacro.h" #include "pTk/tkImgPhoto.h" #include "pTk/tkImgPhoto.m" #include "pTk/imgInt.h" #include "pTk/imgInt.m" +#include "pTk/tkVMacro.h" extern Tk_PhotoImageFormat imgFmtPNG; DECLARE_VTABLES; -TkimgphotoVtab *TkimgphotoVptr; -ImgintVtab *ImgintVptr; +DECLARE_PHOTO; MODULE = Tk::PNG PACKAGE = Tk::PNG @@ -33,7 +32,6 @@ BOOT: { IMPORT_VTABLES; - TkimgphotoVptr = (TkimgphotoVtab *) SvIV(FindTkVarName("TkimgphotoVtab",5)); \ - ImgintVptr = (ImgintVtab *) SvIV(FindTkVarName("ImgintVtab",5)); \ + IMPORT_PHOTO; Tk_CreatePhotoImageFormat(&imgFmtPNG); } Index: PNG/libpng/Makefile.maybe --- Tk-804.025_beta15/PNG/libpng/Makefile.maybe 2003-12-30 10:46:06.000000000 +0000 +++ Tk-804.025_beta16/PNG/libpng/Makefile.maybe 2004-03-06 13:27:39.000000000 +0000 @@ -29,13 +29,20 @@ } else { - $file = 'scripts/makefile.std'; - my %makefiles = map { /makefile\.(.*)/ && ($1 => $_) } glob('scripts/makefile.*'); - foreach my $arch (sort keys %makefiles) + if (($Config{archname} =~ /^IA64\./) && ($^O eq "hpux")) { - if ($^O =~ /$arch/i) + $file = 'scripts/makefile.hpux.ia64'; + } + else + { + $file = 'scripts/makefile.std'; + my %makefiles = map { /makefile\.(.*)/ && ($1 => $_) } glob('scripts/makefile.*'); + foreach my $arch (sort keys %makefiles) { - $file = $makefiles{$arch}; + if ($^O =~ /$arch/i) + { + $file = $makefiles{$arch}; + } } } } @@ -45,3 +52,4 @@ copy($file,"Makefile") || die "Cannot copy $file to Makefile:$!"; 1; + Index: PNG/libpng/scripts/makefile.aix --- Tk-804.025_beta15/PNG/libpng/scripts/makefile.aix 2003-11-29 11:39:31.000000000 +0000 +++ Tk-804.025_beta16/PNG/libpng/scripts/makefile.aix 2004-02-29 09:50:57.000000000 +0000 @@ -42,7 +42,10 @@ LDDEBUG = CRELEASE = -O2 LDRELEASE = -s +# gcc WARNMORE=-Wall +# AX CC +WARNMORE= CFLAGS = -I$(ZLIBINC) $(WARNMORE) $(CRELEASE) LDFLAGS = -L. -L$(ZLIBLIB) -lpng -lz -lm $(LDRELEASE) @@ -59,6 +62,9 @@ # Targets all: libpng$(A) pngtest$(E) +libpng$(A): $(LIBNAME)$(A) + ln -s $(LIBNAME)$(A) libpng$(A) + $(LIBNAME)$(A): $(OBJS) $(AR) $@ $(OBJS) $(RANLIB) $@ @@ -83,7 +89,7 @@ (cd $(DI); ln -f -s libpng/* .;) clean: - /bin/rm -f *.o $(LIBNAME)$(A) pngtest pngout.png + /bin/rm -f *.o $(LIBNAME)$(A) libpng$(A) pngtest pngout.png png$(O): png.h pngconf.h pngerror$(O): png.h pngconf.h Index: PNG/libpng/scripts/makefile.hpux.ia64 --- /dev/null 2003-09-23 18:59:22.000000000 +0100 +++ Tk-804.025_beta16/PNG/libpng/scripts/makefile.hpux.ia64 2004-03-06 13:28:29.000000000 +0000 @@ -0,0 +1,203 @@ +# makefile for libpng, HPUX (10.20 and 11.00) using the ANSI/C product. +# Copyright (C) 1999-2002 Glenn Randers-Pehrson +# Copyright (C) 1995 Guy Eric Schalnat, Group 42 +# contributed by Jim Rice and updated by Chris Schleicher, Hewlett Packard +# For conditions of distribution and use, see copyright notice in png.h + +# Where the zlib library and include files are located +ZLIBLIB=../zlib +ZLIBINC=../zlib + +# Note that if you plan to build a libpng shared library, zlib must also +# be a shared library, which zlib's configure does not do. After running +# zlib's configure, edit the appropriate lines of makefile to read: +# CFLAGS=-O1 -DHAVE_UNISTD -DUSE_MAP -fPIC \ +# LDSHARED=ld -b +# SHAREDLIB=libz.sl + +CC=cc +CFLAGS=-I$(ZLIBINC) -O +# Caution: be sure you have built zlib with the same CFLAGS. +CCFLAGS=-I$(ZLIBINC) -O +LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm + +RANLIB=ranlib + +PNGMAJ = 0 +PNGMIN = 1.2.5 +PNGVER = $(PNGMAJ).$(PNGMIN) +LIBNAME = libpng12 + +# where make install puts libpng.a, libpng12.sl, and png.h +prefix=/opt/libpng +INCPATH=$(prefix)/include +LIBPATH=$(prefix)/lib +MANPATH=$(prefix)/man +BINPATH=$(prefix)/bin + +# override DESTDIR= on the make install command line to easily support +# installing into a temporary location. Example: +# +# make install DESTDIR=/tmp/build/libpng +# +# If you're going to install into a temporary location +# via DESTDIR, $(DESTDIR)$(prefix) must already exist before +# you execute make install. +DESTDIR= + +DB=$(DESTDIR)$(BINPATH) +DI=$(DESTDIR)$(INCPATH) +DL=$(DESTDIR)$(LIBPATH) +DM=$(DESTDIR)$(MANPATH) + +OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \ + pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \ + pngwtran.o pngmem.o pngerror.o pngpread.o + +OBJSDLL = $(OBJS:.o=.pic.o) + +.SUFFIXES: .c .o .pic.o + +.c.pic.o: + $(CC) -c $(CFLAGS) +z -o $@ $*.c + +all: libpng.a $(LIBNAME).sl pngtest libpng.pc libpng-config + +libpng.a: $(OBJS) + ar rc $@ $(OBJS) + $(RANLIB) $@ + +libpng.pc: + cat scripts/libpng.pc.in | sed -e s\!@PREFIX@!$(prefix)! > libpng.pc + +libpng-config: + ( cat scripts/libpng-config-head.in; \ + echo prefix=\"$(prefix)\"; \ + echo I_opts=\"-I$(INCPATH)/$(LIBNAME)\"; \ + echo ccopts=\"-Ae +DA1.1 +DS2.0\"; \ + echo L_opts=\"-L$(LIBPATH)\"; \ + echo libs=\"-lpng12 -lz -lm\"; \ + cat scripts/libpng-config-body.in ) > libpng-config + chmod +x libpng-config + +$(LIBNAME).sl: $(LIBNAME).sl.$(PNGMAJ) + ln -sf $(LIBNAME).sl.$(PNGMAJ) $(LIBNAME).sl + +$(LIBNAME).sl.$(PNGMAJ): $(LIBNAME).sl.$(PNGVER) + ln -sf $(LIBNAME).sl.$(PNGVER) $(LIBNAME).sl.$(PNGMAJ) + +$(LIBNAME).sl.$(PNGVER): $(OBJSDLL) + $(LD) -b +s \ + +h $(LIBNAME).sl.$(PNGMAJ) -o $(LIBNAME).sl.$(PNGVER) $(OBJSDLL) + +libpng.sl.3.$(PNGMIN): $(OBJSDLL) + $(LD) -b +s \ + +h libpng.sl.3 -o libpng.sl.3.$(PNGMIN) $(OBJSDLL) + +pngtest: pngtest.o libpng.a + $(CC) -o pngtest $(CCFLAGS) pngtest.o $(LDFLAGS) + +test: pngtest + ./pngtest + +install-headers: png.h pngconf.h + -@if [ ! -d $(DI) ]; then mkdir $(DI); fi + -@if [ ! -d $(DI)/$(LIBNAME) ]; then mkdir $(DI)/$(LIBNAME); fi + cp png.h pngconf.h $(DI)/$(LIBNAME) + chmod 644 $(DI)/$(LIBNAME)/png.h $(DI)/$(LIBNAME)/pngconf.h + -@/bin/rm -f $(DI)/png.h $(DI)/pngconf.h + -@/bin/rm -f $(DI)/libpng + (cd $(DI); ln -sf $(LIBNAME) libpng; ln -sf $(LIBNAME)/* .) + +install-static: install-headers libpng.a + -@if [ ! -d $(DL) ]; then mkdir $(DL); fi + cp libpng.a $(DL)/$(LIBNAME).a + chmod 644 $(DL)/$(LIBNAME).a + -@/bin/rm -f $(DL)/libpng.a + (cd $(DL); ln -sf $(LIBNAME).a libpng.a) + +install-shared: install-headers $(LIBNAME).sl.$(PNGVER) libpng.pc \ + libpng.sl.3.$(PNGMIN) + -@if [ ! -d $(DL) ]; then mkdir $(DL); fi + -@/bin/rm -f $(DL)/$(LIBNAME).sl.$(PNGVER)* $(DL)/$(LIBNAME).sl + -@/bin/rm -f $(DL)/libpng.sl + -@/bin/rm -f $(DL)/libpng.sl.3 + -@/bin/rm -f $(DL)/libpng.sl.3.$(PNGMIN)* + cp $(LIBNAME).sl.$(PNGVER) $(DL) + cp libpng.sl.3.$(PNGMIN) $(DL) + chmod 755 $(DL)/$(LIBNAME).sl.$(PNGVER) + chmod 755 $(DL)/libpng.sl.3.$(PNGMIN) + (cd $(DL); \ + ln -sf libpng.sl.3.$(PNGMIN) libpng.sl.3; \ + ln -sf libpng.sl.3 libpng.sl; \ + ln -sf $(LIBNAME).sl.$(PNGVER) $(LIBNAME).sl.$(PNGMAJ); \ + ln -sf $(LIBNAME).sl.$(PNGMAJ) $(LIBNAME).sl) + -@if [ ! -d $(DL)/pkgconfig ]; then mkdir $(DL)/pkgconfig; fi + -@/bin/rm -f $(DL)/pkgconfig/$(LIBNAME).pc + -@/bin/rm -f $(DL)/pkgconfig/libpng.pc + cp libpng.pc $(DL)/pkgconfig/$(LIBNAME).pc + chmod 644 $(DL)/pkgconfig/$(LIBNAME).pc + (cd $(DL)/pkgconfig; ln -sf $(LIBNAME).pc libpng.pc) + +install-man: libpng.3 libpngpf.3 png.5 + -@if [ ! -d $(DM) ]; then mkdir $(DM); fi + -@if [ ! -d $(DM)/man3 ]; then mkdir $(DM)/man3; fi + -@/bin/rm -f $(DM)/man3/libpng.3 + -@/bin/rm -f $(DM)/man3/libpngpf.3 + cp libpng.3 $(DM)/man3 + cp libpngpf.3 $(DM)/man3 + -@if [ ! -d $(DM)/man5 ]; then mkdir $(DM)/man5; fi + -@/bin/rm -f $(DM)/man5/png.5 + cp png.5 $(DM)/man5 + +install-config: libpng-config + -@if [ ! -d $(DB) ]; then mkdir $(DB); fi + -@/bin/rm -f $(DB)/libpng-config + -@/bin/rm -f $(DB)/$(LIBNAME)-config + cp libpng-config $(DB)/$(LIBNAME)-config + chmod 755 $(DB)/$(LIBNAME)-config + (cd $(DB); ln -sf $(LIBNAME)-config libpng-config) + +install: install-static install-shared install-man install-config + +# If you installed in $(DESTDIR), test-installed won't work until you +# move the library to its final location. + +test-installed: + echo + echo Testing installed dynamic shared library. + $(CC) $(CCFLAGS) \ + `$(BINPATH)/libpng12-config --cflags` pngtest.c \ + -L$(ZLIBLIB) \ + -o pngtesti `$(BINPATH)/libpng12-config --ldflags` + ./pngtesti pngtest.png + +clean: + /bin/rm -f *.o libpng.a pngtest pngtesti pngout.png \ + libpng-config $(LIBNAME).sl $(LIBNAME).sl.$(PNGMAJ)* \ + libpng.sl.3.$(PNGMIN) \ + libpng.pc + +DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO +writelock: + chmod a-w *.[ch35] $(DOCS) scripts/* + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +png.o: png.h pngconf.h +pngerror.o: png.h pngconf.h +pngrio.o: png.h pngconf.h +pngwio.o: png.h pngconf.h +pngmem.o: png.h pngconf.h +pngset.o: png.h pngconf.h +pngget.o: png.h pngconf.h +pngread.o: png.h pngconf.h +pngrtran.o: png.h pngconf.h +pngrutil.o: png.h pngconf.h +pngtest.o: png.h pngconf.h +pngtrans.o: png.h pngconf.h +pngwrite.o: png.h pngconf.h +pngwtran.o: png.h pngconf.h +pngwutil.o: png.h pngconf.h +pngpread.o: png.h pngconf.h + Index: PNG/libpng/scripts/makefile.solaris --- Tk-804.025_beta15/PNG/libpng/scripts/makefile.solaris 2003-11-29 11:39:32.000000000 +0000 +++ Tk-804.025_beta16/PNG/libpng/scripts/makefile.solaris 2004-03-06 22:59:03.000000000 +0000 @@ -22,7 +22,7 @@ WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \ -Wmissing-declarations -Wtraditional -Wcast-align \ -Wstrict-prototypes -Wmissing-prototypes #-Wconversion -CFLAGS=-I$(ZLIBINC) -Wall -O3 \ +CFLAGS=-I$(ZLIBINC) \ # $(WARNMORE) -g -DPNG_DEBUG=5 LDFLAGS=-L. -R. -L$(ZLIBLIB) -R$(ZLIBLIB) -lpng12 -lz -lm Index: TList/TList.xs --- Tk-804.025_beta15/TList/TList.xs 2003-12-09 21:59:41.000000000 +0000 +++ Tk-804.025_beta16/TList/TList.xs 2004-02-29 13:23:23.000000000 +0000 @@ -20,8 +20,7 @@ DECLARE_VTABLES; -TixVtab *TixVptr ; -TixintVtab *TixintVptr ; +DECLARE_TIX; MODULE = Tk::TList PACKAGE = Tk @@ -37,6 +36,5 @@ BOOT: { IMPORT_VTABLES; - TixVptr = INT2PTR(TixVtab *, SvIV(perl_get_sv("Tk::TixVtab",5))); - TixintVptr = INT2PTR(TixintVtab *, SvIV(perl_get_sv("Tk::TixintVtab",5))); + IMPORT_TIX; } Index: TixGrid/TixGrid.xs --- Tk-804.025_beta15/TixGrid/TixGrid.xs 2003-12-09 21:58:33.000000000 +0000 +++ Tk-804.025_beta16/TixGrid/TixGrid.xs 2004-02-29 13:10:41.000000000 +0000 @@ -20,8 +20,7 @@ DECLARE_VTABLES; -TixVtab *TixVptr ; -TixintVtab *TixintVptr ; +DECLARE_TIX; MODULE = Tk::TixGrid PACKAGE = Tk @@ -38,6 +37,5 @@ BOOT: { IMPORT_VTABLES; - TixVptr = (TixVtab *) SvIV(perl_get_sv("Tk::TixVtab",5)); - TixintVptr = (TixintVtab *) SvIV(perl_get_sv("Tk::TixintVtab",5)); + IMPORT_TIX; } Index: TixPixmap/Pixmap.xs --- Tk-804.025_beta15/TixPixmap/Pixmap.xs 2003-11-20 19:50:37.000000000 +0000 +++ Tk-804.025_beta16/TixPixmap/Pixmap.xs 2004-02-29 13:39:53.000000000 +0000 @@ -20,9 +20,8 @@ #include "pTk/tkVMacro.h" DECLARE_VTABLES; -TixVtab *TixVptr ; -TixintVtab *TixintVptr ; -TiximgxpmVtab *TiximgxpmVptr ; +DECLARE_TIX; +DECLARE_TIXXPM; extern Tk_ImageType tixPixmapImageType; @@ -61,9 +60,7 @@ BOOT: { IMPORT_VTABLES; - TixVptr = INT2PTR(TixVtab *, SvIV(perl_get_sv("Tk::TixVtab",5))); - TixintVptr = INT2PTR(TixintVtab *, SvIV(perl_get_sv("Tk::TixintVtab",5))); - TiximgxpmVptr = INT2PTR(TiximgxpmVtab *, SvIV(perl_get_sv("Tk::TiximgxpmVtab",5))); - + IMPORT_TIX; + IMPORT_TIXXPM; Tk_CreateImageType(&tixPixmapImageType); } Index: Tk.pm --- Tk-804.025_beta15/Tk.pm 2004-02-28 17:26:35.000000000 +0000 +++ Tk-804.025_beta16/Tk.pm 2004-03-07 20:22:25.000000000 +0000 @@ -62,7 +62,7 @@ use Carp; # Record author's perforce depot record -$Tk::CHANGE = q$Change: 3162 $; +$Tk::CHANGE = q$Change: 3174 $; # $tk_version and $tk_patchLevel are reset by pTk when a mainwindow # is created, $VERSION is checked by bootstrap Index: WinPhoto/WinPhoto.xs --- Tk-804.025_beta15/WinPhoto/WinPhoto.xs 2003-11-20 19:56:28.000000000 +0000 +++ Tk-804.025_beta16/WinPhoto/WinPhoto.xs 2004-02-29 13:31:10.000000000 +0000 @@ -12,11 +12,13 @@ #include #include +#include +#include #include #include +#include "pTk/imgInt.h" +#include "pTk/imgInt.m" #include -#include -#include #undef memcpy @@ -196,7 +198,7 @@ DECLARE_VTABLES; -TkimgphotoVtab *TkimgphotoVptr; +DECLARE_PHOTO; MODULE = Tk::WinPhoto PACKAGE = Tk::WinPhoto @@ -205,7 +207,7 @@ BOOT: { IMPORT_VTABLES; - TkimgphotoVptr = (TkimgphotoVtab *) SvIV(FindTkVarName("TkimgphotoVtab",5)); \ + IMPORT_PHOTO; Tk_CreatePhotoImageFormat(&tkImgFmtWindow); } Index: demos/demos/widget_lib/colors.pl --- Tk-804.025_beta15/demos/demos/widget_lib/colors.pl 2003-07-19 09:39:04.000000000 +0100 +++ Tk-804.025_beta16/demos/demos/widget_lib/colors.pl 2004-03-06 13:24:57.000000000 +0000 @@ -18,6 +18,7 @@ my $list = $TOP->Scrolled(qw/Listbox -width 20 -height 16 -setgrid 1 -scrollbars e/); $list->pack(qw/-side left -fill y/); + $list->focus; $list->bind('' => sub { @@ -77,6 +78,8 @@ MediumPurple1 MediumPurple2 MediumPurple3 MediumPurple4 thistle1 thistle2 thistle3 thistle4/); + $list->activate(0); + } # end colors 1; Index: demos/demos/widget_lib/sayings.pl --- Tk-804.025_beta15/demos/demos/widget_lib/sayings.pl 2003-07-19 09:39:05.000000000 +0100 +++ Tk-804.025_beta16/demos/demos/widget_lib/sayings.pl 2004-03-06 13:25:01.000000000 +0000 @@ -19,6 +19,7 @@ my $list = $TOP->Scrolled(qw/Listbox -width 20 -height 10 -setgrid 1 -scrollbars se/); $list->pack(qw/-expand yes -fill y/); + $list->focus; $list->insert(0, 'Waste not, want not', @@ -40,6 +41,8 @@ 'An apple a day keeps the doctor away', 'Don\'t look a gift horse in the mouth'); + $list->activate(0); + } # end sayings 1; Index: demos/demos/widget_lib/states.pl --- Tk-804.025_beta15/demos/demos/widget_lib/states.pl 2003-07-19 09:39:05.000000000 +0100 +++ Tk-804.025_beta16/demos/demos/widget_lib/states.pl 2004-03-06 13:25:02.000000000 +0000 @@ -17,9 +17,12 @@ my $list = $TOP->Scrolled(qw/Listbox -setgrid 1 -height 12 -scrollbars e/); $list->pack(qw/-side left -expand yes -fill both/); + $list->focus; $list->insert(0, qw/Alabama Alaska Arizona Arkansas California Colorado Connecticut Delaware Florida Georgia Hawaii Idaho Illinois Indiana Iowa Kansas Kentucky Louisiana Maine Maryland Massachusetts Michigan Minnesota Mississippi Missouri Montana Nebraska Nevada/, 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', qw/Ohio Oklahoma Oregon Pennsylvania/, 'Rhode Island', 'South Carolina', 'South Dakota', qw/Tennessee Texas Utah Vermont Virginia Washington/, 'West Virginia', 'Wisconsin', 'Wyoming'); + $list->activate(0); + } # end states 1; Index: objGlue.c --- Tk-804.025_beta15/objGlue.c 2004-02-28 11:01:30.000000000 +0000 +++ Tk-804.025_beta16/objGlue.c 2004-03-07 19:54:07.000000000 +0000 @@ -478,17 +478,26 @@ { if (SvROK(sv) && SvPOK(SvRV(sv)) && !SvUTF8(SvRV(sv))) sv_utf8_upgrade(SvRV(sv)); - /* FIXME: Slaven's quick fix for magical (tied) SVs with only SvPOKp */ else if (SvPOKp(sv) && !SvPOK(sv)) { - SvPOK_on(sv); - sv_utf8_upgrade(sv); - SvPOK_off(sv); - SvPOKp_on(sv); + if (SvTYPE(sv) == SVt_PVLV && !SvUTF8(sv)) + { + /* LVs e.g. substr() don't upgrade */ + SV *copy = newSVsv(sv); + sv_utf8_upgrade(copy); + sv_setsv(sv,copy); + SvREFCNT_dec(copy); + } + else + { + /* Slaven's for magical (tied) SVs with only SvPOKp */ + SvPOK_on(sv); + sv_utf8_upgrade(sv); + SvPOK_off(sv); + SvPOKp_on(sv); + } } - else if (!SvUTF8(sv)) - sv_utf8_upgrade(sv); - return SvPV_nolen(sv); + return SvPVutf8_nolen(sv); } else return ""; Index: pTk/Lang_f.c --- Tk-804.025_beta15/pTk/Lang_f.c 2003-07-19 09:39:10.000000000 +0100 +++ Tk-804.025_beta16/pTk/Lang_f.c 2004-02-29 11:24:21.000000000 +0000 @@ -1,7 +1,9 @@ #include "Lang.h" #include "Lang_f.h" +static unsigned LangVSize(void) { return sizeof(LangVtab);} static LangVtab LangVtable = { + LangVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "Lang.t" Index: pTk/Lang_f.h --- Tk-804.025_beta15/pTk/Lang_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/Lang_f.h 2004-02-29 11:24:21.000000000 +0000 @@ -2,6 +2,7 @@ #define LANG_VT typedef struct LangVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "Lang.t" @@ -9,5 +10,5 @@ #undef VVAR } LangVtab; extern LangVtab *LangVptr; -extern LangVtab *LangVGet _ANSI_ARGS_((void)); +extern LangVtab *LangVGet(void); #endif /* LANG_VT */ Index: pTk/Xlib_f.c --- Tk-804.025_beta15/pTk/Xlib_f.c 2003-07-19 09:39:10.000000000 +0100 +++ Tk-804.025_beta16/pTk/Xlib_f.c 2004-02-29 11:30:06.000000000 +0000 @@ -8,8 +8,10 @@ #include "Xlib.h" #endif #include "Xlib_f.h" +static unsigned XlibVSize(void) { return sizeof(XlibVtab);} static XlibVtab XlibVtable = { + XlibVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "Xlib.t" Index: pTk/Xlib_f.h --- Tk-804.025_beta15/pTk/Xlib_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/Xlib_f.h 2004-02-29 11:24:40.000000000 +0000 @@ -2,6 +2,7 @@ #define XLIB_VT typedef struct XlibVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "Xlib.t" @@ -9,5 +10,5 @@ #undef VVAR } XlibVtab; extern XlibVtab *XlibVptr; -extern XlibVtab *XlibVGet (void); +extern XlibVtab *XlibVGet(void); #endif /* XLIB_VT */ Index: pTk/imgInt_f.c --- Tk-804.025_beta15/pTk/imgInt_f.c 2003-07-19 09:39:11.000000000 +0100 +++ Tk-804.025_beta16/pTk/imgInt_f.c 2004-02-29 11:24:51.000000000 +0000 @@ -1,7 +1,9 @@ #include "imgInt.h" #include "imgInt_f.h" +static unsigned ImgintVSize(void) { return sizeof(ImgintVtab);} static ImgintVtab ImgintVtable = { + ImgintVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "imgInt.t" Index: pTk/imgInt_f.h --- Tk-804.025_beta15/pTk/imgInt_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/imgInt_f.h 2004-02-29 11:24:51.000000000 +0000 @@ -2,6 +2,7 @@ #define IMGINT_VT typedef struct ImgintVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "imgInt.t" @@ -9,5 +10,5 @@ #undef VVAR } ImgintVtab; extern ImgintVtab *ImgintVptr; -extern ImgintVtab *ImgintVGet _ANSI_ARGS_((void)); +extern ImgintVtab *ImgintVGet(void); #endif /* IMGINT_VT */ Index: pTk/mTk/generic/tkImgGIF.c --- Tk-804.025_beta15/pTk/mTk/generic/tkImgGIF.c 2004-02-28 10:47:25.000000000 +0000 +++ Tk-804.025_beta16/pTk/mTk/generic/tkImgGIF.c 2004-02-29 10:20:28.000000000 +0000 @@ -33,7 +33,6 @@ */ #include "tkPort.h" -#include "tkVMacro.h" /* * GIF's are represented as data in base64 format. Index: pTk/mTk/win/tkWinMenu.c --- Tk-804.025_beta15/pTk/mTk/win/tkWinMenu.c 2003-12-19 11:55:04.000000000 +0000 +++ Tk-804.025_beta16/pTk/mTk/win/tkWinMenu.c 2004-03-06 22:23:34.000000000 +0000 @@ -1134,7 +1134,14 @@ mePtr = NULL; if (flags != 0xFFFF) { if (flags & MF_POPUP) { - mePtr = menuPtr->entries[LOWORD(*pwParam)]; + int index = LOWORD(*pwParam); + if ((menuPtr->menuType == MENUBAR) && (menuPtr->tearoff)) { + /* Code above has skipped the tearoff entry on a menubar + so Windows's index differs from Tk's + */ + index++; + } + mePtr = menuPtr->entries[index]; } else { hashEntryPtr = Tcl_FindHashEntry( &tsdPtr->commandTable, Index: pTk/mkVFunc --- Tk-804.025_beta15/pTk/mkVFunc 2003-12-10 08:26:30.000000000 +0000 +++ Tk-804.025_beta16/pTk/mkVFunc 2004-02-29 11:22:01.000000000 +0000 @@ -238,6 +238,7 @@ print C "#ifndef ${gard}_VT\n"; print C "#define ${gard}_VT\n"; print C "typedef struct ${name}tab\n{\n"; + print C " unsigned (*tabSize)(void);\n"; print C "#define VFUNC(type,name,mem,args) type (*mem) args;\n"; print C "#define VVAR(type,name,mem) type (*mem);\n"; print C "#include \"$fdef\"\n"; @@ -245,7 +246,7 @@ print C "#undef VVAR\n"; print C "} ${name}tab;\n"; print C "extern ${name}tab *${name}ptr;\n"; - print C "extern ${name}tab *${name}Get _ANSI_ARGS_((void));\n"; + print C "extern ${name}tab *${name}Get(void);\n"; print C "#endif /* ${gard}_VT */\n"; close(C); } @@ -257,7 +258,9 @@ openRO(\*C,$cfile) || die "Cannot open $cfile:$!"; print C "#include \"$hfile\"\n"; print C "#include \"$htfile\"\n"; + print C "static unsigned ${name}Size(void) { return sizeof(${name}tab);}\n"; print C "static ${name}tab ${name}table =\n{\n"; + print C " ${name}Size,\n"; print C "#define VFUNC(type,name,mem,args) name,\n"; print C "#define VVAR(type,name,mem) &name,\n"; print C "#include \"$fdef\"\n"; Index: pTk/tclDecls_f.c --- Tk-804.025_beta15/pTk/tclDecls_f.c 2003-07-19 09:39:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tclDecls_f.c 2004-02-29 11:31:16.000000000 +0000 @@ -1,7 +1,9 @@ #include "Lang.h" #include "tclDecls_f.h" +static unsigned TcldeclsVSize(void) { return sizeof(TcldeclsVtab);} static TcldeclsVtab TcldeclsVtable = { + TcldeclsVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tclDecls.t" Index: pTk/tclDecls_f.h --- Tk-804.025_beta15/pTk/tclDecls_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tclDecls_f.h 2004-02-29 11:24:58.000000000 +0000 @@ -2,6 +2,7 @@ #define TCLDECLS_VT typedef struct TcldeclsVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tclDecls.t" @@ -9,5 +10,5 @@ #undef VVAR } TcldeclsVtab; extern TcldeclsVtab *TcldeclsVptr; -extern TcldeclsVtab *TcldeclsVGet _ANSI_ARGS_((void)); +extern TcldeclsVtab *TcldeclsVGet(void); #endif /* TCLDECLS_VT */ Index: pTk/tixImgXpm_f.c --- Tk-804.025_beta15/pTk/tixImgXpm_f.c 2003-07-19 09:39:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tixImgXpm_f.c 2004-02-29 11:32:23.000000000 +0000 @@ -2,8 +2,10 @@ #include "tixInt.h" #include "tixImgXpm.h" #include "tixImgXpm_f.h" +static unsigned TiximgxpmVSize(void) { return sizeof(TiximgxpmVtab);} static TiximgxpmVtab TiximgxpmVtable = { + TiximgxpmVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tixImgXpm.t" Index: pTk/tixImgXpm_f.h --- Tk-804.025_beta15/pTk/tixImgXpm_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tixImgXpm_f.h 2004-02-29 11:24:58.000000000 +0000 @@ -2,6 +2,7 @@ #define TIXIMGXPM_VT typedef struct TiximgxpmVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tixImgXpm.t" @@ -9,5 +10,5 @@ #undef VVAR } TiximgxpmVtab; extern TiximgxpmVtab *TiximgxpmVptr; -extern TiximgxpmVtab *TiximgxpmVGet _ANSI_ARGS_((void)); +extern TiximgxpmVtab *TiximgxpmVGet(void); #endif /* TIXIMGXPM_VT */ Index: pTk/tixInt_f.c --- Tk-804.025_beta15/pTk/tixInt_f.c 2003-07-19 09:39:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tixInt_f.c 2004-02-29 11:24:58.000000000 +0000 @@ -1,9 +1,9 @@ -#include "tkPort.h" -#include "tixPort.h" #include "tixInt.h" #include "tixInt_f.h" +static unsigned TixintVSize(void) { return sizeof(TixintVtab);} static TixintVtab TixintVtable = { + TixintVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tixInt.t" Index: pTk/tixInt_f.h --- Tk-804.025_beta15/pTk/tixInt_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tixInt_f.h 2004-02-29 11:24:58.000000000 +0000 @@ -2,6 +2,7 @@ #define TIXINT_VT typedef struct TixintVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tixInt.t" @@ -9,5 +10,5 @@ #undef VVAR } TixintVtab; extern TixintVtab *TixintVptr; -extern TixintVtab *TixintVGet _ANSI_ARGS_((void)); +extern TixintVtab *TixintVGet(void); #endif /* TIXINT_VT */ Index: pTk/tix_f.c --- Tk-804.025_beta15/pTk/tix_f.c 2003-07-19 09:39:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tix_f.c 2004-02-29 11:24:58.000000000 +0000 @@ -1,10 +1,9 @@ -#include "tkPort.h" -#include "tk.h" -#include "tixPort.h" #include "tix.h" #include "tix_f.h" +static unsigned TixVSize(void) { return sizeof(TixVtab);} static TixVtab TixVtable = { + TixVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tix.t" Index: pTk/tix_f.h --- Tk-804.025_beta15/pTk/tix_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tix_f.h 2004-02-29 11:24:58.000000000 +0000 @@ -2,6 +2,7 @@ #define TIX_VT typedef struct TixVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tix.t" @@ -9,5 +10,5 @@ #undef VVAR } TixVtab; extern TixVtab *TixVptr; -extern TixVtab *TixVGet _ANSI_ARGS_((void)); +extern TixVtab *TixVGet(void); #endif /* TIX_VT */ Index: pTk/tkDecls_f.c --- Tk-804.025_beta15/pTk/tkDecls_f.c 2003-07-19 09:39:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkDecls_f.c 2004-02-29 11:33:24.000000000 +0000 @@ -1,7 +1,9 @@ #include "tk.h" #include "tkDecls_f.h" +static unsigned TkdeclsVSize(void) { return sizeof(TkdeclsVtab);} static TkdeclsVtab TkdeclsVtable = { + TkdeclsVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tkDecls.t" Index: pTk/tkDecls_f.h --- Tk-804.025_beta15/pTk/tkDecls_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkDecls_f.h 2004-02-29 11:24:59.000000000 +0000 @@ -2,6 +2,7 @@ #define TKDECLS_VT typedef struct TkdeclsVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tkDecls.t" @@ -9,5 +10,5 @@ #undef VVAR } TkdeclsVtab; extern TkdeclsVtab *TkdeclsVptr; -extern TkdeclsVtab *TkdeclsVGet _ANSI_ARGS_((void)); +extern TkdeclsVtab *TkdeclsVGet(void); #endif /* TKDECLS_VT */ Index: pTk/tkEvent_f.c --- Tk-804.025_beta15/pTk/tkEvent_f.c 2003-07-19 09:39:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkEvent_f.c 2004-02-29 11:34:11.000000000 +0000 @@ -2,8 +2,10 @@ #include "Lang.h" #include "tkEvent.h" #include "tkEvent_f.h" +static unsigned TkeventVSize(void) { return sizeof(TkeventVtab);} static TkeventVtab TkeventVtable = { + TkeventVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tkEvent.t" Index: pTk/tkEvent_f.h --- Tk-804.025_beta15/pTk/tkEvent_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkEvent_f.h 2004-02-29 11:24:59.000000000 +0000 @@ -2,6 +2,7 @@ #define TKEVENT_VT typedef struct TkeventVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tkEvent.t" @@ -9,5 +10,5 @@ #undef VVAR } TkeventVtab; extern TkeventVtab *TkeventVptr; -extern TkeventVtab *TkeventVGet _ANSI_ARGS_((void)); +extern TkeventVtab *TkeventVGet(void); #endif /* TKEVENT_VT */ Index: pTk/tkImgPhoto_f.c --- Tk-804.025_beta15/pTk/tkImgPhoto_f.c 2003-07-19 09:39:40.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkImgPhoto_f.c 2004-02-29 11:35:03.000000000 +0000 @@ -2,8 +2,10 @@ #include "tkInt.h" #include "tkImgPhoto.h" #include "tkImgPhoto_f.h" +static unsigned TkimgphotoVSize(void) { return sizeof(TkimgphotoVtab);} static TkimgphotoVtab TkimgphotoVtable = { + TkimgphotoVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tkImgPhoto.t" Index: pTk/tkImgPhoto_f.h --- Tk-804.025_beta15/pTk/tkImgPhoto_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkImgPhoto_f.h 2004-02-29 11:24:59.000000000 +0000 @@ -2,6 +2,7 @@ #define TKIMGPHOTO_VT typedef struct TkimgphotoVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tkImgPhoto.t" @@ -9,5 +10,5 @@ #undef VVAR } TkimgphotoVtab; extern TkimgphotoVtab *TkimgphotoVptr; -extern TkimgphotoVtab *TkimgphotoVGet _ANSI_ARGS_((void)); +extern TkimgphotoVtab *TkimgphotoVGet(void); #endif /* TKIMGPHOTO_VT */ Index: pTk/tkIntDecls_f.c --- Tk-804.025_beta15/pTk/tkIntDecls_f.c 2003-07-19 09:39:40.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkIntDecls_f.c 2004-02-29 11:35:52.000000000 +0000 @@ -1,7 +1,10 @@ #include "tkInt.h" +#include "tkIntDecls.h" #include "tkIntDecls_f.h" +static unsigned TkintdeclsVSize(void) { return sizeof(TkintdeclsVtab);} static TkintdeclsVtab TkintdeclsVtable = { + TkintdeclsVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tkIntDecls.t" Index: pTk/tkIntDecls_f.h --- Tk-804.025_beta15/pTk/tkIntDecls_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkIntDecls_f.h 2004-02-29 11:24:59.000000000 +0000 @@ -2,6 +2,7 @@ #define TKINTDECLS_VT typedef struct TkintdeclsVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tkIntDecls.t" @@ -9,5 +10,5 @@ #undef VVAR } TkintdeclsVtab; extern TkintdeclsVtab *TkintdeclsVptr; -extern TkintdeclsVtab *TkintdeclsVGet _ANSI_ARGS_((void)); +extern TkintdeclsVtab *TkintdeclsVGet(void); #endif /* TKINTDECLS_VT */ Index: pTk/tkIntPlatDecls_f.c --- Tk-804.025_beta15/pTk/tkIntPlatDecls_f.c 2003-07-19 09:39:40.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkIntPlatDecls_f.c 2004-02-29 11:36:53.000000000 +0000 @@ -1,9 +1,12 @@ #include "Lang.h" #ifdef WIN32 #include "tkWinInt.h" +#include "tkIntPlatDecls.h" #include "tkIntPlatDecls_f.h" +static unsigned TkintplatdeclsVSize(void) { return sizeof(TkintplatdeclsVtab);} static TkintplatdeclsVtab TkintplatdeclsVtable = { + TkintplatdeclsVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tkIntPlatDecls.t" Index: pTk/tkIntPlatDecls_f.h --- Tk-804.025_beta15/pTk/tkIntPlatDecls_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkIntPlatDecls_f.h 2004-02-29 11:24:59.000000000 +0000 @@ -2,6 +2,7 @@ #define TKINTPLATDECLS_VT typedef struct TkintplatdeclsVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tkIntPlatDecls.t" @@ -9,5 +10,5 @@ #undef VVAR } TkintplatdeclsVtab; extern TkintplatdeclsVtab *TkintplatdeclsVptr; -extern TkintplatdeclsVtab *TkintplatdeclsVGet _ANSI_ARGS_((void)); +extern TkintplatdeclsVtab *TkintplatdeclsVGet(void); #endif /* TKINTPLATDECLS_VT */ Index: pTk/tkIntXlibDecls_f.c --- Tk-804.025_beta15/pTk/tkIntXlibDecls_f.c 2003-07-19 09:39:40.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkIntXlibDecls_f.c 2004-02-29 12:03:23.000000000 +0000 @@ -3,8 +3,10 @@ #include "Lang.h" #include "tkIntXlibDecls.h" #include "tkIntXlibDecls_f.h" +static unsigned TkintxlibdeclsVSize(void) { return sizeof(TkintxlibdeclsVtab);} static TkintxlibdeclsVtab TkintxlibdeclsVtable = { + TkintxlibdeclsVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tkIntXlibDecls.t" @@ -14,4 +16,3 @@ TkintxlibdeclsVtab *TkintxlibdeclsVptr; TkintxlibdeclsVtab *TkintxlibdeclsVGet() { return TkintxlibdeclsVptr = &TkintxlibdeclsVtable;} #endif - Index: pTk/tkIntXlibDecls_f.h --- Tk-804.025_beta15/pTk/tkIntXlibDecls_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkIntXlibDecls_f.h 2004-02-29 11:24:59.000000000 +0000 @@ -2,6 +2,7 @@ #define TKINTXLIBDECLS_VT typedef struct TkintxlibdeclsVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tkIntXlibDecls.t" @@ -9,5 +10,5 @@ #undef VVAR } TkintxlibdeclsVtab; extern TkintxlibdeclsVtab *TkintxlibdeclsVptr; -extern TkintxlibdeclsVtab *TkintxlibdeclsVGet _ANSI_ARGS_((void)); +extern TkintxlibdeclsVtab *TkintxlibdeclsVGet(void); #endif /* TKINTXLIBDECLS_VT */ Index: pTk/tkInt_f.c --- Tk-804.025_beta15/pTk/tkInt_f.c 2003-07-19 09:39:40.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkInt_f.c 2004-02-29 11:24:59.000000000 +0000 @@ -1,7 +1,9 @@ #include "tkInt.h" #include "tkInt_f.h" +static unsigned TkintVSize(void) { return sizeof(TkintVtab);} static TkintVtab TkintVtable = { + TkintVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tkInt.t" Index: pTk/tkInt_f.h --- Tk-804.025_beta15/pTk/tkInt_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkInt_f.h 2004-02-29 11:24:59.000000000 +0000 @@ -2,6 +2,7 @@ #define TKINT_VT typedef struct TkintVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tkInt.t" @@ -9,5 +10,5 @@ #undef VVAR } TkintVtab; extern TkintVtab *TkintVptr; -extern TkintVtab *TkintVGet _ANSI_ARGS_((void)); +extern TkintVtab *TkintVGet(void); #endif /* TKINT_VT */ Index: pTk/tkOption_f.c --- Tk-804.025_beta15/pTk/tkOption_f.c 2003-07-19 09:39:40.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkOption_f.c 2004-02-29 11:37:36.000000000 +0000 @@ -2,8 +2,10 @@ #include "tkInt.h" #include "tkOption.h" #include "tkOption_f.h" +static unsigned TkoptionVSize(void) { return sizeof(TkoptionVtab);} static TkoptionVtab TkoptionVtable = { + TkoptionVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tkOption.t" Index: pTk/tkOption_f.h --- Tk-804.025_beta15/pTk/tkOption_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkOption_f.h 2004-02-29 11:24:59.000000000 +0000 @@ -2,6 +2,7 @@ #define TKOPTION_VT typedef struct TkoptionVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tkOption.t" @@ -9,5 +10,5 @@ #undef VVAR } TkoptionVtab; extern TkoptionVtab *TkoptionVptr; -extern TkoptionVtab *TkoptionVGet _ANSI_ARGS_((void)); +extern TkoptionVtab *TkoptionVGet(void); #endif /* TKOPTION_VT */ Index: pTk/tkPlatDecls_f.c --- Tk-804.025_beta15/pTk/tkPlatDecls_f.c 2003-07-19 09:39:40.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkPlatDecls_f.c 2004-02-29 12:04:19.000000000 +0000 @@ -2,8 +2,10 @@ #ifdef WIN32 #include "tkWin.h" #include "tkPlatDecls_f.h" +static unsigned TkplatdeclsVSize(void) { return sizeof(TkplatdeclsVtab);} static TkplatdeclsVtab TkplatdeclsVtable = { + TkplatdeclsVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tkPlatDecls.t" Index: pTk/tkPlatDecls_f.h --- Tk-804.025_beta15/pTk/tkPlatDecls_f.h 2003-07-27 23:36:21.000000000 +0100 +++ Tk-804.025_beta16/pTk/tkPlatDecls_f.h 2004-02-29 12:05:15.000000000 +0000 @@ -3,6 +3,7 @@ #include "tkPlatDecls.h" typedef struct TkplatdeclsVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tkPlatDecls.t" @@ -10,5 +11,5 @@ #undef VVAR } TkplatdeclsVtab; extern TkplatdeclsVtab *TkplatdeclsVptr; -extern TkplatdeclsVtab *TkplatdeclsVGet _ANSI_ARGS_((void)); +extern TkplatdeclsVtab *TkplatdeclsVGet(void); #endif /* TKPLATDECLS_VT */ Index: pTk/tk_f.c --- Tk-804.025_beta15/pTk/tk_f.c 2003-07-19 09:39:40.000000000 +0100 +++ Tk-804.025_beta16/pTk/tk_f.c 2004-02-29 11:24:58.000000000 +0000 @@ -1,7 +1,9 @@ #include "tk.h" #include "tk_f.h" +static unsigned TkVSize(void) { return sizeof(TkVtab);} static TkVtab TkVtable = { + TkVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tk.t" Index: pTk/tk_f.h --- Tk-804.025_beta15/pTk/tk_f.h 2003-07-27 17:25:39.000000000 +0100 +++ Tk-804.025_beta16/pTk/tk_f.h 2004-02-29 11:24:58.000000000 +0000 @@ -2,6 +2,7 @@ #define TK_VT typedef struct TkVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tk.t" @@ -9,5 +10,5 @@ #undef VVAR } TkVtab; extern TkVtab *TkVptr; -extern TkVtab *TkVGet _ANSI_ARGS_((void)); +extern TkVtab *TkVGet(void); #endif /* TK_VT */ Index: pod/Text.pod --- Tk-804.025_beta15/pod/Text.pod 2004-02-28 16:35:44.000000000 +0000 +++ Tk-804.025_beta16/pod/Text.pod 2004-03-06 13:34:08.000000000 +0000 @@ -2144,6 +2144,32 @@ =back +=head1 TIED INTERFACE + +The Perl/Tk Text widget also has built-in TIEHANDLE methods for +B and B statements. This means you can print to file +handles tied to a Text widget, and the tied methods automatically +insert the print statement's arguments into the Text widget. + +For example: + + #!/usr/local/bin/perl -w + use POSIX 'acos'; + use Tk; + use strict; + + my $mw = MainWindow->new; + my $text = $mw->Text(qw/-width 40 -height 10/)->pack; + + tie *STDOUT, ref $text, $text; + + print "Hello Text World!\n"; + printf "pi ~= %1.5f", acos(-1.0); + + MainLoop; + +=back + =head1 PERFORMANCE ISSUES Text widgets should run efficiently under a variety Index: tkGlue.c --- Tk-804.025_beta15/tkGlue.c 2004-02-28 10:44:17.000000000 +0000 +++ Tk-804.025_beta16/tkGlue.c 2004-02-29 13:33:12.000000000 +0000 @@ -51,7 +51,7 @@ #include "tkGlue.h" #include "tkGlue_f.h" -TkeventVtab *TkeventVptr; +DECLARE_EVENT; /* #define DEBUG_REFCNT /* */ @@ -2334,7 +2334,8 @@ */ if (!initialized) { - TkeventVptr = (TkeventVtab *) SvIV(perl_get_sv("Tk::TkeventVtab",GV_ADDWARN|GV_ADD)); install_vtab("LangVtab",LangVGet(),sizeof(LangVtab)); + IMPORT_EVENT; + install_vtab("LangVtab",LangVGet(),sizeof(LangVtab)); install_vtab("TcldeclsVtab",TcldeclsVGet(),sizeof(TcldeclsVtab)); install_vtab("TkVtab",TkVGet(),sizeof(TkVtab)); install_vtab("TkdeclsVtab",TkdeclsVGet(),sizeof(TkdeclsVtab)); @@ -5413,9 +5414,13 @@ dTHX; if (table) { - typedef int (*fptr)_((void)); + typedef unsigned (*fptr)_((void)); fptr *q = table; unsigned i; + if ((*q[0])() != size) + { + croak("%s table is %u not %u",name,(*q[0])(),(unsigned) size); + } sv_setiv(FindTkVarName(name,GV_ADD|GV_ADDMULTI),(IV) table); if (size % sizeof(fptr)) { Index: tkGlue_f.c --- Tk-804.025_beta15/tkGlue_f.c 2003-07-19 09:39:44.000000000 +0100 +++ Tk-804.025_beta16/tkGlue_f.c 2004-02-29 11:40:33.000000000 +0000 @@ -12,8 +12,10 @@ #include "pTk/Xlib_f.h" #include "tkGlue.h" #include "tkGlue_f.h" +static unsigned TkglueVSize(void) { return sizeof(TkglueVtab);} static TkglueVtab TkglueVtable = { + TkglueVSize, #define VFUNC(type,name,mem,args) name, #define VVAR(type,name,mem) &name, #include "tkGlue.t" Index: tkGlue_f.h --- Tk-804.025_beta15/tkGlue_f.h 2003-07-19 09:39:44.000000000 +0100 +++ Tk-804.025_beta16/tkGlue_f.h 2004-02-29 11:22:03.000000000 +0000 @@ -2,6 +2,7 @@ #define TKGLUE_VT typedef struct TkglueVtab { + unsigned (*tabSize)(void); #define VFUNC(type,name,mem,args) type (*mem) args; #define VVAR(type,name,mem) type (*mem); #include "tkGlue.t" @@ -9,5 +10,5 @@ #undef VVAR } TkglueVtab; extern TkglueVtab *TkglueVptr; -extern TkglueVtab *TkglueVGet _ANSI_ARGS_((void)); +extern TkglueVtab *TkglueVGet(void); #endif /* TKGLUE_VT */ Index: vtab.def --- Tk-804.025_beta15/vtab.def 2003-07-19 09:39:44.000000000 +0100 +++ Tk-804.025_beta16/vtab.def 2004-02-29 13:40:56.000000000 +0000 @@ -1,3 +1,10 @@ +#define IMPORT_VTABLE(ptr,type,name) do { \ + ptr = INT2PTR(type *,SvIV(get_sv(name,GV_ADDWARN|GV_ADD))); \ + if ((*ptr->tabSize)() != sizeof(type)) { \ + Perl_warn(aTHX_ "%s wrong size for %s",name,#type); \ + } \ + } while (0) + #ifdef WIN32 #define DECLARE_VTABLES \ LangVtab *LangVptr; \ @@ -14,18 +21,18 @@ TkplatdeclsVtab *TkplatdeclsVptr #define IMPORT_VTABLES do { \ -LangVptr = (LangVtab *) SvIV(perl_get_sv("Tk::LangVtab",GV_ADDWARN|GV_ADD)); \ -TcldeclsVptr = (TcldeclsVtab *) SvIV(perl_get_sv("Tk::TcldeclsVtab",GV_ADDWARN|GV_ADD)); \ -TkVptr = (TkVtab *) SvIV(perl_get_sv("Tk::TkVtab",GV_ADDWARN|GV_ADD)); \ -TkdeclsVptr = (TkdeclsVtab *) SvIV(perl_get_sv("Tk::TkdeclsVtab",GV_ADDWARN|GV_ADD)); \ -TkeventVptr = (TkeventVtab *) SvIV(perl_get_sv("Tk::TkeventVtab",GV_ADDWARN|GV_ADD)); \ -TkglueVptr = (TkglueVtab *) SvIV(perl_get_sv("Tk::TkglueVtab",GV_ADDWARN|GV_ADD)); \ -TkintVptr = (TkintVtab *) SvIV(perl_get_sv("Tk::TkintVtab",GV_ADDWARN|GV_ADD)); \ -TkintdeclsVptr = (TkintdeclsVtab *) SvIV(perl_get_sv("Tk::TkintdeclsVtab",GV_ADDWARN|GV_ADD)); \ -TkintplatdeclsVptr = (TkintplatdeclsVtab *) SvIV(perl_get_sv("Tk::TkintplatdeclsVtab",GV_ADDWARN|GV_ADD)); \ -TkintxlibdeclsVptr = (TkintxlibdeclsVtab *) SvIV(perl_get_sv("Tk::TkintxlibdeclsVtab",GV_ADDWARN|GV_ADD)); \ -TkoptionVptr = (TkoptionVtab *) SvIV(perl_get_sv("Tk::TkoptionVtab",GV_ADDWARN|GV_ADD)); \ -TkplatdeclsVptr = (TkplatdeclsVtab *) SvIV(perl_get_sv("Tk::TkplatdeclsVtab",GV_ADDWARN|GV_ADD)); \ +IMPORT_VTABLE(LangVptr , LangVtab,"Tk::LangVtab"); \ +IMPORT_VTABLE(TcldeclsVptr , TcldeclsVtab,"Tk::TcldeclsVtab"); \ +IMPORT_VTABLE(TkVptr , TkVtab,"Tk::TkVtab"); \ +IMPORT_VTABLE(TkdeclsVptr , TkdeclsVtab,"Tk::TkdeclsVtab"); \ +IMPORT_VTABLE(TkeventVptr , TkeventVtab,"Tk::TkeventVtab"); \ +IMPORT_VTABLE(TkglueVptr , TkglueVtab,"Tk::TkglueVtab"); \ +IMPORT_VTABLE(TkintVptr , TkintVtab,"Tk::TkintVtab"); \ +IMPORT_VTABLE(TkintdeclsVptr , TkintdeclsVtab,"Tk::TkintdeclsVtab"); \ +IMPORT_VTABLE(TkintplatdeclsVptr,TkintplatdeclsVtab,"Tk::TkintplatdeclsVtab"); \ +IMPORT_VTABLE(TkintxlibdeclsVptr,TkintxlibdeclsVtab,"Tk::TkintxlibdeclsVtab"); \ +IMPORT_VTABLE(TkoptionVptr , TkoptionVtab,"Tk::TkoptionVtab"); \ +IMPORT_VTABLE(TkplatdeclsVptr , TkplatdeclsVtab,"Tk::TkplatdeclsVtab"); \ } while (0) #else #define DECLARE_VTABLES \ @@ -41,15 +48,43 @@ XlibVtab *XlibVptr #define IMPORT_VTABLES do { \ -LangVptr = (LangVtab *) SvIV(perl_get_sv("Tk::LangVtab",GV_ADDWARN|GV_ADD)); \ -TcldeclsVptr = (TcldeclsVtab *) SvIV(perl_get_sv("Tk::TcldeclsVtab",GV_ADDWARN|GV_ADD)); \ -TkVptr = (TkVtab *) SvIV(perl_get_sv("Tk::TkVtab",GV_ADDWARN|GV_ADD)); \ -TkdeclsVptr = (TkdeclsVtab *) SvIV(perl_get_sv("Tk::TkdeclsVtab",GV_ADDWARN|GV_ADD)); \ -TkeventVptr = (TkeventVtab *) SvIV(perl_get_sv("Tk::TkeventVtab",GV_ADDWARN|GV_ADD)); \ -TkglueVptr = (TkglueVtab *) SvIV(perl_get_sv("Tk::TkglueVtab",GV_ADDWARN|GV_ADD)); \ -TkintVptr = (TkintVtab *) SvIV(perl_get_sv("Tk::TkintVtab",GV_ADDWARN|GV_ADD)); \ -TkintdeclsVptr = (TkintdeclsVtab *) SvIV(perl_get_sv("Tk::TkintdeclsVtab",GV_ADDWARN|GV_ADD)); \ -TkoptionVptr = (TkoptionVtab *) SvIV(perl_get_sv("Tk::TkoptionVtab",GV_ADDWARN|GV_ADD)); \ -XlibVptr = (XlibVtab *) SvIV(perl_get_sv("Tk::XlibVtab",GV_ADDWARN|GV_ADD)); \ +IMPORT_VTABLE(LangVptr , LangVtab,"Tk::LangVtab"); \ +IMPORT_VTABLE(TcldeclsVptr , TcldeclsVtab,"Tk::TcldeclsVtab"); \ +IMPORT_VTABLE(TkVptr , TkVtab,"Tk::TkVtab"); \ +IMPORT_VTABLE(TkdeclsVptr , TkdeclsVtab,"Tk::TkdeclsVtab"); \ +IMPORT_VTABLE(TkeventVptr , TkeventVtab,"Tk::TkeventVtab"); \ +IMPORT_VTABLE(TkglueVptr , TkglueVtab,"Tk::TkglueVtab"); \ +IMPORT_VTABLE(TkintVptr , TkintVtab,"Tk::TkintVtab"); \ +IMPORT_VTABLE(TkintdeclsVptr , TkintdeclsVtab,"Tk::TkintdeclsVtab"); \ +IMPORT_VTABLE(TkoptionVptr , TkoptionVtab,"Tk::TkoptionVtab"); \ +IMPORT_VTABLE(XlibVptr , XlibVtab,"Tk::XlibVtab"); \ } while (0) #endif +#define DECLARE_TIX \ +TixVtab *TixVptr; \ +TixintVtab *TixintVptr + +#define IMPORT_TIX do { \ +IMPORT_VTABLE(TixVptr , TixVtab,"Tk::TixVtab"); \ +IMPORT_VTABLE(TixintVptr , TixintVtab,"Tk::TixintVtab"); \ +} while (0) +#define DECLARE_PHOTO \ +ImgintVtab *ImgintVptr; \ +TkimgphotoVtab *TkimgphotoVptr + +#define IMPORT_PHOTO do { \ +IMPORT_VTABLE(ImgintVptr , ImgintVtab,"Tk::ImgintVtab"); \ +IMPORT_VTABLE(TkimgphotoVptr , TkimgphotoVtab,"Tk::TkimgphotoVtab"); \ +} while (0) +#define DECLARE_EVENT \ +TkeventVtab *TkeventVptr + +#define IMPORT_EVENT do { \ +IMPORT_VTABLE(TkeventVptr , TkeventVtab,"Tk::TkeventVtab"); \ +} while (0) +#define DECLARE_TIXXPM \ +TiximgxpmVtab *TiximgxpmVptr + +#define IMPORT_TIXXPM do { \ +IMPORT_VTABLE(TiximgxpmVptr , TiximgxpmVtab,"Tk::TiximgxpmVtab"); \ +} while (0) Index: vtab.def.PL --- Tk-804.025_beta15/vtab.def.PL 2003-07-19 09:39:44.000000000 +0100 +++ Tk-804.025_beta16/vtab.def.PL 2004-02-29 13:40:52.000000000 +0000 @@ -1,4 +1,4 @@ -#!perl -w +#!perl -w use strict; my $file = __FILE__; $file =~ s/\.PL$//; @@ -9,34 +9,55 @@ my @vtable = qw(Tkoption Lang Tkevent Tk Tkint Tkglue Tkintdecls Tkdecls Tcldecls); my @wtable = qw(Tkintxlibdecls Tkplatdecls Tkintplatdecls); my @utable = qw(Xlib); +my @tix = qw(Tix Tixint); +my @tixxpm = qw(Tiximgxpm); +my @photo = qw(Tkimgphoto Imgint); +my @event = qw(Tkevent); + my $maxl = 0; length > $maxl and $maxl = length foreach (@vtable,@wtable,@utable); +print <<'END'; +#define IMPORT_VTABLE(ptr,type,name) do { \ + ptr = INT2PTR(type *,SvIV(get_sv(name,GV_ADDWARN|GV_ADD))); \ + if ((*ptr->tabSize)() != sizeof(type)) { \ + Perl_warn(aTHX_ "%s wrong size for %s",name,#type); \ + } \ + } while (0) + +END + print "#ifdef WIN32\n"; -do_tables(@vtable,@wtable); +do_tables(VTABLES => @vtable,@wtable); print "#else\n"; -do_tables(@vtable,@utable); +do_tables(VTABLES => @vtable,@utable); print "#endif\n"; +do_tables(TIX => @tix); +do_tables(PHOTO => @photo); +do_tables(EVENT => @event); +do_tables(TIXXPM => @tixxpm); + sub do_tables { + my $name = shift; my @tables = sort(@_); - print "#define DECLARE_VTABLES\t\\\n"; + print "#define DECLARE_$name\t\\\n"; while (@tables) { my $tab = shift(@tables); my $pad = ' ' x ($maxl - length($tab)); print $tab,"Vtab$pad *",$tab,"Vptr"; print ";$pad\\" if @tables; - print "\n"; - } - print "\n"; - print "#define IMPORT_VTABLES\tdo { \\\n"; + print "\n"; + } + print "\n"; + print "#define IMPORT_$name\tdo { \\\n"; foreach my $tab (sort @_) { my $pad = ' ' x ($maxl - length($tab)); - print qq/${tab}Vptr$pad = $pad(${tab}Vtab *) SvIV(perl_get_sv("Tk::${tab}Vtab",GV_ADDWARN|GV_ADD));$pad \\\n/; - } - print "} while (0)\n"; + print qq/IMPORT_VTABLE(${tab}Vptr$pad,$pad${tab}Vtab,"Tk::${tab}Vtab");$pad \\\n/; + } + print "} while (0)\n"; } __END_OF_PATCH__