home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / disk utilities / backup / backup_restore / backup_src_v3.20.lha / FSMenu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-23  |  10.3 KB  |  385 lines

  1. // FSMenu.c
  2. // 20 May 1996 21:26:09
  3.  
  4. #ifndef    BACKUP_INCLUDE
  5. #include "IncludeAll.c"
  6. #endif
  7. #include "Backup.h"
  8. #include "FileSelect.h"
  9. #include "Backup_proto.h"
  10. #include "BackupStrings.h"
  11. #include "FSMenu.h"
  12.  
  13.  
  14. static void SetMenuStrings(void);
  15.  
  16.  
  17. // aus Backup_Window.c
  18. extern APTR vi;                // VisualInfo
  19.  
  20. // aus FileSelect.c
  21. extern struct Window *MenuWin;        // an diesem Window hängt das Menu
  22.  
  23. // aus CmdFile.c
  24. extern char __far CmdFileName[FMSIZE];    // Name des Kommandofile
  25.  
  26.  
  27. struct Menu *FSMenuList = NULL;
  28.  
  29. static BOOL CreateIcons = TRUE;
  30.  
  31. static struct NewMenu NewFSMenu[] =
  32.     {
  33.     { NM_TITLE, (STRPTR) MSG_PROJECT_MENU,        NULL, 0,    0, V(MENU_PROJECT) },
  34.     {  NM_ITEM, (STRPTR) MSG_NEW_MENU,         "N", 0,    0, V(MENU_NEW) },
  35.     {  NM_ITEM, NM_BARLABEL,            NULL, 0,    0, 0,},
  36.     {  NM_ITEM, (STRPTR) MSG_LOADSETTINGS_MENU,     "L", 0,    0, V(MENU_LOADSETTINGS) },
  37.     {  NM_ITEM, NM_BARLABEL,            NULL, 0,    0, 0,},
  38.     {  NM_ITEM, (STRPTR) MSG_SAVESETTINGS_MENU,     "S", 0,    0, V(MENU_SAVESETTINGS) },
  39.     {  NM_ITEM, (STRPTR) MSG_SAVESETTINGS_AS_MENU,     "A" , 0,    0, V(MENU_SAVESETTINGSAS) },
  40.     {  NM_ITEM, NM_BARLABEL,            NULL, 0,    0, 0,},
  41.     {  NM_ITEM, (STRPTR) MSG_DISKSPACE_MENU,     "P", 0,    0, V(MENU_DISKSPACE) },
  42.     {  NM_ITEM, (STRPTR) MSG_ABOUT_MENU,        NULL, 0,    0, V(MENU_ABOUT) },
  43.     {  NM_ITEM, NM_BARLABEL,            NULL, 0,    0, 0,},
  44.     {  NM_ITEM, (STRPTR) MSG_ABORT_MENU,         "Q", 0,    0, V(MENU_QUIT) },
  45.  
  46.     { NM_TITLE, (STRPTR) MSG_VIEW_MENU,        NULL, 0,    0, V(MENU_VIEW) },
  47.     {  NM_ITEM, (STRPTR) MSG_DIRSORT_MENU,        NULL, 0,    0, V(MENU_DIRECTORIES) },
  48.     {   NM_SUB, (STRPTR) MSG_DIRSORT_FIRST_MENU,    NULL, CHECKIT, ~1, V(MENU_DIRSFIRST) },
  49.     {   NM_SUB, (STRPTR) MSG_DIRSORT_LAST_MENU,    NULL, CHECKIT, ~2, V(MENU_DIRSLAST) },
  50.     {   NM_SUB, (STRPTR) MSG_DIRSORT_BETWEEN_MENU,    NULL, CHECKIT, ~4, V(MENU_DIRSBETWEEN) },
  51.     {  NM_ITEM, (STRPTR) MSG_SORT_MENU,        NULL, 0,    0, V(MENU_SORTING) },
  52.     {   NM_SUB, (STRPTR) MSG_SORT_NAME_MENU,    NULL, CHECKIT, ~1, V(MENU_SORTNAME) },
  53.     {   NM_SUB, (STRPTR) MSG_SORT_DATE_MENU,    NULL, CHECKIT, ~2, V(MENU_SORTDATE) },
  54.     {   NM_SUB, (STRPTR) MSG_SORT_SIZE_MENU,    NULL, CHECKIT, ~4, V(MENU_SORTSIZE) },
  55.     {  NM_ITEM, NM_BARLABEL,            NULL, 0,    0, 0,},
  56.     {  NM_ITEM, (STRPTR) MSG_LISTFONT_MENU,         "F", 0,    0, V(MENU_NEWLISTFONT) },
  57.  
  58.     { NM_TITLE, (STRPTR) MSG_OPTIONS_MENU,        NULL, 0,    0, V(MENU_OPTIONS) },
  59.     {  NM_ITEM, (STRPTR) MSG_WILDCARDS_MENU,    NULL, 0,     0, V(MENU_WILDCARDS) },
  60.     {   NM_SUB, (STRPTR) MSG_SIMPLEWILDCARDS_MENU,    NULL, CHECKIT, ~1, V(MENU_SIMPLEWILD) },
  61.     {   NM_SUB, (STRPTR) MSG_DOSWILDCARDS_MENU,    NULL, CHECKIT, ~2, V(MENU_DOSWILD) },
  62.     {  NM_ITEM, (STRPTR) MSG_CREATEICONS_MENU,     "I", CHECKIT|MENUTOGGLE|CHECKED, 0, V(MENU_CREATEICONS) },
  63.  
  64.     { NM_TITLE, (STRPTR) MSG_TAPE_MENU,        NULL, 0,    0, V(MENU_TAPE) },
  65.     {  NM_ITEM, (STRPTR) MSG_SETUPTAPE_MENU,    NULL, 0,    0, V(MENU_SETUPTAPE) },
  66.     {  NM_ITEM, NM_BARLABEL,            NULL, 0,    0, 0,},
  67.     {  NM_ITEM, (STRPTR) MSG_LOADTAPE_MENU,        NULL, NM_ITEMDISABLED,    0, V(MENU_TAPELOAD) },
  68.     {  NM_ITEM, (STRPTR) MSG_UNLOADTAPE_MENU,    NULL, NM_ITEMDISABLED,    0, V(MENU_TAPEUNLOAD) },
  69.     {  NM_ITEM, (STRPTR) MSG_REWINDTAPE_MENU,    NULL, NM_ITEMDISABLED,    0, V(MENU_TAPEREWIND) },
  70.     {  NM_ITEM, (STRPTR) MSG_RETENSIONTAPE_MENU,    NULL, NM_ITEMDISABLED,    0, V(MENU_TAPERETENSION) },
  71.     {  NM_ITEM, (STRPTR) MSG_ERASETAPE_MENU,    NULL, NM_ITEMDISABLED,    0, V(MENU_TAPEERASE) },
  72.  
  73.     {   NM_END, NULL, NULL,        0, 0, 0,},
  74.     };
  75.  
  76.  
  77.  
  78. void SetMenus(struct BackupOptions *BackupOpt)
  79. {
  80.     void *MenuId;
  81.  
  82.     if (NULL == MenuWin || NULL == FSMenuList)
  83.         return;
  84.  
  85.     // "Einstellungen speichern" nur wenn von Workbench gestartet
  86.     if (WBenchMsg)
  87.         OnMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_SAVESETTINGS)));
  88.     else
  89.         OffMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_SAVESETTINGS)));
  90.  
  91.     switch (BackupOpt->bo_HowToSort)
  92.         {
  93.     case SortName:
  94.         MenuId = V(MENU_SORTNAME);
  95.         break;
  96.     case SortDate:
  97.         MenuId = V(MENU_SORTDATE);
  98.         break;
  99.     case SortSize:
  100.         MenuId = V(MENU_SORTSIZE);
  101.         break;
  102.         }
  103.     SetMenuItem(FSMenuList, MenuWin, MenuId, TRUE);
  104.  
  105.     switch (BackupOpt->bo_WhereSortDirs)
  106.         {
  107.     case DirFirst:
  108.         MenuId = V(MENU_DIRSFIRST);
  109.         break;
  110.     case DirLast:
  111.         MenuId = V(MENU_DIRSLAST);
  112.         break;
  113.     case DirBetween:
  114.         MenuId = V(MENU_DIRSBETWEEN);
  115.         break;
  116.         }
  117.     SetMenuItem(FSMenuList, MenuWin, MenuId, TRUE);
  118.  
  119.     // Wildcard-Einstellung
  120.     TranslateWildCards(BackupOpt);
  121.     if (BackupOpt->bo_UseGrepPattern)
  122.         SetMenuItem(FSMenuList, MenuWin, V(MENU_DOSWILD), TRUE);
  123.     else
  124.         SetMenuItem(FSMenuList, MenuWin, V(MENU_SIMPLEWILD), TRUE);
  125. }
  126.  
  127.  
  128. short ProcessFSMenu(USHORT code, struct BackupOptions *BackupOpt)
  129. {
  130.     char TempFileName[FMSIZE];
  131.     struct MenuItem *item;
  132.     short result = 0;
  133.  
  134.     while (code != MENUNULL)
  135.         {
  136.         item = ItemAddress(FSMenuList, code);
  137.  
  138.         switch ((ULONG) GTMENUITEM_USERDATA(item))
  139.             {
  140.         case MENU_NEW:        // Neu
  141.             ClearSettings(TRUE);
  142.             break;
  143.  
  144.         case MENU_LOADSETTINGS:        // Einstellungen laden
  145.             if (StdFile(MenuWin, GetString(MSG_LOAD_CMDFILE), 
  146.                     BackupOpt->bo_ScriptPath, 
  147.                     TempFileName, sizeof(TempFileName),
  148.                     ASLFR_RejectIcons, TRUE,
  149.                     ASLFR_DoPatterns, TRUE,
  150.                     TAG_END))
  151.                 {
  152.                 ClearSettings(FALSE);    // zerstört <BackupOpt> und <CmdFileName> !!!
  153.  
  154.                 stcgfp(BackupOpt->bo_ScriptPath, TempFileName);
  155.                 AddPart(BackupOpt->bo_ScriptPath, (STRPTR) "", sizeof(BackupOpt->bo_ScriptPath));
  156.  
  157.                 stccpy(CmdFileName, TempFileName, sizeof(CmdFileName));
  158.  
  159.                 LoadCmdFile(MenuWin, CmdFileName, BackupOpt);
  160.                 }
  161.             break;
  162.  
  163.         case MENU_SAVESETTINGS:        // Einstellungen speichern
  164.             if (CmdFileName[0])
  165.                 WriteCmdFile(MenuWin, CmdFileName, CreateIcons, BackupOpt);
  166.             else
  167.                 SetWBDefaults(WBenchMsg, BackupOpt);
  168.             break;
  169.  
  170.         case MENU_SAVESETTINGSAS:    // Einstellung speichern als...
  171.             if (StdFile(MenuWin, GetString(MSG_SAVE_SETTINGS_AS),
  172.                     BackupOpt->bo_ScriptPath,
  173.                     TempFileName, sizeof(TempFileName),
  174.                     ASLFR_DoSaveMode, TRUE,
  175.                     ASLFR_RejectIcons, TRUE,
  176.                     ASLFR_DoPatterns, TRUE,
  177.                     TAG_END))
  178.                 {
  179.                 stcgfp(BackupOpt->bo_ScriptPath, TempFileName);
  180.                 AddPart(BackupOpt->bo_ScriptPath, (STRPTR) "", sizeof(BackupOpt->bo_ScriptPath));
  181.  
  182.                 stccpy(CmdFileName, TempFileName, sizeof(CmdFileName));
  183.  
  184.                 WriteCmdFile(MenuWin, CmdFileName, CreateIcons, BackupOpt);
  185.                 }
  186.             break;
  187.  
  188.         case MENU_DISKSPACE:        // Diskettenplatz
  189.             GetByteCount(MenuWin, BackupOpt, NULL, NULL);
  190.             break;
  191.  
  192.         case MENU_ABOUT:        // About
  193.             About(MenuWin);
  194.             break;
  195.  
  196.         case MENU_QUIT:            // Abbruch
  197.             result = FS_ABORT;
  198.             break;
  199.  
  200.         case MENU_DIRSFIRST:        // zuerst
  201.             BackupOpt->bo_WhereSortDirs = DirFirst;
  202.             SortAllFSDirs();
  203.              break;
  204.         case MENU_DIRSLAST:        // zuletzt
  205.             BackupOpt->bo_WhereSortDirs = DirLast;
  206.             SortAllFSDirs();
  207.             break;
  208.  
  209.         case MENU_DIRSBETWEEN:        // zwischendrin
  210.             BackupOpt->bo_WhereSortDirs = DirBetween;
  211.             SortAllFSDirs();
  212.             break;
  213.  
  214.         case MENU_SORTNAME:        // nach Name
  215.             BackupOpt->bo_FSCompare = FSCompareName;
  216.             BackupOpt->bo_HowToSort = SortName;
  217.             SortAllFSDirs();
  218.             break;
  219.  
  220.         case MENU_SORTDATE:        // nach Datum
  221.             BackupOpt->bo_FSCompare = FSCompareDate;
  222.             BackupOpt->bo_HowToSort = SortDate;
  223.             SortAllFSDirs();
  224.             break;
  225.  
  226.         case MENU_SORTSIZE:        // nach Größe
  227.             BackupOpt->bo_FSCompare = FSCompareSize;
  228.             BackupOpt->bo_HowToSort = SortSize;
  229.             SortAllFSDirs();
  230.             break;
  231.  
  232.         case MENU_NEWLISTFONT:
  233.             {
  234.             struct TextAttr OldListFontAttr;
  235.             struct TextAttr *NewListFontAttr;
  236.  
  237.             OldListFontAttr.ta_Name = NULL;
  238.             FillTextAttrFromFontName(&OldListFontAttr, BackupOpt->bo_ListFontName);
  239.  
  240.             NewListFontAttr = GetNewFont(MenuWin,
  241.                         GetString(MSG_LISTFONT_REQTTL),
  242.                         &OldListFontAttr,
  243.                         ASLFO_FixedWidthOnly, TRUE,
  244.                         TAG_END
  245.                         );
  246.             if (NewListFontAttr)
  247.                 {
  248.                 sprintf(BackupOpt->bo_ListFontName, "%s/%d", 
  249.                     NewListFontAttr->ta_Name,
  250.                     NewListFontAttr->ta_YSize
  251.                     );
  252.                 SetFSListFont(BackupOpt);
  253.                 SizeFSWindow(WSC_SameSize);
  254.  
  255.                 free(NewListFontAttr->ta_Name);
  256.                 free(NewListFontAttr);
  257.                 }
  258.             if (OldListFontAttr.ta_Name)
  259.                 free(OldListFontAttr.ta_Name);
  260.             }
  261.             break;
  262.  
  263.         case MENU_SIMPLEWILD:        // nur *,?
  264.             BackupOpt->bo_UseGrepPattern = FALSE;
  265.             // "*" in "?#" und umgekehrt übersetzen
  266.             TranslateWildCards(BackupOpt);
  267.             ShowWildcardOpt(BackupOpt);
  268.             SortAllFSDirs();
  269.             break;
  270.         case MENU_DOSWILD:        // DOS-Pattern #?
  271.             BackupOpt->bo_UseGrepPattern = TRUE;
  272.             // "*" in "?#" und umgekehrt übersetzen
  273.             TranslateWildCards(BackupOpt);
  274.             ShowWildcardOpt(BackupOpt);
  275.             SortAllFSDirs();
  276.             break;
  277.  
  278.         case MENU_CREATEICONS:        // Icons erzeugen
  279.             CreateIcons = item->Flags & CHECKED;
  280.             break;
  281.  
  282.         case MENU_SETUPTAPE:        // Bandlaufwerk(e) einstellen
  283.             SetupTape(MenuWin, NULL);
  284.             break;
  285.  
  286.         case MENU_TAPEREWIND:        // Rewind
  287.             TapeFunction(BackupOpt->bo_FirstUnit, TF_Rewind);
  288.             break;
  289.  
  290.         case MENU_TAPERETENSION:    // Retension
  291.             TapeFunction(BackupOpt->bo_FirstUnit, TF_Retension);
  292.             break;
  293.  
  294.         case MENU_TAPEERASE:        // Erase
  295.             TapeFunction(BackupOpt->bo_FirstUnit, TF_Erase);
  296.             break;
  297.  
  298.         case MENU_TAPEUNLOAD:        // Unload
  299.             TapeFunction(BackupOpt->bo_FirstUnit, TF_Unload);
  300.             break;
  301.  
  302.         case MENU_TAPELOAD:        // Load
  303.             TapeFunction(BackupOpt->bo_FirstUnit, TF_Load);
  304.             break;
  305.             }
  306.  
  307.         code = item->NextSelect;
  308.         }
  309.  
  310.     return result;
  311. }
  312.  
  313.  
  314. short ProcessFSMenuHelp(USHORT code)
  315. {
  316.     struct MenuItem *item;
  317.  
  318.     item = ItemAddress(FSMenuList, code);
  319.     if (item)
  320.         CallHelp((ULONG) GTMENUITEM_USERDATA(item), TRUE);
  321.  
  322.     return 0;
  323. }
  324.  
  325.  
  326. BOOL SetupFSMenu(void)
  327. {
  328.     SetMenuStrings();
  329.  
  330.     FSMenuList = CreateMenus(NewFSMenu,
  331.             GTMN_FullMenu, TRUE,
  332.             TAG_END );
  333.     if (FSMenuList == NULL)
  334.         {
  335.         alarm(GetString(MSG_CREATEMENUS_FAILED), __FUNC__);
  336.         return FALSE;
  337.         }
  338.  
  339.     if (!LayoutMenus(FSMenuList, vi,
  340.             GTMN_NewLookMenus, TRUE,
  341.             TAG_END))
  342.         {
  343.         alarm(GetString(MSG_LAYOUTMENUS_FAILED), __FUNC__);
  344.         return FALSE;
  345.         }
  346.  
  347.     return TRUE;
  348. }
  349.  
  350.  
  351. static void SetMenuStrings(void)
  352. {
  353.     static BOOL Done = FALSE;
  354.     short n;
  355.  
  356.     for (n=0; !Done && NewFSMenu[n].nm_Type != NM_END; n++)
  357.         {
  358.         if (NewFSMenu[n].nm_Label != NM_BARLABEL)
  359.             NewFSMenu[n].nm_Label = (STRPTR) GetString((long) NewFSMenu[n].nm_Label);
  360.         }
  361.  
  362.     Done = TRUE;
  363. }
  364.  
  365.  
  366. void EnableTapeMenu(BOOL On)
  367. {
  368.     if (On)
  369.         {
  370.         OnMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_TAPEREWIND)));
  371.         OnMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_TAPERETENSION)));
  372.         OnMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_TAPEERASE)));
  373.         OnMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_TAPELOAD)));
  374.         OnMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_TAPEUNLOAD)));
  375.         }
  376.     else
  377.         {
  378.         OffMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_TAPEREWIND)));
  379.         OffMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_TAPERETENSION)));
  380.         OffMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_TAPEERASE)));
  381.         OffMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_TAPELOAD)));
  382.         OffMenu(MenuWin, FindMenuItem(FSMenuList, V(MENU_TAPEUNLOAD)));
  383.         }
  384. }
  385.