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

  1.  
  2. /*
  3.  *              skew2.c  --  SKEleton Writer, part 2
  4.  */
  5.  
  6. #include <exec/types.h>
  7. #include <intuition/intuition.h>
  8. #include <libraries/gadtools.h>
  9. #include <libraries/asl.h>
  10.  
  11. #include "skew.h"
  12.  
  13. BOOL Really_Quit = FALSE;    /* TRUE when positive answer to ReallyQuit? */
  14.  
  15. extern BOOL Writing_Done;    /* TRUE when work was saved and no gadget hit */
  16.  
  17. extern LONG Display_num;
  18.  
  19. extern struct Window  *Wnd;
  20.  
  21. /* flags for cycle gadgets on display #3 */
  22. extern LONG
  23.     WaitingMode_FLAG, Variables_FLAG, Comments_FLAG, FillIns_FLAG,
  24.     TopArgs_FLAG, TopReturn_FLAG, TestVarScope_FLAG;
  25.  
  26. /* stuff for IDCMPWindow name */
  27. extern char *IDCMP_WIN_BUF, IDCMP_WIN_NAME[];
  28.  
  29. /* stuff for top-level function name */
  30. extern char *TOP_LEVEL_BUF, TOP_LEVEL_NAME[];
  31.  
  32. /* prefix & suffix for the names of generated functions */
  33. extern char *PREFIX_BUF, *SUFFIX_BUF, PREFIX_NAME[], SUFFIX_NAME[];
  34.  
  35. extern char *TEST_VAR_BUF, TEST_VAR_NAME[];
  36.  
  37. extern struct Gadget *GList, *Gadgets[];
  38.  
  39. /* flags related to gadgets & output file */
  40. LONG Flag1  = CLASS_FLAG;                        /* 'Class' is preset */
  41. LONG Flag2A, Flag2B, Flag3;
  42.  
  43. /*  function prototypes  */
  44. __regargs extern VOID  GenerateCode( BPTR );
  45. extern VOID Iconify( VOID );
  46.  
  47. VOID HandleIDCMP( VOID );
  48. __regargs static VOID HandleGadgets( USHORT, APTR );
  49. static VOID HandleQuitGad( VOID );
  50. static LONG  HandleOutFile( VOID );
  51. __regargs static BOOL AskYesNo(  char *, char *, char * );
  52.  
  53.  
  54. VOID
  55. HandleIDCMP()
  56. {
  57.     struct  IntuiMessage  *msg;
  58.     ULONG    class;
  59.     USHORT  code;
  60.     APTR    iaddress;
  61.  
  62.     while ( Really_Quit == FALSE ) {
  63.         WaitPort( Wnd->UserPort );
  64.  
  65.         while ( msg = (struct IntuiMessage *)GT_GetIMsg( Wnd->UserPort ) ) {
  66.  
  67.         class     = msg->Class;
  68.         code     = msg->Code;
  69.         iaddress = msg->IAddress;
  70.  
  71.         GT_ReplyIMsg( msg );
  72.  
  73.         switch ( class ) {
  74.             case IDCMP_REFRESHWINDOW:
  75.                 GT_BeginRefresh( Wnd );
  76.                 GT_EndRefresh( Wnd, TRUE );
  77.                 break;
  78.             case IDCMP_GADGETUP:
  79.                 HandleGadgets( code, iaddress );
  80.                 break;
  81.             case IDCMP_MENUPICK:
  82.                                             /* just swallow */
  83.                 break;
  84.             }
  85.         }
  86.     }
  87.  
  88.     /* reply all outstanding messages */
  89.     while ( msg = (struct IntuiMessage *)GT_GetIMsg( Wnd->UserPort ) )
  90.         GT_ReplyIMsg( msg );
  91. }
  92.  
  93.  
  94. VOID
  95. HandleGadgets( USHORT code, APTR gad_address )
  96. {
  97.     switch ( Display_num ) {
  98.  
  99.         /* window #0 */
  100.         case 0 :
  101.             if ( gad_address == Gadgets[ GD_IDCMPWindow ] ) {
  102.                 strcpy( IDCMP_WIN_NAME,
  103.   ((struct StringInfo *) Gadgets[ GD_IDCMPWindow ]->SpecialInfo)->Buffer );
  104.  
  105.             }
  106.             else if( gad_address == Gadgets[ GD_Class ] ) {
  107.                 Flag1 ^= CLASS_FLAG;
  108.             }
  109.             else if( gad_address == Gadgets[ GD_Code ] ) {
  110.                 Flag1 ^= CODE_FLAG;
  111.             }
  112.             else if( gad_address == Gadgets[ GD_Qualifier ] ) {
  113.                 Flag1 ^= QUALIFIER_FLAG;
  114.             }
  115.             else if( gad_address == Gadgets[ GD_MouseX ] ) {
  116.                 Flag1 ^= MOUSEX_FLAG;
  117.             }
  118.             else if( gad_address == Gadgets[ GD_MouseY ] ) {
  119.                 Flag1 ^= MOUSEY_FLAG;
  120.             }
  121.             else if( gad_address == Gadgets[ GD_Seconds ] ) {
  122.                 Flag1 ^= SECONDS_FLAG;
  123.             }
  124.             else if( gad_address == Gadgets[ GD_Micros ] ) {
  125.                 Flag1 ^= MICROS_FLAG;
  126.             }
  127.             else if( gad_address == Gadgets[ GD_IAddress ] ) {
  128.                 Flag1 ^= IADDRESS_FLAG;
  129.             }
  130.             else if ( gad_address == Gadgets[ GD_gadtools ] ) {
  131.                 Flag1 ^= gadtools_FLAG;
  132.             }
  133.             else if( gad_address == Gadgets[ GD_QUIT1 ] ) {
  134.                 HandleQuitGad();
  135.             }
  136.             else if ( gad_address == Gadgets[ GD_GO_ON1 ] ) {
  137.                 RemoveGList( Wnd, GList, -1 );
  138.                 ++Display_num;
  139.                 MakeWindow();
  140.             }
  141.             else if( gad_address == Gadgets[ GD_ICONIFY1 ] ) {
  142.                 Iconify();
  143.             }
  144.         break;
  145.  
  146.         /* window #1 */
  147.         case 1 :
  148.             if ( gad_address == Gadgets[ GD_MOUSEBUTTONS ]  ) {
  149.                 Flag2A ^= MOUSEBUTTONS_FLAG;
  150.             }
  151.             else if ( gad_address == Gadgets[ GD_MOUSEBUTTONS_F ] ) {
  152.                 Flag2A ^= MOUSEBUTTONS_F_FLAG;
  153.             }
  154.             else if ( gad_address == Gadgets[ GD_MOUSEMOVE ] ) {
  155.                 Flag2A ^= MOUSEMOVE_FLAG;
  156.             }
  157.             else if ( gad_address == Gadgets[ GD_MOUSEMOVE_F ] ) {
  158.                 Flag2A ^= MOUSEMOVE_F_FLAG;
  159.             }
  160.  
  161.             /* DELTAMOVE is disabled! */
  162.  
  163.             else if ( gad_address == Gadgets[ GD_GADGETDOWN ] ) {
  164.                 Flag2A ^= GADGETDOWN_FLAG;
  165.             }
  166.             else if ( gad_address == Gadgets[ GD_GADGETDOWN_F ] ) {
  167.                 Flag2A ^= GADGETDOWN_F_FLAG;
  168.             }
  169.             else if ( gad_address == Gadgets[ GD_GADGETUP ] ) {
  170.                 Flag2A ^= GADGETUP_FLAG;
  171.             }
  172.             else if ( gad_address == Gadgets[ GD_GADGETUP_F ] ) {
  173.                 Flag2A ^= GADGETUP_F_FLAG;
  174.             }
  175.             else if ( gad_address == Gadgets[ GD_CLOSEWINDOW ] ) {
  176.                 Flag2A ^= CLOSEWINDOW_FLAG;
  177.             }
  178.             else if ( gad_address == Gadgets[ GD_CLOSEWINDOW_F ] ) {
  179.                 Flag2A ^= CLOSEWINDOW_F_FLAG;
  180.             }
  181.             else if ( gad_address == Gadgets[ GD_MENUPICK ] ) {
  182.                 Flag2A ^= MENUPICK_FLAG;
  183.             }
  184.             else if ( gad_address == Gadgets[ GD_MENUPICK_F ] ) {
  185.                 Flag2A ^= MENUPICK_F_FLAG;
  186.             }
  187.             else if ( gad_address == Gadgets[ GD_MENUVERIFY ] ) {
  188.                 Flag2A ^= MENUVERIFY_FLAG;
  189.             }
  190.             else if ( gad_address == Gadgets[ GD_MENUVERIFY_F ] ) {
  191.                 Flag2A ^= MENUVERIFY_F_FLAG;
  192.             }
  193.             else if ( gad_address == Gadgets[ GD_MENUHELP ] ) {
  194.                 Flag2A ^= MENUHELP_FLAG;
  195.             }
  196.             else if ( gad_address == Gadgets[ GD_MENUHELP_F ] ) {
  197.                 Flag2A ^= MENUHELP_F_FLAG;
  198.             }
  199.             else if ( gad_address == Gadgets[ GD_RAWKEY ] ) {
  200.                 Flag2A ^= RAWKEY_FLAG;
  201.             }
  202.             else if ( gad_address == Gadgets[ GD_RAWKEY_F ] ) {
  203.                 Flag2A ^= RAWKEY_F_FLAG;
  204.             }
  205.             else if ( gad_address == Gadgets[ GD_VANILLAKEY ] ) {
  206.                 Flag2A ^= VANILLAKEY_FLAG;
  207.             }
  208.             else if ( gad_address == Gadgets[ GD_VANILLAKEY_F ] ) {
  209.                 Flag2A ^= VANILLAKEY_F_FLAG;
  210.             }
  211.             else if ( gad_address == Gadgets[ GD_REQSET ] ) {
  212.                 Flag2A ^= REQSET_FLAG;
  213.             }
  214.             else if ( gad_address == Gadgets[ GD_REQSET_F ] ) {
  215.                 Flag2A ^= REQSET_F_FLAG;
  216.             }
  217.             else if ( gad_address == Gadgets[ GD_REQCLEAR ] ) {
  218.                 Flag2A ^= REQCLEAR_FLAG;
  219.             }
  220.             else if ( gad_address == Gadgets[ GD_REQCLEAR_F ] ) {
  221.                 Flag2A ^= REQCLEAR_F_FLAG;
  222.             }
  223.             else if ( gad_address == Gadgets[ GD_REQVERIFY ] ) {
  224.                 Flag2A ^= REQVERIFY_FLAG;
  225.             }
  226.             else if ( gad_address == Gadgets[ GD_REQVERIFY_F ] ) {
  227.                 Flag2A ^= REQVERIFY_F_FLAG;
  228.             }
  229.             else if ( gad_address == Gadgets[ GD_NEWSIZE ] ) {
  230.                 Flag2B ^= NEWSIZE_FLAG;
  231.             }
  232.             else if ( gad_address == Gadgets[ GD_NEWSIZE_F ] ) {
  233.                 Flag2B ^= NEWSIZE_F_FLAG;
  234.             }
  235.             else if ( gad_address == Gadgets[ GD_SIZEVERIFY ] ) {
  236.                 Flag2B ^= SIZEVERIFY_FLAG;
  237.             }
  238.             else if ( gad_address == Gadgets[ GD_SIZEVERIFY_F ] ) {
  239.                 Flag2B ^= SIZEVERIFY_F_FLAG;
  240.             }
  241.             else if ( gad_address == Gadgets[ GD_ACTIVEWINDOW ] ) {
  242.                 Flag2B ^= ACTIVEWINDOW_FLAG;
  243.             }
  244.             else if ( gad_address == Gadgets[ GD_ACTIVEWINDOW_F ] ) {
  245.                 Flag2B ^= ACTIVEWINDOW_F_FLAG;
  246.             }
  247.             else if ( gad_address == Gadgets[ GD_INACTIVEWINDOW ] ) {
  248.                 Flag2B ^= INACTIVEWINDOW_FLAG;
  249.             }
  250.             else if ( gad_address == Gadgets[ GD_INACTIVEWINDOW_F ] ) {
  251.                 Flag2B ^= INACTIVEWINDOW_F_FLAG;
  252.             }
  253.             else if ( gad_address == Gadgets[ GD_CHANGEWINDOW ] ) {
  254.                 Flag2B ^= CHANGEWINDOW_FLAG;
  255.             }
  256.             else if ( gad_address == Gadgets[ GD_CHANGEWINDOW_F ] ) {
  257.                 Flag2B ^= CHANGEWINDOW_F_FLAG;
  258.             }
  259.             else if ( gad_address == Gadgets[ GD_REFRESHWINDOW ] ) {
  260.                 Flag2B ^= REFRESHWINDOW_FLAG;
  261.             }
  262.             else if ( gad_address == Gadgets[ GD_REFRESHWINDOW_F ] ) {
  263.                 Flag2B ^= REFRESHWINDOW_F_FLAG;
  264.             }
  265.             else if ( gad_address == Gadgets[ GD_DISKINSERTED ] ) {
  266.                 Flag2B ^= DISKINSERTED_FLAG;
  267.             }
  268.             else if ( gad_address == Gadgets[ GD_DISKINSERTED_F ] ) {
  269.                 Flag2B ^= DISKINSERTED_F_FLAG;
  270.             }
  271.             else if ( gad_address == Gadgets[ GD_DISKREMOVED ] ) {
  272.                 Flag2B ^= DISKREMOVED_FLAG;
  273.             }
  274.             else if ( gad_address == Gadgets[ GD_DISKREMOVED_F ] ) {
  275.                 Flag2B ^= DISKREMOVED_F_FLAG;
  276.             }
  277.             else if ( gad_address == Gadgets[ GD_NEWPREFS ] ) {
  278.                 Flag2B ^= NEWPREFS_FLAG;
  279.             }
  280.             else if ( gad_address == Gadgets[ GD_NEWPREFS_F ] ) {
  281.                 Flag2B ^= NEWPREFS_F_FLAG;
  282.             }
  283.             else if ( gad_address == Gadgets[ GD_INTUITICKS ] ) {
  284.                 Flag2B ^= INTUITICKS_FLAG;
  285.             }
  286.             else if ( gad_address == Gadgets[ GD_INTUITICKS_F ] ) {
  287.                 Flag2B ^= INTUITICKS_F_FLAG;
  288.             }
  289.             else if ( gad_address == Gadgets[ GD_IDCMPUPDATE ] ) {
  290.                 Flag2B ^= IDCMPUPDATE_FLAG;
  291.             }
  292.             else if ( gad_address == Gadgets[ GD_IDCMPUPDATE_F ] ) {
  293.                 Flag2B ^= IDCMPUPDATE_F_FLAG;
  294.             }
  295.             else if ( gad_address == Gadgets[ GD_LONELYMESSAGE ] ) {
  296.                 Flag2B ^= LONELYMESSAGE_FLAG;
  297.             }
  298.             else if ( gad_address == Gadgets[ GD_LONELYMESSAGE_F ] ) {
  299.                 Flag2B ^= LONELYMESSAGE_F_FLAG;
  300.             }
  301.             else if ( gad_address == Gadgets[ GD_QUIT2 ] ) {
  302.                 HandleQuitGad( );
  303.             }
  304.             else if ( gad_address == Gadgets[ GD_GO_ON2 ] ) {
  305.                 RemoveGList( Wnd, GList, -1 );
  306.                 ++Display_num;
  307.                 MakeWindow();
  308.             }
  309.             else if ( gad_address == Gadgets[ GD_STEP_BACK2 ] ) {
  310.                 RemoveGList( Wnd, GList, -1 );
  311.                 --Display_num;
  312.                 MakeWindow();
  313.             }
  314.             else if( gad_address == Gadgets[ GD_ICONIFY2 ] ) {
  315.                 Iconify();
  316.             }
  317.         break;
  318.  
  319.         /* window #2 */
  320.         case 2 :
  321.             if ( gad_address == Gadgets[ GD_TopLevelRet ] ) {
  322.                 Writing_Done = FALSE;
  323.                 TopReturn_FLAG = ++TopReturn_FLAG % 2;
  324.             }
  325.             else if ( gad_address == Gadgets[ GD_TopLevelName ] ) {
  326.                 Writing_Done = FALSE;
  327.                 strcpy( TOP_LEVEL_NAME,
  328.   ((struct StringInfo *) Gadgets[ GD_TopLevelName ]->SpecialInfo)->Buffer );
  329.             }
  330.             else if ( gad_address == Gadgets[ GD_Prefix ] ) {
  331.                 Writing_Done = FALSE;
  332.                 strcpy( PREFIX_NAME,
  333.   ((struct StringInfo *) Gadgets[ GD_Prefix ]->SpecialInfo)->Buffer );
  334.             }
  335.             else if ( gad_address == Gadgets[ GD_Suffix ] ) {
  336.                 Writing_Done = FALSE;
  337.                 strcpy( SUFFIX_NAME,
  338.   ((struct StringInfo *) Gadgets[ GD_Suffix ]->SpecialInfo)->Buffer );
  339.             }
  340.             else if ( gad_address == Gadgets[ GD_Skeletons ] ) {
  341.                 Writing_Done = FALSE;
  342.                 Flag3 ^= Skeletons_FLAG;
  343.             }
  344.             else if ( gad_address == Gadgets[ GD_Prototypes ] ) {
  345.                 Writing_Done = FALSE;
  346.                 Flag3 ^= Prototypes_FLAG;
  347.             }
  348.             else if ( gad_address == Gadgets[ GD_WaitingMode ] ) {
  349.                 Writing_Done = FALSE;
  350.                 WaitingMode_FLAG = ++WaitingMode_FLAG % 2;
  351.             }
  352.             else if ( gad_address == Gadgets[ GD_Variables ] ) {
  353.                 Variables_FLAG = ++Variables_FLAG % 2;
  354.                 Writing_Done = FALSE;
  355.             }
  356.             else if ( gad_address == Gadgets[ GD_Comments ] ) {
  357.                 Writing_Done = FALSE;
  358.                 Comments_FLAG = ++Comments_FLAG % 3;
  359.             }
  360.             else if ( gad_address == Gadgets[ GD_FillIns ] ) {
  361.                 Writing_Done = FALSE;
  362.                 FillIns_FLAG = ++FillIns_FLAG % 4;
  363.             }
  364.             else if ( gad_address == Gadgets[ GD_TopArgs ] ) {
  365.                 Writing_Done = FALSE;
  366.                 TopArgs_FLAG = ++TopArgs_FLAG % 2;
  367.             }
  368.             else if ( gad_address == Gadgets[ GD_TestVarName ] ) {
  369.                 Writing_Done = FALSE;
  370.                 strcpy( TEST_VAR_NAME,
  371.   ((struct StringInfo *) Gadgets[ GD_TestVarName ]->SpecialInfo)->Buffer );
  372.             }
  373.             else if ( gad_address == Gadgets[ GD_TestVarScope ] ) {
  374.                 TestVarScope_FLAG = ++TestVarScope_FLAG % 2;
  375.                 Writing_Done = FALSE;
  376.             }
  377.             else if ( gad_address == Gadgets[ GD_QUIT3 ] ) {
  378.                 if ( ! Writing_Done ) {
  379.                     HandleQuitGad();
  380.                 }
  381.                 else {
  382.                     Really_Quit = TRUE;
  383.                 }
  384.             }
  385.             else if ( gad_address == Gadgets[ GD_STEP_BACK3 ] ) {
  386.                 Writing_Done = FALSE;
  387.                 RemoveGList( Wnd, GList, -1 );
  388.                 --Display_num;
  389.                 MakeWindow();
  390.             }
  391.             else if( gad_address == Gadgets[ GD_WRITE_C ] ) {
  392.                 if ( ! HandleOutFile() ) {
  393.                     DisplayBeep( NULL );        /* he may try again... */
  394.                     return;
  395.                 }
  396.             }
  397.             else if( gad_address == Gadgets[ GD_ICONIFY3 ] ) {
  398.                 Iconify();
  399.             }
  400.         break;
  401.     }
  402. }
  403.  
  404.  
  405. VOID
  406. HandleQuitGad()
  407. {
  408.     Really_Quit = AskYesNo( "Do you really want to quit?", " YES ", " NO " );
  409. }
  410.  
  411.  
  412. BOOL
  413. AskYesNo( char *hail_text, char *pos_text, char *neg_text )
  414. {
  415.     struct IntuiText prompt, yprompt, nprompt;
  416.     BOOL return_val;
  417.  
  418.     prompt.FrontPen     = 0;
  419.     prompt.BackPen      = 1;
  420.     prompt.DrawMode     = JAM1;
  421.     prompt.LeftEdge     = 25;
  422.     prompt.TopEdge      = 15;
  423.     prompt.ITextFont    = NULL;
  424.     prompt.IText        = hail_text;
  425.     prompt.NextText     = NULL;
  426.  
  427.     yprompt.FrontPen     = 0;
  428.     yprompt.BackPen      = 1;
  429.     yprompt.DrawMode     = JAM1;
  430.     yprompt.LeftEdge     = 15;
  431.     yprompt.TopEdge      = 3;
  432.     yprompt.ITextFont     = NULL;
  433.     yprompt.IText         = pos_text;
  434.     yprompt.NextText     = NULL;
  435.  
  436.     nprompt.FrontPen     = 0;
  437.     nprompt.BackPen      = 1;
  438.     nprompt.DrawMode     = JAM1;
  439.     nprompt.LeftEdge     = 15;
  440.     nprompt.TopEdge      = 3;
  441.     nprompt.ITextFont     = NULL;
  442.     nprompt.IText         = neg_text;
  443.     nprompt.NextText     = NULL;
  444.  
  445.     return_val = AutoRequest( Wnd, &prompt, &yprompt,
  446.                        &nprompt, NULL, NULL, 120, 80 );
  447. }
  448.  
  449.  
  450. /* returns 0 on SERIOUS error (requester not alocated ); 1 otherwise */
  451. int
  452. HandleOutFile()
  453. {
  454.     char OutFileName[ 80 ];
  455.     char path_str[ 256 ];
  456.     BPTR out_fh = NULL;
  457.     struct FileRequester *gc_GenC = NULL;
  458.  
  459.     struct TagItem    gc_CTags[] = {
  460.         ASL_Hail,               (ULONG)"Save C Source As...",
  461.         ASL_Window,           0L,
  462.         ASL_Height            215,
  463.         ASL_File,            (ULONG)"skew_file.c",
  464.         ASL_Dir,            (ULONG)DEFAULT_SAVE_DIR,    /* "RAM:" */
  465.         ASL_Pattern,        (ULONG)"#?.c",
  466.         ASL_OKText,            (ULONG)"Save",
  467.         ASL_FuncFlags,      FILF_SAVE | FILF_PATGAD,
  468.         TAG_DONE
  469.     };
  470.  
  471.     if ( ! ( gc_GenC =
  472.         (struct FileRequester *)AllocAslRequest(     ASL_FileRequest,
  473.                                                     TAG_DONE ) ) )
  474.         return( 0 );
  475.  
  476.     gc_CTags[ 1 ].ti_Data = Wnd;
  477.  
  478.     if ( AslRequest( gc_GenC, gc_CTags ) ) {
  479.  
  480.         /* the idiot left us with no file name */
  481.         if ( ! *gc_GenC->rf_File ) {
  482.             AskYesNo( "Can't write to file with NO NAME!",
  483.                     "HOW STUPID OF ME!", "SORRY, I'M SLEEPY..." );
  484.             goto cancel;
  485.         }
  486.  
  487.         strcpy( path_str, gc_GenC->rf_Dir );
  488.         AddPart( path_str, gc_GenC->rf_File, 256 );
  489.  
  490.         /* if we have some file-name and this file already exists */
  491.         if ( ! access( path_str, 0 ) ) {
  492.             if ( ! AskYesNo( "File already exists! Overwrite it?", "YES", "NO" ) ) {
  493.                 goto cancel;             /* he didn't want to overwrite */
  494.             }
  495.         }
  496.     }
  497.     else {
  498.         goto cancel;                    /* user hit 'CANCEL' */
  499.     }
  500.  
  501.     /* this CAN be a slight problem... */
  502.     if ( ( out_fh = Open( path_str, MODE_NEWFILE ) ) == NULL ) {
  503.         AskYesNo( "File has NOT been opened!", "CANCEL", "CANCEL" );
  504.         FreeAslRequest( gc_GenC );
  505.         return( 0 );
  506.     }
  507.  
  508.     GenerateCode( out_fh );
  509.  
  510.     Close( out_fh );
  511.  
  512. cancel:
  513.     FreeAslRequest( gc_GenC );
  514.     return( 1 );
  515. }
  516.