diff --git a/src/linuxfr.c b/src/linuxfr.c index 31856a2..f92d1d8 100644 --- a/src/linuxfr.c +++ b/src/linuxfr.c @@ -76,8 +76,8 @@ char *decode_linuxfr(struct image *img) * each line; they're base column candidates */ for(x = 0; x < img->width - 9 * 7 + 1; x++) { - int xcan = 1; - for(c = 0; c < 7; c++, xcan) + int goodx = 1; + for(c = 0; c < 7 && goodx; c++) { for(j = 3; j < 10; j++) { @@ -94,50 +94,49 @@ char *decode_linuxfr(struct image *img) } if(count < 2) { - xcan = 0; + goodx = 0; break; } } } - if(!xcan) + if(!goodx) continue; /* Now we have an (x,y) candidate - try to fit 7 characters */ - for(c = 0; c < 7; c++, xcan) + for(c = 0; c < 7 && goodx; c++) { - int r2, g2, b2, test, tcan; - for(test = 0; test < 62; test++) + int r2, g2, b2, ch; + int minerror = INT_MAX; + for(ch = 0; ch < 62; ch++) { - tcan = 1; - for(j = 0; j < 12; j++, tcan) + int error = 0, goodch = 1; + for(j = 0; j < 12 && goodch; j++) for(i = 0; i < 8; i++) { getpixel(tmp, x + c * 9 + i, y + j, &r, &g, &b); - getpixel(font, test * 9 + i, j, &r2, &g2, &b2); + getpixel(font, ch * 9 + i, j, &r2, &g2, &b2); /* Only die if font is black and image is white */ if(r > r2) { - tcan = 0; + goodch = 0; break; } + else if(r < r2) + error++; } - if(tcan) + if(goodch && error < minerror) { - result[c] = all[test]; + minerror = error; + result[c] = all[ch]; result[c+1] = '\0'; - break; } } - if(!tcan) - { - xcan = 0; - break; - } + if(minerror == INT_MAX) + goodx = 0; } - if(xcan) - { + /* Wow, that was a good guess! Exit this loop */ + if(goodx) break; - } } } diff --git a/testsuite/linuxfr/control.txt b/testsuite/linuxfr/control.txt index f93c38e..bd1d2fb 100644 --- a/testsuite/linuxfr/control.txt +++ b/testsuite/linuxfr/control.txt @@ -3,98 +3,98 @@ egcXvmd PjFvqau KUhuaDs DmwLiUH -DuLcaHf +DyLcaWf CSaNFLl vGwzWNE zoCucuh WjikOBC -BbEOaSs -wSeAkuu -hjbHvin -xOmBzlq +BbEQaSs +wSeAkyu +hjbNvin +xQmBzIq McCUroO TFdmmiK gkHaGEK -XzfqbuS -BFlOzwq +XzfqbyS +BRTOzwq NFDBmfm -qzzDilT +qzzDiIT ZdusZnh -PmhzZPL -AOeCsPD +PmhzZRL +AOeGsRD btZGKnl wpfVpai -rtDPugJ -PvspMJO -PKFrJTX -EVbKlUM -TOXOzuY -pFbSBTD +rtDRygJ +RvspMJO +RKHrJTX +EVbKIUM +TQXQzuY +pHbSBTD ZkFVWhk -CBlSCkh +CBISCkh MpjaaDq vouZvvk -GOucaYn -phPtpdq +GQycaYn +phRtpdq VmGnfZC -JSEVPZH -BtqpOUC -ZlLWZWu -DXYndfL +JSEVPZN +BtqpQUC +ZTLWZWy +DXYndfN fqqhGYL GEnJVJH xfHJsBV -XuOuFjt +XuQyFjt HLqjlza -MhwutaO -JugmBlc -FcmLZFu +MhwytaO +JugmBIc +FcmLZFy JuaocqJ VvFfSdT -muAASFU -jmvPflE -lnusBSe -uVTTaOl +myAASPU +jmvPfIE +lnysBSe +yVTTaQl BiNlSNW lcqzuPc dnZNenC EXWwPES -izCHLXu -eOrxuva -OWXHAmm +izGHLXu +eQrxwva +QWXHAmm pYlDnDf -FPqWdcf -EAaVzLD -sOvdOEL -WExmjHL -xODiwFF -ANSnOpb +FRqWdcf +EAaVzND +sOvdORN +WExmjNL +xQDiwFF +ANSnQpb kcBgrjc HHmCNFx tUFqNlc -LdCzCOw -FjEElxG +LdCzGQw +FjHRIxG FCAhWZp ZSEokTi qqZZGdH almMBzB -DdMhhwK +DdMHHwK uobBZWp -YCxsUHr +YCWsUNr oraVSFP -xuzzhvh +xuzzHvH Yifbkzq ebttbkj -EzJjsHE -dEOnsXL -wcjSPea -jMGDfYO -CgGkduT +RzJjsHE +dEQnAXM +wcjSRea +jMGDfYQ +CgGkdyT JBJMMpY -oPvDKkz -uAuKTOS -XjPrioj -unuJumu +oRvDKkz +yAyKTOS +XjRrioj +upMJNWU NiVdvTh -avhDElE -ZoNuvOO +avHDElE +ZoNuvQO