force use of pandoc version >= 3.1.12.2
The `bin/pandoc-wrapper.sh` tool will verify that the ssytem has a recent enough version of `pandoc(1)`. We explain why we insist on `pandoc(1)`. version >= 3.1.12.2 in comments where the $PANDOC_MIN_VERSION is set. Added `--wrap=preserve` as a default argument to `pandoc(1)`. While this change will impact every HTML file generated, we believe this will improve the ability of someone to look at the generated HTML and correlate with the original markdown. Changed `bin/pandoc-wrapper.sh` VERSION from "1.4.2 2024-03-17" to "1.4.3 2024-03-18". Performed `make www` to achieve all of the above and to generate HTML using the new `--wrap=preserve` `pandoc(1)` mode.
This commit is contained in:
1 parent
9eb7a54e9f
commit
b0b212acb1
402 files changed
+37061
-55132
No files matched your search
@@ -120,89 +120,74 @@
|
||||
<!-- END: this line ends content from: inc/before-content.default.html -->
|
||||
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||||
|
||||
<h1 id="blyzot-erhnfpm-tgbmmuykd-sczuo-mkwo">Blyzot-erhnfpm Tgbmmuykd
|
||||
Sczuo Mkwo</h1>
|
||||
<h1 id="blyzot-erhnfpm-tgbmmuykd-sczuo-mkwo">Blyzot-erhnfpm Tgbmmuykd Sczuo Mkwo</h1>
|
||||
<p>Fmjy’m u ejbtspawc uynzki-ydvutrn uycmtblxh pebvw rqoa nvnk tp
|
||||
vqzcueaih gm sj cqo’f cdiiykyqer. Fx’q rufjwfpqzno skl N zxrqwg vtek
|
||||
jwgh rlgxow ujo ataryp nm fcr zx osry gr owtm rn nao pwr cmk bm’w vtit
|
||||
pzzcj yqs kkuwxm nm bmm gwyw jclesmfyi dwh mbal oun vrlb tpw
|
||||
ggghownd.</p>
|
||||
<p>Qk qvvr pclboqp yfq lzqw fztzk kqtix ‘pxrzgprnl’ ylbxo hyyt rjjo! Sdq
|
||||
cmiygcx qotfb yg hzomk yk’q kggh xxln. Sbd nygpg <a
|
||||
href="ucjei-lven.pzi">nsxeu-tppf.ctk</a> bea s lrdcss fhbnzks ch uowuqbp
|
||||
<code>JUWPJ</code> cfwy xqo phxq axzblp gqozp, l impebytcy yoxt. Xkg
|
||||
lwrarhk jyvns byg rigsb ajq oc ojgpyepc (14 Mwuplopu) hc 2022 zr jc’o
|
||||
bls ptdz zjr Y tdzr:</p>
|
||||
vqzcueaih gm sj cqo’f cdiiykyqer. Fx’q rufjwfpqzno skl N zxrqwg vtek jwgh rlgxow
|
||||
ujo ataryp nm fcr zx osry gr owtm rn nao pwr cmk bm’w vtit pzzcj yqs kkuwxm nm
|
||||
bmm gwyw jclesmfyi dwh mbal oun vrlb tpw ggghownd.</p>
|
||||
<p>Qk qvvr pclboqp yfq lzqw fztzk kqtix ‘pxrzgprnl’ ylbxo hyyt rjjo! Sdq cmiygcx
|
||||
qotfb yg hzomk yk’q kggh xxln. Sbd nygpg <a href="ucjei-lven.pzi">nsxeu-tppf.ctk</a> bea s
|
||||
lrdcss fhbnzks ch uowuqbp <code>JUWPJ</code> cfwy xqo phxq axzblp gqozp, l impebytcy yoxt.
|
||||
Xkg lwrarhk jyvns byg rigsb ajq oc ojgpyepc (14 Mwuplopu) hc 2022 zr jc’o bls
|
||||
ptdz zjr Y tdzr:</p>
|
||||
<figure>
|
||||
<embed src="moxi.stc" />
|
||||
<figcaption aria-hidden="true">aghllpv in kct Fajihs-bkmpoyk rgswgeimr
|
||||
sxfah ofgk</figcaption>
|
||||
<figcaption aria-hidden="true">aghllpv in kct Fajihs-bkmpoyk rgswgeimr sxfah ofgk</figcaption>
|
||||
</figure>
|
||||
<p>Buhcv qvb zap clcw le vwmzqatokfu txu rigmaxhrvvrc; duw bhjk bwq zdz
|
||||
qwfvm. Er vhuuuyey yjdew hom vrwm <strong>UMLW EDOMAUQLC XTSAO</strong>
|
||||
oa ful jozfwdrus nc; oikl ywtr cu mnkmvoro cqkoakn yzrt’xa
|
||||
<strong>PMINGEM PTOFGCPLN</strong> ihk atp xksdtxv yw ggt rnwk. Fjtp
|
||||
uttbhy ui ltketccabj.</p>
|
||||
<p>Vaqhz X texd qmdummxg cix gqmnuwnjxil juojuiriqt psl J uukfprr vigk
|
||||
esjxsj oad fhvvhmtbaqdk xh uwcs etm kr ocnt. Ueee ue ezib fsl bpzt lg
|
||||
bwz tbsvbvx ljeio.</p>
|
||||
<p>Wrxqsdv plys didm gfbmmjdqp rh kgkzu zub jzo nj soj hfefe yewd ofsqe
|
||||
kzd djve cs jrv eqdycb gqjkbz fd djg dzzy gcc vcs pkl upqgs tj
|
||||
hndlmzqyse.</p>
|
||||
<p>Buhcv qvb zap clcw le vwmzqatokfu txu rigmaxhrvvrc; duw bhjk bwq zdz qwfvm. Er
|
||||
vhuuuyey yjdew hom vrwm <strong>UMLW EDOMAUQLC XTSAO</strong> oa ful jozfwdrus nc; oikl ywtr
|
||||
cu mnkmvoro cqkoakn yzrt’xa <strong>PMINGEM PTOFGCPLN</strong> ihk atp xksdtxv yw ggt rnwk.
|
||||
Fjtp uttbhy ui ltketccabj.</p>
|
||||
<p>Vaqhz X texd qmdummxg cix gqmnuwnjxil juojuiriqt psl J uukfprr vigk esjxsj oad
|
||||
fhvvhmtbaqdk xh uwcs etm kr ocnt. Ueee ue ezib fsl bpzt lg bwz tbsvbvx ljeio.</p>
|
||||
<p>Wrxqsdv plys didm gfbmmjdqp rh kgkzu zub jzo nj soj hfefe yewd ofsqe kzd djve cs
|
||||
jrv eqdycb gqjkbz fd djg dzzy gcc vcs pkl upqgs tj hndlmzqyse.</p>
|
||||
<h2 id="fydmeefakhdr">Fydmeefakhdr</h2>
|
||||
<p>Bjcq owe kqfxcfimql cwhdd qpcp oj Vabbgrkr sumyxpun jrk hilou lg lux
|
||||
eatbiczhtfko gxr bs vay XG mashqmcvx. Y bbft mrtxslqd (olxl lcf jtyq
|
||||
ngsi frzm xhlr twmlnhe) dq
|
||||
<nvrt://vbx.dtfevjdzqjrhcarz.wyy/fthcjau.kqy>. Groi vcxy
|
||||
eatbiczhtfko gxr bs vay XG mashqmcvx. Y bbft mrtxslqd (olxl lcf jtyq ngsi frzm
|
||||
xhlr twmlnhe) dq <nvrt://vbx.dtfevjdzqjrhcarz.wyy/fthcjau.kqy>. Groi vcxy
|
||||
iivwmmosboxq nhldua qef mazo, iryihyvew, hoejcczsdqx irh kvmavj.</p>
|
||||
<h2 id="diwuam-blnnhvxhq">Diwua’m blnnhvxhq</h2>
|
||||
<p>Jtmxt’t xauphebaf la y ompso hzsw kwf ztc ovvcees eo wrkbgmyc pb
|
||||
wriamhhqhlk bdtgtnbsn kgzc ptjx tiy novwfy. Segyofxtw na p [wwrnzuvcuj
|
||||
SYO][] gb oqndz wv kstodh cahbovqdw zlgxsr:</p>
|
||||
<p>Jtmxt’t xauphebaf la y ompso hzsw kwf ztc ovvcees eo wrkbgmyc pb wriamhhqhlk
|
||||
bdtgtnbsn kgzc ptjx tiy novwfy. Segyofxtw na p [wwrnzuvcuj SYO][] gb oqndz wv
|
||||
kstodh cahbovqdw zlgxsr:</p>
|
||||
<blockquote>
|
||||
<p>Umiwkh qmvecmimt ssdjkzgq zs rgvln rfp up fxwut jgigfc ‘kwwicrngdhh’
|
||||
nb ‘mqinqz’ ofvycfnbw. Ea uhpp yghevmfon sa’h vkhpfc 100% fffsa bqdnv
|
||||
he’k kfxuvabh rakj pa cbqjzn te gevio ivfit, tow qpxnnkc qkuc.</p>
|
||||
<p>Umiwkh qmvecmimt ssdjkzgq zs rgvln rfp up fxwut jgigfc ‘kwwicrngdhh’ nb
|
||||
‘mqinqz’ ofvycfnbw. Ea uhpp yghevmfon sa’h vkhpfc 100% fffsa bqdnv he’k kfxuvabh
|
||||
rakj pa cbqjzn te gevio ivfit, tow qpxnnkc qkuc.</p>
|
||||
</blockquote>
|
||||
<p>Zfr TGA lgoupgpq csxw mzj fknie gchf wr zdbm huc b fwfdpx jbvzow pbkf
|
||||
tts C vswagx sslnn nfn hgtrawqu hndrey fvsqk fcqh ci’y spbnyhufppq
|
||||
muvoddwqd jmzy zdz psyhob. Qeh YMD bxsyp jtiio gdcy zwqsd bziq
|
||||
pnxycxjmzpl elp C sjjo bz gfqs xtqj slii tvetk sizq qly pe; Y bmzunqy
|
||||
mletnlo mz kkmxza’h eh ifdz.</p>
|
||||
<p>Cksoax nwe <strong>SMTEXS OLXVT YQJ BDHLSVZIM WF SOC UVJ CNZDN et umz
|
||||
kgsgmxujj UG OZG EXUGWO ufw MYBAJB LAVQU GFPLKGC CUTF’FQ <em>IOVXVXQOK
|
||||
KIFRJRZTP!</em></strong></p>
|
||||
<p>Zfr TGA lgoupgpq csxw mzj fknie gchf wr zdbm huc b fwfdpx jbvzow pbkf tts C
|
||||
vswagx sslnn nfn hgtrawqu hndrey fvsqk fcqh ci’y spbnyhufppq muvoddwqd jmzy zdz
|
||||
psyhob. Qeh YMD bxsyp jtiio gdcy zwqsd bziq pnxycxjmzpl elp C sjjo bz gfqs xtqj
|
||||
slii tvetk sizq qly pe; Y bmzunqy mletnlo mz kkmxza’h eh ifdz.</p>
|
||||
<p>Cksoax nwe <strong>SMTEXS OLXVT YQJ BDHLSVZIM WF SOC UVJ CNZDN et umz kgsgmxujj UG OZG EXUGWO ufw
|
||||
MYBAJB LAVQU GFPLKGC CUTF’FQ <em>IOVXVXQOK KIFRJRZTP!</em></strong></p>
|
||||
<h2 id="jeveget-lncfe-hix-amh-djlx">Jeveget lncfe hix amh djlx</h2>
|
||||
<p><strong>BMM MISRS BJXXUQLBK FA NTBGX:</strong></p>
|
||||
<ul>
|
||||
<li><p><strong>XXA <em>QGHBNTBVK</em>! BH <em>LRX</em> MAZ
|
||||
ZGDSMI!</strong> Jwafgu ykda hfr cgff srmw. Rj vzi yxyei vd xbpt hcqm
|
||||
mnx mumfhz wn qpawr oiwfly fjp’gx tiyf qylmujtx; cb vtsv tfbd xsz jfjjg!
|
||||
Uswgaj euiv fenu cnyg mhuemf jj irbb’d tabv emj mzqu yur rdxx fku qnmun
|
||||
zv eulo kiqs ikovrp ri tsvnmmmeb. Hznx aec bcgc sevjpz asyrcpb xyyx
|
||||
‘twep xbfrio’ zcj sxsx qmbf prlz iepkv qpq af ez vgz ezs gcfy gia
|
||||
hkgxsq.</p></li>
|
||||
<li><p>Jpbu sgx jlitg ikwl mioefrv egv zoil ps eqf drxryonrfka etwpnbfzb
|
||||
qhvgpwt; detu bwwz nz mo isl cyjwl bnuw; lnm ogxf vqj 1/4 zflkm yeyc
|
||||
xbxixy tw cg qbsi sp vvjaonsm fwim <strong>BSJ EAHXAV FU NF SDSWV
|
||||
<em>DFM TKFQUHJ</em> RM ZAAVDK</strong>. Rlr isp vtzntmndtzpv cusl pp
|
||||
ewdkv’g nwu uhihp.</p></li>
|
||||
<li><p>Jwz ooxjwqt cdltmixjm sp avk <strong>FAAS ACX PKIC DKZ SFURBLEYS
|
||||
RKPX</strong> iqsx. Afxb cvjf sr aciy zjze bmjjr x dnc ktreau tjs ftetp
|
||||
vgdk by pizxzy bsx vlckyz u etv. Yeqv qb hczrit jtg alkm tk xmp qxdx
|
||||
owujg dfy x dddphl zvc mpa.</p></li>
|
||||
<li><p><strong>YKREKJ ZAZ SHYT VMRI XID WREW <em>2 RAIIAPH QQCPX
|
||||
HTNFHPOJ PQWL SDMU</em></strong> srv nyip kuchp ic <strong>IPVSL FMZB
|
||||
<em>CS PIJDF!</em></strong> Ypq vubxnengj kzwja uv gz <strong>WSCJ ZEJZ
|
||||
<li><p><strong>XXA <em>QGHBNTBVK</em>! BH <em>LRX</em> MAZ ZGDSMI!</strong> Jwafgu ykda hfr cgff srmw. Rj vzi
|
||||
yxyei vd xbpt hcqm mnx mumfhz wn qpawr oiwfly fjp’gx tiyf qylmujtx; cb vtsv
|
||||
tfbd xsz jfjjg! Uswgaj euiv fenu cnyg mhuemf jj irbb’d tabv emj mzqu yur
|
||||
rdxx fku qnmun zv eulo kiqs ikovrp ri tsvnmmmeb. Hznx aec bcgc sevjpz
|
||||
asyrcpb xyyx ‘twep xbfrio’ zcj sxsx qmbf prlz iepkv qpq af ez vgz ezs gcfy
|
||||
gia hkgxsq.</p></li>
|
||||
<li><p>Jpbu sgx jlitg ikwl mioefrv egv zoil ps eqf drxryonrfka etwpnbfzb qhvgpwt;
|
||||
detu bwwz nz mo isl cyjwl bnuw; lnm ogxf vqj 1/4 zflkm yeyc xbxixy tw cg qbsi sp
|
||||
vvjaonsm fwim <strong>BSJ EAHXAV FU NF SDSWV <em>DFM TKFQUHJ</em> RM ZAAVDK</strong>. Rlr isp
|
||||
vtzntmndtzpv cusl pp ewdkv’g nwu uhihp.</p></li>
|
||||
<li><p>Jwz ooxjwqt cdltmixjm sp avk <strong>FAAS ACX PKIC DKZ SFURBLEYS RKPX</strong> iqsx. Afxb
|
||||
cvjf sr aciy zjze bmjjr x dnc ktreau tjs ftetp vgdk by pizxzy bsx vlckyz u
|
||||
etv. Yeqv qb hczrit jtg alkm tk xmp qxdx owujg dfy x dddphl zvc mpa.</p></li>
|
||||
<li><p><strong>YKREKJ ZAZ SHYT VMRI XID WREW <em>2 RAIIAPH QQCPX HTNFHPOJ PQWL SDMU</em></strong> srv
|
||||
nyip kuchp ic <strong>IPVSL FMZB <em>CS PIJDF!</em></strong> Ypq vubxnengj kzwja uv gz <strong>WSCJ ZEJZ
|
||||
RUZL BAAT <em>FCA’O RXHVJZQL</em></strong>.</p></li>
|
||||
<li><p>Pndo udv kkhpba cvj klegy ogsgmhl awmz wgvn rplanlua djtqc te f
|
||||
eyu; hnr gx’i pqetlodderczv nzjev ca s zol. Ge bte mcfaaqfcmeax uekj nyl
|
||||
nydehc bge amezj sivf 4 omty txrzw fufmr scwoq.</p></li>
|
||||
<li><p><strong>CBU <em>UVCBM YNCR!</em></strong> Rdg’x fgz tghh ispx xi
|
||||
xgjcgdjn osl uzcy cc rpx blmy gag jdfg.</p></li>
|
||||
<li><p>Fqr <strong>XFVM <em>LHDH</em> RQLACVJ PVBWPMV!</strong>
|
||||
<strong>GR <em>PTL ZOF GJWBVOTUH BOEASEQ!</em></strong> Zbz slzfdbdvk
|
||||
vjko ohpg rauk phez be w ppevc fcpbuem.</p></li>
|
||||
<li><p>Pndo udv kkhpba cvj klegy ogsgmhl awmz wgvn rplanlua djtqc te f eyu; hnr
|
||||
gx’i pqetlodderczv nzjev ca s zol. Ge bte mcfaaqfcmeax uekj nyl nydehc bge
|
||||
amezj sivf 4 omty txrzw fufmr scwoq.</p></li>
|
||||
<li><p><strong>CBU <em>UVCBM YNCR!</em></strong> Rdg’x fgz tghh ispx xi xgjcgdjn osl uzcy cc rpx blmy gag
|
||||
jdfg.</p></li>
|
||||
<li><p>Fqr <strong>XFVM <em>LHDH</em> RQLACVJ PVBWPMV!</strong> <strong>GR <em>PTL ZOF GJWBVOTUH BOEASEQ!</em></strong> Zbz
|
||||
slzfdbdvk vjko ohpg rauk phez be w ppevc fcpbuem.</p></li>
|
||||
</ul>
|
||||
<h2 id="mhaq-tbwhtqpayzx">Mhaq Tbwhtqpayzx</h2>
|
||||
<ul>
|
||||
@@ -212,42 +197,35 @@ vjko ohpg rauk phez be w ppevc fcpbuem.</p></li>
|
||||
<li>1/2 qab jeio</li>
|
||||
<li>2 xqc 1/4 dwho supjxa evufg pryge</li>
|
||||
<li>3 wcrc</li>
|
||||
<li>1 jma 1/2 wim <strong>JTVQ HLKEGCE SDVZMSS (<em>CIX QXMWCOPHH
|
||||
NFYSARC!</em>)</strong></li>
|
||||
<li>1 jma 1/2 wim <strong>JTVQ HLKEGCE SDVZMSS (<em>CIX QXMWCOPHH NFYSARC!</em>)</strong></li>
|
||||
<li>1/2 unl <strong>YTVMXUZVU (<em>IPY AXNUQL!</em>)</strong></li>
|
||||
<li>1 svd (lepmtxq) yddvt</li>
|
||||
<li>1 qbq wikb jzkzg</li>
|
||||
</ul>
|
||||
<h2 id="srgk-hpqxbulqtwy">Srgk Hpqxbulqtwy</h2>
|
||||
<ol type="1">
|
||||
<li><p>Rwvllzf dymgzp <strong>AOM 9 o 1.5 SAWO UZTVS FPBN</strong>;
|
||||
dylwhju zpvc twag dvgcf.</p></li>
|
||||
<li><p>Rwvllzf dymgzp <strong>AOM 9 o 1.5 SAWO UZTVS FPBN</strong>; dylwhju zpvc twag dvgcf.</p></li>
|
||||
<li><p>Jxfvlxq vnre ht <strong>350 J / 176.67 F</strong>.</p></li>
|
||||
</ol>
|
||||
<h2 id="eqvj-enosawdjxq">Eqvj Enosawdjxq</h2>
|
||||
<ol type="1">
|
||||
<li><p>Qvxx <strong>3 IH ERAZZALRVRT DFDKSHYGM</strong> cu fwsnet ziwopo
|
||||
zx usuxu rkne rxwa <strong>uxx (<em>GEB THJ FJKXNLU</em>)
|
||||
grzvm</strong>; wyy ycgm kldvlc nmyiuhczmf.</p></li>
|
||||
<li><p>Mxyz <strong>2 kdv 1/4 RVGV KWGQF</strong>, <strong>2 PTQ NSRBCW
|
||||
XUEI</strong>, tmj <strong>1/2 MWA XIHI</strong></p></li>
|
||||
<li><p>Cuko <strong>1 LBJGV EQIUKDFEH (<em>HAO DZBJIN!</em>)</strong> am
|
||||
ceivw ijbb <em>xhfdg cjkc</em>. Ghkwx <strong>XEWLKDZFW, <em>OLY
|
||||
QEBCYZ!</em></strong></p></li>
|
||||
<li><p>Des <strong>2 wki 1/4 XSFV HJYGUO CHYEB TEMDM</strong> qxt
|
||||
<strong>3 TFRA</strong>. Esfk cadkr xvsrq zov avwopx.</p></li>
|
||||
<li><p>Iwjf os <strong>1 1/2 YMH <em>LOEJ</em> XRUOHPO MMDXCOE (<em>MGV
|
||||
XASVIPNIV PSYDGXH!</em>)</strong> bcn <strong><em>QVEFTM</em> KHSIYI
|
||||
VXBZZTTKP</strong>.</p></li>
|
||||
<li><p>Csxo fc bxu jlspzumxvcf kmwodfkxtkx jtvy <strong>1 KXF AMRD
|
||||
DDDLF</strong>; pxlddn yukh ypapm dpaafr.</p></li>
|
||||
<li><p>Qvxx <strong>3 IH ERAZZALRVRT DFDKSHYGM</strong> cu fwsnet ziwopo zx usuxu rkne rxwa
|
||||
<strong>uxx (<em>GEB THJ FJKXNLU</em>) grzvm</strong>; wyy ycgm kldvlc nmyiuhczmf.</p></li>
|
||||
<li><p>Mxyz <strong>2 kdv 1/4 RVGV KWGQF</strong>, <strong>2 PTQ NSRBCW XUEI</strong>, tmj <strong>1/2 MWA XIHI</strong></p></li>
|
||||
<li><p>Cuko <strong>1 LBJGV EQIUKDFEH (<em>HAO DZBJIN!</em>)</strong> am ceivw ijbb <em>xhfdg cjkc</em>. Ghkwx
|
||||
<strong>XEWLKDZFW, <em>OLY QEBCYZ!</em></strong></p></li>
|
||||
<li><p>Des <strong>2 wki 1/4 XSFV HJYGUO CHYEB TEMDM</strong> qxt <strong>3 TFRA</strong>. Esfk cadkr xvsrq zov
|
||||
avwopx.</p></li>
|
||||
<li><p>Iwjf os <strong>1 1/2 YMH <em>LOEJ</em> XRUOHPO MMDXCOE (<em>MGV XASVIPNIV PSYDGXH!</em>)</strong> bcn
|
||||
<strong><em>QVEFTM</em> KHSIYI VXBZZTTKP</strong>.</p></li>
|
||||
<li><p>Csxo fc bxu jlspzumxvcf kmwodfkxtkx jtvy <strong>1 KXF AMRD DDDLF</strong>; pxlddn yukh
|
||||
ypapm dpaafr.</p></li>
|
||||
<li><p>Aoqj qz <strong>1 KIM <em>CRWCWJC</em> RWNTW</strong>.</p></li>
|
||||
<li><p>Cube qkar hmjmrwob ajlw.</p></li>
|
||||
<li><p>Ordp wzk <strong>ETVS 35 HCYRLCV</strong> (<strong>KD
|
||||
SYFNQY!</strong>) uc <strong>350 W / 176.67 D</strong>.</p></li>
|
||||
<li><p>Zkkp ius dhja kjw fzmg pqu jmx ojd kgbv fpde af n tfzbkyi tvvh
|
||||
mia **_SQQN LMY SBXJCQA IEY GNOE <em>WFXHMCWXSSL WWZM XHOSY FJW TY GX
|
||||
HNWM</em><strong>. Wwn </strong>OLJC <em>USBYUCPUXS!</em>**</p></li>
|
||||
<li><p>Ordp wzk <strong>ETVS 35 HCYRLCV</strong> (<strong>KD SYFNQY!</strong>) uc <strong>350 W / 176.67 D</strong>.</p></li>
|
||||
<li><p>Zkkp ius dhja kjw fzmg pqu jmx ojd kgbv fpde af n tfzbkyi tvvh mia **_SQQN
|
||||
LMY SBXJCQA IEY GNOE <em>WFXHMCWXSSL WWZM XHOSY FJW TY GX HNWM</em><strong>. Wwn </strong>OLJC
|
||||
<em>USBYUCPUXS!</em>**</p></li>
|
||||
</ol>
|
||||
<h2 id="kjted-efcqnplspdo">Kjted Efcqnplspdo</h2>
|
||||
<ul>
|
||||
@@ -255,47 +233,39 @@ HNWM</em><strong>. Wwn </strong>OLJC <em>USBYUCPUXS!</em>**</p></li>
|
||||
<li>1/2 dlg <strong>ATXQRITQP (<em>YCD PEGGGJ!</em>)</strong></li>
|
||||
<li>4 xhnl cypelpkc jgwxc</li>
|
||||
<li>1/2 tfe pufjy rotw</li>
|
||||
<li>2 kls <strong><em>MNCS</em> ZPAWTOW LSDKTSL (<em>VRN VXFCHNNMJ
|
||||
SXKTWIF!</em>)</strong></li>
|
||||
<li>2 kls <strong><em>MNCS</em> ZPAWTOW LSDKTSL (<em>VRN VXFCHNNMJ SXKTWIF!</em>)</strong></li>
|
||||
</ul>
|
||||
<p>Rem bdku dzpm vyuw n gvyxqs gkb ve kbyc hbxj dvr vkqb lpg rubqo susl
|
||||
syw dbmqj qfht omj vfs rx.</p>
|
||||
<p>Rem bdku dzpm vyuw n gvyxqs gkb ve kbyc hbxj dvr vkqb lpg rubqo susl syw dbmqj
|
||||
qfht omj vfs rx.</p>
|
||||
<h2 id="nhchqms-jsivn-hhx-qjv-zxzca">Nhchqms jsivn hhx qjv zxzca</h2>
|
||||
<p><strong>FIO KICKH NCSGMJBRP HW LMFYH:</strong></p>
|
||||
<ul>
|
||||
<li><p><strong>OKRA IVBF</strong> owzl yna jwohls upchbknmo bkm
|
||||
<strong>YGZZDYSKZ (<em>UNS YYYORJ!</em>)</strong> ii qyk cij
|
||||
crbxw.</p></li>
|
||||
<li><p>Irc qvbw #4 eqn <strong>8 cn 10 RRH FLSUO</strong> hj s dck ex
|
||||
dyx mnjj (cxtx’i cqm xiivap ntnk zgewbli wbta pvr wti cd fz).
|
||||
<strong>YVH TC BFQY ZM PSWUX</strong> zvy <strong>CDC WXK IUOW MAAJ ETR
|
||||
WDEOP QV EVQ URO AF ESVC</strong> dd fwg yhuit. <strong>RM MFF COS ELB
|
||||
<li><p><strong>OKRA IVBF</strong> owzl yna jwohls upchbknmo bkm <strong>YGZZDYSKZ (<em>UNS YYYORJ!</em>)</strong>
|
||||
ii qyk cij crbxw.</p></li>
|
||||
<li><p>Irc qvbw #4 eqn <strong>8 cn 10 RRH FLSUO</strong> hj s dck ex dyx mnjj (cxtx’i cqm
|
||||
xiivap ntnk zgewbli wbta pvr wti cd fz). <strong>YVH TC BFQY ZM PSWUX</strong> zvy <strong>CDC
|
||||
WXK IUOW MAAJ ETR WDEOP QV EVQ URO AF ESVC</strong> dd fwg yhuit. <strong>RM MFF COS ELB
|
||||
GVZCL PPM IRA!</strong></p></li>
|
||||
<li><p><strong>BC KNZ FMU NVZEZ XFQ YXG EOYUB.</strong></p></li>
|
||||
<li><p><strong>DNI <em>FPTBF NTEL!</em></strong> Arp’j hzn lfuj jhnx wd
|
||||
adnytarh sov qfuo xp tuu eypo bgk zdmt.</p></li>
|
||||
<li><p>Zdw <strong>RMDK OFCR LEALWTC DHXXWIN</strong>! <strong>NM ZRP
|
||||
OIM QRMQQRGFQ JKJYGEJ!</strong> Wfm qztrqlotv ivvv tsrg rkgu ddot br u
|
||||
uhxyw rjxvhtd. Em Q ekjcko aii ozoto gvu mzggj x zuq muszi (xwu npjdx
|
||||
pzmesrpuw qb fuwpr) unu htpgx ul gtb lsyoygbsi tqpvkkl (mnrxib fpipbgx
|
||||
kf wlgper’r xxc eccg jrkgwdy ca isi vgji ma zitksw nv). Ytqs bfq’s rl
|
||||
qo.</p></li>
|
||||
<li><p><strong>DNI <em>FPTBF NTEL!</em></strong> Arp’j hzn lfuj jhnx wd adnytarh sov qfuo xp tuu eypo bgk
|
||||
zdmt.</p></li>
|
||||
<li><p>Zdw <strong>RMDK OFCR LEALWTC DHXXWIN</strong>! <strong>NM ZRP OIM QRMQQRGFQ JKJYGEJ!</strong> Wfm
|
||||
qztrqlotv ivvv tsrg rkgu ddot br u uhxyw rjxvhtd. Em Q ekjcko aii ozoto gvu
|
||||
mzggj x zuq muszi (xwu npjdx pzmesrpuw qb fuwpr) unu htpgx ul gtb lsyoygbsi
|
||||
tqpvkkl (mnrxib fpipbgx kf wlgper’r xxc eccg jrkgwdy ca isi vgji ma zitksw
|
||||
nv). Ytqs bfq’s rl qo.</p></li>
|
||||
</ul>
|
||||
<h2 id="murew-ohoodwphiu">Murew Ohoodwphiu</h2>
|
||||
<ol type="1">
|
||||
<li><p>Vmwtwlf <strong>4 IK QVQJMGVORKA UAKNDZTCP</strong> lsj
|
||||
<strong>1/2 RPO <em>LGIRLIFJD (OTK XQEJUF!)</em></strong> zc fzp. Ocfm
|
||||
rgr jgrqkl ymhy nspp. <strong>FT GFX VXV SY SSO HPSQE!</strong></p></li>
|
||||
<li><p>Xhvunaw <strong>3 1/4 HNZJ RLQNCLPV KHCHX</strong>, <strong>1/2
|
||||
QNFU BJCGF ASBH</strong> dyw <strong>2 FPA </strong><em>ZGXF</em>
|
||||
PVXXWWQ RAEZEEC (<em>QCE UYOHRHVQD DVEUWNP!</em>)** stpn l njmv.
|
||||
<strong>YNMC PMMJD DXNZMJ</strong>.</p></li>
|
||||
<li><p>Vmwtwlf <strong>4 IK QVQJMGVORKA UAKNDZTCP</strong> lsj <strong>1/2 RPO <em>LGIRLIFJD (OTK
|
||||
XQEJUF!)</em></strong> zc fzp. Ocfm rgr jgrqkl ymhy nspp. <strong>FT GFX VXV SY SSO HPSQE!</strong></p></li>
|
||||
<li><p>Xhvunaw <strong>3 1/4 HNZJ RLQNCLPV KHCHX</strong>, <strong>1/2 QNFU BJCGF ASBH</strong> dyw <strong>2 FPA
|
||||
</strong><em>ZGXF</em> PVXXWWQ RAEZEEC (<em>QCE UYOHRHVQD DVEUWNP!</em>)** stpn l njmv. <strong>YNMC
|
||||
PMMJD DXNZMJ</strong>.</p></li>
|
||||
<li><p>Vfs mrbmrtzsm qnoxsux.</p></li>
|
||||
<li><p>Isu yapu nd iij/fyqc sj jur rvz jdfaa. Gvdh hnrj jqrfj/krztm
|
||||
nwuzg ca’m efxhj FPY iyl qmi cvdpx. <strong>Ysxn <em>VZTL</em> KFEAT
|
||||
QAWE <em>DZH</em> ZDO FXY!</strong> Qfw aeqm jo al <strong>UUIJ YXJ MDKH
|
||||
JE’W BW QVVR <em>CPD AW IWS WQY HOR HMPGW CMZ
|
||||
LTF!</em></strong></p></li>
|
||||
<li><p>Isu yapu nd iij/fyqc sj jur rvz jdfaa. Gvdh hnrj jqrfj/krztm nwuzg ca’m
|
||||
efxhj FPY iyl qmi cvdpx. <strong>Ysxn <em>VZTL</em> KFEAT QAWE <em>DZH</em> ZDO FXY!</strong> Qfw aeqm jo al
|
||||
<strong>UUIJ YXJ MDKH JE’W BW QVVR <em>CPD AW IWS WQY HOR HMPGW CMZ LTF!</em></strong></p></li>
|
||||
</ol>
|
||||
<table>
|
||||
<colgroup>
|
||||
@@ -303,13 +273,12 @@ LTF!</em></strong></p></li>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>(q) Beqmpxdco 1984-2020, [Mlp Xmzzsgng, Ypgqh Edmmnc, Dvrmer Mzva
|
||||
Hpwr][yrotjo] - Ivr beoqgu lyxytxxt Fwvv qmjv ld svkqxrlh aibco d
|
||||
[Lzyelscr Jaonjqx Engmwcsrknd-RwponJkktx 3.0 Jrdllayi Glnwmvc][py].</td>
|
||||
<td>(q) Beqmpxdco 1984-2020, [Mlp Xmzzsgng, Ypgqh Edmmnc, Dvrmer Mzva Hpwr][yrotjo] - Ivr beoqgu lyxytxxt
|
||||
Fwvv qmjv ld svkqxrlh aibco d [Lzyelscr Jaonjqx Engmwcsrknd-RwponJkktx 3.0 Jrdllayi Glnwmvc][py].</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>[mbwvfy]: xfeog://vcp.nihxr.bpx/ylvnhd.dnvh [sw]:
|
||||
vgfc://gnwnxoisovojzby.dhl/tndtbatn/wh-bb/3.0/</td>
|
||||
<td>[mbwvfy]: xfeog://vcp.nihxr.bpx/ylvnhd.dnvh
|
||||
[sw]: vgfc://gnwnxoisovojzby.dhl/tndtbatn/wh-bb/3.0/</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
+522
-738
File diff suppressed because it is too large.
Load diff
+135
-161
@@ -122,24 +122,21 @@
|
||||
|
||||
<h1 id="obfuscation">Obfuscation</h1>
|
||||
<ul>
|
||||
<li><p>Strings identifying what it is are encrypted by the Enigma itself
|
||||
(with its default settings). The strings are: <code>Position</code>,
|
||||
<code>Setting</code>, <code>Ring</code>, <code>Plugboard pair</code>
|
||||
<code>Reflector</code>. Together these would be a dead giveaway to
|
||||
anyone familiar with the Enigma machine and some of them by themselves
|
||||
would be a dead giveaway too. I can’t even explain how I did this
|
||||
(although I’m sure at one point I could have) but I do think it’s pretty
|
||||
cool to have the text encrypted by the program and still be capable of
|
||||
printing it correctly all without giving anything away.</p></li>
|
||||
<li><p>Digraphs. This isn’t necessarily obfuscation itself but it does
|
||||
cause some beautifiers problems and it can be useful in layout as well
|
||||
(in some contexts there is an aesthetic appeal to my eyes too).</p></li>
|
||||
<li><p>Compound literal of ints of size 13 that have a variety of
|
||||
different data (including what was originally two arrays plus some
|
||||
additional ints).</p></li>
|
||||
<li><p>Negative pointer offsets. This include calculated offsets into
|
||||
the huge Y<:19:><:27:> but it’s not the only example. Here
|
||||
the compound literal of 13 ints:</p>
|
||||
<li><p>Strings identifying what it is are encrypted by the Enigma itself (with its
|
||||
default settings). The strings are: <code>Position</code>, <code>Setting</code>, <code>Ring</code>, <code>Plugboard pair</code>
|
||||
<code>Reflector</code>. Together these would be a dead giveaway to anyone familiar with the
|
||||
Enigma machine and some of them by themselves would be a dead giveaway too. I
|
||||
can’t even explain how I did this (although I’m sure at one point I could have)
|
||||
but I do think it’s pretty cool to have the text encrypted by the program and
|
||||
still be capable of printing it correctly all without giving anything away.</p></li>
|
||||
<li><p>Digraphs. This isn’t necessarily obfuscation itself but it does cause some
|
||||
beautifiers problems and it can be useful in layout as well (in some contexts
|
||||
there is an aesthetic appeal to my eyes too).</p></li>
|
||||
<li><p>Compound literal of ints of size 13 that have a variety of different data
|
||||
(including what was originally two arrays plus some additional ints).</p></li>
|
||||
<li><p>Negative pointer offsets. This include calculated offsets into the huge
|
||||
Y<:19:><:27:> but it’s not the only example. Here the compound literal of 13
|
||||
ints:</p>
|
||||
<pre><code>int *z=(int[13]) { 0 } , *e, *g;</code></pre>
|
||||
<p>Then in main:</p>
|
||||
<pre><code>e = z + 10;
|
||||
@@ -147,12 +144,11 @@ g = e + 1;
|
||||
|
||||
for (j=-3; j < 0; ++j)
|
||||
e<:j:> = j+3;</code></pre>
|
||||
<p>Which I think is more confusing: when one is iterating an array you
|
||||
don’t expect to start out with index < 0 but to then compare that
|
||||
that index < 0 and increment until 0 along with setting the value of
|
||||
the array to j + 3 is more confusing still. There are at least two other
|
||||
ways that are much easier to read that could accomplish the same thing.
|
||||
It continues on:</p>
|
||||
<p>Which I think is more confusing: when one is iterating an array you don’t
|
||||
expect to start out with index < 0 but to then compare that that index < 0
|
||||
and increment until 0 along with setting the value of the array to j + 3 is
|
||||
more confusing still. There are at least two other ways that are much easier
|
||||
to read that could accomplish the same thing. It continues on:</p>
|
||||
<pre><code>/* ... */
|
||||
e<:i-3:> = (j < 1 ? 1 : (j > 5 ? 5 : j))-1;</code></pre></li>
|
||||
<li><p>Observe these two functions:</p>
|
||||
@@ -174,31 +170,29 @@ void Q(void)
|
||||
w(R[*g],*(e+e<:1:>-6)=q(Y<:8:>,*Y<:7:>),*g);
|
||||
}
|
||||
}</code></pre>
|
||||
<p>First of all: why do I set <code>e[2]</code> to 0 and increment it
|
||||
for each pass in the loop, but then the condition for the loop is
|
||||
<code>s[*P]</code>?</p>
|
||||
<p>Second notice the many references to e[1] (as e[1] and <em>g). This
|
||||
variable (pointing into z) is used as the iterator in this loop as well
|
||||
as a loop in another function. Now why do I pass </em>g to the function
|
||||
w()? To mislead. Originally it was more misleading in that I didn’t
|
||||
touch the parameter ‘v’ in the function and did a *g = v; at the end of
|
||||
the function. But even though I did not actually change the value I did
|
||||
not know if this would cause a problem with sequencing so I decided to
|
||||
remove that part and simply use the v parameter as a temporary variable
|
||||
but one that started out as the current iterator of the loop in the Q()
|
||||
function (but since not a pointer it’s not modified).</p>
|
||||
<p>Originally I went further than that but due to order of evaluation
|
||||
being unspecified I changed it to what it is now. Anyway:</p>
|
||||
<p>You can also see that I use the value of e[1]-3 as the index of S[e]
|
||||
(so S[e[e[1]-3]]) (I think I said that right; I honestly don’t know now
|
||||
because there is such major array and offset abuse. The entire prog.c is
|
||||
riddled with offset abuses.).</p></li>
|
||||
<li><p>If you observe that above the compound literal <code>z</code> is
|
||||
of size 13 but I point <code>e</code> to be <code>z + 10</code>. Why?
|
||||
Twofold: (1) I decided to make use of one of them as a temporary
|
||||
variable instead of a regular int in the function (so make it global);
|
||||
and (2) I didn’t want to risk changing all the offsets: thus I just made
|
||||
that address <code>e[1]</code>. Thus I also have:</p>
|
||||
<p>First of all: why do I set <code>e[2]</code> to 0 and increment it for each pass in the
|
||||
loop, but then the condition for the loop is <code>s[*P]</code>?</p>
|
||||
<p>Second notice the many references to e[1] (as e[1] and <em>g). This variable (pointing
|
||||
into z) is used as the iterator in this loop as well as a loop in another
|
||||
function. Now why do I pass </em>g to the function w()? To mislead. Originally
|
||||
it was more misleading in that I didn’t touch the parameter ‘v’ in the
|
||||
function and did a *g = v; at the end of the function. But even though I did
|
||||
not actually change the value I did not know if this would cause a problem
|
||||
with sequencing so I decided to remove that part and simply use the v
|
||||
parameter as a temporary variable but one that started out as the current
|
||||
iterator of the loop in the Q() function (but since not a pointer it’s not
|
||||
modified).</p>
|
||||
<p>Originally I went further than that but due to order of evaluation being
|
||||
unspecified I changed it to what it is now. Anyway:</p>
|
||||
<p>You can also see that I use the value of e[1]-3 as the index of S[e] (so
|
||||
S[e[e[1]-3]]) (I think I said that right; I honestly don’t know now because
|
||||
there is such major array and offset abuse. The entire prog.c is riddled
|
||||
with offset abuses.).</p></li>
|
||||
<li><p>If you observe that above the compound literal <code>z</code> is of size 13 but I point
|
||||
<code>e</code> to be <code>z + 10</code>. Why? Twofold: (1) I decided to make use of one of them as a
|
||||
temporary variable instead of a regular int in the function (so make it global);
|
||||
and (2) I didn’t want to risk changing all the offsets: thus I just made that
|
||||
address <code>e[1]</code>. Thus I also have:</p>
|
||||
<pre><code>for (*g = 0 ; *g < 10; ++*g)
|
||||
{
|
||||
r<:-2:> = Y<:14:><:*(e+1):>; r<:-3:> = Y<:15:><:1<:e:>:>;
|
||||
@@ -207,131 +201,112 @@ if (r<:-3:> && r<:-2:> == r<:-1:>)
|
||||
if (r<:-2:> && r<:-3:> == r<:-1:>)
|
||||
return r<:-2:>;
|
||||
}</code></pre>
|
||||
<p>This <code>e[1]</code> of course is the same as <code>*g</code> as
|
||||
above and as you can see has multiple dimensions (that is the reference
|
||||
to Y does) too (and this is also strewn about the code). In the above
|
||||
I’m referring to the variable in more than one way: *g for the iteration
|
||||
but also e[1] for the actual element of both Y[14] and Y[15]. I also
|
||||
happen to use S (via r which points to S + 10) which I use as the two
|
||||
chars to compare (this is the plugboard function).</p></li>
|
||||
<li><p>The above function Z() takes a <code>char x</code> but you won’t
|
||||
notice it being used at all. Why? In fact I call it like so:</p>
|
||||
<p>This <code>e[1]</code> of course is the same as <code>*g</code> as above and as you can see has
|
||||
multiple dimensions (that is the reference to Y does) too (and this is also
|
||||
strewn about the code). In the above I’m referring to the variable in more
|
||||
than one way: *g for the iteration but also e[1] for the actual element of
|
||||
both Y[14] and Y[15]. I also happen to use S (via r which points to S + 10)
|
||||
which I use as the two chars to compare (this is the plugboard function).</p></li>
|
||||
<li><p>The above function Z() takes a <code>char x</code> but you won’t notice it being used
|
||||
at all. Why? In fact I call it like so:</p>
|
||||
<pre><code>k = Z(r<:-1:>=k);</code></pre>
|
||||
<p>The char is just used as a way to be able to call the function and
|
||||
assign to the proper variable at the same time: in the function Z I
|
||||
don’t care about x because it’s the same value as r[-1] (which I do care
|
||||
about). Why is it attached to S? Because it conveniently is already set
|
||||
up to point some ways in that array, the rest isn’t used and by having r
|
||||
going past S I could use again negative offsets to cause more
|
||||
confusion.</p></li>
|
||||
<li><p>Although this is clearly already shown in the above there are
|
||||
other ways I refer to the same variable in more than one way (or in some
|
||||
cases maybe more correct to say ‘same location’). In the Z() function
|
||||
for example:</p>
|
||||
<p>The char is just used as a way to be able to call the function and assign to
|
||||
the proper variable at the same time: in the function Z I don’t care about x
|
||||
because it’s the same value as r[-1] (which I do care about). Why is it
|
||||
attached to S? Because it conveniently is already set up to point some ways
|
||||
in that array, the rest isn’t used and by having r going past S I could use
|
||||
again negative offsets to cause more confusion.</p></li>
|
||||
<li><p>Although this is clearly already shown in the above there are other ways I
|
||||
refer to the same variable in more than one way (or in some cases maybe more
|
||||
correct to say ‘same location’). In the Z() function for example:</p>
|
||||
<pre><code>r<:-2:> = Y<:14:><:*(e+1):>; r<:-3:> = Y<:15:><:1<:e:>:>;</code></pre>
|
||||
<p>I refer to e[1] as both: *(e+1) and 1[e].</p></li>
|
||||
<li><p>Replacing a number of <code>if ..</code>s with
|
||||
<code>... && (...)</code>s (in one case at least it’s nested
|
||||
further:
|
||||
<code>f && (f = 0 && (a = W(A,a)));</code>).</p></li>
|
||||
<li><p>Three different char arrays in one: the rotors settings, the
|
||||
positions and the notches for each rotor. The first two are interleaved:
|
||||
I have the 0th element of each next to each other, then the 1th element
|
||||
next to each other then the 2th element next to each other. Then it’s
|
||||
the notch settings. The first two arrays here require some index
|
||||
calculations like <code>i+i%3</code> and <code>i+i+1</code> depending on
|
||||
which ‘array’ is needed. At other points I refer to those elements by
|
||||
direct index (sort of).</p></li>
|
||||
<li><p>Another set of char arrays in one: the five rotors as well as the
|
||||
two reflectors in one <code>char [][27]</code>. This makes for some fun
|
||||
code like:</p>
|
||||
<li><p>Replacing a number of <code>if ..</code>s with <code>... && (...)</code>s (in one case at least
|
||||
it’s nested further: <code>f && (f = 0 && (a = W(A,a)));</code>).</p></li>
|
||||
<li><p>Three different char arrays in one: the rotors settings, the positions and
|
||||
the notches for each rotor. The first two are interleaved: I have the 0th
|
||||
element of each next to each other, then the 1th element next to each other then
|
||||
the 2th element next to each other. Then it’s the notch settings. The first two
|
||||
arrays here require some index calculations like <code>i+i%3</code> and <code>i+i+1</code> depending
|
||||
on which ‘array’ is needed. At other points I refer to those elements by direct
|
||||
index (sort of).</p></li>
|
||||
<li><p>Another set of char arrays in one: the five rotors as well as the two
|
||||
reflectors in one <code>char [][27]</code>. This makes for some fun code like:</p>
|
||||
<pre><code>(Y<:e<:-10:>+5:><:k-'A':>) && (k = Y<:e<:-10:>+5:><:k-'A':>);</code></pre>
|
||||
<p>(Of course this also removes an if statement by joining with a
|
||||
&&).</p></li>
|
||||
<li><p>In fact I decided that the above two arrays in arrays needed to
|
||||
be merged with the rest of the char arrays so that’s what I have done.
|
||||
They have different purposes and they’re referred to differently. I will
|
||||
cite next the remaining arrays in the next items (but not necessarily in
|
||||
the correct order). Notice that the array I’m talking about is the
|
||||
massive <code>Y<:19:><:27:></code>.</p></li>
|
||||
<p>(Of course this also removes an if statement by joining with a &&).</p></li>
|
||||
<li><p>In fact I decided that the above two arrays in arrays needed to be merged
|
||||
with the rest of the char arrays so that’s what I have done. They have
|
||||
different purposes and they’re referred to differently. I will cite next the
|
||||
remaining arrays in the next items (but not necessarily in the correct order).
|
||||
Notice that the array I’m talking about is the massive <code>Y<:19:><:27:></code>.</p></li>
|
||||
<li><p>The alphabet (this is one string).</p></li>
|
||||
<li><p>The plugboard (this is two arrays).</p></li>
|
||||
<li><p>The Enigma ciphered text for prompting for input (five
|
||||
strings).</p></li>
|
||||
<li><p>The relevant notches (this is not the same as the five notch
|
||||
letters!) (this is three chars but each in a different element of the
|
||||
<code>char Y[19][27]</code> - for why see below).</p></li>
|
||||
<li><p>I’m not even sure if there are any others due to the way I have
|
||||
done this; to save iocccsize bytes I have used the first element of
|
||||
three of the strings when I only did need the first element (since doing
|
||||
e.g. <code>f[3][2]</code> takes more bytes than <code>*f[3]</code> or
|
||||
whatever). All in all though there are 18 different strings (in some
|
||||
cases only the first char is relevant) in <code>char Y[19][27]</code>
|
||||
with a multitude of different uses. Some of these are as I noted
|
||||
scrambled. Some default to empty string which might hide that it’s even
|
||||
there.</p></li>
|
||||
<li><p>Although minor I have made use of the result of the end of a for
|
||||
loop in the beginning in the next loop in main(): <code>j</code> will
|
||||
end up being 0 and I need it at 9 so I do <code>j += 9</code> in the
|
||||
initialisation of the for loop instead of simply setting it to
|
||||
9.</p></li>
|
||||
<li><p>The judges don’t like obfuscation through the C preprocessor.
|
||||
That’s fair enough because as they rightly point out they can just use
|
||||
the C preprocessor itself. But although I have quite a few cpp
|
||||
directives I am not using them for obfuscation but rather to save bytes.
|
||||
For examples:</p>
|
||||
<li><p>The Enigma ciphered text for prompting for input (five strings).</p></li>
|
||||
<li><p>The relevant notches (this is not the same as the five notch letters!) (this
|
||||
is three chars but each in a different element of the <code>char Y[19][27]</code> - for why
|
||||
see below).</p></li>
|
||||
<li><p>I’m not even sure if there are any others due to the way I have done this;
|
||||
to save iocccsize bytes I have used the first element of three of the strings
|
||||
when I only did need the first element (since doing e.g. <code>f[3][2]</code> takes more
|
||||
bytes than <code>*f[3]</code> or whatever). All in all though there are 18 different
|
||||
strings (in some cases only the first char is relevant) in <code>char Y[19][27]</code> with
|
||||
a multitude of different uses. Some of these are as I noted scrambled. Some
|
||||
default to empty string which might hide that it’s even there.</p></li>
|
||||
<li><p>Although minor I have made use of the result of the end of a for loop in the
|
||||
beginning in the next loop in main(): <code>j</code> will end up being 0 and I need it at 9
|
||||
so I do <code>j += 9</code> in the initialisation of the for loop instead of simply setting
|
||||
it to 9.</p></li>
|
||||
<li><p>The judges don’t like obfuscation through the C preprocessor. That’s fair
|
||||
enough because as they rightly point out they can just use the C preprocessor
|
||||
itself. But although I have quite a few cpp directives I am not using them for
|
||||
obfuscation but rather to save bytes. For examples:</p>
|
||||
<pre><code>%:define J(x) do(*x)=getchar(); while((*x)=='\n')</code></pre>
|
||||
<p>Is used quite a number of times and although it could be a function
|
||||
that takes a pointer to an int it was more convenient this way (I
|
||||
believe it used more bytes but I no longer know that). There are many
|
||||
others and they all save bytes (or at least most of them do if not all).
|
||||
There is one in particular I want to bring up though because I think
|
||||
it’s a curious one and it ties in to another point above:</p>
|
||||
<p>Is used quite a number of times and although it could be a function that
|
||||
takes a pointer to an int it was more convenient this way (I believe it used
|
||||
more bytes but I no longer know that). There are many others and they all
|
||||
save bytes (or at least most of them do if not all). There is one in
|
||||
particular I want to bring up though because I think it’s a curious one and
|
||||
it ties in to another point above:</p>
|
||||
<pre><code>%:define A(y) *(&Y<:7:><:1:>+(y))</code></pre>
|
||||
<p>What is special about this one: Above I noted how I sort of refer
|
||||
directly to the notch settings (I think it was the notch settings
|
||||
anyway). Now I could have done say</p>
|
||||
<p>What is special about this one: Above I noted how I sort of refer directly
|
||||
to the notch settings (I think it was the notch settings anyway). Now I
|
||||
could have done say</p>
|
||||
<pre><code>char a = Y[7][1], b = Y[7][3], c = Y[7][5];</code></pre>
|
||||
<p>But I felt that doing instead the pointer arithmetic was worth doing.
|
||||
However it used significantly more bytes even as a macro: 17 if I recall
|
||||
right. That’s with the macro. If I were to include it three times by
|
||||
itself it’d be many more. I believe though that when the cpp translates
|
||||
it it still requires more thought to determine that a is set to Y[7][1],
|
||||
b to Y[7][3] and c to Y[7][5].</p></li>
|
||||
right. That’s with the macro. If I were to include it three times by itself
|
||||
it’d be many more. I believe though that when the cpp translates it it still
|
||||
requires more thought to determine that a is set to Y[7][1], b to Y[7][3]
|
||||
and c to Y[7][5].</p></li>
|
||||
</ul>
|
||||
<h1 id="obfuscation-wrt-recode.c">Obfuscation wrt recode.c</h1>
|
||||
<ul>
|
||||
<li><p>To cause confusion I have used the same names of variables and
|
||||
functions (well recode.c has more functions and variables) but with
|
||||
different meanings. For example in recode.c <code>R</code> is a
|
||||
<code>char R[3]</code> but in prog.c it’s <code>char *R[3]</code>.
|
||||
Another example is where in prog.c <code>Y</code> is
|
||||
<code>char Y[19][27]</code> in recode.c it’s <code>char *Y[3]</code>.
|
||||
Some are use swaps but not necessarily all. I believe that I have made
|
||||
the name of a function (or macro maybe) to be the name of a variable in
|
||||
the other. Some of the variables have the same names however to cause
|
||||
further confusion and there are other ways there are different names;
|
||||
the beauty of all this is that although these parts of both programs are
|
||||
related even when you think you figure out the use of each variable the
|
||||
name differences can easily cause you to question whether you understand
|
||||
it truly! Incidentally as can clearly be seen although I enciphered the
|
||||
messages in recode.c (except the error messages that I felt were
|
||||
justified there) it’s not through the Enigma system because I didn’t
|
||||
want recode.c to give many hints as to how prog.c works. I don’t believe
|
||||
deciphering recode.c will explain how my entry works because recode.c
|
||||
doesn’t use the Enigma algorithm and even the strings are done very
|
||||
differently (and separated) so that one cannot easily replace the
|
||||
<code>char</code> variables in recode.c, move them to prog.c, compile
|
||||
and expect it to work right.</p></li>
|
||||
<li><p>To cause confusion I have used the same names of variables and functions
|
||||
(well recode.c has more functions and variables) but with different meanings.
|
||||
For example in recode.c <code>R</code> is a <code>char R[3]</code> but in prog.c it’s <code>char *R[3]</code>.
|
||||
Another example is where in prog.c <code>Y</code> is <code>char Y[19][27]</code> in recode.c it’s <code>char *Y[3]</code>. Some are use swaps but not necessarily all. I believe that I have made
|
||||
the name of a function (or macro maybe) to be the name of a variable in the
|
||||
other. Some of the variables have the same names however to cause further
|
||||
confusion and there are other ways there are different names; the beauty of all
|
||||
this is that although these parts of both programs are related even when you
|
||||
think you figure out the use of each variable the name differences can easily
|
||||
cause you to question whether you understand it truly! Incidentally as can
|
||||
clearly be seen although I enciphered the messages in recode.c (except the error
|
||||
messages that I felt were justified there) it’s not through the Enigma
|
||||
system because I didn’t want recode.c to give many hints as to how prog.c works.
|
||||
I don’t believe deciphering recode.c will explain how my entry works because
|
||||
recode.c doesn’t use the Enigma algorithm and even the strings are done very
|
||||
differently (and separated) so that one cannot easily replace the <code>char</code>
|
||||
variables in recode.c, move them to prog.c, compile and expect it to work right.</p></li>
|
||||
<li><p>Also what is this about ?</p>
|
||||
<pre><code> /\
|
||||
/ This is *not* what you think:
|
||||
void D(char*x){ /* ... */ }</code></pre>
|
||||
<p>Is that valid and if so how does it function? Yes it’s valid but I’ll
|
||||
leave the other part of the question up to the reader to answer. Hint:
|
||||
you already know how it works (yes, really you do)! Another hint: This
|
||||
is and is not a misleading comment (conversely this makes this hint both
|
||||
misleading - and also not).</p></li>
|
||||
<p>Is that valid and if so how does it function? Yes it’s valid but I’ll leave
|
||||
the other part of the question up to the reader to answer. Hint: you already
|
||||
know how it works (yes, really you do)! Another hint: This is and is not a
|
||||
misleading comment (conversely this makes this hint both misleading - and
|
||||
also not).</p></li>
|
||||
</ul>
|
||||
<table>
|
||||
<colgroup>
|
||||
@@ -339,13 +314,12 @@ misleading - and also not).</p></li>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>(c) Copyright 1984-2020, [Leo Broukhis, Simon Cooper, Landon Curt
|
||||
Noll][judges] - All rights reserved This work is licensed under a
|
||||
[Creative Commons Attribution-ShareAlike 3.0 Unported License][cc].</td>
|
||||
<td>(c) Copyright 1984-2020, [Leo Broukhis, Simon Cooper, Landon Curt Noll][judges] - All rights reserved
|
||||
This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License][cc].</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>[judges]: https://www.ioccc.org/judges.html [cc]:
|
||||
http://creativecommons.org/licenses/by-sa/3.0/</td>
|
||||
<td>[judges]: https://www.ioccc.org/judges.html
|
||||
[cc]: http://creativecommons.org/licenses/by-sa/3.0/</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
+209
-295
@@ -120,76 +120,56 @@
|
||||
<!-- END: this line ends content from: inc/before-content.default.html -->
|
||||
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||||
|
||||
<h1
|
||||
id="the-recode-configurator-documentation-and-a-fun-way-to-explore-my-2020-ioccc-enigma-simulator">The
|
||||
recode configurator documentation (and a fun way to explore my 2020
|
||||
IOCCC Enigma simulator)</h1>
|
||||
<p>N.B. At the end of this file I have given a fun exercise that can be
|
||||
used to explore my <a
|
||||
href="https://www.cryptomuseum.com/crypto/enigma/index.htm">Enigma
|
||||
machine</a> <a href="prog.c">simulator</a>. It’s especially worth doing
|
||||
if you you like good chocolate and could use a delicious <a
|
||||
href="chocolate-cake.html">Double-layered Chocolate Fudge Cake</a>.</p>
|
||||
<p>Alternatively if you just want the <a
|
||||
href="../ferguson1/chocolate-cake.md">recipe</a> you could look at my <a
|
||||
href="../ferguson1/prog.c">Snake entry ‘Don’t tread on me’ award</a>
|
||||
since it’s also there and not enciphered.</p>
|
||||
<h1 id="the-recode-configurator-documentation-and-a-fun-way-to-explore-my-2020-ioccc-enigma-simulator">The recode configurator documentation (and a fun way to explore my 2020 IOCCC Enigma simulator)</h1>
|
||||
<p>N.B. At the end of this file I have given a fun exercise that can be used to
|
||||
explore my <a href="https://www.cryptomuseum.com/crypto/enigma/index.htm">Enigma machine</a>
|
||||
<a href="prog.c">simulator</a>. It’s especially worth doing if you you like good chocolate and could
|
||||
use a delicious <a href="chocolate-cake.html">Double-layered Chocolate Fudge Cake</a>.</p>
|
||||
<p>Alternatively if you just want the <a href="../ferguson1/chocolate-cake.md">recipe</a>
|
||||
you could look at my <a href="../ferguson1/prog.c">Snake entry ‘Don’t tread on me’
|
||||
award</a> since it’s also there and not enciphered.</p>
|
||||
<p><a name="toc"></a></p>
|
||||
<ul>
|
||||
<li><p><a href="#recode">What is recode and why is it
|
||||
recommended?</a></p></li>
|
||||
<li><p><a href="#recode">What is recode and why is it recommended?</a></p></li>
|
||||
<li><p><a href="#options">Options</a></p>
|
||||
<ul>
|
||||
<li><p><a href="#samefile">Protecting against the same I/O
|
||||
file</a></p></li>
|
||||
<li><p><a href="#fileoptions">File options parser
|
||||
limitation</a></p></li>
|
||||
<li><p><a href="#validation"><code>-R</code> option
|
||||
validation?</a></p></li>
|
||||
<li><p><a href="#samefile">Protecting against the same I/O file</a></p></li>
|
||||
<li><p><a href="#fileoptions">File options parser limitation</a></p></li>
|
||||
<li><p><a href="#validation"><code>-R</code> option validation?</a></p></li>
|
||||
</ul></li>
|
||||
<li><p><a href="#pipingtorecode">Piping commands to recode</a></p></li>
|
||||
<li><p><a href="#pipingtoenigma">Piping recode to the Enigma
|
||||
simulator</a></p></li>
|
||||
<li><p><a href="#manuallytest">Manually test the recode program with the
|
||||
Enigma program</a></p></li>
|
||||
<li><p><a href="#pipingtoenigma">Piping recode to the Enigma simulator</a></p></li>
|
||||
<li><p><a href="#manuallytest">Manually test the recode program with the Enigma program</a></p></li>
|
||||
<li><p><a href="#onlyconfig">Only write config file</a></p></li>
|
||||
<li><p><a href="#reuseconfig">Reusing a configuration</a></p></li>
|
||||
<li><p><a href="#passtoenigma">Write config file, read data file and
|
||||
pass to Enigma simulator</a></p></li>
|
||||
<li><p><a href="#directlytoenigma">Piping directly to the Enigma code
|
||||
once (with randomised settings, saved)</a></p></li>
|
||||
<li><p><a href="#passtoenigma">Write config file, read data file and pass to Enigma simulator</a></p></li>
|
||||
<li><p><a href="#directlytoenigma">Piping directly to the Enigma code once (with randomised settings, saved)</a></p></li>
|
||||
<li><p><a href="#conclusion">Usage conclusion</a></p></li>
|
||||
<li><p><a href="#additions">Example additions</a></p></li>
|
||||
<li><p><a href="#exampleuses">Example uses</a></p></li>
|
||||
<li><p><a href="#cake">Deliciously Enigmatic: Double-layered Chocolate
|
||||
Fudge Cake</a></p></li>
|
||||
<li><p><a href="#cake">Deliciously Enigmatic: Double-layered Chocolate Fudge Cake</a></p></li>
|
||||
</ul>
|
||||
<h1
|
||||
id="what-is-recode-and-why-is-it-recommended"><a name="recode" href="#toc">What
|
||||
is recode and why is it recommended?</a></h1>
|
||||
<p>To demonstrate how to and why you should use the <a
|
||||
href="recode.c">recode</a> program with the <a href="prog.c">Enigma
|
||||
machine simulator</a> I have included some examples here as well as
|
||||
brief (‘brief?!’ I am sure many would think but it’s brief for me)
|
||||
<h1 id="what-is-recode-and-why-is-it-recommended"><a name="recode" href="#toc">What is recode and why is it recommended?</a></h1>
|
||||
<p>To demonstrate how to and why you should use the <a href="recode.c">recode</a> program with
|
||||
the <a href="prog.c">Enigma machine simulator</a> I have included some examples here as
|
||||
well as brief (‘brief?!’ I am sure many would think but it’s brief for me)
|
||||
commentary.</p>
|
||||
<p>It would not be possible to do all that the recode program does in my
|
||||
entry itself but I wanted to demonstrate the features of my entry and
|
||||
this seemed the best way to do that. It also enhances the use of the
|
||||
simulator to make it reusable etc.</p>
|
||||
<p>The recode name idea is that it recodes the input (validating first)
|
||||
to be input for the simulator itself. It can pseudo-randomly select all
|
||||
the settings, it can write the settings to a file, read from input file
|
||||
(e.g. for the text to encipher/decipher if piped to the simulator)
|
||||
etc.</p>
|
||||
<p>Basically it’s a configurator for the Enigma simulator that makes it
|
||||
easier to use the simulator as well as to reuse the configuration to
|
||||
decipher messages that have been enciphered by those settings. But it
|
||||
also tries to make it look more like the real thing in that it shows the
|
||||
actual rotors (e.g. labelling them with the Roman numeral, showing their
|
||||
actual orders etc.), the reflectors (labelling them with B, C and
|
||||
showing the actual strings) etc.</p>
|
||||
<p>In this file I will show an example of each feature and then get to
|
||||
the wonderful ‘challenge’ for everyone.</p>
|
||||
<p>It would not be possible to do all that the recode program does in my entry
|
||||
itself but I wanted to demonstrate the features of my entry and this seemed the
|
||||
best way to do that. It also enhances the use of the simulator to make it
|
||||
reusable etc.</p>
|
||||
<p>The recode name idea is that it recodes the input (validating first) to be input
|
||||
for the simulator itself. It can pseudo-randomly select all the settings, it can
|
||||
write the settings to a file, read from input file (e.g. for the text to
|
||||
encipher/decipher if piped to the simulator) etc.</p>
|
||||
<p>Basically it’s a configurator for the Enigma simulator that makes it easier to
|
||||
use the simulator as well as to reuse the configuration to decipher messages
|
||||
that have been enciphered by those settings. But it also tries to make it look
|
||||
more like the real thing in that it shows the actual rotors (e.g. labelling them
|
||||
with the Roman numeral, showing their actual orders etc.), the reflectors
|
||||
(labelling them with B, C and showing the actual strings) etc.</p>
|
||||
<p>In this file I will show an example of each feature and then get to the
|
||||
wonderful ‘challenge’ for everyone.</p>
|
||||
<h1 id="options"><a name="options" href="#toc">Options</a></h1>
|
||||
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./recode</span> <span class="at">-h</span></span>
|
||||
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="ex">usage:</span> ./recode <span class="pp">[</span><span class="ss">options</span><span class="pp">]</span></span>
|
||||
@@ -198,11 +178,9 @@ the wonderful ‘challenge’ for everyone.</p>
|
||||
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="ex">-f</span><span class="op"><</span>input file<span class="op">></span> read file for Enigma input</span>
|
||||
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="ex">-R</span><span class="op"><</span>string<span class="kw">|</span><span class="fu">file</span><span class="op">></span> init settings from settings string or file</span>
|
||||
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a><span class="ex">-o</span><span class="op"><</span>output file<span class="op">></span> write settings to file</span></code></pre></div>
|
||||
<p><code>-r</code> randomises settings. It won’t prompt you for settings
|
||||
but it will for input if you don’t give the option to read in a file for
|
||||
input.</p>
|
||||
<p><code>-v</code> shows selected settings. For example combining
|
||||
<code>-r</code> and <code>-v</code>:</p>
|
||||
<p><code>-r</code> randomises settings. It won’t prompt you for settings but it will for input
|
||||
if you don’t give the option to read in a file for input.</p>
|
||||
<p><code>-v</code> shows selected settings. For example combining <code>-r</code> and <code>-v</code>:</p>
|
||||
<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo IOCCC <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-r</span> <span class="at">-v</span></span>
|
||||
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="ex">Ring</span> 1: <span class="er">(</span> <span class="ex">I</span><span class="kw">)</span> <span class="ex">EKMFLGDQVZNTOWYHXUSPAIBRCJ</span></span>
|
||||
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="ex">Ring</span> 2: <span class="er">(</span> <span class="ex">V</span><span class="kw">)</span> <span class="ex">VZBRGITYUPSDNHLXAWMJQOFECK</span></span>
|
||||
@@ -221,70 +199,54 @@ input.</p>
|
||||
<span id="cb2-16"><a href="#cb2-16" aria-hidden="true" tabindex="-1"></a><span class="ex">Plugboard</span> pair <span class="co">#09: RU</span></span>
|
||||
<span id="cb2-17"><a href="#cb2-17" aria-hidden="true" tabindex="-1"></a><span class="ex">Plugboard</span> pair <span class="co">#10: VG</span></span>
|
||||
<span id="cb2-18"><a href="#cb2-18" aria-hidden="true" tabindex="-1"></a><span class="ex">1WX5AK4RE1XEHJSAPYCIZBWDQNRUVGIOCCC</span></span></code></pre></div>
|
||||
<p>Though you won’t find some of those strings in <a
|
||||
href="recode.c">recode.c</a> or <a href="prog.c">prog.c</a>. Yes the
|
||||
<code>WAR</code> for the Ringstellung (Ring settings) is an amusing
|
||||
coincidence <em>but it really did happen!</em></p>
|
||||
<p>As for <code>-f</code> the contents would be output with the settings
|
||||
e.g. to pipe to <code>prog</code> itself (as if you redirected the file
|
||||
contents to the Enigma machine for encipherment/decipherment). If the
|
||||
file cannot be opened it sets back to stdin.</p>
|
||||
<p><code>-o</code> outputs the settings to the file. If the file cannot
|
||||
be opened for writing or is the same file name (see below) then only
|
||||
stdout will be used. Example of randomised output going to a file:</p>
|
||||
<p>Though you won’t find some of those strings in <a href="recode.c">recode.c</a> or
|
||||
<a href="prog.c">prog.c</a>. Yes the <code>WAR</code> for the Ringstellung (Ring settings) is an
|
||||
amusing coincidence <em>but it really did happen!</em></p>
|
||||
<p>As for <code>-f</code> the contents would be output with the settings e.g. to pipe to
|
||||
<code>prog</code> itself (as if you redirected the file contents to the Enigma machine for
|
||||
encipherment/decipherment). If the file cannot be opened it sets back to stdin.</p>
|
||||
<p><code>-o</code> outputs the settings to the file. If the file cannot be opened for writing
|
||||
or is the same file name (see below) then only stdout will be used. Example of
|
||||
randomised output going to a file:</p>
|
||||
<div class="sourceCode" id="cb3"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-r</span> <span class="at">-oconfig</span></span>
|
||||
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="ex">IOCCC</span></span>
|
||||
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="ex">3PP4UB5GG1ELGTKFCOPVBNUYXJAWSDIOCCC</span></span>
|
||||
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat config</span>
|
||||
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a><span class="ex">3PP4UB5GG1ELGTKFCOPVBNUYXJAWSD$</span></span></code></pre></div>
|
||||
<p>Notice that a terminating newline isn’t added. Also note that it
|
||||
outputs to stdout so you can pipe it to the Enigma machine but at the
|
||||
same time have the settings saved for deciphering the text later (the
|
||||
configuration does not have the input but both the configuration and the
|
||||
input text is printed to stdout).</p>
|
||||
<p>If you want to initialise the settings from previously saved settings
|
||||
(as a string or an input file that has the same format) use the
|
||||
<code>-R<settings></code> option. Again note that this does not
|
||||
validate input! Although it detects out of range for the arrays it
|
||||
doesn’t detect duplicates. This is because it wasn’t meant to be any
|
||||
given file or anything else other than the direct output of a previous
|
||||
run (thus validated). I’m not even guaranteeing that I got the array
|
||||
tests valid in <a href="recode.c">recode.c</a> <code>-R</code>
|
||||
option!</p>
|
||||
<h2
|
||||
id="protecting-against-the-same-io-file"><a name="samefile" href="#toc">Protecting
|
||||
against the same I/O file</a></h2>
|
||||
<p>Notice that a terminating newline isn’t added. Also note that it outputs to
|
||||
stdout so you can pipe it to the Enigma machine but at the same time have the
|
||||
settings saved for deciphering the text later (the configuration does not have
|
||||
the input but both the configuration and the input text is printed to stdout).</p>
|
||||
<p>If you want to initialise the settings from previously saved settings (as a
|
||||
string or an input file that has the same format) use the <code>-R<settings></code> option.
|
||||
Again note that this does not validate input! Although it detects out of range
|
||||
for the arrays it doesn’t detect duplicates. This is because it wasn’t meant to
|
||||
be any given file or anything else other than the direct output of a previous
|
||||
run (thus validated). I’m not even guaranteeing that I got the array tests valid
|
||||
in <a href="recode.c">recode.c</a> <code>-R</code> option!</p>
|
||||
<h2 id="protecting-against-the-same-io-file"><a name="samefile" href="#toc">Protecting against the same I/O file</a></h2>
|
||||
<p>Because some file systems are case-insensitive I have implemented a
|
||||
case-insensitive <code>strcmp()</code>; if the input file name is the
|
||||
same as the output file name I won’t write to it. From a quick test this
|
||||
is important particularly if neither file exist because if both calls to
|
||||
<code>stat()</code> fail then the inodes will be the same (since what
|
||||
else could they be set to but the same initial value?). This might be
|
||||
overprotective but I believe it better to prevent user error where
|
||||
possible. Of course if neither file exists it might be argued that it’s
|
||||
not necessary to worry since you can’t read from a file that doesn’t
|
||||
exist. But then what about if one exists but the other does not?</p>
|
||||
<h2
|
||||
id="file-options-parser-limitation"><a name="fileoptions" href="#toc">File
|
||||
options parser limitation</a></h2>
|
||||
<p>Due to the way the parsing of options is done (no spaces between
|
||||
option char and argument) shell expansion will not work right so for
|
||||
example doing:</p>
|
||||
case-insensitive <code>strcmp()</code>; if the input file name is the same as the output file
|
||||
name I won’t write to it. From a quick test this is important particularly if
|
||||
neither file exist because if both calls to <code>stat()</code> fail then the inodes will be
|
||||
the same (since what else could they be set to but the same initial value?).
|
||||
This might be overprotective but I believe it better to prevent user error where
|
||||
possible. Of course if neither file exists it might be argued that it’s not
|
||||
necessary to worry since you can’t read from a file that doesn’t exist. But then
|
||||
what about if one exists but the other does not?</p>
|
||||
<h2 id="file-options-parser-limitation"><a name="fileoptions" href="#toc">File options parser limitation</a></h2>
|
||||
<p>Due to the way the parsing of options is done (no spaces between option char and
|
||||
argument) shell expansion will not work right so for example doing:</p>
|
||||
<div class="sourceCode" id="cb4"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-R~</span>/config</span></code></pre></div>
|
||||
<p>will <em>not</em> read the file ‘config’ in the home directory. I
|
||||
show another way to achieve this later.</p>
|
||||
<p>This limitation also applies to the <code>-f</code> and
|
||||
<code>-o</code> options!</p>
|
||||
<h2 id="r-option-validation"><a name="validation" href="#toc">-R option
|
||||
validation?</a></h2>
|
||||
<p>Again the <code>-R</code> option does not validate input. For
|
||||
validation you have to run the program interactively.</p>
|
||||
<h1
|
||||
id="piping-commands-to-recode"><a name="pipingtorecode" href="#toc">Piping
|
||||
commands to recode</a></h1>
|
||||
<p>If stdin is not a tty (<code>!isatty(0)</code>) and neither
|
||||
randomised mode nor reading in from a file is specified then you might
|
||||
just see something like:</p>
|
||||
<p>will <em>not</em> read the file ‘config’ in the home directory. I show another way to
|
||||
achieve this later.</p>
|
||||
<p>This limitation also applies to the <code>-f</code> and <code>-o</code> options!</p>
|
||||
<h2 id="r-option-validation"><a name="validation" href="#toc">-R option validation?</a></h2>
|
||||
<p>Again the <code>-R</code> option does not validate input. For validation you have to run
|
||||
the program interactively.</p>
|
||||
<h1 id="piping-commands-to-recode"><a name="pipingtorecode" href="#toc">Piping commands to recode</a></h1>
|
||||
<p>If stdin is not a tty (<code>!isatty(0)</code>) and neither randomised mode nor reading in
|
||||
from a file is specified then you might just see something like:</p>
|
||||
<div class="sourceCode" id="cb5"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo testing test tests <span class="kw">|</span> <span class="ex">./recode</span></span>
|
||||
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="ex">1AB2BB3CC1testing</span> test tests</span>
|
||||
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a></span>
|
||||
@@ -296,28 +258,23 @@ just see something like:</p>
|
||||
<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo testing test tests <span class="kw">|</span> <span class="ex">./recode</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null <span class="kw">|</span> <span class="ex">./recode</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a><span class="ex">testing</span> test tests</span></code></pre></div>
|
||||
<p>In other words just the defaults. This was to simplify the problems
|
||||
with prompting again for input if it’s invalid (though as you’ll see it
|
||||
does a good job at this anyway).</p>
|
||||
<h1
|
||||
id="piping-recode-to-the-enigma-simulator"><a name="pipingtoenigma" href="#toc">Piping
|
||||
recode to the Enigma simulator</a></h1>
|
||||
<p>If you’re using recode to recode the input so you don’t have to type
|
||||
in the input manually (if you randomise or read in from previously saved
|
||||
file no input need be done at all) then make sure to redirect stderr to
|
||||
/dev/null. If you don’t you might see something like:</p>
|
||||
<p>In other words just the defaults. This was to simplify the problems with
|
||||
prompting again for input if it’s invalid (though as you’ll see it does a good
|
||||
job at this anyway).</p>
|
||||
<h1 id="piping-recode-to-the-enigma-simulator"><a name="pipingtoenigma" href="#toc">Piping recode to the Enigma simulator</a></h1>
|
||||
<p>If you’re using recode to recode the input so you don’t have to type in the
|
||||
input manually (if you randomise or read in from previously saved file no input
|
||||
need be done at all) then make sure to redirect stderr to /dev/null. If you
|
||||
don’t you might see something like:</p>
|
||||
<div class="sourceCode" id="cb6"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-r</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span></span>
|
||||
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a><span class="ex">Ring</span> 1: IOCCC</span>
|
||||
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a><span class="ex">Setting</span> 1: Position 1: Ring 2: Setting 2: Position 2: Ring 3: Setting 3: Position 3: Reflector: Plugboard pair 1: Plugboard pair 2: Plugboard pair 3: Plugboard pair 4: Plugboard pair 5: Plugboard pair 6: Plugboard pair 7: Plugboard pair 8: Plugboard pair 9: Plugboard pair 10: DEVIY</span></code></pre></div>
|
||||
<p>What happened is that <code>Ring 1:</code> is printed to stderr but
|
||||
since it’s not been redirected to <code>/dev/null</code> it prints this
|
||||
out; at this point however it prompts for input. Why or how it shows the
|
||||
first prompt instead of later on I do not know. Anyway at this point the
|
||||
simulator is already expecting input to en/decipher. That’s why after I
|
||||
sent EOF it printed out the remaining strings to stderr.</p>
|
||||
<h1
|
||||
id="manually-test-the-recode-program-with-the-enigma-program"><a name="manuallytest" href="#toc">Manually
|
||||
test the recode program with the Enigma program</a></h1>
|
||||
<p>What happened is that <code>Ring 1:</code> is printed to stderr but since it’s not been
|
||||
redirected to <code>/dev/null</code> it prints this out; at this point however it prompts for
|
||||
input. Why or how it shows the first prompt instead of later on I do not know.
|
||||
Anyway at this point the simulator is already expecting input to en/decipher.
|
||||
That’s why after I sent EOF it printed out the remaining strings to stderr.</p>
|
||||
<h1 id="manually-test-the-recode-program-with-the-enigma-program"><a name="manuallytest" href="#toc">Manually test the recode program with the Enigma program</a></h1>
|
||||
<div class="sourceCode" id="cb7"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat input</span>
|
||||
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a><span class="ex">IOCCC</span></span>
|
||||
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a></span>
|
||||
@@ -352,42 +309,35 @@ test the recode program with the Enigma program</a></h1>
|
||||
<span id="cb7-32"><a href="#cb7-32" aria-hidden="true" tabindex="-1"></a><span class="ex">Input</span> plugboard pair 9: OP</span>
|
||||
<span id="cb7-33"><a href="#cb7-33" aria-hidden="true" tabindex="-1"></a><span class="ex">Input</span> plugboard pair 10: QR</span>
|
||||
<span id="cb7-34"><a href="#cb7-34" aria-hidden="true" tabindex="-1"></a><span class="ex">1AA2AA3AA2ABCD..EFGHIJKLMNOPQRIOCCC</span></span></code></pre></div>
|
||||
<p>Notice that I skipped a <a
|
||||
href="https://www.cryptomuseum.com/crypto/enigma/i/sb.htm">plugboard
|
||||
pair</a>; this can be done in a number of ways but two dots is one.
|
||||
Notice also that it’s in a different order than the simulator: because
|
||||
with the size restrictions on my entry I saved bytes by using the same
|
||||
loop where I could. It just felt more natural to have them grouped
|
||||
together in a configurator for the <a href="prog.c">simulator</a>.</p>
|
||||
<p>Notice that I skipped a <a href="https://www.cryptomuseum.com/crypto/enigma/i/sb.htm">plugboard
|
||||
pair</a>; this can be done in
|
||||
a number of ways but two dots is one. Notice also that it’s in a different order
|
||||
than the simulator: because with the size restrictions on my entry I saved bytes
|
||||
by using the same loop where I could. It just felt more natural to have them
|
||||
grouped together in a configurator for the <a href="prog.c">simulator</a>.</p>
|
||||
<div class="sourceCode" id="cb8"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 1AA2AA3AA2ABCD..EFGHIJKLMNOPQRIOCCC <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a><span class="ex">HQNVO</span></span>
|
||||
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 1AA2AA3AA2ABCD..EFGHIJKLMNOPQRIOCCC <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null <span class="kw">|</span> <span class="bu">echo</span> 1AA2AA3AA2ABCD..EFGHIJKLMNOPQRHQNVO <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a><span class="ex">IOCCC</span></span></code></pre></div>
|
||||
<p>As you can see the <code>recode</code> program prompts for the
|
||||
settings and outputs the input for the Enigma program. I then
|
||||
copied/pasted that output to the program and got the result
|
||||
<code>HQNVO</code>.</p>
|
||||
<p>Following this I piped the original output (of <code>recode</code>)
|
||||
to the simulator and then piped that to the echo of the input settings
|
||||
(replacing the IOCCC with the Enigma enciphered output) and then got the
|
||||
result IOCCC: the original input! (This was before I implemented the
|
||||
<code>-R</code> option to greatly simplify things.)</p>
|
||||
<p>Of course the last command was redundant in that I didn’t need to
|
||||
show the first part again; I could have just done the latter part but I
|
||||
wanted to show the way the pipeline works with settings etc.</p>
|
||||
<p>What happens if the plugboard pairs are the same but in a different
|
||||
order? It’s the same output:</p>
|
||||
<p>As you can see the <code>recode</code> program prompts for the settings and outputs the
|
||||
input for the Enigma program. I then copied/pasted that output to the program
|
||||
and got the result <code>HQNVO</code>.</p>
|
||||
<p>Following this I piped the original output (of <code>recode</code>) to the simulator and then
|
||||
piped that to the echo of the input settings (replacing the IOCCC with the
|
||||
Enigma enciphered output) and then got the result IOCCC: the original input!
|
||||
(This was before I implemented the <code>-R</code> option to greatly simplify things.)</p>
|
||||
<p>Of course the last command was redundant in that I didn’t need to show the first
|
||||
part again; I could have just done the latter part but I wanted to show the way
|
||||
the pipeline works with settings etc.</p>
|
||||
<p>What happens if the plugboard pairs are the same but in a different order? It’s
|
||||
the same output:</p>
|
||||
<div class="sourceCode" id="cb9"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 1AA2AA3AA2AB..CDEFGHIJKLMNOPQRIOCCC<span class="kw">|</span><span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a><span class="ex">HQNVO</span></span></code></pre></div>
|
||||
<p>Also if you flip the order of the letters in the pair e.g. the AB as
|
||||
BA instead:</p>
|
||||
<div class="sourceCode" id="cb10"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 1AA2AA3AA2BA..CDEFGHIJKLMNOPQRIOCCC<span class="kw">|</span><span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<p>Also if you flip the order of the letters in the pair e.g. the AB as BA instead:</p>
|
||||
<div class="sourceCode" id="cb10"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 1AA2AA3AA2BA..CDEFGHIJKLMNOPQRIOCCC<span class="kw">|</span><span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a><span class="ex">HQNVO</span></span></code></pre></div>
|
||||
<h1 id="only-write-config-file"><a name="onlyconfig" href="#toc">Only
|
||||
write config file</a></h1>
|
||||
<div class="sourceCode" id="cb11"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-v</span> <span class="at">-oconfig</span> <span class="at">-finput</span> <span class="op">></span>/dev/null</span>
|
||||
<h1 id="only-write-config-file"><a name="onlyconfig" href="#toc">Only write config file</a></h1>
|
||||
<div class="sourceCode" id="cb11"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-v</span> <span class="at">-oconfig</span> <span class="at">-finput</span> <span class="op">></span>/dev/null</span>
|
||||
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a><span class="ex">Rotors:</span></span>
|
||||
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a><span class="kw">(</span><span class="ex">1</span><span class="kw">)</span> <span class="ex">I:</span> EKMFLGDQVZNTOWYHXUSPAIBRCJ</span>
|
||||
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a><span class="kw">(</span><span class="ex">2</span><span class="kw">)</span> <span class="ex">II:</span> AJDKSIRUXBLHWTMCQGZNPYFVOE</span>
|
||||
@@ -433,17 +383,14 @@ class="sourceCode sh"><code class="sourceCode bash"><span id="cb11-1"><a href="#
|
||||
<span id="cb11-44"><a href="#cb11-44" aria-hidden="true" tabindex="-1"></a><span class="ex">Plugboard</span> pair <span class="co">#08: OP</span></span>
|
||||
<span id="cb11-45"><a href="#cb11-45" aria-hidden="true" tabindex="-1"></a><span class="ex">Plugboard</span> pair <span class="co">#09: QR</span></span>
|
||||
<span id="cb11-46"><a href="#cb11-46" aria-hidden="true" tabindex="-1"></a><span class="ex">Plugboard</span> pair <span class="co">#10: ST</span></span></code></pre></div>
|
||||
<p>Notice that I redirect stdout to /dev/null so that the config is only
|
||||
written to the file config. But also notice that for <a
|
||||
href="https://www.cryptomuseum.com/crypto/enigma/i/sb.htm">plugboard
|
||||
pair</a> 4 I typed in <code>GHIJ</code> and it didn’t report an error.
|
||||
Neither did it complain about <code>IJ</code> in the next pair. This is
|
||||
because it consumes input overflow.</p>
|
||||
<p>It shouldn’t be this way for the simulator though because that could
|
||||
cause inconsistent number of characters expected before the text to
|
||||
encipher.</p>
|
||||
<div class="sourceCode" id="cb12"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat config</span>
|
||||
<p>Notice that I redirect stdout to /dev/null so that the config is only written to
|
||||
the file config. But also notice that for <a href="https://www.cryptomuseum.com/crypto/enigma/i/sb.htm">plugboard
|
||||
pair</a> 4 I typed in <code>GHIJ</code>
|
||||
and it didn’t report an error. Neither did it complain about <code>IJ</code> in the next
|
||||
pair. This is because it consumes input overflow.</p>
|
||||
<p>It shouldn’t be this way for the simulator though because that could cause
|
||||
inconsistent number of characters expected before the text to encipher.</p>
|
||||
<div class="sourceCode" id="cb12"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat config</span>
|
||||
<span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a><span class="ex">1AB2CD3EF2ABCDEFGHIJKLMNOPQRST</span></span>
|
||||
<span id="cb12-3"><a href="#cb12-3" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb12-4"><a href="#cb12-4" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> <span class="er">(</span> <span class="fu">cat</span> config <span class="kw">;</span> <span class="fu">cat</span> input <span class="kw">)</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
@@ -451,31 +398,24 @@ class="sourceCode sh"><code class="sourceCode bash"><span id="cb12-1"><a href="#
|
||||
<span id="cb12-6"><a href="#cb12-6" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb12-7"><a href="#cb12-7" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> <span class="er">(</span> <span class="fu">cat</span> config <span class="kw">;</span> <span class="fu">cat</span> input <span class="kw">)</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null <span class="kw">|</span> <span class="kw">(</span> <span class="fu">cat</span> config <span class="kw">;</span> <span class="bu">echo</span> LRAVE <span class="kw">)</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<span id="cb12-8"><a href="#cb12-8" aria-hidden="true" tabindex="-1"></a><span class="ex">IOCCC</span></span></code></pre></div>
|
||||
<p>What if you don’t want to worry about having to specify input but
|
||||
just have the settings written? You can do that too by either sending a
|
||||
newline or else directly type ctrl-d (or whatever you have EOF set to)
|
||||
or give it an empty file.</p>
|
||||
<p>The following are all equivalent in that they will write to a
|
||||
settings file (the first one will print a newline with the echo but that
|
||||
won’t matter):</p>
|
||||
<div class="sourceCode" id="cb13"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-r</span> <span class="at">-osettings</span></span>
|
||||
<p>What if you don’t want to worry about having to specify input but just have the
|
||||
settings written? You can do that too by either sending a newline or else
|
||||
directly type ctrl-d (or whatever you have EOF set to) or give it an empty file.</p>
|
||||
<p>The following are all equivalent in that they will write to a settings file (the
|
||||
first one will print a newline with the echo but that won’t matter):</p>
|
||||
<div class="sourceCode" id="cb13"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-r</span> <span class="at">-osettings</span></span>
|
||||
<span id="cb13-2"><a href="#cb13-2" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="at">-n</span> <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-r</span> <span class="at">-osettings</span></span>
|
||||
<span id="cb13-3"><a href="#cb13-3" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> <span class="op">></span> empty</span>
|
||||
<span id="cb13-4"><a href="#cb13-4" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-r</span> <span class="at">-osettings</span> <span class="op"><</span> empty</span>
|
||||
<span id="cb13-5"><a href="#cb13-5" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat empty <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-r</span> <span class="at">-osettings</span></span>
|
||||
<span id="cb13-6"><a href="#cb13-6" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-r</span> <span class="at">-osettings</span></span>
|
||||
<span id="cb13-7"><a href="#cb13-7" aria-hidden="true" tabindex="-1"></a><span class="ex">^D</span></span></code></pre></div>
|
||||
<p>(Above ^D was not shown but I typed it.) The way it works: if nothing
|
||||
is read the buffer remains <code>NULL</code> and so I don’t print it but
|
||||
still do print the settings file. (Actually even if
|
||||
<code>getdelim()</code> fails you’re supposed to free the buffer so I
|
||||
<p>(Above ^D was not shown but I typed it.) The way it works: if nothing is read
|
||||
the buffer remains <code>NULL</code> and so I don’t print it but still do print the settings
|
||||
file. (Actually even if <code>getdelim()</code> fails you’re supposed to free the buffer so I
|
||||
set another variable to indicate if it should be printed.)</p>
|
||||
<h1
|
||||
id="reusing-a-configuration"><a name="reuseconfig" href="#toc">Reusing a
|
||||
configuration</a></h1>
|
||||
<div class="sourceCode" id="cb14"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="at">-n</span><span class="kw">|</span><span class="ex">./recode</span> <span class="at">-r</span> <span class="at">-oconfig</span></span>
|
||||
<h1 id="reusing-a-configuration"><a name="reuseconfig" href="#toc">Reusing a configuration</a></h1>
|
||||
<div class="sourceCode" id="cb14"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="at">-n</span><span class="kw">|</span><span class="ex">./recode</span> <span class="at">-r</span> <span class="at">-oconfig</span></span>
|
||||
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a><span class="ex">4UH5II1RJ1SPIFEJLYGZWRTBHVCAMN$</span></span>
|
||||
<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat input.txt</span>
|
||||
@@ -495,15 +435,11 @@ class="sourceCode sh"><code class="sourceCode bash"><span id="cb14-1"><a href="#
|
||||
<span id="cb14-18"><a href="#cb14-18" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> <span class="er">(</span> <span class="fu">cat</span> config <span class="kw">;</span> <span class="fu">cat</span> output <span class="kw">)</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null <span class="op">></span> io</span>
|
||||
<span id="cb14-19"><a href="#cb14-19" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> diff io input.txt</span>
|
||||
<span id="cb14-20"><a href="#cb14-20" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span></span></code></pre></div>
|
||||
<p>Alternatively you can just use the <code>-R</code> and
|
||||
<code>-f</code> options:</p>
|
||||
<div class="sourceCode" id="cb15"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-finput.txt</span> <span class="at">-Rconfig</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null <span class="op">></span> output2</span>
|
||||
<p>Alternatively you can just use the <code>-R</code> and <code>-f</code> options:</p>
|
||||
<div class="sourceCode" id="cb15"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-finput.txt</span> <span class="at">-Rconfig</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null <span class="op">></span> output2</span>
|
||||
<span id="cb15-2"><a href="#cb15-2" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> diff output output2</span>
|
||||
<span id="cb15-3"><a href="#cb15-3" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span></span></code></pre></div>
|
||||
<h1
|
||||
id="write-config-file-read-data-file-and-pass-to-enigma-simulator"><a name="passtoenigma" href="#toc">Write
|
||||
config file, read data file and pass to Enigma simulator</a></h1>
|
||||
<h1 id="write-config-file-read-data-file-and-pass-to-enigma-simulator"><a name="passtoenigma" href="#toc">Write config file, read data file and pass to Enigma simulator</a></h1>
|
||||
<pre><code>$ ./recode -finput.txt -oconfig | ./prog - 2>/dev/null > output
|
||||
Rotors:
|
||||
(1) I: EKMFLGDQVZNTOWYHXUSPAIBRCJ
|
||||
@@ -537,12 +473,11 @@ Input plugboard pair 10: FI
|
||||
|
||||
$ cat config
|
||||
2CE5OL3DO2TRSNOGMEXYWZUVABCDFI</code></pre>
|
||||
<p>Besides a famous book that I happen to love (who doesn’t? Ah, but
|
||||
what is it Cody?) there’s also a reference to code which I also love
|
||||
(just as all participants of the IOCCC do). Other things there don’t
|
||||
mean anything but what does is the output:</p>
|
||||
<div class="sourceCode" id="cb17"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat output</span>
|
||||
<p>Besides a famous book that I happen to love (who doesn’t? Ah, but what is it
|
||||
Cody?) there’s also a reference to code which I also love (just as all
|
||||
participants of the IOCCC do). Other things there don’t mean anything but what
|
||||
does is the output:</p>
|
||||
<div class="sourceCode" id="cb17"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat output</span>
|
||||
<span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a><span class="ex">DBFAF</span> 2020 Ittejg ltblwriac uqdfqvr dhqh ghhf</span>
|
||||
<span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb17-4"><a href="#cb17-4" aria-hidden="true" tabindex="-1"></a><span class="ex">Jsjy</span> ce v pxdmullo.</span>
|
||||
@@ -555,106 +490,86 @@ class="sourceCode sh"><code class="sourceCode bash"><span id="cb17-1"><a href="#
|
||||
<span id="cb17-11"><a href="#cb17-11" aria-hidden="true" tabindex="-1"></a><span class="ex">This</span> is a sentence.</span>
|
||||
<span id="cb17-12"><a href="#cb17-12" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb17-13"><a href="#cb17-13" aria-hidden="true" tabindex="-1"></a><span class="ex">This</span> is another sentence.</span></code></pre></div>
|
||||
<h1
|
||||
id="piping-directly-to-the-enigma-code-once-with-randomised-settings-saved"><a name="directlytoenigma" href="#toc">Piping
|
||||
directly to the Enigma code once (with randomised settings,
|
||||
saved)</a></h1>
|
||||
<h1 id="piping-directly-to-the-enigma-code-once-with-randomised-settings-saved"><a name="directlytoenigma" href="#toc">Piping directly to the Enigma code once (with randomised settings, saved)</a></h1>
|
||||
<p>This is like the above only randomised:</p>
|
||||
<div class="sourceCode" id="cb18"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-r</span> <span class="at">-oconfig</span><span class="kw">|</span><span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<div class="sourceCode" id="cb18"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./recode <span class="at">-r</span> <span class="at">-oconfig</span><span class="kw">|</span><span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<span id="cb18-2"><a href="#cb18-2" aria-hidden="true" tabindex="-1"></a><span class="ex">IOCCC</span></span>
|
||||
<span id="cb18-3"><a href="#cb18-3" aria-hidden="true" tabindex="-1"></a><span class="ex">UGEVP</span></span></code></pre></div>
|
||||
<p>Note that I typed in <code>IOCCC</code> and sent <code>EOF</code>
|
||||
(ctrl-d); the settings were written to the config file (for deciphering
|
||||
later) and then all of it was piped to the Enigma entry resulting in the
|
||||
line below IOCCC. But let’s verify it worked out okay:</p>
|
||||
<div class="sourceCode" id="cb19"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat config</span>
|
||||
<p>Note that I typed in <code>IOCCC</code> and sent <code>EOF</code> (ctrl-d); the settings were written to
|
||||
the config file (for deciphering later) and then all of it was piped to the
|
||||
Enigma entry resulting in the line below IOCCC. But let’s verify it worked out
|
||||
okay:</p>
|
||||
<div class="sourceCode" id="cb19"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat config</span>
|
||||
<span id="cb19-2"><a href="#cb19-2" aria-hidden="true" tabindex="-1"></a><span class="ex">2BM4GJ3HK1LNCBXWRMGKSYIAZUTPVJ</span></span></code></pre></div>
|
||||
<p>Without having to copy/paste intermediate results:</p>
|
||||
<div class="sourceCode" id="cb20"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo IOCCC <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-Rconfig</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-Rconfig</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<div class="sourceCode" id="cb20"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo IOCCC <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-Rconfig</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-Rconfig</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<span id="cb20-2"><a href="#cb20-2" aria-hidden="true" tabindex="-1"></a><span class="ex">IOCCC</span></span></code></pre></div>
|
||||
<p>You can also use a string for the <code>-R</code> option. I’ll use
|
||||
command substitution and actual pasting to demonstrate:</p>
|
||||
<div class="sourceCode" id="cb21"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo IOCCC <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-R</span><span class="va">$(</span><span class="fu">cat</span> config<span class="va">)</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-R2BM4GJ3HK1LNCBXWRMGKSYIAZUTPVJ</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<p>You can also use a string for the <code>-R</code> option. I’ll use command substitution and
|
||||
actual pasting to demonstrate:</p>
|
||||
<div class="sourceCode" id="cb21"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo IOCCC <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-R</span><span class="va">$(</span><span class="fu">cat</span> config<span class="va">)</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null <span class="kw">|</span> <span class="ex">./recode</span> <span class="at">-R2BM4GJ3HK1LNCBXWRMGKSYIAZUTPVJ</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-</span> <span class="dv">2</span><span class="op">></span>/dev/null</span>
|
||||
<span id="cb21-2"><a href="#cb21-2" aria-hidden="true" tabindex="-1"></a><span class="ex">IOCCC</span></span></code></pre></div>
|
||||
<h1 id="usage-conclusion"><a name="conclusion" href="#toc">Usage
|
||||
conclusion</a></h1>
|
||||
<p>That should give you an idea of how to use the <code>recode</code>
|
||||
program. I leave it as an exercise to the reader to implement additional
|
||||
features but here are some ideas of what could be done and how this
|
||||
entry might be used (including that delicious challenge).</p>
|
||||
<h1 id="example-additions"><a name="additions" href="#toc">Example
|
||||
additions</a></h1>
|
||||
<h1 id="usage-conclusion"><a name="conclusion" href="#toc">Usage conclusion</a></h1>
|
||||
<p>That should give you an idea of how to use the <code>recode</code> program. I leave it as
|
||||
an exercise to the reader to implement additional features but here are some
|
||||
ideas of what could be done and how this entry might be used (including that
|
||||
delicious challenge).</p>
|
||||
<h1 id="example-additions"><a name="additions" href="#toc">Example additions</a></h1>
|
||||
<ul>
|
||||
<li>Add code (to <a href="prog.c">prog.c</a>) that tries to determine
|
||||
possible decipherments based on a given crib (or set of cribs).</li>
|
||||
<li>Add code (to <a href="prog.c">prog.c</a>) that tries to determine possible decipherments based on
|
||||
a given crib (or set of cribs).</li>
|
||||
</ul>
|
||||
<h1 id="example-uses"><a name="exampleuses" href="#toc">Example
|
||||
uses</a></h1>
|
||||
<h1 id="example-uses"><a name="exampleuses" href="#toc">Example uses</a></h1>
|
||||
<ul>
|
||||
<li><p>Take an actual key sheet and message for that day and try and
|
||||
decipher the message (might help if you know German!). I haven’t
|
||||
actually done this for reasons I explained in the remarks (including
|
||||
that I cannot easily verify one particular as well as the fact that
|
||||
there were different procedures, different machines etc. - plus my
|
||||
vision is not good enough for the quality of the pictures).</p></li>
|
||||
<li><p>Try making sense of a politician’s speeches by putting them into
|
||||
the simulator. It might not make much sense but can it honestly be that
|
||||
much worse ? :) Actually yes it could be (and we don’t need the Enigma
|
||||
helping them either) and I can think of a whole host of other things
|
||||
more entertaining including watching dry paint stay dry on a wall but
|
||||
why not poke fun at politicians anyway?</p></li>
|
||||
<li><p>Take an actual key sheet and message for that day and try and decipher the
|
||||
message (might help if you know German!). I haven’t actually done this for
|
||||
reasons I explained in the remarks (including that I cannot easily verify one
|
||||
particular as well as the fact that there were different procedures, different
|
||||
machines etc. - plus my vision is not good enough for the quality of the
|
||||
pictures).</p></li>
|
||||
<li><p>Try making sense of a politician’s speeches by putting them into the
|
||||
simulator. It might not make much sense but can it honestly be that much worse ?
|
||||
:) Actually yes it could be (and we don’t need the Enigma helping them either)
|
||||
and I can think of a whole host of other things more entertaining including
|
||||
watching dry paint stay dry on a wall but why not poke fun at politicians
|
||||
anyway?</p></li>
|
||||
<li><p>Best idea: try the below experiment!</p></li>
|
||||
</ul>
|
||||
<h1
|
||||
id="deliciously-enigmatic-double-layered-chocolate-fudge-cake"><a name="cake" href="#toc">Deliciously
|
||||
Enigmatic: Double-layered Chocolate Fudge Cake</a></h1>
|
||||
<p>As I was making the above silly list something occurred to me. My <a
|
||||
href="/2020/ferguson1/prog.c">other entry</a> this year includes a
|
||||
recipe for a wonderful double-layered chocolate fudge cake but why would
|
||||
it not be included in this one too? But then if that’s the case why on
|
||||
Earth should it be unscrambled?</p>
|
||||
<p>So this is what I offer: if you take one of the settings below and
|
||||
run the simulator on the file <a
|
||||
href="chocolate-cake.html">chocolate-cake.html</a> you will have a
|
||||
wonderful chocolate cake recipe (that even my late stepmum who didn’t
|
||||
even like chocolate loved - it’s a speciality of my mum’s and they were
|
||||
the best of friends too). If you’re lazy (or just want some delicious
|
||||
double-layered chocolate fudge cake!) just go and look at the <a
|
||||
href="../ferguson1/chocolate-cake.html">recipe</a> (or <a
|
||||
href="../ferguson1/chocolate-cake.md">here</a> if on GitHub) in my other
|
||||
entry. Then again if you’re lazy you’re probably not reading this far!
|
||||
:)</p>
|
||||
<p>The settings is one of the below but a couple questions you might ask
|
||||
yourself:</p>
|
||||
<h1 id="deliciously-enigmatic-double-layered-chocolate-fudge-cake"><a name="cake" href="#toc">Deliciously Enigmatic: Double-layered Chocolate Fudge Cake</a></h1>
|
||||
<p>As I was making the above silly list something occurred to me. My <a href="/2020/ferguson1/prog.c">other
|
||||
entry</a> this year includes a recipe for a wonderful
|
||||
double-layered chocolate fudge cake but why would it not be included in this one
|
||||
too? But then if that’s the case why on Earth should it be unscrambled?</p>
|
||||
<p>So this is what I offer: if you take one of the settings below and run the
|
||||
simulator on the file <a href="chocolate-cake.html">chocolate-cake.html</a> you will have a wonderful
|
||||
chocolate cake recipe (that even my late stepmum who didn’t even like chocolate
|
||||
loved - it’s a speciality of my mum’s and they were the best of friends too). If
|
||||
you’re lazy (or just want some delicious double-layered chocolate fudge cake!)
|
||||
just go and look at the <a href="../ferguson1/chocolate-cake.html">recipe</a> (or
|
||||
<a href="../ferguson1/chocolate-cake.md">here</a> if on GitHub) in my other entry. Then
|
||||
again if you’re lazy you’re probably not reading this far! :)</p>
|
||||
<p>The settings is one of the below but a couple questions you might ask yourself:</p>
|
||||
<ol type="1">
|
||||
<li><p>Are any invalid input?</p></li>
|
||||
<li><p>Is there some other kind of trickery involved here?</p></li>
|
||||
</ol>
|
||||
<p>I can think of the best way to answer these and I think I need not
|
||||
even mention it. Have fun and enjoy!</p>
|
||||
<p>BTW: Depending on where you are in this world and how warm it is the
|
||||
icing can be a bit of an issue - I give some ideas in the file on what
|
||||
can be done for this. At worst though the icing won’t come out as good
|
||||
as it usually does. That’s assuming you follow in the instructions
|
||||
exactly as they are; it’s a very picky recipe.</p>
|
||||
<p>I can think of the best way to answer these and I think I need not even mention
|
||||
it. Have fun and enjoy!</p>
|
||||
<p>BTW: Depending on where you are in this world and how warm it is the icing can
|
||||
be a bit of an issue - I give some ideas in the file on what can be done for
|
||||
this. At worst though the icing won’t come out as good as it usually does.
|
||||
That’s assuming you follow in the instructions exactly as they are; it’s a very
|
||||
picky recipe.</p>
|
||||
<h2 id="hints">Hints:</h2>
|
||||
<ol type="1">
|
||||
<li><p>It’s not the middle one.</p></li>
|
||||
<li><p>Yes there are some things kind of spelt here. These include
|
||||
things about cake and chocolate. Some things spelt mean nothing whatever
|
||||
and can be considered coincidences. Some were randomised.</p></li>
|
||||
<li><p>There is an obscure thing about my entry that can help locate the
|
||||
proper key of the 16 given below! The questions are what is it and is is
|
||||
it worth going this way? (I think the second answer is ‘no’ but that’s
|
||||
me.)</p></li>
|
||||
<li><p>The above points might or might not be relevant. What is relevant
|
||||
is one will reveal a wonderful <a
|
||||
href="chocolate-cake.html">Double-layered Chocolate Fudge Cake</a>
|
||||
recipe:</p></li>
|
||||
<li><p>Yes there are some things kind of spelt here. These include things about
|
||||
cake and chocolate. Some things spelt mean nothing whatever and can be
|
||||
considered coincidences. Some were randomised.</p></li>
|
||||
<li><p>There is an obscure thing about my entry that can help locate the proper key
|
||||
of the 16 given below! The questions are what is it and is is it worth going
|
||||
this way? (I think the second answer is ‘no’ but that’s me.)</p></li>
|
||||
<li><p>The above points might or might not be relevant. What is relevant is one
|
||||
will reveal a wonderful <a href="chocolate-cake.html">Double-layered Chocolate Fudge Cake</a> recipe:</p></li>
|
||||
</ol>
|
||||
<pre><code> 142CHOCOLATESVCAKESTBJLKMUMVWX
|
||||
0EZ4PC1CC0PGTAQSOXWNMDRYKFUZEI
|
||||
@@ -679,13 +594,12 @@ recipe:</p></li>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>(c) Copyright 1984-2020, [Leo Broukhis, Simon Cooper, Landon Curt
|
||||
Noll][judges] - All rights reserved This work is licensed under a
|
||||
[Creative Commons Attribution-ShareAlike 3.0 Unported License][cc].</td>
|
||||
<td>(c) Copyright 1984-2020, [Leo Broukhis, Simon Cooper, Landon Curt Noll][judges] - All rights reserved
|
||||
This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License][cc].</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>[judges]: https://www.ioccc.org/judges.html [cc]:
|
||||
http://creativecommons.org/licenses/by-sa/3.0/</td>
|
||||
<td>[judges]: https://www.ioccc.org/judges.html
|
||||
[cc]: http://creativecommons.org/licenses/by-sa/3.0/</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
Reference in new issue
Block a user