Leonid Plyushch
5 years ago
10 changed files with 411 additions and 0 deletions
@ -0,0 +1,32 @@ |
|||||
|
From c3854782865bb2f59fbc63fcde69f44d699329ef Mon Sep 17 00:00:00 2001 |
||||
|
From: yangfl <yangfl@users.noreply.github.com> |
||||
|
Date: Mon, 7 Jan 2019 16:47:43 +0800 |
||||
|
Subject: [PATCH 1/7] CMakeLists.txt: bugs |
||||
|
|
||||
|
---
|
||||
|
CMakeLists.txt | 2 ++ |
||||
|
1 file changed, 2 insertions(+) |
||||
|
|
||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
|
index 4a2378b..fbc6430 100644
|
||||
|
--- a/CMakeLists.txt
|
||||
|
+++ b/CMakeLists.txt
|
||||
|
@@ -105,6 +105,7 @@ configure_file (
|
||||
|
"${PROJECT_SOURCE_DIR}/config.h.in" |
||||
|
"${PROJECT_BINARY_DIR}/config.h" |
||||
|
) |
||||
|
+include_directories(${PROJECT_BINARY_DIR})
|
||||
|
|
||||
|
add_subdirectory(willuslib) |
||||
|
add_subdirectory(k2pdfoptlib) |
||||
|
@@ -113,6 +114,7 @@ add_subdirectory(k2pdfoptlib)
|
||||
|
add_executable(k2pdfopt k2pdfopt.c) |
||||
|
target_link_libraries (k2pdfopt k2pdfoptlib willuslib ${K2PDFOPT_LIB}) |
||||
|
|
||||
|
+install(TARGETS k2pdfopt RUNTIME DESTINATION bin)
|
||||
|
|
||||
|
message("") |
||||
|
message("-- Summary --") |
||||
|
--
|
||||
|
2.20.1 |
||||
|
|
@ -0,0 +1,33 @@ |
|||||
|
From 1efc9391753d9bcab233dd90fbf48d3f9f9b99af Mon Sep 17 00:00:00 2001 |
||||
|
From: yangfl <yangfl@users.noreply.github.com> |
||||
|
Date: Mon, 7 Jan 2019 16:48:24 +0800 |
||||
|
Subject: [PATCH 2/7] CMakeLists.txt: no mupdf |
||||
|
|
||||
|
---
|
||||
|
CMakeLists.txt | 10 ---------- |
||||
|
1 file changed, 10 deletions(-) |
||||
|
|
||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
|
index fbc6430..ac01ed0 100644
|
||||
|
--- a/CMakeLists.txt
|
||||
|
+++ b/CMakeLists.txt
|
||||
|
@@ -73,16 +73,6 @@ endif(GHOSTSCRIPT_EXECUTABLE)
|
||||
|
# libfreetype6 (>= 2.3.9), libjbig2dec0, libjpeg8 (>= 8c), libx11-6, libxext6, zlib1g (>= 1:1.2.0) |
||||
|
# MUPDF_STATIC_LDFLAGS misses mupdf-js-none, and doubles libs ... |
||||
|
|
||||
|
-pkg_check_modules(MUPDF mupdf)
|
||||
|
-if(MUPDF_FOUND)
|
||||
|
- set(HAVE_MUPDF_LIB 1)
|
||||
|
- # (includes jbig2dec, openjpeg, freetype)
|
||||
|
- include_directories(SYSTEM ${MUPDF_INCLUDEDIR})
|
||||
|
- message(STATUS "mupdf libraries: ${MUPDF_LDFLAGS}")
|
||||
|
- set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${MUPDF_LDFLAGS}
|
||||
|
- -lmupdf-js-none -lopenjpeg -ljbig2dec -ljpeg -lfreetype
|
||||
|
- )
|
||||
|
-endif(MUPDF_FOUND)
|
||||
|
|
||||
|
pkg_check_modules(DJVU ddjvuapi) |
||||
|
if(DJVU_FOUND) |
||||
|
--
|
||||
|
2.20.1 |
||||
|
|
@ -0,0 +1,35 @@ |
|||||
|
From 474bb51fb6fa9abbcfc9f1016ba90d893cd5a9ec Mon Sep 17 00:00:00 2001 |
||||
|
From: yangfl <yangfl@users.noreply.github.com> |
||||
|
Date: Mon, 7 Jan 2019 16:48:40 +0800 |
||||
|
Subject: [PATCH 3/7] CMakeLists.txt: no detect ghostscript at compile time |
||||
|
|
||||
|
---
|
||||
|
CMakeLists.txt | 12 +----------- |
||||
|
1 file changed, 1 insertion(+), 11 deletions(-) |
||||
|
|
||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
|
index ac01ed0..ecba1c3 100644
|
||||
|
--- a/CMakeLists.txt
|
||||
|
+++ b/CMakeLists.txt
|
||||
|
@@ -54,17 +54,7 @@ if(JASPER_FOUND)
|
||||
|
set(HAVE_JASPER_LIB 1) |
||||
|
endif(JASPER_FOUND) |
||||
|
|
||||
|
-# paths from willuslib/wgs.c
|
||||
|
-find_program(GHOSTSCRIPT_EXECUTABLE gs
|
||||
|
-# PATHS /usr/bin /usr/share/gs /usr/local/gs /opt/gs
|
||||
|
-# /usr/share/gs* /usr/local/gs* /opt/gs*
|
||||
|
-)
|
||||
|
-if(GHOSTSCRIPT_EXECUTABLE)
|
||||
|
- set(HAVE_GHOSTSCRIPT 1)
|
||||
|
- message(STATUS "Found ghostscript executable")
|
||||
|
-else()
|
||||
|
- message(STATUS "Could NOT find ghostscript executable")
|
||||
|
-endif(GHOSTSCRIPT_EXECUTABLE)
|
||||
|
+set(HAVE_GHOSTSCRIPT 1)
|
||||
|
|
||||
|
# willus.h |
||||
|
# HAVE_GSL_LIB |
||||
|
--
|
||||
|
2.20.1 |
||||
|
|
@ -0,0 +1,33 @@ |
|||||
|
From 4bde754a3fab11b4c7d0e966dca2ba7a3cee7666 Mon Sep 17 00:00:00 2001 |
||||
|
From: yangfl <yangfl@users.noreply.github.com> |
||||
|
Date: Mon, 7 Jan 2019 16:49:10 +0800 |
||||
|
Subject: [PATCH 4/7] willuslib/CMakeLists.txt: typo |
||||
|
|
||||
|
---
|
||||
|
willuslib/CMakeLists.txt | 4 ++-- |
||||
|
1 file changed, 2 insertions(+), 2 deletions(-) |
||||
|
|
||||
|
diff --git a/willuslib/CMakeLists.txt b/willuslib/CMakeLists.txt
|
||||
|
index 463bbc9..500c926 100644
|
||||
|
--- a/willuslib/CMakeLists.txt
|
||||
|
+++ b/willuslib/CMakeLists.txt
|
||||
|
@@ -6,7 +6,7 @@ include_directories(..)
|
||||
|
set(WILLUSLIB_SRC |
||||
|
ansi.c array.c bmp.c bmpdjvu.c bmpmupdf.c dtcompress.c filelist.c |
||||
|
fontdata.c fontrender.c gslpolyfit.c linux.c math.c mem.c ocr.c |
||||
|
- ocrjocr.c ocrtess.c pdfwrite.c point2d.c render.c strbuf.c string.c
|
||||
|
+ ocrgocr.c ocrtess.c pdfwrite.c point2d.c render.c strbuf.c string.c
|
||||
|
token.c wfile.c wgs.c wgui.c willusversion.c win.c winbmp.c |
||||
|
wincomdlg.c winmbox.c winshell.c wmupdf.c wmupdfinfo.c wpdf.c wsys.c |
||||
|
wzfile.c wleptonica.c |
||||
|
@@ -26,6 +26,6 @@ message("-- Willuslib sources: ${WILLUSLIB_SRC}")
|
||||
|
|
||||
|
add_library(willuslib ${WILLUSLIB_SRC}) |
||||
|
|
||||
|
-# HAVE_GOCR_LIB: ocrjocr.c
|
||||
|
+# HAVE_GOCR_LIB: ocrgocr.c
|
||||
|
# HAVE_TESSERACT_LIB: ocrtess.c |
||||
|
|
||||
|
--
|
||||
|
2.20.1 |
||||
|
|
@ -0,0 +1,49 @@ |
|||||
|
From 3ad840c8df25ac73df7ede81f4025a1e781a9e5b Mon Sep 17 00:00:00 2001 |
||||
|
From: yangfl <yangfl@users.noreply.github.com> |
||||
|
Date: Mon, 7 Jan 2019 16:51:09 +0800 |
||||
|
Subject: [PATCH 5/7] willuslib/ocrtess.c: use system leptonica |
||||
|
|
||||
|
---
|
||||
|
willuslib/ocrtess.c | 3 +-- |
||||
|
willuslib/wleptonica.c | 4 ++-- |
||||
|
2 files changed, 3 insertions(+), 4 deletions(-) |
||||
|
|
||||
|
diff --git a/willuslib/ocrtess.c b/willuslib/ocrtess.c
|
||||
|
index e1366e1..58aaf97 100644
|
||||
|
--- a/willuslib/ocrtess.c
|
||||
|
+++ b/willuslib/ocrtess.c
|
||||
|
@@ -24,8 +24,7 @@
|
||||
|
#include <stdlib.h> |
||||
|
#include <string.h> |
||||
|
#include <ctype.h> |
||||
|
-#include <leptonica.h>
|
||||
|
-#include <tesseract.h>
|
||||
|
+#include <leptonica/allheaders.h>
|
||||
|
#include "willus.h" |
||||
|
|
||||
|
|
||||
|
diff --git a/willuslib/wleptonica.c b/willuslib/wleptonica.c
|
||||
|
index a4e3cfd..a85be09 100644
|
||||
|
--- a/willuslib/wleptonica.c
|
||||
|
+++ b/willuslib/wleptonica.c
|
||||
|
@@ -23,7 +23,7 @@
|
||||
|
#include "willus.h" |
||||
|
|
||||
|
#ifdef HAVE_LEPTONICA_LIB |
||||
|
-#include <leptonica.h>
|
||||
|
+#include <leptonica/allheaders.h>
|
||||
|
|
||||
|
static void wlept_pix_from_bmp(PIX **pixptr,WILLUSBITMAP *bmp); |
||||
|
static void wlept_bmp_from_pix(WILLUSBITMAP *bmp,PIX *pix); |
||||
|
@@ -135,7 +135,7 @@ pixWrite("pixb.png",pixb,IFF_PNG);
|
||||
|
dew1=dewarpCreate(pixb,1); |
||||
|
pixDestroy(&pixb); |
||||
|
dewarpaInsertDewarp(dewa,dew1); |
||||
|
- dewarpBuildPageModel_ex(dew1,debug,fit_order);
|
||||
|
+ dewarpBuildPageModel(dew1,debug);
|
||||
|
if (bmp1!=NULL) |
||||
|
{ |
||||
|
PIX *pix2,*pix2d; |
||||
|
--
|
||||
|
2.20.1 |
||||
|
|
@ -0,0 +1,32 @@ |
|||||
|
From b365ecd574645c7fdb0ebe5b63cf465e134b4404 Mon Sep 17 00:00:00 2001 |
||||
|
From: yangfl <yangfl@users.noreply.github.com> |
||||
|
Date: Mon, 7 Jan 2019 16:52:13 +0800 |
||||
|
Subject: [PATCH 6/7] k2pdfopt.h: dst_ocr_visibility_flags workaround |
||||
|
|
||||
|
---
|
||||
|
k2pdfoptlib/k2pdfopt.h | 2 -- |
||||
|
1 file changed, 2 deletions(-) |
||||
|
|
||||
|
diff --git a/k2pdfoptlib/k2pdfopt.h b/k2pdfoptlib/k2pdfopt.h
|
||||
|
index 13d1802..0605405 100644
|
||||
|
--- a/k2pdfoptlib/k2pdfopt.h
|
||||
|
+++ b/k2pdfoptlib/k2pdfopt.h
|
||||
|
@@ -259,7 +259,6 @@ typedef struct
|
||||
|
int text_only; /* Do not send figures to output file */ |
||||
|
|
||||
|
/* OCR */ |
||||
|
-#ifdef HAVE_OCR_LIB
|
||||
|
char ocrout[128]; |
||||
|
int dst_ocr; |
||||
|
int ocr_detection_type; /* New in v2.50, 'w', 'l', or 'p' */ |
||||
|
@@ -284,7 +283,6 @@ typedef struct
|
||||
|
double ocr_max_height_inches; |
||||
|
OCRWORDS dst_ocrwords; |
||||
|
int sort_ocr_text; |
||||
|
-#endif
|
||||
|
|
||||
|
int dst_userdpi; /* Specified device DPI, not including magnification */ |
||||
|
int dst_dpi; /* Device virtual DPI--takes magnification/fontsize into account */ |
||||
|
--
|
||||
|
2.20.1 |
||||
|
|
@ -0,0 +1,41 @@ |
|||||
|
From 294bc0b6ca59c37c8691255a1ef401e023b00cfa Mon Sep 17 00:00:00 2001 |
||||
|
From: yangfl <yangfl@users.noreply.github.com> |
||||
|
Date: Mon, 7 Jan 2019 19:42:41 +0800 |
||||
|
Subject: [PATCH 7/7] CMakeLists.txt: fix leptonica |
||||
|
|
||||
|
---
|
||||
|
CMakeLists.txt | 11 +++++++++-- |
||||
|
1 file changed, 9 insertions(+), 2 deletions(-) |
||||
|
|
||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
|
index ecba1c3..bd0dd34 100644
|
||||
|
--- a/CMakeLists.txt
|
||||
|
+++ b/CMakeLists.txt
|
||||
|
@@ -10,7 +10,7 @@ set(K2PDFOPT_LIB "-lm")
|
||||
|
# cmake -DCMAKE_BUILD_TYPE=Debug <path> |
||||
|
|
||||
|
# TODO: configure flavour with opions |
||||
|
-##
|
||||
|
+##
|
||||
|
## option (USE_MUPDF |
||||
|
## "Use muPDF libraries" OFF) |
||||
|
## option (USE_GHOSTSCRIPT |
||||
|
@@ -72,7 +72,14 @@ if(DJVU_FOUND)
|
||||
|
endif(DJVU_FOUND) |
||||
|
|
||||
|
# HAVE_GOCR_LIB |
||||
|
-# HAVE_LEPTONICA_LIB
|
||||
|
+
|
||||
|
+pkg_check_modules(LEPTONICA lept)
|
||||
|
+if(LEPTONICA_FOUND)
|
||||
|
+ set(HAVE_LEPTONICA_LIB 1)
|
||||
|
+ include_directories(SYSTEM ${LEPTONICA_INCLUDEDIR})
|
||||
|
+ set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${LEPTONICA_LDFLAGS})
|
||||
|
+endif(LEPTONICA_FOUND)
|
||||
|
+
|
||||
|
# HAVE_TESSERACT_LIB |
||||
|
|
||||
|
# ---- Describe project |
||||
|
--
|
||||
|
2.20.1 |
||||
|
|
@ -0,0 +1,12 @@ |
|||||
|
TERMUX_PKG_HOMEPAGE=http://www.willus.com/k2pdfopt/ |
||||
|
TERMUX_PKG_DESCRIPTION="A tool that optimizes PDF files for viewing on mobile readers" |
||||
|
TERMUX_PKG_LICENSE="GPL-3.0" |
||||
|
TERMUX_PKG_VERSION=2.51 |
||||
|
TERMUX_PKG_SRCURL=http://www.willus.com/k2pdfopt/src/k2pdfopt_v${TERMUX_PKG_VERSION}_src.zip |
||||
|
TERMUX_PKG_SHA256=3e6e4d7aac9c9bed4c7854888a6a91213be10121be76e17f83e080e829ac5fde |
||||
|
TERMUX_PKG_DEPENDS="leptonica, libjasper, libjpeg-turbo, libpng, mupdf, netpbm, zlib" |
||||
|
TERMUX_PKG_BUILD_IN_SRC=true |
||||
|
|
||||
|
termux_step_pre_configure() { |
||||
|
LDFLAGS+=" -llog" |
||||
|
} |
@ -0,0 +1,120 @@ |
|||||
|
diff -uNr k2pdfopt_v2.51/willuslib/ocrtess.c k2pdfopt_v2.51.mod/willuslib/ocrtess.c
|
||||
|
--- k2pdfopt_v2.51/willuslib/ocrtess.c 2020-01-01 21:00:39.794259355 +0200
|
||||
|
+++ k2pdfopt_v2.51.mod/willuslib/ocrtess.c 2020-01-01 21:11:30.131964011 +0200
|
||||
|
@@ -38,35 +38,39 @@
|
||||
|
static void endian_flip(char *x,int n); |
||||
|
|
||||
|
/* |
||||
|
-** Returns 0 for success, NZ for failure.
|
||||
|
+** Determine OCR path. Check both TESSDATA_PREFIX\tessdata AND TESSDATA_PREFIX
|
||||
|
*/ |
||||
|
-void *ocrtess_init(char *datadir,char *tesspath,int maxtesspathlen,
|
||||
|
- char *lang,FILE *out,char *initstr,int maxlen,int *status)
|
||||
|
+void ocrtess_datapath(char *datapath,char *suggested,int maxlen)
|
||||
|
|
||||
|
{ |
||||
|
- char langdef[16];
|
||||
|
- void *api;
|
||||
|
- char tesspath0[MAXFILENAMELEN];
|
||||
|
+ char path1[MAXFILENAMELEN-12];
|
||||
|
+ char path[MAXFILENAMELEN];
|
||||
|
+ char *p;
|
||||
|
|
||||
|
- ocrtess_datapath(tesspath0,datadir,MAXFILENAMELEN-1);
|
||||
|
- if (tesspath!=NULL)
|
||||
|
+ if (suggested!=NULL)
|
||||
|
{ |
||||
|
- strncpy(tesspath,tesspath0,maxtesspathlen-1);
|
||||
|
- tesspath[maxtesspathlen-1]='\0';
|
||||
|
+ strncpy(datapath,suggested,maxlen-1);
|
||||
|
+ datapath[maxlen-1]='\0';
|
||||
|
+ return;
|
||||
|
} |
||||
|
- if (lang==NULL || lang[0]=='\0')
|
||||
|
- ocrtess_lang_default(tesspath0,NULL,0,langdef,16,NULL,0,0);
|
||||
|
- else
|
||||
|
+ if ((p=getenv("TESSDATA_PREFIX"))==NULL)
|
||||
|
{ |
||||
|
- strncpy(langdef,lang,15);
|
||||
|
- langdef[15]='\0';
|
||||
|
+ datapath[0]='\0';
|
||||
|
+ return;
|
||||
|
} |
||||
|
- /* Tess v4.00 needs only one attempt with ocrtype=0 */
|
||||
|
- api=tess_capi_init(tesspath0,langdef,0,out,initstr,maxlen,status);
|
||||
|
- return(api);
|
||||
|
+ strncpy(path1,p,MAXFILENAMELEN-13);
|
||||
|
+ path1[MAXFILENAMELEN-13]='\0';
|
||||
|
+ wfile_fullname(path,path1,"tessdata");
|
||||
|
+ if (wfile_status(path)==2)
|
||||
|
+ {
|
||||
|
+ strncpy(datapath,path,maxlen-1);
|
||||
|
+ datapath[maxlen-1]='\0';
|
||||
|
+ return;
|
||||
|
+ }
|
||||
|
+ strncpy(datapath,p,maxlen-1);
|
||||
|
+ datapath[maxlen-1]='\0';
|
||||
|
} |
||||
|
|
||||
|
-
|
||||
|
void ocrtess_lang_default(char *datadir,char *tesspath,int maxtesspathlen, |
||||
|
char *langdef,int maxlen,char *tessdebug,int maxdebug,int use_ansi) |
||||
|
|
||||
|
@@ -170,39 +174,33 @@
|
||||
|
filelist_free(fl); |
||||
|
} |
||||
|
|
||||
|
-
|
||||
|
/* |
||||
|
-** Determine OCR path. Check both TESSDATA_PREFIX\tessdata AND TESSDATA_PREFIX
|
||||
|
+** Returns 0 for success, NZ for failure.
|
||||
|
*/ |
||||
|
-void ocrtess_datapath(char *datapath,char *suggested,int maxlen)
|
||||
|
+void *ocrtess_init(char *datadir,char *tesspath,int maxtesspathlen,
|
||||
|
+ char *lang,FILE *out,char *initstr,int maxlen,int *status)
|
||||
|
|
||||
|
{ |
||||
|
- char path1[MAXFILENAMELEN-12];
|
||||
|
- char path[MAXFILENAMELEN];
|
||||
|
- char *p;
|
||||
|
+ char langdef[16];
|
||||
|
+ void *api;
|
||||
|
+ char tesspath0[MAXFILENAMELEN];
|
||||
|
|
||||
|
- if (suggested!=NULL)
|
||||
|
- {
|
||||
|
- strncpy(datapath,suggested,maxlen-1);
|
||||
|
- datapath[maxlen-1]='\0';
|
||||
|
- return;
|
||||
|
- }
|
||||
|
- if ((p=getenv("TESSDATA_PREFIX"))==NULL)
|
||||
|
+ ocrtess_datapath(tesspath0,datadir,MAXFILENAMELEN-1);
|
||||
|
+ if (tesspath!=NULL)
|
||||
|
{ |
||||
|
- datapath[0]='\0';
|
||||
|
- return;
|
||||
|
+ strncpy(tesspath,tesspath0,maxtesspathlen-1);
|
||||
|
+ tesspath[maxtesspathlen-1]='\0';
|
||||
|
} |
||||
|
- strncpy(path1,p,MAXFILENAMELEN-13);
|
||||
|
- path1[MAXFILENAMELEN-13]='\0';
|
||||
|
- wfile_fullname(path,path1,"tessdata");
|
||||
|
- if (wfile_status(path)==2)
|
||||
|
+ if (lang==NULL || lang[0]=='\0')
|
||||
|
+ ocrtess_lang_default(tesspath0,NULL,0,langdef,16,NULL,0,0);
|
||||
|
+ else
|
||||
|
{ |
||||
|
- strncpy(datapath,path,maxlen-1);
|
||||
|
- datapath[maxlen-1]='\0';
|
||||
|
- return;
|
||||
|
+ strncpy(langdef,lang,15);
|
||||
|
+ langdef[15]='\0';
|
||||
|
} |
||||
|
- strncpy(datapath,p,maxlen-1);
|
||||
|
- datapath[maxlen-1]='\0';
|
||||
|
+ /* Tess v4.00 needs only one attempt with ocrtype=0 */
|
||||
|
+ api=tess_capi_init(tesspath0,langdef,0,out,initstr,maxlen,status);
|
||||
|
+ return(api);
|
||||
|
} |
||||
|
|
||||
|
|
@ -0,0 +1,24 @@ |
|||||
|
diff -aur src.orig/k2pdfopt_v2.51/CMakeLists.txt src/k2pdfopt_v2.51/CMakeLists.txt
|
||||
|
--- a/CMakeLists.txt 2019-03-24 21:45:17.683484849 +0100
|
||||
|
+++ b/CMakeLists.txt 2019-03-24 21:46:17.443514984 +0100
|
||||
|
@@ -5,7 +5,7 @@
|
||||
|
|
||||
|
include(FindPkgConfig) |
||||
|
|
||||
|
-set(K2PDFOPT_LIB "-lm")
|
||||
|
+set(K2PDFOPT_LIB "-lm -ljasper")
|
||||
|
|
||||
|
# cmake -DCMAKE_BUILD_TYPE=Debug <path> |
||||
|
|
||||
|
diff -aur src.orig/k2pdfopt_v2.51/willuslib/bmp.c src/k2pdfopt_v2.51/willuslib/bmp.c
|
||||
|
--- a/willuslib/bmp.c 2019-01-01 00:21:16.000000000 +0100
|
||||
|
+++ b/willuslib/bmp.c 2019-03-24 21:45:48.713500408 +0100
|
||||
|
@@ -37,7 +37,7 @@
|
||||
|
#include <jpeglib.h> |
||||
|
#endif |
||||
|
#ifdef HAVE_JASPER_LIB |
||||
|
-#include <jasper.h>
|
||||
|
+#include <jasper/jasper.h>
|
||||
|
#endif |
||||
|
|
||||
|
#define BOUND(x,xmin,xmax) if ((x)<(xmin)) (x)=(xmin); else { if ((x)>(xmax)) (x)=(xmax); } |
Loading…
Reference in new issue