Пример #1
0
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;
}
Пример #2
0
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;
}