home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / MIDNIGHT.LZH / MIDNIGHT / SOURCE / MIDNIGHT.H < prev    next >
C/C++ Source or Header  |  1992-12-30  |  7KB  |  177 lines

  1. /*
  2.     "midnight", wenn's dunkel wird...
  3.  
  4.     Header-File für eigene Modulentwicklungen.
  5.     Fragen ? Dann lesen Sie am besten erst 'mal hier die Kommentare,
  6.     dann wieder das Handbuch, sehen sich dann eins der Beispielmodule
  7.     an und dann sind WIR immernoch da...
  8.  
  9.     Hartwig zur Nieden fidonet:(2:241/3420.17), Mario Adam @ S3
  10.         Clausthal-Zellerfeld/Göttingen  15.11.1992
  11.  
  12.     Ach ja, viel Spa₧ beim programmieren :-)
  13. */
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20. #ifndef __MIDNIGHT
  21. #define __MIDNIGHT
  22.  
  23.  
  24. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  25. /* Funktionsnummern für Mod_main            */
  26. #define M_INIT   0        /* Initialisierungen (v_opnvwk(!),Malloc etc.)    */
  27. #define M_SWITCH 1        /* Umblenden auf gewünschten Hintergrund        */
  28. #define M_DO_IT  2        /* Hier geht's richtig los                        */
  29. #define M_EXIT   3        /* Rückgängig machen, was in M_INIT war            */
  30.  
  31.  
  32. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  33. /* Typenbezeichnungen für die Einstellungen    */
  34. #define T_END    0x8000    /* Flag, das im letzten Value gesetzt sein mu₧    */
  35. #define T_MINE        0    /* Dieser Werte steht unter eigener Kontrolle    */
  36. #define T_EDIT        1    /* Editfeld zu Eingabe von Zahlen                */
  37. #define T_BUTTON    2    /* Cross-Button (Ein/Aus)                        */
  38. #define T_POPUP        3    /* Liste als Popup anzeigen (explizite Werte)    */
  39. #define T_SLIDER    4    /* Schieberegler darstellen ('ungenaue' Werte)    */
  40. #define T_FORM        5    /* Eigen-Dialog zeigen                            */
  41. #define T_TITEL        6    /* Eine Titelzeile in der Box malen.            */
  42.  
  43. /*
  44.     Dieser Struct gibt Zusatzinformationen zu den 8 im Modul-Header
  45.     gesicherten Informationen an. Im Programm steht eine Liste von 8
  46.     solchen Werten. Ist der Pointer auf diese Liste == NULL, ist das
  47.     Modul nicht konfigurierbar.
  48. */
  49.  
  50. typedef struct value
  51.     {    UWORD    Art;    /* Art der Einstellmöglichkeit            */
  52.         long    Min;    /* Erlaubter Minimalwert oder Pointer    */
  53.         long    Max;    /* Erlaubter Maximalwert oder Pointer    */
  54.         char    *Name;    /* Pointer auf Erklärungsstring            */
  55.     } Value;        /* Die Einstellungen.    */
  56.  
  57.  
  58. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  59. /*
  60.     Flagbelegung, anhand der entschieden wird, ob das Modul auf dem
  61.     aktuellen Rechner lauffähig ist. Für weitere Infos mu₧ vom Modul
  62.     auf die Cookies zurückgegriffen werden.
  63.     Das Modul gibt hier an, auf welcher Hardware es laufen WÜRDE,
  64.     das ACC vergleicht dann mit der tatsächlich vorhandenen Hardware
  65.     Ein guter Wert wäre hier 0x003f, dieses Modul läüft ÜBERALL.
  66.     Bits 0-5 = 1 bedeuten: mit diesen Planes laufe ich,
  67.     Bits >5  = 1 bedeuten: diese Hardware MU₧ ich haben.
  68.     Über die Union ist es etwas einfacher, die vielen Bits zu setzen:
  69.     Hw_flags.b= 0x003f;
  70. */
  71.  
  72. typedef    union hw_fl                            /* Harsware-Flags:        */
  73.     {    struct    {    Pl_1  : 1;    Pl_2  : 1;    /* Mögliche Planes        */
  74.                     Pl_4  : 1;    Pl_8  : 1;
  75.                     Pl_HC : 1;    Pl_TC : 1;    /* HC=High-,TC=TrueCol    */
  76.                     Fl_020 : 1;                /* 1= CPU >= 68020        */
  77.                     Fl_FPU : 1;                /* 1= FPU                */
  78.                     Fl_DSP : 1;                /* 1= DSP (???)            */
  79.                     resvd : 7;            /* für später reserviert    */
  80.                 } B;
  81.          int    b;            /* Jetzt nochmal als handlicheres int    */
  82.     } HW_Fl;
  83.  
  84.  
  85.  
  86. /*------------------------------------------------------------------*/
  87. /* WICHTIG ! So mu₧ ein Modul nach dem GEMDOS-Header aussehen !!    */
  88.  
  89. typedef struct mod_str        /* Diese Struktur steht am Modulanfang    */
  90.     {    int        branch;        /* Branch an den Code=Einsprungadresse    */
  91.                             /* &MOD_struct ist also= MOD_main        */
  92.         char    magic[8];    /* Hier sollte "mid_MOD\0" stehen        */
  93.  
  94.         long    Werte[8];    /* Werte, die geändert werden können    */
  95.         HW_Fl    U;    /* Diese Union wird von M_INIT beim allerersten    */
  96.                     /* Laden gesetzt und immer mitgespeichert.        */
  97.  
  98.         Value    **V;            /* Beschreibung der Einstellarten.    */
  99.             /* V zeigt auf einen Pointer auf eine Liste von 8        */
  100.             /* 'Value's, die im Modul existieren MUSS als "Value_s"    */
  101.             /* Ist V==NULL, so ist nichts einstellbar im Modul.        */
  102.         char    *MyName;/* Zeiger auf Command-Line mit Modulnamen    */
  103.     } MOD_str;
  104.  
  105.  
  106.  
  107. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  108. /*
  109.     Struktur für den Sampleabspieler. Ist DMA-Sound vorhanden, wird
  110.     bei 6258,12517,25033 und 50066 kHz als Frequenz über DMA gespielt
  111.     Der Sample mu₧ Byteweise vorliegen und wird für DMA entsprechend
  112.     angepasst.
  113. */
  114.  
  115. typedef struct snd_str
  116.     {    UBYTE    *SND_start;        /* Pointer auf Sounddaten.            */
  117.         volatile UBYTE *SND_pos;/* Aktueller Datenpointer, schreiben*/
  118.         /* ist verboten. Lesend geht SND_pos auf 0, wenn der Sample    */
  119.         /* fertig abgespielt ist. Ansonsten ist SND_pos != 0.        */
  120.         UBYTE    *SND_end;        /* Erstes Byte nach den Sounddaten    */
  121.                     /* Diese Daten geben die 'signed' Amplituden an    */
  122.         int        SND_Hz;            /* Abspielgeschwindigkeit in Hz        */
  123.         UWORD    SND_repeat;        /* # Wiederholungen (0 keine)        */
  124.             /* Das Oberste Bit wird als Flag für die DMA-Konver-    */
  125.             /* tierung benötigt, darum Zähler nur von 0-32767.        */
  126.             /* Bit 15=1: -128 minimale, 127 maximale Amplitude(DMA),*/
  127.             /* Bit 15=0:    0 minimale, 255 maximale Amplitude(PCM).*/
  128.     } SND_str;
  129.  
  130.  
  131. /*------------------------------------------------------------------*/
  132. /* Dieser Struct wird an das Modul bei dessen Aufruf übergeben.        */
  133.  
  134. typedef struct acc_str
  135.     {    int        x,y,w,h;    /* Pos und Grö₧e des erlaubten Bereichs    */
  136.         HW_Fl    U;            /* Vorhandene Hardware-Chips und Grafik    */
  137.         int        work_in[11],    /* work_in ist auf 1 initialisiert,    */
  138.                 work_out[57];    /* darf aber verändert werden.        */
  139.         int        handle;            /* VDI-Handle des 'reellen' Treibers*/
  140.         int        planes;                        /* Anzahl Planes        */
  141.  
  142.         int        (*EVNT_ask)(long);            /* Abfragfunktion        */
  143.         long    (*rnd24)(long);                /* Random-Berechner        */
  144.         int        (*Sound)( SND_str * );        /* Soundfunktion.        */
  145.         int        (*ScreenSave)(int,char*);    /* Sc.S.-Fkt.            */
  146.             /* Die letzten 4 Pointer KÖNNEN so aufgerufen werden,    */
  147.             /* sind aber in MOSTART.S nochmal als normale Funktionen*/
  148.             /* , um SOWAS zu vermeiden: (*As->Sound)( &sound );        */
  149.     } ACC_str;
  150.  
  151.  
  152. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  153. /*
  154.     Die folgenden Funktionen finden sich im Startup-Code MOSTART.S
  155.     und würden normalerweise mit (*MOD_struct.EVNT_ask)( 0 )
  156.     aufgerufen. Diese Funktionen sollen also nur eine Erleichterung
  157.     sein, denn in MOSTART.S werden genau so wie beschrieben aufgerufen.
  158. */
  159.  
  160. int        EVNT_ask( long wait_ms );
  161. long        rnd24( long wert );
  162. int        Sound( SND_str *SND_struct );
  163. int        ScreenSave( int flag, char *Name );
  164.  
  165.  
  166. /*
  167.     Die Modul-Struktur ist in MOSTART.S definiert. Da aber ein
  168.     Abfragen der Werte mit MOD_struct.Werte[0] etwas lang wird, können
  169.     Sie sich mit #define das Kürzel Ms erschaffen, welches die
  170.     Schreibarbeit etwas verringert...
  171.  
  172.  
  173. extern MOD_str MOD_struct;
  174. */
  175.  
  176. #endif
  177.