i32 RCMain() { i32 bail = 0; #ifdef WIN32 while (!SetCurrentDirectoryA(RC_RESOURCE_PATH) && SetCurrentDirectoryA("..")) { bail++; if (bail >= 32) { printf("Can't find resource folder. Build directory must be located further down in the hierarchy than /res/\n"); exit(0); } } SetCurrentDirectoryA(".."); #else char *fbuf = __FILE__; char fpath [8192]; char *epos = strrchr(fbuf, '/'); strncpy(fpath, fbuf, (epos - fbuf)); fpath[(epos - fbuf)] = 0; chdir(fpath); while (chdir(RC_RESOURCE_PATH) != 0 && chdir("..") == 0) { bail++; if (bail >= 32) { printf("Can't find resource folder. Build directory must be located further down in the hierarchy than /res/\n"); exit(0); } } chdir(".."); #endif char buf[4096]; printf("Result setup...\n"); ResultInit(); printf("Done\n"); printf("Display setup...\n"); Platform::setDisplay(false, RC_DEFAULT_DISPLAY_WIDTH, RC_DEFAULT_DISPLAY_HEIGHT); printf("Done\n"); printf("Renderer init...\n"); Renderer::init(); printf("Done\n"); printf("SceneGraph setup...\n"); SceneGraph::init(); printf("Done\n"); printf("Console setup...\n"); Console::init(); printf("Done\n"); printf("Command setup...\n"); Command::init(); printf("Done\n"); printf("Frame init...\n"); Platform::initFrame(); printf("Done\n"); Console::log("~c9995============================="); Console::log("~c3939~g3939 _"); Console::log("~c3939~g6969 c \" ~r-[ RenderChimp ]-"); Console::log("~c6969~g9999 (- ~r-[ v 0.3.2a ]-\n "); Console::log("~c9995=============================\n \n "); //Console::log("~c9995Press ~c6966F1~c9995 to bring up the console."); Console::log("~c9995Press F1 to bring up the console."); sprintf(buf, "/config %sconfig/config.cfg", RC_RESOURCE_PATH); Command::run(buf); #if defined RC_WIN32 Console::log("Running on Win32 platform"); #else Console::log("Running on some platform"); #endif printf("Running RCInit...\n"); RCInit(); printf("Done\n"); Console::log("Initiated..."); rs.enableDepthTest(CMP_LESS); rs.enableDepthWrite(); printf("Running main loop...\n"); Platform::run(); return 0; }
/* ARGSUSED */ int TclChannelTransform( Tcl_Interp *interp, /* Interpreter for result. */ Tcl_Channel chan, /* Channel to transform. */ Tcl_Obj *cmdObjPtr) /* Script to use for transform. */ { Channel *chanPtr; /* The actual channel. */ ChannelState *statePtr; /* State info for channel. */ int mode; /* Read/write mode of the channel. */ int objc; TransformChannelData *dataPtr; Tcl_DString ds; if (chan == NULL) { return TCL_ERROR; } if (TCL_OK != Tcl_ListObjLength(interp, cmdObjPtr, &objc)) { Tcl_SetObjResult(interp, Tcl_NewStringObj("-command value is not a list", -1)); return TCL_ERROR; } chanPtr = (Channel *) chan; statePtr = chanPtr->state; chanPtr = statePtr->topChanPtr; chan = (Tcl_Channel) chanPtr; mode = (statePtr->flags & (TCL_READABLE|TCL_WRITABLE)); /* * Now initialize the transformation state and stack it upon the specified * channel. One of the necessary things to do is to retrieve the blocking * regime of the underlying channel and to use the same for us too. */ dataPtr = ckalloc(sizeof(TransformChannelData)); dataPtr->refCount = 1; Tcl_DStringInit(&ds); Tcl_GetChannelOption(interp, chan, "-blocking", &ds); dataPtr->readIsFlushed = 0; dataPtr->eofPending = 0; dataPtr->flags = 0; if (ds.string[0] == '0') { dataPtr->flags |= CHANNEL_ASYNC; } Tcl_DStringFree(&ds); dataPtr->watchMask = 0; dataPtr->mode = mode; dataPtr->timer = NULL; dataPtr->maxRead = 4096; /* Initial value not relevant. */ dataPtr->interp = interp; dataPtr->command = cmdObjPtr; Tcl_IncrRefCount(dataPtr->command); ResultInit(&dataPtr->result); dataPtr->self = Tcl_StackChannel(interp, &transformChannelType, dataPtr, mode, chan); if (dataPtr->self == NULL) { Tcl_AppendPrintfToObj(Tcl_GetObjResult(interp), "\nfailed to stack channel \"%s\"", Tcl_GetChannelName(chan)); ReleaseData(dataPtr); return TCL_ERROR; } Tcl_Preserve(dataPtr->self); /* * At last initialize the transformation at the script level. */ PreserveData(dataPtr); if ((dataPtr->mode & TCL_WRITABLE) && ExecuteCallback(dataPtr, NULL, A_CREATE_WRITE, NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE) != TCL_OK){ Tcl_UnstackChannel(interp, chan); ReleaseData(dataPtr); return TCL_ERROR; } if ((dataPtr->mode & TCL_READABLE) && ExecuteCallback(dataPtr, NULL, A_CREATE_READ, NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE) != TCL_OK) { ExecuteCallback(dataPtr, NULL, A_DELETE_WRITE, NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE); Tcl_UnstackChannel(interp, chan); ReleaseData(dataPtr); return TCL_ERROR; } ReleaseData(dataPtr); return TCL_OK; }