• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 241
  • Last Modified:

Reading in Grahpics mode


I am using Borland Pascal (DOS) version 7.0.  I wondered if it is possible to read from user while in graphics mode.  I mean just like Read and Readln in CRT mode.  If possible could anybody send example code.

Also anothe problem I have is I want to read a number from user, if I use integer or word and user presses a character the program will crash.  What is the best way to validate and make sure the program does not crash.

If answering please bear in mind that even though I do VB and C++ stuff, my Pascal knowledge is not that brilliant, therefore a little example code will help.

Thank you folks
  • 2
  • 2
1 Solution
program blahblah;

  s :string;
  code :integer;

  asm                        {these lines set graphics mode}
    mov ax,13h
    int 10h;
  readln(s);                 {this line reads a string}
  val(s,i,code);             {this line converts string s to integer i}
  if code <> 0 then writeln('error')
  else writeln(i);

Readln works in any graphics mode.  The question is whether or not it will write to the screen in the readln statement.  I know for sure that mode 13 will write to the screen, you can try it with other graphics modes too.  In any case, readln will always read what the user enters.

To answer your second question:

Always read anything the user types in into a string.  This will allows the user to enter anything without crashing the program.  After the string is read in, manually convert it to an integer using the Val procedure.  Val takes a string, and returns an integer, and another integer called Code.  You can validate whether or not the user's input was numeric by checking the value in code.  If code is not equal to zero, then there was an error.  (The value in code actually points to the position in the string where there was a nonumeric character).

Look at the code above to see how it works.

gbzhhuAuthor Commented:
Hi Scrapdog

The validation part of your answer works brilliant for me, however, the graphics part, I was using InitGraph statement to initialise graphics and I was using OutTextXy to write something on screen, but did not know what to use in order to read something from user while still in graphics mode.  Now readln works, but I would like to move the cursor to the position I want (somewhere in the screen) and then use readln.

Can you please have a look at the problem and see if you can help.  Is there a the equivalent in graphics mode of the following

gotoxy(12,22); readln(something);

Also I did not understand dthe assembly lines which initialise graphics (first time I have ever seen) what happened to InitGraph;  I mean the only help file I have with my Pascal is crap -- do you know a better one?

thanks again
Let's see your source code.
Unfortunately there is no equevelant to ( gotoxy, readln ) in graphic mode, so that you must make your own gotoxy, readln procedures using readkey and OutTextXy and read any thing as string.

Motaz from Sudan.
I've fucntion that read string in graphic mode called ReadStr, you can find it in my unit which exist in my homepage :


The unit called MGR.pas, you will find many examples use that unit.

You can call that function as :


st : string;
200 : X-cordinate
100 : Y-cordinate
''     : initial value of string
30  : maximum length of string you want to read.

If you want to set a colour for text and background you can use :

Colour(14,1);  { Yellow in Blue }

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now