ScreenWriter II

ScreenWriter II (formerly SuperScribe II) was a word processor for the Apple II series, created by David Kidwell and first published in 1981 by On-Line Systems (later Sierra On-Line). The description here is based on a version released in May 1982.

Files were saved to Apple DOS disks as text files (type T). Apple didn't formally use file extensions to identify file types, but sample files mentioned in the manual used a .text extension as part of their names.

The file format was plain ASCII text, with some embedded commands. Line breaks were stored in the usual Apple II fashion, with the CR character (#13 decimal). Some of the commands set "token" characters to be used to trigger various modes (e.g., underline or paragraph break), so depending on what characters were set this way, various different characters might have special meaning in a particular document.

Commands consisted of lines starting with a period (.), meaning that regular text lines couldn't begin with periods.

Embedded commands
These commands affected how the document was to be printed (those were the days before WYSIWYG editing). It seemed that word processor users in those days were expected to have quite a computer-science background to understand the complex command structures needed.

Margins, spacing, and paging

 * .LM n Set left margin to n (e.g., .LM 3 to set margin to character position 3)
 * .RM n Set right margin to n (as character position from the left; must be greater than left margin)
 * .TM n Set top margin to n (as line number from top of page)
 * .BM n Set bottom margin to n (as line number from top of page; must be greater than top margin)

The left and right margin commands could be set separately for each line of the page by giving multiple numbers separated by commas:


 * .LM 10,5,6 sets the left margin to 10 characters for line 1, 5 for line 2, and 6 for line 3. You then have to specify a margin for each and every line of the page. Or you can just insert multiple .lm command lines at each point where you want to change the margin.


 * .FL n Set form length to n (total number of lines in a page)


 * .SS n Set line spacing to n
 * .PA Indicates a paragraph break
 * .PS n Skip n extra lines between paragraphs
 * .SP c Set paragraph token to character c (that character then can be used to signify a paragraph break in place of .PA)


 * .NP Start new page
 * .SK n Skip n lines
 * .TP n Test page
 * .FG n Leave n lines at this point for a figure
 * .FT n Leave n lines at bottom of page for a footnote starting here (followed by the footnote on one or more text lines ending with !)
 * ! On line by itself marks the end of the footnote that started with the .FT command
 * .SL n Sets line counter to n
 * .LI Increment line counter
 * .LD Decrement line counter
 * .FF Formfeed now

Text format

 * .UC Print following text in uppercase
 * .LC Print following text in lowercase
 * .MC Print following text in mixed case
 * .US Underlines should include all text including spaces
 * .UO Underlines should include only words (not spaces)
 * .UL c Set underline token to character c (when it occurs, underlining starts, and ends with next occurrence of character)
 * .BF c Set boldface token to character c, similarly to underline token above


 * .LJ Left-justify
 * .RJ Right-justify
 * .JU Full-justify
 * .NJ Turn off justification
 * .PM 0 Proportional spacing: full spaces
 * .PM 1 Proportional spacing: partial spaces


 * .HO Hyphenation on
 * .NH Hyphenation off
 * .MH Manual hyphenation (pauses printing and asks user to show hyphen spot when one is needed)
 * .AH Automatic hyphenation
 * .SH c Set hyphenation token to character c (used to mark spots where automatic hyphenation can be done if needed)


 * .CE Center next line
 * .ID n Indent next line n spaces (can be negative)
 * .TS n1,n2,n3,...,n16 Set positions of normal tab stops relative to left margin
 * .TC c Set normal tab character to c
 * .AS n1,n2,n3,...,n16 Set absolute tab stops relative to column 0
 * .TA c Set absolute tab character to c
 * .CS n1,n2,n3,...,n16 Set column stops
 * .CC c Set column character (aligns preceding word to next column stop)

Titles

 * .TI n,L,p,text Sets title #n to text, to be printed at line L, position p. p can be an absolute column number or 'left', 'right', or 'center'.
 * .TO n Turn on title n
 * .NT n Turn off title n


 * .DT n,L,p,text Sets dateline #n to text, to be printed at line L, position p. p can be an absolute column number or 'left', 'right', or 'center'.
 * .DA n Turn on dateline n
 * .ND n Turn off dateline n


 * .PG L,p,text Sets page numbering to text (followed by page number), to be printed at line L, position p. p can be an absolute column number or 'left', 'right', or 'center'.
 * .NU Turn on page number printing
 * .NN Turn off page number printing


 * .SR Set Roman numerals for page numbers
 * .SD Set decimal numerals for page numbers


 * .PN n Set current page number to n
 * .IP Increment page number
 * .DP Decrement page number

Form letters
These use two files: a letter file and an address file. The address file uses an end-of-record token to mark the boundary between addresses, which are inserted into the letter one line at a time where the address token occurs.


 * .SA c Set end-of-record token character to c
 * .AD c Set address token character to c
 * .GR Get next record from address file and start printing
 * .NR Get mext record from address file and continue printing
 * .AI text Include only address records that have text as their first field
 * .AN text Do not include records that have text as their first field
 * .name,Ss,Dd (in address file) Link to given filename for more addresses (optional slot and drive given), no pause
 * !name,Ss,Dd (in address file) Link to given filename for more addresses (optional slot and drive given), pausing to let you change disks


 * .QU c1,c2,c3,...,c8 Set question tokens to given characters; when encountered, a token will prompt for input of a response to insert

Logical comparison

 * .IF (a)comp(b) Compares a to be (must put parameters in parentheses); comp is one of < > = # - +. - means less-than-or-equal, + means greater-than-or-equal.

If a logical condition is true, the following text is printed through a line containing only the ! character. If false, that text is skipped.

Indexing
Set an index token to delimit words that are to be indexed; put the token both before and after the word.


 * .IN n,c Set token for (printing) index n to character c.
 * .IC n,c Set token for (non-printing) index n to character c. (Non-printing index words are indexed but not printed in document.)
 * .IL Put index entries in buffer in lower case
 * .IU Put index entries in buffer in upper case
 * .IM Put index entries in buffer in mixed case as encountered in document
 * .PI n,p Print index n, alphabetized, starting numbering at position p, ignoring upper/lower case distinctions.
 * .IA n,p Print index n, alphabetized, starting numbering at p, case-sensitive.
 * .NA,n,p Print index n, non-alphabetized, starting numbering at p, case-sensitive.

System commands

 * .RE c,d Replace character c with d in printing. (Can specify characters with actual character or ASCII decimal position.)
 * .DI command Execute command as Apple DOS command
 * .AF name,Ss,Dd Load and print given filename, with optional slot and drive


 * .FI Fill the following text (ignore carriage returns in printing)
 * .NF Do not fill the following text (resume interpreting CR normally)
 * .BK Do a line break within filled text


 * .PC c Set pause token to c (it stops and prompts user when encountered in printing)
 * .PD c Set pause (down) token to c (prompting to move printer carriage down)
 * .PU c Set pause (up) token to c (prompting to move printer carriage up)


 * .ME text Pause and display text when printing
 * .RK text Ring bell and display text when printing (no pause)


 * .CA n Executes CALL n command on Apple
 * .PO n,m Executes POKE n with m on Apple

Links

 * In-browser emulation at Internet Archive