static void edit_lang(int nn) { int i1; languagerec *n; out->Cls(); bool done = false; int cp = 0; n = &(languages[nn]); out->SetColor(Scheme::NORMAL); Printf("Language name : %s\n", n->name); Printf("Data Directory : %s\n", n->dir); Printf("Menu Directory : %s\n", n->mdir); out->SetColor(Scheme::PROMPT); Puts("\n<ESC> when done.\n\n"); out->SetColor(Scheme::NORMAL); do { out->GotoXY(17, cp); switch (cp) { case 0: editline(n->name, sizeof(n->name) - 1, ALL, &i1, ""); trimstr(n->name); #ifdef WHY ss = strchr(n->name, ' '); if (ss) { *ss = 0; } #endif Puts(n->name); Puts(" "); break; case 1: editline(n->dir, 60, EDITLINE_FILENAME_CASE, &i1, ""); trimstrpath(n->dir); Puts(n->dir); break; case 2: editline(n->mdir, 60, EDITLINE_FILENAME_CASE, &i1, ""); trimstrpath(n->mdir); Puts(n->mdir); break; } cp = GetNextSelectionPosition(0, 2, cp, i1); if (i1 == DONE) { done = true; } } while (!done); }
int main() { char buff[MAXBUFF]; while (editline(buff, MAXBUFF, "Test> ")) { printf("Ligne lue: '%s'\n", buff); } return EXIT_SUCCESS; }
static void cli_interpret(int wanted) { printf("\n"); do { printf(PROMPT); (void) editline(cmdbuf, sizeof (cmdbuf)); printf("\n"); } while (cli_eval_buf(cmdbuf, wanted) != CLI_EXIT); }
/*ARGSUSED*/ static int cltest(cli_ent_t *cliptr, char *valstr, boolean_t out) { (void) ipv4_setpromiscuous(B_FALSE); printf("\n"); for (;;) { printf(TEST_PROMPT); if (editline(cmdbuf, sizeof (cmdbuf)) > 0) { printf("\n"); (void) st_interpret(cmdbuf); } else { prom_exit_to_mon(); /* NOTREACHED */ } } /* NOTREACHED */ return (CLI_CONT); }
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; }
/*ARGSUSED*/ static int clprompt(cli_ent_t *cliptr, char *valstr, boolean_t out) { char *p; int wanted = (int)(uintptr_t)valstr; /* use uintrptr_t for gcc */ /* * If processing boot arguments, simply note the fact that clprompt() * should be invoked later when other parameters may be supplied. */ if ((wanted & CLF_ARG) != 0) { args_specified_prompt = B_TRUE; return (CLI_CONT); } wanted &= ~(CLF_CMD | CLF_ARG); for (cliptr = cli_list; cliptr < &cli_list[num_cli_ent]; ++cliptr) { if ((cliptr->flags & wanted) == 0) { continue; } printf("%s", cliptr->varname); if (CLF_ISSET(cliptr)) { printf(" ["); (void) cliptr->action(cliptr, NULL, B_TRUE); printf("]"); } printf("? "); (void) editline(cmdbuf, sizeof (cmdbuf)); printf("\n"); p = cmdbuf; skipspace(p); if (*p == '\0') { /* nothing there */ continue; } /* Get valstr and nul terminate */ valstr = p; ++p; skiptext(p); *p = '\0'; /* If empty value, do nothing */ if (strlen(valstr) == 0) { continue; } switch (cliptr->action(cliptr, valstr, B_FALSE)) { case CLI_SET: CLF_MODVAL(cliptr); break; case CLI_FAIL: printf("Incorrect format, parameter unchanged!\n"); break; case CLI_EXIT: return (CLI_EXIT); case CLI_CONT: break; } } return (CLI_CONT); }