[Back to ENTRY SWAG index]  [Back to Main SWAG index]  [Original]

{
 SJ>     What is the best way to enter extended characters using readln?  I
 SJ> would really like to assign Ctrl-E to ASCII 130.  I tried using ansi
 SJ> and I could get it to work in dos but Pascal seems to override it.
 SJ> Basically what I am tying to do is make it easy for the user to enter
 SJ> foreign letters into a string.  Any suggestions would be appreciated.
 SJ>                                             Stuart Johnston

To achieve this, you have to prog your own ReadLine-procedure, using
the READKEY and KEYPRESSED functions of TP.
You can't get READLN() to do the job for you. You have to do it your
own. :-)

Here is an example of what an Input-Line routine could look like:
It's only a small one. I also have a much more comfortable one, but it
isn't finished yet. :-)))

----------------------------------------------------------------------- }

uses CRT;

function InputLine(column, line, width, color : byte) : string;
{
 Function to read one line of input from the keyboard.
}

var

 i     : byte;
 key   : char;
 coln  : byte;    { column of cursor position }
 entry : byte;    { pointer into inputstring }
 str   : string;  { input string }

begin
 textattr := color;    { set color of whole line }
 gotoxy(column, line);
 for i := column to (column + width - 1) do
  write(#32);
 coln := column;
 entry := 1;
 str[0] := #0;  { empty string }
 while (TRUE) do
 begin
  gotoxy(coln, line);
  key := readkey;
  case key of
   #0 : begin  { Trace Function-keys }
         key := readkey;
        end;
   #8 : begin  { BACKSPACE-key }
         if (entry > 1) then
         begin
          coln := coln - 1;
          gotoxy(coln, line);
          write(#32);
          entry := entry - 1;
         end;
        end;
   #12 : begin        { Ctrl-L : delete entire line }
          gotoxy(column, line);
          for i := column to (column + width - 1) do
           write(#32);
          coln := column;
          entry := 1;
          str[0] := #0;  { empty string }
         end;
   #13 : begin  { RETURN-key }
          if (entry > 1) then  { no RETURN with an empty line! }
          begin
           str[0] := char(entry - 1);  { set string length }
           InputLine := str;
           exit;
          end;
         end;
   #27 : begin        { ESC-key : to abort the entry }
          str := #255;            { set a marker for "ESC-key has been pressed" }
          InputLine := str;
          exit;
         end;
   #32..#254 : begin
                if (entry <= width) then { input field full? }
                begin
                 write(key);
                 str[entry] := key;
                 entry := entry + 1;
                 coln := coln + 1;
                end;
               end;
  end;
 end;
end;


[Back to ENTRY SWAG index]  [Back to Main SWAG index]  [Original]