home *** CD-ROM | disk | FTP | other *** search
/ Audio 4.94 - Over 11,000 Files / audio-11000.iso / amiga / midi / obrst103.lha / OberSuite-1.03 / SourceCode / decl.h < prev    next >
C/C++ Source or Header  |  1993-01-23  |  9KB  |  256 lines

  1. #ifndef _DECL_H
  2. #define _DECL_H    1
  3.  
  4. /**************************************************************************
  5. * decl.h:    Miscellaneous global declarations.
  6. *        A part of OberSuite for the Commodore Amiga.
  7. *
  8. * Author:    Daniel Barrett, barrett@cs.umass.edu.
  9. * Version:    1.0.
  10. * Copyright:    None!  This program is in the Public Domain.
  11. *        Please share it with others.
  12. ***************************************************************************/
  13.  
  14. #include <exec/types.h>
  15. #include <exec/ports.h>
  16. #include <exec/devices.h>
  17. #include <exec/memory.h>
  18. #include <exec/interrupts.h>
  19. #include <devices/serial.h>
  20. #include <libraries/dos.h>
  21. #include <libraries/dosextens.h>
  22. #include <stdio.h>
  23. #include <stdlib.h>            /* getenv */
  24. #include <string.h>
  25. #include <ctype.h>
  26. #include <fcntl.h>
  27. #include <stat.h>
  28. #include <functions.h>
  29. #include "bits.h"
  30. #include "midi.h"
  31. #include "oberheim.h"
  32. #include "patchinfo.h"
  33.  
  34. /***************************************************************************
  35. * Macros for patch numbers.
  36. ***************************************************************************/
  37.  
  38. #define    LETTER_SINGLE        'S'    /* Indicates a single patch. */
  39. #define    LETTER_MULTI        'M'    /* Indicates a multi patch. */
  40. #define    ALL_PATCHES_NUM        100    /* All patches should be sent. */
  41. #define    DEFAULT_PATCH_NUM    100    /* An impossible patch number value,
  42.                      * indicating that a default should
  43.                      * be used.
  44.                      */
  45.  
  46. #define    MODE_SINGLE        0x00    /* Byte indicating a single patch. */
  47. #define    MODE_MULTI        0x01    /* Byte indicating a multi patch. */
  48.  
  49. /***************************************************************************
  50. * Macros for signalling that a transfer has failed.
  51. ***************************************************************************/
  52.  
  53. #define    NUM_RETRIES        10    /* Max number of retransmissions. */
  54. #define    CTRL_C_NO_BYTES        (-1)    /* User pressed ^C.  */
  55.  
  56. /***************************************************************************
  57. * Highlighting for the output -- for making certain words more noticable.
  58. ***************************************************************************/
  59.  
  60. #define    HILITE_ON        "\x9b" "2m"
  61. #define    HILITE_OFF        "\x9b" "22m"
  62.  
  63. /***************************************************************************
  64. * Miscellaneous macros.
  65. ***************************************************************************/
  66.  
  67. #define EXISTS(filename)    !access(filename, 0)
  68. #define    EQUAL            !strcmp
  69.  
  70. /***************************************************************************
  71. * The name of the (optional) environment variable containing the name and
  72. * unit number of an alternate MIDI device.
  73. ***************************************************************************/
  74.  
  75. #define    ENVIRONMENT_VAR        "OBERHEIM_DEVICE"
  76.  
  77. /***************************************************************************
  78.  * Author information.
  79.  ***************************************************************************/
  80.  
  81. #define    AUTHOR            "Daniel J. Barrett"
  82.  
  83. /***************************************************************************
  84.  * Error message codes.
  85.  ***************************************************************************/
  86.  
  87. #define    ERROR_PATCHNUM        1
  88. #define    ERROR_PATCHTYPE        2
  89. #define    ERROR_NUMARGS        3
  90. #define    ERROR_FAILED        4
  91. #define    ERROR_FINDFILE        5
  92. #define    ERROR_CREATEFILE    6
  93. #define    ERROR_READFILE        7
  94. #define    ERROR_WRITEFILE        8
  95. #define    ERROR_FILESIZE        9
  96. #define    ERROR_FILEGARBLED    10
  97. #define    ERROR_CTRLC        11
  98. #define    ERROR_GETFAILED        12
  99. #define    ERROR_PUTFAILED_SAVE    13
  100. #define    ERROR_NOTSYSEX        14
  101. #define    ERROR_NOTOBERHEIM    15
  102. #define    ERROR_NOTXPMATRIX    16
  103. #define    ERROR_NOTPATCHDATA    17
  104. #define    ERROR_UNKNOWNVOICEDATA    18
  105. #define    ERROR_NOEOX        19
  106. #define    ERROR_DATATOOBIG    20
  107. #define    ERROR_DATATOOSMALL    21
  108. #define    ERROR_CREATEPORT    22
  109. #define    ERROR_IOEXTSER        23
  110. #define    ERROR_OPENDEVICE    24
  111. #define    ERROR_SETPARAMS        25
  112. #define    ERROR_OBDEVICE        26
  113. #define    ERROR_OBUNIT        27
  114. #define    ERROR_MALLOC        28
  115. #define    ERROR_TWOPRINTS        29
  116. #define    ERROR_NODEST        30
  117. #define    ERROR_PUTFAILED_SEND    31
  118. #define    ERROR_REALNAMESFILEONLY    32
  119. #define    ERROR_OVERWRITEFILEONLY    33
  120.     
  121. #define    NO_MESSAGE        ((char *)NULL)
  122.  
  123. /***************************************************************************
  124.  * Global variables.
  125.  ***************************************************************************/
  126.  
  127. char programName[BUFSIZ];    /* The name of the program (argv[0]). */
  128. extern int Enable_Abort;    /* To disable Aztec ^C handling. */
  129.  
  130. /***************************************************************************
  131. * Printing style for the output.
  132. * DEADQUIET must be less than SILENT, and SILENT must be less than
  133. *  every other print style.
  134. ***************************************************************************/
  135.  
  136. int thePrintStyle;
  137. #define    DEADQUIET    0    /* No output; not even error messages. */
  138. #define    SILENT        1    /* No output, except for error messages. */
  139. #define    SHORT        2    /* Brief output. */
  140. #define    PRETTY        3    /* Nice-looking output. */
  141. #define    VERBOSE        4    /* Long output. */
  142.  
  143. #define    OUTPUT_ALLOWED        (thePrintStyle > SILENT)
  144. #define    ERR_OUTPUT_ALLOWED    (thePrintStyle > DEADQUIET)
  145.  
  146. /***************************************************************************
  147. * Command-line options.
  148. ***************************************************************************/
  149.  
  150. #define    OPT_DEADQUIET    'Q'    /* No output; not even error messages. */
  151. #define    OPT_SILENT    'q'    /* No output; error messages still print. */
  152. #define    OPT_SHORT    's'    /* Brief output. */
  153. #define    OPT_PRETTY    'm'    /* Nice-looking output. */
  154. #define    OPT_VERBOSE    'l'    /* Long output. */
  155.  
  156. #define    OPT_OVERWRITE    'a'    /* Silently overwrite existing files. */
  157.  
  158. #define OPT_SYNTH    'o'    /* Send data to the Oberheim. */
  159. #define    OPT_FILE    'f'    /* Send data to a file. */
  160.  
  161. #define    OPT_USEREALNAMES 'r'    /* Use patch names as output file names. */
  162.  
  163.  
  164. /* For getopt(). */
  165. extern char *optarg;
  166. extern int optind;
  167.  
  168. /***************************************************************************
  169. * Where is the MIDI data going?
  170. ***************************************************************************/
  171.  
  172. #define    DEST_NONE    0    /* Data is going nowhere. */
  173. #define    DEST_SYNTH    1    /* Data is being sent to the synth. */
  174. #define    DEST_FILE    2    /* Data is going to a file. */
  175.  
  176. /***************************************************************************
  177.  * Prototypes.
  178.  ***************************************************************************/
  179.  
  180. char    *Version(void);
  181. void    Usage(void);
  182. void    UsageMsg(void);
  183. void    ShortUsageMsg(void);
  184. void    DetailedUsage(void);
  185. void    BegForUsage(void);
  186. void    Author(void);
  187. void    ErrorMsg(int code);
  188.  
  189. BOOL    AllDigits(char *str);
  190. int    Between(int value, int low, int high);
  191. BOOL    SameSoFar(char *start, char *wholeThing);
  192. char    *LeadingZero(int num);
  193. void    PrintSynthType(int patchType, int multiData, FILE *fp);
  194. void    PrintPatchType(int patchType, FILE *fp);
  195.  
  196. BOOL    SerialSetup(void);
  197. void    SerialShutdown(void);
  198. void    ResetSerialPort(void);
  199. void    PrepareToReadMidi(UBYTE buf[], int len);
  200. void    PrepareToWriteMidi(UBYTE buf[], int len);
  201. long    AnyMidiData(void);
  202. long    DoTheIO(void);
  203.  
  204. int    GetOnePatch(UBYTE num, int mode, int fd);
  205. int    GetAllPatches(int mode, int fd);
  206. void    RequestOnePatch(UBYTE patchNum, int mode);
  207. BOOL    DoTheRightThing(int bytesRead, int expectedSize, int numTries,
  208.             int fd, UBYTE buf[]);
  209.  
  210. BOOL    DontOverwriteExistingFile(char *filename);
  211. int    OpenReadFile(char *filename);
  212. int    OpenWriteFile(char *filename);
  213. long    FileSize(char *filename);
  214.  
  215. int    AddToRange(BITS bitfield[], int first, int second);
  216. int    MakeRange(char *str, int *first, int *second);
  217.  
  218.  
  219. BOOL BreakUp(char *patchString, PATCHINFO *pi);
  220. BOOL FigureOutMode(PATCHINFO *pi, char modeLetter);
  221. BOOL FigureOutPatchNumber(PATCHINFO *pi, char *numString);
  222.  
  223. void EnableRequestors(void);
  224. void DisableRequestors(void);
  225. char *TheEnvValue(BPTR fileHandle);
  226. char *GetEnv(char *variableName);
  227. BOOL CtrlcCheck(void);
  228. char *BaseName(char *filename);
  229.  
  230. BOOL    HandleOptions(int argc, char *argv[]);
  231.  
  232.  
  233. void InitPatchInfo(PATCHINFO *pi);
  234. void PrintPatchInfo(PATCHINFO *pi, long offset);
  235. void PrintPatchName(UBYTE *patch, long startHere);
  236. void PrintSinglesInMulti(UBYTE *patch, long howMany, long startHere);
  237. void FreePatchInfo(PATCHINFO *pi);
  238. BOOL TransmitPatchInfo(PATCHINFO *pi, char *filename);
  239. BOOL GetPatchFromFile(PATCHINFO *pi, char *filename);
  240. BOOL GetPatchFromMidi(PATCHINFO *pi);
  241. long GetFromMidi(PATCHINFO *pi, long offset);
  242. BOOL PutPatchToFile(PATCHINFO *pi, char *filename);
  243. BOOL PutPatchToMidi(PATCHINFO *pi);
  244. BOOL RepeatedlySend(PATCHINFO *pi);
  245. void PutToMidi(PATCHINFO *pi, long offset);
  246. void AdjustPatchNumber(PATCHINFO *pi);
  247. BOOL VerifyPatch(PATCHINFO *pi, long offset);
  248. BOOL VerifyAllPatches(PATCHINFO *pi);
  249. BOOL FigureOutInstrument(PATCHINFO *pi, UBYTE instrument);
  250. BOOL FigureThingsOutFromHeader(PATCHINFO *pi);
  251. void RequestTheRightPatch(PATCHINFO *pi, int relativeNum);
  252. char *fgets_and_flush(char *buf, int length, FILE *fp);
  253.  
  254.  
  255. #endif /* _DECL_H */
  256.