0

I've heard the curses library can be useful when trying to implement the handy DOS-only tools of gotoxy() and clrscr() using move() and initscr(). Though, there is a way to write your own gotoxy() in the Linux environment. This topic isn't touched often, so I would like to change that. I'll also show an example of how to use clrscr(), but it isn't our main focus.

#include <stdio.h>
#include <string.h>

void clrscr(void) {
	int i;

	for (i = 0; i < 100; i++)
		// A bunch of new lines for now. It's blank, hey!
		putchar('\n');
}

int gotoxy(int x, int y) {
	char essq[100];		// String variable to hold the escape sequence
	char xstr[100];		// Strings to hold the x and y coordinates
	char ystr[100];		// Escape sequences must be built with characters

	/*
	** Convert the screen coordinates to strings
	*/
	sprintf(xstr, "%d", x);
	sprintf(ystr, "%d", y);

	/*
	** Build the escape sequence (vertical move)
	*/
	essq[0] = '\0';
	strcat(essq, "\033[");
	strcat(essq, ystr);

	/*
	** Described in man terminfo as vpa=\E[%p1%dd
	** Vertical position absolute
	*/
	strcat(essq, "d");
	
	/*
	** Horizontal move
	** Horizontal position absolute
	*/
	strcat(essq, "\033[");
	strcat(essq, xstr);
	// Described in man terminfo as hpa=\E[%p1%dG
	strcat(essq, "G");

	/*
	** Execute the escape sequence
	** This will move the cursor to x, y
	*/
	printf("%s", essq);

	return 0;
}

/*
** Example
*/
int main () {
	clrscr();
	gotoxy(2, 0);
	printf("Coordinates: x = 2; y = 0;\n");
	gotoxy(5, 5);
	printf("Coordinates: x = 5; y = 5;\n");

	return 0;
}
2
Contributors
2
Replies
10
Views
13 Years
Discussion Span
Last Post by sudheer51
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.