在某些版本的UNIX和Linux中,有一个横幅命令(通常是/ usr / bin / banner)可以输出这样的输出:
##### ####### # ##### # #
# # # # # # # # #
# # # # # # #
##### # # # # ###
# # ####### # # #
# # # # # # # # #
##### # # # ##### # #
在其他版本中,banner命令(经常是/ usr / games / banner)会打印一张ENORMOUS横幅,就像你在1980年制作的Printshop一样,适合在生日派对上使用。
我倾向于喜欢在我的脚本中使用横幅,但由于这个问题它本身就是不可移植的。 UNIX中的“banner”部分是什么,为什么不是POSIX标准的一部分?这是一些BSD与SysV的区别,但为什么还没有解决?
我知道有一个figlet可以复制我喜欢的横幅。但我对这个命令的问题是可移植性。横幅应该成为UNIX,恕我直言的一部分,即使他们需要在不同的名称下包含这两个版本(尽管理想情况下行为应该合并到一个命令中,并带有一个选项期望的输出)。
如果我使用横幅广告,那么我在脚本的可移植性方面是不是很幸运?
答案 0 :(得分:15)
在Unices中,没有什么比直接C更容易移植。
您可能会发现我的粗略草稿比分发中的更容易修改和扩展(由于隐含的版权,如果没有别的)。此代码旨在易于阅读和理解,无需任何评论。
[不要害怕那个大阵列,实际代码很短。在最底部有“注释”,用于可视化和构建位图。如果你能理解为什么空格角色尽管被编码为反斜杠,那么你就能理解整个事物。其余的只是填写字母表。]
#include <stdio.h>
#include <string.h>
enum {
A = 1<<0,
B = 1<<1,
C = 1<<2,
D = 1<<3,
E = 1<<4,
F = 1<<5,
G = 1<<6,
H = 1<<7,
};
char vec[] = " 0123456789"
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
".,:!/\\|+-*=";
unsigned char map[sizeof(vec)][8] = {
/* */ {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}
};
int enc(int c) { return strchr(vec,c)-vec; }
void show(char *s) {
int row,col;
char *sp;
for (row=0; row<8; row++, putchar('\n'))
for (sp = s; *sp; sp++)
if (strchr(vec,*sp)!=NULL)
for (col=0; col<8; col++)
putchar(map[enc(*sp)][row] & 1<<col ? *sp:' ');
}
int main(int c,char **v) {
for (--c,++v;*v;v++,c--) show(*v);
return 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 #
*/
答案 1 :(得分:10)
所需的横幅是System V横幅, 安装sysvbanner包来获取它, 至少在Ubuntu 11上
答案 2 :(得分:8)
这是一个受@luser droog代码启发的shell实现。它不符合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
答案 3 :(得分:7)
答案 4 :(得分:6)
对于unix系统来说,这并不是必不可少的,我不确定为什么它会成为标准的一部分。还有许多其他事情可以说是标准制定机构应该关注的重点。
如果系统上没有它,您可以简单地安装它或构建一个等效的。
在debian上有一个横幅克隆,它有一个包含155行代码的单个c文件,其中大部分只是字形。源可以在包页面上找到。 http://packages.debian.org/testing/misc/sysvbanner
使用您选择的脚本语言构建另一个克隆应该不会太困难。
答案 5 :(得分:6)
因为当POSIX标准化时存在两种不同的行为,早在80年代后期,标准中省略了banner
。这不是必要的,并且没有一个普遍的标准可以选择作为“标准”。
是的,如果你在脚本中使用banner
,那你就不走运了。跨平台的行为不可靠。
答案 6 :(得分:4)
来自bsdmainutils软件包版本8.0.13的banner命令现在称为printerbanner,位于/ usr / bin / printerbanner。
答案 7 :(得分:1)
如果有人有兴趣,这里是Java版本。它会生成一个String,无论您使用的是System.out.println()还是您选择的Logging框架,它都取决于您。
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
}