Lines Matching refs:dx

204                 dx=box1->x1-x0+1, dy=box1->y1-y0+1;  in nearest_frame_vector()  local
215 aa[2]=d=2*sq(128)+sq((rx-(x0+x1)/2)*128/dx)+sq((ry-(y0+y1)/2)*128/dy); in nearest_frame_vector()
228 d=sq((x-rx)*128/dx)+sq((y-ry)*128/dy); in nearest_frame_vector()
241 int r,y,x,x0,x1,y0,y1,dx,dy,m1,m2,m3, in testumlaut() local
246 x0=box1->x0; x1=box1->x1; dx=x1-x0+1; in testumlaut()
378 > loop(box1->p,xl,yl ,xr-xl,cs,0,RI)-dx/8 in testumlaut()
380 > loop(box1->p,xl,yl-1,xr-xl,cs,0,RI)-dx/8 ) in testumlaut()
382 > loop(box1->p,xr,yl ,xr-xl,cs,0,LE)-dx/8 in testumlaut()
384 > loop(box1->p,xr,yl-1,xr-xl,cs,0,LE)-dx/8 ) in testumlaut()
391 < loop(box1->p,xl,yl ,xr-xl,cs,0,RI)-dx/10 in testumlaut()
393 < loop(box1->p,xl,yl ,xr-xl,cs,0,RI)-dx/10 ) in testumlaut()
395 < loop(box1->p,xr,yl ,xr-xl,cs,0,LE)-dx/10 in testumlaut()
397 < loop(box1->p,xr,yl ,xr-xl,cs,0,LE)-dx/10 ) in testumlaut()
406 - 2*loop(box1->p,xl,(yl+yu)/2,xr-xl,cs,0,RI) > dx/16+1 in testumlaut()
409 < loop(box1->p,xl,yl ,xr-xl,cs,0,RI)-dx/10 in testumlaut()
411 < loop(box1->p,xl,yl ,xr-xl,cs,0,RI)-dx/10 ) in testumlaut()
413 < loop(box1->p,xr,yl ,xr-xl,cs,0,LE)-dx/10 in testumlaut()
415 < loop(box1->p,xr,yl ,xr-xl,cs,0,LE)-dx/10 ) in testumlaut()
461 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_eE() local
467 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 (smallest seen is 5x6) in ocr0_eE()
472 if( loop(box1->p,x0,y0+dy/2,x1-x0,cs,0,RI)>dx/3 ) Break; // rough test in ocr0_eE()
473 if( loop(box1->p,x0+dx/2,y0,y1-y0,cs,0,DO)>dy/3 ) Break; in ocr0_eE()
474 if( loop(box1->p,x0+dx/2,y1,y1-y0,cs,0,UP)>dy/3 ) Break; in ocr0_eE()
481 i=loop(box1->p,x0,y0+dy/2,x1-x0,cs,0,RI); if( i>dx/2 ) Break; in ocr0_eE()
484 i=loop(box1->p,x0+dx/2,y0,y1-y0,cs,0,DO); if( i>dx/2 ) Break; in ocr0_eE()
485 j=loop(box1->p,x1-dx/3,y0,y1-y0,cs,0,DO); if( j<i ) i=j; in ocr0_eE()
488 i=loop(box1->p,x0+dx/2,y1,y1-y0,cs,0,UP); if( i>dx/2 ) Break; in ocr0_eE()
494 if (dx>3 && j>=dx/4) Break; // ~g 4x6font in ocr0_eE()
497 for(i=0,j=x0+dx/4;j<=x1-dx/4 && i<=dx/4;j++) in ocr0_eE()
499 if( dx>4 && dy>5 && (i<dx/4-1 || i==0) ) Break; // ~g but 4x6-e in ocr0_eE()
505 if (x<dx/2){ // no gap found, fat font??? in ocr0_eE()
507 for(i1=dx,i=y0+dy/3;i<y1-dy/6;i++){ in ocr0_eE()
508 j =loop(box1->p,x0 ,i,y1-y0,cs,0,RI); if (j>dx/2) break; in ocr0_eE()
512 for(i2=dx,y=i=y0+dy/3;i<y1-dy/6;i++){ in ocr0_eE()
524 if (x<dx/2) Break; in ocr0_eE()
525 for(i=1,j=x0+dx/6;j<x1-dx/6 && i;j++) in ocr0_eE()
540 if ( num_cross(x0,x1-dx/3,y ,y ,box1->p,cs) != 1 in ocr0_eE()
541 && num_cross(x0,x1-dx/3,y+1,y+1,box1->p,cs) != 1 ) Break; in ocr0_eE()
546 for(j=0,i=x0+dx/8;i<x1-1;i++) in ocr0_eE()
548 if(j<2*dx/4) Break; in ocr0_eE()
552 if( sdata->holes.num==1 && sdata->holes.hole[0].x0 >= dx/2) { in ocr0_eE()
559 if (y>y0+dy/4 && y<y1-dy/4 && x>dx/2) Break; // s in ocr0_eE()
560 if (x>dx/4) ad=99*ad/100; in ocr0_eE()
562 if( num_cross(x0+dx/2,x1 ,y1-dy/4,y1 ,box1->p,cs) == 0 in ocr0_eE()
563 && num_cross(x0+dx/2,x1-1,y1-dy/4,y1 ,box1->p,cs) == 0 in ocr0_eE()
564 && num_cross(x0+dx/2,x1 ,y1-dy/4,y1-1,box1->p,cs) == 0 ) { in ocr0_eE()
570 && loop(box1->p,x1,y1-dy/3,dx,cs,0,LE)<=dx/8 ) { in ocr0_eE()
571 x = loop(box1->p,x0,y0+dy/2,dx,cs,0,RI); in ocr0_eE()
572 if( loop(box1->p,x0,y0+dy/4,dx,cs,0,RI)<=x in ocr0_eE()
573 && loop(box1->p,x0,y0+dy/8,dx,cs,0,RI)<=x ) Break; in ocr0_eE()
574 if( loop(box1->p,x0,y1-dy/4,dx,cs,0,RI)<=x in ocr0_eE()
575 && loop(box1->p,x0,y1-dy/8,dx,cs,0,RI)<=x ) Break; in ocr0_eE()
577 x = loop(sdata->bp,0,dy-2 ,dx,cs,0,RI); in ocr0_eE()
578 if( loop(sdata->bp,0,dy-1-dy/8,dx,cs,0,RI)>x && dy>16) Break; // some Q in ocr0_eE()
589 for(ad=d=100;dx>2 && dy>4 ;){ // min 3x4 in ocr0_eE()
623 i =nearest_frame_vector(box1, aa[0][3],aa[1][3], x0-dx/4, (y0+y1)/2); in ocr0_eE()
624 if (2*box1->frame_vector[i][0] < aa[0][0]+aa[1][0]-1-dx/16) Break; in ocr0_eE()
630 if( get_bw(x0+dx/3,x1-dx/6,y,y,box1->p,cs,2) == 0 ) i=0; in ocr0_eE()
633 if( get_bw(x0+dx/6,x1-dx/4,y,y,box1->p,cs,2) == 0 ) i=0; in ocr0_eE()
636 j=loop(box1->p,x0 ,y,dx,cs,0,RI); in ocr0_eE()
637 j=loop(box1->p,x0+j,y,dx,cs,1,RI); if( j>dx/3 ) i=0; in ocr0_eE()
639 x=x1-dx/3; y=y0; // von oben durchbohren! in ocr0_eE()
643 x=x1-dx/3; y=y1; // von unten durchbohren! in ocr0_eE()
647 x=x1-dx/3; y=y0; // von oben durchbohren! in ocr0_eE()
652 if (dx>15 && x==x0) ad=99*ad/100; // to thin in ocr0_eE()
653 x+=dx/15+1; in ocr0_eE()
657 i=loop(box1->p,x0,y0+dy/4,dx,cs,0,RI); if(i>dx/2) Break; in ocr0_eE()
658 j=loop(box1->p,x0,y0+dy/2,dx,cs,0,RI); if(j<i-dx/4 || j>i+dx/8) Break; i=j; in ocr0_eE()
659 j=loop(box1->p,x0,y1-dy/4,dx,cs,0,RI); if(j<i-dx/4 || j>i+dx/8) Break; in ocr0_eE()
660 j=loop(box1->p,x1,y1-dy/4,dx,cs,0,LE); in ocr0_eE()
661 for( x=dx,y=y0+dy/6; y<y1-dy/9; y++ ) // left border straight in ocr0_eE()
662 { i=loop(box1->p,x0,y,dx,cs,0,RI); in ocr0_eE()
664 if (i>dx/4) break; in ocr0_eE()
667 if(dy>3*dx) // ~[ in ocr0_eE()
668 if( get_bw(x0+dx/2,x0+dx/2,y0+dy/4,y1-dy/4,box1->p,cs,1) == 0 ) Break; in ocr0_eE()
685 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_n() local
691 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_n()
694 i= num_cross( 0,dx-1,dy/4,dy/4,sdata->bp,cs); in ocr0_n()
695 j= num_cross( 0,dx-1,dy/2,dy/2,sdata->bp,cs); in ocr0_n()
697 if( loop(sdata->bp,dx/2,0,dy,cs,0,DO) > dy/8 && sdata->hchar ) Break; /* tt */ in ocr0_n()
699 if( num_cross( 0,dx/2,y ,y ,sdata->bp,cs) != 1 in ocr0_n()
700 && num_cross( 0,dx/2,y-1,y-1,sdata->bp,cs) != 1 in ocr0_n()
701 && num_cross(dx/2,dx-1,y ,y ,sdata->bp,cs) < 1 ) Break; // n rr in ocr0_n()
703 y=loop(sdata->bp,dx-1-dx/4,0,dy,cs,0,DO); if(y>dy/2) Break; in ocr0_n()
704 if(y>1)if( get_bw(dx-1-dx/4,dx-1,0,y-2,sdata->bp,cs,1) == 1 ) Break; in ocr0_n()
707 if( num_cross(0, dx/2,y ,y ,sdata->bp,cs) == 1 in ocr0_n()
708 && num_cross(dx/2,dx-1,y ,y ,sdata->bp,cs) == 0 ) Break; // ~p in ocr0_n()
710 if( num_cross(0,dx-1,dy/2-dy/8,dy/2-dy/8,sdata->bp,cs) == 2 in ocr0_n()
711 && num_cross(0,dx-1,dy/2, dy/2 ,sdata->bp,cs) == 2 ) { // n rr in ocr0_n()
713 x =loop(sdata->bp,0,y,dx ,cs,0,RI); if(x> dx/4) Break; // search 1st v-line in ocr0_n()
714 x+=loop(sdata->bp,x,y,dx-x,cs,1,RI); if(x> dx/2) Break; i1=x; // 1st gap in ocr0_n()
715 x+=loop(sdata->bp,x,y,dx-x,cs,0,RI); if(x< dx/2) Break; i2=x; // 2nd v-line in ocr0_n()
716 x+=loop(sdata->bp,x,y,dx-x,cs,1,RI); if(x<3*dx/4) Break; i3=x; // 2nd gap in ocr0_n()
718 if( num_cross(dx/2,dx-1,y,y,sdata->bp,cs)==2 ) i=3*dy/8; // \it n in ocr0_n()
733 if( loop(sdata->bp,dx-1,dy-1-dy/8,dx,cs,0,LE) in ocr0_n()
734 +loop(sdata->bp, 0,dy-1-dy/8,dx,cs,0,RI)-dx/8-1 in ocr0_n()
735 > loop(sdata->bp,dx-1,dy-1-dy/2,dx,cs,0,LE) in ocr0_n()
736 +loop(sdata->bp, 0,dy-1-dy/2,dx,cs,0,RI) ) ad=90*ad/100; // broken o in ocr0_n()
737 if( dy>7 && dx>7 ) in ocr0_n()
738 if( loop(sdata->bp,dx-1, dy/2,dx,cs,0,LE)==0 in ocr0_n()
739 && loop(sdata->bp,dx-1,dy-1-dy/8,dx,cs,0,RI)>dx/8 ) ad=98*ad/100; // broken o in ocr0_n()
741 if( num_cross(0,dx-1,dy/2, dy/2 ,sdata->bp,cs) != 3 in ocr0_n()
742 && num_cross(0,dx-1,dy/2-dy/8,dy/2-dy/8,sdata->bp,cs) != 3 ) Break; in ocr0_n()
743 i =loop(sdata->bp,0,dy/2-dy/8,dx,cs,0,RI); if (i>dx/4) Break; in ocr0_n()
744 i+=loop(sdata->bp,i,dy/2-dy/8,dx,cs,1,RI); if (i>dx/2) Break; in ocr0_n()
745 i+=loop(sdata->bp,i,dy/2-dy/8,dx,cs,0,RI); in ocr0_n()
747 i+=loop(sdata->bp,i,dy/2-dy/8,dx,cs,1,RI); in ocr0_n()
752 i= loop(sdata->bp,dx-1 ,dy/2,dx,cs,0,LE); if(i>5) in ocr0_n()
753 if( get_bw(dx-1-i/2,dx-1-i/2,0,dy/2,sdata->bp,cs,1) == 1 ) Break; // ~rr in ocr0_n()
754 i+=loop(sdata->bp,dx-1-i,dy/2,dx,cs,1,LE); in ocr0_n()
755 if( get_bw(dx-1-i ,dx-1-i ,0,dy/2,sdata->bp,cs,1) == 0 ) Break; // ~rv in ocr0_n()
757 if( get_bw(dx/2,dx/2,dy/4,dy/4,sdata->bp,cs,1) == 0 in ocr0_n()
758 && get_bw(dx/2,dx-1,dy-2,dy-2,sdata->bp,cs,1) == 0 in ocr0_n()
759 && get_bw(dx/2,dx/2,dy/4,dy-2,sdata->bp,cs,1) == 1 ) Break; // ~P in ocr0_n()
764 if( num_cross( 0,dx-1,0 ,0 ,sdata->bp,cs) >2 in ocr0_n()
765 || num_cross( 0,dx-1,1 ,1 ,sdata->bp,cs) >2 ) Break; in ocr0_n()
768 i=loop(sdata->bp,dx-1, dy-1,dx,cs,0,LE); if (i>dx/2) in ocr0_n()
769 i=loop(sdata->bp,dx-1, dy-2,dx,cs,0,LE); in ocr0_n()
770 x=loop(sdata->bp,dx-1,dy-1-dy/4,dx,cs,0,LE); in ocr0_n()
772 x=loop(sdata->bp, 0,dy-1,dx,cs,0,LE); // check for serifs in ocr0_n()
773 i=loop(sdata->bp, 0,dy-2,dx,cs,0,LE); if (i<x) x=i; in ocr0_n()
774 i=loop(sdata->bp, 0, 1,dx,cs,0,LE); if (i<x) x=i; in ocr0_n()
775 i=loop(sdata->bp, 0, 2,dx,cs,0,LE); if (i<x) x=i; in ocr0_n()
778 if (num_cross( 0,dx-1,dy/4,dy/4,sdata->bp,cs)>=3) ad=98*ad/100; // small M in ocr0_n()
781 if (dx<5) { // for small fonts no middle line is possible for m in ocr0_n()
783 if (num_cross(0,dx-1,dy/8,dy/8,sdata->bp,cs)>=2) { in ocr0_n()
799 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_M() local
803 for(ad=d=100;dx>3 && dy>3;){ // dy<=dx nicht perfekt! besser mittleres in ocr0_M()
807 if( num_cross(0,dx-1, dy/2, dy/2,bp,cs)<3 in ocr0_M()
808 && num_cross(0,dx-1, dy/4, dy/4,bp,cs)<3 in ocr0_M()
809 && num_cross(0,dx-1,5*dy/8,5*dy/8,bp,cs)<3 in ocr0_M()
810 && num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs)<3 in ocr0_M()
811 && dx>4 ) Break; in ocr0_M()
812 if( num_cross(0,dx-1, dy/4, dy/4,bp,cs)<2 in ocr0_M()
813 && num_cross(0,dx-1, dy/8, dy/8,bp,cs)<2 ) Break; /* fat M */ in ocr0_M()
814 if( num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs)<2 ) Break; in ocr0_M()
816 x = loop(bp,dx-1 ,dy-1,dx,cs,0,LE); // ~ melted kl in ocr0_M()
817 x = loop(bp,dx-1-x,dy-1,dx,cs,1,LE); if( x>dx/2 ) Break; in ocr0_M()
819 if( loop(bp, 0,7*dy/16,dx,cs,0,RI) in ocr0_M()
820 + loop(bp,dx-1,7*dy/16,dx,cs,0,LE) > dx/2 ) Break; // ~K in ocr0_M()
823 && loop(bp, dx/4,dy-1, dy,cs,0,UP)<dy/4 in ocr0_M()
824 && loop(bp,3*dx/8,dy-1, dy,cs,0,UP)<dy/4 ) in ocr0_M()
825 if( loop(bp, 0,dy-1-dy/ 8,dx,cs,0,RI) in ocr0_M()
826 < loop(bp, 0,dy-1-dy/16,dx,cs,0,RI)-dx/32 ) Break; // ~it_u in ocr0_M()
827 if( num_cross(0,dx-1, dy/2, dy/2,bp,cs)==2 in ocr0_M()
828 && num_cross(0,dx-1, dy/4, dy/4,bp,cs)> 2 in ocr0_M()
829 && num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs)> 2 ) Break; // ~it_u in ocr0_M()
830 if( num_cross(0 ,dx-1,3*dy/4,3*dy/4,bp,cs)==2 in ocr0_M()
831 && num_cross(dx/2,dx/2,3*dy/4, dy-1,bp,cs)> 0 ) Break; // ~it_v in ocr0_M()
833 if( loop(bp,3*dx/4, 0,dy,cs,0,DO) in ocr0_M()
834 > loop(bp,2*dx/4, 0,dy,cs,0,DO) in ocr0_M()
835 && loop(bp,3*dx/4,dy-1,dy,cs,0,UP) in ocr0_M()
836 < loop(bp,2*dx/4,dy-1,dy,cs,0,UP) ) Break; // ~N in ocr0_M()
837 if( loop(bp,3*dx/4, dy/8,dy,cs,0,DO) in ocr0_M()
838 > loop(bp,2*dx/4, dy/8,dy,cs,0,DO) in ocr0_M()
839 && loop(bp,3*dx/4,dy-1-dy/8,dy,cs,0,UP) in ocr0_M()
840 < loop(bp,2*dx/4,dy-1-dy/8,dy,cs,0,UP) ) Break; // ~serif_N in ocr0_M()
845 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs)!=4 ){ // Is it a N ? in ocr0_M()
846 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs)==3 ){ in ocr0_M()
848 if( num_cross(0,dx-1,y,y,bp,cs)<3 ) break; in ocr0_M()
850 if( num_cross(0,dx-1,y,y,bp,cs)==2 ){ in ocr0_M()
851 x =loop(bp,dx-1 ,y-1,dx,cs,0,LE); in ocr0_M()
852 x+=loop(bp,dx-1-x,y-1,dx,cs,1,LE); in ocr0_M()
853 x+=loop(bp,dx-1-x,y-1,dx,cs,0,LE); in ocr0_M()
854 if( loop(bp,dx-x,y-1,dy,cs,0,UP)>y-2 ) Break; // ~N in ocr0_M()
859 for(i2=0,i1=x=dx/2;x<dx-dx/4;x++){ // lowest pixel in ocr0_M()
866 if (i2==0 && dx>8 && dy>12) Break; // glued and bad splitted serifen-MN in ocr0_M()
870 t1=loop(bp,0 ,3*dy/4,dx,cs,0,RI); in ocr0_M()
871 t1=loop(bp,t1,3*dy/4,dx,cs,1,RI); // thickness of line? in ocr0_M()
872 if( 7*(t1+1)<dx ) in ocr0_M()
873 if( num_cross(i1,dx-1,i2-1,i2-1,bp,cs)!=2 in ocr0_M()
877 if( num_cross(0,dx-1,0,0,bp,cs)!=2 in ocr0_M()
878 && num_cross(0,dx-1,1,1,bp,cs)!=2 in ocr0_M()
879 && num_cross(0,dx-1,2,2,bp,cs)!=2 ) Break; in ocr0_M()
882 if( num_cross(0,dx-1, dy/4, dy/4,bp,cs)==4 in ocr0_M()
883 && num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs)==4 ){ in ocr0_M()
884 i1 =loop(bp, 0, dy/4,dx,cs,0,RI); in ocr0_M()
885 i1+=loop(bp,i1, dy/4,dx,cs,1,RI); in ocr0_M()
886 i1+=loop(bp,i1, dy/4,dx,cs,0,RI); in ocr0_M()
887 i2 =loop(bp, 0,3*dy/4,dx,cs,0,RI); in ocr0_M()
888 i2+=loop(bp,i2,3*dy/4,dx,cs,1,RI); in ocr0_M()
889 i2+=loop(bp,i2,3*dy/4,dx,cs,0,RI); in ocr0_M()
891 i1+=loop(bp,i1, dy/4,dx,cs,1,RI); in ocr0_M()
892 i2+=loop(bp,i2,3*dy/4,dx,cs,1,RI); in ocr0_M()
894 i1+=loop(bp,i1, dy/4,dx,cs,0,RI); in ocr0_M()
895 i2+=loop(bp,i2,3*dy/4,dx,cs,0,RI); in ocr0_M()
898 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs)==2 in ocr0_M()
899 && num_cross(0,dx-1,dy/4,dy/4,bp,cs)==2 && !hchar ) Break; // ~ \it u in ocr0_M()
902 if( num_cross(0,dx-1, 0, 0,bp,cs)<2 ) ad=99*ad/100; in ocr0_M()
903 if (dx>5) /* 4x6 font has only 1 cross at y=1 */ in ocr0_M()
904 if( num_cross(0,dx-1, 1, 1,bp,cs)<2 ) ad=96*ad/100; // kt in ocr0_M()
905 if( num_cross(dx/2,dx/2, 0, dy-1,bp,cs)!=1) ad=98*ad/100; // kt in ocr0_M()
906 if (dx<5 && loop(bp,dx/2,0,dy,cs,0,DO)>=3*dy/8) ad=96*ad/100; // 4x6 H in ocr0_M()
908 if( num_cross(0,dx-1, dy/4, dy/4,bp,cs)<=2 in ocr0_M()
909 && num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs)<=2 in ocr0_M()
910 && dx>8 && dy>12 ){ in ocr0_M()
913 if( num_cross(0,dx-1,y ,y ,bp,cs)==1 ) break; in ocr0_M()
916 if( num_cross(2+dx/6,dx-3-dx/6,y-2,y-2,bp,cs)==0 in ocr0_M()
917 || num_cross(2+dx/6,dx-3-dx/6,y-1,y-1,bp,cs)==0 ) Break; // ~H bad! in ocr0_M()
920 if( loop(bp,3*dx/8, 0,dy,cs,0,DO) >dy/2 in ocr0_M()
921 && loop(bp,5*dx/8,dy-1,dy,cs,0,UP) >dy/2 ) ad=95*ad/100; in ocr0_M()
925 if( loop(bp,0, dy/4,dx,cs,0,RI) in ocr0_M()
926 < loop(bp,0,dy-1-dy/8,dx,cs,0,RI)-dx/16 ) Break; // ~wi glued in ocr0_M()
929 if (ad>99 && dx<8) ad=99*ad/100; /* give 5x8 N a chance */ in ocr0_M()
940 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_N() local
946 for(ad=d=100;dx>3 && dy>3;){ // 4x6font in ocr0_N()
950 if (dx<6) ad=99*ad/100; in ocr0_N()
951 if (dx<5) ad=99*ad/100; in ocr0_N()
959 if (aa[3][0]-aa[0][0]<dx/2) Break; in ocr0_N()
960 if (aa[2][0]-aa[1][0]<dx/2) Break; in ocr0_N()
973 i1=nearest_frame_vector(box1,aa[1][3],aa[2][3], x0+dx/8, y0); in ocr0_N()
978 if (x-x0 > 5*dx/8) Break; in ocr0_N()
990 if (dx>4 && dbg[1] > sq(1024/4)) ad=97*ad/100; // d=0..2*sq(1024) in ocr0_N()
991 if (dx>4 && dbg[1] > sq(1024/3)) Break; // d=0..2*sq(1024) in ocr0_N()
1001 if (x-x0 < 3*dx/8) Break; in ocr0_N()
1003 if ( box1->frame_vector[i3][0]-box1->frame_vector[i1][0]> dx/4 in ocr0_N()
1020 -box1->frame_vector[i1][0]<=dx/8) Break; /* nonsignificant distance */ in ocr0_N()
1048 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_h() local
1053 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_h()
1095 if( get_bw(0 ,dx/2,dy/8 ,dy/8 ,bp,cs,1) != 1 ) Break; in ocr0_h()
1096 if( get_bw(0 ,dx/2,dy/2 ,dy/2 ,bp,cs,1) != 1 ) Break; in ocr0_h()
1097 if( get_bw(dx/2 ,dx-1,dy-1-dy/3,dy-1-dy/3,bp,cs,1) != 1 ) Break; in ocr0_h()
1098 if( get_bw(dx/2 ,dx/2,dy/5 ,dy-1-dy/3,bp,cs,1) != 1 ) Break; in ocr0_h()
1099 if( get_bw(dx-1-dx/3,dx-1,0 ,1 ,bp,cs,1) == 1 ) Break; in ocr0_h()
1100 if( get_bw(dx-1-dx/3,dx-1,1 ,dy/6 ,bp,cs,1) == 1 ) Break; in ocr0_h()
1102 if( get_bw(dx-1-dx/3,dx-1,dy/6 ,dy/5 ,bp,cs,1) == 1 ) Break; in ocr0_h()
1103 if( get_bw(dx-1-dx/3,dx-1,dy-1-dy/4,dy-1 ,bp,cs,1) == 0 ) Break; // s- in ocr0_h()
1104 for( x=x0+dx/3;x<x1-dx/3;x++) in ocr0_h()
1106 if( x>=x1-dx/3 ) Break; in ocr0_h()
1111 if( num_cross(x0,x0+dx/2,y,y, box1->p,cs) == 1 ) i--; in ocr0_h()
1118 if( loop(bp,dx-1,dy/3,dx,cs,0,LE)+dx/8 in ocr0_h()
1119 < loop(bp,dx-1,dy/2,dx,cs,0,LE) in ocr0_h()
1120 && loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE)+dx/8 in ocr0_h()
1121 < loop(bp,dx-1,dy/2,dx,cs,0,LE)) Break; // ~k Okt00 in ocr0_h()
1122 i=loop(bp,0,dy-1-dy/4,dx,cs,0,RI); in ocr0_h()
1126 if (num_cross(x0+dx/2,x0+dx/2,y0,y0+dy/8+2, box1->p,cs) == 1 ) ad=97*ad/100; in ocr0_h()
1129 i =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_h()
1130 i+=loop(bp,i,dy/4,dx,cs,1,RI)+1; in ocr0_h()
1131 for ( ; i<dx-dx/3; i++ ) in ocr0_h()
1139 i=loop(bp,dx-1,3*dy/4,dx,cs,0,LE); // melted "fr" for vertikal letters in ocr0_h()
1140 if (i>dx/4 && loop(bp,dx-1-i,dy-1,dy,cs,1,UP)>dy/2) { in ocr0_h()
1143 i=loop(bp,dx-1,1+dy/16,dx,cs,0,LE); if (i<dx/4) { in ocr0_h()
1146 if( num_cross(dx-i+1+dx/8,dx-i+1+dx/8,0,1+dy/16,bp,cs) > 0 ) { in ocr0_h()
1149 if (loop(box1->p,x1,y0+1+dy/16,dx,cs,0,LE)<dx/4) { in ocr0_h()
1152 if (loop(box1->p,x1,y0 ,dx,cs,0,LE)<dx/4 in ocr0_h()
1153 || loop(box1->p,x1,y0+1,dx,cs,0,LE)<dx/4) { in ocr0_h()
1174 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_H() local
1178 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_H()
1181 if( num_cross(0,dx-1,dy/4 ,dy/4 ,bp,cs) != 2 in ocr0_H()
1182 && num_cross(0,dx-1,dy/4-1,dy/4-1,bp,cs) != 2 ) Break; in ocr0_H()
1183 if( num_cross(0,dx-1,3*dy/4 ,3*dy/4 ,bp,cs) != 2 in ocr0_H()
1184 && num_cross(0,dx-1,3*dy/4+1,3*dy/4+1,bp,cs) != 2 ) Break; in ocr0_H()
1185 if( loop(bp,0 ,dy/8,dx,cs,0,RI) in ocr0_H()
1186 + loop(bp,dx-1,dy/8,dx,cs,0,LE)>dx/2 ) Break; // ~A in ocr0_H()
1188 { j=loop(box1->p,x0 ,y,dx,cs,0,RI) in ocr0_H()
1189 +loop(box1->p,x1 ,y,dx,cs,0,LE); if( j>dx/2 ) i=0; if(j>j1)j1=j; } in ocr0_H()
1192 { j=loop(bp,0 ,y,dx,cs,0,RI) in ocr0_H()
1193 +loop(bp,dx-1,y,dx,cs,0,LE); if( j1-j>dx/5 ) i=0; } in ocr0_H()
1196 { j=loop(box1->p,x0 ,y,dx,cs,0,RI); in ocr0_H()
1197 j=loop(box1->p,x0+j,y,dx,cs,1,RI); if( j>i ) { i=j; ya=y; } } in ocr0_H()
1198 if( i<=dx/2 ) Break; ya-=y0; in ocr0_H()
1199 if( num_cross(0,dx-1,ya ,ya ,bp,cs) != 1 in ocr0_H()
1200 && num_cross(0,dx-1,ya+1,ya+1,bp,cs) != 1 ) Break; /* Dec00 */ in ocr0_H()
1202 if( num_cross(0,dx-1,y ,y ,bp,cs) > 2 in ocr0_H()
1203 && num_cross(0,dx-1,y+1,y+1,bp,cs) > 2 ) break; in ocr0_H()
1205 for(i=1,x=x0+dx/4;x<=x1-dx/4 && i;x++){ in ocr0_H()
1208 for(i=1,x=x0+dx/4;x<=x1-dx/4 && i;x++){ in ocr0_H()
1211 for(i=1,x=x0+dx/4;x<=x1-dx/4 && i;x++){ in ocr0_H()
1220 if( get_bw(x1-dx/8, x1 , y0, y0+dy/8,box1->p,cs,1) != 1 ) Break; in ocr0_H()
1221 if( get_bw(x0 , x0+dx/8, y1-dy/8, y1,box1->p,cs,1) != 1 ) Break; in ocr0_H()
1222 i1=loop(bp,dx-1, dy/4,dx,cs,0,LE); if(i1>dx/2) Break; in ocr0_H()
1223 i2=loop(bp,dx-1, dy/2,dx,cs,0,LE); if(i2<i1-dx/4 || i2>i1+dx/8) Break; in ocr0_H()
1224 i3=loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE); if(i3<i2-dx/4 || i3>i2+dx/8) Break; in ocr0_H()
1225 if(abs(i1+i3-2*i2)>dx/16+1) Break; in ocr0_H()
1228 i1=loop(bp, 0, dy/4,dx,cs,0,RI); in ocr0_H()
1229 i1=loop(bp, i1, dy/4,dx,cs,1,RI); in ocr0_H()
1230 i2=loop(bp, 0,dy-1-dy/4,dx,cs,0,RI); in ocr0_H()
1231 i2=loop(bp, i2,dy-1-dy/4,dx,cs,1,RI); in ocr0_H()
1232 i3=loop(bp,dx-1 ,dy-1-dy/4,dx,cs,0,LE); in ocr0_H()
1233 i3=loop(bp,dx-1-i3,dy-1-dy/4,dx,cs,1,LE); in ocr0_H()
1234 i =loop(bp, 0,dy/2+1+dy/8,dx,cs,0,RI); in ocr0_H()
1235 i+=loop(bp, i,dy/2+1+dy/8,dx,cs,1,RI); in ocr0_H()
1236 i =loop(bp, i,dy/2+1+dy/8,dx,cs,0,RI); in ocr0_H()
1237 if (i<dx/2-1 && 5*i1>6*i2 && 5*i3>6*i2 && i1>i2 && i3>i2 ) Break; in ocr0_H()
1238 if( dx>8 ) in ocr0_H()
1239 if ( loop(bp,dx-1, 3*dy/8,dx,cs,0,LE) in ocr0_H()
1240 -loop(bp,dx-1, dy/8,dx,cs,0,LE)>dx/4 in ocr0_H()
1241 && loop(bp,dx-1, 3*dy/8,dx,cs,0,LE) in ocr0_H()
1242 -loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE)>dx/4 ) Break; // ~K in ocr0_H()
1258 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_k() local
1263 for(ad=100;dx>2 && dy>3;){ // min 3x4 in ocr0_k()
1306 if( num_cross(0, dx-1,0,0,bp,cs) != 1 in ocr0_k()
1307 && num_cross(0, dx-1,1,1,bp,cs) != 1 ) Break; in ocr0_k()
1308 if( num_cross(0,3*dx/4, dy/8 , dy/8 ,bp,cs) != 1 in ocr0_k()
1309 || num_cross(0,3*dx/4,3*dy/16,3*dy/16,bp,cs) != 1 ) Break; in ocr0_k()
1310 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs) != 2 in ocr0_k()
1311 && num_cross(0,dx-1,dy-2,dy-2,bp,cs) != 2 ) Break; in ocr0_k()
1312 if( dx<8 in ocr0_k()
1313 && num_cross(dx-1,dx-1,dy/4,dy-1,bp,cs) != 2 in ocr0_k()
1314 && num_cross(dx-2,dx-2,dy/4,dy-1,bp,cs) != 2 ) Break; in ocr0_k()
1315 i1=loop(bp,0,dy/2-dy/4,dx,cs,0,RI); in ocr0_k()
1316 i2=loop(bp,0,dy/2 ,dx,cs,0,RI);if(i2>dx/2) Break; in ocr0_k()
1317 i3=loop(bp,0,dy/2+dy/4,dx,cs,0,RI); in ocr0_k()
1318 if(abs(i1+i3-2*i2)>dx/16+1 || i1<i3-1) Break; // v-line on left side? in ocr0_k()
1319 if( get_bw(x0 ,x0+dx/2,y0 ,y0+dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_k()
1320 if( get_bw(x0+dx/2,x1, y1-dy/3,y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_k()
1321 if( get_bw(x1-dx/4,x1, y0 ,y0+3*dy/16,box1->p,cs,1) == 1 ) Break; in ocr0_k()
1322 if( get_bw(x1-dx/4,x1, y0+dy/4,y1-dy/4,box1->p,cs,1) != 1 ) Break; //~1 in ocr0_k()
1323 if( get_bw(x1-dx/4,x1, y1-dy/8,y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_k()
1330 for(i=1,x=x0;x<=x0+dx/2 && i;x++) in ocr0_k()
1336 i= loop(bp,dx-1,y,dx,cs,0,LE); if(i>x) { x=i;j=y; } in ocr0_k()
1338 if (x + loop(bp,dx-1-x,y,dx,cs,1,LE)/2 <dx/4) Break; in ocr0_k()
1339 if (x + loop(bp,dx-1-x,y,dx,cs,1,LE)/2 <dx/2) ad=98*ad/100; in ocr0_k()
1340 x=dx-1-x; y=j; in ocr0_k()
1341 i =loop(bp,dx-1,dy-1,dx,cs,0,LE); if(i>dx/2) in ocr0_k()
1342 i =loop(bp,dx-1,dy-2,dx,cs,0,LE); if(i>dx/2) Break; in ocr0_k()
1343 i+=loop(bp,dx-1-i,dy-1,dx,cs,1,LE)/2; in ocr0_k()
1344 if( get_line(x,y,dx-1-i,dy-1,bp,cs,100)<60 ) Break; in ocr0_k()
1351 if (sdata->holes.hole[0].x1>dx-1-dx/4 in ocr0_k()
1355 i=loop(bp,0,dy-1,dx,cs,0,RI); in ocr0_k()
1356 i=loop(bp,i,dy-1,dx,cs,1,RI); if (dx>8 && 4*i>3*dx) Break; // ~glued_tz in ocr0_k()
1357 i =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_k()
1358 if (i>dx/4 in ocr0_k()
1359 && i+loop(bp,i,dy/4,dx,cs,1,RI)>dx/2 in ocr0_k()
1360 && loop(bp, 0,0,dx,cs,0,RI)<=dx/4 in ocr0_k()
1361 && loop(bp,dx-1,0,dx,cs,0,LE)>=dx/2 ) ad=90*ad/100; // divided Q in ocr0_k()
1378 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_K() local
1382 for(ad=d=100;dx>2 && dy>3;){ // updated 29 Mar 2000 perfect??? in ocr0_K()
1386 if( !get_bw(0,dx/2,y,y,bp,cs,1) ) break; in ocr0_K()
1388 for(j=0,i=1,x=x0+dx/4;x<=x1-dx/4 && i;x++){ in ocr0_K()
1396 for(y=0,x=x0+dx/4;x<=x1-dx/4;x++){ // lower h-gap in ocr0_K()
1403 for(i=1,x=x0+dx/3;x<=x1-dx/8 && i;x++){ in ocr0_K()
1409 if( dx<10 ){ in ocr0_K()
1417 if( get_bw(x1-dx/3,x1,y0,y0+dy/8,box1->p,cs,1) != 1 ) Break; // ~k in ocr0_K()
1419 && loop(bp,0, dy/4,dx,cs,0,RI) in ocr0_K()
1420 +loop(bp,0,3*dy/4,dx,cs,0,RI) in ocr0_K()
1421 <2*loop(bp,0, dy/2,dx,cs,0,RI)-2-dx/32 ) Break; // ~X in ocr0_K()
1423 i=loop(box1->p,x1,y0+ dy/4,x1-x0+1,cs,0,LE); if(i>dx/2) Break; in ocr0_K()
1435 ya= dy/4;xa=loop(bp,0,ya,dx,cs,0,RI);xa+=loop(bp,xa,ya,dx,cs,1,RI)/2; in ocr0_K()
1436 yc=dy-dy/4;xc=loop(bp,0,yc,dx,cs,0,RI);xc+=loop(bp,xc,yc,dx,cs,1,RI)/2; in ocr0_K()
1437 yb=dy/2; xb=dx-1-loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_K()
1438 for(yd=ye=yf=xe=y=i=0,xf=xd=dx;y<dy/4;y++){ // range 0..1/4 in ocr0_K()
1439 x =loop(bp,dx-1, y,dx,cs,0,LE); if(x<xd){ xd=x;yd= y; } in ocr0_K()
1440 x =loop(bp,dx-1,dy-1-y,dx,cs,0,LE); if(x<xf){ xf=x;yf=dy-1-y; } in ocr0_K()
1441 x =loop(bp,dx-1,dy/2+y,dx,cs,0,LE); if(x>xe){ xe=x;ye=dy/2+y; } in ocr0_K()
1442 x =loop(bp,dx-1,dy/2-y,dx,cs,0,LE); if(x>xe){ xe=x;ye=dy/2-y; } in ocr0_K()
1444 x =loop(bp,0 ,dy/2+y,dx,cs,0,RI); // middle left border in ocr0_K()
1445 x+=loop(bp,x ,dy/2+y,dx,cs,1,RI); // test 2nd cross in ocr0_K()
1446 x+=loop(bp,x ,dy/2+y,dx,cs,0,RI); if(x<xb){ xb=x;yb=dy/2+y; } in ocr0_K()
1448 x =loop(bp,0 ,dy/2-y,dx,cs,0,RI); in ocr0_K()
1449 x+=loop(bp,x ,dy/2-y,dx,cs,1,RI); // test 2nd cross in ocr0_K()
1450 x+=loop(bp,x ,dy/2-y,dx,cs,0,RI); if(x<xb){ xb=x;yb=dy/2-y; } in ocr0_K()
1451 x =dx-1-loop(bp,dx-1,dy/2-y,dx,cs,0,LE); if(x<xb){ xb=x;yb=dy/2-y; } in ocr0_K()
1453 xd=dx-1-xd;xe=dx-1-xe;xf=dx-1-xf; in ocr0_K()
1454 xb+=loop(bp,xb,yb,dx,cs,1,RI)/4; // detect center of line in ocr0_K()
1455 xe-=loop(bp,xe,ye,dx,cs,1,LE)/4; in ocr0_K()
1456 xd-=loop(bp,xd,yd,dx,cs,1,LE)/4; in ocr0_K()
1457 xf-=loop(bp,xf,yf,dx,cs,1,LE)/4; in ocr0_K()
1461 xa,ya,xb,yb,xc,yc,xd,yd,xe,ye,xf,yf,dx,dy);\ in ocr0_K()
1465 if( dx>8 ){ // example szaka0103 in ocr0_K()
1466 if( xe>5*dx/8 || xb>5*dx/8 ) Break; // ~{\it n} in ocr0_K()
1471 xe+=loop(bp,xe,ye,dx,cs,1,RI); if( xe>=xf ) Break; // ~{\it n} in ocr0_K()
1474 if( loop(bp,0,1,dy,cs,1,DO)<=3*dx/4 in ocr0_K()
1475 && loop(bp,1,1,dy,cs,1,DO)<=3*dx/4 in ocr0_K()
1476 && loop(bp,2,1,dy,cs,1,DO)<=3*dx/4 ) Break; // ~x in ocr0_K()
1478 if (loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE)<=dx/8){ in ocr0_K()
1498 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_f() local
1515 for(ad=d=100;dx>2 && dy>5;){ // sometimes no hchar! in ocr0_f()
1536 i1=nearest_frame_vector(box1,aa[0][3],aa[1][3],x0-dx/2,(5*y0+3*y1)/8); in ocr0_f()
1546 i5=nearest_frame_vector(box1, i3, i7, x1+dx/4, (5*y0+3*y1)/8); in ocr0_f()
1553 if (box1->frame_vector[i2][0]-x0>dx/2) Break; // ~3 in ocr0_f()
1554 i =nearest_frame_vector(box1, aa[0][3], i2, x1+2*dx, (y0+y1)/2); in ocr0_f()
1557 -box1->frame_vector[i9][0]>dx/8) Break; // ~3 in ocr0_f()
1562 i=loop(bp,0,y,dx,cs,0,RI); if( y>dy/4 && i>5*dx/8 ) break; in ocr0_f()
1563 i=loop(bp,i,y,dx,cs,1,RI); if( i>x ) { x=i;j=y; } in ocr0_f()
1565 && num_cross(0,dx-1,y ,y ,bp,cs) != 1 in ocr0_f()
1566 && num_cross(0,dx-1,y+1,y+1,bp,cs) != 1 // against noise in ocr0_f()
1570 i=loop(bp,(dx+1)/2,0,dy,cs,0,DO)/2; in ocr0_f()
1572 && num_cross( 0, (dx+1)/2,i,i,bp,cs) > 0 in ocr0_f()
1573 && num_cross((dx+1)/2,dx-1,i,i,bp,cs) > 0 ) Break; // ~Y in ocr0_f()
1575 if (loop(bp,3*dx/4, 0,dy,cs,0,DO)>dy/8 in ocr0_f()
1576 && loop(bp,3*dx/4-1,0,dy,cs,0,DO)>dy/8) Break; // upper bow in ocr0_f()
1578 if (num_cross(0,dx-1,i,i,bp,cs)!=1) Break; in ocr0_f()
1581 for (i1=dx,i2=y,j=y+1;j<dy-dy/4;j++){ in ocr0_f()
1582 i=loop(bp,0,j,dx,cs,0,RI); in ocr0_f()
1583 i=loop(bp,i,j,dx,cs,1,RI); // thickness vert. line in ocr0_f()
1588 if (x<2*i && x<dx) Break; in ocr0_f()
1589 if (x<i+2+dx/8) ad=97*ad/100; // fat f in ocr0_f()
1601 if (aa[3][0]-x0>3*dx/4 && aa[3][1]-y0>3*dy/16) ad=99*ad/100; // ~t in ocr0_f()
1604 j=loop(bp,0,dy/8,dx,cs,0,RI); // if j>dx/2 we have italic f in ocr0_f()
1605 if ((2*x<dx && j<=dx/2) || 3*x<dx) Break; // bar should be not to small in ocr0_f()
1607 if (loop(bp,0,i,dx,cs,0,RI)>(j+dx/4)) break; in ocr0_f()
1610 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)<dx/2 ) in ocr0_f()
1611 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)-1 in ocr0_f()
1612 <=loop(bp,dx-1, y ,dx,cs,0,LE) ) in ocr0_f()
1613 if( loop(bp,dx-1, y-1,dx,cs,0,LE) in ocr0_f()
1614 <=loop(bp,dx-1, y ,dx,cs,0,LE) ) Break; // ~1 in ocr0_f()
1616 if( loop(bp,0,dy/2,dx,cs,0,RI)-1 in ocr0_f()
1617 >loop(bp,0, 1,dx,cs,0,RI) ) Break; // ~X in ocr0_f()
1620 if( num_cross(0,dx-1,0,0,bp,cs)==1 && hchar) //~r in ocr0_f()
1621 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs)!=1 in ocr0_f()
1622 && num_cross(0,dx-1,dy-2,dy-2,bp,cs)!=1 ) Break; // ~* etc. in ocr0_f()
1625 if( num_cross(0,dx-1,y ,y ,bp,cs) ==2 ) j=0; in ocr0_f()
1628 for(x=0;j && x<dx ;x++){ // .. in ocr0_f()
1629 if( (getpixel(bp,x ,y )>=cs || dx<7) && getpixel(bp,x+1,y )>=cs in ocr0_f()
1636 for(i1=i2=dx,y=7*dy/8;y<dy;y++){ in ocr0_f()
1637 x=loop(bp,0 ,y,dx,cs,0,RI);if(x<i1)i1=x; in ocr0_f()
1638 x=loop(bp,dx-1,y,dx,cs,0,LE);if(x<i2)i2=x; in ocr0_f()
1640 if(i1>i2+dx/4) Break; // ~t ~e in ocr0_f()
1642 if( loop(bp,0,3*dy/4,dx,cs,0,RI)<i1-dx/4 ) Break; in ocr0_f()
1643 if( dx>5 && !hchar) in ocr0_f()
1644 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)>3*dx/4 ) in ocr0_f()
1645 if( loop(bp,dx-1,dy-1,dy,cs,0,UP)<dx/2 ) Break; // ~c in ocr0_f()
1646 if( dx>8 ) in ocr0_f()
1647 if( loop(bp, 0,2*dy/3 ,dx,cs,0,RI)>2*dx/3 in ocr0_f()
1648 || loop(bp, 0,2*dy/3-1,dx,cs,0,RI)>2*dx/3 ) in ocr0_f()
1649 if( loop(bp,dx-1, dy/4 ,dx,cs,0,LE)>2*dx/3 ) Break; // ~5 ~S in ocr0_f()
1652 if ( get_bw(x0+dx/8,x0+dx/8,y0+dy/4,y1-dy/16,box1->p,cs,2) == 0 in ocr0_f()
1653 && num_cross(x1-dx/4,x1-dx/4,y0,y1,box1->p,cs)!=2 in ocr0_f()
1654 && num_cross(x1-dx/8,x1-dx/8,y0,y1,box1->p,cs)!=2 ) Break; // ~r in ocr0_f()
1660 if( dx>4 ) in ocr0_f()
1661 if( loop(bp,dx-1 ,3*dy/4,dx,cs,0,LE)- in ocr0_f()
1662 loop(bp,0 ,3*dy/4,dx,cs,0,RI)>dx/5+1 in ocr0_f()
1663 && loop(bp,dx-1-dx/8,dy-1 ,dy,cs,0,UP)<dy/4 ) { in ocr0_f()
1664 if( loop(bp,dx-1 ,5*dy/16,dx,cs,0,LE)- in ocr0_f()
1665 loop(bp,0 ,5*dy/16,dx,cs,0,RI)>=dx/5+1) ad=98*ad/100; // ~E in ocr0_f()
1666 i=loop(bp,dx/8,0,dy,cs,0,DO); in ocr0_f()
1673 i = loop(bp,dx-1 ,3*dy/4,dx ,cs,0,LE)/2; in ocr0_f()
1674 if (loop(bp,dx-1-i , dy-1,dy/2,cs,0,UP)<dy/4) in ocr0_f()
1675 if (loop(bp,0 ,3*dy/4,dx ,cs,0,RI)<dx/4) { in ocr0_f()
1679 if( loop(bp,0,dy/4,dx ,cs,0,RI)>1 in ocr0_f()
1684 if (get_bw(x0+dx/16,x1-dx/16,y0,y0,box1->p,cs,2) == 0) { // white pixels? in ocr0_f()
1702 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_bB() local
1706 for(ad=d=100;dx>2 && dy>4;){ // min 3x4 in ocr0_bB()
1710 if( get_bw(x0,x0+dx/2, y , y ,box1->p,cs,1) != 1 ) i=0; in ocr0_bB()
1713 if( get_bw(x0,x0+dx/3, y , y ,box1->p,cs,1) != 1 ) i=0; in ocr0_bB()
1716 if( num_cross(x0+dx/2, x0+dx/2,y0,y1 ,box1->p,cs) != 3 ) in ocr0_bB()
1717 if( num_cross(x1-dx/3, x1-dx/3,y0,y1 ,box1->p,cs) != 3 ) Break; in ocr0_bB()
1719 y = loop(box1->p,x0+dx/2,y1 ,dy,cs,0,UP); if (y>1+dy/8) Break; in ocr0_bB()
1720 y+= loop(box1->p,x0+dx/2,y1-y,dy,cs,1,UP); if (y>dy/3) Break; in ocr0_bB()
1721 y=y1-y-loop(box1->p,x0+dx/2,y1-y,dy,cs,0,UP)/2; if (y<y0+3*dy/8) Break; in ocr0_bB()
1723 if( num_cross(0,dx-1,y-y0 ,y-y0 ,bp,cs) != 2 ) in ocr0_bB()
1724 if( num_cross(0,dx-1,y-y0+1,y-y0+1,bp,cs) != 2 ) Break; in ocr0_bB()
1725 if( num_cross(0,dx-1, dy/4 , dy/4 ,bp,cs) != 2 ) in ocr0_bB()
1726 if( num_cross(0,dx-1, dy/4+1, dy/4+1,bp,cs) != 2 ) in ocr0_bB()
1727 if( num_cross(0,dx-1, dy/4-1, dy/4-1,bp,cs) != 2 ) Break; in ocr0_bB()
1728 for( y=dy/4;y<3*dy/4;y++ ) if( num_cross(0,dx-1,y,y,bp,cs)==1 ) break; in ocr0_bB()
1731 if( loop(box1->p,x0,y0+ y ,dx,cs,0,RI) in ocr0_bB()
1732 > loop(box1->p,x0,y0+dy/4,dx,cs,0,RI)+dx/32 ) in ocr0_bB()
1735 i1=loop(box1->p,x0,y0+dy/4,dx,cs,0,RI); in ocr0_bB()
1736 i2=loop(box1->p,x0,y0+dy/2,dx,cs,0,RI); in ocr0_bB()
1737 i =loop(box1->p,x0,y0+dy/2-dy/ 8,dx,cs,0,RI); if(i>i2) i2=i; in ocr0_bB()
1738 i =loop(box1->p,x0,y0+dy/2-dy/16,dx,cs,0,RI); if(i>i2) i2=i; in ocr0_bB()
1739 i3=loop(box1->p,x0,y1-dy/4,dx,cs,0,RI); in ocr0_bB()
1741 if (i3+i1<2*i2-dx/16) ad=98*ad/100; // ~8 in ocr0_bB()
1742 if (i3+i1<2*i2-dx/8 ) ad=96*ad/100; in ocr0_bB()
1743 if( loop(box1->p,x0,y0+ 1 ,dx,cs,0,RI) in ocr0_bB()
1744 >= loop(box1->p,x0,y0+ 3 ,dx,cs,0,RI)+dx/32 ) in ocr0_bB()
1745 if( loop(box1->p,x0,y0+ 0 ,dx,cs,0,RI) in ocr0_bB()
1746 > loop(box1->p,x0,y0+ 3 ,dx,cs,0,RI)+dx/32 ) in ocr0_bB()
1747 if( loop(box1->p,x0,y1- 0 ,dx,cs,0,RI) in ocr0_bB()
1748 > loop(box1->p,x0,y1- 3 ,dx,cs,0,RI)+dx/32 ) in ocr0_bB()
1749 if( loop(box1->p,x0,y1- 1 ,dx,cs,0,RI) in ocr0_bB()
1750 > loop(box1->p,x0,y1- 3 ,dx,cs,0,RI)+dx/32 ) Break; // ~8 Aug00 in ocr0_bB()
1762 for( x=dx,y=dy/6; y<dy-dy/8; y++ ) // left border straight in ocr0_bB()
1763 { i=loop(box1->p,x0,y0+y,dx,cs,0,RI); if( i>x+dx/9 ) break; in ocr0_bB()
1767 for( x=dx,y=1;y<dy/4;y++ ) // right border straight in ocr0_bB()
1768 { i=loop(bp,dx-1,dy-y,dx,cs,0,LE); in ocr0_bB()
1772 x=loop(bp,0,dy/2 ,dx,cs,0,RI); in ocr0_bB()
1773 i=loop(bp,0,dy/2-1,dx,cs,0,RI); if (i>x) x=i; // allow dust in ocr0_bB()
1774 i=loop(bp,0,dy/2+1,dx,cs,0,RI); if (i>x) x=i; in ocr0_bB()
1775 if ( loop(bp,0, dy/8,dx,cs,0,RI) in ocr0_bB()
1776 +loop(bp,0,7*dy/8,dx,cs,0,RI) > 2*x+1 ) Break; // not konvex! in ocr0_bB()
1780 x =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_bB()
1781 if(loop(bp,0,dy/2,dx,cs,0,RI)>x+dx/8) ad=97*ad/100; in ocr0_bB()
1784 if ( (!hchar) && (dx<=10 || dy<=10) ) ad=97*ad/100; // hchar or good_quality in ocr0_bB()
1790 for(ad=d=100;dx>3 && dy>4;){ // min 3x4 in ocr0_bB()
1794 if( get_bw(x0 , x0+dx/2, y , y ,box1->p,cs,1) != 1 ) Break; in ocr0_bB()
1796 if( get_bw(x0+ dx/2, x0+dx/2, y1-dy/3, y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_bB()
1797 if( get_bw(x1- dx/2, x1 , y1-dy/3, y1-dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_bB()
1798 if( get_bw(x1- dx/3, x1 , y0 , y0+dy/5,box1->p,cs,1) == 1 ) Break; in ocr0_bB()
1799 if( get_bw(x1-4*dx/9, x1 , y0+dy/5, y0+dy/5,box1->p,cs,1) == 1 ) Break; in ocr0_bB()
1805 if( num_cross(0,dx-1,y,y,bp,cs) == 2 ) i++; else j++; in ocr0_bB()
1811 < dx*dy) ad=90*ad/100; // hole to small in ocr0_bB()
1813 i=loop(bp,dx-1,dy-1 ,dx,cs,0,LE); in ocr0_bB()
1814 j=loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE); if(j>i) Break; in ocr0_bB()
1829 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_dD() local
1833 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_dD()
1836 if( get_bw(x0 ,x0+dx/3,y0+dy/2,y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1837 if( get_bw(x1-dx/3,x1 ,y0+dy/2,y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1839 if( get_bw(x1-dx/2,x1 ,y0+dy/4,y0+dy/4 ,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1840 if( num_cross(x0+dx/2,x0+dx/2,y0 ,y1 ,box1->p,cs) != 2 ) in ocr0_dD()
1841 if( num_cross(x1-dx/3,x1-dx/3,y0 ,y1 ,box1->p,cs) != 2 ) Break; in ocr0_dD()
1851 if( i+2+dx/16<=x ) break; in ocr0_dD()
1856 for(x=dx,y=0;y<dy/3;y++){ in ocr0_dD()
1858 if( i>x+dx/16 ) break; in ocr0_dD()
1863 for(x=dx,y=bp->y-1;y>2*dy/3;y--){ in ocr0_dD()
1865 if( i>x+dx/16 ) break; in ocr0_dD()
1869 if( loop(bp,dx-1,dy-1 ,dx,cs,0,LE) <= in ocr0_dD()
1870 loop(bp,dx-1,dy-2-dy/16,dx,cs,0,LE) ) Break; // P in ocr0_dD()
1872 y=loop(bp,dx/2,dy-1,dy,cs,0,UP)-1; if (dy>16) y/=2; in ocr0_dD()
1874 if (get_bw(dx/2,dx-1,dy-1-y,dy-1-y,bp,cs,1)==1) Break; // ~A in ocr0_dD()
1878 yb=loop(bp,dx/16+1,dy-1,dy,cs,0,UP); in ocr0_dD()
1881 if ( loop(bp, dx/2, 0,dy,cs,0,DO) in ocr0_dD()
1882 -loop(bp, dx/2,dy-1,dy,cs,0,UP) > dy/8 ) ad=97*ad/100; // ~b in ocr0_dD()
1886 if (loop(bp, 0, 0,dx,cs,0,RI)>=dx/2 in ocr0_dD()
1887 && loop(bp,dx-1,dy-1,dx,cs,0,LE)>=dx/2 in ocr0_dD()
1888 && loop(bp, 0,dy/2,dx,cs,0,RI)< 2 ) ad=96*ad/100; // thin O in ocr0_dD()
1897 for(d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_dD()
1901 if( get_bw(x0 , x0+dx/2, y1-dy/6, y1-dy/9,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1902 if( get_bw(x0 , x0+dx/2, y1-dy/3, y1-dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1903 if( get_bw(x0+dx/2, x1 , y1-dy/3, y1-dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1904 if( get_bw(x1-dx/4, x1 , y0+dy/8, y0+dy/8,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1905 if( get_bw(x0+dx/2, x0+dx/2, y1-dy/4, y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1907 if( get_bw(x0 , x0+dx/3, y0 , y0+dy/5,box1->p,cs,1) == 1 ) Break; in ocr0_dD()
1908 if( get_bw(x0 , x0+dx/3, y0 , y0+dy/6,box1->p,cs,1) == 1 ) Break; in ocr0_dD()
1909 if( get_bw(x0 , x0+dx/4, y1-dy/8, y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1910 if( get_bw(x0+dx/2-1,x0+dx/2,y1-dy/8, y1 ,box1->p,cs,1) != 1 ) Break; // ~"A in ocr0_dD()
1913 for(i=dx/8+1,x=0;x<dx && i;x++){ in ocr0_dD()
1917 if( num_cross(0 ,dx-1,y ,y , bp,cs) == 2 ) i--; in ocr0_dD()
1918 if( num_cross(0 ,dx-1,y ,y , bp,cs) > 3 ) i++; // ~al in ocr0_dD()
1921 if( num_cross(0 ,dx-1,y ,y , bp,cs) == 1 ) in ocr0_dD()
1922 if( num_cross(dx/2,dx-1,y ,y , bp,cs) == 1 ) i--; in ocr0_dD()
1926 if (dx<6) Break; ad=95*ad/100; } // glued j above 8 (4x6 sample) in ocr0_dD()
1931 if( num_cross(0 ,dx-1,dy-1-dy/4,dy-1-dy/4,bp,cs) != 2 ) { // glued al in ocr0_dD()
1947 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_F() local
1951 for(ad=d=100;dx>2 && dy>4;){ // dx>1 dy>2*dx in ocr0_F()
1954 if( get_bw(x0+dx/2,x0+dx/2,y0,y0+dy/8,box1->p,cs,1) != 1 ) Break; in ocr0_F()
1955 if( get_bw(x0,x0+dx/4,y1-dy/4,y1-dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_F()
1956 if( get_bw(x0,x0+dx/2,y0+dy/4,y0+dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_F()
1959 j=loop(bp,dx-1,dy-1-y,dx,cs,0,LE); if(j<3 || 3*j<dx) break; // ~f Jun00 in ocr0_F()
1961 } if (y<dy/4 || x<dx/2) Break; in ocr0_F()
1964 j=loop(bp,0,y,dx,cs,0,RI); in ocr0_F()
1965 j=loop(bp,j,y,dx,cs,1,RI); if( j>dx/2 ) i=0; } in ocr0_F()
1968 x=loop(bp,0,dy-1-dy/4,dx,cs,0,RI); in ocr0_F()
1969 x=loop(bp,x,dy-1-dy/4,dx,cs,1,RI); // strichdicke in ocr0_F()
1971 { j=loop(bp,0,y,dx,cs,0,RI); in ocr0_F()
1972 j=loop(bp,j,y,dx,cs,1,RI); if( j>dx/3 && ((j>2*x && dx>8) || j>x+1)) i=0; } in ocr0_F()
1977 x =loop(bp,dx-1,y,dx,cs,0,LE); if(x<2) continue; // skip serifs in ocr0_F()
1978 j =loop(bp,dx-x,y,dy/4,cs,0,UP); in ocr0_F()
1979 x+=loop(bp,dx-x,y-j+1,dx,cs,0,LE); if (x>=dx/3) { i=0; break; } in ocr0_F()
1985 if( get_bw(0,dx/2,y,y,bp,cs,1) != 1 ) i=0; in ocr0_F()
1989 if( get_bw(0,dx/3,y,y,bp,cs,1) != 1 ) i=0; in ocr0_F()
1992 i=loop(bp,dx-1,dy-1,dx,cs,0,LE); // serif or E ? in ocr0_F()
1993 if (i<=dx/3) { in ocr0_F()
1994 if (loop(bp,dx-1,(dy+4)/8,dx,cs,0,LE)>dx/8 // no serif in ocr0_F()
1995 || loop(bp, 0, dy-3,dx,cs,0,RI)<1) break; in ocr0_F()
1998 if( get_bw(dx-1-dx/4,dx-1,dy-1-dy/4,dy-1,bp,cs,1) == 1 ) Break; // ~E in ocr0_F()
1999 if( get_bw(dx-1 ,dx-1,0 ,dy/3,bp,cs,1) != 1 ) Break; in ocr0_F()
2001 if( loop(bp,0, bp->y/4,dx,cs,0,RI) < in ocr0_F()
2002 loop(bp,0,3*bp->y/4,dx,cs,0,RI)-1 ) Break; in ocr0_F()
2005 for(i=0,x=dx/4;x<dx-1;x++) in ocr0_F()
2012 && get_bw(dx-2,dx-1,0,0,bp,cs,1) == 0 in ocr0_F()
2017 i= loop(bp,0,3*bp->y/4,dx,cs,0,RI)-1; in ocr0_F()
2021 i= loop(bp,bp->x-1,bp->y/4,dx,cs,0,LE); in ocr0_F()
2023 j=i+loop(bp,bp->x-1-i,bp->y/4, dx ,cs,1,LE); in ocr0_F()
2026 i=loop(bp,bp->x-1,0,dx,cs,0,LE); in ocr0_F()
2028 if (i>dx/8) Break; in ocr0_F()
2034 if ( num_cross(2*dx/3,2*dx/3,0,dy-1,bp,cs) < 2 ) ad=90*ad/100; // ~r in ocr0_F()
2048 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_uU() local
2054 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_uU()
2060 if( get_bw(dx/2,dx/2,dy/2,dy-1,bp,cs,1)==0 ) Break; in ocr0_uU()
2061 if( get_bw(dx/2,dx-1,dy/2,dy/2,bp,cs,1)==0 ) Break; in ocr0_uU()
2062 for(i=0,x=3*dx/8;x<dx-dx/4;x++){ in ocr0_uU()
2066 if( get_bw(x,dx-1,i-1,i-1,bp,cs,1)==0 ) Break; in ocr0_uU()
2069 j=num_cross(0,dx/2-((y>dy/2)?dx/8:0),y,y,bp,cs); in ocr0_uU()
2070 if( y<dy/2 && num_cross(dx/2,dx-1,y,y,bp,cs)>1 ) i--; // ~{\it v} in ocr0_uU()
2075 j=num_cross(dx-dx/2,dx-1,y,y,bp,cs); in ocr0_uU()
2079 for(i=1,x=x0+dx/3;x<=x1-dx/3 && i;x++){ in ocr0_uU()
2082 for(i=dx/4+1,x=x0+dx/3;x<=x1-dx/3 && i;x++){ in ocr0_uU()
2085 for(i=1,x=x0+dx/3;x<=x1-dx/3 && i;x++){ in ocr0_uU()
2089 if( num_cross(0 ,dx/2, dy/4, dy/4,bp,cs)==2 in ocr0_uU()
2090 && num_cross(dx-dx/2,dx-1,dy-dy/4,dy-dy/4,bp,cs)==1 ) Break; // ~{\it v} in ocr0_uU()
2092 i=loop(bp,0,dy-1-dy/16,dx,cs,0,RI); in ocr0_uU()
2093 j=loop(bp,0,dy-1-dy/8 ,dx,cs,0,RI); in ocr0_uU()
2096 if( loop(bp,dx-1,dy/16,dx,cs,0,LE) in ocr0_uU()
2097 > loop(bp,dx-1,dy/8 ,dx,cs,0,LE)+1+dx/32 ) Break; // ~bad 0 (thinn) in ocr0_uU()
2099 if( loop(bp, 0, dy-1,dx,cs,1,RI)==dx in ocr0_uU()
2100 && loop(bp,dx-1,3*dy/4,dx,cs,0,LE)>dx/16 in ocr0_uU()
2101 && loop(bp, 0,3*dy/4,dx,cs,0,RI)>dx/16 in ocr0_uU()
2102 && loop(bp,dx-1, dy/2,dx,cs,0,LE)>dx/16 in ocr0_uU()
2103 && loop(bp, 0, dy/2,dx,cs,0,RI)>dx/16 in ocr0_uU()
2106 i=loop(bp, 0,dy-2-dy/8,dx,cs,0,RI); in ocr0_uU()
2107 j=loop(bp,dx-1,dy-2-dy/8,dx,cs,0,LE); in ocr0_uU()
2108 if ( i>dx/4 && j>dx/4 && i+j>=dx/2) Break; // v in ocr0_uU()
2109 if (i+j>=dx/2) ad=97*ad/100; in ocr0_uU()
2111 if ( num_cross(0,dx-1,dy/2,dy/2,bp,cs)!=2 ) ad=96*ad/100; // w in ocr0_uU()
2112 if ( loop(bp,dx/2,dy-1,dy,cs,0,UP)>0 ) ad=98*ad/100; // w in ocr0_uU()
2130 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_micro() local
2136 for(ad=d=100;dx>2 && dy>4;){ // min 3x4 in ocr0_micro()
2142 if( get_bw(dx/2,dx/2,3*dy/8,7*dy/8,bp,cs,1)==0 ) break; in ocr0_micro()
2143 if( get_bw(dx/2,dx-1,3*dy/8,7*dy/8,bp,cs,1)==0 ) break; in ocr0_micro()
2145 x=loop(bp,dx-1,y,dx,cs,0,LE); if(8*x>5*dx) break; in ocr0_micro()
2147 for(i=0,x=2*dx/8;x<dx-1-dx/4;x++){ in ocr0_micro()
2151 if( get_bw(x,dx-1,i-1,i-1,bp,cs,1)==0 ) break; in ocr0_micro()
2153 j=num_cross(0,dx/2,y,y,bp,cs); in ocr0_micro()
2154 if( y<dy/2 && num_cross(dx/2,dx-1,y,y,bp,cs)>1 ) i--; // ~{\it v} in ocr0_micro()
2159 j=num_cross(dx-dx/2,dx-1,y,y,bp,cs); in ocr0_micro()
2163 for(i=1,x=x0+dx/3;x<=x1-dx/3 && i;x++){ in ocr0_micro()
2166 for(i=dx/4+1,x=x0+dx/3;x<=x1-dx/3 && i;x++){ in ocr0_micro()
2169 if( num_cross(0 ,dx/2, dy/4, dy/4,bp,cs)!=1 ) break; in ocr0_micro()
2170 if( num_cross(dx-dx/2,dx-1,dy-dy/2,dy-dy/2,bp,cs)!=1 ) break; in ocr0_micro()
2171 if( get_bw( (dx+2)/4,dx-1,dy-2-3*dy/16,dy-1,bp,cs,1) == 1 ) break; in ocr0_micro()
2172 if( num_cross(0,dx/4,dy-1,dy-1,bp,cs)!=1 ) break; in ocr0_micro()
2185 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_vV() local
2190 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_vV()
2193 x=loop(bp,dx/2,0,dx,cs,1,RI)+dx/2; // be sure in the upper gap in ocr0_vV()
2195 if (x>3*dx/4 || y<dy/4) Break; in ocr0_vV()
2203 if(((num_cross( 0,dx/2+1,dy/ 8,dy/ 8,bp,cs)!=1) in ocr0_vV()
2204 && (num_cross( 0,dx/2+1,dy/16,dy/16,bp,cs)!=1) // it v in ocr0_vV()
2205 && (num_cross(dx/2+1,dx -1,dy/ 8,dy/ 8,bp,cs)!=1)) /* () added on Sep00 */ in ocr0_vV()
2206 || ((num_cross( 0,dx-1,dy-1-dy/8,dy-1-dy/8,bp,cs)> 1) in ocr0_vV()
2207 && (num_cross( 0,dx-1,dy-1 ,dy-1 ,bp,cs)> 1)) ) Break; in ocr0_vV()
2209 if( get_bw(0 ,dx/8,dy-1-dy/6,dy-1,bp,cs,1)==1 ) Break; in ocr0_vV()
2210 if( get_bw(dx-1-dx/8,dx-1,dy-1-dy/6,dy-1,bp,cs,1)==1 ) Break; in ocr0_vV()
2211 if( loop(bp,0 ,dy/6 ,dx,cs,0,RI) in ocr0_vV()
2212 >=loop(bp,0 ,dy-1-dy/3,dx,cs,0,RI) && dy>6 ) Break; in ocr0_vV()
2213 if( loop(bp,0 ,dy-1-dy/3,dx,cs,0,RI) in ocr0_vV()
2214 >loop(bp,0 ,dy-1-dy/8,dx,cs,0,RI) in ocr0_vV()
2215 && loop(bp,dx-1,dy-1-dy/3,dx,cs,0,LE) in ocr0_vV()
2216 >loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE) ) Break; // better OR ? in ocr0_vV()
2217 if( loop(bp,0 ,dy-1-dy/3,dx,cs,0,RI) in ocr0_vV()
2218 >=loop(bp,0 ,dy-1-dy/8,dx,cs,0,RI) in ocr0_vV()
2219 && loop(bp,dx-1,dy-1-dy/3,dx,cs,0,LE) in ocr0_vV()
2220 >=loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE) ) ad=99*ad/100; // font21 in ocr0_vV()
2221 if( loop(bp,dx-1,dy/6 ,dx,cs,0,LE) in ocr0_vV()
2222 >=loop(bp,dx-1,dy-1-dy/3,dx,cs,0,LE) && dy>6 ) Break; in ocr0_vV()
2223 x=loop(bp,0,dy-1,dx,cs,0,RI); // 3*x>dx changed to 2*x>dx May2001 JS in ocr0_vV()
2224 x=loop(bp,x,dy-1,dx,cs,1,RI); if ( dx>14 && 2*x>dx ) Break; // U in ocr0_vV()
2225 if( num_cross(0 ,dx/2, dy/4, dy/4,bp,cs)==2 in ocr0_vV()
2226 && num_cross(dx-dx/2,dx-1,dy-dy/4,dy-dy/4,bp,cs)==2 ) Break; // ~{\it u} in ocr0_vV()
2230 i=loop(bp, 0,dy-1-dy/16,dx,cs,0,RI) in ocr0_vV()
2231 +loop(bp,dx-1,dy-1-dy/16,dx,cs,0,LE); in ocr0_vV()
2232 j=loop(bp, 0,dy-1-dy/4 ,dx,cs,0,RI) in ocr0_vV()
2233 +loop(bp,dx-1,dy-1-dy/4 ,dx,cs,0,LE); in ocr0_vV()
2234 if( box1->m1 && hchar && dy>15 && j>=i-dx/32 ) Break; // ~Y in ocr0_vV()
2237 i=loop(bp, 0, 0,dx,cs,0,RI); in ocr0_vV()
2238 i=loop(bp, i, 0,dx,cs,1,RI); i1=i; // thickness in ocr0_vV()
2239 i=loop(bp, 0, 1,dx,cs,0,RI); in ocr0_vV()
2240 i=loop(bp, i, 1,dx,cs,1,RI); if(i>i1) i1=i; // thiggest in ocr0_vV()
2241 i=loop(bp, 0,dy/4,dx,cs,0,RI); in ocr0_vV()
2242 i=loop(bp, i,dy/4,dx,cs,1,RI); i2=i; in ocr0_vV()
2243 i=loop(bp, 0,dy ,dx,cs,0,RI); in ocr0_vV()
2244 i=loop(bp, i,dy ,dx,cs,1,RI); i3=i; // thickness in ocr0_vV()
2245 i=loop(bp, 0,dy-1,dx,cs,0,RI); in ocr0_vV()
2246 i=loop(bp, i,dy-1,dx,cs,1,RI); if(i>i3) i3=i; // thiggest in ocr0_vV()
2248 if( i1-i2 > dx/32+2 in ocr0_vV()
2249 && i3-i2 > dx/32+2 ) Break; // ~serif_Y in ocr0_vV()
2252 if( i1-i2 < dx/32+2 ) /* no serif detected */ in ocr0_vV()
2253 if( num_cross(0,dx-1,dy-1-dy/4,dy-1-dy/4,bp,cs)==1 ){ in ocr0_vV()
2254 j=loop(bp, 0,dy-1-dy/4 ,dx,cs,0,RI); in ocr0_vV()
2255 j=loop(bp, j,dy-1-dy/4 ,dx,cs,1,RI); in ocr0_vV()
2262 if( loop(bp,0 ,dy-1-dy/4,dx,cs,0,RI) in ocr0_vV()
2263 >loop(bp,0 ,dy-1 ,dx,cs,0,RI) ) ad=96*ad/100; in ocr0_vV()
2279 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_rR() local
2283 for(ad=d=100;dy>3 && dx>1;){ // dy>dx, 4x6 font, dx=2 smallest prop-font in ocr0_rR()
2287 || sdata->holes.hole[0].x1 > dx/2 ) // is tolerated, ~Pp in ocr0_rR()
2291 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)<=dx/8 ) Break; in ocr0_rR()
2292 x= loop(bp,dx-1,dy/2,dx,cs,0,LE); if (x<=dx/2) ad=99*ad/100; // ~t in ocr0_rR()
2293 if (loop(bp,dx-1-x/2,0,dy,cs,0,DO)>dy/8) ad=99*ad/100; // ~t in ocr0_rR()
2294 if( dx>4 ) in ocr0_rR()
2295 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)<=dx/8+2 ) Break; // ~v Jun00 in ocr0_rR()
2300 if( y<dy-2*dy/8 && num_cross(0,dx-1,y,y,bp,cs) !=1 ) break; in ocr0_rR()
2301 i1= loop(bp,0 ,y,dx,cs,0,RI); if(i1>3*dx/8) break; in ocr0_rR()
2302 i2= loop(bp,dx-1,y,dx,cs,0,LE); if(i1>i2) break; in ocr0_rR()
2303 if( (i1+(dx-i2 in ocr0_rR()
2304 -1))/2 >= 4*dx/8 ) break; // mass middle should be left in ocr0_rR()
2308 for( x=4*dx/8; x<dx-dx/8; x++ ){ // right upper h-line in ocr0_rR()
2310 if (x<dx-dx/8) Break; in ocr0_rR()
2312 if( loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE)>5*dx/8 // not a C in ocr0_rR()
2313 && get_bw(dx-1-dx/8,dx-1,dy-1-dy/4,dy-1,bp,cs,1) ==1 ) Break; in ocr0_rR()
2315 if( loop(bp, 0,5*dy/8,dx,cs,0,RI)<=dx/8 in ocr0_rR()
2316 && loop(bp,dx-1,5*dy/8,dx,cs,0,LE)>=5*dy/8 in ocr0_rR()
2317 && loop(bp,dx/2, dy-1,dy,cs,0,UP)<=dy/8 ) Break; // ~c in ocr0_rR()
2319 if( loop(bp, 0,3*dy/8,dx,cs,0,RI) in ocr0_rR()
2320 > loop(bp,dx-1,3*dy/8,dx,cs,0,LE)+dx/8 ) { in ocr0_rR()
2321 if( loop(bp, 0, dy/8,dx,cs,0,RI)<dx/8 ) Break; // ~z (broken) in ocr0_rR()
2325 if( loop(bp,0,dy/3,dx,cs,0,RI)>3*dx/4 ) Break; // ~i in ocr0_rR()
2326 if( loop(bp,0,dy/4,dx,cs,0,RI)>3*dx/8 // ~I in ocr0_rR()
2327 && get_bw(0,dx/8,0,dy/4,bp,cs,1) ==1 ) Break; in ocr0_rR()
2328 if( num_cross(0,dx-1,dy/2, dy/2 ,bp,cs)!=1 in ocr0_rR()
2329 && num_cross(0,dx-1,dy/2+1,dy/2+1,bp,cs)!=1 ) Break; // ~n 024a3 in ocr0_rR()
2333 if( num_cross(0,dx-1,y, y ,bp,cs)==2 in ocr0_rR()
2334 && num_cross(0,dx-1,y+1+dy/32,y+1+dy/32,bp,cs)==2 ) break; // ~t in ocr0_rR()
2336 if (loop(bp,dx-1-dx/4,dy-1,dx,cs,0,UP)<dy/4) ad=98*ad/100; // ~f (serif) in ocr0_rR()
2337 if( num_cross(dx-1,dx-1,0,3*dy/4,bp,cs)>1 ) ad=95*ad/100; // ~f in ocr0_rR()
2338 if( num_cross(dx/2 ,dx/2 ,0,dy-1,bp,cs)>2 in ocr0_rR()
2339 && num_cross(dx/2+1,dx/2+1,0,dy-1,bp,cs)>2 ) Break; // ~f in ocr0_rR()
2348 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_rR()
2352 if (loop(bp, dx/2, dy/4,dy,cs,0,DO)>dy/2) Break; // ~C in ocr0_rR()
2353 if (loop(bp, dx/2, 0,dy,cs,0,DO)>dy/8 in ocr0_rR()
2354 && loop(bp, dx/2,dy/16,dx,cs,0,RI)<dx/2 in ocr0_rR()
2357 if( get_bw(x0 , x0+dx/2,y, y,box1->p,cs,1) != 1 ) i=0; in ocr0_rR()
2359 for(i=1,x=x0+3*dx/8;x<=x1-dx/4 && i;x++){ // upper h-line in ocr0_rR()
2362 for(y=0,x=x0+dx/4;x<=x1-dx/4;x++){ // lower h-gap in ocr0_rR()
2369 for(i=1,x=x0+dx/3;x<=x1-dx/8 && i;x++){ // vert crossed 2 ??? in ocr0_rR()
2381 if( get_bw(x1-dx/3,x1,y0,y0+dy/4,box1->p,cs,1) != 1 ) Break; // pixel ru in ocr0_rR()
2382 x=loop(bp,dx-1, dy/4,dx,cs,0,LE); if(x>dx/2) Break; i=x; // ru in ocr0_rR()
2383 x=loop(bp,dx-1, dy/2,dx,cs,0,LE); if(x<=i ) Break; i=x; // rc in ocr0_rR()
2384 x=loop(bp,dx-1, 5*dy/8,dx,cs,0,LE); if(x>i ) i=x; in ocr0_rR()
2385 x=loop(bp,dx-1, 6*dy/8,dx,cs,0,LE); if(x>i ) i=x; in ocr0_rR()
2386 x=loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE); if(x>=i ) Break; // rd in ocr0_rR()
2388 i1=loop(bp,0, dy/4,dx,cs,0,RI); // straight in ocr0_rR()
2389 i2=loop(bp,0, dy/2,dx,cs,0,RI); in ocr0_rR()
2390 i3=loop(bp,0,dy-1-dy/4,dx,cs,0,RI); if( abs(i1+i3-2*i2)>1+dx/16 ) Break; in ocr0_rR()
2392 if (loop(bp,dx-1, dy/2,dx,cs,0,LE)>=loop(bp,dx-1, dy-1,dx,cs,0,LE) in ocr0_rR()
2393 && loop(bp,dx-1,3*dy/16,dx,cs,0,LE)>=loop(bp,dx-1,dy/16,dx,cs,0,LE)+dx/8 ) Break; // ~ff in ocr0_rR()
2395 if (loop(bp,dx-1,dy-2 ,dx,cs,0,LE) in ocr0_rR()
2396 >loop(bp,dx-1,dy-2-dy/8,dx,cs,0,LE)) { in ocr0_rR()
2398 if (loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE)==0 in ocr0_rR()
2399 && loop(bp,dx-1,dy-2-dy/8,dx,cs,0,LE)>0 ) Break; // broken B ?? in ocr0_rR()
2426 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_m() local
2430 for(ad=d=100;dx>4 && dy>3;){ in ocr0_m()
2434 x =loop(bp,dx-1,dy/2,dx,cs,0,LE); if(3*x>dx) Break; // ~K in ocr0_m()
2436 i=num_cross(0,dx-1,y ,y ,bp,cs); if (i!=3) in ocr0_m()
2437 i=num_cross(0,dx-1,y+1,y+1,bp,cs); in ocr0_m()
2442 i=num_cross(0,dx-1,y,y,bp,cs); if (i>2) break; in ocr0_m()
2445 i=num_cross(0,dx-1,y,y,bp,cs); if (i!=3) break; in ocr0_m()
2461 x =loop(bp,0,y,dx ,cs,0,RI); if(x> dx/4) Break; // search 1st v-line in ocr0_m()
2462 x+=loop(bp,x,y,dx-x,cs,1,RI); if(x> dx/2) Break; i1=x; // first gap in ocr0_m()
2463 x+=loop(bp,x,y,dx-x,cs,0,RI); if(x>3*dx/4) Break; i2=x; // 2nd v-line in ocr0_m()
2464 x+=loop(bp,x,y,dx-x,cs,1,RI); if(x>6*dx/8) Break; i3=x; // 2nd gap in ocr0_m()
2465 x+=loop(bp,x,y,dx-x,cs,0,RI); if(x<5*dx/8) Break; i4=x; // 3th v-line in ocr0_m()
2466 if (x>=dx) Break; // missing 3th v-line, ~W in ocr0_m()
2471 i =loop(bp,0,5*dy/8,dx,cs,0,RI); in ocr0_m()
2472 i =loop(bp,i,5*dy/8,dx,cs,1,RI); in ocr0_m()
2473 x =loop(bp,0,dy-dy/32-1,dx,cs,0,RI); in ocr0_m()
2474 x =loop(bp,x,dy-dy/32-1,dx,cs,1,RI); in ocr0_m()
2487 if(i2-i1>i4-i3+dx/16){ in ocr0_m()
2498 if( loop(bp,dx-1,dy/16,dx,cs,0,LE)<2 in ocr0_m()
2499 && loop(bp,dx-1,dy/4 ,dx,cs,0,LE)>3 ) Break; // melted WT in ocr0_m()
2501 x=loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_m()
2502 if (x>2 && loop(bp,dx-1-x/2,0,dy,cs,0,DO)<dy/2) Break; // melt toc in ocr0_m()
2506 if( loop(bp,1, dy/4,dx,cs,0,RI) in ocr0_m()
2507 >loop(bp,0,7*dy/8,dx,cs,0,RI) ) in ocr0_m()
2511 x =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_m()
2512 x+=loop(bp,x,dy/4,dx,cs,1,RI); in ocr0_m()
2536 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_tT() local
2540 for(ad=d=100;dx>2 && dy>3;){ // dx>1 dy>2*dx in ocr0_tT()
2544 i1= loop (bp, dx/8,0,dy,cs,0,DO); // left side in ocr0_tT()
2545 i2= loop (bp,dx-1-dx/8,0,dy,cs,0,DO); // right side in ocr0_tT()
2546 i3= loop (bp, dx/8,i1,dy,cs,1,DO); // left side in ocr0_tT()
2547 i4= loop (bp,dx-1-dx/8,i2,dy,cs,1,DO); // right side in ocr0_tT()
2549 for (x=dx/8;x<dx-1-dx/8;x++) { in ocr0_tT()
2553 } if (x<dx-1-dx/8) Break; in ocr0_tT()
2554 if( get_bw( 0,dx-1, dy/2, dy/2,bp,cs,1) != 1 ) Break; in ocr0_tT()
2555 if( get_bw( 0,(dx-1)/8, dy/2,dy-1-dy/8,bp,cs,1) == 1 ) Break; in ocr0_tT()
2556 if( get_bw( 0,3*dx/16, dy/2,dy-1-dy/4,bp,cs,1) == 1 ) Break; in ocr0_tT()
2557 if( get_bw(dx-1-dx/4,dx-1, dy/2,dy-1-dy/4,bp,cs,1) == 1 ) Break; in ocr0_tT()
2560 i=dx/4+loop(bp,dx/4,y,dx,cs,0,RI); // left side of vertical line in ocr0_tT()
2561 j= loop(bp, i,y,dx,cs,1,RI); // width of vertical line in ocr0_tT()
2562 if (3*j>dx+1 || i+j>=dx || i+j/2<dx/2-1) break; // ~r?7 in ocr0_tT()
2566 i= loop(bp,dx/4,y,dx,cs,0,RI); in ocr0_tT()
2567 i= loop(bp, i,y,dx,cs,1,RI);if(4*i>3*x) break; //~I in ocr0_tT()
2570 i =dx/4+loop(bp,dx/4,dy/4,dx,cs,0,RI);if(i>3*dx/4) Break; // ~7 in ocr0_tT()
2571 i+= loop(bp,i ,dy/4,dx,cs,1,RI);if(i>3*dx/4) Break; in ocr0_tT()
2573 if( num_cross(0,dx-1, dy-1, dy-1,bp,cs) != 1 in ocr0_tT()
2574 && num_cross(0,dx-1, dy-2, dy-2,bp,cs) != 1 ) Break; in ocr0_tT()
2575 if( num_cross(0,dx-1,2*dy/3,2*dy/3,bp,cs) != 1 in ocr0_tT()
2576 && num_cross(0,dx-1,2*dy/3,2*dy/3,bp,cs) != 1 ) Break; in ocr0_tT()
2581 if( loop(bp,0,dy-1,dx,cs,0,RI)<=dx/8) ad=99*ad/100; // ~J in ocr0_tT()
2582 i = loop(bp,0,dy/2,dx,cs,0,RI); in ocr0_tT()
2583 j = loop(bp,i,dy/2,dx,cs,1,RI); in ocr0_tT()
2584 if( 2*i>=dx || 2*(dx-j-i)<i) ad=95*ad/100; // ~J in ocr0_tT()
2593 for(ad=d=100;dx>1 && dy>=box1->m3-box1->m2-1;){ // sometimes no hchar! in ocr0_tT()
2598 i=loop(bp,0,y,dx,cs,0,RI); in ocr0_tT()
2599 i=loop(bp,i,y,dx,cs,1,RI); if( i>x ) { x=i;yb=j=y; } // hor. line in ocr0_tT()
2600 i=num_cross(0,dx-1,y ,y ,bp,cs); in ocr0_tT()
2601 j=num_cross(0,dx-1,y+1,y+1,bp,cs); if (i>2 && j>2) break; in ocr0_tT()
2603 && num_cross(0,dx-1,y ,y ,bp,cs) != 1 in ocr0_tT()
2604 && ( num_cross(0,dx-1,y+dy/8,y+dy/8,bp,cs) != 1 || dy<13) // against noise in ocr0_tT()
2607 if (dy>12 && x>4 && x>dx/2 && yb<=(dy+4)/8) in ocr0_tT()
2608 if ( loop(bp,dx-1-3*x/4,yb,dy,cs,1,UP) in ocr0_tT()
2609 <=loop(bp,dx-1-1*x/4,yb,dy,cs,1,UP)+1 ) in ocr0_tT()
2610 if ( loop(bp,0 ,dy/2,dy,cs,1,UP)>dx/8 ) Break; // ~C in ocr0_tT()
2612 if (x<dx/2) ad=95*ad/100; // unusual small ? in ocr0_tT()
2613 if (x>=dx && 9*dx>=8*dy) { ad=99*ad/100; } // + in ocr0_tT()
2615 i=loop(bp,dx-1,0,dx,cs,0,LE); in ocr0_tT()
2617 if( num_cross(0,dx-1,y ,y ,bp,cs) == 2 in ocr0_tT()
2618 && num_cross(0,dx-1,y+1,y+1,bp,cs) == 2 ) break; in ocr0_tT()
2619 j=loop(bp,dx-1,y,dx,cs,0,LE); if(j-i>1) break; i=j; in ocr0_tT()
2623 i=loop(bp,dx-1,yb,dx,cs,0,LE); in ocr0_tT()
2625 if( loop(bp,dx-1,y,dx,cs,0,LE)>i ) break; in ocr0_tT()
2628 j=loop(bp,0, dy/2,dx,cs,0,RI); in ocr0_tT()
2629 j=loop(bp,j, dy/2,dx,cs,1,RI); i=j; // thickness in ocr0_tT()
2630 j=loop(bp,0, dy/4,dx,cs,0,RI); in ocr0_tT()
2631 j=loop(bp,j, dy/4,dx,cs,1,RI); if (j<i) i=j; // thickness in ocr0_tT()
2632 j=loop(bp,0,3*dy/4,dx,cs,0,RI); in ocr0_tT()
2633 j=loop(bp,j,3*dy/4,dx,cs,1,RI); if (j<i) i=j; // thickness in ocr0_tT()
2636 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)-dx/8 in ocr0_tT()
2637 <=loop(bp,dx-1, yb ,dx,cs,0,LE) ) in ocr0_tT()
2638 if( loop(bp,dx-1, yb ,dx,cs,0,LE)-dx/8 in ocr0_tT()
2639 >=loop(bp,dx-1,yb/2,dx,cs,0,LE) ) Break; // ~1 ??? in ocr0_tT()
2643 for(x=0;j && x<dx-2;x++){ // .. in ocr0_tT()
2648 if( num_cross(0,dx-1,dy-2,dy-2,bp,cs) == 2 in ocr0_tT()
2649 && num_cross(0,dx-1,dy-1,dy-1,bp,cs) == 2 ) Break; // ~* (5er) in ocr0_tT()
2652 && loop(bp, 0, 3*dy/4,dx,cs,0,RI) in ocr0_tT()
2653 >=loop(bp, 0, dy-2,dx,cs,0,RI) in ocr0_tT()
2654 && loop(bp,dx-1, 3*dy/4,dx,cs,0,LE) in ocr0_tT()
2655 <=loop(bp,dx-1, dy-2,dx,cs,0,LE) in ocr0_tT()
2656 && loop(bp,dx-1, 1,dx,cs,0,LE)+dx/16 in ocr0_tT()
2657 <loop(bp,dx-1,3*dy/16,dx,cs,0,LE) in ocr0_tT()
2658 && ( loop(bp, 0, 1,dx,cs,0,RI) in ocr0_tT()
2659 >loop(bp, 0,3*dy/16,dx,cs,0,RI)+dx/16 in ocr0_tT()
2660 || loop(bp,dx-1, 0,dx,cs,0,LE)==0 in ocr0_tT()
2661 || loop(bp,dx-1, 1,dx,cs,0,LE)==0) ) ad=96*ad/100; // ~f Jan02 in ocr0_tT()
2662 if(dx<8 && dy>12){ // thin f's could easily confound with t in ocr0_tT()
2663 x=loop(bp,dx-1,3*dy/16,dx,cs,0,LE); in ocr0_tT()
2665 if (loop(bp,dx-x,0,dy,cs,0,DO)<3*dy/16 in ocr0_tT()
2666 && loop(bp, 0, 3*dy/4,dx,cs,0,RI)+1 in ocr0_tT()
2667 >=loop(bp, 0, dy-2,dx,cs,0,RI) in ocr0_tT()
2668 && loop(bp,dx-1, 3*dy/4,dx,cs,0,LE) in ocr0_tT()
2669 <=loop(bp,dx-1, dy-2,dx,cs,0,LE) ) Break; in ocr0_tT()
2671 if (dx>7) in ocr0_tT()
2672 if( num_cross( 0,dx-1,2*dy/3,2*dy/3,bp,cs) > 1 in ocr0_tT()
2673 && num_cross( 0,dx/2,2*dy/3,2*dy/3,bp,cs) > 0 in ocr0_tT()
2674 && num_cross(dx/2,dx-1,2*dy/3,2*dy/3,bp,cs) > 0 ) in ocr0_tT()
2679 if( num_cross(0,dx-1,3*dy/4, 3*dy/4, bp,cs) >= 2 in ocr0_tT()
2680 && num_cross(0,dx-1,3*dy/4-1,3*dy/4-1,bp,cs) >= 2 ){ in ocr0_tT()
2682 if (loop(bp,dx/2 ,dy-1,dy,cs,0,UP)>dy/4) Break; // ~h in ocr0_tT()
2683 if (loop(bp,dx/2+1,dy-1,dy,cs,0,UP)>dy/4) Break; // ~h in ocr0_tT()
2686 x= loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_tT()
2687 i= loop(bp,dx-1,dy/8,dx,cs,0,LE); in ocr0_tT()
2688 if (i>x && loop(bp,dx-x,0,dy,cs,0,DO)>=dy/2) ad=90*ad/100; /* ~\ */ in ocr0_tT()
2690 x= loop(bp,0, 0,dx,cs,0,RI); in ocr0_tT()
2691 i= loop(bp,0, 1,dx,cs,0,RI); if (i<x) x=i; in ocr0_tT()
2692 i= loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_tT()
2717 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_sS() local
2722 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 (4x6 font) in ocr0_sS()
2725 if( num_cross( dx/2, dx/2,0,dy-1,bp,cs)!=3 in ocr0_sS()
2726 && num_cross(5*dx/8,3*dx/8,0,dy-1,bp,cs)!=3 in ocr0_sS()
2728 if( num_cross(0,dx-1,dy/2 ,dy/2 ,bp,cs)!=1 in ocr0_sS()
2729 && num_cross(0,dx-1,dy/2-1,dy/2-1,bp,cs)!=1 ) Break; in ocr0_sS()
2732 x =loop(bp,0,y,dx,cs,0,RI); if(x>3*dx/8) Break; /* slanted too */ in ocr0_sS()
2733 x +=loop(bp,x,y,dx,cs,1,RI); if(x>5*dx/8) Break; /* fat too */ in ocr0_sS()
2734 i1 =loop(bp,x,y,dx,cs,0,RI); i1=(i1+2*x)/2; // upper center x in ocr0_sS()
2736 x =loop(bp,dx-1 ,y,dx,cs,0,LE); if(x>dx/4) Break; in ocr0_sS()
2737 x +=loop(bp,dx-1-x,y,dx,cs,1,LE); if(dx>5 && dy>7 && x>dx/2) Break; in ocr0_sS()
2738 if (x>3*dx/4) Break; if(x>dx/2) { ad=98*ad/100; MSG({})} in ocr0_sS()
2739 i2 =loop(bp,dx-1-x,y,dx,cs,0,LE); i2=dx-1-(i2+2*x)/2; // upper center x in ocr0_sS()
2743 y=dy/2-loop(bp,dx-1,dy/2,dy/2,cs,1,UP); in ocr0_sS()
2748 x=loop(bp,dx-1,y,dx,cs,0,LE);if(x>dx/8) break; in ocr0_sS()
2759 i1=loop(bp,dx-1,dy-1,dx,cs,0,LE); in ocr0_sS()
2760 i2=loop(bp,dx-1,dy-2,dx,cs,0,LE); in ocr0_sS()
2761 if (i2-i1 >= dx/4) Break; // ~{ 5x7font in ocr0_sS()
2763 i1=loop(bp, 0, 0,dx,cs,0,RI); in ocr0_sS()
2764 i2=loop(bp, 0, 1,dx,cs,0,RI); in ocr0_sS()
2765 if (i2-i1 >= dx/4) Break; // ~} 5x7font in ocr0_sS()
2769 i1=loop(bp, 0,dy/2,dx,cs,0,RI); in ocr0_sS()
2770 i1=loop(bp, i1,dy/2,dx,cs,1,RI); in ocr0_sS()
2771 if (4*i1>=3*dx) ad=97*ad/100; // ~5 7-segment in ocr0_sS()
2773 i1=loop(bp,0, dy/16,dx,cs,0,RI); in ocr0_sS()
2774 i2=loop(bp,0,4*dy/16,dx,cs,0,RI); in ocr0_sS()
2775 i3=loop(bp,0,7*dy/16,dx,cs,0,RI); in ocr0_sS()
2776 if( 2*i2+dx/32 >= i1+i3 ){ in ocr0_sS()
2777 if( 2*i2+dx/32 > i1+i3 || dx>9 ) Break; in ocr0_sS()
2779 i1+=loop(bp,i1, dy/16,dx,cs,1,RI); in ocr0_sS()
2780 i2+=loop(bp,i2,4*dy/16,dx,cs,1,RI); in ocr0_sS()
2781 i3+=loop(bp,i3,7*dy/16,dx,cs,1,RI); in ocr0_sS()
2782 if( 2*i2+dx/32 >= i1+i3 ) Break; in ocr0_sS()
2786 if( num_cross( 0,dx-1,y ,y ,bp,cs)==2 ) in ocr0_sS()
2787 if( num_cross( 0,dx-1,y+1,y+1,bp,cs)==1 ) in ocr0_sS()
2788 if( num_cross( 0,dx/4,y,y,bp,cs)==1 ) break; // ~5 in ocr0_sS()
2790 if ( loop(bp, dx-1,dy-2-dy/32,dx,cs,0,LE) in ocr0_sS()
2791 > loop(bp, 0, 1+dy/32,dx,cs,0,RI) + dx/4 ) Break; // ~5 Dec00 in ocr0_sS()
2796 if ( loop(bp, dx-1,dy-1-dy/32,dx,cs,0,LE) in ocr0_sS()
2797 > loop(bp, 0, 0+dy/32,dx,cs,0,RI) ) ad=99*ad/100; // ~5 in ocr0_sS()
2798 if ( loop(bp, 0,dy-1-dy/32,dx,cs,0,RI) in ocr0_sS()
2799 > loop(bp, dx-1, 0+dy/32,dx,cs,0,LE) ) ad=99*ad/100; // ~5 in ocr0_sS()
2812 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_gG() local
2818 for(ad=d=100;dx>2 && dy>4;){ // min 3x5 in ocr0_gG()
2821 if( get_bw(x0+dx/2, x0+dx/2, y1-dy/2, y1,box1->p,cs,1) != 1 ) Break; in ocr0_gG()
2822 if( get_bw(x1-dx/4, x1 , y1-dy/4, y1,box1->p,cs,1) != 1 ) Break; // ~p in ocr0_gG()
2823 if( get_bw(x0+dx/2, x0+dx/2, y0, y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_gG()
2825 if( num_cross(x0+dx/2, x0+dx/2, y0, y1, box1->p,cs) < 3 ) in ocr0_gG()
2826 if( num_cross(x1-dx/2, x1-dx/2, y0, y1, box1->p,cs) < 3 ) Break; in ocr0_gG()
2832 for(y=dy/4;y<dy;y++) if( num_cross(0,dx-1,y,y,bp,cs)==2 ) break; in ocr0_gG()
2834 if( get_bw(0,dx/2,7*dy/8,7*dy/8,bp,cs,1) != 1 ) Break; // ~q in ocr0_gG()
2835 y =loop(bp,dx/16,0,dy,cs,0,DO); if(y<=dy/8) in ocr0_gG()
2836 y+=loop(bp,dx/16,y,dy,cs,1,DO); if(16*y>=15*dy) Break; // ~B in ocr0_gG()
2845 i=loop(bp,dx-1,y,dy,cs,0,LE); if (i>x) x=i; in ocr0_gG()
2848 if (x<dx/2) { // bad font? or % in ocr0_gG()
2851 if( num_cross(x0,x1+dx/4,y1-dy/4,y1-dy/4,box1->p,cs) > 2 in ocr0_gG()
2852 || num_cross(x0,x1+dx/4,y1-dy/8,y1-dy/8,box1->p,cs) > 2) ad=90*ad/100; in ocr0_gG()
2854 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs) >2 ) ad=99*ad/100; // ~/o in ocr0_gG()
2857 for (y=0;y<dy;y++) for (x=0;x<dx/2;x++) in ocr0_gG()
2858 if ((getpixel(bp,x,y)<cs)!=(getpixel(bp,dx-1-x,y)<cs)) { y=dy+1; break; } in ocr0_gG()
2869 for(ad=d=100;dx>3 && dy>4;){ // min 3x4 in ocr0_gG()
2872 if( get_bw(x0 ,x0+dx/2,y0+dy/3,y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_gG()
2873 if( get_bw(x0+dx/2,x1-dx/4,y0 ,y0+dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_gG()
2874 if( get_bw(x0+dx/2,x0+dx/2,y1-dy/4,y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_gG()
2875 if( get_bw(x0 ,x0+dx/2,y1-dy/3,y1-dy/3,box1->p,cs,1) != 1 ) Break; // ~S in ocr0_gG()
2877 if( get_bw(x1-dx/2,x1,y,y,box1->p,cs,1) == 0 ) break; in ocr0_gG()
2880 if( num_cross(x0+dx/2 , x0+dx/2 , y0, y, box1->p,cs) != 1 in ocr0_gG()
2881 || num_cross(x0+dx/2+1, x0+dx/2+1, y0, y, box1->p,cs) != 1 ) Break; // ~e in ocr0_gG()
2889 if( x<x1-3*dx/8 ) Break; in ocr0_gG()
2891 if( x<x0+dx/2 ){ // not sure, try again (not best) in ocr0_gG()
2895 if( x<x0+dx/2 ) Break; in ocr0_gG()
2902 x=x1-dx/3;y=y1; // follow left C-bow, filter S in ocr0_gG()
2912 if( dx>4 && dy>6){ // no (<[ in ocr0_gG()
2914 if( num_cross(0,dx-1,y,y,bp,cs) == 2 ) i=0; in ocr0_gG()
2917 if( num_cross(0,dx-1,dy-1-y,dy-1-y,bp,cs) == 2 ) i=0; in ocr0_gG()
2921 if( num_cross(0,dx-1,y,y,bp,cs) == 2 ) i=0; in ocr0_gG()
2924 x=loop(bp,0,y,dx,cs,0,RI); // Kante abfallend <=> Z in ocr0_gG()
2925 if( x<i-dx/20 ) break; in ocr0_gG()
2931 x=loop(bp,dx-1 ,y,dx/4,cs,0,LE); in ocr0_gG()
2932 x=loop(bp,dx-1-x,y,dx/2,cs,1,LE); if(x>i){ i=x;i1=y; } in ocr0_gG()
2935 x =loop(bp,0,i1,dx ,cs,0,RI); in ocr0_gG()
2936 x+=loop(bp,x,i1,dx-x,cs,1,RI); // left vertical bow in ocr0_gG()
2937 x+=loop(bp,x,i1,dx-x,cs,0,RI); if (x>=dx) ad=90*ad/100; in ocr0_gG()
2941 for(x=dx/2;x<dx-1 && i;x++) // look for @@ (instead +1 use +delta?) in ocr0_gG()
2956 for(ad=d=100;dx>2 && dy>4;){ // dx>1 dy>2*dx in ocr0_gG()
2959 if( num_cross(x0+dx/2,x0+dx/2,y0,y1,box1->p,cs) != 3 // pre select in ocr0_gG()
2960 && num_cross(x0+dx/4,x1-dx/4,y0,y1,box1->p,cs) != 3 ) Break; in ocr0_gG()
2962 j=loop(box1->p,x0,y,dx,cs,0,RI); in ocr0_gG()
2963 if( j>2 && j>dx/4 && y<y1-3 && j<dx/2 ) // long bow in ocr0_gG()
2964 j+=loop(box1->p,x0+j-2,y+1,dx,cs,0,RI)-2; in ocr0_gG()
2967 if( x<4*dx/8 ) Break; in ocr0_gG()
2968 if( num_cross(x0+dx/2,x1,i ,y1,box1->p,cs) != 1 in ocr0_gG()
2969 && num_cross(x0+dx/2,x1,i+1,y1,box1->p,cs) != 1 ) Break; in ocr0_gG()
2972 if( loop(box1->p,x0,y1 ,dy,cs,0,RI)>dx/3 && in ocr0_gG()
2973 loop(box1->p,x0,y1-1,dy,cs,0,RI)>dx/3) Break; // no q in ocr0_gG()
2975 j=loop(box1->p,x1,y,dx,cs,0,LE); in ocr0_gG()
2977 } if( x>dx/2 ) Break; // no g in ocr0_gG()
2978 i1=loop(bp,dx-1,dy/8 ,dx,cs,0,LE); if(i1>dx/2) Break; in ocr0_gG()
2979 i3=loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE); in ocr0_gG()
2980 i2=loop(bp,dx-1,dy/2 ,dx,cs,0,LE); if(i1+i3<2*i2-dx/8) Break; // konvex in ocr0_gG()
2981 i1=loop(bp,dx-1,dy/4 ,dx,cs,0,LE); if(i1>dx/2) Break; in ocr0_gG()
2982 i3=loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE); in ocr0_gG()
2984 i2=loop(bp,dx-1,y,dx,cs,0,LE); in ocr0_gG()
2985 if(i1+i3-2*i2<-1-dx/16) break; // konvex from right ~g ~3 in ocr0_gG()
2987 x=loop(bp,dx -1,6*dy/8,dx,cs,0,LE); if(x>0){ x--; // robust in ocr0_gG()
2988 y=loop(bp,dx-x-1, dy-1,dy,cs,0,UP); in ocr0_gG()
2993 if( num_cross(x0,x1+dx/4,y1-dy/4,y1-dy/4,box1->p,cs) > 2 in ocr0_gG()
2994 || num_cross(x0,x1+dx/4,y1-dy/8,y1-dy/8,box1->p,cs) > 2) ad=90*ad/100; in ocr0_gG()
3012 int dx=x1-x0+1, dy=y1-y0+1, /* size */ in ocr0_xX() local
3019 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_xX()
3030 if (aa[3][0]-aa[0][0]<dx/2) Break; in ocr0_xX()
3031 if (aa[2][0]-aa[1][0]<dx/2) Break; in ocr0_xX()
3044 if (abs(aa[0][0]+aa[1][0]+aa[2][0]+aa[3][0]-4*x)>(dx+2)) Break; in ocr0_xX()
3050 if (x-x0<dx/8) Break; in ocr0_xX()
3051 if (x-x0<dx/4) ad=99*ad/100; in ocr0_xX()
3069 if (abs(aa[0][0]+aa[1][0]+aa[2][0]+aa[3][0]-4*x)>(dx+2)) Break; in ocr0_xX()
3089 if (abs(aa[0][0]+aa[1][0]+aa[2][0]+aa[3][0]-4*x)>(dx+2)) Break; in ocr0_xX()
3095 if (dx-(x-x0)<dx/8) Break; in ocr0_xX()
3096 if (dx-(x-x0)<dx/4) ad=99*ad/100; in ocr0_xX()
3114 if (abs(aa[0][0]+aa[1][0]+aa[2][0]+aa[3][0]-4*x)>(dx+2)) Break; in ocr0_xX()
3127 if (box1->frame_vector[i3][0] - box1->frame_vector[i1][0] > dx/2) Break; in ocr0_xX()
3136 for(ad=d=99;dx>4 && dy>4;){ // min 3x4 in ocr0_xX()
3139 if( get_bw(x0,x0+dx/4,y0+dy/2,y0+dy/2,box1->p,cs,1) != 0 ) Break; in ocr0_xX()
3140 if( get_bw(x1-dx/4,x1,y0+dy/2,y0+dy/2,box1->p,cs,1) != 0 ) Break; in ocr0_xX()
3141 if( num_cross(x0+dx/4,x1-dx/4,y0+dy/2,y0+dy/2, box1->p,cs) != 1 ) Break; in ocr0_xX()
3161 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_yY() local
3166 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_yY()
3170 if( num_cross(0,dx-1,dy/8,dy/8,bp,cs) < 2 in ocr0_yY()
3171 && num_cross(0,dx-1, 1, 1,bp,cs) < 2 ) Break; in ocr0_yY()
3172 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs) != 1 in ocr0_yY()
3173 && num_cross(0,dx-1,dy-2,dy-2,bp,cs) != 1 ) Break; in ocr0_yY()
3174 if( num_cross(dx-1,dx-1,0,dy-1,bp,cs) != 1 in ocr0_yY()
3175 && num_cross(dx-2,dx-2,0,dy-1,bp,cs) != 1 ) Break; in ocr0_yY()
3176 if( num_cross(dx/3,dx/3,dy/4,dy-1,bp,cs) != 2 in ocr0_yY()
3177 && num_cross(dx/2,dx/2,dy/4,dy-1,bp,cs) != 2 ) Break; in ocr0_yY()
3178 for(yc=y=0,xc=x=dx/4;x<dx-dx/4;x++){ // search deepest point in ocr0_yY()
3181 ya=dy/8; xa=xc-loop(bp,xc,ya,dx,cs,0,LE); if(xa< 0) Break; in ocr0_yY()
3182 yb=dy/8; xb=xc+loop(bp,xc,yb,dx,cs,0,RI); if(xb>=dx) Break; in ocr0_yY()
3184 if( num_cross(xc,dx-1,y,y,bp,cs) != 1 ) break; in ocr0_yY()
3187 yd=dy-1-dy/8;xd=dx-1-loop(bp,dx-1,yd,dx,cs,0,LE); in ocr0_yY()
3195 if(xd>6*dx/8) ad=99*ad/100; // why this??? in ocr0_yY()
3196 if (loop(bp,dx-1,dy-1,dx,cs,0,LE)<1) Break; in ocr0_yY()
3208 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_yY()
3212 if( get_bw(x0,x0+4*dx/8,y0+dy/8,y0+dy/8,box1->p,cs,1) != 1 ) Break; in ocr0_yY()
3214 if( get_bw(x0,x0+3*dx/8,y0+dy/8,y0+dy/8,box1->p,cs,1) != 1 ) Break; in ocr0_yY()
3216 if( num_cross(0,dx-1,dy/8,dy/8,bp,cs) != 2 in ocr0_yY()
3217 && num_cross(0,dx-1, 1, 1,bp,cs) != 2 ) Break; in ocr0_yY()
3218 if( num_cross(dx/2,dx/2,0, 1,bp,cs) != 0 ) Break; in ocr0_yY()
3219 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs) != 1 in ocr0_yY()
3220 && num_cross(0,dx-1,dy-2,dy-2,bp,cs) != 1 ) Break; in ocr0_yY()
3221 if( num_cross(dx-1,dx-1,0,dy-1,bp,cs) != 1 in ocr0_yY()
3222 && num_cross(dx-2,dx-2,0,dy-1,bp,cs) != 1 in ocr0_yY()
3223 && num_cross(dx-dx/8-1,dx-dx/8-1,0,dy-1,bp,cs) != 1 ) Break; in ocr0_yY()
3224 if( loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE)+dx/8+1 // Jul00 in ocr0_yY()
3225 < loop(bp, 0,dy-1-dy/8,dx,cs,0,RI) ) Break; in ocr0_yY()
3226 for(y=0,x=dx/4;x<dx-dx/4;x++){ // search lowest point in ocr0_yY()
3229 for(xc=xb=xa=dx,yc=yb=ya=y=0;y<dy/4;y++){ in ocr0_yY()
3230 x =loop(bp, 0 , y,dx,cs,0,RI); if(x<xa){ xa=x;ya=y; } in ocr0_yY()
3231 x =loop(bp,dx-1 , y,dx,cs,0,LE); if(x<xb){ xb=x;yb=y; } in ocr0_yY()
3234 for(i=dx,yc=y=dy/4;y<3*dy/4;y++){ in ocr0_yY()
3235 if( num_cross(0,dx-1,y,y,bp,cs) < 2 ) break; in ocr0_yY()
3236 x =loop(bp,dx-1 ,y,dx,cs,0,LE); in ocr0_yY()
3237 x+=loop(bp,dx-1-x,y,dx,cs,1,LE); in ocr0_yY()
3238 j =loop(bp,dx-1-x,y,dx,cs,0,LE); if(j<=i){ i=j;yc=y;xc=dx-1-x-j/2; } in ocr0_yY()
3241 xa+= loop(bp,xa ,ya,dx,cs,1,RI)/2; in ocr0_yY()
3242 xb=dx-1-loop(bp,dx-1,yb,dx,cs,1,LE)/2; in ocr0_yY()
3243 yd=dy-1-dy/8;xd=dx-1-loop(bp,dx-1,yd,dx,cs,0,LE); if(xd>6*dx/8) Break; in ocr0_yY()
3245 for (i=0,x=dx-1;i<dy/4;i++) { in ocr0_yY()
3246 j=loop(bp,dx-1,dy-1-i,dx,cs,0,LE); in ocr0_yY()
3247 if (j>x+dx/16+1) break; /* detect serif */ in ocr0_yY()
3249 } if (i<dy/4) xd-=loop(bp,xd,yd,dx,cs,1,LE)/2; in ocr0_yY()
3264 xb+=loop(bp,xb,yb,dx/4,cs,1,RI)-1; in ocr0_yY()
3275 { if (dx>4) { Break; } else ad=ad*98/100; } // ~V in ocr0_yY()
3276 xa=loop(bp,0,dy/8,dx,cs,0,RI); in ocr0_yY()
3277 xb=loop(bp,0,dy/2,dx,cs,0,RI); in ocr0_yY()
3278 xc=loop(bp,0,dy-1,dx,cs,0,RI); in ocr0_yY()
3299 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_zZ() local
3305 for(ad=d=100;dx>3 && dy>3;){ // dy>dx in ocr0_zZ()
3316 if (aa[3][0]-aa[0][0]<dx/2) Break; in ocr0_zZ()
3317 if (aa[2][0]-aa[1][0]<dx/2) Break; in ocr0_zZ()
3324 if (2*dx<dy) ad=99*ad/100; in ocr0_zZ()
3339 if (x-x0 < 3*dx/8) Break; in ocr0_zZ()
3340 if (x-aa[0][0]<=dx/4) Break; // ~lI in ocr0_zZ()
3341 if (x-aa[0][0]<=dx/3) ad=98*ad/100; // ~lI in ocr0_zZ()
3342 if (x-aa[0][0]<=dx/2) ad=99*ad/100; // ~lI in ocr0_zZ()
3344 i3=nearest_frame_vector(box1,aa[0][3],aa[1][3], x1+2*dx, (y0+y1)/2); in ocr0_zZ()
3349 && box1->frame_vector[i3][0]-x>=-dx/8) ad=98*ad/100; in ocr0_zZ()
3373 i4=nearest_frame_vector(box1,aa[2][3],aa[0][3], x1+dx, y0); in ocr0_zZ()
3374 i5=nearest_frame_vector(box1,aa[2][3],aa[0][3], x1, y0-dx); in ocr0_zZ()
3377 if (d>2*sq(dx/8+1)) break; in ocr0_zZ()
3389 if (x-x0 > 5*dx/8) Break; in ocr0_zZ()
3390 if (aa[2][0]-x<=dx/4) Break; // ~lI in ocr0_zZ()
3391 if (aa[2][0]-x<=dx/3) ad=98*ad/100; // ~lI in ocr0_zZ()
3392 if (aa[2][0]-x<=dx/2) ad=99*ad/100; // ~lI in ocr0_zZ()
3399 -box1->frame_vector[i2][0]<=dx/8) Break; /* nonsignificant distance */ in ocr0_zZ()
3424 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_wW() local
3429 for(ad=d=100;dx>3 && dy>3;){ // dy<=dx in ocr0_wW()
3439 for(y=dy/8;y< dy/2;y++) if( num_cross(0,dx-1,y,y,bp,cs)< 2 ) break; in ocr0_wW()
3442 if (dx>4) { /* 4x6 is to small */ in ocr0_wW()
3444 if( num_cross(0,dx-1,y,y,bp,cs)==2 ) break; in ocr0_wW()
3448 t1=loop(bp,0 ,dy/4,dx,cs,0,RI); in ocr0_wW()
3449 t1=loop(bp,t1,dy/4,dx,cs,1,RI); // thickness of line? in ocr0_wW()
3450 for(i=j=0 ;y> dy/4;y--) if( num_cross(0,dx-1,y,y,bp,cs)==4 ) i++; in ocr0_wW()
3451 else if( num_cross(0,dx-1,y,y,bp,cs)>=3 ) j++; in ocr0_wW()
3453 if(i+j==0 && (dy>6 || dx>4)) Break; in ocr0_wW()
3454 if(i+j==0 && dx<=4){ in ocr0_wW()
3456 -loop(bp,dx-2,dy-1,dy,cs,0,UP))>dy/8+1) Break; // 4x6 N in ocr0_wW()
3459 || ( loop(bp,dx-2, 0,dy,cs,0,DO)>=dy-2 in ocr0_wW()
3460 && loop(bp,dx-1,dy-1,dy,cs,0,UP)>0)) Break; // 4x6 UV in ocr0_wW()
3464 if( num_cross(0,dx-1, 1, 1,bp,cs)< 2 in ocr0_wW()
3465 && num_cross(0,dx-1,dy/16,dy/16,bp,cs)< 2 ) Break; in ocr0_wW()
3466 x =loop(bp,0 ,yb,dx,cs,0,RI); in ocr0_wW()
3467 xb=loop(bp,x ,yb,dx,cs,1,RI);xb=x+xb/2; if(xb>dx/2) Break; in ocr0_wW()
3468 x =loop(bp,dx-1 ,yb,dx,cs,0,LE); in ocr0_wW()
3469 xd=loop(bp,dx-1-x,yb,dx,cs,1,LE);xd=dx-1-x-xd/2;if(xd<3*dx/8) Break; in ocr0_wW()
3472 if(dx>4 && !y) Break; in ocr0_wW()
3475 if (dy>6 || dx>4) { // ~4x6 font in ocr0_wW()
3478 if( num_cross(xc,dx-1,ya-y ,ya-y ,bp,cs)!= 2 in ocr0_wW()
3479 && num_cross(xc,dx-1,ya-y/2,ya-y/2,bp,cs)!= 2 ) Break; in ocr0_wW()
3482 x =loop(bp,0 ,1 ,dx,cs,0,RI); in ocr0_wW()
3483 xa=loop(bp,x ,1 ,dx,cs,1,RI); in ocr0_wW()
3490 x =loop(bp,dx-1 ,1 ,dx,cs,0,LE); in ocr0_wW()
3491 xe=loop(bp,dx-1-x,1 ,dx,cs,1,LE);xe=dx-1-x-xe/2; in ocr0_wW()
3494 if (ya<dy/2 && xc<dx/2) ad=95*ad/100; /* ~N */ in ocr0_wW()
3495 i= loop(bp,xa ,1 ,dx,cs,1,RI); in ocr0_wW()
3505 && get_line2(xd,yb,dx-1 ,1+dy/8 ,bp,cs,100)<95 // round w in ocr0_wW()
3506 && get_line2(xd,yb,xe+dx/20,1+dy/16,bp,cs,100)<95 ) Break; in ocr0_wW()
3511 x=loop(bp,dx-1,y,dx,cs,0,LE); if( x>i ) i=x; if( x<i-2 ) break; in ocr0_wW()
3522 for(ad=d=100;dx>3 && dy>3;){ // dy<=dx 4x6font (like a H with fat bar) in ocr0_wW()
3526 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs)<2 ) Break; in ocr0_wW()
3527 if( num_cross(0,dx-1,dy/8,dy/8,bp,cs)<2 ) handwritten=40; in ocr0_wW()
3528 if( num_cross(0,dx-1,dy/4,dy/4,bp,cs)<2 ) handwritten=80; in ocr0_wW()
3530 if( num_cross(0,dx-1,y,y,bp,cs)==3 ) i++; in ocr0_wW()
3536 if( num_cross(0,dx-1,y,y,bp,cs)==3 ) break; in ocr0_wW()
3538 x =loop(bp,0 ,yb,dx,cs,0,RI); in ocr0_wW()
3539 x+=loop(bp,x ,yb,dx,cs,1,RI); if(x>dx/2) Break; in ocr0_wW()
3540 xb=loop(bp,x ,yb,dx,cs,0,RI);xb=x+xb/2; if(xb>dx/2) Break; in ocr0_wW()
3541 x =loop(bp,dx-1 ,yb,dx,cs,0,LE); in ocr0_wW()
3542 x+=loop(bp,dx-1-x,yb,dx,cs,1,LE); in ocr0_wW()
3543 xd=loop(bp,dx-1-x,yb,dx,cs,0,LE);xd=dx-1-x-xd/2;if(xd<3*dx/8) Break; in ocr0_wW()
3553 x=loop(bp,dx-1,y,dx,cs,0,LE); if( x>i ) i=x; if( x<i-2 ) break; in ocr0_wW()
3568 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_aA() local
3572 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_aA()
3576 if( get_bw(dx/2 ,dx/2 ,dy-1-dy/8,dy-1,bp,cs,1) == 1 in ocr0_aA()
3577 && get_bw(dx/2-1,dx/2-1,dy-1-dy/8,dy-1,bp,cs,1) == 1 ) Break; // ~B in ocr0_aA()
3581 if (num_cross(0,dx-1,ya,ya,bp,cs)==0) break; in ocr0_aA()
3583 if( num_cross(0,dx-1,ya+ 1 ,ya+ 1 ,bp,cs)!=1 // 600dpi in ocr0_aA()
3584 && num_cross(0,dx-1,ya+ dy/8 ,ya+ dy/8 ,bp,cs)!=1 in ocr0_aA()
3585 && num_cross(0,dx-1,ya+ dy/16 ,ya+ dy/16 ,bp,cs)!=1 in ocr0_aA()
3586 && num_cross(0,dx-1,ya+ dy/8+1,ya+ dy/8+1,bp,cs)!=1 ) Break; in ocr0_aA()
3587 if( num_cross(0,dx-1, 7*dy/8 , 7*dy/8 ,bp,cs)!=2 in ocr0_aA()
3588 && num_cross(0,dx-1, 7*dy/8-1, 7*dy/8-1,bp,cs)!=2 ) Break; in ocr0_aA()
3589 if ( num_cross( 0,dx/8,ya+dy/8,ya+0,bp,cs)>0 ) Break; // ~R in ocr0_aA()
3590 for(y=ya+dy/8;y<ya+dy/2;y++) if( num_cross(0,dx-1,y,y,bp,cs) > 1 ) break; in ocr0_aA()
3594 x =loop(bp,0,i1,dx,cs,0,RI); if(x>3*dx/4) Break; in ocr0_aA()
3595 x+=loop(bp,x,i1,dx,cs,1,RI); if(x>3*dx/4) Break; i2=x; in ocr0_aA()
3596 x+=loop(bp,x,i1,dx,cs,0,RI); if(x<3*dx/8) Break; i2=(x+i2)/2; in ocr0_aA()
3608 for(x=dx/3;x<2*dx/3;x++){ in ocr0_aA()
3616 if( get_bw(dx-1-dx/4, dx-1, dy-1-dy/4, dy-1, bp,cs,1) != 1 ) Break; in ocr0_aA()
3618 i1=loop(bp,dx-1,ya+ (dy-ya)/4,dx,cs,0,LE); in ocr0_aA()
3619 i2=loop(bp,dx-1,ya+ (dy-ya)/2,dx,cs,0,LE); in ocr0_aA()
3620 i3=loop(bp,dx-1,dy-1-(dy-ya)/4,dx,cs,0,LE); in ocr0_aA()
3621 if( 2*i2-dx/8>i1+i3 ) ad=99*ad/100; /* 6*8 font */ in ocr0_aA()
3622 if( 2*i2+dx/4<i1+i3 || 2*i2-dx/4>i1+i3 ) Break; in ocr0_aA()
3624 i1=loop(bp,0 ,ya+ (dy-ya)/4,dx,cs,0,RI); // linke senkr. linie in ocr0_aA()
3625 i2=loop(bp,0 ,ya+ (dy-ya)/2,dx,cs,0,RI); in ocr0_aA()
3626 i3=loop(bp,0 ,dy-1-(dy-ya)/4,dx,cs,0,RI); in ocr0_aA()
3627 if( 2*i2-dx/8>i1+i3 ) ad=98*ad/100; /* 6*8 font */ in ocr0_aA()
3628 if( 2*i2+dx/4<i1+i3 || 2*i2-dx/4>i1+i3 || i1<i3) Break; in ocr0_aA()
3631 for(i3=dx,y=ya+(dy-ya)/4;y<7*dy/8;y++){ // increasing width in ocr0_aA()
3632 i1=loop(bp, 0, y,dx,cs,0,RI); in ocr0_aA()
3633 i2=loop(bp,dx-1, y,dx,cs,0,LE); in ocr0_aA()
3634 if(i1+i2>i3+dx/16) break; if( i1+12<i3 ) i3=i1+i2; in ocr0_aA()
3636 if ( loop(bp, 0,dy-1-dy/8,dx,cs,0,RI) in ocr0_aA()
3637 -loop(bp, 0,dy/2 ,dx,cs,0,RI)>0) ad=97*ad/100; // italic-a in ocr0_aA()
3646 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_aA()
3649 if( get_bw(x0 , x0+dx/2, y1-dy/3, y1-dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3650 if( get_bw(x1-dx/3, x1 , y0+dy/3, y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3651 if( get_bw(x1-dx/3, x1 , y0+dy/4, y0+dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3652 if( get_bw(x0+dx/2, x0+dx/2, y1-dy/3, y1, box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3653 if( get_bw(x0+dx/2, x0+dx/2, y0 , y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3654 if( get_bw(x0+dx/3, x1-dx/3, y0 , y0 ,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3655 if( get_bw(x0+dx/4, x1-dx/2, y1 , y1 ,box1->p,cs,1) != 1 ) in ocr0_aA()
3656 if( get_bw(x0+dx/4, x1-dx/3, y1-1 , y1-1 ,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3658 if( get_bw(x0+dx/8, x0+dx/8, y0+dy/2, y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3659 if( loop(bp,3*dx/8,0,dy,cs,0,DO) > 3*dy/16 ) Break; // ~d in ocr0_aA()
3660 if( num_cross(0,dx-1,dy/4 ,dy/4 , bp,cs) >2 // ~glued am != an in ocr0_aA()
3661 && num_cross(0,dx-1,dy/4+1,dy/4+1, bp,cs) >2 ) Break; in ocr0_aA()
3663 for( x=dx/4;x<dx-dx/4;x++ ){ // ar in ocr0_aA()
3666 } if( x<dx-dx/4 ) Break; in ocr0_aA()
3668 for(i=dx/8+1,x=dx/4;x<=dx-1-dx/4 && i;x++){ in ocr0_aA()
3672 i1=loop(bp,0, dy/8,dx,cs,0,RI); in ocr0_aA()
3673 i3=loop(bp,0,3*dy/4,dx,cs,0,RI); in ocr0_aA()
3675 i2=loop(bp,0,y,dx,cs,0,RI);if(2*i2>i1+i3+1) break; in ocr0_aA()
3678 for(x=3*dx/4;x<dx;x++) in ocr0_aA()
3680 if( x==dx ) Break; in ocr0_aA()
3687 i =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_aA()
3688 i =loop(bp,i,dy/4,dx,cs,1,RI); in ocr0_aA()
3689 if(i<dx/4+1) Break; // fat a in ocr0_aA()
3690 i =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_aA()
3691 i+=loop(bp,i,dy/4,dx,cs,1,RI); in ocr0_aA()
3693 if( num_cross(0,dx-1,y,y, bp,cs) !=2 ) break; in ocr0_aA()
3694 x =loop(bp,0,y-1,dx,cs,0,RI); in ocr0_aA()
3695 x+=loop(bp,x,y-1,dx,cs,1,RI); in ocr0_aA()
3699 for (y=0;y<dy;y++) for (x=0;x<dx/2;x++) in ocr0_aA()
3700 if ((getpixel(bp,x,y)<cs)!=(getpixel(bp,dx-1-x,y)<cs)) { y=dy+1; break; } in ocr0_aA()
3710 for(ad=d=100;dx>3 && dy>3;){ // min 4x4 in ocr0_aA()
3713 if( get_bw(x0 , x0+dx/2,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3714 if( get_bw(x1-dx/2 , x1 ,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3715 if( get_bw(x0+dx/2 , x0+dx/2,y1-dy/2 , y1, box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3716 if( get_bw(x0+dx/2 , x0+dx/2,y0 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3717 if( get_bw(x0+dx/3 , x0+dx/3,y0 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3718 i = loop(bp,dx/2, 0 ,dy,cs,0,DO); if (i>dy/4) Break; in ocr0_aA()
3719 i+= loop(bp,dx/2, i ,dy,cs,1,DO); if (i>dy/2) Break; in ocr0_aA()
3720 i = loop(bp,dx/2, i ,dy,cs,0,DO); if (i<dy/4) Break; in ocr0_aA()
3723 if( num_cross(x0+dx/2,x0+dx/2,y0 , y1 ,box1->p,cs) != 2 ) Break; in ocr0_aA()
3724 if( num_cross(x0+dx/3,x1-dx/3,y0 , y0 ,box1->p,cs) != 1 ) // AND in ocr0_aA()
3725 if( num_cross(x0+dx/3,x1-dx/3,y0+1 , y0+1 ,box1->p,cs) != 1 ) Break; in ocr0_aA()
3726 i = loop(bp,dx/2,dy-1 ,dy,cs,0,UP); if (i>dy/3) Break; in ocr0_aA()
3727 y = i+loop(bp,dx/2,dy-1-i,dy,cs,1,UP); if (i>dy/2) Break; in ocr0_aA()
3730 if( num_cross(x0+dx/2-1,x1,y1 ,y1 ,box1->p,cs) < 2 /* 4x6font */ in ocr0_aA()
3731 && num_cross(x0+dx/2-1,x1,y1-i,y1-i ,box1->p,cs) < 2 /* 2 or 3 */ in ocr0_aA()
3732 && num_cross(x0+dx/2-1,x1,y1-y,y1-y ,box1->p,cs) < 2 ) in ocr0_aA()
3733 { if (loop(bp, 0,dy-1-dy/16,dx,cs,0,RI) in ocr0_aA()
3734 <4*loop(bp,dx-1,dy-1-dy/16,dx,cs,0,LE)) { Break;} in ocr0_aA()
3751 if( loop(bp,dx-1,dy-1,x1-x0,cs,0,LE)> dx/4 in ocr0_aA()
3752 && loop(bp,dx-1,dy-2,x1-x0,cs,0,LE)> (dx+4)/8 ) ad=97*ad/100; in ocr0_aA()
3754 x=loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE); in ocr0_aA()
3755 i=loop(bp,dx-1, dy/4,dx,cs,0,LE); if (abs(x-i)>dx/4) Break; in ocr0_aA()
3757 for( x=dx/4;x<dx-dx/4;x++ ){ // ar in ocr0_aA()
3760 } if( x<dx-dx/4 ) Break; in ocr0_aA()
3764 if( loop(bp,dx-1, 0,y1-y0,cs,0,DO)> dy/4 in ocr0_aA()
3765 && loop(bp,dx-1,dy-1,y1-y0,cs,0,UP)> dy/4 ) Break; // ~o in ocr0_aA()
3766 if( loop(bp,dx/2,dy-1,y1-y0,cs,0,UP)> dy/4 ) Break; // ~q in ocr0_aA()
3776 for(ad=d=100;dx>2 && dy>4;){ // min 3x4 in ocr0_aA()
3780 if( get_bw(dx/2,dx/2,dy-1-dy/8,dy-1,bp,cs,1) == 1 ) break; // ~B in ocr0_aA()
3781 if( num_cross(0,dx-1, 1 , 1 ,bp,cs)!=1 // 600dpi in ocr0_aA()
3782 && num_cross(0,dx-1, dy/8 , dy/8 ,bp,cs)!=1 in ocr0_aA()
3783 && num_cross(0,dx-1, dy/16 , dy/16 ,bp,cs)!=1 in ocr0_aA()
3784 && num_cross(0,dx-1, dy/8+1, dy/8+1,bp,cs)!=1 ) break; in ocr0_aA()
3785 if( num_cross(0,dx-1, dy-1 , dy-1 ,bp,cs)!=1 ) break; in ocr0_aA()
3786 if( num_cross(0,dx-1, dy/4 , dy/4 ,bp,cs)!=2 in ocr0_aA()
3787 && num_cross(0,dx-1, dy/3 , dy/3 ,bp,cs)!=2 ) break; in ocr0_aA()
3788 if ( num_cross( 0,dx/8,dy/8, 0,bp,cs)>0 ) break; // ~R in ocr0_aA()
3789 for(y=dy/8;y<dy/2;y++) if( num_cross(0,dx-1,y,y,bp,cs) > 1 ) break; in ocr0_aA()
3793 x =loop(bp,0,i1,dx,cs,0,RI); if(x>3*dx/4) break; in ocr0_aA()
3794 x+=loop(bp,x,i1,dx,cs,1,RI); if(x>3*dx/4) break; i2=x; in ocr0_aA()
3795 x+=loop(bp,x,i1,dx,cs,0,RI); if(x<3*dx/8) break; i2=(x+i2)/2; in ocr0_aA()
3805 for(x=dx/3;x<2*dx/3;x++){ in ocr0_aA()
3813 if( get_bw(dx-1-dx/4, dx-1, dy-1-dy/4, dy-1, bp,cs,1) != 1 ) break; in ocr0_aA()
3816 if ( num_cross( 0,dx/8,dy/6, 0,bp,cs)>0 ) break; in ocr0_aA()
3817 if ( num_cross(dx-1-dx/4,dx-1, 0,dy/6,bp,cs)>0 ) break; in ocr0_aA()
3819 i1=loop(bp,dx-1, dy/4,dx,cs,0,LE); in ocr0_aA()
3820 i2=loop(bp,dx-1, dy/2,dx,cs,0,LE); in ocr0_aA()
3821 i3=loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE); in ocr0_aA()
3822 if( 2*i2+dx/4<i1+i3 || 2*i2-dx/8>i1+i3 ) break; in ocr0_aA()
3824 i1=loop(bp,0 , dy/4,dx,cs,0,RI); // linke senkr. linie in ocr0_aA()
3825 i2=loop(bp,0 , dy/2,dx,cs,0,RI); in ocr0_aA()
3826 i3=loop(bp,0 ,dy-1-dy/4,dx,cs,0,RI); in ocr0_aA()
3827 if( 2*i2+dx/4<i1+i3 || 2*i2-dx/8>i1+i3 || i1<i3) break; in ocr0_aA()
3830 for(i3=dx,y=dy/4;y<6*dy/8;y++){ // increasing width in ocr0_aA()
3831 i1=loop(bp, 0, y,dx,cs,0,RI); in ocr0_aA()
3832 i2=loop(bp,dx-1, y,dx,cs,0,LE); in ocr0_aA()
3833 if(i1+i2>i3+dx/16) break; if( i1+12<i3 ) i3=i1+i2; in ocr0_aA()
3849 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_cC() local
3854 for(ad=d=100;dx>2 && dy>2;){ // min 3x4 in ocr0_cC()
3857 if( get_bw(x0 , x0+dx/3,y0+dy/2, y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_cC()
3858 if( get_bw(x0+dx/2, x0+dx/2,y1-dy/3, y1, box1->p,cs,1) != 1 ) Break; in ocr0_cC()
3859 if( get_bw(x0+dx/2, x0+dx/2,y0 , y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_cC()
3863 if( get_bw(x0+dx/2,x1,y,y,box1->p,cs,1) == 0 ) break; in ocr0_cC()
3867 t1=loop(bp, 0,dy/2,dx,cs,0,RI); in ocr0_cC()
3868 t1=loop(bp,t1,dy/2,dx,cs,1,RI); in ocr0_cC()
3869 if (t1>dx/2) Break; in ocr0_cC()
3871 for(y=i1,i2=0,x=x0+dx/2;x<x0+6*dx/8;x++){ in ocr0_cC()
3872 i=y-1+loop(box1->p,x0+dx/2,i1,dy,cs,0,DO); in ocr0_cC()
3876 i3=y+1-loop(box1->p,x0+5*dx/8,i1,dy,cs,0,UP); in ocr0_cC()
3877 i =y+1-loop(box1->p,x0+4*dx/8,i1,dy,cs,0,UP); if(i<i3) i3=i; in ocr0_cC()
3881 if( get_bw(x0+dx/2,x1,y,y,box1->p,cs,1) == 1 ) break; in ocr0_cC()
3884 if( num_cross(x1-dx/4,x1-dx/4,i2,y0,box1->p,cs) < 1 ) Break; // ~L in ocr0_cC()
3885 if (loop(box1->p,x0,y0+3*dy/4,dx,cs,0,RI)>dx/16) in ocr0_cC()
3886 if( num_cross(x0+dx/2,x1,i3 ,y1,box1->p,cs) < 1 in ocr0_cC()
3887 && num_cross(x0+dx/2,x1,y1-dy/4,y1,box1->p,cs) < 1 ) Break; // ~r in ocr0_cC()
3890 for(x=dx/2;x<dx-1 && i;x++) // look for @@ (instead +1 use +delta?) in ocr0_cC()
3899 i=loop(bp,0,dy/2,dx,cs,0,RI); in ocr0_cC()
3900 for(y=0;y<dy;y++)if( loop(bp,0,y,dx,cs,0,RI)<i-1-dx/32 ) break; in ocr0_cC()
3903 for(i5=0,i4=dx,y=dy/2;y>=dy/4;y--){ in ocr0_cC()
3904 x =loop(bp,0,y,dx,cs,0,RI); in ocr0_cC()
3905 x+=loop(bp,x,y,dx,cs,1,RI); if(x>i5) i5=x; in ocr0_cC()
3906 i =loop(bp,x,y,dx,cs,0,RI); if(i<i4) i4=i; in ocr0_cC()
3907 if( i5<x-dx/32 && i>i4+dx/32 ) break; // unusual for c, more a bad e? in ocr0_cC()
3911 x= loop(bp,0,dy/2,dx,cs,0,RI); in ocr0_cC()
3912 x=x +loop(bp,x,dy/2,dx,cs,1,RI); in ocr0_cC()
3914 i=x +loop(bp,x,y,dx,cs,1,RI); in ocr0_cC()
3915 i=i +loop(bp,i,y,dx,cs,0,RI); in ocr0_cC()
3921 if( dy>16 && dy>3*dx && hchar ){ // ~[ in ocr0_cC()
3922 x= loop(bp,0, dy/16,dx,cs,0,RI); in ocr0_cC()
3923 x=+loop(bp,0,dy-1-dy/16,dx,cs,0,RI); in ocr0_cC()
3924 i= loop(bp,0, dy/2 ,dx,cs,0,RI)*2; in ocr0_cC()
3926 if( num_cross(0,dx-1,dy/4,dy/4,bp,cs) < 2 ) Break; in ocr0_cC()
3934 x =loop(bp, 0,dy/2,dx,cs,0,RI); in ocr0_cC()
3935 i =loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_cC()
3936 if( (i<dx/2 || i<3) && hchar && dy>7 ) in ocr0_cC()
3937 if( loop(bp, 0,7*dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_cC()
3938 && loop(bp, 0, dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_cC()
3939 && loop(bp,dx-1,dy-1-dy/ 8,dx,cs,0,LE) in ocr0_cC()
3940 > loop(bp,dx-1,dy-1-dy/16,dx,cs,0,LE) in ocr0_cC()
3941 && loop(bp,dx-1, dy/ 8,dx,cs,0,LE) in ocr0_cC()
3942 > loop(bp,dx-1, dy/16,dx,cs,0,LE) ) Break; // ~( in ocr0_cC()
3946 if (hchar && dy>15 && dx>7 && i2-y0<9*dy/16 && i1-y0<=dy/4) in ocr0_cC()
3947 if ( loop(bp,5*dx/8,i2-y0,dy,cs,0,DO) > 2*dy/8 ){ in ocr0_cC()
3954 for(x=dx/2;x<dx-1 && i;x++) // look for @@ (instead +1 use +delta?) in ocr0_cC()
3962 if (dy>2*dx) ad=99*ad/100; in ocr0_cC()
3964 if( loop(bp,dx-1,dy/2,dx,cs,0,LE) < 6*dx/8 ) ad=98*ad/100; in ocr0_cC()
3966 i= loop(bp,dx-1,dy/16,dx,cs,0,LE); in ocr0_cC()
3967 j= loop(bp,dx/2,0 ,dy,cs,0,DO); in ocr0_cC()
3968 if (i>=dx/2 && j>dy/8 && j>2 && j<dy/2) Break; // t in ocr0_cC()
3970 if (dy>=3*dx && dy>12) ad=99*ad/100; // ( in ocr0_cC()
3971 i= loop(bp,dx-1,dy-1,dy,cs,0,UP); in ocr0_cC()
3972 j= loop(bp,dx/2,dy-1,dy,cs,0,UP); in ocr0_cC()
3974 i= loop(bp,dx-1, 0,dy,cs,0,DO); in ocr0_cC()
3975 j= loop(bp,dx/2, 0,dy,cs,0,DO); in ocr0_cC()
3977 if (loop(bp,0,dy-1-dy/8,dx,cs,0,RI)>= 3*dx/4) ad=98*ad/100; // < in ocr0_cC()
3978 if (loop(bp,0,dy-1-dy/8,dx,cs,0,RI)>=(dx+1)/2) ad=98*ad/100; // < in ocr0_cC()
3979 if (loop(bp,0, dy/8,dx,cs,0,RI)>=dx/2) ad=98*ad/100; // < in ocr0_cC()
3994 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_lL() local
3998 for(ad=d=100;dx>2 && dy>4;){ // min 3x4 in ocr0_lL()
4001 i=loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_lL()
4003 if (i<dx/2) ad=98*ad/100; // ~G in ocr0_lL()
4005 if (dx<8 && 3*loop(bp,dx-1,0,dy,cs,0,DO)<=dy) break; // ~G in ocr0_lL()
4007 j=loop(box1->p,x0 ,y,dx,cs,0,RI); in ocr0_lL()
4008 j=loop(box1->p,x0+j,y,dx,cs,1,RI); if( j>i ){ i=j;i1=y; } in ocr0_lL()
4009 } if( i<3*dx/4 ) Break; i1=i; // length of horizontal line in ocr0_lL()
4011 i=loop(box1->p,x0 ,y0+dy/2,dx,cs,0,RI); if( i>dx/2 ) Break; in ocr0_lL()
4012 j=loop(box1->p,x0+i,y0+dy/2,dx,cs,1,RI); if( i+j>dx/2 ) Break; i2=j; in ocr0_lL()
4013 if (loop(bp,dx-1, 0,dx,cs,0,LE)<dx/8 in ocr0_lL()
4014 && loop(bp,dx-1, dy/4,dx,cs,0,LE)>dx/2 in ocr0_lL()
4015 && loop(bp, 0,5*dy/8,dx,cs,0,RI)<dx/4 in ocr0_lL()
4016 && loop(bp,dx-1,3*dy/4,dx,cs,0,LE)<dx/4) Break; // ~G in ocr0_lL()
4018 j=loop(box1->p,x0 ,y,dx,cs,0,RI); in ocr0_lL()
4019 if ( j>(dx+2)/4+(y1-dy/4-y)*dx/2/dy ) { i=0; break; } in ocr0_lL()
4020 x=loop(box1->p,x0+j,y,dx,cs,1,RI); in ocr0_lL()
4023 if( num_cross(0, dx-1-dx/8, dy-1-dy/2, dy-1-dy/2,bp,cs) != 1 ) Break; in ocr0_lL()
4024 if( num_cross(0, dx-1 , dy/3 , dy/3,bp,cs) != 1 ) Break; in ocr0_lL()
4025 if( num_cross(0, dx-1 , dy/8 , dy/8,bp,cs) != 1 ) Break; in ocr0_lL()
4026 if (loop(bp,0,dy-1,dx,cs,0,RI) in ocr0_lL()
4027 -loop(bp,0,dy-3,dx,cs,0,RI)>1+dx/16) ad=96*ad/100; // ~c in ocr0_lL()
4028 if (loop(box1->p,x0+dx/4,y1,dy,cs,0,UP)>1+dy/16) ad=99*ad/100; // ~4 in ocr0_lL()
4032 if (5*dx<2*dy && loop(box1->p,x0,y1,dx,cs,0,RI)>dx/4) ad=99*ad/100; // ~l in ocr0_lL()
4042 for(ad=d=100; dy>dx && dy>5;){ // min 3x4 in ocr0_lL()
4045 if( num_cross(0, dx-1,dy/2,dy/2,bp,cs) != 1 in ocr0_lL()
4046 || num_cross(0, dx-1,dy/4,dy/4,bp,cs) != 1 ) Break; in ocr0_lL()
4048 for(i1=0,i2=dx,y=dy/4;y<dy-dy/4;y++){ in ocr0_lL()
4049 j = loop(bp,0,y,dx,cs,0,RI); in ocr0_lL()
4050 j = loop(bp,j,y,dx,cs,1,RI); in ocr0_lL()
4058 j = loop(bp,0,y,dx,cs,0,RI); in ocr0_lL()
4060 j = loop(bp,j,y,dx,cs,1,RI); in ocr0_lL()
4063 if ( i0>4*i2 || 3*i3>2*dx) in ocr0_lL()
4064 if ( loop(bp,dx-1,dy-1,dx,cs,0,LE)>3*dx/8 in ocr0_lL()
4065 || loop(bp, 0,dy-1,dx,cs,0,RI)>3*dx/8) Break; // ~7 in ocr0_lL()
4068 x =loop(bp,0, 0,dx,cs,0,RI); in ocr0_lL()
4069 i3=loop(bp,x, 0,dx,cs,0,RI); in ocr0_lL()
4070 x =loop(bp,0, 1,dx,cs,0,RI); in ocr0_lL()
4071 x =loop(bp,x, 1,dx,cs,0,RI); if(x>i3) i3=x; in ocr0_lL()
4072 x =loop(bp,0,dy-1,dx,cs,0,RI); in ocr0_lL()
4073 i4=loop(bp,x,dy-1,dx,cs,0,RI); in ocr0_lL()
4074 x =loop(bp,0,dy-2,dx,cs,0,RI); in ocr0_lL()
4075 x =loop(bp,x,dy-2,dx,cs,0,RI); if(x>i4) i4=x; in ocr0_lL()
4076 if( i3>i1+dx/8+1 && i4>i1+dx/8+1 ) Break; // ~I in ocr0_lL()
4078 for(i=dx,j=0,y=1;y<dy/4;y++){ in ocr0_lL()
4079 x=loop(bp,dx-1,y,dx,cs,0,LE); if(x>i+1) break; i=x; in ocr0_lL()
4080 if( num_cross(0,dx-1,y ,y ,bp,cs)==2 in ocr0_lL()
4081 && num_cross(0,dx-1,y+1+dy/32,y+1+dy/32,bp,cs)==2 ) j=1; in ocr0_lL()
4085 if( num_cross(0,dx-1,y ,y ,bp,cs)==2 in ocr0_lL()
4086 && num_cross(0,dx-1,y-1-dy/32,y-1-dy/32,bp,cs)==2 ) break; in ocr0_lL()
4092 if(dx>3) in ocr0_lL()
4093 if( get_bw(dx-1-dx/8,dx-1,0,dy/6,bp,cs,1) != 1 ) in ocr0_lL()
4094 if( get_bw(dx-1-dx/8,dx-1,0,dy/2,bp,cs,1) == 1 ) Break; in ocr0_lL()
4096 if( get_bw(dx-1-dx/8,dx-1,dy/4,dy/3,bp,cs,1) != 1 ) // large I ??? in ocr0_lL()
4097 if( get_bw(0 ,dx/8,dy/4,dy/3,bp,cs,1) != 1 ) in ocr0_lL()
4098 if( get_bw(dx-1-dx/8,dx-1,0 ,dy/8,bp,cs,1) == 1 ) in ocr0_lL()
4099 if( get_bw(0 ,dx/8,0 ,dy/8,bp,cs,1) == 1 ) ad=ad*97/100; in ocr0_lL()
4100 if( get_bw(dx-1-dx/8,dx-1,dy/2,dy-1,bp,cs,1) != 1 ) // r ??? in ocr0_lL()
4101 if( get_bw(0 ,dx/8,dy/2,dy-1,bp,cs,1) == 1 ) in ocr0_lL()
4102 if( get_bw(dx-1-dx/8,dx-1,0 ,dy/3,bp,cs,1) == 1 ) in ocr0_lL()
4103 if( get_bw(0 ,dx/8,0 ,dy/3,bp,cs,1) == 1 ) Break; in ocr0_lL()
4106 if( num_cross(0, dx-1, y , y ,bp,cs) != 1 // sure ? in ocr0_lL()
4107 && num_cross(0, dx-1, y-1, y-1,bp,cs) != 1 ) break; in ocr0_lL()
4110 if(dx>3){ in ocr0_lL()
4112 if( get_bw(dx/4,dx-1-dx/4,y,y,bp,cs,1) != 1 ) break; in ocr0_lL()
4116 for(x=dx,y=bp->y-1-5*dy/16;y>=dy/5;y--){ // rechts abfallende Kante/Knick? in ocr0_lL()
4118 if( i-2-dx/16>=x ) break; in ocr0_lL()
4126 if( i+2+dx/16<x ) break; in ocr0_lL()
4133 i=loop(bp,dx-1,dy/16,dx,cs,0,LE); in ocr0_lL()
4134 j=loop(bp,dx-1,dy/2 ,dx,cs,0,LE); in ocr0_lL()
4136 if( get_bw(dx-1-i/2,dx-1-i/2,0,dy/2,bp,cs,1) == 1 ) Break; // ~t in ocr0_lL()
4139 if( num_cross(0,dx-1,y,y,bp,cs) == 2 ) break; in ocr0_lL()
4141 i =loop(bp,0,y,dx,cs,0,RI); in ocr0_lL()
4142 i+=loop(bp,i,y,dx,cs,1,RI); in ocr0_lL()
4143 i+=loop(bp,i,y,dx,cs,0,RI)/2; // middle of v-gap in ocr0_lL()
4147 if ( dx>8 in ocr0_lL()
4148 && loop(bp, 0,3*dy/4,dx,cs,0,RI)>=dx/4 in ocr0_lL()
4149 && loop(bp, 0,7*dy/8,dx,cs,0,RI)<=dx/8 in ocr0_lL()
4150 && loop(bp,dx-1,3*dy/4,dx,cs,0,LE)<=dx/8 in ocr0_lL()
4151 && loop(bp,dx-1,7*dy/8,dx,cs,0,LE)<=dx/8 ) Break; // ~J in ocr0_lL()
4154 if ( loop(bp,0,dy/4,dx,cs,0,RI)>dx/2 in ocr0_lL()
4155 && get_bw(0,dx/8,0,dy/4,bp,cs,1) == 1 ) Break; // ~7 in ocr0_lL()
4157 if ( loop(bp,dx-1,dy/2,dx,cs,0,LE)>dx/2 in ocr0_lL()
4158 && get_bw(3*dx/4,dx-1,3*dy/4,dy-1,bp,cs,1) == 1) { in ocr0_lL()
4159 if (loop(bp,0,dy-1,dx,cs,0,RI)<dx/8) ad=99*ad/100; // ~L in ocr0_lL()
4160 if(5*dx>2*dy) ad=99*ad/100; // ~L in ocr0_lL()
4161 if(5*dx>3*dy) ad=99*ad/100; // ~L in ocr0_lL()
4164 if( get_bw(dx/4,dx/4, 0,dy/4,bp,cs,1) == 1 in ocr0_lL()
4165 && get_bw(dx/4,dx/4,dy/2,dy-1,bp,cs,1) == 0 ) Break; in ocr0_lL()
4167 if( dx>3 && dy>3*dx ) in ocr0_lL()
4168 if( loop(bp,dx/4,dy-1 ,dy,cs,0,UP)< dy/4 in ocr0_lL()
4169 && loop(bp, 0,dy-1-dy/8,dx,cs,0,RI)>=dx/2 in ocr0_lL()
4170 && loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE)<=dx/4 ){ in ocr0_lL()
4172 if ( loop(bp,dx-1,dy/2,dx,cs,0,LE)==0 ) Break; in ocr0_lL()
4175 for(x=0;x<dx/2;x++) in ocr0_lL()
4178 if( get_bw( x,x+dx/16, 0,dy/16,bp,cs,1) == 0 in ocr0_lL()
4179 && get_bw( x,x+dx/16,dy/4 ,dy/2 ,bp,cs,1) == 0 in ocr0_lL()
4180 && get_bw( x,x+dx/16,dy/16,dy/4 ,bp,cs,1) == 1 ){ in ocr0_lL()
4181 for(i=dx,y=0;y<dy/4;y++){ in ocr0_lL()
4182 x=loop(bp,0,y,dx,cs,0,RI); in ocr0_lL()
4185 if( x>=loop(bp,0,y+1,dx,cs,0,RI) ) in ocr0_lL()
4188 - loop(bp,dx/16+1,0,dy,cs,0,DO) < dx/16+1 ) Break; // ~1 Jul00,Nov00 in ocr0_lL()
4189 if( num_cross(0,dx/2,y-1,y-1,bp,cs)==2 ) Break; // ~1 in ocr0_lL()
4191 if(dx<8 && dy<12){ // screen font in ocr0_lL()
4193 if( loop(bp,dx/2,1,dy,cs,1,DO)>=dy-2 in ocr0_lL()
4194 && loop(bp,0,dy/2,dx,cs,0,RI)>=2 in ocr0_lL()
4200 && get_bw(x0,x0+dx/4,y0+1+dy/16,y1-1-dy/16,box1->p,cs,1) != 1 ) Break; /* ~] */ in ocr0_lL()
4201 i=loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_lL()
4202 if( loop(bp, 0,dy/2,dx,cs,0,RI)>=dx/2 in ocr0_lL()
4203 && (i<dx/2 || i==0) ) ad=98*ad/100; // ~] in ocr0_lL()
4207 && get_bw(x1-dx/4,x1,y0+1+dy/16,y1-1-dy/16,box1->p,cs,1) != 1 ) Break; /* ~[ */ in ocr0_lL()
4209 x =loop(bp, 0,dy/2,dx,cs,0,RI); // konvex/konkav? ~() in ocr0_lL()
4210 i =loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_lL()
4211 if( loop(bp, 0,7*dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_lL()
4212 && loop(bp, 0, dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_lL()
4213 && loop(bp,dx-1,7*dy/8,dx,cs,0,LE) < i-dx/8 in ocr0_lL()
4214 && loop(bp,dx-1, dy/8,dx,cs,0,LE) < i-dx/8 ) Break; // ~( in ocr0_lL()
4215 if( loop(bp, 0,7*dy/8,dx,cs,0,RI) < x-dx/8 in ocr0_lL()
4216 && loop(bp, 0, dy/8,dx,cs,0,RI) < x-dx/8 in ocr0_lL()
4217 && loop(bp,dx-1,7*dy/8,dx,cs,0,LE) > i+dx/8 in ocr0_lL()
4218 && loop(bp,dx-1, dy/8,dx,cs,0,LE) > i+dx/8 ) Break; // ~) in ocr0_lL()
4222 if( loop(bp,dx-1,3*dy/16,dx,cs,0,LE)-dx/8 in ocr0_lL()
4223 >loop(bp,dx-1, i,dx,cs,0,LE) in ocr0_lL()
4224 || loop(bp,dx-1,3*dy/16,dx,cs,0,LE)-dx/8 in ocr0_lL()
4225 >loop(bp,dx-1, i+1,dx,cs,0,LE) ) in ocr0_lL()
4226 if( loop(bp,dx-1,8*dy/16,dx,cs,0,LE)-dx/8 in ocr0_lL()
4227 >loop(bp,dx-1, i,dx,cs,0,LE) in ocr0_lL()
4228 || loop(bp,dx-1,8*dy/16,dx,cs,0,LE)-dx/8 in ocr0_lL()
4229 >loop(bp,dx-1, i+1,dx,cs,0,LE) ) in ocr0_lL()
4230 if( loop(bp, 0,3*dy/16,dx,cs,0,RI)-dx/8 in ocr0_lL()
4231 >loop(bp, 0, i,dx,cs,0,RI) in ocr0_lL()
4232 || loop(bp, 0,3*dy/16,dx,cs,0,RI)-dx/8 in ocr0_lL()
4233 >loop(bp, 0, i+1,dx,cs,0,RI) ) in ocr0_lL()
4234 if( loop(bp, 0,8*dy/16,dx,cs,0,RI)-dx/8 in ocr0_lL()
4235 >loop(bp, 0, i,dx,cs,0,RI) in ocr0_lL()
4236 || loop(bp, 0,8*dy/16,dx,cs,0,RI)-dx/8 in ocr0_lL()
4237 >loop(bp, 0, i+1,dx,cs,0,RI) ) Break; // ~t in ocr0_lL()
4238 if( loop(bp, 0,i-1,dx,cs,0,RI)>1 && dx<6 ) Break; // ~t in ocr0_lL()
4239 if( loop(bp, 0,8*dy/16,dx,cs,0,RI)>dx/8 in ocr0_lL()
4240 && loop(bp, 0, i,dx,cs,1,RI)>=dx-1 in ocr0_lL()
4241 && loop(bp,dx-1,8*dy/16,dx,cs,0,LE)>dx/8 in ocr0_lL()
4242 && loop(bp,dx-1, i-1,dx,cs,0,LE)>dx/8 ) Break; // ~t in ocr0_lL()
4245 if( loop(bp,0, 1,dx,cs,0,RI)>=dx/2 in ocr0_lL()
4246 && ( loop(bp,0,dy-2,dx,cs,0,RI)<=dx/8 in ocr0_lL()
4247 || loop(bp,0,dy-1,dx,cs,0,RI)<=dx/8 ) ) in ocr0_lL()
4248 if( ( loop(bp,dx-1, 0,dx,cs,0,LE)<=dx/8 in ocr0_lL()
4249 || loop(bp,dx-1, 1,dx,cs,0,LE)<=dx/8 ) in ocr0_lL()
4250 && loop(bp,dx-1,dy-2,dx,cs,0,LE)>=dx/2 ) ad=98*ad/100; // ~/ in ocr0_lL()
4254 if (!hchar || loop(bp,0,dy/4,dx,cs,0,RI)>dx/2){ // ~z in ocr0_lL()
4255 i=loop(bp,0,dy/16 ,dx,cs,0,RI); in ocr0_lL()
4256 i=loop(bp,i,dy/16 ,dx,cs,1,RI); j=i; in ocr0_lL()
4257 i=loop(bp,0,dy/16+1,dx,cs,0,RI); in ocr0_lL()
4258 i=loop(bp,i,dy/16+1,dx,cs,1,RI); if (i>j) j=i; in ocr0_lL()
4259 i=loop(bp,0,dy/16+2,dx,cs,0,RI); in ocr0_lL()
4260 i=loop(bp,i,dy/16+2,dx,cs,1,RI); if (i>j) j=i; in ocr0_lL()
4261 if (j*4>=dx*3) ad=98*ad/100; // ~z in ocr0_lL()
4262 if (j*8>=dx*7) ad=96*ad/100; // ~z in ocr0_lL()
4296 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_oO() local
4301 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_oO()
4304 if( get_bw(x0 , x0+dx/2,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_oO()
4305 if( get_bw(x1-dx/2 , x1 ,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_oO()
4306 if( get_bw(x0+dx/2 , x0+dx/2,y1-dy/2 , y1, box1->p,cs,1) != 1 ) Break; in ocr0_oO()
4307 if( get_bw(x0+dx/2 , x0+dx/2,y0 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_oO()
4308 if( get_bw(x0+dx/2 , x0+dx/2,y0+dy/2 , y1-dy/3,box1->p,cs,1) != 0 ) Break; in ocr0_oO()
4312 if( num_cross(x0+dx/2 ,x0+dx/2 ,y0, y1 ,box1->p,cs) != 2 in ocr0_oO()
4313 && num_cross(x0+dx/2+1,x0+dx/2+1,y0, y1 ,box1->p,cs) != 2 ) Break; in ocr0_oO()
4314 if( num_cross(x0+dx/3,x1-dx/4,y0 , y0 ,box1->p,cs) != 1 ) // AND in ocr0_oO()
4315 if( num_cross(x0+dx/3,x1-dx/4,y0+1 , y0+1,box1->p,cs) != 1 ) Break; in ocr0_oO()
4316 if( num_cross(x0+dx/4,x1-dx/3,y1 , y1 ,box1->p,cs) != 1 ) // against "rauschen" in ocr0_oO()
4317 if( num_cross(x0+dx/4,x1-dx/3,y1-1 , y1-1,box1->p,cs) != 1 ) Break; in ocr0_oO()
4326 x=loop(bp,dx-1,dy-1-dy/3,x1-x0,cs,0,LE); // should be minimum in ocr0_oO()
4328 i=loop(bp,dx-1,y,x1-x0,cs,0,LE); in ocr0_oO()
4334 if( loop(bp,0, dy/16,dx,cs,0,RI) in ocr0_oO()
4335 + loop(bp,0,dy-1-dy/16,dx,cs,0,RI) in ocr0_oO()
4336 <= 2*loop(bp,0, dy/2 ,dx,cs,0,RI)+dx/8 ) Break; // not konvex in ocr0_oO()
4337 if( loop(bp,0 , 1+dy/16,dx,cs,0,RI) + dx/4 in ocr0_oO()
4338 <= loop(bp,dx-1, 1+dy/16,dx,cs,0,LE) ) Break; // Dec00 in ocr0_oO()
4340 if( loop(bp,dx-1, dy/16,dx,cs,0,LE)>dx/8 ) in ocr0_oO()
4341 if( loop(bp,0 , dy/16,dx,cs,0,RI)<dx/16 ) Break; in ocr0_oO()
4342 if( loop(bp,dx-1,dy-1-dy/16,dx,cs,0,LE)>dx/8 ) in ocr0_oO()
4343 if( loop(bp,0 ,dy-1-dy/16,dx,cs,0,RI)<dx/16 ) Break; in ocr0_oO()
4344 if( get_bw(x1-dx/32,x1,y0,y0+dy/32,box1->p,cs,1) == 0 in ocr0_oO()
4345 && get_bw(x1-dx/32,x1,y1-dy/32,y1,box1->p,cs,1) == 0 in ocr0_oO()
4347 && ( get_bw(0,dx/32,0,dy/32,bp,cs,1) == 1 in ocr0_oO()
4348 || get_bw(x0,x0+dx/32,y1-dy/32,y1,box1->p,cs,1) == 1 ) ) Break; // ~D in ocr0_oO()
4351 for(y=dy,j=x=0;x<dx;x++) { in ocr0_oO()
4358 if( num_cross(j,dx-1,y,y,bp,cs) > 1 ) ad=99*ad/100; // ~a \it a in ocr0_oO()
4360 if( num_cross(0,dx-1,y,y,bp,cs) > 2 ) ad=98*ad/100; // ~a \it a in ocr0_oO()
4361 if (loop(bp,dx-1,dy-1,x1-x0,cs,0,LE)<dx/8) ad=98*ad/100; // \it a in ocr0_oO()
4362 if (loop(bp,dx-1, 0,x1-x0,cs,0,LE)<dx/8) ad=98*ad/100; // \it a in ocr0_oO()
4363 if (loop(bp,dx-1,dy-1-dy/8,x1-x0,cs,0,LE)+1+dx/16 in ocr0_oO()
4366 if (loop(bp,dx-1,dy-1,y1-y0,cs,0,UP)+1+(dy+3)/8 in ocr0_oO()
4370 if (abs(loop(bp,dx/2, 0,dy,cs,0,DO) in ocr0_oO()
4371 -loop(bp,dx/2,dy-1,dy,cs,0,UP))>dy/8 in ocr0_oO()
4372 || num_cross(0,dx-1, 0, 0,bp,cs) > 1 in ocr0_oO()
4373 || num_cross(0,dx-1,dy-1,dy-1,bp,cs) > 1 in ocr0_oO()
4394 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_pP() local
4399 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_pP()
4402 if( get_bw(0 , dx/2,3*dy/4,3*dy/4,bp,cs,1) != 1 ) Break; in ocr0_pP()
4403 if( get_bw(0 , dx/2, dy/2, dy/2,bp,cs,1) < 1 ) Break; in ocr0_pP()
4404 if( get_bw(dx/4, dx-1, dy/4, dy/4,bp,cs,1) != 1 ) Break; in ocr0_pP()
4405 i= loop(bp,dx-1,3*dy/4,dx,cs,0,LE); if (i<dx/4) Break; in ocr0_pP()
4407 if( num_cross(x0+dx/2 ,x0+dx/2 , y0, y1-3*dy/16,box1->p,cs) != 2 ) in ocr0_pP()
4408 if( num_cross(x0+dx/2+1,x0+dx/2+1, y0, y1-3*dy/16,box1->p,cs) != 2 ) Break; in ocr0_pP()
4409 if( num_cross(0,dx-1,7*dy/8 ,7*dy/8 ,bp,cs) != 1 ) in ocr0_pP()
4410 if( num_cross(0,dx-1,7*dy/8-1,7*dy/8-1,bp,cs) != 1 ) Break; in ocr0_pP()
4411 if( num_cross(0,dx-1, dy/4 , dy/4 ,bp,cs) != 2 ) in ocr0_pP()
4412 if( num_cross(0,dx-1, dy/4-1, dy/4-1,bp,cs) != 3 ) // \it p with nice kurve in ocr0_pP()
4413 if( num_cross(0,dx-1, dy/4 , dy/4 ,bp,cs) != 2 ) in ocr0_pP()
4414 if( num_cross(0,dx-1, dy/4+1, dy/4+1,bp,cs) != 2 ) Break; in ocr0_pP()
4416 i= loop(bp,0,dy/2,dx,cs,0,RI); if(i<1) i++; in ocr0_pP()
4417 if( num_cross(i-1,dx-1, dy/4 , dy/4 ,bp,cs) != 2 ) in ocr0_pP()
4418 if( num_cross(i-1,dx-1, dy/4+1, dy/4+1,bp,cs) != 2 ) Break; in ocr0_pP()
4420 i1= loop(bp, 0,3*dy/8,dx,cs,0,RI); if (i1>=dx/2) ad=90*ad/100; in ocr0_pP()
4421 i2=i1+loop(bp,i1,3*dy/8,dx,cs,1,RI); // upper x-position of v line in ocr0_pP()
4422 i3= loop(bp, 0,7*dy/8,dx,cs,0,RI); in ocr0_pP()
4423 i4=i3+loop(bp,i3,7*dy/8,dx,cs,1,RI); // lower x-position of v line in ocr0_pP()
4427 i= loop(bp,0,y,dx,cs,0,RI); if(i>x+dx/16) break; in ocr0_pP()
4430 i=loop(bp,dx-1,y,dx,cs,0,LE); in ocr0_pP()
4431 if ( i>x ) { x=i; j=y; } if(x>dx/2) break; in ocr0_pP()
4432 } if ( x<dx/2 || x>=dx) Break; in ocr0_pP()
4433 if( get_bw(3*dx/4,dx-1, y , dy-1,bp,cs,1) == 1 ) Break; in ocr0_pP()
4439 if (j!=1 && dx< 8) ad=96*ad/100; in ocr0_pP()
4440 if (j!=1 && dx>=8) ad=98*ad/100; in ocr0_pP()
4445 i= loop(bp,bp->x-1, bp->y/4, dx ,cs,0,LE); in ocr0_pP()
4446 i=i+loop(bp,bp->x-1-i,bp->y/4, dx ,cs,1,LE); in ocr0_pP()
4467 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_qQ() local
4471 for(ad=d=100;dx>2 && dy>4;){ // min 3x4 in ocr0_qQ()
4474 if( get_bw(x0 ,x0+dx/3,y0+dy/3,y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4475 if( get_bw(x1-dx/3,x1 ,y0+dy/3,y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4476 if( get_bw(x0+dx/2,x0+dx/2,y1-dy/3,y1, box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4477 if( get_bw(x0+dx/2,x0+dx/2,y0 ,y0+dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4478 if( get_bw(x0+dx/2,x0+dx/2,y0+dy/3,y1-dy/2,box1->p,cs,1) == 1 ) Break; in ocr0_qQ()
4480 if( num_cross(x0+dx/2,x0+dx/2,y0 , y1 ,box1->p,cs) < 2 ) Break; in ocr0_qQ()
4481 if( num_cross(x0+dx/5,x1-dx/5,y0 , y0 ,box1->p,cs) != 1 ) // AND in ocr0_qQ()
4482 if( num_cross(x0+dx/5,x1-dx/5,y0+1 , y0+1 ,box1->p,cs) != 1 ) Break; in ocr0_qQ()
4493 turmite(box1->p,&x,&y,x0,x1,y0,y1,cs,LE,ST); if( x<x1-dx/2 ) Break; in ocr0_qQ()
4495 if( x<x1-dx/2 ) { if (gchar) ad=98*ad/100; else ad=90*ad/100; } in ocr0_qQ()
4496 if( loop(bp,0 ,0 ,dx,cs,0,RI) in ocr0_qQ()
4497 < loop(bp,0 ,2 ,dx,cs,0,RI) ) Break; in ocr0_qQ()
4498 if( loop(bp,0 ,dy/8+2,dx,cs,0,RI) in ocr0_qQ()
4499 +loop(bp,dx-1,dy/8+2,dx,cs,0,LE) > 5*dx/8 ) Break; // ~4 Okt00 in ocr0_qQ()
4501 x= loop(bp,dx-1,3*dy/8,dy,cs,0,LE); if( x>dx/4 ) Break; in ocr0_qQ()
4502 if( loop(bp,dx-1-x,0 ,dy,cs,0,DO) in ocr0_qQ()
4503 <= loop(bp,dx-2-x,0 ,dy,cs,0,DO) ) Break; // 4 in ocr0_qQ()
4505 if( loop(bp,dx-1,dy-2,dx,cs,0,LE) in ocr0_qQ()
4506 <= loop(bp,dx-1,dy/2,dx,cs,0,LE) ) in ocr0_qQ()
4508 <= loop(bp,dx/2,dy-1,dy,cs,0,UP) ) in ocr0_qQ()
4509 if( loop(bp, 0,dy-2,dx,cs,0,RI)>dx/2 ) in ocr0_qQ()
4510 if( loop(bp, 0, 0,dx,cs,0,RI)>dx/2 ) Break; // 4 in ocr0_qQ()
4512 if( loop(bp,dx-1,3*dy/4,dx,cs,0,LE) in ocr0_qQ()
4513 + loop(bp, 0,3*dy/4,dx,cs,0,RI) in ocr0_qQ()
4514 < loop(bp,dx-1,2*dy/4,dx,cs,0,LE) in ocr0_qQ()
4515 + loop(bp, 0,2*dy/4,dx,cs,0,RI) ) ad=94*ad/100; // 4 in ocr0_qQ()
4516 if( loop(bp,0 ,3*dy/4,dx,cs,1,RI) >= dx ) ad=94*ad/100; // 4 in ocr0_qQ()
4519 if( loop(bp,dx-1,dy/3,dx,cs,0,LE)> dx/4 ) Break; in ocr0_qQ()
4520 j=loop(bp,dx/2,dy-1,dy,cs,0,UP); in ocr0_qQ()
4522 if( get_bw(0,dx/2,dy-1-j/2,dy-1-j/2,bp,cs,1) == 1 ) { // ~RA in ocr0_qQ()
4530 if( num_cross(0,dx-1,y,y,bp,cs) > 2 ) i++; if(i>dy/8) Break; // ~a \it a in ocr0_qQ()
4535 i=loop(bp,dx-1,y,dx,cs,0,LE);if(i>x){ x=i; } in ocr0_qQ()
4537 if( j>dx/16 ) Break; // falling line detected in ocr0_qQ()
4540 if (j<=dx/16) ad=98*ad/100; in ocr0_qQ()
4547 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_qQ()
4555 && num_cross(x0,x0+dx/2, y, y,box1->p,cs) == 0 ) Break; in ocr0_qQ()
4558 i=loop(box1->p,x0,y,dx,cs,0,RI); in ocr0_qQ()
4560 if ( x>dx/2 ) break; in ocr0_qQ()
4561 } if ( x<dx/2 || x>=dx) Break; in ocr0_qQ()
4564 if( loop(box1->p,x0+dx/16,j,dy,cs,0,UP)<1+dy/16 ){ in ocr0_qQ()
4568 if( loop(box1->p,x0+dx/16,j-dy/32-1,dy,cs,1,RI)>=dx-dx/8 in ocr0_qQ()
4569 || loop(box1->p,x0+dx/16,j-dy/16-1,dy,cs,1,RI)>=dx-dx/8 ){ in ocr0_qQ()
4572 if( get_bw(x1-dx/3, x1, y0+dy/3, y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4573 if( get_bw(x0, x0+dx/3, y0+dy/3, y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4574 if( get_bw(x0, x0+dx/4, y1-dy/8, y1-dy/9,box1->p,cs,1) == 1 ) Break; in ocr0_qQ()
4575 if( get_bw(x0, x0+dx/4, y1-dy/5, y1-dy/9,box1->p,cs,1) == 1 ) ad=99*ad/100; in ocr0_qQ()
4576 if( num_cross(x0+dx/2,x0+dx/2, y0, j ,box1->p,cs) != 2 ) Break; in ocr0_qQ()
4579 { if (dx<16) ad=98*ad/100; else Break; } in ocr0_qQ()
4581 { if (dx<16) ad=98*ad/100; else Break; } in ocr0_qQ()
4583 if( loop(bp,0,dy-1-dy/4,dx,cs,0,RI)>5*dx/8 in ocr0_qQ()
4584 && get_bw(dx/4,dx/4,dy-1-dy/4,dy-1,bp,cs,1)==1 ) Break; // ~\it g in ocr0_qQ()
4600 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_iIjJ() local
4606 for(ad=d=100;dy>3 && dx>0;){ // min 3x4 without dot in ocr0_iIjJ()
4622 while(dy>3*dx && box1->m2){ // test for vertical i without detected dot in ocr0_iIjJ()
4623 i= loop(bp,dx/2,dy-1 ,dy,cs,0,UP); in ocr0_iIjJ()
4625 i+=loop(bp,dx/2,dy-1-i,dy,cs,1,UP); in ocr0_iIjJ()
4652 if (loop(bp,dx-1,y+(y1-ya+1)/32,dx,cs,0,LE)>dx/2) // unusual (right part of ouml) in ocr0_iIjJ()
4663 if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) Break; in ocr0_iIjJ()
4664 for(;y<=y1-y0;y++){ if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) break; } yc=y; in ocr0_iIjJ()
4665 for(;y<=y1-y0;y++){ if( num_cross(0,dx-1,y,y,bp,cs) != 2 ) break; } yd=y; in ocr0_iIjJ()
4668 for(;y>0;y--){ if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) break; } ye=y; in ocr0_iIjJ()
4669 for(;y>0;y--){ if( num_cross(0,dx-1,y,y,bp,cs) != 2 ) break; } yf=y; in ocr0_iIjJ()
4672 xa=loop(bp, 0,yc-1,dx,cs,0,RI); in ocr0_iIjJ()
4673 xb=loop(bp,dx-1,yc-1,dx,cs,0,LE); in ocr0_iIjJ()
4675 xb-loop(bp,dx-1,yc,dx,cs,0,LE) /* Dec00 */ in ocr0_iIjJ()
4676 > xa-loop(bp, 0,yc,dx,cs,0,RI) ){ in ocr0_iIjJ()
4677 y= loop(bp,dx-xb,yc-1,dy,cs,0,DO); in ocr0_iIjJ()
4679 i=loop(bp,dx-xb-1,yc-1+y-1,dy,cs,0,DO); in ocr0_iIjJ()
4689 x=loop(bp,0 ,ye+1,dx,cs,0,RI); in ocr0_iIjJ()
4696 && loop(bp,0, 0,dx,cs,0,RI)+1 in ocr0_iIjJ()
4697 < loop(bp,0,dx/2,dx,cs,0,RI) ) ad=97*ad/100; in ocr0_iIjJ()
4700 if( loop(bp, 0,2*dy/4,dx,cs,0,RI) in ocr0_iIjJ()
4701 -loop(bp,dx-1,2*dy/4,dx,cs,0,LE)>dx/8 ) Break; in ocr0_iIjJ()
4706 if( loop(bp,dx-1,3*dy/4,dx,cs,0,LE)>dx/2 in ocr0_iIjJ()
4707 && loop(bp,dx-1, dy-1,dx,cs,0,LE)<dx/4 ) Break; // ~d=cl in ocr0_iIjJ()
4710 if( dx>5 && num_cross(x0+dx/2,x0+dx/2, ya, y1 ,box1->p,cs) >= 3 ) in ocr0_iIjJ()
4718 for(ad=d=100;dy>4 && dx>0;){ // min 3x4 in ocr0_iIjJ()
4733 if( loop(bp,dx-1,y+(y1-ya+1)/32,dx,cs,0,LE)>dx/2 ) Break; // unusual (right part of ouml) in ocr0_iIjJ()
4742 if( num_cross(0,dx-1,y,y,bp,cs) >2 ) Break; in ocr0_iIjJ()
4743 for(;y<=y1-y0;y++){ if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) break; } yc=y; in ocr0_iIjJ()
4744 for(;y<=y1-y0;y++){ if( num_cross(0,dx-1,y,y,bp,cs) != 2 ) break; } yd=y; in ocr0_iIjJ()
4747 for(;y>0;y--){ if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) break; } ye=y; in ocr0_iIjJ()
4748 for(;y>0;y--){ if( num_cross(0,dx-1,y,y,bp,cs) != 2 ) break; } yf=y; in ocr0_iIjJ()
4751 xa=loop(bp, 0,yc-1,dx,cs,0,RI); in ocr0_iIjJ()
4752 xb=loop(bp,dx-1,yc-1,dx,cs,0,LE); in ocr0_iIjJ()
4754 xb-loop(bp,dx-1,yc,dx,cs,0,LE) /* Dec00 */ in ocr0_iIjJ()
4755 > xa-loop(bp, 0,yc,dx,cs,0,RI) ){ in ocr0_iIjJ()
4756 y= loop(bp,dx-xb,yc-1,dy,cs,0,DO); in ocr0_iIjJ()
4758 i=loop(bp,dx-xb-1,yc-1+y-1,dy,cs,0,DO); in ocr0_iIjJ()
4768 x=loop(bp,0 ,ye+1,dx,cs,0,RI); in ocr0_iIjJ()
4775 && loop(bp,0, 0,dx,cs,0,RI)+1 in ocr0_iIjJ()
4776 < loop(bp,0,dx/2,dx,cs,0,RI) ) ad=97*ad/100; in ocr0_iIjJ()
4777 if (loop(bp,0,dy-1,dx,cs,0,RI) in ocr0_iIjJ()
4778 -loop(bp,0,dy-3,dx,cs,0,RI)>1+dx/16) ad=96*ad/100; // ~c in ocr0_iIjJ()
4781 if( loop(bp, 0,2*dy/4,dx,cs,0,RI) in ocr0_iIjJ()
4782 -loop(bp,dx-1,2*dy/4,dx,cs,0,LE)<=dx/8 ) Break; in ocr0_iIjJ()
4793 for(ad=d=100;dy>4 && dy>dx && 5*dy>4*(box1->m3-box1->m2);){ // min 3x4 in ocr0_iIjJ()
4798 x =loop(bp,0, dy/2,dx,cs,0,RI); // konvex? divided Q in ocr0_iIjJ()
4799 if(loop(bp,0,7*dy/8,dx,cs,0,RI) > x+dx/8) Break; in ocr0_iIjJ()
4801 if( num_cross(0, dx-1, y , y ,bp,cs) != 1 ) in ocr0_iIjJ()
4802 if( num_cross(0, dx-1, y+dy/16 , y+dy/16 ,bp,cs) != 1 ) break; in ocr0_iIjJ()
4804 x =loop(bp,0, dy/2,dx,cs,0,RI); in ocr0_iIjJ()
4805 i5=loop(bp,x, dy/2,dx,cs,1,RI); // center width in ocr0_iIjJ()
4807 x =loop(bp,0, y,dx,cs,0,RI); in ocr0_iIjJ()
4808 x =loop(bp,x, y,dx,cs,1,RI); // width in ocr0_iIjJ()
4809 if( abs(x-i5)>1+dx/8 ) break; in ocr0_iIjJ()
4815 x =loop(bp,0, y,dx,cs,0,RI); in ocr0_iIjJ()
4816 x =loop(bp,x, y,dx,cs,1,RI); if(x>i1){ i1=x;i2=y; } in ocr0_iIjJ()
4819 x =loop(bp,0, y,dx,cs,0,RI); in ocr0_iIjJ()
4820 x =loop(bp,x, y,dx,cs,1,RI); if(x>i3){ i3=x;i4=y; } in ocr0_iIjJ()
4822 if( abs(i3-i1)>1+dx/8 ) Break; // if i3>>i5 more sure! in ocr0_iIjJ()
4828 x =loop(bp,0, dy/8,dx,cs,0,RI); i1=x; in ocr0_iIjJ()
4829 x+=loop(bp,x, dy/8,dx,cs,1,RI); i1=(i1+x-1)/2; in ocr0_iIjJ()
4831 x =loop(bp,0,dy-1-dy/8,dx,cs,0,RI); i2=x; in ocr0_iIjJ()
4832 x+=loop(bp,x,dy-1-dy/8,dx,cs,1,RI); i2=(i2+x-1)/2; in ocr0_iIjJ()
4833 x =loop(bp,0,dy-2-dy/8,dx,cs,0,RI); i=x; in ocr0_iIjJ()
4834 x+=loop(bp,x,dy-2-dy/8,dx,cs,1,RI); i=(i+x-1)/2; if( i>i2 ) i2=i; in ocr0_iIjJ()
4843 x =loop(bp,i1, y+0,dx,cs,1,LE); i=x; in ocr0_iIjJ()
4844 x =loop(bp,i1, y+1,dx,cs,1,LE); if(x>i)i=x; in ocr0_iIjJ()
4845 x =loop(bp,i1, y+0,dx,cs,1,RI); j=x; in ocr0_iIjJ()
4846 x =loop(bp,i1, y+1,dx,cs,1,RI); if(x>j)j=x; if(abs(i-j)>1+dx/8)Break; in ocr0_iIjJ()
4847 x =loop(bp,i2,dy-y-1,dx,cs,1,LE); j=x; in ocr0_iIjJ()
4848 x =loop(bp,i2,dy-y-2,dx,cs,1,LE); if(x>j)j=x; if(abs(i-j)>1+dx/8)Break; in ocr0_iIjJ()
4849 x =loop(bp,i2,dy-y-1,dx,cs,1,RI); j=x; in ocr0_iIjJ()
4850 x =loop(bp,i2,dy-y-2,dx,cs,1,RI); if(x>j)j=x; if(abs(i-j)>1+dx/8)Break; in ocr0_iIjJ()
4853 if( loop(bp,dx-1,dy/16 ,dx,cs,0,LE) in ocr0_iIjJ()
4854 > loop(bp,dx-1,dy/4 ,dx,cs,0,LE)+1+dx/32 ) Break; // ~bad ) (thinn) in ocr0_iIjJ()
4857 if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) i++; in ocr0_iIjJ()
4861 if( get_bw(dx/4,dx/4, 0,dy/4,bp,cs,1) == 1 in ocr0_iIjJ()
4862 && get_bw(dx/4,dx/4,dy/2,dy-1,bp,cs,1) == 0 ) Break; in ocr0_iIjJ()
4863 if( loop(bp, 0,dy/4,dx,cs,0,RI)> dx/4 in ocr0_iIjJ()
4864 && loop(bp,dx-1,dy/4,dx,cs,0,LE)<=dx/4 in ocr0_iIjJ()
4873 if ( loop(bp,dx-1, dy/4,dx,cs,0,LE) > dx/2 in ocr0_iIjJ()
4874 && loop(bp,dx-1,3*dy/4,dx,cs,0,LE) > dx/2 in ocr0_iIjJ()
4875 && loop(bp, 0, dy/2,dx,cs,0,RI) < dx/4 ) Break; /* ~[ */ in ocr0_iIjJ()
4877 x =loop(bp, 0,dy/2,dx,cs,0,RI); // konvex/konkav? ~() in ocr0_iIjJ()
4878 i =loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_iIjJ()
4879 if( loop(bp, 0,7*dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_iIjJ()
4880 && loop(bp, 0, dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_iIjJ()
4881 && loop(bp,dx-1,7*dy/8,dx,cs,0,LE) < i-dx/8 in ocr0_iIjJ()
4882 && loop(bp,dx-1, dy/8,dx,cs,0,LE) < i-dx/8 ) Break; // ~( in ocr0_iIjJ()
4883 if( loop(bp, 0,7*dy/8,dx,cs,0,RI) < x-dx/8 in ocr0_iIjJ()
4884 && loop(bp, 0, dy/8,dx,cs,0,RI) < x-dx/8 in ocr0_iIjJ()
4885 && loop(bp,dx-1,7*dy/8,dx,cs,0,LE) > i+dx/8 in ocr0_iIjJ()
4886 && loop(bp,dx-1, dy/8,dx,cs,0,LE) > i+dx/8 ) Break; // ~) in ocr0_iIjJ()
4887 if( loop(bp, 0, dy/8,dx,cs,0,RI) in ocr0_iIjJ()
4888 -(dx-loop(bp,dx-1,7*dy/8,dx,cs,0,LE)) > dx/4 ) Break; // ~/ in ocr0_iIjJ()
4889 if( loop(bp, 0, 0,dx,cs,0,RI) > dx/2 // ToDo: check for serifs in ocr0_iIjJ()
4890 && loop(bp, 0, dy/8,dx,cs,0,RI) > dx/2 in ocr0_iIjJ()
4891 && loop(bp,dx-1,dy-1 ,dx,cs,0,LE) > dx/2 in ocr0_iIjJ()
4892 && loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE) > dx/2 ) ad=99*ad/100; // ~/ in ocr0_iIjJ()
4895 if( get_bw(x0+dx/8,x1-dx/8,box1->m1,(box1->m1+box1->m2)/2,box1->p,cs,1) == 1 ) in ocr0_iIjJ()
4901 i3=loop(bp,dx-1, dy/4,dx,cs,0,LE); in ocr0_iIjJ()
4902 i4=loop(bp, 0,dy-1-dy/4,dx,cs,0,RI); in ocr0_iIjJ()
4909 if ((dx>2 && get_bw(x0+1,x1-1,y1+1,box1->m4,box1->p,cs,1) == 1) in ocr0_iIjJ()
4910 || (dx<3 && get_bw(x0 ,x1 ,y1+1,box1->m4,box1->p,cs,1) == 1)) { in ocr0_iIjJ()
4919 for(bx=0,ax=dx,ay=by=y=0;y<dy/4;y++){ in ocr0_iIjJ()
4920 i =loop(bp,dx-1 ,y,dx,cs,0,LE); if (dx-i-1>bx) { bx=dx-1-i; by=y; } in ocr0_iIjJ()
4921 i+=loop(bp,dx-1-i,y,dx,cs,1,LE); if (dx-i-1<ax) { ax=dx-i; ay=y; } in ocr0_iIjJ()
4923 for(cx=dx,ex=0,ey=cy=y=dy-1;y>dy-1-dy/4;y--){ in ocr0_iIjJ()
4924 i =loop(bp,0,y,dx,cs,0,RI); if (i<cx) { cx=i; cy=y; } in ocr0_iIjJ()
4925 i+=loop(bp,i,y,dx,cs,1,RI); if (i>ex) { ex=i; ey=y; } in ocr0_iIjJ()
4927 x=(3*ax+cx)/4; y=(3*ay+cy)/4; i= loop(bp,x,y,dx,cs,0,RI); in ocr0_iIjJ()
4928 x=(3*bx+ex)/4; y=(3*by+ey)/4; j= loop(bp,x,y,dx,cs,0,LE); in ocr0_iIjJ()
4933 if (loop(bp,dx-1,0,dx,cs,0,LE) in ocr0_iIjJ()
4934 -loop(bp, 0,0,dx,cs,0,RI)>dx/4) ad=96*ad/100; // ~l 5x7 in ocr0_iIjJ()
4944 for(ad=d=100;dy>4 && dy>=dx && dx>2;){ // min 3x4 ~Y)]d', in ocr0_iIjJ()
4970 i1=nearest_frame_vector(box1,i ,aa[1][3], x1+dx,(y0+3*y1)/4); in ocr0_iIjJ()
4972 i2=nearest_frame_vector(box1,i1,aa[3][3], x0-2*dx, y1-dy/8); in ocr0_iIjJ()
4998 if (box1->frame_vector[i7][0]<x0+dx/2) Break; in ocr0_iIjJ()
5000 -box1->frame_vector[i2][0]<=dx/8) Break; // ~1 in ocr0_iIjJ()
5002 -box1->frame_vector[i2][0]<=dx/4) ad=ad*99/100; // ~1 in ocr0_iIjJ()
5051 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_brackets() local
5058 for(ad=d=100;dx>1 && dy>2;){ // min 3x2 in ocr0_brackets()
5068 if (sdata->holes.num > 0 && (dx<6 || dy<6)) Break; /* # */ in ocr0_brackets()
5085 if (2*x-aa[0][0]-aa[1][0]<dx) ad=99*ad/100; in ocr0_brackets()
5139 for(ad=d=100;dx>3 && dy>3;){ // min 4x4 for 4x6 font in ocr0_brackets()
5144 if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) i++; in ocr0_brackets()
5145 if( loop(bp, 0,y,dx,cs,0,RI) in ocr0_brackets()
5146 + loop(bp,dx-1,y,dx,cs,0,LE)<3*dx/8 ) break; in ocr0_brackets()
5152 i2=dx-1-loop(bp,dx-1,dy/2 ,dx,cs,0,LE) // be exact for small fonts in ocr0_brackets()
5153 +dx-1-loop(bp,dx-1,dy/2+dy%2-1,dx,cs,0,LE) in ocr0_brackets()
5154 + loop(bp, 0,dy/2 ,dx,cs,0,RI) in ocr0_brackets()
5155 + loop(bp, 0,dy/2+dy%2-1,dx,cs,0,RI); in ocr0_brackets()
5156 if (abs(i2-2*dx)>1+dx/2) Break; in ocr0_brackets()
5157 if (abs(i2-2*dx)> dx/2) ad=99*ad/100; in ocr0_brackets()
5159 i1=loop(bp,dx-1,dy/16,dx,cs,0,LE); // right side in ocr0_brackets()
5160 i3=loop(bp,dx-1,dy-1 ,dx,cs,0,LE); in ocr0_brackets()
5161 i4=loop(bp, 0,0 ,dx,cs,0,RI); // left side in ocr0_brackets()
5162 i6=loop(bp, 0,dy-1 ,dx,cs,0,RI); in ocr0_brackets()
5169 x=loop(bp,0 ,y,dx,cs,0,RI);if(abs(x-i)>dx/6+1 ) break; i=x; in ocr0_brackets()
5172 x=loop(bp,dx-1,y,dx,cs,0,LE);if(abs(x-i)>dx/6+1 ) break; i=x; in ocr0_brackets()
5174 if(i1<=dx/8 && i6<=dx/8 && i4-(dx-i3)>dx/4 ) { Setac(box1,(bc='/'),ad);break; } in ocr0_brackets()
5175 if(i4<=dx/8 && i3<=dx/8 && i6-(dx-i1)>dx/4 ) { Setac(box1,(bc='\\'),ad);break; } in ocr0_brackets()
5181 for(ad=d=100;dx>1 && dy>4;){ // min 3x4 in ocr0_brackets()
5186 if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) i++; in ocr0_brackets()
5187 if( loop(bp, 0,y,dx,cs,0,RI) in ocr0_brackets()
5188 + loop(bp,dx-1,y,dx,cs,0,LE)<3*dx/8 ) break; in ocr0_brackets()
5194 for(i=dx,r1=r2=y=dy/2-dy/8;y<=dy/2+dy/8;y++){ in ocr0_brackets()
5195 j=loop(bp, 0,y,dx,cs,0,RI); if(j==i) r2=y; if(j<i){ r2=r1=y; i=j; } in ocr0_brackets()
5196 j=loop(bp,dx-1,y,dx,cs,0,LE); if(j==i) r2=y; if(j<i){ r2=r1=y; i=j; } in ocr0_brackets()
5198 i1=loop(bp,dx-1, dy/16,dx,cs,0,LE); in ocr0_brackets()
5199 i2=loop(bp,dx-1,y ,dx,cs,0,LE); in ocr0_brackets()
5200 i3=loop(bp,dx-1,dy-1-dy/16,dx,cs,0,LE); in ocr0_brackets()
5201 i4=loop(bp, 0,dy/16 ,dx,cs,0,RI); in ocr0_brackets()
5202 i5=loop(bp, 0,y ,dx,cs,0,RI); in ocr0_brackets()
5203 i6=loop(bp, 0,dy-1-dy/16,dx,cs,0,RI); in ocr0_brackets()
5204 if(dx>dy){ in ocr0_brackets()
5207 if(i5==0 && 3*i2>dx && i1<=dx/8 && i3<=dx/8) { Setac(box1,(bc='<'),98);{Break;}; } in ocr0_brackets()
5209 if( dx > 2 && 9*dx>=5*dy ){ // 4x6 screen-font (3*5) in ocr0_brackets()
5211 if (dx<8) ad=99*ad/100; in ocr0_brackets()
5212 if (dx<6) ad=96*ad/100; in ocr0_brackets()
5213 if( 2*dx > JOB->res.avX && 4*dx>dy ) ad=98; in ocr0_brackets()
5215 if( i5==0 && i1<=dx/8+1 && i3<=dx/8+1 && i1+i3<=dx/8+1 in ocr0_brackets()
5216 && i2>=dx/2 && i4>=3*dx/4 && i6>=3*dx/4 ) { in ocr0_brackets()
5217 if (2*loop(bp, 0, y/2,dx,cs,0,RI)+1+dx/16<i4+i5) ad=95*ad/100; in ocr0_brackets()
5218 if (2*loop(bp, 0,dy-1-y/2,dx,cs,0,RI)+1+dx/16<i6+i5) ad=95*ad/100; in ocr0_brackets()
5231 i1=loop(bp,dx-1,dy/16,dx,cs,0,LE); in ocr0_brackets()
5232 i2=loop(bp,dx-1,dy/2 ,dx,cs,0,LE); in ocr0_brackets()
5233 i3=loop(bp,dx-1,dy-1 ,dx,cs,0,LE); in ocr0_brackets()
5234 i4=loop(bp, 0,0 ,dx,cs,0,RI); in ocr0_brackets()
5235 i5=loop(bp, 0,dy/2,dx,cs,0,RI); in ocr0_brackets()
5236 i6=loop(bp, 0,dy-1,dx,cs,0,RI); in ocr0_brackets()
5240 if(2*i2<i1+i3 && 2*i5>i4+i6 && 2*dx<dy && dy>=i){ in ocr0_brackets()
5242 if(2*i2>i1+i3 && 2*i5<i4+i6 && 2*dx<dy && dy>=i){ in ocr0_brackets()
5246 i=loop(bp,0,y,dx,cs,0,RI);if( i>x ) x=i; in ocr0_brackets()
5249 i=loop(bp,0,y+dy/8,dx,cs,0,RI);if( i<x ) break; in ocr0_brackets()
5257 for(ad=d=98;dx>2 && dy>4 && dy>=2*dx;){ // (3,6) on 4x6 font in ocr0_brackets()
5262 if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) break; in ocr0_brackets()
5270 if( get_bw(x0+dx/2,x1,y0+dy/4,y1-dy/4,box1->p,cs,1) == 0 ) in ocr0_brackets()
5274 if( get_bw(x0,x1-dx/2,y0+dy/4,y1-dy/4,box1->p,cs,1) == 0 ) in ocr0_brackets()
5281 for(ad=d=100;dx>2 && dy>3;){ in ocr0_brackets()
5292 if (aa[3][0]-aa[0][0]<7*dx/8) Break; in ocr0_brackets()
5293 if (aa[2][0]-aa[1][0]<7*dx/8) Break; in ocr0_brackets()
5312 if (x-x0 > 5*dx/8) Break; in ocr0_brackets()
5315 if ( box1->frame_vector[i3][0]-x> dx/4 in ocr0_brackets()
5333 for(ad=d=98;dx>5 && dy>7 && 2*dy>3*dx;){ // only for accurate font at the moment in ocr0_brackets()
5337 if( num_cross(0,dx-1, 0, 0,bp,cs) != 1 ) break; in ocr0_brackets()
5338 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs) != 1 ) break; in ocr0_brackets()
5339 if ( loop(bp,dx-1,dy/2,dx,cs,0,LE) in ocr0_brackets()
5340 +loop(bp, 0,dy/2,dx,cs,0,RI) <= dx/4 ) break; // O in ocr0_brackets()
5342 if( num_cross(0,dx,y,y,bp,cs) != 2 ) break; in ocr0_brackets()
5351 for(ad=d=99;dx>2 && dy>5 && 2*dy>3*dx;){ in ocr0_brackets()
5356 if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) break; in ocr0_brackets()
5358 for(x=0;x<dx/2;x++){ in ocr0_brackets()
5359 if( num_cross(dx-1-x,dx-1-x,0,dy-1,bp,cs) != 2 ) break; in ocr0_brackets()
5360 } if (y<dx/2) Break; in ocr0_brackets()
5361 if ( num_cross(dx-1,dx-1,dy/4,dy-1-dy/4,bp,cs) != 0 ) Break; in ocr0_brackets()
5363 if ( loop(bp,0,dy-1,dx,cs,0,RI)>3*dx/4 ) ad=99*ad/100; in ocr0_brackets()
5364 if ( loop(bp,0, 0,dx,cs,0,RI)>3*dx/4 ) ad=99*ad/100; // < in ocr0_brackets()
5367 if ( loop(bp,dx-1,0,dx,cs,0,LE) in ocr0_brackets()
5368 + loop(bp,dx-1,2,dx,cs,0,LE) in ocr0_brackets()
5369 - 2*loop(bp,dx-1,1,dx,cs,0,LE) >=dx/8 ) ad=98*ad/100; // < in ocr0_brackets()
5370 if ( loop(bp,dx-2,dy-1,dy,cs,0,UP)>dy/4 ) Break; // f in ocr0_brackets()
5375 for(ad=d=99;dx>2 && dy>5 && 2*dy>3*dx;){ in ocr0_brackets()
5379 if( num_cross(0,dx-1,y,y,bp,cs) != 1 ) break; in ocr0_brackets()
5381 for(x=0;x<dx/2;x++){ in ocr0_brackets()
5383 } if (y<dx/2) Break; in ocr0_brackets()
5385 if ( num_cross(dx-1,dx-1,dy/4,dy-1-dy/4,bp,cs) != 1 ) Break; in ocr0_brackets()
5386 if ( loop(bp,dx-1,dy-1,dx,cs,0,LE)>3*dx/4 ) {ad=99*ad/100;} in ocr0_brackets()
5387 if ( loop(bp,dx-1, 0,dx,cs,0,LE)>3*dx/4 ) {ad=99*ad/100;} // > in ocr0_brackets()
5388 if ( loop(bp,dx-1, 0,dy,cs,0,DO)<dy/2-1 ) {ad=98*ad/100;} in ocr0_brackets()
5389 if ( loop(bp,dx-1,dy-1,dy,cs,0,UP)<dy/2-2 ) {ad=98*ad/100;} // ) in ocr0_brackets()
5390 if ( loop(bp,0,0,dx,cs,0,RI) in ocr0_brackets()
5391 + loop(bp,0,2,dx,cs,0,RI) in ocr0_brackets()
5392 - 2*loop(bp,0,1,dx,cs,0,RI) >=dx/8 ) ad=98*ad/100; // < in ocr0_brackets()
5408 int dx=x1-x0+1,dy=y1-y0+1, /* size */
5422 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0p9() local
5440 for(ad=d=100;dx>3 && dy>6;){ // min 4x7 in ocr0p9()
5455 if( get_bw(x0,x0+dx/2,y,y,box1->p,cs,1) == 0 ) i--; in ocr0p9()
5457 if( get_bw(x1-dx/2,x1,y,y,box1->p,cs,1) == 0 ) i--; in ocr0p9()
5462 i =loop(box1->p,x1,y,dx,cs,0,LE); in ocr0p9()
5463 if( i>=dx/8 ) break; in ocr0p9()
5464 i+=loop(box1->p,x1-i,y,dx,cs,1,LE); in ocr0p9()
5465 if( i>=dx/2 ) break; in ocr0p9()
5469 if( get_bw(x1-dx/6,x1,y,y,box1->p,cs,1) == 1 ) break; in ocr0p9()
5473 if( get_bw(x1-dx/6,x1,y,y,box1->p,cs,1) == 1 ) break; in ocr0p9()
5477 i=loop(box1->p,x1,y,dx,cs,0,LE); in ocr0p9()
5478 if( i>dx/4 in ocr0p9()
5479 && get_bw(x1-dx/8,x1-dx/8,y,y1,box1->p,cs,1) == 1 ) break; in ocr0p9()
5483 if( loop(box1->p,x1,y1, dx,cs,0,LE)==0 in ocr0p9()
5484 && loop(box1->p,x1,y1-dy/4,dx,cs,0,LE)>dx/8 ) break; // ~R in ocr0p9()
5487 for(x=x0+dx/4;x<x1-dx/4;x++) in ocr0p9()
5489 if( x>=x1-dx/4 ) break; in ocr0p9()
5491 i=loop(bp,dx/2,dy-1,dy,cs,0,UP)+dy/64; // Jul00 in ocr0p9()
5492 for(x=dx/5;x<dx/2;x++) in ocr0p9()
5494 if( x==dx/2 ) break; in ocr0p9()
5496 x=x0+loop(bp,0,dy/4,dx,cs,0,RI); in ocr0p9()
5497 for(;x<x1-dx/3;x++) in ocr0p9()
5499 if( x<x1-dx/3 ) break; in ocr0p9()
5510 for(ad=d=100;dx>2 && dy>2;){ // min 3x3 in ocr0p9()
5513 xa=(dx+1)/3-1; ya=(dy+1)/3-1; in ocr0p9()
5514 xb=(dx+1)/4; in ocr0p9()
5520 if( get_bw(x0+dx/9,x1-dx/9,y,y,box1->p,cs,2) == 0 ) { i=y; break; } in ocr0p9()
5522 if (3*dx<2*dy) ad=99*ad/100; // ~t in ocr0p9()
5530 for(ad=d=99;dx>3 && dy>5;){ // min 3x4 in ocr0p9()
5534 if( get_bw(x0,x0+dx/5,y0 ,y0+dy/18,box1->p,cs,1) == 1 ) Break; in ocr0p9()
5535 if( get_bw(x0,x0+dx/9,y1-dy/23,y1 ,box1->p,cs,1) == 1 ) Break; in ocr0p9()
5536 if( get_bw(x1-dx/9,x1,y0 ,y0+dy/18,box1->p,cs,1) == 1 ) Break; in ocr0p9()
5537 if( get_bw(x1-dx/5,x1,y1-dy/23,y1 ,box1->p,cs,1) == 1 ) Break; in ocr0p9()
5538 if( get_bw(x0,x0+dx/3,y0+dy/3 ,y0+dy/2 ,box1->p,cs,1) != 1 ) Break; in ocr0p9()
5539 if( get_bw(x1-dx/3,x1,y1-dy/2 ,y1-dy/3 ,box1->p,cs,1) != 1 ) Break; in ocr0p9()
5540 i1=x0+loop(box1->p,x0,y0,dx,cs,0,RI); if( i1<x0+dx/3 || i1>x1-dx/5 ) Break; in ocr0p9()
5541 i2=x0+loop(box1->p,x0,y1,dx,cs,0,RI); if( i2<x0+dx/5 || i2>i1 ) Break; in ocr0p9()
5546 i = loop(box1->p,x0,y0+dy/2-y,dx,cs,0,RI); in ocr0p9()
5548 } if (x<=dx/4) Break; in ocr0p9()
5551 i = loop(box1->p,x0,y0+dy/2+y,dx,cs,0,RI); in ocr0p9()
5553 } if (x<=dx/4) Break; in ocr0p9()
5561 for(ad=d=99;dx>3 && dy>4;){ /* 4x6 font */ in ocr0p9()
5564 if( get_bw(x1-dx/9,x1,y0,y0+dy/4,box1->p,cs,1) == 1 ) Break; // g in ocr0p9()
5565 if( loop(bp,dx/2,0,dy,cs,0,DO)>dy/2) Break; in ocr0p9()
5566 i1=loop(bp,0,dy/8 ,dx,cs,0,RI); if (i1>dx/2) Break; in ocr0p9()
5567 i =loop(bp,0,dy/4 ,dx,cs,0,RI); if (i1>dx/2) Break; if (i<i1) i1=i; in ocr0p9()
5568 i3=loop(bp,0,dy-dy/4 ,dx,cs,0,RI); if (i3>dx/2) Break; in ocr0p9()
5569 i =loop(bp,0,dy-dy/4-1,dx,cs,0,RI); if (i3>dx/2) Break; if (i<i3) i3=i; in ocr0p9()
5572 i =loop(bp,0,y,dx,cs,0,RI); if( i>i2 ) i2=i; in ocr0p9()
5576 if( num_hole(x0,x1-dx/4,y0,y1,box1->p,cs,NULL)!=2 ) Break; in ocr0p9()
5577 if( num_cross(dx-1,dx-1,dy/4,dy-1,bp,cs) < 1 ) Break; in ocr0p9()
5578 for( x=dx-1; x>=dx/2; x-- ){ in ocr0p9()
5580 } if( x<=3*dx/4 && x<dx-2) Break; in ocr0p9()
5581 if( num_cross(0,dx-1,dy-1-dy/4,dy-1-dy/4,bp,cs) > 3 ) { // glued ah in ocr0p9()
5592 for(ad=d=100;dx>7 && dy>7;){ in ocr0p9()
5595 if( num_cross(0,dx-1, dy/4, dy/4,bp,cs) != 3 ) break; in ocr0p9()
5596 if( num_cross(0,dx-1, dy/2, dy/2,bp,cs) != 4 ) break; in ocr0p9()
5597 if( num_cross(dx/2,dx-1,dy/2, dy/2,bp,cs) != 2 ) break; in ocr0p9()
5598 if( num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs) != 2 ) break; in ocr0p9()
5599 if( num_cross(0,dx-1, dy-1, dy-1,bp,cs) != 1 ) break; in ocr0p9()
5601 if( num_cross( dx/3, dx/3,0,dy-1,bp,cs) != 4 ) break; in ocr0p9()
5602 if( num_cross(13*dx/16,13*dx/16,0,dy/8,bp,cs) != 0 ) break; in ocr0p9()
5603 if( num_cross(4*dx/8,4*dx/8,dy-dy/4,dy-1,bp,cs) != 1 ) break; in ocr0p9()
5604 if( num_cross(3*dx/8,3*dx/8,dy-dy/4,dy-1,bp,cs) != 1 ) break; in ocr0p9()
5605 if( num_cross(5*dx/8,5*dx/8,dy-dy/4,dy-1,bp,cs) != 1 ) break; in ocr0p9()
5607 if( num_hole(x0+dx/8,x1-dx/4,y0,y1-dy/4,box1->p,cs,NULL) != 1 ) break; in ocr0p9()
5614 for(ad=d=98;dx>2 && dy>5;){ // min 3x(4+2) in ocr0p9()
5641 if( get_bw(x0+7*dx/8,x1,y,i1,box1->p,cs,1) == 1 ) Break; // broken thin 2 in ocr0p9()
5647 for(ad=d=99; dy>4 && dy>2*dx;){ // min 3x4 in ocr0p9()
5659 if ((dx>2 && get_bw(x0+1,x1-1,y1+1,box1->m4,box1->p,cs,1) == 1) in ocr0p9()
5660 || (dx<3 && get_bw(x0 ,x1 ,y1+1,box1->m4,box1->p,cs,1) == 1 )) { in ocr0p9()
5671 if( loop(bp,dx-1,dy/8,dx,cs,0,LE) in ocr0p9()
5672 -loop(bp,dx-1, 0,dx,cs,0,LE)>dx/4+1 ) Break; // f in ocr0p9()
5679 for(ad=d=99;dx>2 && dy>4;){ in ocr0p9()
5682 if( num_cross(0,dx-1, 0,dy-1,bp,cs) != 1 in ocr0p9()
5683 && num_cross(0,dx-1, 1,dy-2,bp,cs) != 1 ) Break; in ocr0p9()
5684 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs) != 2 in ocr0p9()
5685 && num_cross(0,dx-1,dy-2,dy-2,bp,cs) != 2 ) Break; in ocr0p9()
5686 x=dx/2;y=(6*dy+8)/16; // center point 6/8=6/2^3 rounded in ocr0p9()
5689 if (dx<8) /* be exact on small fonts, where get_line2 returns 100 (ToDo change) */ in ocr0p9()
5692 dbg[1]=i=get_line2(0,y,dx-1,y,bp,cs,100); if(i<95) Break; in ocr0p9()
5694 if (get_bw(0,dx-1,y ,y ,bp,cs,2)==2 in ocr0p9()
5695 && get_bw(0,dx-1,y+1,y+1,bp,cs,2)==2) Break; in ocr0p9()
5697 i=get_line2(x,y,(5*dx+4)/8,dy-1,bp,cs,100); in ocr0p9()
5698 j=get_line2(x,y,(6*dx+4)/8,dy-1,bp,cs,100); if(j>i) dbg[2]=i=j; in ocr0p9()
5701 dbg[3]=i=get_line2(x, y,(2*dx+4)/8,dy-1,bp,cs,100); if(i<95) Break; // straight up in ocr0p9()
5704 dbg[5]=i=get_line2( dx/4,dy/4, 0,0,bp,cs,101); if(i<95) Break; // upper left gap in ocr0p9()
5705 dbg[6]=i=get_line2(dx-1-dx/4,dy/4,dx-1,0,bp,cs,101); if(i<95) Break; // upper right gap in ocr0p9()
5711 for(ad=d=100;dx>4 && dy>4;){ in ocr0p9()
5714 if( num_cross(0,dx-1, dy/8, dy/8,bp,cs) != 3 in ocr0p9()
5715 && num_cross(0,dx-1, 1+dy/8, 1+dy/8,bp,cs) != 3) Break; in ocr0p9()
5716 if( num_cross(0,dx-1,dy-2-dy/8,dy-2-dy/8,bp,cs) != 3) Break; in ocr0p9()
5718 if( num_cross(dx-1,dx-1, 0,dy-1,bp,cs) != 2) Break; in ocr0p9()
5719 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs) != 1) Break; in ocr0p9()
5720 if( num_cross( 0 ,dx/8,dy/2,dy/2,bp,cs) != 0) Break; in ocr0p9()
5721 if( num_cross(dx-1-dx/8,dx-1,dy/2,dy/2,bp,cs) != 0) Break; in ocr0p9()
5722 if (dx>5) { in ocr0p9()
5723 dbg[0]=i=get_line2(0,dy-2-dy/8,dx-1,dy/8,bp,cs,100); if(i<95) Break; // black upwarts beam in ocr0p9()
5724 dbg[1]=i=get_line2(0,dy/8,dx-1,dy-2-dy/8,bp,cs,100); if(i<95) Break; // black downwards beam in ocr0p9()
5726 dbg[2]=i=get_line2(dx/2,0,dx/2, dy-1,bp,cs,100); if(i<95) Break; in ocr0p9()
5734 for(ad=d=99;dx>5 && dy>7;){ in ocr0p9()
5737 if (loop(bp, 0,dy/2,dx,cs,0,RI)>dx/4) Break; in ocr0p9()
5738 if (loop(bp,dx-1,dy/2,dx,cs,0,LE)>dx/4) Break; in ocr0p9()
5739 if (loop(bp,dx/2,dy-1,dy,cs,0,UP)>dx/8) Break; in ocr0p9()
5740 if (loop(bp,dx/2, 0,dy,cs,0,DO)>dx/8) Break; in ocr0p9()
5751 x=6*dx/16; in ocr0p9()
5753 i=num_cross(0,dx-1,y,y,bp,cs); in ocr0p9()
5755 if( i != 4 && dx>8 ) ad=98*ad/100; in ocr0p9()
5765 if( num_cross(x,dx-1,y,y,bp,cs) != 2 ) Break; in ocr0p9()
5768 if (dx>7) { in ocr0p9()
5771 if( num_hole(x0+dx/8,x1-3*dx/16,y0+dy/8,y1-dy/8,box1->p,cs,NULL) != 1 ) Break; in ocr0p9()
5778 for(ad=d=100;dx>4 && dy>15;){ in ocr0p9()
5781 if( get_bw( 0,dx/2,3*dy/4,3*dy/4,bp,cs,1) == 1 ) break; in ocr0p9()
5782 if( get_bw(3*dx/4,dx-1,3*dy/4,3*dy/4,bp,cs,1) == 0 ) break; in ocr0p9()
5783 if( get_bw( 0,dx/4, dy/4, dy/4,bp,cs,1) == 0 ) break; in ocr0p9()
5784 if( get_bw( dx/2,dx-1, dy/4, dy/4,bp,cs,1) == 1 ) break; in ocr0p9()
5785 if( get_bw(dx/2,dx/2, 0, dy/4,bp,cs,1) == 0 ) break; in ocr0p9()
5786 if( get_bw(dx/2,dx/2,dy-1-dy/4, dy-1,bp,cs,1) == 0 ) break; in ocr0p9()
5787 if( num_cross(dx/2,dx/2,0,dy-1,bp,cs) != 4 ) break; in ocr0p9()
5802 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0px() local
5819 for(ad=98;dx>4 && dy>6;){ // Dec00 body copied from H in ocr0px()
5822 if( num_cross(0,dx-1, dy/4 , dy/4 ,bp,cs) != 2 in ocr0px()
5823 && num_cross(0,dx-1,3*dy/16,3*dy/16,bp,cs) != 2 ) break; in ocr0px()
5824 if( num_cross(0,dx-1,3*dy/4 ,3*dy/4 ,bp,cs) != 2 in ocr0px()
5825 && num_cross(0,dx-1,3*dy/4+1,3*dy/4+1,bp,cs) != 2 ) break; in ocr0px()
5826 if( loop(bp,0 ,dy/8,dx,cs,0,RI) in ocr0px()
5827 + loop(bp,dx-1,dy/8,dx,cs,0,LE)>dx/2 ) break; // ~A in ocr0px()
5829 { j=loop(box1->p,x0 ,y,dx,cs,0,RI) in ocr0px()
5830 +loop(box1->p,x1 ,y,dx,cs,0,LE); in ocr0px()
5831 if( j>10*dx/16 ) i=0; if ( j>j1 ) j1=j; } in ocr0px()
5833 for( x=dx/4; x<dx/2; x++ ){ // lower gap in ocr0px()
5837 i=loop(bp,x ,dy-y,dx,cs,0,RI); in ocr0px()
5840 } if( x>=dx/2 ) break; in ocr0px()
5841 x=loop(box1->p,x0 ,y1-dy/8,dx,cs,0,RI) in ocr0px()
5842 +loop(box1->p,x1 ,y1-dy/8,dx,cs,0,LE); in ocr0px()
5844 { j=loop(bp,0 ,y,dx,cs,0,RI) in ocr0px()
5845 +loop(bp,dx-1,y,dx,cs,0,LE); if( j-x>dx/5 ) i=0; } in ocr0px()
5848 { j=loop(box1->p,x0 ,y,dx,cs,0,RI); in ocr0px()
5849 j=loop(box1->p,x0+j,y,dx,cs,1,RI); if( j>i ) { i=j; ya=y; } } in ocr0px()
5850 if( i<=dx/2 ) break; ya-=y0; in ocr0px()
5851 if( num_cross(0,dx-1,ya ,ya ,bp,cs) != 1 in ocr0px()
5852 && num_cross(0,dx-1,ya+1,ya+1,bp,cs) != 1 ) break; /* Dec00 */ in ocr0px()
5854 if( num_cross(0,dx-1,y ,y ,bp,cs) > 2 in ocr0px()
5855 && num_cross(0,dx-1,y+1,y+1,bp,cs) > 2 ) break; in ocr0px()
5857 for(i=1,x=x0+dx/2;x<=x1-dx/4 && i;x++){ in ocr0px()
5860 for(i=1,x=x0+dx/4;x<=x1-dx/4 && i;x++){ in ocr0px()
5863 for(i=1,x=x0+dx/4;x<=x1-dx/4 && i;x++){ in ocr0px()
5872 if( num_cross(x0 ,x0+dx/8 ,y0+dy/8 ,y0 ,box1->p,cs) != 0 ) ad=96*ad/100; in ocr0px()
5873 if( get_bw(x1-dx/8, x1 , y0, y0+dy/8,box1->p,cs,1) != 1 ) break; in ocr0px()
5874 if( get_bw(x0 , x0+dx/8, y1-dy/8, y1,box1->p,cs,1) != 1 ) break; in ocr0px()
5875 i1=loop(bp,dx-1, dy/4,dx,cs,0,LE); if(i1>dx/2) break; in ocr0px()
5876 i2=loop(bp,dx-1, dy/2,dx,cs,0,LE); if(i2<i1-dx/4 || i2>i1+dx/8) break; in ocr0px()
5877 i3=loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE); if(i3<i2-dx/4 || i3>i2+dx/8) break; in ocr0px()
5878 if(abs(i1+i3-2*i2)>dx/16+1) break; in ocr0px()
5888 for(ad=98;dx>4 && dy>6;){ // provisorium in ocr0px()
5891 if( num_cross( dx/4,dx-1,3*dy/16,3*dy/16,bp,cs) != 2 in ocr0px()
5892 && num_cross(dx-1-dx/4,dx-1,3*dy/16,3*dy/16,bp,cs) != 1 ) Break; in ocr0px()
5893 if( num_cross(0,dx-1,3*dy/ 4,3*dy/ 4,bp,cs) < 2 ) Break; in ocr0px()
5894 if( num_cross(0,dx-1, 0, dy-1,bp,cs) < 3 ) Break; in ocr0px()
5895 if( num_cross(dx-1,0, 0, dy-1,bp,cs) < 3 ) Break; in ocr0px()
5896 if( num_cross(0,dx-1, dy/16, dy/16,bp,cs) < 2 ) in ocr0px()
5897 if( num_cross(0,dx-1,1+dy/16,1+dy/16,bp,cs) < 2 ) Break; in ocr0px()
5898 if( num_cross(0,dx-1,dy-1-dy/16,dy-1-dy/16,bp,cs) < 2 ) Break; in ocr0px()
5900 j=loop(bp,0,y,dx,cs,0,RI); if(j>x) { i2=y; x=j; } in ocr0px()
5901 } if( x<dx/4 || x>3*dx/4 ) Break; in ocr0px()
5903 j=loop(bp,dx-1,y,dx,cs,0,LE); if(j>x) { i4=y; x=j; } in ocr0px()
5904 } if( x<dx/4 || x>3*dx/4 ) Break; in ocr0px()
5906 j=loop(bp,dx-1 ,y,dx,cs,0,LE); in ocr0px()
5907 j=loop(bp,dx-1-j,y,dx,cs,1,LE); in ocr0px()
5909 } if( x<dx/4 ) Break; in ocr0px()
5910 if( num_hole(x0,x0+3*dx/4,y0+dy/4,y1,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
5911 if( num_hole(x0+dx/2-1,x1,y0,y1-dy/4,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
5920 for(ad=98;dx>5 && dy>6;){ // provisorium in ocr0px()
5923 if( num_cross(0,dx-1,3*dy/16,3*dy/16,bp,cs) < 2 ) Break; in ocr0px()
5924 if( num_cross(0,dx-1,3*dy/ 4,3*dy/ 4,bp,cs) < 2 ) Break; in ocr0px()
5925 if( num_cross(0,dx-1, 0, dy-1,bp,cs) < 3 ) Break; in ocr0px()
5926 if( num_cross(0,dx-1, dy/16, dy/16,bp,cs) != 1 in ocr0px()
5927 && num_cross(0,dx-1, dy/32, dy/32,bp,cs) != 1 in ocr0px()
5928 && num_cross(0,dx-1, 0, 0,bp,cs) != 1 ) Break; in ocr0px()
5930 j=loop(bp,dx-1 ,0,dx,cs,0,LE); x=j; in ocr0px()
5931 j=loop(bp,dx-1-j,0,dx,cs,1,LE); in ocr0px()
5932 i=loop(bp,dx-1 ,1,dx,cs,0,LE); if (i<x) x=i; in ocr0px()
5933 i=loop(bp,dx-1-i,1,dx,cs,1,LE); in ocr0px()
5935 if (x>dx/8) Break; in ocr0px()
5936 if (j<dx/4) Break; in ocr0px()
5937 for( x=dx,i1=i3=0,i2=y=dy/4; y<3*dy/4; y++ ){ in ocr0px()
5938 j=loop(bp, 0,y,dx,cs,0,RI); if(j>x) break; x=j; in ocr0px()
5939 j=loop(bp, j,y,dx,cs,1,RI); if(j>i1) { i1=j; i2=y; } in ocr0px()
5940 j=loop(bp,dx-1 ,y,dx,cs,0,LE); in ocr0px()
5941 j=loop(bp,dx-1-j,y,dx,cs,1,LE); if(j>i3) { i3=j; i4=y; } in ocr0px()
5942 } if( y<3*dy/4 || i1<dx/4-1 || i3<dx/4-1) Break; in ocr0px()
5944 j=loop(bp,dx-1 , y,dx,cs,0,LE); in ocr0px()
5945 j=loop(bp,dx-1-j, y,dx,cs,1,LE); if(j>i1) { i1=j; } in ocr0px()
5946 j=loop(bp,dx-1 ,dy-1-y,dx,cs,0,LE); in ocr0px()
5947 j=loop(bp,dx-1-j,dy-1-y,dx,cs,1,LE); if(j>i3) { i3=j; } in ocr0px()
5948 } if( i1<=dx/4 || i3<=dx/4 ) Break; in ocr0px()
5949 for( x=dx-1-dx/8; x>dx/2; x-- ){ // look for right the E in ocr0px()
5952 if( num_cross(x-1,dx-1-dx/8,3*dy/4,3*dy/4,bp,cs) == 0 ) in ocr0px()
5954 } if (x<=dx/2) Break; // not found in ocr0px()
5956 if( num_hole(x0,x0+3*dx/4,y0,y1-dy/4,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
5965 for(ad=99;dx>4 && dy>4;){ // provisorium in ocr0px()
5968 if( num_cross( 0,dx-1,dy/2,dy/2,bp,cs) != 3 ) Break; in ocr0px()
5969 if( num_cross(dx/2,dx/2, 0,dy-1,bp,cs) != 3 ) Break; in ocr0px()
5970 if (loop(bp,dx-1,3*dy/8,dx,cs,0,RI)>dx/8) Break; in ocr0px()
5971 if (loop(bp, 0,5*dy/8,dx,cs,0,RI)>dx/8) Break; in ocr0px()
5972 if( num_cross( 0,dx-1, 0, 0,bp,cs) > 2 ) Break; in ocr0px()
5973 if( num_cross(dx/4,dx-1, 0, 0,bp,cs) > 2 ) Break; in ocr0px()
5974 if( num_cross( 0,dx-1,dy-1,dy-1,bp,cs) > 2 ) Break; in ocr0px()
5975 if( num_cross( 0,3*dx/4,dy-1,dy-1,bp,cs) > 2 ) Break; in ocr0px()
5977 if( num_cross(dx-1,dx-1, 0,dy-1,bp,cs) > 2 ) Break; in ocr0px()
5979 if( num_cross(dx-1,dx-1, 0,3*dy/4,bp,cs) > 2 ) Break; in ocr0px()
5980 i1 =loop(bp,dx-1 , 0,dx,cs,0,LE); if( i1>dx/8 ) Break; in ocr0px()
5981 i1+=loop(bp,dx-1-i1, 0,dx,cs,1,LE); if( i1>dx/3 ) Break; i1=dx-1-i1; in ocr0px()
5982 i2 =loop(bp, 0,dy-1,dx,cs,0,RI); if( i2>dx/8 ) Break; in ocr0px()
5984 x=i1+y*(i2-i1)/dy-dx/8; if(x<0)x=0; in ocr0px()
5985 j=loop(bp,x,y,dx,cs,0,RI); if( j>3*dx/16 ) break; in ocr0px()
5987 if( num_cross( 0 ,dx/4,dy/2,dy/2,bp,cs) != 1 ) Break; in ocr0px()
5988 if( num_cross(dx-1-dx/4,dx-1,dy/2,dy/2,bp,cs) != 1 ) Break; in ocr0px()
5989 if( num_cross(dx/4,dx-1-dx/4,dy/2,dy/2,bp,cs) != 1 ) Break; in ocr0px()
6004 for(ad=98;dx>4 && dy>4;){ // provisorium in ocr0px()
6007 if( num_cross( 0,dx-1,dy/2,dy/2,bp,cs) != 2 ) Break; in ocr0px()
6008 if( num_cross(0,dx-1-dx/4,dy/2,dy/2,bp,cs) != 2 ) Break; in ocr0px()
6009 if( num_cross(dx/2,dx/2, 0,dy-1,bp,cs) != 3 ) Break; in ocr0px()
6010 if( num_cross( 0,dx-1, 0, 0,bp,cs) > 2 ) Break; in ocr0px()
6011 if( num_cross(dx/4,dx-1, 0, 0,bp,cs) > 2 ) Break; in ocr0px()
6012 if( num_cross( 0,dx-1,dy-1,dy-1,bp,cs) > 2 ) Break; in ocr0px()
6013 if( num_cross( 0,3*dx/4,dy-1,dy-1,bp,cs) > 2 ) Break; in ocr0px()
6015 if( num_cross(dx-1,dx-1, 0,dy-1,bp,cs) > 3 ) Break; in ocr0px()
6017 if( num_cross(dx-1,dx-1, 0,3*dy/4,bp,cs) > 3 ) Break; in ocr0px()
6018 i1 =loop(bp,dx-1 , 0,dx,cs,0,LE); if( i1>dx/4 ) Break; in ocr0px()
6019 i1+=loop(bp,dx-1-i1, 0,dx,cs,1,LE); if( i1>dx/4 ) Break; i1=dx-1-i1; in ocr0px()
6020 i2 =loop(bp, 0,dy-1,dx,cs,0,RI); if( i2>dx/4 ) Break; in ocr0px()
6022 x=i1+y*(i2-i1)/dy; if(x>dx/16+1) x-=dx/16+1; in ocr0px()
6023 j=loop(bp,x,y,dx,cs,0,RI); // fprintf(stderr,"\n x=%d j=%d",x,j); in ocr0px()
6024 if( j>(dx+4)/8 ) ad=96*ad/100; in ocr0px()
6025 if( j>(dx+2)/4 ) break; in ocr0px()
6027 if( num_cross( 0 ,dx/4,dy/2,dy/2,bp,cs) != 1 ) Break; in ocr0px()
6028 if( num_cross(dx-1-dx/4,dx-1,dy/2,dy/2,bp,cs) != 0 ) Break; in ocr0px()
6029 if( num_cross(dx/4,dx-1-dx/4,dy/2,dy/2,bp,cs) != 1 ) Break; in ocr0px()
6041 for(ad=98;dx>4 && dy>6;){ // provisorium in ocr0px()
6044 if( num_cross(dx/2,dx/2, 0,dy-1,bp,cs) != 4 ) break; in ocr0px()
6045 if( num_cross( 0,dx-1, 0, 0,bp,cs) != 1 ) break; in ocr0px()
6046 if( num_cross( 0,dx-1,dy-1,dy-1,bp,cs) != 1 ) break; in ocr0px()
6047 if( num_cross( 0,dx-1,dy/2,dy/2,bp,cs) != 1 ) break; in ocr0px()
6049 x=loop(bp,0,y,dx,cs,0,RI); if( x>dx/4 ) break; in ocr0px()
6050 j=loop(bp,x,y,dx,cs,1,RI); if( j>i ) i=j; in ocr0px()
6051 } if( y<dy-dy/4-1 || i<dx/2 ) break; in ocr0px()
6053 x=loop(bp,dx-1,y,dx,cs,0,LE); if( x>dx/2 ) break; in ocr0px()
6065 for(ad=98;dx>3 && dy>6;){ // provisorium in ocr0px()
6068 j=loop(bp,dx-1,dy/16 ,dy,cs,0,LE); in ocr0px()
6069 x=loop(bp,dx-1,dy/16+1,dy,cs,0,LE); if (x<j) j=x; in ocr0px()
6070 if (3*x>dx) Break; // ~4 ocr-b in ocr0px()
6071 if( num_cross(0,dx-1,3*dy/16,3*dy/16,bp,cs) > 2 ) break; in ocr0px()
6072 if( num_cross(0,dx-1, 0, dy-1,bp,cs) < 2 ) break; in ocr0px()
6073 if( num_cross(0,dx-1, dy/16, dy/16,bp,cs) > 2 ) break; in ocr0px()
6074 for( x=dx,i2=y=dy/4; y<3*dy/4; y++ ){ in ocr0px()
6075 j=loop(bp,0,y,dx,cs,0,RI); if(j<x) { i2=y; x=j; } in ocr0px()
6078 j=loop(bp,dx-1,y,dx,cs,0,LE); if(j>x) { i4=y; x=j; } in ocr0px()
6079 } if( x<dx/2 ) break; i3=x; in ocr0px()
6080 j =loop(bp,dx/2,0,dy,cs,0,DO); in ocr0px()
6081 j+=loop(bp,dx/2,j,dy,cs,1,DO); if(j>dy/4) break; in ocr0px()
6082 j =loop(bp,dx/2,j,dy,cs,0,DO); if(j<dy/2) break; in ocr0px()
6083 j =loop(bp,dx-1 ,dy-1-dy/8,dx,cs,0,LE); if(j<dx/4 || 4*j>3*dx) break; in ocr0px()
6084 j =loop(bp,dx-1-j/2,dy-1-dy/8,dy,cs,0,UP); if(j>dy/2) break; // ~() in ocr0px()
6095 for(ad=99;dx>4 && dy>4;){ // never sure? in ocr0px()
6099 if( num_cross(0,dx-1, dy/8, dy/8,bp,cs) != 2 ) Break; in ocr0px()
6100 if( num_cross(0,dx-1,dy-1-dy/8,dy-1-dy/8,bp,cs) != 2 ) Break; in ocr0px()
6101 if( num_cross(0,dx-1, dy/2, dy/2,bp,cs) != 2 ) Break; in ocr0px()
6102 if( num_cross(0,dx/2, dy/2, dy/2,bp,cs) != 1 ) Break; in ocr0px()
6104 … j=loop(bp, 0,dy/8,dx,cs,0,RI); if(j<1 || j<dx/16) Break; if (j<dx/8) {ad=ad*96/100;} in ocr0px()
6105 … j=loop(bp, 0,dy/2,dx,cs,0,RI); if(j<1 || j<dx/16 || j>=dx/2) Break; if (j<dx/8) {ad=ad*96/100;} in ocr0px()
6106 … j=loop(bp,dx-1,dy/2,dx,cs,0,LE); if(j<1 || j<dx/16 || j>=dx/2) Break; if (j<dx/8) {ad=ad*96/100;} in ocr0px()
6107 … j=loop(bp,dx-1,dy-1,dx,cs,0,LE); if(j<1 || j<dx/16) Break; if (j<dx/8) {ad=ad*96/100;} in ocr0px()
6109 j=loop(bp,0, y,dx,cs,0,RI); if(j>3*dx/4) { i1=0; break; } in ocr0px()
6110 j=loop(bp,j, y,dx,cs,1,RI); if(j>i1) { i1=j; } in ocr0px()
6111 j=loop(bp,0,dy-1-y,dx,cs,0,RI); if(j>3*dx/4) { i1=0; break; } in ocr0px()
6112 j=loop(bp,j,dy-1-y,dx,cs,1,RI); if(j>i3) { i3=j; } in ocr0px()
6114 if (i1<dx-dx/4 || i3<dx-dx/4) Break; in ocr0px()
6115 if (i1<dx-dx/8) ad=97*ad/100; in ocr0px()
6116 if (i3<dx-dx/8) ad=97*ad/100; in ocr0px()
6118 if( num_hole(x0+dx/8,x1-dx/8,y0+dy/8,y1-dy/8,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
6129 for(ad=96;dx>4 && dy>4 && 2*dx>dy;){ // provisorium in ocr0px()
6139 for(ad=99;dy>4 && 2*dx<dy;){ /* v0.44 */ in ocr0px()
6142 if( get_bw(x0+dx/8,x1-dx/8,y0+dy/9,y1-dy/9,box1->p,cs,2) != 0 ) break; in ocr0px()
6144 if( get_bw(x0 ,x0+dx/8,y0+dy/9,y1-dy/9,box1->p,cs,2) != 0 ) ad=99*ad/100; in ocr0px()
6145 if( get_bw(x1-dx/8,x1 ,y0+dy/9,y1-dy/9,box1->p,cs,2) != 0 ) ad=99*ad/100; in ocr0px()
6146 if( get_bw(x0+dx/8,x1-dx/8,y0 ,y0+dy/8,box1->p,cs,2) != 0 ) ad=99*ad/100; in ocr0px()
6147 if( get_bw(x0+dx/8,x1-dx/8,y1-dy/8,y1 ,box1->p,cs,2) != 0 ) ad=99*ad/100; in ocr0px()
6148 if (3*dx<dy) ad=98*ad/100; in ocr0px()
6149 if (4*dx<dy) ad=99*ad/100; in ocr0px()
6158 for(ad=100;dx>5 && dy>7;){ // provisorium in ocr0px()
6163 if( num_cross(x0,x1+dx/4,y1-dy/4,y1-dy/4,box1->p,cs) != 3 in ocr0px()
6164 && num_cross(x0,x1+dx/4,y1-dy/8,y1-dy/8,box1->p,cs) != 3 ) Break; in ocr0px()
6166 && num_cross(x0+dx/8,x1, y0, y1,box1->p,cs) < 4 in ocr0px()
6167 && num_cross(x0,x1+dx/4, y0, y1,box1->p,cs) < 4 in ocr0px()
6168 && dx>7 && dy>15) Break; in ocr0px()
6171 if (dx>7 && dy>12) { in ocr0px()
6173 if( num_hole(x0+dx/4,x1+dx/4,y0+dy/4,y1,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
6174 if( num_hole(x0 ,x1+dx/4,y0,y1 ,box1->p,cs,NULL) != 2 ) Break; in ocr0px()
6177 if ( loop(box1->p,x0,y0 ,dx,cs,0,RI) in ocr0px()
6178 <= loop(box1->p,x0,y0+dy/16+1,dx,cs,0,RI) ) ad=96*ad/100; // X in ocr0px()
6179 if ( loop(box1->p,x1,y1 ,dx,cs,0,LE) in ocr0px()
6180 <= loop(box1->p,x1,y1-1-dy/16,dx,cs,0,LE) ) ad=96*ad/100; // X in ocr0px()
6181 for (x=0;x<dx;x++) { /* look for a vertical line and break if found */ in ocr0px()
6183 } if (x<dx) Break; // ~gluedVI in ocr0px()
6191 for(ad=d=99;dx>7 && dy>7;){ // min 3x4 in ocr0px()
6193 if( get_bw(x0 , x0+dx/2,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0px()
6194 if( get_bw(x1-dx/2 , x1 ,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0px()
6195 if( get_bw(x0+dx/2 , x0+dx/2,y0 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0px()
6196 if( get_bw(x0+dx/2 , x0+dx/2,y0+dy/3 , y1-dy/3,box1->p,cs,1) != 0 ) Break; in ocr0px()
6198 if( num_cross(x0+dx/2,x0+dx/2,y0 , y1-dy/3,box1->p,cs) != 1 ) Break; in ocr0px()
6199 if( num_cross(x0+dx/3,x1-dx/3,y0 , y0 ,box1->p,cs) != 1 ) // AND in ocr0px()
6200 if( num_cross(x0+dx/3,x1-dx/3,y0+1 , y0+1 ,box1->p,cs) != 1 ) Break; in ocr0px()
6201 if( num_cross(x0+dx/3,x1-dx/3,y1 , y1 ,box1->p,cs) != 2 ) // against "rauschen" in ocr0px()
6202 if( num_cross(x0+dx/3,x1-dx/3,y1-1 , y1-1 ,box1->p,cs) != 2 ) Break; in ocr0px()
6212 if( loop(bp,dx/2,dy-dy/4,x1-x0,cs,0,RI)>dx/4 in ocr0px()
6213 || loop(bp,dx/2,dy-dy/4,x1-x0,cs,0,LE)>dx/4 ) Break; in ocr0px()
6214 if( loop(bp,dx/2,3*dy/8,x1-x0,cs,0,RI)<dx/4 in ocr0px()
6215 || loop(bp,dx/2,3*dy/8,x1-x0,cs,0,LE)<dx/4 ) Break; in ocr0px()
6217 i=loop(bp,0,dy-1-dy/16,x1-x0,cs,0,RI); if(i>dx/8) Break; in ocr0px()
6218 x=loop(bp,i,dy-1-dy/16,x1-x0,cs,1,RI); i+=x; if(i<3*dx/8 || i>dx/2) Break; in ocr0px()
6219 x=loop(bp,i,dy-1-dy/16,x1-x0,cs,0,RI); i+=x; if(i<dx/2 || i>5*dx/8) Break; in ocr0px()
6220 x=loop(bp,i,dy-1-dy/16,x1-x0,cs,1,RI); i+=x; if(i<7*dx/8) Break; in ocr0px()
6223 for( x=dx/4;x<3*dx/4;x++ ){ in ocr0px()
6227 if( x>=3*dx/4 ) Break; in ocr0px()
6242 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0() local
6276 j=0; d=sq((x-x0)*128/dx)+sq((y-y0)*128/dy); in ocr0()
6280 j=1; d=sq((x-x0)*128/dx)+sq((y-y1)*128/dy); in ocr0()
6283 j=2; d=sq((x-x1)*128/dx)+sq((y-y1)*128/dy); in ocr0()
6286 j=3; d=sq((x-x1)*128/dx)+sq((y-y0)*128/dy); in ocr0()
6316 DBG( IFV out_b(box1,sdata.bp,0,0,dx,dy,160); ) in ocr0()
6325 for( ad=100; 2*dy<box1->m3-box1->m2 && 3*dx>=4*dy && dx>2; ){ // min 3x3 (small font) in ocr0()
6327 if( get_bw(x0+dx/8+1,x1-dx/8-1,y0+dy/8+((dy>2)?1:0), in ocr0()
6330 if (dx<=2*dy) ad=98*ad/100; in ocr0()
6331 if (dx<=3*dy) ad=99*ad/100; in ocr0()
6335 if ( dx<2*dy) ad=98*ad/100; in ocr0()
6336 if (2*dx<3*dy) ad=98*ad/100; in ocr0()
6345 for( ; dy>2 && dx>2; ){ // min 3x3 (small font) in ocr0()
6348 if( get_bw(x0+dx/10,x1-dx/10,y ,y ,box1->p,cs,1)==1 ) break; in ocr0()
6349 if( get_bw(x0+dx/10,x1-dx/10,y ,y ,box1->p,cs,2)==2 ) break; in ocr0()
6351 if( get_bw(x0+dx/10,x1-dx/10,y1 ,y1 ,box1->p,cs,2)==2 ) break; in ocr0()
6356 for( ad=100; dy>2 && dy>=2*dx; ){ // max 3x3 (small font) in ocr0()
6361 if( get_bw(x0+dx/8,x1-dx/8,y0+i1,y0+i1,box1->p,cs,1)==0 ) break; in ocr0()
6364 if( get_bw(x0+dx/8,x1-dx/8,y1-i2,y1-i2,box1->p,cs,1)==0 ) break; in ocr0()
6372 if (abs(i1-dx)>dy/4) Break; // round or quadratic dots? in ocr0()
6373 if (abs(i1-dx)>dy/8) ad=98*ad/100; in ocr0()
6374 if (abs(i2-dx)>dy/4) Break; // round or quadratic dots? in ocr0()
6375 if (abs(i2-dx)>dy/8) ad=98*ad/100; in ocr0()
6384 for( ad=100; dy>5 && dx>1 && dy>2*dx; ){ // max 3x3 (small font) in ocr0()
6396 for (y=0;y<dy;y++) for (x=0;x<dx/2;x++) in ocr0()
6397 if ((getpixel(bp,x,y)<cs)!=(getpixel(bp,dx-1-x,y)<cs)) { y=dy+1; break; } in ocr0()
6407 if( 3*dy<box1->m4-box1->m1 && abs(dx-dy)<(dx+dy)/4+2 in ocr0()
6413 rx=100*(2*x-(x0+x1))/dx; // normalize to 15bit number in ocr0()
6432 && (2*dx<3*dy in ocr0()
6433 || get_bw(0,dx/2,dy/2,dy-1,bp,cs,1)==0) ){ // ocr-a-, in ocr0()
6436 if (dy==1 && dx==1) ad=98*ad/100; in ocr0()
6437 if (dy==2 && dx==1) ad=99*ad/100; // this is a problem case in ocr0()
6438 if (dx>=dy) ad=99*ad/100; in ocr0()
6445 if( loop(box1->p,x0,(y0+y1+1)/2,x1-x0,cs,0,RI)<dx/2 ) ad=98*ad/100; in ocr0()
6446 if( loop(box1->p,x1, y1 ,x1-x0,cs,0,LE)<dx/2 ) ad=98*ad/100; in ocr0()
6447 if( loop(box1->p,x0,y1-((dy>5)?1:0),x1-x0,cs,0,LE)>(dx+1)/2 ) in ocr0()
6448 if( loop(box1->p,x0, y1 ,x1-x0,cs,0,LE)>(dx+1)/2 ) ad=96*ad/100; in ocr0()
6463 if (dx>4 in ocr0()
6471 if (dx>dy) { ad=96*ad/100; MSG({}) } in ocr0()
6478 if( 2*dy<box1->m4-box1->m1 && dx>=dy && dx>3 && dy>1 in ocr0()
6481 if( loop(box1->p,x0,y0,dx,cs,0,RI) in ocr0()
6482 > loop(box1->p,x0,y1,dx,cs,0,RI) in ocr0()
6483 && loop(box1->p,x1,y0,dx,cs,0,LE) in ocr0()
6484 < loop(box1->p,x1,y1,dx,cs,0,LE) in ocr0()
6493 if( 2*dy<box1->m4-box1->m1 && dx>=dy && dx>2 && dy>1 in ocr0()
6497 if( ( loop(box1->p,x0,y0 ,dx,cs,0,RI) in ocr0()
6498 > loop(box1->p,x0,y1 ,dx,cs,0,RI)-dx/8 in ocr0()
6499 || loop(box1->p,x0,y0 ,dx,cs,0,RI) in ocr0()
6500 > loop(box1->p,x0,y1-1,dx,cs,0,RI)-dx/8 ) in ocr0()
6501 && ( loop(box1->p,x1,y0 ,dx,cs,0,LE) in ocr0()
6502 > loop(box1->p,x1,y1 ,dx,cs,0,LE)-dx/8 in ocr0()
6503 || loop(box1->p,x1,y0 ,dx,cs,0,LE) in ocr0()
6504 > loop(box1->p,x1,y1-1,dx,cs,0,LE)-dx/8 ) in ocr0()
6517 for(;y<y0+dy/2;y++)if( get_bw(x0+dx/4,x1,y,y,box1->p,cs,1)==1) break; in ocr0()