void PreparePS(Display *display, Window window, float scale, int box, int header) { char command[80]; XWindowAttributes info; char *printer; char *pcom; current_gray = -1; current_line = -1; XGetWindowAttributes(display, window, &info); if (file_output) { if ((PSfp = fopen(ps_filename, ps_filemode)) == NULL) { fprintf(stderr, "unable to open '%s'\n", ps_filename); return; } } else { if ((printer = (char *)getenv("PRINTER")) == NULL) { printer = "lw"; } if ((pcom = (char *)getenv("PRINTCOMMAND")) == NULL) { sprintf(command, "lpr -h -P%s", printer); pcom = command; } if ((PSfp = popen(pcom, "w")) == NULL) { fprintf(stderr, "unable to execute '%s'\n", command); return; } } PSHeader(&info, scale, box, header); output_flag = PSOUT; }
int C_PrintProc(ClientData cl, Tcl_Interp *interp, int argc, char **argv) { char fileType, printMode; WindowType theWindow = theWindowArray[atoi(argv[1])]; char **xpmData; fileType = argv[4][0]; printMode = argv[5][0]; switch(fileType) { case 'x': #ifdef XPMENABLED if(argv[6][0]!='n' && (!Is_Trace_On(theWindow) || Is_X_AutoRescale(theWindow) || Is_Y_AutoRescale(theWindow))) { Iconic_Before(theWindow); C_RefreshGraphicsProc(NULL,NULL,1,argv); } XpmWriteFileFromPixmap(theDisplay,argv[2],theWindow->pixmap_buffer, 0,NULL); #endif break; case 'p': #ifdef XPMENABLED if(argv[4][1]=='n') /* png */ { if(argv[6][0]!='n' && (!Is_Trace_On(theWindow) || Is_X_AutoRescale(theWindow) || Is_Y_AutoRescale(theWindow))) { Iconic_Before(theWindow); C_RefreshGraphicsProc(NULL,NULL,1,argv); } XpmWriteFileFromPixmap(theDisplay,argv[2],theWindow->pixmap_buffer,0,0); { char name[512]; char name2[512]; char buffer[512]; int i; sprintf(name,"%s",argv[2]); i = strlen(name); if(i<5) return 0; /* invalid name */ sprintf(name+i-4,"%s",".xpm"); sprintf(name2,"%s",name); sprintf(name2+i-4,"%s",".png"); sprintf(buffer,"mv %s %s;convert %s %s; rm %s",name2,name,name,name2,name); system(buffer); break; } } #else break; #endif /* XPMENABLED */ case 'e': if(access(argv[2],F_OK) || printMode=='o' || printMode=='c') PSHeader(argv[2]); (*(theWindow->print_function)) (theWindow, argv[2], argv[3]); break; case 'a': (*(theWindow->ascii_print_function)) (theWindow, argv[2], printMode); break; case 'b': (*(theWindow->xgrafix_print_function)) (theWindow, argv[2], printMode); break; case 'g': #ifdef XPMENABLED if(argv[6][0]!='n' && (!Is_Trace_On(theWindow) || Is_X_AutoRescale(theWindow) || Is_Y_AutoRescale(theWindow))) { Iconic_Before(theWindow); C_RefreshGraphicsProc(NULL,NULL,1,argv); } XpmCreateDataFromPixmap(theDisplay, &xpmData, theWindow->pixmap_buffer, 0,NULL); XpmToGif(xpmData,argv[2]); XpmFree(xpmData); #endif break; } return TCL_OK; }