diff --git a/lib/ext/boot.c b/lib/ext/boot.c index bfd25463..36d5828a 100644 --- a/lib/ext/boot.c +++ b/lib/ext/boot.c @@ -236,8 +236,10 @@ static const char boot_rom[][80] = { " ,@(map (lambda (x)\n `(,(the 'define-syntax) ,(car x) ,(", "cadr x)))\n formal)\n ,@body))))\n\n(define-macro let-syntax\n", " (lambda (form env)\n `(,(the 'letrec-syntax) ,@(cdr form))))\n", +"", }; + #if PIC_USE_LIBRARY static const char boot_library_rom[][80] = { ";;; There are two ways to name a library: (foo bar) or foo.bar\n;;; The former is", @@ -367,7 +369,9 @@ static const char boot_library_rom[][80] = { " ((e eval))\n (lambda (expr . lib)\n (let ((lib (if (null? lib", ") (current-library) (car lib))))\n (e expr (library-environment lib)", ")))))\n (make-library '(picrin user))\n (current-library '(picrin user)))\n\n", +"", }; + #endif void diff --git a/tools/mkboot.pl b/tools/mkboot.pl index e5d31ff4..17b1fa4f 100644 --- a/tools/mkboot.pl +++ b/tools/mkboot.pl @@ -2,57 +2,39 @@ use strict; -# The maximum length of a string literal is 509 characters in C89. -# That is why the boot_rom is split into short strings. -my $chunk = 80; - -sub print_escape_char($) { - my $c = shift; - if ($c eq "\n") { - print "\\", "n"; - } elsif (($c eq "\\") || ($c eq '"')) { - print "\\", $c; - } else { - print $c; +sub constant($$) { + # The maximum length of a string literal is 509 characters in C89. + # That is why src is split into short strings. + my ($var, $src) = @_; + print "static const char ${var}[][80] = {\n"; + my @lines = $src =~ /.{0,80}/gs; + foreach (@lines) { + s/\\/\\\\/g; + s/"/\\"/g; + s/\n/\\n/g; + print "\"$_\",\n"; } + print "};\n\n"; } +local $/ = undef; + print <); close(IN); print <); close(IN); print <; close IN; - my @lines = $src =~ /.{0,80}/gs; - foreach (@lines) { - s/\\/\\\\/g; - s/"/\\"/g; - s/\n/\\n/g; - print "\"$_\",\n"; - } - print "};\n\n"; + constant($var, $src); } print <