sample-code/ascii.cl: Make it cooler
- Compute char value of digit - Substitute C0 control codes for Unicode C0 Control Pictures - Extend through Unicode Latin-1 Supplement - Blank out C1 control code range
This commit is contained in:
parent
7f7836877e
commit
8c0ae02a71
48
sample-code/ascii.cl
Normal file → Executable file
48
sample-code/ascii.cl
Normal file → Executable file
@ -1,28 +1,50 @@
|
|||||||
|
#!/usr/bin/env -S conlang -r false
|
||||||
//! Prints out the characters in the ASCII printable range
|
//! Prints out the characters in the ASCII printable range
|
||||||
//! in the format of a hex-dump
|
//! and the Latin-1 supplement in the format of a hex-dump
|
||||||
|
|
||||||
// TODO: Convenient stuff like this in the stdlib
|
fn main () {
|
||||||
const HEX_LUT: [char; 16] = [
|
ascii()
|
||||||
'0', '1', '2', '3', //
|
}
|
||||||
'4', '5', '6', '7', //
|
|
||||||
'8', '9', 'a', 'b', //
|
fn n_digit(n: u32) -> char {
|
||||||
'c', 'd', 'e', 'f', //
|
(if n > 9 {
|
||||||
];
|
n - 10 + ('a' as u32)
|
||||||
|
} else {
|
||||||
|
n + ('0' as u32)
|
||||||
|
}) as char
|
||||||
|
}
|
||||||
|
|
||||||
|
fn in_range(num: u32, start: u32, end: u32) -> bool {
|
||||||
|
(start <= i) && (i <= end )
|
||||||
|
}
|
||||||
|
|
||||||
fn ascii() {
|
fn ascii() {
|
||||||
for row in 0..6 {
|
for row in 0..16 {
|
||||||
for col in 0..16 {
|
for col in 0..16 {
|
||||||
if col == 8 {
|
if col == 8 {
|
||||||
print(' ')
|
print(' ')
|
||||||
}
|
}
|
||||||
let i = 0x20 + row * 16 + col
|
let i = row * 16 + col
|
||||||
print(HEX_LUT[(i >> 4) & 0xf], HEX_LUT[i & 0xf], ' ')
|
print(n_digit((i >> 4) & 0xf), n_digit(i & 0xf), ' ')
|
||||||
}
|
}
|
||||||
print(" |")
|
print(" |")
|
||||||
for col in 0..16 {
|
for col in 0..16 {
|
||||||
let i = 0x20 + row * 16 + col
|
let i = row * 16 + col
|
||||||
print(i as char)
|
print(ascii_picture(i))
|
||||||
}
|
}
|
||||||
println("|")
|
println("|")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Start of the C0 control pictures region
|
||||||
|
const CO_CONTROL_PICTURES: u32 = '\u{2400}' as u32;
|
||||||
|
|
||||||
|
fn ascii_picture(c: i32) -> char {
|
||||||
|
if c < ' ' as i32 { // C0
|
||||||
|
(CO_CONTROL_PICTURES + c) as char
|
||||||
|
} else if c == 127 { // C0:DEL
|
||||||
|
'␡' // SYMBOL_FOR_DELETE
|
||||||
|
} else if c.in_range(0x7f, 0xa0) { // C1
|
||||||
|
' '
|
||||||
|
} else c as char
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user