* -LIST GOAL_NAMES = TABLE() GOALS = TABLE() GOAL_CNT = 0 initial_date = INPUT cfg_title = INPUT INPUT_FILE_NAME = INPUT OUTPUT('OUTPUT',6,4096) INPUT('INPUT_IN',8,4096,INPUT_FILE_NAME) OUTPUT('DEBUG',10,2048,'act.dbg') goal_loop goal = INPUT :F(endgoals) DEBUG = goal GOAL_CNT = GOAL_CNT + 1 goal break(' ') . lhs ' = ' span('01234567890.') . rhs1 break('|') '|' break('|') . rhs2 DEBUG = 'set GOALS[' lhs '] <= ' rhs1 DEBUG = 'set GOALNAME[' lhs '] <= ' rhs2 GOALS[lhs] = rhs1 GOAL_NAMES[lhs] = rhs2 :s(goal_loop) endgoals date_saved = DATE() GOAL_NAMES_ARRAY = CONVERT(GOAL_NAMES,'ARRAY') GOALS_ARRAY = CONVERT(GOALS,'ARRAY') OUTPUT = " Dennis J. Darland's " cfg_title " Since " initial_date " as of " date_saved DEFINE('GET_FIELD(FIELD_NAME,LINE_IN)','FIELDENTRY') DEFINE('GET_TITLE(LINE_IN)','TITLEENTRY') DEFINE('RANGE(START,FINISH),NDAYS,days_s,days_f','RANGEENTRY') DEFINE('SHRINK(STR)','SHRINKENTRY') DEFINE('SHRINK_H(STR)','SHRINKHENTRY') DEFINE('CVT_DAYS(yr,mo,da),I,ndays','CVT_DAYSENTRY') DEFINE('MOD_DJD(M,N)','MOD_ENTRY') DEFINE('HEADER()','HEADER_ENTRY') DEFINE('TRAILER()','TRAILER_ENTRY') total_cat = TABLE() total_time = 0.0 ualpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' lalpha = 'abcdefghijklmnopqrstuvwxyz' numer = '1234567890' numer2 = '1234567890.' ws = ' ' alpha = lalpha ualpha alphanum = alpha numer spec = ' ' loop1 line = INPUT_IN :F(sk2) title = get_title(line) :F(loop1) item_time = get_field('Time Spent: ',line) :F(err2)S(noerr2) err2 item_time = '0' noerr2 item_cat = get_field('Category: ',line) DEBUG = 'loop1 time = ' item_time DEBUG = ' cat = ' item_cat item_time FENCE SPAN(numer2) $ item_time2 ' H' RPOS(0) total_cat[item_cat] = total_cat[item_cat] + item_time2 total_time = total_time + item_time2 :(loop1) sk2 REWIND(8) HEADER() loop2 line = INPUT_IN :F(sk5) title = get_title(line) :F(loop2) item_time = get_field('Time Spent: ',line) :F(err2B)S(noerr2B) err2B item_time = '0' noerr2B item_time FENCE SPAN(numer2) $ item_time2 ' H' RPOS(0) DEBUG = 'loop2 time = ' item_time created = get_field('Start Date: ',line) :F(err3) created break('/') $ item_beg_mo '/' break('/') $ item_beg_da '/' break(' ') $ item_beg_yr ' ' break(':') $ item_beg_hr ':' break(' ') $ item_beg_min ' ' len(2) $ am_pm am_pm 'AM' ne(item_beg_hr,12) :s(sk_am2A) am_pm 'PM' eq(item_beg_hr,12) :s(sk_am2A) item_beg_hr = eq(item_beg_hr,12) item_beg_hr - 12 :s(sk_am2A) item_beg_hr = item_beg_hr + 12 sk_am2A beg_tm = ' ' item_beg_hr ':' item_beg_min beg_tm_fixed = item_beg_mo '/' item_beg_da '/' item_beg_yr ' ' item_beg_hr ':' item_beg_min ":00" completion = get_field('Completed Date: ',line) :F(done2) completion break('/') $ item_com_mo '/' break('/') $ item_com_da '/' break(' ') $ item_com_yr ' ' break(':') $ item_com_hr ':' break(' ') $ item_com_min ' ' len(2) $ am_pm am_pm 'AM' ne(item_com_hr,12) :s(sk_am2B) am_pm 'PM' eq(item_com_hr,12) :s(sk_am2B) item_com_hr = eq(item_com_hr,12) item_com_hr - 12 :s(sk_am2B) item_com_hr = item_com_hr + 12 sk_amB com_tm = ' ' item_com_hr ':' item_com_min com_tm_fixed = item_com_mo '/' item_com_da '/' item_com_yr ' ' item_com_hr ':' item_com_min ":00" ave_cc = item_time2 / RANGE(beg_tm_fixed,com_tm_fixed) :(done3) done2 ave_cc = 'NA' done3 ave_cn = item_time2 / RANGE(beg_tm_fixed,DATE()) item_time FENCE SPAN(numer2) $ item_time2 ' H' RPOS(0) eq(total_time,0) :s(skzer) percent = item_time2 * 100.0 / total_time :(noskzer) skzer percent = 'NA' noskzer ave = item_time2 / RANGE(initial_date,DATE()) * line FENCE BREAK('(') $ title '(' BREAK(')') $ priority ') (' BREAK(')') $ item_time ') (' BREAK(')') $ created ')' :F(loop2) * item_time FENCE 'Time Spent: ' SPAN(numer2) $ item_time2 ' H' RPOS(0) * percent = item_time2 * 100.0 / total_time * ave = item_time2 / RANGE(initial_date,date_saved) OUTPUT = '' title '' shrink_H(item_time2) '' shrink(percent) '% ' shrink_H(ave) '' :(loop2) sk5 ave = total_time / RANGE(initial_date,date_saved) OUTPUT = 'Overall' shrink_H(total_time) '100.0 %' shrink_H(ave) '' TRAILER() :(END) RANGEENTRY START FENCE BREAK('/') $ mo_s '/' BREAK('/') $ da_s '/' break(' ') $ yr_s ' ' break(':') $ hr_s ':' break(':') $ min_s FINISH FENCE BREAK('/') $ mo_f '/' BREAK('/') $ da_f '/' break(' ') $ yr_f ' ' break(':') $ hr_f ':' break(':') $ min_f days_s = CVT_DAYS(yr_s, mo_s, da_s) days_f = CVT_DAYS(yr_f, mo_f, da_f) rng = (days_f - days_s) + (hr_f - hr_s) / 24.0 + (min_f - min_s) / (24.0 * 60.0) rng = LT(rng,1.0) 1.0 RANGE = rng :(return) CVT_DAYSENTRY I = 2010 ndays = 0 cvtloop EQ(I,YR) :s(cvtsk5) it = MOD_DJD(I,4) * ERROR NEXT SECTION - FIXED 2/7/2020 EQ(it,0) :f(cvtsk1) ndays = ndays + 366 I = LT(I, yr) I + 1 :s(cvtloop)f(cvtsk5) cvtsk1 ndays = ndays + 365 I = LT(I, yr) I + 1 :s(cvtloop)f(cvtsk5) cvtsk5 it = MOD_DJD(yr,4) EQ(it,0) :f(cvtsk6) eq(mo,1) :f(lp_mo2) ndays = ndays + da :(retcvt) lp_mo2 eq(mo,2) :f(lp_mo3) ndays = ndays + da + 31 :(retcvt) lp_mo3 eq(mo,3) :f(lp_mo4) ndays = ndays + da + 31 + 29 :(retcvt) lp_mo4 eq(mo,4) :f(lp_mo5) ndays = ndays + da + 31 + 29 + 31 :(retcvt) lp_mo5 eq(mo,5) :f(lp_mo6) ndays = ndays + da + 31 + 29 + 31 + 30 :(retcvt) lp_mo6 eq(mo,6) :f(lp_mo7) ndays = ndays + da + 31 + 29 + 31 + 30 + 31 :(retcvt) lp_mo7 eq(mo,7) :f(lp_mo8) ndays = ndays + da + 31 + 29 + 31 + 30 + 31 + 30 :(retcvt) lp_mo8 eq(mo,8) :f(lp_mo9) ndays = ndays + da + 31 + 29 + 31 + 30 + 31 + 30 + 31 :(retcvt) lp_mo9 eq(mo,9) :f(lp_mo10) ndays = ndays + da + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 :(retcvt) lp_mo10 eq(mo,10) :f(lp_mo11) ndays = ndays + da + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 :(retcvt) lp_mo11 eq(mo,11) :f(lp_mo12) ndays = ndays + da + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 :(retcvt) lp_mo12 ndays = ndays + da + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 :(retcvt) cvtsk6 eq(mo,1) :f(rg_mo2) ndays = ndays + da :(retcvt) rg_mo2 eq(mo,2) :f(rg_mo3) ndays = ndays + da + 31 :(retcvt) rg_mo3 eq(mo,3) :f(rg_mo4) ndays = ndays + da + 31 + 28 :(retcvt) rg_mo4 eq(mo,4) :f(rg_mo5) ndays = ndays + da + 31 + 28 + 31 :(retcvt) rg_mo5 eq(mo,5) :f(rg_mo6) ndays = ndays + da + 31 + 28 + 31 + 30 :(retcvt) rg_mo6 eq(mo,6) :f(rg_mo7) ndays = ndays + da + 31 + 28 + 31 + 30 + 31 :(retcvt) rg_mo7 eq(mo,7) :f(rg_mo8) ndays = ndays + da + 31 + 28 + 31 + 30 + 31 + 30 :s(retcvt) rg_mo8 eq(mo,8) :f(rg_mo9) ndays = ndays + da + 31 + 28 + 31 + 30 + 31 + 30 + 31 :(retcvt) rg_mo9 eq(mo,9) :f(rg_mo10) ndays = ndays + da + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 :s(retcvt) rg_mo10 eq(mo,10) :f(rg_mo11) ndays = ndays + da + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 :(retcvt) rg_mo11 eq(mo,11) :f(rg_mo12) ndays = ndays + da + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 :(retcvt) rg_mo12 ndays = ndays + da + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 :(retcvt) retcvt cvt_days = ndays :(return) TITLEENTRY LINE_IN POS(0) BREAK('(') . GET_TITLE :S(RETURN)F(FRETURN) FIELDENTRY LINE_IN '(' FIELD_NAME ARB . GET_FIELD ')' :S(RETURN)F(FRETURN) SHRINKENTRY STR = STR '000000' STR LEN(6) . STR2 SHRINK = STR2 :(RETURN) SHRINKHENTRY str FENCE "NA" rpos(0) :s(shH_ret2) STR FENCE SPAN(numer) . hours len(1) SPAN(numer) . hund :f(no_dec) hund = hund '00' hund FENCE LEN(2) . hund2 minutes = hund2 * 60 / 100 STR2 = hours ' H ' minutes ' M' SHRINK_H = STR2 :(RETURN) shH_ret2 SHRINK_H = "NA" :(RETURN) no_dec shrink_h = str ' H 0 M' :(return) MOD_ENTRY MOD_DJD = M - (M / N) * N :(RETURN) * NOT CORRECT FOR NEG M - BUT I'M NOT USING THAT * MOD_ENTRY MOD_DJD = M *MOD_LOOP LT(MOD_DJD,N) :S(RETURN) * MOD_DJD = MOD_DJD - N :(MOD_LOOP) TRAILER_ENTRY OUTPUT = '' EQ(total_time,0) :S(NOTABLE) OUTPUT = '' OUTPUT = '' CNT = 0 GOALS_LOOP CNT = CNT + 1 DEBUG = 'GGGGG 1 = ' GOALS_ARRAY[CNT,2] OUTPUT = '' LE(CNT,GOAL_CNT) :S(GOALS_LOOP) OUTPUT = '
Activity CategoryTotal TimePercent TimeAverage TimeGoalPercent Goal
' GOAL_NAMES_ARRAY[CNT,2] '' shrink_H(total_cat[GOAL_NAMES_ARRAY[CNT,1]]) '' shrink(total_cat[GOAL_NAMES_ARRAY[CNT,1]] * 100.0 / total_time) '' shrink_H(total_cat[GOAL_NAMES_ARRAY[CNT,1]] / RANGE(initial_date,DATE())) '' shrink_H(GOALS_ARRAY[CNT,2]) '' shrink(100.0 * total_cat[GOAL_NAMES_ARRAY[CNT,1]] / GOALS_ARRAY[CNT,2] / RANGE(initial_date,DATE())) '
' NOTABLE OUTPUT = 'Note: I am trying to classify what I am doing while listening to music. - Rather than classify as music.' OUTPUT = 'Often, I do have the Music (or Fiction or Sports) on, simultaniously.
' OUTPUT = 'I am using:
' OUTPUT = 'Abstract Spoon ToDo List to gather the data.
' OUTPUT = 'Then a snobol4 program I wrote to add percentages, averages and html formatting.
' OUTPUT = 'The snobol program is HERE.
' OUTPUT = '' OUTPUT = '' :(return) HEADER_ENTRY OUTPUT = '' OUTPUT = '' OUTPUT = '' OUTPUT = '' OUTPUT = '' OUTPUT = '' OUTPUT = "Dennis J. Darland's " cfg_title "" OUTPUT = '' OUTPUT = '' OUTPUT = '' OUTPUT = '

' cfg_title ' of Dennis J. Darland

' OUTPUT = '' OUTPUT = '' :(return) END
ActivityTotal TimePercent TimeAverage Time