#include #include #include #include "apl9.h" Symtab *globalsymtab; Symtab *currentsymtab; Symbol * getsym(Symtab *tab, Rune *name) { for(int i = 0; i < tab->nsyms; i++) if(runestrcmp(tab->syms[i]->name, name) == 0) return tab->syms[i]; tab->nsyms++; tab->syms = realloc(tab->syms, sizeof(Symbol *) * tab->nsyms); tab->syms[tab->nsyms-1] = malloc(sizeof(Symbol)); tab->syms[tab->nsyms-1]->name = runestrdup(name); tab->syms[tab->nsyms-1]->undefined = 1; return tab->syms[tab->nsyms-1]; } Symtab * newsymtab(void) { Symtab *tab = malloc(sizeof(Symtab)); tab->nsyms = 0; tab->syms = nil; Symbol *io = getsym(tab, L"⎕IO"); io->value.tag = ArrayTag; io->value.array = mkscalarint(currentsymtab ? globalIO() : 1); io->value.shy = 0; io->undefined = 0; return tab; } vlong globalIO(void) { Symbol *s = getsym(currentsymtab, L"⎕IO"); return s->value.array->intdata[0]; }