=================================================================== RCS file: /home/cvs/OpenXM_contrib2/fep/fep_main.c,v retrieving revision 1.2 retrieving revision 1.13 diff -u -p -r1.2 -r1.13 --- OpenXM_contrib2/fep/fep_main.c 2002/09/09 12:11:51 1.2 +++ OpenXM_contrib2/fep/fep_main.c 2021/03/24 06:22:04 1.13 @@ -1,15 +1,28 @@ /* Copyright (c) 1987, 1988 by Software Research Associates, Inc. */ +#if defined(ANDROID) +#include +#define index(s,c) strchr(s,c) +#define rindex(s,c) strrchr(s,c) +#endif + #ifndef lint static char rcsid[]= -"$Id: fep_main.c,v 1.2 2002/09/09 12:11:51 noro Exp $ (SRA)"; +"$Id: fep_main.c,v 1.13 2021/03/24 06:22:04 fujimoto Exp $ (SRA)"; #endif /* lint */ #include +#include +#include +#include #include #include #include #include +#if defined(sun) +#include +#include +#endif #ifdef TERMIOS #include #if defined(__linux__) || defined(__CYGWIN__) @@ -57,7 +70,11 @@ int histlen = -1; /* history length */ int debug = OFF; /* debug switch */ int auto_tty_fix = ON; /* fix tty mode automaticaly */ FILE *script_fp = NULL; /* script file pointer */ +#if defined(sun) +void catchsig (int); /* function take care SIGCHILD */ +#else void catchsig __P((int)); /* function take care SIGCHILD */ +#endif #ifdef TERMIOS #define ttystruct termios @@ -72,7 +89,11 @@ int lines; /* terminal line size */ int columns; /* terminal coulumn size */ char *term_clear; /* terminal clear code */ +#if defined(sun) +void (*sighup)(int), (*sigchld)(int), (*sigtstp)(int); +#else void (*sighup) __P((int)), (*sigchld) __P((int)), (*sigtstp) __P((int)); +#endif /* function buffer for signal */ #ifdef TIOCSETN @@ -116,9 +137,7 @@ struct cmdinfo { {0, 0} }; -main(argc, argv) - int argc; - char *argv[]; +int main(int argc, char *argv[]) { int i; char *cp; @@ -234,7 +253,11 @@ DEFAULT: * Set variable of command name. */ { +#if defined(ANDROID) + char *cp = argv[1]; +#else char *cp = argv[1], *rindex(); +#endif if (any ('/', cp)) cp = rindex (cp, '/') + 1; @@ -245,7 +268,11 @@ DEFAULT: commandv = &argv[1]; if (! isatty (0)) { - execvp (*commandv, commandv, 0); +#if defined(__INTERIX) + execvp (*commandv, commandv); +#else + execvp (*commandv, commandv); +#endif perror (*commandv); exit (1); } @@ -293,11 +320,15 @@ DEFAULT: input_handler (); } -fix_signal () +void fix_signal () { #ifdef SIGWINCH +#if defined(sun) + void sigwinch (int); +#else void sigwinch __P((int)); #endif +#endif sighup = signal (SIGHUP, terminate); sigchld = signal (SIGCHLD, catchsig); @@ -308,7 +339,7 @@ fix_signal () #endif } -recover_signal () +void recover_signal () { (void) signal (SIGHUP, sighup); @@ -316,10 +347,10 @@ recover_signal () (void) signal (SIGTSTP, sigtstp); } -input_handler() +void input_handler() { char *inputline; - char *getline (); + char *mygetline (); /* * Get slave tty descriptor for auto-tty-fix @@ -327,7 +358,7 @@ input_handler() if ((slave = open (slave_tty, O_RDONLY)) < 0) perror ("open"); - while (inputline = getline ()) { + while (inputline = mygetline ()) { /* * XXX: nbyte should be greater than 0 only for ^@ input in emacs. * This solution is very ugly.. but it will takes a half day @@ -343,7 +374,7 @@ input_handler() /* * NOTE: - * Saving command line to output buffer is done in getline(). + * Saving command line to output buffer is done in mygetline(). * Because inputline here is converted by alias. */ @@ -401,7 +432,7 @@ struct timeval *notimeout[] = { TIMEOUT_FOREVER }; -getcharacter() +int getcharacter() { char c; int n; @@ -521,11 +552,9 @@ RETRY: goto RETRY; } -int set_buffer (bp, size) - BUFFER *bp; - int size; +int set_buffer (BUFFER *bp, int size) { - char *newbuf, *malloc(), *realloc(); + char *newbuf; if (bp->b_buf) newbuf = (char *) realloc (bp->b_buf, size); @@ -548,9 +577,10 @@ int set_buffer (bp, size) return (1); } -int buf_read (fd, bp) - int fd; /* file discriptor */ - BUFFER *bp; /* buffer pointer */ +/* int fd; file discriptor */ +/* BUFFER *bp; buffer pointer */ + +int buf_read (int fd, BUFFER *bp) { int nbyte; @@ -588,9 +618,12 @@ int buf_read (fd, bp) return (nbyte); } -buf_put (bp, s) - BUFFER *bp; /* buffer pointer */ - char *s; /* string pointer */ +/* + BUFFER *bp; buffer pointer + char *s; string pointer +*/ + +void buf_put (BUFFER *bp, char *s) { int nbyte; int slen; @@ -615,7 +648,7 @@ buf_put (bp, s) } } -swallow_output() +void swallow_output() { fd_set readfd = mastermask; int r; @@ -657,9 +690,11 @@ swallow_output() #include #endif -void -catchsig(n) - int n; +#if defined(__INTERIX) || defined(ANDROID) +#define wait3(s,opt,rp) (waitpid((-1),(s),(opt))) +#endif + +void catchsig(int n) { int status; struct rusage ru; @@ -676,8 +711,7 @@ catchsig(n) terminate (0); } -exec_to_command(argv) - char *argv[]; +void exec_to_command(char *argv[]) { int t; @@ -686,7 +720,7 @@ exec_to_command(argv) */ t = open ("/dev/tty", 2); if (t >= 0) { -#ifndef __CYGWIN32__ +#if !defined(__CYGWIN32__) && !defined(__INTERIX) ioctl (t, TIOCNOTTY, (char *) 0); #endif (void) close (t); @@ -705,13 +739,17 @@ exec_to_command(argv) #elif defined(TIOCSETN) ioctl (0, TIOCSETN, (char *) & slave_ttymode); #endif - execvp (*argv, argv, 0); +#if defined(__INTERIX) + execvp (*argv, argv); +#else + execvp (*argv, argv); +#endif perror (*argv); exit (1); } #ifdef TERMIOS -fix_tty() +void fix_tty() { int i; master_ttymode = initial_ttymode; @@ -731,7 +769,7 @@ fix_tty() #elif defined(TIOCSETN) -fix_tty() +void fix_tty() { struct tchars tcbuf; struct ltchars lcbuf; @@ -770,16 +808,14 @@ fix_tty() } #endif -kill_process() +void kill_process() { if (child_pid) (void) killpg (child_pid, SIGTERM); } -void -terminate(n) - int n; +void terminate(int n) { extern int errno; @@ -821,14 +857,14 @@ terminate(n) exit (0); } -send_int_sig() { +int send_int_sig() { #ifndef __CYGWIN__ kill(child_pid,SIGINT); #endif return 0; } -get_pty_master() +void get_pty_master() { char c; struct stat stb; @@ -838,16 +874,34 @@ get_pty_master() master = 1; return; } -#ifdef __CYGWIN32__ +#if defined(__CYGWIN32__) || defined(__linux__) || defined(__APPLE__) sprintf (master_tty, "/dev/ptmx"); master = open (master_tty, O_RDWR); if (master >= 0) { +#if defined(__linux__) + char name[BUFSIZ]; + grantpt(master); + unlockpt(master); + if ( !ptsname_r(master,name,sizeof(name)) ) { + strcpy(slave_tty, name); + goto FOUND; + } +#elif defined(__APPLE__) + char *name; + grantpt(master); + unlockpt(master); + if ( name = (char *)ptsname(master) ) { + strcpy(slave_tty, name); + goto FOUND; + } +#else char *name; name = (char *)ptsname(master); if ( name != 0 ) { strcpy(slave_tty, name); goto FOUND; } +#endif } #else for (c = 'p'; c <= 's'; c++) { @@ -913,7 +967,7 @@ get_pty_master() return; } -get_pty_slave() +void get_pty_slave() { slave = open (slave_tty, 2); @@ -951,7 +1005,7 @@ get_pty_slave() #endif } -recover_tty() +void recover_tty() { #ifdef TERMIOS tcsetattr(0, TCSANOW, &initial_ttymode); @@ -962,10 +1016,14 @@ recover_tty() #endif } -suspend() +int suspend() { long pid; +#if defined(sun) + void (*func) (int); +#else void (*func) __P((int)); +#endif #ifndef __CYGWIN32__ int omask; #endif @@ -977,7 +1035,7 @@ suspend() signal (SIGTSTP, SIG_DFL); recover_tty(); #define mask(s) (1 << ((s)-1)) -#ifndef __CYGWIN32__ +#if !defined(__CYGWIN32__) && !defined(sun) omask = sigsetmask (sigblock (0) & ~mask (SIGTSTP)); #endif kill (0, SIGTSTP); @@ -990,7 +1048,7 @@ suspend() kill (0, SIGCONT); signal (SIGCHLD, func); signal (SIGTSTP, SIG_IGN); -#ifndef __CYGWIN32__ +#if !defined(__CYGWIN32__) && !defined(sun) sigblock (mask (SIGTSTP)); #endif fix_tty (); @@ -998,8 +1056,7 @@ suspend() fep_repaint(0); } -look_cmdinfo (command) - char *command; +void look_cmdinfo (char *command) { struct cmdinfo *p; char *allocAndCopyThere(); @@ -1018,7 +1075,7 @@ look_cmdinfo (command) } -usageAndExit() +void usageAndExit() { printf ("Usage: %s [-emacs|-vi] command\n", myself); @@ -1029,8 +1086,9 @@ usageAndExit() /* * Propagate window size changes to the slave tty. */ -sigwinch() +void sigwinch(int dummy) { + char *itoa(int i); #ifdef TIOCGWINSZ /* 4.3BSD */ struct winsize win;