+1.3.26.jcn1
+===========
+
+* Devised kludge for ascii 5 character font pitches.
+
+* Substitutions: interline, 1997,1998, @stack.nl and small typo fixes.
+
1.3.25.jcn2
===========
<p>
-Copyright (c) 1997, 1998, 1999 Han-Wen Nienhuys and Jan Nieuwenhuizen.
+Copyright (c) 1997, 1998, 1999, 2000 Han-Wen Nienhuys and Jan Nieuwenhuizen.
<p>
@node Top, , , (dir)
@top
-@unnumberedsubsec Introduction
+@unnumberedsubsec Info
@itemize @bullet
@item @uref{DEDICATION.txt,Dedication}
@end itemize
-@unnumberedsubsec Documentation
+@unnumberedsubsec Manuals
@itemize @bullet
-@item @uref{faq.html,Frequently asked questions}, with answers
+@item @uref{faq.html,FAQ: Frequently asked questions}, with answers
@item @uref{programs.html,`Manual pages'}
@item @uref{../user/out-www/index.html,User documentation}
-@item @uref{../programmer/out-www/index.html,Programmer's documentation}
+@item @uref{../programmer/out-www/index.html,Programmer documentation}
@item @uref{../bibliography/out-www/index.html,Bibliography}
@item @uref{../misc/out-www/index.html,Miscellaneous texts}
@end itemize
@end itemize
-@unnumberedsubsec Logo:
+@unnumberedsubsec Logo
@itemize @bullet
@item @uref{../pictures/out-www/lelieblond.png, logo} in large size
@item @uref{../pictures/out-www/lelie-logo.png, logo} in medium size
@mudelafile{beam-extreme.ly}
-Beams should always reach the middle staff line, the second beam
+Beams should always reach the middle staff line. The second beam
counting from the note head side, should never be lower than the
second staff line. This does not hold for grace note beams.
+Override with @code{noStemExtend}.
@mudelafile{beam-position.sly}
@unnumberedsec Why should I use it?
-The input to LilyPond is plain text. So you can use your favorite text
-editor to edit it, you can put it in mail or embed it in an article like
+The input to LilyPond is plain text. So, you can use your favorite text
+editor to enter it, you can put it in mail or embed it in an article like
this:
@quotation
tool, @file{midi2ly}.
LilyPond is free software. It is licensed under GNU General Public
-License, so you can use, modify and redistribute the program almost no
-restrictions. LilyPond is part of the @uref{http://www.gnu.org/,GNU
-Project}.
-
-The version numbers are in Linux-kernel style: even unnumbered versions
-are `stable'. The webpages for the stable version reside at GNU, here:
- @uref{http://www.gnu.org/software/lilypond}. Big enhancements go
-into the odd numbered versions, whose webpages are on
+License, so you can use, modify and redistribute the program with
+almost no restrictions. LilyPond is part of the
+@uref{http://www.gnu.org/,GNU Project}.
+
+The version numbers are in Linux-kernel style: even numbered versions
+are `stable'. The webpages for the stable version (1.2) reside at GNU,
+here: @uref{http://www.gnu.org/software/lilypond}. Big enhancements go
+into the latest odd numbered version (1.3), which webpages are on
@uref{http://www.cs.uu.nl/~hanwen/lilypond/,Han-Wen's site}.
If want more information, you can browse the
examples include sound bites in MIDI, pictures in PNG, printable scores
in PostScript, and LilyPond input.
-Other use LilyPond too.
+Others use LilyPond too.
@uref{http://www.geocities.com/Vienna/Studio/1714/harpsichord.html,John
Sankey}, harpsichordist to the internet, is typesetting the complete
@uref{http://www.geocities.com/Vienna/Studio/1714/scarlattidwn.html/,sonatas
@unnumberedsec Download
-If you want to compile LilyPond from sources, download them here:
+If you want to compile LilyPond from source, download here:
@itemize @bullet
@item Download stable releases at
@uref{ftp://ftp.gnu.org/gnu/lilypond/}
@unnumberedsec Mailing list
-If you have questions do write to the mailing lists!
- (but don't forget to read the @uref{Documentation/out-www/faq.html,
-Frequently Asked Questions} first)
+If you have questions, do write to the mailing lists!
+ (But don't forget to read the @uref{Documentation/out-www/faq.html,
+Frequently Asked Questions} first.)
@table @samp
lilypond --paper=paper16 foo.ly
lilypond --paper=paper20 foo.ly
lilypond --paper=paper-as9 foo.ly
+. * entangle ly/* paper-params papersize stuff
. * fix tremolos.
. * change ) c4 to c4-)
. * internationalize GUILE msgs.
MAJOR_VERSION=1
MINOR_VERSION=3
PATCH_LEVEL=26
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=jcn1
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
-[f8 f] \grace { [f8 e8] } [f64 f]
+[f8 f] [f64 f] \grace { [f8 e8] }
+\property Voice.noStemExtend = ##t
+[f8 f]
\score {
\notes\relative c''{
\time 4/4;
- g1 g2 g4. g8 |
+ g1 a b c
+ g2 a b c
+ g4 a b c
}
\paper {
\paper_as_five
stemLength = #6.0
verticalDirection = \up ;
- graceAccidentalSpace= 1.5 * \interline;
+ graceAccidentalSpace= 1.5 * \staffspace;
};
\translator{\GraceContext}
textheight = 60.0\char;
indent = 8.0\char;
-interline = (\staffheight - 1.0 ) / 4.0;
-stafflinethickness = \interline / 2.0;
+staffspace = (\staffheight - 1.0 ) / 4.0;
+stafflinethickness = \staffspace / 2.0;
+
+% deprecated
+interline = \staffspace;
% urg, need grace_ versions of these too?
-beam_thickness = 0.52 * (\interline - \stafflinethickness);
+beam_thickness = 0.52 * (\staffspace - \stafflinethickness);
#'beam-thickness = \beam_thickness; %% UGR
-interbeam = (2.0 * \interline + \stafflinethickness - \beam_thickness) / 2.0;
-interbeam4 = (3.0 * \interline - \beam_thickness) / 3.0;
+interbeam = (2.0 * \staffspace + \stafflinethickness - \beam_thickness) / 2.0;
+interbeam4 = (3.0 * \staffspace - \beam_thickness) / 3.0;
%{
The space taken by a note is determined by the formula
% catch suspect beam slopes, set slope to zero if
% outer stem is lengthened more than
-beam_lengthened = 0.2 * \interline;
+beam_lengthened = 0.2 * \staffspace;
% and slope is running away steeper than
beam_steep_slope = 0.2 / 1.0;
%{
dit(code(slur_x_gap)) Horizontal space between note and slur. Set to
-code(\interline / 5) by default.
+code(\staffspace / 5) by default.
%}
% OSU: suggested gap = ss / 5;
-slur_x_gap = \interline / 5.0;
-slur_y_gap = 0.25 * \interline;
-slur_y_free = 0.75 * \interline;
-slur_x_minimum = 1.5 * \interline;
+slur_x_gap = \staffspace / 5.0;
+slur_y_gap = 0.25 * \staffspace;
+slur_y_free = 0.75 * \staffspace;
+slur_x_minimum = 1.5 * \staffspace;
%{
Like beams, slurs often aren't as steep as the notes they encompass.
slur_height_damping = 0.4;
slur_interstaff_height_damping = 0.5;
% snap to stem if slur ends closer to stem than
-slur_snap_to_stem = 1.75 * \interline;
-slur_interstaff_snap_to_stem = 2.5 * \interline;
+slur_snap_to_stem = 1.75 * \staffspace;
+slur_interstaff_snap_to_stem = 2.5 * \staffspace;
% maximum dy change allowed by snapping
slur_snap_max_slope_change = 0.5;
slur_interstaff_snap_max_slope_change = 0.5;
-tie_x_minimum = \interline + \slur_x_minimum;
+tie_x_minimum = \staffspace + \slur_x_minimum;
% OSU: tie gap == slur gap
tie_x_gap = \slur_x_gap;
-tie_y_gap = 0.25 * \interline;
+tie_y_gap = 0.25 * \staffspace;
% length of a tie that's a staffspace high
-tie_staffspace_length = 4.0 * \interline;
+tie_staffspace_length = 4.0 * \staffspace;
% ugh: rename to bow (in bezier.cc and fonts.doc too...)
barthick_score = 1.0\char;
barthick_thin = 1.0\char;
-bracket_arch_thick = \interline / 3.0;
-bracket_width = 2.0 * \interline;
+bracket_arch_thick = \staffspace / 3.0;
+bracket_width = 2.0 * \staffspace;
bracket_thick = 2.0 * \stafflinethickness;
-bracket_arch_height = 1.5 * \interline;
+bracket_arch_height = 1.5 * \staffspace;
bracket_arch_width = \bracket_arch_height;
bracket_arch_angle = 50.0;
-tuplet_spanner_gap = 2.0 * \interline;
+tuplet_spanner_gap = 2.0 * \staffspace;
tuplet_thick = 1.0\char;
volta_thick = 1.0\char;
volta_spanner_height = 1.0\char;
% Multi-measure rests
multi_measure_rest_x_minimum = 2.5*\staffheight;
-multi_measure_rest_padding = 2.0 *\interline;
+multi_measure_rest_padding = 2.0 *\staffspace;
multi_measure_rest_expand_limit = 10.0;
% chop off this much when next to pp / ff sign.
-crescendo_shorten = 4.0 * \interline;
+crescendo_shorten = 4.0 * \staffspace;
crescendo_thickness = \stafflinethickness;
-crescendo_height = 0.666 * \interline;
+crescendo_height = 0.666 * \staffspace;
% in internote.
restcollision_minimum_dist = 3.0;
postBreakPadding = 0.0;
% optical correction amount.
-stemSpacingCorrection = 0.5*\interline;
+stemSpacingCorrection = 0.5*\staffspace;
%{
%{
If columns do not have spacing information set, set it to this much
%}
-loose_column_distance = 2.0 * \interline;
+loose_column_distance = 2.0 * \staffspace;
%{
Relative cost of compressing (vs. stretching). Increasing this
% if stem is on middle line, choose this direction.
stem_default_neutral_direction = 1.0;
-% in interline
+% in staffspace
articulation_script_padding_default = 1.0;
% Backward compatibility -- has no function;
#'Local_key_item::left-padding = #'0.2
#'Local_key_item::right-padding = #'0.4
-#'Staff_symbol::staff-space = \interline ;
+#'Staff_symbol::staff-space = \staffspace ;
#'Staff_symbol::line-count = #5
\include \paperfile;
\include "paper.ly";
-interline = \staffheight / 4.0;
+staffspace = \staffheight / 4.0;
+stafflinethickness = \staffspace / 10.0;
+% deprecated
+interline = \staffspace;
-stafflinethickness = \interline / 10.0;
% urg, need grace_ versions of these too?
-beam_thickness = 0.52 * (\interline - \stafflinethickness);
+beam_thickness = 0.52 * (\staffspace - \stafflinethickness);
#'beam-thickness = \beam_thickness; %% UGR
-interbeam = (2.0 * \interline + \stafflinethickness - \beam_thickness) / 2.0;
-interbeam4 = (3.0 * \interline - \beam_thickness) / 3.0;
+interbeam = (2.0 * \staffspace + \stafflinethickness - \beam_thickness) / 2.0;
+interbeam4 = (3.0 * \staffspace - \beam_thickness) / 3.0;
%{
The space taken by a note is determined by the formula
% catch suspect beam slopes, set slope to zero if
% outer stem is lengthened more than
-beam_lengthened = 0.2 * \interline;
+beam_lengthened = 0.2 * \staffspace;
% and slope is running away steeper than
beam_steep_slope = 0.2 / 1.0;
%{
dit(code(slur_x_gap)) Horizontal space between note and slur. Set to
-code(\interline / 5) by default.
+code(\staffspace / 5) by default.
%}
% OSU: suggested gap = ss / 5;
-slur_x_gap = \interline / 5.0;
-slur_y_gap = 0.25 * \interline;
-slur_y_free = 0.75 * \interline;
-slur_x_minimum = 1.5 * \interline;
+slur_x_gap = \staffspace / 5.0;
+slur_y_gap = 0.25 * \staffspace;
+slur_y_free = 0.75 * \staffspace;
+slur_x_minimum = 1.5 * \staffspace;
%{
Like beams, slurs often aren't as steep as the notes they encompass.
slur_height_damping = 0.4;
slur_interstaff_height_damping = 0.5;
% snap to stem if slur ends closer to stem than
-slur_snap_to_stem = 1.75 * \interline;
-slur_interstaff_snap_to_stem = 2.5 * \interline;
+slur_snap_to_stem = 1.75 * \staffspace;
+slur_interstaff_snap_to_stem = 2.5 * \staffspace;
% maximum dy change allowed by snapping
slur_snap_max_slope_change = 0.5;
slur_interstaff_snap_max_slope_change = 0.5;
-tie_x_minimum = \interline + \slur_x_minimum;
+tie_x_minimum = \staffspace + \slur_x_minimum;
% OSU: tie gap == slur gap
tie_x_gap = \slur_x_gap;
-tie_y_gap = 0.25 * \interline;
+tie_y_gap = 0.25 * \staffspace;
% length of a tie that's a staffspace high
-tie_staffspace_length = 4.0 * \interline;
+tie_staffspace_length = 4.0 * \staffspace;
% ugh: rename to bow (in bezier.cc and fonts.doc too...)
%{ Ross. page 151 lists these values, but we think that thick lines
and kernings are too thick.
-bar_kern = 0.5 * \interline;
-bar_thinkern = 0.75 * \interline;
-barthick_thick = 0.5* \interline;
-barthick_score = 0.13333* \interline;
-barthick_thin = 0.1*\interline;
+bar_kern = 0.5 * \staffspace;
+bar_thinkern = 0.75 * \staffspace;
+barthick_thick = 0.5* \staffspace;
+barthick_score = 0.13333* \staffspace;
+barthick_thin = 0.1*\staffspace;
%}
barthick_thin = 1.6*\stafflinethickness;
barthick_score = 1.6*\stafflinethickness;
-bracket_arch_thick = \interline / 3.0;
-bracket_width = 2.0 * \interline;
+bracket_arch_thick = \staffspace / 3.0;
+bracket_width = 2.0 * \staffspace;
bracket_thick = 2.0 * \stafflinethickness;
-bracket_arch_height = 1.5 * \interline;
+bracket_arch_height = 1.5 * \staffspace;
bracket_arch_width = \bracket_arch_height;
bracket_arch_angle = 50.0;
-tuplet_spanner_gap = 2.0 * \interline;
+tuplet_spanner_gap = 2.0 * \staffspace;
tuplet_thick = 1.0*\stafflinethickness;
volta_thick = 1.6*\stafflinethickness;
-volta_spanner_height = 2.0 *\interline;
+volta_spanner_height = 2.0 *\staffspace;
% relative thickness of thin lines 1.6 : 1 : 0.8
stemthickness = 0.8*\stafflinethickness;
% Multi-measure rests
multi_measure_rest_x_minimum = 2.5*\staffheight;
-multi_measure_rest_padding = 2.0 *\interline;
+multi_measure_rest_padding = 2.0 *\staffspace;
multi_measure_rest_expand_limit = 10.0;
% chop off this much when next to pp / ff sign.
-crescendo_shorten = 4.0 * \interline;
+crescendo_shorten = 4.0 * \staffspace;
crescendo_thickness = \stafflinethickness;
-crescendo_height = 0.666 * \interline;
+crescendo_height = 0.666 * \staffspace;
% in internote.
restcollision_minimum_dist = 3.0;
postBreakPadding = 0.0;
% optical correction amount.
-stemSpacingCorrection = 0.5*\interline;
+stemSpacingCorrection = 0.5*\staffspace;
%{
%{
If columns do not have spacing information set, set it to this much
%}
-loose_column_distance = 2.0 * \interline;
+loose_column_distance = 2.0 * \staffspace;
%{
Relative cost of compressing (vs. stretching). Increasing this
% if stem is on middle line, choose this direction.
stem_default_neutral_direction = 1.0;
-% in interline
+% in staffspace
articulation_script_padding_default = 1.0;
% Backward compatibility -- has no function;
#'Local_key_item::left-padding = #'0.2
#'Local_key_item::right-padding = #'0.4
-#'Staff_symbol::staff-space = \interline ;
+#'Staff_symbol::staff-space = \staffspace ;
#'Staff_symbol::line-count = #5
StartFontMetrics 2.0
FontName as 5
FontFamily as
- StartCharMetrics 56
+ StartCharMetrics 59
Comment BBox: (llx lly urx ury) * 1000
\f C 0; WX 7; N rests-0; B 0 0 1000 1000;
:
\f C 31; WX 5; N noteheads-ledgerending; B -1500 -500 1500 500;
-
-\f C 33; WX 9; N noteheads-0; B 0 -500 1000 500;
+\f C 33; WX 1; N noteheads-0; B 0 -500 1000 500;
O
-\f C 34; WX 6; N noteheads-1; B -1000 -500 0 500;
+\f C 33.5; WX 1; N noteheads-0; B -1000 -500 1000 2000;
+,-,
+`-'
+\f C 34; WX 1; N noteheads-1; B -1000 -500 0 500;
o
-\f C 35; WX 6; N noteheads-2; B -1000 0 0 1000;
+\f C 34.5; WX 1; N noteheads-1; B -1000 -500 0 500;
+°
+\f C 35; WX 1; N noteheads-2; B -1000 0 0 1000;
+x
+\f C 35.5; WX 1; N noteheads-2.5; B -1000 0 0 1000;
*
\f C 36; WX 9; N noteheads-0diamond; B 0 -2750 9900 2750;
V
% source file of the Feta (not an acronym for Font-En-Tja)
% pretty-but-neat music font
%
-% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
% Jan Nieuwenhuizen <janneke@gnu.org>
%
% these macros help create ascii logging output
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997--2000 Jan Nieuwenhuizen <janneke@gnu.org>
%
mode_setup;
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
-% & Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Jan Nieuwenhuizen <janneke@gnu.org>
+% & Han-Wen Nienhuys <hanwen@cs.uu.nl>
%
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
%
font_identifier:="feta-braces11";
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
%
font_identifier:="feta-braces13";
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
%
font_identifier:="feta-braces16";
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
%
font_identifier:="feta-braces20";
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
%
font_identifier:="feta-braces23";
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
%
font_identifier:="feta-braces26";
%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997--2000 Jan Nieuwenhuizen <janneke@gnu.org>
fet_begingroup("rests");
% source file of the Feta (defintively not an abbreviation for Font-En-Tja)
% music font
%
-% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
%
%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>,
+% (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>,
% Jan Nieuwenhuizen <janneke@gnu.org>
%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997--2000 Jan Nieuwenhuizen <janneke@gnu.org>
fet_begingroup("nummer")
% source file of the Feta (defintively not an abbreviation for Font-En-Tja)
% music font
%
-% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997 Han-Wen Nienhuys <hanwen@cs.uu.nl>
% Jan Nieuwenhuizen <janneke@gnu.org>
%
% source file of the Feta (defintively not an abbreviation for Font-En-Tja)
% music font
%
-% (c) 1998 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1998--2000 Jan Nieuwenhuizen <janneke@gnu.org>
%
% this file is included by feta-scripts.mf
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
-% & Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Jan Nieuwenhuizen <janneke@gnu.org>
+% & Han-Wen Nienhuys <hanwen@cs.uu.nl>
%
% see Documentation/fonts.tex
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
%
% display all feta chars in a pretty picture
% GNU LilyPond
-% (c) 1998 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1998--2000 Jan Nieuwenhuizen <janneke@gnu.org>
%
% urg: fool ls-latex
\def\urg{
(define (lily-def key val)
(if
- (equal? key "mudelapaperlinewidth")
+ (or (equal? key "mudelapaperlinewidth")
+ (equal? key "mudelapaperstaffheight"))
(string-append "(define " key " " (arg->string val) ")\n")
""))
(define (placebox x y s)
- (string-append (func "move-to" x y) s))
-
+ (let ((ey (inexact->exact y)))
+ (string-append "(move-to " (number->string (inexact->exact x)) " "
+ (if (= 0.5 (- (abs y) (abs ey)))
+ (number->string y)
+ (number->string ey))
+ ")\n" s)))
+
(define (select-font font-name-symbol)
(let* ((c (assoc font-name-symbol font-name-alist)))
(if (eq? c #f)
;;
(define line-char "-")
+;;
+(define half-char-kludge #f)
+
;; the plotting fields
(define canvas 0)
;; urg:
(define (char n)
(let* ((font (get-font cur-font))
- (c (get-char font n)))
- (if c
- (plot-char c))))
+ (c
+ (if (and half-char-kludge
+ (assoc (+ n 0.5) font))
+ (get-char font (+ n 0.5))
+ (get-char font n))))
+ (if c
+ (plot-char c))))
(define (end-output)
(display (string-append
(if (< 0 (length font))
(set! fonts (cons (cons name font) fonts))))))))
+(define (number->rounded-exact x)
+ (* (sign x) (inexact->exact (abs x))))
+
(define (move-to x y)
(set! cur-x x)
- (set! cur-y y))
+ (let ((ey (number->rounded-exact y)))
+ (if (= 0.5 (- (abs ey) (abs y)))
+ (set! half-char-kludge #t)
+ (set! half-char-kludge #f))
+ (set! cur-y ey)))
(define (put c)
(plot cur-x cur-y c))