Example #1
0
int main(int argn, char *argv[])
{
    processargs(argn, argv);
    initLog(0,-1,0,0,-1,loglevel);
    
    if(!filename) {
	fprintf(stderr, "Please specify an input file\n");
	exit(1);
    }
    
    if(!outputname)
    {
	if(filename) {
	    outputname = stripFilename(filename, ".out");
	    msg("<notice> Output filename not given. Writing to %s", outputname);
	} 
    }
    if(!outputname)
    {
	fprintf(stderr, "Please use -o to specify an output file\n");
	exit(1);
    }
    is_in_range(0x7fffffff, pagerange);
    if(pagerange)
	driver->setparameter(driver, "pages", pagerange);

    if(!filename) {
	args_callback_usage(argv[0]);
	exit(0);
    }

    gfxdocument_t* doc = driver->open(driver, filename);
    if(!doc) {
        msg("<error> Couldn't open %s", filename);
        exit(1);
    }

    if(!format) {
	char*x = strrchr(outputname, '.');
	if(x) 
	    format = x+1;
    }


    gfxresult_t*result = 0;
#ifdef HAVE_LRF
    if(!strcasecmp(format, "lrf")) {
        gfxdevice_t lrf;
        gfxdevice_lrf_init(&lrf);

        gfxdevice_t rescale;
        gfxdevice_rescale_init(&rescale, &lrf, 592, 732, 0);

        gfxdevice_t*out = &rescale;
        out->setparameter(out, "keepratio", "1");
        out->setparameter(out, "pagepattern", outputname);

        gfxdevice_t bbox2,*bbox=&bbox2;
        gfxdevice_bbox_init(bbox);
        bbox->setparameter(bbox, "graphics", "0");

        int pagenr;

        for(pagenr = 1; pagenr <= doc->num_pages; pagenr++) 
        {
            if(is_in_range(pagenr, pagerange)) {
                gfxpage_t* page = doc->getpage(doc, pagenr);
                bbox->startpage(bbox,-1,-1);
                page->render(page, bbox);
                gfxbbox_t b = gfxdevice_bbox_getbbox(bbox);

                out->startpage(out, b.xmax-b.xmin, b.ymax-b.ymin);
                page->rendersection(page, out, -b.xmin, -b.ymin, 0,0,b.xmax-b.xmin,b.ymax-b.ymin);
                out->endpage(out);

                page->destroy(page);
            }
        }
        result = out->finish(out);
    } else 
#endif
    {
        gfxdevice_t _out,*out=&_out;
        if(!strcasecmp(format, "ocr")) {
            gfxdevice_ocr_init(out);
        } else if(!strcasecmp(format, "swf")) {
            gfxdevice_swf_init(out);
        } else if(!strcasecmp(format, "img") || !strcasecmp(format, "png")) {
            gfxdevice_render_init(out);
	    out->setparameter(out, "antialize", "4");
        } else if(!strcasecmp(format, "txt")) {
            gfxdevice_text_init(out);
        } else if(!strcasecmp(format, "log")) {
            gfxdevice_file_init(out, "/tmp/device.log");
        } else if(!strcasecmp(format, "pdf")) {
            gfxdevice_pdf_init(out);
        } else {
	    msg("<error> Invalid output format: %s", format);
	    exit(1);
	}

        int pagenr;
        for(pagenr = 1; pagenr <= doc->num_pages; pagenr++) 
        {
            if(is_in_range(pagenr, pagerange)) {
                gfxpage_t* page = doc->getpage(doc, pagenr);
                out->startpage(out, page->width, page->height);
                page->render(page, out);
                out->endpage(out);
                page->destroy(page);
            }
        }
        result = out->finish(out);
    }

    if(result) {
	if(result->save(result, outputname) < 0) {
	    exit(1);
	}
	result->destroy(result);
    }

    doc->destroy(doc);

    driver->destroy(driver);
    return 0;
}
Example #2
0
int main (int argc,char ** argv)
{
    char buf[512];
    char*currentdir = getcwd(buf, 512);
    if(!currentdir) {
        as3_warning("Could not determine the current directory");
    } else {
        as3_add_include_dir(currentdir);
    }

    int t;
    processargs(argc, argv);
    as3_setverbosity(verbose);

    if(!filename) {
	args_callback_usage(argv[0]);
	exit(1);
    }
    if(!outputname) {
	outputname = stripFilename(filename, ".swf");
        //as3_warning("output name not given, writing to %s", outputname);
    }

    if(!strcmp(filename, ".")) {
        as3_parse_directory(".");
    } else {
        as3_parse_file(filename);
    }

    void*code = as3_getcode();

    SWF swf;
    memset(&swf, 0, sizeof(swf));
    swf.fileVersion = flashversion;
    swf.frameRate = framerate*0x100;
    swf.movieSize.xmin = 0;
    swf.movieSize.ymin = 0;
    swf.movieSize.xmax = width*20;
    swf.movieSize.ymax = height*20;
    TAG*tag = swf.firstTag = swf_InsertTag(0, ST_DOABC);
    swf_WriteABC(tag, code);

    if(!mainclass)
        mainclass = as3_getglobalclass();
    if(mainclass) {
        tag = swf_InsertTag(tag, ST_SYMBOLCLASS);
        swf_SetU16(tag, 1);
        swf_SetU16(tag, 0);
        swf_SetString(tag, mainclass);
    } else {
        as3_warning("no global public MovieClip subclass");
    }
    
    as3_destroy();

    tag = swf_InsertTag(tag, ST_SHOWFRAME);
    tag = swf_InsertTag(tag, ST_END);

    swf_FreeABC(code);
    
    if(local_with_filesystem)
        swf.fileAttributes &= ~FILEATTRIBUTE_USENETWORK;
    if(local_with_networking)
        swf.fileAttributes |= FILEATTRIBUTE_USENETWORK;

    writeSWF(&swf);
    swf_FreeTags(&swf);

    return 0;
}
Example #3
0
int main(int argn, char *argv[])
{
    int ret;
    char buf[256];
    int numfonts = 0;
    int t;
    char t1searchpath[1024];
    int nup_pos = 0;
    int x,y;
    int one_file_per_page = 0;

    initLog(0,-1,0,0,-1,loglevel);

    /* not needed anymore since fonts are embedded
       if(installPath) {
    fontpaths[fontpathpos++] = concatPaths(installPath, "fonts");
    }*/

#ifdef HAVE_SRAND48
    srand48(time(0));
#else
#ifdef HAVE_SRAND
    srand(time(0));
#endif
#endif

    processargs(argn, argv);

    driver = gfxsource_pdf_create();

    /* pass global parameters to PDF driver*/
    parameter_t*p = device_config;
    while(p) {
        driver->setparameter(driver, p->name, p->value);
        p = p->next;
    }

    if(!filename)
    {
        fprintf(stderr, "Please specify an input file\n");
        exit(1);
    }

    if (!info_only) {
        if(!outputname)
        {
            if(filename) {
                outputname = stripFilename(filename, ".swf");
                msg("<notice> Output filename not given. Writing to %s", outputname);
            }
        }

        if(!outputname)
        {
            fprintf(stderr, "Please use -o to specify an output file\n");
            exit(1);
        }
    }

    // test if the page range is o.k.
    is_in_range(0x7fffffff, pagerange);

    if (!filename) {
        args_callback_usage(argv[0]);
        exit(0);
    }

    char fullname[256];
    if(password && *password) {
        sprintf(fullname, "%s|%s", filename, password);
        filename = fullname;
    }

    if(pagerange)
        driver->setparameter(driver, "pages", pagerange);

    /* add fonts */
    for(t=0; t<fontpathpos; t++) {
        driver->setparameter(driver, "fontdir", fontpaths[t]);
    }

    if(info_only) {
        show_info(driver, filename);
        return 0;
    }

    char*u = 0;
    if((u = strchr(outputname, '%'))) {
        if(strchr(u+1, '%') ||
                strchr(outputname, '%')!=u)  {
            msg("<error> only one %% allowed in filename\n");
            return 1;
        }
        if(preloader || viewer) {
            msg("<error> -b/-l/-B/-L not supported together with %% in filename\n");
            return 1;
        }
        msg("<notice> outputting one file per page");
        one_file_per_page = 1;
        char*pattern = (char*)malloc(strlen(outputname)+2);
        /* convert % to %d */
        int l = u-outputname+1;
        memcpy(pattern, outputname, l);
        pattern[l]='d';
        strcpy(pattern+l+1, outputname+l);
        outputname = pattern;
    }

    gfxdocument_t* pdf = driver->open(driver, filename);
    if(!pdf) {
        msg("<error> Couldn't open %s", filename);
        exit(1);
    }
    /* pass global parameters document */
    p = device_config;
    while(p) {
        pdf->setparameter(pdf, p->name, p->value);
        p = p->next;
    }

    struct mypage_t {
        int x;
        int y;
        gfxpage_t*page;
    } pages[4];

    int pagenum = 0;
    int frame = 1;
    int pagenr;

    for(pagenr = 1; pagenr <= pdf->num_pages; pagenr++)
    {
        if(is_in_range(pagenr, pagerange)) {
            char mapping[80];
            sprintf(mapping, "%d:%d", pagenr, frame);
            pdf->setparameter(pdf, "pagemap", mapping);
            pagenum++;
        }
        if(pagenum == xnup*ynup || (pagenr == pdf->num_pages && pagenum>1)) {
            pagenum = 0;
            frame++;
        }
    }
    if(pagerange && !pagenum && frame==1) {
        fprintf(stderr, "No pages in range %s", pagerange);
        exit(1);
    }

    pagenum = 0;

    gfxdevice_t*out = create_output_device();;
    pdf->prepare(pdf, out);

    for(pagenr = 1; pagenr <= pdf->num_pages; pagenr++)
    {
        if(is_in_range(pagenr, pagerange)) {
            gfxpage_t* page = pages[pagenum].page = pdf->getpage(pdf, pagenr);
            pages[pagenum].x = 0;
            pages[pagenum].y = 0;
            pages[pagenum].page = page;
            pagenum++;
        }
        if(pagenum == xnup*ynup || (pagenr == pdf->num_pages && pagenum>1)) {

            int t;
            int xmax[xnup], ymax[xnup];
            int x,y;
            int width=0, height=0;

            memset(xmax, 0, xnup*sizeof(int));
            memset(ymax, 0, ynup*sizeof(int));

            for(y=0; y<ynup; y++)
                for(x=0; x<xnup; x++) {
                    int t = y*xnup + x;

                    if(pages[t].page->width > xmax[x])
                        xmax[x] = (int)pages[t].page->width;
                    if(pages[t].page->height > ymax[y])
                        ymax[y] = (int)pages[t].page->height;
                }
            for(x=0; x<xnup; x++) {
                width += xmax[x];
                xmax[x] = width;
            }
            for(y=0; y<ynup; y++) {
                height += ymax[y];
                ymax[y] = height;
            }
            if(custom_clip) {
                out->startpage(out,clip_x2 - clip_x1, clip_y2 - clip_y1);
            } else {
                out->startpage(out,width,height);
            }
            for(t=0; t<pagenum; t++) {
                int x = t%xnup;
                int y = t/xnup;
                int xpos = x>0?xmax[x-1]:0;
                int ypos = y>0?ymax[y-1]:0;
                msg("<verbose> Render (%d,%d) move:%d/%d\n",
                    (int)(pages[t].page->width + xpos),
                    (int)(pages[t].page->height + ypos), xpos, ypos);
                pages[t].page->rendersection(pages[t].page, out, custom_move? move_x : xpos,
                                             custom_move? move_y : ypos,
                                             custom_clip? clip_x1 : 0 + xpos,
                                             custom_clip? clip_y1 : 0 + ypos,
                                             custom_clip? clip_x2 : pages[t].page->width + xpos,
                                             custom_clip? clip_y2 : pages[t].page->height + ypos);
            }
            out->endpage(out);
            for(t=0; t<pagenum; t++)  {
                pages[t].page->destroy(pages[t].page);
            }
            pagenum = 0;

            if(one_file_per_page) {
                gfxresult_t*result = out->finish(out);
                out=0;
                char buf[1024];
                sprintf(buf, outputname, pagenr);
                if(result->save(result, buf) < 0) {
                    return 1;
                }
                result->destroy(result);
                result=0;
                out = create_output_device();;
                pdf->prepare(pdf, out);
                msg("<notice> Writing SWF file %s", buf);
            }
        }
    }

    if(one_file_per_page) {
        // remove empty device
        gfxresult_t*result = out->finish(out);
        out=0;
        result->destroy(result);
        result=0;
    } else {
        gfxresult_t*result = out->finish(out);
        msg("<notice> Writing SWF file %s", outputname);
        if(result->save(result, outputname) < 0) {
            exit(1);
        }
        int width = (int)(ptroff_t)result->get(result, "width");
        int height = (int)(ptroff_t)result->get(result, "height");
        result->destroy(result);
        result=0;

        if(preloader || viewer) {
            const char*zip = "";
            if(zlib) {
                zip = "-z";
            }
            if(!preloader && viewer) {
                systemf("swfcombine %s -X %d -Y %d \"%s\" viewport=\"%s\" -o \"%s\"",zip,width,height,
                        viewer, outputname, outputname);
                if(!system_quiet)
                    printf("\n");
            }
            if(preloader && !viewer) {
                msg("<warning> --preloader option without --viewer option doesn't make very much sense.");
                ret = systemf("swfcombine %s -Y %d -X %d %s/PreLoaderTemplate.swf loader=\"%s\" movie=\"%s\" -o \"%s\"",zip,width,height,
                              SWFDIR, preloader, outputname, outputname);
                if(!system_quiet)
                    printf("\n");
            }
            if(preloader && viewer) {
#ifdef HAVE_MKSTEMP
                char tmpname[] = "__swf__XXXXXX";
                mkstemp(tmpname);
#else
                char*tmpname = "__tmp__.swf";
#endif
                systemf("swfcombine \"%s\" viewport=%s -o %s",
                        viewer, outputname, tmpname);
                systemf("swfcombine %s -X %d -Y %d -r %f %s/PreLoaderTemplate.swf loader=%s movie=%s -o \"%s\"",zip,width,height,
                        getRate(preloader), SWFDIR, preloader, tmpname, outputname);
                systemf("rm %s", tmpname);
            }
        }
    }

    pdf->destroy(pdf);
    driver->destroy(driver);


    /* free global parameters */
    p = device_config;
    while(p) {
        parameter_t*next = p->next;
        if(p->name) free((void*)p->name);
        p->name = 0;
        if(p->value) free((void*)p->value);
        p->value =0;
        p->next = 0;
        free(p);
        p = next;
    }
    if(filters) {
        free(filters);
    }

    return 0;
}
Example #4
0
void
__cdecl main(
    int argc,
    char *argv[]
    )
{
    NTSTATUS status;
    OBJECT_ATTRIBUTES ObjectAttributes;
    IO_STATUS_BLOCK  IoStatus;
    HANDLE  FileHandle;
    HANDLE  KeyHandle;

    //
    // Process args
    //

    KeyPath.MaximumLength = WORK_SIZE;
    KeyPath.Length = 0L;
    KeyPath.Buffer = &(KeyPathBuffer[0]);

    FileName.MaximumLength = WORK_SIZE;
    FileName.Length = 0L;
    FileName.Buffer = &(FileNameBuffer[0]);

    processargs(argc, argv);


    //
    // Set up and open FileName
    //

    printf("rtrestor: starting\n");

    InitializeObjectAttributes(
        &ObjectAttributes,
        &FileName,
        0,
        (HANDLE)NULL,
        NULL
        );
    ObjectAttributes.Attributes |= OBJ_CASE_INSENSITIVE;

    status = NtCreateFile(
                &FileHandle,
                GENERIC_READ | SYNCHRONIZE,
                &ObjectAttributes,
                &IoStatus,
                0,                                      // AllocationSize
                FILE_ATTRIBUTE_NORMAL,
                0,                                      // ShareAccess
                FILE_OPEN_IF,
                FILE_SYNCHRONOUS_IO_NONALERT,
                NULL,                                   // EaBuffer
                0                                       // EaLength
                );

    if (!NT_SUCCESS(status)) {
        printf("rtsave: file open failed status = %08lx\n", status);
        exit(1);
    }

    InitializeObjectAttributes(
        &ObjectAttributes,
        &KeyPath,
        0,
        (HANDLE)NULL,
        NULL
        );
    ObjectAttributes.Attributes |= OBJ_CASE_INSENSITIVE;

    status = NtOpenKey(
                &KeyHandle,
                MAXIMUM_ALLOWED,
                &ObjectAttributes
                );
    if (!NT_SUCCESS(status)) {
        printf("rtsave: key open failed status = %08lx\n", status);
        exit(1);
    }

    status = NtRestoreKey(KeyHandle, FileHandle);

    if (!NT_SUCCESS(status)) {
        printf("rtrestor: NtRestorKey failed status = %08lx\n", status);
        exit(1);
    }

    printf("rtsave: success\n");
    exit(0);
}