init.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. #include "stdafx.h"
  2. #include "defs.h"
  3. void
  4. init(void)
  5. {
  6. int i;
  7. static int flag;
  8. tos = 0;
  9. esc_flag = 0;
  10. draw_flag = 0;
  11. frame = stack + TOS;
  12. p0 = symbol(NIL);
  13. p1 = symbol(NIL);
  14. p2 = symbol(NIL);
  15. p3 = symbol(NIL);
  16. p4 = symbol(NIL);
  17. p5 = symbol(NIL);
  18. p6 = symbol(NIL);
  19. p7 = symbol(NIL);
  20. p8 = symbol(NIL);
  21. p9 = symbol(NIL);
  22. if (flag)
  23. return; // already initted
  24. flag = 1;
  25. for (i = 0; i < NSYM; i++) {
  26. symtab[i].k = SYM;
  27. binding[i] = symtab + i;
  28. arglist[i] = symbol(NIL);
  29. }
  30. std_symbol("abs", ABS);
  31. std_symbol("add", ADD);
  32. std_symbol("adj", ADJ);
  33. std_symbol("and", AND);
  34. std_symbol("arccos", ARCCOS);
  35. std_symbol("arccosh", ARCCOSH);
  36. std_symbol("arcsin", ARCSIN);
  37. std_symbol("arcsinh", ARCSINH);
  38. std_symbol("arctan", ARCTAN);
  39. std_symbol("arctanh", ARCTANH);
  40. std_symbol("arg", ARG);
  41. std_symbol("atomize", ATOMIZE);
  42. std_symbol("besselj", BESSELJ);
  43. std_symbol("bessely", BESSELY);
  44. std_symbol("binding", BINDING);
  45. std_symbol("binomial", BINOMIAL);
  46. std_symbol("ceiling", CEILING);
  47. std_symbol("check", CHECK);
  48. std_symbol("choose", CHOOSE);
  49. std_symbol("circexp", CIRCEXP);
  50. std_symbol("clear", CLEAR);
  51. std_symbol("clock", CLOCK);
  52. std_symbol("coeff", COEFF);
  53. std_symbol("cofactor", COFACTOR);
  54. std_symbol("condense", CONDENSE);
  55. std_symbol("conj", CONJ);
  56. std_symbol("contract", CONTRACT);
  57. std_symbol("cos", COS);
  58. std_symbol("cosh", COSH);
  59. std_symbol("decomp", DECOMP);
  60. std_symbol("defint", DEFINT);
  61. std_symbol("deg", DEGREE);
  62. std_symbol("denominator", DENOMINATOR);
  63. std_symbol("det", DET);
  64. std_symbol("derivative", DERIVATIVE);
  65. std_symbol("dim", DIM);
  66. std_symbol("dirac", DIRAC);
  67. std_symbol("display", DISPLAY);
  68. std_symbol("divisors", DIVISORS);
  69. std_symbol("do", DO);
  70. std_symbol("dot", DOT);
  71. std_symbol("draw", DRAW);
  72. std_symbol("dsolve", DSOLVE);
  73. std_symbol("erf", ERF);
  74. std_symbol("erfc", ERFC);
  75. std_symbol("eigen", EIGEN);
  76. std_symbol("eigenval", EIGENVAL);
  77. std_symbol("eigenvec", EIGENVEC);
  78. std_symbol("eval", EVAL);
  79. std_symbol("exp", EXP);
  80. std_symbol("expand", EXPAND);
  81. std_symbol("expcos", EXPCOS);
  82. std_symbol("expsin", EXPSIN);
  83. std_symbol("factor", FACTOR);
  84. std_symbol("factorial", FACTORIAL);
  85. std_symbol("factorpoly", FACTORPOLY);
  86. std_symbol("filter", FILTER);
  87. std_symbol("float", FLOATF);
  88. std_symbol("floor", FLOOR);
  89. std_symbol("for", FOR);
  90. std_symbol("Gamma", GAMMA);
  91. std_symbol("gcd", GCD);
  92. std_symbol("hermite", HERMITE);
  93. std_symbol("hilbert", HILBERT);
  94. std_symbol("imag", IMAG);
  95. std_symbol("component", INDEX);
  96. std_symbol("inner", INNER);
  97. std_symbol("integral", INTEGRAL);
  98. std_symbol("inv", INV);
  99. std_symbol("invg", INVG);
  100. std_symbol("isinteger", ISINTEGER);
  101. std_symbol("isprime", ISPRIME);
  102. std_symbol("laguerre", LAGUERRE);
  103. // std_symbol("laplace", LAPLACE);
  104. std_symbol("lcm", LCM);
  105. std_symbol("leading", LEADING);
  106. std_symbol("legendre", LEGENDRE);
  107. std_symbol("log", LOG);
  108. std_symbol("mag", MAG);
  109. std_symbol("mod", MOD);
  110. std_symbol("multiply", MULTIPLY);
  111. std_symbol("not", NOT);
  112. std_symbol("nroots", NROOTS);
  113. std_symbol("number", NUMBER);
  114. std_symbol("numerator", NUMERATOR);
  115. std_symbol("operator", OPERATOR);
  116. std_symbol("or", OR);
  117. std_symbol("outer", OUTER);
  118. std_symbol("polar", POLAR);
  119. std_symbol("power", POWER);
  120. std_symbol("prime", PRIME);
  121. std_symbol("print", PRINT);
  122. std_symbol("product", PRODUCT);
  123. std_symbol("quote", QUOTE);
  124. std_symbol("quotient", QUOTIENT);
  125. // std_symbol("random", RANDOM);
  126. std_symbol("rank", RANK);
  127. std_symbol("rationalize", RATIONALIZE);
  128. std_symbol("real", REAL);
  129. std_symbol("rect", YYRECT);
  130. std_symbol("roots", ROOTS);
  131. std_symbol("equals", SETQ);
  132. std_symbol("sgn", SGN);
  133. std_symbol("simplify", SIMPLIFY);
  134. std_symbol("sin", SIN);
  135. std_symbol("sinh", SINH);
  136. std_symbol("sqrt", SQRT);
  137. std_symbol("stop", STOP);
  138. std_symbol("subst", SUBST);
  139. std_symbol("sum", SUM);
  140. std_symbol("tan", TAN);
  141. std_symbol("tanh", TANH);
  142. std_symbol("taylor", TAYLOR);
  143. std_symbol("test", TEST);
  144. std_symbol("testeq", TESTEQ);
  145. std_symbol("testge", TESTGE);
  146. std_symbol("testgt", TESTGT);
  147. std_symbol("testle", TESTLE);
  148. std_symbol("testlt", TESTLT);
  149. std_symbol("transpose", TRANSPOSE);
  150. std_symbol("unit", UNIT);
  151. std_symbol("zero", ZERO);
  152. std_symbol("nil", NIL);
  153. // each symbol needs a unique name because equal() compares printnames
  154. std_symbol("autoexpand", AUTOEXPAND);
  155. std_symbol("bake", BAKE);
  156. std_symbol("last", LAST);
  157. std_symbol("trace", TRACE);
  158. std_symbol("tty", TTY);
  159. std_symbol("~", YYE); // tilde so sort puts it after other symbols
  160. std_symbol("$DRAWX", DRAWX); // special purpose internal symbols
  161. std_symbol("$METAA", METAA);
  162. std_symbol("$METAB", METAB);
  163. std_symbol("$METAX", METAX);
  164. std_symbol("$SECRETX", SECRETX);
  165. std_symbol("pi", PI);
  166. std_symbol("a", SYMBOL_A);
  167. std_symbol("b", SYMBOL_B);
  168. std_symbol("c", SYMBOL_C);
  169. std_symbol("d", SYMBOL_D);
  170. std_symbol("i", SYMBOL_I);
  171. std_symbol("j", SYMBOL_J);
  172. std_symbol("n", SYMBOL_N);
  173. std_symbol("r", SYMBOL_R);
  174. std_symbol("s", SYMBOL_S);
  175. std_symbol("t", SYMBOL_T);
  176. std_symbol("x", SYMBOL_X);
  177. std_symbol("y", SYMBOL_Y);
  178. std_symbol("z", SYMBOL_Z);
  179. std_symbol("$C1", C1);
  180. std_symbol("$C2", C2);
  181. std_symbol("$C3", C3);
  182. std_symbol("$C4", C4);
  183. std_symbol("$C5", C5);
  184. std_symbol("$C6", C6);
  185. push_integer(0);
  186. zero = pop(); // must be untagged in gc
  187. push_integer(1);
  188. one = pop(); // must be untagged in gc
  189. push_symbol(POWER);
  190. push_integer(-1);
  191. push_rational(1, 2);
  192. list(3);
  193. imaginaryunit = pop(); // must be untagged in gc
  194. defn();
  195. }
  196. static char *defn_str[] = {
  197. "e=exp(1)",
  198. "i=sqrt(-1)",
  199. "autoexpand=1",
  200. "trange=(-pi,pi)",
  201. "xrange=(-10,10)",
  202. "yrange=(-10,10)",
  203. "last=0",
  204. "trace=0",
  205. "tty=0",
  206. "cross(u,v)=(u[2]*v[3]-u[3]*v[2],u[3]*v[1]-u[1]*v[3],u[1]*v[2]-u[2]*v[1])",
  207. "curl(v)=(d(v[3],y)-d(v[2],z),d(v[1],z)-d(v[3],x),d(v[2],x)-d(v[1],y))",
  208. "div(v)=d(v[1],x)+d(v[2],y)+d(v[3],z)",
  209. "ln(x)=log(x)",
  210. };
  211. void
  212. defn(void)
  213. {
  214. int i, n;
  215. n = sizeof defn_str / sizeof (char *);
  216. for (i = 0; i < n; i++) {
  217. scan(defn_str[i]);
  218. eval();
  219. pop();
  220. }
  221. }