/* SETIGRID (STD) -- Set Input Grid */ /* SETIGRID (STD) -- Eingaberaster setzen */ /* // Copyright (c) 1996-2006 Oliver Bartels F+E, Erding // Author: Manfred Baumeister // Changes History: // mb (010912) ADAPTED TO BAE V5.0: Autoplacement module support removed. // mb (980911) ADAPTED TO BAE V4.2. // mb (980710) ENHANCEMENT: Pulldown menu delimiters introduced. // mb (980710) ENHANCEMENT: Dynamic multi-language support. // mb (971211) ADAPTED TO BAE V4.0. // mb (960704) ORIGINAL CODING. // // DESCRIPTION // // The setigrid User Language program provides an input grid // selection menu easily to be customized. setigrid is intended // to be assigned to the BAE Display menus. */ // Includes #include "std.ulh" // User Language standard include // Messages string REPDONE = M("Eingaberaster: X=%.4f Y=%.4f [%s].", "Input Grid: X=%.f Y=%.4f [%s]."); string UPRGRID = M("Eingaberaster waehlen!","Select Input Grid!"); string UPRXGRID = M("X-Richtung Raster (%s) ? ","X-Grid (%s) ? "); string UPRYGRID = M("Y-Richtung Raster (%s) ? ","Y-Grid (%s) ? "); #define ITMMM "&mm" string ITMINCH = M("&Zoll","&Inch"); #define ITMMIL "mi&l" #define ITMUM "&um" #define ITMTHOU "&thou" string MI_NOCHG = M("%Keine &Aenderung","%No Ch&ange"); string MI_OTHGRID = M("%Anderes &Grid","%Select &Grid"); string MI_NOGRID = M("%&Kein Grid","%&No Grid"); string ERRGRID = M("Fehler beim Setzen des selektierten Rasters!", "Error setting selected grid!"); string ERRINPVAL = M_ERRINPVAL(); // Constants #define MAXMIC 15 // Maximum menu item count #define GRIDINP 0x1 // Input grid mask #define GRIDDISP 0x2 // Display grid mask // mm menu items #define MI_MM10 "10&.0 "+ITMMM #define MI_MM5 " &5.0 "+ITMMM #define MI_MM2 " &2.0 "+ITMMM #define MI_MM1 " &1.0 "+ITMMM #define MI_MM0_5 " &0.5 "+ITMMM // Inch menu items string MI_INCH1_10 = "1/&10 "+ITMINCH; string MI_INCH1_20 = "1/&20 "+ITMINCH; string MI_INCH1_40 = "1/&40 "+ITMINCH; string MI_INCH1_60 = "1/&60 "+ITMINCH; string MI_INCH1_80 = "1/&80 "+ITMINCH; string MI_INCH1_100 = "1/10&0 "+ITMINCH; string MI_INCH1_120 = "1/120 "+ITMINCH; string MI_INCH1_160 = "1/160 "+ITMINCH; string MI_INCH1_200 = "1/200 "+ITMINCH; // mil menu items #define MI_MIL100 "100.0 "+ITMMIL // 1/10 Inch #define MI_MIL50 " 50.0 "+ITMMIL // 1/20 Inch #define MI_MIL25 " 25.0 "+ITMMIL // 1/40 Inch #define MI_MIL20 " 20.0 "+ITMMIL // 1/50 Inch #define MI_MIL12_5 " 12.5 "+ITMMIL // 1/80 Inch #define MI_MIL10 " 10.0 "+ITMMIL // 1/100 Inch #define MI_MIL5 " 5.0 "+ITMMIL // 1/200 Inch // æm menu items #define MI_UM10 "1&0.0 "+ITMUM #define MI_UM6 " &6.0 "+ITMUM #define MI_UM5 " &5.0 "+ITMUM #define MI_UM3 " &3.0 "+ITMUM #define MI_UM2 " &2.0 "+ITMUM #define MI_UM1 " &1.0 "+ITMUM #define MI_UM0_6 " 0.6 "+ITMUM #define MI_UM0_5 " 0.5 "+ITMUM #define MI_UM0_1 " 0.1 "+ITMUM // Unit codes #define UNITSSYS 0 // Units DSU (design system units) #define UNITSINCH 1 // Units Inch #define UNITSMM 2 // Units mm #define UNITSMIL 3 // Units mil #define UNITSUM 4 // Units æm #define UNITSABORT (-1) // Abort units setting request #define UNITSOTHER (-2) // Select units request #define UNITSNONE (-3) // Units none (no grid designator) // Grid menu definitions typedef struct { // Menu descriptor string m; // Menu item string int units; // Units code double gridx; // X grid value double gridy; // Y grid value } MENU[]; // Menu data type MENU menucap = { // SCM grid selection menu {MI_NOCHG ,UNITSABORT, 0.0, 0.0}, {MI_MM10 ,UNITSMM ,10.0,10.0}, {MI_MM5 ,UNITSMM , 5.0, 5.0}, {MI_MM2 ,UNITSMM , 2.0, 2.0}, {MI_MM1 ,UNITSMM , 1.0, 1.0}, {MI_MM0_5 ,UNITSMM , 0.5, 0.5}, {MI_OTHGRID ,UNITSOTHER, 0.0, 0.0}, {MI_NOGRID ,UNITSNONE , 0.0, 0.0} }; MENU menulay = { // PCB layout grid selection menu {MI_NOCHG ,UNITSABORT,0.0,0.0}, {MI_INCH1_10 ,UNITSINCH ,1.0/ 10.0,1.0/ 10.0}, {MI_INCH1_20 ,UNITSINCH ,1.0/ 20.0,1.0/ 20.0}, {MI_INCH1_40 ,UNITSINCH ,1.0/ 40.0,1.0/ 40.0}, {MI_INCH1_60 ,UNITSINCH ,1.0/ 60.0,1.0/ 60.0}, {MI_INCH1_80 ,UNITSINCH ,1.0/ 80.0,1.0/ 80.0}, {MI_INCH1_100,UNITSINCH ,1.0/100.0,1.0/100.0}, {MI_INCH1_120,UNITSINCH ,1.0/120.0,1.0/120.0}, {MI_INCH1_160,UNITSINCH ,1.0/160.0,1.0/160.0}, {MI_INCH1_200,UNITSINCH ,1.0/200.0,1.0/200.0}, {MI_OTHGRID ,UNITSOTHER,0.0,0.0}, {MI_NOGRID ,UNITSNONE ,0.0,0.0} }; MENU menuicd = { // IC design grid selection menu {MI_NOCHG ,UNITSABORT, 0.0, 0.0}, {MI_UM10 ,UNITSUM ,10.0,10.0}, {MI_UM6 ,UNITSUM , 6.0, 6.0}, {MI_UM5 ,UNITSUM , 5.0, 5.0}, {MI_UM3 ,UNITSUM , 3.0, 3.0}, {MI_UM2 ,UNITSUM , 2.0, 2.0}, {MI_UM1 ,UNITSUM , 1.0, 1.0}, {MI_UM0_6 ,UNITSUM , 0.6, 0.6}, {MI_UM0_5 ,UNITSUM , 0.5, 0.5}, {MI_UM0_1 ,UNITSUM , 0.1, 0.1}, {MI_OTHGRID ,UNITSOTHER, 0.0, 0.0}, {MI_NOGRID ,UNITSNONE , 0.0, 0.0} }; // Main program main() { MENU menu; // Grid selection menu double gx,gy; // Grid values string strbuf; // String buffer // Define grid switch (uliptype()) { // SCM system case ULIPSCM : menu=menucap; break; // PCB layout system case ULIPGED : case ULIPAR : case ULIPCAM : menu=menulay; break; // IC design system case ULIPCED : menu=menuicd; break; } // Perform grid selection perror(UPRGRID); defgrid(GRIDINP,menu); // Done; display the grid settings bae_getinpgrid(gx,gy); sprintf(strbuf,REPDONE,baecvtl(gx),baecvtl(gy),dspunititm()); perror(strbuf); } void defgrid(gridmask,MENU menu) // Run grid selection menu // Parameters: // int gridmask : Grid type mask (xxx1=input, xx1x=display) // MENU menu : Grid selection menu { int menun; // Menu item count int sc; // Selection code double gridx; // X grid double gridy; // Y grid string promptx; // X grid prompt string prompty; // Y grid prompt // Get menu item count if ((menun=arylength(menu))>MAXMIC) menun=MAXMIC; // Run grid selection menu sc=bae_askmenu(menun, menu[0].m,menu[1].m,menu[2].m,menu[3].m,menu[4].m, menu[5].m,menu[6].m,menu[7].m,menu[8].m,menu[9].m, menu[10].m,menu[11].m,menu[12].m,menu[13].m,menu[14].m); // Evaluate selected units code switch (menu[sc].units) { // No change case UNITSABORT : return; // Select other grid case UNITSOTHER : // Set prompt sprintf(promptx,UPRXGRID,dspunititm()); sprintf(prompty,UPRYGRID,dspunititm()); // Ask for new grid if (askdbl(gridx,promptx,MAXKEYLEN) || gridx<0 || askdbl(gridy,prompty,MAXKEYLEN) || gridy<0) error(ERRINPVAL); // Convert grid values gridx=cvtlength(gridx,dspunit(),0); gridy=cvtlength(gridy,dspunit(),0); break; // No grid case UNITSNONE : gridx=gridy=0.0; break; // Set selected grid default : gridx=cvtlength(menu[sc].gridx,menu[sc].units,0); gridy=cvtlength(menu[sc].gridy,menu[sc].units,0); break; } // Set input grid on request if (gridmask&GRIDINP && bae_setinpgrid(gridx,gridy)) error(ERRGRID); // Set display grid on request if (gridmask&GRIDDISP && bae_setbackgrid(gridx,gridy)) error(ERRGRID); // Done } int dspunit() // Get display units code // Returns: // display units code { // Get and return display units code return((uliptype()&ULIPICD) ? (bae_getcoorddisp() ? UNITSMM : UNITSUM) : (bae_getcoorddisp() ? UNITSINCH : UNITSMM)); } string dspunititm() // Get display units designator // Returns: // display units designator { // Get and return display units designator return((uliptype()&ULIPICD) ? (bae_getcoorddisp() ? ITMMM : ITMUM) : (bae_getcoorddisp() ? ITMINCH : ITMMM)); } // User Language program end