#include "solar.h"
#include <stdio.h>
#include <string.h>
#include "conio.h"
/* Diese Version der Konsolen-Ein/Ausgabe schreibt Text sowohl aufs
Grafikdisplay (Textmodus) als auch in den vorgesehenen Bereich des
Terminalfensters */
struct text_info _textinfo;
// Berechnet Speicherplatz auf Display für angegebene Text-Position (0-basiert)
unsigned pos2addr(int x, int y) {
return 2*1024+_textinfo.currmode*8*1024+y*TEXT_X+x;
}
// Fenster löschen
void clrscr(void) {
int z,dx;
dx=_textinfo.winright-_textinfo.winleft;
for (z=_textinfo.wintop; z<_textinfo.winbottom; z++) {
DispDataFill(pos2addr(_textinfo.winleft,z),0,dx);
}
}
// Kursorposition setzen
void gotoxy(int x, int y) {
x--; y--;
if ((unsigned)x>=_textinfo.winright-_textinfo.winleft) return;
if ((unsigned)y>=_textinfo.winbottom-_textinfo.wintop) return;
_textinfo.curx=x;
_textinfo.cury=y;
AnsiGotoXY(x+39,y+1);
}
// Attribut (svw. Farbe) setzen - Inversmodus evtl. später!
void textattr(int attr) {
_textinfo.attribute=attr;
AnsiSetColor(attr);
}
// Scrollen im Fenster - nicht im Terminal realisierbar:-(
void _wscroll(void) { // Arbeit!!! Oder ignorieren
}
// String im Fenster(!) ausgeben - auch auf dem Terminal diffizil!!
void cputs(const char *s) { // Arbeit!! Es fehlen die Umbrüche!
int dx=_textinfo.winright-_textinfo.winleft;
int l=strlen(s);
DataPuts(pos2addr(_textinfo.winleft+_textinfo.curx,
_textinfo.wintop+_textinfo.cury),s,l);
_textinfo.curx+=l;
if (_textinfo.curx>=dx) {
_textinfo.curx=0;
_textinfo.cury++;
}
for(;l; l--,s++) putchar(*s);
}
void conio_init(void) {
window(1,1,TEXT_X,TEXT_Y);
clrscr();
}
Vorgefundene Kodierung: ANSI (CP1252) | 4
|
|