$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created: $! Name : BINHEX $! By : arne $! Date : 13-APR-1994 15:12:10.38 $! Using: VMS_SHARE 8.4, (C) 1993 Andy Harper, Kings College London UK $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. BUILD.COM;1 $! 2. XBIN.1;1 $! 3. XBIN.C;1 $! 4. XBIN.DOC;1 $! $ set="set" $ set symbol/scope=(nolocal,noglobal) $ f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $ e="write sys$error ""%UNPACK"", " $ w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ if f$getsyi("CPU") .gt. 127 then $ goto start $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes,P4=size $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking ", P5, " of ", P6, " - ", P1, " - ", P4, " Blocks" $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT/NOJOURNAL 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE;PROCEDURE SkipPartsep LOCAL m; LOOP m:=MARK(NONE);EXITIF m=END_OF(b);DELETE(m);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE ProcessLine LOCAL c,s,l,b, n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF; MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1); p := p+1;CASE c FROM ' ' TO '`' ['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[ ' ']: p:=p+1;[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode LOCAL m;POSITION(BEGINNING_OF(b));LOOP m:=MARK(NONE);EXITIF m= END_OF(b);DELETE(m);IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")= 1 THEN SkipPartSep;ELSE ProcessLine;MOVE_HORIZONTAL(1);ENDIF;ENDLOOP; ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET(SUCCESS,OFF);SET(INFORMATIONAL, OFF);t:="0123456789ABCDEF";f:=GET_INFO(COMMAND_LINE,"file_name");b:= CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO(COMMAND_LINE,"output_file")); QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' X$`20cc`20xbin X$`20link`20xbin,sys$input/opt Xsys$share:vaxcrtl/share X$`20xbin=="$"+f$env("DEFAULT")+"xbin.exe" X$`20exit $ call unpack BUILD.COM;1 1616511197 "" 1 1 4 $! $ create 'f' X.TH`20XBIN`20local`20"24`20Mar`201985" X.UC`204 X.SH`20NAME Xxbin`20`5C-`20convert`20mailable`20format`20BinHex`20file`20into`20binary`20be Vfore`20downloading Xto`20MacTerminal X.SH`20SYNOPSIS X.B`20xbin X`5B X.B`20`5C-o X`5D X`5B X.B`20`5C-v X`5D X`5B X.B`20`5C-l X`5D X`5B`5B X.B`20`5C-n Xname X`5D`20file`5D`20... X.SH`20DESCRIPTION X.I`20Xbin Xconverts`20a`20file`20created`20by`20BinHex`20(usually Xnamed`20with`20one`20of`20the`20extensions`20".hex",`20".hcx",`20or`20".hqx") V Xinto`20three`20host-system`20files`20suitable`20for`20downloading`20to`20a XMacintosh`20via`20macput. XThis`20program`20is`20designed`20for`20use`20with`20the`201.1`20Release Xversion`20of`20MacTerminal,`20but`20includes`20a`20compatibility`20option`20fo Vr`20the Xold`20-0.15X`20Almost-Alpha`20version. X.PP XThe X.B`20-l X(list)`20option`20reads`20the`20header`20information`20and Xprints`20out`20all`20the`20useful`20information`20there, Xwithout`20creating`20any`20converted`20output`20files. X.PP XThe X.B`20-v X(verbose)`20option`20prints`20a`20line`20for`20each`20file`20to`20be`20convert Ved,`20indicating Xthe`20input`20and`20output`20file`20names. X.PP XThe X.B`20-n Xname Xoption`20allows`20the`20user`20to`20specify`20the`20name`20to`20use`20when`20c Vreating Xthe`20host`20files`20and`20the`20eventual`20name`20to`20use`20on`20the`20mac. V XThis`20option`20must`20precede`20the`20input`20file`20name`20it`20is`20to`20af Vfect. X.PP XIf`20this`20option`20is`20not`20used,`20the`20names`20will`20be`20derived`20fr Vom Xeither`20the`20input`20file`20name`20(.hex`20or`20.hcx`20files), Xor`20the`20name`20encoded`20in`20the`20header`20information`20(.hqx`20files). V XSpaces`20and`20slashes`20will`20be`20converted`20to`20underscores,`20and Xthe`20.h?x`20extension`20will`20be`20deleted,`20if`20one`20is`20included`20in V`20the Xinput`20file`20name. X.PP XA`20file`20name`20of`20"-"`20indicates`20that`20the`20input`20should`20be`20ta Vken`20from`20stdin. XIf`20no`20mac`20file`20name`20is`20specified,`20the`20default`20name`20(for`20 V.hex`20or`20.hcx`20files) Xis`20"stdin". X.PP XMail`20or`20news`20headers`20and`20signatures`20need`20not`20be`20manually Xstripped`20--`20xbin`20will`20ignore`20pretty`20much`20anything Xit`20doesn't`20need. X.PP X.I`20xbin Xcreates`20three`20host-system`20files`20from`20each`20input`20file: X.IB`20name`20.info`20, X.IB`20name`20.data`20, Xand X.IB`20name`20.rsrc`20. X.PP XThe X.B`20`5C-o Xflag`20specifies`20"old"`20(version`20-0.15X)`20MacTerminal`20compatibility`20 Vmode. X.SH`20BUGS XThe`20"LOCKED"`20bit`20in`20the`20flags`20cannot`20be`20set`20by`20xbin. XThis`20is`20due`20to`20a`20bug`20in`20MacTerminal,`20which`20sets`20the`20flag Vs Xwhen`20the`20file`20is`20created,`20rather`20than`20after`20it`20has`20been Xtransfered,`20resulting`20in`20it`20not`20being`20able`20to`20write`20the Xfile. X.PP XInput`20files`20must`20contain`20a`20line`20starting`20with`20"(This`20file" Xto`20detect`20the`20beginning`20of`20the`20BinHex`20information. X.SH`20SEE`20ALSO Xmacput(1),`20macget(1) X.SH`20AUTHOR XDave`20Johnson,`20Brown`2012/16/84; XCRC`20handling`20code`20by`20Darin`20Adler,`20TMQ`20Software`203/16/85 $ call unpack XBIN.1;1 - 673697729 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" 5 2 4 $! $ create 'f' X#ifndef`20lint Xstatic`20char`20version`5B`5D`20=`20"xbin.c`20Version`202.3`2009/30/85"; X#endif`20lint X X#include`20 X#include`20 X#include`20 X#ifdef`20VMS X#define`20rindex`20strrchr X#define`20MAXNAMLEN`2080 X#else X#include`20 X#endif X X#ifdef`20MAXNAMLEN`09/*`204.2`20BSD`20*/ X#define`20FNAMELEN`20MAXNAMLEN X#else X#define`20FNAMELEN`20DIRSIZ X#endif X X#ifdef`20BSD X#include`20 X#include`20 X#define`20search_last`20rindex Xextern`20char`20*rindex(); X#else X#include`20 Xextern`20long`20timezone; X#define`20search_last`20strrchr Xextern`20char`20*strrchr(); X#endif X X/*`20Mac`20time`20of`2000:00:00`20GMT,`20Jan`201,`201970`20*/ X#define`20TIMEDIFF`200x7c25b080 X X#define`20DATABYTES`20128 X X#define`20BYTEMASK`200xff X#define`20BYTEBIT`200x100 X#define`20WORDMASK`200xffff X#define`20WORDBIT`200x10000 X X#define`20NAMEBYTES`2063 X#define`20H_NLENOFF`201 X#define`20H_NAMEOFF`202 X X/*`2065`20<->`2080`20is`20the`20FInfo`20structure`20*/ X#define`20H_TYPEOFF`2065 X#define`20H_AUTHOFF`2069 X#define`20H_FLAGOFF`2073 X X#define`20H_LOCKOFF`2081 X#define`20H_DLENOFF`2083 X#define`20H_RLENOFF`2087 X#define`20H_CTIMOFF`2091 X#define`20H_MTIMOFF`2095 X X#define`20H_OLD_DLENOFF`2081 X#define`20H_OLD_RLENOFF`2085 X X#define`20F_BUNDLE`200x2000 X#define`20F_LOCKED`200x8000 X Xstruct`20macheader`20`7B X`09char`20m_name`5BNAMEBYTES+1`5D; X`09char`20m_type`5B4`5D; X`09char`20m_author`5B4`5D; X`09short`20m_flags; X`09long`20m_datalen; X`09long`20m_rsrclen; X`09long`20m_createtime; X`09long`20m_modifytime; X`7D`20mh; X Xstruct`20filenames`20`7B X`09char`20f_info`5B256`5D; X`09char`20f_data`5B256`5D; X`09char`20f_rsrc`5B256`5D; X`7D`20files; X Xint`20pre_beta;`09/*`20options`20*/ Xint`20listmode; Xint`20verbose; X Xint`20compressed;`09/*`20state`20variables`20*/ Xint`20qformat; XFILE`20*ifp; X X/* X`20*`20xbin`20--`20unpack`20BinHex`20format`20file`20into`20suitable X`20*`20format`20for`20downloading`20with`20macput X`20*`20Dave`20Johnson,`20Brown`20University`20Computer`20Science X`20* X`20*`20(c)`201984`20Brown`20University X`20*`20may`20be`20used`20but`20not`20sold`20without`20permission X`20* X`20*`20created`20ddj`2012/16/84 X`20*`20revised`20ddj`2003/10/85`20--`20version`204.0`20compatibility,`20other V`20minor`20mods X`20*`20revised`20ddj`2003/11/85`20--`20strip`20LOCKED`20bit`20from`20m_flags X`20*`20revised`20ahm`2003/12/85`20--`20System`20V`20compatibility X`20*`20revised`20dba`2003/16/85`20--`20(Darin`20Adler,`20TMQ`20Software)`20`20 V4.0`20EOF`20fixed, X`20*`09`09`09`20`20`204.0`20checksum`20added X`20*`20revised`20ddj`2003/17/85`20--`20extend`20new`20features`20to`20older`20 Vformats:`20-l,`20stdin X`20*`20revised`20ddj`2003/24/85`20--`20check`20for`20filename`20truncation,`20 Vallow`20multiple`20files X`20*`20revised`20ddj`2003/26/85`20--`20fixed`20USG`20botches,`20many`20problem Vs`20w/multiple`20files X`20*`20revised`20jcb`2003/30/85`20--`20(Jim`20Budler,`20amdcad!jimb),`20revise Vd`20for`20compatibility X`20*`09`09`09`20`20`20with`2016-bit`20int`20machines X`20*`20revised`20dl`20`2006/16/85`20--`20(Dan`20LaLiberte,`20liberte@uiucdcs) V`20character X`20*`09`09`09`20`20`20translation`20speedup X`20*`20revised`20ddj`2009/30/85`20--`20fixed`20problem`20with`20run`20of`20RUN VCHAR X`20*`20revised`20wpb`2004/18/86`20--`20put`20in`20mods`20for`20VMS X`20*/ Xchar`20usage`5B`5D`20=`20"usage:`20`5C"xbin`20`5B-v`5D`20`5B-l`5D`20`5B-o`5D V`20`5B-n`20name`5D`20`5B-`5D`20filename`5C"`5Cn"; X#ifdef`20VMS Xchar`20legal`5B`5D`20=`20"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz V0123456789$_-"; X#endif X Xmain(ac,`20av) Xchar`20**av; X`7B X`09char`20*filename,`20*macname; X X`09filename`20=`20"";`20macname`20=`20""; X`09ac--;`20av++; X`09while`20(ac)`20`7B X`09`09if`20(av`5B0`5D`5B0`5D`20==`20'-')`20`7B X`09`09`09switch`20(av`5B0`5D`5B1`5D)`20`7B X`09`09`09case`20'`5C0': X`09`09`09`09filename`20=`20"-"; X`09`09`09`09break; X`09`09`09case`20'v': X`09`09`09`09verbose++; X`09`09`09`09break; X`09`09`09case`20'l': X`09`09`09`09listmode++; X`09`09`09`09break; X`09`09`09case`20'o': X`09`09`09`09pre_beta++; X`09`09`09`09break; X`09`09`09case`20'n': X`09`09`09`09if`20(ac`20>`201)`20`7B X`09`09`09`09`09ac--;`20av++; X`09`09`09`09`09macname`20=`20av`5B0`5D; X`09`09`09`09`09filename`20=`20""; X`09`09`09`09`09break; X`09`09`09`09`7D X`09`09`09`09else X`09`09`09`09`09goto`20bad_usage; X`09`09`09default: X`09`09`09`09goto`20bad_usage; X`09`09`09`7D X`09`09`7D X`09`09else X`09`09`09filename`20=`20av`5B0`5D; X`09`09if`20(filename`5B0`5D`20!=`20'`5C0')`20`7B X`09`09`09setup_files(filename,`20macname); X`09`09`09if`20(listmode)`20`7B X`09`09`09`09print_header(); X`09`09`09`7D X`09`09`09else`20`7B X`09`09`09`09process_forks(); X`09`09`09`09/*`20now`20that`20we`20know`20the`20size`20of`20the`20forks`20*/ X`09`09`09`09forge_info(); X`09`09`09`7D X`09`09`09if`20(ifp`20!=`20stdin) X`09`09`09`09fclose(ifp); X`09`09`09macname`20=`20""; X`09`09`09ifp`20=`20NULL;`09`09/*`20reset`20state`20*/ X`09`09`09qformat`20=`200; X`09`09`09compressed`20=`200; X`09`09`7D X`09`09ac--;`20av++; X`09`7D X`09if`20(*filename`20==`20'`5C0')`20`7B Xbad_usage: X`09`09fprintf(stderr,`20usage); X`09`09exit(1); X`09`7D X`7D X Xstatic`20char`20*extensions`5B`5D`20=`20`7B X`09".hqx", X`09".hcx", X`09".hex", X`09"", X`09NULL X`7D; X Xsetup_files(filename,`20macname) Xchar`20*filename;`09`09/*`20input`20file`20name`20--`20extension`20optional`20 V*/ Xchar`20*macname;`09`09/*`20name`20to`20use`20on`20the`20mac`20side`20of`20thin Vgs`20*/ X`7B X`09char`20namebuf`5B256`5D,`20*np; X`09char`20**ep; X`09int`20n; X`09struct`20stat`20stbuf; X`09long`20curtime; X X`09if`20(filename`5B0`5D`20==`20'-')`20`7B X`09`09ifp`20=`20stdin; X`09`09filename`20=`20"stdin"; X`09`7D X`09else`20`7B X`09`09/*`20find`20input`20file`20and`20open`20it`20*/ X`09`09for`20(ep`20=`20extensions;`20*ep`20!=`20NULL;`20ep++)`20`7B X`09`09`09sprintf(namebuf,`20"%s%s",`20filename,`20*ep); X`09`09`09if`20(stat(namebuf,`20`26stbuf)`20==`200) X`09`09`09`09break; X`09`09`7D X`09`09if`20(*ep`20==`20NULL)`20`7B X`09`09`09perror(namebuf); X`09`09`09exit(-1); X`09`09`7D X`09`09ifp`20=`20fopen(namebuf,`20"r"); X`09`09if`20(ifp`20==`20NULL)`20`7B X`09`09`09perror(namebuf); X`09`09`09exit(-1); X`09`09`7D X`09`7D X`09if`20(ifp`20==`20stdin)`20`7B X`09`09curtime`20=`20time(0); X`09`09mh.m_createtime`20=`20curtime; X`09`09mh.m_modifytime`20=`20curtime; X`09`7D X`09else`20`7B X`09`09mh.m_createtime`20=`20stbuf.st_mtime; X`09`09mh.m_modifytime`20=`20stbuf.st_mtime; X`09`7D X`09if`20(listmode`20`7C`7C`20verbose)`20`7B X`09`09fprintf(stderr,`20"%s`20%s%s", X`09`09`09listmode`20?`20"`5CnListing"`20:`20"Converting", X`09`09`09namebuf,`20listmode`20?`20":`5Cn"`20:`20"`20"); X`09`7D X X`09qformat`20=`20find_header();`20/*`20eat`20mailer`20header`20`26cetera,`20in Vtuit`20format`20*/ X X`09if`20(qformat) X`09`09do_q_header(macname); X`09else X`09`09do_o_header(macname,`20filename); X X`09/*`20make`20sure`20host`20file`20name`20doesn't`20get`20truncated`20beyond V`20recognition`20*/ X`09n`20=`20strlen(mh.m_name); X`09if`20(n`20>`20FNAMELEN`20-`202) X`09`09n`20=`20FNAMELEN`20-`202; X`09`20strncpy(namebuf,`20mh.m_name,`20n); X`09namebuf`5Bn`5D`20=`20'`5C0'; X X#ifdef`20VMS X`09/*`20get`20rid`20of`20troublesome`20characters`20*/ X`09for`20(np`20=`20namebuf;`20*np;`20np++) X`09`09if`20(strchr(legal,`20*np)`20==`200) X`09`09`09*np`20=`20'_'; X#else X`09/*`20get`20rid`20of`20troublesome`20characters`20*/ X`09for`20(np`20=`20namebuf;`20*np;`20np++) X`09`09if`20(*np`20==`20'`20'`20`7C`7C`20*np`20==`20'/'`20`7C`7C`20*np`20==`20' V.') X`09`09`09*np`20=`20'_'; X#endif X`09sprintf(files.f_data,`20"%s.data",`20namebuf); X`09sprintf(files.f_rsrc,`20"%s.rsrc",`20namebuf); X`09sprintf(files.f_info,`20"%s.info",`20namebuf); X`09if`20(verbose) X`09`09fprintf(stderr,`20"==>`20%s.`7Binfo,data,rsrc`7D`5Cn",`20namebuf); X`7D X X/*`20print`20out`20header`20information`20in`20human-readable`20format`20*/ Xprint_header() X`7B X`09char`20*ctime(); X X`09printf("macname:`20%s`5Cn",`20mh.m_name); X`09printf("filetype:`20%.4s,`20",`20mh.m_type); X`09printf("author:`20%.4s,`20",`20mh.m_author); X`09printf("flags:`200x%x`5Cn",`20mh.m_flags); X`09if`20(qformat)`20`7B X`09`09printf("data`20length:`20%ld,`20",`20mh.m_datalen); X`09`09printf("rsrc`20length:`20%ld`5Cn",`20mh.m_rsrclen); X`09`7D X`09if`20(!pre_beta)`20`7B X`09`09printf("create`20time:`20%s",`20ctime(`26mh.m_createtime)); X`09`7D X`7D X Xprocess_forks() X`7B X`09if`20(qformat)`20`7B X`09`09/*`20read`20data`20and`20resource`20forks`20of`20.hqx`20file`20*/ X`09`09do_q_fork(files.f_data,`20mh.m_datalen); X`09`09do_q_fork(files.f_rsrc,`20mh.m_rsrclen); X`09`7D X`09else X`09`09do_o_forks(); X`7D X X/*`20write`20out`20.info`20file`20from`20information`20in`20the`20mh`20structu Vre`20*/ Xforge_info() X`7B X`09static`20char`20buf`5BDATABYTES`5D; X`09char`20*np; X`09FILE`20*fp; X`09int`20n; X`09long`20tdiff; X`09struct`20tm`20*tp; X#ifdef`20BSD X`09struct`20timeb`20tbuf; X#else X`09long`20bs; X#endif X X`09for`20(np`20=`20mh.m_name;`20*np;`20np++) X`09`09if`20(*np`20==`20'_')`20*np`20=`20'`20'; X X`09buf`5BH_NLENOFF`5D`20=`20n`20=`20np`20-`20mh.m_name; X`09strncpy(buf`20+`20H_NAMEOFF,`20mh.m_name,`20n); X`09strncpy(buf`20+`20H_TYPEOFF,`20mh.m_type,`204); X`09strncpy(buf`20+`20H_AUTHOFF,`20mh.m_author,`204); X`09put2(buf`20+`20H_FLAGOFF,`20mh.m_flags`20`26`20`7EF_LOCKED); X`09if`20(pre_beta)`20`7B X`09`09put4(buf`20+`20H_OLD_DLENOFF,`20mh.m_datalen); X`09`09put4(buf`20+`20H_OLD_RLENOFF,`20mh.m_rsrclen); X`09`7D X`09else`20`7B X`09`09put4(buf`20+`20H_DLENOFF,`20mh.m_datalen); X`09`09put4(buf`20+`20H_RLENOFF,`20mh.m_rsrclen); X X`09`09/*`20convert`20unix`20file`20time`20to`20mac`20time`20format`20*/ X#ifdef`20BSD X`09`09ftime(`26tbuf); X`09`09tp`20=`20localtime(`26tbuf.time); X`09`09tdiff`20=`20TIMEDIFF`20-`20tbuf.timezone`20*`2060; X`09`09if`20(tp->tm_isdst) X`09`09`09tdiff`20+=`2060`20*`2060; X#else X`09`09/*`20I`20hope`20this`20is`20right!`20-andy`20*/ X`09`09time(`26bs); X`09`09tp`20=`20localtime(`26bs); X`09`09tdiff`20=`20TIMEDIFF`20-`20timezone; X`09`09if`20(tp->tm_isdst) X`09`09`09tdiff`20+=`2060`20*`2060; X#endif X`09`09put4(buf`20+`20H_CTIMOFF,`20mh.m_createtime`20+`20tdiff); X`09`09put4(buf`20+`20H_MTIMOFF,`20mh.m_modifytime`20+`20tdiff); X`09`7D X`09fp`20=`20fopen(files.f_info,`20"w"); X`09if`20(fp`20==`20NULL)`20`7B X`09`09perror("info`20file"); X`09`09exit(-1); X`09`7D X`09fwrite(buf,`201,`20DATABYTES,`20fp); X`09fclose(fp); X`7D X X/*`20eat`20characters`20until`20header`20detected,`20return`20which`20format V`20*/ Xfind_header() X`7B X`09int`20c,`20at_bol; X`09char`20ibuf`5BBUFSIZ`5D; X X`09/*`20look`20for`20"(This`20file`20...)"`20line`20*/ X`09while`20(fgets(ibuf,`20BUFSIZ,`20ifp)`20!=`20NULL)`20`7B X`09`09if`20(strncmp(ibuf,`20"(This`20file",`2010)`20==`200) X`09`09`09break; X`09`7D X`09at_bol`20=`201; X`09while`20((c`20=`20getc(ifp))`20!=`20EOF)`20`7B X`09`09switch`20(c)`20`7B X`09`09case`20'`5Cn': X`09`09case`20'`5Cr': X`09`09`09at_bol`20=`201; X`09`09`09break; X`09`09case`20':': X`09`09`09if`20(at_bol)`09/*`20q`20format`20*/ X`09`09`09`09return`201; X`09`09`09break; X`09`09case`20'#': X`09`09`09if`20(at_bol)`20`7B`09/*`20old`20format`20*/ X`09`09`09`09ungetc(c,`20ifp); X`09`09`09`09return`200; X`09`09`09`7D X`09`09`09break; X`09`09default: X`09`09`09at_bol`20=`200; X`09`09`09break; X`09`09`7D X`09`7D X X`09fprintf(stderr,`20"unexpected`20EOF`5Cn"); X`09exit(2); X`09/*`20NOTREACHED`20*/ X`7D X Xstatic`20unsigned`20int`20crc; X Xshort`20get2q(); Xlong`20get4q(); X X/*`20read`20header`20of`20.hqx`20file`20*/ Xdo_q_header(macname) Xchar`20*macname; X`7B X`09char`20namebuf`5B256`5D;`09`09/*`20big`20enough`20for`20both`20att`20`26`20 Vbsd`20*/ X`09int`20n; X`09unsigned`20int`20calc_crc,`20file_crc; X X`09crc`20=`200;`09`09`09/*`20compute`20a`20crc`20for`20the`20header`20*/ X`09q_init();`09`09`09/*`20reset`20static`20variables`20*/ X X`09n`20=`20getq();`09`09`09/*`20namelength`20*/ X`09n++;`09`09`09`09/*`20must`20read`20trailing`20null`20also`20*/ X`09getqbuf(namebuf,`20n);`09`09/*`20read`20name`20*/ X`09if`20(macname`5B0`5D`20==`20'`5C0') X`09`09macname`20=`20namebuf; X X`09n`20=`20strlen(macname); X`09if`20(n`20>`20NAMEBYTES) X`09`09n`20=`20NAMEBYTES; X`09strncpy(mh.m_name,`20macname,`20n); X`09mh.m_name`5Bn`5D`20=`20'`5C0'; X X`09getqbuf(mh.m_type,`204); X`09getqbuf(mh.m_author,`204); X`09mh.m_flags`20=`20get2q(); X`09mh.m_datalen`20=`20get4q(); X`09mh.m_rsrclen`20=`20get4q(); X X`09comp_q_crc(0); X`09comp_q_crc(0); X`09calc_crc`20=`20crc; X`09file_crc`20=`20get2q(); X`09verify_crc(calc_crc,`20file_crc); X`7D X Xdo_q_fork(fname,`20len) Xchar`20*fname; Xregister`20long`20len; X`7B X`09FILE`20*outf; X`09register`20int`20c,`20i; X`09unsigned`20int`20calc_crc,`20file_crc; X X`09outf`20=`20fopen(fname,`20"w"); X`09if`20(outf`20==`20NULL)`20`7B X`09`09perror(fname); X`09`09exit(-1); X`09`7D X X`09crc`20=`200;`09/*`20compute`20a`20crc`20for`20a`20fork`20*/ X X`09if`20(len) X`09`09for`20(i`20=`200;`20i`20<`20len;`20i++)`20`7B X`09`09`09if`20((c`20=`20getq())`20==`20EOF)`20`7B X`09`09`09`09fprintf(stderr,`20"unexpected`20EOF`5Cn"); X`09`09`09`09exit(2); X`09`09`09`7D X`09`09`09putc(c,`20outf); X`09`09`7D X X`09comp_q_crc(0); X`09comp_q_crc(0); X`09calc_crc`20=`20crc; X`09file_crc`20=`20get2q(); X`09verify_crc(calc_crc,`20file_crc); X`09fclose(outf); X`7D X X/*`20verify_crc();`20--`20check`20if`20crc's`20check`20out`20*/ Xverify_crc(calc_crc,`20file_crc) Xunsigned`20int`20calc_crc,`20file_crc; X`7B X`09calc_crc`20`26=`20WORDMASK; X`09file_crc`20`26=`20WORDMASK; X X`09if`20(calc_crc`20!=`20file_crc)`20`7B X`09`09fprintf(stderr,`20"CRC`20error`5Cn---------`5Cn"); X`09`09fprintf(stderr,`20"CRC`20in`20file:`5Ct0x%x`5Cn",`20file_crc); X`09`09fprintf(stderr,`20"calculated`20CRC:`5Ct0x%x`5Cn",`20calc_crc); X`09`09exit(3); X`09`7D X`7D X Xstatic`20int`20eof; Xstatic`20char`20obuf`5B3`5D; Xstatic`20char`20*op,`20*oend; X X/*`20initialize`20static`20variables`20for`20q`20format`20input`20*/ Xq_init() X`7B X`09eof`20=`200; X`09op`20=`20obuf; X`09oend`20=`20obuf`20+`20sizeof`20obuf; X`7D X X/*`20get2q();`20q`20format`20--`20read`202`20bytes`20from`20input,`20return`20 Vshort`20*/ Xshort Xget2q() X`7B X`09register`20int`20c; X`09short`20value`20=`200; X X`09c`20=`20getq(); X`09value`20=`20(c`20`26`20BYTEMASK)`20<<`208; X`09c`20=`20getq(); X`09value`20`7C=`20(c`20`26`20BYTEMASK); X X`09return`20value; X`7D X X/*`20get4q();`20q`20format`20--`20read`204`20bytes`20from`20input,`20return`20 Vlong`20*/ Xlong Xget4q() X`7B X`09register`20int`20c,`20i; X`09long`20value`20=`200L; X X`09for`20(i`20=`200;`20i`20<`204;`20i++)`20`7B X`09`09c`20=`20getq(); X`09`09value`20<<=`208; X`09`09value`20`7C=`20(c`20`26`20BYTEMASK); X`09`7D X`09return`20value; X`7D X X/*`20getqbuf();`20q`20format`20--`20read`20n`20characters`20from`20input`20int Vo`20buf`20*/ X/*`09`09All`20or`20nothing`20--`20no`20partial`20buffer`20allowed`20*/ Xgetqbuf(buf,`20n) Xregister`20char`20*buf; Xregister`20int`20n; X`7B X`09register`20int`20c,`20i; X X`09for`20(i`20=`200;`20i`20<`20n;`20i++)`20`7B X`09`09if`20((c`20=`20getq())`20==`20EOF) X`09`09`09return`20EOF; X`09`09*buf++`20=`20c; X`09`7D X`09return`200; X`7D X X#define`20RUNCHAR`200x90 X X/*`20q`20format`20--`20return`20one`20byte`20per`20call,`20keeping`20track`20o Vf`20run`20codes`20*/ Xgetq() X`7B X`09register`20int`20c; X X`09if`20((c`20=`20getq_nocrc())`20==`20EOF) X`09`09return`20EOF; X`09comp_q_crc((unsigned)c); X`09return`20c; X`7D X Xgetq_nocrc() X`7B X`09static`20int`20rep,`20lastc; X`09int`20c; X X`09if`20(rep)`20`7B X`09`09rep--; X`09`09return`20lastc; X`09`7D X`09if`20((c`20=`20getq_raw())`20==`20EOF)`20`7B X`09`09return`20EOF; X`09`7D X`09if`20(c`20==`20RUNCHAR)`20`7B X`09`09if`20((rep`20=`20getq_raw())`20==`20EOF) X`09`09`09return`20EOF; X`09`09if`20(rep`20!=`200)`20`7B X`09`09`09/*`20already`20returned`20one,`20about`20to`20return`20another`20*/ X`09`09`09rep`20-=`202; X`09`09`09return`20lastc; X`09`09`7D X`09`09else`20`7B X`09`09`09lastc`20=`20RUNCHAR; X`09`09`09return`20RUNCHAR; X`09`09`7D X`09`7D X`09else`20`7B X`09`09lastc`20=`20c; X`09`09return`20c; X`09`7D X`7D X X/*`20q`20format`20--`20return`20next`208`20bits`20from`20file`20without`20inte Vrpreting`20run`20codes`20*/ Xgetq_raw() X`7B X`09char`20ibuf`5B4`5D; X`09register`20char`20*ip`20=`20ibuf,`20*iend`20=`20ibuf`20+`20sizeof`20ibuf; X`09int`20c; X X`09if`20(op`20==`20obuf)`20`7B X`09`09for`20(ip`20=`20ibuf;`20ip`20<`20iend;`20ip++)`20`7B X`09`09`09if`20((c`20=`20get6bits())`20==`20EOF) X`09`09`09`09if`20(ip`20<=`20`26ibuf`5B1`5D) X`09`09`09`09`09return`20EOF; X`09`09`09`09else`20if`20(ip`20==`20`26ibuf`5B2`5D) X`09`09`09`09`09eof`20=`201; X`09`09`09`09else X`09`09`09`09`09eof`20=`202; X`09`09`09*ip`20=`20c; X`09`09`7D X`09`09obuf`5B0`5D`20=`20(ibuf`5B0`5D`20<<`202`20`7C`20ibuf`5B1`5D`20>>`204); X`09`09obuf`5B1`5D`20=`20(ibuf`5B1`5D`20<<`204`20`7C`20ibuf`5B2`5D`20>>`202); X`09`09obuf`5B2`5D`20=`20(ibuf`5B2`5D`20<<`206`20`7C`20ibuf`5B3`5D); X`09`7D X`09if`20((eof)`20`26`20(op`20>=`20`26obuf`5Beof`5D)) X`09`09return`20EOF; X`09c`20=`20*op++; X`09if`20(op`20>=`20oend) X`09`09op`20=`20obuf; X`09return`20(c`20`26`20BYTEMASK); X`7D X X/* Xchar`20tr`5B`5D`20=`20"!`5C"#$%`26'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ`5B V`60abcdefhijklmpqr"; X`09`20`20`20`20`200`20123456789abcdef0123456789abcdef0123456789abcdef012345678 V9abcdef X`09`20`20`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`201`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`202`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`203`20 Xtrlookup`20is`20used`20to`20translate`20by`20direct`20lookup.`20`20The`20input V`20character Xis`20an`20index`20into`20trlookup.`20`20If`20the`20result`20is`200xFF,`20a`20b Vad`20char`20has`20been`20read. XAdded`20by:`20`20Dan`20LaLiberte,`20liberte@uiucdcs.Uiuc.ARPA,`20ihnp4!uiucdcs V!liberte X*/ Xchar`20trlookup`5B83`5D`20=`20`7B`20`090xFF,`200x00,`200x01,`200x02,`200x03, V`200x04,`200x05,`200x06, X`09`09`090x07,`200x08,`200x09,`200x0A,`200x0B,`200x0C,`200xFF,`200xFF, X`09`09`090x0D,`200x0E,`200x0F,`200x10,`200x11,`200x12,`200x13,`200xFF, X`09`09`090x14,`200x15,`200xFF,`200xFF,`200xFF,`200xFF,`200xFF,`200xFF, X`09`09`090x16,`200x17,`200x18,`200x19,`200x1A,`200x1B,`200x1C,`200x1D, X`09`09`090x1E,`200x1F,`200x20,`200x21,`200x22,`200x23,`200x24,`200xFF, X`09`09`090x25,`200x26,`200x27,`200x28,`200x29,`200x2A,`200x2B,`200xFF, X`09`09`090x2C,`200x2D,`200x2E,`200x2F,`200xFF,`200xFF,`200xFF,`200xFF, X`09`09`090x30,`200x31,`200x32,`200x33,`200x34,`200x35,`200x36,`200xFF, X`09`09`090x37,`200x38,`200x39,`200x3A,`200x3B,`200x3C,`200xFF,`200xFF, X`09`09`090x3D,`200x3E,`200x3F`20`7D; X X/*`20q`20format`20--`20decode`20one`20byte`20into`206`20bit`20binary`20*/ Xget6bits() X`7B X`09register`20int`20c; X`09register`20int`20tc; X X`09while`20(1)`20`7B X`09`09c`20=`20getc(ifp); X`09`09switch`20(c)`20`7B X`09`09case`20'`5Cn': X`09`09case`20'`5Cr': X`09`09`09continue; X`09`09case`20':': X`09`09case`20EOF: X`09`09`09return`20EOF; X`09`09default: X`09`09`20`09tc`20=`20((c-'`20')`20<`2083)`20?`20trlookup`5Bc-'`20'`5D`20:`200x Vff; X/*`09`09`09fprintf(stderr,`20"c`20=`20'%c'`20`20tc`20=`20%4x`5Cn",`20c,`20tc); V`20*/ X`09`09`09if`20(tc`20!=`200xff) X`09`09`09`09return`20(tc); X`09`09`09fprintf(stderr,`20"bad`20char:`20'%c'`5Cn",`20c); X`09`09`09return`20EOF; X`09`09`7D X`09`7D X`7D X X X#define`20CRCCONSTANT`200x1021 X Xcomp_q_crc(c) Xregister`20unsigned`20int`20c; X`7B X`09register`20int`20i; X`09register`20unsigned`20long`20temp`20=`20crc; X X`09for`20(i=0;`20i<8;`20i++)`20`7B X`09`09c`20<<=`201; X`09`09if`20((temp`20<<=`201)`20`26`20WORDBIT) X`09`09`09temp`20=`20(temp`20`26`20WORDMASK)`20`5E`20CRCCONSTANT; X`09`09temp`20`5E=`20(c`20>>`208); X`09`09c`20`26=`20BYTEMASK; X`09`7D X`09crc`20=`20temp; X`7D X X/*`20old`20format`20--`20process`20.hex`20and`20.hcx`20files`20*/ Xdo_o_header(macname,`20filename) Xchar`20*macname,`20*filename; X`7B X`09char`20namebuf`5B256`5D;`09`09/*`20big`20enough`20for`20both`20att`20`26`20 Vbsd`20*/ X`09char`20ibuf`5BBUFSIZ`5D; X`09int`20n; X X`09/*`20set`20up`20name`20for`20output`20files`20*/ X`09if`20(macname`5B0`5D`20==`20'`5C0')`20`7B X`09`09strcpy(namebuf,`20filename); X X`09`09/*`20strip`20directories`20*/ X`09`09macname`20=`20search_last(namebuf,`20'/'); X`09`09if`20(macname`20==`20NULL) X`09`09`09macname`20=`20namebuf; X`09`09else X`09`09`09macname++; X X`09`09/*`20strip`20extension`20*/ X`09`09n`20=`20strlen(macname); X`09`09if`20(n`20>`204)`20`7B X`09`09`20`20`20`20n`20-=`204; X`09`09`20`20`20`20if`20(macname`5Bn`5D`20==`20'.'`20`26`26`20macname`5Bn+1`5D V`20==`20'h' X`09`09`09`09`09`20`20`20`20`26`26`20macname`5Bn+3`5D`20==`20'x') X`09`09`09`20`20`20`20macname`5Bn`5D`20=`20'`5C0'; X`09`09`7D X`09`7D X`09n`20=`20strlen(macname); X`09if`20(n`20>`20NAMEBYTES) X`09`09n`20=`20NAMEBYTES; X`09strncpy(mh.m_name,`20macname,`20n); X`09mh.m_name`5Bn`5D`20=`20'`5C0'; X X`09/*`20read`20"#TYPEAUTH$flag"`20`20line`20*/ X`09if`20(fgets(ibuf,`20BUFSIZ,`20ifp)`20==`20NULL)`20`7B X`09`09fprintf(stderr,`20"unexpected`20EOF`5Cn"); X`09`09exit(2); X`09`7D X`09n`20=`20strlen(ibuf); X`09if`20(n`20>=`207`20`26`26`20ibuf`5B0`5D`20==`20'#'`20`26`26`20ibuf`5Bn-6`5D V`20==`20'$')`20`7B X`09`09if`20(n`20>=`2011) X`09`09`09strncpy(mh.m_type,`20`26ibuf`5B1`5D,`204); X`09`09if`20(n`20>=`2015) X`09`09`09strncpy(mh.m_author,`20`26ibuf`5B5`5D,`204); X`09`09sscanf(`26ibuf`5Bn-5`5D,`20"%4hx",`20`26mh.m_flags); X`09`7D X`7D X Xdo_o_forks() X`7B X`09char`20ibuf`5BBUFSIZ`5D; X`09int`20forks`20=`200,`20found_crc`20=`200; X`09unsigned`20int`20calc_crc,`20file_crc; X`09extern`20long`20make_file(); X X X`09crc`20=`200;`09/*`20calculate`20a`20crc`20for`20both`20forks`20*/ X X`09/*`20create`20empty`20files`20ahead`20of`20time`20*/ X`09close(creat(files.f_data,`200666)); X`09close(creat(files.f_rsrc,`200666)); X X`09while`20(!found_crc`20`26`26`20fgets(ibuf,`20BUFSIZ,`20ifp)`20!=`20NULL)`20 V`7B X`09`09if`20(forks`20==`200`20`26`26`20strncmp(ibuf,`20"***COMPRESSED",`2013) V`20==`200)`20`7B X`09`09`09compressed++; X`09`09`09continue; X`09`09`7D X`09`09if`20(strncmp(ibuf,`20"***DATA",`207)`20==`200)`20`7B X`09`09`09mh.m_datalen`20=`20make_file(files.f_data,`20compressed); X`09`09`09forks++; X`09`09`09continue; X`09`09`7D X`09`09if`20(strncmp(ibuf,`20"***RESOURCE",`2011)`20==`200)`20`7B X`09`09`09mh.m_rsrclen`20=`20make_file(files.f_rsrc,`20compressed); X`09`09`09forks++; X`09`09`09continue; X`09`09`7D X`09`09if`20(compressed`20`26`26`20strncmp(ibuf,`20"***CRC:",`207)`20==`200)`20 V`7B X`09`09`09found_crc++; X`09`09`09calc_crc`20=`20crc; X`09`09`09sscanf(`26ibuf`5B7`5D,`20"%x",`20`26file_crc); X`09`09`09break; X`09`09`7D X`09`09if`20(!compressed`20`26`26`20strncmp(ibuf,`20"***CHECKSUM:",`2012)`20== V`200)`20`7B X`09`09`09found_crc++; X`09`09`09calc_crc`20=`20crc`20`26`20BYTEMASK; X`09`09`09sscanf(`26ibuf`5B12`5D,`20"%x",`20`26file_crc); X`09`09`09file_crc`20`26=`20BYTEMASK; X`09`09`09break; X`09`09`7D X`09`7D X X`09if`20(found_crc) X`09`09verify_crc(calc_crc,`20file_crc); X`09else`20`7B X`09`09fprintf(stderr,`20"missing`20CRC`5Cn"); X`09`09exit(3); X`09`7D X`7D X Xlong Xmake_file(fname,`20compressed) Xchar`20*fname; Xint`20compressed; X`7B X`09char`20ibuf`5BBUFSIZ`5D; X`09FILE`20*outf; X`09register`20long`20nbytes`20=`200L; X X`09outf`20=`20fopen(fname,`20"w"); X`09if`20(outf`20==`20NULL)`20`7B X`09`09perror(fname); X`09`09exit(-1); X`09`7D X X`09while`20(fgets(ibuf,`20BUFSIZ,`20ifp)`20!=`20NULL)`20`7B X`09`09if`20(strncmp(ibuf,`20"***END",`206)`20==`200) X`09`09`09break; X`09`09if`20(compressed) X`09`09`09nbytes`20+=`20comp_to_bin(ibuf,`20outf); X`09`09else X`09`09`09nbytes`20+=`20hex_to_bin(ibuf,`20outf); X`09`7D X X`09fclose(outf); X`09return`20nbytes; X`7D X Xcomp_c_crc(c) Xunsigned`20char`20c; X`7B X`09crc`20=`20(crc`20+`20c)`20`26`20WORDMASK; X`09crc`20=`20((crc`20<<`203)`20`26`20WORDMASK)`20`7C`20(crc`20>>`2013); X`7D X Xcomp_e_crc(c) Xunsigned`20char`20c; X`7B X`09crc`20+=`20c; X`7D X X#define`20SIXB(c)`20(((c)-0x20)`20`26`200x3f) X Xcomp_to_bin(ibuf,`20outf) Xchar`20ibuf`5B`5D; XFILE`20*outf; X`7B X`09char`20obuf`5BBUFSIZ`5D; X`09register`20char`20*ip`20=`20ibuf; X`09register`20char`20*op`20=`20obuf; X`09register`20int`20n,`20outcount; X`09int`20numread,`20incount; X X`09numread`20=`20strlen(ibuf); X`09ip`5Bnumread-1`5D`20=`20'`20';`09`09/*`20zap`20out`20the`20newline`20*/ X`09outcount`20=`20(SIXB(ip`5B0`5D)`20<<`202)`20`7C`20(SIXB(ip`5B1`5D)`20>>`204 V); X`09incount`20=`20((outcount`20/`203)`20+`201)`20*`204; X`09for`20(n`20=`20numread;`20n`20<`20incount;`20n++)`09/*`20restore`20lost`20s Vpaces`20*/ X`09`09ibuf`5Bn`5D`20=`20'`20'; X X`09n`20=`200; X`09while`20(n`20<=`20outcount)`20`7B X`09`09*op++`20=`20SIXB(ip`5B0`5D)`20<<`202`20`7C`20SIXB(ip`5B1`5D)`20>>`204; X`09`09*op++`20=`20SIXB(ip`5B1`5D)`20<<`204`20`7C`20SIXB(ip`5B2`5D)`20>>`202; X`09`09*op++`20=`20SIXB(ip`5B2`5D)`20<<`206`20`7C`20SIXB(ip`5B3`5D); X`09`09ip`20+=`204; X`09`09n`20+=`203; X`09`7D X X`09for`20(n=1;`20n`20<=`20outcount;`20n++) X`09`09comp_c_crc((unsigned)obuf`5Bn`5D); X X`09fwrite(obuf+1,`201,`20outcount,`20outf); X`09return`20outcount; X`7D X Xhex_to_bin(ibuf,`20outf) Xchar`20ibuf`5B`5D; XFILE`20*outf; X`7B X`09register`20char`20*ip`20=`20ibuf; X`09register`20int`20n,`20outcount; X`09int`20c; X X`09n`20=`20strlen(ibuf)`20-`201; X`09outcount`20=`20n`20/`202; X`09for`20(n`20=`200;`20n`20<`20outcount;`20n++)`20`7B X`09`09c`20=`20hexit(*ip++); X`09`09comp_e_crc((unsigned)(c`20=`20(c`20<<`204)`20`7C`20hexit(*ip++))); X`09`09fputc(c,`20outf); X`09`7D X`09return`20outcount; X`7D X Xhexit(c) Xint`20c; X`7B X`09if`20('0'`20<=`20c`20`26`26`20c`20<=`20'9') X`09`09return`20c`20-`20'0'; X`09if`20('A'`20<=`20c`20`26`26`20c`20<=`20'F') X`09`09return`20c`20-`20'A'`20+`2010; X X`09fprintf(stderr,`20"illegal`20hex`20digit:`20%c",`20c); X`09exit(4); X`09/*`20NOTREACHED`20*/ X`7D X Xput2(bp,`20value) Xchar`20*bp; Xshort`20value; X`7B X`09*bp++`20=`20(value`20>>`208)`20`26`20BYTEMASK; X`09*bp++`20=`20value`20`26`20BYTEMASK; X`7D X Xput4(bp,`20value) Xchar`20*bp; Xlong`20value; X`7B X`09register`20int`20i,`20c; X X`09for`20(i`20=`200;`20i`20<`204;`20i++)`20`7B X`09`09c`20=`20(value`20>>`2024)`20`26`20BYTEMASK; X`09`09value`20<<=`208; X`09`09*bp++`20=`20c; X`09`7D X`7D $ call unpack XBIN.C;1 - 793771993 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" 36 3 4 $! $ create 'f' X X XXBIN(local)`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Programmer's`20Documen Vtation`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20XBIN(local) X X XNAME X`20`20`20`20`20xbin`20-`20convert`20mailable`20format`20BinHex`20file`20into V`20binary`20before`20downloading X`20`20`20`20`20to`20MacTerminal X XSYNOPSIS X`20`20`20`20`20xbin`20`5B`20-o`20`5D`20`5B`20-v`20`5D`20`5B`20-l`20`5D`20`5B V`5B`20-n`20name`20`5D`20file`5D`20... X XDESCRIPTION X`20`20`20`20`20Xbin`20converts`20a`20file`20created`20by`20BinHex`20(usually V`20named`20`20with`20`20one`20`20of`20`20the X`20`20`20`20`20extensions`20`20".hex",`20`20".hcx",`20`20or`20`20".hqx")`20`20 Vinto`20`20three`20`20host-system`20files X`20`20`20`20`20suitable`20for`20downloading`20to`20a`20Macintosh`20`20via`20 V`20macput.`20`20`20This`20`20program`20`20is X`20`20`20`20`20designed`20`20for`20`20use`20`20with`20`20the`20`201.1`20`20Rel Vease`20`20version`20`20of`20MacTerminal,`20but X`20`20`20`20`20includes`20a`20compatibility`20option`20for`20the`20old`20-0.15 VX`20Almost-Alpha`20version. X X`20`20`20`20`20The`20-l`20(list)`20option`20reads`20the`20header`20information V`20and`20prints`20out`20all`20`20the X`20`20`20`20`20useful`20information`20there,`20without`20creating`20any`20conv Verted`20output`20files. X X`20`20`20`20`20The`20-v`20(verbose)`20option`20prints`20a`20line`20for`20`20ea Vch`20`20file`20`20to`20`20be`20`20converted, X`20`20`20`20`20indicating`20the`20input`20and`20output`20file`20names. X X`20`20`20`20`20The`20-n`20name`20option`20allows`20the`20user`20`20to`20`20spe Vcify`20`20the`20`20name`20`20to`20`20use`20`20when X`20`20`20`20`20creating`20`20the`20`20host`20`20files`20and`20the`20eventual V`20name`20to`20use`20on`20the`20mac.`20`20This X`20`20`20`20`20option`20must`20precede`20the`20input`20file`20name`20it`20is V`20to`20affect. X X`20`20`20`20`20If`20this`20option`20is`20not`20used,`20the`20names`20will`20be V`20`20derived`20`20from`20`20either`20`20the X`20`20`20`20`20input`20`20file`20`20name`20(.hex`20or`20.hcx`20files),`20or`20 Vthe`20name`20encoded`20in`20the`20header X`20`20`20`20`20information`20(.hqx`20files).`20`20`20Spaces`20`20and`20`20slas Vhes`20`20will`20`20be`20`20converted`20`20to X`20`20`20`20`20underscores,`20`20and`20`20the`20.h?x`20extension`20will`20be V`20deleted,`20if`20one`20is`20included X`20`20`20`20`20in`20the`20input`20file`20name. X X`20`20`20`20`20A`20file`20name`20of`20"-"`20indicates`20that`20the`20input`20s Vhould`20be`20taken`20`20from`20`20stdin. X`20`20`20`20`20If`20`20no`20`20mac`20`20file`20`20name`20`20is`20specified,`20 Vthe`20default`20name`20(for`20.hex`20or`20.hcx X`20`20`20`20`20files)`20is`20"stdin". X X`20`20`20`20`20Mail`20or`20news`20headers`20and`20signatures`20need`20not`20be V`20manually`20stripped`20--`20xbin X`20`20`20`20`20will`20ignore`20pretty`20much`20anything`20it`20doesn't`20need. V X X`20`20`20`20`20xbin`20creates`20three`20host-system`20files`20from`20each`20 V`20input`20`20file:`20`20`20name.info, X`20`20`20`20`20name.data,`20and`20name.rsrc. X X`20`20`20`20`20The`20-o`20flag`20specifies`20"old"`20(version`20`20-0.15X)`20 V`20MacTerminal`20`20compatibility X`20`20`20`20`20mode. X XBUGS X`20`20`20`20`20The`20"LOCKED"`20bit`20in`20the`20flags`20cannot`20be`20set`20b Vy`20xbin.`20`20This`20is`20`20due`20`20to`20`20a X`20`20`20`20`20bug`20in`20MacTerminal,`20which`20sets`20the`20flags`20when`20t Vhe`20file`20is`20created,`20rather X`20`20`20`20`20than`20after`20it`20has`20been`20transfered,`20resulting`20in V`20`20it`20`20not`20`20being`20`20able`20`20to X`20`20`20`20`20write`20the`20file. X X`20`20`20`20`20Input`20files`20must`20contain`20a`20line`20starting`20with`20" V(This`20file"`20to`20detect`20`20the X`20`20`20`20`20beginning`20of`20the`20BinHex`20information. X X X X X X X X4BSD`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`2024`20Mar`201985`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`201 X X X X XXBIN(local)`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Programmer's`20Documen Vtation`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20XBIN(local) X X XSEE`20ALSO X`20`20`20`20`20macput(1),`20macget(1) X XAUTHOR X`20`20`20`20`20Dave`20Johnson,`20Brown`2012/16/84;`20CRC`20`20handling`20`20co Vde`20`20by`20`20Darin`20`20Adler,`20`20TMQ X`20`20`20`20`20Software`203/16/85 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X4BSD`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`2024`20Mar`201985`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`202 X X $ call unpack XBIN.DOC;1 1465873038 "" 6 4 4 $ v=f$verify(v) $ exit