home *** CD-ROM | disk | FTP | other *** search
- 10 '┌─────────────────────────────────────────────────────────────────────────┐
- 20 '│ * DOS FUNCTION KEY EDITOR * (for DOS 2.0 and the ANSI.SYS driver only). │
- 30 '├─────────────────────────────────────────────────────────────────────────┤
- 50 '│ This program may be copied--free of charge--for any non-commercial use. │
- 60 '│ For futher info., contact: Vince Bly, PO Box 409, Ft. Belvoir, VA 22060 │
- 70 '└─────────────────────────────────────────────────────────────────────────┘
- 80 '
- 90 RUN 8000
- 100 '───── Read to EOL subroutine ─────
- 500 T="": I=0: WHILE RIGHT$(T,2)<>" " AND I<L
- 510 T=T+CHR$(SCREEN(ROW,COL+I)): I=I+1: WEND
- 530 I=I-2: T=LEFT$(T,I): RETURN
- 540 '
- 999 '─────── SCREEN EDITOR ────────────────────────────────────────────────────
- 1000 DEFINT A-R: DEFSTR S-W: S="": I=0: COL=9: ROW=13
- 1010 BELL$="MB MS L64 O5 T255 C"
- 1090 LOCATE ROW,COL,1,6,7: GOSUB 9000' Go set FN definitions
- 1095 '
- 1400 IF SCREEN (ROW,COL,1)=120 THEN ROW=13
- 1410 LOCATE ROW,COL,1
- 1500 S=INKEY$: IF S="" THEN 1500
- 1510 IF S=>" " THEN 1700' standard char.
- 1515 IF LEN(S)>1 THEN 1900' extended char.
- 1520 IF S=CHR$(8) THEN 1800' backspace
- 1522 IF S=CHR$(9) THEN 2200' right tab
- 1524 IF S=CHR$(13) THEN 2000' return
- 1527 IF S=CHR$(10) THEN PRINT CHR$(27);: GOTO 2000' ctrl. return
- 1530 IF S=CHR$(19) THEN S=CHR$(126): GOTO 1700' trailing space
- 1531 IF S=CHR$(27) THEN 2300' escape
- 1535 IF S<>CHR$(17) THEN 1500 ELSE LOCATE ,,0,6,7: RUN 3000'exit to read screen
- 1590 '
- 1700 PRINT S;: IF FNRB(COL) THEN COL=COL+1: GOTO 1500' [std. char.]
- 1710 PLAY BELL$: COL=FNHM((COL+27)MOD 80): GOTO 1400
- 1800 IF NOT FNLB(COL) THEN 1400 ELSE COL=COL-1' [back-space]
- 1810 LOCATE ,COL: GOTO 1970
- 1900 I= ASC(RIGHT$(S,1))-71: IF I<0 THEN 2100
- 1905 ON I GOTO 1940,1910,1910,1930,1910,1920,1910,1980,1950,1910,1960,1970
- 1910 IF I=0 THEN ROW=7: COL=FNHM(COL): GOTO 1400' [home]
- 1915 IF I=46 THEN PRINT SPC(15-COL+FNHM(COL)): GOTO 1400 ELSE 1500'[ctl]-[end]
- 1920 IF FNRB(COL) THEN COL=COL+1: GOTO 1400' [right]
- 1925 IF COL<60 THEN COL=COL+12: GOTO 1400 ELSE COL=9: GOTO 1400
- 1930 IF FNLB(COL) THEN COL=COL-1: GOTO 1400' [left]
- 1935 IF COL>15 THEN COL=COL-12: GOTO 1400 ELSE COL=78: GOTO 1400
- 1940 IF ROW>7 THEN ROW=ROW-1: GOTO 1400 ELSE ROW=16: GOTO 1400' [up]
- 1950 IF ROW<16 THEN ROW=ROW+1: GOTO 1400 ELSE ROW=7: GOTO 1400' [down]
- 1960 LOCATE ,,0: L=18-COL+FNHM(COL): GOSUB 500: GOTO 2500' [insert]
- 1970 LOCATE ,,0: COL=COL+1: L=18-COL+FNHM(COL): GOSUB 500' [delete]
- 1975 COL=COL-1: PRINT T" ": GOTO 1400
- 1980 LOCATE ,,0: L=18-COL+FNHM(COL): GOSUB 500' [end]
- 1985 IF I=L-2 THEN 1400 ELSE COL=COL+I: GOTO 1400
- 2000 COL=FNHM(COL): GOTO 1950' [enter]
- 2100 IF (I<>-56) OR NOT FNLB(COL) THEN 1500' [tab left]
- 2110 COL=FNHM(COL): GOTO 1400
- 2200 COL=FNHM((COL+27)MOD 80): GOTO 1400' [tab right]
- 2300 COL=FNHM(COL): LOCATE ,COL,0: PRINT SPC(16);: GOTO 1400' [escape]
- 2310 '
- 2499 '────── Insert Mode ─────────────
- 2500 L=L-3: IF I<L THEN T=T+STRING$(L-I,32)
- 2510 LOCATE ,COL,1,0,6
- 2520 S=INKEY$: IF S="" THEN 2520
- 2530 IF S<" " THEN 2580 ELSE IF NOT FNRB(COL) THEN 2520
- 2540 LOCATE,,0: PRINT S;LEFT$(T,L);: L=L-1: COL=COL+1: GOTO 2510
- 2580 IF S=CHR$(8) THEN IF FNLB(COL) THEN L=L+1: COL=COL-1: LOCATE ,COL,0: PRINT LEFT$(T,L+1);: GOTO 2510 ELSE 2510
- 2590 LOCATE ,,,6,7: IF S=CHR$(0)+"R" THEN 1400 ELSE 1524
- 2595 '
- 2999 '────── READ SCREEN ROUTINE ──────────────────────────────────────────────
- 3000 DEFINT A-R: DEFSTR S-W: T="": I=0: DIM S(23)
- 3020 LOCATE 18,1: COLOR 16,7:PRINT " COMPILING ";
- 3025 COLOR 15,0: PRINT SPC(60): COLOR 0,15: B=0: C=0: L=18
- 3029 FOR COL=9 TO 63 STEP 27
- 3030 FOR ROW=7+(6 AND (COL=9)) TO 16
- 3040 LOCATE ROW,COL: GOSUB 500
- 3043 IF RIGHT$(T,1)=CHR$(126) THEN MID$(T,I,1)=" "
- 3048 B=B+I+(3 AND (I>0)): IF B>192 THEN 3095
- 3050 S(C)=T: PRINT T: LOCATE 18,12: PRINT B
- 3060 C=C+1: NEXT
- 3065 NEXT
- 3070 LOCATE 18,1,1: COLOR 15,0: PRINT SPC(79);: GOTO 5000
- 3090 '
- 3095 LOCATE 18,1: PRINT " COMPILED ";: LOCATE ,16: COLOR 16,7: PRINT " ««";
- 3097 COLOR 0,15: LOCATE ,19: PRINT " ANSI Buffer Full ": COLOR 15,0: GOTO 5000
- 3109 '
- 3110 '────── SAVE FILE TO DISK ROUTINE ────────────────────────────────────────
- 3111 LOCATE 19,1:PRINT: LOCATE 21,46: COLOR 31,0: PRINT "[1]": COLOR 15,0: GOSUB 9100: LOCATE 19,2: COLOR 15,0
- 3112 LINE INPUT "Please enter filename (.KEY will be used as the extension): ";N$
- 3113 GOSUB 9200: IF INSTR(N$,"+") THEN LOCATE 22,2: PRINT "Saving aborted";: GOTO 5035
- 3114 IF INSTR(N$,"^") THEN 7510 ELSE IF N$="" THEN 5035
- 3115 I=INSTR(N$,"."): IF I THEN N$=LEFT$(N$,I)+"KEY" ELSE N$=N$+".KEY"
- 3118 OPEN "O",#1,N$: LOCATE 18,1: COLOR 16,7: PRINT " ** SAVING ** ";
- 3120 PRINT #1, "INSTALLING "N$
- 3125 FOR I=0 TO 23
- 3130 T=S(I): L=LEN(T): C$="p"
- 3140 IF L=0 THEN 3180
- 3150 IF RIGHT$(T,1)=CHR$(27) THEN T=LEFT$(T,L-1): C$=";13p"
- 3153 IF T="^C" THEN T=" ": C$=";3p"
- 3155 PRINT #1,CHR$(27)"[0;";
- 3160 J=65+I+(15 AND (I>3)): IF J<100 THEN F$="##" ELSE F$="###"
- 3165 PRINT #1,USING F$;J;
- 3170 PRINT #1,";"CHR$(34)T;CHR$(34)C$
- 3180 NEXT
- 3280 PRINT #1, "DONE"
- 3290 CLOSE: LOCATE 18,1: COLOR 0,15: PRINT " ** SAVED "N$" ** "
- 3300 COLOR 15,0: GOTO 5000
- 3399 '
- 3400 '─────────── UNCOMPILE ROUTINE ───────────────────────────────────────────
- 3410 LOCATE 18,1: COLOR 15,0: PRINT SPC(50)CHR$(13)
- 3420 T=CHR$(29)+CHR$(126): PRINT SPC(60)
- 3425 COLOR 15,0: LOCATE ,,0: C=-6
- 3430 FOR COL=9 TO 63 STEP 27
- 3440 FOR ROW=7 TO 16
- 3445 IF COL=9 AND ROW<13 THEN 3490' skip DOS keys
- 3450 LOCATE ROW,COL: PRINT S(C);
- 3460 IF RIGHT$(S(C),1)=" " THEN PRINT T;
- 3470 I=LEN(S(C)): IF I THEN PRINT SPC(16-I);
- 3490 C=C+1: NEXT:NEXT
- 3500 GOSUB 6520: RUN 1000
- 3510 '
- 5000 '──────REQUEST USER OPTION ───────────────────────────────────────────────
- 5005 COLOR 15: LOCATE 19,1: PRINT SPC(79);SPC(79);: LOCATE 21,1,0
- 5010 PRINT SPC(45)"[1]... Save this key file to disk."
- 5020 PRINT SPC(45)"[2]... Load a key file from disk."
- 5022 PRINT SPC(45)"[3]... Print a hardcopy of keyset."
- 5025 PRINT SPC(45)"[4]... Go to the edit mode.";: LOCATE 25,1
- 5030 PRINT SPC(45)"[5]... Quit this program.";
- 5035 LOCATE 19,1: PRINT SPC(79);: LOCATE 19,2,1
- 5040 LINE INPUT"Please choose an option from the list below [1-5]: ",N$
- 5045 LOCATE 22,1: PRINT SPC(40);
- 5050 I=VAL(N$): IF (I<1) OR (I>5) THEN 5035
- 5060 IF I=5 THEN 9300 ELSE IF I=4 THEN 3410
- 5070 IF I=3 THEN 8500 ELSE IF I=2 THEN 7010 ELSE 3110
- 5080 '
- 5999 '──────────────── PRINT EDIT SCREEN ──────────────────────────────────────
- 6000 DEFINT A-R: DEFSTR S-W: I=0: DIM S(23)
- 6010 'SCREEN 0,0,0: WIDTH 80: COLOR 15,0,8
- 6020 CLS: LOCATE 1,,0
- 6030 '
- 6035 MDL$="│ F## = ": L$=STRING$(2,9)
- 6037 MDL$=MDL$+L$+" │ "+MDL$+L$+" │ "+MDL$+L$+" │"
- 6040 L$=STRING$(24,196)
- 6050 TOP$="├"+L$+"┤"
- 6070 BOT$="└"+L$+"┘"
- 6080 '
- 6090 LOCATE ,15: PRINT "╔═════════════════════════════════════════════════╗"
- 6110 LOCATE ,15: PRINT "║ *** DOS FUNCTION KEY EDITOR - V. Bly - 4/83 *** ║"
- 6115 LOCATE ,15: PRINT "╚═════════════════════════════════════════════════╝"
- 6130 LOCATE ,2: PRINT "┌───── Standard Keys ────┐ ┌───── Shifted Keys ─────┐ ┌───── Control Keys ─────┐";
- 6140 PRINT TOP$" "TOP$" "TOP$;
- 6150 FOR I=1 TO 10
- 6160 LOCATE 6+I: PRINT USING MDL$;I;I;I
- 6180 NEXT
- 6190 LOCATE 17,1: PRINT BOT$" "BOT$" "BOT$: COLOR 8,7
- 6191 LOCATE 7,8: PRINT " copy one char ";
- 6192 LOCATE 8,8: PRINT " copy to char ";
- 6193 LOCATE 9,8: PRINT " copy from char ";
- 6195 LOCATE 10,8: PRINT " skip to char "
- 6196 LOCATE 11,8: PRINT " accept template "
- 6197 LOCATE 12,8: PRINT " control-Z "
- 6300 COLOR 15,0: GOTO 5000: GOSUB 6520: RUN 1000
- 6310 '
- 6520 COLOR 15,0: LOCATE 18,1' ───── Print bottom of edit screen ─────
- 6530 PRINT " DO NOT PRESS <Ctrl>[Break], ";: COLOR 7: PRINT "use ";: COLOR 15: PRINT "<Ctrl>[Q] ";: COLOR 7: PRINT "to go to the menu."
- 6532 LOCATE 19: PRINT SPC(70)
- 6535 COLOR 15,0: LOCATE 20,1
- 6540 PRINT " ["CHR$(24)"], ["CHR$(25)"], ["CHR$(26)"], ["CHR$(27)"], [Ins], [Del], and [Backsp]
- 6550 PRINT " [Rgt.tab] [Lft.tab] "
- 6560 PRINT " [End] <Ctrl>[End] "
- 6570 PRINT " [Esc] [Home] "
- 6580 PRINT " <Ctrl>[Enter] <Ctrl>[S] ";
- 6610 COLOR 7,0: LOCATE 20,1
- 6630 LOCATE ,49: PRINT "work the same as BASIC editor."
- 6650 LOCATE ,12:PRINT "goes to next panel.";: LOCATE ,50: PRINT "goes to start of line. "
- 6660 LOCATE ,8: PRINT "goes to end of line.";: LOCATE ,52: PRINT "erases to end of line. "
- 6670 LOCATE ,7: PRINT " erases all of line.";: LOCATE ,47: PRINT "goes to top-left of panel. "
- 6680 LOCATE ,16: PRINT "adds trailing C/R.";: LOCATE ,50: PRINT "adds trailing space. ";
- 6690 COLOR 15,0: LOCATE 25,45: PRINT SPC(30);: RETURN
- 7000 '────── LOAD A KEY FILE FROM DISK ────────────────────────────────────────
- 7010 LOCATE 22,46: COLOR 31,0: PRINT "[2]"
- 7015 COLOR 15,0: A$=CHR$(27)+"[0;"
- 7016 GOSUB 9100: LOCATE 19,1
- 7017 PRINT SPC(79): LOCATE 19,1: PRINT: LOCATE 19,2
- 7020 INPUT "Please enter filename (.KEY will be used as the extension): ",N$
- 7025 GOSUB 9200
- 7028 IF INSTR(N$,"+") THEN LOCATE 22,2: PRINT "Loading aborted.";: GOTO 5035
- 7029 IF INSTR(N$,"^") THEN 7510
- 7030 I=INSTR(N$,"."): IF I THEN N$=LEFT$(N$,I)+"KEY" ELSE N$=N$+".KEY"
- 7040 ON ERROR GOTO 7400: OPEN "I",#1,N$
- 7045 LOCATE 18,1: COLOR 16,7: PRINT " ** LOADING ** ";: COLOR 15,0
- 7050 WHILE 1=1
- 7060 LINE INPUT #1, T ' get a line of text from disk file
- 7070 IF LEFT$(T,4)<> A$ THEN 7060
- 7080 I=VAL(MID$(T,5,3))-65: I=I-(15 AND (I>3))
- 7090 B=INSTR(6,T,";")+2
- 7095 C=INSTR(B,T,CHR$(34))
- 7097 IF MID$(T,C+2,1)="3" THEN S(I)="^C": GOTO 7200
- 7100 IF MID$(T,C-1,1)=" " THEN MID$(T,C-1,1)=CHR$(126)
- 7110 S(I)=MID$(T,B,C-B)+STRING$(-(LEN(T)>(C+1)),27)
- 7200 WEND
- 7400 CLOSE
- 7410 IF ERL=7060 THEN RESUME 3410' normal exit, read past EOF.
- 7420 IF ERL<>7040 THEN ON ERROR GOTO 0' unknown error, go give message.
- 7430 LOCATE 22,2: PRINT "Can't find the file: "N$;' file not found.
- 7440 LOCATE ,46: PRINT "[2]";: RESUME 5035
- 7450 '
- 7500 '────── PRINT DIRECTORY ON PAGE 1 ───────────────
- 7510 SCREEN ,,1,1: CLS: LOCATE 3
- 7520 PRINT " Directory of .KEY files: "CHR$(10): FILES "*.KEY"
- 7530 PRINT " Press any key to return to program."
- 7540 WHILE INKEY$="": WEND
- 7550 SCREEN ,,0,0: GOTO 5035
- 7560 '
- 8000 KEY OFF'────── PRINT INITIAL INSTRUCTION PAGE ────────────────────────────
- 8005 SCREEN 0,0,0: WIDTH 80: COLOR 15,0,8: CLS: LOCATE ,,0
- 8010 PRINT " ── not for sale ── ╔═══════════════════════════════╗ Vince Bly, P.O Box 409";
- 8020 LOCATE 2,23: PRINT "║ ** DOS FUNCTION KEY EDITOR ** ║ Ft. Belvoir, VA 22060"
- 8030 LOCATE 3,23: PRINT "╚═══════════════════════════════╝ "
- 8060 LOCATE 3,1: PRINT " PROGRAM FUNCTION:
- 8070 PRINT " This program helps PC-DOS 2.0 users to easily define 24 additional"
- 8080 PRINT " function keys for use in DOS and application programs such as EDLIN and"
- 8090 PRINT " the Macro Assembler. They will have no effect in BASIC. The program"
- 8100 PRINT " uses the ANSI.SYS keyboard driver included with your DOS 2.0. Before"
- 8110 PRINT " you can use this editor, you will have to install the ANSI driver."
- 8130 PRINT "
- 8140 PRINT " INSTALLING THE ANSI DRIVER:
- 8150 PRINT " For once, the instructions in the DOS manual are clear! Follow them
- 8160 PRINT " exactly. After you have created the CONFIG.SYS file, you must turn your"
- 8170 PRINT " system off & back on to activate the driver. Note: the ANSI key defin-"
- 8180 PRINT " ition buffer is limited to 192 bytes, including 3 over-head bytes per key."
- 8190 PRINT "
- 8200 PRINT " USING THE DOS KEY EDITOR:
- 8220 PRINT " Because of the limited buffer, this editor is designed to work with";
- 8240 PRINT " 24 keys: the 4 standard function keys not pre-defined by DOS [F7-F10],"
- 8250 PRINT " the 10 shifted function keys, and the 10 control function keys."
- 8340 PRINT " "
- 8350 PRINT " USING THE KEY FILES:
- 8360 PRINT " The files created by the editor are saved with the extension .KEY."
- 8370 PRINT " To activate your key definitions, use the DOS TYPE command; for example:"
- 8380 PRINT " TYPE SAMP1.KEY. CAUTION, don't redefine them again without rebooting 1st";
- 8390 LOCATE 25,1: PRINT " (the ANSI buffer again). More info @ line 9999.";: LOCATE 25,54: COLOR 16,7: PRINT " PRESS ANY KEY TO START ";
- 8395 COLOR 15,0
- 8400 WHILE INKEY$="": WEND: RUN 6000
- 8410 '
- 8499 '────── SEND HARDCOPY TO PRINTER ─────────────────────────────────────────
- 8500 LOCATE 23,46: COLOR 31,0: PRINT "[3]";
- 8510 LOCATE 19,1: PRINT SPC(79);: LOCATE 19,2: COLOR 15
- 8520 LINE INPUT "Enter an optional title (32 characters max.): ",N$
- 8530 N$=LEFT$(N$,32): I=LEN(N$)
- 8540 LPRINT TAB((80-I)\2)N$CHR$(13)
- 8545 FOR I=0 TO 23: IF RIGHT$(S(I),1)=CHR$(27) THEN MID$(S(I),LEN(S(I)),1)="{"
- 8547 NEXT
- 8550 LPRINT "-------- Standard ------ -------- Shifted ------- -------- Control --------"
- 8560 S="F#: \ \ F#: \ \| F#: \ \ F#: \ \| F#: \ \ F#: \ \"
- 8570 LPRINT USING S;1,"copy chr",2,"copy to",1,S(4),2,S(5),1,S(14),2,S(15)
- 8575 LPRINT USING S;3,"copy frm",4,"skip to",3,S(6),4,S(7),3,S(16),4,S(17)
- 8580 LPRINT USING S;5,"template",6,"Ctrl-Z",5,S(8),6,S(9),5,S(18),6,S(19)
- 8585 LPRINT USING S;7,S(0),8,S(1),7,S(10),8,S(11),7,S(20),8,S(21)
- 8590 LPRINT USING S;9,S(2),0,S(3),9,S(12),0,S(13),9,S(22),0,S(23)
- 8595 LPRINT STRING$(3,13)
- 8596 FOR I=0 TO 23: IF RIGHT$(S(I),1)="{" THEN MID$(S(I),LEN(S(I)),1)=CHR$(27)
- 8598 NEXT
- 8600 LOCATE 23,46: COLOR 15,0: PRINT "[3]";
- 8610 GOTO 5035
- 9000 DEF FNRB(COL)=(COL<>24)AND(COL<>51)AND(COL<>78)' true if not right boundry
- 9010 DEF FNLB(COL)=(COL<>9)AND(COL<>36)AND(COL<>63)' true if not left boundry
- 9020 DEF FNHM(COL)=9+27*INT((COL-9)/27)' = left boundry column #
- 9030 RETURN
- 9100 LOCATE 21,2: PRINT CHR$(26);" Include "CHR$(34)"+"CHR$(34)" in filename to"
- 9110 LOCATE 22,4: PRINT "abort saving or loading.";
- 9120 LOCATE 23,2: PRINT CHR$(26);" Or, include "CHR$(34)"^"CHR$(34)" to see"
- 9130 LOCATE 24,4: PRINT "directory of key files.";
- 9140 RETURN
- 9200 LOCATE 21,1: PRINT SPC(45): LOCATE 22,1: PRINT SPC(45);
- 9205 LOCATE 23,1: PRINT SPC(45): LOCATE 24,1: PRINT SPC(45);
- 9210 LOCATE 21,46: PRINT "[1]";: LOCATE 22,46: PRINT "[2]";
- 9220 RETURN
- 9300 FOR I=21 TO 25: LOCATE I,45: PRINT SPC(35);: NEXT
- 9310 LOCATE 19,1: PRINT "GOTO 5000' to re-enter the program.";
- 9320 PRINT SPC(30): GOTO 10290
- 9999 ' ────── More information follows:
- 10000 '
- 10020 ' CONDITIONS OF (NON)SALE:
- 10030 ' This program is not for sale. However, feel free to copy it
- 10040 ' or give it to a friend. If you have any problems or suggestions,
- 10050 ' drop me a line at the address shown at the start of the program.
- 10060 '
- 10070 ' ADDITIONAL INFO. ON ANSI.SYS:
- 10080 ' The present version of the ANSI.SYS driver appears to have a
- 10090 ' key definition buffer limited to 192 bytes. Also, if--after you
- 10100 ' have installed a set of key definitions--you try to re-define
- 10110 ' them by installing another set, you may overflow the buffer, even
- 10120 ' though you are re-defining the same keys. Therefore, always re-
- 10130 ' boot before installing a new set of key definitions.
- 10140 ' Unfortunately, the presence of the ANSI.SYS driver disables key-
- 10150 ' trapping of the "shifted" keys added in the 2.0 version of BASIC.
- 10160 ' This is why this program doesn't trap <Ctrl>[Break].
- 10170 '
- 10180 ' MORE INFO. ON THIS EDITOR:
- 10190 ' The editor works much like the BASIC screen editor. The actions
- 10200 ' of the various editing keys are shown at the bottom of the screen
- 10210 ' when you are in the edit mode. You can type in any string of up
- 10220 ' to 16 characters for any key; however, you will need to average
- 10230 ' 5 characters per key if you want to use all 24 keys and stay with-
- 10240 ' in the buffer limit. The editor will not let you overflow the
- 10250 ' buffer. Also, the editor accepts one special sequence: if you
- 10260 ' enter "^C" as the 1st and only two symbols for a key definition,
- 10270 ' the editor will interpret this as control-C, allowing you to de-
- 10280 ' fine a one-stroke "break" key.
- 10290 '