10 REM STARVAL.BAS JULY 15.1, 1981 20 REM 30 REM READS SEQUENTIAL RECORDS, CHECKS 40 REM THEM (SIMPLE CHECK), AND REPORTS 50 REM ALL ERRORS FOUND 60 REM 70 REM OPEN FILE, INITIALIZE CONSTANTS 80 REM 90 PRINT TAB(20);"STAR DATABASE VALIDATION" 100 PRINT 110 PRINT "This program performs several cursory checks on the various" 120 PRINT "STARx.DAT data files. While it can detect some errors, it" 130 PRINT "is NOT capable of finding ALL POSSIBLE ERRORS in the data" 140 PRINT "base." 150 PRINT 160 PRINT " HAPPY STAR GAZING" 170 PRINT 180 PRINT "FILE NAME FIRST LAST COMMENTS" 190 PRINT 200 PRINT "STAR1.BAD 1 50 File with sample errors to demonstrate" 210 PRINT " STARVALs error detection capabilities." 220 PRINT "STAR1.DAT 1 884 First datafile" 230 PRINT "STAR2.DAT 885 2059 2ND datafile" 240 PRINT "STAR3.DAT 2060 3234 3RD datafile" 250 PRINT "STAR4.DAT 3235 4409 4TH datafile" 260 PRINT "STAR5.DAT 4410 5584 5TH datafile" 270 PRINT "STAR6.DAT 5585 6759 6TH datafile 280 PRINT "STAR7.DAT 6760 7934 7TH datafile" 290 PRINT "STAR8.DAT 7935 9110 Last datafile" 300 PRINT 310 INPUT "File name, first line #, last line #? ",A$,S,F 320 INPUT "Do you want just the line #s with errors displayed (Y/N)? ",B$ 330 IF B$="y" THEN B$="Y" 340 OPEN "I",#1,A$ 350 E=0 360 E1=0 370 S$=" " 380 REM 390 REM CHECK EACH STAR 400 REM 410 FOR I=S TO F STEP 1 420 REM 430 REM CALCULATE STAR NUMBER IN ASCII 440 REM 450 N$=RIGHT$(STR$(I),LEN(STR$(I))-1) 460 IF LEN(N$)>=4 THEN 510 470 N$="0"+N$ 480 GOTO 460 490 REM INPUT DATA RECORD ON ONE STAR 500 REM 510 LINE INPUT #1,C$ 520 REM 530 REM CHECK TO SEE THAT REDUNDANT CATALOG NUMBERS ARE EQUAL 540 REM 550 IF B$<>"Y" THEN GOSUB 1220 560 IF LEFT$(C$,4)=MID$(C$,85,4) THEN 630 570 IF B$="Y" THEN GOSUB 1220 580 PRINT LEFT$(C$,4);" NOT = ";MID$(C$,85,4); 590 E=E+1 600 REM 610 REM CHECK TO SEE THAT CATALOG NUMBERS ARE SEQUENTIAL 620 REM 630 IF LEFT$(C$,4)=N$ THEN 730 640 IF B$="Y" THEN GOSUB 1220 650 PRINT "CAT # OUT OF SEQUENCE "; 660 E=E+1 670 REM 680 REM CHECK TO SEE THAT THE DECIMAL POINTS ASSOCIATED WITH 690 REM THE FIXED POINT DATA IN RADIANS ARE IN THE CORRECT 700 REM PLACE. (THESE FOUR DECIMAL POINTS ARE THE ONLY 710 REM "DATA" THAT CAN BE VERIFIED.) 720 REM 730 IF MID$(C$,174,1)="." THEN 770 740 IF B$="Y" THEN GOSUB 1220 750 PRINT MID$(C$,174,1);" ,174 <> '.'"; 760 E=E+1 770 IF MID$(C$,182,1)="." THEN 810 780 IF B$="Y" THEN GOSUB 1220 790 PRINT MID$(C$,182,1);" ,182 <> '.'"; 800 E=E+1 810 IF MID$(C$,190,1)="." THEN 850 820 IF B$="Y" THEN GOSUB 1220 830 PRINT MID$(C$,190,1);" ,190 <> '.'"; 840 E=E+1 850 IF MID$(C$,198,1)="." THEN 920 860 IF B$="Y" THEN GOSUB 1220 870 PRINT MID$(C$,198,1);" ,198 <> '.'"; 880 E=E+1 890 REM 900 REM CHECK TO SEE THAT LENGTH IS CORRECT 910 REM 920 IF LEN(C$)=202 THEN 990 930 IF B$="Y" THEN GOSUB 1220 940 PRINT "LEN NOT 202, = ";LEN(C$); 950 E=E+1 960 REM 970 REM CHECK TO SEE THAT ALL CHARACTERS ARE ASCII 980 REM 990 FOR J=1 TO LEN(C$) 1000 IF MID$(C$,J,1)<" "THEN 1020 1010 IF MID$(C$,J,1)<"~" THEN 1050 1020 IF B$="Y" THEN GOSUB 1220 1030 PRINT "CHAR #";J;" NOT VALID ASCII CHAR" 1040 E=E+1 1050 NEXT J 1060 IF B$<>"Y" THEN PRINT:GOTO 1090 1070 IF E<>E1 THEN PRINT 1080 E1=E 1090 NEXT I 1100 REM 1110 REM PRINT THE GOOD (HOPEFULLY) NEWS 1120 REM 1130 PRINT 1140 PRINT " Total number of errors DETECTED = ";E 1150 CLOSE #1 1160 GOTO 170 1170 END 1180 ON ERROR GOTO 1190 1190 PRINT "UNEXPECTED END OF FILE ENCOUNTERED" 1200 E=E+1 1210 GOTO 1130 1220 PRINT "Line # = ";I;" (";LEFT$(C$,4);") "; 1230 RETURN