X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/1709795fee167cc2d2d423df0161e7963376b910..HEAD:/unix/uxprint.c diff --git a/unix/uxprint.c b/unix/uxprint.c index 6558317b..37241007 100644 --- a/unix/uxprint.c +++ b/unix/uxprint.c @@ -3,22 +3,56 @@ */ #include +#include #include "putty.h" +struct printer_job_tag { + FILE *fp; +}; + printer_job *printer_start_job(char *printer) { - /* FIXME: open pipe to lpr */ - return NULL; + printer_job *ret = snew(printer_job); + /* + * On Unix, we treat the printer string as the name of a + * command to pipe to - typically lpr, of course. + */ + ret->fp = popen(printer, "w"); + if (!ret->fp) { + sfree(ret); + ret = NULL; + } + return ret; } void printer_job_data(printer_job *pj, void *data, int len) { - /* FIXME: receive a pipe to lpr, write things to it */ - assert(!"We shouldn't get here"); + if (!pj) + return; + + if (fwrite(data, 1, len, pj->fp) < len) + /* ignore */; } void printer_finish_job(printer_job *pj) { - /* FIXME: receive a pipe to lpr, close it */ - assert(!"We shouldn't get here either"); + if (!pj) + return; + + pclose(pj->fp); + sfree(pj); +} + +/* + * There's no sensible way to enumerate printers under Unix, since + * practically any valid Unix command is a valid printer :-) So + * these are useless stub functions, and uxcfg.c will disable the + * drop-down list in the printer configurer. + */ +printer_enum *printer_start_enum(int *nprinters_ptr) { + *nprinters_ptr = 0; + return NULL; +} +char *printer_get_name(printer_enum *pe, int i) { return NULL; } +void printer_finish_enum(printer_enum *pe) { }