/* ARDISP (AR) -- Autorouter Display Functions */ /* ARDISP (AR) -- Autorouter-Bilddarstellungsfunktionen */ /* -- INTENDED FOR KEY-CALL USE -- */ /* // Copyright (c) 1994-2012 Oliver Bartels F+E, Muenchen // Author: Manfred Baumeister // Changes History: // rl (120427) RELEASED FOR BAE V7.8. // rl (101019) RELEASED FOR BAE V7.6. // rl (091027) RELEASED FOR BAE V7.4. // rl (090406) ENHANCEMENT: // Added layer browse function. // rl (081014) RELEASED FOR BAE V7.2. // rl (080409) CHANGE: // Added color table name display. // rl (071029) RELEASED FOR BAE V7.0. // rl (060829) RELEASED FOR BAE V6.8. // rl (060829) ENHANCEMENT: // Changed lay_getplanchkparam parameters to V6.8. // rl (050906) RELEASED FOR BAE V6.6. // rl (040811) RELEASED FOR BAE V6.4. // rl (030910) RELEASED FOR BAE V6.2. // rl (030910) ENHANCEMENT: // Added message history function. // rl (021209) RELEASED FOR BAE V6.0. // rl (020618) RELEASED FOR BAE V5.4. // rl (010625) RELEASED FOR BAE V5.0. // rl (010221) ENHANCEMENT: // Added optional parameter settings from bae.ini file. // rl (000509) RELEASED FOR BAE V4.6. // rl (991124) RELEASED FOR BAE V4.4. // rl (991124) ENHANCEMENT: // Added key bindings display. // rl (980910) RELEASED FOR BAE V4.2. // rl (980901) ENHANCEMENT: // Changed lay_getplanchkparam parameters V4.2. // mb (980710) ENHANCEMENT: // Pulldown menu delimiters introduced. // mb (980710) ENHANCEMENT: // Dynamic multi-language support introduced. // rl (970929) RELEASED FOR BAE V4.0. // mb (970716) IMPROVEMENT: // Current layout library displayed with parameter reported. // rl (970224) BUGFIX: // Corrected power layer color setup when setting // pick preference layer to power layer. // mb (960919) RELEASED FOR BAE V3.4. // mb (960801) ENHANCEMENT: // Changed menu items to support key selection // in Windows/Motif user interfaces. // mb (95) RELEASED FOR BAE V3.2. // mb (94) ORIGINAL CODING. // // DESCRIPTION // // The ardisp User Language program provides a series // of advanced Autorouter display management functions. */ // Includes #include "baeparam.ulh" // User Language BAE param. access #include "pop.ulh" // User Language popup utilities #include "lay.ulh" // User Language layout utilities // Disable undo state request #pragma ULCALLERNOUNDO // Messages string UPRABORT = M_UPRABORT(); string REPPGRID = M("Platzierungsraster (1/10\"; Winkel/Raster einhalten).", "Placement grid (1/10\"; Grid/Angle locked)."); string REPRGRID = M("Routingraster (1/40\"; Winkel/Raster einhalten).", "Routing grid (1/40\"; Grid/Angle locked)."); string REPCDISPM = M("Koordinatenanzeige mm.", "Coordinate display mm."); string REPCDISPI = M("Koordinatenanzeige Inch.", "Coordinate display Inch."); string UPRFCT = M("Bildschirmfunktion selektieren!", "Select Display Function!"); string UPRFCT1 = M("&Platzierungsraster","&Placement Grid"); string UPRFCT2 = M("&Routingraster","&Routing Grid"); string UPRFCT3 = M("%Anzeige &mm","%Display &mm"); string UPRFCT4 = M("Anzeige &Inch","Display &Inch"); string UPRFCT5 = M("%Vorzugs&lage","%Preference &Layer"); string UPRFCT6 = M("%Laden &Zeichensatz","%Load &Font"); string UPRFCT7 = M("%Parameter Rep&ort","%Sh&ow Parameters"); string UPRFCT8 = M("%&Tastaturbelegung","%&Key Bindings"); string UPRFCT9 = M("%M&eldungshistorie","%M&essage History"); string UPRFCT10 = M("%Lagen&browse","%Layer &Browse"); string UPRPREFLAY = M("Vorzugslage selektieren!", "Select Pick Preference Layer!"); string UPRLAYBROWSE = M("Lagenbrowse","Layer Browse"); string UPRSETNUM = M("&Eingabe","&Enter"); string UPRGETNUM = M("Lagennummer ? ","Layer Number ? "); string UPRLOADPAL = M("&Farben laden","&Load Colors"); string UPRCHGPAL = M("Farben beibehalten","Keep Colors"); string UPRPREVNUM = M("&-","&-"); string UPRNEXTNUM = M("&+","&+"); string UPRSIGLAY = M("&Signallagen","&Signal Layers"); string UPRPOWLAY = M("&Versorgungslagen","&Power Layers"); string UPRDOCLAY = M("&Dokumentarlagen","&Documentary Layers"); string UPRLAYALL = M("Alle Lagen","All Layers"); string UPRLAYBTW = M("Innenlagen","Inner Layers"); string UPRLAYTOP = M(" (Oberste Lage)"," (Top Layer)"); string UPRLAYBRD = M("Umrandung","Board Outline"); string UPRLAYUNR = M("Airlines","Unroutes"); string UPRLAYDRL = M("Bohrungen","Drills"); string ERRNOWIN = M("Nur in Windowsumgebungen verfuegbar!", "Windows Environment needed!"); string ERRDBLLBRW = M("Lagerbrowse ist bereits aktiv!", "Layer Browse already active!"); string REPHDPAR00 = M("Layout Parameter","Layout Parameters"); string REPHDPAR01 = M("================","================="); string REPDEFLIB = M("Standard-Layoutbibliothek .....: '%s'", "Default Layout Library ........: '%s'"); string REPCURLIB = M("Aktuelle Layoutbibliothek .....: '%s'", "Current Layout Library ........: '%s'"); string REPDEFELM = M("Standard-Layoutelementname ....: '%s'", "Default Layout Element Name ...: '%s'"); string REPFNTNAM = M("Zeichensatzname ...............: '%s'", "Font Name .....................: '%s'"); string REPFNTCNT = M("Anzahl Zeichen ................: %d", "Font Character Count ..........: %d"); string REPCOLTNAM = M("Farbpalettename ...............: '%s'", "Color Table Name ..............: '%s'"); string REPCOORDM = M("Koordinatenanzeige ............: %s", "Coordinate Display Mode .......: %s"); string REPGRIDLK = M("Rasterfreigabe ................: %s", "Grid Lock .....................: %s"); string REPANGLLK = M("Winkelfreigabe ................: %s", "Angle Lock ....................: %s"); string REPINPUTX = M("Eingaberaster X ...............: %10.4f %s", "Input Grid X ..................: %10.4f %s"); string REPINPUTY = M("Eingaberaster Y ...............: %10.4f %s", "Input Grid Y ..................: %10.4f %s"); string REPDISPX = M("Hintergrundraster X ...........: %10.4f %s", "Display Grid X ................: %10.4f %s"); string REPDISPY = M("Hintergrundraster Y ...........: %10.4f %s", "Display Grid Y ................: %10.4f %s"); string REPCLPWDTH = M("Breitendarstellung ............: %10.4f %s", "Display Clipping Width ........: %10.4f %s"); string REPCHKBLK = M("DRC-Block %d ...................: %s", "DRC Block %d ...................: %s"); string REPCHKHD1 = M("DRC-Abstaende .................:", "DRC Distances .................:"); string REPCHKHD2 = M(" T-T T-C C-C T-WIDTH", " T-T T-C C-C T-WIDTH"); string REPCHKHD = REPCHKHD1+REPCHKHD2; string REPCHKEN = M(" Block %d %-15s : %6.3f %-6s %6.3f %-6s %6.3f %-6s %6.3f %-6s", " Block %d %-15s : %6.3f %-6s %6.3f %-6s %6.3f %-6s %6.3f %-6s"); string REPPPLAY = M("Vorzugslage ...................: %s", "Pick Preference Layer .........: %s"); string REPTOPLAY = M("Oberste Lage ..................: %s", "Top Layer .....................: %s"); string REPBTWLAY = M("Anzahl Innenlagen .............: %s", "Inner Layer Count .............: %s"); string REPMINCON = M("Mincon-Funktion ...............: %s", "Mincon Function ...............: %s"); string ITMLOCK = M("gelockt","locked"); string ITMFREE = M("freigegeben","free"); string ITMMINCON0 = M("Kein Mincon","Mincon off"); string ITMMINCON1 = M("Pins Horizontal","Pins Horizontal"); string ITMMINCON2 = M("Pins Vertikal","Pins Vertical"); string ITMMINCON3 = M("Pins H+V Summe","Pins H+V Sum"); string ITMMINCON4 = M("Pins Luftlinie","Pins Airline"); string ITMMINCON5 = M("Ecken Horizontal","Corners Horizontal"); string ITMMINCON6 = M("Ecken Vertikal","Corners Vertical"); string ITMMINCON7 = M("Ecken H+V Summe","Corners H+V Sum"); string ITMMINCON8 = M("Ecken Luftlinie","Corners Airline"); string ITMUNDEF = M("*** UNDEFINIERT ***","*** UNDEFINED ***"); // INI file parameter name definitions #define PAR_PLCGRID "PLCGRID_AR" // Placement grid #define PAR_PLCGRIDL "PLCGRIDL_AR" // Placement grid lock #define PAR_PLCANGL "PLCANGL_AR" // Placement angle lock #define PAR_PLCGRIDN "PLCGRIDN_AR" // Placement grid name #define PAR_ROUTGRID "ROUTGRID_AR" // Routing grid #define PAR_ROUTGRIDL "ROUTGRIDL_AR" // Routing grid lock #define PAR_ROUTANGL "ROUTANGL_AR" // Routing angle lock #define PAR_ROUTGRIDN "ROUTGRIDN_AR" // Routing grid name #define PAR_COLPREF "COLORPREF_AR" // Preference layer color #define PAR_COLNPREF "COLORNPREF_AR" // Non-preference layer color #define PAR_LBRWBUTN "LBRWBUTN_AR" // Layer browse button count #define PAR_LBRWUSCAN "LBRWUSCAN_AR" // Layer browse layer usage scan flag // Globals #define UL_LOADFONT "loadfont" // ULP: Load Font #define UL_HLPKEYS "hlpkeys" // ULP: Online Help - Key Bindings #define PGRID 0.00254 // Placement grid #define RGRID 0.000635 // Routing grid // Global User Language program variables #define GV_TYPFIELD "lb_typidx" // Layer type index #define GV_NUMFIELD "lb_number" // Layer number index #define GV_NAMFIELD "lb_name" // Layer name index #define GV_ALLFIELD "lb_allidx" // All layer toggle index #define GV_BTWFIELD "lb_btwidx" // Inner layer toggle index #define GV_BRDFIELD "lb_brdidx" // Border layer toggle index #define GV_UNRFIELD "lb_unridx" // Unroute layer toggle index #define GV_DRLFIELD "lb_drlidx" // Drill layer toggle index #define GV_LASTTYP "lb_lasttyp" // Last layer type #define GV_LASTNUM "lb_lastnum" // Last layer index number #define GV_COLTAB "lb_coltab" // Old color table name // Color and display items #define MINDISPITM (-11) // Min. display item number #define COLBLACK 0 // Black/no color #define COLFIN 4 // Fade in color value #define COLFINP 8 // Fade in color value #define COLFIND1 4 // Doc side 1 fade in color value #define COLFIND2 2 // Doc side 2 fade in color value #define COLFINDA 6 // Doc both sides fade in color value #define COLFIND 31 // Drill fade in color value int COLPREF = bae_iniintval(PAR_COLPREF,4); // Preference layer color int COLNPREF = bae_iniintval(PAR_COLNPREF,8); // Non-preference layer color int LBRWBUTN = bae_iniintval(PAR_LBRWBUTN,10); // Layer browse layer button count int LBRWUSCAN = bae_iniintval(PAR_LBRWUSCAN,1); // Layer browse layer usage scan flag string UNIT = bae_getcoorddisp() ? "[Inch]" : "[mm]" /* Unit designator */; // Global definitions int scanlayer /* Layer usage scan layer code */; // Main program void main() { STRINGS msgl /* Message list */; int msgn /* Message count */; // Select display function bae_promptdialog(UPRFCT); switch (bae_askmenu(11,UPRFCT1,UPRFCT2,UPRFCT3, UPRFCT4,UPRFCT5,UPRFCT6,UPRFCT7,UPRFCT8,UPRFCT9,UPRFCT10,UPRABORT)) { // Set placement grid case 0 : bae_setbackgrid(bae_inidblval(PAR_PLCGRID,PGRID), bae_inidblval(PAR_PLCGRID,PGRID)); bae_setinpgrid(bae_inidblval(PAR_PLCGRID,PGRID), bae_inidblval(PAR_PLCGRID,PGRID)); bae_setgridlock(bae_iniintval(PAR_PLCGRIDL,1)); bae_setanglelock(bae_iniintval(PAR_PLCANGL,1)); bae_prtdialog(bae_inistrval(PAR_PLCGRIDN,REPPGRID)); break; // Set routing grid case 1 : bae_setbackgrid(bae_inidblval(PAR_ROUTGRID,RGRID), bae_inidblval(PAR_ROUTGRID,RGRID)); bae_setinpgrid(bae_inidblval(PAR_ROUTGRID,RGRID), bae_inidblval(PAR_ROUTGRID,RGRID)); bae_setgridlock(bae_iniintval(PAR_ROUTGRIDL,1)); bae_setanglelock(bae_iniintval(PAR_ROUTANGL,1)); bae_prtdialog(bae_inistrval(PAR_ROUTGRIDN,REPRGRID)); break; // Set coordinate display mm case 2 : bae_setcoorddisp(0); bae_prtdialog(REPCDISPM); break; // Set coordinate display Inch case 3 : bae_setcoorddisp(1); bae_prtdialog(REPCDISPI); break; // Set preference layer case 4 : preflayer(); break; // Load font case 5 : runulprogexit(UL_LOADFONT); // Show parameters case 6 : showparameters(); break; // Display key bindings case 7 : runulprogexit(UL_HLPKEYS); // Display message history case 8 : for (msgn=0;msgn<50;msgn++) if (bae_getcmdbuf(-msgn-1,"",msgl[msgn])<0) break; // Display messages with popup menu bae_setintpar(16,3001); popupmenu(0,"",msgl,0,msgl,msgn, UINPOPABORT,0,-1,-1,msgn*2,100,0,""); break; // Layer browser case 9 : layerbrowse(); break; // Abort default : error_abort(); } } void preflayer() /* // Set the pick preference layer with color */ { int preflay = ar_getpickpreflay() /* Pick preference layer number */; int i /* Loop control variable */; // Select the preference layer if (bae_promptdialog(UPRPREFLAY),ar_asklayer(preflay,5)) error_abort(); // Set the special display items and signal layers colors for (i=MINDISPITM;iCOLBLACK) bae_setcolor(i,COLNPREF); // Set the power layer colors for (i=0;iCOLBLACK) bae_setcolor(i+POWLAYBASE,COLNPREF); // Set the documentary layer colors for (i=0;iCOLBLACK) bae_setcolor(i*DOCLAYSHIFT+0+DOCLAYBASE,COLNPREF); if (bae_getcolor(i*DOCLAYSHIFT+1+DOCLAYBASE)>COLBLACK) bae_setcolor(i*DOCLAYSHIFT+1+DOCLAYBASE,COLNPREF); if (bae_getcolor(i*DOCLAYSHIFT+2+DOCLAYBASE)>COLBLACK) bae_setcolor(i*DOCLAYSHIFT+2+DOCLAYBASE,COLNPREF); } // Set the pick preference layer color bae_setcolor(preflay,COLPREF); bae_callmenu(MNU_BAEREDISPL); // Set the pick preference layer ar_setpickpreflay(preflay); } void layerbrowse() /* // Browse through layers */ { index L_POWLAYER powlay /* Power layer index */; string ocoltname /* Old color table name */; string laystr /* Layer name string */; double cy = DIAL_TOPMARG /* Dialog box current y coordinate */; int boxidx /* Dialog box index */; int actcode /* Action code */; int reason /* Callback reason */; int intval /* Dialog box item integer value */; string name /* Dialog box item name */; string varname /* Variable name */; int typidx /* Layer type dialog box item idx. */; int numidx /* Lay. number dialog box item idx. */; int namidx /* Layer name dialog box item idx. */; int allidx /* All layer dialog box item idx. */; int btwidx /* Inner layer dialog box item idx. */; int brdidx /* Board outl. dialog box item idx. */; int unridx /* Unr. layer dialog box item idx. */; int drlidx /* Drill layer dialog box item idx. */; int laytyp = 0 /* Layer type */; int newtyp /* New layer type */; int num = 1 /* Current layer number */; int layer /* Current layer */; int intpar /* Integer parameter value buffer */; int mn /* Layer menu count */; int i /* Loop control variable */; // Check if action call if (varget(VAR_PDBOXIDX,boxidx)==0 && varget(VAR_PDBOXACT,actcode)==0 && varget(VAR_PDBOXREAS,reason)==0 && varget(VAR_PDBOXIVAL,intval)==0 && varget(VAR_PDBOXNAME,name)==0) { // Remove callback parameters vardelete(VAR_PDBOXIDX); vardelete(VAR_PDBOXACT); vardelete(VAR_PDBOXREAS); vardelete(VAR_PDBOXIVAL); vardelete(VAR_PDBOXNAME); varget(GV_TYPFIELD,typidx); varget(GV_NUMFIELD,numidx); varget(GV_NAMFIELD,namidx); varget(GV_ALLFIELD,allidx); varget(GV_BTWFIELD,btwidx); varget(GV_BRDFIELD,brdidx); varget(GV_UNRFIELD,unridx); varget(GV_DRLFIELD,drlidx); varget(GV_LASTTYP,laytyp); varget(GV_LASTNUM,num); varget(GV_COLTAB,ocoltname); // Fade out current layer if (actcode!=(-1) && actcode!=216) { switch (laytyp) { case 1 : colorchange(POWLAYBASE+num-1,0,COLFINP); break; case 2 : layer=DOCLAYBASE+(num-1)*DOCLAYSHIFT; colorchange(layer,0,COLFIND1); colorchange(layer+1,0,COLFIND2); colorchange(layer+2,0,COLFINDA); break; case 0 : default : colorchange(num-1,0,COLFIN); } } // Get special layer status if (actcode!=1) { bae_dialsetcurrent(boxidx); bae_dialgetdata(typidx,newtyp,0.0,""); bae_dialgetdata(allidx,intpar,0.0,""); colorchange(LAYERALL,intpar,COLFIN); bae_dialgetdata(btwidx,intpar,0.0,""); colorchange(LAYERBTW,intpar,COLFIN); bae_dialgetdata(brdidx,intpar,0.0,""); colorchange(LAYERBRD,intpar,COLFIN); bae_dialgetdata(unridx,intpar,0.0,""); colorchange(LAYERUNR,intpar,COLFIN); bae_dialgetdata(drlidx,intpar,0.0,""); colorchange(LAYERDRL,intpar,COLFIND); bae_dialsetcurrent(0); } // Perform requested action switch (actcode) { // Layer type change case 217 : if (laytyp!=newtyp) { num=1; laytyp=newtyp; } break; // Manual number input case 2 : if (askint(num,UPRGETNUM,3)) error_abort(); break; // Previous number case 3 : while (num>1) { num--; if (!LBRWUSCAN) break; if (kbhit()) { getchr(); break; } switch (laytyp) { case 1 : if (!layuchk(POWLAYBASE+num-1)) continue; break; case 2 : if (!layuchk( DOCLAYBASE+(num-1)*DOCLAYSHIFT)) continue; break; case 0 : default : if (!layuchk(num-1)) continue; } break; } break; // Next number case 4 : while ((laytyp==0 && num0 ? 1 : 0,0.0,UPRLAYALL); bae_dialsetdata(btwidx,PA_TOGGLE, bae_getcolor(LAYERBTW)>0 ? 1 : 0,0.0,UPRLAYBTW); bae_dialsetdata(brdidx,PA_TOGGLE, bae_getcolor(LAYERBRD)>0 ? 1 : 0,0.0,UPRLAYBRD); bae_dialsetdata(unridx,PA_TOGGLE, bae_getcolor(LAYERUNR)>0 ? 1 : 0,0.0,UPRLAYUNR); bae_dialsetdata(drlidx,PA_TOGGLE, (bae_getcolor(LAYERDRL)>0 && (bae_getcolor(LAYERDRL)&0xFFFFF)!=0) ? 1 : 0, 0.0,UPRLAYDRL); bae_dialsetcurrent(0); break; // Fail/abort, number buttons // Abort case (-1) : default : if (actcode>=5 && actcode<=114) { num=actcode-4; break; } vardelete(GV_TYPFIELD); vardelete(GV_ALLFIELD); vardelete(GV_BTWFIELD); vardelete(GV_BRDFIELD); vardelete(GV_UNRFIELD); vardelete(GV_DRLFIELD); vardelete(GV_NUMFIELD); vardelete(GV_NAMFIELD); vardelete(GV_LASTTYP); vardelete(GV_LASTNUM); vardelete(GV_COLTAB); sprintf(varname,VAR_PDBOXSEQ,boxidx); vardelete(varname); sprintf(varname,VAR_PDBOXMODE,boxidx); vardelete(varname); bae_dialsetcurrent(boxidx); bae_dialclr(); bae_dialsetcurrent(0); if (actcode!=216) { // Load the old color table bae_loadcoltab(ocoltname); bae_clriactqueue(); } } if (actcode!=(-1) && actcode!=216) { // Display new number laystr=""; switch (laytyp) { // Signal layer case 0 : mn=lay_menulaylinecnt(); layer=num-1; for (i=0;i0 ? 1 : 0, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG,cy,0.0,UPRLAYALL); cy+=DIAL_CTRVSTEP; btwidx=bae_dialaddcontrol(PA_TOGGLE,0,217, bae_getcolor(LAYERBTW)>0 ? 1 : 0, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG,cy,0.0,UPRLAYBTW); cy+=DIAL_CTRVSTEP; brdidx=bae_dialaddcontrol(PA_TOGGLE,0,217, bae_getcolor(LAYERBRD)>0 ? 1 : 0, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG,cy,0.0,UPRLAYBRD); cy+=DIAL_CTRVSTEP; unridx=bae_dialaddcontrol(PA_TOGGLE,0,217, bae_getcolor(LAYERUNR)>0 ? 1 : 0, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG,cy,0.0,UPRLAYUNR); cy+=DIAL_CTRVSTEP; drlidx=bae_dialaddcontrol(PA_TOGGLE,0,217, bae_getcolor(LAYERDRL)>0 && (bae_getcolor(LAYERDRL)&0xFFFFF)!=0 ? 1 : 0,0.0,0.0,0.0,"",0,DIAL_LEFTMARG,cy,0.0,UPRLAYDRL); cy+=DIAL_CTRVSTEP; dial_hsep(cy); bae_dialaddcontrol(PA_ACT,0,216,0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG,cy,14.0,UPRCHGPAL); cy+=DIAL_BUTVSTEP; bae_dialaddcontrol(PA_ACT,0,215,0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG,cy,14.0,UPRLOADPAL); cy+=DIAL_BUTVSTEP+DIAL_SEPVSTEP; // Call the dialog function bae_setintpar(16, bae_iniintval(PAR_MODALBOX,0) ? (PA_MODALBOX|3003) : 3003); if ((boxidx=bae_dialboxperm(UPRLAYBROWSE,0, DIAL_LEFTMARG+16.0+DIAL_RIGHTSMARG,cy))<0) error_abort(); sprintf(varname,VAR_PDBOXSEQ,boxidx); varset(varname,"ardisp:s9"); sprintf(varname,VAR_PDBOXMODE,boxidx); varset(varname,PDBOXZOOMUPD); varset(GV_TYPFIELD,typidx); varset(GV_NUMFIELD,numidx); varset(GV_NAMFIELD,namidx); varset(GV_ALLFIELD,allidx); varset(GV_BTWFIELD,btwidx); varset(GV_BRDFIELD,brdidx); varset(GV_UNRFIELD,unridx); varset(GV_DRLFIELD,drlidx); varset(GV_LASTTYP,0); varset(GV_LASTNUM,1); varset(GV_COLTAB,ocoltname); exit(0); } void colorchange(int layer,int status,int defcolor) /* // Change display status for given layer // Parameters : // int layer : Layer code // int status : Layer display status // int defcolor : Layer default color */ { int color /* Color */; // Check if layer display request if (status) { layerfadein(layer,defcolor,0); } else { // Check if layer displayed if ((color=bae_getcolor(layer))>0) // Fade out bae_setcolor(layer,-color-1); } } int layuchk(int layer) /* // Check usage of given layer // Return value : // 1 if layer used else 0 // Parameters : // int layer : Check layer code */ { index L_FIGURE fig /* Figure list index */; index L_POWLAYER powlay /* Power layer index */; // Check on power layers if (layer>=POWLAYBASE && layer-POWLAYBASE=0 && nref.MIRROR) ? (drill.CLASS&DRLCMASK2)>>DRLCSHFT2 : drill.CLASS&DRLCMASK1 ; return(scanlayer==(-12-drlclass) ? (-1) : 0); } int layulchk(int layer) /* // Layer usage check routine // Return value : // zero if scan break requested, 1 if scan allowed // Parameters : // int layer : Layer code */ { // Check layer return((scanlayer==layer || (scanlayer>=DOCLAYBASE && scanlayer==(layer&(~0x03)))) ? 1 : 0); } void showparameters() /* // Show parameter settings */ { STRINGS hl /* Header list */; STRINGS el /* Entry list */; int hn = 0 /* Header count */; int en = 0 /* Entry count */; int mc = 0 /* Requested popup column count */; string blkname /* Block name */; string coltab /* Color table name */; double x,y,z,w /* Value buffers */; int layer /* Layer number */; int blk /* DRC block number */; int lastblk = (-1) /* Last documented DRC block number */; int i /* Loop variable */; // Get the report header sprintf(hl[0],REPHDPAR00); sprintf(hl[1],REPHDPAR01); hn=2; // Init the requested popup columns count mc=maxint(strlen(hl[0]),strlen(hl[1]))+1; // Get and report the display parameters sprintf(el[0],REPDEFLIB,strgetvarfilename(lay_deflibname())); sprintf(el[1],REPCURLIB,strgetvarfilename(lay_libfname())); sprintf(el[2],REPDEFELM,lay_defelemname()); sprintf(el[3],REPFNTNAM,bae_fontname()); sprintf(el[4],REPFNTCNT,bae_fontcharcnt()); sprintf(el[5],REPCOLTNAM,coltab); sprintf(el[6],REPCOORDM,UNIT); sprintf(el[7],REPGRIDLK,bae_getgridlock() ? ITMLOCK : ITMFREE); sprintf(el[8],REPANGLLK,bae_getanglelock() ? ITMLOCK : ITMFREE); bae_getinpgrid(x,y); sprintf(el[9],REPINPUTX,baecvtl(x),UNIT); sprintf(el[10],REPINPUTY,baecvtl(y),UNIT); bae_getbackgrid(x,y); sprintf(el[11],REPDISPX,baecvtl(x),UNIT); sprintf(el[12],REPDISPY,baecvtl(y),UNIT); sprintf(el[13],REPCLPWDTH,baecvtl(ar_getwidedraw()),UNIT); sprintf(el[14],REPPPLAY,layername(ar_getpickpreflay())); sprintf(el[15],REPTOPLAY,layername(lay_plantoplay())); sprintf(el[16],REPBTWLAY,lay_planmidlaycnt()); sprintf(el[17],REPMINCON,itemmincon()); en=18; // Store the checking parameters header sprintf(el[en],REPCHKHD); en++; // Loop while valid blocks found blk=0; while (1) { // Get the all layer parameters x=(-1.0); lay_getplanchkparam(x,y,z,w,blkname,(-1),blk); if (x==(-1.0)) break; if (blkname!="" && blk!=lastblk) { sprintf(el[en],REPCHKBLK,blk,blkname); en++; lastblk=blk; } sprintf(el[en],REPCHKEN,blk,layername(-1),baecvtl(x),UNIT, baecvtl(y),UNIT,baecvtl(z),UNIT,baecvtl(w),UNIT); en++; // Get the top layer parameters x=(-1.0); lay_getplanchkparam(x,y,z,w,blkname,(-5),blk); if (x!=(-1.0) && (x!=0.0 || y!=0.0 || z!=0.0 || w!=0.0)) { sprintf(el[en],REPCHKEN,blk,layername(-5),baecvtl(x), UNIT,baecvtl(y),UNIT,baecvtl(z),UNIT,baecvtl(w),UNIT); en++; } // Get the middle layer parameters x=(-1.0); lay_getplanchkparam(x,y,z,w,blkname,(-6),blk); if (x!=(-1.0) && (x!=0.0 || y!=0.0 || z!=0.0 || w!=0.0)) { sprintf(el[en],REPCHKEN,blk,layername(-6),baecvtl(x), UNIT,baecvtl(y),UNIT,baecvtl(z),UNIT,baecvtl(w),UNIT); en++; } // Loop for all signal layers for (layer=0;layer=0;i--) mc=maxint(mc,strlen(el[i])+1); // Activate the popup menu bae_setintpar(16,3002); popupmenu(0,"",hl,hn,el,en,"",0,0,1,hn+en+2,mc,0,""); } string itemmincon() /* // Convert mincon function type to item string // Return value : // mincon item string */ { // Get the mincon function type switch (ar_getmincon()) { case 0 : return(ITMMINCON0); case 1 : return(ITMMINCON1); case 2 : return(ITMMINCON2); case 3 : return(ITMMINCON3); case 4 : return(ITMMINCON4); case 5 : return(ITMMINCON5); case 6 : return(ITMMINCON6); case 7 : return(ITMMINCON7); case 8 : return(ITMMINCON8); } // Undefined return(ITMUNDEF); } // User Language program end