#include #include using namespace std; const size_t MAXLINE = 256; void init_key(char key[8]) { for (size_t i = 0; i < 8; i++) key[i] = 'A' + ::rand() % 26; } bool encode_string(const char* linein, char lineout[MAXLINE]) { memset(lineout, 0, MAXLINE); if (linein && *linein) { char key[8]; init_key(key); size_t i; for (i = 0; linein[i]; i++) lineout[i] = linein[i] + (i < 8 ? key[i] : linein[i - 8]); lineout[i] = '\0'; } return *lineout >= ' '; } bool read_line(istream& txt, char line[MAXLINE]) { memset(line, 0, MAXLINE); while (!txt.eof()) { txt.getline(line, MAXLINE-1); if (line[0] == '/' && line[1] == '/') continue; for (size_t i = 0; line[i]; i++) { if (line[i] > ' ') return true; } } return false; } bool write_line(ostream& zip, const char* line) { bool ok = line && *line; if (ok) { while (*line && *line <= ' ') line++; ok = *line > ' '; if (ok) { char lineout[MAXLINE]; encode_string(line, lineout); zip << lineout << endl; } } return ok; } /* May be useful at least once bool write_paragraph(ostream& zip, const char* line) { bool ok = line && *line; if (ok) zip << '[' << line << ']' << endl; return ok; } */ int main(int argc, char* argv[]) { if (argc <= 1) { cerr << "Missing input file (dninst.txt)" << endl; return 1; } if (argc <= 2) { cerr << "Missing output file (dninst.zip)" << endl; return 2; } cerr << "Encoding " << argv[1] << " ..." << endl; ifstream txt(argv[1]); ofstream zip(argv[2]); char line[MAXLINE]; read_line(txt, line); ::srand(883); write_line(zip, line); ::srand(atoi(line)); while (read_line(txt, line)) write_line(zip, line); cerr << "Encoded " << argv[2] << endl; return 0; }