%%!PS-Adobe-2.0 EPSF-1.2 %%Creator: Torben Thomsen %%CreationDate: January 25, 1993 rev Dec 13, 1995 %%For: BIP PO Box 11435 San Bernardino CA 92423-1435 %%EndComments %%EndProlog % This program produces a Business Instrument Panel % It may not be used without the written permission of BIP % Copyright © 1995 BIP /mydict 220 dict def mydict begin 56 155 translate .39 .39 scale /cc 1 def %Foreign currency translation coeff: foreign curr/ 1 US$ % INPUT SECTION /DCSH 4750 cc div def /DREC 581 cc div def /DPAY -937 cc div def /DINV 289 cc div def /DLTA 1590 cc div def /DLTD 0 cc div def /DDTX -410 cc div def /DPIC -2130 cc div def /DEAC -3733 cc div def /Drev 5937 cc div def /Doth 0 def /Drev Drev Doth add def /Dpur 3567 cc div def /Ddep 269 cc div def /Dcon 0 cc div def /Ddep Ddep Dcon sub def /Dint 0 cc div def /Dtax 714 cc div def Dtax 0 ge {/DtaxP Dtax def /DtaxN 0 def} {/DtaxP 0 def /DtaxN Dtax abs def} ifelse /Dprf 1453 cc div def Dprf 0 gt {/DprfP Dprf def /DprfN 0 def} {/DprfP 0 def /DprfN Dprf abs def} ifelse /Dcpr 808 cc div def /Dltl 0 cc div def /Dcol 5831 cc div def /Dpmt 3232 cc div def /Dipd 0 cc div def /Dtpd 609 cc div def /Ddvd 0 cc div def /Dplt 725 cc div def /Drlt 0 cc div def /Dlend 0 cc div def /Drld 0 cc div def /Dlend Dlend Drld sub def /Didt 0 cc div def /Dstk 506 cc div def /Drdt 0 cc div def /Dbts 698 cc div def /Dstf 0 cc div def /Dstp 89 cc div def /Dstf Dstf Dstp sub def /de Didt Dstk add def /fg Drdt Dbts add def /Dacsh 152 cc div def /Darec 0 cc div def /Dapay 0 cc div def /Dainv 0 cc div def /Dalta 0 cc div def /Daltd 0 cc div def /Dadtx 0 cc div def /Dname (MICROSOFT) def /Dyear (1995) def /DSc .7 def /Dmin 27972.5 cc div def /Dmax 54726.5 cc div def /Dprep () def /DA Dacsh Darec add Dapay add Dainv add Dalta add Daltd add Dadtx add def /Dadj 0 def Dacsh 0 gt {/Dadj Dadj Dacsh add def} if Darec 0 gt {/Dadj Dadj Darec add def} if Dapay 0 gt {/Dadj Dadj Dapay add def} if Dainv 0 gt {/Dadj Dadj Dainv add def} if Dalta 0 gt {/Dadj Dadj Dalta add def} if Daltd 0 gt {/Dadj Dadj Daltd add def} if Dadtx 0 gt {/Dadj Dadj Dadtx add def} if /Dloss DA Dadj sub abs def /DcLTA Dcpr Dltl sub Ddep sub def /TF {dup 0 lt {/m 1 neg def}{/m 1 def} ifelse abs sqrt .7979 mul m mul} def %find signed radius of half-circle /DW 432 def %Drawing width in points /DH 600 def %Drawing heighth in points /Background .9 def %Grayscale for background /Linesh 0 def %Grayscale for main lines /Linew .5 def %Linewidth for main lines /Boxlnsh .9 def %Lineshade for boxes /Boxlnwd 4 def %Linewidth for boxes /MAX {/n1 exch def /n2 exch def n1 n2 n1 n2 gt {pop} {exch pop} ifelse} def /tIST DLTD DDTX DPIC DEAC add add add def DPIC DEAC add 0 gt {/tIST DLTD DDTX add def} if /tMIST tIST abs Dmax MAX def %find max of mkt value or IST /tMPW DCSH def /tvad Dint Dtax Dprf add add def /tvadP Dint DtaxP DprfP add add def /vadP tvadP TF def /tvadN DtaxN DprfN add def /vadN tvadN TF def /tvadV vadP vadN add def Dtpd 0 ge {/tpdP Dtpd def /tpdN 0 def} {/tpdP 0 def /tpdN Dtpd neg def} ifelse /tfin Dstk Dbts sub Didt add Drdt sub def /Dnetfin tfin Dstf add def /tdsbP Dipd tpdP Ddvd add add def /DADJV Dadj TF Dloss TF add def /Delta 12 def /hhh DINV DLTA add abs sqrt Dcpr TF 2 mul Dltl TF 2 mul MAX DcLTA TF 2 mul abs MAX tvadV MAX add tMIST abs sqrt Drev TF 2 mul MAX Dpur TF 2 mul MAX Dcol TF 2 mul MAX Dpmt TF 2 mul MAX add Dplt TF 2 mul Drlt TF 2 mul MAX tdsbP TF tpdN TF add MAX DCSH abs sqrt MAX add def /ddd DPAY abs sqrt Dpur TF Dpmt TF MAX MAX Dcpr TF Dltl TF add add tMIST abs sqrt DCSH abs sqrt MAX DINV DLTA add abs sqrt MAX add vadP 2 mul tdsbP TF 2 mul MAX add Drev TF Dcol TF MAX DREC abs sqrt MAX add def /ScW DW ddd div def %scale factor for width /ScH DH hhh div def %scale factor for height ScW ScH lt {/Sc ScW def} {/Sc ScH def} ifelse DSc 0 gt {/Sc DSc def /Delta Delta ScW div DSc mul def} if %Manual scaling /TS {TF Sc mul} def %transform & scale circle /GDS DINV DLTA add sqrt Sc mul def /cLTA DcLTA TS def /IST tIST 0 lt {tIST abs sqrt Sc mul neg} {tIST sqrt Sc mul} ifelse def /MIST tMIST abs sqrt Sc mul def /MPW tMPW 0 lt {tMPW abs sqrt Sc mul neg} {tMPW sqrt Sc mul} ifelse def /REC DREC 0 lt {DREC abs sqrt Sc mul neg} {DREC sqrt Sc mul} ifelse def /PAY DPAY 0 lt {DPAY abs sqrt Sc mul neg} {DPAY sqrt Sc mul} ifelse def /col Dcol TS def /pmt Dpmt abs TS def /rev Drev abs TS def /lend Dlend TS def /oth Doth abs TS def /stf Dstf TS def /netfin Dnetfin TS def /fin1 de abs TS def %radius of lower finance circle debt equity /fin2 fg abs TS def %radius of upper finance circle /finh fin1 fin2 add def /finw fin1 fin2 MAX 2 mul def /dsbP tdsbP TS def %radius of positive distribution /txpdN tpdN TS def %radius of tax refund /pur Dpur abs TS def /vad tvad TS def /VadP vadP Sc mul def /VadN vadN Sc mul def /adj Dadj TS def /loss Dloss TS def /plt Dplt TS def /rlt Drlt TS def /MM MIST abs rev col MAX pur MAX pmt MAX 2 mul MAX def /PIC DPIC DEAC add tIST div abs IST abs mul def /DTX DDTX DLTD add 0 ne {DDTX DDTX DLTD add div abs IST abs mul} {0} ifelse def /EAC DEAC DEAC DPIC add div abs IST abs mul def /INV DINV DINV DLTA add div GDS abs mul def /prf DprfP DprfP DtaxP Dint add add div 180 mul def %profit in degrees Dint DtaxP DprfP add add 0 ne {/int Dint Dint DtaxP DprfP add add div 180 mul def} if DprfN 0 ne {/prfN DprfN dup DtaxN add div 180 mul def} {/prfN 0 def} ifelse /cpr Dcpr TS def /dvd tdsbP 0 ne {Ddvd tdsbP div 180 mul} {0} ifelse def /coupon tdsbP 0 ne {Dipd tdsbP div 180 mul} {0} ifelse def /txpd tdsbP 0 ne {tpdP tdsbP div 180 mul} {0} ifelse def /dep Ddep TS def /ltl Dltl TS def /ret Dint Dtax add Dprf add Dipd sub Dtpd sub Ddvd sub def /cIST ret neg Dadj sub Dloss add de sub fg add def /cIST cIST TS def /ret ret TS def /op Dcol Dpmt sub Dtpd sub Ddvd sub Dipd sub def /cCSH op Dnetfin add Dplt sub Drlt add Dlend sub TS def /op op TS def /cREC Drev Dcol sub Dlend add TS def /cPAY Dpmt Dpur sub Dplt Dcpr sub add Dltl Drlt sub add Dstf sub TS def /cINV Dpur Drev sub Ddep add Dprf add Dtax add Dint add TS def /acsh Dacsh TS def /arec Darec TS def /apay Dapay TS def /ainv Dainv TS def /alta Dalta TS def /altd Daltd TS def /adtx Dadtx TS def /Name (MICROSOFT) def /Year (1995) def /hfill 1 def %CREATE BOX %Call as x y w BOX where x,y is center of box and w is width /BOX {/d exch def d 2 div sub exch d 2 div sub exch newpath moveto 0 d rlineto d 0 rlineto 0 d neg rlineto closepath} def %DRAW A HALFCIRCLE % Call as x y r1 r2 twist Half where r=radius and twist is direction 0 is up /Half {/twist exch def /r2 exch def /r1 exch def /ctry exch def /ctrx exch def 1 setlinewidth hfill setgray twist 0 eq {/ctry ctry r1 r2 sub 2 div sub def} if twist -1 eq {/ctrx ctrx r1 r2 sub 2 div sub def} if r1 0 ne {newpath ctrx ctry moveto ctrx ctry r1 90 twist mul 90 twist mul 180 add arc closepath gsave fill grestore 0 setgray stroke} if hfill setgray r2 0 ne {newpath ctrx ctry moveto ctrx ctry r2 90 twist 2 add mul 90 twist 2 add mul 180 add arc closepath gsave fill grestore 0 setgray stroke} if } def %SETUP FOR HALF CIRCLE %Call as ctrx ctry twist val norm Halfset: norm = 1 if up or right is positive otherwise -1 /Halfset { /norm exch def /val exch def /twist exch def /ctry exch def /ctrx exch def /val val norm mul def /r1 val 0 gt {val} {0} ifelse def /r2 val 0 le {val abs} {0} ifelse def ctrx ctry r1 r2 twist Half} def %DEFINE CENTERLINES AND OTHER FIXED POINTS /TM VadP VadN add cLTA 2 mul abs MAX cpr 2 mul abs MAX ltl 2 mul abs MAX def /TM2 GDS def /BM plt 2 mul rlt 2 mul MAX MPW abs MAX op abs 2 mul MAX def /BM2 op abs def /L1 0 def /L2 cpr abs ltl abs add def /L3 GDS MIST MAX MPW MAX def /L4 VadP VadN MAX 2 mul dsbP txpdN MAX 2 mul MAX def /L5 0 def /W pur pmt MAX PAY abs MAX L1 add L2 add L3 add L4 add L5 add rev col MAX REC MAX add def /H TM2 TM add MM add BM add BM2 add Delta add def /Lmargin 306 W 2 div sub def /Tmargin 700 def /ISTCX pur pmt MAX abs PAY abs MAX L1 add L2 add L3 2 div add Lmargin add def /ISTCY Tmargin TM2 sub TM sub MM 2 div sub def /ISTTY ISTCY IST abs 2 div add def /GDSCY Tmargin TM2 2 div sub def /PAYCX Lmargin pur pmt MAX PAY abs MAX abs 2 div add def /purCX PAYCX def /cprCX PAYCX pur pmt MAX 2 div add L1 add L2 2 div add def /GDSBY GDSCY GDS abs 2 div sub def /TMCY GDSBY TM 2 div sub def /BMhw dsbP txpdN MAX finw abs 2 div add Delta 3 sub add 2 div def /dsbCX ISTCX L3 L4 add 2 div add def /finCX ISTCX def /finCY ISTTY IST abs sub Delta sub finh 2 div sub def /netfinCY finCY Delta sub finh netfin abs add 2 div sub def /stfCY finCY finh Delta add 2 div sub def /stfCX cprCX L2 stf abs add 2 div add Delta add def /BMCY netfinCY netfin abs BM add 2 div sub Delta 10 div sub def /MPWCY BMCY BM 2 div sub Delta sub def /Bmargin MPWCY def /revCX dsbCX L4 L5 add 2 div add def /RECCX revCX L5 rev col MAX REC MAX add 2 div add def /TMhw adj loss MAX 2 div VadP VadN MAX add Delta add 2 div def /vadCX adj 0 ne loss 0 ne or {ISTCX TMhw add} {ISTCX} ifelse def /adjCX adj 0 ne loss 0 ne or {ISTCX TMhw sub} {ISTCX} ifelse def %DRAW MAIN PURCHASE REVENUE CIRCUIT /drawPAY {Background setgray Boxlnwd setlinewidth PAY 0 lt {PAYCX ISTCY PAY BOX fill} if PAY 0 gt {PAYCX ISTCY PAY BOX stroke} if} def PAY abs pur pmt MAX gt {drawPAY} if %DRAW BOXES AND PUR & REV 0 setgray 1 setlinewidth newpath [3 4] 0 setdash ISTCX GDS 2 div sub GDSCY GDS 2 div add INV sub moveto GDS 0 rlineto closepath stroke [] 0 setdash Boxlnwd setlinewidth Boxlnsh setgray ISTCX GDSCY GDS abs BOX stroke ISTCX BMCY MPW BOX stroke Background setgray 0 setlinewidth IST 0 gt {1 setgray} if ISTCX ISTCY IST abs BOX fill 1 setlinewidth 0 setgray [3 4] 0 setdash Dmax 0 gt {ISTCX ISTCY Dmax abs sqrt Sc mul BOX stroke} if Dmin 0 gt {ISTCX ISTCY Dmin abs sqrt Sc mul BOX stroke} if [] 0 setdash %SUBDIVIDE EQUITY 1 setlinewidth 0 setlinecap 0 setgray %DEBT-EQUITY /DEBTx ISTCX IST abs 2 div add PIC sub def IST 0 gt {0 setgray} if newpath [3 4] 0 setdash DEBTx ISTCY IST abs 2 div sub moveto 0 IST abs rlineto closepath stroke %SPECIAL GRAY BOX IF DEFICIT /Deficit {newpath DEBTx ISTCY IST abs 2 div sub moveto 0 IST abs rlineto PIC 0 rlineto 0 IST abs neg rlineto closepath} def DPIC DEAC add 0 gt {0 setlinewidth Background setgray Deficit fill 1 setlinewidth 0 setgray [] 0 setdash Deficit stroke} if %DEFERRED TAXES 0 setgray newpath [3 4] 0 setdash ISTCX IST abs 2 div sub ISTTY DTX sub moveto IST abs PIC sub 0 rlineto closepath stroke %PAID-IN-CAPITAL DEAC 0 lt {newpath [3 4] 0 setdash ISTCX IST abs 2 div add PIC sub ISTTY EAC sub moveto PIC 0 rlineto closepath stroke} if %INVENTORY &DEPRECIATION [] 0 setdash Background setgray 0 setlinewidth 1 setgray %DRAW MAIN CIRCUITS ON TOP OF STATES IN BACKGROUND Linew setlinewidth Linesh setgray 1 setlinecap newpath PAYCX MPWCY moveto RECCX MPWCY lineto closepath stroke newpath PAYCX GDSCY moveto RECCX GDSCY lineto stroke newpath dsbCX MPWCY moveto dsbCX GDSCY lineto closepath stroke newpath %vertical centerline ISTCX BMCY Delta sub moveto adj 0 ne loss 0 ne or {ISTCX GDSCY Delta add lineto closepath stroke} {ISTCX ISTCY lineto stroke newpath ISTCX TMCY moveto ISTCX GDSCY Delta add lineto stroke} ifelse newpath %LTA circuit dsbCX BMCY moveto PAYCX BMCY lineto PAYCX TMCY lineto ISTCX Delta add TMCY lineto stroke newpath %retained line ISTCX Delta sub ISTCY moveto dsbCX ISTCY lineto stroke %DRAW DSB-FIN CIRCUIT %DRAW TWO SPLIT FINANCING CIRCLES ISTCX finCY fin2 fin1 0 Half Dbts 0 gt {0 setgray newpath ctrx ctry moveto ctrx ctry fin2 0 Dbts Dbts Drdt add div 180 mul arc closepath fill} if Dstk 0 gt {0 setgray newpath ctrx ctry moveto ctrx ctry fin1 360 Dstk Dstk Didt add div 180 mul sub 360 arc closepath fill} if %DRAW PROFIT CIRCUIT dsbCX TMCY VadP VadN 0 Half 1 setgray 0 setlinewidth /vadCY TMCY VadP VadN sub 2 div sub def VadN 0 gt {newpath ctrx ctry moveto ctrx ctry VadN 180 360 arc closepath fill} if 0 setgray 0 setlinewidth %CUT VALUE ADDED PIE 0 setgray 0 setlinewidth prf 0 ne {newpath ctrx ctry moveto ctrx ctry VadP 0 prf arc closepath fill} if .9 setgray DtaxP 0 ne {newpath ctrx ctry moveto ctrx ctry VadP prf 180 int sub arc closepath fill} if %Taxes 1 setlinewidth 0 setgray newpath ctrx ctry moveto ctrx ctry VadP 0 180 arc closepath stroke prfN 0 gt {newpath ctrx ctry moveto ctrx ctry VadN 360 prfN sub 360 arc closepath fill} if /adjCY TMCY ISTTY add 2 div def /hfill 0 def ISTCX adjCY adj loss 0 Half /hfill 1 def %CAPITAL PURCHASES & LIQUIDATIONS cprCX TMCY cpr ltl -1 Half cprCX BMCY rlt plt -1 Half %NET FINANCING ISTCX netfinCY 0 netfin -1 Halfset 0 setlinewidth 1 setgray %DIVIDENDS & COUPON /dsbCY BMCY dsbP abs txpdN abs add 2 div add Delta add def dsbCX dsbCY dsbP txpdN 0 Half dsbP 0 eq {/dsb .0001 def} if dvd 0 ne {newpath 0 setgray ctrx ctry moveto ctrx ctry dsbP 0 dvd arc closepath fill } if .9 setgray 0 setlinewidth txpd 0 ne {newpath ctrx ctry moveto ctrx ctry dsbP dvd dvd txpd add arc closepath fill} if %Taxes pd 1 setlinewidth 0 setgray newpath ctrx ctry moveto ctrx ctry dsbP 0 180 arc closepath stroke %CHANGES IN STATES %INVENTORY ISTCX GDSCY Delta add cINV abs 2 div add 0 cINV 1 Halfset ainv 0 ne {/hfill 0 def ISTCX GDSCY Delta add cINV abs add ainv abs 2 div add 0 ainv 1 Halfset /hfill 1 def} if %INVESTORS AND ADJ OF LTD AND DTX ISTCX Delta sub cIST abs 2 div sub ISTCY -1 cIST -1 Halfset adtx 0 ne {/hfill 0 def DEBTx ISTTY DTX 2 div sub -1 adtx -1 Halfset /hfill 1 def} if altd 0 ne {/hfill 0 def DEBTx ISTTY DTX sub IST abs DTX sub 2 div sub -1 altd -1 Halfset /hfill 1 def} if %DEPRECIATION ISTCX GDSCY TMCY cLTA abs add add 2 div 0 dep 1 Halfset %LTA ISTCX Delta add cLTA abs 2 div add TMCY -1 cLTA 1 Halfset alta 0 ne {/hfill 0 def ISTCX Delta add cLTA abs add alta abs 2 div add TMCY -1 alta 1 Halfset /hfill 1 def} if %RETENTION ISTCX dsbCX add 2 div ISTCY -1 ret 1 Halfset %CASH ISTCX BMCY Delta sub cCSH abs 2 div sub 0 cCSH -1 Halfset acsh 0 ne {/hfill 0 def ISTCX BMCY Delta sub cCSH abs sub acsh abs 2 div sub 0 acsh -1 Halfset /hfill 1 def} if %OPERATING CASH FLOWS ISTCX dsbCX dsbP abs txpdN abs MAX sub add 2 div BMCY -1 op -1 Halfset %PAYMENT AND PURCHASE AND PAYABLES pur pmt ge {PAYCX pur pmt sub 2 div add ISTCY -1 pmt -1 Halfset PAYCX ISTCY -1 pur 1 Halfset} if pur pmt lt {PAYCX ISTCY -1 pmt -1 Halfset PAYCX pmt pur sub 2 div add ISTCY -1 pur 1 Halfset} if PAY abs pur pmt MAX lt {drawPAY} if Linesh setgray Linew setlinewidth newpath PAYCX ISTCY moveto Delta neg 0 rlineto stroke PAYCX Delta sub cPAY abs 2 div sub ISTCY -1 cPAY -1 Halfset apay 0 ne {/hfill 0 def PAYCX Delta sub cPAY abs sub apay abs 2 div sub ISTCY -1 apay -1 Halfset /hfill 1 def} if %SHORT-TERM FINANCING stf 0 ne {Linew setlinewidth Linesh setgray newpath PAYCX stfCY moveto ISTCX stfCY lineto closepath stroke stfCX stfCY -1 stf 1 Halfset} if %LENDING lend 0 ne {Linew setlinewidth Linesh setgray newpath ISTCX stfCY moveto dsbCX Delta 2 div sub stfCY lineto closepath stroke newpath RECCX stfCY moveto dsbCX Delta 2 div add stfCY lineto closepath stroke newpath dsbCX Delta 2 div add stfCY moveto dsbCX stfCY Delta 2 div 0 180 arc stroke ISTCX dsbCX add 2 div stfCY -1 lend 1 Halfset} if %REVENUES AND COLLECTIONS AND RECEIVABLES rev col ge {RECCX rev col sub 2 div add ISTCY -1 col -1 Halfset RECCX ISTCY -1 rev 1 Halfset Doth 0 ne {/r1 oth 0 gt {oth} {0} ifelse def /r2 oth 0 le {oth abs} {0} ifelse def RECCX oth rev sub 2 div add ISTCY r1 r2 -1 Half} if } if rev col lt {RECCX ISTCY -1 col -1 Halfset RECCX col rev sub 2 div add ISTCY -1 rev 1 Halfset Doth 0 ne { RECCX col oth add 2 div add rev sub ISTCY oth 0 -1 Half} if } if Boxlnsh setgray Boxlnwd setlinewidth RECCX ISTCY REC BOX stroke Linesh setgray Linew setlinewidth newpath RECCX ISTCY moveto Delta 0 rlineto stroke RECCX Delta add cREC abs 2 div add ISTCY -1 cREC 1 Halfset arec 0 ne {/hfill 0 def RECCX Delta add cREC abs add arec abs 2 div add ISTCY -1 arec 1 Halfset /hfill 1 def} if Linesh setgray Linew setlinewidth newpath PAYCX MPWCY moveto PAYCX GDSCY lineto stroke newpath RECCX GDSCY moveto RECCX MPWCY lineto stroke %PRINT TITLE, YEAR, 0 setgray /Helvetica-Bold findfont 24 scalefont setfont Lmargin W add Name stringwidth pop sub Tmargin Delta add moveto Name show Lmargin Tmargin Delta add moveto Year show end /mydict 220 dict def mydict begin 678 237 translate /cc 1 def %Foreign currency translation coeff: foreign curr/ 1 US$ % INPUT SECTION /DCSH 10554 cc div def /DREC 18058 cc div def /DPAY -23980 cc div def /DINV 9251 cc div def /DLTA 39753 cc div def /DLTD -26571 cc div def /DDTX -3652 cc div def /DPIC -8423 cc div def /DEAC -14990 cc div def /Drev 65429 cc div def /Doth 0 def /Drev Drev Doth add def /Dpur 49346 cc div def /Ddep 6295 cc div def /Dcon 0 cc div def /Ddep Ddep Dcon sub def /Dint 1227 cc div def /Dtax 2134 cc div def Dtax 0 ge {/DtaxP Dtax def /DtaxN 0 def} {/DtaxP 0 def /DtaxN Dtax abs def} ifelse /Dprf 3021 cc div def Dprf 0 gt {/DprfP Dprf def /DprfN 0 def} {/DprfP 0 def /DprfN Dprf abs def} ifelse /Dcpr 5526 cc div def /Dltl 2403 cc div def /Dcol 63208 cc div def /Dpmt 50181 cc div def /Dipd 2132 cc div def /Dtpd 1874 cc div def /Ddvd 662 cc div def /Dplt 4439 cc div def /Drlt 2403 cc div def /Dlend 0 cc div def /Drld 0 cc div def /Dlend Dlend Drld sub def /Didt 10499 cc div def /Dstk 318 cc div def /Drdt 9445 cc div def /Dbts 16 cc div def /Dstf 0 cc div def /Dstp 4258 cc div def /Dstf Dstf Dstp sub def /de Didt Dstk add def /fg Drdt Dbts add def /Dacsh 0 cc div def /Darec 0 cc div def /Dapay 0 cc div def /Dainv 0 cc div def /Dalta 0 cc div def /Daltd 0 cc div def /Dadtx 0 cc div def /Dname (IBM) def /Dyear (1994) def /DSc .7 def /Dmin 60412.54 cc div def /Dmax 75103.32 cc div def /Dprep () def /DA Dacsh Darec add Dapay add Dainv add Dalta add Daltd add Dadtx add def /Dadj 0 def Dacsh 0 gt {/Dadj Dadj Dacsh add def} if Darec 0 gt {/Dadj Dadj Darec add def} if Dapay 0 gt {/Dadj Dadj Dapay add def} if Dainv 0 gt {/Dadj Dadj Dainv add def} if Dalta 0 gt {/Dadj Dadj Dalta add def} if Daltd 0 gt {/Dadj Dadj Daltd add def} if Dadtx 0 gt {/Dadj Dadj Dadtx add def} if /Dloss DA Dadj sub abs def /DcLTA Dcpr Dltl sub Ddep sub def /TF {dup 0 lt {/m 1 neg def}{/m 1 def} ifelse abs sqrt .7979 mul m mul} def %find signed radius of half-circle /DW 432 def %Drawing width in points /DH 600 def %Drawing heighth in points /Background .9 def %Grayscale for background /Linesh 0 def %Grayscale for main lines /Linew .5 def %Linewidth for main lines /Boxlnsh .9 def %Lineshade for boxes /Boxlnwd 4 def %Linewidth for boxes /MAX {/n1 exch def /n2 exch def n1 n2 n1 n2 gt {pop} {exch pop} ifelse} def /tIST DLTD DDTX DPIC DEAC add add add def DPIC DEAC add 0 gt {/tIST DLTD DDTX add def} if /tMIST tIST abs Dmax MAX def %find max of mkt value or IST /tMPW DCSH def /tvad Dint Dtax Dprf add add def /tvadP Dint DtaxP DprfP add add def /vadP tvadP TF def /tvadN DtaxN DprfN add def /vadN tvadN TF def /tvadV vadP vadN add def Dtpd 0 ge {/tpdP Dtpd def /tpdN 0 def} {/tpdP 0 def /tpdN Dtpd neg def} ifelse /tfin Dstk Dbts sub Didt add Drdt sub def /Dnetfin tfin Dstf add def /tdsbP Dipd tpdP Ddvd add add def /DADJV Dadj TF Dloss TF add def /Delta 12 def /hhh DINV DLTA add abs sqrt Dcpr TF 2 mul Dltl TF 2 mul MAX DcLTA TF 2 mul abs MAX tvadV MAX add tMIST abs sqrt Drev TF 2 mul MAX Dpur TF 2 mul MAX Dcol TF 2 mul MAX Dpmt TF 2 mul MAX add Dplt TF 2 mul Drlt TF 2 mul MAX tdsbP TF tpdN TF add MAX DCSH abs sqrt MAX add def /ddd DPAY abs sqrt Dpur TF Dpmt TF MAX MAX Dcpr TF Dltl TF add add tMIST abs sqrt DCSH abs sqrt MAX DINV DLTA add abs sqrt MAX add vadP 2 mul tdsbP TF 2 mul MAX add Drev TF Dcol TF MAX DREC abs sqrt MAX add def /ScW DW ddd div def %scale factor for width /ScH DH hhh div def %scale factor for height ScW ScH lt {/Sc ScW def} {/Sc ScH def} ifelse DSc 0 gt {/Sc DSc def /Delta Delta ScW div DSc mul def} if %Manual scaling /TS {TF Sc mul} def %transform & scale circle /GDS DINV DLTA add sqrt Sc mul def /cLTA DcLTA TS def /IST tIST 0 lt {tIST abs sqrt Sc mul neg} {tIST sqrt Sc mul} ifelse def /MIST tMIST abs sqrt Sc mul def /MPW tMPW 0 lt {tMPW abs sqrt Sc mul neg} {tMPW sqrt Sc mul} ifelse def /REC DREC 0 lt {DREC abs sqrt Sc mul neg} {DREC sqrt Sc mul} ifelse def /PAY DPAY 0 lt {DPAY abs sqrt Sc mul neg} {DPAY sqrt Sc mul} ifelse def /col Dcol TS def /pmt Dpmt abs TS def /rev Drev abs TS def /lend Dlend TS def /oth Doth abs TS def /stf Dstf TS def /netfin Dnetfin TS def /fin1 de abs TS def %radius of lower finance circle debt equity /fin2 fg abs TS def %radius of upper finance circle /finh fin1 fin2 add def /finw fin1 fin2 MAX 2 mul def /dsbP tdsbP TS def %radius of positive distribution /txpdN tpdN TS def %radius of tax refund /pur Dpur abs TS def /vad tvad TS def /VadP vadP Sc mul def /VadN vadN Sc mul def /adj Dadj TS def /loss Dloss TS def /plt Dplt TS def /rlt Drlt TS def /MM MIST abs rev col MAX pur MAX pmt MAX 2 mul MAX def /PIC DPIC DEAC add tIST div abs IST abs mul def /DTX DDTX DLTD add 0 ne {DDTX DDTX DLTD add div abs IST abs mul} {0} ifelse def /EAC DEAC DEAC DPIC add div abs IST abs mul def /INV DINV DINV DLTA add div GDS abs mul def /prf DprfP DprfP DtaxP Dint add add div 180 mul def %profit in degrees Dint DtaxP DprfP add add 0 ne {/int Dint Dint DtaxP DprfP add add div 180 mul def} if DprfN 0 ne {/prfN DprfN dup DtaxN add div 180 mul def} {/prfN 0 def} ifelse /cpr Dcpr TS def /dvd tdsbP 0 ne {Ddvd tdsbP div 180 mul} {0} ifelse def /coupon tdsbP 0 ne {Dipd tdsbP div 180 mul} {0} ifelse def /txpd tdsbP 0 ne {tpdP tdsbP div 180 mul} {0} ifelse def /dep Ddep TS def /ltl Dltl TS def /ret Dint Dtax add Dprf add Dipd sub Dtpd sub Ddvd sub def /cIST ret neg Dadj sub Dloss add de sub fg add def /cIST cIST TS def /ret ret TS def /op Dcol Dpmt sub Dtpd sub Ddvd sub Dipd sub def /cCSH op Dnetfin add Dplt sub Drlt add Dlend sub TS def /op op TS def /cREC Drev Dcol sub Dlend add TS def /cPAY Dpmt Dpur sub Dplt Dcpr sub add Dltl Drlt sub add Dstf sub TS def /cINV Dpur Drev sub Ddep add Dprf add Dtax add Dint add TS def /acsh Dacsh TS def /arec Darec TS def /apay Dapay TS def /ainv Dainv TS def /alta Dalta TS def /altd Daltd TS def /adtx Dadtx TS def /Name (IBM) def /Year (1994) def /hfill 1 def %CREATE BOX %Call as x y w BOX where x,y is center of box and w is width /BOX {/d exch def d 2 div sub exch d 2 div sub exch newpath moveto 0 d rlineto d 0 rlineto 0 d neg rlineto closepath} def %DRAW A HALFCIRCLE % Call as x y r1 r2 twist Half where r=radius and twist is direction 0 is up /Half {/twist exch def /r2 exch def /r1 exch def /ctry exch def /ctrx exch def 1 setlinewidth hfill setgray twist 0 eq {/ctry ctry r1 r2 sub 2 div sub def} if twist -1 eq {/ctrx ctrx r1 r2 sub 2 div sub def} if r1 0 ne {newpath ctrx ctry moveto ctrx ctry r1 90 twist mul 90 twist mul 180 add arc closepath gsave fill grestore 0 setgray stroke} if hfill setgray r2 0 ne {newpath ctrx ctry moveto ctrx ctry r2 90 twist 2 add mul 90 twist 2 add mul 180 add arc closepath gsave fill grestore 0 setgray stroke} if } def %SETUP FOR HALF CIRCLE %Call as ctrx ctry twist val norm Halfset: norm = 1 if up or right is positive otherwise -1 /Halfset { /norm exch def /val exch def /twist exch def /ctry exch def /ctrx exch def /val val norm mul def /r1 val 0 gt {val} {0} ifelse def /r2 val 0 le {val abs} {0} ifelse def ctrx ctry r1 r2 twist Half} def %DEFINE CENTERLINES AND OTHER FIXED POINTS /TM VadP VadN add cLTA 2 mul abs MAX cpr 2 mul abs MAX ltl 2 mul abs MAX def /TM2 GDS def /BM plt 2 mul rlt 2 mul MAX MPW abs MAX op abs 2 mul MAX def /BM2 op abs def /L1 0 def /L2 cpr abs ltl abs add def /L3 GDS MIST MAX MPW MAX def /L4 VadP VadN MAX 2 mul dsbP txpdN MAX 2 mul MAX def /L5 0 def /W pur pmt MAX PAY abs MAX L1 add L2 add L3 add L4 add L5 add rev col MAX REC MAX add def /H TM2 TM add MM add BM add BM2 add Delta add def /Lmargin 306 W 2 div sub def /Tmargin 700 def /ISTCX pur pmt MAX abs PAY abs MAX L1 add L2 add L3 2 div add Lmargin add def /ISTCY Tmargin TM2 sub TM sub MM 2 div sub def /ISTTY ISTCY IST abs 2 div add def /GDSCY Tmargin TM2 2 div sub def /PAYCX Lmargin pur pmt MAX PAY abs MAX abs 2 div add def /purCX PAYCX def /cprCX PAYCX pur pmt MAX 2 div add L1 add L2 2 div add def /GDSBY GDSCY GDS abs 2 div sub def /TMCY GDSBY TM 2 div sub def /BMhw dsbP txpdN MAX finw abs 2 div add Delta 3 sub add 2 div def /dsbCX ISTCX L3 L4 add 2 div add def /finCX ISTCX def /finCY ISTTY IST abs sub Delta sub finh 2 div sub def /netfinCY finCY Delta sub finh netfin abs add 2 div sub def /stfCY finCY finh Delta add 2 div sub def /stfCX cprCX L2 stf abs add 2 div add Delta add def /BMCY netfinCY netfin abs BM add 2 div sub Delta 10 div sub def /MPWCY BMCY BM 2 div sub Delta sub def /Bmargin MPWCY def /revCX dsbCX L4 L5 add 2 div add def /RECCX revCX L5 rev col MAX REC MAX add 2 div add def /TMhw adj loss MAX 2 div VadP VadN MAX add Delta add 2 div def /vadCX adj 0 ne loss 0 ne or {ISTCX TMhw add} {ISTCX} ifelse def /adjCX adj 0 ne loss 0 ne or {ISTCX TMhw sub} {ISTCX} ifelse def %DRAW MAIN PURCHASE REVENUE CIRCUIT /drawPAY {Background setgray Boxlnwd setlinewidth PAY 0 lt {PAYCX ISTCY PAY BOX fill} if PAY 0 gt {PAYCX ISTCY PAY BOX stroke} if} def PAY abs pur pmt MAX gt {drawPAY} if %DRAW BOXES AND PUR & REV 0 setgray 1 setlinewidth newpath [3 4] 0 setdash ISTCX GDS 2 div sub GDSCY GDS 2 div add INV sub moveto GDS 0 rlineto closepath stroke [] 0 setdash Boxlnwd setlinewidth Boxlnsh setgray ISTCX GDSCY GDS abs BOX stroke ISTCX BMCY MPW BOX stroke Background setgray 0 setlinewidth IST 0 gt {1 setgray} if ISTCX ISTCY IST abs BOX fill 1 setlinewidth 0 setgray [3 4] 0 setdash Dmax 0 gt {ISTCX ISTCY Dmax abs sqrt Sc mul BOX stroke} if Dmin 0 gt {ISTCX ISTCY Dmin abs sqrt Sc mul BOX stroke} if [] 0 setdash %SUBDIVIDE EQUITY 1 setlinewidth 0 setlinecap 0 setgray %DEBT-EQUITY /DEBTx ISTCX IST abs 2 div add PIC sub def IST 0 gt {0 setgray} if newpath [3 4] 0 setdash DEBTx ISTCY IST abs 2 div sub moveto 0 IST abs rlineto closepath stroke %SPECIAL GRAY BOX IF DEFICIT /Deficit {newpath DEBTx ISTCY IST abs 2 div sub moveto 0 IST abs rlineto PIC 0 rlineto 0 IST abs neg rlineto closepath} def DPIC DEAC add 0 gt {0 setlinewidth Background setgray Deficit fill 1 setlinewidth 0 setgray [] 0 setdash Deficit stroke} if %DEFERRED TAXES 0 setgray newpath [3 4] 0 setdash ISTCX IST abs 2 div sub ISTTY DTX sub moveto IST abs PIC sub 0 rlineto closepath stroke %PAID-IN-CAPITAL DEAC 0 lt {newpath [3 4] 0 setdash ISTCX IST abs 2 div add PIC sub ISTTY EAC sub moveto PIC 0 rlineto closepath stroke} if %INVENTORY &DEPRECIATION [] 0 setdash Background setgray 0 setlinewidth 1 setgray %DRAW MAIN CIRCUITS ON TOP OF STATES IN BACKGROUND Linew setlinewidth Linesh setgray 1 setlinecap newpath PAYCX MPWCY moveto RECCX MPWCY lineto closepath stroke newpath PAYCX GDSCY moveto RECCX GDSCY lineto stroke newpath dsbCX MPWCY moveto dsbCX GDSCY lineto closepath stroke newpath %vertical centerline ISTCX BMCY Delta sub moveto adj 0 ne loss 0 ne or {ISTCX GDSCY Delta add lineto closepath stroke} {ISTCX ISTCY lineto stroke newpath ISTCX TMCY moveto ISTCX GDSCY Delta add lineto stroke} ifelse newpath %LTA circuit dsbCX BMCY moveto PAYCX BMCY lineto PAYCX TMCY lineto ISTCX Delta add TMCY lineto stroke newpath %retained line ISTCX Delta sub ISTCY moveto dsbCX ISTCY lineto stroke %DRAW DSB-FIN CIRCUIT %DRAW TWO SPLIT FINANCING CIRCLES ISTCX finCY fin2 fin1 0 Half Dbts 0 gt {0 setgray newpath ctrx ctry moveto ctrx ctry fin2 0 Dbts Dbts Drdt add div 180 mul arc closepath fill} if Dstk 0 gt {0 setgray newpath ctrx ctry moveto ctrx ctry fin1 360 Dstk Dstk Didt add div 180 mul sub 360 arc closepath fill} if %DRAW PROFIT CIRCUIT dsbCX TMCY VadP VadN 0 Half 1 setgray 0 setlinewidth /vadCY TMCY VadP VadN sub 2 div sub def VadN 0 gt {newpath ctrx ctry moveto ctrx ctry VadN 180 360 arc closepath fill} if 0 setgray 0 setlinewidth %CUT VALUE ADDED PIE 0 setgray 0 setlinewidth prf 0 ne {newpath ctrx ctry moveto ctrx ctry VadP 0 prf arc closepath fill} if .9 setgray DtaxP 0 ne {newpath ctrx ctry moveto ctrx ctry VadP prf 180 int sub arc closepath fill} if %Taxes 1 setlinewidth 0 setgray newpath ctrx ctry moveto ctrx ctry VadP 0 180 arc closepath stroke prfN 0 gt {newpath ctrx ctry moveto ctrx ctry VadN 360 prfN sub 360 arc closepath fill} if /adjCY TMCY ISTTY add 2 div def /hfill 0 def ISTCX adjCY adj loss 0 Half /hfill 1 def %CAPITAL PURCHASES & LIQUIDATIONS cprCX TMCY cpr ltl -1 Half cprCX BMCY rlt plt -1 Half %NET FINANCING ISTCX netfinCY 0 netfin -1 Halfset 0 setlinewidth 1 setgray %DIVIDENDS & COUPON /dsbCY BMCY dsbP abs txpdN abs add 2 div add Delta add def dsbCX dsbCY dsbP txpdN 0 Half dsbP 0 eq {/dsb .0001 def} if dvd 0 ne {newpath 0 setgray ctrx ctry moveto ctrx ctry dsbP 0 dvd arc closepath fill } if .9 setgray 0 setlinewidth txpd 0 ne {newpath ctrx ctry moveto ctrx ctry dsbP dvd dvd txpd add arc closepath fill} if %Taxes pd 1 setlinewidth 0 setgray newpath ctrx ctry moveto ctrx ctry dsbP 0 180 arc closepath stroke %CHANGES IN STATES %INVENTORY ISTCX GDSCY Delta add cINV abs 2 div add 0 cINV 1 Halfset ainv 0 ne {/hfill 0 def ISTCX GDSCY Delta add cINV abs add ainv abs 2 div add 0 ainv 1 Halfset /hfill 1 def} if %INVESTORS AND ADJ OF LTD AND DTX ISTCX Delta sub cIST abs 2 div sub ISTCY -1 cIST -1 Halfset adtx 0 ne {/hfill 0 def DEBTx ISTTY DTX 2 div sub -1 adtx -1 Halfset /hfill 1 def} if altd 0 ne {/hfill 0 def DEBTx ISTTY DTX sub IST abs DTX sub 2 div sub -1 altd -1 Halfset /hfill 1 def} if %DEPRECIATION ISTCX GDSCY TMCY cLTA abs add add 2 div 0 dep 1 Halfset %LTA ISTCX Delta add cLTA abs 2 div add TMCY -1 cLTA 1 Halfset alta 0 ne {/hfill 0 def ISTCX Delta add cLTA abs add alta abs 2 div add TMCY -1 alta 1 Halfset /hfill 1 def} if %RETENTION ISTCX dsbCX add 2 div ISTCY -1 ret 1 Halfset %CASH ISTCX BMCY Delta sub cCSH abs 2 div sub 0 cCSH -1 Halfset acsh 0 ne {/hfill 0 def ISTCX BMCY Delta sub cCSH abs sub acsh abs 2 div sub 0 acsh -1 Halfset /hfill 1 def} if %OPERATING CASH FLOWS ISTCX dsbCX dsbP abs txpdN abs MAX sub add 2 div BMCY -1 op -1 Halfset %PAYMENT AND PURCHASE AND PAYABLES pur pmt ge {PAYCX pur pmt sub 2 div add ISTCY -1 pmt -1 Halfset PAYCX ISTCY -1 pur 1 Halfset} if pur pmt lt {PAYCX ISTCY -1 pmt -1 Halfset PAYCX pmt pur sub 2 div add ISTCY -1 pur 1 Halfset} if PAY abs pur pmt MAX lt {drawPAY} if Linesh setgray Linew setlinewidth newpath PAYCX ISTCY moveto Delta neg 0 rlineto stroke PAYCX Delta sub cPAY abs 2 div sub ISTCY -1 cPAY -1 Halfset apay 0 ne {/hfill 0 def PAYCX Delta sub cPAY abs sub apay abs 2 div sub ISTCY -1 apay -1 Halfset /hfill 1 def} if %SHORT-TERM FINANCING stf 0 ne {Linew setlinewidth Linesh setgray newpath PAYCX stfCY moveto ISTCX stfCY lineto closepath stroke stfCX stfCY -1 stf 1 Halfset} if %LENDING lend 0 ne {Linew setlinewidth Linesh setgray newpath ISTCX stfCY moveto dsbCX Delta 2 div sub stfCY lineto closepath stroke newpath RECCX stfCY moveto dsbCX Delta 2 div add stfCY lineto closepath stroke newpath dsbCX Delta 2 div add stfCY moveto dsbCX stfCY Delta 2 div 0 180 arc stroke ISTCX dsbCX add 2 div stfCY -1 lend 1 Halfset} if %REVENUES AND COLLECTIONS AND RECEIVABLES rev col ge {RECCX rev col sub 2 div add ISTCY -1 col -1 Halfset RECCX ISTCY -1 rev 1 Halfset Doth 0 ne {/r1 oth 0 gt {oth} {0} ifelse def /r2 oth 0 le {oth abs} {0} ifelse def RECCX oth rev sub 2 div add ISTCY r1 r2 -1 Half} if } if rev col lt {RECCX ISTCY -1 col -1 Halfset RECCX col rev sub 2 div add ISTCY -1 rev 1 Halfset Doth 0 ne { RECCX col oth add 2 div add rev sub ISTCY oth 0 -1 Half} if } if Boxlnsh setgray Boxlnwd setlinewidth RECCX ISTCY REC BOX stroke Linesh setgray Linew setlinewidth newpath RECCX ISTCY moveto Delta 0 rlineto stroke RECCX Delta add cREC abs 2 div add ISTCY -1 cREC 1 Halfset arec 0 ne {/hfill 0 def RECCX Delta add cREC abs add arec abs 2 div add ISTCY -1 arec 1 Halfset /hfill 1 def} if Linesh setgray Linew setlinewidth newpath PAYCX MPWCY moveto PAYCX GDSCY lineto stroke newpath RECCX GDSCY moveto RECCX MPWCY lineto stroke %PRINT TITLE, YEAR, 0 setgray /Helvetica-Bold findfont 24 scalefont setfont Lmargin W add Name stringwidth pop sub Tmargin Delta add moveto Name show Lmargin Tmargin Delta add moveto Year show end