int main(int argc, char** argv, char** env) { if(argc != 3) { printf("USAGE:\n\t%s <PIPE_IN> <PIPE_OUT>\n", argv[0]); return -1; } fd_in = open_in(argv[1]); if(fd_in < 0) { perror("in pine"); return errno; }; fd_out = open_out(argv[2]); if(fd_out < 0) { perror("out pipe"); return errno; }; /* chat here */ while(1) { int ret; char buff[80]; struct pollfd pfd[] = { { .fd = fd_in, .events = POLLIN, }, { .fd = STDIN_FILENO, .events = POLLIN, }, };
uint8 IEC::Out(uint8 byte, bool eoi) { if (listener_active) { if (received_cmd == CMD_OPEN) return open_out(byte, eoi); if (received_cmd == CMD_DATA) return data_out(byte, eoi); return ST_TIMEOUT; } else return ST_TIMEOUT; }
int open_out(char* name) { int ret = open(name, O_RDWR); if(ret < 0) { printf("DEBUG: %s not present. Create\n", name); umask(0); ret = mkfifo(name, 0666); printf("DEBUG: %s Created\n", name); if(ret < 0) return ret; return open_out(name); } printf("DEBUG: %s open success\n", name); return ret; }
static int parse_args(int argc, char **argv, struct state *st) { char **cur, n; for (cur = argv + 1, n = 0; cur < argv + argc; cur++) { const char *arg = *cur; switch (n) { case 0: /* input file */ n++; if (arg[0] == '-' && !arg[1]) { st->inname = "<STDIN>"; st->inf = stdin; } else { st->inname = arg; st->inf = open_in(st->inname); } if (!st->inf) goto failure; break; case 1: /* output file */ n++; if (arg[0] == '-' && !arg[1]) { st->outname = "<STDOUT>"; st->outf = stdout; } else { st->outname = arg; st->outf = open_out(st->outname); } if (!st->outf) goto failure; break; default: fprintf(stderr, "usage: %s <in-file.bmp> [<out-file.c>]\n", argv[0]); return 1; } } if (n == 1) { st->outname = "<STDOUT>"; st->outf = stdout; } if (n > 0) return 0; /* success */ failure: return -1; /* failure */ }
/*=export_func optionParseShell * private: * * what: Decipher a boolean value * arg: + tOptions * + pOpts + program options descriptor + * * doc: * Emit a shell script that will parse the command line options. =*/ void optionParseShell(tOptions * opts) { /* * Check for our SHELL option now. * IF the output file contains the "#!" magic marker, * it will override anything we do here. */ if (HAVE_GENSHELL_OPT(SHELL)) shell_prog = GENSHELL_OPT_ARG(SHELL); else if (! ENABLED_GENSHELL_OPT(SHELL)) shell_prog = NULL; else if ((shell_prog = getenv("SHELL")), shell_prog == NULL) shell_prog = POSIX_SHELL; /* * Check for a specified output file */ if (HAVE_GENSHELL_OPT(SCRIPT)) open_out(GENSHELL_OPT_ARG(SCRIPT), opts->pzProgName); emit_usage(opts); emit_setup(opts); /* * There are four modes of option processing. */ switch (opts->fOptSet & (OPTPROC_LONGOPT|OPTPROC_SHORTOPT)) { case OPTPROC_LONGOPT: fputs(LOOP_STR, stdout); fputs(LONG_OPT_MARK, stdout); fputs(INIT_LOPT_STR, stdout); emit_long(opts); printf(LOPT_ARG_FMT, opts->pzPROGNAME); fputs(END_OPT_SEL_STR, stdout); fputs(NOT_FOUND_STR, stdout); break; case 0: fputs(ONLY_OPTS_LOOP, stdout); fputs(INIT_LOPT_STR, stdout); emit_long(opts); printf(LOPT_ARG_FMT, opts->pzPROGNAME); break; case OPTPROC_SHORTOPT: fputs(LOOP_STR, stdout); fputs(FLAG_OPT_MARK, stdout); fputs(INIT_OPT_STR, stdout); emit_flag(opts); printf(OPT_ARG_FMT, opts->pzPROGNAME); fputs(END_OPT_SEL_STR, stdout); fputs(NOT_FOUND_STR, stdout); break; case OPTPROC_LONGOPT|OPTPROC_SHORTOPT: fputs(LOOP_STR, stdout); fputs(LONG_OPT_MARK, stdout); fputs(INIT_LOPT_STR, stdout); emit_long(opts); printf(LOPT_ARG_FMT, opts->pzPROGNAME); fputs(END_OPT_SEL_STR, stdout); fputs(FLAG_OPT_MARK, stdout); fputs(INIT_OPT_STR, stdout); emit_flag(opts); printf(OPT_ARG_FMT, opts->pzPROGNAME); fputs(END_OPT_SEL_STR, stdout); fputs(NOT_FOUND_STR, stdout); break; } emit_wrapup(opts); if ((script_trailer != NULL) && (*script_trailer != NUL)) fputs(script_trailer, stdout); else if (ENABLED_GENSHELL_OPT(SHELL)) printf(SHOW_PROG_ENV, opts->pzPROGNAME); #ifdef HAVE_FCHMOD fchmod(STDOUT_FILENO, 0755); #endif fclose(stdout); if (ferror(stdout)) fserr_exit(opts->pzProgName, zwriting, zstdout_name); AGFREE(script_text); script_leader = NULL; script_trailer = NULL; script_text = NULL; }
/*=export_func optionParseShell * private: * * what: Decipher a boolean value * arg: + tOptions* + pOpts + program options descriptor + * * doc: * Emit a shell script that will parse the command line options. =*/ void optionParseShell(tOptions * pOpts) { /* * Check for our SHELL option now. * IF the output file contains the "#!" magic marker, * it will override anything we do here. */ if (HAVE_GENSHELL_OPT(SHELL)) shell_prog = GENSHELL_OPT_ARG(SHELL); else if (! ENABLED_GENSHELL_OPT(SHELL)) shell_prog = NULL; else if ((shell_prog = getenv("SHELL")), shell_prog == NULL) shell_prog = POSIX_SHELL; /* * Check for a specified output file */ if (HAVE_GENSHELL_OPT(SCRIPT)) open_out(GENSHELL_OPT_ARG(SCRIPT)); emit_usage(pOpts); emit_setup(pOpts); /* * There are four modes of option processing. */ switch (pOpts->fOptSet & (OPTPROC_LONGOPT|OPTPROC_SHORTOPT)) { case OPTPROC_LONGOPT: fputs(LOOP_STR, stdout); fputs(LONG_OPT_MARK, stdout); fputs(INIT_LOPT_STR, stdout); emitLong(pOpts); printf(LOPT_ARG_FMT, pOpts->pzPROGNAME); fputs(END_OPT_SEL_STR, stdout); fputs(NOT_FOUND_STR, stdout); break; case 0: fputs(ONLY_OPTS_LOOP, stdout); fputs(INIT_LOPT_STR, stdout); emitLong(pOpts); printf(LOPT_ARG_FMT, pOpts->pzPROGNAME); break; case OPTPROC_SHORTOPT: fputs(LOOP_STR, stdout); fputs(FLAG_OPT_MARK, stdout); fputs(INIT_OPT_STR, stdout); emit_flag(pOpts); printf(OPT_ARG_FMT, pOpts->pzPROGNAME); fputs(END_OPT_SEL_STR, stdout); fputs(NOT_FOUND_STR, stdout); break; case OPTPROC_LONGOPT|OPTPROC_SHORTOPT: fputs(LOOP_STR, stdout); fputs(LONG_OPT_MARK, stdout); fputs(INIT_LOPT_STR, stdout); emitLong(pOpts); printf(LOPT_ARG_FMT, pOpts->pzPROGNAME); fputs(END_OPT_SEL_STR, stdout); fputs(FLAG_OPT_MARK, stdout); fputs(INIT_OPT_STR, stdout); emit_flag(pOpts); printf(OPT_ARG_FMT, pOpts->pzPROGNAME); fputs(END_OPT_SEL_STR, stdout); fputs(NOT_FOUND_STR, stdout); break; } printf(zLoopEnd, pOpts->pzPROGNAME, END_MARK); if ((script_trailer != NULL) && (*script_trailer != NUL)) fputs(script_trailer, stdout); else if (ENABLED_GENSHELL_OPT(SHELL)) printf(SHOW_PROG_ENV, pOpts->pzPROGNAME); fflush(stdout); fchmod(STDOUT_FILENO, 0755); fclose(stdout); if (ferror(stdout)) { fputs(zOutputFail, stderr); exit(EXIT_FAILURE); } }