home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / qb_pds / keyboard / loadky / edit2.bas next >
Encoding:
BASIC Source File  |  1993-12-20  |  4.9 KB  |  215 lines

  1. '********************************EDIT2.BAS*****************************
  2. 'making a small line editor
  3. 'that stuffs the keyboard buffer
  4. '12/20/93
  5. DEFINT A-Z
  6. CONST False = 0, True = NOT False
  7.  
  8. DECLARE SUB ClearKeyBoard ()
  9. DECLARE SUB Buffer (Cmd$)
  10. DECLARE SUB EditLine (a$, exitCode%)
  11. DECLARE FUNCTION KeyCode% ()
  12. DECLARE SUB LocateIt (Row%, text$)
  13. DECLARE SUB ColorIt (Fgd%, Bkgd%)
  14.  
  15. 'Key code numbers
  16. CONST BACKSPACE = 8
  17. CONST DELETE = 21248
  18. CONST ENDKEY = 20224
  19. CONST ENTER = 13
  20. CONST ESCAPE = 27
  21. CONST HOME = 18176
  22. CONST INSERTKEY = 20992
  23. CONST LEFTARROW = 19200
  24. CONST RIGHTARROW = 19712
  25.  
  26. SCREEN 0
  27. WIDTH 80
  28.  
  29. 'COLOR 15, 1
  30. 'CLS
  31. DEF FnCenterit (text$) = 41 - (LEN(text$) \ 2)
  32. text$ = STRING$(14, 32)
  33. CALL EditLine(text$, exitCode%)
  34. 'STOP
  35. CALL ClearKeyBoard
  36. CALL Buffer(text$)
  37. 'PRINT
  38. 'PRINT
  39. 'PRINT
  40. 'PRINT "This is what you typed: "; text$
  41. END
  42.  
  43. 'from QuickBASIC Bible p 721
  44. SUB Buffer (Cmd$)
  45.     Cmd$ = LEFT$(Cmd$, 14) + CHR$(13)
  46.     length% = LEN(Cmd$)
  47.     DEF SEG = &H40
  48.     head% = &H1A
  49.     tail% = &H1C
  50.     start% = &H1E
  51.    
  52.     FOR i = 1 TO length%
  53.         POKE start% + (i - 1) * 2, ASC(MID$(Cmd$, i, 1))
  54.     NEXT
  55.    
  56.     POKE tail%, start% + (i - 1) * 2
  57.     POKE head%, start%
  58.    
  59.     DEF SEG
  60. END SUB
  61.  
  62. SUB ClearKeyBoard
  63.  
  64.     DEF SEG = 0
  65.     Temp& = PEEK(&H41A) + (PEEK(&H41B) * 256&)
  66.     head = Temp& AND &HFFFF&                'Clear keyboard buffer
  67.     POKE &H41C, head AND 255                'by setting head ptr
  68.     POKE &H41D, head \ 256                  'equal to tail ptr.
  69.  
  70. END SUB
  71.  
  72. SUB ColorIt (Fgd%, Bkgd%)
  73. COLOR Fgd%, Bkgd%
  74. END SUB
  75.  
  76. SUB EditLine (a$, exitCode%) STATIC
  77.     
  78. ' Set up some variables
  79. length% = LEN(a$)
  80. ptr% = 0
  81. Insert% = True
  82. Quit% = False
  83. Original$ = a$
  84.      
  85.         
  86.     Work$ = "╓ EDIT: Home End Del Ins <Esc> ╖"
  87.     CALL ColorIt(15, 4)
  88.     CALL LocateIt(10, Work$)
  89.            
  90.     Work2$ = "║                              ║"
  91.     CALL LocateIt(11, Work2$)
  92.  
  93.     Work3$ = "╙ TO END:          {Enter} <─┘ ╜"
  94.     CALL ColorIt(14, 4)
  95.     CALL LocateIt(12, Work3$)
  96.  
  97.     CALL ColorIt(7, 0)
  98.     CALL LocateIt(11, a$)
  99.  
  100. ' Main processing loop
  101. DO
  102.  
  103.     Row% = 11
  104.     Col% = FnCenterit(a$)
  105.     LOCATE Row%, Col%
  106.     PRINT a$
  107.     'STOP
  108.     ' Show appropriate cursor type
  109.     IF Insert% THEN
  110.         LOCATE Row%, Col% + ptr%, 1, 6, 7
  111.      ELSE
  112.         LOCATE Row%, Col% + ptr%, 1, 1, 7
  113.      END IF
  114.          
  115.      ' Get next keystroke
  116.      keyNumber% = KeyCode%
  117.      ' STOP
  118.     
  119.      ' Process the key
  120.      SELECT CASE keyNumber%
  121.              
  122.             CASE INSERTKEY
  123.                 IF Insert% THEN
  124.                     Insert% = False
  125.                 ELSE
  126.                     Insert% = True
  127.                 END IF
  128.          
  129.             CASE BACKSPACE
  130.             'STOP
  131.                 IF ptr% THEN
  132.                     a$ = a$ + " "
  133.                     a$ = LEFT$(a$, ptr% - 1) + MID$(a$, ptr% + 1)
  134.                     ptr% = ptr% - 1
  135.                 END IF
  136.              
  137.             CASE DELETE
  138.                 a$ = a$ + " "
  139.                 a$ = LEFT$(a$, ptr%) + MID$(a$, ptr% + 2)
  140.              
  141.             CASE LEFTARROW
  142.                 IF ptr% THEN
  143.                     ptr% = ptr% - 1
  144.                 END IF
  145.              
  146.             CASE RIGHTARROW
  147.                 IF ptr% < length% - 1 THEN
  148.                     ptr% = ptr% + 1
  149.                 END IF
  150.              
  151.             CASE ENTER
  152.                 exitCode% = 0
  153.                 Quit% = True
  154.              
  155.             CASE HOME
  156.                 ptr% = 0
  157.              
  158.             CASE ENDKEY
  159.                 ptr% = length% - 1
  160.             
  161.             CASE ESCAPE
  162.                 a$ = Original$
  163.                 ptr% = 0
  164.                 Insert% = True
  165.              
  166.             CASE IS > 255
  167.                 SOUND 999, 1
  168.              
  169.             CASE IS < 32
  170.                 SOUND 999, 1
  171.              
  172.             CASE ELSE
  173. 'STOP
  174.               ' Convert key code to character string
  175.                 kee$ = CHR$(keyNumber%)
  176.              
  177.               ' Insert or overstrike
  178.                 IF Insert% THEN
  179.                     a$ = LEFT$(a$, ptr%) + kee$ + MID$(a$, ptr% + 1)
  180.                     a$ = LEFT$(a$, length%)
  181.                 ELSE
  182.                     'the next is very clever
  183.                     IF ptr% < length% THEN
  184.                         MID$(a$, ptr% + 1, 1) = kee$
  185.                     END IF
  186.                 END IF
  187.              
  188.               ' Are we up against the wall?
  189.                 IF ptr% < length% THEN
  190.                     ptr% = ptr% + 1
  191.                 ELSE
  192.                     SOUND 999, 1
  193.                 END IF
  194.              
  195.              
  196.             END SELECT
  197.          
  198. LOOP UNTIL Quit%
  199.      
  200.  
  201. END SUB
  202.  
  203. FUNCTION KeyCode% STATIC
  204.     DO
  205.         k$ = INKEY$
  206.     LOOP UNTIL k$ <> ""
  207.     KeyCode% = CVI(k$ + CHR$(0))
  208. END FUNCTION
  209.  
  210. SUB LocateIt (Row%, text$)
  211. LOCATE Row%, FnCenterit(text$)
  212. PRINT text$;
  213. END SUB
  214.  
  215.