Home of the original IBM PC emulator for browsers.
[PCjs Machine "ibm5160"]
Waiting for machine "ibm5160" to load....
This disk contains 2 BASIC utilities, a LOTUS 1-2-3 utility, and a DOS
tool. 123PREP allows you to quickly create a properly formatted input
file for 1-2-3's IMPORT feature. AID will reduce or eliminate
repetitive steps which are usually required in the creating, editing,
and using of BASIC programs. SCREENIN provides the BASIC programmer
with a customizable, generalized screen input program which will
reduce duplication of BASIC code from program to program (very useful
if all your programs require some input from the user). W20 is a
mini-DOS manager which presents the user with a menu of standard DOS
file functions (copy, delete, print, etc.) and each file in the
directory (sorted alphabetically).
System Requirements: BASIC; Lotus 1-2-3 or clone.
How to Start: Consult the .DOC and README files for directions
and documentation. To run the BASIC programs, consult the
directions in GETTING STARTED for your configuration. To run a
program with the suffix .COM or .EXE, just type its name, i.e.,
for 123PREP.EXE, type 123PREP <ENTER>.
File Descriptions:
123PREP DOC Documentation for 123PREP.EXE
123PREP EXE Converts a simple text file to a 1-2-3 form
AID DOC Documentation for the AID system
AID BAT Batch file for invoking AID
AID EXE Compiled version of AID.BAS
AID BAS A BASIC programming development aid
SCREENIN BAS Full-screen formatted input subroutine for BASIC
SCREENIN DOC Documentation for SCREENIN.BAS
W20 COM Directory "wash" program-list/copy/view/delete files
READ ME Listing of included files
10 'SAVE"AIDb
11 '**** save"aidadd",a Use to merge with aidbnew. If that works ok, then merge with aidb and aide. Then compile aide. *****
15 ON ERROR GOTO 2950
20 CLS:FALSE = 0:TRUE = NOT FALSE:D$ = "A" :ROW = 20: KEY OFF 'set defaults
30 ' (C) Copyright 1983 Judith R. Epstein
40 ' All Rights Reserved
50 ' ******* AID ******* 4-22-83 ******************************************
60 '==========================================================================
61 DEF SEG = 0: LINEWIDTH = PEEK(&H44A) 'determine screen width
62 DEF SEG: IF LINEWIDTH = 40 THEN TVSET = TRUE ELSE TVSET = FALSE
63 T1$=" AUTOMATIC INDIVIDUALIZED DIRECTORY ":T2$=" by Judith R. Epstein ":T3$=" (C) Copyright 1983 ":T3A$ =" All Rights Reserved "
64 T4$ = " Press any key to continue "
65 GOSUB 2670: GOSUB 2760 'produce box, get opening screen
70 DEF SEG = &H1700 'reserve 4k bytes for subroutine. page C-3,BASIC
80 DATA &h55,&h06,&HB8,&h00,&h17,&h8E,&hC0,&h8B,&hEC,&h8B
90 DATA &h76,&h0C,&h8B,&h04,&h8A,&hE0,&hB0,&h01,&hBB,&h80
100 DATA &h00,&h8B,&h76,&h08,&h8B,&h0C,&h8B,&h76,&h0A,&h8B
110 DATA &h14,&hCD,&h13,&h07,&h5D,&hCA,&h06,&h00
120 RESTORE:FOR I% = 0 TO 37:READ ASM:POKE I%,ASM:NEXT I%
130 SUBNUMVAR%= 0
140 '=========================================================================
160 DIM FKEY$(10)
170 LOCATE ,,0 'turn off cursor
200 VFIL80 = 1: VDIR= 2: V = VDIR 'set which path to take-- I'll decide which program to use after it works
205 KEYWORD1$ = "BAS": KEYWORD2$ = "EXE" :KEYWORD$ = KEYWORD1$ '@@@@@@@@@@@
210 K8%=0:I8%=0:A8%=0:B8%=0:U8%=0:L8%=0: Z8$ = "" 'for quicksort
220 DEF FNUP$(X$) = CHR$( ASC(X$) + 32* ( ASC(X$) > 96 AND ASC(X$) < 123 ) ) 'mask 1st character of x$ to upper case
250 '-------------------------------------------------------------------------
260 ' set up arrays
270 M%= 112 'maximum # files for double sided. @@@@@@@@@@@@@@@@
280 DIM INFO$(112 ,4) ,STACK%(112) '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
290 FOR I%=0 TO M%:FOR J%=0 TO 2:INFO$(I%,J%) = "":NEXT J%:NEXT I% 'initialize JUST USING INFO$ OF 0,1,2 SO DON'T DO 3,4 NOW
300 INFO$(0,0) = " Sorted File Directory Dos 1.1 Drive "
310 INFO$(0,1) = " Name ": INFO$(0,2) = " Ext ": INFO$(0,3) = " Date ": INFO$(0,4) = " Size "
320 ' use INFO$(I%,0) for flags or storing selected items to be sorted
330 ENTRY = 0
340 '==========================================================================
350 ON V GOSUB 870,3440 'START FILES RIGHT AWAY, BUT GIVE OPTION TO RETURN TO MENU
360 'gosub 2670: gosub 2760 produce box, get opening screen not here
370 '-------------------------------------------------------------------------
380 ' ++++++++++++++ MENU +++++++++++++++++
390 CLS: KEY OFF:COLOR 0,7:PRINT T1$;:COLOR 7,0:PRINT :PRINT
400 PRINT T2$:PRINT T3$
410 LOCATE 7:PRINT "1. Description of Program"
420 PRINT "2. Set the Date and Time"
430 PRINT "3. Select Drive [Default A]"
440 PRINT "4. Describe and Set Function Keys"
450 PRINT "5. List BASIC Programs on Diskette"
460 PRINT "6. Exit this Program"
470 LOCATE 20:COLOR 16,7:PRINT " Select the number of your choice ";:COLOR 7,0:PRINT :BEEP
480 N$ = INKEY$:IF N$="" THEN GOTO 480
490 ON INSTR( "123456",N$ ) GOSUB 2230, 560,720,1500,510,540
500 GOTO 390 ' otherwise go to here
510 'subroutine to decide which part to use to get directory
520 ON V GOSUB 870,3440
530 RETURN
540 :SYSTEM:END:RETURN ' subroutine to end the program
550 '==========================================================================
560 ' subroutine to set date and time
570 CLS:COLOR 0,7:PRINT " Date and Time ";:COLOR 7,0:PRINT
571 DATECHECK = FALSE: TIMECHECK = FALSE 'reset flags
580 LOCATE 3:PRINT " DATE"," TIME": PRINT DATE$,TIME$:PRINT:PRINT
590 LOCATE 6:PRINT "Is this today's date ? (Y or N) " :N$= INKEY$:IF N$="" THEN GOTO 590 ELSE N$ = FNUP$(N$)
600 IF N$ = "Y" THEN DA$ = DATE$: GOTO 630
610 IF N$ = "N" THEN GOTO 620 ELSE GOTO 590
620 LOCATE 8:PRINT STRING$(39," "):LOCATE 7:BEEP: PRINT "Enter the date : ( mm-dd-yy )":INPUT DA$
621 VALUE$ = DA$:DATECHECK = TRUE: GOSUB 10110
622 IF VALGOOD THEN GOTO 630 ELSE GOTO 620
630 LOCATE 10 :PRINT "Is this the time ? (Y or N) " :N$= INKEY$:IF N$="" THEN GOTO 630 ELSE N$ = FNUP$(N$)
640 IF N$ = "Y" THEN T$ = TIME$: GOTO 670
650 IF N$ = "N" THEN GOTO 660 ELSE GOTO 630
660 LOCATE 12:PRINT STRING$(39," "):LOCATE 11:BEEP:PRINT "Enter the time : ( hh:mm:ss )":INPUT T$
661 VALUE$ = T$:TIMECHECK = TRUE: GOSUB 10110
662 IF VALGOOD THEN GOTO 670 ELSE GOTO 660
667 '
668 '
670 DATE$ = DA$: TIME$=T$
680 LOCATE 15: COLOR 0,7:PRINT " DATE "," TIME ":LOCATE 17:PRINT " ";DATE$,TIME$;" ":COLOR 7,0:PRINT :PRINT
690 LOCATE 19:PRINT "Is this correct ? (Y or N)":N$ = INKEY$:IF N$=""THEN GOTO 690 ELSE N$ = FNUP$(N$)
700 IF N$ = "Y" THEN RETURN ELSE IF N$ = "N" THEN BEEP:GOTO 570 ELSE 690
710 '==========================================================================
720 ' subroutine to set drive
730 CLS:COLOR 0,7:PRINT " Drive selection ";:COLOR 7,0:PRINT
740 LOCATE 3:PRINT "The selected drive is now ";:COLOR 0,7:PRINT " ";D$;" "
750 COLOR 7,0:LOCATE 5:PRINT "Do you wish to change it? (Y or N)"
760 N$ = INKEY$: IF N$ = "" THEN 760 ELSE N$ = FNUP$(N$)
770 IF N$ = "Y" THEN 780 ELSE IF N$ = "N" THEN RETURN ELSE 760
780 LOCATE 7 :PRINT "Select drive A, B, C or D" :N$=INKEY$:IF N$="" THEN GOTO 780
790 IF N$ = CHR$(13) THEN N$ = "A"
800 N$ = FNUP$(N$): D$ = N$
810 IF D$ <> "A" THEN IF D$ <> "B" THEN IF D$ <> "C" THEN IF D$ <> "D" GOTO 780
820 LOCATE 10:PRINT "The diskette is in drive ";:COLOR 0,7:PRINT " ";D$ ;" "
830 LOCATE 12:COLOR 7,0:PRINT "Is this correct? (Y or N)"
840 N$ = INKEY$: IF N$ = "" THEN 840 ELSE N$ = FNUP$(N$)
850 IF N$ = "Y" THEN RETURN ELSE IF N$ = "N" THEN 730 ELSE 840
860 '==========================================================================
870 ' subroutine to list BASIC programs @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
880 CLS:WIDTH 80
890 PRINT "The BASIC programs on this diskette in drive ";:COLOR 0,7:PRINT " ";D$;" ";:COLOR 7,0:PRINT " are" ' .BAS @@@@@
900 ' PRINT ".EXE BASIC programs on this diskette in drive ";:COLOR 0,7:PRINT " ";D$;" ";:COLOR 7,0:PRINT " are" ' .EXE @@@@@
910 '
920 Q$=D$:Q$ = Q$ + ":*.BAS" ' .BAS @@@@@
930 'Q$=D$:Q$ = Q$ + ":*.EXE" ' .EXE @@@@@
940 '..........................................................................
950 PLACE = 3:LOCATE PLACE:FILES Q$ 'FILE DIRECTORY FOR 80 COLUMNS
960 ROW = PLACE + 19: LOCATE ROW:COLOR 0,7:PRINT " Please stand by ";:COLOR 7,0
970 BEEP:NUM% =0 'Set up for proper number
980 FOR R%= PLACE TO PLACE + 18 'ROW
990 FOR I%= 0 TO 5:FOR J%= 0 TO 3
1000 C%= ( 9 + J%) + I%*13 'EXTENSIONS HERE
1010 LOCATE R%,C%:PRINT CHR$(32) 'BLANK THEM OUT
1020 IF J%=1 THEN NUM%=NUM%+1:NUMPLACE=C% 'Set a number
1030 NEXT J%: GOSUB 1920:IF NONUM THEN I%=5:R%=PLACE +18:GOTO 1050 'If no program listed, no number
1040 GOSUB 1980 'Print a number
1050 NEXT I%:NEXT R%:PRINT:BEEP 'ROOM FOR 112 FILES, done
1060 LOCATE ROW :PRINT STRING$(50," ") :GOSUB 1080:RETURN
1070 '==========================================================================
1080 ' subroutine to decide to run,load,new,or return to menu @@@@@@@@@@@@@@@@@@
1090 LOCATE ROW :PRINT STRING$(39," ")
1100 LOCATE ROW :COLOR 31,0:PRINT "R";:COLOR 7,0:PRINT "un ";
1110 COLOR 31,0:PRINT "L";:COLOR 7,0:PRINT "oad "; '.BAS @@@@@
1120 COLOR 31,0:PRINT "N";:COLOR 7,0:PRINT "ew "; '.BAS @@@@@
1130 ' COLOR 31,0:PRINT "C";:COLOR 7,0:PRINT "ontinue ";'.EXE @@@@@
1140 COLOR 7,0 :PRINT "e";:COLOR 31,0:PRINT "X";:COLOR 7,0:PRINT "it to menu "
1150 N$ = INKEY$: IF N$ = "" THEN GOTO 1150 ELSE N$ = FNUP$(N$)
1160 ON INSTR("RLNX", N$) GOTO 1240,1440,1390,1190 '.BAS @@@@@@@@@@@@@@@@@@
1170 'ON INSTR("RCX", N$) GOTO 1240,1210,1190 '.EXE @@@@@@@@@@@@@@@@@@
1180 GOTO 1100
1190 RETURN
1200 '=========================================================================
1210 'routine to return to system, DOS for .EXE @@@@@@@@@@@@@@@@@@@@@@@@@@@
1220 SYSTEM
1230 '=========================================================================
1240 ' routine to run a program
1250 ON V GOSUB 2050,4940 'get name of program
1260 CLS: COLOR 0,7:PRINT " ";SPEC$;" will be run ":COLOR 7,0
1270 PRINT :PRINT "Press F2 to return to this program"
1271 PRINT "after running selected program"
1280 KEY 2,"run "+ CHR$(34) + "aid" +CHR$(13)
1290 PRINT : PRINT "Which monitor do you want? ":PRINT "Monochrome or Color (M or C)"
1300 N$ = INKEY$: IF N$ = "" THEN 1300 ELSE N$ = FNUP$(N$)
1310 IF N$ = "C" THEN 1320 ELSE IF N$ = "M" THEN 1350 ELSE 1300
1320 KEY OFF:CLS:LOCATE ,,0:DEF SEG = 0:POKE &H410,(PEEK(&H410) AND &HCF) OR &H10 '40 col color graphics screen
1330 DEF SEG:SCREEN 1:SCREEN 0:WIDTH 80:WIDTH 40:LOCATE ,,1,6,7
1340 OUT 980,2:OUT 981,43: GOTO 1370 'move screen
1350 KEY OFF:CLS:LOCATE ,,0:DEF SEG = 0:POKE &H410,(PEEK(&H410) ) OR &H30 '80 col monochrome screen
1360 DEF SEG:SCREEN 1:SCREEN 0:WIDTH 40:WIDTH 80:LOCATE ,,1,12,13
1361 GOTO 1370
1370 RUN SPEC$: END
1380 '=========================================================================
1390 ' routine to create a new program '.BAS @@@@@@@@@@@@@@@@@@@@@@@
1400 GOSUB 560: GOSUB 1500 'set time,date,function keys
1410 CLS:COLOR 0,7:PRINT " The computer is ready for a new program " :COLOR 7,0:PRINT
1420 NEW: END '.BAS @@@@@@@@@@@@@@@@@@@@@@@
1430 '=========================================================================
1440 ' routine to load and modify a program '.BAS @@@@@@@@@@@@@@@@@@@@@@@
1450 ON V GOSUB 2050,4940 'get name of program
1460 GOSUB 560: GOSUB 1500 'set time,date,function keys
1470 CLS: COLOR 0,7:PRINT " " ;SPEC$;" will be loaded ":COLOR 7,0:PRINT
1480 LOAD SPEC$: END '.BAS @@@@@@@@@@@@@@@@@@@@@@
1490 '=========================================================================
1500 ' subroutine to set soft keys
1510 CLS:COLOR 0,7:PRINT " Function keys ":COLOR 7,0:PRINT :PRINT
1520 FOR K%= 1 TO 10: FKEY$(K%) = "F" + MID$( STR$(K%), 2): NEXT K%
1530 K%= 0
1540 ' 6789012345678901234567890123456789
1550 GOSUB 1880:PRINT " Blanks line, then types LIST "
1560 GOSUB 1880:PRINT " Blanks line, then types RUN +<CR>"
1570 GOSUB 1880:PRINT " Blanks line, then types LOAD" ;CHR$(34)
1580 GOSUB 1880:PRINT " Blanks screen, then saves program"
1590 COLOR 0,7 :PRINT STRING$(5," ");
1600 COLOR 7,0 :PRINT " in the remark statement 10"
1610 COLOR 0,7 :PRINT STRING$(5," ");
1620 COLOR 7,0 :PRINT " i.e., 10 'SAVE";CHR$(34);"PROGRAMNAME"
1630 GOSUB 1880:PRINT " Types CONT + <CR>"
1640 GOSUB 1880:PRINT " Types ,";CHR$(34);"LPT1 + <CR>"
1650 GOSUB 1880:PRINT " Types TRON + <CR>""
1660 GOSUB 1880:PRINT " Types TROFF + <CR>"
1670 GOSUB 1880:PRINT " Blanks line, then renumbers"
1680 COLOR 0,7:PRINT STRING$(5," ");
1690 COLOR 7,0:PRINT " the program in memory"
1700 GOSUB 1880:PRINT " Blanks line, then types EDIT":PRINT :PRINT
1710 KEY 1, CHR$(27)+"list " 'blank line,then list
1720 KEY 2, CHR$(27) +"run"+ CHR$(13) 'automatic run
1730 KEY 3, CHR$(27) + "load" + CHR$(34) 'blank line, then load
1740 KE1$ =CHR$(27)+CHR$(31)+CHR$(27)+CHR$(30) 'move cursor [too many characters to use]
1750 KE2$ =CHR$(12)+"edit 10"+CHR$(13)+STRING$(4,8)+CHR$(13) 'save program in remark at 10 [10 'SAVE"programname]
1760 KEY 4, KE2$
1770 KEY 5, "CONT" + CHR$(13) 'as originally
1780 KEY 6, ","+CHR$(34)+"LPT1:"+CHR$(34) + CHR$(13) 'as originally
1790 KEY 7, "TRON" + CHR$(13) 'as originally
1800 KEY 8, "TROFF" + CHR$(13) 'as originally
1810 KEY 9, CHR$(27)+"renum" + CHR$(13) 'automatic renumber
1820 KEY 10,CHR$(27) + "EDIT " 'edit
1821 DEF SEG = 0:POKE &H417,(PEEK (&H417) AND &HDF) 'set cursor keys on for editing
1830 KEY ON:PRINT :COLOR 16,7:PRINT T4$;STRING$(11," ");:COLOR 7,0:PRINT
1840 N$ = INKEY$: IF N$ = "" THEN 1840 ELSE RETURN
1850 'key 8,chr$(13) +chr$(14) + chr$(9) +"'" 'edit whole program, line by line, to add remarks [alternate use of F8]
1860 '<R>+end of next line + tab + '
1870 '-------------------------------------------------------------------------
1880 'subroutine to reverse field on function keys
1890 K%= K%+1:FK$ = FKEY$(K%):IF K% < 10 THEN FK$ = FK$ + STRING$(2," ") ELSE IF K% = 10 THEN FK$ = FK$ + STRING$(1," ")
1900 COLOR 0,7:PRINT " ";FK$;:COLOR 7,0:RETURN
1910 '=========================================================================
1920 ' Subroutine to see if a file name exists at this location
1930 ' If not, then first character is blank and no need to print a number.
1940 ISFILE = SCREEN(R%,NUMPLACE-9)
1950 IF (ISFILE =32) THEN NONUM = TRUE ELSE NONUM = FALSE
1960 RETURN
1970 '=========================================================================
1980 'subroutine to print numbers after program name
1990 LOCATE R%,NUMPLACE : COLOR 0,7
2000 PRONUM$=MID$(STR$(NUM%),2):IF VAL(PRONUM$) <10 THEN PRONUM$ = " "+PRONUM$
2010 IF VAL(PRONUM$) <100 THEN PRONUM$ =PRONUM$ + " "
2020 PRINT PRONUM$ ;:COLOR 7,0:PRINT 'Print number with sign stripped
2030 RETURN
2040 '=========================================================================
2050 'subroutine to get name of program from number N$ on screen
2060 'NUMROWS = (PLACE +18) -(PLACE +0) +1: NUMCOLS = 6
2070 LOCATE ROW+1:PRINT "Enter number of program ==>";:LOCATE ROW+1,30:INPUT " ",N$
2080 IF LEN(N$) > 6 THEN BEEP: GOSUB 2200:GOTO 2070 'too much space
2090 IF VAL(N$) >32767 THEN BEEP: GOSUB 2200:GOTO 2070 'integers <=32767
2100 NN% = VAL(N$): IF NN% <1 OR NN% >= NUM% THEN BEEP: GOSUB 2200: GOTO 2070 'NUM% is already at a blank position
2110 R% = PLACE +INT((NN%-1) /6): I% = (NN% -1) MOD 6: C% =1 +( I%*13 )
2120 PROGNAME$="":FOR J% = 0 TO 7:PROGNAME$= PROGNAME$+CHR$(SCREEN(R%,C% +J%)):NEXT J%
2130 LOCATE ROW+1,35 :PRINT " ";:COLOR 0,7:PRINT " "+PROGNAME$+" ";:COLOR 7,0:PRINT " Is this correct? (Y or N)"
2140 N$=INKEY$:IF N$="" THEN GOTO 2140 ELSE N$ = FNUP$(N$)
2150 IF N$ = "N" THEN GOSUB 2200:GOTO 2070
2160 IF N$ = "Y" THEN GOTO 2170 ELSE GOTO 2140
2170 SPEC$ = D$ + ":" + PROGNAME$
2180 RETURN
2190 '.........................................................................
2200 'subroutine to blank out row
2210 LOCATE ROW+1,28:PRINT STRING$(50," "):RETURN
2220 '=========================================================================
2230 ' subroutine to describe program
2240 CLS:COLOR 0,7:PRINT " PROGRAM DESCRIPTION ":COLOR 7,0:PRINT
2250 PRINT " This program will be run whenever "
2260 PRINT "the computer is turned on or the "
2270 PRINT "system reset. The AUTOEXEC file must "
2280 PRINT "contain the lines AID for .EXE "
2290 PRINT "programs and BASICA AID for .BAS "
2300 PRINT "programs. " :PRINT
2310 PRINT " The file directory on drive A will "
2320 PRINT "be listed. You may decide to Run a "
2330 PRINT "program, Load and modify a program, "
2340 PRINT "create a New program, or eXit to the "
2350 PRINT "menu. By picking a number, the "
2360 PRINT "proper program to be Run or Loaded "
2361 PRINT "will be selected. ":PRINT
2370 COLOR 16,7:PRINT T4$;STRING$(9," ");:COLOR 7,0:PRINT
2380 N$ = INKEY$:IF N$ = "" THEN 2380
2390 CLS
2400 PRINT " If a program is to be Run, it will "
2410 PRINT "be selected from the disk and Run. "
2420 PRINT "You have the option to switch to a "
2430 PRINT "color monitor first. ":PRINT
2440 PRINT " If a program is to be Loaded, it "
2450 PRINT "will be selected from the disk. The "
2460 PRINT "current date, time, and function keys "
2470 PRINT "will be set, and the program Loaded. ":PRINT
2480 PRINT " If a New program is to be created, "
2490 PRINT "the current date, time and function "
2500 PRINT "keys will be set, and memory cleared. ":PRINT
2510 PRINT " If eXit is selected, you will be "
2520 PRINT "returned to the main menu where the "
2530 PRINT "same options are available, as well "
2540 PRINT "as the option to select another "
2550 PRINT "drive. The diskette may be changed "
2560 PRINT "at this point also. ":PRINT
2570 'The diskette may be changed at this point also
2580 COLOR 16,7:PRINT T4$;STRING$(9," ");:COLOR 7,0:PRINT
2590 N$ = INKEY$:IF N$ = "" THEN 2590 ELSE RETURN
2600 '=========================================================================
2610 ' The way the files are formatted on the screen: [for 80 columns]
2620 ' PLACE = 3: R = PLACE +0 TO PLACE +18 [ these are the rows ]
2630 ' I = 0 TO 5: J = 0 TO 3 [ I for 6 columns across, J for .ext ]
2640 ' C = (9+J) + (I*13) [ this is where extension is ]
2650 ' C = 1 + (I*13) TO 8 + (I*13) [ this is where name is ]
2660 '=========================================================================
2670 'subroutine to produce a box around the screen----- row,column 1,1 23,1 23,39 1,39
2671 RETURN 'never mind the box
2672 ' instead of 39 and 38, use LINEWIDTH -1 and LINEWIDTH - 2
2680 CLS:LOCATE 1,1 :PRINT "╔":FOR R = 2 TO 22 : LOCATE R,1 :PRINT "║":NEXT R
2690 LOCATE 23,1 :PRINT "╚":FOR C = 2 TO 38 : LOCATE 23,C:PRINT "═":NEXT C
2700 LOCATE 23,39:PRINT "╝":FOR R = 22 TO 2 STEP -1:LOCATE R,39:PRINT "║":NEXT R
2710 LOCATE 1,39:PRINT "╗":FOR C = 38 TO 2 STEP -1:LOCATE 1,C :PRINT "═":NEXT C
2720 ' LOCATE 20,(39-LEN(T4$) )/2: COLOR 16,7:PRINT T4$;:COLOR 7,0:PRINT
2730 ' N$ = INKEY$: IF N$ = "" THEN GOTO 2109 ELSE RETURN
2740 RETURN
2750 '=========================================================================
2760 'subroutine to print opening screen
2770 COL = 3:LOCATE 3,COL
2780 LOCATE,COL:PRINT " ▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀
2790 LOCATE,COL:PRINT " ▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀
2800 LOCATE,COL:PRINT " ▀▀ ▀▀ ▀▀▀ ▀▀▀ ▀▀▀▀
2810 LOCATE,COL:PRINT " ▀▀ ▀▀ ▀▀▀ ▀▀▀ ▀▀▀▀
2820 LOCATE,COL:PRINT " ▀▀▀▀▀▀▀ ▀▀▀ ▀▀▀ ▀▀▀▀
2830 LOCATE,COL:PRINT " ▀▀ ▀▀ ▀▀▀ ▀▀▀ ▀▀▀▀
2840 LOCATE,COL:PRINT " ▀▀ ▀▀ ▀▀▀ ▀▀▀ ▀▀▀▀
2850 LOCATE,COL:PRINT " ▀▀ ▀▀ ▀▀▀ ▀▀▀ ▀▀▀▀
2860 LOCATE,COL:PRINT " ▀▀ ▀▀ ▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀
2870 LOCATE,COL:PRINT " ▀▀ ▀▀ ▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀
2880 LOCATE 15,(39-LEN(T1$) )/2:COLOR 0,7:PRINT T1$;:COLOR 7,0:PRINT :PRINT
2890 LOCATE 17,(39-LEN(T2$) )/2: PRINT T2$
2900 LOCATE 19,(39-LEN(T3$) )/2: PRINT T3$
2910 LOCATE 20,(39-LEN(T3A$) )/2: PRINT T3A$
2920 '
2930 FOR PAUZ = 1 TO 1500: NEXT :RETURN 'leave screen on,then continue
2940 '=========================================================================
2950 'routine for errors
2960 IF (ERR=71) THEN GOTO 3080
2970 IF (ERR=72) THEN GOTO 3140
2980 IF (ERR=64) THEN GOTO 3230
2990 IF (ERR=53) THEN GOTO 3310
3000 COLOR 0,7:PRINT " ERROR NUMBER = ";ERR; STRING$(13," "):PRINT " ERROR OCCURRED AT LINE = ";ERL;" "
3010 PRINT " Please notify me ! "; STRING$(12," "):COLOR 7,0:PRINT:BEEP ' error not specified in program yet
3020 PRINT " Note well the conditions under which "
3030 PRINT " the error occurred and its number "
3040 PRINT " Judy Epstein, 312-432-4973 "
3050 PRINT " 3303 Dato Ave. "
3060 PRINT " Highland Park, Ill. 60035"
3070 END ' 123456789012345678901234567890123456789
3080 '------ error routine if disk not ready ---------
3090 COLOR 0,7:PRINT " The disk drive door is open or a "
3100 PRINT " diskette is not in the drive. Place "
3110 PRINT " a diskette in the drive and shut door ";:COLOR 7,0:PRINT
3120 PRINT :COLOR 16,7:PRINT T4$;:COLOR 7,0:PRINT :BEEP
3130 N$ = INKEY$: IF N$ = "" THEN GOTO 3130 ELSE RESUME 390
3140 '------ error routine if disk media error --------
3150 COLOR 0,7:PRINT " The diskette is probably bad. "
3160 PRINT " Insert another diskette in the drive. ": PRINT
3170 PRINT " (Copy any existing files on the bad "
3180 PRINT " diskette to a new diskette. Re-format "
3190 PRINT " the bad diskette. If formatting "
3200 PRINT " fails, discard it.) ";:COLOR 7,0:PRINT
3210 PRINT :COLOR 16,7:PRINT T4$;:COLOR 7,0:PRINT :BEEP
3220 N$ = INKEY$: IF N$ = "" THEN GOTO 3220 ELSE RESUME 390
3230 '------ error routine if bad file name -----------
3240 COLOR 0,7:PRINT " An invalid name is used on this "
3250 PRINT " diskette. Insert another diskette "
3260 PRINT " in the drive and shut the door. " :PRINT
3270 PRINT " (Check the names later with a DIR "
3280 PRINT " command under DOS or FILES in BASIC. ";:COLOR 7,0:PRINT
3290 PRINT :COLOR 16,7:PRINT T4$;:COLOR 7,0:PRINT :BEEP
3300 N$ = INKEY$: IF N$ = "" THEN GOTO 3300 ELSE RESUME 390
3310 '------ error routine if file not found ----------
3320 'There are no .EXE or .BAS files on disk
3330 'If no .EXE , go to SYSTEM, then from there go to .BAS version @@@@@@@@@@
3340 ' system ' @@@@@@@@@@@@@@@@
3350 COLOR 0,7:PRINT " There are no program files with .BAS "
3360 PRINT " or .EXE extensions on drive ";D$;STRING$( 9," ") '.BAS @@@@@@@@@@@@@@@@
3370 PRINT " Insert a diskette containing program "
3380 PRINT " files with .BAS or .EXE extensions. " '.BAS @@@@@@@@@@@@@@@@
3390 PRINT :COLOR 16,7:PRINT T4$;:COLOR 7,0:PRINT :BEEP '.BAS @@@@@@@@@@@@@@@@
3400 N$ = INKEY$: IF N$ = "" THEN GOTO 3400 ELSE RESUME 390 '.BAS @@@@@@@@@@@@
3410 '=========================================================================
3420 '=========================================================================
3430 '=========================================================================
3440 ' subroutine to get directory, sort, display, select
3450 '
3460 GOSUB 3570 'get directory, store entries
3470 GOSUB 4150 'sort it
3480 GOSUB 4550 'display it
3490 ' don't need these subs here. Want to go back
3500 'GOSUB 6700 'decide what to do, called from sub 6030
3510 'GOSUB 6340 'select #,called from run and load subs
3520 RETURN
3530 '=========================================================================
3540 ' subroutine to print a message
3550 CLS:LOCATE 2 :COLOR 0,7:PRINT MESSAGE$;:COLOR 7,0:PRINT " " : RETURN
3560 '=========================================================================
3570 'subroutine to read FAT and directory entries. Needs 96K
3580 ' D$ is drive from main routine
3590 ENTRY% = 0: DEF SEG = &H1700 'reset to area of subroutine for peeks and pokes
3600 ON INSTR("ABCD",D$) GOTO 3620,3630,3640,3650
3610 PRINT "Drive is "; D$: BEEP:BEEP:GOTO 3010 'else come here. Drive should have been set before to A,B,C,D
3620 DR = 0:GOTO 3660 ' B%
3630 DR = 1:GOTO 3660
3640 DR = 2:GOTO 3660
3650 DR = 3:GOTO 3660
3660 'message$ = " The directory is now being read ": gosub 3540 'no,leave opening screen
3670 A% = 2: B% = DR: C% = 2 'A% = 2 for read, 3 for write
3680 CALL SUBNUMVAR%(A%,B%,C%) 'change to CALL ABSOLUTE (A%,B%,C%,SUBNUMVAR%) FOR COMPILER
3690 ' return from machine language program
3700 ' check status of drive
3710 IF PEEK(&H80) = &HFF THEN DOUBLESIDED = TRUE ELSE IF PEEK(&H80) = &HFE THEN DOUBLESIDED = FALSE ELSE GOTO 3730
3720 GOTO 3830
3730 ' routine for error message
3740 CLS:COLOR 0,7:PRINT " One of the following has occurred: "
3750 PRINT " 1. The diskette is not formatted. "
3760 PRINT " 2. The disk drive door is open. "
3770 PRINT " 3. The drive does not exist. "
3780 PRINT : PRINT " Please get another diskette, shut "
3790 PRINT " the door, or select another drive "
3800 BEEP:PRINT :PRINT :PRINT T4$: COLOR 7,0
3810 N$=INKEY$:IF N$ = "" THEN 3810 ELSE GOTO 390
3820 '-------------------------------------------------------------------------
3830 ' now get info from tracks about directory
3840 HEAD = 0:TRACK = 0: FOR SECTOR = 4 TO 7: GOSUB 3910:NEXT SECTOR 'single
3850 IF NOT DOUBLESIDED THEN 3880
3860 HEAD = 0:TRACK = 0: SECTOR = 8: GOSUB 3910 'double
3870 HEAD = 1:TRACK = 0: FOR SECTOR = 1 TO 2: GOSUB 3910:NEXT SECTOR 'double
3880 RETURN
3890 GOSUB 4550 'display
3900 '=========================================================================
3910 ' subroutine to read the info from directory
3920 B% = (HEAD*256) + DR: C% = (TRACK*256) + SECTOR
3930 CALL SUBNUMVAR%(A%,B%,C%) 'change to CALL ABSOLUTE (A%,B%,C%,SUBNUMVAR%) FOR COMPILER
3940 GOSUB 3960:RETURN
3950 '=========================================================================
3960 ' subroutine to get info from sectors
3970 FOR X% = 0 TO 511 STEP 32: GOSUB 3990:NEXT X% :RETURN
3980 '
3990 F$ = "":IF PEEK(&H80 +X%) = &HE5 THEN 4120 ELSE ENTRY% = ENTRY% + 1 'erased
4000 FOR Y% = 0 TO 7: P = PEEK(&H80 +X%+Y%): F$ = F$ + CHR$(P):NEXT Y%
4010 INFO$(ENTRY%,1) = F$ 'name
4020 F$ = "":FOR Y% = 8 TO 10: P = PEEK(&H80 +X%+Y%): F$ = F$ + CHR$(P):NEXT Y%
4030 INFO$(ENTRY%,2) = F$ 'extension
4040 'MONTH = (PEEK(&H99+X%) AND 1 )*8 + ((PEEK(&H98+X%) AND 224)/32)
4050 'IF MONTH < 10 THEN MONTH$ = "0"+ RIGHT$(STR$(MONTH),1) ELSE MONTH$ = RIGHT$(STR$(MONTH),2)
4060 'DAY = (PEEK(&H98+X%) AND 31)
4070 'IF DAY < 10 THEN DAY$ = "0"+ RIGHT$(STR$(DAY ),1) ELSE DAY$ = RIGHT$(STR$(DAY ),2)
4080 'YEAR$ = RIGHT$(STR$(INT(PEEK(&H99+X%)/2) + 1980),4)
4090 'INFO$(ENTRY%,3) = MONTH$ + "/" + DAY$ + "/" + YEAR$
4100 'FILESIZE# = 0: FOR Y% = 0 TO 3:FILESIZE# = FILESIZE# + (PEEK(&H9C+X%+Y%)*256^Y%): NEXT Y%
4110 'INFO$(ENTRY%,4) = STR$(FILESIZE#)
4120 RETURN
4130 '=========================================================================
4140 '========================================================================
4150 ' sort subroutine
4160 ' table arrangement of INFO$
4170 ' 0 1 2 3 4
4180 ' 0 title name ext date size
4190 ' 1 flag xxxxxxxx xxx mm/dd/yy ########
4200 ' 2 flag xxxxxxxx xxx mm/dd/yy ########
4210 ' etc
4230 NUMBER% = 0
4250 'set up flagged entries
4260 FOR I% = 1 TO ENTRY%: IF INFO$(I%,2) = KEYWORD$ THEN NUMBER% = NUMBER% +1: INFO$(NUMBER%,0) =INFO$(I%,1) ELSE 4270 '@@@@0@
4270 NEXT I%
4280 ' have files with extension of KEYWORD$ flagged in INFO$(I%,0). Just sort them. NUMBER% is how many of them
4290 IF NUMBER% = 0 THEN BASPROGS = FALSE:RETURN
4300 IF NUMBER% >= 1 THEN BASPROGS = TRUE
4310 IF NUMBER% = 1 THEN RETURN 'only one. No need to sort.
4320 GOSUB 4350 :RETURN
4330 '------------------------------------------------------------------------
4340 ' entries to be sorted are in INFO$(number%,0). Stack holds pointers.
4350 ' quicksort quite fast !!!
4355 'message$ = " The programs are now being sorted ": gosub 3540 'no, leave opening screen
4360 K8%=0: I8%=0
4370 STACK%(I8%+1) = 1: STACK%(I8%+2) = NUMBER%
4380 K8% = K8% +1
4390 IF K8% = 0 THEN RETURN 'sorted
4400 K8% = K8% -1: I8% = K8% + K8%
4410 A8% = STACK%(I8%+1): B8% = STACK%(I8%+2)
4420 Z8$ = INFO$(A8%,0): U8% = A8%:L8% = B8% +1
4430 L8% = L8% -1
4440 IF L8% = U8% THEN 4490
4450 IF Z8$ <= INFO$(L8%,0) THEN 4430 ELSE INFO$(U8%,0) = INFO$(L8%,0)
4460 U8% = U8% +1
4470 IF L8% = U8% THEN 4490
4480 IF Z8$ >=INFO$(U8%,0) THEN 4460 ELSE INFO$(L8%,0)=INFO$(U8%,0):GOTO 4430
4490 INFO$(U8%,0) = Z8$
4500 IF B8%-U8%>=2 THEN I8%=K8%+K8%:STACK%(I8%+1)=U8%+1:STACK%(I8%+2)=B8% :K8%= K8%+1
4510 IF L8%-A8%>=2 THEN I8%=K8%+K8%:STACK%(I8%+1)=A8% :STACK%(I8%+2)=L8%-1:K8%= K8%+1
4520 GOTO 4390
4530 '========================================================================
4540 '========================================================================
4550 ' display subroutine
4560 IF NOT BASPROGS THEN IF KEYWORD$ = KEYWORD2$ THEN GOTO 1210 'no .EXE progs
4570 IF NOT BASPROGS THEN CLS: COLOR 0,7:PRINT " There are no BASIC programs on disk. ":PRINT " Select another diskette ";STRING$(13," "):PRINT
4580 IF NOT BASPROGS THEN COLOR 16,7: PRINT T4$;:COLOR 7,0:PRINT
4590 IF NOT BASPROGS THEN N$ =INKEY$: IF N$ = "" THEN 4590 ELSE GOTO 390
4600 '
4610 ' there are NUMBER BASIC programs on this diskettte
4620 GOSUB 4880 'clear screen, print title
4630 NPG = 32: NUMPAGES% = INT ((NUMBER%-1)/NPG ) +1
4640 FORM1$ = "######## ":FORM2$ = "&"
4650 PAGE% = 0 : L% = 2: C1% = 1:C2% = 20
4660 FOR I% = 1 TO NUMBER%
4670 PAGE% = INT ( (I% -1)/ NPG) +1
4680 N1% =INT((NPG/2)* (2*PAGE%-1)): N2% = INT((NPG/2)* (2* PAGE%) ) 'bottom of each column
4690 IF I% = N1% +1 THEN L% = 2 'to start second column
4700 L% = L% +1
4710 IF I% < = N1% THEN C% = C1% ELSE C% = C2% 'which column
4720 LOCATE L%,C%: PRINT USING FORM1$; I%; :PRINT USING FORM2$;INFO$(I%,0)
4730 IF I% = N2% THEN 4750 'allow a pause
4740 GOTO 4800
4750 IF NUMPAGES%= 1 THEN 4800 'don't need to scroll
4760 GOSUB 4920
4770 N$ = INKEY$: IF N$ = "" THEN 4770
4780 IF N$ = CHR$(13) THEN GOSUB 4880: L%= 2:GOTO 4800 ' <==|
4790 IF N$ = CHR$(27) THEN GOSUB 5090:RETURN ELSE GOTO 4770 ' <ESC>
4800 NEXT I%
4810 ' do you want to scroll again
4820 IF NUMPAGES% = 1 THEN GOSUB 5090 :RETURN 'don't need to scroll
4830 GOSUB 4920
4840 N$ = INKEY$: IF N$ = "" THEN 4840
4850 IF N$ =CHR$(13) THEN GOTO 4620
4860 IF N$ =CHR$(27) THEN GOSUB 5090:RETURN ELSE GOTO 4840
4870 '------------------------------------------------------------------------
4880 ' subroutine to clear screen,print title
4890 CLS: PRINT " The BASIC programs on drive ";:COLOR 0,7:PRINT " ";D$;" ";:COLOR 7,0: PRINT " are ": RETURN
4900 '------------------------------------------------------------------------
4910 'subroutine to print options
4920 LOCATE 20:COLOR 0,7:PRINT " press ESC to select or <──┘ to scroll ";:COLOR 7,0:PRINT: RETURN 'alt 196,217
4930 '========================================================================
4940 ' subroutine to get name of program from info$(I%,0)
4950 ROW = 20
4960 LOCATE ROW+1:PRINT "Enter number of program ==>";:LOCATE ROW+1,30:INPUT " ",N$
4970 IF LEN(N$) > 6 THEN BEEP: GOTO 5010 'too much space
4980 IF VAL(N$) >32767 THEN BEEP: :GOTO 5010 'integers <=32767
4990 IF LEN(N$) = 0 THEN BEEP: GOSUB 4550: GOTO 4960
5000 NN% = VAL(N$):IF NN% <1 OR NN% > NUMBER% THEN BEEP: GOTO 5010 ELSE GOTO 5020
5010 LOCATE ROW+ 1,28:PRINT STRING$(13," ") :LOCATE ROW +2:PRINT STRING$(40," "):GOTO 4960 'use only valid numbers
5020 PROGNAME$=INFO$(NN%, 0 )
5030 LOCATE ROW+2,1:COLOR 0,7:PRINT " "+PROGNAME$+" ";:COLOR 7,0:PRINT " Is this correct? (Y or N)"
5040 N$=INKEY$:IF N$="" THEN GOTO 5040 ELSE N$ = FNUP$(N$)
5050 IF N$ = "N" THEN LOCATE ROW+ 2, 1:PRINT STRING$(40," ") :LOCATE ROW +1,28:PRINT STRING$(13," "):GOTO 4960 'use only desired names
5060 IF N$ = "Y" THEN GOTO 5070 ELSE GOTO 5040
5070 SPEC$ = D$ + ":" + PROGNAME$ : RETURN
5080 '=========================================================================
5090 ' subroutine to decide what to do-- R,L,N,X
5100 GOSUB 1080: IF N$ = "X" THEN GOTO 360 ELSE RETURN
5110 '=========================================================================
10100 ' ====================================================================================================================
10110 ' subroutine to check for valid time and date entries
10120 VALGOOD = FALSE: SLASHF = FALSE: DASHF = FALSE: COLONF = FALSE
10130 LVALUE = LEN (VALUE$): IF LVALUE = 0 OR LVALUE > 10 THEN VALGOOD = FALSE:RETURN 'no entry or too long
10140 FOR INDEX = 1 TO LVALUE :VL = ASC (MID$ (VALUE$,INDEX,1) )
10150 IF ( VL >=47 AND VL <=58 ) OR VL = 45 THEN GOTO 10170 ELSE VALGOOD = FALSE:RETURN 'entries are numbers,/,-,or :
10160 ' --------------------------------------------------------------------------------------------------------------------
10170 NEXT
10180 ' GOOD. All characters are valid. Now check for proper characters.
10190 IF DATECHECK THEN GOSUB 10230: DATECHECK = FALSE: RETURN
10200 IF TIMECHECK THEN GOSUB 10480: TIMECHECK = FALSE: RETURN
10210 RETURN
10220 ' ====================================================================================================================
10230 ' subroutine to check the date entries
10240 BEGP = 1: SEL = INSTR(BEGP,VALUE$,"/")
10250 IF SEL = 0 THEN SLASHF = FALSE ELSE SLASHF = TRUE
10260 IF SLASHF THEN SS$ = "/": GOTO 10310
10270 SEL = INSTR(BEGP,VALUE$,"-")
10280 IF SEL = 0 THEN DASHF = FALSE ELSE DASHF = TRUE
10290 IF DASHF THEN SS$ = "-": GOTO 10310 ELSE VALGOOD = FALSE: RETURN
10300 ' --------------------------------------------------------------------------------------------------------------------
10310 ' GET DATE. If here, then sel is first position of / or -
10320 IF SLASHF AND DASHF THEN VALGOOD = FALSE: RETURN
10330 BEGP = BEGP: ENDP = SEL -1: UPLIM = 12: LOLIM = 1 'months
10340 GOSUB 10650 :IF VALGOOD = FALSE THEN RETURN
10350 BEGP = SEL +1 : SEL = INSTR(BEGP,VALUE$,SS$)
10360 IF SEL = 0 THEN VALGOOD = FALSE:RETURN 'did not find another / or - ,so no good
10370 BEGP = BEGP: ENDP = SEL -1: UPLIM = 31: LOLIM = 1 'days
10380 GOSUB 10650 :IF VALGOOD = FALSE THEN RETURN
10390 BEGP = SEL +1 : ENDP = LVALUE
10400 LVALYY = ENDP -BEGP +1
10410 IF LVALYY = 4 THEN UPLIM = 2099 :LOLIM = 1980 : GOTO 10450
10420 IF LVALYY = 1 THEN VALUE$ = VALUE$ + "0": LVALUE = LVALUE +1: GOTO 10390
10430 IF LVALYY = 2 THEN UPLIM = 99: LOLIM = 80 : GOTO 10450
10440 VALGOOD = FALSE: RETURN
10450 GOSUB 10650 : IF VALGOOD = FALSE THEN RETURN
10460 VALGOOD = TRUE: RETURN 'date ok
10470 ' ====================================================================================================================
10480 ' subroutine to check the time entry
10490 BEGP = 1: SS$ = ":" :SEL = INSTR(BEGP,VALUE$,":")
10500 IF SEL = 0 THEN COLONF = FALSE ELSE COLONF = TRUE 'could be just digit for hours, no :
10510 IF COLONF THEN BEGP = BEGP: ENDP = SEL -1 : UPLIM = 23: LOLIM = 0
10520 IF NOT COLONF THEN BEGP = BEGP: ENDP = LVALUE : UPLIM = 23: LOLIM = 0 'just hours here
10530 GOSUB 10650: IF VALGOOD = FALSE THEN RETURN
10540 IF NOT COLONF THEN VALGOOD = TRUE :RETURN 'hour OK
10550 BEGP = SEL +1
10560 SEL = INSTR(BEGP,VALUE$,SS$): IF SEL = 0 THEN COLONF = FALSE ELSE COLONF = TRUE 'could be just digit for hours, no :
10570 IF COLONF THEN BEGP = BEGP: ENDP = SEL -1 : UPLIM = 59: LOLIM = 0
10580 IF NOT COLONF THEN BEGP = BEGP: ENDP = LVALUE : UPLIM = 59: LOLIM = 0 'just minutes,no secs
10590 GOSUB 10650: IF VALGOOD = FALSE THEN RETURN
10600 IF NOT COLONF THEN VALGOOD = TRUE :RETURN 'minutes OK
10610 BEGP = SEL +1:ENDP = LVALUE :UPLIM = 59: LOLIM = 0
10620 GOSUB 10650: IF VALGOOD = FALSE THEN RETURN
10630 VALGOOD = TRUE: RETURN 'time OK
10640 ' --------------------------------------------------------------------------------------------------------------------
10650 ' subroutine to check if the part of value is within proper limits
10660 ' PRINT DATECHECK;TIMECHECK;VALGOOD;SLASHF;DASHF;COLONF,SEL;BEGP;ENDP;ENDP-BEGP+1,PART$;VAL(PART$),UPLIM;LOLIM
10670 ' COLOR 0,7:PRINT VALUE$;:COLOR 7,0:PRINT;
10680 LENGTH = ENDP -BEGP +1 : IF LENGTH <= 0 THEN VALGOOD = FALSE:RETURN
10690 PART$ = MID$ (VALUE$, BEGP,LENGTH )
10700 ' PRINT DATECHECK;TIMECHECK;VALGOOD;SLASHF;DASHF;COLONF,SEL;BEGP;ENDP;ENDP-BEGP+1,PART$;VAL(PART$),UPLIM;LOLIM
10710 FOR INDEX = 1 TO LENGTH :VL = ASC (MID$ (PART$,INDEX,1) )
10720 IF NOT ( VL >=48 AND VL <=57 ) THEN VALGOOD = FALSE:RETURN 'entries are not numbers
10730 NEXT
10740 IF (VAL(PART$) > UPLIM OR VAL(PART$) < LOLIM) THEN VALGOOD = FALSE:RETURN
10750 VALGOOD = TRUE: RETURN
10760 ' ==============================
PC-SIG Disk No. #141, version v1
The following is a list of the file checksums which should be produced by
the CRCK4 program on disk #9 (and others). If the CRC numbers do not match
you may have a bad file. To use type: CRCK4 <filespec>
CRCK4 output for this disk:
CRCK ver 4.2B (MS DOS VERSION )
CTL-S pauses, CTL-C aborts
--> FILE: 123PREP .DOC CRC = FE 1E
--> FILE: 123PREP .EXE CRC = 4A 4F
--> FILE: AID .BAS CRC = 22 57
--> FILE: AID .BAT CRC = 5B BD
--> FILE: AID .DOC CRC = F6 91
--> FILE: AID .EXE CRC = 0F 7E
--> FILE: SCREENIN.BAS CRC = C4 F4
--> FILE: SCREENIN.DOC CRC = 18 FB
--> FILE: W20 .COM CRC = 65 67
--> FILE: READ .ME CRC = D2 4A
---------------------> SUM OF CRCS = E2 30
DONE
These and other Public Domain and user-supported programs from:
PC Software Interest Group
1125 Stewart Ct Suite G
Sunnyvale, CA 94086
(408) 730-9291
10 ' DEMONSTRATION PROGRAM TO CALL SUBROUTINE GENIN
14 ' *********************************************************************
20 KROW%=10:KCOL%=3
30 KLEN%=30
40 KTYP$="A"
45 CLS:LOCATE KROW%,1,1:PRINT ">";
50 GOSUB 10020
60 PRINT
70 PRINT
80 PRINT ":"+INP.STR$+":";" RTRN%:";RTRN%
90 STOP:GOTO 45
95 ' AT THIS POINT YOU CAN CHANGE THE VALUES OF KROW, KLEN, KCLO, OR KTYP AND
96 ' TYPE "CONT"
99 '
10000 ' Subroutine: GENIN Author: Kenneth D. Crebs
10001 '
10002 ' ========== Generalized Screen Input Subroutine ===========
10005 '
10006 ' Inputs: DEFAULTS
10007 ' KROW% = Row Input Starts - Current Row
10008 ' KCOL% = Column Input Starts - Current Column
10009 ' KLEN% = Length of Input - 80-KCOL%
10010 ' KTYP% = Data Type of Input - (A)lphanumeric
10011 ' KSIGN% = Allow Minus Sign - Not allowed (=0)
10012 ' Outputs:
10013 ' INP.STR$ = Holds Data Entered (In String Format)
10014 ' INP.INT% = If KTYP$=I,Holds Data Entered (In Integer Format)
10015 ' INP.REL! = If KTYP$=R,Holds Data Entered (In Real Format)
10016 ' RTRN% = 0 - Nothing Entered, <Enter> Pressed
10017 ' = 1 - Data Entered, <Enter> Pressed
10018 ' = 9 - <Esc> Pressed
10019 '
10020 IF KROW%<1 OR KROW%>25 THEN KROW%=CSRLIN
10030 IF KCOL%<1 OR KCOL%>80 THEN KCOL%=POS(0)
10040 IF KLEN%<1 OR KLEN%>(80-KCOL%) THEN KLEN%=80-KCOL%+1
10050 DE%=-1:SE%=1:INP.STR$=SPACE$(KLEN%):GOTO 10070
10060 ' SOUND 400,4 'BEEP when past end
10070 COLOR 15,0,0:LOCATE KROW%,KCOL%,1,0,7
10080 CS$=INKEY$:IF CS$= "" THEN 10080
10090 KPTR%=POS(0) ' Current Cursor POSition
10095 IF KPTR%<KCOL% THEN KPTR%=KCOL% ' This line needed in case of <Ctrl><Break>
10100 IF CS$>CHR$(31) THEN 10160
10110 IF CS$=CHR$(13) THEN LOCATE ,,0:IF DE% THEN RTRN%=0:RETURN ELSE RTRN%=1:GOTO 10300
10120 IF CS$=CHR$(27) THEN LOCATE ,,0:RTRN%=9:RETURN 'Esc
10130 IF CS$=CHR$(8) THEN 10250 'Backspace (Destructive)
10140 IF CS$=CHR$(0)+CHR$(75) THEN GOTO 10270 'Left Arrow (Non-Destructive)
10150 IF CS$=CHR$(0)+CHR$(77) THEN GOTO 10290 'Right Arrow (Non-Destructive)
10155 BEEP:GOTO 10080
10160 ACODE%=ASC(CS$)
10170 IF KTYP$="R" THEN IF (ACODE%<48) OR (ACODE%>57) THEN IF KSIGN% THEN IF ACODE%<45 OR ACODE%>46) THEN BEEP:GOTO 10080 ELSE GOTO 10200 ELSE IF ACODE%<>46 THEN BEEP:GOTO 10080 ELSE GOTO 10200 ELSE GOTO 10200
10180 IF KTYP$="I" THEN IF (ACODE%<48) OR (CODE%>57) THEN IF KSIGN% THEN IF ACODE%<>45 THEN BEEP:GOTO 10080 ELSE GOTO 10200 ELSE BEEP:GOTO 10080 ELSE GOTO 10200
10190 IF (ACODE%<32 OR ACODE%>122) THEN BEEP:GOTO 10080
10200 IF DE% THEN PRINT SPACE$(KLEN%);:LOCATE KROW%,KPTR%:DE%=0
10210 PRINT CS$;:SE%=KPTR%-KCOL%+1 ' Calculate Position in INP.STR$ (SE%)
10220 MID$(INP.STR$,SE%,1)=CS$
10230 IF KPTR%>=KCOL%+KLEN%-1 THEN GOTO 10060 ELSE GOTO 10080
10240 ' Backspace (Destructive)
10250 IF KPTR%<KCOL%+1 THEN GOTO 10080 ELSE KPTR%=KPTR%-1:LOCATE , KPTR%:PRINT " ";:SE%=KPTR%-KCOL%+1:MID$(INP.STR$,SE%,1)=" ":LOCATE ,KPTR%:IF SE%=1 THEN DE%=-1:GOTO 10080 ELSE GOTO 10080
10260 ' Backspace (Non-Destructive)
10270 IF KPTR%<KCOL%+1 THEN GOTO 10080 ELSE KPTR%=KPTR%-1:LOCATE ,KPTR%:SE%=KPTR%-KCOL%+1:GOTO 10080
10280 ' Forwardspace (Non-Destructive)
10290 IF KPTR%>=KCOL%+KLEN%-1 THEN GOTO 10060 ELSE KPTR%=KPTR%+1:LOCATE , KPTR%:SE%=KPTR%-KCOL%+1:GOTO 10080
10300 IF KTYP$<>"I" AND KTYP$<>"R" THEN RETURN
10310 IF KTYP$="I" THEN INP.INT%=VAL(INP.STR$):RETURN
10320 INP.REL!=VAL(INP.STR$):IF INP.REL!=0 THEN INP.REL!-0
10330 RETURN
Volume in drive A has no label
Directory of A:\
123PREP DOC 8704 3-25-84 1:58a
123PREP EXE 30208 3-25-84 1:56a
AID BAS 32519 4-01-84 6:41p
AID BAT 512 3-25-84 1:22a
AID DOC 10752 3-25-84 1:21a
AID EXE 53760 3-25-84 1:19a
CRC TXT 1029 11-13-84 2:36p
CRCK4 COM 1536 10-21-82 7:54p
READ ME 666 4-02-84 5:35p
SCREENIN BAS 3712 4-01-84 6:01p
SCREENIN DOC 3772 4-01-84 7:19p
W20 COM 3456 3-25-84 2:59a
12 file(s) 150626 bytes
7680 bytes free