Well, the response to this has been overwhelming... After my post
yesterday morning, I've gotten thirty requests for it...
So here it is. Let me know what you think, and send me any improvements
you make, and any graphic band-names that you integrate into it.
---------------------------- audio-tape.ps ----------------------------
%!
%%%% postscript code to generate audio-tape labels. Version 1.1.
%%%%
%%%%
%%%% Permission granted for non-commercial use and distribution
%%%% so long as this notice of copyright remains intact. (fnord)
%% There are a few examples at the end of this file; print this for a
%% representative selection of what this code can do. Search for the
%% string "example" to see how to do it.
%%
%% Syntax:
%%
%% For a tape label with one album on each side, both albums by the
%% same band, do this:
%%
%% (Band Name) (Album 1 Name) (Album 1 Date)
%% (Album 2 Name) (Album 2 Date)
%% [ <...album 1 songs....> ] [ <...album 2 songs....> ]
%% two-albums
%%
%% For a tape label with one album on each side, both albums by
%% different bands, do this:
%%
%% (Band 1 Name) (Album 1 Name) (Album 1 Date)
%% [ <...album 1 songs....> ]
%% (Band 2 Name) (Album 2 Name) (Album 2 Date)
%% [ <...album 2 songs....> ]
%% two-bands
%%
%% For a tape label with one double album consuming both sides,
%% do this:
%%
%% (Band Name) (Album Name) (Album Date)
%% [ <...songs, side 1....> ]
%% [ <...songs, side 2....> ]
%% double-album
%%
%% For a tape label with three or four albums/EPs by the same band,
%% do this:
%%
%% (Band Name) (Album 1.1 Name) (Album 1.2 Name) (Album 1.* Date)
%% (Album 2.1 Name) (Album 2.2 Name) (Album 2.* Date)
%% [ <...songs, side 1....> ]
%% [ <...songs, side 2....> ]
%% N-albums
%%
%% (Either of the strings (Album 1.2 Name) or (Album 1.2 Name) may be
%% an empty string; things will be positioned appropriately.)
%%
%% For a tape label with three or four albums/EPs by two different bands,
%% do this:
%%
%% (Band 1 Name) (Album 1.1 Name) (Album 1.2 Name) (Album 1.* Date)
%% [ <...songs, side 1...> ]
%% (Band 2 Name) (Album 2.1 Name) (Album 2.2 Name) (Album 2.* Date)
%% [ <...songs, side 2...> ]
%% two-bands-N-albums
%%
%%
%% In the above, [ <songs> ] is of the form
%%
%% [[ (song 1) (song 1 time) ] that is, an array of arrays, where
%% [ (song 2) (song 2 time) ] each sub-array holds exactly two
%% ... strings. The first string is the
%% [ (song N) (song N time) ]] name of a song, and the second string
%% is the start-time, length, counter,
%% or whatever of the song. The song name is printed flushleft, and the
%% song time is printed flushright.
%%
%% The labels are printed two-per-page. You do not need to insert "showpage"s
%% in this file; that happens automagically.
%%
%% The band-names and album-names are printed on the spine of the label.
%% For the one-band-on-both-sides cases, the band-name is printed tall enough
%% to fill the label. For the two-band cases, the band names are printed one
%% atop the other. Album names are scaled so that all album names fit on
%% one atop the other on the spine.
%%
%% In all cases (spine, song lists, etc) it is not possible for a string to
%% be "too long" - font-widths are scaled so that the strings fit in the
%% available space (taking into account adjascent strings of the same height;
%% strings stacked above/next to each other are scaled as a unit. You'll
%% see what I mean.)
%%
%% Songs are printed in two columns on the back of the tape label. The name
%% of the album is printed above the song lists. When there are more than
%% two albums on a tape, only the names of albums 1.1 and 2.1 are printed
%% on the inside, though all three or four appear on the spine. This is
%% sub-optimal.
%%
%% It is possible to include arbitrary graphics in place of the band-name
%% on the spine, to duplicate a band's preferred icon, or whatever.
%% Simply define a procedure for drawing the graphic, and index it in
%% "magic-name-dict" under the string which is the band's name. There
%% are some fairly sophisticated examples of this in this file. If you
%% define any more, send them to me and I'll include them here (whether I
%% like the band or not :-)).
%%
%% One problem I encountered with this code was that my co-worker's tapes
%% looked just like mine... I got around this by adding the parameter
%% /signature - set this to a string of your name or something, and it
%% will be printed on the back-spine of all of your labels.
%%
%% The fonts of various things can also be easily tweaked.
%%
%% Questions? Comments? Suggestions? Improvements? Send them to me at the
%% above addresses. "Please, no applause, just throw money."
%%
%% Enjoy...
/box {
/h exch def /w exch def
/y exch def /x exch def
newpath
x y moveto w 0 rlineto
0 h neg rlineto w neg 0 rlineto
closepath
Quote:
} def
/rightshow
{dup stringwidth pop
neg 0 rmoveto
show } def
/centershow
{dup stringwidth pop
2 div neg 0 rmoveto
show } def
/max {
/a exch def /b exch def
a b gt { a } { b } ifelse
} def
/max-stringwidth {
/stringb exch def
/stringa exch def
stringa stringwidth pop
stringb stringwidth pop
max
} def
%% Default font-names and sizes. The sizes are stomped at runtime, but the
%% names are the responsibility of the user.
%%
/song-font /Helvetica def
/song-font-height 8 def
/band-font /Helvetica def
/band-font-height 13 def
/album-font /Helvetica def
/album-font-height 13 def
/inner-album-font /Helvetica-Bold def
/inner-album-font-height 13 def
/date-font /Helvetica-Bold def
/date-font-height 8 def
/songs-go-inside false def % if true, songs go inside the tape label, else outside.
/margins 4 def
/back-spine-height 40 def
/spine-height 32 def
/list-height 185 def
/total-height margins back-spine-height add
margins spine-height add add
margins list-height add 2 mul add
margins add
def
/inner-width 280 def
/total-width inner-width margins dup add add def
/print-one-column { % write one column of the song listings
/songs exch def
/h exch def /w exch def
/y exch def /x exch def
gsave
/w w 10 sub def
/x x 5 add def
/y y inner-album-font-height sub def
x y translate
0 0 w h box clip
/x 0 def
/x2 x w add 5 sub def
/y song-font-height neg def
songs { x y moveto
dup
0 get show
x2 y moveto
1 get rightshow
/y y song-font-height sub 1 sub def
} forall
grestore
} def
/print-songs { % write out both columns of the song listings
/left exch def
gsave
/y back-spine-height spine-height add
margins 3 mul add
neg def
/w inner-width 2 div def
/h list-height inner-album-font-height sub date-font-height sub margins 2 mul sub def
songs-go-inside { /y y list-height margins add sub def } if
1 left eq
{ /x 10 def
/songs songs1 def }
{ /x w 10 add def
/songs songs2 def }
ifelse
x y w h songs print-one-column
grestore
} def
/set-songfont { % compute width of font for song listings.
/font song-font findfont song-font-height scalefont def
font setfont
/maxw 0 def
songs1 { /song exch def
song 0 get stringwidth pop
song 1 get stringwidth pop add
maxw max
/maxw exch def
} forall
songs2 { /song exch def
song 0 get stringwidth pop
song 1 get stringwidth pop add
maxw max
/maxw exch def
} forall
/w inner-width 2 div 5 sub 15 sub def
maxw w gt
{ font [ w maxw div 0 0 1 0 0 ] makefont setfont }
if
} def
/print-two-inner-album-titles { % write the album titles above the song listings
gsave
/x 10 def
/y back-spine-height spine-height add
margins 3 mul add
neg def
/w inner-width 2 div 10 sub def
/x2 w 20 add def
songs-go-inside { /y y list-height margins add sub def } if
/font inner-album-font findfont inner-album-font-height scalefont def
font setfont
/maxw albumname1 albumname2 max-stringwidth def
maxw w gt
{ font [ w maxw div 0 0 1 0 0 ] makefont setfont }
if
gsave
x y w inner-album-font-height box clip
newpath
x y inner-album-font-height sub 2 add moveto
albumname1 show
0 -2 rmoveto
x y inner-album-font-height sub lineto stroke % underline it.
grestore
gsave
x2 y w inner-album-font-height box clip
newpath
x2 y inner-album-font-height sub 2 add moveto
albumname2 show
0 -2 rmoveto
x y inner-album-font-height sub lineto stroke % underline it.
grestore
grestore
} def
/print-one-inner-album-title { % write the album title centered above the song listings
gsave
/x 10 def
/y back-spine-height spine-height add
margins 3 mul add
neg def
/w inner-width def
songs-go-inside { /y y list-height margins add sub def } if
/font inner-album-font findfont inner-album-font-height scalefont def
font setfont
/maxw albumname1 stringwidth def
maxw w gt
{ font [ w maxw div 0 0 1 0 0 ] makefont setfont }
if
gsave
x y w inner-album-font-height box clip
newpath
x w 2 div add y inner-album-font-height sub 2 add moveto
albumname1 centershow
newpath
x y inner-album-font-height sub moveto
w 10 sub 0 rlineto stroke
grestore
grestore
} def
/print-inner-album-titles {
double-album-p
{ print-one-inner-album-title }
{ print-two-inner-album-titles }
ifelse
Quote:
} def
/print-one-date { % write a date centered below the song listings
gsave
/x 10 def
/y back-spine-height spine-height add
list-height add
margins 2 mul add
inner-album-font-height sub
neg def
/w inner-width def
songs-go-inside { /y y list-height margins add sub def } if
date-font findfont date-font-height scalefont setfont
x y w inner-album-font-height box clip
newpath
x w 2 div add y inner-album-font-height sub 2 add moveto
date1 centershow
grestore
} def
/print-two-dates { % write the dates below the song listings
gsave
/x 25 def
/y back-spine-height spine-height add
list-height add
margins 2 mul add
inner-album-font-height sub
neg def
/w inner-width 2 div def
/x2 w 25 add def
songs-go-inside { /y y list-height margins add sub def } if
date-font findfont date-font-height scalefont setfont
gsave
x y w inner-album-font-height box clip
newpath
x y inner-album-font-height sub 2 add moveto
date1 show
grestore
gsave
x2 y w inner-album-font-height box clip
newpath
x2 y inner-album-font-height sub 2 add moveto
date2 show
grestore
grestore
} def
/print-dates {
double-album-p
{ print-one-date }
{ print-two-dates }
ifelse
Quote:
} def
/draw-spine { % draw the spine of the tape (upside-down)
gsave
margins margins margins add back-spine-height add neg translate
180 rotate
inner-width neg spine-height translate
0 0 inner-width spine-height box stroke % the box around the spine
0 0 inner-width spine-height box clip
() bandname1 eq () bandname2 eq and % If both albumnames are empty strings, then /allowable-width is *2.
{ /allowable-width inner-width 12 sub def }
{ /allowable-width inner-width 2 div 12 sub def }
ifelse
/long-name-hack-p false def
magic-name-p
{ 2 spine-height 2 sub neg spine-height magic }
{ /font band-font findfont band-font-height scalefont def
font setfont
/maxw bandname1 bandname2 max-stringwidth def
album-font-height band-font-height eq % if both fonts are the same height
{ /maxw maxw % then maxw is sum of width of largest two strings, and
albumname1 albumname2 max-stringwidth % allowable-width is doubled.
albumname3 albumname4 max-stringwidth
max add 20 add def
/allowable-width inner-width 12 sub def
/long-name-hack-p true def
}
if
maxw allowable-width gt
{ font [ allowable-width maxw div 0 0 1 0 0 ] makefont setfont }
if
5 band-font-height neg moveto
bandname1 show
5 band-font-height neg dup add moveto
bandname2 show
}
ifelse
long-name-hack-p not
{ /font album-font findfont album-font-height scalefont def
font setfont
/maxw
albumname1 albumname2 max-stringwidth
albumname3 albumname4 max-stringwidth
max def
maxw allowable-width gt { font [ allowable-width maxw div 0 0 1 0 0 ] makefont setfont } if
} if
/albx inner-width 5 sub def
/alby album-font-height neg def
albumname1 () eq not
{ albx alby moveto albumname1 rightshow
/alby alby album-font-height sub def }
if
albumname3 () eq not
{ albx alby moveto albumname3 rightshow
/alby alby album-font-height sub def }
if
albumname2 () eq not
{ albx alby moveto albumname2 rightshow
/alby alby album-font-height sub def }
if
albumname4 () eq not
{ albx alby moveto albumname4 rightshow
/alby alby album-font-height sub def }
if
grestore
Quote:
} def
/draw-back-spine { % draw the short flap on the back.
/x margins def
/y margins neg def
/w inner-width def
/h back-spine-height def
gsave
x y w h box stroke
x y w h box clip
x w add y h add neg translate
180 rotate
song-font findfont song-font-height scalefont setfont
margins h margins 3 mul sub neg moveto
signature show
grestore
} def
/reset { % resets all the strings to be empty.
/signature () def
/bandname1 () def
/bandname2 () def
/albumname1 () def
/albumname2 () def
/albumname3 () def
/albumname4 () def
/date1 () def
/date2 () def
/magic-name-p false def
/double-album-p false def
} def
reset % do it now to give them their initial values.
/draw-tape-label { % draw one. Assumes all variables have been filled in.
% Takes X and Y on the stack.
/y exch def
/x exch def
gsave
90 rotate
x y translate
0 0 total-width total-height box stroke
margins total-height neg
list-height 2 mul add
margins 2 mul add
inner-width list-height box stroke % draw a box around the back.
margins total-height neg
list-height add
margins add
inner-width list-height box stroke % draw a box around the listings.
draw-back-spine
draw-spine
print-inner-album-titles
set-songfont
0 print-songs
1 print-songs
print-dates
0 0 total-width total-height box % draw the outermost box.
grestore
reset
} def
% A dictionary for storing magic band-name-rendering functions.
%
/magic-name-dict 200 dict def
% Invoke the magic band-name-rendering function for the current band.
%
/magic { magic-name-dict bandname1 get exec } def
% Decide whether this band has a magic rendering function.
%
/check-magic {
/magic-name-p magic-name-dict bandname1 known def
Quote:
} def
/tick false def % Currently on the left side of page or right.
% Controls showpages and positioning.
/dump-internal { % toss one puppy out.
tick { 360 } { 50 } ifelse -100 draw-tape-label
tick { showpage } if
/tick tick not def
reset
Quote:
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%% %%%%%%%%
%%%%%%% The user-level functions. %%%%%%%%
%%%%%%% %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/two-albums { % arguments: bandname album1 date1 album2 date2 songs1 songs2
/songs2 exch def
/songs1 exch def
/date2 exch def
/albumname2 exch def
/date1 exch def
/albumname1 exch def
/bandname1 exch def
/band-font-height 20 def
/album-font-height 13 def
check-magic
dump-internal
Quote:
} def
/two-bands { % arguments: bandname1 album1 date1 songs1 bandname2 album2 date2 songs2
/songs2 exch def
/date2 exch def
/albumname2 exch def
/bandname2 exch def
/songs1 exch def
/date1 exch def
/albumname1 exch def
/bandname1 exch def
/band-font-height 13 def
/album-font-height 13 def
/magic-name-p false def
dump-internal
Quote:
} def
/double-album { % arguments: bandname album date songs1 songs2
/songs2 exch def
/songs1 exch def
/date1 exch def
/albumname1 exch def
/bandname1 exch def
/band-font-height 20 def
/album-font-height 20 def
/double-album-p true def
check-magic
dump-internal
Quote:
} def
/N-albums { % arguments: bandname album1.1 album1.2 date1 album2.1 album2.2 date2 songs1 songs2
/songs2 exch def
/songs1 exch def
/date2 exch def
/albumname4 exch def
/albumname2 exch def
/date1 exch def
/albumname3 exch def
/albumname1 exch def
/bandname1 exch def
/band-font-height 20 def
() albumname3 eq () albumname4 eq and
{ /album-font-height 13 def }
{ () albumname3 eq () albumname4 eq or
{ /album-font-height 10 def }
{ /album-font-height 7 def }
ifelse }
ifelse
check-magic
dump-internal
Quote:
} def
/two-bands-N-albums { % arguments: band1 album1.1 album1.2 date1 songs1 band2 album2.1 album2.2 date2 songs2
/songs2 exch def
/date2 exch def
/albumname4 exch def
/albumname2 exch def
/bandname2 exch def
/songs1 exch def
/date1 exch def
/albumname3 exch def
/albumname1 exch def
/bandname1 exch def
/band-font-height 13 def
() albumname3 eq () albumname4 eq and
{ /album-font-height 13 def }
{ () albumname3 eq () albumname4 eq or
{ /album-font-height 10 def }
{ /album-font-height 7 def }
ifelse }
ifelse
/magic-name-p false def
dump-internal
Quote:
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%% %%%%%%%%
%%%%%%% The Magic-Name Printers. %%%%%%%%
%%%%%%% %%%%%%%%
%%%%%%% These routines will be automatically invoked to %%%%%%%%
%%%%%%% draw certain band-names, so that you can have %%%%%%%%
%%%%%%% really hi-tech tape-labels. Add more! %%%%%%%%
%%%%%%% %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Draw "Front 242" as a long, thin "front" over a long, tall "242".
%%%
magic-name-dict (Front 242)
{
/sc exch def
/y exch def
/x exch def
gsave
x y translate
sc sc scale
/Helvetica-Bold findfont [ 1.35 0 0 0.4 0 0 ] makefont setfont
0 0.58 moveto
(FRONT) show
/Helvetica-Bold findfont [ 2.85 0 0 0.7 0 0 ] makefont setfont
0 0 moveto (242) show
grestore
}
put
%%% Draw "Orchestral Manoeuveres in the Dark" on two lines; use the
%%% "oe" character.
%%%
magic-name-dict (Orchestral Manoeuveres in the Dark)
{
/sc exch def
/y exch def
/x exch def
gsave
x y translate
sc 0.7 mul sc scale
/Helvetica-Bold findfont [0.45 0 0 0.65 0 0] makefont setfont
0.1 0.35 moveto
(ORCHESTRAL MAN\352UVRES) show
/Helvetica findfont [1 0 0 0.3 0 0] makefont setfont
0.1 0.05 moveto
(IN THE DARK) show
grestore
}
put
%%% Draw "OMD" in the same way as "Orchestral Manoeuveres in the Dark".
%%%
magic-name-dict (OMD)
magic-name-dict (Orchestral Manoeuveres in the Dark) get
put
%%% Draw "New Order" as a dark "New" over an outlined "Order", staggered.
%%%
magic-name-dict (New Order)
{
/sc exch def
/y exch def
/x exch def
gsave
x y translate
sc sc scale
0.02 setlinewidth
1.5 setmiterlimit
/Helvetica-Bold findfont setfont
0 0.1 moveto
(Order) true charpath stroke
1.57 0.1 moveto
(new) show
grestore
}
put
%%% Draw "Siouxsie and the Banshees" with varying-height letters,
%%% like on the early albums.
%%%
magic-name-dict (Siouxsie and the Banshees)
{
/sc exch def
/y exch def
/x exch def
gsave
x y translate
sc sc scale
0.7 0.4 scale
0.1 0.25 translate
/big-font /Helvetica findfont [ 0.5 0 0 2.2 0 0 ] makefont def
/med-font /Helvetica findfont [ 0.5 0 0 1.1 0 0 ] makefont def
/small-font /Helvetica findfont [ 0.5 0 0 1.5 0 0 ] makefont def
0 -0.1 5.9 -1.8 box clip
0 0 moveto
big-font setfont (SI) show
0 0.8 rmoveto
small-font setfont (o) show
0 -0.8 rmoveto
big-font setfont (UXSIE) show
med-font setfont
currentpoint /y exch def /x exch def
.07 0.85 rmoveto
(and) show x y moveto (THE) show
big-font setfont (BANSHE) show
0 0.8 rmoveto
small-font setfont (e) show
0 -0.8 rmoveto
big-font setfont (S) show
grestore
}
put
%%% Draw "Cabaret Voltaire" in their font. I should probably have
%%% implemented this as a font, instead of as a set of procedures,
%%% but life's too short.
%%%
magic-name-dict (Cabaret Voltaire)
{
/sc exch def /y exch def /x exch def
gsave
x y translate
/sc sc 0.5 mul def
sc sc scale
1.8 setmiterlimit 0.1 setlinewidth
0.2 0.3 moveto cabaret-c 0.5 0 rmoveto cabaret-a
0.7 0 rmoveto cabaret-b 0.6 0 rmoveto cabaret-a
0.7 0 rmoveto cabaret-R 0.6 0 rmoveto cabaret-e
0.4 0 rmoveto cabaret-T 1.0 0 rmoveto cabaret-v
0.6 0 rmoveto cabaret-o 0.7 0 rmoveto cabaret-L
0.6 0 rmoveto cabaret-t 0.4 0 rmoveto cabaret-A
0.45 0 rmoveto cabaret-I 0.45 0 rmoveto cabaret-r
0.5 0 rmoveto cabaret-e
grestore
}
put
%% Internal procedures to the "Cabaret Voltaire" printer.
%%
/cabaret-c { gsave currentpoint translate newpath 0.5 0.25 moveto 0.25 0 lineto
0 0.5 lineto 0.25 1 lineto 0.5 0.75 lineto stroke grestore } def
/cabaret-a { gsave currentpoint translate newpath 0.25 0.75 moveto 0.5 1 lineto
0.5 0 lineto 0 0.5 lineto 0.5 0.5 lineto stroke grestore } def
/cabaret-b { gsave currentpoint translate newpath 0 1 moveto 0 0 lineto
0.5 0.5 lineto 0 0.5 lineto stroke grestore } def
/cabaret-R { gsave currentpoint translate newpath 0 0 moveto 0 1 lineto 0.5 0.5
lineto 0 0.5 lineto 0.25 0.5 moveto 0.5 0 lineto stroke grestore } def
/cabaret-e { gsave currentpoint translate newpath 0.375 0.25 moveto
0.25 0 lineto 0 0.5 lineto 0.25 1 lineto 0.5 0.5 lineto 0 0.5 lineto stroke
grestore } def
/cabaret-T { gsave currentpoint translate newpath 0 1 moveto 0.5 1 lineto
0.25 1 moveto 0.25 0 lineto stroke grestore } def
/cabaret-v { gsave currentpoint translate newpath
0 1 moveto 0.25 0 lineto 0.5 1 lineto stroke grestore } def
/cabaret-o { gsave currentpoint translate newpath 0.25 1 moveto 0.5 0.5 lineto
0.25 0 lineto 0 0.5 lineto closepath stroke grestore } def
/cabaret-L { gsave currentpoint translate newpath 0 1 moveto
0 0.10 lineto 0.5 0.10 lineto stroke grestore } def
/cabaret-t { gsave currentpoint translate newpath 0 1 moveto
0 0 lineto 0.275 0.25 lineto stroke 0 0.75 moveto 0.25 0.75 lineto stroke
grestore } def
/cabaret-A { gsave currentpoint translate newpath 0 0 moveto 0.25 1 lineto
0.5 0 lineto stroke 0.125 0.5 moveto 0.375 0.5 lineto stroke grestore } def
/cabaret-I { gsave currentpoint translate newpath 0.25 0 moveto 0.25 1 lineto
stroke grestore } def
/cabaret-r { gsave currentpoint translate newpath 0 0 moveto 0 1 lineto stroke
0 0.75 moveto 0.25 1 lineto 0.5 0.75 lineto stroke grestore } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%% %%%%%%%%
%%%%%%% Begin Example-Land. %%%%%%%%
%%%%%%% %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Set this string to what you want printed on the back flap.
%%
/signature (From the Jamie Zawinski Collection of Fine Tapes) def
/band-font /Helvetica def % The font for band-names.
/album-font /Helvetica def % The font for album-names.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% An example of the normal case: two albums by one band, %%%%%%%%
%%%%%% with one album on each side of the tape. %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(Gang of 4) (Entertainment) (1979)
(Solid Gold) (1981)
[[(Ether) ()]
[(Natural's not in it) ()]
[(Not Great Men) ()]
[(Damaged Goods) ()]
[(Return the Gift) ()]
[(Guns before Butter) ()]
[() ()]
[(I Found that Essence Rare) ()]
[(Glass) ()]
[(Contract) ()]
[(At Home He's a Tourist) ()]
[(5:45) ()]
[(Anthrax) ()]
[() ()]
[(To Hell With Poverty) ()]
[(Capital it Fails Us Now) ()]
]
[[(Paralysed) ()]
[(What we All Want) ()]
[(Why Theory) ()]
[(If I could keep it for myself) ()]
[(Outside the trains don't run on time) ()]
[() ()]
[(Cheeseburger) ()]
[(The Republic) ()]
[(In the Ditch) ()]
[(A Hole in the Wallet) ()]
[(He'd send in the Army) ()]
]
two-albums
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% An example of a double album, which consumes both sides %%%%%%%%
%%%%%% of the tape. Also an example of the automatic "magic %%%%%%%%
%%%%%% printer" feature, since the band name is known. %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(Front 242) (Backcatalogue) (1982-1985)
[[(U-Men (LP mix)) (3:12)]
[(Geography II) (1:08)]
[(Kampfbereit) (3:18)]
[(Operating Tracks) (3:48)]
[(Geography I) (2:16)]
[(Take One) (4:45)]
[(Controversy Between) (4:54)]
[(Sample D) (3:15)]
]
[[(Nomenklatura I) (4:24)]
[(Nomenklatura II) (2:10)]
[(Lovely Day) (5:26)]
[(Special Forces) (5:30)]
[(Commando Remix) (9:03)]
[(No Shuffle (single mix)) (3:45)]
[(Don't Crash) (4:51)]
[(Funkahdafi) (3:15)]
[(Take One (live)) (5:00)]
]
double-album
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% An example of three albums by one band that happen to %%%%%%%%
%%%%%% fit on one tape - one album on the front and two on %%%%%%%%
%%%%%% the back. %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(Shriekback)
(Jamscience) () (1984)
(Tench) (Knowledge, Power, Truth and Sex) (1982, 1984)
[[(Under the Lights) ()]
[(Building Up a New Home) ()]
[(Hand on my Heart) ()]
[(International) ()]
[(Putting on the Pressure) ()]
[(Party Line) ()]
[(My Careful Hands) ()]
[(Midnight Maps) ()]
[() ()]
[(Working on the Ground) ()]
[(Lined Up (instrumental)) ()]
[(Hapax Legomena) ()]
]
[[(Sexthinkone) ()]
[(A Kind of Fascination) ()]
[(All the Greek Boys) ()]
[(Moth Loop) ()]
[(Here Comes my Hand: Clap) ()]
[() ()]
[(Mercy Dash) ()]
[(Achtung) ()]
[(Hubris) ()]
[(Suck) ()]
[(Nerve) ()]
[(Mistah Linn He Dead) ()]
]
N-albums
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% An example of two albums, each by different bands, with %%%%%%%%
%%%%%% one album on each side of the tape. %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(Revolting{*filter*}s) (Big {*filter*} Land) (1986)
[[(38) (4:10)]
[(We Shall Cleanse the World) (5:34)]
[(Attack Ships on Fire) (4:55)]
[(Big {*filter*} Land) (3:57)]
[(Union Carbide (West {*filter*}ia version)) (3:20)]
[(TV Mind) (5:39)]
[(No Devotion) ()]
[(Union Carbide (Bhopal version)) (3:39)]
[(You Often Forget (Malignant)) (8:28)]
]
(Sisters of Mercy) (Floodland) (1988)
[[(Dominion/Mother Russia) (7:01)]
[(Flood I) (6:22)]
[(Lucretia My Reflection) (4:57)]
[(1959) (4:09)]
[(This Corrosion) (10:55)]
[(Flood II) (6:47)]
[(Driven Like the Snow) (6:27)]
[(Neverland (a Fragment)) (2:46)]
]
two-bands
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% An example of several EPs and singles by one band on %%%%%%%%
%%%%%% both sides of a tape. Also, the band-name is printed %%%%%%%%
%%%%%% in a different font for this one. %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
band-font % push band-font on the stack..
/band-font /Times-Roman def % change it...
(The Art of Noise)
(Who's Afraid of the Art of Noise?) (Beatbox. Paranoimia.) ()
(The Art of Noise have Closed Up.) (Legs. Peter Gunn.) ()
[[(A Time for Fear (Who's Afraid?)) (1984)]
[(Beatbox (Diversion One)) ()]
[(Snapshot) ()]
[(Close to the Edit) ()]
[(Who's Afraid (of the Art of Noise?)) ()]
[(Momento) ()]
[(How to Kill) ()]
[(Realization) ()]
[() ()]
[(Beatbox (Battle)) (1983)]
[(The Army Now) ()]
[(Donna) ()]
[(Bright Noise) ()]
[(Moments in Love) ()]
[() ()]
[(Legs) (1985)]
]
[[(Closely Closely (Enough's Enough!)) (1984)]
[(Close Up (Hop)) ()]
[(A Time to Hear (Who's Listening?)) ()]
[() ()]
[(Hoops and Mallets) (1985)]
[(Legs (Inside Legmix)) ()]
[() ()]
[(Paranoimia (Headroom Mix)) (1986)]
[(Why Me?) ()]
[(A Nation Rejects) ()]
[() ()]
[(Peter Gunn Theme) (1986)]
[(Something Always Happens) ()]
[() ()]
[(Beatbox (Battle)) (1983)]
]
N-albums % print the label...
/band-font exch def % set band font back to what it was before.
%%%%% This form should always be here at the end, to make sure that the
%%%%% final page is dumped even if there are an odd number of labels
%%%%% being printed.
tick { showpage } if