/* $Revision Header *** Header built automatically - do not edit! ***********
 *
 *	(C) Copyright 1993 by Amit Fridman
 *
 *	Name .....: FBase.c
 *	Created ..: Tuesday 14-Dec-93 11:41:37
 *	Revision .: 5
 *
 *	Date        Author                 Comment
 *	=========   ====================   ====================
 *	13-May-94   Amit Fridman           v1.05 Preliminary release
 *	15-Apr-94   Amit Fridman           v1.04 Beta version complete
 *	24-Mar-94   Amit Fridman           v1.03 Added Keys
 *	24-Feb-94   Amit Fridman           v1.02
 *	07-Jan-94   Amit Fridman           v1.01
 *	14-Dec-93   Amit Fridman           Created this file!
 *
 * $Revision Header ********************************************************/
#define REVISION	5

/* FBase user interface */

#include "FBase.h"
#include "Protos.h"

LONG __stack = 8192;

#define VSPACER(x) MUI_NewObject(MUIC_Rectangle,MUIA_HorizWeight,0,MUIA_VertWeight,x,TAG_DONE)
#define KeyButtonH(name,key,node)\
	TextObject,\
		ButtonFrame,\
		MUIA_Text_Contents, name,\
		MUIA_Text_PreParse, "\33c",\
		MUIA_Text_HiChar  , key,\
		MUIA_ControlChar  , key,\
		MUIA_InputMode    , MUIV_InputMode_RelVerify,\
		MUIA_Background   , MUII_ButtonBack,\
		MUIA_HelpNode     , node,\
		End

enum {
   ID_DUMMY,
   ID_NEW,ID_OPEN,ID_SAVE,ID_SAVEAS,ID_PRINT_ALL,ID_PRINT_TITLES,ID_ABOUT,
   ID_READ,ID_VIEW,ID_EDIT,ID_KILL,
   ID_FIND,
   ID_KEYS,
   ID_DISK,
   ID_DELETE,ID_RENAME,ID_REMARK,ID_RKEYS,ID_CONTENTS_OK,ID_CONTENTS_CANCEL,
   ID_VIEW_SELECT,ID_VIEW_CANCEL,
   ID_FINFO_CANCEL,
   ID_RENAME_OK,ID_RENAME_CANCEL,
   ID_REMARK_OK,ID_REMARK_CANCEL,
   ID_MATCH,ID_SET_KEYS,ID_MATCH_OK,ID_MATCH_CANCEL,
   ID_FILES_SELECT,ID_FILES_CANCEL,
   ID_KEYS_ADD,ID_KEYS_DEL,ID_KEYS_NAME,ID_KEYS_CHANGE,ID_KEYS_OK,ID_KEYS_CANCEL,
   ID_KS_STOD,ID_KS_DTOS,ID_KS_CANCEL,
   ID_RK_STOD,ID_RK_DTOS,ID_RK_OK,ID_RK_CANCEL,
   ID_PRINT_CONTENTS,ID_PRINT_MATCH,ID_PRINT_FINFO,
};

struct NewMenu FBase_Menu[] =
{
   {NM_TITLE,"Project"    ,NULL,0,0,NULL},
   {NM_ITEM ,"New"        ,"N" ,0,0,(APTR)ID_NEW},
   {NM_ITEM ,"Open ..."   ,"O" ,0,0,(APTR)ID_OPEN},
   {NM_ITEM , NM_BARLABEL ,NULL,0,0,NULL},
   {NM_ITEM ,"Save"       ,"S" ,0,0,(APTR)ID_SAVE},
   {NM_ITEM ,"SaveAs ..." ,NULL,0,0,(APTR)ID_SAVEAS},
   {NM_ITEM , NM_BARLABEL ,NULL,0,0,NULL},
   {NM_ITEM ,"Print"      ,NULL,0,0,NULL},
   {NM_SUB  ,"All"        ,"P" ,0,0,(APTR)ID_PRINT_ALL},
   {NM_SUB  ,"Titles"     ,"T" ,0,0,(APTR)ID_PRINT_TITLES},
   {NM_ITEM , NM_BARLABEL ,NULL,0,0,NULL},
   {NM_ITEM ,"About"      ,NULL,0,0,(APTR)ID_ABOUT},
   {NM_ITEM ,"Quit"       ,"Q" ,0,0,(APTR)MUIV_Application_ReturnID_Quit},
   {NM_TITLE,"Action"     ,NULL,0,0,NULL},
   {NM_ITEM ,"Read Floppy","R" ,0,0,(APTR)ID_READ},
   {NM_ITEM , NM_BARLABEL ,NULL,0,0,NULL},
   {NM_ITEM ,"View Floppy","V" ,0,0,(APTR)ID_VIEW},
   {NM_ITEM ,"Edit Floppy","E" ,0,0,(APTR)ID_EDIT},
   {NM_ITEM ,"Kill Floppy",NULL,0,0,(APTR)ID_KILL},
   {NM_ITEM , NM_BARLABEL ,NULL,0,0,NULL},
   {NM_ITEM ,"Find ..."   ,"F" ,0,0,(APTR)ID_FIND},
   {NM_ITEM ,"Keys ..."   ,"Y" ,0,0,(APTR)ID_KEYS},
   {NM_END  ,NULL         ,NULL,0,0,NULL}
};

struct NewMenu Contents_Menu[] =
{
   {NM_TITLE,"Project",NULL,0,0,NULL},
   {NM_ITEM ,"Print"  ,"P" ,0,0,(APTR)ID_PRINT_CONTENTS},
   {NM_TITLE,"Action" ,NULL,0,0,NULL},
   {NM_ITEM ,"Delete" ,"D" ,0,0,(APTR)ID_DELETE},
   {NM_ITEM ,"Rename" ,"R" ,0,0,(APTR)ID_RENAME},
   {NM_ITEM ,"Remark" ,"M" ,0,0,(APTR)ID_REMARK},
   {NM_ITEM ,"Keys"   ,"K" ,0,0,(APTR)ID_RKEYS},
   {NM_END  ,NULL     ,NULL,0,0,NULL}
};

struct NewMenu Match_Menu[] =
{
   {NM_TITLE,"Project",NULL,0,0,NULL},
   {NM_ITEM ,"Print"  ,"P" ,0,0,(APTR)ID_PRINT_MATCH},
   {NM_END  ,NULL     ,NULL,0,0,NULL}
};

struct NewMenu FInfo_Menu[] =
{
   {NM_TITLE,"Project",NULL,0,0,NULL},
   {NM_ITEM ,"Print"  ,"P" ,0,0,(APTR)ID_PRINT_FINFO},
   {NM_END  ,NULL     ,NULL,0,0,NULL}
};


extern struct List FloppyList;

struct Library *MUIMasterBase;
Object *App;
Object *WI_Main,*WI_Contents,*WI_View,*WI_Rename,*WI_Remark,*WI_Match;
Object *WI_Files,*WI_Keys,*WI_KeySearch,*WI_RecKeys,*WI_FileInfo;
Object *LV_Floppies,*LV_Contents,*LV_View,*LV_Files,*LV_FileKeys;
Object *LV_Keys,*LV_KSSrc,*LV_KSDest,*LV_RKSrc,*LV_RKDest;
Object *BT_Read,*BT_View,*BT_Edit,*BT_Kill,*BT_Find,*BT_Keys;
Object *BT_Delete,*BT_Rename,*BT_Remark,*BT_RKeys,*BT_ConOK,*BT_ConCancel;
Object *BT_KeySearch,*BT_MatchOK,*BT_MatchCancel;
Object *BT_KeysAdd,*BT_KeysDel,*BT_KSSToD,*BT_KSDToS,*BT_RKSToD,*BT_RKDToS;
Object *BT_RKOK,*BT_RKCancel;
Object *BT_KeysOK,*BT_KeysCancel;
Object *ST_Rename,*ST_Remark,*ST_Match,*ST_KeyName;
Object *CM_Case,*CM_Dirs,*CM_Keys,*CM_KeyAnd;
Object *CY_Disks;
Object *TX_FileName,*TX_FileSize,*TX_FileRem;
BOOL    DataChanged=FALSE;
char   *CY_Labels[32];


SAVEDS ASM long floppydispfunc(REG(a0) struct Hook *hook,REG(a2) char **array,REG(a1) FLOPPY *Floppy)
{
   static char tx[80];

   sprintf(tx,"\33b%s:",Floppy->HeadRecord->FName);
   *array=tx;
   return(0);
}

static struct Hook FloppyDisplayHook = {
   {NULL,NULL},
   (void *)floppydispfunc,
   NULL,NULL
};

SAVEDS ASM long floppycmpfunc(REG(a0) struct Hook *hook,REG(a1) FLOPPY *f1,REG(a2) FLOPPY *f2)
{
   return(stricmp(f1->HeadRecord->FName,f2->HeadRecord->FName));
}

static struct Hook FloppyCompareHook = {
   {NULL, NULL},
   (void *)floppycmpfunc,
   NULL, NULL
};

SAVEDS ASM long contentsdispfunc(REG(a0) struct Hook *hook,REG(a2) char **array,REG(a1) RECORD *Record)
{
   static char tx[108],len[10],buf[108];
   static char space[]="                    ";

   strncpy(tx,space,Record->Depth);
   tx[Record->Depth]=0;
   if (Record->Flags & RECORD_DIRECTORY) {
      sprintf(buf,"\33b%s",Record->FName);
      if (Record->Flags & RECORD_ROOT)
         strcpy(len,"\33b[root]");
      else
         strcpy(len,"\33b[dir]");
   } else {
      sprintf(buf,"%s",Record->FName);
      sprintf(len,"%ld",Record->Size);
   }
   strcat(tx,buf);
   *array++=tx;
   *array=len;
   return(0);
}

static struct Hook ContentsDisplayHook = {
   {NULL,NULL},
   (void *)contentsdispfunc,
   NULL,NULL
};

SAVEDS ASM long contentsmultifunc(REG(a1) RECORD *Record)
{
   if (Record->Flags & RECORD_DIRECTORY)
      return(FALSE);
   else
      return(TRUE);
}

static struct Hook ContentsMultiHook = {
   {NULL,NULL},
   (void *)contentsmultifunc,
   NULL,NULL
};

SAVEDS ASM long filesdispfunc(REG(a0) struct Hook *hook,REG(a2) char **array,REG(a1) RECORD *Record)
{
   static char  tx[108],len[10];

   BuildName(Record,tx);
   if (Record->Flags & RECORD_DIRECTORY)
      len[0]=0;
   else
      sprintf(len,"%ld",Record->Size);
   *array++=tx;
   *array=len;
   return(0);
}

static struct Hook FilesDisplayHook = {
   {NULL,NULL},
   (void *)filesdispfunc,
   NULL,NULL
};


int CXBRK(void) { return(0); }
int _CXBRK(void) { return(0); }
void chkabort(void) {}

static void fail(APTR app,char *str)
{
   if (app)
      MUI_DisposeObject(app);

   if (MUIMasterBase)
      CloseLibrary(MUIMasterBase);

   if (str) {
      puts(str);
      exit(20);
   }
   exit(0);
}


void main(int argc, char *argv[])
{
   BOOL  running=TRUE;
   ULONG signal;

   if (!(MUIMasterBase=OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN)))
      fail(NULL,"Failed to open "MUIMASTER_NAME".");

   myStartup();

   App=ApplicationObject,
      MUIA_Application_Title        ,"FBase",
      MUIA_Application_Version      ,"$VER: FBase 1.06 (09.07.94)",
      MUIA_Application_Copyright    ,"c1994, Amit Fridman",
      MUIA_Application_Author       ,"Amit Fridman",
      MUIA_Application_Description  ,"Floppy contents database.",
      MUIA_Application_Base         ,"FBASE",
      MUIA_HelpFile                 ,"PROGDIR:FBase.guide",
      MUIA_HelpNode                 ,"MAIN",
      SubWindow,WI_Main=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('M','A','I','N'),
         MUIA_Window_Title ,"FBase",
         MUIA_Window_Menu  ,FBase_Menu,
         MUIA_HelpNode     ,"MAIN_WINDOW",
         WindowContents,HGroup,
            Child,LV_Floppies=ListviewObject,
               MUIA_Listview_MultiSelect,TRUE,
               MUIA_Listview_List,ListObject,
                  InputListFrame,
                  MUIA_List_DisplayHook,&FloppyDisplayHook,
                  MUIA_List_CompareHook,&FloppyCompareHook,
               End,
               MUIA_HorizWeight,90,
            End,
            Child,VGroup,
               Child,VGroup,
                  GroupFrame,
                  Child,BT_Read=  KeyButtonH("Read",'r',"DO_READ"),
               End,
               Child,VSPACER(20),
               Child,VGroup,
                  GroupFrame,
                  Child,BT_View=KeyButtonH("View",'v',"DO_VIEW"),
                  Child,BT_Edit=KeyButtonH("Edit",'e',"DO_EDIT"),
                  Child,BT_Kill=KeyButtonH("Kill",'k',"DO_KILL"),
               End,
               Child,VSPACER(20),
               Child,VGroup,
                  GroupFrame,
                  Child,BT_Find=KeyButtonH("Find",'f',"DO_FIND"),
                  Child,BT_Keys=KeyButtonH("Keys",'y',"DO_KEYS"),
               End,
               Child,VSPACER(60),
               Child,VGroup,
                  GroupFrame,
                  Child,CY_Disks=Cycle(CY_Labels),
               End,
               MUIA_HorizWeight,10,
            End,
         End,
      End,
      SubWindow,WI_Contents=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('C','N','T','S'),
         MUIA_Window_Title ,"Edit Window",
         MUIA_Window_Menu  ,Contents_Menu,
         MUIA_Window_Width ,MUIV_Window_Width_MinMax(50),
         MUIA_HelpNode     ,"FLOPPY_CONTENTS",
         WindowContents,HGroup,
            Child,LV_Contents=ListviewObject,
               MUIA_Listview_MultiSelect,TRUE,
               MUIA_Listview_List,ListObject,
                  InputListFrame,
                  MUIA_List_DisplayHook,&ContentsDisplayHook,
                  MUIA_List_MultiTestHook,&ContentsMultiHook,
                  MUIA_List_Format,"MAW=100,P=\33r",
               End,
               MUIA_HorizWeight,90,
            End,
            Child,VGroup,
               Child,VGroup,
                  GroupFrame,
                  Child,BT_Delete   =KeyButtonH("Delete",'d',"DO_DELETE"),
                  Child,BT_Rename   =KeyButtonH("Rename",'r',"DO_RENAME"),
                  Child,BT_Remark   =KeyButtonH("Remark",'m',"DO_REMARK"),
               End,
               Child,VSpace(0),
               Child,VGroup,
                  GroupFrame,
                  Child,BT_RKeys    =KeyButtonH("Keys",'k',"DO_RECORD_KEYS"),
               End,
               Child,VSpace(0),
               Child,VGroup,
                  GroupFrame,
                  Child,BT_ConOK    =SimpleButton("OK"),
                  Child,BT_ConCancel=SimpleButton("Cancel"),
               End,
               MUIA_HorizWeight,10,
            End,
         End,
      End,
      SubWindow,WI_View=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('V','I','E','W'),
         MUIA_Window_Title ,"View Window",
         MUIA_Window_Menu  ,Contents_Menu,
         MUIA_Window_Width ,MUIV_Window_Width_MinMax(50),
         MUIA_HelpNode     ,"FLOPPY_CONTENTS",
         WindowContents,HGroup,
            Child,LV_View=ListviewObject,
               MUIA_Listview_List,ListObject,
                  InputListFrame,
                  MUIA_List_DisplayHook,&ContentsDisplayHook,
                  MUIA_List_Format,"MAW=100,P=\33r",
               End,
            End,
         End,
      End,
      SubWindow,WI_FileInfo=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('F','I','N','F'),
         MUIA_Window_Title ,"File Info",
         MUIA_Window_Menu  ,FInfo_Menu,
         MUIA_Window_Width ,MUIV_Window_Width_MinMax(50),
         MUIA_HelpNode     ,"FINFO_WINDOW",
         WindowContents,VGroup,
            Child,VGroup,
               GroupFrameT("General"),
               Child,TX_FileName=TextObject,MUIA_Text_Contents,NULL,End,
               Child,TX_FileSize=TextObject,MUIA_Text_Contents,NULL,End,
               Child,TX_FileRem =TextObject,MUIA_Text_Contents,NULL,End,
            End,
            Child,HGroup,
               GroupFrameT("Keys"),
               Child,LV_FileKeys=ListviewObject,
                  MUIA_Listview_Input,FALSE,
                  MUIA_Listview_List,ListObject,
                     ReadListFrame,
                  End,
               End,
            End,
         End,
      End,
      SubWindow,WI_Rename=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('R','E','N','M'),
         MUIA_Window_Title ,"Rename",
         MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
         MUIA_Window_Width ,MUIV_Window_Width_MinMax(30),
         WindowContents,VGroup,
            Child,ST_Rename=String("",31),
         End,
      End,
      SubWindow,WI_Remark=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('R','E','M','K'),
         MUIA_Window_Title ,"Remark",
         MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
         MUIA_Window_Width ,MUIV_Window_Width_MinMax(50),
         WindowContents,VGroup,
            Child,ST_Remark=String("",80),
         End,
      End,
      SubWindow,WI_Match=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('F','I','N','D'),
         MUIA_Window_Title ,"Find",
         MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
         MUIA_Window_Width ,MUIV_Window_Width_MinMax(30),
         MUIA_HelpNode     ,"FIND_WINDOW",
         WindowContents,VGroup,
            Child,ST_Match=String("",63),
            Child,HGroup,
               Child,VGroup,
                  GroupFrameT("Flags"),
                  Child,HGroup,
                     Child,KeyLabel1(" Ignore Case",'c'),
                     Child,CM_Case=KeyCheckMark(TRUE,'c'),
                  End,
                  Child,HGroup,
                     Child,KeyLabel1("Include Dirs",'d'),
                     Child,CM_Dirs=KeyCheckMark(FALSE,'d'),
                  End,
               End,
               Child,HSpace(16),
               Child,VGroup,
                  GroupFrameT("Keys"),
                  Child,BT_KeySearch=KeyButtonH("Set Keys",'s',"SET_KEYS"),
                  Child,HGroup,
                     Child,KeyLabel1("Match Keys",'k'),
                     Child,CM_Keys=KeyCheckMark(FALSE,'k'),
                  End,
                  Child,HGroup,
                     Child,KeyLabel1("  And Keys",'a'),
                     Child,CM_KeyAnd=KeyCheckMark(FALSE,'a'),
                  End,
               End,
            End,
            Child,VSpace(8),
            Child,HGroup,
               MUIA_Group_SameWidth,TRUE,
               Child,BT_MatchOK    =SimpleButton("OK"),
               Child,BT_MatchCancel=SimpleButton("CANCEL"),
            End,
         End,
      End,
      SubWindow,WI_Files=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('F','I','L','I'),
         MUIA_Window_Title ,"Find List",
         MUIA_Window_Menu  ,Match_Menu,
         MUIA_Window_Width ,MUIV_Window_Width_MinMax(50),
         MUIA_HelpNode     ,"FIND_LIST",
         WindowContents,LV_Files=ListviewObject,
            MUIA_Listview_List,ListObject,
               InputListFrame,
               MUIA_List_DisplayHook,&FilesDisplayHook,
               MUIA_List_Format,"MAW=100,P=\33r",
            End,
         End,
      End,
      SubWindow,WI_Keys=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('K','E','Y','S'),
         MUIA_Window_Title ,"Keys",
         MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
         MUIA_Window_Width ,MUIV_Window_Width_MinMax(20),
         MUIA_HelpNode     ,"KEYS_WINDOW",
         WindowContents,VGroup,
            Child,LV_Keys=ListviewObject,
               MUIA_Listview_List,ListObject,
                  InputListFrame,
               End,
            End,
            Child,ST_KeyName=StringObject,
               StringFrame,
               MUIA_String_MaxLen,MAXKEYLEN-1,
               MUIA_String_Contents,"",
            End,
            Child,HGroup,
               Child,BT_KeysAdd=KeyButton("Add",'a'),
               Child,BT_KeysDel=KeyButton("Del",'d'),
            End,
            Child,VSpace(8),
            Child,HGroup,
               MUIA_Group_SameWidth,TRUE,
               Child,BT_KeysOK    =SimpleButton("OK"),
               Child,BT_KeysCancel=SimpleButton("CANCEL"),
            End,
         End,
      End,
      SubWindow,WI_KeySearch=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('S','K','E','Y'),
         MUIA_Window_Title ,"Search Keys",
         MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
         MUIA_Window_Width ,MUIV_Window_Width_MinMax(20),
         MUIA_HelpNode     ,"SKEYS_WINDOW",
         WindowContents,HGroup,
            Child,VGroup,
               GroupFrameT("Key List"),
               Child,LV_KSSrc=ListviewObject,
                  MUIA_Listview_MultiSelect,TRUE,
                  MUIA_Listview_List,ListObject,
                     InputListFrame,
                  End,
               End,
               Child,BT_KSSToD=KeyButton("-->",'>'),
            End,
            Child,VGroup,
               GroupFrameT("Search on"),
               Child,LV_KSDest=ListviewObject,
                  MUIA_Listview_MultiSelect,TRUE,
                  MUIA_Listview_List,ListObject,
                     InputListFrame,
                  End,
               End,
               Child,BT_KSDToS=KeyButton("<--",'<'),
            End,
         End,
      End,
      SubWindow,WI_RecKeys=WindowObject,
         MUIA_Window_ID    ,MAKE_ID('R','K','E','Y'),
         MUIA_Window_Title ,"Record Keys",
         MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
         MUIA_Window_Width ,MUIV_Window_Width_MinMax(20),
         MUIA_HelpNode     ,"RKEYS_WINDOW",
         WindowContents,VGroup,
            Child,HGroup,
               Child,VGroup,
                  GroupFrameT("Key List"),
                  Child,LV_RKSrc=ListviewObject,
                     MUIA_Listview_MultiSelect,TRUE,
                     MUIA_Listview_List,ListObject,
                        InputListFrame,
                     End,
                  End,
                  Child,BT_RKSToD=KeyButton("-->",'>'),
               End,
               Child,VGroup,
                  GroupFrameT("Record Keys"),
                  Child,LV_RKDest=ListviewObject,
                     MUIA_Listview_MultiSelect,TRUE,
                     MUIA_Listview_List,ListObject,
                        InputListFrame,
                     End,
                  End,
                  Child,BT_RKDToS=KeyButton("<--",'<'),
               End,
            End,
            Child,VSpace(8),
            Child,HGroup,
               MUIA_Group_SameWidth,TRUE,
               Child,BT_RKOK    =SimpleButton("OK"),
               Child,BT_RKCancel=SimpleButton("CANCEL"),
            End,
         End,
      End,
   End;

   if (!App)
      fail(App,"failed to create application.");

   DoMethod(WI_Main,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
   DoMethod(BT_Read,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_READ);
   DoMethod(BT_View,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_VIEW);
   DoMethod(BT_Edit,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_EDIT);
   DoMethod(BT_Kill,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_KILL);
   DoMethod(BT_Find,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_FIND);
   DoMethod(BT_Keys,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_KEYS);
   DoMethod(LV_Floppies,MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,App,2,
            MUIM_Application_ReturnID,ID_VIEW);

   DoMethod(WI_Contents,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,ID_CONTENTS_CANCEL);
   DoMethod(BT_Delete,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_DELETE);
   DoMethod(BT_Rename,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_RENAME);
   DoMethod(BT_Remark,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_REMARK);
   DoMethod(BT_RKeys,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_RKEYS);
   DoMethod(BT_ConOK,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_CONTENTS_OK);
   DoMethod(BT_ConCancel,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_CONTENTS_CANCEL);

   DoMethod(WI_View,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,ID_VIEW_CANCEL);
   DoMethod(LV_View,MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,App,2,
            MUIM_Application_ReturnID,ID_VIEW_SELECT);

   DoMethod(WI_FileInfo,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,ID_FINFO_CANCEL);

   DoMethod(WI_Rename,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,ID_RENAME_CANCEL);
   DoMethod(ST_Rename,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,
            App,2,MUIM_Application_ReturnID,ID_RENAME_OK);

   DoMethod(WI_Remark,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,ID_REMARK_CANCEL);
   DoMethod(ST_Remark,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,
            App,2,MUIM_Application_ReturnID,ID_REMARK_OK);

   DoMethod(WI_Match,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,ID_MATCH_CANCEL);
   DoMethod(ST_Match,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,
            WI_Match,3,MUIM_Set,MUIA_Window_ActiveObject,BT_MatchOK);
   DoMethod(BT_KeySearch,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_SET_KEYS);
   DoMethod(BT_MatchOK,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_MATCH_OK);
   DoMethod(BT_MatchCancel,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_MATCH_CANCEL);

   DoMethod(WI_Files,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,ID_FILES_CANCEL);
   DoMethod(LV_Files,MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,App,2,
            MUIM_Application_ReturnID,ID_FILES_SELECT);

   DoMethod(WI_Keys,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,ID_KEYS_CANCEL);
   DoMethod(BT_KeysAdd,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_KEYS_ADD);
   DoMethod(BT_KeysDel,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_KEYS_DEL);
   DoMethod(ST_KeyName,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,
            App,2,MUIM_Application_ReturnID,ID_KEYS_NAME);
   DoMethod(LV_Keys,MUIM_Notify,MUIA_List_Active,MUIV_EveryTime,
            App,2,MUIM_Application_ReturnID,ID_KEYS_CHANGE);
   DoMethod(BT_KeysOK,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_KEYS_OK);
   DoMethod(BT_KeysCancel,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_KEYS_CANCEL);

   DoMethod(WI_KeySearch,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,ID_KS_CANCEL);
   DoMethod(BT_KSSToD,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_KS_STOD);
   DoMethod(BT_KSDToS,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_KS_DTOS);

   DoMethod(WI_RecKeys,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
            MUIM_Application_ReturnID,ID_RK_CANCEL);
   DoMethod(BT_RKSToD,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_RK_STOD);
   DoMethod(BT_RKDToS,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_RK_DTOS);
   DoMethod(BT_RKOK,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_RK_OK);
   DoMethod(BT_RKCancel,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
            MUIM_Application_ReturnID,ID_RK_CANCEL);

   DoMethod(WI_Main,MUIM_Window_SetCycleChain,LV_Floppies,BT_Read,
            BT_View,BT_Edit,BT_Kill,BT_Find,BT_Keys,CY_Disks,NULL);
   DoMethod(WI_Contents,MUIM_Window_SetCycleChain,LV_Contents,
            BT_Delete,BT_Rename,BT_Remark,BT_RKeys,
            BT_ConOK,BT_ConCancel,NULL);
   DoMethod(WI_View,MUIM_Window_SetCycleChain,LV_View,NULL);
   DoMethod(WI_Match,MUIM_Window_SetCycleChain,ST_Match,CM_Case,CM_Dirs,
            BT_KeySearch,CM_Keys,CM_KeyAnd,BT_MatchOK,BT_MatchCancel,NULL);
   DoMethod(WI_Files,MUIM_Window_SetCycleChain,LV_Files,NULL);
   DoMethod(WI_Keys,MUIM_Window_SetCycleChain,LV_Keys,ST_KeyName,
            BT_KeysAdd,BT_KeysDel,BT_KeysOK,BT_KeysCancel,NULL);
   DoMethod(WI_KeySearch,MUIM_Window_SetCycleChain,LV_KSSrc,BT_KSSToD,
            LV_KSDest,BT_KSDToS,NULL);
   DoMethod(WI_RecKeys,MUIM_Window_SetCycleChain,LV_RKSrc,BT_RKSToD,
            LV_RKDest,BT_RKDToS,BT_RKOK,BT_RKCancel,NULL);

   set(WI_Main,MUIA_Window_Open,TRUE);

   while (running) {
      switch (DoMethod(App,MUIM_Application_Input,&signal)) {
         case MUIV_Application_ReturnID_Quit:
            if ((DataChanged) && (FloppyList.lh_Head->ln_Succ)) {
               if (ConfirmQuit())
                  running=FALSE;
            } else
               running=FALSE;
            break;
         case ID_NEW:
            DoNew();
            break;
         case ID_OPEN:
            DoLoad();
            break;
         case ID_SAVE:
            DoSave();
            break;
         case ID_SAVEAS:
            DoSaveAs();
            break;
         case ID_PRINT_ALL:
            DoPrintAll();
            break;
         case ID_PRINT_TITLES:
            DoPrintTitles();
            break;
         case ID_ABOUT:
            DoAbout();
            break;
         case ID_READ:
            DoReadFloppy();
            break;
         case ID_VIEW:
            DoViewFloppy();
            break;
         case ID_EDIT:
            DoEditFloppy();
            break;
         case ID_KILL:
            DoKillFloppy();
            break;
         case ID_FIND:
            DoFind();
            break;
         case ID_KEYS:
            DoKeys();
            break;
         case ID_DELETE:
            DoDeleteRecord();
            break;
         case ID_RENAME:
            DoRenameRecord();
            break;
         case ID_REMARK:
            DoRemark();
            break;
         case ID_RKEYS:
            DoRecordKeys();
            break;
         case ID_PRINT_CONTENTS:
            DoPrintContents();
            break;
         case ID_CONTENTS_OK:
            DoAddFloppy();
            break;
         case ID_CONTENTS_CANCEL:
            DoNoAddFloppy();
            break;
         case ID_VIEW_SELECT:
            DisplayFileInfo(WI_View,LV_View);
            break;
         case ID_VIEW_CANCEL:
            StopView();
            break;
         case ID_PRINT_FINFO:
            DoPrintFInfo();
            break;
         case ID_FINFO_CANCEL:
            StopFileInfo();
            break;
         case ID_RENAME_OK:
            DoNewName();
            break;
         case ID_RENAME_CANCEL:
            DoNoNewName();
            break;
         case ID_REMARK_OK:
            SetRemark();
            break;
         case ID_REMARK_CANCEL:
            StopRemark();
            break;
         case ID_SET_KEYS:
            DoKeySearch();
            break;
         case ID_PRINT_MATCH:
            DoPrintMatch();
            break;
         case ID_MATCH_OK:
            DoMatch();
            break;
         case ID_MATCH_CANCEL:
            DoNoMatch();
            break;
         case ID_FILES_SELECT:
            DisplayFileInfo(WI_Files,LV_Files);
            break;
         case ID_FILES_CANCEL:
            FileDispClose();
            break;
         case ID_KEYS_ADD:
            DoAddKey();
            break;
         case ID_KEYS_DEL:
            DoDelKey();
            break;
         case ID_KEYS_NAME:
            DoNameKey();
            break;
         case ID_KEYS_CHANGE:
            DoKeysChange();
            break;
         case ID_KEYS_OK:
            KeysAccept();
            break;
         case ID_KEYS_CANCEL:
            KeysClose();
            break;
         case ID_KS_STOD:
            KeySearchSToD();
            break;
         case ID_KS_DTOS:
            KeySearchDToS();
            break;
         case ID_KS_CANCEL:
            KeySearchClose();
            break;
         case ID_RK_STOD:
            RecordKeysSToD();
            break;
         case ID_RK_DTOS:
            RecordKeysDToS();
            break;
         case ID_RK_OK:
            RecordKeysAccept();
            break;
         case ID_RK_CANCEL:
            RecordKeysClose();
            break;
      }
      if (running && signal)
         Wait(signal);
   }

   myCleanup();

   fail(App,NULL);
}
