>create table mustread (; > driver c(50),; > path c(50),; > short c(12)) >index on driver tag driver >sele 0 >use datadirs order 2 exclu >pack >dtest="" > >do toread2 && prog > >sele tempread >use >set defa to (opdir) >sele 0 >use infmread >copy stru to thisread cdx >use >sele 0 >use thisread exclu >if !file('badmods.dbf') > copy stru to badmods cdx >endif >if reccount()>0 > ?? chr(7) > do choose with 'Recovering from previous crashed run. Press space' > goto bott > scatter memvar > sele 0 > use badmods > append blank > gather memvar > use >endif > >sele thisread >set order to 1 >zap > >sele 0 >use infmread >set order to 1 > >sele mustread >pack > >pcount=reccount() >@ 10,20 say "Files to read "+str(pcount,6,0) >if pcount=0 > ?? chr(7) > do choose with "No data to read. Press space" > close data > erase mustread.dbf > return >endif >goto top >do prompt with "Browse. <escape> to exit" >defi wind view from 3,2 to 20,78 color sche 10 >brow fields short :H='Module',path noapp noedit nodele wind view ; > title "To read" > >do while .T. > do choose with "(C)ontinue to read (A)bandon" > if cs$"CA" > exit > endif >enddo >if cs="A" > close data > erase mustread.dbf > set defa to (opdir) > return >endif > >close data > >xbytes=o_tickbyte >cc=0 >xop=1 >empty=0 >xdriver='' >xbus=0 >xduty=0 > >if !file('dumpfile.dbf') > sele 0 > use waymcl > copy stru to dumpfile > use >endif > >sele 25 >use dumpfile > >sele 24 >use infmread order 1 > >sele 22 >use thisread order 1 > >sele 21 >use badmods order 1 > >sele 23 >use mustread alias willread >goto top > >do while !eof() && willread > sele 7 > use transid order 1 > > sele 6 > use waymcl && file storing extracted data > copy stru to mcltemp && temp file > copy stru to wayfare && holds all extracted records > use mcltemp && hold selected records > > sele 5 > use emptymod order 1 && do not empty > > do heading with "Read and convert ETM data" > > sele 2 > use wayfare excl && hold extracted records > zap > > sele 1 > use dec2hex order 1 > > sele willread > goto top > > ff=0 > @ 14,0 clear to 20,79 > set esca on > isesca=.F. > on escape isesca=.T. > @ 7,10 say "Once processing is under way press <Esc> to pause / abandon" > @ 8,10 say "after the modules detailed below" > do choose with "Note message above. Press space to start processing" > if lastkey()=27 > close data > set esca off > return > endif > > do while !eof() && willread > > ff=ff+1 > @ 11,20 say " Files read "+str(ff,6,0) > > tshort=alltrim(short) > tlong=alltrim(driver) > tpath=alltrim(path) > > tfile=tpath+tshort > tread=padr(tlong,50) > > do prompt with "Reading "+tread > > if isesca > acti wind alert > @ 4,7 say " Process interrupted" > @ 5,7 say "Read action options below" > acti scree > ?? chr(7) > do while .t. > do choose with "Process interrupted. (R)esume (A)bandon " > if cs$"RA" > exit > endif > enddo > deac wind alert > if cs="A" > set esca off > exit > endif > endif > isesca=.F. > > store fopen(tfile) to f_handle && file num > store fseek(f_handle,0,2) to eofile && eof > store fseek(f_handle,0) to bofile && bof > > > if eofile<=0 && file is empty > * wait wind tfile+" is empty" nowait > empty=empty+1 > sele emptymod > seek tread > if !found() > append blank > repla file with tread,event with "EM" > endif > =fclose(f_handle) > > sele infmread > seek tread+dtos(nuldate) > if !found() > append blank > repla driver with tread > endif > sele willread > skip > > loop > endif > > xdriver='' > for xx=7 to 9 > =fseek(f_handle,xx,0) > a=asc(fread(f_handle,1)) > sele dec2hex > seek a > b=hex > xdriver=xdriver+b > endfor > xdate="" > for xx=10 to 12 > =fseek(f_handle,xx,0) > a=asc(fread(f_handle,1)) > sele dec2hex > seek a > b=hex > xdate=xdate+b > endfor > yy=right(xdate,2) > if val(yy)<90 > yy="20"+yy > else > yy="19"+yy > endif > tickdate=ctod(left(xdate,2)+"/"+substr(xdate,3,2)+"/"+yy) > xontime='' > for xx=13 to 14 > =fseek(f_handle,xx,0) > a=asc(fread(f_handle,1)) > sele dec2hex > seek a > b=hex > xontime=xontime+b > endfor > xofftime='' > for xx=19 to 20 > =fseek(f_handle,xx,0) > a=asc(fread(f_handle,1)) > sele dec2hex > seek a > b=hex > xofftime=xofftime+b > endfor > if !between(tickdate,xfrom,xto) > =fclose(f_handle) > sele willread > skip > > loop > endif > sele badmods > seek tread+dtos(tickdate) > if found() > =fclose(f_handle) > sele willread > skip > > loop > endif > sele infmread > seek xdriver+dtos(tickdate)+xontime+xofftime > if found() > =fclose(f_handle) > sele willread > skip > > loop > endif > sele thisread > seek xdriver+dtos(tickdate)+xontime+xofftime > if found() > =fclose(f_handle) > sele willread > skip > loop > else > append blank > repla driver with xdriver,; > ondate with tickdate,; > ontime with xontime,; > offtime with xofftime > endif > xcash="" > for xx=64 to 67 > =fseek(f_handle,xx,0) > a=asc(fread(f_handle,1)) > sele dec2hex > seek a > b=hex > xcash=xcash+b > endfor > totfare=totfare+val(xcash) > xtickets="" > for xx=76 to 79 > =fseek(f_handle,xx,0) > a=asc(fread(f_handle,1)) > sele dec2hex > seek a > b=hex > xtickets=xtickets+b > endfor > tottick=tottick+val(xtickets) > xpasses="" > for xx=80 to 83 > =fseek(f_handle,xx,0) > a=asc(fread(f_handle,1)) > sele dec2hex > seek a > b=hex > xpasses=xpasses+b > endfor > tottick=tottick+val(xpasses) > =fseek(f_handle,256,0) > do while !feof(f_handle) > if !is02() > exit > endif > do lentrans > sele transid > seek xtrans > isticket=iif(found('transid'),.t.,.f.) > do case > case xtrans$'0002,001F,0030' && start of duty > * get date,driver no,bus no,dutyno > do getduty with xtrans > case xtrans$'0020,0003,0025' && start of route > * route no,journey no,start time > do getroute with xtrans > case xtrans$'0021,0004,0071' && stage record > * get ostage > do getstage with xtrans > case xtrans$'0008,0023' && stop time > do getstop with xtrans > case xtrans$'0073,0039,003B,' && annul ticket > isannul=.t. > case isticket > do maketick > if isannul > xfare=xfare*-1 > endif > * add a record to the database - split up bytes > do addtick > otherwise > * skip over len of record minus read up to the trans. > =fseek(f_handle,xlen-3,1) > endcase > > if feof(f_handle) > exit > endif > > enddo && !eof() > =fclose(f_handle) > sele willread > skip >enddo && willread > sele wayfare > rcount=reccount() > ecount=empty > if o_opanal="Y" > * see if file op_fare exists > do prompt with "Please wait ..saving analysis files." > opfile=o_analdir+"opanal.dbf" > if file((opfile)) > sele 0 > use (opfile) > append from wayfare > use > else > sele wayfare > copy to (opfile) > endif > endif >* select and close 1 - 10 > erase &cfile > erase &dfile > do stxweed && prog - extract required records to mcltemp and > * build up stats1 file with adult fares > * appweed calls upvalue.prg to insert values > if isesca > close data > exit > endif > sele willread > if !eof() > skip > endif >enddo && will read loop >close data >* update infmread >sele 0 >use thisread exclu >sele 0 >use infmread >append from thisread >sele thisread >zap >close data > >@ 3,0 clear to 20,79 >@ 12,20 say alltrim(str(rcount,6,0))+" records have been read" >@ 13,10 say alltrim(str(ecount,6,0)); > +" files were empty. See control files for details" >do choose with "Press space to continue" >return >