home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / util / cout-1.00.lha / Cout / English / cout.c < prev    next >
C/C++ Source or Header  |  1993-08-04  |  3KB  |  88 lines

  1. #include <stream.h>
  2. #include <string.h>
  3.  
  4.  
  5. void usage ()
  6. {
  7.    cout << "\ncout (c) by Harald Pehl in 1993\n"
  8.            "Synthax: cout [string]\n"
  9.            "Within the string you can use several control-characters\n\n"
  10.            "\t\\a: Beep                   \\b: Backspace\n"
  11.            "\t\\f: Form feed              \\n: New line\n"
  12.            "\t\\r: carrage return         \\t: Tab\n"
  13.            "\t\\v: Vertical-tab           \\\\: print \'\\\'\n"
  14.            "\t\\d: Bold on                \\k: Italic on\n"
  15.            "\t\\u: Underlined on          \\i: Invers on\n"
  16.            "\t\\x: Reset to defaults\n\n"
  17.            "If there\'s no <string> cout prints an empty line.\n\n"
  18. }
  19.  
  20.  
  21. void main (int argc, char **argv)
  22. {
  23.    if (argc == 2)
  24.    {
  25.       char *arg = *++argv;
  26.  
  27.       if (*arg == '?')
  28.       {
  29.          usage ();
  30.          return;
  31.       }
  32.       char *str = 0;
  33.       int a, s, size = strlen (arg);
  34.  
  35.       for (a = 0 ; a < size ; a++)     // Calculate the length
  36.       {                                // of arg = *++argv...
  37.          if (*(arg+a) == 92)
  38.          {
  39.             switch (*(arg+a+1))
  40.             {
  41.                case 'd':
  42.                case 'k':
  43.                case 'u':
  44.                case 'i':
  45.                case 'x': size += 3;
  46.             }
  47.          }
  48.       }
  49.       str = new char[size];            // ...and ask for
  50.       if (str == 0)                    // enough memory for
  51.       {                                // the copy 'str'
  52.          cout << "Zeichenkette zu lang !!\n";
  53.          return;
  54.       }
  55.       for (a = 0, s = 0 ; a < size ; a++, s++)  // Look for control-characters
  56.       {                                         // in arg and copy them to str
  57.          if (*(arg+a) == 92)
  58.          {
  59.             switch (*(arg+a+1))
  60.             {
  61.                case 'a': *(str+s) = '\a'; a++; break;
  62.                case 'b': *(str+s) = '\b'; a++; break;
  63.                case 'f': *(str+s) = '\f'; a++; break;
  64.                case 'n': *(str+s) = '\n'; a++; break;
  65.                case 'r': *(str+s) = '\r'; a++; break;
  66.                case 't': *(str+s) = '\t'; a++; break;
  67.                case 'v': *(str+s) = '\v'; a++; break;
  68.                case 92 : *(str+s) = '\\'; a++; break;
  69.                case 'd': strcat (str, "\x9b""1m"); a++; s+=2; break;
  70.                case 'k': strcat (str, "\x9b""3m"); a++; s+=2; break;
  71.                case 'u': strcat (str, "\x9b""4m"); a++; s+=2; break;
  72.                case 'i': strcat (str, "\x9b""7m"); a++; s+=2; break;
  73.                case 'x': strcat (str, "\x9b""0m"); a++; s+=2; break;
  74.                default : break;
  75.             }
  76.          }
  77.          else
  78.             *(str+s) = *(arg+a);
  79.       }
  80.       cout << str;
  81.       delete [] str;
  82.    }
  83.    else if (argc == 1)
  84.       cout << "\n";
  85.    else
  86.       usage ();
  87. }
  88.