|
|
Evaluates an expression and converts the result to an ASCII string.
asc (value [formatspec])
asc:str (value:any [formatspec:str = ''])
- value
The expression to be formatted.
- formatspec
An optional format specification string can be specified in order to
select specific output base, left or right justification, blank or zero
fill, and field width.
A format specification string is a list of selected format directives,
optionally separated by blanks or commas in order to avoid ambiguity.
The following table lists the supported format directives which can be
entered in upper- or lower-case:
- +
Current output base ($, #, or % prefix
displayed)
- -
Current output base (no prefix)
- +<
Current input base ($, #, or % prefix
displayed)
- -<
Current input base (no prefix)
- $
Hex output base ($ prefix displayed)
- #
Decimal output base (# prefix displayed)
- %
Octal output base (% prefix displayed)
- H
Hex output base (no prefix)
- D
Decimal output base (no prefix)
- O
Octal output base (no prefix)
- A
ASCII base (use "." for non-printable chars)
- N
ASCII base (loads actual non-printable chars)
- L
Left justified
- R
Right justified
- B
Blank filled
- Z
Zero filled
- M
Minimum field width, based on value
- F
Fixed field width, based on the type of value
- Wn
User specified field width n
- T
Typed (display the type of the value)
- U
Untyped (do not display the type of the value)
- QS
Quote single (surround w/ single quotes)
- QD
Quote double (surround w/ double quotes)
- QO
Quote original (surround w/ original quote character)
- QN
Quote none (no quotes)
The M directive (minimum field width) selects the minimum
possible field width necessary to format all significant digits (or
characters in the case of string inputs).
The F directive (fixed field width) selects a fixed field width
based on the type of the value and the selected output base. Fixed field
widths are listed in the following table:
Types |
hex($,H) |
dec(#,D) |
oct(%,O) |
ascii(A,N) |
S16,U16 | 4 | 6 | 6 | 2 |
S32,U32 | 8 | 10 | 11 | 4 |
S64 | 16 | 20 | 22 | 8 |
SPTR | 8 | 10 | 11 | 4 |
LPTR Class | 8.8 | 10.10 | 11.11 | 8 |
EADDR Class | 8.16 | 10.20 | 11.22 | 12 |
STR | field width = length of the string |
The Wn directive (variable field width) allows the user to
specify the desired field width. The W directive can be
specified with an arbitrary expression. If the specified width is less
than the minimum necessary width to display the value, then the user
width is ignored, and the minimum width is used instead. All significant
digits are always printed. For example:
number:"w6"
number:"w2*3"
The number of positions specified (either by Wn or F)
does not include the characters required for the radix indicator (if
specified) or sign (if negative). Also, the sign and radix indicator is
always positioned just preceding the first (leftmost) character.
Zero versus blank fill applies to leading spaces (for right
justification) only. Trailing spaces are always blank filled.
In specifications with quotes, the quotes do not count in the number of
positions specified. The string is built such that it appears inside the
quotes as it would without the quotes.
The T directive (typed) displays the type of the value,
preceding the value. The U directive (untyped) suppresses the
display of the type. Types are displayed in uppercase, with a single
trailing blank. The width of the type display string varies, based on the
type, and it is independent of any specified width (M, F, or
Wn) for the value display.
For values of type LPTR (long pointer,
sid.offset, or seg.offset) and
EADDR (extended address, sid.offset or
ldev.offset), two separate format directives can be
specified. Each is separated by a dot, ".", to indicate individual
formatting choices for the "sid" portion and the
"offset" portion. This is true for all code pointers
(ACPTR - Absolute Code pointers: CST, CSTX; LCPTR -
Logical Code Pointers: PROG, GRP, PUB, LGRP, LPUB, SYS, USER,
TRANS). For example:
pc:"+.-, w4.8, r.l, b.z"
The following default values are used for omitted format directives. Note
that the default format directives depend on the type of value to be
formatted:
value type default format
---------- --------------
STR, BOOL - R B M U
U16,S16,U32,S32,S64 + R B M U
SPTR + R Z F U
LPTR +.- R.L B.Z M.F U
ACPTR LCPTR +.- R.L B.Z M.F T
CST PROG +.- R.L B.Z M.F T
CSTX GRP +.- R.L B.Z M.F T
PUB +.- R.L B.Z M.F T
LGRP +.- R.L B.Z M.F T
LPUB +.- R.L B.Z M.F T
SYS +.- R.L B.Z M.F T
USER +.- R.L B.Z M.F T
TRANS +.- R.L B.Z M.F T
EADDR +.- R.L B.Z M.F U
SADDR +.- R.L B.Z M.F T
Note that absolute code pointers, logical code pointers and extended
addresses display their types (T) by default. All other types
default to (U) untyped.
The Cn (column n) directive moves the current output buffer
position to the specified column position prior to the next write into
the output buffer. Column numbers start at column 1. For example:
number:"c6"
Note: The Cn directive is ignored by the ASC function
but is honored by the W, WL and WP commands.
$nmdat > var number u32(123)
$nmdat > wl asc(number)
$123
$nmdat > wl asc(number,"-")
123
$nmdat > wl asc(number,"t")
U32 $123
$nmdat > wl asc(number "#")
#291
$nmdat > wl asc(number, 'd')
291
$nmdat > wl asc(number 'fr')
$123
$nmdat > wl asc(number, "r,w6,-,z")
000123
Several examples of formatting an unsigned 32-bit value.
$nmdat > var s1="test"
$nmdat > wl asc(s1)
test
$nmdat > wl asc(s1, "QS")
'test'
$nmdat > wl asc(s1 "QO")
"test"
$nmdat > wl asc(s1 "t")
STR test
$nmdat > wl asc(s1 "w2")
test
$nmdat > wl asc(s1, "w2*4,r")
test
$nmdat > var curwidth 8
$nmdat > wl asc(s1 'wcurwidth, r QD')
" test"
Several examples of formatting a string.
$nmdat > var long 2f.42c8
$nmdat > wl asc(long)
$2f.000042c8
$nmdat > wl asc(long, "t")
LPTR $2f.000042c8
$nmdat > wl asc(long, "-.+")
2f.$000042c8
$nmdat > wl asc(long, "#.$ m.m")
#47.$42c8
$nmdat > wl asc(long, "r.r, f.m z")
0000002f.42c8
$nmdat > wl asc(long, "r.r w6.6 z.z")
00002f.0042c8
$nmdat > wl asc(long, 'r.r w6.2*3 z.z qd')
"00002f.0042c8"
$nmdat > wl asc(long, 'r.r,w(2*3).(4+2),b.b,$.$')
$2f. $42c8
$nmdat > var width 6.6
$nmdat > wl asc(long, 'r.l Wwidth, b.b, $.$')
$2f . $42c8
Several examples of formatting a long pointer.
None
|