home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / programm / utility / resgrep0.lzh / ResGrep / src / exportedit.cc < prev    next >
C/C++ Source or Header  |  1992-04-11  |  19KB  |  749 lines

  1. //
  2. // Editieren der Conversions-Liste
  3. //
  4. #include <exec/types.h>
  5. #include <intuition/intuition.h>
  6. #include <intuition/classes.h>
  7. #include <intuition/classusr.h>
  8. #include <intuition/imageclass.h>
  9. #include <intuition/gadgetclass.h>
  10. #include <libraries/gadtools.h>
  11. #include <graphics/displayinfo.h>
  12. #include <graphics/gfxbase.h>
  13.  
  14. #include <dos/dos.h>
  15.  
  16. #include <stdlib.h>
  17. #include "id.h"
  18. #include "export.h"
  19. #include "resgrep.h"
  20. #include "utils.h"
  21.  
  22. #define GD_convert                   0
  23. #define GD_to                       1
  24. #define GD_command                   2
  25. #define GD_cfind                   3
  26. #define GD_arexx                   4
  27. #define GD_writeto                   5
  28. #define GD_file                    6
  29. #define GD_ffind                   7
  30. #define GD_ok                       8
  31. #define GD_cancel                   9
  32. #define GD_add                       10
  33. #define GD_remove                   11
  34.  
  35. struct Window         *Wnd     = 0l;
  36. struct Gadget         *GList     = 0l;
  37. struct Gadget         *Gadgets[12];
  38.  
  39. extern list    *conversions;
  40. UBYTE          **convertLabels;
  41. UBYTE          **toLabels;
  42.  
  43.  
  44. char **makeConvertLabels(void)
  45. {
  46.    int          index=0;
  47.    char     **b;
  48.    node      *n;
  49.    unsigned long  last=0;
  50.  
  51.    // Voraussetzung: mindestens ZWEI Elemente in der Liste
  52.    last = conversions->getfirst()->getpack();
  53.    index++;
  54.  
  55.    for(n=conversions->getfirst(); n->getsucc(); n=n->getsucc() )
  56.       if( last!=n->getpack() )
  57.       {
  58.      index++;
  59.      last=n->getpack();
  60.       }
  61.    if( (b=(char **)malloc(sizeof(*b)*(index+1)))==NULL )
  62.       return NULL;
  63.  
  64.    index=0;
  65.    last = conversions->getfirst()->getpack();
  66.    b[index++]=strdup(pack2cstr(conversions->getfirst()->getpack()));
  67.    for(n=conversions->getfirst(); n->getsucc(); n=n->getsucc())
  68.       if( last!=n->getpack() )
  69.       {
  70.      b[index++]=strdup(pack2cstr(n->getpack()));
  71.      last=n->getpack();
  72.       }
  73.    b[index]=NULL;
  74.    return b;
  75. }
  76.  
  77. char **makeToLabels(unsigned long p)
  78. {
  79.    int index=0;
  80.    char  **b;
  81.  
  82.    for(node *n=conversions->findpack(p);
  83.        n!=NULL && n->getsucc() && n->getpack()==p;
  84.        n=n->getsucc(), index++)
  85.       ;
  86.    if( (b=(char **)malloc(sizeof(*b)*(index+1)))==NULL )
  87.       return NULL;
  88.    for(index=0,n=conversions->findpack(p);
  89.        n!=NULL && n->getsucc() && n->getpack()==p;
  90.        n=n->getsucc(),index++)
  91.       b[index]=n->getname();
  92.    b[index]=NULL;
  93.    return b;
  94. }
  95.  
  96. // Sucht aus dem 'ConvNum'ten ▄bertragungsart die 'ToNum'te aus.
  97. node *getselnode(int ConvNum, int ToNum)
  98. {
  99.    node *n;
  100.    unsigned long  last;
  101.  
  102.    if( ConvNum==0 )
  103.       n=conversions->getfirst();
  104.    else
  105.    {
  106.       last = conversions->getfirst()->getpack();
  107.  
  108.       for(n=conversions->getfirst(); n->getsucc(); n=n->getsucc() )
  109.      if( last!=n->getpack() )
  110.      {
  111.         ConvNum--;
  112.         last=n->getpack();
  113.         if( ConvNum==0 )
  114.            break;
  115.      }
  116.       if( ConvNum!=0 )
  117.      return NULL;    // Nicht gefunden
  118.    }
  119.  
  120.    for(;n->getsucc() && ToNum>0; n=n->getsucc(), ToNum--)
  121.       ;
  122.  
  123.    return n;
  124. }
  125.  
  126. void ActiveNode(node *n)
  127. {
  128.    node *vor;
  129.  
  130.    conversions->remove(n);
  131.  
  132.    if( (vor=conversions->findpack(n->getpack()))==NULL )
  133.       conversions->enqueuepack(n);
  134.    else
  135.       conversions->insert(vor->getpred(),n);
  136. }
  137.  
  138. // Liesst den Text aus dem File- und dem Command-Gadget
  139. void convert::ReadText(void)
  140. {
  141.    struct StringInfo    *si;
  142.    struct Gadget    *g;
  143.  
  144.    if( command != NULL )
  145.       free(command);
  146.    command=NULL;
  147.    if( filename != NULL )
  148.       free(filename);
  149.    filename=NULL;
  150.  
  151. //   g = Gadgets[GD_command];
  152. //   si = (struct StringInfo *)(g->SpecialInfo);
  153. //   command = strdup( (char *) si->Buffer );
  154.  
  155.    command = strdup( (char *)
  156.       ((struct StringInfo *)(Gadgets[GD_command]->SpecialInfo))->Buffer);
  157.    filename = strdup( (char *)
  158.       ((struct StringInfo *)(Gadgets[GD_file]->SpecialInfo))->Buffer );
  159. }
  160.  
  161.  
  162. // Stellt den Inhalt des Knotens in dem Fenster dar.
  163. void UpdateWindow(node *SelNode, int ConvNum)
  164. {
  165.    convert *c=(convert *)SelNode;
  166.  
  167.    GT_SetGadgetAttrs(Gadgets[GD_convert],Wnd,NULL,GTCY_Labels,convertLabels,
  168.              GTCY_Active,ConvNum, TAG_DONE );
  169.  
  170.    if( toLabels!=NULL )
  171.       free(toLabels);
  172.    toLabels=makeToLabels(SelNode->getpack());
  173.    GT_SetGadgetAttrs(Gadgets[GD_to],Wnd,NULL,GTCY_Labels,toLabels,
  174.              TAG_DONE );
  175.  
  176.    GT_SetGadgetAttrs(Gadgets[GD_command],Wnd,NULL,GTST_String,c->command,TAG_DONE);
  177.  
  178.    GT_SetGadgetAttrs(Gadgets[GD_arexx],Wnd,NULL,GTCB_Checked,c->isARexx,TAG_DONE);
  179.  
  180.    GT_SetGadgetAttrs(Gadgets[GD_file],Wnd,NULL,GTST_String,c->filename,TAG_DONE);
  181.  
  182.    if( c->sendto==Clipboard )
  183.    {
  184.       GT_SetGadgetAttrs(Gadgets[GD_writeto],Wnd,NULL,GTCY_Active,0,TAG_DONE);
  185.       GT_SetGadgetAttrs(Gadgets[GD_file],Wnd,NULL,GA_Disabled,TRUE,TAG_DONE);
  186.    }
  187.    else
  188.    {
  189.       GT_SetGadgetAttrs(Gadgets[GD_writeto],Wnd,NULL,GTCY_Active,1,TAG_DONE);
  190.       GT_SetGadgetAttrs(Gadgets[GD_file],Wnd,NULL,GA_Disabled,FALSE,TAG_DONE);
  191.    }
  192. }
  193.  
  194.  
  195. // ------------------------------------------------------------------------
  196. // Das Add Fenster
  197. // Rⁿckgabewerte:
  198. // 0: Keinen Fehler
  199. // 1: Konnte Kontext nicht anlegen
  200. // 2: Konnte Gadget nicht anlegen
  201. // 3: Fehler beim kreiren der Menus
  202. // 4: Fehler beim ÷ffnen des Fensters
  203. // 11: Fehlerhafter Typ.
  204.  
  205. int addconv(unsigned long *newtype)
  206. {
  207. #define GDA_resourcetype            0
  208. #define GDA_ok                    1
  209. #define GDA_cancel                2
  210.  
  211.    struct Window    *AWnd = NULL;
  212.    struct Gadget    *AGList = NULL;
  213.    struct Menu        *AMenus = NULL;
  214.    struct Gadget    *AGadgets[3];
  215.    UWORD         ALeft = 169;
  216.    UWORD         ATop = 89;
  217.    UWORD         AWidth = 261;
  218.    UWORD         AHeight = 54;
  219.    UBYTE        *AWdt = " Add Resource Type";
  220.  
  221.    struct TextAttr topaz8 =
  222.    {
  223.       ( STRPTR )"topaz.font", 8, 0x00, 0x41
  224.    };
  225.  
  226.    struct NewMenu ANewMenu[] =
  227.    {
  228.       NM_TITLE, (UBYTE *)"Control", NULL, 0, 0, NULL,
  229.       NM_ITEM, (UBYTE *)"Ok", (UBYTE *)"O", 0, 0, NULL,
  230.       NM_ITEM, (UBYTE *)"Cancel", (UBYTE *)"C", 0, 0, NULL,
  231.       NM_ITEM, (UBYTE *)NM_BARLABEL, NULL, 0, NULL, NULL,
  232.       NM_ITEM, (UBYTE *)"Close Window", (UBYTE *)"K", 0, 0, NULL,
  233.       NM_END, NULL, NULL, 0, NULL, NULL
  234.    };
  235.  
  236.    struct NewGadget    ng;
  237.    struct Gadget       *g;
  238.    UWORD           offx, offy;
  239.  
  240.    struct IntuiMessage     theIMsg, *imsg;
  241.    unsigned long     newtypestring;
  242.  
  243.    offx = theScreen->WBorLeft;
  244.    offy = theScreen->WBorTop + theScreen->RastPort.TxHeight + 1;
  245.  
  246.    if ( NOT( g = CreateContext( &AGList )))
  247.       return( 1L );
  248.  
  249.    ng.ng_LeftEdge     =    offx + 158;
  250.    ng.ng_TopEdge     =    offy + 6;
  251.    ng.ng_Width         =    56;
  252.    ng.ng_Height      =    13;
  253.    ng.ng_GadgetText     =    (UBYTE *)"Recource Type";
  254.    ng.ng_TextAttr     =    &topaz8;
  255.    ng.ng_GadgetID     =    GDA_resourcetype;
  256.    ng.ng_Flags         =    PLACETEXT_LEFT;
  257.    ng.ng_VisualInfo     =    VisualInfo;
  258.  
  259.    g = CreateGadget( STRING_KIND, g, &ng, GTST_MaxChars, 4, TAG_DONE );
  260.  
  261.    AGadgets[ 0 ] = g;
  262.  
  263.    ng.ng_LeftEdge     =    offx + 26;
  264.    ng.ng_TopEdge     =    offy + 27;
  265.    ng.ng_Width         =    77;
  266.    ng.ng_Height      =    18;
  267.    ng.ng_GadgetText     =    (UBYTE *)"Ok";
  268.    ng.ng_GadgetID     =    GDA_ok;
  269.    ng.ng_Flags         =    PLACETEXT_IN;
  270.  
  271.    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  272.  
  273.    AGadgets[ 1 ] = g;
  274.  
  275.    ng.ng_LeftEdge     =    offx + 154;
  276.    ng.ng_TopEdge     =    offy + 26;
  277.    ng.ng_Width         =    76;
  278.    ng.ng_GadgetText     =    (UBYTE *)"Cancel";
  279.    ng.ng_GadgetID     =    GDA_cancel;
  280.  
  281.    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  282.  
  283.    AGadgets[ 2 ] = g;
  284.  
  285.    if ( NOT g )
  286.       return( 2L );
  287.  
  288.    if ( NOT( AMenus = CreateMenus( ANewMenu, GTMN_FrontPen, NULL, TAG_DONE )))
  289.       return( 3L );
  290.  
  291.    LayoutMenus( AMenus, VisualInfo, GTMN_TextAttr, &topaz8, TAG_DONE );
  292.  
  293.    if ( NOT( AWnd = OpenWindowTags( NULL,
  294.             WA_Left,          ALeft,
  295.             WA_Top,          ATop,
  296.             WA_Width,          AWidth,
  297.             WA_Height,          AHeight + offy,
  298.             WA_IDCMP,          STRINGIDCMP | BUTTONIDCMP |
  299.                       IDCMP_MENUPICK | IDCMP_REFRESHWINDOW,
  300.             WA_Flags,          WFLG_DRAGBAR | WFLG_DEPTHGADGET |
  301.                       WFLG_SMART_REFRESH | WFLG_ACTIVATE,
  302.             WA_Gadgets,       AGList,
  303.             WA_Title,          AWdt,
  304.             WA_ScreenTitle,   "ResGrep - Add Resource Type",
  305.                    TAG_DONE )))
  306.       return( 4L );
  307.  
  308.    SetMenuStrip( AWnd, AMenus );
  309.    GT_RefreshWindow( AWnd, NULL );
  310.  
  311.    for(;;)     // Main Event Loop
  312.    {
  313.  
  314.    Wait( 1UL<<(unsigned long)(AWnd->UserPort->mp_SigBit) );
  315.    while( (imsg=GT_GetIMsg(AWnd->UserPort)) != NULL )
  316.    {
  317.       // Message kopieren und orginale sofort zurⁿckschicken.
  318.       theIMsg=*imsg;
  319.       GT_ReplyIMsg(imsg);
  320.       switch( theIMsg.Class )
  321.       {
  322.        case IDCMP_INTUITICKS:
  323.      break;
  324.        case IDCMP_MENUPICK:
  325.      {
  326.         int MenuNumber=theIMsg.Code;
  327.         struct MenuItem *Item;
  328.  
  329.         while( MenuNumber!=MENUNULL )
  330.         {
  331.            Item=ItemAddress(Menus,MenuNumber);
  332.            switch( MENUNUM(MenuNumber) )
  333.            {
  334.         case 0:
  335.           switch( ITEMNUM(MenuNumber) )
  336.           {
  337.            case 0:        // Ok
  338.            case 3:        // Close Window
  339.              newtypestring = (char *)
  340.             ((struct StringInfo *)(AGadgets[GDA_resourcetype]
  341.                            ->SpecialInfo))
  342.                ->Buffer;
  343.              if ( AMenus      )
  344.              {
  345.             ClearMenuStrip( AWnd );
  346.             FreeMenus( AMenus );
  347.              }
  348.              if ( AWnd        )
  349.             CloseWindow( AWnd );
  350.              if ( AGList      )
  351.             FreeGadgets( AGList );
  352.              if( strlen(newtypestring)!=4 )
  353.             return 11;
  354.              *newtype=cstr2pack(newtypestring);
  355.              return 0;
  356.              break;
  357.            case 1:
  358.              return 12;
  359.              if ( AMenus      )
  360.              {
  361.             ClearMenuStrip( AWnd );
  362.             FreeMenus( AMenus );
  363.              }
  364.              if ( AWnd        )
  365.             CloseWindow( AWnd );
  366.              if ( AGList      )
  367.             FreeGadgets( AGList );
  368.              break;
  369.            default:
  370.              ResError("Fatal:\nUnknown Menuitem.");
  371.              break;
  372.           }
  373.         default:
  374.           ResError("Fatal:\nUnknown Menu.");
  375.           break;
  376.            }
  377.            MenuNumber=Item->NextSelect;
  378.         }
  379.      }
  380.      break;
  381.        case IDCMP_GADGETUP:
  382.      switch( ((struct Gadget *)theIMsg.IAddress)->GadgetID )
  383.      {
  384.       case GDA_ok:
  385.         newtypestring = (char *)
  386.            ((struct StringInfo *)(AGadgets[GDA_resourcetype]
  387.                       ->SpecialInfo))
  388.           ->Buffer;
  389.         if ( AMenus      )
  390.         {
  391.            ClearMenuStrip( AWnd );
  392.            FreeMenus( AMenus );
  393.         }
  394.         if ( AWnd        )
  395.            CloseWindow( AWnd );
  396.         if ( AGList      )
  397.            FreeGadgets( AGList );
  398.         if( strlen(newtypestring)!=4 )
  399.            return 11;
  400.         *newtype=cstr2pack(newtypestring);
  401.         return 0;
  402.       case GDA_cancel:
  403.         if ( AMenus      )
  404.         {
  405.            ClearMenuStrip( AWnd );
  406.            FreeMenus( AMenus );
  407.         }
  408.         if ( AWnd        )
  409.            CloseWindow( AWnd );
  410.         if ( AGList      )
  411.            FreeGadgets( AGList );
  412.         return 12;
  413.         break;
  414.       case GDA_resourcetype:
  415.         break;
  416.       default:
  417.         ResError("Fatal:\nUnknown Gadget");
  418.         break;
  419.      }
  420.      break;
  421.        default:
  422.      ResError("Fatal:\nUnknown Message.");
  423.      break;
  424.       }
  425.    }
  426.    } // Forever
  427.    return 13;
  428. }
  429.  
  430.  
  431. // ------------------------------------------------------------------------
  432. // Das Editfenster.
  433.  
  434.  
  435. void editconv(void)
  436. {
  437.    int            ConvNum=0, ToNum=0, WriteDataNum=0;
  438.    node         *SelectedNode;
  439.  
  440.  
  441.    UBYTE     *writetoLabels[] =
  442.    {
  443.        (UBYTE *)"Clipboard", (UBYTE *)"File", 0l
  444.    };
  445.  
  446.    struct TextAttr topaz8 = {
  447.        ( STRPTR )"topaz.font", 8, 0x00, 0x01 };
  448.  
  449.    struct TagItem    WindowTags[] =
  450.    {
  451.       WA_Left,        112,
  452.       WA_Top,        56,
  453.       WA_Width,     388,
  454.       WA_Height,    144,
  455.       WA_IDCMP,     IDCMP_GADGETUP | IDCMP_CLOSEWINDOW |
  456.             IDCMP_REFRESHWINDOW,
  457.       WA_Flags,     WFLG_DRAGBAR | WFLG_DEPTHGADGET |
  458.             WFLG_CLOSEGADGET | WFLG_SMART_REFRESH |
  459.             WFLG_ACTIVATE,
  460.       WA_Gadgets,    0l,
  461.       WA_Title,     (UBYTE *)"Edit Conversions",
  462.       WA_ScreenTitle,    (UBYTE *)"ResGrep - Edit Conversions",
  463.       WA_MinWidth,    67,
  464.       WA_MinHeight,    21,
  465.       WA_MaxWidth,    640,
  466.       WA_MaxHeight,    256,
  467.       TAG_DONE
  468.    };
  469.  
  470.    struct NewGadget    ng;
  471.    struct Gadget       *g;
  472.    struct IntuiMessage     theIMsg, *imsg;
  473.  
  474.    convertLabels=(UBYTE **)makeConvertLabels();
  475.    toLabels=(UBYTE **)makeToLabels( cstr2pack((char *)*convertLabels) );
  476.  
  477.    if ( NOT( g = CreateContext( &GList )))
  478.       return;
  479.  
  480.    ng.ng_LeftEdge     =    80;
  481.    ng.ng_TopEdge     =    19;
  482.    ng.ng_Width         =    81;
  483.    ng.ng_Height      =    13;
  484.    ng.ng_GadgetText     =    (UBYTE *)"Convert";
  485.    ng.ng_TextAttr     =    &topaz8;
  486.    ng.ng_GadgetID     =    GD_convert;
  487.    ng.ng_Flags         =    PLACETEXT_LEFT;
  488.    ng.ng_VisualInfo     =    VisualInfo;
  489.  
  490.    g = CreateGadget(CYCLE_KIND,g, &ng, GTCY_Labels, convertLabels, TAG_DONE );
  491.  
  492.    Gadgets[ 0 ] = g;
  493.  
  494.    ng.ng_LeftEdge     =    207;
  495.    ng.ng_Width         =    155;
  496.    ng.ng_GadgetText     =    (UBYTE *)"to";
  497.    ng.ng_GadgetID     =    GD_to;
  498.  
  499.    g = CreateGadget( CYCLE_KIND, g, &ng, GTCY_Labels, toLabels, TAG_DONE );
  500.  
  501.    Gadgets[ 1 ] = g;
  502.  
  503.    ng.ng_LeftEdge     =    80;
  504.    ng.ng_TopEdge     =    39;
  505.    ng.ng_Width         =    201;
  506.    ng.ng_GadgetText     =    (UBYTE *)"Command";
  507.    ng.ng_GadgetID     =    GD_command;
  508.  
  509.    g = CreateGadget( STRING_KIND, g, &ng, GTST_MaxChars, 256, TAG_DONE );
  510.  
  511.    Gadgets[ 2 ] = g;
  512.  
  513.    ng.ng_LeftEdge     =    292;
  514.    ng.ng_Width         =    70;
  515.    ng.ng_GadgetText     =    (UBYTE *)"Find...";
  516.    ng.ng_GadgetID     =    GD_cfind;
  517.    ng.ng_Flags         =    PLACETEXT_IN;
  518.  
  519.    g = CreateGadget( BUTTON_KIND, g, &ng, GA_Disabled, TRUE, TAG_DONE );
  520.  
  521.    Gadgets[ 3 ] = g;
  522.  
  523.    ng.ng_LeftEdge     =    81;
  524.    ng.ng_TopEdge     =    61;
  525.    ng.ng_GadgetText     =    (UBYTE *)"ARexx";
  526.    ng.ng_GadgetID     =    GD_arexx;
  527.    ng.ng_Flags         =    PLACETEXT_LEFT;
  528.  
  529.    g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, TRUE, TAG_DONE );
  530.  
  531.    Gadgets[ 4 ] = g;
  532.  
  533.    ng.ng_LeftEdge     =    233;
  534.    ng.ng_TopEdge     =    60;
  535.    ng.ng_Width         =    128;
  536.    ng.ng_Height      =    13;
  537.    ng.ng_GadgetText     =    (UBYTE *)"Write Data to";
  538.    ng.ng_GadgetID     =    GD_writeto;
  539.  
  540.    g = CreateGadget(CYCLE_KIND,g, &ng, GTCY_Labels, writetoLabels, TAG_DONE );
  541.  
  542.    Gadgets[ 5 ] = g;
  543.  
  544.    ng.ng_LeftEdge     =    80;
  545.    ng.ng_TopEdge     =    83;
  546.    ng.ng_Width         =    201;
  547.    ng.ng_GadgetText     =    (UBYTE *)"File";
  548.    ng.ng_GadgetID     =    GD_file;
  549.  
  550.    g = CreateGadget( STRING_KIND, g, &ng, GTST_MaxChars, 256, TAG_DONE );
  551.  
  552.    Gadgets[ 6 ] = g;
  553.  
  554.    ng.ng_LeftEdge     =    292;
  555.    ng.ng_Width         =    70;
  556.    ng.ng_GadgetText     =    (UBYTE *)"Find...";
  557.    ng.ng_GadgetID     =    GD_ffind;
  558.    ng.ng_Flags         =    PLACETEXT_IN;
  559.  
  560.    g = CreateGadget( BUTTON_KIND, g, &ng, GA_Disabled, TRUE, TAG_DONE );
  561.  
  562.    Gadgets[ 7 ] = g;
  563.  
  564.    ng.ng_LeftEdge     =    13;
  565.    ng.ng_TopEdge     =    110;
  566.    ng.ng_Width         =    86;
  567.    ng.ng_Height      =    19;
  568.    ng.ng_GadgetText     =    (UBYTE *)"OK";
  569.    ng.ng_GadgetID     =    GD_ok;
  570.  
  571.    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  572.  
  573.    Gadgets[ 8 ] = g;
  574.  
  575.    ng.ng_LeftEdge     =    291;
  576.    ng.ng_GadgetText     =    (UBYTE *)"Cancel";
  577.    ng.ng_GadgetID     =    GD_cancel;
  578.  
  579.    g = CreateGadget( BUTTON_KIND, g, &ng, GA_Disabled, TRUE, TAG_DONE );
  580.  
  581.    Gadgets[ 9 ] = g;
  582.  
  583.    ng.ng_LeftEdge     =    106;
  584.    ng.ng_GadgetText     =    (UBYTE *)"Add...";
  585.    ng.ng_GadgetID     =    GD_add;
  586.  
  587.    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  588.  
  589.    Gadgets[ 10 ] = g;
  590.  
  591.    ng.ng_LeftEdge     =    198;
  592.    ng.ng_GadgetText     =    (UBYTE *)"Remove";
  593.    ng.ng_GadgetID     =    GD_remove;
  594.  
  595.    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  596.  
  597.    Gadgets[ 11 ] = g;
  598.  
  599.    if ( NOT g )
  600.       return;
  601.  
  602.    WindowTags[ 6 ].ti_Data = GList;
  603.  
  604.    if ( NOT( Wnd = OpenWindowTagList( 0l, WindowTags )))
  605.       return;
  606.  
  607.    GT_RefreshWindow( Wnd, 0l );
  608.  
  609.    SelectedNode = getselnode(ConvNum,ToNum); // Initialisieren
  610.    UpdateWindow(SelectedNode,ConvNum);
  611.    for(;;)     // Main Event Loop
  612.    {
  613.  
  614.    Wait( 1UL<<(unsigned long)(Wnd->UserPort->mp_SigBit) );
  615.    while( (imsg=GT_GetIMsg(Wnd->UserPort)) != NULL )
  616.    {
  617.       // Message kopieren und orginale sofort zurⁿckschicken.
  618.       theIMsg=*imsg;
  619.       GT_ReplyIMsg(imsg);
  620.       switch( theIMsg.Class )
  621.       {
  622.        case IDCMP_INTUITICKS:
  623.      break;
  624.        case IDCMP_CLOSEWINDOW:
  625.      ((convert *)SelectedNode)->ReadText();
  626.      ActiveNode(SelectedNode);
  627.      if( Wnd )
  628.         CloseWindow( Wnd );
  629.      if ( GList )
  630.         FreeGadgets( GList );
  631.      return;
  632.      break;
  633.        case IDCMP_GADGETUP:
  634.      switch( ((struct Gadget *)theIMsg.IAddress)->GadgetID )
  635.      {
  636.       case GD_convert:
  637.         ((convert *)SelectedNode)->ReadText();
  638.         ActiveNode(SelectedNode);
  639.         ConvNum = theIMsg.Code;
  640.         ToNum = 0;
  641.         SelectedNode = getselnode(ConvNum,ToNum);
  642.         if( SelectedNode!=NULL )
  643.            UpdateWindow(SelectedNode,ConvNum);
  644.         break;
  645.       case GD_to:
  646.         ((convert *)SelectedNode)->ReadText();
  647.         ToNum = theIMsg.Code;
  648.         SelectedNode = getselnode(ConvNum,ToNum);
  649.         if( SelectedNode!=NULL )
  650.            UpdateWindow(SelectedNode,ConvNum);
  651.         break;
  652.       case GD_command: // Wird schon in 'convert' und 'to' erledigt.
  653.       case GD_file:
  654.         break;
  655.       case GD_arexx:
  656.         ((convert *)SelectedNode)->isARexx =
  657.            ((convert *)SelectedNode)->isARexx ? false : true ;
  658.         break;
  659.       case GD_writeto:
  660.         switch( theIMsg.Code )
  661.         {
  662.          case 0:
  663.            ((convert *)SelectedNode)->sendto = Clipboard;
  664.            break;
  665.          case 1:
  666.            ((convert *)SelectedNode)->sendto = File;
  667.            break;
  668.          default:
  669.            ResError("Fatal:\nUnknown WriteTo method.");
  670.            break;
  671.         }
  672.         if( SelectedNode!=NULL )
  673.            UpdateWindow(SelectedNode,ConvNum);
  674.         break;
  675.       case GD_ok:
  676.         ((convert *)SelectedNode)->ReadText();
  677.         ActiveNode(SelectedNode);
  678.         if( Wnd )
  679.            CloseWindow( Wnd );
  680.         if ( GList )
  681.            FreeGadgets( GList );
  682.         ActiveNode(SelectedNode);
  683.         return;
  684.         break;
  685.       case GD_add:
  686.         {
  687.            unsigned long newtype, ret;
  688.            if( (ret=addconv(&newtype))!=0 )
  689.            {
  690.           if( ret!= 12)
  691.              ResError("An Error occured while\n"
  692.                   "adding a new conversion.");
  693.           break;
  694.            }
  695.            conversions->enqueuepack( new
  696.           convert(newtype,0,"raw data",NULL,
  697.               false,File,"T:ResGrepRawData",false) );
  698.            if(convertLabels!=NULL)
  699.           free(convertLabels);
  700.            convertLabels=(UBYTE **)makeConvertLabels();
  701.            ConvNum=0;
  702.            ToNum=0;
  703.            SelectedNode = getselnode(ConvNum,ToNum); // Initialisieren
  704.            UpdateWindow(SelectedNode, ConvNum);
  705.         }
  706.         break;
  707.       case GD_remove:
  708.         if( ((convert *)SelectedNode)->builtin==true )
  709.         {
  710.            ResError("Can't remove builtin function.");
  711.            break;
  712.         }
  713.         conversions->remove(SelectedNode);
  714.         if(convertLabels!=NULL)
  715.            free(convertLabels);
  716.         convertLabels=(UBYTE **)makeConvertLabels();
  717.         ConvNum = 0;
  718.         ToNum = 0;
  719.         SelectedNode = getselnode(ConvNum,ToNum);
  720.         if( SelectedNode!=NULL )
  721.            UpdateWindow(SelectedNode,ConvNum);
  722.         break;
  723.       default:
  724.         ResError("Fatal:\nUnknown Gadget.\n");
  725.         break;
  726.      }
  727.      if( SelectedNode==NULL )
  728.      {
  729.         ResError("Fatal:\nSelected Node == NULL.\nBetter I quit.");
  730.         if( Wnd )
  731.            CloseWindow( Wnd );
  732.         if ( GList )
  733.            FreeGadgets( GList );
  734.         return;
  735.      }
  736.      break;
  737.        default:
  738.      printf("Unbekannte Meldg: %08lx %04x\n",theIMsg.Class, theIMsg.Code);
  739.      ResWarning("Unknown Message.\n");
  740.       }
  741.    }
  742.  
  743.    } // End forever
  744. }
  745.  
  746.  
  747.  
  748.  
  749.