Source file: /~heha/ewa/Kram/Solarpaneel.zip/C-Programm/conio.c

#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();
}
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded