int showinfo (int fd) { int i,err,n; struct mtd_info_user mtd; static struct region_info_user region[1024]; err = getmeminfo (fd,&mtd); if (err < 0) { perror ("MEMGETINFO"); return (1); } err = getregions (fd,region,&n); if (err < 0) { perror ("MEMGETREGIONCOUNT"); return (1); } printf ("mtd.type = "); switch (mtd.type) { case MTD_ABSENT: printf ("MTD_ABSENT"); break; case MTD_RAM: printf ("MTD_RAM"); break; case MTD_ROM: printf ("MTD_ROM"); break; case MTD_NORFLASH: printf ("MTD_NORFLASH"); break; case MTD_NANDFLASH: printf ("MTD_NANDFLASH"); break; case MTD_DATAFLASH: printf ("MTD_DATAFLASH"); break; case MTD_UBIVOLUME: printf ("MTD_UBIVOLUME"); default: printf ("(unknown type - new MTD API maybe?)"); } printf ("\nmtd.flags = "); if (mtd.flags == MTD_CAP_ROM) printf ("MTD_CAP_ROM"); else if (mtd.flags == MTD_CAP_RAM) printf ("MTD_CAP_RAM"); else if (mtd.flags == MTD_CAP_NORFLASH) printf ("MTD_CAP_NORFLASH"); else if (mtd.flags == MTD_CAP_NANDFLASH) printf ("MTD_CAP_NANDFLASH"); else if (mtd.flags == MTD_WRITEABLE) printf ("MTD_WRITEABLE"); else { int first = 1; static struct { const char *name; int value; } flags[] = { { "MTD_WRITEABLE", MTD_WRITEABLE }, { "MTD_BIT_WRITEABLE", MTD_BIT_WRITEABLE }, { "MTD_NO_ERASE", MTD_NO_ERASE }, { "MTD_STUPID_LOCK", MTD_STUPID_LOCK }, { NULL, -1 } }; for (i = 0; flags[i].name != NULL; i++) if (mtd.flags & flags[i].value) { if (first) { printf (flags[i].name); first = 0; } else printf (" | %s",flags[i].name); } } printf ("\nmtd.size = "); printsize (mtd.size); printf ("\nmtd.erasesize = "); printsize (mtd.erasesize); printf ("\nmtd.writesize = "); printsize (mtd.writesize); printf ("\nmtd.oobsize = "); printsize (mtd.oobsize); printf ("\n" "regions = %d\n" "\n", n); for (i = 0; i < n; i++) { printf ("region[%d].offset = 0x%.8x\n" "region[%d].erasesize = ", i,region[i].offset,i); printsize (region[i].erasesize); printf ("\nregion[%d].numblocks = %d\n" "region[%d].regionindex = %d\n", i,region[i].numblocks, i,region[i].regionindex); } return (0); }
int showinfo (int fd) { int i,err,n; struct mtd_info_user mtd; static struct region_info_user region[1024]; err = getmeminfo (fd,&mtd); if (err < 0) { perror ("MEMGETINFO"); return (1); } err = getregions (fd,region,&n); if (err < 0) { perror ("MEMGETREGIONCOUNT"); return (1); } printf ("mtd.type = "); switch (mtd.type) { case MTD_ABSENT: printf ("MTD_ABSENT"); break; case MTD_RAM: printf ("MTD_RAM"); break; case MTD_ROM: printf ("MTD_ROM"); break; case MTD_NORFLASH: printf ("MTD_NORFLASH"); break; case MTD_NANDFLASH: printf ("MTD_NANDFLASH"); break; case MTD_PEROM: printf ("MTD_PEROM"); break; case MTD_OTHER: printf ("MTD_OTHER"); break; case MTD_UNKNOWN: printf ("MTD_UNKNOWN"); break; default: printf ("(unknown type - new MTD API maybe?)"); } printf ("\nmtd.flags = "); if (mtd.flags == MTD_CAP_ROM) printf ("MTD_CAP_ROM"); else if (mtd.flags == MTD_CAP_RAM) printf ("MTD_CAP_RAM"); else if (mtd.flags == MTD_CAP_NORFLASH) printf ("MTD_CAP_NORFLASH"); else if (mtd.flags == MTD_CAP_NANDFLASH) printf ("MTD_CAP_NANDFLASH"); else if (mtd.flags == MTD_WRITEABLE) printf ("MTD_WRITEABLE"); else { int i,first = 1; static struct { const char *name; int value; } flags[] = { { "MTD_CLEAR_BITS", MTD_CLEAR_BITS }, { "MTD_SET_BITS", MTD_SET_BITS }, { "MTD_ERASEABLE", MTD_ERASEABLE }, { "MTD_WRITEB_WRITEABLE", MTD_WRITEB_WRITEABLE }, { "MTD_VOLATILE", MTD_VOLATILE }, { "MTD_XIP", MTD_XIP }, { "MTD_OOB", MTD_OOB }, { "MTD_ECC", MTD_ECC }, { NULL, -1 } }; for (i = 0; flags[i].name != NULL; i++) if (mtd.flags & flags[i].value) { if (first) { printf (flags[i].name); first = 0; } else printf (" | %s",flags[i].name); } } printf ("\nmtd.size = "); printsize (mtd.size); printf ("\nmtd.erasesize = "); printsize (mtd.erasesize); printf ("\nmtd.oobblock = "); printsize (mtd.oobblock); printf ("\nmtd.oobsize = "); printsize (mtd.oobsize); printf ("\nmtd.ecctype = "); switch (mtd.ecctype) { case MTD_ECC_NONE: printf ("MTD_ECC_NONE"); break; case MTD_ECC_RS_DiskOnChip: printf ("MTD_ECC_RS_DiskOnChip"); break; case MTD_ECC_SW: printf ("MTD_ECC_SW"); break; default: printf ("(unknown ECC type - new MTD API maybe?)"); } printf ("\n" "regions = %d\n" "\n", n); for (i = 0; i < n; i++) { printf ("region[%d].offset = 0x%.8x\n" "region[%d].erasesize = ", i,region[i].offset,i); printsize (region[i].erasesize); printf ("\nregion[%d].numblocks = %d\n" "region[%d].regionindex = %d\n", i,region[i].numblocks, i,region[i].regionindex); } return (0); }
int dpir(int argc, char *argv[], int retc, char *retv[]) /*************/ { int groups; int resets; int i, min, ysize; char name[64]; char tmpstr[MAXSTR]; (void) retc; (void) retv; if (argc > 1 && strcmp(argv[1],"off") == 0) { set_dpir_flag(0,""); redo_dpf_dpir(); RETURN; } else if (argc > 1 && strcmp(argv[1],"turnoff") == 0) { set_dpir_flag(0,""); RETURN; } vertflag=0; if ( ! P_getstring(GLOBAL, "integralOrient", tmpstr, 1, MAXSTR) ) { vertflag = (strcmp(tmpstr,"vert") == 0); } if (argc > 1 && strcmp(argv[1],"vert") == 0) { vertflag=1; } if(argc == 1 || strcmp(argv[1],"noli") != 0) { execString("nli\n"); } if (check_int(&resets)) { Werrprintf("intmod must not be set to 'full'"); ABORT; } if (resets <= 1) { Werrprintf("no integral resets are defined"); ABORT; } plot = (argv[0][0] == 'p'); if (select_init( 0, plot+1, NO_FREQ_DIM, NO_HEADERS, DO_CHECK2D, DO_SPECPARS, NO_BLOCKPARS, NO_PHASEFILE )) { ABORT; } if(strlen(argv[0]) > 4 && argv[0][4] == 'N') { normInt = 1; } else if(strlen(argv[0]) > 3 && argv[0][3] == 'N') { normInt = 1; } if ((groups = getregions(resets)) == 0) { ABORT; } min=mnumxpnts; for (i = 1; i <= groups; i++) { if(gb[i].lowlimit <= 0 || gb[i].highlimit <= 0 || gb[i].lowlimit >= (mnumxpnts-xcharpixels) || gb[i].highlimit >= (mnumxpnts-xcharpixels)) continue; if((gb[i].highlimit-gb[i].lowlimit) < min) min = gb[i].highlimit-gb[i].lowlimit; } if(min != 0 && min < 3*xcharpixels) ysize = 3; else ysize=2; if (!plot) { setwindows(); dispcalib = (float) (mnumypnts-ymin) / (float) wc2max; CharSize = ycharpixels + ycharpixels / 5; getOptName(INTEG_MARK,name); set_line_thickness(name); getOptName(INTEG_NUM,name); set_graphics_font(name); } else { double size = G_getCharSize("IntegralNum"); charsize(size); //charsize((double)0.7); dispcalib = ppmm / ymultiplier; CharSize = ycharpixels; } if (showPlotBox()) dpir_off=0.0; else dpir_off=9.0; if(dispcalib>0) { int size= 12; G_getSize("IntegralNum", &size); i = (int)(vp*dispcalib); if (vertflag && i < 4*size) { char cmd[64]; i = (int)(4*size/dispcalib)+1; if(vertflag) sprintf(cmd,"vp=%d ds %s('vert')\n",i,argv[0]); else sprintf(cmd,"vp=%d ds %s\n",i,argv[0]); if(!plot) execString(cmd); //Werrprintf("pir requires minimum vp of %d",i); RETURN; } else if (i < 3*size) { char cmd[64]; i = (int)(3*size/dispcalib)+1; if(vertflag) sprintf(cmd,"vp=%d ds %s('vert')\n",i,argv[0]); else sprintf(cmd,"vp=%d ds %s\n",i,argv[0]); if(!plot) execString(cmd); //Werrprintf("pir requires minimum vp of %d",i); RETURN; } } else { if (vp < 30) { char cmd[64]; i=30; if(vertflag) sprintf(cmd,"vp=%d ds %s('vert')\n",i,argv[0]); else sprintf(cmd,"vp=%d ds %s\n",i,argv[0]); if(!plot) execString(cmd); //Werrprintf("pir requires minimum vp of 30"); RETURN; } } //color(PARAM_COLOR); color(INTEG_MARK_COLOR); if (debug1) { Wscrprintf("dispcalib= %g, dfpnt2= %d, CharSize= %d, bottom= %d\n", dispcalib,dfpnt2,CharSize, dfpnt2 - CharSize + (int) (dispcalib * (vp - dpir_off - 5.0))); Wscrprintf("index highlimit lowlimit below\n"); for (i = 1; i <= groups; i++) Wscrprintf("%d %d %d %s\n",i,gb[i].highlimit,gb[i].lowlimit, (gb[i].below) ? "true" : "false"); } if(vertflag) { for (i = 1; i <= groups; i++) label_pirv(i); } else { for (i = 1; i <= groups; i++) label_pir(i, ysize); } if (!plot) { char cmd[64]; if(argc > 1) { if (isReal(argv[1]) ) sprintf(cmd,"%s(%s",argv[0],argv[1]); else sprintf(cmd,"%s('%s'",argv[0],argv[1]); for(i=2;i<argc;i++) { if (isReal(argv[i]) ) { strcat(cmd,","); strcat(cmd,argv[i]); } else { strcat(cmd,",'"); strcat(cmd,argv[i]); strcat(cmd,"'"); } } strcat(cmd,")\n"); } else sprintf(cmd,"%s\n",argv[0]); Wsetgraphicsdisplay("ds"); set_dpir_flag(1,cmd); } releaseAllWithId("dpir"); endgraphics(); disp_status(" "); set_graphics_font("Default"); RETURN; }