tesseract_bin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +23 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/ext/tesseract_bin/extconf.rb +17 -0
- data/lib/tesseract_bin.rb +12 -0
- data/tesseract_bin.gemspec +660 -0
- data/test/helper.rb +18 -0
- data/test/test_tesseract_bin.rb +7 -0
- data/vendor/tesseract-2.04/AUTHORS +8 -0
- data/vendor/tesseract-2.04/COPYING +23 -0
- data/vendor/tesseract-2.04/ChangeLog +71 -0
- data/vendor/tesseract-2.04/INSTALL +229 -0
- data/vendor/tesseract-2.04/Makefile.am +20 -0
- data/vendor/tesseract-2.04/Makefile.in +641 -0
- data/vendor/tesseract-2.04/NEWS +1 -0
- data/vendor/tesseract-2.04/README +138 -0
- data/vendor/tesseract-2.04/ReleaseNotes +213 -0
- data/vendor/tesseract-2.04/StdAfx.cpp +8 -0
- data/vendor/tesseract-2.04/StdAfx.h +24 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.am +63 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.in +735 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.cpp +1082 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.h +109 -0
- data/vendor/tesseract-2.04/ccmain/applybox.cpp +891 -0
- data/vendor/tesseract-2.04/ccmain/applybox.h +73 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.cpp +1105 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.h +256 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.cpp +76 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.h +29 -0
- data/vendor/tesseract-2.04/ccmain/callnet.cpp +93 -0
- data/vendor/tesseract-2.04/ccmain/callnet.h +32 -0
- data/vendor/tesseract-2.04/ccmain/charcut.cpp +704 -0
- data/vendor/tesseract-2.04/ccmain/charcut.h +120 -0
- data/vendor/tesseract-2.04/ccmain/charsample.cpp +699 -0
- data/vendor/tesseract-2.04/ccmain/control.cpp +1842 -0
- data/vendor/tesseract-2.04/ccmain/control.h +198 -0
- data/vendor/tesseract-2.04/ccmain/docqual.cpp +1481 -0
- data/vendor/tesseract-2.04/ccmain/docqual.h +155 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.cpp +82 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.h +13 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.cpp +989 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.h +72 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.cpp +825 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.h +93 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.cpp +154 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.h +32 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.cpp +391 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.h +48 -0
- data/vendor/tesseract-2.04/ccmain/output.cpp +1273 -0
- data/vendor/tesseract-2.04/ccmain/output.h +116 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.cpp +666 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.h +155 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.cpp +107 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.h +43 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.cpp +1867 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.h +181 -0
- data/vendor/tesseract-2.04/ccmain/reject.cpp +1775 -0
- data/vendor/tesseract-2.04/ccmain/reject.h +181 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.cpp +366 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.h +35 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.cpp +375 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.cpp +278 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.h +49 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.cpp +110 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.h +38 -0
- data/vendor/tesseract-2.04/ccmain/tesseractfull.cc +37 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.cpp +387 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.h +58 -0
- data/vendor/tesseract-2.04/ccmain/tessio.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.cpp +38 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.h +48 -0
- data/vendor/tesseract-2.04/ccmain/tfacep.h +62 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.cpp +443 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.h +85 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.cpp +549 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.h +108 -0
- data/vendor/tesseract-2.04/ccmain/varabled.cpp +346 -0
- data/vendor/tesseract-2.04/ccmain/varabled.h +125 -0
- data/vendor/tesseract-2.04/ccmain/werdit.cpp +193 -0
- data/vendor/tesseract-2.04/ccmain/werdit.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.am +25 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.in +650 -0
- data/vendor/tesseract-2.04/ccstruct/blckerr.h +29 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.cpp +778 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.h +381 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.cpp +247 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.h +119 -0
- data/vendor/tesseract-2.04/ccstruct/blread.cpp +537 -0
- data/vendor/tesseract-2.04/ccstruct/blread.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/callcpp.cpp +252 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.cpp +650 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.h +186 -0
- data/vendor/tesseract-2.04/ccstruct/crakedge.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.cpp +133 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.h +52 -0
- data/vendor/tesseract-2.04/ccstruct/hpddef.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/hpdsizes.h +8 -0
- data/vendor/tesseract-2.04/ccstruct/ipoints.h +479 -0
- data/vendor/tesseract-2.04/ccstruct/labls.cpp +188 -0
- data/vendor/tesseract-2.04/ccstruct/labls.h +38 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.cpp +249 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.cpp +453 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.h +84 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.cpp +100 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.h +85 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.cpp +176 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.h +108 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.cpp +369 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.h +235 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.cpp +216 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.h +133 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.cpp +879 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.h +318 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.cpp +330 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.h +313 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.cpp +361 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.h +181 -0
- data/vendor/tesseract-2.04/ccstruct/pdclass.h +54 -0
- data/vendor/tesseract-2.04/ccstruct/points.cpp +102 -0
- data/vendor/tesseract-2.04/ccstruct/points.h +299 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.cpp +588 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.h +51 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.cpp +398 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.h +122 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.cpp +357 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.cpp +23 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.h +58 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.cpp +441 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.h +125 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.cpp +147 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.cpp +21 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.cpp +382 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.h +113 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.cpp +372 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.h +198 -0
- data/vendor/tesseract-2.04/ccstruct/rect.cpp +229 -0
- data/vendor/tesseract-2.04/ccstruct/rect.h +320 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.cpp +545 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.h +284 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.cpp +89 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.h +45 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.cpp +905 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.h +135 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.cpp +296 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.h +88 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.cpp +230 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.h +155 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.cpp +63 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.h +91 -0
- data/vendor/tesseract-2.04/ccstruct/werd.cpp +967 -0
- data/vendor/tesseract-2.04/ccstruct/werd.h +277 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.am +19 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.in +626 -0
- data/vendor/tesseract-2.04/ccutil/basedir.cpp +118 -0
- data/vendor/tesseract-2.04/ccutil/basedir.h +32 -0
- data/vendor/tesseract-2.04/ccutil/bits16.cpp +30 -0
- data/vendor/tesseract-2.04/ccutil/bits16.h +61 -0
- data/vendor/tesseract-2.04/ccutil/boxread.cpp +105 -0
- data/vendor/tesseract-2.04/ccutil/boxread.h +44 -0
- data/vendor/tesseract-2.04/ccutil/clst.cpp +626 -0
- data/vendor/tesseract-2.04/ccutil/clst.h +1085 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.cpp +500 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.h +103 -0
- data/vendor/tesseract-2.04/ccutil/elst.cpp +593 -0
- data/vendor/tesseract-2.04/ccutil/elst.h +1125 -0
- data/vendor/tesseract-2.04/ccutil/elst2.cpp +606 -0
- data/vendor/tesseract-2.04/ccutil/elst2.h +1121 -0
- data/vendor/tesseract-2.04/ccutil/errcode.cpp +104 -0
- data/vendor/tesseract-2.04/ccutil/errcode.h +104 -0
- data/vendor/tesseract-2.04/ccutil/fileerr.h +34 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.cpp +115 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.h +40 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.cpp +57 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.h +30 -0
- data/vendor/tesseract-2.04/ccutil/host.h +180 -0
- data/vendor/tesseract-2.04/ccutil/hosthplb.h +1 -0
- data/vendor/tesseract-2.04/ccutil/lsterr.h +43 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.cpp +126 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.h +39 -0
- data/vendor/tesseract-2.04/ccutil/memblk.cpp +1106 -0
- data/vendor/tesseract-2.04/ccutil/memblk.h +189 -0
- data/vendor/tesseract-2.04/ccutil/memry.cpp +532 -0
- data/vendor/tesseract-2.04/ccutil/memry.h +192 -0
- data/vendor/tesseract-2.04/ccutil/memryerr.h +38 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.cpp +5 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.h +37 -0
- data/vendor/tesseract-2.04/ccutil/ndminx.h +31 -0
- data/vendor/tesseract-2.04/ccutil/notdll.h +28 -0
- data/vendor/tesseract-2.04/ccutil/nwmain.h +176 -0
- data/vendor/tesseract-2.04/ccutil/ocrclass.h +345 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.cpp +772 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.h +191 -0
- data/vendor/tesseract-2.04/ccutil/platform.h +18 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.cpp +543 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.h +55 -0
- data/vendor/tesseract-2.04/ccutil/secname.h +9 -0
- data/vendor/tesseract-2.04/ccutil/serialis.cpp +117 -0
- data/vendor/tesseract-2.04/ccutil/serialis.h +93 -0
- data/vendor/tesseract-2.04/ccutil/stderr.h +26 -0
- data/vendor/tesseract-2.04/ccutil/strngs.cpp +495 -0
- data/vendor/tesseract-2.04/ccutil/strngs.h +138 -0
- data/vendor/tesseract-2.04/ccutil/tessclas.h +135 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.cpp +61 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.h +30 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.cpp +122 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.h +35 -0
- data/vendor/tesseract-2.04/ccutil/unichar.cpp +144 -0
- data/vendor/tesseract-2.04/ccutil/unichar.h +84 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.cpp +172 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.h +82 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.cpp +307 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.h +267 -0
- data/vendor/tesseract-2.04/ccutil/varable.cpp +672 -0
- data/vendor/tesseract-2.04/ccutil/varable.h +419 -0
- data/vendor/tesseract-2.04/classify/Makefile.am +24 -0
- data/vendor/tesseract-2.04/classify/Makefile.in +647 -0
- data/vendor/tesseract-2.04/classify/adaptive.cpp +535 -0
- data/vendor/tesseract-2.04/classify/adaptive.h +199 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.cpp +2958 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.h +86 -0
- data/vendor/tesseract-2.04/classify/baseline.cpp +58 -0
- data/vendor/tesseract-2.04/classify/baseline.h +91 -0
- data/vendor/tesseract-2.04/classify/blobclass.cpp +123 -0
- data/vendor/tesseract-2.04/classify/blobclass.h +49 -0
- data/vendor/tesseract-2.04/classify/chartoname.cpp +74 -0
- data/vendor/tesseract-2.04/classify/chartoname.h +21 -0
- data/vendor/tesseract-2.04/classify/cluster.cpp +2834 -0
- data/vendor/tesseract-2.04/classify/cluster.h +158 -0
- data/vendor/tesseract-2.04/classify/clusttool.cpp +507 -0
- data/vendor/tesseract-2.04/classify/clusttool.h +70 -0
- data/vendor/tesseract-2.04/classify/cutoffs.cpp +73 -0
- data/vendor/tesseract-2.04/classify/cutoffs.h +49 -0
- data/vendor/tesseract-2.04/classify/extern.h +32 -0
- data/vendor/tesseract-2.04/classify/extract.cpp +100 -0
- data/vendor/tesseract-2.04/classify/extract.h +36 -0
- data/vendor/tesseract-2.04/classify/featdefs.cpp +244 -0
- data/vendor/tesseract-2.04/classify/featdefs.h +71 -0
- data/vendor/tesseract-2.04/classify/flexfx.cpp +87 -0
- data/vendor/tesseract-2.04/classify/flexfx.h +34 -0
- data/vendor/tesseract-2.04/classify/float2int.cpp +126 -0
- data/vendor/tesseract-2.04/classify/float2int.h +65 -0
- data/vendor/tesseract-2.04/classify/fpoint.cpp +73 -0
- data/vendor/tesseract-2.04/classify/fpoint.h +63 -0
- data/vendor/tesseract-2.04/classify/fxdefs.cpp +74 -0
- data/vendor/tesseract-2.04/classify/fxdefs.h +93 -0
- data/vendor/tesseract-2.04/classify/fxid.h +69 -0
- data/vendor/tesseract-2.04/classify/hideedge.cpp +35 -0
- data/vendor/tesseract-2.04/classify/hideedge.h +76 -0
- data/vendor/tesseract-2.04/classify/intfx.cpp +608 -0
- data/vendor/tesseract-2.04/classify/intfx.h +63 -0
- data/vendor/tesseract-2.04/classify/intmatcher.cpp +1524 -0
- data/vendor/tesseract-2.04/classify/intmatcher.h +199 -0
- data/vendor/tesseract-2.04/classify/intproto.cpp +1823 -0
- data/vendor/tesseract-2.04/classify/intproto.h +320 -0
- data/vendor/tesseract-2.04/classify/kdtree.cpp +884 -0
- data/vendor/tesseract-2.04/classify/kdtree.h +118 -0
- data/vendor/tesseract-2.04/classify/mf.cpp +106 -0
- data/vendor/tesseract-2.04/classify/mf.h +43 -0
- data/vendor/tesseract-2.04/classify/mfdefs.cpp +58 -0
- data/vendor/tesseract-2.04/classify/mfdefs.h +60 -0
- data/vendor/tesseract-2.04/classify/mfoutline.cpp +1087 -0
- data/vendor/tesseract-2.04/classify/mfoutline.h +277 -0
- data/vendor/tesseract-2.04/classify/mfx.cpp +436 -0
- data/vendor/tesseract-2.04/classify/mfx.h +52 -0
- data/vendor/tesseract-2.04/classify/normfeat.cpp +132 -0
- data/vendor/tesseract-2.04/classify/normfeat.h +63 -0
- data/vendor/tesseract-2.04/classify/normmatch.cpp +305 -0
- data/vendor/tesseract-2.04/classify/normmatch.h +38 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.cpp +310 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.h +148 -0
- data/vendor/tesseract-2.04/classify/outfeat.cpp +262 -0
- data/vendor/tesseract-2.04/classify/outfeat.h +76 -0
- data/vendor/tesseract-2.04/classify/picofeat.cpp +297 -0
- data/vendor/tesseract-2.04/classify/picofeat.h +65 -0
- data/vendor/tesseract-2.04/classify/protos.cpp +472 -0
- data/vendor/tesseract-2.04/classify/protos.h +258 -0
- data/vendor/tesseract-2.04/classify/sigmenu.cpp +225 -0
- data/vendor/tesseract-2.04/classify/sigmenu.h +39 -0
- data/vendor/tesseract-2.04/classify/speckle.cpp +127 -0
- data/vendor/tesseract-2.04/classify/speckle.h +69 -0
- data/vendor/tesseract-2.04/classify/xform2d.cpp +120 -0
- data/vendor/tesseract-2.04/classify/xform2d.h +60 -0
- data/vendor/tesseract-2.04/config/config.guess +1466 -0
- data/vendor/tesseract-2.04/config/config.h.in +188 -0
- data/vendor/tesseract-2.04/config/config.sub +1579 -0
- data/vendor/tesseract-2.04/config/depcomp +530 -0
- data/vendor/tesseract-2.04/config/install-sh +269 -0
- data/vendor/tesseract-2.04/config/missing +198 -0
- data/vendor/tesseract-2.04/config/mkinstalldirs +40 -0
- data/vendor/tesseract-2.04/config/stamp-h.in +0 -0
- data/vendor/tesseract-2.04/configure +10424 -0
- data/vendor/tesseract-2.04/cutil/Makefile.am +14 -0
- data/vendor/tesseract-2.04/cutil/Makefile.in +612 -0
- data/vendor/tesseract-2.04/cutil/bitvec.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/bitvec.h +100 -0
- data/vendor/tesseract-2.04/cutil/callcpp.h +190 -0
- data/vendor/tesseract-2.04/cutil/const.h +108 -0
- data/vendor/tesseract-2.04/cutil/cutil.cpp +92 -0
- data/vendor/tesseract-2.04/cutil/cutil.h +159 -0
- data/vendor/tesseract-2.04/cutil/danerror.cpp +144 -0
- data/vendor/tesseract-2.04/cutil/danerror.h +41 -0
- data/vendor/tesseract-2.04/cutil/debug.cpp +97 -0
- data/vendor/tesseract-2.04/cutil/debug.h +348 -0
- data/vendor/tesseract-2.04/cutil/efio.cpp +62 -0
- data/vendor/tesseract-2.04/cutil/efio.h +32 -0
- data/vendor/tesseract-2.04/cutil/emalloc.cpp +91 -0
- data/vendor/tesseract-2.04/cutil/emalloc.h +44 -0
- data/vendor/tesseract-2.04/cutil/freelist.cpp +75 -0
- data/vendor/tesseract-2.04/cutil/freelist.h +45 -0
- data/vendor/tesseract-2.04/cutil/funcdefs.h +35 -0
- data/vendor/tesseract-2.04/cutil/general.h +33 -0
- data/vendor/tesseract-2.04/cutil/globals.cpp +69 -0
- data/vendor/tesseract-2.04/cutil/globals.h +70 -0
- data/vendor/tesseract-2.04/cutil/listio.cpp +68 -0
- data/vendor/tesseract-2.04/cutil/listio.h +43 -0
- data/vendor/tesseract-2.04/cutil/minmax.h +40 -0
- data/vendor/tesseract-2.04/cutil/oldheap.cpp +337 -0
- data/vendor/tesseract-2.04/cutil/oldheap.h +126 -0
- data/vendor/tesseract-2.04/cutil/oldlist.cpp +393 -0
- data/vendor/tesseract-2.04/cutil/oldlist.h +350 -0
- data/vendor/tesseract-2.04/cutil/structures.cpp +66 -0
- data/vendor/tesseract-2.04/cutil/structures.h +112 -0
- data/vendor/tesseract-2.04/cutil/tessarray.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/tessarray.h +166 -0
- data/vendor/tesseract-2.04/cutil/tordvars.cpp +95 -0
- data/vendor/tesseract-2.04/cutil/tordvars.h +61 -0
- data/vendor/tesseract-2.04/cutil/variables.cpp +317 -0
- data/vendor/tesseract-2.04/cutil/variables.h +170 -0
- data/vendor/tesseract-2.04/dict/Makefile.am +13 -0
- data/vendor/tesseract-2.04/dict/Makefile.in +609 -0
- data/vendor/tesseract-2.04/dict/choicearr.h +96 -0
- data/vendor/tesseract-2.04/dict/choices.cpp +210 -0
- data/vendor/tesseract-2.04/dict/choices.h +241 -0
- data/vendor/tesseract-2.04/dict/context.cpp +270 -0
- data/vendor/tesseract-2.04/dict/context.h +82 -0
- data/vendor/tesseract-2.04/dict/dawg.cpp +363 -0
- data/vendor/tesseract-2.04/dict/dawg.h +394 -0
- data/vendor/tesseract-2.04/dict/hyphen.cpp +84 -0
- data/vendor/tesseract-2.04/dict/hyphen.h +125 -0
- data/vendor/tesseract-2.04/dict/lookdawg.cpp +228 -0
- data/vendor/tesseract-2.04/dict/lookdawg.h +76 -0
- data/vendor/tesseract-2.04/dict/makedawg.cpp +449 -0
- data/vendor/tesseract-2.04/dict/makedawg.h +83 -0
- data/vendor/tesseract-2.04/dict/matchdefs.h +145 -0
- data/vendor/tesseract-2.04/dict/permdawg.cpp +415 -0
- data/vendor/tesseract-2.04/dict/permdawg.h +98 -0
- data/vendor/tesseract-2.04/dict/permngram.cpp +358 -0
- data/vendor/tesseract-2.04/dict/permngram.h +33 -0
- data/vendor/tesseract-2.04/dict/permnum.cpp +522 -0
- data/vendor/tesseract-2.04/dict/permnum.h +83 -0
- data/vendor/tesseract-2.04/dict/permute.cpp +1704 -0
- data/vendor/tesseract-2.04/dict/permute.h +93 -0
- data/vendor/tesseract-2.04/dict/reduce.cpp +424 -0
- data/vendor/tesseract-2.04/dict/reduce.h +112 -0
- data/vendor/tesseract-2.04/dict/states.cpp +382 -0
- data/vendor/tesseract-2.04/dict/states.h +111 -0
- data/vendor/tesseract-2.04/dict/stopper.cpp +1458 -0
- data/vendor/tesseract-2.04/dict/stopper.h +103 -0
- data/vendor/tesseract-2.04/dict/trie.cpp +683 -0
- data/vendor/tesseract-2.04/dict/trie.h +190 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.am +2 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.in +388 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.cpp +163 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.dsp +186 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.vcproj +637 -0
- data/vendor/tesseract-2.04/eurotext.tif +0 -0
- data/vendor/tesseract-2.04/image/Makefile.am +10 -0
- data/vendor/tesseract-2.04/image/Makefile.in +596 -0
- data/vendor/tesseract-2.04/image/bitstrm.cpp +157 -0
- data/vendor/tesseract-2.04/image/bitstrm.h +73 -0
- data/vendor/tesseract-2.04/image/img.h +336 -0
- data/vendor/tesseract-2.04/image/imgbmp.cpp +223 -0
- data/vendor/tesseract-2.04/image/imgbmp.h +50 -0
- data/vendor/tesseract-2.04/image/imgerrs.h +35 -0
- data/vendor/tesseract-2.04/image/imgio.cpp +321 -0
- data/vendor/tesseract-2.04/image/imgio.h +22 -0
- data/vendor/tesseract-2.04/image/imgs.cpp +1764 -0
- data/vendor/tesseract-2.04/image/imgs.h +102 -0
- data/vendor/tesseract-2.04/image/imgtiff.cpp +723 -0
- data/vendor/tesseract-2.04/image/imgtiff.h +89 -0
- data/vendor/tesseract-2.04/image/imgunpk.h +1377 -0
- data/vendor/tesseract-2.04/image/svshowim.cpp +40 -0
- data/vendor/tesseract-2.04/image/svshowim.h +25 -0
- data/vendor/tesseract-2.04/java/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ScrollView.java +421 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.am +5 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.in +474 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEvent.java +87 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventHandler.java +296 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventType.java +31 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.am +7 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.in +476 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVAbstractMenuItem.java +58 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVCheckboxMenuItem.java +60 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVEmptyMenuItem.java +48 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVImageHandler.java +228 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuBar.java +130 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuItem.java +61 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVPopupMenu.java +142 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVSubMenuItem.java +41 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVWindow.java +643 -0
- data/vendor/tesseract-2.04/java/makefile +55 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.am +13 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.in +596 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.cpp +363 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.h +90 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.cpp +82 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.h +30 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.cpp +170 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.h +29 -0
- data/vendor/tesseract-2.04/phototest.tif +0 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.am +31 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.in +529 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/configs/api_config +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train +19 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train.stderr +18 -0
- data/vendor/tesseract-2.04/tessdata/configs/inter +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/kannada +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/makebox +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/unlv +3 -0
- data/vendor/tesseract-2.04/tessdata/confsets +3 -0
- data/vendor/tesseract-2.04/tessdata/eng.DangAmbigs +39 -0
- data/vendor/tesseract-2.04/tessdata/eng.freq-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.inttemp +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.normproto +1247 -0
- data/vendor/tesseract-2.04/tessdata/eng.pffmtable +111 -0
- data/vendor/tesseract-2.04/tessdata/eng.unicharset +113 -0
- data/vendor/tesseract-2.04/tessdata/eng.user-words +921 -0
- data/vendor/tesseract-2.04/tessdata/eng.word-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/makedummies +8 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch.nochop +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/matdemo +7 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/msdemo +13 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/nobatch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/segdemo +9 -0
- data/vendor/tesseract-2.04/tessdll.cpp +351 -0
- data/vendor/tesseract-2.04/tessdll.dsp +2050 -0
- data/vendor/tesseract-2.04/tessdll.h +143 -0
- data/vendor/tesseract-2.04/tessdll.vcproj +5495 -0
- data/vendor/tesseract-2.04/tesseract.dsp +2124 -0
- data/vendor/tesseract-2.04/tesseract.dsw +116 -0
- data/vendor/tesseract-2.04/tesseract.sln +59 -0
- data/vendor/tesseract-2.04/tesseract.spec +188 -0
- data/vendor/tesseract-2.04/tesseract.vcproj +5859 -0
- data/vendor/tesseract-2.04/testing/Makefile.am +2 -0
- data/vendor/tesseract-2.04/testing/Makefile.in +312 -0
- data/vendor/tesseract-2.04/testing/README +43 -0
- data/vendor/tesseract-2.04/testing/counttestset.sh +61 -0
- data/vendor/tesseract-2.04/testing/reorgdata.sh +44 -0
- data/vendor/tesseract-2.04/testing/reports/1995.bus.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.doe3.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.mag.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.news.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/2.03.summary +9 -0
- data/vendor/tesseract-2.04/testing/reports/2.04.summary +9 -0
- data/vendor/tesseract-2.04/testing/runalltests.sh +110 -0
- data/vendor/tesseract-2.04/testing/runtestset.sh +61 -0
- data/vendor/tesseract-2.04/textord/Makefile.am +20 -0
- data/vendor/tesseract-2.04/textord/Makefile.in +624 -0
- data/vendor/tesseract-2.04/textord/blkocc.cpp +809 -0
- data/vendor/tesseract-2.04/textord/blkocc.h +327 -0
- data/vendor/tesseract-2.04/textord/blobcmpl.h +31 -0
- data/vendor/tesseract-2.04/textord/drawedg.cpp +77 -0
- data/vendor/tesseract-2.04/textord/drawedg.h +34 -0
- data/vendor/tesseract-2.04/textord/drawtord.cpp +469 -0
- data/vendor/tesseract-2.04/textord/drawtord.h +107 -0
- data/vendor/tesseract-2.04/textord/edgblob.cpp +412 -0
- data/vendor/tesseract-2.04/textord/edgblob.h +100 -0
- data/vendor/tesseract-2.04/textord/edgloop.cpp +211 -0
- data/vendor/tesseract-2.04/textord/edgloop.h +66 -0
- data/vendor/tesseract-2.04/textord/fpchop.cpp +1641 -0
- data/vendor/tesseract-2.04/textord/fpchop.h +238 -0
- data/vendor/tesseract-2.04/textord/gap_map.cpp +166 -0
- data/vendor/tesseract-2.04/textord/gap_map.h +40 -0
- data/vendor/tesseract-2.04/textord/makerow.cpp +2628 -0
- data/vendor/tesseract-2.04/textord/makerow.h +295 -0
- data/vendor/tesseract-2.04/textord/oldbasel.cpp +1761 -0
- data/vendor/tesseract-2.04/textord/oldbasel.h +195 -0
- data/vendor/tesseract-2.04/textord/pithsync.cpp +696 -0
- data/vendor/tesseract-2.04/textord/pithsync.h +134 -0
- data/vendor/tesseract-2.04/textord/pitsync1.cpp +425 -0
- data/vendor/tesseract-2.04/textord/pitsync1.h +135 -0
- data/vendor/tesseract-2.04/textord/scanedg.cpp +452 -0
- data/vendor/tesseract-2.04/textord/scanedg.h +74 -0
- data/vendor/tesseract-2.04/textord/sortflts.cpp +80 -0
- data/vendor/tesseract-2.04/textord/sortflts.h +64 -0
- data/vendor/tesseract-2.04/textord/tessout.h +76 -0
- data/vendor/tesseract-2.04/textord/topitch.cpp +2019 -0
- data/vendor/tesseract-2.04/textord/topitch.h +195 -0
- data/vendor/tesseract-2.04/textord/tordmain.cpp +907 -0
- data/vendor/tesseract-2.04/textord/tordmain.h +132 -0
- data/vendor/tesseract-2.04/textord/tospace.cpp +1939 -0
- data/vendor/tesseract-2.04/textord/tospace.h +193 -0
- data/vendor/tesseract-2.04/textord/tovars.cpp +87 -0
- data/vendor/tesseract-2.04/textord/tovars.h +94 -0
- data/vendor/tesseract-2.04/textord/underlin.cpp +312 -0
- data/vendor/tesseract-2.04/textord/underlin.h +53 -0
- data/vendor/tesseract-2.04/textord/wordseg.cpp +620 -0
- data/vendor/tesseract-2.04/textord/wordseg.h +70 -0
- data/vendor/tesseract-2.04/training/Makefile.am +54 -0
- data/vendor/tesseract-2.04/training/Makefile.in +720 -0
- data/vendor/tesseract-2.04/training/cnTraining.cpp +855 -0
- data/vendor/tesseract-2.04/training/cntraining.dsp +243 -0
- data/vendor/tesseract-2.04/training/cntraining.vcproj +950 -0
- data/vendor/tesseract-2.04/training/mergenf.cpp +451 -0
- data/vendor/tesseract-2.04/training/mergenf.h +106 -0
- data/vendor/tesseract-2.04/training/mfTraining.cpp +1341 -0
- data/vendor/tesseract-2.04/training/mftraining.dsp +285 -0
- data/vendor/tesseract-2.04/training/mftraining.vcproj +1055 -0
- data/vendor/tesseract-2.04/training/name2char.cpp +166 -0
- data/vendor/tesseract-2.04/training/name2char.h +38 -0
- data/vendor/tesseract-2.04/training/training.cpp +190 -0
- data/vendor/tesseract-2.04/training/training.h +130 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.cpp +140 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.dsp +335 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.vcproj +769 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.cpp +69 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.dsp +319 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.vcproj +1113 -0
- data/vendor/tesseract-2.04/viewer/Makefile.am +9 -0
- data/vendor/tesseract-2.04/viewer/Makefile.in +591 -0
- data/vendor/tesseract-2.04/viewer/scrollview.cpp +825 -0
- data/vendor/tesseract-2.04/viewer/scrollview.h +414 -0
- data/vendor/tesseract-2.04/viewer/svmnode.cpp +140 -0
- data/vendor/tesseract-2.04/viewer/svmnode.h +94 -0
- data/vendor/tesseract-2.04/viewer/svpaint.cpp +220 -0
- data/vendor/tesseract-2.04/viewer/svutil.cpp +347 -0
- data/vendor/tesseract-2.04/viewer/svutil.h +138 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.am +23 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.in +641 -0
- data/vendor/tesseract-2.04/wordrec/associate.cpp +62 -0
- data/vendor/tesseract-2.04/wordrec/associate.h +93 -0
- data/vendor/tesseract-2.04/wordrec/badwords.cpp +106 -0
- data/vendor/tesseract-2.04/wordrec/badwords.h +51 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.cpp +526 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.h +203 -0
- data/vendor/tesseract-2.04/wordrec/charsample.h +208 -0
- data/vendor/tesseract-2.04/wordrec/chop.cpp +458 -0
- data/vendor/tesseract-2.04/wordrec/chop.h +153 -0
- data/vendor/tesseract-2.04/wordrec/chopper.cpp +750 -0
- data/vendor/tesseract-2.04/wordrec/chopper.h +104 -0
- data/vendor/tesseract-2.04/wordrec/closed.cpp +136 -0
- data/vendor/tesseract-2.04/wordrec/closed.h +65 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.h +33 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.cpp +92 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.h +33 -0
- data/vendor/tesseract-2.04/wordrec/findseam.cpp +566 -0
- data/vendor/tesseract-2.04/wordrec/findseam.h +69 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.cpp +226 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.h +91 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.cpp +194 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.h +120 -0
- data/vendor/tesseract-2.04/wordrec/makechop.cpp +281 -0
- data/vendor/tesseract-2.04/wordrec/makechop.h +69 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.cpp +191 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.h +45 -0
- data/vendor/tesseract-2.04/wordrec/matrix.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/matrix.h +104 -0
- data/vendor/tesseract-2.04/wordrec/measure.h +135 -0
- data/vendor/tesseract-2.04/wordrec/metrics.cpp +363 -0
- data/vendor/tesseract-2.04/wordrec/metrics.h +130 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.cpp +51 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.h +27 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.cpp +110 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.h +45 -0
- data/vendor/tesseract-2.04/wordrec/olutil.cpp +153 -0
- data/vendor/tesseract-2.04/wordrec/olutil.h +128 -0
- data/vendor/tesseract-2.04/wordrec/outlines.cpp +172 -0
- data/vendor/tesseract-2.04/wordrec/outlines.h +148 -0
- data/vendor/tesseract-2.04/wordrec/pieces.cpp +410 -0
- data/vendor/tesseract-2.04/wordrec/pieces.h +154 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.cpp +134 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.h +71 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.cpp +116 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.h +73 -0
- data/vendor/tesseract-2.04/wordrec/render.cpp +152 -0
- data/vendor/tesseract-2.04/wordrec/render.h +58 -0
- data/vendor/tesseract-2.04/wordrec/seam.cpp +482 -0
- data/vendor/tesseract-2.04/wordrec/seam.h +136 -0
- data/vendor/tesseract-2.04/wordrec/split.cpp +182 -0
- data/vendor/tesseract-2.04/wordrec/split.h +115 -0
- data/vendor/tesseract-2.04/wordrec/tally.cpp +68 -0
- data/vendor/tesseract-2.04/wordrec/tally.h +94 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.cpp +108 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.h +46 -0
- data/vendor/tesseract-2.04/wordrec/tface.cpp +272 -0
- data/vendor/tesseract-2.04/wordrec/tface.h +35 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.cpp +284 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.h +64 -0
- metadata +708 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// Copyright 2007 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Author: Joern Wanke
|
|
4
|
+
//
|
|
5
|
+
// Simple drawing program to illustrate ScrollView capabilities.
|
|
6
|
+
//
|
|
7
|
+
// Functionality:
|
|
8
|
+
// - The menubar is used to select from different sample styles of input.
|
|
9
|
+
// - With the RMB it is possible to change the RGB values in different
|
|
10
|
+
// popup menus.
|
|
11
|
+
// - A LMB click either draws point-to-point, point or text.
|
|
12
|
+
// - A LMB dragging either draws a line, a rectangle or ellipse.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
#include "scrollview.h"
|
|
16
|
+
#include "svmnode.h"
|
|
17
|
+
#include <stdlib.h>
|
|
18
|
+
#include <iostream>
|
|
19
|
+
|
|
20
|
+
// The current color values we use, initially white (== ScrollView::WHITE).
|
|
21
|
+
int rgb[3] = { 255, 255, 255 };
|
|
22
|
+
|
|
23
|
+
class SVPaint : public SVEventHandler {
|
|
24
|
+
public:
|
|
25
|
+
SVPaint(const char* server_name);
|
|
26
|
+
// This is the main event handling function that we need to overwrite, defined
|
|
27
|
+
// in SVEventHandler.
|
|
28
|
+
void Notify(const SVEvent* sv_event);
|
|
29
|
+
private:
|
|
30
|
+
// The Handler take care of the SVET_POPUP, SVET_MENU, SVET_CLICK and
|
|
31
|
+
// SVET_SELECTION events.
|
|
32
|
+
void PopupHandler(const SVEvent* sv_event);
|
|
33
|
+
void MenuBarHandler(const SVEvent* sv_event);
|
|
34
|
+
void ClickHandler(const SVEvent* sv_event);
|
|
35
|
+
void SelectionHandler(const SVEvent* sv_event);
|
|
36
|
+
|
|
37
|
+
// Convenience functions to build little menus.
|
|
38
|
+
SVMenuNode* BuildPopupMenu();
|
|
39
|
+
SVMenuNode* BuildMenuBar();
|
|
40
|
+
|
|
41
|
+
// Our window.
|
|
42
|
+
ScrollView* window_;
|
|
43
|
+
|
|
44
|
+
// The mode we are in when an SVET_CLICK or an SVET_SELECTION event occurs.
|
|
45
|
+
int click_mode_;
|
|
46
|
+
int drag_mode_;
|
|
47
|
+
|
|
48
|
+
// In the point-to-point drawing mode, we need to set a start-point the first
|
|
49
|
+
// time we call it (e.g. call SetCursor).
|
|
50
|
+
bool has_start_point_;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// Build a sample popup menu.
|
|
54
|
+
SVMenuNode* SVPaint::BuildPopupMenu() {
|
|
55
|
+
SVMenuNode* root = new SVMenuNode(); // Empty root node
|
|
56
|
+
// Initial color is white, so we all values to 255.
|
|
57
|
+
root->AddChild("R", // Shown caption.
|
|
58
|
+
1, // assoc. command_id.
|
|
59
|
+
"255", // initial value.
|
|
60
|
+
"Red Color Value?"); // Shown description.
|
|
61
|
+
root->AddChild("G", 2, "255", "Green Color Value?");
|
|
62
|
+
root->AddChild("B", 3, "255", "Blue Color Value?");
|
|
63
|
+
return root;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Build a sample menu bar.
|
|
67
|
+
SVMenuNode* SVPaint::BuildMenuBar() {
|
|
68
|
+
SVMenuNode* root = new SVMenuNode(); // Empty root node
|
|
69
|
+
|
|
70
|
+
// Create some submenus and add them to the root.
|
|
71
|
+
SVMenuNode* click = root->AddChild("Clicking");
|
|
72
|
+
SVMenuNode* drag = root->AddChild("Dragging");
|
|
73
|
+
|
|
74
|
+
// Put some nodes into the submenus.
|
|
75
|
+
click->AddChild("Point to Point Drawing", // Caption.
|
|
76
|
+
1); // command_id.
|
|
77
|
+
click->AddChild("Point Drawing", 2);
|
|
78
|
+
click->AddChild("Text Drawing", 3);
|
|
79
|
+
drag->AddChild("Line Drawing", 4);
|
|
80
|
+
drag->AddChild("Rectangle Drawing", 5);
|
|
81
|
+
drag->AddChild("Ellipse Drawing", 6);
|
|
82
|
+
return root;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Takes care of the SVET_POPUP events.
|
|
86
|
+
// In our case, SVET_POPUP is used to set RGB values.
|
|
87
|
+
void SVPaint::PopupHandler(const SVEvent* sv_event) {
|
|
88
|
+
// Since we only have the RGB values as popup items,
|
|
89
|
+
// we take a shortcut to not bloat up code:
|
|
90
|
+
rgb[sv_event->command_id - 1] = atoi(sv_event->parameter);
|
|
91
|
+
window_->Pen(rgb[0], rgb[1], rgb[2]);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Takes care of the SVET_MENU events.
|
|
95
|
+
// In our case, we change either the click_mode_ (commands 1-3)
|
|
96
|
+
// or the drag_mode_ (commands 4-6).
|
|
97
|
+
void SVPaint::MenuBarHandler(const SVEvent* sv_event) {
|
|
98
|
+
if ((sv_event->command_id > 0) && (sv_event->command_id < 4)) {
|
|
99
|
+
click_mode_ = sv_event->command_id;
|
|
100
|
+
has_start_point_ = false;
|
|
101
|
+
} else { drag_mode_ = sv_event->command_id; }
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Takes care of the SVET_CLICK events.
|
|
105
|
+
// Depending on the click_mode_ we are in, either do Point-to-Point drawing,
|
|
106
|
+
// point drawing, or draw text.
|
|
107
|
+
void SVPaint::ClickHandler(const SVEvent* sv_event) {
|
|
108
|
+
switch (click_mode_) {
|
|
109
|
+
case 1: //Point to Point
|
|
110
|
+
if (has_start_point_) { window_->DrawTo(sv_event->x, sv_event->y);
|
|
111
|
+
} else {
|
|
112
|
+
has_start_point_ = true;
|
|
113
|
+
window_->SetCursor(sv_event->x, sv_event->y);
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
case 2: //Point Drawing..simulated by drawing a 1 pixel line.
|
|
117
|
+
window_->Line(sv_event->x, sv_event->y, sv_event->x, sv_event->y);
|
|
118
|
+
break;
|
|
119
|
+
case 3: //Text
|
|
120
|
+
// We show a modal input dialog on our window, then draw the input and
|
|
121
|
+
// finally delete the input pointer.
|
|
122
|
+
char* p = window_->ShowInputDialog("Text:");
|
|
123
|
+
window_->Text(sv_event->x, sv_event->y, p);
|
|
124
|
+
delete p;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Takes care of the SVET_SELECTION events.
|
|
130
|
+
// Depending on the drag_mode_ we are in, either draw a line, a rectangle or
|
|
131
|
+
// an ellipse.
|
|
132
|
+
void SVPaint::SelectionHandler(const SVEvent* sv_event) {
|
|
133
|
+
switch (drag_mode_) {
|
|
134
|
+
//FIXME inversed x_size, y_size
|
|
135
|
+
case 4: //Line
|
|
136
|
+
window_->Line(sv_event->x, sv_event->y,
|
|
137
|
+
sv_event->x - sv_event->x_size,
|
|
138
|
+
sv_event->y - sv_event->y_size);
|
|
139
|
+
break;
|
|
140
|
+
case 5: //Rectangle
|
|
141
|
+
window_->Rectangle(sv_event->x, sv_event->y,
|
|
142
|
+
sv_event->x - sv_event->x_size,
|
|
143
|
+
sv_event->y - sv_event->y_size);
|
|
144
|
+
break;
|
|
145
|
+
case 6: //Ellipse
|
|
146
|
+
window_->Ellipse(sv_event->x - sv_event->x_size,
|
|
147
|
+
sv_event->y - sv_event->y_size,
|
|
148
|
+
sv_event->x_size, sv_event->y_size);
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// The event handling function from ScrollView which we have to overwrite.
|
|
154
|
+
// We handle CLICK, SELECTION, MENU and POPUP and throw away all other events.
|
|
155
|
+
void SVPaint::Notify(const SVEvent* sv_event) {
|
|
156
|
+
if (sv_event->type == SVET_CLICK) { ClickHandler(sv_event); }
|
|
157
|
+
else if (sv_event->type == SVET_SELECTION) { SelectionHandler(sv_event); }
|
|
158
|
+
else if (sv_event->type == SVET_MENU) { MenuBarHandler(sv_event); }
|
|
159
|
+
else if (sv_event->type == SVET_POPUP) { PopupHandler(sv_event); }
|
|
160
|
+
else {} //throw other events away
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Builds a new window, initializes the variables and event handler and builds
|
|
164
|
+
// the menu.
|
|
165
|
+
SVPaint::SVPaint(const char *server_name) {
|
|
166
|
+
window_ = new ScrollView("ScrollView Paint Example", // window caption
|
|
167
|
+
0, 0, // x,y window position
|
|
168
|
+
500, 500, // window size
|
|
169
|
+
500, 500, // canvas size
|
|
170
|
+
false, // whether the Y axis is inversed.
|
|
171
|
+
// this is included due to legacy
|
|
172
|
+
// reasons for tesseract and enables
|
|
173
|
+
// us to have (0,0) as the LOWER left
|
|
174
|
+
// of the coordinate system.
|
|
175
|
+
server_name); // the server address.
|
|
176
|
+
|
|
177
|
+
// Set the start modes to point-to-point and line drawing.
|
|
178
|
+
click_mode_ = 1;
|
|
179
|
+
drag_mode_ = 4;
|
|
180
|
+
has_start_point_ = false;
|
|
181
|
+
|
|
182
|
+
// Bild our menus and add them to the window. The flag illustrates whether
|
|
183
|
+
// this is a menu bar.
|
|
184
|
+
SVMenuNode* popup_menu = BuildPopupMenu();
|
|
185
|
+
popup_menu->BuildMenu(window_,false);
|
|
186
|
+
|
|
187
|
+
SVMenuNode* bar_menu = BuildMenuBar();
|
|
188
|
+
bar_menu->BuildMenu(window_,true);
|
|
189
|
+
|
|
190
|
+
// Set the initial color values to White (could also be done by
|
|
191
|
+
// passing (rgb[0], rgb[1], rgb[2]).
|
|
192
|
+
window_->Pen(ScrollView::WHITE);
|
|
193
|
+
window_->Brush(ScrollView::WHITE);
|
|
194
|
+
|
|
195
|
+
// Adds the event handler to the window. This actually ensures that Notify
|
|
196
|
+
// gets called when events occur.
|
|
197
|
+
window_->AddEventHandler(this);
|
|
198
|
+
|
|
199
|
+
// Set the window visible (calling this is important to actually render
|
|
200
|
+
// everything. Without this call, the window would also be drawn, but the
|
|
201
|
+
// menu bars would be missing.
|
|
202
|
+
window_->SetVisible(true);
|
|
203
|
+
|
|
204
|
+
// Rest this thread until its window is destroyed.
|
|
205
|
+
// Note that a special eventhandling thread was created when constructing
|
|
206
|
+
// the window. Due to this, the application will not deadlock here.
|
|
207
|
+
window_->AwaitEvent(SVET_DESTROY);
|
|
208
|
+
// We now have 3 Threads running:
|
|
209
|
+
// (1) The MessageReceiver thread which fetches messages and distributes them
|
|
210
|
+
// (2) The EventHandler thread which handles all events for window_
|
|
211
|
+
// (3) The main thread which waits on window_ for a DESTROY event (blocked)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// If a parameter is given, we try to connect to the given server.
|
|
215
|
+
// This enables us to test the remote capabilites of ScrollView.
|
|
216
|
+
int main(int argc, char** argv) {
|
|
217
|
+
const char* server_name;
|
|
218
|
+
if (argc > 1) { server_name = argv[1]; } else { server_name = "localhost"; }
|
|
219
|
+
SVPaint svp(server_name);
|
|
220
|
+
}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
///////////////////////////////////////////////////////////////////////
|
|
2
|
+
// File: svutil.cpp
|
|
3
|
+
// Description: ScrollView Utilities
|
|
4
|
+
// Author: Joern Wanke
|
|
5
|
+
// Created: Thu Nov 29 2007
|
|
6
|
+
//
|
|
7
|
+
// (C) Copyright 2007, Google Inc.
|
|
8
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
// you may not use this file except in compliance with the License.
|
|
10
|
+
// You may obtain a copy of the License at
|
|
11
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
// See the License for the specific language governing permissions and
|
|
16
|
+
// limitations under the License.
|
|
17
|
+
//
|
|
18
|
+
///////////////////////////////////////////////////////////////////////
|
|
19
|
+
//
|
|
20
|
+
// SVUtil contains the SVSync and SVNetwork classes, which are used for
|
|
21
|
+
// thread/process creation & synchronization and network connection.
|
|
22
|
+
|
|
23
|
+
#ifndef GRAPHICS_DISABLED
|
|
24
|
+
|
|
25
|
+
#include "svutil.h"
|
|
26
|
+
|
|
27
|
+
#ifdef WIN32
|
|
28
|
+
#include <windows.h>
|
|
29
|
+
#include <winsock.h>
|
|
30
|
+
#else
|
|
31
|
+
#include <arpa/inet.h>
|
|
32
|
+
#include <netinet/in.h>
|
|
33
|
+
#include <pthread.h>
|
|
34
|
+
#include <semaphore.h>
|
|
35
|
+
#include <signal.h>
|
|
36
|
+
#include <stdlib.h>
|
|
37
|
+
#include <string.h>
|
|
38
|
+
#include <netdb.h>
|
|
39
|
+
#include <sys/socket.h>
|
|
40
|
+
#ifdef __linux__
|
|
41
|
+
#include <sys/prctl.h>
|
|
42
|
+
#endif
|
|
43
|
+
#endif
|
|
44
|
+
|
|
45
|
+
#include <iostream>
|
|
46
|
+
|
|
47
|
+
const int kBufferSize = 65536;
|
|
48
|
+
const int kMaxMsgSize = 4096;
|
|
49
|
+
|
|
50
|
+
// Signals a thread to exit.
|
|
51
|
+
void SVSync::ExitThread() {
|
|
52
|
+
#ifdef WIN32
|
|
53
|
+
//ExitThread(0);
|
|
54
|
+
#else
|
|
55
|
+
pthread_exit(0);
|
|
56
|
+
#endif
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Starts a new process.
|
|
60
|
+
void SVSync::StartProcess(const char* executable, const char* args) {
|
|
61
|
+
#ifdef WIN32
|
|
62
|
+
std::string proc;
|
|
63
|
+
proc.append(executable);
|
|
64
|
+
proc.append(" ");
|
|
65
|
+
proc.append(args);
|
|
66
|
+
std::cout << "Starting " << proc << std::endl;
|
|
67
|
+
STARTUPINFO start_info;
|
|
68
|
+
PROCESS_INFORMATION proc_info;
|
|
69
|
+
GetStartupInfo(&start_info);
|
|
70
|
+
if (!CreateProcess(NULL, const_cast<char*>(proc.c_str()), NULL, NULL, FALSE,
|
|
71
|
+
CREATE_NO_WINDOW | DETACHED_PROCESS, NULL, NULL,
|
|
72
|
+
&start_info, &proc_info))
|
|
73
|
+
return;
|
|
74
|
+
#else
|
|
75
|
+
int pid = fork();
|
|
76
|
+
if (pid != 0) { // The father process returns
|
|
77
|
+
} else {
|
|
78
|
+
#ifdef __linux__
|
|
79
|
+
// Make sure the java process terminates on exit, since its
|
|
80
|
+
// broken socket detection seems to be useless.
|
|
81
|
+
prctl(PR_SET_PDEATHSIG, 2, 0, 0, 0);
|
|
82
|
+
#endif
|
|
83
|
+
char* mutable_args = strdup(args);
|
|
84
|
+
int argc = 1;
|
|
85
|
+
for (int i = 0; mutable_args[i]; ++i) {
|
|
86
|
+
if (mutable_args[i] == ' ') {
|
|
87
|
+
++argc;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
char** argv = new char*[argc + 2];
|
|
91
|
+
argv[0] = strdup(executable);
|
|
92
|
+
argv[1] = mutable_args;
|
|
93
|
+
argc = 2;
|
|
94
|
+
bool inquote = false;
|
|
95
|
+
for (int i = 0; mutable_args[i]; ++i) {
|
|
96
|
+
if (!inquote && mutable_args[i] == ' ') {
|
|
97
|
+
mutable_args[i] = '\0';
|
|
98
|
+
argv[argc++] = mutable_args + i + 1;
|
|
99
|
+
} else if (mutable_args[i] == '"') {
|
|
100
|
+
inquote = !inquote;
|
|
101
|
+
mutable_args[i] = ' ';
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
argv[argc] = NULL;
|
|
105
|
+
execvp(executable, argv);
|
|
106
|
+
}
|
|
107
|
+
#endif
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
SVSemaphore::SVSemaphore() {
|
|
111
|
+
#ifdef WIN32
|
|
112
|
+
semaphore_ = CreateSemaphore(0, 0, 10, 0);
|
|
113
|
+
#else
|
|
114
|
+
sem_init(&semaphore_, 0, 0);
|
|
115
|
+
#endif
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
void SVSemaphore::Signal() {
|
|
119
|
+
#ifdef WIN32
|
|
120
|
+
ReleaseSemaphore(semaphore_, 1, NULL);
|
|
121
|
+
#else
|
|
122
|
+
sem_post(&semaphore_);
|
|
123
|
+
#endif
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
void SVSemaphore::Wait() {
|
|
127
|
+
#ifdef WIN32
|
|
128
|
+
WaitForSingleObject(semaphore_, INFINITE);
|
|
129
|
+
#else
|
|
130
|
+
sem_wait(&semaphore_);
|
|
131
|
+
#endif
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
SVMutex::SVMutex() {
|
|
135
|
+
#ifdef WIN32
|
|
136
|
+
mutex_ = CreateMutex(0, FALSE, 0);
|
|
137
|
+
#else
|
|
138
|
+
pthread_mutex_init(&mutex_, NULL);
|
|
139
|
+
#endif
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
void SVMutex::Lock() {
|
|
143
|
+
#ifdef WIN32
|
|
144
|
+
WaitForSingleObject(mutex_, INFINITE);
|
|
145
|
+
#else
|
|
146
|
+
pthread_mutex_lock(&mutex_);
|
|
147
|
+
#endif
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
void SVMutex::Unlock() {
|
|
151
|
+
#ifdef WIN32
|
|
152
|
+
ReleaseMutex(mutex_);
|
|
153
|
+
#else
|
|
154
|
+
pthread_mutex_unlock(&mutex_);
|
|
155
|
+
#endif
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Create new thread.
|
|
159
|
+
|
|
160
|
+
void SVSync::StartThread(void *(*func)(void*), void* arg) {
|
|
161
|
+
#ifdef WIN32
|
|
162
|
+
LPTHREAD_START_ROUTINE f = (LPTHREAD_START_ROUTINE) func;
|
|
163
|
+
DWORD threadid;
|
|
164
|
+
HANDLE newthread = CreateThread(
|
|
165
|
+
NULL, // default security attributes
|
|
166
|
+
0, // use default stack size
|
|
167
|
+
f, // thread function
|
|
168
|
+
arg, // argument to thread function
|
|
169
|
+
0, // use default creation flags
|
|
170
|
+
&threadid); // returns the thread identifier
|
|
171
|
+
#else
|
|
172
|
+
pthread_t helper;
|
|
173
|
+
pthread_create(&helper, NULL, func, arg);
|
|
174
|
+
#endif
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Place a message in the message buffer (and flush it).
|
|
178
|
+
void SVNetwork::Send(const char* msg) {
|
|
179
|
+
mutex_send_->Lock();
|
|
180
|
+
msg_buffer_out_.append(msg);
|
|
181
|
+
mutex_send_->Unlock();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Send the whole buffer.
|
|
185
|
+
void SVNetwork::Flush() {
|
|
186
|
+
mutex_send_->Lock();
|
|
187
|
+
while (msg_buffer_out_.size() > 0) {
|
|
188
|
+
int i = send(stream_, msg_buffer_out_.c_str(), msg_buffer_out_.length(), 0);
|
|
189
|
+
msg_buffer_out_.erase(0, i);
|
|
190
|
+
}
|
|
191
|
+
mutex_send_->Unlock();
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Receive a message from the server.
|
|
195
|
+
// This will always return one line of char* (denoted by \n).
|
|
196
|
+
char* SVNetwork::Receive() {
|
|
197
|
+
char* result = NULL;
|
|
198
|
+
#ifdef WIN32
|
|
199
|
+
if (has_content) { result = strtok (NULL, "\n"); }
|
|
200
|
+
#else
|
|
201
|
+
if (buffer_ptr_ != NULL) { result = strtok_r(NULL, "\n", &buffer_ptr_); }
|
|
202
|
+
#endif
|
|
203
|
+
|
|
204
|
+
// This means there is something left in the buffer and we return it.
|
|
205
|
+
if (result != NULL) { return result;
|
|
206
|
+
// Otherwise, we read from the stream_.
|
|
207
|
+
} else {
|
|
208
|
+
buffer_ptr_ = NULL;
|
|
209
|
+
has_content = false;
|
|
210
|
+
|
|
211
|
+
// The timeout length is not really important since we are looping anyway
|
|
212
|
+
// until a new message is delivered.
|
|
213
|
+
struct timeval tv;
|
|
214
|
+
tv.tv_sec = 10;
|
|
215
|
+
tv.tv_usec = 0;
|
|
216
|
+
|
|
217
|
+
// Set the flags to return when the stream_ is ready to be read.
|
|
218
|
+
fd_set readfds;
|
|
219
|
+
FD_ZERO(&readfds);
|
|
220
|
+
FD_SET(stream_, &readfds);
|
|
221
|
+
|
|
222
|
+
int i = select(stream_+1, &readfds, NULL, NULL, &tv);
|
|
223
|
+
|
|
224
|
+
// The stream_ died.
|
|
225
|
+
if (i == 0) { return NULL; }
|
|
226
|
+
|
|
227
|
+
// Read the message buffer.
|
|
228
|
+
i = recv(stream_, msg_buffer_in_, kMaxMsgSize, 0);
|
|
229
|
+
|
|
230
|
+
// Server quit (0) or error (-1).
|
|
231
|
+
if (i <= 0) { return NULL; }
|
|
232
|
+
msg_buffer_in_[i] = '\0';
|
|
233
|
+
has_content = true;
|
|
234
|
+
#ifdef WIN32
|
|
235
|
+
return strtok(msg_buffer_in_,"\n");
|
|
236
|
+
#else
|
|
237
|
+
// Setup a new string tokenizer.
|
|
238
|
+
return strtok_r(msg_buffer_in_, "\n", &buffer_ptr_);
|
|
239
|
+
#endif
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Close the connection to the server.
|
|
244
|
+
void SVNetwork::Close() {
|
|
245
|
+
#ifdef WIN32
|
|
246
|
+
closesocket(stream_);
|
|
247
|
+
#else
|
|
248
|
+
close(stream_);
|
|
249
|
+
#endif
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Set up a connection to hostname on port.
|
|
253
|
+
SVNetwork::SVNetwork(const char* hostname, int port) {
|
|
254
|
+
mutex_send_ = new SVMutex();
|
|
255
|
+
struct sockaddr_in address;
|
|
256
|
+
struct hostent *name;
|
|
257
|
+
|
|
258
|
+
msg_buffer_in_ = new char[kMaxMsgSize + 1];
|
|
259
|
+
msg_buffer_in_[0] = '\0';
|
|
260
|
+
|
|
261
|
+
has_content = false;
|
|
262
|
+
|
|
263
|
+
buffer_ptr_ = NULL;
|
|
264
|
+
|
|
265
|
+
// Get the host data depending on the OS.
|
|
266
|
+
#ifdef WIN32
|
|
267
|
+
WSADATA wsaData;
|
|
268
|
+
WSAStartup(MAKEWORD(1, 1), &wsaData);
|
|
269
|
+
name = gethostbyname(hostname);
|
|
270
|
+
#elif defined(__linux__)
|
|
271
|
+
struct hostent hp;
|
|
272
|
+
int herr;
|
|
273
|
+
char *buffer = new char[kBufferSize];
|
|
274
|
+
gethostbyname_r(hostname, &hp, buffer, kBufferSize, &name, &herr);
|
|
275
|
+
delete[] buffer;
|
|
276
|
+
#else
|
|
277
|
+
name = gethostbyname(hostname);
|
|
278
|
+
#endif
|
|
279
|
+
|
|
280
|
+
// Fill in the appropriate variables to be able to connect to the server.
|
|
281
|
+
address.sin_family = name->h_addrtype;
|
|
282
|
+
memcpy((char *) &address.sin_addr.s_addr,
|
|
283
|
+
name->h_addr_list[0], name->h_length);
|
|
284
|
+
address.sin_port = htons(port);
|
|
285
|
+
|
|
286
|
+
stream_ = socket(AF_INET, SOCK_STREAM, 0);
|
|
287
|
+
|
|
288
|
+
// If server is not there, we will start a new server as local child process.
|
|
289
|
+
if (connect(stream_, (struct sockaddr *) &address, sizeof(address)) < 0) {
|
|
290
|
+
const char* scrollview_path = getenv("SCROLLVIEW_PATH");
|
|
291
|
+
if (scrollview_path == NULL) {
|
|
292
|
+
#ifdef SCROLLVIEW_PATH
|
|
293
|
+
#define _STR(a) #a
|
|
294
|
+
#define _XSTR(a) _STR(a)
|
|
295
|
+
scrollview_path = _XSTR(SCROLLVIEW_PATH);
|
|
296
|
+
#undef _XSTR
|
|
297
|
+
#undef _STR
|
|
298
|
+
#else
|
|
299
|
+
scrollview_path = ".";
|
|
300
|
+
#endif
|
|
301
|
+
}
|
|
302
|
+
// The following ugly ifdef is to enable the output of the java runtime
|
|
303
|
+
// to be sent down a black hole on non-windows to ignore all the
|
|
304
|
+
// exceptions in piccolo. Ideally piccolo would be debugged to make
|
|
305
|
+
// this unnecessary.
|
|
306
|
+
// Also the path has to be separated by ; on windows and : otherwise.
|
|
307
|
+
#ifdef WIN32
|
|
308
|
+
const char* prog = "java -Xms512m -Xmx1024m";
|
|
309
|
+
const char* cmd_template = "-Djava.library.path=%s -cp %s/ScrollView.jar;"
|
|
310
|
+
"%s/piccolo-1.2.jar;%s/piccolox-1.2.jar"
|
|
311
|
+
" com.google.scrollview.ScrollView";
|
|
312
|
+
#else
|
|
313
|
+
const char* prog = "sh";
|
|
314
|
+
const char* cmd_template = "-c \"trap 'kill %1' 0 1 2 ; java "
|
|
315
|
+
"-Xms1024m -Xmx2048m -Djava.library.path=%s -cp %s/ScrollView.jar:"
|
|
316
|
+
"%s/piccolo-1.2.jar:%s/piccolox-1.2.jar"
|
|
317
|
+
" com.google.scrollview.ScrollView"
|
|
318
|
+
" >/dev/null 2>&1 & wait\"";
|
|
319
|
+
#endif
|
|
320
|
+
int cmdlen = strlen(cmd_template) + 4*strlen(scrollview_path) + 1;
|
|
321
|
+
char* cmd = new char[cmdlen];
|
|
322
|
+
snprintf(cmd, cmdlen, cmd_template, scrollview_path, scrollview_path,
|
|
323
|
+
scrollview_path, scrollview_path);
|
|
324
|
+
|
|
325
|
+
SVSync::StartProcess(prog, cmd);
|
|
326
|
+
delete [] cmd;
|
|
327
|
+
|
|
328
|
+
// Wait for server to show up.
|
|
329
|
+
// Note: There is no exception handling in case the server never turns up.
|
|
330
|
+
while (connect(stream_, (struct sockaddr *) &address,
|
|
331
|
+
sizeof(address)) < 0) {
|
|
332
|
+
std::cout << "ScrollView: Waiting for server...\n";
|
|
333
|
+
#ifdef WIN32
|
|
334
|
+
Sleep(1000);
|
|
335
|
+
#else
|
|
336
|
+
sleep(1);
|
|
337
|
+
#endif
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
SVNetwork::~SVNetwork() {
|
|
343
|
+
delete[] msg_buffer_in_;
|
|
344
|
+
delete mutex_send_;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
#endif // GRAPHICS_DISABLED
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
///////////////////////////////////////////////////////////////////////
|
|
2
|
+
// File: svutil.h
|
|
3
|
+
// Description: ScrollView Utilities
|
|
4
|
+
// Author: Joern Wanke
|
|
5
|
+
// Created: Thu Nov 29 2007
|
|
6
|
+
//
|
|
7
|
+
// (C) Copyright 2007, Google Inc.
|
|
8
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
// you may not use this file except in compliance with the License.
|
|
10
|
+
// You may obtain a copy of the License at
|
|
11
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
// See the License for the specific language governing permissions and
|
|
16
|
+
// limitations under the License.
|
|
17
|
+
//
|
|
18
|
+
///////////////////////////////////////////////////////////////////////
|
|
19
|
+
//
|
|
20
|
+
// SVUtil contains the SVSync, SVSemaphore, SVMutex and SVNetwork
|
|
21
|
+
// classes, which are used for thread/process creation & synchronization
|
|
22
|
+
// and network connection.
|
|
23
|
+
|
|
24
|
+
#ifndef TESSERACT_VIEWER_SVUTIL_H__
|
|
25
|
+
#define TESSERACT_VIEWER_SVUTIL_H__
|
|
26
|
+
#include <stdio.h>
|
|
27
|
+
#ifdef WIN32
|
|
28
|
+
#include <windows.h>
|
|
29
|
+
#define snprintf _snprintf
|
|
30
|
+
#if (_MSC_VER <= 1400)
|
|
31
|
+
#define vsnprintf _vsnprintf
|
|
32
|
+
#endif
|
|
33
|
+
#pragma warning(disable:4786)
|
|
34
|
+
#else
|
|
35
|
+
#include <pthread.h>
|
|
36
|
+
#include <semaphore.h>
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
#include <string>
|
|
40
|
+
|
|
41
|
+
#ifndef MAX
|
|
42
|
+
#define MAX(a, b) ((a > b) ? a : b)
|
|
43
|
+
#endif
|
|
44
|
+
|
|
45
|
+
#ifndef MIN
|
|
46
|
+
#define MIN(a, b) ((a < b) ? a : b)
|
|
47
|
+
#endif
|
|
48
|
+
|
|
49
|
+
// The SVSync class provides functionality for Thread & Process Creation
|
|
50
|
+
class SVSync {
|
|
51
|
+
public:
|
|
52
|
+
// Create new thread.
|
|
53
|
+
static void StartThread(void *(*func)(void*), void* arg);
|
|
54
|
+
// Signals a thread to exit.
|
|
55
|
+
static void ExitThread();
|
|
56
|
+
// Starts a new process.
|
|
57
|
+
static void StartProcess(const char* executable, const char* args);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// A semaphore class which encapsulates the main signalling
|
|
61
|
+
// and wait abilities of semaphores for windows and unix.
|
|
62
|
+
class SVSemaphore {
|
|
63
|
+
public:
|
|
64
|
+
// Sets up a semaphore.
|
|
65
|
+
SVSemaphore();
|
|
66
|
+
// Signal a semaphore.
|
|
67
|
+
void Signal();
|
|
68
|
+
// Wait on a semaphore.
|
|
69
|
+
void Wait();
|
|
70
|
+
private:
|
|
71
|
+
#ifdef WIN32
|
|
72
|
+
HANDLE semaphore_;
|
|
73
|
+
#else
|
|
74
|
+
sem_t semaphore_;
|
|
75
|
+
#endif
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// A mutex which encapsulates the main locking and unlocking
|
|
79
|
+
// abilites of mutexes for windows and unix.
|
|
80
|
+
class SVMutex {
|
|
81
|
+
public:
|
|
82
|
+
// Sets up a new mutex.
|
|
83
|
+
SVMutex();
|
|
84
|
+
// Locks on a mutex.
|
|
85
|
+
void Lock();
|
|
86
|
+
// Unlocks on a mutex.
|
|
87
|
+
void Unlock();
|
|
88
|
+
private:
|
|
89
|
+
#ifdef WIN32
|
|
90
|
+
HANDLE mutex_;
|
|
91
|
+
#else
|
|
92
|
+
pthread_mutex_t mutex_;
|
|
93
|
+
#endif
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// The SVNetwork class takes care of the remote connection for ScrollView
|
|
97
|
+
// This means setting up and maintaining a remote connection, sending and
|
|
98
|
+
// receiving messages and closing the connection.
|
|
99
|
+
// It is designed to work on both Linux and Windows.
|
|
100
|
+
class SVNetwork {
|
|
101
|
+
public:
|
|
102
|
+
// Set up a connection to hostname on port.
|
|
103
|
+
SVNetwork(const char* hostname, int port);
|
|
104
|
+
|
|
105
|
+
// Destructor.
|
|
106
|
+
~SVNetwork();
|
|
107
|
+
|
|
108
|
+
// Put a message in the messagebuffer to the server and try to send it.
|
|
109
|
+
void Send(const char* msg);
|
|
110
|
+
|
|
111
|
+
// Receive a message from the server.
|
|
112
|
+
// This will always return one line of char* (denoted by \n).
|
|
113
|
+
char* Receive();
|
|
114
|
+
|
|
115
|
+
// Close the connection to the server.
|
|
116
|
+
void Close();
|
|
117
|
+
|
|
118
|
+
// Flush the buffer.
|
|
119
|
+
void Flush();
|
|
120
|
+
|
|
121
|
+
private:
|
|
122
|
+
// The mutex for access to Send() and Flush().
|
|
123
|
+
SVMutex* mutex_send_;
|
|
124
|
+
// The actual stream_ to the server.
|
|
125
|
+
int stream_;
|
|
126
|
+
// Stores the last received message-chunk from the server.
|
|
127
|
+
char* msg_buffer_in_;
|
|
128
|
+
|
|
129
|
+
// Stores the messages which are supposed to go out.
|
|
130
|
+
std::string msg_buffer_out_;
|
|
131
|
+
|
|
132
|
+
bool has_content; // Win32 (strtok)
|
|
133
|
+
// Where we are at in our msg_buffer_in_
|
|
134
|
+
char* buffer_ptr_; // Unix (strtok_r)
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
#endif // TESSERACT_VIEWER_SVUTIL_H__
|
|
138
|
+
|