-*-Text-*-  File: XGP Node: Top Up: (DIR) The XGP spooling system allows queueing to the Xerox Graphics Printer. It is also possible to see a list of all of the pending requests. * Menu: * Normal:: The simplest way to queue a request * Status:: Displaying the queue status: XGP^F * Switches:: Options available in printing the file * Edit:: Input editing commands * Console:: XGP console commands for controlling XGPSPL * Priority:: XGP unspooling priority algorithm explanation * Files:: XGP commands that go in files to be printed * Scan:: The format of ;SCAN files * Misc:: Notes on the XGP's size and resolution, and font files. * XD:: XD is a program that will display XGP files on a TV as they would appear on the XGP. Save time and paper.  File: XGP, Node: NORMAL, Previous: Top, Up: Top, Next: STATUS The XGP queuer accepts file commands, which specify a file to be printed and optionally a font to be used. The general form is: :XGP [;file-command][file-specification][_ fonts-spec-list] :XGP .INFO.;DDT ORDER_20FG A file-command is any one of these: ;LIST prints a text file with default header (time, date, page number appear on every page). ;PLOT prints plot-file of coordinate positions. ;SAMPLE uses the file name as a font file and prints a sample showing what all the characters of the font look like, as well as some examples of typical text. ;SCAN print a "scan" (bit-map) file. For an ordinary file of text and XGP commands, no file command is necessary. Also, switches such as /LIST, etc., can be used instead. file-specification The normal ITS file name, which may be a text-file, plot-file, or scan-file. defaults to local DSK: (i.e. if you are on MC, defaults to MC:), defaults to your (i.e. the default sname for the job). The second filename defaults to XGP if such a file exists; otherwise, it defaults to >. For ;PLOT and ;SCAN the default is PLT or SCN instead. _ fonts-specification Any number of font names or file-specifications delimited by commas that define the fonts to be used. Optional. In general a file is printed as specified by the file-command using the fonts-specification. Switches can also be included in the command to select options or set parameters. They should go after the file specification or after the fonts specification. In addition to the file commands, which are used to print, there are these miscellaneous commands: ;CANCEL qin cancels the request if it has not already started printing. The qin may be obtained via XGP^F Example: :XGP ;CANCEL 14 cancels queue entry 14. If the request has already started printing, you can cancel it by using the ;CANCEL command followed by the ;QUIT command. ;QUIT is like typing ^G on the XGP terminal. The current operation will be interrupted and requeued, unless an attempt has been made to cancel it, in which case the ;QUIT will cause it to be cancelled for real.  File: XGP, Node: STATUS, Previous: NORMAL, Up: Top, Next: Switches Status of XGP queue The XGP^F command to DDT lists the status of the XGP queue. The index number is the QIN(Queue Identification Number) of each request. The QIN may be interpreted as follows: high order char (T, 1, 2 OR 3) --> queue priority class. T is for ;THESIS requests, and 1, 2, and 3 refer to successively lower priority classes. low order digits --> position of the request in that queue. 110 follows 19. The requests are listed in their printing order within their queue priority class, and each priority class is listed in its priority order. XGP^F also reports the physical status of the XGP, indicates which request is printing currently, indicates what the current next queue request is (normally, it will be printed next, unless a higher priority request comes in ahead of it), and if a high priority request is in the queues.  File: XGP, Node: SWITCHES, Previous: Status, Up: Top, Next: EDIT Switches and Modifier Commands There are many parameters in the XGP printing process which affect how a file is printed. These can be specified in :XGP with switches, which are included in with the filename, or, if not using JCL, with modifier commands (an older, less obvious mechanism). The syntax of a switch is "/" followed by the switch name, or followed by a ":" and the argument of the command. The argument, or the switch name if there is no argument, is terminated by a space, slash, "_", or the end of the line. Examples: FOO BAR/SKIP:10_20FG UGH BLETCH_25FG,30VR/DELETE FOO SCN/SCAN (or just FOO/SCAN) Here is a list of switches. For switches which take arguments, the default value of the parameter (the value used if the switch is NOT specified) appears in brackets. /AUTCUT:n [1] If n is nonzero, automatically cut between pages /BOTMAR:n [124] Use n points of bottom margin /DELETE or /D Delete the text file after printing /FFCUT:n [0] If n is nonzero, cut only on form feeds /LFTMAR:n [200] Use n points of left margin. Note that there is no right margin. /LIST or /L Print text file with default header (time, date, page number) /LOWPRI Give this queue request low priority. This forces the request into queue 3, where large files normally go. /LSP:n [31] Use n points per line (includes font height and points between lines) /PLOT Treat this file as a plotter file and plot it. /PRIORITY Give this queue request high priority. This will force the file to be printed next by the XGP spooler regardless of other priority considerations. Only ONE request may be in the high priority queue at a time. This is intended only for critical queues which must be printed immediately. Using this mode without a good reason is considered to be anti-social. /RESET Reset value of commands to default. Shouldn't be needed. /ROTATE Rotate bit map of points that are converted into scan line /SAMPLE Assume this file is a font, and print a sample of it. /SCAN Use this file as a bit-map drawing. /SIZE:n [11] Use page size of n inches /SKIP:n [0] Skip n pages before printing /SNDFNT Send font to PDP-11 /SQUISH Purge useless characters from font /TEST Test XGP by sending a CONTROL-C and forcing the buffer /THESIS Specifies that thesis paper should be used for printing this file. Causes the request to go in the T queue, so that before printing it, the XGP will ask for thesis paper to be mounted. *Note Thesis: Console, for how the XGP spooler handles requests to print on thesis paper. /TOPMAR:n [128] Use n points of top margin /TXTCMD:n [-1] If n is nonzero, read specification commands from text file /VSP:n [6] Use n points between lines. What this really means is that n is added to the height of font 0 to get the value of the LSP parameter. Whether this is winning, I'm not certain. /X0:n [1100] Use n as initial x-coordinate /Y0:n [-180] Use n as initial y-coordinate Another way to specify parameters is with modifier commands. A modifier command is a line which starts with a semicolon, just as a file command does; the distinction is based on which command you use. The syntax of a modifier command is ";" followed by the command name (the same as a switch name), followed optionally by a space and an argument. Each modifier command takes its own line. Examples: ;SKIP 19 ;DELETE ;SCAN Each modifier command applies only to the very next file command, after which all specifications are reset to their default settings. Modifier commands are not followed by a prompt ("#"); only file commands are. There is no way to give modifier commands in JCL; you must use switches instead. Note that ;LIST, ;PLOT, ;PRIORITY, ;SAMPLE, ;SCAN, ;THESIS are file commands if followed by a filename; otherwise, they are modifier commands, but with the same semantics, so that ;LIST FOO and ;LIST FOO mean the same thing. There are a couple of extra modifier commands that can't be given as switches. This is because their arguments are long and complicated. It is because of them that modifier commands still exist: ;HEADER text Use text as header. ;KSET font,font... Use the specified fonts for printing the file. ;KSUBSET font# bits bits bits bits says which characters of that font are needed. *Note KSUBSET: FILES.  File: XGP, Node: EDIT, Previous: Switches, Up: Top, Next: CONSOLE Input Editing Commands ^C like CR, but XQUEUE commits suicide after this line if no error is encountered. ^D flush entire input buffer ^H same as RUBOUT ^L re-display the buffer ^M terminate current line, and queue buffer if line was a file command (also clear buffer) ^Q quote the next character in a file specification ^U kill currrent line  File: XGP, Node: CONSOLE, Previous: EDIT, Up: Top, Next: PRIORITY XGP Console Messages and Questions Requeue remained of file? When a file is aborted from the XGP console with the ^G command, the unspooler allows you to choose between cancelling the request and delaying it. Type "Y" to delay the request, "N" to cancel it. Waiting for corrective action. Type any character to continue When the XGP status lights are in their normal states as marked next to them, and the PDP11 is running happily, type any character on the XGP console to resume operation. If the PDP11 was not running, you should follow the procedure written on a sheet of paper taped to the PDP11 for reloading and restarting it. Mount thesis forms in the XGP When the spooler decides that it is time to print a request for which /THESIS was specified (from the T queue), this message is typed out. Install XGP paper and type a space to print the thesis output. Or, if you have just queued some non-thesis output, you can type ^G to say that you have not changed the paper and non-thesis requests should be printed. But if you type ^G and there are only thesis requests in the queue, the spooler will just ask again for thesis paper. If you do change the paper and type space, the XGP will print /THESIS requests until there aren't any more in the queue. Mount ordinary forms in the XGP type any character when ready (^G to refuse) After printing the last thesis paper request, when about to print a file on normal paper, the XGP will type this message. You should mount normal paper and type a space. If you wish instead to have additional files printed on thesis paper, queue them (with /THESIS) and type a ^G on the XGP console. This says that you have NOT changed the paper and the T queue should be checked again. FOO AI - 23:01:40 03/25/77 1842 AI: COMMON; FOO XGP is printed when the unspooler begins processing a queue file. The last such message will normally show which queue entry was being processed when lossage occurs. XGP Console Commands ^G Current request stops printing. Asks whether to defer the rest of it until later (the alternative is to cancel it). ^X Enter maintenance mode, in which commands are accepted from the XGP console instead of the queue of spooled requests. ^X can be typed while a request is printing. This does not abort the request, it just delays the effect of the ^X until after the request is finished. To abort a request and enter maintenance mode, type ^X and then ^G. ^X can also be typed when the unspooler is asking a question; it will have its normal effect, but will NOT answer the question. So you must follow it with a "Y" or "N". Similarly, ^X typed when the unspooler is "waiting for corrective action" will enter maintenance mode but not make it stop waiting; another character is needed to do that, at which point maintenance mode will be entered. ^X is also used to get out of maintenance mode. It will not take effect until the end of a line, so if the spooler is just waiting in maintenance mode you must type ^X and a Return. Two ^X's typed in succession before the spooler can really notice them will just cancel each other out! ^X is not the thing to use for printing on thesis paper. The /THESIS switch is for that. Maintenance Mode Commands ;HELP Type list of commands on XGP console ;HEIGHT Type height of characters ;KILL Kill XGP spooler (for debugging purposes only) ;NLINES Type number of lines per page ;SHOW Type value of selected commands on the XGP console ;VERSE Type name and version number of queuer on XGP console All file commands and specification commands may also be used. Switches in filenames are not allowed, since they work in :XGP by being converted to specification commands.  File: XGP, Node: PRIORITY, Previous: CONSOLE, Up: Top, Next: FILES Priority Algorithm Priority for queued requests is determined on the basis of file size and user group. Files larger than 30 blocks are put into queue 3, the lowest priority queue; files between 5 blocks and 30 blocks are put into queue 2, and files lower than 5 blocks go into queue 1. In addition, AI Lab people never go into queue 2; an AI request that would normally go into queue 2 goes into queue 1 instead. The queues are unloaded with the numeric queues having absolute priority over the thesis queue, although once thesis forms are mounted all thesis requests are printed before reentering the numeric queues. Queue 1 and queue 2 have absolute priority over queue 3. Queue 1 is drained in preference to queue 2 by a factor of 5 to 1 iff the oldest queue 2 request pending in the queues is older than the oldest queue 1 request. Otherwise, queue 1 has absolute priority over queue 2. The user group priorities were implemented as a result of an administrative decision. It is best for everybody concerned if people work within the system instead of trying to defeat it; since under the current algorithm, too many requests in queue 1 will simply end up degrading performance for all users concerned. If a request is of sufficient importance to justify higher priority than the system would otherwise assign it; then the ;PRIORITY option should be used.  File: XGP, Node: FILES, Previous: PRIORITY, Up: Top, Next: SCAN Special XGP commands that you can put in a file to be printed There are two types of commands that can go in files printed on the XGP, in addition to ordinary text. First, there are semicolon-commands like the XGP queueing program's options. Second, there are the short sequences of characters used for font switching, underlining, etc. The first page of the file may contain "modifier commands", such as ";KSET" to specify the fonts, or ";VSP" to specify the vertical spacing. *Note Modifiers: Switches, for a description of modifier commands, the semicolon forms of switches. Each command must be on a separate line, with the semicolon at the beginning of the line. Unrecognized commands are ignored, in case the file simply happened to contain lines starting with a semicolon. A nonempty line which does not start with a semicolon indicates that there are no more commands. Unless you specify otherwise, the semicolon commands will be printed just like all the rest of the page. To avoid that, reserve the first page for semicolon commands only, and include a ";SKIP 1" among them, so that the first page will not be printed at all. A command that might be useful in a text file is ;KSUBSET. This command tells the XGP unspooler that only certain characters of a certain font are actually needed. The same effect can be obtained using ;SQUISH, automatically, but ;KSUBSET allows the program generating the text file to do the squishing itself and avoid wasting the XGP time. ;KSUBSET's syntax looks like this: ;KSUBSET The font number is followed by a 128-bit bit stream, divided into four groups of 32 bits each; each group s represented as an octal number. The bits correspond to the ASCII characters, from ^@ through rubout, in that order. A bit should be 1 to indicate that the character is needed. Once printing is under way, all characters except ^@, Rubout, Backspace, Tab, Return, Linefeed and Formfeed are printed as defined in the current font (or ignored, if not defined). ^@ is ignored. Rubout starts an escape sequence (see below). Here is what the other (formatting) characters do: Backspace spaces to the left the width of one space in the current font, including inter-character spacing. TAB produces a column select to the column which is at least the width of a blank to the right of the current column position, and some multiple of 8 blank widths to the right of the left margin. (this computation of the width includes the inter character spacing) LF activates the current text line. The current text will be queued to printed. This line will be printed at a vertical location such that the distance between the baselines of of it and the preceeding line is equal to the vertical spacing parameter, unless this would cause the subscripts of the former line to overlap vertically with the superscripts of this line. It will then be pushed down to make this not the case. FF, like LF, activates the text. In addition, FF causes a page eject after the current text line is printed. FF also sets the default Y position to the first line below the top of page margin on the new page. The XGP will automatically form feed when the next text line would place characters below the bottom margin. Sequential form feeds will increment the page number but will otherwise be ignored. CR causes a column select to the current left margin to be generated. This can be used to produce overprinting. Rubout is the "escape character" for command sequences which can go anywhere in the file (as opposed to semicolon commands, which go only at the beginning). First of all, a rubout can be used to quote a character which normally has some sort of special significance. The characters which can be quoted include ^@ (normally ignored), Rubout (normally the escape character), and Backspace, Tab, Return, Linefeed and Formfeed (normally formatting characters. When quoted, they print whatever character is in the selected font for them). A rubout followed by ^A, ^B, ^C or ^D starts a special command sequence. ^A is known as "XGP Escape 1", ^B is "XGP Escape 2", ^C is "XGP Escape 3", and ^D is "XGP Escape 4". The meaning of Rubout followed by codes 5 through 10, 13, and 16 through 37, is undefined but reserved for future use. XGP ESCAPE 1 (177 001) causes the next 7 bits to be read as a special operation code. The following codes are implemented: 0-17 Font select. The code, 0 to 17, is taken as the font identification number of the font to use. 17-37 Reserved for future use. 40 XGP Column Selector The next 14 bits are taken as the x-position to print at next. (The intention is to allow arbitrary width spaces for text justification.) 41 XGP Underscore The next 7 bits are taken as the scan-line number on which to underscore. It is taken as a 2's complement increment to the base line. Zero is on the baseline, positive bytes are down from it. Underscores outside the range of the other characters on the line will be ignored. The next 14 bits are taken as the length of the underscore. 42 Line space. This does a line feed and then takes the byte as the number of lines between this line's baseline and the baeline of the following line. 43 Base-line adjust. The next 7 bits are taken in two's complement as the base-line adjustment to the current font. The adjustment sticks until reset by another adjust command or a font select. The intention is to allow a font to be used for subscripts and superscripts. (Increment baseline for superscript, decrement for subscript). ** 44 Print the paper page number. The paper page number is set to 1 by a form feed. It is incremented each time the paper is cut. The decimal value of this count is printed. ** 45 Accept heading text. The next byte is a count of bytes to follow. Those bytes will be read into the heading line. When that count is exhausted, the heading line will be printed. If a line feed or line space command is given that would cause text to be printed below the current text area, a form feed is inserted by the XGP and if a heading is defined, it will be printed. 46 Start Underline. Set the left end of an underline. See Stop Underline. 47 Stop Underline. The next byte is the scan line on which to write the underline (same as XGP Underscore). The extent of the underscore is defined by this command and Start Underline. If this command is not preceded by a Start Underline, it will underline from the left margin. Beware of column selects. No underline will happen until this command is given. 50 Takes the next byte as the intercharacter spacing This is reset to zero at the end of each line. 51 Variable width underline. The next byte is the thickness in scan lines to use for underscoring. The following byte specifies the scan line to use for the top scan line of the underscoring (same as XGP Underscore). Otherwise, this command is the same as XGP Stop Underline. 52 Relative baseline adjust. This command is like XGP Base-line adjust, except that the following byte is interpreted as a signed increment which is added to the previous value of the baseline adjustment. This command can be used repeatedly to arrive at an arbitrary absolute baseline adjustment. 53 Relative XGP Underscore Exactly like XGP Underscore, but the scan-line number to underscore is relative to the adjusted baseline. The first 7 bits are taken as the scan-line number on which to underscore. It is taken as a 2's complement increment to the adjusted base line. Zero is on the adjusted baseline, positive bytes are down from it. The next 14 bits are taken as the length of the underscore. XGP ESCAPE 2 (177 002) causes the next 7 bits to be taken as the column increment. This quantity is signed: 0-77 are positive increments 100 to 177 are negative increments (100  -100, 177  -1). XGP ESCAPE 3 (177 003) causes the next 2 bytes to be taken as the scan line number on which to start this text line. Scan line 0 is the first scan line on the page (immediately following the cut). The topmost scanline of the present text line will be placed on the scan line indicated in this command. ** XGP ESCAPE 4 (177 004). This escape is used to specify a vector. It is followed by 11 bytes describing the vector: 2 bytes Y0 Scan line number of first line of vector. 2 bytes X0 Column position of left edge of first line of the vector. 3 bytes DX Delta X. 1 bit of sign; 11 bits of integer; 9 bits of fraction. 2 bytes N The number of scan lines on which this vector is visible. 2 bytes W The column width of each scan-line. The XGP service must be presented with vectors sorted by ascendending values of Y0. If the vectors are not sorted, the output will be wrong.  File: XGP, Node: SCAN, Previous: FILES, Up: Top, Next: MISC Format for XGP SCN files: Files consist of sequential lines on the XGP. Each line consists of a header, specifying how long it is, which line it is to be printed upon, and options such as specifying a cut and the end of file. These two words of header are followed by the line in the format required by the XGP interface. The first PDP-11 word in each line is the number of PDP-11 WORDS not bytes used for this scan line, including itself and the rest of the header. For most PDP-10 programs this will be an even number, resulting in an integer number of PDP-10 words. The second PDP-11 word is the scan line upon which this line is to be printed. It is allowable to have non-sequential lines. The unspecified lines will be blank. If the line numbers are not ordered, they will come out as close as possible together, and the internal line count will be reset. This is not the recommended mode of operation. The top line on a page is numbered 1. Line specification which would result in pages longer than 36" are treated as end-of-file, as is a line specification of zero. Paper cutting may be specified by setting the sign of the second PDP-11 word. The rest of the buffer so marked will be ignored, and the paper will be cut at the line number specified by the second PDP-11 word with the sign bit cleared. The paper will be automatically cut just before the top margin on the page. The top margin will equal the value of the (setable) parameter LFTMAR in the PDP-10 program. PDP-11 words are stored in PDP-10 format in two 16 bit bytes, left justified in the 36 bit word. It is required that the remaining 4 right bits be clear. The format of the XGP interface data fis as follows: The data sent to the XGP is in the form of eight bit bytes. Due to 10/11 numbering disagreement, the order of the bytes taken by the interface is (in a PDP-10 word) Byte 2, Byte 1, Byte 4, Byte 3, where the 8 bit bytes are numbered from the left. The byte stream is interpreted in one of two (useful) modes. Image mode, once entered, accepts bytes and sends them to the XGP until the end of the XGP line is reached. There is no method of escaping from it. It is entered (from command mode) by the byte sequence 0 , 2 . Run length mode is entered from command mode by the sequence 0 , 0 , and accepts a count of the number of bits which are to be (alternately) black or white. Initially, the color is white. If a string of more than 377 dots which are white or black is encountered, then you must output a 377, followed by a zero, to switch back to the color in use, followed by the remainder. Two sequential zeros will escape from run length encoding mode back into command mode. From command mode, The maximum allowable size for a line is 55. PDP-10 words, which is enough to specify a line in image mode. The line should be specified in image mode if the run length encoding of it would be longer than this. Note that it is necessary to provide the trailing zeros in image mode, as the interface will otherwise output garbage for the remainder of the line.  File: XGP Node: MISC Previous: SCAN Up: Top Scan Line The XGP uses a scan line averaging 200 points per inch, and is con- trolled to also produce 200 points per inch vertically. The scan line extends over the entire eight and one-half inch wide paper sup- plied on 2000 foot rools. Font Files Both MIT and CMU font formats are accepted. The file .INFO.;FED ORDER describes the FED program, which creates the font files. The file .INFO.;KST FORMAT describes the format of the font files used by the XGP.  File: XGP Node: XD Up: (DIR) Documentation for XD: XD 310, 7/15/76 XD is a program for editing files which are meant to be printed on the XGP. XD inputs a file in XGP image format, such as the output of PUB of TJ6, or any test file, and displays it on your TV terminal. It knows about everything the XGP does, such as font specifications, which it gets form the ;KSET command in the file. The main problem in such a program is that the resolution of a TV is much lower than that of the XGP. To deal with this problem, the program has two modes. In the first of these, the normal mode, XD keeps track of a window, whose position can be controlled by the user. The window shows about one fifth of a page vertically, and one third of a page horizontally. There are commands to move the page with respect to the window. In the "Mini-display" mode, the entire physical page is displayed on the TV screen, compressed by a factor of 4 horizontally, and by 5 vertically. In theis mode the page is shown with very low resolution. The dots are ORed together, so the mini-display gives a good idea of the overall layout of the page. Currently implemented commands are: N Go to the next physical XGP page. H Home the window to the upper left-hand corner of the screen. C Center the window at the physical center of the page. Q Quit. R Redisplay the screen in normal mode. M Mini-display. Redisplay the screen in low resolution mode. nA Advance n pages ahead in the file. 1A is the same as N. nP Display page n. ? Type a list of commands. [ Move the page to the left. ] Move the page to the right. \ Move the page up. / Move the page down. The last four commands were chosen for their convenient physical location on the keyboards of TV's, as they are in the DRAW program. These four commands can be multiplied, also like the DRAW program. The multiplication works as follows: CTRL Multiply by 2 META Multiply by 4 TOP Multiply by 16 So CTRL-[ moves the page twice as far to the left, CTRL-TOP-/ moves it 16 times as far down, etc. Since this makes it easy to get lost, the H and C commands can be used to get the window back on the page. The page motion commands and the R command switch the program into normal mode, and the M command switches it to display mode. The N,P, and A commands do not affect the mode. The XGP format file to be read in can be given as JCL, or the program will ask for it. As of now, it does not know about the ;SIZE command. If you find a file which produces a bug, please :BUG XD about them, explain the bug, and tell me where I can find an exact copy of the file which produced it. Any bugs left in the program may take very specialized conditions in order to show itself. Please send any comments, suggestions, bugs, etc., to BUG-XD.