home *** CD-ROM | disk | FTP | other *** search
- 'CANEDIT is an input editor for QuickBASIC
- 'It is loosely based on a program from the magazine PC RESOURCES, October 1987, pg. 61
- 'This version was written by: Bert Christensen
- ' Rosewood Software
- ' 135-10 Livonia Place
- ' Scarborough, Ontario, Canada M1E 4W6
- ' (416) 284-6119, CompuServe 70461,2507
- ' USENET: bert.christensen@canrem.uucp
- ' I also monitor the RIME QuickBasic conference
- '
- ' Copyright 1991
- '
- 'Anyone is granted full permission to use all or part of this program without charge.
- '
- 'Some parts of this program may look ancient with its IF..ENDs and GOTOs.
- 'However, I like to have the ability to cascade through the editor. See
- 'how scan% = 8 becomes scan% = 83 in the backspace command area. The program
- 'could be written using only DO..LOOP, SELECT CASE etc. but I doubt that it
- 'would make the program work better. It would be prettier though.
- '
- 'Any comments would be appreciated.
- DECLARE SUB fulledit (row%(), column%(), numentry%, inperr%(), item$(), itemlen%(), itemflag%())
- COMMON SHARED /colours/ sfg%, sbg%, rfg%, rbg%
- sfg% = 0
- sbg% = 7
- rfg% = 7
- rbg% = 0
- LOCATE 1, 1
- COLOR sfg%, sbg%
- CLS
- COLOR rfg%, rbg%
- LOCATE 1, 20: PRINT "`CANEDIT' Input Editor for QuickBASIC"
- COLOR sfg%, sbg%
- LOCATE 3, 5: PRINT "This field accepts 0 to 9 only"; : LOCATE 5, 5: PRINT "This field accepts all alphanumeric entries";
- LOCATE 7, 5: PRINT "This field accepts `0' to `9',`-', `.' and `space'; only"; : LOCATE 9, 5: PRINT "The Esc key is disabled in this field";
- LOCATE 11, 5: PRINT "Edit pre-existing data"; : LOCATE 13, 5: PRINT "Field length of 1"; : LOCATE 15, 5: PRINT "Field length of 55";
- LOCATE 17, 27: PRINT "Fields can be placed anywhere on screen"
- LOCATE 19, 1: PRINT STRING$(80, "*");
- LOCATE 20, 5: PRINT "Use arrow keys, home, end, PgUp, PgDn, Del, Bksp, Ins to edit";
- LOCATE 22, 5: PRINT "Ctrl F3 to delete line; Ctrl F4 to copy text; Ctrl F5 to paste";
- LOCATE 24, 5: PRINT "Ctrl End & Ctrl Home to move to ends of field; Ctrl F10 to quit editing";
- entryload$ = "Bert Christensen, Rosewood Software"
- numentry% = 8
- REDIM item$(numentry%), itemlen%(numentry%), inperr%(numentry%), row%(numentry%), column%(numentry%), itemflag%(numentry%)
- item$(1) = " ": itemlen%(1) = 5: inperr%(1) = 0: column%(1) = 38: row%(1) = 3: itemflag%(1) = 1
- item$(2) = " ": itemlen%(2) = 25: inperr%(2) = 0: column%(2) = 50: row%(2) = 5: itemflag%(2) = 0
- item$(3) = " ": itemlen%(3) = 10: inperr%(3) = 0: column%(3) = 64: row%(3) = 7: itemflag%(3) = 2
- item$(4) = " ": itemlen%(4) = 6: inperr%(4) = 1: column%(4) = 45: row%(4) = 9: itemflag%(4) = 0 'inperr% = 1
- item$(5) = entryload$: itemlen%(5) = 40: inperr%(5) = 0: column%(5) = 30: row%(5) = 11: itemflag%(5) = 0
- item$(6) = " ": itemlen%(6) = 1: inperr%(6) = 0: column%(6) = 25: row%(6) = 13: itemflag%(6) = 0
- item$(7) = " ": itemlen%(7) = 55: inperr%(7) = 0: column%(7) = 24: row%(7) = 15: itemflag%(7) = 0
- item$(8) = " ": itemlen%(8) = 20: inperr%(8) = 0: column%(8) = 5: row%(8) = 17: itemflag%(8) = 0
- CALL fulledit(row%(), column%(), numentry%, inperr%(), item$(), itemlen%(), itemflag%())
- LOCATE 25, 3: PRINT "Press any key to continue....";
- pause$ = INPUT$(1)
- COLOR sfg%, sbg%
- END
-
- SUB fulledit (row%(), column%(), numentry%, inperr%(), item$(), itemlen%(), itemflag%()) STATIC
- LOCATE , , 0
- insertkey% = 0
- sc1% = 6 'cursor size for default typeover
- sc2% = 7
- FOR menuitem% = 1 TO numentry% 'make sure that existing entries have proper length
- IF LEN(item$(menuitem%)) < itemlen%(menuitem%) THEN
- item$(menuitem%) = item$(menuitem%) + STRING$((itemlen%(menuitem%) - LEN(item$(menuitem))), " ")
- ELSEIF LEN(item$(menuitem%)) > itemlen%(menuitem%) THEN
- item$(menuitem%) = LEFT$(item$(menuitem%), itemlen%(menuitem%))
- END IF
- NEXT menuitem%
- itemnum% = 1
- FOR entry% = 1 TO numentry% 'enter default data and/or spaces in proper places
- colm% = column%(entry%)
- FOR leng% = 1 TO itemlen%(entry%)
- COLOR rfg%, rbg%
- LOCATE row%(entry%), colm%
- defaultstr$ = MID$(item$(entry%), leng%, 1)
- PRINT defaultstr$;
- colm% = colm% + 1
- NEXT leng%
- NEXT entry%
- printcolumn% = column%(itemnum%)
- ed1: COLOR rfg%, rbg%: LOCATE row%(itemnum%), printcolumn%, 1, sc1%, sc2% 'Place the cursor
-
- ed2: keypress$ = "": keypress$ = INKEY$: IF keypress$ = "" THEN GOTO ed2
- scan% = ASC(keypress$)
- ed4:
- IF scan% = 27 THEN
- IF inperr%(itemnum%) = 1 THEN ' to prevent user from escaping from sub
- BEEP
- ELSE
- EXIT SUB
- END IF
- END IF
-
- IF scan% > 31 AND scan% < 127 THEN 'Alphanum chars only
- DO
- SELECT CASE itemflag%(itemnum%)
- CASE 0 'any alpha numeric
- CASE 1 '0 to 9 only
- SELECT CASE scan%
- CASE 32, 48 TO 57
- CASE ELSE
- BEEP
- EXIT DO
- END SELECT
- CASE 2 '0 to 9, -,., space
- SELECT CASE scan%
- CASE 32, 45, 46, 48 TO 57
- CASE ELSE
- BEEP
- EXIT DO
- END SELECT
- END SELECT
-
- IF insertkey% = 0 THEN 'typeover
- MID$(item$(itemnum%), printcolumn% - column%(itemnum%) + 1, 1) = keypress$
- PRINT keypress$;
-
- ELSE
- item$(itemnum%) = LEFT$(LEFT$(item$(itemnum%), printcolumn% - column%(itemnum%)) + CHR$(scan%) + MID$(item$(itemnum%), printcolumn% - column%(itemnum%) + 1, column%(itemnum%)), itemlen%(itemnum%)) 'insert
- LOCATE row%(itemnum%), column%(itemnum%), 1, sc1%, sc2%
- item$(itemnum%) = LEFT$(item$(itemnum%), itemlen%(itemnum%))
- PRINT item$(itemnum%);
- END IF
- scan% = 77 'move right 1 space
- EXIT DO
- LOOP
- END IF
-
- IF scan% = 0 THEN scan% = ASC(RIGHT$(keypress$, 1)) 'Extended character
-
- IF scan% = 8 AND printcolumn% > column%(itemnum%) THEN 'Back Space
- printcolumn% = printcolumn% - 1
- LOCATE row%(itemnum%), printcolumn%, 1, sc1%, sc2%
- scan% = 83
- END IF
-
- IF (scan% = 77 OR scan% = 4) AND printcolumn% < column%(itemnum%) - 1 + itemlen%(itemnum%) THEN 'Right arrow
- printcolumn% = printcolumn% + 1
- GOTO ed1
- END IF
-
- IF (scan% = 75 OR scan% = 19) AND printcolumn% > column%(itemnum%) THEN 'Left arrow
- printcolumn% = printcolumn% - 1
- GOTO ed1
- END IF
-
- IF scan% = 79 THEN 'end for End of text
- IF LEN(RTRIM$(item$(itemnum%))) = 0 THEN
- printcolumn% = column%(itemnum%) + itemlen%(itemnum%) - 1
- ELSE
- printcolumn% = column%(itemnum%) + LEN(RTRIM$(item$(itemnum%)))
- IF printcolumn% > column%(itemnum%) + itemlen%(itemnum%) - 1 THEN printcolumn% = column%(itemnum%) + itemlen%(itemnum%) - 1
- END IF
- GOTO ed1
- END IF
-
- IF scan% = 117 THEN 'ctrl + end to go to end of line
- printcolumn% = column%(itemnum%) + itemlen%(itemnum%) - 1
- GOTO ed1
- END IF
-
- IF scan% = 71 THEN ' Home to beginning of text
- IF LEN(RTRIM$(item$(itemnum%))) = 0 THEN
- printcolumn% = column%(itemnum%)
- ELSE
- printcolumn% = column%(itemnum%) + ((itemlen%(itemnum%)) - (LEN(LTRIM$(item$(itemnum%)))))
- IF printcolumn% < column%(itemnum%) THEN printcolumn% = column%(itemnum%)
- END IF
- GOTO ed1
- END IF
-
- IF scan% = 119 THEN 'ctrl + home to start of line
- printcolumn% = column%(itemnum%)
- GOTO ed1
- END IF
-
- IF (scan% = 80 OR scan% = 24) OR (scan% = 13 AND itemnum% <> numentry%) THEN 'Down Arrow or Enter for next field
-
- itemnum% = itemnum% + 1
- IF itemnum% > numentry% THEN itemnum% = numentry%
- printcolumn% = column%(itemnum%)
- GOTO ed1
- END IF
-
-
- IF scan% = 81 THEN ' pgdn to last line
- itemnum% = numentry%
- printcolumn% = column%(itemnum%)
- GOTO ed1
- END IF
-
- IF scan% = 72 OR scan% = 5 THEN 'Up Arrow
- itemnum% = itemnum% - 1
- IF itemnum% < 1 THEN itemnum% = 1
- printcolumn% = column%(itemnum%)
- GOTO ed1
- END IF
-
- IF scan% = 73 THEN 'pgup to top line
- itemnum% = 1
- printcolumn% = column%(itemnum%)
- GOTO ed1
- END IF
-
- IF scan% = 83 THEN 'Delete
- item$(itemnum%) = LEFT$(item$(itemnum%), printcolumn% - column%(itemnum%)) + MID$(item$(itemnum%), printcolumn% - column%(itemnum%) + 2, itemlen%(itemnum%) - printcolumn% + column%(itemnum%) - 1) + " "
- LOCATE row%(itemnum%), column%(itemnum%), 1, sc1%, sc2%
- PRINT item$(itemnum%);
- GOTO ed1
- END IF
-
-
- IF scan% = 96 THEN ' control f3 to delete line
- item$(itemnum%) = SPACE$(itemlen%(itemnum%))
- printcolumn% = column%(itemnum%)
- LOCATE row%(itemnum%), column%(itemnum%), 1, sc1%, sc2%
- PRINT item$(itemnum%);
- GOTO ed1
- END IF
-
- IF scan% = 97 THEN 'Ctrl F4 to cut
- cutline$ = item$(itemnum%)
- GOTO ed1
- END IF
-
- IF scan% = 98 THEN 'Ctrl F5 to paste
- item$(itemnum%) = cutline$
- LOCATE row%(itemnum%), column%(itemnum%), 1, sc1%, sc2%
- PRINT LEFT$(item$(itemnum%), itemlen%(itemnum%));
- GOTO ed1
- END IF
-
- IF scan% = 82 THEN 'insert toggle
- IF insertkey% = 0 THEN
- insertkey% = 1
- sc1% = 0 'change to block cursor
- sc2% = 7
- ELSE
- insertkey% = 0
- sc1% = 6
- sc2% = 7
- END IF
- GOTO ed1
- END IF
-
- IF scan% = 103 THEN 'ctrl f10 to exit
- scan% = 13
- END IF
-
- ed3:
- IF scan% <> 13 THEN GOTO ed1
-
- FOR entry% = 1 TO numentry% 'get rid of any ascii 0's
- tempstring$ = ""
- FOR leng% = 1 TO LEN(item$(entry%))
- defaultstr$ = MID$(item$(entry%), leng%, 1)
- IF ASC(defaultstr$) = 0 THEN defaultstr$ = " "
- tempstring$ = tempstring$ + defaultstr$
- NEXT leng%
- item$(entry%) = RTRIM$(tempstring$)
- NEXT entry%
- LOCATE , , 0
- END SUB
-
-