mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-07 15:03:34 +00:00
e16a7d8f3b
`et` means `expandtab`. ```sh rg 'vi: .* :vi' -l -0 | \ xargs -0 sed -i '' 's/vi: \(.*\) et\(.*\) :vi/vi: \1 xoet\2:vi/' rg 'vi: .* :vi' -l -0 | \ xargs -0 sed -i '' 's/vi: \(.*\)noet\(.*\):vi/vi: \1et\2 :vi/' rg 'vi: .* :vi' -l -0 | \ xargs -0 sed -i '' 's/vi: \(.*\)xoet\(.*\):vi/vi: \1noet\2:vi/' ```
139 lines
5.8 KiB
C
139 lines
5.8 KiB
C
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||
│ vi: set et ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi │
|
||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
||
│ │
|
||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||
│ any purpose with or without fee is hereby granted, provided that the │
|
||
│ above copyright notice and this permission notice appear in all copies. │
|
||
│ │
|
||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||
#include "libc/str/str.h"
|
||
#include "tool/plinko/lib/cons.h"
|
||
#include "tool/plinko/lib/plinko.h"
|
||
|
||
static void SetInput(const char *s) {
|
||
bp[0] = 0;
|
||
dx = L' ';
|
||
strcpy(stpcpy(g_buffer[0], s), " ");
|
||
}
|
||
|
||
static void Programme(int i, DispatchFn *f, int x) {
|
||
SetShadow(i, MAKE(EncodeDispatchFn(f), x));
|
||
}
|
||
|
||
static void Program(int i, DispatchFn *f) {
|
||
Programme(i, f, 0);
|
||
}
|
||
|
||
static void ProgramPrecious(int i) {
|
||
Program(i, DispatchPrecious);
|
||
}
|
||
|
||
static void ProgramLookup(int i) {
|
||
Program(i, DispatchLookup);
|
||
}
|
||
|
||
static void ProgramIgnore0(int i) {
|
||
Program(i, DispatchIgnore0);
|
||
}
|
||
|
||
static void ProgramPlan(int i) {
|
||
Program(i, DispatchPlan);
|
||
}
|
||
|
||
void Setup(void) {
|
||
int i;
|
||
char buf[4] = "(A)";
|
||
SetShadow(-1, DF(DispatchPlan));
|
||
SetShadow(0, DF(DispatchPrecious));
|
||
SetShadow(+1, DF(DispatchPrecious));
|
||
PROG(ProgramPrecious, kEq, "EQ");
|
||
PROG(ProgramPrecious, kGc, "GC");
|
||
PROG(ProgramPrecious, kCmp, "CMP");
|
||
PROG(ProgramPrecious, kCar, "CAR");
|
||
PROG(ProgramPrecious, kCdr, "CDR");
|
||
PROG(ProgramPrecious, kBeta, "BETA");
|
||
PROG(ProgramPrecious, kAtom, "ATOM");
|
||
PROG(ProgramPrecious, kCond, "COND");
|
||
PROG(ProgramPrecious, kCons, "CONS");
|
||
PROG(ProgramPrecious, kRead, "READ");
|
||
PROG(ProgramPrecious, kDump, "DUMP");
|
||
PROG(ProgramPrecious, kExit, "EXIT");
|
||
PROG(ProgramPrecious, kFork, "FORK");
|
||
PROG(ProgramPrecious, kQuote, "QUOTE");
|
||
PROG(ProgramPrecious, kProgn, "PROGN");
|
||
PROG(ProgramPrecious, kMacro, "MACRO");
|
||
PROG(ProgramPrecious, kQuiet, "QUIET");
|
||
PROG(ProgramPrecious, kError, "ERROR");
|
||
PROG(ProgramPrecious, kTrace, "TRACE");
|
||
PROG(ProgramPrecious, kPrint, "PRINT");
|
||
PROG(ProgramPrecious, kPrinc, "PRINC");
|
||
PROG(ProgramPrecious, kFlush, "FLUSH");
|
||
PROG(ProgramPrecious, kOrder, "ORDER");
|
||
PROG(ProgramPrecious, kGensym, "GENSYM");
|
||
PROG(ProgramPrecious, kPprint, "PPRINT");
|
||
PROG(ProgramPrecious, kIgnore, "IGNORE");
|
||
PROG(ProgramPrecious, kMtrace, "MTRACE");
|
||
PROG(ProgramPrecious, kFtrace, "FTRACE");
|
||
PROG(ProgramPrecious, kGtrace, "GTRACE");
|
||
PROG(ProgramPrecious, kLambda, "LAMBDA");
|
||
PROG(ProgramPrecious, kDefine, "DEFINE");
|
||
PROG(ProgramPrecious, kExpand, "EXPAND");
|
||
PROG(ProgramPrecious, kClosure, "CLOSURE");
|
||
PROG(ProgramPrecious, kPartial, "PARTIAL");
|
||
PROG(ProgramPrecious, kFunction, "FUNCTION");
|
||
PROG(ProgramPrecious, kIntegrate, "INTEGRATE");
|
||
PROG(ProgramPrecious, kPrintheap, "PRINTHEAP");
|
||
PROG(ProgramPrecious, kImpossible, "IMPOSSIBLE");
|
||
PROG(ProgramLookup, kComma, "COMMA_");
|
||
PROG(ProgramLookup, kSplice, "SPLICE_");
|
||
PROG(ProgramLookup, kBackquote, "BACKQUOTE_");
|
||
PROG(ProgramLookup, kString, "STRING_");
|
||
PROG(ProgramLookup, kSquare, "SQUARE_");
|
||
PROG(ProgramLookup, kCurly, "CURLY_");
|
||
PROG(ProgramLookup, kDefun, "DEFUN");
|
||
PROG(ProgramLookup, kDefmacro, "DEFMACRO");
|
||
PROG(ProgramLookup, kAppend, "APPEND");
|
||
PROG(ProgramLookup, kOr, "OR");
|
||
PROG(ProgramLookup, kAnd, "AND");
|
||
PROG(ProgramLookup, kIntersection, "INTERSECTION");
|
||
PROG(ProgramLookup, kList, "LIST");
|
||
PROG(ProgramLookup, kMember, "MEMBER");
|
||
PROG(ProgramLookup, kNot, "NOT");
|
||
PROG(ProgramLookup, kReverse, "REVERSE");
|
||
PROG(ProgramLookup, kSqrt, "SQRT");
|
||
PROG(ProgramLookup, kSubset, "SUBSET");
|
||
PROG(ProgramLookup, kSuperset, "SUPERSET");
|
||
PROG(ProgramLookup, kBecause, "BECAUSE");
|
||
PROG(ProgramLookup, kTherefore, "THEREFORE");
|
||
PROG(ProgramLookup, kUnion, "UNION");
|
||
PROG(ProgramLookup, kImplies, "IMPLIES");
|
||
PROG(ProgramLookup, kYcombinator, "YCOMBINATOR");
|
||
PROG(ProgramLookup, kNand, "NAND");
|
||
PROG(ProgramLookup, kNor, "NOR");
|
||
PROG(ProgramLookup, kXor, "XOR");
|
||
PROG(ProgramLookup, kIff, "IFF");
|
||
PROG(ProgramLookup, kCycle, "CYCLE");
|
||
PROG(ProgramLookup, kTrench, "𝕋ℝ𝔼ℕℂℍ");
|
||
PROG(ProgramLookup, kUnchanged, "ⁿ/ₐ");
|
||
PROG(ProgramIgnore0, kIgnore0, "(IGNORE)");
|
||
for (i = 0; i < 26; ++i, ++buf[1]) {
|
||
PROG(ProgramPlan, kConsAlphabet[i], buf);
|
||
}
|
||
for (buf[0] = L'A', buf[1] = 0, i = 0; i < 26; ++i, ++buf[0]) {
|
||
if (buf[0] != 'T') {
|
||
PROG(ProgramLookup, kAlphabet[i], buf);
|
||
} else {
|
||
kAlphabet[i] = 1;
|
||
}
|
||
}
|
||
}
|