Example #1
0
int main(int argc, char *argv[]){
	char* serial_port_name;
	if (argc ==1){
		serial_port_name = SERIALPORTDEFAULT;
	}else if (argc == 2){ // if a command line argument was supplied
		serial_port_name = argv[1]; // the argument is the name of the serial port to open
	}else if(argc > 2){
		printf("Usage is: monitor [serial port name]\n");
	}
	PRINTDEBUG&&printf("main called..\n");
	mysetup_serial_port(serial_port_name);
	PRINTDEBUG&&printf("done setup...\n");
	configureUI();
	
	// setup the log file
	if (LOG)
		logfile = open("log",O_WRONLY|O_APPEND|O_CREAT,0666);// the 0666 is an octal number which sets up proper permissions so we can actually open the log file after writing to it

	//blank out the buffers
	clear_user_command_buffer();
	clear_serial_command_buffer();
	while(1){
		read_from_serial_port(); // read in and buffer stuff in from the serial port
		buffer_input();		 // buffer user input
		refresh();		 // refresh the display
	}
	return quit();
}
Example #2
0
File: Pager.c Project: marciof/show
static void Output_write(Output* output, Buffer** buffer, Error* error) {
    Pager* pager = (Pager*) output->arg;

    if (pager->fd == IO_INVALID_FD) {
        if (buffer_input(pager, buffer, error)) {
            return;
        }

        Array argv;
        init_argv(&argv, pager->options, error);

        if (ERROR_HAS(error)) {
            return;
        }

        int read_write_fds[2];

        if (pipe(read_write_fds) == -1) {
            Error_add(error, strerror(errno));
            Array_deinit(&argv);
            return;
        }

        // FIXME: reuse fork_exec_fd?
        int child_pid = fork();

        if (child_pid == -1) {
            Error_add(error, strerror(errno));
            Array_deinit(&argv);
            return;
        }
        else if (child_pid) {
            // FIXME: cleanup fork
            if (dup2(read_write_fds[0], STDIN_FILENO) == -1) {
                Error_add(error, strerror(errno));
                Array_deinit(&argv);
                return;
            }

            close(read_write_fds[0]);
            close(read_write_fds[1]);
            execvp((char*) argv.data[0], (char**) argv.data);

            // FIXME: cleanup fork
            Error_add(error, strerror(errno));
            Array_deinit(&argv);
            return;
        }

        Array_deinit(&argv);
        close(read_write_fds[0]);
        flush_buffer(pager, read_write_fds[1], error);

        // FIXME: cleanup fork
        if (ERROR_HAS(error)) {
            return;
        }
    }

    io_write(pager->fd, *buffer, error);
    (*buffer)->length = 0;
}