+
+ for (bufptr = buffer, valptr = attr->value; *valptr; valptr ++)
+ {
+ /*
+ * Log the query code, breaking at newlines...
+ */
+
+ if (*valptr == '\n')
+ {
+ *bufptr = '\0';
+ fprintf(stderr, "DEBUG: %s\\n\n", buffer);
+ bufptr = buffer;
+ }
+ else if (*valptr < ' ')
+ {
+ if (bufptr >= (buffer + sizeof(buffer) - 4))
+ {
+ *bufptr = '\0';
+ fprintf(stderr, "DEBUG: %s\n", buffer);
+ bufptr = buffer;
+ }
+
+ if (*valptr == '\r')
+ {
+ *bufptr++ = '\\';
+ *bufptr++ = 'r';
+ }
+ else if (*valptr == '\t')
+ {
+ *bufptr++ = '\\';
+ *bufptr++ = 't';
+ }
+ else
+ {
+ *bufptr++ = '\\';
+ *bufptr++ = '0' + ((*valptr / 64) & 7);
+ *bufptr++ = '0' + ((*valptr / 8) & 7);
+ *bufptr++ = '0' + (*valptr & 7);
+ }
+ }
+ else
+ {
+ if (bufptr >= (buffer + sizeof(buffer) - 1))
+ {
+ *bufptr = '\0';
+ fprintf(stderr, "DEBUG: %s\n", buffer);
+ bufptr = buffer;
+ }
+
+ *bufptr++ = *valptr;
+ }
+ }
+
+ if (bufptr > buffer)
+ {
+ *bufptr = '\0';
+ fprintf(stderr, "DEBUG: %s\n", buffer);
+ }
+
+ printf("/cups_query_keyword (?%s) def\n", option->keyword);
+ /* Set keyword for error reporting */
+ fputs("{ (", stdout);
+ for (valptr = attr->value; *valptr; valptr ++)
+ {
+ if (*valptr == '(' || *valptr == ')' || *valptr == '\\')
+ putchar('\\');
+ putchar(*valptr);
+ }
+ fputs(") cvx exec } stopped { cups_handleerror } if clear\n", stdout);
+ /* Send query code */