home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
ZSYS
/
SIMTEL20
/
ZCPR3
/
PPAL.DOC
< prev
next >
Wrap
Text File
|
2000-06-30
|
13KB
|
362 lines
;%BEGIN 0
;%Program: PPAL
;%Author: Richard Conn
;%Version:
VERS equ 3
;%Date: 3 Sep 1986
;%Revision History:
;1. 1 Sep 86, Richard Conn
; Initial beta-test release
;2. 3 Sep 86, Richard Conn
; Fixed Z3INS compatability problem
; Created LSy option to control colons after labels of MACRO, SET,
; and EQU
; Placed IF/ELSE/ENDIF at same indentation level
; Change Iy option to IIy option
; Added IMy option for MACRO/ENDM indentation
; Added directives I+ and I- for manual increment and decrement of
; indentation level
; Fixed input line counting problem
;3. 5 Sep 86, Richard Conn
; Added Field3 indentation options for EQU and SET (OE and OS)
; Changed O directive to OC, OE, and OS
; Added comment in directive processor
;%Invocation: PPAL file_list [directive_list]
;%Index: Pretty Assembler
;%Index: PPAL
;%Index: Pretty Printer
;%Description:
; PPAL is a Pretty Printer for Assembly Language for the Z System.
;Its purpose is to reformat assembly language source programs in order to
;have all Z System programs conform to a standard structure. PPAL is highly
;configurable, accepting directives from both the command line and the source
;code itself, so that PPAL may be used to format programs in different ways
;for a variety of standards.
; Directives for specific configuration of the pretty printing process
;may be presented on the command line or within the body of the code in
;special comment lines, beginning with ";#". The following directives are
;recognized. In each general case (like, Au), the first letter indicates the
;directive name, and the following letters indicate types of characters which
;may be specified; specifically:
; o - option chars specific to the directive
; u - case indication, U for Upper-case, L for Lower-case,
; X for unchanged
; y - yes/no indication, Y for Yes, N for No, X for unchanged
;
; ;text - marks a comment in the directive line
; Au - controls the case of operands (arguments)
; AU makes non-quoted alphabetic argument characters upper-case
; AL makes non-quoted alphabetic argument characters lower-case
; AX leaves the case of argument characters unchanged
; By - remove blank lines
; BY (yes) turns on removal of blank lines
; BN (no) turns off removal of blank lines
; BX (unchanged) is the same as BN
; Cou, Coy - comment line formatting (a comment line is a line beginning
; with a semicolon, as opposed to an embedded comment)
; CWy controls removal of the space character after the
; semicolon
; CWY (yes) removes the space after the semicolon if a
; space is present, else no change
; CWN (no) inserts the space after the semicolon if no
; space is present, else no change
; CWX (unchanged) makes no change
; CFu controls case of the first character in the comment line
; CFU makes the first character upper-case
; CFL make the first character lower-case
; CFX leaves the case of the first character unchanged
; CAu controls case of all characters in the comment line
; except the first character if CFU or CFL is in effect
; CAU makes all characters upper-case
; CAL makes all characters lower-case
; CAX leaves the case of all characters unchanged
; Eou, Eoy - embedded comment formatting
; ECy controls placement of the embedded comment if it begins
; after field4 (column 33)
; ECY (yes) places embedded comments on the next line
; ECN, ECX (no, unchanged) leaves embedded comments
; on the same line
; EWy controls removal of the space character after the
; semicolon
; EWY (yes) removes the space after the semicolon if a
; space is present, else no change
; EWN (no) inserts the space after the semicolon if no
; space is present, else no change
; EWX (unchanged) makes no change
; EFu controls case of the first character in the comment
; EFU makes the first character upper-case
; EFL make the first character lower-case
; EFX leaves the case of the first character unchanged
; EAu controls case of all characters in the comment
; except the first character if EFU or EFL is in effect
; EAU makes all characters upper-case
; EAL makes all characters lower-case
; EAX leaves the case of all characters unchanged
; Ioy - indent lines subordinate to IFs or MACROs
; I+ increases the indentation level by 1 character
; I- decreases the indentation level by 1 character (0 min)
; IIy controls indentation for the IF/ELSE/ENDIF pseudo-ops
; IIY causes all opcodes subordinate to an IF to be
; indented one character; each successive IF
; causes another indentation; ENDIF brings the
; indentation level out; ELSE temporarily brings
; the indentation level out for the ELSE pseudo-op
; only
; IIN, IIX (no, unchanged) causes indentation under IFs
; to not take place
; IMy controls indentation for the MACRO/ENDM pseudo-ops
; IMY causes all opcodes subordinate to a MACRO to be
; indented one character; ENDM brings the
; indentation level out
; IMN, IMX (no, unchanged) causes indentation under
; MACROs to not take place
; Lou, Loy - control format of labels
; LFu controls the case of the first character of a label
; LFU makes the first character upper-case
; LFL makes the first character lower-case
; LFX leaves the case of the first character unchanged
; LAu controls the case of all characters in a label except
; the first character if LFU or LFL is in effect
; LAU makes all characters upper-case
; LAL makes all characters lower-case
; LAX leaves the case of all characters unchanged
; LCy controls the presence of a colon after a normal label
; LCY ensures that there is a colon after each label
; LCN ensures that there is no colon after each label
; LCX has no effect on a trailing colon; if one was
; present in the input, it is present in the output
; LSy controls the presence of a colon after a special label,
; where a "special" label is a label in front of a MACRO,
; SET, or EQU pseudo-op
; LSY ensures that there is a colon after a special label
; LSN ensures that there is no colon after a spec label
; LSX has no effect on a trailing colon; if one was
; present in the input, it is present in the output
; LLy controls the presence of a new line following a label
; LLY places a new line after a label
; LLN, LLX does not place a new line after a label
; L8y controls the presence of a new line following a label
; which is longer than 8 characters
; L8Y places a new line after an 8+ character label
; L8N, L8X does not place a new line after an 8+
; character label
; Oou or Ooy - controls the appearance of opcodes
; OCu - controls the case of opcodes
; OCU makes opcodes upper-case
; OCL makes opcodes lower-case
; OCX leaves the case of opcodes unchanged
; OEy - indent EQU opcode to Field 3 (col 17)?
; OEY indents the EQU opcode to field3 (col 17)
; OEN, OEX indents the EQU opcode to field2 (col 9)
; OSy - indent SET opcode to Field 3 (col 17)?
; OSY indents the SET opcode to field3 (col 17)
; OSN, OSX indents the SET opcode to field2 (col 9)
;
; In addition to the above directives, four predefined formats
;are available via the Fn directive, where 0 <= n <= 3. The predefined
;formats are:
; F0 - reset all directives to null
; Remove blank lines (B): No
; Comment lines
; First char (CF): Unchanged
; All chars (CA): Unchanged
; Remove Space after ; (CW): Unchanged
; Embedded comments
; First char (EF): Unchanged
; All chars (EA): Unchanged
; Remove Space after ; (EW): Unchanged
; Next line if after col 33 (EC): No
; Indentation
; of IFs (II): No
; of MACROs (IM): No
; Labels
; First char (LF): Unchanged
; All chars (LA): Unchanged
; Colon after label (LC): Unchanged
; Colon after special label (LS): Unchanged
; Line after label (LL): Unchanged
; Line after 8+ char label (L8): Unchanged
; Opcodes
; Opcode case (OC): Unchanged
; EQU indentation (OE): Field2
; SET indentation (OS): Field2
; Operand (argument) case (A): Unchanged
;
; F1 - Z System standard format
; Remove blank lines (B): No
; Comment lines
; First char (CF): Unchanged
; All chars (CA): Unchanged
; Remove Space after ; (CW): Unchanged
; Embedded comments
; First char (EF): Unchanged
; All chars (EA): Unchanged
; Remove Space after ; (EW): Yes
; Next line if after col 33 (EC): Yes
; Indentation
; of IFs (II): Yes
; of MACROs (IM): Yes
; Labels
; First char (LF): Unchanged
; All chars (LA): Upper
; Colon after label (LC): Yes
; Colon after special label (LS): No
; Line after label (LL): Yes
; Line after 8+ char label (L8): Yes
; Opcodes
; Opcode case (OC): Unchanged
; EQU indentation (OE): Field2
; SET indentation (OS): Field2
; Operand (argument) case (A): Lower
;
; F2 - special format
; Remove blank lines (B): Yes
; Comment lines
; First char (CF): Unchanged
; All chars (CA): Unchanged
; Remove Space after ; (CW): Yes
; Embedded comments
; First char (EF): Upper
; All chars (EA): Lower
; Remove Space after ; (EW): Yes
; Next line if after col 33 (EC): Yes
; Indentation
; of IFs (II): Yes
; of MACROs (IM): Yes
; Labels
; First char (LF): Upper
; All chars (LA): Lower
; Colon after label (LC): Yes
; Colon after special label (LS): No
; Line after label (LL): Yes
; Line after 8+ char label (L8): Yes
; Opcodes
; Opcode case (OC): Unchanged
; EQU indentation (OE): Field2
; SET idnentation (OS): Field2
; Operand (argument) case (A): Lower
;
; F3 - special format
; Remove blank lines (B): Yes
; Comment lines
; First char (CF): Unchanged
; All chars (CA): Unchanged
; Remove Space after ; (CW): No
; Embedded comments
; First char (EF): Upper
; All chars (EA): Lower
; Remove Space after ; (EW): Yes
; Next line if after col 33 (EC): Yes
; Indentation
; of IFs (II): Yes
; of MACROs (IM): Yes
; Labels
; First char (LF): Unchanged
; All chars (LA): Upper
; Colon after label (LC): Yes
; Colon after special label (LS): No
; Line after label (LL): Yes
; Line after 8+ char label (L8): Yes
; Opcodes
; Opcode case (OC): Unchanged
; EQU indentation (OE): Field2
; SET indentation (OS): Field2
; Operand (argument) case (A): Upper
;
; If no directives are given, the format F1 is selected. F1 is always
;selected as the default format, and directives can be used to vary specific
;settings or all settings within this default.
;
; Examples of various forms a label may take on:
; Forms AbCd hello EXEC
; -------- ---- ----- ----
; LFX, LAX AbCd hello EXEC
; LFU, LAX AbCd Hello EXEC
; LFL, LAX abCd hello eXEC
; LFX, LAU ABCD HELLO EXEC
; LFU, LAU ABCD HELLO EXEC
; LFL, LAU aBCD hELLO eXEC
; LFX, LAL abcd hello exec
; LFU, LAL Abcd Hello Exec
; LFL, LAL abcd hello exec
;
; Directives may be placed in any order with any or no delimiters:
; "LFXLAU" "LFX LAU" "LFX,LAU"
;have the same meanings. This applies to both command lines and comments:
; PPAL file1,file2 LFX LAU
; ;#LFX, LAU
; For directive in comments, the directive processing is terminated
;by either an end of line or a comment character:
; ;#LFX, LAU
; ;#LFX, LAU ; All labels are upper-case
; Note that allowing directives embedded in the files they are acting
;on allows one part of the file to take on one format and another part of the
;file to take on another format.
;
;Sample file before processing by PPAL:
;
; ; Sample file to illustrate PPAL
; ext cout,print
;
; ;#OEY ; Indent EQUs to Col 17 (Field 3)
;
; test equ 1
; numch equ 26
; fch equ 'A'
;
; ;#OEN ; Indent EQUs to Col 9 (Field 2)
;
; mymac macro
; call print
; if test
; db 'This is a test'
; else
; db 'This is normal'
; endif
; db ' ',0
; endm
;
; mymac
; ld b,numch
; ld a,fch
; loop: call cout
; inc a
; djnz loop
; ret
; end
;
;Sample file after processing by PPAL:
;
; ; Sample file to illustrate PPAL
; ext cout,print
;
; ;#OEY ; Indent EQUs to Col 17 (Field 3)
;
; TEST equ 1
; NUMCH equ 26
; FCH equ 'A'
;
; ;#OEN ; Indent EQUs to Col 9 (Field 2)
;
; MYMAC macro
; call print
; if test
; db 'This is a test'
; else
; db 'This is normal'
; endif
; db ' ',0
; endm
;
; mymac
; ld b,numch
; ld a,fch
; LOOP:
; call cout
; inc a
; djnz loop
; ret
; end
;
;%END