HIDDEN int mem_close(FBIO *ifp) { /* * Flush memory/cmap to attached frame buffer if any */ if (MI(ifp)->fbp != FBIO_NULL) { if (MI(ifp)->cmap_dirty) { fb_wmap(MI(ifp)->fbp, &(MI(ifp)->cmap)); } if (MI(ifp)->mem_dirty) { fb_writerect(MI(ifp)->fbp, 0, 0, ifp->if_width, ifp->if_height, (unsigned char *)MI(ifp)->mem); } fb_close(MI(ifp)->fbp); MI(ifp)->fbp = FBIO_NULL; } (void)free((char *)MI(ifp)->mem); (void)free((char *)MIL(ifp)); return 0; }
/* writes the calculated data to the web page... */ void writetable(lpTrajectory trajectory) { double x; int c, i, k; lpOptions o; o = trajectory->options; /* write the trajectory data... */ html_writeheader("Calculated Table", 3); html_opentable(HTML_TABLE_ALIGN_NONE, 0, 0); if (options_getoption(o, TRAJ_OPT_MIL)) { html_writetablevalue("Elevation:", " mil", "%6.3f", MIL(trajectory->elevation)); html_writetablevalue("Azimuth:", " mil", "%6.3f", MIL(trajectory->azimuth)); } else { html_writetablevalue("Elevation:", " moa", "%6.3f", MOA(trajectory->elevation)); html_writetablevalue("Azimuth:", " moa", "%6.3f", MOA(trajectory->azimuth)); } html_closetable(); html_break(); html_opentable(HTML_TABLE_ALIGN_NONE, 0, 0); html_tableopenrow(HTML_TABLE_ALIGN_NONE); for (i = 0; i < TRAJ_NUMCOLUMNS; i++) html_tableheader(HTML_TABLE_ALIGN_CENTER, 1, 1, 0, HEADERSTR[i]); html_tablecloserow(); html_tableopenrow(HTML_TABLE_ALIGN_NONE); if (options_getoption(o, TRAJ_OPT_MOA)) for (i = 0; i < TRAJ_NUMCOLUMNS; i++) html_tableheader(HTML_TABLE_ALIGN_CENTER, 1, 1, 0, MOAHEADERUNITS[i]); else if (options_getoption(o, TRAJ_OPT_MIL)) for (i = 0; i < TRAJ_NUMCOLUMNS; i++) html_tableheader(HTML_TABLE_ALIGN_CENTER, 1, 1, 0, MILHEADERUNITS[i]); else for (i = 0; i < TRAJ_NUMCOLUMNS; i++) html_tableheader(HTML_TABLE_ALIGN_CENTER, 1, 1, 0, INHEADERUNITS[i]); html_tablecloserow(); c = (trajectory->range_max - trajectory->range_min)/trajectory->range_inc; for (i = 0; i <= c; i++) { html_tableopenrow(HTML_TABLE_ALIGN_NONE); html_writetabledata(TABLEFORMATS[0], trajectory->ranges[i].range); html_writetabledata(TABLEFORMATS[1], trajectory->ranges[i].velocity); html_writetabledata(TABLEFORMATS[2], trajectory->ranges[i].energy); html_writetabledata(TABLEFORMATS[3], trajectory->ranges[i].momentum); if (options_getoption(o, TRAJ_OPT_IN)) { html_writetabledata(TABLEFORMATS[4], FTTOIN(trajectory->ranges[i].drop)); html_writetabledata(TABLEFORMATS[5], FTTOIN(trajectory->ranges[i].windage)); html_writetabledata(TABLEFORMATS[6], FTTOIN(trajectory->ranges[i].lead)); } else { k = trajectory->range_min + i*trajectory->range_inc; if (k) { x = 1.0/YRDTOFT(k); if (options_getoption(o, TRAJ_OPT_MIL)) { html_writetabledata(TABLEFORMATS[4], MIL(trajectory->ranges[i].drop*x)); html_writetabledata(TABLEFORMATS[5], MIL(trajectory->ranges[i].windage*x)); html_writetabledata(TABLEFORMATS[6], MIL(trajectory->ranges[i].lead*x)); } else if (options_getoption(o, TRAJ_OPT_MOA)) { html_writetabledata(TABLEFORMATS[4], MOA(trajectory->ranges[i].drop*x)); html_writetabledata(TABLEFORMATS[5], MOA(trajectory->ranges[i].windage*x)); html_writetabledata(TABLEFORMATS[6], MOA(trajectory->ranges[i].lead*x)); } } else { html_tabledata(HTML_TABLE_ALIGN_CENTER, 1, 1, 0, "---"); html_tabledata(HTML_TABLE_ALIGN_CENTER, 1, 1, 0, "---"); html_tabledata(HTML_TABLE_ALIGN_CENTER, 1, 1, 0, "---"); } } html_writetabledata(TABLEFORMATS[7], trajectory->ranges[i].time); html_tablecloserow(); } html_closetable(); }
HIDDEN int mem_open(FBIO *ifp, const char *file, int width, int height) { int mode; const char *cp; FBIO *fbp; char modebuf[80]; char *mp; int alpha; struct modeflags *mfp; FB_CK_FBIO(ifp); /* This function doesn't look like it will work if file * is NULL - stop before we start, if that's the case.*/ if (file == NULL) return -1; /* * First, attempt to determine operating mode for this open, * based upon the "unit number" or flags. * file = "/dev/mem###" * The default mode is zero. */ mode = 0; if (bu_strncmp(file, "/dev/mem", 8)) { /* How did this happen?? */ mode = 0; } else { /* Parse the options */ alpha = 0; mp = &modebuf[0]; cp = &file[8]; while (*cp != '\0' && !isspace((int)*cp)) { *mp++ = *cp; /* copy it to buffer */ if (isdigit((int)*cp)) { cp++; continue; } alpha++; for (mfp = modeflags; mfp->c != '\0'; mfp++) { if (mfp->c == *cp) { mode = (mode&~mfp->mask)|mfp->value; break; } } if (mfp->c == '\0' && *cp != '-') { fb_log("if_mem: unknown option '%c' ignored\n", *cp); } cp++; } *mp = '\0'; if (!alpha) mode = atoi(modebuf); } /* build a local static info struct */ if ((MIL(ifp) = (char *)calloc(1, sizeof(struct mem_info))) == NULL) { fb_log("mem_open: mem_info malloc failed\n"); return -1; } cp = &file[strlen("/dev/mem")]; while (*cp != '\0' && *cp != ' ' && *cp != '\t') cp++; /* skip suffix */ while (*cp != '\0' && (*cp == ' ' || *cp == '\t' || *cp == ';')) cp++; /* skip blanks and separators */ if (*cp) { /* frame buffer device specified */ if ((fbp = fb_open(cp, width, height)) == FBIO_NULL) { free(MIL(ifp)); return -1; } MI(ifp)->fbp = fbp; ifp->if_width = fbp->if_width; ifp->if_height = fbp->if_height; ifp->if_selfd = fbp->if_selfd; if ((mode & MODE_1MASK) == MODE_1IMMEDIATE) MI(ifp)->write_thru = 1; } else { /* no frame buffer specified */ if (width > 0) ifp->if_width = width; if (height > 0) ifp->if_height = height; } if ((MI(ifp)->mem = (unsigned char *)calloc(ifp->if_width*ifp->if_height, 3)) == NULL) { fb_log("mem_open: memory buffer malloc failed\n"); (void)free(MIL(ifp)); return -1; } if ((MI(ifp)->fbp != FBIO_NULL) && (mode & MODE_2MASK) == MODE_2PREREAD) { /* Pre read all of the image data and cmap */ int got; got = fb_readrect(MI(ifp)->fbp, 0, 0, ifp->if_width, ifp->if_height, (unsigned char *)MI(ifp)->mem); if (got != ifp->if_width * ifp->if_height) { fb_log("if_mem: WARNING: pre-read of %d only got %d, your image is truncated.\n", ifp->if_width * ifp->if_height, got); } if (fb_rmap(MI(ifp)->fbp, &(MI(ifp)->cmap)) < 0) fb_make_linear_cmap(&(MI(ifp)->cmap)); } else { /* Image data begins black, colormap linear */ fb_make_linear_cmap(&(MI(ifp)->cmap)); } return 0; }