Annotation of solidite/utils/echo.cpp, revision 1.1

1.1     ! user        1: /* Copyright (c) 2026 The Solidite Developers
        !             2:  *
        !             3:  * This program is free software: you can redistribute it and/or modify it under
        !             4:  * the terms of the GNU Affero General Public License as published by the Free
        !             5:  * Software Foundation, either version 3 of the License, or (at your option)
        !             6:  * any later version.
        !             7:  *
        !             8:  * This program is distributed in the hope that it will be useful, but WITHOUT
        !             9:  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
        !            10:  * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
        !            11:  * details.
        !            12:  *
        !            13:  * You should have received a copy of the GNU Affero General Public License
        !            14:  * along with this program. If not, see <https://www.gnu.org/licenses/>. */
        !            15: 
        !            16: 
        !            17: #include <iostream>
        !            18: #include <string>
        !            19: 
        !            20: #include <cstdint>
        !            21: 
        !            22: int main(int argc, char* argv[]) {
        !            23:   std::string to_stdout;
        !            24:   for (int i = 1; i < argc; ++i) {
        !            25:     if (i != argc - 1) {
        !            26:       to_stdout += std::string(argv[i]) + ' ';
        !            27:       continue;
        !            28:     }
        !            29:     to_stdout += std::string(argv[i]) + '\n';
        !            30:   }
        !            31: 
        !            32:   char escape;
        !            33:   for (size_t i = 0; i < to_stdout.length(); ++i) {
        !            34:     if (to_stdout[i] == '\\') {
        !            35:       escape = to_stdout[i+1];
        !            36:       // get the escape character before erasal
        !            37:       to_stdout.erase(i, 2);
        !            38:       switch (escape) {
        !            39:         case 'a':
        !            40:           to_stdout.insert(i, "\a");
        !            41:           break;
        !            42:         case 'b':
        !            43:           to_stdout.insert(i, "\b");
        !            44:           break;
        !            45:         case 'c':
        !            46:           to_stdout.erase(to_stdout.length() - 1, 1);
        !            47:           break;
        !            48:         case 'n':
        !            49:           to_stdout.insert(i, "\n");
        !            50:           break;
        !            51:         case 'r':
        !            52:           to_stdout.insert(i, "\r");
        !            53:           break;
        !            54:         case 't':
        !            55:           to_stdout.insert(i, "\t");
        !            56:           break;
        !            57:         case 'v':
        !            58:           to_stdout.insert(i, "\v");
        !            59:           break;
        !            60:         case '\\':
        !            61:           to_stdout.insert(i, "\\");
        !            62:           break;
        !            63:         default:
        !            64:           if (i == to_stdout.length())
        !            65:             to_stdout.insert(i, "\\\n");
        !            66:           break;
        !            67:       }
        !            68:     }
        !            69:   }
        !            70: 
        !            71:   std::cout << to_stdout;
        !            72: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>