commit: d20cc967c695e15d55cc4cfd197b00003f096e0e
parent 7ece8e7ec02bc251c7a297771cdd3538bfc24fcb
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Wed, 2 Jun 2021 09:54:53 +0200
bin/xcd: Put colors in the plain-text area as well
Diffstat:
M | bin/xcd.c | 78 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------ |
A | test-bin/xcd.fixture | 19 | +++++++++++++++++++ |
M | test-bin/xcd.t | 122 | +++---------------------------------------------------------------------------- |
3 files changed, 77 insertions(+), 142 deletions(-)
diff --git a/bin/xcd.c b/bin/xcd.c
@@ -10,26 +10,58 @@
#include <string.h> /* memset() */
#define LANODAN_XCD_RESET printf("[0m[48;2;0;0;0m");
-#define LANODAN_XCD_PRINT printf(" >%s<", line);
-void
-rainbow(double freq, unsigned char i)
+struct rgb
+{
+ uint8_t red, green, blue;
+};
+
+struct rgb
+rgb_char(unsigned char i)
{
+ double freq = 0.018;
+
if(i == 0)
{
- printf("[38;2;64;64;64m");
+ return (struct rgb){64, 64, 64};
}
else
{
- uint8_t red, green, blue;
+ struct rgb color;
double pi = 3.14159;
- red = sin(freq * i + 0 * pi / 3) * 127 + 128;
- green = sin(freq * i + 2 * pi / 3) * 127 + 128;
- blue = sin(freq * i + 4 * pi / 3) * 127 + 128;
+ color.red = sin(freq * i + 0 * pi / 3) * 127 + 128;
+ color.green = sin(freq * i + 2 * pi / 3) * 127 + 128;
+ color.blue = sin(freq * i + 4 * pi / 3) * 127 + 128;
+
+ return color;
+ }
+}
+
+void
+print_hex_rgb(unsigned char c)
+{
+ struct rgb color = rgb_char(c);
+ printf("[38;2;%d;%d;%dm%02hhx ", color.red, color.green, color.blue, c);
+}
+
+void
+print_plain_rgb(unsigned char *line, size_t len)
+{
+ unsigned char c;
- printf("[38;2;%02d;%02d;%02dm", red, green, blue);
+ LANODAN_XCD_RESET
+ printf(" >");
+
+ for(size_t i = 0; i < len; i++)
+ {
+ c = line[i];
+ struct rgb color = rgb_char(c);
+ printf("[38;2;%d;%d;%dm%c", color.red, color.green, color.blue, isprint(c) ? c : '.');
}
+
+ LANODAN_XCD_RESET
+ printf("<");
}
int
@@ -37,34 +69,32 @@ main(void)
{
int cols = 0;
int line_width = 16;
- double freq = 0.018;
char line[line_width];
unsigned char c;
unsigned int bytes = 0;
+ struct rgb pos_rgb;
memset(&line, 0, line_width);
LANODAN_XCD_RESET
- rainbow(freq, bytes);
- printf("%06x ", bytes);
+ pos_rgb = rgb_char(bytes);
+ printf("[38;2;%d;%d;%dm%06x ", pos_rgb.red, pos_rgb.green, pos_rgb.blue, bytes);
while(fread(&c, 1, 1, stdin) > 0)
{
if(cols >= line_width)
{
- cols = 0;
-
- LANODAN_XCD_RESET
- LANODAN_XCD_PRINT
+ print_plain_rgb(&line, (size_t)cols);
memset(&line, 0, line_width);
- rainbow(freq, bytes);
- printf("\n%06x ", bytes);
+ pos_rgb = rgb_char(bytes);
+ printf("\n[38;2;%d;%d;%dm%06x ", pos_rgb.red, pos_rgb.green, pos_rgb.blue, bytes);
+
+ cols = 0;
}
- rainbow(freq, c);
- printf("%02hhx ", c);
- line[cols] = isprint(c) ? c : '.';
+ print_hex_rgb(c);
+ line[cols] = c;
cols++;
bytes++;
@@ -75,10 +105,10 @@ main(void)
printf(" ");
LANODAN_XCD_RESET
- LANODAN_XCD_PRINT
+ print_plain_rgb(&line, (size_t)cols);
- rainbow(freq, bytes);
- printf("\n%06x\n", bytes);
+ pos_rgb = rgb_char(bytes);
+ printf("\n[38;2;%d;%d;%dm%06x\n", pos_rgb.red, pos_rgb.green, pos_rgb.blue, bytes);
LANODAN_XCD_RESET
return 0;
diff --git a/test-bin/xcd.fixture b/test-bin/xcd.fixture
@@ -0,0 +1,18 @@
+[0m[48;2;0;0;0m[38;2;64;64;64m000000 [38;2;64;64;64m00 [38;2;130;236;16m01 [38;2;132;235;15m02 [38;2;134;234;14m03 [38;2;137;233;13m04 [38;2;139;231;12m05 [38;2;141;230;11m06 [38;2;143;229;10m07 [38;2;146;227;10m08 [38;2;148;226;9m09 [38;2;150;224;8m0a [38;2;152;223;7m0b [38;2;155;221;6m0c [38;2;157;220;6m0d [38;2;159;218;5m0e [38;2;161;217;5m0f [0m[48;2;0;0;0m >[38;2;64;64;64m.[38;2;130;236;16m.[38;2;132;235;15m.[38;2;134;234;14m.[38;2;137;233;13m.[38;2;139;231;12m.[38;2;141;230;11m.[38;2;143;229;10m.[38;2;146;227;10m.[38;2;148;226;9m.[38;2;150;224;8m.[38;2;152;223;7m.[38;2;155;221;6m.[38;2;157;220;6m.[38;2;159;218;5m.[38;2;161;217;5m.[0m[48;2;0;0;0m<
+[38;2;164;215;4m000010 [38;2;164;215;4m10 [38;2;166;213;3m11 [38;2;168;212;3m12 [38;2;170;210;3m13 [38;2;172;208;2m14 [38;2;174;206;2m15 [38;2;176;204;2m16 [38;2;179;203;1m17 [38;2;181;201;1m18 [38;2;183;199;1m19 [38;2;185;197;1m1a [38;2;187;195;1m1b [38;2;189;193;1m1c [38;2;191;191;1m1d [38;2;193;189;1m1e [38;2;195;187;1m1f [0m[48;2;0;0;0m >[38;2;164;215;4m.[38;2;166;213;3m.[38;2;168;212;3m.[38;2;170;210;3m.[38;2;172;208;2m.[38;2;174;206;2m.[38;2;176;204;2m.[38;2;179;203;1m.[38;2;181;201;1m.[38;2;183;199;1m.[38;2;185;197;1m.[38;2;187;195;1m.[38;2;189;193;1m.[38;2;191;191;1m.[38;2;193;189;1m.[38;2;195;187;1m.[0m[48;2;0;0;0m<
+[38;2;197;185;1m000020 [38;2;197;185;1m20 [38;2;199;183;1m21 [38;2;200;181;1m22 [38;2;202;179;1m23 [38;2;204;177;1m24 [38;2;206;175;2m25 [38;2;208;173;2m26 [38;2;210;170;3m27 [38;2;211;168;3m28 [38;2;213;166;3m29 [38;2;215;164;4m2a [38;2;216;162;4m2b [38;2;218;160;5m2c [38;2;219;157;6m2d [38;2;221;155;6m2e [38;2;223;153;7m2f [0m[48;2;0;0;0m >[38;2;197;185;1m [38;2;199;183;1m![38;2;200;181;1m"[38;2;202;179;1m#[38;2;204;177;1m$[38;2;206;175;2m%[38;2;208;173;2m&[38;2;210;170;3m'[38;2;211;168;3m([38;2;213;166;3m)[38;2;215;164;4m*[38;2;216;162;4m+[38;2;218;160;5m,[38;2;219;157;6m-[38;2;221;155;6m.[38;2;223;153;7m/[0m[48;2;0;0;0m<
+[38;2;224;151;8m000030 [38;2;224;151;8m30 [38;2;226;148;9m31 [38;2;227;146;9m32 [38;2;228;144;10m33 [38;2;230;142;11m34 [38;2;231;139;12m35 [38;2;232;137;13m36 [38;2;234;135;14m37 [38;2;235;132;15m38 [38;2;236;130;16m39 [38;2;237;128;17m3a [38;2;238;126;18m3b [38;2;240;123;20m3c [38;2;241;121;21m3d [38;2;242;119;22m3e [38;2;243;116;23m3f [0m[48;2;0;0;0m >[38;2;224;151;8m0[38;2;226;148;9m1[38;2;227;146;9m2[38;2;228;144;10m3[38;2;230;142;11m4[38;2;231;139;12m5[38;2;232;137;13m6[38;2;234;135;14m7[38;2;235;132;15m8[38;2;236;130;16m9[38;2;237;128;17m:[38;2;238;126;18m;[38;2;240;123;20m<[38;2;241;121;21m=[38;2;242;119;22m>[38;2;243;116;23m?[0m[48;2;0;0;0m<
+[38;2;244;114;25m000040 [38;2;244;114;25m40 [38;2;244;112;26m41 [38;2;245;110;28m42 [38;2;246;107;29m43 [38;2;247;105;30m44 [38;2;248;103;32m45 [38;2;248;101;33m46 [38;2;249;98;35m47 [38;2;250;96;37m48 [38;2;250;94;38m49 [38;2;251;92;40m4a [38;2;251;90;41m4b [38;2;252;87;43m4c [38;2;252;85;45m4d [38;2;253;83;47m4e [38;2;253;81;48m4f [0m[48;2;0;0;0m >[38;2;244;114;25m@[38;2;244;112;26mA[38;2;245;110;28mB[38;2;246;107;29mC[38;2;247;105;30mD[38;2;248;103;32mE[38;2;248;101;33mF[38;2;249;98;35mG[38;2;250;96;37mH[38;2;250;94;38mI[38;2;251;92;40mJ[38;2;251;90;41mK[38;2;252;87;43mL[38;2;252;85;45mM[38;2;253;83;47mN[38;2;253;81;48mO[0m[48;2;0;0;0m<
+[38;2;253;79;50m000050 [38;2;253;79;50m50 [38;2;254;77;52m51 [38;2;254;75;54m52 [38;2;254;73;56m53 [38;2;254;71;58m54 [38;2;254;69;60m55 [38;2;254;67;62m56 [38;2;254;65;63m57 [38;2;254;63;65m58 [38;2;254;61;67m59 [38;2;254;59;69m5a [38;2;254;57;72m5b [38;2;254;55;74m5c [38;2;254;53;76m5d [38;2;254;51;78m5e [38;2;253;49;80m5f [0m[48;2;0;0;0m >[38;2;253;79;50mP[38;2;254;77;52mQ[38;2;254;75;54mR[38;2;254;73;56mS[38;2;254;71;58mT[38;2;254;69;60mU[38;2;254;67;62mV[38;2;254;65;63mW[38;2;254;63;65mX[38;2;254;61;67mY[38;2;254;59;69mZ[38;2;254;57;72m[[38;2;254;55;74m\[38;2;254;53;76m][38;2;254;51;78m^[38;2;253;49;80m_[0m[48;2;0;0;0m<
+[38;2;253;48;82m000060 [38;2;253;48;82m60 [38;2;253;46;84m61 [38;2;252;44;86m62 [38;2;252;42;88m63 [38;2;251;41;91m64 [38;2;251;39;93m65 [38;2;250;37;95m66 [38;2;249;36;97m67 [38;2;249;34;99m68 [38;2;248;33;102m69 [38;2;247;31;104m6a [38;2;247;30;106m6b [38;2;246;28;108m6c [38;2;245;27;111m6d [38;2;244;25;113m6e [38;2;243;24;115m6f [0m[48;2;0;0;0m >[38;2;253;48;82m`[38;2;253;46;84ma[38;2;252;44;86mb[38;2;252;42;88mc[38;2;251;41;91md[38;2;251;39;93me[38;2;250;37;95mf[38;2;249;36;97mg[38;2;249;34;99mh[38;2;248;33;102mi[38;2;247;31;104mj[38;2;247;30;106mk[38;2;246;28;108ml[38;2;245;27;111mm[38;2;244;25;113mn[38;2;243;24;115mo[0m[48;2;0;0;0m<
+[38;2;242;23;118m000070 [38;2;242;23;118m70 [38;2;241;22;120m71 [38;2;240;20;122m72 [38;2;239;19;124m73 [38;2;238;18;127m74 [38;2;237;17;129m75 [38;2;236;16;131m76 [38;2;234;15;134m77 [38;2;233;14;136m78 [38;2;232;13;138m79 [38;2;230;12;140m7a [38;2;229;11;143m7b [38;2;228;10;145m7c [38;2;226;9;147m7d [38;2;225;8;149m7e [38;2;223;7;152m7f [0m[48;2;0;0;0m >[38;2;242;23;118mp[38;2;241;22;120mq[38;2;240;20;122mr[38;2;239;19;124ms[38;2;238;18;127mt[38;2;237;17;129mu[38;2;236;16;131mv[38;2;234;15;134mw[38;2;233;14;136mx[38;2;232;13;138my[38;2;230;12;140mz[38;2;229;11;143m{[38;2;228;10;145m|[38;2;226;9;147m}[38;2;225;8;149m~[38;2;223;7;152m.[0m[48;2;0;0;0m<
+[38;2;222;7;154m000080 [38;2;222;7;154m80 [38;2;220;6;156m81 [38;2;219;5;158m82 [38;2;217;5;161m83 [38;2;216;4;163m84 [38;2;214;4;165m85 [38;2;212;3;167m86 [38;2;210;3;169m87 [38;2;209;2;171m88 [38;2;207;2;174m89 [38;2;205;2;176m8a [38;2;203;1;178m8b [38;2;201;1;180m8c [38;2;200;1;182m8d [38;2;198;1;184m8e [38;2;196;1;186m8f [0m[48;2;0;0;0m >[38;2;222;7;154m.[38;2;220;6;156m.[38;2;219;5;158m.[38;2;217;5;161m.[38;2;216;4;163m.[38;2;214;4;165m.[38;2;212;3;167m.[38;2;210;3;169m.[38;2;209;2;171m.[38;2;207;2;174m.[38;2;205;2;176m.[38;2;203;1;178m.[38;2;201;1;180m.[38;2;200;1;182m.[38;2;198;1;184m.[38;2;196;1;186m.[0m[48;2;0;0;0m<
+[38;2;194;1;188m000090 [38;2;194;1;188m90 [38;2;192;1;190m91 [38;2;190;1;192m92 [38;2;188;1;194m93 [38;2;186;1;196m94 [38;2;184;1;198m95 [38;2;182;1;200m96 [38;2;180;1;202m97 [38;2;178;1;204m98 [38;2;176;2;205m99 [38;2;173;2;207m9a [38;2;171;2;209m9b [38;2;169;3;211m9c [38;2;167;3;212m9d [38;2;165;4;214m9e [38;2;163;4;216m9f [0m[48;2;0;0;0m >[38;2;194;1;188m.[38;2;192;1;190m.[38;2;190;1;192m.[38;2;188;1;194m.[38;2;186;1;196m.[38;2;184;1;198m.[38;2;182;1;200m.[38;2;180;1;202m.[38;2;178;1;204m.[38;2;176;2;205m.[38;2;173;2;207m.[38;2;171;2;209m.[38;2;169;3;211m.[38;2;167;3;212m.[38;2;165;4;214m.[38;2;163;4;216m.[0m[48;2;0;0;0m<
+[38;2;160;5;217m0000a0 [38;2;160;5;217ma0 [38;2;158;5;219ma1 [38;2;156;6;220ma2 [38;2;154;7;222ma3 [38;2;151;8;224ma4 [38;2;149;8;225ma5 [38;2;147;9;226ma6 [38;2;145;10;228ma7 [38;2;142;11;229ma8 [38;2;140;12;231ma9 [38;2;138;13;232maa [38;2;136;14;233mab [38;2;133;15;234mac [38;2;131;16;236mad [38;2;129;17;237mae [38;2;126;18;238maf [0m[48;2;0;0;0m >[38;2;160;5;217m.[38;2;158;5;219m.[38;2;156;6;220m.[38;2;154;7;222m.[38;2;151;8;224m.[38;2;149;8;225m.[38;2;147;9;226m.[38;2;145;10;228m.[38;2;142;11;229m.[38;2;140;12;231m.[38;2;138;13;232m.[38;2;136;14;233m.[38;2;133;15;234m.[38;2;131;16;236m.[38;2;129;17;237m.[38;2;126;18;238m.[0m[48;2;0;0;0m<
+[38;2;124;19;239m0000b0 [38;2;124;19;239mb0 [38;2;122;20;240mb1 [38;2;120;22;241mb2 [38;2;117;23;242mb3 [38;2;115;24;243mb4 [38;2;113;26;244mb5 [38;2;110;27;245mb6 [38;2;108;28;246mb7 [38;2;106;30;247mb8 [38;2;104;31;247mb9 [38;2;101;33;248mba [38;2;99;34;249mbb [38;2;97;36;250mbc [38;2;95;38;250mbd [38;2;93;39;251mbe [38;2;90;41;251mbf [0m[48;2;0;0;0m >[38;2;124;19;239m.[38;2;122;20;240m.[38;2;120;22;241m.[38;2;117;23;242m.[38;2;115;24;243m.[38;2;113;26;244m.[38;2;110;27;245m.[38;2;108;28;246m.[38;2;106;30;247m.[38;2;104;31;247m.[38;2;101;33;248m.[38;2;99;34;249m.[38;2;97;36;250m.[38;2;95;38;250m.[38;2;93;39;251m.[38;2;90;41;251m.[0m[48;2;0;0;0m<
+[38;2;88;43;252m0000c0 [38;2;88;43;252mc0 [38;2;86;44;252mc1 [38;2;84;46;253mc2 [38;2;82;48;253mc3 [38;2;80;50;253mc4 [38;2;78;51;254mc5 [38;2;75;53;254mc6 [38;2;73;55;254mc7 [38;2;71;57;254mc8 [38;2;69;59;254mc9 [38;2;67;61;254mca [38;2;65;63;254mcb [38;2;63;65;254mcc [38;2;61;67;254mcd [38;2;59;69;254mce [38;2;57;71;254mcf [0m[48;2;0;0;0m >[38;2;88;43;252m.[38;2;86;44;252m.[38;2;84;46;253m.[38;2;82;48;253m.[38;2;80;50;253m.[38;2;78;51;254m.[38;2;75;53;254m.[38;2;73;55;254m.[38;2;71;57;254m.[38;2;69;59;254m.[38;2;67;61;254m.[38;2;65;63;254m.[38;2;63;65;254m.[38;2;61;67;254m.[38;2;59;69;254m.[38;2;57;71;254m.[0m[48;2;0;0;0m<
+[38;2;56;73;254m0000d0 [38;2;56;73;254md0 [38;2;54;75;254md1 [38;2;52;77;254md2 [38;2;50;79;253md3 [38;2;48;81;253md4 [38;2;46;83;253md5 [38;2;45;86;252md6 [38;2;43;88;252md7 [38;2;41;90;251md8 [38;2;40;92;251md9 [38;2;38;94;250mda [38;2;36;96;250mdb [38;2;35;99;249mdc [38;2;33;101;248mdd [38;2;32;103;248mde [38;2;30;105;247mdf [0m[48;2;0;0;0m >[38;2;56;73;254m.[38;2;54;75;254m.[38;2;52;77;254m.[38;2;50;79;253m.[38;2;48;81;253m.[38;2;46;83;253m.[38;2;45;86;252m.[38;2;43;88;252m.[38;2;41;90;251m.[38;2;40;92;251m.[38;2;38;94;250m.[38;2;36;96;250m.[38;2;35;99;249m.[38;2;33;101;248m.[38;2;32;103;248m.[38;2;30;105;247m.[0m[48;2;0;0;0m<
+[38;2;29;108;246m0000e0 [38;2;29;108;246me0 [38;2;27;110;245me1 [38;2;26;112;244me2 [38;2;25;114;243me3 [38;2;23;117;242me4 [38;2;22;119;241me5 [38;2;21;121;240me6 [38;2;20;124;239me7 [38;2;18;126;238me8 [38;2;17;128;237me9 [38;2;16;130;236mea [38;2;15;133;235meb [38;2;14;135;234mec [38;2;13;137;232med [38;2;12;140;231mee [38;2;11;142;230mef [0m[48;2;0;0;0m >[38;2;29;108;246m.[38;2;27;110;245m.[38;2;26;112;244m.[38;2;25;114;243m.[38;2;23;117;242m.[38;2;22;119;241m.[38;2;21;121;240m.[38;2;20;124;239m.[38;2;18;126;238m.[38;2;17;128;237m.[38;2;16;130;236m.[38;2;15;133;235m.[38;2;14;135;234m.[38;2;13;137;232m.[38;2;12;140;231m.[38;2;11;142;230m.[0m[48;2;0;0;0m<
+[38;2;10;144;228m0000f0 [38;2;10;144;228mf0 [38;2;9;146;227mf1 [38;2;8;149;225mf2 [38;2;8;151;224mf3 [38;2;7;153;222mf4 [38;2;6;155;221mf5 [38;2;6;158;219mf6 [38;2;5;160;218mf7 [38;2;4;162;216mf8 [38;2;4;164;214mf9 [38;2;3;166;213mfa [38;2;3;169;211mfb [38;2;2;171;209mfc [38;2;2;173;208mfd [38;2;2;175;206mfe [38;2;1;177;204mff [0m[48;2;0;0;0m[0m[48;2;0;0;0m >[38;2;10;144;228m.[38;2;9;146;227m.[38;2;8;149;225m.[38;2;8;151;224m.[38;2;7;153;222m.[38;2;6;155;221m.[38;2;6;158;219m.[38;2;5;160;218m.[38;2;4;162;216m.[38;2;4;164;214m.[38;2;3;166;213m.[38;2;3;169;211m.[38;2;2;171;209m.[38;2;2;173;208m.[38;2;2;175;206m.[38;2;1;177;204m.[0m[48;2;0;0;0m<
+[38;2;64;64;64m000100
+[0m[48;2;0;0;0m+
\ No newline at end of file
diff --git a/test-bin/xcd.t b/test-bin/xcd.t
@@ -10,127 +10,13 @@ q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
EOF
) | ../bin/xcd > xcd.out || exit 1
-# Original xcd.out output
-(
-base64 -d <<EOF
-G1swbRtbNDg7MjswOzA7MG0bWzM4OzI7NjQ7NjQ7NjRtMDAwMDAwIBtbMzg7Mjs2NDs2NDs2NG0w
-MCAbWzM4OzI7MTMwOzIzNjsxNm0wMSAbWzM4OzI7MTMyOzIzNTsxNW0wMiAbWzM4OzI7MTM0OzIz
-NDsxNG0wMyAbWzM4OzI7MTM3OzIzMzsxM20wNCAbWzM4OzI7MTM5OzIzMTsxMm0wNSAbWzM4OzI7
-MTQxOzIzMDsxMW0wNiAbWzM4OzI7MTQzOzIyOTsxMG0wNyAbWzM4OzI7MTQ2OzIyNzsxMG0wOCAb
-WzM4OzI7MTQ4OzIyNjswOW0wOSAbWzM4OzI7MTUwOzIyNDswOG0wYSAbWzM4OzI7MTUyOzIyMzsw
-N20wYiAbWzM4OzI7MTU1OzIyMTswNm0wYyAbWzM4OzI7MTU3OzIyMDswNm0wZCAbWzM4OzI7MTU5
-OzIxODswNW0wZSAbWzM4OzI7MTYxOzIxNzswNW0wZiAbWzBtG1s0ODsyOzA7MDswbSA+Li4uLi4u
-Li4uLi4uLi4uLjwbWzM4OzI7MTY0OzIxNTswNG0KMDAwMDEwIBtbMzg7MjsxNjQ7MjE1OzA0bTEw
-IBtbMzg7MjsxNjY7MjEzOzAzbTExIBtbMzg7MjsxNjg7MjEyOzAzbTEyIBtbMzg7MjsxNzA7MjEw
-OzAzbTEzIBtbMzg7MjsxNzI7MjA4OzAybTE0IBtbMzg7MjsxNzQ7MjA2OzAybTE1IBtbMzg7Mjsx
-NzY7MjA0OzAybTE2IBtbMzg7MjsxNzk7MjAzOzAxbTE3IBtbMzg7MjsxODE7MjAxOzAxbTE4IBtb
-Mzg7MjsxODM7MTk5OzAxbTE5IBtbMzg7MjsxODU7MTk3OzAxbTFhIBtbMzg7MjsxODc7MTk1OzAx
-bTFiIBtbMzg7MjsxODk7MTkzOzAxbTFjIBtbMzg7MjsxOTE7MTkxOzAxbTFkIBtbMzg7MjsxOTM7
-MTg5OzAxbTFlIBtbMzg7MjsxOTU7MTg3OzAxbTFmIBtbMG0bWzQ4OzI7MDswOzBtID4uLi4uLi4u
-Li4uLi4uLi4uPBtbMzg7MjsxOTc7MTg1OzAxbQowMDAwMjAgG1szODsyOzE5NzsxODU7MDFtMjAg
-G1szODsyOzE5OTsxODM7MDFtMjEgG1szODsyOzIwMDsxODE7MDFtMjIgG1szODsyOzIwMjsxNzk7
-MDFtMjMgG1szODsyOzIwNDsxNzc7MDFtMjQgG1szODsyOzIwNjsxNzU7MDJtMjUgG1szODsyOzIw
-ODsxNzM7MDJtMjYgG1szODsyOzIxMDsxNzA7MDNtMjcgG1szODsyOzIxMTsxNjg7MDNtMjggG1sz
-ODsyOzIxMzsxNjY7MDNtMjkgG1szODsyOzIxNTsxNjQ7MDRtMmEgG1szODsyOzIxNjsxNjI7MDRt
-MmIgG1szODsyOzIxODsxNjA7MDVtMmMgG1szODsyOzIxOTsxNTc7MDZtMmQgG1szODsyOzIyMTsx
-NTU7MDZtMmUgG1szODsyOzIyMzsxNTM7MDdtMmYgG1swbRtbNDg7MjswOzA7MG0gPiAhIiMkJSYn
-KCkqKywtLi88G1szODsyOzIyNDsxNTE7MDhtCjAwMDAzMCAbWzM4OzI7MjI0OzE1MTswOG0zMCAb
-WzM4OzI7MjI2OzE0ODswOW0zMSAbWzM4OzI7MjI3OzE0NjswOW0zMiAbWzM4OzI7MjI4OzE0NDsx
-MG0zMyAbWzM4OzI7MjMwOzE0MjsxMW0zNCAbWzM4OzI7MjMxOzEzOTsxMm0zNSAbWzM4OzI7MjMy
-OzEzNzsxM20zNiAbWzM4OzI7MjM0OzEzNTsxNG0zNyAbWzM4OzI7MjM1OzEzMjsxNW0zOCAbWzM4
-OzI7MjM2OzEzMDsxNm0zOSAbWzM4OzI7MjM3OzEyODsxN20zYSAbWzM4OzI7MjM4OzEyNjsxOG0z
-YiAbWzM4OzI7MjQwOzEyMzsyMG0zYyAbWzM4OzI7MjQxOzEyMTsyMW0zZCAbWzM4OzI7MjQyOzEx
-OTsyMm0zZSAbWzM4OzI7MjQzOzExNjsyM20zZiAbWzBtG1s0ODsyOzA7MDswbSA+MDEyMzQ1Njc4
-OTo7PD0+PzwbWzM4OzI7MjQ0OzExNDsyNW0KMDAwMDQwIBtbMzg7MjsyNDQ7MTE0OzI1bTQwIBtb
-Mzg7MjsyNDQ7MTEyOzI2bTQxIBtbMzg7MjsyNDU7MTEwOzI4bTQyIBtbMzg7MjsyNDY7MTA3OzI5
-bTQzIBtbMzg7MjsyNDc7MTA1OzMwbTQ0IBtbMzg7MjsyNDg7MTAzOzMybTQ1IBtbMzg7MjsyNDg7
-MTAxOzMzbTQ2IBtbMzg7MjsyNDk7OTg7MzVtNDcgG1szODsyOzI1MDs5NjszN200OCAbWzM4OzI7
-MjUwOzk0OzM4bTQ5IBtbMzg7MjsyNTE7OTI7NDBtNGEgG1szODsyOzI1MTs5MDs0MW00YiAbWzM4
-OzI7MjUyOzg3OzQzbTRjIBtbMzg7MjsyNTI7ODU7NDVtNGQgG1szODsyOzI1Mzs4Mzs0N200ZSAb
-WzM4OzI7MjUzOzgxOzQ4bTRmIBtbMG0bWzQ4OzI7MDswOzBtID5AQUJDREVGR0hJSktMTU5PPBtb
-Mzg7MjsyNTM7Nzk7NTBtCjAwMDA1MCAbWzM4OzI7MjUzOzc5OzUwbTUwIBtbMzg7MjsyNTQ7Nzc7
-NTJtNTEgG1szODsyOzI1NDs3NTs1NG01MiAbWzM4OzI7MjU0OzczOzU2bTUzIBtbMzg7MjsyNTQ7
-NzE7NThtNTQgG1szODsyOzI1NDs2OTs2MG01NSAbWzM4OzI7MjU0OzY3OzYybTU2IBtbMzg7Mjsy
-NTQ7NjU7NjNtNTcgG1szODsyOzI1NDs2Mzs2NW01OCAbWzM4OzI7MjU0OzYxOzY3bTU5IBtbMzg7
-MjsyNTQ7NTk7NjltNWEgG1szODsyOzI1NDs1Nzs3Mm01YiAbWzM4OzI7MjU0OzU1Ozc0bTVjIBtb
-Mzg7MjsyNTQ7NTM7NzZtNWQgG1szODsyOzI1NDs1MTs3OG01ZSAbWzM4OzI7MjUzOzQ5OzgwbTVm
-IBtbMG0bWzQ4OzI7MDswOzBtID5QUVJTVFVWV1hZWltcXV5fPBtbMzg7MjsyNTM7NDg7ODJtCjAw
-MDA2MCAbWzM4OzI7MjUzOzQ4OzgybTYwIBtbMzg7MjsyNTM7NDY7ODRtNjEgG1szODsyOzI1Mjs0
-NDs4Nm02MiAbWzM4OzI7MjUyOzQyOzg4bTYzIBtbMzg7MjsyNTE7NDE7OTFtNjQgG1szODsyOzI1
-MTszOTs5M202NSAbWzM4OzI7MjUwOzM3Ozk1bTY2IBtbMzg7MjsyNDk7MzY7OTdtNjcgG1szODsy
-OzI0OTszNDs5OW02OCAbWzM4OzI7MjQ4OzMzOzEwMm02OSAbWzM4OzI7MjQ3OzMxOzEwNG02YSAb
-WzM4OzI7MjQ3OzMwOzEwNm02YiAbWzM4OzI7MjQ2OzI4OzEwOG02YyAbWzM4OzI7MjQ1OzI3OzEx
-MW02ZCAbWzM4OzI7MjQ0OzI1OzExM202ZSAbWzM4OzI7MjQzOzI0OzExNW02ZiAbWzBtG1s0ODsy
-OzA7MDswbSA+YGFiY2RlZmdoaWprbG1ubzwbWzM4OzI7MjQyOzIzOzExOG0KMDAwMDcwIBtbMzg7
-MjsyNDI7MjM7MTE4bTcwIBtbMzg7MjsyNDE7MjI7MTIwbTcxIBtbMzg7MjsyNDA7MjA7MTIybTcy
-IBtbMzg7MjsyMzk7MTk7MTI0bTczIBtbMzg7MjsyMzg7MTg7MTI3bTc0IBtbMzg7MjsyMzc7MTc7
-MTI5bTc1IBtbMzg7MjsyMzY7MTY7MTMxbTc2IBtbMzg7MjsyMzQ7MTU7MTM0bTc3IBtbMzg7Mjsy
-MzM7MTQ7MTM2bTc4IBtbMzg7MjsyMzI7MTM7MTM4bTc5IBtbMzg7MjsyMzA7MTI7MTQwbTdhIBtb
-Mzg7MjsyMjk7MTE7MTQzbTdiIBtbMzg7MjsyMjg7MTA7MTQ1bTdjIBtbMzg7MjsyMjY7MDk7MTQ3
-bTdkIBtbMzg7MjsyMjU7MDg7MTQ5bTdlIBtbMzg7MjsyMjM7MDc7MTUybTdmIBtbMG0bWzQ4OzI7
-MDswOzBtID5wcXJzdHV2d3h5ent8fX4uPBtbMzg7MjsyMjI7MDc7MTU0bQowMDAwODAgG1szODsy
-OzIyMjswNzsxNTRtODAgG1szODsyOzIyMDswNjsxNTZtODEgG1szODsyOzIxOTswNTsxNThtODIg
-G1szODsyOzIxNzswNTsxNjFtODMgG1szODsyOzIxNjswNDsxNjNtODQgG1szODsyOzIxNDswNDsx
-NjVtODUgG1szODsyOzIxMjswMzsxNjdtODYgG1szODsyOzIxMDswMzsxNjltODcgG1szODsyOzIw
-OTswMjsxNzFtODggG1szODsyOzIwNzswMjsxNzRtODkgG1szODsyOzIwNTswMjsxNzZtOGEgG1sz
-ODsyOzIwMzswMTsxNzhtOGIgG1szODsyOzIwMTswMTsxODBtOGMgG1szODsyOzIwMDswMTsxODJt
-OGQgG1szODsyOzE5ODswMTsxODRtOGUgG1szODsyOzE5NjswMTsxODZtOGYgG1swbRtbNDg7Mjsw
-OzA7MG0gPi4uLi4uLi4uLi4uLi4uLi48G1szODsyOzE5NDswMTsxODhtCjAwMDA5MCAbWzM4OzI7
-MTk0OzAxOzE4OG05MCAbWzM4OzI7MTkyOzAxOzE5MG05MSAbWzM4OzI7MTkwOzAxOzE5Mm05MiAb
-WzM4OzI7MTg4OzAxOzE5NG05MyAbWzM4OzI7MTg2OzAxOzE5Nm05NCAbWzM4OzI7MTg0OzAxOzE5
-OG05NSAbWzM4OzI7MTgyOzAxOzIwMG05NiAbWzM4OzI7MTgwOzAxOzIwMm05NyAbWzM4OzI7MTc4
-OzAxOzIwNG05OCAbWzM4OzI7MTc2OzAyOzIwNW05OSAbWzM4OzI7MTczOzAyOzIwN205YSAbWzM4
-OzI7MTcxOzAyOzIwOW05YiAbWzM4OzI7MTY5OzAzOzIxMW05YyAbWzM4OzI7MTY3OzAzOzIxMm05
-ZCAbWzM4OzI7MTY1OzA0OzIxNG05ZSAbWzM4OzI7MTYzOzA0OzIxNm05ZiAbWzBtG1s0ODsyOzA7
-MDswbSA+Li4uLi4uLi4uLi4uLi4uLjwbWzM4OzI7MTYwOzA1OzIxN20KMDAwMGEwIBtbMzg7Mjsx
-NjA7MDU7MjE3bWEwIBtbMzg7MjsxNTg7MDU7MjE5bWExIBtbMzg7MjsxNTY7MDY7MjIwbWEyIBtb
-Mzg7MjsxNTQ7MDc7MjIybWEzIBtbMzg7MjsxNTE7MDg7MjI0bWE0IBtbMzg7MjsxNDk7MDg7MjI1
-bWE1IBtbMzg7MjsxNDc7MDk7MjI2bWE2IBtbMzg7MjsxNDU7MTA7MjI4bWE3IBtbMzg7MjsxNDI7
-MTE7MjI5bWE4IBtbMzg7MjsxNDA7MTI7MjMxbWE5IBtbMzg7MjsxMzg7MTM7MjMybWFhIBtbMzg7
-MjsxMzY7MTQ7MjMzbWFiIBtbMzg7MjsxMzM7MTU7MjM0bWFjIBtbMzg7MjsxMzE7MTY7MjM2bWFk
-IBtbMzg7MjsxMjk7MTc7MjM3bWFlIBtbMzg7MjsxMjY7MTg7MjM4bWFmIBtbMG0bWzQ4OzI7MDsw
-OzBtID4uLi4uLi4uLi4uLi4uLi4uPBtbMzg7MjsxMjQ7MTk7MjM5bQowMDAwYjAgG1szODsyOzEy
-NDsxOTsyMzltYjAgG1szODsyOzEyMjsyMDsyNDBtYjEgG1szODsyOzEyMDsyMjsyNDFtYjIgG1sz
-ODsyOzExNzsyMzsyNDJtYjMgG1szODsyOzExNTsyNDsyNDNtYjQgG1szODsyOzExMzsyNjsyNDRt
-YjUgG1szODsyOzExMDsyNzsyNDVtYjYgG1szODsyOzEwODsyODsyNDZtYjcgG1szODsyOzEwNjsz
-MDsyNDdtYjggG1szODsyOzEwNDszMTsyNDdtYjkgG1szODsyOzEwMTszMzsyNDhtYmEgG1szODsy
-Ozk5OzM0OzI0OW1iYiAbWzM4OzI7OTc7MzY7MjUwbWJjIBtbMzg7Mjs5NTszODsyNTBtYmQgG1sz
-ODsyOzkzOzM5OzI1MW1iZSAbWzM4OzI7OTA7NDE7MjUxbWJmIBtbMG0bWzQ4OzI7MDswOzBtID4u
-Li4uLi4uLi4uLi4uLi4uPBtbMzg7Mjs4ODs0MzsyNTJtCjAwMDBjMCAbWzM4OzI7ODg7NDM7MjUy
-bWMwIBtbMzg7Mjs4Njs0NDsyNTJtYzEgG1szODsyOzg0OzQ2OzI1M21jMiAbWzM4OzI7ODI7NDg7
-MjUzbWMzIBtbMzg7Mjs4MDs1MDsyNTNtYzQgG1szODsyOzc4OzUxOzI1NG1jNSAbWzM4OzI7NzU7
-NTM7MjU0bWM2IBtbMzg7Mjs3Mzs1NTsyNTRtYzcgG1szODsyOzcxOzU3OzI1NG1jOCAbWzM4OzI7
-Njk7NTk7MjU0bWM5IBtbMzg7Mjs2Nzs2MTsyNTRtY2EgG1szODsyOzY1OzYzOzI1NG1jYiAbWzM4
-OzI7NjM7NjU7MjU0bWNjIBtbMzg7Mjs2MTs2NzsyNTRtY2QgG1szODsyOzU5OzY5OzI1NG1jZSAb
-WzM4OzI7NTc7NzE7MjU0bWNmIBtbMG0bWzQ4OzI7MDswOzBtID4uLi4uLi4uLi4uLi4uLi4uPBtb
-Mzg7Mjs1Njs3MzsyNTRtCjAwMDBkMCAbWzM4OzI7NTY7NzM7MjU0bWQwIBtbMzg7Mjs1NDs3NTsy
-NTRtZDEgG1szODsyOzUyOzc3OzI1NG1kMiAbWzM4OzI7NTA7Nzk7MjUzbWQzIBtbMzg7Mjs0ODs4
-MTsyNTNtZDQgG1szODsyOzQ2OzgzOzI1M21kNSAbWzM4OzI7NDU7ODY7MjUybWQ2IBtbMzg7Mjs0
-Mzs4ODsyNTJtZDcgG1szODsyOzQxOzkwOzI1MW1kOCAbWzM4OzI7NDA7OTI7MjUxbWQ5IBtbMzg7
-MjszODs5NDsyNTBtZGEgG1szODsyOzM2Ozk2OzI1MG1kYiAbWzM4OzI7MzU7OTk7MjQ5bWRjIBtb
-Mzg7MjszMzsxMDE7MjQ4bWRkIBtbMzg7MjszMjsxMDM7MjQ4bWRlIBtbMzg7MjszMDsxMDU7MjQ3
-bWRmIBtbMG0bWzQ4OzI7MDswOzBtID4uLi4uLi4uLi4uLi4uLi4uPBtbMzg7MjsyOTsxMDg7MjQ2
-bQowMDAwZTAgG1szODsyOzI5OzEwODsyNDZtZTAgG1szODsyOzI3OzExMDsyNDVtZTEgG1szODsy
-OzI2OzExMjsyNDRtZTIgG1szODsyOzI1OzExNDsyNDNtZTMgG1szODsyOzIzOzExNzsyNDJtZTQg
-G1szODsyOzIyOzExOTsyNDFtZTUgG1szODsyOzIxOzEyMTsyNDBtZTYgG1szODsyOzIwOzEyNDsy
-MzltZTcgG1szODsyOzE4OzEyNjsyMzhtZTggG1szODsyOzE3OzEyODsyMzdtZTkgG1szODsyOzE2
-OzEzMDsyMzZtZWEgG1szODsyOzE1OzEzMzsyMzVtZWIgG1szODsyOzE0OzEzNTsyMzRtZWMgG1sz
-ODsyOzEzOzEzNzsyMzJtZWQgG1szODsyOzEyOzE0MDsyMzFtZWUgG1szODsyOzExOzE0MjsyMzBt
-ZWYgG1swbRtbNDg7MjswOzA7MG0gPi4uLi4uLi4uLi4uLi4uLi48G1szODsyOzEwOzE0NDsyMjht
-CjAwMDBmMCAbWzM4OzI7MTA7MTQ0OzIyOG1mMCAbWzM4OzI7MDk7MTQ2OzIyN21mMSAbWzM4OzI7
-MDg7MTQ5OzIyNW1mMiAbWzM4OzI7MDg7MTUxOzIyNG1mMyAbWzM4OzI7MDc7MTUzOzIyMm1mNCAb
-WzM4OzI7MDY7MTU1OzIyMW1mNSAbWzM4OzI7MDY7MTU4OzIxOW1mNiAbWzM4OzI7MDU7MTYwOzIx
-OG1mNyAbWzM4OzI7MDQ7MTYyOzIxNm1mOCAbWzM4OzI7MDQ7MTY0OzIxNG1mOSAbWzM4OzI7MDM7
-MTY2OzIxM21mYSAbWzM4OzI7MDM7MTY5OzIxMW1mYiAbWzM4OzI7MDI7MTcxOzIwOW1mYyAbWzM4
-OzI7MDI7MTczOzIwOG1mZCAbWzM4OzI7MDI7MTc1OzIwNm1mZSAbWzM4OzI7MDE7MTc3OzIwNG1m
-ZiAbWzBtG1s0ODsyOzA7MDswbSA+Li4uLi4uLi4uLi4uLi4uLjwbWzM4OzI7NjQ7NjQ7NjRtCjAw
-MDEwMAobWzBtG1s0ODsyOzA7MDswbQ==
-EOF
-) | diff - xcd.out
+diff xcd.fixture xcd.out
if [[ $? -eq 0 ]]
then
+ echo "OK: xcd"
rm xcd.out
else
- echo "Test failed!"
+ echo "[0m"
+ echo "[31mFAILED: xcd[0m"
fi