Advertisement
Shiny_

base64.inc

Sep 1st, 2013
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.31 KB | None | 0 0
  1. // License:
  2.     /*
  3.         Licencja:
  4.         Copyright (c) 2013, Shiny
  5.         Wszystkie prawa zastrzeżone.
  6.         Redystrybucja i używanie, czy to w formie kodu źródłowego, czy w formie kodu wykonawczego, są dozwolone pod warunkiem spełnienia poniższych warunków:
  7.         Redystrybucja kodu źródłowego musi zawierać powyższą notę dotyczącą praw autorskich, niniejszą listę warunków oraz poniższe oświadczenie o wyłączeniu odpowiedzialności.
  8.         Redystrybucja kodu wykonawczego musi zawierać powyższą notę dotyczącą praw autorskich, niniejszą listę warunków oraz poniższe oświadczenie o wyłączeniu odpowiedzialności w dokumentacji i/lub w w innych materiałach dostarczanych wraz z kopią oprogramowania.
  9.         Ani nazwa '[Include] Base64', ani nazwa Base 64 - Include nie mogą być użyte celem sygnowania lub promowania produktów pochodzących od tego oprogramowania, bez szczególnego, wyrażonego na piśmie ich zezwolenia.
  10.         To oprogramowanie jest dostarczone przez użytkownika Shiny “tak, jak jest”. Każda, dorozumiana lub bezpośrednio wyrażona gwarancja, nie wyłączając dorozumianej gwarancji przydatności handlowej i przydatności do określonego zastosowania, jest wyłączona.
  11.         W żadnym wypadku posiadacze praw autorskich nie mogą być odpowiedzialni za jakiekolwiek bezpośrednie, pośrednie, incydentalne, specjalne, uboczne i wtórne szkody (nie wyłączając obowiązku dostarczenia produktu zastępczego lub serwisu, odpowiedzialności z tytułu utraty walorów użytkowych, utraty danych lub korzyści a także przerw w pracy przedsiębiorstwa)
  12.         spowodowane w jakikolwiek sposób i na podstawie istniejącej w torii odpowiedzialności kontraktowej, całkowitej lub deliktowej (wynikłej zarówno z niedbalstwa jak innych postaci winy), powstałe w jakikolwiek sposób w wyniku używania lub mające związek z używaniem oprogramowania, nawet jeśli o możliwości powstania takich szkód ostrzeżono.
  13.     */ 
  14. // Conditions:
  15.     #if defined _base64_included
  16.         #endinput
  17.     #endif
  18.     #define _base64_included
  19.  
  20. // Macros:
  21.     #define e:base64(%0,%1) encode(%0,%1)
  22.     #define d:base64(%0,%1) decode(%0,%1)
  23.    
  24. // Variables:
  25.     new const LettersTable[] = {
  26.         "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  27.     };
  28.    
  29.     new const Decoder[] = {
  30.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  31.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  32.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  33.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  34.         0,  0,  0,  62, 0,  0,  0,  63, 52, 53,
  35.         54, 55, 56, 57, 58, 59, 60, 61, 0,  0,
  36.         0,  0,  0,  0,  0,  0,  1,  2,  3,  4,
  37.         5,  6,  7,  8,  9,  10, 11, 12, 13, 14,
  38.         15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
  39.         25, 0,  0,  0,  0,  0,  0,  26, 27, 28,
  40.         29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
  41.         39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
  42.         49, 50, 51, 0,  0,  0,  0,  0,  0,  0,
  43.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  44.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  45.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  46.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  47.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  48.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  49.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  50.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  51.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  52.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  53.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  54.         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  55.         0,  0,  0,  0,  0,  0
  56.     };
  57.  
  58. // Functions:
  59.     /** Funkcja:
  60.      * decode
  61.      - string[] Dekoduje ciąg znaków.
  62.      - second_string[] Przechowuje zdekodowany ciąg znaków z parametru string[]
  63.     **/
  64.     stock decode(const string[], second_string[]) {
  65.         /** Zmienne:
  66.          *  SpaceReplacer - zamienia spacje na znaki równości;
  67.          *  len - oznacza długość zakodowanego ciągu znaków string[];
  68.          *  Position - oznacza pozycję w ciągu znaków;
  69.         **/
  70.        
  71.         new const SpaceReplacer = '=';
  72.         new len = strlen(string);
  73.         new Position;
  74.        
  75.         /** Zmienne:
  76.          *  i - tworzy zwykłą wartość typu int o wartości zero;
  77.          *  char_[2] - oznacza przypisany znak w ciągu do zdekodowania;
  78.         **/
  79.        
  80.         for(new i = 0 ; i < len ; i++) {
  81.             new char_[2];
  82.             char_[0] = Decoder[string[i++]];
  83.             char_[1] = Decoder[string[i]];
  84.             char_[0] = (char_[0] << 2) | ((char_[1] >> 4) & 3);
  85.             Position += format(second_string[Position], len, "%c", char_[0]);
  86.            
  87.             if(++i < len) {
  88.                 char_[0] = string[i];
  89.                 if(char_[0] == SpaceReplacer)
  90.                     break;
  91.                 char_[0] = Decoder[string[i]];
  92.                 char_[1] = ((char_[1] << 4) & 240) | ((char_[0] >> 2) & 15);
  93.                 Position += format(second_string[Position], len, "%c", char_[1]);
  94.             }
  95.            
  96.             if(++i < len) {
  97.                 char_[1] = string[i];
  98.                 if(char_[1] == SpaceReplacer)
  99.                     break;
  100.                 char_[1] = Decoder[string[i]];
  101.                 char_[0] = ((char_[0] << 6) & 192) | char_[1];
  102.                 Position += format(second_string[Position], len, "%c", char_[0]);
  103.             }
  104.         }
  105.         return true;
  106.     }
  107.    
  108.     /** Funkcja:
  109.      * encode
  110.      - string[] Koduje ciąg znaków.
  111.      - second_string[] Przechowuje zakodowany ciąg znaków z parametru string[]
  112.     **/
  113.     stock encode(const string[], second_string[]) {
  114.         /** Zmienne:
  115.          *  SpaceReplacer - zamienia spacje na znaki równości;
  116.          *  len - oznacza długość zakodowanego ciągu znaków string[];
  117.          *  Position - oznacza pozycję w ciągu znaków;
  118.         **/
  119.        
  120.         new const SpaceReplacer = '=';
  121.         new len = strlen(string);
  122.         new Position;
  123.        
  124.         /** Zmienne:
  125.          *  i - tworzy zwykłą wartość typu int o wartości zero;
  126.          *  Character - oznacza przypisany znak w ciągu do zakodowania;
  127.         **/
  128.        
  129.         for(new i = 0 ; i < len ; i++) {
  130.             new Character;
  131.             Character = (string[i] >> 2) & 63;
  132.             Position += format(second_string[Position], len, "%c", LettersTable[Character]);
  133.             Character = (string[i] << 4) & 63;
  134.            
  135.             if(++i < len)
  136.                 Character |= (string[i] >> 4) & 15;
  137.             Position += format(second_string[Position], len, "%c", LettersTable[Character]);
  138.    
  139.             if(i < len) {
  140.                 Character = (string[i] << 2) & 63;
  141.                
  142.                 if(++i < len)
  143.                     Character |= (string[i] >> 6) & 3;
  144.                 Position += format(second_string[Position], len, "%c", LettersTable[Character]);
  145.             } else {
  146.                 i++;
  147.                 Position += format(second_string[Position], len, "%c", SpaceReplacer);
  148.             }
  149.    
  150.             if(i < len) {
  151.                 Character = string[i] & 63;
  152.                 Position += format(second_string[Position], len, "%c", LettersTable[Character]);
  153.             }
  154.             else Position += format(second_string[Position], len, "%c", SpaceReplacer);
  155.         }
  156.         return true;
  157.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement