
dialog asciiview {
  title ASCII viewer
  size -1 -1 152 85
  icon $icons(exe)
  box "", 1, 4 -1 143 8
  text Character:, 2, 6 11 61 16
  text ASCII code:, 3, 6 32 61 16
  edit "", 4, 68 10 79 20
  edit "", 5, 68 31 79 20, read
  text Convert, 6, 6 61 61 16
  box "", 7, 4 48 143 8
  combo 8, 69 60 78 100, size drop
  button "", 30, 0 0 0 0
  button "", 9, 0 0 0 0, hide ok
}

on *:dialog:asciiview:*:*:{
  if ($devent = init) {
    did -ac $dname 8 char to code
    did -a $dname 8 code to char
    did -a $dname 5 <no char>
  }
  if ($devent = edit) && ($did = 4) {
    if ($did($dname,8).sel = 1) {
      if ($did($dname,4)) {
        var %n = $ifmatch
        if ($len(%n) = 1) did -ra $dname 5 $asc(%n)
        else did -ra $dname 5 <too many chars>
      }
      else did -ra $dname 5 <no char>
    }
    else {
      var %n = $did($dname,4)
      if (%n = $null) did -ra $dname 5 <no code>
      if (%n isnum) && (%n >= 0) && (%n <= 255) did -ra $dname 5 $chr(%n)
      else did -ra $dname 5 <invalid code>
    }
  }
  if ($devent = sclick) {
    if ($did = 8) {
      did -r $dname 4,5
      if ($did($dname,8).sel = 1) {
        did -ra $dname 2 Character:
        did -ra $dname 3 ASCII code:
        did -a $dname 5 <no char>
      }
      else {
        did -ra $dname 2 ASCII code:
        did -ra $dname 3 Character:
        did -a $dname 5 <no code>
      }
    }
    if ($did = 30) helpsys utilities
  }
  if ($devent = close) { unloads ascview }
}
