%DECML

Convert an ASCII character to its decimal value

WSupported on Windows
USupported on Unix
VSupported on OpenVMS
NSupported in Synergy .NET
result = %DECML(expression)

or

xcall DECML(expression, result)

Return value

result

The decimal equivalent of the converted character. If expression is null, result will be zero. (n)

Arguments

expression

The alpha expression whose leftmost character is to be converted to a decimal ASCII value. (a)

Discussion

The DECML subroutine converts a single ASCII character into its corresponding decimal value and returns or stores the value in the specified result variable. (See Appendix B: ASCII Character Set for a complete set of ASCII characters and their decimal equivalents.)

The maximum decimal value is 255; the size of result must be large enough or truncation will occur.

Tip

If sign is not important (characters greater than 127 are not used), it’s more efficient to cast a single-character variable as an integer or overlay the first character with an i1 to access its ASCII value. For example:

record 
   achar       ,a1 
    asc_value  ,i1 @achar 

Examples

record
    achar       ,a3
    dchar       ,d3
proc
    xcall decml("A1$", dchar)                           ;dchar = 065 ("A")
    achar = "t-R"
    xcall decml(achar, dchar)                           ;dchar = 116 ("t")
    xcall decml(achar(2,2), dchar)                      ;dchar = 045 ("-")
    stop
end

The following subroutine builds a script filename from a partial filename and uppercases it if it is lowercase.

subroutine bldnam
    a_name      ,a
record
    ix          ,d3
proc
    if (.not.(%instr(2, a_name, ".")))                  ;If no extension, add one
      begin
        a_name((%trim(a_name) + 1):4) = ".wsc"
        if (%instr(1, a_name, ":", ix)) then            ;If filename is uppercase,
          ix = %decml(a_name(ix+1:1))                   ; uppercase extension too.
        else
          ix = %decml(a_name)
        case ix of
          begincase
            65 - 90: upcase a_name
          endcase
        clear ix
      end
    return
endsubroutine