home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 December / Chip_2002-12_cd1.bin / tema / clin / CLIN.EXE / SRC / SRC.RAR / KOD9.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  2002-09-24  |  13.3 KB  |  357 lines

  1. // Code 93 (Full ASCII)
  2. Unit Kod9;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, StdCtrls, ExtCtrls,
  9.   U;
  10.  
  11.  procedure HC9(var Co:TMemo);
  12.  procedure S2L9(Co:String; StartStop:Boolean; Crc:Boolean    ; var Raw:String; var RawS:String; var Bits:String);
  13.  
  14.  
  15. implementation
  16.  
  17.  const MaxKod=47;
  18.        MaxKod2=127;
  19.  var Kody:Array[0..48]of record
  20.        Asc:String;
  21.        Kod:Byte;
  22.        Line:String;
  23.      end;
  24.  var KodTab:Array[0..130]of record
  25.        Kod:String;
  26.        Asc:String;
  27.      end;
  28.  
  29.  
  30.  procedure HC9(var Co:TMemo);
  31.  var I,J:Word;
  32.      Pom:String;
  33.  begin
  34.   Co.Clear;
  35.   for I:=0 to MaxKod2 do
  36.    with KodTab[I] do
  37.      begin
  38.        Pom:='';
  39.  
  40.        for J:=1 to Length(Asc) do
  41.        case Asc[J] of #143:Pom:=Pom+'{_$}';
  42.                       #144:Pom:=Pom+'{_%}';
  43.                       #145:Pom:=Pom+'{_/}';
  44.                       #146:Pom:=Pom+'{_+}';
  45.                       else Pom:=Pom+Asc[J];
  46.             end;
  47.  
  48.        Co.Lines.Add(Hex(I)+' "'+Kod+'" ('+Pom+')');
  49.      end;
  50.  end;
  51.  
  52.  procedure S2L9(Co:String; StartStop:Boolean; Crc:Boolean    ; var Raw:String; var RawS:String; var Bits:String);
  53.  var I,J,K:Integer;
  54.      Pom,Pom2:String;
  55.      PomC:Byte;
  56.      E:Integer;
  57.      Ch:Byte;
  58.  begin
  59.    Raw:='';
  60.    RawS:='';
  61.    Bits:='';
  62.    if Length(Co)=0 then Exit;
  63.  //// Vy°a∩ neplatnΘ a zkonvertuj HEX verze
  64.    I:=1;
  65.    while I<=Length(Co) do
  66.    begin
  67. //     Co[I]:=UpCase(Co[I]);
  68.      //// Je to $ ?
  69.      if Co[I]='$' then // Je to HEX
  70.         begin
  71.           Pom:='';
  72.           repeat
  73.             Pom:=Pom+Co[I];
  74.             I:=I+1; // Posu≥ o dalÜφ znak
  75.           until (length(Pom)=3) or (I>Length(Co));
  76.           if I<=Length(Co) then I:=I-1;
  77.           Val(Pom,PomC,E);
  78.           if (E=0)and(PomC<=MaxKod2) then
  79.           begin
  80.             Raw:=Raw+Chr(PomC);
  81.           end;
  82.         end else
  83.         begin   // Nenφ to HEX
  84. //          for J:=0 to MaxKod do
  85. //            if Co[I]=Kody[J].Asc then Raw:=Raw+Chr(Kody[J].Kod);
  86.           if Ord(Co[I])<=MaxKod2 then Raw:=Raw+Co[I];
  87.         end;
  88.      I:=I+1;
  89.    end;
  90.  
  91.  //// Konverze Code 39 Full ASCII > Standard
  92.  
  93.    Pom:=Raw;
  94.    Raw:='';
  95.    for I:=1 to Length(Pom) do
  96.    begin
  97.      Raw:=Raw+KodTab[Ord(Pom[I])].Asc;
  98.    end;
  99.  
  100.    Pom:=Raw;
  101.    Raw:='';
  102.    for I:=1 to Length(Pom) do
  103.    begin
  104.      for J:=0 to MaxKod do
  105.        if Pom[I]=Kody[J].Asc then Raw:=Raw+Chr(Kody[J].Kod);
  106.    end;
  107.  
  108.  //// Crc a Start/Stop
  109.    if Crc then
  110.    begin
  111.      J:=0;
  112.      for I:=1 to Length(Raw) do
  113.      begin
  114.        J:=J+(Length(Raw)-I+1)*Ord(Raw[I]);
  115.      end;
  116.      Raw:=Raw+Chr(J mod 47);
  117.  
  118.      J:=0;
  119.      for I:=1 to Length(Raw) do
  120.      begin
  121.        J:=J+(Length(Raw)-I+1)*Ord(Raw[I]);
  122.      end;
  123.      Raw:=Raw+Chr(J mod 47);
  124.    end;
  125.  
  126.    if StartStop then Raw:=#47+Raw+#48;
  127.  //// Na zobrazitelne
  128.       //// +Na bity
  129.  for I:=1 to Length(Raw) do
  130.   begin
  131.     RawS:=RawS+Kody[Ord(Raw[I])].Asc;
  132.     Pom2:=Kody[Ord(Raw[I])].Line;
  133.       Pom:='';
  134.       Ch:=$31; // ZaΦφnßme jedniΦkou
  135.       for J:=1 to Length(Pom2) do
  136.       begin
  137.         for K:=1 to (Ord(Pom2[J])-$30) do // Pozor na 0-x a 1-x v tabulce bit∙ !!!
  138.           begin
  139.             Pom:=Pom+Chr(Ch);
  140.           end;
  141.         Ch:=Ch xor 1;
  142.       end;
  143.      Bits:=Bits+Pom;
  144.   end;
  145.  
  146.        Pom:=RawS;
  147.        RawS:='';
  148.        for J:=1 to Length(Pom) do
  149.        case Pom[J] of #143:RawS:=RawS+'{_$}';
  150.                       #144:RawS:=RawS+'{_%}';
  151.                       #145:RawS:=RawS+'{_/}';
  152.                       #146:RawS:=RawS+'{_+}';
  153.                       else RawS:=RawS+Pom[J];
  154.             end;
  155.  
  156.  end;
  157.  
  158. begin
  159.  with Kody[00]do begin Asc:='0';Kod:=0;Line:='131112';end;
  160.  with Kody[01]do begin Asc:='1';Kod:=1;Line:='111213';end;
  161.  with Kody[02]do begin Asc:='2';Kod:=2;Line:='111312';end;
  162.  with Kody[03]do begin Asc:='3';Kod:=3;Line:='111411';end;
  163.  with Kody[04]do begin Asc:='4';Kod:=4;Line:='121113';end;
  164.  with Kody[05]do begin Asc:='5';Kod:=5;Line:='121212';end;
  165.  with Kody[06]do begin Asc:='6';Kod:=6;Line:='121311';end;
  166.  with Kody[07]do begin Asc:='7';Kod:=7;Line:='111114';end;
  167.  with Kody[08]do begin Asc:='8';Kod:=8;Line:='131211';end;
  168.  with Kody[09]do begin Asc:='9';Kod:=9;Line:='141111';end;
  169.  
  170.  with Kody[10]do begin Asc:='A';Kod:=10;Line:='211113';end;
  171.  with Kody[11]do begin Asc:='B';Kod:=11;Line:='211212';end;
  172.  with Kody[12]do begin Asc:='C';Kod:=12;Line:='211311';end;
  173.  with Kody[13]do begin Asc:='D';Kod:=13;Line:='221112';end;
  174.  with Kody[14]do begin Asc:='E';Kod:=14;Line:='221211';end;
  175.  with Kody[15]do begin Asc:='F';Kod:=15;Line:='231111';end;
  176.  with Kody[16]do begin Asc:='G';Kod:=16;Line:='112113';end;
  177.  with Kody[17]do begin Asc:='H';Kod:=17;Line:='112212';end;
  178.  with Kody[18]do begin Asc:='I';Kod:=18;Line:='112311';end;
  179.  with Kody[19]do begin Asc:='J';Kod:=19;Line:='122112';end;
  180.  
  181.  with Kody[20]do begin Asc:='K';Kod:=20;Line:='132111';end;
  182.  with Kody[21]do begin Asc:='L';Kod:=21;Line:='111123';end;
  183.  with Kody[22]do begin Asc:='M';Kod:=22;Line:='111222';end;
  184.  with Kody[23]do begin Asc:='N';Kod:=23;Line:='111321';end;
  185.  with Kody[24]do begin Asc:='O';Kod:=24;Line:='121122';end;
  186.  with Kody[25]do begin Asc:='P';Kod:=25;Line:='131121';end;
  187.  with Kody[26]do begin Asc:='Q';Kod:=26;Line:='212112';end;
  188.  with Kody[27]do begin Asc:='R';Kod:=27;Line:='212211';end;
  189.  with Kody[28]do begin Asc:='S';Kod:=28;Line:='211122';end;
  190.  with Kody[29]do begin Asc:='T';Kod:=29;Line:='211221';end;
  191.  
  192.  with Kody[30]do begin Asc:='U';Kod:=30;Line:='221121';end;
  193.  with Kody[31]do begin Asc:='V';Kod:=31;Line:='222111';end;
  194.  with Kody[32]do begin Asc:='W';Kod:=32;Line:='112122';end;
  195.  with Kody[33]do begin Asc:='X';Kod:=33;Line:='112221';end;
  196.  with Kody[34]do begin Asc:='Y';Kod:=34;Line:='122121';end;
  197.  with Kody[35]do begin Asc:='Z';Kod:=35;Line:='123111';end;
  198.  with Kody[36]do begin Asc:='-';Kod:=36;Line:='121131';end;
  199.  with Kody[37]do begin Asc:='.';Kod:=37;Line:='311112';end;
  200.  with Kody[38]do begin Asc:=' ';Kod:=38;Line:='311211';end;
  201.  with Kody[39]do begin Asc:='$';Kod:=39;Line:='321111';end;
  202.  
  203.  with Kody[40]do begin Asc:='/';Kod:=40;Line:='112131';end;
  204.  with Kody[41]do begin Asc:='+';Kod:=41;Line:='113121';end;
  205.  with Kody[42]do begin Asc:='%';Kod:=42;Line:='211131';end;
  206.  with Kody[43]do begin Asc:=#143;Kod:=43;Line:='121221';end;
  207.  with Kody[44]do begin Asc:=#144;Kod:=44;Line:='312111';end;
  208.  with Kody[45]do begin Asc:=#145;Kod:=45;Line:='311121';end;
  209.  with Kody[46]do begin Asc:=#146;Kod:=46;Line:='122211';end;
  210.  with Kody[47]do begin Asc:='{Start}';Kod:=47;Line:='111141';end;
  211.  with Kody[48]do begin Asc:='{Stop}';Kod:=48;Line:='1111411';end;
  212.  
  213.  with KodTab[0]do begin Kod:='NUL';Asc:=#144'U';end;
  214.  with KodTab[1]do begin Kod:='SOH';Asc:=#143'A';end;
  215.  with KodTab[2]do begin Kod:='STX';Asc:=#143'B';end;
  216.  with KodTab[3]do begin Kod:='ETX';Asc:=#143'C';end;
  217.  with KodTab[4]do begin Kod:='EOT';Asc:=#143'D';end;
  218.  with KodTab[5]do begin Kod:='ENQ';Asc:=#143'E';end;
  219.  with KodTab[6]do begin Kod:='ACK';Asc:=#143'F';end;
  220.  with KodTab[7]do begin Kod:='BEL';Asc:=#143'G';end;
  221.  with KodTab[8]do begin Kod:='BS';Asc:=#143'H';end;
  222.  with KodTab[9]do begin Kod:='HT';Asc:=#143'I';end;
  223.  
  224.  with KodTab[10]do begin Kod:='LF';Asc:=#143'J';end;
  225.  with KodTab[11]do begin Kod:='VT';Asc:=#143'K';end;
  226.  with KodTab[12]do begin Kod:='FF';Asc:=#143'L';end;
  227.  with KodTab[13]do begin Kod:='CR';Asc:=#143'M';end;
  228.  with KodTab[14]do begin Kod:='SO';Asc:=#143'N';end;
  229.  with KodTab[15]do begin Kod:='SI';Asc:=#143'O';end;
  230.  with KodTab[16]do begin Kod:='DLE';Asc:=#143'P';end;
  231.  with KodTab[17]do begin Kod:='DC1';Asc:=#143'Q';end;
  232.  with KodTab[18]do begin Kod:='DC2';Asc:=#143'R';end;
  233.  with KodTab[19]do begin Kod:='DC3';Asc:=#143'S';end;
  234.  
  235.  with KodTab[20]do begin Kod:='DC4';Asc:=#143'T';end;
  236.  with KodTab[21]do begin Kod:='NAK';Asc:=#143'U';end;
  237.  with KodTab[22]do begin Kod:='SYN';Asc:=#143'V';end;
  238.  with KodTab[23]do begin Kod:='ETB';Asc:=#143'W';end;
  239.  with KodTab[24]do begin Kod:='CAN';Asc:=#143'X';end;
  240.  with KodTab[25]do begin Kod:='EM';Asc:=#143'Y';end;
  241.  with KodTab[26]do begin Kod:='SUB';Asc:=#143'Z';end;
  242.  with KodTab[27]do begin Kod:='ESC';Asc:=#144'A';end;
  243.  with KodTab[28]do begin Kod:='FS';Asc:=#144'B';end;
  244.  with KodTab[29]do begin Kod:='GS';Asc:=#144'C';end;
  245.  
  246.  with KodTab[30]do begin Kod:='RS';Asc:=#144'D';end;
  247.  with KodTab[31]do begin Kod:='US';Asc:=#144'E';end;
  248.  with KodTab[32]do begin Kod:='SPACE';Asc:=' ';end;
  249.  with KodTab[33]do begin Kod:='!';Asc:=#145'A';end;
  250.  with KodTab[34]do begin Kod:='"';Asc:=#145'B';end;
  251.  with KodTab[35]do begin Kod:='#';Asc:=#145'C';end;
  252.  with KodTab[36]do begin Kod:='$';Asc:='$';end;
  253.  with KodTab[37]do begin Kod:='%';Asc:='%';end;
  254.  with KodTab[38]do begin Kod:='&';Asc:=#145'F';end;
  255.  with KodTab[39]do begin Kod:=#39;Asc:=#145'G';end;
  256.  
  257.  with KodTab[40]do begin Kod:='(';Asc:=#145'H';end;
  258.  with KodTab[41]do begin Kod:=')';Asc:=#145'I';end;
  259.  with KodTab[42]do begin Kod:='*';Asc:=#145'J';end;
  260.  with KodTab[43]do begin Kod:='+';Asc:='+';end;
  261.  with KodTab[44]do begin Kod:=',';Asc:=#145'L';end;
  262.  with KodTab[45]do begin Kod:='-';Asc:='-';end;
  263.  with KodTab[46]do begin Kod:='.';Asc:='.';end;
  264.  with KodTab[47]do begin Kod:='/';Asc:='/';end;
  265.  with KodTab[48]do begin Kod:='0';Asc:='0';end;
  266.  with KodTab[49]do begin Kod:='1';Asc:='1';end;
  267.  
  268.  with KodTab[50]do begin Kod:='2';Asc:='2';end;
  269.  with KodTab[51]do begin Kod:='3';Asc:='3';end;
  270.  with KodTab[52]do begin Kod:='4';Asc:='4';end;
  271.  with KodTab[53]do begin Kod:='5';Asc:='5';end;
  272.  with KodTab[54]do begin Kod:='6';Asc:='6';end;
  273.  with KodTab[55]do begin Kod:='7';Asc:='7';end;
  274.  with KodTab[56]do begin Kod:='8';Asc:='8';end;
  275.  with KodTab[57]do begin Kod:='9';Asc:='9';end;
  276.  with KodTab[58]do begin Kod:=':';Asc:=#145'Z';end;
  277.  with KodTab[59]do begin Kod:=';';Asc:=#144'F';end;
  278.  
  279.  with KodTab[60]do begin Kod:='<';Asc:=#144'G';end;
  280.  with KodTab[61]do begin Kod:='=';Asc:=#144'H';end;
  281.  with KodTab[62]do begin Kod:='>';Asc:=#144'I';end;
  282.  with KodTab[63]do begin Kod:='?';Asc:=#144'J';end;
  283.  with KodTab[64]do begin Kod:='@';Asc:=#144'V';end;
  284.  with KodTab[65]do begin Kod:='A';Asc:='A';end;
  285.  with KodTab[66]do begin Kod:='B';Asc:='B';end;
  286.  with KodTab[67]do begin Kod:='C';Asc:='C';end;
  287.  with KodTab[68]do begin Kod:='D';Asc:='D';end;
  288.  with KodTab[69]do begin Kod:='E';Asc:='E';end;
  289.  
  290.  with KodTab[70]do begin Kod:='F';Asc:='F';end;
  291.  with KodTab[71]do begin Kod:='G';Asc:='G';end;
  292.  with KodTab[72]do begin Kod:='H';Asc:='H';end;
  293.  with KodTab[73]do begin Kod:='I';Asc:='I';end;
  294.  with KodTab[74]do begin Kod:='J';Asc:='J';end;
  295.  with KodTab[75]do begin Kod:='K';Asc:='K';end;
  296.  with KodTab[76]do begin Kod:='L';Asc:='L';end;
  297.  with KodTab[77]do begin Kod:='M';Asc:='M';end;
  298.  with KodTab[78]do begin Kod:='N';Asc:='N';end;
  299.  with KodTab[79]do begin Kod:='O';Asc:='O';end;
  300.  
  301.  with KodTab[80]do begin Kod:='P';Asc:='P';end;
  302.  with KodTab[81]do begin Kod:='Q';Asc:='Q';end;
  303.  with KodTab[82]do begin Kod:='R';Asc:='R';end;
  304.  with KodTab[83]do begin Kod:='S';Asc:='S';end;
  305.  with KodTab[84]do begin Kod:='T';Asc:='T';end;
  306.  with KodTab[85]do begin Kod:='U';Asc:='U';end;
  307.  with KodTab[86]do begin Kod:='V';Asc:='V';end;
  308.  with KodTab[87]do begin Kod:='W';Asc:='W';end;
  309.  with KodTab[88]do begin Kod:='X';Asc:='X';end;
  310.  with KodTab[89]do begin Kod:='Y';Asc:='Y';end;
  311.  
  312.  with KodTab[90]do begin Kod:='Z';Asc:='Z';end;
  313.  with KodTab[91]do begin Kod:='[';Asc:=#144'K';end;
  314.  with KodTab[92]do begin Kod:='\';Asc:=#144'L';end;
  315.  with KodTab[93]do begin Kod:=']';Asc:=#144'M';end;
  316.  with KodTab[94]do begin Kod:='^';Asc:=#144'N';end;
  317.  with KodTab[95]do begin Kod:='_';Asc:=#144'O';end;
  318.  with KodTab[96]do begin Kod:=#96;Asc:=#144'W';end;
  319.  with KodTab[97]do begin Kod:='a';Asc:=#146'A';end;
  320.  with KodTab[98]do begin Kod:='b';Asc:=#146'B';end;
  321.  with KodTab[99]do begin Kod:='c';Asc:=#146'C';end;
  322.  
  323.  with KodTab[100]do begin Kod:='d';Asc:=#146'D';end;
  324.  with KodTab[101]do begin Kod:='e';Asc:=#146'E';end;
  325.  with KodTab[102]do begin Kod:='f';Asc:=#146'F';end;
  326.  with KodTab[103]do begin Kod:='g';Asc:=#146'G';end;
  327.  with KodTab[104]do begin Kod:='h';Asc:=#146'H';end;
  328.  with KodTab[105]do begin Kod:='i';Asc:=#146'I';end;
  329.  with KodTab[106]do begin Kod:='j';Asc:=#146'J';end;
  330.  with KodTab[107]do begin Kod:='k';Asc:=#146'K';end;
  331.  with KodTab[108]do begin Kod:='l';Asc:=#146'L';end;
  332.  with KodTab[109]do begin Kod:='m';Asc:=#146'M';end;
  333.  
  334.  with KodTab[110]do begin Kod:='n';Asc:=#146'N';end;
  335.  with KodTab[111]do begin Kod:='o';Asc:=#146'O';end;
  336.  with KodTab[112]do begin Kod:='p';Asc:=#146'P';end;
  337.  with KodTab[113]do begin Kod:='q';Asc:=#146'Q';end;
  338.  with KodTab[114]do begin Kod:='r';Asc:=#146'R';end;
  339.  with KodTab[115]do begin Kod:='s';Asc:=#146'S';end;
  340.  with KodTab[116]do begin Kod:='t';Asc:=#146'T';end;
  341.  with KodTab[117]do begin Kod:='u';Asc:=#146'U';end;
  342.  with KodTab[118]do begin Kod:='v';Asc:=#146'V';end;
  343.  with KodTab[119]do begin Kod:='w';Asc:=#146'W';end;
  344.  
  345.  with KodTab[120]do begin Kod:='x';Asc:=#146'X';end;
  346.  with KodTab[121]do begin Kod:='y';Asc:=#146'Y';end;
  347.  with KodTab[122]do begin Kod:='z';Asc:=#146'Z';end;
  348.  with KodTab[123]do begin Kod:='{';Asc:=#144'P';end;
  349.  with KodTab[124]do begin Kod:=#124;Asc:=#144'Q';end;
  350.  with KodTab[125]do begin Kod:='}';Asc:=#144'R';end;
  351.  with KodTab[126]do begin Kod:='~';Asc:=#144'S';end;
  352.  with KodTab[127]do begin Kod:='DEL';Asc:=#144'T';end;
  353.   with KodTab[128]do begin Kod:='DEL';Asc:=#144'X';end;
  354.   with KodTab[129]do begin Kod:='DEL';Asc:=#144'Y';end;
  355.   with KodTab[130]do begin Kod:='DEL';Asc:=#144'Z';end;
  356. end.
  357.