From 42033ebd35b5d2689354c45aa9f0c463a88e0c86 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Mon, 19 Apr 2021 02:18:55 +0200 Subject: [PATCH] added petscii mappings for ^, _, \, {, } and | --- .../src/prog8/compiler/target/cbm/Petscii.kt | 29 ++++++++++++++----- examples/test.p8 | 15 ++++------ 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/compiler/src/prog8/compiler/target/cbm/Petscii.kt b/compiler/src/prog8/compiler/target/cbm/Petscii.kt index e07c5722a..0e4d12556 100644 --- a/compiler/src/prog8/compiler/target/cbm/Petscii.kt +++ b/compiler/src/prog8/compiler/target/cbm/Petscii.kt @@ -172,7 +172,7 @@ object Petscii { '\u258c', // ▌ 0xA1 -> LEFT HALF BLOCK '\u2584', // ▄ 0xA2 -> LOWER HALF BLOCK '\u2594', // ▔ 0xA3 -> UPPER ONE EIGHTH BLOCK - '_', // ▁ 0xA4 -> LOWER ONE EIGHTH BLOCK + '\u2581', // ▁ 0xA4 -> LOWER ONE EIGHTH BLOCK '\u258f', // ▏ 0xA5 -> LEFT ONE EIGHTH BLOCK '\u2592', // ▒ 0xA6 -> MEDIUM SHADE '\u2595', // ▕ 0xA7 -> RIGHT ONE EIGHTH BLOCK @@ -236,7 +236,7 @@ object Petscii { '\u258c', // ▌ 0xE1 -> LEFT HALF BLOCK '\u2584', // ▄ 0xE2 -> LOWER HALF BLOCK '\u2594', // ▔ 0xE3 -> UPPER ONE EIGHTH BLOCK - '_', // ▁ 0xE4 -> LOWER ONE EIGHTH BLOCK + '\u2581', // ▁ 0xE4 -> LOWER ONE EIGHTH BLOCK '\u258f', // ▏ 0xE5 -> LEFT ONE EIGHTH BLOCK '\u2592', // ▒ 0xE6 -> MEDIUM SHADE '\u2595', // ▕ 0xE7 -> RIGHT ONE EIGHTH BLOCK @@ -431,7 +431,7 @@ object Petscii { '\u258c', // ▌ 0xA1 -> LEFT HALF BLOCK '\u2584', // ▄ 0xA2 -> LOWER HALF BLOCK '\u2594', // ▔ 0xA3 -> UPPER ONE EIGHTH BLOCK - '_', // ▁ 0xA4 -> LOWER ONE EIGHTH BLOCK + '\u2581', // ▁ 0xA4 -> LOWER ONE EIGHTH BLOCK '\u258f', // ▏ 0xA5 -> LEFT ONE EIGHTH BLOCK '\u2592', // ▒ 0xA6 -> MEDIUM SHADE '\u2595', // ▕ 0xA7 -> RIGHT ONE EIGHTH BLOCK @@ -495,7 +495,7 @@ object Petscii { '\u258c', // ▌ 0xE1 -> LEFT HALF BLOCK '\u2584', // ▄ 0xE2 -> LOWER HALF BLOCK '\u2594', // ▔ 0xE3 -> UPPER ONE EIGHTH BLOCK - '_', // ▁ 0xE4 -> LOWER ONE EIGHTH BLOCK + '\u2581', // ▁ 0xE4 -> LOWER ONE EIGHTH BLOCK '\u258f', // ▏ 0xE5 -> LEFT ONE EIGHTH BLOCK '\u2592', // ▒ 0xE6 -> MEDIUM SHADE '\u2595', // ▕ 0xE7 -> RIGHT ONE EIGHTH BLOCK @@ -626,7 +626,7 @@ object Petscii { '\u258c', // ▌ 0x61 -> LEFT HALF BLOCK '\u2584', // ▄ 0x62 -> LOWER HALF BLOCK '\u2594', // ▔ 0x63 -> UPPER ONE EIGHTH BLOCK - '_', // ▁ 0x64 -> LOWER ONE EIGHTH BLOCK + '\u2581', // ▁ 0x64 -> LOWER ONE EIGHTH BLOCK '\u258f', // ▏ 0x65 -> LEFT ONE EIGHTH BLOCK '\u2592', // ▒ 0x66 -> MEDIUM SHADE '\u2595', // ▕ 0x67 -> RIGHT ONE EIGHTH BLOCK @@ -885,7 +885,7 @@ object Petscii { '\u258c', // ▌ 0x61 -> LEFT HALF BLOCK '\u2584', // ▄ 0x62 -> LOWER HALF BLOCK '\u2594', // ▔ 0x63 -> UPPER ONE EIGHTH BLOCK - '_', // ▁ 0x64 -> LOWER ONE EIGHTH BLOCK + '\u2581', // ▁ 0x64 -> LOWER ONE EIGHTH BLOCK '\u258f', // ▏ 0x65 -> LEFT ONE EIGHTH BLOCK '\u2592', // ▒ 0x66 -> MEDIUM SHADE '\u2595', // ▕ 0x67 -> RIGHT ONE EIGHTH BLOCK @@ -1049,9 +1049,21 @@ object Petscii { private val encodingScreencodeLowercase = decodingScreencodeLowercase.withIndex().associate{it.value to it.index} private val encodingScreencodeUppercase = decodingScreencodeUppercase.withIndex().associate{it.value to it.index} + private fun replaceSpecial(chr: Char): Char = + // characters often used in C like source code can be translated with a little bit of fantasy: + when(chr) { + '^' -> '↑' + '_' -> '▁' + '{' -> '┤' + '}' -> '├' + '|' -> '│' + '\\' -> '╲' + else -> chr + } fun encodePetscii(text: String, lowercase: Boolean = false): List { - fun encodeChar(chr: Char, lowercase: Boolean): Short { + fun encodeChar(chr3: Char, lowercase: Boolean): Short { + val chr = replaceSpecial(chr3) val screencode = if(lowercase) encodingPetsciiLowercase[chr] else encodingPetsciiUppercase[chr] return screencode?.toShort() ?: when (chr) { '\u0000' -> 0.toShort() @@ -1087,7 +1099,8 @@ object Petscii { } fun encodeScreencode(text: String, lowercase: Boolean = false): List { - fun encodeChar(chr: Char, lowercase: Boolean): Short { + fun encodeChar(chr3: Char, lowercase: Boolean): Short { + val chr = replaceSpecial(chr3) val screencode = if(lowercase) encodingScreencodeLowercase[chr] else encodingScreencodeUppercase[chr] return screencode?.toShort() ?: when (chr) { '\u0000' -> 0.toShort() diff --git a/examples/test.p8 b/examples/test.p8 index fb227a48e..4aad839ca 100644 --- a/examples/test.p8 +++ b/examples/test.p8 @@ -4,16 +4,13 @@ main { -blocklabel: - sub start() { - -label1: - ubyte xx=99 - if 0==xx { - txt.print("fout") - } - txt.print("loading ") + txt.print("^\n") + txt.print("_\n") + txt.print("{\n") + txt.print("}\n") + txt.print("|\n") + txt.print("\\\n") } }