From: mike AT mbsun DOT mlb DOT org (Mike Bernson) Subject: Printing raw data to printer 20 Jun 1997 23:59:55 -0700 Approved: cygnus DOT gnu-win32 AT cygnus DOT com Distribution: cygnus Message-ID: <33AB73B2.42877E5C.cygnus.gnu-win32@mbsun.mlb.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------64880EEB4DAA423A33590565" X-Mailer: Mozilla 3.01 (X11; I; BSD/OS 3.0 i386) Original-To: gnu-win32 AT cygnus DOT com Original-Sender: owner-gnu-win32 AT cygnus DOT com This is a multi-part message in MIME format. --------------64880EEB4DAA423A33590565 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit The follow code running under GNUWIN32 print small files ok but as the file size get close to 1meg it start GPF or hanging. Sometime it prints fine and other time it create a problem. I have played with it for a while and can seem to get printer raw data working. I am running WIN95. Am i missing something. Missing something in the WIN32 API or does the code just not work with gnuwin32 stuff. Can somepoint me a place that explain how this might be done better. --------------64880EEB4DAA423A33590565 Content-Type: text/plain; charset=us-ascii; name="splprint.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="splprint.c" #include WINBOOL WINAPI OpenPrinterA(LPTSTR, LPHANDLE, LPVOID); WINBOOL WINAPI ClosePrinter(HANDLE); DWORD WINAPI StartDocPrinterA(HANDLE, DWORD, LPBYTE); WINBOOL WINAPI EndDocPrinter(HANDLE); WINBOOL WINAPI StartPagePrinter(HANDLE); WINBOOL WINAPI EndPagePrinter(HANDLE); WINBOOL WINAPI WritePrinter(HANDLE, LPVOID, DWORD, LPDWORD); #include "tol.h" #include #include #include #include WINBOOL CALLBACK printer_abort(HANDLE printer, int error) { fprintf(stderr, "Printer abort called\n"); return True; } void static print_file(char *file_name) { static char print_info[80]; char *print_device; char *print_port; char *print_driver; char buffer[8192]; int size; DWORD tmp; int total = 0; HANDLE print_handle; DOC_INFO_1 print_doc_info; int input_fd; fprintf(stderr, "printing file %s\n", file_name); /* * Open the file that we are about to spool to the printer */ if ((input_fd = open(file_name, O_RDONLY | O_BINARY)) < 0) { fprintf(stderr,"Open error on %s (%s)", file_name,strerror(errno)); return; } /* * Get the default printer,device, and port for windows system */ GetProfileString("windows", "device", ",,,", print_info, 80); print_device = strtok(print_info, ","); print_driver = strtok(NULP, ","); print_port = strtok(NULP, ","); if (print_device == NULL || print_driver == NULL || print_port == NULL) { log_it("splprint: No default printer found (%s)", print_info); return; } if (OpenPrinterA(print_device, &print_handle, NULP) == 0) { fprintf(stderr, "Can not open Printer\n"); return; } if (!SetAbortProc(print_handle, printer_abort)) { fprintf(stderr, "Can not install printer abort\n"); ClosePrinter(print_handle); return; } memset(&print_doc_info, 0, sizeof(print_doc_info)); print_doc_info.pDocName = "mico"; print_doc_info.pOutputFile = NULL; print_doc_info.pDatatype = "RAW"; if (!StartDocPrinterA(print_handle, 1, (LPSTR)&print_doc_info)) { fprintf(stderr, "Could not create print job\n"); ClosePrinter(print_handle); return; } if (!StartPagePrinter(print_handle)) { fprintf(stderr, "Could not start page on printer\n"); EndDocPrinter(print_handle); ClosePrinter(print_handle); return; } /* * Loop copying data from the file to printer. Keep on * copying data till we hit the end of the file. */ for(;;) { if ((size = read(input_fd, buffer, sizeof(buffer))) <= 0) break; total += size; fprintf(stderr, "%d ", total/1024); if (!WritePrinter(print_handle, buffer, size, &tmp)) { fprintf(stderr, "Not able to write data to printer\n"); EndPagePrinter(print_handle); EndDocPrinter(print_handle); ClosePrinter(print_handle); close(input_fd); return; } } if (!EndPagePrinter(print_handle)) { fprintf(stderr, "Can not end printer page\n"); EndDocPrinter(print_handle); ClosePrinter(print_handle); return; } if (!EndDocPrinter(print_handle)) { fprintf(stderr, "Can not end doc on printer\n"); ClosePrinter(print_handle); return; } ClosePrinter(print_handle); close(input_fd); } --------------64880EEB4DAA423A33590565-- - For help on using this list (especially unsubscribing), send a message to "gnu-win32-request AT cygnus DOT com" with one line of text: "help".