-- feed-back area module of silicon (pretty picture) program -- modified by McCreight, December 20, 1983 5:10 PM DIRECTORY multiGraphicsDefs, InlineDefs, StringDefs, AltoFileDefs, IODefs, ppCache,ppdddefs,ppddefs, ppdefs,ppfeeddefs, ZoneAllocDefs; ppfeed: PROGRAM IMPORTS ppCache,ppdefs,ppdddefs,ppfeeddefs,ZoneAllocDefs EXPORTS ppdddefs,ppddefs,ppfeeddefs = BEGIN OPEN ppdefs,ppdddefs,ppddefs,ppfeeddefs,IODefs; dChange:PUBLIC BOOLEAN_TRUE; mode:PUBLIC Mode_null; createSel:PUBLIC BOOLEAN_TRUE; Stretchy:PUBLIC BOOLEAN_FALSE; wiringLevel:PUBLIC level; wiringOrn:PUBLIC orientation; favLev:PUBLIC level_cut; levMask:PUBLIC CARDINAL_0; tickGrid:PUBLIC CARDINAL_8;--grid of tick points (color screen only) in lambda basicOrientation:PUBLIC orientation_0; locCell:PUBLIC STRING_""; locIName:PUBLIC STRING_""; insideCell:PUBLIC STRING_""; selCount:PUBLIC CARDINAL; pCifScale:PUBLIC INTEGER_200; totLp,dneLp:PUBLIC CARDINAL_0; rectangleMode:PUBLIC BOOLEAN_FALSE; tickOff:PUBLIC INTEGER_4; -- MAGIC (variable) CONSTANTS: ystrt:INTEGER=350; sCodeDisp:ARRAY[1..2] OF PROCEDURE[qq:INTEGER] = [setCscale,setBWscale]; fbAr: PUBLIC fbParmRPtr; fbAr1: fbParmRPtr _ NIL; rmButt: PUBLIC modProc = BEGIN b:BOOLEAN_code=0; fbAr_IF b THEN fbAr2 ELSE fbAr1; p^_b; END; feedZone: UNCOUNTED ZONE _ ZoneAllocDefs.GetAnXMZone[]; AddFBParmR: PUBLIC PROC [head: POINTER TO fbParmRPtr, r: fbParmR] = BEGIN r.next _ head^; head^ _ feedZone.NEW[fbParmR _ r]; END; dspDifWidth: dProc = {RETURN[dspInt[@minWidthAr[diffusionLevel[diffusionType][diffusionPurpose]], x, y, code, parm]]}; incDifWidth: modProc = {incInt[@minWidthAr[diffusionLevel[diffusionType][diffusionPurpose]], max, min, code, parm]}; decDifWidth: modProc = {decInt[@minWidthAr[diffusionLevel[diffusionType][diffusionPurpose]], max, min, code, parm]}; typeDifWidth: modProc = {tyInt[@minWidthAr[diffusionLevel[diffusionType][diffusionPurpose]], max, min, code, parm]}; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+10,s1:"MODE: ",prm:NIL,s2:"",dspPrm:dspMode, tx1:320,tx2:320,ty1:bwFeedTop,ty2:bwFeedTop, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:0,n:0,code:0, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:415,sy:bwFeedTop+10,s1:"Oriention: ",prm:@basicOrientation, s2:" ( X 45 deg.)",dspPrm:dspInt, tx1:415,tx2:510,ty1:bwFeedTop,ty2:bwFeedTop+10, rbP:incInt,ybP:tyInt,bbP:decInt,m:7,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"orn",setP:setInt]]; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+25,s1:"Pushes: ",prm:@pushLevel,s2:"",dspPrm:dspInt, tx1:320,tx2:320,ty1:bwFeedTop+25,ty2:bwFeedTop+25, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:0,n:0,code:0, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:390,sy:bwFeedTop+25,s1:"Currently In Cell: ",prm:@insideCell, s2:"",dspPrm:dspName, tx1:370,tx2:370,ty1:bwFeedTop+25,ty2:bwFeedTop+25, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:7,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+40,s1:"X Ratio - width: ",prm:@xRatiow, s2:"",dspPrm:dspInt, tx1:320,tx2:425,ty1:bwFeedTop+28,ty2:bwFeedTop+40, rbP:incInt,ybP:tyInt,bbP:decInt,m:2048,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"xrw",setP:setInt]]; AddFBParmR[@fbAr1, [sx:430,sy:bwFeedTop+40,s1:"length: ",prm:@xRatiol, s2:"",dspPrm:dspInt, tx1:430,tx2:485,ty1:bwFeedTop+28,ty2:bwFeedTop+40, rbP:incInt,ybP:tyInt,bbP:decInt,m:2048,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"xrl",setP:setInt]]; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+55,s1:"P Ratio - width: ",prm:@pRatiow, s2:"",dspPrm:dspInt, tx1:320,tx2:425,ty1:bwFeedTop+43,ty2:bwFeedTop+55, rbP:incInt,ybP:tyInt,bbP:decInt,m:2048,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"prw",setP:setInt]]; AddFBParmR[@fbAr1, [sx:430,sy:bwFeedTop+55,s1:"length: ",prm:@pRatiol, s2:"",dspPrm:dspInt, tx1:430,tx2:485,ty1:bwFeedTop+43,ty2:bwFeedTop+55, rbP:incInt,ybP:tyInt,bbP:decInt,m:2048,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"prl",setP:setInt]]; AddFBParmR[@fbAr1, [sx:490,sy:bwFeedTop+40,s1:"Implant: ",prm:@implant, s2:"",dspPrm:dspImplant, tx1:490,tx2:560,ty1:bwFeedTop+28,ty2:bwFeedTop+40, rbP:zeroImplant,ybP:incImplant,bbP:maxImplant,m:2048,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"impl",setP:setBool]]; AddFBParmR[@fbAr1, [sx:110,sy:bwFeedTop+10,s1:"SCALE:",prm:NIL,s2:"",dspPrm:nullDP, tx1:0,tx2:0,ty1:bwFeedTop,ty2:bwFeedTop, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:0,n:0,code:0, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:100,sy:bwFeedTop+20,s1:"Col ",prm:@cScale, s2:"",dspPrm:dspScl, tx1:100,tx2:135,ty1:bwFeedTop+10,ty2:bwFeedTop+115, rbP:incScl,ybP:tyScl,bbP:decScl,m:20,n:1,code:1, chgC:TRUE,chgB:FALSE,setStr:"clscl",setP:setScl]]; AddFBParmR[@fbAr1, [sx:150,sy:bwFeedTop+20,s1:"BW ",prm:@bwScale, s2:"",dspPrm:dspScl, tx1:150,tx2:185,ty1:bwFeedTop+10,ty2:bwFeedTop+115, rbP:incScl,ybP:tyScl,bbP:decScl,m:20,n:1,code:2, chgC:FALSE,chgB:TRUE,setStr:"bscl",setP:setScl]]; AddFBParmR[@fbAr1, [sx:100,sy:bwFeedTop+130,s1:"",prm:NIL,s2:"",dspPrm:dspDifSex, tx1:100,tx2:113,ty1:bwFeedTop+120,ty2:bwFeedTop+130, rbP:flipDifSex,ybP:flipDifSex,bbP:flipDifSex,m:0,n:0,code:0, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:115,sy:bwFeedTop+130,s1:"",prm:NIL,s2:"",dspPrm:dspDifPurp, tx1:115,tx2:185,ty1:bwFeedTop+120,ty2:bwFeedTop+130, rbP:flipDifPurp,ybP:flipDifPurp,bbP:flipDifPurp,m:0,n:1,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:190,sy:bwFeedTop+10,s1:"Wiring Layer:/wd",prm:@favLev, s2:"",dspPrm:nullDP, tx1:200,tx2:200,ty1:bwFeedTop,ty2:bwFeedTop, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:3,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:200,sy:bwFeedTop+25,s1:"Dif",prm:NIL, s2:"",dspPrm:dspLevVisible, tx1:200,tx2:223,ty1:bwFeedTop+13,ty2:bwFeedTop+25, rbP:setFL,ybP:flipLevVisible,bbP:setFL,m:20,n:1,code:LOOPHOLE[level[dif]], chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:225,sy:bwFeedTop+25,s1:"Pol",prm:NIL, s2:"",dspPrm:dspLevVisible, tx1:225,tx2:248,ty1:bwFeedTop+13,ty2:bwFeedTop+25, rbP:setFL,ybP:flipLevVisible,bbP:setFL,m:20,n:1,code:LOOPHOLE[level[pol]], chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:250,sy:bwFeedTop+25,s1:"Met",prm:NIL, s2:"",dspPrm:dspLevVisible, tx1:250,tx2:273,ty1:bwFeedTop+13,ty2:bwFeedTop+25, rbP:setFL,ybP:flipLevVisible,bbP:setFL,m:20,n:1,code:LOOPHOLE[level[met]], chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:275,sy:bwFeedTop+25,s1:"M2",prm:NIL, s2:"",dspPrm:dspLevVisible, tx1:275,tx2:298,ty1:bwFeedTop+13,ty2:bwFeedTop+25, rbP:setFL,ybP:flipLevVisible,bbP:setFL,m:20,n:1,code:LOOPHOLE[level[met2]], chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:200,sy:bwFeedTop+40,s1:"",prm: @(minWidthAr[dif]), s2:"",dspPrm:dspDifWidth, tx1:200,tx2:223,ty1:bwFeedTop+27,ty2:bwFeedTop+40, rbP:incDifWidth,ybP:typeDifWidth,bbP:decDifWidth,m:1998,n:2,code:2, chgC:FALSE,chgB:FALSE,setStr:"dwd",setP:setInt]]; AddFBParmR[@fbAr1, [sx:225,sy:bwFeedTop+40,s1:"",prm:@(minWidthAr[pol]), s2:"",dspPrm:dspInt, tx1:225,tx2:248,ty1:bwFeedTop+27,ty2:bwFeedTop+40, rbP:incInt,ybP:tyInt,bbP:decInt,m:1998,n:2,code:2, chgC:FALSE,chgB:FALSE,setStr:"pwd",setP:setInt]]; AddFBParmR[@fbAr1, [sx:250,sy:bwFeedTop+40,s1:"",prm:@(minWidthAr[met]), s2:"",dspPrm:dspInt, tx1:250,tx2:273,ty1:bwFeedTop+27,ty2:bwFeedTop+40, rbP:incInt,ybP:tyInt,bbP:decInt,m:1998,n:2,code:2, chgC:FALSE,chgB:FALSE,setStr:"mwd",setP:setInt]]; AddFBParmR[@fbAr1, [sx:275,sy:bwFeedTop+40,s1:"",prm:@(minWidthAr[met2]), s2:"",dspPrm:dspInt, tx1:275,tx2:298,ty1:bwFeedTop+27,ty2:bwFeedTop+40, rbP:incInt,ybP:tyInt,bbP:decInt,m:1998,n:2,code:2, chgC:FALSE,chgB:FALSE,setStr:"mwd",setP:setInt]]; AddFBParmR[@fbAr1, [sx:200,sy:bwFeedTop+55,s1:"Curs Grid: ",prm:@lambdaGrid, s2:" Pnts",dspPrm:dspInt, tx1:205,tx2:290,ty1:bwFeedTop+42,ty2:bwFeedTop+55, rbP:incInt,ybP:tyInt,bbP:decInt,m:64,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"crg",setP:setInt]]; AddFBParmR[@fbAr1, [sx:285,sy:bwFeedTop+70,s1:"(",prm:@tickOff, s2:")",dspPrm:dspInt, tx1:285,tx2:308,ty1:bwFeedTop+57,ty2:bwFeedTop+70, rbP:incInt,ybP:tyInt,bbP:decInt,m:99,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"tkof",setP:setInt]]; AddFBParmR[@fbAr1, [sx:200,sy:bwFeedTop+70,s1:"Ticks: ",prm:@tickGrid, s2:" Lmbd",dspPrm:dspInt, tx1:205,tx2:280,ty1:bwFeedTop+57,ty2:bwFeedTop+70, rbP:incInt,ybP:tyInt,bbP:decInt,m:1000,n:0,code:0, chgC:TRUE,chgB:FALSE,setStr:"tk",setP:setInt]]; AddFBParmR[@fbAr1, [sx:200,sy:bwFeedTop+85,s1:"size cutoff B: ",prm:@bwGrain, s2:"",dspPrm:dspInt, tx1:200,tx2:290,ty1:bwFeedTop+72,ty2:bwFeedTop+85, rbP:incInt,ybP:tyInt,bbP:decInt,m:200,n:0,code:0, chgC:FALSE,chgB:TRUE,setStr:"szcb",setP:setInt]]; AddFBParmR[@fbAr1, [sx:200,sy:bwFeedTop+100,s1:" Color: ",prm:@colGrain, s2:"",dspPrm:dspInt, tx1:200,tx2:290,ty1:bwFeedTop+87,ty2:bwFeedTop+100, rbP:incInt,ybP:tyInt,bbP:decInt,m:200,n:0,code:0, chgC:TRUE,chgB:FALSE,setStr:"szcc",setP:setInt]]; AddFBParmR[@fbAr1, [sx:200,sy:bwFeedTop+115,s1:"Cif Lambda: ",prm:@pCifScale, s2:"",dspPrm:dspInt, tx1:200,tx2:290,ty1:bwFeedTop+102,ty2:bwFeedTop+115, rbP:incInt,ybP:tyInt,bbP:decInt,m:1000,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"cfscl",setP:setInt]]; AddFBParmR[@fbAr1, [sx:200,sy:bwFeedTop+130,s1:"Select New: ",prm:@createSel, s2:"",dspPrm:dspBool, tx1:200,tx2:280,ty1:bwFeedTop+117,ty2:bwFeedTop+130, rbP:incBool,ybP:cmpBool,bbP:decBool,m:2048,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"selnw",setP:setBool]]; AddFBParmR[@fbAr1, [sx:200,sy:bwFeedTop+145,s1:"Stretchy: ",prm:@Stretchy, s2:"",dspPrm:dspBool, tx1:200,tx2:280,ty1:bwFeedTop+132,ty2:bwFeedTop+145, rbP:incBool,ybP:cmpBool,bbP:decBool,m:2048,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"str",setP:setBool]]; AddFBParmR[@fbAr1, [sx:200,sy:bwFeedTop+160,s1:"Cache (k): ",prm: @ppCache.permittedCacheK, s2:"",dspPrm:dspCache, tx1:200,tx2:290,ty1:bwFeedTop+147,ty2:bwFeedTop+160, rbP:flipCache,ybP:tyInt,bbP:nullMP,m:1000,n:0,code:0, chgC:FALSE,chgB:FALSE,setStr:"cache",setP:setInt]]; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+130,s1:"Selected item: ",prm:@locCell, s2:"",dspPrm:dspName, tx1:300,tx2:300,ty1:bwFeedTop+70,ty2:bwFeedTop+70, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:3,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+145,s1:"",prm:@locIName, s2:"",dspPrm:dspName, tx1:300,tx2:300,ty1:bwFeedTop+70,ty2:bwFeedTop+70, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:3,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+160,s1:"rect mode",prm:@rectangleMode, s2:"",dspPrm:nullDP, tx1:330,tx2:360,ty1:bwFeedTop+152,ty2:bwFeedTop+158, rbP:rmButt,ybP:rmButt,bbP:rmButt,m:2048,n:1,code:0, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+70,s1:"Items Selected: ",prm:@selCount, s2:"",dspPrm:dspInt, tx1:300,tx2:300,ty1:bwFeedTop+70,ty2:bwFeedTop+70, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:3,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+85,s1:"Core used: ",prm:NIL, s2:" words",dspPrm:dspCore, tx1:300,tx2:500,ty1:bwFeedTop+85,ty2:bwFeedTop+85, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:3,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+100,s1:"Mark X: ",prm:@markPnt.x, s2:"",dspPrm:dspLam, tx1:300,tx2:300,ty1:bwFeedTop+70,ty2:bwFeedTop+70, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:3,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:414,sy:bwFeedTop+100,s1:", Y: ",prm:@markPnt.y, s2:" lambda",dspPrm:dspLam, tx1:300,tx2:300,ty1:bwFeedTop+85,ty2:bwFeedTop+85, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:3,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:320,sy:bwFeedTop+115,s1:"Mark DX: ",prm:@markDPnt.x, s2:"",dspPrm:dspLam, tx1:300,tx2:300,ty1:bwFeedTop+70,ty2:bwFeedTop+70, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:3,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:414,sy:bwFeedTop+115,s1:", DY: ",prm:@markDPnt.y, s2:" lambda",dspPrm:dspLam, tx1:300,tx2:300,ty1:bwFeedTop+85,ty2:bwFeedTop+85, rbP:nullMP,ybP:nullMP,bbP:nullMP,m:3,n:0,code:1, chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST]]; AddFBParmR[@fbAr1, [sx:15,sy:bwFeedTop+25,s1:"",prm:NIL,s2:"",dspPrm:dspCMix, tx1:5,tx2:90,ty1:bwFeedTop+20,ty2:bwFeedTop+140, rbP:setCMix,ybP:moveCMix,bbP:resetCMix ,m:10,n:bwFeedTop+20,code:60, chgC:FALSE,chgB:FALSE,setStr:"ctab",setP:setCmx]]; AddFBParmR[@fbAr1, [sx:15,sy:bwFeedTop+5,s1:"",prm:NIL,s2:"",dspPrm:dspCPat, tx1:5,tx2:90,ty1:bwFeedTop+2,ty2:bwFeedTop+18, rbP:setCPat,ybP:moveCPat,bbP:resetCPat ,m:10,n:bwFeedTop+5,code:60, chgC:TRUE,chgB:FALSE,setStr:"",setP:nullST]]; fbAr _ fbAr1; END.