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_compiler.c next >
Encoding:
C/C++ Source or Header  |  2000-04-21  |  51.8 KB  |  1,846 lines

  1.  
  2. #include <stdio.h>
  3.  
  4. #include "noise.h"
  5.  
  6.  
  7. void gen_print (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  8.     {
  9.         fprintf(out, "printf(\"[\");
  10.     {");
  11.     {
  12.         int i_1;
  13.  
  14.         for (i_1 = 0; i_1 < invarlengths[0]; ++i_1)
  15.         {
  16.             fprintf(out, "printf(\"%%f \", ");
  17.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_1);
  18.     fprintf(out, ");");
  19.         }
  20.     }
  21.     fprintf(out, "}
  22.     printf(\"]\n\");");
  23.     }
  24.  
  25. void gen_add_ri (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  26.     {
  27.         fprintf(out, "");
  28.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  29.     fprintf(out, " = ");
  30.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  31.     fprintf(out, " + ");
  32.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  33.     fprintf(out, ";
  34.     ");
  35.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  36.     fprintf(out, " = ");
  37.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  38.     fprintf(out, " + ");
  39.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  40.     fprintf(out, ";");
  41.     }
  42.  
  43. void gen_add_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  44.     {
  45.         fprintf(out, "");
  46.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  47.     fprintf(out, " = ");
  48.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  49.     fprintf(out, " + ");
  50.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  51.     fprintf(out, ";");
  52.     }
  53.  
  54. void gen_add_s (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  55.     {
  56.         fprintf(out, "{");
  57.     {
  58.         int i_2;
  59.  
  60.         for (i_2 = 0; i_2 < invarlengths[0]; ++i_2)
  61.         {
  62.             fprintf(out, "");
  63.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_2);
  64.     fprintf(out, " = ");
  65.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_2);
  66.     fprintf(out, " + ");
  67.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  68.     fprintf(out, ";");
  69.         }
  70.     }
  71.     fprintf(out, "}");
  72.     }
  73.  
  74. void gen_add_n (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  75.     {
  76.         fprintf(out, "{");
  77.     {
  78.         int i_3;
  79.  
  80.         for (i_3 = 0; i_3 < invarlengths[0]; ++i_3)
  81.         {
  82.             fprintf(out, "");
  83.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_3);
  84.     fprintf(out, " = ");
  85.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_3);
  86.     fprintf(out, " + ");
  87.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_3);
  88.     fprintf(out, ";");
  89.         }
  90.     }
  91.     fprintf(out, "}");
  92.     }
  93.  
  94. void gen_sub_ri (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  95.     {
  96.         fprintf(out, "");
  97.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  98.     fprintf(out, " = ");
  99.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  100.     fprintf(out, " + ");
  101.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  102.     fprintf(out, ";
  103.     ");
  104.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  105.     fprintf(out, " = ");
  106.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  107.     fprintf(out, " + ");
  108.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  109.     fprintf(out, ";");
  110.     }
  111.  
  112. void gen_sub_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  113.     {
  114.         fprintf(out, "");
  115.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  116.     fprintf(out, " = ");
  117.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  118.     fprintf(out, " - ");
  119.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  120.     fprintf(out, ";");
  121.     }
  122.  
  123. void gen_sub_s (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  124.     {
  125.         fprintf(out, "{");
  126.     {
  127.         int i_4;
  128.  
  129.         for (i_4 = 0; i_4 < invarlengths[0]; ++i_4)
  130.         {
  131.             fprintf(out, "");
  132.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_4);
  133.     fprintf(out, " = ");
  134.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_4);
  135.     fprintf(out, " - ");
  136.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  137.     fprintf(out, ";");
  138.         }
  139.     }
  140.     fprintf(out, "}");
  141.     }
  142.  
  143. void gen_sub_n (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  144.     {
  145.         fprintf(out, "{");
  146.     {
  147.         int i_5;
  148.  
  149.         for (i_5 = 0; i_5 < invarlengths[0]; ++i_5)
  150.         {
  151.             fprintf(out, "");
  152.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_5);
  153.     fprintf(out, " = ");
  154.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_5);
  155.     fprintf(out, " - ");
  156.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_5);
  157.     fprintf(out, ";");
  158.         }
  159.     }
  160.     fprintf(out, "}");
  161.     }
  162.  
  163. void gen_mul_ri (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  164.     {
  165.         fprintf(out, "float r1 = ");
  166.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  167.     fprintf(out, ";
  168.     float r2 = ");
  169.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  170.     fprintf(out, ";
  171.     float c1 = ");
  172.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  173.     fprintf(out, ";
  174.     float c2 = ");
  175.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  176.     fprintf(out, ";
  177.  
  178.     ");
  179.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  180.     fprintf(out, " = r1 * r2 - c1 * c2;
  181.     ");
  182.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  183.     fprintf(out, " = r1 * c2 + r2 * c1;");
  184.     }
  185.  
  186.  
  187. void gen_mul_m2x2 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  188.     {
  189.         fprintf(out, "float a00 = ");
  190.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  191.     fprintf(out, " * ");
  192.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  193.     fprintf(out, "+");
  194.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  195.     fprintf(out, " * ");
  196.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  197.     fprintf(out, ";
  198. float a01 = ");
  199.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  200.     fprintf(out, " * ");
  201.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  202.     fprintf(out, "+");
  203.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  204.     fprintf(out, " * ");
  205.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 3);
  206.     fprintf(out, ";
  207. float a10 = ");
  208.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  209.     fprintf(out, " * ");
  210.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  211.     fprintf(out, "+");
  212.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 3);
  213.     fprintf(out, " * ");
  214.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  215.     fprintf(out, ";
  216. float a11 = ");
  217.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  218.     fprintf(out, " * ");
  219.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  220.     fprintf(out, "+");
  221.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 3);
  222.     fprintf(out, " * ");
  223.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 3);
  224.     fprintf(out, ";
  225.  
  226.     ");
  227.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  228.     fprintf(out, " = a00;
  229. ");
  230.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  231.     fprintf(out, " = a01;
  232. ");
  233.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 2);
  234.     fprintf(out, " = a10;
  235. ");
  236.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 3);
  237.     fprintf(out, " = a11;
  238. ");
  239.     }
  240.  
  241. void gen_mul_m3x3 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  242.     {
  243.         fprintf(out, "float a00 = ");
  244.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  245.     fprintf(out, " * ");
  246.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  247.     fprintf(out, "+");
  248.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  249.     fprintf(out, " * ");
  250.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 3);
  251.     fprintf(out, "+");
  252.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  253.     fprintf(out, " * ");
  254.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 6);
  255.     fprintf(out, ";
  256. float a01 = ");
  257.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  258.     fprintf(out, " * ");
  259.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  260.     fprintf(out, "+");
  261.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  262.     fprintf(out, " * ");
  263.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 4);
  264.     fprintf(out, "+");
  265.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  266.     fprintf(out, " * ");
  267.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 7);
  268.     fprintf(out, ";
  269. float a02 = ");
  270.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  271.     fprintf(out, " * ");
  272.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  273.     fprintf(out, "+");
  274.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  275.     fprintf(out, " * ");
  276.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 5);
  277.     fprintf(out, "+");
  278.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  279.     fprintf(out, " * ");
  280.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 8);
  281.     fprintf(out, ";
  282. float a10 = ");
  283.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 3);
  284.     fprintf(out, " * ");
  285.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  286.     fprintf(out, "+");
  287.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 4);
  288.     fprintf(out, " * ");
  289.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 3);
  290.     fprintf(out, "+");
  291.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 5);
  292.     fprintf(out, " * ");
  293.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 6);
  294.     fprintf(out, ";
  295. float a11 = ");
  296.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 3);
  297.     fprintf(out, " * ");
  298.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  299.     fprintf(out, "+");
  300.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 4);
  301.     fprintf(out, " * ");
  302.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 4);
  303.     fprintf(out, "+");
  304.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 5);
  305.     fprintf(out, " * ");
  306.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 7);
  307.     fprintf(out, ";
  308. float a12 = ");
  309.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 3);
  310.     fprintf(out, " * ");
  311.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  312.     fprintf(out, "+");
  313.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 4);
  314.     fprintf(out, " * ");
  315.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 5);
  316.     fprintf(out, "+");
  317.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 5);
  318.     fprintf(out, " * ");
  319.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 8);
  320.     fprintf(out, ";
  321. float a20 = ");
  322.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 6);
  323.     fprintf(out, " * ");
  324.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  325.     fprintf(out, "+");
  326.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 7);
  327.     fprintf(out, " * ");
  328.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 3);
  329.     fprintf(out, "+");
  330.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 8);
  331.     fprintf(out, " * ");
  332.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 6);
  333.     fprintf(out, ";
  334. float a21 = ");
  335.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 6);
  336.     fprintf(out, " * ");
  337.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  338.     fprintf(out, "+");
  339.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 7);
  340.     fprintf(out, " * ");
  341.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 4);
  342.     fprintf(out, "+");
  343.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 8);
  344.     fprintf(out, " * ");
  345.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 7);
  346.     fprintf(out, ";
  347. float a22 = ");
  348.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 6);
  349.     fprintf(out, " * ");
  350.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  351.     fprintf(out, "+");
  352.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 7);
  353.     fprintf(out, " * ");
  354.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 5);
  355.     fprintf(out, "+");
  356.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 8);
  357.     fprintf(out, " * ");
  358.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 8);
  359.     fprintf(out, ";
  360.  
  361.     ");
  362.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  363.     fprintf(out, " = a00;
  364. ");
  365.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  366.     fprintf(out, " = a01;
  367. ");
  368.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 2);
  369.     fprintf(out, " = a02;
  370. ");
  371.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 3);
  372.     fprintf(out, " = a10;
  373. ");
  374.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 4);
  375.     fprintf(out, " = a11;
  376. ");
  377.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 5);
  378.     fprintf(out, " = a12;
  379. ");
  380.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 6);
  381.     fprintf(out, " = a20;
  382. ");
  383.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 7);
  384.     fprintf(out, " = a21;
  385. ");
  386.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 8);
  387.     fprintf(out, " = a22;
  388. ");
  389.     }
  390.  
  391.  
  392. void gen_mul_v2m2x2 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  393.     {
  394.         fprintf(out, "float a0 = ");
  395.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  396.     fprintf(out, " * ");
  397.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  398.     fprintf(out, "+");
  399.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  400.     fprintf(out, " * ");
  401.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  402.     fprintf(out, ";
  403. float a1 = ");
  404.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  405.     fprintf(out, " * ");
  406.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  407.     fprintf(out, "+");
  408.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  409.     fprintf(out, " * ");
  410.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 3);
  411.     fprintf(out, ";
  412.  
  413.     ");
  414.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  415.     fprintf(out, " = a0;
  416. ");
  417.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  418.     fprintf(out, " = a1;
  419. ");
  420.     }
  421.  
  422. void gen_mul_v3m3x3 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  423.     {
  424.         fprintf(out, "float a0 = ");
  425.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  426.     fprintf(out, " * ");
  427.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  428.     fprintf(out, "+");
  429.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  430.     fprintf(out, " * ");
  431.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 3);
  432.     fprintf(out, "+");
  433.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  434.     fprintf(out, " * ");
  435.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 6);
  436.     fprintf(out, ";
  437. float a1 = ");
  438.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  439.     fprintf(out, " * ");
  440.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  441.     fprintf(out, "+");
  442.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  443.     fprintf(out, " * ");
  444.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 4);
  445.     fprintf(out, "+");
  446.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  447.     fprintf(out, " * ");
  448.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 7);
  449.     fprintf(out, ";
  450. float a2 = ");
  451.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  452.     fprintf(out, " * ");
  453.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  454.     fprintf(out, "+");
  455.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  456.     fprintf(out, " * ");
  457.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 5);
  458.     fprintf(out, "+");
  459.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  460.     fprintf(out, " * ");
  461.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 8);
  462.     fprintf(out, ";
  463.  
  464.     ");
  465.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  466.     fprintf(out, " = a0;
  467. ");
  468.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  469.     fprintf(out, " = a1;
  470. ");
  471.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 2);
  472.     fprintf(out, " = a2;
  473. ");
  474.     }
  475.  
  476.  
  477. void gen_mul_m2x2v2 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  478.     {
  479.         fprintf(out, "float a0 = ");
  480.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  481.     fprintf(out, " * ");
  482.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  483.     fprintf(out, "+");
  484.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  485.     fprintf(out, " * ");
  486.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  487.     fprintf(out, ";
  488. float a1 = ");
  489.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  490.     fprintf(out, " * ");
  491.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  492.     fprintf(out, "+");
  493.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 3);
  494.     fprintf(out, " * ");
  495.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  496.     fprintf(out, ";
  497.  
  498.     ");
  499.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  500.     fprintf(out, " = a0;
  501. ");
  502.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  503.     fprintf(out, " = a1;
  504. ");
  505.     }
  506.  
  507. void gen_mul_m3x3v3 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  508.     {
  509.         fprintf(out, "float a0 = ");
  510.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  511.     fprintf(out, " * ");
  512.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  513.     fprintf(out, "+");
  514.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  515.     fprintf(out, " * ");
  516.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  517.     fprintf(out, "+");
  518.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  519.     fprintf(out, " * ");
  520.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  521.     fprintf(out, ";
  522. float a1 = ");
  523.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 3);
  524.     fprintf(out, " * ");
  525.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  526.     fprintf(out, "+");
  527.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 4);
  528.     fprintf(out, " * ");
  529.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  530.     fprintf(out, "+");
  531.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 5);
  532.     fprintf(out, " * ");
  533.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  534.     fprintf(out, ";
  535. float a2 = ");
  536.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 6);
  537.     fprintf(out, " * ");
  538.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  539.     fprintf(out, "+");
  540.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 7);
  541.     fprintf(out, " * ");
  542.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  543.     fprintf(out, "+");
  544.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 8);
  545.     fprintf(out, " * ");
  546.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  547.     fprintf(out, ";
  548.  
  549.     ");
  550.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  551.     fprintf(out, " = a0;
  552. ");
  553.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  554.     fprintf(out, " = a1;
  555. ");
  556.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 2);
  557.     fprintf(out, " = a2;
  558. ");
  559.     }
  560.  
  561. void gen_mul_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  562.     {
  563.         fprintf(out, "");
  564.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  565.     fprintf(out, " = ");
  566.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  567.     fprintf(out, " * ");
  568.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  569.     fprintf(out, ";");
  570.     }
  571.  
  572. void gen_mul_s (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  573.     {
  574.         fprintf(out, "{");
  575.     {
  576.         int i_6;
  577.  
  578.         for (i_6 = 0; i_6 < invarlengths[0]; ++i_6)
  579.         {
  580.             fprintf(out, "");
  581.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_6);
  582.     fprintf(out, " = ");
  583.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_6);
  584.     fprintf(out, " * ");
  585.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  586.     fprintf(out, ";");
  587.         }
  588.     }
  589.     fprintf(out, "}");
  590.     }
  591.  
  592. void gen_mul_n (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  593.     {
  594.         fprintf(out, "{");
  595.     {
  596.         int i_7;
  597.  
  598.         for (i_7 = 0; i_7 < invarlengths[0]; ++i_7)
  599.         {
  600.             fprintf(out, "");
  601.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_7);
  602.     fprintf(out, " = ");
  603.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_7);
  604.     fprintf(out, " * ");
  605.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_7);
  606.     fprintf(out, ";");
  607.         }
  608.     }
  609.     fprintf(out, "}");
  610.     }
  611.  
  612. void gen_div_ri (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  613.     {
  614.         fprintf(out, "float r1 = ");
  615.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  616.     fprintf(out, ";
  617.     float r2 = ");
  618.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  619.     fprintf(out, ";
  620.     float c1 = ");
  621.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  622.     fprintf(out, ";
  623.     float c2 = ");
  624.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  625.     fprintf(out, ";
  626.  
  627.     if (r2 == 0 && c2 == 0)
  628.     {
  629.         ");
  630.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  631.     fprintf(out, " = 0;
  632.         ");
  633.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  634.     fprintf(out, " = 0;
  635.     }
  636.     else
  637.     {
  638.         ");
  639.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  640.     fprintf(out, " = (r1 * r2 + c1 * c2) / (r2 * r2 + c2 * c2);
  641.         ");
  642.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  643.     fprintf(out, " = (-r1 * c2 + r2 * c1) / (r2 * r2 + c2 * c2);
  644.     }");
  645.     }
  646.  
  647. void gen_div_v2m2x2 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  648.     {
  649.         fprintf(out, "float a[4] = { ");
  650.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  651.     fprintf(out, ", ");
  652.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  653.     fprintf(out, ", ");
  654.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  655.     fprintf(out, ", ");
  656.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 3);
  657.     fprintf(out, " };
  658.     float b[2] = { ");
  659.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  660.     fprintf(out, ", ");
  661.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  662.     fprintf(out, " };
  663.  
  664.     solve_linear_equations(2, a, b);
  665.  
  666.     ");
  667.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  668.     fprintf(out, " = b[0];
  669.     ");
  670.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  671.     fprintf(out, " = b[1];");
  672.     }
  673.  
  674. void gen_div_v3m3x3 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  675.     {
  676.         fprintf(out, "float a[9] = { ");
  677.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  678.     fprintf(out, ", ");
  679.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  680.     fprintf(out, ", ");
  681.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  682.     fprintf(out, ", ");
  683.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 3);
  684.     fprintf(out, ", ");
  685.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 4);
  686.     fprintf(out, ", ");
  687.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 5);
  688.     fprintf(out, ", ");
  689.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 6);
  690.     fprintf(out, ", ");
  691.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 7);
  692.     fprintf(out, ", ");
  693.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 8);
  694.     fprintf(out, " };
  695.     float b[3] = { ");
  696.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  697.     fprintf(out, ", ");
  698.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  699.     fprintf(out, ", ");
  700.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  701.     fprintf(out, " };
  702.  
  703.     solve_linear_equations(3, a, b);
  704.  
  705.     ");
  706.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  707.     fprintf(out, " = b[0];
  708.     ");
  709.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  710.     fprintf(out, " = b[1];
  711.     ");
  712.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 2);
  713.     fprintf(out, " = b[2];");
  714.     }
  715.  
  716. void gen_div_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  717.     {
  718.         fprintf(out, "if (");
  719.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  720.     fprintf(out, " == 0)
  721.         ");
  722.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  723.     fprintf(out, " = 0.0;
  724.     else
  725.         ");
  726.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  727.     fprintf(out, " = ");
  728.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  729.     fprintf(out, " / ");
  730.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  731.     fprintf(out, ";");
  732.     }
  733.  
  734. void gen_div_s (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  735.     {
  736.         fprintf(out, "if (");
  737.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  738.     fprintf(out, " == 0)
  739.         {");
  740.     {
  741.         int i_8;
  742.  
  743.         for (i_8 = 0; i_8 < invarlengths[0]; ++i_8)
  744.         {
  745.             fprintf(out, "");
  746.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_8);
  747.     fprintf(out, " = 0.0;");
  748.         }
  749.     }
  750.     fprintf(out, "}
  751.     else
  752.         {");
  753.     {
  754.         int i_9;
  755.  
  756.         for (i_9 = 0; i_9 < invarlengths[0]; ++i_9)
  757.         {
  758.             fprintf(out, "");
  759.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_9);
  760.     fprintf(out, " = ");
  761.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_9);
  762.     fprintf(out, " / ");
  763.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  764.     fprintf(out, ";");
  765.         }
  766.     }
  767.     fprintf(out, "}");
  768.     }
  769.  
  770. void gen_div_n (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  771.     {
  772.         fprintf(out, "{");
  773.     {
  774.         int i_10;
  775.  
  776.         for (i_10 = 0; i_10 < invarlengths[0]; ++i_10)
  777.         {
  778.             fprintf(out, "if (");
  779.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_10);
  780.     fprintf(out, " == 0)
  781.             ");
  782.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_10);
  783.     fprintf(out, " = 0.0;
  784.         else
  785.             ");
  786.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_10);
  787.     fprintf(out, " = ");
  788.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_10);
  789.     fprintf(out, " / ");
  790.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_10);
  791.     fprintf(out, ";");
  792.         }
  793.     }
  794.     fprintf(out, "}");
  795.     }
  796.  
  797. void gen_mod_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  798.     {
  799.         fprintf(out, "if (");
  800.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  801.     fprintf(out, " == 0)
  802.         ");
  803.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  804.     fprintf(out, " = 0.0;
  805.     else
  806.         ");
  807.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  808.     fprintf(out, " = fmod(");
  809.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  810.     fprintf(out, ", ");
  811.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  812.     fprintf(out, ");");
  813.     }
  814.  
  815. void gen_mod_s (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  816.     {
  817.         fprintf(out, "if (");
  818.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  819.     fprintf(out, " == 0)
  820.         {");
  821.     {
  822.         int i_11;
  823.  
  824.         for (i_11 = 0; i_11 < invarlengths[0]; ++i_11)
  825.         {
  826.             fprintf(out, "");
  827.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_11);
  828.     fprintf(out, " = 0.0;");
  829.         }
  830.     }
  831.     fprintf(out, "}
  832.     else
  833.         {");
  834.     {
  835.         int i_12;
  836.  
  837.         for (i_12 = 0; i_12 < invarlengths[0]; ++i_12)
  838.         {
  839.             fprintf(out, "");
  840.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_12);
  841.     fprintf(out, " = fmod(");
  842.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_12);
  843.     fprintf(out, ", ");
  844.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  845.     fprintf(out, ");");
  846.         }
  847.     }
  848.     fprintf(out, "}");
  849.     }
  850.  
  851. void gen_mod_n (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  852.     {
  853.         fprintf(out, "{");
  854.     {
  855.         int i_13;
  856.  
  857.         for (i_13 = 0; i_13 < invarlengths[0]; ++i_13)
  858.         {
  859.             fprintf(out, "if (");
  860.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_13);
  861.     fprintf(out, " == 0)
  862.             ");
  863.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_13);
  864.     fprintf(out, " = 0.0;
  865.         else
  866.             ");
  867.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_13);
  868.     fprintf(out, " = fmod(");
  869.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_13);
  870.     fprintf(out, ", ");
  871.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_13);
  872.     fprintf(out, ");");
  873.         }
  874.     }
  875.     fprintf(out, "}");
  876.     }
  877.  
  878. void gen_pmod (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  879.     {
  880.         fprintf(out, "float mod = fmod(");
  881.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  882.     fprintf(out, ", ");
  883.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  884.     fprintf(out, ");
  885.  
  886.     if (");
  887.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  888.     fprintf(out, " < 0)
  889.         mod += ");
  890.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  891.     fprintf(out, ";
  892.  
  893.     ");
  894.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  895.     fprintf(out, " = mod;");
  896.     }
  897.  
  898. void gen_dotp (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  899.     {
  900.         fprintf(out, "float sum = 0.0;
  901.  
  902.     {");
  903.     {
  904.         int i_14;
  905.  
  906.         for (i_14 = 0; i_14 < invarlengths[0]; ++i_14)
  907.         {
  908.             fprintf(out, "sum += ");
  909.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_14);
  910.     fprintf(out, " * ");
  911.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_14);
  912.     fprintf(out, ";");
  913.         }
  914.     }
  915.     fprintf(out, "}
  916.     ");
  917.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  918.     fprintf(out, " = sum;
  919.     dummy = 1;");
  920.     }
  921.  
  922. void gen_crossp (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  923.     {
  924.         fprintf(out, "");
  925.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  926.     fprintf(out, " = ");
  927.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  928.     fprintf(out, " * ");
  929.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  930.     fprintf(out, " - ");
  931.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  932.     fprintf(out, " * ");
  933.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  934.     fprintf(out, ";
  935.     ");
  936.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  937.     fprintf(out, " = ");
  938.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  939.     fprintf(out, " * ");
  940.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  941.     fprintf(out, " - ");
  942.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  943.     fprintf(out, " * ");
  944.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 2);
  945.     fprintf(out, ";
  946.     ");
  947.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 2);
  948.     fprintf(out, " = ");
  949.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  950.     fprintf(out, " * ");
  951.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 1);
  952.     fprintf(out, " - ");
  953.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  954.     fprintf(out, " * ");
  955.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  956.     fprintf(out, ";");
  957.     }
  958.  
  959. void gen_det_m2x2 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  960.     {
  961.         fprintf(out, "");
  962.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  963.     fprintf(out, " = ");
  964.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  965.     fprintf(out, " * ");
  966.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 3);
  967.     fprintf(out, " - ");
  968.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  969.     fprintf(out, " * ");
  970.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  971.     fprintf(out, ";");
  972.     }
  973.  
  974. void gen_det_m3x3 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  975.     {
  976.         fprintf(out, "");
  977.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  978.     fprintf(out, " = ");
  979.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  980.     fprintf(out, " * ");
  981.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 4);
  982.     fprintf(out, " * ");
  983.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 8);
  984.     fprintf(out, "
  985.                  + ");
  986.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  987.     fprintf(out, " * ");
  988.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 5);
  989.     fprintf(out, " * ");
  990.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 6);
  991.     fprintf(out, "
  992.                  + ");
  993.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  994.     fprintf(out, " * ");
  995.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 3);
  996.     fprintf(out, " + ");
  997.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 7);
  998.     fprintf(out, "
  999.                  - ");
  1000.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  1001.     fprintf(out, " * ");
  1002.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 4);
  1003.     fprintf(out, " + ");
  1004.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 6);
  1005.     fprintf(out, "
  1006.                  - ");
  1007.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1008.     fprintf(out, " * ");
  1009.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 5);
  1010.     fprintf(out, " + ");
  1011.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 7);
  1012.     fprintf(out, "
  1013.                  - ");
  1014.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  1015.     fprintf(out, " * ");
  1016.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 3);
  1017.     fprintf(out, " + ");
  1018.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 8);
  1019.     fprintf(out, ";");
  1020.     }
  1021.  
  1022. void gen_normalize (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1023.     {
  1024.         fprintf(out, "float l = 0.0;
  1025.  
  1026.     {");
  1027.     {
  1028.         int i_15;
  1029.  
  1030.         for (i_15 = 0; i_15 < invarlengths[0]; ++i_15)
  1031.         {
  1032.             fprintf(out, "l += ");
  1033.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_15);
  1034.     fprintf(out, " * ");
  1035.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_15);
  1036.     fprintf(out, ";");
  1037.         }
  1038.     }
  1039.     fprintf(out, "}
  1040.     l = sqrt(l);
  1041.     {");
  1042.     {
  1043.         int i_16;
  1044.  
  1045.         for (i_16 = 0; i_16 < invarlengths[0]; ++i_16)
  1046.         {
  1047.             fprintf(out, "if (l == 0)
  1048.             ");
  1049.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_16);
  1050.     fprintf(out, " = 0.0;
  1051.         else
  1052.             ");
  1053.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_16);
  1054.     fprintf(out, " = ");
  1055.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_16);
  1056.     fprintf(out, " / l;");
  1057.         }
  1058.     }
  1059.     fprintf(out, "}");
  1060.     }
  1061.  
  1062. void gen_neg (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1063.     {
  1064.         fprintf(out, "{");
  1065.     {
  1066.         int i_17;
  1067.  
  1068.         for (i_17 = 0; i_17 < invarlengths[0]; ++i_17)
  1069.         {
  1070.             fprintf(out, "");
  1071.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_17);
  1072.     fprintf(out, " = -");
  1073.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_17);
  1074.     fprintf(out, ";");
  1075.         }
  1076.     }
  1077.     fprintf(out, "}");
  1078.     }
  1079.  
  1080. void gen_sin (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1081.     {
  1082.         fprintf(out, "");
  1083.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1084.     fprintf(out, " = sin(");
  1085.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1086.     fprintf(out, " * M_PI / 180.0);");
  1087.     }
  1088.  
  1089. void gen_cos (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1090.     {
  1091.         fprintf(out, "");
  1092.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1093.     fprintf(out, " = cos(");
  1094.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1095.     fprintf(out, " * M_PI / 180.0);");
  1096.     }
  1097.  
  1098. void gen_tan (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1099.     {
  1100.         fprintf(out, "");
  1101.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1102.     fprintf(out, " = tan(");
  1103.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1104.     fprintf(out, " * M_PI / 180.0);");
  1105.     }
  1106.  
  1107. void gen_asin (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1108.     {
  1109.         fprintf(out, "if (");
  1110.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1111.     fprintf(out, " < -1.0 || ");
  1112.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1113.     fprintf(out, " > 1.0)
  1114.     {
  1115.         ");
  1116.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1117.     fprintf(out, " = 0.0;
  1118.     }
  1119.     else
  1120.     {
  1121.         ");
  1122.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1123.     fprintf(out, " = asin(");
  1124.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1125.     fprintf(out, ") * 180.0 / M_PI;
  1126.     }");
  1127.     }
  1128.  
  1129. void gen_acos (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1130.     {
  1131.         fprintf(out, "if (");
  1132.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1133.     fprintf(out, " < -1.0 || ");
  1134.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1135.     fprintf(out, " > 1.0)
  1136.     {
  1137.         ");
  1138.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1139.     fprintf(out, " = 0.0;
  1140.     }
  1141.     else
  1142.     {
  1143.         ");
  1144.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1145.     fprintf(out, " = acos(");
  1146.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1147.     fprintf(out, ") * 180.0 / M_PI;
  1148.     }");
  1149.     }
  1150.  
  1151. void gen_atan (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1152.     {
  1153.         fprintf(out, "");
  1154.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1155.     fprintf(out, " = atan(");
  1156.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1157.     fprintf(out, ") * 180.0 / M_PI;");
  1158.     }
  1159.  
  1160. void gen_atan2 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1161.     {
  1162.         fprintf(out, "");
  1163.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1164.     fprintf(out, " = atan2(");
  1165.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1166.     fprintf(out, ",");
  1167.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1168.     fprintf(out, ") * 180.0 / M_PI;");
  1169.     }
  1170.  
  1171. void gen_pow_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1172.     {
  1173.         fprintf(out, "");
  1174.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1175.     fprintf(out, " = pow(");
  1176.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1177.     fprintf(out, ", ");
  1178.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1179.     fprintf(out, ");");
  1180.     }
  1181.  
  1182. void gen_pow_s (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1183.     {
  1184.         fprintf(out, "{");
  1185.     {
  1186.         int i_18;
  1187.  
  1188.         for (i_18 = 0; i_18 < invarlengths[0]; ++i_18)
  1189.         {
  1190.             fprintf(out, "");
  1191.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_18);
  1192.     fprintf(out, " = pow(");
  1193.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_18);
  1194.     fprintf(out, ", ");
  1195.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1196.     fprintf(out, ");");
  1197.         }
  1198.     }
  1199.     fprintf(out, "}");
  1200.     }
  1201.  
  1202. void gen_abs_ri (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1203.     {
  1204.         fprintf(out, "float r = ");
  1205.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1206.     fprintf(out, ";
  1207.     float i = ");
  1208.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  1209.     fprintf(out, ";
  1210.  
  1211.     ");
  1212.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1213.     fprintf(out, " = sqrt(r * r + i * i);
  1214.     dummy = 1;");
  1215.     }
  1216.  
  1217. void gen_abs_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1218.     {
  1219.         fprintf(out, "");
  1220.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1221.     fprintf(out, " = fabs(");
  1222.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1223.     fprintf(out, ");");
  1224.     }
  1225.  
  1226. void gen_abs_n (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1227.     {
  1228.         fprintf(out, "{");
  1229.     {
  1230.         int i_19;
  1231.  
  1232.         for (i_19 = 0; i_19 < invarlengths[0]; ++i_19)
  1233.         {
  1234.             fprintf(out, "");
  1235.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_19);
  1236.     fprintf(out, " = fabs(");
  1237.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_19);
  1238.     fprintf(out, ");");
  1239.         }
  1240.     }
  1241.     fprintf(out, "}");
  1242.     }
  1243.  
  1244. void gen_floor (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1245.     {
  1246.         fprintf(out, "");
  1247.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1248.     fprintf(out, " = floor(");
  1249.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1250.     fprintf(out, ");");
  1251.     }
  1252.  
  1253. void gen_sign_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1254.     {
  1255.         fprintf(out, "if (");
  1256.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1257.     fprintf(out, " < 0)
  1258.         ");
  1259.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1260.     fprintf(out, " = -1.0;
  1261.     else if (");
  1262.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1263.     fprintf(out, " > 0)
  1264.         ");
  1265.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1266.     fprintf(out, " = 1.0;
  1267.     else
  1268.         ");
  1269.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1270.     fprintf(out, " = 0.0;");
  1271.     }
  1272.  
  1273. void gen_sign_n (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1274.     {
  1275.         fprintf(out, "{");
  1276.     {
  1277.         int i_20;
  1278.  
  1279.         for (i_20 = 0; i_20 < invarlengths[0]; ++i_20)
  1280.         {
  1281.             fprintf(out, "if (");
  1282.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_20);
  1283.     fprintf(out, " < 0)
  1284.             ");
  1285.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_20);
  1286.     fprintf(out, " = -1.0;
  1287.         else if (");
  1288.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_20);
  1289.     fprintf(out, " > 0)
  1290.             ");
  1291.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_20);
  1292.     fprintf(out, " = 1.0;
  1293.         else
  1294.             ");
  1295.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_20);
  1296.     fprintf(out, " = 0.0;");
  1297.         }
  1298.     }
  1299.     fprintf(out, "}");
  1300.     }
  1301.  
  1302. void gen_min_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1303.     {
  1304.         fprintf(out, "if (");
  1305.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1306.     fprintf(out, " < ");
  1307.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1308.     fprintf(out, ")
  1309.         ");
  1310.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1311.     fprintf(out, " = ");
  1312.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1313.     fprintf(out, ";
  1314.     else
  1315.         ");
  1316.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1317.     fprintf(out, " = ");
  1318.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1319.     fprintf(out, ";");
  1320.     }
  1321.  
  1322. void gen_min_n (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1323.     {
  1324.         fprintf(out, "{");
  1325.     {
  1326.         int i_21;
  1327.  
  1328.         for (i_21 = 0; i_21 < invarlengths[0]; ++i_21)
  1329.         {
  1330.             fprintf(out, "if (");
  1331.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_21);
  1332.     fprintf(out, " < ");
  1333.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_21);
  1334.     fprintf(out, ")
  1335.             ");
  1336.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_21);
  1337.     fprintf(out, " = ");
  1338.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_21);
  1339.     fprintf(out, ";
  1340.         else
  1341.             ");
  1342.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_21);
  1343.     fprintf(out, " = ");
  1344.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_21);
  1345.     fprintf(out, ";");
  1346.         }
  1347.     }
  1348.     fprintf(out, "}");
  1349.     }
  1350.  
  1351. void gen_max_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1352.     {
  1353.         fprintf(out, "if (");
  1354.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1355.     fprintf(out, " > ");
  1356.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1357.     fprintf(out, ")
  1358.         ");
  1359.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1360.     fprintf(out, " = ");
  1361.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1362.     fprintf(out, ";
  1363.     else
  1364.         ");
  1365.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1366.     fprintf(out, " = ");
  1367.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1368.     fprintf(out, ";");
  1369.     }
  1370.  
  1371. void gen_max_n (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1372.     {
  1373.         fprintf(out, "{");
  1374.     {
  1375.         int i_22;
  1376.  
  1377.         for (i_22 = 0; i_22 < invarlengths[0]; ++i_22)
  1378.         {
  1379.             fprintf(out, "if (");
  1380.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_22);
  1381.     fprintf(out, " > ");
  1382.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_22);
  1383.     fprintf(out, ")
  1384.             ");
  1385.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_22);
  1386.     fprintf(out, " = ");
  1387.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_22);
  1388.     fprintf(out, ";
  1389.         else
  1390.             ");
  1391.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_22);
  1392.     fprintf(out, " = ");
  1393.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_22);
  1394.     fprintf(out, ";");
  1395.         }
  1396.     }
  1397.     fprintf(out, "}");
  1398.     }
  1399.  
  1400. void gen_clamp (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1401.     {
  1402.         fprintf(out, "{");
  1403.     {
  1404.         int i_23;
  1405.  
  1406.         for (i_23 = 0; i_23 < invarlengths[0]; ++i_23)
  1407.         {
  1408.             fprintf(out, "if (");
  1409.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_23);
  1410.     fprintf(out, " < ");
  1411.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_23);
  1412.     fprintf(out, ")
  1413.             ");
  1414.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_23);
  1415.     fprintf(out, " = ");
  1416.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_23);
  1417.     fprintf(out, ";
  1418.         else if (");
  1419.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_23);
  1420.     fprintf(out, " > ");
  1421.     fprintf(out, "tmpvar_%d[%d]", invarnums[2], i_23);
  1422.     fprintf(out, ")
  1423.             ");
  1424.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_23);
  1425.     fprintf(out, " = ");
  1426.     fprintf(out, "tmpvar_%d[%d]", invarnums[2], i_23);
  1427.     fprintf(out, ";
  1428.         else
  1429.             ");
  1430.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_23);
  1431.     fprintf(out, " = ");
  1432.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_23);
  1433.     fprintf(out, ";");
  1434.         }
  1435.     }
  1436.     fprintf(out, "}");
  1437.     }
  1438.  
  1439. void gen_lerp_1 (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1440.     {
  1441.         fprintf(out, "{");
  1442.     {
  1443.         int i_24;
  1444.  
  1445.         for (i_24 = 0; i_24 < invarlengths[1]; ++i_24)
  1446.         {
  1447.             fprintf(out, "");
  1448.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_24);
  1449.     fprintf(out, " = (1 - ");
  1450.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1451.     fprintf(out, ") * ");
  1452.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_24);
  1453.     fprintf(out, " + ");
  1454.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1455.     fprintf(out, " * ");
  1456.     fprintf(out, "tmpvar_%d[%d]", invarnums[2], i_24);
  1457.     fprintf(out, ";");
  1458.         }
  1459.     }
  1460.     fprintf(out, "}");
  1461.     }
  1462.  
  1463. void gen_lerp_n (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1464.     {
  1465.         fprintf(out, "{");
  1466.     {
  1467.         int i_25;
  1468.  
  1469.         for (i_25 = 0; i_25 < invarlengths[0]; ++i_25)
  1470.         {
  1471.             fprintf(out, "");
  1472.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_25);
  1473.     fprintf(out, " = (1 - ");
  1474.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_25);
  1475.     fprintf(out, ") * ");
  1476.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], i_25);
  1477.     fprintf(out, " + ");
  1478.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_25);
  1479.     fprintf(out, " * ");
  1480.     fprintf(out, "tmpvar_%d[%d]", invarnums[2], i_25);
  1481.     fprintf(out, ";");
  1482.         }
  1483.     }
  1484.     fprintf(out, "}");
  1485.     }
  1486.  
  1487. void gen_sum (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1488.     {
  1489.         fprintf(out, "float sum = 0.0;
  1490.  
  1491.     {");
  1492.     {
  1493.         int i_26;
  1494.  
  1495.         for (i_26 = 0; i_26 < invarlengths[0]; ++i_26)
  1496.         {
  1497.             fprintf(out, "sum += ");
  1498.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], i_26);
  1499.     fprintf(out, ";");
  1500.         }
  1501.     }
  1502.     fprintf(out, "}
  1503.     ");
  1504.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1505.     fprintf(out, " = sum;");
  1506.     }
  1507.  
  1508. void gen_not (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1509.     {
  1510.         fprintf(out, "if (");
  1511.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1512.     fprintf(out, " != 0)
  1513.         ");
  1514.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1515.     fprintf(out, " = 0.0;
  1516.     else
  1517.         ");
  1518.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1519.     fprintf(out, " = 1.0;");
  1520.     }
  1521.  
  1522. void gen_or (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1523.     {
  1524.         fprintf(out, "if (");
  1525.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1526.     fprintf(out, " || ");
  1527.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1528.     fprintf(out, ")
  1529.         ");
  1530.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1531.     fprintf(out, " = 1.0;
  1532.     else
  1533.         ");
  1534.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1535.     fprintf(out, " = 0.0;");
  1536.     }
  1537.  
  1538. void gen_and (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1539.     {
  1540.         fprintf(out, "if (");
  1541.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1542.     fprintf(out, " && ");
  1543.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1544.     fprintf(out, ")
  1545.         ");
  1546.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1547.     fprintf(out, " = 1.0;
  1548.     else
  1549.         ");
  1550.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1551.     fprintf(out, " = 0.0;");
  1552.     }
  1553.  
  1554. void gen_equal (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1555.     {
  1556.         fprintf(out, "if (");
  1557.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1558.     fprintf(out, " == ");
  1559.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1560.     fprintf(out, ")
  1561.         ");
  1562.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1563.     fprintf(out, " = 1.0;
  1564.     else
  1565.         ");
  1566.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1567.     fprintf(out, " = 0.0;");
  1568.     }
  1569.  
  1570. void gen_less (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1571.     {
  1572.         fprintf(out, "if (");
  1573.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1574.     fprintf(out, " < ");
  1575.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1576.     fprintf(out, ")
  1577.         ");
  1578.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1579.     fprintf(out, " = 1.0;
  1580.     else
  1581.         ");
  1582.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1583.     fprintf(out, " = 0.0;");
  1584.     }
  1585.  
  1586. void gen_greater (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1587.     {
  1588.         fprintf(out, "if (");
  1589.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1590.     fprintf(out, " > ");
  1591.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1592.     fprintf(out, ")
  1593.         ");
  1594.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1595.     fprintf(out, " = 1.0;
  1596.     else
  1597.         ");
  1598.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1599.     fprintf(out, " = 0.0;");
  1600.     }
  1601.  
  1602. void gen_lessequal (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1603.     {
  1604.         fprintf(out, "if (");
  1605.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1606.     fprintf(out, " <= ");
  1607.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1608.     fprintf(out, ")
  1609.         ");
  1610.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1611.     fprintf(out, " = 1.0;
  1612.     else
  1613.         ");
  1614.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1615.     fprintf(out, " = 0.0;");
  1616.     }
  1617.  
  1618. void gen_greaterequal (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1619.     {
  1620.         fprintf(out, "if (");
  1621.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1622.     fprintf(out, " >= ");
  1623.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1624.     fprintf(out, ")
  1625.         ");
  1626.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1627.     fprintf(out, " = 1.0;
  1628.     else
  1629.         ");
  1630.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1631.     fprintf(out, " = 0.0;");
  1632.     }
  1633.  
  1634. void gen_notequal (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1635.     {
  1636.         fprintf(out, "if (");
  1637.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1638.     fprintf(out, " != ");
  1639.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1640.     fprintf(out, ")
  1641.         ");
  1642.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1643.     fprintf(out, " = 1.0;
  1644.     else
  1645.         ");
  1646.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1647.     fprintf(out, " = 0.0;");
  1648.     }
  1649.  
  1650. void gen_inintv (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1651.     {
  1652.         fprintf(out, "if (");
  1653.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1654.     fprintf(out, " >= ");
  1655.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1656.     fprintf(out, " && ");
  1657.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1658.     fprintf(out, " <= ");
  1659.     fprintf(out, "tmpvar_%d[%d]", invarnums[2], 0);
  1660.     fprintf(out, ")
  1661.         ");
  1662.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1663.     fprintf(out, " = 1.0;
  1664.     else
  1665.         ");
  1666.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1667.     fprintf(out, " = 0.0;");
  1668.     }
  1669.  
  1670. void gen_rand (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1671.     {
  1672.         fprintf(out, "");
  1673.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1674.     fprintf(out, " = (random() / (double)0x7fffffff) * (");
  1675.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1676.     fprintf(out, " - ");
  1677.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1678.     fprintf(out, ") + ");
  1679.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1680.     fprintf(out, ";");
  1681.     }
  1682.  
  1683. void gen_origValXY (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1684.     {
  1685.         fprintf(out, "unsigned char pixel[4];
  1686.  
  1687.     getOrigValPixel(");
  1688.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1689.     fprintf(out, ",");
  1690.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  1691.     fprintf(out, ",pixel,");
  1692.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1693.     fprintf(out, ");
  1694.  
  1695.     {");
  1696.     {
  1697.         int i_27;
  1698.  
  1699.         for (i_27 = 0; i_27 < 4; ++i_27)
  1700.         {
  1701.             fprintf(out, "");
  1702.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_27);
  1703.     fprintf(out, " = pixel[");
  1704.     fprintf(out, "%d", i_27);
  1705.     fprintf(out, "] / 255.0;");
  1706.         }
  1707.     }
  1708.     fprintf(out, "}
  1709.     dummy = 4;");
  1710.     }
  1711.  
  1712. void gen_origValXYIntersample (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1713.     {
  1714.         fprintf(out, "unsigned char pixel[4];
  1715.  
  1716.     getOrigValIntersamplePixel(");
  1717.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1718.     fprintf(out, ",");
  1719.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  1720.     fprintf(out, ",pixel,");
  1721.     fprintf(out, "tmpvar_%d[%d]", invarnums[1], 0);
  1722.     fprintf(out, ");
  1723.  
  1724.     {");
  1725.     {
  1726.         int i_28;
  1727.  
  1728.         for (i_28 = 0; i_28 < 4; ++i_28)
  1729.         {
  1730.             fprintf(out, "");
  1731.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_28);
  1732.     fprintf(out, " = pixel[");
  1733.     fprintf(out, "%d", i_28);
  1734.     fprintf(out, "] / 255.0;");
  1735.         }
  1736.     }
  1737.     fprintf(out, "}
  1738.     dummy = 4;");
  1739.     }
  1740.  
  1741. void gen_gray (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1742.     {
  1743.         fprintf(out, "");
  1744.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1745.     fprintf(out, " = 0.299 * ");
  1746.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1747.     fprintf(out, " + 0.587 * ");
  1748.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  1749.     fprintf(out, " + 0.114 * ");
  1750.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  1751.     fprintf(out, ";
  1752.     dummy = 1;");
  1753.     }
  1754.  
  1755. void gen_gradient (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1756.     {
  1757.         fprintf(out, "int index = ");
  1758.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1759.     fprintf(out, " * (num_gradient_samples - 1);
  1760.  
  1761.     if (index < 0)
  1762.         index = 0;
  1763.     else if (index >= num_gradient_samples)
  1764.         index = num_gradient_samples - 1;
  1765.  
  1766.     {");
  1767.     {
  1768.         int i_29;
  1769.  
  1770.         for (i_29 = 0; i_29 < 4; ++i_29)
  1771.         {
  1772.             fprintf(out, "");
  1773.     fprintf(out, "tmpvar_%d[%d]", outvarnum, i_29);
  1774.     fprintf(out, " = gradient_samples[index].data[");
  1775.     fprintf(out, "%d", i_29);
  1776.     fprintf(out, "];");
  1777.         }
  1778.     }
  1779.     fprintf(out, "}
  1780.     dummy = 4;");
  1781.     }
  1782.  
  1783. void gen_noise (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1784.     {
  1785.         fprintf(out, "");
  1786.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1787.     fprintf(out, " = noise(");
  1788.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1789.     fprintf(out, ", ");
  1790.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  1791.     fprintf(out, ", ");
  1792.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 2);
  1793.     fprintf(out, ");");
  1794.     }
  1795.  
  1796. void gen_toXY (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1797.     {
  1798.         fprintf(out, "double x, y;
  1799.  
  1800.     x = cos(");
  1801.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  1802.     fprintf(out, " * M_PI / 180) * ");
  1803.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1804.     fprintf(out, ";
  1805.     y = sin(");
  1806.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  1807.     fprintf(out, " * M_PI / 180) * ");
  1808.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1809.     fprintf(out, ";
  1810.  
  1811.     ");
  1812.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1813.     fprintf(out, " = x;
  1814.     ");
  1815.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  1816.     fprintf(out, " = y;");
  1817.     }
  1818.  
  1819. void gen_toRA (FILE *out, int *invarnums, int *invarlengths, int outvarnum)
  1820.     {
  1821.         fprintf(out, "double x, y, r, a;
  1822.  
  1823.     x = ");
  1824.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 0);
  1825.     fprintf(out, ";
  1826.     y = ");
  1827.     fprintf(out, "tmpvar_%d[%d]", invarnums[0], 1);
  1828.     fprintf(out, ";
  1829.  
  1830.     r = sqrt(x * x + y * y);
  1831.     if (r == 0)
  1832.         a = 0.0;
  1833.     else
  1834.         a = acos(x / r) * 180 / M_PI;
  1835.  
  1836.     if (y < 0)
  1837.         a = 360 - a;
  1838.  
  1839.     ");
  1840.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 0);
  1841.     fprintf(out, " = r;
  1842.     ");
  1843.     fprintf(out, "tmpvar_%d[%d]", outvarnum, 1);
  1844.     fprintf(out, " = a;");
  1845.     }
  1846.