sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

print.c (1727B)


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include "tabledesign.h"
      4 
      5 int print_entry(FILE *out, double *row, int order)
      6 {
      7     double **table;
      8     double fval;
      9     int ival;
     10     int i, j, k;
     11     int overflows;
     12 
     13     table = malloc(8 * sizeof(double*));
     14 
     15     for (i = 0; i < 8; i++)
     16     {
     17         table[i] = malloc(order * sizeof(double));
     18     }
     19 
     20     for (i = 0; i < order; i++)
     21     {
     22         for (j = 0; j < i; j++)
     23         {
     24             table[i][j] = 0.0;
     25         }
     26 
     27         for (j = i; j < order; j++)
     28         {
     29             table[i][j] = -row[order - j + i];
     30         }
     31     }
     32 
     33     for (i = order; i < 8; i++)
     34     {
     35         for (j = 0; j < order; j++)
     36         {
     37             table[i][j] = 0.0;
     38         }
     39     }
     40 
     41     for (i = 1; i < 8; i++)
     42     {
     43         for (j = 1; j <= order; j++)
     44         {
     45             if (i - j >= 0)
     46             {
     47                 for (k = 0; k < order; k++)
     48                 {
     49                     table[i][k] -= row[j] * table[i - j][k];
     50                 }
     51             }
     52         }
     53     }
     54 
     55     overflows = 0;
     56     for (i = 0; i < order; i++)
     57     {
     58         for (j = 0; j < 8; j++)
     59         {
     60             fval = table[j][i] * 2048.0;
     61             if (fval < 0.0)
     62             {
     63                 ival = (int) (fval - 0.5);
     64                 if (ival < -0x8000)
     65                 {
     66                     overflows++;
     67                 }
     68             }
     69             else
     70             {
     71                 ival = (int) (fval + 0.5);
     72                 if (ival >= 0x8000)
     73                 {
     74                     overflows++;
     75                 }
     76             }
     77             fprintf(out, "%5d ", ival);
     78         }
     79 
     80         fprintf(out, "\n");
     81     }
     82 
     83     for (i = 0; i < 8; i++)
     84     {
     85         free(table[i]);
     86     }
     87     free(table);
     88     return overflows;
     89 }