home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume37 / tclm / part04 < prev    next >
Encoding:
Text File  |  1993-05-15  |  60.7 KB  |  2,327 lines

  1. Newsgroups: comp.sources.misc
  2. From: durian@advtech.uswest.com (Mike Durian)
  3. Subject: v37i046:  tclm - TCL extensions for MIDI file manipulation, Part04/05
  4. Message-ID: <1993May10.215416.4532@sparky.imd.sterling.com>
  5. X-Md4-Signature: 7e0fe133c839fcae8a4e9e0d41e2664a
  6. Date: Mon, 10 May 1993 21:54:16 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: durian@advtech.uswest.com (Mike Durian)
  10. Posting-number: Volume 37, Issue 46
  11. Archive-name: tclm/part04
  12. Environment: BSD/386, Esix SV4, SunOS, TCL 6.x
  13.  
  14. #! /bin/sh
  15. # This is a shell archive.  Remove anything before this line, then feed it
  16. # into a shell via "sh file" or similar.  To overwrite existing files,
  17. # type "sh file -c".
  18. # Contents:  tclm-1.0/Blurb tclm-1.0/INSTALL tclm-1.0/Makefile
  19. #   tclm-1.0/README tclm-1.0/doc/Makefile tclm-1.0/doc/README
  20. #   tclm-1.0/doc/infom.1 tclm-1.0/doc/midiconfig.3
  21. #   tclm-1.0/doc/midifixtovar.3 tclm-1.0/doc/midimake.3
  22. #   tclm-1.0/doc/midimerge.3 tclm-1.0/doc/midiplay.3
  23. #   tclm-1.0/doc/midiplayable.3 tclm-1.0/doc/midiread.3
  24. #   tclm-1.0/doc/midirecord.3 tclm-1.0/doc/midirewind.3
  25. #   tclm-1.0/doc/midistop.3 tclm-1.0/doc/miditiming.3
  26. #   tclm-1.0/doc/midivartofix.3 tclm-1.0/doc/midiwrite.3
  27. #   tclm-1.0/doc/mplay.1 tclm-1.0/doc/mrecord.1 tclm-1.0/doc/tclm.1
  28. #   tclm-1.0/m1to0 tclm-1.0/mlib/DEVICES tclm-1.0/mlib/mdevice.h
  29. #   tclm-1.0/mplay tclm-1.0/mseq.BNF tclm-1.0/tclmPlay.h
  30. # Wrapped by kent@sparky on Mon May 10 09:43:33 1993
  31. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  32. echo If this archive is complete, you will see the following message:
  33. echo '          "shar: End of archive 4 (of 5)."'
  34. if test -f 'tclm-1.0/Blurb' -a "${1}" != "-c" ; then 
  35.   echo shar: Will not clobber existing file \"'tclm-1.0/Blurb'\"
  36. else
  37.   echo shar: Extracting \"'tclm-1.0/Blurb'\" \(733 characters\)
  38.   sed "s/^X//" >'tclm-1.0/Blurb' <<'END_OF_FILE'
  39. X  Tclm is an extended version of John Ousterhout's tcl (Tool Command
  40. XLanguage) package.  The extensions are designed to allow easy
  41. Xmanipulation of Standard MIDI Files.  The combination of the easy
  42. Xto use tcl interpreted language and the MIDI extensions makes it
  43. Xvery simple to write you own MIDI applications.
  44. X  If you've played with tclm-0.1, you'll find 1.0 a lot different.
  45. XI think it is much easier to use and a lot more powerful, but then
  46. Xmy opinion might be a bit biased.
  47. X  Included with tclm are a few scripts that use tclm.  These include
  48. Xscripts to play and record record MIDI files as well as a simple
  49. Xtext based sequencer.  There is also a pair of scripts that convert
  50. Xa MIDI file into human readable form and back again.
  51. END_OF_FILE
  52.   if test 733 -ne `wc -c <'tclm-1.0/Blurb'`; then
  53.     echo shar: \"'tclm-1.0/Blurb'\" unpacked with wrong size!
  54.   fi
  55.   # end of 'tclm-1.0/Blurb'
  56. fi
  57. if test -f 'tclm-1.0/INSTALL' -a "${1}" != "-c" ; then 
  58.   echo shar: Will not clobber existing file \"'tclm-1.0/INSTALL'\"
  59. else
  60.   echo shar: Extracting \"'tclm-1.0/INSTALL'\" \(2432 characters\)
  61.   sed "s/^X//" >'tclm-1.0/INSTALL' <<'END_OF_FILE'
  62. X  Installation for tclm-1.0     May 5, 1993
  63. X
  64. X  1) Get tcl.  As of today, the latest version of tcl
  65. Xis tcl6.7.  It is available at sprite.berkeley.edu.
  66. XIf you use X11 you might want to pick up tk3.2 instead
  67. Xas it contains tcl6.7 and some cool X stuff (plus you'll
  68. Xbe able to run xdrum if you want).
  69. X     If you are not already familiar with tcl you might
  70. Xalso want to pick up the first three parts of John
  71. XOusterhout's book on tcl and tk.  They are easy to read
  72. Xand do a very good job of explaining how to use them.
  73. X
  74. X  2) Build and install the aforementioned packages.  See
  75. Xtheir documentation on how to do this.
  76. X
  77. X  3) Edit the Makefile.  Check out the stuff near the top
  78. Xand change the paths as necessary.  If you change the install
  79. Xdirectory, you'll also have to change the first line of
  80. Xthe tclm scripts to point to the correct location of tclm.
  81. X     Most of the important variables get passed down to
  82. Xthe mlib directory for the Makefile there, but if you
  83. Xsuspect problems, edit that make file too.
  84. X     One very important thing to check is the DEFS line
  85. Xand the DRIVER line.  If MIDIPLAY is not defined, you will
  86. Xnot be able to use the midiplay, midirecord and midistop
  87. Xcommands.  This in turn means you won't be able to run
  88. Xmplay or mrecord.
  89. X     Unfortunately, if you define MIDIPLAY, you must also
  90. Xsupply an interface between tclm and the MIDI device.
  91. XCurrently I only supply the interface for the latest BSD/386
  92. XMIDI driver, but I hear one is in the works for Linux.
  93. X     You can of course, write your own.  See the man page
  94. Xtclm_interface(3) on how to do this, and check out mpu_bsd386.c
  95. Xfor an example of how it was done in one case.  If you do
  96. Xwrite an interface, why not send me a copy and I'll incorporate
  97. Xit into future releases of tclm.
  98. X     The above being said, you shouldn't give up hope of using
  99. Xtclm if you don't have an interface.  There are still useful
  100. Xthings you can do.  The mseq, minfo, infom and m1to0 scripts
  101. Xare examples.
  102. X
  103. X  4) make
  104. X
  105. X  5) make install
  106. X
  107. X  6) If you want to install you man pages, either
  108. Xmake install-man-cooked (the default) or make install-man-raw.
  109. Xinstall-man-cooked formats the man pages and copies the
  110. Xformatted document to the man dir.  install-man-raw installs
  111. Xthe unformatted document.
  112. X     You probably want to use the cooked option, as the man pages
  113. Xuse the mdoc macros and not the older man macros.  I don't think
  114. Xman(1) knows to process the files with mdoc.
  115. X
  116. X  7) You're done.
  117. END_OF_FILE
  118.   if test 2432 -ne `wc -c <'tclm-1.0/INSTALL'`; then
  119.     echo shar: \"'tclm-1.0/INSTALL'\" unpacked with wrong size!
  120.   fi
  121.   # end of 'tclm-1.0/INSTALL'
  122. fi
  123. if test -f 'tclm-1.0/Makefile' -a "${1}" != "-c" ; then 
  124.   echo shar: Will not clobber existing file \"'tclm-1.0/Makefile'\"
  125. else
  126.   echo shar: Extracting \"'tclm-1.0/Makefile'\" \(2967 characters\)
  127.   sed "s/^X//" >'tclm-1.0/Makefile' <<'END_OF_FILE'
  128. X#
  129. X# set TCLSRCDIR to the location of the tcl source
  130. X#
  131. XTCLSRCDIR = /usr/local/src/tk3.2/tcl
  132. X
  133. X#
  134. X# add -DMIDIPLAY to defines if you wish to compile in the ability to
  135. X# play standard MIDI files.  This will only work on systems
  136. X# equipped with a MIDI interface and systems with an interface
  137. X# between tclm and the MIDI device.  See the DRIVER define
  138. X# for a list of currently available interfaces.
  139. X#
  140. X# add -DUNION_WAIT if your wait3(2) system call needs a
  141. X# union wait and not an int.
  142. X#
  143. X# DEFS = -DUNION_WAIT
  144. XDEFS = -DMIDIPLAY
  145. X
  146. X#
  147. X# add driver type.  This only matters if PLAYMIDI is defined
  148. X# current choices are:
  149. X#   mpu_bsd386.o        MPU-401 compatibles on BSD/386
  150. X#
  151. X# DRIVER =
  152. XDRIVER = mpu_bsd386.o
  153. X
  154. X#
  155. X# set RANLIB to ranlib if your system has it - otherwise set it to
  156. X# true
  157. X#
  158. X# RANLIB = true
  159. XRANLIB = ranlib
  160. X
  161. X#
  162. X# set INSTALL to be your install program
  163. X#
  164. X# INSTALL = cp
  165. XINSTALL = install
  166. X
  167. X#
  168. X# set INSTALLEXECFLAG to be flags needed when installing
  169. X# executables
  170. X#
  171. XINSTALLEXECFLAG = -c -m 755
  172. X
  173. X#
  174. X# set INSTALLTEXTFLAG to be flags needed when installing
  175. X# text files
  176. X#
  177. XINSTALLTEXTFLAG = -c -m 644
  178. X
  179. X#
  180. X# set BINDIR to the directory where the executables should go
  181. X#
  182. XBINDIR = /usr/local/bin
  183. X
  184. X#
  185. X# set LIBDIR to the directory where libtclm.a and libmutil.a should go
  186. X#
  187. XLIBDIR = /usr/local/lib
  188. X
  189. X#
  190. X# set INCDIR to the directory where the .h files should go
  191. X#
  192. XINCDIR = /usr/local/include
  193. X
  194. X#
  195. X# tclm library stuff
  196. X#
  197. XTCLMLIB = libtclm.a
  198. XTCLMLIBOBJS = tclmCmd.o tclmPlay.o
  199. X
  200. X#
  201. X# stuff for a tclm executable
  202. X#
  203. XTCLMSRC = main.c
  204. XTCLMOBJ = main.o
  205. XTCLMEXEC = tclm
  206. X
  207. X#
  208. X# some sample scripts
  209. X#
  210. XTCLMSCRIPTS = mplay minfo mseq m1to0 infom mrecord
  211. X
  212. X#
  213. X# where the MIDI library routines are located
  214. X#
  215. XMIDILIBDIR = ./mlib
  216. XMIDILIB = $(MIDILIBDIR)/libmutil.a
  217. X
  218. X#
  219. X# flags and libraries
  220. X# using the -lm flag in case someone has tclx which wants pow(3)
  221. X#
  222. XLIBS = -ltcl -ltclm -lmutil -lm
  223. XLDFLAGS = -L. -L$(MIDILIBDIR) -L$(LIBDIR) $(LIBS)
  224. XCFLAGS = $(DEFS) -O -I$(TCLSRCDIR) -I$(MIDILIBDIR)
  225. XCC = cc
  226. X
  227. X
  228. X$(TCLMEXEC): $(MIDILIB) $(TCLMLIB) $(TCLMOBJ)
  229. X    $(CC) -o $(TCLMEXEC) $(TCLMOBJ) $(LDFLAGS)
  230. X
  231. X$(TCLMLIB): $(TCLMLIBOBJS)
  232. X    rm -f $(TCLMLIB)
  233. X    ar cr $(TCLMLIB) $(TCLMLIBOBJS)
  234. X    $(RANLIB) $(TCLMLIB)
  235. X
  236. X$(MIDILIB): FORCE
  237. X    cd $(MIDILIBDIR); \
  238. X    $(MAKE) DEFS=$(DEFS) RANLIB=$(RANLIB) DRIVER=$(DRIVER)
  239. X
  240. Xinstall: $(TCLMEXEC) $(TCLMSCRIPTS)
  241. X    $(INSTALL) $(INSTALLEXECFLAG) $(TCLMEXEC) $(TCLMSCRIPTS) $(BINDIR)
  242. X    $(INSTALL) $(INSTALLTEXTFLAG) $(TCLMLIB) $(LIBDIR)
  243. X    $(RANLIB) $(LIBDIR)/$(TCLMLIB)
  244. X    $(INSTALL) $(INSTALLTEXTFLAG) tclm.h tclmPlay.h $(INCDIR)
  245. X    cd $(MIDILIBDIR); \
  246. X    $(MAKE) install \
  247. X        LIBDIR="$(LIBDIR)" \
  248. X        RANLIB="$(RANLIB)" \
  249. X        INCDIR="$(INCDIR)" \
  250. X        INSTALL="$(INSTALL)" \
  251. X        INSTALLEXECFLAG="$(INSTALLEXECFLAG)" \
  252. X        INSTALLTEXTFLAG="$(INSTALLTEXTFLAG)"
  253. X
  254. Xinstall-man-cooked:
  255. X    cd doc; $(MAKE) install-man-cooked
  256. X
  257. Xinstall-man-raw:
  258. X    cd doc; $(MAKE) install-man-raw
  259. X
  260. Xclean:
  261. X    rm -f $(TCLMEXEC) $(TCLMLIB) $(TCLMLIBOBJS) $(TCLMOBJ)
  262. X    cd $(MIDILIBDIR); $(MAKE) clean
  263. X    cd doc; $(MAKE) clean
  264. X
  265. XFORCE:
  266. END_OF_FILE
  267.   if test 2967 -ne `wc -c <'tclm-1.0/Makefile'`; then
  268.     echo shar: \"'tclm-1.0/Makefile'\" unpacked with wrong size!
  269.   fi
  270.   # end of 'tclm-1.0/Makefile'
  271. fi
  272. if test -f 'tclm-1.0/README' -a "${1}" != "-c" ; then 
  273.   echo shar: Will not clobber existing file \"'tclm-1.0/README'\"
  274. else
  275.   echo shar: Extracting \"'tclm-1.0/README'\" \(2005 characters\)
  276.   sed "s/^X//" >'tclm-1.0/README' <<'END_OF_FILE'
  277. X  tclm-1.0     May 5, 1993
  278. X
  279. X  If you are looking in this file only to find out how
  280. Xto install tclm, take a look at the INSTALL file.
  281. X  Tclm is an extension of John Ousterhout's tcl (Tool Command
  282. XLanguage) package.  The extension are designed to allow
  283. Xeasy manipulation of Standard MIDI Files.  The combination
  284. Xof the easy to use tcl interpreted language and the MIDI
  285. Xextensions makes it very simple to write you own MIDI
  286. Xapplications.
  287. X  If you've played with tclm-0.1, you'll find 1.0 a lot
  288. Xdifferent.  I think it is much easier to use and a lot
  289. Xmore powerful, but then my opinion might be a bit
  290. Xbiased.
  291. X  Included with tclm are some scripts that use tclm.
  292. XSome script that don't depend on having a MIDI device include
  293. Xminfo and infom.  The first, minfo, prints a MIDI file
  294. Xin human readable form.  The second converts the output
  295. Xof minfo to a MIDI file.  This allows you to use standard
  296. Xtools like awk, sed and vi to modify a MIDI file.
  297. X  There is also a simple scripting language implemented
  298. Xin tclm that allows you to sequence separate MIDI
  299. Xfiles into one file.  It has support for merging files
  300. Xin parallel and repeating blocks.  It's not very sophisticated,
  301. Xbut it works and might be a good starting place for more
  302. Xelaborate text based sequencers (hint, hint).
  303. X  There are also a few scripts that take advantage of your
  304. XMIDI device if it has been integrated into tclm.  mplay
  305. Xplays a MIDI file and mrecord records to a MIDI file.
  306. XSee the INSTALL file and the tclm_interface man page
  307. Xfor more information on integrating your MIDI device
  308. Xinto tclm.
  309. X  Of course what I really hoping is that people will use
  310. Xtclm to write their own scripts and make those scripts
  311. Xavailable to the rest of us.  If you write one, send it
  312. Xto me and I'll integrate it into a future release of
  313. Xtclm if it makes sense.
  314. X  Let me know of any problems, bug, fixes or general
  315. Xcomments.
  316. X
  317. X  Special thanks go to Michael Caro (acps7221@ryevm.ryerson.ca)
  318. Xfor invaluable feedback and suggestions.
  319. X
  320. Xmike durian
  321. Xdurian@advtech.uswest.com
  322. END_OF_FILE
  323.   if test 2005 -ne `wc -c <'tclm-1.0/README'`; then
  324.     echo shar: \"'tclm-1.0/README'\" unpacked with wrong size!
  325.   fi
  326.   # end of 'tclm-1.0/README'
  327. fi
  328. if test -f 'tclm-1.0/doc/Makefile' -a "${1}" != "-c" ; then 
  329.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/Makefile'\"
  330. else
  331.   echo shar: Extracting \"'tclm-1.0/doc/Makefile'\" \(1607 characters\)
  332.   sed "s/^X//" >'tclm-1.0/doc/Makefile' <<'END_OF_FILE'
  333. X#
  334. X# NROFF is the command to format the man pages
  335. X#
  336. XNROFF = groff -mdoc -Tascii
  337. X
  338. X#
  339. X# MANDIR is the directory when the man pages go
  340. X#
  341. XMANDIR = /usr/local/man
  342. X
  343. X#
  344. X# MANSUB is the subdirectory for man pages
  345. X#
  346. X# MANSUB = man
  347. XMANSUB = cat
  348. X
  349. X#
  350. X# MANEXT1 is the extension for man section 1 pages
  351. X#
  352. XMANEXT1 = 1
  353. X
  354. X#
  355. X# MANEXT3 is the extension for man section 3 pages
  356. X#
  357. XMANEXT3 = 3
  358. X
  359. X#
  360. X# MANOWN is the owner of the man pages
  361. X#
  362. XMANOWN = bin
  363. X
  364. X#
  365. X# MANGRP is the group of the man pages
  366. X#
  367. XMANGRP = bin
  368. X
  369. X#
  370. X# INSTALL is the program to install the man pagess
  371. X#
  372. XINSTALL = install -c -o $(MANOWN) -g $(MANGRP) -m 444
  373. X
  374. XMAN1 = infom.1 m1to0.1 minfo.1 mplay.1 mrecord.1 mseq.1 tclm.1
  375. XMAN3 = midiconfig.3 midifixtovar.3 midifree.3 midiget.3 midimake.3 \
  376. X       midimerge.3 midiplay.3 midiplayable.3 midiput.3 midiread.3 \
  377. X       midirecord.3 midirewind.3 midistop.3 miditiming.3 \
  378. X       midivartofix.3 midiwrite.3 tclmversion.3 tclm_interface.3
  379. X
  380. XMAN10 = infom.0 m1to0.0 minfo.0 mplay.0 mrecord.0 mseq.0 tclm.0
  381. XMAN30 = midiconfig.0 midifixtovar.0 midifree.0 midiget.0 midimake.0 \
  382. X       midimerge.0 midiplay.0 midiplayable.0 midiput.0 midiread.0 \
  383. X       midirecord.0 midirewind.0 midistop.0 miditiming.0 \
  384. X       midivartofix.0 midiwrite.0 tclmversion.0 tclm_interface.0
  385. X
  386. X.SUFFIXES: .0 .1 .3
  387. X
  388. Xinstall-man-cooked: $(MAN10) $(MAN30)
  389. X    $(INSTALL) $(MAN10) $(MANDIR)/$(MANSUB)$(MANEXT1)
  390. X    $(INSTALL) $(MAN30) $(MANDIR)/$(MANSUB)$(MANEXT3)
  391. X
  392. Xinstall-man-raw:
  393. X    $(INSTALL) $(MAN1) $(MANDIR)/$(MANSUB)$(MANEXT1)
  394. X    $(INSTALL) $(MAN3) $(MANDIR)/$(MANSUB)$(MANEXT3)
  395. X
  396. Xclean:
  397. X    rm -f $(MAN10) $(MAN30)
  398. X
  399. X.1.0:
  400. X    $(NROFF) $< > $@
  401. X
  402. X.3.0:
  403. X    $(NROFF) $< > $@
  404. END_OF_FILE
  405.   if test 1607 -ne `wc -c <'tclm-1.0/doc/Makefile'`; then
  406.     echo shar: \"'tclm-1.0/doc/Makefile'\" unpacked with wrong size!
  407.   fi
  408.   # end of 'tclm-1.0/doc/Makefile'
  409. fi
  410. if test -f 'tclm-1.0/doc/README' -a "${1}" != "-c" ; then 
  411.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/README'\"
  412. else
  413.   echo shar: Extracting \"'tclm-1.0/doc/README'\" \(719 characters\)
  414.   sed "s/^X//" >'tclm-1.0/doc/README' <<'END_OF_FILE'
  415. X  These man pages want to use the mdoc macro package.  This is the
  416. Xnew Berkeley man page formatter.  I'm not sure if most systems
  417. Xhave it these days, but it is included with groff.
  418. X  Just process with *roff -mdoc.
  419. X  You have two choices when installing, install-man-cooked (the
  420. Xdefault) and install-man-raw.  install-man-cooked nroffs the
  421. Xman pages and then copies the formated files to their home.
  422. XThis is how BSD does it these days.  install-man-raw option copies
  423. Xcopies the unformated files to their home directly.  This is
  424. Xmore standard, but might cause some problems as I don't believe
  425. Xman(1) knows to process the files with the mdoc macro package.
  426. X  In both cases, you should edit the Makefile and fix the paths.
  427. END_OF_FILE
  428.   if test 719 -ne `wc -c <'tclm-1.0/doc/README'`; then
  429.     echo shar: \"'tclm-1.0/doc/README'\" unpacked with wrong size!
  430.   fi
  431.   # end of 'tclm-1.0/doc/README'
  432. fi
  433. if test -f 'tclm-1.0/doc/infom.1' -a "${1}" != "-c" ; then 
  434.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/infom.1'\"
  435. else
  436.   echo shar: Extracting \"'tclm-1.0/doc/infom.1'\" \(785 characters\)
  437.   sed "s/^X//" >'tclm-1.0/doc/infom.1' <<'END_OF_FILE'
  438. X.Dt INFOM 1
  439. X.Os TCLM
  440. X.Dd May 4, 1993
  441. X.Sh NAME
  442. X.Nm infom
  443. X.Nd "a tclm script to convert minfo style output to a MIDI file"
  444. X.Sh SYNOPSIS
  445. X.Nm
  446. X.Op info_file Op midi_file
  447. X.Sh DESCRIPTION
  448. X.Nm
  449. Xis a
  450. X.Xr tclm 1
  451. Xscript that converts
  452. X.Xr minfo 1
  453. Xstyle output to a Standard
  454. X.Tn MIDI
  455. XFile.
  456. XThis allows one to use
  457. X.Xr minfo 1
  458. Xto dump a
  459. X.Tn MIDI
  460. Xfile in a form
  461. Xthat can be edited using standard
  462. Xutilities like
  463. X.Xr vi 1 ,
  464. X.Xr sed 1
  465. Xor
  466. X.Xr awk 1 .
  467. X.Nm
  468. Xcan then be used to re-create
  469. Xa
  470. X.Tn MIDI
  471. Xfile from the modified
  472. X.Xr minfo 1
  473. Xoutput.
  474. X.Pp
  475. XIf 
  476. X.Ar midi_file
  477. Xis not specified on the command
  478. Xline,
  479. X.Em stdout
  480. Xis used.
  481. XIf
  482. X.Ar info_file
  483. Xis not specified as well,
  484. X.Em stdin
  485. Xis used.
  486. X.Sh SEE ALSO
  487. X.Xr tclm 1 ,
  488. X.Xr minfo 1 ,
  489. X.Xr vi 1 ,
  490. X.Xr sed 1 ,
  491. X.Xr awk 1
  492. X.Sh AUTHORS
  493. XMike Durian - durian@advtech.uswest.com
  494. END_OF_FILE
  495.   if test 785 -ne `wc -c <'tclm-1.0/doc/infom.1'`; then
  496.     echo shar: \"'tclm-1.0/doc/infom.1'\" unpacked with wrong size!
  497.   fi
  498.   # end of 'tclm-1.0/doc/infom.1'
  499. fi
  500. if test -f 'tclm-1.0/doc/midiconfig.3' -a "${1}" != "-c" ; then 
  501.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midiconfig.3'\"
  502. else
  503.   echo shar: Extracting \"'tclm-1.0/doc/midiconfig.3'\" \(1680 characters\)
  504.   sed "s/^X//" >'tclm-1.0/doc/midiconfig.3' <<'END_OF_FILE'
  505. X.Dt MIDICONFIG 3
  506. X.Os TCLM
  507. X.Dd Jan 10, 1993
  508. X.Sh NAME
  509. X.Nm midiconfig
  510. X.Nd "tclm command to get or modify the configuration values of a Standard MIDI File"
  511. X.Sh SYNOPSIS
  512. X.Nm
  513. X.Ar mfileId
  514. X.Ar {format | division | tracks}
  515. X.Op value
  516. X.Sh DESCRIPTION
  517. X.Nm
  518. Xis a
  519. X.Xr tclm 1
  520. Xcommand that
  521. Xgets or modifies the configurations
  522. Xvalues of
  523. Xa Standard
  524. X.Tn MIDI
  525. XFile.
  526. X.Pp
  527. X.Nm
  528. Xtakes three or four arguments.
  529. XThe first is a tclm Standard
  530. X.Tn MIDI
  531. XFile
  532. Xdescriptor as
  533. Xreturned by
  534. X.Xr midiread 3 ,
  535. Xor
  536. X.Xr midimake 3 .
  537. X.Pp
  538. XThe second argument specifies which
  539. Xconfiguration value to manipulate.
  540. XIt should be either
  541. X.Ar format ,
  542. X.Ar division
  543. Xor
  544. X.Ar tracks .
  545. XThe options work as follows:
  546. X.Bl -tag -width "division" -offset indent
  547. X.It Nm format
  548. XThis option
  549. Xallows you to get or change the
  550. Xformat value of the Standard
  551. X.Tn MIDI
  552. XFile,
  553. Xand should be either 0, 1 or 2.
  554. XYou cannot use format 0 if the file contains
  555. Xmore than one track.
  556. X.It Nm division
  557. XThis option allows you to get or set
  558. Xthe timing for the file in units
  559. Xper beat.
  560. X.It Nm tracks
  561. XThis option
  562. Xallows you to get or change
  563. Xthe number of tracks in the file.
  564. XThis is how you create tracks in an empty
  565. Xfile generated by
  566. X.Xr midimake 3 .
  567. XYou cannot specify more than one track
  568. Xif the
  569. X.Tn MIDI
  570. Xfile is format 0.
  571. X.El
  572. X.Pp
  573. XThe final optional argument specifies
  574. Xthat the configuration value should be
  575. Xchanged and contains the new value.
  576. XWithout this argument,
  577. X.Nm
  578. Xreturns the current setting for the
  579. Xspecified value.
  580. X.Sh RETURN VALUES
  581. X.Nm
  582. Xreturns
  583. Xthe current setting of the specified
  584. Xvalue if the forth argument is missing,
  585. Xotherwise it returns nothing.
  586. X.Sh SEE ALSO
  587. X.Xr tclm 1 ,
  588. X.Xr midiread 3 ,
  589. X.Xr midimake 3
  590. X.Sh AUTHORS
  591. XMike Durian - durian@advtech.uswest.com
  592. END_OF_FILE
  593.   if test 1680 -ne `wc -c <'tclm-1.0/doc/midiconfig.3'`; then
  594.     echo shar: \"'tclm-1.0/doc/midiconfig.3'\" unpacked with wrong size!
  595.   fi
  596.   # end of 'tclm-1.0/doc/midiconfig.3'
  597. fi
  598. if test -f 'tclm-1.0/doc/midifixtovar.3' -a "${1}" != "-c" ; then 
  599.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midifixtovar.3'\"
  600. else
  601.   echo shar: Extracting \"'tclm-1.0/doc/midifixtovar.3'\" \(802 characters\)
  602.   sed "s/^X//" >'tclm-1.0/doc/midifixtovar.3' <<'END_OF_FILE'
  603. X.Dt MIDIFIXTOVAR 3
  604. X.Os TCLM
  605. X.Dd Jan 10, 1993
  606. X.Sh NAME
  607. X.Nm midifixtovar
  608. X.Nd "tclm command that converts an integer value to a variable length value"
  609. X.Sh SYNOPSIS
  610. X.Nm
  611. X.Ar value
  612. X.Sh DESCRIPTION
  613. X.Nm
  614. Xis a
  615. X.Xr tclm 3
  616. Xcommand that
  617. Xconverts an integer value to a Standard
  618. X.Tn MIDI
  619. XFile
  620. Xvariable length value.
  621. XThis command takes only one argument, which is
  622. Xthe value to be converted.
  623. XThe value should be representable in a four byte
  624. Xinteger value (typically a long).
  625. X.Pp
  626. XThe value of this command has decreased
  627. Xsince release 0.1 and it may disappear
  628. Xin the future.
  629. X.Sh RETURN VALUES
  630. X.Nm
  631. Xreturns a list of bytes representing the
  632. Xspecified value in variable length form.
  633. XThe individual bytes are in hex form
  634. X(0x??).
  635. X.Sh SEE ALSO
  636. X.Xr tclm 1 ,
  637. X.Xr midivartofix 3
  638. X.Sh AUTHORS
  639. XMike Durian - durian@advtech.uswest.com
  640. END_OF_FILE
  641.   if test 802 -ne `wc -c <'tclm-1.0/doc/midifixtovar.3'`; then
  642.     echo shar: \"'tclm-1.0/doc/midifixtovar.3'\" unpacked with wrong size!
  643.   fi
  644.   # end of 'tclm-1.0/doc/midifixtovar.3'
  645. fi
  646. if test -f 'tclm-1.0/doc/midimake.3' -a "${1}" != "-c" ; then 
  647.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midimake.3'\"
  648. else
  649.   echo shar: Extracting \"'tclm-1.0/doc/midimake.3'\" \(796 characters\)
  650.   sed "s/^X//" >'tclm-1.0/doc/midimake.3' <<'END_OF_FILE'
  651. X.Dt MIDIMAKE 3
  652. X.Os TCLM
  653. X.Dd Jan 10, 1993
  654. X.Sh NAME
  655. X.Nm midimake
  656. X.Nd "tclm command to create an empty Standard MIDI File"
  657. X.Sh SYNOPSIS
  658. X.Nm
  659. X.Sh DESCRIPTION
  660. X.Nm
  661. Xis a
  662. X.Xr tclm 1
  663. Xcommand that creates an empty Standard
  664. X.Tn MIDI
  665. XFile for
  666. Xuse by other
  667. X.Tn MIDI
  668. Xspecific tclm commands.
  669. XBy default the Standard
  670. X.Tn MIDI
  671. XFile is created with zero
  672. Xtracks allocated, the format is type one and the division
  673. Xis 120.
  674. XThese defaults can then be changed with
  675. Xthe
  676. X.Xr midiconfig 3
  677. Xcommand.
  678. X.Pp
  679. XSince
  680. X.Nm
  681. Xallocates space for the Standard
  682. X.Tn MIDI
  683. XFile,
  684. X.Xr midifree 3
  685. Xshould be used
  686. Xwhen the file is no longer needed.
  687. X.Sh RETURN VALUES
  688. X.Nm
  689. Xreturns a
  690. X.Tn MIDI
  691. Xfile
  692. X.Tn ID
  693. Xfor use by other
  694. X.Tn MIDI
  695. Xspecific
  696. Xtclm commands.
  697. X.Sh SEE ALSO
  698. X.Xr tclm 1 ,
  699. X.Xr midiconfig 3
  700. X.Sh AUTHORS
  701. XMike Durian - durian@advtech.uswest.com
  702. END_OF_FILE
  703.   if test 796 -ne `wc -c <'tclm-1.0/doc/midimake.3'`; then
  704.     echo shar: \"'tclm-1.0/doc/midimake.3'\" unpacked with wrong size!
  705.   fi
  706.   # end of 'tclm-1.0/doc/midimake.3'
  707. fi
  708. if test -f 'tclm-1.0/doc/midimerge.3' -a "${1}" != "-c" ; then 
  709.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midimerge.3'\"
  710. else
  711.   echo shar: Extracting \"'tclm-1.0/doc/midimerge.3'\" \(2182 characters\)
  712.   sed "s/^X//" >'tclm-1.0/doc/midimerge.3' <<'END_OF_FILE'
  713. X.Dt MIDIMERGE 3
  714. X.Os TCLM
  715. X.Dd Jan 10, 1993
  716. X.Sh NAME
  717. X.Nm midimerge
  718. X.Nd "tclm command to merge multiple tracks of a Standard MIDI File to one track"
  719. X.Sh SYNOPSIS
  720. X.Nm
  721. X.Pf { Ar outmfileId outtrack Ns }
  722. X.Pf { Pf { Ar inmfile
  723. X.Ar intrack tscalar Ns }
  724. X.Pf { Ar inmfile intrack tscalar Ns }
  725. X.Ar ... Ns }
  726. X.Ar delta
  727. X.Sh DESCRIPTION
  728. X.Nm
  729. Xis a
  730. X.Xr tclm 1
  731. Xcommand that
  732. Xmerges one or more input tracks to a single output track
  733. Xof a Standard
  734. X.Tn MIDI
  735. XFile.
  736. XThe first option is a list that designates output track.
  737. XThe first element of that list is the Standard
  738. X.Tn MIDI
  739. XFile
  740. X.Tn ID ,
  741. Xwhile the
  742. Xsecond element is the track number of that
  743. X.Tn MIDI
  744. Xfile.
  745. X.Pp
  746. XThe second argument is a list containing the specifications
  747. Xfor the inputs tracks.
  748. XEach input track specification is itself a list similar
  749. Xto the output track designator.
  750. XThe first element of an input track specification is
  751. Xthe Standard
  752. X.Tn MIDI
  753. XFile
  754. X.Tn ID
  755. Xand the second
  756. Xthe the track number.
  757. XThe third element is a time scalar.
  758. XSince tracks from
  759. X.Tn MIDI
  760. Xfiles with different
  761. Xdivisions might be combined, the time scalar can be
  762. Xused to convert the timings to the same base.
  763. X.Nm
  764. Xwill divide each delta time between events in the
  765. X.Tn MIDI
  766. Xfile by the tscalar value.
  767. XThus, a tscalar of 2 would be the same as halving the
  768. Xdivision for a track.
  769. X.Pp
  770. XThe third and final argument to
  771. X.Nm
  772. Xis a initial time delta.
  773. X.Nm
  774. Xoffsets the first event it merges by
  775. Xthis value.
  776. XIt is useful in maintaining the timings between
  777. Xexisting events in the output track and
  778. Xthe new events added by the merge.
  779. X.Pp
  780. XAll Standard
  781. X.Tn MIDI
  782. XFile
  783. X.Tn ID
  784. Xshould be
  785. Xvalues returned by either
  786. X.Xr midiread 3 ,
  787. Xor
  788. X.Xr midimake 3 .
  789. X.Pp
  790. X.Nm
  791. Xstrips all
  792. X.Dq metaeot
  793. Xevents in encounters in the input
  794. Xtracks.
  795. XThis is to keep the output track from
  796. Xbeing terminated early and also to
  797. Xmake it easier to add further events
  798. Xto the output track.
  799. XTo maintain timing, the delta time value
  800. Xto what would have been the last
  801. X.Dq metaeot
  802. Xevent is returned by
  803. X.Nm Ns .
  804. X.Sh RETURN VALUES
  805. X.Nm
  806. Xreturns the delta time to
  807. Xwhat would have been the final
  808. X.Dq metaeot
  809. Xevent in the input tracks.
  810. X.Sh SEE ALSO
  811. X.Xr tclm 1 ,
  812. X.Xr midiread 3 ,
  813. X.Xr midimake 3
  814. X.Sh AUTHORS
  815. XMike Durian - durian@advtech.uswest.com
  816. END_OF_FILE
  817.   if test 2182 -ne `wc -c <'tclm-1.0/doc/midimerge.3'`; then
  818.     echo shar: \"'tclm-1.0/doc/midimerge.3'\" unpacked with wrong size!
  819.   fi
  820.   # end of 'tclm-1.0/doc/midimerge.3'
  821. fi
  822. if test -f 'tclm-1.0/doc/midiplay.3' -a "${1}" != "-c" ; then 
  823.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midiplay.3'\"
  824. else
  825.   echo shar: Extracting \"'tclm-1.0/doc/midiplay.3'\" \(1875 characters\)
  826.   sed "s/^X//" >'tclm-1.0/doc/midiplay.3' <<'END_OF_FILE'
  827. X.Dt MIDIPLAY 3
  828. X.Os TCLM
  829. X.Dd Jan 10, 1993
  830. X.Sh NAME
  831. X.Nm midiplay
  832. X.Nd "tclm command to play a Standard MIDI File"
  833. X.Sh SYNOPSIS
  834. X.Nm
  835. X.Op bg | background
  836. X.Op repeat
  837. X.Op tracks Ar track_list
  838. X.Op reltempo Ar tempo_scalar
  839. X.Ar mfileId
  840. X.Sh DESCRIPTION
  841. X.Nm
  842. Xis a
  843. X.Xr tclm 3
  844. Xcommand that plays a Standard
  845. X.Tn MIDI
  846. XFile through
  847. Xa
  848. X.Tn MIDI
  849. Xdevice.
  850. X.Pp
  851. XIn the most basic form
  852. X.Nm
  853. Xtakes no options and only one argument specifying the
  854. Xfile to be played.
  855. XThis argument should be a
  856. X.Tn MIDI
  857. Xfile
  858. X.Tn ID
  859. Xas returned by
  860. X.Xr midiread 3
  861. Xor
  862. X.Xr midimake 3 .
  863. X.Pp
  864. XIn the other forms,
  865. X.Nm
  866. Xcan take various options to control how
  867. Xthe file is played.
  868. XThe usage of the various options is as follows:
  869. X.Bl -tag -width "bg or background" -offset indent
  870. X.It Nm bg No or Nm background
  871. XThese options make
  872. X.Nm
  873. Xfork and play the file in a
  874. Xseparate process.
  875. XThe call returns immediately.
  876. XWithout this option
  877. X.Nm
  878. Xwill block until the file is
  879. Xfinished playing.
  880. X.It Nm repeat
  881. XThis option causes
  882. X.Nm
  883. Xto play the file continuously,
  884. Xrepeating from the beginning of the file
  885. Xwhen the end is reached.
  886. X.It Nm reltempo
  887. XThis option
  888. Xtakes one argument which specifies a value
  889. Xused to scale
  890. Xany tempos found in the file.
  891. XThis value should be a float and
  892. Xshould be in the range 0
  893. Xto 4 for
  894. X.Tn MPU-401
  895. Xcompatible devices.
  896. X.It Nm tracks
  897. XThis option takes an argument
  898. Xconsisting of a list of track numbers.
  899. XThe list should be enclosed by curly braces
  900. Xor double quotes.
  901. XWith this option, only those tracks specified
  902. Xin the track
  903. Xlist will be played.
  904. XTrack 0 is the first track.
  905. X.El
  906. X.Sh RETURN VALUES
  907. X.Nm
  908. Xreturns 0
  909. Xwhen called without the
  910. X.Em bg
  911. Xoption, and
  912. Xthe process
  913. X.Tn ID
  914. Xof forked process
  915. Xwhen called with the
  916. X.Em bg
  917. Xoption.
  918. XThis process
  919. X.Tn ID
  920. Xcan then be used with the
  921. X.Xr midistop 3
  922. Xtclm function.
  923. X.Sh SEE ALSO
  924. X.Xr tclm 1 ,
  925. X.Xr midiread 3 ,
  926. X.Xr midimake 3 ,
  927. X.Xr midistop 3
  928. X.Sh AUTHORS
  929. XMike Durian - durian@advtech.uswest.com
  930. END_OF_FILE
  931.   if test 1875 -ne `wc -c <'tclm-1.0/doc/midiplay.3'`; then
  932.     echo shar: \"'tclm-1.0/doc/midiplay.3'\" unpacked with wrong size!
  933.   fi
  934.   # end of 'tclm-1.0/doc/midiplay.3'
  935. fi
  936. if test -f 'tclm-1.0/doc/midiplayable.3' -a "${1}" != "-c" ; then 
  937.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midiplayable.3'\"
  938. else
  939.   echo shar: Extracting \"'tclm-1.0/doc/midiplayable.3'\" \(549 characters\)
  940.   sed "s/^X//" >'tclm-1.0/doc/midiplayable.3' <<'END_OF_FILE'
  941. X.Dt MIDIPLAYABLE 3
  942. X.Os TCLM
  943. X.Dd April 12, 1993
  944. X.Sh NAME
  945. X.Nm midiplayable
  946. X.Nd "tclm command to determine if a MIDI device interface is supported"
  947. X.Sh SYNOPSIS
  948. X.Nm
  949. X.Sh DESCRIPTION
  950. X.Nm
  951. Xis a simple
  952. X.Xr tclm 1
  953. Xcommand that returns 1 if the device
  954. Xspecific commands,
  955. X.Xr midiplay 3
  956. Xand
  957. X.Xr midistop 3 ,
  958. Xare available for use.
  959. X.Sh RETURN VALUES
  960. X.Nm
  961. Xreturns 1 if the commands
  962. X.Xr midiplay 3
  963. Xand
  964. X.Xr midistop 3
  965. Xare available
  966. Xand 0 if they are not.
  967. X.Sh SEE ALSO
  968. X.Xr tclm 1 ,
  969. X.Xr midiplay 3 ,
  970. X.Xr midistop 3
  971. X.Sh AUTHORS
  972. XMike Durian - durian@advtech.uswest.com
  973. END_OF_FILE
  974.   if test 549 -ne `wc -c <'tclm-1.0/doc/midiplayable.3'`; then
  975.     echo shar: \"'tclm-1.0/doc/midiplayable.3'\" unpacked with wrong size!
  976.   fi
  977.   # end of 'tclm-1.0/doc/midiplayable.3'
  978. fi
  979. if test -f 'tclm-1.0/doc/midiread.3' -a "${1}" != "-c" ; then 
  980.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midiread.3'\"
  981. else
  982.   echo shar: Extracting \"'tclm-1.0/doc/midiread.3'\" \(967 characters\)
  983.   sed "s/^X//" >'tclm-1.0/doc/midiread.3' <<'END_OF_FILE'
  984. X.Dt MIDIREAD 3 TCLM
  985. X.Os TCLM
  986. X.Dd Jan 10, 1993
  987. X.Sh NAME
  988. X.Nm midiread
  989. X.Nd "tclm command to read a Standard MIDI File"
  990. X.Sh SYNOPSIS
  991. X.Nm
  992. X.Ar fileId
  993. X.Sh DESCRIPTION
  994. X.Nm
  995. Xis a
  996. X.Xr tclm
  997. Xcommand that reads a Standard
  998. X.Tn MIDI
  999. XFile for
  1000. Xlater use by other
  1001. X.Tn MIDI
  1002. Xspecific tclm commands.
  1003. X.Pp
  1004. X.Nm
  1005. Xtakes one argument that specifies a file
  1006. Xdescriptor from which to read the Standard
  1007. X.Tn MIDI
  1008. XFile.
  1009. XThis argument should be a value returned by
  1010. Xthe
  1011. X.Xr open 3
  1012. Xtcl command, or
  1013. X.Dq stdin .
  1014. X.Pp
  1015. XSince
  1016. X.Nm
  1017. Xallocates space for the Standard
  1018. X.Tn MIDI
  1019. XFile,
  1020. X.Xr midifree 3
  1021. Xshould be used
  1022. Xwhen the file is no longer needed.
  1023. X.Sh RETURN VALUES
  1024. X.Nm
  1025. Xreturns a
  1026. X.Tn MIDI
  1027. Xfile
  1028. X.Tn ID
  1029. Xfor use by other
  1030. X.Tn MIDI
  1031. Xspecific
  1032. Xtclm commands.
  1033. XIf there is no data to be read,
  1034. X.Nm
  1035. Xforces an error and returns
  1036. X.Dq EOF.
  1037. XThis facilitates determining
  1038. Xwhen there are no more files
  1039. Xto be read from
  1040. X.Em stdin .
  1041. X.Sh SEE ALSO
  1042. X.Xr tclm 1 ,
  1043. X.Xr open 3 ,
  1044. X.Xr midifree 3
  1045. X.Sh AUTHORS
  1046. XMike Durian - durian@advtech.uswest.com
  1047. END_OF_FILE
  1048.   if test 967 -ne `wc -c <'tclm-1.0/doc/midiread.3'`; then
  1049.     echo shar: \"'tclm-1.0/doc/midiread.3'\" unpacked with wrong size!
  1050.   fi
  1051.   # end of 'tclm-1.0/doc/midiread.3'
  1052. fi
  1053. if test -f 'tclm-1.0/doc/midirecord.3' -a "${1}" != "-c" ; then 
  1054.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midirecord.3'\"
  1055. else
  1056.   echo shar: Extracting \"'tclm-1.0/doc/midirecord.3'\" \(2187 characters\)
  1057.   sed "s/^X//" >'tclm-1.0/doc/midirecord.3' <<'END_OF_FILE'
  1058. X.Dt MIDIRECORD 3
  1059. X.Os TCLM
  1060. X.Dd April 20, 1993
  1061. X.Sh NAME
  1062. X.Nm midirecord
  1063. X.Nd "tclm command to record a Standard MIDI File"
  1064. X.Sh SYNOPSIS
  1065. X.Nm
  1066. X.Op bg | background
  1067. X.Oo play Ar play_mfileId\ 
  1068. X.Op repeat
  1069. X.Op tracks Ar track_list
  1070. X.Op reltempo Ar tempo_scalar
  1071. X.Oc
  1072. X.Ar record_mfileId
  1073. X.Sh DESCRIPTION
  1074. X.Nm
  1075. Xis a
  1076. X.Xr tclm 1
  1077. Xcommand that records a Standard
  1078. X.Tn MIDI
  1079. XFile
  1080. Xfrom a
  1081. X.Tn MIDI
  1082. Xdevice.
  1083. XIt also optionally plays a
  1084. X.Tn MIDI
  1085. Xfile while
  1086. Xrecording.
  1087. X.Pp
  1088. X.Nm
  1089. Xshould be specified with the
  1090. X.Em background
  1091. Xoption, a play file
  1092. Xor with both.
  1093. XWithout one of the above, there is no
  1094. Xway to properly terminate the call.
  1095. XIf a play file is specified, then
  1096. X.Nm
  1097. Xrecords into
  1098. X.Em record_mfileId
  1099. Xuntil
  1100. X.Em play_mfileId
  1101. Xis finished playing.
  1102. X.Em record_mfileId
  1103. Xcan then be used normally.
  1104. X.Pp
  1105. XIf the
  1106. X.Em background
  1107. Xoption is specified,
  1108. Xthen
  1109. X.Nm
  1110. Xwill put itself into the background while
  1111. Xit is recording, and optionally playing.
  1112. XThe recording can then be stopped by
  1113. Xissuing the
  1114. X.Xr midistop 3
  1115. Xcommand with
  1116. X.Em record_mfileId .
  1117. XAfter the
  1118. X.Xr midistop 3 ,
  1119. X.Nm
  1120. Xtransfers the filled record file to
  1121. Xthe file specified as an argument to
  1122. X.Xr midistop 3 .
  1123. XOnly at this point does
  1124. X.Em record_mfileId
  1125. Xbecome valid.
  1126. X.Pp
  1127. XThe options are as follows:
  1128. X.Bl -tag -width "reltempo" -offset indent
  1129. X.It Nm repeat
  1130. XThis option
  1131. Xcauses the play file
  1132. Xto be repeated until the
  1133. X.Xr midistop 3
  1134. Xcommand is issued.
  1135. XIt only makes sense for background recording.
  1136. X.It Nm tracks
  1137. XThis
  1138. Xoption is the same the
  1139. Xoption found in
  1140. X.Xr midiplay 3 .
  1141. XIt is a list of specific tracks from
  1142. Xthe play file to be played,
  1143. Xinstead of the default which is to
  1144. Xplay all the tracks.
  1145. X.It Nm reltempo
  1146. XThis
  1147. Xoption multiplies the tempo
  1148. Xof the play file by
  1149. X.Em tempo_scalar
  1150. Xto make the play file play at a different speed.
  1151. X.El
  1152. X.Pp
  1153. X.Em record_mfileId
  1154. Xshould be a value returned by
  1155. X.Xr midimake 3
  1156. Xor
  1157. X.Xr midiread 3 .
  1158. X.Sh RETURN VALUES
  1159. X.Nm
  1160. Xreturns 0
  1161. Xwhen called without the
  1162. X.Em bg
  1163. Xoption, and
  1164. Xthe process
  1165. X.Tn ID
  1166. Xof forked process
  1167. Xwhen called with the
  1168. X.Em bg
  1169. Xoption.
  1170. XThis process
  1171. X.Tn ID
  1172. Xcan then be used with the
  1173. X.Xr midistop 3
  1174. Xtclm function.
  1175. X.Sh SEE ALSO
  1176. X.Xr tclm 1 ,
  1177. X.Xr midiplay 3 ,
  1178. X.Xr midiread 3 ,
  1179. X.Xr midimake 3 ,
  1180. X.Xr midistop 3
  1181. X.Sh AUTHORS
  1182. XMike Durian - durian@advtech.uswest.com
  1183. END_OF_FILE
  1184.   if test 2187 -ne `wc -c <'tclm-1.0/doc/midirecord.3'`; then
  1185.     echo shar: \"'tclm-1.0/doc/midirecord.3'\" unpacked with wrong size!
  1186.   fi
  1187.   # end of 'tclm-1.0/doc/midirecord.3'
  1188. fi
  1189. if test -f 'tclm-1.0/doc/midirewind.3' -a "${1}" != "-c" ; then 
  1190.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midirewind.3'\"
  1191. else
  1192.   echo shar: Extracting \"'tclm-1.0/doc/midirewind.3'\" \(1011 characters\)
  1193.   sed "s/^X//" >'tclm-1.0/doc/midirewind.3' <<'END_OF_FILE'
  1194. X.Dt MIDIREWIND 3
  1195. X.Os TCLM
  1196. X.Dd Jan 10, 1993
  1197. X.Sh NAME
  1198. X.Nm midirewind
  1199. X.Nd "tclm command to reset a Standard MIDI File to the beginning"
  1200. X.Sh SYNOPSIS
  1201. X.Nm
  1202. X.Ar mfileId
  1203. X.Op track_list
  1204. X.Sh DESCRIPTION
  1205. X.Nm
  1206. Xis a
  1207. X.Xr tclm 1
  1208. Xcommand that
  1209. Xsets the internal place keeper of
  1210. Xspecified tracks of
  1211. Xa Standard
  1212. X.Tn MIDI
  1213. XFile to the beginning.
  1214. XThe next
  1215. X.Xr midiget 3
  1216. Xon one of the specified tracks
  1217. Xwill return an event from
  1218. Xthe start of that track regardless
  1219. Xof the location of any previous
  1220. X.Xr midiget 3
  1221. Xcalls.
  1222. X.Pp
  1223. X.Nm
  1224. Xtakes
  1225. Xone argument specifying a
  1226. XStandard
  1227. X.Tn MIDI
  1228. XFile descriptor as returned
  1229. Xby
  1230. X.Xr midiread 3
  1231. Xor
  1232. X.Xr midimake 3 ,
  1233. Xand one optional
  1234. Xargument specifying a list
  1235. Xof tracks to be rewound.
  1236. XThe track list should be in tcl
  1237. Xform and enclosed in either double-quotes
  1238. Xor curly braces.
  1239. XIf a track list is not specified,
  1240. Xall tracks will be rewound.
  1241. X.Sh RETURN VALUES
  1242. X.Nm
  1243. Xdoes not return anything.
  1244. X.Sh SEE ALSO
  1245. X.Xr tclm 1 ,
  1246. X.Xr midiread 3 ,
  1247. X.Xr midimake 3 ,
  1248. X.Xr midiget 3
  1249. X.Sh AUTHORS
  1250. XMike Durian - durian@advtech.uswest.com
  1251. END_OF_FILE
  1252.   if test 1011 -ne `wc -c <'tclm-1.0/doc/midirewind.3'`; then
  1253.     echo shar: \"'tclm-1.0/doc/midirewind.3'\" unpacked with wrong size!
  1254.   fi
  1255.   # end of 'tclm-1.0/doc/midirewind.3'
  1256. fi
  1257. if test -f 'tclm-1.0/doc/midistop.3' -a "${1}" != "-c" ; then 
  1258.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midistop.3'\"
  1259. else
  1260.   echo shar: Extracting \"'tclm-1.0/doc/midistop.3'\" \(1181 characters\)
  1261.   sed "s/^X//" >'tclm-1.0/doc/midistop.3' <<'END_OF_FILE'
  1262. X.Dt MIDISTOP 3
  1263. X.Os TCLM
  1264. X.Dd April 20, 1993
  1265. X.Sh NAME
  1266. X.Nm midistop
  1267. X.Nd "tclm command to stop playing or recording a MIDI file"
  1268. X.Sh SYNOPSIS
  1269. X.Nm
  1270. X.Ar process_ID
  1271. X.Op record_fileId
  1272. X.Sh DESCRIPTION
  1273. X.Nm
  1274. Xis a tclm command that stops a Standard
  1275. X.Tn MIDI
  1276. XFile
  1277. Xplaying in the background.
  1278. X.Pp
  1279. X.Nm
  1280. Xtakes one argument that specifies the process ID
  1281. Xof the process playing the Standard
  1282. X.Tn MIDI
  1283. XFile.
  1284. XThis value can be obtained by using the return code
  1285. Xof the
  1286. X.Xr midiplay 3
  1287. Xor
  1288. X.Xr midirecord 3
  1289. Xcommands.
  1290. X.Pp
  1291. X.Nm
  1292. Xalso takes an optional argument for use
  1293. Xin stopping files being recorded in the background.
  1294. XIf
  1295. X.Em record_fileId
  1296. Xis specified and
  1297. X.Em process_ID
  1298. Xis the process number of a
  1299. X.Xr midirecord 3
  1300. Xcommand, then
  1301. X.Nm
  1302. Xwill put the data from the
  1303. Xrecording into
  1304. X.Em record_fileId
  1305. Xafter it has stopped the recording.
  1306. X.Em record_fileId
  1307. Xcan then be used normally.
  1308. X.Pp
  1309. X.Nm
  1310. Xwill only work on files being played by executing
  1311. X.Xr midiplay 3
  1312. Xor
  1313. X.Xr midirecord 3
  1314. Xwith the
  1315. X.Em bg
  1316. Xoption.
  1317. X.Sh RETURN VALUES
  1318. X.Nm
  1319. Xreturns 1
  1320. Xif it could successfully
  1321. Xstop playing the file.
  1322. XIt returns 0 if the process
  1323. XID does not exist.
  1324. X.Sh SEE ALSO
  1325. X.Xr tclm 1 ,
  1326. X.Xr midiplay 3
  1327. X.Sh AUTHORS
  1328. XMike Durian - durian@advtech.uswest.com
  1329. END_OF_FILE
  1330.   if test 1181 -ne `wc -c <'tclm-1.0/doc/midistop.3'`; then
  1331.     echo shar: \"'tclm-1.0/doc/midistop.3'\" unpacked with wrong size!
  1332.   fi
  1333.   # end of 'tclm-1.0/doc/midistop.3'
  1334. fi
  1335. if test -f 'tclm-1.0/doc/miditiming.3' -a "${1}" != "-c" ; then 
  1336.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/miditiming.3'\"
  1337. else
  1338.   echo shar: Extracting \"'tclm-1.0/doc/miditiming.3'\" \(947 characters\)
  1339.   sed "s/^X//" >'tclm-1.0/doc/miditiming.3' <<'END_OF_FILE'
  1340. X.Dt MIDITIMING 3
  1341. X.Os TCLM
  1342. X.Dd Jan 10, 1993
  1343. X.Sh NAME
  1344. X.Nm miditiming
  1345. X.Nd "tclm command that gets the timing portion of a Standard MIDI File event"
  1346. X.Sh SYNOPSIS
  1347. X.Nm
  1348. X.Ar event
  1349. X.Sh DESCRIPTION
  1350. X.Nm
  1351. Xis a
  1352. X.Xr tclm 1
  1353. Xcommand that
  1354. Xreturns the timing portion of a Standard
  1355. X.Tn MIDI
  1356. XFile event.
  1357. XThis command takes only one argument;
  1358. Xa Standard
  1359. X.Tn MIDI
  1360. XFile event.
  1361. XThis argument should be
  1362. Xin tcl list form,
  1363. Xwith each value in the list being
  1364. Xone byte of the event.
  1365. XThe event should be surrounded by
  1366. Xeither double-quotes or curly braces.
  1367. X.Pp
  1368. XThis call only exists for backwards compatibility
  1369. Xwith release 0.1.
  1370. XIt will soon disappear for good.
  1371. X.Sh RETURN VALUES
  1372. X.Nm
  1373. Xreturns the timing portion of the specified
  1374. Xevent.
  1375. XSince Standard
  1376. X.Tn MIDI
  1377. XFile events are in
  1378. Xvariable length form, one to four bytes
  1379. Xmay be returned.
  1380. XThe individual bytes will be in hex notation
  1381. X(0x??).
  1382. X.Sh SEE ALSO
  1383. X.Xr tclm 1 ,
  1384. X.Xr midiget 3
  1385. X.Sh AUTHORS
  1386. XMike Durian - durian@advtech.uswest.com
  1387. END_OF_FILE
  1388.   if test 947 -ne `wc -c <'tclm-1.0/doc/miditiming.3'`; then
  1389.     echo shar: \"'tclm-1.0/doc/miditiming.3'\" unpacked with wrong size!
  1390.   fi
  1391.   # end of 'tclm-1.0/doc/miditiming.3'
  1392. fi
  1393. if test -f 'tclm-1.0/doc/midivartofix.3' -a "${1}" != "-c" ; then 
  1394.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midivartofix.3'\"
  1395. else
  1396.   echo shar: Extracting \"'tclm-1.0/doc/midivartofix.3'\" \(1215 characters\)
  1397.   sed "s/^X//" >'tclm-1.0/doc/midivartofix.3' <<'END_OF_FILE'
  1398. X.Dt MIDIVARTOFIX 3
  1399. X.Os TCLM
  1400. X.Dd Jan 10, 1993
  1401. X.Sh NAME
  1402. X.Nm midivartofix
  1403. X.Nd "tclm command that converts a variable length value to a fixed length value"
  1404. X.Sh SYNOPSIS
  1405. X.Nm
  1406. X.Ar event
  1407. X.Sh DESCRIPTION
  1408. X.Nm
  1409. Xis a
  1410. X.Xr tclm 1
  1411. Xcommand that
  1412. Xconverts a variable length value specified in a Standard
  1413. X.Tn MIDI
  1414. XFile
  1415. Xevent to a fixed length value.
  1416. XThis command takes only one argument;
  1417. Xa series of bytes forming a
  1418. XStandard
  1419. X.Tn MIDI
  1420. XFile variable length value.
  1421. XAdditional bytes are ignored so complete events can be
  1422. Xpassed to
  1423. X.Nm
  1424. Xto convert the timing portion of the event directly to
  1425. Xa fixed length value.
  1426. XThis argument should be
  1427. Xin tcl list form,
  1428. Xwith each value in the list being
  1429. Xone byte of the event.
  1430. XThe event should be surrounded by
  1431. Xeither double-quotes or curly braces.
  1432. X.Pp
  1433. XThe value of this command has decreased since
  1434. Xrelease 0.1 and it may disappear in the future.
  1435. X.Sh RETURN VALUES
  1436. X.Nm
  1437. Xreturns a four byte integer (typically a long in C)
  1438. Xrepresentation of a Standard
  1439. X.Tn MIDI
  1440. XFile
  1441. Xvariable length value.
  1442. XThough a variable length value could represent
  1443. Xa value that would not fit in a long, this
  1444. Xnever happens in actual usage.
  1445. X.Sh SEE ALSO
  1446. X.Xr tclm 1 ,
  1447. X.Xr midifixtovar 3
  1448. X.Sh AUTHORS
  1449. XMike Durian - durian@advtech.uswest.com
  1450. END_OF_FILE
  1451.   if test 1215 -ne `wc -c <'tclm-1.0/doc/midivartofix.3'`; then
  1452.     echo shar: \"'tclm-1.0/doc/midivartofix.3'\" unpacked with wrong size!
  1453.   fi
  1454.   # end of 'tclm-1.0/doc/midivartofix.3'
  1455. fi
  1456. if test -f 'tclm-1.0/doc/midiwrite.3' -a "${1}" != "-c" ; then 
  1457.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/midiwrite.3'\"
  1458. else
  1459.   echo shar: Extracting \"'tclm-1.0/doc/midiwrite.3'\" \(692 characters\)
  1460.   sed "s/^X//" >'tclm-1.0/doc/midiwrite.3' <<'END_OF_FILE'
  1461. X.Dt MIDIWRITE 3
  1462. X.Os TCLM
  1463. X.Dd Jan 10, 1993
  1464. X.Sh NAME
  1465. X.Nm midiwrite
  1466. X.Nd "tclm command to write a Standard MIDI File"
  1467. X.Sh SYNOPSIS
  1468. X.Nm
  1469. X.Ar mfileId
  1470. X.Ar fileId
  1471. X.Sh DESCRIPTION
  1472. X.Nm
  1473. Xis a
  1474. X.Xr tclm 1
  1475. Xcommand that writes Standard
  1476. X.Tn MIDI
  1477. XFile to
  1478. Xan open tcl file descriptor.
  1479. X.Pp
  1480. XThis command
  1481. Xtakes two arguments.
  1482. XThe first is a tclm Standard
  1483. X.Tn MIDI
  1484. XFile descriptor
  1485. Xas returned by
  1486. X.Xr midiread 3
  1487. Xor
  1488. X.Xr midimake 3 ,
  1489. Xwhile the second is a tcl file descriptor as
  1490. Xreturned by the
  1491. X.Xr open 3
  1492. Xtcl command
  1493. Xor
  1494. X.Dq stdout
  1495. Xor
  1496. X.Dq stderr .
  1497. X.Sh RETURN VALUES
  1498. X.Nm
  1499. Xdoes not return anything.
  1500. X.Sh SEE ALSO
  1501. X.Xr tclm 1 ,
  1502. X.Xr open 3 ,
  1503. X.Xr midiread 3 ,
  1504. X.Xr midimake 3
  1505. X.Sh AUTHORS
  1506. XMike Durian - durian@advtech.uswest.com
  1507. END_OF_FILE
  1508.   if test 692 -ne `wc -c <'tclm-1.0/doc/midiwrite.3'`; then
  1509.     echo shar: \"'tclm-1.0/doc/midiwrite.3'\" unpacked with wrong size!
  1510.   fi
  1511.   # end of 'tclm-1.0/doc/midiwrite.3'
  1512. fi
  1513. if test -f 'tclm-1.0/doc/mplay.1' -a "${1}" != "-c" ; then 
  1514.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/mplay.1'\"
  1515. else
  1516.   echo shar: Extracting \"'tclm-1.0/doc/mplay.1'\" \(1395 characters\)
  1517.   sed "s/^X//" >'tclm-1.0/doc/mplay.1' <<'END_OF_FILE'
  1518. X.Dt MPLAY 1
  1519. X.Os TCLM
  1520. X.Dd Jan 10, 1993
  1521. X.Sh NAME
  1522. X.Nm mplay
  1523. X.Nd "a tclm script to play Standard MIDI Files"
  1524. X.Sh SYNOPSIS
  1525. X.Nm
  1526. X.Op Fl repeat
  1527. X.Op Fl tracks Ar tracks
  1528. X.Op Fl speed Ar speed
  1529. X.Op file ...
  1530. X.Sh DESCRIPTION
  1531. X.Nm
  1532. Xis a
  1533. X.Xr tclm 1
  1534. Xscript that plays Standard
  1535. X.Tn MIDI
  1536. XFiles.
  1537. XMultiple files may be specified on
  1538. Xthe command line, or files can be
  1539. Xread from
  1540. X.Em stdin .
  1541. XThe options are as follows:
  1542. X.Bl -tag -width Fl repeat -offset indent
  1543. X.It Fl repeat
  1544. XPlay the first file repeatedly.
  1545. XThe playing will continue until the
  1546. Xprocess is killed.
  1547. X.It Fl tracks
  1548. XSpecifies a list of tracks to be played
  1549. Xinstead of the default, which is to play
  1550. Xall tracks.
  1551. XThis option has an argument that lists
  1552. Xthe tracks.
  1553. XThe argument needs to be treated as one argument
  1554. Xinstead of multiple values, and thus should
  1555. Xbe enclosed in double or single quotes.
  1556. X.It Fl speed
  1557. XSpecifies a tempo modifier.
  1558. XThe argument to this option is a float
  1559. Xvalue that acts as
  1560. Xa multiplier for the tempo values found
  1561. Xin the Standard
  1562. X.Tn MIDI
  1563. XFiles.
  1564. X.Tn MPU-401
  1565. Xcompatible devices only use the range
  1566. X0 to 4.
  1567. X.El
  1568. X.Pp
  1569. XSince
  1570. X.Nm
  1571. Xmakes use of the
  1572. X.Xr midiplay 3
  1573. X.Xr tclm 1
  1574. Xcommand,
  1575. Xthis program will only work
  1576. Xif
  1577. X.Xr tclm 1
  1578. Xwas compiled with a device
  1579. Xinterface.
  1580. XThis can be determined at run-time
  1581. Xby using the
  1582. X.Xr midiplayable 3
  1583. Xcommand.
  1584. X.Sh SEE ALSO
  1585. X.Xr tclm 1 ,
  1586. X.Xr midiplayable 3 ,
  1587. X.Xr midiplay 3
  1588. X.Sh AUTHORS
  1589. XMike Durian - durian@advtech.uswest.com
  1590. END_OF_FILE
  1591.   if test 1395 -ne `wc -c <'tclm-1.0/doc/mplay.1'`; then
  1592.     echo shar: \"'tclm-1.0/doc/mplay.1'\" unpacked with wrong size!
  1593.   fi
  1594.   # end of 'tclm-1.0/doc/mplay.1'
  1595. fi
  1596. if test -f 'tclm-1.0/doc/mrecord.1' -a "${1}" != "-c" ; then 
  1597.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/mrecord.1'\"
  1598. else
  1599.   echo shar: Extracting \"'tclm-1.0/doc/mrecord.1'\" \(1894 characters\)
  1600.   sed "s/^X//" >'tclm-1.0/doc/mrecord.1' <<'END_OF_FILE'
  1601. X.Dt MRECORD 1
  1602. X.Os TCLM
  1603. X.Dd May 5, 1993
  1604. X.Sh NAME
  1605. X.Nm mrecord
  1606. X.Nd "a tclm script to record a Standard MIDI File"
  1607. X.Sh SYNOPSIS
  1608. X.Nm
  1609. X.Oo
  1610. X.Fl pfile Ar play_file
  1611. X.Op Fl repeat
  1612. X.Op Fl tracks Ar tracks
  1613. X.Op Fl speed Ar speed
  1614. X.Oc
  1615. Xrecord_file
  1616. X.Sh DESCRIPTION
  1617. X.Nm
  1618. Xis a
  1619. X.Nm tcl
  1620. Xscript that records a Standard
  1621. X.Tn MIDI
  1622. XFile.
  1623. XIt will also optionally play a
  1624. X.Tn MIDI
  1625. Xfile
  1626. Xwhile recording.
  1627. XThe options are as follows:
  1628. X.Bl -tag -width Fl repeat -offset indent
  1629. X.It Fl repeat
  1630. XThis option is only valid if a play
  1631. Xfile is specified.
  1632. XWhile recording it will repeat
  1633. Xthe play file until the return
  1634. Xkey is pressed, at which point
  1635. Xrecording will end.
  1636. X.It Fl tracks
  1637. XThis option is only valid if a play
  1638. Xfile is specified.
  1639. XThis option can be used to specify
  1640. Xa list of tracks in the play file
  1641. Xto use.
  1642. XBy default all tracks in the play file
  1643. Xare used.
  1644. XThe argument should be a list enclosed
  1645. Xby double or single quotes.
  1646. X.It Fl speed
  1647. XThis option is only valid if a play
  1648. Xfile is specified.
  1649. XIt specifies a tempo modifier that
  1650. Xis used to multiply any tempos found
  1651. Xin the play file.
  1652. XFor
  1653. X.Tn MPU-401
  1654. Xcompatible devices
  1655. Xit should be a floating point value
  1656. Xin the range 0 to 4.
  1657. X.It Fl pfile
  1658. XThis option specifies a file to play
  1659. Xwhile recording.
  1660. XWhen the file is finished playing,
  1661. Xrecording automatically stops.
  1662. X.El
  1663. X.Pp
  1664. XIf a play file is not specified, recording
  1665. Xwill continue until the return key is
  1666. Xpressed.
  1667. XIf a play file is specified, recording
  1668. Xonly lasts as long as the play file is
  1669. Xstill playing unless
  1670. X.Fl repeat
  1671. Xis specified in which case the return key
  1672. Xshould be pressed to end recording.
  1673. X.Pp
  1674. XSince
  1675. X.Nm
  1676. Xmakes use of the
  1677. X.Xr midirecord 3
  1678. X.Xr tclm 1
  1679. Xcommand,
  1680. Xthis program will only work
  1681. Xif
  1682. X.Xr tclm 1
  1683. Xwas compiled with a device
  1684. Xinterface.
  1685. XThis can be determined at run-time
  1686. Xby using the
  1687. X.Xr midiplayable 3
  1688. Xcommand.
  1689. X.Sh SEE ALSO
  1690. X.Xr tclm 1 ,
  1691. X.Xr midiplayable 3 ,
  1692. X.Xr midirecord 3
  1693. X.Sh AUTHORS
  1694. XMike Durian - durian@advtech.uswest.com
  1695. END_OF_FILE
  1696.   if test 1894 -ne `wc -c <'tclm-1.0/doc/mrecord.1'`; then
  1697.     echo shar: \"'tclm-1.0/doc/mrecord.1'\" unpacked with wrong size!
  1698.   fi
  1699.   # end of 'tclm-1.0/doc/mrecord.1'
  1700. fi
  1701. if test -f 'tclm-1.0/doc/tclm.1' -a "${1}" != "-c" ; then 
  1702.   echo shar: Will not clobber existing file \"'tclm-1.0/doc/tclm.1'\"
  1703. else
  1704.   echo shar: Extracting \"'tclm-1.0/doc/tclm.1'\" \(3089 characters\)
  1705.   sed "s/^X//" >'tclm-1.0/doc/tclm.1' <<'END_OF_FILE'
  1706. X.Dt TCLM 1
  1707. X.Os TCLM
  1708. X.Dd Jan 10, 1993
  1709. X.Sh NAME
  1710. X.Nm tclm
  1711. X.Nd "a tcl interpreter with MIDI extensions"
  1712. X.Sh SYNOPSIS
  1713. X.Nm
  1714. X.Op Fl f Op Ar filename
  1715. X.Sh DESCRIPTION
  1716. X.Nm
  1717. Xis a
  1718. Xtcl
  1719. Xinterpreter with
  1720. X.Tn MIDI
  1721. Xextensions allowing
  1722. Xit to manipulate Standard
  1723. X.Tn MIDI
  1724. XFiles and in some
  1725. Xcases play and record Standard
  1726. X.Tn MIDI
  1727. XFiles.
  1728. XTcl
  1729. Xis a Tool Command Language
  1730. Xwritten by John Ousterhout.
  1731. X.Pp
  1732. X.Nm
  1733. Xhas only one option:
  1734. X.Bl -tag -width Fl f -offset indent
  1735. X.It Fl f
  1736. XThis option has one optional argument
  1737. Xthat specifies the name of a file
  1738. Xcontaining tclm commands.
  1739. XThese commands are executed
  1740. Xin place of reading from stdin.
  1741. XWithout the optional argument
  1742. Xcommands are read from
  1743. X.Em stdin .
  1744. X.El
  1745. XWithout the
  1746. X.Fl f
  1747. Xoption
  1748. X.Nm
  1749. Xdisplays a
  1750. X.Dq tclm:
  1751. Xprompt and reads
  1752. Xcommands from
  1753. X.Em stdin .
  1754. X.Ss TCLM EXTENSIONS
  1755. X.Nm
  1756. Xhas a few extensions which
  1757. Xaid in the manipulation of
  1758. XStandard
  1759. X.Tn MIDI
  1760. XFiles
  1761. X.No ( Tn SMF Ns No ).
  1762. XThey are:
  1763. X.Bl -tag -width "midivartofix" -offset indent
  1764. X.It Nm midiconfig
  1765. XChanges configuration values in a 
  1766. X.Tn SMF .
  1767. X.It Nm midifixtovar
  1768. XConverts fixed length integers to
  1769. X.Tn SMF
  1770. Xvariable
  1771. Xlength values.
  1772. X.It Nm midifree
  1773. XFrees the space used by
  1774. X.Tn SMF Ns No 's.
  1775. X.It Nm midiget
  1776. XGets one event from a track in a
  1777. X.Tn SMF .
  1778. X.It Nm midimake
  1779. XCreates an empty
  1780. X.Tn SMF .
  1781. X.It Nm midimerge
  1782. XMerges multiple
  1783. X.Tn SMF
  1784. Xtracks
  1785. Xto one track.
  1786. X.It Nm midiplayable
  1787. XChecks to see if a
  1788. X.Nm
  1789. Xto
  1790. X.Tn MIDI
  1791. Xdevice
  1792. Xinterface was included.
  1793. XIf so,
  1794. X.Tn SMF Ns No 's
  1795. Xcan be
  1796. Xplayed and recorded.
  1797. X.It Nm midiput
  1798. XAppends an event to a track in a
  1799. X.Tn SMF .
  1800. X.It Nm midiread
  1801. XReads a
  1802. X.Tn SMF
  1803. Xfrom an open file descriptor.
  1804. X.It Nm midirewind
  1805. XResets a
  1806. X.Tn SMF
  1807. Xto its beginning.
  1808. X.It Nm miditiming
  1809. XGets the timing portion of a
  1810. X.Tn SMF
  1811. Xevent.
  1812. XThis only exists for backward compatibility
  1813. Xwith 0.1 and will soon disappear.
  1814. X.It Nm midivartofix
  1815. XConverts a
  1816. X.Tn SMF
  1817. Xvariable length value to a fixed
  1818. Xlength integer.
  1819. X.It Nm midiwrite
  1820. XWrites a
  1821. X.Tn SMF
  1822. Xto an open file descriptor.
  1823. X.It Nm tclmversion
  1824. XReports the
  1825. X.Tn TCLM
  1826. Xversion number.
  1827. X.El
  1828. X.Pp
  1829. XThere are also three commands available for playing
  1830. Xand recording
  1831. X.Tn SMF Ns No s.
  1832. XSince they are dependent on
  1833. X.Tn MIDI
  1834. Xhardware
  1835. Xthese commands will only be available if a
  1836. X.Nm
  1837. Xto driver interface was written and compiled into
  1838. X.Nm Ns .
  1839. XThe
  1840. X.Xr midiplayable 3
  1841. Xcommand
  1842. Xcan be used to check for these extensions.
  1843. XThese commands are:
  1844. X.Bl -tag -width midirecord -offset indent
  1845. X.It Nm midiplay
  1846. XPlay an
  1847. X.Tn SMF .
  1848. X.It Nm midirecord
  1849. XRecord to an
  1850. X.Tn SMF .
  1851. X.It Nm midistop
  1852. XStop an
  1853. X.Tn SMF
  1854. Xthat is currently playing or recording
  1855. Xin the background.
  1856. XIf the process was recording,
  1857. X.Xr midistop 3
  1858. Xcollects the recorded data.
  1859. X.El
  1860. X.Sh SEE ALSO
  1861. X.Xr midiconfig 3 ,
  1862. X.Xr midifixtovar 3 ,
  1863. X.Xr midifree 3 ,
  1864. X.Xr midiget 3 ,
  1865. X.Xr midimake 3 ,
  1866. X.Xr midimerge 3 ,
  1867. X.Xr midiplay 3 ,
  1868. X.Xr midiplayable 3 ,
  1869. X.Xr midiput 3 ,
  1870. X.Xr midiread 3 ,
  1871. X.Xr midirecord 3 ,
  1872. X.Xr midirewind 3 ,
  1873. X.Xr midistop 3 ,
  1874. X.Xr miditiming 3 ,
  1875. X.Xr midivartofix 3 ,
  1876. X.Xr midiwrite 3 ,
  1877. X.Xr tclmversion 3
  1878. X.Sh AUTHORS
  1879. X.Bl -item -compact
  1880. X.It
  1881. XJohn Ousterhout - ouster@cs.berkeley.edu for the
  1882. X.Tn TCL
  1883. Xstuff
  1884. X.It
  1885. XMike Durian - durian@advtech.uswest.com for the
  1886. X.Tn MIDI
  1887. Xstuff
  1888. X.El
  1889. END_OF_FILE
  1890.   if test 3089 -ne `wc -c <'tclm-1.0/doc/tclm.1'`; then
  1891.     echo shar: \"'tclm-1.0/doc/tclm.1'\" unpacked with wrong size!
  1892.   fi
  1893.   # end of 'tclm-1.0/doc/tclm.1'
  1894. fi
  1895. if test -f 'tclm-1.0/m1to0' -a "${1}" != "-c" ; then 
  1896.   echo shar: Will not clobber existing file \"'tclm-1.0/m1to0'\"
  1897. else
  1898.   echo shar: Extracting \"'tclm-1.0/m1to0'\" \(1268 characters\)
  1899.   sed "s/^X//" >'tclm-1.0/m1to0' <<'END_OF_FILE'
  1900. X#!/usr/local/bin/tclm -f
  1901. Xif {[string compare [lindex $argv 0] -f] == 0} {
  1902. X    set argc [expr {$argc - 2}]
  1903. X    set argv [lrange $argv 2 end]
  1904. X}
  1905. X
  1906. Xif {$argc > 2} {
  1907. X    puts stderr "usage: m1to0 [infile [outfile]]"
  1908. X    exit 1
  1909. X}
  1910. Xset in_file stdin
  1911. Xset out_file stdout
  1912. Xif {$argc > 0} {
  1913. X    set in_file_name [lindex $argv 0]
  1914. X    if {[catch {open $in_file_name "r"} in_file]} {
  1915. X        puts stderr "Couldn't open $in_file_name: $in_file"
  1916. X        exit 1
  1917. X    }
  1918. X    if {$argc > 1} {
  1919. X        set out_file_name [lindex $argv 1]
  1920. X        if {[catch {open $out_file_name "w"} out_file]} {
  1921. X            puts stderr "Couldn't open $out_file_name: $out_file"
  1922. X            exit 1
  1923. X        }
  1924. X    }
  1925. X}
  1926. X
  1927. Xif {[catch {midiread $in_file} in_mfile]} {
  1928. X    puts stderr "Couldn't read MIDI file: $in_mfile"
  1929. X    exit 1
  1930. X}
  1931. X
  1932. Xset num_tracks [midiconfig $in_mfile tracks]
  1933. X
  1934. Xfor {set i 0} {$i < $num_tracks} {incr i} {
  1935. X    lappend track_list "$in_mfile $i 1"
  1936. X}
  1937. X
  1938. Xset out_mfile [midimake]
  1939. Xmidiconfig $out_mfile format 0
  1940. Xmidiconfig $out_mfile tracks 1
  1941. Xmidiconfig $out_mfile division [midiconfig $in_mfile division]
  1942. X
  1943. Xset delta [midimerge "$out_mfile 0" $track_list 0]
  1944. Xmidiput $out_mfile 0 $delta metaeot
  1945. X
  1946. Xif {[catch {midiwrite $out_mfile $out_file} err]} {
  1947. X    puts stderr "Couldn't write format 0 MIDI file: $err"
  1948. X    exit 1
  1949. X}
  1950. Xmidifree $in_mfile
  1951. Xmidifree $out_mfile
  1952. Xclose $in_file
  1953. Xclose $out_file
  1954. Xexit 0
  1955. END_OF_FILE
  1956.   if test 1268 -ne `wc -c <'tclm-1.0/m1to0'`; then
  1957.     echo shar: \"'tclm-1.0/m1to0'\" unpacked with wrong size!
  1958.   fi
  1959.   chmod +x 'tclm-1.0/m1to0'
  1960.   # end of 'tclm-1.0/m1to0'
  1961. fi
  1962. if test -f 'tclm-1.0/mlib/DEVICES' -a "${1}" != "-c" ; then 
  1963.   echo shar: Will not clobber existing file \"'tclm-1.0/mlib/DEVICES'\"
  1964. else
  1965.   echo shar: Extracting \"'tclm-1.0/mlib/DEVICES'\" \(1430 characters\)
  1966.   sed "s/^X//" >'tclm-1.0/mlib/DEVICES' <<'END_OF_FILE'
  1967. X  So you want to write an interface between tclm and your
  1968. Xfavorite MIDI driver.  I must first warn you of a few caveats.
  1969. XThough I've tried to avoid it, I guessing that the interface
  1970. Xhooks I've set up are geared towards MPU401 compatible
  1971. Xdrivers.  This wasn't done intentionally, it's just I don't
  1972. Xknow anything about SoundBlasters or other cards and don't
  1973. Xhave any idea how the interface is designed.
  1974. X  It is also possible that the device hooks a oriented at
  1975. Xthe BSD/386 driver.  Again I tried to avoid it, but it is
  1976. Xthe only driver I am familiar with.
  1977. X  Well, enough warnings, this is what you have to do.  Just
  1978. Xcreate a file containing all the routines listed in mdevice.h
  1979. Xand fill them in.  Some assumptions were made when I decided
  1980. Xto make this routines the interface points.
  1981. X  Assumption one is that the midi device is only one descriptor.
  1982. XThis might seem like a basic assumption, but it was not the case
  1983. Xwith the old BSD/386 MPU-401 driver.  BTW, the old driver is no
  1984. Xlong supported.
  1985. X  Assumption number two isn't too bad.  I've assumed the device
  1986. Xcan make use of the reltempo parameter to the init_midi_device
  1987. Xroutine.  If it can't, then just ignore it.
  1988. X  Ok, I think that's it, otherwise the routines should allow
  1989. Xsome bit of flexibility in actual implementation.  Here are
  1990. Xthe routines, what they should do and their parameters.
  1991. X  See the tclm_interfaces(3) man page for information about
  1992. Xthe routines you need to write.
  1993. END_OF_FILE
  1994.   if test 1430 -ne `wc -c <'tclm-1.0/mlib/DEVICES'`; then
  1995.     echo shar: \"'tclm-1.0/mlib/DEVICES'\" unpacked with wrong size!
  1996.   fi
  1997.   # end of 'tclm-1.0/mlib/DEVICES'
  1998. fi
  1999. if test -f 'tclm-1.0/mlib/mdevice.h' -a "${1}" != "-c" ; then 
  2000.   echo shar: Will not clobber existing file \"'tclm-1.0/mlib/mdevice.h'\"
  2001. else
  2002.   echo shar: Extracting \"'tclm-1.0/mlib/mdevice.h'\" \(2424 characters\)
  2003.   sed "s/^X//" >'tclm-1.0/mlib/mdevice.h' <<'END_OF_FILE'
  2004. X/*-
  2005. X * Copyright (c) 1993 Michael B. Durian.  All rights reserved.
  2006. X *
  2007. X * Redistribution and use in source and binary forms, with or without
  2008. X * modification, are permitted provided that the following conditions
  2009. X * are met:
  2010. X * 1. Redistributions of source code must retain the above copyright
  2011. X *    notice, this list of conditions and the following disclaimer.
  2012. X * 2. Redistributions in binary form must reproduce the above copyright
  2013. X *    notice, this list of conditions and the following disclaimer in the
  2014. X *    documentation and/or other materials provided with the distribution.
  2015. X * 3. All advertising materials mentioning features or use of this software
  2016. X *    must display the following acknowledgement:
  2017. X *    This product includes software developed by Michael B. Durian.
  2018. X * 4. The name of the the Author may be used to endorse or promote 
  2019. X *    products derived from this software without specific prior written 
  2020. X *    permission.
  2021. X *
  2022. X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 
  2023. X * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  2024. X * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  
  2025. X * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  2026. X * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  2027. X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  2028. X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  2029. X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  2030. X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  2031. X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  2032. X * SUCH DAMAGE.
  2033. X */
  2034. X/*
  2035. X * mdevice.h,v 1.5 1993/05/05 01:34:17 durian Exp
  2036. X */
  2037. X#ifndef MDEVICE_H
  2038. X#define MDEVICE_H
  2039. X
  2040. Xtypedef enum {PLAY, RECORD, PLAYRECORD} PlayMode;
  2041. X
  2042. Xextern int play_tracks _ANSI_ARGS_((int dev, TCHUNK *tracks, int *indices,
  2043. X    int num, int repeat));
  2044. Xextern int record_tracks _ANSI_ARGS_((int dev, TCHUNK *p_tracks, int *indices,
  2045. X    int p_num, TCHUNK *r_track, int repeat));
  2046. Xextern int stop_processing _ANSI_ARGS_((int dev));
  2047. Xextern int open_midi_device _ANSI_ARGS_((PlayMode mode));
  2048. Xextern int init_midi_device _ANSI_ARGS_((int dev, HCHUNK *hd, double reltempo));
  2049. Xextern int start_midi_device _ANSI_ARGS_((int dev, PlayMode mode));
  2050. Xextern int stop_midi_device _ANSI_ARGS_((int dev, PlayMode mode));
  2051. Xextern int close_midi_device _ANSI_ARGS_((int dev));
  2052. X
  2053. X#endif
  2054. END_OF_FILE
  2055.   if test 2424 -ne `wc -c <'tclm-1.0/mlib/mdevice.h'`; then
  2056.     echo shar: \"'tclm-1.0/mlib/mdevice.h'\" unpacked with wrong size!
  2057.   fi
  2058.   # end of 'tclm-1.0/mlib/mdevice.h'
  2059. fi
  2060. if test -f 'tclm-1.0/mplay' -a "${1}" != "-c" ; then 
  2061.   echo shar: Will not clobber existing file \"'tclm-1.0/mplay'\"
  2062. else
  2063.   echo shar: Extracting \"'tclm-1.0/mplay'\" \(3284 characters\)
  2064.   sed "s/^X//" >'tclm-1.0/mplay' <<'END_OF_FILE'
  2065. X#!/usr/local/bin/tclm -f
  2066. X#
  2067. X# Copyright (c) 1993 Michael B. Durian.  All rights reserved.
  2068. X#
  2069. X# Redistribution and use in source and binary forms, with or without
  2070. X# modification, are permitted provided that the following conditions
  2071. X# are met:
  2072. X# 1. Redistributions of source code must retain the above copyright
  2073. X#    notice, this list of conditions and the following disclaimer.
  2074. X# 2. Redistributions in binary form must reproduce the above copyright
  2075. X#    notice, this list of conditions and the following disclaimer in the
  2076. X#    documentation and/or other materials provided with the distribution.
  2077. X# 3. All advertising materials mentioning features or use of this software
  2078. X#    must display the following acknowledgement:
  2079. X#    This product includes software developed by Michael B. Durian.
  2080. X# 4. The name of the the Author may be used to endorse or promote 
  2081. X#    products derived from this software without specific prior written 
  2082. X#    permission.
  2083. X#
  2084. X# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 
  2085. X# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  2086. X# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  
  2087. X# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  2088. X# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  2089. X# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  2090. X# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  2091. X# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  2092. X# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  2093. X# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  2094. X# SUCH DAMAGE.
  2095. X
  2096. X# mplay,v 1.7 1993/05/06 21:42:22 durian Exp
  2097. X
  2098. Xif {! [midiplayable]} {
  2099. X    puts stderr [concat "Cannot play.  Tclm was not compiled with the " \
  2100. X        "play functionality turned on."]
  2101. X    exit 1
  2102. X}
  2103. X
  2104. Xset repeat 0
  2105. Xset tracks {}
  2106. Xset speed 1.0
  2107. Xset filenames {}
  2108. X
  2109. Xproc parse_arg {args} {
  2110. X    global repeat
  2111. X    global tracks
  2112. X    global speed
  2113. X    global filenames
  2114. X
  2115. X    # strip away extra {}'s
  2116. X    set args [lindex $args 0]
  2117. X    set num_args [llength $args]
  2118. X    if {$num_args > 1 && [string compare [lindex $args 0] "-f"] == 0} {
  2119. X        set i 2
  2120. X    } else {
  2121. X        set i 0
  2122. X    }
  2123. X    for {} {$i < $num_args} {incr i} {
  2124. X
  2125. X        set arg [lindex $args $i]
  2126. X        case $arg in \
  2127. X        -repeat {
  2128. X            set repeat 1
  2129. X        } -tracks {
  2130. X            set tracks [lindex $args [incr i]]
  2131. X        } -speed {
  2132. X            set speed [lindex $args [incr i]]
  2133. X        } default {
  2134. X            lappend filenames $arg
  2135. X        }
  2136. X    }
  2137. X}
  2138. X
  2139. Xparse_arg $argv
  2140. X
  2141. Xif {$repeat} {
  2142. X    set repeat repeat
  2143. X} else {
  2144. X    set repeat ""
  2145. X}
  2146. X
  2147. Xif {[llength $tracks] != 0} {
  2148. X    set tracks "tracks \"$tracks\""
  2149. X} else {
  2150. X    set tracks ""
  2151. X}
  2152. X
  2153. Xif {$speed != 1.0} {
  2154. X    set speed "reltempo $speed"
  2155. X} else {
  2156. X    set speed ""
  2157. X}
  2158. X
  2159. Xif {[llength $filenames] == 0} {
  2160. X    set midi_file stdin
  2161. X    set done 0
  2162. X    while {1} {
  2163. X        if {[catch {midiread $midi_file} mfile]} {
  2164. X            if {[string compare "$mfile" "EOF"] == 0} {
  2165. X                exit 0
  2166. X            } else {
  2167. X                puts stderr $mfile
  2168. X                exit 1
  2169. X            }
  2170. X        }
  2171. X        eval "midiplay $repeat $tracks $speed $mfile"
  2172. X        midifree $mfile
  2173. X    }
  2174. X} else {
  2175. X    foreach file $filenames {
  2176. X        if {[catch {open $file} midi_file]} {
  2177. X            puts stderr $midi_file
  2178. X            exit 1
  2179. X        }
  2180. X        if {[catch {midiread $midi_file} mfile]} {
  2181. X            puts stderr $mfile
  2182. X            exit 1
  2183. X        }
  2184. X        eval "midiplay $repeat $tracks $speed $mfile"
  2185. X        midifree $mfile
  2186. X        close $midi_file
  2187. X    }
  2188. X}
  2189. Xexit 0
  2190. END_OF_FILE
  2191.   if test 3284 -ne `wc -c <'tclm-1.0/mplay'`; then
  2192.     echo shar: \"'tclm-1.0/mplay'\" unpacked with wrong size!
  2193.   fi
  2194.   chmod +x 'tclm-1.0/mplay'
  2195.   # end of 'tclm-1.0/mplay'
  2196. fi
  2197. if test -f 'tclm-1.0/mseq.BNF' -a "${1}" != "-c" ; then 
  2198.   echo shar: Will not clobber existing file \"'tclm-1.0/mseq.BNF'\"
  2199. else
  2200.   echo shar: Extracting \"'tclm-1.0/mseq.BNF'\" \(829 characters\)
  2201.   sed "s/^X//" >'tclm-1.0/mseq.BNF' <<'END_OF_FILE'
  2202. X  I can't quite remember proper BNF format but here's a try.
  2203. XThings in *'s are literals.
  2204. X  I'm not going to define numbers or filenames.  Guess.
  2205. X
  2206. Xmseq_file :== section+
  2207. Xsection :== *track* statement+
  2208. Xstatement :== labeled sequence | filename | command | comment
  2209. Xlabeled seuqence :== label sequence
  2210. Xlabel :== name*:*
  2211. Xsequence :== block | filename
  2212. Xblock :== *{* sequence+ *}*
  2213. Xcommand :== *repeat* label | *repeat* label multiplier
  2214. Xmultiplier :== number
  2215. Xcomment :== *#* anything to end-of-line
  2216. X
  2217. X  Essentially what you want is stuff like:
  2218. X
  2219. Xtrack
  2220. X# This is track 1
  2221. Xpat1.mid
  2222. Xpat2.mid
  2223. XA: {
  2224. X  pat3.mid
  2225. X  B: { # block B:
  2226. X    pat4.mid
  2227. X    pat5.mid
  2228. X  }
  2229. X  pat6.mid
  2230. X  repeat B: 3
  2231. X}
  2232. Xpat7.mid
  2233. Xpat8.mid # pattern 8
  2234. X
  2235. X# This is track 2
  2236. Xtrack
  2237. Xpat1.mid
  2238. Xpat2.mid
  2239. XA: {
  2240. X  pat3.mid
  2241. X  pat4.mid
  2242. X  B: pat5.mid
  2243. X  pat6.mid
  2244. X  repeat B: 6
  2245. X}
  2246. Xpat7.mid
  2247. Xrepeat A:
  2248. END_OF_FILE
  2249.   if test 829 -ne `wc -c <'tclm-1.0/mseq.BNF'`; then
  2250.     echo shar: \"'tclm-1.0/mseq.BNF'\" unpacked with wrong size!
  2251.   fi
  2252.   # end of 'tclm-1.0/mseq.BNF'
  2253. fi
  2254. if test -f 'tclm-1.0/tclmPlay.h' -a "${1}" != "-c" ; then 
  2255.   echo shar: Will not clobber existing file \"'tclm-1.0/tclmPlay.h'\"
  2256. else
  2257.   echo shar: Extracting \"'tclm-1.0/tclmPlay.h'\" \(2226 characters\)
  2258.   sed "s/^X//" >'tclm-1.0/tclmPlay.h' <<'END_OF_FILE'
  2259. X/*-
  2260. X * Copyright (c) 1993 Michael B. Durian.  All rights reserved.
  2261. X *
  2262. X * Redistribution and use in source and binary forms, with or without
  2263. X * modification, are permitted provided that the following conditions
  2264. X * are met:
  2265. X * 1. Redistributions of source code must retain the above copyright
  2266. X *    notice, this list of conditions and the following disclaimer.
  2267. X * 2. Redistributions in binary form must reproduce the above copyright
  2268. X *    notice, this list of conditions and the following disclaimer in the
  2269. X *    documentation and/or other materials provided with the distribution.
  2270. X * 3. All advertising materials mentioning features or use of this software
  2271. X *    must display the following acknowledgement:
  2272. X *    This product includes software developed by Michael B. Durian.
  2273. X * 4. The name of the the Author may be used to endorse or promote 
  2274. X *    products derived from this software without specific prior written 
  2275. X *    permission.
  2276. X *
  2277. X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 
  2278. X * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  2279. X * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  
  2280. X * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  2281. X * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  2282. X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  2283. X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  2284. X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  2285. X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  2286. X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  2287. X * SUCH DAMAGE.
  2288. X */
  2289. X/*
  2290. X * tclmPlay.h,v 1.3 1993/04/16 15:39:50 durian Exp
  2291. X */
  2292. X#ifndef TCLMPLAY_H
  2293. X#define TCLMPLAY_H
  2294. X
  2295. Xextern void Tclm_InitPlay _ANSI_ARGS_((Tcl_Interp *));
  2296. Xextern int Tclm_MidiPlay _ANSI_ARGS_((ClientData, Tcl_Interp *, int, char **));
  2297. Xextern int Tclm_MidiRecord _ANSI_ARGS_((ClientData, Tcl_Interp *, int,
  2298. X    char **));
  2299. Xextern int Tclm_MidiStop _ANSI_ARGS_((ClientData, Tcl_Interp *, int, char **));
  2300. Xextern void watchdog _ANSI_ARGS_(());
  2301. Xextern void Tclm_CatchStop _ANSI_ARGS_(());
  2302. Xextern int Tclm_ParseTracks _ANSI_ARGS_((Tcl_Interp *, char *, int **));
  2303. X#endif
  2304. END_OF_FILE
  2305.   if test 2226 -ne `wc -c <'tclm-1.0/tclmPlay.h'`; then
  2306.     echo shar: \"'tclm-1.0/tclmPlay.h'\" unpacked with wrong size!
  2307.   fi
  2308.   # end of 'tclm-1.0/tclmPlay.h'
  2309. fi
  2310. echo shar: End of archive 4 \(of 5\).
  2311. cp /dev/null ark4isdone
  2312. MISSING=""
  2313. for I in 1 2 3 4 5 ; do
  2314.     if test ! -f ark${I}isdone ; then
  2315.     MISSING="${MISSING} ${I}"
  2316.     fi
  2317. done
  2318. if test "${MISSING}" = "" ; then
  2319.     echo You have unpacked all 5 archives.
  2320.     rm -f ark[1-9]isdone
  2321. else
  2322.     echo You still must unpack the following archives:
  2323.     echo "        " ${MISSING}
  2324. fi
  2325. exit 0
  2326. exit 0 # Just in case...
  2327.