[alt.sources] video-tape.ps v2.0

jwz@lucid.com (Jamie Zawinski) (03/07/91)

%!PS-Adobe-1
%%Creator: Jamie Zawinski <jwz@lucid.com>
%%Title: video-tape.ps
%%CreationDate: 1-mar-91
%%
%%  PostScript code to generate VHS video cassette labels.  Version 2.0.
%%  Copyright (c) 1991 Jamie Zawinski <jwz@lucid.com>.  Comments welcome.
%%
%%  Permission granted for non-commercial use and distribution so long as
%%  this notice of copyright remains intact.
%%
%%  There are examples of how to use this code at the end of this file.
%%
%%  I find that rubber cement works best for attaching these labels to
%%  video cassettes.  A water-based glue or epoxy will cause the paper
%%  to warp eventually.
%%
%%EndComments

% Set this to any (short) string you like.
/ID (JWZ) def
/side-font   /Helvetica-Bold def
/top-font    /Helvetica-Bold def
/header-font /Helvetica-Bold def
/number-font /Helvetica-Bold def

% swap the values of FG and BG if you want black-on-white.
/FG 1   def
/MG 0.5 def
/BG 0   def

/bdef { bind readonly def } bind readonly def

/box {
  4 2 roll
  newpath moveto
    exch dup 0 rlineto
    exch 0 exch neg rlineto
    neg 0 rlineto
  closepath
} bdef

/rightshow
 {dup stringwidth pop
  neg 0 rmoveto
  show } bdef

/centershow
 {dup stringwidth pop
  2 div neg 0 rmoveto
  show } bdef

/inch { 72 mul } bdef

/internal-draw-side-label {
  gsave
    1 setlinejoin
    MG setgray
    0 0 5.75 inch 0.75 inch  box fill
    0 setgray
    0 0 5.75 inch  0.75 inch  box stroke
    BG setgray
    1 inch -0.1 inch  4.25 inch 0.55 inch box fill
    0.1 inch -0.1 inch  0.25 inch 0.55 inch box fill
    FG setgray
    1 inch -0.1 inch  4.25 inch 0.55 inch box stroke
    0.1 inch -0.1 inch  0.25 inch 0.55 inch box stroke
    gsave
      number-font findfont [21 0 0 18 0 0] makefont setfont
      0.324 inch -0.375 inch moveto
      90 rotate
      dup stringwidth pop /sw exch def
      sw 0.54 inch gt { 0.54 inch sw div 1 scale } if
      centershow
    grestore
} bdef

/draw-side-label {
  gsave
    0 0 moveto
    translate
    internal-draw-side-label
    /names exch def
    /height 0.5 inch names length div def
    side-font findfont [height 0.9 mul 0 0 height 0 0] makefont setfont
    FG setgray
    1.05 inch -0.1 inch height sub moveto
    names {
      dup type /arraytype eq
      { dup 0 get gsave show grestore
	1 get gsave 4.1 inch 0 rmoveto rightshow grestore }
      { gsave show grestore }
      ifelse
      0 height neg rmoveto
    } forall
  grestore
} bdef


/internal-draw-top-label {
  gsave
     1 setlinejoin
     MG setgray
     0 0 3.1 inch 1.75 inch box fill
     0 setgray 
     0 0 3.1 inch 1.75 inch box stroke
     BG setgray 
     0.1 inch  -0.5 inch  2.9 inch  1.15 inch  box fill
     0.1 inch  -0.1 inch  2.9 inch  0.3 inch   box fill
     FG setgray
     0.1 inch  -0.5 inch  2.9 inch  1.15 inch  box stroke
     0.1 inch  -0.1 inch  2.9 inch  0.3 inch   box stroke
     
     header-font findfont [12 0 0 15 0 0] makefont setfont
     0.2 inch -0.3 inch moveto   (Tape )show show
     header-font findfont [8 0 0 15 0 0] makefont setfont
     2.9 inch -0.3 inch moveto   ID rightshow
  grestore
} bdef

/draw-top-label {
  gsave
    0 0 moveto
    translate
    internal-draw-top-label
    /names exch def
    top-font findfont [9 0 0 10 0 0] makefont setfont
    FG setgray
    0.2 inch -0.5 inch 9 dup add sub moveto
    names {
      dup type /arraytype eq
      { dup 0 get gsave show grestore
	1 get gsave 2.7 inch 0 rmoveto rightshow grestore }
      { gsave show grestore }
      ifelse
      0 -9 rmoveto
    } forall
  grestore
} bdef

/flag false def
/count 0 def

/showpage {
  initgraphics
  0 setgray
  8 inch 0.25 inch moveto 90 rotate
  /Helvetica findfont 6 scalefont setfont
  (video-tape.ps, version 2.0 (c) 1991 Jamie Zawinski <jwz@lucid.com>) show
  systemdict begin showpage end
} bdef

/draw-label {
  /names exch def
  /number exch def
  names number 0.5 inch
    flag { 3.58 inch } { 1.02 inch } ifelse
  names number
    flag { 3.63 inch } { 0.5 inch } ifelse
  2.8 inch
  gsave draw-top-label grestore
  gsave draw-side-label grestore
  flag {
    0 3.35 inch translate
    /count count 1 add def
    count 3 eq { showpage /count 0 def } if
  } if
  /flag flag not def
} bdef

%%EndProlog

%% Examples.


(006)	[[(DEFCON-4)				(0)]
	 [(Videodrome)				()]
	 [(An American Werewolf in London)	()]]
draw-label

(008)	[(Birdy)
	 (Rosemary's Baby)
	 (Repo Man)
	 (How the Grinch Stole Christmas)]
draw-label

(023)	[[(The Art of Noise Live)		(0)]
	 [(Duran Duran)				(1117)]
	 [(Depeche Mode Live in Hamburg)	(1880)]
	 [(The The: Infected)			(2548)]
	 [(Sugarcubes Live)			(3487)]
	 [(Siouxsie and the Banshees: Once Upon a Time)	()]]
draw-label

(028)	[[(The Thing)				(0)]
	 [(Attack of the Killer Tomatoes)	(1844)]
	 [(Time Bandits)			(2840)]
	 [(Max Headroom)			(3922)]
	 [()					(4410)]]
draw-label

(057)	[[(Someone to Watch Over Me)		(0:00)]
	 [(The Abyss)				(1:46)]
	 [(Internal Affairs)			(4:11)]
	 [()					(6:04)]]
draw-label

(002)	[(Logan's Run)
	 (The Terminator)
	 (The Hunger)
	 (New Twilight Zone: "Aqua Vita")]
draw-label

(051)	[[(The Blob)				(0)]
	 [(Straight to Hell)			(1653)]
	 [(Legend)				(2679)]
	 [(The Company of Wolves)		(4:29)]]
draw-label

(053)	[[(Tapeheads)				(0)]
	 [(Hellbound: Hellraiser 2)		(1:33)]
	 [(The Kiss)				(3:11)]
	 (Penn and Teller's Cruel Tricks)
	 [(  for Dear Friends)			(4:56)]]
draw-label


%%Trailer
%
% This line must always be at the end of the file to ensure 
% that the last page is forced out even if it's not full.
%
count 0 eq not { showpage } if