home *** CD-ROM | disk | FTP | other *** search
/ C++ Games Programming / CPPGAMES.ISO / mt / mt.h < prev    next >
C/C++ Source or Header  |  1989-01-12  |  9KB  |  230 lines

  1. /* mt.h   header file for mt.c */
  2.  
  3. /* there is a nested include file referenced in the body of this file: */
  4. /* mtscreen.h  -  all screen menu data */
  5.  
  6. /* see also mtdeclar.h - contains all function declarations */
  7.  
  8.  
  9. /* These defines to allow same header file to work for both initialization */
  10. /*  and reference.  Only define the word ALLOCATE in the main() module. */
  11.  
  12. #ifdef ALLOCATE     /* GLOBAL defined equal to nothing */
  13.     #define GLOBAL 
  14.     #define INIT(x)   =x
  15. #else
  16.     #define GLOBAL extern
  17.     #define INIT(x)
  18. #endif              /* INIT defined equal to nothing */
  19.  
  20.  
  21. #define     NOTE_OFF            0x80    /* MIDI voice messages - channel 1 */
  22. #define     NOTE_ON             0x90
  23. #define     POLY_AFTERTOUCH     0xA0
  24. #define     MODE_MESSAGE        0xB0
  25. #define     PROGRAM_CHANGE      0xC0
  26. #define     AFTERTOUCH          0xD0
  27. #define     PITCH_WHEEL         0xE0
  28. #define     ALL_NOTES_OFF       0x7B    /* channel mode message */
  29.  
  30. /* IBM PC character graphics symbol numbers for Measure Level Edit screen */
  31.  
  32. #define     NOTE_CHAR           14  /* character for measure with data */
  33. #define     MEAS_CHAR           29  /* character for measure with no data */
  34. #define     BLOCK_START         195 /* character for start of block */
  35. #define     BLOCK_END           180 /* character for end of block */
  36. #define     SMALL_BLOCK         199 /* character for 1 measure long block */
  37.  
  38. #define     NTRACK              8   /* number of tracks */
  39. #define     NNOTES              128 /* number of possible MIDI note numbers */
  40. #define     NCHANNEL            16  /* maximum number of MIDI channels */
  41. #define     OCTIVE              12  /* number of MIDI notes in an octive */
  42. #define     TRACK_NAME_WIDE     9   /* number of chars wide a name can be */
  43. #define     TITLE_WIDE          51  /* number of chars for track title */
  44. #define     N_TRACK_PARAM       7   /* number of menu items per track */
  45. #define     NMEASURE_DISP       15  /* number of measures displayed (ed) */
  46. #define     MAX_CLOCK           240 /* highest MPU-401 clock value */
  47. #define     FMALLOC_BYTES       4   /* number of bytes used by fmalloc */
  48.  
  49. /* defines for mtsc modules */
  50.  
  51. #define     OCTIVE_HIGH     56      /* number of dots high in one octive */
  52. #define     CROSS_HALF      4       /* cross sprite half hight (to center) */
  53. #define     SC_TOP_LINES    2       /* space to reserve for text */
  54. #define     SC_MENU_LINES   4       /* space at screen bottom - menu lines */
  55. #define     SC_BOT_LINES    2       /* space at very bottom for messages */
  56. #define     HALF_NOTE_DOTS  4       /* pixel hight of half key on screen */
  57. #define     LEFT_BORDER     70      /* space in pixel dot widths */
  58. #define     MIN_SPACE       3       /* min separation between MIDI tick */
  59. #define     TICK_PER_BEAT   120     /* MPU tick per metronome beat */
  60.  
  61. #define     NSCREEN     5       /* number of screens */
  62.  
  63. /* defines the number of menu items on given screen */
  64.  
  65. #define     NPARAM1     10      /* main menu */ 
  66. #define     NPARAM2     75      /* record menu */
  67. #define     NPARAM3     168     /* measure level menu */
  68. #define     NPARAM4     9       /* help menu */
  69. #define     NPARAM5     4       /* import bottom menu */
  70. #define     NPARAM51    8       /* source tracks on import */
  71. #define     NPARAM52    8       /* distination tracks on import */
  72. #define     NPARAM6     16      /* note level edit */
  73.  
  74. #define     DEFAULT_FILE_NAME   "NO_NAME.SNG"
  75.  
  76. /* global variables - all preceded by "g_" */
  77.  
  78. GLOBAL char g_prodir[50];           /* directory of program's files */
  79. GLOBAL char g_songdir[50];          /* directory containing song data */
  80. GLOBAL char g_filename[14] INIT(DEFAULT_FILE_NAME);
  81. GLOBAL char g_songtitle[TITLE_WIDE] INIT(" ");
  82.  
  83. GLOBAL int g_free_memory INIT(0);       /* Kbytes of free memory at start */
  84. GLOBAL int g_pct_free_memory INIT(0);   /* % of memory left to use */
  85. GLOBAL int g_meton INIT(0);             /* toggle for metronome on/off */
  86. GLOBAL int g_tick INIT(120);            /* tick number within measure */
  87. GLOBAL int g_metrate INIT(100);         /* metronome rate */
  88. GLOBAL int g_meter INIT(4);             /* beats per measure */
  89. GLOBAL int g_midi_metro INIT(24);       /* MPU midi clocks per metro beat */
  90. GLOBAL int g_pitchbend INIT(0);         /* toggle for pitchbend data thru */
  91. GLOBAL int g_exclusive INIT(0);         /* toggle for exclusive data thru */
  92. GLOBAL int g_current_measure INIT(0);   /* number of current measure */
  93. GLOBAL int g_record_track INIT(-1);     /* track number set to record */
  94. GLOBAL int g_bytes_used INIT(0);        /* number of kbytes used */
  95. GLOBAL int g_trace_on INIT(0);          /* toggle for data trace option on */
  96.  
  97. /* globals for mted modules */
  98.  
  99. GLOBAL int g_block_on INIT(0);          /* toggle for block active */
  100. GLOBAL int g_block_track INIT(-1);      /* track number for block */
  101. GLOBAL int g_block_start INIT(-1);      /* measure number for block start */
  102. GLOBAL int g_block_end INIT(-1);        /* measure number for block end */
  103.  
  104. /* globals for mtsc modules */
  105.  
  106. GLOBAL int g_scale INIT(4);             /* amount of compression of time */
  107. GLOBAL int g_oct_shown;                 /* number of octaves shown */
  108. GLOBAL int g_top_note INIT(83);         /* MIDI note number of top note */
  109. GLOBAL int g_top_note_line;             /* vert pixel number of top note */
  110. GLOBAL int g_bot_note;                  /* MIDI note number of bottom note */
  111. GLOBAL int g_bot_note_line;             /* vert pixel number of bottom note */
  112. GLOBAL int g_first_measure INIT(0);     /* first measure number on screen */
  113. GLOBAL int g_first_tick INIT(0);        /* first tick number on screen */
  114. GLOBAL int g_sc_refresh INIT(1);        /* set true if note editor is left */
  115.  
  116. GLOBAL int g_note_array[NNOTES];    /* array to track which notes are left */
  117.                                     /* on or off at end of a block */
  118.  
  119. GLOBAL int g_tracks_on[NTRACK];         /* tracks set to play */
  120.  
  121. GLOBAL int g_track_vel[NTRACK];         /* used to store velocity data for */
  122. GLOBAL int g_track_vel_used INIT(0);    /* play module.  */
  123.  
  124.         /* structure definitions - for all modules in mt */
  125.  
  126. struct event {          /* structure used to store a midi data event */
  127.     struct event far *next;
  128.     unsigned char nbytes;
  129.     unsigned char b[4];
  130. };
  131.  
  132.  
  133. struct trackdata {      /* structure to hold one track's data & pointers */
  134.     char name[TRACK_NAME_WIDE];
  135.     int midichan;
  136.     long numevents;
  137.     int active;
  138.     int midivol;
  139.     struct event far *first;
  140.     struct event far *current;
  141.     struct event far *last;
  142. };
  143.  
  144.  
  145. struct item {       /* temporary structure used to pass data from functions */
  146.     int track;
  147.     int measure;
  148. };
  149.  
  150. /* structures used in mtsc modules */
  151.  
  152. struct note_map{        /* Structure to hold data about each MIDI note no. */
  153.     char name[10];      /* Helps full screen display of piano, note name... */
  154.     int up_dots;        /* = number of pixels to go up to next note */
  155.     int down_dots;      /* = down to next note */
  156. };
  157.  
  158. struct note_time{       /* note list structure used in full screen editing  */
  159.     struct event far *on_event;
  160.     int on_measure;
  161.     int on_tick;
  162.     int note_number;
  163.     struct event far *off_event;
  164.     int off_measure;
  165.     int off_tick;
  166.     struct note_time far *next;
  167. };
  168.  
  169. /* structure used to keep track of note-ons when compiling note list */
  170.  
  171. struct on_event{
  172.     struct event far *event;
  173.     int measure;
  174.     int tick;
  175.     int vel;
  176. };
  177.  
  178. /* temporary structure to pass measure/time/note of cursor position */
  179.  
  180. struct note_pos{        
  181.     int measure;
  182.     int tick;
  183.     int note;
  184.     int sprite_x;
  185.     int sprite_y;
  186. };
  187.  
  188.  
  189. /* the screen data definitions are too long for the INIT() approach, */
  190. /* so different definitions are given depending on whether ALLOCATE is */
  191. /* defined in the current module.  Look at the end of this file of the */
  192. /* outline definitions for externals */
  193.  
  194. #ifdef ALLOCATE
  195.                                         /* primary data array for tracks */
  196.     struct trackdata g_trackarray[NTRACK];
  197.                                         /* pointers to screen image data */
  198.                                         /* plus 1 so screens start #1, #2 */
  199.     struct strchain *g_chain[NSCREEN + 1];
  200.  
  201.     char g_note_char[2] = { NOTE_CHAR, '\0' };      /* char strings for */
  202.     char g_meas_char[2] = { MEAS_CHAR, '\0' };      /* measure level edit */
  203.     char g_blocks_char[2] = { BLOCK_START, '\0' };  /* symbols */
  204.     char g_blocke_char[2] = { BLOCK_END, '\0' };
  205.     char g_smallb_char[2] = { SMALL_BLOCK, '\0' };
  206.  
  207.  
  208. #include "mtscreen.h"                   /* all menu data in this file */
  209.  
  210.  
  211. #else       /* external references for dependant modules */
  212.  
  213.     extern struct trackdata g_trackarray[];
  214.     extern struct strchain *g_chain[];
  215.     extern struct selement mt1[];       /* the menu data referenced here */
  216.     extern struct selement mt2[];       /* is in mtscreen.h */
  217.     extern struct selement mt3[];
  218.     extern struct selement mt4[];
  219.     extern struct selement mt5[];
  220.     extern struct selement mt51[];
  221.     extern struct selement mt52[];
  222.     extern struct selement mt6[];
  223.     extern char g_note_char[2];
  224.     extern char g_meas_char[2];
  225.     extern char g_blocks_char[2];
  226.     extern char g_blocke_char[2];
  227.     extern char g_smallb_char[2];
  228.     
  229. #endif
  230.