home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / debug / wadesrc.lbr / PRINTF.LZB / PRINTF.LIB
Text File  |  1988-06-19  |  4KB  |  257 lines

  1. ;
  2. ;    PRINTF:    Generate parameter list & call for ?prntf, the formatted
  3. ;        output routine.
  4. ;        See PRINTF.ASM for details on coversion specification.
  5. ;
  6. ;    PRINTF    will output to the console
  7. ;    LPRINTF    outputs to the printer
  8. ;    SPRINTF    writes the output into a string.
  9. ;
  10. ;    Last edited    85-03-17    Wagner
  11. ;
  12. ;    Copyright (c) 1984, 1985 by
  13. ;
  14. ;        Thomas Wagner
  15. ;        Patschkauer Weg 31
  16. ;        1000 Berlin 33
  17. ;        West Germany
  18. ;
  19. ;
  20. ;    Usage:        PRINTF    'string',parameter
  21. ;            LPRINTF 'string',parameter
  22. ;            SPRINTF destination,'string',parameter
  23. ;
  24. ;    Example:    PRINTF    'Call params at %w = "%@t"\n',<80H,80H>
  25. ;            SPRINTF    dest,'Call params at %w = "%@t"\n',<80H,80H>
  26. ;
  27. ;    Parameters may be any defined symbol or expression.
  28. ;    Character constants may not be used.
  29. ;    In addition, register names may be specified:
  30. ;
  31. ;        A, F, AF
  32. ;        B, C, BC 
  33. ;        D, E, DE 
  34. ;        H, L, HL
  35. ;        IX 
  36. ;        IY 
  37. ;        SP 
  38. ;
  39. ;        Note that all registers will be stored as an
  40. ;        indirect word value. 
  41. ;        For register pairs (IX, IY, SP), use %@x to print 
  42. ;        the lower byte, %@2w to print the upper byte only.
  43. ;        For single registers the upper byte contains 0.
  44. ;        For AF, the lower byte contains F, the upper A.
  45. ;        
  46. ;    Example:    PRINTF    'A=%@x, F=%@x, B=%@x, HL=%@w\n',<A,AF,B,HL>
  47. ;
  48. ;    CAUTION: Using Register-Parameters will generate code to
  49. ;         store the register in a temporary location.
  50. ;
  51. ;
  52. ;    @@@SRG: For local printf use only
  53. ;
  54. @@@SRG MACRO    PAR,PN,PNUM
  55.     IF    NUL PAR
  56.     EXITM
  57.     ENDIF
  58. @&PN&PNUM ASET    0
  59. PN&2    ASET    0
  60.     IRPC    PP,PAR
  61.     IF    NOT NUL PP
  62. PN&2    ASET    PN&2 + 1
  63.     ENDIF
  64.     ENDM
  65.     IF    PN&2 GT 2
  66.     EXITM
  67.     ENDIF
  68.     IF    ('&PAR' EQ 'AF') OR ('&PAR' EQ 'A') OR ('&PAR' EQ 'F')
  69.     IF    '&PAR' EQ 'A'
  70. @&PN&PNUM ASET    1
  71.     ELSE
  72. @&PN&PNUM ASET    2
  73.     ENDIF
  74.     PUSH    AF
  75.     EX    (SP),HL
  76.     LD    (?pfraf),HL
  77.     POP    HL
  78.     EXITM
  79.     ENDIF
  80.     IF    ('&PAR' EQ 'BC') OR ('&PAR' EQ 'B') OR ('&PAR' EQ 'C')
  81.     IF    '&PAR' EQ 'B'
  82. @&PN&PNUM ASET    3
  83.     ELSE
  84. @&PN&PNUM ASET    4
  85.     ENDIF
  86.     LD    (?pfrbc),BC
  87.     EXITM
  88.     ENDIF
  89.     IF    ('&PAR' EQ 'DE') OR ('&PAR' EQ 'D') OR ('&PAR' EQ 'E')
  90.     IF    '&PAR' EQ 'D'
  91. @&PN&PNUM ASET    5
  92.     ELSE
  93. @&PN&PNUM ASET    6
  94.     ENDIF
  95.     LD    (?pfrde),DE
  96.     EXITM
  97.     ENDIF
  98.     IF    ('&PAR' EQ 'HL') OR ('&PAR' EQ 'H') OR ('&PAR' EQ 'L')
  99.     IF    '&PAR' EQ 'H'
  100. @&PN&PNUM ASET    7
  101.     ELSE
  102. @&PN&PNUM ASET    8
  103.     ENDIF
  104.     LD    (?pfrhl),HL
  105.     EXITM
  106.     ENDIF
  107.     IF    '&PAR' EQ 'IX'
  108. @&PN&PNUM ASET    9
  109.     LD    (?pfrix),IX
  110.     EXITM
  111.     ENDIF
  112.     IF    '&PAR' EQ 'IY'
  113. @&PN&PNUM ASET    10
  114.     LD    (?pfriy),IY
  115.     EXITM
  116.     ENDIF
  117.     IF    '&PAR' EQ 'SP'
  118. @&PN&PNUM ASET    11
  119.     LD    (?pfrsp),SP
  120.     EXITM
  121.     ENDIF
  122.     ELSE
  123. @&PN&PNUM ASET    0
  124.     ENDIF
  125.     ENDIF
  126.     ENDM
  127. ;
  128. ;    @@@SVL: For local printf use only
  129. ;
  130. @@@SVL MACRO    PAR,PN,PNUM
  131.     IF    NUL PAR
  132.     EXITM
  133.     ENDIF
  134.     IF    @&PN&PNUM EQ 0
  135.     DW    PAR
  136.     EXITM
  137.     ENDIF
  138.     IF    @&PN&PNUM EQ 1
  139.     DW    ?pfra
  140.     EXITM
  141.     ENDIF
  142.     IF    @&PN&PNUM EQ 2
  143.     DW    ?pfraf
  144.     EXITM
  145.     ENDIF
  146.     IF    @&PN&PNUM EQ 3
  147.     DW    ?pfrb
  148.     EXITM
  149.     ENDIF
  150.     IF    @&PN&PNUM EQ 4
  151.     DW    ?pfrbc
  152.     EXITM
  153.     ENDIF
  154.     IF    @&PN&PNUM EQ 5
  155.     DW    ?pfrd
  156.     EXITM
  157.     ENDIF
  158.     IF    @&PN&PNUM EQ 6
  159.     DW    ?pfrde
  160.     EXITM
  161.     ENDIF
  162.     IF    @&PN&PNUM EQ 7
  163.     DW    ?pfrh
  164.     EXITM
  165.     ENDIF
  166.     IF    @&PN&PNUM EQ 8
  167.     DW    ?pfrhl
  168.     EXITM
  169.     ENDIF
  170.     IF    @&PN&PNUM EQ 9
  171.     DW    ?pfrix
  172.     EXITM
  173.     ENDIF
  174.     IF    @&PN&PNUM EQ 10
  175.     DW    ?pfriy
  176.     EXITM
  177.     ENDIF
  178.     IF    @&PN&PNUM EQ 11
  179.     DW    ?pfrsp
  180.     ENDIF
  181.     ENDM
  182. ;
  183. ;
  184. PRINTF    MACRO    STRING,VALUES
  185.     LOCAL    PN,PNUM
  186.     EXTRN    ?PRNTF
  187.     EXTRN    ?pfraf,?pfra,?pfrbc,?pfrb,?pfrde,?pfrd,?pfrhl,?pfrh
  188.     EXTRN    ?pfrix,?pfriy,?pfrsp
  189. PNUM    ASET    3
  190.     IRP    PAR,<VALUES>
  191.     @@@SRG PAR,PN,%PNUM
  192. PNUM    ASET    PNUM+1
  193.     ENDM
  194.     CALL    ?PRNTF
  195.     JP    PN&1
  196.     DW    PN&0
  197. PNUM    ASET    3
  198.     IRP    VAL,<VALUES>
  199.     @@@SVL VAL,PN,%PNUM
  200. PNUM    ASET    PNUM+1
  201.     ENDM
  202. PN&0:    DB    STRING
  203.     DB    0
  204. PN&1:
  205.     ENDM
  206. ;
  207. ;
  208. LPRINTF    MACRO    STRING,VALUES
  209.     LOCAL    PN,PNUM
  210.     EXTRN    ?LPRNT
  211.     EXTRN    ?pfraf,?pfra,?pfrbc,?pfrb,?pfrde,?pfrd,?pfrhl,?pfrh
  212.     EXTRN    ?pfrix,?pfriy,?pfrsp
  213. PNUM    ASET    3
  214.     IRP    PAR,<VALUES>
  215.     @@@SRG PAR,PN,%PNUM
  216. PNUM    ASET    PNUM+1
  217.     ENDM
  218.     CALL    ?LPRNT
  219.     JP    PN&1
  220.     DW    PN&0
  221. PNUM    ASET    3
  222.     IRP    VAL,<VALUES>
  223.     @@@SVL VAL,PN,%PNUM
  224. PNUM    ASET    PNUM+1
  225.     ENDM
  226. PN&0:    DB    STRING
  227.     DB    0
  228. PN&1:
  229.     ENDM
  230. ;
  231. ;
  232. SPRINTF    MACRO    DEST,STRING,VALUES
  233.     LOCAL    PN,PNUM
  234.     EXTRN    ?SPRNT
  235.     EXTRN    ?pfraf,?pfra,?pfrbc,?pfrb,?pfrde,?pfrd,?pfrhl,?pfrh
  236.     EXTRN    ?pfrix,?pfriy,?pfrsp
  237. PNUM    ASET    3
  238.     IRP    PAR,<VALUES>
  239.     @@@SRG PAR,PN,%PNUM
  240. PNUM    ASET    PNUM+1
  241.     ENDM
  242.     CALL    ?SPRNT
  243.     JP    PN&1
  244.     DW    DEST
  245.     DW    PN&0
  246. PNUM    ASET    3
  247.     IRP    VAL,<VALUES>
  248.     @@@SVL VAL,PN,%PNUM
  249. PNUM    ASET    PNUM+1
  250.     ENDM
  251. PN&0:    DB    STRING
  252.     DB    0
  253. PN&1:
  254.     ENDM
  255. ;
  256. ;
  257.