#include <exec/types.h> 

typedef struct                  // Ðáþæû öäïäæ ëäñíãú
  {
    ULONG MethodID;
    ULONG ID1;
    ULONG ID2;
    ULONG ID3;
  } Tie;

typedef union                   // A îíöäëò-àú ç ìäñ ?
  {
    ULONG  num;
    STRPTR str;
  } VAGUE;

///                              ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯                         <
///
///”””””””””””””””””””””””””””””ƒ   More includes  ”””””””””””””””””””””””” <
///
///                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                         <
///
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
///                              exec.library                                 <
///
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
#include <clib/exec_protos.h>
#include <pragmas/exec_sysbase_pragmas.h>
#include <exec/ports.h>
#include <exec/nodes.h>
#include <exec/alerts.h>
#include <exec/memory.h>
#include <exec/execbase.h>

IMPORT struct ExecBase *SysBase;  // Áðäâãa òåä íñéïúña
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
///                        Ïaàíña ð óaèêaëç - dos.library                     <
///
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
#include <dos.h>
#include <clib/dos_protos.h>
#include <pragmas/dos_pragmas.h>

IMPORT struct Library *DOSBase;   // íñéïúña êçìé-éíãíë éíëîçêþñíïa
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
///                            intuition.library                              <
///
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
#include <clib/intuition_protos.h>
#include <pragmas/intuition_pragmas.h>

#define INTUITION_LIBRARY_NAME    "intuition.library"
#define INTUITION_LIBRARY_VERSION 36L

STATIC struct Library *IntuitionBase = NULL;
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
///                       Ðñäóaì Øñòìõ - muimaster.library                    <
///
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
#include <libraries/mui.h>
#include <clib/muimaster_protos.h>
#include <pragmas/muimaster_pragmas.h>
#include <mui/busy_mcc.h>

#define MUI_LIBRARY_NAME          MUIMASTER_NAME
#define MUI_LIBRARY_VERSION       MUIMASTER_VLATEST

STATIC struct Library *MUIMasterBase = NULL;
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
///                   Îíããäïåéa êíéaêçæaõçç - locale.library                  <
///
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
#include <libraries/locale.h>
#include <clib/locale_protos.h>
#include <pragmas/locale_pragmas.h>

#define LOCALE_LIBRARY_NAME       "locale.library"
#define LOCALE_LIBRARY_VERSION    38L
#define CATALOG_LAST_VERSION      1

STATIC struct Library *LocaleBase = NULL;
STATIC struct Catalog *catalog    = NULL;
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
///                Æaîïíðú óaèêíá/éañaêíâíá - reqtools.library                <
///
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
#include <libraries/reqtools.h>
#include <clib/reqtools_protos.h>
#include <pragmas/reqtools_pragmas.h>

#define REQ_LIBRARY_NAME REQTOOLSNAME
#define REQ_LIBRARY_VERSION REQTOOLSVERSION

STATIC struct Library *ReqToolsBase;
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
///                            xpkmaster.library                              <
///
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
#include <pragma/xpkmaster_lib.h>

#define XPK_LIBRARY_NAME    "xpkmaster.library"
#define XPK_LIBRARY_VERSION 4L

STATIC struct Library *XpkBase = NULL;
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
///                             identify.library                              <
///
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
#include <libraries/identify.h>
#include <clib/identify_protos.h>
#include <pragmas/identify_pragmas.h>

#define ID_LIBRARY_NAME     "identify.library"
#define ID_LIBRARY_VERSION  IDENTIFYVERSION

STATIC struct Library *IdentifyBase = NULL;
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
///                             ç éíä-öñí äù½...                              <
///
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
#include <ctype.h>
#include <error.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <clib/alib_protos.h>
#include <libraries/gadtools.h>
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
// Ìäðéíêûéí ëaéïíðíá:

#define REG(x)           register __ ## x
#define GETMES(x)        (messages[x])
#define GETKEY(x)        ((UBYTE)(*(GETMES(x))))
#define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
#define PicPic(w,h,p,b)  BodychunkObject,            TextFrame,\
                         MUIA_InnerBottom,           0L,\
                         MUIA_InnerLeft,             0L,\
                         MUIA_InnerRight,            0L,\
                         MUIA_InnerTop,              0L,\
                         MUIA_FixWidth,              w,\
                         MUIA_FixHeight,             h,\
                         MUIA_Bitmap_Width,          w,\
                         MUIA_Bitmap_Height,         h,\
                         MUIA_Bodychunk_Depth,       p,\
                         MUIA_Bodychunk_Body,        b,\
                         MUIA_Bodychunk_Compression, TRUE,\
                         MUIA_Bodychunk_Masking,     FALSE,\
                         MUIA_Bitmap_SourceColors,   (UBYTE *)colors,\
                         End    
#define SimpleText(text) TextObject,\
                         TextFrame,\
                         MUIA_Text_Contents, text,\
                         End

///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
// Ñäîäïû æaèë½ëðþ çëäìíáaììúëç éíìðñaìñaëç:

// Ëäñíãú ðáþæç...

#define MYTAGBASE (TAG_USER | ( 1 << 16))

#define MUIM_MW_Open                   (MYTAGBASE | 0x1100)
#define MUIM_MW_Close                  (MYTAGBASE | 0x1101)
#define MUIM_MW_XpkUse                 (MYTAGBASE | 0x1102)
#define MUIM_MW_XpkOpen                (MYTAGBASE | 0x1103)
#define MUIM_MW_XpkClose               (MYTAGBASE | 0x1104)
#define MUIM_MW_ListSelect             (MYTAGBASE | 0x1105)
#define MUIM_MW_NewPattern             (MYTAGBASE | 0x1106)
#define MUIM_MW_DelPattern             (MYTAGBASE | 0x1107)
#define MUIM_MW_Accept                 (MYTAGBASE | 0x1108)
#define MUIM_MW_ListEx                 (MYTAGBASE | 0x1109)
#define MUIM_MW_MenuAbout              (MYTAGBASE | 0x110A)
#define MUIM_MW_MenuOpen               (MYTAGBASE | 0x110B)
#define MUIM_MW_MenuSave               (MYTAGBASE | 0x110C)
#define MUIM_MW_NewEnv                 (MYTAGBASE | 0x110D)
#define MUIM_MW_PatReq                 (MYTAGBASE | 0x110E)
#define MUIM_MW_StoReq                 (MYTAGBASE | 0x110F)

#define MUIM_XW_Open                   (MYTAGBASE | 0x1200)
#define MUIM_XW_Close                  (MYTAGBASE | 0x1201)
#define MUIM_XW_ListSelect             (MYTAGBASE | 0x1202)
#define MUIM_XW_Step                   (MYTAGBASE | 0x1203)
#define MUIM_XW_Arrow                  (MYTAGBASE | 0x1204)

// - Îïíöää:

#define SETS_VERSION                   1L
#define SETS_ID                        MAKE_ID('A','M','I','R')

#define ALL_RIGHT                      TRUE
#define GAME_OVER                      FALSE

#define DEF_SYS_DIR                    "SYS:"
#define DEF_SETS_FILE                  "amimirror.sets"
#define DEF_ENV_DIR                    "ENV:"
#define DEF_ENVARC_DIR                 "ENVARC:"
#define DEF_ENV_FILE                   "ENV:amimirror.sets"
#define DEF_ENVARC_FILE                "ENVARC:amimirror.sets"
#define TASK_PREFS_NAME                "AMIMIRRORPREFS"
#define COM_PORT_NAME                  "AMIMIRROR_PORT"
#define REPLY_PORT_NAME                "AMIMIRRORPREFS_PORT"
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
// A ñäîäïû - éíìðñaìñú îäïäöçðêþäëíâí ñçîa:

enum
{
  ABOUT_PROG_PAGE,
  ABOUT_SYSTEM_PAGE,
  EDITOR_PAGE
};

enum
{
  SAVE_SETS_DEF,
  SAVE_SETS_CUR,
  SAVE_SETS_REQ
};

// Ðííàùäìçþ çæ éañaêíâa...
enum
{
  PROG_NAME,
  PROG_VERSION,
  CATALOG_NAME,
  BUILTIN_LANGUAGE,

  PROG_COPYRIGHT,
  PROG_AUTHOR,
  PROG_DESC,
  PROG_INFO_TITLE,
  PROG_INFO,
  MUI_COPYRIGHT,

  REQ_TITLE_ERROR,

  OUT_MEM,
  LIBRARY_PROBLEM,
  CC_PROBLEM,
  APPLICATION_PROBLEM,
  WINDOW_PROBLEM,
  CANT_CREATE_PORT,
  NO_COMMODITY,
  DOS_ERROR_STR,
  CANT_OPEN_SETS,
  CANT_READ_SETS,
  CANT_SAVE_SETS,
  CANT_GIVE_SETS,
  LIST_EMPTY_SETS,
  NOT_SETS_FILE,
  XPK_NOLIST_ERROR,
  XPK_NOINFO_ERROR,
  PAT_PRESENT_ERROR,
  PAT_STORAGE_ERROR,

  REQ_SELECT_OPEN_FILE,
  REQ_LOAD_BUT,
  REQ_SELECT_SAVE_FILE,
  REQ_SAVE_BUT,
  REQ_SELECT_PATTERN,
  REQ_SELECT_STORAGE,
  REQ_ACCEPT_BUT,

  SAVE_BUT,
  SAVE_KEY,
  USE_BUT,
  USE_KEY,
  EXIT_BUT,
  EXIT_KEY,
  OK_BUT,
  CANCEL_CONTINUE_BUT,

  PROJECT_MENU,
  OPEN_MENU,
  OPEN_MENU_KEY,
  LOAD_DEF_MENU,
  LOAD_DEF_MENU_KEY,
  SAVE_MENU,
  SAVE_MENU_KEY,
  SAVE_DEF_MENU,
  SAVE_DEF_MENU_KEY,
  SAVE_AS_MENU,
  SAVE_AS_MENU_KEY,
  ABOUT_MENU,
  PROGRAM_MENU,
  PROGRAM_MENU_KEY,
  SYSTEM_MENU,
  SYSTEM_MENU_KEY,
  HIDE_MENU,
  HIDE_MENU_KEY,
  QUIT_MENU,
  QUIT_MENU_KEY,
  MUI_MENU,
  MUI_ABOUT_MENU,
  MUI_PREFS_MENU,

  MAINWIN_TITLE,
  PATLIST_TITLE,
  ADD_BUT,
  ADD_KEY,
  DEL_BUT,
  DEL_KEY,
  UP_BUT,
  UP_KEY,
  DOWN_BUT,
  DOWN_KEY,

  SYSTEM_INFO_TITLE,
  SYSTEM_ISTR,
  CPU_ISTR,
  FPU_ISTR,
  MMU_ISTR,
  OS_ISTR,
  EXEC_ISTR,
  WB_ISTR,
  CHSET_ISTR,
  GFX_ISTR,
  CHIP_ISTR,
  FAST_ISTR,

  EDITOR_TITLE,
  PATTERN_STR_STR,
  PATTERN_STR_KEY,
  PATTERN_MODE_STR,
  PATTERN_MODE_KEY,
  FILE_PATTERN,
  PATH_PATTERN,
  UNI_PATTERN,
  STORAGE_STR_STR,
  STORAGE_STR_KEY,
  STORAGE_MODE_STR,
  STORAGE_MODE_KEY,
  SIMPLE_FILE,
  FILE_WITH_PATH,
  STORAGE_METHOD_STR,
  STORAGE_METHOD_KEY,
  REPLACE_METHOD,
  COLLECT_METHOD,
  USE_XPK_STR,
  USE_XPK_KEY,
  PERFORM_CHECK_STR,
  PERFORM_CHECK_KEY,
  PERFORM_CHECK_NO,
  PERFORM_CHECK_YES,
  ACCEPT_BUT,
  ACCEPT_KEY,
  CANCEL_BUT,
  CANCEL_KEY,

  XPKWIN_TITLE,
  XPKLIST_TITLE,
  XPKINFO_TITLE,
  XPKSET_TITLE,
  NEW_PATTERN_NAME,
  XPK_FULLNAME_STR,
  XPK_DESC_STR,
  ENCRYPT_STR,
  ENCRYPT_ABSENT,
  ENCRYPT_PRESENT,
  ENCRYPT_PASSWORD,
  PACKSPEED_STR,
  UNPACKSPEED_STR,
  XPK_SPEED_FORMAT,
  RATIO_STR,
  XPK_RATIO_FORMAT,
  COMMENT_STR,
  STEP_STR,
  STEP_KEY,
  PASSWORD_STR,
  PASSWORD_KEY,

  FINISH,
};


STATIC STRPTR messages[] =
{
  "AmiMirrorPrefs",
  "$VER: AmiMirrorPrefs 1.0 (17.08.98)",
  "amimirrorprefs.catalog",
  "english",
  "AmiMirrorPrefs © 1998 Black Square Software",
  "Sergeev O.V",
  "Preferences editor for AmiMirror",
  "Program Information",
  "AmiMirrorPrefs\n\nPreferences editor\nfor AmiMirror software\n\nCopyright\n© 1998 Black Square Software\nSaint Petersburg, RUSSIA\n\nAuthor\nSergeev Oleg\nemail: bigblack@neworder.spb.ru",
  "This application uses MUI.\nMUI is copyrighted\nby Stefan Stuntz",

  "AmiMirrorPrefs error",

  "Not enough memory",
  "Cannot open %s version %ld+",
  "Cannot create MUI custom class",
  "Cannot run MUI application",
  "Cannot create application window",
  "Cannot create port",
  "AmiMirror commodity is not running",
  "\nDOS Error",
  "Cannot open settings file\n%s%s",
  "Cannot read settings file\n%s%s",
  "Cannot save settings file\n%s%s",
  "Cannot trace patterns list properly",
  "Nothing to save.\nPatterns list is empty.",
  "Wrong settings file\n%s",
  "Cannot get list of XPK packers",
  "Cannot get information\nabout XPK packer %s",
  "Pattern\n%s\nalready present!",
  "Please define both\nPattern and Storage strings!",

  "Select file to open",
  "_Open",
  "Select file to save",
  "_Save",
  "Select pattern",
  "Select storage",
  "_Accept",

  "Save",
  "s",
  "Use",
  "u",
  "Quit",
  "q",
  "Ok",
  "Cancel|Continue",

  "Project",
  "Open",
  "O",
  "Open default",
  "E",
  "Save",
  "S",
  "Save default",
  "V",
  "Save as...",
  "A",
  "About",
  "Program",
  "P",
  "System",
  "Y",
  "Iconify",
  "I",
  "Quit",
  "Q",
  "MUI",
  "About",
  "Prefs",

  "AmiMirrorPrefs - Main Window",
  "Patterns list",
  "Add",
  "a",
  "Delete",
  "d",
  "Up",
  "p",
  "Down",
  "w",

  "System Information",
  "System:",
  "CPU:",
  "FPU:",
  "MMU:",
  "Kickstart:",
  "Exec library:",
  "Workbench:",
  "Chipset:",
  "Gfx system:",
  "Chip RAM:",
  "Fast RAM:",

  "Editor",
  "Pattern:",
  "t",
  "Pattern Mode:",
  "m",
  "Name",
  "Path",
  "Name & Path",
  "Storage:",
  "g",
  "Storage Mode:",
  "o",
  "Simple File",
  "With Path",
  "Storage Method:",
  "h",
  "Replace",
  "Collect",
  "Use XPK:",
  "x",
  "Perform check:",
  "r",
  "No",
  "Yes",
  "Accept",
  "e",
  "Cancel",
  "c",

  "AmiMirrorPrefs - XPK Preferences",
  "Available",
  "Information",
  "Settings",
  "< N O N E >",
  "Full Name",
  "Description",
  "Encrypt:",
  "Absent",
  "Present",
  "Need Password",
  "Pack Speed:",
  "Unpack Speed:",
  "%ld Kb/sec",
  "Ratio:",
  "%ld.%ld%%",
  "Comment:",

  "Step:",
  "s",
  "Password:",
  "p",

};

// Îïíâïaëëìíä ëäìý:
STATIC struct NewMenu MainWinMenu[] =
  {
#define KEY (APTR)TRUE
    { NM_TITLE, NULL,        NULL, 0, 0, (APTR)PROJECT_MENU   },
    { NM_ITEM , NULL,        KEY,  0, 0, (APTR)OPEN_MENU      },
    { NM_ITEM,  NULL,        KEY,  0, 0, (APTR)LOAD_DEF_MENU  },
    { NM_ITEM , NULL,        KEY,  0, 0, (APTR)SAVE_MENU      },
    { NM_ITEM,  NULL,        KEY,  0, 0, (APTR)SAVE_DEF_MENU  },
    { NM_ITEM , NULL,        KEY,  0, 0, (APTR)SAVE_AS_MENU   },
    { NM_ITEM,  NM_BARLABEL, NULL, 0, 0, NULL                 },
    { NM_ITEM,  NULL,        NULL, 0, 0, (APTR)ABOUT_MENU     },
    { NM_SUB,   NULL,        KEY,  0, 0, (APTR)PROGRAM_MENU   },
    { NM_SUB,   NULL,        KEY,  0, 0, (APTR)SYSTEM_MENU    },
    { NM_ITEM,  NM_BARLABEL, NULL, 0, 0, NULL                 },
    { NM_ITEM,  NULL,        KEY,  0, 0, (APTR)HIDE_MENU      },
    { NM_ITEM,  NULL,        KEY,  0, 0, (APTR)QUIT_MENU      },
    { NM_TITLE, NULL,        NULL, 0, 0, (APTR)MUI_MENU       },
    { NM_ITEM,  NULL,        NULL, 0, 0, (APTR)MUI_ABOUT_MENU },
    { NM_ITEM,  NULL,        NULL, 0, 0, (APTR)MUI_PREFS_MENU },
    { NM_END,   NULL,        NULL, 0, 0, NULL                 },
#undef KEY
  };
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
// Ñäâç ðñïòéñòï ãaììúô êçöìúô éêaððíá:

/// ...íàÿäéña MainWin:
///
struct MWData
  {
    Object *PatLView;
    Object *PatList;
    Object *Page;
    Object *Editor;
    Object *Pattern;
    Object *Storage;
    Object *PatMode;
    Object *StoMode;
    Object *StoMethod;
    Object *PCheck;
    Object *XpkUse;
    Object *XpkName;
    struct PatternNode *PNode;
    UWORD step;
    UBYTE xpkname[6];
    UBYTE password[32];
    UBYTE CurDir[FMSIZE];
    UBYTE CurFile[FMSIZE];
    UBYTE setsfile[FMSIZE];
  };
/// ...íàÿäéña XpkWin:
///
struct XWData
  {
    Object *XpkLView;
    Object *XpkList;
    Object *XpkFName;
    Object *XpkDesc;
    Object *XpkEncrypt;
    Object *XpkStep;
    Object *XpkArrow;
    Object *XpkPSpeed;
    Object *XpkUPSpeed;
    Object *XpkRatio;
    Object *XpkComment;
    Object *XpkPassword;
    UBYTE pspeed[32];
    UBYTE upspeed[32];
    UBYTE ratio[32];
  };

/// Ñäâç ðñïòéñòï òðñaìíáíé:
///

// Ìaöaêí óaèêa òðñaìíáíé:
struct SetsHeader
{
  ULONG sh_ID;
  ULONG sh_version;
  ULONG sh_amount;
};

// Æaâíêíáíé øaàêíìa á óaèêä òðñaìíáíé:
struct PatternHeader
{
  unsigned ph_PatternMode   : 2;
  unsigned ph_StorageMode   : 2;
  unsigned ph_StorageMethod : 2;
  unsigned ph_PerformCheck  : 1;
  unsigned ph_UseXPK        : 1;
  unsigned ph_pad           : 8;
  UBYTE    ph_XPKName[6];
  UWORD    ph_XPKMode;
  UWORD    ph_PatternSize;
  UWORD    ph_StorageSize;
  UWORD    ph_PasswordSize;
};

// Íîçðúáaýùaþ øaàêíì ïaàíöaþ ðñïòéñòïa:
struct PatternNode
{
  struct Node pn_Node;
  unsigned pn_PatternMode   : 2;
  unsigned pn_StorageMode   : 2;
  unsigned pn_StorageMethod : 2;
  unsigned pn_PerformCheck  : 1;
  unsigned pn_UseXPK        : 1;
  unsigned pn_pad           : 8;
  UBYTE    pn_XPKName[6];
  UWORD    pn_XPKMode;
  UBYTE    pn_Pattern[FMSIZE];
  UBYTE    pn_Storage[FMSIZE];
  UBYTE    pn_Password[32];
};

///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
// Ìäéíñíïúä âêíàaêûìúä îäïäëäììúä ç ãaììúä.

IMPORT LONG __stack   = 8192L;
IMPORT LONG __STKNEED = 2048L;

STATIC VAGUE  PatternMode[]   = { FILE_PATTERN, PATH_PATTERN, UNI_PATTERN, NULL };
STATIC VAGUE  StorageMode[]   = { SIMPLE_FILE, FILE_WITH_PATH, NULL };
STATIC VAGUE  StorageMethod[] = { REPLACE_METHOD, COLLECT_METHOD, NULL };
STATIC VAGUE  PerformCheck[]  = { PERFORM_CHECK_NO, PERFORM_CHECK_YES, NULL };

STATIC UBYTE empty[]       = "";

STATIC UBYTE  dosfault[2*FAULT_MAX];
STATIC struct XpkPackerList *XL = NULL;
STATIC struct XpkPackerInfo *XI = NULL;
STATIC struct XpkMode       *XM = NULL;

// ðîçðíé øaàêíìíá:
STATIC struct List *PatList  = NULL;
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
// Îïíâïaëëa, íðìíáìíä íéìí, íéìí óaèê-ñçîíá, íéìa çìãçéaõçç, îíéaæa ç
// ïäâçðñïaõçç àòãòñ çëäñû âêíàaêûìúä òéaæañäêç:

STATIC Object *AmiMirrorPrefs = NULL;      // Îïíâïaëëa
STATIC Object *MainWin        = NULL;      // Íðìíáìíä íéìí
STATIC Object *XpkWin         = NULL;      // Íéìí ìaðñïíèéç XPK

// Òéaæañäêç ìa êçöìúä éêaððú:

STATIC struct MUI_CustomClass *mw_mcc = NULL;
STATIC struct MUI_CustomClass *xw_mcc = NULL;

// Îäïäëäììúä ãêþ íàìíáêäìçþ MUI-íéíì, "îíáïäåãaäëúô" æáîïíðìçéaëç
// reqtools.library:

struct Hook ReqHook;         // Óòìéõçþ íàìíáêäìçþ íéíì;
struct TagItem hooktags[] = { RT_Window,       NULL,
                              RT_ShareIDCMP,   TRUE,
                              RT_IntuiMsgFunc, NULL,
                              TAG_DONE, 0L };

//...îïíñíñçî aððäëàêäïìíè óòìéõçç, üëòêçïòýùäè sprintf() öäïäæ RawDoFmt():
void __stdargs RDF (STRPTR buffer, STRPTR format, ULONG arg, ...);

