diff --git a/src/conio/cterm.c b/src/conio/cterm.c
index 96489be13c2ea9d4f6fa84242bf2cb951fdd3446..5f6f1ea657a220b86fcd6b20faad48dedd7dbb61 100644
--- a/src/conio/cterm.c
+++ b/src/conio/cterm.c
@@ -8,27 +8,7 @@
 
 #define	BUFSIZE	2048
 
-struct terminal {
-	int	height;
-	int	width;
-	int	x;
-	int	y;
-	char *buffer;
-	int	attr;
-	int save_xpos;
-	int save_ypos;
-	char	escbuf[1024];
-	int	sequence;
-	char	musicbuf[1024];
-	int music;
-	char *scrollback;
-	int backpos;
-	int backlines;
-	int	xpos;
-	int ypos;
-};
-
-static struct terminal term;
+struct cterminal cterm;
 
 /* const int tabs[11]={1,8,16,24,32,40,48,56,64,72,80}; */
 const int tabs[11]={9,17,25,33,41,49,57,65,73,80,80.1};
@@ -36,7 +16,7 @@ const int tabs[11]={9,17,25,33,41,49,57,65,73,80,80.1};
 void play_music(void)
 {
 	/* ToDo Music code parsing stuff */
-	term.music=0;
+	cterm.music=0;
 }
 
 void scrolldown(void)
@@ -44,15 +24,15 @@ void scrolldown(void)
 	char *buf;
 	int i,j;
 
-	buf=(char *)malloc(term.width*(term.height-1)*2);
-	gettext(term.x+1,term.y+1,term.x+term.width,term.y+term.height-1,buf);
-	puttext(term.x+1,term.y+2,term.x+term.width,term.y+term.height,buf);
+	buf=(char *)malloc(cterm.width*(cterm.height-1)*2);
+	gettext(cterm.x,cterm.y,cterm.x+cterm.width-1,cterm.y+cterm.height-2,buf);
+	puttext(cterm.x,cterm.y+1,cterm.x+cterm.width-1,cterm.y+cterm.height-1,buf);
 	j=0;
-	for(i=0;i<term.width;i++) {
+	for(i=0;i<cterm.width;i++) {
 		buf[j++]=' ';
-		buf[j++]=term.attr;
+		buf[j++]=cterm.attr;
 	}
-	puttext(term.x+1,term.y+1,term.x+term.width,term.y+1,buf);
+	puttext(cterm.x,cterm.y,cterm.x+cterm.width-1,cterm.y,buf);
 	free(buf);
 }
 
@@ -61,23 +41,23 @@ void scrollup(void)
 	char *buf;
 	int i,j;
 
-	term.backpos++;
-	if(term.scrollback!=NULL) {
-		if(term.backpos>term.backlines) {
-			memmove(term.scrollback,term.scrollback+term.width*2,term.width*2*(term.backlines-1));
-			term.backpos--;
+	cterm.backpos++;
+	if(cterm.scrollback!=NULL) {
+		if(cterm.backpos>cterm.backlines) {
+			memmove(cterm.scrollback,cterm.scrollback+cterm.width*2,cterm.width*2*(cterm.backlines-1));
+			cterm.backpos--;
 		}
-		gettext(term.x+1,term.y+1,term.x+term.width,term.y+1,term.scrollback+(term.backpos-1)*term.width*2);
+		gettext(cterm.x,cterm.y,cterm.x+cterm.width-1,cterm.y,cterm.scrollback+(cterm.backpos-1)*cterm.width*2);
 	}
-	buf=(char *)malloc(term.width*(term.height-1)*2);
-	gettext(term.x+1,term.y+2,term.x+term.width,term.y+term.height,buf);
-	puttext(term.x+1,term.y+1,term.x+term.width,term.y+term.height-1,buf);
+	buf=(char *)malloc(cterm.width*(cterm.height-1)*2);
+	gettext(cterm.x,cterm.y+1,cterm.x+cterm.width-1,cterm.y+cterm.height-1,buf);
+	puttext(cterm.x,cterm.y,cterm.x+cterm.width-1,cterm.y+cterm.height-2,buf);
 	j=0;
-	for(i=0;i<term.width;i++) {
+	for(i=0;i<cterm.width;i++) {
 		buf[j++]=' ';
-		buf[j++]=term.attr;
+		buf[j++]=cterm.attr;
 	}
-	puttext(term.x+1,term.y+term.height,term.x+term.width,term.y+term.height,buf);
+	puttext(cterm.x,cterm.y+cterm.height-1,cterm.x+cterm.width-1,cterm.y+cterm.height-1,buf);
 	free(buf);
 }
 
@@ -90,9 +70,9 @@ void clear2bol(void)
 	j=0;
 	for(i=1;i<=wherex();i++) {
 		buf[j++]=' ';
-		buf[j++]=term.attr;
+		buf[j++]=cterm.attr;
 	}
-	puttext(term.x+1,term.y+wherey(),term.x+wherex(),term.y+wherey(),buf);
+	puttext(cterm.x+1,cterm.y+wherey(),cterm.x+wherex(),cterm.y+wherey(),buf);
 	free(buf);
 }
 
@@ -109,13 +89,13 @@ void clearscreen(char attr)
 	char *buf;
 	int x,y,j;
 
-	if(term.scrollback!=NULL) {
-		term.backpos+=term.height;
-		if(term.backpos>term.backlines) {
-			memmove(term.scrollback,term.scrollback+term.width*2*(term.backpos-term.backlines),term.width*2*(term.backlines-(term.backpos-term.backlines)));
-			term.backpos=term.backlines;
+	if(cterm.scrollback!=NULL) {
+		cterm.backpos+=cterm.height;
+		if(cterm.backpos>cterm.backlines) {
+			memmove(cterm.scrollback,cterm.scrollback+cterm.width*2*(cterm.backpos-cterm.backlines),cterm.width*2*(cterm.backlines-(cterm.backpos-cterm.backlines)));
+			cterm.backpos=cterm.backlines;
 		}
-		gettext(term.x+1,term.y+1,term.x+term.width,term.y+term.height,term.scrollback+(term.backpos-term.height)*term.width*2);
+		gettext(cterm.x,cterm.y,cterm.x+cterm.width-1,cterm.y+cterm.height-1,cterm.scrollback+(cterm.backpos-cterm.height)*cterm.width*2);
 	}
 	clrscr();
 }
@@ -128,21 +108,21 @@ void do_ansi(char *retbuf, int retsize)
 	int		i,j,k;
 	int		row,col;
 
-	switch(term.escbuf[0]) {
+	switch(cterm.escbuf[0]) {
 		case '[':
 			/* ANSI stuff */
-			p=term.escbuf+strlen(term.escbuf)-1;
+			p=cterm.escbuf+strlen(cterm.escbuf)-1;
 			switch(*p) {
 				case '@':	/* Insert Char */
 					i=wherex();
 					j=wherey();
-					gettext(term.x+wherex(),term.y+wherey(),term.x+term.width-1,term.y+wherey(),tmp);
+					gettext(cterm.x+wherex(),cterm.y+wherey(),cterm.x+cterm.width-1,cterm.y+wherey(),tmp);
 					putch(' ');
-					puttext(term.x+wherex()+1,term.y+wherey(),term.x+term.width,term.y+wherey(),tmp);
+					puttext(cterm.x+wherex()+1,cterm.y+wherey(),cterm.x+cterm.width,cterm.y+wherey(),tmp);
 					gotoxy(i,j);
 					break;
 				case 'A':	/* Cursor Up */
-					i=atoi(term.escbuf+1);
+					i=atoi(cterm.escbuf+1);
 					if(i==0)
 						i=1;
 					i=wherey()-i;
@@ -151,25 +131,25 @@ void do_ansi(char *retbuf, int retsize)
 					gotoxy(wherex(),i);
 					break;
 				case 'B':	/* Cursor Down */
-					i=atoi(term.escbuf+1);
+					i=atoi(cterm.escbuf+1);
 					if(i==0)
 						i=1;
 					i=wherey()+i;
-					if(i>term.height)
-						i=term.height;
+					if(i>cterm.height)
+						i=cterm.height;
 					gotoxy(wherex(),i);
 					break;
 				case 'C':	/* Cursor Right */
-					i=atoi(term.escbuf+1);
+					i=atoi(cterm.escbuf+1);
 					if(i==0)
 						i=1;
 					i=wherex()+i;
-					if(i>term.width)
-						i=term.width;
+					if(i>cterm.width)
+						i=cterm.width;
 					gotoxy(i,wherey());
 					break;
 				case 'D':	/* Cursor Left */
-					i=atoi(term.escbuf+1);
+					i=atoi(cterm.escbuf+1);
 					if(i==0)
 						i=1;
 					i=wherex()-i;
@@ -178,7 +158,7 @@ void do_ansi(char *retbuf, int retsize)
 					gotoxy(i,wherey());
 					break;
 				case 'E':
-					i=atoi(term.escbuf+1);
+					i=atoi(cterm.escbuf+1);
 					if(i==0)
 						i=1;
 					i=wherey()+i;
@@ -190,8 +170,8 @@ void do_ansi(char *retbuf, int retsize)
 					row=1;
 					col=1;
 					*(p--)=0;
-					if(strlen(term.escbuf)>1) {
-						if((p=strtok(term.escbuf+1,";"))!=NULL) {
+					if(strlen(cterm.escbuf)>1) {
+						if((p=strtok(cterm.escbuf+1,";"))!=NULL) {
 							row=atoi(p);
 							if((p=strtok(NULL,";"))!=NULL) {
 								col=atoi(p);
@@ -202,49 +182,49 @@ void do_ansi(char *retbuf, int retsize)
 						row=1;
 					if(col<1)
 						col=1;
-					if(row>term.height)
-						row=term.height;
-					if(col>term.width)
-						col=term.width;
+					if(row>cterm.height)
+						row=cterm.height;
+					if(col>cterm.width)
+						col=cterm.width;
 					gotoxy(col,row);
 					break;
 				case 'J':
-					i=atoi(term.escbuf+1);
+					i=atoi(cterm.escbuf+1);
 					switch(i) {
 						case 0:
 							clear2eol();
-							p2=(char *)malloc(term.width*2);
+							p2=(char *)malloc(cterm.width*2);
 							j=0;
-							for(i=0;i<term.width;i++) {
+							for(i=0;i<cterm.width;i++) {
 								p2[j++]=' ';
-								p2[j++]=term.attr;
+								p2[j++]=cterm.attr;
 							}
-							for(i=wherey()+1;i<=term.height;i++) {
-								puttext(term.x+1,term.y+i,term.x+term.width,term.y+i,p2);
+							for(i=wherey()+1;i<=cterm.height;i++) {
+								puttext(cterm.x+1,cterm.y+i,cterm.x+cterm.width,cterm.y+i,p2);
 							}
 							free(p2);
 							break;
 						case 1:
 							clear2bol();
-							p2=(char *)malloc(term.width*2);
+							p2=(char *)malloc(cterm.width*2);
 							j=0;
-							for(i=0;i<term.width;i++) {
+							for(i=0;i<cterm.width;i++) {
 								p2[j++]=' ';
-								p2[j++]=term.attr;
+								p2[j++]=cterm.attr;
 							}
 							for(i=wherey()-1;i>=1;i--) {
-								puttext(term.x+1,term.y+i,term.x+term.width,term.y+i,p2);
+								puttext(cterm.x+1,cterm.y+i,cterm.x+cterm.width,cterm.y+i,p2);
 							}
 							free(p2);
 							break;
 						case 2:
-							clearscreen(term.attr);
+							clearscreen(cterm.attr);
 							gotoxy(1,1);
 							break;
 					}
 					break;
 				case 'K':
-					i=atoi(term.escbuf+1);
+					i=atoi(cterm.escbuf+1);
 					switch(i) {
 						case 0:
 							clear2eol();
@@ -253,57 +233,57 @@ void do_ansi(char *retbuf, int retsize)
 							clear2bol();
 							break;
 						case 2:
-							p2=(char *)malloc(term.width*2);
+							p2=(char *)malloc(cterm.width*2);
 							j=0;
-							for(i=0;i<term.width;i++) {
+							for(i=0;i<cterm.width;i++) {
 								p2[j++]=' ';
-								p2[j++]=term.attr;
+								p2[j++]=cterm.attr;
 							}
-							puttext(term.x+1,term.y+wherey(),term.x+term.width,term.y+wherey(),p2);
+							puttext(cterm.x+1,cterm.y+wherey(),cterm.x+cterm.width,cterm.y+wherey(),p2);
 							free(p2);
 							break;
 					}
 					break;
 				case 'L':
-					i=atoi(term.escbuf+1);
+					i=atoi(cterm.escbuf+1);
 					if(i==0)
 						i=1;
-					if(i>term.height-wherey())
-						i=term.height-wherey();
-					if(i<term.height-wherey()) {
-						p2=(char *)malloc((term.height-wherey()-i)*term.width*2);
-						gettext(term.x+1,term.y+wherey(),term.x+term.width,wherey()+(term.height-wherey()-i),p2);
-						puttext(term.x+1,term.y+wherey()+i,term.x+term.width,wherey()+(term.height-wherey()),p2);
+					if(i>cterm.height-wherey())
+						i=cterm.height-wherey();
+					if(i<cterm.height-wherey()) {
+						p2=(char *)malloc((cterm.height-wherey()-i)*cterm.width*2);
+						gettext(cterm.x+1,cterm.y+wherey(),cterm.x+cterm.width,wherey()+(cterm.height-wherey()-i),p2);
+						puttext(cterm.x+1,cterm.y+wherey()+i,cterm.x+cterm.width,wherey()+(cterm.height-wherey()),p2);
 						j=0;
 						free(p2);
 					}
-					p2=(char *)malloc(term.width*2);
+					p2=(char *)malloc(cterm.width*2);
 					j=0;
-					for(k=0;k<term.width;k++) {
+					for(k=0;k<cterm.width;k++) {
 						p2[j++]=' ';
-						p2[j++]=term.attr;
+						p2[j++]=cterm.attr;
 					}
 					for(i=0;j<i;i++) {
-						puttext(term.x+1,term.y+i,term.x+term.width,term.y+i,p2);
+						puttext(cterm.x+1,cterm.y+i,cterm.x+cterm.width,cterm.y+i,p2);
 					}
 					free(p2);
 					break;
 				case 'M':
 				case 'N':
-					term.music=1;
+					cterm.music=1;
 					break;
 				case 'P':	/* Delete char */
-					i=atoi(term.escbuf+1);
+					i=atoi(cterm.escbuf+1);
 					if(i==0)
 						i=1;
-					if(i>term.width-wherex())
-						i=term.width-wherex();
-					p2=(char *)malloc((term.width-wherex())*2);
-					gettext(term.x+wherex(),term.y+wherey(),term.x+term.width,term.y+wherey(),p2);
-					memmove(p2,p2+(i*2),(term.width-wherex()-i)*2);
-					for(i=(term.width-wherex())*2-2;i>=wherex();i-=2)
+					if(i>cterm.width-wherex())
+						i=cterm.width-wherex();
+					p2=(char *)malloc((cterm.width-wherex())*2);
+					gettext(cterm.x+wherex(),cterm.y+wherey(),cterm.x+cterm.width,cterm.y+wherey(),p2);
+					memmove(p2,p2+(i*2),(cterm.width-wherex()-i)*2);
+					for(i=(cterm.width-wherex())*2-2;i>=wherex();i-=2)
 						p2[i]=' ';
-					puttext(term.x+wherex(),term.y+wherey(),term.x+term.width,term.y+wherey(),p2);
+					puttext(cterm.x+wherex(),cterm.y+wherey(),cterm.x+cterm.width,cterm.y+wherey(),p2);
 					break;
 				case 'S':
 					scrollup();
@@ -337,109 +317,109 @@ void do_ansi(char *retbuf, int retsize)
 					break;
 				case 'm':
 					*(p--)=0;
-					p2=term.escbuf+1;
+					p2=cterm.escbuf+1;
 					if(p2>p) {
-						term.attr=7;
+						cterm.attr=7;
 						break;
 					}
 					while((p=strtok(p2,";"))!=NULL) {
 						p2=NULL;
 						switch(atoi(p)) {
 							case 0:
-								term.attr=7;
+								cterm.attr=7;
 								break;
 							case 1:
-								term.attr|=8;
+								cterm.attr|=8;
 								break;
 							case 2:
-								term.attr&=247;
+								cterm.attr&=247;
 								break;
 							case 4:	/* Underscore */
 								break;
 							case 5:
 							case 6:
-								term.attr|=128;
+								cterm.attr|=128;
 								break;
 							case 7:
-								i=term.attr&7;
-								j=term.attr&112;
-								term.attr &= 136;
-								term.attr |= j>>4;
-								term.attr |= i<<4;
+								i=cterm.attr&7;
+								j=cterm.attr&112;
+								cterm.attr &= 136;
+								cterm.attr |= j>>4;
+								cterm.attr |= i<<4;
 								break;
 							case 8:
-								j=term.attr&112;
-								term.attr&=112;
-								term.attr |= j>>4;
+								j=cterm.attr&112;
+								cterm.attr&=112;
+								cterm.attr |= j>>4;
 								break;
 							case 30:
-								term.attr&=248;
+								cterm.attr&=248;
 								break;
 							case 31:
-								term.attr&=248;
-								term.attr|=4;
+								cterm.attr&=248;
+								cterm.attr|=4;
 								break;
 							case 32:
-								term.attr&=248;
-								term.attr|=2;
+								cterm.attr&=248;
+								cterm.attr|=2;
 								break;
 							case 33:
-								term.attr&=248;
-								term.attr|=6;
+								cterm.attr&=248;
+								cterm.attr|=6;
 								break;
 							case 34:
-								term.attr&=248;
-								term.attr|=1;
+								cterm.attr&=248;
+								cterm.attr|=1;
 								break;
 							case 35:
-								term.attr&=248;
-								term.attr|=5;
+								cterm.attr&=248;
+								cterm.attr|=5;
 								break;
 							case 36:
-								term.attr&=248;
-								term.attr|=3;
+								cterm.attr&=248;
+								cterm.attr|=3;
 								break;
 							case 37:
-								term.attr&=248;
-								term.attr|=7;
+								cterm.attr&=248;
+								cterm.attr|=7;
 								break;
 							case 40:
-								term.attr&=143;
+								cterm.attr&=143;
 								break;
 							case 41:
-								term.attr&=143;
-								term.attr|=4<<4;
+								cterm.attr&=143;
+								cterm.attr|=4<<4;
 								break;
 							case 42:
-								term.attr&=143;
-								term.attr|=2<<4;
+								cterm.attr&=143;
+								cterm.attr|=2<<4;
 								break;
 							case 43:
-								term.attr&=143;
-								term.attr|=6<<4;
+								cterm.attr&=143;
+								cterm.attr|=6<<4;
 								break;
 							case 44:
-								term.attr&=143;
-								term.attr|=1<<4;
+								cterm.attr&=143;
+								cterm.attr|=1<<4;
 								break;
 							case 45:
-								term.attr&=143;
-								term.attr|=5<<4;
+								cterm.attr&=143;
+								cterm.attr|=5<<4;
 								break;
 							case 46:
-								term.attr&=143;
-								term.attr|=3<<4;
+								cterm.attr&=143;
+								cterm.attr|=3<<4;
 								break;
 							case 47:
-								term.attr&=143;
-								term.attr|=7<<4;
+								cterm.attr&=143;
+								cterm.attr|=7<<4;
 								break;
 						}
 					}
-					textattr(term.attr);
+					textattr(cterm.attr);
 					break;
 				case 'n':
-					i=atoi(term.escbuf+1);
+					i=atoi(cterm.escbuf+1);
 					switch(i) {
 						case 6:
 							if(retbuf!=NULL) {
@@ -450,7 +430,7 @@ void do_ansi(char *retbuf, int retsize)
 							break;
 						case 255:
 							if(retbuf!=NULL) {
-								sprintf(tmp,"%c[%d;%dR",27,term.height,term.width);
+								sprintf(tmp,"%c[%d;%dR",27,cterm.height,cterm.width);
 								if(strlen(retbuf)+strlen(tmp) < retsize)
 									strcat(retbuf,tmp);
 							}
@@ -464,13 +444,13 @@ void do_ansi(char *retbuf, int retsize)
 				case 'r': /* ToDo?  Scrolling reigon */
 					break;
 				case 's':
-					term.save_xpos=wherex();
-					term.save_ypos=wherey();
+					cterm.save_xpos=wherex();
+					cterm.save_ypos=wherey();
 					break;
 				case 'u':
-					if(term.save_ypos>0 && term.save_ypos<=term.height
-							&& term.save_xpos>0 && term.save_xpos<=term.width) {
-						gotoxy(term.save_xpos,term.save_ypos);
+					if(cterm.save_ypos>0 && cterm.save_ypos<=cterm.height
+							&& cterm.save_xpos>0 && cterm.save_xpos<=cterm.width) {
+						gotoxy(cterm.save_xpos,cterm.save_ypos);
 					}
 					break;
 				case 'y':	/* ToDo?  VT100 Tests */
@@ -489,34 +469,117 @@ void do_ansi(char *retbuf, int retsize)
 			/* ToDo: Reset Terminal */
 			break;
 	}
-	term.escbuf[0]=0;
-	term.sequence=0;
+	cterm.escbuf[0]=0;
+	cterm.sequence=0;
 }
 
 void cterm_init(int height, int width, int xpos, int ypos, int backlines, unsigned char *scrollback)
 {
-	term.x=xpos;
-	term.y=ypos;
-	term.height=height;
-	term.width=width;
-	term.attr=7;
-	term.save_xpos=0;
-	term.save_ypos=0;
-	term.escbuf[0]=0;
-	term.sequence=0;
-	term.music=0;
-	term.backpos=0;
-	term.backlines=backlines;
-	term.scrollback=scrollback;
-	if(term.scrollback!=NULL)
-		memset(term.scrollback,0,term.width*2*term.backlines);
-	textattr(term.attr);
+	cterm.x=xpos;
+	cterm.y=ypos;
+	cterm.height=height;
+	cterm.width=width;
+	cterm.attr=7;
+	cterm.save_xpos=0;
+	cterm.save_ypos=0;
+	cterm.escbuf[0]=0;
+	cterm.sequence=0;
+	cterm.music=0;
+	cterm.backpos=0;
+	cterm.backlines=backlines;
+	cterm.scrollback=scrollback;
+	if(cterm.scrollback!=NULL)
+		memset(cterm.scrollback,0,cterm.width*2*cterm.backlines);
+	textattr(cterm.attr);
 	_setcursortype(_NORMALCURSOR);
-	window(term.x,term.y,term.x+term.width-1,term.y+term.height-1);
+	window(cterm.x,cterm.y,cterm.x+cterm.width-1,cterm.y+cterm.height-1);
 	clrscr();
 	gotoxy(1,1);
 }
 
+void ctputs(char *buf)
+{
+	char *outp;
+	char *p;
+	char outline[80];
+	int		oldscroll;
+	int		cx;
+	int		cy;
+	int		i;
+
+	p=buf;
+	outp=buf;
+	oldscroll=_wscroll;
+	_wscroll=0;
+	cx=wherex();
+	cy=wherey();
+	for(p=buf;*p;p++) {
+		switch(*p) {
+			case '\r':
+				cx=1;
+				break;
+			case '\n':
+				if(cy==cterm.height) {
+					*p=0;
+					cputs(outp);
+					outp=p+1;
+					scrollup();
+				}
+				else
+					cy++;
+				break;
+			case '\b':
+				if(cx>0)
+					cx--;
+				break;
+			case 7:		/* Bell */
+				break;
+			case '\t':
+				for(i=0;i<10;i++) {
+					if(tabs[i]>cx) {
+						while(cx<tabs[i]) {
+							cx++;
+						}
+						break;
+					}
+				}
+				if(i==10) {
+					cx=1;
+					if(cy==cterm.height) {
+						*p=0;
+						cputs(outp);
+						outp=p+1;
+						scrollup();
+					}
+					else
+						cy++;
+				}
+				break;
+			default:
+				if(cy==cterm.height
+						&& cx==cterm.width) {
+						*p=0;
+						cputs(outp);
+						outp=p+1;
+						scrollup();
+						cx=1;
+				}
+				else {
+					if(cx==cterm.width) {
+						cx=1;
+						cy++;
+					}
+					else {
+						cx++;
+					}
+				}
+				break;
+		}
+	}
+	cputs(outp);
+	_wscroll=oldscroll;
+}
+
 char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize)
 {
 	unsigned char ch[2];
@@ -532,9 +595,9 @@ char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize)
 	if(retbuf!=NULL)
 		retbuf[0]=0;
 	gettextinfo(&ti);
-	window(term.x,term.y,term.x+term.width-1,term.y+term.height-1);
-	gotoxy(term.xpos,term.ypos);
-	textattr(term.attr);
+	window(cterm.x,cterm.y,cterm.x+cterm.width-1,cterm.y+cterm.height-1);
+	gotoxy(cterm.xpos,cterm.ypos);
+	textattr(cterm.attr);
 	ch[1]=0;
 	switch(buflen) {
 		case 0:
@@ -543,15 +606,15 @@ char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize)
 			prn[0]=0;
 			for(j=0;j<buflen;j++) {
 				ch[0]=buf[j];
-				if(term.sequence) {
-					strcat(term.escbuf,ch);
+				if(cterm.sequence) {
+					strcat(cterm.escbuf,ch);
 					if((ch[0]>='@' && ch[0]<='Z')
 							|| (ch[0]>='a' && ch[0]<='z')) {
 						do_ansi(retbuf, retsize);
 					}
 				}
-				else if (term.music) {
-					strcat(term.musicbuf,ch);
+				else if (cterm.music) {
+					strcat(cterm.musicbuf,ch);
 					if(ch[0]==14)
 						play_music();
 				}
@@ -560,7 +623,7 @@ char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize)
 						case 0:
 							break;
 						case 7:			/* Beep */
-							cputs(prn);
+							ctputs(prn);
 							prn[0]=0;
 							#ifdef __unix__
 								putch(7);
@@ -569,18 +632,18 @@ char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize)
 							#endif
 							break;
 						case 12:		/* ^L - Clear screen */
-							cputs(prn);
+							ctputs(prn);
 							prn[0]=0;
-							clearscreen(term.attr);
+							clearscreen(cterm.attr);
 							gotoxy(1,1);
 							break;
 						case 27:		/* ESC */
-							cputs(prn);
+							ctputs(prn);
 							prn[0]=0;
-							term.sequence=1;
+							cterm.sequence=1;
 							break;
 						case '\t':
-							cputs(prn);
+							ctputs(prn);
 							prn[0]=0;
 							for(k=0;k<11;k++) {
 								if(tabs[k]>wherex()) {
@@ -594,12 +657,12 @@ char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize)
 					}
 				}
 			}
-			cputs(prn);
+			ctputs(prn);
 			prn[0]=0;
 			break;
 	}
-	term.xpos=wherex();
-	term.ypos=wherey();
+	cterm.xpos=wherex();
+	cterm.ypos=wherey();
 #if 0
 	window(ti.winleft,ti.wintop,ti.winright,ti.wintop);
 	gotoxy(ti.curx,ti.cury);
diff --git a/src/conio/cterm.h b/src/conio/cterm.h
index 869d860ce7651138c69928edacf46c0ed6a81051..8bb824bd7cf2f34a9306895fcd55cc0802a49522 100644
--- a/src/conio/cterm.h
+++ b/src/conio/cterm.h
@@ -1,9 +1,32 @@
 #ifndef _CTERM_H_
 #define _CTERM_H_
 
+struct cterminal {
+	int	height;
+	int	width;
+	int	x;
+	int	y;
+	char *buffer;
+	int	attr;
+	int save_xpos;
+	int save_ypos;
+	char	escbuf[1024];
+	int	sequence;
+	char	musicbuf[1024];
+	int music;
+	char *scrollback;
+	int backpos;
+	int backlines;
+	int	xpos;
+	int ypos;
+};
+
 #ifdef __cplusplus
 extern "C" {
 #endif
+
+extern struct cterminal cterm;
+
 void cterm_init(int height, int width, int xpos, int ypos, int backlines, unsigned char *scrollback);
 char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize);
 void cterm_end(void);