home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume16 / psterm / part01 next >
Text File  |  1988-11-01  |  58KB  |  1,705 lines

  1. Subject:  v16i048:  Terminal emulator for NeWS window system, Part01/04
  2. Newsgroups: comp.sources.unix
  3. Sender: sources
  4. Approved: rsalz@uunet.UU.NET
  5.  
  6. Submitted-by: hoptoad!gnu@uunet.uu.net
  7. Posting-number: Volume 16, Issue 48
  8. Archive-name: psterm/part01
  9.  
  10. The Grasshopper Group took Sun's psterm and worked it over to make a
  11. much better terminal emulator for NeWS.  We also worked with Sun to
  12. clarify the copyright to make it clear that it can be redistributed by
  13. anyone on any machine.
  14.  
  15. This psterm has:
  16.  
  17.     scroll bars
  18.     whole screen font changes and variable width fonts
  19.     whole screen point size changes
  20.     resizing can change rows/cols *or* point size
  21.     rectangular and "hot" selections
  22.     numerous bug fixes (more will be needed)
  23.  
  24. We encourage you to use and improve it; send us back the changes.  Send
  25. flowers, brickbats, picture postcards and diff files to: tech@toad.com
  26. or to Grasshopper Group, 212 Clayton St., San Francisco, CA  94117.
  27.  
  28. : psterm part 1 of 4
  29. : To unbundle, sh this file
  30. echo README
  31. cat >README <<'@@@ Fin de README'
  32. Psterm is a terminal emulator that runs under the NeWS window system.
  33. Terminal-oriented applications (like the Unix shell) run inside it.
  34. It displays their output, manages their input, and handles their
  35. interaction with other programs that share the user's screen.
  36. It will try to emulate any terminal described by "termcap", though due
  37. to limitations in the termcap model it often fails at this;
  38. it's best to use the "psterm" termcap entry unless you have special
  39. requirements.
  40.  
  41. This is release Grass-1 of psterm from the Grasshopper Group.  The
  42. original source from Sun Microsystems' NeWS 1.1 release is freely
  43. distributable under Sun's copyright, reproduced below.  (Sun modified
  44. the copyright after the release, and supplied us the revised wording
  45. that is used here.)  The modifications to that source which were made at
  46. the Grasshopper Group are in the public domain.
  47.  
  48. The Grasshopper Group sells and supports NeWS-related products.  Our
  49. first product is MacNews, a port of NeWS for A/UX on the Macintosh-II.
  50. Psterm is our second "product", though it is offered freely to the public
  51. to make NeWS more usable on all systems, and to advertise our company.
  52. You can reach us at:
  53.  
  54.     Grasshopper Group
  55.     212 Clayton St.
  56.     San Francisco, CA  94117
  57.  
  58. +1 408 978 7616      orders, business questions, 830-5 Pacific     orders@toad.com
  59. +1 415 668 5998      technical questions,          afternoons Pacific   tech@toad.com
  60.  
  61. The Grasshopper Group modifications to psterm are by Eric Messick, from
  62. designs by ||ugh Daniel & Eric Messick.  Please send questions,
  63. comments, bugs, fixes, etc... to tech@toad.com.
  64.  
  65.  
  66.             Installation
  67.  
  68. Unpack the four shar files in an empty directory.
  69.  
  70. The installation has been tested on SunOS 4.0 on Sparc and 68020, and
  71. on A/UX on the Macintosh-II.  It should be fairly easy to port it
  72. to other Unix systems.  If you do such a port, please send back the
  73. changes required, as complete source files or "context diffs", to
  74. the Grasshopper Group at tech@toad.com.  We will integrate your fixes and
  75. post patches as required.
  76.  
  77. Some of the source files include <ref/config.h>.  The directory "ref"
  78. is included, with sample config.h files.  Most of the effort of porting
  79. psterm to another system, is in modifying one of these config files to
  80. match the local programming environment.  Create a symlink to the
  81. appropriate one as follows, replacing XXX with "sunos" or "aux".  If
  82. your system doesn't have symbolic links, just link it or copy it
  83. instead.
  84.  
  85.     cd ref
  86.     ln -s config_XXX config.h
  87.     cd ..
  88.  
  89. Now you should be ready to:
  90.  
  91.     make
  92.  
  93. to create the binary program "psterm".  Then:
  94.  
  95.     make install
  96.  
  97. to install the psterm binary in /usr/NeWS/bin/psterm, the PostScript
  98. code in /usr/NeWS/lib/psterm.ps, and the man page in /usr/man/manl/psterm.l.
  99. Edit the Makefile if this is inappropriate on your system.
  100.  
  101. A tutorial called UsingPSTerm is also included.
  102.  
  103. You should also install a new terminal type in /etc/termcap which
  104. was designed specifically for psterm.  You will have to do this step,
  105. and the next (terminfo) step if required, as root:
  106.  
  107.     mv /etc/termcap /etc/termcap.orig
  108.     cat psterm.tcap /etc/termcap.orig > /etc/termcap
  109.  
  110. If your system uses terminfo, you'll have to update your terminfo database as
  111. well...  so, as root:
  112.  
  113.     tic psterm.tinfo
  114.  
  115. Tic is in /usr/5bin if you have installed "System V Compatability"
  116. under SunOS.  Remember to update the terminal descriptions on all of
  117. the systems in your network, and to compile the psterm binary for all
  118. machines, even if there is no news_server (or screen!) on machines like
  119. Vaxen or Amdahls.
  120.  
  121. Note: the termcap and terminfo updates also include nterm descriptions.
  122.  
  123. That should be it... have fun.
  124.  
  125. If you find bugs, first read the BUGS file in this release.  Then, if
  126. your bug is news to us (or if you have a fix for it), send email to
  127. "tech@toad.com" describing which psterm you have (including the patch
  128. level from patchlevel.h), how to reproduce the bug, what happens when
  129. you reproduce it, and how to fix it if you know.
  130.  
  131.  
  132.             Table Of Contents
  133.  
  134.   This set of shar files contains the following files:
  135.  
  136. BUGS        Text file containing known bug descriptions
  137. Makefile    Makefile
  138. README        This file
  139. UsingPSTerm    Ascii text tutorial
  140. bsd.c        bsd operating system interface
  141. display.c    screen maintainence
  142. io.c        low level input/output
  143. main.c        argument processing, main()
  144. patchlevel.h    revision level
  145. psterm.1    man page
  146. psterm.ps    PostScript code
  147. psterm.tcap    termcap entries
  148. psterm.tinfo    terminfo entries
  149. ref/config_aux    A/UX specific configuration information
  150. ref/config_sunos    SunOS configuration information
  151. sampl.pstermrc    example .pstermrc file
  152. sampl.user.ps    example user.ps file
  153. screen.h    description of screen data structures
  154. selection.c    text selection handling routines
  155. slave.c        process forking routines
  156. sys5.c        System V operating system interface
  157. tcap.cps    C to PostScript interface routines
  158. tcap_ops.c    termcap screen manipulation functions
  159. tcap_parse.c    termcap escape sequence parsing code
  160. termcap.h    description of termcap data structures
  161.  
  162.  
  163.  
  164.             Notes
  165.  
  166. NeWS has urgently needed a good terminal emulator for some time.  We at
  167. the Grasshopper Group hope that this version of psterm can fill that
  168. gap for a while.  There are, however, several fundamental problems with
  169. psterm which limit its potential usefulness.  Many of the problems with
  170. the original version of psterm have been dealt with, but the program
  171. has been stretched far beyond the original concept, and is approching
  172. the limits of its design.
  173.  
  174. There is a fundamental conceptual problem with the idea of emulating a
  175. terminal by reading its termcap entry.  The termcap entry describes how
  176. to get a terminal to perform a certain set of tasks.  It does NOT
  177. describe how the given terminal will respond to a sequence of
  178. characters.  This is the information needed by a terminal emulator.  As
  179. an example, consider the vt100 termcap entry.  Clearing the screen on a
  180. vt100 does not home the cursor.  Unfortunately, the termcap string for
  181. screen clearing (cs) is defined to both clear the screen and home the
  182. cursor.  To cope with this, the termcap entry for clearing the screen
  183. on a vt100 emits two escape sequences:  one for homing the cursor, and
  184. one for clearing the screen.  BUT THERE IS NO WAY FOR PSTERM TO KNOW
  185. THIS!  Psterm thinks that in order to clear the screen, this double
  186. sequence must be recieved, and WILL NOT RECOGNIZE JUST THE CLEAR SCREEN
  187. SEQUENCE.  There is a similar problem with the h19 entry.  Codes which
  188. are transmitted by the ``enter screen mode'' string are not defined
  189. elsewhere in the termcap entry, so there is NO WAY for psterm to know
  190. what to do with these.
  191.  
  192. A more serious (though much more subtle) problem concerns the design of
  193. the program itself.  It is not a good example of how to divide the
  194. labor between the client side and the server side.  This is important
  195. because we desperately need good examples of this poorly understood
  196. aspect of NeWS programming.  The power and flexibility of a fully
  197. programmable graphics server depend on programmers correctly dividing
  198. tasks between client and server.  Psterm relies too heavily on the
  199. client program for repainting the screen and repairing damage.  On the
  200. other hand, the other common NeWS terminal emulator, Nterm, does too
  201. much of its terminal emulation in PostScript, and its performance
  202. suffers as a result.  The correct division point lies somewhere between
  203. these two attempts.  As a result of the incorrect division of labor of
  204. psterm, the addition of scrollbars was a difficult and painful task.
  205. If the division had been made at the proper point, I am confident that
  206. implementing scrollbars would have been painless and quick.
  207.  
  208.  
  209.             Sun's copyright notice
  210.  
  211. The original copyright notice on Sun's NeWS 1.1 client program sources
  212. required that it be distributed "as part of a product or program
  213. developed by the user."  This prohibited a variety of noncommercial
  214. distributions, like Usenet postings, source archives like uunet's, or
  215. tape collections like Usenix's or Sun User Group's.  Sun graciously
  216. modified their copyright and authorized us to replace the previous
  217. notice with their new notice, which will be in their next NeWS release.
  218. The whole thing is below (the relevant line is the fourth):
  219.  
  220. /*
  221.  * This file is a product of Sun Microsystems, Inc. and is provided for
  222.  * unrestricted use provided that this legend is included on all tape
  223.  * media and as a part of the software program in whole or part.
  224.  * Users may copy, modify or distribute this file at will.
  225.  * 
  226.  * THIS FILE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  227.  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  228.  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  229.  * 
  230.  * This file is provided with no support and without any obligation on the
  231.  * part of Sun Microsystems, Inc. to assist in its use, correction,
  232.  * modification or enhancement.
  233.  * 
  234.  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  235.  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS FILE
  236.  * OR ANY PART THEREOF.
  237.  * 
  238.  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  239.  * or profits or other special, indirect and consequential damages, even
  240.  * if Sun has been advised of the possibility of such damages.
  241.  * 
  242.  * Sun Microsystems, Inc.
  243.  * 2550 Garcia Avenue
  244.  * Mountain View, California  94043
  245.  */
  246.  
  247. @(#)$Header: README,v 2.4 88/10/04 19:17:18 eric Release $
  248. @@@ Fin de README
  249. echo BUGS
  250. cat >BUGS <<'@@@ Fin de BUGS'
  251. #        Psterm Bug List
  252. # @(#)$Header: BUGS,v 1.3 88/10/03 18:57:58 gnu Release $
  253.  
  254. PSTerm was an experiment in general purpose terminal emulators.  It
  255. was a very interesting experiment, and taught us how to do a few
  256. things.  I feel that it has taught us how NOT to do many more things
  257. in the NeWS environment, and that is has served as a good lesson.
  258.  
  259. We have made PSTerm useful; it serves as a working
  260. "emulator" of the psterm termcap.  Further work on psterm seems
  261. pointless, as more would be gained from a completely new terminal
  262. program.
  263.  
  264. If you wish to hack on it, be warned that we have pushed it
  265. beyond its design already, and that it may be hard going.  We
  266. will not be putting more effort into it except to fold in bug fixes
  267. that are sent in to us (to "tech@toad.com").
  268.  
  269. Thanks to David Rosenthal for creating the original psterm;
  270. it was a wondrous idea.
  271.  
  272.    ---
  273.  
  274. Window placement is in pixel units.  This would perhaps best be fixed by a
  275. parser for units on the command line, though currently NeWS does not
  276. know the dimensions of its screen in inches or dots per inch.  A
  277. related problem is that although units are specified in points, the
  278. resulting measurements are actually pixels.
  279.  
  280. Termcaps cannot describe how to emulate a terminal adequately.  The
  281. information in the termcap or terminfo files is not explicit enough to
  282. let psterm emulate most terminals.  Many termcap entries are written in
  283. ways that depend on the inner workings of a terminal in such a way that
  284. just looking at the termcap will not allow psterm to deal with a
  285. program that knows more or different things about the emulated
  286. terminal.  An example is given in the README file.  Terminfo is
  287. somewhat better, but psterm does not use it.  A proper job would
  288. require more information than provided by both termcap and terminfo.
  289.  
  290. Display slowness.  Sometimes when displaying a full screen of text,
  291. psterm will display it in several chunks, with visible pauses between.
  292. This may have to do with the default psio buffer size of 1K.
  293.  
  294. Some problems are in the fact that NeWS is young:  on some servers, the
  295. icon text gets cleared as soon as it is drawn because of a math 'off by
  296. one' bug (edge condition) that is different for each machine.  See
  297. psterm.ps for new twiddle values to take care of this.
  298.  
  299. Sound (Control G, Beep) is not supported.
  300.  
  301. Sometimes the input focus hilight is on but typing is ignored;
  302. this is a LiteWindows (LiteUI) bug.
  303.  
  304. Fixed width fonts don't scale much of the time because there is
  305. no font matrix information (fontname.fm files) for them.
  306.  
  307. There is a 64k limit to strings in NeWS 1.1, but due to typecheck bugs,
  308. psterm.ps limits selections to 32k.
  309.  
  310. Some problems are just hard work, but it is not clear that psterm is
  311. worth the extra effort to fix.
  312.  
  313. See the README file for more discussion of problems with the psterm concept.
  314. @@@ Fin de BUGS
  315. echo patchlevel.h
  316. cat >patchlevel.h <<'@@@ Fin de patchlevel.h'
  317. #define PATCHLEVEL 0
  318. @@@ Fin de patchlevel.h
  319. echo Makefile
  320. cat >Makefile <<'@@@ Fin de Makefile'
  321. #
  322. # This file is a product of Sun Microsystems, Inc. and is provided for
  323. # unrestricted use provided that this legend is included on all tape
  324. # media and as a part of the software program in whole or part.
  325. # Users may copy, modify or distribute this file at will.
  326. # THIS FILE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  327. # WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  328. # PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  329. # This file is provided with no support and without any obligation on the
  330. # part of Sun Microsystems, Inc. to assist in its use, correction,
  331. # modification or enhancement.
  332. # SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  333. # INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS FILE
  334. # OR ANY PART THEREOF.
  335. # In no event will Sun Microsystems, Inc. be liable for any lost revenue
  336. # or profits or other special, indirect and consequential damages, even
  337. # if Sun has been advised of the possibility of such damages.
  338. # Sun Microsystems, Inc.
  339. # 2550 Garcia Avenue
  340. # Mountain View, California  94043
  341. #
  342. #
  343. # @(#)Makefile.psterm 9.9 88/01/19
  344. # @(#)$Header: Makefile,v 2.4 88/10/04 19:17:36 eric Release $
  345. #
  346. # Copyright (c) 1987 by Sun Microsystems, Inc.
  347. #
  348. # Modifications to the original Sun Microsystems, Inc. source code
  349. # made by the Grasshopper Group are in the Public Domain.
  350. #
  351. # Extensions to this file by Eric Messick of the Grasshopper Group.
  352. #
  353. # Grasshopper Group
  354. # 212 Clayton St
  355. # San Francisco, CA 94117
  356. #
  357.  
  358. SHELL=/bin/sh
  359.  
  360. # Global macro definitions
  361. NEWSHOME=/usr/NeWS
  362. INSDIR=${NEWSHOME}
  363. BINDIR=${INSDIR}/bin
  364. INCLUDE=${INSDIR}/include
  365. LIBDIR=${INSDIR}/lib
  366. MANDIR=/usr/man/manl
  367. MANEXT=l
  368.  
  369. # --- Global macro definitions ---
  370. OPT=-O
  371. TARGET_ARCH=
  372. OSI=REF
  373. SYSV_NETWORK=
  374. BYTES=
  375. TERMFLAG=
  376. SYSV_NETLIB=
  377. TERMLIB=-ltermcap
  378. PREPROC=-I. -I${INCLUDE} -D${OSI} -DUTMP ${TERMFLAG} ${SYSV_NETWORK}
  379.  
  380. COPTS= ${BYTES}
  381. CPS= ${BINDIR}/cps
  382. LIBCPS= ${LIBDIR}/libcps.a
  383.  
  384. CFLAGS=${OPT} ${COPTS} ${PREPROC}
  385.  
  386. # Too many lints -- pick your own lint flags.
  387. #LINT=/usr/5bin/lint
  388. LOPTS=-abch
  389. #LOPTS=
  390. LINTOPTS=${LOPTS} ${PREPROC}
  391.  
  392. LIBS=${TERMLIB} ${LIBCPS} ${SYSV_NETLIB}
  393.  
  394. # When adding files, also modify 'make shar' below.
  395. SRCS =     display.c \
  396.     selection.c \
  397.     io.c \
  398.     main.c \
  399.     slave.c \
  400.     tcap_ops.c \
  401.     tcap_parse.c \
  402.     bsd.c \
  403.     sys5.c
  404.  
  405. OBJS =     display.o \
  406.     selection.o \
  407.     io.o \
  408.     main.o \
  409.     slave.o \
  410.     tcap_ops.o \
  411.     tcap_parse.o \
  412.     bsd.o \
  413.     sys5.o
  414.  
  415. HDRS =     screen.h \
  416.     tcap.h \
  417.     termcap.h
  418.  
  419. SHAR1 =    README \
  420.     BUGS \
  421.     patchlevel.h \
  422.     Makefile \
  423.     psterm.1 \
  424.     UsingPSTerm \
  425.     bsd.c \
  426.     screen.h
  427. SHAR2 =    sampl.pstermrc \
  428.     sampl.user.ps \
  429.     psterm.tcap \
  430.     psterm.tinfo \
  431.     slave.c \
  432.     io.c \
  433.     main.c \
  434.     display.c
  435. SHAR3 =    ref/config_aux \
  436.     ref/config_sunos \
  437.     psterm.ps \
  438.     selection.c \
  439.     sys5.c
  440. SHAR4 = tcap.cps \
  441.     tcap_ops.c \
  442.     tcap_parse.c \
  443.     termcap.h
  444.  
  445. all:    psterm
  446.  
  447. lint:    tcap.h
  448.     ${LINT} ${LINTOPTS} ${SRCS} | grep -v _CPS
  449.  
  450. psterm:    ${OBJS}
  451.     ${CC} ${CFLAGS} -o psterm ${OBJS} ${LIBS}
  452.  
  453. tcap.h: tcap.cps
  454.  
  455. install: psterm psterm.ps
  456.     rm -f ${BINDIR}/psterm ${LIBDIR}/psterm.ps
  457.     cp psterm ${BINDIR}
  458.     cp psterm.ps ${LIBDIR}/psterm.ps
  459.     cp psterm.1 ${MANDIR}/psterm.${MANEXT}
  460.  
  461. clean:
  462.     rm -f *.o psterm tcap tcap.h *.BAK *~
  463.  
  464. shar:
  465.     echo ": psterm part 1 of 4" > psterm.shar.1
  466.     shar ${SHAR1}    >> psterm.shar.1
  467.     echo ": psterm part 2 of 4" > psterm.shar.2
  468.     shar ${SHAR2}    >> psterm.shar.2
  469.     echo ": psterm part 3 of 4" > psterm.shar.3
  470.     echo "echo ref"  >> psterm.shar.3
  471.     echo "mkdir ref" >> psterm.shar.3
  472.     shar ${SHAR3}    >> psterm.shar.3
  473.     echo ": psterm part 4 of 4" > psterm.shar.4
  474.     shar ${SHAR4}    >> psterm.shar.4
  475.  
  476. depend: ${HDRS} ${SRCS}
  477.     ${INSDIR}/clientsrc/makedepend ". -I${INCLUDE}"
  478.  
  479. .SUFFIXES: .h .cps
  480. .cps.h:
  481.     ${CPS} $*.cps
  482.  
  483. # START OF AUTOMATICALLY GENERATED DEPENDENCIES 
  484. bsd.o: bsd.c
  485. display.o: display.c screen.h tcap.h
  486. io.o: io.c
  487. main.o: main.c
  488. selection.o: screen.h selection.c tcap.h
  489. slave.o: slave.c
  490. sys5.o: sys5.c
  491. tcap_ops.o: screen.h tcap.h tcap_ops.c termcap.h
  492. tcap_parse.o: tcap_parse.c termcap.h
  493. @@@ Fin de Makefile
  494. echo psterm.1
  495. cat >psterm.1 <<'@@@ Fin de psterm.1'
  496. .\" @(#)psterm.1 9.2 88/01/19 Copyright 1987 Sun Micro
  497. .\" @(#)$Header: psterm.1,v 2.3 88/10/04 05:59:48 gnu Release $
  498. .TH PSTERM 1  "28 July 1988"
  499. .SH NAME
  500. psterm \(em NeWS terminal emulator
  501. .SH SYNOPSIS
  502. .B psterm
  503. [
  504. options
  505. ]
  506. [
  507. command
  508. ]
  509. .IX psterm#(1) "" "\fLpsterm\fP(1) \(em NeWS terminal emulator"
  510. .SH DESCRIPTION
  511. .I psterm
  512. is a
  513. .IR termcap -based
  514. terminal emulator program for NeWS.  When invoked,  it reads the
  515. .I /etc/termcap
  516. entry for the terminal named
  517. .I psterm
  518. or the termcap named by the
  519. .B -t
  520. option, and arranges to emulate the behavior of that
  521. terminal.  It forks an instance of
  522. .I command
  523. (or, by default,  the program specified by the
  524. .B SHELL
  525. environment variable, or
  526. .I csh 
  527. if this is undefined),
  528. routing keyboard input to the program and displaying its output.
  529. .LP
  530. It responds to (most of) the particular escape sequences that
  531. .I termcap
  532. defines for that terminal.
  533. .SH OPTIONS
  534. .TP
  535. .B \-bg
  536. causes
  537. .I psterm
  538. to place itself in the background by
  539. disassociating itself from the parent process and the controlling terminal.
  540. If
  541. .I psterm
  542. is invoked with
  543. .IR rsh (1),
  544. this option will cause the
  545. rsh command to complete immediately, rather than hang around until
  546. .I psterm
  547. exits.
  548. This is the default if
  549. .I psterm
  550. is invoked with
  551. .I stdin
  552. not connected to a
  553. .I tty.
  554. .TP
  555. .B \-C
  556. route
  557. .I /dev/console
  558. messages to this window, if supported by the operating system.
  559. .TP
  560. .B \-co "\fIcolumns\fP
  561. specifies the width of the window in characters.
  562. .TP
  563. .B \-F font
  564. overrides the default terminal font.
  565. .TP
  566. .B \-f
  567. Ignored.  For compatibility with older versions.
  568. .TP
  569. .B \-fg
  570. forces 
  571. .I psterm
  572. not to fork, thus leaving you in the forground.
  573. .TP
  574. .B \-fl "\fIframe label\fP"
  575. Use the specified string for the frame label.
  576. .TP
  577. .B \-fs fontsize
  578. overrides the default terminal font point size.
  579. .TP
  580. .B \-ic
  581. forces 
  582. .I psterm
  583. to come up iconic instead of as an open window.
  584. .TP
  585. .B \-il "\fIicon label\fP"
  586. Use the specified string for the icon label.  The icon label normally defaults
  587. to the name of the host on which
  588. .I psterm
  589. is running.
  590. .TP
  591. .B \-ixy x y
  592. sets the initial icon location.
  593. Similar to 
  594. .B \-xy x y.
  595. .TP
  596. .B \-li "\fIlines\fP"
  597. specifies the height of the window in characters.
  598. .TP
  599. .B \-ls
  600. causes
  601. .I psterm
  602. to invoke the shell as a login shell.  In addition, any
  603. specified
  604. .I command
  605. will be passed to the shell with a
  606. .B \-c
  607. option,
  608. rather than being invoked directly, so that the shell can establish any
  609. environment variables that may be needed by the command.  Further, if
  610. .I psterm
  611. is invoked via
  612. .IR rsh (1),
  613. the host at the other end of the
  614. .I rsh
  615. socket will be used as the server, unless a NEWSSERVER
  616. environment variable is present.
  617. .TP
  618. .B \-pm
  619. specifies that a 
  620. .I psterm
  621. should enable 
  622. .IR "page mode" .
  623. When page mode is enabled and a command produces
  624. more lines of output that can fit on the screen at once,
  625. .I psterm
  626. will stop scrolling, hide the cursor, and wait until the
  627. user types a character before resuming output.  
  628. When 
  629. .I psterm
  630. is blocked with a screenfull of data,
  631. typing a carriage return or space will cause
  632. scrolling to proceed by one line or one screenful, respectively; any other
  633. character will cause the next screenfull
  634. to appear and be passed through as normal
  635. input.  
  636. This mode can also be enabled or disabled interactively, using the
  637. .I "Page Mode"
  638. menu item.
  639. .TP
  640. .B \-r
  641. forces 
  642. .I psterm
  643. to reload the 
  644. .I psterm.rc
  645. file and the
  646. .I .pstermrc
  647. file.
  648. Normally, 
  649. .I psterm
  650. checks and if the dictionary
  651. .B PSTermDict
  652. exists in 
  653. .B systemdict,
  654. it does not bother reloading the
  655. .I PostScript
  656. files.
  657. .TP
  658. .B \-sl savelines
  659. specify the length of the scroll region.
  660. Defaults to 0, which turns scrollbars off.
  661. .TP
  662. .B \-t term
  663. specify a particular terminal type to override the
  664. .B TERM
  665. environment variable.
  666. Some types work well, others do not.
  667. The terminal type ``psterm'' was designed specifically for use with
  668. .I psterm,
  669. and works quite well.
  670. .TP
  671. .B \-ui userinit
  672. .I psterm
  673. will execute 
  674. .I userinit
  675. as a
  676. .I PostScript
  677. function before creating the terminal window.
  678. This allows the overriding of terminal characteristics on an
  679. individual window basis.
  680. The only function currently defined for this purpose is
  681. .I \-ui StretchOpen
  682. which requests a sizing box on window creation instead of a fixed size window.
  683. See the example
  684. .I \.pstermrc
  685. file for more code that can be called from here.
  686. .TP
  687. .B \-w
  688. wait around after the
  689. .I command
  690. terminates.
  691. .TP
  692. .B \-xy "\fIx y\fP"
  693. specifies the location of the lower left hand corner of the
  694. window (in screen pixel coordinates).
  695.  
  696. .SH "SELECTION"
  697. .LP
  698. Clicking the left mouse button over a character selects that character.
  699. Dragging the mouse extends the selection.
  700. Clicking or dragging beyond the end of the line
  701. selects the newline at the end of that line.
  702. Clicking the middle mouse button over a character
  703. when a selection does not exist in that window
  704. selects that character.
  705. Clicking the middle mouse button over a character
  706. when a selection does exist in that window
  707. extends or shrinks the selection to that character.
  708. Dragging the mouse still extends the selection.
  709. .LP
  710. Clicking and dragging with a shift key down selects a
  711. .I rectangle
  712. of text, padded with spaces if necessary.
  713. .LP
  714. The Copy key (L6) copies the 
  715. selection to the
  716. .IR shelf .
  717. The Paste key (L8) copies the contents of the
  718. .I shelf
  719. to the
  720. .I "insertion point".
  721. .LP
  722. Copy and Paste of selections
  723. works across separate invocations of
  724. .I psterm.
  725. They do not work between
  726. .I psterm
  727. and SunView.
  728. However, a mechanism does exist for transferring a SunView
  729. selection to the \*(Sd shelf, and vice versa. See the description
  730. of 
  731. .I Selection Transfer
  732. in 
  733. .IR news_server (1).
  734. .SH "MENU ITEMS"
  735. .I psterm
  736. creates a client menu with entries to
  737. .I stuff
  738. the current selection to the insertion point,
  739. get at the normal
  740. .I frame
  741. menu, and get at a
  742. .I config
  743. menu for changing some parameters of a running 
  744. .I psterm.
  745. Under the
  746. .I config
  747. menu, are other sub-menus changing various parameters.
  748. .LP
  749. Config... Lines x Cols...  This menu sets the terminal size to the
  750. indicated number of lines and columns.  By default, this will change
  751. the window size to fit.
  752. .LP
  753. Config... Points...  This menu sets the font point size.  By default,
  754. this will change the window size to fit.
  755. .LP
  756. Config... Fonts...  This menu sets the terminal font to one of the
  757. standard fixed width fonts.  This is likely to change the size of the
  758. characters, and behaves as thought the font size had been changed.
  759. Note that /Screen font (the default) only scales to a few
  760. predetermined sizes.  Selecting a new point size is likely to have no
  761. effect until a fully scalable font is selected.  Several other fonts
  762. exibit this behavior.  See More Fonts!... below.
  763. .LP
  764. Config... More Fonts!...  This menu lists all fonts known to the
  765. system at the time the psterm was started.  Note that some of these
  766. are likely to be silly.  The width of the letter ``m'' in the font is
  767. used to determine the spacing between characters.  Some fonts have no
  768. ``m'' character.  See Config... Toggles... Var Width Fonts below.
  769. .LP
  770. Config... Resizing stuff...  This menu is strange.  Under it are three
  771. pairs of toggles.  These toggles control the behavior of psterm when
  772. one of three parameters is changed.  Basically, there are three
  773. parameters used to determine the way the terminal is displayed, and
  774. they are all interdependant.  The three parameters are Font Size,
  775. Lines/Cols, and Window Size.  Fixing values for any two of these
  776. determines the third value.  When you change one of these parameters,
  777. psterm consults this menu to determine which of the other two
  778. parameters should stay the same, and which should change.  The
  779. parameter with the ``*'' next to it will be the one which changes.
  780. Select the menu entry for the unstarred parameter to cause it to
  781. become the new starred parameter.  Remember that you choose among
  782. three independant pairs of values.  Now, go play.
  783. .LP
  784. Config... Save Lines...  This menu selects the number of lines saved.
  785. If you select a value other than zero, a scrollbar will appear
  786. allowing you to scroll through the saved region.  Selecting zero will
  787. remove the scrollbar.  Saving a large number of lines takes a lot of
  788. memory, and possibly several seconds to set up.
  789. .LP
  790. Config... Toggles...  This menu controls the on/off state of several
  791. items.  Select the item to toggle it.  If there is an ``*'' next to an
  792. item, it is on now, and selecting it will turn it off.  The first item
  793. is Page Mode.  See the -pm option above.  The second item is Auto
  794. Margins.  The initial state of this item is determined from the
  795. termcap entry for the terminal being emulated.  If Auto Margins is on,
  796. when the terminal's cursor is in the rightmost column and another
  797. character needs to be displayed, a newline will automatically be
  798. inserted.  If Auto Margins is off, the cursor will ``stick'' to the
  799. right of the window.  The third item is Var Width Fonts, and defaults
  800. to on.  This item is only of importance if the current font is not a
  801. fixed width font.  Basically, if it is off, all fonts are forced to be
  802. fixed width.  With Var Width Fonts on, normal output will be more
  803. readable under a variable width font, like /Times-Roman, but columns
  804. of text will not line up properly, and cursor motion and selection of
  805. text can produce wierd effects.  This should be fun to play with.
  806. The fourth item is Fast Repaint, defaulting to on.  If you turn it off,
  807. then every repaint will be seen, even if another is already in progress.
  808. The fifth item is Scrolling Allowed, defaulting to on.  This is here
  809. in case your server can repaint faster than it can do a copyarea.
  810. On a Silicon Graphics, you might want to turn this off by default.
  811. Just set DefaultUseCopyArea to false in your .pstermrc file.
  812. .LP
  813. Config... Set Labels...  This menu allows you to set the value of the
  814. frame label, the icon label, or both.  Label values are set to the contents
  815. of the current selection.  You can also set the frame label to a string
  816. indicating what version of psterm you are running.
  817. .SH FILES
  818. .PD 0
  819. .TP 1.5i
  820. .I /etc/termcap
  821. to find the terminal description.
  822. .TP
  823. .IB /usr/NeWS/lib/psterm.ps
  824. containing most of the PostScript code.
  825. .TP
  826. .IB ~/.pstermrc
  827. to customize the terminal on startup.
  828. .PD
  829. .SH "SEE ALSO"
  830. .IR news_server (1)
  831. .LP
  832. .I "NeWS Manual"
  833. .SH BUGS
  834. .LP
  835. A bug in liteUI causes keyboard events to be distributed to the wrong
  836. place.
  837. This may cause characters that you type to not go to the terminal that
  838. your mouse pointer is inside of.  To redirect the keyboard properly,
  839. move the mouse out of the window, and back in.
  840. This is often necessary when initially starting
  841. .I psterm.
  842. .LP
  843. Another obscure bug in liteUI can cause NeWS to think that your shift
  844. key is permanently stuck down.  It is triggered by holding the shift
  845. key down, and clicking on the mouse while dragging it across canvas
  846. boundries as you might while making rectangular selections.
  847. If this happens, you will have to exit NeWS to reset it.
  848. As an emergency measure, it is suggested that you have an alias
  849. in your .cshrc file to set the
  850. .I lcase
  851. tty parameter.
  852. .LP
  853. alias STTY stty lcase
  854. .LP
  855. will work for this.
  856. .LP
  857. Emulating some terminal types works better than others, largely because
  858. there are incomplete
  859. .I /etc/termcap
  860. entries for them.
  861. .LP
  862. A large number of
  863. .I termcap
  864. fields have yet to be implemented.
  865. .LP
  866. .I "Page Mode"
  867. gets easily confused.
  868. .LP
  869. See the BUGS and README files distributed with the source.
  870.  
  871. @@@ Fin de psterm.1
  872. echo UsingPSTerm
  873. cat >UsingPSTerm <<'@@@ Fin de UsingPSTerm'
  874.  
  875.  
  876.                 UsingPSTerm
  877.  
  878.         A user guide for the new psterm program
  879.  
  880.                 by Eric Messick
  881.  
  882.  @(#)$Header: UsingPSTerm,v 2.1 88/10/03 18:17:14 eric Release $
  883.  
  884.     Starting psterm.
  885.  
  886. If you're using psterm, chances are quite good that you are in NeWS.
  887. This probably means that the directory /usr/NeWS/bin has found its way
  888. into your $PATH.  If not, it's time it migrated in there, because
  889. that's the directory where you'll find the psterm binary.  Just
  890. starting psterm from the shell (your command interpreter) will get you
  891. a reasonable set of default starting conditions.  With no command line
  892. options, the following things will happen:
  893.  
  894.     psterm will look at various portions of your environment and
  895. will question your tty driver and build up a picture of what your
  896. current terminal type is and how big it is.
  897.  
  898.     psterm will then try to talk to your news_server.  Hopefully,
  899. it will succeed.
  900.  
  901.     psterm next opens a window on your screen.  This window will
  902. have its lower left corner in the lower left corner of your screen.
  903. Text in the window will be presented in 12 point /Screen font by
  904. default.  The window will be sized so that precisely the proper number
  905. of rows and columns of text appear inside the window borders.
  906.  
  907.     A shell is then started, and the shell's prompt should appear
  908. in the terminal window.
  909.  
  910.     Moving the NeWS cursor into the terminal window will allow you
  911. to type to the shell.
  912.  
  913.     Typing the ``exit'' command into the window's shell will cause
  914. the window to go away.
  915.  
  916.  
  917. Now, let's take a look at the command line options that are available
  918. to change the behavior of psterm.  If you enter an illegal option on
  919. the command line, psterm will print a usage line that looks something
  920. like this:
  921.  
  922. Usage: psterm [-bg] [-C] [-co columns] [-F font] [-f] [-fg] [-fl framelabel] \
  923.         [-fs fontsize] [-ic] [-il iconlabel] [-ixy x y] [-li lines] \
  924.         [-ls] [-pm] [-r] [-sl savelines] [-t termtype] [-ui userinit] [-w] \
  925.         [-xy x y] [command]
  926.  
  927. As you can see, psterm has quite a few options.  Let's take a closer
  928. look at them.
  929.  
  930. -bg    Forces psterm to fork, even when not connected to a tty.
  931.         Normally, psterm will not bother to fork unless
  932.         connected to a tty.
  933.  
  934. -C    Redirects the console output to the psterm window.  Note:
  935.         this does not work under A/UX.
  936.  
  937. -co columns
  938.     Overrides the termcap entry and tty driver for deciding how
  939.         many columns the emulated terminal has.
  940.  
  941. -F font    Overrides the default terminal font.
  942.  
  943. -f    Ignored.  For compatability with older versions.
  944.  
  945. -fg    Forces psterm not to fork, thus leaving you in the forground.
  946.         Normally, psterm will fork if its stdin is connected
  947.         to a tty, and not bother otherwise.
  948.  
  949. -fl framelabel
  950.     Sets the frame label.  Default is either the host name if -ls
  951.         is specified, or a string indicating the terminal
  952.         type.
  953.  
  954. -fs fontsize
  955.     Overrides the default terminal font point size.
  956.  
  957. -ic    Forces psterm to come up iconic instead of as an open window.
  958.  
  959. -il iconlabel
  960.     Sets the icon label.  Default is the host name.
  961.  
  962. -ixy x y
  963.     Sets the position of the icon.  Similar to -xy x y.
  964.  
  965. -li lines
  966.     Similar to -co.
  967.  
  968. -ls    Creates a login shell instead of a normal shell.  Sets a few
  969.         environment variables and executes your .login file.
  970.  
  971. -pm    Turns on page mode.  Causes psterm to stop output when a full
  972.         page has been displayed since the last input.  Space
  973.         and return are munched when output is stopped and any
  974.         character continues output.
  975.  
  976. -r    Forces psterm to reload the psterm.ps file and the .pstermrc
  977.         file.  Normally, psterm checks and if the dictionary
  978.         PSTermDict exists in systemdict, it does not bother
  979.         reloading the PostScript files.  If you make a change
  980.         in psterm.ps or your .pstermrc, you will probably have
  981.         to use this option to get your changes to be loaded.
  982.  
  983. -sl savelines
  984.     Specifies the number of lines to save in memory.  If this is
  985.         non-zero, a scrollbar will appear, allowing you to
  986.         scroll through the saved lines.
  987.  
  988. -t termtype
  989.     Overrides the environment variable $TERM in specifying what
  990.         kind of terminal psterm will emulate.  psterm looks in
  991.         the file /etc/termcap to find a description of the
  992.         terminal that it is trying to emulate, and does that
  993.         the best that it can.  Some types work well, others do
  994.         not.  The terminal type ``psterm'' was designed
  995.         specifically for use with psterm, and works perfectly.
  996.  
  997. -ui userinit
  998.     psterm will execute userinit as a PostScript function before
  999.         creating the terminal window.  This allows the
  1000.         overriding of terminal characteristics on an
  1001.         individual window basis.  The only function currently
  1002.         defined for this purpose is -ui StretchOpen which
  1003.         requests a sizing box on window creation instead of a
  1004.         fixed size window.  See the example .pstermrc file for
  1005.         more code that can be called from here.
  1006.  
  1007. -w    wait around after the shell exits before deleting the window.
  1008.  
  1009. -xy x y    Sets the lower left corner of the window position.
  1010.  
  1011.  
  1012. Following the other command line options, you can specify a command
  1013. and arguments to be executed in lieu of your shell.
  1014.  
  1015.  
  1016.  
  1017.  
  1018.     Starting psterm from a Menu
  1019.  
  1020. The default root menu has entries for starting a psterm.  These just
  1021. consist of a string of options on a command line that is sent to the
  1022. forkunix NeWS function.  NeWS forks a process to execute the psterm,
  1023. and redirects its stdin stdout and stderr, generally to /dev/null.
  1024. When psterm sees that it has been started this way, it doesn't bother
  1025. to fork itself (see -fg and -bg, above).  You can create your own menu
  1026. entries to do this in your .litewin.rc file.  See the example files.
  1027.  
  1028.  
  1029.  
  1030.     Starting a psterm on a Remote Machine
  1031.  
  1032. Ok, let's get some terms streight.  You're sitting in front of a
  1033. screen connected to a computer.  That computer is your local system.
  1034. Programs run there are run locally.  Your computer is connected to a
  1035. network that has other machines hooked up to it.  You want to run a
  1036. psterm on one of those machines.  The other machine is the remote
  1037. machine, and the psterm running on the remote machine is the remote
  1038. psterm.  Your news_server is running on your local machine.  Ok?
  1039.  
  1040. If psterm is started on a remote system, it will do it's best to find
  1041. the news_server that it was started from and connect to it.  This
  1042. gives you a transparent way to access other machines.  There are a few
  1043. things that may confuse or thwart it in its efforts for you.  You
  1044. should be aware of these if you have a computer network.  First, you
  1045. need to know that under SysV the remote execution command is called
  1046. remsh, while under other systems it is called rsh.  Next, you should
  1047. be sure that you have your .rhosts file set up correctly so that you
  1048. can start remote programs on the remote machine in the first place.
  1049. Once your local system has connected to the remote system, it needs to
  1050. be able to get to the psterm program.  Does it exist on the remote
  1051. system?  Will the path set in your .cshrc file find the right binary?
  1052. Does the remote system use a different binary format than your local
  1053. one?  If so, you may need a way to change your $PATH in a way that
  1054. depends on which remote system you are starting the psterm on.  You
  1055. also need to make certain that the terminal type that you've asked for
  1056. exists in the remote machine's /etc/termcap file (setting your
  1057. $TERMCAP variable in your .cshrc file could take care of this also).
  1058. If your local machine is running multiple news_servers, a remote
  1059. psterm may have trouble determining which one you are on.  Currently,
  1060. it picks the first one.  Once it figures out which news_server it
  1061. wants to talk to, you need to make sure that the news_server is
  1062. willing to talk back.  You have to either get the remote host into the
  1063. list of hosts that your local server will talk to, or set
  1064. /NetSecurityWanted to false in you .litewin.rc.  See the example
  1065. files.
  1066.  
  1067.  
  1068.  
  1069.     Getting Around in psterm
  1070.  
  1071. Ok, you've started your psterm.  Now what?  Well, you can type into
  1072. your shell, and get responses back out, but you knew that already.
  1073. Remember that the cursor has to be in the window that you are typing
  1074. into (unless you have set click to type).  But let's find out what
  1075. other nifty things you can do.
  1076.  
  1077. When using the mouse, what matters is where you click it.  Let's talk
  1078. about the different places that you can click on.
  1079.  
  1080. First, there's the ``frame''.  It's the border just outside of where
  1081. the window text actually goes.  It looks like the frame around a
  1082. picture.  The frame holds three things.  Most importantly, it holds
  1083. the terminal canvas, which is where the window text goes.  This area
  1084. is big and obvious -- right in the center, with a border line going
  1085. all the way around it.  Next, there's the close gadget.  It's in the
  1086. upper left hand corner of the frame, and it looks like two arrows
  1087. pointing at each other.  Finally, there's the stretch gadget.  It's in
  1088. the lower right hand corner of the frame.  If your frame borders are
  1089. very narrow, you may not be able to see the stretch gadget (it looks
  1090. like part of an arrow facing down and to the right), but it is still
  1091. there and you can still hit it with the mouse, although you will have
  1092. to be very accurate with your mouse placement.
  1093.  
  1094. Ok, so what happens when we click on these things?  Well, that depends
  1095. on what mouse button you use.  Unless you've changed them, the three
  1096. mouse buttons, called the PointButton, AdjustButton, and MenuButton,
  1097. will be set to the LeftMouseButton, MiddleMouseButton, and
  1098. RightMouseButton, respectively.  On the Mac, the LeftMouseButon means
  1099. that you have to hold down the ``option'' key when you press the mouse
  1100. button.  Likewise, the MiddleMouseButton on the Mac is generated by
  1101. holding down the ``point of interest'' key (it looks like a clover,
  1102. and is just to the right of the option key) when clicking on the
  1103. mouse.  So, on the Mac, PointButton means option, AdjustButton means
  1104. point of interest, and MenuButton means normal.  Got that?
  1105.  
  1106. The close gadget and stretch gadget have special behavior on the Mac.
  1107. You can use any of the mouse buttons on them to activate them.  On the
  1108. Sun, use the PointButton.  Clicking on the close gadget turns the
  1109. window into an icon.  The icon will be a tiny copy of the screen that
  1110. you're displaying on the full size window.  Each character in the icon
  1111. will be represented by a single pixel (actually, a 1pt by 1pt square).
  1112. You can still type into the window (if the cursor is inside the icon),
  1113. and you will be able to see the response (although reading it is
  1114. likely to be difficult).  The MenuButton will bring up the icon's
  1115. menu, which is standard.  The AdjustButton will drag the icon around
  1116. the screen, also standard. Finally, the PointButton turns the icon
  1117. back into a window, also standard.
  1118.  
  1119. Now that you're back with a window again, what does the stretch gadget
  1120. do?  Clicking down on the stretch gadget allows you to ``pick up'' the
  1121. lower right hand corner of the window and stretch it around.  When
  1122. you're done playing, and release the mouse button, the window will
  1123. resize itself to fit inside of the rectangle you specified.
  1124. Generally, this will mean changing the number of rows and columns in
  1125. the window.  Whenever this happens, psterm makes sure that your tty
  1126. driver finds out about this, so that smart programs can repaint
  1127. themselves to the new size.  Note that many programs won't be able to
  1128. deal with this very well.  That's about it for the gadgets.
  1129.  
  1130. Let's turn to the frame itself next.  The PointButton clicked in the
  1131. frame will bring the window to the front of the screen.  Handy.  The
  1132. AdjustButton lets you drag the window around.  The MenuButton brings
  1133. up the standard frame menu.  There.  That wasn't so hard.
  1134.  
  1135. Now for the terminal canvas itself.  The PointButton and the
  1136. AdjustButton work together here to allow you to select pieces of text
  1137. that appear on the window.  The PointButton always starts a new
  1138. selection, while the AdjustButton extends the current selection, or
  1139. starts a new one if there isn't a selection going on right now.
  1140. That's the only difference between them.  Now, how do they work?  More
  1141. clicking and dragging here, folks.  Push and hold the PointButton and
  1142. a new selection is started.  What you have selected so far will have a
  1143. line drawn around it.  Dragging the mouse around changes the size of
  1144. the text selected.  When you release the mouse, the selection area
  1145. stops changing in response to your mouse movements.  After the
  1146. selection has been reported to the server, its hilighting is changed
  1147. to reverse video.  If one of the ends of your selection is not quite
  1148. what you want, use the AdjustButton to adjust it.  Just click down and
  1149. drag the mouse to the spot you want.  It's quite easy when you get
  1150. used to it.
  1151.  
  1152. So, what do you use the selected text for?  Here we come to using the
  1153. MenuButton in the terminal canvas.  It brings up the terminal menu.
  1154. There are three entries in the terminal menu.  The first is ``Stuff''.
  1155. Stuff takes whatever text is selected and stuffs it into your
  1156. terminal.  Basically, it pretends to type it for you.  It doesn't
  1157. matter which window you've selected text in, stuff can find it.  It's
  1158. real easy to grab some text in one window and move it to another with
  1159. stuff.  Once you've made a selection, it remains the current selection
  1160. even if it's not on the screen anymore.  Neat stuff.
  1161.  
  1162. The second entry in the terminal menu is ``Frame...''  Under here is a
  1163. copy of the standard frame menu.
  1164.  
  1165. The third entry in the terminal menu is ``Config...''  Here things get
  1166. fun.  Each of the submenus under Config... also has a submenu.  We
  1167. will deal with them individually.
  1168.  
  1169. Config... Lines x Cols...  This menu sets the terminal size to the
  1170. indicated number of lines and columns.  By default, this will change
  1171. the window size to fit.
  1172.  
  1173. Config... Points...  This menu sets the font point size.  By default,
  1174. this will change the window size to fit.
  1175.  
  1176. Config... Fonts...  This menu sets the terminal font to one of the
  1177. standard fixed width fonts.  This is likely to change the size of the
  1178. characters, and behaves as thought the font size had been changed.
  1179. Note that /Screen font (the default) only scales to a few
  1180. predetermined sizes.  Selecting a new point size is likely to have no
  1181. effect until a fully scalable font is selected.  Several other fonts
  1182. exibit this behavior.  See More Fonts!... below.
  1183.  
  1184. Config... More Fonts!...  This menu lists all fonts known to the
  1185. system at the time the psterm was started.  Note that some of these
  1186. are likely to be silly.  The width of the letter ``m'' in the font is
  1187. used to determine the spacing between characters.  Some fonts have no
  1188. ``m'' character.  See Config... Toggles... Var Width Fonts below.
  1189.  
  1190. Config... Resizing stuff...  This menu is strange.  Under it are three
  1191. pairs of toggles.  These toggles control the behavior of psterm when
  1192. one of three parameters is changed.  Basically, there are three
  1193. parameters used to determine the way the terminal is displayed, and
  1194. they are all interdependant.  The three parameters are Font Size,
  1195. Lines/Cols, and Window Size.  Fixing values for any two of these
  1196. determines the third value.  When you change one of these parameters,
  1197. psterm consults this menu to determine which of the other two
  1198. parameters should stay the same, and which should change.  The
  1199. parameter with the ``*'' next to it will be the one which changes.
  1200. Select the menu entry for the unstarred parameter to cause it to
  1201. become the new starred parameter.  Remember that you choose among
  1202. three independant pairs of values.  Now, go play.
  1203.  
  1204. Config... Save Lines...  This menu selects the number of lines saved.
  1205. If you select a value other than zero, a scrollbar will appear
  1206. allowing you to scroll through the saved region.  Selecting zero will
  1207. remove the scrollbar.  Saving a large number of lines takes a lot of
  1208. memory, and possibly several seconds to set up.
  1209.  
  1210. Config... Toggles...  This menu controls the on/off state of several
  1211. items.  Select the item to toggle it.  If there is an ``*'' next to an
  1212. item, it is on now, and selecting it will turn it off.  The first item
  1213. is Page Mode.  See the -pm option above.  The second item is Auto
  1214. Margins.  The initial state of this item is determined from the
  1215. termcap entry for the terminal being emulated.  If Auto Margins is on,
  1216. when the terminal's cursor is in the rightmost column and another
  1217. character needs to be displayed, a newline will automatically be
  1218. inserted.  If Auto Margins is off, the cursor will ``stick'' to the
  1219. right of the window.  The third item is Var Width Fonts, and defaults
  1220. to on.  This item is only of importance if the current font is not a
  1221. fixed width font.  Basically, if it is off, all fonts are forced to be
  1222. fixed width.  With Var Width Fonts on, normal output will be more
  1223. readable under a variable width font, like /Times-Roman, but columns
  1224. of text will not line up properly, and cursor motion and selection of
  1225. text can produce wierd effects.  This should be fun to play with.
  1226. The fourth item is Fast Repaint, defaulting to on.  If you turn it off,
  1227. then every repaint will be seen, even if another is already in progress.
  1228. The fifth item is Scrolling Allowed, defaulting to on.  This is here
  1229. in case your server can repaint faster than it can do a copyarea.
  1230. On a Silicon Graphics, you might want to turn this off by default.
  1231. Just set DefaultUseCopyArea to false in your .pstermrc file.
  1232.  
  1233. Config... Set Labels...  This menu allows you to set the value of the
  1234. frame label, the icon label, or both.  Label values are set to the contents
  1235. of the current selection.  You can also set the frame label to a string
  1236. indicating what version of psterm you are running.
  1237.  
  1238.  
  1239. Well, we've wound our way all the way through the menu tree, and that
  1240. completes what you can do with the mouse in psterm.  Getting around in
  1241. psterm can be quite amusing... have fun.
  1242.  
  1243.  
  1244.  
  1245.     Customizing psterm
  1246.  
  1247. It's easy to feed new PostScript code to psterm.  Just put the code
  1248. inside a file in your home directory called ``.pstermrc''.  psterm
  1249. will automatically load the contents of this file whenever it starts
  1250. up freshly (or you specify -r).  You can use this to override defaults
  1251. for all of your terminal sessions, or to set up custom code to be run
  1252. only for certain sessions (via the -ui userinit option).  See the
  1253. example .pstermrc files and the top of psterm.ps for more information.
  1254. @@@ Fin de UsingPSTerm
  1255. echo bsd.c
  1256. cat >bsd.c <<'@@@ Fin de bsd.c'
  1257. /*
  1258.  * This file is a product of Sun Microsystems, Inc. and is provided for
  1259.  * unrestricted use provided that this legend is included on all tape
  1260.  * media and as a part of the software program in whole or part.
  1261.  * Users may copy, modify or distribute this file at will.
  1262.  * 
  1263.  * THIS FILE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  1264.  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  1265.  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  1266.  * 
  1267.  * This file is provided with no support and without any obligation on the
  1268.  * part of Sun Microsystems, Inc. to assist in its use, correction,
  1269.  * modification or enhancement.
  1270.  * 
  1271.  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  1272.  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS FILE
  1273.  * OR ANY PART THEREOF.
  1274.  * 
  1275.  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  1276.  * or profits or other special, indirect and consequential damages, even
  1277.  * if Sun has been advised of the possibility of such damages.
  1278.  * 
  1279.  * Sun Microsystems, Inc.
  1280.  * 2550 Garcia Avenue
  1281.  * Mountain View, California  94043
  1282.  *
  1283.  * Modifications to the original Sun Microsystems, Inc. source code
  1284.  * made by the Grasshopper Group are in the Public Domain.
  1285.  *
  1286.  * Extensions to this file by Eric Messick of the Grasshopper Group.
  1287.  *
  1288.  * Grasshopper Group
  1289.  * 212 Clayton St
  1290.  * San Francisco, CA 94117
  1291.  *
  1292.  */
  1293.  
  1294. #ifdef REF
  1295. #include <ref/config.h>
  1296. #endif
  1297.  
  1298. #ifndef lint
  1299. static  char sccsid[] = "@(#)bsd.c 9.5 88/01/19 SMI";
  1300. static    char RCSid[] = "@(#)$Header: bsd.c,v 2.2 88/10/04 05:11:14 eric Release $";
  1301. #endif
  1302.  
  1303. /*
  1304.  * Copyright (c) 1987 by Sun Microsystems, Inc.
  1305.  */
  1306.  
  1307. #ifdef HAVE_BSD_TTYS
  1308. /*
  1309.  * BSD Support Routines.
  1310.  */
  1311. #include <sys/types.h>
  1312. #include <sgtty.h>
  1313. #include <sys/file.h>
  1314. #include <signal.h>
  1315. #include <stdio.h>
  1316.  
  1317. extern void perror();
  1318. #ifndef bzero
  1319. extern void bzero();
  1320. #endif
  1321. extern char *strncpy();
  1322. extern long time();
  1323. extern long lseek();
  1324.  
  1325. /* Tty mode statics */
  1326. static    struct tchars tc;
  1327. static    struct ltchars ltc;
  1328. static    struct sgttyb sg;
  1329. static    int lm;            /* localmodes */
  1330. static    int ld;            /* ldisc */
  1331.  
  1332. /* Default settings for tty mode stuff */
  1333. static    struct tchars tc_df =
  1334.     { CINTR, CQUIT, CSTART, CSTOP, CEOF, CBRK };
  1335. static    struct ltchars ltc_df =
  1336.     { CSUSP, CDSUSP, CRPRNT, CFLUSH, CWERASE, CLNEXT };
  1337. static    struct sgttyb sg_df =
  1338.     { B9600, B9600, CERASE, CKILL, ANYP|ECHO|CRMOD };
  1339. static    int lm_df = LCRTBS|LCRTERA|LCRTKIL|LCTLECH;
  1340. static    int ld_df = NTTYDISC;
  1341.  
  1342. extern    int console;
  1343. extern    int CharsPerLine;
  1344. extern    int LinesPerScreen;
  1345.  
  1346. static void get_tty_util();
  1347.  
  1348. GetTTYDefaults()
  1349. {
  1350.     int fd;
  1351.  
  1352.     /* Get settings of controlling terminal */
  1353.     fd = open("/dev/tty", O_RDWR);
  1354.     get_tty_util(fd);
  1355.     if (fd > 0)
  1356.     close(fd);
  1357. #ifdef sun
  1358.     /*
  1359.      * Modify setting with data passed thru the environment.
  1360.      * Read environment variable WINDOW_TTYPARMS
  1361.      */
  1362.     if(we_getptyparms(&ld, &lm, &sg, &tc, <c) == -1) {
  1363.     /*
  1364.      * Try to get the tty parameters from stderr (2).
  1365.      * Using stdin (0) fails when being started in the background
  1366.      *   because csh redirects stdin from the tty to /dev/null.
  1367.      */
  1368.     fd = 2;
  1369.     if (!isatty(fd)) {
  1370.         fd = open("/dev/console", 2);
  1371.     }
  1372.     get_tty_util(fd);
  1373.     if (fd != 2)
  1374.         (void) close(fd);
  1375.    }
  1376. #endif
  1377. }
  1378.  
  1379. static void
  1380. get_tty_util(fd)
  1381.     int fd;
  1382. {
  1383.     if (fd > 0) {
  1384.     if(ioctl(fd, TIOCGETP, &sg) == 0 || (sg.sg_flags&ECHO) == 0)
  1385.         sg = sg_df;
  1386.     (void) ioctl(fd, TIOCGETC, &tc);
  1387.     if (tc.t_quitc == 0)
  1388.         tc = tc_df;
  1389.     (void) ioctl(fd, TIOCGETD, &ld);
  1390.     if (ld == 0)
  1391.         ld = ld_df;
  1392.     (void) ioctl(fd, TIOCLGET, &lm);
  1393.     if (lm == 0)
  1394.         lm = lm_df;
  1395.     (void) ioctl(fd, TIOCGLTC, <c);
  1396.     if (ltc.t_suspc == 0)
  1397.         ltc = ltc_df;
  1398.     (void) ioctl(fd, TIOCNOTTY, 0);
  1399.     } else {
  1400.     /* Last resort...use some default values */
  1401.     tc = tc_df;
  1402.     ld = ld_df;
  1403.     lm = lm_df;
  1404.     ltc = ltc_df;
  1405.     sg = sg_df;
  1406.     }
  1407. }
  1408.  
  1409. SetTTYState(fd)
  1410.     int fd;
  1411. {
  1412.     (void) ioctl(fd, TIOCHPCL, 0);
  1413.     (void) ioctl(fd, TIOCSETD, &ld);
  1414.     if ((sg.sg_flags & ECHO) == 0)
  1415.     sg = sg_df;
  1416.     (void) ioctl(fd, TIOCSETP, &sg);
  1417.     (void) ioctl(fd, TIOCSETC, &tc);
  1418.     (void) ioctl(fd, TIOCSLTC, <c);
  1419.     (void) ioctl(fd, TIOCLSET, &lm);
  1420. #ifdef TIOCSWINSZ
  1421.     { struct winsize ws;
  1422.       ws.ws_row = LinesPerScreen; ws.ws_col = CharsPerLine;
  1423.       (void) ioctl(fd, TIOCSWINSZ, &ws);
  1424.     }
  1425. #endif
  1426. #ifdef TIOCSSIZE
  1427.     { struct ttysize ts;
  1428.       ts.ts_lines = LinesPerScreen; ts.ts_cols = CharsPerLine;
  1429.       (void) ioctl(fd, TIOCSSIZE, &ts);
  1430.     }
  1431. #endif
  1432.     if (console) {
  1433. #ifdef TIOCCONS
  1434.     if (ioctl(fd, TIOCCONS, 0) < 0)
  1435.         perror("tcap(TIOCCONS)");
  1436. #endif
  1437.     }
  1438. }
  1439.  
  1440. DisAssociateTTY()
  1441. {
  1442.     int fd;
  1443.  
  1444.     if (( fd = open("/dev/tty", O_RDWR)) >= 0) {
  1445.     ioctl(fd, TIOCNOTTY, 0);
  1446.     close(fd);
  1447.     }
  1448. }
  1449.  
  1450. AssociateTTY()
  1451. {
  1452.  
  1453. }
  1454.  
  1455. /*ARGSUSED*/
  1456. SetupControllingTTY(line)
  1457.    char line[];
  1458. {
  1459.     int fd, pid;
  1460.  
  1461.     if ((fd = open("/dev/tty", O_RDWR)) < 0) {
  1462.     (void) setpgrp(0, 0);
  1463.     (void) close(open(line, O_RDWR));
  1464.     } else {
  1465.     close(fd);
  1466.     }
  1467.     (void) setpgrp(0, pid = getpid());
  1468.     (void) ioctl(0, TIOCSPGRP, &pid);
  1469. }
  1470.  
  1471. #include <utmp.h>
  1472. #include <pwd.h>
  1473.  
  1474. #define SCPYN(a, b)    strncpy(a, b, sizeof(a))
  1475. #define SCMPN(a, b)    strncmp(a, b, sizeof(a))
  1476.  
  1477. static    char utmpf[] = "/etc/utmp";
  1478. static    char wtmpf[] = "/usr/adm/wtmp";
  1479. static    int tslot = -1;
  1480. static    struct utmp utmp;
  1481.  
  1482. addut(uid, line)
  1483.     int uid;
  1484.     char line[];
  1485. {
  1486. #ifdef UTMP
  1487.     struct passwd *pw;
  1488.     int i;
  1489.  
  1490.     /*
  1491.      * Record entry in /etc/utmp if possible.
  1492.      */
  1493.     tslot = ttyslot();
  1494.     pw = getpwuid(uid);
  1495.     if (tslot > 0 && pw && (i = open(utmpf, O_RDWR)) >= 0) {
  1496.     char *cp, *p, *getenv(), *index();
  1497.  
  1498.     bzero((char *)&utmp, sizeof (utmp));
  1499.     SCPYN(utmp.ut_line, &line[5]);
  1500.     SCPYN(utmp.ut_name, pw->pw_name);
  1501.     if ((cp = getenv("NEWSSERVER")) == NULL)
  1502.         cp = "";
  1503.     if ((p = index(cp, ';')) && p[1] != '\0')
  1504.         cp = p+1;
  1505.     SCPYN(utmp.ut_host, cp);
  1506.     (void) time(&utmp.ut_time);
  1507.     (void) lseek(i, (long)(tslot * sizeof (utmp)), L_SET);
  1508.     (void) write(i, (char *)&utmp, sizeof (utmp));
  1509.     (void) close(i);
  1510.     if ((i = open(wtmpf, O_WRONLY|O_APPEND)) >= 0) {
  1511.         write(i, (char *)&utmp, sizeof(utmp));
  1512.         close(i);
  1513.     }
  1514.     }
  1515. #endif
  1516. }
  1517.  
  1518. rmut()
  1519. {
  1520. #ifdef UTMP
  1521.     int fd;
  1522.     struct utmp wtmp;
  1523.  
  1524.     if (tslot >= 0 && (fd = open(utmpf, O_WRONLY)) >= 0) {
  1525.     wtmp = utmp;
  1526.     bzero((char *)&utmp, sizeof (utmp));
  1527.     (void) lseek(fd, (long)(tslot * sizeof (utmp)), L_SET);
  1528.     (void) write(fd, (char *)&utmp, sizeof (utmp));
  1529.     (void) close(fd);
  1530.     fd = open(wtmpf, O_WRONLY|O_APPEND);
  1531.     if (fd >= 0) {
  1532.         SCPYN(wtmp.ut_name, "");
  1533.         SCPYN(wtmp.ut_host, "");
  1534.         time(&wtmp.ut_time);
  1535.         write(fd, (char *)&wtmp, sizeof(wtmp));
  1536.         close(fd);
  1537.     }
  1538.     }
  1539. #endif
  1540. }
  1541. #endif /* !HAVE_BSD_TTYS */
  1542.  
  1543. #ifdef sun
  1544. #define    WE_TTYPARMS    "WINDOW_TTYPARMS"
  1545.  
  1546. /*
  1547.  * Get tty settings from environment.
  1548.  */
  1549. int
  1550. we_getptyparms(ldisc, localmodes, mode, tchars, ltchars)
  1551.     int *ldisc, *localmodes;
  1552.     struct sgttyb *mode;
  1553.     struct tchars *tchars;
  1554.     struct ltchars *ltchars;
  1555. {
  1556.     char *str, *getenv();
  1557.     short temps[16];    /* Needed for sscanf as there is no %hhd */
  1558.  
  1559.     if((str = getenv(WE_TTYPARMS)) == NULL) {
  1560.         return (-1);
  1561.     } else {
  1562.         if (sscanf(str,
  1563.   "%ld,%ld,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd",
  1564.             ldisc, localmodes, &temps[0], &temps[1], &temps[2],
  1565.             &temps[3], &mode->sg_flags, &temps[4], &temps[5], &temps[6],
  1566.             &temps[7], &temps[8], &temps[9], &temps[10], &temps[11],
  1567.             &temps[12], &temps[13], &temps[14], &temps[15])
  1568.              != 19)
  1569.             return (-1);
  1570.             mode->sg_ispeed = temps[0];
  1571.             mode->sg_ospeed = temps[1];
  1572.             mode->sg_erase = temps[2];
  1573.             mode->sg_kill = temps[3];
  1574.             tchars->t_intrc = temps[4];
  1575.             tchars->t_quitc = temps[5];
  1576.             tchars->t_startc = temps[6];
  1577.             tchars->t_stopc = temps[7];
  1578.             tchars->t_eofc = temps[8];
  1579.             tchars->t_brkc = temps[9];
  1580.             ltchars->t_suspc = temps[10];
  1581.             ltchars->t_dsuspc = temps[11];
  1582.             ltchars->t_rprntc = temps[12];
  1583.             ltchars->t_flushc = temps[13];
  1584.             ltchars->t_werasc = temps[14];
  1585.             ltchars->t_lnextc = temps[15];
  1586.         /*
  1587.          * Always clear
  1588.          */
  1589.         (void)unsetenv(WE_TTYPARMS);
  1590.         return (0);
  1591.     }
  1592. }
  1593. #endif    /* of !HAVE_BST_TTYS */
  1594.  
  1595. @@@ Fin de bsd.c
  1596. echo screen.h
  1597. cat >screen.h <<'@@@ Fin de screen.h'
  1598. /*
  1599.  * This file is a product of Sun Microsystems, Inc. and is provided for
  1600.  * unrestricted use provided that this legend is included on all tape
  1601.  * media and as a part of the software program in whole or part.
  1602.  * Users may copy, modify or distribute this file at will.
  1603.  * 
  1604.  * THIS FILE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  1605.  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  1606.  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  1607.  * 
  1608.  * This file is provided with no support and without any obligation on the
  1609.  * part of Sun Microsystems, Inc. to assist in its use, correction,
  1610.  * modification or enhancement.
  1611.  * 
  1612.  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  1613.  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS FILE
  1614.  * OR ANY PART THEREOF.
  1615.  * 
  1616.  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  1617.  * or profits or other special, indirect and consequential damages, even
  1618.  * if Sun has been advised of the possibility of such damages.
  1619.  * 
  1620.  * Sun Microsystems, Inc.
  1621.  * 2550 Garcia Avenue
  1622.  * Mountain View, California  94043
  1623.  *
  1624.  * Modifications to the original Sun Microsystems, Inc. source code
  1625.  * made by the Grasshopper Group are in the Public Domain.
  1626.  *
  1627.  * Extensions to this file by Eric Messick of the Grasshopper Group.
  1628.  *
  1629.  * Grasshopper Group
  1630.  * 212 Clayton St
  1631.  * San Francisco, CA 94117
  1632.  *
  1633.  */
  1634.  
  1635. /*
  1636.  * "@(#)screen.h 9.4 88/01/19
  1637.  * "@(#)$Header: screen.h,v 2.1 88/10/04 05:59:52 gnu Release $
  1638.  *
  1639.  * Copyright (c) 1985 by Sun Microsystems, Inc.
  1640.  */
  1641.  
  1642.  
  1643.  
  1644. struct line {
  1645.     u_short    length;        /* chars zero through length are meaningful */
  1646.     u_short    buffer_length;    /* body has this many chars allocated */
  1647.     u_short    changeposition;    /* we've scribbled on stuff right of this pos */
  1648.     u_short    end_of_changes;    /* we haven't scribbled past this point */
  1649.     int        usedtobe;    /* this line was scrolled from line usedtobe */
  1650.     int        flags;        /* attributes of this line */
  1651.     char *    body;        /* chars to display */
  1652.     u_char *    prop;        /* how to display them (attributes) */
  1653. };
  1654.  
  1655. /* values for flags */
  1656. #define LINE_WRAPPED    1    /* newline at end of line caused by autowrap */
  1657.  
  1658. struct line **screen, **lines;
  1659.  
  1660. struct pair {
  1661.     short    x, y;
  1662. };
  1663.  
  1664. struct range {
  1665.     struct pair    first, last_plus_one;
  1666. };
  1667.  
  1668. /*
  1669.  * Values for struct line -> prop
  1670.  */
  1671. #define    InsertMode    0x0100
  1672. #define AutoMarginMode    0x0200
  1673. #define IgnoreNewlineAfterWrapMode 0x0400
  1674. #define WrapJustHappenedMode    0x0800
  1675. #define    ReverseVideoMode    0x0001
  1676. #define    UnderlineMode    0x0002
  1677. #define    BoldMode    0x0004
  1678. #define    BlinkMode    0x0008
  1679. #define StandOutMode    ReverseVideoMode
  1680. #define    Attributes    (ReverseVideoMode|UnderlineMode|BoldMode|BlinkMode)
  1681.  
  1682. #define PrimSelMode    0x0010
  1683. #define SecnSelMode    0x0020
  1684. #define ReverseVideoLook    (ReverseVideoMode|PrimSelMode)
  1685. #define UnderlineLook        (UnderlineMode|SecnSelMode)
  1686. #define MaxCharsPerLine    2048
  1687. #define MaxLinesPerScreen 2048
  1688.  
  1689. #define bugprintf(fmt, a1, a2, a3) \
  1690.     { \
  1691.         char errors[1024]; \
  1692.         \
  1693.         sprintf(errors, fmt, a1, a2, a3); \
  1694.         PopMsg(errors); \
  1695.         FlushPostScript(); \
  1696.     }
  1697. @@@ Fin de screen.h
  1698. exit 0
  1699.  
  1700.