#if 0 =pod /* (These C++ comments in Perl code are to please my syntax highlighter) This file is used by all bits of GUI code that need to repeat some code for a variety of types (to avoid repeating the list of types in half a dozen places, and to make it much easier to add a new type). Just do #define TYPE(T) your_code_involving_T; #include "GUItypes.h" #undef TYPE to handle every possible type. If you want to exclude a particular type, define e.g. GUITYPE_IGNORE_CStr To alter this file, adjust the types in the indented list below, then run "perl GUITypes.h" to regenerate it. (Or if you want to do it manually, make sure you update the four mentions of each typename in this file.) =cut */ my @types = qw( bool int float CColor CClientArea CGUIString CGUISpriteInstance CStr CStrW EAlign EVAlign CPos CGUIList ); #// Extract everything from this file, above the /********/ line open IN, $0 or die "Error opening $0: $!"; my $out = ""; while () { last if $_ eq "/********/\n"; $out .= $_; } $out .= "/********/\n"; $out .= "#ifndef GUITYPE_IGNORE_$_\nTYPE($_)\n#endif\n" for @types; #// and some minor hacks to make autocompleting things happier: $out .= "#ifdef PLEASE_DO_NOT_DEFINE_THIS\n// See IGUIObject.h for 'enum EGUISettingType'\nenum {" . (join ',', map "GUIST_$_", @types) . "};\n#endif\n"; #// Overwrite the current program with the newly-generated contents close IN; open OUT, ">$0" or die "Error opening >$0: $!"; #// TODO: Find whether it's safe for a program to overwrite itself. (It seems to work, at least on Windows) print OUT $out; close OUT; __END__ #endif /********/ #ifndef GUITYPE_IGNORE_bool TYPE(bool) #endif #ifndef GUITYPE_IGNORE_int TYPE(int) #endif #ifndef GUITYPE_IGNORE_float TYPE(float) #endif #ifndef GUITYPE_IGNORE_CColor TYPE(CColor) #endif #ifndef GUITYPE_IGNORE_CClientArea TYPE(CClientArea) #endif #ifndef GUITYPE_IGNORE_CGUIString TYPE(CGUIString) #endif #ifndef GUITYPE_IGNORE_CGUISpriteInstance TYPE(CGUISpriteInstance) #endif #ifndef GUITYPE_IGNORE_CStr TYPE(CStr) #endif #ifndef GUITYPE_IGNORE_CStrW TYPE(CStrW) #endif #ifndef GUITYPE_IGNORE_EAlign TYPE(EAlign) #endif #ifndef GUITYPE_IGNORE_EVAlign TYPE(EVAlign) #endif #ifndef GUITYPE_IGNORE_CPos TYPE(CPos) #endif #ifndef GUITYPE_IGNORE_CGUIList TYPE(CGUIList) #endif #ifdef PLEASE_DO_NOT_DEFINE_THIS // See IGUIObject.h for 'enum EGUISettingType' enum {GUIST_bool,GUIST_int,GUIST_float,GUIST_CColor,GUIST_CClientArea,GUIST_CGUIString,GUIST_CGUISpriteInstance,GUIST_CStr,GUIST_CStrW,GUIST_EAlign,GUIST_EVAlign,GUIST_CPos,GUIST_CGUIList}; #endif