10  REM*** BAEDP TIMESHARE BILLING.
20  REM*** THIS PROGRAM GIVES THE USER THE OPTION OF LOADING A REPORT
30  REM*** TAPE TO A DAILY FILE OR VERIFYING A DAILY FILE.  IF THE
40  REM*** TAPE OPTION IS CHOSEN, VERIFICATION FOLLOWS AUTOMATICALLY.
50  REM*** DAILY DISC USAGE FIGURES ARE ALSO GIVEN BY THE PROGRAM.
60  REM*** THE DAILY FILE NAME IS CONTAINED IN STRING F$.  F$[1,1]="F",
70  REM*** F$(2,2)=NUMERIC SYS. I.D. (1 TO 9), F$(3,5)=JULIAN
80  REM*** DAY OF THE REPORT TAPE HEADER.
90  FILES *
100  DIM A$[72],B$[26],C$[10],E$[4],F$[6],Z$[5]
110  C$="0123456789"
120  B$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
130  D9=999
140  PRINT "NAME OF OUTPUT FILE FOR TODAY'S TAPE"
150  INPUT F$
160  IF LEN(F$)#5 THEN 180
170  GOTO 200
180  PRINT "5 CHARACTERS IN FILE NAME, PLEASE."
190  GOTO 140
200  ASSIGN F$,1,R8
210  IF R8=0 THEN 240
220  PRINT "FILE ";F$;" STATUS=";R8
230  STOP 
240  PRINT "INPUT 1 FOR TAPE, 2 FOR VERIFICATION."
250  INPUT Q9
260  IF Q9=2 THEN 1040
270  IF Q9#1 THEN 240
280  READ #1,1
290  IF TYP(1)=3 THEN 320
300  PRINT "FILE ";F$;" ALREADY CONTAINS DATA."
310  STOP 
320  PRINT "INPUT ANY NUMBER WHEN TAPE IS READY"
330  IF  END #1 THEN 350
340  GOTO 380
350  PRINT "FILE ";F$;" IS TOO SMALL. KIL AND RE-OPEN FILE ";F$
360  PRINT "TO A LARGER SIZE, AND RE-LOAD DATA."
370  STOP 
380  INPUT A1
390  ENTER 255,H7,A$
391  IF LEN(A$)=0 THEN 390
392  IF H7<0 THEN 390
400  REM*** VERIFY SYSTEM NUMBER.
410  FOR J=1 TO LEN(A$)
420  IF A$[J,J]=F$[2,2] THEN 490
430  NEXT J
470  PRINT "SYSTEM NUMBER NOT COMPATABLE WITH FILE NAME"
480  STOP 
490  FOR J=1 TO LEN(A$)
500  IF A$[J,J]="/" THEN 540
510  NEXT J
520  PRINT "/ MISSING FROM TAPE"
530  STOP 
540  IF A$[J-3,J-1]=F$[3,5] THEN 570
550  PRINT "JULIAN DAY NOT COMPATABLE WITH FILE NAME"
560  STOP 
570  PRINT #1;F$,"DAY LOADED=",TIM(2)
580  REM***CLEAR HEADER BEFORE FILE PRINT
590  ENTER 255,H7,A$
591  IF LEN(A$)=0 THEN 590
592  IF H7<0 THEN 590
600  REM*** READIN MAIN DATA FIELD AS STRING
610  REM*** PRINT MAIN DATA TO FILE AFTER CONVERSION OF ID,TIME,SPACE
620  REM*** TO NUMERIC
630  C9=0
640  N9=2
650  READ #1,N9
660  ENTER 255,H7,A$
661  IF LEN(A$)<0 THEN 660
662  IF H7<0 THEN 660
670  REM*** CONVERT I.D.,TIME,SPACE TO NUMERIC, THEN PRINT TO FILE.
680  FOR J=0 TO 40 STEP 20
690  D=0
700  REM*** E$=I.D. TO BE CONVERTED.
710  E$=A$[J+1,J+4]
720  GOSUB 1710
730  Z$=E$[2,4]
740  GOSUB 1560
750  D=D+B
760  A=D
770  REM*** Z$=TIME TO BE CONVERTED.
780  Z$=A$[J+6,J+10]
790  IF LEN(Z$)#5 THEN 820
800  GOSUB 1560
810  GOTO 830
820  B=1.E+30
830  T=B
840  REM*** Z$=SPACE TO BE CONVERTED.
850  Z$=A$[J+12,J+16]
860  IF LEN(Z$)#5 THEN 890
870  GOSUB 1560
880  GOTO 900
890  B=1.E+30
900  S=B
910  IF T=0 AND S=0 THEN 980
920  PRINT #1;A,T,S
930  C9=C9+1
940  IF C9<33 THEN 980
950  C9=0
960  N9=N9+1
970  READ #1,N9
980  IF A$[J+1,J+4]="Z999" THEN 1010
990  NEXT J
1000  GOTO 660
1010  PRINT 
1020  PRINT "TAPE LOADING COMPLETE, REMOVE TAPE"
1030  PRINT 
1040  REM*** VERIFY MAIN DATA FIELDS
1050  IF  END #1 THEN 1290
1060  N9=2
1070  READ #1,N9
1075  IF TYP(-1)=3 THEN 1290
1080  REM*** E1,E2,E3,AND E4 ARE ERROR COUNTERS FOR VERIFIED RECORDS.
1090  REM*** C8 COUNTS THE NUMBER OF "ID,TIME,SPACE" ENTRIES PER RECORD.
1100  E1=E2=E3=E4=C8=0
1110  IF TYP(-1)=4 OR TYP(-1)=3 THEN 1260
1120  READ #1;A,T,S
1130  C8=C8+1
1140  IF A >= 1000 AND A <= 26999 THEN 1160
1150  E1=E1+1
1160  IF T >= 0 AND T <= 65000. THEN 1180
1170  E2=E2+1
1180  IF S >= 0 AND S <= 65000. THEN 1200
1190  E3=E3+1
1200  IF A<1000 OR A>26999 THEN 1110
1210  IF A>D9 THEN 1240
1220  E4=E4+1
1230  GOTO 1110
1240  D9=A
1250  GOTO 1110
1260  GOSUB 1820
1270  N9=N9+1
1280  GOTO 1070
1290  PRINT 
1300  PRINT "FILE VERIFICATION COMPLETE"
1310  PRINT 
1320  REM*** DATA FOR SYSTEMS DISK CAPACITY.
1330  DATA 140058.,184743.,140058.,0,0,0,0,0,0
1340  REM*** GET SYSTEM INDICATOR
1350  FOR S9=2 TO 10
1360  IF F$[2,2]=C$[S9,S9] THEN 1380
1370  NEXT S9
1380  RESTORE 1330
1390  FOR D1=1 TO S9-1
1400  READ D4
1410  NEXT D1
1420  IF  END #1 THEN 1500
1430  READ #1,2
1440  D=C=0
1450  READ #1;A,T,S
1460  IF S=0 THEN 1450
1470  C=C+1
1480  D=D+S
1490  GOTO 1450
1500  PRINT 
1510  PRINT "DAY ";F$[3,5];" SYSTEM ";F$[2,2]
1520  PRINT C;" CUSTOMERS HAVE NON-ZERO DISC STORAGE."
1530  PRINT D;" STORAGE UNITS OUT OF ";D4;" ARE USED."
1540  PRINT 100*D/D4;"% OF CAPACITY."
1550  STOP 
1560  REM*** THIS SUBROUTINE CONVERTS STRING TO NUMERIC
1570  REM*** B IS SET TO A VERY LARGE NUMBER IF STRING IS OF
1580  REM*** NON CONVERTABLE CHARACTERS
1590  B=0
1600  FOR J1=1 TO LEN(Z$)
1610  FOR I1=1 TO 10
1620  IF Z$[J1,J1]=C$[I1,I1] THEN 1650
1630  NEXT I1
1640  GOTO 1680
1650  B=B+(I1-1)*10^(LEN(Z$)-J1)
1660  NEXT J1
1670  GOTO 1690
1680  B=1.E+30
1690  RETURN 
1700  END 
1710  REM*** THIS SUBROUTINE CONVERTS THE FIRST ID
1720  REM*** CHARACTER TO A NUMERIC VALUE 0F 1000 TO 26000
1730  D=0
1740  FOR J2=1 TO 26
1750  IF E$[1,1]=B$[J2,J2] THEN 1790
1760  NEXT J2
1770  D=1.E+30
1780  RETURN 
1790  D=J2*1000
1800  RETURN 
1810  END 
1820  REM*** THIS SUBROUTINE PRINTS THE APPROPRIATE MESSAGES
1830  REM*** AFTER EACH RECORD VERIFICATION
1840  PRINT 
1850  PRINT "FILE ";F$;" RECORD ";N9
1860  PRINT C8;" DATA BLOCKS"
1870  IF E1=0 AND E2=0 AND E3=0 AND E4=0 THEN 1970
1880  IF E1=0 THEN 1900
1890  PRINT E1;" ID MAGNITUDE ERRORS"
1900  IF E2=0 THEN 1920
1910  PRINT E2;" TIME MAGNITUDE ERRORS"
1920  IF E3=0 THEN 1940
1930  PRINT E3;" SPACE MAGNITUDE ERRORS"
1940  IF E4=0 THEN 1960
1950  PRINT E4;" ID SEQUENCE ERRORS"
1960  RETURN 
1970  PRINT "*** NO ERRORS ***"
1980  RETURN 
1990  END 
