foxygit / doom Log in
commit a38ba2a4aa68c6266aec60c90b6362fef4365b27
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Tue Sep 6 21:06:45 2005 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Tue Sep 6 21:06:45 2005 +0000

    Newer versions of mmus2mid.c,h from prboom

    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 76
---
 src/mmus2mid.c | 103 +++++++++++++++++++++++++++++++++------------------------
 src/mmus2mid.h |  71 +++++++++++++++------------------------
 2 files changed, 85 insertions(+), 89 deletions(-)

diff --git a/src/mmus2mid.c b/src/mmus2mid.c
index 6db59308..59dadcad 100644
--- a/src/mmus2mid.c
+++ b/src/mmus2mid.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*-
 //-----------------------------------------------------------------------------
 //
-// $Id: mmus2mid.c 75 2005-09-05 22:50:56Z fraggle $
+// $Id: mmus2mid.c 76 2005-09-06 21:06:45Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 //  Copyright (C) 1999 by
@@ -27,6 +27,9 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.2  2005/09/06 21:06:45  fraggle
+// Newer versions of mmus2mid.c,h from prboom
+//
 // Revision 1.1  2005/09/05 22:50:56  fraggle
 // Add mmus2mid code from prboom.  Use 'void *' for music handles.  Pass
 // length of data when registering music.
@@ -61,6 +64,9 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdlib.h>
+#ifdef MSDOS /* proff: I don't use allegro in windows */
+#include <allegro.h>
+#endif /* !MSDOS */
 #include "mmus2mid.h"

 //#define STANDALONE  /* uncomment this to make MMUS2MID.EXE */
@@ -118,27 +124,27 @@ static TrackInfo track[MIDI_TRACKS];
 // initial track size allocation
 #define TRACKBUFFERSIZE 1024

-// lookup table MUS -> MID controls
-static UBYTE MUS2MIDcontrol[15] =
+// lookup table MUS -> MID controls
+static UBYTE MUS2MIDcontrol[15] =
 {
   0,         // Program change - not a MIDI control change
-  0x00,      // Bank select
-  0x01,      // Modulation pot
-  0x07,      // Volume
-  0x0A,      // Pan pot
-  0x0B,      // Expression pot
-  0x5B,      // Reverb depth
-  0x5D,      // Chorus depth
-  0x40,      // Sustain pedal
-  0x43,      // Soft pedal
-  0x78,      // All sounds off
-  0x7B,      // All notes off
-  0x7E,      // Mono
-  0x7F,      // Poly
-  0x79       // Reset all controllers
+  0x00,      // Bank select
+  0x01,      // Modulation pot
+  0x07,      // Volume
+  0x0A,      // Pan pot
+  0x0B,      // Expression pot
+  0x5B,      // Reverb depth
+  0x5D,      // Chorus depth
+  0x40,      // Sustain pedal
+  0x43,      // Soft pedal
+  0x78,      // All sounds off
+  0x7B,      // All notes off
+  0x7E,      // Mono
+  0x7F,      // Poly
+  0x79       // Reset all controllers
 };

-// some strings of bytes used in the midi format
+// some strings of bytes used in the midi format

 static UBYTE midikey[]   =
 {0x00,0xff,0x59,0x02,0x00,0x00};        // C major
@@ -356,7 +362,7 @@ int mmus2mid(const UBYTE *mus, MIDI *mididata, UWORD division, int nocomp)
     track[i].velocity = 64;
     track[i].deltaT = 0;
     track[i].lastEvt = 0;
-    free(mididata->track[i].data);//jff 3/5/98 remove old allocations
+    //free(mididata->track[i].data);//jff 3/5/98 remove old allocations
     mididata->track[i].data=NULL;
     track[i].alloced = 0;
     mididata->track[i].len = 0;
@@ -373,20 +379,20 @@ int mmus2mid(const UBYTE *mus, MIDI *mididata, UWORD division, int nocomp)

   // allocate for midi tempo/key track, allow for end of track
   if (!(mididata->track[0].data =
-      realloc(mididata->track[0].data,sizeof(midikey)+sizeof(miditempo)+4)))
+      realloc(mididata->track[0].data,sizeof(midikey)+sizeof(miditempo)+4)))
     return MEMALLOC;

   // key C major
   memcpy(mididata->track[0].data,midikey,sizeof(midikey));
-  // tempo uS/qnote
+  // tempo uS/qnote
   memcpy(mididata->track[0].data+sizeof(midikey),miditempo,sizeof(miditempo));
-  mididata->track[0].len = sizeof(midikey)+sizeof(miditempo);
+  mididata->track[0].len = sizeof(midikey)+sizeof(miditempo);

   TrackCnt++;   // music tracks start at 1

   // process the MUS events in the MUS buffer

-  do
+  do
   {
     // get a mus event, decode its type and channel fields

@@ -401,7 +407,7 @@ int mmus2mid(const UBYTE *mus, MIDI *mididata, UWORD division, int nocomp)
     {
       // set MIDIchannel and MIDItrack

-      MIDIchannel = MUS2MIDchannel[MUSchannel] =
+      MIDIchannel = MUS2MIDchannel[MUSchannel] =
         (MUSchannel == 15 ? 9 : FirstChannelAvailable(MUS2MIDchannel));
       MIDItrack = MIDIchan2track[MIDIchannel] = (UBYTE)TrackCnt++;
     }
@@ -418,7 +424,7 @@ int mmus2mid(const UBYTE *mus, MIDI *mididata, UWORD division, int nocomp)
     switch(evt)
     {
       case RELEASE_NOTE:
-  	  // killough 10/7/98: Fix noise problems by not allowing compression
+      // killough 10/7/98: Fix noise problems by not allowing compression
       if (!(NewEvent=MidiEvent(mididata,0x90,MIDIchannel,MIDItrack,1)))
         return MEMALLOC;

@@ -468,9 +474,9 @@ int mmus2mid(const UBYTE *mus, MIDI *mididata, UWORD division, int nocomp)
               if (TWriteByte(mididata, MIDItrack, (UBYTE)(MUSh.channels+1)))
                 return MEMALLOC;
       }
-          else
-	    if (TWriteByte(mididata, MIDItrack, 0))
-	      return MEMALLOC;
+          else
+      if (TWriteByte(mididata, MIDItrack, 0))
+        return MEMALLOC;
           break;

       case CNTL_CHANGE:
@@ -509,11 +515,11 @@ int mmus2mid(const UBYTE *mus, MIDI *mididata, UWORD division, int nocomp)
     if (last(event))
     {
           ULONG DeltaTime = ReadTime(&musptr); // killough 10/7/98: make local
-	  for (i = 0;i < MIDI_TRACKS; i++) //jff 3/13/98 update all tracks
-	    track[i].deltaT += DeltaTime;  //whether allocated yet or not
+    for (i = 0;i < MIDI_TRACKS; i++) //jff 3/13/98 update all tracks
+      track[i].deltaT += DeltaTime;  //whether allocated yet or not
     }

-    }
+    }
   while ((evt != SCORE_END) && ((size_t)(musptr-mus) < muslen));

   if (evt!=SCORE_END)
@@ -524,11 +530,11 @@ int mmus2mid(const UBYTE *mus, MIDI *mididata, UWORD division, int nocomp)
   for (i = 0; i < MIDI_TRACKS; i++)
     if (mididata->track[i].len)
     {       // killough 10/7/98: simplify code
-    	if (TWriteByte(mididata, i, 0x00) || // midi end of track code
-	      TWriteByte(mididata, i, 0xFF) ||
-	      TWriteByte(mididata, i, 0x2F) ||
-	      TWriteByte(mididata, i, 0x00))
-	     return MEMALLOC;
+      if (TWriteByte(mididata, i, 0x00) || // midi end of track code
+        TWriteByte(mididata, i, 0xFF) ||
+        TWriteByte(mididata, i, 0x2F) ||
+        TWriteByte(mididata, i, 0x00))
+       return MEMALLOC;

       // jff 1/23/98 fix failure to set data NULL, len 0 for unused tracks
       // shorten allocation to proper length (important for Allegro)
@@ -545,6 +551,15 @@ int mmus2mid(const UBYTE *mus, MIDI *mididata, UWORD division, int nocomp)
   return 0;
 }

+void free_mididata(MIDI *mid)
+{
+  int i;
+
+  for (i = 0; i < MIDI_TRACKS; i++)
+    if (mid->track[i].data)
+      free(mid->track[i].data);
+}
+
 //
 // ReadLength()
 //
@@ -569,11 +584,11 @@ size_t ReadLength(UBYTE **mid)
 //
 // MidiToMIDI()
 //
-// Convert an in-memory copy of a MIDI format 0 or 1 file to
+// Convert an in-memory copy of a MIDI format 0 or 1 file to
 // an Allegro MIDI structure, that is valid or has been zeroed
 //
 // Passed a pointer to a memory buffer with MIDI format music in it and a
-// pointer to an Allegro MIDI structure.
+// pointer to an Allegro MIDI structure.
 //
 // Returns 0 if successful, BADMIDHDR if the buffer is not MIDI format
 //
@@ -606,10 +621,10 @@ int MidiToMIDI(UBYTE *mid,MIDI *mididata)
     while (memcmp(mid,trackhdr,4))    // simply skip non-track data
     {
       mid += 4;
-  	  {
-	      size_t t = ReadLength(&mid);            // seek past header
-	      mid += t;  // killough 10/7/98: prevent mid undefined behavior
-	    }
+      {
+        size_t t = ReadLength(&mid);            // seek past header
+        mid += t;  // killough 10/7/98: prevent mid undefined behavior
+      }
     }
     mid += 4;
     mididata->track[i].len = ReadLength(&mid);  // get length, move mid past it
@@ -643,7 +658,7 @@ static void TWriteLength(UBYTE **midiptr,ULONG length);
 //
 // Passed a pointer to an Allegro MIDI structure
 // Returns nothing
-//
+//
 static void FreeTracks(MIDI *mididata)
 {
   int i;
@@ -727,7 +742,7 @@ int MIDIToMidi(MIDI *mididata,UBYTE **mid,int *midlen)
       midiptr += sizeof(trackhdr);
       TWriteLength(&midiptr,mididata->track[i].len);  // track length
       // data
-      memcpy(midiptr,mididata->track[i].data,mididata->track[i].len);
+      memcpy(midiptr,mididata->track[i].data,mididata->track[i].len);
       midiptr += mididata->track[i].len;
     }
   }
diff --git a/src/mmus2mid.h b/src/mmus2mid.h
index c89c32f2..f57b25b4 100644
--- a/src/mmus2mid.h
+++ b/src/mmus2mid.h
@@ -1,9 +1,14 @@
 // Emacs style mode select   -*- C++ -*-
-//-----------------------------------------------------------------------------
+//--------------------------------------------------------------------------
 //
-// $Id: mmus2mid.h 75 2005-09-05 22:50:56Z fraggle $
+// $Id: mmus2mid.h 76 2005-09-06 21:06:45Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
+//  Copyright (C) 1999 by
+//  id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
+//  Copyright (C) 1999-2000 by
+//  Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
+//
 // Copyright(C) 2005 Simon Howard
 //
 // This program is free software; you can redistribute it and/or
@@ -22,38 +27,13 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.2  2005/09/06 21:06:45  fraggle
+// Newer versions of mmus2mid.c,h from prboom
+//
 // Revision 1.1  2005/09/05 22:50:56  fraggle
 // Add mmus2mid code from prboom.  Use 'void *' for music handles.  Pass
 // length of data when registering music.
 //
-/* Emacs style mode select   -*- C++ -*-
- *-----------------------------------------------------------------------------
- *
- *
- *  PrBoom a Doom port merged with LxDoom and LSDLDoom
- *  based on BOOM, a modified and improved DOOM engine
- *  Copyright (C) 1999 by
- *  id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
- *  Copyright (C) 1999-2000 by
- *  Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License
- *  as published by the Free Software Foundation; either version 2
- *  of the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- *  02111-1307, USA.
- *
- *-----------------------------------------------------------------------------
- */

 #if !defined( MMUS2MID_H )
 #define MMUS2MID_H
@@ -62,25 +42,25 @@

 typedef enum
 {
-  MUSDATACOR,    // MUS data corrupt
-  TOOMCHAN,      // Too many channels
-  MEMALLOC,      // Memory allocation error
-  MUSDATAMT,     // MUS file empty
-  BADMUSCTL,     // MUS event 5 or 7 found
-  BADSYSEVT,     // MUS system event not in 10-14 range
-  BADCTLCHG,     // MUS control change larger than 9
-  TRACKOVF,      // MIDI track exceeds allocation
-  BADMIDHDR,     // bad midi header detected
+  MUSDATACOR,    // MUS data corrupt
+  TOOMCHAN,      // Too many channels
+  MEMALLOC,      // Memory allocation error
+  MUSDATAMT,     // MUS file empty
+  BADMUSCTL,     // MUS event 5 or 7 found
+  BADSYSEVT,     // MUS system event not in 10-14 range
+  BADCTLCHG,     // MUS control change larger than 9
+  TRACKOVF,      // MIDI track exceeds allocation
+  BADMIDHDR,     // bad midi header detected
 } error_code_t;

-// some names for integers of various sizes, all unsigned
-typedef unsigned char UBYTE;  // a one-byte int
-typedef unsigned short UWORD; // a two-byte int
+// some names for integers of various sizes, all unsigned
+typedef unsigned char UBYTE;  // a one-byte int
+typedef unsigned short UWORD; // a two-byte int
 // proff: changed from unsigned int to unsigned long to avoid warning
-typedef unsigned long ULONG;   // a four-byte int (assumes int 4 bytes)
+typedef unsigned long ULONG;   // a four-byte int (assumes int 4 bytes)

 #ifndef MSDOS /* proff: This is from allegro.h */
-#define MIDI_TRACKS           32
+#define MIDI_TRACKS           32

 typedef struct MIDI                    /* a midi file */
 {
@@ -88,11 +68,12 @@ typedef struct MIDI                    /* a midi file */
    struct {
       unsigned char *data;             /* MIDI message stream */
       int len;                         /* length of the track data */
-   } track[MIDI_TRACKS];
+   } track[MIDI_TRACKS];
 } MIDI;
 #endif /* !MSDOS */

 extern int mmus2mid(const UBYTE *mus,MIDI *mid, UWORD division, int nocomp);
+extern void free_mididata(MIDI *mid);
 extern int MIDIToMidi(MIDI *mididata,UBYTE **mid,int *midlen);
 extern int MidiToMIDI(UBYTE *mid,MIDI *mididata);