# ~ the PrintChartConfiguration.xml file in the current directory probably contains the following:
# ~
# ~ 
# ~   ../PrintChartPerlCgi/SavedChartXmlFiles/
# ~ 
# ~
# ~ the SavedChartXmlFilesRelativePathname tag is used to tell PrintChart where to save information when it is
# ~ time to write things to disk ... PrintChart has become disk intensive, so this is a very important location
# ~
# ~
# ~ since PrintChart has become disk intensive, every time a form is submitted, PrintChart will save all of the
# ~ information to disk ... when the user has specified a NAME to use for saving, PrintChart will save information
# ~ from that point on to that file ... until a NAME has been specified, PrintChart will save information to a
# ~ temporary file which will have a name that will start with the characters "t_" ... these files need to be deleted occasionally
# ~ or they will end up filling up the drive, so, "t_" files that are over 7 days old get deleted automatically
# ~
# ~
# ~ when the GenerateMidi button is pressed, PrintChart may generate a number of MIDI
# ~ files with a ".mid" extension. These will also fill up the drive and so they will
# ~ also be deleted if they are over 7 days old
# ~
# ~
# ~ the file StringPresets.csv is used to populate the StringPresets
# ~ dropdown ... each line in the file becomes an item in the dropdown
# ~ below, we have 5 examples that might be found in this file
# ~
# ~ 0,6 string guitar,6,0,5,12,8,3,10,5,1,1,1,1,1,1,1,1,1,1
# ~ 1,(B) 7 string guitar,7,0,5,12,8,3,10,5,12,1,1,1,1,1,1,1,1,1
# ~ 2,mandolin,4,0,5,10,3,8,1,1,1,1,1,1,1,1,1,1,1,1
# ~ 3,4 string bass,4,0,8,3,10,5,1,1,1,1,1,1,1,1,1,1,1,1
# ~ 4,5 string bass,5,0,8,3,10,5,12,1,1,1,1,1,1,1,1,1,1,1
# ~
# ~ in each line, the first value is the preset number ... it would
# ~ be advisable to keep these numbers in proper sequence
# ~
# ~ the second value is the string that shows up in the dropdown
# ~
# ~ the third value is the number of strings in the preset
# ~
# ~ the 4th value is ignored now, and is usually set to 0
# ~
# ~ the remaining values are the string starting note values
# ~ for each string going from the high string to the low string
# ~
# ~ the twelve chromatic notes are represented by the values 1-12
# ~ with the value 1 representing a C, and 12 representing a B
# ~
# ~
# ~ the file modes.csv is perhaps the most important file in PrintChart
# ~
# ~ it contains groups of seven lines ... each group represents a particular
# ~ 7 note scale that can be used in various ways in PrintChart
# ~
# ~ the first line in each group represents the base scale, and the 6 lines
# ~ that follow represent the 6 modes of that particular scale
# ~
# ~ if the desire is to use a scale that does not have 7 notes in it, it
# ~ is simply a matter of choosing 2 scales that combine with either an
# ~ AND or OR logic to form the desired scale
# ~
# ~
# ~
# ~ below, we have 2 full scale/modes examples that might be found in this file
# ~
# ~      major,1,,2,,3,4,,5,,6,,7,,"1,5",1
# ~      m+13,1,,2,3,,4,,5,,6,7,,,
# ~      m-9,1,2,,3,,4,,5,6,,7,,,
# ~      maj+11,1,,2,,3,,4,5,,6,,7,,
# ~      dom,1,,2,,3,4,,5,,6,7,,,
# ~      m,1,,2,3,,4,,5,6,,7,,,
# ~      m-5/-9,1,2,,3,,4,5,,6,,7,,,
# ~
# ~      m/maj,1,,2,3,,4,,5,,6,,7,,"6,10",2
# ~      m-9/+13,1,2,,3,,4,,5,,6,7,,,
# ~      maj+5/+11,1,,2,,3,,4,,5,6,,7,,
# ~      dom+11,1,,2,,3,,4,5,,6,7,,,
# ~      dom-13,1,,2,,3,4,,5,6,,7,,,
# ~      m-5,1,,2,3,,4,5,,6,,7,,,
# ~      m-5/-9/-11,1,2,,3,4,,5,,6,,7,,,
# ~
# ~ element 0 in each line represents the name
# ~
# ~ if the line is the first in a group of 7 lines,
# ~ then the name is the base scale name
# ~
# ~ for each of the next 6 lines in the group, the name
# ~ is the name of the mode
# ~
# ~ elements 1 - 12 or each line represent the 12 chromatic
# ~ steps in an octave ... if the element is blank, then
# ~ that particular step is not used in the scale or mode ...
# ~
# ~ therefore, every line should contain 5 unused steps and
# ~ 7 scale steps represented by the numbers 1 - 7 in order
# ~
# ~ on the first line in each group of seven, which is the
# ~ base scale line, elements 13 and 14 are not used, but
# ~ element 15 is the base scale number ... these scale
# ~ numbers should ascend one at a time as we progress through the file
# ~
# ~ the base scale number is used in the program and needs to
# ~ be maintained
# ~
# ~
# ~ the file ScaleFilteringPresets.CSV is part of a feature that
# ~ does not get used much
# ~
# ~ the original purpose was to limit the scales that show up in PrintChart
# ~
# ~ currently, the file contains 3 presets that can be used, although
# ~ not a lot of testing has been done using this feature, the file contents
# ~ are shown below:
# ~
# ~ 0,ALL,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
# ~ 1,Major,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
# ~ 2,Simple,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
# ~
# ~ the first preset is the default preset which shows all of the scales
# ~
# ~ the first element of each line represents the preset number
# ~
# ~ that second element of each line is the preset name
# ~
# ~ the rest of the line contains one number for each scale
# ~ listed in the MODES file
# ~
# ~ if the element is a 1, then the scale shows up, otherwise, the scale is hidden
# ~
# ~
# ~ the file ScaleMarchingMatrix.CSV
# ~ below, we have 5 examples that might be found in this file
# ~
# ~   1,major,10
# ~   2,2,m/maj,7,+1
# ~   7,0,maj-9,1,-2
# ~   6,0,maj+9,1,+2
# ~   2,0,m/maj,1,-3
# ~   1,7,major,4,+4
# ~   12,0,maj-5,1,-5
# ~   3,9,m/maj-13,3,+5
# ~   4,7,m/maj+11,5,-6
# ~   8,0,maj+13,1,+6
# ~   1,5,major,5,-7
# ~ this is the scale marching matrix
# ~
# ~ the matrix consists of sets of values
# ~
# ~ in each set, the first line is the scale that we are marching from
# ~
# ~ the format of the first line is:
# ~   ScaleNumber,ScaleName,NumberOfPossibleScalesToMarchTo
# ~
# ~ following the "marching from line" are the "marching to" lines
# ~ the "NumberOfPossibleScalesToMarchTo" value specifies how many
# ~ "marching to" lines the scale has
# ~
# ~ the format of the "marching to" lines is:
# ~   BaseScaleNumber,BaseKeyOffset,BaseScaleName,ModeNumber,OriginalModeNumberMarchingDescription
# ~   where:
# ~     BaseScaleNumber = the index to the new base scale that we are marching to
# ~     BaseKeyOffset = the amount to add to the "from" base key to get to the new key
# ~     BaseScaleName = the new base scale that we are marching to
# ~     ModeNumber = the mode of the new base scale that we are marching to
# ~     OriginalModeNumberMarchingDescription = descriptive text that indicates which scale
# ~                                             element of the original scale that was marched,
# ~                                             and the direction that it was marched
# ~
# ~