1,105,417 Community Members

substitute for conio.h in linux

Member Avatar
saurabh_s
Newbie Poster
1 post since Nov 2004
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

hi

i was compiling a program in linux , the program had conio.h file which is generally used in turbo c in windows. now the program is not compiling and giving errors.

so what is the substitute . as clrscr() cant work without this file.

Member Avatar
ZuK
Light Poster
29 posts since Oct 2004
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

Have a look at the ncurses library
http://www.tldp.org/HOWTO/NCURSES-Programming-HOWTO/
K.

Member Avatar
Narue
Bad Cop
12,139 posts since Sep 2004
Reputation Points: 5,693 [?]
Q&As Helped to Solve: 1,537 [?]
Skill Endorsements: 81 [?]
Team Colleague
 
0
 

Remove clrscr, you probably don't need it.

Member Avatar
ZuK
Light Poster
29 posts since Oct 2004
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
-1
 

@Narue: This is ridiculous.
The Op is asking for a way to port a program from one OS to another and you are telling him to throw away a probably perfectly working program
and start to design from scratch.
If you don't have anything meaningful to say about the question you should leave it altogether. This kind of comments are not helpful at all.
We could argue about the usefulness of clearing the screen in a console application. But there sure are reasons to do it.
K.

Member Avatar
jwenting
duckman
8,359 posts since Nov 2004
Reputation Points: 1,399 [?]
Q&As Helped to Solve: 447 [?]
Skill Endorsements: 35 [?]
Infraction Points: 5
Team Colleague
 
0
 

no, all she says is that clrscr() is in almost all cases it is used used incorrectly and without being needed.

Its SOLE use is to clear the screen in console applications. BUT, console applications should NOT clear the screen, they should instead assume that the screen is not in any way under their control!

There are NO reasons for a console application to clear the screen. If you need total control of the screen you should not be writing a console application in the first place.

Member Avatar
ZuK
Light Poster
29 posts since Oct 2004
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

There are NO reasons for a console application to clear the screen. If you need total control of the screen you should not be writing a console application in the first place.

I guess you are talking about programming in an environment with a GUI. But I am still using lots of programs from times
where no such thing as a GUI was available. In such an environment clrscr() was very useful to provide something that gets close to a GUI.
This thread is about porting not about redesign. :)
K

Member Avatar
Narue
Bad Cop
12,139 posts since Sep 2004
Reputation Points: 5,693 [?]
Q&As Helped to Solve: 1,537 [?]
Skill Endorsements: 81 [?]
Team Colleague
 
0
 

>you are telling him to throw away a probably perfectly working program and start to design from scratch.
Were you using Google Translate to read my post in Danish via Urdu? I suggested removing one line, not throwing away the program and starting over. Try reading for comprehension sometime, it's amazing the things you can learn.

>But there sure are reasons to do it.
Yes, there are. But most of the time when looking at old Turbo C programs, this is how it's used:

#include <conio.h>

void main() /* For added realism */
{
  clrscr(); /* Silly and useless */

  /* Program without clrscr here */
}

Now, until the OP shows us that his use is one of the "valid" ones, I'm going to assume that his use is in the majority of clrscr calls, ie. unnecessary.

>If you don't have anything meaningful to say about the question you should leave it altogether.
All of my posts are meaningful. If you're too narrow-minded to understand what I'm saying, or too stupid to read my posts correctly, that's not my problem.

Member Avatar
ZuK
Light Poster
29 posts since Oct 2004
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
-1
 

You should have said: Only if your program looks like this

#include <conio.h>

void main() /* For added realism */
{
  clrscr(); /* Silly and useless */

  /* Program without clrscr here */
}

throw away the clrscr().
I agree with that.

All of my posts are meaningful. If you're too narrow-minded to understand what I'm saying, or too stupid to read my posts correctly, that's not my problem.

I have checked some of your posts. It seems whenever someone has a different opinion you reply with an insult.
K.

Member Avatar
Narue
Bad Cop
12,139 posts since Sep 2004
Reputation Points: 5,693 [?]
Q&As Helped to Solve: 1,537 [?]
Skill Endorsements: 81 [?]
Team Colleague
 
0
 

>You should have said
I did, though without spelling it out for the slow people such as yourself:

Remove clrscr, you probably don't need it.

>It seems whenever someone has a different opinion you reply with an insult.
Taken out of context (which is something you seem very good at) it probably does seem that way. Pick a post and link to the thread and I'll be happy to explain the lesson/merit of my reply. Provided someone has a reasonable opinion, I'm willing to debate in a civil manner.

Member Avatar
kc0arf
Posting Virtuoso
1,913 posts since Mar 2004
Reputation Points: 53 [?]
Q&As Helped to Solve: 66 [?]
Skill Endorsements: 0 [?]
Team Colleague
 
0
 

Hello,

Narue strikes me as a very experienced programmer, and she also cuts to the chase on program design. I only hope that she dismisses remarks about her character, and uses her volunteer time here to maintain the high level of excellence her experience offers us.

This thread, however, is about the conino.h file, and it's technical uses. It will not turn into a character debate; and if anyone tries, I'll lock and we will all move on. The moderator staff will also torpedo any new threads that deal with character in public.

Christian

Member Avatar
jwenting
duckman
8,359 posts since Nov 2004
Reputation Points: 1,399 [?]
Q&As Helped to Solve: 447 [?]
Skill Endorsements: 35 [?]
Infraction Points: 5
Team Colleague
 
0
 

I guess you are talking about programming in an environment with a GUI. But I am still using lots of programs from times
where no such thing as a GUI was available. In such an environment clrscr() was very useful to provide something that gets close to a GUI.
This thread is about porting not about redesign. :)
K

no, I'm SPECIFICALLY talking about programs in a commandline environment.
There's ways to have a fullscreen application in those too, unless your operating system and hardware are from the mid 1970s or before.

It's about porting but during ports errors in the design should be addressed and the clrscr command is used in error (in fact its very inclusion in compiler libraries could be considered an error on the part of the compiler writers).

NEVER clear the screen in a commandline environment. That screen isn't yours, you're expected to graciously share it with everyone else.

You should in fact not expect any output to ever reach the screen at all. Redirection to file is extremely common, especially in a Unix environment. Redirection to printer is also quite possible.
Clearing the screen in those situations makes no sense as the file or printer cannot be cleared. Therefore using a command to clear the screen doesn't produce predictable results, therefore its use constitutes a bug.

Bugs should not be ported therefore removing the clrcscr is a required step in the porting process.

Member Avatar
ZuK
Light Poster
29 posts since Oct 2004
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

Ok. This is too much.
@kc0arf : would you remove my account.
Bye

Member Avatar
wasted___
Newbie Poster
1 post since Sep 2011
Reputation Points: -4 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
-1
 

may not be a good idea....

but still....
it can behave like clrscr();

use fork(), execve() and wait()

#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;

int main()
{
int pid;
pid = fork();
if (0 == pid)
{
execve("/usr/bin/clear", NULL, NULL);
}
wait(NULL);

....
ur contents...
..
..
}

dont forgot to include <unistd.h> for these system calls...
this pgm, creates a copy of the pgm as a child by fork()
the parent waits for the completion of the child by wait()
meanwhile the child calls "clear" cmd by using execve()

its like you using cls in cmd!!!

Member Avatar
Duoas
Postaholic
2,039 posts since Oct 2007
Reputation Points: 1,022 [?]
Q&As Helped to Solve: 229 [?]
Skill Endorsements: 10 [?]
Featured
 
0
 

Hmm, without knowing anything at all about the OP's original purpose, this thread has become a hate-war over clearing the screen.

It is not uncommon for old DOS programs to assume complete control of the console -- particularly in business environments. Catagorically stating that it is always/never acceptable to do something is beyond anyone's qualifications.

"Porting" from DOS is not something that is usually done for trivial CS 101-type and nicely-behaved streams-type programs. The OP seems interested in correctly porting all the original behaviors of the program... which include taking over the console. I would otherwise agree with Narue's curt remark -- you probably don't need it. Well-behaved streams applications don't muck with the user's TTY.


On *nix systems, you will have to either emit the correct terminal escape sequences yourself or use NCurses. (There are other ways to do this, but they are not Correct -- they either introduce security holes in your application or will break on systems other than your development machine[s].)

To properly emit the "clear" sequence yourself (in *nix), use the following very simple snippet:

#include <unistd.h>
#include <term.h>

void ClearScreen()
  {
  if (!cur_term)
    {
    int result;
    setupterm( NULL, STDOUT_FILENO, &result );
    if (result <= 0) return;
    }

  putp( tigetstr( "clear" ) );
  }

You will have to link with the appropriate library (-lcurses, -lncurses, -lterminfo, or something odd on your system -- SunOS is particularly obnoxious about linking to the correct library).

By "very simple" I mean that it could be made more efficient if you plan to do a lot of direct terminal manipulation, but for most purposes this will do. Notice that it also lacks issues of environment validation. You can use isatty() at the head of your program to verify that you are interacting with a human sitting at a terminal TTY.

Do you also need to mess with colors, position the cursor, and get unbuffered input? (If not, then I suspect that Narue is right, and you should dike out the call to clrscr().)

Hope this helps.

Member Avatar
WaltP
Posting Sage w/ dash of thyme
9,363 posts since May 2006
Reputation Points: 2,905 [?]
Q&As Helped to Solve: 1,151 [?]
Skill Endorsements: 45 [?]
Team Colleague
 
0
 

Hmm, without knowing anything at all about the OP's original purpose, this thread has become a hate-war over clearing the screen.

Yes, and it was thankfully dead for 6 years until a wasted person resurrected it with a worthless suggestion.

Member Avatar
Duoas
Postaholic
2,039 posts since Oct 2007
Reputation Points: 1,022 [?]
Q&As Helped to Solve: 229 [?]
Skill Endorsements: 10 [?]
Featured
 
0
 

:-@
Whoops!

You
This article has been dead for over three months: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article