Exemplo n.º 1
0
void fixNames(register symbol *p)
{  if (p)
   {  fixNames(p->left);
      if (p->name[0] == '%')
	 p->name[0] = '$';
      fixNames(p->right);
   }
}
Exemplo n.º 2
0
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);
    }
}
Exemplo n.º 3
0
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;
}