← index
ats.web/source/func_bin.cpp
Source: ats.web/source/func_bin.cpp
#include "function.hpp"
#include<bitset>

namespace token {
    
    bool output_bin(const std::string &text, unsigned int value) {
        if(text == "8") {
            stream << std::bitset<8>(value);
            return true;
        }
        else if(text == "16") {
            stream << std::bitset<16>(value);
            return true;
    	}
        else if(text == "32") {
            stream << std::bitset<32>(value);
            return true;
        }
        return false;
    }
    
    void token_Bin(const std::string &cmd, std::vector<lex::Token> &tokens) {
        if(tokens.size() <= 1) return;
        if(tokens[1].getTokenType() != lex::TOKEN_DIGIT) {
            stream << "Error: command requires bit depth first!\r\n";
            return;
        }
        unsigned int numeric = atoi(tokens[1].getToken().c_str());
        if( (numeric != 8) && (numeric != 16) && (numeric != 32)) {
            stream << "Error: Supported bit depths are 8, 16, and 32.\r\n";
            return;
        }
        for(unsigned int i = 2; i < tokens.size(); ++i) {
            switch(tokens[i].getTokenType()) {
                case lex::TOKEN_DIGIT: {
                    unsigned int num = atoi(tokens[i].getToken().c_str());
                    stream << std::dec << std::setfill('0') << std::setw(8) << num << " = " << std::setfill('0') << std::setw(numeric);
                    output_bin(tokens[1].getToken(), num);
                    stream << "\r\n";
                }
                    break;
                case lex::TOKEN_HEX: {
                    unsigned int num = icode::toHex(tokens[i].getToken());
                    stream << std::dec << std::setfill('0') << std::setw(8) << num << " = " << std::setfill('0') << std::setw(numeric);
                    output_bin(tokens[1].getToken(), num);
                    stream << "\r\n";
                }
                    break;
                case lex::TOKEN_CHAR: {
                    std::string tok = tokens[i].getToken();
                    if(code.symbols.exisits(tok)) {
                        unsigned int num;
                        num = static_cast<unsigned int>(code.symbols[tok].get_double());
                        stream << std::dec << std::setfill('0') << std::setw(8) << num << " = " << std::setfill('0') << std::setw(numeric);
                        output_bin(tokens[1].getToken(), num);
                        stream << "\r\n";
                    } else {
                        stream << "Error: variable: " << tok << " does not exisit!\r\n";
                        return;
                    }
                }
                    break;
                default:
                    break;
                    
            }
            
        }
        
    }
    
}