1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-05-19 09:28:51 +03:00

Improved C receiver functions

This commit is contained in:
Graham Nelson 2021-09-14 23:46:51 +01:00
parent 4a3dd923b2
commit 39bc558d65
15 changed files with 181 additions and 25 deletions

1
.gitignore vendored
View file

@ -6,6 +6,7 @@ gameinfo.dbg
gametext.txt
makefile
!inform7/Tests/Test Makes/Eg*/makefile
tags
*.glkdata

View file

@ -467,7 +467,7 @@ function togglePopup(material_id) {
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, "");</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_put_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>

View file

@ -165,7 +165,7 @@ first of those:
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">jmp_buf</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">execution_env</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">termination_code</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">just_undid</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7state</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_new_state</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax">);</span>
@ -177,12 +177,12 @@ first of those:
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_restore_snapshot_from</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7snapshot</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">ss</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_destroy_latest_snapshot</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_run_process</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_set_process_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_set_process_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_initializer</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_destroy_state</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7state</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">s</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_destroy_snapshot</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7snapshot</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">old</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_default_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_default_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">default_main</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">argc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> **</span><span class="Extracts-identifier-syntax">argv</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
@ -315,7 +315,7 @@ first of those:
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_copy_state</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, &amp;(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">), &amp;(</span><span class="Extracts-identifier-syntax">ss</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">then</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_default_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_default_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">201</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
@ -342,7 +342,7 @@ first of those:
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">termination_code</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_set_process_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">)) {</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_set_process_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">)) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>

View file

@ -1,27 +1,27 @@
100.0% in inform7 run
54.1% in compilation to Inter
53.9% in compilation to Inter
39.2% in //Sequence::undertake_queued_tasks//
3.4% in //MajorNodes::pre_pass//
2.5% in //MajorNodes::pass_1//
1.5% in //RTPhrasebook::compile_entries//
1.4% in //ImperativeDefinitions::assess_all//
1.2% in //ImperativeDefinitions::assess_all//
1.1% in //RTKindConstructors::compile//
0.4% in //MajorNodes::pass_2//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //World::stage_V//
0.2% in //ImperativeDefinitions::compile_first_block//
0.2% in //Sequence::undertake_queued_tasks//
0.1% in //CompletionModule::compile//
0.1% in //InferenceSubjects::emit_all//
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
2.1% not specifically accounted for
43.8% in running Inter pipeline
2.0% not specifically accounted for
44.0% in running Inter pipeline
12.6% in step preparation
9.5% in inter step 7/16: consolidate-text
7.8% in inter step 16/16: generate inform6 -> auto.inf
7.8% in inter step 2/16: link
7.9% in inter step 16/16: generate inform6 -> auto.inf
7.7% in inter step 2/16: link
1.5% in inter step 11/16: make-identifiers-unique
0.4% in inter step 12/16: reconcile-verbs
0.2% in inter step 14/16: eliminate-redundant-operations

View file

@ -126,7 +126,7 @@ void i7_restore_snapshot_from(i7process_t *proc, i7snapshot *ss) {
i7_copy_state(proc, &(proc->state), &(ss->then));
}
void i7_default_receiver(int id, wchar_t c) {
void i7_default_receiver(int id, wchar_t c, char *style) {
if (id == 201) fputc(c, stdout);
}
@ -153,7 +153,7 @@ int i7_run_process(i7process_t *proc) {
}
return proc->termination_code;
}
void i7_set_process_receiver(i7process_t *proc, void (*receiver)(int id, wchar_t c)) {
void i7_set_process_receiver(i7process_t *proc, void (*receiver)(int id, wchar_t c, char *style)) {
proc->receiver = receiver;
}
@ -1341,7 +1341,7 @@ i7val i7_rock_of_window(i7process_t *proc, i7val id) {
void i7_to_receiver(i7process_t *proc, i7val rock, wchar_t c) {
if (proc->receiver == NULL) fputc(c, stdout);
(proc->receiver)(rock, c);
(proc->receiver)(rock, c, "");
}
void i7_do_glk_put_char_stream(i7process_t *proc, i7val stream_id, i7val x) {

View file

@ -47,7 +47,7 @@ typedef struct i7process_t {
jmp_buf execution_env;
int termination_code;
int just_undid;
void (*receiver)(int id, wchar_t c);
void (*receiver)(int id, wchar_t c, char *style);
} i7process_t;
i7state i7_new_state(void);
@ -59,12 +59,12 @@ void i7_restore_snapshot(i7process_t *proc);
void i7_restore_snapshot_from(i7process_t *proc, i7snapshot *ss);
void i7_destroy_latest_snapshot(i7process_t *proc);
int i7_run_process(i7process_t *proc);
void i7_set_process_receiver(i7process_t *proc, void (*receiver)(int id, wchar_t c));
void i7_set_process_receiver(i7process_t *proc, void (*receiver)(int id, wchar_t c, char *style));
void i7_initializer(i7process_t *proc);
void i7_fatal_exit(i7process_t *proc);
void i7_destroy_state(i7process_t *proc, i7state *s);
void i7_destroy_snapshot(i7process_t *proc, i7snapshot *old);
void i7_default_receiver(int id, wchar_t c);
void i7_default_receiver(int id, wchar_t c, char *style);
int default_main(int argc, char **argv);
#define i7_lvalue_SET 1
#define i7_lvalue_PREDEC 2

View file

@ -0,0 +1,36 @@
# Where inform7 is installed, relative to this directory
INST = ../../..
# Abbreviations for running C compiler, linker, and inform7 tools
CC = clang -g -std=c99 -c -I $(INST)/Internal/Miscellany
LINK = clang -g
INFORM = $(INST)/Tangled/inform7 -silence
# There is one build target: an executable.
.PHONY: all
all: Eg1
Eg1: Eg1-I.o
$(LINK) -o Eg1 Eg1-I.o
Eg1-I.o: Eg1-I.c
$(CC) -o Eg1-I.o Eg1-I.c
Eg1-I.c: Eg1.i7
$(INFORM) -basic -format=C -o Eg1-I.c Eg1.i7
.PHONY: run
run: Eg1
./Eg1
.PHONY: clean
clean:
rm -f Eg1-I.c
rm -f *.o
rm -f Eg1
rm -f actual_output.txt
rm -f build_log.txt

View file

@ -0,0 +1,38 @@
# Where inform7 is installed, relative to this directory
INST = ../../..
# Abbreviations for running C compiler, linker, and inform7 tools
CC = clang -g -std=c99 -c -I $(INST)/Internal/Miscellany
LINK = clang -g
INFORM = $(INST)/Tangled/inform7 -silence
# There is one build target: an executable.
.PHONY: all
all: Eg2
Eg2: Eg2-C.o Eg2-I.o
$(LINK) -o Eg2 Eg2-C.o Eg2-I.o
Eg2-C.o: Eg2.c
$(CC) -o Eg2-C.o Eg2.c
Eg2-I.o: Eg2-I.c
$(CC) -o Eg2-I.o Eg2-I.c
Eg2-I.c: Eg2.i7
$(INFORM) -basic -format=C/no-main -o Eg2-I.c Eg2.i7
.PHONY: run
run: Eg2
./Eg2
.PHONY: clean
clean:
rm -f Eg2-I.c
rm -f *.o
rm -f Eg2
rm -f actual_output.txt
rm -f build_log.txt

View file

View file

@ -0,0 +1,40 @@
#include "inform7_clib.h"
char *current_201_style = "";
void HTML_begin(void) {
current_201_style = "";
printf("<html><body>\n");
}
void HTML_styling_receiver(int id, wchar_t c, char *style) {
if (id == 201) {
if (strcmp(style, current_201_style) != 0) {
if (current_201_style) printf("</span>");
current_201_style = style;
if (style) printf("<span class=\"%s\">", style);
}
if (c == '&') printf("&amp;");
else if (c == '<') printf("&lt;");
else if (c == '>') printf("&gt;");
else putchar(c);
}
}
void HTML_end(void) {
if (current_201_style) printf("</span>");
printf("</html></body>\n");
}
int main(int argc, char **argv) {
printf("Hello from the C source code.\n");
i7process_t proc = i7_new_process();
i7_set_process_receiver(&proc, HTML_styling_receiver);
HTML_begin();
int exit_code = i7_run_process(&proc);
HTML_end();
if (exit_code == 1) {
printf("*** Fatal error: halted ***\n");
fflush(stdout); fflush(stderr);
}
return exit_code;
}

View file

@ -0,0 +1,2 @@
To begin:
say "Hello & [italic type]welcome[roman type] from <Inform code>!"

View file

@ -0,0 +1,38 @@
# Where inform7 is installed, relative to this directory
INST = ../../..
# Abbreviations for running C compiler, linker, and inform7 tools
CC = clang -g -std=c99 -c -I $(INST)/Internal/Miscellany
LINK = clang -g
INFORM = $(INST)/Tangled/inform7 -silence
# There is one build target: an executable.
.PHONY: all
all: Eg3
Eg3: Eg3-C.o Eg3-I.o
$(LINK) -o Eg3 Eg3-C.o Eg3-I.o
Eg3-C.o: Eg3.c
$(CC) -o Eg3-C.o Eg3.c
Eg3-I.o: Eg3-I.c
$(CC) -o Eg3-I.o Eg3-I.c
Eg3-I.c: Eg3.i7
$(INFORM) -basic -format=C/no-main -o Eg3-I.c Eg3.i7
.PHONY: run
run: Eg3
./Eg3
.PHONY: clean
clean:
rm -f Eg3-I.c
rm -f *.o
rm -f Eg3
rm -f actual_output.txt
rm -f build_log.txt

View file

@ -394,7 +394,7 @@ i7val i7_rock_of_window(i7process_t *proc, i7val id) {
void i7_to_receiver(i7process_t *proc, i7val rock, wchar_t c) {
if (proc->receiver == NULL) fputc(c, stdout);
(proc->receiver)(rock, c);
(proc->receiver)(rock, c, "");
}
void i7_do_glk_put_char_stream(i7process_t *proc, i7val stream_id, i7val x) {

View file

@ -90,7 +90,7 @@ typedef struct i7process_t {
jmp_buf execution_env;
int termination_code;
int just_undid;
void (*receiver)(int id, wchar_t c);
void (*receiver)(int id, wchar_t c, char *style);
} i7process_t;
i7state i7_new_state(void);
@ -102,12 +102,12 @@ void i7_restore_snapshot(i7process_t *proc);
void i7_restore_snapshot_from(i7process_t *proc, i7snapshot *ss);
void i7_destroy_latest_snapshot(i7process_t *proc);
int i7_run_process(i7process_t *proc);
void i7_set_process_receiver(i7process_t *proc, void (*receiver)(int id, wchar_t c));
void i7_set_process_receiver(i7process_t *proc, void (*receiver)(int id, wchar_t c, char *style));
void i7_initializer(i7process_t *proc);
void i7_fatal_exit(i7process_t *proc);
void i7_destroy_state(i7process_t *proc, i7state *s);
void i7_destroy_snapshot(i7process_t *proc, i7snapshot *old);
void i7_default_receiver(int id, wchar_t c);
void i7_default_receiver(int id, wchar_t c, char *style);
int default_main(int argc, char **argv);
=
@ -240,7 +240,7 @@ void i7_restore_snapshot_from(i7process_t *proc, i7snapshot *ss) {
i7_copy_state(proc, &(proc->state), &(ss->then));
}
void i7_default_receiver(int id, wchar_t c) {
void i7_default_receiver(int id, wchar_t c, char *style) {
if (id == 201) fputc(c, stdout);
}
@ -267,7 +267,7 @@ int i7_run_process(i7process_t *proc) {
}
return proc->termination_code;
}
void i7_set_process_receiver(i7process_t *proc, void (*receiver)(int id, wchar_t c)) {
void i7_set_process_receiver(i7process_t *proc, void (*receiver)(int id, wchar_t c, char *style)) {
proc->receiver = receiver;
}

View file

@ -6,6 +6,7 @@ gameinfo.dbg
gametext.txt
makefile
!inform7/Tests/Test Makes/Eg*/makefile
tags
*.glkdata