home *** CD-ROM | disk | FTP | other *** search
- Subject: v16i050: Terminal emulator for NeWS window system, Part03/04
- Newsgroups: comp.sources.unix
- Sender: sources
- Approved: rsalz@uunet.UU.NET
-
- Submitted-by: hoptoad!gnu (John Gilmore)
- Posting-number: Volume 16, Issue 50
- Archive-name: psterm/part03
-
- : psterm part 3 of 4
- echo ref
- mkdir ref
- : To unbundle, sh this file
- echo ref/config_aux
- cat >ref/config_aux <<'@@@ Fin de ref/config_aux'
- /* ref/config.h -- Configuration and other very global information
- * Hugh Daniel 88/1/15 (c) Copyright, Grasshopper Group
- * @(#)$Header: config_aux,v 2.0 88/09/16 01:39:55 eric Release $
- */
- /* RCS ID
- */
-
- #define FNDELAY O_NDELAY
-
- /* Compile time controls for system dependances
- */
- #define mc68000
- /* Things we do have in A/UX */
- #define HAVE_SELECT
- #define HAVE_SOCKETS
- #define HAVE_BSDSYSTIME
- /* Useed by psterm & nterm -HD */
- #define HAVE_SYSV_TTYS
- #define HAVE_PUTTULINE
- #define HAVE_TERMCAP
- #define HAVE_STRINGS_H
-
- /* Things that we dont have
- #define HAVE_MMAN_H
- */
-
- #ifndef bcopy
- #define bcopy(s1, s2, len) { \
- register char *s__s = (char *)(s1); \
- register char *s__d = (char *)(s2); \
- register int n__n; \
- if ((n__n = len) > 0 && s__s != s__d) { \
- if (s__d < s__s || (s__s + n__n) <= s__d) { \
- memcpy(s__d, s__s, n__n); \
- } else { \
- register char *s__se = s__s + n__n - 1; \
- register char *s__de = s__d + n__n - 1; \
- do \
- *s__de-- = *s__se--; \
- while (--n__n); \
- }}};
- #endif
- #ifndef bzero
- #define bzero(s, n) memset(s, '\0', n)
- #endif
- #define bcmp(s1, s2, n) memcmp(s1, s2, n)
-
- #define srandom(n) srand(n)
- #define gettimeofday(time, tz) _gettimeofday(time)
- @@@ Fin de ref/config_aux
- echo ref/config_sunos
- cat >ref/config_sunos <<'@@@ Fin de ref/config_sunos'
- /* ref/config_sunos -- Configuration and other very global information
- * Hugh Daniel 88/1/15 (c) Copyright, Grasshopper Group
- * @(#)$Header: config_sunos,v 2.0 88/09/16 01:40:11 eric Release $
- */
- /* RCS ID
- */
-
- /* Things we do have in sunos */
- #define HAVE_SELECT
- #define HAVE_SOCKETS
- #define HAVE_BSDSYSTIME
- /* Useed by psterm & nterm -HD */
- #define HAVE_BSD_TTYS
- /*#define HAVE_PUTTULINE */
- #define HAVE_TERMCAP
- #define HAVE_STRINGS_H
-
- /* #define HAVE_MMAN_H */
- #define HAVE_VFORK
- @@@ Fin de ref/config_sunos
- echo psterm.ps
- cat >psterm.ps <<'@@@ Fin de psterm.ps'
- %
- % This file is a product of Sun Microsystems, Inc. and is provided for
- % unrestricted use provided that this legend is included on all tape
- % media and as a part of the software program in whole or part.
- % Users may copy, modify or distribute this file at will.
- %
- % THIS FILE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- % WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- % PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- %
- % This file is provided with no support and without any obligation on the
- % part of Sun Microsystems, Inc. to assist in its use, correction,
- % modification or enhancement.
- %
- % SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- % INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS FILE
- % OR ANY PART THEREOF.
- %
- % In no event will Sun Microsystems, Inc. be liable for any lost revenue
- % or profits or other special, indirect and consequential damages, even
- % if Sun has been advised of the possibility of such damages.
- %
- % Sun Microsystems, Inc.
- % 2550 Garcia Avenue
- % Mountain View, California 94043
- %
- % Modifications to the original Sun Microsystems, Inc. source code
- % made by the Grasshopper Group are in the Public Domain.
- %
- % Extensions to this file by Eric Messick of the Grasshopper Group.
- %
- % Grasshopper Group
- % 212 Clayton St
- % San Francisco, CA 94117
- %
- %
- %
- % "@(#)psterm.ps 1.0 88/06/09 SMI
- % "@(#)$Header: psterm.ps,v 2.3 88/10/05 17:45:46 eric Release $
- %
- % Copyright (c) 1985 by Sun Microsystems, Inc.
- %/
-
- /hourg /hourg_m framebuffer setstandardcursor
- pause
-
- systemdict begin
- /PSTermDict 150 dict def
- end
-
- PSTermDict begin
-
- % user customization of these items can be done in ~/.pstermrc
-
- /DefaultTerminalFont /Screen def
- /DefaultFontSize 12 def
- /DefaultLines 24 def
- /DefaultCols 80 def
-
- /morefontmenulength 25 def
-
- /EdgeLeft 1 def % space inside frame to leave white
- /EdgeRight 1 def
- /EdgeTop 1 def
- /EdgeBottom 1 def
-
- /ScrollbarWidth 16 def
-
- /Shrink_To_Cols_Lines true def
- % contract window to nearest integral size
-
- /DefaultSimpleShow true def
- % false means monospace variable spaced fonts
- /DefaultFastRepaint true def
- % false means paint every screen, even if
- % we're in the middle of painting a screen
- /DefaultUseCopyArea true def
- % set to false on silicon graphics
- % where reading pixels is expensive
-
- /smallest_font 1 def
- % when font size is calculated, start here
-
- /next_font_size { 1 add } def
- % and increment by doing this
-
- /OnePointFontXKludge 0 def
- /OnePointFontYKludge 1 def
- % translate One Point Font by this with respect to background
- % twiddle these if icon erases itself
- % adjust so cursor is on correct line of text
- % and delete actually wipes out characters
-
- /IconXKludge 0 def
- /IconYKludge 0 def
- % translate contents of icon by this much
- % twiddle these if icon borders go away on repaint
- % adjust so there is EdgeTop point gap above top line of text
-
- % we believe that these differences are related to color vs. b/w
- % systems. some experimentally determined values are:
- %
- % Screen Type
- % FontX FontY IconX IconY
- %
- % Black&White
- % 0 1 0 0
- %
- % Color
- % 0 -2 0 2
-
-
- framebuffer setcanvas clippath pathbbox
- /MaxWindowHeight exch 100 add def
- /MaxWindowWidth exch 100 add def
- pop pop
- % note: this stuff doesn't work right with
- % multiple framebuffers
- % until then, it speeds things up
- % and uses less memory for really big
- % windows that can't be displayed
- % completly anyway...
-
- % customization beyond this point is not recommended
-
- /RePaintCode (\200a) def
- /BeginSelectionCode (\200b) def
- /ExtendSelectionCode (\200c) def
- /EndSelectionCode (\200d) def
- /AutoMarginToggleCode (\200e) def
- /PageModeToggleCode (\200f) def
- /LineColCode (\200g) def
- /FixedFontCode (\200h) def
- /VariableFontCode (\200i) def
- /BeginRectSelectionCode (\200j) def
- /BeginRectExtendCode (\200k) def
- /ScrollBarCode (\200l) def
- /ScrollLengthCode (\200m) def
- /EndOfRefreshCode (\200n) def
- /FastRepaintCode (\200o) def
- /UseCopyAreaCode (\200p) def
-
- /sortarray { % array --> sorted_array
- 10 dict begin
- /arr exch def
- /len arr length def
- 1 1 len 1 sub {
- /i exch def
- 0 1 i 1 sub {
- /j exch def
- arr i get arr j get lt {
- /ferd arr i get def
- arr i arr j get put
- arr j ferd put
- } if
- } for
- } for
- arr
- end
- } def
-
- /PrimarySelection 1 def
-
- /fontkey {findfont 14 scalefont} def
- /longstring 256 string def
-
- /LineColMenu [
- (24 x 80) { 24 80 ChangeLineCol }
- ( 8 x 80) { 8 80 ChangeLineCol }
- (16 x 64) { 16 64 ChangeLineCol }
- (34 x 80) { 34 80 ChangeLineCol }
- (60 x 80) { 60 80 ChangeLineCol }
- (28 x 90) { 28 90 ChangeLineCol }
- (40 x 90) { 40 90 ChangeLineCol }
- (48 x 96) { 48 96 ChangeLineCol }
- (66 x 132) { 66 132 ChangeLineCol }
- ] /new DefaultMenu send def
- { /LayoutStyle [3 3] def
- /CellHorizGap 5 def
- } LineColMenu send
-
- /PointMenu
- [(1) (2) (4) (6)
- (8) (10) (12) (14)
- (16) (18) (24) (32)
- (48) (64) (96) (128)]
- [{currentkey cvi ChangeFontSize}]
- /new DefaultMenu send def
- { /LayoutStyle [4 4] def
- /CellHorizGap 5 def
- } PointMenu send
-
- /FontMenu [
- [(Courier)
- /Courier fontkey]
- [(Courier-Bold)
- /Courier-Bold fontkey]
- [(Courier-Oblique)
- /Courier-Oblique fontkey]
- [(Courier-BoldOblique)
- /Courier-BoldOblique fontkey]
- [(Screen)
- /Screen fontkey]
- [(Screen-Bold)
- /Screen-Bold fontkey]
- ] [{currentkey 1 get /FontName get ChangeFont}]
- /new DefaultMenu send def
- {
- /LayoutStyle [4 2] def
- /RowMajor? false def
- /CenterItems? false def
- } FontMenu send
-
- /MoreFontsMenu [
- FontDirectory {
- pop longstring cvs
- dup length string copy
- } forall
- ] sortarray
- dup length /HowManyFontsCanYouCount? exch store
- [{ currentkey ChangeFont }]
- /new DefaultMenu send def
- {
- /LayoutStyle [ morefontmenulength
- HowManyFontsCanYouCount? min
- HowManyFontsCanYouCount?
- 1 sub morefontmenulength div
- truncate 1 add ] def
- /RowMajor? false def
- /CenterItems? false def
- } MoreFontsMenu send
- pause
- /ScrollLengthMenu
- [
- (0) (64) (128) (256)
- (512) (1024) (2048) (4096)
- ]
- [{currentkey cvi ChangeScrollLength}]
- /new DefaultMenu send def
- {
- /LayoutStyle [4 2] def
- /RowMajor? false def
- /CellHorizGap 5 def
- } ScrollLengthMenu send
-
- /StuffToMenu [
- (Stuff to Frame Label) {
-
- /PrimarySelection getselection
- dup null eq {pop}
- % See if null selection
- { dup /ContentsAscii known
- % Get ascii contents
- {/ContentsAscii get SL }
- {pop} ifelse
- } ifelse
-
- }
- (Stuff to Icon Label) {
-
- /PrimarySelection getselection
- dup null eq {pop}
- % See if null selection
- { dup /ContentsAscii known
- % Get ascii contents
- {/ContentsAscii get
- seticonlabel }
- {pop} ifelse
- } ifelse
-
- }
- (Stuff to Both) {
-
- /PrimarySelection getselection
- dup null eq {pop}
- % See if null selection
- { dup /ContentsAscii known
- % Get ascii contents
- {/ContentsAscii get
- dup SL seticonlabel }
- {pop} ifelse
- } ifelse
-
- }
- (Version to Frame Label){
- ($Header: psterm.ps,v 2.3 88/10/05 17:45:46 eric Release $)
- 8 1 index length 9 sub getinterval SL
- }
- ] /new DefaultMenu send def
-
- pause
-
- systemdict /Item known not { (NeWS/liteitem.ps) run } if
-
- pause
-
- /PropScrollbar SimpleScrollbar
- dictbegin
- /Tracking false def
- dictend
- classbegin
- /SetScale { % - => - (set BarScale from size)
- /BarScale % points per line of text
- ItemHeight ButtonSize 2 mul sub
- BarMax BarMin sub div def
- /BoxSize BarViewPercent BarScale mul neg
- ItemHeight ButtonSize 2 mul sub min
- 5 max
- def
- } def
- /ValueToY { % value -> y
- BarMin BarViewPercent sub dup 0 le {
- pop ButtonSize
- } {
- exch
- 1 index exch sub
- 1 index BarMax sub div mul neg
- BarScale mul ButtonSize add
- } ifelse
- } def
- /YToValue { % y -> value
- ButtonSize sub BoxSize 2 div add
- BarScale div BarMin add .5 add truncate
- CheckValueBounds
- } def
- /ferd pop
- /CheckValueBounds { % value => value (in range)
- BarMax max BarMin BarViewPercent sub min
- } def
- /DoScroll { % - => -
- SetScrollValue
- ItemValue ItemPaintedValue ne
- {EraseBox PaintBox NotifyUser}
- if
- } def
- /SetValue { % value => -
- /ItemValue exch def
- /paint self send
- } def
- /ClientDown {
- /Tracking true def
- /ClientDown super send
- } def
- /ClientUp {
- /Tracking false def
- } def
- /SetScrollBarValue { % value range_array => -
- Tracking {
- pop pop % it'll catch up
- } {
- /setrange self send
- /SetValue self send
- } ifelse
- } def
- classend def
-
- pause
-
- /PSTermWindow DefaultWindow
- dictbegin
- /Scrollbar null def
- /ScrollbarActive false def
- dictend
- classbegin
- /BorderRight {
- ScrollbarActive {
- {
- ScrollbarWidth BorderRight 5 min add
- BorderRight max
- } DefaultWindow send
- } {
- DefaultWindow /BorderRight get
- } ifelse
- } def
-
- /ClientMinHeight {
- ScrollbarActive {48} {5} ifelse
- } def
-
- /ClientMinWidth 5 def
-
- /ScrollbarOn {
- ScrollbarActive not {
- /map Scrollbar send
- BorderRight
- /ScrollbarActive true def
- BorderRight sub
- FrameX FrameY
- FrameWidth 4 -1 roll sub FrameHeight
- /doreshape self send
- /ShapeStretchControl self send
- } if
- } def
-
- /ScrollbarOff {
- ScrollbarActive {
- /unmap Scrollbar send
- BorderRight
- /ScrollbarActive false def
- BorderRight sub
- FrameX FrameY
- FrameWidth 4 -1 roll sub FrameHeight
- /doreshape self send
- /ShapeStretchControl self send
- } if
- } def
-
- /ShapeStretchControl {
- gsave
- FrameCanvas setcanvas
- ControlSize BorderRight gt
- ControlSize BorderBottom gt and {
- newpath
- 0 0 moveto
- 0 BorderBottom lineto
- ControlSize BorderRight sub
- BorderBottom lineto
- ControlSize BorderRight sub
- ControlSize lineto
- ControlSize
- ControlSize lineto
- ControlSize
- 0 lineto
- closepath
- } {
- 0 0 ControlSize ControlSize rectpath
- } ifelse
- StretchControl reshapecanvas
- /MoveFrameControls self send
- /PaintFrameControls self send
- grestore
- } def
-
- pause
-
- /destroy {
- /Scrollbar null def
- /destroy super send
- } def
-
- /CreateFrameControls { % - => -
- % (Create frame control canvases/items)
- /CreateFrameControls super send
- /Scrollbar
- [10 0 1 10 10] 0
- { ScrollBarCode print ItemValue = }
- FrameCanvas /new PropScrollbar send
- def
- { /ItemPaintedValue 0 def } Scrollbar send
- % this kludge shouldn't be needed
- } def
-
- /CreateFrameInterests { % - => -
- % (Create frame control interests)
- /CreateFrameInterests super send
- FrameInterests begin
- % Append the scroll bar "start" interests to the frame interests.
- % The odd "forall" is used to create unique names for inclusion
- % in the frame interests dictionary.
- /makestartinterests Scrollbar send {
- (Scrollbar) 1 index /Name get cvx 100
- string cvs append
- cvn exch def
- } forall
- end
- } def
-
- /MoveFrameControls { % - => - ([Re]set frame control shapes)
- /MoveFrameControls super send
- ScrollbarActive {
- FrameWidth BorderRight sub
- ControlSize 1 sub
- ScrollbarWidth
- FrameHeight ControlSize sub BorderTop sub 2 add
- /reshape Scrollbar send
- } if
- } def
-
- /PaintFrameControls { % - => - (Paint frame control areas)
- gsave
- /PaintFrameControls super send
- ScrollbarActive { /paint Scrollbar send } if
- grestore
- } def
-
- /SetScrollBarValue { % totallines currentposition => -
- ScrollbarActive {
- [
- 2 index 0 1
- Window_lines dup 3 sub 1 max exch ]
- /SetScrollBarValue Scrollbar send
- } { pop } ifelse
- pop
- } def
-
- /FixFrame {RePaintCode print} def
- /PaintClient {RePaintCode print} def
- /PaintIcon {RePaintCode print} def
- /reshape { ChangeWidthHeight } def
- /flipiconic { Flip_Iconic } def
-
- /ShapeIconCanvas {
- gsave
- ParentCanvas setcanvas
- IconX null ne {
- IconX IconY translate
- } if
- 0 0 IconWidth IconHeight IconPath
- IconCanvas reshapecanvas
- grestore
- } def
-
- pause
-
- /makemenus {
- /ResizeMenu [
- (Changing Font Size determines:) {}
- () {}
- () {}
- (Changing Lines/Cols determines:) {}
- () {}
- () {}
- (Changing Window Size determines:) {}
- () {}
- () {}
- ] /new DefaultMenu send def
- % looks bad { /CenterItems? false def } ResizeMenu send
-
- /ToggleMenu [
- ( Page Mode)
- {PageModeToggleCode print}
- ( Auto-Margins)
- {AutoMarginToggleCode print}
- ( Var Width Fonts)
- { ToggleSimpleShow RePaintCode print}
- ( Fast Repaint)
- { ToggleFastRepaint }
- ( Scrolling Allowed)
- { ToggleUseCopyArea }
- ] /new DefaultMenu send def
- % looks bad { /CenterItems? false def } ToggleMenu send
-
- /ConfigMenu [
- (Lines x Cols...) LineColMenu
- (Points...) PointMenu
- (Fonts...) FontMenu
- (More Fonts!...) MoreFontsMenu
- (Resizing stuff...) ResizeMenu
- (Save Lines...) ScrollLengthMenu
- (Toggles...) ToggleMenu
- (Set Labels...) StuffToMenu
- ] /new DefaultMenu send def
-
- /ClientMenu [
- (Stuff) {
-
- /PrimarySelection getselection
- dup null eq {pop}
- % See if null selection
- { dup /ContentsAscii known
- % Get ascii contents
- {/ContentsAscii get print}
- {pop} ifelse
- } ifelse
-
- }
- (Frame...) { FrameMenu } MyWindow send
- (Config...) ConfigMenu
- ] /new DefaultMenu send def
-
- } def
-
- /PageModeMenuItem 0 def % which item of /ToggleMenu?
- /AutoMarginMenuItem 1 def % likewise
- /SimpleShowMenuItem 2 def % likewise
- /FastRepaintMenuItem 3 def % likewise
- /UseCopyAreaMenuItem 4 def % likewise
-
- /doreshape { /reshape load } DefaultWindow send def
-
- /doflipiconic { /flipiconic load } DefaultWindow send def
-
- classend def
-
- pause
-
- gsave 0.0005 rotate
- /Courier findfont setfont
- /OnePointFont currentfont
- [ 1 (m) stringwidth pop div 0 0
- 1 currentfont fontheight div
- 0 0 % these are ignored by NeWS ---- FIXME!!
- ] makefont def
- grestore
-
- /TSB { % on/off => - ``toggle'' scrollbar
- 0 eq { /ScrollbarOff } { /ScrollbarOn } ifelse MyWindow send
- } def
- /SSBV { % totallines currentpos => - set scrollbar value
- /SetScrollBarValue MyWindow send
- } def
-
- /BRP {
- {
- gsave
- Iconic? {
- IconCanvas setcanvas damagepath clipcanvas
- IconFillColor fillcanvas
- IconBorderColor strokecanvas
- PaintIconLabel
- } {
- FrameCanvas setcanvas
- damagepath clipcanvas PaintFrame
- % initialize client canvas with background color
- ClientCanvas setcanvas
- ClientFillColor fillcanvas
- } ifelse
- grestore
- }
- MyWindow send
- } def
-
- /ERP { clipcanvas } def
-
- /EOR { EndOfRefreshCode print } def
-
- /CD { % c x y cursordown
- gsave
- maxy add
- translate
- dup length dup
- 0 0 moveto
- 0 1 rlineto
- 0 rlineto % x component is length of c
- 0 lineto % x component is length of c
- closepath
- backgroundcolor setcolor
- fill
- textcolor setcolor
- 0 maxy neg moveto
- showtext
- grestore
- } def
-
- /CU { % c x y cursorup
- gsave
- maxy add
- translate
- dup length dup
- 0 0 moveto
- 0 1 rlineto
- 0 rlineto % x component is length of c
- 0 lineto % x component is length of c
- closepath
- textcolor setcolor
- fill
- backgroundcolor setcolor
- 0 maxy neg moveto
- showtext
- grestore
- } def
-
- /CL { % yby w yfrom nl CopyLine
- gsave
- /NumLin exch def % yby w yfrom
- maxy add 0 exch translate % yby w
- 0 0 moveto
- 0 NumLin rlineto % yby w
- dup 0 rlineto % yby w
- 0 lineto % yby
- closepath
- 0 exch copyarea
- grestore
- } def
-
- /SL { % s SetFrameLabel
- {
- /FrameLabel exch store
- gsave
- FrameCanvas setcanvas
- BorderLeft 1 add
- FrameHeight BorderTop sub 1 add
- FrameWidth BorderLeft BorderRight add sub 2 sub
- BorderTop 2 sub
- rectpath FrameFillColor setcolor fill
- % clear label area
- /paintframelabel self send
- FrameBorderColor setcolor
- PaintFrameControls PaintFocus
- grestore
- } MyWindow send
- } def
-
- /seticonlabel {
- {
- /IconLabel exch store
- PaintIcon
- } MyWindow send
- } def
-
- /VB {
- gsave
- HiLightCanvas setcanvas
- overlaydraw HlBgColor setcolor clippath fill
- .05 60 div sleep
- overlayerase erasepage
- grestore
- } def
-
- /AM { % onoff => - (define auto margins)
- 0 eq {( Auto-Margins)}{(* Auto-Margins)} ifelse
- { AutoMarginMenuItem } MyWindow send exch
- {AutoMarginToggleCode print}
- /changeitem MyWindow /ToggleMenu get send
- } def
-
- /PM { % onoff => - (define page mode)
- 0 eq {( Page Mode)}{(* Page Mode)} ifelse
- { PageModeMenuItem } MyWindow send exch
- {PageModeToggleCode print}
- /changeitem MyWindow /ToggleMenu get send
- } def
-
- /ToggleSimpleShow {
- /SimpleShow SimpleShow not store
- /FontFixedP MonoSpacedFont Font_size 1 eq or
- SimpleShow not or store
- FontFixedP { FixedFontCode } { VariableFontCode } ifelse print
- { SimpleShowMenuItem } MyWindow send
- SimpleShow {(* Var Width Fonts)}{( Var Width Fonts)} ifelse
- { ToggleSimpleShow RePaintCode print}
- /changeitem MyWindow /ToggleMenu get send
- } def
-
- /ToggleFastRepaint {
- /FastRepaint FastRepaint not store
- FastRepaintCode print
- FastRepaint { 1 } { 0 } ifelse =
- { FastRepaintMenuItem } MyWindow send
- FastRepaint {(* Fast Repaint)}{( Fast Repaint)} ifelse
- { ToggleFastRepaint }
- /changeitem MyWindow /ToggleMenu get send
- } def
-
- /ToggleUseCopyArea {
- /UseCopyArea UseCopyArea not store
- UseCopyAreaCode print
- UseCopyArea { 1 } { 0 } ifelse =
- { UseCopyAreaMenuItem } MyWindow send
- UseCopyArea {(* Scrolling Allowed)}{( Scrolling Allowed)} ifelse
- { ToggleUseCopyArea }
- /changeitem MyWindow /ToggleMenu get send
- } def
-
- /MT {
- backgroundcolor setcolor
- 2 copy maxy add moveto
- 1 index 0 eq { -.25 0 rmoveto } if
- % zap blats on left margin
- 0 1 rlineto
- Window_cols .25 add 1 index maxy add 1 add lineto
- 0 -1 rlineto
- closepath fill
- moveto
- pause
- } def
-
- /PN { % paint normal
- textcolor setcolor
- showtext
- } def
-
- /PR {
- dup textstringwidth
- textcolor setcolor
- stringbox
- backgroundcolor setcolor
- showtext
- } def
-
- /UN {
- dup textstringwidth
- textcolor setcolor
- underscore
- showtext
- } def
-
- /UR {
- dup textstringwidth
- textcolor setcolor
- dup stringbox
- backgroundcolor setcolor
- underscore
- showtext
- } def
-
- /CE {
- } def
-
- /textstringwidth { % (str) => width
- FontFixedP {
- length
- } {
- stringwidth pop
- } ifelse
- } def
-
- /stringbox { % width
- currentpoint 3 2 roll
- 0 maxy rmoveto
- 0 1 rlineto
- 0 rlineto
- 0 -1 rlineto
- closepath fill
- moveto
- } def
-
- /underscore { % width
- currentpoint 3 2 roll
- 1 maxy add 2 div 0 exch rmoveto
- 0 rlineto
- stroke
- moveto
- } def
-
- /showtext {
- Font_size 1 eq {
- OnePointFontXKludge OnePointFontYKludge rmoveto
- show
- OnePointFontXKludge neg OnePointFontYKludge neg rmoveto
- } {
- MonoSpacedFont SimpleShow or {
- show
- } {
- currentpoint ShowChar 0 % (str) x y ( ) 0
- { % x y ( ) 0 char
- put ShowChar % x y (c)
- show
- exch 1 add exch moveto
- currentpoint % x y
- ShowChar 0
- } 6 -1 roll exch forall
- pop pop
- exch 1 add exch moveto
- } ifelse
- } ifelse
- } def
-
- /HL { % strokeit [ ends of lines ] firstcol firstrow => -
- % do highlighting
- gsave
- 3 index 0 ne {
- HiLightCanvas setcanvas
- CurrentMatrix setmatrix
- -0.005 rotate
- erasepage
- } if
- maxy add 1 add dup % [] x y y
- 4 1 roll % y [] x y
- exch dup type /stringtype eq {
- textstringwidth
- } if
- exch moveto % y []
- 0 -1 rlineto dup % y [] []
- { % ... x
- dup type /stringtype eq {
- textstringwidth
- } {
- 1 add
- } ifelse
- currentpoint % ... x cx cy
- exch pop % ... x cy
- lineto
- 0 1 rlineto
- } forall % y []
- length 1 gt {
- currentpoint 0 exch % y cx 0 cy
- lineto pop 0 exch % 0 y
- lineto
- } { pop } ifelse
- closepath
- currentpath /HiLightPath exch store
- 0 ne { stroke } if
- grestore
- } def
-
- /HiLightRect { % strokeit startcol startrow endcol endrow => -
- gsave
- 4 index 0 ne {
- HiLightCanvas setcanvas
- CurrentMatrix setmatrix
- -0.005 rotate
- erasepage
- } if
- 0 maxy translate
- 1 add exch 1 add exch
- 3 index 1 index moveto
- 1 index exch lineto
- 1 index lineto
- lineto closepath
- currentpath /HiLightPath exch store
- 0 ne { stroke } if
- grestore
- } def
-
- /takedownoutline {
- % /HiLightCanvas null store
- % HiLightCanvas /Mapped false put
- gsave
- HiLightCanvas setcanvas erasepage
- grestore
- } def
-
- /clearselectionpath {
- /HiLightPath null store
- } def
-
- /PaintHiLight {
- HiLightPath null ne {
- gsave
- 5 setrasteropcode
- HiLightPath setpath fill
- grestore
- } if
- } def
-
- /startselset {
- /CurrentSelection () store
- } def
-
- /extsel {
- CurrentSelection exch append /CurrentSelection exch store
- } def
-
- /finishselset { % str
- 10 dict dup begin
- /ContentsAscii CurrentSelection def
- /SelectionObjSize 1 def
- /SelectionHolder childprocess def
- /Canvas currentcanvas def
- end
- /PrimarySelection setselection
- } def
-
- /resetscale { 10 dict begin
- { Iconic? { IconCanvas } { ClientCanvas } ifelse }
- MyWindow send setcanvas
- 0.0005 rotate
- clippath pathbbox EdgeLeft exch
- ScaledFont fontdescent add EdgeTop sub translate
- clear
-
- Font_size 1 eq {
- 1 -1 scale
- IconXKludge IconYKludge translate
- OnePointFont setfont
- } {
- /xscale ScaledFont setfont (m) stringwidth pop def
- /yscale ScaledFont fontheight neg def
- xscale 0 eq { /xscale 0.0005 store } if
- yscale 0 eq { /yscale -0.0005 store } if
- xscale yscale scale
-
- Term_Font [
- Font_size xscale div 0 0
- Font_size yscale div 0 0 ] makefont setfont
- } ifelse
-
- textcolor setcolor
- % 0 setgray
-
- 0 1 translate
- /CurrentMatrix 6 array currentmatrix store
- /HiLightCanvas { ClientCanvas } MyWindow send
- createoverlay store
- clear
- childprocess dup null ne {
- MySetTransform createevent copy dup begin
- /Action matrix currentmatrix def
- /TimeStamp lasteventtime def
- end sendevent
- } {
- pop
- } ifelse
-
- end
- /maxy currentfont fontascent neg store
- } def
-
- /whcl2f {
- gsave 0.0005 rotate
- /Term_Font SelectedFont store
- /char_width Window_width
- { BorderLeft sub BorderRight sub } MyWindow send
- EdgeLeft sub EdgeRight sub
- Window_cols div store
-
- /char_height Window_height
- { BorderTop sub BorderBottom sub } MyWindow send
- EdgeTop sub EdgeBottom sub
- Window_lines div store
-
- /Font_size 0 store
- smallest_font
- {
- dup Term_Font exch scalefont setfont
- currentfont fontheight char_height ge
- (m) stringwidth pop char_width ge or { exit } if
- dup /Font_size exch store
- next_font_size
- } loop
- pop
-
- Term_Font Font_size scalefont setfont
- /ScaledFont currentfont store
- grestore
- Shrink_To_Cols_Lines { clf2wh } if
- } def
-
- /whf2cl {
- gsave 0.0005 rotate
-
- Font_size 1 eq {
- /Term_Font /Courier findfont store
- /ScaledFont OnePointFont store
- } {
- /Term_Font SelectedFont store
- /ScaledFont Term_Font Font_size scalefont store
- } ifelse
-
- ScaledFont setfont
-
- /Window_cols Window_width
- { BorderLeft sub BorderRight sub } MyWindow send
- EdgeLeft sub EdgeRight sub
- (m) stringwidth pop div .5 add truncate 1 max store
-
- /Window_lines Window_height
- { BorderTop sub BorderBottom sub } MyWindow send
- EdgeTop sub EdgeBottom sub
- currentfont fontheight div .5 add truncate 1 max store
- grestore
- Shrink_To_Cols_Lines { clf2wh } if
- } def
-
- /clf2wh {
- gsave 0.0005 rotate
-
- Font_size 1 eq {
- /Term_Font /Courier findfont store
- /ScaledFont OnePointFont store
- } {
- /Term_Font SelectedFont store
- /ScaledFont Term_Font Font_size scalefont store
- } ifelse
-
- ScaledFont setfont
-
- /Window_width Window_cols (m) stringwidth pop mul
- { BorderLeft add BorderRight add } MyWindow send
- EdgeLeft add EdgeRight add store
-
- /Window_height Window_lines currentfont fontheight mul
- { BorderTop add BorderBottom add } MyWindow send
- EdgeTop add EdgeBottom add store
- grestore
- } def
-
- /SetupResizeMenu {
- /FontChangeProc load /clf2wh load eq {
- 1 (* Window Size) {} /changeitem MyWindow
- /ResizeMenu get send
- 2 ( Lines/Cols ) { ToggleFont } /changeitem MyWindow
- /ResizeMenu get send
- } {
- 1 ( Window Size) { ToggleFont } /changeitem MyWindow
- /ResizeMenu get send
- 2 (* Lines/Cols ) {} /changeitem MyWindow
- /ResizeMenu get send
- } ifelse
-
- /LineColChangeProc load /clf2wh load eq {
- 4 (* Window Size) {} /changeitem MyWindow
- /ResizeMenu get send
- 5 ( Font Size ) { ToggleLineCol }
- /changeitem MyWindow
- /ResizeMenu get send
- } {
- 4 ( Window Size) { ToggleLineCol }
- /changeitem MyWindow
- /ResizeMenu get send
- 5 (* Font Size ) {} /changeitem MyWindow
- /ResizeMenu get send
- } ifelse
-
-
- /WidthHeightChangeProc load /whf2cl load eq {
- 7 (* Lines/Cols ) {} /changeitem MyWindow
- /ResizeMenu get send
- 8 ( Font Size ) { ToggleWidthHeight }
- /changeitem MyWindow
- /ResizeMenu get send
- } {
- 7 ( Lines/Cols ) { ToggleWidthHeight }
- /changeitem MyWindow
- /ResizeMenu get send
- 8 (* Font Size ) {} /changeitem MyWindow
- /ResizeMenu get send
- } ifelse
-
- } def
-
- /DefaultFontChangeProc /clf2wh load def
- /ToggleFont {
- /FontChangeProc load /clf2wh load eq {
- /FontChangeProc /whf2cl load store
- } {
- /FontChangeProc /clf2wh load store
- } ifelse
- SetupResizeMenu
- } def
-
- /DefaultLineColChangeProc /clf2wh load def
- /ToggleLineCol {
- /LineColChangeProc load /clf2wh load eq {
- /LineColChangeProc /whcl2f load store
- } {
- /LineColChangeProc /clf2wh load store
- } ifelse
- SetupResizeMenu
- } def
-
- /DefaultWidthHeightChangeProc /whf2cl load def
- /ToggleWidthHeight {
- /WidthHeightChangeProc load /whf2cl load eq {
- /WidthHeightChangeProc /whcl2f load store
- } {
- /WidthHeightChangeProc /whf2cl load store
- } ifelse
- SetupResizeMenu
- } def
-
- /ChangeOne {
- dup /Font eq {
- pop
- FontChangeProc
- } {
- /LineCol eq {
- LineColChangeProc
- } {
- WidthHeightChangeProc
- } ifelse
- } ifelse
-
- {
- /IconWidth Window_cols gsave
- IconFont setfont
- IconLabel stringwidth pop
- grestore max EdgeLeft add EdgeRight add def
- /IconHeight Window_lines EdgeTop add EdgeBottom add
- IconFont fontheight add def
- /ShapeIconCanvas self send
- } MyWindow send
-
- LineColCode print
- Window_cols =
- Window_lines =
- /Window_x { FrameX } MyWindow send store
- /Window_y { FrameY } MyWindow send store
- Window_y Window_height add 0 lt { % don't disappear on us!
- /Window_y 10 Window_height sub store
- } if
- Window_x Window_y
- Window_width MaxWindowWidth min
- Window_height MaxWindowHeight min
- /doreshape MyWindow send
-
- } def
-
- /ChangeScrollLength {
- ScrollLengthCode print =
- } def
-
- /ChangeFontSize {
- /SelectedFontSize exch store
- /Font_size SelectedFontSize store
- /Font ChangeOne
- } def
-
- /ChangeWidthHeight {
- /Window_height exch store
- /Window_width exch store
- /Window_y exch store
- /Window_x exch store
- {
- /FrameX Window_x store
- /FrameY Window_y store
- ClientMinWidth BorderLeft add BorderRight add
- ClientMinHeight BorderTop add BorderBottom add
- } MyWindow send
- dup Window_height gt {
- /Window_height exch store
- } { pop } ifelse
- dup Window_width gt {
- /Window_width exch store
- } { pop } ifelse
- /WidthHeight ChangeOne
- } def
-
- /ChangeLineCol {
- /Window_cols exch store
- /Window_lines exch store
- /LineCol ChangeOne
- } def
-
- /ChangeFont {
- dup
- { findfont } errored {
- gsave framebuffer setcanvas currentcursorlocation
- [ (Could not find font:) 5 -1 roll 100 string cvs ] popmsg pop
- grestore
- } {
- /SelectedFont exch store
- pop
- /MonoSpacedFont SelectedFont /IsFixedPitch get store
- SelectedFont /FontName get
- dup /Courier eq
- 1 index /Courier-Bold eq or
- 1 index /Courier-Oblique eq or
- exch /Courier-BoldOblique eq or {
- /MonoSpacedFont true store
- } if
- /FontFixedP MonoSpacedFont Font_size 1 eq or
- SimpleShow not or store
- FontFixedP { FixedFontCode } { VariableFontCode } ifelse print
- Font_size ChangeFontSize
- } ifelse
- } def
-
- /Flip_Iconic {
- /doflipiconic self send
- Iconic? {
- /Font_size 1 store
- /FontFixedP MonoSpacedFont Font_size 1 eq or
- SimpleShow not or store
- FontFixedP
- { FixedFontCode }
- { VariableFontCode }
- ifelse print
- ClientCanvas setcanvas ClientFillColor fillcanvas
- % keep it from repainting twice
- IconCanvas setcanvas
- /ScaledFont OnePointFont store
- ScaledFont setfont
- IconCanvas /Retained get {
- /PaintIcon self send
- } if
- } {
- IconCanvas setcanvas IconFillColor fillcanvas
- ClientCanvas setcanvas
- /Font_size SelectedFontSize store
- /FontFixedP MonoSpacedFont Font_size 1 eq or
- SimpleShow not or store
- FontFixedP
- { FixedFontCode }
- { VariableFontCode }
- ifelse print
- /ScaledFont Term_Font Font_size scalefont store
- ScaledFont setfont
- ClientCanvas /Retained get {
- /PaintClient self send
- } if
- } ifelse
- } def
-
- /UserWindowCustom nullproc def
-
- /createwindow {
- % x y fs col line framelabel iconlabel font starticonic iconx icony
- pause
- /IconInitialX exch store
- /IconInitialY exch store
- /StartIconic exch store
- /InitialFont exch store
- /MyIconLabel exch store
- /MyFrameLabel exch store
- /Window_lines exch store
- /Window_cols exch store
- /SelectedFontSize exch store
- /Window_y exch store
- /Window_x exch store
-
- /MyWindow framebuffer /new PSTermWindow send store
-
- /UserWindowCustom load MyWindow send
-
- Window_x Window_y 0 0 /doreshape MyWindow send
- % this calls checkcanvases to set up FrameMenu ... ugh...
-
- {
- /FrameLabel MyFrameLabel def
- /IconLabel MyIconLabel def
- makemenus
- ClientCanvas
-
- } MyWindow send
-
- createoverlay /HiLightCanvas exch store
-
- IconInitialX 0 ge IconInitialY 0 ge and {
- { /IconX IconInitialX def /IconY IconInitialY def }
- MyWindow send
- } if
-
- SetupResizeMenu
- ToggleSimpleShow
- ToggleFastRepaint
- ToggleUseCopyArea
-
- Window_cols 0 le Window_lines 0 le or {
- /Window_lines DefaultLines store
- /Window_cols DefaultCols store
- } if
-
- SelectedFontSize 0 le
- { /SelectedFontSize DefaultFontSize store } if
-
- { InitialFont findfont } errored not
- { InitialFont ChangeFont } if
-
- SelectedFontSize ChangeFontSize
-
- MyWindow /ClientCanvas get setcanvas
-
- InitialReshapeFromUser { /reshapefromuser MyWindow send } if
-
- StartIconic 0 ne { /flipiconic MyWindow send } if
- /map MyWindow send
- pause
-
- /MySetTransform createevent store
-
- MySetTransform begin
- /Name /SetTransform def
- /Canvas currentcanvas def
- end
-
- /MyMouseEvents createevent store
-
- MyMouseEvents begin
- /Name [ /MouseDragged /PointButton load
- /AdjustButton load ] def
- /Canvas currentcanvas def
- end
-
- } def
-
- /startinput {
- /childprocess null store
- resetscale
- ( ) 0 0 CU
- pause
- {
- systemdict /Selections known {
- { ClientCanvas } MyWindow send
- dup addkbdinterests pop
- % dup addselectioninterests pop
- addfunctionstringsinterest pop
- { FrameCanvas } MyWindow send
- dup addkbdinterests pop
- addfunctionstringsinterest pop
- { IconCanvas } MyWindow send
- dup addkbdinterests pop
- addfunctionstringsinterest pop
- } {
- /Ascii 128 dict def
- /Template createevent def
- Ascii begin
- 0 1 127 { dup def } for
- end
- Template
- Ascii seteventname
- currentcanvas seteventcanvas
- expressinterest
- } ifelse
- MyMouseEvents expressinterest
- MySetTransform expressinterest
-
- /MyEventActions 20 dict dup begin
-
- /Ignore {
- } def
-
- /AcceptFocus {
- % true /reflectfocus MyWindow send
- } def
- /RestoreFocus {
- % true /reflectfocus MyWindow send
- } def
-
- /SetTransform {
- Action dup null ne {
- setmatrix
- } {
- pop
- } ifelse
- } def
-
- /SetSelectionAt {
- } def
-
- /ExtendSelectionTo {
- } def
-
- /DeSelect {
- } def
-
- /LoseFocus { % NeWS/X version of DeSelect
- } def
-
- /SelectionRequest {
- } def
-
- /PointButton load {
- Action /DownTransition eq {
- false KeyState {
- /Shift eq {
- pop true exit
- } if
- } forall {
- BeginRectSelectionCode
- print
- } {
- BeginSelectionCode
- print
- } ifelse
- XLocation =
- YLocation maxy sub =
- 1 =
- /Selection_in_progress?
- true store
- } { % /UpTransition
- Selection_in_progress? {
- EndSelectionCode print
- XLocation =
- YLocation maxy sub =
- 1 =
- /Selection_in_progress?
- false store
- } if
- } ifelse
- } def
-
- /AdjustButton load {
- Action /DownTransition eq {
- false KeyState {
- /Shift eq {
- pop true exit
- } if
- } forall {
- BeginRectExtendCode
- print
- } {
- ExtendSelectionCode
- print
- } ifelse
- XLocation =
- YLocation maxy sub =
- 1 =
- /Selection_in_progress?
- true store
- } { % /UpTransition
- Selection_in_progress? {
- EndSelectionCode print
- XLocation =
- YLocation maxy sub =
- 1 =
- /Selection_in_progress?
- false store
- } if
- } ifelse
- } def
-
- /MouseDragged {
- Selection_in_progress? {
- ExtendSelectionCode print
- XLocation =
- YLocation maxy sub =
- 1 =
- } if
- } def
-
- /InsertValue {
- Action print
- } def
-
- /Default {
- { UI_private /meta_keys_down get
- /MetaP? exch store
- } errored pop
- ( ) dup 0 Name MetaP? 0 ne
- { 128 add } if
- put dup (\200) eq
- { (\200) print } if print
- } def
- end def
-
- { awaitevent
- % systemdict /_termlogger known { _termlogger } if
- begin % event
- MyEventActions Name 2 copy known not {
- pop /Default
- } if
- get exec
- end
- } loop
- } fork /childprocess exch store
- pause pause
- } def
-
- /StretchOpen { % called from -ui StretchOpen
- /InitialReshapeFromUser true def
- } def
-
- /PSTermInit {
- /HowManyFontsCanYouCount? 1 def
- /Term_Font DefaultTerminalFont findfont def
- /SelectedFont Term_Font def
- /SelectedFontSize DefaultFontSize def
- /ScaledFont Term_Font def
- /InitialFont Term_Font def
- /InitialReshapeFromUser false def
- /StartIconic 0 def
- /IconInitialX -1 def
- /IconInitialY -1 def
- /MonoSpacedFont true def
- /FontFixedP true def
- /SimpleShow DefaultSimpleShow not def
- % inverted because we toggle to set up menu
- /FastRepaint DefaultFastRepaint not def % likewise
- /UseCopyArea DefaultUseCopyArea not def % likewise
- /CurrentMatrix matrix def
- /CurrentSelection () def
-
- /char_width 1 def
- /char_height 1 def
- /MetaP? 0 def
- /ShowChar ( ) def
- /Selection_in_progress? false def
- /HiLightPath null def
- /HiLightCanvas null def
-
- /Font_size SelectedFontSize def
- /Window_cols DefaultCols def
- /Window_lines DefaultLines def
- /Window_width 0 def
- /Window_height 0 def
- /Window_x 0 def
- /Window_y 0 def
-
- /MyIconLabel () def
- /MyFrameLabel () def
-
- /MyWindow null def
- /MyMouseEvents null def
- /MySetTransform null def
- /childprocess null def
-
- /FontChangeProc /DefaultFontChangeProc load def
- /LineColChangeProc /DefaultLineColChangeProc load def
- /WidthHeightChangeProc /DefaultWidthHeightChangeProc load def
-
- /HlBgColor where { pop } { /HlBgColor 0 0 0 rgbcolor def } ifelse
-
- pause
- } def
-
- end
-
- pause
-
- /ptr /ptr_m framebuffer setstandardcursor
- @@@ Fin de psterm.ps
- echo selection.c
- cat >selection.c <<'@@@ Fin de selection.c'
- /*
- * This file is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part.
- * Users may copy, modify or distribute this file at will.
- *
- * THIS FILE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * This file is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS FILE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even
- * if Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- *
- * Modifications to the original Sun Microsystems, Inc. source code
- * made by the Grasshopper Group are in the Public Domain.
- *
- * Extensions to this file by Eric Messick of the Grasshopper Group.
- *
- * Grasshopper Group
- * 212 Clayton St
- * San Francisco, CA 94117
- *
- */
-
- #ifndef lint
- static char sccsid[] = "@(#)selection.c 9.4 88/01/19 Copyright 1987 Sun Micro";
- static char RCSid[] =
- "@(#)$Header: selection.c,v 2.3 88/10/04 05:59:54 gnu Release $";
- #endif
-
- /*
- * Copyright (c) 1987 by Sun Microsystems, Inc.
- */
-
- /*-
- selection.c
-
- selection.c, Fri Feb 27 23:51:49 1987
-
- */
-
- /*
- * Selection module
- *
- * The external interfaces of this module are
- * tc_extend_to(col, row, rank, rect)
- * tc_report_selection(rank)
- * tc_deselect(rank)
- * tc_refresh_selection()
- */
-
- #include <sys/types.h>
- #ifdef REF
- #include <ref/config.h>
- #endif
- #include "screen.h"
- #include "tcap.h"
-
- extern int CharsPerLine;
- extern int LinesPerScreen;
- extern int ScrollY;
- extern int ScrollLength;
- extern int ScrollLinesSaved;
-
- static int FixedRow, FixedCol, FloatRow, FloatCol;
- static int ValidSelectionRange = 0 ;
- static int FixedPointSet = 0 ;
- static int Selecting = 0 ;
- static int RectSelection = 0 ;
- static char spaces[MaxCharsPerLine];
-
- #define SelectionThreshold 32000
-
- StartSelection(col, row)
- int col, row;
- {
- if (FixedPointSet)
- return;
- if (row<ScrollLinesSaved-ScrollLength)
- row = ScrollLinesSaved - ScrollLength ;
- if (row>=ScrollLength) row = ScrollLength - 1 ;
- if (col<0) col = 0 ;
- if (RectSelection) {
- if (col>=CharsPerLine) col = CharsPerLine - 1 ;
- }
- else {
- if (col>lines[row]->length) col = lines[row]->length ;
- }
- DeSelect();
- FixedRow = row ;
- FixedCol = col ;
- FixedPointSet = 1 ;
- }
-
- ExtendTo(col, row, strokeoutline)
- int col, row, strokeoutline;
- {
- /* if (row<ScrollY)
- scroll_to(ScrollY - ScrollLength + ScrollLinesSaved - row); */
- if (row<ScrollLength-ScrollLinesSaved)
- row = ScrollLength - ScrollLinesSaved ;
- /* if (row>=ScrollY+LinesPerScreen)
- scroll_to(ScrollY - ScrollLength + ScrollLinesSaved +
- LinesPerScreen - row) ; */
- if (row>=ScrollLength) row = ScrollLength - 1 ;
- if (col<0) col = 0 ;
- if (RectSelection) {
- if (col>=CharsPerLine) col = CharsPerLine - 1 ;
- }
- else {
- if (col>lines[row]->length) col = lines[row]->length ;
- }
- if (ValidSelectionRange) {
- if (FloatRow==FixedRow) {
- if (FloatCol > FixedCol)
- ChooseFixed(FixedCol, FixedRow,
- FloatCol, FloatRow, col, row);
- else ChooseFixed(FloatCol, FloatRow,
- FixedCol, FixedRow, col, row);
- }
- else if (FloatRow > FixedRow)
- ChooseFixed(FixedCol, FixedRow,
- FloatCol, FloatRow, col, row);
- else ChooseFixed(FloatCol, FloatRow,
- FixedCol, FixedRow, col, row);
- }
- else StartSelection(col, row);
- FloatRow = row ;
- FloatCol = col ;
- if (FloatRow==FixedRow) {
- if (FloatCol > FixedCol)
- HiLight(FixedCol, FixedRow,
- FloatCol, FloatRow, strokeoutline);
- else HiLight(FloatCol, FloatRow,
- FixedCol, FixedRow, strokeoutline);
- }
- else if (FloatRow > FixedRow)
- HiLight(FixedCol, FixedRow, FloatCol, FloatRow, strokeoutline);
- else HiLight(FloatCol, FloatRow, FixedCol, FixedRow, strokeoutline);
- }
-
- ReportSelection()
- {
- if (FloatRow==FixedRow) {
- if (FloatCol > FixedCol)
- Report(FixedCol, FixedRow, FloatCol, FloatRow);
- else Report(FloatCol, FloatRow, FixedCol, FixedRow);
- }
- else if (FloatRow > FixedRow)
- Report(FixedCol, FixedRow, FloatCol, FloatRow);
- else Report(FloatCol, FloatRow, FixedCol, FixedRow);
- FixedPointSet = 0 ;
- }
-
- ChooseFixed(startcol, startrow, endcol, endrow, col, row)
- int startcol, startrow, endcol, endrow, col, row;
- {
- if (RectSelection) {
- if (abs(startrow-row) > abs(endrow-row))
- row = startrow ;
- else row = endrow ;
- if (abs(startcol-col) > abs(endcol-col))
- col = startcol ;
- else col = endcol ;
- StartSelection(col, row) ;
- return;
- }
- if ((row < startrow) || ((row == startrow) && (col <= startcol))) {
- StartSelection(endcol, endrow);
- return;
- }
- if ((row > endrow) || ((row == endrow) && (col >= endcol))) {
- StartSelection(startcol, startrow);
- return;
- }
- if (countchars(startcol, startrow, col, row) <
- countchars(col, row, endcol, endrow)) {
- StartSelection(endcol, endrow);
- }
- else {
- StartSelection(startcol, startrow);
- }
- }
-
- countchars(startcol, startrow, endcol, endrow)
- int startcol, startrow, endcol, endrow;
- {
- int count ;
- struct line **sp;
-
- count = endcol-startcol ;
- for (sp = &lines[startrow]; startrow<endrow; sp++, startrow++)
- count += (*sp)->length ;
- return count;
- }
-
- HiLight(startcol, startrow, endcol, endrow, strokeoutline)
- int startcol, startrow, endcol, endrow, strokeoutline;
- {
- int row, col;
- struct line **sp;
- extern int fontisfixedwidth;
-
- startrow -= ScrollY ;
- endrow -= ScrollY ;
-
- if (RectSelection) {
- if (startrow>endrow) {
- row = startrow ;
- startrow = endrow ;
- endrow = row ;
- }
- if (startcol>endcol) {
- col = startcol ;
- startcol = endcol ;
- endcol = col ;
- }
- if (endrow < 0 || startrow >= LinesPerScreen) return;
- if (startrow < 0) startrow = 0 ;
- if (endrow >= LinesPerScreen) endrow = LinesPerScreen - 1 ;
- if (fontisfixedwidth) {
- HiLightRect(startcol, startrow,
- endcol, endrow, strokeoutline);
- }
- else {
- HiLightRect(startcol, startrow,
- endcol, endrow, strokeoutline);
- /* punt for now */
- }
- }
- else {
- if (startrow < 0) {
- startrow = 0 ;
- startcol = 0 ;
- }
- if (endrow >= LinesPerScreen) {
- endrow = LinesPerScreen - 1 ;
- endcol = screen[endrow]->length ;
- }
- StartHiLighting(strokeoutline);
- for (sp = &lines[startrow+ScrollY], row = startrow;
- row<endrow;
- sp++, row++)
- if (fontisfixedwidth)
- HiLightLine((*sp)->length);
- else {
- (*sp)->body[(*sp)->length] = ' ' ;
- StrHiLightLine((*sp)->body, (*sp)->length + 1);
- }
- if (fontisfixedwidth)
- EndHiLighting(endcol, startcol, startrow);
- else {
- (*sp)->body[(*sp)->length] = ' ' ;
- StrEndHiLighting((*sp)->body, endcol+1,
- lines[startrow+ScrollY]->body,
- startcol, startrow);
- }
- }
- }
-
- Report(startcol, startrow, endcol, endrow)
- int startcol, startrow, endcol, endrow;
- {
- int row, col, selection_length, extra;
- struct line **sp;
-
- selection_length = 0 ;
-
- StartSavingSelection();
- if (RectSelection) {
- RePaintHiLight();
- if (startrow>endrow) {
- row = startrow ;
- startrow = endrow ;
- endrow = row ;
- }
- if (startcol>endcol) {
- col = startcol ;
- startcol = endcol ;
- endcol = col ;
- }
- for (sp = &lines[startrow];
- startrow<=endrow;
- startrow++, sp++) {
- selection_length += endrow - startrow + 1 ;
- if (selection_length > SelectionThreshold) {
- bugprintf("Selection truncated. Max %d chars",
- SelectionThreshold, 0, 0);
- break;
- }
- if ((*sp)->length < startcol) {
- SaveSelectionPiece(spaces, endcol-startcol+1);
- }
- else if ((*sp)->length < endcol) {
- SaveSelectionPiece(&((*sp)->body[startcol]),
- (*sp)->length - startcol);
- SaveSelectionPiece(spaces,
- endcol - (*sp)->length + 1);
- }
- else {
- SaveSelectionPiece(&((*sp)->body[startcol]),
- endcol - startcol + 1);
- }
- SaveSelectionPiece("\r", 1);
- }
- }
- else {
- sp = &lines[startrow] ;
- if (startrow == endrow) {
- if (endcol >= (*sp)->length)
- extra = 0 ;
- else extra = 1 ;
- if ((*sp)->buffer_length > 0)
- SaveSelectionPiece(&((*sp)->body[startcol]),
- endcol - startcol + extra);
- (*sp)->changeposition = 0 ;
- (*sp)->end_of_changes = CharsPerLine ;
- if ((*sp)->buffer_length > 0)
- for (; startcol<=endcol; startcol++)
- (*sp)->prop[startcol] |= PrimSelMode ;
- }
- else {
- selection_length = (*sp)->length - startcol + 1 ;
- SaveSelectionPiece(&((*sp)->body[startcol]),
- (*sp)->length - startcol);
- if ((((*sp)->flags) & LINE_WRAPPED) == 0)
- SaveSelectionPiece("\r", 1);
- (*sp)->changeposition = 0 ;
- (*sp)->end_of_changes = CharsPerLine ;
- if ((*sp)->buffer_length > 0)
- for (; startcol<=(*sp)->length; startcol++)
- (*sp)->prop[startcol] |= PrimSelMode ;
- for (sp++, startrow++;
- startrow<endrow;
- sp++, startrow++) {
- selection_length += (*sp)->length + 1 ;
- if (selection_length > SelectionThreshold) {
- break;
- }
- if ((*sp)->buffer_length > 0)
- SaveSelectionPiece((*sp)->body,
- (*sp)->length);
- if ((((*sp)->flags) & LINE_WRAPPED) == 0)
- SaveSelectionPiece("\r", 1);
- (*sp)->changeposition = 0 ;
- (*sp)->end_of_changes = CharsPerLine ;
- if ((*sp)->buffer_length > 0)
- for (startcol=0;
- startcol<=(*sp)->length;
- startcol++)
- (*sp)->prop[startcol] |=
- PrimSelMode ;
- }
- selection_length += (endcol >= (*sp)->length) ?
- (*sp)->length+1 : endcol+1;
- if ((*sp)->buffer_length > 0)
- SaveSelectionPiece((*sp)->body,
- (endcol >= (*sp)->length) ?
- (*sp)->length : endcol+1);
- if (selection_length > SelectionThreshold) {
- bugprintf("Selection truncated. Max %d chars",
- SelectionThreshold, 0, 0);
- }
- else {
- (*sp)->changeposition = 0 ;
- (*sp)->end_of_changes = CharsPerLine ;
- if ((*sp)->buffer_length > 0)
- for (startcol=0;
- startcol<=((endcol >=
- (*sp)->length) ?
- (*sp)->length :
- endcol);
- startcol++)
- (*sp)->prop[startcol] |=
- PrimSelMode ;
- }
- }
- if (endcol>=(*sp)->length)
- SaveSelectionPiece("\r", 1);
- }
- FinishSavingSelection();
- TakeDownOutline();
- }
-
- DeSelect()
- {
- int row, col, endrow;
-
- if (ValidSelectionRange == 0) return;
- if (RectSelection) {
- RePaintHiLight();
- }
- else {
- if (FixedRow > FloatRow) {
- row = FloatRow;
- endrow = FixedRow;
- }
- else {
- row = FixedRow;
- endrow = FloatRow;
- }
- for (; row<=endrow; row++) {
- lines[row]->changeposition = 0 ;
- lines[row]->end_of_changes = CharsPerLine;
- if (lines[row]->buffer_length > 0)
- for(col=0; col<lines[row]->length+1; col++)
- lines[row]->prop[col] &= ~PrimSelMode ;
- }
- }
- ClearSelectionPath();
- }
-
- /* --------------- External Routines Below ------------------- */
- tc_init_selection()
- {
- int i;
- char *s;
-
- for (i=0, s=spaces; i<MaxCharsPerLine; i++, s++)
- *s = ' ' ;
- }
- /*ARGSUSED*/
- tc_extend_selection(col, row, rank, rect)
- int col, row, rank, rect;
- {
- if (rect)
- RectSelection = 1 ;
- ExtendTo(col, row + ScrollY, 1);
- ValidSelectionRange = 1 ;
- Selecting = 1 ;
- }
- /*ARGSUSED*/
- tc_report_selection(rank)
- int rank;
- {
- if (Selecting) {
- ReportSelection();
- Selecting = 0 ;
- }
- }
- /*ARGSUSED*/
- tc_deselect(rank)
- int rank;
- {
- if (!Selecting) {
- DeSelect();
- ValidSelectionRange = 0 ;
- RectSelection = 0 ;
- }
- }
-
- tc_take_down_selection()
- {
- if (!Selecting && ValidSelectionRange && RectSelection) {
- RePaintHiLight();
- }
- }
-
- tc_refresh_selection()
- {
- ClearSelectionPath();
- if (!Selecting && ValidSelectionRange && RectSelection) {
- ExtendTo(FloatCol, FloatRow, 0);
- FixedPointSet = 0 ;
- RePaintHiLight();
- }
- }
- @@@ Fin de selection.c
- echo sys5.c
- cat >sys5.c <<'@@@ Fin de sys5.c'
- /*
- * This file is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part.
- * Users may copy, modify or distribute this file at will.
- *
- * THIS FILE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * This file is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS FILE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even
- * if Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- *
- * Modifications to the original Sun Microsystems, Inc. source code
- * made by the Grasshopper Group are in the Public Domain.
- *
- * Extensions to this file by Eric Messick of the Grasshopper Group.
- *
- * Grasshopper Group
- * 212 Clayton St
- * San Francisco, CA 94117
- *
- */
-
- #ifndef lint
- static char sccsid[] = "@(#)sys5.c 9.6 88/01/19 SMI";
- static char RCSid[] =
- "@(#)$Header: sys5.c,v 2.1 88/10/04 05:59:56 gnu Release $";
- #endif
-
- /*
- * Copyright (c) 1987 by Sun Microsystems, Inc.
- */
-
- #ifdef REF
- #include <ref/config.h>
- #endif
-
- /*
- * System V Support Routines.
- */
- #ifdef HAVE_SYSV_TTYS
- #include <sys/types.h>
- #include <fcntl.h>
- #include <sys/ioctl.h>
- #include <sys/termio.h>
- #include <signal.h>
- #include <stdio.h>
-
- static struct termio old_termio, slave_termio, default_termio = {
- BRKINT|IGNPAR|ISTRIP|ICRNL|IXON|IXANY,
- OPOST|ONLCR,
- B9600|CS8|CREAD|HUPCL|CLOCAL,
- ISIG|ICANON|ECHO|ECHOE|ECHOK,
- 0,
- 03,CQUIT,010,025,CEOF,CNUL,0,0
- };
- static int notty = 0;
- extern int CharsPerLine;
- extern int LinesPerScreen;
-
- GetTTYDefaults()
- {
- int fd;
-
- /*
- * Try to copy the termio settings for our controlling terminal for
- * use on the slave pty, but watch out for the case where we were invoked
- * as a background process by a shell that may have subsequently put the
- * control terminal into raw mode (e.g. ksh will do this).
- */
- slave_termio = default_termio; /* assume the worst */
- if ((fd = open("/dev/tty", O_RDWR|O_NDELAY)) >= 0) {
- if (ioctl(fd, TCGETA, &old_termio) == 0) {
- if (old_termio.c_line == default_termio.c_line) {
- if (old_termio.c_lflag & ICANON)
- slave_termio = old_termio;
- else {
- /* if not doing canonical input, we can probably still
- * use the VINTR, VQUIT, VERASE, and VKILL parameters
- */
- slave_termio.c_cc[VINTR] = old_termio.c_cc[VINTR];
- slave_termio.c_cc[VQUIT] = old_termio.c_cc[VQUIT];
- slave_termio.c_cc[VERASE] = old_termio.c_cc[VERASE];
- slave_termio.c_cc[VKILL] = old_termio.c_cc[VKILL];
- }
- }
- }
- close(fd);
- }
- else
- notty = 1;
- }
-
- SetTTYState(fd)
- int fd;
- {
-
- (void) ioctl(fd, TCSETA, &slave_termio);
- {
- char num[16];
- sprintf(num, "%d", LinesPerScreen);
- set_environment_var("LINES",num);
- sprintf(num, "%d", CharsPerLine);
- set_environment_var("COLUMNS", num);
- }
- }
-
- DisAssociateTTY()
- {
-
- }
-
- AssociateTTY()
- {
-
- if (notty)
- setpgrp();
- }
-
- SetupControllingTTY(line)
- char line[];
- {
-
- (void) setpgrp();
- (void) close(open(line, O_RDWR));
- }
-
- #include <utmp.h>
- #ifndef UTMP_FILE
- #define UTMP_FILE "/etc/utmp"
- #endif
- #include <pwd.h>
-
- static int tslot = -1;
-
- addut(uid, line)
- char line[];
- {
- #ifdef UTMP
- struct passwd *pw, *getpwuid();
- int i;
-
- /*
- * Record entry in /etc/utmp if possible.
- */
- tslot = ttyslot();
- #if defined(hpux)
- /*
- * Must create utmp entry before ttyslot will work.
- */
- if (tslot < 0) {
- int fd = open(UTMP_FILE, O_RDWR|O_APPEND);
-
- if (fd > -1) {
- struct utmp utmp;
- memset(&utmp, 0, sizeof (utmp));
- memcpy(utmp.ut_line, &line[5], sizeof (utmp.ut_line));
- utmp.ut_type = USER_PROCESS;
- write(fd, &utmp, sizeof (utmp));
- close(fd);
- tslot = ttyslot(); /* try again */
- }
- }
- #endif /* hpux */
- pw = getpwuid(uid);
- if (tslot > 0 && pw && (i = open(UTMP_FILE, O_RDWR)) >= 0) {
- struct utmp utmp;
- char *cp, *p, *getenv(), *index();
-
- memset(&utmp, 0, sizeof (utmp));
- memcpy(utmp.ut_line, &line[5], sizeof (utmp.ut_line));
- memcpy(utmp.ut_name, pw->pw_name, sizeof (utmp.ut_name));
- memcpy(utmp.ut_id, "NeWS", sizeof (utmp.ut_id));
- utmp.ut_type = USER_PROCESS;
- (void) time(&utmp.ut_time);
- (void) lseek(i, tslot * sizeof (utmp), 0);
- (void) write(i, &utmp, sizeof (utmp));
- (void) close(i);
- }
- #endif /* UTMP */
- }
-
- rmut()
- {
- #ifdef UTMP
- int fd;
-
- if (tslot >= 0 && (fd = open(UTMP_FILE, O_WRONLY)) >= 0) {
- struct utmp utmp;
-
- (void) lseek(fd, tslot * sizeof (utmp), 0);
- (void) read(fd, &utmp, sizeof (utmp));
- utmp.ut_type = DEAD_PROCESS;
- (void) lseek(fd, tslot * sizeof (utmp), 0);
- (void) write(fd, &utmp, sizeof (utmp));
- (void) close(fd);
- }
- #endif
- }
-
- killpg(pgrp, sig)
- {
-
- kill(-pgrp, sig);
- }
- #endif /* HAVE_SYSV_TTYS */
- @@@ Fin de sys5.c
- exit 0
-
-