leres@ucbarpa.Berkeley.EDU (Craig Leres) (07/10/87)
Last time I did PostScript previewing, I wasn't very happy with the supplied psview script so I did some hacking on it. A context diff between it and the psview that is on the 1.0 beta follows. My version uses psh instead of say, has legal and portrait flags, and allows you to specify multiple input files. But the most important feature as far as previewing goes is that it rereads the input files on a screen redraw. This way, you can make changes to your PostScript source(s) and quickly see them (assuming they are syntactically correct). Craig ------ *** psview Thu Jul 9 20:44:08 1987 --- /usr/NeWS/bin/psview Mon Mar 16 10:10:44 1987 *************** *** 1,7 **** #! /bin/csh -f # - # @(#) $Header: psview,v 1.3 87/07/09 20:43:47 leres Exp $ (LBL) - # # NeWS 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 --- 1,5 ---- *************** *** 44,114 **** # on top of each other. # o NeWS does not support outline fonts, or dash patterns yet. # o Assumes a syntactically valid PostScript file. - # - # Flags: - # - # -p portrait mode - # -l legal size - # - # 26May87: Rewrote to use psh instead of say, to accept multiple file - # arguments and to reread users input files on window refresh. - # Added portrait and legal size flags. -leres - # - # ! top: ! if ($#argv > 0) then ! if ($argv[1] == "-p") then ! set portrait ! shift ! goto top ! endif ! if ($argv[1] == "-l") then ! set legal ! shift ! goto top ! endif ! endif ! ! if ( $#argv < 1 ) then ! echo "usage: $argv[0]:t [-pl] ps_filename ..." exit 1 endif ! set temp=/tmp/psview.$$ ! cat > $temp << 'EOF' ! #! /usr/NeWS/bin/psh % definitions to figure out page aspect ratio /inch { 72 mul } def % LaserWriter PostScript coordinates are % 72 points per inch ! 'EOF' ! ! set page_width=8.5 ! set page_height=11 ! if ($?legal) set page_height=14 ! if ($?portrait) then ! set x=$page_height ! set page_height=$page_width ! set page_width=$x ! endif ! ! echo "/page_width $page_width inch def" >>$temp ! echo "/page_height $page_height inch def" >>$temp ! ! cat >> $temp << 'EOF' /page_aspect page_height page_width div def % page aspect ratio /can_width null def % placeholders so they don't go in window dict /can_height null def - % Load in a file, if it exists. - /LoadFile { - { dup (r) file } stopped not { - cvx exch - pop - exec clear true - } if - } def /PSPaint { % This procedure sets up the canvas to look % like a letter-sized page, --- 42,74 ---- # on top of each other. # o NeWS does not support outline fonts, or dash patterns yet. # o Assumes a syntactically valid PostScript file. ! if ( $#argv > 1) then ! set progname="$0" ! echo "usage: $progname:t PS_filename" ! exit 1 ! else if ( $#argv == 1 ) then ! set inputfile="$argv[1]" ! if ( $inputfile != "-" && ! -r $inputfile ) then ! echo ${inputfile}: No such file or directory exit 1 endif + else + set inputfile="-" + endif ! set temp=/tmp/psview$$ ! cat > $temp << 'EOF' % definitions to figure out page aspect ratio /inch { 72 mul } def % LaserWriter PostScript coordinates are % 72 points per inch ! /page_width 8.5 inch def % letter size; change these for A4 or legal ! /page_height 11 inch def /page_aspect page_height page_width div def % page aspect ratio /can_width null def % placeholders so they don't go in window dict /can_height null def /PSPaint { % This procedure sets up the canvas to look % like a letter-sized page, *************** *** 139,168 **** 0 0 lineto fill % fill page area with white grestore - 'EOF' ! if ($?portrait) then ! echo "0 8.5 inch translate" >>$temp ! echo "-90 rotate" >>$temp ! endif ! loop: ! set arg="$argv[1]" ! set head=$arg:h ! set tail=$arg:t ! if ( $arg == $head ) set head=$cwd ! set file={$head}/{$tail} ! if ( ! -r $file ) then ! echo ${arg}: No such file or directory ! exit 1 ! endif ! echo " ($file) LoadFile pop" >>$temp ! shift ! if ( $#argv > 0 ) goto loop ! ! cat >> $temp << 'EOF' ! } def % end of PSPaint procedure /win { % create a window --- 99,110 ---- 0 0 lineto fill % fill page area with white grestore 'EOF' ! # ??? should the client code also be run in a gsave/grestore??? ! cat $inputfile >> $temp ! cat << 'EOF' >> $temp } def % end of PSPaint procedure /win { % create a window *************** *** 172,178 **** } makewindowfromuser 'EOF' ! chmod u+x $temp ! $temp ! rm $temp ! exit --- 114,118 ---- } makewindowfromuser 'EOF' ! # tell `say` not to make the window itself ! say -P " " -w -W < $temp; rm -f $temp &