-
Notifications
You must be signed in to change notification settings - Fork 3
/
hack.ijs
195 lines (156 loc) · 7.09 KB
/
hack.ijs
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
NB. sha256:aad2ca56460404c0349c8d266a56c545ee295ae2454123a9939f5a8132a50f04
NB. JOD dictionary dump: 17 Jul 2024 15:12:23
NB. Generated with JOD version; 1.1.3 - dev; 4; 17 Jul 2024 10:36:06
NB. J version: j9.6.0-beta13/j64avx2/windows/commercial/www.jsoftware.com/2024-07-02T10:16:57/clang-18-1-6/SLEEF=1
NB. JOD put dictionary path: /hack
NB.
NB. Names & DidNums on current path
NB. +----+---------------------------------------+
NB. |hack|334877063862474452561899665710245898076|
NB. +----+---------------------------------------+
9!:41 [ 1 NB.{*JOD*}
cocurrent 'base' NB.{*JOD*}
sonl_z_=: 'sonl__MK__JODobj i.4' NB.{*JOD*}
showpass_z_=:] [ 1!:2&2 NB.{*JOD*}
SOLOCALE_z_=:":>SO__JODobj NB.{*JOD*}
soput_z_=:SOLOCALE&put NB.{*JOD*}
soclear_z_=: '0 0 $ clearso__MK__JODobj 0' NB.{*JOD*}
cocurrent SO__JODobj NB.{*JOD*}
hashhack=:5 5 5$622471 324707 907824 63156 386620 338597 95767 601478 285657 926716 299673 417604 687686 837773 792087 465072 605580 190086 732158 199016 654681 925556 409381 619390 891662 888593 716628 996200 477721 946355 925092 818219 624291 142923 211331 221506 293785 691701 839185 728260 559163 482992 875999 429769 217911 729463 972270 132174 479205 169165 495301 362738 316673 797518 745820 59832 662585 726388 658895 653456 965094 664519 84712 206709 840876 591713 630205 991190 221415 114238 99128 174741 946261 505672 776016 307362 262482 540053 707341 465233 184449 428597 956787 742911 266758 673437 408664 84774 992001 126500 519228 669959 195509 138816 866516 941036 637415 590763 485509 829403 989265 596370 920249 732389 252517 978233 196564 530505 68895 276860 271178 797843 357450 817211 397167 160678 373336 820518 549669 957762 255597 466634 916071 354245 890674
showpass soput ".'nl_',SOLOCALE,'_ i.4' [ cocurrent 'base' NB.{*JOD*}
".soclear NB.{*JOD*}
cocurrent SO__JODobj NB.{*JOD*}
nextbaknum=:4 : 0
NB.*nextbaknum v-- next backup number with ordered list of backup numbers.
NB.
NB. monad: il =. baObj nextbaknum uuIgnore
NB.
NB. DL nextbaknum 0
DL=. x NB. put dictionary directory object
NB. next backup number HARDCODE: pack counter is in component 1
if. badjr nums=.>jread WF__DL;1 do. jderr 'cannot read pack count' return. else. nxtbak=. <. >:0{nums end.
nxtbak,bnums__ST BAK__DL
)
packd=:3 : 0
NB.*packd v-- backs up and recovers wasted space in dictionary
NB. files. Backups are stored in the dictionary's backup
NB. directory. Sets of backup files are prefixed with an ever
NB. increasing backup number, e.g: 13jwords.ijf. Dictionary files
NB. are NEVER deleted by JOD commands.
NB.
NB. monad: packd clName
NB.
NB. packd 'dictionary'
NB. only put dictionaries can be packed
if. badrc uv=. checkput__ST 0 do. uv return. end.
DL=. 1 { uv NB. directory object !(*)=. DL
NB. is there enough space on the backup volume?
if. badrc uv=. packspace__DL 0 do. uv return. end.
NB. get next backup number
if. badrc pfn=. DL nextbaknum 0 do. pfn return. else. pfn=. {. , >1{pfn end.
NB. backup files
pfn packdict__DL y
)
packdict=:4 : 0
NB.*packdict v-- pack the current dictionary.
NB.
NB. At the end of a successful pack operation the current
NB. directory object is refreshed and subsequent operations are
NB. performed on the packed files.
NB.
NB. dyad: iaNxtBak packdict clName
NB. object nouns !(*)=. DNAME UF WF
if. (,DNAME) -: ,y do.
NB. clear current object
dropall 0
path=. SYS NB. object noun !(*)=. SYS
NB. store backup number
pfn=.backnum x
NB. copy object files to tmp files
for_obj. OBJECTNC do.
NB. code relies on the fact that (OBJECTNC),
NB. (JDFILES) and (DFILES) have corresponding items
tfile=. path,TEMPFX,>obj_index{JDFILES
datfile=. ".>obj_index{DFILES
if. badrc msg=. obj tmpdatfile tfile;datfile do. msg return. end.
end.
NB. copy reference file to tmp file HARDCODE file name index
tfile=. path,TEMPFX,>5{JDFILES
if. badrc msg=. tmpusesfile tfile;UF do. msg return. end.
NB. move old data files to backup directory and rename
NB. backup prefix number HARDCODE backup directory index
bckpath=. PATHDEL ,~ path,>5{JDSDIRS
dcfiles=. JDFILES ,&.> <IJF
source=. (<path) ,&.> dcfiles
bckfiles=. (<":pfn) ,&.> dcfiles
target=. (<bckpath) ,&.> bckfiles
if. badrc msg=.source renamefiles target do. msg return. end.
NB. hash backup files and write sidecar (n)jhashes.txt file
if. badrc msg=. bckfiles hashback pfn;bckpath;target do. msg return. end.
NB. rename tmp files to standard file names
target=. source
source=. (<path) ,&.> (<TEMPFX) ,&.> dcfiles
if. badrc msg=.source renamefiles target do. msg return. end.
NB. insure new directory is reloaded when needed
dropall 0
ok OK200;DNAME;pfn NB. return dictionary & pack count
else.
jderr ERR202
end.
)
restd=:3 : 0
NB.*restd v-- restores backups created by (packd).
NB.
NB. monad: restd clName | blNameBnum
NB.
NB. restd 'backup'
NB. restd 'backup';13 NB. restore backup 13
NB. restd 'backup';13 17 NB. restore backup 13 ignoring hash failures
NB. only put dictionaries can be restored
if. badrc uv=. checkput__ST 0 do. uv return. end.
DL=. 1 { uv NB. directory object !(*)=. DL
NB. next backnum with ordered list of extant backup numbers
if. badrc uv=. DL nextbaknum 0 do. uv return. else. uv=. rv uv end.
NB. next backup number
bklist=. }.uv [ nxtbak=. {.uv
NB. if a particular backup is being requested check its number
achk=. (2 = #) * (1 = [: $ $) * 1 = L.
if. achk y do.
'bkname bknum'=. y
if. badcl bkname do. jderr ERR002 return. end.
NB. HARDCODE: 2 forcing bknum to pair
if. badil ,bknum do. (jderr ERR106__ST),<bknum return. else. bknum=. 2 {. bknum end.
if. -.({.bknum) e. bklist do. (jderr ERR106__ST),<{.bknum return. end.
elseif. -.badcl y do.
bkname=. y
bknum=. 2 {. {. bklist NB. most recent backup
elseif.do. jderr ERR002 return.
end.
if. HASH ~: {:bknum do.
NB. check backup hashes
if. badrc uv=. hashbchk__ST {.bknum do. uv return.
NB. errmsg: backup hash failure ->
elseif. 0 e. }.;rv uv do. (jderr ERR031),<{.bknum return.
end.
end.
NB. is there enough space on the dictionary volume?
if. badrc uv=. restspace__DL {.bknum do. uv else. (}. uv) restdict__DL bkname;nxtbak end.
)
showpass soput ".'nl_',SOLOCALE,'_ i.4' [ cocurrent 'base' NB.{*JOD*}
".soclear NB.{*JOD*}
cocurrent SO__JODobj NB.{*JOD*}
zz=:fromascii85__MK__JODobj 0 : 0
1E\P#-p0UR/mg=U-Qm)2F(f5q@r!3)AU&<+@;Bb'D'3e+@r#TtE+*6lA8,Oq+ED%7FCZaJ/1<V7
,VUYu-p01/0I\P$4>8$7.4cl00I/>$/1<V9+>kE"0JYI=1,(L:1c7!G2`EZQ1c6C20JYI=1,(I9
1c[HS3B/rW1GU(.0JYI=1,(I92)I9N2`E`T1,C%.0JYI=1,(I92)[<K1GCaJ2`;d60JYI=1,(L:
1bg^F1,^sL1E\G,1,L[?0Jb=<2)6mH2)I'J1E\G,1,L[?0JY7<1GUjJ0JbOE2BXb/1,L[?0JY7<
1cRBP2`WcO1E\G,1,L[?0JY7<2Dm<I0K2!N2BXb/1,L[?0Jb=<0ek[D2DdEM.4cl00I/>$/1<V7
,VUYu-p01/0I\P$4>8$7.4cl00I\P$4>838-p014/1<V7.4dS8 ~>
)
cocurrent 'base' NB.{*JOD*}
puttstamps_ijod_=: (((1;'upgrade JOD')"_)`putallts__MK__JODobj)@.(3 = (4!:0)<'putallts__MK__JODobj') NB.{*JOD*}
showpass puttstamps ".".'zz_',SOLOCALE,'_' [ cocurrent 'base' NB.{*JOD*}
".soclear NB.{*JOD*}
cocurrent 'base' NB.{*JOD*}
0 0$(4!:55);:'sonl_z_ SOLOCALE_z_ soput_z_ soclear_z_' NB.{*JOD*}
showpass 'NB. end-of-JOD-dump-file regenerate cross references with: 0 globs&> }. revo '''' ' NB.{*JOD*}