10 :REM********************* MBASEDIT.BAS ************************
20 :REM*                AL BRENDEL 3/15/81
30 :REM* A DATA ENTRY AND EDITING SUBROUTINE FOR MBASIC 5.X
40 :REM* FOR TERMINALS WITH OR WITHOUT CURSOR CONTROL
50 :REM* ESPECIALLY USEFUL FOR GETTING OR EDITING DATA WITH FIXED
60 :REM* FIELD LENGTHS FOR FORM PRINTING OR RANDOM ACCESS FILES
70 :REM* ( SEE ALSO CBASEDIT.BAS FOR C-BASIC2 VERSION )
80 :REM*
90 :REM*************** TEST OF THE BASEDIT FUNCTION *******************
100 :REM
110 DATA NUMBER 1 = ,12345,10
120 DATA NUMBER 2 = ,1234567890,20
130 DATA NUMBER 3 = ,ABCDEFG,30
140 FOR X=1 TO 3
150 READ MSG$,NAM$,LENGTH
160 GOSUB 1000
170 ANS$(X)=NAM$
180 NEXT
190 PRINT ANS$(1),ANS$(2),ANS$(3)
200 END
1000 :  REM ********** GET DATA AND EDIT FUNCTION *************
1010 :  REM *TYPICAL APPLICATION:
1020 :  REM     MSG$="EDIT..":NAM$="1234":LENGTH=20:GOSUB 1000
1030 :  REM             'PRINTS MSG AND THEN ALLOWS
1040 :  REM             'ENTRY OR MODIFICATION OF NAM$ AND
1050 :  REM             'SHOWS LENGTH OF FIELD
1060 :  REM             'EDITING COMMANDS INCLUDE:
1070 :  REM                     'MOVE CURSER RIGHT..    >
1080 :  REM                     'MOVE CURSER LEFT...    < OR BS(^H)
1090 :  REM                     'DELETE CHARACTER...    DEL
1100 :  REM                     'INSERT CHARACTER...    ^
1110 :  REM                     'RETURN TO PROGRAM...   CR
1120 :          NAM$=NAM$+STRING$(LENGTH-LEN(NAM$),42)
1130 :          PRINT MSG$;": ";NAM$+STRING$(LENGTH,8);
1140 :          FOR NUM = 1 TO LENGTH
1150 :          ANS%=ASC(INPUT$(1)):PRINT CHR$(ANS%);
1160 :          IF ANS%=13 THEN GOTO 1280
1170 :          IF ANS%=8 AND NUM=1 THEN PRINT
                       CHR$(32)+MID$(NAM$,NUM,1)+CHR$(8);
                       :NUM=NUM-1:GOTO 1270
1180 :          IF ANS%=8 THEN NUM=NUM-2 :GOTO 1270
1190 :          IF ANS%=62 AND NUM=LENGTH THEN PRINT CHR$(8)
                      +MID$(NAM$,NUM,1)+CHR$(8)+CHR$(7);
                      :NUM=NUM-1:GOTO 1270
1200 :          IF ANS%=62 THEN PRINT CHR$(8)+ MID$(NAM$,NUM,1);:GOTO 1270
1210 :          IF ANS%=60 AND NUM>1 THEN PRINT CHR$(8)+
                       MID$(NAM$,NUM,1)+CHR$(8)+CHR$(8);
                       :NUM=NUM-2:GOTO 1270
1220 :          IF ANS%=60 AND NUM=1 THEN PRINT CHR$(8)
                      +MID$(NAM$,NUM,1)+CHR$(8);
                      :NUM=NUM-1:GOTO 1270
1230 :          IF ANS%=94 THEN NAM$=LEFT$(NAM$,NUM-1)
                       +" "+MID$(NAM$,NUM,LENGTH-NUM)
                       :PRINT CHR$(8)+RIGHT$(NAM$,LENGTH-NUM+1)
                       +STRING$(LENGTH-NUM+1,8);
                       :NUM=NUM-1:GOTO 1270
1240 :          IF ANS%=127 THEN NAM$=LEFT$(NAM$,NUM-1)
                       +RIGHT$(NAM$,LENGTH-NUM)+"*"
                       :PRINT RIGHT$(NAM$,LENGTH-NUM+1)
                       +STRING$(LENGTH-NUM+1,8);
                       :NUM=NUM-1:GOTO 1270
1250 :          NAM$=LEFT$(NAM$,NUM-1) +CHR$(ANS%)+RIGHT$(NAM$,LENGTH-NUM)
1260 :          IF NUM=LENGTH THEN PRINT CHR$(7)+CHR$(8);:NUM=NUM-1
1270 :          NEXT NUM
1280 :          FOR NUM=1 TO LENGTH
1290 :                  IF MID$(NAM$,NUM,1)="*" THEN NAM$=
                              LEFT$(NAM$,NUM-1)+" "
                              +RIGHT$(NAM$,LENGTH-NUM)
1300 :          NEXT NUM
1310 :          PRINT MSG$;": ";NAM$
1320 :          RETURN
1330 :
FT$(NAM$,NUM-1)+" "
                              +RIGHT$(NAM$,LENGTH-NU