History of changes for microabc (C) 2006-2008 Hudson Lacerda

2008-01-10

New command `replacenominal:' to be used along with `replaceabc:' or
	`replacesagittal:'.
`inspect:' (-I) cancels MIDI checking for `testfile:' (-t).
	This is required when the replacement is not pure ABC, like
	when using `replace:' or `replacesagittal:'

--------------------------------------------------

2008-01-08

Improve implementation of `FOR_PS:' and `FOR_MIDI:'.
	See examples/ratios/ratios.txt and
	examples/miracle/miracle.txt .
`outputfor:' now works. Valid arguments are MIDI or PS.
	It selects one of the FOR_PS:/FOR_MIDI: blocks to interpret.
`diatonic:' and `chromatic:' don't set `den:0' anymore.
`sagittalapprox:' now works for whatever kind of output (chromatic,
	replace, diatonic and microtonal).
Revise nearestdiat() (interval.c).
sagittal.fmt is now sagittal 2.0d8
	(it was d7, although sagittal-2.fmt already was d8.)
For DOS/Windows users:
	Compiled and included binaries for DOS:
		microabc.exe and abcalias.exe
	cwsdpmi.exe and csdpmi4b.zip included (for DOS).
	compile.bat included (for DOS).
Reduce memory usage (DOS-compatible):
	Reduce back the size of MAX_SCALE_SIZE, but now it is 1200.
	Reduce size of buffer textbuf[][] (microabc.[c,h]).
A few internal changes in abc2alias (just to compile for DOS).
Example file in folder Sagittal/ on how to install the font on Debian
	GNU+Linux (using defoma).
Changes in the tutorial.

--------------------------------------------------

2007-12-31

New command-line flag -E (`Easy Sagittal'):
	Same effect as the combination of -i- -S -e -oEasyFile.abc .
	It should be used along with -P<abpfile> or -M<abpfile>.
	Example:
		microabc -E -PMySagittalMusic.abp
Command-line flag -o now accepts -o- to output to stdout.
normalizesagittal() doesn't convert the accidentals to longpure
	anymore.
New section in the tutorial. Tutorial now has hyperlinks.
New command-line option -e to embed Sagittal (pt3) font (with
	mixed/pure support) when preprocessing Sagittal for
	PostScript.
New source file `sagfont.c' to embed the Sagittal font.
	(It takes almost 2/3 of the current size of the executable!)
Default `modnumsep:' separator (for octave numbers) is now a dot (.).
!COMPATIBILITY! `keymode:' renamed to `key:' (similar to Scala `key'
	command).
Read `scl:' fields even when there are more scale degrees (input
	lines) than a forced `modulo:'.
Revise CYGWIN conditionals (tested only on Debian GNU+Linux).
Literal mode does not override other modes defined later.
More changes and reviews of output-mode identification (more tests to
	do).
`abcm2ps:' was not working properly (omitting output some cases).
Test file may be generated and preprocessed in a single run, for
	example:
	microabc -iInput.txt -tTest.abp -PTest.abp -oTestPS.abc
	microabc -iInput.txt -tTest.abp -MTest.abp -oTestMID.abc
Accept spaces in file names. However do not convert the characters '\'
	or '/' in the paths.
Accept longer file names (255 chars).
Stop if the outfile is the same as an input file.
Fix bug in `basefreq:'.
`compile.bat' is not included (BTW, it was missing in later release).

--------------------------------------------------

2007-12-28

New experimental commands (SUBJECT TO CHANGES OR EVEN REMOVAL):
	FOR_PS: <BEGIN or END>
	FOR_MIDI: <BEGIN or END>
		Enclose a block of options to be conditionally
		interpreted or ignored according to the output type.
	outputfor: <PS or MIDI>
		Select the type of output for Sagittal preprocessing.
		Might be useful to mix 8th-tone-quantised and Sagittal
		score versions of a music (den:4 abcm2ps:4 outputfor:MIDI).
		NOTE: Use den <= 30 to avoid conflict between the
		MIDI accidentals and the Sagittal accidentals.
			ADDITIONALLY:
		Select one of the two blocks of conditional commands
		defined with FOR_PS: or FOR_MIDI. Must be used BEFORE
		the blocks in the input file.
		Default is MIDI.
		WARNING: Has no effect for blocks at command line
		yet!!! Be careful when use this command.
New command `keymode:'.
Added `compile.bat' (for FreeDos).
More options in `reduction:'.
	New default is 2.
New command `testfile:' and command-line flag -t.
Fix bug: `dumbacc:-1' did not output ^^ ^ = _ __ .
Macros are stored in the memory even when internal preprocessor is
	not used. Maximum of macro definitions is still 4096.
Change the 1/8-tone PostScript accidentals (`abcm2ps:4').
	3/8-tone accidentals now are based on flat and sharp (they
	were based on quartertone accidentals).
output_pssacc() now outputs flat/sharp PS code for eighth-tones.
`lineartemp:' for Sagittal assumes that `sclmod:' or formal octave is
	an octave with approx. 1200.0 cents and that the generator is
	a fifth with approx. 702.0 cents.
Some changes in `microabc.txt'.
Sagittal more flexible: New command `sagittalbasefreq:' to set the
	reference frequency for Sagittal (when preprocessing for
	MIDI).
New command `scalakbm:' to generate Scala *.kbm mapping file.
!COMPATIBILITY! `afreq:' now has opposite effects for
	`abcm2ps:<non-zero>' and `abcm2ps:0' (or `abcm2ps:' absent).
New command-line option -I for testings (inspect scale data and
	Sagittal approximation).
Internal changes: new functions abc2freq() / freq2abc().
Sagittal preprocessing for MIDI accepts `abcm2ps:' and outputs code
	for all possible PS accidentals (mapped to the given abcm2ps
	denominator).
MAX_NUMERATORS (max number of abcm2ps accidental definitions)
	increased from 256 to 512. Note that abcm2ps accepts a maximum
	of 31 microtonal accidentals, but this refers to the
	accidentals actually used in a single ABC tune.
MAX_SCALE_SIZE increased to 2048 (was 1024).
Better (hope) identification of output modes (literal, chromatic,
	diatonic, microtonal).  There are still redundances in the
	code.
	Function abc() uses one parameter more.
Replace isblank() with isspace().
Rename fmod() to f_mod().
Use round() instead of rint().
Change/add CYGWIN macros in *.h files.
Fix `outfreq:1' (not clean yet).

--------------------------------------------------

2007-12-22

Fix bug in sagcode2abc(): bad octave indicator in [Cbb] (for MIDI).
Fix bug in print_ps_accid(): loop when large `den:' like in:
printf "A\nB\nC\n" | microabc range:\ -5\ 7 alias:0 abcm2ps:4 equaltemp:29 den:1000
	(buffer str[] was too short).
Fix crash when too many octave indicators in abc() (Not clean yet).
Fix usage of strncat();
Remove some obsolete files from the distro.

--------------------------------------------------

2007-12-21

`modnumsep:' may define a character as separator.
Changes in the tutorial.
Fix crash when right delimiter not found in preprocessing.
Replace some ocurrences of strcat() / strcpy with strncat() /
	strncpy().
Change interpretation of some Sagittal accidentals for PostScript:
	New variable `avoidmixedsag' (`microabc.c') to set accidentals
	b bb # and x always as pure Sagittal notation. No user control
	currently. For traditional accidentals, use
	`sagittal-mixed.fmt', or else (ex. on pitch "A"):
		[35 A] for traditional flat (b);
		[33 A] for traditional double flat (bb);
		[253 A] for traditional sharp (#);
		[255 A] for traditional double sharp (x).
	New member `name' in structures `sagaccid' (`sagittal.h');
	Change `sagittal.c' accordingly.
Format files (.fmt) updated for recent versions of abcm2ps.
No more redundances in PS code when den:4 abcm2ps:4 psacc:1.
	print_ps_accid(): if(m1==m2) continue;
Function readscalafile() more versatile:
	Accept integers as ratios;
	Read and check number of pitches;
Fixed a bug in output():
	i=print_ps_accid(fp);
	(Is was i=print_ps_accid(stdout);)
Fix bug in get_option() eating characters like in:
	printf "A\nB\nc" | microabc range:\ -5\ 7  aliasabc:0
	(Bad use of sscanf() -- should check if return value > 0);
Option `abcm2ps:' overrides `den:' if `den:' > 256
In prepare(), `centre:' and `center:' have no effect when using
	`replace:'.
microabc binary for GNU/Linux/i386 included in the package.
Conditional use of long double functions:
	When compiling for CygWin, do define the symbol
	CYGWIN when compiling microabc. This will
	replace powl(), exp2l() and log2l()
	with pow(), exp2() and log2() respectively.

--------------------------------------------------

2006-07-29

Fixed bug: -S was not working properly.

--------------------------------------------------

2006-07-22

Added musical examples in `tools/music'.
Rename `abc2macro' to `abc2alias'.
`abc2alias' with an argument split chords as voice overlay.
	(Cannot have in-chord decorations or durations.)
Don't process Sagittal pitches as default. -- COMPATIBILITY ISSUE!
Preprocessor can be controlled with a new command line option -S.

--------------------------------------------------

2006-07-16

Reformulate and include a new section to the tutorial.
Added more instructions (Sagittal font/abcm2ps .fmt dir) in `INSTALL'.
New tool `abc2macro' (`tools/abc2macro.c') to convert ABC files into
	ABP files with Sagittal pitches. Still very basic, it cannot
	deal with accidental omission conventions. Every note must
	have its own accidental. Omitted accidentals are considered as
	naturals when getting MIDI rendering (they are invisible
	naturals).
`sagittal.c': Avoid infinite loop in sagcode2abc(). (Not solved yet.)
	Loop when preprocessing EDOs like 4-EDO, 6-EDO or 8-EDO.

--------------------------------------------------

2006-07-15

Small change in `microabc.txt' (``Built-in preprocessor'' title).
Revise examples for 31et (`examples/31et/').

--------------------------------------------------

2006-07-14

Revised `sagittaloct:' (second parameter can transpose octaves).
Added `aliassagittal:'.
Added `replacesagittal:'.
Added `microtonal:'.
Added `include:', to insert .snt files (only works inside ABP file
	during preprocessing).

--------------------------------------------------

2006-07-13

`microabc.c': Handle blank spaces in get_option() and preprocess().
Sagittal examples updated to new syntax.
Treat EOL in preprocessor.
By default, in Sagittal pitches, a dot (.) is always Sagittal grave
	accent, and minus (-) is always Wilson's minus accidental.
	Negative octave numbers are NOT ALLOWED by default.
	However, a blank space or a colon : can be used to separate
	octave numbers/modifiers. --  COMPATIBILITY ISSUE!
When first argument for `sagittaloct:' is zero (0), octaves can be
	negative, minus (-) is interpreted primarily as a negative
	signal rather than Wilson's minus accidental, and a dot (.)
	can preced the octave number as separator. -- COMPATIBILITY
	ISSUE!
``Don't print accidental'' is now a leading colon in Sagittal pitches.
	It was backquote (`) -- COMPATIBILITY ISSUE! 
Fixed `dumbacc:' relation with internal preprocessor.
Output proper ABC pitches when `modnum:1' (bugfix).
Sagittal octave index can be given RELATIVE TO MIDDLE [C] by appending
	commas ,, or backquotes `` (But NOT the ABC apostrophes '').
	Ex.:
	[C] [C,] [C`]
	[C] [C4] [C6]
Added `sagittaloct:' to set relative octave in Sagittal.
	Default central octave was 0, now is 5 - COMPATIBILITY ISSUE!
`sagittal*.fmt': PostScript operators /sagpure and /sagmixed to change
	between the two forms without need to use inverted accidentals
	(like _/196 for ^/196 and so). See inside the file
	`sagittal-examples.abp', example 5.

--------------------------------------------------

2006-07-10

More bug fixes: 
	Wrong interpretation of pitches like ^1023/4096C;
	Error dealing with negative octaves like in [C!)-2].
	Was not handling accidental macros in preprocessor.
		TODO: check what to do when `dumbacc:'.
Added `procsag:'.
Added `procmac:'.

--------------------------------------------------

2006-07-09

Added some `sagittal-examples.*'.
`sagittal.*': sagittal accidentals can be visible or not in score.
	The character ` tells microabc to don't show the accidental
	in the PostScript score (-P). It (`) should be the first
	non-blank character in a Sagittal pitch:
	[`C^] [ ` vD ] [`134E.-2]
`sagittal.c': fix quantisation in sagcode2abc().
Fix bad tempering for Sagittal when using `lineartemp:'.
Fix example `sagittal.abp' (mixed/pure notation).
Handle Tartini/Couper/Wilson accidentals + - > < <b and ># for MIDI.
	Not implemented: ! | . '

--------------------------------------------------

2006-07-05

`interval.c': Fix wrong declarations of some math functions.
Option -M to preprocess for MIDI (same as -p).
Can read commands from .abp file with the format:
	%%microabc: <command> [<parameters> ...]
	TODO: skip spaces; it only works with exactly one space between
	`%%microabc:' and the command.
	Ex.:
	%%microabc: equaltemp:72

--------------------------------------------------

2006-07-03

Continue work on Sagittal (parse some pitches).
	Spaces can be used inside Sagittal pitch - is that good?
	`equaltemp:' tempers all Sagittal pitches/accidentals.
	`lineartemp:' tempers 2/1 and 3/1.
	Tempered octaves don't affect nominals yet -- don't do it!!!
	12-relative not implemented yet (Sagittal fifth is always the
	best fifth approximation).
	Accidentals in range 33-39 and 249-255 may not work for MIDI.
	Accept reversed mixed symbols like #\ or \# .
Preprocessor can parse Sagittal pitches and output ABC code for
	MIDI or PS rendering.
Added command line option `-P' (for ABC to PS).
Command line option `-p' now is for ABC to MIDI.
`sagittal.h': sagittal accents stored as char[] (not int[]).
Fix division-by-zero exception when modulo==0.
Avoid some successive ..2cent2rat2cent.. operations
	(equaltempc() and lineartempc() functions).
Add `lineartemp:' (to generate linear temperaments).
`scala:' output with more decimal digits.
`interval.c' functions more precise.
Fixed `Sagittal/gensagdata.c'.
Updated `sagdata.h', `sagdata.c'.

--------------------------------------------------

2006-06-30

Continue Sagittal implementation.
	TODO: gensagdata.c -> generate alternative ascii format
			for use with YWNUMX as nominals.
Command line option `-i-' for no input stream.
`equaltemp:' is applied to Sagittal accidentals and `%%MIDI snt'
	nominals. (Don't round to nearest pitch in temperaments.)
Update `INSTALL'.
Internal preprocessor includes `%%MIDI snt' commands in all
	ABC tune headers just before `K:' field.
	(Tune header must have a `X:' and a `K:' field.)
Internal preprocessor can handle Sagittal accidentals in decimal
	character-code form, like _/134E or ^/168f and convert them to
	microtonal ABC notation for MIDI rendering.
Purge the code.

--------------------------------------------------

2006-06-28

Update `INSTALL'.
Add folder `tools', `gera_ajuda.c' and `gera_html.sh'.
Start to implement support for Sagittal.
Add `gensagdata.c' which generates `sagdata.c'.
Reorganize the source code in a set of files:
	microabc.h
	microabc.c
	interval.h
	interval.c
	sagittal.h
	sagittal.c
	sagdata.h
	sagdata.c
Revise `Sagittal/Sagittal-HowToInstall.txt'.
Change HTML to include a link to home page.
Start preprocessor implementation (option -p).
	Preprocessor can deal with `defacc:' and `dumbacc:',
	but `name:' is not handled, it is just output.

--------------------------------------------------

2006-06-23

Added file `Sagittal.pfb' (missing in previous release.)

--------------------------------------------------

2006-06-22

New Bohlen-Pierce example `examples/bohlen/special.ps' using `bp.fmt'.
Adaptations to `microabc.txt' so that it could be converted to HTML.
Added HTML documentation `microabc.html'
	(converted with abcAJUDA `gera_ajuda.c' tool);
Fixed `diatonic:1' mode.
`commentmark:' added.
Increased number of macros (MAX_MACROS) (`microabc.c').
Revise sagittal example (`examples/sagittal/sagittal.abc').
Add `sagittal-pfb.fmt' to use an installed Sagittal PS font.
Add Sagittal-2.0d8 PostScript binary/metric font files (.pfb, .afm).
Include some .c tools in `Sagittal/' directory.
Some changes in the tutorial.
`outfreq:' defaults to 0.
`diatonic:' overrides `den:' with 0.

--------------------------------------------------

2006-06-16

Sagittal-2 added.
`/examples/sagittal/' addded (Sagittal-2).
`basefreq:' by default is middle C (pitch 60 with A=440.0Hz).
Bug fix: `readscalafile()' now accept scale name starting with digit.
Fix wrong frequencies shown when output snt/timidity files.
`range:' now can omit second parameter; default is the value of the
	first parameter plus 127.
`outfreq:' disabled when `replace:' or `replaceabc:'.
`transp:' is applied to snt/timidity when showing frequencies (not
	clean yet).

--------------------------------------------------

2006-05-31

`examples/31et' reformulated.
`microabc.txt' has clearer references in `dumbacc:', `defacc:' and
	`replaceabc:'.

--------------------------------------------------

2006-05-24

Fixed a bug (wrong echo lines when empty lines).

--------------------------------------------------

2006-03-15

`sagittal.fmt' is now 24pt and version 1.12.

-------------------------------------------------

2006-03-08

More Sagittal stuff (sagittal-example*, sagittal-list*,
	sagittal-test*).
`sagittal.fmt' with a slightly larger font size (23pt; was 20pt).

-------------------------------------------------

2006-03-02

Accept '\r' (13) and/or '\n' (10) as line terminators.
Fix skipped last line bug.
Added `sagittal.fmt' for accidental glyphs (thanks to Dave Keenan).
Declare all functions.
Fix a call to `output_psacc()' in `output()'.
`equaltemp.c' now accept interval as a fraction.
Fixed (again) a bug in readscalafile().

--------------------------------------------------

2006-02-25

Fixed a bug in readscalafile().

--------------------------------------------------

2006-02-20

Included a short tutorial.
Default range is now -60 to 67 (MIDI).
`inputscl:' added.
`equaltemp:' added.
Set default scale as a meantone one, when no scale data from input.
Change some examples.
`dumbacc:' accidentals are not output by default.

--------------------------------------------------

2006-01-31

Handle `echo:' in command line, adding new line.
More examples (just, 19et, 24et).
`size:' (`mod:')  with parameter 0 cancels previous forced size.
Macro delimiters changed to [ and ] (were { and }) - COMPATIBILITY PROBLEM!
`snt:' added to generate a tuning file for abcm2idi version 1.81
	January 31 2006.

--------------------------------------------------

2006-01-26

Output accidentals like ^4/4 for correct MIDI generation with
	abc2midi.
`defacc:' added.
Fix bug related to `alias:', `aliasabc:', `range:':
	(add function syncalias()).
Don't output frequency 0.0 Hz.
Some examples added (bohlen).

--------------------------------------------------

2006-01-23

Fix bug in nearestdiat() and microabc().
Fix abcm2ps quantization in print_ps_accid().
`abcm2ps:' reset `den:' when `den:' > 256.
`abcm2ps:' now accepts denominators greater than 2,
	but outputs a message.
`psacc:' added.
`reduction:' added.
Change the sample scripts `*.sh'.
`outfreq:' added.
`timidity:' added (tuning file for timidity++).
Fix scl2cents().
`size:' or `mod:' now can override the automatic value anywhere.
`replindex:' added.
`scala:' added (tuning file for scala).
`basefreq:' now accepts a second (optional) parameter.
`echo:' doesn't filter out { } comments.
`fixupdown:' added.
`dumbacc:' added.
`replaceabc:' added.
`aliasabc:' added.
`name:' added.
Command line options.
`replindex:' renamed to `replaceupdn:'.
Sample files (directories examples/bohlen and examples/pythagoras)
Script `micro.sh'.

--------------------------------------------------
