Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
Arquivo: main.c Projeto: jw3/jbmcgi
/* 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();
}
Exemplo n.º 3
0
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;
}