PCjs Machines

Home of the original IBM PC emulator for browsers.

Logo

PC-SIG Diskette Library (Disk #14)

[PCjs Machine "ibm5150"]

Waiting for machine "ibm5150" to load....

Information about “BARGRAPH”

BARGRAPH is a graphic display program that accepts your input data and
creates custom bar graphs.  These graphs that can be used to track
financial data, grades or profits.  BARGRAPH includes an option to
graph against the mean average.  You can specify whether the graph is
to be presented in percentages or in decimal figures.

How to Start:  To run BASIC programs consult the directions for GETTING
STARTED for your configuration.  To use the VISICALC files consult your
VISICALC manual.  Consult PDSOFTWR.DOC for addition information.

File Descriptions:

PRINTER  BAS  Patch for DOS-disk COMM.BAS to toggle printer
BASMENU  BAS  Automatic menu for BASIC programs
BARGRAPH BAS  Well liked program makes bargraphs on mono display
METEOR   BAS  Fast-moving game using cursor movement keys
DWNLOAD  BAS  Patch for DOS-disk COMM.BAS to download files
YR20     BAR  Part of BARGRAPH
BACKLOG  BAR  Sample BARGRAPH input
YR17     BAR  Part of BARGRAPH
FCST     BAR  Part of BARGRAPH
COREFIX  BAS  BASIC program to inspect & patch storage
YAHTZEE  BAS  Yahtzee game rolls the dice & keeps score
TICKTOCK BAS  Sound effects
PLANACT  BAR  Part of BARGRAPH
FINANCE  BAS  Large package of financial programs
S        BAR  Part of BARGRAPH
QTR2G    BAR  Part of BARGRAPH
SPSHIPS  BAS  Sound effects
SSSSSS   BAR  Part of BARGRAPH
SSSSS    BAR  Part of BARGRAPH
SSS      BAR  Part of BARGRAPH
BIRDS    BAS  Sound effects
SS       BAR  Part of BARGRAPH
BLKLETER BAS  Generate block letters on the printer
SHELLSRT BAS  Shell-metzger sort written in BASIC
BKSPACE  BAS  Patch for DOS-disk COMM.BAS to handle backspaces
ASYN-PGM BAS  Asynchronous communication program
SORT     BAS  Another sort written in BASIC
PDSOFTWR DOC  Package of public domain software
GRAPHS   VC   VISICALC program - plotting points
HOMEBDGT VC   VISICALC program - home budget program
BRKEVEN  VC   VISICALC program - break-even points
COSINES  VC   VISICALC program - calculate table of cosines
PRTSETUP VC   VISICALC printer setup hints
FEDTAX   VC   VISICALC program - federal income tax

ASYN-PGM.BAS

50 REM * PUBLIC DOMAIN SOFTWARE*
60 REM THIS COMMUNICATIONS PROGRAM IS ADAPTED FROM AN EXAMPLE IN THE
70 REM IBM BASIC MANUAL pp F-4,F-5. IT CAN BE USED TO DOWNLOAD PROGRAMS.
100 'COM3.BAS VER 1.7 C.W. BRANDON 01/27/1982
105 'Adapter from example pgm in IBM BASIC Manual pp F-4
120 'set screen to monochrome and width to 80
130 SCREEN 0,0: WIDTH 80
140 'turn off SOFT KEY disply, CLS and CLOSE any OPEN files
150 KEY OFF: CLS: CLOSE
155 FOR I= 1 TO 10:KEY I,"":NEXT I
160 'Define all numeric variables as integer for speed
170 DEFINT A-Z
180 'define true and false
190 FALSE = 0: TRUE = NOT FALSE
191 ON ERROR GOTO 9000
195 ECH$="N"  'set for full duplex mode
196 GOSUB 12000
200 'open comm to file #1 as 300 baud,even parity 7 bit, 1 stop
210 OPEN "COM1:300,E,7,1" AS #1
215 'open file 3 for disk output
216 OPEN "O",#3,"OUTFILE.TXT"
220 'open screen as file 2
230 OPEN "SCRN:" FOR OUTPUT AS #2
235 PRINT "Ready to operate"
240 'turn on cursor
250 LOCATE,,1
260 DISK = FALSE
280 'get keyboard input and examine it
290 B$ = INKEY$:IF B$ = "" THEN GOTO 310
293 IF LEN(B$) > 1 THEN GOTO 11000 ELSE IF B$ = CHR$(8) THEN LOCATE ,POS(0)-1,1:PRINT " ";:LOCATE ,POS(0)-1,1
295 PRINT #1,B$;:IF ECH$="Y" OR ECH$="y" THEN PRINT #2,B$;
300 'if no chars in comm buffer, check key in
310 IF EOF(1) THEN 290
320 'read contents of comm buffer
330 A$ = INPUT$(LOC(1),#1)
340 'edit the input buffer
350 FOR I = 1 TO LEN(A$)
353 NCHAR = ASC(MID$(A$,I,1))
355  IF (NCHAR<31 AND NCHAR<>13 AND NCHAR<>10) OR NCHAR=127 THEN GOTO 370
357  IF DISK = TRUE THEN PRINT #3,CHR$(NCHAR);
360  IF NCHAR = 10 THEN NCHAR = 32
365 PRINT CHR$(NCHAR);
370 NEXT I
380 'check for more input
395 IF LOC(1) > 0 THEN GOTO 330
400 'if not check for keyboard input again
410 GOTO 290
9000 'error handling routine
9020 IF ERR = 68 THEN LOCATE 1,1,1:PRINT "This program requires the ASYNC COMM ADAPTER.":END
9030 IFF ERR = 24 THEN LOCATE 1,1,1:PRINT "A DEVICE TIMEOUT error has occurred. Check modem and press ENTER when ready.";
9031 DV$=INKEY$:IF DV$ = "" THEN GOTO 9031
9032 IF LEN(DV$) < 2 THEN RESUME 100
9035 IF ASC(MID$(DV$,2,1)) = 68 THEN GOTO 10000 ELSE RESUME 100
9040 IF ERR = 61 THEN PRINT:COLOR 0,7:PRINT "*** disk full -- file closed ***";:COLOR 7,0:PRINT:DISK = FALSE:DF$=" ":GOSUB 13000:RESUME NEXT
9050 RESUME
10000 'exit routine
10010 CLOSE
10020 SYSTEM
11000 'function key routine
11020 FK = ASC(MID$(B$,2,1))
11030 IF FK = 68 THEN GOTO 10000
11040 IF FK = 59 THEN DISK = TRUE:DF$="D":GOSUB 13000
11050 IF FK = 60 THEN DISK = FALSE:DF$=" ":GOSUB 13000
11060 GOTO 310
12000 'initialization sequence
12015 CLS
12020 LOCATE 1,1,1
12030 PRINT TAB(17) "TERMINAL PROGRAM WITH DISK SAVE OPTION Ver. 1.7"
12040 PRINT:PRINT
12050 PRINT "To begin saving received data to disk - press F1"
12060 PRINT
12070 PRINT "To stop saving received data to disk - press F2"
12080 PRINT
12090 PRINT "To end program and return to DOS    - press F10
12100 PRINT:PRINT
12103 PRINT "A file will be opened to save received"
12104 PRINT "data under the name 'OUTFILE.TXT."
12105 PRINT:PRINT
12110 PRINT "Press ENTER to begin.";
12112 DV$=INKEY$:IF DV$="" THEN GOTO 12112
12115 IF LEN(DV$) < 2 THEN GOTO 12120
12117 IF ASC(MID$(DV$,2,1)) = 68 THEN GOTO 10000 ELSE GOTO 12120
12120 CLS
12130 LOCATE 25,1,0:COLOR 0,7:PRINT TAB(5)"F1 = SAVE TO DISK    F2 = STOP SAVE TO DISK    F10 = QUIT PROGRAM  ";:COLOR 7,0
12140 LOCATE 1,1,1
12150 RETURN
13000 'disk save signal on screen routine
13020 RC = CSRLIN 'record current line
13030 CC = POS(0) 'record current column
13040 LOCATE 25,78
13050 PRINT DF$
13060 LOCATE RC,CC 'restore postion of cursor
13070 RETURN

BARGRAPH.BAS

10 DIM M#(72),M(72),T(39),A%(71),TITLE$(3),LABEL$(71),S(71),W(71),SV$(12)
20 LOCATE ,,0: YOPT=1: DEFINT I,J,K,L,O,X,Y
60 KEY OFF:FOR I=1 TO 10: KEY I,"": NEXT: ON KEY (9) GOSUB 740: KEY (9) ON
70 ON KEY (1) GOSUB 8000: REDO%=1: KEY (1) ON
80 ON KEY (3) GOSUB 9000
90 DEF SEG: POKE 106,0
100 ON ERROR GOTO 7000
200 CLS: LOCATE 12,35: PRINT "Bar Chart"
210 LOCATE 24,50: PRINT "Press space bar to continue."
220 K$=INKEY$: IF K$<>" " THEN 220
230 CLS: LOCATE 2,35:PRINT "Bar Chart":LOCATE 6,17:PRINT "1. On screens where an asterisk appears in":LOCATE 8,20:PRINT "the top right hand corner, the image":LOCATE 10,20:PRINT "will remain until the SPACE BAR is depressed."
240  LOCATE 14,17: PRINT "2. On all other screens, you will be prompted for ":LOCATE 16,20:PRINT "input. To use a FUNCTION KEY when input is expected,":LOCATE 18,20:PRINT "press the desired key followed by ENTER."
250 LOCATE 1,80:PRINT "*"
260 K$=INKEY$: IF K$<>" " THEN 260
270 CLS: LOCATE 2,35:PRINT "Bar Chart":LOCATE 20,17:PRINT "4. Press F9 (followed by enter) at any time":LOCATE 22,20:PRINT "to immediately exit the program.":LOCATE 6,17: PRINT "3. Press F1 (followed by enter) to return to":LOCATE 8,20
280 PRINT "the top of the nearest INPUT screen. This": LOCATE 10,20: PRINT "key should be used when a REDO FROM START":LOCATE 12,20: PRINT "or OVERFLOW message appears. It can also be ":LOCATE 14,20
290 PRINT "used at the beginning of the program to skip":LOCATE 16,20:PRINT "these introductory screens." :LOCATE 1,80:PRINT "*"
300 K$=INKEY$: IF K$<>" " THEN 300
310 CLS: LOCATE 10,39:PRINT "For":LOCATE 12,37:PRINT "SAMPLES":LOCATE 14,38:PRINT "Press":LOCATE 16,40:PRINT "F3":LOCATE 1,79:PRINT "*":KEY (3) ON
320 K$=INKEY$: IF K$<>" " THEN 320: ELSE KEY (3) OFF
400 REDO%=1: SAMPLE$="n":CLS:LOCATE 2,38:PRINT "MENU 1":LOCATE 6,1:PRINT "Select an option.
410 LOCATE 11,33: PRINT "1. RESTORE a file":LOCATE 13,33:PRINT "2. RUN from start":LOCATE 15,33:PRINT "3. List FILES"
420 LOCATE 17,33: IF OPT3=4 AND OP$<>"3" THEN PRINT "4. Return to MENU 3"
430 IF OP$="3" THEN PRINT "4. QUIT": SV$="3": ELSE SV$=""
440 LOCATE 6,19: INPUT OP$
450 IF OP$="2" THEN 530
460 IF OP$="3" THEN 4300
470 IF OP$="4" THEN IF SV$<>"3"  AND OPT3<>4 THEN 440: ELSE IF SV$="3" THEN 740: ELSE 3800
480 IF OP$<>"1" THEN BEEP: GOTO 440
490 GOSUB 5700: LOCATE 23,1:PRINT "Enter the name under which the file was saved:"
500 LOCATE 23,60: INPUT FILE$: FOR K=1 TO LEN(FILE$): IF MID$(FILE$,K,1)="." THEN 510: ELSE NEXT
510 IF K>9 THEN K=9
520 OLDFILE$=LEFT$(FILE$,K-1): OLDFILE$=OLDFILE$+".bar": GOSUB 4600
530 IF OP$="2" THEN OPT3=0 :GOSUB 800
600 IF OPT=1 THEN GOSUB 900
610 IF OPT=2 THEN GOSUB 1100
620 IF OPT=3 THEN GOSUB 1500
630 IF OPT=4 THEN GOSUB 5000
640 GOSUB 1300
650 GOSUB 1700
660 GOSUB 1800
670 GOSUB 2400
680 IF OPT=1 THEN GOSUB 2800
690 IF OPT=2 THEN GOSUB 3000
700 IF OPT=3 THEN GOSUB 2900
710 IF OPT=4 THEN GOSUB 3200
720 GOSUB 3300
730 GOTO 3800
740 CLS: KEY 2,"run"+CHR$(13): END
800 REDO%=2:CLS:LOCATE 2,38:PRINT "MENU 2":LOCATE 6,1:PRINT "Select an option.":LOCATE 9,33:PRINT "1. Monthly Graph":LOCATE 11,33:PRINT "2. Quarterly Graph":LOCATE 13,33:PRINT "3. Yearly Graph":LOCATE 15,33:PRINT "4. Do-it-yourself Graph"
810 LOCATE 6,20:INPUT Z$ :IF VAL(Z$)<1 OR VAL(Z$)>4 THEN BEEP: GOTO 810: ELSE OPT=VAL(Z$)\1
815 QOPT$="":YRS=0:PRCENT$="y"
820 RETURN: '****************************************************************
900 REDO%=3: CLS
910 LOCATE 1,37: PRINT "MONTHLY"
920 LOCATE 6,1:PRINT "Enter the last month and year for which data will be entered.":LOCATE 8,1:PRINT "(Use format mm,yyyy)"
930 LOCATE 8,61: INPUT Z1$,Z2$: IF VAL(Z1$)<1 OR VAL(Z1$)>12 THEN BEEP: GOTO 930:ELSE MTH%=VAL(Z1$)\1
940 IF VAL(Z2$)<1000 OR VAL(Z2$)>9999 THEN LOCATE 14,1: PRINT "The year must be between 1000 and 9999": BEEP: GOTO 930: ELSE YR=VAL(Z2$)\1
950 N=11:XL=59:W=3:S=2
960 LABEL$(0)="JAN":LABEL$(1)="FEB":LABEL$(2)="MAR":LABEL$(3)="APR":LABEL$(4)="MAY":LABEL$(5)="JUN":LABEL$(6)="JUL":LABEL$(7)="AUG":LABEL$(8)="SEP":LABEL$(9)="OCT":LABEL$(10)="NOV":LABEL$(11)="DEC"
970 FOR I=0 TO 11-MTH%: SV$(I)=LABEL$(I+MTH%):NEXT
980 FOR I=12-MTH% TO 11:SV$(I)=LABEL$(I-12+MTH%):NEXT
990 FOR I=0 TO 11:LABEL$(I)=SV$(I):NEXT: IF OP$="1" THEN RETURN
1000 REDO%=4:CLS: LOCATE 1,37: PRINT "MONTHLY":LOCATE 4,1:PRINT "For each month enter a number."
1010 FOR I=0 TO 11: LOCATE I+6,1: PRINT LABEL$(I);",";:IF I<12-MTH% THEN PRINT YR-1:ELSE PRINT YR
1020 NEXT: IF OPT4=2 THEN 1300
1030 RETURN 640: '************************************************************
1100 REDO%=5: CLS:LOCATE 2,38:PRINT "QUARTERLY":LOCATE 6,1:PRINT "The graph will display data for 1 to 3 years.":PRINT "If data for 2 or 3 years is entered,":PRINT "the bars can be plotted chronologically or grouped by quarters."
1110 LOCATE 11,1:PRINT "Enter the number of years for which data will be entered."
1120 LOCATE 11,73:INPUT Z$ :IF VAL(Z$)<1 OR VAL(Z$)>3 THEN BEEP: GOTO 1120: ELSE YRS=VAL(Z$)\1
1130 IF YRS=1 THEN Z$="":QOPT$="c":GOTO 1160:ELSE Z$=" last"
1140 LOCATE 14,1:PRINT "Enter C to display chronologically or G to display in groups.":
1150 LOCATE 14,73:INPUT QOPT$:IF QOPT$<>"c" AND QOPT$<>"g" THEN BEEP: GOTO 1150
1160 IF YRS=1 THEN X=14: ELSE X=17
1170 LOCATE X,1:PRINT "Enter the";Z$;" year for which data will be entered.":
1180 LOCATE X,70: INPUT Z$: IF VAL(Z$)<1000 OR VAL(Z$)>9999 THEN BEEP: LOCATE X+4,1:PRINT "The year must be between 1000 and 9999":GOTO 1180:ELSE YR=VAL(Z$)\1
1190 REDO%=6: CLS:LOCATE 1,36:PRINT "QUARTERLY":LOCATE 4,1:PRINT "For each quarter enter a number."
1200 K=-1:FOR I=1 TO YRS:FOR J=1 TO 4: K=K+1:LOCATE 6+K,1:PRINT USING "####"; YR+I-YRS;:PRINT " QTR";J:NEXT:NEXT:IF OPT4=2 THEN GOTO 1300
1210 N=YRS*4-1:IF QOPT$="c" THEN 1230
1220 IF YRS=2 THEN XL=63:S=10:W=6:GOTO 1250:ELSE XL=63:S=12:W=4:GOTO 1250
1230 IF YRS=1 THEN XL=61:S=4:W=12:GOTO 1250
1240 IF YRS=2 THEN XL=64:S=2:W=6:ELSE XL=60:S=1:W=4
1250 IF OP$="2" THEN RETURN 640: ELSE RETURN  '*******************************
1300 I=-1:J=0
1310 I=I+1: K=I: L=17
1320 IF N>11 THEN K=I MOD (N+2)\2: IF I>=(N+1)/2 THEN L=57
1330 LOCATE 6+K,L,1: IF OPT4<>2 THEN INPUT Z$: M#(I)=VAL(Z$): ELSE PRINT M#(I): GOTO 1380
1340 IF ABS(M#(I))<1.00000000000000e+15# THEN 1380
1350 J=1
1360 BEEP: LOCATE 22,1:PRINT "Enter numbers no greater in absolute value "
1370 LOCATE 23,1:PRINT "than 999,999,999,999,999. Do not use commas.":IF J=2 THEN 1450:ELSE 1330
1380 IF I<N THEN 1310
1390 IF OPT4=2 THEN RETURN
1400 IF J=1 THEN LOCATE 22,1: FOR X=1 TO 2: FOR Y=1 TO 10: PRINT "          ";:NEXT:NEXT
1410 LOCATE K+9,1: GOSUB 5900
1420 IF R$="y" THEN 1460
1430 IF R$="n" THEN LOCATE K+9,1:FOR X=1 TO 5: PRINT "               ";:NEXT:ELSE BEEP: GOTO 1410
1440 LOCATE K+9,1:PRINT "Enter the value of the horizontal axis."
1450 LOCATE K+9,50: INPUT Z$: REF#=VAL(Z$): IF REF#>999999999999999# THEN J=2: GOTO 1360
1460 RETURN: '****************************************************************
1500 REDO%=7: CLS:LOCATE 1,38:PRINT "YEARLY":LOCATE 6,1:PRINT "Enter the number of years to be graphed": LOCATE 7,1: PRINT "(Minimum is 2, Maximum is 20)":LOCATE 9,1:PRINT "And the last year for which data will be entered."
1510 LOCATE 6,65: INPUT Z$: IF VAL(Z$)<2 OR VAL(Z$)>20 THEN 1510:ELSE N=VAL(Z$)\1-1
1520 LOCATE 9,65: INPUT Z$: IF VAL(Z$)>999 AND VAL(Z$)<10000 THEN YR=VAL(Z$):GOTO 1540
1530 LOCATE 13,1: PRINT "The year must be between 1000 and 9999": BEEP:GOTO 1520
1540 REDO%=8: CLS: LOCATE 1,38:PRINT "YEARLY":LOCATE 4,1:PRINT "For each year enter a number."
1550 I=-1
1560 I=I+1: K=I: L=1
1570 IF N>11 THEN K=I MOD (N+2)\2: IF I>=(N+1)/2 THEN L=40
1580 LOCATE 6+K,L:PRINT USING "####"; YR+I-N:IF I<N THEN 1560
1590 IF OPT4=2 THEN 1300
1600 IF N>=16 THEN S=1:GOTO 1670
1610 IF 9<=N AND N<=15 THEN S=2
1620 IF N=12 OR N=11 THEN S=1: GOTO 1670
1630 IF N=7 THEN S=2:GOTO 1670
1640 IF 4<=N AND N<=6 THEN S=3:GOTO 1670
1650 IF N=8 THEN S=3:GOTO 1670
1660 IF 1<=N AND N<=3 THEN S=5:GOTO 1670
1670 W=S-1
1680 W=W+1: XL=1+(N+1)*W+S*N: IF XL+N+1<67 THEN 1680
1690 IF OP$="2" THEN RETURN 640: ELSE RETURN: '******************************
1700 REDO%=9: CLS: LOCATE 1,38: PRINT "TITLES"
1710 LOCATE 6,1:PRINT "Enter the title of the graph"
1720 LOCATE 7,1:PRINT "(maximum two lines of 80 characters)"
1730 LOCATE 14,1:PRINT "Enter the title of the vertical axis"
1740 LOCATE 9,1,1:INPUT TITLE$(1)
1750 LOCATE 10,1,1:INPUT TITLE$(2)
1760 LOCATE 16,1,1:INPUT TITLE$(3)
1770 IF OPT4=3 THEN 3900
1780 RETURN: '****************************************************************
1800 CLS: LOCATE 25,62: PRINT "Just a second...."
1810 I=-1:AVG#=0: MIN#=ABS(M#(0)): MAX#=ABS(M#(0))
1820 I=I+1:IF M#(I)>MAX# THEN MAX#=M#(I)
1830 IF M#(I)<MIN# THEN MIN#=M#(I)
1840 AVG#=AVG#+M#(I)/(N+1)
1850 IF I<N THEN 1820
1860 IF YOPT<>3 THEN 1900 :ELSE IF MIN#<0 OR AVG#=0 THEN PRCENT$="n": GOTO 4100:ELSE PRCENT$="y":SCALE$="":FOR K=0 TO N: M(K)=100*M#(K)/(AVG#*(N+1)):NEXT: MAX=100*MAX#/(AVG#*(N+1)): MIN=100*MIN#/(AVG#*(N+1))
1870 IF R$="n" THEN IF REF#>100 THEN REF=100: ELSE IF REF#<0 THEN REF=0: ELSE REF=REF#
1880 IF R$="y" THEN REF=100/(N+1)
1890 GOTO 2070
1900 IF R$="y" THEN REF#=AVG#
1910 ABMAX#=ABS(MAX#): IF ABS(MIN#)>ABMAX# THEN ABMAX#=ABS(MIN#)
1920 IF ABS(REF#)>ABMAX# THEN ABMAX#=ABS(REF#)
1930 IF ABMAX#>=0.001 AND ABMAX#<1000 THEN 1980
1940 IF ABMAX#>=1000000! AND ABMAX# <1.000000e+9 THEN 1990
1950 IF ABMAX#>=1000! AND ABMAX#<1000000! THEN 2010
1960 IF ABMAX#>=1.000000e+9 AND ABMAX#<1.000000e+12 THEN 2030
1970 IF ABMAX#>=1.000000e+12 THEN 2050
1980 AVG=AVG#:REF=REF#:MIN=MIN#:MAX=MAX#:FOR I=0 TO N: M(I)=M#(I):NEXT:SCALE$="":GOTO 2070
1990 AVG=AVG#/1000000!:REF=REF#/1000000!:MIN=MIN#/1000000!:MAX=MAX#/1000000!:FOR I=0 TO N:M(I)=M#(I)/1000000!: NEXT
2000 SCALE$="(in millions)": GOTO 2070
2010 AVG=AVG#/1000:REF=REF#/1000!:MIN=MIN#/1000:MAX=MAX#/1000:FOR I=0 TO N:M(I)=M#(I)/1000: NEXT
2020 SCALE$="(in thousands)": GOTO 2070
2030 AVG=AVG#/1.000000e+9:REF=REF#/1.000000e+9:MIN=MIN#/1.000000e+9:MAX=MAX#/1.000000e+9: FOR I=0 TO N: M(I)=M#(I)/1.000000e+9: NEXT
2040 SCALE$="(in billions)": GOTO 2070
2050 AVG=AVG#/1.000000e+12:REF=REF#/1.000000e+12:MIN=MIN#/1.000000e+12:MAX=MAX#/1.000000e+12: FOR I=0 TO N: M(I)=M#(I)/1.000000e+12: NEXT
2060 SCALE$="(in trillions)": GOTO 2070
2070 IF YOPT<>2 THEN REF=CINT(REF)
2080 I=0: IF REF=<MIN THEN I=1: JUMP!=(MAX-REF)/37: GOTO 2150
2100 IF REF>=MAX THEN I=37: JUMP!=(REF-MIN)/37: GOTO 2150
2110 I=I+2: A=MIN+((MAX-MIN)/38)*(I-2): B=MIN+((MAX-MIN)/38)*I
2120 IF A<=REF AND REF<=B THEN I=I-1: GOTO 2130: ELSE 2110
2130 A=(MAX-REF)/(38-I): B=(REF-MIN)/I
2140 IF A>=B THEN JUMP!=A:ELSE JUMP!=B
2150 IF YOPT=2 THEN 2180:ELSE  IF JUMP!<0.25 THEN JUMP!=0.25
2155 SV=JUMP!: J!=INT(JUMP!)-0.25
2160 J!=J!+0.25: IF SV>J! THEN JUMP!=J!+0.25: IF J!<INT(SV)+1 THEN 2160
2180 IF YOPT=2 THEN IF JUMP!=0 THEN JUMP!=0.001
2190 T(I)=REF: FOR J=0 TO 38: T(J)=T(I)+(J-I)*JUMP!:NEXT
2200 XAXIS=23.5-I/2: XTIC=I
2210 I=-1
2220 I=I+1: A%(I)=0
2230 J=0:IF M(I)>=0.5*(T(32)+T(31)) THEN J=31: GOTO 2270
2240 IF M(I)>=0.5*(T(24)+T(23)) THEN J=23: GOTO 2270
2250 IF M(I)>=0.5*(T(16)+T(15)) THEN J=15: GOTO 2270
2260 IF M(I)>=0.5*(T(8)+T(7)) THEN J=7
2270 J=J+1: IF M(I)>=0.5*(T(J)+T(J-1)) THEN A%(I)=J: ELSE 2290
2280 IF J<38 THEN 2270
2290 IF I<N THEN 2220
2300 RETURN: '***************************************************************
2400 YAX=(82-XL-1)\2: IF YAX<8 THEN YAXSV=YAX: YAX=8: ELSE YAXSV=8
2410 IF OPT3=2 THEN LPRINT CHR$(27)+CHR$(12)
2420 CLS: IF GRID$<>"y" THEN 2450
2430 DOT$="": FOR I=1 TO XL: DOT$=DOT$+CHR$(249): NEXT:
2440 FOR I=5 TO 23: LOCATE I,YAX+1: PRINT DOT$;: NEXT
2450 I=4: IF 1=XAXIS MOD 2 THEN I=3
2460 I=I+2:J=39-2*(I-4): IF T(J)>=0 THEN 2510
2470 LOCATE I,YAX-7:IF T(J)<=-1000 OR YOPT<>2 THEN PRINT USING "+####.";T(J): LOCATE I,YAX-2: IF YOPT<>3 THEN PRINT ".";:GOTO 2550: ELSE PRINT "%";: GOTO 2550
2480 IF T(J)<=-100 AND T(J)>-1000 THEN PRINT USING "+###.#";T(J):GOTO 2550
2490 IF T(J)>-100 AND T(J)<=-10 THEN PRINT USING "+##.##";T(J):GOTO 2550
2500 PRINT USING "+#.###";T(J):GOTO 2550
2510 LOCATE I,YAX-6:IF T(J)>=1000 OR YOPT<>2 THEN PRINT USING "####.";T(J): LOCATE I,YAX-2: IF YOPT<>3 THEN PRINT ".";:GOTO 2550: ELSE PRINT "%";: GOTO 2550
2520 IF T(J)>=100 AND T(J)<1000 THEN PRINT USING "###.#";T(J):GOTO 2550
2530 IF T(J)<100 AND T(J)>=10 THEN PRINT USING "##.##";T(J):GOTO 2550
2540 PRINT USING "#.###";T(J)
2550 IF I<22 THEN 2460
2560 K=0
2570 K=K+1
2580 I=LEN(TITLE$(K)): J=(82-I)\2: IF YAXSV<8 THEN J=J+YAXSV\2
2590 IF J<1 THEN J=1
2600 LOCATE K,J:PRINT TITLE$(K)
2610 IF K=1 GOTO 2570
2620 I=LEN(TITLE$(3)):J=(2*YAX+1-I)\2:IF J<1 THEN J=1
2630 IF SCALE$="" THEN 2650
2640 LOCATE 3,J:PRINT TITLE$(3):LOCATE 4,YAX-6:PRINT SCALE$:GOTO 2660
2650 LOCATE 4,J:PRINT TITLE$(3)
2660 FOR J=YAX TO XL+YAX:LOCATE XAXIS,J
2670 PRINT CHR$(196);:NEXT
2680 FOR I=5 TO 23:LOCATE I,YAX
2690 PRINT CHR$(197):NEXT
2700 IF XTIC=1 THEN LOCATE 23,YAX:PRINT CHR$(192)
2710 IF XTIC=37 THEN LOCATE 5,YAX: PRINT CHR$(218)
2720 RETURN  '************************************************************
2800 LOCATE 24,YAX+1:FOR I=0 TO 11:PRINT LABEL$(I)+"  ";:NEXT:LOCATE 24,XL+YAX+2:IF MTH%=12 THEN PRINT YR;:ELSE PRINT " "+RIGHT$(STR$(YR-1),2);"-";RIGHT$(STR$(YR),2);
2810 RETURN 720 '**********************************************************
2900 IF W>4 THEN W1=(W-4)\2: ELSE W1=0
2910 FOR I=0 TO N :J=YAX+W1+(W+S)*I+1: LOCATE 24,J: IF N>13 THEN PRINT RIGHT$(STR$(YR+I-N),2);: ELSE PRINT RIGHT$(STR$(YR+I-N),4);
2920 NEXT: RETURN 720  '***************************************************
3000 IF QOPT$="g" THEN 3060
3010 IF YRS<>1 THEN 3030
3020 FOR I=1 TO 4: J=YAX+1+16*(I-1): LOCATE 24,J+7:PRINT RIGHT$(STR$(YR),4);:LOCATE 24,J+1:PRINT "QTR";:LOCATE 24,J+4: PRINT I;:LOCATE 24,J+6: PRINT ",";:NEXT:GOTO 3110
3030 IF YRS<>2 THEN 3050
3040 K=-1: FOR I=0 TO 1: FOR J=1 TO 4: K=K+1: L=YAX+8*K:LOCATE 24,L+5: PRINT RIGHT$(STR$(YR-1+I),2);:LOCATE 24,L:PRINT J;:LOCATE 24,L+2: PRINT "QTR";:NEXT:NEXT: GOTO 3110
3050 K=-1: FOR I=0 TO 2: FOR J=1 TO 4: K=K+1: L=YAX+5*K:LOCATE 24,L+3: PRINT RIGHT$(STR$(YR-2+I),2);: LOCATE 24,L:PRINT J;:LOCATE 24,L+2:PRINT "Q";:NEXT:NEXT: GOTO 3110
3060 IF YRS<>2 THEN 3090
3070 FOR I=0 TO 1:FOR J=1 TO 4
3080 L=(YAX+7*I)+16*(J-1):LOCATE 24,L+5:PRINT RIGHT$(STR$(YR-1+I),2);:LOCATE 24,L:PRINT J;:LOCATE 24,L+2:PRINT "QTR";:NEXT:NEXT:GOTO 3110
3090 FOR I=0 TO 2:FOR J=1 TO 4:L=(YAX+5*I)+16*(J-1)
3100 LOCATE 24,L+3:PRINT RIGHT$(STR$(YR-2+I),2);: LOCATE 24,L:PRINT J;:LOCATE 24,L+2:PRINT "Q";:NEXT:NEXT
3110 RETURN 720 '***********************************************************
3200 X=YAX+1: FOR J=0 TO N: X=X+S(J)+W(J): Y=X+(W(J+1)-LEN(LABEL$(J)))\2
3210 LOCATE 24,Y: PRINT LABEL$(J);:NEXT: RETURN '****************************
3300 L=0: X9=YAX+1: IF QOPT$="g" THEN N=3
3310 L=L+1:IF YRS=2 THEN X9=YAX+1+(L-1)*7
3320 IF YRS=3 THEN X9=YAX+1+(L-1)*5
3330 IF OPT=4 AND DOOP$="2" THEN Y=YAX+1+S(0)
3340 I=-1
3350 I=I+1:P%=I+(L-1)*4
3360 IF OPT=4 AND DOOP$="2" THEN W=W(I+1): IF I>0 THEN Y=Y+S(I)+W(I)
3370 IF A%(P%)=XTIC THEN 3660
3380 IF XTIC=1 AND A%(P%)=0 THEN 3660
3390 IF XTIC=37 AND A%(P%)=38 THEN 3660
3400 IF OPT=4 AND DOOP$="1" THEN S=S(1):W=W(1)
3410 IF OPT<>4 OR DOOP$<>"2" THEN  Y=X9+(W+S)*I
3420 IF XTIC>A%(P%) THEN 3550
3430 IF 1=A%(P%) MOD 2 THEN 3500
3440 X=(40-A%(P%))/2+4
3450 FOR J=Y TO Y+W-1
3460 LOCATE XAXIS,J: PRINT CHR$(223)
3470 FOR K=X TO XAXIS-1: LOCATE K,J:PRINT CHR$(219)
3480 NEXT:NEXT
3490 GOTO 3660
3500 X=(39-A%(P%))/2+4
3510 FOR J=Y TO Y+W-1
3520 LOCATE XAXIS,J: PRINT CHR$(223): LOCATE X,J: PRINT CHR$(220)
3530 FOR K=X+1 TO XAXIS-1: LOCATE K,J: PRINT CHR$(219):NEXT:NEXT
3540 GOTO 3660
3550 IF 1=A%(P%) MOD 2 THEN 3620
3560 X=(38-A%(P%))/2+4
3570 FOR J=Y TO Y+W-1
3580 LOCATE XAXIS,J: PRINT CHR$(220)
3590 FOR K=XAXIS+1 TO X: LOCATE K,J:PRINT CHR$(219)
3600 NEXT:NEXT
3610 GOTO 3660
3620 X=(39-A%(P%))/2+4
3630 FOR J=Y TO Y+W-1
3640 LOCATE XAXIS,J: PRINT CHR$(220): LOCATE X,J: PRINT CHR$(223)
3650 FOR K=XAXIS+1 TO X-1: LOCATE K,J: PRINT CHR$(219):NEXT:NEXT
3660 '
3670 IF I<N THEN 3350
3680 IF QOPT$="g" AND L<YRS THEN 3310:ELSE IF QOPT$="g" THEN N=YRS*4-1
3690 IF OPT3=2 THEN GOSUB 4800
3700 LOCATE 1,80: PRINT "*";
3710 L$=INKEY$: IF L$<>" " THEN 3710
3720 IF SAMPLE$="y" THEN GOTO 9010
3730 RETURN: '***************************************************************
3800 REDO%=10: CLS:OPTF$="0": LOCATE 2,38:PRINT "MENU 3":LOCATE 6,1:PRINT "Select an option."
3810 LOCATE 8,33:PRINT "1. Return to GRAPH": LOCATE 10,33:PRINT "2. PRINT Graph":LOCATE 12,33: PRINT "3. STORE Input":LOCATE 14,33:PRINT "4. Return to MENU 1":LOCATE 16,33: PRINT "5. Y-AXIS Options":LOCATE 18,33: PRINT "6. Display Other OPTIONS"
3820 LOCATE 6,20: INPUT Z$: IF VAL(Z$)<1 OR VAL(Z$)>6 THEN BEEP: GOTO 3820: ELSE OPT3=VAL(Z$)\1
3830 ON OPT3 GOTO 670,670,3840,400,4100,3900
3840 LOCATE 22,1: PRINT "Enter the name under which the file shall be saved."
3850 LOCATE 22,55:INPUT DATUM$: FOR K=1 TO LEN(DATUM$):IF MID$(DATUM$,K,1)="." THEN 3860: ELSE NEXT
3860 IF K>9 THEN K=9
3870 DATUM$=LEFT$(DATUM$,K-1): NEWFILE$=DATUM$+".bar": GOSUB 4200
3880 GOSUB 5700: LOCATE 22,1:PRINT "The file named ";DATUM$;" has been saved.": LOCATE 6,20: PRINT "    ": GOTO 3820
3890  '***************************************************************
3900 REDO%=11: KEY (1) ON: CLS:OPT4=0: G$="n": LOCATE 2,38:PRINT "MENU 4":LOCATE 6,1:PRINT "Select an option."
3910 LOCATE 9,28:PRINT "1. Change HORIZONTAL AXIS":LOCATE 11,28:PRINT "2. Display DATA": LOCATE 13,28: PRINT "3. Change TITLES":LOCATE 17,28:PRINT "5. Display GRAPH":LOCATE 19,28:PRINT "6. Return to MENU 3"
3920 LOCATE 15,28:IF GRID$<>"y" THEN PRINT "4. Add GRID Lines":ELSE PRINT "4. Delete GRID Lines"
3930 LOCATE 6,20: INPUT Z$: IF VAL(Z$)<1 OR VAL(Z$)>6 THEN BEEP: GOTO 3930:ELSE OPT4=VAL(Z$)
3940 ON OPT4 GOTO 3950,5500,1700,4060,670,3800
3950 GOSUB 4050
3960 IF R$="y" THEN R$="n": GOTO 4010
3970 LOCATE 23,1: GOSUB 5900
3980 IF R$="y" THEN 4030
3990 IF R$<>"n" THEN BEEP: GOTO 3970
4000 GOSUB 4050
4010 LOCATE 23,1:PRINT "Enter the value of the horizontal axis.";
4020 LOCATE 23,50:INPUT Z$: REF#=VAL(Z$) :IF REF#>=1.00000000000000e+16# THEN BEEP: GOTO 4020
4030 GOSUB 1860: GOSUB 4050
4040 LOCATE 23,1:PRINT "Anything else?":LOCATE 6,21:PRINT "  ";: GOTO 3930
4050 LOCATE 23,1:FOR J=1 TO 19:PRINT "    ";:NEXT: RETURN
4060 IF G$="n" THEN IF GRID$<>"y" THEN GRID$="y":ELSE GRID$="n"
4070 G$="y": GOTO 4040 '*****************************************************
4100 REDO%=14: CLS: SV=YOPT: LOCATE 2,37:PRINT "Y-AXIS":LOCATE 6,1:PRINT "Select an option.":LOCATE 8,1:PRINT "This option determines how the tick values":LOCATE 9,1:PRINT "are calculated. The default option is 1"
4110 LOCATE 14,28:PRINT "1. INTEGERS (rounding occurs)":LOCATE 16,28:PRINT "2. EXACT (to four digits)":LOCATE 18,28:PRINT "3. PERCENTAGES (rounded to integers)":GOSUB 5800
4120 LOCATE 6,20:INPUT Z$: IF VAL(Z$)<1 OR VAL(Z$)>3 THEN BEEP: GOTO 4120: ELSE YOPT=VAL(Z$)
4130 GOSUB 5800: IF PRCENT$="n" AND YOPT=3 THEN 4120:ELSE IF SV=YOPT THEN 3800: ELSE GOSUB 1810: GOTO 3800
4200 OPEN NEWFILE$ FOR OUTPUT AS #1:KEY (1) STOP: KEY (9) STOP
4210 PRINT#1,N,MTH%,YR,YRS,OPT,REF#,YOPT,DUMMY1,DUMMY2,
4220 FOR I=0 TO N: PRINT#1,M#(I),:NEXT
4230 IF OPT<>4 THEN 4250
4240 FOR I=0 TO N: PRINT#1,S(I),W(I+1):NEXT
4250 PRINT#1,TITLE$(1);",";TITLE$(2);",";TITLE$(3);",";QOPT$;",";R$;",";DOOP$;",";GRID$;",";DUMMY1$;",";DUMMY2$
4260 IF OPT<>4 THEN 4280
4270 FOR I=0 TO N: PRINT#1,LABEL$(I);",";:NEXT
4280 CLOSE #1: KEY (9) ON: KEY (1) ON: RETURN '*****************************
4300 REDO%=12: CLS: LOCATE 2,38:PRINT "FILES":LOCATE 4,1:PRINT "Select an option.":LOCATE 6,1:PRINT "1. Return          2. Erase
4310 LOCATE 10: FILES "*.bar"
4320 LOCATE 4,20:INPUT OPTF$: IF OPTF$<>"1" AND OPTF$<>"2" THEN BEEP: GOTO 4320
4330 IF OPTF$="1" THEN 400: ELSE 4400   '********************************
4400 REDO%=13: GOSUB 4500: LOCATE 5,1: PRINT "Enter the name of the file to be erased "
4410 LOCATE 5,42:INPUT GONE$: IF GONE$="/" THEN 400
4420 FOR K=1 TO LEN(GONE$):IF MID$(GONE$,K,1)="." THEN 4430: ELSE NEXT
4430 IF K>9 THEN K=9
4440 GONE$=LEFT$(GONE$,K-1): GONER$=GONE$+".bar": KILL GONER$: GOTO 4400
4450 LOCATE 6,30:PRINT "This name must be on the list.":GOTO 4410
4500 LOCATE 3,1: FOR K2=1 TO 20: PRINT "                    ";:NEXT:RETURN
4600 OPEN OLDFILE$ FOR INPUT AS #1
4610 IF EOF(1) THEN CLOSE: GOTO 4710
4620 INPUT#1,N,MTH%,YR,YRS,OPT,REF#,YOPT,DUUMY1,DUMMY2
4630 FOR I=0 TO N: INPUT#1,M#(I):NEXT
4640 IF OPT<>4 THEN 4660
4650 FOR I=0 TO N: INPUT#1,S(I),W(I+1):NEXT
4660 IF EOF(1) THEN 4700
4670 INPUT#1,TITLE$(1),TITLE$(2),TITLE$(3),QOPT$,R$,DOOP$,GRID$,DUMMY1$,DUMMY2$
4680 IF OPT<>4 THEN 4700
4690 FOR I=0 TO N: INPUT#1,LABEL$(I):NEXT
4700 CLOSE #1
4710 IF OPT=4 THEN GOSUB 5480
4720 IF OPT=1 THEN GOSUB 950
4730 IF OPT=2 THEN GOSUB 1210
4740 IF OPT=3 THEN GOSUB 1590
4750 RETURN 660: '***********************************************************
4800 FOR I=1 TO 25:FOR J=1 TO 80: X=SCREEN (I,J)
4810 IF I=1 AND J=80 THEN X=160
4820 IF X<192 THEN 4900
4830 IF X=218 THEN X=200
4840 IF X=192 THEN X=170
4850 IF X=196 THEN X=172
4860 IF X=197 THEN X=206
4870 IF X=223 THEN X=175
4880 IF X=219 THEN X=223
4890 IF X=249 THEN X=32
4900 LPRINT CHR$(X);:NEXT:NEXT: IF SAMPLE$="y" THEN RETURN 9010: ELSE RETURN 730: '*********************************************
5000 REDO%=15: CLS:LOCATE 2,34:PRINT "Do-It-Yourself":LOCATE 6,1:PRINT "Select an option.":LOCATE 10,22:PRINT "1. Set constant bar width and spacing":LOCATE 12,22:PRINT "2. Enter widths and spaces individually"
5010 LOCATE 6,19: IF OPT4=2 THEN PRINT "? ";DOOP$: GOTO 5030
5020 INPUT DOOP$: IF DOOP$<>"1" AND DOOP$<>"2" THEN BEEP: GOTO 5010
5030 IF DOOP$="1" THEN LOCATE 16,1:PRINT "Enter the WIDTH (same for each bar)":LOCATE 18,1:PRINT "Enter the SPACE (between bars)": ELSE IF OPT4<>2 THEN 5200: ELSE 5130
5040 LOCATE 16,40:IF OPT4<>2 THEN INPUT Z$: IF VAL(Z$)<1 OR VAL(Z$)>71 THEN BEEP: GOTO 5040: ELSE W=VAL(Z$)\1: GOTO 5060
5050 PRINT W: GOTO 5060
5060 LOCATE 18,40:IF OPT4<>2 THEN INPUT Z$:IF VAL(Z$)<0 OR VAL(Z$)\1+W>71 THEN BEEP: GOTO 5060:ELSE S=VAL(Z$)\1: GOTO 5080
5070 PRINT S: GOTO 5130
5080 I=1
5090 I=I+1: IF W*I+S*(I-1)<=71 THEN 5090
5100 IMAX=I-1
5110 LOCATE 21,22: PRINT "The maximum number of bars will be";I-1
5120 LOCATE 23,22: PRINT "If more than this are needed, press Q."
5130 LOCATE 1,79: PRINT "*": K$=INKEY$: IF K$="q" AND OPT4<>2 THEN LOCATE 22,36:PRINT "    ": LOCATE 1,79: PRINT " ";:GOTO 5040
5140 IF K$<>" " THEN 5130: ELSE IF OPT4=2 THEN 5510 '************************
5200 PAGE=0: L=0: SV%=L: RE16$="n"
5210 REDO%=16: CLS:PAGE=PAGE+1: IF RE16$="y" THEN PAGE=PAGE-1
5220 LOCATE 2,30:PRINT "Do-It-Yourself":LOCATE 5,5:PRINT "Label":LOCATE 5,34:PRINT "Value":IF DOOP$="2" THEN LOCATE 5,55:PRINT "Space":LOCATE 5,68:PRINT "Width";
5230 IF DOOP$="2" AND OPT4<>2 THEN LOCATE 23,1:PRINT "You have used ";:PRINT USING "###";L;:PRINT " of 71 print positions. There are ";:PRINT USING "###";71-L;:PRINT " remaining.";
5240 IF OPT4=2 THEN RETURN
5250 IF PAGE>1 THEN 5270
5260 I=-1
5270 IF RE16$="y" THEN I=(PAGE-1)*15-1: RE16$="n"
5280 I=I+1: IF DOOP$="1" AND I=IMAX THEN 5410
5290 IF L=71 THEN 5410
5300 IF I=PAGE*15 THEN I=I-1: SV%=L: GOTO 5210
5310 J=7-(PAGE-1)*15: LOCATE I+J,1:PRINT USING "##";I+1;:PRINT "."
5320 LOCATE I+J,5:INPUT LABEL$(I):IF LABEL$(I)="/" THEN 5410
5330 X=LEN(LABEL$(I)):IF X>26 THEN BEEP: GOTO 5320
5340 LOCATE I+J,34:INPUT Z$: M#(I)=VAL(Z$):IF ABS(M#(I))>999999999999999# THEN BEEP:GOTO 5340
5350 IF DOOP$="1" THEN Y=W: GOTO 5400
5360 LOCATE I+J,55:INPUT Z$: S(I)=VAL(Z$)\1:IF S(I)>70 OR S(I)<0 THEN BEEP :GOTO 5360: ELSE Y=S(I)
5370 L=L+Y:IF L>71 THEN L=L-Y: BEEP:GOTO 5360: ELSE GOSUB 5600
5380 LOCATE I+J,68:INPUT Z$: W(I+1)=VAL(Z$)\1 :IF W(I+1)>71 OR L+W(I+1)>71 THEN BEEP: GOTO 5380: ELSE IF W(I+1)<1 THEN L=L-Y:GOSUB 5600: GOTO 5320
5390 L=L+W(I+1): GOSUB 5600: Y=W(I+1)
5400 LABEL$(I)=LEFT$(LABEL$(I),Y): GOTO 5280
5410 N=I-1: IF N=-1 THEN 400: ELSE GOSUB 5700
5420 LOCATE 23,1: GOSUB 5900
5430 IF R$="y" THEN 5470
5440 IF R$="n" THEN GOSUB 5700 :ELSE BEEP: GOTO 5420
5450 LOCATE 23,1:PRINT "Enter the value of the horizontal axis.";
5460 LOCATE 23,50:INPUT Z$: REF#=VAL(Z$) :IF REF#>=1.00000000000000e+16# THEN BEEP: GOTO 5460
5470 IF DOOP$="2" THEN 5480: ELSE FOR I=1 TO N+1: W(I)=W: S(I)=S:NEXT: S(0)=0: W(0)=0
5480 XL=0: FOR I=0 TO N+1: XL=XL+S(I)+W(I):NEXT: XL=XL-S(N+1)
5490 IF OP$="1" OR SAMPLE$="y" THEN RETURN :ELSE RETURN 650 '***************
5500 KEY (1) OFF: IF OPT<>4 THEN 5570: ELSE 5000
5510 GOSUB 5200: IF PAGE>1 THEN 5530
5520 I=-1
5530 I=I+1:IF I<>PAGE*15 THEN 5550
5540 LOCATE 1,79: PRINT "*": K$=INKEY$: IF K$<>" " THEN 5540: ELSE IF I-1=N THEN 3900: ELSE : GOSUB 5210
5550 J=7-(PAGE-1)*15:LOCATE I+J,1:PRINT USING "##";I+1;:PRINT ".";:LOCATE I+J,7:PRINT LABEL$(I):LOCATE I+J,36:PRINT M#(I);:IF DOOP$="2" THEN LOCATE I+J,57:PRINT S(I);:LOCATE I+J,70: PRINT W(I+1);
5560 IF I<N THEN 5530: ELSE I=I+1: GOTO 5540
5570 ON OPT GOSUB 1000,1190,1540: LOCATE 1,79,0:PRINT "*";
5580 K$=INKEY$: IF K$<>" " THEN 5580: ELSE 3900  '************************
5600 LOCATE 23,15:PRINT USING "###";L;:LOCATE 23,52:PRINT USING "###";71-L;:RETURN  '*********************************************************************
5700 LOCATE 22,1: FOR I=1 TO 19: PRINT "        ";:NEXT: RETURN '***********
5800 IF PRCENT$="n" AND YOPT=3 THEN BEEP: LOCATE 22,1:PRINT "The PERCENTAGE option can be chosen only if all data":PRINT "is non-negative and the total is positive.";
5810 RETURN  '***************************************************************
5900 INPUT "Display the data relative to the average value (Y or N) ";R$: IF R$="Y" THEN R$="y": ELSE IF R$="N" THEN R$="n"
5910 RETURN '****************************************************************
7000 IF ERR<>71 THEN 7020: ELSE CLS: BEEP:LOCATE 13,25:PRINT "Did you remove the diskette?": LOCATE 1,79: PRINT "*": IF REDO%=10 THEN 7120
7010 K$=INKEY$: IF K$<>" " THEN 7010: ELSE IF SAMPLE$="y" THEN RESUME 310: ELSE IF REDO%=13 THEN RESUME 4300: ELSE RESUME 400
7020 IF ERR<>62 THEN 7040: ELSE CLS: BEEP:LOCATE 10,20:PRINT "The file you have accessed can not be used.":LOCATE 12,20:PRINT "It probably wasn't stored during execution":LOCATE 14,20:PRINT "of this program. The disk might have been full,"
7030 LOCATE 16,20:PRINT "or this might be a bug.":LOCATE 1,79:PRINT "*":GOTO 7050
7040 IF SAMPLE$<>"y" THEN 7060: ELSE CLS: LOCATE 13,39:PRINT "Fin":LOCATE 1,79:PRINT "*":GOTO 7050
7050 K$=INKEY$: IF K$<>" " THEN 7050: ELSE RESUME 400
7060 IF REDO%=1 AND OP$="1" THEN BEEP:GOSUB 5700: LOCATE 23,1: PRINT "No file named ";FILE$;" has been saved.";: RESUME 440
7070 IF ERR=53 AND REDO%=13 THEN  BEEP:RESUME 4450
7080 IF OP$="3" AND ERR=64 THEN BEEP:RESUME 4450
7090 IF ERR<>61 THEN 7100: ELSE CLS:BEEP:LOCATE 10,20:PRINT "The disk appears to be full.":LOCATE 12,20:PRINT "The file you have attempted to save might":LOCATE 14,20:PRINT "not have been completely stored.":LOCATE 1,78:PRINT "*" : GOTO 7120
7100 IF REDO%=10 AND OPT3=3 THEN LOCATE 23,48: PRINT "This name is invalid.";:BEEP:RESUME 3850
7110 IF ERR<>27 THEN 7130 ELSE CLS: BEEP:LOCATE 8,20:PRINT "Either your printer is not plugged in,":LOCATE 10,20:PRINT "not connected to the computer,":LOCATE 12,20:PRINT "out of paper, or worse....":LOCATE 1,79:PRINT "*"
7120 K$=INKEY$: IF K$<>" " THEN 7120: ELSE RESUME 3800
7130 IF REDO%=12 AND ERR=53 THEN BEEP:LOCATE 13,30:PRINT "No files have been stored.": LOCATE 1,79:PRINT "*": ELSE 7150
7140 K$=INKEY$: IF K$<>" " THEN 7140 ELSE RESUME 400
7150 IF ERR=24 THEN CLS: LOCATE 13,30:PRINT "Check your printer.": BEEP:LOCATE 1,79:PRINT "*":GOTO 7120
8000 IF REDO%>8 THEN 8020: ELSE IF REDO%>4 THEN 8010:ELSE IF REDO%=1 THEN RETURN 400: ELSE IF REDO%=2 THEN RETURN 800: ELSE IF REDO%=3 THEN RETURN 900: ELSE IF REDO%=4 THEN RETURN 1000
8010 IF REDO%=5 THEN RETURN 1100: ELSE IF REDO%=6 THEN RETURN 1190: ELSE IF REDO%=7 THEN RETURN 1500: ELSE IF REDO%=8 THEN  RETURN 1540
8020 IF REDO%>12 THEN 8030: ELSE IF REDO%=9 THEN RETURN 1700: ELSE IF REDO%=10 THEN RETURN 3800: ELSE IF REDO%=11 THEN RETURN 3900: ELSE IF REDO%=12 THEN RETURN 4300
8030 IF REDO%=13 THEN RETURN 4400: ELSE IF REDO%=14 THEN RETURN 4100: ELSE IF REDO%=15 THEN RETURN 5000: ELSE IF REDO%=16 THEN RE16$="y": L=SV%: RETURN 5210
9000 KEY (3) OFF: SAMPLE$="y":Z$=""
9010 Z$=Z$+"s": OLDFILE$=Z$+".bar": GOTO 4600

BASMENU.BAS

10 DIM PROG$(64)
20 SCREEN 0:KEY OFF:KEY 1,"run"+CHR$(34)+"basmenu"+CHR$(13)
30 CLS:WIDTH 80:COLOR 0,0:FILES "*.bas"
40 FOR DR%=1 TO 24
50 FOR DC%=0 TO 65 STEP 13
60 IF CHR$(SCREEN(DR%,DC%+1)) = " " THEN 130
70 AR%=AR%+1
80 FOR L%=1 TO 8
90 PROG$(AR%)=PROG$(AR%)+CHR$(SCREEN(DR%,DC%+L%))
100 NEXT L%
110 NEXT DC%
120 NEXT DR%
130 P=0:I%=0:CLS:WIDTH 40:LOCATE 1,4:COLOR 14,0
135 PRINT "BASIC programs on this diskette:"
140 FOR DC%=1 TO 27 STEP 13
150 FOR DR%=3 TO 23
160 I%=I%+1
170 IF PROG$(I%)="" THEN 200 ELSE LOCATE DR%,DC%
175 COLOR 0,7:PRINT USING "##";I%;
176 COLOR 7,0:PRINT " ";PROG$(I%)
180 NEXT DR%
190 NEXT DC%
200 LOCATE 25,1:INPUT "Enter number of program desired: ",P
210 IF P < 1 OR P >= I% THEN 130
220 WIDTH 80:CLS:PRINT "Press F1 to return to menu when finished":RUN PROG$(P)

BIRDS.BAS

5 DEFINT A-Z
7 RANDOMIZE VAL(MID$(TIME$,7,2))
8 CLS
10 WHILE 1=1
15    BIRD = INT(RND*4)+1
18    LOCATE 1,1
20    ON BIRD GOTO 30, 40, 50, 60
30    GOSUB 200  : GOTO 100
40    GOSUB 400  : GOTO 100
50    GOSUB 600  : GOTO 100
60    GOSUB 1000 : GOTO 100
100   IF INKEY$ <> "" THEN STOP
105   SOUND 32000,RND*50+20
110   IF RND>0.95 THEN SOUND 32000,RND*500
112   PRINT BIRD
115   IF INKEY$ <> "" THEN STOP
120 WEND
130 STOP
180 '
190 '***************** bird1 *****************
200 PLAY "l64 mb ml t255 n64n66n68n70 p64"
210 PLAY "l64 mb ml t255 n66n68n70n72n74n76n78 p64"
220 PLAY "l64 mb ml t255 n66n68n70n72 p64"
230 PLAY "l64 mb ml t255 n64n66n68n70 p64"
240 PLAY "l64 mb ml t255 n70n72n74n76n78n80 p64"
250 PLAY "l64 mb ml t255 n66n68n70n72 p64"
260 RETURN
380 '
390 ' *************** bird2 ****************
400 PLAY " mf ml l62 t255 n64n66n68n70 p64"
410 PLAY " mf ml l62 t255 n66n68n70n72n74n76n78 p64"
420 PLAY "mf ml l62 t255 n64n66n68n70 p64"
430 PLAY "mf ml l62 t255 n70n72n74n76n78n80 p64"
440 '
450 PLAY " mf ml l62 t255 n64n66n68n70 p64"
460 PLAY " mf ml l62 t255 n66n68n70n72n74n76n78 p64"
470 PLAY "mf ml l62 t255 n64n66n68n70 p64"
480 PLAY "mf ml l62 t255 n70n72n74n76n78n80 p64"
490 '
500 PLAY "mf ml l62 t255 n66n70n66n70n66n70n74n74"
510 PLAY "mf ml l62 t255 n66n70n66n70n66n70n74n74"
550 RETURN
590 ' **************** bird4 *********************
600 'Song Sparrow  (Wallace Intro to Orn.  Macmillan pg 406)
610 PLAY "l50 mb ml t255 o5 f#gf#gp64 f#gf#gp64 "
620 PLAY "l50 mb ml t255 o5 f#gf#gp64 f#gf#gp64 "
630 PLAY "l50 mb ml t255 o5 aa#ba#aa#ba#a"
640 PLAY "l50 mb ml t255 o5 p32 bbbbbb p64"
650 PLAY "l50 mb ml t255 o5 f#gp64 f#gp64 f#gp64 f#gp64 f#g "
690 RETURN
990 ' ***************** bird5 ********************
1000 'Eastern Meadow Lark  (Wallace Intro to Orn.  Macmillan pg 406)
1010 PLAY "l60 mb ml t255 o5 g+g+a g+g+a g+g+a g+g+a"
1020 PLAY "l60 mb ml t255 o5 g+g+a g+g+a g+g+a g+g+a p32"
1030 PLAY "l60 mb ml t255 o5 b-b-bb-b-bb-b-b"
1040 PLAY "l60 mb ml t255 o5 b-b-bb-b-bb-b-bp32"
1050 PLAY "l60 mb ml t255 o5 a+a+aa+aa+ aa a- g+g+ g g-g f+f+ fff+fff+f p64"
1090 RETURN

BKSPACE.BAS



5000 REM THIS PATCH TO THE COMM SOFTWARE THAT COMES ON THE DOS DISK USES
5010 REM A RESIDENT ROUTINE TO PERFORM A PROGRAMMED BACKSPACE
5020 REM (SUB 2720). IT CHECKS EACH CHARACTER AND EXECUTES BACKSPACE
5030 REM AS REQUIRED. LINE 5115 IS OPTIONAL AND PROVIDES FOR PRINTING
5040 REM OF THE KEYBOARD AND OTHER INPUT DATA UTILIZING THE PARALLEL
5050 REM PRINTER PORT. THIS CAPABILITY IS ACTIVATED BY ENTERING VALUE
5060 REM IPRR=TRUE AT LINE 1820 AND THE PRINTER IS TURNED OFF BY
5070 REM SETTING VALUE IPRR=FALSE.
5080 REM * PUBLIC DOMAIN SOFTWARE *
5106 L2NH=LEN(B$):FOR ALLF=0 TO L2NH:B2B$=MID$(B$,ALLF+1,1)
5107 IF B2B$=CHR$(8) THEN GOSUB 2720:GOTO 5117
5110 IF LL<>IWT OR B2B$<>CR$ THEN PRINT B2B$; ELSE 5117
5115 IF IPRR THEN LPRINT B2B$;
5117 NEXT ALLF

BLKLETER.BAS

1 REM:BLKLETTER 4/2/82 BY J.R.HIND, ENTERED BY BOB ROSENFELD
5 CLS
10 GOSUB 40
20 LINE INPUT "Enter up to 10 characters: ";BLKL$
30 TIME$="00:00:00":GOSUB 50:PRINT TIME$
35 END
40 PL$=SPACE$(80):BLK$=CHR$(&HDF):RETURN
50 MM%=LEN(BLKL$)-1:FOR LL%=1 TO 8:LSET PL$=" ":DEF SEG=&HFFA6
60 FOR II%=0 TO MM%:JJ%=PEEK(&HD+LL%+ASC(MID$(BLKL$,II%+1,1))*8)
70 FOR KK%=8 TO 1 STEP -1:IF JJ%AND &H1 THEN MID$(PL$,II%*8+KK%,1)=BLK$
80 JJ%=JJ%\2:NEXT KK%:NEXT II%:LPRINT PL$; :NEXT LL%
90 DEF SEG :RETURN

COREFIX.BAS

7999 GOSUB 8000: END
8000 DEF SEG: BCOLS%=PEEK(&H29): D$="     ": F$="|"
8010 IF BCOLS%=80 THEN DCOL1%=1:DLEN%=67:P$=" " ELSE DCOL1%=8:DLEN%=39:P$=""
8020 HD$="  dec  hex "+P$+" 0 1 2 3  4 5 6 7  8 9 A B  C D E F   0123456789ABCDEF"
8030 I%=0: INPUT "What segment address (&Hnnnn or -1 for Basic)";B
8040 IF B=-1 THEN DEF SEG: ELSE DEF SEG=B
8045 CLS: PRINT SPC((DLEN%-12)/2);
8050 IF B=-1 THEN PRINT "Basic Segment"; ELSE PRINT "Segment ";RIGHT$("0000"+HEX$(B),4);
8060 PRINT:PRINT:PRINT MID$(HD$,DCOL1%,DLEN%);: IF DLEN%<BCOLS% THEN PRINT
8065 PRINT STRING$(DLEN%,"-");: IF DLEN%<BCOLS% THEN PRINT
8070 FOR I%=I% TO I%+15:II%=16*I%
8080 RSET D$=STR$(II%):H$=D$:RSET D$=HEX$(II%):H$=H$+D$+P$:A$="  "+F$
8090 FOR J%=0 TO 15
8100 IF J% AND 3 THEN ELSE H$=H$+" "
8110 C%=PEEK(II%+J%): IF C%<16 THEN H$=H$+"0"
8120 H$=H$+HEX$(C%)
8130 IF (C%>31) AND (C%<126) THEN A$=A$+CHR$(C%):ELSE A$=A$+"."
8140 NEXT J%
8150 PRINT MID$(H$+A$+F$,DCOL1%,DLEN%);: IF DLEN%<BCOLS% THEN PRINT
8160 NEXT I%
8170 PRINT "Use q to quit, r to restart, = to redisplay, null for next page:"
8172 PRINT "Edit the hex display and `enter' each line to modify storage."
8175 LOCATE 12,30,1
8180 B$=INKEY$:IF B$="" THEN 8180
8182 IF ASC(B$)>0 THEN GOTO 8190  'Not a cursor key, so no patching to do.
8184 CO%=CSRLIN: LINE INPUT B$: C%=CSRLIN
8185 'Due to LINE INPUT features we must play games to get the whole line the user modified if he modifies the line the cursor starts on.
8186 IF CO%=C%-1 THEN DEF SEG=&H40: POKE &H1E,0:POKE &H1F,72:POKE &H20,13:POKE &H21,0:POKE &H1A,&H1E:POKE &H1C,&H22: DEF SEG=B: GOTO 8184
8187 LOCATE C%-1,30,1  'To put the cursor in a more convenient place.
8188 IF C%>21 OR C%<4 THEN B$=LEFT$(B$,1): GOTO 8195 ELSE GOSUB 8300: GOTO 8180
8190 DEF SEG=&H40: POKE &H1A,PEEK(&H1C)
8195 IF B$="q" OR B$="/" THEN LOCATE 23,1:DEF SEG:RETURN
8197 IF B$="=" THEN I%=I%-16: GOTO 8040
8198 IF B$=CHR$(13) THEN GOTO 8040
8200 IF B$="r" THEN LOCATE 23,1: GOTO 8030 ELSE PRINT CHR$(7);: GOTO 8180
8299 REM -----------Subroutine to do the core patching -------------
8300 IF BCOLS%=80 THEN B$=MID$(B$,8,40)
8310 AT$=LEFT$(B$,3):IF ASC(AT$)=32 THEN AT$=RIGHT$(AT$,2)
8315 IF AT$=" 0" THEN AT$="0"
8320 OFFSET%=VAL("&H"+AT$): IF BCOLS%=80 THEN B$=MID$(B$,6) ELSE B$=MID$(B$,5)
8340 FOR II%=0 TO 15: POKE OFFSET%+II%,VAL("&H"+LEFT$(B$,2)): B$=MID$(B$,3)
8345 IF LEN(B$)<2 THEN RETURN
8350 IF ASC(B$)=32 THEN B$=MID$(B$,2)
8360 NEXT II%
8370 RETURN

DWNLOAD.BAS





100 REM * PUBLIC DOMAIN SOFTWARE *
110 REM THIS MOD TO THE COMM PROGRAM ON THE DOS DISK WILL AUTOMATICALLY
120 REM DOWNLOAD PROGRMAS FROM FORUM-80 OR CONNECTION-80 BBS AND SAVE THE
130 REM FILE TO DRIVE B AS "DWNLD1.TXT". ADDITIONAL FILES WILL HAVE NUMBERS
140 REM 2,3,...ETC.  IF YOU WANT TO ADD AUTO LOGON THE ADD THE FOLLOWING:
150 REM 365 IF MID$(A$,I,1)=CHR$(5) THEN PRINT#1,AUTOLOGON$
160 REM (THE AUTOLOGON IS IN THE FORM:FIRSTNAME;LASTNAME;CITY;STATE)
366 IF MID$(A$I,1)=CHR$(18) THEN GOTO 22000
22000 REM -DOWNLOAD-
22010 FILENUMBER=FILENUMBER+1:X$=STR$(FILENUMBER):X$=RIGHT$(X$,LEN(X$)-1)
22020 FILENAME$="B:DWNLD"+X$+".TXT"
22030 OPEN FILENAME$ FOR OUTPUT AS #4
22040 LINE INPUT #1,A$
22050 FOR I=1 TO LEN(A$)
22060 IF MID$(A$,I,1)=CHR$(20) THEN A$=LEFT$(A$,I-1):PRINT #4,A$: CLOSE #4: GOTO 290
22070 NEXT I
22080 PRINT #4,A$:PRINT #2,A$
22090 GOTO 22040

FILES014.TXT

Disk No 14
Program Title: BARGRAPH
PC-SIG version 1

Usage: utility

System Requirements: IBM PC or close compatible, 2 disk drives, printer,
                     and Dos 2.0 or later and a version of BASIC.

File Descriptions:

BASMENU  BAS  Automatic menu for basic programs
METEOR   BAS  Fast-moving game using cursor movement keys
YAHTZEE  BAS  Yahtzee game rolls the dice & keeps score
COREFIX  BAS  Basic program to inspect & patch storage
BIRDS    BAS  Sound effects
BLKLETER BAS  Generate block letters on the printer
SPSHIPS  BAS  Sound effects
TICKTOCK BAS  Sound effects
FINANCE  BAS  Large package of financial programs
SHELLSRT BAS  Shell-metzger sort written in basic
SORT     BAS  Another sort written in basic
PDSOFTWR DOC  Package of public domain software
ASYN-PGM BAS  Asynchronous communication program
BKSPACE  BAS  Patch for dos-disk comm.bas to handle backspaces
DWNLOAD  BAS  Patch for dos-disk comm.bas to download files
PRINTER  BAS  Patch for dos-disk comm.bas to toggle printer
BRKEVEN  VC   Visicalc program - break-even points
COSINES  VC   Visicalc program - calculate table of cosines
FEDTAX   VC   Visicalc program - federal income tax
GRAPHS   VC   Visicalc program - plotting points
HOMEBDGT VC   Visicalc program - home budget program
PRTSETUP VC   Visicalc printer setup hints
------------  Bargraph
BARGRAPH BAS  Program to produce bargraphs on the mono display - well liked
BACKLOG  BAR  Sample bargraph input
FCST     BAR  Part of bargraph
PLANACT  BAR  Part of bargraph
QTR2G    BAR  Part of bargraph
S        BAR  Part of bargraph
SS       BAR  Part of bargraph
SSS      BAR  Part of bargraph
SSSSS    BAR  Part of bargraph
SSSSSS   BAR  Part of bargraph
YR17     BAR  Part of bargraph
YR20     BAR  Part of bargraph


PC-SIG
1030D E Duane Avenue
Sunnyvale Ca. 94086
(408) 730-9291
(c) Copyright 1987 PC-SIG

FINANCE.BAS

5 REM * PUBLIC DOMAIN SOFTWARE *
10 COLOR 15:CLS:KEY OFF:SCREEN 0,0,0:WIDTH "SCRN:",80
20 ON ERROR GOTO 4010
30 PRINT "ENTER THE NUMBER OF ONE OF THE FOLLOWING PROGRAMS:"
40 PRINT
50 PRINT "   1 - PRESENT VALUE OF A FUTURE SUM"
60 PRINT "   2 - SIMPLE INTEREST FOR DAYS"
70 PRINT "   3 - FUTURE VALUE OF A PRESENT SUM"
80 PRINT "   4 - AMORTIZATION SCHEDULE"
90 PRINT "   5 - INTEREST RATE - COMPOUND INTEREST"
100 PRINT "   6 - INTEREST RATE - INSTALLMENT LOAN"
110 PRINT "   7 - DAYS BETWEEN DATES"
120 PRINT "   8 - TERM OF AN INSTALLMENT LOAN"
130 PRINT "   9 - PRESENT VALUE OF A SERIES OF PAYMENTS"
140 PRINT "  10 - REAL ESTATE CAPITAL INVESTMENT"
141 PRINT "  11 - NOMINAL & EFFECTIVE INTEREST RATES
142 PRINT "  12 - INTERNAL RATE OF RETURN
143 PRINT "  13 - FUTURE VALUE OF REGULAR DEPOSITS
144 PRINT "  14 - REGULAR DEPOSITS FOR FUTURE VALUE
145 PRINT "  15 - DEPRECIATION - AMOUNT
146 PRINT "  16 - DEPRECIATION - RATE
147 PRINT "  17 - DEPRECIATION - SALVAGE VALUE
148 PRINT "  18 - DEPRECIATION - SCHEDULE
149 PRINT "  19 - BOND - PRESENT VALUE
150 PRINT "  20 - BOND - YIELD TO MATURITY
151 PRINT:INPUT "TYPE PROGRAM NUMBER (OR SPACE BAR TO EXIT) AND PRESS 'ENTER'";F
160 IF F<1 THEN END
170 ON F GOTO 190,390,550,720,1030,1310,1670,1940,2220,2510,4220,4380,4630,4820,4950,5100,5190,5290,5590,5750
180 RUN
190 F=0:R=0:M=0:N=0
200 CLS:PRINT:PRINT "THIS PROGRAM CALCULATES THE PRESENT VALUE OF"
210 PRINT "A FUTURE SUM, DISCOUNTING IT FOR A PARTICULAR"
220 PRINT "INTEREST RATE, COMPOUNDED AS INSTRUCTED."
230 PRINT:INPUT "STATE THE FUTURE SUM, IN DOLLARS ";F
240 INPUT "STATE THE ANNUAL INTEREST RATE, IN % ";R
250 INPUT "STATE THE NUMBER OF PERIODS IN ONE YEAR ";M
260 INPUT "STATE THE NUMBER OF PERIODS TO BE CALCULATED ";N
270 I=R/M:I=I/100
280 T=1+I:A=T
290 IF N=1 GOTO 310
300 FOR X=1 TO (N-1):S=A*T:A=S:NEXT X
310 P=F/A:CLS:PRINT:PRINT:PRINT
320 PRINT " A FUTURE SUM OF $";F;" FOR ";N;" PERIODS,"
330 PRINT " WHERE THERE ARE";M;"PERIODS PER YEAR AT"
340 PRINT R;"% PER YEAR IS WORTH, IN  TODAY'S DOLLARS:"
350 PRINT:PRINT TAB(30);"$";P
360 PRINT:INPUT "PRESS ENTER TO RETURN. ";A$
370 RUN
380 END
390 P=0:D=0:R=0
400 CLS:PRINT:PRINT "THIS ROUTINE CALCULATES SIMPLE INTEREST ON
410 PRINT "DOLLARS HELD IN DEPOSIT FOR A SPECIFIED PERIOD
420 PRINT "USING A SPECIFIED PERCENTAGE OF INTEREST.":PRINT
430 INPUT "HOW LARGE IS THE DEPOSIT (IN DOLLARS)";P
440 INPUT "HOW LONG WILL YOU LEAVE IT IN (IN DAYS)";D
450 INPUT "WHAT INTEREST RATE DO YOU EXPECT (IN %)";R
460 CLS:PRINT:PRINT:PRINT "FOR A STARTING PRINCIPAL OF $";P;"AT A"
470 PRINT "RATE OF";R;"% FOR ";D;"DAYS, THE INTEREST"
480 PRINT "AMOUNTS TO $";
490 I=R/100/365*D*P
500 IF I>327.68 GOTO 520
510 I=INT(I*100+0.5)/100
520 PRINT TAB(12);I;"OR $";I/D;"PER DAY.":PRINT:PRINT:PRINT
530 INPUT "PRESS ENTER TO RETURN.";A$:RUN
540 END
550 CLS:P=0:R=0:M=0:N=0
560 PRINT:INPUT "ENTER PRESENT SUM, IN DOLLARS:";P
570 PRINT:INPUT "ENTER ANNUAL INTEREST RATE, IN % ";R
580 PRINT:INPUT "ENTER NUMBER OF PERIODS IN ONE YEAR ";M
590 PRINT:INPUT "ENTER NUMBER OF PERIODS TO MATURITY ";N
600 I=R/M:I=I/100:T=I+1:A=T
610 IF N=1 THEN GOTO 630
620 FOR K=1 TO (N-1):S=A*T:A=S:NEXT K
630 F=P*A:CLS
640 CLS:PRINT "FOR A PRESENT SUM OF $";P;"AT AN ANNUAL"
650 PRINT "INTEREST RATE OF";R;"%, FOR ";N;"PERIODS, WHERE"
660 PRINT "THERE ARE";M;"PERIODS PER YEAR:"
670 PRINT:PRINT "THE FUTURE VALUE IS $";F
680 PRINT "THE INCREASE IS $";F-P;", OR";(F/P)*100-100;"%"
690 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU.";A$
700 RUN
710 END
720 DEFDBL I,T:C=0:P=0:L=0:R=0:M=0:CLS
730 INPUT " PRINCIPAL, DOLLARS AND CENTS ";P
740 INPUT " # OF PERIODS, IN MONTHS ";L
750 INPUT " ANNUAL INTEREST RATE, IN % ";R
760 INPUT " PAYMENT, IF  KNOWN, (ENTER) IF  NOT ";M
770 I=R/1200
780 T=1-1/(1+I)^L:K=P
790 IF M<>0 THEN GOTO 810
800 M=P*I/T
810 GOSUB 990
820 FOR Z=1 TO L
830 IF C<12 GOTO 880
840 PRINT " YEAR OF LOAN ";INT(Z-1)/12;
850 PRINT "    $";K;"FOR ";L;"MONTHS AT";R;"%"
860 INPUT "PRESS ENTER TO CONTINUE, 1 TO RETURN TO MENU ";CH:IF CH=1 THEN 10
870 C=0:GOSUB 990
880 A=P*I
890 A=INT(A*100+0.5)/100
900 M=INT(M*100+0.5)/100
910 B=M-A:P=P-B
920 B=INT(B*100+0.5)/100
930 P=INT(P*100+0.5)/100
940 PRINT USING "####    ";Z;:PRINT USING "###,###.##";P;M;B;A
950 IF  P<=0  THEN  970
960 C=C+1:NEXT Z
970 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU.";A$:RUN
980 END
990 CLS
1000 PRINT "PAYMENT   REMAINING  MONTHLY   PRINCIPAL INTEREST"
1010 PRINT "NUMBER    PRINCIPAL  PAYMENT   PAYMENT   PAYMENT
1020 RETURN
1030 CLS:PRINT:PRINT:PRINT
1040 INPUT "STATE THE FUTURE VALUE, IN $";FV
1050 IF F=2 THEN 1130
1060 INPUT "STATE THE PRESENT VALUE, IN $";PV
1070 IF F=1 THEN 1130
1080 INPUT "STATE THE NUMBER OF INTEREST PERIODS PER YEAR ";PY
1090 IF F=3 THEN 1130
1100 PRINT "STATE THE LENGTH OF TIME OF THE TOTAL FOR WHICH"
1110 PRINT "INTEREST IS TO BE FIGURED, USING THE FOLLOWING"
1120 INPUT "FORMAT (YY,MM,DD) ";Y,M,D
1130 PD=Y*PY+M*PY/12+D*PY/365
1140 I=((FV/PV)^(1/PD)-1)*100*PY
1150 A$="###.##":F=O
1160 CLS:PRINT:PRINT:PRINT "FOR A FUTURE SUM OF $";FV;"WITH A PRESENT VALUE"
1170 PRINT "OF $";PV;"WHERE THERE ARE";PY;"PERIODS PER YEAR,
1180 PRINT "OVER";Y;"YEARS,";M;"MONTHS AND";D;"DAYS, THE"
1190 PRINT "ANNUAL INTEREST RATE IS ";:PRINT USING A$;I;:PRINT " %"
1200 PRINT:PRINT "WHAT DO YOU WANT TO DO?"
1210 PRINT "   1 - CHANGE PRESENT VALUE"
1220 PRINT "   2 - CHANGE FUTURE VALUE"
1230 PRINT "   3 - CHANGE PERIODS PER YEAR
1240 PRINT "   4 - CHANGE TIME RANGE
1250 PRINT "   5 - RERUN ENTIRE PROGRAM"
1260 PRINT "   6 - RETURN TO MENU"
1270 PRINT:INPUT "ENTER THE NUMBER OF YOUR CHOICE";F
1280 IF F<1 OR F>6 THEN 1160
1290 F=INT(F):ON F GOTO 1060,1040,1080,1100,1030,10
1300 END
1310 CLEAR:F=0:CLS:DEFDBL I:A$="##.## %"
1320 ON ERROR GOTO 4010
1330 PRINT:PRINT "STATE THE PRESENT VALUE (AMOUNT), IN $ ";:INPUT PV
1340 IF F=1 GOTO 1420
1350 INPUT "STATE THE NUMBER OF TERMS PER YEAR";NY
1360 IF F=3 GOTO 1420
1370 INPUT "STATE THE NUMBER OF PERIODS OF THE LOAN";N
1380 IF F=2 GOTO 1420
1390 INPUT "STATE THE AMOUNT OF EACH PAYMENT, IN $";P
1400 IF F=4 GOTO 1420
1410 CLS:PRINT:PRINT "THIS IS AN ITERATIVE PROCESS AND WILL TAKE A FEW SECONDS"
1420 I=0.008
1430 I1=P/PV*((1+I)^N-1)/(1+I)^N
1440 IF ABS(I-I1)<0.000001 THEN 1470
1450 I=I1
1460 GOTO 1430
1470 I=I1*NY*100
1480 CLS:PRINT
1490 PRINT "FOR A LOAN WITH A PRESENT VALUE OF $";PV
1500 PRINT "AND";N;"PAYMENTS OF $";P;", WHERE THERE"
1510 PRINT "ARE";NY;"PAYMENTS PER YEAR, THE ANNUAL"
1520 PRINT "INTEREST RATE IS ";
1530 PRINT USING A$;I
1540 F=0:PRINT
1550 PRINT "DO YOU WANT  TO :"
1560 PRINT "   1 - CHANGE LOAN VALUE"
1570 PRINT "   2 - CHANGE NUMBER OF INTEREST PERIODS"
1580 PRINT "   3 - CHANGE PERIODS PER YEAR"
1590 PRINT "   4 - CHANGE PAYMENT AMOUNT"
1600 PRINT "   5 - RERUN ENTIRE PROGRAM"
1610 PRINT "   6 - RETURN TO MENU"
1620 PRINT:INPUT "ENTER THE NUMBER OF YOUR CHOICE";F
1630 IF F<1 OR F>6 THEN 1620
1640 ON F GOTO 1330,1370,1350,1390,1310,10
1650 F=INT(F):RUN
1660 END
1670 CLS:CH=0:PRINT:PRINT
1680 PRINT "USING THE FOR MAT  (MM,DD,YYYY),
1690 INPUT "ENTER THE FIRST DATE ";M,D,Y:GOSUB 1870
1700 N=M:F=D:Z=Y:E=T
1710 IF CH=1 GOTO 1740
1720 INPUT "ENTER THE SECOND DATE ";M,D,Y:GOSUB 1870
1730 P=M:G=D:W=Y:L=T
1740 IF E>L THEN PRINT "CHECK THE DATES.  TRY AGAIN":GOTO 1690
1750 O=L-E:CLS:PRINT:PRINT:PRINT
1760 PRINT "THE LENGTH IN DAYS FROM ";N;"/";F;"/";Z
1770 PRINT " TO  ";P;"/";G;"/";W;" IS";O;" DAYS."
1780 CH=0:PRINT:PRINT "DO YOU WISH  TO :"
1790 PRINT "   1 - CHANGE EARLY DATE"
1800 PRINT "   2 - CHANGE LATEST DATE"
1810 PRINT "   3 - RERUN ENTIRE PROGRAM"
1820 PRINT "   4 - RETURN TO MENU"
1830 INPUT "ENTER THE NUMBER OF YOUR CHOICE";CH
1840 IF (CH<>INT(CH)) OR CH>4 THEN 1830
1850 IF CH<=0 THEN 1830
1860 ON CH GOTO 1690,1720,1670,10
1870 YY=Y-1:T=365*YY+FIX(YY/4)-FIX(YY/100)+FIX(YY/400)
1880 CD=30*(M-1)+FIX((M-1)/3)+D
1890 IF M=2 OR M=9 OR M>10 THEN CD=CD+1:GOTO 1910
1900 IF M>2 AND M<8 AND M<>6 THEN CD=CD-1
1910 IF M<3 OR Y<>4*FIX(Y/4) THEN 1930
1920 IF Y=400*FIX(Y/400) OR Y<>100*FIX(Y/100) THEN CD=CD+1
1930 T=T+CD:RETURN
1940 CLS:PRINT:PRINT "THIS PROGRAM WILL DETERMINE THE LENGTH OF TIME NEEDED"
1950 PRINT " TO  PAY AN INSTALLMENT LOAN.  PLEASE PROVIDE THE "
1960 PRINT "FOLLOWING INFORMATION."
1970 PRINT:INPUT "WHAT WAS THE ORIGINAL AMOUNT OF THE LOAN";OA
1980 IF F=1 GOTO 2040
1990 INPUT "HOW MUCH IS THE PAYMENT";PT
2000 IF F=2 GOTO 2040
2010 INPUT "HOW MANY PAYMENTS PER YEAR";PY
2020 IF F=3 GOTO 2040
2030 INPUT "WHAT IS THE ANNUAL INTEREST RATE";IR
2040 CLS:IO=OA*IR/100/PY
2050 IF PT<=IO THEN PRINT "IMPOSSIBLE!  THE PAYMENT DOES NOT COVER THE INTEREST. INTEREST ONLY FOR THE PERIOD IS $";IO;" TRY AGAIN.":GOTO 1970
2060 Y=-(LOG(1-(OA*(IR/100))/(PY*PT))/(LOG(1+(IR/100)/PY)*PY))
2070 NP=Y*PY
2080 PRINT "FOR AN ORIGINAL LOAN AMOUNT OF $";OA;"PAYABLE"
2090 PRINT "AT";IR;"% WITH";PY;"PAYMENTS PER YEAR, THE NUMBER OF
2100 PRINT "$";PT;" PAYMENTS NECESSARY TO PAY THE LOAN IS";NP
2110 PRINT "OR";Y;" YEARS."
2120 PRINT:PRINT "WHAT DO YOU WANT TO DO:"
2130 PRINT "    1 - CHANGE ORIGINAL LOAN AMOUNT
2140 PRINT "    2 - CHANGE AMOUNT OF PAYMENT
2150 PRINT "    3 - CHANGE PAYMENTS PER YEAR
2160 PRINT "    4 - CHANGE ANNUAL INTEREST RATE
2170 PRINT "    5 - RERUN ENTIRE PROGRAM
2180 PRINT "    6 - RETURN TO MENU
2190 PRINT:PRINT "ENTER THE NUMBER OF YOUR CHOICE:";:INPUT F
2200 IF F<>ABS(INT(F)) OR F>6 THEN 2190
2210 ON F GOTO 1970,1990,2010,2030,1940,10
2220 CLS:PRINT:PRINT "THIS PROGRAM DETERMINES THE PRESENT VALUE OF A SERIES"
2230 PRINT "OF PAYMENTS.  IT IS NORMALLY USED TO DETERMINE THE AMOUNT
2240 PRINT "REMAINING ON A LOAN.  YOU MUST KNOW THE AMOUNT OF THE
2250 PRINT "REGULAR PAYMENT, THE NUMBER OF PAYMENTS REMAINING,
2260 PRINT "THE NUMBER OF PAYMENTS PER YEAR AND THE INTEREST RATE.
2270 PRINT:INPUT "HOW MUCH IS THE REGULAR PAYMENT";PT
2280 IF F=1 GOTO 2340
2290 INPUT "HOW MANY PAYMENTS REMAIN       ";NP
2300 IF F=2 GOTO 2340
2310 INPUT "HOW MANY PAYMENTS PER YEAR     ";PY
2320 IF F=3 GOTO 2340
2330 INPUT "WHAT IS THE ANNUAL INTEREST RATE";IR
2340 I=IR/100:CLS:T1=1+(I/PY):T1=T1^NP:T1=1/T1:T1=1-T1
2350 PR=PT*PY*T1/I
2360 PRINT "FOR ";NP;" PAYMENTS OF $";PT;"WHERE THERE ARE";PY
2370 PRINT "PAYMENTS PER YEAR AT AN ANNUAL INTEREST RATE OF";IR;"%"
2380 PRINT "THE ORIGINAL PRINCIPAL (OR THE VALUE OF THE REMAINING
2390 PRINT "PAYMENTS) IS $";PR
2400 PRINT:PRINT:PRINT "WHAT DO YOU WANT TO DO:
2410 PRINT "    1 - CHANGE PAYMENT AMOUNT
2420 PRINT "    2 - CHANGE NUMBER OF PAYMENTS
2430 PRINT "    3 - CHANGE PAYMENTS PER YEAR
2440 PRINT "    4 - CHANGE ANNUAL INTEREST RATE
2450 PRINT "    5 - RERUN ENTIRE PROGRAM
2460 PRINT "    6 - RETURN TO MENU
2470 INPUT "ENTER THE NUMBER OF YOUR CHOICE";F
2480 IF F<>ABS(INT(F)) OR F>6 THEN 2470
2490 ON F GOTO 2270,2290,2310,2330,2220,10
2500 END
2510 CLEAR 30
2520 ON ERROR GOTO 4010
2530 DEFDBL A-E,G-W:DEFINT F,X,Z
2540 A1$="####,###.##"
2550 A2$="###,###.##"
2560 A3$="##.##"
2570 A4$="##"
2580 A5$="###,###.##-"
2590 A6$="#####,###.##"
2600 CLS:PRINT "WHAT IS THE PURCHASE PRICE OF THE PROPERTY";
2610 INPUT GP
2620 IF X=4 GOTO 3010
2630 PRINT "WHAT IS THE VACANCY ALLOWANCE (IN %)";
2640 INPUT VA
2650 IF X=2 GOTO 3010
2660 PRINT "HOW MANY UNITS DOES THE PROPERTY HAVE";:INPUT UN
2670 PRINT "HOW MANY SQUARE FEET OF USABLE SPACE";:INPUT SF
2680 PRINT "WHAT IS THE ANTICIPATED GROSS INCOME";
2690 INPUT GI
2700 IF X=1 THEN 3010
2710 PRINT "WHAT IS THE EXPECTED EXPENSE RATIO, THAT IS, THE"
2720 INPUT "EXPENSES OVER THE GROSS INCOME, IN %";ER
2730 IF X=3 THEN 3010
2740 INPUT "HOW MANY MORTGAGES WILL THERE BE, 1 OR 2";MN:CLS:IF MN>2 GOTO 2740
2750 CLS:PRINT "FOR INTEREST ONLY OR BALLOON MORTGAGES,"
2760 PRINT "MONTHS = 1000"
2770 DEFINT I
2780 MT=0
2790 FOR I=1 TO 2:AM(I)=0:TM(I)=0:RT(I)=0:Y1(I)=0
2800 CF(I)=0:PT(I)=0:NEXT I
2810 FOR I=1 TO MN
2820 PRINT:PRINT "FOR MORTGAGE NUMBER ";I;"GIVE THE FOLLOWING"
2830 INPUT "TOTAL AMOUNT OF THE MORTGAGE";AM(I)
2840 INPUT "THE TERM, IN MONTHS";TM(I)
2850 INPUT "THE INTEREST RATE, IN % ";RT(I)
2860 MT=MT+AM(I)
2870 NEXT I
2880 IF X=5 GOTO 3010
2890 CLS:PRINT "DESCRIBE DEPRECIATION METHODS"
2900 INPUT "ALLOCATION TO BUILDING IN % ";D1
2910 INPUT "ALLOCATION TO PERSONALTY IN %";D2
2920 IF D1+D2>=100 THEN PRINT " TOO MUCH":FOR F3=1 TO 1000:NEXT F3:GOTO 2900
2930 PRINT "WHAT METHOD OF DEPRECIATION IS TO BE USED"
2940 PRINT "FOR THE BUILDING.  INPUT SL, DDB, 125%, OR 150%";
2950 INPUT DB$:IF Y=10 THEN 3300
2960 INPUT "TERM OF BUILDING DEPRECIATION, IN YRS";YB
2970 PRINT "WHAT METHOD OF DEPRECIATION IS TO BE USED"
2980 PRINT "FOR PERSONAL PROPERTY.  INPUT SL, DDB, 125% OR 150%";
2990 INPUT DP$:IF Y=11 THEN GOTO 3350
3000 INPUT "TERM OF PERSONAL PROPERTY DEP. IN YRS";YP
3010 CLS:PRINT "COMPUTER WORKING - BE WITH YOU IN A FEW SECONDS...."
3020 VS=VA*GI/100
3030 ER(1)=ER*(GI-VS)/100
3040 OI=GI-VS-ER(1)
3050 IF MN=0 THEN 3230
3060 DEFDBL I:M1=0:M2=0:PT(1)=0:PT(2)=0:IT(1)=0:IT(2)=0
3070 FOR X=1 TO MN
3080  IF TM(X)=1000 THEN IT(X)=AM(X)*(RT(X)/100):GOTO 3200
3090  I(X)=RT(X)/1200
3100  T=(I(X)+1)^(-TM(X)):T=1-T:MP(X)=I(X)*AM(X)/T
3110  MP(X)=INT(MP(X)*100+0.5)/100
3120  IT(X)=0:PT(X)=0:RP=AM(X)
3130  FOR Z=1 TO 12
3140   IM=INT(RP*I(X)*100+0.5)/100
3150   PM=MP(X)-IM
3160   IT(X)=IT(X)+IM
3170   PT(X)=PT(X)+PM
3180   RP=RP-PM
3190  NEXT Z
3200  IT=IT+IT(X):PT=PT+PT(X)
3210 NEXT X
3220 M1=PT(1)+IT(1):M2=PT(2)+IT(2)
3230 CF=OI-M1-M2
3240 PP=PT(1)+PT(2)
3250 AM=AM(1)+AM(2)
3260 RN=CF+PP
3270 EQ=GP-AM
3280 RT=RN/EQ*100
3290 DP=0
3300 IF DB$="DDB" THEN DP=D1*GP/YB/50:GOTO 3350
3310 IF DB$="SL" THEN DP=D1*GP/YB/100:GOTO 3350
3320 IF DB$="125%" THEN DP=D1*GP/YB*0.0125:GOTO 3350
3330 IF DB$="150%" THEN DP=D1*GP/YB*0.015:GOTO 3350
3340 PRINT:PRINT "ENTER PROPER DEPRECIATION METHOD":FOR Y=1 TO 1000:NEXT Y:Y=10:GOTO 2930
3350 IF DP$="DDB" THEN DP=DP+D2/YP/50:GOTO 3400
3360 IF DP$="SL" THEN DP=DP+D2*GP/YP/100:GOTO 3400
3370 IF DP$="125%" THEN DP=DP+D2*GP/YP*0.0125:GOTO 3400
3380 IF DP$="150%" THEN DP=DP+D2*GP/YP*0.015:GOTO 3400
3390 PRINT:PRINT "NEED METHOD FOR PERSONAL PROPERTY DEPRECIATION":FOR Y=1 TO 1000:NEXT Y:Y=11:GOTO 2970
3400 TI=RN-DP
3410 PU=GP/UN
3420 PF=GP/SF
3430 CR=OI/GP*100
3440 MR=GP/(GI-VS)
3450 '
3460 CLS:FOR X=0 TO 63:PRINT "+";:NEXT X:PRINT
3470 PRINT "COMPUTED GROSS     ";:PRINT USING A1$;GI;
3480 PRINT TAB(33)"MTG PMT YR1  #1         #2"
3490 PRINT "VAC ALLOWANCE ";:PRINT USING A4$;VA;:PRINT " %  ";:PRINT USING A2$;VS;
3500 PRINT TAB(33)"PRINCIPAL ";:PRINT USING A2$;PT(1);:PRINT " ";:PRINT USING A2$;PT(2)
3510 PRINT "EXP. RATIO ";:PRINT USING A3$;ER;:PRINT " %";:PRINT " ";:PRINT USING A1$;ER(1);
3520 PRINT TAB(33)"INTEREST  ";:PRINT USING A2$;IT(1);:PRINT " ";:PRINT USING A2$;IT(2)
3530 PRINT "NET OPER INC.      ";:PRINT USING A1$;OI;:PRINT TAB(33)"TOTAL     ";:PRINT USING A2$;M1;:PRINT " ";:PRINT USING A2$;M2
3540 FOR X=0 TO 63:PRINT "+";:NEXT X:PRINT
3560 PRINT "CASH FLOW           ";:PRINT USING A5$;CF;:PRINT " ";:PRINT TAB(33)"PURCH PRICE        ";:PRINT USING A6$;GP
3570 PRINT "PRIN. PAYMENT       ";:PRINT USING A5$;PP;
3580 PRINT TAB(33)"MORTGAGE TOTAL     ";:PRINT USING A6$;AM
3590 PRINT "EQU RTN = ";:PRINT USING A3$;RT;:PRINT " %   ";:PRINT USING A5$;RN;
3600 PRINT TAB(33)"EQUITY             ";:PRINT USING A6$;EQ
3610 PRINT "DEPRECIATION        ";:PRINT USING A5$;DP;
3620 PRINT TAB(33)"RTN ON CAP RATE         ";:PRINT USING A3$;CR;:PRINT " %"
3630 PRINT "TAXABLE INCOME      ";:PRINT USING A5$;TI;
3640 PRINT TAB(33)"MULTIPLIER (X EARNINGS)   ";:PRINT USING A3$;MR
3650 FOR X=0 TO 63:PRINT "+";:NEXT X:PRINT
3660 PRINT "PRICE PER UNIT = ";:PRINT USING A1$;PU;
3670 PRINT TAB(33)"PRICE / SQ FT =      ";:PRINT USING A2$;PF
3680 FOR X=0 TO 63:PRINT "+";:NEXT X:PRINT:PRINT
3690 PRINT "DO YOU WISH TO  1 - DISPLAY CURRENT VALUES"
3692 PRINT "                2 - CHANGE A VALUE"
3694 PRINT "                3 - RERUN THE PROGRAM"
3696 PRINT "                4 - RETURN TO MENU"
3710 PRINT:INPUT "ENTER THE NUMBER OF YOUR CHOICE:";F
3720 IF F<>ABS(INT(F)) OR F>4 GOTO 3710
3730 ON F GOTO 3740,3880,2510,10
3740 CLS:PRINT "PRICE";TAB(33)"";:PRINT USING A6$;GP
3750 PRINT "GROSS INCOME";TAB(33)"";:PRINT USING A6$;GI
3760 PRINT:PRINT "DEPRECIATION";TAB(20)"% ALLOC.";TAB(30)"YEARS";TAB(40)"TYPE
3770 PRINT "BUILDING";TAB(20)D1;TAB(30)YB;TAB(40)DB$
3780 PRINT "PERSONAL PROP.";TAB(20)D2;TAB(30)YP;TAB(40)DP$
3790 IF MN=0 THEN PRINT:PRINT "THERE ARE NO MORTGAGES":GOTO 3830
3800 PRINT:FOR X1=1 TO MN:PRINT "MTG. #";X1;"IS $";:PRINT USING A6$;AM(X1);:PRINT " AT";RT(X1);"% ";:IF TM(X1)=1000 THEN PRINT "FIRST YEAR INTEREST ONLY":GOTO 3820
3810 PRINT "OVER";TM(X1);" PERIODS."
3820 NEXT X1
3830 PRINT:PRINT "THE BUILDING HAS"UN;"UNITS AND";SF;"SQUARE FEET.
3840 PRINT:PRINT "DO YOU WISH TO  1 - DISPLAY FIRST YEAR"
3842 PRINT "                2 - CHANGE A VALUE"
3844 PRINT "                3 - RERUN PROGRAM"
3850 PRINT "                4 - RETURN TO MENU"
3855 PRINT:PRINT "ENTER THE NUMBER OF YOUR CHOICE ";:INPUT X
3860 X=ABS(INT(X)):ON X GOTO 3450,3880,2510,10
3870 GOTO 3840
3880 CLS
3890 PRINT:PRINT "DO YOU WISH TO CHANGE:
3900 PRINT "    1 - COMPUTED GROSS INCOME
3910 PRINT "    2 - VACANCY ALLOWANCE
3920 PRINT "    3 - EXPENSE RATIO
3930 PRINT "    4 - PURCHASE PRICE
3940 PRINT "    5 - MORTGAGE INFORMATION
3950 PRINT "    6 - DEPRECIATION INFORMATION
3960 PRINT:PRINT "ENTER THE NUMBER OF YOUR CHOICE ";:INPUT X
3970 IF X<>ABS(INT(X)) OR F>6 THEN 3960
3980 ON X GOTO 2680,2630,2710,2600,2740,2890
3990 GOTO 3960
4000 END
4010 CLS:IF ERR/2+1=11 THEN PRINT "A DIVIDE BY ZERO ERROR HAS OCCURRED.  THIS USUALLY" ELSE 4050
4020 PRINT "MEANS THAT A VALUE WAS NOT ENTERED PROPERLY.  IT
4030 PRINT "MIGHT MEAN THAT THE ERROR OTHERWISE WAS COMPUTED.
4040 INPUT "LET'S GO BACK AND TRY AGAIN.  PRESS ENTER WHEN READY";A$:RUN
4050 PRINT "ERROR";ERR;"HAS OCCURRED ON LINE";ERL;
4055 PRINT ".  LET'S GO BACK AND TRY AGAIN."
4060 PRINT:INPUT "PRESS ENTER FOR MENU.";A$:RUN
4220 'NOMINAL & EFFECTIVE INTEREST RATES
4230 CLEAR:ON ERROR GOTO 5950
4240 CLS:PRINT "THIS PROGRAM GIVES YOU THE NOMINAL AND EFFECTIVE
4250 PRINT "INTEREST RATES WHEN GIVEN THE FUTURE VALUE, PRESENT
4260 PRINT "VALUE, NUMBER OF PERIODS BETWEEN THE TWO, AND THE NUMBER
4270 PRINT "OF COMPOUNDING PERIODS PER YEAR.
4280 PRINT:INPUT "ENTER FUTURE VALUE";FV
4290 INPUT "ENTER PRESENT VALUE";PV
4300 INPUT "ENTER TOTAL NUMBER OF PERIODS";NP
4310 INPUT "ENTER NUMBER OF PERIODS PER YEAR";PY
4320 NR=(PY*((FV/PV)^(1/NP))-PY)*100
4330 ER=((FV/PV)^(PY/NP)-1)*100
4340 PRINT:PRINT "THE NOMINAL RATE IS";NR;" %
4350 PRINT "THE EFFECTIVE RATE IS";ER;" %
4360 GOTO 4060
4380 'INTERNAL RATE OF RETURN
4390 CLEAR:CLS:ON ERROR GOTO 5950
4400 PRINT "THIS PROGRAM FIGURES THE INTERNAL RATE OF RETURN
4410 PRINT "ON AN INVESTMENT, THE PERIODIC EARNINGS OF THAT
4420 PRINT "INVESTMENT, DISCOUNTED FOR THE PRESENT VALUE OF
4430 PRINT "THE EXPECTED SALES PRICE.":PRINT
4440 INPUT "ENTER THE PURCHASE PRICE OR INVESTMENT";PV
4450 INPUT "ENTER THE EXPECTED SALE PRICE";FV
4460 INPUT "ENTER THE NUMBER OF PERIODS PER YEAR";PY
4470 INPUT "ENTER THE TOTAL NUMBER OF PERIODS";N
4480 DIM EP(N)
4490 FOR X=1 TO N:PRINT "ENTER THE EARNINGS FOR PERIOD #";X;:INPUT EP(X):NEXT X
4500 CLS:PRINT:PRINT:PRINT:PRINT "COMPUTER WORKING.  BE WITH YOU IN A FEW SECONDS. . . .
4510 IR=0.15/PY:I1=0.25
4520 PF=FV/(1+IR)^N
4530 TE=0
4540 FOR X=1 TO N
4550 PE=EP(X)/(1+IR)^X
4560 TE=TE+PE
4570 NEXT X
4580 I1=IR*(PF+TE)/PV
4590 IF ABS(IR-I1)<0.000001 THEN IR=IR*PY*100:GOTO 4610
4600 IR=I1:GOTO 4520
4610 CLS:PRINT:PRINT:PRINT:PRINT "THE RATE OF RETURN IS";IR;"%"
4620 GOTO 970
4630 CLS:CLEAR:PRINT "THIS PROGRAM WILL GIVE YOU THE FUTURE VALUE OF A SERIES
4640 ON ERROR GOTO 5950
4650 PRINT "OF REGULAR DEPOSITS, WHERE EACH DEPOSIT IS IDENTICAL,
4660 PRINT "AND INTEREST IS COMPOUNDED WITH THE SAME FREQUENCY
4670 PRINT "THAT THE DEPOSITS ARE MADE.  THIS IS KNOWN AS
4680 PRINT "AN ANNUITY DUE, THAT IS, PAYMENTS ARE MADE
4690 PRINT "IN ADVANCE OF THE INTEREST BEING PAID, SUCH AS A
4700 PRINT "SAVINGS ACCOUNT OR INSURANCE POLICY.
4710 INPUT "ENTER THE AMOUNT OF THE REGULAR DEPOSIT ";RD
4720 INPUT "ENTER THE NUMBER OF DEPOSITS PER YEAR ";PY
4730 PRINT "USING THE FORMAT (YY,MM),ENTER THE YEARS AND
4740 INPUT "MONTHS OF THE TERM ";Y,M
4750 Y=Y+M/12
4760 INPUT "ENTER THE NOMINAL ANNUAL INTEREST RATE, IN %";IR
4770 I=IR/PY/100
4780 T=(1+I)^(PY*Y):T=T-1:T=T/I:FV=RD*T
4790 PRINT:PRINT "THE FUTURE VALUE IS $";FV
4800 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
4810 S TO P
4820 CLS:PRINT "THIS PROGRAM COMPUTES THE AMOUNT OF REGULAR DEPOSITS
4830 PRINT "NEEDED TO PRODCE A PARTICULAR FUTURE VALUE.  IT IS
4840 PRINT "AN EXAMPLE OF AN ANNUITY DUE.":PRINT
4850 INPUT "WHAT IS THE FUTURE VALUE";FV
4860 INPUT "ENTER THE NUMBER OF DEPOSITS PER YEAR";PY
4870 PRINT "ENTER THE NUMBER OF YEARS, USING THE
4880 INPUT "FORMAT (YY,MM) ";Y,M
4890 Y=Y+M/12
4900 INPUT "ENTER THE NOMINAL ANNUAL INTEREST RATE, IN %";IR
4910 I=IR/PY/100
4920 T=(1+I)^(PY*Y):T=T-1:T=I/T:RD=FV*T
4930 PRINT:PRINT "THE AMOUNT OF THE REGULAR DEPOSIT IS $";RD
4940 PRINT:INPUT "PRESS ENTER FOR MENU";A$:RUN
4950 CLS:PRINT "APPLYING A PARTICULAR DEPRECIATION RATE TO A SET
4960 PRINT "INVESTMENT, THIS PROGRAM DETERMINES THE AMOUNT OF
4970 PRINT "DEPRECIATION FOR EACH YEAR.":PRINT
4980 INPUT "ENTER THE AQUISITION PRICE ";PR
4990 INPUT "ENTER THE DEPRECIATION RATE, IN % ";DR
5000 INPUT "ENTER THE NUMBER OF YEARS OF DEPRECIATION ";YD
5010 DR=DR/100:DT=0
5020 PRINT "YEAR","DEPREC.","REMAINDER
5030 FOR X=1 TO YD
5040  DP=DR*PR*(1-DR)^(X-1)
5050  DT=DT+DP
5060  PRINT X,DP,PR-DT
5070  IF YD>12 THEN INPUT "PRESS ENTER TO CONTINUE";A$
5080 NEXT X
5090 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
5100 CLS:PRINT "THIS PROGRAM DETERMINES THE DEPRECIATION RATE
5110 PRINT "IF THE CURRENT VALUE, ORIGINAL PRICE, AND HOLDING
5120 PRINT "TIME ARE KNOWN.":PRINT
5130 INPUT "ENTER THE CURRENT VALUE ";DP
5140 INPUT "ENTER THE ORIGINAL PRICE ";OP
5150 INPUT "ENTER THE HOLDING TIME, IN YEARS ";YD
5160 DR=(1-(DP/OP)^(1/YD))*100
5170 PRINT:PRINT "THE DEPRECIATION RATE IS";DR;" %"
5180 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
5190 CLS:PRINT "THIS PROGRAM DETERMINES THE SALVAGE VALUE
5200 PRINT "OF AN ITEM GIVEN THE AGE, DEPRECIATION RATE AND
5210 PRINT "ORIGINAL PRICE.
5220 PRINT:INPUT "ENTER THE AGE OF THE ITEM, IN YEARS";YD
5230 INPUT "ENTER THE DEPRECIATION RATE, IN % ";DR
5240 INPUT "ENTER THE ORIGINAL PRICE ";OP
5250 PRINT:DR=DR/100
5260 SV=OP*(1-DR)^YD
5270 PRINT "THE SALVAGE VALUE IS $";SV
5280 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
5290 CLS:PRINT "THIS PROGRAM PRINTS A DEPRECIATION SCHEDULE FOR
5300 PRINT "AN ITEM.  YOU MUST KNOW THE METHOD, AND INPUT THE
5310 PRINT "PROPER FACTOR FOR THAT METHOD.  FOR STRAIGHT LINE
5320 PRINT "DEPRECIATION, INPUT 100, FOR 125% DECLINING BALANCE
5330 PRINT "INPUT 125, FOR 150% DECLINING BALANCE INPUT 150,
5340 PRINT "AND FOR DOUBLE DECLINING BALANCE INPUT 200":PRINT
5350 INPUT "ENTER THE DEPRECIATION FACTOR ";DF
5360 INPUT "ENTER THE ORIGINAL PRICE ";OP
5370 INPUT "ENTER THE SALVAGE VALUE  ";SV
5380 INPUT "ENTER THE NUMBER OF YEARS OF DEPRECIATION";YD
5390 PRINT
5400 PRINT "YEAR","DEP.","REMAINING VALUE
5410 DV=OP-SV:RV=OP:C=0
5420 IF DF=100 THEN GOTO 5500
5430 FOR X=1 TO YD
5440  C=C+1
5450 DP=DF/YD/100*RV:RV=RV-DP
5460  PRINT X,DP,RV
5470  IF C>11 THEN PRINT:INPUT "PRESS ENTER TO CONTINUE";A$:C=0
5480 NEXT X
5490 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
5500 RV=DV
5510 C=0
5520 FOR X=1 TO YD
5530  C=C+1
5540  DP=DV/YD:RV=RV-DP
5550  IF C>11 THEN PRINT:INPUT "PRESS ENTER TO CONTINUE";A$:C=0
5560  PRINTX,DP,RV+SV
5570 NEXT X
5580 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU ";A$:RUN
5590 CLS:CLEAR:PRINT "THIS PROGRAM DETERMINES THE PRESENT VALUE OF A COUPON
5600 ON ERROR GOTO 5950
5610 PRINT "BOND AT THE RATE OF INTEREST SELECTED BY YOU.  IT IS
5620 PRINT "NECESSARY FOR YOU TO GIVE THE COMPUTER YOUR RATE OF
5630 PRINT "INTEREST AND THE FINANCIAL INFORMATION ON THE BOND.
5640 PRINT:INPUT "ENTER YOUR DESIRED RATE OF INTEREST, IN %";IR
5650 INPUT "ENTER THE FACE (REDEMPTION) AMOUNT OF THE BOND";AM
5660 INPUT "ENTER THE NUMBER OF PAYMENT PERIODS PER YEAR";PY
5670 INPUT "ENTER THE NUMBER OF PERIODS TO MATURITY";PN
5680 INPUT "ENTER THE PERIODIC PAYMENT, IN $";PP
5690 PRINT:PRINT
5700 IR=IR/PY/100:PV=AM/(1+IR)^PN
5710 T=(1+IR)^(-PN):T=1-T:T=T/IR:T=T*PP
5720 PV=PV+T
5730 PRINT "THE PRESENT VALUE IS $";PV
5740 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
5750 CLS:CLEAR
5760 ON ERROR GOTO 5950
5770 PRINT "THIS PROGRAM DETERMINES THE YIELD TO MATURITY ON
5780 PRINT "A BOND GIVEN THE CURRENT PURCHASE PRICE.  THIS IS
5790 PRINT "THE TRUE RATE OF RETURN ON A BOND.
5800 PRINT:INPUT "ENTER THE PURCHASE PRICE OF THE BOND, IN $";PV
5810 INPUT "ENTER THE REDEMPTION (FACE) VALUE ";FV
5820 INPUT "ENTER THE ANNUAL QUOTED INTEREST RATE ";IR
5830 INPUT "ENTER THE NUMBER OF COUPON PAYMENTS PER YEAR ";PY
5840 INPUT "ENTER THE NUMBER OF PAYMENT PERIODS REMAINING ";N
5850 INPUT "ENTER THE AMOUNT OF THE COUPON PAYMENT ";CP
5860 PRINT:PRINT "COMPUTER WORKING.  BE WITH YOU IN A FEW SECONDS . . .
5870 IR=0.08/PY
5880 PF=FV/(1+IR)^N
5890 T=(1+IR)^(-N):T=1-T:T=T/IR*CP
5900 I1=IR*(PF+T)/PV
5910 IF ABS(IR-I1)<0.000001 THEN IR=IR*PY*100:GOTO 5930
5920 IR=I1:GOTO 5880
5930 PRINT:PRINT "THE YIELD TO MATURITY IS";IR;" %"
5940 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU ";A$:RUN
5950 CLS
5960 IF ERR/2+1=11 THEN PRINT "A DIVIDE BY ZERO ERROR HAS OCCURRED."ELSE6030
5970 PRINT:PRINT "THIS USUALLY MEANS THAT SOME INFOR MATION REQUIRED  TO
5980 PRINT "BE ENTERED IN TO  THE PROGRAM HAS BEEN OMITTED.  IT MAY
5990 PRINT "ALSO MEAN THAT THE ZERO WAS COMPUTED FROM VALID DATA
6000 PRINT "AND THE COMPUTER IS UNABLE TO PROCEED.  A SECOND RUN
6010 PRINT "SHOULD TELL US.  PRESS ENTER FOR MENU":INPUT A$
6020 RUN
6030 PRINT "AN ERROR HAS OCCURRED.  LET'S GO BACK
6040 INPUT "AND TRY AGAIN.  PRESS ENTER FOR MENU. ";A$:RUN
6100 REM * PUBLIC DOMAIN SOFTWARE *

METEOR.BAS

100 'METEOR: a character graphics arcade game for the Monochrome display.
105 'Originally by Edward T. Ordman November 1981.
110 'Published in Creative Computing August, 1982.
115 'Implemented and modified by Mike Locker IBM/NAD-Oakland, Ca. July, 1982.
120 M$=CHR$(2):C$=CHR$(219):X$=CHR$(25) ' face, solid square, down arrow
130 C5$=C$+C$+C$+C$+C$:H$="":T=0 'block, latch for face motion, score
140 Y=178:E2$=STRING$(2,Y):E5$=STRING$(5,Y):E8$=STRING$(8,Y) 'shading
150 CLS:KEY OFF:PRINT "Do you want directions (y/n)?":LOCATE 1,31,1
160 R$=INKEY$:IF R$="" THEN 160 ELSE LOCATE 1,31,0:PRINT R$+" ";
165 IF R$="y" OR R$="Y" THEN GOSUB 930:GOTO 180
170 IF R$="n" OR R$="N" OR R$=CHR$(13) THEN 180
175 LOCATE 1,31,1:BEEP:GOTO 160
180 LOCATE 25,1,1:PRINT"How hard (1-9)? ";
190 T=0:RANDOMIZE(VAL(RIGHT$(TIME$,2))) 'reset score and use clock to randomize
200 R$=INKEY$:IF R$="" THEN 200
205 C=ASC(R$+" "):IF C>48 AND C<58 THEN C=C-48:GOTO 230
210 IF C=13 THEN C=5 ELSE PRINT R$+" ";:LOCATE 25,17,1:BEEP:GOTO 200
230 HX=20+INT(40*RND+1):HY=16+INT(8*RND+1) 'position for face
235 LY=25:LX=36
240 CLS:LOCATE 25,1:PRINT"(use Arrows to move)  your SCORE:";
260 GOSUB 840 'put target, player marker
280 Y1=1:Y2=24 'describe Meteor path
290 X1=INT(RND*80+1):X2=INT(RND*80+1) 'each is integer 1-80
310 GOSUB 390:GOTO 290 'plot Meteor path, repeat
330 'plot x$ at y,x checking for scores, face motion
340 K$=INKEY$:IF K$<>"" THEN H$=K$ 'h$ is latch
350 IF LEN(H$)>0 THEN GOSUB 570 'key was struck
360 IF ABS(X-HX)<3 AND ABS(Y-HY)<2 THEN 450 'face hit
370 IF SCREEN(Y,X)=219 THEN C2=-1:SOUND 660,2:GOSUB 740 'target hit
375 IF Y=24 AND X=80 THEN X=79 'writing 24,80 causes scrolling
377 LOCATE LY,LX,0:PRINT X$;:LY=Y:LX=X
380 LOCATE Y,X,0:COLOR 15,0:PRINT X$;:COLOR 7,0:RETURN
390 'draw a line from x1,y1 to x2,y2
400 S0=(X2-X1)/(Y2-Y1):S=X1-S0
410 FOR Y=Y1 TO Y2:S=S+S0:X=INT(0.5+S)
420 IF Y>HY+1 THEN RETURN 'give up if below target
430 GOSUB 330:NEXT Y:RETURN
450 'target is hit, position message
460 HX=HX-4:IF HX>72 THEN HX=72
470 IF HX<1 THEN HX=1
480 IF HY=24 THEN HY=23
495 LOCATE HY,HX:PRINT E8$
497 LOCATE LY,LX,0:PRINT X$;:LY=Y:LX=X
500 LOCATE HY+1,HX:PRINT E2$;:COLOR 18,0:PRINT"Bang";:COLOR 7,0:PRINT E2$;
505 LOCATE HY+2,HX:PRINT E8$;:COLOR 7,0
510 IF HY=23 THEN LOCATE 25,35:COLOR 0,7:PRINT T;:COLOR 7,0 'score points
515 LOCATE Y,X,0:COLOR 15,0:PRINT X$;:COLOR 7,0
517 FOR Z=1000 TO 600 STEP -25:SOUND Z,1:NEXT:SOUND 37,15
520 LOCATE 25,43,0:PRINT"Ins = play again, Del = finish       ";
530 H$=INKEY$:IF H$=CHR$(0)+CHR$(83) THEN CLS:KEY ON:END
550 IF H$=CHR$(0)+CHR$(82) THEN CLS:GOTO 180
560 GOTO 530
570 'process keyboard request
580 IF H$=CHR$(32) THEN 760 'pause on space bar
590 IF LEN(H$)=1 THEN H$="":RETURN
600 HH=ASC(RIGHT$(H$,1)):K$=H$:H$="":LOCATE HY,HX:PRINT" ";
630 IF HH=77 THEN HX=HX+1:H$=K$:IF HX>80 THEN HX=1
650 IF HH=75 THEN HX=HX-1:H$=K$:IF HX<1 THEN HX=80
670 IF HH=80 AND HY<24 THEN HY=HY+1:H$=K$
680 IF HH=72 AND HY>1 THEN HY=HY-1:H$=K$
690 IF HX=80 AND HY=24 THEN HY=23
700 IF SCREEN(HY,HX)=219 THEN SOUND 440,1:C2=10:GOSUB 740
710 IF SCREEN(HY,HX)=25 THEN SOUND 420,1:C2=2:GOSUB 740
720 LOCATE HY,HX:PRINT M$;:RETURN
740 T=T+C2:LOCATE 25,35:COLOR 0,7:PRINT T;:COLOR 7,0:RETURN 'score points
760 LOCATE 25,1,0:PRINT SPC(21);
765 LOCATE 25,43,0:PRINT"Ins=continue, Del=stop, Enter=restore";
770 H$=INKEY$:IF H$=CHR$(0)+CHR$(82) THEN 910
790 IF H$=CHR$(13) THEN 840
800 IF H$=CHR$(0)+CHR$(83) THEN CLS:KEY ON:END
810 GOTO 770
840 'put target and face on screen
860 FOR I=12-C TO 24-C
870 LOCATE I,15:PRINT C5$;:LOCATE I,35:PRINT C5$;:LOCATE I,55:PRINT C5$;
900 NEXT I:LOCATE HY,HX:PRINT M$;
910 LOCATE 25,43:PRINT"(Hit space bar to pause)             ";
920 RETURN
930 'Directions
940 LOCATE 3,37,0:COLOR 1,0:PRINT"Meteor":COLOR 7,0:PRINT:PRINT
950 PRINT"A simple arcade game using character graphics.":PRINT
960 PRINT"The cursor control keys start the ";M$;" symbol moving."
970 PRINT"Space bar stops all action temporarily and allows restoring targets"
980 PRINT"Any letter (and some other keys) will stop cursor motion.":PRINT
990 PRINT"See if you can erase the solid blocks before falling meteors hit you"
1000 PRINT"Each ";C$;" you erase scores 10 points, each ";X$;", 2 points."
1010 PRINT"You lose 1 point for each ";C$;" a Meteor hits.":PRINT
1020 PRINT"To hit you, a Meteor needs to get  within the shaded area.":PRINT
1030 PRINT TAB(37);E5$:PRINT TAB(37);E2$+M$+E2$
1050 PRINT TAB(37);E5$:PRINT
1060 PRINT"The higher the difficulty level you select, the closer the targets"
1070 PRINT"will be to the top of the screen, exposing you to the unexpected"
1080 PRINT"falling Meteors.":RETURN

PDSOFTWR.DOC

D
Hit 'S' to Stop, 'P' to Pause

03/13/82 - This is a new feature added to the BBS.
Please leave a message at SIGNOFF if you have any
trouble using the DOWNLOAD feature.

The following options are available:

    <D>irections on how to 'download' programs.
    <E>xplanation of the programs listed.
    <I>BM PC - Listing of Programs available.
    <T>RS-80 - Listing of Programs available.
    < >      - Reserved for future enhancements.


Enter Selection desired, <H> for list, or <ENTER> to exit? E
Hit 'S' to Stop, 'P' to Pause

For an explanation of the program, type in the program
number and 'EX'.  For example, if you want to know what
program number 3 is for, you would type in   3EX  and
you would get an explanation of the program including
the submitters name.


Enter Selection desired, <H> for list, or <ENTER> to exit? H
Hit 'S' to Stop, 'P' to Pause

The following options are available:
   <D>irections on how to 'download' a program.
   <E>xplaination of the Programs listed.
   <I>BM PC - Listing of the Basic Programs
   <T>RS-80 (Radio Shack) - Listing of Programs
   < >    Reserved for future use


Enter Selection desired, <H> for list, or <ENTER> to exit? I
Hit 'S' to Stop, 'P' to Pause

The following programs are available for the IBM PC:

Item #   Pgm-Name   Xfer-time   Description
  10     ASYN-PGM      4 min    Async Communication w/download
  11     BKSPACE      20 sec    Patch to IBMASYNC for backspace
  12     DWNLOAD      20 sec    Patch to DOS-COMM for download
  13     PRINTER      10 sec    Patch to DOS-COMM printer on/off
  14     SPEEDUP      10 sec    DOS Zap -FastDiskIO
  15     -------      ------    Reserved for future
  16     -------      ------    Reserved  for future
  17     -------      ------    Reserved for future


Enter Selection desired, <H> for list, or <ENTER> to exit? 10EX
Hit 'S' to Stop, 'P' to Pause

Charles Brandon    Source ID = TCB349
This communications program is adapted from an example
in the IBM BASIC Manual pp F-4,F-5.  It can be used to
download programs.



Enter Selection desired, <H> for list, or <ENTER> to exit? 11EX
Hit 'S' to Stop, 'P' to Pause

Bob Rice, Panorama City, Calif  Source ID TCK539
This patch to the COMM software that comes on the DOS
uses a resident routine to perform a programmed backspace
(SUB 2720). It checks each character and executes backspace
as required. Line 5115 is optional and provides for printing
of the keyboard and other input data utilizing the parallel
printer port. This capability is activated by entering value
IPRR=TRUE at line 1820 and the printer is turned off by setting
value IPRR=FALSE.



Enter Selection desired, <H> for list, or <ENTER> to exit? 12EX
Hit 'S' to Stop, 'P' to Pause

Chris Carson from Aurora, Colorado
This mod to the COMM program on the DOS disk will auto-
matically download programs from FOURM-80 or CONNECTION-80
BBS and save the file to Drive B as "DWNLD1.TXT".
Additional files will have numbers 2,3,...etc.  If you want
to add AUTO LOGON then add the following:
365 IF MID$(A$,I,1)=CHR$(5) THEN PRINT #1,AUTOLOGON$
    The AUTOLOGON is in the form:
    FIRSTNAME;LASTNAME;CITY,STATE



Enter Selection desired, <H> for list, or <ENTER> to exit? 13EX
Hit 'S' to Stop, 'P' to Pause

Chris Carson from Aurora, Colorado
The following mod to the COMM program on the DOS Disk
will turn the printer on or off.  Function key F3 will
turn the printer on and F4 will turn it off.



Enter Selection desired, <H> for list, or <ENTER> to exit? 14EX
Hit 'S' to Stop, 'P' to Pause

(From CHRIS CARSON - Colorado  (303) 755-4192
This is a DOS patch which increases the speed of disk I/O
up to 100%. This program creates a file SPEEDUP.COM.  Then
run it each time you 'boot' DOS or have it in an AUTOEXEC
so that it loads automatically. It alters disk parm table
to set step-rate time to 6ms and head settle time to 0. It
complies with Tandon specs for the IBM drives.



Enter Selection desired, <H> for list, or <ENTER> to exit?


<R>etrieve      <L>eave-Msg     <S>can          <T>erminate
<Kter Selection d

PRINTER.BAS





5 REM * PUBLIC DOMAIN SOFTWARE *
10 REM THE FOLLOWING MOD TO THE COMM PROGRAM ON THE DOS DISK WILL
15 REM TURN THE PRINTER ON OR OFF. FUNCTION KEY F3 WILL TURN
20 REM THE PRINTER ON AND F4 WILL TURN IT OFF.
33 KEY(3) ON: KEY(4) ON
35 ON KEY(3) GOSUB 20000: ON KEY(4) GOSUB 21000
260 OPEN "SCRN:" FOR OUTPUT AS #2: OPEN "LPT1:" FOR OUTPUT AS #3
400 PRINT MID$(A$,I,1);: IF PRINTFLAG=1 THEN PRINT #3,MID$(A$,I,1);
20000 BEEP: PRINTFLAG=1: RETURN
21000 BEEP: PRINTFLAG=0: RETURN

SHELLSRT.BAS

5 REM * PUBLIC DOMAIN SOFTWARE *
10 DEFINT I-N:DIM D$(532):FOR J=1 TO 19:RESTORE
20 FOR I=1 TO 28:N=N+1:READ D$(N):NEXT I,J
30 TIME$="0":GOSUB 1000:T$=TIME$:FOR I=1 TO N
40 PRINT D$(I);:NEXT :PRINT N,T$:END
50 DATA ccccc,aaaaa,ggggg,bbbbb,ooooo,hhhhh,ddddd
60 DATA mmmmm,kkkkk,eeeee,fffff,iiiii,nnnnn,jjjjj
70 DATA lllll,zzzzz,yyyyy,xxxxx,wwwww,vvvvv,uuuuu
80 DATA ttttt,sssss,sssss,rrrrr,qqqqq,ppppp,ddddd
1000 'shell-metzner sort. n is count. d$ IS DATA.
1010 'ASSUMES I,J,K ARE INTEGERS AND USES THEM.
1020 K=N:WHILE K>1:K=K/2
1030 FOR J=1 TO N-K:FOR I=J TO 1 STEP -K
1040 IF D$(I)>D$(I+K) THEN SWAP D$(I),D$(I+K):NEXT
1050 NEXT J:WEND  :RETURN

SORT.BAS

0 REM * PUBLIC DOMAIN SOFTWARE *
5 CLEAR 5000
100 CLS '****** SORT PROGRAM *******
110 DIM N(150),C$(150)
130 PRINT"TYPE  C  FOR CHARACTER STRING SORT"
140 PRINT"TYPE  N  FOR NUMBER SORT"
150 INPUT W$
160 N=0:PRINT:PRINT
170 IF W$="N" GOTO 480
180 IF W$<>"C" THEN 130
190 GOSUB 720
200 INPUT S$
210 N=N+1
220 INPUT C$(N)
230 IF C$(N)<>S$ THEN 210
240 N=N-1:PRINT
250 L=INT(N/2)+1
260 N1=N
270 IF L=1 THEN 310
280 L=L-1
290 A$=C$(L)
300 GOTO 350
310 A$=C$(N1)
320 C$(N1)=C$(1)
330 N1=N1-1
340 IF N1=1 THEN 440
350 J=L
360 I=J
370 J=2*J
380 IF J=N1 THEN 400
390 IF J>N1 THEN 420
392 IF C$(J)>=C$(J+1) THEN 400
396 J=J+1
400 IF A$>=C$(J) THEN 420
410 C$(I)=C$(J)
415 GOTO 360
420 C$(I)=A$
425 GOTO 270
440 C$(1)=A$
450 FOR I=1 TO N
453 LPRINT C$(I)
456 NEXT I
460 GOTO 130
480 GOSUB 720
483 INPUT S
486 PRINT
490 N=N+1
493 INPUT N(N)
496 IF N(N)<>S THEN 490
500 N=N-1
505 PRINT
520 L=INT(N/2)+1
525 N1=N
530 IF L=1 THEN 550
540 L=L-1
543 A=N(L)
546 GOTO 590
550 A=N(N1)
555 N(N1)=N(1)
560 N1=N1-1
570 IF N1=1 THEN 680
590 J=L
600 I=J
605 J=2*J
610 IF J=N1 THEN 640
620 IF J>N1 THEN 660
630 IF N(J)<N(J+1) THEN J=J+1
640 IF A>N(J) THEN 660
650 N(I)=N(J)
655 GOTO 600
660 N(I)=A
665 GOTO 530
680 N(1)=A
690 FOR I=1 TO N
693 LPRINT N(I)
696 NEXT I
700 GOTO 130
720 PRINT"INDICATE A STOP CODE TO INDICATE END OF LIST"
740 RETURN

SPSHIPS.BAS

1000 PRINT "Spaceship #1"
1010 FOR I=1 TO 20
1020    PLAY "l64 mf ml t255 n40n41n42n43 n50n51n52n53"
1030 NEXT
1090 PLAY "p1"
2000 PRINT "Spaceship #2"
2010 FOR I=1 TO 20
2020    PLAY "l64 mf ml t255 n40n42n44n46n48n50n48n46n44n42n40"
2030 NEXT
2090 PLAY "p1"
3000 PRINT "Spaceship #3"
3010 FOR I=1 TO 20
3020    PLAY "l64 mf ml t255 n50n52n54n56n58n60n58n56n54n52n50"
3030 NEXT
3090 PLAY "p1"
4000 PRINT "Spaceship #4"
4010 FOR I=1 TO 20
4020    PLAY "l64 mf ml t255 n50n60n51n61n52n62n53n63n54n64n55n65n56n66"
4030 NEXT
4090 PLAY "p1"
5000 PRINT "Spaceship #5"
5010 FOR I=1 TO 20
5020    PLAY "l64 mf ml t255 n50n60n52n62n54n64n56n66n54n64n52n62n51n62"
5030 NEXT
5090 PLAY "p1"
6000 PRINT "Spaceship #6"
6010 FOR K=1 TO 20
6020    FOR I=50 TO 75 STEP 4
6030       PLAY "l64 mf ml t255 n=i;"
6040    NEXT
6050 NEXT K

TICKTOCK.BAS

10 FOR I=1 TO 40
20    PLAY "l50 mb ms t255 n1p1n2p1n1p1n2p1"
30 NEXT

YAHTZEE.BAS

10 '                    YAHTZEE  J. E. STEITZ 6/27/83
20 CLS:LOCATE 1,25:PRINT"YAHTZEE  By J. E. Steitz":LOCATE 2,34:PRINT"6/27/82"
30 LOCATE 4,1:PRINT"This game replicates the game of YAHTZEE as published by Milton Bradley"
40 PRINT"Company.  The rules of the game are quite simple.  If you purchase the"
50 PRINT"copyrighted game, you may obtain the printed rules which are followed"
60 PRINT"exactly in this demonstration of the IBM Personal Computer.
70 PRINT:PRINT"During play, instructions are given at the very bottom of the screen to"
80 PRINT"let you know what to do at each step.  You may use the ARROW keys or the"
90 PRINT"SPACE BAR to move the cursor from place to place on the screen.  The cursor"
100 PRINT"looks like this: ";:COLOR 26:PRINT CHR$(16);:COLOR 7:PRINT" and flashes so you will notice it."
110 PRINT:PRINT"When you have decided what you want to do, you must remember to hit the"
120 COLOR 15:PRINT"RETURN ";:COLOR 7:PRINT"("+CHR$(17)+CHR$(196)+CHR$(217)+") key to inform the computer that you have made some choice or"
130 PRINT"taken some action."
140 PRINT:PRINT"Hit the ";:COLOR 15:PRINT"RETURN";:COLOR 7:PRINT" KEY TO CONTINUE."
150 A$=INKEY$:IF A$="" THEN 150
160 IF ASC(A$)<>13 THEN 150
170 DEFINT I-O
180 DEFSTR A-H
190 OPTION BASE 1
200 DIM DIE(5),J1(5,2),ANAME(2,2),OSCORE(2,2)
210 ANAME(1,1)="test":CRS=CHR$(16)
220 DEF FNUP$(A$)=CHR$(ASC(LEFT$(A$,1)) AND 223)
230 A = TIME$
240 A = RIGHT$(A,2)+MID$(A,3,2)+LEFT$(A,2)
250 RANDOMIZE VAL(A)
260 OCOL=70:KEY OFF
270 FACE(1,1)="       "
280 FACE(1,2)="   "+CHR$(2)+"   "
290 FACE(1,3)="       "
300 FACE(2,1)=" "+CHR$(2)+"     "
310 FACE(2,2)="       "
320 FACE(2,3)="     "+CHR$(2)+" "
330 FACE(3,1)="     "+CHR$(2)+" "
340 FACE(3,2)="   "+CHR$(2)+"   "
350 FACE(3,3)=" "+CHR$(2)+"     "
360 FACE(4,1)=" "+CHR$(2)+"   "+CHR$(2)+" "
370 FACE(4,2)="       "
380 FACE(4,3)=" "+CHR$(2)+"   "+CHR$(2)+" "
390 FACE(5,1)=" "+CHR$(2)+"   "+CHR$(2)+" "
400 FACE(5,2)="   "+CHR$(2)+"   "
410 FACE(5,3)=" "+CHR$(2)+"   "+CHR$(2)+" "
420 FACE(6,1)=" "+CHR$(2)+"   "+CHR$(2)+" "
430 FACE(6,2)=" "+CHR$(2)+"   "+CHR$(2)+" "
440 FACE(6,3)=" "+CHR$(2)+"   "+CHR$(2)+" "
450 CLS
460 INPUT"How many players (1-6)";NP
470 IF NP=>1 AND NP<=6 THEN 500
480 PRINT "The number of players may only be 1 to 6. Try again"
490 GOTO 460
500 ERASE OSCORE,ANAME
510 DIM ANAME(NP),OSCORE(NP,14)
520 FOR I=1 TO NP
530 PRINT"Enter the name for player number ";I
540 INPUT ANAME(I)
550 ANAME(I)=LEFT$(ANAME(I),6)
560 ANAME(I)=FNUP$(ANAME(I))+MID$(ANAME(I),2)
570 FOR J=1 TO 13
580 OSCORE(I,J)=-1
590 NEXT J
600 OSCORE(I,14)=0
610 NEXT I
620 '              DISPLAY THE SCORING TABLE
630 CLS
640 PRINT "               ╒══════╤══════╤══════╤══════╤══════╤══════╕"
650 PRINT " ACES..........│......│......│......│......│......│......│"
660 PRINT " TWOS..........│......│......│......│......│......│......│"
670 PRINT " THREES........│......│......│......│......│......│......│"
680 PRINT " FOURS.........│......│......│......│......│......│......│"
690 PRINT " FIVES.........│......│......│......│......│......│......│"
700 PRINT " SIXES.........│......│......│......│......│......│......│"
710 PRINT "               ╞══════╪══════╪══════╪══════╪══════╪══════╡"
720 PRINT " TOTAL UPPER...│......│......│......│......│......│......│"
730 PRINT " BONUS FOR 63..│......│......│......│......│......│......│"
740 PRINT "               ╞══════╪══════╪══════╪══════╪══════╪══════╡"
750 PRINT " 3 OF A KIND...│......│......│......│......│......│......│"
760 PRINT " 4 OF A KIND...│......│......│......│......│......│......│"
770 PRINT " FULL HOUSE....│......│......│......│......│......│......│"
780 PRINT " SM. STRAIGHT..│......│......│......│......│......│......│"
790 PRINT " LG. STRAIGHT..│......│......│......│......│......│......│"
800 PRINT " YAHTZEE.......│......│......│......│......│......│......│"
810 PRINT " CHANCE........│......│......│......│......│......│......│"
820 PRINT " YAHTZEE BONUS.│......│......│......│......│......│......│"
830 PRINT "               ╞══════╪══════╪══════╪══════╪══════╪══════╡"
840 PRINT " TOTAL LOWER...│......│......│......│......│......│......│"
850 PRINT " TOTAL UPPER...│......│......│......│......│......│......│"
860 PRINT " GRAND TOTAL...│......│......│......│......│......│......│"
870 PRINT "               ╘══════╧══════╧══════╧══════╧══════╧══════╛";
880 FOR NROUND=1 TO 13
890 FOR NPLAYER = 1 TO NP
900 FOR I=1 TO NP
910 IF I=NPLAYER THEN COLOR 26
920 LOCATE 1,17+(I-1)*7:PRINT USING"&";ANAME(I);
930 COLOR 7
940 NEXT I
950 FOR NROLL=1 TO 2
960 GOSUB 2850      'Roll and Display the Dice
970 '                 DICE SELECTION ROUTINE
980 OPOS = 1
990 CCRS=CRS
1000 LOCATE 25,1:PRINT"                                 Type an X next to each die you want to keep.";
1010 LOCATE 5+4*(OPOS-1),OCOL-2:COLOR 26:PRINT CCRS ;:COLOR 7
1020 A=INKEY$:IF A="" THEN 1020
1030 IF A = CHR$(13) THEN 1290          'accept input
1040 IF A = " " THEN 1270               'Space bar
1050 IF FNUP$(A)="X" THEN 1250          'die selected
1060 IF ASC(LEFT$(A,1))<> 0 THEN 1020
1070 INKY=ASC(RIGHT$(A,1))
1080 IF INKY=72 THEN 1220               'cursor up
1090 IF INKY<>80 THEN 1020
1100 OPOS = OPOS + 1                   'cursor down
1110 IF OPOS>5 THEN OPOS=1
1120 CCRS=CRS
1130 LOCATE 5,OCOL-2
1140 FOR I=1 TO 5
1150 APRT=" "
1160 IF J1(I,1)=0 THEN 1190
1170 APRT="X"
1180 IF I=OPOS THEN CCRS="X"
1190 LOCATE 5+4*(I-1),OCOL-2:PRINT APRT;
1200 NEXT I
1210 GOTO 1010
1220 OPOS=OPOS-1   ' cursor up
1230 IF OPOS<1 THEN OPOS=5
1240 GOTO 1120
1250 J1(OPOS,1)=1   '   select the die
1260 GOTO 1100   'move to next position
1270 J1(OPOS,1)=0  'unselect the die (Space bar was hit)
1280 GOTO 1100
1290 FOR I=1 TO 5
1300 LOCATE 5+4*(I-1),OCOL-2:PRINT" ";
1310 NEXT I
1320 NSAVE=J1(1,1)
1330 FOR I=2 TO 5
1340 NSAVE=NSAVE+J1(I,1)
1350 NEXT I
1360 IF NSAVE=5 THEN 1390
1370 NEXT NROLL
1380 GOSUB 2850 'Roll and display the dice for the third time
1390 '                  SELECT SCORING ROUTINE
1400 FOR K=1 TO 5:J1(K,1)=0:NEXT K
1410 LOCATE 25,1:PRINT"Move cursor to the item you want to score and hit the return key             ";
1420 FOR I=1 TO 13
1430 IF OSCORE(NPLAYER,I)=-1 THEN 1460
1440 NEXT I
1450 PRINT"game over?"
1460 IF I<7 THEN ILINE=I+1 ELSE ILINE=I+5
1470 LOCATE ILINE,1:COLOR 26:PRINT CRS;:COLOR 7
1480 A=INKEY$:IF A="" THEN 1480
1490 IF A=" " THEN 1550
1500 IF A=CHR$(13) THEN 1670
1510 IF ASC(LEFT$(A,1))<>0 THEN 1480
1520 INKY=ASC(RIGHT$(A,1))
1530 IF INKY=72 THEN 1610
1540 IF INKY <> 80 THEN 1480
1550 LOCATE ILINE,1:PRINT" "; '      Cursor down
1560 ILINE=ILINE+1
1570 IF ILINE=8 THEN ILINE=12:GOTO 1590
1580 IF ILINE=19 THEN ILINE = 2
1590 IF ILINE<8 THEN I=ILINE-1 ELSE I=ILINE-5
1600 IF OSCORE(NPLAYER,I)=-1 THEN 1470 ELSE 1560
1610 LOCATE ILINE,1:PRINT" ";
1620 ILINE=ILINE-1
1630 IF ILINE=11 THEN ILINE=7:GOTO 1650
1640 IF ILINE=1 THEN ILINE=18
1650 IF ILINE<8 THEN I=ILINE-1 ELSE I=ILINE-5
1660 IF OSCORE(NPLAYER,I)=-1 THEN 1470 ELSE 1620
1670 ALL5="NO"   'Assume no yahtzee
1680 FOR L=2 TO 5
1690 IF J1(L,2)<>J1(1,2) THEN 1720
1700 NEXT L
1710 ALL5="YES"
1720 IF I>6 THEN 1840
1730 NTOT=0
1740 FOR ND=1 TO 5
1750 IF J1(ND,2)=I THEN NTOT=NTOT+I
1760 J1(ND,1)=0
1770 NEXT ND
1780 NTOP=NTOT
1790 FOR L=1 TO 6
1800 IF OSCORE(NPLAYER,L)<>-1 THEN NTOP=NTOP+OSCORE(NPLAYER,L)
1810 NEXT L
1820 LOCATE 9,17+(NPLAYER-1)*7:PRINT USING "######";NTOP;
1830 GOTO 2410
1840 '                 VALIDATE AND SCORE LOWER HALF
1850 NDTOT=J1(1,2) 'Get the total of all dice
1860 FOR L=2 TO 5
1870 NDTOT=NDTOT+J1(L,2)
1880 NEXT L
1890 IF I=13 THEN NTOT=NDTOT:GOTO 2410 'Go score chance line
1900 IF I<> 12 THEN 1930                  'Not Yahtzee
1910 IF ALL5="YES" THEN NTOT=50 ELSE NTOT=0
1920 GOTO 2420     'Go score the YAHTZEE line
1930 '           Distribute pips for analysis
1940 FOR L=1 TO 6:NPIP(L)=0:NEXT L
1950 FOR L=1 TO 5
1960 NPIP(J1(L,2))=NPIP(J1(L,2))+1
1970 NEXT L
1980 IF I<>7 THEN 2050  'Not 3 of a kind
1990 NTOT=NDTOT
2000 FOR L=1 TO 6
2010 IF NPIP(L)=>3 THEN 2410    'Qualifies for 3 of a kind
2020 NEXT L
2030 NTOT=0
2040 GOTO 2410
2050 IF I<>8 THEN 2120  'Not 4 of a kind
2060 NTOT=NDTOT
2070 FOR L=1 TO 6
2080 IF NPIP(L)=>4 THEN 2410    'Qualifies for 4 of a kind
2090 NEXT L
2100 NTOT=0
2110 GOTO 2410
2120 '               May only be full house, sm or lg straight
2130 IF ALL5="YES" AND OSCORE(NPLAYER,J1(1,2))<>-1 THEN JOKER$="yes" ELSE JOKER$="NO"
2140 IF I<>9 THEN 2210
2150 NTOT=25         'Assume a good full house
2160 IF JOKER$="YES" THEN 2410
2170 FOR K=1 TO 6
2180 IF NPIP(K)=1 OR NPIP(K)>3 THEN NTOT=0
2190 NEXT K
2200 GOTO 2410
2210 '              Only the sm and lg straights are left
2220 IF I<>10 THEN 2320
2230 NTOT=30      'Assume a good small straight
2240 IF JOKER$="YES" THEN 2410
2250 OBIT=0
2260 FOR K=1 TO 6
2270 IF NPIP(K)=0 THEN OBIT=0 ELSE OBIT=OBIT+1
2280 IF OBIT=4 THEN 2410   'qualifies as a small straight
2290 NEXT K
2300 NTOT=0                ' fails as a small straight
2310 GOTO 2410
2320 NTOT=40   'Must be trying for a large straight
2330 IF JOKER$="YES" THEN 2410
2340 OBIT=0
2350 FOR K=1 TO 6
2360 IF NPIP(K)=0 THEN OBIT=0 ELSE OBIT=OBIT+1
2370 IF OBIT=5 THEN 2410
2380 NEXT K
2390 NTOT=0
2400 '                    ADD 100 IF THIS IS SECOND OR LATER YAHTZEE
2410 IF ALL5="YES" AND OSCORE(NPLAYER,12)>0 THEN OSCORE(NPLAYER,14)=OSCORE(NPLAYER,14)+100 'Score 100 point bonus for extra yahtzees
2420 OSCORE(NPLAYER,I)= NTOT
2430 LOCATE ILINE,1:PRINT" ";
2440 LOCATE ILINE,17+(NPLAYER-1)*7:PRINT USING "######";NTOT;
2450 NEXT NPLAYER
2460 NEXT NROUND
2470 LOCATE 25,1:PRINT SPC(77);
2480 '                  PRINT FINAL TOTALS
2490 LSCORE=0
2500 FOR N=1 TO NP
2510 NTOP=OSCORE(N,1)
2520 FOR M=2 TO 6
2530 NTOP=NTOP+OSCORE(N,M)
2540 NEXT M
2550 IF NTOP =>63 THEN NB63=35 ELSE NB63=0
2560 LOCATE 10,17+(N-1)*7:PRINT USING "######";NB63;
2570 NTUPPER=NTOP+NB63
2580 LOCATE 19,17+(N-1)*7:PRINT USING "######";OSCORE(N,14)
2590 NBOT=OSCORE(N,7)
2600 FOR M=8 TO 14
2610 NBOT=NBOT+OSCORE(N,M)
2620 NEXT M
2630 LOCATE 21,17+(N-1)*7:PRINT USING "######";NBOT;
2640 LOCATE 22,17+(N-1)*7:PRINT USING "######";NTUPPER;
2650 LOCATE 23,17+(N-1)*7:PRINT USING "######";NTUPPER+NBOT;
2660 IF NTUPPER+NBOT>LSCORE THEN LSCORE=NTUPPER+NBOT:NNNAME=N
2670 NEXT N
2680 LOCATE 24,17+(NNNAME-1)*7:COLOR 26:PRINT"WINNER";:COLOR 7
2690 LOCATE 25,1:INPUT"Do you want to play another (Y,N)";A
2700 IF A="" THEN 2690
2710 IF FNUP$(A)="N" THEN END
2720 IF FNUP$(A)<>"Y" THEN 2690
2730 LOCATE 25,1:PRINT SPC(77);
2740 LOCATE 25,1:INPUT"Same players (Y,N)";A
2750 IF A="" THEN 2730
2760 IF FNUP$(A)="N" THEN 450
2770 IF FNUP$(A)<>"Y" THEN 2730
2780 FOR I=1 TO NP
2790 FOR J=1 TO 13
2800 OSCORE(I,J)=-1
2810 NEXT J
2820 OSCORE(I,14)=0
2830 NEXT I
2840 GOTO 630
2850 '                  ROUTINE TO ROLL  AND DISPLAY UP TO FIVE DICE
2860 FOR I=1 TO 5
2870 IF J1(I,1)=0 THEN J1(I,2)=INT(RND(1)*6) + 1 ' Roll only unlocked dice
2880 J1(I,1)=0 ' Reset dice locking flag
2890 NEXT I
2900 COLOR 0,7
2910 FOR I=1 TO 5
2920 FOR J=1 TO 3
2930 LOCATE 2+4*(I-1)+J,OCOL:PRINT FACE(J1(I,2),J)
2940 NEXT J
2950 NEXT I
2960 COLOR 7,0
2970 RETURN

Directory of PC-SIG Library Disk #0014

 Volume in drive A has no label
 Directory of A:\

BASMENU  BAS       768   8-03-82
METEOR   BAS      3968   1-01-80
PDSOFTWR DOC      4224   4-04-82
YAHTZEE  BAS      9728   6-29-82
COREFIX  BAS      2048   7-14-82
BIRDS    BAS      2048   6-19-82
BLKLETER BAS       512   7-10-82
SPSHIPS  BAS       768   8-04-82
TICKTOCK BAS       128   6-19-82
FINANCE  BAS     22016   8-06-82   2:50p
SHELLSRT BAS       640   4-04-82
SORT     BAS      1152   4-04-82
BARGRAPH BAS     22016
SS       BAR       384
SSS      BAR       384
YR20     BAR       512
QTR2G    BAR       384
S        BAR       256
SSSSS    BAR       256
SSSSSS   BAR       256
YR17     BAR       384
BACKLOG  BAR       512
FCST     BAR       384
PLANACT  BAR       512
ASYN-PGM BAS      3694   4-04-82
BKSPACE  BAS       779   4-04-82
DWNLOAD  BAS       893   4-04-82
BRKEVEN  VC      15360
COSINES  VC       3328   1-03-82
FEDTAX   VC      12032   2-04-82
GRAPHS   VC      15360
HOMEBDGT VC       4736   2-14-82
PRTSETUP VC       2560   3-05-82
PRINTER  BAS       495   4-04-82
FILES014 TXT      1910   5-29-87  10:01a
       35 file(s)     135387 bytes
                       19456 bytes free