+ * ANSI printing routines.
+ */
+static void term_print_setup(void)
+{
+ bufchain_clear(&printer_buf);
+ print_job = printer_start_job(cfg.printer);
+}
+static void term_print_flush(void)
+{
+ void *data;
+ int len;
+ int size;
+ while ((size = bufchain_size(&printer_buf)) > 5) {
+ bufchain_prefix(&printer_buf, &data, &len);
+ if (len > size-5)
+ len = size-5;
+ printer_job_data(print_job, data, len);
+ bufchain_consume(&printer_buf, len);
+ }
+}
+static void term_print_finish(void)
+{
+ void *data;
+ int len, size;
+ char c;
+
+ if (!printing && !only_printing)
+ return; /* we need do nothing */
+
+ term_print_flush();
+ while ((size = bufchain_size(&printer_buf)) > 0) {
+ bufchain_prefix(&printer_buf, &data, &len);
+ c = *(char *)data;
+ if (c == '\033' || c == '\233') {
+ bufchain_consume(&printer_buf, size);
+ break;
+ } else {
+ printer_job_data(print_job, &c, 1);
+ bufchain_consume(&printer_buf, 1);
+ }
+ }
+ printer_finish_job(print_job);
+ print_job = NULL;
+ printing = only_printing = FALSE;
+}
+
+/*