Deleted Added
full compact
1#!/usr/bin/awk -f
2# Convert forth source files to a giant C string
3# Joe Abley <jabley@patho.gen.nz>, 12 January 1999
4
5BEGIN \
6{
7 printf "/***************************************************************\n";
8 printf "** s o f t c o r e . c\n";
9 printf "** Forth Inspired Command Language -\n";
10 printf "** Words from CORE set written in FICL\n";
11 printf "** Author: John Sadler (john_sadler@alum.mit.edu)\n";
12 printf "** Created: 27 December 1997\n";
13 printf "** Last update: %s\n", strftime();
14 printf "***************************************************************/\n";
15 printf "\n/*\n";
16 printf "** This file contains definitions that are compiled into the\n";
17 printf "** system dictionary by the first virtual machine to be created.\n";
18 printf "** Created automagically by ficl/softwords/softcore.awk\n";
19 printf "*/\n";
20 printf "\n#include \"ficl.h\"\n";
21 printf "\nstatic char softWords[] =\n";
22
23 commenting = 0;
24}
25
26# some general early substitutions
27{
28 gsub("\t", " "); # replace each tab with 4 spaces
29 gsub("\"", "\\\""); # escape quotes
30 gsub("\\\\[[:space:]]+$", ""); # toss empty comments
31}
32
33# strip out empty lines
34/^ *$/ \
35{
36 next;
37}
38
39# emit / ** lines as multi-line C comments
40/^\\[[:space:]]\*\*/ && (commenting == 0) \
41{
42 sub("^\\\\[[:space:]]", "");
43 printf "/*\n%s\n", $0;
44 commenting = 1;
45 next;
46}
47
48/^\\[[:space:]]\*\*/ \
49{
50 sub("^\\\\[[:space:]]", "");
51 printf "%s\n", $0;
52 next;
53}
54
55# function to close a comment, used later
56function end_comments()
57{
58 commenting = 0;
59 printf "*/\n";
60}
61
62# pass commented preprocessor directives
63/^\\[[:space:]]#/ \
64{
65 if (commenting) end_comments();
66 sub("^\\\\[[:space:]]", "");
67 printf "%s\n", $0;
68 next;
69}
70
71# toss all other full-line comments
72/^\\/ \
73{
74 if (commenting) end_comments();
75 next;
76}
77
78# emit all other lines as quoted string fragments
79{
80 if (commenting) end_comments();
81
82 sub("\\\\[[:space:]]+.*$", ""); # lop off trailing \ comments
83 sub("[[:space:]]+$", ""); # remove trailing spaces
84 printf " \"%s \\n\"\n", $0;
85 next;
86}
87
88END \
89{
90 if (commenting) end_comments();
91 printf " \"quit \";\n";
92 printf "\n\nvoid ficlCompileSoftCore(FICL_VM *pVM)\n";
93 printf "{\n";
94 printf " assert(ficlExec(pVM, softWords) != VM_ERREXIT);\n";
94 printf " assert(ficlExec(pVM, softWords, -1) != VM_ERREXIT);\n";
95 printf "}\n";
96}