Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // License:
- /*
- Licencja:
- Copyright (c) 2013, Shiny
- Wszystkie prawa zastrzeżone.
- 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:
- 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.
- 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.
- 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.
- 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.
- 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)
- 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.
- */
- // Conditions:
- #if defined _base64_included
- #endinput
- #endif
- #define _base64_included
- // Macros:
- #define e:base64(%0,%1) encode(%0,%1)
- #define d:base64(%0,%1) decode(%0,%1)
- // Variables:
- new const LettersTable[] = {
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
- };
- new const Decoder[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 0, 0, 0, 0, 0, 0, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0
- };
- // Functions:
- /** Funkcja:
- * decode
- - string[] Dekoduje ciąg znaków.
- - second_string[] Przechowuje zdekodowany ciąg znaków z parametru string[]
- **/
- stock decode(const string[], second_string[]) {
- /** Zmienne:
- * SpaceReplacer - zamienia spacje na znaki równości;
- * len - oznacza długość zakodowanego ciągu znaków string[];
- * Position - oznacza pozycję w ciągu znaków;
- **/
- new const SpaceReplacer = '=';
- new len = strlen(string);
- new Position;
- /** Zmienne:
- * i - tworzy zwykłą wartość typu int o wartości zero;
- * char_[2] - oznacza przypisany znak w ciągu do zdekodowania;
- **/
- for(new i = 0 ; i < len ; i++) {
- new char_[2];
- char_[0] = Decoder[string[i++]];
- char_[1] = Decoder[string[i]];
- char_[0] = (char_[0] << 2) | ((char_[1] >> 4) & 3);
- Position += format(second_string[Position], len, "%c", char_[0]);
- if(++i < len) {
- char_[0] = string[i];
- if(char_[0] == SpaceReplacer)
- break;
- char_[0] = Decoder[string[i]];
- char_[1] = ((char_[1] << 4) & 240) | ((char_[0] >> 2) & 15);
- Position += format(second_string[Position], len, "%c", char_[1]);
- }
- if(++i < len) {
- char_[1] = string[i];
- if(char_[1] == SpaceReplacer)
- break;
- char_[1] = Decoder[string[i]];
- char_[0] = ((char_[0] << 6) & 192) | char_[1];
- Position += format(second_string[Position], len, "%c", char_[0]);
- }
- }
- return true;
- }
- /** Funkcja:
- * encode
- - string[] Koduje ciąg znaków.
- - second_string[] Przechowuje zakodowany ciąg znaków z parametru string[]
- **/
- stock encode(const string[], second_string[]) {
- /** Zmienne:
- * SpaceReplacer - zamienia spacje na znaki równości;
- * len - oznacza długość zakodowanego ciągu znaków string[];
- * Position - oznacza pozycję w ciągu znaków;
- **/
- new const SpaceReplacer = '=';
- new len = strlen(string);
- new Position;
- /** Zmienne:
- * i - tworzy zwykłą wartość typu int o wartości zero;
- * Character - oznacza przypisany znak w ciągu do zakodowania;
- **/
- for(new i = 0 ; i < len ; i++) {
- new Character;
- Character = (string[i] >> 2) & 63;
- Position += format(second_string[Position], len, "%c", LettersTable[Character]);
- Character = (string[i] << 4) & 63;
- if(++i < len)
- Character |= (string[i] >> 4) & 15;
- Position += format(second_string[Position], len, "%c", LettersTable[Character]);
- if(i < len) {
- Character = (string[i] << 2) & 63;
- if(++i < len)
- Character |= (string[i] >> 6) & 3;
- Position += format(second_string[Position], len, "%c", LettersTable[Character]);
- } else {
- i++;
- Position += format(second_string[Position], len, "%c", SpaceReplacer);
- }
- if(i < len) {
- Character = string[i] & 63;
- Position += format(second_string[Position], len, "%c", LettersTable[Character]);
- }
- else Position += format(second_string[Position], len, "%c", SpaceReplacer);
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement