Unix 旗帜司令部怎么了?
在某些UNIX和Linux版本中,有一个banner命令,通常是/usr/bin/banner,它可以输出如下出色的输出:Unix 旗帜司令部怎么了?,unix,standards,Unix,Standards,在某些UNIX和Linux版本中,有一个banner命令,通常是/usr/bin/banner,它可以输出如下出色的输出: ##### ####### # ##### # # # # # # # # # # # # # # # # # # ##### # # # # ### # # ####### # # # #
##### ####### # ##### # #
# # # # # # # # #
# # # # # # #
##### # # # # ###
# # ####### # # #
# # # # # # # # #
##### # # # ##### # #
在其他版本中,banner命令经常/usr/games/banner打印一个巨大的横幅,就像您在1980年使用Printshop制作的横幅一样,适合在生日派对上使用
我倾向于在我的脚本中使用横幅,但由于这个问题,它本质上是不可移植的。横幅是UNIX的一部分,为什么不是POSIX标准的一部分?这是BSD与SysV之间的一些差异,但为什么还没有解决
我知道有一个figlet复制了我喜欢的旗帜。但是我对这个命令的问题是可移植性。Banner应该是UNIX、IMHO的一部分,即使它们需要以不同的名称包含两个版本,但理想情况下,行为应该合并到一个命令中,并带有所需输出的选项
如果我使用banner,那么在脚本的可移植性方面,我是不是运气不佳?对于unix系统来说,它并不是真正必要的,我不知道为什么它会成为标准的一部分。标准制定机构应该关注许多其他更重要的事情 如果它在系统上不可用,您可以简单地安装它或构建一个等效的 debian上有一个横幅克隆,它有一个包含155行代码的c文件,其中大部分只是字形。可以在包页面上找到源代码。
用您选择的脚本语言构建另一个克隆应该不会太困难。因为在POSIX标准化时存在两种不同的行为,早在80年代末,标准中就省略了banner。这不是必要的,也没有一个流行的标准可以选择为“标准” 是的,如果你在剧本中使用横幅,你就不走运了;跨平台的行为不可靠。始终存在。提供unix、windows、dos、mac等的源代码。希望这能为您指明正确的方向
另外,还有一个,可以被认为是figlet++。bsdmainutils包版本8.0.13中的banner命令现在称为printerbanner,位于/usr/bin/printerbanner中。所需的banner是System V banner, 安装sysvbanner包以获取它,
至少在Ubuntu11上,没有什么比直C更能在Unices上移植了 你可能会发现我在这里的草稿比发行版的草稿更容易修改和扩展,因为如果没有其他内容的话,它隐含着版权。此代码设计为易于阅读和理解,无需任何注释 [不要害怕那个大数组,实际代码非常短。在最底部有用于可视化和构建位图的注释。如果你能理解为什么空格字符被编码为反斜杠,那么你就理解了整个事情。其余的只是填写字母表。]
下面是一个shell实现,它的灵感来自@luser-droog的代码。它与POSIX不兼容,但可与ksh93和bash一起使用,这使得它具有足够的可移植性,可用于大多数当前的Unix实现
#!/bin/ksh93
# or #!/bin/bash
A=$((1<<0))
B=$((1<<1))
C=$((1<<2))
D=$((1<<3))
E=$((1<<4))
F=$((1<<5))
G=$((1<<6))
H=$((1<<7))
function outLine
{
typeset r=0 scan
for scan
do
typeset l=${#scan}
typeset line=0
for ((p=0; p<l; p++))
do
line="$((line+${scan:$p:1}))"
done
for ((column=0; column<8; column++))
do
[[ $((line & (1<<column))) == 0 ]] && n=" " || n="#"
raw[r]="${raw[r]}$n"
done
r=$((r+1))
done
}
function outChar
{
case "$1" in
(" ") outLine "" "" "" "" "" "" "" "" ;;
("0") outLine "BCDEF" "AFG" "AEG" "ADG" "ACG" "ABG" "BCDEF" "" ;;
("1") outLine "F" "EF" "F" "F" "F" "F" "F" "" ;;
("2") outLine "BCDEF" "AG" "G" "CDEF" "B" "A" "ABCDEFG" "" ;;
("3") outLine "BCDEF" "AG" "G" "CDEF" "G" "AG" "BCDEF" "" ;;
("4") outLine "AF" "AF" "AF" "BCDEFG" "F" "F" "F" "" ;;
("5") outLine "ABCDEFG" "A" "A" "ABCDEF" "G" "AG" "BCDEF" "" ;;
("6") outLine "BCDEF" "A" "A" "BCDEF" "AG" "AG" "BCDEF" "" ;;
("7") outLine "BCDEFG" "G" "F" "E" "D" "C" "B" "" ;;
("8") outLine "BCDEF" "AG" "AG" "BCDEF" "AG" "AG" "BCDEF" "" ;;
("9") outLine "BCDEF" "AG" "AG" "BCDEF" "G" "G" "BCDEF" "" ;;
("a") outLine "" "" "BCDE" "F" "BCDEF" "AF" "BCDEG" "" ;;
("b") outLine "B" "B" "BCDEF" "BG" "BG" "BG" "ACDEF" "" ;;
("c") outLine "" "" "CDE" "BF" "A" "BF" "CDE" "" ;;
("d") outLine "F" "F" "BCDEF" "AF" "AF" "AF" "BCDEG" "" ;;
("e") outLine "" "" "BCDE" "AF" "ABCDEF" "A" "BCDE" "" ;;
("f") outLine "CDE" "B" "B" "ABCD" "B" "B" "B" "" ;;
("g") outLine "" "" "BCDEG" "AF" "AF" "BCDE" "F" "BCDE" ;;
("h") outLine "B" "B" "BCDE" "BF" "BF" "BF" "ABF" "" ;;
("i") outLine "C" "" "BC" "C" "C" "C" "ABCDE" "" ;;
("j") outLine "D" "" "CD" "D" "D" "D" "AD" "BC" ;;
("k") outLine "B" "BE" "BD" "BC" "BD" "BE" "ABEF" "" ;;
("l") outLine "AB" "B" "B" "B" "B" "B" "ABC" "" ;;
("m") outLine "" "" "ACEF" "ABDG" "ADG" "ADG" "ADG" "" ;;
("n") outLine "" "" "BDE" "BCF" "BF" "BF" "BF" "" ;;
("o") outLine "" "" "BCDE" "AF" "AF" "AF" "BCDE" "" ;;
("p") outLine "" "" "ABCDE" "BF" "BF" "BCDE" "B" "AB" ;;
("q") outLine "" "" "BCDEG" "AF" "AF" "BCDE" "F" "FG" ;;
("r") outLine "" "" "ABDE" "BCF" "B" "B" "AB" "" ;;
("s") outLine "" "" "BCDE" "A" "BCDE" "F" "ABCDE" "" ;;
("t") outLine "C" "C" "ABCDE" "C" "C" "C" "DE" "" ;;
("u") outLine "" "" "AF" "AF" "AF" "AF" "BCDEG" "" ;;
("v") outLine "" "" "AG" "BF" "BF" "CE" "D" "" ;;
("w") outLine "" "" "AG" "AG" "ADG" "ADG" "BCEF" "" ;;
("x") outLine "" "" "AF" "BE" "CD" "BE" "AF" "" ;;
("y") outLine "" "" "BF" "BF" "BF" "CDE" "E" "BCD" ;;
("z") outLine "" "" "ABCDEF" "E" "D" "C" "BCDEFG" "" ;;
("A") outLine "D" "CE" "BF" "AG" "ABCDEFG" "AG" "AG" "" ;;
("B") outLine "ABCDE" "AF" "AF" "ABCDE" "AF" "AF" "ABCDE" "" ;;
("C") outLine "CDE" "BF" "A" "A" "A" "BF" "CDE" "" ;;
("D") outLine "ABCD" "AE" "AF" "AF" "AF" "AE" "ABCD" "" ;;
("E") outLine "ABCDEF" "A" "A" "ABCDE" "A" "A" "ABCDEF" "" ;;
("F") outLine "ABCDEF" "A" "A" "ABCDE" "A" "A" "A" "" ;;
("G") outLine "CDE" "BF" "A" "A" "AEFG" "BFG" "CDEG" "" ;;
("H") outLine "AG" "AG" "AG" "ABCDEFG" "AG" "AG" "AG" "" ;;
("I") outLine "ABCDE" "C" "C" "C" "C" "C" "ABCDE" "" ;;
("J") outLine "BCDEF" "D" "D" "D" "D" "BD" "C" "" ;;
("K") outLine "AF" "AE" "AD" "ABC" "AD" "AE" "AF" "" ;;
("L") outLine "A" "A" "A" "A" "A" "A" "ABCDEF" "" ;;
("M") outLine "ABFG" "ACEG" "ADG" "AG" "AG" "AG" "AG" "" ;;
("N") outLine "AG" "ABG" "ACG" "ADG" "AEG" "AFG" "AG" "" ;;
("O") outLine "CDE" "BF" "AG" "AG" "AG" "BF" "CDE" "" ;;
("P") outLine "ABCDE" "AF" "AF" "ABCDE" "A" "A" "A" "" ;;
("Q") outLine "CDE" "BF" "AG" "AG" "ACG" "BDF" "CDE" "FG" ;;
("R") outLine "ABCD" "AE" "AE" "ABCD" "AE" "AF" "AF" "" ;;
("S") outLine "CDE" "BF" "C" "D" "E" "BF" "CDE" "" ;;
("T") outLine "ABCDEFG" "D" "D" "D" "D" "D" "D" "" ;;
("U") outLine "AG" "AG" "AG" "AG" "AG" "BF" "CDE" "" ;;
("V") outLine "AG" "AG" "BF" "BF" "CE" "CE" "D" "" ;;
("W") outLine "AG" "AG" "AG" "AG" "ADG" "ACEG" "BF" "" ;;
("X") outLine "AG" "AG" "BF" "CDE" "BF" "AG" "AG" "" ;;
("Y") outLine "AG" "AG" "BF" "CE" "D" "D" "D" "" ;;
("Z") outLine "ABCDEFG" "F" "E" "D" "C" "B" "ABCDEFG" "" ;;
(".") outLine "" "" "" "" "" "" "D" "" ;;
(",") outLine "" "" "" "" "" "E" "E" "D" ;;
(":") outLine "" "" "" "" "D" "" "D" "" ;;
("!") outLine "D" "D" "D" "D" "D" "" "D" "" ;;
("/") outLine "G" "F" "E" "D" "C" "B" "A" "" ;;
("\\") outLine "A" "B" "C" "D" "E" "F" "G" "" ;;
("|") outLine "D" "D" "D" "D" "D" "D" "D" "D" ;;
("+") outLine "" "D" "D" "BCDEF" "D" "D" "" "" ;;
("-") outLine "" "" "" "BCDEF" "" "" "" "" ;;
("*") outLine "" "BDF" "CDE" "D" "CDE" "BDF" "" "" ;;
("=") outLine "" "" "BCDEF" "" "BCDEF" "" "" "" ;;
(*) outLine "ABCDEFGH" "AH" "AH" "AH" "AH" "AH" "AH" "ABCDEFGH" ;;
esac
}
function outArg
{
typeset l=${#1} c r
for ((c=0; c<l; c++))
do
outChar "${1:$c:1}"
done
echo
[ -z "$COLUMNS" ] && COLUMNS=$(tput cols 2>/dev/null)
for ((r=0; r<8; r++))
do
printf "%-*.*s\n" "${COLUMNS:-80}" "${COLUMNS:-80}" "${raw[r]}"
raw[r]=""
done
}
for i
do
outArg "$i"
echo
done
如果有人感兴趣,这里有一个Java版本。它生成一个字符串,由您决定是使用System.out.println还是您选择的日志框架
public class Banner {
public static String print(String s, char stdCh) {
StringBuilder sb = new StringBuilder();
for (int row = 0; row < 8; row++) {
sb.append('\n');
for (char ch : s.toCharArray()) {
int enc = CHAR_LIST.indexOf(ch);
if (enc < 0) continue;
for (int col = 0; col < 8; col++) {
sb.append(isPresent(row, enc, col) ? charToPrint(ch, stdCh) : ' ');
}
}
}
return sb.append('\n').toString();
}
private static char charToPrint(char ch, char stdCh) {
return ch != ' ' && stdCh != 0 ? stdCh : ch;
}
private static boolean isPresent(int row, int enc, int col) {
return (map[enc][row] & 1 << col) != 0;
}
// @formatter:off
private static final String CHAR_LIST = " 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,:!/\\|+-*=";
private static int A = 1<<0;
private static int B = 1<<1;
private static int C = 1<<2;
private static int D = 1<<3;
private static int E = 1<<4;
private static int F = 1<<5;
private static int G = 1<<6;
private static int H = 1<<7;
// define the 'font'
private static int[][] map = new int[][] {
/* */ {A, B, C, D, E, F, G, H},
/*0*/ {B|C|D|E|F, A|F|G, A|E|G, A|D|G, A|C|G, A|B|G, B|C|D|E|F, 0},
/*1*/ {G, F|G, G, G, G, G, G, 0},
/*2*/ {B|C|D|E|F, A|G, G, C|D|E|F, B, A, A|B|C|D|E|F|G, 0},
/*3*/ {B|C|D|E|F, A|G, G, C|D|E|F, G, A|G, B|C|D|E|F, 0},
/*4*/ {A|F, A|F, A|F, B|C|D|E|F|G, F, F, F, 0},
/*5*/ {A|B|C|D|E|F|G, A, A, B|C|D|E|F, G, A|G, B|C|D|E|F, 0},
/*6*/ {B|C|D|E|F, A, A, A|B|C|D|E|F, A|G, A|G, B|C|D|E|F, 0},
/*7*/ {B|C|D|E|F|G, G, F, E, D, C, B, 0},
/*8*/ {B|C|D|E|F, A|G, A|G, B|C|D|E|F, A|G, A|G, B|C|D|E|F, 0},
/*9*/ {B|C|D|E|F, A|G, A|G, B|C|D|E|F|G, G, G, B|C|D|E|F, 0},
/*a*/ {0, 0, B|C|D|E, F, B|C|D|E|F, A|F, B|C|D|E|G, 0},
/*b*/ {B, B, B, B|C|D|E|F, B|G, B|G, A|C|D|E|F, 0},
/*c*/ {0, 0, C|D|E, B|F, A, A, B|F, C|D|E},
/*d*/ {F, F, F, B|C|D|E|F, A|F, A|F, B|C|D|E|G, 0},
/*e*/ {0, 0, B|C|D|E, A|F, A|B|C|D|E|F, A, B|C|D|E, 0},
/*f*/ {C|D|E, B, B, A|B|C|D, B, B, B, 0},
/*g*/ {0, 0, B|C|D|E|G, A|F, A|F, B|C|D|E, F, B|C|D|E},
/*h*/ {B, B, B, B|C|D|E, B|F, B|F, A|B|F, 0},
/*i*/ {0, C, 0, B|C, C, C, A|B|C|D|E, 0},
/*j*/ {0, D, 0, D, D, D, A|D, B|C},
/*k*/ {B, B|E, B|D, B|C, B|D, B|E, A|B|E|F, 0},
/*l*/ {A|B, B, B, B, B, B, A|B|C, 0},
/*m*/ {0, 0, 0, A|C|E|F, A|B|D|G, A|D|G, A|D|G, 0},
/*n*/ {0, 0, 0, B|D|E, B|C|F, B|F, B|F, 0},
/*o*/ {0, 0, B|C|D|E, A|F, A|F, A|F, B|C|D|E, 0},
/*p*/ {0, 0, A|B|C|D|E, B|F, B|F, B|C|D|E, B, A|B},
/*q*/ {0, 0, B|C|D|E|G, A|F, A|F, B|C|D|E, F, F|G},
/*r*/ {0, 0, A|B|D|E, B|C|F, B, B, A|B, 0},
/*s*/ {0, 0, B|C|D|E, A, B|C|D|E, F, A|B|C|D|E, 0},
/*t*/ {0, C, C, A|B|C|D|E, C, C, D|E, 0},
/*u*/ {0, 0, A|F, A|F, A|F, A|F, B|C|D|E|G, 0},
/*v*/ {0, 0, A|G, B|F, B|F, C|E, D, 0},
/*w*/ {0, 0, A|G, A|G, A|D|G, A|D|G, B|C|E|F, 0},
/*x*/ {0, 0, A|F, B|E, C|D, B|E, A|F, 0},
/*y*/ {0, 0, B|F, B|F, B|F, C|F, A|D|E, B|C|D},
/*z*/ {0, 0, A|B|C|D|E|F, E, D, C, B|C|D|E|F|G, 0},
/*A*/ {D, C|E, B|F, A|G, A|B|C|D|E|F|G, A|G, A|G, 0},
/*B*/ {A|B|C|D|E, A|F, A|F, A|B|C|D|E, A|F, A|F, A|B|C|D|E, 0},
/*C*/ {C|D|E, B|F, A, A, A, B|F, C|D|E, 0},
/*D*/ {A|B|C|D, A|E, A|F, A|F, A|F, A|E, A|B|C|D, 0},
/*E*/ {A|B|C|D|E|F, A, A, A|B|C|D|E, A, A, A|B|C|D|E|F, 0},
/*F*/ {A|B|C|D|E|F, A, A, A|B|C|D|E, A, A, A, 0},
/*G*/ {C|D|E, B|F, A, A, A|E|F|G, B|F|G, C|D|E|G, 0},
/*H*/ {A|G, A|G, A|G, A|B|C|D|E|F|G, A|G, A|G, A|G, 0},
/*I*/ {A|B|C|D|E, C, C, C, C, C, A|B|C|D|E, 0},
/*J*/ {A|B|C|D|E, C, C, C, C, C, A|C, B},
/*K*/ {A|F, A|E, A|D, A|B|C, A|D, A|E, A|F, 0},
/*L*/ {A, A, A, A, A, A, A|B|C|D|E|F, 0},
/*M*/ {A|B|F|G, A|C|E|G, A|D|G, A|G, A|G, A|G, A|G, 0},
/*N*/ {A|G, A|B|G, A|C|G, A|D|G, A|E|G, A|F|G, A|G, 0},
/*O*/ {C|D|E, B|F, A|G, A|G, A|G, B|F, C|D|E, 0},
/*P*/ {A|B|C|D, A|E, A|E, A|B|C|D, A, A, A, 0},
/*Q*/ {C|D|E, B|F, A|G, A|G, A|C|G, B|D|F, C|D|E, F|G},
/*R*/ {A|B|C|D, A|E, A|E, A|B|C|D, A|E, A|F, A|F, 0},
/*S*/ {C|D|E, B|F, C, D, E, B|F, C|D|E, 0},
/*T*/ {A|B|C|D|E|F|G, D, D, D, D, D, D, 0},
/*U*/ {A|G, A|G, A|G, A|G, A|G, B|F, C|D|E, 0},
/*V*/ {A|G, A|G, B|F, B|F, C|E, C|E, D, 0},
/*W*/ {A|G, A|G, A|G, A|G, A|D|G, A|C|E|G, B|F, 0},
/*X*/ {A|G, A|G, B|F, C|D|E, B|F, A|G, A|G, 0},
/*Y*/ {A|G, A|G, B|F, C|E, D, D, D, 0},
/*Z*/ {A|B|C|D|E|F|G, F, E, D, C, B, A|B|C|D|E|F|G, 0},
/*.*/ {0, 0, 0, 0, 0, 0, D, 0},
/*,*/ {0, 0, 0, 0, 0, E, E, D},
/*:*/ {0, 0, 0, 0, D, 0, D, 0},
/*!*/ {D, D, D, D, D, 0, D, 0},
/*/ */ {G, F, E, D, C, B, A, 0},
/*\\*/ {A, B, C, D, E, F, G, 0},
/*|*/ {D, D, D, D, D, D, D, D},
/*+*/ {0, D, D, B|C|D|E|F, D, D, 0, 0},
/*-*/ {0, 0, 0, B|C|D|E|F, 0, 0, 0, 0},
/***/ {0, B|D|F, C|D|E, D, C|D|E, B|D|F, 0, 0},
/*=*/ {0, 0, B|C|D|E|F, 0, B|C|D|E|F, 0, 0, 0}
};
/*
01234567 01234567 01234567 01234567 01234567 01234567
0 ##### # ### #
1 # # # # #
2 # # #### # # #### # #
3 ##### # ##### ##### # # ####
4 # # ##### # # # # # # #
5 # # # # # # # #### # #
6 ##### #### # # #### # # ## #
7 ####
*/
/*
01234567 01234567 01234567 01234567 01234567 01234567
0 #
1 # # # #
2 # # # ##### #### #
3 ## # ## ### ## # # # #
4 # # # # # # # # # # #
5 # # # # # # # #### ####
6 ##### # # ## ## ## # # # #
7 ## ## ##
*/
/*
01234567 01234567 01234567 01234567 01234567 01234567
0
1
2 ## ## #### # # # # ###### # #
3 ## # # # # # # # # #
4 # #### ## # # # # # #
5 # # # # # # # # # #
6 ## ##### # # # ## ###### ## ##
7 ###
*/
/*
01234567 01234567 01234567 01234567 01234567 01234567
0 # ##### ### #### ##### # #
1 # # # # # # # # # # #
2 # # # # # # # # # #
3 # # ##### # # # # # #
4 ##### # # # # # # # # #
5 # # # # # # # # # # # # #
6 # # ##### ### #### # # # #
7 #
*/
// @formatter:on
}
这很酷,但我认为propoent正在寻找一些他们可以在构建期间放入makefiles的东西,用作构建报告等的标题。这真的很酷!总有一天,我会把这个来源作为一个有趣的项目来挑选。实际上有一种便携的方式。。。自从我上次想到这个话题以来,我就用awk脚本写了一个横幅命令有一天当我在那台计算机上的时候,我会发布它。我考虑过添加一个选项,将显示字符设置为源字符以外的其他字符,如或*,但是我必须更改标志符号的空格!我之所以给你投票,是因为我以前不知道“unix”的复数形式:-Ubuntu12.04:apt get install sysvbanner适用于meA纯Perl版本是我在最后一个for循环之前添加了这行代码:COLUMNS=$/usr/bin/tput cols,以使它自动适合我的xterm大小,它比80 cols大得多。@MarkLakata谢谢,为处理案例列而更新的答案不是已设置的,而是可设置的。
public class Banner {
public static String print(String s, char stdCh) {
StringBuilder sb = new StringBuilder();
for (int row = 0; row < 8; row++) {
sb.append('\n');
for (char ch : s.toCharArray()) {
int enc = CHAR_LIST.indexOf(ch);
if (enc < 0) continue;
for (int col = 0; col < 8; col++) {
sb.append(isPresent(row, enc, col) ? charToPrint(ch, stdCh) : ' ');
}
}
}
return sb.append('\n').toString();
}
private static char charToPrint(char ch, char stdCh) {
return ch != ' ' && stdCh != 0 ? stdCh : ch;
}
private static boolean isPresent(int row, int enc, int col) {
return (map[enc][row] & 1 << col) != 0;
}
// @formatter:off
private static final String CHAR_LIST = " 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,:!/\\|+-*=";
private static int A = 1<<0;
private static int B = 1<<1;
private static int C = 1<<2;
private static int D = 1<<3;
private static int E = 1<<4;
private static int F = 1<<5;
private static int G = 1<<6;
private static int H = 1<<7;
// define the 'font'
private static int[][] map = new int[][] {
/* */ {A, B, C, D, E, F, G, H},
/*0*/ {B|C|D|E|F, A|F|G, A|E|G, A|D|G, A|C|G, A|B|G, B|C|D|E|F, 0},
/*1*/ {G, F|G, G, G, G, G, G, 0},
/*2*/ {B|C|D|E|F, A|G, G, C|D|E|F, B, A, A|B|C|D|E|F|G, 0},
/*3*/ {B|C|D|E|F, A|G, G, C|D|E|F, G, A|G, B|C|D|E|F, 0},
/*4*/ {A|F, A|F, A|F, B|C|D|E|F|G, F, F, F, 0},
/*5*/ {A|B|C|D|E|F|G, A, A, B|C|D|E|F, G, A|G, B|C|D|E|F, 0},
/*6*/ {B|C|D|E|F, A, A, A|B|C|D|E|F, A|G, A|G, B|C|D|E|F, 0},
/*7*/ {B|C|D|E|F|G, G, F, E, D, C, B, 0},
/*8*/ {B|C|D|E|F, A|G, A|G, B|C|D|E|F, A|G, A|G, B|C|D|E|F, 0},
/*9*/ {B|C|D|E|F, A|G, A|G, B|C|D|E|F|G, G, G, B|C|D|E|F, 0},
/*a*/ {0, 0, B|C|D|E, F, B|C|D|E|F, A|F, B|C|D|E|G, 0},
/*b*/ {B, B, B, B|C|D|E|F, B|G, B|G, A|C|D|E|F, 0},
/*c*/ {0, 0, C|D|E, B|F, A, A, B|F, C|D|E},
/*d*/ {F, F, F, B|C|D|E|F, A|F, A|F, B|C|D|E|G, 0},
/*e*/ {0, 0, B|C|D|E, A|F, A|B|C|D|E|F, A, B|C|D|E, 0},
/*f*/ {C|D|E, B, B, A|B|C|D, B, B, B, 0},
/*g*/ {0, 0, B|C|D|E|G, A|F, A|F, B|C|D|E, F, B|C|D|E},
/*h*/ {B, B, B, B|C|D|E, B|F, B|F, A|B|F, 0},
/*i*/ {0, C, 0, B|C, C, C, A|B|C|D|E, 0},
/*j*/ {0, D, 0, D, D, D, A|D, B|C},
/*k*/ {B, B|E, B|D, B|C, B|D, B|E, A|B|E|F, 0},
/*l*/ {A|B, B, B, B, B, B, A|B|C, 0},
/*m*/ {0, 0, 0, A|C|E|F, A|B|D|G, A|D|G, A|D|G, 0},
/*n*/ {0, 0, 0, B|D|E, B|C|F, B|F, B|F, 0},
/*o*/ {0, 0, B|C|D|E, A|F, A|F, A|F, B|C|D|E, 0},
/*p*/ {0, 0, A|B|C|D|E, B|F, B|F, B|C|D|E, B, A|B},
/*q*/ {0, 0, B|C|D|E|G, A|F, A|F, B|C|D|E, F, F|G},
/*r*/ {0, 0, A|B|D|E, B|C|F, B, B, A|B, 0},
/*s*/ {0, 0, B|C|D|E, A, B|C|D|E, F, A|B|C|D|E, 0},
/*t*/ {0, C, C, A|B|C|D|E, C, C, D|E, 0},
/*u*/ {0, 0, A|F, A|F, A|F, A|F, B|C|D|E|G, 0},
/*v*/ {0, 0, A|G, B|F, B|F, C|E, D, 0},
/*w*/ {0, 0, A|G, A|G, A|D|G, A|D|G, B|C|E|F, 0},
/*x*/ {0, 0, A|F, B|E, C|D, B|E, A|F, 0},
/*y*/ {0, 0, B|F, B|F, B|F, C|F, A|D|E, B|C|D},
/*z*/ {0, 0, A|B|C|D|E|F, E, D, C, B|C|D|E|F|G, 0},
/*A*/ {D, C|E, B|F, A|G, A|B|C|D|E|F|G, A|G, A|G, 0},
/*B*/ {A|B|C|D|E, A|F, A|F, A|B|C|D|E, A|F, A|F, A|B|C|D|E, 0},
/*C*/ {C|D|E, B|F, A, A, A, B|F, C|D|E, 0},
/*D*/ {A|B|C|D, A|E, A|F, A|F, A|F, A|E, A|B|C|D, 0},
/*E*/ {A|B|C|D|E|F, A, A, A|B|C|D|E, A, A, A|B|C|D|E|F, 0},
/*F*/ {A|B|C|D|E|F, A, A, A|B|C|D|E, A, A, A, 0},
/*G*/ {C|D|E, B|F, A, A, A|E|F|G, B|F|G, C|D|E|G, 0},
/*H*/ {A|G, A|G, A|G, A|B|C|D|E|F|G, A|G, A|G, A|G, 0},
/*I*/ {A|B|C|D|E, C, C, C, C, C, A|B|C|D|E, 0},
/*J*/ {A|B|C|D|E, C, C, C, C, C, A|C, B},
/*K*/ {A|F, A|E, A|D, A|B|C, A|D, A|E, A|F, 0},
/*L*/ {A, A, A, A, A, A, A|B|C|D|E|F, 0},
/*M*/ {A|B|F|G, A|C|E|G, A|D|G, A|G, A|G, A|G, A|G, 0},
/*N*/ {A|G, A|B|G, A|C|G, A|D|G, A|E|G, A|F|G, A|G, 0},
/*O*/ {C|D|E, B|F, A|G, A|G, A|G, B|F, C|D|E, 0},
/*P*/ {A|B|C|D, A|E, A|E, A|B|C|D, A, A, A, 0},
/*Q*/ {C|D|E, B|F, A|G, A|G, A|C|G, B|D|F, C|D|E, F|G},
/*R*/ {A|B|C|D, A|E, A|E, A|B|C|D, A|E, A|F, A|F, 0},
/*S*/ {C|D|E, B|F, C, D, E, B|F, C|D|E, 0},
/*T*/ {A|B|C|D|E|F|G, D, D, D, D, D, D, 0},
/*U*/ {A|G, A|G, A|G, A|G, A|G, B|F, C|D|E, 0},
/*V*/ {A|G, A|G, B|F, B|F, C|E, C|E, D, 0},
/*W*/ {A|G, A|G, A|G, A|G, A|D|G, A|C|E|G, B|F, 0},
/*X*/ {A|G, A|G, B|F, C|D|E, B|F, A|G, A|G, 0},
/*Y*/ {A|G, A|G, B|F, C|E, D, D, D, 0},
/*Z*/ {A|B|C|D|E|F|G, F, E, D, C, B, A|B|C|D|E|F|G, 0},
/*.*/ {0, 0, 0, 0, 0, 0, D, 0},
/*,*/ {0, 0, 0, 0, 0, E, E, D},
/*:*/ {0, 0, 0, 0, D, 0, D, 0},
/*!*/ {D, D, D, D, D, 0, D, 0},
/*/ */ {G, F, E, D, C, B, A, 0},
/*\\*/ {A, B, C, D, E, F, G, 0},
/*|*/ {D, D, D, D, D, D, D, D},
/*+*/ {0, D, D, B|C|D|E|F, D, D, 0, 0},
/*-*/ {0, 0, 0, B|C|D|E|F, 0, 0, 0, 0},
/***/ {0, B|D|F, C|D|E, D, C|D|E, B|D|F, 0, 0},
/*=*/ {0, 0, B|C|D|E|F, 0, B|C|D|E|F, 0, 0, 0}
};
/*
01234567 01234567 01234567 01234567 01234567 01234567
0 ##### # ### #
1 # # # # #
2 # # #### # # #### # #
3 ##### # ##### ##### # # ####
4 # # ##### # # # # # # #
5 # # # # # # # #### # #
6 ##### #### # # #### # # ## #
7 ####
*/
/*
01234567 01234567 01234567 01234567 01234567 01234567
0 #
1 # # # #
2 # # # ##### #### #
3 ## # ## ### ## # # # #
4 # # # # # # # # # # #
5 # # # # # # # #### ####
6 ##### # # ## ## ## # # # #
7 ## ## ##
*/
/*
01234567 01234567 01234567 01234567 01234567 01234567
0
1
2 ## ## #### # # # # ###### # #
3 ## # # # # # # # # #
4 # #### ## # # # # # #
5 # # # # # # # # # #
6 ## ##### # # # ## ###### ## ##
7 ###
*/
/*
01234567 01234567 01234567 01234567 01234567 01234567
0 # ##### ### #### ##### # #
1 # # # # # # # # # # #
2 # # # # # # # # # #
3 # # ##### # # # # # #
4 ##### # # # # # # # # #
5 # # # # # # # # # # # # #
6 # # ##### ### #### # # # #
7 #
*/
// @formatter:on
}