405 lines
7.7 KiB
C
405 lines
7.7 KiB
C
/* Simple debugging component. Temporary */
|
|
|
|
#include "ttdebug.h"
|
|
#include "tttables.h"
|
|
#include "ttobjs.h"
|
|
|
|
|
|
#ifdef DEBUG_LEVEL_TRACE
|
|
char tt_trace_levels[trace_max];
|
|
#endif
|
|
|
|
#if defined( DEBUG_LEVEL_ERROR ) || defined( DEBUG_LEVEL_TRACE )
|
|
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include <string.h>
|
|
|
|
|
|
static String tempStr[128];
|
|
|
|
static const String* OpStr[256] =
|
|
{
|
|
"SVTCA y", /* Set vectors to coordinate axis y */
|
|
"SVTCA x", /* Set vectors to coordinate axis x */
|
|
"SPvTCA y", /* Set Proj. vec. to coord. axis y */
|
|
"SPvTCA x", /* Set Proj. vec. to coord. axis x */
|
|
"SFvTCA y", /* Set Free. vec. to coord. axis y */
|
|
"SFvTCA x", /* Set Free. vec. to coord. axis x */
|
|
"SPvTL //", /* Set Proj. vec. parallel to segment */
|
|
"SPvTL +", /* Set Proj. vec. normal to segment */
|
|
"SFvTL //", /* Set Free. vec. parallel to segment */
|
|
"SFvTL +", /* Set Free. vec. normal to segment */
|
|
"SPvFS", /* Set Proj. vec. from stack */
|
|
"SFvFS", /* Set Free. vec. from stack */
|
|
"GPV", /* Get projection vector */
|
|
"GFV", /* Get freedom vector */
|
|
"SFvTPv", /* Set free. vec. to proj. vec. */
|
|
"ISECT", /* compute intersection */
|
|
|
|
"SRP0", /* Set reference point 0 */
|
|
"SRP1", /* Set reference point 1 */
|
|
"SRP2", /* Set reference point 2 */
|
|
"SZP0", /* Set Zone Pointer 0 */
|
|
"SZP1", /* Set Zone Pointer 1 */
|
|
"SZP2", /* Set Zone Pointer 2 */
|
|
"SZPS", /* Set all zone pointers */
|
|
"SLOOP", /* Set loop counter */
|
|
"RTG", /* Round to Grid */
|
|
"RTHG", /* Round to Half-Grid */
|
|
"SMD", /* Set Minimum Distance */
|
|
"ELSE", /* Else */
|
|
"JMPR", /* Jump Relative */
|
|
"SCvTCi", /* Set CVT */
|
|
"SSwCi", /* */
|
|
"SSW", /* */
|
|
|
|
"DUP",
|
|
"POP",
|
|
"CLEAR",
|
|
"SWAP",
|
|
"DEPTH",
|
|
"CINDEX",
|
|
"MINDEX",
|
|
"AlignPTS",
|
|
"INS_$28",
|
|
"UTP",
|
|
"LOOPCALL",
|
|
"CALL",
|
|
"FDEF",
|
|
"ENDF",
|
|
"MDAP[-]",
|
|
"MDAP[r]",
|
|
|
|
"IUP[y]",
|
|
"IUP[x]",
|
|
"SHP[0]",
|
|
"SHP[1]",
|
|
"SHC[0]",
|
|
"SHC[1]",
|
|
"SHZ[0]",
|
|
"SHZ[1]",
|
|
"SHPIX",
|
|
"IP",
|
|
"MSIRP[0]",
|
|
"MSIRP[1]",
|
|
"AlignRP",
|
|
"RTDG",
|
|
"MIAP[-]",
|
|
"MIAP[r]",
|
|
|
|
"NPushB",
|
|
"NPushW",
|
|
"WS",
|
|
"RS",
|
|
"WCvtP",
|
|
"RCvt",
|
|
"GC[0]",
|
|
"GC[1]",
|
|
"SCFS",
|
|
"MD[0]",
|
|
"MD[1]",
|
|
"MPPEM",
|
|
"MPS",
|
|
"FlipON",
|
|
"FlipOFF",
|
|
"DEBUG",
|
|
|
|
"LT",
|
|
"LTEQ",
|
|
"GT",
|
|
"GTEQ",
|
|
"EQ",
|
|
"NEQ",
|
|
"ODD",
|
|
"EVEN",
|
|
"IF",
|
|
"EIF",
|
|
"AND",
|
|
"OR",
|
|
"NOT",
|
|
"DeltaP1",
|
|
"SDB",
|
|
"SDS",
|
|
|
|
"ADD",
|
|
"SUB",
|
|
"DIV",
|
|
"MUL",
|
|
"ABS",
|
|
"NEG",
|
|
"FLOOR",
|
|
"CEILING",
|
|
"ROUND[G]",
|
|
"ROUND[B]",
|
|
"ROUND[W]",
|
|
"ROUND[?]",
|
|
"NROUND[G]",
|
|
"NROUND[B]",
|
|
"NROUND[W]",
|
|
"NROUND[?]",
|
|
|
|
"WCvtF",
|
|
"DeltaP2",
|
|
"DeltaP3",
|
|
"DeltaC1",
|
|
"DeltaC2",
|
|
"DeltaC3",
|
|
"SROUND",
|
|
"S45Round",
|
|
"JROT",
|
|
"JROF",
|
|
"ROFF",
|
|
"INS_$7B",
|
|
"RUTG",
|
|
"RDTG",
|
|
"SANGW",
|
|
"AA",
|
|
|
|
"FlipPT",
|
|
"FlipRgON",
|
|
"FlipRgOFF",
|
|
"INS_$83",
|
|
"INS_$84",
|
|
"ScanCTRL",
|
|
"SDPVTL[0]",
|
|
"SDPVTL[1]",
|
|
"GetINFO",
|
|
"IDEF",
|
|
"ROLL",
|
|
"MAX",
|
|
"MIN",
|
|
"ScanTYPE",
|
|
"IntCTRL",
|
|
"INS_$8F",
|
|
|
|
"INS_$90",
|
|
"INS_$91",
|
|
"INS_$92",
|
|
"INS_$93",
|
|
"INS_$94",
|
|
"INS_$95",
|
|
"INS_$96",
|
|
"INS_$97",
|
|
"INS_$98",
|
|
"INS_$99",
|
|
"INS_$9A",
|
|
"INS_$9B",
|
|
"INS_$9C",
|
|
"INS_$9D",
|
|
"INS_$9E",
|
|
"INS_$9F",
|
|
|
|
"INS_$A0",
|
|
"INS_$A1",
|
|
"INS_$A2",
|
|
"INS_$A3",
|
|
"INS_$A4",
|
|
"INS_$A5",
|
|
"INS_$A6",
|
|
"INS_$A7",
|
|
"INS_$A8",
|
|
"INS_$A9",
|
|
"INS_$AA",
|
|
"INS_$AB",
|
|
"INS_$AC",
|
|
"INS_$AD",
|
|
"INS_$AE",
|
|
"INS_$AF",
|
|
|
|
"PushB[0]",
|
|
"PushB[1]",
|
|
"PushB[2]",
|
|
"PushB[3]",
|
|
"PushB[4]",
|
|
"PushB[5]",
|
|
"PushB[6]",
|
|
"PushB[7]",
|
|
"PushW[0]",
|
|
"PushW[1]",
|
|
"PushW[2]",
|
|
"PushW[3]",
|
|
"PushW[4]",
|
|
"PushW[5]",
|
|
"PushW[6]",
|
|
"PushW[7]",
|
|
|
|
"MDRP[G]",
|
|
"MDRP[B]",
|
|
"MDRP[W]",
|
|
"MDRP[?]",
|
|
"MDRP[rG]",
|
|
"MDRP[rB]",
|
|
"MDRP[rW]",
|
|
"MDRP[r?]",
|
|
"MDRP[mG]",
|
|
"MDRP[mB]",
|
|
"MDRP[mW]",
|
|
"MDRP[m?]",
|
|
"MDRP[mrG]",
|
|
"MDRP[mrB]",
|
|
"MDRP[mrW]",
|
|
"MDRP[mr?]",
|
|
"MDRP[pG]",
|
|
"MDRP[pB]",
|
|
|
|
"MDRP[pW]",
|
|
"MDRP[p?]",
|
|
"MDRP[prG]",
|
|
"MDRP[prB]",
|
|
"MDRP[prW]",
|
|
"MDRP[pr?]",
|
|
"MDRP[pmG]",
|
|
"MDRP[pmB]",
|
|
"MDRP[pmW]",
|
|
"MDRP[pm?]",
|
|
"MDRP[pmrG]",
|
|
"MDRP[pmrB]",
|
|
"MDRP[pmrW]",
|
|
"MDRP[pmr?]",
|
|
|
|
"MIRP[G]",
|
|
"MIRP[B]",
|
|
"MIRP[W]",
|
|
"MIRP[?]",
|
|
"MIRP[rG]",
|
|
"MIRP[rB]",
|
|
"MIRP[rW]",
|
|
"MIRP[r?]",
|
|
"MIRP[mG]",
|
|
"MIRP[mB]",
|
|
"MIRP[mW]",
|
|
"MIRP[m?]",
|
|
"MIRP[mrG]",
|
|
"MIRP[mrB]",
|
|
"MIRP[mrW]",
|
|
"MIRP[mr?]",
|
|
"MIRP[pG]",
|
|
"MIRP[pB]",
|
|
|
|
"MIRP[pW]",
|
|
"MIRP[p?]",
|
|
"MIRP[prG]",
|
|
"MIRP[prB]",
|
|
"MIRP[prW]",
|
|
"MIRP[pr?]",
|
|
"MIRP[pmG]",
|
|
"MIRP[pmB]",
|
|
"MIRP[pmW]",
|
|
"MIRP[pm?]",
|
|
"MIRP[pmrG]",
|
|
"MIRP[pmrB]",
|
|
"MIRP[pmrW]",
|
|
"MIRP[pmr?]"
|
|
};
|
|
|
|
|
|
const String* Cur_U_Line( void* _exec )
|
|
{
|
|
String s[32];
|
|
|
|
Int op, i, n;
|
|
|
|
PExecution_Context exec;
|
|
|
|
|
|
exec = _exec;
|
|
|
|
op = exec->code[exec->IP];
|
|
|
|
sprintf( tempStr, "%s", OpStr[op] );
|
|
|
|
if ( op == 0x40 )
|
|
{
|
|
n = exec->code[exec->IP + 1];
|
|
sprintf( s, "(%d)", n );
|
|
strncat( tempStr, s, 8 );
|
|
|
|
if ( n > 20 ) n = 20; /* limit output */
|
|
|
|
for ( i = 0; i < n; i++ )
|
|
{
|
|
sprintf( s, " $%02hx", exec->code[exec->IP + i + 2] );
|
|
strncat( tempStr, s, 8 );
|
|
}
|
|
}
|
|
else if ( op == 0x41 )
|
|
{
|
|
n = exec->code[exec->IP + 1];
|
|
sprintf( s, "(%d)", n );
|
|
strncat( tempStr, s, 8 );
|
|
|
|
if ( n > 20 ) n = 20; /* limit output */
|
|
|
|
for ( i = 0; i < n; i++ )
|
|
{
|
|
sprintf( s, " $%02hx%02hx", exec->code[exec->IP + i*2 + 2],
|
|
exec->code[exec->IP + i*2 + 3] );
|
|
strncat( tempStr, s, 8 );
|
|
}
|
|
}
|
|
else if ( (op & 0xF8) == 0xB0 )
|
|
{
|
|
n = op - 0xB0;
|
|
|
|
for ( i = 0; i <= n; i++ )
|
|
{
|
|
sprintf( s, " $%02hx", exec->code[exec->IP + i + 1] );
|
|
strncat( tempStr, s, 8 );
|
|
}
|
|
}
|
|
else if ( (op & 0xF8) == 0xB8 )
|
|
{
|
|
n = op-0xB8;
|
|
|
|
for ( i = 0; i <= n; i++ )
|
|
{
|
|
sprintf( s, " $%02hx%02hx", exec->code[exec->IP + i*2 + 1],
|
|
exec->code[exec->IP + i*2 + 2] );
|
|
strncat( tempStr, s, 8 );
|
|
}
|
|
}
|
|
|
|
return (String*)tempStr;
|
|
}
|
|
|
|
|
|
/* the Print() function is defined in ttconfig.h; */
|
|
/* it defaults to vprintf on systems which have it */
|
|
|
|
void TT_Message( const String* fmt, ... )
|
|
{
|
|
va_list ap;
|
|
|
|
va_start( ap, fmt );
|
|
Print( fmt, ap );
|
|
va_end( ap );
|
|
}
|
|
|
|
|
|
void TT_Panic( const String* fmt, ... )
|
|
{
|
|
va_list ap;
|
|
|
|
va_start( ap, fmt );
|
|
Print( fmt, ap );
|
|
va_end( ap );
|
|
|
|
exit( EXIT_FAILURE );
|
|
}
|
|
|
|
#endif /* defined( DEBUG_LEVEL_ERROR ) || defined( DEBUG_LEVEL_TRACE ) */
|
|
|
|
#if defined( DEBUG_LEVEL_TRACE )
|
|
|
|
/* use this function to set the values of tt_trace_levels */
|
|
|
|
void set_tt_trace_levels( int index, char value )
|
|
{
|
|
tt_trace_levels[index] = value;
|
|
}
|
|
|
|
#endif
|
|
|
|
/* END */
|