home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / gadtoolsbox / gengtxsource / source / generate.c < prev    next >
C/C++ Source or Header  |  1995-02-27  |  70KB  |  1,520 lines

  1. /*
  2. **      $Filename: Generate.c $
  3. **      $Release: 1.0 $
  4. **      $Revision: 38.1 $
  5. **
  6. **      The source generator.
  7. **
  8. **      (C) Copyright 1992 Jaba Development.
  9. **          Written by Jan van den Baard
  10. **/
  11.  
  12. #include "GenGTXSource.h"
  13.  
  14. Prototype VOID Generate( void );
  15.  
  16. /*
  17.  *      Some localy used data.
  18.  */
  19. BYTE    Done[ NUM_KINDS ];
  20.  
  21. /*
  22.  *      Set the source name extension.
  23.  */
  24. Local VOID SetSuffix( UBYTE *buffer, UBYTE *suffix )
  25. {
  26.     UBYTE       *ptr;
  27.  
  28.     if ( ptr = strrchr( buffer, '.' ))
  29.         *ptr = 0;
  30.  
  31.     strcat( buffer, suffix );
  32. }
  33.  
  34. /*
  35.  *      Open a file.
  36.  */
  37. Local BPTR OpenFile( UBYTE *suffix )
  38. {
  39.     UBYTE       NameBuffer[ 512 ];
  40.     BPTR        file;
  41.  
  42.     strcpy( &NameBuffer[ 0 ], Arguments.SourceName );
  43.     SetSuffix( &NameBuffer[ 0 ], suffix );
  44.  
  45.     return( Open( &NameBuffer[ 0 ], MODE_NEWFILE ));
  46. }
  47.  
  48. /*
  49.  *      Open the files for the source generation.
  50.  */
  51. Local BOOL OpenFiles( void )
  52. {
  53.     if ( ! ( MainSource = OpenFile( ".c" )))
  54.         return( FALSE );
  55.  
  56.     if ( ! ( Header = OpenFile( ".h" )))
  57.         return( FALSE );
  58.  
  59.     if ( ! ( Protos = OpenFile( "_protos.h" )))
  60.         return( FALSE );
  61.  
  62.     if ( ! ( Locale = OpenFile( ".cd" )))
  63.         return( FALSE );
  64. }
  65.  
  66. /*
  67.  *      Close the source files.
  68.  */
  69. Local VOID CloseFiles( void )
  70. {
  71.     if ( Locale )           Close( Locale );
  72.     if ( Protos )           Close( Protos );
  73.     if ( Header )           Close( Header );
  74.     if ( MainSource )       Close( MainSource );
  75. }
  76.  
  77. /*
  78.  *      Write the #ifndef, #define conditionals for the headers.
  79.  */
  80. Local VOID DoConditionals( void )
  81. {
  82.     UBYTE           Name[ 50 ], *ptr, i = 0;
  83.  
  84.     if ( ptr = PathPart( Arguments.SourceName )) {
  85.         if ( *ptr == '/' )
  86.             ptr++;
  87.  
  88.         strcpy( &Name[ 0 ], ptr );
  89.  
  90.         while( Name[ i ] && Name[ i ] != '.' )
  91.             Name[ i ] = toupper( Name[ i++ ] );
  92.  
  93.         Name[ i ] = 0;
  94.  
  95.         MyFPrintf( Locale,     "#header %s_LOCALE\n", &Name[ 0 ] );
  96.         MyFPrintf( MainSource, "#include \"%s.H\"\n\n", &Name[ 0 ] );
  97.         MyFPrintf( Header,     "#ifndef %s_H\n#define %s_H\n\n", &Name[ 0 ], &Name[ 0 ], &Name[ 0 ] );
  98.         MyFPrintf( Protos,     "#ifndef %s_PROTOS_H\n#define %s_PROTOS_H\n\n", &Name[ 0 ], &Name[ 0 ] );
  99.  
  100.         FPuts( Header, Includes );
  101.  
  102.         if ( SET( SourceConfig.gc_GenCFlags0, CS0_PRAGMAS )) {
  103.             if ( SET( SourceConfig.gc_GenCFlags0, CS0_AZTEC ))
  104.                 FPuts( Header, AztecPragmas );
  105.             else
  106.                 FPuts( Header, Pragmas );
  107.         }
  108.  
  109.         MyFPrintf( Header,     "#include \"%s_PROTOS.H\"\n\n", &Name[ 0 ] );
  110.         FPuts( Header,         "#define GetString(g) ((( struct StringInfo * )g->SpecialInfo )->Buffer )\n" );
  111.         FPuts( Header,         "#define GetNumber(g) ((( struct StringInfo * )g->SpecialInfo )->LongInt )\n\n" );
  112.         FPuts( Header,         "#ifndef GTMN_NewLookMenus\n#define GTMN_NewLookMenus GT_TagBase+67\n#endif\n\n" );
  113.         FPuts( Header,         "#ifndef WA_NewLookMenus\n#define WA_NewLookMenus WA_Dummy+0x30\n#endif\n\n" );
  114.         FPuts( Header,         "#ifndef GTCB_Scaled\n#define GTCB_Scaled GT_TagBase+68\n#endif\n\n" );
  115.         FPuts( Header,         "#ifndef GTMX_Scaled\n#define GTMX_Scaled GT_TagBase+69\n#endif\n\n" );
  116.         FPuts( Header,         "struct AppString {\n\tLONG\tas_ID;\n\tSTRPTR\tas_Str;\n};\n\n" );
  117.         FPuts( Header,         "extern struct AppString AppStrings[];\n\n" );
  118.         FPuts( Header,         "extern struct Library *LocaleBase;\n\n" );
  119.         FPuts( MainSource,     "#define STRINGARRAY\n\n" );
  120.         MyFPrintf( MainSource, "#include \"%s_LOCALE.H\"\n\n", &Name[ 0 ] );
  121.  
  122.     }
  123. }
  124.  
  125. /*
  126.  *      Write the GadTools placement flags.
  127.  */
  128. Local VOID WritePlacementFlags( ULONG flags )
  129. {
  130.     if ( ! flags ) FPuts( MainSource, "0" );
  131.     else {
  132.         if ( SET( flags, PLACETEXT_LEFT ))       FPuts( MainSource, "PLACETEXT_LEFT|" );
  133.         else if ( SET( flags, PLACETEXT_RIGHT )) FPuts( MainSource, "PLACETEXT_RIGHT|" );
  134.         else if ( SET( flags, PLACETEXT_ABOVE )) FPuts( MainSource, "PLACETEXT_ABOVE|" );
  135.         else if ( SET( flags, PLACETEXT_BELOW )) FPuts( MainSource, "PLACETEXT_BELOW|" );
  136.         else                                     FPuts( MainSource, "PLACETEXT_IN|" );
  137.  
  138.         if ( SET( flags, NG_HIGHLABEL ))         FPuts( MainSource, "NG_HIGHLABEL!" );
  139.  
  140.         Seek( MainSource, -1, OFFSET_CURRENT );
  141.     }
  142. }
  143.  
  144. /*
  145.  *      Write the DrawMode flags.
  146.  */
  147. Local VOID WriteDrMd( ULONG drmd )
  148. {
  149.     if ( SET( drmd, JAM2 ))         FPuts( MainSource, "JAM2|" );
  150.     else                            FPuts( MainSource, "JAM1|" );
  151.  
  152.     if ( SET( drmd, COMPLEMENT ))   FPuts( MainSource, "COMPLEMENT|" );
  153.     if ( SET( drmd, INVERSVID ))    FPuts( MainSource, "INVERSVID|" );
  154.  
  155.     Seek( MainSource, -1, OFFSET_CURRENT );
  156. }
  157.  
  158. /*
  159.  *      Write the window flags.
  160.  */
  161. Local VOID WriteWindowFlags( ULONG flags )
  162. {
  163.     if ( SET( flags, WFLG_SIZEGADGET ))     FPuts( MainSource, "WFLG_SIZEGADGET|" );
  164.     if ( SET( flags, WFLG_DRAGBAR ))        FPuts( MainSource, "WFLG_DRAGBAR|" );
  165.     if ( SET( flags, WFLG_DEPTHGADGET ))    FPuts( MainSource, "WFLG_DEPTHGADGET|" );
  166.     if ( SET( flags, WFLG_CLOSEGADGET ))    FPuts( MainSource, "WFLG_CLOSEGADGET|" );
  167.     if ( SET( flags, WFLG_SIZEBRIGHT ))     FPuts( MainSource, "WFLG_SIZEBRIGHT|" );
  168.     if ( SET( flags, WFLG_SIZEBBOTTOM ))    FPuts( MainSource, "WFLG_SIZEBBOTTOM|" );
  169.     if ( SET( flags, WFLG_SMART_REFRESH ))  FPuts( MainSource, "WFLG_SMART_REFRESH|" );
  170.     if ( SET( flags, WFLG_SIMPLE_REFRESH )) FPuts( MainSource, "WFLG_SIMPLE_REFRESH|" );
  171.     if ( SET( flags, WFLG_SUPER_BITMAP ))   FPuts( MainSource, "WFLG_SUPERBITMAP|" );
  172.     if ( SET( flags, WFLG_OTHER_REFRESH ))  FPuts( MainSource, "WFLG_OTHER_REFRESH|" );
  173.     if ( SET( flags, WFLG_BACKDROP ))       FPuts( MainSource, "WFLG_BACKDROP|" );
  174.     if ( SET( flags, WFLG_REPORTMOUSE ))    FPuts( MainSource, "WFLG_REPORTMOUSE|" );
  175.     if ( SET( flags, WFLG_GIMMEZEROZERO ))  FPuts( MainSource, "WFLG_GIMMEZEROZERO|" );
  176.     if ( SET( flags, WFLG_BORDERLESS ))     FPuts( MainSource, "WFLG_BORDERLESS|" );
  177.     if ( SET( flags, WFLG_ACTIVATE ))       FPuts( MainSource, "WFLG_ACTIVATE|" );
  178.     if ( SET( flags, WFLG_RMBTRAP ))        FPuts( MainSource, "WFLG_RMBTRAP|" );
  179.  
  180.     Seek( MainSource, -1, OFFSET_CURRENT );
  181. };
  182.  
  183. /*
  184.  *      Write the GadTools specific IDCMP flags.
  185.  */
  186. Local VOID WriteGadToolsIDCMP( struct ExtGadgetList *gadgets )
  187. {
  188.     struct ExtNewGadget             *eng;
  189.  
  190.     setmem(( void * )&Done[ 0 ], NUM_KINDS, 0 );
  191.  
  192.     for ( eng = gadgets->gl_First; eng->en_Next; eng = eng->en_Next ) {
  193.         if ( ! Done[ eng->en_Kind ] ) {
  194.             MyFPrintf( MainSource, "%s|", GadToolsIDCMP[ eng->en_Kind ] );
  195.             Done[ eng->en_Kind ] = TRUE;
  196.             if ( eng->en_Kind == SCROLLER_KIND ) {
  197.                 if ( GetTagData( GTSC_Arrows, 0, eng->en_Tags ))
  198.                     FPuts( MainSource, "ARROWIDCMP|" );
  199.             }
  200.         }
  201.     }
  202. }
  203.  
  204. /*
  205.  *      Write the IDCMP flags.
  206.  */
  207. Local VOID WriteIDCMPFlags( ULONG flags, struct ExtGadgetList *gadgets )
  208. {
  209.     UBYTE                      *tabs = "\n\t\t\t\t\t\t";
  210.  
  211.     if ( ! flags )  FPuts( MainSource, "0,\n" );
  212.     else {
  213.         WriteGadToolsIDCMP( gadgets );
  214.  
  215.         FPuts( MainSource, tabs );
  216.  
  217.         if ( SET( flags, IDCMP_GADGETUP )) {
  218.             if ( ! Done[ 0  ] && ! Done[ 1  ] && ! Done[ 2  ] && ! Done[ 3  ] &&
  219.                  ! Done[ 4  ] && ! Done[ 7  ] && ! Done[ 8  ] && ! Done[ 9  ] &&
  220.                  ! Done[ 11 ] && ! Done[ 12 ] )
  221.                 FPuts( MainSource, "IDCMP_GADGETUP|" );
  222.         }
  223.  
  224.         if ( SET( flags, IDCMP_GADGETDOWN )) {
  225.             if ( ! Done[ 4 ] && ! Done[ 5 ] && ! Done[ 9 ] && ! Done[ 11 ] )
  226.                 FPuts( MainSource, "IDCMP_GADGETDOWN|" );
  227.         }
  228.  
  229.         if ( SET( flags, IDCMP_INTUITICKS )) {
  230.             if ( ! Done[ 4 ] && ! Done[ 9 ] )
  231.                 FPuts( MainSource, "IDCMP_INTUITICKS|" );
  232.         }
  233.  
  234.         if ( SET( flags, IDCMP_MOUSEMOVE )) {
  235.             if ( ! Done[ 4 ] && ! Done[ 9 ] && ! Done[ 11 ] )
  236.                 FPuts( MainSource, "IDCMP_MOUSEMOVE|" );
  237.         }
  238.  
  239.         if ( SET( flags, IDCMP_MOUSEBUTTONS )) {
  240.             if ( ! Done[ 4 ] && ! Done[ 9 ] )
  241.                 FPuts( MainSource, "IDCMP_MOUSEBUTTONS|" );
  242.         }
  243.  
  244.         if ( SET( flags, IDCMP_SIZEVERIFY ))        FPuts( MainSource, "IDCMP_SIZEVERIFY|" );
  245.         if ( SET( flags, IDCMP_NEWSIZE ))           FPuts( MainSource, "IDCMP_NEWSIZE|" );
  246.         if ( SET( flags, IDCMP_REQSET ))            FPuts( MainSource, "IDCMP_REQSET|" );
  247.         if ( SET( flags, IDCMP_MENUPICK ))          FPuts( MainSource, "IDCMP_MENUPICK|" );
  248.         if ( SET( flags, IDCMP_CLOSEWINDOW ))       FPuts( MainSource, "IDCMP_CLOSEWINDOW|" );
  249.         if ( SET( flags, IDCMP_RAWKEY ))            FPuts( MainSource, "IDCMP_RAWKEY|" );
  250.         if ( SET( flags, IDCMP_REQVERIFY ))         FPuts( MainSource, "IDCMP_REQVERIFY|" );
  251.         if ( SET( flags, IDCMP_REQCLEAR ))          FPuts( MainSource, "IDCMP_REQCLEAR|" );
  252.         if ( SET( flags, IDCMP_MENUVERIFY ))        FPuts( MainSource, "IDCMP_MENUVERIFY|" );
  253.         if ( SET( flags, IDCMP_NEWPREFS ))          FPuts( MainSource, "IDCMP_NEWPREFS|" );
  254.         if ( SET( flags, IDCMP_DISKINSERTED ))      FPuts( MainSource, "IDCMP_DISKINSERTED|" );
  255.  
  256.         FPuts( MainSource, tabs );
  257.  
  258.         if ( SET( flags, IDCMP_DISKREMOVED ))       FPuts( MainSource, "IDCMP_DISKREMOVED|" );
  259.         if ( SET( flags, IDCMP_ACTIVEWINDOW ))      FPuts( MainSource, "IDCMP_ACTIVEWINDOW|" );
  260.         if ( SET( flags, IDCMP_INACTIVEWINDOW ))    FPuts( MainSource, "IDCMP_INACTIVEWINDOW|" );
  261.         if ( SET( flags, IDCMP_DELTAMOVE ))         FPuts( MainSource, "IDCMP_DELTAMOVE|" );
  262.         if ( SET( flags, IDCMP_VANILLAKEY ))        FPuts( MainSource, "IDCMP_VANILLAKEY|" );
  263.         if ( SET( flags, IDCMP_IDCMPUPDATE ))       FPuts( MainSource, "IDCMP_IDCMPUPDATE|" );
  264.         if ( SET( flags, IDCMP_MENUHELP ))          FPuts( MainSource, "IDCMP_MENUHELP|" );
  265.         if ( SET( flags, IDCMP_CHANGEWINDOW ))      FPuts( MainSource, "IDCMP_CHANGEWINDOW|" );
  266.         if ( SET( flags, IDCMP_REFRESHWINDOW ))     FPuts( MainSource, "IDCMP_SIZEVERIFY|" );
  267.  
  268.         Seek( MainSource, -1, OFFSET_CURRENT );
  269.     }
  270. }
  271.  
  272. /*
  273.  *      Generate the GadgetID and array indexes.
  274.  */
  275. Local VOID GenID( void )
  276. {
  277.     struct ProjectWindow    *pw;
  278.     struct ExtNewGadget     *eng;
  279.     UWORD                    idx;
  280.  
  281.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  282.         for ( eng = pw->pw_Gadgets.gl_First; eng->en_Next; eng = eng->en_Next )
  283.             MyFPrintf( Header, "#define GD_%-32s    %ld\n", &eng->en_GadgetLabel[ 0 ], eng->en_NewGadget.ng_GadgetID );
  284.         FPuts( Header, "\n" );
  285.  
  286.  
  287.         for ( eng = pw->pw_Gadgets.gl_First, idx = 0; eng->en_Next; eng = eng->en_Next )
  288.             MyFPrintf( Header, "#define GDX_%-32s   %ld\n", &eng->en_GadgetLabel[ 0 ], idx++ );
  289.         FPuts( Header, "\n" );
  290.     }
  291. }
  292.  
  293. /*
  294.  *      Generate the strings and arrays.
  295.  */
  296. Local VOID WriteStrings( void )
  297. {
  298.     struct ArrayNode        *an;
  299.  
  300.     for ( an = Arrays.al_First; an->an_Next; an = an->an_Next ) {
  301.         if ( STAT ) FPuts( MainSource, Static );
  302.         else        MyFPrintf( Header, "extern UBYTE *GUIArray%ld[];\n", an->an_Number );
  303.  
  304.         MyFPrintf( MainSource, "UBYTE *GUIArray%ld[ %ld ];\n", an->an_Number, CountArray( an->an_Array ) + 2 );
  305.     }
  306.     FPuts( MainSource, "\n" );
  307. }
  308.  
  309. /*
  310.  *      Generate a reference to a string.
  311.  */
  312. Local VOID GenStrRef( UBYTE *string )
  313. {
  314.     MyFPrintf( MainSource, "MSG_STRING_%ld, ", GetStringNumber( &Strings, string ));
  315. }
  316.  
  317. /*
  318.  *      Generate a reference to an array.
  319.  */
  320. Local VOID GenArrRef( UBYTE **array )
  321. {
  322.     MyFPrintf( MainSource, "&GUIArray%ld[ 0 ], ", GetArrayNumber( &Arrays, array ));
  323. }
  324.  
  325. /*
  326.  *      Generate a NewMenu structure.
  327.  */
  328. Local VOID GenNewMenu( struct ExtNewMenu *menu )
  329. {
  330.     ULONG           flags = menu->em_NewMenu.nm_Flags;
  331.  
  332.     MyFPrintf( MainSource, "\t%s, ", GadToolsMenus[ menu->em_NewMenu.nm_Type ] );
  333.  
  334.     if ( menu->em_NewMenu.nm_Label != NM_BARLABEL ) {
  335.         FPuts( MainSource, "(STRPTR)" );
  336.         GenStrRef( &menu->em_MenuTitle[ 0 ] );
  337.     } else {
  338.         FPuts( MainSource, "(STRPTR)NM_BARLABEL, NULL, 0, 0, NULL,\n" );
  339.         return;
  340.     }
  341.  
  342.     if ( menu->em_NewMenu.nm_CommKey ) {
  343.         FPuts( MainSource, "(STRPTR)" );
  344.         GenStrRef( &menu->em_CommKey[ 0 ] );
  345.     } else
  346.         FPuts( MainSource, "NULL, " );
  347.  
  348.     if ( flags ) {
  349.         if ( menu->em_NewMenu.nm_Type == NM_TITLE ) {
  350.             if ( SET( flags, NM_MENUDISABLED )) FPuts( MainSource, "NM_MENUDISABLED|" );
  351.         } else {
  352.             if ( SET( flags, NM_ITEMDISABLED )) FPuts( MainSource, "NM_ITEMDISABLED|" );
  353.         }
  354.  
  355.         if ( SET( flags, CHECKIT ))     FPuts( MainSource, "CHECKIT|" );
  356.         if ( SET( flags, CHECKED ))     FPuts( MainSource, "CHECKED|" );
  357.         if ( SET( flags, MENUTOGGLE ))  FPuts( MainSource, "MENUTOGGLE|" );
  358.  
  359.         Seek( MainSource, -1, OFFSET_CURRENT );
  360.         FPuts( MainSource, ", " );
  361.     } else
  362.         FPuts( MainSource, "0, " );
  363.  
  364.     MyFPrintf( MainSource, "%ld, NULL,\n", menu->em_NewMenu.nm_MutualExclude );
  365. }
  366.  
  367. /*
  368.  *      Generate all NewMenus.
  369.  */
  370. Local VOID GenMenus( void )
  371. {
  372.     struct ProjectWindow        *pw;
  373.     struct ExtNewMenu           *menu, *item, *sub;
  374.  
  375.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  376.         if ( pw->pw_Menus.ml_First->em_Next ) {
  377.             if ( STAT ) FPuts( MainSource, Static );
  378.             else        MyFPrintf( Header, "extern struct NewMenu %sNewMenu[];\n", &pw->pw_Name[ 0 ] );
  379.             MyFPrintf( MainSource, "struct NewMenu %sNewMenu[] = {\n", &pw->pw_Name[ 0 ] );
  380.  
  381.             for ( menu = pw->pw_Menus.ml_First; menu->em_Next; menu = menu->em_Next ) {
  382.                 GenNewMenu( menu );
  383.                 for ( item = menu->em_Items->ml_First;  item->em_Next; item = item->em_Next ) {
  384.                     GenNewMenu( item );
  385.                     for ( sub = item->em_Items->ml_First;  sub->em_Next; sub = sub->em_Next ) {
  386.                         GenNewMenu( sub );
  387.                     }
  388.                 }
  389.             }
  390.             FPuts( MainSource, "\tNM_END, NULL, NULL, 0, 0L, NULL\n};\n\n" );
  391.         }
  392.     }
  393. }
  394.  
  395. /*
  396.  *      Generate the NewGadget arrays.
  397.  */
  398. Local VOID GenGArrays( void )
  399. {
  400.     struct ProjectWindow    *pw;
  401.     struct ExtNewGadget     *g;
  402.     struct NewGadget        *ng;
  403.     WORD                     bleft, btop;
  404.  
  405.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  406.  
  407.         bleft = pw->pw_LeftBorder;
  408.         btop  = pw->pw_TopBorder;
  409.  
  410.         if ( pw->pw_Gadgets.gl_First->en_Next ) {
  411.  
  412.             if ( STAT ) FPuts( MainSource, Static );
  413.             else        MyFPrintf( Header, "extern struct NewGadget %sNGad[];\n", &pw->pw_Name[ 0 ] );
  414.  
  415.             MyFPrintf( MainSource, "struct NewGadget %sNGad[] = {\n", &pw->pw_Name[ 0 ] );
  416.  
  417.             for ( g = pw->pw_Gadgets.gl_First; g->en_Next; g = g->en_Next ) {
  418.  
  419.                 ng = &g->en_NewGadget;
  420.  
  421.                 MyFPrintf( MainSource, "\t%ld, %ld, %ld, %ld, ( UBYTE * )", ng->ng_LeftEdge - bleft, ng->ng_TopEdge - btop, ng->ng_Width, ng->ng_Height  );
  422.  
  423.                 if ( ng->ng_GadgetText ) {
  424.                     if ( strlen( ng->ng_GadgetText ))
  425.                         GenStrRef( ng->ng_GadgetText );
  426.                     else
  427.                         goto noTxt;
  428.                 } else {
  429.                     noTxt:
  430.                     FPuts( MainSource, "NULL, " );
  431.                 }
  432.  
  433.                 MyFPrintf( MainSource, "NULL, GD_%s, ", &g->en_GadgetLabel[ 0 ] );
  434.  
  435.                 WritePlacementFlags( ng->ng_Flags );
  436.  
  437.                 MyFPrintf( MainSource, ", NULL, (APTR)%s,\n", GadgetKinds[ g->en_Kind ] );
  438.             }
  439.             Seek( MainSource, -2L, OFFSET_CURRENT );
  440.             FPuts( MainSource, "\n};\n\n" );
  441.         }
  442.     }
  443. }
  444. /*
  445.  *      Generate the gadget tagitem arrays.
  446.  */
  447. Local VOID GenGTags( void )
  448. {
  449.     struct ProjectWindow    *pw;
  450.     struct ExtNewGadget     *g;
  451.     UBYTE                   *str, *ptr;
  452.     UWORD                    num;
  453.     ULONG                    sj;
  454.  
  455.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  456.         if ( pw->pw_Gadgets.gl_First->en_Next ) {
  457.  
  458.             if ( NSET( SourceConfig.gc_GenCFlags0,CS0_AZTEC )) {
  459.                 if ( STAT ) FPuts( MainSource, Static );
  460.                 else        MyFPrintf( Header, "extern ULONG %sGTags[];\n", &pw->pw_Name[ 0 ] );
  461.                 MyFPrintf( MainSource, "ULONG %sGTags[] = {\n", &pw->pw_Name[ 0 ] );
  462.                 str = "";
  463.             } else {
  464.                 if ( STAT ) FPuts( MainSource, Static );
  465.                 else        MyFPrintf( Header, "extern ULONG *%sGTags[];\n", &pw->pw_Name[ 0 ] );
  466.                 MyFPrintf( MainSource, "ULONG *%sGTags[] = {\n", &pw->pw_Name[ 0 ] );
  467.                 str = "(ULONG *)";
  468.             }
  469.  
  470.             for ( g = pw->pw_Gadgets.gl_First; g->en_Next; g = g->en_Next ) {
  471.                 FPuts( MainSource, "\t" );
  472.  
  473.                 switch ( g->en_Kind ) {
  474.  
  475.                     case    CHECKBOX_KIND:
  476.                         if ( GTX_TagInArray( GTCB_Checked, g->en_Tags ))
  477.                             MyFPrintf( MainSource, "%s(GTCB_Checked), %sTRUE, ", str, str );
  478.                         if ( SET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT ))
  479.                             MyFPrintf( MainSource, "%s(GTCB_Scaled), %sTRUE, ", str, str );
  480.                         break;
  481.  
  482.                     case    CYCLE_KIND:
  483.                         if ( NSET( SourceConfig.gc_GenCFlags0, CS0_AZTEC ))
  484.                             FPuts( MainSource, "(GTCY_Labels), (ULONG)" );
  485.                         else
  486.                             FPuts( MainSource, "(ULONG *)(GTCY_Labels), (ULONG *)" );
  487.  
  488.                         GenArrRef( ( UBYTE ** )GetTagData( GTCY_Labels, NULL, g->en_Tags ));
  489.  
  490.                         if ( GTX_TagInArray( GTCY_Active, g->en_Tags ))
  491.                             MyFPrintf( MainSource, "%s(GTCY_Active), %s%ld, ", str, str, GetTagData( GTCY_Active, 0, g->en_Tags ));
  492.                         break;
  493.  
  494.                     case    INTEGER_KIND:
  495.                         if ( GTX_TagInArray( GA_TabCycle, g->en_Tags ))
  496.                             MyFPrintf( MainSource, "%s(GA_TabCycle), %sFALSE, ", str, str );
  497.                         if ( GTX_TagInArray( STRINGA_ExitHelp, g->en_Tags ))
  498.                             MyFPrintf( MainSource, "%s(STRINGA_ExitHelp), %sTRUE, ", str, str );
  499.                         if ( num = GetTagData( GTIN_Number, 0, g->en_Tags ))
  500.                             MyFPrintf( MainSource, "%s(GTIN_Number), %s%ld, ", str, str, num);
  501.                         if (( num = GetTagData( GTIN_Number, 10, g->en_Tags )) != 10 )
  502.                             MyFPrintf( MainSource, "%s(GTIN_MaxChars), %s%ld, ", str, str, 10 );
  503.                         if ( sj = GetTagData( STRINGA_Justification, 0l, g->en_Tags )) {
  504.                             MyFPrintf( MainSource, "%s(STRINGA_Justification), ", str );
  505.                             if ( sj == GACT_STRINGCENTER ) MyFPrintf( MainSource, "%s(GACT_STRINGCENTER), ", str );
  506.                             else                           MyFPrintf( MainSource, "%s(GACT_STRINGRIGHT), ", str );
  507.                         }
  508.                         break;
  509.  
  510.                     case    LISTVIEW_KIND:
  511.                         if (( g->en_Flags & GDF_NEEDLOCK ) == GDF_NEEDLOCK )
  512.                             MyFPrintf( MainSource, "%s(GTLV_ShowSelected), %s1L, ", str, str );
  513.                         else if (GTX_TagInArray( GTLV_ShowSelected, g->en_Tags ))
  514.                             MyFPrintf( MainSource, "%s(GTLV_ShowSelected), %sNULL, ", str, str );
  515.                         if ( GTX_TagInArray( GTLV_ScrollWidth, g->en_Tags ))
  516.                             MyFPrintf( MainSource, "%s(GTLV_ScrollWidth), %s%ld, ", str, str, GetTagData( GTLV_ScrollWidth, 0, g->en_Tags ));
  517.                         if ( GTX_TagInArray( GTLV_ReadOnly, g->en_Tags ))
  518.                             MyFPrintf( MainSource, "%s(GTLV_ReadOnly), %sTRUE, ", str, str );
  519.                         if ( GTX_TagInArray( LAYOUTA_Spacing, g->en_Tags ))
  520.                             MyFPrintf( MainSource, "%s(LAYOUTA_Spacing), %s%ld, ", str, str, GetTagData( LAYOUTA_Spacing, 0, g->en_Tags ));
  521.                         break;
  522.  
  523.                     case    MX_KIND:
  524.                         if ( NSET( SourceConfig.gc_GenCFlags0, CS0_AZTEC ))
  525.                             FPuts( MainSource, "(GTMX_Labels), (ULONG)" );
  526.                         else
  527.                             FPuts( MainSource, "(ULONG *)(GTMX_Labels), (ULONG *)" );
  528.  
  529.                         GenArrRef( ( UBYTE ** )GetTagData( GTMX_Labels, NULL, g->en_Tags ));
  530.  
  531.                         if ( GTX_TagInArray( GTMX_Spacing, g->en_Tags ))
  532.                             MyFPrintf( MainSource, "%s(GTMX_Spacing), %s%ld, ", str, str, GetTagData( GTMX_Spacing, 0, g->en_Tags ));
  533.                         if ( GTX_TagInArray( GTMX_Active, g->en_Tags ))
  534.                             MyFPrintf( MainSource, "%s(GTMC_Active), %s%ld, ", str, str, GetTagData( GTMX_Active, 0, g->en_Tags ));
  535.                         if ( SET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT ))
  536.                             MyFPrintf( MainSource, "%s(GTMX_Scaled), %sTRUE, ", str, str );
  537.                         break;
  538.  
  539.                     case    PALETTE_KIND:
  540.                         MyFPrintf( MainSource, "%s(GTPA_Depth), %s%ld, ", str, str, GetTagData( GTPA_Depth, 1, g->en_Tags ));
  541.                         if ( GTX_TagInArray( GTPA_IndicatorWidth, g->en_Tags ))
  542.                             MyFPrintf( MainSource, "%s(GTPA_IndicatorWidth), %s%ld, ", str, str, GetTagData( GTPA_IndicatorWidth, NULL, g->en_Tags ));
  543.                         if ( GTX_TagInArray( GTPA_IndicatorHeight, g->en_Tags ))
  544.                             MyFPrintf( MainSource, "%s(GTPA_IndicatorHeight), %s%ld, ", str, str, GetTagData( GTPA_IndicatorHeight, NULL, g->en_Tags ));
  545.                         if ( GTX_TagInArray( GTPA_Color, g->en_Tags ))
  546.                             MyFPrintf( MainSource, "%s(GTPA_Color), %s%ld, ", str, str, GetTagData( GTPA_Color, 1, g->en_Tags ));
  547.                         if ( GTX_TagInArray( GTPA_ColorOffset, g->en_Tags ))
  548.                             MyFPrintf( MainSource, "%s(GTPA_ColorOffset), %s%ld, ", str, str, GetTagData( GTPA_ColorOffset, 0, g->en_Tags ));
  549.                         break;
  550.  
  551.                     case    SCROLLER_KIND:
  552.                         if ( GTX_TagInArray( GTSC_Top, g->en_Tags ))
  553.                             MyFPrintf( MainSource, "%s(GTSC_Top), %s%ld, ", str, str, GetTagData( GTSC_Top, NULL, g->en_Tags ));
  554.                         if ( GTX_TagInArray( GTSC_Total, g->en_Tags ))
  555.                             MyFPrintf( MainSource, "%s(GTSC_Total), %s%ld, ", str, str, GetTagData( GTSC_Total, NULL, g->en_Tags ));
  556.                         if ( GTX_TagInArray( GTSC_Visible, g->en_Tags ))
  557.                             MyFPrintf( MainSource, "%s(GTSC_Visible), %s%ld, ", str, str, GetTagData( GTSC_Visible, NULL, g->en_Tags ));
  558.                         if ( GTX_TagInArray( GTSC_Arrows, g->en_Tags ))
  559.                             MyFPrintf( MainSource, "%s(GTSC_Arrows), %s%ld, ", str, str, GetTagData( GTSC_Arrows, 0, g->en_Tags ));
  560.                         if ( GTX_TagInArray( PGA_Freedom, g->en_Tags ))
  561.                             MyFPrintf( MainSource, "%s(PGA_Freedom), %sLORIENT_VERT, ", str, str );
  562.                         else
  563.                             MyFPrintf( MainSource, "%s(PGA_Freedom), %sLORIENT_HORIZ, ", str, str );
  564.                         if ( GTX_TagInArray( GA_Immediate, g->en_Tags ))
  565.                             MyFPrintf( MainSource, "%s(GA_Immediate), %sTRUE, ", str, str );
  566.                         if ( GTX_TagInArray( GA_RelVerify, g->en_Tags ))
  567.                             MyFPrintf( MainSource, "%s(GA_RelVerify), %sTRUE, ", str, str );
  568.                         break;
  569.  
  570.                     case    SLIDER_KIND:
  571.                         if ( GTX_TagInArray( GTSL_Min, g->en_Tags ))
  572.                             MyFPrintf( MainSource, "%s(GTSL_Min), %s%ld, ", str, str, GetTagData( GTSL_Min, NULL, g->en_Tags ));
  573.                         if ( GTX_TagInArray( GTSL_Max, g->en_Tags ))
  574.                             MyFPrintf( MainSource, "%s(GTSL_Max), %s%ld, ", str, str, GetTagData( GTSL_Max, NULL, g->en_Tags ));
  575.                         if ( GTX_TagInArray( GTSL_Level, g->en_Tags ))
  576.                             MyFPrintf( MainSource, "%s(GTSL_Level), %s%ld, ", str, str, GetTagData( GTSL_Level, NULL, g->en_Tags ));
  577.                         if ( GTX_TagInArray( GTSL_MaxLevelLen, g->en_Tags ))
  578.                             MyFPrintf( MainSource, "%s(GTSL_MaxLevelLen), %s%ld, ", str, str, GetTagData( GTSL_MaxLevelLen, NULL, g->en_Tags ));
  579.  
  580.                         if ( GTX_TagInArray( GTSL_LevelFormat, g->en_Tags )) {
  581.                             if ( NSET( SourceConfig.gc_GenCFlags0, CS0_AZTEC ))
  582.                                 FPuts( MainSource, "(GTSL_LevelFormat), (ULONG)" );
  583.                             else
  584.                                 FPuts( MainSource, "(ULONG *)(GTSL_LevelFormat), (ULONG *)" );
  585.  
  586.                             GenStrRef( ( UBYTE * )GetTagData( GTSL_LevelFormat, 0, g->en_Tags ));
  587.                         }
  588.  
  589.                         if ( GTX_TagInArray( GTSL_LevelPlace, g->en_Tags )) {
  590.                             MyFPrintf( MainSource, "%s(GTSL_LevelPlace), %s(", str, str );
  591.                             WritePlacementFlags( GetTagData( GTSL_LevelPlace, NULL, g->en_Tags ));
  592.                             FPuts( MainSource, "), " );
  593.                         }
  594.                         if ( GTX_TagInArray( PGA_Freedom, g->en_Tags ))
  595.                             MyFPrintf( MainSource, "%s(PGA_Freedom), %sLORIENT_VERT, ", str, str );
  596.                         else
  597.                             MyFPrintf( MainSource, "%s(PGA_Freedom), %sLORIENT_HORIZ, ", str, str );
  598.                         if ( GTX_TagInArray( GA_Immediate, g->en_Tags ))
  599.                             MyFPrintf( MainSource, "%s(GA_Immediate), %sTRUE, ", str, str );
  600.                         if ( GTX_TagInArray( GA_RelVerify, g->en_Tags ))
  601.                             MyFPrintf( MainSource, "%s(GA_RelVerify), %sTRUE, ", str, str );
  602.                         break;
  603.  
  604.                     case    STRING_KIND:
  605.                         if ( GTX_TagInArray( GA_TabCycle, g->en_Tags ))
  606.                             MyFPrintf( MainSource, "%s(GA_TabCycle), %sFALSE, ", str, str );
  607.                         if ( GTX_TagInArray( STRINGA_ExitHelp, g->en_Tags ))
  608.                             MyFPrintf( MainSource, "%s(STRINGA_ExitHelp), %sTRUE, ", str, str );
  609.                         if ( ptr = ( UBYTE * )GetTagData( GTST_String, NULL, g->en_Tags )) {
  610.                             if ( strlen( ptr )) {
  611.                                 if ( NSET( SourceConfig.gc_GenCFlags0, CS0_AZTEC ))
  612.                                     FPuts( MainSource, "(GTST_String), (ULONG)" );
  613.                                 else
  614.                                     FPuts( MainSource, "(ULONG *)(GTST_String), (ULONG *)" );
  615.                             }
  616.                             GenStrRef( ptr );
  617.                         }
  618.                         if (( num = GetTagData( GTST_MaxChars, 64, g->en_Tags )) != 64 )
  619.                             MyFPrintf( MainSource, "%s(GTST_MaxChars), %s%ld, ", str, str, num );
  620.                         if ( sj = GetTagData( STRINGA_Justification, 0l, g->en_Tags )) {
  621.                             MyFPrintf( MainSource, "%s(STRINGA_Justification), ", str );
  622.                             if ( sj == GACT_STRINGCENTER ) MyFPrintf( MainSource, "%s(GACT_STRINGCENTER), ", str );
  623.                             else                           MyFPrintf( MainSource, "%s(GACT_STRINGRIGHT), ", str );
  624.                         }
  625.                         break;
  626.  
  627.                     case    NUMBER_KIND:
  628.                         if ( GTX_TagInArray( GTNM_Number, g->en_Tags ))
  629.                             MyFPrintf( MainSource, "%s(GTNM_Number), %s%ld, ", str, str, GetTagData( GTNM_Number, 0, g->en_Tags ));
  630.                         if ( GTX_TagInArray( GTNM_Border, g->en_Tags ))
  631.                             MyFPrintf( MainSource, "%s(GTNM_Border), %sTRUE, ", str, str );
  632.                         break;
  633.  
  634.                     case    TEXT_KIND:
  635.                         if ( ptr = ( UBYTE * )GetTagData( GTTX_Text, NULL, g->en_Tags )) {
  636.                             if ( strlen( ptr )) {
  637.                                 if ( NSET( SourceConfig.gc_GenCFlags0, CS0_AZTEC ))
  638.                                     FPuts( MainSource, "(GTTX_Text), (ULONG)" );
  639.                                 else
  640.                                     FPuts( MainSource, "(ULONG *)(GTTX_Text), (ULONG *)" );
  641.                             }
  642.                             GenStrRef( ptr );
  643.                         }
  644.                         if ( GTX_TagInArray( GTTX_Border, g->en_Tags ))
  645.                             MyFPrintf( MainSource, "%s(GTTX_Border), %sTRUE, ", str, str );
  646.                         if ( GTX_TagInArray( GTTX_CopyText, g->en_Tags ))
  647.                             MyFPrintf( MainSource, "%s(GTTX_CopyText), %sTRUE, ", str, str );
  648.                         break;
  649.                 }
  650.  
  651.                 if ( g->en_Kind != GENERIC_KIND ) {
  652.                     if ( GTX_TagInArray( GT_Underscore,  g->en_Tags ))
  653.                         MyFPrintf( MainSource, "%s(GT_Underscore), %s'_', ", str, str );
  654.                 }
  655.  
  656.                 if ( GTX_TagInArray( GA_Disabled, g->en_Tags ))
  657.                     MyFPrintf( MainSource, "%s(GA_Disabled), TRUE, ", str, str );
  658.  
  659.                 MyFPrintf( MainSource, "%s(TAG_DONE),\n", str );
  660.             }
  661.             Seek( MainSource, -2L, OFFSET_CURRENT );
  662.             FPuts( MainSource, "\n};\n\n" );
  663.         }
  664.     }
  665. }
  666.  
  667. /*
  668.  *      Check for menus in the file.
  669.  */
  670. Local BOOL CheckMenus( void )
  671. {
  672.     struct ProjectWindow        *pw;
  673.  
  674.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  675.         if ( pw->pw_Menus.ml_First->em_Next )
  676.             return( TRUE );
  677.     }
  678.     return( FALSE );
  679. }
  680.  
  681. /*
  682.  *      Check for gadgets in the file.
  683.  */
  684. Local BOOL CheckGadgets( void )
  685. {
  686.     struct ProjectWindow        *pw;
  687.  
  688.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  689.         if ( pw->pw_Gadgets.gl_First->en_Next )
  690.             return( TRUE );
  691.     }
  692.     return( FALSE );
  693. }
  694.  
  695. /*
  696.  *      Check for GENERIC_KIND (=GETFILE) gadgets.
  697.  */
  698. Local BOOL CheckGeneric( void )
  699. {
  700.     struct ProjectWindow        *pw;
  701.     struct ExtNewGadget         *eng;
  702.  
  703.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  704.         for ( eng = pw->pw_Gadgets.gl_First; eng->en_Next; eng = eng->en_Next ) {
  705.             if ( eng->en_Kind == GENERIC_KIND )
  706.                 return( TRUE );
  707.         }
  708.     }
  709. }
  710.  
  711. /*
  712.  *      Check for joined LISTVIEW gadgets.
  713.  */
  714. Local BOOL CheckJoined( void )
  715. {
  716.     struct ProjectWindow        *pw;
  717.     struct ExtNewGadget         *eng;
  718.  
  719.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  720.         for ( eng = pw->pw_Gadgets.gl_First; eng->en_Next; eng = eng->en_Next ) {
  721.             if ( eng->en_Kind == LISTVIEW_KIND ) {
  722.                 if ( eng->en_Flags & GDF_NEEDLOCK )
  723.                     return( TRUE );
  724.             }
  725.         }
  726.     }
  727. }
  728.  
  729. /*
  730.  *      Generate the necessary globals.
  731.  */
  732. Local VOID GenGlobals( VOID )
  733. {
  734.     struct ProjectWindow        *pw;
  735.  
  736.    /*
  737.     *       Generate gadget counters.
  738.     */
  739.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  740.         if ( pw->pw_Gadgets.gl_First->en_Next )
  741.             MyFPrintf( Header, "#define %s_CNT %ld\n", &pw->pw_Name[ 0 ], GTX_CountNodes(( struct List * )&pw->pw_Gadgets ));
  742.     }
  743.     FPuts( Header, "\n" );
  744.  
  745.    /*
  746.     *       Generate screen stuff.
  747.     */
  748.     if ( STAT ) FPuts( MainSource, Static );
  749.     else        FPuts( Header, "extern struct Screen *Scr;\n" );
  750.     FPuts( MainSource, "struct Screen *Scr = NULL;\n" );
  751.  
  752.     if ( SET( GuiInfo.gui_Flags0, GU0_PUBLIC ) || SET( GuiInfo.gui_Flags0, GU0_WORKBENCH )) {
  753.         if ( STAT ) FPuts( MainSource, Static );
  754.         else        FPuts( Header, "extern UBYTE *PubScreenName;\n" );
  755.         FPuts( MainSource, "UBYTE *PubScreenName = " );
  756.  
  757.         if ( SET( GuiInfo.gui_Flags0, GU0_PUBLIC )) FPuts( MainSource, "NULL;\n" );
  758.         else                                        FPuts( MainSource, "( UBYTE * )\"Workbench\";\n" );
  759.     }
  760.  
  761.    /*
  762.     *       Generate visual info.
  763.     */
  764.     if ( STAT ) FPuts( MainSource, Static );
  765.     else        FPuts( Header, "extern APTR VisualInfo;\n" );
  766.     FPuts( MainSource, "APTR VisualInfo = NULL;\n" );
  767.  
  768.    /*
  769.     *       Generate window pointers.
  770.     */
  771.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  772.         if ( STAT ) FPuts( MainSource, Static );
  773.         else        MyFPrintf( Header, "extern struct Window *%sWnd;\n", &pw->pw_Name[ 0 ] );
  774.         MyFPrintf( MainSource, "struct Window *%sWnd;\n", &pw->pw_Name[ 0 ] );
  775.     }
  776.  
  777.    /*
  778.     *       Generate title window pointers.
  779.     */
  780.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  781.         if ( STAT ) FPuts( MainSource, Static );
  782.         else        MyFPrintf( Header, "extern UBYTE *%sWdt;\n", &pw->pw_Name[ 0 ] );
  783.         MyFPrintf( MainSource, "UBYTE *%sWdt;\n", &pw->pw_Name[ 0 ] );
  784.     }
  785.  
  786.    /*
  787.     *       Generate locale data.
  788.     */
  789.     if ( STAT ) FPuts( MainSource, Static );
  790.     else        MyFPrintf( Header, "extern UBYTE LocDone[ %ld ];\n", GTX_CountNodes(( struct List * )&Windows ));
  791.     MyFPrintf( MainSource, "UBYTE LocDone[ %ld ];\n", GTX_CountNodes(( struct List * )&Windows ));
  792.  
  793.    /*
  794.     *       Generate gadget list pointers.
  795.     */
  796.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  797.         if ( pw->pw_Gadgets.gl_First->en_Next ) {
  798.             if ( STAT ) FPuts( MainSource, Static );
  799.             else        MyFPrintf( Header, "extern struct Gadget *%sGList;\n", &pw->pw_Name[ 0 ] );
  800.             MyFPrintf( MainSource, "struct Gadget *%sGList = NULL;\n", &pw->pw_Name[ 0 ] );
  801.         }
  802.     }
  803.  
  804.    /*
  805.     *       Generate menu pointers.
  806.     */
  807.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  808.         if ( pw->pw_Menus.ml_First->em_Next ) {
  809.             if ( STAT ) FPuts( MainSource, Static );
  810.             else        MyFPrintf( Header, "extern struct Menu *%sMenus;\n", &pw->pw_Name[ 0 ] );
  811.             MyFPrintf( MainSource, "struct Menu *%sMenus = NULL;\n", &pw->pw_Name[ 0 ] );
  812.         }
  813.     }
  814.  
  815.    /*
  816.     *       Generate zoom arrays.
  817.     */
  818.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  819.         if ( SET( pw->pw_TagFlags, WDF_ZOOM ) || SET( pw->pw_TagFlags, WDF_DEFAULTZOOM )) {
  820.             if ( NSET( pw->pw_WindowFlags, WFLG_SIZEGADGET )) {
  821.                 if ( STAT ) FPuts( MainSource, Static );
  822.                 else        MyFPrintf( Header, "extern UWORD %sZoom[ 4 ];\n", &pw->pw_Name[ 0 ] );
  823.                 MyFPrintf( MainSource, "UWORD %sZoom[ 4 ];\n", &pw->pw_Name[ 0 ] );
  824.             }
  825.         }
  826.     }
  827.  
  828.    /*
  829.     *       Generate gadget arrays.
  830.     */
  831.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  832.         if ( pw->pw_Gadgets.gl_First->en_Next ) {
  833.             if ( STAT ) FPuts( MainSource, Static );
  834.             else        MyFPrintf( Header, "extern struct Gadget *%sGadgets[ %ld ];\n", &pw->pw_Name[ 0 ], GTX_CountNodes(( struct List * )&pw->pw_Gadgets ));
  835.             MyFPrintf( MainSource, "struct Gadget *%sGadgets[ %ld ];\n", &pw->pw_Name[ 0 ], GTX_CountNodes(( struct List * )&pw->pw_Gadgets ));
  836.         }
  837.     }
  838.  
  839.    /*
  840.     *       Generate the BOOPSI stuff.
  841.     */
  842.     if ( CheckGeneric()) {
  843.         FPuts( Protos, "extern struct IClass *initGet( void );\n" );
  844.         if ( STAT ) FPuts( MainSource, Static );
  845.         else        FPuts( Header, "extern struct IClass *getClass;\n" );
  846.         FPuts( MainSource, "//struct IClass *getClass;\n" );
  847.         if ( STAT ) FPuts( MainSource, Static );
  848.         else        FPuts( Header, "extern struct _Object *getImage;\n" );
  849.         FPuts( MainSource, "//struct _Object *getImage;\n" );
  850.     }
  851.  
  852.    /*
  853.     *       Generate window location & dimensions.
  854.     */
  855.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  856.         if ( STAT ) FPuts( MainSource, Static );
  857.         MyFPrintf( MainSource, "UWORD %sLeft = %ld, %sTop = %ld;\n", &pw->pw_Name[ 0 ], GetTagData( WA_Left, 0, pw->pw_Tags ), &pw->pw_Name[ 0 ], GetTagData( WA_Top, 0, pw->pw_Tags ));
  858.         if ( NSET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT )) {
  859.             if ( STAT ) FPuts( MainSource, Static );
  860.             MyFPrintf( MainSource, "UWORD %sWidth = ", &pw->pw_Name[ 0 ] );
  861.  
  862.             if ( SET( pw->pw_TagFlags, WDF_INNERWIDTH ))    MyFPrintf( MainSource, "%ld, ", pw->pw_InnerWidth );
  863.             else                                            MyFPrintf( MainSource, "%ld, ", GetTagData( WA_Width, 0, pw->pw_Tags ));
  864.  
  865.             if ( STAT ) FPuts( MainSource, Static );
  866.             MyFPrintf( MainSource, "%sHeight = ", &pw->pw_Name[ 0 ] );
  867.  
  868.             if ( SET( pw->pw_TagFlags, WDF_INNERHEIGHT ))    MyFPrintf( MainSource, "%ld;\n", pw->pw_InnerHeight );
  869.             else                                             MyFPrintf( MainSource, "%ld;\n", GetTagData( WA_Height, 0, pw->pw_Tags ) - pw->pw_TopBorder );
  870.         } else {
  871.             if ( STAT ) FPuts( MainSource, Static );
  872.             MyFPrintf( MainSource, "UWORD %sWidth = %ld, %sHeight = %ld;\n", &pw->pw_Name[ 0 ], pw->pw_InnerWidth, &pw->pw_Name[ 0 ], pw->pw_InnerHeight );
  873.         }
  874.         if ( NSTAT )
  875.             MyFPrintf( Header, "extern UWORD %sLeft, %sTop, %sWidth, %sHeight;\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  876.     }
  877.  
  878.    /*
  879.     *       Generate the font adaptivity stuff.
  880.     */
  881.     if ( SET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT )) {
  882.         if ( STAT ) FPuts( MainSource, Static );
  883.         else        FPuts( Header, "extern struct TextAttr *Font, Attr;\n" );
  884.         FPuts( MainSource, "struct TextAttr *Font = NULL, Attr;\n" );
  885.         if ( STAT ) FPuts( MainSource, Static );
  886.         else        FPuts( Header, "extern UWORD FontX, FontY, OffX, OffY;\n" );
  887.         FPuts( MainSource, "UWORD FontX, FontY, OffX, OffY;\n" );
  888.         if ( SET( SourceConfig.gc_GenCFlags0, CS0_SYSFONT )) {
  889.             for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  890.                 if ( STAT ) FPuts( MainSource, Static );
  891.                 else        MyFPrintf( Header, "extern struct TextFont *%sFont;\n", &pw->pw_Name[ 0 ] );
  892.                 MyFPrintf( MainSource, "struct TextFont *%sFont = NULL;\n", &pw->pw_Name[ 0 ] );
  893.             }
  894.             FPuts( Header, "extern struct GfxBase *GfxBase;\n" );
  895.         }
  896.     }
  897.  
  898.    /*
  899.     *       Generate gadtoolsbox.library stuff.
  900.     */
  901.     for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  902.         if ( STAT ) FPuts( MainSource, Static );
  903.         else        MyFPrintf( Header, "extern HOTKEYHANDLE %sHandle;\n", &pw->pw_Name[ 0 ] );
  904.         MyFPrintf( MainSource, "HOTKEYHANDLE %sHandle = NULL;\n", &pw->pw_Name[ 0 ] );
  905.     }
  906.  
  907.     FPuts( MainSource, "struct TagItem HandleTags[] = {\n\tHKH_UseNewButton,\tTRUE,\n\tHKH_NewText,\tTRUE,\n\tHKH_SetRepeat,\tSRF_CYCLE|SRF_SLIDER|SRF_LISTVIEW|SRF_PALETTE,\n\tTAG_END\n};\n" );
  908.  
  909.     FPuts( MainSource, "UWORD Pattern[ 2 ] = { 0xAAAA, 0x5555 };\n" );
  910.  
  911.    /*
  912.     *       Generate locale stuff.
  913.     */
  914.     if ( STAT ) FPuts( MainSource, Static );
  915.     else        FPuts( Header, "extern struct Catalog *Catalog;\n" );
  916.     FPuts( MainSource, "struct Catalog *Catalog = NULL;\n" );
  917.  
  918.     FPuts( MainSource, "\n" );
  919. }
  920.  
  921. /*
  922.  *      Generate the .CD file.
  923.  */
  924. Local VOID GenCD( void )
  925. {
  926.     BPTR                     fh;
  927.     ULONG                    len;
  928.     UBYTE                   *Buffer;
  929.     struct StringNode       *sn;
  930.     UWORD                    mn;
  931.  
  932.     if ( Arguments.Prepend ) {
  933.         Print( STRING( MSG_PREPENDING_CD ));
  934.         if ( fh = Open( Arguments.Prepend, MODE_OLDFILE )) {
  935.                   Seek( fh, 0, OFFSET_END );
  936.             len = Seek( fh, 0, OFFSET_BEGINNING );
  937.             if ( Buffer = ( UBYTE * )AllocMem( len, MEMF_PUBLIC )) {
  938.                 if ( Read( fh, Buffer, len ) == len ) {
  939.                     if ( FWrite( Locale, Buffer, len, 1 ) != 1 )
  940.                         Print( STRING( MSG_WRITE_ERROR ));
  941.                 } else
  942.                     Print( STRING( MSG_READ_ERROR ));
  943.                 FreeMem( Buffer, len );
  944.             } else
  945.                 Print( STRING( MSG_OUT_OF_MEMORY ));
  946.             Close( fh );
  947.         } else
  948.             Print( STRING( MSG_PREPEND_FILE_ERROR ));
  949.     }
  950.  
  951.     for ( sn = Strings.sl_First, mn = 0; sn->sn_Next; sn = sn->sn_Next, mn++ )
  952.         MyFPrintf( Locale, ";\nMSG_STRING_%ld (/0/)\n%s\n", mn, sn->sn_String );
  953. }
  954.  
  955. /*
  956.  *      Generate fixed routines.
  957.  */
  958. Local VOID GenLocal( void )
  959. {
  960.     struct ArrayNode        *an;
  961.     UBYTE                  **array, *bi;
  962.     LONG                    *version = Arguments.CatVersion;
  963.     UWORD                    nn, in;
  964.  
  965.     if ( ! ( bi = Arguments.BuiltIn )) bi = "english";
  966.  
  967.     FPuts( Header, "extern struct LocalBase *LocalBase;\n" );
  968.     FPuts( Protos, "extern BOOL SetupLocale( void );\n" );
  969.  
  970.     FPuts( MainSource, "BOOL SetupLocale( void )\n{\n"
  971.                        "\tUWORD\t\tnum;\n\n" );
  972.  
  973.     MyFPrintf( MainSource, "\tif ( LocaleBase && ( Catalog = OpenCatalog( NULL, \"%s\", OC_BuiltInLanguage, \"%s\", OC_Version, %ld, TAG_END ))) {\n", Arguments.Catalog, bi, *version );
  974.     FPuts( MainSource,     "\t\tfor ( num = 0; num < ( sizeof( AppStrings ) / sizeof( struct AppString )); num++ )\n"
  975.                            "\t\t\tAppStrings[ num ].as_Str = GetCatalogStr( Catalog, num, AppStrings[ num ].as_Str );\n"
  976.                            "\t}\n\n" );
  977.  
  978.     for ( an = Arrays.al_First, nn = 0, in = 0; an->an_Next; an = an->an_Next, nn++ ) {
  979.         array = an->an_Array;
  980.         while ( *array ) {
  981.             MyFPrintf( MainSource, "\tGUIArray%ld[ %ld ] = ( UBYTE * )AppStrings[ MSG_STRING_%ld ].as_Str;\n", nn, in, GetStringNumber( &Strings, *array ));
  982.             in++;
  983.             array++;
  984.         }
  985.         MyFPrintf( MainSource, "\tGUIArray%ld[ %ld ] = ( UBYTE * )NULL;\n\n", nn, in );
  986.         in = 0;
  987.     }
  988.  
  989.     FPuts( MainSource, "}\n\n" );
  990.  
  991.     if ( CheckGadgets()) {
  992.         FPuts( Protos, "extern VOID FixTags( struct TagItem *, UWORD );\n" );
  993.  
  994.         FPuts( MainSource, "VOID FixTags( struct TagItem *tags, UWORD kind )\n{\n"
  995.                            "\tstruct TagItem *tag;\n\n"
  996.                            "\tswitch ( kind ) {\n"
  997.                            "\t\tcase\tSTRING_KIND:\n"
  998.                            "\t\t\tif ( tag = FindTagItem( GTST_String, tags ))\n"
  999.                            "\t\t\t\ttag->ti_Data = ( ULONG )AppStrings[ tag->ti_Data ].as_Str;\n\t\t\tbreak;\n"
  1000.                            "\t\tcase\tTEXT_KIND:\n"
  1001.                            "\t\t\tif ( tag = FindTagItem( GTTX_Text, tags ))\n"
  1002.                            "\t\t\t\ttag->ti_Data = ( ULONG )AppStrings[ tag->ti_Data ].as_Str;\n\t\t\tbreak;\n"
  1003.                            "\t\tcase\tSLIDER_KIND:\n"
  1004.                            "\t\t\tif ( tag = FindTagItem( GTSL_LevelFormat, tags ))\n"
  1005.                            "\t\t\t\ttag->ti_Data = ( ULONG )AppStrings[ tag->ti_Data ].as_Str;\n\t\t\tbreak;\n"
  1006.                            "\t}\n}\n\n" );
  1007.  
  1008.         FPuts( Protos, "extern VOID FixGadgets( struct NewGadget *, UWORD );\n" );
  1009.  
  1010.         FPuts( MainSource, "VOID FixGadgets( struct NewGadget *ng, UWORD numgads )\n{\n"
  1011.                            "\twhile ( numgads ) {\n"
  1012.                            "\t\tif ( ng->ng_GadgetText )\n"
  1013.                            "\t\t\tng->ng_GadgetText = AppStrings[ (ULONG)ng->ng_GadgetText ].as_Str;\n"
  1014.                            "\t\tnumgads--;\n\t\tng++;\n"
  1015.                            "\t}\n}\n\n" );
  1016.     }
  1017.  
  1018.     if ( CheckMenus()) {
  1019.         FPuts( Protos, "extern VOID FixMenus( struct NewMenu * );\n" );
  1020.  
  1021.         FPuts( MainSource, "VOID FixMenus( struct NewMenu *menu )\n{\n"
  1022.                            "\twhile ( menu->nm_Type != NM_END ) {\n"
  1023.                            "\t\tif ( menu->nm_Label && menu->nm_Label != NM_BARLABEL )\n"
  1024.                            "\t\t\tmenu->nm_Label = AppStrings[ (ULONG)menu->nm_Label ].as_Str;\n"
  1025.                            "\t\tmenu++;\n"
  1026.                            "\t}\n}\n\n" );
  1027.     }
  1028.  
  1029.     if ( SET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT )) {
  1030.         FPuts( Protos, "extern UWORD ComputeX( UWORD );\nextern UWORD ComputeY( UWORD );\nextern VOID ComputeFont( UWORD, UWORD );\n" );
  1031.  
  1032.         FPuts( MainSource, "UWORD ComputeX( UWORD value )\n{\n\treturn(( UWORD )((( FontX * value ) + 4 ) / 8 ));\n}\n\n" );
  1033.         FPuts( MainSource, "UWORD ComputeY( UWORD value )\n{\n\treturn(( UWORD )((( FontY * value ) + 4 ) / 8 ));\n}\n\n" );
  1034.  
  1035.         FPuts( MainSource, "VOID ComputeFont( UWORD width, UWORD height )\n{\n" );
  1036.         if ( NSET( SourceConfig.gc_GenCFlags0, CS0_SYSFONT ))
  1037.             FPuts( MainSource, "\tFont = &Attr;\n\tFont->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;\n\tFont->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;\n\tFontX = Scr->RastPort.Font->tf_XSize;\n\n" );
  1038.         else
  1039.             FPuts( MainSource, "\tForbid();\n\tFont = &Attr;\n\t"\
  1040.                          "Font->ta_Name = (STRPTR)GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name;\n\tFont->ta_YSize = FontY = GfxBase->DefaultFont->tf_YSize;\n\tFontX = GfxBase->DefaultFont->tf_XSize;\n\tPermit();\n\n" );
  1041.  
  1042.         FPuts( MainSource, "\tOffX = Scr->WBorLeft;\n" );
  1043.         FPuts( MainSource, "\tOffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;\n\n" );
  1044.         FPuts( MainSource, "\tif ( width && height ) {\n\t\tif (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )\n\t\t\tgoto UseTopaz;\n"\
  1045.                      "\t\tif (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )\n\t\t\tgoto UseTopaz;\n"\
  1046.                      "\t}\n\treturn;\n\n" );
  1047.         FPuts( MainSource, "UseTopaz:\n\tFont->ta_Name = (STRPTR)\"topaz.font\";\n\tFontX = FontY = Font->ta_YSize = 8;\n}\n\n" );
  1048.     }
  1049.  
  1050.     FPuts( Protos, "extern VOID myDrawBevelBox( struct RastPort *, UWORD, UWORD, UWORD, UWORD, Tag tag1, ... );\n" );
  1051.  
  1052.     FPuts( MainSource, "VOID myDrawBevelBox( struct RastPort *rp, UWORD l, UWORD t, UWORD w, UWORD h, Tag tag1, ... )\n{\n"
  1053.                        "\tstruct DrawInfo\t*dri;\n\n"
  1054.                        "\tif ( dri = GetScreenDrawInfo( Scr )) {\n"
  1055.                        "\t\tSetAPen( rp, dri->dri_Pens[ BACKGROUNDPEN ] );\n"
  1056.                        "\t\tRectFill( rp, l, t, l + w - 1, t + h - 1 );\n"
  1057.                        "\t\tFreeScreenDrawInfo( Scr, dri );\n\t}\n"
  1058.                        "\tDrawBevelBoxA( rp, l, t, w, h, ( struct TagItem * )&tag1 );\n}\n\n" );
  1059.  
  1060.     FPuts( Protos, "extern VOID BackFill( struct Window * );\n" );
  1061.  
  1062.     FPuts( MainSource, "VOID BackFill( struct Window *wnd )\n{\n"
  1063.                        "\tstruct DrawInfo\t*dri;\n\n"
  1064.                        "\tif ( dri = GetScreenDrawInfo( Scr )) {\n"
  1065.                        "\t\tSetAPen( wnd->RPort, dri->dri_Pens[ SHINEPEN ] );\n"
  1066.                        "\t\tSetAfPt( wnd->RPort, &Pattern[ 0 ], 1 );\n"
  1067.                        "\t\tRectFill( wnd->RPort, wnd->BorderLeft, wnd->BorderTop, wnd->Width - wnd->BorderRight - 1, wnd->Height - wnd->BorderBottom - 1 );\n"
  1068.                        "\t\tSetAfPt( wnd->RPort, NULL, 0 );\n"
  1069.                        "\t\tFreeScreenDrawInfo( Scr, dri );\n\t}\n}\n\n" );
  1070. }
  1071.  
  1072. /*
  1073.  *      Run CatComp.
  1074.  */
  1075. Local VOID RunCatComp( void )
  1076. {
  1077.     UBYTE               RunStr[ 256 ], *ptr;
  1078.     UWORD               i = 0;
  1079.  
  1080.     strcpy( &RunStr[ 0 ], "CatComp " );
  1081.     strcat( &RunStr[ 0 ], Arguments.SourceName );
  1082.  
  1083.     if ( ptr = strrchr( &RunStr[ 0 ], '.' ))
  1084.         *ptr = 0;
  1085.  
  1086.     strcat( &RunStr[ 0 ], ".cd CFILE=" );
  1087.     strcat( &RunStr[ 0 ], Arguments.SourceName );
  1088.  
  1089.     if ( ptr ) {
  1090.         if ( ptr = strrchr( &RunStr[ 0 ], '.' ))
  1091.             *ptr = 0;
  1092.     }
  1093.  
  1094.     strcat( &RunStr[ 0 ], "_locale.h" );
  1095.  
  1096.     Print( "%s\n", &RunStr[ 0 ] );
  1097.  
  1098.     SystemTags( &RunStr[ 0 ], TAG_END );
  1099. }
  1100.  
  1101. /*
  1102.  *      Generate the TextAttr structure.
  1103.  */
  1104. Local VOID GenTextAttr( VOID )
  1105. {
  1106.     UBYTE                   fname[ 32 ], *ptr;
  1107.  
  1108.     strcpy( &fname[ 0 ], &GuiInfo.gui_FontName[ 0 ] );
  1109.  
  1110.     if ( ptr= strrchr( &fname[ 0 ], '.' ))
  1111.         *ptr = 0;
  1112.  
  1113.     if ( STAT ) FPuts( MainSource, Static );
  1114.     else        MyFPrintf( Header, "extern struct TextAttr %s%ld;\n", &fname[ 0 ], GuiInfo.gui_Font.ta_YSize );
  1115.  
  1116.     MyFPrintf( MainSource, "struct TextAttr %s%ld = {\n", &fname[ 0 ], GuiInfo.gui_Font.ta_YSize );
  1117.     MyFPrintf( MainSource, "\t(STRPTR)\"%s\", %ld, 0x%02lx, 0x%02lx };\n\n", &GuiInfo.gui_FontName[ 0 ],
  1118.                                                                               GuiInfo.gui_Font.ta_YSize,
  1119.                                                                               GuiInfo.gui_Font.ta_Style,
  1120.                                                                               GuiInfo.gui_Font.ta_Flags );
  1121. }
  1122.  
  1123. /*
  1124.  *      Generate gadget initialization.
  1125.  */
  1126. Local VOID GenGadgetInit( struct ProjectWindow *pw )
  1127. {
  1128.     struct ExtNewGadget     *g, *pred, *tmp;
  1129.     struct NewGadget        *ng;
  1130.     UBYTE                    fname[ 32 ], *ptr;
  1131.     UWORD                    num, btop, bleft;
  1132.  
  1133.     btop  = pw->pw_TopBorder;
  1134.     bleft = pw->pw_LeftBorder;
  1135.  
  1136.     strcpy( &fname[ 0 ], &GuiInfo.gui_FontName[ 0 ] );
  1137.  
  1138.     if ( ptr = strrchr( &fname[ 0 ], '.' ))
  1139.         *ptr = 0;
  1140.  
  1141.     MyFPrintf( MainSource, "\tif ( ! LocDone[ %ld ] )\n\t\tFixGadgets( &%sNGad[ 0 ], %s_CNT );\n\n", GTX_GetNodeNumber(( struct List * )&Windows, ( struct Node * )pw ), &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1142.  
  1143.     MyFPrintf( MainSource, "\tfor( lc = 0, tc = 0; lc < %s_CNT; lc++ ) {\n\n", &pw->pw_Name[ 0 ] );
  1144.     MyFPrintf( MainSource, "\t\tCopyMem(( void * )&%sNGad[ lc ], ( void * )&ng, (long)sizeof( struct NewGadget ));\n\n", &pw->pw_Name[ 0 ] );
  1145.     FPuts( MainSource, "\t\tng.ng_VisualInfo = VisualInfo;\n" );
  1146.  
  1147.     if ( SET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT )) {
  1148.         FPuts( MainSource, "\t\tng.ng_TextAttr   = Font;\n" );
  1149.         FPuts( MainSource, "\t\tng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );\n" );
  1150.         FPuts( MainSource, "\t\tng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );\n" );
  1151.         if ( CheckGeneric()) {
  1152.             for ( tmp  = pw->pw_Gadgets.gl_First; tmp->en_Next; tmp = tmp->en_Next ) {
  1153.                 if ( tmp->en_Kind == GENERIC_KIND ) {
  1154.                     FPuts( MainSource, "\n\t\tif (( ULONG )ng.ng_UserData != GENERIC_KIND ) {\n" );
  1155.                     FPuts( MainSource, "\t\t\tng.ng_Width      = ComputeX( ng.ng_Width );\n" );
  1156.                     FPuts( MainSource, "\t\t\tng.ng_Height     = ComputeY( ng.ng_Height);\n\t\t}\n\n" );
  1157.                     goto skipTheShit;
  1158.                 }
  1159.             }
  1160.         }
  1161.         FPuts( MainSource, "\t\tng.ng_Width      = ComputeX( ng.ng_Width );\n" );
  1162.         FPuts( MainSource, "\t\tng.ng_Height     = ComputeY( ng.ng_Height);\n\n" );
  1163.     } else {
  1164.         MyFPrintf( MainSource, "\t\tng.ng_TextAttr   = &%s%ld;\n", &fname[0], GuiInfo.gui_Font.ta_YSize );
  1165.         FPuts( MainSource, "\t\tng.ng_LeftEdge  += offx;\n\t\tng.ng_TopEdge   += offy;\n\n" );
  1166.     }
  1167.  
  1168.     skipTheShit:
  1169.  
  1170.     if ( CheckJoined()) {
  1171.         for( tmp = pw->pw_Gadgets.gl_First; tmp->en_Next; tmp = tmp->en_Next ) {
  1172.             if ( tmp->en_Kind == LISTVIEW_KIND && (( tmp->en_Flags & GDF_NEEDLOCK ) == GDF_NEEDLOCK )) {
  1173.                 MyFPrintf( MainSource, "\t\tif (( ULONG )ng.ng_UserData == LISTVIEW_KIND ) {\n\t\t\tif ( tmp = FindTagItem( GTLV_ShowSelected, ( struct TagItem * )&%sGTags[ tc ] )) {\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1174.                 MyFPrintf( MainSource, "\t\t\t\tif ( tmp->ti_Data ) tmp->ti_Data = (ULONG)g;\n\t\t\t}\n\t\t}\n\n", &pw->pw_Name[ 0 ] );
  1175.                 break;
  1176.             } else if ( tmp->en_Kind == PALETTE_KIND )
  1177.                 MyFPrintf( MainSource, "\t\tif (( ULONG )ng.ng_UserData == PALETTE_KIND )\n\t\t\tGTX_SetTagData( GTPA_Depth, Scr->BitMap.Depth, ( struct TagItem * )&%sGTags[  tc  ] );\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1178.         }
  1179.     }
  1180.  
  1181.     MyFPrintf( MainSource, "\t\tif ( ! LocDone[ %ld ] )\n"
  1182.                            "\t\t\tFixTags(( struct TagItem * )&%sGTags[ tc ], ( ULONG )ng.ng_UserData );\n\n", GTX_GetNodeNumber(( struct List * )&Windows, ( struct Node * )pw ), &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1183.  
  1184.     MyFPrintf( MainSource, "\t\t%sGadgets[ lc ] = g = GTX_CreateGadgetA( %sHandle, (ULONG)ng.ng_UserData, g, &ng, ( struct TagItem * )&%sGTags[ tc ] );\n\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1185.  
  1186.     if ( CheckGeneric()) {
  1187.         for ( tmp = pw->pw_Gadgets.gl_First; tmp->en_Next; tmp = tmp->en_Next ) {
  1188.             if ( tmp->en_Kind == GENERIC_KIND ) {
  1189.                 FPuts( MainSource, "\t\tif (( ULONG )ng.ng_UserData == GENERIC_KIND ) {\n" );
  1190.                 FPuts( MainSource, "\t\t\tg->Flags             |= GFLG_GADGIMAGE | GFLG_GADGHIMAGE;\n\t\t\tg->Activation        |= GACT_RELVERIFY;\n" );
  1191.                 FPuts( MainSource, "\t\t\tg->GadgetRender       = (APTR)getImage;\n\t\t\tg->SelectRender       = (APTR)getImage;\n\t\t}\n\n" );
  1192.                 break;
  1193.             }
  1194.         }
  1195.     }
  1196.  
  1197.     MyFPrintf( MainSource, "\t\twhile( %sGTags[ tc ] ) tc += 2;\n\t\ttc++;\n\n", &pw->pw_Name[ 0 ] );
  1198.     FPuts( MainSource, "\t\tif ( NOT g )\n\t\t\treturn( 2L );\n\t}\n\n" );
  1199. }
  1200.  
  1201. /*
  1202.  *      Generate OpenWindow routine header.
  1203.  */
  1204. Local VOID GenHeader( struct ProjectWindow *pw )
  1205. {
  1206.     struct ExtNewGadget *eng;
  1207.  
  1208.     MyFPrintf( Protos, "extern UWORD Open%sWindow( void );\n", &pw->pw_Name[ 0 ] );
  1209.     MyFPrintf( MainSource, "UWORD Open%sWindow( void )\n{\n", &pw->pw_Name[ 0 ] );
  1210.  
  1211.     FPuts( MainSource, "\tstruct NewGadget\tng;\n\tstruct Gadget\t*g;\n" );
  1212.     FPuts( MainSource, "\tstruct TagItem\t*tmp;\n" );
  1213.     FPuts( MainSource, "\tUWORD\t\tlc, tc;\n" );
  1214.  
  1215.     if ( SET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT )) {
  1216.         MyFPrintf( MainSource, "\tUWORD\t\twleft = %sLeft, wtop = %sTop, ww, wh;\n\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1217.         MyFPrintf( MainSource, "\tComputeFont( %sWidth, %sHeight );\n\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1218.         MyFPrintf( MainSource, "\tww = ComputeX( %sWidth );\n\twh = ComputeY( %sHeight );\n\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1219.         FPuts( MainSource, "\tif (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;\n"\
  1220.                      "\tif (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;\n\n" );
  1221.         if ( SET( SourceConfig.gc_GenCFlags0, CS0_SYSFONT ))
  1222.             MyFPrintf( MainSource, "\tif ( ! ( %sFont = OpenFont( Font )))\n\t\treturn( 5L );\n\n", &pw->pw_Name[ 0 ] );
  1223.     } else {
  1224.         if ( SET( pw->pw_WindowFlags, WFLG_BACKDROP ))
  1225.             FPuts( MainSource, "\tUWORD\t\toffx = 0," );
  1226.         else
  1227.             FPuts( MainSource, "\tUWORD\t\toffx = Scr->WBorLeft," );
  1228.         FPuts( MainSource, " offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;\n\n" );
  1229.     }
  1230. }
  1231.  
  1232. /*
  1233.  *      Generate window.
  1234.  */
  1235. Local VOID GenWindow( struct ProjectWindow *pw )
  1236. {
  1237.     MyFPrintf( MainSource, "\tif ( ! ( %sWnd = OpenWindowTags( NULL,\n", &pw->pw_Name[ 0 ] );
  1238.  
  1239.     if ( NSET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT )) {
  1240.         MyFPrintf( MainSource, "\t\t\t\tWA_Left,\t%sLeft,\n", &pw->pw_Name[ 0 ] );
  1241.         MyFPrintf( MainSource, "\t\t\t\tWA_Top,\t\t%sTop,\n", &pw->pw_Name[ 0 ] );
  1242.     } else {
  1243.         FPuts( MainSource, "\t\t\t\tWA_Left,\twleft,\n" );
  1244.         FPuts( MainSource, "\t\t\t\tWA_Top,\t\twtop,\n" );
  1245.     }
  1246.  
  1247.     if ( NSET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT )) {
  1248.  
  1249.         if ( SET( pw->pw_TagFlags, WDF_INNERWIDTH )) FPuts( MainSource, "\t\t\t\tWA_InnerWidth,\t" );
  1250.         else                                         FPuts( MainSource, "\t\t\t\tWA_Width,\t" );
  1251.  
  1252.         MyFPrintf( MainSource, "%sWidth,\n", &pw->pw_Name[ 0 ] );
  1253.  
  1254.         if ( SET( pw->pw_TagFlags, WDF_INNERHEIGHT )) FPuts( MainSource, "\t\t\t\tWA_InnerHeight,\t" );
  1255.         else                                          FPuts( MainSource, "\t\t\t\tWA_Height,\t" );
  1256.  
  1257.         MyFPrintf( MainSource, "%sHeight", &pw->pw_Name[ 0 ] );
  1258.  
  1259.         if ( NSET( pw->pw_TagFlags, WDF_INNERHEIGHT )) FPuts( MainSource, " + offy" );
  1260.         FPuts( MainSource, ",\n" );
  1261.  
  1262.     } else {
  1263.         MyFPrintf( MainSource, "\t\t\t\tWA_Width,\tww + OffX + Scr->WBorRight,\n", &pw->pw_Name[ 0 ] );
  1264.         MyFPrintf( MainSource, "\t\t\t\tWA_Height,\twh + OffY + Scr->WBorBottom,\n", &pw->pw_Name[ 0 ] );
  1265.     }
  1266.  
  1267.     FPuts( MainSource, "\t\t\t\tWA_IDCMP,\t" );
  1268.     WriteIDCMPFlags( pw->pw_IDCMP|IDCMP_REFRESHWINDOW, &pw->pw_Gadgets );
  1269.     FPuts( MainSource, ",\n" );
  1270.  
  1271.     FPuts( MainSource, "\t\t\t\tWA_Flags,\t" );
  1272.     WriteWindowFlags( pw->pw_WindowFlags );
  1273.     FPuts( MainSource, ",\n" );
  1274.  
  1275. /****    if ( pw->pw_Gadgets.gl_First->en_Next )
  1276.         MyFPrintf( MainSource, "\t\t\t\tWA_Gadgets,\t%sGList,\n", &pw->pw_Name[ 0 ] ); ****/
  1277.  
  1278.     if ( NSET( pw->pw_WindowFlags, WFLG_BACKDROP ))
  1279.             MyFPrintf( MainSource, "\t\t\t\tWA_Title,\t%sWdt,\n", &pw->pw_Name[ 0 ] );
  1280.  
  1281.     if ( strlen( &pw->pw_ScreenTitle[ 0 ] ))
  1282.         MyFPrintf( MainSource, "\t\t\t\tWA_ScreenTitle,\tAppStrings[ MSG_STRING_%ld ].as_Str,\n", GetStringNumber( &Strings, &pw->pw_ScreenTitle[ 0 ] ));
  1283.  
  1284.     if ( SET( GuiInfo.gui_Flags0, GU0_CUSTOM ))
  1285.             FPuts( MainSource, "\t\t\t\tWA_CustomScreen,\tScr,\n" );
  1286.     else if ( SET( GuiInfo.gui_Flags0, GU0_PUBLIC ))
  1287.             FPuts( MainSource, "\t\t\t\tWA_PubScreen,\tScr,\n" );
  1288.  
  1289.     if ( SET( pw->pw_WindowFlags, WFLG_SIZEGADGET )) {
  1290.         if ( GTX_TagInArray( WA_MinWidth, pw->pw_Tags ))
  1291.             MyFPrintf( MainSource, "\t\t\t\tWA_MinWidth,\t%ld,\n", GetTagData( WA_MinWidth, NULL, pw->pw_Tags ));
  1292.         if ( GTX_TagInArray( WA_MinHeight, pw->pw_Tags ))
  1293.             MyFPrintf( MainSource, "\t\t\t\tWA_MinHeight,\t%ld,\n", GetTagData( WA_MinHeight, NULL, pw->pw_Tags ));
  1294.         if ( GTX_TagInArray( WA_MaxWidth, pw->pw_Tags ))
  1295.             MyFPrintf( MainSource, "\t\t\t\tWA_MaxWidth,\t%ld,\n", GetTagData( WA_MaxWidth, NULL, pw->pw_Tags ));
  1296.         if ( GTX_TagInArray( WA_MaxHeight, pw->pw_Tags ))
  1297.             MyFPrintf( MainSource, "\t\t\t\tWA_MaxHeight,\t%ld,\n", GetTagData( WA_MaxHeight, NULL, pw->pw_Tags ));
  1298.     } else {
  1299.         if ( SET( pw->pw_TagFlags, WDF_ZOOM ) || SET( pw->pw_TagFlags, WDF_DEFAULTZOOM ))
  1300.             MyFPrintf( MainSource, "\t\t\t\tWA_Zoom,\t%sZoom,\n", &pw->pw_Name[ 0 ] );
  1301.     }
  1302.  
  1303.     if ( SET( pw->pw_TagFlags, WDF_MOUSEQUEUE ))
  1304.         MyFPrintf( MainSource, "\t\t\t\tWA_MouseQueue,\t%ld,\n", pw->pw_MouseQueue);
  1305.     if ( SET( pw->pw_TagFlags, WDF_RPTQUEUE ))
  1306.         MyFPrintf( MainSource, "\t\t\t\tWA_RptQueue,\t%ld,\n", pw->pw_RptQueue );
  1307.     if ( SET( pw->pw_TagFlags, WDF_AUTOADJUST ))
  1308.         FPuts( MainSource, "\t\t\t\tWA_AutoAdjust,\tTRUE,\n" );
  1309.     if ( SET( pw->pw_TagFlags, WDF_FALLBACK ))
  1310.         FPuts( MainSource, "\t\t\t\tWA_PubScreenFallBack,\tTRUE,\n" );
  1311.     FPuts( MainSource, "\t\t\t\tWA_NewLookMenus,\tTRUE,\n" );
  1312.     FPuts( MainSource, "\t\t\t\tTAG_DONE )))\n\treturn( 4L );\n\n" );
  1313. }
  1314.  
  1315. /*
  1316.  *      Generate the cleanup stuff.
  1317.  */
  1318. Local VOID GenCleanup( struct ProjectWindow *pw )
  1319. {
  1320.     MyFPrintf( Protos, "extern VOID Close%sWindow( void );\n", &pw->pw_Name[ 0 ] );
  1321.     MyFPrintf( MainSource, "VOID Close%sWindow( void )\n{\n", &pw->pw_Name[ 0 ] );
  1322.  
  1323.     if ( pw->pw_Menus.ml_First->em_Next )
  1324.         MyFPrintf( MainSource, "\tif ( %sMenus      ) {\n\t\tClearMenuStrip( %sWnd );\n\t\tFreeMenus( %sMenus );\n\t\t%sMenus = NULL;\t}\n\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1325.  
  1326.     MyFPrintf( MainSource, "\tif ( %sWnd        ) {\n\t\tCloseWindow( %sWnd );\n\t\t%sWnd = NULL;\n\t}\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1327.  
  1328.     if ( pw->pw_Gadgets.gl_First->en_Next )
  1329.         MyFPrintf( MainSource, "\n\tif ( %sGList      ) {\n\t\tFreeGadgets( %sGList );\n\t\t%sGList = NULL;\n\t}\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1330.  
  1331.     if ( SET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT )) {
  1332.         if ( SET( SourceConfig.gc_GenCFlags0, CS0_SYSFONT ))
  1333.             MyFPrintf( MainSource, "\n\tif ( %sFont ) {\n\t\tCloseFont( %sFont );\n\t\t%sFont = NULL;\n\t}\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1334.     }
  1335.  
  1336.     MyFPrintf( MainSource, "\n\tif ( %sHandle ) {\n\t\tGTX_FreeHandle( %sHandle );\n\t\t%sHandle = NULL;\n\t}\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1337.  
  1338.     FPuts( MainSource, "}\n\n" );
  1339. }
  1340.  
  1341. /*
  1342.  *      Generate rendering routine.
  1343.  */
  1344. Local VOID GenRender( struct ProjectWindow *pw )
  1345. {
  1346.     struct BevelBox     *box;
  1347.     UWORD                offx, offy, bleft, btop;
  1348.  
  1349.     bleft = pw->pw_LeftBorder;
  1350.     btop  = pw->pw_TopBorder;
  1351.  
  1352.     offx = bleft;
  1353.     offy = btop;
  1354.  
  1355.     MyFPrintf( Protos, "extern VOID %sRender( void );\n", &pw->pw_Name[ 0 ] );
  1356.     MyFPrintf( MainSource, "VOID %sRender( void )\n{\n", &pw->pw_Name[ 0 ]  );
  1357.  
  1358.     if ( NSET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT )) {
  1359.         FPuts( MainSource, "\tUWORD\t\toffx, offy;\n\n" );
  1360.         if ( NSET( pw->pw_WindowFlags, WFLG_BACKDROP ))
  1361.             MyFPrintf( MainSource, "\toffx = %sWnd->BorderLeft;\n\toffy = %sWnd->BorderTop;\n\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1362.         else
  1363.             FPuts( MainSource, "\toffx = 0;\n\toffy = Scr->WBorTop + Scr->Font->ta_YSize + 1;\n\n" );
  1364.  
  1365.         if ( pw->pw_Boxes.bl_First->bb_Next ) {
  1366.             FPuts( MainSource, "\n" );
  1367.             for ( box = pw->pw_Boxes.bl_First; box->bb_Next; box = box->bb_Next ) {
  1368.                 MyFPrintf( MainSource, "\tmyDrawBevelBox( %sWnd->RPort, offx + %ld, offy + %ld, %ld, %ld, GT_VisualInfo, VisualInfo, ",
  1369.                                  &pw->pw_Name[ 0 ], box->bb_Left - bleft, box->bb_Top - btop, box->bb_Width, box->bb_Height );
  1370.                 if ( box->bb_Flags & BBF_RECESSED )
  1371.                     FPuts( MainSource, "GTBB_Recessed, TRUE, TAG_DONE );\n" );
  1372.                 else
  1373.                     FPuts( MainSource, "TAG_DONE );\n" );
  1374.                 if ( box->bb_Flags & BBF_DROPBOX ) {
  1375.                     MyFPrintf( MainSource, "\tmyDrawBevelBox( %sWnd->RPort, offx + %ld, offy + %ld, %ld, %ld, GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );\n",
  1376.                                      &pw->pw_Name[ 0 ], box->bb_Left - bleft + 4, box->bb_Top - btop + 2, box->bb_Width - 8, box->bb_Height - 4 );
  1377.                 }
  1378.             }
  1379.         }
  1380.         FPuts( MainSource, "}\n\n" );
  1381.     } else {
  1382.         MyFPrintf( MainSource, "\tComputeFont( %sWidth, %sHeight );\n\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1383.         if ( pw->pw_Boxes.bl_First->bb_Next ) {
  1384.             for ( box = pw->pw_Boxes.bl_First; box->bb_Next; box = box->bb_Next ) {
  1385.                 MyFPrintf( MainSource, "\tmyDrawBevelBox( %sWnd->RPort, OffX + ComputeX( %ld ),\n"\
  1386.                                  "\t\t\t\t\tOffY + ComputeY( %ld ),\n"\
  1387.                                  "\t\t\t\t\tComputeX( %ld ),\n"\
  1388.                                  "\t\t\t\t\tComputeY( %ld ),\n"\
  1389.                                  "\t\t\t\t\tGT_VisualInfo, VisualInfo, ",
  1390.                     &pw->pw_Name[ 0 ], box->bb_Left - offx, box->bb_Top - offy, box->bb_Width, box->bb_Height );
  1391.                 if ( box->bb_Flags & BBF_RECESSED )
  1392.                     FPuts( MainSource, "GTBB_Recessed, TRUE, TAG_DONE );\n" );
  1393.                 else
  1394.                     FPuts( MainSource, "TAG_DONE );\n" );
  1395.                 if ( box->bb_Flags & BBF_DROPBOX ) {
  1396.                     MyFPrintf( MainSource, "\tmyDrawBevelBox( %sWnd->RPort, OffX + ComputeX( %ld ),\n"\
  1397.                                      "\t\t\t\t\tOffY + ComputeY( %ld ),\n"\
  1398.                                      "\t\t\t\t\tComputeX( %ld ),\n"\
  1399.                                      "\t\t\t\t\tComputeY( %ld ),\n"\
  1400.                                      "\t\t\t\t\tGT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );\n",
  1401.                         &pw->pw_Name[ 0 ], box->bb_Left - offx + 4, box->bb_Top - offy + 2, box->bb_Width - 8, box->bb_Height - 4 );
  1402.                 }
  1403.             }
  1404.         }
  1405.         FPuts( MainSource, "}\n\n" );
  1406.     }
  1407. }
  1408.  
  1409. /*
  1410.  *      Source Generation.
  1411.  */
  1412. VOID Generate( void )
  1413. {
  1414.     struct ProjectWindow            *pw;
  1415.     UBYTE                            fname[ 32 ], *ptr;
  1416.  
  1417.     strcpy( &fname[ 0 ], &GuiInfo.gui_FontName[ 0 ] );
  1418.  
  1419.     if ( ptr = strrchr( &fname[ 0 ], '.' ))
  1420.         *ptr = 0;
  1421.  
  1422.     Print( STRING( MSG_XREF_STRINGS ));
  1423.  
  1424.     if ( BuiltDuplicates()) {
  1425.         if ( OpenFiles()) {
  1426.  
  1427.             Print( STRING( MSG_GENERATING_SOURCE ));
  1428.  
  1429.             MyFPrintf( MainSource, MainHeader, &SourceConfig.gc_GTConfig.gtc_UserName[ 0 ] );
  1430.             MyFPrintf( Header,     MainHeader, &SourceConfig.gc_GTConfig.gtc_UserName[ 0 ] );
  1431.             MyFPrintf( Protos,     MainHeader, &SourceConfig.gc_GTConfig.gtc_UserName[ 0 ] );
  1432.  
  1433.             DoConditionals();
  1434.  
  1435.             GenID();
  1436.             GenGlobals();
  1437.             if ( NSET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT )) GenTextAttr();
  1438.             WriteStrings();
  1439.             GenMenus();
  1440.             GenGArrays();
  1441.             GenGTags();
  1442.  
  1443.             GenLocal();
  1444.  
  1445.             for ( pw = Windows.wl_First; pw->pw_Next; pw = pw->pw_Next ) {
  1446.  
  1447.                 if ( pw->pw_Boxes.bl_First->bb_Next )
  1448.                     GenRender( pw );
  1449.  
  1450.                 GenHeader( pw );
  1451.  
  1452.                 if ( strlen( &pw->pw_WindowTitle[ 0 ] ))
  1453.                     MyFPrintf( MainSource, "\t%sWdt = ( UBYTE * )AppStrings[ MSG_STRING_%ld ].as_Str;\n\n", &pw->pw_Name[ 0 ], GetStringNumber( &Strings, &pw->pw_WindowTitle[ 0 ] ));
  1454.                 else
  1455.                     MyFPrintf( MainSource, "\t%sWdt = ( UBYTE * )NULL;\n\n", &pw->pw_Name[ 0 ] );
  1456.  
  1457.                 MyFPrintf( MainSource, "\tif ( ! ( %sHandle = GTX_GetHandleA( &HandleTags[ 0 ] )))\n\t\treturn( 10L );\n\n", &pw->pw_Name[ 0 ] );
  1458.  
  1459.                 if ( pw->pw_Gadgets.gl_First->en_Next ) {
  1460.                     MyFPrintf( MainSource, "\tif ( ! ( g = CreateContext( &%sGList )))\n\t\treturn( 1L );\n\n", &pw->pw_Name[ 0 ] );
  1461.                     GenGadgetInit( pw );
  1462.                 }
  1463.  
  1464.                 if ( pw->pw_Menus.ml_First->em_Next ) {
  1465.                     MyFPrintf( MainSource, "\tif ( ! LocDone[ %ld ] )\n\t\tFixMenus( %sNewMenu );\n\n", GTX_GetNodeNumber(( struct List * )&Windows, ( struct Node * )pw ), &pw->pw_Name[ 0 ] );
  1466.                     MyFPrintf( MainSource, "\tif ( ! ( %sMenus = CreateMenus( %sNewMenu, TAG_DONE )))\n\t\treturn( 3L );\n\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1467.                     MyFPrintf( MainSource, "\tLayoutMenus( %sMenus, VisualInfo, GTMN_NewLookMenus, TRUE, ", &pw->pw_Name[ 0 ] );
  1468.                     if ( NSET( SourceConfig.gc_GTConfig.gtc_ConfigFlags0, GC0_FONTADAPT ))
  1469.                         MyFPrintf( MainSource, "GTMN_TextAttr, &%s%ld, TAG_DONE );\n\n", fname, GuiInfo.gui_Font.ta_YSize );
  1470.                     else
  1471.                         MyFPrintf( MainSource, "TAG_DONE );\n\n" );
  1472.                 }
  1473.  
  1474.                 MyFPrintf( MainSource, "\tLocDone[ %ld ] = TRUE;\n\n", GTX_GetNodeNumber(( struct List * )&Windows, ( struct Node * )pw ));
  1475.  
  1476.                 if ( NSET( pw->pw_WindowFlags, WFLG_SIZEGADGET )) {
  1477.                     if ( SET( pw->pw_TagFlags, WDF_ZOOM )) {
  1478.                         MyFPrintf( MainSource, "\t%sZoom[0] = %sLeft;\n\t%sZoom[1] = %sTop;\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ],  &pw->pw_Name[ 0 ] );
  1479.                         goto rZoom;
  1480.                     } else if ( SET( pw->pw_TagFlags, WDF_DEFAULTZOOM )) {
  1481.                         MyFPrintf( MainSource, "\t\t%sZoom[0] = %sZoom[1] = 0;\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1482.                         rZoom:
  1483.                         MyFPrintf( MainSource, "\tif ( %sWdt )\n", &pw->pw_Name[ 0 ] );
  1484.                         MyFPrintf( MainSource, "\t\t%sZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)%sWdt, strlen((char *)%sWdt )) + 80;\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1485.                         MyFPrintf( MainSource, "\telse\n\t\t%sZoom[2]  = 80L;\n", &pw->pw_Name[ 0 ] );
  1486.                         MyFPrintf( MainSource, "\t\t%sZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;\n\n", &pw->pw_Name[ 0 ] );
  1487.                     }
  1488.                 }
  1489.  
  1490.                 GenWindow( pw );
  1491.  
  1492.                 if ( pw->pw_Menus.ml_First->em_Next )
  1493.                     MyFPrintf( MainSource, "\tSetMenuStrip( %sWnd, %sMenus );\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1494.  
  1495.                 MyFPrintf( MainSource, "\tBackFill( %sWnd );\n\n", &pw->pw_Name[ 0 ] );
  1496.  
  1497.                 if ( pw->pw_Boxes.bl_First->bb_Next )
  1498.                     MyFPrintf( MainSource, "\t%sRender();\n\n", &pw->pw_Name[ 0 ] );
  1499.  
  1500.                 if ( pw->pw_Gadgets.gl_First->en_Next )
  1501.                     MyFPrintf( MainSource, "\tAddGList( %sWnd, %sGList, -1, -1, NULL );\n\tRefreshGList( %sGList, %sWnd, NULL, -1 );\n\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1502.  
  1503.                 MyFPrintf( MainSource, "\tGTX_RefreshWindow( %sHandle, %sWnd, NULL );\n\n", &pw->pw_Name[ 0 ], &pw->pw_Name[ 0 ] );
  1504.  
  1505.                 FPuts( MainSource, "\treturn( 0 );\n}\n\n" );
  1506.  
  1507.                 GenCleanup( pw );
  1508.             }
  1509.  
  1510.             FPuts( Header, "#endif" );
  1511.             FPuts( Protos, "#endif" );
  1512.  
  1513.             GenCD();
  1514.         } else
  1515.             Print( STRING( MSG_SOURCE_FILE_ERROR ));
  1516.         CloseFiles();
  1517.     }
  1518.     RunCatComp();
  1519. }
  1520.