&TRACE = 0 output('debug',2,30,'debug.txt') TRACE('insecondary') * TRACE('days') * TRACE('cnt3mo') found = 0 foundsleep = 1 foundwalk = 2 foundbike = 3 foundyoga = 4 foundneck = 5 foundstretch = 6 foundtosleep = 7 first = 1 firstB = 1 totdays = 0 totdaysnosleep = 0 cnt1 = 0 cnt2 = 0 cnt3 = 0 cnt1mo = 0 cnt2mo = 0 cnt3mo = 0 tot1 = 0.0 tot2 = 0.0 tot1mo = 0.0 tot2mo = 0.0 totyoga = 0.0 totwalk = 0.0 totbike = 0.0 totneck = 0.0 tottosleep = 0.0 totstretch = 0.0 totyogamo = 0.0 totwalkmo = 0.0 totbikemo = 0.0 totneckmo = 0.0 tottosleepmo = 0.0 totstretchmo = 0.0 digits = '0123456789' digits2 = digits '.' digits3 = digits2 '-' lastmo = '0' lastda = '0' lastyr = '0' insecondary = 0 daysinmo = ARRAY("1:12") daysinmo[1] = 31 daysinmo[2] = 28 daysinmo[3] = 31 daysinmo[4] = 30 daysinmo[5] = 31 daysinmo[6] = 30 daysinmo[7] = 31 daysinmo[8] = 31 daysinmo[9] = 30 daysinmo[10] = 31 daysinmo[11] = 30 daysinmo[12] = 31 part1 = "Month 1st 2nd 2nd Sleep Total Days Days Days" part1B = " Sleep Sleep When Occurs Sleep Extra None" part2 = " Miles Miles Minutes Neck Stretch Sleep Chrono" part2B = " Walk Bike Yoga % % Time Type" OUTPUT = part1 part2 OUTPUT = part1B part2B LOOP in = INPUT :F(DONE) NEXT in FENCE break('/') . mo arb . rest rpos(0) :F(LOOP) * MATCHED Month rest FENCE '/' break('/') . da '/' arb . rest rpos(0) :F(LOOP) * MATCHED Day rest FENCE span(digits) . yr span(' ') arb . rest rpos(0) :F(LOOP) * MATCHED Year rest FENCE ('slept' | 'Slept') span(' ') arb . rest rpos(0) :F(TRY0) * HAVE Sleep rest FENCE break(digits) span(digits2) . hours arb . rest rpos(0) :F(ERR1) found = foundsleep :(NEXT2) TRY0 exer = rest TRY1 exer FENCE span(digits2) . yoga span(' ') ('min ' | 'Min ') ('yoga' | 'Yoga') :F(TRY2) * have YOGA add minutes found = foundyoga totyoga = totyoga + yoga :(NEXT2) TRY2 exer FENCE ('walked' | 'walk' | 'Walked' | 'Walked') span(' ') span(digits2) . walk :F(TRY2B) * have WALK add miles found = foundwalk totwalk = totwalk + walk :(NEXT2) TRY2B exer FENCE ('to ' | 'To ') ('sleep' | 'Sleep') span(' ') span(digits3) . tosleep :F(TRY3) * have tosleep add time found = foundtosleep cnt3 = cnt3 + 1 tottosleep = tottosleep + tosleep :(NEXT2) TRY3 exer FENCE ('stationary ' | 'Stationary ') ('bike' | 'Bike') span(' -') span(digits2) . bike :F(TRY4) * have BIKE add miles found = foundbike totbike = totbike + bike :(NEXT2) TRY4 exer FENCE ('Neck ' | 'neck ') :F(TRY5) * have BIKE add miles found = foundneck totneck = totneck + 1.0 :(NEXT2) TRY5 exer FENCE ('stretch' | 'Stretch') :F(err5) * have BIKE add miles found = foundstretch totstretch = totstretch + 1.0 :(next2) err5 debug = "|" exer "| on " mo "/" da "/" yr :(LOOP) * HAVE Hours Slept CHECK for DATE MATCH NEXT2 eq(lastmo,0) :s(SK4) eq(found,foundsleep) eq(lastmo,mo) eq(lastda,da) eq(lastyr,yr) ne(first,1) :s(SECONDARY) eq(lastmo,mo) eq(lastda,da) eq(lastyr,yr) ne(first,1) :s(skipsec) insecondary = 0 skipsec eq(lastmo,mo) :s(NOTNEWMO) eq(first,1) :s(SK3) SK1C gt(lastda,da) :f(SK1A) OUTPUT "ERROR lastda = " lastda " da = " da SK1A eq(cnt1mo,0) :s(LOOP) eq(firstB,1) :s(SKIPDAYSINMO) eq(cnt1mo,0) :s(sk1f) days = daysinmo[lastmo] :(sk1g) sk1f days = daysinmo[mo] sk1g daysnosleep = days - cnt1mo daysnosleep = lt(daysnosleep,0) 0 :(SKIPDAYSINMOB) SKIPDAYSINMO days = cnt1mo daysnosleep = 0 SKIPDAYSINMOB avg1st = (tot1mo / days) "0000" firstB = 0 avg1st FENCE len(4) . avg1st avgtot = ((tot1mo + tot2mo) / days) "0000" avgtot FENCE len(4) . avgtot avg2nd = (tot2mo / days) "0000" avg2nd FENCE len(4) . avg2nd avgwalk = (totwalkmo / days) "0000" avgwalk FENCE len(4) . avgwalk eq(cnt3mo,0) :s(nochronodata) avgtosleep = (tottosleepmo / cnt3mo) "0000" avgtosleep FENCE len(4) . avgtosleep avgchrono = (avgtosleep + (avgtot / 2.0)) "0000" avgchrono FENCE len(4) . avgchrono :(nochronodata2) nochronodata avgtosleep = " na " avgchrono = " na " nochronodata2 avgbike = (totbikemo / days) "0000" avgbike FENCE len(4) . avgbike avgyoga = (totyogamo / days) "0000" avgyoga FENCE len(4) . avgyoga pctneck = (totneckmo * 100.0 / days) "0000" pctneck FENCE len(4) . pctneck pctstretch = (totstretchmo * 100.0 / days) "0000" pctstretch FENCE len(4) . pctstretch gt(lastmo,9) :s(SK1) mo2 = "0" lastmo :(SK1B) SK1 mo2 = lastmo SK1B ne(cnt2mo,0) :s(SK2) part1 = mo2 "/" lastyr " " avg1st " " avg2nd part2 = " NA " avgtot " " lpad(days,2,' ') part3 = " " lpad(cnt2mo,2,' ') " " daysnosleep :(SK3) SK2 avg2ndocc = (tot2mo / cnt2mo) "0000" avg2ndocc pos(0) len(4) . avg2ndocc part1 = mo2 "/" lastyr " " avg1st " " avg2nd part2 = " " avg2ndocc " " avgtot " " lpad(days,2,' ') part3 = " " lpad(cnt2mo,2,' ') " " daysnosleep SK3 part4 = " " avgwalk " " avgbike " " avgyoga part5 = " " pctneck " " pctstretch " " avgtosleep " " avgchrono OUTPUT = part1 part2 part3 part4 part5 totdays = totdays + days totdaysnosleep = totdaysnosleep + daysnosleep SK4 cnt1mo = 0 first = 0 cnt2mo = 0 cnt3mo = 0 tot1mo = 0.0 tot2mo = 0.0 totyogamo = 0.0 totwalkmo = 0.0 tottosleepmo = 0.0 totbikemo = 0.0 totneckmo = 0.0 totstretchmo = 0.0 * NOT DATE MATCH * last days got 1st sleep NOTNEWMO lastmo = mo first = 0 lastmo = mo lastda = da lastyr = yr first = 0 * insecondary = 0 * ADD hours and increment DAY count eq(found,foundsleep) :f(found2) tot1 = tot1 + hours tot1mo = tot1mo + hours :(foundit) found2 eq(found,foundwalk) :f(found2b) totwalkmo = totwalkmo + walk :(foundit) found2b eq(found,foundtosleep) :f(found3) cnt3mo = cnt3mo + 1 tottosleepmo = tottosleepmo + tosleep :(foundit) found3 eq(found,foundbike) :f(found4) totbikemo = totbikemo + bike :(foundit) found4 eq(found,foundyoga) :f(found5) totyogamo = totyogamo + yoga :(foundit) found5 eq(found,foundneck) :f(found6) totneckmo = totneckmo + 1.0 :(foundit) found6 eq(found,foundstretch) :f(LOOP) totstretchmo = totstretchmo + 1.0 :(foundit) notfound :(LOOP) * IF Already have DAY don't increment AGAIN foundit eq(found,foundsleep) :F(LOOP) eq(done_flg,1) :s(DONE2) cnt1mo = cnt1mo + 1 cnt1 = cnt1 + 1 :(LOOP) * occurring 1st not sleep - NOTE date & increment DAY Count eq(done_flg,1) :s(DONE2) NEXT3 eq(lastmo,mo) eq(lastda,da) eq(lastyr,yr) :s(LOOP) lastmo = mo lastda = da lastyr = yr eq(done_flg,1) :s(DONE2) insecondary = 0 :(LOOP) * no hours - message & continue ERR1 output = 'ERROR Slept without hours' :(LOOP) * DATE MATCHED add secondary hours and increment secondary day count SECONDARY tot2 = tot2 + hours tot2mo = tot2mo + hours eq(insecondary,1) :S(LOOP) cnt2 = cnt2 + 1 cnt2mo = cnt2mo + 1 lastmo = mo lastda = da lastyr = yr eq(done_flg,1) :s(DONE2) insecondary = 1 :(LOOP) DONE done_flg = 1 GT(cnt1mo,0) :s(SKIPDAYSINMO) DONE2 OUTPUT = 'Total days = ' totdays it = tot1 / totdays it len(4) . it OUTPUT = 'Average hours 1st sleep = ' it OUTPUT = 'Total days extra sleep = ' cnt2 it = tot2 / cnt2 it len(4) . it OUTPUT = 'Average hours extra sleep when occurs = ' it it = tot2 / totdays it len(4) . it OUTPUT = 'Average extra hours sleep = ' it it = (tot1 + tot2) / totdays it len(4) . it OUTPUT = 'Average total sleep = ' it OUTPUT = 'Total days no sleep = ' totdaysnosleep OUTPUT = 'Total minutes yoga = ' totyoga OUTPUT = 'Total miles walked = ' totwalk OUTPUT = 'Total miles biked = ' totbike it = (totyoga) / totdays it len(6) . it OUTPUT = 'Average minutes yoga = ' it it = totwalk / totdays it len(6) . it OUTPUT = 'Average miles walked = ' it it = totbike / totdays it len(6) . it OUTPUT = 'Average miles biked = ' it it = totneck * 100.0 / totdays it len(6) . it OUTPUT = 'Percent days neck exercises = ' it it = totstretch * 100.0 / totdays it len(6) . it OUTPUT = 'Percent days stretch exercises = ' it it = tottosleep / cnt3 it len(6) . it OUTPUT = 'Average to sleep time = ' it it = ( tottosleep / cnt3 ) + ((tot1 + tot2) / totdays / 2.0) it len(6) . it OUTPUT = 'Chronotype = ' it END