diff options
Diffstat (limited to 'editors/bpatch/files/patch-bpatch.c')
-rw-r--r-- | editors/bpatch/files/patch-bpatch.c | 347 |
1 files changed, 347 insertions, 0 deletions
diff --git a/editors/bpatch/files/patch-bpatch.c b/editors/bpatch/files/patch-bpatch.c new file mode 100644 index 000000000000..5b2ad8225f32 --- /dev/null +++ b/editors/bpatch/files/patch-bpatch.c @@ -0,0 +1,347 @@ +--- bpatch.c.orig 1990-01-17 15:33:33.000000000 +0100 ++++ bpatch.c 2012-11-30 15:20:18.000000000 +0100 +@@ -90,10 +90,15 @@ + /*E*/ + /*S includes, globals, and defines */ + /*Page Eject*/ +-#include <curses.h> ++#include <ncurses.h> + #include <fcntl.h> + #include <signal.h> + #include <ctype.h> ++#include <stdlib.h> ++#include <string.h> ++#include <unistd.h> ++#include <stdio.h> ++#include <termios.h> + #include <sys/types.h> + #include <sys/stat.h> + +@@ -103,14 +108,18 @@ + void icc (); + void copyrec (); + void schwapp (); +- +-/* added declarations, mostly for cleanliness */ +-extern long lseek(); +-extern long atol(); +-extern char *strncpy(); +-extern void exit(); +-extern unsigned sleep(); /* signal problems ??? if sleep called */ +-extern void perror(); ++void breakp (); ++void reset (); ++int ckfile (char *, long *); ++int bread (int, char *, int, int); ++void errmsg (char *, unsigned); ++void show (int, char[16][16], char *, long, int, long, char, int, int, int, int, int, int); ++void dbg_msg (register char *); ++void dohelp (); ++void search (register int); ++int arrow (register int, register int*, register int *); ++void outstr (char *); ++void outch (register char); + + /* set up for calls to outstr and errmsg, etc, */ + /* by use of sprintf to fill outbuf */ +@@ -190,7 +199,7 @@ + #ifdef MOD_HAX + #else /* use original code... */ + /* plus some more for restoring terminal function */ +- struct termio asis, aswas; ++ struct termios asis, aswas; + #endif /* MOD_HAX */ + + /*S main - control all the work from here */ +@@ -202,6 +211,7 @@ + * + *********************************************************************/ + /*E*/ ++int + main (argc, argv) + int argc; + char *argv[]; +@@ -210,12 +220,10 @@ + extern WINDOW *newwin (); + + register char *cp; /* general purpose char ptr */ +- extern char *gets (); /* get string from stdin */ + char m = '\017'; /* mask for hex edit */ + char response[512]; /* general purpose buffer */ + int z; /* character read in */ + +- int breakp (); /* signal trapping function */ + int c; /* current screen column */ + int change = 0; /* true if cmd line option toggled */ + int fid; /* file descriptor */ +@@ -234,8 +242,7 @@ + extern char *optarg; /* getopt pointer to opt arg */ + + extern long getnum (); +- extern char *instr (); /* get a string from the cmd line */ +- extern int reset (); /* exit function - reset terminal */ ++ extern char *myinstr (); /* get a string from the cmd line */ + + /* ------------------------------------------------------------ */ + /* set up signal handling */ +@@ -333,19 +340,27 @@ + alphawin = subwin (stdscr, 16, 16, 4, 57); + keypad (alphawin, TRUE); + errwin = subwin (stdscr, 1, 80, 23, 0); ++ if (errwin == NULL) ++ errwin = stdscr; ++ if (hexwin == NULL || alphawin == NULL) ++ { ++ fprintf(stderr, "Can't create all necessary curses windows.\n"); ++ reset (0); ++ exit (2); ++ } + + #ifdef MOD_HAX + /* This is not exactly what the original code does, + but it's good enough. -r$ */ + raw(); + #else /* use original code... */ +- ioctl (0, TCGETA, &asis); ++ tcgetattr (0, &asis); + aswas = asis; /* save termio stuff for later restore */ + asis.c_cc[VINTR] = '\0'; + asis.c_iflag &= ~IXON; + asis.c_iflag &= ~IXOFF; + asis.c_iflag &= ~IXANY; +- ioctl (0, TCSETA, &asis); ++ tcsetattr (0, TCSANOW, &asis); + #endif /* MOD_HAX */ + } + +@@ -398,7 +413,7 @@ + { + position = lseek (fid, ((long )recno) * 256, 0); + +- if ((bytes = bread (fid, record, 256, block)) < 0) ++ if ((bytes = bread (fid, (char *)record, 256, block)) < 0) + { + sprintf(outbuf, "error on reading file %s", filename); + errmsg (outbuf, SLEEP_TIME); +@@ -478,7 +493,9 @@ + } + pbrk = 0; + fprintf (stderr, "\007"); +- gets (response); ++ fgets (response, 512, stdin); ++ if ((cp = strchr (response, '\n'))) ++ *cp = 0; + + if (pbrk) status = EOF; + } +@@ -617,7 +634,7 @@ + + case '\006': /* new file (^F) */ + close (fid); +- fid = ckfile (cp = instr (), &size); ++ fid = ckfile (cp = myinstr (), &size); + if (fid < 0) + { + fid = ckfile (filename, &size); +@@ -832,7 +849,8 @@ + touchwin (alphawin); + wrefresh (alphawin); + +- while ((z = wgetch (alphawin)) != DEL) ++ while ((z = wgetch (alphawin)) != KEY_DC && ++ z != KEY_BACKSPACE) + { + if (!arrow (z, &r, &c)) + { +@@ -902,7 +920,8 @@ + touchwin (hexwin); + wrefresh (hexwin); + +- while ((z = wgetch (hexwin)) != DEL) ++ while ((z = wgetch (hexwin)) != KEY_DC ++ && z != KEY_BACKSPACE) + { + if (!arrow (z, &r, &c)) + { +@@ -1083,21 +1102,9 @@ + /*E*/ + /*checked typing of parameters as declared in fucntion */ + /* versus declarations at call */ +-show (bytes, record, filename, size, recno, position, +- m,reclen, dump, ebcdic, swab_opt, block, honly) +-int bytes; +-char record[16][16]; +-char *filename; +-long size; +-int recno; +-long position; +-char m; +-int reclen; +-int dump; +-int ebcdic; +-int swab_opt; +-int block; +-int honly; ++void ++show (int bytes, char record[16][16], char *filename, long size, int recno, long position, ++ char m, int reclen, int dump, int ebcdic, int swab_opt, int block, int honly) + { + int i; + int j; +@@ -1281,7 +1288,7 @@ + /*S breakp - set pbrk on interrupt */ + /*H breakp */ + /*E*/ +-int breakp (i) ++void breakp (i) + int i; + { + int s; +@@ -1448,6 +1455,7 @@ + /*S ckfile - check on existence, accessibility, and type of file */ + /*H ckfile */ + /*E*/ ++int + ckfile (filename, sizep) + char *filename; + long *sizep; +@@ -1515,6 +1523,7 @@ + /*S dohelp - display help text */ + /*H dohelp */ + /*E*/ ++void + dohelp () + { + static char *helptxt[] = { +@@ -1592,6 +1601,7 @@ + /*S reset - reset terminal to original state */ + /*H reset */ + /*E*/ ++void + reset (sig) + int sig; + { +@@ -1600,7 +1610,7 @@ + move (23, 0); + refresh (); + #ifndef MOD_HAX +- ioctl (0, TCSETA, &aswas); ++ tcsetattr (0, TCSANOW, &aswas); + #endif + endwin (); + } +@@ -1610,17 +1620,17 @@ + fprintf (stderr, "killed with signal %d\n", sig); + exit (sig); + } +- return (0); + } + /*S arrow - determine if current character is a cursor control key */ + /*H arrow */ + /*E*/ ++int + arrow (k, r, c) + register int k; + register int *r; + register int *c; + { +- register ret = 1; ++ register int ret = 1; + + /* watch out for conflict of VI_* amd KEY_* definitions */ + if (k == KEY_UP || k == VI_UP) +@@ -1673,6 +1683,7 @@ + /*S dbg_msg - print a debug message */ + /*H dbg_msg */ + /*E*/ ++void + dbg_msg (msg) + register char *msg; + { +@@ -1683,11 +1694,11 @@ + + return; + } +-/*S instr - get a character string from the terminal */ +-/*H instr */ ++/*S myinstr - get a character string from the terminal */ ++/*H myinstr */ + /*E*/ + char * +-instr () ++myinstr () + { + static char buf[512]; + +@@ -1815,6 +1826,7 @@ + /*S search - look for an ascii string in the file */ + /*H search */ + /*E*/ ++void + search (fid) + register int fid; + { +@@ -1827,13 +1839,13 @@ + register int matched = 0; + register int srch_len; + +- register char *cp = instr (); ++ register char *cp = myinstr (); + register char *rp; + + int row, col; + + srch_len = strlen (cp); +- copyrec (record, lrecord, sizeof record); ++ copyrec ((char *)record, lrecord, sizeof record); + lrecord[256] = '\0'; + + pbrk = 0; +@@ -1875,7 +1887,7 @@ + { + recno = currec; + stay = 0; +- copyrec (record, unch_rec, sizeof record); ++ copyrec ((char *)record, (char *)unch_rec, sizeof record); + werase (errwin); + touchwin (errwin); + wrefresh (errwin); +@@ -1891,6 +1903,7 @@ + } + /* simplified call to errmsg(), by using sprintf to load format */ + /* sleep_time is not implemented and awaits cleaning up of the signals (?) */ ++void + errmsg (fmt, sleep_time) + unsigned sleep_time; + char *fmt; +@@ -1911,7 +1924,7 @@ + } + else + { +- fprintf (stderr, fmt); ++ fprintf (stderr, "%s", fmt); + fprintf (stderr, "\n"); + } + /* signal problem ?? if sleep called +@@ -1921,16 +1934,17 @@ + return; + } + /* simplified call to outstr(), by using sprintf to load format */ ++void + outstr (fmt) + char *fmt; + { +- if (dump) printf (fmt); +- else printw (fmt); ++ if (dump) printf ("%s", fmt); ++ else printw ("%s", fmt); + + return; + } +-outch (ch) +-register char ch; ++void ++outch (register char ch) + { + if (dump) putchar (ch); + else addch (ch); |