/**************************************************************************/
/*                                                                        */
/*  Multitool II   -   DOS-Hilfsprogramm                Version 1.4r001   */
/*                                                                        */
/*  ©1992 Boris Jakubaschk                                                */
/*                                                                        */
/*  Modul 2 - Verzeichnisoperationen (Kopieren, Umtaufen,...)             */
/*                                                                        */
/**************************************************************************/

#include "MToolDefs.h"

#define GD_Length                              0
#define GD_DateStamp                           1
#define GD_Contents                            2
#define GD_Update                              3
#define GD_VerCheck                            4
#define GD_ChangeName                          5
#define GD_Start                               6
#define GD_Copy                                7
#define GD_Continue                            8
#define GD_Cancel                              9
#define GD_Name                                10

#define GDX_Length                             0
#define GDX_DateStamp                          1
#define GDX_Contents                           2
#define GDX_Update                             3
#define GDX_VerCheck                           4
#define GDX_ChangeName                         5
#define GDX_Start                              6
#define GDX_Copy                               7
#define GDX_Continue                           8
#define GDX_Cancel                             9
#define GDX_Name                               10

struct Window        *CopyWnd = NULL;
struct Gadget        *CopyGList = NULL;
struct Gadget        *CopyGadgets[11];
UWORD                 CopyLeft;
UWORD                 CopyTop;
UWORD                 CopyWidth;
UWORD                 CopyHeight;
UWORD                 CopyXSpc;
UWORD                 CopyYSpc;
char                  CopyTurbo;
char Length;
char DStamp;
char Contnt;
char VCheck;
char ChName;
char TempFile[] = "T:MT.temp";
USHORT Update;

UBYTE *Update0Labels[4];

/* ParentName   : Elternverzeichnis suchen. Übergabestring Dir wird von hinten
                  nach "/" und ":" durchsucht und bei Erfolg entsprechend ge-
                  kürzt.
    Dir           String. Achtung: wird verändert! */

ParentName( char *Dir )
    {
    int pos;
    
    pos = strlen( Dir )-1;
    while ( pos>0 & Dir[pos]!='/' & Dir[pos]!=':' ) pos--;
    if ( Dir[pos]=='/' ) Dir[pos]='\0';
    if ( Dir[pos]==':' ) Dir[pos+1]='\0';
    }


/* DirAction    : Kopiert, schiebt oder löscht die selektierten Dateien
                  und Verzeichnisse
    Act           0=linkes, 1=rechtes Dateienfenster
    What          0=kopieren, 1=schieben, 2=löschen */
/*  Status        0=nichts getan, 1=etwas getan, 2=Fehler */

DirAction( char Act, char What, ULONG Info )
    {
    ULONG a;
    int i;
    struct ExAllData *EAD;
    struct FileHandle *FH, *FH2;
    char Status = 0;
    char Command[256];
    char Buffer[130];
    LONG SysResponse;

    if ( TestSelect( Act ) )
        {
        if ( (VL_Archiv==~0)||((VL_Archiv==1-Act)&&(What==2)) )
            {
            if (What!=3) Status = OpenCopyWindow(What);
            }
        else WaitPointer( Wnd );
        if ( VL_Valid[Act] && ( VL_Valid[1-Act] | What>=2 ) && ( Status==0 ) )
            {
            if (VL_Archiv==Act)
                {
                if (PutMT_Temp( Act ))
                    {
                    switch (What)
                        {
                        case 0:
                        case 1: if (FH=(struct FileHandle *)OpenConsole())
                                    {
                                    strcpy( Buffer, VL_Name[1-Act] );
                                    AddPart( Buffer, "", 130 );
                                    sprintf( Command, Ana_Command[7], VL_Name[Act], Buffer );
                                    SysResponse = SystemTags( Command, SYS_Input, FH, SYS_Output, NULL, TAG_DONE);
                                    if (SysResponse!=0)
                                        ErrorMsg( LS[MSG_6_T_LHAFail] );
                                    CloseConsole(FH);
                                    if (What==1)
                                        {
                                        DirAction( Act, 2, 0 );
                                        What = 0;
                                        }
                                    else
                                        {
                                        ClrSelect( Act );
                                        ShowDir( Act, VL_OldFI[Act], 1 );
                                        };
                                    Status=1;
                                    };
                                break;
                        case 2: if (FH=(struct FileHandle *)OpenConsole())
                                    {
                                    sprintf( Command, Ana_Command[9], VL_Name[Act] ); 
                                    SysResponse = SystemTags( Command, SYS_Input, FH, SYS_Output, NULL, TAG_DONE);
                                    if (SysResponse!=0)
                                        ErrorMsg( LS[MSG_6_T_LHAFail] );
                                    CloseConsole(FH);
                                    Status=0;
                                    FileAktion( VL_Name[Act], 10 );
                                    GetArcList( Act, VL_Name[Act] );
                                    };
                                break;
                        case 3: VL_BytSel = 0;
                                VL_BlkSel = 0;
                                EAD = VL_Data[Act];
                                for (i=0; i<VL_NumEntry[Act]; i++)
                                    {
                                    if ( VL_Select[Act][i] )
                                        {
                                        VL_BytSel += EAD->ed_Size;
                                        VL_BlkSel += ((EAD->ed_Size-1)/Info)+2;
                                        };
                                    EAD = EAD->ed_Next;
                                    };
                                break;
                        };
                    RemMT_Temp();
                    };
                }
            else if (VL_Archiv==1-Act && What<2 )
                {
                if (PutMT_Temp( Act ))
                    {
                    if (FH=(struct FileHandle *)OpenConsole())
                        {
                        sprintf( Command, Ana_Command[8], VL_Name[1-Act] ); 
                        SysResponse = SystemTags( Command, SYS_Output, FH, TAG_DONE);
                        if (SysResponse!=0)
                            ErrorMsg( LS[MSG_6_T_LHAFail] );
                        CloseConsole(FH);
                        Status=0;
                        FileAktion( VL_Name[1-Act], 10 );
                        GetArcList( 1-Act, VL_Name[1-Act] );
                        if (What==1)
                            {
                            DirAction( Act, 2, 0 );
                            }
                        else
                            {
                            ClrSelect( Act );
                            ShowDir( Act, VL_OldFI[Act], 1 );
                            };
                        };
                    RemMT_Temp();
                    };
                }
            else
                {
                EAD = VL_Data[Act];

                if ( What==1 && IdentRoot() )
                    {
                    for (i=0; i<VL_NumEntry[Act] && Status<2; i++)
                        {
                        if ( VL_Select[Act][i] )
                            {
                            strcpy( Command, VL_Name[Act] );
                            AddPart( Command, EAD->ed_Name, 130 );
                            strcpy( Buffer, VL_Name[1-Act] );
                            AddPart( Buffer, EAD->ed_Name, 130 );
                            if (Rename(Command, Buffer))
                                {
                                VL_Select[Act][i]=0;
                                Status = 1;
                                if ( i>=VL_OldFI[Act] & i<VL_OldFI[Act]+LY_LNumLines )
                                    {
                                    ShowDirLine( Act, VL_OldFI[Act], i-VL_OldFI[Act] );
                                    };
                                }
                            else
                                {
                                Status = 2;
                                ErrorReq();
                                };
                            };
                        EAD = EAD->ed_Next;
                        };
                    }
                else
                    {
                    VL_BytSel = 0;
                    VL_BlkSel = 0;
                    for (i=0; i<VL_NumEntry[Act] && Status<2; i++)
                        {
                        if ( VL_Select[Act][i] && EAD->ed_Type<0 )
                            {
                            switch (What)
                                {
                                case 0 : Copy( VL_Name[Act], VL_Name[1-Act], EAD->ed_Name, &Status );
                                         break;
                                case 1 : MoveFile( VL_Name[Act], VL_Name[1-Act], EAD->ed_Name, &Status );
                                         break;
                                case 2 : Delete( VL_Name[Act], EAD->ed_Name, &Status );
                                         break;
                                case 3 : VL_BytSel += EAD->ed_Size;
                                         VL_BlkSel += ((EAD->ed_Size-1)/Info)+2;
                                         break;
                                };
                            }
                        else if ( VL_Select[Act][i] )
                            {
                            a = VL_BlkSel;
                            RekurOp( VL_Name[Act], VL_Name[1-Act], EAD->ed_Name, What, &Status );
                            if ((What==1 | What==2) & Status!=2)
                                Delete( VL_Name[Act], EAD->ed_Name, &Status );
                            if (What==3)
                                {
                                VL_BlkSel++;
                                EAD->ed_Size = (VL_BlkSel - a)*Info;
                                if ( i>=VL_0, 0x1E0, 0x7FE0, 0x0, 0x3F8, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xF0, 0x3C0, 0x7FE0, 0x0, 0x7B8, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xF0, 0x3C0, 0x7FE0, 0x0, 0x738, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x70, 0x380, 0x1E0, 0x0, 0xF38, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x78, 0x780, 0x1E0, 0x0, 0x1E38, 0x0, 0x800,
0x3000, 0x1F, 0x8000, 0x4000, 0x1008, 0x20, 0x0, 0x204, 0x0, 
0x0, 0x78, 0x780, 0x1E0, 0x0, 0x3C38, 0x0, 0x800,
0x3000, 0x10, 0x4000, 0x0, 0x1008, 0x20, 0x0, 0x204, 0x0, 
0x0, 0x38, 0x700, 0x1E0, 0x0, 0x3838, 0x0, 0x800,
0x3000, 0x10, 0x4F1E, 0x4F80, 0x13C8, 0x50BE, 0x3C7C, 0xF3E4, 0x2000, 
0x0, 0x3C, 0xF00, 0x1E0, 0x0, 0x7838, 0x0, 0x800,
0x3000, 0x1F, 0x90A1, 0x5000, 0x1028, 0x90A1, 0x281, 0xA14, 0x4000, 
0x0, 0x3C, 0xF00, 0x1E0, 0x0, 0xF038, 0x0, 0x800,
0x3000, 0x10, 0x50A0, 0x4F02, 0x13EF, 0x10A1, 0x3E79, 0x217, 0x8000, 
0x0, 0x1C, 0xE00, 0x1E0, 0x0, 0xE038, 0x0, 0x800,
0x3000, 0x10, 0x50A0, 0x4082, 0x1428, 0x90A1, 0x4205, 0xA14, 0x4000, 
0x0, 0x1E, 0x1E00, 0x1E0, 0x1, 0xC038, 0x0, 0x800,
0x3000, 0x1F, 0x8F20, 0x5F01, 0xE3E8, 0x4FBE, 0x3EF8, 0xF214, 0x2000, 
0x0, 0x1E, 0x1E00, 0x1E0, 0x3, 0xC038, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xE, 0x1C00, 0x1E0, 0x3, 0xFFFF, 0x8000, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xF, 0x3C00, 0x1E0, 0x3, 0xFFFF, 0x8000, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x7, 0x3800, 0x1E0, 0x3, 0xFFFF, 0x8000, 0x800,
0x3000, 0x10, 0x4000, 0x1, 0xE200, 0xF0, 0x2, 0xC02, 0x2000, 
0x0, 0x7, 0xF800, 0x1E0, 0x0, 0x38, 0x0, 0x800,
0x3000, 0x18, 0x4000, 0x2, 0x1200, 0x108, 0x6, 0x1404, 0x6000, 
0x0, 0x7, 0xF800, 0x1E0, 0x0, 0x38, 0x0, 0x800,
0x3000, 0x14, 0x4F21, 0x3C02, 0x79E, 0x7909, 0xE00A, 0x2408, 0xA000, 
0x0, 0x3, 0xF000, 0x1E0, 0x3C0, 0x38, 0x0, 0x800,
0x3000, 0x12, 0x50A1, 0x4201, 0xE221, 0x532, 0x1012, 0x4411, 0x2000, 
0x0, 0x3, 0xF000, 0x1E0, 0x3C0, 0x38, 0x0, 0x800,
0x3000, 0x11, 0x5FA1, 0x7E00, 0x1220, 0x7D0B, 0xF002, 0xFE20, 0x2000, 
0x0, 0x3, 0xF000, 0x1E0, 0x3C0, 0x38, 0x0, 0x800,
0x3000, 0x10, 0xD021, 0x4002, 0x1220, 0x850A, 0x2, 0x440, 0x2000, 
0x0, 0x1, 0xE000, 0x1E0, 0x3C0, 0x38, 0x0, 0x800,
0x3000, 0x10, 0x4F1E, 0x3C01, 0xE1A0, 0x7D31, 0xE002, 0x480, 0x2000, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x7F, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0xF, 0xCF00, 0x4F0E, 0x3, 0xC400, 0x4200, 0x0, 0x8000, 
0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x8, 0x5080, 0xD090, 0x4, 0x2400, 0x4200, 0x0, 0x8000, 
0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x5081, 0x50A0, 0x4, 0xF42, 0xF79F, 0x3C79, 0xE000, 
0x0, 0x80, 0xFC7E, 0x3F20, 0x9FC, 0xFC7E, 0x0, 0x800,
0x3000, 0x0, 0x9082, 0x4F3E, 0x3, 0xC442, 0x4221, 0x284, 0x8000, 
0x0, 0xFD, 0x281, 0x40A0, 0xA05, 0x281, 0x0, 0x800,
0x3000, 0x1, 0x1080, 0x50A1, 0x0, 0x2442, 0x4221, 0x3E80, 0x8000, 
0x0, 0x81, 0xFF, 0x7FA1, 0xA05, 0xFF, 0x0, 0x800,
0x3000, 0x2, 0x1080, 0x50A1, 0x4, 0x2442, 0x421F, 0x4280, 0x8000, 
0x0, 0x81, 0x80, 0x4021, 0xA05, 0x80, 0x0, 0x800,
0x3000, 0x2, 0xF00, 0x4F1E, 0x3, 0xC33E, 0x3181, 0x3E80, 0x6000, 
0x0, 0x81, 0x7E, 0x3F1E, 0xF1FD, 0x7E, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1E, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x2000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800,
0x7FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF800,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF800,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000,
0xC555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 
0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x7000,
0xCAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 
0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xB000,
0xC555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 
0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x7000,
0xCAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 
0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xB000,
0xC555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 
0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x7000,
0xCAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 
0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xB000,
0xC555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5511, 
0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x7000,
0xCAAA, 0xAAAA, 0xAAAA, 0x2AAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAB3, 
0x2AAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xB000,
0xC555, 0x5555, 0x5554, 0xD555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5522, 
0x1555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5455, 0x5555, 0x7000,
0xCAAA, 0xAAAA, 0xAAAA, 0x82AA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAA2, 
0xAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAACA, 0xAAAA, 0xB000,
0xC555, 0x7E55, 0x5554, 0x8555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5522, 
0x1555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5485, 0x5555, 0x7000,
0xCAAA, 0xA0BA, 0xAAAA, 0x82AA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAA2, 
0xAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xA882, 0xAAAA, 0xB000,
0xC555, 0x6055, 0x5554, 0x8555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5522, 
0x1555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5585, 0x5555, 0x7000,
0xCAAA, 0xA0B2, 0xAAAA, 0x8002, 0xA800, 0x2A00, 0x2A80, 0xA8, 0xA2, 
0x0, 0xAA00, 0x2A80, 0x2AA, 0x882, 0x2108, 0xAAAA, 0xB000,
0xC555, 0x6061, 0x5554, 0x9FFD, 0x43FF, 0xD0FF, 0xE51F, 0xFD83, 0xFFA2, 
0x7FF, 0x50FF, 0xE51F, 0xFD54, 0x799C, 0xE731, 0x5555, 0x7000,
0xCAAA, 0xA0C0, 0xAAAA, 0x9001, 0xE00, 0x380, 0xA70, 0x10E, 0x22, 
0x1C00, 0x4380, 0xA70, 0x129, 0xC111, 0x8403, 0x2AAA, 0xB000,
0xC555, 0x60C1, 0x5554, 0x8000, 0x1800, 0x600, 0xC0, 0x18, 0x2, 
0x3000, 0x600, 0xC0, 0x13, 0x100, 0x2, 0x1555, 0x7000,
0xCAAA, 0xA001, 0xAAAA, 0x8000, 0x1000, 0x400, 0x80, 0x10, 0x2, 
0x2000, 0x400, 0x80, 0x206, 0x808, 0x202, 0xAAA, 0xB000,
0xC555, 0x6001, 0x1554, 0x8555, 0x1055, 0x4400, 0x885, 0x5510, 0x5522, 
0x2000, 0x4400, 0x1080, 0x44C, 0x1210, 0xC204, 0x155, 0x7000,
0xCAAA, 0xA000, 0x8AAA, 0x82A9, 0x10AA, 0xA4FF, 0xF882, 0xA910, 0xAAA2, 
0x27FF, 0xC07F, 0xEA8F, 0xFC88, 0x2610, 0x8608, 0x42AA, 0xB000,
0xC555, 0x6000, 0x8554, 0x8555, 0x1055, 0x5400, 0x85, 0x5510, 0x5522, 
0x2000, 0x0, 0x940, 0x158, 0x5421, 0x8408, 0x155, 0x7000,
0xCAAA, 0xA07C, 0x42AA, 0x82A9, 0x10AA, 0xA400, 0x82, 0xA910, 0xAAA2, 
0x2000, 0x280, 0x80, 0x10, 0xA421, 0xC10, 0xA0AA, 0xB000,
0xC555, 0x60C2, 0x2554, 0x8551, 0x1055, 0x5400, 0x85, 0x5110, 0x5522, 
0x2000, 0x100, 0x10, 0x10, 0x4C43, 0x821, 0x2155, 0x7000,
0xCAAA, 0xA180, 0x22AA, 0x8003, 0x10AA, 0xA400, 0x1A80, 0x310, 0x62, 
0x2000, 0xCB00, 0x1860, 0x310, 0x18C2, 0x182C, 0x60AA, 0xB000,
0xC555, 0x6100, 0x1154, 0x8FFE, 0x1055, 0x547F, 0xF00F, 0xFE01, 0xFFC2, 
0x3FF, 0x827F, 0xF04F, 0xFE01, 0xF082, 0x70C1, 0xC155, 0x7000,
0xCAAA, 0xA100, 0xAAA, 0x8000, 0x10AA, 0xAA00, 0x80, 0x8, 0x2, 
0x0, 0x200, 0x0, 0x8, 0xA, 0x0, 0x2AA, 0xB000,
0xC555, 0x6100, 0x954, 0x0, 0x5055, 0x5400, 0x150, 0x0, 0x0, 
0x1400, 0x1400, 0x150, 0x50, 0x15, 0x414, 0x555, 0x7000,
0xCAAA, 0xE100, 0x1AAA, 0x8000, 0xA2AA, 0xAA80, 0xAA0, 0x2A, 0x22, 
0x2800, 0x2A80, 0xAA0, 0xAA, 0xA2A, 0xA2A, 0xAAA, 0xB000,
0xC555, 0x4080, 0x1155, 0x5555, 0x5401, 0x5540, 0x5555, 0x5555, 0x5500, 
0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x7000,
0xCAAA, 0xC000, 0x10AA, 0xAAAA, 0xA800, 0xAA80, 0x2AAA, 0xAAAA, 0xAA00, 
0x2AAA, 0xAA82, 0xAAAA, 0xAAAA, 0xAAA2, 0xAAAA, 0xAAAA, 0xB000,
0xC555, 0x8400, 0x3055, 0x5555, 0x5000, 0x100, 0x5554, 0x404, 0x500, 
0x1055, 0x5044, 0x405, 0x141, 0x4041, 0x5555, 0x5555, 0x7000,
0xCAAB, 0x8000, 0x202A, 0xAAAA, 0xA802, 0x0, 0x80, 0x0, 0x20A, 
0x2, 0x0, 0x0, 0x0, 0x0, 0xAAAA, 0xAAAA, 0xB000,
0xC554, 0x3FF, 0xC055, 0x5555, 0x5400, 0x4, 0x4440, 0x0, 0x115, 
0x4, 0x0, 0x0, 0x4400, 0x1, 0x5555, 0x5555, 0x7000,
0xCAAA, 0xA800, 0xAAA, 0xAAAA, 0xA800, 0x2808, 0x0, 0xA0A8, 0x20A, 
0x0, 0x0, 0xA0A0, 0x0, 0xA02, 0xAAAA, 0xAAAA, 0xB000,
0xC555, 0x5000, 0x5555, 0x5555, 0x5000, 0x4, 0x4000, 0x50, 0x500, 
0x10, 0x4000, 0x0, 0x4401, 0x1501, 0x5555, 0x5555, 0x7000,
0xCAAA, 0xAA80, 0xAAAA, 0xAAAA, 0xA800, 0x8A, 0x0, 0xA8, 0x200, 
0x28, 0xA000, 0x0, 0x2800, 0xA00, 0xAAAA, 0xAAAA, 0xB000,
0xC555, 0x5555, 0x5555, 0x5555, 0x5405, 0x155, 0x1114, 0x554, 0x500, 
0x5051, 0x5054, 0x5, 0x5541, 0x1551, 0x5555, 0x5555, 0x7000,
0xCAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 
0xAAAA, 0xAAAA, 0xA8AA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xB000,
0xC555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 
0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x7000,
0xCAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 
0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, 0xB000,
0xDFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0xFC, 0x0, 0x7E0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC007, 0xE000, 0x7E07, 0x8003, 0xC0F0, 0x7FF, 0xFFE3, 0xC3FF, 0xFFF0, 
0x7FF, 0x8000, 0x3FFC, 0x78, 0x0, 0x1FFF, 0xFE00, 0x3000,
0xC007, 0xE000, 0x7E07, 0x8003, 0xC0F0, 0x7FF, 0xFFE3, 0xC3FF, 0xFFF0, 
0x1FFF, 0xE000, 0xFFFF, 0x78, 0x0, 0x1FFF, 0xFE00, 0x3000,
0xC007, 0xF000, 0xFE07, 0x8003, 0xC0F0, 0x7FF, 0xFFE3, 0xC3FF, 0xFFF0, 
0x3F03, 0xF001, 0xF81F, 0x8078, 0x0, 0x1FFF, 0xFE00, 0x3000,
0xC007, 0xF000, 0xFE07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE000, 
0x7C00, 0xF803, 0xE007, 0xC078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0xF000, 0xFE07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE000, 
0xF800, 0x7C07, 0xC003, 0xE078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0xB801, 0xFE07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE000, 
0xF000, 0x3C07, 0x8001, 0xE078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0xB801, 0xDE07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE001, 
0xF000, 0x3E0F, 0x8001, 0xF078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0xB801, 0xDE07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE001, 
0xE000, 0x1E0F, 0x0, 0xF078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0xBC03, 0xDE07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE001, 
0xE000, 0x1E0F, 0x0, 0xF078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x9C03, 0x9E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE001, 
0xC000, 0xF0E, 0x0, 0x7878, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x9C03, 0x9E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE003, 
0xC000, 0xF1E, 0x0, 0x7878, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x9C03, 0x9E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE003, 
0xC000, 0xF1E, 0x0, 0x7878, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x8E07, 0x1E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE003, 
0xC000, 0xF1E, 0x0, 0x7878, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x8E07, 0x1E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE003, 
0xC000, 0xF1E, 0x0, 0x7878, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x8E07, 0x1E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE003, 
0xC000, 0xF1E, 0x0, 0x7878, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x870F, 0x1E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE003, 
0xC000, 0xF1E, 0x0, 0x7878, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x870E, 0x1E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE003, 
0xC000, 0xF1E, 0x0, 0x7878, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x870E, 0x1E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE001, 
0xE000, 0x1E0F, 0x0, 0xF078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x879E, 0x1E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE001, 
0xE000, 0x1E0F, 0x0, 0xF078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x839C, 0x1E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE001, 
0xE000, 0x1E0F, 0x0, 0xF078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x839C, 0x1E07, 0x8003, 0xC0F0, 0x3, 0xC003, 0xC001, 0xE000, 
0xF000, 0x3C07, 0x8001, 0xE078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x839C, 0x1E03, 0xC007, 0x80F0, 0x3, 0xC003, 0xC001, 0xE000, 
0xF000, 0x3C07, 0x8001, 0xE078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x81F8, 0x1E03, 0xC007, 0x80F0, 0x3, 0xC003, 0xC001, 0xE000, 
0x7800, 0x7803, 0xC003, 0xC078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x81F8, 0x1E03, 0xE00F, 0x80F0, 0x3, 0xC003, 0xC001, 0xE000, 
0x7C00, 0xF803, 0xE007, 0xC078, 0x0, 0x1E1, 0xE000, 0x3000,
0xC007, 0x81F8, 0x1E01, 0xF83F, 0xFF, 0xFF83, 0xC003, 0xC001, 0xE000, 
0x3F03, 0xF001, 0xF81F, 0x807F, 0xFFC0, 0x1FFF, 0xFE00, 0x3000,
0xC007, 0x80F0, 0x1E00, 0xFFFE, 0xFF, 0xFF83, 0xC003, 0xC001, 0xE000, 
0x1FFF, 0xE000, 0xFFFF, 0x7F, 0xFFC0, 0x1FFF, 0xFE00, 0x3000,
0xC007, 0x80F0, 0x1E00, 0x3FF8, 0xFF, 0xFF83, 0xC003, 0xC001, 0xE000, 
0x7FF, 0x8000, 0x3FFC, 0x7F, 0xFFC0, 0x1FFF, 0xFE00, 0x3000,
0xC000, 0x0, 0x0, 0x7C0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0xFE, 0x0, 0x7F0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xF00, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x780, 0x1E0, 0x1C0, 0x0, 0x70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x780, 0x1E0, 0x1C0, 0x0, 0xF0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x780, 0x1E0, 0x3C0, 0x0, 0x1F0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x3C0, 0x3C0, 0x7C0, 0x0, 0x3F0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x3C0, 0x3C0, 0x1FC0, 0x0, 0x3F0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x3C0, 0x3C0, 0xFFC0, 0x0, 0x7F0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x1E0, 0x780, 0xFFC0, 0x0, 0xF70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x1E0, 0x780, 0xFFC0, 0x0, 0xE70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xE0, 0x700, 0x3C0, 0x0, 0x1E70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xF0, 0xF00, 0x3C0, 0x0, 0x3C70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xF0, 0xF00, 0x3C0, 0x0, 0x7870, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x70, 0xE00, 0x3C0, 0x0, 0x7070, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x78, 0x1E00, 0x3C0, 0x0, 0xF070, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x78, 0x1E00, 0x3C0, 0x1, 0xE070, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x38, 0x1C00, 0x3C0, 0x1, 0xC070, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x3C, 0x3C00, 0x3C0, 0x3, 0x8070, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x3C, 0x3C00, 0x3C0, 0x7, 0x8070, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x1C, 0x3800, 0x3C0, 0x7, 0xFFFF, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x1E, 0x7800, 0x3C0, 0x7, 0xFFFF, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xE, 0x7000, 0x3C0, 0x7, 0xFFFF, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xF, 0xF000, 0x3C0, 0x0, 0x70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0xF, 0xF000, 0x3C0, 0x0, 0x70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x7, 0xE000, 0x3C0, 0x780, 0x70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x7, 0xE000, 0x3C0, 0x780, 0x70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x7, 0xE000, 0x3C0, 0x780, 0x70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x3, 0xC000, 0x3C0, 0x780, 0x70, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xC000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000,
0xDFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF000,
0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
};
Clo     vHndow();

                              GadgetFont.ta_YSize = ASLFR->fo_Attr.ta_YSize;
                              GadgetFont.ta_Style = ASLFR->fo_Attr.ta_Style;
                              GadgetFont.ta_Flags = ASLFR->fo_Attr.ta_Flags;
                              LY_GFontH = ASLFR->fo_Attr.ta_YSize;
                              strcpy( &GadgetFontName[0], ASLFR->fo_Attr.ta_Name );

                              if (InitStuff())
                                {
                                FreeAslRequest( ASLFR );
                                CleanStuff();
                                exit(20);
                                };
                              };
                            FreeAslRequest( ASLFR );
                            };
                        break;
                case 6: CloseMainWindow();
                        CustomScreen = 1-CustomScreen;
                        NewMenu[10].nm_Flags = CHECKIT|MENUTOGGLE|((CustomScreen) ? CHECKED : 0);
                        if (InitStuff())
                          {
                          CleanStuff();
                          exit(20);
                          };
                        break;
                case 7: if (ASLSR = (struct ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,
                            ASLSM_Screen, Scr, ASLSM_TitleText, LS[MSG_0_T_ScreenMode],
                            ASLSM_MinWidth, 640,
                            TAG_DONE))
                            {
                            if (AslRequest( ASLSR, NULL ))
                              {
                              CloseMainWindow();

                              ScreenTags[2].ti_Tag  = SA_Width;
                              ScreenTags[3].ti_Tag  = SA_Height;
                              ScreenTags[2].ti_Data = ASLSR->sm_DisplayWidth;
                              ScreenTags[3].ti_Data = ASLSR->sm_DisplayHeight;
                              ScreenTags[8].ti_Data = ASLSR->sm_DisplayID;
                              CustomScreen = 1;
                              NewMenu[10].nm_Flags = CHECKIT|MENUTOGGLE|CHECKED;

                              if (InitStuff())
                                {
                                FreeAslRequest( ASLSR );
                                CleanStuff();
                                exit(20);
                                };
                              };
                            FreeAslRequest( ASLSR );
                            };
                        break;
                case 8: CM = CM ^ 0x0010;
                        break;
                case 9: AutoDir = 1-AutoDir;
                        break;
                };
              break;
      case 2: switch(ITEMNUM(GCode))
                {
                case 0: GT_SetGadgetAttrs(Gadgets[3], Wnd, 0, GTLV_Labels, 0, TAG_DONE);
                        GetDevs();
                        GT_SetGadgetAttrs(Gadgets[3], Wnd, 0, GTLV_Labels, &DL_List, TAG_DONE);
                        a=VL_Valid[0];
                        GetStat(0);
                        if (a!=VL_Valid[0])
                            GetDir( 0, VL_Name[0] );
                        a=VL_Valid[1];
                        GetStat(1);
                        if (a!=VL_Valid[1])
                            GetDir( 1, VL_Name[1] );
                        break;
                default:CallExtPrg(VL_Active, ITEMNUM(GCode)-1);
                        break;
                };
              break;
      }
  }


/* gadget     : Wird von main aufgerufen, wenn ein Gadget angewählt wurde */

gadget()
    {
    int i;
    struct Node *h1;
    struct StringInfo   *sti;

    switch (GList->GadgetID)
        {
        case GD_Gadget3 : h1=DL_List.mlh_Head;
                          for (i=1; i<=GCode; i++) h1=h1->ln_Succ;
                          if (VL_Active==0)
                              {
                              sti=(struct StringInfo *)Gadgets[1]->SpecialInfo;
                              GT_SetGadgetAttrs(Gadgets[1], Wnd, 0, GTST_String, h1->ln_Name, TAG_DONE);
                              strcpy( VL_Name1, sti->Buffer );
                              GetDir(0, VL_Name[0]);
                              }
                          else
                              {
                              sti=(struct StringInfo *)Gadgets[15]->SpecialInfo;
                              GT_SetGadgetAttrs(Gadgets[15], Wnd, 0, GTST_String, h1->ln_Name, TAG_DONE);
                              strcpy( VL_Name2, sti->Buffer );
                              GetDir(1, VL_Name[1]);
                              };
                          break;
        case GD_Gadget0 : VL_Active=0;
                          ShowStat(0);
                          ShowStat(1);
                          ShowDir(0, GCode, 0);
                          break;
        case GD_Gadget1 : sti=(struct StringInfo *)Gadgets[1]->SpecialInfo;
                          VL_Active=0;
                          ShowStat(1);
                          strcpy( VL_Name1, sti->Buffer );
                          GetDir(0, VL_Name[0]);
                          break;
        case GD_Gadget2 : ParentName( VL_Name[VL_Active] );
                          GT_SetGadgetAttrs(Gadgets[1+14*VL_Active], Wnd, 0, GTST_String, VL_Name[VL_Active], TAG_DONE);
                          sti=(struct StringInfo *)Gadgets[1+14*VL_Active]->SpecialInfo;
                          strcpy( VL_Name[VL_Active], sti->Buffer );
                          GetDir(VL_Active, VL_Name[VL_Active]);
                          break;
        case GD_Gadget4 : DirAction( VL_Active, 0, 0 );
                          break;
        case GD_Gadget5 : DirAction( VL_Active, 1, 0 );
                          break;
        case GD_Gadget6 : DirAction( VL_Active, 2, 0 );
                          break;
        case GD_Gadget7 : ReNameSel(VL_Active);
                          break;
        case GD_Gadget8 : MakeADir(VL_Active);
                          break;
        case GD_Gadget9 : AllSelect( VL_Active );
                          break;
        case GD_Gadget10: ClrSelect( VL_Active );
                          break;
        case GD_Gadget11: MaskSelect( VL_Active );
                          break;
        case GD_Gadget12: Archiv( VL_Active );
                          break;
        case GD_Gadget13: Analyse( VL_Active );
                          break;
        case GD_Gadget14: Aktion( VL_Active );
                          break;
        case GD_Gadget15: sti=(struct StringInfo *)Gadgets[15]->SpecialInfo;
                          VL_Active=1;
                          ShowStat(0);
                          strcpy( VL_Name2, sti->Buffer );
                          GetDir(1, VL_Name[1]);
                          break;
        case GD_Gadget16: VL_Active=1;
                          ShowStat(0);
                          ShowStat(1);
                          ShowDir(1, GCode, 0);
                          break;
        case GD_Gadget17: if (GClass==GADGETDOWN)
                            {
                            ListSel=1;
                            BoxSelect(0);
                            }
                          else
                            ListSel=0;
                          break;
        case GD_Gadget18: if (GClass==GADGETDOWN)
                            {
                            ListSel=1;
                            BoxSelect(1);
                            }
                          else
                            ListSel=0;
                          break;
        case GD_Gadget19: VL_Active=0;
                          ShowStat(0);
                          ShowStat(1);
                          VL_XPos[0]=GCode;
                          ShowDir( 0, VL_OldFI[0], 1 );
                          break;
        case GD_Gadget20: VL_Active=1;
                          ShowStat(0);
                          ShowStat(1);
                          VL_XPos[1]=GCode;
                          ShowDir( 1, VL_OldFI[1], 1 );
                          break;
        case GD_Gadget21: VL_Active=0;
                          ShowStat(0);
                          ShowStat(1);
                          ShowInfo(0);
                          break;
        case GD_Gadget22: VL_Active=1;
                          ShowStat(0);
                          ShowStat(1);
                          ShowInfo(1);
                          break;
        case GD_Gadget23: VL_Active=0;
                          ParentName( VL_Name[VL_Active] );
                          GT_SetGadgetAttrs(Gadgets[1+14*VL_Active], Wnd, 0, GTST_String, VL_Name[VL_Active], TAG_DONE);
                          sti=(struct StringInfo *)Gadgets[1+14*VL_Active]->SpecialInfo;
                          strcpy( VL_Name[VL_Active], sti->Buffer );
                          GetDir(VL_Active, VL_Name[VL_Active]);
                          ShowStat(0);
                          ShowStat(1);
                          break;
        case GD_Gadget24: VL_Active=1;
                          ParentName( VL_Name[VL_Active] );
                          GT_SetGadgetAttrs(Gadgets[1+14*VL_Active], Wnd, 0, GTST_String, VL_Name[VL_Active], TAG_DONE);
                          sti=(struct StringInfo *)Gadgets[1+14*VL_Active]->SpecialInfo;
                          strcpy( VL_Name[VL_Active], sti->Buffer );
                          GetDir(VL_Active, VL_Name[VL_Active]);
                          ShowStat(0);
                          ShowStat(1);
                          break;
        };
    }


move()
    {
    LONG Entry;
    ULONG i;
    if (GCode!=255)
        {
        switch (GList->GadgetID)
            {
            case GD_Gadget0 : ShowDir(0, GCode, 0);
                              break;
            case GD_Gadget16: ShowDir(1, GCode, 0);
                              break;
            case GD_Gadget19: VL_XPos[0]=GCode;
                              ShowDir( 0, VL_OldFI[0], 1 );
                              break;
            case GD_Gadget20: VL_XPos[1]=GCode;
                              ShowDir( 1, VL_OldFI[1], 1 );
                              break;
            };
        };
    }


ticks()
    {
    LONG Entry;
    ULONG i;

    if ((Gadgets[17+VL_Active]->Activation)&GACT_ACTIVEGADGET)
        {
        Entry = (GMouseY-LY_TopList-2)/LY_LFontH;
        if (ListSel &&
            VL_OldCS[VL_Active]!=VL_OldFI[VL_Active]+Entry &&
            VL_Valid[VL_Active] )
            {
            if (Entry>1000)
                {
                if (VL_OldFI[VL_Active]>0)
                    {
                    ShowDir( VL_Active, VL_OldFI[VL_Active]-1, 0 );
                    GT_SetGadgetAttrs(Gadgets[16*VL_Active], Wnd, 0, GTSC_Top, VL_OldFI[VL_Active], TAG_DONE);
                    };
                Entry=0;
                }
            else if (Entry>=LY_LNumLines)
                {
                if (VL_OldFI[VL_Active]+LY_LNumLines<VL_NumEntry[VL_Active])
                    {
                    ShowDir( VL_Active, VL_OldFI[VL_Active]+1, 0 );
                    GT_SetGadgetAttrs(Gadgets[16*VL_Active], Wnd, 0, GTSC_Top, VL_OldFI[VL_Active], TAG_DONE);
                    };
                Entry=LY_LNumLines-1;
                };
            if (VL_OldCS[VL_Active]>VL_OldFI[VL_Active]+Entry)
                {
                for( i=VL_OldFI[VL_Active]+Entry; i<VL_OldCS[VL_Active]; i++ )
                    {
                    VL_Select[VL_Active][i]=VL_OldSM[VL_Active];
                    ShowDirLine( VL_Active, VL_OldFI[VL_Active], i-VL_OldFI[VL_Active] );
                    };
                }
            else
                {
                for( i=VL_OldCS[VL_Active]+1; i<=VL_OldFI[VL_Active]+Entry; i++ )
                    {
                    VL_Select[VL_Active][i]=VL_OldSM[VL_Active];
                    ShowDirLine( VL_Active, VL_OldFI[VL_Active], i-VL_OldFI[VL_Active] );
                    };
                };
            VL_OldCS[VL_Active]=VL_OldFI[VL_Active]+Entry;
            };
        };
    }

/* keyselect   : Wird von main aufgerufen, wenn eine Taste gedrückt wurde */

keyselect()
    {
    int i;
    struct Node *h1;
    char a;

    for (i=0; i<15 && LS[MSG_0_T_ShortCuts][i]!=(char)GCode; i++);

    switch (i)
        {
        case  0 : ParentName( VL_Name[VL_Active] );
                  GT_SetGadgetAttrs(Gadgets[1+14*VL_Active], Wnd, 0, GTST_String, VL_Name[VL_Active], TAG_DONE);
                  GetDir(VL_Active, VL_Name[VL_Active]);
                  break;
        case  1 : DirAction( VL_Active, 0, 0 );
                  break;
        case  2 : DirAction( VL_Active, 1, 0 );
                  break;
        case  3 : DirAction( VL_Active, 2, 0 );
                  break;
        case  4 : if ( VL_Archiv!=VL_Active ) ReNameSel(VL_Active);
                  break;
        case  5 : if ( VL_Archiv!=VL_Active ) MakeADir(VL_Active);
                  break;
        case  6 : AllSelect( VL_Active );
                  break;
        case  7 : ClrSelect( VL_Active );
                  break;
        case  8 : MaskSelect( VL_Active );
                  break;
        case  9 : if ( VL_Archiv==~0 ) Archiv( VL_Active );
                  break;
        case 10 : if ( VL_Archiv!=VL_Active ) Analyse( VL_Active );
                  break;
        case 11 : ShowInfo( VL_Active );
                  break;
        case 12 : GT_SetGadgetAttrs(Gadgets[3], Wnd, 0, GTLV_Labels, 0, TAG_DONE);
                  GetDevs();
                  GT_SetGadgetAttrs(Gadgets[3], Wnd, 0, GTLV_Labels, &DL_List, TAG_DONE);
                  a=VL_Valid[0];
                  GetStat(0);
                  if (a!=VL_Valid[0])
                      GetDir( 0, VL_Name[0] );
                  a=VL_Valid[1];
                  GetStat(1);
                  if (a!=VL_Valid[1])
                      GetDir( 1, VL_Name[1] );
                  break;
        case 13 : CleanStuff();
                  exit(0);
                  break;
        case 14 : VL_Active = 1-VL_Active;
                  ShowStat( 0 );
                  ShowStat( 1 );
                  break;
        }
    }

cursorkey()
    {
    int i;
    struct ExAllData *EAD;

    switch (GCode)
        {
        case 76: if (GQual&(IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
                     VL_Select[VL_Active][VL_OldFI[VL_Active]+VL_Marked[VL_Active]] = 255;
                 if (GQual&(IEQUALIFIER_LALT | IEQUALIFIER_RALT))
                     VL_Select[VL_Active][VL_OldFI[VL_Active]+VL_Marked[VL_Active]] = 0;
                 if (VL_Marked[VL_Active]>0)
                     {
                     VL_Marked[VL_Active]--;
                     ShowDirLine( VL_Active, VL_OldFI[VL_Active], VL_Marked[VL_Active] );
                     ShowDirLine( VL_Active, VL_OldFI[VL_Active], VL_Marked[VL_Active]+1 );
                     }
                 else if ((VL_Marked[VL_Active]==0) && (VL_OldFI[VL_Active]>0))
                     {
                     ShowDir( VL_Active, VL_OldFI[VL_Active]-1, 0 );
                     GT_SetGadgetAttrs(Gadgets[16*VL_Active], Wnd, 0, GTSC_Top, VL_OldFI[VL_Active], TAG_DONE);
                     }
                 else ShowDirLine( VL_Active, VL_OldFI[VL_Active], VL_Marked[VL_Active] );
                 break;
        case 77: if (GQual&(IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
                     VL_Select[VL_Active][VL_OldFI[VL_Active]+VL_Marked[VL_Active]] = 255;
               