#!/bin/bash # # Create a minimalist paper sleeve for protecting a CD. This is ideal # for use where CD storage space is at a premium. Just cut it out and glue # the flaps down. # # It creates a plain text file with a simple format to describe the title, # artist, and track names, then creates an editable artwork file suitable # for printing. If you keep a CD description file, you can re-use it to # re-create the artwork file, with no re-typing. # # Author: Luke Kendall, luke@zeta.org.au # # Feel free to modify this, but it would be nice to send me improvements. # CD_MARKER="#CD-INFO" EDIT=true MAX_TRACKS=26 MYNAME=`basename "$0"` VERSION="1.0" VIEW= prompt_and_read() { printf "$1 (Enter): " > /dev/tty read -r ANSWER [ "x$ANSWER" = "x" ] && return 1 printf "# $1\n" # Escape special characters that would confuse sed: [ / \ & ^ $ . ] printf "$ANSWER\n" | sed 's/[][\/\\&^$.]/\\&/g' return 0 } enter_cd_info() { { printf "$CD_MARKER\n" printf "# $VERSION\n" prompt_and_read "TITLE" prompt_and_read "ARTIST" track=1 while prompt_and_read "TRACK$track" do track=`expr $track + 1` done } >> "$CD" } usage() { echo "$MYNAME creates a minimalist CD Postscript sleeve ready for printing. You cut it out and glue the flaps down to make the most compact CD holder I can imagine, to pack the most CDs into the smallest space. Usage: $MYNAME [-e] [-h] [-v] [CD-desc-file] -e Means *don't* edit the CD-desc-file, just use it. -h Means print this help message. -v Means view the CD sleeve created (needs \`gv' program). CD-desc-file If you provide a filename, it will be used as the description file. If it doesn't exist, you will be prompted you for each piece of information needed: the album title, artist, and then the name of each track. When you've run out of tracks, just hit Enter and it will stop asking for more. There can be a maximum of $MAX_TRACKS tracks on one CD sleeve. " } # # Parse args: CD desc file name # while [ $# != 0 ] do case $1 in -e) EDIT=false ;; -v) VIEW="gv -a4" ;; -h) usage exit 0 ;; *) break ;; esac shift done # Handle filename argument: if [ $# = 0 ] then n=1 while [ -s "CD-desc-$n" ] do n=`expr $n + 1` done CD="CD-desc-$n" else CD="$1" shift fi # # Open old or create new CD desc file # if [ -s "$CD" ] then read -r marker < "$CD" if [ "x$marker" != "x$CD_MARKER" ] then echo "$MYNAME: file $CD isn't a CD description file I understand">&2 exit 1 elif $EDIT then printf "Editing your CD description file $CD (Enter): "; read dummy ${EDITOR:-vi} "$CD" else echo "Using your CD description file $CD" fi else echo "Creating CD description file $CD" enter_cd_info "$CD" echo "Created CD description file $CD" if $EDIT then printf "Editing your CD description file $CD (Enter): "; read dummy ${EDITOR:-vi} "$CD" fi fi # # From CD desc file, create edit script. # It will look like: # s/TITLE/Good Listening 27/ # s/ARTIST/My Garage Band/ # s/\(1.\) TRACK1\>/\1 Inspiring Song Title 1/ # s/\(2.\) TRACK2\>/\1 Another Inspiring Song Title/ # ... # s/\(21.\) TRACK21\// # COMMENT= LABEL= track= while read -r line do COMMENT=`expr "$line" : "# *\(.*\)"` if [ "x$COMMENT" != "x" ] then LABEL="$COMMENT" continue else track=`expr "$LABEL" : "TRACK\([1-9][0-9]*\)"` if [ "x$track" = "x" ] then printf "s/$LABEL\\>/$line/\n" else printf "s/\\($track\\.\\) $LABEL\\>/\\\\1 $line/\n" fi fi done < "$CD" > /tmp/cdsed$$ while [ $track -lt $MAX_TRACKS ] do track=`expr $track + 1` printf "s/$track\\. TRACK$track\\>//\n" done >> /tmp/cdsed$$ # # Run edit script to generate artwork file. # Embed the PS file here so it can't get lost. # Note that this is the simple and powerful idraw program's save file, # an actual Postscript file, so you can edit it afterwards! # sed -f /tmp/cdsed$$ <<'EOPS' > "$CD.ps" %!PS-Adobe-2.0 EPSF-1.2 %%Creator: idraw %%DocumentFonts: Helvetica Times-Roman %%Pages: 1 %%BoundingBox: 60 60 490 772 %%EndComments %%BeginIdrawPrologue /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def %%EndIdrawPrologue /arrowHeight 11 def /arrowWidth 6 def /IdrawDict 52 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Helvetica reencodeISO def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc closepath patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 /FontBBox load 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %%EndProlog %I Idraw 13 Grid 105.593 -79.0951 %%Page: 1 1 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.716604 0 0 0.716604 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 330 1058 ] concat %I [ (TITLE) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 319 1019 ] concat %I [ (ARTIST) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 979 ] concat %I [ ( 1. TRACK1) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 964 ] concat %I [ ( 2. TRACK2) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 949 ] concat %I [ ( 3. TRACK3) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 934 ] concat %I [ ( 4. TRACK4) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 919 ] concat %I [ ( 5. TRACK5) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 904 ] concat %I [ ( 6. TRACK6) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 889 ] concat %I [ ( 7. TRACK7) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 874 ] concat %I [ ( 8. TRACK8) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 859 ] concat %I [ ( 9. TRACK9) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 844 ] concat %I [ (10. TRACK10) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 829 ] concat %I [ (11. TRACK11) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 814 ] concat %I [ (12. TRACK12) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 799 ] concat %I [ (13. TRACK13) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 784 ] concat %I [ (14. TRACK14) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 769 ] concat %I [ (15. TRACK15) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 754 ] concat %I [ (16. TRACK16) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 739 ] concat %I [ (17. TRACK17) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 724 ] concat %I [ (18. TRACK18) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 709 ] concat %I [ (19. TRACK19) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 694 ] concat %I [ (20. TRACK20) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Poly %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.76517 0 0 1.56795 -95.1694 528.484 ] concat %I 4 412 349 412 37 441 48 441 338 4 Poly End Begin %I Poly %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ -1.76517 -0 0 1.56795 863.77 528.186 ] concat %I 4 412 349 412 37 441 48 441 338 4 Poly End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.4319 0 0 1.62998 57.8016 -13.6807 ] concat %I 55 368 401 669 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.43197 0 0 1.66338 57.7303 -526.707 ] concat %I 55 368 401 669 Rect End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 679 ] concat %I [ (26. TRACK26) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 664 ] concat %I [ (25. TRACK25) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 649 ] concat %I [ (24. TRACK24) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 634 ] concat %I [ (23. TRACK23) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 619 ] concat %I [ (22. TRACK22) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 191 604 ] concat %I [ (21. TRACK21) ] Text End End %I eop showpage %%Trailer end EOPS # # Tidy up and final info to the user. # [ $? != 0 ] && exit 1 rm -f /tmp/cdsed$$ echo "Created $CD.ps" echo "You can alter the artwork with the \`idraw' program: idraw $CD.ps" echo " (Hint: use \`Move' mode to move things, \`Alter' mode to edit text.)" if [ ! -z "$VIEW" ] then $VIEW "$CD.ps" else echo "You can view and print that with the \`gv' program: gv -a4 $CD.ps" fi