static void pdfapp_open_xps(pdfapp_t *app, char *filename, int fd) { fz_error error; fz_stream *file; file = fz_open_fd(fd); error = xps_open_stream(&app->xps, file); if (error) pdfapp_error(app, fz_rethrow(error, "cannot open document '%s'", filename)); fz_close(file); app->doctitle = filename; app->pagecount = xps_count_pages(app->xps); }
static void drawrange(xps_context *ctx, char *range) { int page, spage, epage; char *spec, *dash; spec = fz_strsep(&range, ","); while (spec) { dash = strchr(spec, '-'); if (dash == spec) spage = epage = xps_count_pages(ctx); else spage = epage = atoi(spec); if (dash) { if (strlen(dash) > 1) epage = atoi(dash + 1); else epage = xps_count_pages(ctx); } spage = CLAMP(spage, 1, xps_count_pages(ctx)); epage = CLAMP(epage, 1, xps_count_pages(ctx)); if (spage < epage) for (page = spage; page <= epage; page++) drawpage(ctx, page); else for (page = spage; page >= epage; page--) drawpage(ctx, page); spec = fz_strsep(&range, ","); } }