blob: c995f2df18e87308059c0e363c99860f453ec969 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
function __mark_set --description 'mark a day in a store'
# defaults
set mark_store $__mark_store
set sign "*"
set day (math (date +"%d") "*1")
set month (math (date +"%m") "*1")
set year (date +"%Y")
# parse argv
for i in (seq 1 (count $argv))
if string match -q -- "-d=*" "$argv[$i]"
set day (string replace -- "-d=" "" $argv[$i])
else if string match -q -- "-m=*" "$argv[$i]"
set month (string replace -- "-m=" "" $argv[$i])
else if string match -q -- "-y=*" "$argv[$i]"
set year (string replace -- "-y=" "" $argv[$i])
else if string match -q -- "-s=*" "$argv[$i]"
set mark_store (string replace -- "-s=" "" "$argv[$i]")
else if string match -q -- "-z=*" "$argv[$i]"
set sign (string replace -- "-z=" "" "$argv[$i]")
else
echo unrecognised option: $argv[$i] >&2
return 1
end
end
if not test -f $mark_store
return 1
end
# calculate offset: $day+1 (+1 if m > 9) because of "<month>:"
set offset (math "($day + 1 + $month/10)")
set marks (__mark_print_block store $mark_store)
set marks (string split " " $marks)
# copy everything before #store#
string split " " (string match -r "^.*#store#" (echo (cat $mark_store))) > $mark_store.new
# crawl store
set m 0
# correct year sub-block
set is_year false
for l in $marks
if begin test $is_year= false
and string match -q -r "^$year:\$" $l
end
set year_found true
end
if test $is_year= true
if test $m -ne $month
echo $l >> $mark_store.new
else
# replace the char at offset with $sign
echo $l | sed "s/^\(.\{$offset\}\)?/\1$sign/" >> $mark_store.new
end
set m (math "$m+1")
# not in year sub-block any more
if test $m -eq 13
set is_year false
end
else
echo $l >> $mark_store.new
end
end
#copy everything after #store#
set store_and_rest (string match -r "#store#.*\$" (echo (cat $mark_store)))
string split " " (string replace -r "#store#[^#]*" "" $store_and_rest) >> $mark_store.new
mv $mark_store.new $mark_store
end
|