void fixNames(register symbol *p) { if (p) { fixNames(p->left); if (p->name[0] == '%') p->name[0] = '$'; fixNames(p->right); } }
void pushTree() { if ((level+1) < 256) { DPRINT2(3,"pushTree: from level %d to %d\n",level,level+1); level += 1; local[level] = temp; temp = NULL; fixNames(local[level]); DPRINT0(3,"pushTree: ...done\n"); } else { fprintf(stderr,"magic: environment nesting is too deep\n"); exit(1); } }
bool SMDImporter::Parse ( FILE *f ) { char *buffer = NULL; try { fseek(f, 0, SEEK_END ); long fl = ftell ( f ); fseek (f, 0,SEEK_SET); buffer = new char [fl + 7]; fread (buffer,fl,sizeof(char),f); buffer[fl] = '\r'; buffer[fl+1] = '\n'; buffer[fl+2] = 'E'; buffer[fl+3] = 'N'; buffer[fl+4] = 'D'; buffer[fl+5] = 0; fixNames ( buffer ); char seps[] = " \t\n\r"; char *token = GetNextToken (buffer, seps); int smdversion = NextTokenAsInteger(); if ( strcmp ( token, "version" )) { XSILogMessage ( L"SMDImport: Not an SMD file.", XSI::siErrorMsg ); return false; } if ( smdversion != 1 ) { XSILogMessage ( L"SMDImport: Attempting to load unsupported SMD version.", XSI::siWarningMsg ); } while (1) { char *currenttok = GetNextToken (NULL, seps); if ( !strcmp ( currenttok, "nodes")) { if ( !ImportNodes () ) { return false; } } if ( !strcmp ( currenttok, "skeleton")) { if ( !ImportSkeleton () ) { return false; } } if ( !strcmp ( currenttok, "triangles")) { if ( !ImportTriangles () ) { return false; } } if ( !strcmp ( currenttok, "vertexanimation")) { if ( !ImportVertexAnimation () ) { return false; } } if (!strcmp ( currenttok, "END")) { break; // were done } } // // Create Hierarchy // } catch (...) { XSILogMessage ( L"SMDImport: Invalid or corrupted SMD file.", XSI::siErrorMsg ); return false; } delete [] buffer; return true; }