home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / util / cout-1.00.lha / Cout / Deutsch / cout.c < prev    next >
C/C++ Source or Header  |  1993-08-04  |  3KB  |  91 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 [Zeichenkette]\n"
  9.            "In der Zeichenfolge <Zeichenkette> können diverse "
  10.            "Steuerelemente enthalten sein:\n\n"
  11.            "Aus C gebräuchliche:\n"
  12.            "\t\\a: Klingelzeichen               \\b: Backspace\n"
  13.            "\t\\f: Seitenvorschub               \\n: Zeilentrenner\n"
  14.            "\t\\r: Wagenrücklauf                \\t: Tabulator\n"
  15.            "\t\\v: Vertikal-Tabulator           \\\\: Gegenschrägstrich\n\n"
  16.            "Von mir hinzugefügte:\n"
  17.            "\t\\d: Text wird fett ausgegeben    \\k: Text wird kursiv ausgegeben\n"
  18.            "\t\\u: Text wird unterstrichen      \\i: Text wird inventiert\n"
  19.            "\t\\x: Schaltet alle eventuell eingestellten Modi aus\n\n"
  20.            "Wird keine <Zeichenkette> angegeben, gibt cout eine Leerzeile aus.\n\n"
  21. }
  22.  
  23.  
  24. void main (int argc, char **argv)
  25. {
  26.    if (argc == 2)
  27.    {
  28.       char *arg = *++argv;
  29.  
  30.       if (*arg == '?')
  31.       {
  32.          usage ();
  33.          return;
  34.       }
  35.       char *str = 0;
  36.       int a, s, size = strlen (arg);
  37.  
  38.       for (a = 0 ; a < size ; a++)     // Stelle die Länge
  39.       {                                // des Strings arg = *++argv fest...
  40.          if (*(arg+a) == 92)
  41.          {
  42.             switch (*(arg+a+1))
  43.             {
  44.                case 'd':
  45.                case 'k':
  46.                case 'u':
  47.                case 'i':
  48.                case 'x': size += 3;
  49.             }
  50.          }
  51.       }
  52.       str = new char[size];            // ...und fordere
  53.       if (str == 0)                    // dementsprechend
  54.       {                                // Speicher für die Kopie str an
  55.          cout << "Zeichenkette zu lang !!\n";
  56.          return;
  57.       }
  58.       for (a = 0, s = 0 ; a < size ; a++, s++)  // Untersuche arg auf
  59.       {                                         // Steuerzeichen
  60.          if (*(arg+a) == 92)                    // und kopiere ihn
  61.          {                                      // inklusive Steuerzeichen
  62.             switch (*(arg+a+1))                 // nach str
  63.             {
  64.                case 'a': *(str+s) = '\a'; a++; break;
  65.                case 'b': *(str+s) = '\b'; a++; break;
  66.                case 'f': *(str+s) = '\f'; a++; break;
  67.                case 'n': *(str+s) = '\n'; a++; break;
  68.                case 'r': *(str+s) = '\r'; a++; break;
  69.                case 't': *(str+s) = '\t'; a++; break;
  70.                case 'v': *(str+s) = '\v'; a++; break;
  71.                case 92 : *(str+s) = '\\'; a++; break;
  72.                case 'd': strcat (str, "\x9b""1m"); a++; s+=2; break;
  73.                case 'k': strcat (str, "\x9b""3m"); a++; s+=2; break; 
  74.                case 'u': strcat (str, "\x9b""4m"); a++; s+=2; break;
  75.                case 'i': strcat (str, "\x9b""7m"); a++; s+=2; break;
  76.                case 'x': strcat (str, "\x9b""0m"); a++; s+=2; break;
  77.                default : break;
  78.             }
  79.          }
  80.          else
  81.             *(str+s) = *(arg+a);
  82.       }
  83.       cout << str;
  84.       delete [] str;
  85.    }
  86.    else if (argc == 1)
  87.       cout << "\n";
  88.    else
  89.       usage ();
  90. }
  91.