/*** * * Copyright (C) 2002 The Wastes Project, All Rights Reserved. * * This product contains software technology from Valve Software, LLC, * Copyright © 1996-2001, Valve LLC, All rights reserved. * * Use, distribution, and modification of this source code and/or resulting * object code is restricted to non-commercial enhancements to products from * The Wastes Project. All other use, distribution, or modification is prohibited * without written permission from The Wastes Project. * ***/ // // program entry, scripting parser // #include #include #include #include #include #include "../../common/mathlib.h" #include "../../common/const.h" #include "../../common/twm.h" #include "studiotwm.h" #define VERSION_NUM "1.0" int g_errCount = 0; char g_szTexturePath[MAX_STRLEN]; float g_flScale = 1; void ParseLine(char *line) { char *token = strtok(line," "); if(token != NULL) { // parse the opening token // TODO: triflip ? if(strcmp("$texturepath",token) == 0) { char *param1 = strtok(NULL," "); strcpy(g_szTexturePath,param1); } else if(strcmp("$convertsmd",token) == 0) { char *param1 = strtok(NULL," "); char *param2 = strtok(NULL," "); SMD_ConvertToTWM(param1,param2); } else if(strcmp("$scale",token) == 0) { char *param1 = strtok(NULL," "); sscanf(param1,"%f",&g_flScale); } else { fprintf(stderr,"ERROR: invalid token %s\n",token); g_errCount++; } } } void RunScript(char *filename) { FILE *pFile = fopen(filename,"r"); if(pFile == NULL) { fprintf(stderr,"ERROR: Unable to load %s\n",filename); g_errCount++; return; } else { // Begin the parsing operation char current_line[MAX_STRLEN]; memset(current_line,0,sizeof(char)*MAX_STRLEN); while(fgets(current_line,MAX_STRLEN,pFile) != NULL) { // strip comments first char *comment = strstr(current_line,"//"); if(comment != NULL) comment[0] = '\0'; // strip newline comment = strchr(current_line,'\n'); if(comment != NULL) comment[0] = '\0'; ParseLine(current_line); } } fclose(pFile); } int main(int argc,char **argv) { // No options put in, print help if(argc <= 1) { printf("usage: studiotwm script1 script2...\n"); } else { int arg_count; printf("studiotwm version %s\n",VERSION_NUM); // Start at 1 to bypass the path arg for(arg_count = 1;arg_count < argc;arg_count++) RunScript(argv[arg_count]); printf("%i errors\n",g_errCount); } return 0; }