All pastes #622692 Raw Edit

Mine

public text v1 · immutable
·published 2007-07-17 01:16 UTC
rendered paste body
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

// ===== GLOBAL VARS ===== //

string cfgcmds[500][2]; // Array for command text and value text
float cfgvals[500]; // Array for numerical cmd values

char valeq[500]; // Array for equivalence between current and required values

short sh_arraycounter = 0; // Counter

bool trace = 1;

// ===== END GLOBAL VARS ===== //

// ===== FILE I/O ===== //

// Write newcfg.cfg
void writecfg(string sz_cfg)
{
     ofstream newcfg;
     
     newcfg.open ("config.cfg", ios::trunc);
     
     newcfg << sz_cfg;
            
     newcfg.close();
}

// Read input.txt for cfg rules
string readinput()
{
       string sz_input = "";
       ifstream st_inp;
       
       st_inp.open("input.txt");
       
       while (! st_inp.eof() )
       {
             sz_input.push_back(st_inp.get());
       }
       
       st_inp.close();

       return sz_input;
}

// Read config.cfg
string readcfg()
{
       string sz_config = "";
       ifstream st_cfg;
       
       st_cfg.open("config.cfg");
       
       while (! st_cfg.eof() )
       {
             sz_config.push_back(st_cfg.get());
       }
       
       st_cfg.close();

       return sz_config;
}

// Read README.txt
string readme()
{
       string sz_readme = "";
       ifstream st_readme;
       
       st_readme.open("README.txt");
       
       while (! st_readme.eof() )
       {
             sz_readme.push_back(st_readme.get());
       }
       
       st_readme.close();

       return sz_readme;
}

// ===== END FILE I/O ===== //

// ===== PARSING ===== //

short is_con_ch_num(char ch) // Detect if char
{
     bool b_number = 0;
     switch (ch)
     {
            case '1':
                 b_number = 1;
                 break;
            case '2':
                 b_number = 1;
                 break;
            case '3':
                 b_number = 1;
                 break;
            case '4':
                 b_number = 1;
                 break;
            case '5':
                 b_number = 1;
                 break;
            case '6':
                 b_number = 1;
                 break;
            case '7':
                 b_number = 1;
                 break;
            case '8':
                 b_number = 1;
                 break;
            case '9':
                 b_number = 1;
                 break;
            case '0':
                 b_number = 1;
                 break;
            case '.':
                 b_number = 1;
                 break;
            default:
                    b_number = 0;
     }
     return b_number;
}

float sz_to_sh(string sz_value)
{
      return atof(sz_value.c_str());
}

void parse_cmds(string sz_input, bool b_parsetype)
{
     short sh_inlength = sz_input.length();
     bool b_invalline = 0;
     
     bool b_cmd = 0;
     bool b_cmddone = 0;
     
     bool b_val = 0;
     bool b_valdone = 0;
     
     bool b_echo = 0;
     
     for
     (
     short a = 0;
     a < sh_inlength;
     a++
     )
     {
                              //if (trace == 1) {cout << "char " << a << " \'" << sz_input[a] << "\' type " << int(sz_input[a]) << endl;}
        if
        (
          (
             (
             sz_input[a] == 'e'
             && sz_input[a+1] == 'c'
             && sz_input [a+2] == 'h'
             && sz_input [a+3] == 'o'
             )
             ||(
             sz_input[a] == 'b'
             && sz_input[a+1] == 'i'
             && sz_input [a+2] == 'n'
             && sz_input [a+3] == 'd'
             )
             ||(
             sz_input[a] == 'a'
             && sz_input[a+1] == 'l'
             && sz_input [a+2] == 'i'
             && sz_input [a+3] == 'a'
             && sz_input [a+4] == 's'
             )
             ||(
             sz_input[a] == '/'
             && sz_input[a+1] == '/'
             )
          )
        || sz_input[a] == '\n'
        )
        {
                              //if (trace == 1) {cout << "Invalid Text";}
           b_invalline = 1;
        }
        if
        (
        b_invalline == 0
        && sz_input[a] != ' '
        && sz_input[a] != '\t'
        && sz_input[a] != char(-1)
        )
        {
           if
           (
           is_con_ch_num(sz_input[a]) == 0
           && b_cmddone == 0
           )
           {
                              //if (trace == 1) {cout << "<CMD>";}
              b_cmd = 1;
                              //if (trace == 1) {cout << sz_input[a] << " should go in " << sh_arraycounter;}
              cfgcmds[sh_arraycounter][1] += sz_input[a];
              if
              (
              sz_input[a+1] == ' '
              || sz_input[a+1] == '\t'
              )
              {
                              //if (trace == 1) {cout << "<CMD done>";}
                 b_cmddone = 1;
              }
           }
           if
           (
              (
              sz_input[a] == '='
              || sz_input[a] == '>'
              || sz_input[a] == '<'
              )
           && b_parsetype == 1
           && b_cmddone == 1
           && b_valdone == 0
           )
           {
                        cout << "EQ FOUND AT " << sz_input[a];
              valeq[sh_arraycounter] += sz_input[a];
           }
           if
           (
           is_con_ch_num(sz_input[a]) == 1
           && b_valdone == 0
           )
           {
                              //if (trace == 1) {cout << "<VAL>";}
              b_val = 1;
                              //if (trace == 1) {cout << sz_input[a] << " should go in " << sh_arraycounter;}
              cfgcmds[sh_arraycounter][2] = sz_input[a];
              if
              (
              is_con_ch_num(sz_input[a+1]) == 0
              )
              {
                              //if (trace == 1) {cout << "<VAL done>";}
                 b_valdone = 1;
                 cfgvals[sh_arraycounter] = sz_to_sh(cfgcmds[sh_arraycounter][2]);
                 sh_arraycounter++;
              }
           }
        }
        if
        (
        sz_input[a] == '\n'
        )
        {
           b_valdone = 0;
           b_cmddone = 0;
           b_invalline = 0;
        }
     }
}

void printarrays()
{
     for
     (
     short a = 0;
     cfgcmds[a][1] != "";
     a++
     )
     {
        cout << a
             << ") "
             << cfgcmds[a][1]
             << "TO BE \'"
             << valeq[a]
             << "\' THAN: "
             << cfgcmds[a][2]
             << " NUM: "
             << cfgvals[a]
             << endl;
     }
}
            
int main()
{
    char ch_readme;
    cout << "Welcome to the CFG Legalizer."
         << endl
         << "Have you read and followed the instructions \n"
         << "in the included README.txt? (y/n): ";
         
    cin.get(ch_readme);
    
    system("cls");
    
    if (ch_readme == 'n' || ch_readme == 'N')
    {
       cout << endl
            << readme()
            << endl
            << endl;
    }
    
    parse_cmds(readinput(), 0);
    cout << endl << "==============" << endl;
    printarrays();
    
system("pause");
system("cls");
    return 0;   
}