(2/4) Input routine

 BBS: Inland Empire Archive
Date: 06-14-93 (01:24)             Number: 328
From: JIM LITTLE                   Refer#: NONE
  To: ERIC LOW                      Recvd: NO  
Subj: (2/4) Input routine            Conf: (2) Quik_Bas
'>>> Start of page 2.

   CASE cNull
      PRINT "null.  (Wait.. that isn't possible!)"
END SELECT

SUB cInput (text AS STRING, left AS INTEGER, right AS INTEGER,_
 length AS INTEGER, flag AS INTEGER)
'Controlled input of text.  Inputs string of text on current line, starting at
' left and continuing to right.  If length is longer than space allows, text
' scrolls to left.
'Flag is set to Cescape, CupArrow, CdownArrow, CpageUp,
CpageDown, or Cok ' depending on what
' key the user used to terminate input.  Cok signifies
normal (return) ' termination.

DIM topletter AS INTEGER               'letter at left of window
DIM curletter AS INTEGER               'letter at cursor position
DIM finished AS INTEGER                'true if user finished
' typing line
DIM keystroke AS INTEGER               'user's last keystroke
DIM tabsp AS INTEGER                   'number of spaces to tab
' when Tab pressed
STATIC notinsert AS INTEGER            'false if insert is on,
' true otherwise

text = RTRIM$(text)        'trim off all extra spaces
topletter = 1
curletter = 1
finished = False
Printline 1, text, left, right

'following in case cursor size changes between calls
IF NOT notinsert THEN
   LOCATE , , , 4, 5  'change cursor size to large block
ELSE
   LOCATE , , , 0, 5    'change cursor size to thin line
END IF
DO
   LOCATE , left + curletter - topletter, 1
   GetStroke keystroke
   LOCATE , , 0
   SELECT CASE keystroke
   CASE kInsert
      notinsert = NOT notinsert
      IF NOT notinsert THEN
         LOCATE , , , 4, 5  'change cursor size to thin line
      ELSE
         LOCATE , , , 0, 5    'change cursor size to large block
      END IF
   CASE kDelete
      IF LEN(text) >= 1 AND curletter <> LEN(text) + 1 THEN
         MID$(text, curletter) = MID$(text, curletter + 1)
         text = LEFT$(text, LEN(text) - 1)
         Printline topletter, text, left, right
      END IF
   CASE kBackspace
      IF curletter > 1 THEN
         text = LEFT$(text, curletter - 2) + RIGHT$(text,_
 LEN(text) - curletter + 1)
         curletter = curletter - 1
         IF curletter < topletter THEN
            topletter = topletter - 1
         END IF
         Printline topletter, text, left, right
      END IF
   CASE kHome
      IF curletter > 1 THEN
         curletter = 1
         IF curletter < topletter THEN
            topletter = 1
         Printline topletter, text, left, right
         END IF
      END IF
   CASE kEnd
      IF curletter < LEN(text) + 1 THEN
         curletter = LEN(text) + 1
         IF curletter > topletter + right - left THEN
            topletter = LEN(text) - right + left + 1
            Printline topletter, text, left, right
         END IF
      END IF
   CASE kLeftArrow
      IF curletter > 1 THEN
         curletter = curletter - 1

'>>> Continued on page 3

---
 * Origin: The Radix Point: Astoria, OR (1:105/330.9)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET