int menu(Biobuf *bp, int net) { char *cp; int done; comm->stopped = 1; rawoff(); fprint(2, ">>> "); for(done = 0; !done; ){ cp = Brdline(bp, '\n'); if(cp == 0){ comm->stopped = 0; return -1; } cp[Blinelen(bp)-1] = 0; switch(*cp){ case '!': system(Bfildes(bp), cp+1); done = 1; break; case '.': done = 1; break; case 'q': comm->stopped = 0; return -1; case 'o': switch(*(cp+1)){ case 'd': send3(net, Iac, Do, atoi(cp+2)); break; case 'w': send3(net, Iac, Will, atoi(cp+2)); break; } break; case 'r': comm->returns = !comm->returns; done = 1; break; case 'i': send2(net, Iac, Interrupt); break; case 'b': send2(net, Iac, Break); break; default: fprint(2, STDHELP); break; } if(!done) fprint(2, ">>> "); } rawon(); comm->stopped = 0; return 0; }
int main(int argc, char *argv[]) { init(); init2(); static_context_t ctx; ctx.file = (char *)__FILE__; ctx.method = (char *)__FUNCTION__; ctx.line = __LINE__; ctx.parent = 0; ctx.block = 0; static_context_t *this_context = &ctx; /* awesome hardcoding work here */ load_path = array_new(); array_push(this_context, load_path, string_new_cstr(".")); array_push(this_context, load_path, string_new_cstr("./mspec/lib")); jump_begin(JUMP_RESCUE) send3(Kernel, s_define_method, intern("load"), kernel_load, 1); send3(Kernel, s_define_method, intern("require"), kernel_require, 1); send3(Kernel, s_define_method, intern("eval"), kernel_eval, -1); Init_hash(this_context); Init_regexp(this_context); init_core(&ctx, g_main); if (argc > 1) { set_argv(this_context, argc - 2, argv + 2); kernel_load(this_context, g_main, string_new_cstr(argv[1])); } else { set_argv(this_context, 0, 0); simple_irb(this_context, g_main); } jump_rescue object_t *cls = send0(exc, s_class); printf("%s: %s\n", ((symbol_t *)((class_t *)cls)->name)->string, ((string_t *)((exception_t *)exc)->message)->bytes); array_t *array = (array_t *)((exception_t *)exc)->backtrace; int i; for (i = 0; i < array->used; i++) printf("\tfrom %s\n", ((string_t *)array->values[i])->bytes); jump_ensure jump_end exit(0); return 0; }
//------------------------------------------------------------------- void getMinus3Data(IFloat* rcv_buf, IFloat* send_buf, int len, int dir) { IFloat *tmp_buf = (IFloat *)smalloc(len*sizeof(IFloat)); int i = (dir+1)%4; int j = (dir+2)%4; int k = (dir+3)%4; //-------------------------------------------------------------- // send_buf --> rcv_buf(as a temporary buffer) //-------------------------------------------------------------- SCUDirArg send1(send_buf, pos_dir[i], SCU_SEND, len); SCUDirArg recv1(rcv_buf, neg_dir[i], SCU_REC, len); SCUTrans(&send1); SCUTrans(&recv1); SCUTransComplete(); //-------------------------------------------------------------- // rcv_buf --> tmp_buf //-------------------------------------------------------------- SCUDirArg send2(rcv_buf, pos_dir[j], SCU_SEND, len); SCUDirArg recv2(tmp_buf, neg_dir[j], SCU_REC, len); SCUTrans(&send2); SCUTrans(&recv2); SCUTransComplete(); //-------------------------------------------------------------- // tmp_buf --> rcv_buf //-------------------------------------------------------------- SCUDirArg send3(tmp_buf, pos_dir[k], SCU_SEND, len); SCUDirArg recv3(rcv_buf, neg_dir[k], SCU_REC, len); SCUTrans(&send3); SCUTrans(&recv3); SCUTransComplete(); sfree(tmp_buf); }