A streamlined version (for embedded use) of Jeff Brown's ZBar library. Visit <http://zbar.sourceforge.net> for more details.

Dependents:   BarcodeReader_F103

Committer:
hudakz
Date:
Fri Jan 10 22:06:18 2020 +0000
Revision:
1:4f5c042a2d34
Parent:
0:e33621169e44
Streamlined barcode reader library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:e33621169e44 1 /*------------------------------------------------------------------------
hudakz 0:e33621169e44 2 * Copyright 2008-2009 (c) Jeff Brown <spadix@users.sourceforge.net>
hudakz 0:e33621169e44 3 *
hudakz 0:e33621169e44 4 * This file is part of the ZBar Bar Code Reader.
hudakz 0:e33621169e44 5 *
hudakz 0:e33621169e44 6 * The ZBar Bar Code Reader is free software; you can redistribute it
hudakz 0:e33621169e44 7 * and/or modify it under the terms of the GNU Lesser Public License as
hudakz 0:e33621169e44 8 * published by the Free Software Foundation; either version 2.1 of
hudakz 0:e33621169e44 9 * the License, or (at your option) any later version.
hudakz 0:e33621169e44 10 *
hudakz 0:e33621169e44 11 * The ZBar Bar Code Reader is distributed in the hope that it will be
hudakz 0:e33621169e44 12 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
hudakz 0:e33621169e44 13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
hudakz 0:e33621169e44 14 * GNU Lesser Public License for more details.
hudakz 0:e33621169e44 15 *
hudakz 0:e33621169e44 16 * You should have received a copy of the GNU Lesser Public License
hudakz 0:e33621169e44 17 * along with the ZBar Bar Code Reader; if not, write to the Free
hudakz 0:e33621169e44 18 * Software Foundation, Inc., 51 Franklin St, Fifth Floor,
hudakz 0:e33621169e44 19 * Boston, MA 02110-1301 USA
hudakz 0:e33621169e44 20 *
hudakz 0:e33621169e44 21 * http://sourceforge.net/projects/zbar
hudakz 0:e33621169e44 22 *------------------------------------------------------------------------*/
hudakz 0:e33621169e44 23
hudakz 0:e33621169e44 24 #include <config.h>
hudakz 0:e33621169e44 25 #include <stdlib.h> /* strtol */
hudakz 0:e33621169e44 26 #include <string.h> /* strchr, strncmp, strlen */
hudakz 0:e33621169e44 27 #include <errno.h>
hudakz 0:e33621169e44 28 #include <assert.h>
hudakz 0:e33621169e44 29
hudakz 0:e33621169e44 30 #include <zbar.h>
hudakz 0:e33621169e44 31
hudakz 0:e33621169e44 32 int zbar_parse_config (const char *cfgstr,
hudakz 0:e33621169e44 33 zbar_symbol_type_t *sym,
hudakz 0:e33621169e44 34 zbar_config_t *cfg,
hudakz 0:e33621169e44 35 int *val)
hudakz 0:e33621169e44 36 {
hudakz 0:e33621169e44 37 if(!cfgstr)
hudakz 0:e33621169e44 38 return(1);
hudakz 0:e33621169e44 39
hudakz 0:e33621169e44 40 const char *dot = strchr(cfgstr, '.');
hudakz 0:e33621169e44 41 if(dot) {
hudakz 0:e33621169e44 42 int len = dot - cfgstr;
hudakz 0:e33621169e44 43 if(!len || (len == 1 && !strncmp(cfgstr, "*", len)))
hudakz 0:e33621169e44 44 *sym = ZBAR_NONE;
hudakz 0:e33621169e44 45 else if(len < 2)
hudakz 0:e33621169e44 46 return(1);
hudakz 0:e33621169e44 47 else if(!strncmp(cfgstr, "qrcode", len))
hudakz 0:e33621169e44 48 *sym = ZBAR_QRCODE;
hudakz 0:e33621169e44 49 else if(len < 3)
hudakz 0:e33621169e44 50 return(1);
hudakz 0:e33621169e44 51 else if(!strncmp(cfgstr, "upca", len))
hudakz 0:e33621169e44 52 *sym = ZBAR_UPCA;
hudakz 0:e33621169e44 53 else if(!strncmp(cfgstr, "upce", len))
hudakz 0:e33621169e44 54 *sym = ZBAR_UPCE;
hudakz 0:e33621169e44 55 else if(!strncmp(cfgstr, "ean13", len))
hudakz 0:e33621169e44 56 *sym = ZBAR_EAN13;
hudakz 0:e33621169e44 57 else if(!strncmp(cfgstr, "ean8", len))
hudakz 0:e33621169e44 58 *sym = ZBAR_EAN8;
hudakz 0:e33621169e44 59 else if(!strncmp(cfgstr, "i25", len))
hudakz 0:e33621169e44 60 *sym = ZBAR_I25;
hudakz 0:e33621169e44 61 else if(len < 4)
hudakz 0:e33621169e44 62 return(1);
hudakz 0:e33621169e44 63 else if(!strncmp(cfgstr, "scanner", len))
hudakz 0:e33621169e44 64 *sym = ZBAR_PARTIAL; /* FIXME lame */
hudakz 0:e33621169e44 65 else if(!strncmp(cfgstr, "isbn13", len))
hudakz 0:e33621169e44 66 *sym = ZBAR_ISBN13;
hudakz 0:e33621169e44 67 else if(!strncmp(cfgstr, "isbn10", len))
hudakz 0:e33621169e44 68 *sym = ZBAR_ISBN10;
hudakz 0:e33621169e44 69 #if 0
hudakz 0:e33621169e44 70 /* FIXME addons are configured per-main symbol type */
hudakz 0:e33621169e44 71 else if(!strncmp(cfgstr, "addon2", len))
hudakz 0:e33621169e44 72 *sym = ZBAR_ADDON2;
hudakz 0:e33621169e44 73 else if(!strncmp(cfgstr, "addon5", len))
hudakz 0:e33621169e44 74 *sym = ZBAR_ADDON5;
hudakz 0:e33621169e44 75 #endif
hudakz 0:e33621169e44 76 else if(len < 6)
hudakz 0:e33621169e44 77 return(1);
hudakz 0:e33621169e44 78 else if(!strncmp(cfgstr, "code39", len))
hudakz 0:e33621169e44 79 *sym = ZBAR_CODE39;
hudakz 0:e33621169e44 80 else if(!strncmp(cfgstr, "pdf417", len))
hudakz 0:e33621169e44 81 *sym = ZBAR_PDF417;
hudakz 0:e33621169e44 82 else if(len < 7)
hudakz 0:e33621169e44 83 return(1);
hudakz 0:e33621169e44 84 else if(!strncmp(cfgstr, "code128", len))
hudakz 0:e33621169e44 85 *sym = ZBAR_CODE128;
hudakz 0:e33621169e44 86 else
hudakz 0:e33621169e44 87 return(1);
hudakz 0:e33621169e44 88 cfgstr = dot + 1;
hudakz 0:e33621169e44 89 }
hudakz 0:e33621169e44 90 else
hudakz 0:e33621169e44 91 *sym = ZBAR_NONE;
hudakz 0:e33621169e44 92
hudakz 0:e33621169e44 93 int len = strlen(cfgstr);
hudakz 0:e33621169e44 94 const char *eq = strchr(cfgstr, '=');
hudakz 0:e33621169e44 95 if(eq)
hudakz 0:e33621169e44 96 len = eq - cfgstr;
hudakz 0:e33621169e44 97 else
hudakz 0:e33621169e44 98 *val = 1; /* handle this here so we can override later */
hudakz 0:e33621169e44 99 char negate = 0;
hudakz 0:e33621169e44 100
hudakz 0:e33621169e44 101 if(len > 3 && !strncmp(cfgstr, "no-", 3)) {
hudakz 0:e33621169e44 102 negate = 1;
hudakz 0:e33621169e44 103 cfgstr += 3;
hudakz 0:e33621169e44 104 len -= 3;
hudakz 0:e33621169e44 105 }
hudakz 0:e33621169e44 106
hudakz 0:e33621169e44 107 if(len < 1)
hudakz 0:e33621169e44 108 return(1);
hudakz 0:e33621169e44 109 else if(!strncmp(cfgstr, "y-density", len))
hudakz 0:e33621169e44 110 *cfg = ZBAR_CFG_Y_DENSITY;
hudakz 0:e33621169e44 111 else if(!strncmp(cfgstr, "x-density", len))
hudakz 0:e33621169e44 112 *cfg = ZBAR_CFG_X_DENSITY;
hudakz 0:e33621169e44 113 else if(len < 2)
hudakz 0:e33621169e44 114 return(1);
hudakz 0:e33621169e44 115 else if(!strncmp(cfgstr, "enable", len))
hudakz 0:e33621169e44 116 *cfg = ZBAR_CFG_ENABLE;
hudakz 0:e33621169e44 117 else if(len < 3)
hudakz 0:e33621169e44 118 return(1);
hudakz 0:e33621169e44 119 else if(!strncmp(cfgstr, "disable", len)) {
hudakz 0:e33621169e44 120 *cfg = ZBAR_CFG_ENABLE;
hudakz 0:e33621169e44 121 negate = !negate; /* no-disable ?!? */
hudakz 0:e33621169e44 122 }
hudakz 0:e33621169e44 123 else if(!strncmp(cfgstr, "min-length", len))
hudakz 0:e33621169e44 124 *cfg = ZBAR_CFG_MIN_LEN;
hudakz 0:e33621169e44 125 else if(!strncmp(cfgstr, "max-length", len))
hudakz 0:e33621169e44 126 *cfg = ZBAR_CFG_MAX_LEN;
hudakz 0:e33621169e44 127 else if(!strncmp(cfgstr, "ascii", len))
hudakz 0:e33621169e44 128 *cfg = ZBAR_CFG_ASCII;
hudakz 0:e33621169e44 129 else if(!strncmp(cfgstr, "add-check", len))
hudakz 0:e33621169e44 130 *cfg = ZBAR_CFG_ADD_CHECK;
hudakz 0:e33621169e44 131 else if(!strncmp(cfgstr, "emit-check", len))
hudakz 0:e33621169e44 132 *cfg = ZBAR_CFG_EMIT_CHECK;
hudakz 0:e33621169e44 133 else if(!strncmp(cfgstr, "position", len))
hudakz 0:e33621169e44 134 *cfg = ZBAR_CFG_POSITION;
hudakz 0:e33621169e44 135 else
hudakz 0:e33621169e44 136 return(1);
hudakz 0:e33621169e44 137
hudakz 0:e33621169e44 138 if(eq) {
hudakz 0:e33621169e44 139 errno = 0;
hudakz 0:e33621169e44 140 *val = strtol(eq + 1, NULL, 0);
hudakz 0:e33621169e44 141 if(errno)
hudakz 0:e33621169e44 142 return(1);
hudakz 0:e33621169e44 143 }
hudakz 0:e33621169e44 144 if(negate)
hudakz 0:e33621169e44 145 *val = !*val;
hudakz 0:e33621169e44 146
hudakz 0:e33621169e44 147 return(0);
hudakz 0:e33621169e44 148 }