void gsc_exec() { char *command; if (!stackGetParamString(0, &command)) { stackError("gsc_exec() argument is undefined or has wrong type"); stackPushUndefined(); return; } Com_DPrintf("gsc_exec() executing: %s\n", command); FILE *fp; fp = popen(command, "r"); if (fp == NULL) { stackPushUndefined(); return; } char c; int curpos = 0; char content[COD2_MAX_STRINGLENGTH]; stackPushArray(); while ((c = getc(fp)) != EOF) { if (c == '\n' || curpos == COD2_MAX_STRINGLENGTH - 1) { content[curpos] = '\0'; stackPushString(content); stackPushArrayLast(); curpos = 0; } else { content[curpos] = c; curpos++; } } content[curpos] = '\0'; stackPushString(content); stackPushArrayLast(); pclose(fp); }
void stackPush ( tStack* s, char c ) { /* --------- ** Vlo¾í znak na vrchol zásobníku. Pokus o vlo¾ení prvku do plného zásobníku ** je nekorektní a o¹etøete ho voláním procedury stackError(SERR_PUSH). ** ** Pro ovìøení, zda je zásobník plný, pou¾ijte døíve definovanou ** funkci stackFull. */ if(stackFull(s)) stackError(SERR_PUSH); else s->arr[++s->top] = c; }
void stackTop ( const tStack* s, char* c ) { /* -------- ** Vrací znak z vrcholu zásobníku prostøednictvím parametru c. ** Tato operace ale prvek z vrcholu zásobníku neodstraòuje. ** Volání operace Top pøi prázdném zásobníku je nekorektní ** a o¹etøete ho voláním funkce stackError(SERR_TOP). ** ** Pro ovìøení, zda je zásobník prázdný, pou¾ijte døíve definovanou ** funkci stackEmpty. */ if (stackEmpty(s)) stackError(SERR_TOP); else *c = s->arr[s->top]; }
void stackInit ( tStack* s ) { /* --------- ** Provede inicializaci zásobníku - nastaví vrchol zásobníku. ** Hodnoty ve statickém poli neupravujte - po inicializaci zásobníku ** jsou nedefinované. ** ** V pøípadì, ¾e funkce dostane jako parametr s == NULL, ** volejte funkci stackError(SERR_INIT). U ostatních funkcí pro zjednodu¹ení ** pøedpokládejte, ¾e tato situace nenastane. */ if(s==NULL) stackError(SERR_INIT); else s->top = -1; }
void stackPush ( tStack* s, char c ) { /* --------- ** Vlo¾í znak na vrchol zásobníku. Pokus o vlo¾ení prvku do plného zásobníku ** je nekorektní a o¹etøete ho voláním procedury stackError(SERR_PUSH). ** ** Pro ovìøení, zda je zásobník plný, pou¾ijte døíve definovanou ** funkci stackFull. */ if (stackFull(s)!=0) stackError(SERR_PUSH); //Pokud je zasobnik plny, zavolam funkci na vypis chyby else{ s->top++; //jinak zvysim pocet prvku v zasobniku s->arr[s->top]=c; //a ulozim hodnotu na vrchol } }
void stackTop ( const tStack* s, char* c ) { /* -------- ** Vrací znak z vrcholu zásobníku prostøednictvím parametru c. ** Tato operace ale prvek z vrcholu zásobníku neodstraòuje. ** Volání operace Top pøi prázdném zásobníku je nekorektní ** a o¹etøete ho voláním funkce stackError(SERR_TOP). ** ** Pro ovìøení, zda je zásobník prázdný, pou¾ijte døíve definovanou ** funkci stackEmpty. */ if (stackEmpty(s)==-1) //Pokud je vrchol zasobniku nastaven na -1 (je prazdny) zavolam funkci pro vypis chyby stackError(SERR_TOP); else{ *c=s->arr[s->top]; //do promenne c dal hodnotu z vrcholu zasobniku } }
void stackPush ( tStack* s, char c ) { /* --------- ** Vlo¾í znak na vrchol zásobníku. Pokus o vlo¾ení prvku do plného zásobníku ** je nekorektní a o¹etøete ho voláním procedury stackError(SERR_PUSH). ** ** Pro ovìøení, zda je zásobník plný, pou¾ijte døíve definovanou ** funkci stackFull. */ // Pokud je zasobnik plny (vysledek podminky bude hodnota 1 -> true), // zavola se stackError s prisnym kodem chyby, jinak se na vrchol zasobniku // vlozi znak v parametru c if (stackFull(s)) { stackError(SERR_PUSH); } else { s->top++; s->arr[s->top] = c; } }
void stackTop ( const tStack* s, char* c ) { /* -------- ** Vrací znak z vrcholu zásobníku prostøednictvím parametru c. ** Tato operace ale prvek z vrcholu zásobníku neodstraòuje. ** Volání operace Top pøi prázdném zásobníku je nekorektní ** a o¹etøete ho voláním funkce stackError(SERR_TOP). ** ** Pro ovìøení, zda je zásobník prázdný, pou¾ijte døíve definovanou ** funkci stackEmpty. */ // Pokud je zasobnik prazdny (vysledek podminky bude hodnota 1 -> true), // zavola se stackError s prislusnym kodem chyby, jinak se do parametru c // nacte znak z vrcholu zasobniku if (stackEmpty(s)) { stackError(SERR_TOP); } else { *c = s->arr[s->top]; } }
void gsc_exec_async_create_nosave() { char *command; int callback; if (!stackGetParamString(0, &command)) { stackError("gsc_exec_async_create_nosave() argument is undefined or has wrong type"); stackPushUndefined(); return; } Com_DPrintf("gsc_exec_async_create_nosave() executing: %s\n", command); exec_async_task *current = first_exec_async_task; while (current != NULL && current->next != NULL) current = current->next; exec_async_task *newtask = new exec_async_task; strncpy(newtask->command, command, COD2_MAX_STRINGLENGTH - 1); newtask->command[COD2_MAX_STRINGLENGTH - 1] = '\0'; newtask->output = NULL; newtask->prev = current; newtask->next = NULL; if (!stackGetParamFunction(1, &callback)) newtask->callback = 0; else newtask->callback = callback; newtask->done = false; newtask->save = false; newtask->error = false; newtask->levelId = scrVarPub.levelId; newtask->hasargument = true; int valueInt; float valueFloat; char *valueString; vec3_t valueVector; unsigned int valueObject; if (stackGetParamInt(2, &valueInt)) { newtask->valueType = INT_VALUE; newtask->intValue = valueInt; } else if (stackGetParamFloat(2, &valueFloat)) { newtask->valueType = FLOAT_VALUE; newtask->floatValue = valueFloat; } else if (stackGetParamString(2, &valueString)) { newtask->valueType = STRING_VALUE; strcpy(newtask->stringValue, valueString); } else if (stackGetParamVector(2, valueVector)) { newtask->valueType = VECTOR_VALUE; newtask->vectorValue[0] = valueVector[0]; newtask->vectorValue[1] = valueVector[1]; newtask->vectorValue[2] = valueVector[2]; } else if (stackGetParamObject(2, &valueObject)) { newtask->valueType = OBJECT_VALUE; newtask->objectValue = valueObject; } else newtask->hasargument = false; if (current != NULL) current->next = newtask; else first_exec_async_task = newtask; pthread_t exec_doer; if (pthread_create(&exec_doer, NULL, exec_async, newtask) != 0) { stackError("gsc_exec_async_create_nosave() error creating exec async handler thread!"); stackPushUndefined(); return; } if (pthread_detach(exec_doer) != 0) { stackError("gsc_exec_async_create_nosave() error detaching exec async handler thread!"); stackPushUndefined(); return; } stackPushInt(1); }