home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / disk utilities / backup / backup_restore / backup_src_v3.20.lha / Backup.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-11-16  |  20.9 KB  |  698 lines

  1. // Backup.h
  2. // 16 Nov 1996 14:40:06
  3.  
  4. #ifndef BACKUP_H_INCLUDED
  5.  
  6. #include <assert.h>
  7. #include "ScrollingWindows.h"
  8. #include "Resources.h"
  9. #include "Backup_Rev.h"
  10.  
  11.  
  12. #define VERS_OFFSET    230        // früheste Backup-Version, die mit Byte-Offset
  13.                     // statt Sektornummer in NameField arbeitet
  14.  
  15. #define    FILELABEL    0x117755aa    // Magic ID für FileLabel
  16.  
  17. // Magic ID für binäre Protokollfiles
  18. #define    PROTFILEHEADER            ("\x55\xaa" "BACKUP_PROTFILE" "\x55\xaa")
  19. #define    COMPRESSEDPROTFILEHEADER    ("\x55\xaa" "BACKUP_COMPPROT" "\x55\xaa")
  20.  
  21.  
  22. // Benötigte Library-Versionen
  23. #define INTUITION_REV    39
  24. #define GRAPHICS_REV    39
  25. #define    ICON_REV    39
  26.  
  27. #define    GADCODE_HELP    0x5f        // Exitcode für Stringgadgets wenn Help-Taste gedrückt
  28. #define    GADCODE_UP    0x4c        // Exitcode für Stringgadgets wenn Up-Taste gedrückt
  29. #define    GADCODE_DOWN    0x4d        // Exitcode für Stringgadgets wenn Down-Taste gedrückt
  30. #define    GADCODE_LEFT    0x4f        // Exitcode für Stringgadgets wenn Left-Taste gedrückt
  31. #define    GADCODE_RIGHT    0x4e        // Exitcode für Stringgadgets wenn Right-Taste gedrückt
  32. #define    GADCODE_PAGEUP    0x104c        // Exitcode für Stringgadgets wenn Shift+Up-Taste gedrückt
  33. #define    GADCODE_PAGEDOWN 0x104d        // Exitcode für Stringgadgets wenn Shift+Down-Taste gedrückt
  34. #define    GADCODE_TOP    0x204c        // Exitcode für Stringgadgets wenn Ctrl+Up-Taste gedrückt
  35. #define    GADCODE_BOTTOM    0x204d        // Exitcode für Stringgadgets wenn Ctrl+Down-Taste gedrückt
  36. #define    GADCODE_CANCEL    0x5555        // Exitcode für Stringgadgets wenn Escape gedrückt
  37. #define    GADCODE_NOP    (~0)
  38.  
  39.  
  40. #define    CSI        "\x9b"        // Lead-In für Console-Steuerzeichen
  41.  
  42.  
  43. // AppMessage-IDs
  44. #define    AMID_FILESELECT    1
  45. #define    AMID_GO        2
  46.  
  47.  
  48. // Zählerstand für Verzögerung bei Scrollen mit betätigten Pfeil-Gadgets (in IntuiTicks
  49. #define    MAX_TICK_COUNT    1
  50.  
  51. #define    YEARZERO    1970            // Jahr #0 für MinDate und MaxDate
  52. #define    YEARDIFF    (6*365+2*366)        // Tages-Unterschied zwischen 1.1.70 und 1.1.78
  53.  
  54. #define    LOGNAME    "Backup.%d.%t.Directory"    // default-Name für Protokoll-File
  55. #define    LOGDIR    "t:"                // default Directory für Protokoll-File
  56.  
  57. #define    MIN_STACK    20000            // mindestens benötigter Stack
  58.  
  59. #define    NCHG        5            // so oft muß DiskChangeCount konstant bleiben,
  60.                         // damit Diskettenwechsel erkannt wird
  61. // Window-Größe
  62. #define    BREITE    640
  63. #define    HOEHE    170
  64.  
  65.  
  66. #define    XPK_PASSWORDLEN    40        // max. Länge für Xpk-Password
  67. #define    XPK_PACKNAMELEN    (6+4)        // max. Länge für Xpk-Packername + Mode, Format "ABCD.100"
  68.  
  69. #define    PASSWORD_FONTNAME        "Backup_Password.font"
  70.  
  71. #define    DEFAULT_DISKSAVE        "t:Backup"        // Prefix für Disksave-File
  72.  
  73. #define    DEFAULT_TAPEDRIVEDATABASE    "s:Backup.TapeDriveData"
  74.  
  75. #define    DEFAULT_SCRIPTPATH        "PROGDIR:"        // Default-Pfad für Backup-Script
  76. #define    DEFAULT_HELPPATH        "PROGDIR:guide/"    // Default-Pfad für Hilfe-Files
  77.  
  78.  
  79. #define    DEFAULT_QFA_PARTSIZE        10            // Defaultgröße für eine QFA-Partition in MB
  80.  
  81.  
  82. // Kennungen in myOptions.Compress
  83. #define    COMPRESS_NONE        0
  84. #define    COMPRESS_INTERNAL    1
  85. #define    COMPRESS_XPK        2
  86.  
  87. #define    DISKTEXT_WIDTH    28        // Breite des Textfeldes rechts oben
  88.                     // für die Laufwerke (in Zeichen)
  89.  
  90. #define    CYLSIZE_TAPE    99999999    // dieser Wert wird bei Tapes als Cylindergröße eingetragen
  91.  
  92.  
  93. // OBSOLET
  94. // ein Teil der File Protection Bits wurde früher (Format=0) für private Flags benutzt
  95. #define    FILEPROT    0xffffff    // Bitmaske für System-Bits
  96.  
  97.  
  98. // die übrigen Bits MYFLAGS werden für interne Zwecke benutzt
  99. #define    MYFLAGS        0xff000000
  100.  
  101. // Definitionen für MYFLAGS
  102. #define    FIBB_COMPRESS    31        // File wurde komprimiert
  103. #define    FIBF_COMPRESS    (1<<FIBB_COMPRESS)
  104. #define    FIBB_SOFTLINK    30        // Dies ist ein Soft-Link
  105. #define    FIBF_SOFTLINK    (1<<FIBB_SOFTLINK)
  106. #define    FIBB_HARDLINK    29        // Dies ist ein Hard-Link
  107. #define    FIBF_HARDLINK    (1<<FIBB_HARDLINK)
  108.  
  109.  
  110. #define    BACKUP_FORMAT_ID    1    // Id. des aktuellen Aufzeichnungsformats
  111.  
  112.  
  113. #define    PATTERN_LEN    25        // max. Länge Include- und Exclude-Pattern
  114.  
  115. #define    PROT_FNAME_LEN    64        // max. Zeilenlänge für Filename in Prot-File
  116.  
  117. #define    MAX_CYLBUFF    15        // maximale Anzahl Disk-Buffer
  118. #define    MIN_CYLBUFF    3        // minimale Anzahl Disk-Buffer
  119.  
  120. #define    NDISK        4        // max. Anzahl Laufwerke
  121. #define    NO_DRIVE    (~0)
  122. #define    DFLT_BLOCKSIZE    512
  123.  
  124. #define    IMAGEBUTTON_KIND    1099
  125.  
  126. #define    DISKID            "BACKUP"
  127.  
  128.  
  129. // Ergebniscodes FileSelect
  130. #define    FS_START    5001
  131. #define    FS_ABORT    5002
  132. #define    FS_NOTHING    5004
  133.  
  134. // Ergebniscodes GlobOpt
  135. #define    GO_OK        6001
  136. #define    GO_ABORT    6002
  137.  
  138.  
  139. #define    BORDERXY(Name, Gw, Gh)    \
  140.     static SHORT Name##XY1[] = {    1, Gh-1, Gw-1, Gh-1, Gw-1,    0, Gw-2,    1, Gw-2, Gh-2 };\
  141.     static SHORT Name##XY2[] = { Gw-2,    0,    0,    0,    0, Gh-1,    1, Gh-2,    1,    1 };
  142.  
  143. #define    BORDER(Name, Width, Height, Left, Top) \
  144.     static SHORT Name##BorderXY1[] = { 1, Height-1, Width-1, Height-1, Width-1, 0, Width-2, 1, Width-2, Height-2 };\
  145.     static SHORT Name##BorderXY2[] = { Width-2, 0, 0, 0, 0, Height-1, 1, Height-2, 1, 1 };\
  146.     static struct Border Name##Border[] = \
  147.         { \
  148.         { Left, Top,  1, BGCOLOR, JAM1, 5, Name##BorderXY1, &##Name##Border[1] }, \
  149.         { Left, Top,  2, BGCOLOR, JAM1, 5, Name##BorderXY2, NULL }, \
  150.         };
  151.  
  152. #define    IBORDER(Name, Width, Height, Left, Top) \
  153.     static SHORT Name##BorderXY1[] = { 1, Height-1, Width-1, Height-1, Width-1, 0, Width-2, 1, Width-2, Height-2 };\
  154.     static SHORT Name##BorderXY2[] = { Width-2, 0, 0, 0, 0, Height-1, 1, Height-2, 1, 1 };\
  155.     static struct Border Name##Border[] = \
  156.         { \
  157.         { Left, Top,  2, BGCOLOR, JAM1, 5, Name##BorderXY1, &##Name##Border[1] }, \
  158.         { Left, Top,  1, BGCOLOR, JAM1, 5, Name##BorderXY2, NULL }, \
  159.         };
  160.  
  161.  
  162. typedef long        code_int;
  163. typedef long        count_int;
  164. typedef unsigned char    char_type;
  165.  
  166.  
  167. enum MsgPriority { MSGPRI_Info, MSGPRI_Warning, MSGPRI_Error, MSGPRI_FatalError };
  168.  
  169. enum DevSelExclude { DSX_ExcludeNothing, DSX_ExcludeTape, DSX_ExcludeNull };
  170.  
  171. enum CloseDiskParm { CDP_UnloadTape, CDP_KeepTape };
  172.  
  173. enum TapeFunc { TF_Rewind, TF_Retension, TF_Erase, TF_Unload, TF_Load };
  174.  
  175. enum BufferStatus { LEER = 1, FUELLEN, LEEREN, VOLL };
  176.  
  177. enum TestDiskResult { UNREADABLE, DOSDISK, OK, DISKCHANGED, NOTLASTDISK,
  178.               FROMTHISSET, NOBACKUPDISK, PANIC };
  179.  
  180. enum DskStat { EmptyDrive, WaitingForDisk, CheckingDisk, DiskInUse, DiskObsolete, DiskOk };
  181.  
  182. enum DCResult { UNKNOWN, BAD, DCOK, FINISHED };
  183.  
  184. enum ArchiveStatus { Ignore, Set, Reset };
  185.  
  186. enum FType { File, HardLinkFile, SoftLinkFile, Device, Directory, Assign, Volume,
  187.         SoftLinkDir, HardLinkDir, EmptyDir };
  188.  
  189. enum SelectType { ST_None=0, ST_Deselected, ST_Selected };
  190.  
  191. enum ProtType { PT_None, PT_Binary, PT_ASCII };
  192.  
  193. enum DirSort { DirFirst, DirLast, DirBetween };
  194. enum SortType { SortName, SortDate, SortSize };
  195.  
  196.  
  197. struct GadgetShortInfo
  198.     {
  199.     struct Gadget *gi_Gadget;    // das Gadget
  200.     UWORD gi_GadgetType;        // der Gadget-Typ
  201.     ULONG gi_Extra;            // Zusatz-Info je nach Gadget-Typ
  202.     };
  203.  
  204. struct GadgetShort
  205.     {
  206.     struct GadgetShortInfo gs_Info[UCHAR_MAX];
  207.     };
  208.  
  209. struct myDate
  210.     {
  211.     short Day;
  212.     short Month;
  213.     short Year;
  214.     };
  215.  
  216. struct TapeIO
  217.     {
  218.     struct BackupDevInfo *DrvDat;
  219.     struct IOExtTD *Req;
  220.     struct SCSICmd Cmd;
  221.     UBYTE Befehl[10];        // SCSI-Befehl
  222.     UBYTE Sense[27];        // SCSI-Sense nach Fehler
  223.     UBYTE IOError;            // Fehlercode aus IORequest
  224.  
  225.     short Medium;            // Band-Typ
  226.     short Density;            // Aufzeichnungsformat
  227.  
  228.     unsigned int withQFA : 1;    // benutzt QFA
  229.     };
  230.  
  231.  
  232. struct Buffer
  233.     {
  234.     struct SignalSemaphore BuffSema;
  235.     char *dbp;            // Pointer auf Disk-Buffer
  236.     enum BufferStatus Status;    // Statusflag
  237.     unsigned long BufferCheckSum;    // Prüfsumme über Bufferinhalt
  238.     unsigned char disknr;        // Disk-Nummer für Buffer-Inhalt
  239.     struct IOExtTD BufIOReq;    // IORequest für Buffer
  240.     struct IOExtTD VerifyReq;    // IORequest für Verify
  241.     struct TapeIO  *TapeReq;    // Zusatzinfo für Tape Devices
  242.  
  243.     char *WritePtr;            // Write Pointer
  244.     unsigned long BuffFree;        // freier Platz in Bytes
  245.     };
  246.  
  247. struct DiskLabel
  248.     {
  249.     char Id[7];            // "BACKUP\0"
  250.     char pad1;
  251.     UBYTE diskno;            // Disk-Nummer
  252.     UBYTE lastdisk;            // != 0 bei der letzten Disk im Backup-Set
  253.     short Version;            // Backup-Version
  254.     unsigned long LabelCheckSum;    // Prüfsumme für DiskLabel
  255.     char BackupZeit[8];        // Startzeit des Backups
  256.     char pad3[1];
  257.     char withQFA;            // Band benutzt QFA
  258.     unsigned long DirCheckSum;    // Prüfsumme für Directory
  259.     unsigned short RecordedFormat;    // Variante des Aufzeichnungsformats
  260.     unsigned long  DirAnf;        // Startsektor für Directory: 1 bei QFA!!
  261.     unsigned long DirLen;        // Länge Directory in Sektoren
  262.     unsigned long DirAnz;        // Anzahl Directory-Einträge
  263.     unsigned long EndOfData;    // Offset des letzten Datenbyte aus Files
  264.     char ProtFileName[FMSIZE];    // Name des Protokollfiles
  265.  
  266.     unsigned long RealDirAnf;    // Startsektor für Directory, auch richtig bei QFA
  267.  
  268.     char pad4[DFLT_BLOCKSIZE-52-FMSIZE];
  269.     };
  270.  
  271. #if sizeof(struct DiskLabel) != DFLT_BLOCKSIZE
  272. #error Größe von DiskLabel stimmt nicht
  273. #endif
  274.  
  275. struct OldNameField
  276.     {
  277.     struct NameField *NextName;
  278.  
  279.     unsigned long Offset;        // Hier steht die Datei (Offset in Bytes)
  280.     unsigned long FileLen;        // Länge der Datei
  281.     struct DateStamp FileDate;    // Datum & Uhrzeit der Datei
  282.     unsigned long Flags;        // File-Attribute
  283.     char Complete;            // != 0 wenn komplett auf akt. Disk
  284.     SHORT Extension;        // Extensionnummer bei diskübergreifenden Dateien
  285.     SHORT NameLen;            // Länge des Filenamens
  286.     char Name[1];            // Hier fängt der Filename an
  287.     };
  288.  
  289.  
  290. struct NameField
  291.     {
  292.     struct NameField *NextName;
  293.  
  294.     int isComplete : 1;        // != 0 wenn komplett auf akt. Disk
  295.     int isCompressed : 1;        // OBSOLETE !!! File ist komprimiert
  296.                     // neu hierfür: CompressionType
  297.     int isHardLink : 1;        // Dieser Eintrag beschreibt ein Hardlink
  298.     int isSoftLink : 1;        // Dieser Eintrag beschreibt ein Softlink
  299.     int isDir : 1;            // Dies ist ein Directory
  300.     int isPartition : 1;        // hier wurde eine Partition gesichert
  301.     int Reserved1 : 26;
  302.  
  303.     unsigned short Extension;    // Extensionnummer bei diskübergreifenden Dateien
  304.     unsigned short SessionNr;    // fortlaufende Nummer bei Append
  305.  
  306.     char CompressionType;        // legt Art der Kompression fest
  307.  
  308.     char Reserved2;
  309.  
  310.     unsigned char NFCheckSum;    // Prüfsumme für diesen Eintrag
  311.  
  312.     unsigned char DiskNr;        // auf dieser Disk steht der File-Anfang
  313.  
  314.     unsigned long Offset;        // Hier steht die Datei (Offset in Bytes)
  315.     unsigned long FileLen;        // Länge der Datei
  316.     unsigned long RecordedLen;    // tatsächlich geschriebene Länge
  317.     struct DateStamp FileDate;    // Datum & Uhrzeit der Datei
  318.     long Protection;        // File-Attribute
  319.  
  320.     unsigned short NameLen;        // Länge des Filenamens
  321.  
  322.     char Name[1];            // Hier fängt der Filename an
  323.     };
  324.  
  325. // Makro zur Bestimmung der Länge eines NameField <nf>
  326. #define    NF_LEN(nf)    (sizeof(struct NameField) + (nf)->NameLen)
  327.  
  328.  
  329. // dieses Feld wird jedem File auf einem Band vorangestellt
  330. // die Länge ist variabel wegen des NameField (File-Name)
  331. struct FileLabel
  332.     {
  333.     unsigned long FL_Magic1, FL_Magic2;    // Kennung
  334.     unsigned long FL_CheckSum;
  335.     unsigned long FL_Length;    // gesamte Länge des File-Labels
  336.     struct NameField FL_nf;
  337.     };
  338.  
  339.  
  340. struct DirEntry
  341.     {
  342.     struct MinNode Node;
  343.     struct MinList Sub;        // Anfang d. Liste von Subdirectories
  344.     struct DirEntry *Root;
  345.     unsigned short Contents;    // Zähler für Einträge im aktuellen Directory
  346.  
  347.     int Virgin : 1;
  348.     int Done : 1;
  349.     int Temporary : 1;
  350.  
  351.     char Name[1];
  352.     };
  353.  
  354.  
  355. struct PartitionInfo
  356.     {
  357.     struct DiskFlags *Dsk;        // Pointer in Disks[]
  358.     struct IOExtTD *PartIO;        // IORequest zum Lesen
  359.  
  360.     APTR TrackBuff;
  361.     size_t TrackBuffSize;        // Länge von TrackBuff
  362.     ULONG BytesInTrackBuff;
  363.     ULONG TBOffset;            // Offset Lesezeiger vom TrackBuff-Anfang
  364.  
  365.     ULONG CurrentOffset;
  366.  
  367.     ULONG FirstSector, LastSector;
  368.     ULONG SectorSize;
  369.  
  370.     ULONG PartSize;            // Größe in Bytes
  371.  
  372.     BOOL Locked;            // Flag: TRUE solange Partition mit Inhibit() gesperrt
  373.     };
  374.  
  375. struct NextFileInfo
  376.     {
  377.     unsigned long nfi_FSDirIndex;
  378.     char nfi_FSDirListDone;
  379.  
  380.     unsigned long nfi_VisibleIndex;
  381.     struct FSDir *nfi_Dir;
  382.  
  383.     BPTR nfi_DirLock;        // Lock für Directories
  384.     struct MinList nfi_FirstDir;
  385.  
  386.     struct ExAllControl *nfi_eaControl;    // Control für ExAll()
  387.     APTR nfi_eaBuffer;            // Buffer für ExAll()
  388.     struct ExAllData *nfi_eaData;        // Ergebnisdaten von ExAll()
  389.     BOOL nfi_eaMore;            // Ergebnis von ExAll()
  390.  
  391.     BOOL nfi_TellSkips;            // Flag: melden wenn Files weggelassen werden (z.B. aktuelles ProtFile)
  392.  
  393.     struct BackupOptions *nfi_Opt;
  394.  
  395.     void (*nfi_DirDisplay)(struct DirEntry *);    // Anzeige der neuen Directories
  396.     };
  397.  
  398.  
  399. struct NfSplit
  400.     {
  401.     struct NameField *aktName;
  402.     void *FirstPart, *SecondPart;
  403.     unsigned long FirstPartLen;
  404.     unsigned long SecondPartLen;
  405.     };
  406.  
  407. struct DirBlock
  408.     {
  409.     struct MinNode db_Node;
  410.     struct NameField *LostNF;    // NF, das teilweise am Ende von Data steht
  411.     char *wp;            // Schreibzeiger
  412.     unsigned long DataLength;    // gesamte Länge von Data[]
  413.     unsigned long Space;        // noch verfügbarer Platz
  414.     char Data[1];            // Datenblock (Dsk_CylSize lang)
  415.     };
  416.  
  417.  
  418. struct Disk
  419.     {
  420.     struct MinList DirBuffers;    // Liste der Buffer fürs Directory
  421.     BOOL dirwritten;
  422.     unsigned long dirlength;    // Directorylänge auf aktueller Disk
  423.     unsigned long diranz;        // Anzahl Einträge auf der aktuellen Disk
  424.     unsigned long diranf;        // Startsektor des Directory
  425.     long maxbyte;            // Disk-Größe in Bytes
  426.     long Offset;            // aktueller Offset-Stand beim Lesen
  427.     long MaxOffset;            // Letzter Offset beim Lesen (1. freies Byte)
  428.     unsigned char nr;        // aktuelle Disk-Nummer
  429.     };
  430.  
  431.  
  432. // Makros zum bequemeren Umgang mit der DirBuffers-Liste
  433. #define    FIRST_NF(Disk)    ((struct NameField *) (((struct DirBlock *) Disk.DirBuffers.mlh_Head)->Data))
  434. #define    LATEST_DB(Disk)    ((struct DirBlock *) (Disk).DirBuffers.mlh_TailPred)
  435. #define    DB_EMPTY(Disk)    (IsListEmpty((struct List *) &(Disk).DirBuffers))
  436.  
  437.  
  438. // Kompatibilitätsflags für Bandlaufwerke
  439. struct TapeFlags
  440.     {
  441.     unsigned int DriveKnown : 1;    // Flag: 1 wenn Laufwerk bekannt, 0 wenn default-Werte
  442.     unsigned int Valid : 1;        // TapeFlags sind gültig
  443.  
  444.     unsigned int canQFA : 1;    // benutzt QFA
  445.     unsigned int FastSpace : 1;    // kann Fast Space
  446.     unsigned int canLocate : 1;    // kennt Locate
  447.     unsigned int SpaceBack : 1;    // kann Space rückwärts
  448.     unsigned int PageFormat : 1;    // kennt Mode Pages
  449.     unsigned int InvertEOT : 1;    // EOT bei Unload invertieren
  450.     unsigned int EraseLONG : 1;    // LONG-Bit setzen bei ERASE
  451.     unsigned int AppendQFA : 1;    // QFA klappt bei Append
  452.     unsigned int SpaceEOR : 1;    // kann Space to End Of Recorded Area
  453.     unsigned int UpdateInPlace : 1;    // kann beliebige Blöcke überschreiben
  454.     };
  455.  
  456. struct BackupDevInfo
  457.     {
  458.     ULONG BlockSize;        // Sektorgröße in Bytes
  459.     USHORT NumHeads;        // Anzahl Köpfe
  460.     ULONG NumCyls;            // Anzahl Zylinder
  461.     ULONG NumSecs;            // Sektoren je Track
  462.     ULONG TrackSize;        // Bytes je Spur
  463.     ULONG CylSize;            // Bytes je Zylinder
  464.     ULONG FirstCyl;            // Start-Zylinder
  465.     ULONG BufMemType;
  466.     ULONG Flags;            // Flags für OpenDevice
  467.  
  468.     UBYTE DeviceType;        // codes as defined in the SCSI-2 spec
  469.  
  470.     short SCSILevel;        // SCSI Level (1/2)
  471.  
  472.     struct TapeFlags Properties;
  473.  
  474.     UBYTE InquiryData[60];        // INQUIRY-Daten (für Tape)
  475.  
  476.     char isPreliminary;        // Werte sind nur vorläufig bis Disk im Laufwerk
  477.     char useGetGeometry;        // TD_GETGEOMETRY darf benutzt werden
  478.     char useCompression;        // eingebaute Hardwarekompression wird benutzt
  479.     char isDDSDC;            // dies ist ein DDS-DC Laufwerk
  480.  
  481.     char isTape;            // Flag: dies ist ein Bandlaufwerk
  482.     };
  483.  
  484. struct DiskFlags
  485.     {
  486.     struct IOExtTD *diskreq;
  487.     struct DiskChangeInfo *DcI;
  488.     struct BackupDevInfo DrvDat;
  489.     char DOSName[FNSIZE];        // Device-Name, z.B: "DF0"
  490.     char DeviceName[FNSIZE];    // name des Devices, z.B. "trackdisk.device"
  491.     ULONG Unit;            // Unitnr. des Device
  492.     char valid;            // Flag: Laufwerk ist vorhanden
  493.     char inhibited;            // Flag : LW mit Inhibit blockiert
  494.     struct TapeIO *TapeReq;        // Zusatzinfo für Tape Devices
  495.     struct DosEnvec *Env;        // zugehöriger DosList-Eintrag
  496.     struct SignalSemaphore DskSema;
  497.     };
  498.  
  499.  
  500. struct NamePattern
  501.     {
  502.     char RawName[FNSIZE];
  503.     char ParsedPattern[2*FNSIZE];
  504.     char isParsed;
  505.     };
  506.  
  507.  
  508. struct GenericGadgetImages
  509.     {
  510.     struct Image *gi_Render;
  511.     struct Image *gi_Selected;
  512.     };
  513.  
  514.  
  515. struct DiskChangeInfo
  516.     {
  517.     struct SignalSemaphore Sema;
  518.  
  519.     short NextDiskNr;
  520.  
  521.     short UnitNr;                // Index in Disks[]
  522.  
  523.     char *DOSName;                // DOS-Name des Laufwerkes
  524.     char *TDName;                // Name des Devices
  525.     ULONG TDUnit;                // Unit-Nr.
  526.     ULONG TDFlags;                // Flags für OpenDevice
  527.     struct timerequest *TimerIOReq;        // IORequest für timer.device
  528.     struct IOExtTD *DiskIOReq;        // IORequest für algemeine Zwecke
  529.     struct IOExtTD ChangeIOReq;        // IORequest für AddChangeInt
  530.     struct TapeIO  *TapeReq;
  531.  
  532.     struct MsgPort *DCTxPort;        // Port für Nachrichten DiskChanger -> main
  533.     struct MsgPort *DCRxPort;        // Port für Nachrichten main -> DiskChanger
  534.  
  535.     unsigned long DCTxPortMask;        // Signal-Maske für DCTxPort
  536.  
  537.     short TimerInUse;            // Flag: TimerIOReq wird benutzt
  538.     short isTape;                // Flag: Backup auf Tape
  539.     short withQFA;                // Flag: Tape benutzt QFA
  540.  
  541.     ULONG ChangeCount;            // DiskChangeCount
  542.     struct DiskLabel Label;            // Disklabel des aktuellen Disk
  543.  
  544.     struct Interrupt DiskChangeInt;
  545.  
  546.     enum DskStat DiskStatus;        // Flag, ob Disk eingelegt
  547.  
  548.     char *DiskReady;            // Zeiger auf Ready-Flag
  549.     enum DCResult Result;            // Ergebnis-Variable
  550.  
  551.     struct DosEnvec *Env;            // DosList-Eintrag für Drive
  552.     struct BackupDevInfo *DrvDat;        // Zeiger auf Disks[].DrvDat
  553.  
  554.     struct Task *DiskChangerTask;        // Task des DiskChanger-Prozesses
  555.     ULONG DiskChangeMask;            // Signal bei Diskwechsel
  556.     ULONG TimerMask;            // Signal vom timer.device
  557.  
  558.     short Pos;                // Kennung f. Laufwerksanzeige (1 oder 2)
  559.     char StartZeit[8];            // Startzeit des Backups
  560.  
  561.     unsigned long DiskBlockSize;        // Sektorlänge
  562.     unsigned long DiskBufMemType;
  563.  
  564.     char ProcessName[80];
  565.     };
  566.  
  567.  
  568. struct BackupOptions
  569.     {
  570.     long bo_Dummy;                // damit offsetof(bo_IncludeFile) nicht 0 ist!
  571.  
  572.     struct NamePattern bo_IncludeFile;
  573.     struct NamePattern bo_ExcludeFile;
  574.  
  575.     struct IBox bo_MainWindowPos;
  576.  
  577.     char bo_ProtFileName[FMSIZE];        // Name für das Protokoll-File
  578.     char bo_DrivesWithoutGeometry[FMSIZE];
  579.     char bo_CmdFileIcon[FMSIZE];
  580.     char bo_NeverCompress[FMSIZE];
  581.     char bo_DiskSavePrefix[FMSIZE];        // Pfad für die DiskSave-Files
  582.     char bo_HelpPath[FMSIZE];        // Pfad für die Online-Hilfedateien
  583.     char bo_ScriptPath[FMSIZE];        // Pfad, in dem die Skripte zuerst gesucht werden
  584.     char bo_TapeDriveDataFileName[FMSIZE];    // Filename der Bandlaufwerks-Datenbank
  585.  
  586.     char bo_AppIconName[FMSIZE];        // Filename für AppIcon (#?.info)
  587.  
  588.     char bo_ListFontName[FMSIZE];        // Font für die Auswahl-Listen
  589.  
  590.     char bo_PubScreen[FMSIZE];        // Name eines PubScreens oder ""
  591.  
  592.     char bo_Language[FMSIZE];        // eine Sprache oder "" für die Standard-Sprache
  593.  
  594.     char bo_CurrentDir[FMSIZE];        // Dieses Directory wird beim Start angezeigt
  595.  
  596.     long bo_AppIconPosX;            // X-Position für AppIcon
  597.     long bo_AppIconPosY;            // Y-Position für AppIcon
  598.  
  599.     long bo_QFAPartitionSize;        // Partitionsgröße für QFA-Partition in MBytes
  600.  
  601.     long bo_FirstDate;
  602.     long bo_LastDate;
  603.  
  604.     char bo_IncludeSubDirs;            // Flag: Subdirectories mitsichern
  605.     enum ArchiveStatus bo_UseArc;
  606.     char bo_UseFirstDate;
  607.     char bo_UseLastDate;
  608.     char bo_UseGrepPattern;
  609.     char bo_SaveSoftLinks;
  610.     char bo_SaveHardLinks;
  611.     char bo_Append;                // Flag: Anhängen an altes Backup
  612.     char bo_UseHardwareCompression;        // Flag: Hardware-Kompression des Laufwerks nutzen
  613.     char bo_Iconify;            // Flag: nach Start ikonifizieren?
  614.     char bo_WarnDosDisk;            // Flag: vor Überschreiben einer DOS-Disk warnen
  615.  
  616.     enum ArchiveStatus bo_SetArc;
  617.     enum DirSort bo_WhereSortDirs;        // Plazierung für sortierte Directories
  618.     enum ProtType bo_ProtFile;        // Protokollfile erzeugen?
  619.  
  620.     char bo_KeepProtFile;            // Flag: Protokollfile nach Ende aufheben
  621.     char bo_Verify;                // Flag: mit Verify
  622.     char bo_Preview;            // Flag: mit Preview
  623.     char bo_Compress;            // Files komprimieren
  624.                         // COMPRESS_NONE     keine Kompression 
  625.                         // COMPRESS_INTERNAL    interne Kompression
  626.                         // COMPRESS_XPK        XPK-Kompression
  627.  
  628.     short bo_WarnLevel;            // Meldungen >= diesem Level werden angezeigt
  629.  
  630.     enum SortType bo_HowToSort;
  631.     int (*bo_FSCompare)(struct FSDirEntry **, struct FSDirEntry **);    // Sortierroutine nach Name/Datum/Größe
  632.  
  633.     struct FSDir **bo_FSDirList;
  634.     unsigned long bo_FSDirCount;
  635.  
  636.     short bo_FirstUnit;            // Index des ersten Laufwerk in disks[]
  637.     short bo_SecondUnit;            // Index des zweiten Laufwerk in disks[]
  638.  
  639.     char XPKPackerName[XPK_PACKNAMELEN];    // Packer-Type mit XPK Library, Format "ABCD.100"
  640.     char XPKEncrypt;            // Flag: Encryption yes/no
  641.     char XPKPassword[XPK_PASSWORDLEN];    // Passwort für XPK-Encryption
  642.     };
  643.  
  644.  
  645. struct PushedInfoLine
  646.     {
  647.     struct MinNode pil_Node;
  648.     char pil_Text[1];    // ab hier steht der Text (variable Länge!)
  649.     };
  650.  
  651. typedef struct PushedInfoLine *InfoLineHandle;
  652.  
  653.  
  654. struct BInputHandler
  655.     {
  656.     struct Node bih_Node;
  657.     ULONG bih_WaitMask;
  658.     int (*bih_Handler)(void);
  659.     };
  660.  
  661.  
  662. // toupper() und tolower() werden durch eigene Funktionen ersetzt, die ggf.
  663. // die utility.library benutzen (wegen locale!)
  664. #undef    toupper
  665. #undef    tolower
  666. #undef    stricmp
  667. #undef    strnicmp
  668.  
  669. #define    toupper(c)        mytoupper(c)
  670. #define    tolower(c)        mytolower(c)
  671. #define    stricmp(s1, s2)        mystricmp(s1, s2)
  672. #define    strnicmp(s1, s2, n)    mystrnicmp(s1, s2, n)
  673.  
  674.  
  675. // Pointer Check, für Debug-Zwecke
  676. #ifndef NDEBUG
  677. #define    ASSERT_VALID0(x) assert((x) == NULL || TypeOfMem((void *) (x)) != 0)
  678. #define    ASSERT_VALID(x)     assert((x) != NULL && TypeOfMem((void *) (x)) != 0)
  679. #else
  680. #define    ASSERT_VALID(x)        ;
  681. #define    ASSERT_VALID0(x)    ;
  682. #endif
  683.  
  684.  
  685. // Zugriff auf StringGadgets
  686. #define GADSTRING(gad)    (((struct StringInfo *) (gad)->SpecialInfo)->Buffer)
  687.  
  688. // Zugriff auf Integer-Gadgets
  689. #define GADINT(gad)    (((struct StringInfo *) (gad)->SpecialInfo)->LongInt)
  690.  
  691.  
  692. // statische Initialisierung von Listen
  693. #define    MINLIST(list)    struct MinList list = { (struct MinNode *) &(list).mlh_Tail, NULL, (struct MinNode *) &(list) }
  694. #define    LIST(list)    struct List list = { (struct Node *) &(list).mlh_Tail, NULL, (struct Node *) &(list) }
  695.  
  696. #define BACKUP_H_INCLUDED
  697. #endif
  698.