Printer support: cfg.printer is assumed to be a Unix command through
[u/mdw/putty] / unix / uxprint.c
index 6558317..387ea28 100644 (file)
@@ -3,22 +3,41 @@
  */
 
 #include <assert.h>
+#include <stdio.h>
 #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);
 }