790 IF LEFT$(I$(I),1) = " " THEN I$(I) = RIGHT$(I$(I), LEN(I$(I)) -1)
800 RETURN
810 ER = 0:DC = 0: ON I GOTO 830,830,840,840,850,860,860,870,960: REM CLEAR FLAGS
820 RETURN
830 H = 120:L = -30: GOTO 970
840 H = 31.5:L = 28: GOTO 1050
850 H = 100:L = 0: GOTO 970
860 H = 30:L = 0: GOTO 1050
870 IF I$(I) = "N" OR I$(I) = " N" THEN I$(I) = " N": RETURN
880 IF I$(I) = "NE" THEN RETURN
890 IF I$(I) = "E" OR I$(I) = " E" THEN I$(I) = " E": RETURN
900 IF I$(I) = "SE" THEN RETURN
910 IF I$(I) = "S" OR I$(I) = " S" THEN I$(I) = " S": RETURN
920 IF I$(I) = "SW" THEN RETURN
930 IF I$(I) = "W" OR I$(I) = " W" THEN I$(I) = " W": RETURN
940 IF I$(I) = "NW" THEN RETURN
950 ER = 1: RETURN : REM NONE OF THE ABOVE
960 H = 150:L = 0
970 GOSUB 790
980 FOR K = 1 TO LEN(I$(I)): IF ASC( MID$ (I$(I),K,1)) <45 OR ASC( MID$ (I$(I),K,1)) >57 OR ASC( MID$ (I$(I),K,1)) = 46 OR ASC( MID$ (I$(I),K,1)) = 47 THEN ER = 1:K = LEN(I$(I)): NEXT : RETURN
990 NEXT
1000 X = INT( VAL(W$(D%,I))):I$(I) = STR$(X): REM MAKE INTEGER
1010 IF VAL(I$(I)) <L OR VAL(I$(I)) >H THEN ER = 1: RETURN
1020 IF VAL(I$(2)) > VAL(I$(1)) AND I$(2) < >"" THEN ER = 1: RETURN
1030 IF LEN(I$(I)) = 1 THEN I$(I) = " " +I$(I)
1040 RETURN : REM NO ERRORS
1050 IF VAL(I$(I)) >H OR VAL(I$(I)) <L THEN ER = 1: RETURN
1060 REM IF (I = 6 OR I = 7) AND EC = 1 THEN EC = 0: IF I$(I) < > "" THEN RETURN :REM CHECK LIMITS ON 'ACCEPT' FROM EDIT
1070 GOSUB 790
1080 FOR K = 1 TO LEN(I$(I)): IF ASC( MID$ (I$(I),K,1)) <48 OR ASC( MID$ (I$(I),K,1)) >57 THEN DC = DC +1:D1 = K
1090 NEXT : IF DC >1 THEN ER = 1: RETURN
1100 IF DC = 1 THEN IF MID$ (I$(I),D1,1) < >"." THEN ER = 1: RETURN
1110 IF I <6 OR I >7 THEN 1140
1120 IF DC = 0 THEN I$(I) = I$(I) +".00": GOTO 1140: REM NO DECIMALS,DC=0
1130 I$(I) = I$(I) +"00": IF VAL(I$(I)) <1 THEN I$(I) = " 0" + MID$ (I$(I),D1,3): RETURN
1140 IF INT( VAL(I$(I))) <10 THEN I$(I) = " " +I$(I)
1150 IF VAL(I$(4)) > VAL(I$(3)) THEN ER = 1: RETURN
1160 IF LEN(I$(I)) = 2 THEN I$(I) = I$(I) +".00": RETURN
1170 IF LEN(I$(I)) <5 THEN I$(I) = I$(I) +"0": GOTO 1170
2410 IF LEN(I$(I)) >0 THEN I$(I) = "": REM NULL ENTRY WHEN QUIT
2420 GOTO 2560: REM ^Q=QUIT TO MENU OR DISK
2430 IF I$ < > CHR$(3) THEN 2450: REM CLEAR ENTRIES (^C)
2440 I = 9: NEXT : FOR I = 1 TO 9:W$(D%,I) = "":I$(I) = "": NEXT : GOTO 2070: REM BLANK ENTRIES
2450 IF I$ < > CHR$(5) THEN 2500: REM EDIT
2460 IF LEN(I$(I)) >0 THEN I$(I) = "": REM NULL ENTRY IF ^E
2470 ED = 1: GOSUB 1270: POKE 35,10: POKE 34,9: POKE 33,15: POKE 32,24: HOME : GOSUB 1730: TEXT : REM GET DAY TO EDIT
2480 GOSUB 780: REM PRINT NEW DATE HEADING
2490 GOTO 1990: REM PROMPTS & INPUT
2500 PRINT CHR$(7);: GOTO 2130: REM CONTROL CHARACTERS?
2510 PRINT I$;: CALL -868:I$(I) = I$(I) +I$: IF LEN(I$(I)) >L%(I) THEN I$(I) = "":I$ = "": HTAB 16: PRINT W$(D%,I) CHR$(7);: CALL -868: HTAB 16: REM DISPLAY AND BUILD INPUT STRING
2520 GOTO 2130
2530 REM
2540 REM ** INPUT COMPLETE **
2550 REM
2560 GOSUB 740: GOSUB 1240
2570 VTAB 10: HTAB 11: PRINT " ENTER MORE DATA": PRINT : HTAB 12: PRINT " SAVE DATA TO DISK": PRINT : HTAB 12: PRINT " BACK TO MAIN MENU"
2580 CALL CUR,10,18,11,31
2590 GOSUB 760: REM LINE
2600 ON LINE GOTO 2630,2620
2610 GOTO 1310: REM MAIN MENU
2620 FLAG = 1: GOTO 580: REM SET WRITE FLAG-GO WRITE
2630 FLAG = 0: HOME : REM CLEAR SCREEN
2640 IF D% < = VAL(D$(M%)) THEN 2730: REM STILL IN SAME MONTH
2650 GOSUB 740: GOSUB 1240: REM HEADING & PROMPTS
2660 VTAB 9: HTAB 8: PRINT " ** END OF THE MONTH **": VTAB 12: HTAB 8: PRINT " SAVE--GO TO NEXT MONTH": HTAB 8: PRINT " SAVE-STAY IN "M$(M%): HTAB 8: PRINT " RETURN TO EDIT": HTAB 8: PRINT " QUIT TO MAIN MENU"
2670 CALL CUR,12,15,8,31
2680 LINE = PEEK(4): ON LINE GOTO 2690,2690,2710,2720
2690 FLAG = LINE +1: GOTO 580: REM WRITE FILE
2700 M% = M% +1 -12 *(M% = 13):Y% = Y% +(M% = 1):D% = 1: GOSUB 750: POKE 960,2: GOTO 460: REM INCREMENT MONTH, YEAR IF NECESSARY, MAKE FILE NAME,READ FILE
2710 D% = VAL(D$(M%)): GOTO 1970: REM EDIT/ENTRY
2720 GOTO 1310: REM MAIN MENU
2730 GOSUB 740: GOSUB 780: GOSUB 770: GOTO 1990: REM INPUT AGAIN
2740 GOSUB 780: GOTO 1970: REM NEW MONTH FOR EDIT/ENTRY
4610 PRINT : PRINT "PREVAILING WIND FROM THE "MR$(14)" ("H" DAYS)"
4620 PRINT "AVERAGE WIND SPEED = "MR$(15)" MPH."
4630 PRINT L$
4640 IF LINE = 2 THEN HOME : PRINT : PRINT D$;"PR#0": VTAB 22:LINE = 0: GOTO 4630
4650 VTAB 24: PRINT "PRESS <RETURN> TO CONTINUE...";: POKE -16368,0: GET X$: GOTO 4450
4660 REM
4670 REM HIGHEST VALUE
4680 REM V=DATA ITEM (TEMP,WIND,ETC)
4690 REM
4700 X% = 0: FOR I = 1 TO VAL(D$(M%))
4710 IF W$(I,V) = "" THEN NEXT : GOTO 4750
4720 IF VAL(W$(I,V)) > = VAL(HI$) THEN HI$ = W$(I,V)
4730 IF VAL(W$(I,V)) < = VAL(LW$) THEN LW$ = W$(I,V)
4740 X% = 1: NEXT : REM AT LEAST ONE NON NULL-VALUE
4750 IF X% = 0 THEN LW$ = "":HI$ = ""
4760 REM LOWEST VALUE=LW$--HIGHEST VALUE=HI$
4770 RETURN
4780 REM
4790 REM SUM OF VALUES
4800 REM
4810 X% = 0:SUM = 0:COUNT = 0
4820 FOR I = 1 TO VAL(D$(M%))
4830 IF W$(I,V) = "" THEN NEXT : GOTO 4860
4840 COUNT = COUNT +1:SUM = SUM + VAL(W$(I,V))
4850 X% = 1: NEXT : REM AT LEAST ONE NON-NULL VALUE
4860 IF COUNT = 0 THEN COUNT = 1: REM PREVENT DIVISION BY ZERO
4870 IF X% = 0 THEN SUM = 0: REM NO VALUES
4880 RETURN : REM SUM=TOTAL OF VALUES
4890 TEXT : HOME : VTAB 10: PRINT "CONFIRM EXIT WITH 'Y'...";: POKE -16368,0: GET X$: IF X$ = "Y" OR X$ = CHR$(121) THEN TEXT : HOME : END
4900 GOTO 1310: REM MAIN MENU
4910 REM
4920 REM DATA STATEMENTS
4930 REM
4940 DATA JAN,31,FEB,29,MAR,31,APR,30,MAY,31,JUN,30,JUL,31,AUG,31,SEP,30,OCT,31,NOV,30,DEC,31,QUIT,0: REM M$(),D$()
4950 DATA HI TEMP (F),LO TEMP (F),HI BAROMETER,LO BAROMETER,% CLOUDY,RAIN (INCHES),SNOW (INCHES),WIND DIRECTION,WIND VELOCITY
4960 DATA 3,3,5,5,3,4,5,2,3
4970 DATA " TEMPERATURE "," PRESSURE "," CLOUDINESS ","PRECIPITATION"," WIND SPEED "," QUIT "
4980 DATA 13,11,12,14,12
4990 DATA " TEMP. "," PRESSURE ","CLDY "," PRECIP. ","WIND ": REM TEMP SPACES=3,PRESS SPACES=4,PRECIP SPACES=3,WIND SPACES=3
5000 DATA 9,13,5,12,7
5010 DATA "HI - LO "," HI -- LO "," % ","RAIN SNOW ","D V ": REM SPACES=1,1,2,1,1,1,4,1,3,2,2,2,3
5020 DATA " HI -- LO "," HI -- LO "," % "," RAIN--SNOW "," DIR - VEL ": REM SPACES = 2,1,1,3,2,1,1,3,6,7,1,2,1,1,1,3
5030 REM
5040 REM ONERR ROUTINES
5050 REM
5060 IF PEEK(222) = 6 THEN TEXT : HOME : VTAB 10: PRINT "BINARY FILE NOT FOUND ON DISK...": PRINT : PRINT TAB( 10)"CANNOT CONTINUE": END : REM NO CURSOR FILE
5070 GOTO 5160: REM OTHER ERROR
5080 IF PEEK(960) < >2 THEN 5140
5090 IF PEEK(222) = 6 THEN VTAB 10: HTAB 1: PRINT " CREATING FILE ": PRINT D$;"OPEN "F$: PRINT D$;"WRITE"F$: REM 13 SPACES BEFORE AND AFTER 'CREATING FILE'
5100 IF PEEK(222) < >6 THEN 5140
5110 PRINT D$(M%): FOR I = 1 TO VAL(D$(M%)): FOR J = 1 TO 9: PRINT "": NEXT : NEXT
5120 PRINT D$: PRINT D$;"CLOSE"F$: POKE 216,0: GOTO 490: REM CREATE NEW FILE
5130 REM
5140 REM DISK ERROR HANDLING
5150 REM
5160 TEXT : HOME :ER = PEEK(222): POKE 216,0
5170 IF ER = 4 THEN X$ = "DISK WRITE PROTECTED":Y$ = "REMOVE WRITE-PROTECT TAB": GOTO 5220
5180 IF ER = 6 THEN X$ = "FILE '" +F$ +"' DOES NOT EXIST":Y$ = "CREATE FILE IN 'ENTER/EDIT WEATHER DATA'":F$ = "": GOTO 5220
5190 IF ER = 8 THEN X$ = "DISK I/O PROBLEM":Y$ = "CHECK DRIVE DOOR OR DISK POSITION": GOTO 5220
5200 IF ER = 9 THEN X$ = "THIS DISK IS FULL":Y$ = "INSERT OTHER DISK OF CHANGE DRIVES": GOTO 5220