softcore.awk revision 42807
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"; 95 printf "}\n"; 96} 97