JNIEXPORT void JNICALL Java_com_n0n3m4_q3e_Q3EJNI_init(JNIEnv *env, jclass c, jstring LibPath, jint width, jint height, jstring GameDir, jstring Cmdline) { char **argv; int argc=0; jboolean iscopy; const char *dir = (*env)->GetStringUTFChars( env, GameDir, &iscopy); const char *arg = (*env)->GetStringUTFChars( env, Cmdline, &iscopy); chdir(strdup(dir)); (*env)->ReleaseStringUTFChars(env, GameDir, dir); argv = malloc(sizeof(char*) * 255); argc = ParseCommandLine(strdup(arg), argv); (*env)->ReleaseStringUTFChars(env, Cmdline, arg); const char *libpath = (*env)->GetStringUTFChars( env, LibPath, &iscopy); loadLib(strdup(libpath)); (*env)->ReleaseStringUTFChars(env, LibPath, libpath); setCallbacks(&initAudio,&writeAudio,&setState); setResolution(width, height); qmain(argc, argv); free(argv); }
void recurse(const char *dir) { char **sysFiles, **dirFiles, *args[5]; int numSysFiles, i, len, numdirs; char altname[MAX_OSPATH]; char command1[MAX_OSPATH]; char command2[MAX_OSPATH]; dirFiles = Sys_ListFiles(dir, "/", &numdirs); if (numdirs > 2) { for (i=2;i<numdirs;i++) { sprintf(altname, "%s\\%s", dir, dirFiles[i]); // if (stricmp(altname,"q:\\send\\quake\\baseq3\\models\\players")) // dont recurse this dir { recurse(altname); } } } sprintf(command1, "-targa"); sprintf(command2, "-outfile"); sysFiles = Sys_ListFiles( dir, ".tga", &numSysFiles ); for(i=0; i<numSysFiles; i++) { char tgain[MAX_OSPATH]; sprintf(tgain,"%s\\%s", dir, sysFiles[i]); strcpy( altname, tgain ); len = strlen( altname ); altname[len-3] = 'j'; altname[len-2] = 'p'; altname[len-1] = 'g'; args[0] = "cjpeg"; args[1] = command2; args[2] = altname; args[3] = command1; args[4] = tgain; printf("%s", tgain); len = qmain(5, args); iNumberOf_FilesScanned++; if (!len) { iNumberOf_FilesConverted++; iSizeOf_JPGsWritten += scGetFileLen(altname); iSizeOf_TGAsDeleted += scGetFileLen(tgain); if (!gbNoTGADelete) { remove(tgain); printf(" nuked!"); } } printf("\n"); } Sys_FreeFileList( sysFiles ); Sys_FreeFileList( dirFiles ); }