static Replace * ReplaceNew (void) { Replace *r = New (sizeof (Replace)); r->tag = StringNew (); r->text = StringNew (); return r; }
JNIEXPORT jobjectArray JNICALL Java_ConfigManager_getListValue(JNIEnv * env, jobject obj, jstring parameterName) { const jbyte* str; char* name; char* value; int i; ParameterList* list; jobjectArray result = NULL; str = (*env)->GetStringUTFChars(env, parameterName, NULL); if (str != NULL) { name = StringNew((char*) str); list = PM_getValue(GetJavaPMPointer(env, obj), name).list_val; result = (jobjectArray) (*env)->NewObjectArray(env, PL_getLength(list), (*env)->FindClass(env, "java/lang/String"), NULL); i = 0; while((value = PL_next(list)) != NULL) { (*env)->SetObjectArrayElement(env, result, i, (*env)->NewStringUTF(env, value)); i++; } (*env)->ReleaseStringUTFChars(env, parameterName, str); StringFree(name); } return result; }
static String * StringMake (char *buf) { String *s = StringNew (); StringAddString (s, buf); return s; }
static LoopStack * LoopStackPush (LoopStack *prev, FILE *f, char *tag) { LoopStack *ls = New (sizeof (LoopStack)); ls->prev = prev; ls->tag = StringMake (tag); ls->extra = StringNew (); ls->pos = ftell (f); return ls; }
String* StringConcat (String* first, String* second) { guint i; String* res; res = StringNew (first->length + second->length); gmcopy(res->chars, first->chars, first->length); gmcopy(&res->chars[first->length], second->chars, second->length); return res; }
String* StringFromCstr(char* cstr) { guint i; String* res; i = _cstrlen(cstr); res = StringNew(i); gmcopy(res->chars, cstr, res->length); return res; }
JNIEXPORT jboolean JNICALL Java_ConfigManager_getBooleanValue(JNIEnv * env, jobject obj, jstring parameterName) { const jbyte* str; char* name; jboolean result = false; str = (*env)->GetStringUTFChars(env, parameterName, NULL); if (str != NULL) { name = StringNew((char*) str); result = PM_getValue(GetJavaPMPointer(env, obj), name).bool_val; (*env)->ReleaseStringUTFChars(env, parameterName, str); StringFree(name); } return result; }
JNIEXPORT jstring JNICALL Java_ConfigManager_getStringValue(JNIEnv * env, jobject obj, jstring parameterName) { const jbyte* str; char* name; char* result = NULL; str = (*env)->GetStringUTFChars(env, parameterName, NULL); if (str != NULL) { name = StringNew((char*) str); result = PM_getValue(GetJavaPMPointer(env, obj), name).str_val; (*env)->ReleaseStringUTFChars(env, parameterName, str); StringFree(name); } return (*env)->NewStringUTF(env, result); }
JNIEXPORT void JNICALL Java_ConfigManager_manage(JNIEnv *env, jobject obj, jstring parameterName, jbyte parameterType, jboolean required) { ParameterManager* pm = GetJavaPMPointer(env, obj); const jbyte* str; char* name; char type = (char) parameterType; param_t ptype; str = (*env)->GetStringUTFChars(env, parameterName, NULL); if (str != NULL) { name = StringNew((char*) str); if(type == 'i') { ptype = INT_TYPE; } else if(type == 's') { ptype = STRING_TYPE; } else if(type == 'l') { ptype = LIST_TYPE; } else if(type == 'r') { ptype = REAL_TYPE; } else if(type == 'b') { ptype = BOOLEAN_TYPE; } PM_manage(pm, name, ptype, required); (*env)->ReleaseStringUTFChars(env, parameterName, str); StringFree(name); } }
static void DoReplace (FILE *f, ReplaceSet *s) { int c; String *tag; Replace *r; SkipStack *ss = 0; LoopStack *ls = 0; int skipping = 0; while ((c = getc (f)) != EOF) { if (c == '@') { tag = StringNew (); while ((c = getc (f)) != '@') { if (c == EOF) abort (); StringAdd (tag, c); } if (ls) StringAddString (tag, ls->extra->buf); switch (tag->buf[0]) { case '?': ss = SkipStackPush (ss, skipping); if (!ReplaceSetFind (s, tag->buf + 1)) skipping++; LineSkip (f); break; case ':': if (!ss) abort (); if (ss->skipping == skipping) ++skipping; else --skipping; LineSkip (f); break; case ';': skipping = ss->skipping; ss = SkipStackPop (ss); LineSkip (f); break; case '{': ls = LoopStackPush (ls, f, tag->buf + 1); LineSkip (f); break; case '}': ls = LoopStackLoop (s, ls, f); LineSkip (f); break; default: r = ReplaceSetFind (s, tag->buf); if (r && !skipping) StringPut (stdout, r->text); break; } StringDispose (tag); } else if (!skipping) putchar (c); } }