#include #include "fitz.h" #include "mupdf.h" #include "muxps.h" #include "pdfapp.h" static char Title[96]; static char * filename = "/hd0/1/yand.pdf"; static pdfapp_t gapp; void f65(unsigned x, unsigned y, unsigned w, unsigned h, char *d) { asm ("nop"::"c"(w*65536+h), "d"(x*65536+y), "b"(d)); asm ("xor %eax, %eax"); asm ("movl %eax, %ebp"); asm ("pushl $32"); asm ("popl %esi"); asm ("int $0x40"::"a"(65)); } struct blit_call { int dstx; int dsty; int w; int h; int srcx; int srcy; int srcw; int srch; unsigned char *d; int stride; }; void blit(int dstx, int dsty, int w, int h, int srcx, int srcy,int srcw, int srch, int stride, char *d) { struct blit_call image; image.dstx=dstx; image.dsty=dsty; image.w=w; image.h=h; image.srcx=srcx; image.srcy=srcy; image.srcw=srcw; image.srch=srch; image.stride=stride; image.d=d; asm ("int $0x40"::"a"(73),"b"(0),"c"(&image)); } void winwarn(pdfapp_t *app, char *msg) { fprintf(stderr, "mupdf: %s\n", msg); } void winerror(pdfapp_t *app, fz_error error) { fz_catch(error, "aborting"); exit(1); } char *winpassword(pdfapp_t *app, char *filename) { char *r = ""; return r; } void wincursor(pdfapp_t *app, int curs) { } void wintitle(pdfapp_t *app, char *s) { sprintf(Title,"uPDF: %s", s); } void winhelp(pdfapp_t *app) { } void winresize(pdfapp_t *app, int w, int h) { //here should be something!!! } void windocopy(pdfapp_t *app) { } void winreloadfile(pdfapp_t *app) { pdfapp_close(app); pdfapp_open(app, filename, 0, 1); } void winopenuri(pdfapp_t *app, char *buf) { /* here can be browser! char *browser = getenv("BROWSER"); if (!browser) browser = "open"; if (fork() == 0) execlp(browser, browser, buf, (char*)0); * */ } void winclose(pdfapp_t *app) { pdfapp_close(&gapp); __menuet__sys_exit(); } void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c) { asm ("int $0x40"::"a"(13), "b"(x*65536+w), "c"(y*65536+h), "d"(c)); } static void winblit(pdfapp_t *app) { char yoba[32]; int x0 = gapp.panx; int y0 = gapp.pany; int x1 = gapp.panx + gapp.image->w; int y1 = gapp.pany + gapp.image->h; sprintf(yoba,"Posx: %d, posy: %d", x0, y0); __menuet__debug_out(yoba); __menuet__debug_out(" Window blit\n"); /* XSetForeground(xdpy, xgc, xbgcolor.pixel); fillrect(0, 0, x0, gapp.winh); fillrect(x1, 0, gapp.winw - x1, gapp.winh); fillrect(0, 0, gapp.winw, y0); fillrect(0, y1, gapp.winw, gapp.winh - y1);*/ /* kol_paint_bar(0, 0, x0, gapp.winh, 0xFFFFFF); kol_paint_bar(x1, 0, gapp.winw - x1, gapp.winh, 0xFFFFFF); kol_paint_bar(0, 0, gapp.winw, y0, 0xFFFFFF); kol_paint_bar(0, y1, gapp.winw, gapp.winh - y1, 0xFFFFFF);*/ /*XSetForeground(xdpy, xgc, xshcolor.pixel); fillrect(x0+2, y1, gapp.image->w, 2); fillrect(x1, y0+2, 2, gapp.image->h);*/ if (gapp.image->n == 4) /*ximage_blit(xwin, xgc, x0, y0, gapp.image->samples, 0, 0, gapp.image->w, gapp.image->h, gapp.image->w * gapp.image->n);*/ // f65(x0,y0+32,gapp.image->w,gapp.image->h,gapp.image->samples); { int i = gapp.image->w*gapp.image->h; int tmp; unsigned char *color = malloc(i*4); if (color != NULL) { unsigned char *s = gapp.image->samples; unsigned char *d = color; for (; i > 0 ; i--) { d[0]=*s++; d[1]=*s++; d[2] = *s++; d[3] = *s++; tmp=d[0]; d[0]=d[2]; d[2]=tmp; d += 4; } blit(6, 24, 588, 370, x0, y0,gapp.image->w, gapp.image->h, gapp.image->w * gapp.image->n, color); free(color); } } else if (gapp.image->n == 2) { int i = gapp.image->w*gapp.image->h; unsigned char *color = malloc(i*4); if (color != NULL) { unsigned char *s = gapp.image->samples; unsigned char *d = color; for (; i > 0 ; i--) { d[2] = d[1] = d[0] = *s++; d[3] = *s++; d += 4; } /*ximage_blit(xwin, xgc, x0, y0, color, 0, 0, gapp.image->w, gapp.image->h, gapp.image->w * 4); */ //f65(x0,y0,gapp.image->w,gapp.image->h,color); blit(6, 24, 588, 370, x0, y0,gapp.image->w, gapp.image->h, gapp.image->w * 4, color); free(color); } } } void paint(void) { __menuet__window_redraw(1); __menuet__define_window(10,10,600,400,0x34CFCFCF,0x800000FF,Title); // __menuet__write_text(3,3,0xFFFFFF,Title,strlen(Title)); winblit(&gapp); __menuet__window_redraw(2); } void winrepaint(pdfapp_t *app) { paint(); } void winrepaintsearch(pdfapp_t *app) { paint(); //search! } int main (void) { char* original_command_line = *(char**)0x1C; __menuet__debug_out(original_command_line); char buf[128]; int resolution = 72; int pageno = 1; __menuet__debug_out("\nStarted\n"); fz_accelerate(); __menuet__debug_out("PDF init\n"); pdfapp_init(&gapp); gapp.scrw = 600; gapp.scrh = 400; gapp.resolution = resolution; gapp.pageno = pageno; __menuet__debug_out("PDF Open\n"); pdfapp_open(&gapp, original_command_line, 0, 0); __menuet__debug_out("PDF Opened\n"); int i; __menuet__debug_out("Inital paint\n"); pdfapp_onresize(&gapp, 600, 400); paint(); for(;;) { i=__menuet__wait_for_event(); if (gapp.image) { gapp.shrinkwrap = 0; } switch(i) { case 1: paint(); continue; case 2: buf[0]=__menuet__getkey(); pdfapp_onkey(&gapp, buf[0]); continue; case 3: if(__menuet__get_button_id()==1) __menuet__sys_exit(); continue; } } return 0; }