home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 4 / CDPD_IV.bin / utilities / system / megaview / source / editor / faedit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-29  |  18.7 KB  |  584 lines

  1. #include    "global.h"
  2. #include    "locale.h"
  3.  
  4. #define CONFIG_TEMPLATE (APTR)"TYPE/K/A,ACTION/K/A,QUOTES/S"
  5. #define CT_TYPE         0
  6. #define CT_ACTION       1
  7. #define CT_QUOTES       2
  8. #define CT_LENGTH       3
  9.  
  10. #define NO_LISTSELECT       1
  11. #define NO_ACTIONTRIGGER    2
  12. #define NO_QUOTETRIGGER     3
  13. #define NO_SAVEACTION       4
  14. #define NO_LOADACTION       5
  15. #define NO_ABOUT            6
  16. #define NO_SAVEACTIONA      7
  17.  
  18. #define LE_QUOTES           1
  19.  
  20. Object  *app,       /*  Application object  */
  21.         *win,       /*  Application window  */
  22.         *ob_lv,     /*  Type listview       */
  23.         *ob_st,     /*  Type string         */
  24.         *ob_ast,    /*  Action string       */
  25.         *ob_qu,     /*  Action quote tick   */
  26.         *ob_save,   /*  Save button         */
  27.         *ob_load,   /*  Load button         */
  28.         *ob_add,    /*  Add button          */
  29.         *ob_edit,   /*  Edit filetype       */
  30.         *ob_loadt,  /*  Load filetype       */
  31.         *ob_savet;  /*  Save filetype       */
  32.  
  33. struct NewMenu NM_Edit[] =
  34. {
  35.     NM_TITLE, NULL, NULL, 0, 0L, NULL,
  36.         NM_ITEM, NULL, NULL, 0, 0l, (APTR)NO_ABOUT,
  37.         NM_ITEM, NM_BARLABEL, NULL, 0, 0l, NULL, 
  38.         NM_ITEM, NULL, NULL, 0, 0l, (APTR)NO_LOADACTION,
  39.         NM_ITEM, NM_BARLABEL, NULL, 0, 0l, NULL, 
  40.         NM_ITEM, NULL, NULL, 0, 0l, (APTR)NO_SAVEACTIONA,
  41.         NM_ITEM, NULL, NULL, 0, 0l, (APTR)NO_SAVEACTION,
  42.         NM_ITEM, NM_BARLABEL, NULL, 0, 0l, NULL, 
  43.         NM_ITEM, NULL, NULL, 0, 0l, (APTR)MUIV_Application_ReturnID_Quit,
  44.     NM_END, NULL, NULL, 0, 0L, NULL
  45. };
  46.  
  47. struct Library *IntuitionBase, *MUIMasterBase, *WhatIsBase, *LocaleBase;
  48.  
  49. int winopen;
  50. struct lv_ListEntry {
  51.     char le_FileType[10];
  52.     UWORD le_Flags;
  53.     char *le_FileAction;
  54. };
  55. struct lv_ListEntry *SelectEntry, *NewEntry;
  56. LONG ConfigLine[CT_LENGTH];
  57. char ActionBuffer[256];
  58. BOOL ActionQuotes;
  59. char ACTIONFILE[256];
  60. char *centries[] = { "Don't use quotes", "Use quotes", NULL};
  61. char empty[] = "";
  62.  
  63. extern ULONG HookEntry(struct Hook *, Object *, APTR);
  64. struct Hook lv_Construct, lv_Destruct, lv_Display, lv_Compare;
  65. struct FileRequester *request;
  66. char FileName[256];
  67. struct TagItem ftag[5] = {
  68.     ASL_Hail,   NULL, 
  69.     ASL_File,   NULL,
  70.     ASL_Dir,    NULL,
  71.     NULL,       FILF_SAVE,
  72.     TAG_DONE,   NULL
  73. };
  74.  
  75.  
  76. BOOL FileRequest(BOOL save, char *filen, char *dirn) {
  77.  
  78.     static char dir[256] = "\0";
  79.     BOOL result;
  80.  
  81.     ftag[0].ti_Data = (ULONG)((save) ?  GetString(msgSelectFileSave) :  GetString(msgSelectFileLoad));
  82.     ftag[1].ti_Data = (ULONG)filen;
  83.     ftag[2].ti_Data = (ULONG)dirn;
  84.     ftag[3].ti_Tag  = (save) ? ASL_FuncFlags : TAG_IGNORE;
  85.  
  86.     if (!request) request = (struct FileRequester *)MUI_AllocAslRequest(ASL_FileRequest,ftag);
  87.  
  88.     if (request == NULL)
  89.         return(FALSE);
  90.  
  91.     result = MUI_AslRequest(request,NULL);
  92.  
  93.     if (result == FALSE) 
  94.         return(FALSE);
  95.  
  96.     strcpy(dir,(char *)(request->rf_Dir));
  97.     strncpy(FileName,(char *)(request->rf_Dir),256);
  98.     AddPart((STRPTR)FileName,(STRPTR)request->rf_File,256);
  99.  
  100.     return(TRUE);
  101. }
  102.  
  103.  
  104. void CloseAll(STRPTR printme) {
  105.     if (printme)
  106.         printf("%s/n",(char *)printme);
  107.     if (IntuitionBase)      CloseLibrary(IntuitionBase);
  108.     if (MUIMasterBase)      CloseLibrary(MUIMasterBase);
  109.     if (WhatIsBase)         CloseLibrary(WhatIsBase);
  110. }
  111.  
  112.  
  113. void OpenAll(void) {
  114.     if (!(IntuitionBase = OpenLibrary((APTR)"intuition.library",37L)))
  115.         CloseAll(GetString(msgYouNeed20));
  116.     if (!(MUIMasterBase = OpenLibrary((APTR)"muimaster.library",0L)))
  117.         CloseAll(GetString(msgYouNeedMUI));
  118.     if (!(WhatIsBase    = OpenLibrary((APTR)"whatis.library",0l)))
  119.         CloseAll(GetString(msgCantOpenWhatIs));
  120.     LocaleBase = OpenLibrary((APTR)"locale.library",0l);
  121. }
  122.  
  123.  
  124. BOOL Scan(char *type, APTR buf, ULONG bufsize, BOOL *quotes) {
  125.     BPTR fh=NULL;
  126.     APTR cs;
  127.     int line=0;
  128.     int c=0;
  129.     UBYTE *cur;
  130.     BOOL res=TRUE;
  131.     struct RDArgs *myargs=NULL,*ap;
  132.  
  133.     fh=Open((APTR) ACTIONFILE,MODE_OLDFILE);
  134.     if (!fh) return(FALSE);
  135.     cs= AllocVec(512,MEMF_CLEAR|MEMF_ANY);
  136.     if (!cs) {
  137.         if (fh) Close(fh);
  138.         fh=NULL;
  139.         return FALSE;
  140.     }
  141.     myargs=(struct RDArgs *)AllocDosObject(DOS_RDARGS,TAG_DONE);
  142.     if (!myargs) {
  143.         if (fh) Close(fh);
  144.         fh = NULL;
  145.         FreeVec(cs);
  146.         return FALSE;
  147.     }
  148.     do {
  149.         line++;
  150.         cur=(UBYTE *)FGets(fh,(STRPTR)cs,512);
  151.         if (!cur) {
  152.             res=FALSE;
  153.             break;
  154.         }
  155.         c=0;
  156.         c=strlen(cur);
  157.         if (*cur==';') continue;
  158.         if (*cur=='\n') continue;
  159.         if (cur[c-1]!='\n') {
  160.             MUI_Request(app, win, 0, (char *)GetString(msgFAEditMsg), (char *)GetString(msgOK),
  161.               (char *)GetString(msgMissingNEWLINE));
  162.             res=FALSE;
  163.             break;
  164.         }
  165.         myargs->RDA_Flags |= RDAF_NOPROMPT;
  166.         myargs->RDA_Source.CS_Buffer = cs;
  167.         myargs->RDA_Source.CS_Length = c;
  168.         myargs->RDA_Source.CS_CurChr = 0L;
  169.         ap=ReadArgs(CONFIG_TEMPLATE,ConfigLine,myargs);
  170.         if (!ap) {
  171.             res=FALSE;
  172.             Fault(IoErr(),NULL, cs, 512);
  173.             MUI_Request(app, win, 0, (char *)GetString(msgFAEditMsg), (char *)GetString(msgOK),
  174.               (char *)GetString(msgParseError), line, (char *)cs);
  175.             break;
  176.         }
  177.         if (stricmp(type,(char *)ConfigLine[CT_TYPE])==0) {
  178.             strncpy((char *)buf,(char *)ConfigLine[CT_ACTION],bufsize);
  179.             res=TRUE;
  180.             if (bufsize<strlen((char *)ConfigLine[CT_ACTION])) res=FALSE;
  181.             *quotes = ConfigLine[CT_QUOTES];
  182.             break;
  183.         }
  184.         FreeArgs(ap);
  185.     } while (1);
  186.     if (fh) Close(fh);
  187.     fh = NULL;
  188.     if (cs) FreeVec(cs);
  189.     if (myargs) FreeDosObject(DOS_RDARGS,myargs);
  190.     return res;
  191. }
  192.  
  193. ULONG   ConstructLV(struct Hook *hook, struct lv_ListEntry *entry, APTR pool) {
  194.     geta4();
  195.     return((ULONG)entry);
  196. }
  197.  
  198.  
  199. ULONG   DestructLV(struct Hook *hook, struct lv_ListEntry *entry, APTR pool) {
  200.     geta4();
  201.     FreeVec(entry->le_FileAction);
  202.     FreeVec(entry);
  203.     return(0);
  204. }
  205.  
  206.  
  207. ULONG   DisplayLV(struct Hook *hook, struct lv_ListEntry *entry, char **array) {
  208.     geta4();
  209.     *array = entry->le_FileType;
  210.     return(0);
  211. }
  212.  
  213.  
  214. ULONG   CompareLV(struct Hook *hook, struct lv_ListEntry *e1, struct lv_ListEntry *e2) {
  215.     geta4();
  216.     return(stricmp(e1->le_FileType, e2->le_FileType));
  217. }
  218.  
  219.  
  220. void BuildList() {
  221.     struct lv_ListEntry *le;
  222.     FileType ft;
  223.     char *IDString;
  224.     int stl;
  225.  
  226.     ft = FirstType();
  227.  
  228.     set(ob_lv, MUIA_List_Quiet, TRUE);
  229.  
  230.     while (ft) {
  231.         IDString = GetIDString(ft);
  232.         if (Scan(IDString, (APTR)ActionBuffer, 255, &ActionQuotes)) {
  233.             stl = strlen(ActionBuffer);
  234.         } else {
  235.             stl = 0;
  236.             ActionQuotes = TRUE;
  237.             strcpy(ActionBuffer,"");
  238.         }
  239.         le = AllocVec(sizeof(struct lv_ListEntry), MEMF_ANY);
  240.         le->le_FileAction = AllocVec(stl, MEMF_ANY);
  241.         strcpy(le->le_FileType,IDString);
  242.         le->le_Flags = LE_QUOTES * (ActionQuotes == TRUE);
  243.         strcpy(le->le_FileAction,ActionBuffer);
  244.         DoMethod(ob_lv, MUIM_List_Insert, &le, 1, MUIV_List_Insert_Sorted);
  245.         ft = NextType(ft);
  246.     }
  247.  
  248.     set(ob_lv, MUIA_List_Quiet, FALSE);
  249. }
  250.  
  251.  
  252. BOOL WriteActionList(char *file) {
  253.  
  254.     struct lv_ListEntry *entry;
  255.     BPTR fh;
  256.     int i;
  257.     char buffer[256];
  258.     char error[256];
  259.     LONG returnedLength, err;
  260.  
  261.     fh = Open((STRPTR)file, MODE_NEWFILE);
  262.     if (fh) {
  263.         for(i=0;;i++) {
  264.  
  265.             DoMethod(ob_lv, MUIM_List_GetEntry, i, &entry);
  266.             if (!entry) break;
  267.  
  268.             if (strcmp(entry->le_FileAction,"") != 0) {
  269.                 sprintf(buffer, "TYPE \"%s\"\t ACTION \"%s\" %s\n",
  270.                         entry->le_FileType, 
  271.                         entry->le_FileAction, 
  272.                         (entry->le_Flags & LE_QUOTES) ? "QUOTES" : " ");
  273.                 returnedLength =  Write(fh, buffer, strlen(buffer));
  274.                 if (err = IoErr()) {
  275.                     Fault(err, NULL, (STRPTR)error, 256);
  276.                     sprintf(buffer, GetString(msgUnableToWrite), file, error);
  277.                     MUI_Request(app, win, 0, (char *)GetString(msgFAEditMsg), (char *)GetString(msgOK) , buffer);
  278.                     break;
  279.                 }
  280.             }
  281.         }
  282.         Close(fh);
  283.     } else {
  284.         err = IoErr();
  285.         Fault(err, NULL, (STRPTR)error, 256);
  286.         sprintf(buffer, GetString(msgUnableToWrite), file, error);
  287.         MUI_Request(app, win, 0, (char *)GetString(msgFAEditMsg), (char *)GetString(msgOK), buffer);
  288.     }
  289. }
  290.  
  291.  
  292. void SaveActionList() {
  293.  
  294.     char *file;
  295.     char buffer[256];
  296.     char path[256];
  297.     char error[256];
  298.     BPTR fh;
  299.     LONG err;
  300.  
  301.     strcpy(path,ACTIONFILE);
  302.     file = (char *)FilePart((STRPTR)path);
  303.     strcpy(buffer,file);
  304.     *file = '\0';
  305.  
  306.     if (FileRequest(TRUE, buffer, path)) {
  307.         if (strcmp((char *)FilePart((STRPTR)FileName),"") == 0) {
  308.             MUI_Request(app, win, 0, (char *)GetString(msgFAEditMsg) , (char *)GetString(msgOK), (char *)GetString(msgInvalidFilename));
  309.         } else {
  310.             fh = Lock((STRPTR)FileName, ACCESS_WRITE);
  311.             if (fh) {
  312.                 UnLock(fh);
  313.                 sprintf(buffer, (char *)GetString(msgOverwrite), FileName);
  314.                 if (MUI_Request(app, win, 0, (char *)GetString(msgFAEditMsg), (char *)GetString(msgOkCancel), buffer)) {
  315.                     WriteActionList(FileName);
  316.                     strcpy(ACTIONFILE, FileName);                
  317.                 }
  318.             } else {
  319.                 err = IoErr();
  320.                 if (err == ERROR_OBJECT_NOT_FOUND) {
  321.                     WriteActionList(FileName);
  322.                     strcpy(ACTIONFILE, FileName);                
  323.                 } else {
  324.                     Fault(err, NULL, (STRPTR)error, 256);
  325.                     sprintf(buffer, (char *)GetString(msgUnableToWrite), FileName, error);
  326.                     MUI_Request(app, win, 0, (char *)GetString(msgFAEditMsg), (char *)GetString(msgOK), buffer);
  327.                 }
  328.             }
  329.         }
  330.     }
  331. }
  332.  
  333.  
  334. void LoadActionList() {
  335.  
  336.     char *file;
  337.     char buffer[256];
  338.     char path[256];
  339.     char error[256];
  340.     BPTR fh;
  341.     LONG err;
  342.  
  343.     strcpy(path,ACTIONFILE);
  344.     file = (char *)FilePart((STRPTR)path);
  345.     strcpy(buffer,file);
  346.     *file = '\0';
  347.  
  348.     if (FileRequest(FALSE, buffer, path)) {
  349.         if (fh = Lock((STRPTR)FileName, ACCESS_READ)) {
  350.             strcpy(ACTIONFILE, FileName); 
  351.             UnLock(fh);
  352.             DoMethod(ob_lv, MUIM_List_Clear);
  353.             BuildList();
  354.             set(ob_ast, MUIA_String_Contents, empty);
  355.         } else {
  356.             err = IoErr();
  357.             Fault(err, NULL, (STRPTR)error, 256);
  358.             sprintf(buffer, (char *)GetString(msgUnableToOpen), FileName, error);
  359.             MUI_Request(app, win, 0, (char *)GetString(msgFAEditMsg), (char *)GetString(msgOK), buffer);
  360.         }
  361.     }
  362. }
  363.  
  364.  
  365. void main(void) {
  366.     BOOL      running = TRUE;
  367.     ULONG     sig, leng, state;
  368.     int       i;
  369.     char      *stcontents;
  370.     char      HotLoad, HotSave;
  371.     char      buffer[256];
  372.     char      lProject[30],
  373.               lAbout[30],
  374.               lOpen[30],
  375.               lSave[30],
  376.               lSaveAs[30],
  377.               lQuit[30],
  378.               lDont[40],
  379.               lDo[40],
  380.               lhAbout[2],
  381.               lhOpen[2],
  382.               lhSave[2],
  383.               lhQuit[2];
  384.  
  385.  
  386.     OpenAll();
  387.     OpenFAEditCatalog(NULL, NULL);
  388.  
  389.     i = GetVar((STRPTR)"MegaViewACTION", (STRPTR)ACTIONFILE, 49, 0l);
  390.     if (i==-1)
  391.         strcpy(ACTIONFILE,"s:FileActions");
  392.  
  393.     lv_Construct.h_Entry    =   HookEntry;
  394.     lv_Construct.h_SubEntry =   ConstructLV;
  395.  
  396.     lv_Destruct.h_Entry     =   HookEntry;
  397.     lv_Destruct.h_SubEntry  =   DestructLV;
  398.  
  399.     lv_Display.h_Entry      =   HookEntry;
  400.     lv_Display.h_SubEntry   =   DisplayLV;
  401.  
  402.     lv_Compare.h_Entry      =   HookEntry;
  403.     lv_Compare.h_SubEntry   =   CompareLV;
  404.  
  405.     strcpy(buffer, (char *)GetString(msgHotKeys));
  406.  
  407.     HotLoad        = buffer[0];
  408.     HotSave        = buffer[1];
  409.     lhAbout[0]     = buffer[2];   lhAbout[1]     = 0;
  410.     lhOpen[0]      = buffer[3];   lhOpen[1]      = 0;
  411.     lhSave[0]      = buffer[4];   lhSave[1]      = 0;
  412.     lhQuit[0]      = buffer[5];   lhQuit[1]      = 0;
  413.  
  414.     strcpy(lProject,    (char *)GetString(msgProject));
  415.     strcpy(lAbout,      (char *)GetString(msgAbout));
  416.     strcpy(lOpen,       (char *)GetString(msgOpen));
  417.     strcpy(lSave,       (char *)GetString(msgSave));
  418.     strcpy(lSaveAs,     (char *)GetString(msgSaveAs));
  419.     strcpy(lQuit,       (char *)GetString(msgQuit));
  420.  
  421.     strcpy(lDont,       (char *)GetString(msgNoQuotes));
  422.     strcpy(lDo,         (char *)GetString(msgQuotes));
  423.  
  424.     centries[0]    =    lDont;
  425.     centries[1]    =    lDo;
  426.  
  427.     NM_Edit[0].nm_Label      =    (STRPTR)lProject;
  428.     NM_Edit[1].nm_Label      =    (STRPTR)lAbout;
  429.     NM_Edit[1].nm_CommKey    =    (STRPTR)lhAbout;
  430.     NM_Edit[3].nm_Label      =    (STRPTR)lOpen;
  431.     NM_Edit[3].nm_CommKey    =    (STRPTR)lhOpen;
  432.     NM_Edit[5].nm_Label      =    (STRPTR)lSave;
  433.     NM_Edit[5].nm_CommKey    =    (STRPTR)lhSave;
  434.     NM_Edit[6].nm_Label      =    (STRPTR)lSaveAs;
  435.     NM_Edit[8].nm_Label      =    (STRPTR)lQuit;
  436.     NM_Edit[8].nm_CommKey    =    (STRPTR)lhQuit;
  437. /*    NM_Edit[8].nm_Type       =    NM_ITEM;
  438.     NM_Edit[8].nm_UserData   =    (APTR)MUIV_Application_ReturnID_Quit; */
  439.  
  440.  
  441.     app = ApplicationObject,
  442.         MUIA_Application_Title,         "FAEdit",
  443.         MUIA_Application_Version,       "$VER: FAEdit 1.01",
  444.         MUIA_Application_Copyright,     "© 1993 Thomas & Hans-Joerg Frieden", 
  445.         MUIA_Application_Author,        "Thomas Frieden",
  446.         MUIA_Application_Description,   (char *)GetString(msgFileactionEditor),
  447.         MUIA_Application_Base,          "FAEDIT", 
  448.         MUIA_Application_Menu,          NM_Edit, 
  449.  
  450.         SubWindow,  win = WindowObject,
  451.             MUIA_Window_Width,          MUIV_Window_Width_Screen(80),
  452.             MUIA_Window_Height,         MUIV_Window_Height_Screen(80),
  453.             MUIA_Window_Title,          "FAEdit V1.01 © 1993 Thomas & Hans-Jörg Frieden",
  454.             WindowContents, HGroup,     MUIA_Group_SameHeight, TRUE,
  455.  
  456.             Child, VGroup,  GroupFrameT((char *)GetString(msgType)),
  457.                  Child,  ob_lv = ListviewObject,
  458.                      MUIA_Listview_Input,TRUE,
  459.                      MUIA_Listview_List, ListObject,
  460.                          InputListFrame,
  461.                          MUIA_List_DisplayHook,  lv_Display,
  462.                          MUIA_List_CompareHook,  lv_Compare,
  463.                          MUIA_List_ConstructHook,lv_Construct,
  464.                          MUIA_List_DestructHook, lv_Destruct,
  465.                      End, // ListObject
  466.                 End,    // ListviewObject
  467.             End,   // VGroup
  468.  
  469.             Child, VGroup,
  470.                 Child, VGroup,  
  471.                        GroupFrameT((char *)GetString(msgAction)),
  472.  
  473.                         Child,  ob_ast = StringObject,
  474.                             StringFrame,
  475.                         End, // StringObject
  476.  
  477.                         Child,  ob_qu = CycleObject,
  478.                             MUIA_Cycle_Entries,     centries,
  479.                         End, // CycleObject
  480.  
  481.                     End,     // VGroup
  482.                     Child,  VSpace(0),
  483.                     Child,  VGroup, GroupFrameT((char *)GetString(msgDiskIO)),
  484.                         Child,  ob_load  =  KeyButton((char *)GetString(msgLoadFileactions), HotLoad),
  485.                         Child,  ob_save  =  KeyButton((char *)GetString(msgSaveFileactions), HotSave),
  486.                     End,     // VGroup
  487.                 End,    // VGroup
  488.             End, // HGroup
  489.         End,  // WindowObject
  490.     End; // Application
  491.  
  492.  
  493.         DoMethod(win, MUIM_Window_SetCycleChain, ob_lv, ob_ast, ob_qu, 
  494.             ob_load, ob_save);
  495.         DoMethod(win, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
  496.             app, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
  497.         DoMethod(ob_lv, MUIM_Notify, MUIA_List_Active, MUIV_EveryTime,
  498.             app, 2, MUIM_Application_ReturnID, NO_LISTSELECT);
  499.         DoMethod(ob_ast, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime,
  500.             app, 2, MUIM_Application_ReturnID, NO_ACTIONTRIGGER);
  501.         DoMethod(ob_qu, MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime,  
  502.             app, 2, MUIM_Application_ReturnID, NO_QUOTETRIGGER);
  503.         DoMethod(ob_save, MUIM_Notify, MUIA_Pressed, FALSE, 
  504.             app, 2, MUIM_Application_ReturnID, NO_SAVEACTION);
  505.         DoMethod(ob_load, MUIM_Notify, MUIA_Pressed, FALSE,
  506.             app, 2, MUIM_Application_ReturnID, NO_LOADACTION);
  507.  
  508.         BuildList();
  509.  
  510.         set(win, MUIA_Window_Open, TRUE);
  511.         get(win, MUIA_Window_Open, &winopen);
  512.  
  513.         if (!winopen) {
  514.             MUI_Request(app, win, 0, (char *)GetString(msgFAEditMsg), (char *)GetString(msgOK), (char *)GetString(msgFailedToOpenMUI));
  515.             MUI_DisposeObject(app);
  516.             CloseAll(NULL);
  517.             exit(0);
  518.         }
  519.  
  520.         running = TRUE;
  521.  
  522.         while (running) {
  523.             switch(DoMethod(app,MUIM_Application_Input,&sig)) {
  524.             case NO_ACTIONTRIGGER:
  525.                 DoMethod(ob_lv, MUIM_List_GetEntry, MUIV_List_GetEntry_Active,
  526.                     &SelectEntry);
  527.                 get(ob_ast, MUIA_String_Contents, &stcontents);
  528.  
  529.                 FreeVec(SelectEntry->le_FileAction);
  530.                 SelectEntry->le_FileAction = AllocVec(strlen(stcontents), MEMF_ANY);
  531.                 strcpy(SelectEntry->le_FileAction, stcontents);
  532.  
  533.                 break;
  534.  
  535.             case NO_QUOTETRIGGER:
  536.                 DoMethod(ob_lv, MUIM_List_GetEntry, MUIV_List_GetEntry_Active,
  537.                     &SelectEntry);
  538.                 get(ob_qu, MUIA_Cycle_Active, &state);
  539.  
  540.                   if (state == 1) 
  541.                     SelectEntry->le_Flags |= LE_QUOTES;
  542.                 else
  543.                     SelectEntry->le_Flags = 0;
  544.                         
  545.                 break;
  546.  
  547.             case NO_LISTSELECT:
  548.                 DoMethod(ob_lv, MUIM_List_GetEntry, MUIV_List_GetEntry_Active,
  549.                     &SelectEntry);
  550.                 if (SelectEntry->le_FileAction)
  551.                     set(ob_ast, MUIA_String_Contents, SelectEntry->le_FileAction);
  552.                 set(ob_qu, MUIA_Cycle_Active, (SelectEntry->le_Flags && LE_QUOTES));
  553.                 break;
  554.  
  555.             case NO_SAVEACTION:
  556.                 SaveActionList();
  557.                 break;
  558.  
  559.             case NO_SAVEACTIONA:
  560.                 WriteActionList(ACTIONFILE);
  561.                 break;
  562.  
  563.             case NO_LOADACTION:
  564.                 LoadActionList();
  565.                 break;
  566.  
  567.             case NO_ABOUT:
  568.                 MUI_Request(app, win, 0, (char *)GetString(msgFAEditMsg), (char *)GetString(msgOK), (char *)GetString(msgAboutText));
  569.                 break;
  570.  
  571.             case MUIV_Application_ReturnID_Quit:
  572.                 running = FALSE;
  573.                 break;
  574.             }
  575.             if (running && sig)
  576.                 Wait(sig);
  577.         }
  578.         DoMethod(ob_lv, MUIM_List_Clear, NULL);
  579.         MUI_DisposeObject(app);
  580.  
  581.     CloseFAEditCatalog();
  582.     CloseAll(NULL);
  583. }
  584.