home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2002 April / pcpro0402.iso / essentials / graphics / Gimp / gimp-src-20001226.exe / src / gimp / unofficial-plug-ins / mathmap / builtins_interpreter.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-26  |  41.3 KB  |  1,225 lines

  1.  
  2. #include "noise.h"
  3.  
  4.  
  5. void gen_print (FILE*, int*, int*, int);
  6.     void builtin_print (postfix_arg *arg)
  7.     {
  8.         printf("[");
  9.     {
  10.         int i_1;
  11.  
  12.         for (i_1 = 0; i_1 < stack[stackp - 1].length; ++i_1)
  13.         {
  14.             printf("%f ", stack[stackp - 1].data[i_1]);
  15.         }
  16.     }
  17.     printf("]\n");
  18.         stackp -= 0;
  19.     }
  20.  
  21. void gen_add_ri (FILE*, int*, int*, int);
  22.     void builtin_add_ri (postfix_arg *arg)
  23.     {
  24.         stack[stackp - 2].data[0] = stack[stackp - 2].data[0] + stack[stackp - 1].data[0];
  25.     stack[stackp - 2].data[1] = stack[stackp - 2].data[1] + stack[stackp - 1].data[1];
  26.         stackp -= 1;
  27.     }
  28.  
  29. void gen_add_1 (FILE*, int*, int*, int);
  30.     void builtin_add_1 (postfix_arg *arg)
  31.     {
  32.         stack[stackp - 2].data[0] = stack[stackp - 2].data[0] + stack[stackp - 1].data[0];
  33.         stackp -= 1;
  34.     }
  35.  
  36. void gen_add_s (FILE*, int*, int*, int);
  37.     void builtin_add_s (postfix_arg *arg)
  38.     {
  39.         {
  40.         int i_2;
  41.  
  42.         for (i_2 = 0; i_2 < stack[stackp - 2].length; ++i_2)
  43.         {
  44.             stack[stackp - 2].data[i_2] = stack[stackp - 2].data[i_2] + stack[stackp - 1].data[0];
  45.         }
  46.     }
  47.         stackp -= 1;
  48.     }
  49.  
  50. void gen_add_n (FILE*, int*, int*, int);
  51.     void builtin_add_n (postfix_arg *arg)
  52.     {
  53.         {
  54.         int i_3;
  55.  
  56.         for (i_3 = 0; i_3 < stack[stackp - 2].length; ++i_3)
  57.         {
  58.             stack[stackp - 2].data[i_3] = stack[stackp - 2].data[i_3] + stack[stackp - 1].data[i_3];
  59.         }
  60.     }
  61.         stackp -= 1;
  62.     }
  63.  
  64. void gen_sub_ri (FILE*, int*, int*, int);
  65.     void builtin_sub_ri (postfix_arg *arg)
  66.     {
  67.         stack[stackp - 2].data[0] = stack[stackp - 2].data[0] + stack[stackp - 1].data[0];
  68.     stack[stackp - 2].data[1] = stack[stackp - 2].data[1] + stack[stackp - 1].data[1];
  69.         stackp -= 1;
  70.     }
  71.  
  72. void gen_sub_1 (FILE*, int*, int*, int);
  73.     void builtin_sub_1 (postfix_arg *arg)
  74.     {
  75.         stack[stackp - 2].data[0] = stack[stackp - 2].data[0] - stack[stackp - 1].data[0];
  76.         stackp -= 1;
  77.     }
  78.  
  79. void gen_sub_s (FILE*, int*, int*, int);
  80.     void builtin_sub_s (postfix_arg *arg)
  81.     {
  82.         {
  83.         int i_4;
  84.  
  85.         for (i_4 = 0; i_4 < stack[stackp - 2].length; ++i_4)
  86.         {
  87.             stack[stackp - 2].data[i_4] = stack[stackp - 2].data[i_4] - stack[stackp - 1].data[0];
  88.         }
  89.     }
  90.         stackp -= 1;
  91.     }
  92.  
  93. void gen_sub_n (FILE*, int*, int*, int);
  94.     void builtin_sub_n (postfix_arg *arg)
  95.     {
  96.         {
  97.         int i_5;
  98.  
  99.         for (i_5 = 0; i_5 < stack[stackp - 2].length; ++i_5)
  100.         {
  101.             stack[stackp - 2].data[i_5] = stack[stackp - 2].data[i_5] - stack[stackp - 1].data[i_5];
  102.         }
  103.     }
  104.         stackp -= 1;
  105.     }
  106.  
  107. void gen_mul_ri (FILE*, int*, int*, int);
  108.     void builtin_mul_ri (postfix_arg *arg)
  109.     {
  110.         float r1 = stack[stackp - 2].data[0];
  111.     float r2 = stack[stackp - 1].data[0];
  112.     float c1 = stack[stackp - 2].data[1];
  113.     float c2 = stack[stackp - 1].data[1];
  114.  
  115.     stack[stackp - 2].data[0] = r1 * r2 - c1 * c2;
  116.     stack[stackp - 2].data[1] = r1 * c2 + r2 * c1;
  117.         stackp -= 1;
  118.     }
  119.  
  120.  
  121. void gen_mul_m2x2 (FILE*, int*, int*, int);
  122.     void builtin_mul_m2x2 (postfix_arg *arg)
  123.     {
  124.         float a00 = stack[stackp - 2].data[0] * stack[stackp - 1].data[0]+stack[stackp - 2].data[1] * stack[stackp - 1].data[2];
  125. float a01 = stack[stackp - 2].data[0] * stack[stackp - 1].data[1]+stack[stackp - 2].data[1] * stack[stackp - 1].data[3];
  126. float a10 = stack[stackp - 2].data[2] * stack[stackp - 1].data[0]+stack[stackp - 2].data[3] * stack[stackp - 1].data[2];
  127. float a11 = stack[stackp - 2].data[2] * stack[stackp - 1].data[1]+stack[stackp - 2].data[3] * stack[stackp - 1].data[3];
  128.  
  129.     stack[stackp - 2].data[0] = a00;
  130. stack[stackp - 2].data[1] = a01;
  131. stack[stackp - 2].data[2] = a10;
  132. stack[stackp - 2].data[3] = a11;
  133.  
  134.         stackp -= 1;
  135.     }
  136.  
  137. void gen_mul_m3x3 (FILE*, int*, int*, int);
  138.     void builtin_mul_m3x3 (postfix_arg *arg)
  139.     {
  140.         float a00 = stack[stackp - 2].data[0] * stack[stackp - 1].data[0]+stack[stackp - 2].data[1] * stack[stackp - 1].data[3]+stack[stackp - 2].data[2] * stack[stackp - 1].data[6];
  141. float a01 = stack[stackp - 2].data[0] * stack[stackp - 1].data[1]+stack[stackp - 2].data[1] * stack[stackp - 1].data[4]+stack[stackp - 2].data[2] * stack[stackp - 1].data[7];
  142. float a02 = stack[stackp - 2].data[0] * stack[stackp - 1].data[2]+stack[stackp - 2].data[1] * stack[stackp - 1].data[5]+stack[stackp - 2].data[2] * stack[stackp - 1].data[8];
  143. float a10 = stack[stackp - 2].data[3] * stack[stackp - 1].data[0]+stack[stackp - 2].data[4] * stack[stackp - 1].data[3]+stack[stackp - 2].data[5] * stack[stackp - 1].data[6];
  144. float a11 = stack[stackp - 2].data[3] * stack[stackp - 1].data[1]+stack[stackp - 2].data[4] * stack[stackp - 1].data[4]+stack[stackp - 2].data[5] * stack[stackp - 1].data[7];
  145. float a12 = stack[stackp - 2].data[3] * stack[stackp - 1].data[2]+stack[stackp - 2].data[4] * stack[stackp - 1].data[5]+stack[stackp - 2].data[5] * stack[stackp - 1].data[8];
  146. float a20 = stack[stackp - 2].data[6] * stack[stackp - 1].data[0]+stack[stackp - 2].data[7] * stack[stackp - 1].data[3]+stack[stackp - 2].data[8] * stack[stackp - 1].data[6];
  147. float a21 = stack[stackp - 2].data[6] * stack[stackp - 1].data[1]+stack[stackp - 2].data[7] * stack[stackp - 1].data[4]+stack[stackp - 2].data[8] * stack[stackp - 1].data[7];
  148. float a22 = stack[stackp - 2].data[6] * stack[stackp - 1].data[2]+stack[stackp - 2].data[7] * stack[stackp - 1].data[5]+stack[stackp - 2].data[8] * stack[stackp - 1].data[8];
  149.  
  150.     stack[stackp - 2].data[0] = a00;
  151. stack[stackp - 2].data[1] = a01;
  152. stack[stackp - 2].data[2] = a02;
  153. stack[stackp - 2].data[3] = a10;
  154. stack[stackp - 2].data[4] = a11;
  155. stack[stackp - 2].data[5] = a12;
  156. stack[stackp - 2].data[6] = a20;
  157. stack[stackp - 2].data[7] = a21;
  158. stack[stackp - 2].data[8] = a22;
  159.  
  160.         stackp -= 1;
  161.     }
  162.  
  163.  
  164. void gen_mul_v2m2x2 (FILE*, int*, int*, int);
  165.     void builtin_mul_v2m2x2 (postfix_arg *arg)
  166.     {
  167.         float a0 = stack[stackp - 2].data[0] * stack[stackp - 1].data[0]+stack[stackp - 2].data[1] * stack[stackp - 1].data[2];
  168. float a1 = stack[stackp - 2].data[0] * stack[stackp - 1].data[1]+stack[stackp - 2].data[1] * stack[stackp - 1].data[3];
  169.  
  170.     stack[stackp - 2].data[0] = a0;
  171. stack[stackp - 2].data[1] = a1;
  172.  
  173.         stackp -= 1;
  174.     }
  175.  
  176. void gen_mul_v3m3x3 (FILE*, int*, int*, int);
  177.     void builtin_mul_v3m3x3 (postfix_arg *arg)
  178.     {
  179.         float a0 = stack[stackp - 2].data[0] * stack[stackp - 1].data[0]+stack[stackp - 2].data[1] * stack[stackp - 1].data[3]+stack[stackp - 2].data[2] * stack[stackp - 1].data[6];
  180. float a1 = stack[stackp - 2].data[0] * stack[stackp - 1].data[1]+stack[stackp - 2].data[1] * stack[stackp - 1].data[4]+stack[stackp - 2].data[2] * stack[stackp - 1].data[7];
  181. float a2 = stack[stackp - 2].data[0] * stack[stackp - 1].data[2]+stack[stackp - 2].data[1] * stack[stackp - 1].data[5]+stack[stackp - 2].data[2] * stack[stackp - 1].data[8];
  182.  
  183.     stack[stackp - 2].data[0] = a0;
  184. stack[stackp - 2].data[1] = a1;
  185. stack[stackp - 2].data[2] = a2;
  186.  
  187.         stackp -= 1;
  188.     }
  189.  
  190.  
  191. void gen_mul_m2x2v2 (FILE*, int*, int*, int);
  192.     void builtin_mul_m2x2v2 (postfix_arg *arg)
  193.     {
  194.         float a0 = stack[stackp - 2].data[0] * stack[stackp - 1].data[0]+stack[stackp - 2].data[1] * stack[stackp - 1].data[1];
  195. float a1 = stack[stackp - 2].data[2] * stack[stackp - 1].data[0]+stack[stackp - 2].data[3] * stack[stackp - 1].data[1];
  196.  
  197.     stack[stackp - 2].data[0] = a0;
  198. stack[stackp - 2].data[1] = a1;
  199.  
  200.         stackp -= 1;
  201.     }
  202.  
  203. void gen_mul_m3x3v3 (FILE*, int*, int*, int);
  204.     void builtin_mul_m3x3v3 (postfix_arg *arg)
  205.     {
  206.         float a0 = stack[stackp - 2].data[0] * stack[stackp - 1].data[0]+stack[stackp - 2].data[1] * stack[stackp - 1].data[1]+stack[stackp - 2].data[2] * stack[stackp - 1].data[2];
  207. float a1 = stack[stackp - 2].data[3] * stack[stackp - 1].data[0]+stack[stackp - 2].data[4] * stack[stackp - 1].data[1]+stack[stackp - 2].data[5] * stack[stackp - 1].data[2];
  208. float a2 = stack[stackp - 2].data[6] * stack[stackp - 1].data[0]+stack[stackp - 2].data[7] * stack[stackp - 1].data[1]+stack[stackp - 2].data[8] * stack[stackp - 1].data[2];
  209.  
  210.     stack[stackp - 2].data[0] = a0;
  211. stack[stackp - 2].data[1] = a1;
  212. stack[stackp - 2].data[2] = a2;
  213.  
  214.         stackp -= 1;
  215.     }
  216.  
  217. void gen_mul_1 (FILE*, int*, int*, int);
  218.     void builtin_mul_1 (postfix_arg *arg)
  219.     {
  220.         stack[stackp - 2].data[0] = stack[stackp - 2].data[0] * stack[stackp - 1].data[0];
  221.         stackp -= 1;
  222.     }
  223.  
  224. void gen_mul_s (FILE*, int*, int*, int);
  225.     void builtin_mul_s (postfix_arg *arg)
  226.     {
  227.         {
  228.         int i_6;
  229.  
  230.         for (i_6 = 0; i_6 < stack[stackp - 2].length; ++i_6)
  231.         {
  232.             stack[stackp - 2].data[i_6] = stack[stackp - 2].data[i_6] * stack[stackp - 1].data[0];
  233.         }
  234.     }
  235.         stackp -= 1;
  236.     }
  237.  
  238. void gen_mul_n (FILE*, int*, int*, int);
  239.     void builtin_mul_n (postfix_arg *arg)
  240.     {
  241.         {
  242.         int i_7;
  243.  
  244.         for (i_7 = 0; i_7 < stack[stackp - 2].length; ++i_7)
  245.         {
  246.             stack[stackp - 2].data[i_7] = stack[stackp - 2].data[i_7] * stack[stackp - 1].data[i_7];
  247.         }
  248.     }
  249.         stackp -= 1;
  250.     }
  251.  
  252. void gen_div_ri (FILE*, int*, int*, int);
  253.     void builtin_div_ri (postfix_arg *arg)
  254.     {
  255.         float r1 = stack[stackp - 2].data[0];
  256.     float r2 = stack[stackp - 1].data[0];
  257.     float c1 = stack[stackp - 2].data[1];
  258.     float c2 = stack[stackp - 1].data[1];
  259.  
  260.     if (r2 == 0 && c2 == 0)
  261.     {
  262.         stack[stackp - 2].data[0] = 0;
  263.         stack[stackp - 2].data[1] = 0;
  264.     }
  265.     else
  266.     {
  267.         stack[stackp - 2].data[0] = (r1 * r2 + c1 * c2) / (r2 * r2 + c2 * c2);
  268.         stack[stackp - 2].data[1] = (-r1 * c2 + r2 * c1) / (r2 * r2 + c2 * c2);
  269.     }
  270.         stackp -= 1;
  271.     }
  272.  
  273. void gen_div_v2m2x2 (FILE*, int*, int*, int);
  274.     void builtin_div_v2m2x2 (postfix_arg *arg)
  275.     {
  276.         float a[4] = { stack[stackp - 1].data[0], stack[stackp - 1].data[1], stack[stackp - 1].data[2], stack[stackp - 1].data[3] };
  277.     float b[2] = { stack[stackp - 2].data[0], stack[stackp - 2].data[1] };
  278.  
  279.     solve_linear_equations(2, a, b);
  280.  
  281.     stack[stackp - 2].data[0] = b[0];
  282.     stack[stackp - 2].data[1] = b[1];
  283.         stackp -= 1;
  284.     }
  285.  
  286. void gen_div_v3m3x3 (FILE*, int*, int*, int);
  287.     void builtin_div_v3m3x3 (postfix_arg *arg)
  288.     {
  289.         float a[9] = { stack[stackp - 1].data[0], stack[stackp - 1].data[1], stack[stackp - 1].data[2], stack[stackp - 1].data[3], stack[stackp - 1].data[4], stack[stackp - 1].data[5], stack[stackp - 1].data[6], stack[stackp - 1].data[7], stack[stackp - 1].data[8] };
  290.     float b[3] = { stack[stackp - 2].data[0], stack[stackp - 2].data[1], stack[stackp - 2].data[2] };
  291.  
  292.     solve_linear_equations(3, a, b);
  293.  
  294.     stack[stackp - 2].data[0] = b[0];
  295.     stack[stackp - 2].data[1] = b[1];
  296.     stack[stackp - 2].data[2] = b[2];
  297.         stackp -= 1;
  298.     }
  299.  
  300. void gen_div_1 (FILE*, int*, int*, int);
  301.     void builtin_div_1 (postfix_arg *arg)
  302.     {
  303.         if (stack[stackp - 1].data[0] == 0)
  304.         stack[stackp - 2].data[0] = 0.0;
  305.     else
  306.         stack[stackp - 2].data[0] = stack[stackp - 2].data[0] / stack[stackp - 1].data[0];
  307.         stackp -= 1;
  308.     }
  309.  
  310. void gen_div_s (FILE*, int*, int*, int);
  311.     void builtin_div_s (postfix_arg *arg)
  312.     {
  313.         if (stack[stackp - 1].data[0] == 0)
  314.         {
  315.         int i_8;
  316.  
  317.         for (i_8 = 0; i_8 < stack[stackp - 2].length; ++i_8)
  318.         {
  319.             stack[stackp - 2].data[i_8] = 0.0;
  320.         }
  321.     }
  322.     else
  323.         {
  324.         int i_9;
  325.  
  326.         for (i_9 = 0; i_9 < stack[stackp - 2].length; ++i_9)
  327.         {
  328.             stack[stackp - 2].data[i_9] = stack[stackp - 2].data[i_9] / stack[stackp - 1].data[0];
  329.         }
  330.     }
  331.         stackp -= 1;
  332.     }
  333.  
  334. void gen_div_n (FILE*, int*, int*, int);
  335.     void builtin_div_n (postfix_arg *arg)
  336.     {
  337.         {
  338.         int i_10;
  339.  
  340.         for (i_10 = 0; i_10 < stack[stackp - 2].length; ++i_10)
  341.         {
  342.             if (stack[stackp - 1].data[i_10] == 0)
  343.             stack[stackp - 2].data[i_10] = 0.0;
  344.         else
  345.             stack[stackp - 2].data[i_10] = stack[stackp - 2].data[i_10] / stack[stackp - 1].data[i_10];
  346.         }
  347.     }
  348.         stackp -= 1;
  349.     }
  350.  
  351. void gen_mod_1 (FILE*, int*, int*, int);
  352.     void builtin_mod_1 (postfix_arg *arg)
  353.     {
  354.         if (stack[stackp - 1].data[0] == 0)
  355.         stack[stackp - 2].data[0] = 0.0;
  356.     else
  357.         stack[stackp - 2].data[0] = fmod(stack[stackp - 2].data[0], stack[stackp - 1].data[0]);
  358.         stackp -= 1;
  359.     }
  360.  
  361. void gen_mod_s (FILE*, int*, int*, int);
  362.     void builtin_mod_s (postfix_arg *arg)
  363.     {
  364.         if (stack[stackp - 1].data[0] == 0)
  365.         {
  366.         int i_11;
  367.  
  368.         for (i_11 = 0; i_11 < stack[stackp - 2].length; ++i_11)
  369.         {
  370.             stack[stackp - 2].data[i_11] = 0.0;
  371.         }
  372.     }
  373.     else
  374.         {
  375.         int i_12;
  376.  
  377.         for (i_12 = 0; i_12 < stack[stackp - 2].length; ++i_12)
  378.         {
  379.             stack[stackp - 2].data[i_12] = fmod(stack[stackp - 2].data[i_12], stack[stackp - 1].data[0]);
  380.         }
  381.     }
  382.         stackp -= 1;
  383.     }
  384.  
  385. void gen_mod_n (FILE*, int*, int*, int);
  386.     void builtin_mod_n (postfix_arg *arg)
  387.     {
  388.         {
  389.         int i_13;
  390.  
  391.         for (i_13 = 0; i_13 < stack[stackp - 2].length; ++i_13)
  392.         {
  393.             if (stack[stackp - 1].data[i_13] == 0)
  394.             stack[stackp - 2].data[i_13] = 0.0;
  395.         else
  396.             stack[stackp - 2].data[i_13] = fmod(stack[stackp - 2].data[i_13], stack[stackp - 1].data[i_13]);
  397.         }
  398.     }
  399.         stackp -= 1;
  400.     }
  401.  
  402. void gen_pmod (FILE*, int*, int*, int);
  403.     void builtin_pmod (postfix_arg *arg)
  404.     {
  405.         float mod = fmod(stack[stackp - 2].data[0], stack[stackp - 1].data[0]);
  406.  
  407.     if (stack[stackp - 2].data[0] < 0)
  408.         mod += stack[stackp - 1].data[0];
  409.  
  410.     stack[stackp - 2].data[0] = mod;
  411.         stackp -= 1;
  412.     }
  413.  
  414. void gen_dotp (FILE*, int*, int*, int);
  415.     void builtin_dotp (postfix_arg *arg)
  416.     {
  417.         float sum = 0.0;
  418.  
  419.     {
  420.         int i_14;
  421.  
  422.         for (i_14 = 0; i_14 < stack[stackp - 2].length; ++i_14)
  423.         {
  424.             sum += stack[stackp - 2].data[i_14] * stack[stackp - 1].data[i_14];
  425.         }
  426.     }
  427.     stack[stackp - 2].data[0] = sum;
  428.     stack[stackp - 2].length = 1;
  429.         stackp -= 1;
  430.     }
  431.  
  432. void gen_crossp (FILE*, int*, int*, int);
  433.     void builtin_crossp (postfix_arg *arg)
  434.     {
  435.         stack[stackp - 2].data[0] = stack[stackp - 2].data[1] * stack[stackp - 1].data[2] - stack[stackp - 2].data[2] * stack[stackp - 1].data[1];
  436.     stack[stackp - 2].data[1] = stack[stackp - 2].data[2] * stack[stackp - 1].data[0] - stack[stackp - 2].data[0] * stack[stackp - 1].data[2];
  437.     stack[stackp - 2].data[2] = stack[stackp - 2].data[0] * stack[stackp - 1].data[1] - stack[stackp - 2].data[1] * stack[stackp - 1].data[0];
  438.         stackp -= 1;
  439.     }
  440.  
  441. void gen_det_m2x2 (FILE*, int*, int*, int);
  442.     void builtin_det_m2x2 (postfix_arg *arg)
  443.     {
  444.         stack[stackp - 1].data[0] = stack[stackp - 1].data[0] * stack[stackp - 1].data[3] - stack[stackp - 1].data[1] * stack[stackp - 1].data[2];
  445.         stackp -= 0;
  446.     }
  447.  
  448. void gen_det_m3x3 (FILE*, int*, int*, int);
  449.     void builtin_det_m3x3 (postfix_arg *arg)
  450.     {
  451.         stack[stackp - 1].data[0] = stack[stackp - 1].data[0] * stack[stackp - 1].data[4] * stack[stackp - 1].data[8]
  452.                  + stack[stackp - 1].data[1] * stack[stackp - 1].data[5] * stack[stackp - 1].data[6]
  453.                  + stack[stackp - 1].data[2] * stack[stackp - 1].data[3] + stack[stackp - 1].data[7]
  454.                  - stack[stackp - 1].data[2] * stack[stackp - 1].data[4] + stack[stackp - 1].data[6]
  455.                  - stack[stackp - 1].data[0] * stack[stackp - 1].data[5] + stack[stackp - 1].data[7]
  456.                  - stack[stackp - 1].data[1] * stack[stackp - 1].data[3] + stack[stackp - 1].data[8];
  457.         stackp -= 0;
  458.     }
  459.  
  460. void gen_normalize (FILE*, int*, int*, int);
  461.     void builtin_normalize (postfix_arg *arg)
  462.     {
  463.         float l = 0.0;
  464.  
  465.     {
  466.         int i_15;
  467.  
  468.         for (i_15 = 0; i_15 < stack[stackp - 1].length; ++i_15)
  469.         {
  470.             l += stack[stackp - 1].data[i_15] * stack[stackp - 1].data[i_15];
  471.         }
  472.     }
  473.     l = sqrt(l);
  474.     {
  475.         int i_16;
  476.  
  477.         for (i_16 = 0; i_16 < stack[stackp - 1].length; ++i_16)
  478.         {
  479.             if (l == 0)
  480.             stack[stackp - 1].data[i_16] = 0.0;
  481.         else
  482.             stack[stackp - 1].data[i_16] = stack[stackp - 1].data[i_16] / l;
  483.         }
  484.     }
  485.         stackp -= 0;
  486.     }
  487.  
  488. void gen_neg (FILE*, int*, int*, int);
  489.     void builtin_neg (postfix_arg *arg)
  490.     {
  491.         {
  492.         int i_17;
  493.  
  494.         for (i_17 = 0; i_17 < stack[stackp - 1].length; ++i_17)
  495.         {
  496.             stack[stackp - 1].data[i_17] = -stack[stackp - 1].data[i_17];
  497.         }
  498.     }
  499.         stackp -= 0;
  500.     }
  501.  
  502. void gen_sin (FILE*, int*, int*, int);
  503.     void builtin_sin (postfix_arg *arg)
  504.     {
  505.         stack[stackp - 1].data[0] = sin(stack[stackp - 1].data[0] * G_PI / 180.0);
  506.         stackp -= 0;
  507.     }
  508.  
  509. void gen_cos (FILE*, int*, int*, int);
  510.     void builtin_cos (postfix_arg *arg)
  511.     {
  512.         stack[stackp - 1].data[0] = cos(stack[stackp - 1].data[0] * G_PI / 180.0);
  513.         stackp -= 0;
  514.     }
  515.  
  516. void gen_tan (FILE*, int*, int*, int);
  517.     void builtin_tan (postfix_arg *arg)
  518.     {
  519.         stack[stackp - 1].data[0] = tan(stack[stackp - 1].data[0] * G_PI / 180.0);
  520.         stackp -= 0;
  521.     }
  522.  
  523. void gen_asin (FILE*, int*, int*, int);
  524.     void builtin_asin (postfix_arg *arg)
  525.     {
  526.         if (stack[stackp - 1].data[0] < -1.0 || stack[stackp - 1].data[0] > 1.0)
  527.     {
  528.         stack[stackp - 1].data[0] = 0.0;
  529.     }
  530.     else
  531.     {
  532.         stack[stackp - 1].data[0] = asin(stack[stackp - 1].data[0]) * 180.0 / G_PI;
  533.     }
  534.         stackp -= 0;
  535.     }
  536.  
  537. void gen_acos (FILE*, int*, int*, int);
  538.     void builtin_acos (postfix_arg *arg)
  539.     {
  540.         if (stack[stackp - 1].data[0] < -1.0 || stack[stackp - 1].data[0] > 1.0)
  541.     {
  542.         stack[stackp - 1].data[0] = 0.0;
  543.     }
  544.     else
  545.     {
  546.         stack[stackp - 1].data[0] = acos(stack[stackp - 1].data[0]) * 180.0 / G_PI;
  547.     }
  548.         stackp -= 0;
  549.     }
  550.  
  551. void gen_atan (FILE*, int*, int*, int);
  552.     void builtin_atan (postfix_arg *arg)
  553.     {
  554.         stack[stackp - 1].data[0] = atan(stack[stackp - 1].data[0]) * 180.0 / G_PI;
  555.         stackp -= 0;
  556.     }
  557.  
  558. void gen_atan2 (FILE*, int*, int*, int);
  559.     void builtin_atan2 (postfix_arg *arg)
  560.     {
  561.         stack[stackp - 2].data[0] = atan2(stack[stackp - 2].data[0],stack[stackp - 1].data[0]) * 180.0 / G_PI;
  562.         stackp -= 1;
  563.     }
  564.  
  565. void gen_pow_1 (FILE*, int*, int*, int);
  566.     void builtin_pow_1 (postfix_arg *arg)
  567.     {
  568.         stack[stackp - 2].data[0] = pow(stack[stackp - 2].data[0], stack[stackp - 1].data[0]);
  569.         stackp -= 1;
  570.     }
  571.  
  572. void gen_pow_s (FILE*, int*, int*, int);
  573.     void builtin_pow_s (postfix_arg *arg)
  574.     {
  575.         {
  576.         int i_18;
  577.  
  578.         for (i_18 = 0; i_18 < stack[stackp - 2].length; ++i_18)
  579.         {
  580.             stack[stackp - 2].data[i_18] = pow(stack[stackp - 2].data[i_18], stack[stackp - 1].data[0]);
  581.         }
  582.     }
  583.         stackp -= 1;
  584.     }
  585.  
  586. void gen_abs_ri (FILE*, int*, int*, int);
  587.     void builtin_abs_ri (postfix_arg *arg)
  588.     {
  589.         float r = stack[stackp - 1].data[0];
  590.     float i = stack[stackp - 1].data[1];
  591.  
  592.     stack[stackp - 1].data[0] = sqrt(r * r + i * i);
  593.     stack[stackp - 1].length = 1;
  594.         stackp -= 0;
  595.     }
  596.  
  597. void gen_abs_1 (FILE*, int*, int*, int);
  598.     void builtin_abs_1 (postfix_arg *arg)
  599.     {
  600.         stack[stackp - 1].data[0] = fabs(stack[stackp - 1].data[0]);
  601.         stackp -= 0;
  602.     }
  603.  
  604. void gen_abs_n (FILE*, int*, int*, int);
  605.     void builtin_abs_n (postfix_arg *arg)
  606.     {
  607.         {
  608.         int i_19;
  609.  
  610.         for (i_19 = 0; i_19 < stack[stackp - 1].length; ++i_19)
  611.         {
  612.             stack[stackp - 1].data[i_19] = fabs(stack[stackp - 1].data[i_19]);
  613.         }
  614.     }
  615.         stackp -= 0;
  616.     }
  617.  
  618. void gen_floor (FILE*, int*, int*, int);
  619.     void builtin_floor (postfix_arg *arg)
  620.     {
  621.         stack[stackp - 1].data[0] = floor(stack[stackp - 1].data[0]);
  622.         stackp -= 0;
  623.     }
  624.  
  625. void gen_sign_1 (FILE*, int*, int*, int);
  626.     void builtin_sign_1 (postfix_arg *arg)
  627.     {
  628.         if (stack[stackp - 1].data[0] < 0)
  629.         stack[stackp - 1].data[0] = -1.0;
  630.     else if (stack[stackp - 1].data[0] > 0)
  631.         stack[stackp - 1].data[0] = 1.0;
  632.     else
  633.         stack[stackp - 1].data[0] = 0.0;
  634.         stackp -= 0;
  635.     }
  636.  
  637. void gen_sign_n (FILE*, int*, int*, int);
  638.     void builtin_sign_n (postfix_arg *arg)
  639.     {
  640.         {
  641.         int i_20;
  642.  
  643.         for (i_20 = 0; i_20 < stack[stackp - 1].length; ++i_20)
  644.         {
  645.             if (stack[stackp - 1].data[i_20] < 0)
  646.             stack[stackp - 1].data[i_20] = -1.0;
  647.         else if (stack[stackp - 1].data[i_20] > 0)
  648.             stack[stackp - 1].data[i_20] = 1.0;
  649.         else
  650.             stack[stackp - 1].data[i_20] = 0.0;
  651.         }
  652.     }
  653.         stackp -= 0;
  654.     }
  655.  
  656. void gen_min_1 (FILE*, int*, int*, int);
  657.     void builtin_min_1 (postfix_arg *arg)
  658.     {
  659.         if (stack[stackp - 2].data[0] < stack[stackp - 1].data[0])
  660.         stack[stackp - 2].data[0] = stack[stackp - 2].data[0];
  661.     else
  662.         stack[stackp - 2].data[0] = stack[stackp - 1].data[0];
  663.         stackp -= 1;
  664.     }
  665.  
  666. void gen_min_n (FILE*, int*, int*, int);
  667.     void builtin_min_n (postfix_arg *arg)
  668.     {
  669.         {
  670.         int i_21;
  671.  
  672.         for (i_21 = 0; i_21 < stack[stackp - 2].length; ++i_21)
  673.         {
  674.             if (stack[stackp - 2].data[i_21] < stack[stackp - 1].data[i_21])
  675.             stack[stackp - 2].data[i_21] = stack[stackp - 2].data[i_21];
  676.         else
  677.             stack[stackp - 2].data[i_21] = stack[stackp - 1].data[i_21];
  678.         }
  679.     }
  680.         stackp -= 1;
  681.     }
  682.  
  683. void gen_max_1 (FILE*, int*, int*, int);
  684.     void builtin_max_1 (postfix_arg *arg)
  685.     {
  686.         if (stack[stackp - 2].data[0] > stack[stackp - 1].data[0])
  687.         stack[stackp - 2].data[0] = stack[stackp - 2].data[0];
  688.     else
  689.         stack[stackp - 2].data[0] = stack[stackp - 1].data[0];
  690.         stackp -= 1;
  691.     }
  692.  
  693. void gen_max_n (FILE*, int*, int*, int);
  694.     void builtin_max_n (postfix_arg *arg)
  695.     {
  696.         {
  697.         int i_22;
  698.  
  699.         for (i_22 = 0; i_22 < stack[stackp - 2].length; ++i_22)
  700.         {
  701.             if (stack[stackp - 2].data[i_22] > stack[stackp - 1].data[i_22])
  702.             stack[stackp - 2].data[i_22] = stack[stackp - 2].data[i_22];
  703.         else
  704.             stack[stackp - 2].data[i_22] = stack[stackp - 1].data[i_22];
  705.         }
  706.     }
  707.         stackp -= 1;
  708.     }
  709.  
  710. void gen_clamp (FILE*, int*, int*, int);
  711.     void builtin_clamp (postfix_arg *arg)
  712.     {
  713.         {
  714.         int i_23;
  715.  
  716.         for (i_23 = 0; i_23 < stack[stackp - 3].length; ++i_23)
  717.         {
  718.             if (stack[stackp - 3].data[i_23] < stack[stackp - 2].data[i_23])
  719.             stack[stackp - 3].data[i_23] = stack[stackp - 2].data[i_23];
  720.         else if (stack[stackp - 3].data[i_23] > stack[stackp - 1].data[i_23])
  721.             stack[stackp - 3].data[i_23] = stack[stackp - 1].data[i_23];
  722.         else
  723.             stack[stackp - 3].data[i_23] = stack[stackp - 3].data[i_23];
  724.         }
  725.     }
  726.         stackp -= 2;
  727.     }
  728.  
  729. void gen_lerp_1 (FILE*, int*, int*, int);
  730.     void builtin_lerp_1 (postfix_arg *arg)
  731.     {
  732.         {
  733.         int i_24;
  734.  
  735.         for (i_24 = 0; i_24 < stack[stackp - 3].length; ++i_24)
  736.         {
  737.             stack[stackp - 3].data[i_24] = (1 - stack[stackp - 3].data[0]) * stack[stackp - 2].data[i_24] + stack[stackp - 3].data[0] * stack[stackp - 1].data[i_24];
  738.         }
  739.     }
  740.         stackp -= 2;
  741.     }
  742.  
  743. void gen_lerp_n (FILE*, int*, int*, int);
  744.     void builtin_lerp_n (postfix_arg *arg)
  745.     {
  746.         {
  747.         int i_25;
  748.  
  749.         for (i_25 = 0; i_25 < stack[stackp - 3].length; ++i_25)
  750.         {
  751.             stack[stackp - 3].data[i_25] = (1 - stack[stackp - 3].data[i_25]) * stack[stackp - 2].data[i_25] + stack[stackp - 3].data[i_25] * stack[stackp - 1].data[i_25];
  752.         }
  753.     }
  754.         stackp -= 2;
  755.     }
  756.  
  757. void gen_sum (FILE*, int*, int*, int);
  758.     void builtin_sum (postfix_arg *arg)
  759.     {
  760.         float sum = 0.0;
  761.  
  762.     {
  763.         int i_26;
  764.  
  765.         for (i_26 = 0; i_26 < stack[stackp - 1].length; ++i_26)
  766.         {
  767.             sum += stack[stackp - 1].data[i_26];
  768.         }
  769.     }
  770.     stack[stackp - 1].data[0] = sum;
  771.         stackp -= 0;
  772.     }
  773.  
  774. void gen_not (FILE*, int*, int*, int);
  775.     void builtin_not (postfix_arg *arg)
  776.     {
  777.         if (stack[stackp - 1].data[0] != 0)
  778.         stack[stackp - 1].data[0] = 0.0;
  779.     else
  780.         stack[stackp - 1].data[0] = 1.0;
  781.         stackp -= 0;
  782.     }
  783.  
  784. void gen_or (FILE*, int*, int*, int);
  785.     void builtin_or (postfix_arg *arg)
  786.     {
  787.         if (stack[stackp - 2].data[0] || stack[stackp - 1].data[0])
  788.         stack[stackp - 2].data[0] = 1.0;
  789.     else
  790.         stack[stackp - 2].data[0] = 0.0;
  791.         stackp -= 1;
  792.     }
  793.  
  794. void gen_and (FILE*, int*, int*, int);
  795.     void builtin_and (postfix_arg *arg)
  796.     {
  797.         if (stack[stackp - 2].data[0] && stack[stackp - 1].data[0])
  798.         stack[stackp - 2].data[0] = 1.0;
  799.     else
  800.         stack[stackp - 2].data[0] = 0.0;
  801.         stackp -= 1;
  802.     }
  803.  
  804. void gen_equal (FILE*, int*, int*, int);
  805.     void builtin_equal (postfix_arg *arg)
  806.     {
  807.         if (stack[stackp - 2].data[0] == stack[stackp - 1].data[0])
  808.         stack[stackp - 2].data[0] = 1.0;
  809.     else
  810.         stack[stackp - 2].data[0] = 0.0;
  811.         stackp -= 1;
  812.     }
  813.  
  814. void gen_less (FILE*, int*, int*, int);
  815.     void builtin_less (postfix_arg *arg)
  816.     {
  817.         if (stack[stackp - 2].data[0] < stack[stackp - 1].data[0])
  818.         stack[stackp - 2].data[0] = 1.0;
  819.     else
  820.         stack[stackp - 2].data[0] = 0.0;
  821.         stackp -= 1;
  822.     }
  823.  
  824. void gen_greater (FILE*, int*, int*, int);
  825.     void builtin_greater (postfix_arg *arg)
  826.     {
  827.         if (stack[stackp - 2].data[0] > stack[stackp - 1].data[0])
  828.         stack[stackp - 2].data[0] = 1.0;
  829.     else
  830.         stack[stackp - 2].data[0] = 0.0;
  831.         stackp -= 1;
  832.     }
  833.  
  834. void gen_lessequal (FILE*, int*, int*, int);
  835.     void builtin_lessequal (postfix_arg *arg)
  836.     {
  837.         if (stack[stackp - 2].data[0] <= stack[stackp - 1].data[0])
  838.         stack[stackp - 2].data[0] = 1.0;
  839.     else
  840.         stack[stackp - 2].data[0] = 0.0;
  841.         stackp -= 1;
  842.     }
  843.  
  844. void gen_greaterequal (FILE*, int*, int*, int);
  845.     void builtin_greaterequal (postfix_arg *arg)
  846.     {
  847.         if (stack[stackp - 2].data[0] >= stack[stackp - 1].data[0])
  848.         stack[stackp - 2].data[0] = 1.0;
  849.     else
  850.         stack[stackp - 2].data[0] = 0.0;
  851.         stackp -= 1;
  852.     }
  853.  
  854. void gen_notequal (FILE*, int*, int*, int);
  855.     void builtin_notequal (postfix_arg *arg)
  856.     {
  857.         if (stack[stackp - 2].data[0] != stack[stackp - 1].data[0])
  858.         stack[stackp - 2].data[0] = 1.0;
  859.     else
  860.         stack[stackp - 2].data[0] = 0.0;
  861.         stackp -= 1;
  862.     }
  863.  
  864. void gen_inintv (FILE*, int*, int*, int);
  865.     void builtin_inintv (postfix_arg *arg)
  866.     {
  867.         if (stack[stackp - 3].data[0] >= stack[stackp - 2].data[0] && stack[stackp - 3].data[0] <= stack[stackp - 1].data[0])
  868.         stack[stackp - 3].data[0] = 1.0;
  869.     else
  870.         stack[stackp - 3].data[0] = 0.0;
  871.         stackp -= 2;
  872.     }
  873.  
  874. void gen_rand (FILE*, int*, int*, int);
  875.     void builtin_rand (postfix_arg *arg)
  876.     {
  877.         stack[stackp - 2].data[0] = (random() / (double)0x7fffffff) * (stack[stackp - 1].data[0] - stack[stackp - 2].data[0]) + stack[stackp - 2].data[0];
  878.         stackp -= 1;
  879.     }
  880.  
  881. void gen_origValXY (FILE*, int*, int*, int);
  882.     void builtin_origValXY (postfix_arg *arg)
  883.     {
  884.         unsigned char pixel[4];
  885.  
  886.     getOrigValPixel(stack[stackp - 2].data[0],stack[stackp - 2].data[1],pixel,stack[stackp - 1].data[0]);
  887.  
  888.     {
  889.         int i_27;
  890.  
  891.         for (i_27 = 0; i_27 < 4; ++i_27)
  892.         {
  893.             stack[stackp - 2].data[i_27] = pixel[i_27] / 255.0;
  894.         }
  895.     }
  896.     stack[stackp - 2].length = 4;
  897.         stackp -= 1;
  898.     }
  899.  
  900. void gen_origValXYIntersample (FILE*, int*, int*, int);
  901.     void builtin_origValXYIntersample (postfix_arg *arg)
  902.     {
  903.         unsigned char pixel[4];
  904.  
  905.     getOrigValIntersamplePixel(stack[stackp - 2].data[0],stack[stackp - 2].data[1],pixel,stack[stackp - 1].data[0]);
  906.  
  907.     {
  908.         int i_28;
  909.  
  910.         for (i_28 = 0; i_28 < 4; ++i_28)
  911.         {
  912.             stack[stackp - 2].data[i_28] = pixel[i_28] / 255.0;
  913.         }
  914.     }
  915.     stack[stackp - 2].length = 4;
  916.         stackp -= 1;
  917.     }
  918.  
  919. void gen_gray (FILE*, int*, int*, int);
  920.     void builtin_gray (postfix_arg *arg)
  921.     {
  922.         stack[stackp - 1].data[0] = 0.299 * stack[stackp - 1].data[0] + 0.587 * stack[stackp - 1].data[1] + 0.114 * stack[stackp - 1].data[2];
  923.     stack[stackp - 1].length = 1;
  924.         stackp -= 0;
  925.     }
  926.  
  927. void gen_gradient (FILE*, int*, int*, int);
  928.     void builtin_gradient (postfix_arg *arg)
  929.     {
  930.         int index = stack[stackp - 1].data[0] * (num_gradient_samples - 1);
  931.  
  932.     if (index < 0)
  933.         index = 0;
  934.     else if (index >= num_gradient_samples)
  935.         index = num_gradient_samples - 1;
  936.  
  937.     {
  938.         int i_29;
  939.  
  940.         for (i_29 = 0; i_29 < 4; ++i_29)
  941.         {
  942.             stack[stackp - 1].data[i_29] = gradient_samples[index].data[i_29];
  943.         }
  944.     }
  945.     stack[stackp - 1].length = 4;
  946.         stackp -= 0;
  947.     }
  948.  
  949. void gen_noise (FILE*, int*, int*, int);
  950.     void builtin_noise (postfix_arg *arg)
  951.     {
  952.         stack[stackp - 1].data[0] = noise(stack[stackp - 1].data[0], stack[stackp - 1].data[1], stack[stackp - 1].data[2]);
  953.         stackp -= 0;
  954.     }
  955.  
  956. void gen_toXY (FILE*, int*, int*, int);
  957.     void builtin_toXY (postfix_arg *arg)
  958.     {
  959.         double x, y;
  960.  
  961.     x = cos(stack[stackp - 1].data[1] * G_PI / 180) * stack[stackp - 1].data[0];
  962.     y = sin(stack[stackp - 1].data[1] * G_PI / 180) * stack[stackp - 1].data[0];
  963.  
  964.     stack[stackp - 1].data[0] = x;
  965.     stack[stackp - 1].data[1] = y;
  966.         stackp -= 0;
  967.     }
  968.  
  969. void gen_toRA (FILE*, int*, int*, int);
  970.     void builtin_toRA (postfix_arg *arg)
  971.     {
  972.         double x, y, r, a;
  973.  
  974.     x = stack[stackp - 1].data[0];
  975.     y = stack[stackp - 1].data[1];
  976.  
  977.     r = sqrt(x * x + y * y);
  978.     if (r == 0)
  979.         a = 0.0;
  980.     else
  981.         a = acos(x / r) * 180 / G_PI;
  982.  
  983.     if (y < 0)
  984.         a = 360 - a;
  985.  
  986.     stack[stackp - 1].data[0] = r;
  987.     stack[stackp - 1].data[1] = a;
  988.         stackp -= 0;
  989.     }
  990.  
  991.  
  992. void
  993. init_builtins (void)
  994. {
  995. register_overloaded_builtin("print", "((nil 1) (_ _))", 1,
  996.                                    builtin_print,
  997.                                    gen_print);
  998. register_overloaded_builtin("__add", "((ri 2) (ri 2) (ri 2))", 0,
  999.                                    builtin_add_ri,
  1000.                                    gen_add_ri);
  1001. register_overloaded_builtin("__add", "((T 1) (T 1) (T 1))", 0,
  1002.                                    builtin_add_1,
  1003.                                    gen_add_1);
  1004. register_overloaded_builtin("__add", "((T L) (T L) (_ 1))", 0,
  1005.                                    builtin_add_s,
  1006.                                    gen_add_s);
  1007. register_overloaded_builtin("__add", "((T L) (T L) (T L))", 0,
  1008.                                    builtin_add_n,
  1009.                                    gen_add_n);
  1010. register_overloaded_builtin("__sub", "((ri 2) (ri 2) (ri 2))", 0,
  1011.                                    builtin_sub_ri,
  1012.                                    gen_sub_ri);
  1013. register_overloaded_builtin("__sub", "((T 1) (T 1) (T 1))", 0,
  1014.                                    builtin_sub_1,
  1015.                                    gen_sub_1);
  1016. register_overloaded_builtin("__sub", "((T L) (T L) (_ 1))", 0,
  1017.                                    builtin_sub_s,
  1018.                                    gen_sub_s);
  1019. register_overloaded_builtin("__sub", "((T L) (T L) (T L))", 0,
  1020.                                    builtin_sub_n,
  1021.                                    gen_sub_n);
  1022. register_overloaded_builtin("__mul", "((ri 2) (ri 2) (ri 2))", 0,
  1023.                                    builtin_mul_ri,
  1024.                                    gen_mul_ri);
  1025. register_overloaded_builtin("__mul", "((m2x2 4) (m2x2 4) (m2x2 4))", 0,
  1026.                                    builtin_mul_m2x2,
  1027.                                    gen_mul_m2x2);
  1028. register_overloaded_builtin("__mul", "((m3x3 9) (m3x3 9) (m3x3 9))", 0,
  1029.                                    builtin_mul_m3x3,
  1030.                                    gen_mul_m3x3);
  1031. register_overloaded_builtin("__mul", "((T 2) (T 2) (m2x2 4))", 0,
  1032.                                    builtin_mul_v2m2x2,
  1033.                                    gen_mul_v2m2x2);
  1034. register_overloaded_builtin("__mul", "((T 3) (T 3) (m3x3 9))", 0,
  1035.                                    builtin_mul_v3m3x3,
  1036.                                    gen_mul_v3m3x3);
  1037. register_overloaded_builtin("__mul", "((T 2) (m2x2 4) (T 2))", 0,
  1038.                                    builtin_mul_m2x2v2,
  1039.                                    gen_mul_m2x2v2);
  1040. register_overloaded_builtin("__mul", "((T 3) (m3x3 9) (T 3))", 0,
  1041.                                    builtin_mul_m3x3v3,
  1042.                                    gen_mul_m3x3v3);
  1043. register_overloaded_builtin("__mul", "((T 1) (T 1) (T 1))", 0,
  1044.                                    builtin_mul_1,
  1045.                                    gen_mul_1);
  1046. register_overloaded_builtin("__mul", "((T L) (T L) (_ 1))", 0,
  1047.                                    builtin_mul_s,
  1048.                                    gen_mul_s);
  1049. register_overloaded_builtin("__mul", "((T L) (T L) (T L))", 0,
  1050.                                    builtin_mul_n,
  1051.                                    gen_mul_n);
  1052. register_overloaded_builtin("__div", "((ri 2) (ri 2) (ri 2))", 0,
  1053.                                    builtin_div_ri,
  1054.                                    gen_div_ri);
  1055. register_overloaded_builtin("__div", "((nil 2) (_ 2) (m2x2 4))", 0,
  1056.                                    builtin_div_v2m2x2,
  1057.                                    gen_div_v2m2x2);
  1058. register_overloaded_builtin("__div", "((nil 3) (_ 3) (m3x3 9))", 0,
  1059.                                    builtin_div_v3m3x3,
  1060.                                    gen_div_v3m3x3);
  1061. register_overloaded_builtin("__div", "((T 1) (T 1) (T 1))", 0,
  1062.                                    builtin_div_1,
  1063.                                    gen_div_1);
  1064. register_overloaded_builtin("__div", "((T L) (T L) (_ 1))", 0,
  1065.                                    builtin_div_s,
  1066.                                    gen_div_s);
  1067. register_overloaded_builtin("__div", "((T L) (T L) (T L))", 0,
  1068.                                    builtin_div_n,
  1069.                                    gen_div_n);
  1070. register_overloaded_builtin("__mod", "((T 1) (T 1) (T 1))", 0,
  1071.                                    builtin_mod_1,
  1072.                                    gen_mod_1);
  1073. register_overloaded_builtin("__mod", "((T L) (T L) (_ 1))", 0,
  1074.                                    builtin_mod_s,
  1075.                                    gen_mod_s);
  1076. register_overloaded_builtin("__mod", "((T L) (T L) (T L))", 0,
  1077.                                    builtin_mod_n,
  1078.                                    gen_mod_n);
  1079. register_overloaded_builtin("pmod", "((T 1) (T 1) (T 1))", 0,
  1080.                                    builtin_pmod,
  1081.                                    gen_pmod);
  1082. register_overloaded_builtin("dotp", "((nil 1) (T L) (T L))", 0,
  1083.                                    builtin_dotp,
  1084.                                    gen_dotp);
  1085. register_overloaded_builtin("crossp", "((T 3) (T 3) (T 3))", 0,
  1086.                                    builtin_crossp,
  1087.                                    gen_crossp);
  1088. register_overloaded_builtin("det", "((nil 1) (m2x2 4))", 0,
  1089.                                    builtin_det_m2x2,
  1090.                                    gen_det_m2x2);
  1091. register_overloaded_builtin("det", "((nil 1) (m3x3 9))", 0,
  1092.                                    builtin_det_m3x3,
  1093.                                    gen_det_m3x3);
  1094. register_overloaded_builtin("normalize", "((T L) (T L))", 0,
  1095.                                    builtin_normalize,
  1096.                                    gen_normalize);
  1097. register_overloaded_builtin("__neg", "((T L) (T L))", 0,
  1098.                                    builtin_neg,
  1099.                                    gen_neg);
  1100. register_overloaded_builtin("sin", "((T 1) (T 1))", 0,
  1101.                                    builtin_sin,
  1102.                                    gen_sin);
  1103. register_overloaded_builtin("cos", "((T 1) (T 1))", 0,
  1104.                                    builtin_cos,
  1105.                                    gen_cos);
  1106. register_overloaded_builtin("tan", "((T 1) (T 1))", 0,
  1107.                                    builtin_tan,
  1108.                                    gen_tan);
  1109. register_overloaded_builtin("asin", "((T 1) (T 1))", 0,
  1110.                                    builtin_asin,
  1111.                                    gen_asin);
  1112. register_overloaded_builtin("acos", "((T 1) (T 1))", 0,
  1113.                                    builtin_acos,
  1114.                                    gen_acos);
  1115. register_overloaded_builtin("atan", "((T 1) (T 1))", 0,
  1116.                                    builtin_atan,
  1117.                                    gen_atan);
  1118. register_overloaded_builtin("atan", "((T 1) (T 1) (T 1))", 0,
  1119.                                    builtin_atan2,
  1120.                                    gen_atan2);
  1121. register_overloaded_builtin("__pow", "((T 1) (T 1) (T 1))", 0,
  1122.                                    builtin_pow_1,
  1123.                                    gen_pow_1);
  1124. register_overloaded_builtin("__pow", "((T L) (T L) (_ 1))", 0,
  1125.                                    builtin_pow_s,
  1126.                                    gen_pow_s);
  1127. register_overloaded_builtin("abs", "((nil 1) (ri 2))", 0,
  1128.                                    builtin_abs_ri,
  1129.                                    gen_abs_ri);
  1130. register_overloaded_builtin("abs", "((T 1) (T 1))", 0,
  1131.                                    builtin_abs_1,
  1132.                                    gen_abs_1);
  1133. register_overloaded_builtin("abs", "((T L) (T L))", 0,
  1134.                                    builtin_abs_n,
  1135.                                    gen_abs_n);
  1136. register_overloaded_builtin("floor", "((T 1) (T 1))", 0,
  1137.                                    builtin_floor,
  1138.                                    gen_floor);
  1139. register_overloaded_builtin("sign", "((T 1) (T 1))", 0,
  1140.                                    builtin_sign_1,
  1141.                                    gen_sign_1);
  1142. register_overloaded_builtin("sign", "((T L) (T L))", 0,
  1143.                                    builtin_sign_n,
  1144.                                    gen_sign_n);
  1145. register_overloaded_builtin("min", "((T 1) (T 1) (T 1))", 0,
  1146.                                    builtin_min_1,
  1147.                                    gen_min_1);
  1148. register_overloaded_builtin("min", "((T L) (T L) (T L))", 0,
  1149.                                    builtin_min_n,
  1150.                                    gen_min_n);
  1151. register_overloaded_builtin("max", "((T 1) (T 1) (T 1))", 0,
  1152.                                    builtin_max_1,
  1153.                                    gen_max_1);
  1154. register_overloaded_builtin("max", "((T L) (T L) (T L))", 0,
  1155.                                    builtin_max_n,
  1156.                                    gen_max_n);
  1157. register_overloaded_builtin("clamp", "((T L) (T L) (T L) (T L))", 0,
  1158.                                    builtin_clamp,
  1159.                                    gen_clamp);
  1160. register_overloaded_builtin("lerp", "((T L) (_ 1) (T L) (T L))", 0,
  1161.                                    builtin_lerp_1,
  1162.                                    gen_lerp_1);
  1163. register_overloaded_builtin("lerp", "((T L) (_ L) (T L) (T L))", 0,
  1164.                                    builtin_lerp_n,
  1165.                                    gen_lerp_n);
  1166. register_overloaded_builtin("sum", "((T 1) (T L))", 0,
  1167.                                    builtin_sum,
  1168.                                    gen_sum);
  1169. register_overloaded_builtin("__not", "((T 1) (T 1))", 0,
  1170.                                    builtin_not,
  1171.                                    gen_not);
  1172. register_overloaded_builtin("__or", "((T 1) (T 1) (T 1))", 0,
  1173.                                    builtin_or,
  1174.                                    gen_or);
  1175. register_overloaded_builtin("__and", "((T 1) (T 1) (T 1))", 0,
  1176.                                    builtin_and,
  1177.                                    gen_and);
  1178. register_overloaded_builtin("__equal", "((T 1) (T 1) (T 1))", 0,
  1179.                                    builtin_equal,
  1180.                                    gen_equal);
  1181. register_overloaded_builtin("__less", "((T 1) (T 1) (T 1))", 0,
  1182.                                    builtin_less,
  1183.                                    gen_less);
  1184. register_overloaded_builtin("__greater", "((T 1) (T 1) (T 1))", 0,
  1185.                                    builtin_greater,
  1186.                                    gen_greater);
  1187. register_overloaded_builtin("__lessequal", "((T 1) (T 1) (T 1))", 0,
  1188.                                    builtin_lessequal,
  1189.                                    gen_lessequal);
  1190. register_overloaded_builtin("__greaterequal", "((T 1) (T 1) (T 1))", 0,
  1191.                                    builtin_greaterequal,
  1192.                                    gen_greaterequal);
  1193. register_overloaded_builtin("__notequal", "((T 1) (T 1) (T 1))", 0,
  1194.                                    builtin_notequal,
  1195.                                    gen_notequal);
  1196. register_overloaded_builtin("inintv", "((T 1) (T 1) (T 1) (T 1))", 0,
  1197.                                    builtin_inintv,
  1198.                                    gen_inintv);
  1199. register_overloaded_builtin("rand", "((T 1) (T 1) (T 1))", 1,
  1200.                                    builtin_rand,
  1201.                                    gen_rand);
  1202. register_overloaded_builtin("origVal", "((rgba 4) (xy 2) (image 1))", 0,
  1203.                                    builtin_origValXY,
  1204.                                    gen_origValXY);
  1205. register_overloaded_builtin("origValIntersample", "((rgba 4) (xy 2) (image 1))", 0,
  1206.                                    builtin_origValXYIntersample,
  1207.                                    gen_origValXYIntersample);
  1208. register_overloaded_builtin("gray", "((nil 1) (rgba 4))", 0,
  1209.                                    builtin_gray,
  1210.                                    gen_gray);
  1211. register_overloaded_builtin("gradient", "((rgba 4) (_ 1))", 0,
  1212.                                    builtin_gradient,
  1213.                                    gen_gradient);
  1214. register_overloaded_builtin("noise", "((nil 1) (_ 3))", 0,
  1215.                                    builtin_noise,
  1216.                                    gen_noise);
  1217. register_overloaded_builtin("toXY", "((xy 2) (ra 2))", 0,
  1218.                                    builtin_toXY,
  1219.                                    gen_toXY);
  1220. register_overloaded_builtin("toRA", "((ra 2) (xy 2))", 0,
  1221.                                    builtin_toRA,
  1222.                                    gen_toRA);
  1223.  
  1224. }
  1225.