#include <conio.h>
#include <string.h>
#include "tcclib.h"

int GetLine( char *ptr, int dsize, int start )
{
    register int ch;
	register int j=start;
	register int x;
	register int i;
	register int y;

	x = wherex();
	y = wherey();
	AtSay( x, y, ptr );
	while (j <= dsize) {
		gotoxy( x+j, y );
		switch( ch = GComm() ){
            case ESC:
                ptr[start] = '\0';
                return( -1 );
            case CR:
            case LF:
				return(strlen(ptr));
            case BS:
				if ( j )
					j--;
			case DEL:
				ch = strlen(ptr);
				for (i=j; i<ch; ++i)
					ptr[i] = ptr[i+1];
				gotoxy( x, y );
				Say( ptr );
				break;
			case INS:
				for (i=strlen(ptr)+1; i>j; --i)
					ptr[i] = ptr[i-1];
				ptr[j] = ' ';
				gotoxy( x, y );
				Say( ptr );
				break;
			case HOME:
				j = 0;
				break;
			case END:
				j = strlen(ptr);
				break;
			case LEFT:
				if (j) {
					j--;
				}
				break;
			case RIGHT:
				if (j<dsize) {
					if (ptr[j] == '\0')
						ptr[j] = ' ';
					j++;
				}
				break;
            default:
				if (j < dsize) {
                    if ( ch >= 32 && ch <= 127 ) {
                        ptr[j++] = ch;
                        putch(ch);
                    }
                }
                break;
        }
    }
    return( 0 );
}