Compare commits
645 Commits
nitely-210
...
makefile-n
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
90c81b6f60 | ||
|
|
929690c6a3 | ||
|
|
39ee2ecb5d | ||
|
|
a90b7ed73d | ||
|
|
54b2607070 | ||
|
|
971e8936b6 | ||
|
|
e276460836 | ||
|
|
ab818ff335 | ||
|
|
47d77542be | ||
|
|
934d0fb7a4 | ||
|
|
6420bdcf27 | ||
|
|
1d6e43e1ea | ||
|
|
8837c61f85 | ||
|
|
18aae01362 | ||
|
|
a84242561a | ||
|
|
70885c5a19 | ||
|
|
57de705f39 | ||
|
|
7c3fa261c7 | ||
|
|
7fe4d2dcca | ||
|
|
30a4697d75 | ||
|
|
60a766574d | ||
|
|
25a18f6bc0 | ||
|
|
6558a49adb | ||
|
|
4b30aa1640 | ||
|
|
3727653e23 | ||
|
|
b1294ea5e9 | ||
|
|
2a9076bede | ||
|
|
72456ce4ec | ||
|
|
c8c4768315 | ||
|
|
735108ecb7 | ||
|
|
f735fca83e | ||
|
|
560def37bc | ||
|
|
41f32b7db5 | ||
|
|
ab831a46ba | ||
|
|
f1cf759098 | ||
|
|
017bf88a3a | ||
|
|
b2f750e549 | ||
|
|
8cf17ce950 | ||
|
|
008aff1d25 | ||
|
|
214cfb8674 | ||
|
|
2e7b88d0cc | ||
|
|
14fbff63cf | ||
|
|
bec32f475a | ||
|
|
6e845d747f | ||
|
|
459aeef74a | ||
|
|
19ceac6515 | ||
|
|
914604a6eb | ||
|
|
05f3ad19eb | ||
|
|
c62c183ae4 | ||
|
|
328d3f53cd | ||
|
|
5b90251210 | ||
|
|
713f2388c7 | ||
|
|
f49729cbd3 | ||
|
|
bdf03e08a1 | ||
|
|
b19cfd5bbb | ||
|
|
e2d8c9e5ad | ||
|
|
2ea1321d81 | ||
|
|
9054814ef7 | ||
|
|
84dead86af | ||
|
|
5e83d63567 | ||
|
|
bcfeda62e1 | ||
|
|
45513f563b | ||
|
|
db084c6281 | ||
|
|
6c53acaca8 | ||
|
|
fbb5a8f6f5 | ||
|
|
cb8eab788a | ||
|
|
50dc0a9269 | ||
|
|
9273cffce2 | ||
|
|
df8c5a52f1 | ||
|
|
a219ea03e5 | ||
|
|
2072deb6ae | ||
|
|
f6c91ee11c | ||
|
|
adc27d9684 | ||
|
|
d92aa6395a | ||
|
|
f1833861cc | ||
|
|
270fee89e3 | ||
|
|
cba04e168c | ||
|
|
1e847ec274 | ||
|
|
f765676ec4 | ||
|
|
17c72a1f2f | ||
|
|
995c6de04e | ||
|
|
877c6fbf17 | ||
|
|
97b19f1b96 | ||
|
|
948b0e09d1 | ||
|
|
de4e5f5ca4 | ||
|
|
af912247b3 | ||
|
|
ebb5c739ea | ||
|
|
1bed018db8 | ||
|
|
8a8e6fa4dc | ||
|
|
bf2e34841b | ||
|
|
9ed6448591 | ||
|
|
445de6745d | ||
|
|
68ed78a9f9 | ||
|
|
1ae08139c9 | ||
|
|
bb4e230df4 | ||
|
|
02665ca91b | ||
|
|
b819e18c64 | ||
|
|
781709e4e1 | ||
|
|
b772b8383c | ||
|
|
701a642fb4 | ||
|
|
7f99792afe | ||
|
|
6a147af97f | ||
|
|
41b5870164 | ||
|
|
3ed4d52f53 | ||
|
|
3aa01c7a38 | ||
|
|
3cefaf338c | ||
|
|
204605268e | ||
|
|
62422cd4ce | ||
|
|
ed6a6e4e04 | ||
|
|
dbf6808bcb | ||
|
|
126a8cfb37 | ||
|
|
1ff71ea15d | ||
|
|
dfce541a18 | ||
|
|
84391b367b | ||
|
|
346c11b0ad | ||
|
|
ae2633591e | ||
|
|
b0ec2476d5 | ||
|
|
1c077d1b3d | ||
|
|
ca3280f894 | ||
|
|
5b3cf9b7d5 | ||
|
|
e4c3a16ce4 | ||
|
|
41f4489e9f | ||
|
|
51ef95d30f | ||
|
|
0c9744455c | ||
|
|
41608a1b27 | ||
|
|
9d26047d8c | ||
|
|
48c9a82a1c | ||
|
|
f9838ac631 | ||
|
|
f514dd04c2 | ||
|
|
656bb53ef6 | ||
|
|
c105799096 | ||
|
|
d2102bfe9b | ||
|
|
b59e37b703 | ||
|
|
71a2d7aac7 | ||
|
|
94269303d0 | ||
|
|
91305cc2c9 | ||
|
|
9b4c4a3bf7 | ||
|
|
51d554c67e | ||
|
|
b513bb44a3 | ||
|
|
652a9dc320 | ||
|
|
a678515a35 | ||
|
|
ca39ccf27b | ||
|
|
11ac5b7ec7 | ||
|
|
e1cd9260b4 | ||
|
|
9e433314d8 | ||
|
|
b0aa518a41 | ||
|
|
9e0bfabc52 | ||
|
|
feff0cefc0 | ||
|
|
a258a5e9f0 | ||
|
|
9529c35631 | ||
|
|
a111907bf4 | ||
|
|
c797d919f1 | ||
|
|
03e59d15c8 | ||
|
|
ebff4f7268 | ||
|
|
08880d550e | ||
|
|
e4b6f69e8e | ||
|
|
52499052e8 | ||
|
|
b5f71670cb | ||
|
|
d21dfe1061 | ||
|
|
efae6d2911 | ||
|
|
2aae0e7bb6 | ||
|
|
02a6d7ad1b | ||
|
|
4826035054 | ||
|
|
6c6856efb9 | ||
|
|
871bbb735f | ||
|
|
08852f7b55 | ||
|
|
4362618ea0 | ||
|
|
1659c452b5 | ||
|
|
f5a8888aff | ||
|
|
c281728c65 | ||
|
|
4fed40bb85 | ||
|
|
3cca8c4940 | ||
|
|
c4554894b3 | ||
|
|
58196b4011 | ||
|
|
f6a9b88b34 | ||
|
|
bad19ab45f | ||
|
|
d6a4b3bf88 | ||
|
|
b493d98aeb | ||
|
|
beb4a77195 | ||
|
|
d43846b4f4 | ||
|
|
28c673f296 | ||
|
|
e067e02dde | ||
|
|
1af56ddaa2 | ||
|
|
16dd66a016 | ||
|
|
81b74be043 | ||
|
|
f8a5d0fbe5 | ||
|
|
3e0ec62d27 | ||
|
|
654675661f | ||
|
|
3cb051ea7b | ||
|
|
8bb283e0c4 | ||
|
|
6fae5c14e9 | ||
|
|
c58ef4ee56 | ||
|
|
730fc5b678 | ||
|
|
8d54603329 | ||
|
|
21ceff5ad9 | ||
|
|
5a07e6c266 | ||
|
|
4a09d3a027 | ||
|
|
691563024b | ||
|
|
0f49e248d3 | ||
|
|
54782f5b21 | ||
|
|
d34522d769 | ||
|
|
c501dc82fb | ||
|
|
c256a8f411 | ||
|
|
69dbe43d87 | ||
|
|
989ec5b0b5 | ||
|
|
fb1d14dfeb | ||
|
|
6d86932d35 | ||
|
|
9ada6de6b9 | ||
|
|
12b5e90727 | ||
|
|
4b95a8b5d3 | ||
|
|
3fa571f798 | ||
|
|
10a598865f | ||
|
|
f2ef7cc8f6 | ||
|
|
0c9b539bc4 | ||
|
|
b53b6c4ba7 | ||
|
|
e5593ba0dc | ||
|
|
5fea4e6666 | ||
|
|
306af20e91 | ||
|
|
bb637c5b73 | ||
|
|
7eb12ee68b | ||
|
|
97cb04be46 | ||
|
|
62754015b0 | ||
|
|
9d09033cc4 | ||
|
|
d9c144d966 | ||
|
|
17dd03a358 | ||
|
|
382881a068 | ||
|
|
d0d952a10d | ||
|
|
d5d21397d4 | ||
|
|
7a4470ce8b | ||
|
|
32ff7b7649 | ||
|
|
096d860ac8 | ||
|
|
418b1df00d | ||
|
|
ba90344080 | ||
|
|
0eac6efb61 | ||
|
|
540aff091c | ||
|
|
3f244f6cd3 | ||
|
|
58557d383a | ||
|
|
882fbacf59 | ||
|
|
70ce516e0c | ||
|
|
fdb573c761 | ||
|
|
06368f95eb | ||
|
|
654ebc359c | ||
|
|
4e38802325 | ||
|
|
b43b63b287 | ||
|
|
016097e8bf | ||
|
|
99321e7951 | ||
|
|
8e4fc4ab74 | ||
|
|
c005cf86bf | ||
|
|
ecc2b22207 | ||
|
|
d0945f7a5f | ||
|
|
add65a9397 | ||
|
|
0474f924a4 | ||
|
|
a387094eab | ||
|
|
541a07e09b | ||
|
|
5ee5482dd2 | ||
|
|
095beef454 | ||
|
|
06a7356b00 | ||
|
|
147abac04c | ||
|
|
56a52af6b9 | ||
|
|
fad70d4947 | ||
|
|
f4c91ec419 | ||
|
|
f5e48847c9 | ||
|
|
b90bf65be9 | ||
|
|
d379bcc102 | ||
|
|
39a7512458 | ||
|
|
431d80fb3c | ||
|
|
78b76f6801 | ||
|
|
16517cdfc5 | ||
|
|
902d542121 | ||
|
|
c708f2ac55 | ||
|
|
43e6801341 | ||
|
|
27a6063ce9 | ||
|
|
cd6b64efa2 | ||
|
|
222da55f69 | ||
|
|
92f85c5957 | ||
|
|
6376579b1c | ||
|
|
5db76b4998 | ||
|
|
2b1d39b544 | ||
|
|
a23ce42726 | ||
|
|
3c26eeb964 | ||
|
|
e5961cde2c | ||
|
|
8441c257d5 | ||
|
|
96b5a70b90 | ||
|
|
0d13ed6a9d | ||
|
|
f3b73a5756 | ||
|
|
a54888734e | ||
|
|
06664219ca | ||
|
|
331f748652 | ||
|
|
e2748dc556 | ||
|
|
c1fb892333 | ||
|
|
c437b6c3bb | ||
|
|
6ff047828e | ||
|
|
4238dc3888 | ||
|
|
7a220ddcba | ||
|
|
41bb28f01e | ||
|
|
2728839bc7 | ||
|
|
2120f5f458 | ||
|
|
8ee32f6243 | ||
|
|
efa4ae1019 | ||
|
|
8c75696e65 | ||
|
|
17792da409 | ||
|
|
f721045f7c | ||
|
|
de3185002c | ||
|
|
c93e620624 | ||
|
|
718d9f988c | ||
|
|
06953f408a | ||
|
|
32e8f44d9a | ||
|
|
25e791de4f | ||
|
|
d7ca40ebeb | ||
|
|
f86be45834 | ||
|
|
32128f5e19 | ||
|
|
0d07ed6379 | ||
|
|
9660232d6e | ||
|
|
13e2b5cda6 | ||
|
|
648335bfec | ||
|
|
8c7f42e595 | ||
|
|
e64a02dcfb | ||
|
|
ae07d213f0 | ||
|
|
c92622e09e | ||
|
|
90c38de8db | ||
|
|
0ebec570e6 | ||
|
|
217938c104 | ||
|
|
5e629cebc9 | ||
|
|
b320333ac1 | ||
|
|
16d5779db4 | ||
|
|
c5eb54a3dc | ||
|
|
3c7fb08932 | ||
|
|
f262c98f53 | ||
|
|
9c8d9df1ac | ||
|
|
894ecd6d0c | ||
|
|
7eb0f28db4 | ||
|
|
d3d2534eb1 | ||
|
|
b9994581d4 | ||
|
|
ff29872150 | ||
|
|
cb122f4c58 | ||
|
|
205de6fd1b | ||
|
|
45b4edf040 | ||
|
|
51d9e995e1 | ||
|
|
4910ea5660 | ||
|
|
59f71f04c2 | ||
|
|
107ea72a67 | ||
|
|
48ebc675a7 | ||
|
|
d2ce98d131 | ||
|
|
8bfbe99367 | ||
|
|
d28bcf19fe | ||
|
|
e0ec580fd5 | ||
|
|
b796727165 | ||
|
|
dcba1a2d60 | ||
|
|
3f401c52a3 | ||
|
|
3de8a6d028 | ||
|
|
d5a7d144bd | ||
|
|
3364a4af07 | ||
|
|
74a43b9dea | ||
|
|
3a4852cf8b | ||
|
|
79fd39f15c | ||
|
|
3b9a825482 | ||
|
|
9f5a43abd1 | ||
|
|
eb33dcc7eb | ||
|
|
26308b385c | ||
|
|
e22f10b19a | ||
|
|
1eccc2e59b | ||
|
|
f9f1038efb | ||
|
|
196f771c41 | ||
|
|
8400f7bee8 | ||
|
|
a14d1ef405 | ||
|
|
ba8dc92045 | ||
|
|
6ec792510f | ||
|
|
5e6a035614 | ||
|
|
43b0120f2a | ||
|
|
157b98fa9b | ||
|
|
b859649f00 | ||
|
|
3af82b4aff | ||
|
|
0f36b20f7f | ||
|
|
a84dcf8f57 | ||
|
|
d035c4270f | ||
|
|
e7e297c45c | ||
|
|
0bdba59aa9 | ||
|
|
831aa94cb4 | ||
|
|
74dc52b73f | ||
|
|
405845937d | ||
|
|
ef24b9815d | ||
|
|
7bde19453e | ||
|
|
a544855c08 | ||
|
|
156b14851b | ||
|
|
b95e68766d | ||
|
|
3c35f6459b | ||
|
|
c68f84219a | ||
|
|
0f663ac5f5 | ||
|
|
6de8d3ec77 | ||
|
|
acc08e0dd7 | ||
|
|
8eb9efdcc7 | ||
|
|
f0f8b59ad8 | ||
|
|
111ebe2d27 | ||
|
|
fbf33fe8e5 | ||
|
|
d3b1c6a3b4 | ||
|
|
ab8da79d30 | ||
|
|
c35a92db11 | ||
|
|
601bc94fb7 | ||
|
|
200b73c39d | ||
|
|
72811d5bea | ||
|
|
8045087be3 | ||
|
|
1e4501be8e | ||
|
|
eb84efa12b | ||
|
|
7c24032530 | ||
|
|
4002f75be8 | ||
|
|
2ec33f860c | ||
|
|
071f8e5004 | ||
|
|
aad2344d82 | ||
|
|
018a464db4 | ||
|
|
f940246eb1 | ||
|
|
4ae11aebf4 | ||
|
|
ae1d6536ef | ||
|
|
d734ec9d45 | ||
|
|
0fc31e1183 | ||
|
|
17a3a5a93e | ||
|
|
db8c951887 | ||
|
|
c4fac75f0a | ||
|
|
160cf35f91 | ||
|
|
ac1fcd2e2e | ||
|
|
e292ff99db | ||
|
|
615885a0fa | ||
|
|
b2315a9b10 | ||
|
|
9dc01167c3 | ||
|
|
66091a2375 | ||
|
|
ca33b92033 | ||
|
|
fe90ac5f9f | ||
|
|
b791bff070 | ||
|
|
ab8e97ff7b | ||
|
|
f8e4bbd7cb | ||
|
|
c7272e78f2 | ||
|
|
f531e89dde | ||
|
|
293c973f1d | ||
|
|
fe62e8e6e2 | ||
|
|
51f0c19ad1 | ||
|
|
1438ddba1f | ||
|
|
ae3851ccf9 | ||
|
|
e3f9a4ca9a | ||
|
|
7966704f1e | ||
|
|
311e4f049c | ||
|
|
e119314a9e | ||
|
|
27d4df45e6 | ||
|
|
312e99b0f4 | ||
|
|
82eaacc542 | ||
|
|
479de87011 | ||
|
|
5445a12b7e | ||
|
|
fadf81012b | ||
|
|
792edfdad5 | ||
|
|
fd2e5ed93e | ||
|
|
e3e9156452 | ||
|
|
f0feca759b | ||
|
|
5fadc6c083 | ||
|
|
2dcfac5350 | ||
|
|
dcd83c3753 | ||
|
|
cde5c9018d | ||
|
|
1108a00b90 | ||
|
|
d9e445ad8c | ||
|
|
5b690d39d1 | ||
|
|
2573e4351f | ||
|
|
936bdd84b5 | ||
|
|
c2915bf5d3 | ||
|
|
40c10a7841 | ||
|
|
362fac9389 | ||
|
|
db082b37e1 | ||
|
|
c0e020f033 | ||
|
|
9af86df169 | ||
|
|
6c26fe958a | ||
|
|
339bd47107 | ||
|
|
3a04303d93 | ||
|
|
68f1e7efe1 | ||
|
|
993bdb2e00 | ||
|
|
7a27c26f01 | ||
|
|
75a031de39 | ||
|
|
7d656006a6 | ||
|
|
1f8c123184 | ||
|
|
50ce484c1b | ||
|
|
e3f043b40d | ||
|
|
945df5fbe8 | ||
|
|
3d8066b7e8 | ||
|
|
b303e0affa | ||
|
|
869b3a2e32 | ||
|
|
f19d9cc5e2 | ||
|
|
237f3aa6bf | ||
|
|
89a8fe183d | ||
|
|
8266980c22 | ||
|
|
c385039c42 | ||
|
|
1ff0018772 | ||
|
|
6611f96702 | ||
|
|
824e0f20b2 | ||
|
|
d479ef2ef9 | ||
|
|
98aa15455e | ||
|
|
ca069578c3 | ||
|
|
23731b05d1 | ||
|
|
ab4800054e | ||
|
|
b1634ef140 | ||
|
|
76a2235636 | ||
|
|
7c65b47fba | ||
|
|
a315e6926f | ||
|
|
c3a497d8f3 | ||
|
|
9cf54a1687 | ||
|
|
5490abb143 | ||
|
|
18f5da85fd | ||
|
|
01de5a2324 | ||
|
|
528776de19 | ||
|
|
1c9c1da257 | ||
|
|
b67cf5ae09 | ||
|
|
d1fe834e6f | ||
|
|
c3b5e23cd9 | ||
|
|
9b4976e33f | ||
|
|
31d9473184 | ||
|
|
bf5689be2a | ||
|
|
08bdd34e69 | ||
|
|
c7a219fd22 | ||
|
|
13cfb9b835 | ||
|
|
b3219c33da | ||
|
|
b0f9f2cce8 | ||
|
|
1ad92b3dd4 | ||
|
|
588835603c | ||
|
|
df70662f2c | ||
|
|
32461da7eb | ||
|
|
1beba945a2 | ||
|
|
e6cf869a23 | ||
|
|
a6efdb3558 | ||
|
|
e222743f74 | ||
|
|
ea0f303988 | ||
|
|
b85084ce31 | ||
|
|
e39943fdcc | ||
|
|
a4370ae57d | ||
|
|
cbfdfd6dab | ||
|
|
84bf09394e | ||
|
|
a92bce555f | ||
|
|
ae26c3c9fa | ||
|
|
09fec6ac56 | ||
|
|
625a5a839c | ||
|
|
f28a7a6278 | ||
|
|
9f85f4e17e | ||
|
|
1380722e55 | ||
|
|
d6173b5269 | ||
|
|
1d8fa0301d | ||
|
|
65a2d8000e | ||
|
|
388d54b713 | ||
|
|
f58936e762 | ||
|
|
63904f754c | ||
|
|
2dabe594f3 | ||
|
|
0462c1aa5e | ||
|
|
1d4c9ed6ee | ||
|
|
6b66665e9d | ||
|
|
db3ca49564 | ||
|
|
c89ac61d34 | ||
|
|
9b7464d966 | ||
|
|
5a9bc56628 | ||
|
|
205223c9b1 | ||
|
|
ccc776608d | ||
|
|
25617e383a | ||
|
|
5e6eb4b424 | ||
|
|
7175669633 | ||
|
|
21088d3eff | ||
|
|
8ec1ca966d | ||
|
|
c55239f744 | ||
|
|
d6f7ad7de9 | ||
|
|
0236971881 | ||
|
|
d04f734295 | ||
|
|
27a52b6ce0 | ||
|
|
0e2e16f183 | ||
|
|
b760d005fb | ||
|
|
95c9496780 | ||
|
|
4bb4457d55 | ||
|
|
2615140ede | ||
|
|
77d772ae45 | ||
|
|
995c321f59 | ||
|
|
9d4a8796dd | ||
|
|
185ee4db70 | ||
|
|
f5205e23c6 | ||
|
|
b57438983b | ||
|
|
f4951abf4d | ||
|
|
d1fb141fa1 | ||
|
|
66624477f9 | ||
|
|
c810d2860b | ||
|
|
3ef7a79b52 | ||
|
|
c37fed89e8 | ||
|
|
7897471126 | ||
|
|
3d7905905b | ||
|
|
439cc93ca4 | ||
|
|
9282681644 | ||
|
|
b4c5b304c4 | ||
|
|
6176aa9ebf | ||
|
|
7b5541a417 | ||
|
|
c62ad47730 | ||
|
|
cdd9bc46d7 | ||
|
|
ab24d11371 | ||
|
|
af16fb48fa | ||
|
|
0d2c6622bb | ||
|
|
d6d47953d9 | ||
|
|
3569379861 | ||
|
|
9ab24c044d | ||
|
|
565f5994f2 | ||
|
|
93d9b7f176 | ||
|
|
8a5057fbdc | ||
|
|
b07d528f22 | ||
|
|
3de2ebb719 | ||
|
|
a2fdebbfa0 | ||
|
|
b1d209484a | ||
|
|
c2cff44a64 | ||
|
|
c94e044bf3 | ||
|
|
d64e9282bf | ||
|
|
3fc26567c0 | ||
|
|
25c397ccdf | ||
|
|
b18d16b807 | ||
|
|
9b7df4a022 | ||
|
|
4ea68c6746 | ||
|
|
ff134ecd23 | ||
|
|
925adc1deb | ||
|
|
4efe2f93af | ||
|
|
4fac4e3e96 | ||
|
|
966b837351 | ||
|
|
dac0acd0d5 | ||
|
|
105b0d1f3a | ||
|
|
10e3916e7e | ||
|
|
2cf33cebcf | ||
|
|
d40aeffdc7 | ||
|
|
6f9cafc578 | ||
|
|
a781751832 | ||
|
|
d5b26c1352 | ||
|
|
0a5ff04393 | ||
|
|
a946a90ef8 | ||
|
|
66fa5e42cf | ||
|
|
05df858e55 | ||
|
|
f64f8bbb87 | ||
|
|
2388f730ca | ||
|
|
607d9ab2e7 | ||
|
|
f0ad3c5f60 | ||
|
|
179325c528 | ||
|
|
21c8759084 | ||
|
|
f0b9ce3dae | ||
|
|
1d81350714 | ||
|
|
5a83a9cd8f | ||
|
|
ba70b3a126 | ||
|
|
26e4af726a | ||
|
|
ad912885aa | ||
|
|
ee5efd782f | ||
|
|
9ddef79484 | ||
|
|
5a04b88dcc | ||
|
|
945ffe56f8 | ||
|
|
7d8efbdfd6 | ||
|
|
6e9791ad0a | ||
|
|
3e64317db5 |
9
.gitattributes
vendored
Normal file
9
.gitattributes
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# Denote all files that are truly binary and should not be modified.
|
||||
*.tedit binary
|
||||
*.lcom binary
|
||||
*.sketch binary
|
||||
*.dfasl binary
|
||||
*.TEDIT binary
|
||||
*.LCOM binary
|
||||
*.SKETCH binary
|
||||
*.DFASL binary
|
||||
17
.github/ISSUE_TEMPLATE/documentation.md
vendored
Normal file
17
.github/ISSUE_TEMPLATE/documentation.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
name: Documentation problem
|
||||
about: Problems with this web site?
|
||||
title: ''
|
||||
labels: ''
|
||||
|
||||
---
|
||||
|
||||
**Errors happen. Please tell us the URL**
|
||||
|
||||
|
||||
**What does it say?**
|
||||
|
||||
|
||||
**What should it say?**
|
||||
|
||||
**Screen shot**
|
||||
32
.github/ISSUE_TEMPLATE/what_people_are_saying.yml
vendored
Normal file
32
.github/ISSUE_TEMPLATE/what_people_are_saying.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: "New entry for **What People Are Saying**"
|
||||
description: "Suggest a new entry for the **What People are Saying** page"
|
||||
title: "What People are Saying suggestion"
|
||||
body:
|
||||
- type: dropdown
|
||||
id: contentType
|
||||
attributes:
|
||||
label: "What type of entry?"
|
||||
options:
|
||||
- Blog
|
||||
- Tweet
|
||||
- Email
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: entryLink
|
||||
attributes:
|
||||
label: Link to entry
|
||||
description: "What is the link to the item we should add to the **What People are Saying** page?"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additionalInformation
|
||||
attributes:
|
||||
label: Additional information
|
||||
description: "Use this space to supply any addiitonal information on the suggested item."
|
||||
validations:
|
||||
required: false
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: "## Thank you for your suggestion!"
|
||||
84
.github/workflows/Dockerfile_medley
vendored
Normal file
84
.github/workflows/Dockerfile_medley
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
#*******************************************************************************
|
||||
#
|
||||
# Dockerfile to build Medley image from latest Maiko image
|
||||
# plus latest release tars from github
|
||||
#
|
||||
# Copyright 2022-2023 by Interlisp.org
|
||||
#
|
||||
# ******************************************************************************
|
||||
|
||||
FROM ubuntu:22.04
|
||||
ARG TARGETPLATFORM
|
||||
|
||||
# Handle ARGs, ENV variables, and LABELs
|
||||
ARG BUILD_DATE=unknown
|
||||
ARG MEDLEY_RELEASE=unknown
|
||||
ARG MAIKO_RELEASE=unknown
|
||||
ARG REPO_OWNER=Interlisp
|
||||
LABEL name="Medley"
|
||||
LABEL description="The Medley Interlisp environment"
|
||||
LABEL url="https://github.com/${REPO_OWNER}/medley"
|
||||
LABEL build-date=$BUILD_DATE
|
||||
LABEL medley_release=$MEDLEY_RELEASE
|
||||
LABEL maiko_release=$MAIKO_RELEASE
|
||||
|
||||
ENV MEDLEY_DOCKER_BUILD_DATE=$BUILD_DATE
|
||||
ENV MEDLEY_RELEASE=$MEDLEY_RELEASE
|
||||
ENV MAIKO_RELEASE=$MAIKO_RELEASE
|
||||
|
||||
ENV LANG=C.UTF-8
|
||||
|
||||
# Copy over the release deb files
|
||||
ADD ./*.deb /tmp
|
||||
|
||||
# Get tzdata setup ahead of time
|
||||
RUN apt-get update; \
|
||||
ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime; \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata; \
|
||||
dpkg-reconfigure --frontend noninteractive tzdata
|
||||
|
||||
# Install Medley/Maiko and add tightvnc server and xclip to the image
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y apt-utils \
|
||||
&& apt-get install -y tigervnc-standalone-server \
|
||||
&& apt-get install -y xclip \
|
||||
&& apt-get install -y man-db \
|
||||
&& apt-get install -y nano \
|
||||
&& apt-get install -y sudo \
|
||||
&& p=$(echo "${TARGETPLATFORM}" | sed -e "s#linux/##") \
|
||||
&& p=$( \
|
||||
if [ "$p" = "amd64" ]; \
|
||||
then echo "x86_64"; \
|
||||
elif [ "$p" = "arm64" ]; \
|
||||
then echo "aarch64"; \
|
||||
elif [ "$p" = "arm/v7" ]; \
|
||||
then echo "armv7l"; \
|
||||
else \
|
||||
echo "x86_64"; \
|
||||
fi \
|
||||
) \
|
||||
&& deb="medley-full-linux-${p}-${MEDLEY_RELEASE#medley-}" \
|
||||
&& deb=${deb}_${MAIKO_RELEASE#maiko-}.deb \
|
||||
&& apt-get install -y /tmp/${deb} \
|
||||
&& chown --recursive root:root /usr/local/interlisp \
|
||||
&& (if [ -n "$(which unminimize)" ]; then (yes | unminimize); fi)
|
||||
|
||||
# "Finalize" image
|
||||
EXPOSE 5900
|
||||
RUN adduser --gecos "" medley \
|
||||
&& adduser --gecos "" ubuntu \
|
||||
&& adduser medley sudo \
|
||||
&& adduser ubuntu sudo \
|
||||
&& (echo 'medley:yeldem' | chpasswd ) \
|
||||
&& (echo 'ubuntu:utnubu' | chpasswd ) \
|
||||
&& echo "medley ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers \
|
||||
&& echo "ubuntu ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers \
|
||||
&& mkdir -p /home/medley/il \
|
||||
&& chown medley:medley /home/medley/il
|
||||
|
||||
ENV TERM=xterm
|
||||
USER medley
|
||||
WORKDIR /home/medley
|
||||
#ENTRYPOINT USER=medley Xvnc -SecurityTypes none -geometry 1280x720 :0 & DISPLAY=:0 medley --full -g 1280x720
|
||||
ENTRYPOINT /bin/bash
|
||||
|
||||
268
.github/workflows/buildDocker.yml
vendored
Normal file
268
.github/workflows/buildDocker.yml
vendored
Normal file
@@ -0,0 +1,268 @@
|
||||
#*******************************************************************************
|
||||
# buidDocker.yml
|
||||
#
|
||||
# Workflow to build and push a multiplatform (amd64, arm64 & arm7) Linux Docker
|
||||
# image for Medley. This workflow uses the latest Maiko docker image and the
|
||||
# latest Medley release on github.
|
||||
#
|
||||
# This workflow contains a sentry that causes it to skip the build (as identified
|
||||
# by its commit SHA) if its already been done. Setting the "force" input to true
|
||||
# will bypass this sentry,
|
||||
#
|
||||
# Updated 2022-01-18 by Frank Halasz from on earlier buildDocker.yml
|
||||
#
|
||||
# Copyright 2022 by Interlisp.org
|
||||
#
|
||||
# ******************************************************************************
|
||||
|
||||
name: 'Build/Push Docker Image'
|
||||
|
||||
# Run this workflow on ...
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
|
||||
workflow_call:
|
||||
outputs:
|
||||
successful:
|
||||
description: "'True' if medley docker build completed successully"
|
||||
value: ${{ jobs.complete.outputs.build_successful }}
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
secrets:
|
||||
DOCKER_USERNAME:
|
||||
required: true
|
||||
DOCKER_PASSWORD:
|
||||
required: true
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Regularize the inputs so they can be referenced the same way whether they are
|
||||
# the result of a workflow_dispatch or a workflow_call
|
||||
|
||||
inputs:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
draft: ${{ steps.one.outputs.draft }}
|
||||
force: ${{ steps.one.outputs.force }}
|
||||
steps:
|
||||
- id: one
|
||||
run: >
|
||||
if [ '${{ toJSON(inputs) }}' = 'null' ];
|
||||
then
|
||||
echo "workflow_dispatch";
|
||||
echo "draft=${{ github.event.inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ github.event.inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
else
|
||||
echo "workflow_call";
|
||||
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
fi
|
||||
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Use sentry-action to determine if this release has already been built
|
||||
# based on the latest commit to the repo
|
||||
|
||||
sentry:
|
||||
needs: inputs
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
||||
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Check if build already run for this commit
|
||||
- name: Build already completed?
|
||||
id: check
|
||||
continue-on-error: true
|
||||
uses: ./../actions/check-sentry-action
|
||||
with:
|
||||
tag: "docker"
|
||||
|
||||
######################################################################################
|
||||
|
||||
#
|
||||
# Build and push the medley docker image
|
||||
#
|
||||
|
||||
build_and-push:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: [inputs, sentry]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|
||||
steps:
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Find latest release (draft or normal)
|
||||
# and download its assets
|
||||
- name: Download linux debs from latest (draft) release
|
||||
run: |
|
||||
tag=""
|
||||
if [ "${{ needs.inputs.outputs.draft }}" = "true" ];
|
||||
then
|
||||
tag=$(gh release list | grep Draft | head -n 1 | awk '{ print $3 }')
|
||||
fi
|
||||
if [ -z "${tag}" ];
|
||||
then
|
||||
tag=$(gh release list | grep Latest | head -n 1 | awk '{ print $3 }')
|
||||
fi
|
||||
mkdir -p release_debs
|
||||
gh release download ${tag} -D release_debs -p '*-linux-*.deb'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Get Maiko and Medley release information from name of deb files
|
||||
# just downloaded from the Medley latest release
|
||||
- name: Get info about Miako and Medley releases
|
||||
id: release_info
|
||||
run: |
|
||||
regex="^medley-full-[^-]*-[^-]*-\([^_]*\)_\(.*\).deb\$"
|
||||
ls -1 release_debs | head -n 1 > debname.tmp
|
||||
medley_release="medley-$(sed -e "s/${regex}/\1/" debname.tmp)"
|
||||
maiko_release="maiko-$(sed -e "s/${regex}/\2/" debname.tmp)"
|
||||
rm -f debname.tmp
|
||||
echo "MEDLEY_RELEASE=${medley_release}" >> ${GITHUB_ENV}
|
||||
echo "MAIKO_RELEASE=${maiko_release}" >> ${GITHUB_ENV}
|
||||
|
||||
# regex="^[^0-9]*\([^_]*\)_\([^-]*-[^-]*\)-\([^-]*\)-\([^.]*\).*\$"
|
||||
|
||||
# Set repo env variables
|
||||
- name: Set repo/docker env variables
|
||||
id: repo_env
|
||||
run: |
|
||||
repo_name="${GITHUB_REPOSITORY#*/}"
|
||||
docker_namespace="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')"
|
||||
docker_image="${docker_namespace}/${repo_name}"
|
||||
if [ "${{ needs.inputs.outputs.draft }}" = "false" ];
|
||||
then
|
||||
docker_tags="${docker_image}:latest,${docker_image}:${MEDLEY_RELEASE#*-}_${MAIKO_RELEASE#*-}"
|
||||
platforms="linux/amd64,linux/arm64"
|
||||
else
|
||||
docker_tags="${docker_image}:draft"
|
||||
platforms="linux/amd64"
|
||||
fi
|
||||
echo "REPO_NAME=${repo_name}" >> ${GITHUB_ENV}
|
||||
echo "DOCKER_NAMESPACE=${docker_namespace}" >> ${GITHUB_ENV}
|
||||
echo "DOCKER_IMAGE=${docker_image}" >> ${GITHUB_ENV}
|
||||
echo "DOCKER_TAGS=${docker_tags}" >> ${GITHUB_ENV}
|
||||
echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> ${GITHUB_ENV}
|
||||
echo "PLATFORMS=${platforms}" >> ${GITHUB_ENV}
|
||||
#linux/amd64,linux/arm64,linux/arm/v7
|
||||
|
||||
# Setup the Docker Machine Emulation environment.
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@master
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
|
||||
# Setup the Docker Buildx funtion
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@master
|
||||
|
||||
# Login into DockerHub - required to store the created image
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
# Do the Docker Build using the Dockerfile in the repository
|
||||
# checked out and the release tars just downloaded.
|
||||
# Push the result to Docker Hub
|
||||
- name: Build Docker Image for Push to Docker Hub
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
build-args: |
|
||||
BUILD_DATE=${{ env.BUILD_DATE }}
|
||||
MEDLEY_RELEASE=${{ env.MEDLEY_RELEASE }}
|
||||
MAIKO_RELEASE=${{ env.MAIKO_RELEASE }}
|
||||
REPO_OWNER=${{ github.repository_owner }}
|
||||
context: ./release_debs
|
||||
file: ./.github/workflows/Dockerfile_medley
|
||||
platforms: ${{ env.PLATFORMS }}
|
||||
# Push the result to DockerHub
|
||||
push: true
|
||||
tags: ${{ env.DOCKER_TAGS }}
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Use set-sentry-action to determine set the sentry that says this release has
|
||||
# been successfully built
|
||||
|
||||
complete:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
build_successful: ${{ steps.output.outputs.build_successful }}
|
||||
|
||||
needs: [inputs, sentry, build_and-push]
|
||||
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Set sentry
|
||||
- name: Set flag that build for this commit has been completed
|
||||
id: set
|
||||
uses: ./../actions/set-sentry-action
|
||||
with:
|
||||
tag: "docker"
|
||||
|
||||
- name: Output
|
||||
id: output
|
||||
run: |
|
||||
echo "build_successful='true'" >> ${GITHUB_OUTPUT}
|
||||
|
||||
######################################################################################
|
||||
671
.github/workflows/buildLoadup.yml
vendored
Normal file
671
.github/workflows/buildLoadup.yml
vendored
Normal file
@@ -0,0 +1,671 @@
|
||||
#*******************************************************************************
|
||||
# buidLoadup.yml
|
||||
#
|
||||
# Interlisp workflow to build Medley release and push it to github. This workflow
|
||||
# is platform independent - but runs on Linux/amd64.
|
||||
#
|
||||
# This workflow contains a sentry that causes it to skip the build (as identified
|
||||
# by its commit SHA) if its already been done. Setting the "force" input to true
|
||||
# will bypass this sentry,
|
||||
#
|
||||
# 2022-01-17 Frank Halasz based on an earlier version of buildLoadup for Medley.
|
||||
#
|
||||
# Copyright 2022-2023 by Interlisp.org
|
||||
#
|
||||
# ******************************************************************************
|
||||
|
||||
name: Build/Push Medley Release
|
||||
|
||||
# Run this workflow on ...
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
|
||||
workflow_call:
|
||||
outputs:
|
||||
successful:
|
||||
description: "'True' if medley build completed successully"
|
||||
value: ${{ jobs.complete.outputs.build_successful }}
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
secrets:
|
||||
OIO_SSH_KEY:
|
||||
required: true
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
# JOB: inputs #######################################################################
|
||||
|
||||
# Regularize the inputs so they can be referenced the same way whether they are
|
||||
# the result of a workflow_dispatch or a workflow_call
|
||||
|
||||
inputs:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
draft: ${{ steps.one.outputs.draft }}
|
||||
force: ${{ steps.one.outputs.force }}
|
||||
steps:
|
||||
- id: one
|
||||
run: >
|
||||
if [ '${{ toJSON(inputs) }}' = 'null' ];
|
||||
then
|
||||
echo "workflow_dispatch";
|
||||
echo "draft=${{ github.event.inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ github.event.inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
else
|
||||
echo "workflow_call";
|
||||
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
fi
|
||||
|
||||
|
||||
# JOB: sentry #######################################################################
|
||||
|
||||
# Use sentry-action to determine if this release has already been built
|
||||
# based on the latest commit to the repo
|
||||
|
||||
sentry:
|
||||
needs: inputs
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
||||
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Check if build already run for this commit
|
||||
- name: Build already completed?
|
||||
id: check
|
||||
continue-on-error: true
|
||||
uses: ./../actions/check-sentry-action
|
||||
with:
|
||||
tag: "loadup"
|
||||
|
||||
|
||||
# JOB: loadup #######################################################################
|
||||
|
||||
#
|
||||
# Do the loadup and push to release on github
|
||||
#
|
||||
|
||||
loadup:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
combined_release_tag: ${{ steps.job_outputs.outputs.COMBINED_RELEASE_TAG }}
|
||||
medley_release_tag: ${{ steps.job_outputs.outputs.MEDLEY_RELEASE_TAG }}
|
||||
medley_short_release_tag: ${{ steps.job_outputs.outputs.MEDLEY_SHORT_RELEASE_TAG }}
|
||||
debs_filename_base: ${{ steps.debs.outputs.DEBS_FILENAME_BASE }}
|
||||
maiko_release_tag: ${{ steps.job_outputs.outputs.MAIKO_RELEASE_TAG }}
|
||||
artifacts_filename_template: ${{ steps.job_outputs.outputs.ARTIFACTS_FILENAME_TEMPLATE }}
|
||||
release_url: ${{ steps.push.outputs.html_url }}
|
||||
|
||||
needs: [inputs, sentry]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Setup release tag
|
||||
- name: Setup Release Tag
|
||||
id: tag
|
||||
uses: ./../actions/release-tag-action
|
||||
|
||||
# Get Maiko release information, retrieves the name of the latest (draft)
|
||||
# release. Used to download the correct Maiko release
|
||||
# Find latest release (draft or normal)
|
||||
- name: Get maiko release information
|
||||
id: maiko
|
||||
run: |
|
||||
tag=""
|
||||
if [ "${{ needs.inputs.outputs.draft }}" = "true" ];
|
||||
then
|
||||
gh release list --repo ${{ github.repository_owner }}/maiko | grep Draft >/tmp/releases-$$
|
||||
if [ $? -eq 0 ];
|
||||
then
|
||||
tag=$(head -n 1 /tmp/releases-$$ | awk '{ print $3 }')
|
||||
fi
|
||||
fi
|
||||
if [ -z "${tag}" ];
|
||||
then
|
||||
tag=$(gh release list --repo ${{ github.repository_owner }}/maiko | grep Latest | head -n 1 | awk '{ print $3 }')
|
||||
fi
|
||||
echo "maiko_tag=${tag}" >> ${GITHUB_OUTPUT}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.MAIKO_TOKEN }}
|
||||
# Setup environment variables & establish job outputs
|
||||
- name: Setup Environment Variables
|
||||
run: |
|
||||
echo "build_time=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> ${GITHUB_OUTPUT}
|
||||
echo "TARBALL_DIR=/tmp/tarballs" >>${GITHUB_ENV}
|
||||
echo "MEDLEY_RELEASE_TAG=${RELEASE_TAG}" >>${GITHUB_ENV}
|
||||
echo "MAIKO_RELEASE_TAG=${{ steps.maiko.outputs.maiko_tag }}" >>${GITHUB_ENV}
|
||||
echo "ARTIFACTS_FILENAME_TEMPLATE=medley-full-@@PLATFORM@@-@@ARCH@@-@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@" >>${GITHUB_ENV}
|
||||
- name: More Environment Variables
|
||||
run: |
|
||||
echo "MEDLEY_SHORT_RELEASE_TAG=${MEDLEY_RELEASE_TAG#medley-}" >>${GITHUB_ENV}
|
||||
echo "MAIKO_SHORT_RELEASE_TAG=${MAIKO_RELEASE_TAG#maiko-}" >>${GITHUB_ENV}
|
||||
- name: Even More Environment Variables
|
||||
run: |
|
||||
echo "COMBINED_RELEASE_TAG=${MEDLEY_SHORT_RELEASE_TAG}_${MAIKO_SHORT_RELEASE_TAG}" >>${GITHUB_ENV}
|
||||
- name: Establish job outputs
|
||||
id: job_outputs
|
||||
run: |
|
||||
echo "COMBINED_RELEASE_TAG=${COMBINED_RELEASE_TAG}" >> ${GITHUB_OUTPUT}
|
||||
echo "MEDLEY_RELEASE_TAG=${MEDLEY_RELEASE_TAG}" >> ${GITHUB_OUTPUT}
|
||||
echo "MEDLEY_SHORT_RELEASE_TAG=${MEDLEY_SHORT_RELEASE_TAG}" >> ${GITHUB_OUTPUT}
|
||||
echo "MAIKO_RELEASE_TAG=${MAIKO_RELEASE_TAG}" >> $GITHUB_OUTPUT;
|
||||
echo "ARTIFACTS_FILENAME_TEMPLATE=${ARTIFACTS_FILENAME_TEMPLATE}" >> ${GITHUB_OUTPUT}
|
||||
|
||||
# Setup some needed dirs in workspace
|
||||
- name: Create work dirs
|
||||
run: mkdir -p ${TARBALL_DIR}
|
||||
|
||||
# Download Maiko Release Assets and untar it
|
||||
- name: Download Release Assets
|
||||
run: |
|
||||
gh release download ${MAIKO_RELEASE_TAG} \
|
||||
-D ${TARBALL_DIR} \
|
||||
--repo ${{ github.repository_owner }}/maiko \
|
||||
-p '*.tgz'
|
||||
tar -xzf "${TARBALL_DIR}/${MAIKO_RELEASE_TAG}-linux.x86_64.tgz"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.MAIKO_TOKEN }}
|
||||
|
||||
# Checkout Notecards and tar it in the tarballsdir
|
||||
- name: Checkout Notecards
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/notecards
|
||||
path: ./notecards
|
||||
- name: Tar notecards into tarball dir
|
||||
run: |
|
||||
mv ./notecards ../notecards
|
||||
cd ../notecards
|
||||
git archive --format=tgz --output="${TARBALL_DIR}/notecards.tgz" --prefix=notecards/ main
|
||||
|
||||
# Install vnc
|
||||
- name: Install vnc
|
||||
run: sudo apt-get update && sudo apt-get install -y tightvncserver
|
||||
|
||||
- name: Build Loadup sysouts and databases
|
||||
run: |
|
||||
Xvnc -geometry 1280x720 :0 &
|
||||
export DISPLAY=":0"
|
||||
scripts/loadup-all.sh -apps
|
||||
scripts/loadup-db.sh
|
||||
|
||||
- name: Build release tars
|
||||
run: |
|
||||
scripts/release-make-tars.sh "${MEDLEY_RELEASE_TAG}"
|
||||
mv releases/"${MEDLEY_SHORT_RELEASE_TAG}"/*.tgz "${TARBALL_DIR}"
|
||||
|
||||
# Push the release up to github releases
|
||||
- name: Delete existing release with same tag (if any)
|
||||
uses: cb80/delrel@latest
|
||||
with:
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Push the release
|
||||
id: push
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts:
|
||||
# ${{ env.TARBALL_DIR }}/notecards.tgz,
|
||||
${{ env.TARBALL_DIR }}/${{ env.MEDLEY_RELEASE_TAG }}-loadups.tgz,
|
||||
${{ env.TARBALL_DIR }}/${{ env.MEDLEY_RELEASE_TAG }}-runtime.tgz
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
draft: ${{ needs.inputs.outputs.draft }}
|
||||
prerelease: false
|
||||
generateReleaseNotes: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Save the tarball directory for subsequent jobs
|
||||
- name: Save tarballs
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: tarballs
|
||||
path: ${{ env.TARBALL_DIR }}
|
||||
if-no-files-found: error
|
||||
|
||||
|
||||
# JOB: linux_installer ##############################################################
|
||||
|
||||
#
|
||||
# Create the linux installers (.deb and .tgz) and push to release on github
|
||||
#
|
||||
linux_installer:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: [inputs, sentry, loadup]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|
||||
steps:
|
||||
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Environment variables
|
||||
- name: Environment variables
|
||||
run: |
|
||||
echo "DEBS_DIR=installers/deb/debs" >>${GITHUB_ENV}
|
||||
echo "TARS_DIR=installers/deb/tars" >>${GITHUB_ENV}
|
||||
echo "TARBALL_DIR=installers/deb/tmp/tarballs" >>${GITHUB_ENV}
|
||||
echo "MEDLEY_RELEASE_TAG=${{ needs.loadup.outputs.medley_release_tag }}" \
|
||||
>>${GITHUB_ENV}
|
||||
echo "ARTIFACTS_FILENAME_TEMPLATE=${{ needs.loadup.outputs.artifacts_filename_template }}" >>${GITHUB_ENV}
|
||||
|
||||
# Create taball dir
|
||||
- run: mkdir -p ${TARBALL_DIR}
|
||||
|
||||
# Get the tarballs
|
||||
- name: Get tarballs
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: tarballs
|
||||
path: ${{ env.TARBALL_DIR }}
|
||||
|
||||
# Build the deb files as well as the tgz files
|
||||
- name: Build .deb files for 3 architectures
|
||||
id: debs
|
||||
run: |
|
||||
cd installers/deb
|
||||
./build_deb.sh
|
||||
|
||||
# Push the debs and tgz up to github releases
|
||||
- name: Push the release
|
||||
id: push_release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts:
|
||||
${{ env.DEBS_DIR }}/*.deb,
|
||||
${{ env.TARS_DIR }}/*.tgz
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
omitBodyDuringUpdate: true
|
||||
omitDraftDuringUpdate: true
|
||||
omitNameDuringUpdate: true
|
||||
omitPrereleaseDuringUpdate: true
|
||||
|
||||
- name: Rename medley tar for the x86_64 platform
|
||||
run: |
|
||||
cd ${{ env.TARS_DIR }}
|
||||
mv medley-full-linux-x86_64-*.tgz medley.tgz
|
||||
|
||||
- name: Save medley tar for use in cygwin installers
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: medley-tar
|
||||
path: |
|
||||
${{ env.TARS_DIR }}/medley.tgz
|
||||
|
||||
|
||||
# JOB: macos_installer ##############################################################
|
||||
|
||||
#
|
||||
# Create the macos installers (.dmg and .zip) and push to release on github
|
||||
#
|
||||
macos_installer:
|
||||
|
||||
runs-on: macos-12
|
||||
|
||||
needs: [inputs, sentry, loadup]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
# if: false
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
steps:
|
||||
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Environment variables
|
||||
- name: Environment variables
|
||||
run: |
|
||||
MACOS_DIR=installers/macos
|
||||
echo "MACOS_DIR=${MACOS_DIR}" >>${GITHUB_ENV}
|
||||
echo "ARTIFACTS_DIR=${MACOS_DIR}/artifacts" >>${GITHUB_ENV}
|
||||
echo "TARBALL_DIR=${MACOS_DIR}/tmp/tarballs" >>${GITHUB_ENV}
|
||||
echo "MEDLEY_RELEASE_TAG=${{ needs.loadup.outputs.medley_release_tag }}" >>${GITHUB_ENV}
|
||||
echo "ARTIFACTS_FILENAME_TEMPLATE=${{ needs.loadup.outputs.artifacts_filename_template }}" >>${GITHUB_ENV}
|
||||
|
||||
# Create tarball dir
|
||||
- run: mkdir -p ${TARBALL_DIR}
|
||||
|
||||
# Get the tarballs
|
||||
- name: Get tarballs
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: tarballs
|
||||
path: ${{ env.TARBALL_DIR }}
|
||||
|
||||
# Build the .dmg and .zip files
|
||||
- name: Build .dmg & .zip files
|
||||
id: dmg-zip
|
||||
run: |
|
||||
cd ${MACOS_DIR}
|
||||
./build_artifacts.sh
|
||||
|
||||
# Push the .dmg and .zip up to github releases
|
||||
- name: Push the release
|
||||
id: push_release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts:
|
||||
# 2023-07-20 not yet building dmg -- ${{ env.ARTIFACTS_DIR }}/*.dmg,
|
||||
${{ env.ARTIFACTS_DIR }}/*.zip
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
omitBodyDuringUpdate: true
|
||||
omitDraftDuringUpdate: true
|
||||
omitNameDuringUpdate: true
|
||||
omitPrereleaseDuringUpdate: true
|
||||
|
||||
|
||||
|
||||
# JOB: cygwin_installer #############################################################
|
||||
|
||||
#
|
||||
# Create the Windows installer, push it up to the release on github and
|
||||
# update the downloads page on OIO
|
||||
#
|
||||
cygwin_installer:
|
||||
|
||||
runs-on: windows-2022
|
||||
|
||||
needs: [inputs, sentry, loadup, linux_installer]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|
||||
outputs:
|
||||
cygwin_installer: ${{ steps.compile_iss.outputs.CYGWIN_INSTALLER }}
|
||||
|
||||
steps:
|
||||
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Store the values output from loadup job as environment variables
|
||||
- name: Environment Variables
|
||||
shell: powershell
|
||||
run: |
|
||||
$crt="${{ needs.loadup.outputs.combined_release_tag }}"
|
||||
echo "COMBINED_RELEASE_TAG=$crt" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||
$mrt="${{ needs.loadup.outputs.medley_release_tag }}"
|
||||
echo "MEDLEY_RELEASE_TAG=$mrt" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||
$msrt="${{ needs.loadup.outputs.medley_short_release_tag }}"
|
||||
echo "MEDLEY_SHORT_RELEASE_TAG=$msrt" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||
$aft="${{ needs.loadup.outputs.artifacts_filename_template }}"
|
||||
echo "ARTIFACTS_FILENAME_TEMPLATE=$aft" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||
$debs="${{ needs.loadup.outputs.debs_filename_base }}"
|
||||
echo "DEBS_FILENAME_BASE=$debs" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
# Retrieve medley tars from artifact store
|
||||
- name: Retrieve medley tar
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: medley-tar
|
||||
path: installers/cygwin/
|
||||
|
||||
# Download maiko cygwin build
|
||||
- name: Retrieve maiko cygwin build
|
||||
shell: powershell
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.MAIKO_TOKEN }}
|
||||
run: |
|
||||
gh release download ${{ needs.loadup.outputs.maiko_release_tag }} --repo interlisp/maiko --pattern ${{ needs.loadup.outputs.maiko_release_tag }}-cygwin.x86_64.tgz --output installers\cygwin\maiko-cygwin.x86_64.tgz
|
||||
|
||||
# Download cygwin installer to be included by medley.iss
|
||||
- name: Download cygwin installer
|
||||
id: cygwin
|
||||
shell: powershell
|
||||
run: |
|
||||
wget https://cygwin.com/setup-x86_64.exe -OutFile installers\cygwin\setup-x86_64.exe
|
||||
|
||||
# Download vnc viewer
|
||||
#- name: Download vncviewer
|
||||
# shell: powershell
|
||||
# run: |
|
||||
# $url = "https://sourceforge.net/projects/tigervnc/files/stable/1.12.0/vncviewer64-1.12.0.exe"
|
||||
# $output = "installers\win\vncviewer64-1.12.0.exe"
|
||||
# (New-Object System.Net.WebClient).DownloadFile($url, $output)
|
||||
|
||||
# Run iscc.exe to compile the installer
|
||||
#- name: Compile medley.iss
|
||||
# shell: powershell
|
||||
# run: |
|
||||
# iscc installers\win\medley.iss
|
||||
# $filename="medley-install_${env:COMBINED_RELEASE_TAG}_x64.exe"
|
||||
# echo "INSTALLER_FILENAME=$filename" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
# Run iscc.exe to compile the installer
|
||||
- name: Compile cygwin_medley.iss
|
||||
id: compile_iss
|
||||
shell: powershell
|
||||
run: |
|
||||
$Env:CYGWIN_INSTALLER_BASE="medley-full-cygwin-x86_64-${env:COMBINED_RELEASE_TAG}"
|
||||
$CYGWIN_INSTALLER="${Env:CYGWIN_INSTALLER_BASE}.exe"
|
||||
echo "CYGWIN_INSTALLER=$CYGWIN_INSTALLER" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||
echo "CYGWIN_INSTALLER=$CYGWIN_INSTALLER" | Out-File -FilePath $Env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
iscc installers\cygwin\medley.iss
|
||||
|
||||
# Upload windows installer to release
|
||||
- name: Upload windows installer to release
|
||||
id: push
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: installers/cygwin/${{ env.CYGWIN_INSTALLER }}
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
omitBodyDuringUpdate: true
|
||||
omitDraftDuringUpdate: true
|
||||
omitNameDuringUpdate: true
|
||||
omitPrereleaseDuringUpdate: true
|
||||
|
||||
|
||||
# JOB: downloads_page ################################################################
|
||||
|
||||
#
|
||||
# Update the downloads page on OIO
|
||||
#
|
||||
|
||||
downloads_page:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: [inputs, sentry, loadup, linux_installer, macos_installer, cygwin_installer]
|
||||
if: |
|
||||
needs.sentry.outputs.release_not_built == 'true'
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
|
||||
steps:
|
||||
|
||||
# Environment variables
|
||||
- name: Environment Varibales (from other jobs)
|
||||
run: |
|
||||
crt="${{ needs.loadup.outputs.combined_release_tag }}"
|
||||
echo "COMBINED_RELEASE_TAG=${crt}" >>${GITHUB_ENV}
|
||||
mrt="${{ needs.loadup.outputs.medley_release_tag }}"
|
||||
echo "MEDLEY_RELEASE_TAG=${mrt}" >>${GITHUB_ENV}
|
||||
msrt="${{ needs.loadup.outputs.medley_short_release_tag }}"
|
||||
echo "MEDLEY_SHORT_RELEASE_TAG=${msrt}" >>${GITHUB_ENV}
|
||||
cyginst="${{ needs.cygwin_installer.outputs.cygwin_installer }}"
|
||||
echo "CYGWIN_INSTALLER=${cyginst}" >>${GITHUB_ENV}
|
||||
|
||||
# Checkout latest commit
|
||||
- name: Checkout Medley
|
||||
uses: actions/checkout@v3
|
||||
|
||||
|
||||
# Upload a dummy file to release
|
||||
# Needed since download url of the release changes on every update
|
||||
# So this will be the final update before creating downloads page
|
||||
# and we can use its url for the page
|
||||
- run: echo "placeholder" >placeholder.txt
|
||||
- name: Upload windows placeholder.txt to release
|
||||
id: pushph
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: placeholder.txt
|
||||
tag: ${{ env.MEDLEY_RELEASE_TAG }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
omitBodyDuringUpdate: true
|
||||
omitDraftDuringUpdate: true
|
||||
omitNameDuringUpdate: true
|
||||
omitPrereleaseDuringUpdate: true
|
||||
|
||||
# Update the downloads page and the man page on OIO
|
||||
- name: Update the downloads page and the man page to the OIO static page host
|
||||
shell: bash
|
||||
run: |
|
||||
# Figure out filenames
|
||||
download_url="${{ steps.pushph.outputs.html_url }}"
|
||||
download_url="${download_url/\/tag\//\/download\/}"
|
||||
local_template="installers/downloads_page/medley_downloads.html"
|
||||
local_filename="medley_downloads.html"
|
||||
local_manpath="docs/man-page/man_medley.html"
|
||||
if [ "${{ needs.inputs.outputs.draft }}" = "true" ];
|
||||
then
|
||||
remote_filename="draft_downloads"
|
||||
remote_manname="man_draft.html"
|
||||
else
|
||||
remote_filename="${local_filename%.html}"
|
||||
remote_manname="man_medley.html"
|
||||
fi
|
||||
remote_filepath="/srv/oio/static/${remote_filename}"
|
||||
remote_manpath="/srv/oio/static/${remote_manname}"
|
||||
# Fill in downloads page template
|
||||
sed \
|
||||
-e "s/@@@MEDLEY.SHORT.RELEASE.TAG@@@/${MEDLEY_SHORT_RELEASE_TAG}/g" \
|
||||
-e "s/@@@COMBINED.RELEASE.TAG@@@/${COMBINED_RELEASE_TAG}/g" \
|
||||
-e "s~@@@DOWNLOAD_URL@@@~${download_url}~g" \
|
||||
-e "s~@@@CYGWIN.INSTALLER@@@~${CYGWIN_INSTALLER}~g" \
|
||||
< "${local_template}" > "${local_filename}"
|
||||
# Create sftp instruction file
|
||||
echo "-rm ${remote_filepath}.oldold" > batch
|
||||
echo "-rename ${remote_filepath}.old ${remote_filepath}.oldold" >> batch
|
||||
echo "-rename ${remote_filepath}.html ${remote_filepath}.old" >> batch
|
||||
echo "-put ${local_filename} ${remote_filepath}.html" >> batch
|
||||
echo "-put ${local_manpath} ${remote_manpath}" >> batch
|
||||
# Do the sftp
|
||||
eval $(ssh-agent)
|
||||
ssh-add - <<< "${SSH_KEY}"
|
||||
sftp -o StrictHostKeyChecking=no -b batch ubuntu@online.interlisp.org
|
||||
env:
|
||||
SSH_KEY: ${{ secrets.OIO_SSH_KEY }}
|
||||
|
||||
# Remove placeholder.txt
|
||||
- name: Remove placeholder.txt
|
||||
run: |
|
||||
gh release delete-asset ${{ env.MEDLEY_RELEASE_TAG }} placeholder.txt --yes
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
|
||||
# JOB: complete #####################################################################
|
||||
|
||||
# Use set-sentry-action to determine set the sentry that says this release has
|
||||
# been successfully built
|
||||
|
||||
complete:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
build_successful: ${{ steps.output.outputs.build_successful }}
|
||||
|
||||
needs: [inputs, sentry, loadup, downloads_page]
|
||||
|
||||
steps:
|
||||
# Delete the tarballs artifact
|
||||
- name: Delete tarballs artifact
|
||||
uses: geekyeggo/delete-artifact@v2
|
||||
with:
|
||||
name: tarballs
|
||||
failOnError: false
|
||||
|
||||
# Checkout the actions for this repo owner
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/.github
|
||||
path: ./Actions_${{ github.sha }}
|
||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||
|
||||
# Set sentry
|
||||
- name: Set flag that build for this commit has been completed
|
||||
id: set
|
||||
uses: ./../actions/set-sentry-action
|
||||
with:
|
||||
tag: "loadup"
|
||||
|
||||
- name: Output
|
||||
id: output
|
||||
run: |
|
||||
echo "build_successful='true'" >> $GITHUB_OUTPUT
|
||||
|
||||
######################################################################################
|
||||
######################################################################################
|
||||
113
.github/workflows/buildReleaseInclDocker.yml
vendored
Normal file
113
.github/workflows/buildReleaseInclDocker.yml
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
#*******************************************************************************
|
||||
# buidReleaseInclDocker.yml
|
||||
#
|
||||
# Interlisp webflow to build a Medley release and push it to github.
|
||||
# And to build a multiplatform Docker image for the release and push it to Docker Hub.
|
||||
#
|
||||
# This workflow just calls two reuseable workflows to the two task:
|
||||
# buildLoadup.yml and buildDocker.yml
|
||||
#
|
||||
# 2022-01-18 Frank Halasz
|
||||
#
|
||||
# Copyright 2022 by Interlisp.org
|
||||
#
|
||||
# ******************************************************************************
|
||||
|
||||
|
||||
name: "Build/Push Release & Docker"
|
||||
|
||||
# Run this workflow on ...
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 9 * * 1'
|
||||
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- 'true'
|
||||
|
||||
workflow_call:
|
||||
outputs:
|
||||
successful:
|
||||
description: "'True' if medley build completed successully"
|
||||
value: ${{ jobs.complete.outputs.build_successful }}
|
||||
inputs:
|
||||
draft:
|
||||
description: "Mark this as a draft release"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
force:
|
||||
description: "Force build even if build already successfully completed for this commit"
|
||||
required: false
|
||||
type: string
|
||||
default: 'false'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
|
||||
# Jobs that compose this workflow
|
||||
jobs:
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Regularize the inputs so they can be referenced the same way whether they are
|
||||
# the result of a workflow_dispatch or a workflow_call
|
||||
|
||||
inputs:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
draft: ${{ steps.one.outputs.draft }}
|
||||
force: ${{ steps.one.outputs.force }}
|
||||
steps:
|
||||
- id: one
|
||||
run: >
|
||||
if [ '${{ toJSON(inputs) }}' != 'null' ];
|
||||
then
|
||||
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
||||
else
|
||||
echo "draft=false" >> $GITHUB_OUTPUT;
|
||||
echo "force=false" >> $GITHUB_OUTPUT;
|
||||
fi
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
|
||||
# Build Loadup
|
||||
do_release:
|
||||
needs: inputs
|
||||
uses: ./.github/workflows/buildLoadup.yml
|
||||
with:
|
||||
draft: ${{ needs.inputs.outputs.draft }}
|
||||
force: ${{ needs.inputs.outputs.force }}
|
||||
secrets: inherit
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
# Build Docker Image
|
||||
do_docker:
|
||||
needs: [inputs, do_release]
|
||||
uses: ./.github/workflows/buildDocker.yml
|
||||
with:
|
||||
draft: ${{ needs.inputs.outputs.draft }}
|
||||
force: ${{ needs.inputs.outputs.force }}
|
||||
secrets: inherit
|
||||
|
||||
######################################################################################
|
||||
|
||||
27
.gitignore
vendored
27
.gitignore
vendored
@@ -1,7 +1,25 @@
|
||||
# loadup interim steps
|
||||
|
||||
tmp/*
|
||||
loadups/init*
|
||||
|
||||
# releases directory
|
||||
releases/*
|
||||
|
||||
|
||||
# all loadup files
|
||||
|
||||
loadups/exports.all
|
||||
library/RDSYS*
|
||||
loadups/lisp.sysout
|
||||
loadups/full.sysout
|
||||
loadups/*.dribble
|
||||
loadups/whereis.hash
|
||||
loadups/apps.sysout
|
||||
loadups/fuller.database
|
||||
|
||||
# manual cross-reference files
|
||||
|
||||
*.IMPTR
|
||||
|
||||
#compiled code -- leave in for now
|
||||
|
||||
@@ -24,6 +42,9 @@ core
|
||||
|
||||
# Mac OS detritus
|
||||
.DS_Store
|
||||
*.PS
|
||||
|
||||
# nano detritus
|
||||
*.swp
|
||||
*.save
|
||||
|
||||
# set up by install-diff-filter.sh script
|
||||
.gitattributes
|
||||
|
||||
34
BUILDING.md
Normal file
34
BUILDING.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# How to build a medley release
|
||||
|
||||
Originally done only with shell scripts:
|
||||
```
|
||||
./scripts/loadup-all.sh
|
||||
```
|
||||
to make the loadups
|
||||
```
|
||||
./scripts/loadup-and-release.sh
|
||||
```
|
||||
to go on to make the tgz files and release them
|
||||
|
||||
# Using github actions
|
||||
|
||||
In the github medley repository (Interlisp/medley) go to the Actions tab.
|
||||
|
||||
It will list the available github actions, select: **Build Medley Release**.
|
||||
|
||||
In the middle of the screen there's a box labeled workflow runs.
|
||||
There should be a row in it that states 'This workflow has a workflow_dispatch event trigger' with a drop down menu (it really looks more like a button) on the right side labeled 'Run workflow'. Select that and you'll get a form allowing you to select the branch (I've only used Master) and enter the release name. Enter a name or leave it empty and press the green 'Run workflow' button. The workflow should queue up and run.
|
||||
|
||||
# How to create a Docker image for the latest Medley release
|
||||
|
||||
In the github medley repository (Interlisp/medley) go to the Actions tab.
|
||||
|
||||
It will list the available github actions, select: **Build Medley Docker image**.
|
||||
|
||||
A table is presented which lists the previous runs of the workflow. If the workflow has never been run, it will be empty. A the top of the list is a row labeled, 'This workflow has a workflow_dispatch event trigger.' with a drop down menu labeled 'Run workflow'. Select it.
|
||||
|
||||
A box will be presented asking, 'Use workflow from' with a drop down menu of all available branches. The default branch is **master**. Leave it selected and push the green 'Run workflow' button.
|
||||
|
||||
The workflow will be queued to run and start running.
|
||||
|
||||
The workflow pulls the latest Maiko image from Docker Hub and the Release Assets from the latest Medley release, generally defined as medley-YYMMDD. The Medley Docker image adds in Tight VNC Server and retrieves the two tarballs associated with a release, one containing the sysouts and the other the other needed files source, fonts, etc. The contents are uncompressed and loaded into the Medley directory structure.
|
||||
@@ -1,248 +0,0 @@
|
||||
(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "XCL")
|
||||
(IL:FILECREATED "24-Mar-92 14:56:18" IL:|{DSK}<usr>local>lde>lispcore>sources>CMLDEFFER.;3| 40644
|
||||
|
||||
IL:|changes| IL:|to:| (IL:VARS IL:CMLDEFFERCOMS)
|
||||
|
||||
IL:|previous| IL:|date:| " 4-Jan-92 15:32:26"
|
||||
IL:|{DSK}<usr>local>lde>lispcore>sources>CMLDEFFER.;2|)
|
||||
|
||||
|
||||
; Copyright (c) 1986, 1900, 1987, 1988, 1990, 1992 by Venue & Xerox Corporation. All rights reserved.
|
||||
|
||||
(IL:PRETTYCOMPRINT IL:CMLDEFFERCOMS)
|
||||
|
||||
(IL:RPAQQ IL:CMLDEFFERCOMS ((IL:* IL:|;;;| "DEF-DEFINE-TYPE and DEFDEFINER -- Your One-Stop Providers of Customized File Manager Facilities.") (IL:* IL:|;;| "BE VERY CAREFUL CHANGING ANYTHING IN THIS FILE!!! It is heavily self-referential and thick with bootstrapping problems. All but the most trivial changes (and some of those) are very tricky to make without blowing yourself out of the water... You have been warned.") (IL:* IL:|;;;| "Also see the file deffer-runtime for stuff that must be defined before fasl files may be loaded into the init") (IL:COMS (IL:* IL:\; "Filepkg interface") (IL:FUNCTIONS REMOVE-COMMENTS PPRINT-DEFINER PPRINT-DEFINER-FITP PPRINT-DEFINER-RECURSE) (IL:VARIABLES IL:*REMOVE-INTERLISP-COMMENTS*) (IL:* IL:\; "Share with xcl?") (IL:FUNCTIONS %DEFINE-TYPE-DELDEF %DEFINE-TYPE-GETDEF %DEFINE-TYPE-FILE-DEFINITIONS %DEFINE-TYPE-FILEGETDEF %DEFINE-TYPE-SAVE-DEFN %DEFINE-TYPE-PUTDEF)) (IL:COMS (IL:* IL:\; "Compatibility with old cmldeffer") (IL:DECLARE\: IL:DOCOPY IL:DONTEVAL@LOAD (IL:P (IL:MOVD (QUOTE %DEFINE-TYPE-DELDEF) (QUOTE IL:\\DEFINE-TYPE-DELDEF)) (IL:MOVD (QUOTE %DEFINE-TYPE-GETDEF) (QUOTE IL:\\DEFINE-TYPE-GETDEF)) (IL:MOVD (QUOTE %DEFINE-TYPE-FILE-DEFINITIONS) (QUOTE IL:\\DEFINE-TYPE-FILE-DEFINITIONS)) (IL:MOVD (QUOTE %DEFINE-TYPE-FILEGETDEF) (QUOTE IL:\\DEFINE-TYPE-FILEGETDEF)) (IL:MOVD (QUOTE %DEFINE-TYPE-SAVE-DEFN) (QUOTE IL:\\DEFINE-TYPE-SAVE-DEFN)) (IL:MOVD (QUOTE %DEFINE-TYPE-PUTDEF) (QUOTE IL:\\DEFINE-TYPE-PUTDEF)) (IL:MOVD (QUOTE PPRINT-DEFINER) (QUOTE IL:PPRINT-DEFINER))))) (IL:DECLARE\: IL:DOCOPY IL:DONTEVAL@LOAD (IL:P (IL:* IL:|;;| "Set up fake definer prototype stuff for FNS") (ADD-PROTOTYPE-FN (QUOTE IL:FNS) (QUOTE IL:NLAMBDA) (FUNCTION (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (IL:DEFINEQ ((IL:\\\, NAME) (IL:NLAMBDA (IL:\\\,@ (%MAKE-FUNCTION-PROTOTYPE)))))))))) (ADD-PROTOTYPE-FN (QUOTE IL:FNS) (QUOTE IL:LAMBDA) (FUNCTION (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (IL:DEFINEQ ((IL:\\\, NAME) (IL:LAMBDA (IL:\\\,@ (%MAKE-FUNCTION-PROTOTYPE)))))))))))) (IL:COMS (IL:* IL:\; "The groundwork for bootstrapping ") (IL:DEFINE-TYPES IL:DEFINE-TYPES IL:FUNCTIONS IL:VARIABLES) (IL:* IL:\; "DefDefiner itself and friends") (IL:FUNCTIONS SI::EXPANSION-FUNCTION SI::MACRO-FUNCALL WITHOUT-FILEPKG)) (IL:COMS (IL:* IL:\; "Compatibility with old cmldeffer") (IL:FUNCTIONS IL:WITHOUT-FILEPKG)) (IL:COMS (IL:* IL:\; "Some special forms") (IL:FUNCTIONS DEFINER DEFINER-VARIABLE-TYPE NAMED-PROGN)) (IL:COMS (IL:* IL:\; "Auxiliary functions") (IL:FUNCTIONS GET-DEFINER-NAME %DELETE-DEFINER) (IL:FUNCTIONS DEF-DEFINE-TYPE DEFDEFINER DEFDEFINER-VARIABLE-TYPE) (IL:FUNCTIONS %EXPAND-DEFINER %DEFINER-NAME)) (IL:COMS (IL:* IL:\; "The most commonly-used definers") (IL:FUNCTIONS DEFUN DEFINLINE DEFMACRO) (IL:FUNCTIONS DEFVAR DEFPARAMETER DEFCONSTANT DEFGLOBALVAR DEFGLOBALPARAMETER)) (IL:COMS (IL:* IL:\; "Here so that the evaluator can be in the init without definers being in the init.") (IL:DEFINE-TYPES IL:SPECIAL-FORMS) (IL:FUNCTIONS %REMOVE-SPECIAL-FORM) (IL:FUNCTIONS DEFINE-SPECIAL-FORM) (IL:* IL:\; "Form for defining interpreters of special forms")) (IL:COMS (IL:* IL:\; "Don't note changes to these properties/variables") (IL:PROP IL:PROPTYPE IL:MACRO-FN :UNDEFINERS IL:UNDEFINERS :DEFINER-FOR IL:DEFINER-FOR :DEFINED-BY IL:DEFINED-BY :DEFINITION-NAME IL:DEFINITION-NAME) (IL:* IL:\; "Templates for definers not defined here. These should really be where they're defined.") (IL:PROP :DEFINITION-PRINT-TEMPLATE DEFCOMMAND DEFINE-CONDITION DEFINE-MODIFY-MACRO DEFINE-SETF-METHOD DEFSETF DEFSTRUCT DEFTYPE)) (IL:* IL:|;;| "Arrange for the correct compiler to be used.") (IL:PROP (IL:FILETYPE IL:MAKEFILE-ENVIRONMENT) IL:CMLDEFFER)))
|
||||
|
||||
|
||||
|
||||
(IL:* IL:|;;;|
|
||||
"DEF-DEFINE-TYPE and DEFDEFINER -- Your One-Stop Providers of Customized File Manager Facilities.")
|
||||
|
||||
|
||||
|
||||
|
||||
(IL:* IL:|;;|
|
||||
"BE VERY CAREFUL CHANGING ANYTHING IN THIS FILE!!! It is heavily self-referential and thick with bootstrapping problems. All but the most trivial changes (and some of those) are very tricky to make without blowing yourself out of the water... You have been warned."
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
(IL:* IL:|;;;|
|
||||
"Also see the file deffer-runtime for stuff that must be defined before fasl files may be loaded into the init"
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "Filepkg interface")
|
||||
|
||||
|
||||
(DEFUN REMOVE-COMMENTS (X) (IL:* IL:|;;;| "Removes SEdit-style comments from the given list structure.") (COND ((NOT (CONSP X)) X) ((AND (CONSP (CAR X)) (EQ (CAAR X) (QUOTE IL:*)) (CONSP (CDAR X)) (OR (MEMBER (CADAR X) (QUOTE (IL:\; IL:|;;| IL:|;;;| IL:|;;;;| IL:\|)) :TEST (FUNCTION EQ)) (IL:* IL:\; "a sedit comment") (EQ IL:*REMOVE-INTERLISP-COMMENTS* T) (IL:* IL:\; "always strip") (PROGN (IF (EQ IL:*REMOVE-INTERLISP-COMMENTS* (QUOTE :WARN)) (WARN "Possible comment not stripped ~S" (CAR X))) NIL))) (REMOVE-COMMENTS (CDR X))) (T (LET ((A (REMOVE-COMMENTS (CAR X))) (D (REMOVE-COMMENTS (CDR X)))) (IF (AND (EQ A (CAR X)) (EQ D (CDR X))) X (CONS A D))))))
|
||||
|
||||
(DEFUN PPRINT-DEFINER (DEFINE-EXPRESSION) (DECLARE (SPECIAL IL:FORMFLG IL:SPACEWIDTH)) (IL:* IL:\; "Bound in prettyprinter") (COND ((OR (NULL IL:FORMFLG) (ATOM (CDR DEFINE-EXPRESSION))) (IL:* IL:\; "Degenerate cases or printing as a quoted form--punt to default prettyprinting") DEFINE-EXPRESSION) (T (LET ((IL:TAIL DEFINE-EXPRESSION) (IL:LEFT (IL:DSPXPOSITION)) TEMPLATE TOP-LEVEL-P NEXT TYPE FORM NEWLINEP) (DECLARE (SPECIAL IL:TAIL IL:LEFT)) (IL:* IL:\; "For comment printer") (SETQ TOP-LEVEL-P (EQ IL:LEFT (IL:DSPLEFTMARGIN))) (IL:* IL:\; "Printing definition to file, etc.") (SETQ IL:LEFT (+ IL:LEFT (* 3 IL:SPACEWIDTH))) (IL:* IL:\; "Place we will indent body") (IL:PRIN1 "(") (IL:PRIN2 (CAR IL:TAIL)) (SETQ TEMPLATE (OR (GET (POP IL:TAIL) :DEFINITION-PRINT-TEMPLATE) (QUOTE (:NAME)))) (IL:* IL:|;;| "This code should, and doesn't, pay attention to the NAME function to determine where the name is to decide what should and shouldn't be bold. Right now, it always bolds the second thing. Fortunately, we currently don't have any definers that don't have either the second or CAR of the second as the definition name.") (IL:* IL:|;;| "Also, this code should be careful about calling the NAME function on the form. Sometimes, the form is not really a call to the definer but instead a back-quoted expression in a macro. In most such cases, the name is not really there; some comma-quoted expression is there instead.") (IL:WHILE (CONSP IL:TAIL) IL:DO (COND ((AND (LISTP (SETQ NEXT (CAR IL:TAIL))) (EQ (CAR NEXT) IL:COMMENTFLG) (IL:SEMI-COLON-COMMENT-P NEXT)) (IL:* IL:\; "Comments can appear anywhere, so print this one without consuming the template. ENDLINE has side effect of printing comments") (IL:SUBPRINT/ENDLINE IL:LEFT *STANDARD-OUTPUT*) (SETQ NEWLINEP T)) ((OR (ATOM TEMPLATE) (EQ (SETQ TYPE (POP TEMPLATE)) :BODY)) (IL:* IL:\; "Once we hit the body, there's nothing more special to do.") (RETURN)) (T (IL:SPACES 1) (CASE TYPE (:NAME (IL:* IL:\; "Embolden the name of this thing") (SETQ NEWLINEP NIL) (COND ((NOT TOP-LEVEL-P) (IL:* IL:\; "Nothing special here--could even be a backquoted thing") (PPRINT-DEFINER-RECURSE)) (T (POP IL:TAIL) (COND ((CONSP NEXT) (IL:* IL:\; "Name is a list. Assume the real name is the car and the rest is an options list or something") (UNLESS (EQ (IL:DSPYPOSITION) (PROGN (IL:PRIN1 "(") (IL:PRINTOUT NIL IL:.FONT IL:LAMBDAFONT IL:.P2 (CAR NEXT) IL:.FONT IL:DEFAULTFONT) (IL:SPACES 1) (IL:PRINTDEF (CDR NEXT) T T T IL:FNSLST) (IL:PRIN1 ")") (IL:DSPYPOSITION))) (IL:* IL:\; "This thing took more than one line to print, so go to new line") (IL:SUBPRINT/ENDLINE IL:LEFT *STANDARD-OUTPUT*) (SETQ NEWLINEP T))) (T (IL:* IL:\; "Atomic name is bold") (IL:PRINTOUT NIL IL:.FONT IL:LAMBDAFONT IL:.P2 NEXT IL:.FONT IL:DEFAULTFONT)))))) (:ARG-LIST (IL:* IL:\; "NEXT is some sort of argument list. ") (COND ((NULL NEXT) (IL:* IL:\; "If NIL, be sure to print as ()") (IL:PRIN1 "()") (POP IL:TAIL)) (T (PPRINT-DEFINER-RECURSE))) (SETQ NEWLINEP NIL)) (T (IL:* IL:\; "Just print it, perhaps starting a new line") (UNLESS (OR NEWLINEP (PPRINT-DEFINER-FITP NEXT)) (IL:* IL:\; "Go to new line if getting crowded") (IL:PRINENDLINE IL:LEFT)) (PPRINT-DEFINER-RECURSE) (SETQ NEWLINEP NIL)))))) (IL:* IL:|;;| "We've now gotten to the end of stuff we know how to print. Just prettyprint the rest") (UNLESS (NULL IL:TAIL) (COND (NEWLINEP (IL:* IL:\; "Already on new line")) ((OR (EQ TYPE :BODY) (NOT (PPRINT-DEFINER-FITP (CAR IL:TAIL)))) (IL:* IL:\; "Go to new line and indent a bit. Always do this for the part matching &BODY, whether or not the prettyprinter thought that the remainder would \"fit\"") (IL:PRINENDLINE IL:LEFT NIL T)) (T (IL:SPACES 1))) (IL:WHILE (AND (CONSP IL:TAIL) (ATOM (SETQ FORM (CAR IL:TAIL)))) IL:DO (IL:* IL:|;;| "Print this doc string or whatever on its own line. This is because otherwise the prettyprinter gets confused and tries to put the next thing after the string") (PPRINT-DEFINER-RECURSE) (WHEN (AND (KEYWORDP FORM) (CONSP IL:TAIL)) (IL:* IL:\; "Some sort of keyword-value pair stuff--print it on same line") (IL:SPACES 1) (PPRINT-DEFINER-RECURSE)) (WHEN (NULL IL:TAIL) (RETURN)) (IL:SUBPRINT/ENDLINE IL:LEFT *STANDARD-OUTPUT*)) (IL:PRINTDEF IL:TAIL T T T IL:FNSLST)) (IL:PRIN1 ")") NIL))))
|
||||
|
||||
(DEFUN PPRINT-DEFINER-FITP (ITEM) (IL:* IL:|;;| "True if it won't look silly to try to print ITEM at current position instead of starting new line") (IF (CONSP ITEM) (OR (EQ (CAR ITEM) IL:COMMENTFLG) (AND (< (IL:COUNT ITEM) 20) (IL:FITP ITEM))) (< (+ (IL:DSPXPOSITION) (IL:STRINGWIDTH ITEM *STANDARD-OUTPUT*)) (IL:DSPRIGHTMARGIN))))
|
||||
|
||||
(DEFUN PPRINT-DEFINER-RECURSE NIL (IL:* IL:|;;| "Print and pop the next element. Prettyprinter uses the variable IL:TAIL for lookahead") (DECLARE (SPECIAL IL:TAIL)) (IL:SUPERPRINT (CAR IL:TAIL) IL:TAIL NIL *STANDARD-OUTPUT*) (SETQ IL:TAIL (CDR IL:TAIL)))
|
||||
|
||||
(DEFVAR IL:*REMOVE-INTERLISP-COMMENTS* (QUOTE :WARN) "Either NIL (don't) T (always do) or :WARN (don't and warn)")
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "Share with xcl?")
|
||||
|
||||
|
||||
(DEFUN %DEFINE-TYPE-DELDEF (NAME TYPE) (IL:* IL:|;;| "DELETE definition of definer-defined NAME as TYPE ") (UNDOABLY-SETF (DOCUMENTATION NAME TYPE) NIL) (LET* ((HT (GETHASH TYPE *DEFINITION-HASH-TABLE*)) (DEFN (AND HT (GETHASH NAME HT)))) (AND HT (IL:/PUTHASH NAME NIL HT)) (DOLIST (FN (OR (GET TYPE (QUOTE :UNDEFINERS)) (GET TYPE (QUOTE IL:UNDEFINERS)))) (FUNCALL FN NAME)) (DOLIST (FN (OR (GET (CAR DEFN) (QUOTE :UNDEFINERS)) (GET (CAR DEFN) (QUOTE IL:UNDEFINERS)))) (FUNCALL FN NAME)) NAME))
|
||||
|
||||
(DEFUN %DEFINE-TYPE-GETDEF (NAME TYPE OPTIONS) (IL:* IL:|;;| "GETDEF method for all definers. The EDIT is so that when you say EDITDEF you get a copy & can know when you made edits.") (LET* ((HASH-TABLE (GETHASH TYPE *DEFINITION-HASH-TABLE*)) (DEFN (AND HASH-TABLE (GETHASH NAME HASH-TABLE)))) (IF (TYPECASE OPTIONS (CONS (MEMBER (QUOTE IL:EDIT) OPTIONS :TEST (FUNCTION EQ))) (T (EQ OPTIONS (QUOTE IL:EDIT)))) (COPY-TREE DEFN) DEFN)))
|
||||
|
||||
(DEFUN %DEFINE-TYPE-FILE-DEFINITIONS (TYPE NAMES) (IL:* IL:|;;| "get the definitions for NAMES suitable for printing on a file. Like GETDEF but checks.") (MAPCAR (FUNCTION (LAMBDA (NAME) (LET ((DEF (%DEFINE-TYPE-GETDEF NAME TYPE (QUOTE (IL:NOCOPY))))) (IF (NULL DEF) (ERROR (QUOTE IL:NO-SUCH-DEFINITION) :NAME NAME :TYPE TYPE) DEF)))) NAMES))
|
||||
|
||||
(DEFUN %DEFINE-TYPE-FILEGETDEF (NAME TYPE SOURCE OPTIONS NOTFOUND) (LET ((VAL (IL:LOADFNS NIL SOURCE (QUOTE IL:GETDEF) (IL:* IL:|;;| "The bletcherous lambda form is require by the interface to loadfns (can't pass a closure)") (IL:BQUOTE (IL:LAMBDA (FIRST SECOND) (AND (MEMBER FIRST (QUOTE (IL:\\\, (OR (GET TYPE (QUOTE :DEFINED-BY)) (GET TYPE (QUOTE IL:DEFINED-BY))))) :TEST (FUNCTION EQ)) (LET ((NAMER (OR (GET FIRST (QUOTE :DEFINITION-NAME)) (GET FIRST (QUOTE IL:DEFINITION-NAME)) (QUOTE SECOND)))) (IF (EQ NAMER (QUOTE SECOND)) (EQUAL SECOND (QUOTE (IL:\\\, NAME))) (EQUAL (FUNCALL NAMER (REMOVE-COMMENTS (IL:READ))) (QUOTE (IL:\\\, NAME))))))))))) (COND ((EQ (CAAR VAL) (QUOTE IL:NOT-FOUND\:)) NOTFOUND) ((CDR VAL) (CONS (QUOTE PROGN) VAL)) (T (CAR VAL)))))
|
||||
|
||||
(DEFUN %DEFINE-TYPE-SAVE-DEFN (NAME TYPE DEFINITION) (SETQ TYPE (IL:GETFILEPKGTYPE TYPE (QUOTE TYPE))) (LET ((HASH-TABLE (GETHASH TYPE *DEFINITION-HASH-TABLE*))) (WHEN (NULL HASH-TABLE) (WARN "Couldn't find a hash-table for ~S definitions.~%One will be created." TYPE) (SETQ HASH-TABLE (SETF (GETHASH TYPE *DEFINITION-HASH-TABLE*) (MAKE-HASH-TABLE :TEST (FUNCTION EQUAL) :SIZE 50 :REHASH-SIZE 50)))) (LET ((OLD-DEFINITION (GETHASH NAME HASH-TABLE))) (UNLESS (EQUAL DEFINITION OLD-DEFINITION) (WHEN (AND OLD-DEFINITION (NOT (EQ IL:DFNFLG T))) (FORMAT *TERMINAL-IO* "~&New ~A definition for ~S~:[~; (but not installed)~].~%" TYPE NAME (MEMBER IL:DFNFLG (QUOTE (IL:PROP IL:ALLPROP)) :TEST (FUNCTION EQ)))) (IL:/PUTHASH NAME DEFINITION HASH-TABLE) (IL:MARKASCHANGED NAME TYPE (IF OLD-DEFINITION (QUOTE IL:CHANGED) (QUOTE IL:DEFINED)))))))
|
||||
|
||||
(DEFUN %DEFINE-TYPE-PUTDEF (NAME TYPE DEFINITION REASON) (IF (NULL DEFINITION) (%DEFINE-TYPE-DELDEF NAME TYPE) (LET ((DEFN-WITHOUT-COMMENTS (REMOVE-COMMENTS DEFINITION))) (UNLESS (AND (CONSP DEFN-WITHOUT-COMMENTS) (MEMBER (CAR DEFN-WITHOUT-COMMENTS) (OR (GET TYPE (QUOTE :DEFINED-BY)) (GET TYPE (QUOTE IL:DEFINED-BY))) :TEST (FUNCTION EQ)) (EQUAL NAME (FUNCALL (OR (GET (CAR DEFN-WITHOUT-COMMENTS) (QUOTE :DEFINITION-NAME)) (GET (CAR DEFN-WITHOUT-COMMENTS) (QUOTE IL:DEFINITION-NAME)) (QUOTE SECOND)) DEFN-WITHOUT-COMMENTS))) (SIGNAL (QUOTE IL:DEFINER-MISMATCH) :NAME NAME :TYPE TYPE :DEFINITION DEFINITION)) (SETQ DEFINITION (COPY-TREE DEFINITION)) (EVAL (IF IL:LISPXHIST (MAKE-UNDOABLE DEFINITION) DEFINITION)))))
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "Compatibility with old cmldeffer")
|
||||
|
||||
(IL:DECLARE\: IL:DOCOPY IL:DONTEVAL@LOAD
|
||||
|
||||
(IL:MOVD (QUOTE %DEFINE-TYPE-DELDEF) (QUOTE IL:\\DEFINE-TYPE-DELDEF))
|
||||
|
||||
(IL:MOVD (QUOTE %DEFINE-TYPE-GETDEF) (QUOTE IL:\\DEFINE-TYPE-GETDEF))
|
||||
|
||||
(IL:MOVD (QUOTE %DEFINE-TYPE-FILE-DEFINITIONS) (QUOTE IL:\\DEFINE-TYPE-FILE-DEFINITIONS))
|
||||
|
||||
(IL:MOVD (QUOTE %DEFINE-TYPE-FILEGETDEF) (QUOTE IL:\\DEFINE-TYPE-FILEGETDEF))
|
||||
|
||||
(IL:MOVD (QUOTE %DEFINE-TYPE-SAVE-DEFN) (QUOTE IL:\\DEFINE-TYPE-SAVE-DEFN))
|
||||
|
||||
(IL:MOVD (QUOTE %DEFINE-TYPE-PUTDEF) (QUOTE IL:\\DEFINE-TYPE-PUTDEF))
|
||||
|
||||
(IL:MOVD (QUOTE PPRINT-DEFINER) (QUOTE IL:PPRINT-DEFINER))
|
||||
)
|
||||
(IL:DECLARE\: IL:DOCOPY IL:DONTEVAL@LOAD
|
||||
|
||||
(IL:* IL:|;;| "Set up fake definer prototype stuff for FNS")
|
||||
|
||||
(ADD-PROTOTYPE-FN (QUOTE IL:FNS) (QUOTE IL:NLAMBDA) (FUNCTION (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (IL:DEFINEQ ((IL:\\\, NAME) (IL:NLAMBDA (IL:\\\,@ (%MAKE-FUNCTION-PROTOTYPE))))))))))
|
||||
|
||||
(ADD-PROTOTYPE-FN (QUOTE IL:FNS) (QUOTE IL:LAMBDA) (FUNCTION (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (IL:DEFINEQ ((IL:\\\, NAME) (IL:LAMBDA (IL:\\\,@ (%MAKE-FUNCTION-PROTOTYPE))))))))))
|
||||
)
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "The groundwork for bootstrapping ")
|
||||
|
||||
|
||||
(DEF-DEFINE-TYPE IL:DEFINE-TYPES "Definition type")
|
||||
|
||||
(DEF-DEFINE-TYPE IL:FUNCTIONS "Common Lisp functions/macros" :UNDEFINER IL:UNDOABLY-FMAKUNBOUND)
|
||||
|
||||
(DEF-DEFINE-TYPE IL:VARIABLES "Common Lisp variables" :UNDEFINER UNDOABLY-MAKUNBOUND)
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "DefDefiner itself and friends")
|
||||
|
||||
|
||||
(DEFUN SI::EXPANSION-FUNCTION (NAME ARG-LIST BODY) (IL:* IL:|;;;| "Shared code between DEFMACRO and DEFDEFINER. Takes the parts of a DEFMACRO and returns two values: a LAMBDA form for the expansion function, and the documentation string found, if any.") (MULTIPLE-VALUE-BIND (PARSED-BODY PARSED-DECLARATIONS PARSED-DOCSTRING) (IL:PARSE-DEFMACRO ARG-LIST (QUOTE SI::$$MACRO-FORM) BODY NAME NIL :ENVIRONMENT (QUOTE SI::$$MACRO-ENVIRONMENT)) (VALUES (IL:BQUOTE (LAMBDA (SI::$$MACRO-FORM SI::$$MACRO-ENVIRONMENT) (IL:\\\,@ PARSED-DECLARATIONS) (BLOCK (IL:\\\, NAME) (IL:\\\, PARSED-BODY)))) PARSED-DOCSTRING)))
|
||||
|
||||
(DEFMACRO SI::MACRO-FUNCALL (EXPANSION-FUNCTION MACRO-CALL ENV) (IL:* IL:|;;;| "Used by DEFDEFINER as a mechanism for delaying macro-expansion until after checking the value of DFNFLG. The arguments (unevaluated) are a macro-expansion function and a call on that macro. The call to MACRO-FUNCALL should expand into the result of expanding the given macro-call.") (FUNCALL EXPANSION-FUNCTION MACRO-CALL ENV))
|
||||
|
||||
(DEFMACRO WITHOUT-FILEPKG (&BODY BODY) (IL:BQUOTE (PROGN (EVAL-WHEN (LOAD) (IL:\\\,@ BODY)) (EVAL-WHEN (EVAL) (UNLESS (OR (EQ IL:DFNFLG (QUOTE IL:PROP)) (EQ IL:DFNFLG (QUOTE IL:ALLPROP))) (LET ((IL:FILEPKGFLG NIL) (IL:DFNFLG T)) (IL:\\\,@ BODY)))))))
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "Compatibility with old cmldeffer")
|
||||
|
||||
|
||||
(DEFMACRO IL:WITHOUT-FILEPKG (&BODY BODY) (IL:BQUOTE (WITHOUT-FILEPKG (IL:\\\,@ BODY))))
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "Some special forms")
|
||||
|
||||
|
||||
(DEFMACRO DEFINER (TYPE NAME DEFINITION &OPTIONAL ENV) (LET* ((EXPANDER (GET NAME :DEFINITION-EXPANDER)) (DEFINITION-WITHOUT-COMMENTS (REMOVE-COMMENTS DEFINITION)) (DEFINITION-NAME (FUNCALL (GET NAME :DEFINITION-NAME) DEFINITION-WITHOUT-COMMENTS))) (IL:BQUOTE (PROGN (WITHOUT-FILEPKG (SI::MACRO-FUNCALL (IL:\\\, EXPANDER) (IL:\\\, DEFINITION-WITHOUT-COMMENTS) (IL:\\\, ENV))) (EVAL-WHEN (EVAL) (UNLESS (NULL IL:FILEPKGFLG) (%DEFINE-TYPE-SAVE-DEFN (QUOTE (IL:\\\, DEFINITION-NAME)) (QUOTE (IL:\\\, TYPE)) (QUOTE (IL:\\\, DEFINITION))))) (QUOTE (IL:\\\, DEFINITION-NAME))))))
|
||||
|
||||
(DEFMACRO DEFINER-VARIABLE-TYPE (NAME DEFINITION &OPTIONAL ENV) (LET* ((DEFINITION-WITHOUT-COMMENTS (REMOVE-COMMENTS DEFINITION)) (TYPE (FUNCALL (GET NAME :TYPE-DISCRIMINATOR) DEFINITION-WITHOUT-COMMENTS)) (EXPANDER (GETF (GET NAME :DEFINITION-EXPANDER) TYPE)) (DEFINITION-NAME (FUNCALL (GET NAME :DEFINITION-NAME) DEFINITION-WITHOUT-COMMENTS))) (IL:BQUOTE (PROGN (WITHOUT-FILEPKG (SI::MACRO-FUNCALL (IL:\\\, EXPANDER) (IL:\\\, DEFINITION-WITHOUT-COMMENTS) (IL:\\\, ENV))) (EVAL-WHEN (EVAL) (UNLESS (NULL IL:FILEPKGFLG) (%DEFINE-TYPE-SAVE-DEFN (QUOTE (IL:\\\, DEFINITION-NAME)) (QUOTE (IL:\\\, TYPE)) (QUOTE (IL:\\\, DEFINITION))))) (QUOTE (IL:\\\, DEFINITION-NAME))))))
|
||||
|
||||
(DEFMACRO NAMED-PROGN (DEFINER NAME &REST FORMS) (IL:* IL:|;;| "Used by the compiler when processing definers") (IL:BQUOTE (PROGN (IL:\\\,@ FORMS) (QUOTE (IL:\\\, NAME)))))
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "Auxiliary functions")
|
||||
|
||||
|
||||
(DEFUN GET-DEFINER-NAME (DEFINER STRING) (VALUES (INTERN (CONCATENATE (QUOTE STRING) STRING (STRING DEFINER)) (SYMBOL-PACKAGE DEFINER))))
|
||||
|
||||
(DEFUN %DELETE-DEFINER (NAME) (AND (SYMBOLP NAME) (LET ((TYPE (OR (GET NAME (QUOTE :DEFINER-FOR)) (GET NAME (QUOTE IL:DEFINER-FOR))))) (IL:/REMPROP NAME (QUOTE :DEFINER-FOR)) (IL:/REMPROP NAME (QUOTE IL:DEFINER-FOR)) (IL:/REMPROP NAME (QUOTE :DEFINITION-NAME)) (IL:/REMPROP NAME (QUOTE IL:DEFINITION-NAME)) (IL:/REMPROP NAME (QUOTE :DEFINITION-EXPANDER)) (WHEN TYPE (IF (GET TYPE (QUOTE :DEFINED-BY)) (IL:/PUTPROP TYPE (QUOTE :DEFINED-BY) (REMOVE NAME (GET TYPE (QUOTE :DEFINED-BY)))) (IL:/PUTPROP TYPE (QUOTE IL:DEFINED-BY) (REMOVE NAME (GET TYPE (QUOTE IL:DEFINED-BY))))) (IL:* IL:|;;| "need to remove the prototype function!") (LET* ((LOOKUP-TYPE (ASSOC TYPE *DEFINITION-PROTOTYPES* :TEST (FUNCTION EQ)))) (IL:/RPLACD LOOKUP-TYPE (REMOVE NAME (CDR LOOKUP-TYPE) :KEY (FUNCTION CAR))))))))
|
||||
|
||||
(DEFDEFINER (DEF-DEFINE-TYPE (:PROTOTYPE (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (DEF-DEFINE-TYPE (IL:\\\, NAME) "Description string")))))) IL:DEFINE-TYPES (NAME DESCRIPTION &KEY UNDEFINER &AUX (CHANGELST (INTERN (CONCATENATE (QUOTE STRING) "CHANGED" (STRING NAME) "LST") (SYMBOL-PACKAGE NAME)))) "Define NAME as a new definition type" (IL:* IL:|;;| "This definition is a clean interface to a hokey implementation. It works even before the file package is loaded.") (IL:BQUOTE (PROGN (SETF (DOCUMENTATION (QUOTE (IL:\\\, NAME)) (QUOTE IL:DEFINE-TYPES)) (QUOTE (IL:\\\, DESCRIPTION))) (PUSHNEW (QUOTE ((IL:\\\, NAME) X (IL:P IL:* (%DEFINE-TYPE-FILE-DEFINITIONS (QUOTE (IL:\\\, NAME)) (QUOTE X))))) IL:PRETTYDEFMACROS :TEST (QUOTE EQUAL)) (IL:* IL:|;;| "the information about a type in the file package is split up into a number of different places. PRETTYTYPELST contains a random amount: the changelist is the variable whose top level value contains the list of changed items, and the description is a string used by files? This is duplicated in the CL:DOCUMENTATION mechanism") (PUSHNEW (QUOTE ((IL:\\\, CHANGELST) (IL:\\\, NAME) (IL:\\\, DESCRIPTION))) IL:PRETTYTYPELST :TEST (QUOTE EQUAL)) (DEFGLOBALVAR (IL:\\\, CHANGELST) NIL) (IL:* IL:|;;| "the definition hash table is where the definitions are really stored. Create an entry for this type. Note that definitions are compared using CL:EQUAL so that names can be strings, lists, etc.") (UNLESS (GETHASH (QUOTE (IL:\\\, NAME)) *DEFINITION-HASH-TABLE*) (SETF (GETHASH (QUOTE (IL:\\\, NAME)) *DEFINITION-HASH-TABLE*) (MAKE-HASH-TABLE :TEST (QUOTE EQUAL) :SIZE 50 :REHASH-SIZE 50))) (PUSHNEW (QUOTE (IL:\\\, NAME)) IL:FILEPKGTYPES) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE IL:GETDEF)) (QUOTE %DEFINE-TYPE-GETDEF)) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE IL:DELDEF)) (QUOTE %DEFINE-TYPE-DELDEF)) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE IL:PUTDEF)) (QUOTE %DEFINE-TYPE-PUTDEF)) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE IL:FILEGETDEF)) (QUOTE %DEFINE-TYPE-FILEGETDEF)) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE IL:FILEPKGCONTENTS)) (QUOTE IL:NILL)) (IL:\\\,@ (WHEN UNDEFINER (IL:BQUOTE ((PUSHNEW (QUOTE (IL:\\\, UNDEFINER)) (GET (QUOTE (IL:\\\, NAME)) (QUOTE :UNDEFINERS))))))))))
|
||||
|
||||
(DEFDEFINER (DEFDEFINER (:NAME (LAMBDA (WHOLE) (LET ((NAME (SECOND WHOLE))) (IF (CONSP NAME) (CAR NAME) NAME)))) (:PROTOTYPE (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (DEFDEFINER (IL:\\\, NAME) (IL:\\\, (IF (EQ (IL:EDITMODE) (QUOTE IL:SEDIT)) (SYMBOL-VALUE (INTERN "BASIC-GAP" "SEDIT")) "Type")) (IL:\\\,@ (%MAKE-FUNCTION-PROTOTYPE))))))) (:UNDEFINER %DELETE-DEFINER) (:TEMPLATE (:NAME :TYPE :ARG-LIST :BODY))) IL:FUNCTIONS (NAME TYPE ARG-LIST &BODY BODY) (LET* ((OPTIONS (COND ((CONSP NAME) (PROG1 (CDR NAME) (SETQ NAME (CAR NAME)))) (T NIL))) (NAME-FN NIL) (UNDEFINER NIL) (PROTOTYPE-FN NIL) (TEMPLATE NIL) (PRETTYMACRO NIL) (EDITDATE-OFFSET NIL)) (DOLIST (OPT-LIST OPTIONS) (CASE (CAR OPT-LIST) ((:UNDEFINER) (SETQ UNDEFINER (CADR OPT-LIST))) ((:NAME) (SETQ NAME-FN (CADR OPT-LIST))) ((:PROTOTYPE) (SETQ PROTOTYPE-FN (CADR OPT-LIST))) ((:TEMPLATE) (SETQ TEMPLATE (CADR OPT-LIST))) ((:PRETTYPRINTMACRO) (SETQ PRETTYMACRO (CADR OPT-LIST))) ((:EDITDATE-OFFSET) (SETQ EDITDATE-OFFSET (CADR OPT-LIST))) (OTHERWISE (CERROR "Ignore the option" "Unrecognized option to DefDefiner: ~S" OPT-LIST)))) (IL:* IL:|;;| "Crap out now if junk in EDITDATE-OFFSET") (WHEN (AND EDITDATE-OFFSET (NOT (INTEGERP EDITDATE-OFFSET))) (ERROR ":EDITDATE-OFFSET must be an integer, not ~a" EDITDATE-OFFSET)) (MULTIPLE-VALUE-BIND (EXPANSION-FN DOC) (SI::EXPANSION-FUNCTION NAME ARG-LIST BODY) (UNLESS (OR TEMPLATE PRETTYMACRO (NOT (MEMBER (QUOTE &BODY) ARG-LIST))) (IL:* IL:\; "Tell default prettyprinter where the body is") (SETQ TEMPLATE (NCONC (IL:FOR X IL:IN ARG-LIST IL:UNTIL (EQ X (QUOTE &BODY)) IL:UNLESS (MEMBER X LAMBDA-LIST-KEYWORDS) IL:COLLECT NIL) (LIST :BODY))) (WHEN (AND (NULL (CAR TEMPLATE)) (NULL NAME-FN)) (IL:* IL:\; "Name is in default place") (SETF (CAR TEMPLATE) :NAME))) (LET ((EXPANDER-NAME (GET-DEFINER-NAME NAME "definition-expander-")) (NAME-FN-NAME (IF (CONSP NAME-FN) (GET-DEFINER-NAME NAME "name-fn-")))) (IL:BQUOTE (PROGN (EVAL-WHEN (LOAD EVAL ) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE :DEFINER-FOR)) (QUOTE (IL:\\\, TYPE))) (PUSHNEW (QUOTE (IL:\\\, NAME)) (GET (QUOTE (IL:\\\, TYPE)) (QUOTE :DEFINED-BY))) (SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, EXPANDER-NAME))) (FUNCTION (IL:\\\, EXPANSION-FN))) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE :DEFINITION-EXPANDER)) (QUOTE (IL:\\\, EXPANDER-NAME))) (IL:\\\,@ (IF NAME-FN-NAME (IL:BQUOTE ((SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, NAME-FN-NAME))) (FUNCTION (IL:\\\, NAME-FN))))))) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE :DEFINITION-NAME)) (QUOTE (IL:\\\, (OR NAME-FN-NAME NAME-FN (QUOTE SECOND))))) (IL:\\\,@ (AND UNDEFINER (LET ((UNDEFINER-FN-NAME (GET-DEFINER-NAME NAME "undefiner-fn-"))) (IL:BQUOTE ((SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, UNDEFINER-FN-NAME))) (FUNCTION (IL:\\\, UNDEFINER))) (PUSHNEW (QUOTE (IL:\\\, UNDEFINER-FN-NAME)) (GET (QUOTE (IL:\\\, NAME)) (QUOTE :UNDEFINERS)))))))) (IL:\\\,@ (AND PROTOTYPE-FN (LET ((PROTOTYPE-FN-NAME (GET-DEFINER-NAME NAME "prototype-fn-"))) (IL:BQUOTE ((SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, PROTOTYPE-FN-NAME))) (FUNCTION (IL:\\\, PROTOTYPE-FN))) (ADD-PROTOTYPE-FN (QUOTE (IL:\\\, TYPE)) (QUOTE (IL:\\\, NAME)) (QUOTE (IL:\\\, PROTOTYPE-FN-NAME)))))))) (IL:\\\,@ (AND DOC (IL:BQUOTE ((SETF (DOCUMENTATION (QUOTE (IL:\\\, NAME)) (QUOTE FUNCTION)) (IL:\\\, DOC)))))) (IL:\\\,@ (AND TEMPLATE (IL:BQUOTE ((SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE :DEFINITION-PRINT-TEMPLATE)) (QUOTE (IL:\\\, TEMPLATE))))))) (IL:\\\,@ (AND EDITDATE-OFFSET (IL:BQUOTE ((SETF (GET (QUOTE (IL:\\\, NAME)) :EDITDATE-OFFSET) (IL:\\\, EDITDATE-OFFSET)))))) (PUSHNEW (QUOTE ((IL:\\\, NAME) (IL:\\\,@ (OR PRETTYMACRO (QUOTE PPRINT-DEFINER))))) IL:PRETTYPRINTMACROS :TEST (QUOTE EQUAL))) (DEFMACRO (IL:\\\, NAME) (&WHOLE DEFINITION &ENVIRONMENT ENV) (IL:BQUOTE (DEFINER (IL:\\\, (QUOTE (IL:\\\, TYPE))) (IL:\\\, (QUOTE (IL:\\\, NAME))) (IL:\\\, DEFINITION) (IL:\\\, ENV))))))))))
|
||||
|
||||
(DEFDEFINER (DEFDEFINER-VARIABLE-TYPE (:NAME (LAMBDA (WHOLE) (LET ((NAME (SECOND WHOLE))) (IF (CONSP NAME) (CAR NAME) NAME)))) (:PROTOTYPE (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (DEFDEFINER-VARIABLE-TYPE (IL:\\\, NAME) (IL:\\\, (IF (EQ (IL:EDITMODE) (INTERN "SEDIT" "SEDIT")) (SYMBOL-VALUE (INTERN "BASIC-GAP" "SEDIT")) "Type")) (IL:\\\,@ (%MAKE-FUNCTION-PROTOTYPE))))))) (:UNDEFINER %DELETE-DEFINER) (:TEMPLATE (:NAME :TYPE :ARG-LIST :BODY))) IL:FUNCTIONS (NAME TYPES ARG-LIST &BODY BODY) (IL:* IL:|;;| "An extension to the DEFDEFINER universe, this allows the creation of definers that map to multiple file-package types. The test case, and the only case guaranteed to work, is DEFUN (which now must accept (DEFUN (SETF FOO)...), which needs to be stored as a SETFS file type).") (LET* ((OPTIONS (COND ((CONSP NAME) (PROG1 (CDR NAME) (SETQ NAME (CAR NAME)))) (T NIL))) (NAME-FN NIL) (UNDEFINERS NIL) (PROTOTYPE-FNS NIL) (TEMPLATE NIL) (PRETTYMACRO NIL) (TYPE-DISCRIMINATOR NIL) (EXPANSION-FNS NIL) (DOCS NIL) (EDITDATE-OFFSET NIL)) (DOLIST (OPT-LIST OPTIONS) (CASE (CAR OPT-LIST) ((:UNDEFINERS) (SETQ UNDEFINERS (CDR OPT-LIST))) ((:NAME) (SETQ NAME-FN (CADR OPT-LIST))) ((:PROTOTYPES) (SETQ PROTOTYPE-FNS (CDR OPT-LIST))) ((:TEMPLATE) (SETQ TEMPLATE (CADR OPT-LIST))) ((:PRETTYPRINTMACRO) (SETQ PRETTYMACRO (CADR OPT-LIST))) ((:TYPE-DISCRIMINATOR) (SETQ TYPE-DISCRIMINATOR (CADR OPT-LIST))) ((:EDITDATE-OFFSET) (SETQ EDITDATE-OFFSET (CADR OPT-LIST))) (OTHERWISE (CERROR "Ignore the option" "Unrecognized option to DefDefiner: ~S" OPT-LIST)))) (UNLESS TYPE-DISCRIMINATOR (ERROR "DEFDEFINER-VARIABLE-TYPE must have a TYPE-DISCRIMINATOR")) (IL:* IL:|;;| "Crap out now if junk in EDITDATE-OFFSET") (WHEN (AND EDITDATE-OFFSET (NOT (INTEGERP EDITDATE-OFFSET))) (ERROR ":EDITDATE-OFFSET must be an integer, not ~a" EDITDATE-OFFSET)) (DOLIST (TYPE TYPES) (MULTIPLE-VALUE-BIND (EXPANSION-FN DOC) (SI::EXPANSION-FUNCTION NAME ARG-LIST (LET ((TB (GETF BODY TYPE))) (IF TB (LIST TB) (ERROR "No expansion-function for ~A" TYPE)))) (SETF (GETF EXPANSION-FNS TYPE) EXPANSION-FN) (WHEN DOC (SETQ DOCS (CONCATENATE (QUOTE STRING) DOCS (OR DOCS "
|
||||
") (SYMBOL-NAME TYPE) ": " DOC))))) (UNLESS (OR TEMPLATE PRETTYMACRO (NOT (MEMBER (QUOTE &BODY) ARG-LIST))) (IL:* IL:\; "Tell default prettyprinter where the body is") (SETQ TEMPLATE (NCONC (IL:FOR X IL:IN ARG-LIST IL:UNTIL (EQ X (QUOTE &BODY)) IL:UNLESS (MEMBER X LAMBDA-LIST-KEYWORDS) IL:COLLECT NIL) (LIST :BODY))) (WHEN (AND (NULL (CAR TEMPLATE)) (NULL NAME-FN)) (IL:* IL:\; "Name is in default place") (SETF (CAR TEMPLATE) :NAME))) (LET ((NAME-FN-NAME (IF (CONSP NAME-FN) (GET-DEFINER-NAME NAME "name-fn-"))) (TYPE-DISCRIMINATOR-NAME (GET-DEFINER-NAME NAME "type-discriminator-fn-"))) (IL:BQUOTE (PROGN (EVAL-WHEN (LOAD EVAL ) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE :DEFINER-FOR)) (QUOTE (IL:\\\, TYPES))) (SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, TYPE-DISCRIMINATOR-NAME))) (FUNCTION (IL:\\\, TYPE-DISCRIMINATOR))) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE :TYPE-DISCRIMINATOR)) (QUOTE (IL:\\\, TYPE-DISCRIMINATOR-NAME))) (IL:\\\,@ (AND PROTOTYPE-FNS (MAPCAN (FUNCTION (LAMBDA (TYPE) (LET ((PROTOTYPE-FN-NAME (GET-DEFINER-NAME NAME (CONCATENATE (QUOTE STRING) (SYMBOL-NAME TYPE) "-prototype-fn-")))) (IL:BQUOTE ((SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, PROTOTYPE-FN-NAME))) (FUNCTION (IL:\\\, (GETF PROTOTYPE-FNS TYPE)))) (ADD-PROTOTYPE-FN (QUOTE (IL:\\\, TYPE)) (QUOTE (IL:\\\, NAME)) (QUOTE (IL:\\\, PROTOTYPE-FN-NAME)))))))) TYPES))) (IL:\\\,@ (AND DOCS (IL:BQUOTE ((SETF (DOCUMENTATION (QUOTE (IL:\\\, NAME)) (QUOTE FUNCTION)) (IL:\\\, DOCS)))))) (IL:\\\,@ (AND TEMPLATE (IL:BQUOTE ((SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE :DEFINITION-PRINT-TEMPLATE)) (QUOTE (IL:\\\, TEMPLATE))))))) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE :DEFINITION-NAME)) (QUOTE (IL:\\\, (OR NAME-FN-NAME NAME-FN (QUOTE SECOND))))) (IL:\\\,@ (MAPCAN (FUNCTION (LAMBDA (TYPE) (LET ((EXPANDER-NAME (GET-DEFINER-NAME NAME (CONCATENATE (QUOTE STRING) (SYMBOL-NAME TYPE) "-definition-expander-"))) (EXPANSION-FN (GETF EXPANSION-FNS TYPE))) (IL:BQUOTE ((PUSHNEW (QUOTE (IL:\\\, NAME)) (GET (QUOTE (IL:\\\, TYPE)) (QUOTE :DEFINED-BY))) (SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, EXPANDER-NAME))) (FUNCTION (IL:\\\, EXPANSION-FN))) (SETF (GETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE :DEFINITION-EXPANDER)) (QUOTE (IL:\\\, TYPE))) (QUOTE (IL:\\\, EXPANDER-NAME)))))))) TYPES)) (IL:\\\,@ (IF NAME-FN-NAME (IL:BQUOTE ((SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, NAME-FN-NAME))) (FUNCTION (IL:\\\, NAME-FN))))))) (IL:\\\,@ (AND UNDEFINERS (MAPCAN (FUNCTION (LAMBDA (TYPE) (WHEN (GETF UNDEFINERS TYPE) (LET ((UNDEFINER-FN-NAME (GET-DEFINER-NAME NAME (CONCATENATE (QUOTE STRING) (SYMBOL-NAME TYPE) "-undefiner-fn-")))) (IL:BQUOTE ((SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, UNDEFINER-FN-NAME))) (FUNCTION (IL:\\\, (GETF UNDEFINERS TYPE)))) (PUSHNEW (QUOTE (IL:\\\, UNDEFINER-FN-NAME)) (GETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE :UNDEFINERS)) (QUOTE (IL:\\\, TYPE)))))))))) TYPES))) (IL:\\\,@ (AND EDITDATE-OFFSET (IL:BQUOTE ((SETF (GET (QUOTE (IL:\\\, NAME)) :EDITDATE-OFFSET) (IL:\\\, EDITDATE-OFFSET)))))) (PUSHNEW (QUOTE ((IL:\\\, NAME) (IL:\\\,@ (OR PRETTYMACRO (QUOTE PPRINT-DEFINER))))) IL:PRETTYPRINTMACROS :TEST (QUOTE EQUAL))) (DEFMACRO (IL:\\\, NAME) (&WHOLE DEFINITION &ENVIRONMENT ENV) (IL:BQUOTE (DEFINER-VARIABLE-TYPE (IL:\\\, (QUOTE (IL:\\\, NAME))) (IL:\\\, DEFINITION) (IL:\\\, ENV)))))))))
|
||||
|
||||
(DEFUN %EXPAND-DEFINER (DEFINER DEFINITION-WITHOUT-COMMENTS &OPTIONAL ENV) (FUNCALL (GET DEFINER :DEFINITION-EXPANDER) DEFINITION-WITHOUT-COMMENTS ENV))
|
||||
|
||||
(DEFUN %DEFINER-NAME (DEFINER DEFINITION-WITHOUT-COMMENTS) (FUNCALL (GET DEFINER :DEFINITION-NAME) DEFINITION-WITHOUT-COMMENTS))
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "The most commonly-used definers")
|
||||
|
||||
|
||||
(DEFDEFINER-VARIABLE-TYPE (DEFUN (:TYPE-DISCRIMINATOR (LAMBDA (WHOLE) (LET ((NAME (SECOND WHOLE))) (COND ((SYMBOLP NAME) (QUOTE IL:FUNCTIONS)) ((CL::SETF-NAME-P NAME) (QUOTE IL:SETFS)) (T (ERROR "Can't determine type for DEFUN: ~s" NAME)))))) (:NAME (LAMBDA (WHOLE) (LET ((NAME (SECOND WHOLE))) (COND ((SYMBOLP NAME) NAME) ((CL::SETF-NAME-P NAME) (CADR NAME)) (T (ERROR "Bad function-name for DEFUN: ~s" NAME)))))) (:PROTOTYPES IL:FUNCTIONS (LAMBDA (NAME) (IL:BQUOTE (DEFUN (IL:\\\, NAME) (IL:\\\,@ (%MAKE-FUNCTION-PROTOTYPE))))) IL:SETFS (LAMBDA (NAME) (IL:BQUOTE (DEFUN (SETF (IL:\\\, NAME)) (IL:\\\,@ (%MAKE-FUNCTION-PROTOTYPE)))))) (:TEMPLATE (:NAME :ARG-LIST :BODY)) (:EDITDATE-OFFSET 3)) (IL:FUNCTIONS IL:SETFS) (NAME ARGS &BODY (BODY DECLS DOCUMENTATION) &ENVIRONMENT ENV) IL:FUNCTIONS (IL:BQUOTE (PROGN (SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, NAME))) (FUNCTION (LAMBDA (IL:\\\, ARGS) (IL:\\\,@ DECLS) (BLOCK (IL:\\\, NAME) (IL:\\\,@ BODY))))) (IL:\\\,@ (AND DOCUMENTATION (IL:BQUOTE ((SETF (DOCUMENTATION (QUOTE (IL:\\\, NAME)) (QUOTE FUNCTION)) (IL:\\\, DOCUMENTATION)))))))) IL:SETFS (IL:* IL:|;;| "The form is (defun (setf foo) (store-var &rest args) body)") (IL:* IL:|;;| "Strategy is to give the code a name with DEFUN-SETF-NAME. The name is stored on the :SETF-DEFUN property of the accessor. This name is there for convenience/documentation only; the name can't be reliably changed by smashing this property (i.e. (SETF (FDEFINITION '(SETF FOO)) #'BAR) essentially does (SETF (SYMBOL-FUNCTION (DEFUN-SETF-NAME 'FOO)) #'BAR); it does NOT change the :SETF-DEFUN property on FOO).") (LET* ((REAL-NAME (SECOND NAME)) (DEFUN-SETF-NAME (DEFUN-SETF-NAME REAL-NAME))) (IL:BQUOTE (PROGN (SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, DEFUN-SETF-NAME))) (FUNCTION (LAMBDA (IL:\\\, ARGS) (IL:\\\,@ DECLS) (BLOCK (IL:\\\, REAL-NAME) (IL:\\\,@ BODY))))) (SET-DEFUN-SETF (QUOTE (IL:\\\, REAL-NAME)) (QUOTE (IL:\\\, DEFUN-SETF-NAME))) (IL:\\\,@ (AND DOCUMENTATION (IL:BQUOTE ((SETF (DOCUMENTATION (QUOTE (IL:\\\, REAL-NAME)) (QUOTE SETF)) (IL:\\\, DOCUMENTATION))))))))))
|
||||
|
||||
(DEFDEFINER (DEFINLINE (:PROTOTYPE (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (DEFINLINE (IL:\\\, NAME) (IL:\\\,@ (%MAKE-FUNCTION-PROTOTYPE))))))) (:TEMPLATE (:NAME :ARG-LIST :BODY))) IL:FUNCTIONS (NAME ARG-LIST &BODY BODY &ENVIRONMENT ENV) (IL:* IL:|;;;| "This is an INTERIM version of DEFINLINE. Eventually, this will just turn into a DEFUN and a PROCLAIM INLINE. (It says so right here.) If you're using this one, DO NOT make any recursive calls in the body of the DEFINLINE. If you do, the compiler will run forever trying to expand the optimizer... Once the INLINE version gets working (in the PavCompiler only) that restriction will be lifted.") (MULTIPLE-VALUE-BIND (CODE DECLS DOC) (PARSE-BODY BODY ENV T) (LET ((NEW-LAMBDA (IL:BQUOTE ((IL:\\\, (QUOTE LAMBDA)) (IL:\\\, ARG-LIST) (IL:\\\,@ DECLS) (BLOCK (IL:\\\, NAME) (IL:\\\,@ CODE)))))) (IL:BQUOTE (PROGN (DEFUN (IL:\\\, NAME) (IL:\\\, ARG-LIST) (IL:\\\,@ BODY)) (DEFOPTIMIZER (IL:\\\, NAME) (IL:\\\, (PACK (LIST "definline-" NAME) (SYMBOL-PACKAGE NAME))) (&REST ARGS) (CONS (QUOTE (IL:\\\, NEW-LAMBDA)) ARGS)))))))
|
||||
|
||||
(DEFDEFINER (DEFMACRO (:PROTOTYPE (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (DEFMACRO (IL:\\\, NAME) (IL:\\\,@ (%MAKE-FUNCTION-PROTOTYPE))))))) (:UNDEFINER (LAMBDA (NAME) (REMPROP NAME (QUOTE IL:ARGNAMES)))) (:TEMPLATE (:NAME :ARG-LIST :BODY))) IL:FUNCTIONS (NAME DEFMACRO-ARGS &BODY DEFMACRO-BODY) (UNLESS (AND NAME (SYMBOLP NAME)) (ERROR "Illegal name used in DEFMACRO: ~S" NAME)) (LET ((CMACRONAME (PACK (LIST "expand-" NAME) (SYMBOL-PACKAGE NAME)))) (MULTIPLE-VALUE-BIND (EXPANSION-FN DOC-STRING) (SI::EXPANSION-FUNCTION NAME DEFMACRO-ARGS DEFMACRO-BODY) (IL:BQUOTE (PROGN (SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, CMACRONAME))) (FUNCTION (IL:\\\, EXPANSION-FN))) (SETF (MACRO-FUNCTION (QUOTE (IL:\\\, NAME))) (QUOTE (IL:\\\, CMACRONAME))) (IL:\\\,@ (AND DOC-STRING (IL:BQUOTE ((SETF (DOCUMENTATION (QUOTE (IL:\\\, NAME)) (QUOTE FUNCTION)) (IL:\\\, DOC-STRING)))))) (IL:\\\,@ (WHEN COMPILER::*NEW-COMPILER-IS-EXPANDING* (IL:BQUOTE ((SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE IL:ARGNAMES)) (QUOTE (IL:\\\, (MAPCAR (FUNCTION (LAMBDA (ARG) (IF (MEMBER ARG LAMBDA-LIST-KEYWORDS) ARG (PRIN1-TO-STRING ARG)))) (IL:\\SIMPLIFY.CL.ARGLIST DEFMACRO-ARGS))))))))))))))
|
||||
|
||||
(DEFDEFINER (DEFVAR (:PROTOTYPE (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (DEFVAR (IL:\\\, NAME))))))) IL:VARIABLES (NAME &OPTIONAL (INITIAL-VALUE NIL IVP) DOCUMENTATION) (IL:BQUOTE (PROGN (PROCLAIM (QUOTE (SPECIAL (IL:\\\, NAME)))) (IL:\\\,@ (AND IVP (IL:BQUOTE ((OR (BOUNDP (QUOTE (IL:\\\, NAME))) (SETQ (IL:\\\, NAME) (IL:\\\, INITIAL-VALUE))))))) (IL:\\\,@ (AND DOCUMENTATION (IL:BQUOTE ((SETF (DOCUMENTATION (QUOTE (IL:\\\, NAME)) (QUOTE VARIABLE)) (IL:\\\, DOCUMENTATION)))))))))
|
||||
|
||||
(DEFDEFINER (DEFPARAMETER (:PROTOTYPE (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (DEFPARAMETER (IL:\\\, NAME) "Value" "Documentation string")))))) IL:VARIABLES (NAME INITIAL-VALUE &OPTIONAL DOCUMENTATION) (IL:BQUOTE (PROGN (PROCLAIM (QUOTE (SPECIAL (IL:\\\, NAME)))) (SETQ (IL:\\\, NAME) (IL:\\\, INITIAL-VALUE)) (IL:\\\,@ (AND DOCUMENTATION (IL:BQUOTE ((SETF (DOCUMENTATION (QUOTE (IL:\\\, NAME)) (QUOTE VARIABLE)) (IL:\\\, DOCUMENTATION)))))))))
|
||||
|
||||
(DEFDEFINER (DEFCONSTANT (:PROTOTYPE (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (DEFCONSTANT (IL:\\\, NAME) "Value" "Documentation string")))))) IL:VARIABLES (NAME VALUE &OPTIONAL DOCUMENTATION) (IL:BQUOTE (PROGN (IL:\\\,@ (IF (CONSTANTP NAME) (IL:BQUOTE ((SET-CONSTANTP (QUOTE (IL:\\\, NAME)) NIL))))) (SETQ (IL:\\\, NAME) (IL:\\\, VALUE)) (PROCLAIM (QUOTE (SI::CONSTANT (IL:\\\, NAME)))) (IL:\\\,@ (AND DOCUMENTATION (IL:BQUOTE ((SETF (DOCUMENTATION (QUOTE (IL:\\\, NAME)) (QUOTE VARIABLE)) (IL:\\\, DOCUMENTATION)))))))))
|
||||
|
||||
(DEFDEFINER (DEFGLOBALVAR (:PROTOTYPE (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (DEFGLOBALVAR (IL:\\\, NAME))))))) IL:VARIABLES (NAME &OPTIONAL (INITIAL-VALUE NIL IVP) DOCUMENTATION) (IL:* IL:|;;| "Use IL:SETQ here or the INIT dies.") (IL:BQUOTE (PROGN (PROCLAIM (QUOTE (GLOBAL (IL:\\\, NAME)))) (IL:\\\,@ (AND IVP (IL:BQUOTE ((OR (BOUNDP (QUOTE (IL:\\\, NAME))) (SETQ (IL:\\\, NAME) (IL:\\\, INITIAL-VALUE))))))) (IL:\\\,@ (AND DOCUMENTATION (IL:BQUOTE ((SETF (DOCUMENTATION (QUOTE (IL:\\\, NAME)) (QUOTE VARIABLE)) (IL:\\\, DOCUMENTATION)))))))))
|
||||
|
||||
(DEFDEFINER (DEFGLOBALPARAMETER (:PROTOTYPE (LAMBDA (NAME) (AND (SYMBOLP NAME) (IL:BQUOTE (DEFGLOBALPARAMETER (IL:\\\, NAME) "Value" "Documentation string")))))) IL:VARIABLES (NAME INITIAL-VALUE &OPTIONAL DOCUMENTATION) (IL:BQUOTE (PROGN (PROCLAIM (QUOTE (GLOBAL (IL:\\\, NAME)))) (SETQ (IL:\\\, NAME) (IL:\\\, INITIAL-VALUE)) (IL:\\\,@ (AND DOCUMENTATION (IL:BQUOTE ((SETF (DOCUMENTATION (QUOTE (IL:\\\, NAME)) (QUOTE VARIABLE)) (IL:\\\, DOCUMENTATION)))))))))
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "Here so that the evaluator can be in the init without definers being in the init.")
|
||||
|
||||
|
||||
(DEF-DEFINE-TYPE IL:SPECIAL-FORMS "Common Lisp special forms" :UNDEFINER %REMOVE-SPECIAL-FORM)
|
||||
|
||||
(DEFUN %REMOVE-SPECIAL-FORM (X) (IL:/REMPROP X (QUOTE IL:SPECIAL-FORM)))
|
||||
|
||||
(DEFDEFINER (DEFINE-SPECIAL-FORM (:TEMPLATE (:NAME :ARG-LIST :BODY))) IL:SPECIAL-FORMS (NAME ARGS &REST BODY) (COND ((NULL BODY) (ASSERT (SYMBOLP NAME) NIL "Ill-formed short DEFINE-SPECIAL-FORM; ~S is not a symbol." ARGS) (IL:BQUOTE (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE IL:SPECIAL-FORM)) (QUOTE (IL:\\\, ARGS))))) (T (LET ((SF (INTERN (CONCATENATE (QUOTE STRING) "interpret-" (STRING NAME)) (SYMBOL-PACKAGE NAME)))) (MULTIPLE-VALUE-BIND (PARSED-BODY DECLS DOC) (IL:PARSE-DEFMACRO ARGS (QUOTE $$TAIL) BODY NAME NIL :PATH (QUOTE $$TAIL) :ENVIRONMENT (QUOTE $$ENV)) (IL:BQUOTE (PROGN (SETF (SYMBOL-FUNCTION (QUOTE (IL:\\\, SF))) (FUNCTION (LAMBDA ($$TAIL $$ENV) (IL:\\\,@ DECLS) (BLOCK (IL:\\\, NAME) (IL:\\\, PARSED-BODY))))) (SETF (GET (QUOTE (IL:\\\, NAME)) (QUOTE IL:SPECIAL-FORM)) (QUOTE (IL:\\\, SF))))))))))
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "Form for defining interpreters of special forms")
|
||||
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\; "Don't note changes to these properties/variables")
|
||||
|
||||
|
||||
(IL:PUTPROPS IL:MACRO-FN IL:PROPTYPE IL:FUNCTIONS)
|
||||
|
||||
(IL:PUTPROPS :UNDEFINERS IL:PROPTYPE IGNORE)
|
||||
|
||||
(IL:PUTPROPS IL:UNDEFINERS IL:PROPTYPE IGNORE)
|
||||
|
||||
(IL:PUTPROPS :DEFINER-FOR IL:PROPTYPE IGNORE)
|
||||
|
||||
(IL:PUTPROPS IL:DEFINER-FOR IL:PROPTYPE IGNORE)
|
||||
|
||||
(IL:PUTPROPS :DEFINED-BY IL:PROPTYPE IGNORE)
|
||||
|
||||
(IL:PUTPROPS IL:DEFINED-BY IL:PROPTYPE IGNORE)
|
||||
|
||||
(IL:PUTPROPS :DEFINITION-NAME IL:PROPTYPE IGNORE)
|
||||
|
||||
(IL:PUTPROPS IL:DEFINITION-NAME IL:PROPTYPE IGNORE)
|
||||
|
||||
|
||||
|
||||
(IL:* IL:\;
|
||||
"Templates for definers not defined here. These should really be where they're defined.")
|
||||
|
||||
|
||||
(IL:PUTPROPS DEFCOMMAND :DEFINITION-PRINT-TEMPLATE (:NAME :ARG-LIST :BODY))
|
||||
|
||||
(IL:PUTPROPS DEFINE-CONDITION :DEFINITION-PRINT-TEMPLATE (:NAME :VALUE :BODY))
|
||||
|
||||
(IL:PUTPROPS DEFINE-MODIFY-MACRO :DEFINITION-PRINT-TEMPLATE (:NAME :ARG-LIST))
|
||||
|
||||
(IL:PUTPROPS DEFINE-SETF-METHOD :DEFINITION-PRINT-TEMPLATE (:NAME NIL NIL :BODY))
|
||||
|
||||
(IL:PUTPROPS DEFSETF :DEFINITION-PRINT-TEMPLATE (:NAME :ARG-LIST :ARG-LIST :BODY))
|
||||
|
||||
(IL:PUTPROPS DEFSTRUCT :DEFINITION-PRINT-TEMPLATE (:NAME :BODY))
|
||||
|
||||
(IL:PUTPROPS DEFTYPE :DEFINITION-PRINT-TEMPLATE (:NAME NIL :BODY))
|
||||
|
||||
|
||||
|
||||
(IL:* IL:|;;| "Arrange for the correct compiler to be used.")
|
||||
|
||||
|
||||
(IL:PUTPROPS IL:CMLDEFFER IL:FILETYPE :COMPILE-FILE)
|
||||
|
||||
(IL:PUTPROPS IL:CMLDEFFER IL:MAKEFILE-ENVIRONMENT (:READTABLE "XCL" :PACKAGE "XCL"))
|
||||
(IL:PUTPROPS IL:CMLDEFFER IL:COPYRIGHT ("Venue & Xerox Corporation" 1986 1900 1987 1988 1990 1992))
|
||||
(IL:DECLARE\: IL:DONTCOPY
|
||||
(IL:FILEMAP (NIL)))
|
||||
IL:STOP
|
||||
419
CLTL2/I-NEW.~3~
419
CLTL2/I-NEW.~3~
File diff suppressed because one or more lines are too long
2948
CLTL2/LLARRAYELT.~2~
2948
CLTL2/LLARRAYELT.~2~
File diff suppressed because it is too large
Load Diff
1418
CLTL2/LLNEW.~2~
1418
CLTL2/LLNEW.~2~
File diff suppressed because it is too large
Load Diff
24
Dockerfile
24
Dockerfile
@@ -1,24 +0,0 @@
|
||||
FROM ubuntu:focal
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update && apt-get install -y build-essential clang libx11-dev
|
||||
COPY maiko /build/
|
||||
WORKDIR /build/bin
|
||||
RUN rm -rf /build/linux*
|
||||
RUN ./makeright x
|
||||
|
||||
|
||||
FROM ubuntu:focal
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
EXPOSE 5900
|
||||
|
||||
RUN apt-get update && apt-get install -y tightvncserver
|
||||
RUN mkdir /app
|
||||
WORKDIR /app
|
||||
COPY basics ./
|
||||
COPY --from=0 /build/linux.x86_64/* ./
|
||||
|
||||
RUN adduser --disabled-password --gecos "" medley
|
||||
USER medley
|
||||
ENTRYPOINT USER=medley Xvnc -geometry 1270x720 :0 & DISPLAY=:0 /app/ldex -g 1280x720 full.sysout
|
||||
107
README.md
107
README.md
@@ -1,27 +1,73 @@
|
||||
# Medley
|
||||
|
||||
This repository is for the Lisp environment of [Medley](https://interlisp.org).
|
||||
|
||||
[Install and Run](https://interlisp.org/software/install-and-run) covers ways to install and start up Medley on Linux systems, MacOS, and Windows (with or without WSL).
|
||||
|
||||
[Using Medley](https://interlisp.org/software/using-medley/) has an overview and pointers to documentation.
|
||||
|
||||
This repository is for the Lisp environment of [Medley Interlisp](https://Interlisp.org).
|
||||
[Interlisp/maiko](https://github.com/Interlisp/maiko), is the repo for the implementation (in C) of the Medley virtual machine.
|
||||
|
||||
We've made great process in sorting out what we have (some dusty corners notwithstanding), but there's quite a bit more work to do. Please report problems!
|
||||
## Releases
|
||||
|
||||
See [Medley Interlisp Wiki](https://github.com/Interlisp/medley/wiki/) for an overview, and other pointers.
|
||||
While there are installers for popular platforms, this section may be useful in some circumstances.
|
||||
|
||||
A sub-project is [Interlisp/maiko](https://github.com/Interlisp/maiko), which is the implementation (in C) of the Medley virtual machine.
|
||||
### Getting releases
|
||||
|
||||
Get the Maiko release [here](https://github.com/Interlisp/maiko/releases). You'll need the .tgz file corresponding to your operating system and processor. For Windows with WSL or Intel Linux, use `linux.x86_64`; for Macs use `darwin.x86_64` for Intel and `darwin.aarch64` for Mac silicon. Windows without WSL uses `cygwin` instead.
|
||||
|
||||
## Instructions for Building and Running
|
||||
Or, build your own maiko (the binaries `lde`, `ldex` OR `ldesdl`, and `ldeinit`).
|
||||
You can also build for other architectures
|
||||
|
||||
The medley release image and sources come in two parts, found [here](https://github.com/Interlisp/medley/releases)
|
||||
1. The "loadups" (download `medley-`_YYMMDD-XXXXX_`-loadups.tgz`)
|
||||
2. The "runtime" (download `medley-`_YYMMDD-XXXXX_`-runtime.tgz`)
|
||||
|
||||
where _YYMMDD_ is the date and _XXXXX_ is the GitHub commit ID.
|
||||
|
||||
The "runtime" isn't needed if you've cloned the (medley) repo--you have all the files. The "runtime" has extra fonts, unicode tables, and source code that aren't part of the loadups but may be called on.
|
||||
|
||||
### Unpacking releases
|
||||
|
||||
From a shell/terminal window:
|
||||
|
||||
1. Choose a directory _parent_ where you want to install medley and maiko.
|
||||
2. Unpack the medley loadups file
|
||||
|
||||
* `cd ` _parent_
|
||||
* `tar xvzf medley-`_YYMMDD-XXXXX_`-loadups.tgz`
|
||||
|
||||
3. Unpack the medley runtime OR clone the Medley repo
|
||||
(the "medley runtime" is just a subset of the whole repo)
|
||||
|
||||
* `tar xvzf medley-`YYMMDD`-runtime.tgz`
|
||||
|
||||
OR
|
||||
```
|
||||
git clone https://github.com/Interlisp/medley
|
||||
```
|
||||
|
||||
4. Unpack the maiko file for your operating system and CPU type, e.g.,
|
||||
|
||||
```
|
||||
tar xvzf maiko-210823.linux.x86_64.tgz
|
||||
```
|
||||
|
||||
5. This should leave you with two directories, `medley` and `maiko`.
|
||||
|
||||
### Setting up X
|
||||
|
||||
Medley Interlisp needs an X-Server to manage its display. Most Linux desktops have one. There are a number of free open source X-servers for windows. Mac users should head over to [XQuartz.org](https://xquartz.org/releases) -- be sure to pick a version if you have a newer Mac.
|
||||
In many configurations, Medley uses an X-Server to manage its display. Most Linux desktops have one. Windows 11 with WSL includes an X-Server. For Windows 10 with WSL2, there are a number of open-source X servers; for example vcxsrv.
|
||||
|
||||
If you have a high-resolution display, note that much of the graphics was designed for a low-resolution display, so an X-server that does "pixel doublilng" is best. (E.g., Raspberry Pi does pixel doubling on 4K displays.) It also presumes you have a 3-button mouse; the scroll-wheel on some mice act as one with some difficulty.) XQuartz Preferences/Input has "Emulate three button mouse" option.
|
||||
Mac users should get [XQuartz from XQuartz.org](https://xquartz.org/releases).
|
||||
|
||||
Medley manages the display entirely, doesn't use X fonts and manages it's own window system.
|
||||
|
||||
### Running Medley Interlisp
|
||||
If you have a high-resolution display, note that much of the graphics was designed for a low-resolution display, so an X-server that does "pixel doubling" is best. (E.g., Raspberry Pi does pixel doubling on 4K displays.)
|
||||
|
||||
Medley presumes you have a 3-button mouse; the scroll-wheel on some mice acts as one, with some difficulty. Go into XQuartz Preferences/Input and check "Emulate three button mouse" option.
|
||||
|
||||
### Running Medley Interlisp (obsolete)
|
||||
|
||||
The `run-medley` script in this repo sets up some convenient defaults. Running Medley can be done by typing:
|
||||
```
|
||||
@@ -35,9 +81,6 @@ Or, if you wish to start Medley up with a different SYSOUT:
|
||||
$ cd medley
|
||||
$ ./run-medley <SYSOUT-file-name>
|
||||
```
|
||||
|
||||
Once the system comes up, give it a few seconds to initialize.
|
||||
|
||||
The first time the system is run it loads the system image that comes
|
||||
with the system. When you exit the system (or "do a `SaveVM`" menu
|
||||
option) the state of your machine is saved in a file named
|
||||
@@ -56,40 +99,40 @@ Or from the Common Lisp prompt with:
|
||||
```
|
||||
(IL:LOGOUT)
|
||||
```
|
||||
When you logout of the system, Medley automatically creates a binary
|
||||
When you log out of the system, Medley automatically creates a binary
|
||||
dump of your system located in your home directory named
|
||||
`lisp.virtualmem`. The next time you run the system, if you don't
|
||||
specify a specific image to run, Medley restores that image so that
|
||||
you can continue right where you left off.
|
||||
|
||||
* [Using Medley Interlisp](https://github.com/Interlisp/medley/wiki/Using-Medley-Interlisp)
|
||||
|
||||
* [Using Medley Interlisp](https://interlisp.org/doc/info/Using.html)
|
||||
|
||||
## Naming conventions and directory structure
|
||||
|
||||
File Names and Extensions: Most Interlisp source file names are
|
||||
UPPERCASE and Interlisp didn't use file extensions for its source
|
||||
files. A .TEDIT or .TXT file is probably documentation
|
||||
for the package of same name, at least in the library,
|
||||
internal/library, lispusers.
|
||||
for the package of the same name, at least in the library and lispusers
|
||||
directories.
|
||||
|
||||
The current repo has both Lisp sources and compiled .LCOM and .DFASL
|
||||
files, because some files don't compile in a vanilla lisp.sysout .
|
||||
files.
|
||||
|
||||
Each directory should have a README.md, but briefly
|
||||
|
||||
- docs -- Documentation files (either PDFs or online help)
|
||||
- fonts -- raster fonts (or font widths) in various resolutions for display, postscript, interpress, press formats
|
||||
- greetfiles -- various configuration setups
|
||||
- internal -- These _were_ internal to Venue; now internal/library and internal/test
|
||||
- library -- packages that were supported (30 years ago)
|
||||
- lispusers -- packages that were only half supported (ditto)
|
||||
- loadups -- has sysouts and other builds
|
||||
- patches -- for cases where reloading doesn't wor
|
||||
- scripts -- some scripts for fixing up things
|
||||
- sunloadup -- support information for making a new lisp.sysout from scratch
|
||||
- sources -- sources for Interlisp and Common Lisp implementations
|
||||
- unicode -- data files for support of XCCS to and from Unicode mappings
|
||||
|
||||
plus
|
||||
Dockerfile, and scripts for building and running medley
|
||||
* BUILDING.md -- instructions on how to make your own loadups
|
||||
* clos -- early implementation of Common Lisp Object System
|
||||
* CLTL2 -- files submitted to bring Medley up to the conformance to "Common Lisp, the Language" 2nd edition. Not enough to conform to the ANSI standard lisp.
|
||||
* docs -- Documentation files (in TEdit format, PDFs, or online help; look [here](https://github.com/Interlisp/medley/Documentation))
|
||||
* fonts -- raster fonts (or font widths) in various resolutions for display, postscript, interpress, press formats
|
||||
* greetfiles -- various configuration setups
|
||||
* internal -- These _were_ internal to Venue
|
||||
* library -- packages that were supported (30 years ago)
|
||||
* lispusers -- User contributed packages that were only half supported (ditto)
|
||||
* loadups -- has sysouts and other builds plus a few remnants
|
||||
* obsolete -- files we should remove from the repo
|
||||
* rooms -- implementation of ROOMS window/desktop manager
|
||||
* run-medley -- script to enhance the options of running medley
|
||||
* scripts -- some scripts for fixing up things, building and running medley
|
||||
* sources -- sources for Interlisp and Common Lisp implementations
|
||||
* unicode -- data files for support of XCCS to and from Unicode mappings
|
||||
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@@ -1,2 +0,0 @@
|
||||
(ASDF NIL NIL NIL ("1") 1)
|
||||
(ASDF NIL NIL NIL ("A") 2)
|
||||
10
docs/README.md
Normal file
10
docs/README.md
Normal file
@@ -0,0 +1,10 @@
|
||||
See [Documentation links](https://github.com/Interlisp/medley/wiki/Documentation)
|
||||
a complete list of available documentation. Much of the documentation still
|
||||
needs review and updating.
|
||||
|
||||
This directory has source (.TEDIT) for some documents that are found elsewhere.
|
||||
|
||||
|
||||
* dinfo -- files for HelpSys man command Interlisp Reference Manual
|
||||
|
||||
|
||||
BIN
docs/ReleaseNote/APPENDIXA-THEEXEC.TEDIT
Normal file
BIN
docs/ReleaseNote/APPENDIXA-THEEXEC.TEDIT
Normal file
Binary file not shown.
BIN
docs/ReleaseNote/APPENDIXB-SEDIT.TEDIT
Normal file
BIN
docs/ReleaseNote/APPENDIXB-SEDIT.TEDIT
Normal file
Binary file not shown.
0
docs/ReleaseNote/APPENDIXB-SEDIT.pdf
Executable file → Normal file
0
docs/ReleaseNote/APPENDIXB-SEDIT.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/APPENDIXC-ICONW.TEDIT
Normal file
BIN
docs/ReleaseNote/APPENDIXC-ICONW.TEDIT
Normal file
Binary file not shown.
0
docs/ReleaseNote/APPENDIXC-ICONW.pdf
Executable file → Normal file
0
docs/ReleaseNote/APPENDIXC-ICONW.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/APPENDIXD-FREEMENU.TEDIT
Normal file
BIN
docs/ReleaseNote/APPENDIXD-FREEMENU.TEDIT
Normal file
Binary file not shown.
148
docs/ReleaseNote/APPENDIXE-ERRSYS.TEDIT
Normal file
148
docs/ReleaseNote/APPENDIXE-ERRSYS.TEDIT
Normal file
File diff suppressed because one or more lines are too long
BIN
docs/ReleaseNote/ENVOSCOVERSHEET.TEDIT
Normal file
BIN
docs/ReleaseNote/ENVOSCOVERSHEET.TEDIT
Normal file
Binary file not shown.
0
docs/ReleaseNote/ENVOSCOVERSHEET.pdf
Executable file → Normal file
0
docs/ReleaseNote/ENVOSCOVERSHEET.pdf
Executable file → Normal file
0
docs/ReleaseNote/Indexfinal.pdf
Executable file → Normal file
0
docs/ReleaseNote/Indexfinal.pdf
Executable file → Normal file
138
docs/ReleaseNote/Indexfinal.tedit
Normal file
138
docs/ReleaseNote/Indexfinal.tedit
Normal file
File diff suppressed because one or more lines are too long
0
docs/ReleaseNote/LOT.pdf
Executable file → Normal file
0
docs/ReleaseNote/LOT.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/LOT.tedit
Normal file
BIN
docs/ReleaseNote/LOT.tedit
Normal file
Binary file not shown.
BIN
docs/ReleaseNote/PREFACE.TEDIT
Normal file
BIN
docs/ReleaseNote/PREFACE.TEDIT
Normal file
Binary file not shown.
0
docs/ReleaseNote/PREFACE.pdf
Executable file → Normal file
0
docs/ReleaseNote/PREFACE.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/PRINTINGSPEC.TEDIT
Normal file
BIN
docs/ReleaseNote/PRINTINGSPEC.TEDIT
Normal file
Binary file not shown.
0
docs/ReleaseNote/PRINTINGSPEC.pdf
Executable file → Normal file
0
docs/ReleaseNote/PRINTINGSPEC.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/SEC1-INTRODUCTION.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC1-INTRODUCTION.TEDIT
Normal file
Binary file not shown.
BIN
docs/ReleaseNote/SEC2-NOTES-AND-CAUTIONS.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC2-NOTES-AND-CAUTIONS.TEDIT
Normal file
Binary file not shown.
BIN
docs/ReleaseNote/SEC3-IRMFEATURES-I.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC3-IRMFEATURES-I.TEDIT
Normal file
Binary file not shown.
BIN
docs/ReleaseNote/SEC3-IRMFEATURES-II.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC3-IRMFEATURES-II.TEDIT
Normal file
Binary file not shown.
BIN
docs/ReleaseNote/SEC3-IRMFEATURES-III.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC3-IRMFEATURES-III.TEDIT
Normal file
Binary file not shown.
BIN
docs/ReleaseNote/SEC4-IRMERRATA.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC4-IRMERRATA.TEDIT
Normal file
Binary file not shown.
0
docs/ReleaseNote/SEC4-IRMERRATA.pdf
Executable file → Normal file
0
docs/ReleaseNote/SEC4-IRMERRATA.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/SEC5-LIBRARY-MODULES.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC5-LIBRARY-MODULES.TEDIT
Normal file
Binary file not shown.
BIN
docs/ReleaseNote/SEC6-USERS-GUIDES.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC6-USERS-GUIDES.TEDIT
Normal file
Binary file not shown.
BIN
docs/ReleaseNote/SEC7-CLIMPLMNTN.TEDIT
Normal file
BIN
docs/ReleaseNote/SEC7-CLIMPLMNTN.TEDIT
Normal file
Binary file not shown.
0
docs/ReleaseNote/SEC7-CLIMPLMNTN.pdf
Executable file → Normal file
0
docs/ReleaseNote/SEC7-CLIMPLMNTN.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/TABS2L.SKETCH
Normal file
BIN
docs/ReleaseNote/TABS2L.SKETCH
Normal file
Binary file not shown.
0
docs/ReleaseNote/TABS2L.pdf
Executable file → Normal file
0
docs/ReleaseNote/TABS2L.pdf
Executable file → Normal file
2
docs/ReleaseNote/TABSINFOP.SKETCH
Normal file
2
docs/ReleaseNote/TABSINFOP.SKETCH
Normal file
File diff suppressed because one or more lines are too long
0
docs/ReleaseNote/TABSINFOP.pdf
Executable file → Normal file
0
docs/ReleaseNote/TABSINFOP.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/TABSLAYOUTL.SKETCH
Normal file
BIN
docs/ReleaseNote/TABSLAYOUTL.SKETCH
Normal file
Binary file not shown.
0
docs/ReleaseNote/TABSLAYOUTL.pdf
Executable file → Normal file
0
docs/ReleaseNote/TABSLAYOUTL.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/TABSPEC.TEDIT
Normal file
BIN
docs/ReleaseNote/TABSPEC.TEDIT
Normal file
Binary file not shown.
0
docs/ReleaseNote/TABSPEC.pdf
Executable file → Normal file
0
docs/ReleaseNote/TABSPEC.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/TOC.TEDIT
Normal file
BIN
docs/ReleaseNote/TOC.TEDIT
Normal file
Binary file not shown.
0
docs/ReleaseNote/TOC.pdf
Executable file → Normal file
0
docs/ReleaseNote/TOC.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/Tab-Replacements.tedit
Normal file
BIN
docs/ReleaseNote/Tab-Replacements.tedit
Normal file
Binary file not shown.
0
docs/ReleaseNote/Titlepage.pdf
Executable file → Normal file
0
docs/ReleaseNote/Titlepage.pdf
Executable file → Normal file
BIN
docs/ReleaseNote/Titlepage.tedit
Normal file
BIN
docs/ReleaseNote/Titlepage.tedit
Normal file
Binary file not shown.
BIN
docs/ReleaseNote/bindercover.sketch
Normal file
BIN
docs/ReleaseNote/bindercover.sketch
Normal file
Binary file not shown.
0
docs/ReleaseNote/indexbase.pdf
Executable file → Normal file
0
docs/ReleaseNote/indexbase.pdf
Executable file → Normal file
146
docs/ReleaseNote/indexbase.tedit
Normal file
146
docs/ReleaseNote/indexbase.tedit
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
2
docs/internal/1982BUGS.TEDIT
Normal file
2
docs/internal/1982BUGS.TEDIT
Normal file
File diff suppressed because one or more lines are too long
BIN
docs/internal/32MBAddressSpaceLayout.tedit
Normal file
BIN
docs/internal/32MBAddressSpaceLayout.tedit
Normal file
Binary file not shown.
38
docs/internal/AR-How-To-Edit.tedit
Normal file
38
docs/internal/AR-How-To-Edit.tedit
Normal file
File diff suppressed because one or more lines are too long
8
docs/internal/ATOMHIST.TXT
Normal file
8
docs/internal/ATOMHIST.TXT
Normal file
@@ -0,0 +1,8 @@
|
||||
((0 246) (1 15332) (2 3591) (3 1765) (4 897) (5 654) (6 442) (7 339) (8 232) (9 180) (10 176) (11 125)
|
||||
(12 108) (13 107) (14 91) (15 65) (16 74) (17 48) (18 57) (19 46) (20 35) (21 31) (22 28) (23 28) (24
|
||||
24) (25 22) (26 26) (27 27) (28 9) (29 18) (30 10) (31 9) (32 10) (33 7) (34 10) (35 6) (36 4) (37 8)
|
||||
(38 2) (39 4) (40 6) (41 7) (42 3) (43 11) (44 4) (45 3) (46 3) (47 4) (48 5) (49 1) (50 3) (51 2) (
|
||||
52 2) (53 1) (54 1) (55 4) (56 7) (57 2) (58 2) (59 4) (60 2) (61 1) (62 3) (63 2) (64 2) (66 1) (67 5
|
||||
) (69 1) (70 2) (72 1) (73 1) (74 1) (75 2) (77 2) (79 1) (82 2) (83 1) (84 2) (86 1) (89 1) (91 1) (
|
||||
93 2) (97 1) (111 1) (116 1) (119 1) (130 1) (133 1) (136 1) (145 1) (146 1) (148 1) (152 2) (159 1) (
|
||||
163 1) (168 1) (179 1) (185 1) (188 1) (196 1) (207 1))
|
||||
116
docs/internal/Addarith.tty
Normal file
116
docs/internal/Addarith.tty
Normal file
@@ -0,0 +1,116 @@
|
||||
|
||||
There are a few additional arithmetic functions:
|
||||
|
||||
(MASK.1'S <position> <size>) returns a number equivalent to
|
||||
(llsh (sub1 (expt 2 size)) position), but faster, and without consing.
|
||||
Currently, the sume of <position> and <size> cannot exceed 32.
|
||||
(MASK.0'S <position> <size>) is basically (logxor -1 (mask.1's position size))
|
||||
|
||||
These two functions use a diagonal array of pre-computed masks, which
|
||||
is accessed by \getbaseptr's over a 32-cell index array (this is to substitute
|
||||
for "fast" elt, since ELT isn't yet in microcode). Macro definitions for both
|
||||
funs cause all calls to MASK.1'S to turn into these "fast" elts.
|
||||
|
||||
(POWEROFTWOP <x>) where <x> is an integer, quickly returns its result.
|
||||
|
||||
(INTEGERLENGTH <x>) is basically log2 of n; that is how long the integer
|
||||
representation of <x> is when expressed in base 2. For example,
|
||||
(haulong 13) = 4; <x> must be an integer, and for negative arguments,
|
||||
the result is the same as that of the absolute value.
|
||||
|
||||
(HAIPART <x> <n>) gets the high-order <n> bits of the two's complement
|
||||
representation of the integer <x>; for negative <n>, it gets the low-order
|
||||
<-n> bits. Note that "high-order" is not dependent on word size, but
|
||||
is derived from (HAULONG <x>).
|
||||
|
||||
(IMOD <x> <modulus>) returns <a> where <a> is in the closed interval
|
||||
[0, 1, ... < modulus-1>] and <x> = m*<modulus>+<a>. NoteWell:
|
||||
this is *not* the same as the REMAINDER function, since <a> is always
|
||||
non-negative. The argument <modulus> may also be CELL or WORD,
|
||||
in which case the appropriate size is substituted to truncate to a cell-sized
|
||||
or word-sized integer. A macro definition for mod optimizes the case for
|
||||
compilation where <n> is constant and is a power of two.
|
||||
|
||||
(EVENP <x> <n>) is true iff <x> is 0 mod <n>; <n> defaults to two if not
|
||||
supplied. Currently both arguments must be integers. A macro
|
||||
definition also does some compile-time optimization, particularly
|
||||
for the case where <n> is a power of two.
|
||||
|
||||
(ODDP <x> <n>) is just (not (evenp <x> <n>)); has both expr and macro
|
||||
definition.
|
||||
|
||||
(IMODLESSP <x> <y> <modulus> <equal?>) This function is inspired by
|
||||
the need to use "wrap-around" counters. It is not possible to define a
|
||||
"perfect" ordering function on the integers [0, 1, ... <modulus-1>], but
|
||||
this function takes the view that it is better to limit the "diameter"
|
||||
of the applicable domain, than to "bump" into the singularity at the
|
||||
endpoints of the interval. So MODLESSP will return "true" iff
|
||||
<y>-<x> mod <modulus> is less than 1/2*<modulus>. The optional
|
||||
argument <equal?>, if non-null, says to do a "less than or equal"
|
||||
test rather than a "lessp" test. Generally the <modulus> should be
|
||||
a power of two (for faster running speed), but this isn't necessary.
|
||||
Two exceptional arguments are also admitted -- if <modulus> is
|
||||
'WORD, then the appropriate value is taken for word-sized arithmetic;
|
||||
if it is 'CELL, then the appropriate value is taken for double-word,
|
||||
or cell, sized arithmetic. In Interlisp-D, WORD sized is 16-bit, and
|
||||
CELL-sized is 32-bit.
|
||||
|
||||
(TIMEREXPIRED? <x> <y>) Basically, this function just calls MODLESSP with
|
||||
<x> and <y> and a modulus argument derived from the size of the clock
|
||||
behind the CLOCK function; however, if <y> is omitted (or is NIL), it
|
||||
defaults to the value of (CLOCK 0), but without doing any consing.
|
||||
Typical usage is in implementing an "alarmclock". One will set some
|
||||
variable, say TIMEOUT, to (MODPLUS (CLOCK 0) <duration>), and
|
||||
then frequently test (TIMELESSP TIMEOUT); when this test first
|
||||
becomes false, the timer, or "alarmclock", has expired.
|
||||
|
||||
(IMODPLUS <x> <y> <modulus>)
|
||||
(IMODDIFFERENCE <x> <y> <modulus>)
|
||||
These two functions are essentially (MOD (<operation> <x> <y>) <modulus>),
|
||||
except no overflow is permitted to occur during the intermediate <operation>.
|
||||
A macro produces some slightly-optimized code for the case where <modulus>
|
||||
is CELL. A current limitation is that an arithmetic overflow occurring when
|
||||
<modulus> is not a power of two (or CELL or WORD) causes an error.
|
||||
|
||||
(BITTEST <n> <mask>) is the CommonLisp function defined as
|
||||
(NEQ 0 (LOGAND <n> <mask>)).
|
||||
|
||||
(ROT <x> <n> <wordsize>) is a slight extension of the CommonLisp ROT
|
||||
function; it performs a bitwise-rotation of the integer <x>, by <n> places,
|
||||
within a field of <wordsize> bits wide. The optional argument <wordsize>
|
||||
defaults to CELL, and must either be an integer in the range 1 to
|
||||
<bitspercell>, or else be one of the litatoms CELL or WORD; in the latter
|
||||
two cases the quantities <bitspercell> and <bitsperword> are respectively
|
||||
substituted. A macro optimizes the case where <wordsize> is WORD and <n>
|
||||
is 1; this is to help with the 16-bit rotate found in checksumming algorithms.
|
||||
|
||||
|
||||
***** The remaining documentation is about \-named functions ******
|
||||
|
||||
The following two functions are essentially the CommonLisp functions
|
||||
LOAD-BYTE and DEPOSIT-BYTE, but without any error or consistency
|
||||
checking. There are versions with the checking, under similar, non-\
|
||||
names, in another file (to be released at a later date).
|
||||
|
||||
(\XLOADBYTE <x> <position> <size>) is derived from the PDP-10 LDB
|
||||
instruction; it takes a byte of length <size> out of the integer <x>
|
||||
which byte has <position> bits to the right of it when <x> is viewed
|
||||
in binary notation.
|
||||
(\XDEPOSITBYTE <x> <position> <size> <newval>) is derived from the PDP-10
|
||||
DPB instruction; it does not "modify memory" however, but returns
|
||||
an integer obtained by replaceing the byte of <x> as specified under
|
||||
LOADBYTE with the low-order <size> bits of <newval>.
|
||||
|
||||
The following four functions implement a feature that Ron asked for a long
|
||||
time ago, and probably should not be documented for random users, unless
|
||||
all the \-functions will be so documented:
|
||||
|
||||
(\GETBASEBITS <addr> <bit-offset> <n>) returns a integer obtained by
|
||||
starting at the word address <addr>, skipping over <bit-offset> bits,
|
||||
and getting the next <n> bits from memory. In this scenario, bits
|
||||
are numbered with 0 being the high-order position in the word, and
|
||||
with incresing bit-addresses leading to increasing word address. Thus
|
||||
bit address 15 is the low-order bit of some word, and bit address 16 is
|
||||
the high-order bit of the next word. The low-order bit of the result
|
||||
is obtained from the bit found at <bit-offset>+<n>-1 bits after bit 0 of
|
||||
the word at <addr>. This ordering of bits and bytes within a memor
|
||||
BIN
docs/internal/AddressSensitiveFns.TEdit
Normal file
BIN
docs/internal/AddressSensitiveFns.TEdit
Normal file
Binary file not shown.
BIN
docs/internal/Array-Space.TEdit
Normal file
BIN
docs/internal/Array-Space.TEdit
Normal file
Binary file not shown.
BIN
docs/internal/BROKENMotown-wishlist.TEdit
Normal file
BIN
docs/internal/BROKENMotown-wishlist.TEdit
Normal file
Binary file not shown.
151
docs/internal/BUILDINGUCODE
Normal file
151
docs/internal/BUILDINGUCODE
Normal file
@@ -0,0 +1,151 @@
|
||||
File: [FS6:PARC:Xerox]/ISLDisplay/Display1/Software/LispOptionsHandlers.message
|
||||
Last Edited: DDavies - 3-Nov-88 18:12:10
|
||||
|
||||
I hyperventilated a lot trying to figure out what to do. Here's the procedure I think should work. CORRECTIONS APPRECIATED!!!!!!
|
||||
|
||||
Already Nick Briggs and Karey Krauter have cleared up many points. Without them, this would never have happened.
|
||||
|
||||
Examples of the files used to build the color display handler can be found on [FS6:PARC:Xerox]/ISLDisplay/Display1/Software/IOP/*.
|
||||
|
||||
---------------------------------------------------------------
|
||||
|
||||
This is a procedure for adding an options handler to an existing LispDove.db. It is an amalgam of the procedure in RAMMemHandlers.doc and what I've been able to figure out. I assume the new options handler will live in Main Memory. Its name will be "xyz."
|
||||
|
||||
The first thing to realize about building a LispDove.db is that you have unlimited opportunities to demonstrate your toughness and resolve. This procedure took me about a week to get through successfully the first time. Then for about 6 months it was easy. Then it was impossible again, so I switched from Lyric (a Lisp release) to Medley (a later release). This document describes the process of building the Medley release since I seem to have lost the ability to build one for Lyric.
|
||||
|
||||
This document is mostly about the process of assembling the files needed to do the final build, not about the tactics of writing a handler. There are a few hints below, but you'll really need to read the Opie documentation and look at the existing options handlers (Bringover PPOHandlerDove.df or CDspHandlerDove.df). Having a knowledgeable (and understanding) friend helps a great deal. You should also read everything on [Ohio:OSBU North:Xerox]<IO Architecture>MesaDoveDoc> and <IO Architecture>Opie>. The file called PerfectMap.mp2 is really called Perfect.mp2 and is on <IO Architecture>, not <IO Architecture>MesaDoveDoc>.
|
||||
|
||||
We assume that you know 80186 assembly language. We also assume knowledge of PCs, XDE and all the tools you'll use to get the job done.
|
||||
|
||||
I'm intentionally ignoring ConfigOnly files, since there is no Lisp Configuration Tool (they use the Mesa one).
|
||||
|
||||
I'm also ignoring the Lisp software necessary to communicate with the new Handler, since I don't know anything about it. Maybe we'll add that later (Nick?). I do know that Lisp doesn't have processes, just tasks that voluntarily give up control and execute in strict round-robin fashion. There is no limit on the length of time a Lisp task may hold the processor. Well-behaved tasks give up control occasionally. Lisp tasks can send interrupts to the IOP. The IOP handlers essentially cannot sent interrupts to Lisp tasks (if you ignore the timer). Timer interrupts appear 60 times/sec, but don't seem to do much.
|
||||
|
||||
We'll assume you're doing all your assembling, linking and locating on a real XT or AT. The Assembler, Linker, Locator, CRLFTool and PC/XNS software are floating around. We also assume you're doing your editing in XDE. XDE is also needed to run the BringOver/SModel, Fetch and MakeDoveMicroboot tools. Files are transferred between your workstation and the PC using the Ethernet. All the command files used will pull the relevant files over, do the work, and send the results back. Since the XDE editor doesn't use linefeed characters and the PC software demands them, we'll incorporate a program on the PC to insert linefeeds (CRLFTool). Unfortunately, the program isn't smart enough to recognize existing CRLF sequences - it turns them into CRLFLF. That means we'll have to remove any linefeeds that exist on the XDE side.
|
||||
|
||||
(1) First, we'll BringOver all the dreck you'll use to build your handler. There are lots and lots and lots of versions of this stuff around. The current Lisp system is not based on any particular DSBU release. The only way to get an approximation to the files used by the rest of the Lisp code is to bring it all over. First, carefully get rid of whatever .asm, .def, .lst, .obj, .lnk, .loc, .mp1 and .mp2 files you've got lying around.
|
||||
|
||||
BringOver "[Pogo:AISNorth:Xerox]<UCode>DF>LispDove.df"
|
||||
BringOver exactly the version of LispDoveIOPIntegration.df now on your disk.
|
||||
BringOver exactly the version of AllocSgs.df now on your disk.
|
||||
BringOver exactly the version of KeyboardMouseHandlerDove.df now on your disk.
|
||||
Go get [Wilma:OSBU North:Xerox]<Maple>Working>IOP>XtndOpie.loc (it will be used by ColorLispDove.cm)
|
||||
|
||||
Now, you're close. You've noticed by now that these DF files specify numerous versions of some files. Here are my rules: 1) BringOver the latest version whenever there is a conflict. This works except for the following files (as of 12-Jul-88 11:07:06 anyway):
|
||||
|
||||
IOREther.obj, STKEther.obj - The version of IOREther used in LispDoveIOPIntegration uses up about 13KB of the 16KB available for IORegions. The rest of the IORegions won't fit in the remaining space below 8000H. Why is this important? Well, if you plan to debug your handler IOP code using Lisp, you need to put an image of the PROM into RAM. At SDD, they changed things so the PROM image can live at C000H. However, Lisp hasn't changed so it's PROM image still lives at 8000H. As of this date (12-Jul-88 11:10:26), the Lisp code doesn't take advantage of the extra ENet buffers, so you can use the IOREther.obj and STKEther.obj from the 12.3 release if you need to. For the Medley build, I'm using the big ENet buffers and doing my handler debugging in the Mesa environment.
|
||||
|
||||
(2) Create an IORegion segment definition both in 80186 assembly language and Lisp code. Make sure they match. The 80186 segment must be named "xyzIOR" and be contained in a file called "IORxyz.asm". Your IOR segment must be declared "COMMON". Many copies of it will appear in different files below. The locator will combine the copies only because of the COMMON declaration.
|
||||
|
||||
(3) Create a stack segment definition in 80186 assembly code. The segment must be named "xyxSTK", and its standard file name is "STKxyz.asm". Your STK segment must be declared "COMMON". Many copies of it will appear in different files below. The locator will combine the copies only because of the COMMON declaration.
|
||||
|
||||
(4) Write your 80186 handler. Remember that its name can be no longer than 8 characters (MS-DOS limitation). This will contain all the tasks needed by your device. A useful way of thinking about an Opie task is that for every interrupt serviced by your handler, you need one task. An interrupt may not be serviced by two tasks and a task shouldn't try to service two interrupts. You can have more tasks than interrupts if that is useful. Watch out for the way Opie handles interrupts when receiving tasks aren't waiting for them.
|
||||
|
||||
You might also want to think about where variables are stored. All the PROM handlers put their variables in the IORegion, since that's the only RAM they are allowed to use. Since your handler will be in RAM, you could bury some variables in it if necessary. Remember that the number of segment registers is limited and care should be taken when passing pointers with implied segment registers. For example, if passing a pointer to a parameter block which might be either in the code segment or in the IORegion, the procedure receiving the pointer must have some way of figuring out what segment register to use. One way out of this is to put all variables in the IOR.
|
||||
|
||||
Your handler code must contain an externally defined variable called "xyzHandlerID" declared as follows
|
||||
|
||||
EXTRN xyzHandlerID: ABS
|
||||
|
||||
Note that you really must use "xyzHandlerID", not "xyzHdlrID" or "MyHandlerID" or something else. Opie uses macros to assemble names and you must conform to the pattern. The xyzHandlerID is passed as an argument to Opie macros like %InitializeTask or %Restart.
|
||||
|
||||
Your handler must also contain an initialization procedure declared as
|
||||
|
||||
xyxInit PUBLIC FAR PROC
|
||||
.
|
||||
.
|
||||
.
|
||||
xyxInit ENDP
|
||||
|
||||
Again, only "xyzInit" will do, not "MyInit" or "xyzInitializtionProcedure" or "HereWeGo".
|
||||
|
||||
The code segment for your handler must be named "IOPEInRAM".
|
||||
|
||||
(5) Look at all the .asm and .def files you have now in XDE. Remove the line feeds from all of them. (I tried using MakePC to do this and succeeded in removing all the CRs too!) Some files are stored with line feeds, some without. We'll assume no XDE files have line feeds. The *.bat files seem to be an exception - they are often stored with line feeds.
|
||||
|
||||
(6) Assemble and link your Handler code, IOR segment and STK segment files. There should be one unresolved reference, xyzHandlerID. That will be resolved in RAMHands.asm. Make a DF file called "xyzHandlerDove.df" which covers the sources, object files and the final link file (which is an 8 character name something like xyxHndlr.lnk).
|
||||
|
||||
(7.0) Modify AllocSegs.df (note this is called "AllocSegs" and the others are called "AllocSgs"). Add a clause of the form
|
||||
|
||||
Imports [FS6:PARC:Xerox]<ISLDisplay>Display1>DF>xyzHandlerDove.df Of >
|
||||
Using [IORxyz.obj, STKxyz.obj]
|
||||
|
||||
(7.1) Modify the version of AllocSgs.bat you brought over in step 1 so that it pulls over IORxyz.obj and STKoxy.obj (e.g. XFILE RET IORxyz.obj -O). Insert STKxyx.obj into the link command that produces STKSegs.lnk. It must go after STKFlop.obj and before STKEnd.obj. It's safe to put it next to STKCDsp.obj or STKPPO.obj.
|
||||
As a general rule, don't specify directories or particular machines in the command files. That way they can be used by anyone on any machine.
|
||||
|
||||
(7.2) Insert IORxyz.obj into the link command that produces IORSegs.lnk. It must go before IOREnd.obj.
|
||||
|
||||
(7.3) In SegLoc.bat, add the size of the xyzSTK segment to the first parameter in the RS clause of the locate command. The size will be listed in the .mp1 file for your linked handler. For example, for the following SegLoc.bat:
|
||||
|
||||
SS(IORegion(+1C4H)) &
|
||||
PC(PURGE) &
|
||||
RS(13B1H TO 3FFFH) &
|
||||
AD(SM(IOPEINRAM(10000H)))
|
||||
|
||||
the parameter to change is "13B1H" in the RS clause "RS(13B1H TO 3FFFH)". The "+1C4H" allows the IOR to grow from its size in local RAM during booting time to its bigger size in main memory after booting. It won't change. Address 4000H (3FFFH+1) is the start of Main Memory. The 10000H is a screwball way of getting around a bug in the loader that causes it to get upset when it sees 0000. It interpretes 10000H as 00000H (?).
|
||||
|
||||
(8) Edit the RAMHands.asm now on your disk. Add an entry of the form:
|
||||
|
||||
%Handler(xyz,n,PROC,MEMORY)
|
||||
|
||||
where "n" equals the desired number of your HandlerID. Options handler ID's begin at 97. They must be less than 128. So far as I know, the PPO/PSO combination used up 97 and 98. The CDsp color display used 99. Use whatever number is next at the time you add your handler. Remember the number, you'll need to put n-96 into the EEProm later (by hand using the System Configuration Tool).
|
||||
|
||||
At this time, you might want to comment out the PPO handler entries (put a "'" immediately after the "%"). This depends on whether you're going to include the PPOHndlr.lnk file in MEMCode.loc. If not, comment it out in RAMHands (see "To toss a handler" below).
|
||||
|
||||
(9) Run AllocSgs.bat on the PC. It should pull over all the files, do the assembles, links and locs, producing AllocSgs.loc. If your PC stops with "TOO MANY FILES OPEN", add an entry like "FILES=20" to your Config.sys.
|
||||
|
||||
I spent a day finding out that PC-DOS stupidly truncates command lines that are too long. My AllocSgs.bat was producing IORSegs.ln instead of IORSegs.lnk. Watch the lengths of your command lines in ALL the .bat files.
|
||||
|
||||
The Medley version of the DF's do a funny thing. They use the released version of AllocSgs, but make three new batch files, AllocIOR.bat, AllocSegs.bat and AllocSTK.bat. AllocSegs.bat uses the other two as line continuation files. AllocSegs.bat binds up all the IOR and STK segments as AllocSgs.bat, except it puts in IORPSO and STKPSO and takes out IORPPO and STKPPO. Since we must modify RAMHands (=> must run AllocSgs.bat anyway), I just changes AllocSgs.bat so it conformed with AllocSegs.bat. That is, I uncommented the lines that bring over IORPSO.obj and STKPSO.obj; commented the lines that bring over IORPPO.obj and STKPPO.obj and replaced IORPPO.obj and STKPPO.obj with IORPSO.obj and IORPSO.obj respectively in the IORSegs and STKSegs link commands.
|
||||
|
||||
In this step and the steps below, you can pretty safely ignore warnings from the Linker about POSSIBLE OVERLAP in IOPELOCALRAM. Other warnings and error messages should be taken seriously.
|
||||
|
||||
(10) Here's your first looping point. Look at AllocSgs.mp2. Compare it with Perfect.Mp2 (see above). The segment map should start with IOPELOCALRAM, ??SEG, OPIESTK, etc. If it doesn't, the order of the files given to the linker in AllocSgs.bat is wrong. The lask STK entry, ENDSTK, should end at (the address in the RS clause of SegLoc.bat - 1). For example, for the SegLoc.bat given above, the STOP address of ENDSTK should be 013B0H. If the real end address is wrong, adjust the number in SegLoc.bat and loop back to step 9.
|
||||
Next, look at the START address of IOREGION. It should be 04000H. This is really a double check on the number in SegLoc.bat. If IOREGION doesn't start at 4000H, the reserve clause is either too low (STK entries overflowing above 04000H) or too high (IOR entries falling below the reserved space). In either case, fix it and run it again.
|
||||
Finally, look at the STOP address of ENDIOR. This is a bit tricky. In the beginning of Daybreak development, the IORegion was divided in half. The part between 4000H and 8000H was used for handler IOR's. The part from 8000H to C000H was used to hold the image of the code that normally sits in PROM when debugging. This worked fine until the IOR's grew out of the bottom half. DSBU fixed this sometime around the 12.5 release. As of today (12-Jul-88 13:14:44), the AIS folks have sort of half-way changed. Their code assumes the space above 8000H isn't sacred, but they haven't bothered to make room for the PROM image at C000H either. If you have some other way of debugging your handler (like using the released SDD Mesa environment), you can use the standard AIS release. That's what I'm doing for the Medley release. Your Lisp system will not be debuggable if the STOP address of ENDIOR is greater than or equal to 08000H. If you never plan to debug your handler in Lisp, fine. Otherwise, you must start throwing out handlers to make things fit. I tossed the PCE, Parity, TTY, RS232C, PSO and PPO handlers. If AIS has gone to the expanded IOR by the time you're working on this, ENDIOR must STOP at 0C000H.
|
||||
2-Sep-87 17:57:52: Well, there's a bit more to this story. First, as stated in the documentation, RAMCode must fit roughly between 1400H and 4000H. I say roughly because booting tosses some other stuff in there too. Second, MEMCode must fit between ENDIOR and 8000H (current AIS systems that you want to debug) or C000 (current Mesa systems or current AIS systems that you can't debug). Just because ENDIOR is below 8000H, doesn't mean you're done. There's no way to check this here, check it in step 14 below. If things don't fit, you either get to reduce the size of the IORegion (by tossing handlers or using the small version of IOREther.obj) or reduce the size of MEMCode.
|
||||
|
||||
To toss a handler:
|
||||
* Comment out its entry in RAMHands.asm (use the "%'Handler(..." trick).
|
||||
* Remove its STK entry from the list of things linked to form STKSegs.lnk in AllocSgs.bat
|
||||
* Remove its IOR entry from the list of things linked to form IORSegs.lnk in AllocSgs.bat
|
||||
* If the code for the handler lives in IOP local RAM (a "RAM handler"), remove its .lnk file from the list of things linked to produce RAMCode.lnk in RAMCode.bat.
|
||||
* If the code for the handler lives in Main Memory (a "Memory handler"), remove its .lnk file from the list of things linked to produce MEMCode.lnk in MEMCode.bat.
|
||||
|
||||
While we're at it, correlate the entries in RAMHands with those in RAMCode.bat and MEMCode.bat. If a handler is a memory handler (it's linked into MEMCode.lnk), the corresponding entry in RAMHands.asm must end in ",MEMORY)". If the handler is linked into RAMCode.lnk, the entry in RAMHands must end in ",)". This bit me a couple of times. This entry tells the code whether the handler is to be found in main memory or IOP Local RAM. The various PCE code modules are spread between local RAM and Main Memory so unless you really know what you're doing, leave them alone.
|
||||
|
||||
Remember, you must run AllocSgs.bat every time you change RAMHands.asm.
|
||||
|
||||
(11) Since KyMoInit.asm imports the RAMHands.asm you just changed, run KyMoInit.bat on the PC.
|
||||
|
||||
(12) The original RAMMemHandlers.doc said to run RAMOpie.bat at this point. So far as anyone can tell, we haven't changed any of the RAMOpie components, so never mind. However, my version of RAMOpie was built with an old version of STKOpie.obj (see step 1 above) so I had to rebuild it just to get that right. If you have to rebuilt RAMOpie, modify RAMOpie.bat to insert the XFILE and CRLFTool commands as necessary and run it on the PC.
|
||||
|
||||
(13.1) Run RAMCode.bat (modifying it to pull over all the files to the PC and send RAMCode.loc back if necessary). This produces RAMCode.loc. Watch out! The comments in RAMCode.bat had gotten out of touch with the files in RAMCodeI.bat, but you couldn't tell just by looking at RAMCode.bat. If you touch the list of files being linked, remember to retain the order. The order of the linking for RAMcode must be: STKSegs.lnk,IORSegs.lnk,RAMHInit.obj,RAMOpie.lnk,{all the ram handlers in any order}.
|
||||
(13.2) Look at RAMCode.mp2. The same conditions stated in step 10 should apply here (STK segments first, followed by IOREGION at 04000H, ENDIOR not exceeding 08000H or 0C000H depending on what Lisp you're building). RAMCode must fit between ENDSTK and 4000H. That's really not the test since booting is likely to offset the start of RAMCode from ENDSTK, but that's the best you can do for now. In one version of life, the offset was 1450H-13B1H = 9FH.
|
||||
|
||||
My original version of RAMCode.bat had some stuff about Ethernet tasks. That task is in PROM in our machines. The commands were commented out. I deleted them.
|
||||
|
||||
(14.1) Modify MemCodeI.bat, inserting xyxHndlr.lnk in the list somewhere before "TO". Alternately, merge MEMCode.bat and MEMCodeI.bat and do the same thing. Again, be careful of the order of the files being linked. The order of linking for MemCode must be: IOPLRAM.obj,STKSegs.lnk,IORSegs.lnk,MemHInit.obj,GermInit.obj(or lisp equiv), {all the mem handlers in any order}. Add all the XFILE and CRLFTool commands if necessary (see RAMCode.bat on FS6:).
|
||||
(14.2) Run MemCode.bat. This produces MEMCode.loc. Inspect the segment map in MEMCode.mp2, watching the same ENDSTK/IOREGION and ENDIOR boundries. Note that booting will actually put the code for MEMCode (the stuff listed in IOPEInRAM) immediately after ENDIOR. If you're using the old debug setup, MEMCode must fit between ENDIOR and 8000H. If you're using the new setup, MEMCode must fit between ENDIOR and C000H.
|
||||
|
||||
My MEMCode.bat had some stuff about a new KeyHndlr.lnk (as opposed to a KyMoInit.loc thinger, which is different), also commented out. The Keyboard handler code is also in PROM, so I deleted this too.
|
||||
|
||||
(15) Back in XDE (which is where your .bat files have been putting the results of all of your work), run the command file LispDove.cm. This produces LispDove.db. If you get an error message like
|
||||
|
||||
Reading... MEMCode.loc Illegal start address as a switch on .loc file.
|
||||
|
||||
get a newer version of MakeDoveMicroboot.bcd.
|
||||
|
||||
(16) Save the results of your work!! If you're adventurous, ask your favorite Lisp wizard to install the new LispDove.db as Pilot microcode on an 1186 (6085) and go for it! Of course, you can only debug this by watching what happens and staring at your source code. If you want to set breakpoints and stuff, keep reading. Installing your LispDove.db and trying it without your option enabled in the EEPROM (see next step) is certainly a good idea just to see if it is built correctly.
|
||||
|
||||
(17) Modify the EEProm using the System Configuration Tool. You should insert the Handler ID you chose minus 96 into one of the three Universal Options entries, along with whatever options specific data and interrupt vectors you like. Without this, Opie will not start your options code. Zero is not a valid options number. It is useful if you want to run your new Pilot Microcode with the new handler turned off, just to see if you've broken anything.
|
||||
|
||||
(18) Have a good time debugging! I haven't tried this much yet. You'll probably need the image of Opie that's normally in PROM. If you're using the old debugging setup (ROM Image at 8000H), it's on [Huey:OSBU North:Xerox]<APilot>12.0>DoveMicrocode>Private>B2>RAMSysB2.loc. If you're usign the new setup, It's on [Dino:OSBU North:Xerox]<APilot>14.0>DoveMicrocode>Private>B2>RAMSysB2.loc. There's a Bermuda command file called [FS6:PARC:Xerox]<ISLDisplay>Display1>Software>IOP>IOPDebug.bermuda. Besides loading the pieces of your LispDove.db (not the LispDove.db itself, just the individual pieces) and RAMSysB2.loc into memory, they do lots of interesting stuff.
|
||||
|
||||
This is what seems to work for me. Before actually running IOPDebug, manually load all the symbols shown in the commented-out statements. That's because they only need to be loaded once. The first time you do this, you won't have RAMDebug.loc and MEMDebug.loc, but never fear. IOPDebug.bermuda boots the IOP, loads the code for RAMSysB2, turns on main memory and (that's the WriteIO[80,8000];). The write to E01F just fusses with a map register. It doesn't seem to harm anything. Now, the way the initialization code decides whether or not to use the expanded IOR (see step 10 above), is it looks in word 053C. My version of IOPDebug.bermuda writes a 0000H there, telling it not to use fatIOR. If you want fat IOR (the new stuff), write a 4000. Make sure you have the new RAMSysB2.loc if you're using a fat IOR (and not if not).
|
||||
The command file then fusses with starting the initialization code. For this to get any farther, you must already have your LispDove.db and SYSOUT installed on your disk. Note the commented-out breakpoint at DisplayInit+C. The machine blew up when I did this and worked fine when I didn't, so I got rid if it. I'm told this is a sign of having a version of RAMSysB2.loc that doesn't really match the PROMs in the machine. Well, commenting it out seemed to work, I commented it out. The breakpoint IOPE@Restart is in the DiskInitialDove.db code (whose symbols you must already have fetched. DiskBoot.loc can be found from LispDoveIOPIntegration.df). IOPDebug.bermuda sets a breakpoint in DiskInitialDove at location StartRAM after RAMSysB2.loc has pulled DiskInitialDove into memory. StartRAM is where DiskInitialDove is about to jump off into the RAMCode.loc file. Great, right? Well, not exactly. The DiskInitialDove loader ignores all the location information in the RAMCode.loc file so you don't know where RAMCode is yet. DiskInitialDove just loads RAMCode.loc where it fits. Don't ask me how the segment registers get fixed up. Anyway, when we get to the StartRAM breakpoint, the RAMSysB2 file smashes the Cmos display handler (apparently the normal display handler works well enough and the CMOS one tries to use funny address arithmetic that doesn't work since the PROM image isn't where the PROM is), and stops. Without this smash, the booting process gets stuck around 1191 or 1192. If you stop the IOP, CS=0800 and IP = 97xx. That's your clue that the wrong display handler is running. Your task is to single step over the StartRAM instruction. You get to the first instruction in the RAMCode, which is at a label called RAMInitialization. You read the CS register, AND ONLY THE CS REGISTER! That tells you where the IOPEInRAM segment of RAMCode really starts! For example, if your CS register has 0140 in it, IOPEInRAM starts at 1400H. Swell! Now, you go back and use .bat files (thought you were done, huh?) like [BamBam:OSBU North:Xerox]<WMicro>Dove>RAMDebug.bat, RAMDbLc.bat and MEMDbLc.bat to build RAMDebug.loc and MEMDebug.loc. You put the number from CS into the AD(SM(IOPEINRAM(1400H))) line of RAMDbLc.bat. You put the address of ENDIOR (from MEMCode.mp2) into the corresponding line of MemDbLoc.bat. You'll only use the the symbols for these files! Load the symbols, set your breakpoints and go to town.
|
||||
|
||||
|
||||
Good Luck!!
|
||||
|
||||
----------------------------------------------------------------
|
||||
67
docs/internal/BigBitmaps.TEdit
Normal file
67
docs/internal/BigBitmaps.TEdit
Normal file
@@ -0,0 +1,67 @@
|
||||
Subject: A proposed design for big bitmaps (for Maiko Color (aka Kaleidoscope))
|
||||
From: shih:mv:envos
|
||||
|
||||
Here's a proposed design for big bitmaps (for Maiko Color). This message is also filed as BigBitmaps.TEdit, under {Pogo:MV:envos}<DSUNLISP>Documents>Development>Color>, and {Eris}<lispcore>internal>doc>.
|
||||
|
||||
|
||||
There are basically two alternatives, either change allocblock to allow blocks bigger than 65K, or to change bitblt (and perhaps many other functions) to allow a new datatype, BIGBM.
|
||||
|
||||
The following describes the second BIGBM alternative.
|
||||
|
||||
------
|
||||
|
||||
DESIGN MOTIVATION
|
||||
|
||||
The color code currently uses ALLOCPAGEBLOCK to create a non-GC'able large bitmap for the color screen. Windows on that screen, I believe point to that screen bitmap, but Window "backing bitmaps" (the thing that holds what is behind an open window, and what is inside a closed window), is a separate bitmap.
|
||||
|
||||
The problem is that the backing bitmap currently cannot be as big as the window would like it to be.
|
||||
|
||||
The BIGBM design would keep the noncollectible color screen bitmap, but would allow windows to have BIGBM backing bitmaps. In addition, this design is more likely to be portable backwards (e.g. into Medley1.0 or Medley1.1) since no existing system datatypes need to be changed (unlike the plan to change ALLOCBLOCK).
|
||||
|
||||
Since XAIE does not (I believe) allow (currently) DIG operations on closed windows, then there are no DIG operations (except BITBLT) which need to occur on BIGBM backing bitmaps.
|
||||
|
||||
Therefore, a BIGBM need merely be a GC'able datatype which supports BITBLT between itself and all other legal datatypes (principally windows and bitmaps, but possible streams (e.g. Interpress), and possible other datatypes).
|
||||
|
||||
Longer term, having a generalized BITBLT will be useful, for the following reasons:
|
||||
|
||||
Color - 8 bpp bitmaps will begin to push Medley's 32Mb address limitation, and 24 bpp bitmaps certainly will (the screen alone will take up 3Mb = 10% of the address space!).
|
||||
|
||||
Remote Bitmaps - there may be applications which need bitmaps outside of the address space (color above for example). Nick Brigg's Maple color processor for the 1186 had a generalized remote bitblt, which "did the right thing" when source and destination bitmaps were both remte (e.g. remote bitblt).
|
||||
|
||||
XWindow Medley- might require remote bitmaps.
|
||||
|
||||
NonSun Medley - might require remote bitmaps, especially because it is doubtful the SunOS system call MMAP exists elsewhere. When not, the screen itself will need to be remote.
|
||||
|
||||
------
|
||||
|
||||
BIGBM DESIGN
|
||||
|
||||
A straightforward design would be to have a BIGBM simply be a collection of ordinary bitmaps ("slices of the big bitmap"), and then generalize BITBLT to handle the collection (by repeated bitblts).
|
||||
|
||||
More elaborate designs would allow BIGBMs to be a collection of any BitBlt'able objects (streams, windows, bitmaps, bigbitmaps), or perhaps collections of raw blocks (to save some of the BITBLT initialization overhead).
|
||||
|
||||
Probably at least one dimension of the slices should be a multiple of the LCD (least common denominator) of any TEXTURE (currently 16), so that textures do not show seams across the slices.
|
||||
|
||||
Probably also the slices should be "short and fat" (e.g. the BIGBM is made up of several rows of bitmaps), since the ucode inner loop runs in the X direction, but this partially depends on the application.
|
||||
|
||||
For example, font bitmaps are short and *very* wide. If large color fonts need a BIGBM font bitmap, then each character would cut across several slices, slowing down each character. For fonts, column slices might be better. Note that each character is also more "coherent" in memory this way, which might improve paging behaviour.
|
||||
|
||||
Having BIGBMs be composite objects (rather than a large coherent allocblock) might also improve GC behaviour, because a BIGBM can be allocated out fragmented free space. There may not be enough coherent free space to allocate a large allocblock, due to fragmentation.
|
||||
|
||||
Another design elaboration would be to provide full Imagestream capabilities onto BIGBMs, to that (DSPCREATE dest) will work on BIGBMs.
|
||||
|
||||
------
|
||||
|
||||
BIGBM IMPLEMENTATION
|
||||
|
||||
|
||||
There is currently a draft implementation of BIGBMs on {Eris}<lispcore>internal>library>BIGBM. It has several limitations:
|
||||
|
||||
0. It is intended to be a subfunction of BITBLT (which explains the limits 1 & 2 below)
|
||||
1. It doesn't handle clipping (I'm not sure, but clipping might be handled generically in BITBLT by changing the srcex, srcey, destx, desty, width, & height args).
|
||||
2. It doesn't handle default arguments (BitBlt does this).
|
||||
3. It currently only makes the slices 16 bits tall (it should make the slices as big as possible).
|
||||
4. Its not very efficient. It only walks the slices linearly (the first relevent slice could be found by algebra), and it doesn't stop when the last relevent slice is bltted.
|
||||
5. Because of 3 & 4, for large bitmaps its roughly 2x slower than normal bitmap blts. For small bitmaps, it may be much worse. This may be OK though for backing color windows, because color windows are large.
|
||||
|
||||
Mostly, this code needs to be folded into BITBLT & BLTSHADE, at the appropriate spots, and optimized if necessary.
|
||||
BIN
docs/internal/CALL-C-SPEC.TEDIT
Normal file
BIN
docs/internal/CALL-C-SPEC.TEDIT
Normal file
Binary file not shown.
BIN
docs/internal/CHAT-GENERIC.TEDIT
Normal file
BIN
docs/internal/CHAT-GENERIC.TEDIT
Normal file
Binary file not shown.
8
docs/internal/CMLERROR-PROPOSAL.TEDIT
Normal file
8
docs/internal/CMLERROR-PROPOSAL.TEDIT
Normal file
File diff suppressed because one or more lines are too long
BIN
docs/internal/DAYBREAKS.TEDIT
Normal file
BIN
docs/internal/DAYBREAKS.TEDIT
Normal file
Binary file not shown.
454
docs/internal/DIGguide.TEdit
Normal file
454
docs/internal/DIGguide.TEdit
Normal file
File diff suppressed because one or more lines are too long
50
docs/internal/DIRECTORY-ORGANIZATION
Normal file
50
docs/internal/DIRECTORY-ORGANIZATION
Normal file
@@ -0,0 +1,50 @@
|
||||
<LispCore>Good> : used only for LISP.SYSOUT for MAKEINIT bootstrap
|
||||
<LispCore>TR> : used for saving the technical reports for Interlisp-D
|
||||
|
||||
These are part of the 'release', i.e., should contain only part of what we release, and be snapshot when we relese:
|
||||
|
||||
|
||||
LISPCORE>NEXT => Lisp>Harmony>Basics (more or less)
|
||||
LISPCORE>CM => Lisp>Harmony>CM, with rename of internals
|
||||
|
||||
|
||||
These release merely by changing "LISPCORE" to "Lisp>Harmony":
|
||||
|
||||
LispCore>Doc documentation about the release
|
||||
LISPCORE>DLION dlion microcode
|
||||
LISPCORE>DLIONINITIAL>SHUGART>KLAMATH sources for Lisp11SAx000Initial.db
|
||||
LISPCORE>DLIONINITIAL>TRIDENT>KLAMATH sources for Lisp11TriInitial.db
|
||||
LISPCORE>LIBRARY sources, .DCOM and documentation for library
|
||||
LISPCORE>LISPUSERS new versions of LispUsers packages coordinated with Harmony
|
||||
LISPCORE>MASS new version of MicroAssembler, destined to getting back into SDD
|
||||
LISPCORE>MESA
|
||||
LISPCORE>MESASOURCES>* (several subdirectories)
|
||||
LISPCORE>SOURCES
|
||||
LISPCORE>UCODE environment for compiling dolphin/dorado microcode
|
||||
LISPCORE>BCPL environment for making Lisp.RUN for Dolphin/Dorado
|
||||
LISPCORE>DLIONDOMINO sources for domino (8085 code in DLion)
|
||||
LISPCORE>DEMO needs to be cleaned up; some go on LispUsers, some on
|
||||
|
||||
This should be archived and deleted:
|
||||
|
||||
LISPCORE>DLISP Warren Teitelman's DLisp sources
|
||||
|
||||
The following should be cleaned up, moved to other directories, private directories, or deleted:
|
||||
|
||||
LISPCORE>DIG temporary working directory -- clean up when DIG released
|
||||
LISPCORE>DLIONINITIAL>TRIDENT>SIERRA obsolete, archive & delete
|
||||
LISPCORE>DRAWFILES contains a few hacks, can read in with READDRAW and show on iris?
|
||||
LISPCORE>INTERPRESS temporary working directory
|
||||
LISPCORE>MAIL => LISPCORE>INTERNAL>MAIL (??)
|
||||
LISPCORE>MISC I guess some of the other stuff can go here. Need to clean out junk from here
|
||||
LISPCORE>NEW temporary working directory
|
||||
LISPCORE>NEW>ARCHIVE temporary working directory
|
||||
LISPCORE>OLDDOC old documentation files which need to be cleaned up and rewritten, etc.
|
||||
LISPCORE>ONCOCIN was for ONCOCIN demo. Has some files which we may want to import
|
||||
LISPCORE>TEST some old test files
|
||||
LISPCORE>UNKNOWN apropriate name, but should be cleaned up...
|
||||
|
||||
plus any file on <LispCore> not on a subdirectory.
|
||||
|
||||
Some files on <Lisp>Carol>* and <Lisp>Fugue.6>* should be moved forward to <Lisp>Harmony> if they don't appear on LispCore
|
||||
|
||||
BIN
docs/internal/DLD.TEDIT
Normal file
BIN
docs/internal/DLD.TEDIT
Normal file
Binary file not shown.
5
docs/internal/FASLChangeLog.tedit
Normal file
5
docs/internal/FASLChangeLog.tedit
Normal file
@@ -0,0 +1,5 @@
|
||||
Fasl format change log.
|
||||
|
||||
Version 3 (10-Nov-86)
|
||||
Added opcode 149, FASL-INTERLISP-SYMBOL pname(V).
|
||||
Upward compatible with version 2.
|
||||
13
docs/internal/FLOPPY.TEDIT
Normal file
13
docs/internal/FLOPPY.TEDIT
Normal file
File diff suppressed because one or more lines are too long
BIN
docs/internal/HarmonyReleaseMSG.txt
Normal file
BIN
docs/internal/HarmonyReleaseMSG.txt
Normal file
Binary file not shown.
BIN
docs/internal/Hashing-MISCN-ops.TEdit
Normal file
BIN
docs/internal/Hashing-MISCN-ops.TEdit
Normal file
Binary file not shown.
BIN
docs/internal/Hello.tedit
Normal file
BIN
docs/internal/Hello.tedit
Normal file
Binary file not shown.
31
docs/internal/HowToWriteReleaseNotes.tedit
Normal file
31
docs/internal/HowToWriteReleaseNotes.tedit
Normal file
@@ -0,0 +1,31 @@
|
||||
Subject: How to write the release notes
|
||||
To: James
|
||||
cc: Sannella.pa
|
||||
|
||||
How to write a release note for a fixed AR:
|
||||
|
||||
When an AR is fixed, it is important to write a release note for the AR, even if it is just a note saying "Release Note: none needed". There is no better time to do this than when the problem is still fresh in your mind. And there is no better person to do this than the implementer, who knows exactly how important the AR fix is.
|
||||
|
||||
Does this AR affect the next release? There are some ARs which are created and closed during the course of development. However, it is hard to tell just from the text of the AR. It is important to put this information in the AR, so the Release master can tell that it shouldn't be collected. The note "Release Note: Don't release -- development bug" is better than nothing.
|
||||
|
||||
Does this AR affect outside users? If an AR just affects internal users, put a release note "Release Note: Don't release -- internal info" in the AR.
|
||||
|
||||
If there is info in the AR that the outside users should know, compose a release note. It doesn't have to be perfect, but the implementer is in a better position to know what needs to be told than anyone else.
|
||||
|
||||
A single release note item should be talk about one piece of information. If a single AR contains or refers to multiple subjects, compose multiple release notes.
|
||||
|
||||
A release note contains a title, telling the substance of the item. Like AR subjects, the release note title should be short and as informative as possible (think of newspaper headlines). Include as many keywords as possible. For example "* New window functions: FOOBAR, BAZ" is better than "* New window functionality". When documenting bug fixes, try to make the titles "positive", saying "* FOOBAR arguments interpreted correctly" rather than "* Bug fixed where FOOBAR ignored argument".
|
||||
|
||||
When in doubt about whether a bug fix or new feature is worth documenting in the release notes, please document it. It is a lot easier for the release master to throw away information than to write it from scratch.
|
||||
|
||||
-----
|
||||
|
||||
|
||||
How to assemble individual items into the "Release Notes":
|
||||
|
||||
If the individual release note items have been written, the primary job is to sort them by subject and importance, and assemble the big document.
|
||||
|
||||
For the Harmony release, the "topics" were ordered loosely on the importance of the different areas for that release (a lot of changes were made to I/O, fonts, printing, so they came first). This order is not sacred.
|
||||
|
||||
Within each topic area, the items are sorted by importance to the user, a subjective decision. Major new functionality, and incompatible changes obviously want to come first.
|
||||
|
||||
43
docs/internal/ImplManual-DLionDiskDriver.TEdit
Normal file
43
docs/internal/ImplManual-DLionDiskDriver.TEdit
Normal file
File diff suppressed because one or more lines are too long
152
docs/internal/ImplManual.TEdit
Normal file
152
docs/internal/ImplManual.TEdit
Normal file
File diff suppressed because one or more lines are too long
42
docs/internal/InstallLisp.doc
Normal file
42
docs/internal/InstallLisp.doc
Normal file
@@ -0,0 +1,42 @@
|
||||
InstallLisp.doc --- Lichtenberg.wbst, Masinter.PA 8-Jan-85 07:12
|
||||
|
||||
This is a tool for those who use both Interlisp-D and XDE. It is similar to Install and friends, except that it is used for installing Interlisp-D virtual memory image files. (For more details about running Interlisp-D at Xerox, contact LispSupport.PA; it requires a DLion with at least 1.5 MB of memory and at least 13000 free pages in a single volume. You must install new Initial microcode Lisp11sax000Initial.db before running Interlisp.)
|
||||
|
||||
The syntax is:
|
||||
|
||||
InstallLisp volumeName _ fileName/switches
|
||||
|
||||
volumeName is the name of the volume that you want the Lisp installed on; fileName is the name of the source file, which may be either local or remote. Switches may be one or more of the following:
|
||||
|
||||
/d - set to default boot-lisp (the lisp that will be run when 0-booted)
|
||||
/s - start the lisp after installation
|
||||
/x - expand file to fill volume (you should always do this)
|
||||
|
||||
To combine switches, do not duplicate the slashes. (to specify all switches, use /dsx).
|
||||
An alternative command format,
|
||||
|
||||
> InstallLisp volumeName/switches
|
||||
|
||||
allows one to apply the switches to the file that is already on a volume.
|
||||
|
||||
Examples:
|
||||
|
||||
>InstallLisp User _ [eris]<Lisp>Harmony>Basics>Full.sysout/xs
|
||||
|
||||
Bring over and install Interlisp on the User volume, and boot it when done.
|
||||
|
||||
>InstallLisp Lisp _ Lisp.sysout/XS
|
||||
|
||||
if you keep a copy in Tajo
|
||||
|
||||
> InstallLisp Lisp _ [Eris]<Lisp>Harmony>Basics>Full.sysout
|
||||
|
||||
will install the "Harmony" release, as will
|
||||
|
||||
> InstallLisp Lisp _ [Phylex:PARC:Xerox]<Lisp>Harmony>Basics>Full.Sysout
|
||||
|
||||
> InstallLisp User/s
|
||||
|
||||
will merely start the Lisp which was installed on the "User" volume.
|
||||
|
||||
|
||||
205
docs/internal/LIBRARY-DIFFERENCES.12-NOV-85
Normal file
205
docs/internal/LIBRARY-DIFFERENCES.12-NOV-85
Normal file
@@ -0,0 +1,205 @@
|
||||
_COMPAREDIRECTORIES(CORE>LIBRARY> >KOTO>LIBRARY>]
|
||||
Core>library>4045STREAM.;15[ 7-Nov-85 14:48:09/jellinek.pa] newer than >KOTO>LIBRARY>4045STREAM.;2[ 3-Oct-85 14:08:17].
|
||||
Core>library>4045STREAM.DCOM;14[ 7-Nov-85 14:49:10/jellinek.pa] newer than >KOTO>LIBRARY>4045STREAM.DCOM;2[ 3-Oct-85 14:09:53].
|
||||
Core>library>BUSTEST.;1[18-Sep-85 03:26:40/Purcell.pa], not found.
|
||||
Core>Library>BUSTEST.DCOM;1[28-Sep-85 17:44:36/Purcell.pa], not found.
|
||||
Core>library>BUSTEST.TEDIT;1[18-Sep-85 04:10:19/Purcell.pa], not found.
|
||||
Core>LIBRARY>C150STREAM.;9[ 7-Nov-85 23:45:02/NUYENS.pa] newer than >KOTO>LIBRARY>C150STREAM.;2[ 4-Oct-85 12:55:37].
|
||||
Core>LIBRARY>C150STREAM.DCOM;9[ 7-Nov-85 23:54:27/NUYENS.pa] newer than >KOTO>LIBRARY>C150STREAM.DCOM;2[ 4-Oct-85 12:56:58].
|
||||
Core>LIBRARY>c150stream.tedit;3[ 4-Oct-85 14:48:55/Jellinek.pa] newer than >KOTO>LIBRARY>C150STREAM.TEDIT;1[ 5-Sep-85 14:35:24].
|
||||
Core>LIBRARY>CENTRONICS.;4[ 8-Nov-85 14:08:03/JELLINEK.pa] newer than >KOTO>LIBRARY>CENTRONICS.;1[ 4-Sep-85 18:41:25].
|
||||
Core>LIBRARY>CENTRONICS.DCOM;4[ 8-Nov-85 14:08:19/JELLINEK.pa] newer than >KOTO>LIBRARY>CENTRONICS.DCOM;1[ 4-Sep-85 18:41:35].
|
||||
Core>library>centronics-port.tedit;1[23-Sep-85 17:39:48/jellinek.pa], not found.
|
||||
Core>LIBRARY>CHAT.TEDIT;4[20-Sep-85 17:09:39/SCHOEN.pa], not found.
|
||||
Core>LIBRARY>CML.;12[ 4-Nov-85 20:31:16/Fischer.pa] newer than >KOTO>LIBRARY>CML.;1[ 6-Sep-85 22:47:20].
|
||||
Core>LIBRARY>CML.DCOM;5[25-Oct-85 15:55:06/Fischer.pa] newer than >KOTO>LIBRARY>CML.DCOM;1[ 6-Sep-85 22:47:29].
|
||||
Core>LIBRARY>CML.IP;1[ 3-Oct-85 15:37:30/FISCHER.pa], not found.
|
||||
Core>library>cml.tedit;53[ 3-Oct-85 03:42:00/Fischer.pa] newer than >KOTO>LIBRARY>CML.TEDIT;2[15-Sep-85 16:51:00].
|
||||
Core>LIBRARY>CMLARITH.;9[11-Nov-85 16:11:46/FISCHER.pa] newer than >KOTO>LIBRARY>CMLARITH.;1[ 5-Sep-85 02:58:55].
|
||||
Core>LIBRARY>CMLARITH.DCOM;9[11-Nov-85 16:13:12/FISCHER.pa] newer than >KOTO>LIBRARY>CMLARITH.DCOM;1[ 5-Sep-85 02:59:25].
|
||||
Core>LIBRARY>CMLARRAY.;71[11-Nov-85 21:43:37/Fischer.pa] newer than >KOTO>LIBRARY>CMLARRAY.;8[16-Oct-85 14:59:41].
|
||||
Core>LIBRARY>CMLARRAY.DCOM;65[11-Nov-85 21:47:31/Fischer.pa] newer than >KOTO>LIBRARY>CMLARRAY.DCOM;8[16-Oct-85 15:02:00].
|
||||
Core>LIBRARY>CMLARRAY.TEDIT;23[26-Sep-85 03:28:59/FISCHER.pa] newer than >KOTO>LIBRARY>CMLARRAY.TEDIT;3[14-Sep-85 03:56:41].
|
||||
Core>LIBRARY>CMLARRAYINSPECTOR.;3[13-Oct-85 17:03:07/FISCHER.pa] newer than >KOTO>LIBRARY>CMLARRAYINSPECTOR.;1[ 8-Aug-85 01:03:48].
|
||||
Core>LIBRARY>CMLARRAYINSPECTOR.DCOM;3[13-Oct-85 17:05:51/FISCHER.pa] newer than >KOTO>LIBRARY>CMLARRAYINSPECTOR.DCOM;1[ 8-Aug-85 01:04:35].
|
||||
Core>LIBRARY>CMLCHARACTER.;18[28-Oct-85 21:29:14/masinter.pa] newer than >KOTO>LIBRARY>CMLCHARACTER.;2[16-Oct-85 17:33:50].
|
||||
Core>LIBRARY>CMLCHARACTER.DCOM;15[28-Oct-85 21:29:36/masinter.pa] newer than >KOTO>LIBRARY>CMLCHARACTER.DCOM;2[16-Oct-85 17:34:08].
|
||||
Core>LIBRARY>CMLDEFMACRO.;2[31-Aug-85 17:50:01/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLDEFMACRO.DCOM;1[31-Aug-85 17:50:26/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLDEFSTRUCT.;8[ 1-Sep-85 23:36:54/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLDEFSTRUCT.DCOM;3[ 1-Sep-85 23:43:26/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLDEVELOPMENT.;18[ 2-Sep-85 00:21:32/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLDEVELOPMENT.DCOM;10[ 2-Sep-85 00:22:04/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLEVAL.;15[31-Aug-85 15:51:38/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLEVAL.DCOM;3[31-Aug-85 15:51:56/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLEXEC.;10[ 8-Nov-85 14:05:17/Masinter.pa] newer than >KOTO>LIBRARY>CMLEXEC.;3[17-Oct-85 18:19:29].
|
||||
Core>LIBRARY>CMLEXEC.DCOM;10[ 8-Nov-85 14:10:27/Masinter.pa] newer than >KOTO>LIBRARY>CMLEXEC.DCOM;3[17-Oct-85 18:19:41].
|
||||
Core>LIBRARY>CMLFLOATARRAY.;8[24-Oct-85 16:16:19/Fischer.pa] newer than >KOTO>LIBRARY>CMLFLOATARRAY.;3[30-Sep-85 14:56:02].
|
||||
Core>LIBRARY>CMLFLOATARRAY.DCOM;10[24-Oct-85 16:18:39/Fischer.pa] newer than >KOTO>LIBRARY>CMLFLOATARRAY.DCOM;2[30-Sep-85 14:57:25].
|
||||
Core>LIBRARY>CMLFLOATARRAY.TEDIT;8[30-Sep-85 14:52:51/Fischer.pa] newer than >KOTO>LIBRARY>CMLFLOATARRAY.TEDIT;1[ 8-Sep-85 21:36:13].
|
||||
Core>LIBRARY>CMLFORMAT.;6[ 1-Sep-85 20:19:36/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLHASH.;1[ 7-Oct-85 15:54:36/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLKBRSTRING.;3[ 7-Oct-85 12:13:41/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLLIST.;4[31-Aug-85 20:21:18/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLLIST.DCOM;4[31-Aug-85 20:21:45/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLLMMSEQ.;1[ 1-Aug-85 16:36:09/MASINTER.pa], not found.
|
||||
Core>LIBRARY>CMLLMMSEQ.DCOM;1[ 1-Aug-85 21:48:49/MASINTER.pa], not found.
|
||||
Core>LIBRARY>CMLMACROS.;12[ 1-Sep-85 21:06:06/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLMACROS.DCOM;6[ 1-Sep-85 21:07:22/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLMISC.;1[31-Aug-85 21:58:16/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLMISC.DCOM;1[31-Aug-85 21:58:27/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLOPT.;1[14-Aug-85 14:51:04/Masinter.pa], not found.
|
||||
Core>LIBRARY>CMLPACKAGE.;2[ 1-Sep-85 21:52:45/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLPATHNAME.;3[31-Aug-85 22:10:00/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLPATHNAME.DCOM;1[31-Aug-85 22:10:16/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLPRED.;3[ 1-Sep-85 21:00:31/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLPRED.DCOM;2[ 1-Sep-85 21:00:45/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLREAD.;7[ 6-Nov-85 17:12:28/Fischer.pa], not found.
|
||||
Core>LIBRARY>CMLREAD.DCOM;6[ 6-Nov-85 17:12:42/Fischer.pa], not found.
|
||||
Core>LIBRARY>CMLSEQ.;5[ 1-Sep-85 21:01:05/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLSEQ.DCOM;4[ 7-Oct-85 12:35:54/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLSETF.;4[ 2-Oct-85 16:06:29/FISCHER.pa] newer than >KOTO>LIBRARY>CMLSETF.;1[ 6-Aug-85 18:47:49].
|
||||
Core>LIBRARY>CMLSETF.DCOM;2[ 2-Oct-85 16:06:40/FISCHER.pa] newer than >KOTO>LIBRARY>CMLSETF.DCOM;1[ 6-Aug-85 18:48:00].
|
||||
Core>LIBRARY>CMLSPECIALFORMS.;71[ 7-Nov-85 18:18:22/Fischer.pa] newer than >KOTO>LIBRARY>CMLSPECIALFORMS.;6[23-Oct-85 11:50:15].
|
||||
Core>LIBRARY>CMLSPECIALFORMS.DCOM;69[ 7-Nov-85 18:21:35/Fischer.pa] newer than >KOTO>LIBRARY>CMLSPECIALFORMS.DCOM;6[23-Oct-85 11:53:32].
|
||||
Core>LIBRARY>CMLSTRING.;4[10-Sep-85 21:28:02/FISCHER.pa], not found.
|
||||
Core>library>CMLSTRING.DCOM;4[10-Sep-85 21:28:13/FISCHER.pa], not found.
|
||||
Core>LIBRARY>CMLSTRUCT.;9[ 8-Nov-85 17:26:52/Kahn.PA] newer than >KOTO>LIBRARY>CMLSTRUCT.;1[ 5-Sep-85 02:57:36].
|
||||
Core>LIBRARY>CMLSTRUCT.DCOM;7[ 4-Nov-85 21:01:28/Fischer.pa] newer than >KOTO>LIBRARY>CMLSTRUCT.DCOM;1[ 5-Sep-85 02:58:04].
|
||||
Core>LIBRARY>CMLSYMBOL.;4[29-Aug-85 17:12:36/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLSYMBOL.DCOM;2[29-Aug-85 17:13:10/ROACH.pa], not found.
|
||||
Core>LIBRARY>CMLTYPES.;19[12-Nov-85 14:58:08/FISCHER.pa] newer than >KOTO>LIBRARY>CMLTYPES.;3[26-Sep-85 03:34:07].
|
||||
Core>LIBRARY>CMLTYPES.DCOM;18[12-Nov-85 15:00:19/FISCHER.pa] newer than >KOTO>LIBRARY>CMLTYPES.DCOM;3[26-Sep-85 03:34:21].
|
||||
Core>LIBRARY>COLOR.;5[30-Oct-85 11:56:08/Nuyens.pa] newer than >KOTO>LIBRARY>COLOR.;1[ 2-Jul-85 12:13:58].
|
||||
Core>LIBRARY>COLOR.DCOM;5[30-Oct-85 11:57:34/Nuyens.pa] newer than >KOTO>LIBRARY>COLOR.DCOM;1[ 2-Jul-85 12:14:33].
|
||||
Core>LIBRARY>COLORNNGS.;8[20-May-85 18:53:59/ROACH.pa], not found.
|
||||
Core>LIBRARY>COLORNNGS.DCOM;4[20-May-85 18:57:22/ROACH.pa], not found.
|
||||
Core>library>DANDELIONKEYBOARDS.;2[ 6-Nov-85 05:22:20/sybalsky.pa] newer than >KOTO>LIBRARY>DANDELIONKEYBOARDS.;1[15-Aug-85 12:54:43].
|
||||
Core>LIBRARY>DANDELIONUFO.;13[ 9-Apr-85 18:13:08/jellinek.pa], not found.
|
||||
Core>LIBRARY>DANDELIONUFO.DCOM;15[ 9-Apr-85 18:13:42/jellinek.pa], not found.
|
||||
Core>library>dandelionufo.tedit;1[ 6-Dec-84 14:03:15/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>DANDELIONUFO4096.;6[ 8-Mar-85 11:12:41/jellinek.pa], not found.
|
||||
Core>LIBRARY>DANDELIONUFO4096.DCOM;6[ 8-Mar-85 11:13:22/jellinek.pa], not found.
|
||||
Core>LIBRARY>DAYBREAKKEYBOARDS.;1[12-Nov-85 14:27:45/sybalsky.pa], not found.
|
||||
Core>LIBRARY>DICOLOR.;2[15-Aug-85 19:45:04/nuyens.pa], not found.
|
||||
Core>LIBRARY>DICOLOR.DCOM;2[15-Aug-85 19:45:53/nuyens.pa], not found.
|
||||
Core>LIBRARY>DINFO.;6[10-Nov-85 17:48:47/cutting.pa] newer than >KOTO>LIBRARY>DINFO.;2[13-Sep-85 16:58:15].
|
||||
Core>LIBRARY>DINFO.DCOM;6[10-Nov-85 17:49:19/cutting.pa] newer than >KOTO>LIBRARY>DINFO.DCOM;2[13-Sep-85 16:59:43].
|
||||
Core>LIBRARY>DINFO.INIT;1[13-Sep-85 17:15:15/CUTTING.pa], not found.
|
||||
Core>LIBRARY>dinfo.tedit;5[10-Nov-85 15:15:16/cutting.pa] newer than >KOTO>LIBRARY>DINFO.TEDIT;1[13-Sep-85 16:51:01].
|
||||
Core>LIBRARY>DLTTY.;12[12-Nov-85 18:56:24/Schoen.pa] newer than >KOTO>LIBRARY>DLTTY.;3[29-Oct-85 13:59:17].
|
||||
Core>LIBRARY>DLTTY.DCOM;11[12-Nov-85 18:57:06/Schoen.pa] newer than >KOTO>LIBRARY>DLTTY.DCOM;3[29-Oct-85 14:00:00].
|
||||
Core>LIBRARY>DORADOKEYBOARDS.;1[12-Nov-85 14:29:48/sybalsky.pa], not found.
|
||||
Core>LIBRARY>EDITBITMAP.;2[11-Oct-85 16:18:55/blum.pa] newer than >KOTO>LIBRARY>EDITBITMAP.;1[24-Jul-84 18:20:50].
|
||||
Core>LIBRARY>EDITBITMAP.DCOM;2[11-Oct-85 16:22:38/blum.pa] newer than >KOTO>LIBRARY>EDITBITMAP.DCOM;1[24-Jul-84 18:21:05].
|
||||
Core>LIBRARY>EDITBITMAP.tedit;2[24-Sep-85 10:51:48/blum.pa] newer than >KOTO>LIBRARY>EDITBITMAP.TEDIT;1[ 6-Jun-85 20:37:30].
|
||||
Core>LIBRARY>EDITMARK.;3[ 2-Apr-85 11:26:44/burton.pa], not found.
|
||||
Core>LIBRARY>EDITMARK.DCOM;2[ 2-Apr-85 11:27:42/burton.pa], not found.
|
||||
Core>LIBRARY>editmark.tedit;5[ 8-Apr-85 16:21:27/Burton.pa], not found.
|
||||
Core>LIBRARY>ETHERRECORDS.TEDIT;1[ 6-Oct-85 15:10:03/vanMelle.pa], not found.
|
||||
Core>LIBRARY>EVALSERVER.;1[ 2-Jan-85 12:09:10/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>EVALSERVER.DCOM;1[ 2-Jan-85 12:11:05/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>EVALSERVER.TTY;1[17-Feb-84 09:40:59/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>EXPORTS.ALL;50[20-Sep-85 21:01:49/nuyens.pa] older than >KOTO>LIBRARY>EXPORTS.ALL;3[16-Oct-85 11:44:01].
|
||||
Core>LIBRARY>FASTFX80STREAM.;5[ 5-Nov-85 20:05:16/jellinek.pa] newer than >KOTO>LIBRARY>FASTFX80STREAM.;2[ 3-Oct-85 16:43:47].
|
||||
Core>LIBRARY>FASTFX80STREAM.DCOM;4[ 5-Nov-85 20:05:36/jellinek.pa] newer than >KOTO>LIBRARY>FASTFX80STREAM.DCOM;2[ 3-Oct-85 16:44:25].
|
||||
Core>LIBRARY>FILEBROWSER.;49[20-Oct-85 18:18:43/vanMelle.pa] newer than >KOTO>LIBRARY>FILEBROWSER.;2[28-Sep-85 22:55:55].
|
||||
Core>LIBRARY>FILEBROWSER.DCOM;48[20-Oct-85 18:19:22/vanMelle.pa] newer than >KOTO>LIBRARY>FILEBROWSER.DCOM;2[28-Sep-85 22:56:13].
|
||||
Core>LIBRARY>FILECACHE.;13[ 6-Nov-85 16:11:39/Masinter.pa] newer than >KOTO>LIBRARY>FILECACHE.;3[19-Sep-85 15:28:45].
|
||||
Core>LIBRARY>FILECACHE.DCOM;11[ 6-Nov-85 17:49:09/Masinter.pa] newer than >KOTO>LIBRARY>FILECACHE.DCOM;2[19-Sep-85 15:31:02].
|
||||
Core>LIBRARY>FILECACHE.TEDIT;1[11-Sep-85 15:13:15/Masinter.pa], not found.
|
||||
Core>LIBRARY>FILENAMES.;1[12-Mar-85 14:02:35/James.pa], not found.
|
||||
Core>LIBRARY>FILENAMES.DCOM;1[12-Mar-85 14:03:32/James.pa], not found.
|
||||
Core>LIBRARY>FILESTUFF.DCOM;1[11-Nov-85 14:47:49/FISCHER.pa], not found.
|
||||
Core>LIBRARY>FLOATARRAY.DCOM;1[27-Mar-85 08:10:59/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>FLOATARRAY.TEDIT;5[ 1-Apr-85 17:45:25/Masinter.pa], not found.
|
||||
Core>LIBRARY>FREEMENU.;15[ 3-Oct-85 18:03:20/Wozencraft.pa] newer than >KOTO>LIBRARY>FREEMENU.;1[ 7-Sep-85 23:17:27].
|
||||
Core>LIBRARY>FREEMENU.DCOM;17[ 3-Oct-85 18:04:50/Wozencraft.pa] newer than >KOTO>LIBRARY>FREEMENU.DCOM;1[ 7-Sep-85 23:18:17].
|
||||
Core>LIBRARY>GRAPHER.;49[30-Sep-85 09:06:35/KAPLAN.PA] newer than >KOTO>LIBRARY>GRAPHER.;1[ 9-Jun-85 22:54:47].
|
||||
Core>LIBRARY>GRAPHER.DCOM;55[30-Sep-85 09:07:56/KAPLAN.PA] newer than >KOTO>LIBRARY>GRAPHER.DCOM;1[ 9-Jun-85 22:59:02].
|
||||
Core>LIBRARY>HASH.TEDIT;3[ 4-Oct-85 17:03:59/sybalsky.pa], not found.
|
||||
Core>LIBRARY>HELPSYS.TEDIT;2[ 9-Nov-85 20:53:53/cutting.pa] newer than >KOTO>LIBRARY>HELPSYS.TEDIT;1[11-Sep-85 12:44:59].
|
||||
Core>LIBRARY>HRULE.DATABASE;2[17-Oct-85 11:48:47/sybalsky.pa], not found.
|
||||
Core>LIBRARY>HRULE.TEDIT;2[30-Sep-85 16:16:34/sybalsky.pa], not found.
|
||||
Core>LIBRARY>IMAGEIO.DCOM;1[20-Jul-85 00:01:04/MASINTER.pa], not found.
|
||||
Core>LIBRARY>IRM.DINFOGRAPH;1[ 9-Nov-85 17:02:37/Cutting.pa] newer than >KOTO>LIBRARY>IRM.DINFOGRAPH;1[17-Oct-85 22:43:18].
|
||||
Core>LIBRARY>IRMTOP.TXT;1[13-Sep-85 17:41:32/Cutting.pa], not found.
|
||||
Core>LIBRARY>KERMITMENU.;12[12-Nov-85 19:52:07/Schoen.pa] newer than >KOTO>LIBRARY>KERMITMENU.;3[ 7-Oct-85 09:54:12].
|
||||
Core>LIBRARY>KERMITMENU.DCOM;12[12-Nov-85 19:52:45/Schoen.pa] newer than >KOTO>LIBRARY>KERMITMENU.DCOM;4[ 7-Oct-85 09:54:54].
|
||||
Core>LIBRARY>KEYBOARDEDITOR.TEDIT;8[ 5-Oct-85 11:21:43/sybalsky.pa], not found.
|
||||
Core>LIBRARY>KINETIC.;1[ 1-Jun-82 16:34:51/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>KINETIC.DCOM;1[ 1-Jun-82 16:35:02/Lichtenberg.pa], not found.
|
||||
Core>library>LispLibrary.tty;1[22-Aug-84 09:42:36/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>LISTEN.;3[ 8-Nov-85 14:02:16/Masinter.pa] newer than >KOTO>LIBRARY>LISTEN.;2[14-Oct-85 18:21:26].
|
||||
Core>LIBRARY>LISTEN.DCOM;3[ 8-Nov-85 14:02:40/Masinter.pa] newer than >KOTO>LIBRARY>LISTEN.DCOM;2[14-Oct-85 18:21:40].
|
||||
Core>LIBRARY>LISTEN.TEDIT;2[14-Oct-85 18:20:11/FISCHER.pa], not found.
|
||||
Core>LIBRARY>MAKEDIR.;1[11-Nov-83 17:47:16/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>MAKEDIR.DCOM;1[11-Nov-83 17:49:12/Lichtenberg.pa], not found.
|
||||
Core>library>matmult.tedit;3[15-Oct-85 14:38:55/jellinek.pa], not found.
|
||||
Core>LIBRARY>MATRIXUSE.TEDIT;2[ 4-Jun-85 12:36:37/Jellinek.pa], not found.
|
||||
Core>LIBRARY>MINISERVE.TEDIT;1[ 6-Oct-85 15:30:26/vanMelle.pa], not found.
|
||||
Core>LIBRARY>MSHASH.;5[ 6-Jun-85 17:02:21/Nuyens.pa], not found.
|
||||
Core>LIBRARY>MSHASH.DCOM;9[ 6-Jun-85 17:03:59/Nuyens.pa], not found.
|
||||
Core>LIBRARY>MSHASHSYSTEM.;4[28-Jan-85 05:01:46/nuyens.pa], not found.
|
||||
Core>LIBRARY>NEWMATMULT.;1[ 4-Jun-85 12:48:17/Jellinek.pa], not found.
|
||||
Core>LIBRARY>NEWMATMULT.DCOM;1[ 4-Jun-85 12:50:14/Jellinek.pa], not found.
|
||||
Core>LIBRARY>newmatmult.tedit;1[ 4-Jun-85 12:53:49/Jellinek.pa], not found.
|
||||
Core>LIBRARY>NSCHAT.;9[23-Oct-85 14:32:37/Schoen.pa] newer than >KOTO>LIBRARY>NSCHAT.;1[10-Aug-85 00:26:50].
|
||||
Core>LIBRARY>NSCHAT.DCOM;9[23-Oct-85 14:33:12/Schoen.pa] newer than >KOTO>LIBRARY>NSCHAT.DCOM;1[10-Aug-85 00:27:25].
|
||||
Core>LIBRARY>NSMAINTAIN.;24[23-Sep-85 23:32:59/MASINTER.pa] newer than >KOTO>LIBRARY>NSMAINTAIN.;1[ 6-Sep-85 22:45:33].
|
||||
Core>LIBRARY>NSMAINTAIN.DCOM;17[23-Sep-85 23:33:51/MASINTER.pa] newer than >KOTO>LIBRARY>NSMAINTAIN.DCOM;1[ 6-Sep-85 22:46:12].
|
||||
Core>LIBRARY>NSTOASCIIDISPLAYFONT.;7[26-Feb-85 10:13:21/KAPLAN.PA], not found.
|
||||
Core>LIBRARY>NSTOASCIIDISPLAYFONT.DCOM;7[26-Feb-85 10:13:43/KAPLAN.PA], not found.
|
||||
Core>LIBRARY>PAGEHOLD.;4[19-Jul-85 12:00:41/vanMelle.pa], not found.
|
||||
Core>LIBRARY>PAGEHOLD.DCOM;4[19-Jul-85 12:04:17/vanMelle.pa], not found.
|
||||
Core>LIBRARY>PAGEHOLD.TEDIT;1[13-Dec-84 04:30:57/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>PCE.;7[ 3-Nov-85 08:55:28/purcell.pa], not found.
|
||||
Core>LIBRARY>PCE.DCOM;4[31-Oct-85 20:15:17/Schoen.pa], not found.
|
||||
Core>Library>PCMEMTEST.;1[29-Sep-85 18:11:50/Purcell.pa], not found.
|
||||
Core>Library>PCMEMTEST.DCOM;1[29-Sep-85 18:50:08/Purcell.pa], not found.
|
||||
Core>Library>PCMEMTEST.TEDIT;1[18-Sep-85 06:53:16/Purcell.pa], not found.
|
||||
Core>LIBRARY>PIXELBLT.;2[30-Sep-85 11:44:38/jellinek.pa], not found.
|
||||
Core>LIBRARY>PIXELBLT.DCOM;2[30-Sep-85 11:44:51/jellinek.pa], not found.
|
||||
Core>LIBRARY>PIXELBLT.TEDIT;4[30-Sep-85 12:40:48/jellinek.pa], not found.
|
||||
Core>LIBRARY>PLURAL.;7[16-Dec-84 17:27:22/jonl.pa], not found.
|
||||
Core>LIBRARY>PLURAL.DCOM;7[16-Dec-84 17:27:30/jonl.pa], not found.
|
||||
Core>library>PLURAL.TEDIT;1[13-Dec-84 04:21:30/Lichtenberg.pa], not found.
|
||||
Core>library>Press.im;2[25-Jul-85 16:44:59/Sannella.pa], not found.
|
||||
Core>LIBRARY>PRINTER.TTY;1[22-Jul-83 16:31:32/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>PUPIDSERVER.;1[12-Jun-84 17:01:36/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>PUPIDSERVER.DCOM;1[12-Jun-84 17:01:50/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>PUPIDSERVER.TXT;1[ 9-Aug-83 10:00:15/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>RAID.DCOM;1[11-Nov-85 14:46:04/FISCHER.pa], not found.
|
||||
Core>LIBRARY>RS232CMENU.;10[12-Nov-85 19:12:26/Schoen.pa] newer than >KOTO>LIBRARY>RS232CMENU.;3[ 8-Sep-85 18:46:41].
|
||||
Core>LIBRARY>RS232CMENU.DCOM;10[12-Nov-85 19:12:46/Schoen.pa] newer than >KOTO>LIBRARY>RS232CMENU.DCOM;3[ 8-Sep-85 18:47:06].
|
||||
Core>LIBRARY>SINGLEFILEINDEX.;28[27-Feb-85 09:20:32/KAPLAN.PA], not found.
|
||||
Core>LIBRARY>SINGLEFILEINDEX.DCOM;28[27-Feb-85 09:21:40/KAPLAN.PA], not found.
|
||||
Core>library>SINGLEFILEINDEX.Tedit;1[17-May-84 01:48:21/Lichtenberg.pa], not found.
|
||||
Core>LIBRARY>SKETCHSTREAM.;3[31-Oct-85 09:35:21/Burton.pa] newer than >KOTO>LIBRARY>SKETCHSTREAM.;1[ 5-Oct-85 09:51:42].
|
||||
Core>LIBRARY>SKETCHSTREAM.DCOM;3[31-Oct-85 09:35:40/Burton.pa] newer than >KOTO>LIBRARY>SKETCHSTREAM.DCOM;2[ 5-Oct-85 09:51:56].
|
||||
Core>Library>TABLEBROWSER.;3[20-Oct-85 18:19:57/vanMelle.pa] newer than >KOTO>LIBRARY>TABLEBROWSER.;1[19-Sep-85 16:50:40].
|
||||
Core>Library>TABLEBROWSER.DCOM;3[20-Oct-85 18:20:09/vanMelle.pa] newer than >KOTO>LIBRARY>TABLEBROWSER.DCOM;1[19-Sep-85 16:51:13].
|
||||
Core>Library>TABLEBROWSERDECLS.;1[18-Sep-85 19:10:58/vanMelle.pa], not found.
|
||||
Core>LIBRARY>TCP.;17[15-Sep-85 23:35:13/Schoen.pa] newer than >KOTO>LIBRARY>TCP.;1[22-Jun-85 03:23:57].
|
||||
Core>LIBRARY>TCP.DCOM;19[15-Sep-85 23:37:22/Schoen.pa] newer than >KOTO>LIBRARY>TCP.DCOM;1[22-Jun-85 03:25:23].
|
||||
Core>LIBRARY>TCP.TEDIT;10[27-Sep-85 10:23:55/schoen.pa] newer than >KOTO>LIBRARY>TCP.TEDIT;1[ 8-Sep-85 23:01:37].
|
||||
Core>LIBRARY>TCPFTP.;36[ 9-Nov-85 14:43:50/Schoen.pa] newer than >KOTO>LIBRARY>TCPFTP.;2[11-Oct-85 13:50:23].
|
||||
Core>LIBRARY>TCPFTP.DCOM;37[ 9-Nov-85 14:44:34/Schoen.pa] newer than >KOTO>LIBRARY>TCPFTP.DCOM;1[19-Aug-85 12:08:01].
|
||||
Core>LIBRARY>TCPTFTP.;18[15-Sep-85 17:56:49/Schoen.pa], not found.
|
||||
Core>LIBRARY>TEDIT.;46[11-Oct-85 18:55:19/SYBALSKY.pa] newer than >KOTO>LIBRARY>TEDIT.;4[ 3-Oct-85 17:54:26].
|
||||
Core>LIBRARY>TEDIT.DCOM;50[11-Oct-85 18:56:53/SYBALSKY.pa] newer than >KOTO>LIBRARY>TEDIT.DCOM;4[ 3-Oct-85 17:56:02].
|
||||
Core>LIBRARY>TEDITCHAT.;4[12-Nov-85 19:53:44/Schoen.pa] newer than >KOTO>LIBRARY>TEDITCHAT.;1[ 4-Sep-85 18:54:14].
|
||||
Core>LIBRARY>TEDITCHAT.DCOM;4[12-Nov-85 19:54:27/Schoen.pa] newer than >KOTO>LIBRARY>TEDITCHAT.DCOM;1[ 4-Sep-85 18:54:35].
|
||||
Core>LIBRARY>TEDITHCPY.;43[11-Oct-85 18:42:11/SYBALSKY.pa] newer than >KOTO>LIBRARY>TEDITHCPY.;3[25-Sep-85 17:09:34].
|
||||
Core>LIBRARY>TEDITHCPY.DCOM;44[11-Oct-85 18:43:58/SYBALSKY.pa] newer than >KOTO>LIBRARY>TEDITHCPY.DCOM;3[25-Sep-85 17:10:16].
|
||||
Core>LIBRARY>TEDITKEY.;1[ 9-Oct-85 22:11:29/nuyens.pa], not found.
|
||||
Core>LIBRARY>TEDITWINDOW.;50[11-Oct-85 18:21:02/SYBALSKY.pa] newer than >KOTO>LIBRARY>TEDITWINDOW.;5[ 8-Oct-85 16:40:52].
|
||||
Core>LIBRARY>TEDITWINDOW.DCOM;53[11-Oct-85 18:23:09/SYBALSKY.pa] newer than >KOTO>LIBRARY>TEDITWINDOW.DCOM;5[ 8-Oct-85 16:43:38].
|
||||
Core>LIBRARY>TTYCHAT.;2[20-Sep-85 10:22:10/Schoen.pa] newer than >KOTO>LIBRARY>TTYCHAT.;1[ 8-Sep-85 18:18:27].
|
||||
Core>LIBRARY>TTYCHAT.DCOM;2[20-Sep-85 10:22:48/Schoen.pa] newer than >KOTO>LIBRARY>TTYCHAT.DCOM;1[ 8-Sep-85 18:18:48].
|
||||
Core>LIBRARY>TWODINSPECTOR.;2[13-Oct-85 17:21:05/FISCHER.pa], not found.
|
||||
Core>LIBRARY>TWODINSPECTOR.DCOM;2[13-Oct-85 17:22:38/FISCHER.pa], not found.
|
||||
Core>LIBRARY>twodinspector.tedit;2[10-Oct-85 22:44:47/FISCHER.pa], not found.
|
||||
Core>LIBRARY>VIRTUALKEYBOARDS.TEDIT;4[ 3-Oct-85 15:06:21/sybalsky.pa] newer than >KOTO>LIBRARY>VIRTUALKEYBOARDS.TEDIT;1[19-Jun-85 11:14:36].
|
||||
Core>LIBRARY>VTCHAT.;5[12-Nov-85 20:32:32/Schoen.pa] newer than >KOTO>LIBRARY>VTCHAT.;1[26-Aug-85 12:06:22].
|
||||
Core>LIBRARY>VTCHAT.DCOM;6[12-Nov-85 20:33:18/Schoen.pa] newer than >KOTO>LIBRARY>VTCHAT.DCOM;1[26-Aug-85 12:08:43].
|
||||
1
docs/internal/LITATOMHASH.TXT
Normal file
1
docs/internal/LITATOMHASH.TXT
Normal file
File diff suppressed because one or more lines are too long
16
docs/internal/LOCALFILE.TEDIT
Normal file
16
docs/internal/LOCALFILE.TEDIT
Normal file
File diff suppressed because one or more lines are too long
45
docs/internal/LOCALFILEIMPL.TEDIT
Normal file
45
docs/internal/LOCALFILEIMPL.TEDIT
Normal file
@@ -0,0 +1,45 @@
|
||||
LocalFile Implementor's Guide
|
||||
Filed as [eris]<lispcore>internal>doc>localFileImpl.tedit
|
||||
Written by Tayloe Stansbury 18-Feb-85
|
||||
Modified by Tayloe Stansbury 15-Aug-85 12:27:46
|
||||
|
||||
The Dandlion/Dove local file system is implemented in two files: LocalFile and DskDisplay. User-level documentation for the file system can be found in the 1108 User's Guide or on [eris]<lispcore>doc>localfile.tedit.
|
||||
|
||||
The Dandelion/Dove local file system has two layers: the Pilot layer and the Lisp streams layer. The Pilot layer emulates a subset of the Pilot file system, as described in the Pilot Programmer's Manual. The Lisp streams layer implements the Lisp streams specification laid out in [eris]<lispcore>internal>doc>streams.tedit.
|
||||
|
||||
The Pilot layer is implemented by three modules in the file LocalFile:
|
||||
|
||||
1. LFALLOCATIONMAPCOMS, which keeps track of which pages have been allocated and which are free. LFAllocationMap provides the functionality of [idun]<apilot>11.0>pilot>private>volallocmapimpl.mesa, though its implementation is only very loosely based on that file.
|
||||
|
||||
2. LFFILEMAPCOMS, which keeps track of the mapping between file ID numbers and runs of disk pages. This mapping is stored in a specialized B-tree. LFFileMap provides the functionality of [idun]<apilot>11.0>pilot>private>volfilemapimpl.mesa, though its implementation was based more on [idun]<apilot100>pilot>private>volfilemapimpl.mesa, and later updated to be compatible with the Mesa 11.0 release of Pilot.
|
||||
|
||||
3. LFPILOTFILECOMS, which has a primitive notion of file, as embodied in its datatype FileDescriptor. LFPilotFile handles things like creating, extending, shrinking, and deleting files; reading and writing file pages; labels; and volume root directories (which map file types onto higher level directories -- e.g. Lisp file type -> Lisp directory ID, Mesa file type -> MFile directory ID, etc.). LFPilotFile does not emulate any particular Mesa file, but rather grew up as the gray area between the two layers became more well-defined during the evolution of the Lisp local file system.
|
||||
|
||||
The Lisp stream layer is defined by three more modules in the file LocalFile:
|
||||
|
||||
1. LFDIRECTORYCOMS, which implements the Lisp directory. The Lisp directory maps symbolic Lisp file names onto Pilot file ID numbers, and handles directory search and directory enumeration.
|
||||
|
||||
2. SCAVENGEDSKDIRECTORYCOMS, which implements a scavenger for the Lisp directory. It works by purging the old Lisp directory, creating a new one, using the BTree to figure out what Lisp files there are on the volume, using the leader page of each Lisp file to figure out what its name is, and then inserting an entry in the new directory for each Lisp file. There is no Pilot-level scavenger implemented in Lisp; for that we rely on the Othello Scavenge Logical Volume command.
|
||||
|
||||
3. LFCOMS, which implements all other operations of the local disk file device. LocalFile uses Pilot files as backing files for Lisp streams: page 0 of the Pilot file becomes the stream's leader page (containing stuff GETFILEINFO and the scavenger will be interested in), page 1 of the Pilot file becomes page 0 of the stream, etc. Pilot backing files may be longer than the Lisp stream they hold.
|
||||
|
||||
In addition, the file DskDisplay provides a window which displays file system status. This file is separate because it relies on the window system and therefore must be loaded considerably later in the loadup process than LocalFile need be.
|
||||
|
||||
Some future projects for the file system (apart from fighting off the stream of ARs):
|
||||
|
||||
1. Modify the READPAGES and WRITEPAGES methods to transfer contiguous pages all at once, and set the MULTIBUFFERHINT to be T.
|
||||
|
||||
2. Rewrite DiskDlion (which implements the Dandelion/Dove disk head) so that disk requests that cross cylinder boundaries are handled in runs rather than a page at a time (for both the Dandelion and Dove). Without this, large disk requests (which happen especially during deleting) can tie up the system for quite a while.
|
||||
|
||||
3. Modify DiskDlion to do a process switch while waiting for the disk. Currently it busy waits.
|
||||
|
||||
4. Currently too much of the file system is uninterruptable. Unfortunately, the primitive UNINTERRUPTABLY now prevents process switch in addition to preventing keyboard interrupts. What we really need is a construct that will do the latter but not the former. (There is now an AR for such a beast.) Given that, we should remove as many calls to UNINTERRUPTABLY as possible.
|
||||
|
||||
5. Currently files are allocated 20 pages at a time, regardless of whether the openfile request came with a size hint. This was originally because allocating long files sometimes took long enough that NS connections got dropped. Once #2 is accomplished, long allocations should be quite a bit faster though; and #s 3 and 4 will make it possible for other processes to sneak in while allocations are going on. Then it would make sense to change the file system to allocate files all at once when a hint is provided.
|
||||
|
||||
6. Currently, allocation map buffers and file map buffers are written out only once per stream creation or deletion. Without automatic built-in scavenging, that strikes me as a bit unsafe (although it does speed things up some). It would probably be better to write them out once every allocation or deallocation (and the performance penalty for doing so will not be too great if allocation requests are larger as a result of #5).
|
||||
|
||||
7. Longer term: rewrite the directory so that it uses some form of tree search. The linear search currently used gets unacceptably slow for large directories.
|
||||
|
||||
Should you have any questions, do not hesitate to contact me. My mail address is Stansbury.pa, and my extension is 4330. Good luck!
|
||||
|
||||
BIN
docs/internal/LeafSpec.press
Normal file
BIN
docs/internal/LeafSpec.press
Normal file
Binary file not shown.
BIN
docs/internal/LispARFields.TEdit
Normal file
BIN
docs/internal/LispARFields.TEdit
Normal file
Binary file not shown.
BIN
docs/internal/LispMPCodes.IP
Normal file
BIN
docs/internal/LispMPCodes.IP
Normal file
Binary file not shown.
12
docs/internal/LispMPCodes.TEdit
Normal file
12
docs/internal/LispMPCodes.TEdit
Normal file
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user