mirror of
https://git.freebsd.org/ports.git
synced 2025-06-03 03:46:30 -04:00
347 lines
8 KiB
C
347 lines
8 KiB
C
--- 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);
|