A streamlined version (for embedded use) of Jeff Brown's ZBar library. Visit <http://zbar.sourceforge.net> for more details.
Dependents: BarcodeReader_F103
config.c@1:4f5c042a2d34, 2020-01-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |