unsigned char syxfname[80], midfname[80];
unsigned int syxf, midf, tmpf;
unsigned long syxlen;
unsigned int syxfmt;
int mf_format;
#define MIDIEX 0
#define BANK 1
int (*mf_getc)() = NULLFUNC;
int (*mf_putc)() = NULLFUNC;
int (*mf_error)() = NULLFUNC;
unsigned long mf_toberead = 0L;
unsigned long bufread(unsigned int handle, unsigned long buflen);
long readvarinum();
long read32bit();
long to32bit();
int writevarinum(unsigned long num);
void write16bit(unsigned int val);
void write32bit(unsigned long val);
unsigned char far *buff = NULL;
unsigned int bufsegp;
unsigned long allocated;
unsigned char inbyte;
main(int argc, char **argv)
{
unsigned int max_para;
unsigned long fpos1, fpos2;
int bytecount;
max_para = allocmem(0xffff, &bufsegp); /* Allocate all but 1K memory
max_para -= 16; for SysEx buffer */
allocated = (unsigned long)max_para * 16L;
allocmem(max_para, &bufsegp);
buff = MK_FP(bufsegp, 0);
readheader();
if(mf_format == 1) /* If format = 1 read past 1st track */
readtrack();
readmt();
mf_toberead = read32bit();
fpos1 = tell(tmpf); /* Save position where to insert new
/* track length value */
lseek(tmpf, 4L, SEEK_CUR); /* Skip over track length for now */
bytecount = writevarinum(0L); /* Delta time */
fileputc(0xf0);
bytecount += writevarinum(syxlen-1L);
fpos2 = tell(tmpf);
mf_toberead += (syxlen + (unsigned long)bytecount);
lseek(tmpf, fpos1, SEEK_SET); /* Go back and fill in new tracklen */
write32bit(mf_toberead);
lseek(tmpf, fpos2, SEEK_SET);
if(syxfmt == BANK)
lseek(syxf, 4743L, SEEK_SET); /* Skip header if bank file */
lseek(syxf, 1L, SEEK_CUR); /* Skip first byte (0xf0) */
bufread(syxf, syxlen - 1L);
bufwrite(syxlen - 1L); /* Write SysEx to new file */
bufwrite(bufread(midf, 0xffffffff)); /* Append rest of MIDI file */
if ( return_val == EOF )
mf_error("error writing");
return(return_val);
}
unsigned long bufread(unsigned int handle, unsigned long len)
{
union REGS regs;
struct SREGS segregs;
unsigned int bytes_to_read;
unsigned long bytes_read;