亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? iec16022ecc200.c

?? IEC16022 bar code generation library and RS encode
?? C
?? 第 1 頁 / 共 3 頁
字號:
// IEC16022 bar code generation library
// This software is provided under the terms of the GPL v2 or later.
// This software is provided free of charge with a full "Money back" guarantee.
// Use entirely at your own risk. We accept no liability. If you don't like that - don't use it.

// Adrian Kennard, Andrews & Arnold Ltd
// with help from Cliff Hones on the RS coding
//
// $Log: iec16022ecc200.c,v $
// Revision 1.8  2004/09/12 10:35:25  cvs
// Minor fixes to auto encoding, and more precise placement of text on stamp output.
//
// Revision 1.7  2004/09/11 11:16:20  cvs
// Fixed binary format encoding, and added output file to indicia
//
// Revision 1.6  2004/09/10 16:10:30  cvs
// Correction of declaration ordering
//
// Revision 1.5  2004/09/09 12:35:48  cvs
// Interleaved (large) codes now working as well.
// Fixed bugs in the auto encoding (was selecting EDIFACT wrongly)
//
// Revision 1.4  2004/09/09 07:45:09  cvs
// Added change history to source files
// Added "info" type to IEC16022
// Added exact size checking shortcodes on encoding generation for iec16022
//


#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include <popt.h>
#include <malloc.h>
#include "reedsol.h"
#include "iec16022ecc200.h"

static struct ecc200matrix_s
{
   int H,
     W;
   int FH,
     FW;
   int bytes;
   int datablock,
     rsblock;
}
ecc200matrix[] =
{
   10, 10, 10, 10, 3, 3, 5,     //
      12, 12, 12, 12, 5, 5, 7,  //
      8, 18, 8, 18, 5, 5, 7,    //
      14, 14, 14, 14, 8, 8, 10, //
      8, 32, 8, 16, 10, 10, 11, //
      16, 16, 16, 16, 12, 12, 12,       //
      12, 26, 12, 26, 16, 16, 14,       //
      18, 18, 18, 18, 18, 18, 14,       //
      20, 20, 20, 20, 22, 22, 18,       //
      12, 36, 12, 18, 22, 22, 18,       //
      22, 22, 22, 22, 30, 30, 20,       //
      16, 36, 16, 18, 32, 32, 24,       //
      24, 24, 24, 24, 36, 36, 24,       //
      26, 26, 26, 26, 44, 44, 28,       //
      16, 48, 16, 24, 49, 49, 28,       //
      32, 32, 16, 16, 62, 62, 36,       //
      36, 36, 18, 18, 86, 86, 42,       //
      40, 40, 20, 20, 114, 114, 48,     //
      44, 44, 22, 22, 144, 144, 56,     //
      48, 48, 24, 24, 174, 174, 68,     //
      52, 52, 26, 26, 204, 102, 42,     //
      64, 64, 16, 16, 280, 140, 56,     //
      72, 72, 18, 18, 368, 92, 36,      //
      80, 80, 20, 20, 456, 114, 48,     //
      88, 88, 22, 22, 576, 144, 56,     //
      96, 96, 24, 24, 696, 174, 68,     //
      104, 104, 26, 26, 816, 136, 56,   //
      120, 120, 20, 20, 1050, 175, 68,  //
      132, 132, 22, 22, 1304, 163, 62,  //
      144, 144, 24, 24, 1558, 156, 62,  // 156*4+155*2
      0                         // terminate
};

 // simple checked response malloc
static void *
safemalloc (int n)
{
   void *p = malloc (n);
   if (!p)
   {
      fprintf (stderr, "Malloc(%d) failed\n", n);
      exit (1);
   }
   return p;
}

// Annex M placement alorithm low level
static void
ecc200placementbit (int *array, int NR, int NC, int r, int c, int p, char b)
{
   if (r < 0)
   {
      r += NR;
      c += 4 - ((NR + 4) % 8);
   }
   if (c < 0)
   {
      c += NC;
      r += 4 - ((NC + 4) % 8);
   }
   array[r * NC + c] = (p << 3) + b;
}

static void
ecc200placementblock (int *array, int NR, int NC, int r, int c, int p)
{
   ecc200placementbit (array, NR, NC, r - 2, c - 2, p, 7);
   ecc200placementbit (array, NR, NC, r - 2, c - 1, p, 6);
   ecc200placementbit (array, NR, NC, r - 1, c - 2, p, 5);
   ecc200placementbit (array, NR, NC, r - 1, c - 1, p, 4);
   ecc200placementbit (array, NR, NC, r - 1, c - 0, p, 3);
   ecc200placementbit (array, NR, NC, r - 0, c - 2, p, 2);
   ecc200placementbit (array, NR, NC, r - 0, c - 1, p, 1);
   ecc200placementbit (array, NR, NC, r - 0, c - 0, p, 0);
}

static void
ecc200placementcornerA (int *array, int NR, int NC, int p)
{
   ecc200placementbit (array, NR, NC, NR - 1, 0, p, 7);
   ecc200placementbit (array, NR, NC, NR - 1, 1, p, 6);
   ecc200placementbit (array, NR, NC, NR - 1, 2, p, 5);
   ecc200placementbit (array, NR, NC, 0, NC - 2, p, 4);
   ecc200placementbit (array, NR, NC, 0, NC - 1, p, 3);
   ecc200placementbit (array, NR, NC, 1, NC - 1, p, 2);
   ecc200placementbit (array, NR, NC, 2, NC - 1, p, 1);
   ecc200placementbit (array, NR, NC, 3, NC - 1, p, 0);
}

static void
ecc200placementcornerB (int *array, int NR, int NC, int p)
{
   ecc200placementbit (array, NR, NC, NR - 3, 0, p, 7);
   ecc200placementbit (array, NR, NC, NR - 2, 0, p, 6);
   ecc200placementbit (array, NR, NC, NR - 1, 0, p, 5);
   ecc200placementbit (array, NR, NC, 0, NC - 4, p, 4);
   ecc200placementbit (array, NR, NC, 0, NC - 3, p, 3);
   ecc200placementbit (array, NR, NC, 0, NC - 2, p, 2);
   ecc200placementbit (array, NR, NC, 0, NC - 1, p, 1);
   ecc200placementbit (array, NR, NC, 1, NC - 1, p, 0);
}

static void
ecc200placementcornerC (int *array, int NR, int NC, int p)
{
   ecc200placementbit (array, NR, NC, NR - 3, 0, p, 7);
   ecc200placementbit (array, NR, NC, NR - 2, 0, p, 6);
   ecc200placementbit (array, NR, NC, NR - 1, 0, p, 5);
   ecc200placementbit (array, NR, NC, 0, NC - 2, p, 4);
   ecc200placementbit (array, NR, NC, 0, NC - 1, p, 3);
   ecc200placementbit (array, NR, NC, 1, NC - 1, p, 2);
   ecc200placementbit (array, NR, NC, 2, NC - 1, p, 1);
   ecc200placementbit (array, NR, NC, 3, NC - 1, p, 0);
}

static void
ecc200placementcornerD (int *array, int NR, int NC, int p)
{
   ecc200placementbit (array, NR, NC, NR - 1, 0, p, 7);
   ecc200placementbit (array, NR, NC, NR - 1, NC - 1, p, 6);
   ecc200placementbit (array, NR, NC, 0, NC - 3, p, 5);
   ecc200placementbit (array, NR, NC, 0, NC - 2, p, 4);
   ecc200placementbit (array, NR, NC, 0, NC - 1, p, 3);
   ecc200placementbit (array, NR, NC, 1, NC - 3, p, 2);
   ecc200placementbit (array, NR, NC, 1, NC - 2, p, 1);
   ecc200placementbit (array, NR, NC, 1, NC - 1, p, 0);
}

// Annex M placement alorithm main function
static void
ecc200placement (int *array, int NR, int NC)
{
   int r,
     c,
     p;
   // invalidate
   for (r = 0; r < NR; r++)
      for (c = 0; c < NC; c++)
         array[r * NC + c] = 0;
   // start
   p = 1;
   r = 4;
   c = 0;
   do
   {
      // check corner
      if (r == NR && !c)
         ecc200placementcornerA (array, NR, NC, p++);
      if (r == NR - 2 && !c && NC % 4)
         ecc200placementcornerB (array, NR, NC, p++);
      if (r == NR - 2 && !c && (NC % 8) == 4)
         ecc200placementcornerC (array, NR, NC, p++);
      if (r == NR + 4 && c == 2 && !(NC % 8))
         ecc200placementcornerD (array, NR, NC, p++);
      // up/right
      do
      {
         if (r < NR && c >= 0 && !array[r * NC + c])
            ecc200placementblock (array, NR, NC, r, c, p++);
         r -= 2;
         c += 2;
      }
      while (r >= 0 && c < NC);
      r++;
      c += 3;
      // down/left
      do
      {
         if (r >= 0 && c < NC && !array[r * NC + c])
            ecc200placementblock (array, NR, NC, r, c, p++);
         r += 2;
         c -= 2;
      }
      while (r < NR && c >= 0);
      r += 3;
      c++;
   }
   while (r < NR || c < NC);
   // unfilled corner
   if (!array[NR * NC - 1])
      array[NR * NC - 1] = array[NR * NC - NC - 2] = 1;
}

// calculate and append ecc code, and if necessary interleave
static void
ecc200 (unsigned char *binary, int bytes, int datablock, int rsblock)
{
   int blocks = (bytes + 2) / datablock,
      b;
   rs_init_gf (0x12d);
   rs_init_code (rsblock, 1);
   for (b = 0; b < blocks; b++)
   {
      unsigned char buf[256],
        ecc[256];
      int n,
        p = 0;
      for (n = b; n < bytes; n += blocks)
         buf[p++] = binary[n];
      rs_encode (p, buf, ecc);
      p = rsblock - 1;          // comes back reversed
      for (n = b; n < rsblock * blocks; n += blocks)
         binary[bytes + n] = ecc[p--];
   }
}

// perform encoding for ecc200, source s len sl, to target t len tl, using optional encoding control string e
// return 1 if OK, 0 if failed. Does all necessary padding to tl
char
ecc200encode (unsigned char *t, int tl, unsigned char *s, int sl, char *encoding, int *lenp)
{
   char enc = 'a';              // start in ASCII encoding mode
   int tp = 0,
      sp = 0;
   if (strlen (encoding) < sl)
   {
      fprintf (stderr, "Encoding string too short\n");
      return 0;
   }
   // do the encoding
   while (sp < sl && tp < tl)
   {
      char newenc = enc;        // suggest new encoding
      if (tl - tp <= 1 && (enc == 'c' || enc == 't') || tl - tp <= 2 && enc == 'x')
         enc = 'a';             // auto revert to ASCII
      newenc = tolower (encoding[sp]);
      switch (newenc)
      {                         // encode character
      case 'c':                // C40
      case 't':                // Text
      case 'x':                // X12
         {
            char out[6],
              p = 0;
            const char *e,
             *s2 = "!\"#$%&'()*+,-./:;<=>?@[\\]_",
               *s3 = 0;
            if (newenc == 'c')
            {
               e = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
               s3 = "`abcdefghijklmnopqrstuvwxyz{|}~\177";
            }
            if (newenc == 't')
            {
               e = " 0123456789abcdefghijklmnopqrstuvwxyz";
               s3 = "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\177";
            }
            if (newenc == 'x')
               e = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\r*>";
            do
            {
               unsigned char c = s[sp++];
               char *w;
               if (c & 0x80)
               {
                  if (newenc == 'x')
                  {
                     fprintf (stderr, "Cannot encode char 0x%02X in X12\n", c);
                     return 0;
                  }
                  c &= 0x7f;
                  out[p++] = 1;
                  out[p++] = 30;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲精久久久久久| 色婷婷亚洲婷婷| 26uuu国产一区二区三区| 久久精品99国产国产精| 欧美成人精品3d动漫h| 久久国产精品无码网站| 久久久久久久综合| 99国产麻豆精品| 亚洲一区在线电影| 欧美放荡的少妇| 国产一区二区三区四| 国产精品成人免费| 欧美日韩久久一区二区| 青青草国产成人99久久| 久久久久久久久久久久久女国产乱| 国产成a人无v码亚洲福利| 国产精品高潮呻吟久久| 欧美性videosxxxxx| 久久er99热精品一区二区| 国产欧美日韩精品在线| 91传媒视频在线播放| 蜜桃精品视频在线| 日韩久久一区二区| 欧美一级欧美三级在线观看| 国产精品一区二区x88av| 夜夜夜精品看看| 久久综合资源网| 日本韩国一区二区三区视频| 美女网站一区二区| 综合av第一页| 久久久久久久久一| 欧美亚洲一区二区在线| 国产一区视频在线看| 一级精品视频在线观看宜春院| 精品国产伦理网| 色偷偷久久一区二区三区| 久久99精品久久久久久久久久久久| 国产精品美女久久久久高潮| 91精品国产综合久久婷婷香蕉| 国产91富婆露脸刺激对白| 亚洲图片欧美视频| 国产精品少妇自拍| 日韩一级黄色大片| 91黄色激情网站| 国产成人免费视| 日韩av电影免费观看高清完整版在线观看 | 亚洲摸摸操操av| 日韩欧美三级在线| 欧美日韩中文国产| av成人动漫在线观看| 免费看黄色91| 亚洲18色成人| 亚洲综合自拍偷拍| 最新中文字幕一区二区三区| 久久亚洲二区三区| 日韩欧美二区三区| 欧美猛男男办公室激情| 日本乱人伦一区| 色综合久久综合网欧美综合网 | 国产精品二区一区二区aⅴ污介绍| 91精品免费在线观看| 欧美自拍丝袜亚洲| 日本国产一区二区| 99久久精品免费看国产| 国产精品一区2区| 国产乱一区二区| 黄色资源网久久资源365| 日韩国产欧美在线播放| 日韩综合小视频| 天天操天天色综合| 日本欧美一区二区三区乱码| 亚洲成国产人片在线观看| 亚洲一区在线看| 亚洲成人久久影院| 男女男精品视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 日本美女一区二区| 免费观看在线色综合| 青青青爽久久午夜综合久久午夜| 日韩二区三区四区| 美女网站色91| 国产一级精品在线| av成人免费在线观看| 99久久99久久免费精品蜜臀| 99国产欧美久久久精品| 色偷偷88欧美精品久久久| 色国产综合视频| 欧美日韩在线三区| 日韩欧美一区在线| 欧美r级在线观看| 国产日韩精品一区二区三区| 一区视频在线播放| 亚洲线精品一区二区三区八戒| 亚洲成人tv网| 韩国中文字幕2020精品| 高清不卡在线观看av| 色综合久久久久| 8v天堂国产在线一区二区| 欧美一区二区三区系列电影| 久久综合av免费| 18成人在线视频| 天天综合色天天综合| 国产精品99久久久久久久女警| av动漫一区二区| 欧美日韩国产bt| 国产亚洲成av人在线观看导航| 亚洲欧美视频在线观看视频| 五月天激情综合网| 国产在线视频一区二区三区| 9色porny自拍视频一区二区| 欧美日本韩国一区二区三区视频| 欧美成人性战久久| 亚洲欧美一区二区在线观看| 日韩精品高清不卡| 国产·精品毛片| 在线播放欧美女士性生活| 久久精品亚洲麻豆av一区二区| 亚洲欧美日韩国产另类专区| 男女视频一区二区| 91社区在线播放| 精品成人一区二区三区四区| 亚洲美女淫视频| 国产一区91精品张津瑜| 欧美性大战久久久久久久 | 国产精品麻豆99久久久久久| 亚洲成人精品一区二区| 成人午夜视频网站| 欧美日韩成人一区| 国产精品久久久久久久蜜臀 | 久久一区二区视频| 亚洲国产另类精品专区| 国产一区二区福利| 欧美一级久久久久久久大片| 中文字幕亚洲一区二区va在线| 蜜臀av性久久久久av蜜臀妖精| aaa亚洲精品一二三区| 欧美成人性战久久| 天堂av在线一区| 91在线高清观看| 欧美经典一区二区| 久久国产夜色精品鲁鲁99| 在线观看91视频| 亚洲欧美另类小说视频| 国产精品一区一区三区| 欧美一二三区在线| 亚洲国产毛片aaaaa无费看| 99久久综合99久久综合网站| 久久婷婷成人综合色| 久久精品72免费观看| 欧美一区二区精品久久911| 一区二区三区精品| 色94色欧美sute亚洲线路一ni| 国产欧美1区2区3区| 国产一区二区三区日韩| 欧美变态口味重另类| 日韩va亚洲va欧美va久久| 欧美美女激情18p| 亚洲制服丝袜在线| 在线精品亚洲一区二区不卡| 中文字幕在线观看一区二区| 国产成人在线观看| 国产色产综合色产在线视频| 国产一区二区美女| 久久综合久久久久88| 精品亚洲国产成人av制服丝袜| 欧美一级精品在线| 久久99日本精品| 日韩美女天天操| 精品一区二区国语对白| 久久五月婷婷丁香社区| 国产一区二区三区不卡在线观看 | www.久久久久久久久| 国产精品美女久久久久久久久 | 在线精品观看国产| 亚洲国产欧美另类丝袜| 精品视频在线免费观看| 午夜视频在线观看一区二区 | 99re免费视频精品全部| 亚洲色图丝袜美腿| 色噜噜狠狠成人网p站| 亚洲一区二区三区免费视频| 欧美天天综合网| 麻豆一区二区在线| 2023国产精华国产精品| 国产91精品久久久久久久网曝门 | 亚洲国产日韩在线一区模特| 欧美日韩一区中文字幕| 视频一区二区三区在线| 精品国产免费一区二区三区四区 | 国产欧美一区二区精品忘忧草| 成人免费视频一区| 一区二区三区欧美日| 欧美日韩亚洲综合一区 | 天堂久久一区二区三区| 欧美大片在线观看一区| 成人开心网精品视频| 亚洲综合免费观看高清完整版在线 | 国产三级一区二区三区| 91首页免费视频| 日韩国产在线观看一区|