BOOL cmd_condition_sge(sObject* nextin, sObject* nextout, sRunInfo* runinfo) { if(runinfo->mFilter && runinfo->mArgsNumRuntime == 2) { runinfo->mRCode = RCODE_NFUN_FALSE; if(sRunInfo_option(runinfo, "-ignore-case")) { if(strcasecmp(SFD(nextin).mBuf, runinfo->mArgsRuntime[1]) >= 0) { runinfo->mRCode = 0; } } else { if(strcmp(SFD(nextin).mBuf, runinfo->mArgsRuntime[1]) >= 0) { runinfo->mRCode = 0; } } } return TRUE; }
BOOL cmd_condition_ge(sObject* nextin, sObject* nextout, sRunInfo* runinfo) { if(runinfo->mFilter && runinfo->mArgsNumRuntime == 2) { runinfo->mRCode = RCODE_NFUN_FALSE; if(atoi(SFD(nextin).mBuf) >= atoi(runinfo->mArgsRuntime[1])) { runinfo->mRCode = 0; } } return TRUE; }
BOOL cmd_condition_z(sObject* nextin, sObject* nextout, sRunInfo* runinfo) { if(runinfo->mFilter) { runinfo->mRCode = RCODE_NFUN_FALSE; if(SFD(nextin).mBufLen == 0) { runinfo->mRCode = 0; } } return TRUE; }
BOOL cmd_condition_e(sObject* nextin, sObject* nextout, sRunInfo* runinfo) { if(runinfo->mFilter) { runinfo->mRCode = RCODE_NFUN_FALSE; struct stat stat_; if(stat(SFD(nextin).mBuf, &stat_) == 0) { runinfo->mRCode = 0; } } return TRUE; }
void PPCXEmitter::Prologue() { // Save regs u32 regSize = 8; // 4 in 32bit system u32 stackFrameSize = 0x1F0; // Write Prologue (setup stack frame etc ...) // Save Lr MFLR(R12); // Save gpr for(int i = 14; i < 32; i ++) { STD((PPCReg)i, R1, -((33 - i) * regSize)); } // Save r12 STW(R12, R1, -0x8); #if 0 // add fpr frame ADDI(R12, R1, -0x98); // Load fpr for(int i = 14; i < 32; i ++) { SFD((PPCReg)i, R1, -((32 - i) * regSize)); } #endif // allocate stack STWU(R1, R1, -stackFrameSize); #if 1 // load fpr buff MOVI2R(R10, (u32)&_fprTmp); // Save fpr for(int i = 14; i < 32; i ++) { SFD((PPCReg)i, R10, i * regSize); } #endif }
BOOL cmd_condition_ot(sObject* nextin, sObject* nextout, sRunInfo* runinfo) { if(runinfo->mFilter && runinfo->mArgsNumRuntime == 2) { runinfo->mRCode = RCODE_NFUN_FALSE; struct stat lstat_; struct stat rstat_; if(lstat(SFD(nextin).mBuf, &lstat_) == 0) { if(lstat(runinfo->mArgsRuntime[1], &rstat_) == 0) { if(lstat_.st_mtime < rstat_.st_mtime) { runinfo->mRCode = 0; } } } } return TRUE; }
BOOL cmd_condition_k(sObject* nextin, sObject* nextout, sRunInfo* runinfo) { if(runinfo->mFilter) { runinfo->mRCode = RCODE_NFUN_FALSE; struct stat stat_; if(stat(SFD(nextin).mBuf, &stat_) == 0) { #if defined(S_ISTXT) if(stat_.st_mode & S_ISTXT) { runinfo->mRCode = 0; } #endif #if defined(S_ISVTX) if(stat_.st_mode & S_ISVTX) { runinfo->mRCode = 0; } #endif } } return TRUE; }
static ALLOC char* run_editline(char* text, int cursor_pos) { stack_start_stack(); char* buf; char* prompt; if(gPrompt) { xyzsh_set_signal(); sObject* fun = FUN_NEW_STACK(NULL); sObject* stackframe = UOBJECT_NEW_GC(8, gXyzshObject, "_stackframe", FALSE); vector_add(gStackFrames, stackframe); //uobject_init(stackframe); SFUN(fun).mLocalObjects = stackframe; sObject* nextout = FD_NEW_STACK(); int rcode; if(!run(gPrompt, gStdin, nextout, &rcode, gCurrentObject, fun)) { if(rcode == RCODE_BREAK) { fprintf(stderr, "invalid break. Not in a loop\n"); } else if(rcode & RCODE_RETURN) { fprintf(stderr, "invalid return. Not in a function\n"); } else if(rcode == RCODE_EXIT) { fprintf(stderr, "invalid exit. In the prompt\n"); } else { fprintf(stderr, "run time error\n"); fprintf(stderr, "%s", string_c_str(gErrMsg)); } } (void)vector_pop_back(gStackFrames); prompt = SFD(nextout).mBuf; } else { prompt = " > "; } char* rprompt; if(gRPrompt) { sObject* fun = FUN_NEW_STACK(NULL); sObject* stackframe = UOBJECT_NEW_GC(8, gXyzshObject, "_stackframe", FALSE); vector_add(gStackFrames, stackframe); //uobject_init(stackframe); SFUN(fun).mLocalObjects = stackframe; sObject* nextout2 = FD_NEW_STACK(); int rcode; if(!run(gRPrompt, gStdin, nextout2, &rcode, gCurrentObject, fun)) { if(rcode == RCODE_BREAK) { fprintf(stderr, "invalid break. Not in a loop\n"); } else if(rcode & RCODE_RETURN) { fprintf(stderr, "invalid return. Not in a function\n"); } else if(rcode == RCODE_EXIT) { fprintf(stderr, "invalid exit. In the prompt\n"); } else { fprintf(stderr, "run time error\n"); fprintf(stderr, "%s", string_c_str(gErrMsg)); } } (void)vector_pop_back(gStackFrames); rprompt = SFD(nextout2).mBuf; } else { rprompt = NULL; } mreset_tty(); buf = ALLOC editline(prompt, rprompt, text, cursor_pos); stack_end_stack(); return ALLOC buf; }
BOOL cmd_condition_re(sObject* nextin, sObject* nextout, sRunInfo* runinfo) { enum eKanjiCode code = gKanjiCode; if(sRunInfo_option(runinfo, "-byte")) { code = kByte; } else if(sRunInfo_option(runinfo, "-utf8")) { code = kUtf8; } else if(sRunInfo_option(runinfo, "-sjis")) { code = kSjis; } else if(sRunInfo_option(runinfo, "-eucjp")) { code = kEucjp; } BOOL verbose = sRunInfo_option(runinfo, "-verbose"); BOOL offsets = sRunInfo_option(runinfo, "-offsets"); if(runinfo->mFilter && runinfo->mArgsNumRuntime == 2) { clear_matching_info_variable(); //BOOL preserve = sRunInfo_option(runinfo, "-preserve"); runinfo->mRCode = RCODE_NFUN_FALSE; char* target = SFD(nextin).mBuf; char* regex = runinfo->mArgsRuntime[1]; regex_t* reg; int r = get_onig_regex(®, runinfo, regex); if(r == ONIG_NORMAL) { //sObject* preserved_data = STRING_NEW_STACK(); OnigRegion* region = onig_region_new(); int r2 = onig_search(reg, target , target + strlen(target) , target, target + strlen(target) , region, ONIG_OPTION_NONE); if(r2 >= 0) { if(region->beg[0] > 0) { uobject_put(gRootObject, "PREMATCH", STRING_NEW_GC3(target, region->beg[0], FALSE)); } const int size = region->end[0] - region->beg[0]; uobject_put(gRootObject, "MATCH", STRING_NEW_GC3(target + region->beg[0], size, FALSE)); uobject_put(gRootObject, "0", STRING_NEW_GC3(target + region->beg[0], size, FALSE)); const int n = strlen(target)-region->end[0]; if(n > 0) { uobject_put(gRootObject, "POSTMATCH", STRING_NEW_GC3(target + region->end[0], n, FALSE)); } int i; for (i=1; i<region->num_regs; i++) { const int size = region->end[i] - region->beg[i]; char name[16]; snprintf(name, 16, "%d", i); uobject_put(gRootObject, name, STRING_NEW_GC3(target + region->beg[i], size, FALSE)); } if(region->num_regs > 0) { const int n = region->num_regs -1; const int size = region->end[n] - region->beg[n]; uobject_put(gRootObject, "LAST_MATCH", STRING_NEW_GC3(target + region->beg[n], size, FALSE)); } char buf[128]; snprintf(buf, 128, "%d", region->num_regs); uobject_put(gRootObject, "MATCH_NUMBER", STRING_NEW_GC(buf, FALSE)); if(verbose) { int point = str_pointer2kanjipos(code, target, target + r2); char buf[1024]; int size = snprintf(buf, 1024, "%d\n", point); if(!fd_write(nextout, buf, size)) { err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine); runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; onig_region_free(region, 1); onig_free(reg); return FALSE; } } if(offsets) { int i; for (i=0; i<region->num_regs; i++) { int point = str_pointer2kanjipos(code, target, target + region->beg[i]); char buf[1024]; int size = snprintf(buf, 1024, "%d\n", point); if(!fd_write(nextout, buf, size)) { err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine); runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; onig_region_free(region, 1); onig_free(reg); return FALSE; } point = str_pointer2kanjipos(code, target, target + region->end[i]); size = snprintf(buf, 1024, "%d\n", point); if(!fd_write(nextout, buf, size)) { err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine); runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; onig_region_free(region, 1); onig_free(reg); return FALSE; } } } runinfo->mRCode = 0; } onig_region_free(region, 1); onig_free(reg); } else { onig_free(reg); err_msg("=~: invalid regex", runinfo->mSName, runinfo->mSLine); return FALSE; } } return TRUE; }