procedure eve_what_character local a_index, this_character, ! Copy of current_character control_character; ! Control string if warranted ! Handle end-of-buffer condition position(text); if mark( none ) = end_of( current_buffer ) then message( 'At end of buffer. NO CURRENT CHARACTER.' ); return; endif; this_character := current_character; ! Convert the character to an integer the hard way (no builtin yet) a_index := 0; loop exitif a_index > 255; exitif this_character = ascii(a_index); a_index := a_index + 1; endloop; if a_index > 255 then a_index := 0; ! on overflow, reset to null endif; ! Translate the character this_character := translate_char (this_character) ; ! Provide ^ notation for ascii control characters if a_index < 32 then control_character := "^" + ascii(a_index+64) ; else control_character := ''; endif; ! Format and output the results message( fao( "Current character is !AS " + "Decimal = !UB, " + "Octal = !-!OB, " + "Hex = !-!XB !AS", this_character, a_index, control_character ) ); endprocedure; ! eve_what_character procedure translate_char (char) local t_char; ! Translated character ! The backwards questions mark is the placeholder for control characters ! from ASCII(0) thru ASCII(31) on the VT2xx series of terminals case char from '' to '' ! 0 to 159 ! 0 thru 7 [''] : t_char := '{NUL}'; [''] : t_char := '{SOH}'; [''] : t_char := '{STX}'; [''] : t_char := '{ETX}'; [''] : t_char := '{EOT}'; [''] : t_char := '{ENQ}'; [''] : t_char := '{ACK}'; [''] : t_char := '{BEL}'; [''] : t_char := '{BS}'; [' '] : t_char := '{HT}'; [' '] : t_char := '{LF}'; [' '] : t_char := '{VT}'; [' '] : t_char := '{FF}'; [' '] : t_char := '{CR}'; [''] : t_char := '{SO }'; [''] : t_char := '{SI }'; [''] : t_char := '{DLE}'; [''] : t_char := '{DC1 }'; [''] : t_char := '{DC2}'; [''] : t_char := '{DC3 }'; [''] : t_char := '{DC4}'; [''] : t_char := '{NAK}'; [''] : t_char := '{SYN}'; [''] : t_char := '{ETB}'; [''] : t_char := '{CAN}'; [''] : t_char := '{EM}'; [''] : t_char := '{SUB}'; [''] : t_char := '{ESC}'; [''] : t_char := '{FS}'; [''] : t_char := '{GS}'; [''] : t_char := '{RS}'; [''] : t_char := '{US}'; [' '] : t_char := '{SPace}'; [''] : t_char := '{DEL}'; [''] : t_char := '{128}'; [''] : t_char := '{129}'; [''] : t_char := '{130}'; [''] : t_char := '{131}'; [''] : t_char := '{IND}'; [''] : t_char := '{NEL}'; [''] : t_char := '{SSA}'; [''] : t_char := '{ESA}'; [''] : t_char := '{HTS}'; [''] : t_char := '{HTJ}'; [''] : t_char := '{VTS}'; [''] : t_char := '{PLD}'; [''] : t_char := '{PLU}'; [''] : t_char := '{RI}'; [''] : t_char := '{SS2}'; [''] : t_char := '{SS3}'; [''] : t_char := '{DCS}'; [''] : t_char := '{PU1}'; [''] : t_char := '{PU2}'; [''] : t_char := '{STS}'; [''] : t_char := '{CCH}'; [''] : t_char := '{MW}'; [''] : t_char := '{SPA}'; [''] : t_char := '{EPA}'; [''] : t_char := '{152}'; [''] : t_char := '{153}'; [''] : t_char := '{154}'; [''] : t_char := '{CSI}'; [''] : t_char := '{ST}'; [''] : t_char := '{OSC}'; [''] : t_char := '{PM}'; [''] : t_char := '{APC}'; [INRANGE,OUTRANGE] : t_char := char ; endcase; return (t_char); endprocedure; !translate_char (char)