-- feed-back area module of silicon (pretty picture) program
-- modified by McCreight, December 16, 1982  10:09 AM
DIRECTORY multiGraphicsDefs,
	InlineDefs,
	StringDefs,
	AltoFileDefs,
	IODefs,
	ppdddefs,ppddefs,
	ppdefs,ppfeeddefs;
ppfeed: PROGRAM IMPORTS ppdefs,ppdddefs,ppfeeddefs
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;
lambdaGrid:PUBLIC CARDINAL←2;-- cursor grid in "World coordinate"
		--(basic resolution) points.  In this case resolution
		--is 2 points per lambda, so a lambda grid of
		--2 means the cursor grid is 1 lambda.
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 POINTER TO ARRAY [0..fbC) OF fbParmR ←@fbAr1;
fbAr1:ARRAY [0..fbC) OF fbParmR ←[
[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],
[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],
[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],
[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],
[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],
[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],
[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],
[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],
[sx:490,sy:bwFeedTop+40,s1:"Implant: ",prm:@implant,
	s2:"",dspPrm:dspBool,
	tx1:490,tx2:560,ty1:bwFeedTop+28,ty2:bwFeedTop+40,
	rbP:incBool,ybP:cmpBool,bbP:decBool,m:2048,n:1,code:0,
	chgC:FALSE,chgB:FALSE,setStr:"impl",setP:setBool],
[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],
[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],
[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],
[sx:100,sy:bwFeedTop+130,s1:"n-MOS",prm:NIL,s2:"",dspPrm:dspCM,
	tx1:100,tx2:140,ty1:bwFeedTop+120,ty2:bwFeedTop+130,
	rbP:setCM,ybP:setCM,bbP:setCM,m:0,n:0,code:0,
	chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST],
[sx:150,sy:bwFeedTop+130,s1:"CMOS",prm:NIL,s2:"",dspPrm:dspCM,
	tx1:150,tx2:185,ty1:bwFeedTop+120,ty2:bwFeedTop+130,
	rbP:setCM,ybP:setCM,bbP:setCM,m:0,n:1,code:1,
	chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST],
[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],
[sx:190,sy:bwFeedTop+25,s1:"Dif",prm:NIL,
	s2:"",dspPrm:dspLevVisible,
	tx1:190,tx2:213,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],
[sx:215,sy:bwFeedTop+25,s1:"Pol",prm:NIL,
	s2:"",dspPrm:dspLevVisible,
	tx1:215,tx2:238,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],
[sx:240,sy:bwFeedTop+25,s1:"Met",prm:NIL,
	s2:"",dspPrm:dspLevVisible,
	tx1:240,tx2:263,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],
[sx:265,sy:bwFeedTop+25,s1:"Pdif",prm:NIL,
	s2:"",dspPrm:dspLevVisible,
	tx1:265,tx2:288,ty1:bwFeedTop+13,ty2:bwFeedTop+25,
	rbP:setFL,ybP:flipLevVisible,bbP:setFL,m:20,n:1,code:LOOPHOLE[level[pdif]],
	chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST],
[sx:290,sy:bwFeedTop+25,s1:"M2",prm:NIL,
	s2:"",dspPrm:dspLevVisible,
	tx1:290,tx2:310,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],

[sx:190,sy:bwFeedTop+40,s1:"",prm:@(minWidthAr[dif]),
	s2:"",dspPrm:dspInt,
	tx1:190,tx2:213,ty1:bwFeedTop+27,ty2:bwFeedTop+40,
	rbP:incInt,ybP:tyInt,bbP:decInt,m:1998,n:2,code:2,
	chgC:FALSE,chgB:FALSE,setStr:"dwd",setP:setInt],
[sx:215,sy:bwFeedTop+40,s1:"",prm:@(minWidthAr[pol]),
	s2:"",dspPrm:dspInt,
	tx1:215,tx2:238,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],
[sx:240,sy:bwFeedTop+40,s1:"",prm:@(minWidthAr[met]),
	s2:"",dspPrm:dspInt,
	tx1:240,tx2:263,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],
[sx:265,sy:bwFeedTop+40,s1:"",prm:@(minWidthAr[pdif]),
	s2:"",dspPrm:dspInt,
	tx1:265,tx2:288,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],
[sx:290,sy:bwFeedTop+40,s1:"",prm:@(minWidthAr[met2]),
	s2:"",dspPrm:dspInt,
	tx1:290,tx2:310,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],

[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],
[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],
[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],
[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],
[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],
[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],
[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],
[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],
--[sx:410,sy:bwFeedTop+130,s1:"Levels: ",prm:@levMask,
--	s2:"",dspPrm:dspLM,
--	tx1:400,tx2:400,ty1:bwFeedTop,ty2:bwFeedTop,
--	rbP:nullMP,ybP:nullMP,bbP:nullMP,m:3,n:0,code:1,
--	chgC:FALSE,chgB:FALSE,setStr:"",setP:nullST],
[sx:320,sy:bwFeedTop+130,s1:"Generic Cell Name: ",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],
[sx:320,sy:bwFeedTop+145,s1:"Instance Name: ",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],
[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],
[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],
[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],
[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],
[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],
[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],
[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],
[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],
[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]];--,

rmButt:PUBLIC modProc =
    BEGIN
	b:BOOLEAN←code=0;
	fbAr←IF b THEN @fbAr2 ELSE @fbAr1;
	p↑←b;
    END;


END.