home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume30 / perl / patch21 < prev    next >
Text File  |  1992-06-11  |  50KB  |  1,949 lines

  1. Newsgroups: comp.sources.misc
  2. From: lwall@netlabs.com (Larry Wall)
  3. Subject:  v30i032:  perl - The perl programming language, Patch21
  4. Message-ID: <1992Jun11.180049.29460@sparky.imd.sterling.com>
  5. X-Md4-Signature: e50fb3d1dc0524c66fc79a93fcab70a5
  6. Date: Thu, 11 Jun 1992 18:00:49 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: lwall@netlabs.com (Larry Wall)
  10. Posting-number: Volume 30, Issue 32
  11. Archive-name: perl/patch21
  12. Environment: UNIX, MS-DOS, OS2
  13. Patch-To: perl: Volume 18, Issue 19-54
  14.  
  15. System: perl version 4.0
  16. Patch #: 21
  17. Priority: highish
  18. Subject: patch #20, continued
  19.  
  20. Description:
  21.     See patch #20.
  22.  
  23. Fix:    From rn, say "| patch -p -N -d DIR", where DIR is your perl source
  24.     directory.  Outside of rn, say "cd DIR; patch -p -N <thisarticle".
  25.     If you don't have the patch program, apply the following by hand,
  26.     or get patch (version 2.0, latest patchlevel).
  27.  
  28.     After patching:
  29.         *** DO NOTHING--INSTALL ALL PATCHES UP THROUGH #33 FIRST ***
  30.  
  31.     If patch indicates that patchlevel is the wrong version, you may need
  32.     to apply one or more previous patches, or the patch may already
  33.     have been applied.  See the patchlevel.h file to find out what has or
  34.     has not been applied.  In any event, don't continue with the patch.
  35.  
  36.     If you are missing previous patches they can be obtained from me:
  37.  
  38.     Larry Wall
  39.     lwall@netlabs.com
  40.  
  41.     If you send a mail message of the following form it will greatly speed
  42.     processing:
  43.  
  44.     Subject: Command
  45.     @SH mailpatch PATH perl 4.0 LIST
  46.            ^ note the c
  47.  
  48.     where PATH is a return path FROM ME TO YOU either in Internet notation,
  49.     or in bang notation from some well-known host, and LIST is the number
  50.     of one or more patches you need, separated by spaces, commas, and/or
  51.     hyphens.  Saying 35- says everything from 35 to the end.
  52.  
  53.  
  54. Index: patchlevel.h
  55. Prereq: 20
  56. 1c1
  57. < #define PATCHLEVEL 20
  58. ---
  59. > #define PATCHLEVEL 21
  60.  
  61. Index: x2p/Makefile.SH
  62. *** x2p/Makefile.SH.old    Mon Jun  8 17:52:41 1992
  63. --- x2p/Makefile.SH    Mon Jun  8 17:52:42 1992
  64. ***************
  65. *** 14,23 ****
  66.       ;;
  67.   esac
  68.   echo "Extracting x2p/Makefile (with variable substitutions)"
  69.   cat >Makefile <<!GROK!THIS!
  70. ! # $RCSfile: Makefile.SH,v $$Revision: 4.0.1.2 $$Date: 91/11/05 19:19:04 $
  71.   #
  72.   # $Log:    Makefile.SH,v $
  73.   # Revision 4.0.1.2  91/11/05  19:19:04  lwall
  74.   # patch11: random cleanup
  75.   # 
  76. --- 14,29 ----
  77.       ;;
  78.   esac
  79.   echo "Extracting x2p/Makefile (with variable substitutions)"
  80. + rm -f Makefile
  81.   cat >Makefile <<!GROK!THIS!
  82. ! # $RCSfile: Makefile.SH,v $$Revision: 4.0.1.3 $$Date: 92/06/08 16:11:32 $
  83.   #
  84.   # $Log:    Makefile.SH,v $
  85. + # Revision 4.0.1.3  92/06/08  16:11:32  lwall
  86. + # patch20: SH files didn't work well with symbolic links
  87. + # patch20: cray didn't give enough memory to /bin/sh
  88. + # patch20: makefiles now display new shift/reduce expectations
  89. + # 
  90.   # Revision 4.0.1.2  91/11/05  19:19:04  lwall
  91.   # patch11: random cleanup
  92.   # 
  93. ***************
  94. *** 40,45 ****
  95. --- 46,52 ----
  96.   LARGE = $large $split
  97.   mallocsrc = $mallocsrc
  98.   mallocobj = $mallocobj
  99. + shellflags = $shellflags
  100.   
  101.   libs = $libs
  102.   !GROK!THIS!
  103. ***************
  104. *** 46,52 ****
  105.   
  106.   cat >>Makefile <<'!NO!SUBS!'
  107.   
  108. ! CCCMD = `sh cflags $@`
  109.   
  110.   public = a2p s2p find2perl
  111.   
  112. --- 53,59 ----
  113.   
  114.   cat >>Makefile <<'!NO!SUBS!'
  115.   
  116. ! CCCMD = `sh $(shellflags) cflags $@`
  117.   
  118.   public = a2p s2p find2perl
  119.   
  120. ***************
  121. *** 58,64 ****
  122.   
  123.   sh = Makefile.SH makedepend.SH
  124.   
  125. ! h = EXTERN.h INTERN.h config.h handy.h hash.h a2p.h str.h util.h
  126.   
  127.   c = hash.c $(mallocsrc) str.c util.c walk.c
  128.   
  129. --- 65,71 ----
  130.   
  131.   sh = Makefile.SH makedepend.SH
  132.   
  133. ! h = EXTERN.h INTERN.h ../config.h handy.h hash.h a2p.h str.h util.h
  134.   
  135.   c = hash.c $(mallocsrc) str.c util.c walk.c
  136.   
  137. ***************
  138. *** 81,87 ****
  139.       $(CC) $(LDFLAGS) $(obj) a2p.o $(libs) -o a2p
  140.   
  141.   a2p.c: a2p.y
  142. !     @ echo Expect 226 shift/reduce conflicts...
  143.       $(YACC) a2p.y
  144.       mv y.tab.c a2p.c
  145.   
  146. --- 88,94 ----
  147.       $(CC) $(LDFLAGS) $(obj) a2p.o $(libs) -o a2p
  148.   
  149.   a2p.c: a2p.y
  150. !     @ echo Expect 231 shift/reduce conflicts...
  151.       $(YACC) a2p.y
  152.       mv y.tab.c a2p.c
  153.   
  154. ***************
  155. *** 105,111 ****
  156.   fi
  157.   
  158.   clean:
  159. !     rm -f a2p *.o
  160.   
  161.   realclean: clean
  162.       rm -f *.orig */*.orig core $(addedbyconf) a2p.c s2p find2perl all cflags
  163. --- 112,118 ----
  164.   fi
  165.   
  166.   clean:
  167. !     rm -f a2p *.o a2p.c
  168.   
  169.   realclean: clean
  170.       rm -f *.orig */*.orig core $(addedbyconf) a2p.c s2p find2perl all cflags
  171. ***************
  172. *** 141,147 ****
  173.   $(obj):
  174.       @ echo "You haven't done a "'"make depend" yet!'; exit 1
  175.   makedepend: makedepend.SH
  176. !     /bin/sh makedepend.SH
  177.   !NO!SUBS!
  178.   $eunicefix Makefile
  179.   case `pwd` in
  180. --- 148,154 ----
  181.   $(obj):
  182.       @ echo "You haven't done a "'"make depend" yet!'; exit 1
  183.   makedepend: makedepend.SH
  184. !     /bin/sh $(shellflags) makedepend.SH
  185.   !NO!SUBS!
  186.   $eunicefix Makefile
  187.   case `pwd` in
  188.  
  189. Index: os2/README.OS2
  190. *** os2/README.OS2.old    Mon Jun  8 17:49:37 1992
  191. --- os2/README.OS2    Mon Jun  8 17:49:38 1992
  192. ***************
  193. *** 376,382 ****
  194.     construct a makefile ...
  195.   + If you have GNU gdbm, you can define NDBM in config.h and link with a
  196.     large model library of gdbm.
  197. ! + I am not shure if I can verify the OS/2 port with each release
  198.     from Larry Wall. Therefore, in future releases there may be
  199.     changes required to compile perl for OS/2.
  200.                    October 1990
  201. --- 376,382 ----
  202.     construct a makefile ...
  203.   + If you have GNU gdbm, you can define NDBM in config.h and link with a
  204.     large model library of gdbm.
  205. ! + I am not sure if I can verify the OS/2 port with each release
  206.     from Larry Wall. Therefore, in future releases there may be
  207.     changes required to compile perl for OS/2.
  208.                    October 1990
  209. ***************
  210. *** 392,397 ****
  211. --- 392,425 ----
  212.   
  213.                                   Kai Uwe Rommel
  214.                                   rommel@lan.informatik.tu-muenchen.dbp.de
  215. + Verified perl 4.0 at patchlevel 10
  216. + Changes:
  217. + - some minor corrections and updates in various files
  218. + - new os2/config.h created from original config.H
  219. + - added support for crypt(), PD routine by A.Tanenbaum in new os2/crypt.c
  220. + - added support for wait4pid() in os2.c
  221. + - fixed/added support for -P option (requires a standard CPP for OS/2)
  222. + - os2/mktemp.c deleted, no longer needed
  223. + - new Makefile created for MS C 6.00 and it's NMAKE
  224. + - with os2/perl.cs, bison has no longer to be called manually
  225. + I have successfully run most tests. Diffs are in os2/tests.dif.
  226. + Often, only command names, shell expansion etc. have to be changed.
  227. + Test that still don't run are Unix-specific ones or fail because
  228. + of CR/LF-problems:
  229. + - io/argv.t, io/inplace.t, op/exec.t, op/glob.t  (minor problems)
  230. + - io/fs.t, io/pipe.t op/fork.t, op/magic.t, op/time.t
  231. +    (under OS/2 not supported features of Unix)
  232. + - op/pat.t (bug, not yet fixed)
  233. + Remember to remove the HAS_GDBM symbol from os2/config.h or
  234. + get GNU gdbm for OS/2.
  235. +                 June 1991
  236. +                                 Kai Uwe Rommel
  237. +                                 rommel@lan.informatik.tu-muenchen.dbp.de
  238. + Verified perl 4.0 at patchlevel 19
  239. + Minor fixes. Previous fixes at PL10 were not included into distribution.
  240. +                 November 1991
  241. +                                 Kai Uwe Rommel
  242. +                                 rommel@informatik.tu-muenchen.dbp.de
  243.   
  244.   
  245.   Verified patchlevel 44.
  246.  
  247. Index: atarist/README.ST
  248. *** atarist/README.ST.old    Mon Jun  8 17:34:57 1992
  249. --- atarist/README.ST    Mon Jun  8 17:34:57 1992
  250. ***************
  251. *** 0 ****
  252. --- 1,186 ----
  253. + See: FILES for a shipping list of files in this archive.
  254. + See: explain for a brief explaination of the diffs in perl.diffs.
  255. + Here is a port of perl 4.0 Patchlevel 19 to the atariST series.:
  256. + Whats new since atariST perl 4.010
  257. +     - many minor problems fixed.
  258. +     - configuration cleaned up.
  259. +         - makefiles now have a uperl.a target, so that usub's can be
  260. +           linked. (see usub/* to see how to make cursesperl)
  261. +     - perl will now compile and run correctly with or without
  262. +     the malloc that comes with perl.
  263. +     - FILEs opened for write now correctly contain CR/LF unless
  264. +     they are binmode'ed.
  265. +     - complete support for gemdos/xbios/bios calls. see osbind.pl
  266. +     and osexample.pl on how to use this facility.
  267. +     - tracked perl to Patchlevel 19.
  268. + known problems:
  269. +      - $! still does'nt contain the correct value when there is no error.
  270. +     i still have'nt been able to track this down.
  271. + -------------------------------------------------------------------------
  272. + Here is a port of perl 4.0 Patchlevel 10 to the atariST series.
  273. + What you'll need:
  274. +     - a decent shell (i use gulam for obvious reasons), other
  275. +     highly recommended ones are bash 1.08/1.10, gemini/mufpel, okami,
  276. +     microCsh, init from apratt for MiNT. avoid neodesk. avoid the
  277. +     desktop like the plague. The shell should be setup to use
  278. +     atari/mwc conventions for command lines and environment setup
  279. +     and passing. (in gulam be sure to `set env_style mw').
  280. +     - a decent set of file utils (ls, rm, mv, etc etc) in your $PATH.
  281. +     if you dont have these, look on atari.archive. the gnuFileutils
  282. +     are available there.
  283. +     
  284. +     - included here are echo and perlglob that you will need.
  285. +     - setting UNIXMODE is recommended but not required. If you are
  286. +     going to run the perl tests, then set UNIXMODE to atleast
  287. +     "/.,LAd", else you will get a lot of unnecessary failures.
  288. +     (alternately you will have to go in and edit long path names.
  289. +      get rid of things dealing with links, and rename paths
  290. +      beginning with "/dev/..." etc)
  291. +     - if you are going to compile: you'll need gcc distribution,
  292. +     (i used gcc-1.40 and libs at Patchlevel 73 initially. i 
  293. +          currently use gcc-2.1 and libs at Patchlevel 80). Also you will
  294. +     need the port of gdbm (i used v1.5). you'll also need bison.
  295. +     all these are available on atari.archive, in atari/gnustuff/tos
  296. +     the diffs as enclosed in this kit assume you have gcc libs at
  297. +         Patchlevel 80.
  298. +     
  299. + Compiling:
  300. +     - get and install gnu gdbm (i used v1.5 -- see README.ST in
  301. +       the gdbm distribution on how to make the gdbm library).
  302. +     - get the perl kit at Patchlevel 19
  303. +         - copy  config.h usersub.c atarist.c echo.c wildmat.c  perlglob.c  
  304. +           makefile.sm makefile.smd makefile.st makefile.std makefile.stm
  305. +     - apply the diffs in file `perl.diffs' using patch
  306. +     - decide which makefile you want to use:
  307. +     makefile.st    perl with gcc library malloc
  308. +     makefile.sm    perl with malloc that comes with perl
  309. +     - hit make -f <MAKEFILE>. (if you are not cross-compiling, 
  310. +        you'll have to adjust the makefile yourself -- watchout for
  311. +        perly.fixer).
  312. +        This will result in 3 executables, perl.ttp, perlglob.ttp
  313. +        and echo.ttp. Put all these executables in a sub-directory
  314. +        in your $PATH (and depending on your shell, issue a rehash).
  315. +     (if you use makefile.std instead of makefile.st, the executable
  316. +      will be called perld.ttp. this is perl compiled with
  317. +      -DDEBUGGING)
  318. + Compiling usubs:
  319. +     see the files in usub/* and the makefile.st there.
  320. + Testing:
  321. +     - run perl from a decent shell. i use either gulam or bash
  322. +     if you are going to be running from gulam, be sure to
  323. +         set env_style mw
  324. +     (this can be done automatically by including the above
  325. +      line in the gulam.g startup file). bash always uses
  326. +     atari/mwc conventions so you dont have to do anything special.
  327. +     (if you run perl from the desktop, you are asking for trouble!)
  328. +     - you'll have to run the tests by hand. Almost all the tests
  329. +     pass. You'll have to judge for yourself when a test fails
  330. +     if it should have. I was able to explain all failures. If you
  331. +     cant, ask me via mail. (one day i will cook up a script to
  332. +     do this).
  333. +     - It helps to have all the gnu fileutils in your PATH here.
  334. +     especially echo.ttp and perlglob.ttp.
  335. +     - Also a lot more tests will pass if you have UNIXMODE setup
  336. +     i use "/.,LAd". If you dont use UNIXMODE, you'll have to hack
  337. +     some of the tests.
  338. +     - You may have to fix up a few Pathnames in the tests if you
  339. +     are cd'ing to a particular test sub-directory to run the tests.
  340. +     - Compare your tests with the results i got -- see file RESULTS.
  341. +     
  342. + General:
  343. +     - setenv PERLLIB to point at the subdirectory containing lib/*
  344. +     (if you want PERLLIB to contain more than one path, seperate
  345. +      them with commas)
  346. +     - UNIXMODE is supported not required.
  347. +     - Pipes are a little flakey sometimes, but mostly work fine.
  348. +     Pipes, `prog`  etc are much more efficient if you have set
  349. +     the environment var TEMP to point to a ramdisk. Note, when
  350. +     you set TEMP, it should contain *no* tailing backslash (or slash).
  351. +     - to force binary mode use "binmode FILE"
  352. +     - browse thru config.h to see whats supported
  353. +     - should MiNT'ize this much more.
  354. +     - avoid using the backtick (`commands`). Use 'open(FOO, "command |")'
  355. +     and use the filehandle FOO as appro.
  356. +     - the command passed to system etc can contain
  357. +     redirections of stdin/out, but system does not understand
  358. +     fancy pipelines etc.
  359. +     - syscall() to make gemdos/bios/xbios are fully supported now.
  360. +     (note: we dont use ioctl like messy-dos to do this, as we can do
  361. +      real ioctl's on devices)
  362. +     - i still need to cons up the lineA stuff.
  363. +       it should be just as easy to cons up aes/vdi outcalls too. imagine
  364. +       graphics from perl!.
  365. +     - watch out for re-directions. TOS blows up if you try to
  366. +     re-direct a re-directed handle. atari has greatly improved this
  367. +     situation. hopefully, the next general release of TOS will contain
  368. +     these fixes.
  369. +     - in the perl libs (particularly perldb.pl) you will
  370. +     need to s?/dev/tty?/dev/console?. perl -d works just fine.
  371. +     for instance: (for this to work, UNIXMODE should include the
  372. +     'd' option):
  373. + *** /home/bammi/etc/src/perl/lib/perldb.pl    Tue Jun 11 17:40:17 1991
  374. + --- perldb.pl    Mon Oct  7 21:46:28 1991
  375. + ***************
  376. + *** 49,56 ****
  377. +   # 
  378. +   #
  379. +   
  380. + ! open(IN, "</dev/tty") || open(IN,  "<&STDIN");    # so we don't dingle stdin
  381. + ! open(OUT,">/dev/tty") || open(OUT, ">&STDOUT");    # so we don't dongle stdout
  382. +   select(OUT);
  383. +   $| = 1;                # for DB'OUT
  384. +   select(STDOUT);
  385. + --- 49,56 ----
  386. +   # 
  387. +   #
  388. +   
  389. + ! open(IN, "</dev/console") || open(IN,  "<&STDIN");    # so we don't dingle stdin
  390. + ! open(OUT,">/dev/console") || open(OUT, ">&STDOUT");    # so we don't dongle stdout
  391. +   select(OUT);
  392. +   $| = 1;                # for DB'OUT
  393. +   select(STDOUT);
  394. + cheers,
  395. + --
  396. + bang:   uunet!cadence!bammi            jwahar r. bammi
  397. + domain: bammi@cadence.com
  398. + GEnie:    J.Bammi
  399. + CIS:    71515,155
  400.  
  401. Index: README.ncr
  402. *** README.ncr.old    Mon Jun  8 17:34:39 1992
  403. --- README.ncr    Mon Jun  8 17:34:40 1992
  404. ***************
  405. *** 0 ****
  406. --- 1,151 ----
  407. + From: lreed@ncratl.AtlantaGA.NCR.COM (Len Reed)
  408. + Newsgroups: comp.lang.perl
  409. + Subject: Fixes for Perl 4.019 on NCR Tower V.3
  410. + Date: 17 Feb 92 16:41:30 GMT
  411. + Organization: Holos Software, Inc.
  412. + Here are the fixes needed to make perl 4.019 on the NCR Tower V.3 system.
  413. + I have bundled this as a shar file: feed everything below the CUT line
  414. + to /bin/sh.
  415. + The file hints/ncr_tower.sh fixes several problems.  It replaces the
  416. + standard copy thereof.  Note that I use perl's malloc.  Note also
  417. + that I have turned the optimizer completely off (-O0).  Optimizing
  418. + at -O1 or -O2 produces some errors that the test suite doesn't catch.
  419. + (Problems with alloca() and setjmp/longjmp, I think.)  It should be
  420. + possible to optimize some modules but I haven't experimented with this.
  421. + [NOTE: this hints file is already installed--lwall]
  422. + I'm don't know if mkdir(2) works: I've left it undef'ed.  It is certainly
  423. + broken in V.2.  If you need fast mkdir's you may want to experiment with
  424. + this.
  425. + The file patch.twg fixes a stupidity in /usr/netinclude/sys/time.h.
  426. + You'll need this if you have WIN-TCP; you can't use it if you don't
  427. + have WIN-TCP.  If needed, apply this patch *before* running Configure.
  428. + Make sure you tell Configure that any config.sh it finds is to be ignored.
  429. + After running Configure and make depend, edit config.h so that
  430. + the CPPSTDIN definition has DEFAULT_CPP=/dev/null prepended.  It should
  431. + look this this:
  432. + #define CPPSTDIN "DEFAULT_CPP=/dev/null cc -E"
  433. + This must be done by hand after running "make depend" and before running
  434. + make.  I was unable to encode this into the hints file.
  435. + This resulting perl should pass all tests.
  436. + -Len Reed
  437. + Holos Software, Inc.
  438. + holos0!lbr@gatech.edu                (my main account)
  439. + lreed@ncratl.atlantaga.ncr.com       (this account--on a customer's machine)
  440. + -----CUT HERE----
  441. + #!/bin/sh
  442. + # This is a shell archive (shar 3.32)
  443. + # made 02/17/1992 16:36 UTC by lreed@ncratl
  444. + # Source directory /usr/acct/lreed/,q
  445. + #
  446. + # existing files WILL be overwritten
  447. + #
  448. + # This shar contains:
  449. + # length  mode       name
  450. + # ------ ---------- ------------------------------------------
  451. + #   1593 -rw-rw-rw- patch.twg
  452. + #    176 -rw-r--r-- hints/ncr_tower.sh
  453. + #
  454. + if touch 2>&1 | fgrep 'amc' > /dev/null
  455. +  then TOUCH=touch
  456. +  else TOUCH=true
  457. + fi
  458. + # ============= patch.twg ==============
  459. + echo "x - extracting patch.twg (Text)"
  460. + sed 's/^X//' << 'SHAR_EOF' > patch.twg &&
  461. + XThe following patch fixes /usr/netinclude/sys/time.h on the Tower V.3.
  462. + XPulling in <sys/time.h> with -I/usr/inetinclude makes a mess unless
  463. + Xthe <sys/twg_config.h> file is pulled in, too.  It's stupid that an
  464. + Xapplication (e.g., perl) should have to do this.  Thus, I fixed
  465. + Xthe system header file.  The alternative is to make each application
  466. + Xget the header file itself.  (The #if allows the application to do
  467. + Xit, though, for compatibility with existing applications.)
  468. + X
  469. + XTo apply this patch, chdir to /usr/netinclude/sys and run
  470. + X    patch <this_file
  471. + X
  472. + XIf the patch fails, fix the file by hand.  All I've done is put
  473. + X#ifndef HDEF
  474. + X    /* Len Reed 5/6/91 -- pulling in <sys/time.h> shouldn't cause
  475. + X       HDEF to blow up the compile--auto pull in its defining file.
  476. + X    */
  477. + X# include <sys/twg_config.h>
  478. + X#endif
  479. + X
  480. + Xbefore HDEF is used.
  481. + X
  482. + X-----The patch starts below this line
  483. + X
  484. + X*** time.h.old    Fri Feb 14 12:06:46 1992
  485. + X--- time.h    Fri Feb 14 12:04:32 1992
  486. + X***************
  487. + X*** 4,12 ****
  488. + X  /*    time.h    6.1    83/07/29    */
  489. + X  /* " @(#)time.h (TWG) 2.2 88/05/17 " */
  490. + X  
  491. + X! /*
  492. + X  HDEF( "@(#)$RCSfile: README.ncr,v $$Revision: 4.0.1.1 $$Date: 92/06/08 11:41:41 $" )
  493. + X- */
  494. + X  
  495. + X  /*
  496. + X   * Structure returned by gettimeofday(2) system call,
  497. + X--- 4,17 ----
  498. + X  /*    time.h    6.1    83/07/29    */
  499. + X  /* " @(#)time.h (TWG) 2.2 88/05/17 " */
  500. + X  
  501. + X! #ifndef HDEF
  502. + X!     /* Len Reed 5/6/91 -- pulling in <sys/time.h> shouldn't cause
  503. + X!        HDEF to blow up the compile--auto pull in its defining file.
  504. + X!     */
  505. + X! # include <sys/twg_config.h>
  506. + X! #endif
  507. + X! 
  508. + X  HDEF( "@(#)$RCSfile: README.ncr,v $$Revision: 4.0.1.1 $$Date: 92/06/08 11:41:41 $" )
  509. + X  
  510. + X  /*
  511. + X   * Structure returned by gettimeofday(2) system call,
  512. + SHAR_EOF
  513. + $TOUCH -am 0217113592 patch.twg &&
  514. + chmod 0666 patch.twg ||
  515. + echo "restore of patch.twg failed"
  516. + set `wc -c patch.twg`;Wc_c=$1
  517. + if test "$Wc_c" != "1593"; then
  518. +     echo original size 1593, current size $Wc_c
  519. + fi
  520. + # ============= hints/ncr_tower.sh ==============
  521. + if test ! -d 'hints'; then
  522. +     echo "x - creating directory hints"
  523. +     mkdir 'hints'
  524. + fi
  525. + echo "x - extracting hints/ncr_tower.sh (Text)"
  526. + sed 's/^X//' << 'SHAR_EOF' > hints/ncr_tower.sh &&
  527. + Xoptimize='-O0'
  528. + Xccflags="$ccflags -W2,-Sl,2000"
  529. + Xeval_cflags='large="-W0,-XL"'
  530. + Xteval_cflags=$eval_cflags
  531. + Xd_mkdir=$undef
  532. + Xusemymalloc='y'
  533. + Xmallocsrc='malloc.c'
  534. + Xmallocobj='malloc.o'
  535. + SHAR_EOF
  536. + $TOUCH -am 0214073692 hints/ncr_tower.sh &&
  537. + chmod 0644 hints/ncr_tower.sh ||
  538. + echo "restore of hints/ncr_tower.sh failed"
  539. + set `wc -c hints/ncr_tower.sh`;Wc_c=$1
  540. + if test "$Wc_c" != "176"; then
  541. +     echo original size 176, current size $Wc_c
  542. + fi
  543. + exit 0
  544.  
  545. Index: atarist/RESULTS
  546. *** atarist/RESULTS.old    Mon Jun  8 17:34:59 1992
  547. --- atarist/RESULTS    Mon Jun  8 17:35:00 1992
  548. ***************
  549. *** 0 ****
  550. --- 1,120 ----
  551. + t/base:
  552. + cond.t
  553. + if.t
  554. + lex.t
  555. + pat.t
  556. + term.t
  557. + all of these pass. if you are running from this directory
  558. + make sure you have a file ..\Makefile for term.t to pass.
  559. + =================================
  560. + t/cmd:
  561. + elsif.t
  562. + for.t
  563. + mod.t
  564. + subval.t
  565. + switch.t
  566. + while.t
  567. + all of these passed. be sure to set UNIXMODE for these to pass.
  568. + make sure there is a file called ./TEST if you run in this sub-directory
  569. + for mod.t.
  570. + =================================
  571. + t/comp:
  572. + cmdopt.t
  573. + decl.t
  574. + package.t
  575. + script.t
  576. + term.t
  577. + multiline.t
  578. + all these work. if you are running in this subdir then cp perl.ttp ./perl
  579. + before running.
  580. + cpp.t
  581. +  fails. i need to fix for -P.
  582. + =================================
  583. + t/io:
  584. + if you are running in this subdir make sure:
  585. + -- there is a file ../Makefile
  586. + -- have a ./perl
  587. + argv.t: 2 & 3 fail
  588. +     `.....` with pipes will not work. redirections may (have'nt checked)
  589. + dup.t: only 1 will pass. what the hell is the rest doing (the atari goes
  590. +     into in infinite loop)
  591. + pipe.t: fails. have to look into this. pipe() on the atari sort of
  592. + work most of the time. see gcc-lib/pipe.c
  593. + print.t: all pass
  594. + tell.t: all pass
  595. + =================================
  596. + t/lib:
  597. + bit.t : pass
  598. + =================================
  599. + t/op:
  600. + append.t    pass
  601. + array.t        pass
  602. + auto.t        pass
  603. + chop.t        pass
  604. + cond.t        pass
  605. + dbm.t -- cant possibly work with gdbm, it does'nt create .pag etc files
  606. + gdbm.t        added new test to test gdbm based perl
  607. + delete.t    pass
  608. + do.t        pass
  609. + each.t        pass
  610. + eval.t        pass
  611. + exec.t 4,5,6 fail rest pass (obviously)
  612. + exp.t        pass
  613. + flip.t        pass
  614. + fork.t        correctly fails
  615. + glob.t    1 fails rest pass (as i said dont depend on `....` to work on the ST)
  616. + goto.t  1,2 pass 3 fail (again because of `...`)
  617. + groups.t    makes no sense on the ST
  618. + index.t        pass
  619. + int.t        pass
  620. + join.t        pass
  621. + list.t        pass
  622. + local.t        pass
  623. + magic.t        fail obviously
  624. + mkdir.t    the failure is obvious, rest pass (our err strings dont match unix's)
  625. + oct.t        pass
  626. + ord.t        pass
  627. + pack.t        pass
  628. + pat.t        pass!!!! (works with lib malloc too now, yeah!)
  629. + push.t        pass
  630. + range.t        pass
  631. + read.t        pass
  632. + regexp.t    pass! (make sure re_tests is in cwd if running in cwd, and edit
  633. +             path in regexp.t)
  634. + repeat.t    pass
  635. + s.t        pass
  636. + sleep.t        pass
  637. + sort.t        pass
  638. + split.t        pass
  639. + sprintf.t    pass
  640. + stat.t        obvious ones fail, looks good
  641. + study.t        pass
  642. + substr.t    pass
  643. + time.t        pass
  644. + undef.t        pass
  645. + unshift.t    pass
  646. + vec.t        pass
  647. + write.t    fail due to  `...`
  648. + =================================
  649.  
  650. Index: x2p/a2p.h
  651. *** x2p/a2p.h.old    Mon Jun  8 17:52:45 1992
  652. --- x2p/a2p.h    Mon Jun  8 17:52:45 1992
  653. ***************
  654. *** 1,4 ****
  655. ! /* $RCSfile: a2p.h,v $$Revision: 4.0.1.1 $$Date: 91/06/07 12:12:27 $
  656.    *
  657.    *    Copyright (c) 1991, Larry Wall
  658.    *
  659. --- 1,4 ----
  660. ! /* $RCSfile: a2p.h,v $$Revision: 4.0.1.2 $$Date: 92/06/08 16:12:23 $
  661.    *
  662.    *    Copyright (c) 1991, Larry Wall
  663.    *
  664. ***************
  665. *** 6,11 ****
  666. --- 6,14 ----
  667.    *    License or the Artistic License, as specified in the README file.
  668.    *
  669.    * $Log:    a2p.h,v $
  670. +  * Revision 4.0.1.2  92/06/08  16:12:23  lwall
  671. +  * patch20: hash tables now split only if the memory is available to do so
  672. +  * 
  673.    * Revision 4.0.1.1  91/06/07  12:12:27  lwall
  674.    * patch4: new copyright notice
  675.    * 
  676. ***************
  677. *** 294,299 ****
  678. --- 297,304 ----
  679.   EXT bool need_entire INIT(FALSE);
  680.   EXT bool absmaxfld INIT(FALSE);
  681.   EXT bool saw_altinput INIT(FALSE);
  682. + EXT bool nomemok INIT(FALSE);
  683.   
  684.   EXT char const_FS INIT(0);
  685.   EXT char *namelist INIT(Nullch);
  686.  
  687. Index: x2p/a2p.y
  688. *** x2p/a2p.y.old    Mon Jun  8 17:52:47 1992
  689. --- x2p/a2p.y    Mon Jun  8 17:52:48 1992
  690. ***************
  691. *** 1,5 ****
  692.   %{
  693. ! /* $RCSfile: a2p.y,v $$Revision: 4.0.1.1 $$Date: 91/06/07 12:12:41 $
  694.    *
  695.    *    Copyright (c) 1991, Larry Wall
  696.    *
  697. --- 1,5 ----
  698.   %{
  699. ! /* $RCSfile: a2p.y,v $$Revision: 4.0.1.2 $$Date: 92/06/08 16:13:03 $
  700.    *
  701.    *    Copyright (c) 1991, Larry Wall
  702.    *
  703. ***************
  704. *** 7,12 ****
  705. --- 7,15 ----
  706.    *    License or the Artistic License, as specified in the README file.
  707.    *
  708.    * $Log:    a2p.y,v $
  709. +  * Revision 4.0.1.2  92/06/08  16:13:03  lwall
  710. +  * patch20: in a2p, getline should allow variable to be array element
  711. +  * 
  712.    * Revision 4.0.1.1  91/06/07  12:12:41  lwall
  713.    * patch4: new copyright notice
  714.    * 
  715. ***************
  716. *** 184,201 ****
  717.           { $$ = oper1(OPAREN,$2); }
  718.       | GETLINE
  719.           { $$ = oper0(OGETLINE); }
  720. !     | GETLINE VAR
  721.           { $$ = oper1(OGETLINE,$2); }
  722.       | GETLINE '<' expr
  723.           { $$ = oper3(OGETLINE,Nullop,string("<",1),$3);
  724.               if (ops[$3].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
  725. !     | GETLINE VAR '<' expr
  726.           { $$ = oper3(OGETLINE,$2,string("<",1),$4);
  727.               if (ops[$4].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
  728.       | term 'p' GETLINE
  729.           { $$ = oper3(OGETLINE,Nullop,string("|",1),$1);
  730.               if (ops[$1].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
  731. !     | term 'p' GETLINE VAR
  732.           { $$ = oper3(OGETLINE,$4,string("|",1),$1);
  733.               if (ops[$1].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
  734.       | FUN1
  735. --- 187,204 ----
  736.           { $$ = oper1(OPAREN,$2); }
  737.       | GETLINE
  738.           { $$ = oper0(OGETLINE); }
  739. !     | GETLINE variable
  740.           { $$ = oper1(OGETLINE,$2); }
  741.       | GETLINE '<' expr
  742.           { $$ = oper3(OGETLINE,Nullop,string("<",1),$3);
  743.               if (ops[$3].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
  744. !     | GETLINE variable '<' expr
  745.           { $$ = oper3(OGETLINE,$2,string("<",1),$4);
  746.               if (ops[$4].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
  747.       | term 'p' GETLINE
  748.           { $$ = oper3(OGETLINE,Nullop,string("|",1),$1);
  749.               if (ops[$1].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
  750. !     | term 'p' GETLINE variable
  751.           { $$ = oper3(OGETLINE,$4,string("|",1),$1);
  752.               if (ops[$1].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
  753.       | FUN1
  754.  
  755. Index: x2p/a2py.c
  756. *** x2p/a2py.c.old    Mon Jun  8 17:52:50 1992
  757. --- x2p/a2py.c    Mon Jun  8 17:52:51 1992
  758. ***************
  759. *** 1,4 ****
  760. ! /* $RCSfile: a2py.c,v $$Revision: 4.0.1.1 $$Date: 91/06/07 12:12:59 $
  761.    *
  762.    *    Copyright (c) 1991, Larry Wall
  763.    *
  764. --- 1,4 ----
  765. ! /* $RCSfile: a2py.c,v $$Revision: 4.0.1.2 $$Date: 92/06/08 16:15:16 $
  766.    *
  767.    *    Copyright (c) 1991, Larry Wall
  768.    *
  769. ***************
  770. *** 6,11 ****
  771. --- 6,16 ----
  772.    *    License or the Artistic License, as specified in the README file.
  773.    *
  774.    * $Log:    a2py.c,v $
  775. +  * Revision 4.0.1.2  92/06/08  16:15:16  lwall
  776. +  * patch20: in a2p, now warns about spurious backslashes
  777. +  * patch20: in a2p, now allows [ to be backslashed in pattern
  778. +  * patch20: in a2p, now allows numbers of the form 2.
  779. +  * 
  780.    * Revision 4.0.1.1  91/06/07  12:12:59  lwall
  781.    * patch4: new copyright notice
  782.    * 
  783. ***************
  784. *** 14,21 ****
  785.    * 
  786.    */
  787.   
  788. ! #ifdef MSDOS
  789. ! #include "../patchlev.h"
  790.   #endif
  791.   #include "util.h"
  792.   char *index();
  793. --- 19,26 ----
  794.    * 
  795.    */
  796.   
  797. ! #ifdef OS2
  798. ! #include "../patchlevel.h"
  799.   #endif
  800.   #include "util.h"
  801.   char *index();
  802. ***************
  803. *** 26,35 ****
  804.   int checkers = 0;
  805.   STR *walk();
  806.   
  807. ! #ifdef MSDOS
  808.   usage()
  809.   {
  810. !     printf("\nThis is the AWK to PERL translator, version 3.0, patchlevel %d\n", PATCHLEVEL);
  811.       printf("\nUsage: %s [-D<number>] [-F<char>] [-n<fieldlist>] [-<number>] filename\n", myname);
  812.       printf("\n  -D<number>      sets debugging flags."
  813.              "\n  -F<character>   the awk script to translate is always invoked with"
  814. --- 31,40 ----
  815.   int checkers = 0;
  816.   STR *walk();
  817.   
  818. ! #ifdef OS2
  819.   usage()
  820.   {
  821. !     printf("\nThis is the AWK to PERL translator, version 4.0, patchlevel %d\n", PATCHLEVEL);
  822.       printf("\nUsage: %s [-D<number>] [-F<char>] [-n<fieldlist>] [-<number>] filename\n", myname);
  823.       printf("\n  -D<number>      sets debugging flags."
  824.              "\n  -F<character>   the awk script to translate is always invoked with"
  825. ***************
  826. *** 85,91 ****
  827.           break;
  828.       default:
  829.           fatal("Unrecognized switch: %s\n",argv[0]);
  830. ! #ifdef MSDOS
  831.               usage();
  832.   #endif
  833.       }
  834. --- 90,96 ----
  835.           break;
  836.       default:
  837.           fatal("Unrecognized switch: %s\n",argv[0]);
  838. ! #ifdef OS2
  839.               usage();
  840.   #endif
  841.       }
  842. ***************
  843. *** 95,101 ****
  844.       /* open script */
  845.   
  846.       if (argv[0] == Nullch) {
  847. ! #ifdef MSDOS
  848.       if ( isatty(fileno(stdin)) )
  849.           usage();
  850.   #endif
  851. --- 100,106 ----
  852.       /* open script */
  853.   
  854.       if (argv[0] == Nullch) {
  855. ! #ifdef OS2
  856.       if ( isatty(fileno(stdin)) )
  857.           usage();
  858.   #endif
  859. ***************
  860. *** 216,221 ****
  861. --- 221,232 ----
  862.            *s++,filename,line);
  863.       goto retry;
  864.       case '\\':
  865. +     s++;
  866. +     if (*s && *s != '\n') {
  867. +         yyerror("Ignoring spurious backslash");
  868. +         goto retry;
  869. +     }
  870. +     /*FALLSTHROUGH*/
  871.       case 0:
  872.       s = str_get(linestr);
  873.       *s = '\0';
  874. ***************
  875. *** 802,807 ****
  876. --- 813,820 ----
  877.           *d++ = *s++;
  878.           else if (s[1] == '\\')
  879.           *d++ = *s++;
  880. +         else if (s[1] == '[')
  881. +         *d++ = *s++;
  882.       }
  883.       else if (*s == '[') {
  884.           *d++ = *s++;
  885. ***************
  886. *** 846,856 ****
  887.       while (isdigit(*s)) {
  888.           *d++ = *s++;
  889.       }
  890. !     if (*s == '.' && index("0123456789eE",s[1])) {
  891. !         *d++ = *s++;
  892. !         while (isdigit(*s)) {
  893.           *d++ = *s++;
  894.           }
  895.       }
  896.       if (index("eE",*s) && index("+-0123456789",s[1])) {
  897.           *d++ = *s++;
  898. --- 859,873 ----
  899.       while (isdigit(*s)) {
  900.           *d++ = *s++;
  901.       }
  902. !     if (*s == '.') {
  903. !         if (isdigit(s[1])) {
  904.           *d++ = *s++;
  905. +         while (isdigit(*s)) {
  906. +             *d++ = *s++;
  907. +         }
  908.           }
  909. +         else
  910. +         s++;
  911.       }
  912.       if (index("eE",*s) && index("+-0123456789",s[1])) {
  913.           *d++ = *s++;
  914. ***************
  915. *** 1265,1271 ****
  916.   
  917.       sprintf(tmpbuf,"%s:%d",name,prevargs);
  918.       str = hfetch(curarghash,tmpbuf);
  919. -     fprintf(stderr,"Looking for %s\n",tmpbuf);
  920.       if (str && strEQ(str->str_ptr,"*")) {
  921.           if (type == OVAR || type == OSTAR) {
  922.           ops[arg].ival &= ~255;
  923. --- 1282,1287 ----
  924.  
  925. Index: atarist/usub/acurses.mus
  926. *** atarist/usub/acurses.mus.old    Mon Jun  8 17:45:32 1992
  927. --- atarist/usub/acurses.mus    Mon Jun  8 17:45:32 1992
  928. ***************
  929. *** 0 ****
  930. --- 1,701 ----
  931. + /* $RCSfile: acurses.mus,v $$Revision: 4.0.1.1 $$Date: 92/06/08 11:54:30 $
  932. +  *
  933. +  * $Log:    acurses.mus,v $
  934. +  * Revision 4.0.1.1  92/06/08  11:54:30  lwall
  935. +  * Initial revision
  936. +  * 
  937. +  * Revision 4.0.1.1  91/11/05  19:04:53  lwall
  938. +  * initial checkin
  939. +  * 
  940. +  * Revision 4.0  91/03/20  01:56:13  lwall
  941. +  * 4.0 baseline.
  942. +  * 
  943. +  * Revision 3.0.1.1  90/08/09  04:05:21  lwall
  944. +  * patch19: Initial revision
  945. +  * 
  946. +  */
  947. + #include "EXTERN.h"
  948. + #include "perl.h"
  949. + char *savestr();
  950. + #ifdef atarist    /* save and restore definition of VOID around curses.h */
  951. + # define __SAVEVOID VOID
  952. + # undef  VOID
  953. + #endif
  954. + #include <curses.h>
  955. + static enum uservars {
  956. +     UV_curscr,
  957. +     UV_stdscr,
  958. +     UV_Def_term,
  959. +     UV_My_term,
  960. +     UV_ttytype,
  961. +     UV_LINES,
  962. +     UV_COLS,
  963. +     UV_ERR,
  964. +     UV_OK,
  965. + };
  966. + static enum usersubs {
  967. +     US_addch,
  968. +     US_waddch,
  969. +     US_addstr,
  970. +     US_waddstr,
  971. +     US_box,
  972. +     US_clear,
  973. +     US_wclear,
  974. +     US_clearok,
  975. +     US_clrtobot,
  976. +     US_wclrtobot,
  977. +     US_clrtoeol,
  978. +     US_wclrtoeol,
  979. +     US_delch,
  980. +     US_wdelch,
  981. +     US_deleteln,
  982. +     US_wdeleteln,
  983. +     US_erase,
  984. +     US_werase,
  985. +     US_flushok,
  986. +     US_idlok,
  987. +     US_insch,
  988. +     US_winsch,
  989. +     US_insertln,
  990. +     US_winsertln,
  991. +     US_move,
  992. +     US_wmove,
  993. +     US_overlay,
  994. +     US_overwrite,
  995. +     US_printw,
  996. +     US_wprintw,
  997. +     US_refresh,
  998. +     US_wrefresh,
  999. +     US_standout,
  1000. +     US_wstandout,
  1001. +     US_standend,
  1002. +     US_wstandend,
  1003. +     US_cbreak,
  1004. +     US_nocbreak,
  1005. +     US_echo,
  1006. +     US_noecho,
  1007. +     US_getch,
  1008. +     US_wgetch,
  1009. +     US_getstr,
  1010. +     US_wgetstr,
  1011. +     US_raw,
  1012. +     US_noraw,
  1013. +     US_scanw,
  1014. +     US_wscanw,
  1015. +     US_baudrate,
  1016. +     US_delwin,
  1017. +     US_endwin,
  1018. +     US_erasechar,
  1019. +     US_getcap,
  1020. +     US_getyx,
  1021. +     US_inch,
  1022. +     US_winch,
  1023. +     US_initscr,
  1024. +     US_killchar,
  1025. +     US_leaveok,
  1026. +     US_longname,
  1027. +     US_fullname,
  1028. +     US_mvwin,
  1029. +     US_newwin,
  1030. +     US_nl,
  1031. +     US_nonl,
  1032. +     US_scrollok,
  1033. +     US_subwin,
  1034. +     US_touchline,
  1035. +     US_touchoverlap,
  1036. +     US_touchwin,
  1037. +     US_unctrl,
  1038. +     US_gettmode,
  1039. +     US_mvcur,
  1040. +     US_scroll,
  1041. +     US_savetty,
  1042. +     US_resetty,
  1043. +     US_setterm,
  1044. +     US_tstp,
  1045. +     US__putchar,
  1046. +     US_testcallback,
  1047. + };
  1048. + static int usersub();
  1049. + static int userset();
  1050. + static int userval();
  1051. + int
  1052. + init_curses()
  1053. + {
  1054. +     struct ufuncs uf;
  1055. +     char *filename = "curses.c";
  1056. +     uf.uf_set = userset;
  1057. +     uf.uf_val = userval;
  1058. + #define MAGICVAR(name, ix) uf.uf_index = ix, magicname(name, &uf, sizeof uf)
  1059. +     MAGICVAR("curscr",    UV_curscr);
  1060. +     MAGICVAR("stdscr",    UV_stdscr);
  1061. +     MAGICVAR("Def_term",UV_Def_term);
  1062. +     MAGICVAR("My_term",    UV_My_term);
  1063. +     MAGICVAR("ttytype",    UV_ttytype);
  1064. +     MAGICVAR("LINES",    UV_LINES);
  1065. +     MAGICVAR("COLS",    UV_COLS);
  1066. +     MAGICVAR("ERR",    UV_ERR);
  1067. +     MAGICVAR("OK",    UV_OK);
  1068. +     make_usub("addch",        US_addch,    usersub, filename);
  1069. +     make_usub("waddch",        US_waddch,    usersub, filename);
  1070. +     make_usub("addstr",        US_addstr,    usersub, filename);
  1071. +     make_usub("waddstr",    US_waddstr,    usersub, filename);
  1072. +     make_usub("box",        US_box,        usersub, filename);
  1073. +     make_usub("clear",        US_clear,    usersub, filename);
  1074. +     make_usub("wclear",        US_wclear,    usersub, filename);
  1075. +     make_usub("clearok",    US_clearok,    usersub, filename);
  1076. +     make_usub("clrtobot",    US_clrtobot,    usersub, filename);
  1077. +     make_usub("wclrtobot",    US_wclrtobot,    usersub, filename);
  1078. +     make_usub("clrtoeol",    US_clrtoeol,    usersub, filename);
  1079. +     make_usub("wclrtoeol",    US_wclrtoeol,    usersub, filename);
  1080. +     make_usub("delch",        US_delch,    usersub, filename);
  1081. +     make_usub("wdelch",        US_wdelch,    usersub, filename);
  1082. +     make_usub("deleteln",    US_deleteln,    usersub, filename);
  1083. +     make_usub("wdeleteln",    US_wdeleteln,    usersub, filename);
  1084. +     make_usub("erase",        US_erase,    usersub, filename);
  1085. +     make_usub("werase",        US_werase,    usersub, filename);
  1086. +     make_usub("flushok",    US_flushok,    usersub, filename);
  1087. +     make_usub("idlok",        US_idlok,    usersub, filename);
  1088. +     make_usub("insch",        US_insch,    usersub, filename);
  1089. +     make_usub("winsch",        US_winsch,    usersub, filename);
  1090. +     make_usub("insertln",    US_insertln,    usersub, filename);
  1091. +     make_usub("winsertln",    US_winsertln,    usersub, filename);
  1092. +     make_usub("move",        US_move,    usersub, filename);
  1093. +     make_usub("wmove",        US_wmove,    usersub, filename);
  1094. +     make_usub("overlay",    US_overlay,    usersub, filename);
  1095. +     make_usub("overwrite",    US_overwrite,    usersub, filename);
  1096. +     make_usub("printw",        US_printw,    usersub, filename);
  1097. +     make_usub("wprintw",    US_wprintw,    usersub, filename);
  1098. +     make_usub("refresh",    US_refresh,    usersub, filename);
  1099. +     make_usub("wrefresh",    US_wrefresh,    usersub, filename);
  1100. +     make_usub("standout",    US_standout,    usersub, filename);
  1101. +     make_usub("wstandout",    US_wstandout,    usersub, filename);
  1102. +     make_usub("standend",    US_standend,    usersub, filename);
  1103. +     make_usub("wstandend",    US_wstandend,    usersub, filename);
  1104. +     make_usub("cbreak",        US_cbreak,    usersub, filename);
  1105. +     make_usub("nocbreak",    US_nocbreak,    usersub, filename);
  1106. +     make_usub("echo",        US_echo,    usersub, filename);
  1107. +     make_usub("noecho",        US_noecho,    usersub, filename);
  1108. +     make_usub("getch",        US_getch,    usersub, filename);
  1109. +     make_usub("wgetch",        US_wgetch,    usersub, filename);
  1110. +     make_usub("getstr",        US_getstr,    usersub, filename);
  1111. +     make_usub("wgetstr",    US_wgetstr,    usersub, filename);
  1112. +     make_usub("raw",        US_raw,        usersub, filename);
  1113. +     make_usub("noraw",        US_noraw,    usersub, filename);
  1114. +     make_usub("scanw",        US_scanw,    usersub, filename);
  1115. +     make_usub("wscanw",        US_wscanw,    usersub, filename);
  1116. +     make_usub("baudrate",    US_baudrate,    usersub, filename);
  1117. +     make_usub("delwin",        US_delwin,    usersub, filename);
  1118. +     make_usub("endwin",        US_endwin,    usersub, filename);
  1119. +     make_usub("erasechar",    US_erasechar,    usersub, filename);
  1120. +     make_usub("getcap",        US_getcap,    usersub, filename);
  1121. +     make_usub("getyx",        US_getyx,    usersub, filename);
  1122. +     make_usub("inch",        US_inch,    usersub, filename);
  1123. +     make_usub("winch",        US_winch,    usersub, filename);
  1124. +     make_usub("initscr",    US_initscr,    usersub, filename);
  1125. +     make_usub("killchar",    US_killchar,    usersub, filename);
  1126. +     make_usub("leaveok",    US_leaveok,    usersub, filename);
  1127. +     make_usub("longname",    US_longname,    usersub, filename);
  1128. +     make_usub("fullname",    US_fullname,    usersub, filename);
  1129. +     make_usub("mvwin",        US_mvwin,    usersub, filename);
  1130. +     make_usub("newwin",        US_newwin,    usersub, filename);
  1131. +     make_usub("nl",        US_nl,        usersub, filename);
  1132. +     make_usub("nonl",        US_nonl,    usersub, filename);
  1133. +     make_usub("scrollok",    US_scrollok,    usersub, filename);
  1134. +     make_usub("subwin",        US_subwin,    usersub, filename);
  1135. +     make_usub("touchline",    US_touchline,    usersub, filename);
  1136. +     make_usub("touchoverlap",    US_touchoverlap,usersub, filename);
  1137. +     make_usub("touchwin",    US_touchwin,    usersub, filename);
  1138. +     make_usub("unctrl",        US_unctrl,    usersub, filename);
  1139. +     make_usub("gettmode",    US_gettmode,    usersub, filename);
  1140. +     make_usub("mvcur",        US_mvcur,    usersub, filename);
  1141. +     make_usub("scroll",        US_scroll,    usersub, filename);
  1142. +     make_usub("savetty",    US_savetty,    usersub, filename);
  1143. +     make_usub("resetty",    US_resetty,    usersub, filename);
  1144. +     make_usub("setterm",    US_setterm,    usersub, filename);
  1145. +     make_usub("tstp",        US_tstp,    usersub, filename);
  1146. +     make_usub("_putchar",    US__putchar,    usersub, filename);
  1147. +     make_usub("testcallback",    US_testcallback,usersub, filename);
  1148. + };
  1149. + static int
  1150. + usersub(ix, sp, items)
  1151. + int ix;
  1152. + register int sp;
  1153. + register int items;
  1154. + {
  1155. +     STR **st = stack->ary_array + sp;
  1156. +     register int i;
  1157. +     register char *tmps;
  1158. +     register STR *Str;        /* used in str_get and str_gnum macros */
  1159. +     switch (ix) {
  1160. + CASE int addch
  1161. + I    char        ch
  1162. + END
  1163. + CASE int waddch
  1164. + I    WINDOW*        win
  1165. + I    char        ch
  1166. + END
  1167. + CASE int addstr
  1168. + I    char*        str
  1169. + END
  1170. + CASE int waddstr
  1171. + I    WINDOW*        win
  1172. + I    char*        str
  1173. + END
  1174. + CASE void box
  1175. + I    WINDOW*        win
  1176. + I    char        vert
  1177. + I    char        hor
  1178. + END
  1179. + CASE int clear
  1180. + END
  1181. + CASE int wclear
  1182. + I    WINDOW*        win
  1183. + END
  1184. + CASE int clearok
  1185. + I    WINDOW*        win
  1186. + I    bool        boolf
  1187. + END
  1188. + CASE void clrtobot
  1189. + END
  1190. + CASE void wclrtobot
  1191. + I    WINDOW*        win
  1192. + END
  1193. + CASE void clrtoeol
  1194. + END
  1195. + CASE void wclrtoeol
  1196. + I    WINDOW*        win
  1197. + END
  1198. + CASE int delch
  1199. + END
  1200. + CASE int wdelch
  1201. + I    WINDOW*        win
  1202. + END
  1203. + CASE int deleteln
  1204. + END
  1205. + CASE int wdeleteln
  1206. + I    WINDOW*        win
  1207. + END
  1208. + CASE void erase
  1209. + END
  1210. + CASE void werase
  1211. + I    WINDOW*        win
  1212. + END
  1213. + CASE int flushok
  1214. + I    WINDOW*        win
  1215. + I    bool        boolf
  1216. + END
  1217. + CASE void idlok
  1218. + I    WINDOW*        win
  1219. + I    bool        boolf
  1220. + END
  1221. + CASE int insch
  1222. + I    char        c
  1223. + END
  1224. + CASE int winsch
  1225. + I    WINDOW*        win
  1226. + I    char        c
  1227. + END
  1228. + CASE void insertln
  1229. + END
  1230. + CASE void winsertln
  1231. + I    WINDOW*        win
  1232. + END
  1233. + CASE int move
  1234. + I    int        y
  1235. + I    int        x
  1236. + END
  1237. + CASE int wmove
  1238. + I    WINDOW*        win
  1239. + I    int        y
  1240. + I    int        x
  1241. + END
  1242. + CASE void overlay
  1243. + I    WINDOW*        win1
  1244. + I    WINDOW*        win2
  1245. + END
  1246. + CASE void overwrite
  1247. + I    WINDOW*        win1
  1248. + I    WINDOW*        win2
  1249. + END
  1250. +     case US_printw:
  1251. +     if (items < 1)
  1252. +         fatal("Usage: &printw($fmt, $arg1, $arg2, ... )");
  1253. +     else {
  1254. +         int retval;
  1255. +         STR*    str =        str_new(0);
  1256. +         do_sprintf(str, items - 1, st + 1);
  1257. +         retval = addstr(str->str_ptr);
  1258. +         str_numset(st[0], (double) retval);
  1259. +         str_free(str);
  1260. +     }
  1261. +     return sp;
  1262. +     case US_wprintw:
  1263. +     if (items < 2)
  1264. +         fatal("Usage: &wprintw($win, $fmt, $arg1, $arg2, ... )");
  1265. +     else {
  1266. +         int retval;
  1267. +         STR*    str =        str_new(0);
  1268. +         WINDOW*    win =        *(WINDOW**)    str_get(st[1]);
  1269. +         do_sprintf(str, items - 1, st + 1);
  1270. +         retval = waddstr(win, str->str_ptr);
  1271. +         str_numset(st[0], (double) retval);
  1272. +         str_free(str);
  1273. +     }
  1274. +     return sp;
  1275. + CASE int refresh
  1276. + END
  1277. + CASE int wrefresh
  1278. + I    WINDOW*        win
  1279. + END
  1280. + CASE int standout
  1281. + END
  1282. + CASE void wstandout
  1283. + I    WINDOW*        win
  1284. + END
  1285. + CASE int standend
  1286. + END
  1287. + CASE void wstandend
  1288. + I    WINDOW*        win
  1289. + END
  1290. + CASE int cbreak
  1291. + END
  1292. + CASE int nocbreak
  1293. + END
  1294. + CASE int echo
  1295. + END
  1296. + CASE int noecho
  1297. + END
  1298. +     case US_getch:
  1299. +         if (items != 0)
  1300. +             fatal("Usage: &getch()");
  1301. +         else {
  1302. +             int retval;
  1303. +         char retch;
  1304. +             retval = getch();
  1305. +         if (retval == EOF)
  1306. +         st[0] = &str_undef;
  1307. +         else {
  1308. +         retch = retval;
  1309. +         str_nset(st[0], &retch, 1);
  1310. +         }
  1311. +         }
  1312. +         return sp;
  1313. +     case US_wgetch:
  1314. +         if (items != 1)
  1315. +             fatal("Usage: &wgetch($win)");
  1316. +         else {
  1317. +             int retval;
  1318. +         char retch;
  1319. +             WINDOW*     win =           *(WINDOW**)     str_get(st[1]);
  1320. +             retval = wgetch(win);
  1321. +         if (retval == EOF)
  1322. +         st[0] = &str_undef;
  1323. +         else {
  1324. +         retch = retval;
  1325. +         str_nset(st[0], &retch, 1);
  1326. +         }
  1327. +         }
  1328. +         return sp;
  1329. + CASE int getstr
  1330. + IO    char*        str
  1331. + END
  1332. + CASE int wgetstr
  1333. + I    WINDOW*        win
  1334. + IO    char*        str
  1335. + END
  1336. + CASE int raw
  1337. + END
  1338. + CASE int noraw
  1339. + END
  1340. + CASE int baudrate
  1341. + END
  1342. + CASE void delwin
  1343. + I    WINDOW*        win
  1344. + END
  1345. + CASE void endwin
  1346. + END
  1347. + CASE int erasechar
  1348. + END
  1349. +     case US_getcap:
  1350. +     if (items != 1)
  1351. +         fatal("Usage: &getcap($str)");
  1352. +     else {
  1353. +         char* retval;
  1354. +         char*    str =        (char*)        str_get(st[1]);
  1355. +         char output[50], *outputp = output;
  1356. +         retval = tgetstr(str, &outputp);
  1357. +         str_set(st[0], (char*) retval);
  1358. +     }
  1359. +     return sp;
  1360. +     case US_getyx:
  1361. +     if (items != 3)
  1362. +         fatal("Usage: &getyx($win, $y, $x)");
  1363. +     else {
  1364. +         int retval;
  1365. +         STR*    str =        str_new(0);
  1366. +         WINDOW*    win =        *(WINDOW**)    str_get(st[1]);
  1367. +         int        y;
  1368. +         int        x;
  1369. +         do_sprintf(str, items - 1, st + 1);
  1370. +         retval = getyx(win, y, x);
  1371. +         str_numset(st[2], (double)y);
  1372. +         str_numset(st[3], (double)x);
  1373. +         str_numset(st[0], (double) retval);
  1374. +         str_free(str);
  1375. +     }
  1376. +     return sp;
  1377. +     
  1378. + CASE int inch
  1379. + END
  1380. + CASE int winch
  1381. + I    WINDOW*        win
  1382. + END
  1383. + CASE WINDOW* initscr
  1384. + END
  1385. + CASE int killchar
  1386. + END
  1387. + CASE int leaveok
  1388. + I    WINDOW*        win
  1389. + I    bool        boolf
  1390. + END
  1391. + CASE char* longname
  1392. + I    char*        termbuf
  1393. + IO    char*        name
  1394. + END
  1395. + CASE int fullname
  1396. + I    char*        termbuf
  1397. + IO    char*        name
  1398. + END
  1399. + CASE int mvwin
  1400. + I    WINDOW*        win
  1401. + I    int        y
  1402. + I    int        x
  1403. + END
  1404. + CASE WINDOW* newwin
  1405. + I    int        lines
  1406. + I    int        cols
  1407. + I    int        begin_y
  1408. + I    int        begin_x
  1409. + END
  1410. + CASE int nl
  1411. + END
  1412. + CASE int nonl
  1413. + END
  1414. + CASE int scrollok
  1415. + I    WINDOW*        win
  1416. + I    bool        boolf
  1417. + END
  1418. + CASE WINDOW* subwin
  1419. + I    WINDOW*        win
  1420. + I    int        lines
  1421. + I    int        cols
  1422. + I    int        begin_y
  1423. + I    int        begin_x
  1424. + END
  1425. + CASE void touchline
  1426. + I    WINDOW*        win
  1427. + I    int        y
  1428. + I    int        startx
  1429. + I    int        endx
  1430. + END
  1431. + CASE void touchoverlap
  1432. + I    WINDOW*        win1
  1433. + I    WINDOW*        win2
  1434. + END
  1435. + CASE void touchwin
  1436. + I    WINDOW*        win
  1437. + END
  1438. + CASE char* unctrl
  1439. + I    char        ch
  1440. + END
  1441. + CASE void gettmode
  1442. + END
  1443. + CASE void mvcur
  1444. + I    int        lasty
  1445. + I    int        lastx
  1446. + I    int        newy
  1447. + I    int        newx
  1448. + END
  1449. + CASE int scroll
  1450. + I    WINDOW*        win
  1451. + END
  1452. + CASE int savetty
  1453. + END
  1454. + CASE void resetty
  1455. + END
  1456. + CASE int setterm
  1457. + I    char*        name
  1458. + END
  1459. + CASE void tstp
  1460. + END
  1461. + CASE int _putchar
  1462. + I    char        ch
  1463. + END
  1464. +     case US_testcallback:
  1465. +     sp = callback("callback", sp + items, curcsv->wantarray, 1, items);
  1466. +     break;
  1467. +     default:
  1468. +     fatal("Unimplemented user-defined subroutine");
  1469. +     }
  1470. +     return sp;
  1471. + }
  1472. + static int
  1473. + userval(ix, str)
  1474. + int ix;
  1475. + STR *str;
  1476. + {
  1477. +     switch (ix) {
  1478. +     case UV_COLS:
  1479. +     str_numset(str, (double)COLS);
  1480. +     break;
  1481. +     case UV_Def_term:
  1482. +     str_set(str, Def_term);
  1483. +     break;
  1484. +     case UV_ERR:
  1485. +     str_numset(str, (double)ERR);
  1486. +     break;
  1487. +     case UV_LINES:
  1488. +     str_numset(str, (double)LINES);
  1489. +     break;
  1490. +     case UV_My_term:
  1491. +     str_numset(str, (double)My_term);
  1492. +     break;
  1493. +     case UV_OK:
  1494. +     str_numset(str, (double)OK);
  1495. +     break;
  1496. +     case UV_curscr:
  1497. +     str_nset(str, &curscr, sizeof(WINDOW*));
  1498. +     break;
  1499. +     case UV_stdscr:
  1500. +     str_nset(str, &stdscr, sizeof(WINDOW*));
  1501. +     break;
  1502. +     case UV_ttytype:
  1503. +     str_set(str, ttytype);
  1504. +     break;
  1505. +     }
  1506. +     return 0;
  1507. + }
  1508. + static int
  1509. + userset(ix, str)
  1510. + int ix;
  1511. + STR *str;
  1512. + {
  1513. +     switch (ix) {
  1514. +     case UV_COLS:
  1515. +     COLS = (int)str_gnum(str);
  1516. +     break;
  1517. +     case UV_Def_term:
  1518. +     Def_term = savestr(str_get(str));    /* never freed */
  1519. +     break;
  1520. +     case UV_LINES:
  1521. +     LINES = (int)str_gnum(str);
  1522. +     break;
  1523. +     case UV_My_term:
  1524. +     My_term = (bool)str_gnum(str);
  1525. +     break;
  1526. +     case UV_ttytype:
  1527. +     strcpy(ttytype, str_get(str));        /* hope it fits */
  1528. +     break;
  1529. +     }
  1530. +     return 0;
  1531. + }
  1532.  
  1533. Index: os2/eg/alarm.pl
  1534. *** os2/eg/alarm.pl.old    Mon Jun  8 17:49:52 1992
  1535. --- os2/eg/alarm.pl    Mon Jun  8 17:49:52 1992
  1536. ***************
  1537. *** 4,12 ****
  1538.     exit(0);
  1539.   }
  1540.   
  1541. - $SIG{'INT'} = 'handler';
  1542. - $SIG{'QUIT'} = 'handler';
  1543.   $SIG{'ALRM'} = 'handler';
  1544.   
  1545.   print "Starting execution ...\n";
  1546.   alarm(10);
  1547. --- 4,13 ----
  1548.     exit(0);
  1549.   }
  1550.   
  1551.   $SIG{'ALRM'} = 'handler';
  1552. + $SIG{'INT'} = 'handler';    # Ctrl-C pressed
  1553. + $SIG{'BREAK'} = 'handler';    # Ctrl-Break pressed
  1554. + $SIG{'TERM'} = 'handler';    # Killed by another process
  1555.   
  1556.   print "Starting execution ...\n";
  1557.   alarm(10);
  1558.  
  1559. Index: arg.h
  1560. *** arg.h.old    Mon Jun  8 17:34:47 1992
  1561. --- arg.h    Mon Jun  8 17:34:47 1992
  1562. ***************
  1563. *** 1,4 ****
  1564. ! /* $RCSfile: arg.h,v $$Revision: 4.0.1.2 $$Date: 91/11/05 15:51:05 $
  1565.    *
  1566.    *    Copyright (c) 1991, Larry Wall
  1567.    *
  1568. --- 1,4 ----
  1569. ! /* $RCSfile: arg.h,v $$Revision: 4.0.1.3 $$Date: 92/06/08 11:44:06 $
  1570.    *
  1571.    *    Copyright (c) 1991, Larry Wall
  1572.    *
  1573. ***************
  1574. *** 6,11 ****
  1575. --- 6,15 ----
  1576.    *    License or the Artistic License, as specified in the README file.
  1577.    *
  1578.    * $Log:    arg.h,v $
  1579. +  * Revision 4.0.1.3  92/06/08  11:44:06  lwall
  1580. +  * patch20: O_PIPE conflicted with Atari
  1581. +  * patch20: clarified debugging output for literals and double-quoted strings
  1582. +  * 
  1583.    * Revision 4.0.1.2  91/11/05  15:51:05  lwall
  1584.    * patch11: added eval {}
  1585.    * patch11: added sort {} LIST
  1586. ***************
  1587. *** 286,292 ****
  1588.   #define O_REWINDDIR 263
  1589.   #define O_CLOSEDIR 264
  1590.   #define O_SYSCALL 265
  1591. ! #define O_PIPE 266
  1592.   #define O_TRY 267
  1593.   #define O_EVALONCE 268
  1594.   #define MAXO 269
  1595. --- 290,296 ----
  1596.   #define O_REWINDDIR 263
  1597.   #define O_CLOSEDIR 264
  1598.   #define O_SYSCALL 265
  1599. ! #define O_PIPE_OP 266
  1600.   #define O_TRY 267
  1601.   #define O_EVALONCE 268
  1602.   #define MAXO 269
  1603. ***************
  1604. *** 603,610 ****
  1605.       "CMD",
  1606.       "STAB",
  1607.       "LVAL",
  1608. !     "SINGLE",
  1609. !     "DOUBLE",
  1610.       "BACKTICK",
  1611.       "READ",
  1612.       "SPAT",
  1613. --- 607,614 ----
  1614.       "CMD",
  1615.       "STAB",
  1616.       "LVAL",
  1617. !     "LITERAL",
  1618. !     "DOUBLEQUOTE",
  1619.       "BACKTICK",
  1620.       "READ",
  1621.       "SPAT",
  1622.  
  1623. Index: array.c
  1624. *** array.c.old    Mon Jun  8 17:34:50 1992
  1625. --- array.c    Mon Jun  8 17:34:51 1992
  1626. ***************
  1627. *** 1,4 ****
  1628. ! /* $RCSfile: array.c,v $$Revision: 4.0.1.2 $$Date: 91/11/05 16:00:14 $
  1629.    *
  1630.    *    Copyright (c) 1991, Larry Wall
  1631.    *
  1632. --- 1,4 ----
  1633. ! /* $RCSfile: array.c,v $$Revision: 4.0.1.3 $$Date: 92/06/08 11:45:05 $
  1634.    *
  1635.    *    Copyright (c) 1991, Larry Wall
  1636.    *
  1637. ***************
  1638. *** 6,11 ****
  1639. --- 6,14 ----
  1640.    *    License or the Artistic License, as specified in the README file.
  1641.    *
  1642.    * $Log:    array.c,v $
  1643. +  * Revision 4.0.1.3  92/06/08  11:45:05  lwall
  1644. +  * patch20: Perl now distinguishes overlapped copies from non-overlapped
  1645. +  * 
  1646.    * Revision 4.0.1.2  91/11/05  16:00:14  lwall
  1647.    * patch11: random cleanup
  1648.    * patch11: passing non-existend array elements to subrouting caused core dump
  1649. ***************
  1650. *** 67,73 ****
  1651.   
  1652.       if (ar->ary_alloc != ar->ary_array) {
  1653.           retval = ar->ary_array - ar->ary_alloc;
  1654. !         Copy(ar->ary_array, ar->ary_alloc, ar->ary_max+1, STR*);
  1655.           Zero(ar->ary_alloc+ar->ary_max+1, retval, STR*);
  1656.           ar->ary_max += retval;
  1657.           ar->ary_array -= retval;
  1658. --- 70,76 ----
  1659.   
  1660.       if (ar->ary_alloc != ar->ary_array) {
  1661.           retval = ar->ary_array - ar->ary_alloc;
  1662. !         Move(ar->ary_array, ar->ary_alloc, ar->ary_max+1, STR*);
  1663.           Zero(ar->ary_alloc+ar->ary_max+1, retval, STR*);
  1664.           ar->ary_max += retval;
  1665.           ar->ary_array -= retval;
  1666. ***************
  1667. *** 212,217 ****
  1668. --- 215,221 ----
  1669.       return retval;
  1670.   }
  1671.   
  1672. + void
  1673.   aunshift(ar,num)
  1674.   register ARRAY *ar;
  1675.   register int num;
  1676. ***************
  1677. *** 266,271 ****
  1678. --- 270,276 ----
  1679.       return ar->ary_fill;
  1680.   }
  1681.   
  1682. + void
  1683.   afill(ar, fill)
  1684.   register ARRAY *ar;
  1685.   int fill;
  1686.  
  1687. Index: array.h
  1688. *** array.h.old    Mon Jun  8 17:34:53 1992
  1689. --- array.h    Mon Jun  8 17:34:54 1992
  1690. ***************
  1691. *** 1,4 ****
  1692. ! /* $RCSfile: array.h,v $$Revision: 4.0.1.1 $$Date: 91/06/07 10:19:20 $
  1693.    *
  1694.    *    Copyright (c) 1991, Larry Wall
  1695.    *
  1696. --- 1,4 ----
  1697. ! /* $RCSfile: array.h,v $$Revision: 4.0.1.2 $$Date: 92/06/08 11:45:57 $
  1698.    *
  1699.    *    Copyright (c) 1991, Larry Wall
  1700.    *
  1701. ***************
  1702. *** 6,11 ****
  1703. --- 6,14 ----
  1704.    *    License or the Artistic License, as specified in the README file.
  1705.    *
  1706.    * $Log:    array.h,v $
  1707. +  * Revision 4.0.1.2  92/06/08  11:45:57  lwall
  1708. +  * patch20: removed implicit int declarations on funcions
  1709. +  * 
  1710.    * Revision 4.0.1.1  91/06/07  10:19:20  lwall
  1711.    * patch4: new copyright notice
  1712.    * 
  1713. ***************
  1714. *** 35,37 ****
  1715. --- 38,42 ----
  1716.   int alen();
  1717.   ARRAY *anew();
  1718.   ARRAY *afake();
  1719. + void aunshift();
  1720. + void afill();
  1721.  
  1722. Index: lib/bigrat.pl
  1723. *** lib/bigrat.pl.old    Mon Jun  8 17:48:44 1992
  1724. --- lib/bigrat.pl    Mon Jun  8 17:48:44 1992
  1725. ***************
  1726. *** 3,8 ****
  1727. --- 3,10 ----
  1728.   
  1729.   # Arbitrary size rational math package
  1730.   #
  1731. + # by Mark Biggar
  1732. + #
  1733.   # Input values to these routines consist of strings of the form 
  1734.   #   m|^\s*[+-]?[\d\s]+(/[\d\s]+)?$|.
  1735.   # Examples:
  1736.  
  1737. Index: atarist/test/binhandl
  1738. *** atarist/test/binhandl.old    Mon Jun  8 17:44:53 1992
  1739. --- atarist/test/binhandl    Mon Jun  8 17:44:53 1992
  1740. ***************
  1741. *** 0 ****
  1742. --- 1,15 ----
  1743. + die "Usage: binhandl files ...\n" if $#ARGV < $[;
  1744. + NEXTFILE:
  1745. + while ($FILEHAND = shift) {
  1746. +     unless (open(FILEHAND)) {
  1747. +     printf STDERR "Can't open \"$FILEHAND\"\n";
  1748. +         next NEXTFILE;
  1749. +     }
  1750. +     if (-B FILEHAND) {
  1751. +     print "\"$FILEHAND\" is binary\n";
  1752. +     } else {
  1753. +     print "\"$FILEHAND\" is text\n";
  1754. +     }
  1755. +     close(FILEHAND);
  1756. + }
  1757.  
  1758. Index: lib/cacheout.pl
  1759. *** lib/cacheout.pl.old    Mon Jun  8 17:48:46 1992
  1760. --- lib/cacheout.pl    Mon Jun  8 17:48:47 1992
  1761. ***************
  1762. *** 1,5 ****
  1763. - #!/usr/bin/perl
  1764.   # Open in their package.
  1765.   
  1766.   sub cacheout'open {
  1767. --- 1,3 ----
  1768.  
  1769. *** End of Patch 21 ***
  1770. exit 0 # Just in case...
  1771.