PROC convert_base, conb (
  value, v: string = $required
  length, l: integer = $required
  base, b: integer 8 .. 16 = 10
  result, r: var of string
  status)

  blanks = '                    '
  zeros = '0000000000000000'
  int = $integer($value(value))
  convert_variable = $strrep(int, $value(base))

  IF convert_variable = '-1' THEN
    $value(result) = $substr(blanks, 1, $value(length))
    EXIT_PROC
  ELSEIF $substr(convert_variable,1 ,1) <> '-' THEN
    IF $strlen(convert_variable) < $value(length) THEN
      IF $value(base) = 16 THEN
        $value(result) = $substr(zeros, 1, $value(length)-$strlen(convert_variable)) // convert_variable
        EXIT_PROC
      ELSE
        $value(result) = $substr(blanks, 1, $value(length)-$strlen(convert_variable)) // convert_variable
        EXIT_PROC
      IFEND
    ELSE
      $value(result) = convert_variable
      EXIT_PROC
    IFEND
  ELSEIF $value(base) = 16 "must complement negative number in hexadecimal only"
    int = int + 4000000000000000(16)
    int = int + 4000000000000000(16)
    convert_variable = $strrep(int, 16)
    IF $strlen(convert_variable) < 16 THEN
      convert_variable = $substr(zeros, 1, 16-$strlen(convert_variable)) // convert_variable
      EXIT_PROC
    IFEND
    tst = $substr(convert_variable, 1, 1)
    IF tst = '0' THEN
      $value(result) = '8' // $substr(convert_variable, 2, 15)
    ELSEIF tst = '1' THEN
      $value(result) = '9' // $substr(convert_variable, 2, 15)
    ELSEIF tst = '2' THEN
      $value(result) = 'A' // $substr(convert_variable, 2, 15)
    ELSEIF tst = '3' THEN
      $value(result) = 'B' // $substr(convert_variable, 2, 15)
    ELSEIF tst = '4' THEN
      $value(result) = 'C' // $substr(convert_variable, 2, 15)
    ELSEIF tst = '5' THEN
      $value(result) = 'D' // $substr(convert_variable, 2, 15)
    ELSEIF tst = '6' THEN
      $value(result) = 'E' // $substr(convert_variable, 2, 15)
    ELSEIF tst = '7' THEN
      $value(result) = 'F' // $substr(convert_variable, 2, 15)
    ELSE
      IF $strlen(convert_variable) < $value(length) THEN
        $value(result) = $substr(blanks, 1, $value(length)-$strlen(convert_variable)) // convert_variable
        EXIT_PROC
      ELSE
        $value(result) = convert_variable
        EXIT_PROC
      IFEND
    IFEND
  IFEND

PROCEND convert_base

