const char* err_string(error_t err ) { error_info_t* inf; if( err == 0 ) return "no error"; if( err > MAX_ERRORS ) { return "UNKNOWN ERROR"; } if( err < 0 ) { return "UNKNOWN ERROR"; } inf = err_info(err); if( inf->std_errno != 0 ) { snprintf(e_string, MAX_E_STRING, "%s:%s %s on %s line %i (%s)", err_code_string(inf->code), inf->msg, inf->object_name, inf->file, inf->line, strerror(inf->std_errno)); } else { snprintf(e_string, MAX_E_STRING, "%s:%s %s on %s line %i", err_code_string(inf->code), inf->msg, inf->object_name, inf->file, inf->line); } return e_string; }
static int sparc_print_page(gx_device_printer *pdev, FILE *prn) { struct lpvi_page lpvipage; struct lpvi_err lpvierr; char *out_buf; int out_size; if (ioctl(fileno(prn),LPVIIOC_GETPAGE,&lpvipage)!=0) { errprintf(pdev->memory, "sparc_print_page: LPVIIOC_GETPAGE failed\n"); return -1; } lpvipage.bitmap_width=gdev_mem_bytes_per_scan_line((gx_device *)pdev); lpvipage.page_width=lpvipage.bitmap_width*8; lpvipage.page_length=pdev->height; lpvipage.resolution = (pdev->x_pixels_per_inch == 300 ? DPI300 : DPI400); if (ioctl(fileno(prn),LPVIIOC_SETPAGE,&lpvipage)!=0) { errprintf(pdev->memory, "sparc_print_page: LPVIIOC_SETPAGE failed\n"); return -1; } out_size=lpvipage.bitmap_width*lpvipage.page_length; out_buf=gs_malloc(pdev->memory, out_size,1,"sparc_print_page: out_buf"); gdev_prn_copy_scan_lines(pdev,0,out_buf,out_size); while (write(fileno(prn),out_buf,out_size)!=out_size) { if (ioctl(fileno(prn),LPVIIOC_GETERR,&lpvierr)!=0) { errprintf(pdev->memory, "sparc_print_page: LPVIIOC_GETERR failed\n"); return -1; } switch (lpvierr.err_type) { case 0: if (warning==0) { errprintf(pdev->memory, "sparc_print_page: Printer Problem with unknown reason..."); dmflush(pdev->memory); warning=1; } sleep(5); break; case ENGWARN: errprintf(pdev->memory, "sparc_print_page: Printer-Warning: %s...", err_code_string(lpvierr.err_code)); dmflush(pdev->memory); warning=1; sleep(5); break; case ENGFATL: errprintf(pdev->memory, "sparc_print_page: Printer-Fatal: %s\n", err_code_string(lpvierr.err_code)); return -1; case EDRVR: errprintf(pdev->memory, "sparc_print_page: Interface/driver error: %s\n", err_code_string(lpvierr.err_code)); return -1; default: errprintf(pdev->memory, "sparc_print_page: Unknown err_type=%d(err_code=%d)\n", lpvierr.err_type,lpvierr.err_code); return -1; } } if (warning==1) { errprintf(pdev->memory, "OK.\n"); warning=0; } gs_free(pdev->memory, out_buf,out_size,1,"sparc_print_page: out_buf"); return 0; }