%!PS

% Extracting Text and other content from Acrobat .PDF files #46
% ======================================================================
% by  Don Lancaster

/ggnum 46 store

%  Copyright c 2003 by Don Lancaster & Synergetics, Box 809, Thatcher, AZ, 85552
%  (928) 428-4073 Email: don@tinaja.com Website: http://www.tinaja.com
%  Consulting services available http://www.tinaja.com/info01.html
%  Linking welcome. Reposting expressly forbidden. 

%  All commercial rights and all electronic media rights ~fully~ reserved.
%  Linking usually welcome. Reposting expressly forbidden. Version 1.1 

%  Tutorial on PIC Programming Guidelines for Magic Sinewave Development.

%  IMPORTANT NOTE: Don Lancaster's file gonzo.ps is required for this program.
%  After obvious location mods, uncomment ONE of the following two lines:

(C:\\Documents and Settings\\don\\Desktop\\gonzo\\gonzo.ps) run  % use internal gonzo
%  (A:\\gonzo.ps) run  % use external gonzo

%  NOTE THAT ALL PS FILENAME STRINGS !!!DEMAND!!! DOUBLE REVERSE SLASHES.

%  GONZO20A Guru Gonzo PostScript power tools (Interim release)
%  Includes gonzo justification and layout utilities.

%  Copyright c 1990, 1996, 2001 by Don Lancaster and Synergetics, Box 809,
%  Thatcher Arizona, 5552 (928) 428-4073  don@tinaja.com  support
%  via http://www.tinaja.com  All commercial rights and all electronic
%  media rights **FULLY** reserved. Reposting is expressly forbidden.


%%%%%%%%%%% links menu directory %%%%%%%%%%%%

% This code locks pdfmark commands out of a PostScript printer.

/pdfmark where {pop}{userdict /pdfmark /cleartomark load put} ifelse

% /surl "start url" marks the beginning of a text sequence to be urled. 
% It also paints the text blue...

/surl {mark /blue cvx 0.33 /setgray cvx     % change text to blue
       /currentpoint cvx                    % remember box start
       /urly /exch cvx /store cvx
       /urlx /exch cvx /store cvx
         ] cvx                              % complete deferred command

       printlist exch 3 index exch put      % stuff into gonzo printlist
       exch 1 add exch                      % increment gonzo list count
} def

% /eurl "end url" unmarks the end of a text sequence and sets up
% the pdfmark needed to define the Acrobat web link. 

/eurl {mark                               % start deferred proc      
       exch                               % position url string
       % /black cvx 0  /setgray cvx         % turn blue marker off 
       % maintextcolor /setrgbcolor  cvx    % reset to main text color???

       /aqua cvx /black cvx
       /makeurl cvx                       % defer call of url builder
        ] cvx                             % complete deferred proc

        printlist exch 3 index exch       % stuff into gonzo printlist
        put exch 1 add exch               % increment gonzo list count      
        } def


% /makeurl generates the pdfmark, receiving a {(urlstring) makeurl}.
% Note that it is not called until formatted printlist time...

/urlover 0.2 def                    % fraction of hot area over bounds

/makeurl { /cururlname exch store          % save the url string
            mark                           % start pdfmark

currentfont /ScaleMatrix get 3 get /fsize exch store  % guess height

  /Rect  [ urlx fsize urlover mul sub      % set box left x
           urly fsize urlover mul sub      % set box left y
           currentpoint
           exch fsize urlover mul add exch
           fsize add
           ]
           /Border [ 0 0 0]   % [0 0 0 ] = none; [0 0 2] = debug 
           /Color [ .7 0 0 ]
           /Action <</Subtype /URI /URI cururlname>>
           /Subtype /Link
           /ANN                            % annotation type
           pdfmark                        % call pdf operators    
} def

% /makeurlx generates the box specific pdfmark, receiving 
% a {(urlstring) makeurl}.
% Note that it is not called until formatted printlist time...


/makeurlx { /cururlnamex exch store        % save the url string
            mark                           % start pdfmark

  /Rect  [ xpos                            % set box left x
           ypos 0.9 sub                    % set box left y
           xpos 2.8 add                    % box right x
           ypos 0.9 sub 2.8 add            % box right y
           ]
           /Border [ 0 0 0]   % [0 0 0 ] = none; [0 0 2] = debug 
           /Color [ .7 0 0 ]
           /Action <</Subtype /URI /URI cururlnamex>>
           /Subtype /Link
           /ANN                            % annotation type
           pdfmark                        % call pdf operators    
} def


/maintextcolor {0 0 0 } def

% text link specific data  -- use dictionary instead below


{

/cubic01 {(http://www.tinaja.com/cubic01.asp) eurl} def
/hack62 {(http://www.tinaja.com/glib/hack62.pdf) eurl} def
/increment {(http://www.tinaja.com/text/bezgen3.html) eurl} def
/interpolate {(http://members.bellatlantic.net/~vze2vrva/design.html) eurl } def

/bezmath {(http://www.tinaja.com/text/bezmath.html) eurl } def

/table {(http://www.tinaja.com/psutils/imtable.psl) eurl } def



} pop

% dictionary method

<<    % zzzzzzzzzzzzzzzzzz


/xpdf (http://www.foolabs.com/xpdf/)
/heapsort.pdf (http://www.tinaja.com/glib/heapsort.pdf)
/strconv.pdf (http://www.tinaja.com/glib/strconv.pdf)
/pdfrefman (http://partners.adobe.com/public/developer/pdf/index_reference.html)
/uncompresspdf.api (http://www.tinaja.com/plugins/uncompressPDF.api)

/adobeebooks (http://www.adobe.com/epaper/ebooks/main.html)
/viewpdf1.psl (http://www.tinaja.com/psutils/viewpdf1.psl)

/adobeacrobatsdk 
(http://partners.adobe.com/public/developer/acrobat/sdk/index_doc.html)

/adobejavascriptguide (http://partners.adobe.com/public/developer/acrobat/sdk/index_doc.html#js)
/wordfreq.pdf (http://www.tinaja.com/glib/wordfreq.pdf)

/azauct01.pdf (http://www.tinaja.com/glib/azauct01.pdf)
/startsdk.pdf (http://www.tinaja.com/glib/startsdk.pdf)
/flatevue.pdf (http://www.tinaja.com/glib/flatvue.pdf)
/wordfrq1.psl (http://www.tinaja.com/psutils/wordfrq1.psl)
/otherwf (http://www.mytranslate.com/wordfrequency.htm)
/homonyms (http://www.cooper.com/alan/homonym_list.html)

/wrightauct (http://www.wrightbrosauctioneers.com/)
/a1auct (http://www.a1auctionz.com/)
/auctbroke (http://www.auctionbrokers.us/)
/ronbrunk (http://www.brunksauction.com/)
/americawest (http://www.yellowpages-ads.com/01231827)
/azauctioneers (http://www.arizonaauctioneers.com/)
/dickerson (http://www.cfdauction.com/)
/wsmauct (http://www.westernsalesmanagement.com/)
/asustore (http://property.asu.edu/)
/uaauct (http://pacs.web.arizona.edu/pacs_home.html)
/schoolauct (http://web.archive.org/web/20040229230404/http://www.dist.maricopa.edu/surplus/other.html)
/haynieauct (http://www.chuckhaynieauctions.com/pages/1/index.htm)
/crawfordauct (http://www.tumbleweedauction.com/)
/mangold (http://www.azauctioneers.org/members/8402_OCMangold.asp)
/tingle (http://brucetingleauctioneering.com/)
/countass (http://www.soldyourway.com/)
/southwestliq (http://www.swliquidators.com/)
/maricopacoll (http://www.dist.maricopa.edu/surplus/)
/sierraauct (http://www.sierraauction.com/)
/cunninghamauct (http://www.auctionaz.com/)
/auctappr (http://www.auctionandappraise.com/)
/azauctionassn (http://www.azauctioneers.org/home.asp)
/natauctionassn (http://www.auctioneers.org/)

/azclassifieds (http://www.arizclassified.com/classifieds/index.inn)
/azrepublic  (http://www.azcentral.com/class/merch/) 
/tudailystar (http://classified.tucson.com/index.php?site_name=citizen) 
/enhebay1.pdf (http://www.tinaja.com/glib/enhebay1.pdf)

/busonly.psl (http://www.tinaja.com/psutils/busonly.psl)
/rebound1.psl (http://www.tinaja.com/glib/rebound1.psl)
/funfield.pdf (http://www.tinaja.com/glib/funfield.pdf)
/psar2img.pdf (http://www.tinaja.com/glib/psar2img.pdf)



/dovebid (http://www.dovebid.com)
/michaelfox (http://www.michaelfox.com)
/mjauctions (http://www.mjauctions.com)


/ucc (http://www.law.cornell.edu/ucc/)
/arizlaw (http://www.azleg.state.az.us/ArizonaRevisedStatutes.asp)

/vickrey (http://www.vanderbilt.edu/econ/reiley/papers/VickreyHistory.pdf) 
/whtnu04 (http://www.tinaja.com/whtnu04.asp)
/logrpt01.psl (http://www.tinaja.com/psutils/logrpt01.psl)
/nutilt01.psl (http://www.tinaja.com/psutils/nutilt01.psl)
/nubkg01.psl (http://www.tinaja.com/psutils/nubkg01.psl)
/dodbur01.psl (http://www.tinaja.com/psutils/dodbur01.psl)

/ebayphen.pdf (http://www.tinaja.com/glib/ebayphen.pdf)
/gallery.pdf (http://www.tinaja.com/glib/gallery.pdf)
/histolog (http://www.tinaja.com/glib/histolog.pdf)
/bmfonts (http://www.tinaja.com/glib/bmfonts.pdf)
/dodbur (http://www.tinaja.com/glib/dodgebur.pdf)
/ebayphoto (http://www.tinaja.com/glib/ebayfoto.pdf)
/auctscne (http://www.tinaja.com/glib/auctscne.pdf)
/auctscne.pdf (http://www.tinaja.com/glib/auctscne.pdf)
/stepprep (http://www.tinaja.com/glib/stepprep.pdf)

/phonenums (http://www.switchboard.com/bin/cgiqa.dll?MG=)
/reversephone (http://www.reversephonedirectory.com/)
/scholar (http://www.scholar.google.com/)
/shieldsup (https://grc.com/x/ne.dll?bh0bkyd2)
/sotofamilia (http://cgi6.ebay.com/ws/eBayISAPI.dll?MfcISAPICommand=ViewListedItems&userid=sotofamilia&include=0&since=7&sort=3&rows=100)
/topozone (http://www.topozone.com/)
/thomasreg (http://www.thomasregister.com/)
/uhaul (http://www.uhaul.com/)
/ups (http://www.ups.com/)
/usps (http://www.usps.com/)
/vrane (http://www.vrane.com)
/wayback (http://web.archive.org/)
/whois (http://www.networksolutions.com/cgi-bin/whois/whois)
/grainger (http://www.grainger.com/)
/zipcodes (http://www.usps.com/ncsc/lookups/lookup_zip+4.html)

/mcmaster (http://www.mcmaster.com/)
/mscsupply (http://www.mscdirect.com/)
/natauctioneers (http://www.auctioneers.org/)
/newspapers (http://www.usnpl.com/)
/norfolk (http://www.norfolkandwaay.com)
/quickphrase (http://www.typingmaster.com/index.asp?go=quickphrase)
/myebays (http://www.tinaja.com/glib/myebays.pdf)
/myebays.pdf (http://www.tinaja.com/glib/myebays.pdf)

/moreebay (http://www.tinaja.com/glib/moreebay.pdf)
/moreebay.pdf (http://www.tinaja.com/glib/moreebay.pdf)
/mapsonus (http://www6.mapsonus.com/)
/aafont01 (http://www.tinaja.com/aafont01.asp)
/froogle (http://www.froogle.com)
/govliquidation (http://www.govliquidation.com)
/intershipper (http://www.intershipper.com)
/kelly (http://www.kbb.com)

/paypal (https://www.paypal.com/refer/pal=don%40tinaja.com)
/ebaysell (http://www.tinaja.com/glib/ebaysell.pdf)
/ebaybuy (http://www.tinaja.com/glib/ebaybuy.pdf)
/deja  (http://groups.google.com/googlegroups/deja_announcement.html)
/drhtml (http://www2.imagiware.com/RxHTML/)
/fedex (http://www.fedex.com/us/)

/currency (http://www.xe.net/ucc/)
/terraserver (http://terraserver-usa.com/)
/areacode (http://decoder.americom.com/cgi-bin/decoder.cgi)
/asiansources (http://www.asia.globalsources.com/HOMEPAGES/ASOL/HOME)
/ebaystore (http://stores.ebay.com/synergeticsabeja)
/amazon (http://www.amazon.com/exec/obidos/redirect-home/donlancastersgur/)
/aucres01 (http://www.tinaja.com/aucres01.asp)
/auctlinks (http://www.tinaja.com/auct01.asp#links)
/wayback (http://www.archive.org/web/web.php)
/agilent (http://www.agilent.com)

/fields01.psl (http://www.tinaja.com/glib/fields01.psl)
/fields01.pdf (http://www.tinaja.com/glib/fields01.pdf)

/maxwells (http://hyperphysics.phy-astr.gsu.edu/hbase/electric/maxeq.html#c3)
/muse121 (http://www.tinaja.com/glib/muse121.pdf)
/maxwellbook (http://www.amazon.com/exec/obidos/ISBN=0486606368/donlancastersgurA)


/transtronics (http://www.transtronics.com)
/sigview.pdf (http://www.tinaja.com/glib/sigview.pdf)
/mscal28nd.asp (http://www.tinaja.com/mscal28nd.asp)
/microchip (http://www.microchip.com)
/numschip.pdf (http://www.tinaja.com/glib/numschip.pdf)
/numschip.psl (http://www.tinaja.com/glib/numschip.psl)
/msd28a.asm (http://www.tinaja.com/glib/msd28a.asm)

/lineartechnology (http://www.lineartechnology.com) 

/bmtypewr (http://www.tinaja/com/psutils/bmtypewr.psl)
/distlang.pdf (http://www.tinaja.com/glib/distlang.pdf)
/muse141 (http://www.tinaja.com/glib/muse141.pdf)
/screenthief (http://www.keyscreen.com/KeyScreen(s)5/scrnthf.htm)

/giffont (http://www.tinaja.com/bmfonts/giffont1.bmp)

/f507bg.txt (http://www.tinaja.com/bmfonts/f507bg.txt)
/f507bg.psl (http://www.tinaja.com/bmfonts/f507bg.psl)
/f507bg.pdf (http://www.tinaja.com/bmfonts/f507bg.pdf)
/f607bg.txt (http://www.tinaja.com/bmfonts/f607bg.txt)
/f707bg.txt (http://www.tinaja.com/bmfonts/f707bg.txt)

/imgwrds1.psl (http://www.tinaja.com/psutils/imgwrds1.psl)
/bmfont01 (http://www.tinaja.com/bmfont01.asp)
/expbmp.psl (http://www.tinaja.com/glib/expbmp.pdf)
/kikisu (http://www.tinaja.com/images/bargs/ki710101.jpg)
/hp3336a (http://www.tinaja.com/images/bargs/hp333601.jpg)

/bmtransfer (http://www.tinaja.com/bmfonts/lettex01.bmp)

/histolog.pdf (http://www.tinaja.com/glib/histolog.pdf)
/histolog.psl (http://www.tinaja.com/glib/histolog.psl)

/site01 (http://www.tinaja.com/site01.asp)
/dayproc1.psl (http://www.tinaja.com/psutils/dayproc1.psl)
/trail30.psl   (http://www.tinaja.com/psutils/trail30.psl)
/logrptm1.psl (http://www.tinaja.com/psutils/logrptm1.psl)
/logrpt01.psl (http://www.tinaja.com/psutils/logrpt01.psl)

/powerfit (http://www.tinaja.com/glib/powerfit.pdf)
/pssort (http://www.tinaja.com/glib/pssort.pdf)
/heapsort (http://www.tinaja.com/glib/heapsort.pdf)
/bashpseu (http://www.tinaja.com/glib/bashpseu.pdf)
/pseudo01 (http://www.tinaja.com/pseudo01.asp)
/muse112 (http://www.tinaja.com/glib/muse112.pdf)
/muse113 (http://www.tinaja.com/glib/muse113.pdf)
/muse89 (http://www.tinaja.com/glib/muse89.pdf)
/muse151 (http://www.tinaja.com/glib/muse151.pdf)
/pssecrets (http://www.tinaja.com/glib/pssecrets.pdf)
/bouncy (http://www.tinaja.com/glib/bouncy.pdf)
/vectstep (http://www.tinaja.com/glib/vectstep.pdf)
/muse102 (http://www.tinaja.com/glib/muse102.pdf)
/onesword (http://www.tinaja.com/text/onesword.html)
/emergop2 (http://www.tinaja.com/glib/emergop2.pdf)
/wave01 (http://www.tinaja.com/wave01.asp)
/chaincode (http://www.tinaja.com/text/chain01.html)
/muse152 (http://www.tinaja.com/glib/muse152.pdf)
/atg1 (http://www.tinaja.com/glib/atg1.pdf)
/hack62 (http://www.tinaja.com/glib/hack62.pdf)
/psinscrt (http://www.tinaja.com/glib/psinscrt.pdf)
/fern2img (http://www.tinaja.com/psutils/fern2img.psl)
/thefern (http://www.tinaja.com/psutils/fern2img.pdf)

/cmoscb (http://www.amazon.com/exec/obidos/ISBN%3D0750699434/donlancastersgurA/002-0496817-3688016)

/activecb (http://www.amazon.com/exec/obidos/ISBN%3D075062986X/donlancastersgurA/002-0496817-3688016)
/hack64 (http://www.tinaja.com/glib/hack64.pdf)
/nss (http://www.caves.org)
/sinquest (http://www.tinaja.com/glib/sinquest.pdf)
/askguru  (http://www.tinaja.com/glair01.asp)

/assycb (http://www.amazon.com/exec/obidos/ISBN%3D0672223317/donlancastersgurA/002-3338585-9572047)
/muse105 (http://www.tinaja.com/glib/muse105.pdf)
/muse107 (http://www.tinaja.com/glib/muse107.pdf)
/resbn90 (http://www.tinaja.com/glib/resbn90.pdf)
/hackar3 (http://www.tinaja.com/glib/hackar3.pdf) 
/testdemo (http://www.tinaja.com/glib/FULL60-1.ASC)

/mschips (http://www.tinaja.com/glib/mschips.pdf)
/sigview (http://www.sigview.com)
/ggsigview (http://www.tinaja.com/glib/sigview.pdf)
/mock (http://www.technicalworks.com)
/xtronics (http://www.xtronics.com/)
/oshen (http://www.oshonsoft.com/pic.html)

/heapps01 (http://www.tinaja.com/psutils/heapps01.psl)
/distlangpdf (http://www.tinaja.com/glib/distlang.pdf)
/strconv (http://www.tinaja.com/glib/strconv.pdf)
/fancysort (http://linux.wku.edu/~lamonml/algor/sort)
/presort (http://www.tinaja.com/psutils/presort1.psl)
/psnt (http://www.tinaja.com/glib/psnt.pdf) 
/insort (http://www.tinaja.com/psutils/insort.ps)
/bublsort (http://www.tinaja.com/psutils/bublsort.ps)
/oldstrconv (http://www.tinaja.com/psutils/strconv.html) 

/psdisk03 (http://www.tinaja.com/glib/psdisk03.pdf)
/muse01 (http://www.tinaja.com/muse01.asp)
/gonzopow (http://www.tinaja.com/glib/gonzopow.pdf)
/analogeb (http://www.tinaja.com/glib/analogeb.pdf)
/psdisk03 (http://www.tinaja.com/glib/psdisk03.pdf)
/flut01 (http://www.tinaja.com/flut01.asp)
/clpng (news:///comp.lang.postscript)
/ctpng (news:///comp.text.pdf)

/yahoo (http://www.yahoo.com)
/google (http://www.google.com)
/scodes (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)
/whois (http://www.networksolutions.com/en_US/whois/index.jhtml)
/zekes (http://www.zekes.com)
/logfileformat (http://www.microsoft.com/windows2000/en/server/iis/default.asp?url=/windows2000/en/server/iis/htm/core/iicnvlg.htm)
/logrpt01.psl (http://www.tinaja.com/psutils/logrpt01.psl)
/logrpt01.log (http://www.tinaja.com/psutils/logrpt01.log)
/ex031126 (http://www.tinaja.com/psutils/ex031126.log)


/picup01 (http://www.tinaja.com/picup01.asp)
/webwb01 (http://www.tinaja.com/webwb01.asp)
/muse90 (http://www.tinaja.com/glib/muse90.pdf)
/vismagsn (http://www.tinaja.com/glib/vismagsn.psl)
/vismagsn.pdf (http://www.tinaja.com/glib/vismagsn.pdf)
/msquant (http://www.tinaja.com/glib/msquant.psl)
/optjit01 (http://www.tinaja.com/psutils/optjit01.psl)
/optjit01demo (http://www.tinaja.com/psutils/optjit01.pdf)
/qall01 (http://www.tinaja.com/psutils/qall01.psl)

/deltapat (http://www.tinaja.com/psutils/deltapat.pdf)
/deltapat.pdf (http://www.tinaja.com/psutils/deltapat.pdf)
/deltapat.psl (http://www.tinaja.com/psutils/deltapat.psl)

/mindist1 (http://www.tinaja.com/glib/mindist1.pdf)
/deltams1 (http://www.tinaja.com/glib/deltams1.pdf)
/grabjpg (http://www.tinaja.com/psutils/grabjpg.psl)
/gallery (http://www.tinaja.com/glib/gallery.pdf)
/nutour01 (http://wwww.tinaja.com/nutour01.pdf)

/linkpdf1 (http://www.tinaja.com/glib/linkpdf1.html)

/ebayfoto (http://www.tinaja.com/glib/ebayfoto.pdf)
/jpeg2pdf.html (http://www.tinaja.com/text/jpeg2pdf.html)

/pdf2bmp (http://www.tinaja.com/psutils/pdf2bmp.psl)
/bitmfont (http://www.tinaja.com/psutils/bitmfont.txt)
/antifontpsl (http://www.tinaja.com/psutils/antifont.psl)
/antifonttxt (http://www.tinaja.com/psutils/antifont.txt)

/histog01 (http://www.tinaja.com/psutils/histog01.psl)
/swingtlt (http://www.tinaja.com/glib/swingtlt.pdf)
/newsamoe (news:///alt.marketing/online.ebay) 
/webtrends (http://www.netiq.com/webtrends/default.asp)
/stegan (http://63.140.207.28/books/bkwater.asp)
/nodi (http://www.pages.ebay.com/help/community/notice-infringe2.pdf)
/ebayvero (http://www.pages.ebay.com/help/community/vero-program.html)
/aboutme (http://members.ebay.com/aboutme/abeja/)
/magfill2 (http://www.tinaja.com/psutils/magfill2.psl)
/bmprpt01 (http://www.tinaja.com/psutils/bmprpt01.psl)
/waywere (http://www.tinaja.com/glib/waywere.pdf)

/nikon (http://www.nikon.com)
/bayer (http://www.coreco.com/Web/wbtools3.nsf/0/87fce126f109ea3a05256c7100591c9a?OpenDocument) 

/hewpack (http://www.hp.com)
/auct01 (http://www.tinaja.com/auct01.asp)
/blat01 (http://www.tinaja.com/auct01.asp)
/moreebay (http://www.tinaja.com/glib/moreebay.pdf)
/auctscne (http://www.tinaja.com/glib/auctscne.pdf)






/autourl (http://www.tinaja.com/glib/autourl.pdf)
/msintro1 (http://www.tinaja.com/glib/msintro1.pdf)
/msintrosource (http://www.tinaja.com/glib/msintro1.psl) 
/knockout (http://www.tinaja.com/glib/knockout.bmp) 

/stepsynt (http://www.tinaja.com/glib/stepsynt.pdf)
/msintro1 (http://www.tinaja.com/glib/msintro1.pdf)
/msinprop (http://www.tinaja.com/glib/msinprop.pdf)

/muse106 (http://www.tinaja.com/glib/muse106.pdf)
/muse142 (http://www.tinaja.com/glib/muse142.pdf)
/math01 (http://www.tinaja.com/math01.asp)
/cubic01 (http://www.tinaja.com/cubic01.asp)
/bez4pts (http://www.tinaja.com/glib/bez4pts.pdf)
/muse145 (http://www.tinaja.com/glib/muse145.pdf)
/muse148 (http://www.tinaja.com/glib/muse148.pdf)
/curveft3 (http://www.tinaja.com/psutils/curveft3.psl)
/fuzzybez (http://www.tinaja.com/glib/fuzzybez.pdf)

/bmprpt01 (http://www.tinaja.com/psutils/bmprpt01.psl)
/nowhit01 (http://www.tinaja.com/psutils/nowhit01.psl)
/blender (http://www.tinaja.com/psutils/blender.psl)
/speedup2 (http://www.tinaja.com/glib/speedup2.pdf)
/histog01 (http://www.tinaja.com/psutils/histog01.psl)
/imgviewer32 (http://www.arcatapet.net/imgv32.cfm)
/basis (http://www.tinaja.com/glib/basis.pdf)
/expbmp (http://www.tinaja.com/glib/expbmp.pdf)
/dodbur01 (http://www.tinaja.com/psutils/dodbur01.psl)
/dodgebur (http://www.tinaja.com/glib/dodgebur.pdf) 

/magfill1 (http://www.tinaja.com/psutils/magfill1.psl)
/swingt01 (http://www.tinaja.com/psutils/swingt01.psl)

/before01 (http://www.tinaja.com/images/bargs/marcon01.jpg)
/during01 (http://www.tinaja.com/images/bargs/marcon01.bmp)
/after01 (http://www.tinaja.com/images/bargs/marconz1.jpg)
/repobmp (http://www.tinaja.com/glib/repobmp.pdf)
/basis01 (http://www.tinaja.com/glib/basis.pdf)

/arcata (http://www.arcatapet.net/imgv32.cfm) 


/comparebmp (http://www.designer-info.com/Writing/bmp_tiff_jpeg_gif.htm)
/imagimag (http://www.tinaja.com/glib/imagimag.pdf)
/myebays (http://www.tinaja.com/glib/myebays.pdf)
/stepprep (http://www.tinaja.com/glib/stepprep.pdf)
/aafont01 (http://www.tinaja.com/aafont01.asp)

/here1 (http://village.infoweb.ne.jp/~fwhw1257/study/bmpform.htm)
/here2 (http://www.daubnet.com/formats/BMP.html)

/bittype (http://www.tinaja.com/psutils/pdf2bmp.psl)
/photocombine (http://www.tinaja.com/psutils/blender.psl)

/psl (http://www.tinaja.com/psutils/) % dummy temp

/psl1 (http://www.tinaja.com/psutils/pdf2bmp.psl) 
/psl2 (http://www.tinaja.com/psutils/acatdata.psl) 
/psl3 (http://www.tinaja.com/psutils/catwords.psl) 
/psl4 (http://www.tinaja.com/psutils/graburls.psl) 
/psl5 (http://www.tinaja.com/psutils/blender.psl) 
/psl6 (http://www.tinaja.com/psutils/catools1.psl) 
/psl7 (http://www.tinaja.com/psutils/strconv.html) 
/psl8 (http://www.tinaja.com/psutils/bodcat.psl) 
/psl9 (http://www.tinaja.com/psutils/flatvue1.psl) 
/psl10 (http://www.tinaja.com/psutils/fern2img.psl) 
/psl11 (http://www.tinaja.com/psutils/flutools.psl) 
/psl12 (http://www.tinaja.com/psutils/mscal156q.psl) 
/psl13 (http://www.tinaja.com/psutils/weblogu2.psl) 
/psl14 (http://www.tinaja.com/psutils/pfa2pfb.psl) 
/psl15 (http://www.tinaja.com/psutils/pfb2pfa.psl) 
/psl16 (http://www.tinaja.com/glib/psdisk03.psl) 
/psl17 (http://www.tinaja.com/psutils/disktool.psl) 
/psl18 (http://www.tinaja.com/glib/psinscrt.psl) 
/psl19 (http://www.tinaja.com/glib/pssearch.psl) 
/psl20 (http://www.tinaja.com/text/refsum1.html)
/psl21 (http://www.tinaja.com/text/reflog1.html) 
/psl22 (http://www.tinaja.com/psutils/reflog1.psl) 
/psl23 (http://www.tinaja.com/psutils/refsum1.psl) 
/psl24 (http://www.tinaja.com/psutils/searepl.psl) 
/psl25 (http://www.tinaja.com/psutils/weberru2.psl) 
/psl26 (http://www.tinaja.com/psutils/grabsrch.psl) 
/psl27 (http://www.tinaja.com/psutils/grabrefs.psl) 



/magsn01 (http://www.tinaja.com/magsn01.asp)

/gonzoutils (http://www.tinaja.com/post01.asp#gonzo)

/disktool (http://www.tinaja.com/psutils/disktool.ps)

/elesimp (http://www.tinaja.com/glib/elesimp.pdf)
/tn5603 (http://partners.adobe.com/asn/developer/pdfs/tn/TN5603.Filters.pdf)

/fern2img (http://www.tinaja.com/psutils/fern2img.psl)
/fern     (http://www.tinaja.com/psutils/fern2img.pdf)
/oldfern  (http://www.tinaja.com/psutils/fernx1.pdf) 

/acrosdk (http://partners.adobe.com/asn/developer/acrosdk/main.html)


/refman2 (http://partners.adobe.com/asn/developer/pdfs/tn/psrefman.pdf)
/refman3 (http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf)

/s3011 (http://partners.adobe.com/asn/developer/pdfs/tn/PS3010and3011.Supplement.pdf)

/s2011 (http://ftp.ktug.or.kr/obsolete/info/adobe/devtechnotes/pdffiles/ps2011.supplement.pdf)
/s2012
(http://ftp.ktug.or.kr/obsolete/info/adobe/devtechnotes/pdffiles/ps2012.supplement.pdf)
/s2013
(http://ftp.ktug.or.kr/obsolete/info/adobe/devtechnotes/pdffiles/ps2013.supplement.pdf)
/s2014
(http://ftp.ktug.or.kr/obsolete/info/adobe/devtechnotes/pdffiles/ps2014.supplement.pdf)
/s2015
(http://ftp.ktug.or.kr/obsolete/info/adobe/devtechnotes/pdffiles/ps2015.supplement.pdf)
/s2016
(http://ftp.ktug.or.kr/obsolete/info/adobe/devtechnotes/pdffiles/ps2016.supplement.pdf)


/ghost (http://www.cs.wisc.edu/~ghost/)
/distlang (http://www.tinaja.com/psutils/distlang.html)

/adobepst (http://partners.adobe.com/asn/developer/technotes/)


/maildon (mailto:don@tinaja.com)
/tinaja (http://www.tinaja.com)
/adobe (http://www.adobe.com)
/adobesdk (http://partners.adobe.com/asn/developer/acrosdk/main.html)
/pstrans (http://www.tinaja.com/glib/pstrans.pdf)
/borland (http://www.borland.com/products/downloads/download_cbuilder.html)
/ebay
(http://cgi6.ebay.com/ws/eBayISAPI.dll?ViewSellersOtherItems&userid=abeja&completed=0&sort=2&since=-1&include=0&page=1&rows=100)

/searepl (http://www.tinaja.com/psutils/searepl.psl)




/aasdk (http://www.tinaja.com/plugins/AboutAcrobatSDK.api)
/uncomp (http://www.tinaja.com/plugins/UncompressPDF.api)
/addimage (http://www.tinaja.com/plugins/AddImage.api)
/samplejpg (http://www.tinaja.com/plugins/sample.jpg)
/transparency (http://www.tinaja.com/plugins/Transparency.api)
/threerects (http://www.tinaja.com/plugins/threerects.pdf)
/watermark (http://www.tinaja.com/plugins/Watermark.api)
/verifyurls (http://www.tinaja.com/plugins/VerifyURLS.api)


/flate (http://www.tinaja.com/glib/flatvue.pdf)
/pstrans (http://www.tinaja.com/glib/pstrans.pdf)

/advt01 (http://www.tinaja.com/advt01.asp)
/amlink01 (http://www.tinaja.com/amlink01.asp)
/ng1 (news:///comp.text.pdf)  
/ng2 (news:///comp.lang.postscript)  

/msc++ (http://msdn.microsoft.com/visualc/productinfo/default.asp)

/degub (http://www.tinaja.com/glib/degub.pdf)



/ghostscript (http://www.artifex.com/pressreleases/GS70.htm)


/demox.psl  (http://www.tinaja.com/glib/g9demox.psl)
/demox.pdf  (http://www.tinaja.com/glib/g9demox.pdf)
/demo.pdf   (http://www.tinaja.com/glib/g9demo.pdf)
/flatvue (http://www.tinaja.com/glib/flatvue.psl)

/pdfrefman (http://partners.adobe.com/asn/developer/acrosdk/docs.html)

/psrefman 
(http://partners.adobe.com/asn/developer/technotes/postscript.html)

/pdfmrm
(http://partners.adobe.com/asn/developer/acrosdk/docs.html)

/tipdf
(http://partners.adobe.com/asn/developer/acrosdk/docs.html)

/asdk 
(http://partners.adobe.com/asn/developer/acrosdk)
          
/mtcr (http://support.adobe.com/devsup/devsup.nsf/docs/51864.htm)

/flatvue1 (http://www.tinaja.com/psutils/flatvue1.psl)
/acrob01 (http://www.tinaja.com/acrob01.asp)
/post01 (http://www.tinaja.com/post01.asp)
/info01 (http://www.tinaja.com/info01.asp)
/gurgrm01 (http://www.tinaja.com/gurgrm01.asp)

/energfun (http://www.tinaja.com/glib/energfun.pdf)

{

/tilley (http://www.tilleyfoundation.com)
/mnglobal (http://www.mnglobal.com/energy/pg2.htm)
/keely (http://www.keelynet.com)
/evolve (http://www.evolvedtechnology.com)
/hack64 (http://www.tinaja.com/glib/hack64.pdf)
/hackar3 (http://www.tinaja.com/glib/hackar3.pdf)
/resbn58 (http://www.tinaja.com/glib/resbn58.pdf)
/bppt (http://www.batterypoweronline.com)
/muse112 (http://www.tinaja.com/glib/muse112.pdf)
/muse113 (http://www.tinaja.com/glib/muse113.pdf)
/energfun (http://www.tinaja.com/glib/energfun.pdf)
/bashpseu (http://www.tinaja.com/glib/bashpseu.pdf)


/adobe (http://www.adobe.com)
/netscape (http://www.netscape.com)

/gallypsl (http://www.tinaja.com/galley1.psl)
/gallypdf (http://www.tinaja.com/galley1.pdf)

/atn5150 (http://partners.adobe.com/asn/developer/acrosdk/docs/createpdfapi/pdfmarkReference.pdf)

/nutour (http://www.tinaja.com/bargains/nutour02.pdf)
/nutoursource (http://www.tinaja.com/bargains/nutour02.psl) 

/bwhistle (http://www.tinaja.com/glib/bwhistle.pdf) 

/gonzo1 (http://www.tinaja.com/post01.asp#gonzo)


/barg01 (http://www.tinaja.com/barg01.asp)
/weblib01 (http://www.tinaja.com/weblib01.asp)
/gurgrm01 (http://www.tinaja.com/gurgrm01.asp)


/z1 (http://www.tinaja.com/bargains/thumb/albradz2.jpg)
/z2 (http://www.tinaja.com/bargains/sbtesteq.asp)
/z3 (http://www.tinaja.com/images/bargs/albrad02.jpg)

/z4 (http://www.tinaja.com/bargains/thumb/tutenaz2.jpg)
/z5 (http://www.tinaja.com/bargains/sbphone.asp)
/z6 (http://www.tinaja.com/images/bargs/tutena02.jpg)

/sourceme (http://www.tinaja.com/glib/gallery.psl)
/sourceme2 (http://www.tinaja.com/glib/autourl.psl)

} pop



>> {mark exch /eurl cvx ] cvx def} forall





%%%%%%%%%%%%%%%% New colorizer patches %%%%%%%%%%%%%%%%%%
 

 
/boxgrays 0.899 def
/grayshade boxgrays def
/mastergray boxgrays def
/staytint {0.33 setgray} def
/staytint1 {0.25 setgray} def
/showadgrays true def

/red {0 settint} def

 /Zmacro {staytint /ypos ypos 2 add def 72 300 div setlinewidth xpos 
ypos moveto
txtwide 0 rlineto stroke /ypos ypos -2 add def tintoff} def  % hair rule
 
 /amacro {(zy0)  stringmacro /ypos
  ypos ypara add def  0.33 setgray } def             % start drop cap
 /bmacro {(iFy1) stringmacro /ypos
  ypos ypara add def  black} def             % finish drop cap
 

 
% Gonzo character colorizer

/blueon {mark /blue cvx 0.33 /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def

/blueoff {mark /beige cvx 0  /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def

/tinton {mark 0.33 /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def

/tinton1 {mark 0.25 /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def


/tinton1b {mark beige cvx     % try for aqua after url???

 0.25 /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def

/tinton1a {mark /aqua cvx     % try for aqua after url???

 0.25 /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def

/tinton1p {mark /burple cvx     % try for aqua after url???

 0.25 /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def

/tinton1r {mark /red cvx     % try for aqua after url???

 0.25 /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def

/tinton1a {mark /aqua cvx     % try for aqua after url???

 0.25 /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def





/tinton1b {mark /beige cvx     % try for beige after url???

 0.25 /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def





/tintoff {mark 0 /setgray cvx] cvx
        printlist exch 3 index exch put exch 1 add exch} def


%%%%%%%%%%%%%% COMPACT  VERSION OF  COLORIZER II %%%%%%%%%%%%%%%%%%%%%%

/settint {dup /currenttint exch store 5.999 mul dup floor cvi /&cbar
          exch store dup floor sub /&cwt exch store [
{/setgray [ /dup cvx 0.3 &cwt 0.59 mul add /ge cvx
 [1 /exch cvx &cwt 0.59 mul 0.30 add /sub cvx 1 &cwt sub
 0.59 mul 0.11 add /div cvx /dup cvx 1 &cwt sub /mul cvx
 &cwt /add cvx /exch cvx ] cvx [ &cwt 0.59 mul 0.3 add /div
 cvx /dup cvx &cwt /mul cvx 0] cvx /ifelse cvx /setrgbcolor
 cvx] cvx /def cvx}
{/setgray [/dup cvx 0.59 1 &cwt sub 0.3 mul add /ge cvx
 [1 &cwt sub 0.3 mul 0.59 add /sub cvx &cwt 0.3 mul 0.11 add
 /div cvx /dup cvx &cwt /mul cvx 1 &cwt sub /add cvx /exch cvx
 1 /exch cvx] cvx [1 &cwt sub 0.3 mul 0.59 add /div cvx /dup
 cvx 1 &cwt sub /mul cvx /exch cvx 0] cvx /ifelse cvx
 /setrgbcolor cvx] cvx /def cvx}
{/setgray [/dup cvx 0.59 &cwt 0.11 mul add /ge cvx [&cwt
 0.11 mul 0.59 add /sub cvx 1 &cwt sub 0.11 mul 0.30 add
 /div cvx /dup cvx 1 &cwt sub /mul cvx &cwt /add cvx 1 /exch
 cvx] cvx [0 /exch cvx &cwt 0.11 mul 0.59 add /div cvx /dup cvx
 &cwt /mul cvx] cvx /ifelse cvx /setrgbcolor cvx] cvx
 /def cvx}
{/setgray [/dup cvx 0.59 1 &cwt sub mul 0.11 add /ge cvx [1 &cwt
 sub 0.59 mul 0.11 add /sub cvx &cwt 0.59 mul 0.30 add /div cvx
 /dup cvx &cwt /mul cvx 1 &cwt sub /add cvx 1] cvx [0 /exch cvx
 1 &cwt sub 0.59 mul 0.11 add /div cvx /dup cvx 1 &cwt sub /mul
 cvx /exch cvx] cvx /ifelse cvx /setrgbcolor cvx] cvx
/def cvx}
{/setgray [/dup cvx 0.11 &cwt 0.30 mul add /ge cvx[&cwt 0.30 mul
 0.11 add /sub cvx 1 &cwt sub 0.30 mul 0.59 add /div cvx /dup
 cvx 1 &cwt sub /mul cvx &cwt /add cvx /exch cvx 1] cvx [ &cwt
 0.30 mul 0.11 add /div cvx /dup cvx &cwt /mul cvx /exch cvx 0
 /exch cvx ] cvx /ifelse cvx /setrgbcolor cvx ] cvx /def cvx}
{/setgray [ /dup cvx 0.30 1 &cwt sub 0.11 mul add /ge cvx[ 1
 /exch cvx 1 &cwt sub 0.11 mul 0.30 add /sub cvx &cwt 0.11 mul
 0.59 add /div cvx /dup cvx &cwt /mul cvx 1 &cwt sub /add cvx
 ] cvx [ 1 &cwt sub 0.11 mul 0.30 add /div cvx /dup cvx
 1 &cwt sub /mul cvx 0 /exch cvx] cvx /ifelse cvx /setrgbcolor
 cvx ] cvx /def cvx}

] &cbar get exec exec} bind def

/beige  {0.10 settint} def      % examples of convenience operators
/aqua   {0.52 settint} def
/blue    {0.67 settint} def
/lime     {0.44 settint} def
/burple {0.75 settint} def

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%





/guru { gonzo begin
ps.util.1 begin printerror nuisance begin} def  % 

guru                                           % activate gonzo utilities


50 50 10 setgrid                               % create grid
% 56 61 showgrid  

/setpagefonts {

/cstretch 0.015 def
/sstretch 0.015 def
/font0 /StoneSans-Bold 1.6 gonzofont
/font1 /StoneSans 0.95 gonzofont
/font2 /StoneSans [0.95 0 0.25 0.95 0 0 ] gonzofont
/font4 /StoneSans 0.85 gonzofont
/font3 /StoneSans-Bold 0.85 gonzofont
/font6 /StoneSans-Bold 0.85 gonzofont
/font7 /StoneSans-Bold 1.05 gonzofont   % subheaders

/font8 /StoneSans-Bold [0.65 0 0 0.65 0 0.4] gonzofont

/txtwide 36 store

/yinc 1.2 store
/kern 0.1 store

/pm 1.5 store



aqua 0.33 setgray
font1

black




/amacro { mark /aqua cvx 0.33 /setgray cvx ] cvx
        printlist exch 3 index exch       % stuff into gonzo printlist
        put exch 1 add exch  } def

/bmacro { mark /black cvx ] cvx
        printlist exch 3 index exch       % stuff into gonzo printlist
        put exch 1 add exch  } def

/shiftin {xpos /xposhold exch store /xpos xpos 3 add store} def

/shiftout {/xpos xposhold store} def

/texttop 51 store
/textleft 3 store


/cmacro {aqua 0.25 setgray (znhL7) stringmacro

/xpos xpos 1.7 sub store

/ypos ypos .1 sub def

} def   % left title


/dmacro {black (pL1hz)  stringmacro

/xpos xpos 1.7 add store

/ypos ypos .1 add def} def       % normal text after centered title




/fmacro  % try and fake |
      {mark /gsave cvx 
         /currentpoint cvx
         /moveto cvx
         0.1 /setlinewidth cvx
         0 0.65 /rlineto cvx  /stroke cvx
         /grestore cvx
         ] cvx

       printlist exch 3 index exch put      % stuff into gonzo printlist
       exch 1 add exch                      % increment gonzo list count
} def


} def

setpagefonts

% -2 50.5 (optional header here \274) cl

%% Set document opening conventions. Note DOCVIEW limited.

[/CropBox [0 0 520 620]       % set the wierd size
/PAGES pdfmark 

[ {Catalog} <<
 /ViewerPreferences << /FitWindow true /CenterWindow true >>
 /PageLayout /OneColumn            % continous
 /Pagemode /UseNone                % no thumbs
 /View [/XYZ null null 1 ]         % force 100%
             >>
 /PUT pdfmark



%%%%%%%%%%%%%%%%% START DEMO ART   (not in use) %%%%%%%%%%%%%%%%


%%% Hand patching Info:

%  next available variable is /GS3 
%  transparency gstate is object 2
%  contents stream is object 18  gets  q /GS3 gs (xstuff) Q 
%  be sure to q Q bracket to localize
%  resources stream is object 19    gets  /GS3 2 0 R 


/transoverlay {

   % make a new graphics state
   [ /_objdef {newgsstate} /type /dict /OBJ pdfmark 

   % fill the new overlay graphics state - See PDF manual for details 
   [  {newgsstate}
          <<
            /Type /ExtGState 
            /ca 0.5                % fill transparency is 0.5
            /CA 0.5                % stroke transparency is 0.5
            /BM /Normal 
            /AIS false 
            /OP false 
            /OPM 1 
            /op true 
           >> /PUT

           pdfmark

    % start a Begin Picture graphics overlay subroutine...
    [ /BBox [0 0 1000 1000 ] /_objdef {overlaypix} /BP pdfmark

    % fill the Begin Picture graphics overlay Xobject subroutine...

          0 0.5 1 setrgbcolor     % on the aqua side of blue
          4 4 6 6 rectfill

    % complete the Begin Picture graphics overlay Xobject...
    [ /EP pdfmark

     } def


% Write a two squares program...

  /twosquares { gsave translate
                1 0.5 0 setrgbcolor            % red side of orange
                2 2 6 6 rectfill               % do background opaque box

                [ {overlaypix} /SP pdfmark     % show foreground transparent box

                grestore} def


%  Distill the two squares program. Initially use a BARE Distiller Job
%  Options that has no compression, no embedded fonts, and little else 


save /snap1 exch store
  
%%%  transoverlay                          % create new objects
%%%  14 17.5 twosquares
  
 snap1 restore

%%%%%%%%%%%% END DEMO %%%%%%%



%%%%%%%%%%%% PHOTO INSERTS %%%%%%%%%%

% When photos are needed, they are inserted here. Comment out otherwise.

%%%%%%%%% photo links %%%%%%%%%

% combined autopos jpeg conversion and hotlink:

/autofigure1 {save /af1 exch store  xpos ypos yinc add translate
              6 0.65 923 526 .025      % xpos ypos xres yres pixscale
              (http://www.tinaja.com/images/bargs/flu84501.jpg)   % url first
              (C:\\windows\\desktop\\aaraw_pix\\flu84501.jpg)
              jpegimageprocwithlink
              af1 restore} store

/autofigure2 {save /af2 exch store  xpos ypos yinc add translate
              8.5 -2 790 672  .020     % xpos ypos xres yres pixscale
              (http://www.tinaja.com/images/bargs/tek40841.jpg)   % url first
              (C:\\windows\\desktop\\aaraw_pix\\tek40841.jpg)
              jpegimageprocwithlink
              af2 restore} store

/autofigure3 {save /af3 exch store  xpos ypos yinc add translate
              12 0.6 530 816  .018     % xpos ypos xres yres pixscale
              (http://www.tinaja.com/images/bargs/sencri01.jpg)   % url first
              (C:\\windows\\desktop\\aaraw_pix\\sencri01.jpg)
              jpegimageprocwithlink
              af3 restore} store

/autofigure4 {save /af4 exch store  xpos ypos yinc add translate
              12 -0.4 422 612  .024      % xpos ypos xres yres pixscale
              (http://www.tinaja.com/images/bargs/abspar01.jpg)   % url first
              (C:\\windows\\desktop\\aaraw_pix\\abspar01.jpg)
              jpegimageprocwithlink
              af4 restore} store



/jpegimageprocwithlink {   % hoffset voffset hres vres

save /snap2 exch def

/infilename exch store  % grab passed pix file
/inurllink exch store   % grab link filename
/photoscale exch store  
/vpixels exch store
/hpixels exch store
 translate  % adjust position for final figure ???

inurllink
setareaurl    % autolink sizing

     /DeviceRGB setcolorspace                %  pick color model

     0 0 translate                           %  set page position
     hpixels vpixels scale                   %  magnify unit square


     photoscale dup scale
 

     /infile infilename (r) file def         %  establish input read file

     /Data {infile /DCTDecode filter} def    %  define a data source

     <<                                      % start image dicationary
            /ImageType 1                     % always one
            /Width hpixels                   % JPEG width in pixels
            /Height vpixels                  % JPEG height in pixels
            /ImageMatrix [hpixels
                          0 0 
                          vpixels neg
                          0
                          vpixels ]  


            /DataSource Data           % proc to get filtered JPEG      
           /BitsPerComponent 8              % color resolution
            /Decode [0 1 0 1 0 1]            % per red book 4.10
            >>

     image                                   % call the image operator


ypos snap2 restore /ypos exch def
} def

/setareaurl {    % for auto include routine

          /cururlname exch store

           mark                           % start pdfmark
           /Rect  [ 0 0 

              hpixels photoscale mul 
              vpixels photoscale mul  
                  ]
           /Border [ 0 0 0]   % [0 0 0 ] = none; [0 0 2] = debug 
           /Color [ .7 0 0 ]
           /Action <</Subtype /URI /URI cururlname>>
           /Subtype /Link
           /ANN                            % annotation type
           pdfmark                        % call pdf operators  
 
} def


%%%%%%%%%%% data for quantization figures %%%%%%%


/raw 
[0.0198613 3.75812 0.0300583 0.968559 0.0400088 0.625545 0.0500071
0.473332 0.0598378 0.508493 0.0701048 0.618866 0.080067 0.574973
0.0900779 0.328987 0.0999211 0.358846 0.109939 0.13398 0.119912
0.183206 0.129936 0.374792 0.14006 0.286128 0.150091 0.206733
0.160075 0.190605 0.169949 0.196913 0.17999 0.136811 0.189984
0.223428 0.200178 0.130515 0.209919 0.279305 0.21986 0.179522
0.230087 0.167779 0.239816 0.127177 0.250051 0.18394 0.260079 0.22457
0.269779 0.120137 0.279989 0.142624 0.290027 0.124499 0.299737
0.111797 0.309994 0.123014 0.319982 0.268029 0.329976 0.207562
0.339971 0.0887317 0.349912 0.141557 0.359975 0.0943557 0.369923
0.0895733 0.379933 0.198241 0.389968 0.204985 0.399985 0.107935
0.409949 0.0945179 0.419974 0.125101 0.429965 0.0976423 0.440214
0.0904647 0.449999 0.108261 0.459981 0.0657491 0.470024 0.206909
0.479727 0.0390659 0.489996 0.0464662 0.50005 0.208427 0.509765
0.0436721 0.520046 0.0589122 0.53008 0.0933284 0.540058 0.122129
0.550131 0.108932 0.55981 0.0608129 0.570111 0.0552627 0.579854
0.0621947 0.590107 0.139442 0.59986 0.0498109 0.610232 0.103161
0.619883 0.129033 0.630016 0.0849617 0.640199 0.0601919 0.649749
0.0799222 0.660031 0.0541167 0.669983 0.113527 0.679712 0.0480973
0.690061 0.089419 0.700078 0.107595 0.709859 0.0710718 0.720131
0.041575 0.730196 0.123105 0.740089 0.0584097 0.749848 0.0861482
0.75993 0.0515622 0.769942 0.0761598 0.779974 0.118253 0.789996
0.0481484 0.799986 0.0874933 0.809957 0.0973124 0.820064 0.0534035
0.830362 0.025697 0.83973 0.0399598 0.850034 0.049165 0.859829
0.0851767 0.869827 0.0404494 0.880229 0.0435597 0.889938 0.0723645
0.899933 0.0190775 0.910168 0.0616833 0.919942 0.0725692 0.929991
0.0399983 0.940013 0.102806 0.950018 0.0518368 0.960034 0.0318331
0.970059 0.0823362 0.980036 0.0436783 0.989837 0.0463608 1.00013
0.0562829
  ] def



/ex54 [

5.87906 19.9758 5.38078 23.2179 6.61461 22.45 6.48865 23.8991
7.79373 21.6975 7.66747 18.3412 7.16927 15.7147 7.0433 23.5588
7.89268 23.6885 6.44363 24.0582 6.31744 20.4902 5.81917 24.1383
7.16713 21.0382 6.66901 18.9723 6.54259 11.4618 6.04431 22.422
6.99837 23.9206 7.72186 17.6438 7.22366 19.559 7.0974 19.865 8.16101
21.0954 7.66296 21.6132 8.38593 23.3011 8.45734 21.8227 8.33099
20.4936 7.83295 23.6901 9.12148 21.6428 8.99521 24.1041 9.0123
22.5552 10.0761 24.016 9.94987 23.6423 9.4516 18.8 10.3011 18.3618
10.175 15.7533 9.67651 15.8403 10.7406 22.2248 11.2952 23.4363
8.38531 18.1067 9.44916 24.1021 8.95065 19.521 8.82462 16.3613
8.32649 22.8011 9.67415 22.9247 9.1758 23.1169 9.04961 18.7033
10.0041 21.3686 9.50554 20.3098 9.37965 23.1915 10.229 20.7535
9.73083 24.3928 10.7951 23.4553 10.6687 20.0753 10.1704 22.7069
10.9646 20.4496 10.8385 20.1683 11.4042 19.4907 12.0175 23.4256
11.5192 22.1005 12.5835 16.0818 12.4572 16.8864 11.9588 13.1062
12.809 19.7136 12.6826 18.5011 12.1842 20.9156 13.2483 19.5923
13.1218 24.0439 13.8034 21.8302 10.6676 23.761 10.8927 22.8588 11.957
21.8607 11.4587 19.2204 11.3322 17.3188 12.5117 19.7264 12.0132
20.9341 13.1763 23.3152 13.2472 20.7672 13.1206 23.1287 13.4724
23.3126 13.3461 23.9651 13.9117 18.537 13.8022 22.5502 14.2414
20.9416 14.4669 13.1742 13.1752 23.9257 13.6145 24.4108 13.8398
22.6699
    ] store



/ex54good [

6.54259 11.4618
11.9588 13.1062
14.4669 13.1742  

10.175 15.7533 
9.67651 15.8403 

10.0041 21.3686 
] store


/ex54orig [ 9.88396 24.4257 ] store

/ex54want [ 10 0 ] store











/shook [
0.00934937 1.51076 0.0210324 0.978672 0.0312886 0.477679 0.0406482
0.318167 0.0493669 0.337353 0.0617085 0.203131 0.0692016 0.259957
0.0798052 0.229666 0.0885358 0.271299 0.100559 0.1726 0.109939
0.13398 0.118677 0.119296 0.131049 0.187404 0.140698 0.134313
0.149444 0.129195 0.158846 0.106101 0.170589 0.0965049 0.179351
0.0914561 0.189653 0.129042 0.201417 0.0546426 0.210828 0.108576
0.218951 0.100261 0.230727 0.120773 0.241057 0.103841 0.24984
0.0973585 0.259094 0.114175 0.268537 0.0808775 0.281232 0.051974
0.289386 0.0641827 0.301193 0.0942731 0.310907 0.0954356 0.31907
0.0730116 0.330889 0.0677774 0.339699 0.0797174 0.350554 0.0727672
0.360616 0.0859002 0.369923 0.0895733 0.379679 0.0823565 0.391137
0.0758395 0.399965 0.0916116 0.411197 0.0716472 0.419389 0.052739
0.430883 0.0744991 0.441523 0.0643956 0.450642 0.0651337 0.461231
0.0500311 0.470357 0.0682797 0.479727 0.0390659 0.491163 0.0464662
0.500383 0.0701265 0.509765 0.0436721 0.520046 0.0589122 0.529436
0.0621049 0.540979 0.065531 0.549818 0.0659652 0.55981 0.0608129
0.570111 0.0552627 0.579854 0.0621947 0.589296 0.0497526 0.59986
0.0498109 0.610207 0.0454799 0.620493 0.0516502 0.630849 0.0588497
0.639051 0.034206 0.649639 0.0456603 0.660009 0.0522574 0.670628
0.0426991 0.679712 0.0480973 0.69034 0.0477716 0.699467 0.0308037
0.711012 0.0686215 0.720131 0.041575 0.729513 0.0498212 0.739846
0.0430787 0.750499 0.0405623 0.76086 0.0438831 0.770257 0.0497878
0.780553 0.0441616 0.789662 0.0457397 0.800267 0.0325654 0.809451
0.0440074 0.820078 0.0403837 0.830362 0.025697 0.840997 0.0332166
0.85014 0.0337785 0.860449 0.0360605 0.869889 0.015046 0.880467
0.0360463 0.890767 0.0317396 0.899933 0.0190775 0.910273 0.0316686
0.919661 0.0263476 0.929956 0.0388174 0.939357 0.032368 0.949701
0.027215 0.960034 0.0318331 0.970334 0.0351219 0.979745 0.0379512
0.990337 0.0386641 1.00065 0.0439439
   ] store





%%%%%%%%%%%%% ordinary tracking figures 

/figureoneauto {


 /figadvance 13 store

   save /snap2 exch store xpos 2 add ypos figadvance sub translate
   % /linestring 20000 string def 



   figure1
   snap2 restore 

   /ypos ypos figadvance sub yinc sub 

% 7 add  

store  % temp bug removal?
   
   } store



/figure1aaa 

{



save /snap1aaa exch store

11 32.6 translate % huh?



% BIG GREEN A
% =================================================================


 % (C:\\windows\\desktop\\gonzo\\gonzo.ps) run  % use internal gonzo
%  (A:\\gonzo.ps) run  % use external gonzo

% gonzo begin
% ps.util.1 begin
% nuisance begin


gsave aqua 0.3 setgray
font6
-3 5 (desired\ncharacter) cc
20.2 5 (best\npixel fit) cc


grestore

/font1 /Helvetica-Bold 60 gonzofont

% 100 100 2 setgrid

0.12 dup scale 

0 0 mt 80 pu 60 pr 80 pd closepath

 0.75 1 0.75 setrgbcolor fill 






newpath








 0 1 0 setrgbcolor 

0 0 mt 80 pu 60 pr 80 pd closepath
0.8 setlinewidth stroke


newpath
line1
[{0 0 mt 80 u}10 6  ] xrpt
[{0 0 mt 60 r}10 8  ] yrpt


0.4 dup dup setrgbcolor

/font2 /Helvetica-Bold [90 0 0 112 0 0] gonzofont

font2

30 0 (A) cc

%%% second figure

85 0 translate % was 90



% character is 0.4 0.4 0.4 hardwired
% background is 0.75 1 0.75 


/adjgam { 4 mul floor cvi [0 0.33 0.66  1] exch get } store



/makeshade {   %adjgam


/val exch store

    1 val sub -0.35 mul 0.75 add
    1 val sub  -0.6 mul 1 add
    1 val sub -0.35 mul 0.75 add  setrgbcolor


 0 0 mt 10 pu 10 pr 10 pd closepath fill 
 10 0 translate

           } store

gsave
0 70 translate

[ 0.999 0.999 0.100 0.100 0.999 0.999 ] { makeshade} forall

-60 -10 translate 

[ 0.999 0.800 0.007 0.007 0.800 0.999 ] {makeshade} forall

-60 -10 translate
[ 0.999 0.559 0.189 0.189 0.559 0.999 ] {makeshade} forall

-60 -10 translate

[ 0.999 0.282 0.432 0.432 0.282 0.999 ]{makeshade} forall
-60 -10 translate

[ 0.969 0.037 0.632 0.632 0.037 0.969 ]{makeshade} forall
-60 -10 translate

[ 0.779 0.000 0.000 0.000 0.000 0.779 ]{makeshade} forall
-60 -10 translate

[ 0.464 0.144 0.649 0.649 0.144 0.464 ]{makeshade} forall
-60 -10 translate

[ 0.182 0.439 0.999 0.999 0.439 0.182 ]{makeshade} forall


grestore




 0 1 0 setrgbcolor 

0 0 mt 80 pu 60 pr 80 pd closepath
0.8 setlinewidth stroke




newpath
line1
[{0 0 mt 80 u}10 6  ] xrpt
[{0 0 mt 60 r}10 8  ] yrpt


snap1aaa restore

} store








/figure1x {  


    


     /circproc {gsave 
                /arraynum exch store 
                /circvalue exch store 
                /circshade exch store translate

 newpath       


                0 0 0.8 0 360 arc
    

    /font1 /StoneSans-Bold 0.9 gonzofont
    /font2 /Helvetica-Bold 0.7 gonzofont

    gsave circshade setgray fill grestore

    line2 0.33 setgray stroke

    font1

 0 -0.3 circvalue cc  
   newpath
    black font2 



0 -1.5 arraynum cc 

 0 0 (              ) cc    % eliminate strange string reuse bug?


         grestore                 } store




 %  32 9 showgrid


line1 



[{0 0  mt 1 2 rlineto 1 -2 rlineto stroke} 4 8 ] xrpt
[{1 2 mt 2 2 rlineto 2 -2 rlineto stroke} 8 4 ] xrpt
[{3 4 mt 4 2 rlineto 4 -2 rlineto stroke} 16 2 ] xrpt
7 6 mt 8 2 rlineto 8 -2 rlineto stroke


{
[-null- (52)  (51) (41)  
 (50) (30) (31) (40)  
(21) (42) (10) (22) (02) (00) (20) (32) 

(01) (12) (11) (21)]
} pop


0 8 0.85 ( ) (00) circproc

15 8 0.7 (52)(01) circproc

7  6 0.7 (51) (02) circproc
23 6 0.7 (41) (03) circproc




3  4 0.75 (50) (04) circproc
11 4 0.75 (30) (05) circproc
19 4 0.75 (31) (06) circproc
27 4 0.75 (40) (07) circproc

1  2 0.75 (21) (08) circproc
5  2 0.75 (42) (09) circproc
9  2 0.75 (10) (10) circproc
13  2 0.75 (22) (11) circproc
17  2 0.75 (02) (12) circproc
21  2 0.75 (00) (13) circproc
25  2 0.75 (20) (14) circproc
29  2 0.75 (32) (15) circproc

0 -.3 0.75 (01) (16) circproc
2 -.3 0.75 (12) (17) circproc
4 -.3 0.75 (11) (18) circproc
6 -.3 0.75 (21) (19) circproc
8 -.3 0.85 ( ) (20) circproc
10 -.3 0.85 ( ) (21) circproc
12 -.3 0.85 ( ) (22) circproc
14 -.3 0.85 ( ) (23) circproc
16 -.3 0.85 ( ) (24) circproc
18 -.3 0.85 ( ) (25) circproc
20 -.3 0.85 ( ) (26) circproc
22 -.3 0.85 ( ) (27) circproc
24 -.3 0.85 ( ) (28) circproc
26 -.3 0.85 ( ) (29) circproc
28 -.3 0.85 ( ) (30) circproc
30 -.3 0.85 ( ) (31) circproc





 font2 0 5.85 ((reserved)) cc

26.5 7.6 (xx = array address)cc


 0 0 (                  ) cc  % get rid of string bug


  } store






/figure1f {

 

save /snap3 exch def

/linestring 1000 string store


9 1 translate % position on page


%%%%%%%%%%%%%%%%%%%



/sdat
[
11.98 10.02 11.38 10.47 10.7 10.13 11.65 10.41 11.68 10.1 11.82 10.38 11.07 10.13 11.13 10.16 10.95 10.44 9.97 10.1 11.53 10.04 12.0 10.28 11.35 10.49 11.2 9.47 9.24 9.75 10.3 10.03 11.42 9.65 9.91 9.41 8.61 9.69 11.01 9.62 12.3 9.38 11.13 9.74 9.76 9.4 8.93 9.68 9.77 9.72 10.33 10.0 9.66 9.34 9.69 9.62 8.33 9.66 9.83 9.93 11.37 9.69 11.07 9.97 9.71 9.55 9.49 9.82 9.94 9.58 7.78 9.86 9.1 10.14 10.73 9.9 10.17 10.17 10.74 9.76 8.24 9.52 6.75 9.8 9.16 10.08 7.76 9.83 8.03 10.11 11.37 10.15 9.75 9.46 9.43 9.74 7.95 9.77 9.14 10.05 11.05 9.81 10.8 9.48 11.96 9.24 8.28 9.52 7.41 9.8 7.55 9.83 8.36 10.11 7.94 9.45 8.08 9.73 7.69 9.49 5.22 9.77 7.5 10.05 8.58 9.8 8.27 10.08 8.46 9.43 7.47 9.71 7.87 9.74 8.53 10.02 11.58 9.76 11.4 9.7 11.83 9.66 11.44 9.7 9.71 9.97 10.87 10.25 11.64 10.01 9.81 9.63 8.69 9.91 8.75 9.95 9.08 10.22 12.21 10.5 11.57 10.26 10.94 9.57 10.73 9.85 8.71 9.88 9.89 10.16 11.86 9.97 9.43 9.91 8.8 9.94 9.59 10.22 9.57 9.57 9.77 9.85 8.6 9.6 6.62 9.88 8.63 10.16 8.75 9.92 8.55 10.19 11.42 10.47 9.09 9.54 8.28 9.82 7.82 9.85 8.58 10.13 11.75 9.89 12.49 10.44 11.69 9.79 11.75 10.03 12.35 9.65 10.9 9.97 12.31 8.99 12.23 9.24 12.49 9.13 11.21 9.44 11.38 8.83 8.94 9.1 9.54 9.38 9.94 9.14 8.7 9.42 12.04 9.45 11.01 8.76 9.37 9.04 10.72 9.32 8.15 9.08 7.71 9.35 9.4 9.39 9.61 9.01 9.49 9.33 11.21 9.6 11.11 9.1 9.92 9.04 8.03 9.07 8.13 9.35 11.33 9.63 9.08 9.39 11.48 8.97 7.58 9.01 8.67 9.29 8.24 9.05 7.17 9.32 9.78 9.6 11.66 8.67 10.44 8.95 11.85 8.71 8.89 8.98 8.86 9.26 11.78 9.54 9.95 9.3 11.03 9.28 12.11 9.18 8.21 9.22 8.95 9.49 12.44 8.97 8.52 9.25 7.16 9.53 9.52 9.81 10.33 9.57 10.16 8.88 8.46 9.15 6.04 9.19 5.59 9.47 9.3 9.74 9.28 9.23 6.83 9.5 8.24 9.78 12.24 10.06 11.58 9.09 10.43 8.85 7.67 9.13 8.34 9.4 8.25 9.16 6.68 9.44 9.05 9.72 11.67 9.49 9.74 9.53 11.95 9.8 12.31 9.84 9.26 9.15 9.79 8.91 6.2 9.19 6.45 9.46 10.28 9.74 8.69 9.22 6.67 9.5 8.63 9.78 11.48 9.54 8.31 8.85 5.26 9.12 6.86 9.4 11.27 9.68 10.02 8.88 4.95 9.16 3.11 9.44 7.46 9.71 10.29 9.2 7.54 9.47 8.28 9.75 11.89 10.03 8.69 9.06 10.53 9.34 9.57 8.82 5.65 9.1 5.75 9.37 9.75 9.65 8.54 9.13 6.32 9.41 8.24 9.69 11.18 9.72 9.94 9.09 11.48 9.03 10.96 9.07 9.26 9.64 12.02 9.54 8.09 9.3 7.86 9.58 7.97 9.62 9.3 9.89 12.24 9.65 9.16 9.24 9.82 9.52 8.92 9.28 7.6 9.55 9.84 9.83 11.54 9.64 8.44 9.3 8.73 9.58 9.73 9.33 8.09 9.61 9.85 9.89 9.83 8.96 7.54 9.24 8.82 9.51 6.32 9.27 5.18 9.55 8.63 9.83 7.76 9.59 8.59 9.86 10.04 9.17 6.6 9.21 6.82 9.49 8.43 9.25 6.3 9.52 8.32 9.8 10.84 9.56 11.78 9.55 10.32 9.52 11.98 9.14 12.38 9.41 11.8 9.73 12.24 9.39 10.69 9.38 12.33 9.94 9.9 9.64 11.25 8.43 10.49 8.71 9.45 8.74 9.96 9.02 11.36 9.06 11.21 9.0 11.02 8.71 9.4 8.74 10.34 9.02 11.9 8.37 12.24 8.64 8.73 8.68 10.53 8.96 9.35 8.71 9.37 8.99 11.52 8.34 9.66 8.65 11.45 8.97 12.43 8.95 11.22 8.61 9.75 8.88 11.17 9.16 10.05 8.92 9.83 9.2 12.36 9.47 10.43 8.54 9.7 8.82 7.73 8.86 8.45 9.13 10.5 8.89 9.35 9.17 12.32 8.76 8.77 8.79 9.33 8.83 8.97 9.11 10.16 8.58 7.91 8.85 9.1 9.13 10.02 8.89 9.3 9.17 8.44 8.51 6.84 8.79 9.12 9.07 6.66 8.83 6.81 9.1 9.71 9.14 9.89 8.45 9.46 8.73 9.45 8.49 6.83 8.76 8.05 9.04 9.41 8.8 8.51 9.08 11.68 9.07 11.94 8.7 11.47 8.73 11.83 9.01 11.46 9.31 11.69 8.69 9.44 8.97 10.24 9.28 9.95 8.94 9.7 9.22 12.25 9.5 9.8 8.97 10.86 9.24 9.96 8.63 8.74 8.9 7.76 8.94 8.0 9.22 9.91 9.25 11.05 8.56 10.74 8.84 9.99 8.6 7.67 8.88 8.87 9.16 9.33 8.91 8.52 9.19 10.92 9.47 11.41 8.85 11.84 9.13 11.39 8.99 12.23 8.46 10.76 8.43
% patch dots follow

4.3 9.3
5 9.4
6.3 8.8
6.5 9.7
5.8 9.7
6 9.2
6 9.6
7.2 8.8
7.2 9
7.2 9.7
7.3 9.9
8 8.6
9 8.5
10.5 9.6
10.7 10
11 10.3

 ] store

% Actual dots plotted = 334 + patches.

% 100 100 10 setgrid  % only standalone



1.15 dup scale

10 10 showgrid

0.4 0.8 0.8 setrgbcolor 1 setlinecap 1 setlinejoin
line3 0 0 mt 10 u 10 r 10 d 10 l

0.25 0.25 0.25 setrgbcolor

gsave 0 0 mt 0 10 rlineto 10 0 rlineto 0 -10 rlineto closepath clip

gsave -3.2 -0.8 translate 0.87 dup scale

0 2 sdat length 2 sub {/cposn exch store

sdat cposn 1 add get 
sdat cposn get   


1 0 0 setrgbcolor
0.2 setgray   0.9 settint 0.40 setgray

     mt dot

} for
grestore
grestore

/cstretch 0 store
/sstretch 0.015 store


black 


/font1 /Helvetica-Bold 0.9 gonzofont
font1






5 -1.3 (amplitude) cc

gsave -0.8 5 translate 90 rotate
0 0 (distortion) cc
grestore








ypos snap3 restore /ypos exch def  
} def

%%%%%%



/figure1dfhgd {

 /figadvance 10 store


save /snap3 exch def

/linestring 1000 string store

%%%%%%%%%%%%%%%%%%%

electronics begin

bestgray


 -0.0 -2.6 translate  % reposition on page

% 0 0 10 setgrid  already there
 %  33 14 showgrid


/cstretch 0.02 def
/sstretch 0.0 def
/kern 0.1 def
/yinc 1.0 def

/red {0 settint} def
/blue {0.67 settint} def
/purple {0.75 settint} def

/font0 /Helvetica-Bold [1.2 0 0 1 0 -0.2] gonzofont

/font0 /Helvetica-bold [1 0 0 0.8 0 0 ] gonzofont

/font1 /Helvetica 0.75 gonzofont
/font4 /Helvetica 0.6 gonzofont
/font3 /Helvetica-Bold 0.75 gonzofont
/font2 /Helvetica-Oblique 0.75 gonzofont
/font5 /Helvetica-Bold 1.1 gonzofont
/font6 /Helvetica [2 0 0 1.4 0 0] gonzofont
/font7 /Helvetica-Oblique 0.75 gonzofont
/font8 /Symbol 0.75 gonzofont

/font9 /Helvetica [.6 0 0 .6 -.15 .4] gonzofont

/font- /Helvetica-Bold [0.4 0 0 0.55 0 0] gonzofont 

/kern 0.15 def
/tabs [16.5] def
/txtwide 29 def
font1

/tabs [17.5] def

font1

/yinc 0.9 def
line1


bestgray
black










22 6 mt 3 d 5 rx circ1
    26 3 mt rarrow

21 6 mt 1 d 6 rx circ1
    26 5 mt rarrow

20 6 mt 1.5 d 4 rx 2 ux 3 r circ1
    26 6.5 mt rarrow


19 6 mt 2 d 5.5 rx 4 ux 2.5 r circ1
    26 8 mt rarrow



17 10 mt 1 u 5 l 8 d 4 l circ1
     9.5 3 mt rarrow  % low priority




18 6 mt 1.5 d ground


17 6 mt 2.5 d 7 lx  1 u 2 l circ1
       9.5 4.5 mt rarrow

16 6 mt 2 d 5.5 lx 2 u 2.5 l circ1
       9.5 6 mt rarrow

15 6 mt 1.5 d 4 lx 3 u 3 l circ1
       9.5 7.5 mt rarrow

14 6 mt 1 d 2.5 lx 4 u 3.5 l circ1
      9.5 9 mt rarrow









21 10 mt 2 ux 3 r 2 d 3 r circ1
     26 13 mt rarrow

20 10 mt 2.5 u 4.5 r 1 d 2.5 r circ1
     26 11.5 mt rarrow

19 10 mt 3 u 8 r circ1
     26 10 mt rarrow

18 10 mt 1.5 u circ1   % +5v



16 10 mt 3 ux circ1
     16 12.3 mt darrow

15 10 mt 2 ux 7 l circ1
      9.5 12 mt rarrow


14 10 mt 1.5 ux 2.5 l 1 d 3.5 l circ1
       9.5 10.5 mt rarrow



beige

14 6 moveto
18
(MS28D-05X)
(IN1 IN0 XIN IN6 +5V /DA /DB /DC NC)
(IN2 IN3 IN4 IN5 GND DA DB DC SYNC)

dipdraw

font4


22 10.65 (NC) cc


font1
18 12 (+5V) cc

  

font1

/overstrikeht 0.55 store

27.7 13 0.3 sub  (Delta "A" complement) cl
27.7 11.5 0.3 sub (Delta "B" complement) cl
27.7 10 0.3 sub (Delta "C" complement) cl


27.7 8 0.3 sub  (Delta "A" true output) cl
27.7 6.5 0.3 sub (Delta "B" true output) cl
27.7 5 0.3 sub (Delta "C" true output) cl
27.7 3  0.3 sub (Zero degrees sync) cl



16 14.7 (10 MHz per 60 Hz) cc
16 13.8 (input clock ref) cc

7.3 2.7 (high ~|jOR|j~ 0-100 amp bit 6) cr
7.3 4.2 (high ~|jOR|j~ 0-100 amp bit 5) cr
7.3 5.7 (high ~|jOR|j~ 0-100 amp bit 4) cr
7.3 7.2 (slew up ~|jOR|j~ 0-100 amp bit 3) cr
7.3 8.7 (slew down ~|jOR|j~ 0-100 amp bit 2) cr
7.3 10.2 (step up ~|jOR|j~ 0-100 amp bit 1) cr
7.3 11.7 (step down ~|jOR|j~ 0-100 amp bit 0) cr




end
ypos snap3 restore /ypos exch def  
} def


%%%%%%%%%%%%%%



/figure2 {

 /figadvance 10 store


save /snap3 exch def

/linestring 1000 string store

%%%%%%%%%%%%%%%%%%%

electronics begin

bestgray

line1

0 -1 translate  % reposition on page

% 0 0 10 setgrid  already there
%    33 14 showgrid

/onecoil {  0 0 mt 1 pr 8 hcoil 0.9 r} store


/delta {gsave translate 
        gsave onecoil grestore
        gsave 60 rotate onecoil grestore
        gsave 4 6.928 translate -60 rotate onecoil grestore
        0 0 mt circ1  4 7 mt circ1  8 0 mt circ1
         grestore } store


/box35 {gsave /callout exch store translate 0 -1.5 mt 2.5 pl 3 pu 5 pr 3 pd closepath
        gsave 0.8 setgray fill grestore 
        gsave 0.33 setgray line3 stroke grestore 
        black 0 0.1 callout cc grestore} store 

/font1 /Helvetica 0.8 gonzofont
/font2 /Helvetica-Bold 1 gonzofont

/hbd {gsave translate   0 2.5 mt 5 d ground 0 2.5 mt circ1   /yinc 0.9 store
       0 0 mt 3 l 6 r  0 0 (half bridge\ndriver) box35
 grestore }store 



font1

2 3 mt 3 l circ1
1 3 mt rarrow

4 3 mt 5 r 2 d 13 r 2 u

6 7 mt 7 l circ1
1 7 mt rarrow

10 11 mt 11 l circ1
1 11 mt rarrow

  14 11 mt  4 r 1 d
  11 7 mt 1 r 4 d 2 r


 14 3 delta

4.5 3 hbd
8 7 hbd
11.5 11 hbd




font2

-2.3 2.6 (DC) cc
-2.3 6.6 (DA) cc
-2.3 10.6 (DB) cc

14.5 7 (a) cc
21.4 7 (b) cc
18 1.7 (c) cc

3.5 5.3 (+v) cc
6.8 9.3 (+v) cc
10.4 13.3 (+v) cc

13.5 1.7 (TA) cc
23.3 1.7 (TC) cc

18 11.5 (TB) cc





end

ypos snap3 restore /ypos exch def  
} def

%%%%%%% core defs for magsin plots




%%%%%%% core defs for magsin plots

/coredefs {

/shakendelta28 [
[ [868      0    0 1730    0      0     0 868] 0.000000 0.0000000 3472 ]


% shortened



[ [103 1242 151    63 211 1001 698   3] 0.0439439 1.000650 3472 ]

] def


/aa mark  shakendelta28 {0 get 0 get 2 mul} forall ] store  % double a
/bb mark  shakendelta28 {0 get 1 get} forall ] store
/cc mark  shakendelta28 {0 get 2 get} forall ] store
/dd mark  shakendelta28 {0 get 3 get} forall ] store
/ee mark  shakendelta28 {0 get 4 get} forall ] store
/ff mark  shakendelta28 {0 get 5 get} forall ] store
/gg mark  shakendelta28 {0 get 6 get} forall ] store
/hh mark  shakendelta28 {0 get 7 get 2 mul } forall ] store  % double h


% aa == bb == cc == dd == ee == ff == gg == hh ==


/amplitude 53 store

/delaypattern [

(aa)(bb)(cc)(dd)(ee)(ff)(gg)
(hh)(gg)(ff)(ee)(dd)(cc)(bb)

(aa)(bb)(cc)(dd)(ee)(ff)(gg)
(hh)(gg)(ff)(ee)(dd)(cc)(bb)

(aa)(bb)(cc)(dd)(ee)(ff)(gg)
(hh)(gg)(ff)(ee)(dd)(cc)(bb)

(aa)(bb)(cc)(dd)(ee)(ff)(gg)
(hh)(gg)(ff)(ee)(dd)(cc)(bb)

(aa)(bb)(cc)(dd)(ee)(ff)(gg)
(hh)(gg)(ff)(ee)(dd)(cc)(bb)

(aa)(bb)(cc)(dd)(ee)(ff)(gg)
(hh)(gg)(ff)(ee)(dd)(cc)(bb)


              ] store



/portpattern [

<E0>  <A2><2B>  <07>  <2B><A2><2B>  <E0>  <A2><2B><A2>  <E0>  <A2><2B>
<E0> pop <07>  <2B><69>  <E0>  <69><2B><69>  <E0>  <2B><69><2B>  <07>  <2B><69>
<E0>  <69><45>  <07>  <45><69><45>  <E0>  <69><45><69>  <E0>  <69><45>

<E0> pop <07>  <45><C4>  <E0>  <C4><45><C4>  <E0>  <45><C4><45>  <07>  <45><C4>
<E0>  <C4><64>  <07>  <86><C4><86>  <E0>  <C4><86><C4>  <E0>  <C4><86>
<E0> pop <07> <86><C2>  <E0>  <C2><86><C2>  <E0>  <86><C2><86>  <07>  <86><C2>

] store


% 100 100 10 setgrid
% 30 60 showgrid

/hscale 30  3472 12 mul div  store


/vscale 4 store


/phasea {gsave  translate

/port 0 store

line1 
0 0 mt

0 1 portpattern length 1 sub {/posn exch store


portpattern posn get  0 get
 2 12 string cvrs (10000000) exch mergestr 

100 string cvs    % dereference?


dup length 1 sub port sub get 48 sub   /state exch store


delaypattern posn get cvn load amplitude get  /stall exch store




currentpoint exch pop cvi /nowat exch store

nowat 0 eq state 0 ne and {0 vscale rlineto} if
nowat 0 ne state 0 eq and {0 vscale neg rlineto} if

stall hscale mul 0 rlineto




} for


stroke

 grestore} store



%%%%%%%%%

/phaseb {gsave  translate

/port 1 store

/prev false store

line1 
0 0 mt

0 1 portpattern length 1 sub {/posn exch store


portpattern posn get  0 get
 2 12 string cvrs (00000000) exch mergestr 

dup length 1 sub port sub get 48 sub   /state exch store


delaypattern posn get cvn load amplitude get  /stall exch store




currentpoint exch pop cvi /nowat exch store

nowat 0 eq state 0 ne and {0 vscale rlineto} if
nowat 0 ne state 0 eq and {0 vscale neg rlineto} if

stall hscale mul 0 rlineto




} for


stroke

 grestore} store


%%%%%%%%%



/phasec {gsave  translate

/port 2 store

line1 
0 0 mt

0 1 portpattern length 1 sub {/posn exch store


portpattern posn get  0 get
 2 12 string cvrs (00000000) exch mergestr 

dup length 1 sub port sub get 48 sub   /state exch store


delaypattern posn get cvn load amplitude get  /stall exch store




currentpoint exch pop cvi /nowat exch store

nowat 0 eq state 0 ne and {0 vscale rlineto} if
nowat 0 ne state 0 eq and {0 vscale neg rlineto} if

stall hscale mul 0 rlineto




} for


stroke

 grestore} store


/halfwave {gsave  translate

/port 3 store

line1 1 0 0 setrgbcolor
0 0 mt

0 1 portpattern length 1 sub  {/posn exch store


portpattern posn get  0 get
 2 12 string cvrs (00000000) exch mergestr dup length 1 sub port sub get 48 sub cvi  


/state exch store


delaypattern posn get cvn load amplitude get  /stall exch store




currentpoint exch pop cvi /nowat exch store

% state ==
% nowat ==
% stall ==



nowat 0 eq state 0 ne and {0 vscale rlineto} if
nowat 0 ne state 0 eq and {0 vscale neg rlineto} if

stall hscale mul 0 rlineto

% currentpoint == ==
% (\n) print flush


} for



stroke

 grestore} store


%%%%%%%%%%%%

/AminusC  {gsave  translate

/Cport 2 store
/Aport 0 store


line1 
0 0 mt          

0 1 portpattern length 1 sub   {/posn exch store


portpattern posn get  0 get
 2 12 string cvrs (00000000) exch mergestr dup length 1 sub Cport sub get 48 sub cvi  
2 div /Cstate exch store

portpattern posn get  0 get
 2 12 string cvrs (00000000) exch mergestr dup length 1 sub Aport sub get 48 sub cvi  
2 div /Astate exch store

/nustate Astate Cstate sub  store



delaypattern posn get cvn load amplitude get  /stall exch store



currentpoint pop nustate vscale mul lineto

stall hscale mul 0 rlineto

%  currentpoint == ==
%  (\n) print flush


} for



stroke

 grestore} store

%%%%%%%%%%%


/BminusA  {gsave  translate

/Bport 1 store
/Aport 0 store

line1 
0 0 mt

0 1 portpattern length 1 sub   {/posn exch store


portpattern posn get  0 get
 2 12 string cvrs (00000000) exch mergestr dup length 1 sub Aport sub get 48 sub cvi  
2 div /Astate exch store

portpattern posn get  0 get
 2 12 string cvrs (00000000) exch mergestr dup length 1 sub Bport sub get 48 sub cvi  
2 div /Bstate exch store

/nustate Bstate Astate sub  store



delaypattern posn get cvn load amplitude get  /stall exch store



currentpoint pop nustate vscale mul lineto




stall hscale mul 0 rlineto

 % currentpoint == ==
 % (\n) print flush


} for



stroke

 grestore} store

%%%%%%%%%%%

/CminusB  {gsave  translate

/Cport 2 store
/Bport 1 store

line1 
0 0 mt

0 1 portpattern length 1 sub   {/posn exch store


portpattern posn get  0 get
 2 12 string cvrs (00000000) exch mergestr dup length 1 sub Bport sub get 48 sub cvi  
2 div /Bstate exch store

portpattern posn get  0 get
 2 12 string cvrs (00000000) exch mergestr dup length 1 sub Cport sub get 48 sub cvi  
2 div /Cstate exch store

/nustate Cstate Bstate sub  store



delaypattern posn get cvn load amplitude get  /stall exch store



currentpoint pop nustate vscale mul lineto




stall hscale mul 0 rlineto




} for



stroke

 grestore} store


} def

%%%%%%%%%%%








%%%%%%%%%%%%%%%%%%%%%%%

/figure3hjlk {/figadvance 10 store
save /snap3 exch def
/linestring 1000 string store
%%%%%%%%%%%%%%%%%%%
electronics begin
bestgray
line1
coredefs
-3.8 -1.8 translate  % position on page
% 30 12 showgrid
/vscale 3 store

1 0 1 setrgbcolor


1 1 1 setrgbcolor  % nasty bug dont know why  dribbles down
0 10.3 phaseb

1 0 1 setrgbcolor

0 9 phasea
 
0 0 phaseb
0 4.5 phasec


30 0 mt 3 u % patch end


black
/font2 /Helvetica-Bold 1 gonzofont
-1 1 (DC) cr   % we have a cc conflict!!!!
-1 5.5 (DB) cr
-1 10 (DA) cr
% halfwave
% AminusC
% BminusA
% CminusB
end
ypos snap3 restore /ypos exch def  
} def

%%%%%%%%%%%%%%%%%%%%%%%




/figure4 {/figadvance 15 store
save /snap3 exch def
/linestring 1000 string store
%%%%%%%%%%%%%%%%%%%
electronics begin
bestgray
line1
coredefs
-3 -0.5 translate  % position on page
% 30 12 showgrid
/vscale 4 store

%0 9 phasea   1 0 0 setrgbcolor  30 0 mt 3 u % patch end
%0 0 phaseb
%0 4.5 phasec


1 0 1 setrgbcolor
0 9.2 2 add AminusC
0 0.2 BminusA
0 4.7 1 add CminusB
black


/font2 /Helvetica-Bold 1 gonzofont
/overstrikeht 0.85 store
-1 0 (DC - DA) cr   % we have a cc conflict!!!!
-1 4.5 1 add (DB - DC) cr
-1 9 2 add (DA - DB) cr

% halfwave
% AminusC
% BminusA
% CminusB
end
ypos snap3 restore /ypos exch def  
} def




/figure5 {
save /snap3 exch def
/linestring 1000 string store
%%%%%%%%%%%%%%%%%%%
electronics begin

/circ1b {gsave currentpoint newpath 0.20 0 360 arc % whitefill

gsave beige 0.88 setgray fill grestore black
line1 stroke grestore} def %for circle



bestgray
line1
coredefs
-4.5 -1  translate  % position on page
% 30 12 showgrid


       /font2 /Helvetica-Bold 1 gonzofont
       /overstrikeht 0.70 store
       /yinc 1.2 store

/anet {gsave translate  

       0 6 mt 1.5 r 6 d 1.5 l circ1b  0 6 mt circ1b
       1.5 1.5 vresistor
       1.5 4.5 vresistor
       1.5 3 mt dot
       1.5 3 mt 1.5 r circ1b

       font2   
       -0.7 5.5 (DA) cr   % no cc here!
       -0.7 -0.5 (D|oB|o) cr
       font1
        3.8 3.5 (phase a\noutput) cl

     grestore } store

/bnet {gsave translate  

       0 6 mt 1.5 r 6 d 1.5 l circ1b  0 6 mt circ1b
       1.5 1.5 vresistor
       1.5 4.5 vresistor
       1.5 3 mt dot
       1.5 3 mt 1.5 r circ1b

       font2   
       -0.7 5.5 (DB) cr   % no cc here!
       -0.7 -0.5 (D|oC|o) cr
       font1
        3.8 3.5 (phase b\noutput) cl

     grestore } store

/cnet {gsave translate  

       0 6 mt 1.5 r 6 d 1.5 l circ1b  0 6 mt circ1b
       1.5 1.5 vresistor
       1.5 4.5 vresistor
       1.5 3 mt dot
       1.5 3 mt 1.5 r circ1b

       font2   
       -0.7 5.5 (DC) cr   % no cc here!
       -0.7 -0.5 (D|oA|o) cr
       font1
        3.8 3.5 (phase c\noutput) cl

     grestore } store

-2 0 mt 10.7 pu 33.2 pr 10.7 pd closepath
0.88 setgray fill black


 1.5 3 anet
 12 3 bnet
 22.5 3 cnet

font1 9.5 0.8 (All resistors 2.2K.) cl

end
ypos snap3 restore /ypos exch def  
} def


%%%%%%%%
%%%%%%%% pc trace field routines
%%%%%%%%



%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     /hue2rgb.psl
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     Code to convert a hue value into a RGB triad of adjustable 
%     saturation and brightness.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Picks one of six color bars based upon dominant primary

% service utils...

/plotsat 0.8 store                   % color saturation  0-1 1 = full saturation
/plotbrt 1.0 store                   % color brightness  0-1 1=full brightness

/bkg {1 plotsat sub} store
/upset { 1 bkg sub     % the available total sat shift for this color   
         &cwt mul      % the desired shift
         bkg add       % plus the background
        } store
/downset { 1 bkg sub     % the available total sat shift for this color   
         1 &cwt sub mul      % the desired shift
         bkg add       % plus the background
        } store

% main hue to RGB routine...

/huetorgb {dup /currenttint exch store      % save currenttint
           5.999 mul dup floor cvi 
           /&cbar exch store                % save case 0-5
           &cbar floor sub /&cwt exch store       % save posn into case

 [                                          % array of case cases
  { 1         upset     bkg}               % red dominant hue 0 to .166
  { downset     1       bkg}               % green dominant hue .166 to .333
  { bkg         1     upset}               % green dominant hue .333 to .500
  { bkg     downset       1}               % blue dominant hue .500 to .666
  { upset     bkg         1}               % blue dominant hue .666 to .833
  { 1         bkg   downset}               % red dominant hue .833 to .999

] &cbar get exec  

255 mul plotbrt mul cvi /curblue exch store
255 mul plotbrt mul cvi /curgreen exch store
255 mul plotbrt mul cvi /curred exch store

curred curgreen curblue

} def


%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     /makestring
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     Converts an array of 0-255 integers into a string. 
%     Used to get from array to string to image
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

/makestring {dup length string dup /NullEncode filter
3 -1 roll {1 index exch write} forall pop} def


%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     /field2image
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     Converts a by-columns array of arrays into a series of
%     row strings as requested by an image proc.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% requires initially zeroed /arraycount pointer

/field2image { mark                           % start row array
              0 1 field length 1 sub          % get row voltage values
                {/fcol exch store
                 field fcol get  
                 arraycount get} for
                 ]                            % complete voltage row array

               /arraycount arraycount         % advance pointer
               1 add store

               mark                           % start scaled hue array 
               exch {1000 sub abs 1667 div    % 1000=red 0.000 0=blue 0.667     
               huetorgb  } forall ]           % and complete
      
               makestring } store             % and convert to 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     /fieldasimage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     Converts a by-columns array of arrays into an image for
%     compact storage and fast display.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Assumes a RGB color mode

/imgwide {field length} store              % find by-columns array width
/imghi   {field 0 get length} store        % fomd bu-collumns array height

/fieldasimage {

  <<                                       % begin RGB image dictionary
     /arraycount 0 store                   % new counter to deliver row strings

     /ImageType 1                          % usual image stuff
     /Width imgwide    
     /Height imghi  
     /BitsPerComponent 8
     /MultipleDataSources false
     /Interpolate false
     /Decode [ 0 1 0 1 0 1]
     /ImageMatrix [imghi 0 0 imghi 0 0]    % work UP from bottom
     /DataSource {field2image}             % MUST be deferred!!! proc 
>> 
     image 

} store


%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     /fieldplot
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     Positions and draws a field image at a specified page location.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% requires x and y position on stack top

                   /plotsat 0.8 store              % saturation  0-1 1=full saturation
                   /plotbrt 1.0 store              % brightness  0-1 1=full brightness

       /fieldplot {
                   /DeviceRGB setcolorspace        % set color mode

                   gsave translate                 % position on page
                   imghi dup scale                 % scale to size
                   fieldasimage                    % place image
                   grestore} store

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     /resetbound
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     Resets a boundary for the field array mapped into a unit square.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% requires {boundaryproc} boundaryvalue on stack.

/resetbound {  gsave

               /boundval exch store      % save boundary value to be reset 
               newpath 
{
              field length               % map reset proc to array space
              field 0 get length 
              dup scale} pop

              exec                       % execute unit square fill proc

              /fieldhi field 0 get      % update field column count
              length store

              /fieldwd field            % update field row count
              length store

              0 1 fieldhi 1 sub {       % scan each array element position
                /curvpos exch store     
 
              0 1 fieldwd 1 sub {       % both x and y
               /curhpos exch store
               
              curvpos 0.5 add curhpos 0.5 add
              infill                    % does array location need update?
               { field curvpos get       % yes, reset boundary value 
               curhpos boundval put

          } if     
         } for} for


         grestore} store 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     /initfield
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     Initializes a field of column arrays
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% input with rows columns value on stack

     /initfield {/mtval exch store             % save empty value
                 /ccc exch store               % save number of columns
                 /rrr exch store               % save number of rows
                 mark                          % start array
                 rrr {                         % for rrr arrays
                 mark ccc {mtval} repeat       % place ccc data values each
                 ] } repeat ]
                 /field exch store } store


%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     /quadaverage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     Averages internal field points. Solves Laplacian when repeated.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

/quadaverage {

1 1 field length 2 sub {                        % for each column
               /hhh exch store            

1 1 field 0 get length 2 sub {                  % for each row
               /vvv exch store

          field hhh get vvv 1 add get           % two vertical points
          field hhh get vvv 1 sub get add

          field hhh 1 sub get vvv get            % two horizontal points 
          field hhh 1 add get vvv get add

          add 4 div                              % new average

          field hhh get exch vvv exch put        % and replace



   } for } for                                   % complete loops

    } bind def

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     A boundary proc library
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     Example boundary values as unit square fill procs
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% areas
/cencirc {newpath 0.5 0.5  0.126 0 360 arc} store     % a centered circle of 25% volume
/lowquart {newpath 0 0 mt 0.25 pu 1 pr 0.25 pd closepath} store    % bottom quarter
/hiquart  {newpath 0 0.75 mt 0.25 pu 1 pr 0.25 pd closepath} store  % top quarter


% try full size

/cencirc {newpath 100 100 25.3 0 360 arc} store  % try full size

/lowquart {newpath 0 0 mt 50 pu 200 pr 50 pd closepath} store    % bottom quarter
/hiquart  {newpath 0 150 mt 50 pu 200 pr 50 pd closepath} store  % top quarter

/swcorner {newpath 0 0 mt 100 pu 100 pr 100 pd closepath} store

% lines
/edgeset1 {mark 50 {0} repeat   
           100 {dup 10 add} repeat
           50 {1000} repeat
        ]} store


%%%

% create a 200 x 200 array of data value 500

% 200 200 500 initfield    % temporary shading


% create a boundary resetter for busbar hole

/fixbounds {
             {lowquart} 0 resetbound     % low quarter at blue zero
             {cencirc} 500 resetbound    % mid circle at half amplitude
             {hiquart} 1000 resetbound   % high quarter at red 1000
           } store


/busbarclip {
newpath 100 100 25 0 360 arc
0 50 mt 200 pr 100 pu 200 pl 100 pd 
} store

/pccornerclip {0 100 mt 100 pu 200 pr 200 pd 100 pl 100 pu 100 pl} store


/fixbounds {  % for printed circuit corner
             {lowquart} 0 resetbound     % low quarter at blue zero
             {cencirc} 500 resetbound    % mid circle at half amplitude
             {hiquart} 1000 resetbound   % high quarter at red 1000
           } store


/fixbounds { 



{swcorner} 0 resetbound  % zero southeast corner


            } store



% fixbounds

{  % for busbar
field 0 edgeset1 put
field dup length 1 sub edgeset1 put
} pop

% for printed circuit corner

/setleftedge1 { 
field 0 mark 100 {0} repeat
 100 {dup 10 add} repeat ] put} store

/settopedge1 {0 1 field length 1 sub { /cccc exch store
field cccc get 199 1000 put
} for } store

/setrightedge1 {field 199 mark 200 {1000} repeat ] put } store

/setbottomedge1 {

/val 0 store

100 1 field length 1 sub {/ccccc exch store

  field ccccc get 0 val put /val val 10 add store } for } store











/fixbounds {   

       0 1 100 {/rr exch store     % right
       field rr get 100 0 put } for

       0 1 100 {/cc exch store
       field 100 get cc 0 put} for


            } store




/figure1 {  


    -1 -6.5 translate
    0.1 dup scale


200 200 500 initfield    

setleftedge1
settopedge1   
setrightedge1
setbottomedge1
fixbounds


fastart {10}{1000} ifelse  % set print speed

 { fixbounds quadaverage      ( ) print flush

 field 120 get 120 get == 
 } repeat

gsave   %  100 100 translate
pccornerclip  
closepath  gsave eoclip
gsave
0 0 fieldplot
grestore
grestore        stroke
grestore

} store

%%%%%%%%%

% figure two and procs busbar


/busbarclip {
newpath 100 100 35 0 360 arc
0 50 mt 200 pr 100 pu 200 pl 100 pd 
} store

/setleft {/val 0 store  50 1 150 {field 0 get exch val put
/val val 10 add store} for} store

/setright {/val 0 store  50 1 150 {field 199 get exch val put
/val val 10 add store} for} store

/settop {0 1 199 {field exch get 150 1000 put} for } store
/setbot {0 1 199 {field exch get 50 0 put} for } store

/cencirc {newpath 100 100 35 0 360 arc} store 





/figure2 {

    -1 -4.5 translate
    0.1 dup scale

200 200 500 initfield    % temporary shading

setleft
setright
settop
setbot

{cencirc} 500 resetbound

 stopwatchon
fastart {20}{2000} ifelse


{ 
  settop
  setbot
  {cencirc} 500 resetbound
   quadaverage      ( ) print flush
 field 100 get 140 get == 
 } repeat

stopwatchoff

 
% field ==

gsave   %  100 100 translate
busbarclip 
closepath     gsave          eoclip
gsave
0 0 fieldplot
grestore
grestore        stroke
grestore


} store













%%%%%%%

% figure three and procs  three phase

/figure3 {

    -1 -0.0 translate
    0.1 dup scale


% begin threephase only code

/threephaseclip {
newpath 100 100 100 0 360 arc

130 150 moveto
100 150 30 0 360 arc

100 50 0.866 mul add 30 add     80 moveto
100 50 0.866 mul add     100 50 .5 mul sub      30 0 360 arc

100 50 0.866 mul sub 30 add  80 moveto
100 50 0.866 mul sub     100 50 .5 mul sub      30 0 360 arc

} store

/threephaseoutside {newpath 100 100 100 0 360 arc

0 0 mt 200 pu 200 pr 200 pd 200 pl

} store

/onehole {newpath 100 150 30 0 360 arc} store
/twohole {newpath 100 50 0.866 mul add     100 50 .5 mul sub      30 0 360 arc} store
/threehole {newpath 100 50 0.866 mul sub     100 50 .5 mul sub      30 0 360 arc} store

gsave   %  100 100 translate

200 200 600 initfield    % temporary shading


{threephaseoutside} 500 resetbound

{onehole} 1000 resetbound
{twohole} 150 resetbound
{threehole} 150 resetbound

 stopwatchon
fastart {10}{2000} ifelse



{ % fixbounds 

  % settop
 %  setbot
  % {cencirc} 500 resetbound


{threephaseoutside} 500 resetbound
 {onehole} 1000 resetbound
 {twohole} 150 resetbound
 {threehole} 150 resetbound
   quadaverage      ( ) print flush

 field 100 get 110 get == 
 } repeat

stopwatchoff

 
% field ==




threephaseclip 

closepath     gsave           eoclip


gsave
0 0 fieldplot
grestore


grestore        stroke



% 100 100 50 0 360 arc stroke


grestore






} store



%%%%%%%%%%%%
%%%%%%%%%%%% end pc trace field routines







/figureoneauto { /figadvance 13.5 store

   save /snap1a exch store xpos 8 add ypos figadvance sub translate
   beige
   figure1
   snap1a restore 
   /ypos ypos figadvance sub yinc sub store
   } store





/figuretwoauto { /figadvance 11 store

   save /snap2a exch store xpos 8 add ypos figadvance sub translate
   beige
   figure2
   snap2a restore 
   /ypos ypos figadvance sub yinc sub store
   } store

/figurethreeauto { /figadvance 18 2 add  store

   save /snap3a exch store xpos 8 add ypos figadvance sub translate
   beige
   figure3
   snap3a restore 
   /ypos ypos figadvance sub yinc sub store
   } store




/figurethreeautox { 

   save /snap3ax exch store 
   beige

0 1000 translate
   figure3
   snap3ax restore 
   } store





/figurefourauto { /figadvance 16 store

   save /snap4a exch store xpos 8 add ypos figadvance sub translate
   beige
   figure4
   snap4a restore 
   /ypos ypos figadvance sub yinc sub store
   } store


/figurefiveauto { /figadvance 10 store

   save /snap5a exch store xpos 8 add ypos figadvance sub translate
   beige
   figure5
   snap5a restore 
   /ypos ypos figadvance sub yinc sub store
   } store





/figure2x {



0.50 settint



/font0 /StoneSans-Bold 6 gonzofont  font0



0 1 1 setrgbcolor

10 3 (54) cc


 20 25 showgrid

line3  0 1 1 setrgbcolor
[{-0.5 0 mt 20.5 r} 10 3] yrpt
[{0 -0.5 mt 25.5 u} 10 3] xrpt
0 25 mt 20 r

black

  
0 0 0 setrgbcolor

    0 2 ex54 length 2 sub  {/posn2 exch store
     ex54 posn2 get         
     ex54 posn2 1 add get   
     moveto dot} for

1 0 1 setrgbcolor



    0 2 ex54good length 2 sub  {/posn2 exch store
     ex54good posn2 get         
     ex54good posn2 1 add get   
     moveto dot} for



1 0.5 0 setrgbcolor
ex54want 0 get ex54want 1 get mt dot

1 0 0 setrgbcolor
ex54orig 0 get ex54orig 1 get mt dot



/font1 /StoneSans-Bold 0.9 gonzofont
font1

0.3 0.3 0.3 setrgbcolor

0 -1.5 (0.535) cc
10 -1.5 (0.540) cc
20 -1.5 (0.545) cc

-0.9 0 0.3 sub (0.00%) cr
-0.9 10 0.3 sub(0.05%) cr
-0.9 20 0.3 sub (0.10%) cr


% 11.55 18.2 (= raw quant) cl
% 11.55 17.2 (= best neighbor) cl


/font2 /StoneSans-Bold 1.1 gonzofont
font1

10 -2.7 (Amplitude) cc



gsave -5.2 10 translate 90 rotate
0 0 (Unfiltered  THD  2|j-|j22)cc
grestore 

/yinc 1.2 store

24.3 11.5  (Nearby\nquantized\nAmplitude 54\noptions) cc




      } store

%%%%%%%%% figures for fun with fields %%%%%




/emptyfield {save /mtsnap exch store gsave translate  
showblank {
0 0 mt fieldhi pu fieldwi pr fieldhi pd closepath aqua 0.85 setgray fill} if
black 0.3 setlinewidth
0 -3.5 mt fieldhi 3 add u
-0.5 0 mt fieldwi 1 add r
fieldwi -3.5 mt fieldhi 3 add u
/cstretch 0 store
/sstretch 0 store
/kern 1 store
/font- /Symbol 8.5  gonzofont
/font1 /Helvetica 8.5 gonzofont
font- black
 0 -13(|1(|jx|j=|-|j0|j)) cc
fieldwi -13 (|1(|jx|j=|j|-p|j)) cc
fieldwi 2 div  fieldhi 4 add (|-f|1|j=|j1000|j|jsin|j(|jx|j) volts) cc
fieldwi 2 div  -13 (|1zero volts) cc
gsave -5 fieldhi 2 div translate 90 rotate 0 0 (|1zero volts) cc grestore
gsave fieldwi 12 add fieldhi 2 div translate 90 rotate 0 0 (|1zero volts) cc grestore
grestore mtsnap restore} store





/field [

[0 0.0    % shortened

.0 0 0.0 0.0 0.0 0 0.0 0.0 0.0 0 0.0 0.0
0.0 0 0.0 0.0 0.0 0 0.0 0.0 0.0 0 0.0 0.0 0.0 0 0.0 0.0 0.0 0 0.0 0.0
0.0 0 0.0 0.0 0.0 0 0.0 0.0 0.0 0 0.0 0.0 0.0 0 3.06152e-14
6.12303e-14 9.18455e-14 1.22461e-13]

] store



/adjtint { 

1000 sub abs 1000 div 
0.66667 mul

} store

/plotfield {/sf exch store gsave translate sf dup scale

field length /vsize exch store field 0 get length /hsize exch store

0 1 vsize 1 sub { /vpos exch store


0 1 hsize 1 sub { /hpos exch store

vpos hpos moveto 1 pd 1 pr 1 pu closepath

field vpos get hpos get adjtint  

0.7 1 sethsbcolor

 fill



} for % each horizontal pixel
} for % each row

grestore } store



/w {setlinewidth} store
/n {newpath} store
/m {moveto} store
/l {lineto} store
/S {stroke} store
/sc {setrgbcolor} store

/equipot {

0.149994 w
n
100 216 m
107 216 l
108 212.951 l
109 204.968 l


{
% shortened
104.988 208.47 l
103.99 208.411 l
102.991 208.366 l
101.991 208.337 l
100.991 208.322 l

} pop

S



} store


/grad {





% shortened


n
140 215 m
337.619 193.998 l
338.618 193.951 l
339.617 193.919 l
S

} store





















/figure1tyui {

/fieldhi 117 store
/fieldwi 241 store

/showblank true store
gsave 0.1 dup scale
-35 5 emptyfield  grestore} store



/figure2hjl {
/fieldhi 117 store
/fieldwi 241 store
gsave 0.1 dup scale
-35 5 1 plotfield
grestore

/showblank false store
gsave 0.1 dup scale
-35 5 emptyfield  grestore} store

/figure3yui {
/fieldhi 117 store
/fieldwi 241 store
gsave 0.1 dup scale
-35 5 1 plotfield
-100 -100 translate
-35 5 translate
equipot

grestore



/showblank false store
gsave 0.1 dup scale
-35 5 emptyfield  grestore} store

/figure4 {
/fieldhi 117 store
/fieldwi 241 store
gsave 0.1 dup scale
-35 5 1 plotfield
-100 -100 translate
-35 5 translate
equipot
grad

grestore



/showblank false store
gsave 0.1 dup scale
-35 5 emptyfield  grestore} store




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


/burpwide 29.5 store

/burplebox3 {save /burp1 exch store

xpos ypos translate -1 .2 mt 3.5 yinc mul .4 add pd burpwide pr 3.5 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore

} def

/burplebox2 {save /burp1 exch store

xpos ypos translate -1 .2 mt 2.5 yinc mul .4 add pd burpwide pr 2.5 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore

} def


/burplebox2.5 {save /burp1 exch store
xpos ypos translate -1 .2 mt 3 yinc mul .4 add pd burpwide pr 3 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore
} def



/burplebox4 {save /burp1 exch store
xpos ypos translate -1 .2 mt 4.5 yinc mul .4 add pd burpwide pr 4.5 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore
} def



/burplebox4.5 {save /burp1 exch store
xpos ypos translate    
-1 .2 mt 5 yinc mul .4 add pd burpwide pr 5 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore
} def





/burplebox5w {save /burp1 exch store
xpos ypos translate


 -1 .2 mt 5.5 yinc mul .4 add pd burpwide pr 5.5 yinc mul .4 add pu closepath
0.9 setgray fill

true {special5 } if

 burp1 restore
} def



/burpcom {save /burpx exch store  /bht exch store
save /burp1 exch store
xpos ypos translate -1 .2 mt bht yinc mul .4 add pd burpwide pr bht yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore} store

/burpwidew 32 store


/burpcomw {save /burpx exch store  /bht exch store
save /burp1 exch store
xpos 1 sub ypos translate 0 .2 mt bht yinc mul .4 add pd burpwidew pr bht yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore} store



/burplebox3.5 {4 burpcom} store
/burplebox5 {5.5 burpcom} store
/burplebox5.5 {6 burpcom} store
/burplebox6 {6.5 burpcom} store
/burplebox6.5 {7 burpcom} store
/burplebox7 {7.5 burpcom} store
/burplebox7.5 {8 burpcom} store
/burplebox8 {8.5 burpcom} store
/burplebox8.5 {9 burpcom} store
/burplebox9 {9.5 burpcom} store
/burplebox9.5 {10 burpcom} store
/burplebox10 {10.5 burpcom} store
/burplebox10.5 {11 burpcom} store
/burplebox11 {11.5 burpcom} store
/burplebox11.5 {12 burpcom} store
/burplebox12 {12.5 burpcom} store

/burplebox11w {11.5 burpcomw} store

/burplebox12.5 {13 burpcom} store
/burplebox13 {13.5 burpcom} store
/burplebox13.5 {14 burpcom} store
/burplebox14 {14.5 burpcom} store
/burplebox14.5 {15 burpcom} store
/burplebox15{15.5 burpcom} store
/burplebox15.5{16 burpcom} store
/burplebox16 {16.5 burpcom} store
/burplebox16.5 {17 burpcom} store

/burplebox18 {18.5 burpcom} store
/burplebox18.5 {19 burpcom} store
/burplebox19 {19.5 burpcom} store

/burplebox21.5 {22 burpcom} store

/burplebox22{22.5 burpcom} store

/burplebox25{25.5 burpcom} store
/burplebox25.5{26 burpcom} store
/burplebox26{26.5 burpcom} store
/burplebox27{27.5 burpcom} store
/burplebox28 {28.5 burpcom} store
/burplebox29.5 {30 burpcom} store
/burplebox34 {34.5 burpcom} store

/burplebox38 {38.5 burpcom} store
/burplebox38.5{39 burpcom} store
/burplebox40{40.5 burpcom} store
/burplebox40.5{41 burpcom} store

/burplebox42.5{43 burpcom} store  % nearly a full page

/burplebox34w{34.5 burpcomw} store
/burplebox34.5w{35 burpcomw} store
/burplebox38w{38.5 burpcomw} store
/burplebox38.5w{39 burpcomw} store
/burplebox40w{40.5 burpcomw} store



/burplebox17 {save /burp1 exch store
xpos ypos translate -1 .2 mt 17.5 yinc mul .4 add pd burpwide pr 17.5 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore
} def



/burplebox20 {save /burp1 exch store
xpos ypos translate -1 .2 mt 20.5 yinc mul .4 add pd burpwide pr 20.5 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore
} def

/burplebox23 {save /burp1 exch store
xpos ypos translate -1 .2 mt 23.5 yinc mul .4 add pd burpwide pr 23.5 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore
} def


/burplebox26.5 {save /burp1 exch store
xpos ypos translate -1 .2 mt 27 yinc mul .4 add pd burpwide pr 27 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore
} def


/burplebox30 {save /burp1 exch store
xpos ypos translate -1 .2 mt 30.5 yinc mul .4 add pd burpwide pr 30.5 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore
} def



/burplebox36 {save /burp1 exch store
xpos ypos translate -1 .2 mt 36.5 yinc mul .4 add pd burpwide pr 36.5 yinc mul .4 add pu closepath
0.9 setgray fill burp1 restore
} def

%%%%%%%%%%%  figure 1 routine

  % autopositions on box6

%%%%%%%%%%%%%%%%%%%%%%%%%%%%







%%%%%%%%%%%  TWO PATTERNS   %%%%%%%%%%%%%%

/ivoryrndcolor   [230 230 205 40] store  % random pattern colors [red blue green variance ]
/magentarndcolor [230 100 230 120]store


/makepatternstrings {
[230 210 190 80] buildpixels
magentarndcolor /accentpatstring exch store

ivoryrndcolor buildpixels
makeimagestring /bodypatstring exch store
                    } store




/burppatstrings {
ivoryrndcolor buildpixels
makeimagestring /bodypatstring exch store

magentarndcolor buildpixels
makeimagestring /accentpatstring exch store
                } store

/DeviceRGB setcolorspace                %  pick color model
/hpixels 50 store                       %  size of pattern image
/vpixels 50 store
/issize hpixels vpixels mul store

% makestring converts a stack top array into a string...
 
/makestring {dup length string dup /NullEncode filter     
3 -1 roll {1 index exch write} forall pop} def




% /buildpixels makes three nearby colors given [r b g texture] all 0-255 integers

/buildpixels {aload pop /texture exch store /b0 exch store /g0 exch store /r0 exch store 123 srand

/r1 r0 texture random texture 2 div sub add cvi 
dup 255 ge {pop 255}if  dup 0 lt {pop 0} if store
/g1 g0 texture random texture 2 div sub add cvi 
dup 255 ge {pop 255}if  dup 0 lt {pop 0} if store
/b1 b0 texture random texture 2 div sub add cvi 
dup 255 ge {pop 255}if  dup 0 lt {pop 0} if store

/r2 r0 texture random texture 2 div sub add cvi 
dup 255 ge {pop 255}if  dup 0 lt {pop 0} if store
/g2 g0 texture random texture 2 div sub add cvi 
dup 255 ge {pop 255}if  dup 0 lt {pop 0} if store
/b2 b0 texture random texture 2 div sub add cvi 
dup 255 ge {pop 255}if  dup 0 lt {pop 0} if store

/r3 r0 texture random texture 2 div sub add cvi 
dup 255 ge {pop 255}if  dup 0 lt {pop 0} if store
/g3 g0 texture random texture 2 div sub add cvi 
dup 255 ge {pop 255}if  dup 0 lt {pop 0} if store
/b3 b0 texture random texture 2 div sub add cvi 
dup 255 ge {pop 255}if  dup 0 lt {pop 0} if store
      } store

% /makeimagestring creates a sting usable for a pattern image

/makeimagestring {  12345 srand         % make repeatable

  /iarray mark issize { r1 g1 b1} repeat ] store  % fill all with color 1

  issize 2 div cvi { iarray  issize               % fill half with color 2              
  random 3 mul cvi  [ r2 g2 b2 ] 
  putinterval} repeat

  issize 2 div cvi { iarray  issize               % fill third with color 3 
  random 3 mul cvi  [ r3 g3 b3 ] 
  putinterval} repeat

  iarray makestring 
                 } store





% /rndimage shows the random string as a patternable image

/bodyrandimage { 

            gsave  5 dup scale

     <<                                      % start image dicationary
            /ImageType 1                     % always one
            /Width hpixels                   % width in pixels
            /Height vpixels                  % height in pixels
            /ImageMatrix [hpixels
                          0 0 
                          vpixels neg
                          0
                          vpixels ]  


            /DataSource bodypatstring        % proc to get string data     
            /BitsPerComponent 8              % color resolution
            /Decode [0 1 0 1 0 1]            % per red book 4.10
            >>

     image                                   % call the image 

grestore
} def




/accentrandimage { 

            gsave  5 dup scale

     <<                                      % start image dicationary
            /ImageType 1                     % always one
            /Width hpixels                   % width in pixels
            /Height vpixels                  % height in pixels
            /ImageMatrix [hpixels
                          0 0 
                          vpixels neg
                          0
                          vpixels ]  


            /DataSource accentpatstring        % proc to get string data     
            /BitsPerComponent 8              % color resolution
            /Decode [0 1 0 1 0 1]            % per red book 4.10
            >>

     image                                   % call the image 

grestore
} def





% using a separate pattern dictionary for each pattern...

/bodypatdict

<< /PatternType 1     % Tiling pattern
/PaintType 1          % Colored
/TilingType 1
/BBox [0 0 50 50]
/XStep 5
/YStep 5
/PaintProc { begin bodyrandimage end} 
>>   store


/accentpatdict

<< /PatternType 1     % Tiling pattern
/PaintType 1          % Colored
/TilingType 1
/BBox [0 0 50 50]
/XStep 5
/YStep 5
/PaintProc { begin accentrandimage end} 
>>   store


/burpbackmain { save /snapbb exch store


save /snapb exch store      % show the body background
bodypatdict 
matrix                  % Identity matrix
makepattern             % Instantiate the pattern
/bodypat exch def
4 0                              % for the actual slide size
12 8

/Pattern setcolorspace
bodypat setcolor rectfill    % Fill rectangle with pattern
snapb restore

4 0 12 8 line1 black rectstroke
 


save /snapy exch store      % show the accent
accentpatdict 
matrix                  % Identity matrix
makepattern             % Instantiate the pattern
/accentpat exch def
18.5 0 12 8
4 copy
/Pattern setcolorspace
accentpat setcolor rectfill    % Fill rectangle with pattern
snapy restore 
 
18.5 0 12 8 line1 black rectstroke

snapbb restore } store


/figure3x {save /snap3 exch store

translate 

% 34 8 showgrid

makepatternstrings

  burppatstrings
 % burpbackstrings
burpbackmain


  snap3 restore } store

%%%%%%%%%%%%%%% end figure3





%%%%%%%%%%%% first special plot


/special1code {


/a01 [ 
  11.98757334830098  % p1 delay
  0.02494857340377088  % p1 width
  11.96309297293453  % p2 delay
  0.04880748072357122  % p2 width
  11.940266741737353  % p3 delay
  0.07053366579209097  % p3 width
  11.920110003436285  % p4 delay
  0.08917718733052737  % p4 width
  11.903448622759931  % p5 delay
  0.10392320715383363  % p5 width
  11.890997400038934  % p6 delay
  0.1141272527930397  % p6 width
  11.883303463712295  % p7 delay
  0.11934332976518647  % p7 width
  5.940346750117669  % quadrant delay
   ] store    
/a10 [ 
  11.870255884662251  % p1 delay
  0.24926326067621396  % p1 width
  11.627261913532986  % p2 delay
  0.48772075225425126  % p2 width
  11.401006709297277  % p3 delay
  0.7050052291468631  % p3 width
  11.201126478014806  % p4 delay
  0.8916211348287959  % p4 width
  11.036121661040383  % p5 delay
  1.0393583630906704  % p5 width
  10.912994009526542  % p6 delay
  1.1416713778561558  % p6 width
  10.836964879593466  % p7 delay
  1.1939991529573461  % p7 width
  5.405629193521989  % quadrant delay
   ] store      




/a20 [ 
  11.730827315951456  % p1 delay
  0.4971341380973975  % p1 width
  11.247686685343746  % p2 delay
  0.9732376712143491  % p2 width
  10.798693242131715  % p3 delay
  1.407947044520391  % p3 width
  10.402477789378082  % p4 delay
  1.78228682672421  % p4 width
  10.075528131993294  % p5 delay
  2.079475909290011  % p5 width
  9.831551570148512  % p6 delay
  2.285806430413743  % p6 width
  9.680871958761386  % p7 delay
  2.391516582063389  % p7 width
  4.8149587039683155  % quadrant delay
   ] store    

/a30 [ 
  11.582072392748948  % p1 delay
  0.7421737945018947  % p1 width
  10.862633911787377  % p2 delay
  1.454218311923288  % p2 width
  10.194732255409651  % p3 delay
  2.106545777255711  % p3 width
  9.605233324537401  % p4 delay
  2.6708278536717955  % p4 width
  9.118304754762583  % p5 delay
  3.1210612368032926  % p5 width
  8.754459346379754  % p6 delay
  3.435090920436508  % p6 width
  8.529472562792705  % p7 delay
  3.5965061939786693  % p7 width
  4.226667363010421  % quadrant delay
   ] store   



/a40 [ 
  11.424050411047465  % p1 delay
  0.9828418379051129  % p1 width
  10.473248533619292  % p2 delay
  1.9280479848577236  % p2 width
  9.590640663430097  % p3 delay
  2.7980351182823426  % p3 width
  8.810545720192863  % p4 delay
  3.555566231331163  % p4 width
  8.164652806450142  % p5 delay
  4.164668715768244  % p5 width
  7.680713770893433  % p6 delay
  4.592711162444033  % p6 width
  7.380758970713202  % p7 delay
  4.813962276129942  % p7 width
  3.6395557969349425  % quadrant delay
   ] store  



/a50 [ 
  11.25647168216318  % p1 delay
  1.2174139856738683  % p1 width
  10.080431345631026  % p2 delay
  2.391612373063623  % p2 width
  8.987846411116894  % p3 delay
  3.4787553647023585  % p3 width
  8.01966536065963  % p4 delay
  4.433803253978574  % p4 width
  7.214999377113287  % p5 delay
  5.210430981795014  % p5 width
  6.609527274825396  % p6 delay
  5.762766698554145  % p6 width
  6.232831441964791  % p7 delay
  6.050997667516469  % p7 width
  3.0524467812417413  % quadrant delay
   ] store    

/a53 [ 
  11.204229246524123  % p1 delay
  1.2863028469519246  % p1 width
  9.962015674530373  % p2 delay
  2.528117843985992  % p2 width
  8.807469507353026  % p3 delay
  3.680145761308111  % p3 width
  7.783358489290968  % p4 delay
  4.695379940110421  % p4 width
  6.930993065963889  % p5 delay
  5.5244810879620445  % p5 width
  6.288586696196958  % p6 delay
  6.117000009644471  % p6 width
  5.888323429144677  % p7 delay
  6.427466502066167  % p7 width
  2.876129898966852  % quadrant delay
   ] store   

/a60 [ 
  11.078495962518918  % p1 delay
  1.4438411449625086  % p1 width
  9.684772040454877  % p2 delay
  2.840939034126027  % p2 width
  8.38774096372643  % p3 delay
  4.143446978421139  % p3 width
  7.234097294409224  % p4 delay
  5.300789342760972  % p4 width
  6.270187484640822  % p5 delay
  6.2573120579578045  % p5 width
  5.540415121300725  % p6 delay
  6.9509377594411745  % p6 width
  5.083782352079723  % p7 delay
  7.31917029639942  % p7 width
  2.4640721668002356  % quadrant delay
   ] store   

/a70 [ 
  10.888278735987464  % p1 delay
  1.6594599780251222  % p1 width
  9.286332677429444  % p2 delay
  3.270497867115676  % p2 width
  7.791694139706859  % p3 delay
  4.783840563470704  % p3 width
  6.455843532587245  % p4 delay
  6.147367771354908  % p4 width
  5.331869368850619  % p5 delay
  7.300805550943892  % p5 width
  4.473484564450537  % p6 delay
  8.165497800155037  % p6 width
  3.9315873351224724  % p7 delay
  8.640550109600042  % p7 width
  1.8728900051999772  % quadrant delay
   ] store    

/a80 [ 
  10.681702836852158  % p1 delay
  1.8602538062958054  % p1 width
  8.88398269670934  % p2 delay
  3.6714981402848607  % p2 width
  7.200946234572324  % p3 delay
  5.385275030570618  % p3 width
  5.687867904890517  % p4 delay
  6.9536645196485765  % p4 width
  4.403487202517624  % p5 delay
  8.324602905316311  % p5 width
  3.4104122823979494  % p6 delay
  9.417450259887687  % p6 width
  2.774084338047487  % p7 delay
  10.068107274017336  % p7 width
  1.2766645679914034  % quadrant delay
   ] store    




/a90 [ 
  10.447373907519674  % p1 delay
  2.038123534960869  % p1 width
  8.472609797490058  % p2 delay
  4.0258541900581655  % p2 width
  6.615791805649657  % p3 delay
  5.91534811864263  % p3 width
  4.935247854465985  % p4 delay
  7.666864442425741  % p4 width
  3.4934960493166684  % p5 delay
  9.260584158941057  % p5 width
  2.358772151850779  % p6 delay
  10.696787617357046  % p6 width
  1.6101420251774101  % p7 delay
  11.792019752288254  % p7 width
  0.6709845938560051  % quadrant delay
   ] store  

/a95 [ 
  10.307313139895288  % p1 delay
  2.111222840209404  % p1 width
  8.256837177571334  % p2 delay
  4.169598534647832  % p2 width
  6.323664766096179  % p3 delay
  6.124919743159786  % p3 width
  4.567759372280754  % p4 delay
  7.93736307227887  % p4 width
  3.052826978493542  % p5 delay
  9.604367560734132  % p5 width
  1.8471062124079367  % p6 delay
  11.250122874450298  % p6 width
  1.0294512420668695  % p7 delay
  13.056647531415762  % p7 width
  0.36079895429200803  % quadrant delay
   ] store    

/a96 [ 
  10.275153279505902  % p1 delay
  2.1233556309882146  % p1 width
  8.2115482104066  % p2 delay
  4.1930336081984905  % p2 width
  6.264803529331843  % p3 delay
  6.157765833137692  % p3 width
  4.495281237426013  % p4 delay
  7.976346292010689  % p4 width
  2.9669207635656676  % p5 delay
  9.646432050857882  % p5 width
  1.7477032094150075  % p6 delay
  11.320166050312238  % p6 width
  0.9148247359680965  % p7 delay
  13.409077457751365  % p7 width
  0.2975881111242984  % quadrant delay
   ] store  

/a97 [ 
  10.240457024341477  % p1 delay
  2.134077471317074  % p1 width
  8.164867772841955  % p2 delay
  4.213452442998779  % p2 width
  6.205523779081837  % p3 delay
  6.185452328837567  % p3 width
  4.423234605472523  % p4 delay
  8.006618220218015  % p4 width
  2.8821971876470442  % p5 delay
  9.672069264487952  % p5 width
  1.6500883956263123  % p6 delay
  11.355113654260407  % p6 width
  0.8016574526230471  % p7 delay
  13.831443290493283  % p7 width
  0.23374710975272705  % quadrant delay
   ] store  



/a98 [ 
  10.201940773921007  % p1 delay
  2.1427535621580062  % p1 width
  8.1160304405589  % p2 delay
  4.229503836724113  % p2 width
  6.145502859365315  % p3 delay
  6.205687104545131  % p3 width
  4.351688442224891  % p4 delay
  8.024338941005154  % p4 width
  2.7990882078968866  % p5 delay
  9.67371438320096  % p5 width
  1.555079224439453  % p6 delay
  11.330237907918856  % p6 width
  0.69116413541866  % p7 delay
  14.364207461243552  % p7 width
  0.169062719379113  % quadrant delay
   ] store 
   
/a99 [ 
  10.156863627959598  % p1 delay
  2.1480428640811766  % p1 width
  8.06339164056924  % p2 delay
  4.238341714779558  % p2 width
  6.0840316757476  % p3 delay
  6.213675963725404  % p3 width
  4.280754974385665  % p4 delay
  8.02161284750413  % p4 width
  2.718452103604484  % p5 delay
  9.636460505287125  % p5 width
  1.4642999953711353  % p6 delay
  11.197329413972475  % p6 width
  0.5860923925256714  % p7 delay
  15.087472750976061  % p7 width
  0.10317752951067405  % quadrant delay
   ] store  

/a100 [ 
  10.097664622565073  % p1 delay
  2.146284244870163  % p1 width
  8.002396397096308  % p2 delay
  4.23222417093767  % p2 width
  6.019120165289753  % p3 delay
  6.1964902984829  % p3 width
  4.21068681625524  % p4 delay
  7.977592739007122  % p4 width
  2.6425485752095525  % p5 delay
  9.523271990574841  % p5 width
  1.3819874635530311  % p6 delay
  10.855567612314722  % p6 width
  0.4941631819604595  % p7 delay
  16.184573443763554  % p7 width
  0.03542827811961047  % quadrant delay
   ] store   


/range 
[ (01) (10) (20) (30) (40) (50) (53) (60) (70) (80) (90) (95)(96)(97) (98)(99)(100) ]
store


/procit1 {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 13 get 2.5 mul lineto
} def


/procit2 {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 11 get 2.5 mul lineto
} def



/procit3 {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 9 get 2.5 mul lineto
} def


/procit4 {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 7 get 2.5 mul lineto
} def


/procit5 {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 5 get 2.5 mul lineto
} def

/procit6 {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 3 get 2.5 mul lineto
} def

/procit7 {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 1 get 2.5 mul lineto
} def



/procit1d {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 12 get 2.5 mul lineto
} def


/procit2d {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 10 get 2.5 mul lineto
} def



/procit3d {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 8 get 2.5 mul lineto
} def


/procit4d {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 6 get 2.5 mul lineto
} def


/procit5d {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 4 get 2.5 mul lineto
} def

/procit6d {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 2 get 2.5 mul lineto
} def

/procit7d {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 0 get 2.5 mul lineto
} def


/procit8d {  dup cvi  /curval exch store  (a)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 14 get 2.5 mul lineto
} def




% 40 100 10 setgrid
40 40 showgrid
line1 


0 30 mt range {procit7d} forall
40 0 lineto 0 0 lineto closepath
0 settint 0.8 setgray fill 

0 30 mt range {procit6d} forall
40 0 lineto 0 0 lineto closepath
0.1 settint 0.8 setgray fill 

0 30 mt range {procit5d} forall
40 0 lineto 0 0 lineto closepath
0.2 settint 0.8 setgray fill

0 30 mt range {procit4d} forall
40 0 lineto 0 0 lineto closepath
0.27 settint 0.8 setgray fill

0 30 mt range {procit3d} forall
40 0 lineto 0 0 lineto closepath
0.43 settint 0.8 setgray fill



0 30 mt range {procit2d} forall
40 0 lineto 0 0 lineto closepath
0.5 settint 0.8 setgray fill

0 30 mt range {procit1d} forall
40 0 lineto 0 0 lineto closepath
0.6 settint 0.8 setgray fill



0 15 mt range {procit8d} forall
40 0 lineto 0 0 lineto closepath
0.7 settint 0.8 setgray fill 







0 0 mt range {procit1} forall
40 0 lineto closepath
0.6 settint 0.6 setgray fill 

0 0 mt range {procit2} forall
40 0 lineto closepath
0.5 settint 0.6 setgray fill

0 0 mt range {procit3} forall
40 0 lineto closepath
0.43 settint 0.6 setgray fill 

0 0 mt range {procit4} forall
40 0 lineto closepath
0.27 settint 0.6 setgray fill 

0 0 mt range {procit5} forall
40 0 lineto closepath
0.2 settint 0.6 setgray fill 


0 0 mt range {procit6} forall
40 0 lineto closepath
0.1 settint 0.6 setgray fill 


0 0 mt range {procit7} forall
40 0 lineto closepath
0 settint 0.6 setgray fill 







black

0 0 mt 
range {procit1} forall
stroke

0 0 mt 
range {procit2} forall
stroke

0 0 mt 
range {procit3} forall
 stroke 

0 0 mt 
range {procit4} forall
 stroke 

0 0 mt 
range {procit5} forall
 stroke 

0 0 mt 
range {procit6} forall
 stroke 

0 0 mt 
range {procit7} forall
 stroke 






0 30 mt 
range {procit1d} forall

0 30 mt 
range {procit2d} forall

0 30 mt 
range {procit3d} forall
 stroke 

0 30 mt 
range {procit4d} forall
 stroke 

0 30 mt 
range {procit5d} forall
 stroke 

0 30 mt 
range {procit6d} forall
 stroke 

0 30 mt 
range {procit7d} forall
 stroke 

0 15 mt 
range {procit8d} forall
 stroke 


0.3 0.3 0.3 setrgbcolor line3 1 setlinecap 1 setlinejoin

0 0 mt 40 u 40 r 40 d 40 l
[{ 0 0 mt 0.4 l} 10 5 ] yrpt
[{ 40 0 mt 0.4 r} 10 5 ] yrpt
[{ 0 0 mt 0.4 d} 10 5 ] xrpt
[{ 0 40 mt 0.4 u} 10 5 ] xrpt

/cstretch 0.02 store
/sstretch 0 store
/font0 /StoneSans-Bold 1.5 gonzofont
/font1 /StoneSans-Bold 1.2 gonzofont
/font2 /StoneSans-Bold 1 gonzofont
/font: /StoneSans-Bold [0.6 0 0 0.6 0 0.6] gonzofont
/font; /StoneSans-Bold [1.5 0 0 1.5 0 0.2] gonzofont
/yinc 2 store
font0

20 43.7 (BEST  EFFICIENCY  N |;=|0 28\nMAGIC  SINEWAVE) cc





font1
/yinc 1.5 store

0 -2.2 (0.0) cc
20 -2.2 (0.5) cc
40 -2.2 (1.0)cc

20 -4.3 (AMPLITUDE) cc

41 -0.5 (0) cl
41 9.5 (4) cl
41 19.5 (8) cl
41 29.5 (12) cl
41 39.5 (16) cl

45.5 21 (DELAY\nTIME IN\nDEGREES) cc

font2
26.5 1.2 (PULSE  WIDTHS) cc

1.5 17 (PULSE  DELAYS) cl


2.6 32.6 (0|:o) cc
27.4 32.6 (90|:o) cc


% generate actual magic sinewave

/makemagic {gsave translate 0.25 dup scale line3

/ht 17 store
/dht 6 store

0 setlinecap 0 setlinejoin
dht setlinewidth

0 0 mt 
a50 0 get pr
0 settint 0.8 setgray stroke

0 a50 0 get add a50 1 get add 0 mt
a50 2 get pr
0.1 settint 0.8 setgray stroke


0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add     0 mt
a50 4 get pr
0.2 settint 0.8 setgray stroke

0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add
a50 4 get add a50 5 get add
     0 mt
a50 6 get pr
0.3 settint 0.8 setgray stroke

0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add
a50 4 get add a50 5 get add a50 6 get add a50 7 get add
     0 mt
a50 8 get pr
0.4 settint 0.8 setgray stroke


0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add
a50 4 get add a50 5 get add a50 6 get add a50 7 get add
a50 8 get add a50 9 get add
     0 mt
a50 10 get pr
0.5 settint 0.8 setgray stroke


0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add
a50 4 get add a50 5 get add a50 6 get add a50 7 get add
a50 8 get add a50 9 get add a50 10 get add a50 11 get add
     0 mt
a50 12 get pr
0.6 settint 0.8 setgray stroke

0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add
a50 4 get add a50 5 get add a50 6 get add a50 7 get add
a50 8 get add a50 9 get add a50 10 get add a50 11 get add
a50 12 get add a50 13 get add
     0 mt
a50 14 get pr
0.7 settint 0.8 setgray stroke

%% pulses

a50 0 get 0 mt
ht pu
0 a50 1 get pr
ht pd
closepath
0 settint 0.6 setgray fill


a50 0 get a50 1 get add a50 2 get add 
0 mt ht pu
0 a50 3 get pr
ht pd
closepath
0.1 settint 0.6 setgray fill

a50 0 get a50 1 get add a50 2 get add a50 3 get add a50 4 get add
0 mt ht pu
0 a50 5 get pr
ht pd
closepath
0.2 settint 0.6 setgray fill

a50 0 get a50 1 get add a50 2 get add a50 3 get add a50 4 get add
a50 5 get add a50 6 get add
0 mt ht pu
0 a50 7 get pr
ht pd
closepath
0.3 settint 0.6 setgray fill

a50 0 get a50 1 get add a50 2 get add a50 3 get add a50 4 get add
a50 5 get add a50 6 get add a50 7 get add a50 8 get add
0 mt ht pu
0 a50 9 get pr
ht pd
closepath
0.4 settint 0.6 setgray fill

a50 0 get a50 1 get add a50 2 get add a50 3 get add a50 4 get add
a50 5 get add a50 6 get add a50 7 get add a50 8 get add
a50 9 get add a50 10 get add
0 mt ht pu
0 a50 11 get pr
ht pd
closepath
0.5 settint 0.6 setgray fill

a50 0 get a50 1 get add a50 2 get add a50 3 get add a50 4 get add
a50 5 get add a50 6 get add a50 7 get add a50 8 get add
a50 9 get add a50 10 get add a50 11 get add a50 12 get add
0 mt ht pu
0 a50 13 get pr
ht pd
closepath
0.6 settint 0.6 setgray fill





1 setlinecap 1 setlinejoin
black

0 0 mt
a50 0 get 0 rlineto
0 ht pu
a50 1 get 0 rlineto
0 ht pd

a50 2 get 0 rlineto
0 ht pu
a50 3 get 0 rlineto
0 ht pd

a50 4 get 0 rlineto
0 ht pu
a50 5 get 0 rlineto
0 ht pd

a50 6 get 0 rlineto
0 ht pu
a50 7 get 0 rlineto
0 ht pd

a50 8 get 0 rlineto
0 ht pu
a50 9 get 0 rlineto
0 ht pd

a50 10 get 0 rlineto
0 ht pu
a50 11 get 0 rlineto
0 ht pd


a50 12 get 0 rlineto
0 ht pu
a50 13 get 0 rlineto
0 ht pd

a50 14 get 0 rlineto


0.45 setlinewidth
stroke









grestore} def


3.5 33 makemagic




} store   % end special1code definition







%%%%%%%%%%% special2 code

/special2code {


/ad01 [ 
  7.434338157133027  % delay a=60-p5e
  0.11880195485247924  % delay b=p5e-p5s
  0.019577960879085587  % delay c=p1e-p1s
  14.855161666700834  % delay d=p2s-p1e
  0.021983040440492374  % delay e=p2e-p2s
  0.0911673899925809  % delay f=p3s-p2e
  0.0353778304366692  % delay g=p3e-p3s
  7.4235919995647634  % delay h=30-p3e
   ] store  
 
/ad10 [ 
  6.840486668588909  % delay a=60-p5e
  1.1877031146444991  % delay b=p5e-p5s
  0.19606479817654332  % delay c=p1e-p1s
  13.542825252098737  % delay d=p2s-p1e
  0.1524725715290529  % delay e=p2e-p2s
  0.9104569599226266  % delay f=p3s-p2e
  0.4224088615298953  % delay g=p3e-p3s
  6.7475817735097365  % delay h=30-p3e
   ] store   



/ad20 [ 
  6.179615738852249  % delay a=60-p5e
  2.368314508230462  % delay b=p5e-p5s
  0.39486570406405263  % delay c=p1e-p1s
  12.090328683781834  % delay d=p2s-p1e
  0.2773208755122525  % delay e=p2e-p2s
  1.8107046591154443  % delay f=p3s-p2e
  0.8802494355140809  % delay g=p3e-p3s
  5.998600394929625  % delay h=30-p3e
   ] store   

/ad30 [ 
  5.51798715656065  % delay a=60-p5e
  3.537987411554724  % delay b=p5e-p5s
  0.5996610353231375  % delay c=p1e-p1s
  10.6414917563349  % delay d=p2s-p1e
  0.378916570008613  % delay e=p2e-p2s
  2.6949373104326213  % delay f=p3s-p2e
  1.3768763200109077  % delay g=p3e-p3s
  5.252142439774445  % delay h=30-p3e
   ] store    



/ad40 [ 
  4.8560795807034935  % delay a=60-p5e
  4.692317283738298  % delay b=p5e-p5s
  0.8138114048538583  % delay c=p1e-p1s
  9.195452323744191  % delay d=p2s-p1e
  0.46036801366636126  % delay e=p2e-p2s
  3.5594981265840886  % delay f=p3s-p2e
  1.9150363136688284  % delay g=p3e-p3s
  4.50743695304088  % delay h=30-p3e
   ] store    






/ad50 [ 
  4.194298075500072  % delay a=60-p5e
  5.825866502969745  % delay b=p5e-p5s
  1.0408488460292488  % delay c=p1e-p1s
  7.751463747608284  % delay d=p2s-p1e
  0.5238895562340744  % delay e=p2e-p2s
  4.403346953313516  % delay f=p3s-p2e
  2.496487356236706  % delay g=p3e-p3s
  3.7637989621083534  % delay h=30-p3e
   ] store    

/ad53 [ 
  3.995843046736013  % delay a=60-p5e
  6.160868086216446  % delay b=p5e-p5s
  1.112006440311525  % delay c=p1e-p1s
  7.318567062952312  % delay d=p2s-p1e
  0.5397256759732585  % delay e=p2e-p2s
  4.652707315620958  % delay f=p3s-p2e
  2.679463155973238  % delay g=p3e-p3s
  3.5408192162162493  % delay h=30-p3e
   ] store   

/ad60 [ 
  3.5330039078836606  % delay a=60-p5e
  6.9314513603008905  % delay b=p5e-p5s
  1.2842465239317846  % delay c=p1e-p1s
  6.308872401421397  % delay d=p2s-p1e
  0.5713975364200223  % delay e=p2e-p2s
  5.228837780084575  % delay f=p3s-p2e
  3.1216051264200075  % delay g=p3e-p3s
  3.0205853635376627  % delay h=30-p3e
   ] store   

 
/ad70 [ 
  2.8725257224432425  % delay a=60-p5e
  7.998916501222098  % delay b=p5e-p5s
  1.5460427838912807  % delay c=p1e-p1s
  4.8671218102361  % delay d=p2s-p1e
  0.6062046544537196  % delay e=p2e-p2s
  6.042997615507133  % delay f=p3s-p2e
  3.789041064453741  % delay g=p3e-p3s
  2.2771498477926854  % delay h=30-p3e
   ] store   

/ad80 [ 
  2.2131268407607223  % delay a=60-p5e
  9.012727944067371  % delay b=p5e-p5s
  1.8200962344110607  % delay c=p1e-p1s
  3.4258327180993433  % delay d=p2s-p1e
  0.6400219482894229  % delay e=p2e-p2s
  6.85987852874419  % delay f=p3s-p2e
  4.495547368289273  % delay g=p3e-p3s
  1.532768417338616  % delay h=30-p3e
   ] store   




/ad90 [ 
  1.55474755544018  % delay a=60-p5e
  9.946227643338275  % delay b=p5e-p5s
  2.048752785780998  % delay c=p1e-p1s
  1.9853102905593687  % delay d=p2s-p1e
  0.736140589142309  % delay e=p2e-p2s
  7.705915111477708  % delay f=p3s-p2e
  5.236535369142075  % delay g=p3e-p3s
  0.7863706551190859  % delay h=30-p3e
   ] store    


/ad95 [ 
  1.225355348586767  % delay a=60-p5e
  10.367111550363887  % delay b=p5e-p5s
  2.0303138224619843  % delay c=p1e-p1s
  1.2665437513423114  % delay d=p2s-p1e
  0.9241283097125574  % delay e=p2e-p2s
  8.155346335065047  % delay f=p3s-p2e
  5.619630049711802  % delay g=p3e-p3s
  0.4115708327556433  % delay h=30-p3e
   ] store 
  
/ad98 [ 
  1.026684367555248  % delay a=60-p5e
  10.596415552349142  % delay b=p5e-p5s
  1.807508982542501  % delay c=p1e-p1s
  0.837605401539733  % delay d=p2s-p1e
  1.2493523058395936  % delay e=p2e-p2s
  8.441202830348274  % delay f=p3s-p2e
  5.855882255842914  % delay g=p3e-p3s
  0.18534830398259316  % delay h=30-p3e
   ] store     


/ad100 [ 
  0.8921862350266565  % delay a=60-p5e
  10.732271751681054  % delay b=p5e-p5s
  1.3169014782635031  % delay c=p1e-p1s
  0.5554591355065241  % delay d=p2s-p1e
  1.8052854865738012  % delay e=p2e-p2s
  8.644568525896716  % delay f=p3s-p2e
  6.020358566571353  % delay g=p3e-p3s
  0.032968820480391514  % delay h=30-p3e
   ] store    


/range 
[ (01) (10) (20) (30) (40) (50) (53) (60) (70) (80) (90) (95) (98)(100) ]
store


/procit1 {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 1 get 2.5 mul lineto
} def


/procit2 {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 2 get 2.5 mul lineto
} def



/procit3 {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 4 get 2.5 mul lineto
} def


/procit4 {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 5 get 2.5 mul lineto
} def


/procit5 {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 6 get 2.5 mul lineto
} def

/procit6 {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 3 get 2.5 mul lineto
} def

/procit7 {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 1 get 2.5 mul lineto
} def



/procit1d {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 0 get 2.5 mul lineto
} def


/procit2d {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 3 get 2.5 mul lineto
} def



/procit3d {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 7 get 2.5 mul lineto
} def


/procit4d {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 6 get 2.5 mul lineto
} def


/procit5d {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 4 get 2.5 mul lineto
} def

/procit6d {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 2 get 2.5 mul lineto
} def

/procit7d {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 0 get 2.5 mul lineto
} def


/procit8d {  dup cvi  /curval exch store  (ad)exch  mergestr cvn /curdat exch store

curval 2.5 div   curdat cvx exec 14 get 2.5 mul lineto
} def




% 40 100 10 setgrid
40 40 showgrid
line1 

% delays

0 37.5 mt range {procit2d} forall
40 0 lineto 0 0 lineto closepath
0.15 settint 0.8 setgray fill

0 18.75 mt range {procit1d} forall
40 0 lineto 0 0 lineto closepath
0 settint 0.8 setgray fill 


0 18.75 mt range {procit3d} forall
40 0 lineto 0 0 lineto closepath
0.3 settint 0.8 setgray fill

% pulses

0 0 mt range {procit1} forall
40 0 lineto 0 0 lineto closepath
0.0 settint 0.6 setgray fill

0 0 mt range {procit4} forall
40 0 lineto 0 0 lineto closepath
0.5 settint 0.6 setgray fill

0 0 mt range {procit5} forall
40 0 lineto 0 0 lineto closepath
0.6 settint 0.6 setgray fill

0 0 mt range {procit2} forall
40 0 lineto 0 0 lineto closepath
0.15 settint 0.6 setgray fill

0 0 mt range {procit3} forall
40 0 lineto 0 0 lineto closepath
0.3 settint 0.6 setgray fill


black line1

0 18.75 mt 
range {procit1d} forall stroke

0 37.5 mt 
range {procit2d} forall stroke

0 18.75 mt 
range {procit3d} forall stroke
 stroke


% width outlines

0 0 mt 
range {procit1} forall stroke

0 0 mt 
range {procit2} forall stroke

0 0 mt 
range {procit3} forall stroke

0 0 mt 
range {procit4} forall stroke

0 0 mt 
range {procit5} forall stroke





0.3 0.3 0.3 setrgbcolor line3 1 setlinecap 1 setlinejoin

0 0 mt 40 u 40 r 40 d 40 l
[{ 0 0 mt 0.4 l} 10 5 ] yrpt
[{ 40 0 mt 0.4 r} 10 5 ] yrpt
[{ 0 0 mt 0.4 d} 10 5 ] xrpt
[{ 0 40 mt 0.4 u} 10 5 ] xrpt

/cstretch 0.02 store
/sstretch 0 store
/font0 /StoneSans-Bold 1.5 gonzofont
/font1 /StoneSans-Bold 1.2 gonzofont
/font2 /StoneSans-Bold 1 gonzofont
/font: /StoneSans-Bold [0.6 0 0 0.6 0 0.6] gonzofont
/font; /StoneSans-Bold [1.5 0 0 1.5 0 0.2] gonzofont
/yinc 2 store
font0

20 45 (DELTA FRIENDLY  N |;=|0 28\nMAGIC  SINEWAVE) cc





font1
/yinc 1.5 store

0 -2.2 (0.0) cc
20 -2.2 (0.5) cc
40 -2.2 (1.0)cc

20 -4.3 (AMPLITUDE) cc

41 -0.5 (0) cl
41 9.5 (4) cl
41 19.5 (8) cl
41 29.5 (12) cl
41 39.5 (16) cl

46.5 21 (DELAY\nTIME IN\nDEGREES) cc

font2
23.5 4.7 (PULSE  WIDTHS) cc

1.5 22.5 (PULSE  DELAYS) cl




% generate actual magic sinewave

/makemagicold {gsave translate 0.25 dup scale line3

/ht 12 store
/dht 6 store

0 setlinecap 0 setlinejoin
dht setlinewidth

0 0 mt 
a50 0 get pr
0 settint 0.8 setgray stroke

0 a50 0 get add a50 1 get add 0 mt
a50 2 get pr
0.1 settint 0.8 setgray stroke


0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add     0 mt
a50 4 get pr
0.2 settint 0.8 setgray stroke

0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add
a50 4 get add a50 5 get add
     0 mt
a50 6 get pr
0.3 settint 0.8 setgray stroke

0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add
a50 4 get add a50 5 get add a50 6 get add a50 7 get add
     0 mt
a50 8 get pr
0.4 settint 0.8 setgray stroke


0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add
a50 4 get add a50 5 get add a50 6 get add a50 7 get add
a50 8 get add a50 9 get add
     0 mt
a50 10 get pr
0.5 settint 0.8 setgray stroke


0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add
a50 4 get add a50 5 get add a50 6 get add a50 7 get add
a50 8 get add a50 9 get add a50 10 get add a50 11 get add
     0 mt
a50 12 get pr
0.6 settint 0.8 setgray stroke

0 a50 0 get add a50 1 get add a50 2 get add a50 3 get add
a50 4 get add a50 5 get add a50 6 get add a50 7 get add
a50 8 get add a50 9 get add a50 10 get add a50 11 get add
a50 12 get add a50 13 get add
     0 mt
a50 14 get pr
0.7 settint 0.8 setgray stroke

%% pulses

a50 0 get 0 mt
ht pu
0 a50 1 get pr
ht pd
closepath
0 settint 0.6 setgray fill


a50 0 get a50 1 get add a50 2 get add 
0 mt ht pu
0 a50 3 get pr
ht pd
closepath
0.1 settint 0.6 setgray fill

a50 0 get a50 1 get add a50 2 get add a50 3 get add a50 4 get add
0 mt ht pu
0 a50 5 get pr
ht pd
closepath
0.2 settint 0.6 setgray fill

a50 0 get a50 1 get add a50 2 get add a50 3 get add a50 4 get add
a50 5 get add a50 6 get add
0 mt ht pu
0 a50 7 get pr
ht pd
closepath
0.3 settint 0.6 setgray fill

a50 0 get a50 1 get add a50 2 get add a50 3 get add a50 4 get add
a50 5 get add a50 6 get add a50 7 get add a50 8 get add
0 mt ht pu
0 a50 9 get pr
ht pd
closepath
0.4 settint 0.6 setgray fill

a50 0 get a50 1 get add a50 2 get add a50 3 get add a50 4 get add
a50 5 get add a50 6 get add a50 7 get add a50 8 get add
a50 9 get add a50 10 get add
0 mt ht pu
0 a50 11 get pr
ht pd
closepath
0.5 settint 0.6 setgray fill

a50 0 get a50 1 get add a50 2 get add a50 3 get add a50 4 get add
a50 5 get add a50 6 get add a50 7 get add a50 8 get add
a50 9 get add a50 10 get add a50 11 get add a50 12 get add
0 mt ht pu
0 a50 13 get pr
ht pd
closepath
0.6 settint 0.6 setgray fill





1 setlinecap 1 setlinejoin
black

0 0 mt
a50 0 get 0 rlineto
0 ht pu
a50 1 get 0 rlineto
0 ht pd

a50 2 get 0 rlineto
0 ht pu
a50 3 get 0 rlineto
0 ht pd

a50 4 get 0 rlineto
0 ht pu
a50 5 get 0 rlineto
0 ht pd

a50 6 get 0 rlineto
0 ht pu
a50 7 get 0 rlineto
0 ht pd

a50 8 get 0 rlineto
0 ht pu
a50 9 get 0 rlineto
0 ht pd

a50 10 get 0 rlineto
0 ht pu
a50 11 get 0 rlineto
0 ht pd


a50 12 get 0 rlineto
0 ht pu
a50 13 get 0 rlineto
0 ht pd

a50 14 get 0 rlineto


0.45 setlinewidth
stroke









grestore} def


/makemagic {gsave translate 0.8 dup scale line3

/ht 3 store
/dht 1.5 store

0 setlinecap 0 setlinejoin
dht setlinewidth

0 0 mt 
ad70 0 get pr
0 settint 0.8 setgray stroke


ad70 0 get ad70 1 get add ad70 2 get add  
0 mt
ad70 3 get pr
0.15 settint 0.8 setgray stroke


ad70 0 get ad70 1 get add ad70 2 get add  
ad70 3 get add ad70 4 get add ad70 5 get add ad70 6 get add
0 mt
ad70 7 get pr
0.3 settint 0.8 setgray stroke

% pulses


ad70 0 get 0 mt
ht 2 mul pu
ad70 1 get pr
ht 2 mul pd
closepath
0 settint 0.6 setgray fill



ad70 0 get ad70 1 get add 0 mt
ht 2 mul pu
ad70 2 get pr
ht 2 mul pd
closepath
0.15 settint 0.6 setgray fill

ad70 0 get ad70 1 get add ad70 2 get add  ad70 3 get add              0 mt
ht 2 mul pu
ad70 4 get pr
ht 2 mul pd
closepath
0.30 settint 0.6 setgray fill

ad70 0 get ad70 1 get add ad70 2 get add  ad70 3 get add  ad70 4 get add            0 mt
ht 2 mul pu
ad70 5 get pr
ht 2 mul pd
closepath
0.5 settint 0.6 setgray fill

ad70 0 get ad70 1 get add ad70 2 get add  ad70 3 get add  ad70 4 get add
ad70 5 get add            0 mt
ht 2 mul pu
ad70 6 get pr
ht 2 mul pd
closepath
0.6 settint 0.6 setgray fill





% outlines

black line1
1 setlinecap 1 setlinejoin


0 0 mt
ad70 0 get pr
ht pu
ad70 1 get pr
ht pd
ht pu
ad70 2 get pr
ht pd

ad70 3 get pr 
ht pu
ad70 4 get pr
ht pd
ht pu
ad70 5 get pr
ht pd
ht pu
ad70 6 get pr
ht pd

ad70 7 get pr


stroke




0 0 mt
ad70 0 get pr
ht 2 mul  pu
ad70 1 get ad70 2 get add pr
ht 2 mul pd

ad70 3 get pr
ht 2 mul pu

ad70 4 get ad70 5 get add ad70 6 get add pr
ht 2 mul pd



stroke






% p3 poker

17.8 -0.45 mt 1.65 -2.5 rlineto black line1 stroke

11.5 -0.45 mt -1.65 -2.5 rlineto black line1 stroke



grestore } def






 12 31 makemagic

font2
11 30.5  (0|:o) cc
37.5 30.5   (30|:o) cc
28.5 28.3 (p2) cc
18.9 28.3 (p1) cc


18 31.8 (p5) cc
28.8 31.8 (p4) cc
32.7 31.8 (p3) cc

18 34.2 (p6) cc
30.2 34.2 (p7) cc

} store  % end special 2 def

% ----------



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


 % //// REVISED DIPDRAW PROC /////
electronics begin       
% dipdraw - draws a dip integrated circuit.  (old code to be improved)

% Enter with currentpoint set to pin 1 and scale
% set so that 1.0 = distance between pins.  Then
% do a numpins-(name)-(hipins)-(lopins) dipdraw
% Pin callouts preceeded by / will be complemented.
    
% main dipdraw entry:
/dipdraw { save /dipsnap exch def /hipins exch def /lopins
exch def /chipname exch def /numpins exch def

mark 0 0 0 0 0 0 0 0 0 0 0 0 % temp patch

/howlong
{numpins 2 div cvi 1 add} def /howhigh {4 numpins 36 ge
{1 add} if} def /stub {howhigh 1.4 sub 2 div} def

% internal service subs start here:

/pinproc {numpins 2 div cvi{newpath 0 cpos 0.37 0 360 arc
gsave 1 setgray fill grestore 0.067 setlinewidth stroke 
pin# 5 string cvs dup stringwidth pop 2 div neg cpos
0.2 sub moveto show 1 0 translate /pin# pin# dir add
def} repeat } def

/stretchprint { dup stringwidth pop 2 div neg exch length
1 sub stretch mul 2 div sub  0 moveto callout (/)
anchorsearch true eq {currentpoint exch stretch add exch
moveto pop dup /callout exch def stringwidth
pop callout length 1 sub stretch mul add /barwide exch def
0.033 setlinewidth gsave currentpoint 0.55 add moveto
barwide 0 rlineto stroke grestore} if stretch 0 callout
ashow pop} def

/pincallouts{0 vpos translate {workstring ( ) search true
eq {/callout exch def pop /workstring exch def callout
stretchprint 1 0 translate}{dup /callout exch def
stretchprint exit } ifelse}loop} def

% actual dipdraw process starts here:

% ........ the outline:

gsave 1 setlinecap 1 setlinejoin
currentpoint translate


newpath -1 howhigh 2 div 0.7 -90 90  arc 0 stub
rlineto howlong 0 rlineto 0 howhigh neg rlineto howlong
neg 0 rlineto closepath 

gsave grayshade setgray fill grestore
  grayshade dup 1 ne {0.33}{0} ifelse setgray 
0.36 setlinewidth stroke   


 newpath -.55 .45 0.15 0 360
arc fill 
black
% ........ pin circles and numbers:

/Helvetica-Bold findfont [0.4 0 0 0.55 0 0] makefont
setfont gsave /pin# 1 def  /dir 1 def /cpos 0 def pinproc
grestore gsave /pin# numpins def  /dir -1 def /cpos howhigh
def pinproc grestore


%  pin callouts:

/Helvetica findfont [0.35 0 0 0.6 0 0] makefont setfont
/stretch 0.033 def gsave /workstring hipins def /vpos
0.6 def  pincallouts grestore gsave /workstring
lopins def /vpos howhigh 1.05 sub def pincallouts
grestore

%  device number:
grayshade 1 ne {0.33}{0} ifelse setgray
/Helvetica-Bold findfont [1.4 0 0 1 0 0] makefont setfont
/stretch 0.05 def gsave numpins 2 div 1 sub 2 div howhigh
2 div 0.33 sub translate chipname dup /callout exch def
stretchprint grestore
black
%  end cleanup:

grestore grestore
cleartomark dipsnap restore} def
end  % get out of electronics? 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%











/special1 {save /s1snap exch store  4.5 2.5 translate 
0.8 dup scale special1code s1snap restore} store


/special2 {save /s1snap exch store  4.5 17 translate 
0.8 dup scale special2code s1snap restore} store



/special5 {gsave 4 -5.85 translate 
         line1  black
         0.3 0 mt 0.3 l 5.2 u 0.3 r
         13.2 0 mt  0.3 r 5.2 u 0.3 l
         15.3 0 mt 0.3 l 5.2 u 0.3 r
         18.3 0 mt 0.3 r 5.2 u 0.3 l grestore
             } store

/xkernon {/kernsave kern store  /kern 0.18 store } def
/xkernoff {/kern kernsave store} def

/pagenum 1 store

/startnewpage {
black  beige 0.35 setgray 
21 -2.5 (|3\320|j|j) ggnum 10 string cvs mergestr (|j.|j) mergestr
pagenum 10 string cvs mergestr (|j|j\320) mergestr cc
aqua

showpage

%% start next page 

/pagenum pagenum 1 add store


50 50 10 setgrid                               % create grid
setpagefonts

font1
textleft texttop 
} def

/su {surl font6} store
/to {tinton1 font6} store
/tx {tintoff font1} store



/tabs [7 20] store

/overstrikeht 0.52 store

%%%% glyph module





/font: /Symbol 1.5 gonzofont
/font+ /Helvetica [0.9 0 0 0.85 0 0.6] gonzofont
/font= /Helvetica 1.5 gonzofont


/glyphx1 { mark /glyphx1exec cvx ] cvx 
           printlist exch 3 index exch       % stuff into gonzo printlist
           put exch 1 add exch               % increment gonzo list count     
          } store

/glyphx1exec {gsave currentpoint 0.31 add translate  0 setgray
      font:  0 0.6 moveto (\266j) show  
       0 -1.3 moveto (\266) show font= (x) show
       line2 0 0.1 mt 1.8 r
       grestore} store


/glyphy1 { mark /glyphy1exec cvx ] cvx 
           printlist exch 3 index exch       % stuff into gonzo printlist
           put exch 1 add exch               % increment gonzo list count     
          } store

/glyphy1exec {gsave currentpoint 0.31 add translate  0 setgray
      font:  0 0.6 moveto (\266j) show  
       0 -1.3 moveto (\266) show font= (y) show
       line2 0 0.1 mt 1.8 r
       grestore} store


/glyphz1 { mark /glyphz1exec cvx ] cvx 
           printlist exch 3 index exch       % stuff into gonzo printlist
           put exch 1 add exch               % increment gonzo list count     
          } store

/glyphz1exec {gsave currentpoint 0.31 add translate  0 setgray
      font:  0 0.6 moveto (\266j) show  
       0 -1.3 moveto (\266) show font= (z) show
       line2 0 0.1 mt 1.8 r
       grestore} store




/glyphx2 { mark /glyphx2exec cvx ] cvx 
           printlist exch 3 index exch       % stuff into gonzo printlist
           put exch 1 add exch               % increment gonzo list count     
          } store

/glyphx2exec {gsave currentpoint 0.31 add translate  0 setgray
      font:  0 0.6 moveto (\266) show font+ (2) show font: (j) show  
       0 -1.4 moveto (\266) show font= (x) show font+ (2) show
       line2 0 0.1 mt 1.8 r
       grestore} store


/glyphy2 { mark /glyphy2exec cvx ] cvx 
           printlist exch 3 index exch       % stuff into gonzo printlist
           put exch 1 add exch               % increment gonzo list count     
          } store

/glyphy2exec {gsave currentpoint 0.31 add translate  0 setgray
      font:  0 0.6 moveto (\266) show font+ (2) show font: (j) show   
       0 -1.4 moveto (\266) show font= (y) show font+ (2) show
       line2 0 0.1 mt 1.8 r
       grestore} store


/glyphz2 { mark /glyphz2exec cvx ] cvx 
           printlist exch 3 index exch       % stuff into gonzo printlist
           put exch 1 add exch               % increment gonzo list count     
          } store

/glyphz2exec {gsave currentpoint 0.31 add translate  0 setgray
      font:  0 0.6 moveto (\266) show font+ (2) show font: (j) show  
       0 -1.4 moveto (\266) show font= (z) show font+ (2) show
       line2 0 0.1 mt 1.8 r
       grestore} store




/lateblack { mark 1 0 0.7 /setrgbcolor cvx ] cvx 
           printlist exch 3 index exch       % stuff into gonzo printlist
           put exch 1 add exch               % increment gonzo list count     
          } store


/lateburple { mark 0.5 0 1 /setrgbcolor cvx ] cvx 
           printlist exch 3 index exch       % stuff into gonzo printlist
           put exch 1 add exch               % increment gonzo list count     
          } store



%%%%%%%%%%%%%%
/font; /Helvetica [0.7 0 0 0.7 0 0.4] gonzofont
font1

/font- /Symbol 0.85 gonzofont


aqua 0.33 setgray
font0


/fastart false store  % sets speeds on slow artwork



20 47.3 0.7  add    %  1 sub  
(Extracting |j|jText |j|jand |j|jContent)cc

 20 45.3 0.7  add  %1 sub  
 (From |j|jAcrobat |j|j.PDF |j|jfiles) cc

black
font2
textleft 43  0.3 add % this one only  need |h below 
(|/aqua |/staytint1 |3Don Lancaster
Synergetics, Box 809, Thatcher, AZ 85552
copyright c2005 as |/surl |6GuruGram|1|/gurgrm01  |/tinton1 |6#46
|/surl http://www.tinaja.com|/tinaja 
|/surl don@tinaja.com|/maildon 
(928) 428-4073
|/aqua |/black  
|a|0T|b|1here are times and places when you might like to programmatically reach into an |/su Adobe Acrobat|1|/acrob01  .PDF file and extract text, URL links, or other content. Perhaps to do the |/su word frequency analysis|1|/wordfreq.pdf  we looked at in our previous |/su GuruGram #45|1|/gurgrm01 , for additional spell checking, to verify "grade level" of content, to create indexes, provide some disability voice access, do limited editing, or handle any of a number of other custom actions. 
|h
In general, there is no single "place" in a .PDF file where you can reach in and grab fully formatted text. The text can appear in any order and often might end up as a mix of normal text and internal figure alphanumerics. Several routes to .PDF text extraction include\274
|h
|6|/shiftin |/aqua |/burplebox18 |/tintoff 
|h
|/to ACROBAT PRODUCTS - |/tx |1Full |/su Acrobat|1|/acrob01 , the |/su Acrobat Reader|/tx , and 
|/tx the Adobe |/su eBook Reader|1|/adobeebooks   are standard .PDF viewing options.
|h
|/to CUT & PASTE - |1|/tx Text can be copied to a clipboard and put
|/tx into a word processor or other ap. Text is in expected order.
|h
|/to ACROBAT PLUGINS -|1|/tx  These |/su C-language "attachments"|1|/adobeacrobatsdk  go 
|/tx in an Acrobat folder and for |/su extended capabilities|1|/startsdk.pdf . 
|h
|/to JAVASCRIPT OBJECTS - |1|/tx Modified |/su JavaScript code|1|/aqua |/adobejavascriptguide  can easily
|/tx be attached to a .PDF file and run on specified actions, such
|/tx as a page view or a mouse positioning.
|h
|/to OPEN SOURCE - |1|/tx Programs such as |/su GhostScript|1|/ghostscript  or |/su xpdf|1|/xpdf  can 
|/tx give you alternate and platform independent viewing.
|h
|/to RAW POSTSCRIPT - |1|/tx The |/su PostScript|1|/post01  language can read any
|/tx disk file in any format and offers extreme flexibility for any 
unusual or custom .PDF text extraction tasks.
|1|/shiftout |/aqua |/black 




) cl 



startnewpage 



(I've created some preliminary |/su PostScript-as-language|1|/post01  .PDF extraction utilities as       |/su VIEWPDF1.PSL|1|/viewpdf1.psl . This is an ordinary and short (about 30K) ASCII textfile that you modify with any editor or word processor and then send to |/su Acrobat Distiller|1|/acrob01  . By using |/su Distiller as a General Purpose PostScript Interpreter|1|/distlang . The code reads a .PDF file of your choice, returns specific object info, full text content, individual words, and sorted word frequency to the .LOG file produced by |/su Distiller|1|/acrob01 .
|h
|/su VIEWPDF1.PSL|1|/viewpdf1.psl  is easily adapted to your own needs. At present, this early code          |/to requires|/tx  an |/to uncompressed|/tx  .PDF file having a single piece un-linearized |/to xref|/tx  table and all objects at |/to revision zero|/tx . 
|h
You can uncompress any .PDF file by installing this |/su Windows Acrobat plug in|1|/uncompresspdf.api  and following |/su these details|1|/startsdk.pdf . Note that installing this plug-in adds an |/to Uncompressed       |/to .PDF Files|/tx  option to your full |/su Acrobat|1|/acrob01  "Save As" menu. Note also that revision zero can usually be forced by a "Save As" without web linearization or optimization. 
|h
The routines are also presently limited to about 1296 or fewer pages as |/to /Pages|/tx  is only nested four deep. Certain word frequency specific utilities also will assume a         |/to WinAnsiEncoding|/tx  font character sequence. There are also a few other "second tier" details not yet addressed. 
|h
|c
Acrobat |jStructure
|d
Your starting point in exploring the .PDF format is the |/su PDF Reference Manual|1|/pdfrefman . 
|h
When uncompressed, a .PDF file is pretty much an ordinary textfile having lines of mostly ordinary printing characters. The bulk of the .PDF file consists of container like "buckets" that are called |/to objects|/tx .
|h
Objects might hold dictionaries, strings, streams, arrays, constants, variables, extended |/su PostScript|1|/post01  commands, and true-false Booleans. Or, most importantly, contain |/to indirect|/tx  link references to other objects in the file..
|h
An object always begins with a |/to 27 0 obj|/tx  or similar starting line. Where the first digit is the |/to object number|/tx  and the second is the |/to revision number|/tx . An object always ends with an |/to endobj|/tx  line. Not all objects are necessarily in use at any given time. Thus, you should\274
|6|/shiftin |/aqua |/burplebox3 |/staytint1 
|h
      Always work with properly linked objects that are
      arranged in their specified hierarchy!
|1|/shiftout |/aqua |/black 
|h
There are many types or |/to classes|/tx  of objects. Ferinstance, an |/to /Annot|/tx  object might hold a web link to a URL. A |/to /Font|/tx  object might hold font info, such as the base font used, individual character widths for substitution, the encoding used, and other descriptors.  
|h
The objects of immediate top-down interest to us include\274
) cl 



 




startnewpage 



(|6|/shiftin |/aqua |/burplebox6.5 |/staytint1 |/tintoff 
|h
    |/to /Catalog \320 |/tx |1The main directory for the entire document.
|h
    |/to /Pages \320 |/tx |1A nested tier of objects listing pages in order.
|h
    |/to /Page \320|/tx |1 All info required to image one document page.
|h
    |/to /Contents \320|/to |/tx  Specific marking instructions for one page.
|h
|1|/shiftout |/aqua |/black 
There will be one |/to trailer|/tx  object at the end of any .PDF file. One of its entries will be |/to /Root|/tx , which will contain the object number of the top |/to /Catalog|/tx , in a |/to 59 0 R|/tx  format of |/to object number - revision number - reference letter "R"|/tx .
|h
Immediately before the trailer should be an |/to xref|/tx  cross reference. This is your basic tool to access any object. In its simplest form, the cross reference will begin with an |/to xref|/tx  on one line followed by a revision section and a count on the next.
|h
To find any object, you count the object's number of lines down into the xref table, pick off the first ten digits, lop off any leading zeros, and set this as your       |/to file offset|/tx  to reach the start of your desired object. In |/su PostScript|1|/post01 , you can directly use this value sent to |/to setfileposition|/tx  operator to exactly locate yourself.
|h
You can analyze most any .PDF file by reading the |/to /Root|/tx  object to find your           |/to /Catalog|/tx  , using |/to /Catalog|/tx  to find |/to /Pages|/tx  and then |/to /Pages|/tx  to find your actual         |/to /Page|/tx  objects. A |/to /Contents|/tx  entry in the individual |/to /Page|/tx  objects will then give you access to the words used and other markings and images involved.
|h
There can be some complications. Ferinstance, |/to /Pages|/tx  objects will have |/to /Kids|/tx  arrays that can nest to any depth. Any individual entry in the |/to /Kids|/tx  array might lead to either a |/to /Page|/tx  object or yet another nested |/to /Pages|/tx  object. 
|h
Limiting any |/to /Pages|/tx  object to |/to six or|/tx  fewer |/to  |k|k/Kids|/tx  makes for fast random access through any very long doc. The |/to xref|/tx  access can also get rather messy if revisions are present or if web linearizing is done. 
|h
|c
Some |jCode |jDetails
|d
|/su VIEWPDF1.PSL|1|/viewpdf1.psl  has fairly extensive internal documentation and comments you can read while editing. There is also a moderate (but not yet bulletproof) amount of forced error trapping. While my |/su Gonzo Utilities|1|/gonzoutils  are highly recommended to work with this routine, they are not absolutely required at present.
|h
Here is a proc-by-proc tour of the |/su VIEWPDF1.PSL|1|/viewpdf1.psl  code\274
|h
|6|/to The Gonzo Utilities \320|1|/tx  These are my collection of superb text justification and figure drawing utilities found on my |/su PostScript|1|/post01  web page. I have excerpted my        |/to /mergestr|/tx  string merger, the disgustingly elegant |/to /makestring|/tx  array-to-string converter, and a grunt |/to /popbubblesort|/tx  that sorts on numeric popularity. 
|h
) cl 
startnewpage 

(|6|/to File Reading \320|1|/tx  Your .PDF file to be analyzed is entered at the very top of your document. If you enter several, only the |/to last uncommented|/tx  filename will get used. Several gotchas: Your .PDF file must be uncompressed and have a single rev 0 |/to xobj|/tx  file. |/to All PostScript filename strings must use a double reverse slash any          |/to time a single reverse slash is needed|/tx . The full Windows pathname is required. The complete pathname gets assembled by merging the folder paths with the actual short filename.
|h
|6|/to /getobjlist \320|1|/tx  This extracts the .PDF |/to xref |/tx object list into an |/to /xrefarray|/tx  array. The entire .PDF document is searched till |/to xref|/tx  is found using |/to anchorsearch|/tx . When it is found, the next line is read to find the number of objects. Then, an |/to xrefarray|/tx  is started. As many additional lines as objects are read. The |/su PostScript|1|/post01  |/to /token|1|/tx  proc is used to extract the offset, revision, and used info. And placing it into an |/to [ offset           |/to revision used ]|/tx  array element in |/to xrefarray|/tx . The net result is a saved directory of object info in a |/su PostScript|1|/post01  useful format.
|h
|6|/to /getobj \320|1|/tx  Finds a .PDF object given its number and a 0 revision. Each line of the object is returned as a string in an array. The object start offset is found using the       |/to xrefarray|/tx  and the file is repositioned using |/to setfileposition|/tx . An array is started, and each read line of the object is placed into the array as a string object. The object is thus returned on the stack as an array of strings. Certain rare stream elements may be unreadable using this proc, but they do not seem to occur in the objects currently of interest. One big gotcha: |/to string dereferencing|/tx  seems essential to prevent wrong characters from showing up due to reuse or our main       |/to workstring|/tx . Details on this process appear in |/su STRCONV.PDF|1|/strconv.pdf  you can find in our      |/su GuruGram|1|/gurgrm01  library.
|h
|6|/to /fixbrokenarrays \320|1|/tx  There is one nasty minor detail when extracting object lines: Arrays may start on one line and end on another. This utility attempts to find any array that |/to starts but does not end|/tx  on a given line. It then merges that string with the next one. The process continues till an array is complete as a single line entry. A |/to /tryrepair|/tx  subroutine does the actual string merging and reassembly.
|h
|6|/to /getcatobj \320|1|/tx  Finds Reads |/to /Root|/tx  to determine the |/to /Catalog|/tx  object, then retrieves it. Starting at the beginning of the file, an |/to anchorsearch|/tx  is done to find the |/to /Root|/tx  entry. Returns |/to /Catalog|/tx  object using |/to getobj|/tx  to stack and reports success or error to log file. At present, assumes all are objects are revision 0.
|h
|6|/to /getpagesobj \320|1|/tx  Reads the |/to /Catalog|/tx  object to extract the top |/to /Pages|/tx  object. An      |/to anchorsearch|/tx  of the catalog is done looking for the top |/to /Pages|/tx  array. An |/to R2obj|/tx  service routine is used to convert catalog strings such as |/to (|j[ 60 0 R 1 0 R 25 0 R]|j)|/tx  into PostScript arrays such as |/to [ 60 1 25 ]|/tx . Again, rev 0 is assumed.
|h
|6|/to /getcontentarray \320|1|/tx  Things get tricky from here. Any |/to /Pages|/tx  object will normally only have |/to six|/tx  or fewer links in its |/to /Kids|/tx  entry. If there are |/to less|/tx  than six pages in the document, all |/to /Kids|/tx  entries will be new |/to /Page|/tx  objects (|jwithout the "s"|j). But if there are more than six pages in the document, a |/to /Kids|/tx  entry might end up either 
) cl 

startnewpage 

(a |/to /Page|/tx  object or a nested object of additional |/to /Pages|/tx  links. The way you tell a     |/to /Pages|/tx  object from a |/to /Page|/tx  object is that |/to /Pages|/tx  has a |/to /Kids|/tx  entry, while |/to /Page|/tx  has a |/to /Contents|/tx  entry. Our object here is to create an array of all used |/to /Contents|/tx  objects in sequential order. Routines |/to /firstkids|/tx , |/to /secondkids|/tx , |/to /thirdkids|/tx , and          |/to /fourthkids|/tx  let us search in depth for documents of 1296 or fewer pages. 
|h
|6|/to /addtocontentarray \320|1|/tx  Any single page can have one or more |/to /Content|/tx  objects. Especially if figures or images are involved. For convenience, two different formats of content lists are provided. |/to /pagearray|/tx  is a simple list of content objects. Which is all you would need for word frequency apps. |/to /numberedpagearray|/tx  is a fancier array-of-arrays in which each entry represents one page. Each entry is an array that can hold one or more content objects. This might be more useful for index generation where you need to remember both the word and the page it is on. Two types of |/to /Content|/tx  objects are distinguished. Those with a |/to stream|/tx  in them are an actual content object, while those with an |/to array|/tx  are a pointer to additional content objects.
|h
|6|/to /reportPDFstructure \320|1|/tx  This is the high level code that that finds key objects and reports on them, ending with |/to /pagearray|/tx  and |/to /numberedpagearray|/tx  page content lists. These content arrays can then be used to develop applications of your choosing. Such as\274
|h
|c
An |jExample: |jWord |JFrequency |jAnalysis
|d
As we've seen in |/su WORDFREQ.PDF|1|/wordfreq.pdf  that we looked at in our previous |/su GuruGrams|1|/gurgrm01 , word frequency analysis is useful to improve author presentation, create indexes, verify grade level, and a number of other tasks. Some analysis routines provided with |/su VIEWPDF1.PSL|1|/viewpdf1.psl  include\274
|6|/shiftin |/aqua |/burplebox11.5 
|h
|/to /expandline \320 |1|/tx Extracts string objects from page content.
|/to /forcelowercase \320 |1|/tx Replaces uppercase characters.
|/to /getwordsfromstring \320|1|/tx  Isolates single words from string.
|/to /removetrailingpunct \320|1|/tx  Removes end periods, commas, etc\274.
|/to /removeleadingpunct \320|1|/tx  Removes opening quotes.
|h
|/to /procword|1|/tx  \320 High level word counting and entry code.
|/to /gotone \320|1|/tx  Counts and places words in |/to /worddict|/tx .
|/to /reportworddict \320|1|/tx  High level output sort and report.
|/to /formattedprint \320|1|/tx  Sets details of output presentation.
|/to /analyzewordfrequency \320|1|/tx  Reports .PDF file word frequency.
|h
|1|/shiftout |/aqua |/black 
Note that |/to /removetrailingpunct|/tx  and |/to /removeleadingpunct|/tx  currently assume a       |/to WINansiEncoding|/tx  vector. Processing time is quite fast for shorter .PDF files, ranging up to two minutes for a 200 page document. This can be sped up by going to a |/su better sorting routine|1|/heapsort.pdf  and eliminating intermediate reporting.

) cl 

startnewpage 

(There are all sorts of exciting additional possibilities for |/su PostScript|1|/post01  reading and reporting of .PDF file content. Ferinstance, indexing can be done by using the          |/to /numberedpagearray|/tx  data to add a third column to your word reporting that shows which page each word gets used on.
|h
|c
For  More  Help
|d
Enhancements and improvements on this fast, convenient, and super flexible .PDF content reader can be made available to you on a |/su Custom Consulting|1|/info01  basis. Additional GuruGrams are found |/su here|1|/gurgrm01 , PostScript topics |/su here|1|/post01 , and Acrobat info can be found |/su here|1|/acrob01 .
|h
Further |/surl |6GuruGrams|1|/gurgrm01  await your ongoing support as a |/surl |6Synergetics Partner|1|/advt01 .
) cl 


startnewpage





%%%%%%%%%%%%%%%%%%%%


% EOF