[ECOS] Re: Clear Screen

Frank Pagliughi fpagliughi@mindspring.com
Fri Apr 15 14:21:00 GMT 2005


i386 Target, huh? Are you sending the output to a serial port or to a VGA
screen? If a serial port, then it's the terminal emulator program on the
host that needs to ANSI support, not your application.

If you're using a VGA screen, you can always write directly to the video
memory. In text mode, it starts at 0xB8000. Search the web for more info, or
look for an old book on DOS. I don't know how eCos positions the cursor on a
VGA screen, though. So printf() positions won't automatically be restarted
at the top left after clearing.

Here's an example for a standard VGA in standard 80x25 text mode:


// --------------------------------------
// conio_test.c
//
// Test of the PC console I/O functions.
// These are fast direct-to-video-memory routines.

#include <stdio.h>
typedef unsigned char byte;

#define SCR_WD	80
#define SCR_HT	25

typedef struct tag_chel
{
	char	ch;		// Char displayed
	byte	attr;		// FG & BG colors
}
	chel;

typedef chel chel_line[80];

chel_line *pc_scr = ((chel_line*) 0xB8000);

static byte	scrattr	= 0x07;	// White FG on black BG

// --------------------------------------

void clrscr(void)
{
	int x, y;

	for (y=0; y<SCR_HT; y++) {
		for (x=0; x<SCR_WD; x++) {
			pc_scr[y][x].ch = ' ';
			pc_scr[y][x].attr = scrattr;
		}
	}
}

// ------------------------------------

int main (int argc, char *argv[])
{
	clrscr();

	pc_scr[0][0].ch = 'A';
	pc_scr[0][1].ch = '*';

	return(0);
}

-----Original Message-----
From: ecos-discuss-owner@ecos.sourceware.org
[mailto:ecos-discuss-owner@ecos.sourceware.org]On Behalf Of Magnus
Ottosson
Sent: Friday, April 15, 2005 4:40 AM
Cc: ecos-discuss@ecos.sourceware.org
Subject: Re: [ECOS] Re: Clear Screen


Neither of these options work. I guess that when I built eCos I did not
build it with a terminal that support ansi? How would I do this?

Magnus

Magnus Ottosson wrote:

>I have compiled the application for i386 target. It shall run on a P4-M.
>See atachment for my Makefile.
>
>I have tried printf("\033[2J")
>
>I will try:
>
>void clearToEOL(void)
>  {
>    printf("\033[K")
>  }
>
>void moveCursor(int row, int col)
>  {
>    printf("\033[%d;%dH",row, col)
>  }
>
>To if they work.
>
>//Magnus.
>
>
>
>Grant Edwards wrote:
>
>
>
>>In gmane.os.ecos.general, you wrote:
>>
>>
>>
>>
>>
>>>I wan't to know if it's possible to clear the screen or update a
>>>specific line with eCos?
>>>
>>>
>>>
>>>
>>Depends on what screen you're using.
>>
>>
>>
>>
>>
>>>I have an application that writes data on the screen with
>>>printf() and I want to clear this data and write new. Is there
>>>a clear screen function or something like it?
>>>
>>>
>>>
>>>
>>Assuming you're using an ANSI terminal, writing such functions
>>is pretty simple:
>>
>>void clearScreen(void)
>> {
>>   printf("\033[2J")
>> }
>>
>>void clearToEOL(void)
>> {
>>   printf("\033[K")
>> }
>>
>>void moveCursor(int row, int col)
>> {
>>   printf("\033[%d;%dH",row, col)
>> }
>>
>>and so on.
>>
>>
>>
>>
>>
>
>
>
>------------------------------------------------------------------------
>
>INSTALL_DIR = /home/supersonic/i386library_install
>COMPILER_DIR = /opt/ecos/gnutools/i386-elf/bin
>BOOT_DIR = /boot/
>EXE_SOURCE = sigSonarServer.c
>EXE_OUTPUT = sigSonarServer
>
>include $(INSTALL_DIR)/include/pkgconf/ecos.mak
>
>COMPILER = $(COMPILER_DIR)/i386-elf-gcc
>COMPILER_FLAGS = -I$(INSTALL_DIR)/include
>LINKER_FLAGS = -nostartfiles -L$(INSTALL_DIR)/lib -Ttarget.ld
>
>$(EXE_OUTPUT): obj.o
>	$(COMPILER) $(LINKER_FLAGS) $(ECOS_GLOBAL_LDFLAGS) -o $@ obj.o
>	-rm -f obj.o
>obj.o: $(EXE_SOURCE)
>	$(COMPILER) -c -o obj.o $(COMPILER_FLAGS) $(ECOS_GLOBAL_CFLAGS) \
>	$(EXE_SOURCE)
>
>.PHONY: clean install
>clean:
>		-rm -f $(EXE_OUTPUT)
>install:
>	cp ./$(EXE_OUTPUT) $(BOOT_DIR)
>
>------------------------------------------------------------------------
>
>/*/////////////////////////////////////////////////////////////////////////
////
>
>	Project:		Sea Grid
>
>	Module:			Sonar Control
>
>	Description:
>
>	Author:			Magnus Ottosson, it3otma@ituniv.se
>
>	Co Authors:		N/A
>
>	Created:		2005-03-31
>
>///////////////////////////////////////////////////////////////////////////
///*/
>
>#include <stdlib.h>
>#include <stdio.h>
>#include <cyg/hal/hal_io.h>
>#include <cyg/kernel/kapi.h>
>#include <cyg/io/devtab.h>
>#include "sigSonarControl/sigSonarControl.h"
>
>#define KEYBOARD 0x60
>
>void drawRootMenu(positions* currentPositions);
>void drawPositionsMenu(positions* currentPositions);
>
>void drawRootMenu(positions* currentPositions){
>
>	printf("\033[K");
>	printf("  -------------------------------------- \n");
>	printf(" |        ++ Sonar Server ++            |\n");
>	printf(" |           ~~~~~~~~~~~~               |\n");
>	printf(" |     (1) See positions                |\n");
>	printf(" |     (q) Quit                         |\n");
>	printf(" |                                      |\n");
>	printf(" |            Make a choice             |\n");
>	printf(" |                                      |\n");
>	printf("  -------------------------------------- \n");
>
>	unsigned int input = 0;
>
>	while (1) {
>
>		HAL_READ_UINT8(KEYBOARD, input);
>
>		if (input == 130) {
>			drawPositionsMenu(currentPositions);
>			break;
>		} else if (input == 129) {
>			// QUIT;
>		}
>	}
>}
>
>void drawPositionsMenu(positions* currentPositions){
>
>	unsigned int input = 0;
>
>	while (1) {
>
>		HAL_READ_UINT8(KEYBOARD, input);
>
>		printf("\033[K");
>		printf("  -------------------------------------- \n");
>		printf(" | ++ Sonar Server Current Positions ++ |\n");
>	  	printf(" |           ~~~~~~~~~~~~               |\n");
>	  	printf(" |     Lorry				            |\n");
>	  	printf(" |     ----------------                 |\n");
>	  	printf(" |     Front X: %d
                     |\n",currentPositions -> currentLorryPos.frontX);
>	  	printf(" |     Front Y: %d
                     |\n",currentPositions -> currentLorryPos.frontY);
>	  	printf(" |     Rear  X: %d
                     |\n",currentPositions -> currentLorryPos.rearX);
>	  	printf(" |     Rear  Y: %d
                     |\n",currentPositions -> currentLorryPos.rearY);
>	  	printf(" |     Angle  : %f               |\n",currentPositions ->
currentLorryPos.angle);
>	  	printf(" |                                      |\n");
>	  	printf(" |     Barge                            |\n");
>	  	printf(" |     ----------------                 |\n");
>	  	printf(" |     Front X: %d
                     |\n",currentPositions -> currentBargePos.frontX);
>	  	printf(" |     Front Y: %d
                     |\n",currentPositions -> currentBargePos.frontY);
>	  	printf(" |     Rear  X: %d
                     |\n",currentPositions -> currentBargePos.rearX);
>	  	printf(" |     Rear  Y: %d
                     |\n",currentPositions -> currentBargePos.rearY);
>	  	printf(" |     Angle  : %f               |\n",currentPositions ->
currentBargePos.angle);
>	  	printf(" |                                      |\n");
>	  	printf(" |   Press ESC to return to root menu   |\n");
>	  	printf(" |                                      |\n");
>	  	printf("  -------------------------------------- \n");
>
>		if (input == 129) {
>			drawRootMenu(currentPositions);
>			break;
>		}
>	}
>}
>
>
>int main(void) {
>
>	// Create the positions struct
>	// Allocate the memory for the position struct.
>	currentPositions = (positions*) malloc(sizeof(positions));
>	// Initialize the values to -1
>	currentPositions -> currentBargePos.angle = 1.0;
>	currentPositions -> currentBargePos.frontX = 1;
>	currentPositions -> currentBargePos.frontY = 1;
>	currentPositions -> currentBargePos.rearX = 1;
>	currentPositions -> currentBargePos.rearY = 1;
>
>	currentPositions -> currentLorryPos.angle = 1.0;
>	currentPositions -> currentLorryPos.frontX = 1;
>	currentPositions -> currentLorryPos.frontY = 1;
>	currentPositions -> currentLorryPos.rearX = 1;
>	currentPositions -> currentLorryPos.rearY = 1;
>
>	// TODO: Thread
>	drawRootMenu(currentPositions);
>
>	// TODO: Thread
>	// startbeacons();
>
>	// TODO: Thread
>	// listenToRadioReceiver(currentPositions);
>
>
>	return 0;
>}
>
>
>
>

--
-----------------------------------
 Contact information
  Phone: (+46) (0) 31 206700
  Mobile: (+46) (0) 733-908060
  Email: it3otma@ituniv.se


--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss




-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



More information about the Ecos-discuss mailing list