Resurrect bpatch, hope everything's right this time.
This commit is contained in:
parent
4f41464fb9
commit
cf6bdfa4e9
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=432633
6 changed files with 434 additions and 0 deletions
|
@ -14,6 +14,7 @@
|
|||
SUBDIR += biew
|
||||
SUBDIR += bitedit
|
||||
SUBDIR += boiling-egg
|
||||
SUBDIR += bpatch
|
||||
SUBDIR += bvi
|
||||
SUBDIR += calligra
|
||||
SUBDIR += calligra-l10n
|
||||
|
|
27
editors/bpatch/Makefile
Normal file
27
editors/bpatch/Makefile
Normal file
|
@ -0,0 +1,27 @@
|
|||
# Created by: joerg
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= bpatch
|
||||
PORTVERSION= 1.0
|
||||
PORTREVISION= 1
|
||||
CATEGORIES= editors
|
||||
MASTER_SITES= ${MASTER_SITE_LOCAL}
|
||||
MASTER_SITE_SUBDIR= joerg
|
||||
DISTNAME= ${PORTNAME}
|
||||
|
||||
MAINTAINER= joerg@FreeBSD.org
|
||||
COMMENT= Hex editor that doesn't load the whole file at once
|
||||
|
||||
# 2016-11-14: Email from Prof. (em.) John Rupley
|
||||
# As far as I am concerned, the code is public domain, with no
|
||||
# restrictions. Steven List, in his README for the original
|
||||
# distribution, said that the original author, Garry Johnson, gave him
|
||||
# permission to place the code in the public domain. So, do whatever
|
||||
# you will with bpatch. Nice to know it may still have a life.
|
||||
LICENSE= CC0-1.0
|
||||
|
||||
NO_WRKSUBDIR= yes
|
||||
PLIST_FILES= bin/bpatch \
|
||||
man/man1/bpatch.1.gz
|
||||
|
||||
.include <bsd.port.mk>
|
3
editors/bpatch/distinfo
Normal file
3
editors/bpatch/distinfo
Normal file
|
@ -0,0 +1,3 @@
|
|||
TIMESTAMP = 1479337364
|
||||
SHA256 (bpatch.tar.gz) = 3bb5c8f239be00b18e3ef7f6900bdfb037888a58de8a92ebe24cb0ae6ad41d8c
|
||||
SIZE (bpatch.tar.gz) = 16087
|
42
editors/bpatch/files/patch-Makefile
Normal file
42
editors/bpatch/files/patch-Makefile
Normal file
|
@ -0,0 +1,42 @@
|
|||
--- /dev/null Mon Mar 18 12:50:49 1996
|
||||
+++ Makefile Mon Mar 18 19:30:47 1996
|
||||
@@ -0,0 +1,39 @@
|
||||
+# This may have to change on your system.
|
||||
+# You may have to fiddle with various combinations of curses, termcap,
|
||||
+# terminfo, etc. Good luck!
|
||||
+PREFIX?= /usr/local
|
||||
+BINDIR= ${PREFIX}/bin
|
||||
+MANDIR= ${PREFIX}/man/man1
|
||||
+
|
||||
+LIBS = -lncurses
|
||||
+#LIBS = -ltermlib
|
||||
+#LIBS = -lterminfo
|
||||
+#for sysV
|
||||
+#LIBS = -lcurses
|
||||
+
|
||||
+# However you need getopt.
|
||||
+#GETOPT = -lgetopt
|
||||
+#not for sysV! (nor for some BSD)
|
||||
+#GETOPT =
|
||||
+
|
||||
+# If you're running on a 4.[23] system, you probably want this.
|
||||
+#WORK = -DMOD_HAX
|
||||
+#sysV
|
||||
+#WORK =
|
||||
+
|
||||
+#BSD or thereabouts
|
||||
+CFLAGS+= $(WORK)
|
||||
+#Microport sysV/AT, large model, for sdb debugger
|
||||
+#CFLAGS = -g -Ml
|
||||
+
|
||||
+all: bpatch
|
||||
+
|
||||
+clean:
|
||||
+ rm -f bpatch bpatch.o *.core
|
||||
+
|
||||
+bpatch: bpatch.o
|
||||
+ $(CC) -o bpatch $(CFLAGS) bpatch.o $(GETOPT) $(LIBS)
|
||||
+
|
||||
+install: bpatch bpatch.1
|
||||
+ $(BSD_INSTALL_PROGRAM) bpatch $(DESTDIR)$(BINDIR)
|
||||
+ $(BSD_INSTALL_MAN) bpatch.1 $(DESTDIR)$(MANDIR)
|
347
editors/bpatch/files/patch-bpatch.c
Normal file
347
editors/bpatch/files/patch-bpatch.c
Normal file
|
@ -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);
|
14
editors/bpatch/pkg-descr
Normal file
14
editors/bpatch/pkg-descr
Normal file
|
@ -0,0 +1,14 @@
|
|||
Original code written by Garry M. Johnson and Steven Lisk.
|
||||
|
||||
This is a neat program that contains some neat code. It allows you
|
||||
to dump or edit files (binary or ascii), displayed by 256-byte records
|
||||
in side-by-side hex and ascii formats. Other features (eg. toggled
|
||||
swap within byte pairs) are included.
|
||||
|
||||
The most interesting feature of this editor is that it doesn't load the
|
||||
entire file at once, unlike all other hex editors. Thus, you can browse
|
||||
and edit very large files or even raw disks.
|
||||
|
||||
The program does not include a redistribution notice, but it was posted
|
||||
to comp.sources.unix ages ago, and the README mentions the word "public
|
||||
domain".
|
Loading…
Reference in a new issue