X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/1709795fee167cc2d2d423df0161e7963376b910..ab0873ab80d0c927315329be0cbeb96bb4ace89a:/unix/uxprint.c diff --git a/unix/uxprint.c b/unix/uxprint.c index 6558317b..387ea28d 100644 --- a/unix/uxprint.c +++ b/unix/uxprint.c @@ -3,22 +3,41 @@ */ #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 = smalloc(sizeof(printer_job)); + /* + * On Unix, we treat cfg.printer as the name of a command to + * pipe to - typically lpr, of course. + */ + ret->fp = popen(cfg.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; + + fwrite(data, 1, len, pj->fp); } 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); }