home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3581 < prev    next >
Encoding:
Text File  |  1991-07-03  |  19.8 KB  |  629 lines

  1. Newsgroups: alt.sources
  2. From: goer@ellis.uchicago.edu (Richard L. Goerwitz)
  3. Subject: kjv browser, part 6 of 11
  4. Message-ID: <1991Jul3.065130.28191@midway.uchicago.edu>
  5. Date: Wed, 3 Jul 1991 06:51:30 GMT
  6.  
  7. ---- Cut Here and feed the following to sh ----
  8. #!/bin/sh
  9. # this is bibleref.06 (part 6 of a multipart archive)
  10. # do not concatenate these parts, unpack them in order with /bin/sh
  11. # file whatnext.icn continued
  12. #
  13. if test ! -r _shar_seq_.tmp; then
  14.     echo 'Please unpack part 1 first!'
  15.     exit 1
  16. fi
  17. (read Scheck
  18.  if test "$Scheck" != 6; then
  19.     echo Please unpack part "$Scheck" next!
  20.     exit 1
  21.  else
  22.     exit 0
  23.  fi
  24. ) < _shar_seq_.tmp || exit 1
  25. if test ! -f _shar_wnt_.tmp; then
  26.     echo 'x - still skipping whatnext.icn'
  27. else
  28. echo 'x - continuing file whatnext.icn'
  29. sed 's/^X//' << 'SHAR_EOF' >> 'whatnext.icn' &&
  30. X        }
  31. X    }
  32. X    return newbitmap
  33. X        # if member(weirdos, newbitmap)
  34. X        # then return WhatsNextPrevious(
  35. X    #    newbitmap, filename, direction, start_no)
  36. X        # else return newbitmap
  37. X    }
  38. X
  39. X    # If we get to here, we've fed this procedure a bad bitmap, or have
  40. X    # used the wrong filename argument.
  41. X    abort("NextPrevBitmap", "Bad argument: 2r"||exbase10(bitmap,2), 63)
  42. X    fail
  43. X    
  44. Xend
  45. SHAR_EOF
  46. echo 'File whatnext.icn is complete' &&
  47. true || echo 'restore of whatnext.icn failed'
  48. rm -f _shar_wnt_.tmp
  49. fi
  50. # ============= iolib.icn ==============
  51. if test -f 'iolib.icn' -a X"$1" != X"-c"; then
  52.     echo 'x - skipping iolib.icn (File already exists)'
  53.     rm -f _shar_wnt_.tmp
  54. else
  55. > _shar_wnt_.tmp
  56. echo 'x - extracting iolib.icn (Text)'
  57. sed 's/^X//' << 'SHAR_EOF' > 'iolib.icn' &&
  58. X########################################################################
  59. X#    
  60. X#    Name:    iolib.icn
  61. X#    
  62. X#    Title:    Icon termlib-type tools for MS-DOS and UNIX
  63. X#    
  64. X#    Author:    Richard L. Goerwitz (with help from Norman Azadian)
  65. X#
  66. X#    Version: 1.11
  67. X#
  68. X#########################################################################
  69. X#
  70. X#  The authors place this and future versions of iolib in the public
  71. X#  domain.
  72. X#
  73. X#########################################################################
  74. X#
  75. X#  The following library represents a series of rough functional
  76. X#  equivalents to the standard Unix low-level termcap routines.  It is
  77. X#  not meant as an exact termlib clone.  Nor is it enhanced to take
  78. X#  care of magic cookie terminals, terminals that use \D in their
  79. X#  termcap entries, or archaic terminals that require padding.  This
  80. X#  library is geared mainly for use with ANSI and VT-100 devices.
  81. X#  Note that this file may, in most instances, be used in place of the
  82. X#  older UNIX-only itlib.icn file.  It essentially replaces the DOS-
  83. X#  only itlibdos routines.  For DOS users not familiar with the whole
  84. X#  notion of generalized screen I/O, I've included extra documentation
  85. X#  below.  Please read it.
  86. X#
  87. X#  The sole disadvantage of this over the old itlib routines is that
  88. X#  iolib.icn cannot deal with archaic or arcane UNIX terminals and/or
  89. X#  odd system file arrangements.  Note that because these routines
  90. X#  ignore padding, they can (unlike itlib.icn) be run on the NeXT and
  91. X#  other systems which fail to implement the -g option of the stty
  92. X#  command.  Iolib.icn is also simpler and faster than itlib.icn.
  93. X#
  94. X#  I want to thank Norman Azadian for suggesting the whole idea of
  95. X#  combining itlib.icn and itlibdos.icn into one distribution, for
  96. X#  suggesting things like letting drive specifications appear in DOS
  97. X#  TERMCAP environment variables, and for finding several bugs (e.g.
  98. X#  the lack of support for %2 and %3 in cm).  Although he is loathe
  99. X#  to accept this credit, I think he deserves it.
  100. X#
  101. X#########################################################################
  102. X#
  103. X#  Contents:
  104. X#
  105. X#  setname(term)
  106. X#    Use only if you wish to initialize itermlib for a terminal
  107. X#  other than what your current environment specifies.  "Term" is the
  108. X#  name of the termcap entry to use.  Normally this initialization is
  109. X#  done automatically, and need not concern the user.
  110. X#
  111. X#  getval(id)
  112. X#    Works something like tgetnum, tgetflag, and tgetstr.  In the
  113. X#  spirit of Icon, all three have been collapsed into one routine.
  114. X#  Integer valued caps are returned as integers, strings as strings,
  115. X#  and flags as records (if a flag is set, then type(flag) will return
  116. X#  "true").  Absence of a given capability is signalled by procedure
  117. X#  failure.
  118. X#
  119. X#  igoto(cm,destcol,destline) - NB:  default 1 offset (*not* zero)!
  120. X#    Analogous to tgoto.  "Cm" is the cursor movement command for
  121. X#  the current terminal, as obtained via getval("cm").  Igoto()
  122. X#  returns a string which, when output via iputs, will cause the
  123. X#  cursor to move to column "destcol" and line "destline."  Column and
  124. X#  line are always calculated using a *one* offset.  This is far more
  125. X#  Iconish than the normal zero offset used by tgoto.  If you want to
  126. X#  go to the first square on your screen, then include in your program
  127. X#  "iputs(igoto(getval("cm"),1,1))."
  128. X#
  129. X#  iputs(cp,affcnt)
  130. X#    Equivalent to tputs.  "Cp" is a string obtained via getval(),
  131. X#  or, in the case of "cm," via igoto(getval("cm"),x,y).  Affcnt is a
  132. X#  count of affected lines.  It is completely irrelevant for most
  133. X#  modern terminals, and is supplied here merely for the sake of
  134. X#  backward compatibility with itlib, a UNIX-only version of these
  135. X#  routines (one which handles padding on archaic terminals).
  136. X#
  137. X##########################################################################
  138. X#
  139. X#  Notes for MS-DOS users:
  140. X#
  141. X#    There are two basic reasons for using the I/O routines
  142. X#  contained in this package.  First, by using a set of generalized
  143. X#  routines, your code will become much more readable.  Secondly, by
  144. X#  using a high level interface, you can avoid the cardinal
  145. X#  programming error of hard coding things like screen length and
  146. X#  escape codes into your programs.
  147. X#
  148. X#    To use this collection of programs, you must do two things.
  149. X#  First, you must add the line "device=ansi.sys" (or the name of some
  150. X#  other driver, like zansi.sys, nansi.sys, or nnansi.sys [=new
  151. X#  nansi.sys]) to your config.sys file.  Secondly, you must add two
  152. X#  lines to your autoexec.bat file: 1) "set TERM=ansi-mono" and 2)
  153. X#  "set TERMCAP=\location\termcap."  The purpose of setting the TERM
  154. X#  variable is to tell this program what driver you are using.  If you
  155. X#  have a color system, you could use "ansi-color" instead of
  156. X#  "ansi-mono," although for compatibility with a broader range of
  157. X#  users, it would perhaps be better to stick with mono.  The purpose
  158. X#  of setting TERMCAP is to make it possible to determine where the
  159. X#  termcap database file is located.  The termcap file (which should
  160. X#  have been packed with this library as termcap.dos) is a short
  161. X#  database of all the escape sequences used by the various terminal
  162. X#  drivers.  Set TERMCAP so that it reflects the location of this file
  163. X#  (which should be renamed as termcap, for the sake of consistency
  164. X#  across UNIX and MS-DOS spectra).  If desired, you can also try
  165. X#  using termcap2.dos.  Certain games work a lot better using this
  166. X#  alternate file.  To try it out, rename it to termcap, and set
  167. X#  the environment variable TERMCAP to its location.
  168. X#
  169. X#    Although the authors make no pretense of providing here a
  170. X#  complete introduction to the format of the termcap database file,
  171. X#  it will be useful, we believe, to explain a few basic facts about
  172. X#  how to use this program in conjunction with it.  If, say, you want
  173. X#  to clear the screen, add the line,
  174. X#
  175. X#    iputs(getval("cl"))
  176. X#
  177. X#  to your program.  The function iputs() outputs screen control
  178. X#  sequences.  Getval retrieves a specific sequence from the termcap
  179. X#  file.  The string "cl" is the symbol used in the termcap file to
  180. X#  mark the code used to clear the screen.  By executing the
  181. X#  expression "iputs(getval("cl"))," you are 1) looking up the "cl"
  182. X#  (clear) code in the termcap database entry for your terminal, and
  183. X#  the 2) outputting that sequence to the screen.
  184. X#
  185. X#    Some other useful termcap symbols are "ce" (clear to end of
  186. X#  line), "ho" (go to the top left square on the screen), "so" (begin
  187. X#  standout mode), and "se" (end standout mode).  To output a
  188. X#  boldfaced string, str, to the screen, you would write -
  189. X#
  190. X#    iputs(getval("so"))
  191. X#    writes(str)
  192. X#    iputs(getval("se"))
  193. X#
  194. X#  You can also write "writes(getval("so") || str || getval("se")),
  195. X#  but this would make reimplementation for UNIX terminals that
  196. X#  require padding rather difficult.
  197. X#
  198. X#    It is also heartily to be recommended that MS-DOS programmers
  199. X#  try not to assume that everyone will be using a 25-line screen.
  200. X#  Most terminals are 24-line.  Some 43.  Some have variable window
  201. X#  sizes.  If you want to put a status line on, say, the 2nd-to-last
  202. X#  line of the screen, then determine what that line is by executing
  203. X#  "getval("li")."  The termcap database holds not only string-valued
  204. X#  sequences, but numeric ones as well.  The value of "li" tells you
  205. X#  how many lines the terminal has (compare "co," which will tell you
  206. X#  how many columns).  To go to the beginning of the second-to-last
  207. X#  line on the screen, type in:
  208. X#
  209. X#    iputs(igoto(getval("cm"), 1, getval("li")-1))
  210. X#
  211. X#  The "cm" capability is a special capability, and needs to be output
  212. X#  via igoto(cm,x,y), where cm is the sequence telling your computer
  213. X#  to move the cursor to a specified spot, x is the column, and y is
  214. X#  the row.  The expression "getval("li")-1" will return the number of
  215. X#  the second-to-last line on your screen.
  216. X#
  217. X##########################################################################
  218. X#
  219. X#  Requires: UNIX or MS-DOS, co-expressions
  220. X#
  221. X#  See also: itlib.icn, iscreen.icn
  222. X#
  223. X##########################################################################
  224. X
  225. X
  226. Xglobal tc_table, isDOS
  227. Xrecord true()
  228. X
  229. X
  230. Xprocedure check_features()
  231. X
  232. X    initial {
  233. X
  234. X    if find("UNIX",&features) then
  235. X        isDOS := &null
  236. X    else if find("MS-DOS", &features) then
  237. X        isDOS := 1
  238. X    else stop("check_features:  OS not (yet?) supported.")
  239. X
  240. X    find("expressi",&features) |
  241. X        er("check_features","co-expressions not implemented - &$#!",1)
  242. X    }
  243. X
  244. X    return
  245. X
  246. Xend
  247. X
  248. X
  249. X
  250. Xprocedure setname(name)
  251. X
  252. X    # Sets current terminal type to "name" and builds a new termcap
  253. X    # capability database (residing in tc_table).  Fails if unable to
  254. X    # find a termcap entry for terminal type "name."  If you want it
  255. X    # to terminate with an error message under these circumstances,
  256. X    # comment out "| fail" below, and uncomment the er() line.
  257. X
  258. X    #tc_table is global
  259. X    
  260. X    check_features()
  261. X
  262. X    tc_table := table()
  263. X    tc_table := maketc_table(getentry(name)) | fail
  264. X    # er("setname","no termcap entry found for "||name,3)
  265. X    return "successfully reset for terminal " || name
  266. X
  267. Xend
  268. X
  269. X
  270. X
  271. Xprocedure getname()
  272. X
  273. X    # Getname() first checks to be sure we're running under DOS or
  274. X    # UNIX, and, if so, tries to figure out what the current terminal
  275. X    # type is, checking successively the value of the environment
  276. X    # variable TERM, and then (under UNIX) the output of "tset -".
  277. X    # Terminates with an error message if the terminal type cannot be
  278. X    # ascertained.  DOS defaults to "mono."
  279. X
  280. X    local term, tset_output
  281. X
  282. X    check_features()
  283. X
  284. X    if \isDOS then {
  285. X        term := getenv("TERM") | "mono"
  286. X    }
  287. X    else {
  288. X    if not (term := getenv("TERM")) then {
  289. X        tset_output := open("/bin/tset -","pr") |
  290. X        er("getname","can't find tset command",1)
  291. X        term := !tset_output
  292. X        close(tset_output)
  293. X    }
  294. X    }
  295. X
  296. X    return \term |
  297. X    er("getname","can't seem to determine your terminal type",1)
  298. X
  299. Xend
  300. X
  301. X
  302. X
  303. Xprocedure er(func,msg,errnum)
  304. X
  305. X    # short error processing utility
  306. X    write(&errout,func,":  ",msg)
  307. X    exit(errnum)
  308. X
  309. Xend
  310. X
  311. X
  312. X
  313. Xprocedure getentry(name, termcap_string)
  314. X
  315. X    # "Name" designates the current terminal type.  Getentry() scans
  316. X    # the current environment for the variable TERMCAP.  If the
  317. X    # TERMCAP string represents a termcap entry for a terminal of type
  318. X    # "name," then getentry() returns the TERMCAP string.  Otherwise,
  319. X    # getentry() will check to see if TERMCAP is a file name.  If so,
  320. X    # getentry() will scan that file for an entry corresponding to
  321. X    # "name."  If the TERMCAP string does not designate a filename,
  322. X    # getentry() will scan the termcap file for the correct entry.
  323. X    # Whatever the input file, if an entry for terminal "name" is
  324. X    # found, getentry() returns that entry.  Otherwise, getentry()
  325. X    # fails.
  326. X
  327. X    local isFILE, f, getline, line, nm, ent1, ent2, entry
  328. X    static slash, termcap_names
  329. X    initial {
  330. X    if \isDOS then {
  331. X        slash := "\\"
  332. X        termcap_names := ["termcap","termcap.dos","termcap2.dos"]
  333. X    }
  334. X    else {
  335. X        slash := "/"
  336. X        termcap_names := ["/etc/termcap"]
  337. X    }
  338. X    }
  339. X
  340. X
  341. X    # You can force getentry() to use a specific termcap file by cal-
  342. X    # ling it with a second argument - the name of the termcap file
  343. X    # to use instead of the regular one, or the one specified in the
  344. X    # termcap environment variable.
  345. X    /termcap_string := getenv("TERMCAP")
  346. X
  347. X    if \isDOS then {
  348. X    if \termcap_string then {
  349. X        if termcap_string ? (
  350. X         not ((tab(any(&letters)), match(":")) | match(slash)),
  351. X         pos(1) | tab(find("|")+1), =name)
  352. X        then return termcap_string
  353. X        else isFILE := 1
  354. X    }
  355. X    }
  356. X    else {
  357. X    if \termcap_string then {
  358. X        if termcap_string ? (
  359. X            not match(slash), pos(1) | tab(find("|")+1), =name)
  360. X        then return termcap_string
  361. X        else isFILE := 1
  362. X    }
  363. X    }
  364. X
  365. X    # The logic here probably isn't clear.  The idea is to try to use
  366. X    # the termcap environment variable successively as 1) a termcap en-
  367. X    # try and then 2) as a termcap file.  If neither works, 3) go to
  368. X    # the /etc/termcap file.  The else clause here does 2 and, if ne-
  369. X    # cessary, 3.  The "\termcap_string ? (not match..." expression
  370. X    # handles 1.
  371. X
  372. X    if \isFILE            # if find(slash, \termcap_string)
  373. X    then f := open(termcap_string)
  374. X    /f := open(!termcap_names) |
  375. X    er("getentry","I can't access your termcap file.  Read iolib.icn.",1)
  376. X    
  377. X    getline := create read_file(f)
  378. X    
  379. X    while line := @getline do {
  380. X    if line ? (pos(1) | tab(find("|")+1), =name, any(':|')) then {
  381. X        entry := ""
  382. X        while (\line | @getline) ? {
  383. X        if entry ||:= 1(tab(find(":")+1), pos(0))
  384. X        then {
  385. X            close(f)
  386. X            # if entry ends in tc= then add in the named tc entry
  387. X            entry ?:= tab(find("tc=")) ||
  388. X            # recursively fetch the new termcap entry
  389. X            (move(3), getentry(tab(find(":"))) ?
  390. X             # remove the name field from the new entry
  391. X             (tab(find(":")+1), tab(0)))
  392. X            return entry
  393. X        }
  394. X        else {
  395. X            \line := &null # must precede the next line
  396. X            entry ||:= trim(trim(tab(0),'\\'),':')
  397. X        }
  398. X        }
  399. X    }
  400. X    }
  401. X
  402. X    close(f)
  403. X    er("getentry","can't find and/or process your termcap entry",3)
  404. Xend
  405. X
  406. X
  407. X
  408. Xprocedure read_file(f)
  409. X
  410. X    # Suspends all non #-initial lines in the file f.
  411. X    # Removes leading tabs and spaces from lines before suspending
  412. X    # them.
  413. X
  414. X    local line
  415. X
  416. X    \f | er("read_tcap_file","no valid termcap file found",3)
  417. X    while line := read(f) do {
  418. X    match("#",line) & next
  419. X    line ?:= (tab(many('\t ')) | &null, tab(0))
  420. X    suspend line
  421. X    }
  422. X
  423. X    fail
  424. X
  425. Xend
  426. X
  427. X
  428. X
  429. Xprocedure maketc_table(entry)
  430. X
  431. X    # Maketc_table(s) (where s is a valid termcap entry for some
  432. X    # terminal-type): Returns a table in which the keys are termcap
  433. X    # capability designators, and the values are the entries in
  434. X    # "entry" for those designators.
  435. X
  436. X    local k, v, str
  437. X
  438. X    /entry & er("maketc_table","no entry given",8)
  439. X    if entry[-1] ~== ":" then entry ||:= ":"
  440. X    
  441. X    /tc_table := table()
  442. X
  443. X    entry ? {
  444. X
  445. X    tab(find(":")+1)    # tab past initial (name) field
  446. X
  447. X    while tab((find(":")+1) \ 1) ? {
  448. X        &subject == "" & next
  449. X        if k := 1(move(2), ="=") then {
  450. X        # Get rid of null padding information.  Iolib can't
  451. X        # handle it (unlike itlib.icn).  Leave star in.  It
  452. X        # indicates a real dinosaur terminal, and will later
  453. X        # prompt an abort.
  454. X        str := ="*" | ""; tab(many(&digits))
  455. X        tc_table[k] := Decode(str || tab(find(":")))
  456. X        }
  457. X        else if k := 1(move(2), ="#")
  458. X        then tc_table[k] := integer(tab(find(":")))
  459. X        else if k := 1(tab(find(":")), pos(-1))
  460. X        then tc_table[k] := true()
  461. X        else er("maketc_table", "your termcap file has a bad entry",3)
  462. X    }
  463. X    }
  464. X
  465. X    return tc_table
  466. X
  467. Xend
  468. X
  469. X
  470. X
  471. Xprocedure getval(id)
  472. X
  473. X    /tc_table := maketc_table(getentry(getname())) |
  474. X    er("getval","can't make a table for your terminal",4)
  475. X
  476. X    return \tc_table[id] | fail
  477. X    # er("getval","the current terminal doesn't support "||id,7)
  478. X
  479. Xend
  480. X
  481. X
  482. X
  483. Xprocedure Decode(s)
  484. X
  485. X    # Does things like turn ^ plus a letter into a genuine control
  486. X    # character.
  487. X
  488. X    local new_s, chr, chr2
  489. X
  490. X    new_s := ""
  491. X
  492. X    s ? {
  493. X
  494. X    while new_s ||:= tab(upto('\\^')) do {
  495. X        chr := move(1)
  496. X        if chr == "\\" then {
  497. X        new_s ||:= {
  498. X            case chr2 := move(1) of {
  499. X            "\\" : "\\"
  500. X            "^"  : "^"
  501. X            "E"  : "\e"
  502. X            "b"  : "\b"
  503. X            "f"  : "\f"
  504. X            "n"  : "\n"
  505. X            "r"  : "\r"
  506. X            "t"  : "\t"
  507. X            default : {
  508. X                if any(&digits,chr2) then {
  509. X                char(integer("8r"||chr2||move(2 to 0 by -1))) |
  510. X                    er("Decode","bad termcap entry",3)
  511. X                }
  512. X               else chr2
  513. X            }
  514. X            }
  515. X        }
  516. X        }
  517. X        else new_s ||:= char(ord(map(move(1),&lcase,&ucase)) - 64)
  518. X    }
  519. X    new_s ||:= tab(0)
  520. X    }
  521. X
  522. X    return new_s
  523. X
  524. Xend
  525. X
  526. X
  527. X
  528. Xprocedure igoto(cm,col,line)
  529. X
  530. X    local colline, range, increment, padding, str, outstr, chr, x, y
  531. X
  532. X    if \col > (tc_table["co"]) | \line > (tc_table["li"]) then {
  533. X    colline := string(\col) || "," || string(\line) | string(\col|line)
  534. X    range := "(" || tc_table["co"]-1 || "," || tc_table["li"]-1 || ")"
  535. X    er("igoto",colline || " out of range " || (\range|""),9)
  536. X    } 
  537. X
  538. X    # Use the Iconish 1;1 upper left corner & not the C-ish 0 offsets
  539. X    increment := -1
  540. X    outstr := ""
  541. X    
  542. X    cm ? {
  543. X    while outstr ||:= tab(find("%")) do {
  544. X        tab(match("%"))
  545. X        if padding := integer(tab(any('23')))
  546. X        then chr := (="d" | "d")
  547. X        else chr := move(1)
  548. X        if case \chr of {
  549. X        "." :  outstr ||:= char(line + increment)
  550. X        "+" :  outstr ||:= char(line + ord(move(1)) + increment)
  551. X        "d" :  {
  552. X            str := string(line + increment)
  553. X            outstr ||:= right(str, \padding, "0") | str
  554. X        }
  555. X        }
  556. X        then line :=: col
  557. X        else {
  558. X        case chr of {
  559. X            "n" :  line := ixor(line,96) & col := ixor(col,96)
  560. X            "i" :  increment := 0
  561. X            "r" :  line :=: col
  562. X            "%" :  outstr ||:= "%"
  563. X            "B" :  line := ior(ishift(line / 10, 4), line % 10)
  564. X            ">" :  {
  565. X            x := move(1); y := move(1)
  566. X            line > ord(x) & line +:= ord(y)
  567. X            &null
  568. X            }
  569. X        } | er("goto","bad termcap entry",5)
  570. X        }
  571. X    }
  572. X    return outstr || tab(0)
  573. X    }
  574. X
  575. Xend
  576. X
  577. X
  578. X
  579. Xprocedure iputs(cp, affcnt)
  580. X
  581. X    # Writes cp to the screen.  Use this instead of writes() for
  582. X    # compatibility with itlib (a UNIX-only version which can handle
  583. X    # albeit inelegantly) terminals that need padding.
  584. X
  585. X    static num_chars
  586. X    initial num_chars := &digits ++ '.'
  587. X
  588. X    type(cp) == "string" |
  589. X    er("iputs","you can't iputs() a non-string value!",10)
  590. X
  591. X    cp ? {
  592. X    if tab(many(num_chars)) & ="*" then
  593. X        stop("iputs:  iolib can't use terminals that require padding.")
  594. X    writes(tab(0))
  595. X    }
  596. X
  597. X    return
  598. X
  599. Xend
  600. SHAR_EOF
  601. true || echo 'restore of iolib.icn failed'
  602. rm -f _shar_wnt_.tmp
  603. fi
  604. # ============= iscreen.icn ==============
  605. if test -f 'iscreen.icn' -a X"$1" != X"-c"; then
  606.     echo 'x - skipping iscreen.icn (File already exists)'
  607.     rm -f _shar_wnt_.tmp
  608. else
  609. > _shar_wnt_.tmp
  610. echo 'x - extracting iscreen.icn (Text)'
  611. sed 's/^X//' << 'SHAR_EOF' > 'iscreen.icn' &&
  612. X############################################################################
  613. X#
  614. X#    Name:     iscreen.icn
  615. X#
  616. X#    Title:     Icon screen functions
  617. SHAR_EOF
  618. true || echo 'restore of iscreen.icn failed'
  619. fi
  620. echo 'End of  part 6'
  621. echo 'File iscreen.icn is continued in part 7'
  622. echo 7 > _shar_seq_.tmp
  623. exit 0
  624. -- 
  625.  
  626.    -Richard L. Goerwitz              goer%sophist@uchicago.bitnet
  627.    goer@sophist.uchicago.edu         rutgers!oddjob!gide!sophist!goer
  628.