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 >
Text File  |  2000-06-30  |  13KB  |  362 lines

  1. ;%BEGIN 0
  2. ;%Program: PPAL
  3. ;%Author: Richard Conn
  4. ;%Version:
  5. VERS    equ    3
  6. ;%Date: 3 Sep 1986
  7. ;%Revision History:
  8. ;1. 1 Sep 86, Richard Conn
  9. ;    Initial beta-test release
  10. ;2. 3 Sep 86, Richard Conn
  11. ;    Fixed Z3INS compatability problem
  12. ;    Created LSy option to control colons after labels of MACRO, SET,
  13. ;        and EQU
  14. ;    Placed IF/ELSE/ENDIF at same indentation level
  15. ;    Change Iy option to IIy option
  16. ;    Added IMy option for MACRO/ENDM indentation
  17. ;    Added directives I+ and I- for manual increment and decrement of
  18. ;        indentation level
  19. ;    Fixed input line counting problem
  20. ;3. 5 Sep 86, Richard Conn
  21. ;    Added Field3 indentation options for EQU and SET (OE and OS)
  22. ;    Changed O directive to OC, OE, and OS
  23. ;    Added comment in directive processor
  24. ;%Invocation: PPAL file_list [directive_list]
  25. ;%Index: Pretty Assembler
  26. ;%Index: PPAL
  27. ;%Index: Pretty Printer
  28. ;%Description:
  29. ;    PPAL is a Pretty Printer for Assembly Language for the Z System.
  30. ;Its purpose is to reformat assembly language source programs in order to
  31. ;have all Z System programs conform to a standard structure.  PPAL is highly
  32. ;configurable, accepting directives from both the command line and the source
  33. ;code itself, so that PPAL may be used to format programs in different ways
  34. ;for a variety of standards.
  35. ;    Directives for specific configuration of the pretty printing process
  36. ;may be presented on the command line or within the body of the code in
  37. ;special comment lines, beginning with ";#".  The following directives are
  38. ;recognized.  In each general case (like, Au), the first letter indicates the
  39. ;directive name, and the following letters indicate types of characters which
  40. ;may be specified; specifically:
  41. ;        o - option chars specific to the directive
  42. ;        u - case indication, U for Upper-case, L for Lower-case,
  43. ;            X for unchanged
  44. ;        y - yes/no indication, Y for Yes, N for No, X for unchanged
  45. ;
  46. ;    ;text - marks a comment in the directive line
  47. ;    Au - controls the case of operands (arguments)
  48. ;        AU makes non-quoted alphabetic argument characters upper-case
  49. ;        AL makes non-quoted alphabetic argument characters lower-case
  50. ;        AX leaves the case of argument characters unchanged
  51. ;    By - remove blank lines
  52. ;        BY (yes) turns on removal of blank lines
  53. ;        BN (no) turns off removal of blank lines
  54. ;        BX (unchanged) is the same as BN
  55. ;    Cou, Coy - comment line formatting (a comment line is a line beginning
  56. ;        with a semicolon, as opposed to an embedded comment)
  57. ;        CWy controls removal of the space character after the
  58. ;            semicolon
  59. ;            CWY (yes) removes the space after the semicolon if a
  60. ;                      space is present, else no change
  61. ;            CWN (no) inserts the space after the semicolon if no
  62. ;                     space is present, else no change
  63. ;            CWX (unchanged) makes no change
  64. ;        CFu controls case of the first character in the comment line
  65. ;            CFU makes the first character upper-case
  66. ;            CFL make the first character lower-case
  67. ;            CFX leaves the case of the first character unchanged
  68. ;        CAu controls case of all characters in the comment line
  69. ;            except the first character if CFU or CFL is in effect
  70. ;            CAU makes all characters upper-case
  71. ;            CAL makes all characters lower-case
  72. ;            CAX leaves the case of all characters unchanged
  73. ;    Eou, Eoy - embedded comment formatting
  74. ;        ECy controls placement of the embedded comment if it begins
  75. ;            after field4 (column 33)
  76. ;            ECY (yes) places embedded comments on the next line
  77. ;            ECN, ECX (no, unchanged) leaves embedded comments
  78. ;                on the same line
  79. ;        EWy controls removal of the space character after the
  80. ;            semicolon
  81. ;            EWY (yes) removes the space after the semicolon if a
  82. ;                      space is present, else no change
  83. ;            EWN (no) inserts the space after the semicolon if no
  84. ;                     space is present, else no change
  85. ;            EWX (unchanged) makes no change
  86. ;        EFu controls case of the first character in the comment
  87. ;            EFU makes the first character upper-case
  88. ;            EFL make the first character lower-case
  89. ;            EFX leaves the case of the first character unchanged
  90. ;        EAu controls case of all characters in the comment
  91. ;            except the first character if EFU or EFL is in effect
  92. ;            EAU makes all characters upper-case
  93. ;            EAL makes all characters lower-case
  94. ;            EAX leaves the case of all characters unchanged
  95. ;    Ioy - indent lines subordinate to IFs or MACROs
  96. ;        I+ increases the indentation level by 1 character
  97. ;        I- decreases the indentation level by 1 character (0 min)
  98. ;        IIy controls indentation for the IF/ELSE/ENDIF pseudo-ops
  99. ;            IIY causes all opcodes subordinate to an IF to be
  100. ;                 indented one character; each successive IF
  101. ;                 causes another indentation; ENDIF brings the
  102. ;                 indentation level out; ELSE temporarily brings
  103. ;                 the indentation level out for the ELSE pseudo-op
  104. ;                 only
  105. ;            IIN, IIX (no, unchanged) causes indentation under IFs
  106. ;                 to not take place
  107. ;        IMy controls indentation for the MACRO/ENDM pseudo-ops
  108. ;            IMY causes all opcodes subordinate to a MACRO to be
  109. ;                 indented one character; ENDM brings the
  110. ;                 indentation level out
  111. ;            IMN, IMX (no, unchanged) causes indentation under
  112. ;                 MACROs to not take place
  113. ;    Lou, Loy - control format of labels
  114. ;        LFu controls the case of the first character of a label
  115. ;            LFU makes the first character upper-case
  116. ;            LFL makes the first character lower-case
  117. ;            LFX leaves the case of the first character unchanged
  118. ;        LAu controls the case of all characters in a label except
  119. ;            the first character if LFU or LFL is in effect
  120. ;            LAU makes all characters upper-case
  121. ;            LAL makes all characters lower-case
  122. ;            LAX leaves the case of all characters unchanged
  123. ;        LCy controls the presence of a colon after a normal label
  124. ;            LCY ensures that there is a colon after each label
  125. ;            LCN ensures that there is no colon after each label
  126. ;            LCX has no effect on a trailing colon; if one was
  127. ;                present in the input, it is present in the output
  128. ;        LSy controls the presence of a colon after a special label,
  129. ;            where a "special" label is a label in front of a MACRO,
  130. ;            SET, or EQU pseudo-op
  131. ;            LSY ensures that there is a colon after a special label
  132. ;            LSN ensures that there is no colon after a spec label
  133. ;            LSX has no effect on a trailing colon; if one was
  134. ;                present in the input, it is present in the output
  135. ;        LLy controls the presence of a new line following a label
  136. ;            LLY places a new line after a label
  137. ;            LLN, LLX does not place a new line after a label
  138. ;        L8y controls the presence of a new line following a label
  139. ;            which is longer than 8 characters
  140. ;            L8Y places a new line after an 8+ character label
  141. ;            L8N, L8X does not place a new line after an 8+
  142. ;                     character label
  143. ;    Oou or Ooy - controls the appearance of opcodes
  144. ;        OCu - controls the case of opcodes
  145. ;            OCU makes opcodes upper-case
  146. ;            OCL makes opcodes lower-case
  147. ;            OCX leaves the case of opcodes unchanged
  148. ;        OEy - indent EQU opcode to Field 3 (col 17)?
  149. ;            OEY indents the EQU opcode to field3 (col 17)
  150. ;            OEN, OEX indents the EQU opcode to field2 (col 9)
  151. ;        OSy - indent SET opcode to Field 3 (col 17)?
  152. ;            OSY indents the SET opcode to field3 (col 17)
  153. ;            OSN, OSX indents the SET opcode to field2 (col 9)
  154. ;
  155. ;    In addition to the above directives, four predefined formats
  156. ;are available via the Fn directive, where 0 <= n <= 3.  The predefined
  157. ;formats are:
  158. ;        F0 - reset all directives to null
  159. ;            Remove blank lines (B):            No
  160. ;            Comment lines
  161. ;                First char (CF):        Unchanged
  162. ;                All chars (CA):            Unchanged
  163. ;                Remove Space after ; (CW):    Unchanged
  164. ;            Embedded comments
  165. ;                First char (EF):        Unchanged
  166. ;                All chars (EA):            Unchanged
  167. ;                Remove Space after ; (EW):    Unchanged
  168. ;                Next line if after col 33 (EC):    No
  169. ;            Indentation
  170. ;                of IFs (II):            No
  171. ;                of MACROs (IM):            No
  172. ;            Labels
  173. ;                First char (LF):        Unchanged
  174. ;                All chars (LA):            Unchanged
  175. ;                Colon after label (LC):        Unchanged
  176. ;                Colon after special label (LS):    Unchanged
  177. ;                Line after label (LL):        Unchanged
  178. ;                Line after 8+ char label (L8):    Unchanged
  179. ;            Opcodes
  180. ;                Opcode case (OC):        Unchanged
  181. ;                EQU indentation (OE):        Field2
  182. ;                SET indentation (OS):        Field2
  183. ;            Operand (argument) case (A):        Unchanged
  184. ;
  185. ;        F1 - Z System standard format
  186. ;            Remove blank lines (B):            No
  187. ;            Comment lines
  188. ;                First char (CF):        Unchanged
  189. ;                All chars (CA):            Unchanged
  190. ;                Remove Space after ; (CW):    Unchanged
  191. ;            Embedded comments
  192. ;                First char (EF):        Unchanged
  193. ;                All chars (EA):            Unchanged
  194. ;                Remove Space after ; (EW):    Yes
  195. ;                Next line if after col 33 (EC):    Yes
  196. ;            Indentation
  197. ;                of IFs (II):            Yes
  198. ;                of MACROs (IM):            Yes
  199. ;            Labels
  200. ;                First char (LF):        Unchanged
  201. ;                All chars (LA):            Upper
  202. ;                Colon after label (LC):        Yes
  203. ;                Colon after special label (LS):    No
  204. ;                Line after label (LL):        Yes
  205. ;                Line after 8+ char label (L8):    Yes
  206. ;            Opcodes
  207. ;                Opcode case (OC):        Unchanged
  208. ;                EQU indentation (OE):        Field2
  209. ;                SET indentation (OS):        Field2
  210. ;            Operand (argument) case (A):        Lower
  211. ;
  212. ;        F2 - special format
  213. ;            Remove blank lines (B):            Yes
  214. ;            Comment lines
  215. ;                First char (CF):        Unchanged
  216. ;                All chars (CA):            Unchanged
  217. ;                Remove Space after ; (CW):    Yes
  218. ;            Embedded comments
  219. ;                First char (EF):        Upper
  220. ;                All chars (EA):            Lower
  221. ;                Remove Space after ; (EW):    Yes
  222. ;                Next line if after col 33 (EC):    Yes
  223. ;            Indentation
  224. ;                of IFs (II):            Yes
  225. ;                of MACROs (IM):            Yes
  226. ;            Labels
  227. ;                First char (LF):        Upper
  228. ;                All chars (LA):            Lower
  229. ;                Colon after label (LC):        Yes
  230. ;                Colon after special label (LS):    No
  231. ;                Line after label (LL):        Yes
  232. ;                Line after 8+ char label (L8):    Yes
  233. ;            Opcodes
  234. ;                Opcode case (OC):        Unchanged
  235. ;                EQU indentation (OE):        Field2
  236. ;                SET idnentation (OS):        Field2
  237. ;            Operand (argument) case (A):        Lower
  238. ;
  239. ;        F3 - special format
  240. ;            Remove blank lines (B):            Yes
  241. ;            Comment lines
  242. ;                First char (CF):        Unchanged
  243. ;                All chars (CA):            Unchanged
  244. ;                Remove Space after ; (CW):    No
  245. ;            Embedded comments
  246. ;                First char (EF):        Upper
  247. ;                All chars (EA):            Lower
  248. ;                Remove Space after ; (EW):    Yes
  249. ;                Next line if after col 33 (EC):    Yes
  250. ;            Indentation
  251. ;                of IFs (II):            Yes
  252. ;                of MACROs (IM):            Yes
  253. ;            Labels
  254. ;                First char (LF):        Unchanged
  255. ;                All chars (LA):            Upper
  256. ;                Colon after label (LC):        Yes
  257. ;                Colon after special label (LS):    No
  258. ;                Line after label (LL):        Yes
  259. ;                Line after 8+ char label (L8):    Yes
  260. ;            Opcodes
  261. ;                Opcode case (OC):        Unchanged
  262. ;                EQU indentation (OE):        Field2
  263. ;                SET indentation (OS):        Field2
  264. ;            Operand (argument) case (A):        Upper
  265. ;
  266. ;    If no directives are given, the format F1 is selected.  F1 is always
  267. ;selected as the default format, and directives can be used to vary specific
  268. ;settings or all settings within this default.
  269. ;
  270. ;    Examples of various forms a label may take on:
  271. ;        Forms        AbCd    hello    EXEC
  272. ;        --------    ----    -----    ----
  273. ;        LFX, LAX    AbCd    hello    EXEC
  274. ;        LFU, LAX    AbCd    Hello    EXEC
  275. ;        LFL, LAX    abCd    hello    eXEC
  276. ;        LFX, LAU    ABCD    HELLO    EXEC
  277. ;        LFU, LAU    ABCD    HELLO    EXEC
  278. ;        LFL, LAU    aBCD    hELLO    eXEC
  279. ;        LFX, LAL    abcd    hello    exec
  280. ;        LFU, LAL    Abcd    Hello    Exec
  281. ;        LFL, LAL    abcd    hello    exec
  282. ;
  283. ;    Directives may be placed in any order with any or no delimiters:
  284. ;        "LFXLAU"    "LFX LAU"    "LFX,LAU"
  285. ;have the same meanings.  This applies to both command lines and comments:
  286. ;        PPAL file1,file2 LFX LAU
  287. ;        ;#LFX, LAU
  288. ;    For directive in comments, the directive processing is terminated
  289. ;by either an end of line or a comment character:
  290. ;        ;#LFX, LAU
  291. ;        ;#LFX, LAU  ; All labels are upper-case
  292. ;    Note that allowing directives embedded in the files they are acting
  293. ;on allows one part of the file to take on one format and another part of the
  294. ;file to take on another format.
  295. ;
  296. ;Sample file before processing by PPAL:
  297. ;
  298. ;    ; Sample file to illustrate PPAL
  299. ;        ext    cout,print
  300. ;
  301. ;    ;#OEY  ; Indent EQUs to Col 17 (Field 3)
  302. ;
  303. ;    test    equ    1
  304. ;    numch    equ    26
  305. ;    fch    equ    'A'
  306. ;
  307. ;    ;#OEN  ; Indent EQUs to Col 9 (Field 2)
  308. ;
  309. ;        mymac    macro
  310. ;        call    print
  311. ;        if    test
  312. ;        db    'This is a test'
  313. ;        else
  314. ;        db    'This is normal'
  315. ;        endif
  316. ;        db    '  ',0
  317. ;        endm
  318. ;
  319. ;        mymac
  320. ;        ld    b,numch
  321. ;        ld    a,fch
  322. ;    loop:    call    cout
  323. ;        inc    a
  324. ;        djnz    loop
  325. ;        ret
  326. ;        end
  327. ;
  328. ;Sample file after processing by PPAL:
  329. ;
  330. ;    ; Sample file to illustrate PPAL
  331. ;        ext    cout,print
  332. ;
  333. ;    ;#OEY  ; Indent EQUs to Col 17 (Field 3)
  334. ;
  335. ;    TEST        equ    1
  336. ;    NUMCH        equ    26
  337. ;    FCH        equ    'A'
  338. ;
  339. ;    ;#OEN  ; Indent EQUs to Col 9 (Field 2)
  340. ;
  341. ;    MYMAC    macro
  342. ;         call    print
  343. ;         if    test
  344. ;          db    'This is a test'
  345. ;         else
  346. ;          db    'This is normal'
  347. ;         endif
  348. ;         db    '  ',0
  349. ;        endm
  350. ;
  351. ;        mymac
  352. ;        ld    b,numch
  353. ;        ld    a,fch
  354. ;    LOOP:
  355. ;        call    cout
  356. ;        inc    a
  357. ;        djnz    loop
  358. ;        ret
  359. ;        end
  360. ;
  361. ;%END
  362.