/* showstring.c Darstellung einer Zeichenkette unter Verwendung der portierten conio-Funktionen */ #include#include <stdio.h> /* Zeichen zum Zeichnen von Rahmenlinien im Textmode laut Codepage 850 */ #define Z_ELO 218 /* Ecke links oben */ #define Z_ERO 191 /* Ecke rechts oben */ #define Z_ELU 192 /* Ecke links unten */ #define Z_ERU 217 /* Ecke rechts unten */ #define Z_AOB 194 /* Anschluss oben */ #define Z_AUN 193 /* Anschluß unten */ #define Z_LWA 196 /* Linie waagrecht */ #define Z_LSE 179 /* Linie senkrecht */ #define Z_FILL 219 /* voll ausfuellen */ /* plotchar gibt das Zeichen c an derPosition x, y aus. Statt des ASCII-Nul Zeichens wird ein Fuellmuster ausgegeben, statt eines Steuerzeichens wird eine Tilde ausgegeben */ void plotchar(int x, int y, int c) { gotoxy(x, y); if (c == '\0') c = Z_FILL; if (c < 32) c = '~'; putchar(c); } /* Die Funktion showstring stellt eine Zeichenkette inklusive der Indizes der einzelnen Zeichen dar. Das Abschlusszeichen wird besonders dargestellt. Die Zeichen mit dem Index i1 und i2 werden besonders unterlegt, wenn i1 bzw. i2 > 0 ist. Die Ausgabe erfolgt immer an derselben Position am Bildschirm. Ist init = 1, so werden die Rahmen der Darstellung gezeichnet. ------------------------------------------------------------------------- s ......... Zeiger auf die Zeichenkette i1 und i2 .. Index der Zeichen, die blinkend dargestellt wird n .......... soviel Zeichen werden dargestellt, normal ist n > strlen(s) init ....... Init-Schalter ------------------------------------------------------------------------- */ #define x0 5 #define y0 5 void showstring(char *s, int i1, int i2, int n, int init) { int i, j; textbackground(WHITE); _setcursortype (_NOCURSOR); if (init) { /* Rahmenlinien zeichnen */ clrscr(); textcolor(BLACK); /* 1. Zeile: Indizes */ gotoxy(x0, y0); for (i = 0; i < n; i++) printf("%2i", i % 10); /* 2. Zeile: Kasten obere Linie */ gotoxy(x0, y0 + 1); putchar(Z_ELO); for (i = 0; i < n-1 ; i++) { putchar(Z_LWA); putchar(Z_AOB); } putchar(Z_LWA); putchar(Z_ERO); /* 3. Zeile: Inhalt */ gotoxy(x0, y0 + 2); for (i = 0; i < n; i++) { putchar(Z_LSE); putchar(' '); } putchar(Z_LSE); /* 4. Zeile: Kasten untere Linie */ gotoxy(x0, y0 + 3); putchar(Z_ELU); for (i = 0; i < n-1; i++) { putchar(Z_LWA); putchar(Z_AUN); } putchar(Z_LWA); putchar(Z_ERU); } /* end if init */ /* Ausgabe der Zeichenkette */ textcolor(BLACK); for (i = 0; i <= strlen(s); i++) plotchar(x0 + 1 + 2*i, y0 + 2, s[i]); /* Zeichen nach dem Abschlusszeichen */ for (; i < n; i++) plotchar(x0 + 1 + 2*i, y0 + 2, ' '); /* die aktuell bearbeitet Zeichen (Index i1 und i2) hervorheben */ for (j = 0; j < 5; j++) { if (i1 >= 0) { textcolor(LIGHTRED); plotchar(x0 + 1 + 2*i1, y0 + 2, s[i1]); } if (i2 >= 0) { textcolor(BLUE); plotchar(x0 + 1 + 2*i2, y0 + 2, s[i2]); } sleep(200); if (i1 >= 0) { textcolor(LIGHTRED); plotchar(x0 + 1 + 2*i1, y0 + 2, ' '); } if (i2 >= 0) { plotchar(x0 + 1 + 2*i2, y0 + 2, ' '); } sleep(200); } textcolor(BLACK); gotoxy(1, y0 + 10); } /* end showstring */