/* acid.h */enum{ Eof = -1, Strsize = 4096, Hashsize = 128, Maxarg = 512, NFD = 100, Maxproc = 50, Maxval = 10, Mempergc = 1024*1024,}; #pragma varargck type "L" void typedef struct Node Node;typedef struct String String;typedef struct Lsym Lsym;typedef struct List List;typedef struct Store Store;typedef struct Gc Gc;typedef struct Strc Strc;typedef struct Rplace Rplace;typedef struct Ptab Ptab;typedef struct Value Value;typedef struct Type Type;typedef struct Frtype Frtype; Extern int kernel;Extern int remote;Extern int rdebug;Extern int remfd;Extern int protodebug;Extern int text;Extern int silent;Extern Fhdr fhdr;Extern int line;Extern Biobuf* bout;Extern Biobuf* io[32];Extern int iop;Extern char symbol[Strsize];Extern int interactive;Extern Node* code;Extern int na;Extern int wtflag;Extern Map* cormap;Extern Map* symmap;Extern Lsym* hash[Hashsize];Extern long dogc;Extern Rplace* ret;Extern char* filename;Extern char* aout;Extern int gotint;Extern long flen;Extern Gc* gcl;Extern int stacked;Extern jmp_buf err;Extern Node* prnt;Extern Node* fomt;Extern List* tracelist;Extern int initialising;Extern int quiet;extern void (*expop[])(Node*, Node*);#define expr(n, r) (r)->nstore.comt=0; (*expop[(n)->op])(n, r); enum{ TINT, TFLOAT, TSTRING, TLIST, TCODE,}; struct Type{ Type* next; int offset; char fmt; char depth; Lsym* type; Lsym* tag; Lsym* base;}; struct Frtype{ Lsym* var; Type* type; Frtype* next;}; struct Ptab{ int pid; int ctl;};Extern Ptab ptab[Maxproc]; struct Rplace{ jmp_buf rlab; Node* stak; Node* val; Lsym* local; Lsym** tail;}; struct Gc{ char gcmark; Gc* gclink;}; struct Store{ char fmt; Type* comt; union { vlong sival; double sfval; String* sstring; List* sl; Node* scc; } u0;}; struct List{ Gc lgc; List* next; char type; Store lstore;}; struct Value{ char set; char type; Store vstore; Value* pop; Lsym* scope; Rplace* ret;}; struct Lsym{ char* name; int lexval; Lsym* hash; Value* v; Type* lt; Node* proc; Frtype* local; void (*builtin)(Node*, Node*);}; struct Node{ Gc ngc; char op; char type; Node* left; Node* right; Lsym* sym; Store nstore;};#define ZN (Node*)0 struct String{ Gc sgc; char *string; int len;}; List* addlist(List*, List*);List* al(int);Node* an(int, Node*, Node*);void append(Node*, Node*, Node*);int bool(Node*);void build(Node*);void call(char*, Node*, Node*, Node*, Node*);void checkqid(int, int);void cmd(void);Node* con(int);List* construct(Node*);void ctrace(int);void decl(Node*);void defcomplex(Node*, Node*);void deinstall(int);void delete(List*, int n, Node*);void detach(void);void dostop(int);Lsym* enter(char*, int);void error(char*, ...);void execute(Node*);void fatal(char*, ...);ulong findframe(ulong);void flatten(Node**, Node*);void gc(void);char* getstatus(int);void* gmalloc(long);void indir(Map*, ulong, char, Node*);void install(int);void installbuiltin(void);void kinit(void);int Lfmt(Fmt*);int listcmp(List*, List*);int listlen(List*);List* listvar(char*, long);void loadmodule(char*);void loadvars(void);Lsym* look(char*);void ltag(char*);void setup_os_notify(void);void marklist(List*);Lsym* mkvar(char*);void msg(int, char*);void notes(int);int nproc(char**);void nthelem(List*, int, Node*);int numsym(char);void odot(Node*, Node*);int opentty(char*, int);void closetty(int);void pcode(Node*, int);void pexpr(Node*);int popio(void);void pstr(String*);void pushfile(char*);void pushstr(Node*);ulong raddr(char*);void readtext(char*);int remcondset(char, ulong);int remcondstartstop(int);int remget(struct segment*, ulong, long, char*, int);int remoteio(int, char*, char*, int);int remote_read(int, char*, int);int remote_write(int, char*, int);int remput(struct segment*, ulong, long, char*, int);void restartio(void);uvlong rget(Map*, char*);String *runenode(Rune*);char* runcmd(char*);int scmp(String*, String*);void setdbg_opt(char, int);int sendremote(int, char*);void sproc(int);String* stradd(String*, String*);String* strnode(char*);String* strnodlen(char*, int);char* mysystem(void);void trlist(Map*, uvlong, uvlong, Symbol*);void unwind(void);void userinit(void);void varreg(void);void varsym(void);char* waitfor(int);void whatis(Lsym*);void windir(Map*, Node*, Node*, Node*);void yyerror(char*, ...);int yylex(void);int yyparse(void); enum{ ONAME, OCONST, OMUL, ODIV, OMOD, OADD, OSUB, ORSH, OLSH, OLT, OGT, OLEQ, OGEQ, OEQ, ONEQ, OLAND, OXOR, OLOR, OCAND, OCOR, OASGN, OINDM, OEDEC, OEINC, OPINC, OPDEC, ONOT, OIF, ODO, OLIST, OCALL, OCTRUCT, OWHILE, OELSE, OHEAD, OTAIL, OAPPEND, ORET, OINDEX, OINDC, ODOT, OLOCAL, OFRAME, OCOMPLEX, ODELETE, OCAST, OFMT, OEVAL, OWHAT,};
/* acid.h */
enum
{
Eof = -1,
Strsize = 4096,
Hashsize = 128,
Maxarg = 512,
NFD = 100,
Maxproc = 50,
Maxval = 10,
Mempergc = 1024*1024,
};
#pragma varargck type "L" void
typedef struct Node Node;
typedef struct String String;
typedef struct Lsym Lsym;
typedef struct List List;
typedef struct Store Store;
typedef struct Gc Gc;
typedef struct Strc Strc;
typedef struct Rplace Rplace;
typedef struct Ptab Ptab;
typedef struct Value Value;
typedef struct Type Type;
typedef struct Frtype Frtype;
Extern int kernel;
Extern int remote;
Extern int rdebug;
Extern int remfd;
Extern int protodebug;
Extern int text;
Extern int silent;
Extern Fhdr fhdr;
Extern int line;
Extern Biobuf* bout;
Extern Biobuf* io[32];
Extern int iop;
Extern char symbol[Strsize];
Extern int interactive;
Extern Node* code;
Extern int na;
Extern int wtflag;
Extern Map* cormap;
Extern Map* symmap;
Extern Lsym* hash[Hashsize];
Extern long dogc;
Extern Rplace* ret;
Extern char* filename;
Extern char* aout;
Extern int gotint;
Extern long flen;
Extern Gc* gcl;
Extern int stacked;
Extern jmp_buf err;
Extern Node* prnt;
Extern Node* fomt;
Extern List* tracelist;
Extern int initialising;
Extern int quiet;
extern void (*expop[])(Node*, Node*);
#define expr(n, r) (r)->nstore.comt=0; (*expop[(n)->op])(n, r);
enum
{
TINT,
TFLOAT,
TSTRING,
TLIST,
TCODE,
};
struct Type
{
Type* next;
int offset;
char fmt;
char depth;
Lsym* type;
Lsym* tag;
Lsym* base;
};
struct Frtype
{
Lsym* var;
Type* type;
Frtype* next;
};
struct Ptab
{
int pid;
int ctl;
};
Extern Ptab ptab[Maxproc];
struct Rplace
{
jmp_buf rlab;
Node* stak;
Node* val;
Lsym* local;
Lsym** tail;
};
struct Gc
{
char gcmark;
Gc* gclink;
};
struct Store
{
char fmt;
Type* comt;
union {
vlong sival;
double sfval;
String* sstring;
List* sl;
Node* scc;
} u0;
};
struct List
{
Gc lgc;
List* next;
char type;
Store lstore;
};
struct Value
{
char set;
char type;
Store vstore;
Value* pop;
Lsym* scope;
Rplace* ret;
};
struct Lsym
{
char* name;
int lexval;
Lsym* hash;
Value* v;
Type* lt;
Node* proc;
Frtype* local;
void (*builtin)(Node*, Node*);
};
struct Node
{
Gc ngc;
char op;
char type;
Node* left;
Node* right;
Lsym* sym;
Store nstore;
};
#define ZN (Node*)0
struct String
{
Gc sgc;
char *string;
int len;
};
List* addlist(List*, List*);
List* al(int);
Node* an(int, Node*, Node*);
void append(Node*, Node*, Node*);
int bool(Node*);
void build(Node*);
void call(char*, Node*, Node*, Node*, Node*);
void checkqid(int, int);
void cmd(void);
Node* con(int);
List* construct(Node*);
void ctrace(int);
void decl(Node*);
void defcomplex(Node*, Node*);
void deinstall(int);
void delete(List*, int n, Node*);
void detach(void);
void dostop(int);
Lsym* enter(char*, int);
void error(char*, ...);
void execute(Node*);
void fatal(char*, ...);
ulong findframe(ulong);
void flatten(Node**, Node*);
void gc(void);
char* getstatus(int);
void* gmalloc(long);
void indir(Map*, ulong, char, Node*);
void install(int);
void installbuiltin(void);
void kinit(void);
int Lfmt(Fmt*);
int listcmp(List*, List*);
int listlen(List*);
List* listvar(char*, long);
void loadmodule(char*);
void loadvars(void);
Lsym* look(char*);
void ltag(char*);
void setup_os_notify(void);
void marklist(List*);
Lsym* mkvar(char*);
void msg(int, char*);
void notes(int);
int nproc(char**);
void nthelem(List*, int, Node*);
int numsym(char);
void odot(Node*, Node*);
int opentty(char*, int);
void closetty(int);
void pcode(Node*, int);
void pexpr(Node*);
int popio(void);
void pstr(String*);
void pushfile(char*);
void pushstr(Node*);
ulong raddr(char*);
void readtext(char*);
int remcondset(char, ulong);
int remcondstartstop(int);
int remget(struct segment*, ulong, long, char*, int);
int remoteio(int, char*, char*, int);
int remote_read(int, char*, int);
int remote_write(int, char*, int);
int remput(struct segment*, ulong, long, char*, int);
void restartio(void);
uvlong rget(Map*, char*);
String *runenode(Rune*);
char* runcmd(char*);
int scmp(String*, String*);
void setdbg_opt(char, int);
int sendremote(int, char*);
void sproc(int);
String* stradd(String*, String*);
String* strnode(char*);
String* strnodlen(char*, int);
char* mysystem(void);
void trlist(Map*, uvlong, uvlong, Symbol*);
void unwind(void);
void userinit(void);
void varreg(void);
void varsym(void);
char* waitfor(int);
void whatis(Lsym*);
void windir(Map*, Node*, Node*, Node*);
void yyerror(char*, ...);
int yylex(void);
int yyparse(void);
enum
{
ONAME,
OCONST,
OMUL,
ODIV,
OMOD,
OADD,
OSUB,
ORSH,
OLSH,
OLT,
OGT,
OLEQ,
OGEQ,
OEQ,
ONEQ,
OLAND,
OXOR,
OLOR,
OCAND,
OCOR,
OASGN,
OINDM,
OEDEC,
OEINC,
OPINC,
OPDEC,
ONOT,
OIF,
ODO,
OLIST,
OCALL,
OCTRUCT,
OWHILE,
OELSE,
OHEAD,
OTAIL,
OAPPEND,
ORET,
OINDEX,
OINDC,
ODOT,
OLOCAL,
OFRAME,
OCOMPLEX,
ODELETE,
OCAST,
OFMT,
OEVAL,
OWHAT,
};