home *** CD-ROM | disk | FTP | other *** search
- 1 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- 2 '' ULTIMATE INKEY (C) COPYRIGHT 1983 NELSON FORD ''
- 3 '' ''
- 4 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- 10 DEFINT A-Z: SCREEN 0,0,0,0: WIDTH 80: FG=7: BF=0: COLOR FG,BG: CLS
- 20 DEF SEG: POKE 106,0
- 30 YES = NOT NO: NO = NOT YES
- 40 ESC = 27: ESC$ = CHR$(ESC): ENTR$ = CHR$(13)
- 50 BACKSPACE$ = CHR$(8)
- 60 LF.CURSOR=75: RT.CURSOR=77: END.KEY=79: INS.KEY=82: DEL.KEY=83: HOME=71: CTRL.END=117
- 70 GOTO 700
- 90 '
- 91 '''''''''''''''''''''''''''inkey routine''''''''''''''''''''''''''''''''
- 92 '
- 100 ' FL is the field length, passed to this routine by the main program
- 110 '
- 120 INS.LENGTH = 0: CURSOR.POS = 1: SOUND 80, .03: MOVE.IT = NO: KY = 0
- 130 CURSOR.START = POS(0)
- 140 CHAR.ACCEPT.CODE = FIX( FL / 100 )
- 150 FL = FL - CHAR.ACCEPT.CODE*100
- 160 IN$ = SPACE$(FL)
- 170 IF PROMPT$ <> "" THEN IN$ = LEFT$( PROMPT$ + SPACE$(FL), FL ): INS.LENGTH = LEN(PROMPT$): PROMPT$=""
- 180 COLOR BG,FG
- 190 LOCATE, CURSOR.START, 1: PRINT IN$;
- 200 LOCATE, CURSOR.START + CURSOR.POS - 1
- 210 N$ = INKEY$: IF N$ = "" THEN 210
- 220 IF LEN(N$) = 1 THEN 350
- 230 ' Lines 240 thru 330 check for special keys. You can omit this section if you do not need this function.
- 240 KY = ASC( RIGHT$(N$,1) ) 'check for edit keys:
- 250 IF KY = LF.CURSOR THEN IF CURSOR.POS > 1 THEN CURSOR.POS = CURSOR.POS - 1: GOTO 200 ELSE 210
- 260 IF KY = DEL.KEY THEN IN$= LEFT$( IN$, CURSOR.POS - 1 ) + RIGHT$( IN$,FL - CURSOR.POS ) + " ": INS.LENGTH = INS.LENGTH - 1: GOTO 190
- 270 IF KY = INS.KEY THEN IF INSERT = NO THEN INSERT = YES: LOCATE,,,4,7: GOTO 190 ELSE INSERT = NO: LOCATE,,,7: GOTO 210
- 280 IF KY = HOME THEN CURSOR.POS = 1: GOTO 200
- 290 IF KY = CTRL.END THEN IN$ = LEFT$(IN$,CURSOR.POS-1) +SPACE$(FL - CURSOR.POS + 1): INS.LENGTH = CURSOR.POS - 1: GOTO 190
- 300 IF KY= RT.CURSOR THEN CURSOR.POS = CURSOR.POS -(CURSOR.POS < INS.LENGTH): GOTO 200
- 310 IF KY = END.KEY THEN CURSOR.POS = INS.LENGTH + 1: GOTO 200
- 320 MOVE.IT = YES
- 330 GOTO 600 'not an edit key, but is a special key: end input.
- 340 '
- 350 IF N$ = ESC$ THEN KY = ESC: IN$=N$: GOTO 320
- 360 IF CURSOR.POS > FL THEN 420
- 370 '
- 380 IF CHAR.ACCEPT.CODE = 0 AND N$ >= " " AND N$ <= "z" THEN 500
- 390 IF CHAR.ACCEPT.CODE = 1 AND N$ >= "0" AND N$ <= "9" THEN 500
- 400 IF CHAR.ACCEPT.CODE = 2 THEN IF N$ >= " " AND N$ < "a" THEN 500 ELSE IF N$ >= "a" AND N$ <= "z" THEN N$ = CHR$(ASC(N$)-32): GOTO 500
- 410 IF CHAR.ACCEPT.CODE = 3 AND INSTR(ACCEPT$, N$) > 0 THEN 500
- 415 '
- 420 IF N$ = ENTR$ THEN 600
- 430 IF N$ <> BACKSPACE$ OR CURSOR.POS = 1 THEN 210
- 440 '
- 450 IN$ = LEFT$(IN$, CURSOR.POS-2) +RIGHT$(IN$, FL -CURSOR.POS+1)+" "
- 460 INS.LENGTH = INS.LENGTH -1
- 470 CURSOR.POS = CURSOR.POS -1
- 480 GOTO 190
- 490 '
- 500 IF NOT INSERT THEN MID$(IN$, CURSOR.POS, 1) = N$: GOTO 550
- 510 IF INS.LENGTH >= FL THEN 210
- 520 IN$ = LEFT$(LEFT$(IN$, CURSOR.POS-1) +N$ +RIGHT$(IN$, FL-CURSOR.POS +1),FL)
- 530 CURSOR.POS = CURSOR.POS + 1: INS.LENGTH = INS.LENGTH + 1
- 540 GOTO 190
- 550 IF CURSOR.POS = 1 THEN IN$ = N$ + SPACE$(FL - 1): PRINT IN$;: LOCATE, CURSOR.START: INS.LENGTH = 1
- 560 PRINT N$;
- 570 CURSOR.POS = CURSOR.POS + 1
- 580 IF CURSOR.POS > INS.LENGTH THEN INS.LENGTH = CURSOR.POS - 1
- 590 GOTO 190
- 600 COLOR FG,BG: LOCATE, CURSOR.START, 0, 7: PRINT IN$;
- 610 IN$ = LEFT$(IN$, INS.LENGTH)
- 615 INSERT = NO
- 620 RETURN
- 670 '
- 680 ' main menu:
- 690 '
- 700 CLS
- 710 LOCATE 4,33: PRINT " MAIN MENU "
- 720 LOCATE 10,33: PRINT "1 Enter Data"
- 730 LOCATE 11,33: PRINT "2 Print Reports"
- 740 LOCATE 12,33: PRINT "3 Save Data"
- 750 LOCATE 14,33: PRINT " SELECT "
- 760 LOCATE 14,33: FL = 301: ACCEPT$ = "123": GOSUB 100
- 770 IF IN$ < "1" OR IN$ > "3" THEN 760
- 780 ON VAL(IN$) GOTO 1000, 2000, 3000
- 990 '
- 1000 'enter data:
- 1010 '
- 1020 CLS: LOCATE 4,35: PRINT "DATA ENTRY": I=1
- 1030 LOCATE 10,20: PRINT "NAME: " NAM$(I)
- 1040 LOCATE 12,20: PRINT "ADDRESS: " ADDR$(I)
- 1050 LOCATE 14,20: PRINT "CITY: " CITY$(I)
- 1060 LOCATE 16,20: PRINT "STATE: " STATE$(I)
- 1070 LOCATE 16,40: PRINT "ZIP: " ZIP$(I)
- 1079 '
- 1080 'name:
- 1090 LOCATE 10,30: FL = 25: PROMPT$ = NAM$(I): GOSUB 100
- 1095 IF IN$ = ESC$ THEN 700
- 1100 IF MOVE.IT THEN IF I > 1 THEN I = I - 1: GOTO 1030
- 1110 NAM$(I) = IN$
- 1120 'addr:
- 1130 LOCATE 12,30: FL = 20: PROMPT$ = ADDR$(I): GOSUB 100
- 1140 IF MOVE.IT THEN 1090
- 1150 ADDR$(I) = IN$
- 1160 'city:
- 1170 LOCATE 14,30: FL = 15: PROMPT$ = CITY$(I): GOSUB 100
- 1180 IF MOVE.IT THEN 1130
- 1190 CITY$(I) = IN$
- 1200 'state:
- 1210 LOCATE 16,30: FL = 202: PROMPT$ = STATE$(I): GOSUB 100
- 1220 IF MOVE.IT THEN 1170
- 1230 STATES$="OK TX AL GA FL AZ SC MI"
- 1240 LOCATE 18,30
- 1250 IF INSTR(STATES$, IN$) = 0 THEN PRINT "INVALID STATE": GOTO 1210 ELSE PRINT SPACE$(13)
- 1260 STATE$(I) = IN$
- 1270 'zip
- 1280 LOCATE 16,46: FL = 105: PROMPT$ = ZIP$(I): GOSUB 100
- 1290 IF MOVE.IT THEN 1210
- 1300 LOCATE 18,46
- 1310 IF VAL(IN$) < 30000 OR VAL(IN$) > 89999! THEN PRINT "INVALID ZIP": GOTO 1280: ELSE PRINT SPACE$(11)
- 1320 ZIP$(I) = IN$
- 1330 'loop:
- 1340 I = I + 1
- 1350 GOTO 1030
- 2000 '
- 2010 GOTO 700
- 3000 '
- 3010 GOTO 700
- INT SPACE$(11)
- 1320 ZIP$(I) = IN$
- 1330 'loop: