// Quick and Dirty ASCII to Hollerith Conversion // Micheal H. McCabe // Retrochallenge 2022/10 // October 1, 2022 // #include using namespace std; string ATOH(int c); int main(int argc, char *argv[]) { string arg1 = argv[1]; for (int i=0; i32 && ascii<48) // ascii code is a punctuation mark of some sort { switch (ascii) { case 33: // Exclamation point "!" -- code given is generic 029 code punch (11-2-8) builder = "0 1 0 0 1 0 0 0 0 0 1 0"; break; case 34: // Double Quote " -- code given is generic 029 code punch (7-8) builder = "0 0 0 0 0 0 0 0 0 1 1 0"; break; case 35: // Hashtag / Pound Sign "#" -- code given is generic 029 code punch (3-8) builder = "0 0 0 0 0 1 0 0 0 0 1 0"; break; case 36: // Dollar Sign "$" -- code given is generic 029 code punch (11-3-8) builder = "0 1 0 0 0 1 0 0 0 0 0 0"; break; case 37: // Percent Sign "%" -- code given is generic 029 code punch (0-4-8) builder = "0 0 1 0 0 0 1 0 0 0 1 0"; break; case 38: // Ampersand "&" -- code given is generic 029 code punch (12) builder = "1 0 0 0 0 0 0 0 0 0 0 1"; break; case 39: // Single Quote "'" -- code given is generic 029 code punch (5-8) builder = "0 0 0 0 0 0 0 1 0 0 1 0"; break; case 40: // Open Parenthesis "(" -- code given is generic 029 code punch (12-5-8) builder = "1 0 0 0 0 0 0 1 0 0 1 0"; break; case 41: // Close Parenthesis ")" -- code given is generic 029 code punch (11-6-8) builder = "0 1 0 0 0 0 0 0 1 0 1 0"; break; case 42: // Asterisk "*" -- code given is generic 029 code punch (11-4-8) builder = "0 1 0 0 0 0 1 0 0 0 1 0"; break; case 43: // Plus "+" -- code given is generic 029 code punch (12-6-8) builder = "1 0 0 0 0 0 0 0 1 0 1 0"; break; case 44: // Comma "," -- code given is generic 029 code punch (0-3-8) builder = "0 0 1 0 0 1 0 0 0 0 1 0"; break; case 45: // Minus "-" -- code given is generic 029 code punch (11) builder = "0 1 0 0 0 0 0 0 0 0 0 0"; break; case 46: // Period "." -- code given is generic 029 code punch (12-3-8) builder = "1 0 0 0 0 1 0 0 0 0 1 0"; break; case 47: // Slash "/" -- code given is generic 029 code punch (0-1) builder = "0 0 1 1 0 0 0 0 0 0 0 0"; break; } } if (ascii>47 && ascii<58) // ascii code is a numerical digit { switch(ascii) { case 48: // Digit 0 builder = "0 0 1 0 0 0 0 0 0 0 0 0"; break; case 49: // Digit 1 builder = "0 0 0 1 0 0 0 0 0 0 0 0"; break; case 50: // Digit 2 builder = "0 0 0 0 1 0 0 0 0 0 0 0"; break; case 51: // Digit 3 builder = "0 0 0 0 0 1 0 0 0 0 0 0"; break; case 52: // Digit 4 builder = "0 0 0 0 0 0 1 0 0 0 0 0"; break; case 53: // Digit 5 builder = "0 0 0 0 0 0 0 1 0 0 0 0"; break; case 54: // Digit 6 builder = "0 0 0 0 0 0 0 0 1 0 0 0"; break; case 55: // Digit 7 builder = "0 0 0 0 0 0 0 0 0 1 0 0"; break; case 56: // Digit 8 builder = "0 0 0 0 0 0 0 0 0 0 1 0"; break; case 57: // Digit 9 builder = "0 0 0 0 0 0 0 0 0 0 0 1"; break; } } if (ascii>57 && ascii<65) // More special characters rear their ugly heads { switch (ascii) { case 58: // Colon ":" -- code given is generic 029 code punch (2-8) builder = "0 0 0 0 1 0 0 0 0 0 1 0"; break; case 59: // Semi-colon ";" -- code given is generic 029 code punch (11-6-8) builder = "0 1 0 0 0 0 0 0 1 0 1 0"; break; case 60: // Less than "<" -- code given is generic 029 code punch (12-5-8) builder = "1 0 0 0 0 0 0 1 0 0 1 0"; break; case 61: // Equals Sign "=" -- code given is generic 029 code punch (6-8) builder = "0 0 0 0 0 0 0 0 1 0 1 0"; break; case 62: // Greater than ">" -- code given is generic 029 code punch (0-6-8) builder = "0 0 1 0 0 0 0 0 1 0 1 0"; break; case 63: // Question Mark "?" -- code given is generic 029 code punch (0-7-8) builder = "0 0 1 0 0 0 0 0 0 1 1 0"; break; case 64: // At Symbol "@" -- code given is generic 029 code punch (4-8) builder = "0 0 0 0 0 0 1 0 0 0 1 0"; break; } } if (ascii>64 && ascii<91) // This is an uppercase alphabetic character { switch (ascii) { case 65: // The Letter "A" code is common to most keypunches (12-1) builder = "1 0 0 1 0 0 0 0 0 0 0 0"; break; case 66: // The letter "B" (12-2) builder = "1 0 0 0 1 0 0 0 0 0 0 0"; break; case 67: // The Letter "C" (12-3) builder = "1 0 0 0 0 1 0 0 0 0 0 0"; break; case 68: // The Letter "D" (12-4) builder = "1 0 0 0 0 0 1 0 0 0 0 0"; break; case 69: // The letter "E" (12-5) builder = "1 0 0 0 0 0 0 1 0 0 0 0"; break; case 70: // The Letter "F" (12-6) builder = "1 0 0 0 0 0 0 0 1 0 0 0"; break; case 71: // The letter "G" (12-7) builder = "1 0 0 0 0 0 0 0 0 1 0 0"; break; case 72: // The letter "H" (12-8) builder = "1 0 0 0 0 0 0 0 0 0 1 0"; break; case 73: // The letter "I" (12-9) builder = "1 0 0 0 0 0 0 0 0 0 0 1"; break; case 74: // The Letter "J" (11-1) builder = "0 1 0 1 0 0 0 0 0 0 0 0"; break; case 75: // The Letter "K" (11-2) builder = "0 1 0 0 1 0 0 0 0 0 0 0"; break; case 76: // The Letter "L" (11-3) builder = "0 1 0 0 0 1 0 0 0 0 0 0"; break; case 77: // The Letter "M" (11-4) builder = "0 1 0 0 0 0 1 0 0 0 0 0"; break; case 78: // The Letter "N" (11-5) builder = "0 1 0 0 0 0 0 1 0 0 0 0"; break; case 79: // "The Letter "O" (11-6) builder = "0 1 0 0 0 0 0 0 1 0 0 0"; break; case 80: // The Letter "P" (11-7) builder = "0 1 0 0 0 0 0 0 0 1 0 0"; break; case 81: // The Letter "Q" (11-8) builder = "0 1 0 0 0 0 0 0 0 0 1 0"; break; case 82: // The letter "R" (11-9) builder = "0 1 0 0 0 0 0 0 0 0 0 1"; break; case 83: // The Letter "S" (0-2) - Skipped (0-1) because that is the slash character builder = "0 0 1 0 1 0 0 0 0 0 0 0"; break; case 84: // The Letter "T" (0-3) builder = "0 0 1 0 0 1 0 0 0 0 0 0"; break; case 85: // The Letter "U" (0-4) builder = "0 0 1 0 0 0 1 0 0 0 0 0"; break; case 86: // The Letter "V" (0-5) builder = "0 0 1 0 0 0 0 1 0 0 0 0"; break; case 87: // The Letter "W" (0-6) builder = "0 0 1 0 0 0 0 0 1 0 0 0"; break; case 88: // The Letter "X" (0-7) builder = "0 0 1 0 0 0 0 0 0 1 0 0"; break; case 89: // The Letter "Y" (0-8) builder = "0 0 1 0 0 0 0 0 0 0 1 0"; break; case 90: // The Letter "Z" (0-9) builder = "0 0 1 0 0 0 0 0 0 0 0 1"; break; } } if (ascii>90 && ascii<96) // A few more special characters to make this program insufferable. { switch (ascii) { case 91: // Open Bracket "[" (12-2) builder = "1 0 0 0 1 0 0 0 0 0 0 0"; break; case 92: // Backslash "\" (11-7-8) builder = "0 1 0 0 0 0 0 0 0 1 1 0"; break; case 93: // Close Bracket "]" (0-2-8) builder = "0 0 1 0 1 0 0 0 0 0 1 0"; break; case 94: // Caret "^" (12-7-8) builder = "1 0 0 0 0 0 0 0 0 1 1 0"; break; case 95: // Underscore "_" (0-5-8) builder = "0 0 1 0 0 0 0 1 0 0 1 0"; break; } } if (ascii>95) { builder = "******** ERROR ********"; } return builder; }