PizzaTool Customer Demands

Don Hopkins
6 min readMay 11, 2018

--

I tried to explain to Sun management that we were already getting demands for PizzaTool from Sun customers and Tony & Alba’s Pizza connoisseurs all across Silicon Valley and far away places .

The Story of Sun Microsystems PizzaTool

Date: Wed, 24 Oct 90 13:52:38 -0700
From: Peter Yee [NASA AMES]

Got an X version available?

Date: Wed, 24 Oct 90 13:54:30 PDT
From: Steven Blair [Synoptics]

that’s histerical Don. Where do we ftp it??

From: Jeff Lo [Elan]
Date: Wed, 24 Oct 90 14:07:58 PDT

So how does one get a copy of this cool new PizzaTool? Is it available
for ftp or mail, or do we have to wait for the next release of SunOS?

Jeff Lo

Date: Wed, 24 Oct 90 13:59:54 MDT
From: barry [ADS]

So how do we get the code? We’re hungry too :-)

From: David Krikorian [MIT]
Date: Thu, 25 Oct 90 00:58:43 -0400

Don, I read your description of PizzaTool. What hard/software do you
have send the fax?

Jean, do you know of anything hard/software like that at MIT?

Date: Wed, 24 Oct 90 14:27:36 -0700
From: Angela Marie Thomas [Ultra Network Technologies]

If this is for real, I want a copy, too. I would love to be able to order a pizza w/out all the hassles of talking to a human. O:-) Besides, I haven’t checked out Tony&Alba’s Pizza, yet, and this would be a good reason to do it.
Thanks a bunch.

Date: Thu, 25 Oct 90 09:43:40 EDT
From: R B Murray [AT&T]

How can I get a copy of the source for Pizzatool?

Rob Murray, AT&T Bell Labs, also Editor, The C++ Report

Date: Thu, 25 Oct 90 09:25:37 -0400
From: Ben Shneiderman [University of Maryland HCIL]

nice to hear from you about the Pizza tool…to make it complete it needs to have pie menus! that is , Pizza Pie menus.

Anyway, I think it is fun and useful too and will spread as the world continues to link-up…Ben

Date: Fri, 26 Oct 90 10:00:32 EDT
From: Mark Seiden [Seiden]

this doesn’t surprise me, considering how much work don’s done on pie menus.

“obvious” feature requests: a way of graphically specifying the layout of ingredients on pizza segments… (e.g. only half the eaters like anchovies…)

a check box for extra crispy… (this is *important*)

a check box for slicing geometry… (square/radial)… okay, i don’t core…

(when someone writes a script to forge hundreds of pizza deliveries with a phony fax number and delivery address what sort of crime would it be?)

Date: Fri, 30 Aug 91 09:29:47 PDT
From: Bil Lewis
Subject: Pizzatool question

Don,
I think that Pizzatool is just the finest hack and I would really like to use it for real. So the question is: How do I configure it to know where an outgoing modem is and how do I supply it the necesary information for real (and local) pizza parlors?

(I have the demo disk. I’m moving to Sweden & would *LOVE* to be able to use it there.)

-Bil

Date: Fri, 30 Aug 91 16:09:16 PDT
From: Don Hopkins
To: Bil Lewis
Subject: Pizzatool question

Here’s some code you can stick into the appropiate place in the
pizzatool source, or put in your “~/.pizzatool.ps” file, that
pizzatool reads in at startup. (Better to modify the source since if
you save the pizzatool configuration, it will write over the file and
forget how to fax.) It faxes the image of the pizza in the preview
window in the background of the pizza order, by writing it out to a
raster file somewhere (in my directory) and having newsprint read it
back in over nfs (so the postscript file is very small).

-Don

/PizzaSpoolDirectory (/net/cirrus/home/cirrus/hopkins/PizzaSpool) def
/FaxServer (b23b-fax) def
/SendOrder { % - => -
{
20 dict begin
/UniqueName
% Goofy way to generate a unique name:
(echo $USER-`hostname`-$$) pipe pop 100 string readline pop
PizzaSpoolDirectory
(%/PizzaOrder-%) sprintf
def

/PostScriptFileName UniqueName (%.ps) sprintf def
/RasterFileName UniqueName (%.can) sprintf def

/f PostScriptFileName (w) file def
f (%!PS-Adobe-2.1
%%Pages: 1
%%EndComments
/P { % x y w h b => -
string /s exch def /h exch def /w exch def /y exch def /x exch def
gsave
{1 exch sub} settransfer
x y translate
1 1 idtransform
abs exch abs exch scale
w h scale
w h 1 [w 0 0 h 0 0]
{currentfile s readhexstring pop}
image
grestore
} def
/Q { % r f x y w h rasterfilename => -
/fn exch def /h exch def /w exch def /y exch def /x exch def
/f exch def /r exch def
gsave
x y translate
w h scale
newpath
.5 .5 r .5 mul 180 dup 360 f mul add arc closepath
clip newpath
fn { readcanvas } stopped { pop } {
% 0 0 0 setscreen % Get default halftone screen
imagecanvas
} ifelse
grestore
} def
/S {
1 setgray
-1.5 .5 1.5 { /x exch def
-1.5 .5 1.5 { /y exch def
gsave x y rmoveto dup show grestore
} for
} for
0 setgray show
} def
/RS {dup stringwidth exch neg exch rmoveto S} def
/L { 0 moveto S } def
/R { 0 moveto RS } def
/D { 0 -25 translate } def
/T0 0 def /T1 50 def /T2 160 def /T3 180 def
%%EndProlog
%%Page: 1 1

16 0 translate

) writestring

gsave
framebuffer
/buf Pizza newcanvas def
buf /Transparent true put
Pizza setcanvas
/size Pizza send
2 copy sub % w h difference
dup 0 lt {
-.5 mul exch pop % w difference/2
0 exch % w 0 difference/2
3 -1 roll dup % 0 difference/2 w w
} {
.5 mul 0 % w h difference/2 0
4 2 roll % difference/2 0 w h
exch pop dup % difference/2 0 h h
} ifelse
rectpath buf reshapecanvas
buf /Mapped true put
buf setcanvas
RasterFileName writecanvas
buf /Mapped false put
/buf null def
grestore

RasterFileName
/fraction Pizza send
/radius Pizza send
(% % 40 50 530 530 (%) Q\n) sprintf
f exch writestring

(
gsave
50 730 translate

0 setgray

/Palatino-Bold findfont
20 scalefont setfont

) f exch writestring

f ((To pizza parlor:) T2 R\n) writestring
{ /value self send 0 get /item self send 0 get
} pizzaparlormenu send
((%) T3 L D\n) sprintf
f exch writestring

f ((Food order from:) T2 R\n) writestring
/value namefield send
((%) T3 L D\n) sprintf
f exch writestring

f ((Phone:) T2 R\n) writestring
/value phonefield send
((%) T3 L D\n) sprintf
f exch writestring

f ((Address:) T2 R\n) writestring
/value addressfield send
((%) T3 L D\n) sprintf
f exch writestring

f (D\n) writestring

{ (We will eat the food there.)
(This order is to go.)
(This order is "Take & Bake".)
(Please deliver to the above address.)
} /value deliverymenu send 0 get get
((%) T0 L D\n) sprintf
f exch writestring

f (D\n) writestring

{ 10 14 16 18 }
/value pizzasizesettings send 0 get get
{ (whole) (half of a) }
/value pizzafractionsettings send 0 get get
(One % % inch pie:) sprintf
((%) T0 L D\n) sprintf
f exch writestring

/style Pizza send /name exch send ((%) T0 L D\n) sprintf
f exch writestring
/extratoppings Pizza send {
/name exch send ((Add %) T1 L D\n) sprintf
f exch writestring
} forall

f (D\n) writestring

[ instructionfield0 instructionfield1 instructionfield2
instructionfield3 instructionfield4 instructionfield5
] {
/value exch send
dup length 0 eq { pop (D\n) } {
((%) T0 L D\n) sprintf
} ifelse
f exch writestring
} forall

f (\n) writestring

(
grestore
grestore
showpage
%%EOF
) f exch writestring

f closefile

/value pizzaparlormenu send 0 get {
0 {
/FaxPhone (9658882) def % Tony & Alba's
}
1 2 3 {
/FaxPhone (3363551) def % Blg23 Demo Room
}
4 {
/FaxPhone (9697269) def % Blg23 Upstairs
}
} case
PostScriptFileName
{ /value self send 0 get /item self send 0 get
} pizzaparlormenu send
FaxPhone FaxServer
(sunfax -ser % -faxp % -ton 'Pizza Chef' -com "%" -sub 'Pizza Order' %)
sprintf runprogram
end
} fork pop
} def

--

--

Don Hopkins
Don Hopkins

Written by Don Hopkins

User interface flower child. Pie menus, PizzaTool, SimCity, The Sims, Visual Programming, VR, AR, Unity3D / JavaScript bridge.

No responses yet