diff --git a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/CDC1604DashP6.java b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/CDC1604DashP6.java index 77b0d74..1093f32 100644 --- a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/CDC1604DashP6.java +++ b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/CDC1604DashP6.java @@ -28,99 +28,104 @@ import java.util.List; import java.util.PrimitiveIterator; /** - * CDC1604DashP6 has 27 pie slice number systems and BASIC letters in a six bit encoding. + * CDC1604DashP6 has 27 pie slice number systems "Packed" for MATH and BASIC letters in a "Six" bit encoding. * * This is used as the first 64 word numbers of the china four corner method, and acts like ascii glue for adult 18 bit computers. * + * ASCII 8 bit can only encoding 10 number glyphs, this 6 bit format can encode 378 different number glyphs. + * (1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27) + * * @author Willem Cazander * @version 1.0 Dec 22, 2024 */ public enum CDC1604DashP6 { - // [NUL][WN][WG][WE] [WL][WS]?! {[(< }])> + // [__NUL][__PIE][__GLUE][__ESC] [__LINE][__SPACE]?! {[(< }])> // ~+-* ,.:; '"`^ =#$% // |_\/ @ABC DEFG HIJK // LMNO PQRS TUVW XYZ& - /// NUL for termination. - _NUL('\u0000'), - /// Select packed number encoding. + /// Indicator for termination of pussy strings, which is the compatibility duel octal, with the CDC 1604 computers. + __NUL('\u0000'), + /// Select packed pie number encoding. /// A = 1, first P6 is terminator select, than next P6 _A++ select pie part 1-27, until other P6 stops it. /// Example ascii "012" is - /// 0 = _WORD_NUMBER _A _A (WN T001 PART_1 = 0) - /// 12 = _WORD_NUMBER _I _A _B (WN T009 PART_1+2 = 1+2) - _WORD_NUMBER('\u0001'), - /// Word glue to flag for automatic casing or separator in renderer. - _WORD_GLUE('\u0002'), - /// Escape to terminal control code. (note only needed for 6 bit and 8 bit systems) - _WORD_ESC('\u0003'), - _WORD_LINE('\n'), - _WORD_SPACE(' '), - _QUESTION_MARK('?'), - _EXCLAMATION_MARK('!'), - _CURLY_BRACKET_LEFT('{'), - _SQUARE_BRACKET_LEFT('['), - _ROUND_BRACKET_LEFT('('), - _LESSER_THAN_SIGN('<'), - _CURLY_BRACKET_RIGHT('}'), - _SQUARE_BRACKET_RIGHT(']'), - _ROUND_BRACKET_RIGHT(')'), - _GREATER_THAN_SIGN('>'), + /// 0 = __PIE _A _A (__PIE T001 PART_1) + /// 12 = __PIE _I _A _B (__PIE T009 PART_1+2) + __PIE('\u0001'), + /// Word glue to flag for automatic casing and/or separator in renderer.(by user-pref per context) + /// Example "__SPACE __GLUE _F _O _O __GLUE _B _A _R" can be rendered as " FooᐧBar" or " fOObAR" or " FOO_BAR" etc/etc. + __GLUE('\u0002'), + /// Escape to direct control code. (note only needed for 6 bit and 8 bit systems) + __ESC('\u0003'), + __LINE('\n'), + __SPACE(' '), + _QUESTION('?'), + _EXCLAMATION('!'), - _TILDE_SIGN('~'), - _PLUS_SIGN('+'), - _MINUS_SIGN('-'), + TAG_CURLY_LEFT('{'), + TAG_SQUARE_LEFT('['), + TAG_ROUND_LEFT('('), + TAG_COMPARE_LEFT('<'), + TAG_CURLY_RIGHT('}'), + TAG_SQUARE_RIGHT(']'), + TAG_ROUND_RIGHT(')'), + TAG_COMPARE_RIGHT('>'), + + _TILDE('~'), + _PLUS('+'), + _MINUS('-'), _ASTERISK('*'), _COMMA(','), - _FULL_POINT('.'), + _DOT('.'), _COLON(':'), _SEMICOLON(';'), _APOSTROPHE('\''), - _QUOTATION_MARK('\"'), - _BACKTICK_MARK('`'), + _QUOTATION('\"'), + _BACKTICK('`'), _CARET('^'), - _EQUALS_SIGN('='), - _NUMBER_SIGN('#'), - _DOLLAR_SIGN('$'), - _PERCENT_SIGN('%'), + _EQUALS('='), + _HASH('#'), + _DOLLAR('$'), + _PERCENT('%'), - _VERTICAL_BAR('|'), - _UNDERSCORE('_'), - _BACKSLASH('\\'), - _SLASH('/'), - _AT_SIGN('@'), - _A('A', "Æ æ Å å Ǻ ǻ Ḁ ḁ ẚ Ă ă Ặ ặ Ắ ắ Ằ ằ Ẳ ẳ Ẵ ẵ Ȃ ȃ Â â Ậ ậ Ấ ấ Ầ ầ Ẫ ẫ Ẩ ẩ Ả ả Ǎ ǎ Ⱥ ⱥ Ȧ ȧ Ǡ ǡ Ạ ạ Ä ä Ǟ ǟ À à Ȁ ȁ Á á Ā ā Ā̀ ā̀ Ã ã Ą ą Ą́ ą́ Ą̃ ą̃ A̲ a̲ ᶏ"), - _B('B', "Ƀ ƀ Ḃ ḃ Ḅ ḅ Ḇ ḇ Ɓ ɓ ᵬ ᶀ"), - _C('C', "Ć ć Ĉ ĉ Č č Ċ ċ Ḉ ḉ Ƈ ƈ C̈ c̈ Ȼ ȼ Ç ç Ꞔ ꞔ Ꞓ ꞓ"), - _D('D', "Đ đ Ꟈ ꟈ Ɗ ɗ Ḋ ḋ Ḍ ḍ Ḑ ḑ Ḓ ḓ Ď ď Ḏ ḏ"), - _E('E', "Ĕ ĕ Ḝ ḝ Ȇ ȇ Ê ê Ê̄ ê̄ Ê̌ ê̌ Ề ề Ế ế Ể ể Ễ ễ Ệ ệ Ẻ ẻ Ḙ ḙ Ě ě Ɇ ɇ Ė ė Ė́ ė́ Ė̃ ė̃ Ẹ ẹ Ë ë È è È̩ è̩ Ȅ ȅ É é É̩ Ē ē Ḕ ḕ Ḗ ḗ Ẽ ẽ Ḛ ḛ Ę ę Ę́ ę́ Ę̃ ę̃ Ȩ ȩ E̩ e̩ ᶒ"), - _F('F', "Ƒ ƒ Ḟ ḟ ᵮ ᶂ Ꞙ ꞙ"), - _G('G', "Ǵ ǵ Ǥ ǥ Ĝ ĝ Ǧ ǧ Ğ ğ Ģ ģ Ɠ ɠ Ġ ġ Ḡ ḡ Ꞡ ꞡ ᶃ"), - _H('H', "Ĥ ĥ Ȟ ȟ Ħ ħ Ḩ ḩ Ⱨ ⱨ ẖ ẖ Ḥ ḥ Ḣ ḣ Ḧ ḧ Ḫ ḫ ꞕ Ꜧ ꜧ"), - _I('I', "Ị ị Ĭ ĭ Î î Ǐ ǐ Ɨ ɨ Ï ï Ḯ ḯ Í í Ì ì Ȉ ȉ Į į Į́ Į̃ Ī ī Ī̀ ī̀ ᶖ Ỉ ỉ Ȋ ȋ Ĩ ĩ Ḭ ḭ ᶤ"), - _J('J', "J́ j́ Ĵ ĵ J̌ ǰ Ɉ ɉ J̃ j̇̃"), - _K('K', "Ƙ ƙ Ꝁ ꝁ Ḱ ḱ Ǩ ǩ Ḳ ḳ Ķ ķ ᶄ Ⱪ ⱪ Ḵ ḵ"), - - _L('L', "Ĺ ĺ Ł ł Ľ ľ Ḹ ḹ L̃ l̃ Ļ ļ Ŀ ŀ Ḷ ḷ Ḻ ḻ Ḽ ḽ Ƚ ƚ Ⱡ ⱡ"), - _M('M', "Ḿ ḿ Ṁ ṁ Ṃ ṃ M̃ m̃ ᵯ"), - _N('N', "Ń ń Ñ ñ Ň ň Ǹ ǹ Ṅ ṅ Ṇ ṇ Ņ ņ Ṉ ṉ Ṋ ṋ Ꞥ ꞥ ᵰ ᶇ"), - _O('O', "Ø ø Ǿ ǿ Ö ö Ȫ ȫ Ó ó Ò ò Ô ô Ố ố Ồ ồ Ổ ổ Ỗ ỗ Ộ ộ Ǒ ǒ Ő ő Ŏ ŏ Ȏ ȏ Ȯ ȯ Ȱ ȱ Ọ ọ Ɵ ɵ ᶱ Ơ ơ Ớ ớ Ờ ờ Ỡ ỡ Ợ ợ Ở ở Ỏ ỏ Ō ō Ṓ ṓ Ṑ ṑ Õ õ Ȭ ȭ Ṍ ṍ Ṏ ṏ Ǫ ǫ Ȍ ȍ O̩ o̩ Ó̩ ó̩ Ò̩ ò̩ Ǭ ǭ O͍ o͍"), - _P('P', "Ṕ ṕ Ṗ ṗ Ᵽ ᵽ Ƥ ƥ ᵱ ᶈ"), - _Q('Q', "ʠ Ɋ ɋ q̃"), - _R('R', "Ŕ ŕ Ɍ ɍ Ř ř Ŗ ŗ Ṙ ṙ Ȑ ȑ Ȓ ȓ Ṛ ṛ Ṝ ṝ Ṟ ṟ Ꞧ ꞧ Ɽ ɽ R̃ r̃ ᵲ ꭨ ᵳ ᶉ"), - _S('S', "Ś ś Ṡ ṡ ẛ Ṩ ṩ Ṥ ṥ Ṣ ṣ S̩ s̩ Ꞩ ꞩ Ꟊ ꟊ Ꟍ ꟍ Ŝ ŝ Ṧ ṧ Š š Ş ş Ș ș S̈ s̈ ᶊ Ȿ ȿ ᵴ ᶳ"), - _T('T', "Ť ť Ṫ ṫ ẗ Ţ ţ Ṭ ṭ Ʈ ʈ Ț ț ƫ Ṱ ṱ Ṯ ṯ Ŧ ŧ Ⱦ ⱦ Ƭ ƭ ᵵ ᶵ"), - _U('U', "Ŭ ŭ Ʉ ʉ ᵾ ᶶ Ꞹ ꞹ Ụ ụ Ü ü Ǜ ǜ Ǘ ǘ Ǚ ǚ Ǖ ǖ Ṳ ṳ Ú ú Ù ù Û û Ṷ ṷ Ǔ ǔ Ȗ ȗ Ű ű Ŭ ŭ Ư ư Ứ ứ Ừ ừ Ử ử Ự ự Ữ Ữ Ủ ủ Ū ū Ū̀ ū̀ Ū́ ū́ Ṻ ṻ Ū̃ ū̃ Ũ ũ Ṹ ṹ Ṵ ṵ ᶙ Ų ų Ų́ ų́ Ų̃ ų̃ Ȕ ȕ Ů ů"), - _V('V', "Ṽ ṽ Ṿ ṿ Ʋ ʋ ᶌ"), - _W('W', "Ẃ ẃ Ẁ ẁ Ŵ ŵ Ẅ ẅ Ẇ ẇ Ẉ ẉ ẘ"), - _X('X', "Ẍ ẍ Ẋ ẋ X̂ x̂ ᶍ"), - _Y('Y', "Ý ý Ỳ ỳ Ŷ ŷ Ÿ ÿ Ỹ ỹ Ẏ ẏ Ỵ ỵ ẙ Ỷ ỷ Ȳ ȳ Ɏ ɏ Ƴ ƴ"), - _Z('Z', "Ź ź Ẑ ẑ Ž ž Ż ż Ẓ ẓ Ẕ ẕ Ƶ ƶ ᵶ Ᶎ ᶎ Ⱬ ⱬ"), + BAR_VERTICAL('|'), + BAR_UNDER('_'), + BAR_V_LEFT('\\'), + BAR_V_RIGHT('/'), + _AT('@'), + /// The tone letter 'A' is "one" and is equal to 'a', if your computer is expensive and has a lower-case char ROM, than this is 'a' except after __GLUE marker. + T001_A('A', "Æ æ Å å Ǻ ǻ Ḁ ḁ ẚ Ă ă Ặ ặ Ắ ắ Ằ ằ Ẳ ẳ Ẵ ẵ Ȃ ȃ Â â Ậ ậ Ấ ấ Ầ ầ Ẫ ẫ Ẩ ẩ Ả ả Ǎ ǎ Ⱥ ⱥ Ȧ ȧ Ǡ ǡ Ạ ạ Ä ä Ǟ ǟ À à Ȁ ȁ Á á Ā ā Ā̀ ā̀ Ã ã Ą ą Ą́ ą́ Ą̃ ą̃ A̲ a̲ ᶏ"), + T002_B('B', "Ƀ ƀ Ḃ ḃ Ḅ ḅ Ḇ ḇ Ɓ ɓ ᵬ ᶀ"), + T003_C('C', "Ć ć Ĉ ĉ Č č Ċ ċ Ḉ ḉ Ƈ ƈ C̈ c̈ Ȼ ȼ Ç ç Ꞔ ꞔ Ꞓ ꞓ"), + T004_D('D', "Đ đ Ꟈ ꟈ Ɗ ɗ Ḋ ḋ Ḍ ḍ Ḑ ḑ Ḓ ḓ Ď ď Ḏ ḏ"), + T005_E('E', "Ĕ ĕ Ḝ ḝ Ȇ ȇ Ê ê Ê̄ ê̄ Ê̌ ê̌ Ề ề Ế ế Ể ể Ễ ễ Ệ ệ Ẻ ẻ Ḙ ḙ Ě ě Ɇ ɇ Ė ė Ė́ ė́ Ė̃ ė̃ Ẹ ẹ Ë ë È è È̩ è̩ Ȅ ȅ É é É̩ Ē ē Ḕ ḕ Ḗ ḗ Ẽ ẽ Ḛ ḛ Ę ę Ę́ ę́ Ę̃ ę̃ Ȩ ȩ E̩ e̩ ᶒ"), + T006_F('F', "Ƒ ƒ Ḟ ḟ ᵮ ᶂ Ꞙ ꞙ"), + T007_G('G', "Ǵ ǵ Ǥ ǥ Ĝ ĝ Ǧ ǧ Ğ ğ Ģ ģ Ɠ ɠ Ġ ġ Ḡ ḡ Ꞡ ꞡ ᶃ"), + T008_H('H', "Ĥ ĥ Ȟ ȟ Ħ ħ Ḩ ḩ Ⱨ ⱨ ẖ ẖ Ḥ ḥ Ḣ ḣ Ḧ ḧ Ḫ ḫ ꞕ Ꜧ ꜧ"), + T009_I('I', "Ị ị Ĭ ĭ Î î Ǐ ǐ Ɨ ɨ Ï ï Ḯ ḯ Í í Ì ì Ȉ ȉ Į į Į́ Į̃ Ī ī Ī̀ ī̀ ᶖ Ỉ ỉ Ȋ ȋ Ĩ ĩ Ḭ ḭ ᶤ"), + T010_J('J', "J́ j́ Ĵ ĵ J̌ ǰ Ɉ ɉ J̃ j̇̃"), + T011_K('K', "Ƙ ƙ Ꝁ ꝁ Ḱ ḱ Ǩ ǩ Ḳ ḳ Ķ ķ ᶄ Ⱪ ⱪ Ḵ ḵ"), + T012_L('L', "Ĺ ĺ Ł ł Ľ ľ Ḹ ḹ L̃ l̃ Ļ ļ Ŀ ŀ Ḷ ḷ Ḻ ḻ Ḽ ḽ Ƚ ƚ Ⱡ ⱡ"), + T013_M('M', "Ḿ ḿ Ṁ ṁ Ṃ ṃ M̃ m̃ ᵯ"), + T014_N('N', "Ń ń Ñ ñ Ň ň Ǹ ǹ Ṅ ṅ Ṇ ṇ Ņ ņ Ṉ ṉ Ṋ ṋ Ꞥ ꞥ ᵰ ᶇ"), + T015_O('O', "Ø ø Ǿ ǿ Ö ö Ȫ ȫ Ó ó Ò ò Ô ô Ố ố Ồ ồ Ổ ổ Ỗ ỗ Ộ ộ Ǒ ǒ Ő ő Ŏ ŏ Ȏ ȏ Ȯ ȯ Ȱ ȱ Ọ ọ Ɵ ɵ ᶱ Ơ ơ Ớ ớ Ờ ờ Ỡ ỡ Ợ ợ Ở ở Ỏ ỏ Ō ō Ṓ ṓ Ṑ ṑ Õ õ Ȭ ȭ Ṍ ṍ Ṏ ṏ Ǫ ǫ Ȍ ȍ O̩ o̩ Ó̩ ó̩ Ò̩ ò̩ Ǭ ǭ O͍ o͍"), + T016_P('P', "Ṕ ṕ Ṗ ṗ Ᵽ ᵽ Ƥ ƥ ᵱ ᶈ"), + T017_Q('Q', "ʠ Ɋ ɋ q̃"), + T018_R('R', "Ŕ ŕ Ɍ ɍ Ř ř Ŗ ŗ Ṙ ṙ Ȑ ȑ Ȓ ȓ Ṛ ṛ Ṝ ṝ Ṟ ṟ Ꞧ ꞧ Ɽ ɽ R̃ r̃ ᵲ ꭨ ᵳ ᶉ"), + T019_S('S', "Ś ś Ṡ ṡ ẛ Ṩ ṩ Ṥ ṥ Ṣ ṣ S̩ s̩ Ꞩ ꞩ Ꟊ ꟊ Ꟍ ꟍ Ŝ ŝ Ṧ ṧ Š š Ş ş Ș ș S̈ s̈ ᶊ Ȿ ȿ ᵴ ᶳ"), + T020_T('T', "Ť ť Ṫ ṫ ẗ Ţ ţ Ṭ ṭ Ʈ ʈ Ț ț ƫ Ṱ ṱ Ṯ ṯ Ŧ ŧ Ⱦ ⱦ Ƭ ƭ ᵵ ᶵ"), + T021_U('U', "Ŭ ŭ Ʉ ʉ ᵾ ᶶ Ꞹ ꞹ Ụ ụ Ü ü Ǜ ǜ Ǘ ǘ Ǚ ǚ Ǖ ǖ Ṳ ṳ Ú ú Ù ù Û û Ṷ ṷ Ǔ ǔ Ȗ ȗ Ű ű Ŭ ŭ Ư ư Ứ ứ Ừ ừ Ử ử Ự ự Ữ Ữ Ủ ủ Ū ū Ū̀ ū̀ Ū́ ū́ Ṻ ṻ Ū̃ ū̃ Ũ ũ Ṹ ṹ Ṵ ṵ ᶙ Ų ų Ų́ ų́ Ų̃ ų̃ Ȕ ȕ Ů ů"), + T022_V('V', "Ṽ ṽ Ṿ ṿ Ʋ ʋ ᶌ"), + T023_W('W', "Ẃ ẃ Ẁ ẁ Ŵ ŵ Ẅ ẅ Ẇ ẇ Ẉ ẉ ẘ"), + T024_X('X', "Ẍ ẍ Ẋ ẋ X̂ x̂ ᶍ"), + T025_Y('Y', "Ý ý Ỳ ỳ Ŷ ŷ Ÿ ÿ Ỹ ỹ Ẏ ẏ Ỵ ỵ ẙ Ỷ ỷ Ȳ ȳ Ɏ ɏ Ƴ ƴ"), + T026_Z('Z', "Ź ź Ẑ ẑ Ž ž Ż ż Ẓ ẓ Ẕ ẕ Ƶ ƶ ᵶ Ᶎ ᶎ Ⱬ ⱬ"), /// The 27th letter is at the end of the old english alphabet. - _AMPERSAND('&'), + T027_AMPERSAND('&'), ; - private final char codePoint; - private final char codePointLower; + private final byte codePoint; + private final byte codePointLower; private final String aliases; private CDC1604DashP6(char codePoint) { @@ -128,8 +133,8 @@ public enum CDC1604DashP6 { } private CDC1604DashP6(char codePoint, String aliases) { - this.codePoint = codePoint; - this.codePointLower = Character.toLowerCase(codePoint); + this.codePoint = (byte) codePoint; + this.codePointLower = (byte) Character.toLowerCase(codePoint); this.aliases = aliases; } @@ -138,10 +143,6 @@ public enum CDC1604DashP6 { } public byte asciiByte() { - return (byte) codePoint; - } - - public char asciiChar() { return codePoint; } @@ -159,7 +160,7 @@ public enum CDC1604DashP6 { int codePoint = i.next(); boolean found = false; if ('\r' == codePoint) { - result.add(CDC1604DashP6._WORD_LINE); + result.add(CDC1604DashP6.__LINE); continue; } for (CDC1604DashP6 v : cdcChars) { @@ -170,23 +171,23 @@ public enum CDC1604DashP6 { break; } if ('0' == codePoint) { - if (!CDC1604DashP6._A.equals(cdcNumberTerminator)) { - result.add(CDC1604DashP6._WORD_NUMBER); - result.add(CDC1604DashP6._A); - cdcNumberTerminator = CDC1604DashP6._A; + if (!CDC1604DashP6.T001_A.equals(cdcNumberTerminator)) { + result.add(CDC1604DashP6.__PIE); + result.add(CDC1604DashP6.T001_A); + cdcNumberTerminator = CDC1604DashP6.T001_A; } - result.add(CDC1604DashP6._A); + result.add(CDC1604DashP6.T001_A); found = true; break; } if (codePoint >= '1' && codePoint <= '9') { - if (!CDC1604DashP6._I.equals(cdcNumberTerminator)) { - result.add(CDC1604DashP6._WORD_NUMBER); - result.add(CDC1604DashP6._I); - cdcNumberTerminator = CDC1604DashP6._I; + if (!CDC1604DashP6.T009_I.equals(cdcNumberTerminator)) { + result.add(CDC1604DashP6.__PIE); + result.add(CDC1604DashP6.T009_I); + cdcNumberTerminator = CDC1604DashP6.T009_I; } int cdcNumberOff = codePoint - '1'; // 0 = 1 - int cdcNumber = CDC1604DashP6._A.ordinal() + cdcNumberOff; + int cdcNumber = CDC1604DashP6.T001_A.ordinal() + cdcNumberOff; result.add(CDC1604DashP6.values()[cdcNumber]); found = true; break; @@ -228,13 +229,13 @@ public enum CDC1604DashP6 { if (numberMode != null && (cdcPoint.ordinal() > numberMode.ordinal())) { numberMode = null; // out of range } - if (numberMode != null && (cdcPoint.ordinal() < CDC1604DashP6._A.ordinal())) { + if (numberMode != null && (cdcPoint.ordinal() < CDC1604DashP6.T001_A.ordinal())) { numberMode = null; // below index 1 is end number mode } - if (_WORD_GLUE.equals(cdcPoint)) { + if (CDC1604DashP6.__GLUE.equals(cdcPoint)) { continue; } - if (_WORD_NUMBER.equals(cdcPoint)) { + if (CDC1604DashP6.__PIE.equals(cdcPoint)) { if (!cdc.hasNext()) { break; } @@ -244,8 +245,8 @@ public enum CDC1604DashP6 { if (numberMode == null) { buf.appendCodePoint(cdcPoint.asciiByte()); } else { - int terminatorNum = numberMode.ordinal() - CDC1604DashP6._A.ordinal() + 1; - int valueNumber = cdcPoint.ordinal() - CDC1604DashP6._A.ordinal(); + int terminatorNum = numberMode.ordinal() - CDC1604DashP6.T001_A.ordinal() + 1; + int valueNumber = cdcPoint.ordinal() - CDC1604DashP6.T001_A.ordinal(); appendTerminatorNumber(buf, terminatorNum, valueNumber); } } diff --git a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/CDC1604DashP6DEC.java b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/CDC1604DashP6DEC.java index c054e12..03eda7c 100644 --- a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/CDC1604DashP6DEC.java +++ b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/CDC1604DashP6DEC.java @@ -23,9 +23,11 @@ package org.x4o.o2o; /** - * Direct Escaped Control of text terminal with CDC1604DashP6 code points. + * Direct Escaped Control of text terminal with CDC1604DashP6 code points. (TODO: currently empty) * - * A 6 or 8 bit computer use the CDC1604DashP6._WORD_ESCAPE to use these 64 control codes. + * This block defines "start" points of different escape sequence data-gram encoding within the 6 bit space. + * + * A 6 or 8 bit computer use the CDC1604DashP6.__ESC to use these 64 control codes. * * A 18 or 144 bit computer uses this direct as the second 64 part page. (thus number 64 to 128) * @@ -33,53 +35,100 @@ package org.x4o.o2o; * @version 1.0 Dec 24, 2024 */ public enum CDC1604DashP6DEC { - - - /// Reserved so that 6 and 8 bit systems can used P6._NUL for termination. - _RESERVED0(), - /// Encode 21 bit unicode-1 code point ?? - _RESERVED1_UNICODE1(), - _RESERVED2(), - _RESERVED3(), - /// Unicode-4 is 72 bit stroke blocks, which are 12 P6 code points to align. - /// _WORD_ESC + _TEST_UNICODE4 + + manyStrokeBlocks - _RESERVED4_UNICODE4(), - _RESERVED5(), - // block line for first 6 P6 code point to keep non-printable chars free on 6 bit computers. - - _ESC_TERMINATOR(), // ESC \ 0x9C ST String Terminator + RESERVED___NUL, + RESERVED___PIE, + RESERVED___GLUE, + RESERVED___ESC, + RESERVED__LINE, + RESERVED__SPACE, + UNDEFINED__QUESTION, + UNDEFINED__EXCLAMATION, + UNDEFINED__TAG_CURLY_LEFT, + UNDEFINED__TAG_SQUARE_LEFT, + UNDEFINED__TAG_ROUND_LEFT, + UNDEFINED__TAG_COMPARE_LEFT, + UNDEFINED__TAG_CURLY_RIGHT, + UNDEFINED__TAG_SQUARE_RIGHT, + UNDEFINED__TAG_ROUND_RIGHT, + UNDEFINED__TAG_COMPARE_RIGHT, + UNDEFINED___TILDE, + UNDEFINED___PLUS, + UNDEFINED___MINUS, + UNDEFINED___ASTERISK, + UNDEFINED___COMMA, + UNDEFINED___DOT, + UNDEFINED___COLON, + UNDEFINED___SEMICOLON, + UNDEFINED___APOSTROPHE, + UNDEFINED___QUOTATION, + UNDEFINED___BACKTICK, + UNDEFINED___CARET, + UNDEFINED___EQUALS, + UNDEFINED___HASH, + UNDEFINED___DOLLAR, + UNDEFINED___PERCENT, + UNDEFINED__BAR_VERTICAL, + UNDEFINED__BAR_UNDER, + UNDEFINED__BAR_V_LEFT, + UNDEFINED__BAR_V_RIGHT, + UNDEFINED___AT, + UNDEFINED__T001_A, + UNDEFINED__T002_B, + UNDEFINED__T003_C, + UNDEFINED__T004_D, + UNDEFINED__T005_E, + UNDEFINED__T006_F, + UNDEFINED__T007_G, + UNDEFINED__T008_H, + UNDEFINED__T009_I, + UNDEFINED__T010_J, + UNDEFINED__T011_K, + UNDEFINED__T012_L, + UNDEFINED__T013_M, + UNDEFINED__T014_N, + UNDEFINED__T015_O, + UNDEFINED__T016_P, + UNDEFINED__T017_Q, + UNDEFINED__T018_R, + UNDEFINED__T019_S, + UNDEFINED__T020_T, + UNDEFINED__T021_U, + UNDEFINED__T022_V, + UNDEFINED__T023_W, + UNDEFINED__T024_X, + UNDEFINED__T025_Y, + UNDEFINED__T026_Z, + UNDEFINED__T027_AMPERSAND, + // Encode 21 bit unicode-1 code point ?? + // _RESERVED1_UNICODE1(), // todo move down + // Unicode-4 is 72 bit stroke blocks, which are 12 P6 code points to align. + // _WORD_ESC + _TEST_UNICODE4 + + manyStrokeBlocks + // _RESERVED4_UNICODE4(), // todo move down + // + // Historical glue for ansi codes, TODO: put on P6 index number of '[' and ']' + // TAG_ANSI_UPPER, + // TAG_ANSI_LOWER, + // + // used for bell,backspace,tab etc, TODO: fix free index number in current ansi escape codes. + // TAG_ANSI_C0, + // // TODO: Re-impl simple like VT52 see https://en.wikipedia.org/wiki/ANSI_escape_code // - ESC [ // - any number (including none) of "parameter bytes" in the range 0x30–0x3F (ASCII 0–9:;<=>?), // - any number of "intermediate bytes" in the range 0x20–0x2F (ASCII space and !"#$%&'()*+,-./), // - finally by a single "final byte" in the range 0x40–0x7E (ASCII @A–Z[\]^_`a–z{|}~) - - - /// Moves cursor up. (test) - /// On 8 bit ansi system this takes ESC+[+1+A = 4 bytes/32bit to move 1 up - /// with terminator codes; - /// On 6 bit P6DEC system with takes _ESC+_CSI_CURSOR_UP+_WM+_I+_A+_ESC+_ESC_TERMINATOR = 7*P6 or 42 bits - /// On 18 bit P6DEC system with takes _CSI_CURSOR_UP+_WM+_I+_A+_ESC_TERMINATOR = 5*18 or 90 bits - /// with unsigned native packet integer; (but limits value) - /// On 6 bit P6DEC system with takes _ESC+_CSI_CURSOR_UP_NP+0x1+_ESC+_ESC_TERMINATOR = 5*P6 or 30 bits - /// On 18 bit P6DEC system with takes _CSI_CURSOR_UP_NP+0x1+_ESC_TERMINATOR = 3*18 or 54 bits - /// TODO: Think of better encoding system - _CSI_CURSOR_UP('A'), - _CSI_CURSOR_UP_NP() + // + // Try reading ISO/IEC 2022, see "XTerm Control Sequences" for what is old and what is used; + // https://invisible-island.net/xterm/ctlseqs/ctlseqs.html + // + // Moves cursor up. (test) + // On 8 bit ansi system this takes ESC+[+1+A = 4 bytes/32bit to move 1 up + // with terminator codes; + // On 6 bit P6DEC system with takes __ESC+TAG_SQUARE_LEFT+__PIE+T009_I+T001_A + // On 18 bit P6DEC system with takes TAG_ANSI_UPPER+__PIE+T009_I+T001_A ; - private final Character csiPostfix; - private CDC1604DashP6DEC() { - this(null); - } - - private CDC1604DashP6DEC(Character csiPostfix) { - this.csiPostfix = csiPostfix; - } - - public Character csiPostFix() { - return csiPostfix; } } diff --git a/nx01-x4o-o2o/src/test/java/org/x4o/o2o/CDC1604DashP6Test.java b/nx01-x4o-o2o/src/test/java/org/x4o/o2o/CDC1604DashP6Test.java index 901a18b..9a3532e 100644 --- a/nx01-x4o-o2o/src/test/java/org/x4o/o2o/CDC1604DashP6Test.java +++ b/nx01-x4o-o2o/src/test/java/org/x4o/o2o/CDC1604DashP6Test.java @@ -61,12 +61,12 @@ public class CDC1604DashP6Test { Assertions.assertNotNull(cdc); Assertions.assertFalse(cdc.isEmpty()); Assertions.assertEquals(6, cdc.size()); - Assertions.assertEquals(CDC1604DashP6._F, cdc.get(0)); - Assertions.assertEquals(CDC1604DashP6._O, cdc.get(1)); - Assertions.assertEquals(CDC1604DashP6._O, cdc.get(2)); - Assertions.assertEquals(CDC1604DashP6._B, cdc.get(3)); - Assertions.assertEquals(CDC1604DashP6._A, cdc.get(4)); - Assertions.assertEquals(CDC1604DashP6._R, cdc.get(5)); + Assertions.assertEquals(CDC1604DashP6.T006_F, cdc.get(0)); + Assertions.assertEquals(CDC1604DashP6.T015_O, cdc.get(1)); + Assertions.assertEquals(CDC1604DashP6.T015_O, cdc.get(2)); + Assertions.assertEquals(CDC1604DashP6.T002_B, cdc.get(3)); + Assertions.assertEquals(CDC1604DashP6.T001_A, cdc.get(4)); + Assertions.assertEquals(CDC1604DashP6.T018_R, cdc.get(5)); String out = CDC1604DashP6.convertToUnicode(cdc); Assertions.assertEquals("FOOBAR", out); @@ -78,22 +78,22 @@ public class CDC1604DashP6Test { Assertions.assertNotNull(cdc); Assertions.assertFalse(cdc.isEmpty()); Assertions.assertEquals(16, cdc.size()); - Assertions.assertEquals(CDC1604DashP6._WORD_NUMBER, cdc.get(0)); - Assertions.assertEquals(CDC1604DashP6._A, cdc.get(1)); - Assertions.assertEquals(CDC1604DashP6._A, cdc.get(2)); // 0 - Assertions.assertEquals(CDC1604DashP6._WORD_NUMBER, cdc.get(3)); - Assertions.assertEquals(CDC1604DashP6._I, cdc.get(4)); - Assertions.assertEquals(CDC1604DashP6._A, cdc.get(5)); // 1 - Assertions.assertEquals(CDC1604DashP6._B, cdc.get(6)); // 2 - Assertions.assertEquals(CDC1604DashP6._WORD_NUMBER, cdc.get(7)); - Assertions.assertEquals(CDC1604DashP6._A, cdc.get(8)); - Assertions.assertEquals(CDC1604DashP6._A, cdc.get(9)); // 0 - Assertions.assertEquals(CDC1604DashP6._WORD_NUMBER, cdc.get(10)); - Assertions.assertEquals(CDC1604DashP6._I, cdc.get(11)); - Assertions.assertEquals(CDC1604DashP6._A, cdc.get(12)); // 1 - Assertions.assertEquals(CDC1604DashP6._C, cdc.get(13)); // 3 - Assertions.assertEquals(CDC1604DashP6._C, cdc.get(14)); // 3 - Assertions.assertEquals(CDC1604DashP6._G, cdc.get(15)); // 7 + Assertions.assertEquals(CDC1604DashP6.__PIE, cdc.get(0)); + Assertions.assertEquals(CDC1604DashP6.T001_A, cdc.get(1)); + Assertions.assertEquals(CDC1604DashP6.T001_A, cdc.get(2)); // 0 + Assertions.assertEquals(CDC1604DashP6.__PIE, cdc.get(3)); + Assertions.assertEquals(CDC1604DashP6.T009_I, cdc.get(4)); + Assertions.assertEquals(CDC1604DashP6.T001_A, cdc.get(5)); // 1 + Assertions.assertEquals(CDC1604DashP6.T002_B, cdc.get(6)); // 2 + Assertions.assertEquals(CDC1604DashP6.__PIE, cdc.get(7)); + Assertions.assertEquals(CDC1604DashP6.T001_A, cdc.get(8)); + Assertions.assertEquals(CDC1604DashP6.T001_A, cdc.get(9)); // 0 + Assertions.assertEquals(CDC1604DashP6.__PIE, cdc.get(10)); + Assertions.assertEquals(CDC1604DashP6.T009_I, cdc.get(11)); + Assertions.assertEquals(CDC1604DashP6.T001_A, cdc.get(12)); // 1 + Assertions.assertEquals(CDC1604DashP6.T003_C, cdc.get(13)); // 3 + Assertions.assertEquals(CDC1604DashP6.T003_C, cdc.get(14)); // 3 + Assertions.assertEquals(CDC1604DashP6.T007_G, cdc.get(15)); // 7 String out = CDC1604DashP6.convertToUnicode(cdc); Assertions.assertEquals("01201337", out); @@ -102,13 +102,13 @@ public class CDC1604DashP6Test { @Test public void testNumberPieOutOfRange() throws Exception { List cdc = new ArrayList<>(); - cdc.add(CDC1604DashP6._WORD_NUMBER); - cdc.add(CDC1604DashP6._A); - cdc.add(CDC1604DashP6._B); // = B - cdc.add(CDC1604DashP6._WORD_NUMBER); - cdc.add(CDC1604DashP6._I); - cdc.add(CDC1604DashP6._C); // = 3 - cdc.add(CDC1604DashP6._J); // = J + cdc.add(CDC1604DashP6.__PIE); + cdc.add(CDC1604DashP6.T001_A); + cdc.add(CDC1604DashP6.T002_B); // = B + cdc.add(CDC1604DashP6.__PIE); + cdc.add(CDC1604DashP6.T009_I); + cdc.add(CDC1604DashP6.T003_C); // = 3 + cdc.add(CDC1604DashP6.T010_J); // = J String out = CDC1604DashP6.convertToUnicode(cdc); Assertions.assertEquals("B3J", out); @@ -120,14 +120,14 @@ public class CDC1604DashP6Test { Assertions.assertNotNull(cdc); Assertions.assertFalse(cdc.isEmpty()); Assertions.assertEquals(8, cdc.size()); - Assertions.assertEquals(CDC1604DashP6._A, cdc.get(0)); - Assertions.assertEquals(CDC1604DashP6._WORD_LINE, cdc.get(1)); - Assertions.assertEquals(CDC1604DashP6._B, cdc.get(2)); - Assertions.assertEquals(CDC1604DashP6._WORD_LINE, cdc.get(3)); - Assertions.assertEquals(CDC1604DashP6._C, cdc.get(4)); - Assertions.assertEquals(CDC1604DashP6._WORD_LINE, cdc.get(5)); - Assertions.assertEquals(CDC1604DashP6._D, cdc.get(6)); - Assertions.assertEquals(CDC1604DashP6._WORD_LINE, cdc.get(7)); + Assertions.assertEquals(CDC1604DashP6.T001_A, cdc.get(0)); + Assertions.assertEquals(CDC1604DashP6.__LINE, cdc.get(1)); + Assertions.assertEquals(CDC1604DashP6.T002_B, cdc.get(2)); + Assertions.assertEquals(CDC1604DashP6.__LINE, cdc.get(3)); + Assertions.assertEquals(CDC1604DashP6.T003_C, cdc.get(4)); + Assertions.assertEquals(CDC1604DashP6.__LINE, cdc.get(5)); + Assertions.assertEquals(CDC1604DashP6.T004_D, cdc.get(6)); + Assertions.assertEquals(CDC1604DashP6.__LINE, cdc.get(7)); String out = CDC1604DashP6.convertToUnicode(cdc); Assertions.assertEquals("A\nB\nC\nD\n", out);