[GCC/Win32]: Hoe een clrscr() doen?

Pagina: 1
Acties:

  • arnova
  • Registratie: Augustus 2001
  • Laatst online: 05:44

arnova

weet veel, maar niet alles

Topicstarter
Ik ben een programmaatje in GCC aan het schrijven, voor gebruik onder de Windows 2000 in een text(DOS)box. Ik heb vroeger altijd in Borland C geprogrammeerd (in het DOS tijdperk) maar ik dacht ik ga het eens in GCC voor Windows proberen. Het probleem is nu echter dat GCC geen clrscr();-achtige functions heeft. Ik wil namelijk een scherm maken waarin telkens na bepaalde toetsaanslag er op bepaalde plekken getallen worden aangepast. Mijn idee was dus om gewoon telkens een clrscr(); te doen en vervolgens het beeld opnieuw op te bouwen met de nieuwe getallen. Maar dat gaat dus niet zonder clrscr();. Weet iemand een mooie (of lelijke) oplossing voor mijn probleem?

Ctrl4Dkn: ESP32 (Floor) Heat Controller With Daikin (Heatpump) Support - https://github.com/arnova/ctrl4dkn


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 08:02

Cyphax

Moderator LNX
clrscr() zit in conio.h als ik me niet vergis dus als je die even include zou je er moeten zijn lijkt me. :)

Saved by the buoyancy of citrus


  • igmar
  • Registratie: April 2000
  • Laatst online: 31-01 23:50

igmar

ISO20022

master_artech schreef op woensdag 11 oktober 2006 @ 19:14:
Weet iemand een mooie (of lelijke) oplossing voor mijn probleem?
Die oplossing heet ANSI :

C:
1
2
3
4
void clrscr(void)
{
    printf("\33[H\33[2J");
}

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

http://msdn.microsoft.com...ase/console_functions.asp - met een van die functies moet dat lukken gok ik? :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 08:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat heet geen DOSbox maar een console window.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • arnova
  • Registratie: Augustus 2001
  • Laatst online: 05:44

arnova

weet veel, maar niet alles

Topicstarter
Cyphax schreef op woensdag 11 oktober 2006 @ 19:15:
clrscr() zit in conio.h als ik me niet vergis dus als je die even include zou je er moeten zijn lijkt me. :)
Ja, maar niet in de conio.h van GCC, dat is namelijk een afgeslankte versie van die van Borland.
igmar schreef op woensdag 11 oktober 2006 @ 22:10:
[...]


Die oplossing heet ANSI :

C:
1
2
3
4
void clrscr(void)
{
    printf("\33[H\33[2J");
}
Dit heb ik geprobeerd maar dat werkt dus niet helaas :-S Ik krijg "←[H←[2J" op het beeld maar dus geen leeg scherm :-S Doe ik misschien iets fout?

[ Voor 29% gewijzigd door arnova op 12-10-2006 10:11 ]

Ctrl4Dkn: ESP32 (Floor) Heat Controller With Daikin (Heatpump) Support - https://github.com/arnova/ctrl4dkn


  • Icelus
  • Registratie: Januari 2004
  • Niet online
DOS/Windows
code:
1
system("cls");


Unix
code:
1
system("clear");

Developer Accused Of Unreadable Code Refuses To Comment


  • PieterJ
  • Registratie: Juli 2000
  • Laatst online: 12-02 16:35
master_artech schreef op donderdag 12 oktober 2006 @ 10:10:
Dit heb ik geprobeerd maar dat werkt dus niet helaas :-S Ik krijg "←[H←[2J" op het beeld maar dus geen leeg scherm :-S Doe ik misschien iets fout?
Volgens mij (maar het is echt al heel lang geleden :) ), moest je onder DOS de ansi driver laden in je config.sys (device =c:\dos\ansi.sys) als je ansi wilde gebruiken. Deed je dat niet dan kreeg je een scherm vol met dat soort tekens. Ik zag net dat ansi.sys nog steeds bestaat in windows XP.
(misschien ook wel in W2000?). Voeg de regel device =%windir%\system32\ansi.sys aan config.nt toe en probeer het dan nog eens.

  • arnova
  • Registratie: Augustus 2001
  • Laatst online: 05:44

arnova

weet veel, maar niet alles

Topicstarter
Icelus schreef op donderdag 12 oktober 2006 @ 10:37:
DOS/Windows
code:
1
system("cls");


Unix
code:
1
system("clear");
Het liefst zou ik ook nog iets van een ala delline(); functie kunnen gebruiken in GCC, maar deze is ook wederom niet aanwezig. Iemand hier nog een idee voor?

Ctrl4Dkn: ESP32 (Floor) Heat Controller With Daikin (Heatpump) Support - https://github.com/arnova/ctrl4dkn


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Is er geen win32-port van (n)curses? Zelf met escapechars en system() (:X) gaan werken lijkt me een heilloze weg.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 08:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

master_artech schreef op donderdag 12 oktober 2006 @ 10:10:
[...]


Ja, maar niet in de conio.h van GCC, dat is namelijk een afgeslankte versie van die van Borland.
GCC is een compiler suit, en zegt niets over de standaard library. Zo gebruikte DJGPP ook GCC, en die had wel een conio.h inclusief clrscr().

Maar wat is er nou mis met elevator's suggestie?
Using the console: Clearing the screen

[ Voor 4% gewijzigd door .oisyn op 12-10-2006 12:13 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

master_artech schreef op donderdag 12 oktober 2006 @ 10:58:
[...]


Het liefst zou ik ook nog iets van een ala delline(); functie kunnen gebruiken in GCC, maar deze is ook wederom niet aanwezig. Iemand hier nog een idee voor?
delline ??
kijk eens wat een carriage return is (of "\r")

ASSUME makes an ASS out of U and ME


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

DelLine is volgens mij meer te vergelijken met het gedeeltelijk omhoog scrollen van een gedeelte van het scherm zodat deze de vorige lijn overlapt. Volgens mij kan ScrollConsoleScreenBuffer dat :)

  • arnova
  • Registratie: Augustus 2001
  • Laatst online: 05:44

arnova

weet veel, maar niet alles

Topicstarter
elevator schreef op donderdag 12 oktober 2006 @ 22:48:
DelLine is volgens mij meer te vergelijken met het gedeeltelijk omhoog scrollen van een gedeelte van het scherm zodat deze de vorige lijn overlapt. Volgens mij kan ScrollConsoleScreenBuffer dat :)
Precies. Die bedoel ik! Het is alleen jammer dat je op deze manier geen portable code maakt. Maar daarvoor moet je dan waarschijnlijk toch uitwijken naar ncurses of termpcap....

Ctrl4Dkn: ESP32 (Floor) Heat Controller With Daikin (Heatpump) Support - https://github.com/arnova/ctrl4dkn


Verwijderd

Geen mooie oplossing, maar 't werkt zonder aanpassingen in je configuratie of extra libraries:

C:
1
2
for( unsigned short line = 0; line < 50; line++ )
  printf( "\n" );

[ Voor 5% gewijzigd door Verwijderd op 13-10-2006 12:54 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 08:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

En nou de cursor nog terug naar (1, 1) ;)
Misschien kom je nog weg met een puts('\f'); Een form feed is precies daarvoor bedoeld: nieuwe pagina en weer bovenaan beginnen.

.edit: hier onder windows XP werkt het iig niet.

[ Voor 74% gewijzigd door .oisyn op 13-10-2006 13:00 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

backspaces (ascii 0x08) al eens in een loopie geprobeerd ?

[ Voor 6% gewijzigd door SKiLLa op 13-10-2006 17:11 ]

'Political Correctness is fascism pretending to be good manners.' - George Carlin


  • arnova
  • Registratie: Augustus 2001
  • Laatst online: 05:44

arnova

weet veel, maar niet alles

Topicstarter
SKiLLa schreef op vrijdag 13 oktober 2006 @ 17:10:
backspaces (ascii 0x08) al eens in een loopie geprobeerd ?
Werkt ook niet... Heb je namelijk ANSI support voor nodig, en dat staat en standaard niet aan in Windows en is wederom niet portable...

Ctrl4Dkn: ESP32 (Floor) Heat Controller With Daikin (Heatpump) Support - https://github.com/arnova/ctrl4dkn


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Voor backspaces heb je geen ANSI nodig maar om backspaces te laten "wissen" meot je overschrijven met een spatie - in Pascal zou dat dus iets worden als:
Delphi:
1
Write(#8, #32, #8);
maar of een backspace eenmaal op X=1 aangekomen terug naar x=79 gaat weet ik eigenlijk niet meer :)

Wat je overigens zoekt aan functies komt tot nu toe goed overeen dat in Borland Pascal door de CRT unit geleverd werd, je zou eens voor de grap naar FreePascal kunnen kijken die voor meerdere platformen deze nodige routines geimplementeerd heeft :)

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 16-08-2025

TheLunatic

Ouwe boxen.

elevator schreef op zaterdag 14 oktober 2006 @ 16:21:
Voor backspaces heb je geen ANSI nodig maar om backspaces te laten "wissen" meot je overschrijven met een spatie - in Pascal zou dat dus iets worden als:
Delphi:
1
Write(#8, #32, #8);
Volgens mij schrijf je nu een backspace, vervolgens een spatie, en dan haal je die spatie weer weg met je nieuwe backspace, toch?

Mother, will they like this song?


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

kun je niet met fseek en write werken ?

stdout is uiteindelijk ook maar een file descriptor...

ASSUME makes an ASS out of U and ME


  • arnova
  • Registratie: Augustus 2001
  • Laatst online: 05:44

arnova

weet veel, maar niet alles

Topicstarter
HIGHGuY schreef op zondag 15 oktober 2006 @ 10:58:
kun je niet met fseek en write werken ?

stdout is uiteindelijk ook maar een file descriptor...
Dat is een goeie. Ik ga het eens proberen...

Ctrl4Dkn: ESP32 (Floor) Heat Controller With Daikin (Heatpump) Support - https://github.com/arnova/ctrl4dkn


  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 17-11-2025
Vroeger in dos deed ik volgens mij
code:
1
2
3
4
mov ah,0Fh
int 10h
mov ah,0
int 10h

Deze code vraagt eerst de huidige video mode en zet hem daarna weer.
Als het goed is kan je dat vanuit een met djgpp gecompiled programma ook doen, int 10h heeft namelijk ook een protected mode interface.
Ik heb het net in debug gedaan in een dosbox, het werkt opzich, alleen gaat het scherm wel van 50 naar 25 regels.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


Verwijderd

Verwijderd schreef op vrijdag 13 oktober 2006 @ 12:54:
Geen mooie oplossing, maar 't werkt zonder aanpassingen in je configuratie of extra libraries:

C:
1
2
for( unsigned short line = 0; line < 50; line++ )
  printf( "\n" );
De windows console kan meer dan 49 regels hebben, dus idd geen mooie oplossing...

Verwijderd

master_artech schreef op zondag 15 oktober 2006 @ 12:02:
[...]


Dat is een goeie. Ik ga het eens proberen...
En, heb je het nog geprobeerd? Ik ben zelf ook wel benieuwd eigenlijk.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 08:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik weet wel zeker van niet, de console is geen file die je kunt seeken, net als heel veel andere streams (sockets, pipes, etc.).

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • arnova
  • Registratie: Augustus 2001
  • Laatst online: 05:44

arnova

weet veel, maar niet alles

Topicstarter
.oisyn schreef op dinsdag 17 oktober 2006 @ 22:00:
Ik weet wel zeker van niet, de console is geen file die je kunt seeken, net als heel veel andere streams (sockets, pipes, etc.).
Ik heb het geprobeerd, maar dit werkt inderdaad niet....

Ctrl4Dkn: ESP32 (Floor) Heat Controller With Daikin (Heatpump) Support - https://github.com/arnova/ctrl4dkn

Pagina: 1