Ejemplo n.º 1
0
void
drawpages(char *pagelist)
{
    int page, spage, epage;
    char *spec, *dash;

    if (!src)
        drawusage();

    spec = strsep(&pagelist, ",");
    while (spec)
    {
        dash = strchr(spec, '-');

        if (dash == spec)
            spage = epage = 1;
        else
            spage = epage = atoi(spec);

        if (dash)
        {
            if (strlen(dash) > 1)
                epage = atoi(dash + 1);
            else
                epage = pdf_getpagecount(srcpages);
        }

        if (spage > epage)
            page = spage, spage = epage, epage = page;

        for (page = spage; page <= epage; page++)
        {
            if (page < 1 || page > pdf_getpagecount(srcpages))
                continue;
            switch (drawmode)
            {
            case DRAWPNM: drawpnm(page); break;
            case DRAWTXT: drawtxt(page); break;
            case DRAWXML: drawxml(page); break;
            }
        }

        spec = strsep(&pagelist, ",");
    }
}
Ejemplo n.º 2
0
Archivo: pdfdraw.c Proyecto: Limsik/e17
static void drawpages(char *pagelist)
{
	int page, spage, epage;
	char *spec, *dash;
	struct benchmark loadtimes, drawtimes;

	if (!xref)
		drawusage();

	if (benchmark)
	{
		memset(&loadtimes, 0x00, sizeof (loadtimes));
		loadtimes.min = LONG_MAX;
		memset(&drawtimes, 0x00, sizeof (drawtimes));
		drawtimes.min = LONG_MAX;
	}

	spec = strsep(&pagelist, ",");
	while (spec)
	{
		dash = strchr(spec, '-');

		if (dash == spec)
			spage = epage = 1;
		else
			spage = epage = atoi(spec);

		if (dash)
		{
			if (strlen(dash) > 1)
				epage = atoi(dash + 1);
			else
				epage = pagecount;
		}

		if (spage > epage)
			page = spage, spage = epage, epage = page;

		if (spage < 1)
			spage = 1;
		if (epage > pagecount)
			epage = pagecount;

		printf("Drawing pages %d-%d...\n", spage, epage);
		for (page = spage; page <= epage; page++)
		{
			switch (drawmode)
			{
			case DRAWPNM: drawpnm(page, &loadtimes, &drawtimes); break;
			case DRAWTXT: drawtxt(page); break;
			case DRAWXML: drawxml(page); break;
			}
		}

		spec = strsep(&pagelist, ",");
	}

	if (benchmark)
	{
		if (loadtimes.pages > 0)
		{
			loadtimes.avg /= loadtimes.pages;
			drawtimes.avg /= drawtimes.pages;

			printf("benchmark[load]: min: %6.3fs (page % 4d), avg: %6.3fs, max: %6.3fs (page % 4d)\n",
				loadtimes.min / 1000000.0, loadtimes.minpage,
				loadtimes.avg / 1000000.0,
				loadtimes.max / 1000000.0, loadtimes.maxpage);
			printf("benchmark[draw]: min: %6.3fs (page % 4d), avg: %6.3fs, max: %6.3fs (page % 4d)\n",
				drawtimes.min / 1000000.0, drawtimes.minpage,
				drawtimes.avg / 1000000.0,
				drawtimes.max / 1000000.0, drawtimes.maxpage);
		}
	}
}