QuickBasic Program # 1/2

 BBS: Inland Empire Archive
Date: 02-10-93 (22:53)             Number: 399
From: JIM LITTLE                   Refer#: NONE
  To: CASEY PEARSON                 Recvd: NO  
Subj: QuickBasic Program #  1/2      Conf: (2) Quik_Bas
CP>I'm working on my third project in class, but I need you'lls help on
CP>setting it up.  Here is what is asked: "This assignment is designed to
CP>provide you with experience in writing higly interactive programs,
CP>additional experience in using sequential files and understanding of the
CP>relationship between the progrsm in a system.

CP>Problem:  El Si Si Collegio needs a program to assist the data entry

CP>operators in creating the "UPDTRECS.DAT" file.  They need an easy to use
CP>program that will allow the operators to key the information while it
CP>automatically checks for common data entry errors."

CP>The screen would erfo look something like this:

..etc..

CP>Now of course since in structured BASIC, Input, Line input cannot be
CP>used, INKEY$ is the only valid command to be used.  Does anyone have any
CP>ideas?

    I'm don't follow why you can't use Input..  Are you talking about a
different type of BASIC, or just the restrictions imposed on you by your
class?  If the second is true, the following routine may help..  I use
it for all my input.  Admittedly, the code could be tightened up a bit,
but I'm lazy  :)     This sub has the advantage of returning a flag that
tells the calling sub how input was terminated, so the up arrow, down
arrow, etc. can be used to move around the screen.  Also, a text
string longer than the available space may be inputted.  Anyway, here it
is:


SUB CInput (text$, left%, right%, length%, flag%)
'written by Jim Little
'programmed in QBasic
'
'Purpose: Inputs string of text on current line, starting at 'left', and
'  continuing to 'right'.  If allowed length 'length' is longer than
'  space allows, text scrolls to left.
'
'parameters:
'  text$        text inputted from keyboard. If text$ is not empty,
'                then inputted text added to text$
'  left%         left border of input window
'  right%        right border of input window
'  length%       maximum length allowed for text$
'  flag%         set to cEscape, cUpArrow, cDownArrow, cPageUp,
'                 cPageDown, or cOK depending on how input was
'                 terminated. cOk signifies normal termination (with the
'                 Enter key)
'
'constants:
'  c_____        see flag%, above.  I used 0 - 5.
'  k_____        (____ = Insert, Delete, Home, End, PageUp, PageDown,
'                 UpArrow, DownArrow, LeftArrow, RightArrow.) ASCII
'                 values for characters returned by GetStroke for
'                 extended (grey) keys. I used 201 - 210.
'  False         0
'  True          NOT False  (-1)
'
'subs:
'  PrintLine     prints a line of text within two borders (left and
'                 right).
'  GetStroke     returns one character, from the keyboard. If extended
'                 key pressed, returns CHR$(k_____) (See k___, above)

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 STRING                'user's last keystroke
STATIC insert AS INTEGER               'true if insert is on, false otherwise

text = RTRIM$(text)        'trim off all extra spaces
text = text + CHR$(255)    'null character, so cursor can move one past end of
topletter = 1
curletter = 1
finished = False
PrintLine 1, text, left, right

'following in case cursor size changes between calls
IF insert 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
   IF keystroke = CHR$(kInsert) THEN
      insert = NOT insert
      IF insert THEN
         LOCATE , , , 4, 5  'change cursor size to large block
      ELSE
         LOCATE , , , 0, 5    'change cursor size to thin line
      END IF
   ELSEIF keystroke = CHR$(kDelete) AND LEN(text) > 1 AND
curletter <> LEN(text
      MID$(text, curletter) = MID$(text, curletter + 1)
      text = LEFT$(text, LEN(text) - 1)
      PrintLine topletter, text, left, right
   ELSEIF keystroke = CHR$(8) AND curletter > 1 THEN
      text = LEFT$(text, curletter - 2) + RIGHT$(text, LEN(text) - curletter +
      curletter = curletter - 1
      IF curletter < topletter THEN
         topletter = topletter - 1
      END IF
      PrintLine topletter, text, left, right
   ELSEIF keystroke = CHR$(kHome) AND curletter > 1 THEN
      curletter = 1
      IF curletter < topletter THEN
         topletter = 1
      PrintLine topletter, text, left, right
      END IF
   ELSEIF keystroke = CHR$(kEnd) AND curletter < LEN(text) THEN
      curletter = LEN(text)
      IF curletter > topletter + right - left THEN
         topletter = LEN(text) - right + left
      PrintLine topletter, text, left, right
      END IF
   ELSEIF keystroke = CHR$(kLeftArrow) AND curletter > 1 THEN
      curletter = curletter - 1
      IF curletter < topletter THEN
         topletter = topletter - 1
         PrintLine topletter, text, left, right
      END IF
   ELSEIF keystroke = CHR$(kRightArrow) AND curletter < LEN(text) THEN
      curletter = curletter + 1
      IF curletter > topletter + right - left THEN
         topletter = topletter + 1
         PrintLine topletter, text, left, right
      END IF
   ELSEIF keystroke = CHR$(kPageUp) THEN
      flag = cPageUp
      finished = True
   ELSEIF keystroke = CHR$(kPageDown) THEN
      flag = cPageDown
      finished = True
   ELSEIF keystroke = CHR$(kUpArrow) THEN
      flag = cUpArrow
      finished = True
   ELSEIF keystroke = CHR$(kDownArrow) THEN
      flag = cDownArrow
      finished = True
   ELSEIF keystroke = CHR$(27) THEN
      flag = cEscape
      finished = True
   ELSEIF ASC(keystroke) >= 32 AND ASC(keystroke) <= 127
AND insert AND LEN(tex
>>> Continued to next message
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