SPO, and its source code SPO.S, constitute a general-purpose serial-port output-only driver routine for PTDOS. Characters are simply transmitted as received. SPO may be used as the output file for EDBASIC using SET OF=SPO as a command or SET OF= "SPO" as a statement, and using standard PRINT statements with TAB functions, semicolons and whatever in them, which BASIC will interpret and convert into the appropriate stream of characters. SPO may also be used in an EDBASIC program as if it were a disk file, opened by a "file open" statement such as FILE #3;"SPO",2,,,256 and then addressed by a "file print" statement like PRINT #3;A,B$,%13F2,C. The advantage of the latter form is that the driver file is opened only once, whereas using the SET OF syntax results in a disk access to load the driver each time the SET OF statement is executed. This may happen continually, and waste time, if the BASIC program must frequently shift the output from screen to printer and back. Unfortunately, BASIC will not allow semicolons or TABs in a file print statement. It substitutes a carriage return (0D) for each comma as a separator. This will cause your printer to return (but not line feed) after each variable and print them on top of one another if you don't take precautions. One way to solve this is to use only one PRINT statement per line of output, placing the characters to be output into a single long string appropriately using BASIC's substring functions and FILL statement. Assuming the desired print line has been placed in X$, the statement PRINT #3;X$,CHR(10) will print it and follow it with a carriage return (due to the comma) and a line feed, as you would wish. An alternative solution is implemented in the SPB driver. This driver discards the carriage returns that BASIC inserts between variables; it also treats a backslash "\" as a code indicating that the next character is a control character, in the same manner that the BASIC video driver does. Inclusion of code for a line feed "\J" in a BASIC print statement will cause both a carriage return and a line feed to be sent, as they must be to end any line of printing and move to a new line. A carriage return alone, as for underlining, may be specified by "\M", and any control characters meaningful to the printer or other device may be specified similarly. Again, TABs may not be included in a print statement because BASIC will treat them as syntax errors, but BASIC's "%" print formatting statements may be included with the expected effect. The SPB driver is not suited for BASIC output using the SET OF syntax, nor for output of non-BASIC material. Reassembly, "scrunching" and typing as a device driver of the source code of either driver may be accomplished by calling the MAKDRIVR macro, using the following syntax: DO MAKDRIVR,{source filename},{object filename}.