home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 13 / AACD13.ISO / AACD / Utilities / ACDPlay / src / V1.5 / ARexx / ACDPlay.h.BAK next >
Text File  |  1997-02-15  |  14KB  |  374 lines

  1. /*
  2. *    ACDPlay - DER fantastische CDDA-Player für den Amiga
  3. *
  4. *                        Include V1.13
  5. *                  passend zu ACDPlay.c V1.13
  6. *
  7. *  Autor   Version   Datum      Veränderungen
  8. * ------- --------- --------   ------------------------------------------
  9. *    mak        0.11    22.09.96    Ersterstellung
  10. *    mak        0.12    23.09.96    alles dokumentiert
  11. *    mak        0.13    26.09.96    ACDPConfig-Struktur dazu
  12. *    MC3        0.14    28.09.96     Commodityspezifisches in Application-Struktur
  13. *    MC3        0.15    29.09.96    3 neue Config-Elemente (Commodity-Tooltypes)
  14. *    mak        0.16    07.10.96    Application.activewindow rausgenommen
  15. *                    08.10.96    ACDPConfig verändert
  16. *    MC3        0.17    15.10.96    CDStruct-Zeiger aus der Application-Struktur entfernt
  17. *                                Flag-Word in Config- und Application-Struktur eingebaut
  18. *    MC3        0.18    16.10.96    CDStruct ist wieder drin...
  19. *    mak        0.19    18.10.96    Screennotifyspezifisches in App-Struktur eingefügt
  20. *    MC3        0.20    20.10.96    pubscreenname[] und pubscreenlist eingefügt
  21. *            0.21    22.10.96    vorläufiges CDTitleNode
  22. *    mak        0.22    26.10.96    nicht lokalisierbare Texte hierher kopiert
  23. *                                kleinere Änderungen
  24. *    MC3        0.23    26.10.96    time_percentage in CDStruct
  25. *                    31.10.96    time_curseconds in CDStruct
  26. *            0.24    06.11.96    Neuigkeiten in CDStruct
  27. *                    07.11.96    String-Buffer eingefügt (Application), n. Fenster
  28. *            0.25    09.11.96    '_'-Zeichen in Zahlen-Array eingefügt, n. Fenster
  29. *                    10.11.96    Neue Variable in App und Config: hotkeymode
  30. *            0.26    11.11.96    Tooltypeflag-Variable
  31. *            0.27    14.11.96    timemode in Application, menustrip nur in Application
  32. *    mak        0.28    23.11.96    ARexxport dazu
  33. *    MC3        0.29    24.11.96    ProgramTitleNode dazu
  34. **                    29.11.96    Noch ein Fenster
  35. **                    30.11.96    WinTitleBuffer erhöht (Titellänge erhöht)
  36. *    mak        0.30    20.11.96    Noch ein Fenster mehr
  37. *                                Textbuffer ans Ende der AppStruct verlegt um Pointern
  38. *                                an ungeraden Adressen vorzubeugen
  39. *    MC3        0.31    07.12.96    Node-Strukturen verändert
  40. *                    08.12.96    magicwbflag in app freigegeben
  41. *                    10.12.96    CDStruct und Config verändert
  42. *            1.0        14.12.96    timebuf (o.ä.) vergrößert, Buffer für CD-Info-Gad zu haben
  43. *            1.01    01.01.97    einiges geändert, u.a. in AppWin
  44. *                    04.01.97    2 neue Strukturen
  45. *
  46. *            1.1        26.01.97    Config-Struktur eingespart, etc, etc...
  47. *            1.12    29.01.97    AppIcon-Zeugs eingebaut
  48. *    mak        1.13    02.02.97    CDxRequest Zeiger in CDStruct eingebaut
  49. *
  50. *    MC3                14.02.97    Wichtig: Gadget-Define-Reihenfolge verändert!
  51. *                    15.02.97    struct DirNode dazu
  52.  */
  53.  
  54. /********************
  55. ***** Konstanten **********************************************************
  56.  ********************/
  57.  
  58. /* nicht lokalisierte Texte */
  59. char PROG_NAME[]    = "ACDPlay";
  60. char *PROG_FULLNAME    = PROG_VERSION + 7;
  61.  
  62. char *TEXT_MAIN_DIRECTCHOICE0[]    = {"_1",  "_2",  "_3",  "_4",  "_5",  "_6",  "_7",  "_8",  "_9",  "1_0", NULL};
  63. char *TEXT_MAIN_DIRECTCHOICE1[]    = {"11", "12", "13", "14", "15", "16", "17", "18", "19", "20", NULL};
  64.  
  65. /* Fenster */
  66. #define    ANZ_WINDOWS 8            /* Anzahl der Fenster insgesamt */
  67. #define SIZE_WINDOW 18
  68. #define SIZE_CONFIG (4 + ANZ_WINDOWS * SIZE_WINDOW + 4 + 4)
  69.  
  70. #define    WINDOW_MAIN            0    /* Hauptfenster */
  71. #define    WINDOW_ABOUT        1    /* "Über"-Fenster */
  72. #define    WINDOW_CDINFO        2    /* CD-Informations-Fenster */
  73. #define    WINDOW_DRIVEINFO     3    /* Laufwerks-Informations-Fenster */
  74. #define WINDOW_PUBSCREEN    4    /* PubScreen-Auswahl */
  75. #define WINDOW_TITLES        5    /* Titelauswahl-Fenster */
  76. #define    WINDOW_EDIT            6    /* Fenster zum Editieren der CD-(Track)Titel */
  77. #define WINDOW_PROGRAM        7    /* Titelprogrammierungsfenster */
  78. #define    WINDOW_VOLUME        8    /* "Lautstärke"-Fenster */
  79.  
  80.  
  81. /* Verschiedenes */
  82. #define    LEFT    0                /* für AppWin-Struktur: */
  83. #define    TOP        1                /*  minsize[LEFT] usw.  */
  84. #define    WIDTH    2
  85. #define    HEIGHT    3
  86.  
  87. #define MINWIDTH_LISTVIEWWIN    100        /* Kleinste Größe für Listview-Fenster */
  88. #define MINHEIGHT_LISTVIEWWIN    100
  89. #define FAKEREQUESTSPACE        4
  90.  
  91. #define    MAGIC    0x41434432        /* Zur Identifikation des Konfig-Files, */
  92.  
  93. #define HOTKEYMODE_SCREENTOFRONT    0    /* Default: ACDP-Screen nach vorne */
  94. #define HOTKEYMODE_FRONTMOST        1    /* ACDP springt zum vordersten Screen */
  95. #define HOTKEYMODE_HIDE                2    /* ACDPlay wird wieder verborgen */
  96.  
  97. #define    EVENT_HOTKEYPRESSED    1    /* für die Commodity-Funktion, Hotkey wurde gedrückt */
  98. #define    EVENT_TIMER            2    /* Jede 1/10-Sekunde bekommt broker_mp ein Timer-Event */
  99.  
  100. #define    BUTTONHEIGHT    (app->font->ta_YSize + 6)
  101. #define BUTTONSPACE        12
  102. #define    XOFFSET            INTERWIDTH
  103. #define    YOFFSET            (app->screen->WBorTop + app->font->ta_YSize + 1 + INTERHEIGHT)
  104.  
  105. #define    WIDESTLETTER    "M"
  106.  
  107. #define DISKPATHLENGTH    256        /* mehr verkraftet eine Zeile im CLI nicht */
  108. #define MAXCDNAME        128        /* Gibt es nicht trotzdem so lange Pfade? */
  109. #define MAXARTISTNAME    128
  110. #define MAXTITLENAME    128
  111.  
  112. #define TIMEMODE_TRACKCUR    0
  113. #define TIMEMODE_TRACKREM    1
  114. #define TIMEMODE_ALLCUR        2
  115. #define TIMEMODE_ALLREM        3
  116.  
  117. #define REPEATMODE_NOREP    0
  118. #define REPEATMODE_REPTRACK    1
  119. #define REPEATMODE_REPALL    2
  120. #define REPEATMODE_REPAB    3
  121.  
  122. #define PLAYMODE_CD            0
  123. #define PLAYMODE_RNDCD        1
  124. #define PLAYMODE_PRG        2
  125. #define PLAYMODE_RNDPRG        3
  126.  
  127. #define DEFAULTSEARCHSECONDS    10    /* Anzahl Sekunden, die ein 'Search' überspringt */
  128. #define DEFAULTUPDATEDELAY        5    /* Anzahl 1/10-Sekunden */
  129.  
  130. /* Gadgets */
  131. #define GADGET_MAIN_DIRECTCHOICE0    0        /* 10 Gadgets */
  132. #define GADGET_MAIN_DIRECTCHOICE1    10        /* 10 Gadgets */
  133. #define GADGET_MAIN_TITLESHOW        20
  134. #define GADGET_MAIN_TRACKSHOW        21
  135. #define GADGET_MAIN_INDEXSHOW        22
  136. #define GADGET_MAIN_TIMESHOW        23
  137. #define GADGET_MAIN_PLAYMODE        24
  138. #define GADGET_MAIN_REPEATMODE        25
  139. #define GADGET_MAIN_TRACKSLIDER        26
  140. #define GADGET_MAIN_CDOUT            27
  141. #define GADGET_MAIN_JUMPBWRD        28
  142. #define GADGET_MAIN_JUMPFWRD        29
  143. #define GADGET_MAIN_SRCHBWRD        30
  144. #define GADGET_MAIN_SRCHFWRD        31
  145. #define GADGET_MAIN_STOP            32
  146. #define GADGET_MAIN_PAUSE            33
  147. #define GADGET_MAIN_PLAY            34
  148.  
  149. #define    GADGET_ABOUT_OK                0
  150.  
  151. #define    GADGET_CDINFO_OK             0
  152. #define GADGET_CDINFO_AUTHOR        1        /* Brauchen Textgadgets eine   */
  153. #define GADGET_CDINFO_TITLE            2        /* extra ID ? Von den empfängt */
  154. #define GADGET_CDINFO_TRACKS        3        /* man doch sowieso nie Msgs.  */
  155. #define GADGET_CDINFO_TIME            4
  156.  
  157. #define    GADGET_DRIVEINFO_OK            0
  158. #define    GADGET_DRIVEINFO_DEVICE        1        /* s.o. */
  159. #define    GADGET_DRIVEINFO_UNIT        2
  160. #define GADGET_DRIVEINFO_VENDOR        3        /* Ja, brauchen sie. */
  161. #define GADGET_DRIVEINFO_PRODUCT    4        /* Schließlich müssen sie mal */
  162. #define GADGET_DRIVEINFO_SPECIFIC    5        /* verändert werden... */
  163.  
  164. #define GADGET_PUBSCREEN_LISTVIEW    0
  165. #define GADGET_PUBSCREEN_UPDATE        1
  166.  
  167. #define GADGET_TITLES_LISTVIEW        0
  168.  
  169. #define GADGET_EDIT_TITLE            0
  170. #define GADGET_EDIT_ARTIST            1
  171. #define GADGET_EDIT_LISTVIEW        2
  172. #define GADGET_EDIT_TRACKTITLE        3
  173. #define GADGET_EDIT_SAVE            4
  174.  
  175. #define GADGET_PROGRAM_LVCD            0
  176. #define GADGET_PROGRAM_LVPRG        1
  177. #define GADGET_PROGRAM_COPYALL        2
  178. #define GADGET_PROGRAM_DEL            3
  179. #define GADGET_PROGRAM_LOAD            4
  180. #define GADGET_PROGRAM_SAVE            5
  181.  
  182. #define GADGET_VOLUME_LEFT            0
  183. #define GADGET_VOLUME_MASTER        1
  184. #define GADGET_VOLUME_RIGHT            2
  185.  
  186.  
  187. /* BOOL-ToolType-Flags */
  188. /* hier werden verschiedene Flags von den Tooltypes gesetzt */
  189. #define FLAG_TOOL_USEWINDOWBAR    (1 << 0)
  190. #define FLAG_TOOL_USESCREENBAR    (1 << 1)
  191. #define FLAG_TOOL_MWB (1 << 2)
  192. #define FLAG_TOOL_QUITONCLOSE (1 << 3)
  193. /* Flags für die unterschiedlichen GUI-Elemente im Hauptfenster */
  194. #define FLAG_MAIN_DIRECTCHOICE0        (1 << 0)
  195. #define FLAG_MAIN_DIRECTCHOICE1        (1 << 1)
  196. #define FLAG_MAIN_TITLE                (1 << 2)
  197. #define FLAG_MAIN_TIME                (1 << 3)
  198. #define FLAG_MAIN_MODE                (1 << 4)
  199. #define FLAG_MAIN_PANEL                (1 << 5)
  200. #define FLAG_MAIN_TRACKSLIDER        (1 << 6)
  201. /* Flags für Application */
  202.  
  203. /* Application ist/war auf der Workbench geöffnet */
  204. #define APPF_WORKBENCH            (1 << 0)
  205. /* Application wurde von der screennotify.library zum Schließen bewegt */
  206. #define APPF_SNCLOSED            (1 << 1)
  207.  
  208.  
  209. /********************
  210. ***** Strukturen **********************************************************
  211.  ********************/
  212.  
  213. /*------------------------------ BevelBox --------------------------------*/
  214. struct BevelBox
  215. {
  216.     struct BevelBox        *bb_NextBevelBox;
  217.     WORD                bb_LeftEdge;
  218.     WORD                bb_TopEdge;
  219.     WORD                bb_Width;
  220.     WORD                bb_Height;
  221.     UBYTE                bb_FrameType;    /* BBFT_BUTTON, BBFT_RIDGE, BBFT_ICONDROPBOX, V39 */
  222.     BOOL                bb_Recessed;
  223.     APTR                bb_VisualInfo;
  224. };
  225. /*------------------------------ Scroll ----------------------------------*/
  226. struct Scroll
  227. {
  228.     char                 **Text;
  229.     BYTE                *Flags;    /* Flags für jeden Text einzeln, sehr unkomfortabel */
  230.     WORD                LeftEdge;
  231.     WORD                TopEdge;
  232.     WORD                Width;
  233.     WORD                Height;
  234.     TextAttr            *Font;
  235.  
  236.     /* interne Daten */
  237.     WORD                p_height;
  238.     WORD                p_pos;
  239.     struct RastPort        *RPort;
  240.     struct Image        Img;
  241. };
  242. /*------------------------------ ProgramTitleNode ------------------------*/
  243. struct ProgramTitleNode
  244. {
  245.     struct Node        ptn_Node;        /* ln_Name zeigt auf Titelnamen (Listen) */
  246.     BOOL            ptn_randomplayed;
  247.     UBYTE            ptn_track;        /* Tracknummer */
  248. };
  249. /*------------------------------ DirNode ---------------------------------*/
  250. struct DirNode
  251. {
  252.     struct MinNode    dn_Node;
  253.     char            dn_Name[31];
  254. };
  255.  
  256. /*------------------------------ CDStruct --------------------------------*/
  257. struct CDStruct
  258. {
  259.     ULONG        unit;                    /* Unit des SCSI-Geräts */
  260.     ULONG        lun;
  261.     CDRequest    *cdrequest;                /* Zeiger auf CDRequest-Struktur */
  262.     CDxRequest    *cdx;
  263.     List        *index;                    /* Zeiger auf CD-Index-Liste */
  264.  
  265.     List        *cdtitles;                /* Zeiger auf Titel-Liste */
  266.     List        *progtitles;            /* Zeiger auf Programm-Liste */
  267.     ProgramTitleNode    *actprognode;    /* aktueller Track im Programm */
  268.  
  269.     UBYTE        searchseconds;
  270.     UBYTE        updatedelay;
  271.  
  272.     UBYTE        timemode;                /* Anzeigemodus - siehe oben */
  273.     UBYTE        repeatmode;
  274.     UBYTE        playmode;
  275.     BOOL        useraction;                /* Hat der User die Trackveränderung  */
  276.                                         /* ausgelöst? wichtig f. Wiederholung */
  277.  
  278.     UBYTE        num_track;                /* Anzahl Tracks */
  279.     UBYTE        cur_track;                /* aktueller Track */
  280.     UBYTE        active;                    /* siehe cdr_active */
  281.     UBYTE        time_percentage;        /* Zeit des aktuellen Tracks in % */
  282.                                         /* wichtig für Trackslider */
  283.     ULONG        time_curseconds;        /* aktuelle Gesamtzeit in Sekunden */
  284.  
  285.     char        device[31];
  286.     char        cdname[MAXCDNAME + 1];    /* Name der CD */
  287.     char        artistname[MAXARTISTNAME + 1];    /* Name des Interpreten */
  288.     char        diskpath[DISKPATHLENGTH + 1];    /* Pfadangabe für die CD-Titel */
  289. };
  290.  
  291. /*------------------------------ AppWin ----------------------------------*/
  292. struct AppWin
  293. {
  294.     Window        *window;                /* Zeiger auf das Fenster */
  295.                                         /* Erst überprüfen ob überhaupt */
  296.                                         /* ein Fenster da ist */
  297.     BOOL        winopen;                /* ob das Fenster geöffnet werden soll */
  298.     UWORD         minsize[4];                /* Größe und Position 1 */
  299.     UWORD         maxsize[4];                /* Größe und Position 2 (ZIP) */
  300.     UWORD        minwidth, minheight;    /* Beschränkung bei Größenveränderung */
  301.     UWORD        maxwidth, maxheight;    /* des Fensters */
  302.     Gadget        **gadget;                /* Zeigerzeiger auf Gadget */
  303.     Gadget        *gadgetlist;            /* Zeiger auf Gadgetliste */
  304.     IntuiText    *itext;                    /* IntuiText-Liste für Fenster */
  305.     Image        *img;                    /* Image-Liste für das Fenster */
  306.     struct BevelBox *bbox;
  307. };
  308. /*------------------------------ Application -----------------------------*/
  309. struct Application
  310. {
  311.     Screen            *screen;                /* PublicScreen, */
  312.                                             /* auch um zu testen ob */
  313.                                             /* Application geöffnet ist */
  314.     List             *pubscreenlist;            /* Liste aller Public-Screens */
  315.  
  316.     UWORD            hotkeymode;                /* Was tun bei Hotkey und Application offen? */
  317.     UWORD            Flags;                    /* Flags für Application s.o. */
  318.     APTR            visualinfo;                /* VisualInfo für GadTools */
  319.     TextAttr        *font;                    /* benutzter font */
  320.  
  321.     struct AppWin    appwin[ANZ_WINDOWS];    /* für jedes Window ein Feld */
  322.     Menu            *menustrip;                /* Menü für alle Fenster */
  323.  
  324.     struct CDStruct *cdstr;                    /* Zeiger auf CDStruct-Struktur */
  325.     struct Scroll    *scroller;                /* für den Scroller im About-Fenster */
  326.  
  327.     BOOL            magicwbmode;             /* wird noch nicht unterstützt */
  328.     UWORD            flag_tool;                /* Flags von speziellen Tooltypes */
  329.     UWORD            flag_main;                /* Enthält Flags für die GUI-Elemente in MAIN */
  330.  
  331.     CxObj            *broker;                /* Commodity-Broker */
  332.     CxObj            *filter_popkey;
  333.     CxObj            *sender_popkey;
  334.     CxObj            *translate_popkey;
  335.     CxObj            *filter_timer;
  336.     CxObj            *sender_timer;
  337.     BYTE            cx_priority;            /* Priorität -128 bis 127 */
  338.     BOOL            cx_popup;                /* Beim Start öffnen? */
  339.  
  340.     APTR            snhandle_wbench;        /* Zeiger auf ScreenNotifyHandle für WB-Events */
  341.  /*    APTR            snhandle_closescr;    */    /* Zeiger auf ScreenNotifyHandle für CloseScreen()-Events */
  342.  
  343.     struct MsgPort    *idcmp;                    /* shared IDCMP */
  344.     struct MsgPort    *broker_mp;                /* Messageport für Broker */
  345.     struct MsgPort    *appicon_mp;            /* Messageport für's AppIcon */
  346.     struct MsgPort  *scrnotify_mp;            /* Messageport für Screennotify Events */
  347.     struct MsgPort    *arexx_mp;                /* öffentlicher ARexxport 'ACDPLAY' */
  348.  
  349.     struct AppIcon    *appicon;                /* Alles für's AppIcon */
  350.     struct DiskObject    *diskobj;
  351.     char            *progname;                /* Zeiger auf Programmnamen */
  352.  
  353.     char            pubscreenname[MAXPUBSCREENNAME + 1]; /* Name des Public-Screens */
  354.     char            winmaintitlebuf[MAXCDNAME + 50 + 3];        /* Möglicherweise keine gute Umsetzung, */
  355.     char            wintitlestitlebuf[MAXCDNAME + MAXARTISTNAME + 3];    /* schreib' mal Deine Meinung.. */
  356.     char            timeshowbuf[30];        /* für die Zeitanzeige */
  357.                                             /* ab 20 beginnt der andere Gad-Buffer */
  358.     char            cx_popkey[41];            /* Input Description String */
  359. };
  360.  
  361. /*------------------------------ MyPubScreenNode -------------------------*/
  362. struct MyPubScreenNode
  363. {
  364.     struct Node        mpsn_Node;        /* ln_Name zeigt auf den Screennamen */
  365.     char            mpsn_pubscreenname[MAXPUBSCREENNAME + 1];
  366. };
  367. /*------------------------------ CDTitleNode -----------------------------*/
  368. struct CDTitleNode
  369. {
  370.     struct Node        cdtn_Node;        /* ln_Name zeigt auf Titelnamen */
  371.     BOOL            cdtn_randomplayed;    /* TRUE, wenn im Zufallsmodus schon gespielt worden */
  372.     char            cdtn_titlename[MAXTITLENAME + 1];
  373. };
  374.