int main(void) { char buf[100]; int p; char c; init_terminal(); do { scanf("%c", &c); } while (c != '!'); printf("@"); while(1) { p = 0; do { scanf("%c", buf + p); p++; } while (buf[p - 1] != '^'); p--; buf[p] = 0; uint8_t n = strlen(buf); for (int i = 0; i < n / 2; i++) { char c = buf[i]; buf[i] = buf[n - i - 1]; buf[n - i - 1] = c; } printf("%s^", buf); } }
/* * Initialize variables. */ void tninit(void) { init_terminal(); init_network(); init_telnet(); init_sys(); }
static inline int kbhit(){ fd_set rfds; struct timeval tv; if (!inited){ inited=1; init_terminal(); } FD_ZERO(&rfds); FD_SET(0, &rfds); tv.tv_sec = 0; tv.tv_usec = 10*1000; return select(1, &rfds, NULL, NULL, &tv)>0; }
void init() { ENABLE_VRAM; v_cls(); IO_WRITE(5, #0); IO_WRITE(6, #46); } /******************************************************************************/ void main() { init(); init_terminal(); start_terminal(); return; }
/* * Initialize variables. */ void tninit(void) { init_terminal(); init_network(); init_telnet(); init_sys(); #ifdef TN3270 init_3270(); #endif }
/* * Initialize variables. */ void tninit() { init_terminal(); init_network(); init_telnet(); init_sys(); #if defined(TN3270) init_3270(); #endif }
void suspend_handler(int signal) { printf("\033[r\033[%d;%dH", gtd->ses->rows, 1); fflush(stdout); restore_terminal(); kill(0, SIGSTOP); dirty_screen(gtd->ses); init_terminal(); tintin_puts(NULL, "#RETURNING BACK TO TINTIN++."); }
void init() { ENABLE_VRAM; clrscr(); hidecursor(); IO_WRITE(5, #0); IO_WRITE(6, #46); } /******************************************************************************/ void main() { init(); init_terminal(); start_terminal(); return; }
int main(void) { uint32_t pol_periody; DDRB = (1 << 5); // LED on PB5 init_terminal(); printf("\n\r---\n\rZadaj polovicu periody blikania LED v microsekundach,\n\rcize cislo 0..4194304 usec.\n\rPresnost je 1/15625-tina sec, cize 64 usec: "); scanf("%lu", &pol_periody); if (pol_periody > 4194304) pol_periody = 4194304; uint16_t delay = (uint16_t)(pol_periody / 64); printf("\n\rpol periody %lu usec, cize %u pulzov casovaca\n\r", pol_periody, delay - 1); init_timer(delay); while(1); }
void kmain(void) { setup_interrupts(); init_terminal(); if((rc = init_fs()) > 0) puts("[KERNEL] FS INIT ERROR\r\n"); while(1) { puts_attrib("$", color_entry(COLOR_GREEN, COLOR_BLACK)); get_string(buffer, 30, true); if(strcmp(buffer, "ls") == 0){ print_files(); continue; } if(strcmp(buffer, "kk") == 0){ //int8_t r; //get_string(buffer, 11, false); //r = create_file(buffer, 0, strlen(msg) ); //if(r != DISK_OP_OK) // print_int(r, 10, 0); continue; } if(strcmp(buffer, "dd") == 0){ int8_t r; get_string(buffer, 11, false); r = delete_file(buffer); if(r != DISK_OP_OK){ print_int(r, 10, 0); } continue; } if(strcmp(buffer, "run") == 0) { if((rc = run_program("RAW.BIN")) != EXEC_OP_OK){ puts("Exec error c:"); print_int(rc, 10, 0); eol(); } } puts("\r\n"); } }
static inline int getch(){ fd_set rfds; if (!inited){ inited=1; init_terminal(); } FD_ZERO(&rfds); FD_SET(0, &rfds); if (select(1, &rfds, NULL, NULL, NULL)>0) return getchar(); else{ printf("wincompat.h: select() on fd 0 failed\n"); return 0xDeadBeef; } }
int main(int argc, char **argv) { struct setterm_control ctl = { 0 }; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); atexit(close_stdout); if (argc < 2) usage(stderr); parse_option(&ctl, argc, argv); init_terminal(&ctl); perform_sequence(&ctl); return EXIT_SUCCESS; }
int main(int argc, char **argv) { struct setterm_control ctl = { NULL }; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); atexit(close_stdout); if (argc < 2) { warnx(_("bad usage")); errtryhelp(EXIT_FAILURE); } parse_option(&ctl, argc, argv); init_terminal(&ctl); perform_sequence(&ctl); return EXIT_SUCCESS; }
/* * Main file of myselect * Links everything together, and executes the program * * Precondition: argc > 1 * Postcondition: The elements are printed on the screen */ int main(int argc, char** argv) { int count; int bytes; char input[READMIN + 2]; if(argc < 2 || !my_strpos(argv[1], '*')) { my_str("No files found!\n"); exit(1); } signal(SIGWINCH, show_elems); //Get all the termcaps init_caps(); //Prepare the terminal init_terminal(); //Setup the elements setup_elems(argc - 1, &argv[1]); //Turn off the cursor tputs(gl_env.cursoroff, 0, my_termprint); //Print the elements for the first time show_elems(); //Main loop while(1) { bytes = read(0, &input, READMIN + 2); input[bytes] = '\0'; if(!gl_env.flag) { check_char(input); } } return 0; }
int main(int ac, char **av, char **envp) { t_var *var; (void)ac; (void)av; var = get_instance(); init_function(var, envp); init_terminal(var); sig_catcher(); while (18) { ft_putstr_fd("$>", var->conf->wfd); set_str_cap("sc"); terminal_input_mode(var->conf); read_key(var); terminal_execute_mode(var->conf); proceed_to_execution(var); } ft_strdel(&(var->line.cpy)); return (0); }
int main(void) { init_terminal(); printf("display8x8..."); wait(1000); init_8x8(); printf("initialized..."); while(1) { for (int i = 1 ; i <= 8; i++) { for (int j = 0; j < 8; j++) { set_8x8_segment(i, 1 << j); printf("%d ", i * 8 - 7 + j); wait(100); } set_8x8_segment(i, 0); } } }
int main(int argc, char** argv){ int data; char input[READMIN + 2]; if(argc < 2){ my_str("Usage: ./myselect itemSelector\n"); exit(1); } if(my_strpos(argv[1], '*') == 0){ my_str("No files were found\n"); exit(1); } signal(SIGWINCH, show_elems); init_caps(); //Get the termcaps init_terminal(); //initilize the terminal setup_elems(argc - 1, &argv[1]); //Setup elems tputs(gl_env.cursoroff, 0, my_termprint); //Turn off cursor show_elems(); //actually show the elements while(1){ data = read(0, &input, READMIN + 2); input[data] = '\0'; if(!gl_env.flag){ check_char(input); } } return 0; }
int main(int argc, char *argv[]) { init_signals(); if(init_terminal(&hContext,&hCard)) return -1; else { if(open_tunnel(&tunnel) !=-1) { int output_len; raw_packet packet; short sw = 0x9000 ; printf("SCARD host adapter is now ready to accept connections\n"); /* main loop */ while((output_len = utun_read(&tunnel, packet.raw, MTU)) >= 0) { LONG card_status = 0; int select_ret; BYTE *packet_ptr; if(output_len == 0) continue; select_ret = utun_select(&tunnel); /* send the last tun input to the card */ printf("send %d bytes\n",output_len); packet_ptr = packet.raw; do { unsigned char curr_len = output_len > 255 ? 255 : output_len; sw = send_apdu(hContext,hCard,packet_ptr,curr_len,&card_status,select_ret); if(SW1(sw) < 0x90) { printf("Error: %02x%02x\n",SW1(sw),SW2(sw)); break; } packet_ptr += curr_len; output_len -= curr_len; } while(output_len > 0); /* if there is something else to send, do it now */ if(select_ret>0) { memset(&packet,0,sizeof(raw_packet)); continue; } /* receive data from the card (and forward it to the tun) if needed */ while(SW2(sw)) { sw = recv_apdu(hContext,hCard,&tunnel,sw,&card_status); if(SW1(sw) < 0x90 ) { printf("Error: %02x%02x\n",SW1(sw),SW2(sw)); break; } } if(card_status) { check_terminal_status(hContext,hCard); } memset(&packet,0,sizeof(raw_packet)); } } } close_tunnel(&tunnel); release_terminal(&hContext,&hCard); return 0; }
void init_tintin(int greeting) { int ref, index; gts = (struct session *) calloc(1, sizeof(struct session)); for (index = 0 ; index < LIST_MAX ; index++) { gts->list[index] = init_list(gts, index, 32); } gts->name = strdup("gts"); gts->group = strdup(""); gts->host = strdup(""); gts->port = strdup(""); gts->cmd_color = strdup(""); gts->telopts = TELOPT_FLAG_ECHO; gts->flags = SES_FLAG_MCCP; gts->socket = 1; gts->read_max = 16384; gtd = (struct tintin_data *) calloc(1, sizeof(struct tintin_data)); gtd->ses = gts; gtd->str_size = sizeof(struct str_data); gtd->str_hash_size = sizeof(struct str_hash_data); gtd->mccp_len = 4096; gtd->mccp_buf = (unsigned char *) calloc(1, gtd->mccp_len); gtd->mud_output_max = 16384; gtd->mud_output_buf = (char *) calloc(1, gtd->mud_output_max); gtd->input_off = 1; gtd->term = strdup(getenv("TERM") ? getenv("TERM") : "UNKNOWN"); for (index = 0 ; index < 100 ; index++) { gtd->vars[index] = strdup(""); gtd->cmds[index] = strdup(""); } for (ref = 0 ; ref < 26 ; ref++) { for (index = 0 ; *command_table[index].name != 0 ; index++) { if (*command_table[index].name == 'a' + ref) { gtd->command_ref[ref] = index; break; } } } init_screen_size(gts); printf("\033="); // set application keypad mode gts->input_level++; do_configure(gts, "{AUTO TAB} {5000}"); do_configure(gts, "{BUFFER SIZE} {20000}"); do_configure(gts, "{COLOR PATCH} {OFF}"); do_configure(gts, "{COMMAND COLOR} {<078>}"); do_configure(gts, "{COMMAND ECHO} {ON}"); do_configure(gts, "{CONNECT RETRY} {15}"); do_configure(gts, "{CHARSET} {ASCII}"); do_configure(gts, "{HISTORY SIZE} {1000}"); do_configure(gts, "{LOG} {RAW}"); do_configure(gts, "{PACKET PATCH} {0.00}"); do_configure(gts, "{REPEAT CHAR} {!}"); do_configure(gts, "{REPEAT ENTER} {OFF}"); do_configure(gts, "{SCROLL LOCK} {ON}"); do_configure(gts, "{SPEEDWALK} {OFF}"); do_configure(gts, "{TINTIN CHAR} {#}"); do_configure(gts, "{VERBATIM} {OFF}"); do_configure(gts, "{VERBATIM CHAR} {\\}"); do_configure(gts, "{VERBOSE} {OFF}"); do_configure(gts, "{WORDWRAP} {ON}"); do_configure(gts, "{256 COLORS} {AUTO}"); gts->input_level--; insert_node_list(gts->list[LIST_PATHDIR], "n", "s", "1"); insert_node_list(gts->list[LIST_PATHDIR], "e", "w", "2"); insert_node_list(gts->list[LIST_PATHDIR], "s", "n", "4"); insert_node_list(gts->list[LIST_PATHDIR], "w", "e", "8"); insert_node_list(gts->list[LIST_PATHDIR], "u", "d", "16"); insert_node_list(gts->list[LIST_PATHDIR], "d", "u", "32"); insert_node_list(gts->list[LIST_PATHDIR], "ne", "sw", "3"); insert_node_list(gts->list[LIST_PATHDIR], "nw", "se", "9"); insert_node_list(gts->list[LIST_PATHDIR], "se", "nw", "6"); insert_node_list(gts->list[LIST_PATHDIR], "sw", "ne", "12"); init_terminal(); if (greeting) { do_advertise(gts, ""); do_help(gts, "GREETING"); } }
/* Read history and completion word lists */ void init_rlwrap() { char *homedir, *histdir, *homedir_prefix, *hostname; time_t now; /* open debug file if necessary */ if (debug) { debug_fp = fopen(DEBUG_FILENAME, "w"); if (!debug_fp) myerror("Couldn't open debug file %s", DEBUG_FILENAME); setbuf(debug_fp, NULL); /* always write debug messages to disk at once */ } hostname = getenv("HOSTNAME") ? getenv("HOSTNAME") : "?"; now = time(NULL); DPRINTF0(DEBUG_ALL, "-*- mode: grep -*-"); DPRINTF3(DEBUG_ALL, "rlwrap version %s, host: %s, time: %s", VERSION, hostname, ctime(&now)); init_terminal(); /* Determine rlwrap home dir and prefix for default history and completion filenames */ homedir = (getenv("RLWRAP_HOME") ? getenv("RLWRAP_HOME") : getenv("HOME")); homedir_prefix = (getenv("RLWRAP_HOME") ? /* is RLWRAP_HOME set? */ add2strings(getenv("RLWRAP_HOME"), "/") : /* use $RLWRAP_HOME/<command>_history */ add2strings(getenv("HOME"), "/.")); /* if not, use ~/.<command>_history */ /* Determine history file name and check its existence and permissions */ if (history_filename) { histdir = mydirname(history_filename); } else { histdir = homedir; history_filename = add3strings(homedir_prefix, command_name, "_history"); } if (write_histfile) { if (access(history_filename, F_OK) == 0) { /* already exists, can we read/write it? */ if (access(history_filename, R_OK | W_OK) != 0) { myerror("cannot read and write %s", history_filename); } } else { /* doesn't exist, can we create it? */ if(access(histdir, W_OK) != 0) { if (errno == ENOENT) { mode_t oldmask = umask(0); if (mkdir(histdir, 0700)) /* rwx------ */ myerror("cannot create directory %s", histdir); umask(oldmask); } else { myerror("cannot create history file in %s", histdir); } } } } else { /* ! write_histfile */ if (access(history_filename, R_OK) != 0) { myerror("cannot read %s", history_filename); } } /* Initialize history */ using_history(); stifle_history(histsize); read_history(history_filename); /* ignore errors here: history file may not yet exist, but will be created on exit */ if (feed_history_into_completion_list) feed_file_into_completion_list(history_filename); /* Determine completion file name (completion files are never written to, and ignored when unreadable or non-existent) */ completion_filename = add3strings(homedir_prefix, command_name, "_completions"); default_completion_filename = add3strings(DATADIR, "/rlwrap/completions/", command_name); rl_readline_name = command_name; /* Initialise completion list (if <completion_filename> is readable) */ if (access(completion_filename, R_OK) == 0) { feed_file_into_completion_list(completion_filename); } else if (access(default_completion_filename, R_OK) == 0) { feed_file_into_completion_list(default_completion_filename); } }
int main(int argc, char ** argv) { char *mxf_file = NULL; char browse_file[FILENAME_MAX]; char browse_timecode_file[FILENAME_MAX]; char pse_file[FILENAME_MAX]; int num_frames = 75; int n; for (n = 1; n < argc; n++) { if (strcmp(argv[n], "-t") == 0) { term = true; } else if (strcmp(argv[n], "-h") == 0) { usage_exit(); } else if (strcmp(argv[n], "-f") == 0) { if (sscanf(argv[n+1], "%u", &num_frames) != 1) usage_exit(); n++; } else { if (!mxf_file) { mxf_file = argv[n]; continue; } } } if (mxf_file == NULL) usage_exit(); // setup file paths strcpy(browse_file, mxf_file); strcat(browse_file, ".mpg"); strcpy(browse_timecode_file, mxf_file); strcat(browse_timecode_file, ".tc"); strcpy(pse_file, mxf_file); strcat(pse_file, ".html"); openLogFile("log_test_capture.log"); Capture capture; capture.inc_loglev(); capture.init_capture(125); capture.set_debug_store_thread_buffer(true); if (term) { init_terminal(); attron(A_BOLD); mvprintw(0,0,"Uncompressed SDI record to MXF"); attroff(A_BOLD); attron(A_BOLD); mvprintw(4,0,"INPUT"); attroff(A_BOLD); refresh(); } pthread_t status_thread_id; thread_arg_t status_args = {&capture}; int err; if ((err = pthread_create(&status_thread_id, NULL, status_thread, &status_args)) != 0) { fprintf(stderr, "Failed to create status thread: %s\n", strerror(err)); exit(1); } const char infax_data_string[] = "D3|D3 preservation programme||2006-02-02||LME1306H|71|T|2006-01-01|PROGRAMME BACKING COPY|Bla bla bla|1732|DGN377505|DC193783|LONPROG|1"; InfaxData infax_data; parse_infax_data(infax_data_string, &infax_data, 1); if (term) { while (1) { int psePassed; int c = getch(); MT_mvprintw(15,0," "); switch (c) { case 'q': case 'Q': case 27: // ESC also quit endwin(); exit(0); break; case 's': case 'S': // start record if (capture.start_record(mxf_file, browse_file, browse_timecode_file, pse_file)) { MT_mvprintw(7,0,"start_record: Success "); } else { MT_mvprintw(7,0,"start_record: Failed "); } break; case 't': case 'T': // stop record if (capture.stop_record(-1, &infax_data, NULL, 0, &psePassed)) { MT_mvprintw(7,0,"stop_record: Success "); } else { MT_mvprintw(7,0,"stop_record: Failed "); } break; default: MT_mvprintw(15,0,"Unknown command key (code=%d)", c); break; } } } // non-term mode // Wait for good video GeneralStats gen; do { capture.get_general_stats(&gen); usleep(500 * 1000); } while (! gen.video_ok); // Start record if (capture.start_record(mxf_file, browse_file, browse_timecode_file, pse_file)) { printf("start_record succeeded\n"); } else { printf("start_record failed\n"); exit(1); } printf("Sleeping for %.2f seconds\n", (num_frames * 40 * 1000) / 1000000.0); usleep(num_frames * 40 * 1000); // sleep for specified number of frames int psePassed; if (capture.stop_record(-1, &infax_data, NULL, 0, &psePassed)) { printf("stop_record succeeded\n"); } else { printf("stop_record failed\n"); exit(1); } }
int main(int argc_orig, char **argv) #endif { int i; /* We want the current value of argc to persist across a LONGJMP from int_error(). * Without this the compiler may put it on the stack, which LONGJMP clobbers. * Here we try make it a volatile variable that optimization will not affect. * Why do we not have to do the same for argv? I don't know. * But the test cases that broke with generic argc seem fine with generic argv. */ static volatile int argc; argc = argc_orig; #ifdef LINUXVGA LINUX_setup(); /* setup VGA before dropping privilege DBT 4/5/99 */ drop_privilege(); #endif /* make sure that we really have revoked root access, this might happen if gnuplot is compiled without vga support but is installed suid by mistake */ #ifdef __linux__ if (setuid(getuid()) != 0) { fprintf(stderr,"gnuplot: refusing to run at elevated privilege\n"); exit(EXIT_FAILURE); } #endif /* HBB: Seems this isn't needed any more for DJGPP V2? */ /* HBB: disable all floating point exceptions, just keep running... */ #if defined(DJGPP) && (DJGPP!=2) _control87(MCW_EM, MCW_EM); #endif #if defined(OS2) { int rc; #ifdef OS2_IPC char semInputReadyName[40]; sprintf(semInputReadyName, "\\SEM32\\GP%i_Input_Ready", getpid()); rc = DosCreateEventSem(semInputReadyName, &semInputReady, 0, 0); if (rc != 0) fputs("DosCreateEventSem error\n", stderr); #endif rc = RexxRegisterSubcomExe("GNUPLOT", (PFN) RexxInterface, NULL); } #endif /* malloc large blocks, otherwise problems with fragmented mem */ #ifdef MALLOCDEBUG malloc_debug(7); #endif /* init progpath and get helpfile from executable directory */ #if defined(MSDOS) || defined(OS2) { char *s; #ifdef __EMX__ _execname(progpath, sizeof(progpath)); #else safe_strncpy(progpath, argv[0], sizeof(progpath)); #endif /* convert '/' to '\\' */ for (s = progpath; *s != NUL; s++) if (*s == DIRSEP2) *s = DIRSEP1; /* cut program name */ s = strrchr(progpath, DIRSEP1); if (s != NULL) s++; else s = progpath; *s = NUL; /* init HelpFile */ strcpy(HelpFile, progpath); strcat(HelpFile, "gnuplot.gih"); /* remove trailing "bin/" from progpath */ if ((s != NULL) && (s - progpath >= 4)) { s -= 4; if (strncasecmp(s, "bin", 3) == 0) *s = NUL; } } #endif /* DJGPP */ #if (defined(PIPE_IPC) || defined(_WIN32)) && (defined(HAVE_LIBREADLINE) || (defined(HAVE_LIBEDITLINE) && defined(X11))) /* Editline needs this to be set before the very first call to readline(). */ /* Support for rl_getc_function is broken for utf-8 in editline. Since it is only really required for X11, disable this section when building without X11. */ rl_getc_function = getc_wrapper; #endif #if defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE) /* T.Walter 1999-06-24: 'rl_readline_name' must be this fix name. * It is used to parse a 'gnuplot' specific section in '~/.inputrc' * or gnuplot specific commands in '.editrc' (when using editline * instead of readline) */ rl_readline_name = "Gnuplot"; rl_terminal_name = getenv("TERM"); #if defined(HAVE_LIBREADLINE) using_history(); #else history_init(); #endif #endif #if defined(HAVE_LIBREADLINE) && !defined(MISSING_RL_TILDE_EXPANSION) rl_complete_with_tilde_expansion = 1; #endif for (i = 1; i < argc; i++) { if (!argv[i]) continue; if (!strcmp(argv[i], "-V") || !strcmp(argv[i], "--version")) { printf("gnuplot %s patchlevel %s\n", gnuplot_version, gnuplot_patchlevel); return 0; } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { printf( "Usage: gnuplot [OPTION] ... [FILE]\n" #ifdef X11 "for X11 options see 'help X11->command-line-options'\n" #endif " -V, --version\n" " -h, --help\n" " -p --persist\n" " -s --slow\n" " -d --default-settings\n" " -c scriptfile ARG1 ARG2 ... \n" " -e \"command1; command2; ...\"\n" "gnuplot %s patchlevel %s\n", gnuplot_version, gnuplot_patchlevel); #ifdef DEVELOPMENT_VERSION printf( #ifdef DIST_CONTACT "Report bugs to "DIST_CONTACT"\n" " or %s\n", #else "Report bugs to %s\n", #endif bug_email); #endif return 0; } else if (!strncmp(argv[i], "-persist", 2) || !strcmp(argv[i], "--persist") #ifdef _WIN32 || !stricmp(argv[i], "-noend") || !stricmp(argv[i], "/noend") #endif ) { persist_cl = TRUE; } else if (!strncmp(argv[i], "-slow", 2) || !strcmp(argv[i], "--slow")) { slow_font_startup = TRUE; } else if (!strncmp(argv[i], "-d", 2) || !strcmp(argv[i], "--default-settings")) { /* Skip local customization read from ~/.gnuplot */ skip_gnuplotrc = TRUE; } } #ifdef X11 /* the X11 terminal removes tokens that it recognizes from argv. */ { int n = X11_args(argc, argv); argv += n; argc -= n; } #endif setbuf(stderr, (char *) NULL); #ifdef HAVE_SETVBUF /* This was once setlinebuf(). Docs say this is * identical to setvbuf(,NULL,_IOLBF,0), but MS C * faults this (size out of range), so we try with * size of 1024 instead. [SAS/C does that, too. -lh] */ if (setvbuf(stdout, (char *) NULL, _IOLBF, (size_t) 1024) != 0) (void) fputs("Could not linebuffer stdout\n", stderr); /* Switching to unbuffered mode causes all characters in the input * buffer to be lost. So the only safe time to do it is on program entry. * Do any non-X platforms suffer from this problem? * EAM - Jan 2013 YES. */ setvbuf(stdin, (char *) NULL, _IONBF, 0); #endif gpoutfile = stdout; /* Initialize pre-loaded user variables */ /* "pi" is hard-wired as the first variable */ (void) add_udv_by_name("GNUTERM"); (void) add_udv_by_name("NaN"); init_constants(); udv_user_head = &(udv_NaN->next_udv); init_memory(); interactive = FALSE; /* April 2017: We used to call init_terminal() here, but now */ /* We defer initialization until error handling has been set up. */ # if defined(_WIN32) && !defined(WGP_CONSOLE) interactive = TRUE; # else interactive = isatty(fileno(stdin)); # endif /* Note: we want to know whether this is an interactive session so that we can * decide whether or not to write status information to stderr. The old test * for this was to see if (argc > 1) but the addition of optional command line * switches broke this. What we really wanted to know was whether any of the * command line arguments are file names or an explicit in-line "-e command". */ for (i = 1; i < argc; i++) { # ifdef _WIN32 if (!stricmp(argv[i], "/noend")) continue; # endif if ((argv[i][0] != '-') || (argv[i][1] == 'e') || (argv[i][1] == 'c') ) { interactive = FALSE; break; } } /* Need this before show_version is called for the first time */ if (interactive) show_version(stderr); else show_version(NULL); /* Only load GPVAL_COMPILE_OPTIONS */ update_gpval_variables(3); /* update GPVAL_ variables available to user */ #ifdef VMS /* initialise screen management routines for command recall */ { unsigned int ierror; if (ierror = smg$create_virtual_keyboard(&vms_vkid) != SS$_NORMAL) done(ierror); if (ierror = smg$create_key_table(&vms_ktid) != SS$_NORMAL) done(ierror); } #endif /* VMS */ if (!SETJMP(command_line_env, 1)) { /* first time */ interrupt_setup(); get_user_env(); init_loadpath(); init_locale(); memset(&sm_palette, 0, sizeof(sm_palette)); init_fit(); /* Initialization of fitting module */ #ifdef READLINE /* When using the built-in readline, we set the initial encoding according to the locale as this is required to properly handle keyboard input. */ init_encoding(); #endif init_gadgets(); /* April 2017: Now that error handling is in place, it is safe parse * GNUTERM during terminal initialization. * atexit processing is done in reverse order. We want * the generic terminal shutdown in term_reset to be executed before * any terminal specific cleanup requested by individual terminals. */ init_terminal(); push_terminal(0); /* remember the initial terminal */ gp_atexit(term_reset); /* Execute commands in ~/.gnuplot */ init_session(); if (interactive && term != 0) { /* not unknown */ #ifdef GNUPLOT_HISTORY #if (defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE)) && !defined(_WIN32) expanded_history_filename = tilde_expand(GNUPLOT_HISTORY_FILE); #else expanded_history_filename = gp_strdup(GNUPLOT_HISTORY_FILE); gp_expand_tilde(&expanded_history_filename); #endif read_history(expanded_history_filename); /* * It is safe to ignore the return values of 'atexit()' and * 'on_exit()'. In the worst case, there is no history of your * currrent session and you have to type all again in your next * session. */ gp_atexit(wrapper_for_write_history); #endif /* GNUPLOT_HISTORY */ #if defined(READLINE) && defined(WGP_CONSOLE) fprintf(stderr, "Encoding set to '%s'.\n", encoding_names[encoding]); #endif } /* if (interactive && term != 0) */ } else { /* come back here from int_error() */ if (!successful_initialization) { /* Only print the warning once */ successful_initialization = TRUE; fprintf(stderr,"WARNING: Error during initialization\n\n"); } if (interactive == FALSE) exit_status = EXIT_FAILURE; #ifdef HAVE_READLINE_RESET else { /* reset properly readline after a SIGINT+longjmp */ rl_reset_after_signal (); } #endif load_file_error(); /* if we were in load_file(), cleanup */ SET_CURSOR_ARROW; #ifdef VMS /* after catching interrupt */ /* VAX stuffs up stdout on SIGINT while writing to stdout, so reopen stdout. */ if (gpoutfile == stdout) { if ((stdout = freopen("SYS$OUTPUT", "w", stdout)) == NULL) { /* couldn't reopen it so try opening it instead */ if ((stdout = fopen("SYS$OUTPUT", "w")) == NULL) { /* don't use int_error here - causes infinite loop! */ fputs("Error opening SYS$OUTPUT as stdout\n", stderr); } } gpoutfile = stdout; } #endif /* VMS */ /* Why a goto? Because we exited the loop below via int_error */ /* using LONGJMP. The compiler was not expecting this, and */ /* "optimized" the handling of argc and argv such that simply */ /* entering the loop again from the top finds them messed up. */ /* If we reenter the loop via a goto then there is some hope */ /* that code reordering does not hurt us. */ if (reading_from_dash && interactive) goto RECOVER_FROM_ERROR_IN_DASH; reading_from_dash = FALSE; if (!interactive && !noinputfiles) { term_reset(); gp_exit(EXIT_FAILURE); /* exit on non-interactive error */ } } /* load filenames given as arguments */ while (--argc > 0) { ++argv; c_token = 0; if (!strncmp(*argv, "-persist", 2) || !strcmp(*argv, "--persist") #ifdef _WIN32 || !stricmp(*argv, "-noend") || !stricmp(*argv, "/noend") #endif ) { FPRINTF((stderr,"'persist' command line option recognized\n")); } else if (strcmp(*argv, "-") == 0) { #if defined(_WIN32) && !defined(WGP_CONSOLE) TextShow(&textwin); interactive = TRUE; #else interactive = isatty(fileno(stdin)); #endif RECOVER_FROM_ERROR_IN_DASH: reading_from_dash = TRUE; while (!com_line()); reading_from_dash = FALSE; interactive = FALSE; noinputfiles = FALSE; } else if (strcmp(*argv, "-e") == 0) { int save_state = interactive; --argc; ++argv; if (argc <= 0) { fprintf(stderr, "syntax: gnuplot -e \"commands\"\n"); return 0; } interactive = FALSE; noinputfiles = FALSE; do_string(*argv); interactive = save_state; } else if (!strncmp(*argv, "-slow", 2) || !strcmp(*argv, "--slow")) { slow_font_startup = TRUE; } else if (!strncmp(*argv, "-d", 2) || !strcmp(*argv, "--default-settings")) { /* Ignore this; it already had its effect */ FPRINTF((stderr, "ignoring -d\n")); } else if (strcmp(*argv, "-c") == 0) { /* Pass command line arguments to the gnuplot script in the next * argument. This consumes the remainder of the command line */ interactive = FALSE; noinputfiles = FALSE; --argc; ++argv; if (argc <= 0) { fprintf(stderr, "syntax: gnuplot -c scriptname args\n"); gp_exit(EXIT_FAILURE); } call_argc = GPMIN(9, argc - 1); for (i=0; i<=call_argc; i++) { /* Need to stash argv[i] somewhere visible to load_file() */ call_args[i] = gp_strdup(argv[i+1]); } load_file(loadpath_fopen(*argv, "r"), gp_strdup(*argv), 5); gp_exit(EXIT_SUCCESS); } else if (*argv[0] == '-') { fprintf(stderr, "unrecognized option %s\n", *argv); } else { interactive = FALSE; noinputfiles = FALSE; load_file(loadpath_fopen(*argv, "r"), gp_strdup(*argv), 4); } } /* take commands from stdin */ if (noinputfiles) { while (!com_line()) ctrlc_flag = FALSE; /* reset asynchronous Ctrl-C flag */ } #ifdef _WIN32 /* On Windows, handle 'persist' by keeping the main input loop running (windows/wxt), */ /* but only if there are any windows open. Note that qt handles this properly. */ if (persist_cl) { if (WinAnyWindowOpen()) { #ifdef WGP_CONSOLE if (!interactive) { /* no further input from pipe */ while (WinAnyWindowOpen()) win_sleep(100); } else #endif { interactive = TRUE; while (!com_line()) ctrlc_flag = FALSE; /* reset asynchronous Ctrl-C flag */ interactive = FALSE; } } } #endif #if (defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE)) && defined(GNUPLOT_HISTORY) #if !defined(HAVE_ATEXIT) && !defined(HAVE_ON_EXIT) /* You should be here if you neither have 'atexit()' nor 'on_exit()' */ wrapper_for_write_history(); #endif /* !HAVE_ATEXIT && !HAVE_ON_EXIT */ #endif /* (HAVE_LIBREADLINE || HAVE_LIBEDITLINE) && GNUPLOT_HISTORY */ #ifdef OS2 RexxDeregisterSubcom("GNUPLOT", NULL); #endif /* HBB 20040223: Not all compilers like exit() to end main() */ /* exit(exit_status); */ #if ! defined(_WIN32) /* Windows does the cleanup later */ gp_exit_cleanup(); #endif return exit_status; }
int main(int argc, char **argv) #endif { int i; #ifdef LINUXVGA LINUX_setup(); /* setup VGA before dropping privilege DBT 4/5/99 */ drop_privilege(); #endif /* make sure that we really have revoked root access, this might happen if gnuplot is compiled without vga support but is installed suid by mistake */ #ifdef __linux__ setuid(getuid()); #endif #if defined(MSDOS) && !defined(_Windows) && !defined(__GNUC__) PC_setup(); #endif /* MSDOS !Windows */ /* HBB: Seems this isn't needed any more for DJGPP V2? */ /* HBB: disable all floating point exceptions, just keep running... */ #if defined(DJGPP) && (DJGPP!=2) _control87(MCW_EM, MCW_EM); #endif #if defined(OS2) int rc; #ifdef OS2_IPC char semInputReadyName[40]; sprintf( semInputReadyName, "\\SEM32\\GP%i_Input_Ready", getpid() ); rc = DosCreateEventSem(semInputReadyName,&semInputReady,0,0); if (rc != 0) fputs("DosCreateEventSem error\n",stderr); #endif rc = RexxRegisterSubcomExe("GNUPLOT", (PFN) RexxInterface, NULL); #endif /* malloc large blocks, otherwise problems with fragmented mem */ #ifdef MALLOCDEBUG malloc_debug(7); #endif /* get helpfile from home directory */ #ifdef __DJGPP__ { char *s; strcpy(HelpFile, argv[0]); for (s = HelpFile; *s; s++) if (*s == DIRSEP1) *s = DIRSEP2; /* '\\' to '/' */ strcpy(strrchr(HelpFile, DIRSEP2), "/gnuplot.gih"); } /* Add also some "paranoid" tests for '\\': AP */ #endif /* DJGPP */ #ifdef VMS unsigned int status[2] = { 1, 0 }; #endif #if defined(HAVE_LIBEDITLINE) rl_getc_function = getc_wrapper; #endif #if defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE) /* T.Walter 1999-06-24: 'rl_readline_name' must be this fix name. * It is used to parse a 'gnuplot' specific section in '~/.inputrc' * or gnuplot specific commands in '.editrc' (when using editline * instead of readline) */ rl_readline_name = "Gnuplot"; rl_terminal_name = getenv("TERM"); using_history(); #endif #if defined(HAVE_LIBREADLINE) && !defined(MISSING_RL_TILDE_EXPANSION) rl_complete_with_tilde_expansion = 1; #endif for (i = 1; i < argc; i++) { if (!argv[i]) continue; if (!strcmp(argv[i], "-V") || !strcmp(argv[i], "--version")) { printf("gnuplot %s patchlevel %s\n", gnuplot_version, gnuplot_patchlevel); return 0; } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { printf( "Usage: gnuplot [OPTION]... [FILE]\n" #ifdef X11 "for X11 options see 'help X11->command-line-options'\n" #endif " -V, --version\n" " -h, --help\n" " -p --persist\n" " -e \"command1; command2; ...\"\n" "gnuplot %s patchlevel %s\n" #ifdef DIST_CONTACT "Report bugs to "DIST_CONTACT"\n" " or %s\n", #else "Report bugs to %s\n", #endif gnuplot_version, gnuplot_patchlevel, bug_email); return 0; } else if (!strncmp(argv[i], "-persist", 2) || !strcmp(argv[i], "--persist")) { persist_cl = TRUE; } } #ifdef X11 /* the X11 terminal removes tokens that it recognizes from argv. */ { int n = X11_args(argc, argv); argv += n; argc -= n; } #endif setbuf(stderr, (char *) NULL); #ifdef HAVE_SETVBUF /* this was once setlinebuf(). Docs say this is * identical to setvbuf(,NULL,_IOLBF,0), but MS C * faults this (size out of range), so we try with * size of 1024 instead. [SAS/C does that, too. -lh] * Failing this, I propose we just make the call and * ignore the return : its probably not a big deal */ if (setvbuf(stdout, (char *) NULL, _IOLBF, (size_t) 1024) != 0) (void) fputs("Could not linebuffer stdout\n", stderr); #ifdef X11 /* This call used to be in x11.trm, with the following comment: * Multi-character inputs like escape sequences but also mouse-pasted * text got buffered and therefore didn't trigger the select() function * in X11_waitforinput(). Switching to unbuffered input solved this. * 23 Jan 2002 (joze) * But switching to unbuffered mode causes all characters in the input * buffer to be lost. So the only safe time to do it is on program entry. * The #ifdef X11 is probably unnecessary, but makes the change minimal. * Do any non-X platforms suffer from the same problem? * EAM - Jan 2004. */ setvbuf(stdin, (char *) NULL, _IONBF, 0); #endif #endif gpoutfile = stdout; /* Initialize pre-loaded user variables */ (void) Gcomplex(&udv_pi.udv_value, M_PI, 0.0); udv_NaN = add_udv_by_name("NaN"); (void) Gcomplex(&(udv_NaN->udv_value), not_a_number(), 0.0); udv_NaN->udv_undef = FALSE; init_memory(); interactive = FALSE; init_terminal(); /* can set term type if it likes */ push_terminal(0); /* remember the default terminal */ /* reset the terminal when exiting */ /* this is done through gp_atexit so that other terminal functions * can be registered to be executed before the terminal is reset. */ GP_ATEXIT(term_reset); # if defined(_Windows) && ! defined(WGP_CONSOLE) interactive = TRUE; # else interactive = isatty(fileno(stdin)); # endif if (argc > 1) interactive = noinputfiles = FALSE; else noinputfiles = TRUE; /* Need this before show_version is called for the first time */ #ifdef HAVE_SYS_UTSNAME_H { struct utsname uts; /* something is fundamentally wrong if this fails ... */ if (uname(&uts) > -1) { # ifdef _AIX strcpy(os_name, uts.sysname); sprintf(os_name, "%s.%s", uts.version, uts.release); # elif defined(SCO) strcpy(os_name, "SCO"); strcpy(os_rel, uts.release); # elif defined(DJGPP) if (!strncmp(uts.sysname, "??Un", 4)) /* don't print ??Unknow" */ strcpy(os_name, "Unknown"); else { strcpy(os_name, uts.sysname); strcpy(os_rel, uts.release); } # else strcpy(os_name, uts.sysname); strcpy(os_rel, uts.release); # ifdef OS2 if (!strchr(os_rel,'.')) /* write either "2.40" or "4.0", or empty -- don't print "OS/2 1" */ strcpy(os_rel, ""); # endif # endif } } #else /* ! HAVE_SYS_UTSNAME_H */ strcpy(os_name, OS); strcpy(os_rel, ""); #endif /* HAVE_SYS_UTSNAME_H */ if (interactive) show_version(stderr); else show_version(NULL); /* Only load GPVAL_COMPILE_OPTIONS */ #ifdef WGP_CONSOLE #ifdef CONSOLE_SWITCH_CP if (cp_changed && interactive) { fprintf(stderr, "\ngnuplot changed the codepage of this console from %i to %i to\n" \ "match the graph window. Some characters might only display correctly\n" \ "if you change the font to a non-raster type.\n", cp_input, GetConsoleCP()); } #else if ((GetConsoleCP() != GetACP()) && interactive) { fprintf(stderr, "\nWarning: The codepage of the graph window (%i) and that of the\n" \ "console (%i) differ. Use `set encoding` or `!chcp` if extended\n" \ "characters don't display correctly.\n", GetACP(), GetConsoleCP()); } #endif #endif update_gpval_variables(3); /* update GPVAL_ variables available to user */ #ifdef VMS /* initialise screen management routines for command recall */ if (status[1] = smg$create_virtual_keyboard(&vms_vkid) != SS$_NORMAL) done(status[1]); if (status[1] = smg$create_key_table(&vms_ktid) != SS$_NORMAL) done(status[1]); #endif /* VMS */ if (!SETJMP(command_line_env, 1)) { /* first time */ interrupt_setup(); /* should move this stuff another initialisation routine, * something like init_set() maybe */ get_user_env(); init_loadpath(); init_locale(); /* HBB: make sure all variables start in the same mode 'reset' * would set them to. Since the axis variables aren't in * initialized arrays any more, this is now necessary... */ reset_command(); init_color(); /* Initialization of color */ load_rcfile(); init_fit(); /* Initialization of fitting module */ if (interactive && term != 0) { /* not unknown */ #ifdef GNUPLOT_HISTORY FPRINTF((stderr, "Before read_history\n")); #if defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE) expanded_history_filename = tilde_expand(GNUPLOT_HISTORY_FILE); #else expanded_history_filename = gp_strdup(GNUPLOT_HISTORY_FILE); gp_expand_tilde(&expanded_history_filename); #endif FPRINTF((stderr, "expanded_history_filename = %s\n", expanded_history_filename)); read_history(expanded_history_filename); { /* BEGIN: Go local to get environment variable */ const char *temp_env = getenv ("GNUPLOT_HISTORY_SIZE"); if (temp_env) gnuplot_history_size = strtol (temp_env, (char **) NULL, 10); } /* END: Go local to get environment variable */ /* * It is safe to ignore the return values of 'atexit()' and * 'on_exit()'. In the worst case, there is no history of your * currrent session and you have to type all again in your next * session. * This is the default behaviour (traditional reasons), too. * In case you don't have one of these functions, or you don't * want to use them, 'write_history()' is called directly. */ GP_ATEXIT(wrapper_for_write_history); #endif /* GNUPLOT_HISTORY */ fprintf(stderr, "\nTerminal type set to '%s'\n", term->name); } /* if (interactive && term != 0) */ } else { /* come back here from int_error() */ if (interactive == FALSE) exit_status = EXIT_FAILURE; #ifdef HAVE_READLINE_RESET else { /* reset properly readline after a SIGINT+longjmp */ rl_reset_after_signal (); } #endif load_file_error(); /* if we were in load_file(), cleanup */ SET_CURSOR_ARROW; #ifdef VMS /* after catching interrupt */ /* VAX stuffs up stdout on SIGINT while writing to stdout, so reopen stdout. */ if (gpoutfile == stdout) { if ((stdout = freopen("SYS$OUTPUT", "w", stdout)) == NULL) { /* couldn't reopen it so try opening it instead */ if ((stdout = fopen("SYS$OUTPUT", "w")) == NULL) { /* don't use int_error here - causes infinite loop! */ fputs("Error opening SYS$OUTPUT as stdout\n", stderr); } } gpoutfile = stdout; } #endif /* VMS */ if (!interactive && !noinputfiles) { term_reset(); exit(EXIT_FAILURE); /* exit on non-interactive error */ } } if (argc > 1) { #ifdef _Windows TBOOLEAN noend = persist_cl; #endif /* load filenames given as arguments */ while (--argc > 0) { ++argv; c_token = 0; #ifdef _Windows if (stricmp(*argv, "-noend") == 0 || stricmp(*argv, "/noend") == 0 || stricmp(*argv, "-persist") == 0) noend = TRUE; else #endif if (!strncmp(*argv, "-persist", 2) || !strcmp(*argv, "--persist")) { FPRINTF((stderr,"'persist' command line option recognized\n")); } else if (strcmp(*argv, "-") == 0) { interactive = TRUE; while (!com_line()); interactive = FALSE; } else if (strcmp(*argv, "-e") == 0) { --argc; ++argv; if (argc <= 0) { fprintf(stderr, "syntax: gnuplot -e \"commands\"\n"); return 0; } do_string(*argv); } else { load_file(loadpath_fopen(*argv, "r"), gp_strdup(*argv), FALSE); } } #ifdef _Windows if (noend) { interactive = TRUE; while (!com_line()); } #endif } else { /* take commands from stdin */ while (!com_line()); } #if (defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE)) && defined(GNUPLOT_HISTORY) #if !defined(HAVE_ATEXIT) && !defined(HAVE_ON_EXIT) /* You should be here if you neither have 'atexit()' nor 'on_exit()' */ wrapper_for_write_history(); #endif /* !HAVE_ATEXIT && !HAVE_ON_EXIT */ #endif /* (HAVE_LIBREADLINE || HAVE_LIBEDITLINE) && GNUPLOT_HISTORY */ #ifdef OS2 RexxDeregisterSubcom("GNUPLOT", NULL); #endif /* HBB 20040223: Not all compilers like exit() to end main() */ /* exit(exit_status); */ return exit_status; }
void term_reset(void) { init_terminal(); }