home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume35 / ipick / part01 < prev    next >
Encoding:
Text File  |  1993-03-03  |  58.7 KB  |  1,558 lines

  1. Newsgroups: comp.sources.misc
  2. From: markd@werple.apana.org.au (Mark Delany)
  3. Subject: v35i117:  ipick - an interactive filter to pick lines, Part01/05
  4. Message-ID: <csm-v35i117=ipick.132123@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: 074f52d8938b546f66e2119c52af909c
  6. Date: Thu, 4 Mar 1993 19:21:59 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: markd@werple.apana.org.au (Mark Delany)
  10. Posting-number: Volume 35, Issue 117
  11. Archive-name: ipick/part01
  12. Environment: UNIX, Curses
  13.  
  14. ipick is a curses based filter to "Interactively PICK" lines from
  15. stdin to create a subset written to stdout. There are many commands to
  16. select, unselect, scroll, navigate and search through the data. There
  17. is a default set key bindings which provide a reasonable subset from
  18. emacs, more and vi (this prog is ecumenical). Additionally you can
  19. create your own bindings.
  20.  
  21. The only goal of ipick is to be a general purpose, easy to use,
  22. interactive filter. Importantly, ipick has been designed so that you
  23. can safely use it as the interactive component of all those neat
  24. pipelines you'd *like* to give to your unix-naive users.
  25. --------
  26. #! /bin/sh
  27. # This is a shell archive.  Remove anything before this line, then feed it
  28. # into a shell via "sh file" or similar.  To overwrite existing files,
  29. # type "sh file -c".
  30. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  31. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  32. # Contents:  ipick ipick/README ipick/Artistic ipick/COPYING
  33. #   ipick/INSTALL ipick/MANIFEST ipick/PORTING ipick/Makefile
  34. #   ipick/main.mk ipick/config ipick/language ipick/examples
  35. #   ipick/HISTORY ipick/TODO ipick/config.h ipick/patchlevel.h
  36. #   ipick/config/3b1 ipick/config/aux ipick/config/bsd386
  37. #   ipick/config/bsd43
  38. # Wrapped by markd@bushwire on Sun Feb 28 10:06:37 1993
  39. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  40. echo If this archive is complete, you will see the following message:
  41. echo '          "shar: End of archive 1 (of 5)."'
  42. if test ! -d 'ipick' ; then
  43.     echo shar: Creating directory \"'ipick'\"
  44.     mkdir 'ipick'
  45. fi
  46. if test -f 'ipick/README' -a "${1}" != "-c" ; then 
  47.   echo shar: Will not clobber existing file \"'ipick/README'\"
  48. else
  49.   echo shar: Extracting \"'ipick/README'\" \(7386 characters\)
  50.   sed "s/^X//" >'ipick/README' <<'END_OF_FILE'
  51. X            Ipick Kit, Version 1.1
  52. X
  53. X        Copyright (c) 1992, 1993 by Mark Delany 
  54. X            All rights reserved.
  55. X
  56. X    This program is free software; you can redistribute it and/or
  57. X    modify it under the terms of either:
  58. X    
  59. X    a) the GNU General Public License as published by the Free
  60. X    Software Foundation; either version 2, or (at your option) any
  61. X    later version, or
  62. X
  63. X    b) the "Artistic License" which comes with this Kit.
  64. X
  65. X    This program is distributed in the hope that it will be useful,
  66. X    but WITHOUT ANY WARRANTY; without even the implied warranty of
  67. X    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See either
  68. X    the GNU General Public License or the Artistic License for more
  69. X    details.
  70. X
  71. X    You should have received a copy of the Artistic License with this
  72. X    Kit, in the file named "Artistic". If not, I'll be glad to provide
  73. X    one.
  74. X
  75. X    You should also have received a copy of the GNU General Public
  76. X    License with this kit, in the file named "COPYING". If not, write
  77. X    to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
  78. X    02139, USA.
  79. X
  80. X
  81. X
  82. XIntroduction
  83. X============
  84. X
  85. XThis file contains:
  86. X
  87. X    o    a brief description of ipick (there is a manpage)
  88. X    o    what's new in this release
  89. X    o    acknowledgements
  90. X
  91. XSee INSTALL for details on how to make and install ipick.
  92. X
  93. XSee PORTING for details on what to do if your machine isn't supported.
  94. X
  95. X
  96. XWhat is ipick?
  97. X==============
  98. X
  99. Xipick is a curses based filter to "Interactively PICK" lines from
  100. Xstdin to create a subset written to stdout. There are many commands to
  101. Xselect, unselect, scroll, navigate and search through the data. There
  102. Xis a default set key bindings which provide a reasonable subset from
  103. Xemacs, more and vi (this prog is ecumenical). Additionally you can
  104. Xcreate your own bindings.
  105. X
  106. XThe only goal of ipick is to be a general purpose, easy to use,
  107. Xinteractive filter. Importantly, ipick has been designed so that you
  108. Xcan safely use it as the interactive component of all those neat
  109. Xpipelines you'd *like* to give to your unix-naive users.
  110. X
  111. X    [By way of comparison to ni, ipick has many more bells and
  112. X    whistles including: multiple line selections, online help,
  113. X    searching, titles extracted from the upstream commands, Xterm
  114. X    mouse support, shelling and piping, restricted mode,
  115. X    configurable bindings, etc.  Additionally, ipick does not
  116. X    require temporary files.  However, ipick relies on a
  117. X    downstream filter to parse the output while ni provides some
  118. X    built-in filtering.]
  119. X
  120. XThe idea is that oftentimes it is a non-trivial process to accurately
  121. Xfilter stdin with grep/awk/perl/whatever. I stress the accuracy part
  122. Xas getting a filter *almost* perfect is easy, getting it perfect is
  123. Xnot. With ipick you can construct simple filters that do most of the
  124. Xwork for you and use the interactive component (that's you :-) to
  125. Xcomplete or confirm the process.
  126. X
  127. X
  128. XThink about how you typically build a pipeline for the following
  129. Xrequests:
  130. X
  131. X1.    ``Kill my awk process, it's hung my terminal.''
  132. X2.    ``Remove my print job, I've run the wrong report.''
  133. X3.    ``Extract a subset of files from a tar file.''
  134. X
  135. Xipick is ideal in these situations as it let's you build a pipeline
  136. Xthat achieves the desired result interactively in a single, simple
  137. Xeasy-to-use operation.
  138. X
  139. XIn general, ipick is good glue whenever you use "Identifier Driven
  140. XCommand Pairs".
  141. X
  142. XWhat are "Identifier Driven Command Pairs"?
  143. X
  144. XThey are complementary commands where one command generates a listing
  145. Xof unique identifer entries and the second command acts on those
  146. Xidentied entries. Examples?
  147. X
  148. Xps/kill, lpq/lprm, atq/atrm, tar t/tar x, ipcs/ipcrm, ls/rm, ls/vi, etc.
  149. X
  150. X
  151. XTypically ipick is used as part of a predefined pipeline (alias or
  152. Xfunction depending on your shell). One example that I use a lot is:
  153. X
  154. XExample: 1
  155. X
  156. Xkill -9 `ps|ipick -T1|awk '{ print $1 }'`
  157. X
  158. XThis provides a screen display of the ps output from which the user
  159. Xselects the specific lines. The selected lines are passed to awk to
  160. Xselect just the pid from each line, which in turn is passed back to
  161. Xkill.
  162. X
  163. X
  164. XExample: 2
  165. X
  166. Xlpq | grep `whoami` | ipick -t"Pick Print jobs to remove" |    \
  167. X     awk '{ print $3 }' | xargs lprm
  168. X
  169. X
  170. XThis is the type of pipeline that you give to your users. It lists the
  171. Xprint jobs in the queue and lets them pick those to remove with lprm.
  172. X
  173. X
  174. XExample: 3
  175. X
  176. X    tar t | ipick | xargs tar xv
  177. X
  178. XThis very useful example provides a list of files from the tar file
  179. Xfrom which a subset is selected to extract. (Note this example has a
  180. Xnumber of limitations in it's current form).
  181. X
  182. X
  183. XExample: 4
  184. X
  185. XThis is a more complete solution to Example 3 and it's pretty close to my
  186. Xfavourite function. If you have lots of .tar files that you need to extract
  187. Xbits from then this may become your favourite too (Just change /dev/rmt8 to
  188. Xyour systems default tape and "Bob's your uncle".)
  189. X
  190. Xtar tvf ${1:-/dev/rmt8} | sed -e 's./$..' |
  191. X    ipick -t "      Pick files to extract from ${1:-/dev/rmt8}" |
  192. X    cut -c42- | xargs -i -t tar xvf ${1:-/dev/rmt8} {}
  193. X
  194. X
  195. XExample: 5
  196. X
  197. Xrm -ri `ls -la | tail +2l | ipick -t"Select files to delete" | cut -45-`
  198. X
  199. XThis pipeline lets you pick a set of files to remove with rm.
  200. X
  201. X
  202. XExample: 6
  203. X
  204. X    cp `ls | ipick` /somewhere/or/other/.
  205. X
  206. XPick files to copy from the local directory to another location.
  207. X
  208. X
  209. XWhat's new at 1.1
  210. X=================
  211. X
  212. XThis is the second release of ipick (1.0 was a Beta release to
  213. Xalt.sources). New features at this release are:
  214. X
  215. X1)    RC files.
  216. X
  217. X    I finally succumbed. If present, ipick loads a system-wide .rc
  218. X    file then a user-specific .rc file. All you can do at the
  219. X    moment in these files is define key bindings and include files
  220. X    that contain the same thing.
  221. X
  222. X
  223. X2)    Bindings specific help.
  224. X
  225. X    The online help now displays the actually keybindings active
  226. X    rather than all possible.
  227. X
  228. X
  229. X3)    Language support.
  230. X
  231. X    All text messages are now located in a single source file so
  232. X    new language files can be easily generated. All you have to do
  233. X    is copy language/english to language/whatever and provide the
  234. X    translation. Simple! Ahem, cough. Any translations greatfully
  235. X    received!
  236. X
  237. X
  238. X4)    Re-arrangement of some options (-v, -R, -V, -s)
  239. X
  240. X
  241. X5)    Removal of special signal processing to abort long running
  242. X    commands - it was a silly idea and painful to implement.
  243. X
  244. X
  245. X6)    Title string can now have escape characters. Especially useful
  246. X    should be \n and \t.
  247. X
  248. X
  249. X7)    There were no bugs reported so I've introduced a few.
  250. X
  251. X
  252. X
  253. XAcknowledgements
  254. X================
  255. X
  256. XI am indebted to the following people for making ipick *much* better
  257. Xthan it originally was.
  258. X
  259. XFor completely re-vamping the manpage:
  260. X
  261. XDaviD W. Sanderson    <dws@ssec.wisc.edu>
  262. X
  263. Xwith additional manpage improvements from:
  264. X
  265. XRich Salz        <rsalz@osf.org>
  266. X
  267. XFor providing the german text messages:
  268. X
  269. XPeter Funk        <pf@artcom0.north.de>
  270. X
  271. XFor permission to plagiarize his Artistic license and copyright intro:
  272. X
  273. XLarry Wall        <lwall@netlabs.com>
  274. X
  275. X
  276. XFor providing suggestions and testing portability on their systems:
  277. X
  278. XDoug Acker        <dla@se05.wg2.waii.com>
  279. XJohn Alsop        <jalsop@seachg.com>
  280. XPhilip Copeland        <p_copela@csd.bristol-poly.ac.uk>
  281. XJoseph M DeAngelo    <wrkgrp!tardis!jmd@uunet.uu.net>
  282. XAndy Dougherty        <doughera@lafcol.lafayette.edu>
  283. XAndrew Herbert        <andrew@werple.apana.org.au>
  284. XKenneth Jacker        <khj@cs.cs.appstate.edu>
  285. XDavid Raz        <draz@ee.technion.ac.il>
  286. XRich Salz        <rsalz@osf.org>
  287. XDaviD W. Sanderson    <dws@ssec.wisc.edu>
  288. XJo Stockley        <jo@88open.org>
  289. XPetri Wessman        <petri@cerebus.inter.fi>
  290. X
  291. X
  292. XAuthor
  293. X======
  294. X
  295. XMark Delany        <markd@werple.apana.org.au>
  296. X
  297. XMelbourne,
  298. XAustralia
  299. END_OF_FILE
  300.   if test 7386 -ne `wc -c <'ipick/README'`; then
  301.     echo shar: \"'ipick/README'\" unpacked with wrong size!
  302.   fi
  303.   # end of 'ipick/README'
  304. fi
  305. if test -f 'ipick/Artistic' -a "${1}" != "-c" ; then 
  306.   echo shar: Will not clobber existing file \"'ipick/Artistic'\"
  307. else
  308.   echo shar: Extracting \"'ipick/Artistic'\" \(5182 characters\)
  309.   sed "s/^X//" >'ipick/Artistic' <<'END_OF_FILE'
  310. X
  311. X
  312. X
  313. X
  314. X             The "Artistic License"
  315. X
  316. X                Preamble
  317. X
  318. XThe intent of this document is to state the conditions under which a
  319. XPackage may be copied, such that the Copyright Holder maintains some
  320. Xsemblance of artistic control over the development of the package,
  321. Xwhile giving the users of the package the right to use and distribute
  322. Xthe Package in a more-or-less customary fashion, plus the right to make
  323. Xreasonable modifications.
  324. X
  325. XDefinitions:
  326. X
  327. X    "Package" refers to the collection of files distributed by the
  328. X    Copyright Holder, and derivatives of that collection of files
  329. X    created through textual modification.
  330. X
  331. X    "Standard Version" refers to such a Package if it has not been
  332. X    modified, or has been modified in accordance with the wishes
  333. X    of the Copyright Holder.
  334. X
  335. X    "Copyright Holder" is whoever is named in the copyright or
  336. X    copyrights for the package.
  337. X
  338. X    "You" is you, if you're thinking about copying or distributing
  339. X    this Package.
  340. X
  341. X    "Reasonable copying fee" is whatever you can justify on the
  342. X    basis of media cost, duplication charges, time of people involved,
  343. X    and so on.  (You will not be required to justify it to the
  344. X    Copyright Holder, but only to the computing community at large
  345. X    as a market that must bear the fee.)
  346. X
  347. X    "Freely Available" means that no fee is charged for the item
  348. X    itself, though there may be fees involved in handling the item.
  349. X    It also means that recipients of the item may redistribute it
  350. X    under the same conditions they received it.
  351. X
  352. X1. You may make and give away verbatim copies of the source form of the
  353. XStandard Version of this Package without restriction, provided that you
  354. Xduplicate all of the original copyright notices and associated disclaimers.
  355. X
  356. X2. You may apply bug fixes, portability fixes and other modifications
  357. Xderived from the Public Domain or from the Copyright Holder.  A Package
  358. Xmodified in such a way shall still be considered the Standard Version.
  359. X
  360. X3. You may otherwise modify your copy of this Package in any way, provided
  361. Xthat you insert a prominent notice in each changed file stating how and
  362. Xwhen you changed that file, and provided that you do at least ONE of the
  363. Xfollowing:
  364. X
  365. X    a) place your modifications in the Public Domain or otherwise make them
  366. X    Freely Available, such as by posting said modifications to Usenet or
  367. X    an equivalent medium, or placing the modifications on a major archive
  368. X    site such as uunet.uu.net, or by allowing the Copyright Holder to include
  369. X    your modifications in the Standard Version of the Package.
  370. X
  371. X    b) use the modified Package only within your corporation or organization.
  372. X
  373. X    c) rename any non-standard executables so the names do not conflict
  374. X    with standard executables, which must also be provided, and provide
  375. X    a separate manual page for each non-standard executable that clearly
  376. X    documents how it differs from the Standard Version.
  377. X
  378. X    d) make other distribution arrangements with the Copyright Holder.
  379. X
  380. X4. You may distribute the programs of this Package in object code or
  381. Xexecutable form, provided that you do at least ONE of the following:
  382. X
  383. X    a) distribute a Standard Version of the executables and library files,
  384. X    together with instructions (in the manual page or equivalent) on where
  385. X    to get the Standard Version.
  386. X
  387. X    b) accompany the distribution with the machine-readable source of
  388. X    the Package with your modifications.
  389. X
  390. X    c) accompany any non-standard executables with their corresponding
  391. X    Standard Version executables, giving the non-standard executables
  392. X    non-standard names, and clearly documenting the differences in manual
  393. X    pages (or equivalent), together with instructions on where to get
  394. X    the Standard Version.
  395. X
  396. X    d) make other distribution arrangements with the Copyright Holder.
  397. X
  398. X5. You may charge a reasonable copying fee for any distribution of this
  399. XPackage.  You may charge any fee you choose for support of this Package.
  400. XYou may not charge a fee for this Package itself.  However,
  401. Xyou may distribute this Package in aggregate with other (possibly
  402. Xcommercial) programs as part of a larger (possibly commercial) software
  403. Xdistribution provided that you do not advertise this Package as a
  404. Xproduct of your own.
  405. X
  406. X6. The scripts and library files supplied as input to or produced as
  407. Xoutput from the programs of this Package do not automatically fall
  408. Xunder the copyright of this Package, but belong to whomever generated
  409. Xthem, and may be sold commercially, and may be aggregated with this
  410. XPackage.
  411. X
  412. X7. C subroutines supplied by you and linked into this Package in order
  413. Xto emulate subroutines and variables of the language defined by this
  414. XPackage shall not be considered part of this Package, but are the
  415. Xequivalent of input as in Paragraph 6, provided these subroutines do
  416. Xnot change the language in any way that would cause it to fail the
  417. Xregression tests for the language.
  418. X
  419. X8. The name of the Copyright Holder may not be used to endorse or promote
  420. Xproducts derived from this software without specific prior written permission.
  421. X
  422. X9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
  423. XIMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  424. XWARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  425. X
  426. X                The End
  427. END_OF_FILE
  428.   if test 5182 -ne `wc -c <'ipick/Artistic'`; then
  429.     echo shar: \"'ipick/Artistic'\" unpacked with wrong size!
  430.   fi
  431.   # end of 'ipick/Artistic'
  432. fi
  433. if test -f 'ipick/COPYING' -a "${1}" != "-c" ; then 
  434.   echo shar: Will not clobber existing file \"'ipick/COPYING'\"
  435. else
  436.   echo shar: Extracting \"'ipick/COPYING'\" \(17982 characters\)
  437.   sed "s/^X//" >'ipick/COPYING' <<'END_OF_FILE'
  438. X            GNU GENERAL PUBLIC LICENSE
  439. X               Version 2, June 1991
  440. X
  441. X Copyright (C) 1989, 1991 Free Software Foundation, Inc.
  442. X                          675 Mass Ave, Cambridge, MA 02139, USA
  443. X Everyone is permitted to copy and distribute verbatim copies
  444. X of this license document, but changing it is not allowed.
  445. X
  446. X                Preamble
  447. X
  448. X  The licenses for most software are designed to take away your
  449. Xfreedom to share and change it.  By contrast, the GNU General Public
  450. XLicense is intended to guarantee your freedom to share and change free
  451. Xsoftware--to make sure the software is free for all its users.  This
  452. XGeneral Public License applies to most of the Free Software
  453. XFoundation's software and to any other program whose authors commit to
  454. Xusing it.  (Some other Free Software Foundation software is covered by
  455. Xthe GNU Library General Public License instead.)  You can apply it to
  456. Xyour programs, too.
  457. X
  458. X  When we speak of free software, we are referring to freedom, not
  459. Xprice.  Our General Public Licenses are designed to make sure that you
  460. Xhave the freedom to distribute copies of free software (and charge for
  461. Xthis service if you wish), that you receive source code or can get it
  462. Xif you want it, that you can change the software or use pieces of it
  463. Xin new free programs; and that you know you can do these things.
  464. X
  465. X  To protect your rights, we need to make restrictions that forbid
  466. Xanyone to deny you these rights or to ask you to surrender the rights.
  467. XThese restrictions translate to certain responsibilities for you if you
  468. Xdistribute copies of the software, or if you modify it.
  469. X
  470. X  For example, if you distribute copies of such a program, whether
  471. Xgratis or for a fee, you must give the recipients all the rights that
  472. Xyou have.  You must make sure that they, too, receive or can get the
  473. Xsource code.  And you must show them these terms so they know their
  474. Xrights.
  475. X
  476. X  We protect your rights with two steps: (1) copyright the software, and
  477. X(2) offer you this license which gives you legal permission to copy,
  478. Xdistribute and/or modify the software.
  479. X
  480. X  Also, for each author's protection and ours, we want to make certain
  481. Xthat everyone understands that there is no warranty for this free
  482. Xsoftware.  If the software is modified by someone else and passed on, we
  483. Xwant its recipients to know that what they have is not the original, so
  484. Xthat any problems introduced by others will not reflect on the original
  485. Xauthors' reputations.
  486. X
  487. X  Finally, any free program is threatened constantly by software
  488. Xpatents.  We wish to avoid the danger that redistributors of a free
  489. Xprogram will individually obtain patent licenses, in effect making the
  490. Xprogram proprietary.  To prevent this, we have made it clear that any
  491. Xpatent must be licensed for everyone's free use or not licensed at all.
  492. X
  493. X  The precise terms and conditions for copying, distribution and
  494. Xmodification follow.
  495. X
  496. X            GNU GENERAL PUBLIC LICENSE
  497. X   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  498. X
  499. X  0. This License applies to any program or other work which contains
  500. Xa notice placed by the copyright holder saying it may be distributed
  501. Xunder the terms of this General Public License.  The "Program", below,
  502. Xrefers to any such program or work, and a "work based on the Program"
  503. Xmeans either the Program or any derivative work under copyright law:
  504. Xthat is to say, a work containing the Program or a portion of it,
  505. Xeither verbatim or with modifications and/or translated into another
  506. Xlanguage.  (Hereinafter, translation is included without limitation in
  507. Xthe term "modification".)  Each licensee is addressed as "you".
  508. X
  509. XActivities other than copying, distribution and modification are not
  510. Xcovered by this License; they are outside its scope.  The act of
  511. Xrunning the Program is not restricted, and the output from the Program
  512. Xis covered only if its contents constitute a work based on the
  513. XProgram (independent of having been made by running the Program).
  514. XWhether that is true depends on what the Program does.
  515. X
  516. X  1. You may copy and distribute verbatim copies of the Program's
  517. Xsource code as you receive it, in any medium, provided that you
  518. Xconspicuously and appropriately publish on each copy an appropriate
  519. Xcopyright notice and disclaimer of warranty; keep intact all the
  520. Xnotices that refer to this License and to the absence of any warranty;
  521. Xand give any other recipients of the Program a copy of this License
  522. Xalong with the Program.
  523. X
  524. XYou may charge a fee for the physical act of transferring a copy, and
  525. Xyou may at your option offer warranty protection in exchange for a fee.
  526. X
  527. X  2. You may modify your copy or copies of the Program or any portion
  528. Xof it, thus forming a work based on the Program, and copy and
  529. Xdistribute such modifications or work under the terms of Section 1
  530. Xabove, provided that you also meet all of these conditions:
  531. X
  532. X    a) You must cause the modified files to carry prominent notices
  533. X    stating that you changed the files and the date of any change.
  534. X
  535. X    b) You must cause any work that you distribute or publish, that in
  536. X    whole or in part contains or is derived from the Program or any
  537. X    part thereof, to be licensed as a whole at no charge to all third
  538. X    parties under the terms of this License.
  539. X
  540. X    c) If the modified program normally reads commands interactively
  541. X    when run, you must cause it, when started running for such
  542. X    interactive use in the most ordinary way, to print or display an
  543. X    announcement including an appropriate copyright notice and a
  544. X    notice that there is no warranty (or else, saying that you provide
  545. X    a warranty) and that users may redistribute the program under
  546. X    these conditions, and telling the user how to view a copy of this
  547. X    License.  (Exception: if the Program itself is interactive but
  548. X    does not normally print such an announcement, your work based on
  549. X    the Program is not required to print an announcement.)
  550. X
  551. XThese requirements apply to the modified work as a whole.  If
  552. Xidentifiable sections of that work are not derived from the Program,
  553. Xand can be reasonably considered independent and separate works in
  554. Xthemselves, then this License, and its terms, do not apply to those
  555. Xsections when you distribute them as separate works.  But when you
  556. Xdistribute the same sections as part of a whole which is a work based
  557. Xon the Program, the distribution of the whole must be on the terms of
  558. Xthis License, whose permissions for other licensees extend to the
  559. Xentire whole, and thus to each and every part regardless of who wrote it.
  560. X
  561. XThus, it is not the intent of this section to claim rights or contest
  562. Xyour rights to work written entirely by you; rather, the intent is to
  563. Xexercise the right to control the distribution of derivative or
  564. Xcollective works based on the Program.
  565. X
  566. XIn addition, mere aggregation of another work not based on the Program
  567. Xwith the Program (or with a work based on the Program) on a volume of
  568. Xa storage or distribution medium does not bring the other work under
  569. Xthe scope of this License.
  570. X
  571. X  3. You may copy and distribute the Program (or a work based on it,
  572. Xunder Section 2) in object code or executable form under the terms of
  573. XSections 1 and 2 above provided that you also do one of the following:
  574. X
  575. X    a) Accompany it with the complete corresponding machine-readable
  576. X    source code, which must be distributed under the terms of Sections
  577. X    1 and 2 above on a medium customarily used for software interchange; or,
  578. X
  579. X    b) Accompany it with a written offer, valid for at least three
  580. X    years, to give any third party, for a charge no more than your
  581. X    cost of physically performing source distribution, a complete
  582. X    machine-readable copy of the corresponding source code, to be
  583. X    distributed under the terms of Sections 1 and 2 above on a medium
  584. X    customarily used for software interchange; or,
  585. X
  586. X    c) Accompany it with the information you received as to the offer
  587. X    to distribute corresponding source code.  (This alternative is
  588. X    allowed only for noncommercial distribution and only if you
  589. X    received the program in object code or executable form with such
  590. X    an offer, in accord with Subsection b above.)
  591. X
  592. XThe source code for a work means the preferred form of the work for
  593. Xmaking modifications to it.  For an executable work, complete source
  594. Xcode means all the source code for all modules it contains, plus any
  595. Xassociated interface definition files, plus the scripts used to
  596. Xcontrol compilation and installation of the executable.  However, as a
  597. Xspecial exception, the source code distributed need not include
  598. Xanything that is normally distributed (in either source or binary
  599. Xform) with the major components (compiler, kernel, and so on) of the
  600. Xoperating system on which the executable runs, unless that component
  601. Xitself accompanies the executable.
  602. X
  603. XIf distribution of executable or object code is made by offering
  604. Xaccess to copy from a designated place, then offering equivalent
  605. Xaccess to copy the source code from the same place counts as
  606. Xdistribution of the source code, even though third parties are not
  607. Xcompelled to copy the source along with the object code.
  608. X
  609. X  4. You may not copy, modify, sublicense, or distribute the Program
  610. Xexcept as expressly provided under this License.  Any attempt
  611. Xotherwise to copy, modify, sublicense or distribute the Program is
  612. Xvoid, and will automatically terminate your rights under this License.
  613. XHowever, parties who have received copies, or rights, from you under
  614. Xthis License will not have their licenses terminated so long as such
  615. Xparties remain in full compliance.
  616. X
  617. X  5. You are not required to accept this License, since you have not
  618. Xsigned it.  However, nothing else grants you permission to modify or
  619. Xdistribute the Program or its derivative works.  These actions are
  620. Xprohibited by law if you do not accept this License.  Therefore, by
  621. Xmodifying or distributing the Program (or any work based on the
  622. XProgram), you indicate your acceptance of this License to do so, and
  623. Xall its terms and conditions for copying, distributing or modifying
  624. Xthe Program or works based on it.
  625. X
  626. X  6. Each time you redistribute the Program (or any work based on the
  627. XProgram), the recipient automatically receives a license from the
  628. Xoriginal licensor to copy, distribute or modify the Program subject to
  629. Xthese terms and conditions.  You may not impose any further
  630. Xrestrictions on the recipients' exercise of the rights granted herein.
  631. XYou are not responsible for enforcing compliance by third parties to
  632. Xthis License.
  633. X
  634. X  7. If, as a consequence of a court judgment or allegation of patent
  635. Xinfringement or for any other reason (not limited to patent issues),
  636. Xconditions are imposed on you (whether by court order, agreement or
  637. Xotherwise) that contradict the conditions of this License, they do not
  638. Xexcuse you from the conditions of this License.  If you cannot
  639. Xdistribute so as to satisfy simultaneously your obligations under this
  640. XLicense and any other pertinent obligations, then as a consequence you
  641. Xmay not distribute the Program at all.  For example, if a patent
  642. Xlicense would not permit royalty-free redistribution of the Program by
  643. Xall those who receive copies directly or indirectly through you, then
  644. Xthe only way you could satisfy both it and this License would be to
  645. Xrefrain entirely from distribution of the Program.
  646. X
  647. XIf any portion of this section is held invalid or unenforceable under
  648. Xany particular circumstance, the balance of the section is intended to
  649. Xapply and the section as a whole is intended to apply in other
  650. Xcircumstances.
  651. X
  652. XIt is not the purpose of this section to induce you to infringe any
  653. Xpatents or other property right claims or to contest validity of any
  654. Xsuch claims; this section has the sole purpose of protecting the
  655. Xintegrity of the free software distribution system, which is
  656. Ximplemented by public license practices.  Many people have made
  657. Xgenerous contributions to the wide range of software distributed
  658. Xthrough that system in reliance on consistent application of that
  659. Xsystem; it is up to the author/donor to decide if he or she is willing
  660. Xto distribute software through any other system and a licensee cannot
  661. Ximpose that choice.
  662. X
  663. XThis section is intended to make thoroughly clear what is believed to
  664. Xbe a consequence of the rest of this License.
  665. X
  666. X  8. If the distribution and/or use of the Program is restricted in
  667. Xcertain countries either by patents or by copyrighted interfaces, the
  668. Xoriginal copyright holder who places the Program under this License
  669. Xmay add an explicit geographical distribution limitation excluding
  670. Xthose countries, so that distribution is permitted only in or among
  671. Xcountries not thus excluded.  In such case, this License incorporates
  672. Xthe limitation as if written in the body of this License.
  673. X
  674. X  9. The Free Software Foundation may publish revised and/or new versions
  675. Xof the General Public License from time to time.  Such new versions will
  676. Xbe similar in spirit to the present version, but may differ in detail to
  677. Xaddress new problems or concerns.
  678. X
  679. XEach version is given a distinguishing version number.  If the Program
  680. Xspecifies a version number of this License which applies to it and "any
  681. Xlater version", you have the option of following the terms and conditions
  682. Xeither of that version or of any later version published by the Free
  683. XSoftware Foundation.  If the Program does not specify a version number of
  684. Xthis License, you may choose any version ever published by the Free Software
  685. XFoundation.
  686. X
  687. X  10. If you wish to incorporate parts of the Program into other free
  688. Xprograms whose distribution conditions are different, write to the author
  689. Xto ask for permission.  For software which is copyrighted by the Free
  690. XSoftware Foundation, write to the Free Software Foundation; we sometimes
  691. Xmake exceptions for this.  Our decision will be guided by the two goals
  692. Xof preserving the free status of all derivatives of our free software and
  693. Xof promoting the sharing and reuse of software generally.
  694. X
  695. X                NO WARRANTY
  696. X
  697. X  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  698. XFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
  699. XOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  700. XPROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  701. XOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  702. XMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
  703. XTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  704. XPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  705. XREPAIR OR CORRECTION.
  706. X
  707. X  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  708. XWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  709. XREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  710. XINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
  711. XOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
  712. XTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
  713. XYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  714. XPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  715. XPOSSIBILITY OF SUCH DAMAGES.
  716. X
  717. X             END OF TERMS AND CONDITIONS
  718. X
  719. X    Appendix: How to Apply These Terms to Your New Programs
  720. X
  721. X  If you develop a new program, and you want it to be of the greatest
  722. Xpossible use to the public, the best way to achieve this is to make it
  723. Xfree software which everyone can redistribute and change under these terms.
  724. X
  725. X  To do so, attach the following notices to the program.  It is safest
  726. Xto attach them to the start of each source file to most effectively
  727. Xconvey the exclusion of warranty; and each file should have at least
  728. Xthe "copyright" line and a pointer to where the full notice is found.
  729. X
  730. X    <one line to give the program's name and a brief idea of what it does.>
  731. X    Copyright (C) 19yy  <name of author>
  732. X
  733. X    This program is free software; you can redistribute it and/or modify
  734. X    it under the terms of the GNU General Public License as published by
  735. X    the Free Software Foundation; either version 2 of the License, or
  736. X    (at your option) any later version.
  737. X
  738. X    This program is distributed in the hope that it will be useful,
  739. X    but WITHOUT ANY WARRANTY; without even the implied warranty of
  740. X    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  741. X    GNU General Public License for more details.
  742. X
  743. X    You should have received a copy of the GNU General Public License
  744. X    along with this program; if not, write to the Free Software
  745. X    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  746. X
  747. XAlso add information on how to contact you by electronic and paper mail.
  748. X
  749. XIf the program is interactive, make it output a short notice like this
  750. Xwhen it starts in an interactive mode:
  751. X
  752. X    Gnomovision version 69, Copyright (C) 19yy name of author
  753. X    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
  754. X    This is free software, and you are welcome to redistribute it
  755. X    under certain conditions; type `show c' for details.
  756. X
  757. XThe hypothetical commands `show w' and `show c' should show the appropriate
  758. Xparts of the General Public License.  Of course, the commands you use may
  759. Xbe called something other than `show w' and `show c'; they could even be
  760. Xmouse-clicks or menu items--whatever suits your program.
  761. X
  762. XYou should also get your employer (if you work as a programmer) or your
  763. Xschool, if any, to sign a "copyright disclaimer" for the program, if
  764. Xnecessary.  Here is a sample; alter the names:
  765. X
  766. X  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  767. X  `Gnomovision' (which makes passes at compilers) written by James Hacker.
  768. X
  769. X  <signature of Ty Coon>, 1 April 1989
  770. X  Ty Coon, President of Vice
  771. X
  772. XThis General Public License does not permit incorporating your program into
  773. Xproprietary programs.  If your program is a subroutine library, you may
  774. Xconsider it more useful to permit linking proprietary applications with the
  775. Xlibrary.  If this is what you want to do, use the GNU Library General
  776. XPublic License instead of this License.
  777. END_OF_FILE
  778.   if test 17982 -ne `wc -c <'ipick/COPYING'`; then
  779.     echo shar: \"'ipick/COPYING'\" unpacked with wrong size!
  780.   fi
  781.   # end of 'ipick/COPYING'
  782. fi
  783. if test -f 'ipick/INSTALL' -a "${1}" != "-c" ; then 
  784.   echo shar: Will not clobber existing file \"'ipick/INSTALL'\"
  785. else
  786.   echo shar: Extracting \"'ipick/INSTALL'\" \(2346 characters\)
  787.   sed "s/^X//" >'ipick/INSTALL' <<'END_OF_FILE'
  788. X        How to make and install ipick
  789. X        =============================
  790. X
  791. X
  792. Xipick is known to work on:
  793. X
  794. X    o    AIX 3.1, 3.1.5 & 3.2
  795. X    o    AT&T 3b1 (7300 & UnixPC)
  796. X    o    AT&T Unix Sys V 3.1 (on a Prime EXL 325)
  797. X    o    A/UX 2.0.1
  798. X    o    BSD4.3
  799. X    o    DG/UX 5.4.1 (Aviion)
  800. X    o    Encore Multimax
  801. X    o    Gould PowerNode (in the AT&T universe)
  802. X    o    HP-UX 8.02
  803. X    o    Interactive 3.2.2 (ISC2.2)
  804. X    o    Linux 0.96c pl1 (gcc 2.2.2b)
  805. X    o    Motorola 88k systems: R32V3 (SVR3.2), R40V2 (SVR4)
  806. X    o    Mt/Xinu MORE/bsd
  807. X    o    NCR Tower V.3
  808. X    o    OSF/1, Version 1.0.4
  809. X    o    SCO Unix 3.2
  810. X    o    SCO Xenix 386
  811. X    o    SunOS 4.1, 4.1.2
  812. X    o    SVR4 (UHC 4.0 Version 2.0)
  813. X    o    ULTRIX 4.2
  814. X
  815. XIn other words, a reasonable cross-section of the genus "Unixen
  816. XVarietus". Consequently you should have few problems making ipick even
  817. Xif your system isn't listed above.
  818. X
  819. X
  820. XHow to make ipick
  821. X-----------------
  822. X
  823. XIf you are familiar with net sources, edit the Makefile and run "make
  824. Xinstall". ipick is configured for SunOS, english and /usr/local/bin out
  825. Xof the box.
  826. X
  827. XIf you are new to net sources, do the following:
  828. X
  829. X
  830. X1)    Unshar
  831. X
  832. X
  833. X2)    Nominate the appropriate config file in the Makefile.
  834. X
  835. X    Select the appropriate file from the ./config directory that
  836. X    matches your system. Often this will be either "vanilla" for
  837. X    modern unixen or "svr3" for the more ancient varieties.
  838. X
  839. X    If none of the existing config files work for you system, read
  840. X    PORTING for information on how to create a unique config file
  841. X    (it's relatively easy: copy config/TEMPLATE and edit).
  842. X
  843. X
  844. X3)    Optionally modify the Makefile to:
  845. X
  846. X    o    change the location of the system default .rc file.
  847. X
  848. X    o    change the destination for the executable and manpage.
  849. X
  850. X    o    change the default language (english or german)
  851. X
  852. X
  853. X4)    Run "make" or "make install"
  854. X
  855. X    "make install" copies the executable and manpage.
  856. X
  857. X5)    If ipick is used by non-technocrats, you may want to
  858. X    ensure that your termcap/terminfo definition has the
  859. X    relevant function keys defined (see the manpage for
  860. X    those used).
  861. X
  862. X    Additionally, you may want to create a system-wide .rc file
  863. X    the name of which is defined at "make" time (defaults to
  864. X    /usr/local/lib/ipickrc)
  865. X
  866. XApart from termcap/terminfo, ipick has no special run-time system
  867. Xrequirements and does not insist on any external files. However, ipick
  868. Xwill process both a system-wide .rc file and a user specific .rc file
  869. Xif present.
  870. X
  871. X======================================================================
  872. END_OF_FILE
  873.   if test 2346 -ne `wc -c <'ipick/INSTALL'`; then
  874.     echo shar: \"'ipick/INSTALL'\" unpacked with wrong size!
  875.   fi
  876.   # end of 'ipick/INSTALL'
  877. fi
  878. if test -f 'ipick/MANIFEST' -a "${1}" != "-c" ; then 
  879.   echo shar: Will not clobber existing file \"'ipick/MANIFEST'\"
  880. else
  881.   echo shar: Extracting \"'ipick/MANIFEST'\" \(3341 characters\)
  882.   sed "s/^X//" >'ipick/MANIFEST' <<'END_OF_FILE'
  883. X   File Name        Archive #    Description
  884. X----------------------------------------------------------
  885. Xipick                      1    Parent directory
  886. Xipick/README               1    Introduction to ipick
  887. Xipick/Artistic             1    Alternative Copyright notice
  888. Xipick/COPYING              1    GNU Copyright notice
  889. Xipick/INSTALL              1    Instructions on how to install ipick
  890. Xipick/MANIFEST             1    This list of files
  891. Xipick/PORTING              1    Possible porting issues and suggestions
  892. Xipick/Makefile             1    Top level make file constructs xmakefile
  893. Xipick/main.mk              1    Basis for constructing xmakefile
  894. Xipick/config               1    Directory of system configs
  895. Xipick/language             1    Directory of language files
  896. Xipick/examples             1    Some shell functions to get you started
  897. Xipick/HISTORY              1    History of changes to ipick
  898. Xipick/TODO                 1    Possible future directions
  899. Xipick/config.h             1    Include file which decodes ./config/$CONFIG
  900. Xipick/patchlevel.h         1    Current patchlevel of ipick
  901. Xipick/ipick.h              2    Common #include file
  902. Xipick/misc.c               2    Miscellaneous routines for ipick
  903. Xipick/command.c            2    Process each input command
  904. Xipick/curses.c             3    Handles all screen output
  905. Xipick/data.c               2    the main data structure of ipick (commands)
  906. Xipick/fileio.c             3    Handles all file/stream I/O
  907. Xipick/help.c               2    Online help module
  908. Xipick/keyboard.c           3    Handle all keyboard input and bindings
  909. Xipick/main.c               3    Startup and utility routines
  910. Xipick/rc.c                 4    Read and decode the .rc files
  911. Xipick/port.c               2    Support routines for old unixen
  912. Xipick/ipickrc              3    Definition of builtin ipick bindings
  913. Xipick/ipick.1              4    Man page
  914. Xipick/config/TEMPLATE      4    Basis for making a new config file
  915. Xipick/config/3b1           1    AT&T 3b1 (7300 and UnixPC)
  916. Xipick/config/aux           1    A/UX 2.0.1
  917. Xipick/config/bsd386        1    BSD 386
  918. Xipick/config/bsd43         1    BSD 4.3
  919. Xipick/config/gould         2    Gould PowerNode UTX/32 - AT&T universe
  920. Xipick/config/hpux          3    HP-UX 8.02
  921. Xipick/config/interactive   3    Interactive 3.2.2 (ISC2.2) using cc
  922. Xipick/config/interactive-gcc  4    Interactive 3.2.2 (ISC2.2) using gcc
  923. Xipick/config/linux         4    Linux 0.96c pl1 with gcc 2.2.2b
  924. Xipick/config/mtxinu        4    Mt Xinu MORE/bsd
  925. Xipick/config/sunos4        4    SunOS using terminfo
  926. Xipick/config/sunos4-tcap   4    SunOS using termcap
  927. Xipick/config/svr3          4    Bog standard old Unix (AT&T SysV 3.1)
  928. Xipick/config/ultrix        4    ULTRIX 4.2 on a Decstation with cursesX.h 
  929. Xipick/config/vanilla       4    Bog standard modern Unix (Ha!)
  930. Xipick/config/xenix386      4    SCO Xenix 386 using MSC
  931. Xipick/config/xenix386-gcc  4    SCO Xenix 386 using gcc
  932. Xipick/language/english     5    English version of run-time messages
  933. Xipick/language/german      5    German version of run-time messages
  934. Xipick/examples/README      4    Intro to the examples directory
  935. Xipick/examples/ikillps     4    Interactive kill using 'ps'
  936. Xipick/examples/ikillpt     4    Interactive kill using 'pt'
  937. Xipick/examples/ilprm       4    Interactive removal of lpd print jobs
  938. Xipick/examples/imenu       4    A simple interactive menu interface
  939. Xipick/examples/irm         4    Remove files interactively
  940. Xipick/examples/itarx       4    Interactively extraction of a tar file
  941. END_OF_FILE
  942.   if test 3341 -ne `wc -c <'ipick/MANIFEST'`; then
  943.     echo shar: \"'ipick/MANIFEST'\" unpacked with wrong size!
  944.   fi
  945.   # end of 'ipick/MANIFEST'
  946. fi
  947. if test -f 'ipick/PORTING' -a "${1}" != "-c" ; then 
  948.   echo shar: Will not clobber existing file \"'ipick/PORTING'\"
  949. else
  950.   echo shar: Extracting \"'ipick/PORTING'\" \(3493 characters\)
  951.   sed "s/^X//" >'ipick/PORTING' <<'END_OF_FILE'
  952. XRead this file if you have to create a new config file for your
  953. Xsystem. 
  954. X
  955. XWhen creating a system-unique config file, use ./config/TEMPLATE as a
  956. Xguide and then mail the working version to the author so that it can
  957. Xbe added to the next distribution. The ./config/TEMPLATE file has
  958. Xembedded instructions, which should be sufficient for the experienced
  959. Xnet.sources user. If you are not so experienced, then this file gives
  960. Xa little more background on what can be achieved with the config file.
  961. X
  962. X
  963. XThere are only three portability problems that the config file can
  964. Xsolve. These are:
  965. X
  966. X    o    a function that your library does not have
  967. X    o    an include file that's not present on your system
  968. X    o    SIGWINCH isn't supported by your OS
  969. X
  970. X[Actually, there are additionally two special cases: Your system used
  971. XXcurses.h instead of curses.h or your system has tigetstr()]
  972. X
  973. XAny other problem is unlikely to be solved by the config file, so in
  974. Xthese cases, let the author know - he is keen to fix such problems.
  975. X
  976. XRemember, if the make fails, try and fix it through the config file
  977. Xrather than the Makefile or the source.
  978. X
  979. X
  980. XPossible portability issues
  981. X===========================
  982. X
  983. XIpick is a simple program, it wants of little. The only thing it
  984. Xreally needs above and beyond the basics is a reasonable curses
  985. Xlibrary, and thus an underlying termcap or terminfo library. All other
  986. Xfunctionality is bound to be on most Unix systems.
  987. X
  988. XWell, I bet that's not entirely true. What follows is a list of what
  989. Xis possibly missing from *some* systems. In most cases a *sufficient*
  990. Xsubstitute exists in port.c which is activated via the appropriate
  991. Xsetting in the config file. In the extreme however, you may have to do
  992. Xsome work yourself.
  993. X
  994. X
  995. XMissing functions
  996. X-----------------
  997. X
  998. XIn many cases, if a function is missing from your library, a (barely)
  999. Xsufficient substitute can be found in port.c Always use the library
  1000. Xfunctions in preference to those in port.c as the port.c versions are
  1001. Xcrude and slow.
  1002. X
  1003. XThe config file controls which port.c routines to activate. Possible
  1004. Xfunctions are: beep(), standout(), standend(), strdup(), strpbrk(),
  1005. Xstrstr(), tgetstr() and newterm() (but see later discussion).
  1006. X
  1007. X
  1008. X--
  1009. X
  1010. XThe one function that is not supplied in port.c that may be missing is
  1011. Xgetopt(). Amazing but true, some suppliers still don't have this in
  1012. Xtheir libraries!  Solution 1: Complain to your supplier. Solution 2:
  1013. XGet a clone version from your neighbourhood archive site.
  1014. X
  1015. X--
  1016. X
  1017. XAnother function that can cause problems is newterm()
  1018. X
  1019. XWhile there is a hack version in port.c that uses initscr(), it will
  1020. Xtypically be insufficient for ipick's needs. Ipick calls newterm() to
  1021. Xhandle SIGWINCH.
  1022. X
  1023. XThe problem is that initscr() can often not be called multiple times
  1024. Xper program invocation - presumably because of some state it holds.
  1025. X
  1026. XThe only choice if you don't have newterm() but do have SIGWINCH and
  1027. Xyour initscr() barfs on multiple calls is to disable the SIGWINCH
  1028. Xhandling via the config file.
  1029. X
  1030. X
  1031. XMissing include files
  1032. X---------------------
  1033. X
  1034. XThis is one area where Unix really needs to get it's act together as
  1035. Xthis is a pig's breakfast!
  1036. X
  1037. XAll includes are controlled by the config file, so once one module
  1038. Xcompiles, all modules should.
  1039. X
  1040. XMany - but not all - of the include files are used solely to pull in
  1041. Xprototypes, so in many cases you can turn off the include and rely on
  1042. Xipick's definition and it will still work. A typical example of this
  1043. Xis <stdlib.h> and getenv().
  1044. X
  1045. XThis is discussed in greater depth in ./config/TEMPLATE
  1046. END_OF_FILE
  1047.   if test 3493 -ne `wc -c <'ipick/PORTING'`; then
  1048.     echo shar: \"'ipick/PORTING'\" unpacked with wrong size!
  1049.   fi
  1050.   # end of 'ipick/PORTING'
  1051. fi
  1052. if test -f 'ipick/Makefile' -a "${1}" != "-c" ; then 
  1053.   echo shar: Will not clobber existing file \"'ipick/Makefile'\"
  1054. else
  1055.   echo shar: Extracting \"'ipick/Makefile'\" \(1756 characters\)
  1056.   sed "s/^X//" >'ipick/Makefile' <<'END_OF_FILE'
  1057. X#################################################
  1058. X# Change the following to suit your needs    #
  1059. X#################################################
  1060. X
  1061. X# CONFIG defines the parameters file in the ./config directory. If
  1062. X# you're lucky, your system will already have an appropriate file.
  1063. X# Otherwise, have a look at config/TEMPLATE for ideas and when you get
  1064. X# a working version for your system, please mail a copy back to the
  1065. X# author so that others may benefit from your effort.
  1066. X
  1067. XCONFIG        = sunos4
  1068. X
  1069. X
  1070. X# Choose the language file in language/ Currently only english and
  1071. X# german are present, but feel free to generate new ones :-)
  1072. X
  1073. XLANGUAGE    = english
  1074. X
  1075. X
  1076. X# Destination directories for the executable and man page.
  1077. X
  1078. XDESTDIR        = /usr/local/bin
  1079. XMANDIR        = /usr/local/man/man1
  1080. X
  1081. X# Default system-wide .rc file for ipick You can comment this out if you
  1082. X# don't want ipick to ever look for it (Saves an fopen() per invocation).
  1083. X
  1084. XSYSTEM_RCFILE    = /usr/local/lib/ipickrc
  1085. X
  1086. X
  1087. X#################################################
  1088. X# DO NOT CHANGE ANYTHING AFTER THIS COMMENT    #
  1089. X#################################################
  1090. X
  1091. X
  1092. XSHELL    =    /bin/sh
  1093. X
  1094. X# The idea is to construct the real makefile from ./config/$(CONFIG)
  1095. X# and main.mk Why? To avoid using include in the makefile - sigh.
  1096. X
  1097. X
  1098. XMAKEARGS    = DESTDIR=$(DESTDIR) MANDIR=$(MANDIR) CONFIG=$(CONFIG)    \
  1099. X        SYSTEM_RCFILE="$(SYSTEM_RCFILE)" LANGUAGE=$(LANGUAGE)
  1100. X
  1101. XMAKEACT        = make -f xmakefile $@ $(MAKEARGS)
  1102. X
  1103. Xall:        xmakefile;    $(MAKEACT)
  1104. Xinstall:    xmakefile;    $(MAKEACT)
  1105. Xkit:        xmakefile;    $(MAKEACT)
  1106. Xlint:        xmakefile;    $(MAKEACT)
  1107. X        
  1108. X
  1109. Xxmakefile:    Makefile main.mk ./config/$(CONFIG)
  1110. X    @echo
  1111. X    @echo    Constructing xmakefile with ./config/$(CONFIG)
  1112. X    cat    ./config/$(CONFIG) main.mk >xmakefile
  1113. X    @echo
  1114. X
  1115. Xclean:    xmakefile
  1116. X    make -f xmakefile clean
  1117. X    rm -f xmakefile
  1118. END_OF_FILE
  1119.   if test 1756 -ne `wc -c <'ipick/Makefile'`; then
  1120.     echo shar: \"'ipick/Makefile'\" unpacked with wrong size!
  1121.   fi
  1122.   # end of 'ipick/Makefile'
  1123. fi
  1124. if test -f 'ipick/main.mk' -a "${1}" != "-c" ; then 
  1125.   echo shar: Will not clobber existing file \"'ipick/main.mk'\"
  1126. else
  1127.   echo shar: Extracting \"'ipick/main.mk'\" \(1632 characters\)
  1128.   sed "s/^X//" >'ipick/main.mk' <<'END_OF_FILE'
  1129. X#################################################
  1130. X# DO NOT EDIT THIS FILE                #
  1131. X#################################################
  1132. X
  1133. XSHELL    =    /bin/sh
  1134. X
  1135. XSRC    =    language.c command.c curses.c data.c fileio.c help.c \
  1136. X         keyboard.c main.c misc.c port.c rc.c
  1137. X
  1138. XOBJS    =    $(SRC:.c=.o)
  1139. X
  1140. XINCS    =    config.h ipick.h patchlevel.h
  1141. X
  1142. XCFLAGS    =    $(P_CFLAGS) $(P_NO_FLAGS) $(P_USE_FLAGS) $(P_INCLUDES)    \
  1143. X        -DCONFIG='"$(CONFIG)"' -DLANGUAGE='"$(LANGUAGE)"' \
  1144. X        -DSYSTEM_RCFILE='"$(SYSTEM_RCFILE)"'
  1145. X
  1146. X# -DTESTING Turns on keyboard dump and exit
  1147. X
  1148. X# -DNO_DEFAULT_BINDINGS Is this ever useful? Only removes 1K bytes on a Sparc
  1149. X
  1150. XLDFLAGS    =    $(P_LDFLAGS) $(P_LIBS)
  1151. X
  1152. XLINTFLAGS =    $(P_NO_FLAGS) $(P_USE_FLAGS) $(P_INCLUDES) \
  1153. X        -DCONFIG='"$(CONFIG)"' -DLANGUAGE='"$(LANGUAGE)"' 
  1154. X
  1155. Xall:    ipick
  1156. X
  1157. Xinstall: $(DESTDIR)/ipick $(MANDIR)/ipick.1
  1158. X
  1159. X$(DESTDIR)/ipick: ipick
  1160. X    cp $? $@
  1161. X
  1162. X
  1163. X$(MANDIR)/ipick.1:    ipick.1
  1164. X    cp $? $@
  1165. X
  1166. X
  1167. Xipick:    $(OBJS)
  1168. X    $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -o $@
  1169. X
  1170. X
  1171. X$(OBJS):    Makefile ipick.h xmakefile
  1172. X
  1173. Xipick.h:    config.h patchlevel.h
  1174. X
  1175. Xkit:
  1176. X    rm -rf Part??
  1177. X    (cd ..; makekit -s60k -nipick/Part -iipick/MANIFEST -h2 -oipick/MANIFEST -p -t"Check Makefile then run 'make'")
  1178. X
  1179. X
  1180. X# This lint is for SunOS 5bin lint. Of course the flags are bound to be
  1181. X# different for your version of lint.
  1182. X
  1183. Xlint:
  1184. X    $(LINT) $(LINTFLAGS) $(SRC)
  1185. X
  1186. X
  1187. X# language.c is copied rather than linked to avoid accidental modifications
  1188. X
  1189. Xlanguage.c:    language/$(LANGUAGE) xmakefile
  1190. X    @echo
  1191. X    @echo    Constructing language.c from language/$(LANGUAGE)
  1192. X    rm -f    language.c language.o
  1193. X    cp    language/$(LANGUAGE) language.c
  1194. X    @echo
  1195. X
  1196. Xclean:
  1197. X    rm -f    $(OBJS) core a.out ipick
  1198. X    rm -f    Part??
  1199. X    rm -f    *.BAK
  1200. X    rm -f    language.c language.o
  1201. END_OF_FILE
  1202.   if test 1632 -ne `wc -c <'ipick/main.mk'`; then
  1203.     echo shar: \"'ipick/main.mk'\" unpacked with wrong size!
  1204.   fi
  1205.   # end of 'ipick/main.mk'
  1206. fi
  1207. if test ! -d 'ipick/config' ; then
  1208.     echo shar: Creating directory \"'ipick/config'\"
  1209.     mkdir 'ipick/config'
  1210. fi
  1211. if test ! -d 'ipick/language' ; then
  1212.     echo shar: Creating directory \"'ipick/language'\"
  1213.     mkdir 'ipick/language'
  1214. fi
  1215. if test ! -d 'ipick/examples' ; then
  1216.     echo shar: Creating directory \"'ipick/examples'\"
  1217.     mkdir 'ipick/examples'
  1218. fi
  1219. if test -f 'ipick/HISTORY' -a "${1}" != "-c" ; then 
  1220.   echo shar: Will not clobber existing file \"'ipick/HISTORY'\"
  1221. else
  1222.   echo shar: Extracting \"'ipick/HISTORY'\" \(2731 characters\)
  1223.   sed "s/^X//" >'ipick/HISTORY' <<'END_OF_FILE'
  1224. X1.0 B1    6 Jul 92    Mailed to testers from alt.sources.d
  1225. X
  1226. X1.0 B2    8 Jul 92    Put in rudimentary xterm mouse support
  1227. X            Changed Makefile a bit (but left include in)
  1228. X            Fixed newterm, getenv, cursesX.h 
  1229. X
  1230. X1.0 B3    22 Jul 92    Re-arranged Makefile and config directory
  1231. X            so include in Make is no longer needed.
  1232. X            nonl() added.
  1233. X            Fiddled with command.c to reduce code duplication.
  1234. X            Rearranged commands to have set ('s') and clear
  1235. X            ('c') rather than toggle. Also have 'visible'
  1236. X            and 'all' as line ranges.
  1237. X            Added pipe command (of current line).
  1238. X            Numerous minor changes suggested by testers.
  1239. X            DWS supplied a competent manpage.
  1240. X            Removed resetterm, et al.
  1241. X            Removed Meta commands.
  1242. X            Defined prototypes if #include is missing.
  1243. X
  1244. X1.0 G1    1 Aug 92    Simplified Makefile - again!
  1245. X            Fixed realloc() prototype.
  1246. X            Use DWS's latest man page 
  1247. X            Cursor can now be positioned over relevant data
  1248. X            Search now searches within the line
  1249. X            Tab & Backtab commands added.
  1250. X
  1251. X----------------------------------------------------------------------
  1252. X1.0 G1    2 Aug 92    Posted to alt.sources
  1253. X----------------------------------------------------------------------
  1254. X
  1255. X1.0 G2    20 Aug 92    Moved all text messages to separate language
  1256. X            file so that different languages can be
  1257. X            defined. Initiated because Peter Funk
  1258. X            <pf@artcom0.north.de> sent a German version of
  1259. X            help.c
  1260. X
  1261. X            Added the -i[nvert] based on a suggestion by
  1262. X            Peter Funk <pf@artcom0.north.de>
  1263. X
  1264. X1.1 B1    24 Aug 92    Started 1.1
  1265. X            Added .ipickrc and system-wide rc files
  1266. X            Online help now displays actual keybindings
  1267. X            Changed -v to -V and -i to -v to be consistent
  1268. X            with grep et al. -v now means invert the process
  1269. X            of selection while -V gives version etc.
  1270. X
  1271. X            Removed -s option it was silly and painful.
  1272. X            Added -R disable raw mode as raw mode is now
  1273. X            the default. This is so that ^X^C and Meta
  1274. X            keys can work by default.
  1275. X
  1276. X            A new command "abort" has been added with the
  1277. X            default binding of ^C.
  1278. X
  1279. X            -a option now defaults min and max to 1 if -m
  1280. X            and -M are not present. Thus "ipick -a" now
  1281. X            means the same as "ipick -a -m1 -M1"
  1282. X
  1283. X            Key binding order is now: internal, system,
  1284. X            .ipickrc newer bindings over-ride older ones.
  1285. X
  1286. X            Title strings (-t only) are decoded the same
  1287. X            as keybindings, thus \n \t et al can usefully
  1288. X            be employed, but results are undefined if \e
  1289. X            etc are used as it depends on curses to ignore
  1290. X            them, which mine does, but do all?
  1291. X
  1292. X1.1 B2    1 Feb 93    Resumed 1.1
  1293. X            Added GNU Copyright as an alternative
  1294. X            Fixed bug in reverse search
  1295. X            Completed man page
  1296. X
  1297. X1.1    28 Feb 93    New manpage and german text for posting
  1298. X            Replaced my copyright with the Artistic
  1299. X            Licence from the perl package.
  1300. X            Create the examples directory with some
  1301. X            real working examples.
  1302. END_OF_FILE
  1303.   if test 2731 -ne `wc -c <'ipick/HISTORY'`; then
  1304.     echo shar: \"'ipick/HISTORY'\" unpacked with wrong size!
  1305.   fi
  1306.   # end of 'ipick/HISTORY'
  1307. fi
  1308. if test -f 'ipick/TODO' -a "${1}" != "-c" ; then 
  1309.   echo shar: Will not clobber existing file \"'ipick/TODO'\"
  1310. else
  1311.   echo shar: Extracting \"'ipick/TODO'\" \(1073 characters\)
  1312.   sed "s/^X//" >'ipick/TODO' <<'END_OF_FILE'
  1313. XBugs
  1314. X----
  1315. X
  1316. XFeatures
  1317. X--------
  1318. X
  1319. Xo    Have a trailer section similar to the title lines
  1320. X
  1321. Xo    Allow un-numbered blank lines - especially useful for
  1322. X    menu usage.
  1323. X
  1324. Xo    Word commands as in \Eb \Ef?
  1325. X
  1326. Xo    NN of YY+ glitch still not liked
  1327. X
  1328. Xo    Maybe look at xmc to decide cookie gaps in Selection column.
  1329. X
  1330. Xo    Consider marks and pop. But it's only useful for big files...
  1331. X
  1332. Xo    If there is something on the net nicer than vendor specific
  1333. X    regexp (eg: regcmp or re_exec or compile) I'll use it. But
  1334. X    is an re search *really* useful?
  1335. X
  1336. Xo    People are bound to ask for pre-set states or command line
  1337. X    commands such as +45,  /pattern or some such. Perhaps,
  1338. X    ipick -c"g45 /fff"
  1339. X
  1340. Xo    Probably should stop scroll-right '>' from scrolling when
  1341. X    there is no data to the right. But then what if they scroll
  1342. X    then page? Do the emacs trick of having a goal-column?
  1343. X
  1344. Xo    Xterm is a cancer. I bet HILITE is on the agenda in the
  1345. X    not too distant future.
  1346. X
  1347. Xo    Should the pipe command be given the line or all of the data?
  1348. X    Currently it's just the current line. Perhaps || for all of
  1349. X    the data and |* for all selected lines?
  1350. END_OF_FILE
  1351.   if test 1073 -ne `wc -c <'ipick/TODO'`; then
  1352.     echo shar: \"'ipick/TODO'\" unpacked with wrong size!
  1353.   fi
  1354.   # end of 'ipick/TODO'
  1355. fi
  1356. if test -f 'ipick/config.h' -a "${1}" != "-c" ; then 
  1357.   echo shar: Will not clobber existing file \"'ipick/config.h'\"
  1358. else
  1359.   echo shar: Extracting \"'ipick/config.h'\" \(1409 characters\)
  1360.   sed "s/^X//" >'ipick/config.h' <<'END_OF_FILE'
  1361. X/* $Id: config.h,v 1.1 1993/02/27 21:48:01 markd Exp $
  1362. X *
  1363. X * Decode the config definitions and pull in all necessary .h files
  1364. X *
  1365. X *    Copyright (c) 1993, Mark Delany
  1366. X *
  1367. X *    You may distribute under the terms of either the GNU General Public
  1368. X *    License or the Artistic License, as specified in the README file.
  1369. X *
  1370. X * $Log: config.h,v $
  1371. X * Revision 1.1  1993/02/27  21:48:01  markd
  1372. X * Initial revision
  1373. X *
  1374. X */
  1375. X
  1376. X#ifdef    USE_CURSESX_H
  1377. X#include <cursesX.h>
  1378. X#else
  1379. X#include <curses.h>        /* How to get curses include */
  1380. X#endif
  1381. X
  1382. X#include <signal.h>        /* For signal() and SIG* #defines */
  1383. X#include <errno.h>        /* for errno and EINTR */
  1384. X
  1385. X#ifdef NO_ERRNO
  1386. Xextern    int    errno;
  1387. X#endif
  1388. X
  1389. X#ifndef    NO_OPTOPT
  1390. Xextern    int    optopt;
  1391. X#endif
  1392. X
  1393. X/*
  1394. X * In many cases, the subsequent #includes can be cut and the prog
  1395. X * will probably still compile and run.
  1396. X */
  1397. X
  1398. X#include <ctype.h>        /* isprint, iscntrl protos */
  1399. X
  1400. X/*
  1401. X * stdlib.h has getenv() *and* malloc proto-types. So only include
  1402. X * malloc.h if there is no stdlib.h
  1403. X */
  1404. X
  1405. X#ifndef    NO_STDLIB_H
  1406. X#include <stdlib.h>
  1407. X#else
  1408. X#ifndef    NO_MALLOC_H
  1409. X#include <malloc.h>
  1410. X#endif
  1411. X#endif
  1412. X
  1413. X#ifndef    NO_STRING_H
  1414. X#include <string.h>        /* For strncpy() et al protos */
  1415. X#endif
  1416. X
  1417. X#ifndef    NO_MEMORY_H
  1418. X#include <memory.h>        /* For memcpy protos */
  1419. X#endif
  1420. X
  1421. X#ifndef    NO_LIMITS_H
  1422. X#include <limits.h>        /* CHAR_BIT defines bits per byte */
  1423. X#else
  1424. X#define    CHAR_BIT    8
  1425. X#endif
  1426. X
  1427. X#include <pwd.h>        /* Everyone has this right!? */
  1428. END_OF_FILE
  1429.   if test 1409 -ne `wc -c <'ipick/config.h'`; then
  1430.     echo shar: \"'ipick/config.h'\" unpacked with wrong size!
  1431.   fi
  1432.   # end of 'ipick/config.h'
  1433. fi
  1434. if test -f 'ipick/patchlevel.h' -a "${1}" != "-c" ; then 
  1435.   echo shar: Will not clobber existing file \"'ipick/patchlevel.h'\"
  1436. else
  1437.   echo shar: Extracting \"'ipick/patchlevel.h'\" \(392 characters\)
  1438.   sed "s/^X//" >'ipick/patchlevel.h' <<'END_OF_FILE'
  1439. X/* $Id: patchlevel.h,v 1.1 1993/02/27 21:48:01 markd Exp $
  1440. X *
  1441. X * Self-evident?
  1442. X *
  1443. X *    Copyright (c) 1993, Mark Delany
  1444. X *
  1445. X *    You may distribute under the terms of either the GNU General Public
  1446. X *    License or the Artistic License, as specified in the README file.
  1447. X *
  1448. X * $Log: patchlevel.h,v $
  1449. X * Revision 1.1  1993/02/27  21:48:01  markd
  1450. X * Initial revision
  1451. X *
  1452. X */
  1453. X
  1454. X#define    PATCHLEVEL    0
  1455. END_OF_FILE
  1456.   if test 392 -ne `wc -c <'ipick/patchlevel.h'`; then
  1457.     echo shar: \"'ipick/patchlevel.h'\" unpacked with wrong size!
  1458.   fi
  1459.   # end of 'ipick/patchlevel.h'
  1460. fi
  1461. if test -f 'ipick/config/3b1' -a "${1}" != "-c" ; then 
  1462.   echo shar: Will not clobber existing file \"'ipick/config/3b1'\"
  1463. else
  1464.   echo shar: Extracting \"'ipick/config/3b1'\" \(232 characters\)
  1465.   sed "s/^X//" >'ipick/config/3b1' <<'END_OF_FILE'
  1466. X#    For:    AT&T 3b1 (7300 & UnixPC)
  1467. X#    From:    Andy Dougherty <doughera@lafcol.lafayette.edu>
  1468. X
  1469. XP_LIBS         = -lcurses
  1470. XP_CFLAGS     = -O
  1471. XP_NO_FLAGS    = -DNO_LIMITS_H -DNO_STDLIB_H -DNO_STRSTR -DNO_STRDUP \
  1472. X    -DNO_PROTOTYPES
  1473. X
  1474. X# Maybe? -DNO_STRPBRK
  1475. X
  1476. X
  1477. END_OF_FILE
  1478.   if test 232 -ne `wc -c <'ipick/config/3b1'`; then
  1479.     echo shar: \"'ipick/config/3b1'\" unpacked with wrong size!
  1480.   fi
  1481.   # end of 'ipick/config/3b1'
  1482. fi
  1483. if test -f 'ipick/config/aux' -a "${1}" != "-c" ; then 
  1484.   echo shar: Will not clobber existing file \"'ipick/config/aux'\"
  1485. else
  1486.   echo shar: Extracting \"'ipick/config/aux'\" \(187 characters\)
  1487.   sed "s/^X//" >'ipick/config/aux' <<'END_OF_FILE'
  1488. X#    For:    A/UX 2.0.1
  1489. X#    From:    Kenneth Jacker <khj@cs.cs.appstate.edu>
  1490. X
  1491. XP_CFLAGS    =
  1492. XP_LIBS        = -lcurses
  1493. XP_NO_FLAGS    = -DNO_STDLIB_H -DNO_PROTOTYPES -DNO_STRSTR -DNO_STRDUP
  1494. X
  1495. X# Maybe? -DNO_STRPBRK
  1496. END_OF_FILE
  1497.   if test 187 -ne `wc -c <'ipick/config/aux'`; then
  1498.     echo shar: \"'ipick/config/aux'\" unpacked with wrong size!
  1499.   fi
  1500.   # end of 'ipick/config/aux'
  1501. fi
  1502. if test -f 'ipick/config/bsd386' -a "${1}" != "-c" ; then 
  1503.   echo shar: Will not clobber existing file \"'ipick/config/bsd386'\"
  1504. else
  1505.   echo shar: Extracting \"'ipick/config/bsd386'\" \(125 characters\)
  1506.   sed "s/^X//" >'ipick/config/bsd386' <<'END_OF_FILE'
  1507. X#    For:    BSD 386
  1508. X
  1509. XP_NO_FLAGS    = -DNO_STDLIB_H -DNO_MALLOC_H -DNO_BEEP -DNO_NEWTERM
  1510. XP_CFLAGS     = -O
  1511. XP_LIBS         = -lcurses -ltermcap
  1512. END_OF_FILE
  1513.   if test 125 -ne `wc -c <'ipick/config/bsd386'`; then
  1514.     echo shar: \"'ipick/config/bsd386'\" unpacked with wrong size!
  1515.   fi
  1516.   # end of 'ipick/config/bsd386'
  1517. fi
  1518. if test -f 'ipick/config/bsd43' -a "${1}" != "-c" ; then 
  1519.   echo shar: Will not clobber existing file \"'ipick/config/bsd43'\"
  1520. else
  1521.   echo shar: Extracting \"'ipick/config/bsd43'\" \(247 characters\)
  1522.   sed "s/^X//" >'ipick/config/bsd43' <<'END_OF_FILE'
  1523. X#    For:    BSD 4.3
  1524. X#    From:    DaviD W. Sanderson <dws@ssec.wisc.edu>
  1525. X
  1526. XP_NO_FLAGS    = -DNO_STDLIB_H -DNO_MALLOC_H -DNO_LIMITS_H \
  1527. X-DNO_BEEP -DNO_STRSTR -DNO_STRDUP -DNO_NEWTERM -DNO_ERRNO
  1528. X
  1529. X# Maybe? -DNO_STRPBRK
  1530. X
  1531. XP_CFLAGS     = -O
  1532. XP_LIBS         = -lcurses -ltermcap
  1533. END_OF_FILE
  1534.   if test 247 -ne `wc -c <'ipick/config/bsd43'`; then
  1535.     echo shar: \"'ipick/config/bsd43'\" unpacked with wrong size!
  1536.   fi
  1537.   # end of 'ipick/config/bsd43'
  1538. fi
  1539. echo shar: End of archive 1 \(of 5\).
  1540. cp /dev/null ark1isdone
  1541. MISSING=""
  1542. for I in 1 2 3 4 5 ; do
  1543.     if test ! -f ark${I}isdone ; then
  1544.     MISSING="${MISSING} ${I}"
  1545.     fi
  1546. done
  1547. if test "${MISSING}" = "" ; then
  1548.     echo You have unpacked all 5 archives.
  1549.     echo "Check Makefile then run 'make'"
  1550.     rm -f ark[1-9]isdone
  1551. else
  1552.     echo You still must unpack the following archives:
  1553.     echo "        " ${MISSING}
  1554. fi
  1555. exit 0
  1556.  
  1557. exit 0 # Just in case...
  1558.