home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d8xx / d891 / skew.lha / Skew / source.lha / source / skew3.c < prev   
C/C++ Source or Header  |  1993-07-04  |  21KB  |  733 lines

  1.  
  2. /*
  3.  *      skew3.c     --      stuff needed for writing output file
  4.  *
  5.  */
  6.  
  7. #include <dos/dos.h>
  8.  
  9. #include "skew.h"
  10.  
  11. /* flags related to gadgets & output file */
  12. extern LONG Flag1, Flag2A, Flag2B, Flag3;
  13.  
  14. /* flags for cycle gadgets on display #2 (zero indexing) */
  15. extern LONG
  16.         WaitingMode_FLAG, Variables_FLAG, Comments_FLAG, FillIns_FLAG,
  17.         WaitingMode_START, Variables_START, Comments_START, FillIns_START,
  18.         TopArgs_FLAG, TopReturn_FLAG, TestVarScope_FLAG;
  19.  
  20. /* name for top-level function, as well as prefix & suffix for the rest */
  21. extern char *IDCMP_WIN_BUF, *TOP_LEVEL_BUF, *PREFIX_BUF, *SUFFIX_BUF,
  22.             *TEST_VAR_BUF;
  23.  
  24. BOOL Writing_Done = FALSE;  /* TRUE when work was saved and no gadget hit */
  25.  
  26.  
  27. /*  we hope AmigaDOS will handle error checking for us */
  28. __regargs VOID GenerateCode( BPTR );
  29.  
  30. static VOID WriteHeader( VOID );
  31. static VOID WriteGlobalDefs( VOID );
  32. static VOID WriteLocalDefs( VOID );
  33. static VOID WriteProtos( VOID );
  34. static VOID WriteTopLevelF( VOID );
  35. static VOID WriteCases( VOID );
  36. static VOID WriteFSkeletons( VOID );
  37. static VOID WriteFillIn( VOID );
  38. static VOID Pad( VOID );
  39.  
  40. static VOID WriteRefreshTopL( VOID );
  41. static VOID lowWriteRefreshTopL( VOID );
  42. static VOID WriteRefreshSkel( VOID );
  43. static VOID lowWriteRefreshSkel( VOID );
  44.  
  45. __regargs static VOID lowWriteProtos( BOOL, LONG, UBYTE * );
  46. __regargs static VOID lowWriteCases( BOOL, LONG, LONG, UBYTE *, UBYTE * );
  47. __regargs static VOID lowWriteFSkeletons( BOOL, LONG, UBYTE * );
  48.  
  49.  
  50. VOID
  51. GenerateCode( BPTR fh )
  52. {
  53.     SelectOutput( fh );
  54.  
  55.     if ( Comments_FLAG != NO_COMMENTS )
  56.         WriteHeader();
  57.     else
  58.         PutStr( "\n" );                 /* start one line lower */
  59.  
  60.     if ( TestVarScope_FLAG == TestVar_GLOBAL ) {
  61.             PutStr( "BOOL " );
  62.             PutStr( TEST_VAR_BUF );
  63.             PutStr( " = FALSE;\n" );
  64.     }
  65.  
  66.     if ( Variables_FLAG == GLOBAL )
  67.         WriteGlobalDefs();
  68.  
  69.     if ( Flag3 & Prototypes_FLAG )
  70.         WriteProtos();
  71.  
  72.     WriteTopLevelF();
  73.  
  74.     if ( Flag3 & Skeletons_FLAG )
  75.         WriteFSkeletons();
  76.  
  77.     Writing_Done = TRUE;
  78. }
  79.  
  80.  
  81. VOID
  82. WriteHeader()
  83. {
  84.       PutStr( "/*\n *    Skeleton generated by SKEleton Writer v1.28    \n */\n\n" );
  85. }
  86.  
  87.  
  88. VOID
  89. WriteGlobalDefs()
  90. {
  91.     PutStr( "\n" );
  92.  
  93.     if ( ( Flag1 & CLASS_FLAG ) | Flag2A | Flag2B )
  94.         PutStr( "ULONG  Class;\n" );
  95.  
  96.     if ( Flag1 & CODE_FLAG && Flag1 & QUALIFIER_FLAG )
  97.         PutStr( "USHORT Code, Qualifier;\n" );
  98.     else if ( Flag1 & CODE_FLAG )
  99.         PutStr( "USHORT Code\n;" );
  100.     else if ( Flag1 & QUALIFIER_FLAG )
  101.         PutStr( "USHORT Qualifier;\n" );
  102.  
  103.     if ( Flag1 & IADDRESS_FLAG )
  104.         PutStr( "APTR   IAddress;\n" );
  105.  
  106.     if ( Flag1 & MOUSEX_FLAG && Flag1 & MOUSEY_FLAG )
  107.         PutStr( "SHORT  MouseX, MouseY;\n" );
  108.     else if ( Flag1 & MOUSEX_FLAG )
  109.         PutStr( "SHORT  MouseX;\n" );
  110.     else if ( Flag1 & MOUSEY_FLAG )
  111.         PutStr( "SHORT  MouseY;\n" );
  112.  
  113.     if ( Flag1 & SECONDS_FLAG && Flag1 & MICROS_FLAG )
  114.         PutStr( "ULONG  Seconds, Micros;\n" );
  115.     else if ( Flag1 & SECONDS_FLAG )
  116.         PutStr( "ULONG  Seconds;\n" );
  117.     else if ( Flag1 & MICROS_FLAG )
  118.         PutStr( "ULONG  Micros;\n" );
  119. }
  120.  
  121.  
  122. VOID
  123. WriteLocalDefs()
  124. {
  125.     PutStr( "\n" );
  126.  
  127.  
  128.     if ( ( Flag1 & CLASS_FLAG ) | Flag2A | Flag2B )
  129.         PutStr( "    ULONG  class;\n" );
  130.  
  131.     if ( Flag1 & CODE_FLAG && Flag1 & QUALIFIER_FLAG )
  132.         PutStr( "    USHORT code, qualifier;\n" );
  133.     else if ( Flag1 & CODE_FLAG )
  134.         PutStr( "    USHORT code;" );
  135.     else if ( Flag1 & QUALIFIER_FLAG )
  136.         PutStr( "    USHORT qualifier;\n" );
  137.  
  138.     if ( Flag1 & IADDRESS_FLAG )
  139.         PutStr( "    APTR   iaddress;\n" );
  140.  
  141.     if ( Flag1 & MOUSEX_FLAG && Flag1 & MOUSEY_FLAG )
  142.         PutStr( "    SHORT  mouse_x, mouse_y;\n" );
  143.     else if ( Flag1 & MOUSEX_FLAG )
  144.         PutStr( "    SHORT  mouse_x;\n" );
  145.     else if ( Flag1 & MOUSEY_FLAG )
  146.         PutStr( "    SHORT  mouse_y;\n" );
  147.  
  148.     if ( Flag1 & SECONDS_FLAG && Flag1 & MICROS_FLAG )
  149.         PutStr( "    ULONG  seconds, micros;\n" );
  150.     else if ( Flag1 & SECONDS_FLAG )
  151.         PutStr( "    ULONG  seconds;\n" );
  152.     else if ( Flag1 & MICROS_FLAG )
  153.         PutStr( "    ULONG  micros;\n" );
  154. }
  155.  
  156.  
  157. VOID
  158. WriteProtos()
  159. {
  160.     PutStr( "\n" );
  161.  
  162.     if ( TopArgs_FLAG ) {
  163.         if ( TopReturn_FLAG )
  164.             VPrintf( "LONG %s( struct Window * );\n\n", (LONG *)&TOP_LEVEL_BUF );
  165.         else
  166.             VPrintf( "VOID %s( struct Window * );\n\n", (LONG *)&TOP_LEVEL_BUF );
  167.     }
  168.     else {
  169.         if ( TopReturn_FLAG )
  170.             VPrintf( "LONG %s( VOID );\n\n", (LONG *)&TOP_LEVEL_BUF );
  171.         else
  172.             VPrintf( "VOID %s( VOID );\n\n", (LONG *)&TOP_LEVEL_BUF );
  173.     }
  174.  
  175.     /* still lots of brute force, but less... */
  176.  
  177.     /* Flag2A */
  178.     lowWriteProtos( TRUE,    MOUSEBUTTONS_F_FLAG,    "MouseButtons" );
  179.     lowWriteProtos( TRUE,    MOUSEMOVE_F_FLAG,        "MouseMove" );
  180.     lowWriteProtos( TRUE,    GADGETDOWN_F_FLAG,        "GadgetDown" );
  181.     lowWriteProtos( TRUE,    GADGETUP_F_FLAG,        "GadgetUp" );
  182.     lowWriteProtos( TRUE,    CLOSEWINDOW_F_FLAG,        "CloseWindow" );
  183.     lowWriteProtos( TRUE,    MENUPICK_F_FLAG,        "MenuPick" );
  184.     lowWriteProtos( TRUE,    MENUVERIFY_F_FLAG,        "MenuVerify" );
  185.     lowWriteProtos( TRUE,    MENUHELP_F_FLAG,        "MenuHelp" );
  186.     lowWriteProtos( TRUE,    RAWKEY_F_FLAG,            "RawKey" );
  187.     lowWriteProtos( TRUE,    VANILLAKEY_F_FLAG,        "VanillaKey" );
  188.     lowWriteProtos( TRUE,    REQSET_F_FLAG,             "ReqSet" );
  189.     lowWriteProtos( TRUE,    REQCLEAR_F_FLAG,         "ReqClear" );
  190.     lowWriteProtos( TRUE,    REQVERIFY_F_FLAG,         "ReqVerify" );
  191.  
  192.     /* Flag2B */
  193.     lowWriteProtos( FALSE,    NEWSIZE_F_FLAG,         "NewSize" );
  194.     lowWriteProtos( FALSE,    SIZEVERIFY_F_FLAG,         "SizeVerify" );
  195.     lowWriteProtos( FALSE,    ACTIVEWINDOW_F_FLAG,     "ActiveWindow" );
  196.     lowWriteProtos( FALSE,    INACTIVEWINDOW_F_FLAG,     "InactiveWindow" );
  197.     lowWriteProtos( FALSE,    CHANGEWINDOW_F_FLAG,     "ChangeWindow" );
  198.     lowWriteProtos( FALSE,    REFRESHWINDOW_F_FLAG,     "RefreshWindow" );
  199.     lowWriteProtos( FALSE,    DISKINSERTED_F_FLAG,     "DiskInserted" );
  200.     lowWriteProtos( FALSE,    DISKREMOVED_F_FLAG,     "DiskRemoved" );
  201.     lowWriteProtos( FALSE,    NEWPREFS_F_FLAG,         "NewPrefs" );
  202.     lowWriteProtos( FALSE,    INTUITICKS_F_FLAG,         "IntuiTicks" );
  203.     lowWriteProtos( FALSE,    IDCMPUPDATE_F_FLAG,     "IDCMPUpdate" );
  204.     lowWriteProtos( FALSE,    LONELYMESSAGE_F_FLAG,    "LonelyMessage" );
  205. }
  206.  
  207.  
  208. VOID
  209. lowWriteProtos( BOOL fA, LONG flag, UBYTE *name )
  210. {
  211.     LONG our_flag = ( fA ) ? Flag2A : Flag2B;
  212.  
  213.     if ( our_flag & flag ) {
  214.         if ( Variables_FLAG == LOCAL ) {
  215.             WriteFillIn();
  216.             Pad();
  217.             PutStr( PREFIX_BUF );
  218.             PutStr( name );
  219.             VPrintf( "%s(", (LONG *)&SUFFIX_BUF );
  220.             Pad();
  221.             WriteFillIn();
  222.             Pad();
  223.             PutStr( ");\n" );
  224.         }
  225.         else {
  226.             VPrintf( "VOID %s", (LONG *)&PREFIX_BUF );
  227.             PutStr( name );
  228.             VPrintf( "%s( VOID );\n", (LONG *)&SUFFIX_BUF );
  229.         }
  230.     }
  231. }
  232.  
  233.  
  234.  
  235. VOID
  236. WriteTopLevelF()
  237. {
  238.     if ( TopArgs_FLAG ) {
  239.         if ( TopReturn_FLAG )
  240.             VPrintf( "\n\nLONG %s( struct Window *wnd )\n{", (LONG *)&TOP_LEVEL_BUF );
  241.         else
  242.             VPrintf( "\n\nVOID %s( struct Window *wnd )\n{", (LONG *)&TOP_LEVEL_BUF );
  243.     }
  244.     else {
  245.         if ( TopReturn_FLAG )
  246.             VPrintf( "\n\nLONG %s()\n{", (LONG *)&TOP_LEVEL_BUF );
  247.         else
  248.             VPrintf( "\n\nVOID %s()\n{", (LONG *)&TOP_LEVEL_BUF );
  249.     }
  250.  
  251.     PutStr( "\n    struct IntuiMessage *msg;\n" );
  252.  
  253.     if ( Variables_FLAG == LOCAL )
  254.         WriteLocalDefs();
  255.  
  256.     PutStr( "\n" );
  257.  
  258.     if ( TestVarScope_FLAG == TestVar_LOCAL ) {
  259.             PutStr( "    BOOL   " );
  260.             PutStr( TEST_VAR_BUF );
  261.             PutStr( " = FALSE;\n\n" );
  262.     }
  263.  
  264.     PutStr( "    while ( ! " );
  265.     PutStr( TEST_VAR_BUF );
  266.     PutStr( " ) {\n" );
  267.  
  268.     if ( WaitingMode_FLAG == PASSIVE ) {
  269.         if ( TopArgs_FLAG )
  270.             PutStr( "        WaitPort( wnd->UserPort );\n" );
  271.         else
  272.               VPrintf( "        WaitPort( %s->UserPort );\n",
  273.                                                     (LONG *)&IDCMP_WIN_BUF );
  274.     }
  275.     else {
  276.         PutStr( "\n        " );
  277.         WriteFillIn();
  278.  
  279.         if ( Comments_FLAG == VERBOSE_COMMENTS ) {
  280.             PutStr( "/* do your thing while you're looping */\n\n" );
  281.         }
  282.         else {
  283.             PutStr( "\n\n" );
  284.         }
  285.     }
  286.  
  287.     if ( Flag1 & gadtools_FLAG ) {
  288.         if ( TopArgs_FLAG ) {
  289.             PutStr( "        while ( msg = (struct IntuiMessage *)GT_GetIMsg( wnd->UserPort ) ) {\n" );
  290.         }
  291.         else {
  292.               VPrintf( "        while ( msg = (struct IntuiMessage *)GT_GetIMsg( %s->UserPort ) ) {\n",
  293.                     (LONG *)&IDCMP_WIN_BUF );
  294.         }
  295.     }
  296.     else {
  297.         if ( TopArgs_FLAG ) {
  298.             PutStr( "        while ( msg = (struct IntuiMessage *)GetMsg( wnd->UserPort ) ) {\n" );
  299.         }
  300.         else {
  301.               VPrintf( "        while ( msg = (struct IntuiMessage *)GetMsg( %s->UserPort ) ) {\n",
  302.                     (LONG *)&IDCMP_WIN_BUF );
  303.         }
  304.     }
  305.  
  306.     PutStr( "\n" );
  307.  
  308.     /* assignements */
  309.     if ( ( Flag1 & CLASS_FLAG ) | Flag2A | Flag2B ) {
  310.         if ( Variables_FLAG == LOCAL )
  311.             PutStr( "            class     =  msg->Class;\n" );
  312.         else
  313.             PutStr( "            Class     =  msg->Class;\n" );
  314.     }
  315.  
  316.     if ( Flag1 & CODE_FLAG ) {
  317.         if ( Variables_FLAG == LOCAL )
  318.             PutStr( "            code      =  msg->Code;\n" );
  319.         else
  320.             PutStr( "            Code      =  msg->Code;\n" );
  321.     }
  322.  
  323.     if ( Flag1 & QUALIFIER_FLAG ) {
  324.         if ( Variables_FLAG == LOCAL )
  325.             PutStr( "            qualifier =  msg->Qualifier;\n" );
  326.         else
  327.             PutStr( "            Qualifier =  msg->Qualifier;\n" );
  328.     }
  329.  
  330.     if ( Flag1 & IADDRESS_FLAG ) {
  331.         if ( Variables_FLAG == LOCAL )
  332.             PutStr( "            iaddress  =  msg->IAddress;\n" );
  333.         else
  334.             PutStr( "            IAddress  =  msg->IAddress;\n" );
  335.     }
  336.  
  337.     if ( Flag1 & MOUSEX_FLAG ) {
  338.         if ( Variables_FLAG == LOCAL )
  339.             PutStr( "            mouse_x   =  msg->MouseX;\n" );
  340.         else
  341.             PutStr( "            MouseX    =  msg->MouseX;\n" );
  342.     }
  343.  
  344.     if ( Flag1 & MOUSEY_FLAG ) {
  345.         if ( Variables_FLAG == LOCAL )
  346.             PutStr( "            mouse_y   =  msg->MouseY;\n" );
  347.         else
  348.             PutStr( "            MouseY    =  msg->MouseY;\n" );
  349.     }
  350.  
  351.     if ( Flag1 & SECONDS_FLAG ) {
  352.         if ( Variables_FLAG == LOCAL )
  353.             PutStr( "            seconds   =  msg->Seconds;\n" );
  354.         else
  355.             PutStr( "            Seconds   =  msg->Seconds;\n" );
  356.     }
  357.  
  358.     if ( Flag1 & MICROS_FLAG ) {
  359.         if ( Variables_FLAG == LOCAL )
  360.             PutStr( "            micros    =  msg->Micros;\n" );
  361.         else
  362.             PutStr( "            Micros    =  msg->Micros;\n" );
  363.     }
  364.  
  365.     PutStr( "\n" );
  366.  
  367.     /* we are replying the message... */
  368.     if ( Flag1 & gadtools_FLAG )
  369.         PutStr( "            GT_ReplyIMsg( msg );\n" );
  370.     else
  371.         PutStr( "            ReplyMsg( msg );\n" );
  372.  
  373.     /* switch */
  374.     if ( Variables_FLAG == LOCAL ) {
  375.         PutStr( "\n            switch ( class ) {\n" );
  376.     }
  377.     else {
  378.         PutStr( "\n            switch ( Class ) {\n" );
  379.     }
  380.  
  381.     if ( !Flag2A && !Flag2B )
  382.         PutStr( "\n\n" );
  383.     else
  384.         WriteCases();
  385.  
  386.     PutStr( "                default:\n" );
  387.     PutStr( "                    " );
  388.     WriteFillIn();
  389.     PutStr( "\n                    break;\n" );
  390.     PutStr( "            }\n        }\n    }\n" );
  391.  
  392.     if ( TopReturn_FLAG ) {
  393.         PutStr( "\n    return( " );
  394.         WriteFillIn();
  395.         PutStr( " );\n" );
  396.     }
  397.  
  398.     PutStr( "}\n" );
  399. }
  400.  
  401.  
  402. VOID
  403. WriteCases()
  404. {
  405.     /* Flag2A */
  406.     lowWriteCases( TRUE,    MOUSEBUTTONS_FLAG,    MOUSEBUTTONS_F_FLAG,        "MouseButtons",      "IDCMP_MOUSEBUTTONS" );
  407.     lowWriteCases( TRUE,    MOUSEMOVE_FLAG,     MOUSEMOVE_F_FLAG,             "MouseMove",         "IDCMP_MOUSEMOVE" );
  408.     lowWriteCases( TRUE,    GADGETDOWN_FLAG,     GADGETDOWN_F_FLAG,            "GadgetDown",        "IDCMP_GADGETDOWN" );
  409.     lowWriteCases( TRUE,    GADGETUP_FLAG,        GADGETUP_F_FLAG,            "GadgetUp",          "IDCMP_GADGETUP" );
  410.     lowWriteCases( TRUE,    CLOSEWINDOW_FLAG,    CLOSEWINDOW_F_FLAG,            "CloseWindow",       "IDCMP_CLOSEWINDOW" );
  411.     lowWriteCases( TRUE,    MENUPICK_FLAG,        MENUPICK_F_FLAG,            "MenuPick",          "IDCMP_MENUPICK" );
  412.     lowWriteCases( TRUE,    MENUVERIFY_FLAG,    MENUVERIFY_F_FLAG,            "MenuVerify",        "IDCMP_MENUVERIFY" );
  413.     lowWriteCases( TRUE,    MENUHELP_FLAG,        MENUHELP_F_FLAG,            "MenuHelp",          "IDCMP_MENUHELP" );
  414.     lowWriteCases( TRUE,    RAWKEY_FLAG,        RAWKEY_F_FLAG,                "RawKey",            "IDCMP_RAWKEY" );
  415.     lowWriteCases( TRUE,    VANILLAKEY_FLAG,    VANILLAKEY_F_FLAG,            "VanillaKey",        "IDCMP_VANILLAKEY" );
  416.     lowWriteCases( TRUE,    REQSET_FLAG,        REQSET_F_FLAG,                "ReqSet",            "IDCMP_REQSET" );
  417.     lowWriteCases( TRUE,    REQCLEAR_FLAG,         REQCLEAR_F_FLAG,            "ReqClear",          "IDCMP_REQCLEAR" );
  418.     lowWriteCases( TRUE,    REQVERIFY_FLAG,     REQVERIFY_F_FLAG,            "ReqVerify",         "IDCMP_REQVERIFY" );
  419.  
  420.     /* Flag2B */
  421.     lowWriteCases( FALSE,    NEWSIZE_FLAG,        NEWSIZE_F_FLAG,                "NewSize",           "IDCMP_NEWSIZE" );
  422.     lowWriteCases( FALSE,    SIZEVERIFY_FLAG,     SIZEVERIFY_F_FLAG,               "SizeVerify",        "IDCMP_SIZEVERIFY" );
  423.     lowWriteCases( FALSE,    ACTIVEWINDOW_FLAG,     ACTIVEWINDOW_F_FLAG,        "ActiveWindow",      "IDCMP_ACTIVEWINDOW" );
  424.     lowWriteCases( FALSE,    INACTIVEWINDOW_FLAG,    INACTIVEWINDOW_F_FLAG,    "InactiveWindow",    "IDCMP_INACTIVEWINDOW" );
  425.     lowWriteCases( FALSE,    CHANGEWINDOW_FLAG,     CHANGEWINDOW_F_FLAG,        "ChangeWindow",      "IDCMP_CHANGEWINDOW" );
  426.  
  427.     /* we refresh window automatically if gadtools are used! */
  428.     if ( Flag1 & gadtools_FLAG || Flag2B & REFRESHWINDOW_FLAG || Flag2B & REFRESHWINDOW_F_FLAG )
  429.         WriteRefreshTopL();
  430.  
  431.     lowWriteCases( FALSE,    DISKINSERTED_FLAG,     DISKINSERTED_F_FLAG,        "DiskInserted",      "IDCMP_DISKINSERTED" );
  432.     lowWriteCases( FALSE,    DISKREMOVED_FLAG,     DISKREMOVED_F_FLAG,            "DiskRemoved",       "IDCMP_DISKREMOVED" );
  433.     lowWriteCases( FALSE,    NEWPREFS_FLAG,         NEWPREFS_F_FLAG,            "NewPrefs",          "IDCMP_NEWPREFS" );
  434.     lowWriteCases( FALSE,    INTUITICKS_FLAG,     INTUITICKS_F_FLAG,               "IntuiTicks",        "IDCMP_INTUITICKS" );
  435.     lowWriteCases( FALSE,    IDCMPUPDATE_FLAG,     IDCMPUPDATE_F_FLAG,            "IDCMPUpdate",       "IDCMP_IDCMPUPDATE" );
  436.     lowWriteCases( FALSE,    LONELYMESSAGE_FLAG,    LONELYMESSAGE_F_FLAG,           "LonelyMessage",     "IDCMP_LONELYMESSAGE" );
  437. }
  438.  
  439.  
  440. VOID
  441. lowWriteCases(     BOOL fA, LONG flag, LONG f_flag,
  442.                 UBYTE *low_name, UBYTE *up_name )
  443. {
  444.     LONG our_flag = ( fA ) ? Flag2A : Flag2B;
  445.  
  446.     if ( our_flag & flag || our_flag & f_flag ) {
  447.       PutStr( "                case " );
  448.       PutStr( up_name );
  449.       PutStr( ":\n" );
  450.         if ( our_flag & f_flag ) {
  451.               PutStr( "                    " );
  452.             PutStr( (UBYTE *)PREFIX_BUF );
  453.             PutStr( low_name );
  454.             VPrintf( "%s(", (LONG *)&SUFFIX_BUF );
  455.             Pad();
  456.             if ( Variables_FLAG == LOCAL )
  457.                 WriteFillIn();
  458.             Pad();
  459.             PutStr( ");\n" );
  460.         }
  461.         else {
  462.             PutStr( "                    " );
  463.             WriteFillIn();
  464.             PutStr( "\n" );
  465.         }
  466.         PutStr( "                    break;\n" );
  467.     }
  468. }
  469.  
  470.  
  471. VOID
  472. WriteRefreshTopL()
  473. {
  474.     PutStr( "                case " );
  475.     PutStr( "IDCMP_REFRESHWINDOW" );
  476.     PutStr( ":\n" );
  477.     if ( Flag2B & REFRESHWINDOW_F_FLAG ) {
  478.          PutStr( "                    " );
  479.         PutStr( (UBYTE *)PREFIX_BUF );
  480.         PutStr( "RefreshWindow" );
  481.         VPrintf( "%s(", (LONG *)&SUFFIX_BUF );
  482.         Pad();
  483.         if ( Variables_FLAG == LOCAL )
  484.             WriteFillIn();
  485.         Pad();
  486.         PutStr( ");\n" );
  487.     }
  488.     else {
  489.         PutStr( "                    " );
  490.             lowWriteRefreshTopL();
  491.             PutStr( "\n" );
  492.     }
  493.     PutStr( "                    break;\n" );
  494. }
  495.  
  496.  
  497. VOID
  498. lowWriteRefreshTopL()
  499. {
  500.     if ( Flag1 & gadtools_FLAG ) {
  501.  
  502.         /* O.K. -- the guy explicitly asked for refreshing... */
  503.         if (Flag2B & REFRESHWINDOW_FLAG || Flag2B & REFRESHWINDOW_F_FLAG ) {
  504.             if ( TopArgs_FLAG ) {
  505.                 PutStr( "GT_BeginRefresh( wnd );\n\n" );
  506.                 if ( Comments_FLAG == VERBOSE_COMMENTS )
  507.                     PutStr( "                    /* own rendering (if needed) here */\n\n" );
  508.                 PutStr( "                    GT_EndRefresh( wnd, TRUE );" );
  509.             }
  510.             else {
  511.                 VPrintf( "GT_BeginRefresh( %s );\n\n", (LONG *)&IDCMP_WIN_BUF );
  512.                 if ( Comments_FLAG == VERBOSE_COMMENTS ) {
  513.                     PutStr( "                    /* own rendering (if needed) here */\n\n" );
  514.                 }
  515.                 VPrintf( "                    GT_EndRefresh( %s, TRUE );", (LONG *)&IDCMP_WIN_BUF );
  516.             }
  517.         }
  518.  
  519.         /* he gets refreshing AGINST his will! */
  520.         else {
  521.             if ( TopArgs_FLAG ) {
  522.                 PutStr( "GT_BeginRefresh( wnd );" );
  523.                 if ( Comments_FLAG != NO_COMMENTS )
  524.                     PutStr( "    /* NECESSARY with gadtools! */" );
  525.                   PutStr( "\n                    GT_EndRefresh( wnd, TRUE );" );
  526.             }
  527.             else {
  528.                 VPrintf( "GT_BeginRefresh( %s );", (LONG *)&IDCMP_WIN_BUF );
  529.                 if ( Comments_FLAG != NO_COMMENTS )
  530.                     PutStr( "    /* NECESSARY with gadtools! */" );
  531.                 VPrintf( "\n                    GT_EndRefresh( %s, TRUE );", (LONG *)&IDCMP_WIN_BUF );
  532.             }
  533.         }
  534.     }
  535.  
  536.     /* he says NO GADTOOLS required -- if so -- no AI needed either */
  537.     else {
  538.         if ( TopArgs_FLAG ) {
  539.             PutStr( "BeginRefresh( wnd );\n\n" );
  540.             if ( Comments_FLAG == VERBOSE_COMMENTS ) {
  541.                 PutStr( "                    /* own rendering (if needed) here */\n\n" );
  542.             }
  543.             PutStr( "                    EndRefresh( wnd, TRUE );" );
  544.         }
  545.         else {
  546.             VPrintf( "BeginRefresh( %s );\n\n", (LONG *)&IDCMP_WIN_BUF );
  547.             if ( Comments_FLAG == VERBOSE_COMMENTS ) {
  548.                 PutStr( "                    /* own rendering (if needed) here */\n\n" );
  549.             }
  550.             VPrintf( "                    EndRefresh( %s, TRUE );", (LONG *)&IDCMP_WIN_BUF );
  551.         }
  552.     }
  553. }
  554.  
  555.  
  556. VOID
  557. WriteFSkeletons()
  558. {
  559.     PutStr( "\n\n" );
  560.  
  561.     /* still lots of raw force; perhaps should use arrays,
  562.     ** but in fact this ain't bad...
  563.     */
  564.  
  565.     /* Flag2A */
  566.     lowWriteFSkeletons( TRUE,    MOUSEBUTTONS_F_FLAG,    "MouseButtons" );
  567.     lowWriteFSkeletons( TRUE,    MOUSEMOVE_F_FLAG,        "MouseMove" );
  568.     lowWriteFSkeletons( TRUE,    GADGETDOWN_F_FLAG,        "GadgetDown" );
  569.     lowWriteFSkeletons( TRUE,    GADGETUP_F_FLAG,        "GadgetUp" );
  570.     lowWriteFSkeletons( TRUE,    CLOSEWINDOW_F_FLAG,        "CloseWindow" );
  571.     lowWriteFSkeletons( TRUE,    MENUPICK_F_FLAG,        "MenuPick" );
  572.     lowWriteFSkeletons( TRUE,    MENUVERIFY_F_FLAG,        "MenuVerify" );
  573.     lowWriteFSkeletons( TRUE,    MENUHELP_F_FLAG,        "MenuHelp" );
  574.     lowWriteFSkeletons( TRUE,    RAWKEY_F_FLAG,            "RawKey" );
  575.     lowWriteFSkeletons( TRUE,    VANILLAKEY_F_FLAG,        "VanillaKey" );
  576.     lowWriteFSkeletons( TRUE,    REQSET_F_FLAG,             "ReqSet" );
  577.     lowWriteFSkeletons( TRUE,    REQCLEAR_F_FLAG,         "ReqClear" );
  578.     lowWriteFSkeletons( TRUE,    REQVERIFY_F_FLAG,         "ReqVerify" );
  579.  
  580.     /* Flag2B */
  581.     lowWriteFSkeletons( FALSE,    NEWSIZE_F_FLAG,         "NewSize" );
  582.     lowWriteFSkeletons( FALSE,    SIZEVERIFY_F_FLAG,         "SizeVerify" );
  583.     lowWriteFSkeletons( FALSE,    ACTIVEWINDOW_F_FLAG,     "ActiveWindow" );
  584.     lowWriteFSkeletons( FALSE,    INACTIVEWINDOW_F_FLAG,     "InactiveWindow" );
  585.     lowWriteFSkeletons( FALSE,    CHANGEWINDOW_F_FLAG,     "ChangeWindow" );
  586.  
  587.     if ( Flag2B & REFRESHWINDOW_F_FLAG )
  588.         WriteRefreshSkel();
  589.  
  590.     lowWriteFSkeletons( FALSE,    DISKINSERTED_F_FLAG,     "DiskInserted" );
  591.     lowWriteFSkeletons( FALSE,    DISKREMOVED_F_FLAG,     "DiskRemoved" );
  592.     lowWriteFSkeletons( FALSE,    NEWPREFS_F_FLAG,         "NewPrefs" );
  593.     lowWriteFSkeletons( FALSE,    INTUITICKS_F_FLAG,         "IntuiTicks" );
  594.     lowWriteFSkeletons( FALSE,    IDCMPUPDATE_F_FLAG,     "IDCMPUpdate" );
  595.     lowWriteFSkeletons( FALSE,    LONELYMESSAGE_F_FLAG,    "LonelyMessage" );
  596. }
  597.  
  598.  
  599.  
  600. VOID
  601. lowWriteFSkeletons( BOOL fA, LONG flag, UBYTE *name )
  602. {
  603.     LONG our_flag = ( fA ) ? Flag2A : Flag2B;
  604.  
  605.     if ( our_flag & flag ) {
  606.         if ( Variables_FLAG == LOCAL ) {
  607.             WriteFillIn();
  608.             Pad();
  609.             PutStr( (UBYTE *)PREFIX_BUF );
  610.             PutStr( name );
  611.             VPrintf( "%s(", (LONG *)&SUFFIX_BUF );
  612.             Pad();
  613.             WriteFillIn();
  614.             Pad();
  615.             PutStr( ")\n{\n    " );
  616.             WriteFillIn();
  617.             PutStr( "\n}\n\n" );
  618.         }
  619.         else {
  620.             PutStr( "\nVOID " );
  621.             PutStr( (UBYTE *)PREFIX_BUF );
  622.             PutStr( name );
  623.             VPrintf( "%s() \n{\n    ", (LONG *)&SUFFIX_BUF );
  624.             WriteFillIn();
  625.             PutStr( "\n}\n\n" );
  626.         }
  627.     }
  628. }
  629.  
  630.  
  631. VOID
  632. WriteRefreshSkel()
  633. {
  634.     if ( Variables_FLAG == LOCAL ) {
  635.         WriteFillIn();
  636.         Pad();
  637.         PutStr( (UBYTE *)PREFIX_BUF );
  638.         PutStr( "RefreshWindow" );
  639.         if ( TopArgs_FLAG ) {
  640.             VPrintf( "%s( struct Window *wnd )\n{\n    ", (LONG *)&SUFFIX_BUF );
  641.             lowWriteRefreshSkel();
  642.         }
  643.         else {
  644.             VPrintf( "%s(", (LONG *)&SUFFIX_BUF );
  645.             Pad();
  646.             WriteFillIn();
  647.             Pad();
  648.             PutStr( ")\n{\n    " );
  649.             lowWriteRefreshSkel();
  650.         }
  651.     }
  652.     else {
  653.         PutStr( "\nVOID " );
  654.         PutStr( "RefreshWindow" );
  655.         if ( TopArgs_FLAG ) {
  656.             VPrintf( "%s( struct Window *wnd )\n{\n    ", (LONG *)&SUFFIX_BUF );
  657.             lowWriteRefreshSkel();
  658.         }
  659.         else {
  660.             VPrintf( "%s() \n{\n    ", (LONG *)&SUFFIX_BUF );
  661.             lowWriteRefreshSkel();
  662.         }
  663.     }
  664. }
  665.  
  666.  
  667. VOID
  668. lowWriteRefreshSkel()
  669. {
  670.     if ( Flag1 & gadtools_FLAG ) {
  671.         if ( TopArgs_FLAG ) {
  672.             PutStr( "GT_BeginRefresh( wnd );\n\n");
  673.             if ( Comments_FLAG == VERBOSE_COMMENTS ) {
  674.                 PutStr( "    /* own rendering (if needed) here */\n\n" );
  675.             }
  676.             PutStr( "    GT_EndRefresh( wnd, TRUE );");
  677.         }
  678.         else {
  679.             VPrintf( "GT_BeginRefresh( %s );\n\n", (LONG *)&IDCMP_WIN_BUF );
  680.             if ( Comments_FLAG == VERBOSE_COMMENTS ) {
  681.                 PutStr( "    /* own rendering (if needed) here */\n\n" );
  682.             }
  683.             VPrintf( "    GT_EndRefresh( %s, TRUE );", (LONG *)&IDCMP_WIN_BUF );
  684.         }
  685.     }
  686.     else {
  687.         if ( TopArgs_FLAG ) {
  688.             PutStr( "BeginRefresh( wnd );\n\n");
  689.             if ( Comments_FLAG == VERBOSE_COMMENTS ) {
  690.                 PutStr( "    /* own rendering (if needed) here */\n\n" );
  691.             }
  692.             PutStr( "    EndRefresh( wnd, TRUE );");
  693.         }
  694.         else {
  695.             VPrintf( "BeginRefresh( %s );\n\n", (LONG *)&IDCMP_WIN_BUF );
  696.             if ( Comments_FLAG == VERBOSE_COMMENTS ) {
  697.                 PutStr( "    /* own rendering (if needed) here */\n\n" );
  698.             }
  699.             VPrintf( "    EndRefresh( %s, TRUE );", (LONG *)&IDCMP_WIN_BUF );
  700.         }
  701.     }
  702.  
  703.     PutStr( "\n}\n\n" );
  704. }
  705.  
  706.  
  707. VOID
  708. WriteFillIn()
  709. {
  710.     switch ( FillIns_FLAG ) {
  711.         case 0:
  712.             return;
  713.         case 1:
  714.             PutStr( "@@@@@@@@@@" );
  715.             break;
  716.         case 2:
  717.             PutStr( "/* @@ */" );
  718.             break;
  719.         case 3:
  720.             PutStr( "@@" );
  721.             break;
  722.     }
  723. }
  724.  
  725.  
  726. VOID
  727. Pad()
  728. {
  729.     if ( FillIns_FLAG != FILLS_NONE && Variables_FLAG == LOCAL )
  730.         PutStr( " " );
  731. }
  732.  
  733.