clark@ttidca.TTI.COM (Ralph Clark) (04/06/88)
Here is a simple program to convert a self-extracting archive back into
a regular you-can-run-arc--t-on-it-before-you-spend-an-hour-downloading-it
archive. Inquiry to three local gurus failed to produce a simple one-line
shell command alternative. It will undoubtedly fail if you ask it to delete
a googolplex of bytes from the head of a file.
9758 has been posted as the length of the extraction program - no doubt
future or previous versions will vary. It is correct for skyplot.exe.
Usage : lobotomy -9758 <skyplot.exe >skyplot.arc (uudecoded first!)
(not tested with any other example.)
--------------------------cut here------------------------------------------
/* lobotomy.c
*
* a tool to strip a specified number of bytes from the front of a file
* while copying stdin to stdout.
*/
#include <stdio.h>
main(argc,argv)
int argc;
char *argv[];
{
int c,i,nbytes;
if ((argc != 2)
|| (*argv[1] != '-')
|| ((nbytes = atoi(&argv[1][1])) <= 0))
printf(
"Usage : %s -n, where n bytes are to be skipped from stdin to stdout",
argv[0]);
for (i = 0; i < nbytes; i++)
if ((c == getchar()) == EOF)
exit(0);
while ((c = getchar()) != EOF)
putchar(c);
exit (0);
}
----------------------------cut here--------------------------------------
Disclaimer: not responsible for damage caused by using this program to
remove any useful bytes from your files.
--
R. Clark (clark@TTI.COM)
Citicorp(+)TTI
3100 Ocean Park Blvd. (213) 452-9191, x2965
Santa Monica, CA 90405 {csun|philabs|psivax|trwrb}!ttidca!clarkclark@ttidca.TTI.COM (Ralph Clark) (04/06/88)
Oops! I seem to have left out an exit call after displaying the usage. (I
told you I only tested the one example (-:) In keeping with the title,
I'll leave the insertion of the fix to the user.
--
R. Clark (clark@TTI.COM)
Citicorp(+)TTI
3100 Ocean Park Blvd. (213) 452-9191, x2965
Santa Monica, CA 90405 {csun|philabs|psivax|trwrb}!ttidca!clarkmarms@sandia.UUCP (Mike Arms) (04/08/88)
In article <2237@ttidca.TTI.COM> clark@ttidca.TTI.COM (Ralph Clark) writes: >Here is a simple program to convert a self-extracting archive back into >a regular you-can-run-arc--t-on-it-before-you-spend-an-hour-downloading-it >archive. Inquiry to three local gurus failed to produce a simple one-line >shell command alternative. It will undoubtedly fail if you ask it to delete >a googolplex of bytes from the head of a file. There is indeed a fairly simple one-line Unix command to do exactly this using "dd", but it is VERY slow compared to your C-program. You must specify the block size and the skip option to "dd": dd bs=1 skip=9758 <sky.exe >sky.arc On my Sun 3/60, I ran a time comparison just for grins. The "dd" took 4.5 minutes, while "lobotomy" only took 1 second. They produced exactly the same output. Most likely "dd" would move a hell of a lot faster if it wasn't bogged down with a 1 byte block size specifier. Thanks for a simple, but useful solution to the self-extracting arcs problem. -- Mike Arms uucp: ...{ucbvax | gatech}!unmvax!sandia!marms
davidsen@steinmetz.ge.com (William E. Davidsen Jr) (04/08/88)
Although the C program works, on a UNIX system it can be done using
system tools:
dd bs=1 skip=9758 if=self.extract of=real.arc
It can be done less conveniently with DEBUG under DOS as well, for those
who lack a C compiler. How about posting the compiler version, since
this is a binary newsgroup...
--
bill davidsen (wedu@ge-crd.arpa)
{uunet | philabs | seismo}!steinmetz!crdos1!davidsen
"Stupidity, like virtue, is its own reward" -merns@se-sd.sandiego.NCR.COM (Rick Schubert) (04/08/88)
In article <2237@ttidca.TTI.COM> clark@ttidca.TTI.COM (Ralph Clark) writes: >Here is a simple program to convert a self-extracting archive back into >a regular you-can-run-arc--t-on-it-before-you-spend-an-hour-downloading-it >archive. Inquiry to three local gurus failed to produce a simple one-line >shell command alternative. It will undoubtedly fail if you ask it to delete >a googolplex of bytes from the head of a file. > >9758 has been posted as the length of the extraction program - no doubt >future or previous versions will vary. It is correct for skyplot.exe. > >Usage : lobotomy -9758 <skyplot.exe >skyplot.arc (uudecoded first!) Two points: 1. I assume lobotomy must be run on UNIX(tm), or at least not DOS(no tm?). The DOS C libraries I am familiar with (Lattice and Turbo) will do CR-LF -> LF conversion for stdin and LF -> CR-LF conversion for stdout, which is not very useful for non-text files. To make this work with these libraries, you would have to open the input and output files as binary files. 2. You have just reinvented tail +9758c.
merlin@hqda-ai.UUCP (David S. Hayes) (04/08/88)
In article <2237@ttidca.TTI.COM> clark@ttidca.TTI.COM (Ralph Clark) writes: >archive. Inquiry to three local gurus failed to produce a simple one-line >shell command alternative. It will undoubtedly fail if you ask it to delete > >9758 has been posted as the length of the extraction program - no doubt > >Usage : lobotomy -9758 <skyplot.exe >skyplot.arc (uudecoded first!) A simple way to delete 9758 bytes from a file: dd if=infile of=outfile bs=1 skip=9758 -- David S. Hayes, The Merlin of Avalon PhoneNet: (202) 694-6900 UUCP: *!uunet!cos!hqda-ai!merlin ARPA: ai01@hios-pent.arpa
cuddy@convex.UUCP (04/09/88)
> ...Inquiry to three local gurus failed to produce a simple one-line > shell command alternative.... > ... 9758 has been posted as the length of the extraction program... > Usage : lobotomy -9758 <skyplot.exe >skyplot.arc (uudecoded first!) try tail +7959c skyplot.exe > skyplot.arc or as a shell script: ---lobot.sh---<snip>-- #!/bin/csh -f if ( $#argv != "3" ) then echo "Usage: lobotomy [bytes] [infile] [outfile]" exit 1 endif @ argv[1]++ tail +$1c $2 > $3 ---------------------- chmod 775 lobot.sh Usage: lobot.sh [bytes] [infile] [outfile] This works in 4.3BSD. Check to make sure that your tail can do n characters. (ours does n characters words or lines--I don't think it's a local enhancement although our company is prone to doing such things). Mike Cuddy, CONVEX Computer Corp {ihnp4,sun,allegra,uiucdcs}!convex!cuddy
doug@sys1.TANDY.COM (04/15/88)
{munch}
>Although the C program works, on a UNIX system it can be done using
>system tools:
> dd bs=1 skip=9758 if=self.extract of=real.arc
that's a tad slow, try
dd bs=9758 skip=1 if=self.extract of=real.arc
doug@sys1.tandy.com
\ T / \ T /
/ C \ / C \
-------------
USnail : 400 Atrium
One Tandy Center
Fort Worth, Tx, 76102.
AT&T : (817)-390-3001
UUCP : { ihnp4 || trsvax || soma || uiucuxc || ico }!sys1!doug
LOGICAL : 1110011 1111001 1110011 0110001 0100001
1100100 1101111 1110101 1110101 1100111
#include <standard.h>
#include <disclamer.h>
extern short int *employers();
disclamer(this_message)
char **this_message
{
register out;
if (*this_message == employers(opinon)) exit();
if (*this_message == reality) abort();
if (flames) {
out=open("/dev/null", O_WRONLY);
write(out, flames, sizeof(flames));
close(out);
}
}