Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/tools/sdk-tools/tabledesign/print.c
7861 views
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
}
90
91