Compare commits
2342 Commits
M15-patch
...
tags/relea
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
539ff28988 | ||
|
|
a87bed1342 | ||
|
|
357ff16580 | ||
|
|
f5f37cbce1 | ||
|
|
6168011fe2 | ||
|
|
cb1db91e06 | ||
|
|
8bebec4c4c | ||
|
|
e3a62ebe86 | ||
|
|
cf83b01b5f | ||
|
|
272cee0c80 | ||
|
|
58fdf4bb36 | ||
|
|
9fface217d | ||
|
|
509d1e72ed | ||
|
|
6130dcc35b | ||
|
|
25848ab739 | ||
|
|
78aaa53a28 | ||
|
|
78f2d4bf20 | ||
|
|
947c3cd8c1 | ||
|
|
f5e27dc7bc | ||
|
|
d362b39624 | ||
|
|
586fad3e08 | ||
|
|
87a9a9877c | ||
|
|
a7d3631f72 | ||
|
|
1fa69507a8 | ||
|
|
7a55d88518 | ||
|
|
dc5c34441e | ||
|
|
52cc20d7d0 | ||
|
|
c4e4448cdb | ||
|
|
90081b7cbd | ||
|
|
189360dda0 | ||
|
|
c21a371d52 | ||
|
|
5d4910785f | ||
|
|
f29c9f241f | ||
|
|
1929e1adb0 | ||
|
|
d9fa32f51f | ||
|
|
11b56eb688 | ||
|
|
b86bdbfe72 | ||
|
|
efef32ce6e | ||
|
|
85fa6d507e | ||
|
|
f056c26c3c | ||
|
|
92e15f8c3b | ||
|
|
6663542fca | ||
|
|
904e8dfba3 | ||
|
|
69cfc3a581 | ||
|
|
ff1e9211fe | ||
|
|
da7cd80889 | ||
|
|
13ceb41576 | ||
|
|
ff46654732 | ||
|
|
7685824c32 | ||
|
|
d5295d7b10 | ||
|
|
5d86e14eda | ||
|
|
f556dc2114 | ||
|
|
5cbe773170 | ||
|
|
bb7b3ba135 | ||
|
|
be773295ae | ||
|
|
db00ef793b | ||
|
|
7ae9896327 | ||
|
|
820584eef4 | ||
|
|
ec38667076 | ||
|
|
ff063a65a9 | ||
|
|
f26e7d057e | ||
|
|
cfa29e85b7 | ||
|
|
3634b4908f | ||
|
|
9e4be4cdca | ||
|
|
e3a0197217 | ||
|
|
81e58c6c55 | ||
|
|
4f92e21cc4 | ||
|
|
d3ad1a51a2 | ||
|
|
7eefbb611d | ||
|
|
e2ffa1474b | ||
|
|
7e1bb9e358 | ||
|
|
3d70eed61d | ||
|
|
ec40cdfc6a | ||
|
|
822df69500 | ||
|
|
9d18559818 | ||
|
|
f775b525e1 | ||
|
|
9622913ee0 | ||
|
|
565b4458eb | ||
|
|
d7908baef5 | ||
|
|
a2d6c52697 | ||
|
|
61709561e8 | ||
|
|
3443fbb03c | ||
|
|
c211707ae9 | ||
|
|
c031503852 | ||
|
|
4b448ed210 | ||
|
|
7e24c61109 | ||
|
|
42c76a9aa9 | ||
|
|
09db2943e9 | ||
|
|
f9c8c503ca | ||
|
|
15474bfb1f | ||
|
|
f795458a79 | ||
|
|
d53721b599 | ||
|
|
f02bbaedf2 | ||
|
|
0d8a2640a3 | ||
|
|
48af9701f2 | ||
|
|
968ecae850 | ||
|
|
e875c61670 | ||
|
|
8c0c6fbd74 | ||
|
|
14a73bf9f8 | ||
|
|
a0c246098c | ||
|
|
b65b77f70c | ||
|
|
979d516b73 | ||
|
|
d0d5a225b0 | ||
|
|
96447b4c8f | ||
|
|
1e339b4e2b | ||
|
|
4d2a6f1b34 | ||
|
|
76418ad5cd | ||
|
|
3037a5639d | ||
|
|
c2e9a22340 | ||
|
|
6190edd8d7 | ||
|
|
6d45fb32c0 | ||
|
|
65533e576e | ||
|
|
45612f1413 | ||
|
|
292b7e59ef | ||
|
|
e289f4bdbb | ||
|
|
de66758325 | ||
|
|
5520183969 | ||
|
|
7efeed2ec5 | ||
|
|
fb5ba5251b | ||
|
|
c7d8a4a439 | ||
|
|
a2b15af9ef | ||
|
|
9175f05517 | ||
|
|
dfb4125a91 | ||
|
|
c3f1556235 | ||
|
|
909b55effa | ||
|
|
cfccd460a5 | ||
|
|
40b96f684e | ||
|
|
23207ef36f | ||
|
|
77c4947349 | ||
|
|
2ced75f311 | ||
|
|
394c83b71d | ||
|
|
86daa4e348 | ||
|
|
c5f151e490 | ||
|
|
2d679461dc | ||
|
|
6f390f3338 | ||
|
|
5de0d41de9 | ||
|
|
c39011af4c | ||
|
|
b41374aee6 | ||
|
|
c9aecf9327 | ||
|
|
46824fda78 | ||
|
|
d3cd2afa84 | ||
|
|
9d454dc56b | ||
|
|
7538581ccc | ||
|
|
55bc378ad7 | ||
|
|
9ee1970a3d | ||
|
|
499a48d730 | ||
|
|
d8d4af67e3 | ||
|
|
f471f3544d | ||
|
|
384c4df814 | ||
|
|
14c162f6df | ||
|
|
450067e8ae | ||
|
|
a68ed6e2a5 | ||
|
|
4662ada89f | ||
|
|
6eb67e93bd | ||
|
|
26d3075a56 | ||
|
|
91481fd052 | ||
|
|
be4026f658 | ||
|
|
fe5547695c | ||
|
|
94ecbedb06 | ||
|
|
fef8da8a31 | ||
|
|
2f147d0a55 | ||
|
|
7e9fc11c82 | ||
|
|
2bf770f3af | ||
|
|
9381ffc62d | ||
|
|
fa071fe1e3 | ||
|
|
8b15b44315 | ||
|
|
1411808b50 | ||
|
|
d194832bb2 | ||
|
|
e5a3102969 | ||
|
|
6631edc16e | ||
|
|
bcd916e231 | ||
|
|
090ff0afcb | ||
|
|
99b65a3bf8 | ||
|
|
82eaf33e41 | ||
|
|
b9c1422ef5 | ||
|
|
33c22ccfd8 | ||
|
|
e050a38db8 | ||
|
|
471748a3e5 | ||
|
|
40c2625df9 | ||
|
|
02d091a35c | ||
|
|
dd16ebd747 | ||
|
|
a9f2e413bb | ||
|
|
3b147ba16a | ||
|
|
8a8f67d122 | ||
|
|
c8140b55cb | ||
|
|
8d2a10ff82 | ||
|
|
a38c51c58b | ||
|
|
d8ce56167f | ||
|
|
ba77f32bb0 | ||
|
|
74631d734b | ||
|
|
79877efe0c | ||
|
|
732ca99228 | ||
|
|
c8a6b35854 | ||
|
|
3b2f68d99a | ||
|
|
10cc7b70fe | ||
|
|
2019e907c8 | ||
|
|
d0dea7b899 | ||
|
|
4d37e2b9e3 | ||
|
|
c876431511 | ||
|
|
668dd78cd3 | ||
|
|
8d97c39c31 | ||
|
|
559fbb1110 | ||
|
|
733ffbea94 | ||
|
|
9eb1037eba | ||
|
|
a222be8f31 | ||
|
|
b03d03932e | ||
|
|
2a3aa9fcb8 | ||
|
|
1f3dc8394a | ||
|
|
8d7b1630df | ||
|
|
94635420f7 | ||
|
|
3762ebc594 | ||
|
|
05b901315c | ||
|
|
d398de2dfa | ||
|
|
4698adc719 | ||
|
|
b92a506230 | ||
|
|
14bb6fa0ab | ||
|
|
7645dfa57c | ||
|
|
c2b90e3bbb | ||
|
|
2632a072f5 | ||
|
|
15809aa999 | ||
|
|
811cb761f4 | ||
|
|
3549f77d57 | ||
|
|
f6e0d56961 | ||
|
|
b2fedc2225 | ||
|
|
bdf7b78cd4 | ||
|
|
ab67ca9638 | ||
|
|
a54d7af00a | ||
|
|
52713ced88 | ||
|
|
5fb4c78072 | ||
|
|
067920c238 | ||
|
|
8a9940ec3c | ||
|
|
1aa351257b | ||
|
|
20ef5057f7 | ||
|
|
f23f7ad15d | ||
|
|
119acf2584 | ||
|
|
b6598f67f9 | ||
|
|
eab29136c1 | ||
|
|
cb3b6882b4 | ||
|
|
1dd0421880 | ||
|
|
48e25b8c33 | ||
|
|
2c11b83b75 | ||
|
|
7ad0076bfb | ||
|
|
2fb0f2979c | ||
|
|
b6473d8bd0 | ||
|
|
91ce25064d | ||
|
|
9fa5c74f98 | ||
|
|
22f407a483 | ||
|
|
4ccbd4b644 | ||
|
|
ac87ce19c4 | ||
|
|
a0cd849978 | ||
|
|
dac168d0d6 | ||
|
|
7b4ca31732 | ||
|
|
17121af6a9 | ||
|
|
34adf9eb4a | ||
|
|
5dabafa40b | ||
|
|
902d510731 | ||
|
|
02494ac189 | ||
|
|
2e324573c8 | ||
|
|
930e16ca97 | ||
|
|
e5aab9a82f | ||
|
|
37d2a5badf | ||
|
|
b36dd24985 | ||
|
|
30c6a5b9b5 | ||
|
|
1de1f8b535 | ||
|
|
9b457ca9da | ||
|
|
aa6b90d40e | ||
|
|
2f8584c230 | ||
|
|
96e330f279 | ||
|
|
6771abf254 | ||
|
|
5c27504038 | ||
|
|
cb7c76b9e0 | ||
|
|
88fc92f608 | ||
|
|
d3a9108ad8 | ||
|
|
a836e61b39 | ||
|
|
6d81d0e4d1 | ||
|
|
1cd55fd548 | ||
|
|
eea1811f0c | ||
|
|
ed0b376456 | ||
|
|
c0636b0f0d | ||
|
|
0fcdeec97a | ||
|
|
aac970f94c | ||
|
|
9abcd79da8 | ||
|
|
498dc1681d | ||
|
|
547e07303b | ||
|
|
d3a24645a8 | ||
|
|
12f1c79c88 | ||
|
|
809eeca85a | ||
|
|
2c278231ec | ||
|
|
94ee06fc74 | ||
|
|
15a90341d6 | ||
|
|
e313aaa0ab | ||
|
|
1d51b653fc | ||
|
|
82c4ad3f35 | ||
|
|
6080853d5d | ||
|
|
94f0737506 | ||
|
|
94d1e2f590 | ||
|
|
f272eeb07a | ||
|
|
89d1c55bef | ||
|
|
2f528b1160 | ||
|
|
2f60faf19d | ||
|
|
59b63e045b | ||
|
|
9145120320 | ||
|
|
e3e325da15 | ||
|
|
9520efcc7a | ||
|
|
87d7b8f23c | ||
|
|
37115d48b0 | ||
|
|
7fb638c5fe | ||
|
|
ad4471e3c6 | ||
|
|
84657b4391 | ||
|
|
94f75c64f9 | ||
|
|
10eaaa0963 | ||
|
|
c75ec68d38 | ||
|
|
693cc4f3c0 | ||
|
|
9f71844e59 | ||
|
|
6f46990bc8 | ||
|
|
8d420bdb8c | ||
|
|
06dcead5d1 | ||
|
|
b7c2823d4c | ||
|
|
ed399a586a | ||
|
|
52b17eda5e | ||
|
|
fd347bcedd | ||
|
|
f6184abf8e | ||
|
|
d86937364e | ||
|
|
6dbeca04a0 | ||
|
|
96222301bc | ||
|
|
1dad7c3d4a | ||
|
|
de3e84d435 | ||
|
|
67b2b41af0 | ||
|
|
34b0e9dc86 | ||
|
|
d129821369 | ||
|
|
188545d820 | ||
|
|
3471a1b69c | ||
|
|
b6cccbf28a | ||
|
|
c494d95016 | ||
|
|
38954dc714 | ||
|
|
c608419e2e | ||
|
|
0a160eb0a8 | ||
|
|
e99aad53d3 | ||
|
|
d85ad8e6a8 | ||
|
|
b73d858405 | ||
|
|
ce40600633 | ||
|
|
54464ea7ea | ||
|
|
557ca2808d | ||
|
|
116c31c15c | ||
|
|
8b5a6209f3 | ||
|
|
e699b3af5a | ||
|
|
c7a56395b0 | ||
|
|
9752ae7af4 | ||
|
|
b37e05608c | ||
|
|
bfe63e8f6e | ||
|
|
997f81d5d1 | ||
|
|
ab7173d18c | ||
|
|
9f59512919 | ||
|
|
b7a4eda34c | ||
|
|
699c20459c | ||
|
|
e8515e9237 | ||
|
|
89b340951c | ||
|
|
efb225519d | ||
|
|
36a060eb5a | ||
|
|
5b95d440f1 | ||
|
|
35be4c55b9 | ||
|
|
ead0de0810 | ||
|
|
9a83fb8aac | ||
|
|
40067e21e4 | ||
|
|
1c91ab1e0f | ||
|
|
77b7b8d32d | ||
|
|
bb74234246 | ||
|
|
d49511cab5 | ||
|
|
1a4ba72643 | ||
|
|
f534603937 | ||
|
|
c96f2a9ee0 | ||
|
|
471d32441c | ||
|
|
d5dbfe7527 | ||
|
|
1e0bcf01b1 | ||
|
|
30980f7406 | ||
|
|
eff33c6a8e | ||
|
|
aedfffde10 | ||
|
|
0d0d59430f | ||
|
|
0d1f1c16df | ||
|
|
1f0d69f6d9 | ||
|
|
7d7ac5b8ec | ||
|
|
94867bd9d6 | ||
|
|
067dc9aa6f | ||
|
|
8af29b1bde | ||
|
|
b98ae1c63e | ||
|
|
d1d215cecb | ||
|
|
738906d4eb | ||
|
|
4df51cacc5 | ||
|
|
029e0cffcd | ||
|
|
2d93e7b4bb | ||
|
|
b5f11bcccb | ||
|
|
cbd2a79d4f | ||
|
|
d809f93363 | ||
|
|
6e662dbdaa | ||
|
|
24d4124fee | ||
|
|
5697c39c4b | ||
|
|
9056e8e1e9 | ||
|
|
06e446d68a | ||
|
|
2baf3e9d35 | ||
|
|
3db2b20a4c | ||
|
|
fed44b6639 | ||
|
|
20b31fbdb0 | ||
|
|
d1024dbfb0 | ||
|
|
1bfb241814 | ||
|
|
4d5404d6d7 | ||
|
|
77889ffe9d | ||
|
|
20852fa4c9 | ||
|
|
4c959afc07 | ||
|
|
7af4dd377e | ||
|
|
3de7046bc3 | ||
|
|
029d334c68 | ||
|
|
1d3728d0fb | ||
|
|
336ce525d7 | ||
|
|
04e0bce867 | ||
|
|
c0e28dfae6 | ||
|
|
5eb28b95bc | ||
|
|
206f778c8d | ||
|
|
c56a65dcc6 | ||
|
|
576198eef1 | ||
|
|
7274e83c2a | ||
|
|
5fbd725988 | ||
|
|
14bd190690 | ||
|
|
750ce4d6ee | ||
|
|
063b52d390 | ||
|
|
3123910725 | ||
|
|
b5be3ce7d4 | ||
|
|
c04a9db3f1 | ||
|
|
a98d9b0127 | ||
|
|
a6025a81a4 | ||
|
|
871543dac7 | ||
|
|
aea7bfee72 | ||
|
|
72bb0cfa68 | ||
|
|
dba0c50104 | ||
|
|
b42d8b03c8 | ||
|
|
ca5cf8bbf4 | ||
|
|
846ba4a2c0 | ||
|
|
7d1ad2c74b | ||
|
|
63d2572917 | ||
|
|
82cc1b2bfd | ||
|
|
e680c6133b | ||
|
|
fc3e089fe6 | ||
|
|
d2b4f7de3c | ||
|
|
fb746fd393 | ||
|
|
6579122dbf | ||
|
|
b7c344e758 | ||
|
|
1ca4076923 | ||
|
|
37e650b1bc | ||
|
|
ebabdd99a7 | ||
|
|
22cd501286 | ||
|
|
9bfb5a41b9 | ||
|
|
60cd3e0147 | ||
|
|
d56a580bdd | ||
|
|
ef106149f7 | ||
|
|
2e3365386e | ||
|
|
b42d830267 | ||
|
|
6e1e05e1dd | ||
|
|
fba427b093 | ||
|
|
2f3dfb5dfd | ||
|
|
2cdd793b5e | ||
|
|
1ffa0ae294 | ||
|
|
8bafd8a0da | ||
|
|
a6db22e556 | ||
|
|
145c2179d6 | ||
|
|
a973331419 | ||
|
|
7a77b2df6c | ||
|
|
9fea4ab9f9 | ||
|
|
4cd9cfb812 | ||
|
|
3e9c78e028 | ||
|
|
51c05dec82 | ||
|
|
455cf1869c | ||
|
|
74d036322a | ||
|
|
8b853a2a1e | ||
|
|
b2170207ad | ||
|
|
3df7004da4 | ||
|
|
dbee1395e4 | ||
|
|
611f0cf65e | ||
|
|
644ab39a24 | ||
|
|
8c25a43ace | ||
|
|
6b22cfbbac | ||
|
|
20c2e81d68 | ||
|
|
9d79d50820 | ||
|
|
a4006c50ef | ||
|
|
1199dbe633 | ||
|
|
ff0abe5e37 | ||
|
|
38dab45950 | ||
|
|
667a10ed0f | ||
|
|
6d9b82c696 | ||
|
|
08f62964bd | ||
|
|
2c1a1037c6 | ||
|
|
32d3b7338e | ||
|
|
a5b61285a7 | ||
|
|
02ccab744b | ||
|
|
145139b012 | ||
|
|
66f4f249bf | ||
|
|
4259485ebf | ||
|
|
051dde06ae | ||
|
|
751f006ee2 | ||
|
|
5e3cd5ebb5 | ||
|
|
5804a0d54a | ||
|
|
86ff876887 | ||
|
|
df5187a91f | ||
|
|
148bbbc893 | ||
|
|
f2ac4044c8 | ||
|
|
43096baf33 | ||
|
|
9c0315ea57 | ||
|
|
33f1b79836 | ||
|
|
b6eaa766b6 | ||
|
|
b41126c325 | ||
|
|
74ae6fc2f8 | ||
|
|
fe665bdefe | ||
|
|
493237dbd1 | ||
|
|
8211edd675 | ||
|
|
afea6d35ec | ||
|
|
dc9ecb6a41 | ||
|
|
c9b4e1517b | ||
|
|
7ae6e6d444 | ||
|
|
f484decf70 | ||
|
|
5e071ed04d | ||
|
|
ca3f0133ef | ||
|
|
d1fc8c8465 | ||
|
|
ae475cb650 | ||
|
|
41d67eae8d | ||
|
|
908f796b86 | ||
|
|
595dfca752 | ||
|
|
1fc5121607 | ||
|
|
50952e0fee | ||
|
|
e119369082 | ||
|
|
96ab5555eb | ||
|
|
b047cad313 | ||
|
|
e85a4b93d4 | ||
|
|
1b8f60a970 | ||
|
|
69e6a8f7d3 | ||
|
|
4c1a325cf2 | ||
|
|
ad8a426d0f | ||
|
|
51687cf23b | ||
|
|
b5a2f9d664 | ||
|
|
8ed54079fe | ||
|
|
62b5734d6a | ||
|
|
b9c53f0450 | ||
|
|
ebcb5ad836 | ||
|
|
3518a79713 | ||
|
|
32cafeec0d | ||
|
|
fc5ff178f4 | ||
|
|
c9619810e9 | ||
|
|
6bdf96a634 | ||
|
|
c9ce94ef8e | ||
|
|
ddc473bcbf | ||
|
|
661a51c2e6 | ||
|
|
9fbc9294c1 | ||
|
|
117ded3835 | ||
|
|
7df87d2580 | ||
|
|
70c81873e0 | ||
|
|
58c25045be | ||
|
|
6724125aa5 | ||
|
|
d0ed7ceda0 | ||
|
|
3f178b45e9 | ||
|
|
2e7a23cebf | ||
|
|
89a73d6da4 | ||
|
|
53f0f48043 | ||
|
|
1cc9561b2e | ||
|
|
46b9d23028 | ||
|
|
915b573e3f | ||
|
|
47e1c7438c | ||
|
|
6a5ed67b18 | ||
|
|
b3d902ea74 | ||
|
|
8f88c967d6 | ||
|
|
7d74faa6ec | ||
|
|
07f07a9e71 | ||
|
|
b980a7a7e7 | ||
|
|
f864a0ff3d | ||
|
|
fd3d71879a | ||
|
|
694b0720be | ||
|
|
70d1511ad8 | ||
|
|
7e1229973c | ||
|
|
dae428b1cc | ||
|
|
8e1057b2cd | ||
|
|
3586079172 | ||
|
|
750a1e716e | ||
|
|
10355d147e | ||
|
|
845e776fb1 | ||
|
|
c904c1ae23 | ||
|
|
2f9153f71a | ||
|
|
eb56ef0b80 | ||
|
|
c53f870276 | ||
|
|
79db5ee378 | ||
|
|
99fa3b6ce3 | ||
|
|
777ccab296 | ||
|
|
9b0cfefb70 | ||
|
|
2af3ff840a | ||
|
|
3c27adc72c | ||
|
|
e1645749ce | ||
|
|
ed6fcf8e88 | ||
|
|
15e3a37879 | ||
|
|
6cc5706528 | ||
|
|
fd9dc6dc71 | ||
|
|
dc067d9d88 | ||
|
|
8d4304572e | ||
|
|
99c5bbc3af | ||
|
|
f2309b4c2d | ||
|
|
8912637526 | ||
|
|
f05a87b350 | ||
|
|
3ea2dc04ba | ||
|
|
452d6d03a6 | ||
|
|
228e53e8c6 | ||
|
|
6ee680af34 | ||
|
|
3c626fe220 | ||
|
|
38302c0c89 | ||
|
|
6b12459157 | ||
|
|
35e1ece68f | ||
|
|
7fe2f970fd | ||
|
|
f98271b612 | ||
|
|
cad997a424 | ||
|
|
d8e63b5bf9 | ||
|
|
86e6b675b0 | ||
|
|
1d98ae0543 | ||
|
|
11dd650525 | ||
|
|
b0b3c242cd | ||
|
|
35f85e5155 | ||
|
|
86572486f8 | ||
|
|
d992f3098b | ||
|
|
2aae6549e1 | ||
|
|
56df13b9c5 | ||
|
|
fd45ea4f85 | ||
|
|
b487d387e6 | ||
|
|
c45d366abf | ||
|
|
1ff427da29 | ||
|
|
06c8b34cbd | ||
|
|
f4bcc3e32f | ||
|
|
5723e151a5 | ||
|
|
e7bea855b6 | ||
|
|
c88f99faeb | ||
|
|
5657d76924 | ||
|
|
6e5ee99738 | ||
|
|
28f8181317 | ||
|
|
c3b10ef137 | ||
|
|
f82ef1e272 | ||
|
|
f02e6be746 | ||
|
|
82db77d4fb | ||
|
|
94f220927b | ||
|
|
639fbde2f5 | ||
|
|
d862db60a2 | ||
|
|
9d30a5d38d | ||
|
|
b464ace435 | ||
|
|
44ddc49826 | ||
|
|
82cca0d48b | ||
|
|
ae8be3e7b8 | ||
|
|
3752469ca6 | ||
|
|
89f1e5dc50 | ||
|
|
8b3b8b77f0 | ||
|
|
3f51838418 | ||
|
|
8ee08d337c | ||
|
|
e421099501 | ||
|
|
6deb227c9c | ||
|
|
ae8e7ba6e1 | ||
|
|
8892310c43 | ||
|
|
b54ab2026d | ||
|
|
97de07e73f | ||
|
|
7df07124f6 | ||
|
|
841f13b627 | ||
|
|
1e556db4a3 | ||
|
|
38a6405873 | ||
|
|
a99e18a526 | ||
|
|
783b66f200 | ||
|
|
4c36ab7089 | ||
|
|
4aa59d97bd | ||
|
|
de6431e60d | ||
|
|
e5b2451474 | ||
|
|
aa4a12d9d2 | ||
|
|
4451b69a36 | ||
|
|
de88fc736a | ||
|
|
1d923b140b | ||
|
|
2a40d45436 | ||
|
|
e1ca6b4aeb | ||
|
|
05d899f92a | ||
|
|
99c149db53 | ||
|
|
64a7b56d5e | ||
|
|
51881fbcea | ||
|
|
99fb5a522a | ||
|
|
42c75ca193 | ||
|
|
432c3ffc1f | ||
|
|
5b5c83c2d3 | ||
|
|
ead43e83c0 | ||
|
|
7b9a93526f | ||
|
|
cc0d698984 | ||
|
|
77c6e839a9 | ||
|
|
32bc1cd58a | ||
|
|
a37f8ac53e | ||
|
|
f7f16de3f9 | ||
|
|
ffb8e62846 | ||
|
|
19fcf86495 | ||
|
|
26b71f49eb | ||
|
|
a871c3927f | ||
|
|
6e18c894cf | ||
|
|
b687207b79 | ||
|
|
62f61ae822 | ||
|
|
7f467f3582 | ||
|
|
2a455361bb | ||
|
|
eb66d55337 | ||
|
|
8f32faf290 | ||
|
|
f7a9eab6cf | ||
|
|
b48b73e257 | ||
|
|
50cafea917 | ||
|
|
27e6bef1c6 | ||
|
|
3338188427 | ||
|
|
1ca8a0e08d | ||
|
|
0d3bd77be1 | ||
|
|
a2b3fa347d | ||
|
|
68aa9139e4 | ||
|
|
a418adda08 | ||
|
|
d8e27497af | ||
|
|
52d498cd64 | ||
|
|
8ecae333e4 | ||
|
|
8baaf0d305 | ||
|
|
ccdc1c4359 | ||
|
|
2304d41790 | ||
|
|
20d725c6eb | ||
|
|
ad32793254 | ||
|
|
31fbcda1ef | ||
|
|
2e13fc3c86 | ||
|
|
bac32c1b64 | ||
|
|
3c67876ec4 | ||
|
|
d4cca283a1 | ||
|
|
2b356bc5bb | ||
|
|
c4ef7d74c7 | ||
|
|
ea55eba0d3 | ||
|
|
a4e37230ea | ||
|
|
789c670fb3 | ||
|
|
148d5c122d | ||
|
|
b77e92c492 | ||
|
|
fff03075ad | ||
|
|
5149fa6a34 | ||
|
|
5ad397e2a0 | ||
|
|
ef3e01b2b4 | ||
|
|
257b47f01c | ||
|
|
4eb3e1a230 | ||
|
|
92fa603842 | ||
|
|
7e8ab58db1 | ||
|
|
e04535a449 | ||
|
|
a6f93c39c3 | ||
|
|
a62fed42a4 | ||
|
|
3dc781b67c | ||
|
|
d7ee22b271 | ||
|
|
33e8d9307c | ||
|
|
ece1d17e57 | ||
|
|
d675a717da | ||
|
|
0fa703a361 | ||
|
|
6f6977005c | ||
|
|
e9cb2134b8 | ||
|
|
fed797cf9d | ||
|
|
0bce1684c5 | ||
|
|
0c53e29d87 | ||
|
|
1eeb92635a | ||
|
|
28e0d36873 | ||
|
|
ff77d6d7c3 | ||
|
|
9a3ce86ab9 | ||
|
|
c2ccf084e3 | ||
|
|
9c5972cc6e | ||
|
|
81c4e5477a | ||
|
|
60f0d61f7e | ||
|
|
0a4e786ad8 | ||
|
|
69329e38fe | ||
|
|
54aadbcdf0 | ||
|
|
f277a4033c | ||
|
|
acd1ca8191 | ||
|
|
80b21e9dce | ||
|
|
c3a13e7ff6 | ||
|
|
75090d7b62 | ||
|
|
8c416d926e | ||
|
|
992d99ef43 | ||
|
|
69d46f87ef | ||
|
|
631e2d2034 | ||
|
|
2a4abf0dab | ||
|
|
8271d7284a | ||
|
|
153abf8b4d | ||
|
|
da35c506dd | ||
|
|
c439c8fcbb | ||
|
|
c58b2d99ca | ||
|
|
5c492dc32c | ||
|
|
df23f6d81e | ||
|
|
a613ecae8f | ||
|
|
79648966e4 | ||
|
|
6bd223eae3 | ||
|
|
ba7d99eef0 | ||
|
|
edb94a5acb | ||
|
|
d713f527bb | ||
|
|
002add50a8 | ||
|
|
2cf33bd3b4 | ||
|
|
7ad2f68067 | ||
|
|
35e7f3daaa | ||
|
|
4e2f156283 | ||
|
|
3f8b94159a | ||
|
|
cbd0bdfa96 | ||
|
|
62ff5ce10b | ||
|
|
7711fb73be | ||
|
|
fbcff1c752 | ||
|
|
7de4c964c0 | ||
|
|
4628d34d47 | ||
|
|
47f3cd4d99 | ||
|
|
67a7e9e385 | ||
|
|
f14c309400 | ||
|
|
fc583283d5 | ||
|
|
0d4ce41cf5 | ||
|
|
31ec3a3962 | ||
|
|
f67cc3b96f | ||
|
|
868de24bb5 | ||
|
|
5442b2e9b9 | ||
|
|
9da43ace6b | ||
|
|
eee1a99532 | ||
|
|
5d1fa83609 | ||
|
|
3cb5aae609 | ||
|
|
5a29159da7 | ||
|
|
27dabbd961 | ||
|
|
9e4e33053f | ||
|
|
390f55af09 | ||
|
|
30a9e22992 | ||
|
|
2060747c79 | ||
|
|
7e5647a068 | ||
|
|
69dd443d63 | ||
|
|
ff45bfaf14 | ||
|
|
4628698254 | ||
|
|
b6e7fb0d50 | ||
|
|
c8e236c42b | ||
|
|
00e9964d93 | ||
|
|
ca6783642d | ||
|
|
81777e8de7 | ||
|
|
57bcc5d977 | ||
|
|
ccdb1964d1 | ||
|
|
441b7717d1 | ||
|
|
1ca16c0791 | ||
|
|
3255f4c635 | ||
|
|
1f92049a42 | ||
|
|
71e137989b | ||
|
|
df20a09801 | ||
|
|
2c78142979 | ||
|
|
5d2117bae7 | ||
|
|
ed38a43f75 | ||
|
|
a4caa04804 | ||
|
|
1630fa09b2 | ||
|
|
2a95e241e9 | ||
|
|
dfb64c2671 | ||
|
|
caf7536557 | ||
|
|
a75802872d | ||
|
|
392a39500b | ||
|
|
ecf79b0ac2 | ||
|
|
4ef5544fff | ||
|
|
49000dbf99 | ||
|
|
a839a57ff8 | ||
|
|
d4c8f42880 | ||
|
|
b4694ec541 | ||
|
|
83d6fa9563 | ||
|
|
633d5407a8 | ||
|
|
15cf3ce767 | ||
|
|
b8e47d1355 | ||
|
|
c6505dafa7 | ||
|
|
aac42b0e3f | ||
|
|
e6626c027b | ||
|
|
2ba35ab26e | ||
|
|
134197fc4f | ||
|
|
7b22bed0bb | ||
|
|
8cf85733f6 | ||
|
|
5941ff2111 | ||
|
|
96b0c7d20d | ||
|
|
b09e389810 | ||
|
|
49a807da2d | ||
|
|
b27b31a03e | ||
|
|
0b48abec61 | ||
|
|
cdfb005941 | ||
|
|
6ac95efaf8 | ||
|
|
eb9a891946 | ||
|
|
6c48936998 | ||
|
|
bbe91002db | ||
|
|
908b6a0310 | ||
|
|
ed82f49d52 | ||
|
|
9114c4a449 | ||
|
|
8156facb79 | ||
|
|
b8be56336e | ||
|
|
7a0f207379 | ||
|
|
e3c482bdae | ||
|
|
235ae9db7b | ||
|
|
9d0148c5b0 | ||
|
|
e1f91d9c45 | ||
|
|
d0bc8065c7 | ||
|
|
6e05c5b1a4 | ||
|
|
167ae86d9e | ||
|
|
237c1f5bba | ||
|
|
4c79e2e9f5 | ||
|
|
40dccc102d | ||
|
|
e931c5925c | ||
|
|
f802362180 | ||
|
|
4a12193f5e | ||
|
|
544b6c33ab | ||
|
|
f4d16e3240 | ||
|
|
c4157fe996 | ||
|
|
d90a54c043 | ||
|
|
b37b8cb748 | ||
|
|
50834581e0 | ||
|
|
e6540f80cb | ||
|
|
2e6c4d782b | ||
|
|
214a0167f0 | ||
|
|
bf4ceb4a12 | ||
|
|
7d4f2d6a7c | ||
|
|
4cf924be09 | ||
|
|
34e586d5b9 | ||
|
|
e8adbc0279 | ||
|
|
54fb5586c4 | ||
|
|
6142074c52 | ||
|
|
df01636bd9 | ||
|
|
42b5777e9f | ||
|
|
e46614e6c8 | ||
|
|
77f37dc003 | ||
|
|
0c64d08ae7 | ||
|
|
2429ef124a | ||
|
|
143a1ccfd5 | ||
|
|
4059b56e74 | ||
|
|
ca2032e66d | ||
|
|
30da73de36 | ||
|
|
5248ab48c8 | ||
|
|
02e1cdf7e8 | ||
|
|
ba25bda682 | ||
|
|
fa23ac7310 | ||
|
|
bd6345ff1b | ||
|
|
9ba365f134 | ||
|
|
efe6e42352 | ||
|
|
8d21d11638 | ||
|
|
a6cd3f67c3 | ||
|
|
5020ab053b | ||
|
|
6bcc04a122 | ||
|
|
90674903c4 | ||
|
|
aaecc62dd9 | ||
|
|
2b3d123d93 | ||
|
|
e962647764 | ||
|
|
29607952c0 | ||
|
|
4fc2089b79 | ||
|
|
7611c6f483 | ||
|
|
d63d53e37b | ||
|
|
83242bfd2b | ||
|
|
97136e7647 | ||
|
|
f89521fdfe | ||
|
|
258f8c739b | ||
|
|
0d2ce02d14 | ||
|
|
91d3876ee2 | ||
|
|
238a498f13 | ||
|
|
50c0c63208 | ||
|
|
c270cdebcb | ||
|
|
d19314125e | ||
|
|
bb116685ba | ||
|
|
52425f1d69 | ||
|
|
73bbfb0072 | ||
|
|
27f103258b | ||
|
|
69af608285 | ||
|
|
98ace5c30f | ||
|
|
8a65131bee | ||
|
|
7aed734132 | ||
|
|
a904db796a | ||
|
|
4280a49ae3 | ||
|
|
bd76609759 | ||
|
|
0ca8329bcb | ||
|
|
daa6109f75 | ||
|
|
5466f34839 | ||
|
|
4695b284df | ||
|
|
435deb5588 | ||
|
|
c96d03d417 | ||
|
|
17d3e898d7 | ||
|
|
50d2a1f377 | ||
|
|
3394356c02 | ||
|
|
bcb564f007 | ||
|
|
4b174b6e6e | ||
|
|
5c6b93be9a | ||
|
|
f9ab270d0b | ||
|
|
0cead8187c | ||
|
|
f45da4fd55 | ||
|
|
4a0303df11 | ||
|
|
60161f1564 | ||
|
|
8f14c31189 | ||
|
|
1722fe906a | ||
|
|
8085b14742 | ||
|
|
258d555b23 | ||
|
|
f5b953ca85 | ||
|
|
9620dc7bda | ||
|
|
b38052fc61 | ||
|
|
dddce8c3b5 | ||
|
|
ecf4583b04 | ||
|
|
a779a909e7 | ||
|
|
e3ed25ca3f | ||
|
|
00600f316c | ||
|
|
cb0dd060c7 | ||
|
|
bed9c57e40 | ||
|
|
af805ec2ae | ||
|
|
acfc96d2e1 | ||
|
|
f59f13ab64 | ||
|
|
edca144500 | ||
|
|
2b1c75597f | ||
|
|
98eda3653c | ||
|
|
673fa8a01b | ||
|
|
28944d9cea | ||
|
|
180d39b774 | ||
|
|
ae5a81e394 | ||
|
|
081927560a | ||
|
|
f6aaeb2e77 | ||
|
|
a707b9e5a7 | ||
|
|
5d77bc1cb6 | ||
|
|
ca270e7d24 | ||
|
|
874ce0a211 | ||
|
|
b1fb63ece7 | ||
|
|
38810cabc0 | ||
|
|
eb7f11584f | ||
|
|
2d366736b9 | ||
|
|
bfd8c99664 | ||
|
|
5d78e5133b | ||
|
|
e10dd870c7 | ||
|
|
d46c8fbdd7 | ||
|
|
86a4f79c76 | ||
|
|
0298981187 | ||
|
|
a1c39e3041 | ||
|
|
b775f4788a | ||
|
|
da96140bff | ||
|
|
847ecec5d7 | ||
|
|
004b45dfbe | ||
|
|
fb3020db9c | ||
|
|
e1d1c67cf1 | ||
|
|
61d74e4fc7 | ||
|
|
48b07a2cf2 | ||
|
|
9adf99cc1d | ||
|
|
ac0b5e80b1 | ||
|
|
3676f93091 | ||
|
|
a1e0f1ac14 | ||
|
|
eb419dae48 | ||
|
|
beaaee18a3 | ||
|
|
e8ed6ef97b | ||
|
|
fbb6c3bec1 | ||
|
|
fcdf12aad5 | ||
|
|
d4264fcb05 | ||
|
|
b7a4ffa6c8 | ||
|
|
d4551c2a74 | ||
|
|
4c7a925272 | ||
|
|
2f3bf08c73 | ||
|
|
3bb09b961f | ||
|
|
9c200b4d28 | ||
|
|
92a2da4944 | ||
|
|
979c528441 | ||
|
|
df2218dd9e | ||
|
|
cd59b4628b | ||
|
|
c49fe9643c | ||
|
|
c13d4152e3 | ||
|
|
27803fc1b1 | ||
|
|
8e17e0f7de | ||
|
|
a29e9ad060 | ||
|
|
ebe6074d2f | ||
|
|
742ccc82f5 | ||
|
|
e0a2e408c8 | ||
|
|
a37d857f2e | ||
|
|
b0564cd829 | ||
|
|
dd7cf9b5b1 | ||
|
|
03a7be4590 | ||
|
|
b004a1a6d0 | ||
|
|
93087b4bea | ||
|
|
54b96b5a21 | ||
|
|
f486d713bc | ||
|
|
f0c4a41376 | ||
|
|
8bbe74eab0 | ||
|
|
5387fd9909 | ||
|
|
169ea81a2e | ||
|
|
230ce7b8c2 | ||
|
|
d896882605 | ||
|
|
33acdaea73 | ||
|
|
2c1ed40631 | ||
|
|
275e4a25ba | ||
|
|
38ba2d94d5 | ||
|
|
702135127e | ||
|
|
7e2dd62642 | ||
|
|
217a9a5ea0 | ||
|
|
59318f16fc | ||
|
|
256ffc06c6 | ||
|
|
5a854190a3 | ||
|
|
692f3375c4 | ||
|
|
92df2ccbd4 | ||
|
|
27199ce73f | ||
|
|
9875d94239 | ||
|
|
99464ce5fd | ||
|
|
1c02ee9f86 | ||
|
|
d400aa697f | ||
|
|
59a35bc32f | ||
|
|
8ca1787ffe | ||
|
|
4f301728a5 | ||
|
|
fa00d72bc4 | ||
|
|
e8af2119bd | ||
|
|
6eaf2d5023 | ||
|
|
5a10336b5a | ||
|
|
df32789d46 | ||
|
|
43a63010d1 | ||
|
|
5a557d72ae | ||
|
|
2bb9a33f4d | ||
|
|
7e10edeacf | ||
|
|
8a9274e9d6 | ||
|
|
59159e9dfe | ||
|
|
1f35e0a04c | ||
|
|
b275a73219 | ||
|
|
98b909eb6b | ||
|
|
34673b8f9e | ||
|
|
13ceb50706 | ||
|
|
412d0add5a | ||
|
|
4b40e12399 | ||
|
|
04aeafd41a | ||
|
|
a4eb901f54 | ||
|
|
a6d7ccf209 | ||
|
|
d5f402d8c6 | ||
|
|
94accb2fc7 | ||
|
|
b4d1d896af | ||
|
|
9f15cbd1bd | ||
|
|
5cd0db7fc2 | ||
|
|
2f8fb284e0 | ||
|
|
7a24d2b40b | ||
|
|
639dba992f | ||
|
|
8149fa4c9b | ||
|
|
f7854c4d17 | ||
|
|
57191011f6 | ||
|
|
80ea367e86 | ||
|
|
5a58d9854e | ||
|
|
1911c4e4d3 | ||
|
|
587185d7ca | ||
|
|
2589a07d5b | ||
|
|
96db249ec3 | ||
|
|
7cc3cd1861 | ||
|
|
f966e3dacd | ||
|
|
0257ba25ee | ||
|
|
d6e9e1b9ad | ||
|
|
8c143b9f1d | ||
|
|
580f31aa92 | ||
|
|
198220fee0 | ||
|
|
b27b4320eb | ||
|
|
50681e94de | ||
|
|
8d33404471 | ||
|
|
555f303d71 | ||
|
|
c10829cb59 | ||
|
|
75ef977af7 | ||
|
|
632f1cacc1 | ||
|
|
3ed13a724b | ||
|
|
d121ce38a0 | ||
|
|
6aca798337 | ||
|
|
7ca94fb86d | ||
|
|
7d6855108a | ||
|
|
43dcf964eb | ||
|
|
ac4f0092a0 | ||
|
|
7301979853 | ||
|
|
e7d7a8170e | ||
|
|
876498d1eb | ||
|
|
3be3d684c2 | ||
|
|
4d096639bc | ||
|
|
4003fcee5e | ||
|
|
24976b0b18 | ||
|
|
23b89f19c9 | ||
|
|
e1871db87e | ||
|
|
8085996e7f | ||
|
|
c0d856f5bb | ||
|
|
cb816ff88c | ||
|
|
5814ba61a0 | ||
|
|
47b0c08a9f | ||
|
|
988eaa952c | ||
|
|
4a74358841 | ||
|
|
35f41f6a1d | ||
|
|
d0aa909e23 | ||
|
|
ecb5a962fe | ||
|
|
170ebb1f69 | ||
|
|
818496052b | ||
|
|
593974c3ba | ||
|
|
bc14f0eb17 | ||
|
|
8fee3c22cb | ||
|
|
f040981a26 | ||
|
|
894f79e85e | ||
|
|
f96381c532 | ||
|
|
b60563f9ec | ||
|
|
4e4fe42d78 | ||
|
|
1d2a704d20 | ||
|
|
2e0d493a20 | ||
|
|
37207fe11e | ||
|
|
5846246979 | ||
|
|
917a5230d6 | ||
|
|
61f33305f8 | ||
|
|
cfd4928f35 | ||
|
|
89731ecc00 | ||
|
|
4d5f66b2ed | ||
|
|
9815e50527 | ||
|
|
2422c0617b | ||
|
|
7011fe7fc1 | ||
|
|
cbc140cc8e | ||
|
|
744ee56b12 | ||
|
|
ba8f7bc4e6 | ||
|
|
499fce381e | ||
|
|
eac0eb7881 | ||
|
|
24b5372b33 | ||
|
|
5c61905f0e | ||
|
|
32e419cc84 | ||
|
|
89257ed01f | ||
|
|
a51e13d781 | ||
|
|
963f1afd0a | ||
|
|
94e760238a | ||
|
|
e0baec67b1 | ||
|
|
ad383a25e0 | ||
|
|
0b0b1920dc | ||
|
|
b7ff04918d | ||
|
|
ab7e02511c | ||
|
|
b74f2a54b5 | ||
|
|
ddcef18796 | ||
|
|
962c93df68 | ||
|
|
4de6bf5f15 | ||
|
|
7b0173cd92 | ||
|
|
14ecc50063 | ||
|
|
3593d7e84c | ||
|
|
9a199b5e98 | ||
|
|
b2ac9c284d | ||
|
|
2606d77b9d | ||
|
|
a280eab275 | ||
|
|
515178a55d | ||
|
|
c2d530c6a9 | ||
|
|
5461495672 | ||
|
|
76bc7542e3 | ||
|
|
b383e76259 | ||
|
|
d60d874245 | ||
|
|
07a5141e0d | ||
|
|
3be554e7b5 | ||
|
|
4bf1438d37 | ||
|
|
1c8e0c82bf | ||
|
|
194286b793 | ||
|
|
ee323bff2a | ||
|
|
f23933cd51 | ||
|
|
f6b5e55922 | ||
|
|
c792dc00f2 | ||
|
|
71f8c3d7c7 | ||
|
|
a81f697336 | ||
|
|
52d4e80c00 | ||
|
|
d8260be26b | ||
|
|
0d66b135a6 | ||
|
|
1342afdcf1 | ||
|
|
241f3941de | ||
|
|
5d17ecc875 | ||
|
|
282c805eb7 | ||
|
|
3f987fbd74 | ||
|
|
1d825e8ba7 | ||
|
|
7391eeab16 | ||
|
|
153548e1c9 | ||
|
|
e6ffa26b48 | ||
|
|
30f925a33d | ||
|
|
8fd2d84fa4 | ||
|
|
df494570af | ||
|
|
f46e700a28 | ||
|
|
28a8c8cb2e | ||
|
|
4d4133db17 | ||
|
|
120e5dab7b | ||
|
|
4a5e0b9a0e | ||
|
|
147f733168 | ||
|
|
8842c9b930 | ||
|
|
6a7984adfe | ||
|
|
601e0eba5e | ||
|
|
4cacfb312f | ||
|
|
d5114737fd | ||
|
|
0ba3dca017 | ||
|
|
57e7c4d781 | ||
|
|
bf7832c37a | ||
|
|
2ab3181220 | ||
|
|
96fead56f4 | ||
|
|
d12a03afb2 | ||
|
|
f03cdb6370 | ||
|
|
895e006577 | ||
|
|
595ba7a05b | ||
|
|
c2064b42a2 | ||
|
|
f4bb014558 | ||
|
|
2d835e7e47 | ||
|
|
5753b4d3a0 | ||
|
|
87f68d993c | ||
|
|
3826889094 | ||
|
|
897d69d466 | ||
|
|
82f02c752b | ||
|
|
23f42fcb05 | ||
|
|
f5450155e1 | ||
|
|
fca312892f | ||
|
|
f9d42c747f | ||
|
|
70cb614dd9 | ||
|
|
44d8849387 | ||
|
|
06c62c95a3 | ||
|
|
5399e1ccb7 | ||
|
|
4914f9d8e4 | ||
|
|
1f624e8f04 | ||
|
|
44bfa2d248 | ||
|
|
01cb613ac1 | ||
|
|
5e76628a60 | ||
|
|
4d3ad643b8 | ||
|
|
36de2be344 | ||
|
|
7d57dfba18 | ||
|
|
70728b9425 | ||
|
|
e39ea41859 | ||
|
|
a9e59ceb15 | ||
|
|
440dcafbf3 | ||
|
|
c76f9909a2 | ||
|
|
fc62ea3678 | ||
|
|
6c9ae2df08 | ||
|
|
763bf1361e | ||
|
|
b31731e4ce | ||
|
|
25c5428af8 | ||
|
|
5edf678070 | ||
|
|
2031562612 | ||
|
|
22c153fe7b | ||
|
|
b52967df83 | ||
|
|
119fe2bfe8 | ||
|
|
d1e5d22bb2 | ||
|
|
ea96df6f46 | ||
|
|
561be072fd | ||
|
|
a940edf149 | ||
|
|
e1d17a6621 | ||
|
|
3346a5d069 | ||
|
|
034597aebe | ||
|
|
c9c6db0307 | ||
|
|
df7ad44038 | ||
|
|
9779740f37 | ||
|
|
de82a95c8c | ||
|
|
0aaaa64320 | ||
|
|
405cdd23c8 | ||
|
|
22c7977472 | ||
|
|
f1015223ed | ||
|
|
fbd0e803f5 | ||
|
|
5aaa3eaf10 | ||
|
|
47aa81f887 | ||
|
|
7a58577c40 | ||
|
|
aeadc2d08d | ||
|
|
f77a65d9d4 | ||
|
|
dfd39434e3 | ||
|
|
7790c1ad9c | ||
|
|
36947c99bc | ||
|
|
540481040b | ||
|
|
719918611c | ||
|
|
aa94e40f1a | ||
|
|
8b7f58ab3c | ||
|
|
7bb8856626 | ||
|
|
612e5331ad | ||
|
|
01e5cb02a3 | ||
|
|
cde014ca66 | ||
|
|
460bc80b0e | ||
|
|
e5529bf0b8 | ||
|
|
9edbe5b45d | ||
|
|
eff6e0fd5e | ||
|
|
f9c524f923 | ||
|
|
7a8a688789 | ||
|
|
891ac58db7 | ||
|
|
8c8ca254b1 | ||
|
|
915ece3cba | ||
|
|
a92eaad364 | ||
|
|
502cd1efc7 | ||
|
|
3b43f14bd3 | ||
|
|
aefedb080a | ||
|
|
0685de255a | ||
|
|
9dda965075 | ||
|
|
2cf255f928 | ||
|
|
ea6fe4f1f9 | ||
|
|
e3823e3854 | ||
|
|
ba5ee4bd59 | ||
|
|
07f4c06751 | ||
|
|
6e35da0794 | ||
|
|
46250d0a36 | ||
|
|
7e6fe21ee8 | ||
|
|
ad1f779a36 | ||
|
|
77eb37e301 | ||
|
|
49c320b36f | ||
|
|
73b63eb2a5 | ||
|
|
28621261c8 | ||
|
|
ac9efccb00 | ||
|
|
124bc20fe4 | ||
|
|
9e09ebcd19 | ||
|
|
8957836cb5 | ||
|
|
19bedc8578 | ||
|
|
adb9c767ca | ||
|
|
57c1298fdf | ||
|
|
5e7ca2acf8 | ||
|
|
dabfe59776 | ||
|
|
f5defbd9b7 | ||
|
|
9454f93684 | ||
|
|
025b1100d2 | ||
|
|
3f61543a91 | ||
|
|
853149f4fe | ||
|
|
ba3c92d1c5 | ||
|
|
a2aa9d8bb8 | ||
|
|
c75e5b7c82 | ||
|
|
c3252e964e | ||
|
|
d54f209fd6 | ||
|
|
d9cc300f3b | ||
|
|
764e441b81 | ||
|
|
08cb20b3f9 | ||
|
|
046103d30b | ||
|
|
292497ba01 | ||
|
|
3cd1a47af6 | ||
|
|
1eaa6d5152 | ||
|
|
bfced5ecee | ||
|
|
51faaf23bd | ||
|
|
349cc4710f | ||
|
|
bbde48daa1 | ||
|
|
7ee23780a4 | ||
|
|
1e648d27d6 | ||
|
|
d9fe797e65 | ||
|
|
43763bae6a | ||
|
|
322aab6269 | ||
|
|
9bc057e191 | ||
|
|
b84e9eae1a | ||
|
|
125f9f6a8a | ||
|
|
ef56beeb67 | ||
|
|
0914a1cddd | ||
|
|
a7cc2d6484 | ||
|
|
1049e53f4c | ||
|
|
0eab1dd930 | ||
|
|
3ddaab1812 | ||
|
|
8487fade66 | ||
|
|
9262567bff | ||
|
|
00dd235681 | ||
|
|
51e89c24b2 | ||
|
|
80c1f0da8e | ||
|
|
100d711362 | ||
|
|
5ac7366170 | ||
|
|
ae45afeab4 | ||
|
|
f5f94a1ba7 | ||
|
|
4e8d388799 | ||
|
|
a2f8d160d5 | ||
|
|
4306e0bc94 | ||
|
|
92928f5ea4 | ||
|
|
4c203ed17c | ||
|
|
d592b29ae7 | ||
|
|
fed38c19f8 | ||
|
|
03e774325c | ||
|
|
78cb9bc6ed | ||
|
|
e3d83679ec | ||
|
|
c9cba49af2 | ||
|
|
ca8584134a | ||
|
|
42df532834 | ||
|
|
4cacaf8f66 | ||
|
|
bc83f2f618 | ||
|
|
39a7ea650f | ||
|
|
29c06c6d6a | ||
|
|
4e42d460b0 | ||
|
|
361e24e1e7 | ||
|
|
c32a6e4c6f | ||
|
|
56f3b0c295 | ||
|
|
5a3213de7c | ||
|
|
a1926fa40c | ||
|
|
e8346601d8 | ||
|
|
816b8237e2 | ||
|
|
f6d1c72f04 | ||
|
|
09b51fab5d | ||
|
|
3fb7dc1743 | ||
|
|
f4b791db8c | ||
|
|
9cb44715ee | ||
|
|
34658f5bf6 | ||
|
|
1771f85608 | ||
|
|
0a9a9efcf3 | ||
|
|
b27c18fb1e | ||
|
|
4051528619 | ||
|
|
966f57e21c | ||
|
|
26547830fb | ||
|
|
b82556ae25 | ||
|
|
4c4d5c60ef | ||
|
|
0fca89625e | ||
|
|
47b10a7742 | ||
|
|
bd7fed59fd | ||
|
|
ac17cc58d4 | ||
|
|
f3af975808 | ||
|
|
08022abc2d | ||
|
|
cbd4c73f17 | ||
|
|
9ef040228f | ||
|
|
446af992dc | ||
|
|
372a9629c1 | ||
|
|
1e59708d57 | ||
|
|
d5e1a5239e | ||
|
|
341249e471 | ||
|
|
69182ebaed | ||
|
|
e6803347f5 | ||
|
|
0dbad7d852 | ||
|
|
8f787ac240 | ||
|
|
dd7e2539fd | ||
|
|
079ba173e7 | ||
|
|
720180b9d4 | ||
|
|
1c2d96a428 | ||
|
|
7fcea33960 | ||
|
|
62802829e3 | ||
|
|
cce10d19b3 | ||
|
|
f524df3661 | ||
|
|
53798ca2b2 | ||
|
|
5207ade415 | ||
|
|
0a7d0ef76e | ||
|
|
42d0b173ba | ||
|
|
dda3d32d70 | ||
|
|
1281db945a | ||
|
|
e5db30cabf | ||
|
|
c7ac536631 | ||
|
|
8246fb0177 | ||
|
|
1ec9b3aa0d | ||
|
|
affaaecfb9 | ||
|
|
cc7ba3518e | ||
|
|
d942732a0a | ||
|
|
bc032919d8 | ||
|
|
96675c27b8 | ||
|
|
c249dfa1b7 | ||
|
|
633876903d | ||
|
|
2dd5f95279 | ||
|
|
8a6fcaa4c8 | ||
|
|
c64b1cd2fe | ||
|
|
b817656159 | ||
|
|
5bccad4e4b | ||
|
|
67f780367f | ||
|
|
e90e4590f2 | ||
|
|
3ecbe6226f | ||
|
|
a71f08582e | ||
|
|
f719e4da75 | ||
|
|
bfd710100c | ||
|
|
8fe7da0cfd | ||
|
|
eeb0411736 | ||
|
|
f5fe45832f | ||
|
|
48fa4a66e0 | ||
|
|
38736ca7bd | ||
|
|
95b7561599 | ||
|
|
d546b36c84 | ||
|
|
ec2d81223e | ||
|
|
97fe1591d9 | ||
|
|
cbcd671c5d | ||
|
|
4eb376a28d | ||
|
|
04664370c7 | ||
|
|
ca68a03062 | ||
|
|
249eb0a085 | ||
|
|
00c26ba6bf | ||
|
|
0ed2e8850a | ||
|
|
5a97fd4572 | ||
|
|
446a6ec0c7 | ||
|
|
16d83b9a69 | ||
|
|
7bc4ae6da8 | ||
|
|
7e2aa68ab6 | ||
|
|
789312e427 | ||
|
|
ddfa8bd6a4 | ||
|
|
d81b34c48f | ||
|
|
00e07f6d85 | ||
|
|
82de57b51b | ||
|
|
8eb3297670 | ||
|
|
3436e5ab25 | ||
|
|
ad327ebf31 | ||
|
|
0d4f454ad5 | ||
|
|
c1237abda6 | ||
|
|
a66438f908 | ||
|
|
8136303d07 | ||
|
|
76b46ea633 | ||
|
|
5156796d61 | ||
|
|
c192307dcf | ||
|
|
5bf3169323 | ||
|
|
c0fcd98ef9 | ||
|
|
4b4bbf050c | ||
|
|
704976db95 | ||
|
|
8bd4b3f833 | ||
|
|
5993ff13a3 | ||
|
|
e76b531c35 | ||
|
|
af2b1bd863 | ||
|
|
5d934cf0b4 | ||
|
|
63ad96223a | ||
|
|
4aadb70b4d | ||
|
|
9fed8c5977 | ||
|
|
b0b5056241 | ||
|
|
ab3b3b9c03 | ||
|
|
66aeaeb6f5 | ||
|
|
861f45621b | ||
|
|
c2943700d3 | ||
|
|
4214c05a0a | ||
|
|
5e2156e1ac | ||
|
|
4bc17baa5a | ||
|
|
12204f19bc | ||
|
|
6f45f8a08a | ||
|
|
ec11858386 | ||
|
|
0f008d3a79 | ||
|
|
d90cc02dc7 | ||
|
|
67284c22a6 | ||
|
|
64020d1638 | ||
|
|
a3f0be31f8 | ||
|
|
67e5e83714 | ||
|
|
4faf756f66 | ||
|
|
bffbbd96e1 | ||
|
|
34cb340e23 | ||
|
|
e2e8a47460 | ||
|
|
0b192df612 | ||
|
|
4780a4d9a1 | ||
|
|
5612a50ae2 | ||
|
|
31b10b655b | ||
|
|
7fe343ca94 | ||
|
|
4c59ec23d1 | ||
|
|
ee50e06936 | ||
|
|
48b8a18ada | ||
|
|
68ed9f664b | ||
|
|
ebc5a3a800 | ||
|
|
6633399c6c | ||
|
|
74a76eef9b | ||
|
|
23981df7df | ||
|
|
816a23bea8 | ||
|
|
2bed62ce5c | ||
|
|
521eb32640 | ||
|
|
0eb755927a | ||
|
|
1ac394a5c2 | ||
|
|
b7feff7c3e | ||
|
|
fd8c6885d9 | ||
|
|
8e3d684f96 | ||
|
|
1b34dda41b | ||
|
|
a7b072071c | ||
|
|
07d4e1f07d | ||
|
|
9632e323b9 | ||
|
|
f77ab5063e | ||
|
|
7a9dd28d13 | ||
|
|
c47a7a261b | ||
|
|
b5b6d5c1a7 | ||
|
|
3374645a8a | ||
|
|
da2b769d83 | ||
|
|
d8627fe912 | ||
|
|
693b8201bd | ||
|
|
990558f3e9 | ||
|
|
eed562f89a | ||
|
|
997ba5b632 | ||
|
|
de8d2d027f | ||
|
|
b070a9eadf | ||
|
|
d63405a43c | ||
|
|
6104a72f93 | ||
|
|
8f321bdf52 | ||
|
|
3025de75af | ||
|
|
5c59e16c9d | ||
|
|
66fd5fc23b | ||
|
|
ec6dd06039 | ||
|
|
0dfaa7fc02 | ||
|
|
1f55285563 | ||
|
|
f961c5ff69 | ||
|
|
4c55bbe84e | ||
|
|
ffeade219f | ||
|
|
94ea44f86c | ||
|
|
1859c289d3 | ||
|
|
24449c4ccb | ||
|
|
54587cf6ec | ||
|
|
011da6cb8c | ||
|
|
47411053af | ||
|
|
6a35760f1f | ||
|
|
304a4f2540 | ||
|
|
c907eeaead | ||
|
|
7635ec807d | ||
|
|
976dc82e55 | ||
|
|
2ab3492319 | ||
|
|
28fcdb480a | ||
|
|
59166f5149 | ||
|
|
f4038863e2 | ||
|
|
ed99068e15 | ||
|
|
823c317c0c | ||
|
|
4a221cb89e | ||
|
|
80a6ae1e66 | ||
|
|
e3933da174 | ||
|
|
6af106def0 | ||
|
|
ecb6eb504e | ||
|
|
a5239931ae | ||
|
|
86b2124a20 | ||
|
|
4f4d69e894 | ||
|
|
c402c54b8b | ||
|
|
505b219276 | ||
|
|
69f12a0069 | ||
|
|
1f8ab9e606 | ||
|
|
20bec5b4fd | ||
|
|
5ca7bc097e | ||
|
|
a1350a3bf7 | ||
|
|
1013c44229 | ||
|
|
b893fe749d | ||
|
|
bd24478a5d | ||
|
|
45e1ab641f | ||
|
|
22559aaeb3 | ||
|
|
6760f395ea | ||
|
|
8bff78dad7 | ||
|
|
0b3f92395d | ||
|
|
04a7a748cc | ||
|
|
4f873f1237 | ||
|
|
218f4125de | ||
|
|
0a107d6b92 | ||
|
|
8f564b57fe | ||
|
|
34d1147eb0 | ||
|
|
4a0b42fe1e | ||
|
|
ef04a7c923 | ||
|
|
7ac7081499 | ||
|
|
39c4cb7c9e | ||
|
|
7d32b5b957 | ||
|
|
7dbb611a31 | ||
|
|
0a1ccf23c8 | ||
|
|
58a5834839 | ||
|
|
af93a2c7cc | ||
|
|
7acdb1ca78 | ||
|
|
14e4fb4755 | ||
|
|
6b0d991d1d | ||
|
|
7a81dae844 | ||
|
|
137d445d78 | ||
|
|
8216c17939 | ||
|
|
7e17ae6023 | ||
|
|
e2ce7a824b | ||
|
|
a9a3650565 | ||
|
|
2a61872f8a | ||
|
|
0a75ddd78f | ||
|
|
3bddcd9e3d | ||
|
|
23e6b96c43 | ||
|
|
a22048c5dc | ||
|
|
0cf9e74cb2 | ||
|
|
497837bc4d | ||
|
|
2db47f04c9 | ||
|
|
7404fb931a | ||
|
|
70eeead4ae | ||
|
|
2e8eac3e44 | ||
|
|
d650d0570b | ||
|
|
c120c60094 | ||
|
|
f5e4399856 | ||
|
|
b2d471038a | ||
|
|
bbeb961bd5 | ||
|
|
b023f23e6c | ||
|
|
f47ecdb4ad | ||
|
|
2529ac0ca6 | ||
|
|
44627def1e | ||
|
|
f578e0af93 | ||
|
|
bd208c9f1d | ||
|
|
56c7b4556f | ||
|
|
4bd89164cd | ||
|
|
2c0284aae5 | ||
|
|
542178bb95 | ||
|
|
ff6b97fb15 | ||
|
|
9fb2047017 | ||
|
|
ddad430b16 | ||
|
|
30b5b1f168 | ||
|
|
f19bcaf4f2 | ||
|
|
d5361306f3 | ||
|
|
f0c83b3d5a | ||
|
|
397e00067a | ||
|
|
2047a1c1f5 | ||
|
|
fa176863e4 | ||
|
|
9df9583dae | ||
|
|
9e9294757a | ||
|
|
331cf153db | ||
|
|
4c9d876f3f | ||
|
|
ca8ce3c748 | ||
|
|
c6bc213629 | ||
|
|
47e22673f7 | ||
|
|
6276c71d9a | ||
|
|
ad86958d59 | ||
|
|
3787e743f7 | ||
|
|
1cf6ec2327 | ||
|
|
f733c6b52e | ||
|
|
81c9c905de | ||
|
|
604b5b8c26 | ||
|
|
f12430fa5d | ||
|
|
06ba9debd2 | ||
|
|
19715623b3 | ||
|
|
d885ca903c | ||
|
|
5cafdc1ce6 | ||
|
|
eee2215bda | ||
|
|
2b188ce191 | ||
|
|
474d46c354 | ||
|
|
0c9c9d03e4 | ||
|
|
57de49ed0a | ||
|
|
7f55d09e97 | ||
|
|
f02610dd2c | ||
|
|
d7afcd0c19 | ||
|
|
7ee17cd116 | ||
|
|
dbb2d8683f | ||
|
|
c239249d8e | ||
|
|
fff58fb461 | ||
|
|
60be64bf5a | ||
|
|
7fd4abbfe1 | ||
|
|
5fdb81885f | ||
|
|
bd4795dba7 | ||
|
|
8f3477b6ce | ||
|
|
2976a83b9f | ||
|
|
073f65577b | ||
|
|
381644c5ab | ||
|
|
b1af1bd21f | ||
|
|
70a5cd9f40 | ||
|
|
dc881ea1fe | ||
|
|
3b57d51d53 | ||
|
|
371307ad92 | ||
|
|
5c9a062ecc | ||
|
|
de1f9925a5 | ||
|
|
b3fbe630a0 | ||
|
|
5bede10c9f | ||
|
|
86fcef5db0 | ||
|
|
238f78aa94 | ||
|
|
11b77c2fd6 | ||
|
|
76b80dff7f | ||
|
|
dfca085423 | ||
|
|
cf24576e46 | ||
|
|
62f1dbf3e2 | ||
|
|
6aaedc5fa5 | ||
|
|
bda092db4e | ||
|
|
50e9fca03a | ||
|
|
43a68dc75d | ||
|
|
3d8298ab28 | ||
|
|
4d4687361a | ||
|
|
de9cffd28a | ||
|
|
3903b93b15 | ||
|
|
41d58a79d2 | ||
|
|
3425b762fe | ||
|
|
fa26384174 | ||
|
|
67a365111c | ||
|
|
ee57201b52 | ||
|
|
9e4e911de1 | ||
|
|
241cf26867 | ||
|
|
0468fe6fcd | ||
|
|
078ded00e5 | ||
|
|
d6c5f3cedd | ||
|
|
a0c1d51635 | ||
|
|
87ce7ec67c | ||
|
|
7f586bd2bb | ||
|
|
251e30e5b4 | ||
|
|
07f823f19e | ||
|
|
78e08763c9 | ||
|
|
463edf202d | ||
|
|
df64dd2187 | ||
|
|
d15d40f8d9 | ||
|
|
52c12d5bf6 | ||
|
|
e2cbb7c81b | ||
|
|
20e2b36756 | ||
|
|
29e05f2b3f | ||
|
|
fa3ee309b4 | ||
|
|
037a9af08e | ||
|
|
0d37abe86b | ||
|
|
d9286fe159 | ||
|
|
9e22967825 | ||
|
|
fe968a4460 | ||
|
|
a321381b94 | ||
|
|
a22352015d | ||
|
|
91dceda3d5 | ||
|
|
6c106ec216 | ||
|
|
d93bf4b996 | ||
|
|
86e9616018 | ||
|
|
281122754e | ||
|
|
30e99e419b | ||
|
|
0fd71cf8f9 | ||
|
|
eb7f112fcb | ||
|
|
a0bb112ebc | ||
|
|
5e7ea957d8 | ||
|
|
036378e00c | ||
|
|
1de4cf33b3 | ||
|
|
8b92970433 | ||
|
|
c7ec051caa | ||
|
|
9697bc32c8 | ||
|
|
6870fd7681 | ||
|
|
5338fcdee4 | ||
|
|
702a9de01d | ||
|
|
381e5465e7 | ||
|
|
3332c74e48 | ||
|
|
a5283d2178 | ||
|
|
a2bc9a1e09 | ||
|
|
f553d5a1c9 | ||
|
|
820a1d39c8 | ||
|
|
9394028bd9 | ||
|
|
01a5d5daf9 | ||
|
|
c691aa7131 | ||
|
|
b3a7327bd2 | ||
|
|
698b534caa | ||
|
|
29f1545c98 | ||
|
|
38111aec46 | ||
|
|
e945cca3a4 | ||
|
|
3ce86bbc71 | ||
|
|
70bee2b278 | ||
|
|
9374c29050 | ||
|
|
85eff30f18 | ||
|
|
07cec86849 | ||
|
|
52ab5d0a4d | ||
|
|
13b7290eca | ||
|
|
3d105e77c7 | ||
|
|
88e87f8850 | ||
|
|
80cb90d4a4 | ||
|
|
9336c33e4f | ||
|
|
f33c6ad621 | ||
|
|
00192bb235 | ||
|
|
bcf8227c2a | ||
|
|
ddde4bb78a | ||
|
|
aaa3aafc43 | ||
|
|
0c7236fc65 | ||
|
|
27037be4db | ||
|
|
3a276447b6 | ||
|
|
538fc8b875 | ||
|
|
a01e50e17f | ||
|
|
6e4e20009b | ||
|
|
3256544542 | ||
|
|
c9334b0fcd | ||
|
|
fb2ed0031b | ||
|
|
36a6a1da9c | ||
|
|
9a5f66247d | ||
|
|
e915c380e1 | ||
|
|
00733493f8 | ||
|
|
ff8505d463 | ||
|
|
aff2ad4caa | ||
|
|
8de7b8fef1 | ||
|
|
3eb07b84ae | ||
|
|
1ae8aef62a | ||
|
|
0c8429dbc0 | ||
|
|
a2b4334717 | ||
|
|
1bed6fcc4e | ||
|
|
949d747bf6 | ||
|
|
fc50750177 | ||
|
|
c88c677147 | ||
|
|
996c3bcb67 | ||
|
|
287d557df6 | ||
|
|
6929a449e0 | ||
|
|
9e56ded383 | ||
|
|
80bdf7abcd | ||
|
|
f9dc85d792 | ||
|
|
52c3ea73a7 | ||
|
|
a79ed82edc | ||
|
|
ea15cf034d | ||
|
|
c60f524dfb | ||
|
|
44b3d23c6d | ||
|
|
0dddae74b6 | ||
|
|
50fd544966 | ||
|
|
c4a2b4eb53 | ||
|
|
6aeba41e73 | ||
|
|
48d75f5289 | ||
|
|
8f5bb2e4a0 | ||
|
|
1b5c5e872b | ||
|
|
3590e2325e | ||
|
|
fe40f4a5a5 | ||
|
|
fc9e43113e | ||
|
|
9e3940cd0d | ||
|
|
1e6fe5a7f5 | ||
|
|
ff9a5de363 | ||
|
|
af81ab813d | ||
|
|
9386a6d995 | ||
|
|
a62f6077ea | ||
|
|
d0c7a84da9 | ||
|
|
457995c98d | ||
|
|
f8f296d9bd | ||
|
|
c7d300d956 | ||
|
|
f4e3a02775 | ||
|
|
4ca7261c2d | ||
|
|
65de125a35 | ||
|
|
ffa3d44778 | ||
|
|
ad4953c21f | ||
|
|
fd7cff88d9 | ||
|
|
28bd8c8413 | ||
|
|
134c4195ec | ||
|
|
dc17bcb8fb | ||
|
|
489056f14a | ||
|
|
d8847a0d1c | ||
|
|
c2400d6df6 | ||
|
|
9d3b32781e | ||
|
|
f17b519acb | ||
|
|
87c867fae9 | ||
|
|
acf8eb3875 | ||
|
|
9d927bb510 | ||
|
|
b74ba16a95 | ||
|
|
589934792f | ||
|
|
3f552485cf | ||
|
|
69f9b6a11c | ||
|
|
393dab04e5 | ||
|
|
5dc1a4f316 | ||
|
|
846f71ee05 | ||
|
|
eecd5ec27f | ||
|
|
8f09c74c51 | ||
|
|
bcf693c827 | ||
|
|
ae59418657 | ||
|
|
33db2438de | ||
|
|
2d612a6ea6 | ||
|
|
7a3b237f3f | ||
|
|
a2f71091f4 | ||
|
|
db83163c81 | ||
|
|
f6f13004dc | ||
|
|
a5ce70aa7d | ||
|
|
bcc1dd2443 | ||
|
|
c380166172 | ||
|
|
9381966367 | ||
|
|
353db4a569 | ||
|
|
6d145b7f92 | ||
|
|
0aa1b10d0c | ||
|
|
6be51335c6 | ||
|
|
9d54835d01 | ||
|
|
9504c337e6 | ||
|
|
f4eb982ac0 | ||
|
|
d374c3916f | ||
|
|
bafdd8e2c0 | ||
|
|
78db3add9d | ||
|
|
59bdeee953 | ||
|
|
45fc90e1a6 | ||
|
|
511d60eba6 | ||
|
|
51f81a61e3 | ||
|
|
fe2c05f6bf | ||
|
|
7ffefe09f1 | ||
|
|
41849c2cc4 | ||
|
|
4695e1619c | ||
|
|
8dbfe8f78c | ||
|
|
abfb05cbb4 | ||
|
|
5d2eac8479 | ||
|
|
f7a4841081 | ||
|
|
7f77950d2c | ||
|
|
7f41209288 | ||
|
|
59453b1004 | ||
|
|
c82a2a497c | ||
|
|
a7392aecd3 | ||
|
|
2bc4a9c6c1 | ||
|
|
094b680736 | ||
|
|
e2d12eea92 | ||
|
|
20bee13047 | ||
|
|
b1b38d3c68 | ||
|
|
2318eebe99 | ||
|
|
9234b31058 | ||
|
|
af6af01717 | ||
|
|
fcb79a75fb | ||
|
|
01fb538344 | ||
|
|
807da9b463 | ||
|
|
5fb74436a0 | ||
|
|
d38cbcce10 | ||
|
|
0f253287ec | ||
|
|
4123508bb2 | ||
|
|
bd073773d8 | ||
|
|
81fbbedb2f | ||
|
|
1cf6a4cc7c | ||
|
|
8244e5ee1a | ||
|
|
b4112523b1 | ||
|
|
baa1b7bb9b | ||
|
|
19c16e67fa | ||
|
|
d56458321f | ||
|
|
4672b267d3 | ||
|
|
c43f45b36a | ||
|
|
93f188b106 | ||
|
|
76ab6dcf18 | ||
|
|
dce1458a65 | ||
|
|
bcef2c11d7 | ||
|
|
3f1097cdba | ||
|
|
f1b54be399 | ||
|
|
fab5246d20 | ||
|
|
bada3e794d | ||
|
|
8fba50ecbf | ||
|
|
6a4cc980af | ||
|
|
150c408da8 | ||
|
|
5827d109f3 | ||
|
|
b5058db9ab | ||
|
|
dca5057dcd | ||
|
|
5e0ee866f6 | ||
|
|
8add0018e4 | ||
|
|
5ede0750c6 | ||
|
|
bd944d09e0 | ||
|
|
b9fbf7f89f | ||
|
|
96f506169a | ||
|
|
09ff79c694 | ||
|
|
c3c5415b15 | ||
|
|
fb91b3114a | ||
|
|
2892308a61 | ||
|
|
d1e0d6a911 | ||
|
|
f5c24f5975 | ||
|
|
90b9a98a5d | ||
|
|
79d00d2acc | ||
|
|
ef0546a4d0 | ||
|
|
f999911691 | ||
|
|
d018396336 | ||
|
|
77cd5a0de0 | ||
|
|
df310de8ee | ||
|
|
783c2dc693 | ||
|
|
d83622d4ac | ||
|
|
ccf824f925 | ||
|
|
2e44257660 | ||
|
|
12e2deefa8 | ||
|
|
320c6e0037 | ||
|
|
03a8d14c26 | ||
|
|
c4e3217b72 | ||
|
|
b31e8409ff | ||
|
|
9d218e2b5b | ||
|
|
95b77ece6f | ||
|
|
f5fbb8684f | ||
|
|
a79c1a411f | ||
|
|
68a5a4a034 | ||
|
|
0a65915b40 | ||
|
|
12896a5964 | ||
|
|
4c84cb5563 | ||
|
|
03e9524b7e | ||
|
|
4e275828c5 | ||
|
|
165bb9b371 | ||
|
|
7a8b46a42e | ||
|
|
841c7049ce | ||
|
|
211c4f5a58 | ||
|
|
e87a4df2d5 | ||
|
|
ffe45c60a3 | ||
|
|
6455da26bd | ||
|
|
b6084ce6f1 | ||
|
|
91d7958a74 | ||
|
|
f388eedbe1 | ||
|
|
e17664b119 | ||
|
|
5765c7e4da | ||
|
|
13ffd6201b | ||
|
|
27b2501e65 | ||
|
|
3edd689e09 | ||
|
|
4de25d8087 | ||
|
|
bd2f2e88cc | ||
|
|
5ee5312f98 | ||
|
|
dc612cf329 | ||
|
|
5014b501c3 | ||
|
|
8c4c66b2c3 | ||
|
|
4c64ccdafa | ||
|
|
11a5136ce0 | ||
|
|
f6a76baaff | ||
|
|
3637aa5041 | ||
|
|
29fc759acb | ||
|
|
7b9aae2779 | ||
|
|
43745f1dd5 | ||
|
|
003aeba6b5 | ||
|
|
6dd010f54a | ||
|
|
edb7d70019 | ||
|
|
d167d070a0 | ||
|
|
f56fb5a896 | ||
|
|
31e06f152f | ||
|
|
22fff674e8 | ||
|
|
80fa125d68 | ||
|
|
d133d7f701 | ||
|
|
db7000695f | ||
|
|
0c0970ccab | ||
|
|
2f912ca46b | ||
|
|
ad61b6a672 | ||
|
|
8b75e6af56 | ||
|
|
0af0d697db | ||
|
|
74dce44ae9 | ||
|
|
db2a5c813e | ||
|
|
aec790d0e6 | ||
|
|
5432ae5d44 | ||
|
|
dcd9ca22e2 | ||
|
|
5514f3c5ea | ||
|
|
c4458f4151 | ||
|
|
8630e33bf6 | ||
|
|
f6bc0b70d1 | ||
|
|
56450ba26e | ||
|
|
f168e2ebc5 | ||
|
|
e923683866 | ||
|
|
91333ec8d3 | ||
|
|
65a646ea08 | ||
|
|
8e98416f47 | ||
|
|
e4e6e5b049 | ||
|
|
173dc604a4 | ||
|
|
a8c0e40278 | ||
|
|
90fdd6824c | ||
|
|
7955df305a | ||
|
|
783df58a3b | ||
|
|
f7d8c1e1aa | ||
|
|
a67d97f104 | ||
|
|
4e18984c5e | ||
|
|
d1e40118fa | ||
|
|
61cde1ceb0 | ||
|
|
2039a6d814 | ||
|
|
e994710532 | ||
|
|
cdc1e8d7c9 | ||
|
|
c359f1ed02 | ||
|
|
b5aebd8ca2 | ||
|
|
24b7b0cacd | ||
|
|
0f83368472 | ||
|
|
5b454a2e97 | ||
|
|
081fe363eb | ||
|
|
b604bfeeca | ||
|
|
358fa5f31d | ||
|
|
cf6a7895bf | ||
|
|
04b0f51565 | ||
|
|
79679411ae | ||
|
|
1ed04f3a7d | ||
|
|
9903ce8559 | ||
|
|
67d716f4fe | ||
|
|
b5d9e6f2e9 | ||
|
|
e1a9b1cf06 | ||
|
|
f9748dc756 | ||
|
|
cf9447c758 | ||
|
|
4c6642169a | ||
|
|
bf00e32685 | ||
|
|
a8792931ec | ||
|
|
be2a330da5 | ||
|
|
af2026ecdf | ||
|
|
3014976cd0 | ||
|
|
6d6e668a41 | ||
|
|
b45fc5c931 | ||
|
|
2707a601bc | ||
|
|
19850957f7 | ||
|
|
3eee221ecf | ||
|
|
cbb5dd663c | ||
|
|
109ce230c7 | ||
|
|
79de159da2 | ||
|
|
72a0898873 | ||
|
|
c66aeb5988 | ||
|
|
e2a5ab7e02 | ||
|
|
0e2fbc7315 | ||
|
|
577cd4ac84 | ||
|
|
a2031e92b9 | ||
|
|
c1eba56c75 | ||
|
|
85c58b7866 | ||
|
|
a0d9a56a3c | ||
|
|
7eb395e300 | ||
|
|
f4b0f0a51a | ||
|
|
ddd9e310c2 | ||
|
|
009c882c36 | ||
|
|
1c6454fbce | ||
|
|
6f4b49e030 | ||
|
|
5d1e46267a | ||
|
|
2466de998d | ||
|
|
35f00f3824 | ||
|
|
0cdb370274 | ||
|
|
acade41cee | ||
|
|
82330ef504 | ||
|
|
f4cad5fb6e | ||
|
|
d7c2ad3748 | ||
|
|
32f598b99e | ||
|
|
eafe3578c4 | ||
|
|
2a0808b97f | ||
|
|
12f6152a5f | ||
|
|
d4db03b390 | ||
|
|
9591e1ed1e | ||
|
|
3ab2c7be1a | ||
|
|
b7898d0469 | ||
|
|
b92f4aa57b | ||
|
|
8cecdb58e5 | ||
|
|
daa074a108 | ||
|
|
8e735f811d | ||
|
|
00e0da2712 | ||
|
|
b66961452f | ||
|
|
40bcf7296c | ||
|
|
80bf48903f | ||
|
|
f0c23a8611 | ||
|
|
1b0abe5c51 | ||
|
|
f274743ebb | ||
|
|
50c4711b2e | ||
|
|
d225f7052a | ||
|
|
272d724890 | ||
|
|
945350d58c | ||
|
|
1abcf5624a | ||
|
|
2bfa653735 | ||
|
|
4cad860e7c | ||
|
|
09fe028d90 | ||
|
|
e6a3cfb8fe | ||
|
|
742d5f1204 | ||
|
|
e03c3f1706 | ||
|
|
e67b7a69e7 | ||
|
|
c6b0353b9c | ||
|
|
08cbb3eb94 | ||
|
|
1759db8032 | ||
|
|
237439b927 | ||
|
|
6a23d1fc5a | ||
|
|
c3d2033a3a | ||
|
|
fcfedf2d17 | ||
|
|
bf63cc710d | ||
|
|
d9c238eacf | ||
|
|
ad1c6cded6 | ||
|
|
6896473ece | ||
|
|
51054c8b7a | ||
|
|
9fec22a94d | ||
|
|
34b13b24f7 | ||
|
|
79bbb292a0 | ||
|
|
e766d064ca | ||
|
|
f172a4e37a | ||
|
|
ae26eeb260 | ||
|
|
837d127dc1 | ||
|
|
3a02b027dc | ||
|
|
c148e9dbd8 | ||
|
|
5f4e4068eb | ||
|
|
bd3e148ac8 | ||
|
|
9c89d26c52 | ||
|
|
2f900ccff2 | ||
|
|
81352c0b3e | ||
|
|
254ba7fef5 | ||
|
|
0e7fba508d | ||
|
|
ccb285cb8c | ||
|
|
8fd91df808 | ||
|
|
5652546c52 | ||
|
|
459c2a4c80 | ||
|
|
41bcfc5972 | ||
|
|
f1c7032b4b | ||
|
|
bd038eb739 | ||
|
|
08b4a73117 | ||
|
|
99804f7160 | ||
|
|
2f8c89d340 | ||
|
|
90ac873269 | ||
|
|
2dfb0ef7b9 | ||
|
|
c8a56bd594 | ||
|
|
b8aec44d1a | ||
|
|
830bbaa157 | ||
|
|
e5e7dad23d | ||
|
|
6342265a22 | ||
|
|
6ab2c4bae1 | ||
|
|
64b63632a7 | ||
|
|
c11cf8f069 | ||
|
|
1e4724cd9d | ||
|
|
1d8dc5ef4f | ||
|
|
09261a2465 | ||
|
|
0b298978a3 | ||
|
|
a65d46563a | ||
|
|
b616783180 | ||
|
|
f49b0b03e5 | ||
|
|
51254cf0e7 | ||
|
|
2d80fbfdef | ||
|
|
453fa7fe38 | ||
|
|
7ad60e4687 | ||
|
|
a76ce97e81 | ||
|
|
0ec3cd2edd | ||
|
|
abcd90e75e | ||
|
|
0e99032636 | ||
|
|
58a222a49a | ||
|
|
23b419547b | ||
|
|
9d1753e49a | ||
|
|
b312375e6a | ||
|
|
5839aa32bc | ||
|
|
bf26e79236 | ||
|
|
0122906378 | ||
|
|
c168f50f60 | ||
|
|
f4d74e2669 | ||
|
|
731d3896e8 | ||
|
|
02c56cabf3 | ||
|
|
fa64dc6443 | ||
|
|
e8d7bbbd9e | ||
|
|
4f78ccf8ff | ||
|
|
56ec26df14 | ||
|
|
37ce7ee77c | ||
|
|
3a7a13822a | ||
|
|
31fab24987 | ||
|
|
6a65198e56 | ||
|
|
1b5b260da4 | ||
|
|
2261f0f56c | ||
|
|
0a957febc3 | ||
|
|
4f269a8b55 | ||
|
|
e404d42c5d | ||
|
|
545b7b24e3 | ||
|
|
1efff4fab2 | ||
|
|
95b2d5acdc | ||
|
|
8d635674d9 | ||
|
|
544ad333b3 | ||
|
|
75bcd345da | ||
|
|
9f6cc405c4 | ||
|
|
3760a92c43 | ||
|
|
948d77fe2c | ||
|
|
57aa5577da | ||
|
|
2464adcbbd | ||
|
|
b0a33033b6 | ||
|
|
efa7f84fde | ||
|
|
b96fcdaf82 | ||
|
|
0f553e90ae | ||
|
|
7cf62492a5 | ||
|
|
a3c35caefc | ||
|
|
5ccaaeea48 | ||
|
|
813d03c1d2 | ||
|
|
977c28a6da | ||
|
|
7be6ee6c2f | ||
|
|
790003c9ea | ||
|
|
bc53c85ca0 | ||
|
|
0efb7c174c | ||
|
|
92d791b7b0 | ||
|
|
b3b0de73e9 | ||
|
|
87caded68d | ||
|
|
5f0aaf354d | ||
|
|
ee4fb8f0ff | ||
|
|
4df7c35211 | ||
|
|
0f496fe790 |
170
mozilla/extensions/xmlterm/INSTALL
Normal file
170
mozilla/extensions/xmlterm/INSTALL
Normal file
@@ -0,0 +1,170 @@
|
||||
INSTALL: Installation instructions for XMLterm source code
|
||||
----------------------------------------------------------
|
||||
|
||||
*NOTE* This is work in progress. User beware!
|
||||
|
||||
*NOTE* Check the XMLterm web site <http://xmlterm.org> for updates.
|
||||
|
||||
29 Nov 1999
|
||||
|
||||
In the following discussion, file and directory names are relative
|
||||
to the main ("mozilla/extensions/xmlterm") directory. See the end of the
|
||||
README file for a brief description of the subdirectories.
|
||||
|
||||
|
||||
1. Source tree (skip this step if XMLterm is already in the source tree)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
The XMLterm source code is distributed as a tarball, xmlterm.tar.gz
|
||||
|
||||
This tar file needs to be untarred in the "mozilla/extensions" directory,
|
||||
or any any other "mozilla/dir" directory one level below the top-level.
|
||||
A subdirectory called "xmlterm" will be created there.
|
||||
("mozilla" denotes the root directory of the Mozilla source tree)
|
||||
|
||||
If you have already untarred it elsewhere, simply move the "xmlterm" directory
|
||||
to the right place.
|
||||
|
||||
|
||||
2. Configuration
|
||||
----------------
|
||||
|
||||
To recursively create all Makefiles from Makefile.in files, type the following:
|
||||
|
||||
makemake -r
|
||||
|
||||
The file "config/xmlterm_config.mk" contains XMLterm specific configuration
|
||||
information that is needed in addition to any Mozilla configuration
|
||||
information. It has already been hand-configured for Linux2.0/Linux2.2, and
|
||||
Solaris2.6 platforms. It may need to be modified slightly to compile XMLterm
|
||||
on other platforms.
|
||||
|
||||
At present XMLterm has been tested only on Linux (RedHat6.0) and Solaris2.6
|
||||
platforms, using the M11 release as the base version of Mozilla.
|
||||
|
||||
XMLterm typically uses the UNIX pseudo-TTY interface to communicate with the
|
||||
shell. At present, this interface is implemented only for Linux and Solaris
|
||||
platforms.
|
||||
|
||||
XMLterm may compile on other Unix platforms, but it will use NSPR pipes,
|
||||
rather than a pseudo-TTY, for process communication; this means that the
|
||||
terminal control characters, such as Control-C for interrupting jobs, will not
|
||||
work on those platforms. (See the file doc/PORTABILITY for a discussion of
|
||||
portability issues)
|
||||
|
||||
|
||||
3. Creating the dynamically loaded XPCOM/XPCONNECT component
|
||||
------------------------------------------------------------
|
||||
|
||||
To create the dynamically loaded XPCOM library, type the following in the main
|
||||
directory
|
||||
|
||||
make all
|
||||
|
||||
This creates the self-registering library "libxmlterm.so" and installs it in
|
||||
the "mozilla/dist/bin/components" directory, along with some chrome
|
||||
files. After this step, the following interfaces become accessible in Mozilla
|
||||
through XPCOM/XPCONNECT:
|
||||
|
||||
mozIXMLTermShell (interface to XMLterm)
|
||||
mozILineTerm (interface to the stand-alone LINETERM)
|
||||
|
||||
To clean up completely, type
|
||||
|
||||
make clean
|
||||
|
||||
|
||||
4. Using the lightweight "xmlterm" stand-alone program
|
||||
----------------------------------------------------
|
||||
|
||||
Step 3 creates an executable called "xmlterm" in the "mozilla/dist/bin"
|
||||
directory. This is a lightweight program implementing XMLterm using the Gecko
|
||||
layout engine only, without the added baggage of the full browser. Executing
|
||||
"xmlterm" will create an XMLterm window. Click on this window to give it focus
|
||||
before typing Unix commands.
|
||||
|
||||
The command line can be edited using EMACS-style key bindings.
|
||||
Command completion should also work with TCSH and BASH, as should history
|
||||
recall.
|
||||
|
||||
**NOTE**
|
||||
The command prompt is assumed to be terminated by one of the characters
|
||||
"#$%>?", followed by a space. If this is not the case, many features will not
|
||||
work. This restriction will be relaxed in the future.
|
||||
|
||||
By default, blue coloring is used to indicate clickable display elements.
|
||||
Note that the prompt and the input command line are clickable.
|
||||
(Of course, the appearance of XMLterm is completely configurable
|
||||
using the CSS stylesheet chrome://xmlterm/skin/default/xmlterm.css)
|
||||
|
||||
After typing one or two commands, click on the prompt string of any previous
|
||||
command to see what happens! Then click again on the same prompt string.
|
||||
Also click on "Hide all output" button at the top of the document.
|
||||
|
||||
Clicking on a previous command line (to the right of the prompt) re-executes
|
||||
the command.
|
||||
|
||||
The sample Perl script "xls", the iconic/hypertext version of the Unix "ls"
|
||||
command, is in the "tests" directory. Copy it to some directory in your path
|
||||
to use it.
|
||||
|
||||
Note: At present, xmlterm only works with the GTK front end.
|
||||
|
||||
|
||||
5. Creating an XMLterm window using the browser
|
||||
-----------------------------------------------
|
||||
|
||||
At this time, XMLterm cannot be accessed through the menu bar. Instead, load
|
||||
the URL "chrome://xmlterm/content/xmlterm.html" in the browser, either at the
|
||||
command line or by typing it in the URL box. Then click on the browser window
|
||||
with the mouse to shift focus and then start typing UNIX commands.
|
||||
|
||||
|
||||
6. Stand-alone mode (optional)
|
||||
------------------------------
|
||||
|
||||
Although XMLterm resides in the Mozilla source tree, portions of it are
|
||||
capable of being compiled and linked completely independent of Mozilla. You
|
||||
may want to do this for testing purposes. The "config" directory contains
|
||||
make files that are used for this stand-alone mode. There is even a dumb
|
||||
script called "makemake" which can be used to re-create make files, if the
|
||||
corresponding Makefile.in files have been changed.
|
||||
|
||||
*NOTE* The executable "lterm" requires the NCURSES include file "curses.h"
|
||||
|
||||
To create the stand-alone executables, type
|
||||
|
||||
make STAND_ALONE=1 all
|
||||
|
||||
(To clean up stand-alone modules, type "make STAND_ALONE=1 clean")
|
||||
|
||||
This creates the stand-alone library in "base/lib" and some stand-alone
|
||||
executables in the "linetest/lib" directory, in particular, one called
|
||||
"lterm".
|
||||
|
||||
The executable "lterm" implements a line terminal (LINETERM), i.e., a
|
||||
non-graphical version of XMLterm. In the future, this may be implemented using
|
||||
NCURSES for full screen operation. At present, it only provides line-at-a-time
|
||||
functionality and is used only for testing.
|
||||
|
||||
LINETERM acts as an "engine" for XMLterm, carrying out all the non-graphical
|
||||
tasks, completely independent of Mozilla. It is written in C and is licensed
|
||||
under both MPL and GPL. It provides functionality similar to the EMACS shell
|
||||
mode or the GNU readline package.
|
||||
|
||||
LINETERM has various options where trace output may be redirected to a
|
||||
different TTY device, for debugging purposes. LINETERM may be used like the
|
||||
shell command "sh", e.g.,
|
||||
|
||||
prompt% lterm
|
||||
prompt% ls
|
||||
<listing>
|
||||
prompt% exit
|
||||
|
||||
The "tests/escape" program can be used to generate terminal escape sequences
|
||||
to test the XMLterm API. In particular, the following command enables
|
||||
extensive trace output, if executed within an XMLterm or LINETERM:
|
||||
|
||||
tests/escape 1 98 D
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
78
mozilla/extensions/xmlterm/Makefile.in
Normal file
78
mozilla/extensions/xmlterm/Makefile.in
Normal file
@@ -0,0 +1,78 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# makefile for xmlterm root directory
|
||||
|
||||
ifdef STAND_ALONE
|
||||
DEPTH = .
|
||||
topsrcdir = .
|
||||
srcdir = .
|
||||
include $(topsrcdir)/config/autoconf.mk
|
||||
else
|
||||
DEPTH = ../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
endif
|
||||
|
||||
|
||||
# Debug option
|
||||
DEBUG = 1
|
||||
|
||||
|
||||
ifdef STAND_ALONE
|
||||
|
||||
DIRS = base tests linetest
|
||||
|
||||
else # not STAND_ALONE
|
||||
|
||||
DIRS = base ui geckoterm tests
|
||||
|
||||
LIBRARY_NAME =
|
||||
|
||||
# Exported header files
|
||||
EXPORTS =
|
||||
|
||||
# Defines
|
||||
DEFINES =
|
||||
|
||||
# C++ Sources
|
||||
CPPSRCS =
|
||||
|
||||
endif
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include config/xmlterm_config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
63
mozilla/extensions/xmlterm/README
Normal file
63
mozilla/extensions/xmlterm/README
Normal file
@@ -0,0 +1,63 @@
|
||||
xmlterm --- A graphical command line interface
|
||||
==============================================
|
||||
|
||||
An early prototype of XMLterm, an XTERM-like terminal program implemented
|
||||
using the open source Mozilla layout engine, is now available to tinker
|
||||
with. XMLterm aims to add graphical and hypertext capabilities to the XTERM
|
||||
command line interface, while maintaining backwards compatibility.
|
||||
|
||||
The basic design philosophy of XMLterm is that the user interface is a dynamic
|
||||
XML document. The user and the computer interact by taking turns at appending
|
||||
to this XML document. The plain text content of the XML document, i.e.,
|
||||
excluding any markup, corresponds to the plain text that would be displayed by
|
||||
a plain XTERM. The markup in the XML document is used to add graphical and
|
||||
hypertext features. XMLterm uses the Mozilla layout engine to display the XML
|
||||
document.
|
||||
|
||||
XMLterm is an open source project in its early stages. Comments and
|
||||
contributions are welcome!
|
||||
|
||||
R. Saravanan <svn@xmlterm.org>
|
||||
28 Nov 1999
|
||||
===========
|
||||
|
||||
NOTES:
|
||||
|
||||
1. See the INSTALL file for configuration/installation instructions.
|
||||
|
||||
2. See the file doc/INSTALL.xmlterm for binary installation instructions.
|
||||
|
||||
3. Check the XMLterm web site <http://xmlterm.org> for updates.
|
||||
|
||||
===========================================================================
|
||||
DOCUMENTATION
|
||||
|
||||
a. There is a README file in each directory that provides some basic
|
||||
information.
|
||||
|
||||
b. The file "base/README" provides a brief overview of the XMLterm code
|
||||
architecture.
|
||||
|
||||
c. The header files (*.idl, *.h) have comments describing class methods
|
||||
and member variables in JAVADOC format. Look at them before delving
|
||||
into the *.cpp files
|
||||
|
||||
===========================================================================
|
||||
FILES:
|
||||
|
||||
INSTALL installation instructions
|
||||
README this file
|
||||
UUID.txt list of UUIDs used by XMLterm
|
||||
|
||||
The main subdirectories of the "xmlterm" directory are:
|
||||
|
||||
base/ base source code for XMLterm libraries
|
||||
config/ make rules for stand-alone mode
|
||||
dist/ holds include and library file for stand-alone LineTerm only
|
||||
doc/ some documentation
|
||||
geckoterm/ lightweight XMLterm executable
|
||||
linetest/ stand-alone line terminal testing executables
|
||||
tests/ XMLterm test programs and scripts, including "pagelets"
|
||||
ui/* user interface/chrome files
|
||||
|
||||
--
|
||||
28
mozilla/extensions/xmlterm/UUID.txt
Normal file
28
mozilla/extensions/xmlterm/UUID.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
UUID.txt: UUIDs used by XMLTerm
|
||||
-------------------------------
|
||||
|
||||
2 Dec 1999
|
||||
|
||||
A block of 256 UUIDs was generated by running uuidgen,
|
||||
ranging from
|
||||
/* 0eb82b00-43a2-11d3-8e76-006008948af5 */
|
||||
to
|
||||
/* 0eb82bff-43a2-11d3-8e76-006008948af5 */
|
||||
with the 7th and 8th hex digits varying from 00 to ff.
|
||||
|
||||
Of these, the following UUIDs are being used as IIDs and CIDs:
|
||||
|
||||
mozILineTerm IID "0eb82b00-43a2-11d3-8e76-006008948af5"
|
||||
mozLineTerm CID "0eb82b01-43a2-11d3-8e76-006008948af5"
|
||||
mozILineTermAux IID "0eb82b10-43a2-11d3-8e76-006008948af5"
|
||||
mozIXMLTerminal IID "0eb82b20-43a2-11d3-8e76-006008948af5"
|
||||
mozXMLTerminal CID "0eb82b21-43a2-11d3-8e76-006008948af5"
|
||||
mozIXMLTermShell IID "0eb82b30-43a2-11d3-8e76-006008948af5"
|
||||
mozXMLTermShell CID "0eb82b31-43a2-11d3-8e76-006008948af5"
|
||||
mozIXMLTermStream IID "0eb82b40-43a2-11d3-8e76-006008948af5"
|
||||
mozXMLTermStream CID "0eb82b41-43a2-11d3-8e76-006008948af5"
|
||||
|
||||
mozISimpleContainer IID "0eb82bF0-43a2-11d3-8e76-006008948af5"
|
||||
mozSimpleContainer CID "0eb82bF1-43a2-11d3-8e76-006008948af5"
|
||||
|
||||
--
|
||||
120
mozilla/extensions/xmlterm/base/Makefile.in
Normal file
120
mozilla/extensions/xmlterm/base/Makefile.in
Normal file
@@ -0,0 +1,120 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# makefile for xmlterm/base directory
|
||||
|
||||
ifdef STAND_ALONE
|
||||
DEPTH = ..
|
||||
topsrcdir = ..
|
||||
srcdir = .
|
||||
include $(topsrcdir)/config/autoconf.mk
|
||||
else
|
||||
DEPTH = ../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
endif
|
||||
|
||||
|
||||
# Debug option
|
||||
DEBUG = 1
|
||||
|
||||
# Library name
|
||||
LIBRARY_NAME = xmlterm
|
||||
|
||||
# C Sources
|
||||
ifdef NO_PTY
|
||||
CSRCS = ltermManager.c ltermIO.c ltermInput.c ltermOutput.c ltermEscape.c \
|
||||
tracelog.c unistring.c
|
||||
else
|
||||
CSRCS = ltermManager.c ltermIO.c ltermInput.c ltermOutput.c ltermEscape.c \
|
||||
tracelog.c unistring.c ptystream.c
|
||||
endif
|
||||
|
||||
ifdef STAND_ALONE
|
||||
# Defines
|
||||
DEFINES +=
|
||||
|
||||
# Exported header files
|
||||
EXPORTS = lineterm.h tracelog.h unistring.h ptystream.h
|
||||
|
||||
# C++ Sources
|
||||
CPPSRCS =
|
||||
|
||||
else # not STAND_ALONE
|
||||
# Defines
|
||||
DEFINES += $(TK_CFLAGS)
|
||||
|
||||
# Exported header files (excluding XPCONNECT interfaces)
|
||||
EXPORTS = lineterm.h tracelog.h unistring.h ptystream.h mozXMLT.h mozXMLTermUtils.h mozIXMLTerminal.h mozIXMLTermStream.h
|
||||
|
||||
# C++ Sources
|
||||
CPPSRCS = \
|
||||
mozLineTerm.cpp \
|
||||
mozXMLTermUtils.cpp \
|
||||
mozXMLTerminal.cpp \
|
||||
mozXMLTermSession.cpp \
|
||||
mozXMLTermListeners.cpp \
|
||||
mozXMLTermShell.cpp \
|
||||
mozXMLTermFactory.cpp \
|
||||
$(NULL)
|
||||
|
||||
MODULE = xmlterm
|
||||
IS_COMPONENT = 1
|
||||
|
||||
EXTRA_DSO_LDOPTS = $(TK_LIBS) \
|
||||
-L$(DIST)/bin $(NSPR_LIBS) \
|
||||
-L$(DIST)/bin -lxpcom
|
||||
|
||||
XPIDLSRCS = \
|
||||
mozILineTerm.idl \
|
||||
mozIXMLTermShell.idl \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
# Also create static library libxmlterm.a
|
||||
override NO_STATIC_LIB=
|
||||
|
||||
REQUIRES =
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include ../config/xmlterm_config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
ifndef STAND_ALONE
|
||||
ifeq ($(OS_ARCH),Linux)
|
||||
OS_CFLAGS += -ansi
|
||||
endif
|
||||
endif
|
||||
127
mozilla/extensions/xmlterm/base/README
Normal file
127
mozilla/extensions/xmlterm/base/README
Normal file
@@ -0,0 +1,127 @@
|
||||
base --- core source code for XMLterm and LineTerm
|
||||
|
||||
XMLterm control-flow/layering hierarchy
|
||||
=======================================
|
||||
|
||||
mozilla-executable xmlterm-executable
|
||||
| |
|
||||
../ui/content/xmlterm.html |
|
||||
| |
|
||||
mozXMLTermShell ../geckoterm/mozGeckoTerm
|
||||
| | |
|
||||
+--------------+---------------+ |
|
||||
| mozSimpleContainer
|
||||
mozXMLTerminal
|
||||
|
|
||||
+-------------------+--------------------+
|
||||
| | |
|
||||
mozXMLTermSession mozLineTermAux mozXMLTermListeners
|
||||
| | |
|
||||
| | |
|
||||
mozXMLTermStream... (LineTerm) (user input)
|
||||
(rendering ...) (pseudo-TTY/shell)
|
||||
|
||||
|
||||
XMLterm may be invoked one of two ways:
|
||||
1. By loading the URL chrome://xmlterm/content/xmlterm.html in mozilla, or
|
||||
2. By running the stand-alone executable "../geckoterm/xmlterm".
|
||||
The diagram above shows the control-flow/layering hierarchy for both ways
|
||||
of invoking XMLterm.
|
||||
|
||||
28 Nov 1999
|
||||
===========================================================================
|
||||
FILES:
|
||||
|
||||
The core source code for XMLterm in this directory consists of two distinct
|
||||
families of files, those with names that begin with the prefix "moz" and all
|
||||
the other files. The former are the Mozilla-specific portions of XMLterm,
|
||||
written in C++. The remaining files constitute the Mozilla-independent portion
|
||||
of XMLterm, referred to as "LineTerm".
|
||||
|
||||
============================================================================
|
||||
LINETERM:
|
||||
|
||||
LineTerm is a line-oriented terminal program, in some respects similar in
|
||||
functionality to the GNU Readline package. It is completely independent of the
|
||||
Mozilla source code, is written in plain C, and dually licensed under GPL and
|
||||
MPL.
|
||||
|
||||
============================================================================
|
||||
INTERFACES:
|
||||
|
||||
lineterm.h Plain C interface to LineTerm
|
||||
(used by mozLineTerm)
|
||||
|
||||
mozILineTerm.idl Scriptable XPCOM/XPCONNECT interface to LineTerm
|
||||
(not used at the moment)
|
||||
|
||||
mozILineTermAux.h XPCOM interface to LineTerm, with extra features
|
||||
(used by mozXMLTerminal)
|
||||
|
||||
mozIXMLTermShell.h Scriptable XPCOM/XPCONNECT interface to XMLterm
|
||||
(used by the Javascript glue code in the XMLterm
|
||||
start page at ../ui/content/xmlterm.html)
|
||||
|
||||
mozIXMLTerminal.h XPCOM interface to XMLterm
|
||||
(used by mozXMLTermShell, ../geckoterm/mozGeckoterm)
|
||||
|
||||
mozIXMLTermStream.h XPCOM interface for displaying HTML/XML streams in
|
||||
IFRAMES (used by mozXMLTermSession)
|
||||
|
||||
|
||||
IMPLEMENTATIONS:
|
||||
|
||||
|
||||
mozLineTerm.h/cpp Implementation of mozILineTerm, mozILineTermAux
|
||||
Uses LineTerm to access shell
|
||||
|
||||
mozXMLTermShell.h/cpp Implementation of mozIXMLTermShell
|
||||
Uses mozIXMLTerminal to create XMLterm
|
||||
|
||||
mozXMLTerminal.h/cpp Implementation of mozIXMLTerminal,
|
||||
nsIDocumentLoaderObserver, and
|
||||
nsIObserver
|
||||
Uses mozILineTermAux to create LineTerm
|
||||
Uses mozXMLTermListeners to capture user input
|
||||
Uses mozXMLTermSession to display input/output
|
||||
|
||||
mozXMLTermListeners.h/cpp Implementations of nsIDOMKeyListener,
|
||||
nsIDOMTextListener,
|
||||
nsIDOMMouseListener,
|
||||
nsIDOMDragListener
|
||||
|
||||
mozXMLTermStream.h/cpp Implementation of mozIXMLTermStream
|
||||
|
||||
|
||||
CLASSES:
|
||||
|
||||
|
||||
mozXMLTermSession.h/cpp Class to manage session input/output display
|
||||
(used by mozXMLTerminal)
|
||||
Uses mozIXMLTermStream to display streams
|
||||
|
||||
mozXMLTermUtils.h/cpp Abstract class for static utility functions
|
||||
(for use by all classes)
|
||||
|
||||
============================================================================
|
||||
The following are dually licensed under MPL and GPL:
|
||||
|
||||
LineTerm package:
|
||||
|
||||
lineterm.h Public interface to LineTerm
|
||||
|
||||
ltermPrivate.h Private common header file
|
||||
|
||||
ltermManager.c LineTerm manager
|
||||
ltermIO.c Overlapping I/O functions
|
||||
ltermInput.c Input handler
|
||||
ltermOutput.c Output handler
|
||||
ltermEscape.c Escape sequence handler
|
||||
|
||||
Low-level packages:
|
||||
|
||||
ptystream.h/c Stream-like interface to Unix pseudo-TTY
|
||||
tracelog.h/c Simple tracing/logging diagnostic library
|
||||
unistring.h/c Simple Unicode manipulation library
|
||||
|
||||
============================================================================
|
||||
387
mozilla/extensions/xmlterm/base/lineterm.h
Normal file
387
mozilla/extensions/xmlterm/base/lineterm.h
Normal file
@@ -0,0 +1,387 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* lineterm.h: Line terminal (LTERM) public interface header file
|
||||
* LINETERM provides a "stream" interface to an XTERM-like terminal,
|
||||
* using line-oriented input/output.
|
||||
*/
|
||||
|
||||
#ifndef _LINETERM_H
|
||||
|
||||
#define _LINETERM_H 1
|
||||
|
||||
#ifndef _UNISTRING_H
|
||||
#include "unistring.h"
|
||||
#endif
|
||||
|
||||
/* Define LTERM read callback function type */
|
||||
#ifdef USE_GTK_WIDGETS
|
||||
#include <gtk/gtk.h>
|
||||
typedef void (*lterm_callback_func_t)(gpointer, gint, GdkInputCondition);
|
||||
#else
|
||||
typedef void* lterm_callback_func_t;
|
||||
#endif
|
||||
|
||||
/* Unicode character style information (same type as UNICHAR) */
|
||||
typedef UNICHAR UNISTYLE;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* lineterm functions */
|
||||
|
||||
/* LTERM module number (used for trace/log operations) */
|
||||
#define LTERM_TLOG_MODULE 1
|
||||
|
||||
/* Initializes all LTERM operations;
|
||||
* needs to be called before any calls to lterm_new.
|
||||
* @return 0 on success, or -1 on error.
|
||||
*
|
||||
* MESSAGELEVEL specifies the diagnostic message display level:
|
||||
* 0 => (normal) only fatal errors cause diagnostic messages to be printed.
|
||||
* -1 => (silent) no diagnostic messages are printed, even for fatal errors.
|
||||
* 1 => (warning) print non-fatal warning messages as well as error messages.
|
||||
* >9 and <= 99 (debugging)
|
||||
* print debugging messages at selected procedure levels/sublevels
|
||||
* (See tracelog.h for more information on messageLevel)
|
||||
*
|
||||
* Returns 0 on successful initialization, -1 otherwise.
|
||||
*/
|
||||
|
||||
int lterm_init(int messageLevel);
|
||||
|
||||
|
||||
/** Creates a new LTERM object and returns its descriptor index but
|
||||
* does not open it for I/O
|
||||
* (documented in the LTERM interface)
|
||||
* @return lterm descriptor index (>= 0) on success, or
|
||||
* -1 on error
|
||||
*/
|
||||
|
||||
int lterm_new();
|
||||
|
||||
/* Opens line terminal indexed by LTERM for input/output and creates
|
||||
* a process attached to it to execute the command line contained in string
|
||||
* array ARGV.
|
||||
* Called from the adminstrative/output thread of LTERM.
|
||||
* @return 0 on success, or -1 on error.
|
||||
*
|
||||
* COOKIE contains a cookie string used for stream security. If it is null,
|
||||
* or a null string, all streams are considered insecure.
|
||||
* (only MAXCOOKIESTR-1 characters of the cookie string are used for checking)
|
||||
*
|
||||
* PROMPT_REGEXP contains a REGEXP string describing the command prompt.
|
||||
* (**NOTE** For the moment, only a list of prompt delimiters is accepted;
|
||||
* a typical list of prompt delimiters would be "#$%>?")
|
||||
*
|
||||
* OPTIONS is a bitmask controlling the following options:
|
||||
* LTERM_NOCANONICAL_FLAG disable TTY canonical mode
|
||||
* LTERM_NOEDIT_FLAG disable input line editing
|
||||
* LTERM_NOCOMPLETION_FLAG disable command line completion
|
||||
* LTERM_NOMETA_FLAG disable meta input
|
||||
* LTERM_NOPARTLINE_FLAG disable returning of partial line output
|
||||
* LTERM_NOMARKUP_FLAG disable HTML/XML element processing in command line
|
||||
* LTERM_NOECHO_FLAG disable TTY echo
|
||||
* LTERM_NOPTY_FLAG do not use pseudo-TTY
|
||||
* LTERM_NOSTDERR_FLAG do not use separate STDERR
|
||||
* LTERM_NONUL_FLAG do not process any NUL characters (discard them)
|
||||
* LTERM_NOLINEWRAP_FLAG disable line wrapping
|
||||
* LTERM_NOEXPORT_FLAG disable export of current environment to new process
|
||||
*
|
||||
* PROCESS_TYPE specifies the subordinate process type, if set to one
|
||||
* of the following:
|
||||
* LTERM_DETERMINE_PROCESS
|
||||
* LTERM_UNKNOWN_PROCESS
|
||||
* LTERM_SH_PROCESS
|
||||
* LTERM_KSH_PROCESS
|
||||
* LTERM_BASH_PROCESS
|
||||
* LTERM_CSH_PROCESS
|
||||
* LTERM_TCSH_PROCESS
|
||||
* If it is set to LTERM_DETERMINE_PROCESS, the process type is determined
|
||||
* from the path name.
|
||||
*
|
||||
* CALLBACK_FUNC is a pointer to a GTK-style callback function,
|
||||
* or NULL for no callback.
|
||||
* The function is called whenever there is data available for
|
||||
* LTERM_READ to process, with CALLBACK_DATA as the data argument.
|
||||
* The callback function should call LTERM_READ immediately;
|
||||
* otherwise the callback function will be called repeatedly.
|
||||
* (The type LTERM_CALLBACK_FUNC_T is defined at the top of this include file)
|
||||
*
|
||||
* In canonical mode, no input line editing is permitted.
|
||||
* In editing mode, EMACS-style keyboard line editing commands are allowed.
|
||||
* In completion mode, incomplete command/file names are transmitted to
|
||||
* the subordinate process for complettion, as in TCSH.
|
||||
* Meta input refers to input lines that begin with a colon,
|
||||
* or with a "protocol" name followed by a colon, such as
|
||||
* "http: ...".
|
||||
* Meta input lines are not sent to the subordinate process, but simply
|
||||
* echoed as LTERM output through LTERM_READ for further processing.
|
||||
* If command line completion is not disabled, incomplete meta input may
|
||||
* also be echoed for completion. In this case, the completed meta input
|
||||
* should be supplied to the LTERM through a call to LTERM_WRITE as if the
|
||||
* user had entered it.
|
||||
*/
|
||||
|
||||
int lterm_open(int lterm, char *const argv[], const char* cookie,
|
||||
const UNICHAR* prompt_regexp, int options, int process_type,
|
||||
lterm_callback_func_t callback_func, void *callback_data);
|
||||
|
||||
|
||||
/* Closes line terminal indexed by LTERM.
|
||||
* The default action is to block until active calls to lterm_write
|
||||
* and lterm_read to complete.
|
||||
* Called from the administrative/output thread of LTERM.
|
||||
* @return 0 on success, or -1 on error.
|
||||
*/
|
||||
int lterm_close(int lterm);
|
||||
|
||||
|
||||
/** Deletes an LTERM object, closing it if necessary.
|
||||
* @return 0 on success, or -1 on error.
|
||||
*/
|
||||
|
||||
int lterm_delete(int lterm);
|
||||
|
||||
|
||||
/* Closes all LTERMs, but does not delete them.
|
||||
* This may be used to free any resources associated with LTERMs for clean up.
|
||||
* The closed LTERMs should still be deleted, if possible.
|
||||
*/
|
||||
void lterm_close_all(void);
|
||||
|
||||
|
||||
/* Set input echo flag for line terminal indexed by LTERM.
|
||||
* Called from the output thread of LTERM.
|
||||
* @return 0 on success, or -1 on error.
|
||||
*/
|
||||
|
||||
int lterm_setecho(int lterm, int echo_flag);
|
||||
|
||||
|
||||
/* Resizes the line terminal indexed by LTERM.
|
||||
* Called from the output thread of LTERM.
|
||||
* @return 0 on success, or -1 on error.
|
||||
*/
|
||||
|
||||
int lterm_resize(int lterm, int rows, int cols,
|
||||
int xpix, int ypix);
|
||||
|
||||
|
||||
/* Sets cursor position in line terminal indexed by LTERM.
|
||||
* Called from the output thread of LTERM.
|
||||
* @return 0 on success, or -1 on error.
|
||||
*/
|
||||
|
||||
int lterm_setcursor(int lterm, int row, int col);
|
||||
|
||||
|
||||
/* Writes supplied to Unicode string in BUF of length COUNT to
|
||||
* line terminal indexed by LTERM.
|
||||
* (May be called from any thread, since it uses a pipe to communicate
|
||||
* with the output thread.)
|
||||
* DATATYPE may be set to one of the following values:
|
||||
* LTERM_WRITE_PLAIN_INPUT Plain text user input
|
||||
* LTERM_WRITE_XML_INPUT XML element user input
|
||||
* LTERM_WRITE_PLAIN_OUTPUT Plain text server output
|
||||
* LTERM_WRITE_CLOSE_MESSAGE End of file message
|
||||
* NOTE: This is a non-blocking call
|
||||
* Returns the number of characters written.
|
||||
* Returns -1 on error, and
|
||||
* -2 if pseudo-TTY has been closed.
|
||||
* If the return value is less than COUNT, it usually indicates an error.
|
||||
* If the return value is -1, any further operations on the LTERM,
|
||||
* other than LTERM_CLOSE, will always fail with an error return value.
|
||||
*/
|
||||
|
||||
int lterm_write(int lterm, const UNICHAR *buf, int count, int dataType);
|
||||
|
||||
|
||||
/* Completes meta input in line terminal indexed by LTERM with the
|
||||
* supplied to Unicode string in BUF of length COUNT.
|
||||
* Called from the output thread of the LTERM.
|
||||
* @return 0 on success, or -1 on error.
|
||||
*/
|
||||
|
||||
int lterm_metacomplete(int lterm, const UNICHAR *buf, int count);
|
||||
|
||||
|
||||
/* reads upto COUNT Unicode characters from a single line of output
|
||||
* from line terminal indexed by LTERM into BUF.
|
||||
* Called from the output thread of the LTERM.
|
||||
* Returns the number of characters read (>=0) on a successful read.
|
||||
* Returns -1 if an error occurred while reading,
|
||||
* -2 if pseudo-TTY has been closed,
|
||||
* -3 if more than COUNT characters are present in the line
|
||||
* (in this case the first COUNT characters are returned in BUF,
|
||||
* and the rest are discarded).
|
||||
* If the return value is -1, any further operations on the LTERM,
|
||||
* other than LTERM_CLOSE, will always fail with an error return value.
|
||||
* (If return value is -2, it means that the subordinate process has closed
|
||||
* the pseudo-TTY. In this case, the LTERM still needs to be explicitly
|
||||
* closed by calling LTERM_CLOSE for proper clean-up.)
|
||||
*
|
||||
* TIMEOUT is the number of platform-dependent time units
|
||||
* (usually milliseconds on Unix) to wait to read data.
|
||||
* A zero value implies no waiting.
|
||||
* A negative TIMEOUT value implies infinite timeout, i.e., a blocking read.
|
||||
* Non-zero values of TIMEOUT should be used only when the output thread
|
||||
* is allowed to block.
|
||||
*
|
||||
* STYLE should be an array of same length as BUF, and contains
|
||||
* the style bits associated with each character on return (see below).
|
||||
*
|
||||
* OPCODES contains a bit mask describing the type of output (see below).
|
||||
* Using Extended Backus-Naur Form notation:
|
||||
*
|
||||
* OPCODES ::= STREAMDATA NEWLINE? COOKIESTR? XMLSTREAM? DOCSTREAM? WINSTREAM?
|
||||
* if StreamMode data is being returned.
|
||||
*
|
||||
* OPCODES ::= SCREENDATA BELL? ( CLEAR
|
||||
* | INSERT MOVEDOWN?
|
||||
* | DELETE MOVEDOWN?
|
||||
* | OUTPUT )
|
||||
* if ScreenMode data is being returned.
|
||||
*
|
||||
* OPCODES ::= LINEDATA BELL? ( CLEAR
|
||||
* | ( PROMPT | OUTPUT)? INPUT ( NEWLINE HIDE? )?
|
||||
* | PROMPT? INPUT META ( COMPLETION | NEWLINE HIDE? )
|
||||
* | OUTPUT NEWLINE? )
|
||||
* if LineMode data is being returned.
|
||||
*
|
||||
* If OPCODES == 0, then it means that no data has been read.
|
||||
*
|
||||
* If the returned OPCODES has META and COMPLETION bits set, then the completed
|
||||
* version of the meta input should be supplied through a call to
|
||||
* LTERM_WRITE, with an input data type, as if the user had typed it.
|
||||
*
|
||||
* BUF_ROW and BUF_COL denote the row and starting column at which to
|
||||
* display the data in BUF.
|
||||
* (If character count returned by lterm_read is zero, implying there is no
|
||||
* data in BUF, then values of BUF_ROW and BUF_COL should be ignored.)
|
||||
* In ScreenMode or LineMode, CURSOR_ROW and CURSOR_COL denote the final
|
||||
* cursor position after any data in BUF is displayed.
|
||||
*
|
||||
* The bottom left corner of the screen corresponds to row 0, column 0.
|
||||
* BUF_COL, CURSOR_COL are always >= 0, with 0 denoting the leftmost column.
|
||||
* (BUF_COL is always zero if NOPARTLINE flag is set for LTERM.)
|
||||
* (CURRENT IMPLEMENTATION: BUF_COL is always zero.)
|
||||
* BUF_ROW, CURSOR_ROW are always set to -1 when LTERM is in line mode,
|
||||
* BUF_ROW, CURSOR_ROW are always >=0 when LTERM is in screen mode,
|
||||
* with 0 denoting the bottom row.
|
||||
*/
|
||||
|
||||
int lterm_read(int lterm, int timeout, UNICHAR *buf, int count,
|
||||
UNISTYLE *style, int *opcodes,
|
||||
int *buf_row, int *buf_col, int *cursor_row, int *cursor_col);
|
||||
|
||||
/* opcodes describing terminal operations:
|
||||
*/
|
||||
#define LTERM_STREAMDATA_CODE 0x0001U /* Stream mode */
|
||||
#define LTERM_SCREENDATA_CODE 0x0002U /* Screen mode */
|
||||
#define LTERM_LINEDATA_CODE 0x0004U /* Line mode */
|
||||
#define LTERM_BELL_CODE 0x0008U /* Ring bell */
|
||||
#define LTERM_CLEAR_CODE 0x0010U /* Clear screen */
|
||||
#define LTERM_INSERT_CODE 0x0020U /* Insert row at cursor */
|
||||
#define LTERM_DELETE_CODE 0x0040U /* Delete row at cursor */
|
||||
#define LTERM_MOVEDOWN_CODE 0x0080U /* Move text down on insert/delete */
|
||||
#define LTERM_INPUT_CODE 0x0100U /* Contains STDIN at end of line */
|
||||
#define LTERM_PROMPT_CODE 0x0200U /* Contains prompt at beginning */
|
||||
#define LTERM_OUTPUT_CODE 0x0400U /* Contains STDOUT/STDERR/ALTOUT */
|
||||
#define LTERM_META_CODE 0x0800U /* Meta input */
|
||||
#define LTERM_COMPLETION_CODE 0x1000U /* Completion requested */
|
||||
#define LTERM_NEWLINE_CODE 0x2000U /* Complete (new) line */
|
||||
#define LTERM_HIDE_CODE 0x4000U /* Hide output */
|
||||
|
||||
#define LTERM_COOKIESTR_CODE 0x8000U /* Stream prefixed with cookie */
|
||||
#define LTERM_XMLSTREAM_CODE 0x10000U /* Stream contains XML, not HTML */
|
||||
#define LTERM_DOCSTREAM_CODE 0x20000U /* Stream contains complete document */
|
||||
#define LTERM_WINSTREAM_CODE 0x40000U /* Display stream in entire window */
|
||||
|
||||
|
||||
/* LTERM/XTERM 16-bit style mask:
|
||||
* PROMPT, STDIN, STDOUT, STDERR, ALTOUT are mutually exclusive.
|
||||
* The markup styles apply to STDIN/STDOUT/ALTOUT data.
|
||||
* The highlighting styles only apply to STDOUT data.
|
||||
* The VT100 foreground and background styles are not implemented.
|
||||
*/
|
||||
|
||||
#define LTERM_PROMPT_STYLE 0x0001UL /* prompt string */
|
||||
#define LTERM_STDIN_STYLE 0x0002UL /* standard input */
|
||||
#define LTERM_STDOUT_STYLE 0x0004UL /* standard output */
|
||||
#define LTERM_STDERR_STYLE 0x0008UL /* standard error */
|
||||
#define LTERM_ALTOUT_STYLE 0x0010UL /* alternate output */
|
||||
|
||||
#define LTERM_URI_STYLE 0x0020UL /* URI markup */
|
||||
#define LTERM_HTML_STYLE 0x0040UL /* HTML markup */
|
||||
#define LTERM_XML_STYLE 0x0080UL /* XML markup */
|
||||
|
||||
#define LTERM_BOLD_STYLE 0x0100UL /* boldface */
|
||||
#define LTERM_ULINE_STYLE 0x0200UL /* underline */
|
||||
#define LTERM_BLINK_STYLE 0x0400UL /* blink */
|
||||
#define LTERM_DIM_STYLE 0x0800UL /* inverse video */
|
||||
|
||||
/* LTERM option flags */
|
||||
#define LTERM_NOCANONICAL_FLAG 0x0001U
|
||||
#define LTERM_NOEDIT_FLAG 0x0002U
|
||||
#define LTERM_NOCOMPLETION_FLAG 0x0004U
|
||||
#define LTERM_NOMETA_FLAG 0x0008U
|
||||
#define LTERM_NOPARTLINE_FLAG 0x0010U
|
||||
#define LTERM_NOECHO_FLAG 0x0020U
|
||||
#define LTERM_NOMARKUP_FLAG 0x0040U
|
||||
#define LTERM_NOPTY_FLAG 0x0080U
|
||||
#define LTERM_NOSTDERR_FLAG 0x0100U
|
||||
#define LTERM_NONUL_FLAG 0x0200U
|
||||
#define LTERM_NOLINEWRAP_FLAG 0x0400U
|
||||
#define LTERM_NOEXPORT_FLAG 0x0800U
|
||||
|
||||
/* Process type codes */
|
||||
#define LTERM_DETERMINE_PROCESS -1 /* Determine process type from name */
|
||||
#define LTERM_UNKNOWN_PROCESS 0 /* Unknown process type */
|
||||
#define LTERM_SH_PROCESS 1 /* Bourne shell */
|
||||
#define LTERM_KSH_PROCESS 2 /* Korn shell */
|
||||
#define LTERM_BASH_PROCESS 3 /* Bourne Again shell */
|
||||
#define LTERM_CSH_PROCESS 4 /* C shell */
|
||||
#define LTERM_TCSH_PROCESS 5 /* TC shell */
|
||||
|
||||
/* lterm_write data type codes (XML server output not permitted) */
|
||||
#define LTERM_WRITE_PLAIN_INPUT 0 /* Plain text user input */
|
||||
#define LTERM_WRITE_XML_INPUT 1 /* XML element user input */
|
||||
#define LTERM_WRITE_PLAIN_OUTPUT 2 /* Plain text server output */
|
||||
#define LTERM_WRITE_CLOSE_MESSAGE 3 /* End of file message */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LINETERM_H */
|
||||
1029
mozilla/extensions/xmlterm/base/ltermEscape.c
Normal file
1029
mozilla/extensions/xmlterm/base/ltermEscape.c
Normal file
File diff suppressed because it is too large
Load Diff
1113
mozilla/extensions/xmlterm/base/ltermIO.c
Normal file
1113
mozilla/extensions/xmlterm/base/ltermIO.c
Normal file
File diff suppressed because it is too large
Load Diff
829
mozilla/extensions/xmlterm/base/ltermInput.c
Normal file
829
mozilla/extensions/xmlterm/base/ltermInput.c
Normal file
@@ -0,0 +1,829 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* ltermInput.c: LTERM PTY input data processing
|
||||
*/
|
||||
|
||||
/* public declarations */
|
||||
#include "lineterm.h"
|
||||
|
||||
/* private declarations */
|
||||
#include "ltermPrivate.h"
|
||||
|
||||
|
||||
static int ltermLineInput(struct lterms *lts, const UNICHAR *buf, int count,
|
||||
int *opcodes);
|
||||
static int ltermMetaInput(struct lterms *lts);
|
||||
static int ltermRequestCompletion(struct lterms *lts, UNICHAR uch);
|
||||
|
||||
|
||||
/** Processes plain text input data and returns
|
||||
* OPCODES ::= LINEDATA ( INPUT ( NEWLINE HIDE? )?
|
||||
* | INPUT META ( COMPLETION | NEWLINE HIDE? ) )
|
||||
* if echoable input data was processed.
|
||||
* (OPCODES is set to zero if raw input data was processed)
|
||||
* Called from ltermWrite
|
||||
* @return 0 on success,
|
||||
* -1 on error, and
|
||||
* -2 if pseudo-TTY has been closed.
|
||||
*/
|
||||
int ltermPlainTextInput(struct lterms *lts,
|
||||
const UNICHAR *buf, int count, int *opcodes)
|
||||
{
|
||||
struct LtermInput *lti = &(lts->ltermInput);
|
||||
int returnCode;
|
||||
|
||||
LTERM_LOG(ltermPlainTextInput,20,
|
||||
("start lti->inputMode=%d\n", lti->inputMode));
|
||||
|
||||
if (lti->inputMode == LTERM0_RAW_MODE) {
|
||||
/* Transmit characters immediately to child process; no buffering */
|
||||
|
||||
LTERM_LOG(ltermPlainTextInput,29,
|
||||
("Raw mode, transmitting %d characters\n",
|
||||
count));
|
||||
|
||||
if (ltermSendData(lts, buf, count) != 0)
|
||||
return -1;
|
||||
|
||||
*opcodes = 0;
|
||||
|
||||
} else {
|
||||
/* Not raw input mode; process line mode input */
|
||||
int processTrailingTab = 0;
|
||||
|
||||
LTERM_LOG(ltermPlainTextInput,21,
|
||||
("Line mode, lts->commandNumber=%d, inputMode=%d\n",
|
||||
lts->commandNumber, lti->inputMode));
|
||||
|
||||
if ((lti->inputMode >= LTERM3_COMPLETION_MODE) &&
|
||||
(lts->commandNumber == 0)) {
|
||||
/* Downgrade input mode */
|
||||
lti->inputMode = LTERM2_EDIT_MODE;
|
||||
|
||||
LTERM_LOG(ltermPlainTextInput,21,
|
||||
("------------ Downgraded input mode=%d\n\n",
|
||||
lti->inputMode));
|
||||
|
||||
} else if ((lti->inputMode < lts->maxInputMode) &&
|
||||
(lts->commandNumber != 0)) {
|
||||
/* Upgrade input mode */
|
||||
int priorInputMode = lti->inputMode;
|
||||
|
||||
/* Set input mode (possibly allowing completion) */
|
||||
lti->inputMode = lts->maxInputMode;
|
||||
|
||||
/* Do not allow command completion without TTY echo */
|
||||
if ( (lts->disabledInputEcho || lts->noTTYEcho) &&
|
||||
(lti->inputMode > LTERM2_EDIT_MODE) )
|
||||
lti->inputMode = LTERM2_EDIT_MODE;
|
||||
|
||||
if ((lti->inputChars > 0) &&
|
||||
(priorInputMode < LTERM3_COMPLETION_MODE) &&
|
||||
(lti->inputMode >= LTERM3_COMPLETION_MODE)) {
|
||||
/* Process prior input TABs before switching to completion mode */
|
||||
int j;
|
||||
|
||||
if ((count == 0) &&
|
||||
(lti->inputCursorGlyph == lti->inputGlyphs) &&
|
||||
(lti->inputGlyphColIndex[lti->inputGlyphs] == lti->inputCols) &&
|
||||
(lti->inputColCharIndex[lti->inputCols] == lti->inputChars) &&
|
||||
(lti->inputLine[lti->inputChars] == U_TAB)) {
|
||||
/* Trailing TAB in prior input; delete it, and process it later */
|
||||
if (ltermDeleteGlyphs(lti, 1) != 0)
|
||||
return -1;
|
||||
processTrailingTab = 1;
|
||||
}
|
||||
|
||||
/* Replace all input TABs with spaces */
|
||||
for (j=0; j < lti->inputChars; j++) {
|
||||
if (lti->inputLine[j] == U_TAB)
|
||||
lti->inputLine[j] = U_SPACE;
|
||||
}
|
||||
}
|
||||
|
||||
LTERM_LOG(ltermPlainTextInput,21,
|
||||
("------------ Upgraded input mode=%d, trailingTab=%d\n\n",
|
||||
lti->inputMode, processTrailingTab));
|
||||
|
||||
}
|
||||
|
||||
if (processTrailingTab) {
|
||||
/* Re-process trailing TAB */
|
||||
UNICHAR uch = U_TAB;
|
||||
|
||||
assert(count == 0);
|
||||
|
||||
LTERM_LOG(ltermPlainTextInput,21,("Reprocessing trailing TAB\n"));
|
||||
|
||||
returnCode= ltermLineInput(lts, &uch, 1, opcodes);
|
||||
if (returnCode < 0)
|
||||
return returnCode;
|
||||
|
||||
} else {
|
||||
/* Process new input characters */
|
||||
returnCode = ltermLineInput(lts, buf, count, opcodes) != 0;
|
||||
if (returnCode < 0)
|
||||
return returnCode;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Cancels a prior command line completion request
|
||||
* @return 0 on success,
|
||||
* -1 on error
|
||||
*/
|
||||
int ltermCancelCompletion(struct lterms *lts)
|
||||
{
|
||||
|
||||
LTERM_LOG(ltermCancelCompletion,40,
|
||||
("++++++++++++ CANCELED COMPLETION REQUEST\n\n"));
|
||||
|
||||
if (lts->completionRequest != LTERM_NO_COMPLETION) {
|
||||
|
||||
/* Kill input line transmitted to process */
|
||||
if (ltermSendData(lts, lts->control+TTYKILL, 1) != 0)
|
||||
return -1;
|
||||
|
||||
lts->completionRequest = LTERM_NO_COMPLETION;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Inserts plain text character UCH as a single-column glyph at the
|
||||
* current input cursor location, translating to escape sequence if needed.
|
||||
* @return 0 on success, -1 on error.
|
||||
*/
|
||||
int ltermInsertChar(struct LtermInput *lti, UNICHAR uch)
|
||||
{
|
||||
UNICHAR* escapeSequence;
|
||||
int insChars, insertColIndex, insertCharIndex, j;
|
||||
|
||||
LTERM_LOG(ltermInsertChar,40,("inserting character 0x%x at glyph %d\n",
|
||||
uch, lti->inputCursorGlyph));
|
||||
|
||||
/* Ignore null character */
|
||||
if (uch == 0)
|
||||
return 0;
|
||||
|
||||
escapeSequence = NULL;
|
||||
insChars = 1;
|
||||
|
||||
#if 0
|
||||
/* COMMENTED OUT: Plain text not escaped; use code later in HTML insert */
|
||||
/* Check if plain text character needs to be escaped for XML/HTML */
|
||||
for (j=0; j<LTERM_PLAIN_ESCAPES; j++) {
|
||||
|
||||
if (uch == ltermGlobal.escapeChars[j]) {
|
||||
/* Insert escape sequence rather than character */
|
||||
escapeSequence = ltermGlobal.escapeSeq[j];
|
||||
insChars = ltermGlobal.escapeLen[j];
|
||||
LTERM_LOG(ltermInsertChar,42,("escape index=%d\n", j));
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif /* 0 */
|
||||
|
||||
if (lti->inputChars+insChars > MAXCOLM1) {
|
||||
/* Input buffer overflow; ignore insert character */
|
||||
LTERM_WARNING("ltermInsertChar: Warning - input line buffer overflow\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
assert(lti->inputChars >= 0);
|
||||
assert(lti->inputCols >= 0);
|
||||
assert(lti->inputGlyphs >= 0);
|
||||
assert(lti->inputCursorGlyph >= 0);
|
||||
|
||||
assert(lti->inputCols <= lti->inputChars);
|
||||
assert(lti->inputGlyphs <= lti->inputCols);
|
||||
|
||||
insertColIndex = lti->inputGlyphColIndex[lti->inputCursorGlyph];
|
||||
insertCharIndex = lti->inputColCharIndex[insertColIndex];
|
||||
|
||||
LTERM_LOG(ltermInsertChar,41,("insertColIndex=%d, insertCharIndex=%d, insChars=%d\n",
|
||||
insertColIndex, insertCharIndex, insChars));
|
||||
|
||||
/* Shift portion of input line to the right;
|
||||
remember that the column/glyph index arrays have an extra element */
|
||||
for (j=lti->inputChars - 1; j >= insertCharIndex; j--)
|
||||
lti->inputLine[j+insChars] = lti->inputLine[j];
|
||||
|
||||
for (j=lti->inputCols; j >= insertColIndex; j--)
|
||||
lti->inputColCharIndex[j+1] = lti->inputColCharIndex[j]+insChars;
|
||||
|
||||
for (j=lti->inputGlyphs; j >= lti->inputCursorGlyph; j--) {
|
||||
lti->inputGlyphCharIndex[j+1] = lti->inputGlyphCharIndex[j]+insChars;
|
||||
lti->inputGlyphColIndex[j+1] = lti->inputGlyphColIndex[j]+1;
|
||||
}
|
||||
|
||||
/* Insert character(s) in input line */
|
||||
if (escapeSequence == NULL) {
|
||||
lti->inputLine[insertCharIndex] = uch;
|
||||
} else {
|
||||
for (j=0; j < insChars; j++)
|
||||
lti->inputLine[j+insertCharIndex] = escapeSequence[j];
|
||||
}
|
||||
|
||||
/* Insert column/glyph */
|
||||
lti->inputColCharIndex[insertColIndex] = insertCharIndex;
|
||||
|
||||
lti->inputGlyphCharIndex[lti->inputCursorGlyph] = insertCharIndex;
|
||||
lti->inputGlyphColIndex[lti->inputCursorGlyph] = insertColIndex;
|
||||
|
||||
lti->inputChars += insChars; /* Increment character count */
|
||||
|
||||
lti->inputCols++; /* Increment column count */
|
||||
|
||||
lti->inputGlyphs++; /* Increment glyph count */
|
||||
|
||||
lti->inputCursorGlyph++; /* Reposition cursor */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** switches to raw input mode */
|
||||
void ltermSwitchToRawMode(struct lterms *lts)
|
||||
{
|
||||
struct LtermInput *lti = &(lts->ltermInput);
|
||||
|
||||
LTERM_LOG(ltermSwitchToRawMode,40,("\n"));
|
||||
|
||||
if (lti->inputMode != LTERM0_RAW_MODE) {
|
||||
/* Do other things ... */
|
||||
lti->inputMode = LTERM0_RAW_MODE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** clears input line buffer and switches to regular input mode */
|
||||
void ltermClearInputLine(struct lterms *lts)
|
||||
{
|
||||
struct LtermInput *lti = &(lts->ltermInput);
|
||||
|
||||
LTERM_LOG(ltermClearInputLine,40,("\n"));
|
||||
|
||||
lti->inputChars = 0;
|
||||
|
||||
lti->inputCols = 0;
|
||||
lti->inputColCharIndex[0] = 0;
|
||||
|
||||
lti->inputGlyphs = 0;
|
||||
lti->inputGlyphCharIndex[0] = 0;
|
||||
lti->inputGlyphColIndex[0] = 0;
|
||||
|
||||
lti->inputCursorGlyph = 0;
|
||||
|
||||
if (lts->maxInputMode >= LTERM2_EDIT_MODE)
|
||||
lti->inputMode = LTERM2_EDIT_MODE;
|
||||
else
|
||||
lti->inputMode = lts->maxInputMode;
|
||||
|
||||
lti->escapeFlag = 0;
|
||||
lti->escapeCSIFlag = 0;
|
||||
lti->escapeCSIArg = 0;
|
||||
}
|
||||
|
||||
|
||||
/** Processes an input string in canonical or higher mode and returns
|
||||
* OPCODES ::= LINEDATA ( INPUT (NEWLINE HIDE?)?
|
||||
* | INPUT META (COMPLETION|NEWLINE HIDE?) )
|
||||
* if echoable input data was processed.
|
||||
* (OPCODES is set to zero if raw input data was processed)
|
||||
* Called from ltermPlainTextInput
|
||||
* @return 0 on success,
|
||||
* -1 on error, and
|
||||
* -2 if pseudo-TTY has been closed.
|
||||
*/
|
||||
static int ltermLineInput(struct lterms *lts,
|
||||
const UNICHAR *buf, int count, int *opcodes)
|
||||
{
|
||||
struct LtermInput *lti = &(lts->ltermInput);
|
||||
UNICHAR uch;
|
||||
int charIndex, metaInput;
|
||||
|
||||
/* Default returned opcodes (maybe overridden) */
|
||||
*opcodes = LTERM_LINEDATA_CODE | LTERM_INPUT_CODE;
|
||||
|
||||
charIndex = 0;
|
||||
|
||||
LTERM_LOG(ltermLineInput,30,
|
||||
("lti->inputMode=%d, inputCursorGlyph=%d\n",
|
||||
lti->inputMode, lti->inputCursorGlyph));
|
||||
LTERM_LOGUNICODE(ltermLineInput,31,(buf, count));
|
||||
LTERM_LOG(ltermLineInput,31,("Glyphs=%d,Cols=%d,Chars=%d\n",
|
||||
lti->inputGlyphs, lti->inputCols, lti->inputChars));
|
||||
|
||||
while (charIndex < count) {
|
||||
uch = buf[charIndex];
|
||||
|
||||
if (uch == U_ESCAPE) {
|
||||
/* Escape */
|
||||
lti->escapeFlag = 1;
|
||||
uch = U_NUL;
|
||||
|
||||
} else if (lti->escapeFlag) {
|
||||
/* Escaped character */
|
||||
lti->escapeFlag = 0;
|
||||
|
||||
switch (uch) {
|
||||
|
||||
case U_LBRACKET:
|
||||
/* Start of escape code sequence */
|
||||
lti->escapeCSIFlag = 1;
|
||||
lti->escapeCSIArg = 0;
|
||||
uch = U_NUL;
|
||||
break;
|
||||
|
||||
default:
|
||||
uch = U_NUL;
|
||||
}
|
||||
|
||||
} else if (lti->escapeCSIFlag) {
|
||||
/* Character part of escape code sequence */
|
||||
|
||||
if ((uch >= U_ZERO && uch <= U_NINE)) {
|
||||
/* Process numerical argument to escape code sequence */
|
||||
lti->escapeCSIArg = lti->escapeCSIArg*10 + (uch - U_ZERO);
|
||||
uch = U_NUL;
|
||||
|
||||
} else {
|
||||
/* End of escape code sequence */
|
||||
lti->escapeCSIFlag = 0;
|
||||
|
||||
/* SUN arrow key bindings */
|
||||
switch (uch) {
|
||||
case U_A_CHAR:
|
||||
uch = U_CTL_P;
|
||||
break;
|
||||
case U_B_CHAR:
|
||||
uch = U_CTL_N;
|
||||
break;
|
||||
case U_C_CHAR:
|
||||
uch = U_CTL_F;
|
||||
break;
|
||||
case U_D_CHAR:
|
||||
uch = U_CTL_B;
|
||||
break;
|
||||
default:
|
||||
uch = U_NUL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ((uch >= U_SPACE) && (uch != U_DEL)) ||
|
||||
((uch == U_TAB) && (lti->inputMode <= LTERM2_EDIT_MODE)) ) {
|
||||
/* printable character or non-completion mode TAB; insert in buffer */
|
||||
/* (NEED TO UPDATE THIS CHECK FOR UNICODE PRINTABILITY) */
|
||||
|
||||
LTERM_LOG(ltermLineInput,39,("inserting printable character - %c\n",
|
||||
(char) uch));
|
||||
|
||||
/* Insert character */
|
||||
if (ltermInsertChar(lti, uch) != 0)
|
||||
return -1;
|
||||
|
||||
} else {
|
||||
/* Control character */
|
||||
|
||||
/* Line break control characters */
|
||||
if ( (uch == U_LINEFEED) ||
|
||||
(uch == lts->control[TTYDISCARD]) ||
|
||||
(uch == lts->control[TTYSUSPEND]) ||
|
||||
(uch == lts->control[TTYINTERRUPT])) {
|
||||
/* Newline/TTYdiscard/TTYsuspend/TTYinterrupt character */
|
||||
|
||||
/* Assert that linebreak character occurs at end of buffer;
|
||||
* enforced by lterm_write.
|
||||
*/
|
||||
assert(charIndex == count-1);
|
||||
|
||||
/* Check if meta input line */
|
||||
metaInput = ltermMetaInput(lts);
|
||||
|
||||
if ((uch == lts->control[TTYDISCARD]) && !metaInput
|
||||
&& (lts->commandNumber == 0)) {
|
||||
/* Not meta/command line; simply transmit discard character */
|
||||
if (ltermSendData(lts, lts->control+TTYDISCARD, 1) != 0)
|
||||
return -1;
|
||||
|
||||
} else {
|
||||
/* Newline behaviour, with hide option */
|
||||
LTERM_LOG(ltermLineInput,31,("------------ NEWLINE (0x%x)\n\n",
|
||||
uch));
|
||||
LTERM_LOGUNICODE(ltermLineInput,31,( lti->inputLine,
|
||||
lti->inputChars));
|
||||
|
||||
/* The NEWLINE code tells ltermReturnInputLine to clear
|
||||
* the input line buffer after copying it
|
||||
*/
|
||||
*opcodes = LTERM_LINEDATA_CODE | LTERM_INPUT_CODE
|
||||
| LTERM_NEWLINE_CODE;
|
||||
|
||||
if (uch == lts->control[TTYDISCARD]) {
|
||||
*opcodes |= LTERM_HIDE_CODE;
|
||||
uch = U_LINEFEED; /* essentially newline behaviour otherwise */
|
||||
}
|
||||
|
||||
if (metaInput) {
|
||||
/* meta input; do not send line */
|
||||
*opcodes |= LTERM_META_CODE;
|
||||
} else {
|
||||
/* Send line and copy to echo buffer */
|
||||
if (ltermSendLine(lts, uch, (uch != U_LINEFEED),
|
||||
LTERM_NO_COMPLETION) != 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else if (uch == lts->control[TTYKILL]) {
|
||||
/* kill line */
|
||||
ltermClearInputLine(lts);
|
||||
|
||||
LTERM_LOG(ltermLineInput,31,("TTYKILL\n"));
|
||||
|
||||
} else if ((uch == U_BACKSPACE) ||
|
||||
(uch == lts->control[TTYERASE])) {
|
||||
/* erase glyph */
|
||||
if (ltermDeleteGlyphs(lti, 1) != 0)
|
||||
return -1;
|
||||
|
||||
LTERM_LOG(ltermLineInput,39,("TTYERASE\n"));
|
||||
|
||||
} else {
|
||||
/* other control characters */
|
||||
if (lti->inputMode >= LTERM2_EDIT_MODE) {
|
||||
switch (uch) {
|
||||
|
||||
case U_NUL: /* Null character; ignore */
|
||||
break;
|
||||
|
||||
case U_CTL_B: /* move cursor backward */
|
||||
LTERM_LOG(ltermLineInput,32,("^B\n"));
|
||||
if (lti->inputCursorGlyph > 0) {
|
||||
lti->inputCursorGlyph--;
|
||||
}
|
||||
break;
|
||||
|
||||
case U_CTL_F: /* move cursor forward */
|
||||
LTERM_LOG(ltermLineInput,32,("^F\n"));
|
||||
if (lti->inputCursorGlyph < lti->inputGlyphs) {
|
||||
lti->inputCursorGlyph++;
|
||||
}
|
||||
break;
|
||||
|
||||
case U_CTL_A: /* position cursor at beginning of line */
|
||||
LTERM_LOG(ltermLineInput,32,("^A\n"));
|
||||
lti->inputCursorGlyph = 0;
|
||||
break;
|
||||
|
||||
case U_CTL_E: /* position cursor at end of line */
|
||||
LTERM_LOG(ltermLineInput,32,("^E\n"));
|
||||
lti->inputCursorGlyph = lti->inputGlyphs;
|
||||
break;
|
||||
|
||||
case U_CTL_K: /* delete to end of line */
|
||||
LTERM_LOG(ltermLineInput,32,("^K\n"));
|
||||
if (ltermDeleteGlyphs(lti,-(lti->inputGlyphs-lti->inputCursorGlyph))
|
||||
!= 0)
|
||||
return -1;
|
||||
break;
|
||||
|
||||
case U_CTL_L: /* form feed */
|
||||
case U_CTL_R: /* redisplay */
|
||||
LTERM_LOG(ltermLineInput,32,("^%c\n", uch+U_ATSIGN));
|
||||
break;
|
||||
|
||||
case U_CTL_D: /* ^D */
|
||||
case U_CTL_N: /* dowN history */
|
||||
case U_CTL_P: /* uP history */
|
||||
case U_CTL_Y: /* yank */
|
||||
case U_TAB: /* command completion */
|
||||
|
||||
/* Assert that completion character occurs at end of buffer;
|
||||
* enforced by lterm_write.
|
||||
*/
|
||||
assert(charIndex == count-1);
|
||||
|
||||
metaInput = ltermMetaInput(lts);
|
||||
|
||||
if (metaInput) {
|
||||
/* Meta input command completion */
|
||||
LTERM_LOG(ltermLineInput,40,
|
||||
("++++++++++++ meta COMPLETION uch=0x%X\n\n", uch));
|
||||
if (uch == U_TAB) {
|
||||
*opcodes = LTERM_LINEDATA_CODE | LTERM_INPUT_CODE
|
||||
| LTERM_META_CODE
|
||||
| LTERM_COMPLETION_CODE;
|
||||
} else {
|
||||
LTERM_WARNING("ltermLineInput: Warning - meta command completion not yet implemented for uch=0x%x\n", uch);
|
||||
}
|
||||
|
||||
} else if (lti->inputMode >= LTERM3_COMPLETION_MODE) {
|
||||
/* Completion mode; non-completion TABs already processed */
|
||||
|
||||
if (ltermRequestCompletion(lts, uch) != 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Increment character index */
|
||||
charIndex++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Check if input line contains a meta delimiter;
|
||||
* @return 1 if it does, 0 otherwise.
|
||||
*/
|
||||
static int ltermMetaInput(struct lterms *lts)
|
||||
{
|
||||
struct LtermInput *lti = &(lts->ltermInput);
|
||||
UNICHAR *delimLoc, *ustr, *ustr2;
|
||||
|
||||
LTERM_LOG(ltermMetaInput,40,("\n"));
|
||||
|
||||
if (lts->options & LTERM_NOMETA_FLAG)
|
||||
return 0;
|
||||
|
||||
/* Assert that there is at least one free character position in the buffer */
|
||||
assert(lti->inputChars < MAXCOL);
|
||||
|
||||
/* Insert null character at the end of the input buffer */
|
||||
lti->inputLine[lti->inputChars] = U_NUL;
|
||||
|
||||
/* Locate first occurrence of meta delimiter in input line */
|
||||
delimLoc = ucschr(lti->inputLine, ltermGlobal.metaDelimiter);
|
||||
|
||||
if (delimLoc == NULL)
|
||||
return 0;
|
||||
|
||||
for (ustr=lti->inputLine; ustr<delimLoc; ustr++) /* skip spaces/TABs */
|
||||
if ((*ustr != U_SPACE) && (*ustr != U_TAB)) break;
|
||||
|
||||
if (ustr == delimLoc) {
|
||||
/* Nameless meta command */
|
||||
LTERM_LOG(ltermMetaInput,41,("Nameless meta command\n"));
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!IS_ASCII_LETTER(*ustr)) /* meta command must start with a letter */
|
||||
return 0;
|
||||
|
||||
for (ustr2=ustr+1; ustr2<delimLoc; ustr2++)
|
||||
if (!IS_ASCII_LETTER(*ustr2) && !IS_ASCII_DIGIT(*ustr2))
|
||||
return 0;
|
||||
|
||||
LTERM_LOG(ltermMetaInput,41,("Named meta command\n"));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/** Requests command line completion from process corresponding to
|
||||
* control character UCH.
|
||||
* @return 0 on success,
|
||||
* -1 on error
|
||||
*/
|
||||
static int ltermRequestCompletion(struct lterms *lts, UNICHAR uch)
|
||||
{
|
||||
LTERM_LOG(ltermRequestCompletion,40,
|
||||
("++++++++++++ COMPLETION REQUEST uch=0x%X\n\n", uch));
|
||||
|
||||
if ((uch == U_CTL_D) &&
|
||||
!(lts->processType == LTERM_TCSH_PROCESS)){
|
||||
/* If ^D and not TCSH, simply transmit character */
|
||||
if (ltermSendData(lts, &uch, 1) != 0)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (uch) {
|
||||
case U_TAB:
|
||||
/* Send line and copy to echo buffer */
|
||||
if (ltermSendLine(lts, uch, 0, LTERM_TAB_COMPLETION) != 0)
|
||||
return -1;
|
||||
break;
|
||||
case U_CTL_P:
|
||||
case U_CTL_N:
|
||||
/* Send line and copy to echo buffer */
|
||||
if (ltermSendLine(lts, uch, 0, LTERM_HISTORY_COMPLETION) != 0)
|
||||
return -1;
|
||||
break;
|
||||
default:
|
||||
LTERM_WARNING("ltermCompletionRequest: Warning - command completion not yet implemented for uch=0x%x\n", uch);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Deletes glyphs from the input line.
|
||||
* If COUNT > 0, glyphs are deleted to the left of the cursor.
|
||||
* If COUNT < 0, glyphs are deleted to the right of the cursor.
|
||||
* Called from ltermLineInput.
|
||||
* @return 0 on success, -1 on error.
|
||||
*/
|
||||
int ltermDeleteGlyphs(struct LtermInput *lti, int count)
|
||||
{
|
||||
int leftGlyph, leftColIndex, leftCharIndex;
|
||||
int rightGlyph, rightColIndex, rightCharIndex;
|
||||
int deleteGlyphs, deleteCols, deleteChars, j;
|
||||
|
||||
LTERM_LOG(ltermDeleteGlyphs,40,("deleting %d glyphs from glyph %d\n",
|
||||
count, lti->inputCursorGlyph));
|
||||
|
||||
if (count >= 0) {
|
||||
/* Delete to the left */
|
||||
deleteGlyphs = count;
|
||||
|
||||
/* Limit the number of glyphs deleted to that present to the left */
|
||||
if (deleteGlyphs > lti->inputCursorGlyph)
|
||||
deleteGlyphs = lti->inputCursorGlyph;
|
||||
|
||||
rightGlyph = lti->inputCursorGlyph;
|
||||
leftGlyph = rightGlyph - deleteGlyphs;
|
||||
|
||||
} else {
|
||||
/* Delete to the right */
|
||||
deleteGlyphs = -count;
|
||||
|
||||
/* Limit the number of glyphs deleted to that present to the right */
|
||||
if (deleteGlyphs > (lti->inputGlyphs - lti->inputCursorGlyph))
|
||||
deleteGlyphs = lti->inputGlyphs - lti->inputCursorGlyph;
|
||||
|
||||
leftGlyph = lti->inputCursorGlyph;
|
||||
rightGlyph = leftGlyph + deleteGlyphs;
|
||||
}
|
||||
|
||||
leftColIndex = lti->inputGlyphColIndex[leftGlyph];
|
||||
leftCharIndex = lti->inputGlyphCharIndex[leftGlyph];
|
||||
|
||||
rightColIndex = lti->inputGlyphColIndex[rightGlyph];
|
||||
rightCharIndex = lti->inputGlyphCharIndex[rightGlyph];
|
||||
|
||||
deleteCols = rightColIndex - leftColIndex;
|
||||
deleteChars = rightCharIndex - leftCharIndex;
|
||||
|
||||
LTERM_LOG(ltermDeleteGlyphs,41,("deleteCols=%d, deleteChars=%d\n",
|
||||
deleteCols, deleteChars));
|
||||
|
||||
LTERM_LOG(ltermDeleteGlyphs,42,("leftGlyph=%d, leftCol=%d, leftChar=%d\n",
|
||||
leftGlyph, leftColIndex, leftCharIndex));
|
||||
|
||||
LTERM_LOG(ltermDeleteGlyphs,42,("rightGlyph=%d, rightCol=%d, rightChar=%d\n",
|
||||
rightGlyph, rightColIndex, rightCharIndex));
|
||||
|
||||
/* Shift portion of input line to the left;
|
||||
remember that the column/glyph index arrays have an extra element */
|
||||
for (j = leftCharIndex; j < lti->inputChars-deleteChars; j++)
|
||||
lti->inputLine[j] = lti->inputLine[j+deleteChars];
|
||||
|
||||
for (j = leftColIndex; j <= lti->inputCols-deleteCols; j++)
|
||||
lti->inputColCharIndex[j] = lti->inputColCharIndex[j+deleteCols]
|
||||
- deleteChars;
|
||||
|
||||
for (j = leftGlyph; j <= lti->inputGlyphs-deleteGlyphs; j++)
|
||||
lti->inputGlyphColIndex[j] = lti->inputGlyphColIndex[j+deleteGlyphs]
|
||||
- deleteCols;
|
||||
|
||||
lti->inputChars -= deleteChars; /* Decrement character count */
|
||||
|
||||
lti->inputCols -= deleteCols; /* Decrement column count */
|
||||
|
||||
lti->inputGlyphs -= deleteGlyphs; /* Decrement glyph count */
|
||||
|
||||
if (count > 0)
|
||||
lti->inputCursorGlyph -= deleteGlyphs; /* Reposition glyph cursor */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Transmits COUNT Unicode characters from BUF to child process
|
||||
* after translating Unicode to UTF8 or Latin1, as appropriate.
|
||||
* The data is transmitted in smallish chunks so as not to overflow the
|
||||
* PTY input buffer.
|
||||
* @return 0 on successful write, -1 on error.
|
||||
*/
|
||||
int ltermSendData(struct lterms *lts, const UNICHAR *buf, int count)
|
||||
{
|
||||
char ch, ptyBuf[MAXPTYIN];
|
||||
int remainingChars, chunkSize, success;
|
||||
|
||||
assert(lts != NULL);
|
||||
assert(count >= 0);
|
||||
|
||||
LTERM_LOG(ltermSendData,40,("count=%d\n", count));
|
||||
LTERM_LOGUNICODE(ltermSendData,41,(buf, count));
|
||||
|
||||
if ((count == 1) && (*buf < 0x80)) {
|
||||
/* Optimized code to transmit single ASCII character */
|
||||
ch = (char) *buf;
|
||||
|
||||
if (lts->ptyMode)
|
||||
#ifndef USE_NSPR_IO
|
||||
success = (write(lts->pty.ptyFD, &ch, 1) == 1);
|
||||
#else
|
||||
assert(0);
|
||||
#endif
|
||||
else
|
||||
success = (WRITE(lts->ltermProcess.processIN, &ch, 1) == 1);
|
||||
|
||||
if (!success) {
|
||||
#if defined(DEBUG) && !defined(USE_NSPR_IO)
|
||||
int errcode = errno;
|
||||
perror("ltermSendData");
|
||||
#else
|
||||
int errcode = 0;
|
||||
#endif
|
||||
LTERM_ERROR("ltermSendData: Error %d in writing to child STDIN\n",
|
||||
errcode);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
remainingChars = count;
|
||||
while (remainingChars > 0) {
|
||||
/* Convert Unicode to UTF8 */
|
||||
ucstoutf8(&buf[count-remainingChars], remainingChars,
|
||||
ptyBuf, MAXPTYIN,
|
||||
&remainingChars, &chunkSize);
|
||||
|
||||
assert(chunkSize > 0);
|
||||
|
||||
LTERM_LOG(ltermSendData,42,("remainingChars=%d, chunkSize=%d\n",
|
||||
remainingChars, chunkSize));
|
||||
|
||||
/* Send UTF8 to process */
|
||||
if (lts->ptyMode)
|
||||
#ifndef USE_NSPR_IO
|
||||
success = (write(lts->pty.ptyFD, &ptyBuf,
|
||||
(SIZE_T) chunkSize) == chunkSize);
|
||||
#else
|
||||
assert(0);
|
||||
#endif
|
||||
else
|
||||
success = (WRITE(lts->ltermProcess.processIN, &ptyBuf,
|
||||
(SIZE_T) chunkSize) == chunkSize);
|
||||
|
||||
if (!success) {
|
||||
#if defined(DEBUG) && !defined(USE_NSPR_IO)
|
||||
int errcode = errno;
|
||||
perror("ltermSendData");
|
||||
#else
|
||||
int errcode = 0;
|
||||
#endif
|
||||
LTERM_ERROR("ltermSendData: Error %d in writing to child STDIN\n",
|
||||
errcode);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
1190
mozilla/extensions/xmlterm/base/ltermManager.c
Normal file
1190
mozilla/extensions/xmlterm/base/ltermManager.c
Normal file
File diff suppressed because it is too large
Load Diff
895
mozilla/extensions/xmlterm/base/ltermOutput.c
Normal file
895
mozilla/extensions/xmlterm/base/ltermOutput.c
Normal file
@@ -0,0 +1,895 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* ltermOutput.c: LTERM PTY output processing
|
||||
*/
|
||||
|
||||
/* public declarations */
|
||||
#include "lineterm.h"
|
||||
|
||||
/* private declarations */
|
||||
#include "ltermPrivate.h"
|
||||
|
||||
|
||||
static int ltermAppendOutput(struct lterms *lts, const char *cbuf, int count,
|
||||
UNISTYLE style, int interleaveCheck,
|
||||
int *interleavedBytes, int rawIncompleteMax,
|
||||
int *rawIncompleteBytes, char *rawIncompleteBuf);
|
||||
static int ltermDecode(const char *rawBuf, int n_total,
|
||||
UNICHAR* decodedBuf, int decodeMax,
|
||||
int decodeNUL,
|
||||
int *rawIncompleteBytes);
|
||||
static int ltermPromptLocate(struct lterms *lts);
|
||||
|
||||
|
||||
/** Processes output from decoded output buffer and returns *opcodes:
|
||||
* OPCODES ::= SCREENDATA BELL? ( CLEAR
|
||||
* | INSERT MOVEDOWN?
|
||||
* | DELETE MOVEDOWN?
|
||||
* | OUTPUT )
|
||||
* if ScreenMode data is being returned.
|
||||
* OPCODES ::= LINEDATA BELL? ( CLEAR
|
||||
* | OUTPUT NEWLINE?)
|
||||
* if LineMode data is being returned.
|
||||
* @return 0 on success and -1 on error.
|
||||
*/
|
||||
int ltermProcessOutput(struct lterms *lts, int *opcodes)
|
||||
{
|
||||
struct LtermOutput *lto = &(lts->ltermOutput);
|
||||
UNICHAR uch;
|
||||
UNISTYLE ustyle;
|
||||
int charIndex, returnCode, consumedChars, remainingChars, j;
|
||||
int bellFlag;
|
||||
|
||||
LTERM_LOG(ltermProcessOutput,30,("lto->outputMode=%d, cursorChar=%d, Chars=%d\n",
|
||||
lto->outputMode, lto->outputCursorChar, lto->outputChars));
|
||||
|
||||
LTERM_LOG(ltermProcessOutput,32, ("lts->commandNumber=%d\n",
|
||||
lts->commandNumber));
|
||||
|
||||
*opcodes = 0;
|
||||
charIndex = 0;
|
||||
bellFlag = 0;
|
||||
|
||||
while ((*opcodes == 0) && (charIndex < lto->decodedChars)) {
|
||||
uch = lto->decodedOutput[charIndex];
|
||||
ustyle = lto->decodedStyle[charIndex] | lto->styleMask;
|
||||
|
||||
consumedChars = 1;
|
||||
|
||||
if (uch == U_ESCAPE) {
|
||||
/* Process escape sequence */
|
||||
int savedOutputMode = lto->outputMode;
|
||||
|
||||
LTERM_LOG(ltermProcessOutput,31,("ESCAPE sequence\n"));
|
||||
|
||||
returnCode = ltermProcessEscape(lts, lto->decodedOutput+charIndex,
|
||||
lto->decodedChars-charIndex,
|
||||
lto->decodedStyle+charIndex,
|
||||
&consumedChars, opcodes);
|
||||
if (returnCode < 0)
|
||||
return -1;
|
||||
|
||||
if (returnCode == 1) {
|
||||
/* Incomplete escape sequence */
|
||||
lto->incompleteEscapeSequence = 1;
|
||||
if (lto->outputMode == LTERM1_SCREEN_MODE)
|
||||
*opcodes = LTERM_SCREENDATA_CODE | LTERM_OUTPUT_CODE;
|
||||
else
|
||||
*opcodes = LTERM_LINEDATA_CODE | LTERM_OUTPUT_CODE;
|
||||
}
|
||||
|
||||
/* Assert that change in output mode is a loop terminating condition */
|
||||
if (lto->outputMode != savedOutputMode)
|
||||
assert(*opcodes != 0);
|
||||
|
||||
} else if (lto->outputMode == LTERM1_SCREEN_MODE) {
|
||||
/* Screen mode processing */
|
||||
|
||||
if ((uch >= U_SPACE) && (uch != U_DEL)) {
|
||||
/* Printable non-TAB character */
|
||||
|
||||
LTERM_LOG(ltermProcessOutput,39,("Screen mode, printable char - %c\n",
|
||||
(char) uch));
|
||||
|
||||
if (lto->insertMode) {
|
||||
/* Insert blank character at cursor position */
|
||||
if (ltermInsDelEraseChar(lts, 1, LTERM_INSERT_CHAR) != 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Mark column as being modified */
|
||||
if ((lto->modifiedCol[lto->cursorRow] == -1) ||
|
||||
(lto->modifiedCol[lto->cursorRow] > lto->cursorCol))
|
||||
lto->modifiedCol[lto->cursorRow] = lto->cursorCol;
|
||||
|
||||
/* Replace character and style info at current cursor location */
|
||||
j = lto->cursorRow*lts->nCols + lto->cursorCol;
|
||||
|
||||
assert(j < lts->screenSize);
|
||||
|
||||
lto->screenChar[j] = uch;
|
||||
lto->screenStyle[j] = ustyle;
|
||||
|
||||
if (lto->cursorCol < lts->nCols-1) {
|
||||
/* Move cursor right */
|
||||
lto->cursorCol++;
|
||||
|
||||
/* Increase row column count, if necessary */
|
||||
if (lto->rowCols[lto->cursorRow] < lto->cursorCol)
|
||||
lto->rowCols[lto->cursorRow] = lto->cursorCol;
|
||||
|
||||
} else {
|
||||
/* Set row column count to maximum value */
|
||||
lto->rowCols[lto->cursorRow] = lts->nCols;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* Control character */
|
||||
|
||||
switch (uch) {
|
||||
case U_BACKSPACE: /* Backspace */
|
||||
LTERM_LOG(ltermProcessOutput,32,("Screen mode, BACKSPACE\n"));
|
||||
if (lto->cursorCol > 0)
|
||||
lto->cursorCol--;
|
||||
break;
|
||||
|
||||
case U_BEL: /* Bell */
|
||||
LTERM_LOG(ltermProcessOutput,32,("************ Screen mode, BELL\n"));
|
||||
bellFlag = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Ignore other control characters (including NULs) */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
/* Line mode processing */
|
||||
|
||||
if ( ((uch >= U_SPACE) && (uch != U_DEL)) ||
|
||||
(uch == U_TAB)) {
|
||||
/* Printable/TAB character; replace/insert at current cursor location
|
||||
or append to end of line */
|
||||
|
||||
LTERM_LOG(ltermProcessOutput,39,("Line mode, printable char - %c\n",
|
||||
(char) uch));
|
||||
|
||||
if (lto->outputCursorChar == lto->outputChars) {
|
||||
/* Append single character to end of line */
|
||||
|
||||
if (lto->outputChars+1 > MAXCOLM1) {
|
||||
/* Output buffer overflow; ignore character */
|
||||
LTERM_WARNING("ltermProcessOutput: Warning - output line buffer overflow\n");
|
||||
}
|
||||
|
||||
lto->outputLine[lto->outputChars] = uch;
|
||||
lto->outputStyle[lto->outputChars] = ustyle;
|
||||
lto->outputChars++; /* Insert character in output line */
|
||||
|
||||
lto->outputCursorChar++; /* Reposition cursor */
|
||||
|
||||
} else {
|
||||
/* Replace/insert single character in the middle of line */
|
||||
|
||||
if (lto->insertMode) {
|
||||
/* Insert blank character at cursor position */
|
||||
if (ltermInsDelEraseChar(lts, 1, LTERM_INSERT_CHAR) != 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Overwrite single character in the middle of line */
|
||||
lto->outputLine[lto->outputCursorChar] = uch;
|
||||
lto->outputStyle[lto->outputCursorChar] = ustyle;
|
||||
|
||||
/* Note modifications */
|
||||
if (lto->outputCursorChar < lto->outputModifiedChar)
|
||||
lto->outputModifiedChar = lto->outputCursorChar;
|
||||
|
||||
lto->outputCursorChar++; /* Reposition cursor */
|
||||
}
|
||||
|
||||
} else {
|
||||
/* Control character */
|
||||
|
||||
switch (uch) {
|
||||
case U_BACKSPACE: /* Backspace */
|
||||
LTERM_LOG(ltermProcessOutput,32,("Line mode, BACKSPACE\n"));
|
||||
if (lto->outputCursorChar > 0)
|
||||
lto->outputCursorChar--;
|
||||
break;
|
||||
|
||||
case U_CRETURN: /* Carriage return */
|
||||
LTERM_LOG(ltermProcessOutput,32,("Line mode, CRETURN\n"));
|
||||
lto->outputCursorChar = 0;
|
||||
break;
|
||||
|
||||
case U_BEL: /* Bell */
|
||||
LTERM_LOG(ltermProcessOutput,32,("************ Line mode, BELL\n"));
|
||||
bellFlag = 1;
|
||||
break;
|
||||
|
||||
case U_CTL_L: /* Formfeed; clear line and return */
|
||||
LTERM_LOG(ltermProcessOutput,32,("************ Line mode, FORMFEED\n\n"));
|
||||
|
||||
ltermClearOutputLine(lts);
|
||||
*opcodes = LTERM_LINEDATA_CODE | LTERM_CLEAR_CODE;
|
||||
break;
|
||||
|
||||
case U_LINEFEED: /* Newline; return complete line */
|
||||
LTERM_LOG(ltermProcessOutput,32,("************ Line mode, NEWLINE\n\n"));
|
||||
|
||||
*opcodes = LTERM_LINEDATA_CODE
|
||||
| LTERM_OUTPUT_CODE
|
||||
| LTERM_NEWLINE_CODE;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Ignore other control characters (including NULs) */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Increment character index */
|
||||
charIndex += consumedChars;
|
||||
}
|
||||
|
||||
/* Determine count of unprocessed characters */
|
||||
remainingChars = lto->decodedChars - charIndex;
|
||||
|
||||
if (remainingChars > 0) {
|
||||
/* Move unprocessed output to beginning of decode buffer */
|
||||
|
||||
LTERM_LOG(ltermProcessOutput,32,("Moved %d chars to beginning of decodedOutput\n", remainingChars));
|
||||
for (j=0; j<remainingChars; j++) {
|
||||
lto->decodedOutput[j] = lto->decodedOutput[j+charIndex];
|
||||
lto->decodedStyle[j] = lto->decodedStyle[j+charIndex];
|
||||
}
|
||||
}
|
||||
|
||||
/* Update remaining decoded character count */
|
||||
lto->decodedChars = remainingChars;
|
||||
|
||||
if (*opcodes == 0) {
|
||||
/* All output processed; without any special terminating condition */
|
||||
if (lto->outputMode == LTERM1_SCREEN_MODE) {
|
||||
/* Full screen mode */
|
||||
*opcodes = LTERM_SCREENDATA_CODE | LTERM_OUTPUT_CODE;
|
||||
|
||||
} else {
|
||||
/* Line mode */
|
||||
*opcodes = LTERM_LINEDATA_CODE | LTERM_OUTPUT_CODE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set bell code */
|
||||
if (bellFlag)
|
||||
*opcodes |= LTERM_BELL_CODE;
|
||||
|
||||
if (*opcodes & LTERM_LINEDATA_CODE) {
|
||||
/* Returning line mode data; check for prompt */
|
||||
|
||||
if ((lts->commandNumber == 0) ||
|
||||
(lto->outputModifiedChar < lto->promptChars)) {
|
||||
/* If not command line or if "prompt string" may have been modified,
|
||||
* search for prompt
|
||||
*/
|
||||
int promptLen;
|
||||
|
||||
LTERM_LOG(ltermProcessOutput,39,("Prompt? modifiedChar=%d, promptChars=%d\n",
|
||||
lto->outputModifiedChar, lto->promptChars));
|
||||
|
||||
/* Reset modification marker */
|
||||
lto->outputModifiedChar = lto->outputChars;
|
||||
|
||||
/* Check if prompt string is present in output */
|
||||
promptLen = ltermPromptLocate(lts);
|
||||
|
||||
if (promptLen > 0) {
|
||||
/* Prompt string found */
|
||||
lto->promptChars = promptLen;
|
||||
|
||||
if (lts->commandNumber == 0) {
|
||||
/* Set command number */
|
||||
|
||||
/* New command number */
|
||||
if (lts->lastCommandNum == 0xFFFF)
|
||||
lts->lastCommandNum = 0;
|
||||
lts->lastCommandNum++;
|
||||
|
||||
lts->commandNumber = lts->lastCommandNum;
|
||||
|
||||
LTERM_LOG(ltermProcessOutput,32,
|
||||
("************ Prompt found; commandNumber=%d\n\n",
|
||||
lts->commandNumber));
|
||||
}
|
||||
|
||||
} else {
|
||||
/* No prompt string */
|
||||
if (lts->commandNumber != 0) {
|
||||
/* Unset command number and prompt columns */
|
||||
UNICHAR temLine[2] = {0, LTERM_WRITE_PLAIN_INPUT};
|
||||
|
||||
lts->commandNumber = 0;
|
||||
lto->promptChars = 0;
|
||||
|
||||
/* Notify "input thread" by writing null input record */
|
||||
WRITE(lts->writeBUFFER, temLine, 2*sizeof(UNICHAR));
|
||||
|
||||
LTERM_LOG(ltermProcessOutput,32,
|
||||
("************ No prompt found; not command line\n\n"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LTERM_LOG(ltermProcessOutput,31,("returned opcodes=0x%X\n", *opcodes));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Clears output line buffer */
|
||||
void ltermClearOutputLine(struct lterms *lts)
|
||||
{
|
||||
struct LtermOutput *lto = &(lts->ltermOutput);
|
||||
|
||||
LTERM_LOG(ltermClearOutputLine,40,("\n"));
|
||||
|
||||
lto->outputChars = 0;
|
||||
lto->outputCursorChar = 0;
|
||||
lto->outputModifiedChar = 0;
|
||||
lto->promptChars = 0;
|
||||
|
||||
lts->commandNumber = 0;
|
||||
}
|
||||
|
||||
|
||||
/** Clears output screen buffer (allocating memory, if first time) */
|
||||
int ltermClearOutputScreen(struct lterms *lts)
|
||||
{
|
||||
struct LtermOutput *lto = &(lts->ltermOutput);
|
||||
int j;
|
||||
|
||||
LTERM_LOG(ltermClearOutputScreen,40,("\n"));
|
||||
|
||||
if (lto->screenChar == NULL) {
|
||||
/* Allocate memory for full screen */
|
||||
lto->screenChar = (UNICHAR *) MALLOC(lts->screenSize * sizeof(UNICHAR));
|
||||
|
||||
if (lto->screenChar == NULL) {
|
||||
LTERM_ERROR("ltermClearOutputScreen: Error - failed to allocate memory for chars\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
assert(lto->screenStyle == NULL);
|
||||
lto->screenStyle = (UNISTYLE *) MALLOC(lts->screenSize * sizeof(UNISTYLE));
|
||||
|
||||
if (lto->screenStyle == NULL) {
|
||||
LTERM_ERROR("ltermClearOutputScreen: Error - failed to allocate memory for style\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
lto->cursorRow = lts->nRows - 1;
|
||||
lto->cursorCol = 0;
|
||||
|
||||
for (j=0; j<lts->nRows; j++) {
|
||||
lto->rowCols[j] = 0;
|
||||
lto->modifiedCol[j] = -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Saves current output mode value and switches to stream output mode,
|
||||
* with specified opcodes and terminator string.
|
||||
* @return 0 on success and -1 on error.
|
||||
*/
|
||||
int ltermSwitchToStreamMode(struct lterms *lts, int streamOpcodes,
|
||||
const UNICHAR *streamTerminator)
|
||||
{
|
||||
struct LtermOutput *lto = &(lts->ltermOutput);
|
||||
int strLength;
|
||||
|
||||
LTERM_LOG(ltermSwitchToStreamMode,40,("streamOpcodes=0x%s\n",streamOpcodes));
|
||||
|
||||
if (streamTerminator != NULL) {
|
||||
/* Save terminator string (may be null) */
|
||||
strLength = ucslen(streamTerminator);
|
||||
ucsncpy( lto->streamTerminator, streamTerminator, MAXSTREAMTERM);
|
||||
|
||||
LTERM_LOGUNICODE(ltermSwitchToStreamMode,41,(streamTerminator,
|
||||
(int) strLength));
|
||||
} else {
|
||||
/* Null terminator */
|
||||
strLength = 0;
|
||||
lto->streamTerminator[0] = U_NUL;
|
||||
}
|
||||
|
||||
if (strLength > MAXSTREAMTERM-1) {
|
||||
LTERM_ERROR("ltermSwitchToStreamMode: Error - terminator string too long\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (lts->options & LTERM_NONUL_FLAG) {
|
||||
/* No decoding of NUL characters */
|
||||
if (strLength == 0) {
|
||||
LTERM_ERROR("ltermSwitchToStreamMode: Error - null terminator string not allowed\n");
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
/* Decoding NUL characters */
|
||||
if (strLength > 0) {
|
||||
LTERM_ERROR("ltermSwitchToStreamMode: Error - terminator string must be NUL\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
lto->savedOutputMode = lto->outputMode;
|
||||
lto->outputMode = LTERM0_STREAM_MODE;
|
||||
lto->streamOpcodes = streamOpcodes;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Switches to screen output mode.
|
||||
* @return 0 on success and -1 on error.
|
||||
*/
|
||||
int ltermSwitchToScreenMode(struct lterms *lts)
|
||||
{
|
||||
struct LtermOutput *lto = &(lts->ltermOutput);
|
||||
|
||||
LTERM_LOG(ltermSwitchToScreenMode,40,("\n"));
|
||||
|
||||
if (lto->outputMode == LTERM1_SCREEN_MODE) {
|
||||
/* Switching from line mode to screen mode */
|
||||
|
||||
if (ltermClearOutputScreen(lts) != 0)
|
||||
return -1;
|
||||
|
||||
/* Clear styleMask */
|
||||
lto->styleMask = 0;
|
||||
}
|
||||
|
||||
lto->outputMode = LTERM1_SCREEN_MODE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Switches to line output mode.
|
||||
* @return 0 on success and -1 on error.
|
||||
*/
|
||||
int ltermSwitchToLineMode(struct lterms *lts)
|
||||
{
|
||||
struct LtermOutput *lto = &(lts->ltermOutput);
|
||||
int j;
|
||||
|
||||
LTERM_LOG(ltermSwitchToLineMode,40,("\n"));
|
||||
|
||||
if (lto->outputMode == LTERM1_SCREEN_MODE) {
|
||||
/* Switching from screen mode to line mode */
|
||||
ltermClearOutputLine(lts);
|
||||
|
||||
/* Copy bottom line to line output buffer */
|
||||
lto->outputChars = lto->rowCols[0];
|
||||
|
||||
assert(lto->rowCols[0] < MAXCOL);
|
||||
|
||||
for (j=0; j<lto->rowCols[0]; j++) {
|
||||
lto->outputLine[j] = lto->screenChar[j];
|
||||
lto->outputStyle[j] = lto->screenStyle[j];
|
||||
}
|
||||
|
||||
/* Clear styleMask */
|
||||
lto->styleMask = 0;
|
||||
|
||||
}
|
||||
|
||||
lto->outputMode = LTERM2_LINE_MODE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Reads data from process STDOUT and/or STDERR using file descriptors
|
||||
* from the LTERM POLL structure, and converts to Unicode, saving
|
||||
* incomplete character encodings in corresponding incomplete raw buffers.
|
||||
* Decoded characters are appended to the decodedOutput buffer,
|
||||
* with appropriate style settings.
|
||||
* If READERR is false, STDERR is never read.
|
||||
* @return the number of decoded characters appended (>=0) if successful,
|
||||
* -1 if an error occurred during processing, or
|
||||
* -2 if pseudo-TTY has been closed.
|
||||
*/
|
||||
int ltermReceiveData(struct lterms *lts, int readERR)
|
||||
{
|
||||
struct LtermOutput *lto = &(lts->ltermOutput);
|
||||
char temERRBuf[MAXCOL], temOUTBuf[MAXCOL];
|
||||
int readERRMax, readOUTMax;
|
||||
int nReadERR, nTotalERR, nReadOUT, nTotalOUT;
|
||||
int interleavedBytes, n_decoded, n_decoded_tot, j;
|
||||
|
||||
LTERM_LOG(ltermReceiveData,30,("\n"));
|
||||
|
||||
nTotalERR = 0;
|
||||
if (readERR && (lto->pollFD[POLL_STDERR].POLL_REVENTS != 0)) {
|
||||
/* Read data from STDERR */
|
||||
|
||||
/* Read maximum number of bytes that will all fit into decodedOutput
|
||||
when decoded, assuming number of decoded characters will not exceed
|
||||
the number of encoded bytes */
|
||||
|
||||
readERRMax = MAXCOLM1 - lto->decodedChars - lto->rawERRBytes;
|
||||
|
||||
/* Reduce by half to leave some space for STDOUT data */
|
||||
readERRMax = readERRMax / 2;
|
||||
|
||||
if (readERRMax <= 0) {
|
||||
/* Decoded buffer overflow */
|
||||
LTERM_WARNING("ltermReceiveData: Warning - decoded buffer overflow\n");
|
||||
|
||||
/* Non-fatal error recovery; return without reading */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Copy any incomplete raw output to beginning of buffer */
|
||||
for (j=0; j<lto->rawERRBytes; j++)
|
||||
temERRBuf[j] = lto->rawERRBuf[j];
|
||||
|
||||
/* Read STDERRdata (blocking mode) */
|
||||
nReadERR = READ(lto->pollFD[POLL_STDERR].fd,
|
||||
temERRBuf + lto->rawERRBytes, (SIZE_T) readERRMax);
|
||||
|
||||
if (nReadERR < 0) {
|
||||
#if defined(DEBUG) && !defined(USE_NSPR_IO)
|
||||
int errcode = errno;
|
||||
/* perror("ltermReceiveData"); */
|
||||
#else
|
||||
int errcode = 0;
|
||||
#endif
|
||||
LTERM_ERROR( "ltermReceiveData: Error %d in reading from process STDERR\n",
|
||||
errcode);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (nReadERR == 0) {
|
||||
/* End of file => pseudo-TTY has been closed */
|
||||
LTERM_LOG(ltermReceiveData,31,("pseudo-TTY has been closed\n"));
|
||||
|
||||
/* Suspend LTERM */
|
||||
lts->suspended = 1;
|
||||
|
||||
return -2;
|
||||
}
|
||||
|
||||
|
||||
LTERM_LOG(ltermReceiveData,32,("Read %d raw bytes from STDERR\n", nReadERR));
|
||||
nTotalERR = nReadERR + lto->rawERRBytes;
|
||||
}
|
||||
|
||||
nTotalOUT = 0;
|
||||
if (lto->pollFD[POLL_STDOUT].POLL_REVENTS != 0) {
|
||||
/* Read data from STDOUT */
|
||||
|
||||
/* Read maximum number of bytes that will all fit into decodedOutput
|
||||
when decoded, assuming number of decoded characters will not exceed
|
||||
the number of encoded bytes */
|
||||
readOUTMax = MAXCOLM1 - lto->decodedChars - lto->rawOUTBytes - nTotalERR;
|
||||
|
||||
if (readOUTMax <= 0) {
|
||||
/* Decoded buffer overflow */
|
||||
LTERM_WARNING("ltermReceiveData: Warning - decoded buffer overflow\n");
|
||||
|
||||
/* Non-fatal error recovery; return without reading */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Copy any incomplete raw output to beginning of buffer */
|
||||
for (j=0; j<lto->rawOUTBytes; j++)
|
||||
temOUTBuf[j] = lto->rawOUTBuf[j];
|
||||
|
||||
/* Read STDOUTdata (blocking mode) */
|
||||
nReadOUT = READ(lto->pollFD[POLL_STDOUT].fd,
|
||||
temOUTBuf + lto->rawOUTBytes, (SIZE_T) readOUTMax);
|
||||
|
||||
if (nReadOUT < 0) {
|
||||
#if defined(DEBUG) && !defined(USE_NSPR_IO)
|
||||
int errcode = errno;
|
||||
/* perror("ltermReceiveData"); */
|
||||
#else
|
||||
int errcode = 0;
|
||||
#endif
|
||||
LTERM_ERROR( "ltermReceiveData: Error %d in reading from process STDOUT\n",
|
||||
errcode);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (nReadOUT == 0) {
|
||||
/* End of file => pseudo-TTY has been closed */
|
||||
LTERM_LOG(ltermReceiveData,31,("pseudo-TTY has been closed\n"));
|
||||
|
||||
/* Suspend LTERM */
|
||||
lts->suspended = 1;
|
||||
|
||||
return -2;
|
||||
}
|
||||
|
||||
LTERM_LOG(ltermReceiveData,32,("Read %d raw bytes from STDOUT\n", nReadOUT));
|
||||
|
||||
nTotalOUT = nReadOUT + lto->rawOUTBytes;
|
||||
}
|
||||
|
||||
n_decoded_tot = 0;
|
||||
|
||||
if (lts->readERRfirst) {
|
||||
/* Decode STDERR data first */
|
||||
interleavedBytes = 0;
|
||||
n_decoded = ltermAppendOutput(lts, temERRBuf, nTotalERR,
|
||||
LTERM_STDERR_STYLE,
|
||||
lts->interleave, &interleavedBytes,
|
||||
MAXRAWINCOMPLETE,
|
||||
&(lto->rawERRBytes), lto->rawERRBuf);
|
||||
if (n_decoded < 0)
|
||||
return -1;
|
||||
n_decoded_tot += n_decoded;
|
||||
|
||||
/* Decode STDOUT data next */
|
||||
n_decoded = ltermAppendOutput(lts, temOUTBuf, nTotalOUT,
|
||||
LTERM_STDOUT_STYLE,
|
||||
0, NULL,
|
||||
MAXRAWINCOMPLETE,
|
||||
&(lto->rawOUTBytes), lto->rawOUTBuf);
|
||||
if (n_decoded < 0)
|
||||
return -1;
|
||||
n_decoded_tot += n_decoded;
|
||||
|
||||
if (interleavedBytes > 0) {
|
||||
/* Decode remaining STDERR data */
|
||||
n_decoded = ltermAppendOutput(lts, temERRBuf+interleavedBytes,
|
||||
nTotalERR-interleavedBytes,
|
||||
LTERM_STDERR_STYLE,
|
||||
0, NULL,
|
||||
MAXRAWINCOMPLETE,
|
||||
&(lto->rawERRBytes), lto->rawERRBuf);
|
||||
if (n_decoded < 0)
|
||||
return -1;
|
||||
n_decoded_tot += n_decoded;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* Decode STDOUT data first */
|
||||
interleavedBytes = 0;
|
||||
n_decoded = ltermAppendOutput(lts, temOUTBuf, nTotalOUT,
|
||||
LTERM_STDOUT_STYLE,
|
||||
lts->interleave, &interleavedBytes,
|
||||
MAXRAWINCOMPLETE,
|
||||
&(lto->rawOUTBytes), lto->rawOUTBuf);
|
||||
if (n_decoded < 0)
|
||||
return -1;
|
||||
n_decoded_tot += n_decoded;
|
||||
|
||||
/* Decode STDERR data next */
|
||||
n_decoded = ltermAppendOutput(lts, temERRBuf, nTotalERR,
|
||||
LTERM_STDERR_STYLE,
|
||||
0, NULL,
|
||||
MAXRAWINCOMPLETE,
|
||||
&(lto->rawERRBytes), lto->rawERRBuf);
|
||||
if (n_decoded < 0)
|
||||
return -1;
|
||||
n_decoded_tot += n_decoded;
|
||||
|
||||
if (interleavedBytes > 0) {
|
||||
/* Decode remaining STDOUT data */
|
||||
n_decoded = ltermAppendOutput(lts, temOUTBuf+interleavedBytes,
|
||||
nTotalOUT-interleavedBytes,
|
||||
LTERM_STDOUT_STYLE,
|
||||
0, NULL,
|
||||
MAXRAWINCOMPLETE,
|
||||
&(lto->rawOUTBytes), lto->rawOUTBuf);
|
||||
if (n_decoded < 0)
|
||||
return -1;
|
||||
n_decoded_tot += n_decoded;
|
||||
}
|
||||
}
|
||||
|
||||
if (n_decoded_tot > 0) {
|
||||
/* New characters have been decoded; no longer incomplete escape seq. */
|
||||
lto->incompleteEscapeSequence = 0;
|
||||
}
|
||||
|
||||
return n_decoded_tot;
|
||||
}
|
||||
|
||||
|
||||
/** Process COUNT bytes raw data from CBUF, converting complete
|
||||
* character encodings to Unicode, saving RAWINCOMPLETEBYTES in
|
||||
* RAWINCOMPLETEBUF, whose maximum size is specified by RAWINCOMPLETEMAX.
|
||||
* If INTERLEAVECHECK, check for starting NEWLINE and other interleavable
|
||||
* characters, and if found "decode" just those characters and set
|
||||
* INTERLEAVEDBYTES to the number of bytes consumed on return;
|
||||
* otherwise INTERLEAVEDBYTES is set to 0.
|
||||
* The decoded characters are appended to the decodedOutput buffer,
|
||||
* with style STYLE.
|
||||
* @return the number of characters appended (>=0) if successful,
|
||||
* -1 if an error occurred during processing, or
|
||||
* -2 if pseudo-TTY has been closed.
|
||||
*/
|
||||
static int ltermAppendOutput(struct lterms *lts, const char *cbuf, int count,
|
||||
UNISTYLE style, int interleaveCheck,
|
||||
int *interleavedBytes, int rawIncompleteMax,
|
||||
int *rawIncompleteBytes, char *rawIncompleteBuf)
|
||||
{
|
||||
struct LtermOutput *lto = &(lts->ltermOutput);
|
||||
int decodeMax, n_decoded, decodeNUL, j;
|
||||
|
||||
LTERM_LOG(ltermAppendOutput,30,("count=%d, style=0x%X, iCheck=%d, rawIncMax=%d\n",
|
||||
count, style, interleaveCheck, rawIncompleteMax));
|
||||
|
||||
if (interleaveCheck && (count > 0) && (cbuf[0] == '\n')) {
|
||||
/* Raw buffer starts with NEWLINE character; interleave */
|
||||
|
||||
assert(lto->decodedChars < MAXCOLM1);
|
||||
|
||||
/* "Decode" just the NEWLINE character */
|
||||
lto->decodedOutput[lto->decodedChars] = U_LINEFEED;
|
||||
lto->decodedStyle[lto->decodedChars] = LTERM_STDOUT_STYLE;
|
||||
|
||||
lto->decodedChars++;
|
||||
|
||||
*interleavedBytes = 1;
|
||||
|
||||
LTERM_LOG(ltermAppendOutput,32,("INTERLEAVED %d bytes\n",
|
||||
*interleavedBytes));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (interleavedBytes != NULL)
|
||||
*interleavedBytes = 0;
|
||||
|
||||
if (count == 0)
|
||||
return 0;
|
||||
|
||||
/* Decode all complete encoded character sequences */
|
||||
decodeMax = MAXCOLM1 - lto->decodedChars;
|
||||
decodeNUL = (lts->options & LTERM_NONUL_FLAG) == 0;
|
||||
n_decoded = ltermDecode(cbuf, count,
|
||||
lto->decodedOutput+lto->decodedChars,
|
||||
decodeMax, decodeNUL,
|
||||
rawIncompleteBytes);
|
||||
|
||||
if (n_decoded < 0)
|
||||
return -1;
|
||||
|
||||
/* Save any incomplete raw byte encodings */
|
||||
if (*rawIncompleteBytes > rawIncompleteMax) {
|
||||
LTERM_ERROR("ltermAppendOutput: Error - too many incomplete raw characters\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (j=0; j<*rawIncompleteBytes; j++)
|
||||
rawIncompleteBuf[j] = cbuf[j+count-*rawIncompleteBytes];
|
||||
|
||||
/* Set decoded character styles */
|
||||
for (j=lto->decodedChars; j<lto->decodedChars+n_decoded; j++)
|
||||
lto->decodedStyle[j] = style;
|
||||
|
||||
/* Increment decoded character count */
|
||||
lto->decodedChars += n_decoded;
|
||||
|
||||
LTERM_LOG(ltermAppendOutput,32,("Appended %d bytes\n", n_decoded));
|
||||
|
||||
return n_decoded;
|
||||
}
|
||||
|
||||
|
||||
/** Decodes N_TOTAL bytes in RAWBUF, returning upto DECODEMAX Unicode
|
||||
* characters in DECODEDBUF, leaving *RAWINCOMPLETEBYTES at the end of
|
||||
* RAWBUF undecoded.
|
||||
* Any NUL (zero) characters in RAWBUF are skipped, unless
|
||||
* decodeNUL is true.
|
||||
* If there is not enough space in DECODEDBUF for all characters to be
|
||||
* decoded, an error is returned.
|
||||
* @return the number of Unicoded characters decoded (>=0) or -1 on error.
|
||||
*/
|
||||
static int ltermDecode(const char *rawBuf, int n_total,
|
||||
UNICHAR* decodedBuf, int decodeMax,
|
||||
int decodeNUL,
|
||||
int *rawIncompleteBytes)
|
||||
{
|
||||
int n_decoded, result;
|
||||
|
||||
LTERM_LOG(ltermDecode,40,("\n"));
|
||||
|
||||
if (decodeMax < n_total) {
|
||||
LTERM_ERROR("ltermDecode: Error - decode buffer overflow\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
result = utf8toucs(rawBuf, n_total, decodedBuf, decodeMax,
|
||||
!decodeNUL, rawIncompleteBytes, &n_decoded);
|
||||
|
||||
if (result != 0) {
|
||||
LTERM_WARNING("ltermDecode: Warning - Invalid UTF8 data encountered\n");
|
||||
}
|
||||
|
||||
LTERM_LOG(ltermDecode,41,("result=%d, incomplete=%d, n_decoded=%d\n",
|
||||
result, rawIncompleteBytes, n_decoded));
|
||||
LTERM_LOGUNICODE(ltermDecode,42,(decodedBuf, n_decoded));
|
||||
|
||||
return n_decoded;
|
||||
}
|
||||
|
||||
|
||||
/** Search for prompt string in the output line buffer.
|
||||
* TEMPORARY implementation: assume promptRegexp is just a list of delimiters
|
||||
* @return the length of the matching prompt string, or
|
||||
* 0 if there is no match.
|
||||
*/
|
||||
static int ltermPromptLocate(struct lterms *lts)
|
||||
{
|
||||
struct LtermOutput *lto = &(lts->ltermOutput);
|
||||
int prefixCount, promptLen;
|
||||
|
||||
LTERM_LOG(ltermPromptLocate,49,("lto->outputChars=%d\n",
|
||||
lto->outputChars));
|
||||
|
||||
/* Assert that there is at least one free character in the buffer */
|
||||
assert(lto->outputChars < MAXCOL);
|
||||
|
||||
if (lto->outputChars == 0)
|
||||
return 0;
|
||||
|
||||
/* Insert null character at the end of the output buffer */
|
||||
lto->outputLine[lto->outputChars] = U_NUL;
|
||||
|
||||
/* Determine length of initial non-delimiter prefix */
|
||||
prefixCount = ucscspn(lto->outputLine, lts->promptRegexp);
|
||||
|
||||
if (prefixCount+1 >= lto->outputChars) {
|
||||
promptLen = 0;
|
||||
|
||||
} else {
|
||||
/* Skip any spaces following the delimiter */
|
||||
const UNICHAR spaceStr[2] = {U_SPACE, U_NUL};
|
||||
int spaceCount = ucsspn(lto->outputLine+prefixCount+1, spaceStr);
|
||||
|
||||
promptLen = prefixCount + 1 + spaceCount;
|
||||
|
||||
LTERM_LOGUNICODE(ltermPromptLocate,41,(lto->outputLine, promptLen));
|
||||
}
|
||||
|
||||
return promptLen;
|
||||
}
|
||||
560
mozilla/extensions/xmlterm/base/ltermPrivate.h
Normal file
560
mozilla/extensions/xmlterm/base/ltermPrivate.h
Normal file
@@ -0,0 +1,560 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* ltermPrivate.h: Line terminal (LTERM) private header file
|
||||
* LTERM provides a "stream" interface to an XTERM-like terminal,
|
||||
* using line input/output.
|
||||
* CPP options:
|
||||
* LINUX: for Linux2.0/glibc
|
||||
* SOLARIS: for Solaris2.6
|
||||
* DEBUG: to enable some debugging output
|
||||
* NO_PTY: force use of pipes rather than PTY for process
|
||||
* communication
|
||||
* MOZILLA_CLIENT: set if embedded in Mozilla
|
||||
* USE_NSPR_BASE: use basic NSPR API (excluding I/O and process creation)
|
||||
* USE_NSPR_LOCK: use NSPR lock API instead of Unix mutex API
|
||||
* USE_NSPR_IO: use NSPR I/O and process API instead of Unix API
|
||||
* (current implementation of pseudo-TTY is incompatible with
|
||||
* the NSPR I/O API; set the USE_NSPR_IO option only on platforms
|
||||
* where PTYSTREAM is not implemented)
|
||||
*/
|
||||
|
||||
#ifndef _LTERMPRIVATE_H
|
||||
|
||||
#define _LTERMPRIVATE_H 1
|
||||
|
||||
/* Standard C header files */
|
||||
#ifndef _STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
/* public declarations */
|
||||
#include "lineterm.h"
|
||||
#include "tracelog.h"
|
||||
|
||||
/* private declarations */
|
||||
|
||||
/* Force use of basic NSPR API if MOZILLA_CLIENT or USE_NSPR_IO are defined */
|
||||
#if defined(MOZILLA_CLIENT) || defined(USE_NSPR_IO)
|
||||
#define USE_NSPR_BASE 1
|
||||
#endif
|
||||
|
||||
/* pseudo-TTY stream interface */
|
||||
#ifndef _PTYSTREAM_H
|
||||
#include "ptystream.h"
|
||||
#endif
|
||||
|
||||
#define LTERM_ERROR TLOG_ERROR
|
||||
#define LTERM_WARNING TLOG_WARNING
|
||||
#define LTERM_LOG(procname,level,args) TLOG_PRINT(LTERM_TLOG_MODULE,procname,level,args)
|
||||
#define LTERM_LOGUNICODE(procname,level,args) TLOG_UNICHAR(LTERM_TLOG_MODULE,procname,level,args)
|
||||
|
||||
#ifdef USE_NSPR_BASE /* Use basic NSPR API (excluding I/O) */
|
||||
|
||||
#include "nspr.h"
|
||||
|
||||
#define assert PR_ASSERT
|
||||
|
||||
#define int32 PRInt32
|
||||
|
||||
#define getenv PR_GetEnv
|
||||
|
||||
#define MALLOC(x) PR_Malloc(x)
|
||||
#define REALLOC(x,y) PR_Realloc((x),(y))
|
||||
#define CALLOC(x,y) PR_Calloc((x),(y))
|
||||
#define FREE(x) PR_Free(x)
|
||||
|
||||
#else /* not USE_NSPR_BASE */
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#define int32 long
|
||||
|
||||
#define MALLOC(x) malloc(x)
|
||||
#define REALLOC(x,y) realloc((x),(y))
|
||||
#define CALLOC(x,y) calloc((x),(y))
|
||||
#define FREE(x) free(x)
|
||||
|
||||
#endif /* not USE_NSPR_BASE */
|
||||
|
||||
|
||||
#ifdef USE_NSPR_IO /* Use NSPR I/O API (no PTY implementation) */
|
||||
|
||||
#ifdef LINUX
|
||||
#include <sys/poll.h>
|
||||
#endif
|
||||
|
||||
typedef PRFileDesc *FILEDESC;
|
||||
#define NULL_FILEDESC 0
|
||||
#define VALID_FILEDESC(x) (x != 0)
|
||||
|
||||
typedef PRFileDesc FILESTREAM;
|
||||
|
||||
#define SIZE_T PRInt32
|
||||
#define WRITE PR_Write
|
||||
#define READ PR_Read
|
||||
#define CLOSE(x) (PR_Close(x) != PR_SUCCESS)
|
||||
#define PIPE(x) (PR_CreatePipe((x),(x)+1) != PR_SUCCESS)
|
||||
|
||||
#define POLL(x,y,z) PR_Poll((x),(y),(z))
|
||||
#define POLLFD PRPollDesc
|
||||
#define POLL_EVENTS in_flags
|
||||
#define POLL_REVENTS out_flags
|
||||
#define POLL_READ PR_POLL_READ
|
||||
|
||||
#define PROCESS PRProcess *
|
||||
#define NULL_PROCESS 0
|
||||
#define VALID_PROCESS(x) (x != 0)
|
||||
|
||||
#else /* not USE_NSPR_IO */
|
||||
|
||||
/* system header files */
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
|
||||
/* Diagnostic/debugging files */
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#if defined(SOLARIS)
|
||||
#include <poll.h>
|
||||
#elif defined(LINUX)
|
||||
#include <sys/poll.h>
|
||||
#endif
|
||||
|
||||
typedef int FILEDESC;
|
||||
#define NULL_FILEDESC -1
|
||||
#define VALID_FILEDESC(x) (x >= 0)
|
||||
|
||||
typedef FILE FILESTREAM;
|
||||
|
||||
#define SIZE_T size_t
|
||||
#define WRITE write
|
||||
#define READ read
|
||||
#define CLOSE(x) close(x)
|
||||
#define PIPE(x) pipe(x)
|
||||
|
||||
#define POLL(x,y,z) poll((x),(y),(z))
|
||||
#define POLLFD pollfd
|
||||
#define POLL_EVENTS events
|
||||
#define POLL_REVENTS revents
|
||||
#define POLL_READ POLLIN
|
||||
|
||||
#define PROCESS long
|
||||
#define NULL_PROCESS 0
|
||||
#define VALID_PROCESS(x) (x > 0)
|
||||
|
||||
#endif /* not USE_NSPR_IO */
|
||||
|
||||
|
||||
#ifdef USE_NSPR_LOCK /* Use NSPR lock API */
|
||||
|
||||
#define MUTEX_DECLARE(x) PRLock *x
|
||||
#define MUTEX_INITIALIZE(x) ((x=PR_NewLock()) == NULL)
|
||||
#define MUTEX_LOCK(x) PR_Lock(x)
|
||||
#define MUTEX_UNLOCK(x) PR_Unlock(x)
|
||||
#define MUTEX_DESTROY(x) PR_DestroyLock(x)
|
||||
|
||||
#define THREAD_DECLARE(x) PRThread *x
|
||||
#define THREAD_CREATE ((x=PR_CreateThread(PR_USER_THREAD, (y), (z), \
|
||||
PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, \
|
||||
PR_JOINABLE_THREAD, 0)) == NULL)
|
||||
#define THREAD_SELF PR_GetCurrentThread
|
||||
#define THREAD_EQUAL(x,y) ((x) == (y))
|
||||
#define THREAD_JOIN(x) (PR_JoinThread(x) != PR_SUCCESS)
|
||||
|
||||
#else /* not USE_NSPR_LOCK */
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#define MUTEX_DECLARE(x) pthread_mutex_t x
|
||||
#define MUTEX_INITIALIZE(x) pthread_mutex_init(&(x), NULL)
|
||||
#define MUTEX_LOCK(x) pthread_mutex_lock(&(x))
|
||||
#define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x))
|
||||
#define MUTEX_DESTROY(x) pthread_mutex_destroy(&(x))
|
||||
|
||||
#define THREAD_DECLARE(x) pthread_t x
|
||||
#define THREAD_CREATE(x,y,z) pthread_create(&(x),NULL,(y),(z))
|
||||
#define THREAD_SELF pthread_self
|
||||
#define THREAD_EQUAL(x,y) pthread_equal(x,y)
|
||||
#define THREAD_JOIN(x) pthread_join((x),NULL)
|
||||
|
||||
#endif /* not USE_NSPR_LOCK */
|
||||
|
||||
|
||||
#define MAXTERM 256 /* Maximum number of LTERMs;
|
||||
* affects static memory "footprint"
|
||||
*/
|
||||
|
||||
#define MAXCOL 4096 /* Maximum columns in line buffer;
|
||||
* affects static memory "footprint";
|
||||
* the only limitation on this value is that
|
||||
* it must fit into a UNICHAR, because of the
|
||||
* way lterm_write and ltermWrite implement
|
||||
* the input buffer pipe.
|
||||
*/
|
||||
|
||||
#define MAXROW 1024 /* Maximum rows in screen;
|
||||
* primarily affects dynamically allocated
|
||||
* memory
|
||||
*/
|
||||
|
||||
/* The only obvious limitation on the following is that they should be
|
||||
* significantly less than MAXCOL
|
||||
*/
|
||||
#define MAXPROMPT 256 /* Maximum length of prompt regexp+1 */
|
||||
#define MAXRAWINCOMPLETE 5 /* Maximum incomplete raw buffer size */
|
||||
#define MAXSTREAMTERM 11 /* Maximum stream terminator buffer size */
|
||||
#define MAXCOOKIESTR 64 /* Maximum length of cookie string+1 */
|
||||
#define MAXESCAPEPARAMS 16 /* Maximum no. of numeric ESCAPE parameters */
|
||||
#define MAXSTRINGPARAM 512 /* Maximum length of string ESCAPE parameters */
|
||||
|
||||
#define MAXPTYIN 128 /* 1/2 POSIX minimum MAX_INPUT for PTY */
|
||||
|
||||
#define MAXCOLM1 (MAXCOL-1) /* Maximum columns in line buffer - 1 */
|
||||
|
||||
#define MAXTTYCONTROL 8 /* Maximum TTY control character list */
|
||||
#define TTYINTERRUPT 0
|
||||
#define TTYERASE 1
|
||||
#define TTYKILL 2
|
||||
#define TTYEOF 3
|
||||
#define TTYSUSPEND 4
|
||||
#define TTYREPRINT 5
|
||||
#define TTYDISCARD 6
|
||||
#define TTYWERASE 7
|
||||
|
||||
/* input modes */
|
||||
#define LTERM0_RAW_MODE 0
|
||||
#define LTERM1_CANONICAL_MODE 1
|
||||
#define LTERM2_EDIT_MODE 2
|
||||
#define LTERM3_COMPLETION_MODE 3
|
||||
|
||||
/* completion request codes */
|
||||
#define LTERM_NO_COMPLETION 0
|
||||
#define LTERM_TAB_COMPLETION 1
|
||||
#define LTERM_HISTORY_COMPLETION 2
|
||||
|
||||
/* output modes */
|
||||
#define LTERM0_STREAM_MODE 0
|
||||
#define LTERM1_SCREEN_MODE 1
|
||||
#define LTERM2_LINE_MODE 2
|
||||
|
||||
/* character operation codes */
|
||||
#define LTERM_INSERT_CHAR 0
|
||||
#define LTERM_DELETE_CHAR 1
|
||||
#define LTERM_ERASE_CHAR 2
|
||||
|
||||
/* List of characters escaped in XML */
|
||||
#define LTERM_AMP_ESCAPE 0
|
||||
#define LTERM_LT_ESCAPE 1
|
||||
#define LTERM_GT_ESCAPE 2
|
||||
#define LTERM_QUOT_ESCAPE 3
|
||||
#define LTERM_APOS_ESCAPE 4
|
||||
|
||||
#define LTERM_XML_ESCAPES 5
|
||||
#define LTERM_PLAIN_ESCAPES 3
|
||||
|
||||
/* input buffer pipe header "character" count */
|
||||
#define PIPEHEADER 2
|
||||
|
||||
/* input buffer pipe header components */
|
||||
#define PHDR_CHARS 0
|
||||
#define PHDR_TYPE 1
|
||||
|
||||
/* LTERM read in/out parameter structure */
|
||||
struct LtermRead {
|
||||
UNICHAR *buf; /* Pointer to Unicode character buffer (IN param) */
|
||||
UNISTYLE *style; /* Pointer to character style buffer (IN param) */
|
||||
int max_count; /* max. number of characters in buffers (IN param) */
|
||||
int read_count; /* actual number of characters in buffers */
|
||||
int opcodes; /* Returned opcodes */
|
||||
int buf_row; /* row at which to display buffer data */
|
||||
int buf_col; /* starting column at which to display buffer data */
|
||||
int cursor_row; /* final cursor row position */
|
||||
int cursor_col; /* final cursor column position */
|
||||
};
|
||||
|
||||
/* LTERM input structure: managed by lterm_write */
|
||||
struct LtermInput {
|
||||
|
||||
UNICHAR inputBuf[PIPEHEADER+MAXCOL]; /* holds data read from input buffer
|
||||
* pipe
|
||||
*/
|
||||
int inputBufBytes; /* Count of bytes already read in */
|
||||
|
||||
int inputMode; /* input mode:
|
||||
* 0 = raw mode
|
||||
* 1 = canonical mode
|
||||
* 2 = edit + canonical mode
|
||||
* 3 = completion + edit + canonical mode
|
||||
*/
|
||||
|
||||
int escapeFlag; /* processing ESCAPE in line mode */
|
||||
int escapeCSIFlag; /* processing ESCAPE Code Sequence Introducer */
|
||||
int escapeCSIArg; /* ESCAPE Code Sequence Argument value */
|
||||
|
||||
int inputOpcodes; /* input opcodes */
|
||||
|
||||
int clearInputLine; /* true if input line buffer needs to be
|
||||
* cleared (after echoing) */
|
||||
|
||||
UNICHAR inputLine[MAXCOL]; /* input line buffer:
|
||||
only MAXCOL-1 characters should actually
|
||||
be inserted in the buffer, to allow
|
||||
one character padding if necessary */
|
||||
|
||||
int inputChars; /* length of input line (characters);
|
||||
* should never exceed MAXCOL-1,
|
||||
* to allow for null termination
|
||||
*/
|
||||
int inputCols; /* number of displayed columns in input line;
|
||||
* a column corresponds to a single
|
||||
* plain text character transmitted to the
|
||||
* subordinate process, although it may occupy
|
||||
* multiple character positions, e.g.,
|
||||
* e.g., < represents "<"
|
||||
*/
|
||||
int inputGlyphs; /* number of displayed glyphs in input line;
|
||||
* a glyph corresponds to a logical column
|
||||
* on the layout, i.e., a single Unicode
|
||||
* character or an XML element, such as an
|
||||
* iconic representiion of an URI.
|
||||
*/
|
||||
|
||||
unsigned short inputColCharIndex[MAXCOL]; /* starting character index of
|
||||
* each column, including the
|
||||
* cursor column at end of line.
|
||||
* (inputCols+1 values should be
|
||||
* defined)
|
||||
*/
|
||||
|
||||
unsigned short inputGlyphCharIndex[MAXCOL]; /* starting character index
|
||||
* of each glyph, including
|
||||
* empty glyph at the end of
|
||||
* the line.
|
||||
* (inputGlyphs+1 values
|
||||
* should be defined)
|
||||
*/
|
||||
unsigned short inputGlyphColIndex[MAXCOL]; /* starting column index of
|
||||
* each glyph
|
||||
* (inputGlyphs+1 values)
|
||||
*/
|
||||
|
||||
int inputCursorGlyph; /* current input cursor glyph number (>=0) */
|
||||
};
|
||||
|
||||
/* LtermOutput poll structure index count and values */
|
||||
#define POLL_COUNT 3
|
||||
#define POLL_INPUTBUF 0
|
||||
#define POLL_STDOUT 1
|
||||
#define POLL_STDERR 2
|
||||
|
||||
/* LTERM output structure: managed by lterm_read */
|
||||
struct LtermOutput {
|
||||
struct POLLFD pollFD[POLL_COUNT]; /* output polling structure */
|
||||
long callbackTag[POLL_COUNT]; /* GTK callback tag for each FD (0 if none) */
|
||||
int nfds; /* count of "files" to be polled */
|
||||
int outputMode; /* output mode:
|
||||
* 0 = full screen mode
|
||||
* 1 = line mode
|
||||
* 2 = command line mode
|
||||
*/
|
||||
|
||||
UNICHAR streamTerminator[MAXSTREAMTERM]; /* stream terminator buffer */
|
||||
int streamOpcodes; /* Stream opcodes */
|
||||
int savedOutputMode; /* saved output mode (prior to stream mode) */
|
||||
|
||||
int insertMode; /* character insert mode */
|
||||
int automaticNewline; /* automatic newline mode */
|
||||
|
||||
UNISTYLE styleMask; /* current output style mask */
|
||||
|
||||
char rawOUTBuf[MAXRAWINCOMPLETE]; /* incomplete raw STDOUT buffer */
|
||||
int rawOUTBytes; /* incomplete raw STDOUT byte count */
|
||||
|
||||
char rawERRBuf[MAXRAWINCOMPLETE]; /* incomplete raw STDERR buffer */
|
||||
int rawERRBytes; /* incomplete raw STDERR byte count */
|
||||
|
||||
UNICHAR decodedOutput[MAXCOL]; /* decoded output buffer:
|
||||
only MAXCOL-1 characters should actually
|
||||
be inserted in the buffer, to allow
|
||||
one character padding if necessary */
|
||||
UNISTYLE decodedStyle[MAXCOL]; /* decoded output style buffer */
|
||||
int decodedChars; /* decoded character count;
|
||||
should never exceed MAXCOL-1 */
|
||||
int incompleteEscapeSequence; /* Incomplete ESCAPE sequence flag */
|
||||
|
||||
UNICHAR outputLine[MAXCOL]; /* output line buffer (processed);
|
||||
only MAXCOL-1 characters should actually
|
||||
be inserted in the buffer, to allow
|
||||
one character padding if necessary */
|
||||
UNISTYLE outputStyle[MAXCOL]; /* output style buffer for each character */
|
||||
|
||||
int outputChars; /* length of output line (characters)
|
||||
should never exceed MAXCOL-1 */
|
||||
int outputCursorChar; /* output cursor character position (>=0) */
|
||||
int promptChars; /* prompt character count */
|
||||
int outputModifiedChar; /* leftmost modified character in output line */
|
||||
|
||||
int cursorRow, cursorCol; /* screen cursor row and column */
|
||||
|
||||
int rowCols[MAXROW]; /* count of columns in each row (>=0) */
|
||||
|
||||
int modifiedCol[MAXROW]; /* first modified column in each row;
|
||||
-1 if no column has been modified */
|
||||
|
||||
UNICHAR *screenChar; /* Screen character array (screenSize long) */
|
||||
UNISTYLE *screenStyle; /* Screen style array (screenSize long) */
|
||||
};
|
||||
|
||||
/* LTERM process structure: managed by lterm_create, lterm_close */
|
||||
struct LtermProcess {
|
||||
PROCESS processID; /* process ID */
|
||||
FILEDESC processIN; /* process input pipe */
|
||||
FILEDESC processOUT; /* process output pipe */
|
||||
FILEDESC processERR; /* process error pipe */
|
||||
};
|
||||
|
||||
/* line terminal (LTERM) structure: managed by lterm_open, lterm_close */
|
||||
struct lterms {
|
||||
int opened; /* LTERM opened status flag */
|
||||
int suspended; /* LTERM suspended flag:
|
||||
* an LTERM is suspended when an error
|
||||
* occurs, to prevent further I/O operations
|
||||
* which have unpredictable results.
|
||||
* The LTERM still needs to be closed to
|
||||
* release any resources used by it.
|
||||
* (a suspended LTERM is still open)
|
||||
*/
|
||||
|
||||
MUTEX_DECLARE(adminMutex); /* LTERM administrative mutex */
|
||||
MUTEX_DECLARE(outputMutex); /* LTERM output thread mutex */
|
||||
|
||||
int adminMutexLocked; /* administrative mutex lock status */
|
||||
int outputMutexLocked; /* output mutex lock status */
|
||||
|
||||
FILEDESC writeBUFFER, readBUFFER; /* input character BUFFER pipe */
|
||||
|
||||
int options; /* TTY options */
|
||||
int ptyMode; /* pseudo-TTY mode flag */
|
||||
int noTTYEcho; /* no TTY echo flag */
|
||||
int disabledInputEcho; /* disabled input echo flag */
|
||||
|
||||
int processType; /* Process type code */
|
||||
int maxInputMode; /* maximum allowed input mode value */
|
||||
int readERRfirst; /* Read STDERR before STDOUT */
|
||||
int interleave; /* interleave STDERR/STDOUT flag */
|
||||
UNICHAR control[MAXTTYCONTROL]; /* TTY control characters */
|
||||
|
||||
int commandNumber; /* output command number
|
||||
* (0 if not command line)
|
||||
*/
|
||||
unsigned short lastCommandNum; /* last command number */
|
||||
int completionRequest; /* command completion request code:
|
||||
* LTERM_NO_COMPLETION, or
|
||||
* LTERM_TAB_COMPLETION, or
|
||||
* LTERM_HISTORY_COMPLETION
|
||||
*/
|
||||
int completionChars; /* command completion insert count */
|
||||
|
||||
int inputBufRecord; /* True if input buffer contains record */
|
||||
|
||||
int inputLineBreak; /* True if input line was transmitted
|
||||
* and plain text copy saved in echo buffer
|
||||
*/
|
||||
UNICHAR echoLine[MAXCOL]; /* Plain text of echo line */
|
||||
int echoChars; /* Count of echo characters */
|
||||
|
||||
int nRows; /* Number of rows */
|
||||
int nCols; /* Number of columns */
|
||||
long screenSize; /* Screen size, in characters
|
||||
= nRows*nCols */
|
||||
|
||||
UNICHAR promptRegexp[MAXPROMPT]; /* prompt regular expression
|
||||
JUST A LIST OF DELIMITERS AT PRESENT */
|
||||
|
||||
char cookie[MAXCOOKIESTR]; /* cookie string */
|
||||
|
||||
struct ptys pty; /* pseudo-tty (PTY) stream info for LTERM */
|
||||
struct LtermProcess ltermProcess; /* LTERM process structure */
|
||||
struct LtermInput ltermInput; /* LTERM input structure */
|
||||
struct LtermOutput ltermOutput; /* LTERM output structure */
|
||||
};
|
||||
|
||||
/* LTERM global variables */
|
||||
typedef struct {
|
||||
int initialized; /* Initialization flag */
|
||||
struct lterms *termList[MAXTERM]; /* List of LTERMS */
|
||||
MUTEX_DECLARE(listMutex); /* Thread lock to access to LTERM list */
|
||||
UNICHAR metaDelimiter; /* Meta command delimiter (usually :) */
|
||||
char escapeChars[LTERM_XML_ESCAPES+1]; /* String of chars escaped in XML */
|
||||
UNICHAR* escapeSeq[LTERM_XML_ESCAPES]; /* XML character escape sequences */
|
||||
int escapeLen[LTERM_XML_ESCAPES]; /* XML char. escape sequence lengths */
|
||||
} LtermGlobal;
|
||||
|
||||
extern LtermGlobal ltermGlobal;
|
||||
|
||||
|
||||
/* Visible prototypes */
|
||||
|
||||
/* ltermIO.c */
|
||||
int ltermSendLine(struct lterms *lts, UNICHAR uch,
|
||||
int echoControl, int completionCode);
|
||||
int ltermRead(struct lterms *lts, struct LtermRead *ltr, int timeout);
|
||||
|
||||
/* ltermInput.c */
|
||||
int ltermPlainTextInput(struct lterms *lts,
|
||||
const UNICHAR *buf, int count, int *opcodes);
|
||||
int ltermCancelCompletion(struct lterms *lts);
|
||||
int ltermInsertChar(struct LtermInput *lti, UNICHAR uch);
|
||||
void ltermSwitchToRawMode(struct lterms *lts);
|
||||
void ltermClearInputLine(struct lterms *lts);
|
||||
int ltermDeleteGlyphs(struct LtermInput *lti, int count);
|
||||
int ltermSendData(struct lterms *lts, const UNICHAR *buf, int count);
|
||||
|
||||
/* ltermOutput.c */
|
||||
int ltermProcessOutput(struct lterms *lts, int *opcodes);
|
||||
int ltermReceiveData(struct lterms *lts, int readERR);
|
||||
void ltermClearOutputLine(struct lterms *lts);
|
||||
int ltermClearOutputScreen(struct lterms *lts);
|
||||
int ltermSwitchToStreamMode(struct lterms *lts, int streamOpcodes,
|
||||
const UNICHAR *streamTerminator);
|
||||
int ltermSwitchToScreenMode(struct lterms *lts);
|
||||
int ltermSwitchToLineMode(struct lterms *lts);
|
||||
|
||||
/* ltermEscape.c */
|
||||
int ltermProcessEscape(struct lterms *lts, const UNICHAR *buf,
|
||||
int count, const UNISTYLE *style, int *consumed, int *opcodes);
|
||||
int ltermInsDelEraseChar(struct lterms *lts, int count, int action);
|
||||
|
||||
#endif /* _LTERMPRIVATE_H */
|
||||
88
mozilla/extensions/xmlterm/base/mozILineTerm.idl
Normal file
88
mozilla/extensions/xmlterm/base/mozILineTerm.idl
Normal file
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
/* mozILineTerm.idl: Javascript-accessible interface to LineTerm
|
||||
*/
|
||||
|
||||
#include "nsISupports.idl"
|
||||
#include "domstubs.idl"
|
||||
|
||||
%{C++
|
||||
class nsIDOMDocument;
|
||||
%}
|
||||
|
||||
[scriptable, uuid(0eb82b00-43a2-11d3-8e76-006008948af5)]
|
||||
|
||||
interface mozILineTerm : nsISupports
|
||||
{
|
||||
attribute long cursorRow;
|
||||
attribute long cursorColumn;
|
||||
attribute boolean echoFlag;
|
||||
|
||||
/** Opens LineTerm, a line-oriented terminal interface (without graphics)
|
||||
* @param command name of command to be executed; usually a shell,
|
||||
* e.g., "/bin/sh"; if set to null string, the command name is
|
||||
* determined from the environment variable SHELL
|
||||
* @param promptRegexp command prompt regular expression (for future use);
|
||||
* at the moment, any string terminated by one of the characters
|
||||
* "#$%>?", followed by a space, is assumed to be a prompt
|
||||
* @param options LineTerm option bits (usually 0; see lineterm.h)
|
||||
* @param processType command shell type; if set to -1, type is determined
|
||||
* from the command name
|
||||
* @param domDoc DOM document object associated with the LineTerm
|
||||
* (document.cookie will be defined for this document on return)
|
||||
*/
|
||||
void Open(in wstring command, in wstring promptRegexp,
|
||||
in PRInt32 options, in PRInt32 processType,
|
||||
in nsIDOMDocument domDoc);
|
||||
|
||||
/** Closes LineTerm
|
||||
* @param aCookie document.cookie string for authentication
|
||||
*/
|
||||
void Close(in wstring aCookie);
|
||||
|
||||
/** Writes string to LineTerm as if the user had typed it (command input)
|
||||
* @param buf string to be transmitted to LineTerm
|
||||
* @param aCookie document.cookie string for authentication
|
||||
*/
|
||||
void Write(in wstring buf, in wstring aCookie);
|
||||
|
||||
/** Read output data string and parameters from LineTerm (command output)
|
||||
* @param opcodes (output) output data descriptor bits (see lineterm.h)
|
||||
* @param buf_row (output) row number (>=-1)
|
||||
(-1 denotes line mode and 0 represents bottom row)
|
||||
* @param buf_col (output) column number (>=0)
|
||||
* @param aCookie document.cookie string for authentication
|
||||
* @return output data string from LineTerm
|
||||
*/
|
||||
wstring Read(out PRInt32 opcodes, out PRInt32 buf_row,
|
||||
out PRInt32 buf_col, in wstring aCookie);
|
||||
};
|
||||
|
||||
|
||||
%{ C++
|
||||
#define MOZLINETERM_CID \
|
||||
{ /* 0eb82b01-43a2-11d3-8e76-006008948af5 */ \
|
||||
0x0eb82b01, 0x43a2, 0x11d3, \
|
||||
{0x8e, 0x76, 0x00, 0x60, 0x08, 0x94, 0x8a, 0xf5} }
|
||||
|
||||
extern nsresult
|
||||
NS_NewLineTerm(mozILineTerm** aLineTerm);
|
||||
%}
|
||||
122
mozilla/extensions/xmlterm/base/mozILineTermAux.h
Normal file
122
mozilla/extensions/xmlterm/base/mozILineTermAux.h
Normal file
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozILineTermAux.h: auxiliary interface for LineTerm (not XPCONNECTed)
|
||||
// This adds some XPCOM-only methods to the XPCOM/XPCONNECT interface
|
||||
// mozILineTerm (unregistered)
|
||||
|
||||
#ifndef mozILineTermAux_h___
|
||||
#define mozILineTermAux_h___
|
||||
|
||||
#include "nsISupports.h"
|
||||
|
||||
#include "nscore.h"
|
||||
|
||||
#include "nsIObserver.h"
|
||||
#include "mozILineTerm.h"
|
||||
|
||||
/* {0eb82b10-43a2-11d3-8e76-006008948af5} */
|
||||
#define MOZILINETERMAUX_IID_STR "0eb82b10-43a2-11d3-8e76-006008948af5"
|
||||
#define MOZILINETERMAUX_IID \
|
||||
{0x0eb82b10, 0x43a2, 0x11d3, \
|
||||
{ 0x8e, 0x76, 0x00, 0x60, 0x08, 0x94, 0x8a, 0xf5 }}
|
||||
|
||||
class mozILineTermAux : public mozILineTerm {
|
||||
public:
|
||||
NS_DEFINE_STATIC_IID_ACCESSOR(MOZILINETERMAUX_IID)
|
||||
|
||||
// mozILineTerm interface
|
||||
NS_IMETHOD GetCursorRow(PRInt32 *aCursorRow) = 0;
|
||||
NS_IMETHOD SetCursorRow(PRInt32 aCursorRow) = 0;
|
||||
|
||||
NS_IMETHOD GetCursorColumn(PRInt32 *aCursorColumn) = 0;
|
||||
NS_IMETHOD SetCursorColumn(PRInt32 aCursorColumn) = 0;
|
||||
|
||||
NS_IMETHOD Open(const PRUnichar *command,
|
||||
const PRUnichar *promptRegexp,
|
||||
PRInt32 options, PRInt32 processType,
|
||||
nsIDOMDocument *domDoc) = 0;
|
||||
|
||||
NS_IMETHOD Close(const PRUnichar* aCookie) = 0;
|
||||
|
||||
NS_IMETHOD Write(const PRUnichar *buf, const PRUnichar* aCookie) = 0;
|
||||
|
||||
NS_IMETHOD Read(PRInt32 *opcodes,
|
||||
PRInt32 *buf_row, PRInt32 *buf_col,
|
||||
const PRUnichar* aCookie,
|
||||
PRUnichar **_retval) = 0;
|
||||
|
||||
// mozILineTermAux interface add ons
|
||||
// (not scriptable, no authentication cookie required)
|
||||
|
||||
/** Opens LineTerm, a line-oriented terminal interface (without graphics)
|
||||
* @param command name of command to be executed; usually a shell,
|
||||
* e.g., "/bin/sh"; if set to null string, the command name is
|
||||
* determined from the environment variable SHELL
|
||||
* @param promptRegexp command prompt regular expression (for future use);
|
||||
* at the moment, any string terminated by one of the characters
|
||||
* "#$%>?", followed by a space, is assumed to be a prompt
|
||||
* @param options LineTerm option bits (usually 0; see lineterm.h)
|
||||
* @param processType command shell type; if set to -1, type is determined
|
||||
* from the command name
|
||||
* @param domDoc DOM document object associated with the LineTerm
|
||||
* (document.cookie will be defined for this document on return)
|
||||
* @param aCookie (output) cookie associated with LineTerm
|
||||
*/
|
||||
NS_IMETHOD OpenAux(const PRUnichar *command,
|
||||
const PRUnichar *promptRegexp,
|
||||
PRInt32 options, PRInt32 processType,
|
||||
nsIDOMDocument *domDoc,
|
||||
nsIObserver* anObserver,
|
||||
nsString& aCookie) = 0;
|
||||
|
||||
/** Suspend/restores LineTerm operation
|
||||
* @param aSuspend suspension state flag
|
||||
*/
|
||||
NS_IMETHOD SuspendAux(PRBool aSuspend) = 0;
|
||||
|
||||
/** Closes LineTerm
|
||||
*/
|
||||
NS_IMETHOD CloseAux(void) = 0;
|
||||
|
||||
/** Close all LineTerms, not just this one
|
||||
*/
|
||||
NS_IMETHOD CloseAllAux(void) = 0;
|
||||
|
||||
/** Read output data and style strings and parameters from LineTerm
|
||||
* @param opcodes (output) output data descriptor bits (see lineterm.h)
|
||||
* @param buf_row (output) row number (>=-1)
|
||||
(-1 denotes line mode and 0 represents bottom row)
|
||||
* @param buf_col (output) column number (>=0)
|
||||
* @param _retval (output) success code
|
||||
* @param retstyle (output) output style string
|
||||
* @return output data string from LineTerm
|
||||
*/
|
||||
NS_IMETHOD ReadAux(PRInt32 *opcodes,
|
||||
PRInt32 *buf_row, PRInt32 *buf_col,
|
||||
PRUnichar **_retval, PRUnichar **retstyle) = 0;
|
||||
};
|
||||
|
||||
// Factory for mozILineTermAux
|
||||
|
||||
extern nsresult
|
||||
NS_NewLineTermAux(mozILineTermAux** aLineTermAux);
|
||||
|
||||
#endif /* mozILineTermAux_h___ */
|
||||
86
mozilla/extensions/xmlterm/base/mozIXMLTermShell.idl
Normal file
86
mozilla/extensions/xmlterm/base/mozIXMLTermShell.idl
Normal file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
/* mozIXMLTermShell.idl: Javascript-accessible wrapper for mozIXMLTerminal
|
||||
*/
|
||||
|
||||
#include "nsISupports.idl"
|
||||
#include "domstubs.idl"
|
||||
#include "mozILineTerm.idl"
|
||||
|
||||
%{C++
|
||||
class nsILineTerm;
|
||||
class nsIDOMWindow;
|
||||
%}
|
||||
|
||||
[scriptable, uuid(0eb82b30-43a2-11d3-8e76-006008948af5)]
|
||||
|
||||
interface mozIXMLTermShell : nsISupports
|
||||
{
|
||||
readonly attribute long currentEntryNumber; /* current entry (command) no. */
|
||||
attribute long history; /* command history buffer count */
|
||||
attribute wstring prompt; /* HTML prompt string */
|
||||
|
||||
/** Initializes XMLterm in specified window
|
||||
* @param contentWin content window object
|
||||
* @param URL URL of document to be loaded in the window
|
||||
* (set to null string if document is already loaded in window)
|
||||
* @param args argument string to be passed to XMLterm
|
||||
* (at the moment this just contains any initial input data)
|
||||
*/
|
||||
void Init(in nsIDOMWindow contentWin, in wstring URL, in wstring args);
|
||||
|
||||
/** Finalizes (closes) XMLterm
|
||||
*/
|
||||
void Finalize();
|
||||
|
||||
/** Polls for readable data from XMLterm
|
||||
*/
|
||||
void Poll();
|
||||
|
||||
/** Writes string to terminal as if the user had typed it (command input)
|
||||
* @param buf string to be transmitted to terminal
|
||||
* @param aCookie document.cookie string for authentication
|
||||
*/
|
||||
void SendText(in wstring buf, in wstring cookie);
|
||||
|
||||
/** Opens new XMLterm window with specified args (not yet implemented)
|
||||
* @param args argument string to be passed to XMLterm
|
||||
* (at the moment this just contains any initial input data)
|
||||
*/
|
||||
void NewXMLTermWindow(in wstring args);
|
||||
|
||||
/** Exit browser, closing all windows (not yet implemented)
|
||||
*/
|
||||
void Exit();
|
||||
};
|
||||
|
||||
|
||||
%{C++
|
||||
|
||||
#define MOZXMLTERMSHELL_CID \
|
||||
{ /* 0eb82b31-43a2-11d3-8e76-006008948af5 */ \
|
||||
0x0eb82b31, 0x43a2, 0x11d3, \
|
||||
{0x8e, 0x76, 0x00, 0x60, 0x08, 0x94, 0x8a, 0xf5} }
|
||||
|
||||
extern nsresult
|
||||
NS_NewXMLTermShell(mozIXMLTermShell** aXMLTermShell);
|
||||
%}
|
||||
|
||||
78
mozilla/extensions/xmlterm/base/mozIXMLTermStream.h
Normal file
78
mozilla/extensions/xmlterm/base/mozIXMLTermStream.h
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozIXMLTermStream.h: interface to display HTML/XML streams as documents
|
||||
// (unregistered)
|
||||
|
||||
#ifndef mozIXMLTermStream_h___
|
||||
#define mozIXMLTermStream_h___
|
||||
|
||||
#include "nscore.h"
|
||||
|
||||
#include "nsISupports.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIWebShell.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsIScriptContext.h"
|
||||
#include "nsIInputStream.h"
|
||||
|
||||
/* {0eb82b40-43a2-11d3-8e76-006008948af5} */
|
||||
#define MOZIXMLTERMSTREAM_IID_STR "0eb82b40-43a2-11d3-8e76-006008948af5"
|
||||
#define MOZIXMLTERMSTREAM_IID \
|
||||
{0x0eb82b40, 0x43a2, 0x11d3, \
|
||||
{ 0x8e, 0x76, 0x00, 0x60, 0x08, 0x94, 0x8a, 0xf5 }}
|
||||
|
||||
class mozIXMLTermStream : public nsIInputStream
|
||||
{
|
||||
public:
|
||||
NS_DEFINE_STATIC_IID_ACCESSOR(MOZIXMLTERMSTREAM_IID);
|
||||
|
||||
// mozIXMLTermStream interface
|
||||
|
||||
/** Open stream in specified frame, or in current frame if frameName is null
|
||||
* @param aDOMWindow parent window
|
||||
* @param frameName name of child frame in which to display stream, or null
|
||||
* to display in parent window
|
||||
* @param contentURL URL of stream content
|
||||
* @param contentType MIME type of stream content
|
||||
* @param maxResizeHeight maximum resize height (0=> do not resize)
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_IMETHOD Open(nsIDOMWindow* aDOMWindow,
|
||||
const char* frameName,
|
||||
const char* contentURL,
|
||||
const char* contentType,
|
||||
PRInt32 maxResizeHeight) = 0;
|
||||
|
||||
/** Write Unicode string to stream (blocks until write is completed)
|
||||
* @param buf string to write
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_IMETHOD Write(const PRUnichar* buf) = 0;
|
||||
};
|
||||
|
||||
#define MOZXMLTERMSTREAM_CID \
|
||||
{ /* 0eb82b41-43a2-11d3-8e76-006008948af5 */ \
|
||||
0x0eb82b41, 0x43a2, 0x11d3, \
|
||||
{0x8e, 0x76, 0x00, 0x60, 0x08, 0x94, 0x8a, 0xf5} }
|
||||
extern nsresult
|
||||
NS_NewXMLTermStream(mozIXMLTermStream** aXMLTermStream);
|
||||
|
||||
#endif /* mozIXMLTermStream_h___ */
|
||||
127
mozilla/extensions/xmlterm/base/mozIXMLTerminal.h
Normal file
127
mozilla/extensions/xmlterm/base/mozIXMLTerminal.h
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozIXMLTerminal.h: primary interface for XMLterm operations
|
||||
// (unregistered)
|
||||
|
||||
#ifndef mozIXMLTerminal_h___
|
||||
#define mozIXMLTerminal_h___
|
||||
|
||||
#include "nscore.h"
|
||||
|
||||
#include "nsISupports.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIWebShell.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsIScriptContext.h"
|
||||
|
||||
#include "mozIXMLTermShell.h"
|
||||
|
||||
/* {0eb82b20-43a2-11d3-8e76-006008948af5} */
|
||||
#define MOZIXMLTERMINAL_IID_STR "0eb82b20-43a2-11d3-8e76-006008948af5"
|
||||
#define MOZIXMLTERMINAL_IID \
|
||||
{0x0eb82b20, 0x43a2, 0x11d3, \
|
||||
{ 0x8e, 0x76, 0x00, 0x60, 0x08, 0x94, 0x8a, 0xf5 }}
|
||||
|
||||
class mozIXMLTerminal : public nsISupports {
|
||||
|
||||
public:
|
||||
NS_DEFINE_STATIC_IID_ACCESSOR(MOZIXMLTERMINAL_IID)
|
||||
|
||||
/** Initializes XMLterm in specified web shell
|
||||
* @param aWebShell web shell in which to embed XMLterm
|
||||
* @param aXMLTermShell scriptable wrapper shell for XMLterm
|
||||
* @param URL URL of document to be loaded in the window
|
||||
* (set to null string if document is already loaded in window)
|
||||
* @param args argument string to be passed to XMLterm
|
||||
* (at the moment this just contains any initial input data)
|
||||
*/
|
||||
NS_IMETHOD Init(nsIWebShell* aWebShell,
|
||||
mozIXMLTermShell* aXMLTermShell,
|
||||
const PRUnichar* aURL,
|
||||
const PRUnichar* args) = 0;
|
||||
|
||||
/** Finalizes (closes) XMLterm
|
||||
*/
|
||||
NS_IMETHOD Finalize(void) = 0;
|
||||
|
||||
/** Polls for readable data from XMLterm
|
||||
*/
|
||||
NS_IMETHOD Poll(void) = 0;
|
||||
|
||||
/** Gets current entry (command) number
|
||||
* @param aNumber (output) current entry number
|
||||
*/
|
||||
NS_IMETHOD GetCurrentEntryNumber(PRInt32 *aNumber) = 0;
|
||||
|
||||
/** Gets command history buffer count
|
||||
* @param aHistory (output) history buffer count
|
||||
*/
|
||||
NS_IMETHOD GetHistory(PRInt32 *aHistory) = 0;
|
||||
|
||||
/** Sets command history buffer count
|
||||
* @param aHistory history buffer count
|
||||
*/
|
||||
NS_IMETHOD SetHistory(PRInt32 aHistory) = 0;
|
||||
|
||||
/** Gets prompt string
|
||||
* @param aPrompt (output) prompt string
|
||||
*/
|
||||
NS_IMETHOD GetPrompt(PRUnichar **aPrompt) = 0;
|
||||
|
||||
/** Sets prompt string
|
||||
* @param aPrompt prompt string
|
||||
*/
|
||||
NS_IMETHOD SetPrompt(const PRUnichar* aPrompt) = 0;
|
||||
|
||||
/** Writes string to terminal as if the user had typed it (without authenitcation)
|
||||
* @param aString string to be transmitted to terminal
|
||||
*/
|
||||
NS_IMETHOD SendTextAux(const nsString& aString) = 0;
|
||||
|
||||
/** Writes string to terminal as if the user had typed it (command input)
|
||||
* @param aString string to be transmitted to terminal
|
||||
* @param aCookie document.cookie string for authentication
|
||||
*/
|
||||
NS_IMETHOD SendText(const nsString& aString, const PRUnichar* aCookie) = 0;
|
||||
|
||||
/** Paste data from clipboard into XMLterm at current input line cursor location
|
||||
*/
|
||||
NS_IMETHOD Paste() = 0;
|
||||
|
||||
/** Gets document associated with XMLterm
|
||||
* @param aDoc (output) DOM document
|
||||
*/
|
||||
NS_IMETHOD GetDocument(nsIDOMDocument** aDoc) = 0;
|
||||
|
||||
/** Gets presentation shell with XMLterm
|
||||
* @param aPresShell (output) presentation shell
|
||||
*/
|
||||
NS_IMETHOD GetPresShell(nsIPresShell** aPresShell) = 0;
|
||||
};
|
||||
|
||||
#define MOZXMLTERMINAL_CID \
|
||||
{ /* 0eb82b21-43a2-11d3-8e76-006008948af5 */ \
|
||||
0x0eb82b21, 0x43a2, 0x11d3, \
|
||||
{0x8e, 0x76, 0x00, 0x60, 0x08, 0x94, 0x8a, 0xf5} }
|
||||
extern nsresult
|
||||
NS_NewXMLTerminal(mozIXMLTerminal** aXMLTerminal);
|
||||
|
||||
#endif /* mozIXMLTerminal_h___ */
|
||||
681
mozilla/extensions/xmlterm/base/mozLineTerm.cpp
Normal file
681
mozilla/extensions/xmlterm/base/mozLineTerm.cpp
Normal file
@@ -0,0 +1,681 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozLineTerm.cpp: class implementing mozILineTerm/mozILineTermAux interfaces,
|
||||
// providing an XPCOM/XPCONNECT wrapper for the LINETERM module
|
||||
|
||||
#include "stdio.h"
|
||||
|
||||
#include "nspr.h"
|
||||
#include "nscore.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "prlog.h"
|
||||
#include "nsIAllocator.h"
|
||||
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIPref.h"
|
||||
#include "nsIPrincipal.h"
|
||||
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIDOMHTMLDocument.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
#include "mozXMLTermUtils.h"
|
||||
#include "mozLineTerm.h"
|
||||
#include "lineterm.h"
|
||||
|
||||
#define MAXCOL 4096 // Maximum columns in line buffer
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID);
|
||||
|
||||
static NS_DEFINE_IID(kILineTermIID, MOZILINETERM_IID);
|
||||
static NS_DEFINE_IID(kILineTermAuxIID, MOZILINETERMAUX_IID);
|
||||
|
||||
static NS_DEFINE_IID(kLineTermCID, MOZLINETERM_CID);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozLineTerm, mozLineTermAux factories
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsresult
|
||||
NS_NewLineTerm(mozILineTerm** aLineTerm)
|
||||
{
|
||||
NS_PRECONDITION(aLineTerm != nsnull, "null ptr");
|
||||
if (! aLineTerm)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aLineTerm = new mozLineTerm();
|
||||
if (! *aLineTerm)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(*aLineTerm);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
NS_NewLineTermAux(mozILineTermAux** aLineTermAux)
|
||||
{
|
||||
NS_PRECONDITION(aLineTermAux != nsnull, "null ptr");
|
||||
if (! aLineTermAux)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aLineTermAux = new mozLineTerm();
|
||||
if (! *aLineTermAux)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(*aLineTermAux);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozLineTerm implementaion
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
PRBool mozLineTerm::mLoggingEnabled = false;
|
||||
|
||||
mozLineTerm::mozLineTerm() :
|
||||
mCursorRow(0),
|
||||
mCursorColumn(0),
|
||||
mSuspended(false),
|
||||
mEchoFlag(true),
|
||||
mObserver(nsnull),
|
||||
mCookie(""),
|
||||
mLastTime(LL_ZERO)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
mLTerm = lterm_new();
|
||||
}
|
||||
|
||||
|
||||
mozLineTerm::~mozLineTerm()
|
||||
{
|
||||
lterm_delete(mLTerm);
|
||||
mObserver = nsnull;
|
||||
}
|
||||
|
||||
|
||||
// Implement AddRef and Release
|
||||
NS_IMPL_ADDREF(mozLineTerm)
|
||||
NS_IMPL_RELEASE(mozLineTerm)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozLineTerm::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
//XMLT_LOG(mozLineTerm::QueryInterface,30,("0x%x\n",aIID));
|
||||
|
||||
if ( aIID.Equals(kISupportsIID)) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(mozILineTermAux*,this));
|
||||
|
||||
} else if ( aIID.Equals(mozILineTerm::GetIID()) ) {
|
||||
*aInstancePtr = NS_STATIC_CAST(mozILineTerm*,
|
||||
NS_STATIC_CAST(mozILineTermAux*,this));
|
||||
|
||||
} else if ( aIID.Equals(mozILineTermAux::GetIID()) ) {
|
||||
*aInstancePtr = NS_STATIC_CAST(mozILineTermAux*,this);
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_ADDREF_THIS();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Checks if preference settings are secure for LineTerm creation and use
|
||||
*/
|
||||
NS_IMETHODIMP mozLineTerm::ArePrefsSecure(PRBool *_retval)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozLineTerm::ArePrefsSecure,30,("\n"));
|
||||
|
||||
if (!_retval)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*_retval = false;
|
||||
|
||||
nsIPref* prefService;
|
||||
nsServiceManager::GetService(kPrefServiceCID, NS_GET_IID(nsIPref),
|
||||
(nsISupports**) &prefService);
|
||||
if (!prefService)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Check if Components JS object is secure
|
||||
PRBool checkXPC;
|
||||
result = prefService->GetBoolPref("security.checkxpconnect", &checkXPC);
|
||||
if (NS_FAILED(result))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (!checkXPC) {
|
||||
XMLT_ERROR("mozLineTerm::ArePrefsSecure: Error - Please add the line\n"
|
||||
" pref(\"security.checkxpcconnect\",true);\n"
|
||||
"to your preferences file (.mozilla/prefs.js)\n");
|
||||
*_retval = false;
|
||||
#if 0 // Temporarily comented out
|
||||
return NS_OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
nsCAutoString secString ("security.policy.");
|
||||
/* Get global policy name. */
|
||||
char *policyStr;
|
||||
|
||||
result = prefService->CopyCharPref("javascript.security_policy", &policyStr);
|
||||
if (NS_SUCCEEDED(result) && policyStr) {
|
||||
secString.Append(policyStr);
|
||||
nsAllocator::Free(policyStr);
|
||||
} else {
|
||||
secString.Append("default");
|
||||
}
|
||||
|
||||
secString.Append(".htmldocument.cookie");
|
||||
|
||||
char* prefStr = secString.ToNewCString();
|
||||
XMLT_LOG(mozLineTerm::ArePrefsSecure,32, ("prefStr=%s\n", prefStr));
|
||||
|
||||
char *secLevelString;
|
||||
result = prefService->CopyCharPref(prefStr, &secLevelString);
|
||||
nsAllocator::Free(prefStr);
|
||||
|
||||
if (NS_FAILED(result) || !secLevelString)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
XMLT_LOG(mozLineTerm::ArePrefsSecure,32,
|
||||
("secLevelString=%s\n", secLevelString));
|
||||
|
||||
*_retval = (PL_strcmp(secLevelString, "sameOrigin") == 0);
|
||||
nsAllocator::Free(secLevelString);
|
||||
|
||||
if (!(*_retval)) {
|
||||
XMLT_ERROR("mozLineTerm::ArePrefsSecure: Error - Please add the line\n"
|
||||
" pref(\"security.policy.default.htmldocument.cookie\",\"sameOrigin\");\n"
|
||||
"to your preferences file (.mozilla/prefs.js)\n");
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Checks document principal to ensure it has LineTerm creation privileges.
|
||||
* Returns the principal string if the principal is secure,
|
||||
* and a (zero length) null string if the principal is insecure.
|
||||
*/
|
||||
NS_IMETHODIMP mozLineTerm::GetSecurePrincipal(nsIDOMDocument *domDoc,
|
||||
char** aPrincipalStr)
|
||||
{
|
||||
XMLT_LOG(mozLineTerm::GetSecurePrincipal,30,("\n"));
|
||||
|
||||
if (!aPrincipalStr)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*aPrincipalStr = nsnull;
|
||||
|
||||
// Get principal string
|
||||
nsCOMPtr<nsIDocument> doc = do_QueryInterface(domDoc);
|
||||
if (!doc)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal=dont_AddRef(doc->GetDocumentPrincipal());
|
||||
|
||||
#if 0 // Temporarily comented out, because ToString is not immplemented
|
||||
result = principal->ToString(aPrincipalStr);
|
||||
if (NS_FAILED(result) || !*aPrincipalStr)
|
||||
return NS_ERROR_FAILURE;
|
||||
#else
|
||||
const char temStr[] = "unknown";
|
||||
PRInt32 temLen = strlen(temStr);
|
||||
*aPrincipalStr = strncpy((char*) nsAllocator::Alloc(temLen+1),
|
||||
temStr, temLen+1);
|
||||
#endif
|
||||
|
||||
XMLT_LOG(mozLineTerm::GetSecurePrincipal,32,("aPrincipalStr=%s\n",
|
||||
*aPrincipalStr));
|
||||
|
||||
// Check if principal is secure
|
||||
PRBool insecure = false;
|
||||
if (insecure) {
|
||||
// Return null string
|
||||
XMLT_ERROR("mozLineTerm::GetSecurePrincipal: Error - "
|
||||
"Insecure document principal %s\n", *aPrincipalStr);
|
||||
nsAllocator::Free(*aPrincipalStr);
|
||||
*aPrincipalStr = (char*) nsAllocator::Alloc(1);
|
||||
**aPrincipalStr = '\0';
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Open LineTerm without callback
|
||||
*/
|
||||
NS_IMETHODIMP mozLineTerm::Open(const PRUnichar *command,
|
||||
const PRUnichar *promptRegexp,
|
||||
PRInt32 options, PRInt32 processType,
|
||||
nsIDOMDocument *domDoc)
|
||||
{
|
||||
if (mSuspended) {
|
||||
XMLT_ERROR("mozLineTerm::Open: Error - LineTerm %d is suspended\n",
|
||||
mLTerm);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsAutoString aCookie;
|
||||
return OpenAux(command, promptRegexp, options, processType, domDoc,
|
||||
nsnull, aCookie);
|
||||
}
|
||||
|
||||
|
||||
/** Open LineTerm, with an Observer for callback to process new input/output
|
||||
*/
|
||||
NS_IMETHODIMP mozLineTerm::OpenAux(const PRUnichar *command,
|
||||
const PRUnichar *promptRegexp,
|
||||
PRInt32 options, PRInt32 processType,
|
||||
nsIDOMDocument *domDoc,
|
||||
nsIObserver* anObserver,
|
||||
nsString& aCookie)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozLineTerm::Open,20,("\n"));
|
||||
|
||||
// Ensure that preferences are secure for LineTerm creation and use
|
||||
PRBool arePrefsSecure;
|
||||
result = ArePrefsSecure(&arePrefsSecure);
|
||||
#if 0 // Temporarily comented out
|
||||
if (NS_FAILED(result) || !arePrefsSecure)
|
||||
return NS_ERROR_FAILURE;
|
||||
#endif
|
||||
|
||||
// Ensure that document principal is secure for LineTerm creation
|
||||
char* securePrincipal;
|
||||
result = GetSecurePrincipal(domDoc, &securePrincipal);
|
||||
if (NS_FAILED(result))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (strlen(securePrincipal) == 0) {
|
||||
nsAllocator::Free(securePrincipal);
|
||||
XMLT_ERROR("mozLineTerm::OpenAux: Error - "
|
||||
"Failed to create LineTerm for insecure document principal\n");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMHTMLDocument> domHTMLDoc = do_QueryInterface(domDoc);
|
||||
if (!domHTMLDoc)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Ensure that cookie attribute of document is defined
|
||||
nsAutoString cookiePrefix ( "xmlterm=" );
|
||||
nsAutoString cookieStr;
|
||||
result = domHTMLDoc->GetCookie(cookieStr);
|
||||
|
||||
if (NS_SUCCEEDED(result) &&
|
||||
(cookieStr.Length() > cookiePrefix.Length()) &&
|
||||
(cookieStr.Find(cookiePrefix) == 0)) {
|
||||
// Cookie value already defined for document; simply copy it
|
||||
mCookie = cookieStr;
|
||||
|
||||
} else {
|
||||
// Create random session cookie
|
||||
nsAutoString cookieValue;
|
||||
result = mozXMLTermUtils::RandomCookie(cookieValue);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
mCookie = cookiePrefix;
|
||||
mCookie += cookieValue;
|
||||
|
||||
// Set new cookie value
|
||||
result = domHTMLDoc->SetCookie(mCookie);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
}
|
||||
|
||||
// Return copy of cookie to caller
|
||||
aCookie = mCookie;
|
||||
|
||||
mObserver = anObserver; // non-owning reference
|
||||
|
||||
// Convert cookie to CString
|
||||
char* cookieCStr = mCookie.ToNewCString();
|
||||
XMLT_LOG(mozLineTerm::Open,22, ("mCookie=%s\n", cookieCStr));
|
||||
|
||||
if (anObserver != nsnull) {
|
||||
result = lterm_open(mLTerm, NULL, cookieCStr, L"#$%>?", options,
|
||||
processType, mozLineTerm::Callback, (void *) this);
|
||||
} else {
|
||||
result = lterm_open(mLTerm, NULL, cookieCStr, L"#$%>?", options,
|
||||
processType, NULL, NULL);
|
||||
}
|
||||
|
||||
// Free cookie CString
|
||||
nsAllocator::Free(cookieCStr);
|
||||
|
||||
if (mLoggingEnabled) {
|
||||
// Log time stamp for LineTerm open operation
|
||||
nsAutoString timeStamp;
|
||||
result = mozXMLTermUtils::TimeStamp(0, mLastTime, timeStamp);
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
char* temStr = timeStamp.ToNewCString();
|
||||
fprintf(stderr, "<TS %s> LineTerm %d opened by principal %s\n",
|
||||
temStr, mLTerm, securePrincipal);
|
||||
nsAllocator::Free(temStr);
|
||||
}
|
||||
}
|
||||
|
||||
if (result == 0) {
|
||||
return NS_OK;
|
||||
} else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** GTK-style callback funtion for mozLineTerm object
|
||||
*/
|
||||
void mozLineTerm::Callback(gpointer data,
|
||||
gint source,
|
||||
GdkInputCondition condition)
|
||||
{
|
||||
mozLineTerm* lineTerm = (mozLineTerm*) data;
|
||||
|
||||
//XMLT_LOG(mozLineTerm::Callback,50,("\n"));
|
||||
|
||||
PR_ASSERT(lineTerm != nsnull);
|
||||
PR_ASSERT(lineTerm->mObserver != nsnull);
|
||||
|
||||
lineTerm->mObserver->Observe((nsISupports*) lineTerm, nsnull, nsnull);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Suspends (or restores) LineTerm activity depending upon aSuspend
|
||||
*/
|
||||
NS_IMETHODIMP mozLineTerm::SuspendAux(PRBool aSuspend)
|
||||
{
|
||||
mSuspended = aSuspend;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Close LineTerm (a Finalize method)
|
||||
*/
|
||||
NS_IMETHODIMP mozLineTerm::Close(const PRUnichar* aCookie)
|
||||
{
|
||||
if (!mCookie.Equals(aCookie)) {
|
||||
XMLT_ERROR("mozLineTerm::Close: Error - Cookie mismatch\n");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (mSuspended) {
|
||||
XMLT_ERROR("mozLineTerm::Close: Error - LineTerm %d is suspended\n",
|
||||
mLTerm);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (lterm_close(mLTerm) == 0) {
|
||||
return NS_OK;
|
||||
} else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
mObserver = nsnull;
|
||||
}
|
||||
|
||||
|
||||
/** Close LineTerm (a Finalize method)
|
||||
*/
|
||||
NS_IMETHODIMP mozLineTerm::CloseAux(void)
|
||||
{
|
||||
if (lterm_close(mLTerm) == 0) {
|
||||
return NS_OK;
|
||||
} else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
mObserver = nsnull;
|
||||
}
|
||||
|
||||
|
||||
/** Close all LineTerm instances
|
||||
*/
|
||||
NS_IMETHODIMP mozLineTerm::CloseAllAux(void)
|
||||
{
|
||||
lterm_close_all();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Writes a string to LTERM
|
||||
*/
|
||||
NS_IMETHODIMP mozLineTerm::Write(const PRUnichar *buf,
|
||||
const PRUnichar* aCookie)
|
||||
{
|
||||
if (!mCookie.Equals(aCookie)) {
|
||||
XMLT_ERROR("mozLineTerm::Write: Error - Cookie mismatch\n");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (mSuspended) {
|
||||
XMLT_ERROR("mozLineTerm::Write: Error - LineTerm %d is suspended\n",
|
||||
mLTerm);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
XMLT_LOG(mozLineTerm::Write,30,("\n"));
|
||||
|
||||
nsresult result;
|
||||
UNICHAR ubuf[MAXCOL];
|
||||
int jLen, retCode;
|
||||
PRBool newline = false;
|
||||
|
||||
jLen = 0;
|
||||
while ((jLen < MAXCOL-1) && (buf[jLen] != 0)) {
|
||||
if (buf[jLen] == U_LINEFEED)
|
||||
newline = true;
|
||||
|
||||
ubuf[jLen++] = (UNICHAR) buf[jLen];
|
||||
}
|
||||
|
||||
if (jLen >= MAXCOL-1) {
|
||||
XMLT_ERROR("mozLineTerm::Write: Error - Buffer overflow\n");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (mLoggingEnabled && (jLen > 0)) {
|
||||
/* Log all input to STDERR */
|
||||
ucsprint(stderr, ubuf, jLen);
|
||||
|
||||
nsAutoString timeStamp;
|
||||
result = mozXMLTermUtils::TimeStamp(60, mLastTime, timeStamp);
|
||||
|
||||
if (NS_SUCCEEDED(result) && (timeStamp.Length() > 0)) {
|
||||
char* temStr = timeStamp.ToNewCString();
|
||||
fprintf(stderr, "<TS %s>\n", temStr);
|
||||
nsAllocator::Free(temStr);
|
||||
|
||||
} else if (newline) {
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
retCode = lterm_write(mLTerm, ubuf, jLen, LTERM_WRITE_PLAIN_INPUT);
|
||||
if (retCode < 0)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozLineTerm::Read(PRInt32 *opcodes,
|
||||
PRInt32 *buf_row, PRInt32 *buf_col,
|
||||
const PRUnichar* aCookie,
|
||||
PRUnichar **_retval)
|
||||
{
|
||||
if (!mCookie.Equals(aCookie)) {
|
||||
XMLT_ERROR("mozLineTerm::Read: Error - Cookie mismatch\n");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (mSuspended) {
|
||||
XMLT_ERROR("mozLineTerm::Read: Error - LineTerm %d is suspended\n",
|
||||
mLTerm);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
return ReadAux(opcodes, buf_row, buf_col, _retval, nsnull);
|
||||
}
|
||||
|
||||
|
||||
/** Reads a line from LTERM and returns it as a string (may be null string)
|
||||
*/
|
||||
NS_IMETHODIMP mozLineTerm::ReadAux(PRInt32 *opcodes,
|
||||
PRInt32 *buf_row, PRInt32 *buf_col,
|
||||
PRUnichar **_retval, PRUnichar **retstyle)
|
||||
{
|
||||
UNICHAR ubuf[MAXCOL];
|
||||
UNISTYLE ustyle[MAXCOL];
|
||||
int cursor_row, cursor_col;
|
||||
int retCode, j;
|
||||
|
||||
XMLT_LOG(mozLineTerm::ReadAux,30,("\n"));
|
||||
|
||||
retCode = lterm_read(mLTerm, 0, ubuf, MAXCOL-1,
|
||||
ustyle, opcodes,
|
||||
buf_row, buf_col, &cursor_row, &cursor_col);
|
||||
if (retCode < 0)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (*opcodes == 0) {
|
||||
// Return null pointer(s)
|
||||
*_retval = nsnull;
|
||||
|
||||
if (retstyle != nsnull)
|
||||
*retstyle = nsnull;
|
||||
|
||||
} else {
|
||||
// Return output string
|
||||
mCursorRow = cursor_row;
|
||||
mCursorColumn = cursor_col;
|
||||
|
||||
XMLT_LOG(mozLineTerm::Read,72,("cursor_col=%d\n", cursor_col));
|
||||
|
||||
int allocBytes = sizeof(PRUnichar)*(retCode + 1);
|
||||
*_retval = (PRUnichar*) nsAllocator::Alloc(allocBytes);
|
||||
|
||||
for (j=0; j<retCode; j++)
|
||||
(*_retval)[j] = (PRUnichar) ubuf[j];
|
||||
|
||||
// Insert null string terminator
|
||||
(*_retval)[retCode] = 0;
|
||||
|
||||
if (retstyle != nsnull) {
|
||||
// Return style array as well
|
||||
*retstyle = (PRUnichar*) nsAllocator::Alloc(allocBytes);
|
||||
|
||||
for (j=0; j<retCode; j++)
|
||||
(*retstyle)[j] = (PRUnichar) ustyle[j];
|
||||
|
||||
// Insert null string terminator
|
||||
(*retstyle)[retCode] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozLineTerm::GetCursorRow(PRInt32 *aCursorRow)
|
||||
{
|
||||
*aCursorRow = mCursorRow;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozLineTerm::SetCursorRow(PRInt32 aCursorRow)
|
||||
{
|
||||
if (mSuspended) {
|
||||
XMLT_ERROR("mozLineTerm::SetCursorRow: Error - LineTerm %d is suspended\n",
|
||||
mLTerm);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
return NS_OK; // Do nothing for the moment
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozLineTerm::GetCursorColumn(PRInt32 *aCursorColumn)
|
||||
{
|
||||
*aCursorColumn = mCursorColumn;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozLineTerm::SetCursorColumn(PRInt32 aCursorColumn)
|
||||
{
|
||||
if (mSuspended) {
|
||||
XMLT_ERROR("mozLineTerm::SetCursorColumn: Error - LineTerm %d is suspended\n",
|
||||
mLTerm);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
return NS_OK; // Do nothing for the moment
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozLineTerm::GetEchoFlag(PRBool *aEchoFlag)
|
||||
{
|
||||
*aEchoFlag = mEchoFlag;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozLineTerm::SetEchoFlag(PRBool aEchoFlag)
|
||||
{
|
||||
int result;
|
||||
|
||||
if (mSuspended) {
|
||||
XMLT_ERROR("mozLineTerm::SetEchoFlag: Error - LineTerm %d is suspended\n",
|
||||
mLTerm);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (aEchoFlag) {
|
||||
result = lterm_setecho(mLTerm, 1);
|
||||
} else {
|
||||
result = lterm_setecho(mLTerm, 0);
|
||||
}
|
||||
|
||||
if (result != 0)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
mEchoFlag = aEchoFlag;
|
||||
return NS_OK;
|
||||
}
|
||||
139
mozilla/extensions/xmlterm/base/mozLineTerm.h
Normal file
139
mozilla/extensions/xmlterm/base/mozLineTerm.h
Normal file
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozLineTerm.h: Declaration of mozLineTerm class
|
||||
// which implements the LineTerm and LineTermAux interfaces.
|
||||
// and provides an XPCOM/XPCONNECT wrapper to the LINETERM module
|
||||
|
||||
#include "nspr.h"
|
||||
#include "nscore.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsIServiceManager.h"
|
||||
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIDOMHTMLDocument.h"
|
||||
|
||||
#include "mozILineTermAux.h"
|
||||
|
||||
#define MAXCOL 4096 // Maximum columns in line buffer
|
||||
|
||||
class mozLineTerm : public mozILineTermAux
|
||||
{
|
||||
public:
|
||||
mozLineTerm();
|
||||
virtual ~mozLineTerm();
|
||||
|
||||
// nsISupports interface
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// mozILineTerm interface
|
||||
NS_IMETHOD GetCursorRow(PRInt32 *aCursorRow);
|
||||
NS_IMETHOD SetCursorRow(PRInt32 aCursorRow);
|
||||
|
||||
NS_IMETHOD GetCursorColumn(PRInt32 *aCursorColumn);
|
||||
NS_IMETHOD SetCursorColumn(PRInt32 aCursorColumn);
|
||||
|
||||
NS_IMETHOD GetEchoFlag(PRBool *aEchoFlag);
|
||||
NS_IMETHOD SetEchoFlag(PRBool aEchoFlag);
|
||||
|
||||
NS_IMETHOD Open(const PRUnichar *command,
|
||||
const PRUnichar *promptRegexp,
|
||||
PRInt32 options, PRInt32 processType,
|
||||
nsIDOMDocument *domDoc);
|
||||
|
||||
NS_IMETHOD Close(const PRUnichar* aCookie);
|
||||
|
||||
NS_IMETHOD Write(const PRUnichar *buf, const PRUnichar* aCookie);
|
||||
|
||||
NS_IMETHOD Read(PRInt32 *opcodes,
|
||||
PRInt32 *buf_row, PRInt32 *buf_col,
|
||||
const PRUnichar* aCookie,
|
||||
PRUnichar **_retval);
|
||||
|
||||
// mozILineTermAux interface add ons
|
||||
// (not scriptable, no authentication cookie required)
|
||||
NS_IMETHOD OpenAux(const PRUnichar *command,
|
||||
const PRUnichar *promptRegexp,
|
||||
PRInt32 options, PRInt32 processType,
|
||||
nsIDOMDocument *domDoc,
|
||||
nsIObserver* anObserver,
|
||||
nsString& aCookie);
|
||||
|
||||
NS_IMETHOD SuspendAux(PRBool aSuspend);
|
||||
|
||||
NS_IMETHOD CloseAux(void);
|
||||
|
||||
NS_IMETHOD CloseAllAux(void);
|
||||
|
||||
NS_IMETHOD ReadAux(PRInt32 *opcodes,
|
||||
PRInt32 *buf_row, PRInt32 *buf_col,
|
||||
PRUnichar **_retval, PRUnichar **retstyle);
|
||||
// others
|
||||
|
||||
/** GTK event callback function
|
||||
*/
|
||||
static void Callback(gpointer data,
|
||||
gint source,
|
||||
GdkInputCondition condition);
|
||||
|
||||
/** Flag controlling logging of user input to STDERR */
|
||||
static PRBool mLoggingEnabled;
|
||||
|
||||
protected:
|
||||
/** Checks if Mozilla preference settings are secure
|
||||
* @param _retval (output) true if settings are secure
|
||||
*/
|
||||
NS_IMETHOD ArePrefsSecure(PRBool *_retval);
|
||||
|
||||
/** Checks if document principal is secure and returns principal string
|
||||
* @param domDOC DOM document object
|
||||
* @param aPrincipalStr (output) document principal string
|
||||
*/
|
||||
NS_IMETHOD GetSecurePrincipal(nsIDOMDocument *domDoc,
|
||||
char** aPrincipalStr);
|
||||
|
||||
/** lineterm descriptor index returned by lterm_new (>= 0) */
|
||||
int mLTerm;
|
||||
|
||||
/** current cursor row position */
|
||||
int mCursorRow;
|
||||
|
||||
/** current cursor column position */
|
||||
int mCursorColumn;
|
||||
|
||||
/** flag controlling whether is LineTerm is suspended */
|
||||
PRBool mSuspended;
|
||||
|
||||
/** flag controlling input echo in LineTerm */
|
||||
PRBool mEchoFlag;
|
||||
|
||||
/** non-owning reference to Observer to be notified when data is available
|
||||
* for reading from LineTerm
|
||||
*/
|
||||
nsIObserver* mObserver;
|
||||
|
||||
/** cookie string used for authentication (stored in document.cookie) */
|
||||
nsString mCookie;
|
||||
|
||||
/** record of last time when timestamp was displayed in user input log */
|
||||
PRTime mLastTime;
|
||||
|
||||
};
|
||||
67
mozilla/extensions/xmlterm/base/mozXMLT.h
Normal file
67
mozilla/extensions/xmlterm/base/mozXMLT.h
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLT.h: XMLTerm common header
|
||||
|
||||
#ifndef _MOZXMLT_H
|
||||
|
||||
#define _MOZXMLT_H 1
|
||||
|
||||
// Standard C header files
|
||||
#ifndef _STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
// public declarations
|
||||
#include "lineterm.h"
|
||||
#include "tracelog.h"
|
||||
|
||||
// private declarations
|
||||
|
||||
#define XMLT_TLOG_MODULE 2
|
||||
#define XMLT_ERROR TLOG_ERROR
|
||||
#define XMLT_WARNING TLOG_WARNING
|
||||
#define XMLT_LOG(procname,level,args) TLOG_PRINT(XMLT_TLOG_MODULE,procname,level,args)
|
||||
|
||||
// Tracing versions of NS_IMPL_ADDREF and NS_IMPL_RELEASE
|
||||
|
||||
#define XMLT_IMPL_ADDREF(_class) \
|
||||
NS_IMETHODIMP_(nsrefcnt) _class::AddRef(void) \
|
||||
{ \
|
||||
NS_PRECONDITION(PRInt32(mRefCnt) >= 0, "illegal refcnt"); \
|
||||
++mRefCnt; \
|
||||
XMLT_WARNING(#_class ":AddRef, mRefCnt=%d\n", mRefCnt); \
|
||||
return mRefCnt; \
|
||||
}
|
||||
|
||||
#define XMLT_IMPL_RELEASE(_class) \
|
||||
NS_IMETHODIMP_(nsrefcnt) _class::Release(void) \
|
||||
{ \
|
||||
NS_PRECONDITION(0 != mRefCnt, "dup release"); \
|
||||
--mRefCnt; \
|
||||
XMLT_WARNING(#_class ":Release, mRefCnt=%d\n", mRefCnt); \
|
||||
if (mRefCnt == 0) { \
|
||||
NS_DELETEXPCOM(this); \
|
||||
return 0; \
|
||||
} \
|
||||
return mRefCnt; \
|
||||
}
|
||||
|
||||
#endif /* _MOZXMLT_H */
|
||||
298
mozilla/extensions/xmlterm/base/mozXMLTermFactory.cpp
Normal file
298
mozilla/extensions/xmlterm/base/mozXMLTermFactory.cpp
Normal file
@@ -0,0 +1,298 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTermFactory.cpp: XPCOM factory for mozIXMLTermShell, mozILineTerm
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nscore.h"
|
||||
#include "nspr.h"
|
||||
#include "nsIComponentManager.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsXPComFactory.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
#include "mozLineTerm.h"
|
||||
#include "mozIXMLTermShell.h"
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
|
||||
static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID);
|
||||
static NS_DEFINE_CID(kXMLTermShellCID, MOZXMLTERMSHELL_CID);
|
||||
static NS_DEFINE_CID(kLineTermCID, MOZLINETERM_CID);
|
||||
|
||||
class XMLTermFactory : public nsIFactory
|
||||
{
|
||||
public:
|
||||
XMLTermFactory(const nsCID &aClass, const char* className, const char* progID);
|
||||
|
||||
// nsISupports methods
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// nsIFactory methods
|
||||
NS_IMETHOD CreateInstance(nsISupports *aOuter,
|
||||
const nsIID &aIID,
|
||||
void **aResult);
|
||||
|
||||
NS_IMETHOD LockFactory(PRBool aLock);
|
||||
|
||||
protected:
|
||||
virtual ~XMLTermFactory();
|
||||
|
||||
protected:
|
||||
nsCID mClassID;
|
||||
const char* mClassName;
|
||||
const char* mProgID;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTermFactory implementation
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Globals, useful to check if safe to unload module
|
||||
static PRInt32 gLockCnt = 0;
|
||||
static PRInt32 gInstanceCnt = 0;
|
||||
|
||||
XMLTermFactory::XMLTermFactory(const nsCID &aClass,
|
||||
const char* className,
|
||||
const char* progID):
|
||||
mClassID(aClass),
|
||||
mClassName(className),
|
||||
mProgID(progID)
|
||||
{
|
||||
// Zero reference counter
|
||||
NS_INIT_REFCNT();
|
||||
PR_AtomicIncrement(&gInstanceCnt);
|
||||
}
|
||||
|
||||
|
||||
XMLTermFactory::~XMLTermFactory()
|
||||
{
|
||||
NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction");
|
||||
PR_AtomicDecrement(&gInstanceCnt);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
XMLTermFactory::QueryInterface(const nsIID &aIID, void **aResult)
|
||||
{
|
||||
if (!aResult)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aResult = nsnull;
|
||||
|
||||
if (aIID.Equals(kISupportsIID)) {
|
||||
*aResult = NS_STATIC_CAST(nsISupports*, this);
|
||||
|
||||
} else if (aIID.Equals(kIFactoryIID)) {
|
||||
*aResult = NS_STATIC_CAST(nsIFactory*, this);
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_ADDREF_THIS();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ADDREF(XMLTermFactory);
|
||||
NS_IMPL_RELEASE(XMLTermFactory);
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
XMLTermFactory::CreateInstance(nsISupports *aOuter,
|
||||
const nsIID &aIID,
|
||||
void **aResult)
|
||||
{
|
||||
if (!aResult)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
if (aOuter)
|
||||
return NS_ERROR_NO_AGGREGATION;
|
||||
|
||||
*aResult = nsnull;
|
||||
|
||||
nsresult rv;
|
||||
|
||||
nsISupports *inst = nsnull;
|
||||
if (mClassID.Equals(kXMLTermShellCID)) {
|
||||
if (NS_FAILED(rv = NS_NewXMLTermShell((mozIXMLTermShell**) &inst)))
|
||||
return rv;
|
||||
|
||||
} else if (mClassID.Equals(kLineTermCID)) {
|
||||
if (NS_FAILED(rv = NS_NewLineTerm((mozILineTerm**) &inst)))
|
||||
return rv;
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
if (! inst)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
if (NS_FAILED(rv = inst->QueryInterface(aIID, aResult))) {
|
||||
// We didn't get the right interface.
|
||||
NS_ERROR("didn't support the interface you wanted");
|
||||
}
|
||||
|
||||
NS_IF_RELEASE(inst);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
XMLTermFactory::LockFactory(PRBool aLock)
|
||||
{
|
||||
if (aLock) {
|
||||
PR_AtomicIncrement(&gLockCnt);
|
||||
} else {
|
||||
PR_AtomicDecrement(&gLockCnt);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Exported functions for loading, registering, unregistering, and unloading
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Return approptiate factory to the caller
|
||||
extern "C" NS_EXPORT nsresult
|
||||
NSGetFactory(nsISupports* aServMgr,
|
||||
const nsCID &aClass,
|
||||
const char *aClassName,
|
||||
const char *aProgID,
|
||||
nsIFactory **aFactory)
|
||||
{
|
||||
static PRBool ltermInitialized = false;
|
||||
static PRBool xmltermInitialized = false;
|
||||
|
||||
if (!ltermInitialized) {
|
||||
// Initialize all LINETERM operations
|
||||
// (This initialization needs to be done at factory creation time;
|
||||
// trying to do it earlier, i.e., at registration time,
|
||||
// does not work ... something to do with loading of static global
|
||||
// variables.)
|
||||
|
||||
int messageLevel = 8;
|
||||
char* debugStr = (char*) PR_GetEnv("LTERM_DEBUG");
|
||||
|
||||
if (debugStr && (strlen(debugStr) == 1)) {
|
||||
messageLevel = 98;
|
||||
debugStr = nsnull;
|
||||
}
|
||||
|
||||
int result = lterm_init(0);
|
||||
if (result == 0) {
|
||||
tlog_set_level(LTERM_TLOG_MODULE, messageLevel, debugStr);
|
||||
}
|
||||
ltermInitialized = true;
|
||||
|
||||
char* logStr = (char*) PR_GetEnv("LTERM_LOG");
|
||||
if (logStr && (strlen(logStr) > 0)) {
|
||||
// Enable LineTerm logging
|
||||
mozLineTerm::mLoggingEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (aClass.Equals(kXMLTermShellCID) && !xmltermInitialized) {
|
||||
// Set initial debugging message level for XMLterm
|
||||
int messageLevel = 8;
|
||||
char* debugStr = (char*) PR_GetEnv("XMLT_DEBUG");
|
||||
|
||||
if (debugStr && (strlen(debugStr) == 1)) {
|
||||
messageLevel = 98;
|
||||
debugStr = nsnull;
|
||||
}
|
||||
|
||||
tlog_set_level(XMLT_TLOG_MODULE, messageLevel, debugStr);
|
||||
xmltermInitialized = true;
|
||||
}
|
||||
|
||||
if (!aFactory)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aFactory = nsnull;
|
||||
|
||||
XMLTermFactory* factory = new XMLTermFactory(aClass, aClassName,
|
||||
aProgID);
|
||||
if (factory == nsnull)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(factory);
|
||||
*aFactory = factory;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
extern "C" NS_EXPORT nsresult
|
||||
NSRegisterSelf(nsISupports* aServMgr , const char* aPath)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
nsCOMPtr<nsIServiceManager> servMgr(do_QueryInterface(aServMgr, &result));
|
||||
if (NS_FAILED(result)) return result;
|
||||
|
||||
NS_WITH_SERVICE(nsIComponentManager, compMgr, kComponentManagerCID, &result);
|
||||
if (NS_FAILED(result)) return result;
|
||||
|
||||
printf("Registering lineterm interface\n");
|
||||
|
||||
result = compMgr->RegisterComponent(kLineTermCID,
|
||||
"LineTerm Component",
|
||||
"component://mozilla/xmlterm/lineterm",
|
||||
aPath, PR_TRUE, PR_TRUE);
|
||||
|
||||
if (NS_FAILED(result)) return result;
|
||||
|
||||
printf("Registering xmlterm shell interface\n");
|
||||
|
||||
result = compMgr->RegisterComponent(kXMLTermShellCID,
|
||||
"XMLTerm Shell Component",
|
||||
"component://mozilla/xmlterm/xmltermshell",
|
||||
aPath, PR_TRUE, PR_TRUE);
|
||||
|
||||
if (NS_FAILED(result)) return result;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
extern "C" NS_EXPORT nsresult
|
||||
NSUnregisterSelf(nsISupports* aServMgr, const char* aPath)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
nsCOMPtr<nsIServiceManager> servMgr(do_QueryInterface(aServMgr, &result));
|
||||
if (NS_FAILED(result)) return result;
|
||||
|
||||
NS_WITH_SERVICE(nsIComponentManager, compMgr, kComponentManagerCID, &result);
|
||||
if (NS_FAILED(result)) return result;
|
||||
|
||||
result = compMgr->UnregisterComponent(kLineTermCID, aPath);
|
||||
if (NS_FAILED(result)) return result;
|
||||
|
||||
result = compMgr->UnregisterComponent(kXMLTermShellCID, aPath);
|
||||
if (NS_FAILED(result)) return result;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
604
mozilla/extensions/xmlterm/base/mozXMLTermListeners.cpp
Normal file
604
mozilla/extensions/xmlterm/base/mozXMLTermListeners.cpp
Normal file
@@ -0,0 +1,604 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTermListeners.cpp: implementation of classes in mozXMLTermListeners.h
|
||||
|
||||
#include "nsIServiceManager.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
#include "mozXMLTermListeners.h"
|
||||
|
||||
#include "nsIDOMKeyEvent.h"
|
||||
#include "nsIDOMMouseEvent.h"
|
||||
#include "nsIDOMNSUIEvent.h"
|
||||
#include "nsIPrivateTextEvent.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTermKeyListener factory
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsresult
|
||||
NS_NewXMLTermKeyListener(nsIDOMEventListener ** aInstancePtrResult,
|
||||
mozIXMLTerminal *aXMLTerminal)
|
||||
{
|
||||
mozXMLTermKeyListener* listener = new mozXMLTermKeyListener();
|
||||
if (listener == nsnull) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
// Save non-owning reference to embedding XMLTerminal object
|
||||
listener->SetXMLTerminal(aXMLTerminal);
|
||||
|
||||
return listener->QueryInterface(nsIDOMEventListener::GetIID(),
|
||||
(void **) aInstancePtrResult);
|
||||
}
|
||||
|
||||
nsresult
|
||||
NS_NewXMLTermTextListener(nsIDOMEventListener ** aInstancePtrResult,
|
||||
mozIXMLTerminal *aXMLTerminal)
|
||||
{
|
||||
mozXMLTermTextListener* listener = new mozXMLTermTextListener();
|
||||
if (listener == nsnull) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
// Save non-owning reference to embedding XMLTerminal object
|
||||
listener->SetXMLTerminal(aXMLTerminal);
|
||||
|
||||
return listener->QueryInterface(nsIDOMEventListener::GetIID(),
|
||||
(void **) aInstancePtrResult);
|
||||
}
|
||||
|
||||
nsresult
|
||||
NS_NewXMLTermMouseListener(nsIDOMEventListener ** aInstancePtrResult,
|
||||
mozIXMLTerminal *aXMLTerminal)
|
||||
{
|
||||
mozXMLTermMouseListener* listener = new mozXMLTermMouseListener();
|
||||
if (listener == nsnull) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
// Save non-owning reference to embedding XMLTerminal object
|
||||
listener->SetXMLTerminal(aXMLTerminal);
|
||||
|
||||
return listener->QueryInterface(nsIDOMEventListener::GetIID(),
|
||||
(void **) aInstancePtrResult);
|
||||
}
|
||||
|
||||
nsresult
|
||||
NS_NewXMLTermDragListener(nsIDOMEventListener ** aInstancePtrResult,
|
||||
mozIXMLTerminal *aXMLTerminal)
|
||||
{
|
||||
mozXMLTermDragListener* listener = new mozXMLTermDragListener();
|
||||
if (listener == nsnull) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
// Save non-owning reference to embedding XMLTerminal object
|
||||
listener->SetXMLTerminal(aXMLTerminal);
|
||||
|
||||
return listener->QueryInterface(nsIDOMEventListener::GetIID(),
|
||||
(void **) aInstancePtrResult);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTermKeyListener implementation
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
mozXMLTermKeyListener::mozXMLTermKeyListener()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
mozXMLTermKeyListener::~mozXMLTermKeyListener()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ADDREF(mozXMLTermKeyListener)
|
||||
|
||||
NS_IMPL_RELEASE(mozXMLTermKeyListener)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermKeyListener::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if (aIID.Equals(nsCOMTypeInfo<nsISupports>::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(nsIDOMKeyListener*,this));
|
||||
|
||||
} else if (aIID.Equals(nsIDOMEventListener::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDOMEventListener*,this);
|
||||
|
||||
} else if (aIID.Equals(nsIDOMKeyListener::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDOMKeyListener*,this);
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_ADDREF_THIS();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// Individual key handlers return NS_OK to indicate NOT consumed
|
||||
// by default, an error is returned indicating event is consumed
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermKeyListener::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// Process KeyDown events (handles control/alt modified key events)
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermKeyListener::KeyDown(nsIDOMEvent* aKeyEvent)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
nsCOMPtr<nsIDOMKeyEvent> keyEvent;
|
||||
keyEvent = do_QueryInterface(aKeyEvent);
|
||||
if (!keyEvent) {
|
||||
// Non-key event passed to keydown, do not consume it
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRBool isShift, ctrlKey, altKey;
|
||||
PRUint32 keyCode;
|
||||
|
||||
XMLT_LOG(mozXMLTermKeyListener::KeyDown,50,("\n"));
|
||||
|
||||
if (NS_SUCCEEDED(keyEvent->GetKeyCode(&keyCode)) &&
|
||||
NS_SUCCEEDED(keyEvent->GetShiftKey(&isShift)) &&
|
||||
NS_SUCCEEDED(keyEvent->GetCtrlKey(&ctrlKey)) &&
|
||||
NS_SUCCEEDED(keyEvent->GetAltKey(&altKey)) ) {
|
||||
|
||||
XMLT_LOG(mozXMLTermKeyListener::KeyDown,52,
|
||||
("keyCode=0x%x, ctrlKey=%d, altKey=%d\n", keyCode, ctrlKey, altKey));
|
||||
|
||||
PRUint32 keyChar = 0;
|
||||
|
||||
if (!ctrlKey && !altKey) {
|
||||
// Not control/alt key event
|
||||
switch (keyCode) {
|
||||
case nsIDOMKeyEvent::DOM_VK_LEFT:
|
||||
keyChar = U_CTL_B;
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_RIGHT:
|
||||
keyChar = U_CTL_F;
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_UP:
|
||||
keyChar = U_CTL_P;
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_DOWN:
|
||||
keyChar = U_CTL_N;
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_TAB: // Consume TAB to avoid scroll problems
|
||||
keyChar = 0;
|
||||
break;
|
||||
default: // ignore event without consuming
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
} else if (ctrlKey == PR_TRUE) {
|
||||
keyChar = keyCode - 0x40U; // Is this portable?
|
||||
}
|
||||
|
||||
XMLT_LOG(mozXMLTermKeyListener::KeyDown,52,("keyChar=0x%x\n", keyChar));
|
||||
|
||||
if ((keyChar > 0) && (keyChar < U_SPACE)) {
|
||||
// Transmit valid non-null control character
|
||||
const PRUnichar temUString[] = {keyChar,0};
|
||||
nsAutoString keyString(temUString);
|
||||
result = mXMLTerminal->SendTextAux(keyString);
|
||||
}
|
||||
}
|
||||
|
||||
// Consume key down event
|
||||
return NS_ERROR_BASE;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermKeyListener::KeyUp(nsIDOMEvent* aKeyEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// Handle KeyPress events (non control/alt modified key events)
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermKeyListener::KeyPress(nsIDOMEvent* aKeyEvent)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermKeyListener::KeyPress,50,("\n"));
|
||||
|
||||
nsCOMPtr<nsIDOMKeyEvent> keyEvent;
|
||||
keyEvent = do_QueryInterface(aKeyEvent);
|
||||
if (!keyEvent) {
|
||||
// Non-key event passed to keydown, do not consume it
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRUint32 keyCode;
|
||||
PRBool isShift, ctrlKey, altKey;
|
||||
if (NS_SUCCEEDED(keyEvent->GetKeyCode(&keyCode)) &&
|
||||
NS_SUCCEEDED(keyEvent->GetShiftKey(&isShift)) &&
|
||||
NS_SUCCEEDED(keyEvent->GetCtrlKey(&ctrlKey)) &&
|
||||
NS_SUCCEEDED(keyEvent->GetAltKey(&altKey)) ) {
|
||||
|
||||
PRUint32 keyChar = 0;
|
||||
result = keyEvent->GetCharCode(&keyChar);
|
||||
|
||||
XMLT_LOG(mozXMLTermKeyListener::KeyPress,52,
|
||||
("keyChar=0x%x, ctrlKey=%d, altKey=%d\n", keyChar, ctrlKey, altKey));
|
||||
|
||||
if (ctrlKey == PR_TRUE) {
|
||||
// Do nothing for Ctrl-Alt key events; just consume then
|
||||
|
||||
if (altKey == PR_FALSE) {
|
||||
// Control character, without Alt
|
||||
|
||||
if ((keyChar > 0) && (keyChar < U_SPACE)) {
|
||||
// Transmit valid non-null control character
|
||||
const PRUnichar temUString[] = {keyChar,0};
|
||||
nsAutoString keyString(temUString);
|
||||
result = mXMLTerminal->SendTextAux(keyString);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// Unmodified key event (including TAB/BACKSPACE/RETURN/LINEFEED)
|
||||
|
||||
if (keyChar == 0) {
|
||||
// Key that hasn't been mapped to a character code
|
||||
switch (keyCode) {
|
||||
case nsIDOMKeyEvent::DOM_VK_BACK_SPACE:
|
||||
case nsIDOMKeyEvent::DOM_VK_DELETE:
|
||||
keyChar = U_BACKSPACE;
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_TAB:
|
||||
keyChar = U_TAB;
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_RETURN:
|
||||
keyChar = U_LINEFEED;
|
||||
break;
|
||||
default: // ignore event without consuming
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
// Translate Carriage Return to LineFeed (may not be portable??)
|
||||
if (keyChar == U_CRETURN) keyChar = U_LINEFEED;
|
||||
|
||||
if ((keyChar > 0) && (keyChar <= 0xFFFDU)) {
|
||||
// Transmit valid non-null Unicode character
|
||||
const PRUnichar temUString[] = {keyChar,0};
|
||||
nsAutoString keyString(temUString);
|
||||
result = mXMLTerminal->SendTextAux(keyString);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Consume key press event
|
||||
return NS_ERROR_BASE;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTermTextListener implementation
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
mozXMLTermTextListener::mozXMLTermTextListener()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
mozXMLTermTextListener::~mozXMLTermTextListener()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ADDREF(mozXMLTermTextListener)
|
||||
|
||||
NS_IMPL_RELEASE(mozXMLTermTextListener)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermTextListener::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if (aIID.Equals(nsCOMTypeInfo<nsISupports>::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(nsIDOMTextListener*,this));
|
||||
|
||||
} else if (aIID.Equals(nsIDOMEventListener::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDOMEventListener*,this);
|
||||
|
||||
} else if (aIID.Equals(nsIDOMTextListener::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDOMTextListener*,this);
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_ADDREF_THIS();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermTextListener::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermTextListener::HandleText(nsIDOMEvent* aTextEvent)
|
||||
{
|
||||
nsCOMPtr<nsIPrivateTextEvent> textEvent (do_QueryInterface(aTextEvent));
|
||||
if (!textEvent) {
|
||||
// Soft failure
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
XMLT_LOG(mozXMLTermTextListener::HandleText,50,("\n"));
|
||||
|
||||
nsAutoString textStr;
|
||||
textEvent->GetText(textStr);
|
||||
|
||||
// Transmit text to terminal
|
||||
mXMLTerminal->SendTextAux(textStr);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTermMouseListener implementation
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
mozXMLTermMouseListener::mozXMLTermMouseListener()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
mozXMLTermMouseListener::~mozXMLTermMouseListener()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ADDREF(mozXMLTermMouseListener)
|
||||
|
||||
NS_IMPL_RELEASE(mozXMLTermMouseListener)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermMouseListener::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if (aIID.Equals(nsCOMTypeInfo<nsISupports>::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(nsIDOMMouseListener*,this));
|
||||
|
||||
} else if (aIID.Equals(nsIDOMEventListener::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDOMEventListener*,this);
|
||||
|
||||
} else if (aIID.Equals(nsIDOMMouseListener::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDOMMouseListener*,this);
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_ADDREF_THIS();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermMouseListener::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermMouseListener::MouseDown(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
if (!aMouseEvent)
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIDOMMouseEvent> mouseEvent;
|
||||
mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (!mouseEvent) {
|
||||
// Non-mouse event passed; do not consume it
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRUint16 buttonCode = 0;
|
||||
mouseEvent->GetButton(&buttonCode);
|
||||
|
||||
XMLT_LOG(mozXMLTermMouseListener::MouseDown,50,("buttonCode=%d\n",
|
||||
buttonCode));
|
||||
|
||||
if (buttonCode == 2) {
|
||||
// Middle-mouse button pressed; initiate paste
|
||||
mXMLTerminal->Paste();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermMouseListener::MouseUp(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermMouseListener::MouseClick(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermMouseListener::MouseDblClick(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermMouseListener::MouseOver(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermMouseListener::MouseOut(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTermDragListener implementation
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
mozXMLTermDragListener::mozXMLTermDragListener()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
mozXMLTermDragListener::~mozXMLTermDragListener()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ADDREF(mozXMLTermDragListener)
|
||||
|
||||
NS_IMPL_RELEASE(mozXMLTermDragListener)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermDragListener::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if (aIID.Equals(nsCOMTypeInfo<nsISupports>::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(nsIDOMDragListener*,this));
|
||||
|
||||
} else if (aIID.Equals(nsIDOMEventListener::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDOMEventListener*,this);
|
||||
|
||||
} else if (aIID.Equals(nsIDOMDragListener::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDOMDragListener*,this);
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_ADDREF_THIS();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermDragListener::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermDragListener::DragEnter(nsIDOMEvent* aDragEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermDragListener::DragOver(nsIDOMEvent* aDragEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermDragListener::DragExit(nsIDOMEvent* aDragEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermDragListener::DragDrop(nsIDOMEvent* aDragEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermDragListener::DragGesture(nsIDOMEvent* aDragEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
172
mozilla/extensions/xmlterm/base/mozXMLTermListeners.h
Normal file
172
mozilla/extensions/xmlterm/base/mozXMLTermListeners.h
Normal file
@@ -0,0 +1,172 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTermListeners.h: classes for key/text/mouse/drag event listeners
|
||||
// used by mozXMLTerminal:
|
||||
// mozXMLTermKeyListener
|
||||
// mozXMLTermTextListener
|
||||
// mozXMLTermMouseListener
|
||||
// mozXMLTermDragListener
|
||||
|
||||
|
||||
#ifndef mozXMLTermListeners_h__
|
||||
#define mozXMLTermListeners_h__
|
||||
|
||||
#include "nsIDOMEvent.h"
|
||||
#include "nsIDOMKeyListener.h"
|
||||
#include "nsIDOMTextListener.h"
|
||||
#include "nsIDOMMouseListener.h"
|
||||
#include "nsIDOMDragListener.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#include "mozIXMLTerminal.h"
|
||||
|
||||
/* XMLTerm Key Listener */
|
||||
class mozXMLTermKeyListener : public nsIDOMKeyListener {
|
||||
public:
|
||||
mozXMLTermKeyListener();
|
||||
virtual ~mozXMLTermKeyListener();
|
||||
|
||||
/** Save non-owning reference to containing XMLTerminal object
|
||||
* @param aXMLTerminal the XMLTerm instance
|
||||
*/
|
||||
void SetXMLTerminal(mozIXMLTerminal *aXMLTerminal)
|
||||
{mXMLTerminal = aXMLTerminal;}
|
||||
|
||||
// Interfaces for addref and release and queryinterface
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// nsIDOMEventListener interface
|
||||
virtual nsresult HandleEvent(nsIDOMEvent* aEvent);
|
||||
|
||||
// nsIDOMKeyListener interface
|
||||
virtual nsresult KeyDown(nsIDOMEvent* aKeyEvent);
|
||||
virtual nsresult KeyUp(nsIDOMEvent* aKeyEvent);
|
||||
virtual nsresult KeyPress(nsIDOMEvent* aKeyEvent);
|
||||
|
||||
protected:
|
||||
/** non-owning reference to containing XMLTerminal object (for callback) */
|
||||
mozIXMLTerminal* mXMLTerminal;
|
||||
};
|
||||
|
||||
|
||||
/* XMLTerm Text Listener */
|
||||
class mozXMLTermTextListener : public nsIDOMTextListener {
|
||||
public:
|
||||
mozXMLTermTextListener();
|
||||
virtual ~mozXMLTermTextListener();
|
||||
|
||||
/** Save non-owning reference to containing XMLTerminal object
|
||||
* @param aXMLTerminal the XMLTerm instance
|
||||
*/
|
||||
void SetXMLTerminal(mozIXMLTerminal *aXMLTerminal)
|
||||
{mXMLTerminal = aXMLTerminal;}
|
||||
|
||||
// Interfaces for addref and release and queryinterface
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// nsIDOMEventListener interface
|
||||
virtual nsresult HandleEvent(nsIDOMEvent* aEvent);
|
||||
|
||||
// nsIDOMTextListener interface
|
||||
virtual nsresult HandleText(nsIDOMEvent* aTextEvent);
|
||||
|
||||
protected:
|
||||
/** non-owning reference to containing XMLTerminal object (for callback) */
|
||||
mozIXMLTerminal* mXMLTerminal;
|
||||
};
|
||||
|
||||
|
||||
/* XMLTerm Mouse Listener */
|
||||
class mozXMLTermMouseListener : public nsIDOMMouseListener {
|
||||
public:
|
||||
mozXMLTermMouseListener();
|
||||
virtual ~mozXMLTermMouseListener();
|
||||
|
||||
/** Save non-owning reference to containing XMLTerminal object
|
||||
* @param aXMLTerminal the XMLTerm instance
|
||||
*/
|
||||
void SetXMLTerminal(mozIXMLTerminal *aXMLTerminal)
|
||||
{mXMLTerminal = aXMLTerminal;}
|
||||
|
||||
// Interfaces for addref and release and queryinterface
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// nsIDOMEventListener interface
|
||||
virtual nsresult HandleEvent(nsIDOMEvent* aEvent);
|
||||
|
||||
// nsIDOMMouseListener interface
|
||||
virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseUp(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseClick(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseDblClick(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseOver(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseOut(nsIDOMEvent* aMouseEvent);
|
||||
|
||||
protected:
|
||||
/** non-owning reference to containing XMLTerminal object (for callback) */
|
||||
mozIXMLTerminal* mXMLTerminal;
|
||||
};
|
||||
|
||||
|
||||
/* XMLTerm Drag Listener */
|
||||
class mozXMLTermDragListener : public nsIDOMDragListener {
|
||||
public:
|
||||
mozXMLTermDragListener();
|
||||
virtual ~mozXMLTermDragListener();
|
||||
|
||||
/** Save non-owning reference to containing XMLTerminal object
|
||||
* @param aXMLTerminal the XMLTerm instance
|
||||
*/
|
||||
void SetXMLTerminal(mozIXMLTerminal *aXMLTerminal)
|
||||
{mXMLTerminal = aXMLTerminal;}
|
||||
|
||||
// Interfaces for addref and release and queryinterface
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// nsIDOMEventListener interface
|
||||
virtual nsresult HandleEvent(nsIDOMEvent* aEvent);
|
||||
|
||||
// nsIDOMDragListener interface
|
||||
virtual nsresult DragEnter(nsIDOMEvent* aDragEvent);
|
||||
virtual nsresult DragOver(nsIDOMEvent* aDragEvent);
|
||||
virtual nsresult DragExit(nsIDOMEvent* aDragEvent);
|
||||
virtual nsresult DragDrop(nsIDOMEvent* aDragEvent);
|
||||
virtual nsresult DragGesture(nsIDOMEvent* aDragEvent);
|
||||
|
||||
protected:
|
||||
/** non-owning reference to containing XMLTerminal object (for callback) */
|
||||
mozIXMLTerminal* mXMLTerminal;
|
||||
};
|
||||
|
||||
|
||||
// Factory for XMLTermKeyListener
|
||||
extern nsresult NS_NewXMLTermKeyListener(nsIDOMEventListener** aInstancePtrResult, mozIXMLTerminal *aXMLTerminal);
|
||||
|
||||
// Factory for XMLTermTextListener
|
||||
extern nsresult NS_NewXMLTermTextListener(nsIDOMEventListener** aInstancePtrResult, mozIXMLTerminal *aXMLTerminal);
|
||||
|
||||
// Factory for XMLTermMouseListener
|
||||
extern nsresult NS_NewXMLTermMouseListener(nsIDOMEventListener** aInstancePtrResult, mozIXMLTerminal *aXMLTerminal);
|
||||
|
||||
// Factory for XMLTermDragListener
|
||||
extern nsresult NS_NewXMLTermDragListener(nsIDOMEventListener** aInstancePtrResult, mozIXMLTerminal *aXMLTerminal);
|
||||
|
||||
#endif //mozXMLTermListeners_h__
|
||||
2515
mozilla/extensions/xmlterm/base/mozXMLTermSession.cpp
Normal file
2515
mozilla/extensions/xmlterm/base/mozXMLTermSession.cpp
Normal file
File diff suppressed because it is too large
Load Diff
537
mozilla/extensions/xmlterm/base/mozXMLTermSession.h
Normal file
537
mozilla/extensions/xmlterm/base/mozXMLTermSession.h
Normal file
@@ -0,0 +1,537 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTermSession.h: class to manage session input/output display
|
||||
// NOTE: This class is getting too unwieldy. It should be modularized,
|
||||
// using a separate class for entries, for example, once the dust
|
||||
// settles.
|
||||
|
||||
#include "nscore.h"
|
||||
#include "prlog.h"
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
|
||||
#include "nsIContent.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
#include "mozILineTermAux.h"
|
||||
#include "mozIXMLTerminal.h"
|
||||
|
||||
|
||||
class mozXMLTermSession
|
||||
{
|
||||
public:
|
||||
|
||||
mozXMLTermSession();
|
||||
virtual ~mozXMLTermSession();
|
||||
|
||||
/** Initializes XMLterm session
|
||||
* @param aXMLTerminal containing XMLTerminal object
|
||||
* @param aPresShell presentation shell associated with XMLterm
|
||||
* @param aDOMDocument DOM document associated with XMLterm
|
||||
*/
|
||||
NS_IMETHOD Init(mozIXMLTerminal* aXMLTerminal,
|
||||
nsIPresShell* aPresShell,
|
||||
nsIDOMDocument* aDOMDocument);
|
||||
|
||||
/** Finalizes (closes) session
|
||||
*/
|
||||
NS_IMETHOD Finalize(void);
|
||||
|
||||
/** Preprocesses user input before it is transmitted to LineTerm
|
||||
* @param aString (inout) input data to be preprocessed
|
||||
* @param consumed (output) true if input data has been consumed
|
||||
*/
|
||||
NS_IMETHOD Preprocess(const nsString& aString, PRBool& consumed);
|
||||
|
||||
/** Reads all available data from LineTerm and displays it;
|
||||
* returns when no more data is available.
|
||||
* @param lineTermAux LineTermAux object to read data from
|
||||
*/
|
||||
NS_IMETHOD ReadAll(mozILineTermAux* lineTermAux);
|
||||
|
||||
/** Gets current entry (command) number
|
||||
* @param aNumber (output) current entry number
|
||||
*/
|
||||
NS_IMETHOD GetCurrentEntryNumber(PRInt32 *aNumber);
|
||||
|
||||
/** Gets command history buffer count
|
||||
* @param aHistory (output) history buffer count
|
||||
*/
|
||||
NS_IMETHOD GetHistory(PRInt32 *aHistory);
|
||||
|
||||
/** Sets command history buffer count
|
||||
* @param aHistory history buffer count
|
||||
*/
|
||||
NS_IMETHOD SetHistory(PRInt32 aHistory);
|
||||
|
||||
/** Gets prompt string
|
||||
* @param aPrompt (output) prompt string
|
||||
*/
|
||||
NS_IMETHOD GetPrompt(PRUnichar **aPrompt);
|
||||
|
||||
/** Sets prompt string
|
||||
* @param aPrompt prompt string
|
||||
*/
|
||||
NS_IMETHOD SetPrompt(const PRUnichar* aPrompt);
|
||||
|
||||
protected:
|
||||
|
||||
/** ShellML element type (see ShellML documentation),
|
||||
* implemented as CLASS attribute of HTML elements
|
||||
*/
|
||||
enum SessionElementType {
|
||||
SESSION_ELEMENT = 0,
|
||||
ENTRY_ELEMENT,
|
||||
INPUT_ELEMENT,
|
||||
OUTPUT_ELEMENT,
|
||||
PROMPT_ELEMENT,
|
||||
COMMAND_ELEMENT,
|
||||
STDIN_ELEMENT,
|
||||
STDOUT_ELEMENT,
|
||||
STDERR_ELEMENT,
|
||||
SESSION_ELEMENT_TYPES
|
||||
};
|
||||
|
||||
/** user-generated input event type */
|
||||
enum SessionEventType {
|
||||
CLICK_EVENT = 0,
|
||||
DBLCLICK_EVENT,
|
||||
SESSION_EVENT_TYPES
|
||||
};
|
||||
|
||||
/** display style of output */
|
||||
enum OutputDisplayType {
|
||||
NO_NODE = 0,
|
||||
PRE_STDOUT_NODE,
|
||||
PRE_STDERR_NODE,
|
||||
SPAN_STDOUT_NODE,
|
||||
SPAN_STDERR_NODE,
|
||||
SPAN_MIXED_NODE,
|
||||
OUTPUT_DISPLAY_TYPES
|
||||
};
|
||||
|
||||
/** markup style of output */
|
||||
enum OutputMarkupType {
|
||||
PLAIN_TEXT = 0,
|
||||
HTML_FRAGMENT,
|
||||
HTML_DOCUMENT,
|
||||
XML_DOCUMENT
|
||||
};
|
||||
|
||||
/** settings for automatic markup detection */
|
||||
enum AutoDetectOption {
|
||||
NO_MARKUP = 0,
|
||||
FIRST_LINE,
|
||||
ANY_LINE
|
||||
};
|
||||
|
||||
/** type of output flush action */
|
||||
enum FlushActionType {
|
||||
DISPLAY_INCOMPLETE_FLUSH = 0,
|
||||
SPLIT_INCOMPLETE_FLUSH,
|
||||
CLEAR_INCOMPLETE_FLUSH,
|
||||
CLOSE_INCOMPLETE_FLUSH
|
||||
};
|
||||
|
||||
/** type of currently active meta command */
|
||||
enum MetaCommandType {
|
||||
NO_META_COMMAND = 0,
|
||||
STREAM_META_COMMAND,
|
||||
HTTP_META_COMMAND,
|
||||
LS_META_COMMAND,
|
||||
TREE_META_COMMAND,
|
||||
META_COMMAND_TYPES
|
||||
};
|
||||
|
||||
/** file type for directory display (TEMPORARY) */
|
||||
enum FileType {
|
||||
PLAIN_FILE = 0,
|
||||
DIRECTORY_FILE,
|
||||
EXECUTABLE_FILE,
|
||||
FILE_TYPES
|
||||
};
|
||||
|
||||
/** action code for navigating XMLterm DOM document */
|
||||
enum TreeActionCode {
|
||||
TREE_MOVE_UP = 1,
|
||||
TREE_MOVE_DOWN = 2,
|
||||
TREE_MOVE_LEFT = 3,
|
||||
TREE_MOVE_RIGHT = 4,
|
||||
TREE_PRINT_ATTS = 5,
|
||||
TREE_PRINT_HTML = 6,
|
||||
TREE_ACTION_CODES = 7
|
||||
};
|
||||
|
||||
/** Displays ("echoes") input text string with style and positions cursor
|
||||
* @param aString string to be displayed
|
||||
* @param aStyle style values for string (see lineterm.h)
|
||||
* @param cursorCol cursor column
|
||||
*/
|
||||
NS_IMETHOD DisplayInput(const nsString& aString,
|
||||
const nsString& aStyle,
|
||||
PRInt32 cursorCol);
|
||||
|
||||
/** Autodetects markup in current output line
|
||||
* @param aString string to be displayed
|
||||
* @param aStyle style values for string (see lineterm.h)
|
||||
* @param firstOutputLine true if this is the first output line
|
||||
*/
|
||||
NS_IMETHOD AutoDetectMarkup(const nsString& aString,
|
||||
const nsString& aStyle,
|
||||
PRBool firstOutputLine);
|
||||
|
||||
/** Initializes display of stream output with specified markup type
|
||||
* @param streamURL effective URL of stream output
|
||||
* @param streamMarkupType stream markup stype
|
||||
*/
|
||||
NS_IMETHOD InitStream(const nsString& streamURL,
|
||||
OutputMarkupType streamMarkupType);
|
||||
|
||||
/** Breaks output display by flushing and deleting incomplete lines */
|
||||
NS_IMETHOD BreakOutput(void);
|
||||
|
||||
/** Processes output string with specified style
|
||||
* @param aString string to be processed
|
||||
* @param aStyle style values for string (see lineterm.h)
|
||||
* (if it is a null string, STDOUT style is assumed)
|
||||
* @param newline true if this is a complete line of output
|
||||
* @param streamOutput true if string represents stream output
|
||||
*/
|
||||
NS_IMETHOD ProcessOutput(const nsString& aString,
|
||||
const nsString& aStyle,
|
||||
PRBool newline,
|
||||
PRBool streamOutput);
|
||||
|
||||
/** Appends text string to output buffer
|
||||
* (appended text may need to be flushed for it to be actually displayed)
|
||||
* @param aString string to be processed
|
||||
* @param aStyle style values for string (see lineterm.h)
|
||||
* (if it is a null string, STDOUT style is assumed)
|
||||
* @param newline true if this is a complete line of output
|
||||
*/
|
||||
NS_IMETHOD AppendOutput(const nsString& aString,
|
||||
const nsString& aStyle,
|
||||
PRBool newline);
|
||||
|
||||
/** Adds markup to LS output (TEMPORARY)
|
||||
* @param aString string to be processed
|
||||
* @param aStyle style values for string (see lineterm.h)
|
||||
* (if it is a null string, STDOUT style is assumed)
|
||||
*/
|
||||
NS_IMETHOD AppendLineLS(const nsString& aString,
|
||||
const nsString& aStyle);
|
||||
|
||||
/** Inserts HTML fragment string as child of parentNode, before specified
|
||||
* child node, or after the last child node
|
||||
* @param aString HTML fragment string to be inserted
|
||||
* @param parentNode parent node for HTML fragment
|
||||
* @param entryNumber entry number (default value = -1)
|
||||
* (if entryNumber >= 0, all '#' characters in aString
|
||||
* are substituted by entryNumber)
|
||||
* @param beforeNode child node before which to insert fragment;
|
||||
* if null, insert after last child node
|
||||
* (default value is null)
|
||||
* @param replace if true, replace beforeNode with inserted fragment
|
||||
* (default value is false)
|
||||
*/
|
||||
NS_IMETHOD InsertFragment(const nsString& aString,
|
||||
nsCOMPtr<nsIDOMNode>& parentNode,
|
||||
PRInt32 entryNumber = -1,
|
||||
nsIDOMNode* beforeNode = nsnull,
|
||||
PRBool replace = false);
|
||||
|
||||
/** Deep refresh of selected attributes for DOM elements
|
||||
* (WORKAROUND for inserting HTML fragments properly)
|
||||
* @param domNode DOM node of branch to be refreshed
|
||||
* @param entryNumber entry number (default value = -1)
|
||||
* (if entryNumber >= 0, all '#' characters in event
|
||||
* handler scripts are substituted by entryNumber)
|
||||
*/
|
||||
NS_IMETHOD DeepRefreshAttributes(nsCOMPtr<nsIDOMNode>& domNode,
|
||||
PRInt32 entryNumber = -1);
|
||||
|
||||
/** Forces display of data in output buffer
|
||||
* @param flushAction type of flush action: display, split-off, clear, or
|
||||
* close incomplete lines
|
||||
*/
|
||||
NS_IMETHOD FlushOutput(FlushActionType flushAction);
|
||||
|
||||
/** Scrolls document to align bottom and left margin with screen */
|
||||
NS_IMETHOD ScrollBottomLeft(void);
|
||||
|
||||
/** Create a DIV element with attributes NAME="preface", CLASS="preface",
|
||||
* and ID="preface0", containing an empty text node, and append it as a
|
||||
* child of the main BODY element. Also make it the current display element.
|
||||
*/
|
||||
NS_IMETHOD NewPreface(void);
|
||||
|
||||
/** Create and append a new DIV element with attributes NAME="entry",
|
||||
* CLASS="entry", and ID="entry#" as the last child of the main BODY element,
|
||||
* where "#" denotes the new entry number obtained by incrementing the
|
||||
* current entry number.
|
||||
* Inside the entry element, create a DIV element with attributes
|
||||
* NAME="input", CLASS="input", and ID="input#" containing two elements,
|
||||
* named "prompt" and "command", each containing a text node.
|
||||
* Insert the supplied prompt string into the prompt element's text node.
|
||||
* @param aPrompt prompt string to be inserted into prompt element
|
||||
*/
|
||||
NS_IMETHOD NewEntry(const nsString& aPrompt);
|
||||
|
||||
/** Append a BR element as the next child of specified parent.
|
||||
* @param parentNode parent node for BR element
|
||||
*/
|
||||
NS_IMETHOD NewBreak(nsIDOMNode* parentNode);
|
||||
|
||||
/** Creates an empty block element with tag name tagName with attributes
|
||||
* NAME="name", CLASS="name", and ID="name#", and appends it as a child of
|
||||
* the specified parent. ("#" denotes the specified number)
|
||||
* Also create an empty text node inside the new block element.
|
||||
* @param tagName tag name of element
|
||||
* @param name name and class of element
|
||||
* (If zero-length string, then no attributes are set)
|
||||
* @param number numeric suffix for element ID
|
||||
* (If < 0, no ID attribute is defined)
|
||||
* @param parentNode parent node for element
|
||||
* @param blockNode (output) block-level DOM node for created element
|
||||
* @param textNode (output) child text DOM node of element
|
||||
*/
|
||||
NS_IMETHOD NewElementWithText(const nsString& tagName,
|
||||
const nsString& name, PRInt32 number,
|
||||
nsIDOMNode* parentNode,
|
||||
nsCOMPtr<nsIDOMNode>& blockNode,
|
||||
nsCOMPtr<nsIDOMNode>& textNode);
|
||||
|
||||
/** Creates an empty anchor (A) element with tag name tagName with attributes
|
||||
* CLASS="classAttribute", and ID="classAttribute#", and appends it as a
|
||||
* child of the specified parent. ("#" denotes the specified number)
|
||||
* @param classAttribute class attribute of anchor element
|
||||
* (If zero-length string, then no attributes are set)
|
||||
* @param number numeric suffix for element ID
|
||||
* (If < 0, no ID attribute is defined)
|
||||
* @param parentNode parent node for element
|
||||
* @param anchorNode (output) DOM node for created anchor element
|
||||
*/
|
||||
NS_IMETHOD NewAnchor(const nsString& classAttribute,
|
||||
PRInt32 number,
|
||||
nsIDOMNode* parentNode,
|
||||
nsCOMPtr<nsIDOMNode>& anchorNode);
|
||||
|
||||
/** Creates an empty block element with tag name tagName with attributes
|
||||
* NAME="name", CLASS="name", and ID="name#", and appends it as a child of
|
||||
* the specified parent. ("#" denotes the specified number)
|
||||
* @param tagName tag name of element
|
||||
* @param name name and class of element
|
||||
* (If zero-length string, then no attributes are set)
|
||||
* @param number numeric suffix for element ID
|
||||
* (If < 0, no ID attribute is defined)
|
||||
* @param parentNode parent node for element
|
||||
* @param blockNode (output) block-level DOM node for created element
|
||||
*/
|
||||
NS_IMETHOD NewElement(const nsString& tagName,
|
||||
const nsString& name, PRInt32 number,
|
||||
nsIDOMNode* parentNode,
|
||||
nsCOMPtr<nsIDOMNode>& blockNode);
|
||||
|
||||
/** Creates a new DOM text node, and appends it as a child of the
|
||||
* specified parent.
|
||||
* @param parentNode parent node for element
|
||||
* @param textNode (output) created text DOM node
|
||||
*/
|
||||
NS_IMETHOD NewTextNode( nsIDOMNode* parentNode,
|
||||
nsCOMPtr<nsIDOMNode>& textNode);
|
||||
|
||||
/** Add event attributes (onclick, ondblclick, ...) to DOM node
|
||||
* @param name name of DOM node (supplied as argument to the event handler)
|
||||
* @param number entry number (supplied as argument to the event handler)
|
||||
* @param domNode DOM node to be modified
|
||||
*/
|
||||
NS_IMETHOD SetEventAttributes(const nsString& name,
|
||||
PRInt32 number,
|
||||
nsCOMPtr<nsIDOMNode>& domNode);
|
||||
|
||||
/** Sets text content of a DOM node to supplied string
|
||||
* @param textNode DOM text node to be modified
|
||||
* @param aString string to be inserted
|
||||
*/
|
||||
NS_IMETHOD SetDOMText(nsCOMPtr<nsIDOMNode>& textNode,
|
||||
const nsString& aString);
|
||||
|
||||
/** Checks if node is a text node
|
||||
* @param aNode DOM node to be checked
|
||||
* @return true if node is a text node
|
||||
*/
|
||||
PRBool IsTextNode(nsIDOMNode *aNode);
|
||||
|
||||
/** Checks if node is a text, span, or anchor node
|
||||
* (i.e., allowed inside a PRE element)
|
||||
* @param aNode DOM node to be checked
|
||||
* @return true if node is a text, span or anchor node
|
||||
*/
|
||||
PRBool IsPREInlineNode(nsIDOMNode* aNode);
|
||||
|
||||
/** Serializes DOM node and its content as an HTML fragment string
|
||||
* @param aNode DOM node to be serialized
|
||||
* @param indentString indentation prefix string
|
||||
* @param htmlString (output) serialized HTML fragment
|
||||
* @param deepContent if true, serialize children of node as well
|
||||
* (defaults to false)
|
||||
* @param insidePREnode set to true if aNode is embedded inside a PRE node
|
||||
* control formatting
|
||||
* (defaults to false)
|
||||
*/
|
||||
NS_IMETHOD ToHTMLString(nsIDOMNode* aNode,
|
||||
nsString& indentString,
|
||||
nsString& htmlString,
|
||||
PRBool deepContent = false,
|
||||
PRBool insidePRENode = false);
|
||||
|
||||
/** Implements the "tree:" meta command to traverse DOM tree
|
||||
* @param fileStream file stream for displaying tree traversal output
|
||||
* @param rootNode root node of DOM tree
|
||||
* @param currentNode current node for traversal
|
||||
* @param treeActionCode traversal action type
|
||||
*/
|
||||
void TraverseDOMTree(FILE* fileStream,
|
||||
nsIDOMNode* rootNode,
|
||||
nsCOMPtr<nsIDOMNode>& currentNode,
|
||||
TreeActionCode treeActionCode);
|
||||
|
||||
/** names of session elements */
|
||||
static const char* const sessionElementNames[SESSION_ELEMENT_TYPES];
|
||||
|
||||
/** names of session events */
|
||||
static const char* const sessionEventNames[SESSION_EVENT_TYPES];
|
||||
|
||||
/** names of meta commands */
|
||||
static const char* const metaCommandNames[META_COMMAND_TYPES];
|
||||
|
||||
/** names of file types (TEMPORARY) */
|
||||
static const char* const fileTypeNames[FILE_TYPES];
|
||||
|
||||
/** names of tree traversal action types */
|
||||
static const char* const treeActionNames[TREE_ACTION_CODES];
|
||||
|
||||
/** object initialization flag */
|
||||
PRBool mInitialized;
|
||||
|
||||
|
||||
/** non-owning reference to containing XMLTerminal object */
|
||||
mozIXMLTerminal* mXMLTerminal; // non-owning reference
|
||||
|
||||
/** non-owning reference to presentation shell associated with XMLterm */
|
||||
nsIPresShell* mPresShell; // non-owning reference (??)
|
||||
|
||||
/** non-owning reference to DOM document containing XMLterm */
|
||||
nsIDOMDocument* mDOMDocument; // non-owning reference (??)
|
||||
|
||||
|
||||
/** BODY node of document containing XMLterm */
|
||||
nsCOMPtr<nsIDOMNode> mBodyNode;
|
||||
|
||||
/** XMLterm session node */
|
||||
nsCOMPtr<nsIDOMNode> mSessionNode;
|
||||
|
||||
/** current debug node (TEMPORARY; used for tree traversal) */
|
||||
nsCOMPtr<nsIDOMNode> mCurrentDebugNode;
|
||||
|
||||
|
||||
/** starting entry node in the history list */
|
||||
nsCOMPtr<nsIDOMNode> mStartEntryNode;
|
||||
|
||||
/** current (and last) entry node in the history list */
|
||||
nsCOMPtr<nsIDOMNode> mCurrentEntryNode;
|
||||
|
||||
/** maximum number of commands allowed to be saved in history list */
|
||||
PRInt32 mMaxHistory;
|
||||
|
||||
/** entry number of first entry in history list */
|
||||
PRInt32 mStartEntryNumber;
|
||||
|
||||
/** entry number of current entry */
|
||||
PRInt32 mCurrentEntryNumber;
|
||||
|
||||
/** flag indicating whether current entry has output data */
|
||||
PRBool mEntryHasOutput;
|
||||
|
||||
/** span node for current command prompt (is this necessary?) */
|
||||
nsCOMPtr<nsIDOMNode> mPromptSpanNode;
|
||||
|
||||
/** span node for current command input (is this necessary?) */
|
||||
nsCOMPtr<nsIDOMNode> mCommandSpanNode;
|
||||
|
||||
/** text node for current command input (is this necessary?) */
|
||||
nsCOMPtr<nsIDOMNode> mInputTextNode;
|
||||
|
||||
|
||||
/** block-level node for current command output */
|
||||
nsCOMPtr<nsIDOMNode> mOutputBlockNode;
|
||||
|
||||
/** current display element node for command output */
|
||||
nsCOMPtr<nsIDOMNode> mOutputDisplayNode;
|
||||
|
||||
/** current text node for command output */
|
||||
nsCOMPtr<nsIDOMNode> mOutputTextNode;
|
||||
|
||||
|
||||
/** currently active meta command (if any) */
|
||||
MetaCommandType mMetaCommandType;
|
||||
|
||||
|
||||
/** currently active display style of output */
|
||||
OutputDisplayType mOutputDisplayType;
|
||||
|
||||
|
||||
/** currently active markup style of output */
|
||||
OutputMarkupType mOutputMarkupType;
|
||||
|
||||
/** currently active setting for automatic markup detection */
|
||||
AutoDetectOption mAutoDetect;
|
||||
|
||||
|
||||
/** flag indicating whether a line break needs to be output */
|
||||
PRBool mLineBreakNeeded;
|
||||
|
||||
/** flag marking the first line of output */
|
||||
PRBool mFirstOutputLine;
|
||||
|
||||
|
||||
/** buffer for incomplete line of PRE text */
|
||||
nsString mPreTextIncomplete;
|
||||
|
||||
/** buffer for complete lines of PRE text */
|
||||
nsString mPreTextBuffered;
|
||||
|
||||
/** copy of PRE text already displayed */
|
||||
nsString mPreTextDisplayed;
|
||||
|
||||
|
||||
/** prompt string (HTML) */
|
||||
nsString mPromptHTML;
|
||||
|
||||
/** buffer for HTML/XML fragment streams */
|
||||
nsString mFragmentBuffer;
|
||||
|
||||
};
|
||||
326
mozilla/extensions/xmlterm/base/mozXMLTermShell.cpp
Normal file
326
mozilla/extensions/xmlterm/base/mozXMLTermShell.cpp
Normal file
@@ -0,0 +1,326 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTermShell.cpp: implementation of mozIXMLTermShell
|
||||
// providing an XPCONNECT wrapper to the XMLTerminal interface,
|
||||
// thus allowing easy (and controlled) access from scripts
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsIDocumentViewer.h"
|
||||
#include "nsIDocument.h"
|
||||
|
||||
#include "nsIWebShell.h"
|
||||
#include "nsIWebShellWindow.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsIPresContext.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
|
||||
#include "nsIServiceManager.h"
|
||||
|
||||
#include "nsIAppShellService.h"
|
||||
#include "nsAppShellCIDs.h"
|
||||
#include "nsAppCoresCIDs.h"
|
||||
|
||||
#include "nsIDOMToolkitCore.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIDOMSelection.h"
|
||||
#include "nsIDOMWindow.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
#include "mozXMLTermShell.h"
|
||||
|
||||
// Define Class IDs
|
||||
static NS_DEFINE_IID(kAppShellServiceCID, NS_APPSHELL_SERVICE_CID);
|
||||
static NS_DEFINE_CID(kToolkitCoreCID, NS_TOOLKITCORE_CID);
|
||||
|
||||
// Define Interface IDs
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTermShell factory
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsresult
|
||||
NS_NewXMLTermShell(mozIXMLTermShell** aXMLTermShell)
|
||||
{
|
||||
NS_PRECONDITION(aXMLTermShell != nsnull, "null ptr");
|
||||
if (! aXMLTermShell)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aXMLTermShell = new mozXMLTermShell();
|
||||
if (! *aXMLTermShell)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(*aXMLTermShell);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTermShell implementation
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
mozXMLTermShell::mozXMLTermShell() :
|
||||
mInitialized(PR_FALSE),
|
||||
mContentWindow(nsnull),
|
||||
mContentAreaWebShell(nsnull),
|
||||
mXMLTerminal(nsnull)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
mozXMLTermShell::~mozXMLTermShell()
|
||||
{
|
||||
if (mInitialized) {
|
||||
Finalize();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Implement AddRef and Release
|
||||
NS_IMPL_ADDREF(mozXMLTermShell)
|
||||
NS_IMPL_RELEASE(mozXMLTermShell)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermShell::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if ( aIID.Equals(kISupportsIID)) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(mozIXMLTermShell*,this));
|
||||
|
||||
} else if ( aIID.Equals(mozIXMLTermShell::GetIID()) ) {
|
||||
*aInstancePtr = NS_STATIC_CAST(mozIXMLTermShell*,this);
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_ADDREF_THIS();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTermShell::GetCurrentEntryNumber(PRInt32 *aNumber)
|
||||
{
|
||||
if (mXMLTerminal) {
|
||||
return mXMLTerminal->GetCurrentEntryNumber(aNumber);
|
||||
} else {
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTermShell::GetHistory(PRInt32 *aHistory)
|
||||
{
|
||||
if (mXMLTerminal) {
|
||||
return mXMLTerminal->GetHistory(aHistory);
|
||||
} else {
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTermShell::SetHistory(PRInt32 aHistory)
|
||||
{
|
||||
if (mXMLTerminal) {
|
||||
return mXMLTerminal->SetHistory(aHistory);
|
||||
} else {
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTermShell::GetPrompt(PRUnichar **aPrompt)
|
||||
{
|
||||
if (mXMLTerminal) {
|
||||
return mXMLTerminal->GetPrompt(aPrompt);
|
||||
} else {
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTermShell::SetPrompt(const PRUnichar* aPrompt)
|
||||
{
|
||||
if (mXMLTerminal) {
|
||||
return mXMLTerminal->SetPrompt(aPrompt);
|
||||
} else {
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Initialize XMLTermShell
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermShell::Init(nsIDOMWindow* aContentWin,
|
||||
const PRUnichar* URL,
|
||||
const PRUnichar* args)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermShell::Init,10,("\n"));
|
||||
|
||||
if (mInitialized)
|
||||
return NS_ERROR_ALREADY_INITIALIZED;
|
||||
|
||||
if (!aContentWin)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
mContentWindow = aContentWin; // no addref
|
||||
|
||||
nsCOMPtr<nsIScriptGlobalObject> globalObj = do_QueryInterface(mContentWindow,
|
||||
&result);
|
||||
if (NS_FAILED(result) || !globalObj)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIWebShell> webShell;
|
||||
globalObj->GetWebShell(getter_AddRefs(webShell));
|
||||
if (!webShell)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
mContentAreaWebShell = webShell; // SVN: does this assignment addref?
|
||||
|
||||
// Create XMLTerminal
|
||||
nsCOMPtr<mozIXMLTerminal> newXMLTerminal;
|
||||
result = NS_NewXMLTerminal(getter_AddRefs(newXMLTerminal));
|
||||
|
||||
if(!newXMLTerminal)
|
||||
result = NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
// Initialize XMLTerminal with non-owning reference to us
|
||||
result = newXMLTerminal->Init(mContentAreaWebShell, this, URL, args);
|
||||
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
mXMLTerminal = newXMLTerminal;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// De-initialize XMLTermShell and free resources
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermShell::Finalize(void)
|
||||
{
|
||||
XMLT_LOG(mozXMLTermShell::Finalize,10,("\n"));
|
||||
|
||||
if (mXMLTerminal) {
|
||||
// Finalize and release reference to XMLTerm object owned by us
|
||||
mXMLTerminal->Finalize();
|
||||
mXMLTerminal = nsnull;
|
||||
}
|
||||
|
||||
mContentAreaWebShell = nsnull;
|
||||
mContentWindow = nsnull;
|
||||
|
||||
mInitialized = PR_FALSE;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// Poll for readable data from XMLTerminal
|
||||
NS_IMETHODIMP mozXMLTermShell::Poll(void)
|
||||
{
|
||||
if (!mXMLTerminal)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
return mXMLTerminal->Poll();
|
||||
}
|
||||
|
||||
|
||||
// Send string to LineTerm as if the user had typed it
|
||||
NS_IMETHODIMP mozXMLTermShell::SendText(const PRUnichar* buf,
|
||||
const PRUnichar* cookie)
|
||||
{
|
||||
if (!mXMLTerminal)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsAutoString sendStr (buf);
|
||||
|
||||
XMLT_LOG(mozXMLTermShell::SendText,10,("length=%d\n", sendStr.Length()));
|
||||
|
||||
return mXMLTerminal->SendText(sendStr, cookie);
|
||||
}
|
||||
|
||||
|
||||
// Create new XMLTerm window with specified argument string
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermShell::NewXMLTermWindow(const PRUnichar* args)
|
||||
{
|
||||
nsresult result = NS_OK;
|
||||
|
||||
XMLT_LOG(mozXMLTermShell::NewXMLTermWindow,10,("\n"));
|
||||
|
||||
// Create the toolkit core instance...
|
||||
nsIDOMToolkitCore* toolkit = nsnull;
|
||||
result = nsServiceManager::GetService(kToolkitCoreCID,
|
||||
nsIDOMToolkitCore::GetIID(),
|
||||
(nsISupports**)&toolkit);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
nsAutoString argStr (args);
|
||||
toolkit->ShowWindowWithArgs( "chrome://xmlterm/content/XMLTermFrame.xul",
|
||||
nsnull, argStr );
|
||||
|
||||
/* Release the toolkit... */
|
||||
if (nsnull != toolkit) {
|
||||
nsServiceManager::ReleaseService(kToolkitCoreCID, toolkit);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// Exit XMLTerm window
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermShell::Exit()
|
||||
{
|
||||
nsIAppShellService* appShell = nsnull;
|
||||
|
||||
XMLT_LOG(mozXMLTermShell::Exit,10,("\n"));
|
||||
|
||||
// Create the Application Shell instance...
|
||||
nsresult result = nsServiceManager::GetService(kAppShellServiceCID,
|
||||
nsIAppShellService::GetIID(),
|
||||
(nsISupports**)&appShell);
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
appShell->Shutdown();
|
||||
nsServiceManager::ReleaseService(kAppShellServiceCID, appShell);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
81
mozilla/extensions/xmlterm/base/mozXMLTermShell.h
Normal file
81
mozilla/extensions/xmlterm/base/mozXMLTermShell.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTermShell.h: declaration of mozXMLTermShell
|
||||
// which implements mozIXMLTermShell, providing an XPCONNECT wrapper
|
||||
// to the XMLTerminal interface, thus allowing easy (and controlled)
|
||||
// access from scripts
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nspr.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
#include "mozIXMLTerminal.h"
|
||||
#include "mozIXMLTermShell.h"
|
||||
|
||||
|
||||
class mozXMLTermShell : public mozIXMLTermShell {
|
||||
public:
|
||||
|
||||
mozXMLTermShell();
|
||||
virtual ~mozXMLTermShell();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// mozIXMLTermShell interface
|
||||
|
||||
NS_IMETHOD GetCurrentEntryNumber(PRInt32 *aNumber);
|
||||
|
||||
NS_IMETHOD GetHistory(PRInt32 *aHistory);
|
||||
NS_IMETHOD SetHistory(PRInt32 aHistory);
|
||||
NS_IMETHOD GetPrompt(PRUnichar **aPrompt);
|
||||
NS_IMETHOD SetPrompt(const PRUnichar* aPrompt);
|
||||
|
||||
NS_IMETHOD Init(nsIDOMWindow* aContentWin,
|
||||
const PRUnichar* URL,
|
||||
const PRUnichar* args);
|
||||
|
||||
NS_IMETHOD Finalize(void);
|
||||
NS_IMETHOD Poll(void);
|
||||
|
||||
NS_IMETHOD SendText(const PRUnichar* buf, const PRUnichar* cookie);
|
||||
|
||||
NS_IMETHOD NewXMLTermWindow(const PRUnichar* args);
|
||||
|
||||
NS_IMETHOD Exit(void);
|
||||
|
||||
protected:
|
||||
|
||||
/** object initialization flag */
|
||||
PRBool mInitialized;
|
||||
|
||||
/** non-owning reference to content window for XMLterm */
|
||||
nsIDOMWindow* mContentWindow;
|
||||
|
||||
/** non-owning reference (??) to web shell for content window */
|
||||
nsIWebShell* mContentAreaWebShell;
|
||||
|
||||
/** owning reference to XMLTerminal object created by us */
|
||||
nsCOMPtr<mozIXMLTerminal> mXMLTerminal;
|
||||
};
|
||||
568
mozilla/extensions/xmlterm/base/mozXMLTermStream.cpp
Normal file
568
mozilla/extensions/xmlterm/base/mozXMLTermStream.cpp
Normal file
@@ -0,0 +1,568 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTermStream.cpp: implementation of mozIXMLTermStream
|
||||
// to display HTML/XML streams as documents
|
||||
|
||||
#include "nscore.h"
|
||||
#include "prlog.h"
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsIAllocator.h"
|
||||
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIIOService.h"
|
||||
#include "nsIDocumentLoader.h"
|
||||
#include "nsIContentViewer.h"
|
||||
#include "nsIDocumentViewer.h"
|
||||
#include "nsIPresContext.h"
|
||||
#include "nsIPresShell.h"
|
||||
|
||||
#include "nsIViewManager.h"
|
||||
#include "nsIScrollableView.h"
|
||||
#include "nsIDeviceContext.h"
|
||||
#include "nsIFrame.h"
|
||||
|
||||
#include "nsIScriptContextOwner.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
|
||||
#include "nsIDOMWindow.h"
|
||||
#include "nsIDOMWindowCollection.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsIDOMNodeList.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIDOMHTMLDocument.h"
|
||||
#include "nsIDocument.h"
|
||||
|
||||
#include "nsIURL.h"
|
||||
#include "nsNeckoUtil.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
#include "mozXMLTermUtils.h"
|
||||
#include "mozXMLTermStream.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTermStream factory
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsresult
|
||||
NS_NewXMLTermStream(mozIXMLTermStream** aXMLTermStream)
|
||||
{
|
||||
NS_PRECONDITION(aXMLTermStream != nsnull, "null ptr");
|
||||
if (!aXMLTermStream)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aXMLTermStream = new mozXMLTermStream();
|
||||
if (! *aXMLTermStream)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(*aXMLTermStream);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTermStream implementation
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
|
||||
|
||||
mozXMLTermStream::mozXMLTermStream() :
|
||||
mUTF8Buffer(""),
|
||||
mUTF8Offset(0),
|
||||
mMaxResizeHeight(0),
|
||||
mDOMWindow( nsnull ),
|
||||
mDOMIFrameElement( nsnull ),
|
||||
mContext( nsnull ),
|
||||
mLoadGroup( nsnull ),
|
||||
mChannel( nsnull ),
|
||||
mStreamListener( nsnull )
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
mozXMLTermStream::~mozXMLTermStream()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// Implement AddRef and Release
|
||||
NS_IMPL_ADDREF(mozXMLTermStream)
|
||||
NS_IMPL_RELEASE(mozXMLTermStream)
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTermStream::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if ( aIID.Equals(NS_GET_IID(nsISupports))) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(mozIXMLTermStream*,this));
|
||||
|
||||
} else if(aIID.Equals(NS_GET_IID(nsIBaseStream))) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIBaseStream*,this);
|
||||
|
||||
} else if(aIID.Equals(NS_GET_IID(nsIInputStream))) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIInputStream*,this);
|
||||
|
||||
} else if(aIID.Equals(NS_GET_IID(mozIXMLTermStream))) {
|
||||
*aInstancePtr = NS_STATIC_CAST(mozIXMLTermStream*,this);
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_ADDREF_THIS();
|
||||
|
||||
XMLT_LOG(mozXMLTermStream::QueryInterface,20,("mRefCnt = %d\n", mRefCnt));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// mozIXMLTermStream interface
|
||||
|
||||
/** Open stream in specified frame, or in current frame if frameName is null
|
||||
* @param aDOMWindow parent window
|
||||
* @param frameName name of child frame in which to display stream, or null
|
||||
* to display in parent window
|
||||
* @param contentURL URL of stream content
|
||||
* @param contentType MIME type of stream content
|
||||
* @param maxResizeHeight maximum resize height (0=> do not resize)
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_IMETHODIMP mozXMLTermStream::Open(nsIDOMWindow* aDOMWindow,
|
||||
const char* frameName,
|
||||
const char* contentURL,
|
||||
const char* contentType,
|
||||
PRInt32 maxResizeHeight)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermStream::Open,20,("contentURL=%s, contentType=%s\n",
|
||||
contentURL, contentType));
|
||||
|
||||
mMaxResizeHeight = maxResizeHeight;
|
||||
|
||||
if (frameName && (strlen(frameName) > 0)) {
|
||||
// Open stream in named subframe of current frame
|
||||
XMLT_LOG(mozXMLTermStream::Open,22,("frameName=%s\n", frameName));
|
||||
|
||||
nsAutoString innerFrameName = frameName;
|
||||
|
||||
// Get DOM IFRAME element
|
||||
nsCOMPtr<nsIDOMDocument> domDoc;
|
||||
result = aDOMWindow->GetDocument(getter_AddRefs(domDoc));
|
||||
if (NS_FAILED(result) || !domDoc)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIDOMHTMLDocument> domHTMLDoc = do_QueryInterface(domDoc);
|
||||
if (!domHTMLDoc)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIDOMNodeList> nodeList;
|
||||
result = domHTMLDoc->GetElementsByName(innerFrameName,
|
||||
getter_AddRefs(nodeList));
|
||||
if (NS_FAILED(result) || !nodeList)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
PRUint32 count;
|
||||
nodeList->GetLength(&count);
|
||||
PR_ASSERT(count==1);
|
||||
|
||||
nsCOMPtr<nsIDOMNode> domNode;
|
||||
result = nodeList->Item(0, getter_AddRefs(domNode));
|
||||
if (NS_FAILED(result) || !domNode)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
mDOMIFrameElement = do_QueryInterface(domNode);
|
||||
if (!mDOMIFrameElement)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Ensure that it is indeed an IFRAME element
|
||||
nsAutoString tagName;
|
||||
result = mDOMIFrameElement->GetTagName(tagName);
|
||||
if (NS_FAILED(result))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (!tagName.EqualsIgnoreCase("iframe"))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (mMaxResizeHeight > 0) {
|
||||
// Set initial IFRAME size to be as wide as the window, but very short
|
||||
nsAutoString attWidth = "width";
|
||||
nsAutoString valWidth = "100%";
|
||||
mDOMIFrameElement->SetAttribute(attWidth,valWidth);
|
||||
|
||||
nsAutoString attHeight = "height";
|
||||
nsAutoString valHeight = "10";
|
||||
mDOMIFrameElement->SetAttribute(attHeight,valHeight);
|
||||
}
|
||||
|
||||
// Get inner DOM window by looking up the frames list
|
||||
nsCOMPtr<nsIDOMWindow> innerDOMWindow;
|
||||
result = mozXMLTermUtils::GetInnerDOMWindow(aDOMWindow, innerFrameName,
|
||||
getter_AddRefs(innerDOMWindow));
|
||||
if (NS_FAILED(result) || !innerDOMWindow)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
mDOMWindow = innerDOMWindow;
|
||||
|
||||
} else {
|
||||
// Open stream in current frame
|
||||
mDOMIFrameElement = nsnull;
|
||||
mDOMWindow = aDOMWindow;
|
||||
}
|
||||
|
||||
// Get webshell for DOM window
|
||||
nsCOMPtr<nsIWebShell> webShell;
|
||||
result = mozXMLTermUtils::ConvertDOMWindowToWebShell(mDOMWindow,
|
||||
getter_AddRefs(webShell));
|
||||
if (NS_FAILED(result) || !webShell)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
NS_WITH_SERVICE(nsIIOService, ioService, kIOServiceCID, &result);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
nsCOMPtr<nsIInputStream> inputStream = this;
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
result = NS_NewURI(getter_AddRefs(uri), contentURL, nsnull);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
result = NS_NewLoadGroup(nsnull, nsnull, nsnull, getter_AddRefs(mLoadGroup));
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
PRInt32 contentLength = 1024; // ??? What's this length
|
||||
result = ioService->NewInputStreamChannel(uri, contentType, contentLength,
|
||||
inputStream, mLoadGroup, nsnull,
|
||||
getter_AddRefs(mChannel));
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
// Determine Class ID for viewing specified mimetype
|
||||
nsCID classID;
|
||||
static const char command[] = "view";
|
||||
nsCAutoString progID = NS_DOCUMENT_LOADER_FACTORY_PROGID_PREFIX;
|
||||
progID += command;
|
||||
progID += "/";
|
||||
progID += contentType;
|
||||
|
||||
result = nsComponentManager::ProgIDToCLSID(progID.GetBuffer(),
|
||||
&classID);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
nsCOMPtr<nsIDocumentLoaderFactory> docLoaderFactory;
|
||||
result = nsComponentManager::CreateInstance(classID, nsnull,
|
||||
NS_GET_IID(nsIDocumentLoaderFactory),
|
||||
getter_AddRefs(docLoaderFactory));
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
nsCOMPtr<nsIContentViewer> contentViewer;
|
||||
result = docLoaderFactory->CreateInstance(command,
|
||||
mChannel,
|
||||
mLoadGroup,
|
||||
contentType,
|
||||
webShell,
|
||||
nsnull,
|
||||
getter_AddRefs(mStreamListener),
|
||||
getter_AddRefs(contentViewer) );
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
nsCOMPtr<nsIContentViewerContainer> contViewContainer =
|
||||
do_QueryInterface(webShell);
|
||||
result = contentViewer->SetContainer(contViewContainer);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
result = webShell->Embed(contentViewer, command, (nsISupports*) nsnull);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
result = mStreamListener->OnStartRequest(mChannel, mContext);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
XMLT_LOG(mozXMLTermStream::Open,21,("returning\n"));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// nsIBaseStream interface
|
||||
NS_IMETHODIMP mozXMLTermStream::Close(void)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermStream::Close,20,("\n"));
|
||||
|
||||
mUTF8Buffer = "";
|
||||
mUTF8Offset = 0;
|
||||
|
||||
PRUint32 sourceOffset = 0;
|
||||
PRUint32 count = 0;
|
||||
result = mStreamListener->OnDataAvailable(mChannel, mContext,
|
||||
this, sourceOffset, count);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
nsresult status = NS_OK;
|
||||
nsAutoString errorMsg = "";
|
||||
result = mStreamListener->OnStopRequest(mChannel, mContext,
|
||||
status, errorMsg.GetUnicode());
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
if (mMaxResizeHeight && mDOMIFrameElement) {
|
||||
// Size frame to content
|
||||
result = SizeToContentHeight(mMaxResizeHeight);
|
||||
}
|
||||
mMaxResizeHeight = 0;
|
||||
|
||||
// Release interfaces etc
|
||||
mDOMWindow = nsnull;
|
||||
mDOMIFrameElement = nsnull;
|
||||
mContext = nsnull;
|
||||
mLoadGroup = nsnull;
|
||||
mChannel = nsnull;
|
||||
mStreamListener = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Adjusts height of frame displaying stream to fit content
|
||||
* @param maxHeight maximum height of resized frame (pixels)
|
||||
* (zero value implies no maximum)
|
||||
*/
|
||||
NS_IMETHODIMP mozXMLTermStream::SizeToContentHeight(PRInt32 maxHeight)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
// Get webshell
|
||||
nsCOMPtr<nsIWebShell> webShell;
|
||||
result = mozXMLTermUtils::ConvertDOMWindowToWebShell(mDOMWindow,
|
||||
getter_AddRefs(webShell));
|
||||
if (NS_FAILED(result) || !webShell)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Get pres context
|
||||
nsCOMPtr<nsIPresContext> presContext;
|
||||
result = mozXMLTermUtils::GetWebShellPresContext(webShell,
|
||||
getter_AddRefs(presContext));
|
||||
if (NS_FAILED(result) || !presContext)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Get scrollable view
|
||||
nsCOMPtr<nsIScrollableView> scrollableView;
|
||||
result = mozXMLTermUtils::GetPresContextScrollableView(presContext,
|
||||
getter_AddRefs(scrollableView));
|
||||
if (NS_FAILED(result) || !scrollableView)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Get device context
|
||||
nsCOMPtr<nsIDeviceContext> deviceContext;
|
||||
result = mozXMLTermUtils::GetPresContextDeviceContext(presContext,
|
||||
getter_AddRefs(deviceContext));
|
||||
if (NS_FAILED(result) || !deviceContext)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Determine twips to pixels conversion factor
|
||||
float pixelScale;
|
||||
presContext->GetTwipsToPixels(&pixelScale);
|
||||
|
||||
// Get scrollbar dimensions in pixels
|
||||
float sbWidth, sbHeight;
|
||||
deviceContext->GetScrollBarDimensions(sbWidth, sbHeight);
|
||||
PRInt32 scrollBarWidth = PRInt32(sbWidth*pixelScale);
|
||||
PRInt32 scrollBarHeight = PRInt32(sbHeight*pixelScale);
|
||||
|
||||
// Determine webshell size in pixels
|
||||
PRInt32 shellX, shellY, shellWidth, shellHeight;
|
||||
result = webShell->GetBounds(shellX, shellY, shellWidth, shellHeight);
|
||||
|
||||
// Determine page size in pixels
|
||||
nscoord contX, contY;
|
||||
scrollableView->GetContainerSize(&contX, &contY);
|
||||
|
||||
PRInt32 pageWidth, pageHeight;
|
||||
pageWidth = PRInt32((float)contX*pixelScale);
|
||||
pageHeight = PRInt32((float)contY*pixelScale);
|
||||
|
||||
printf("mozXMLTermStream::SizeToContentHeight: scrollbar %d, %d\n",
|
||||
scrollBarWidth, scrollBarHeight);
|
||||
|
||||
printf("mozXMLTermStream::SizeToContentHeight: shell %d, %d\n",
|
||||
shellWidth, shellHeight);
|
||||
|
||||
printf("mozXMLTermStream::SizeToContentHeight: page %d, %d, %e\n",
|
||||
pageWidth, pageHeight, pixelScale);
|
||||
|
||||
if ((pageHeight > shellHeight) || (pageWidth > shellWidth)) {
|
||||
// Page larger than webshell
|
||||
nsAutoString attHeight = "height";
|
||||
nsAutoString attWidth = "width";
|
||||
nsAutoString attValue = "";
|
||||
|
||||
PRInt32 newPageHeight = pageHeight;
|
||||
PRInt32 excessWidth = (pageWidth+scrollBarWidth - shellWidth);
|
||||
|
||||
printf("mozXMLTermStream::SizeToContentHeight: excessWidth %d\n",
|
||||
excessWidth);
|
||||
|
||||
if (excessWidth > 0) {
|
||||
// Widen IFRAME beyond page width by scrollbar width
|
||||
attValue = "";
|
||||
attValue.Append(shellWidth+scrollBarWidth);
|
||||
mDOMIFrameElement->SetAttribute(attWidth,attValue);
|
||||
|
||||
// Recompute page dimensions
|
||||
scrollableView->GetContainerSize(&contX, &contY);
|
||||
pageWidth = PRInt32((float)contX*pixelScale);
|
||||
pageHeight = PRInt32((float)contY*pixelScale);
|
||||
|
||||
newPageHeight = pageHeight;
|
||||
if (excessWidth > scrollBarWidth)
|
||||
newPageHeight += scrollBarHeight;
|
||||
|
||||
printf("mozXMLTermStream::SizeToContentHeight: page2 %d, %d, %d\n",
|
||||
pageWidth, pageHeight, newPageHeight);
|
||||
|
||||
// Reset IFRAME width
|
||||
attValue = "";
|
||||
attValue.Append(shellWidth);
|
||||
mDOMIFrameElement->SetAttribute(attWidth,attValue);
|
||||
}
|
||||
|
||||
// Resize IFRAME height to match page height (subject to a maximum)
|
||||
if (newPageHeight > maxHeight) newPageHeight = maxHeight;
|
||||
attValue = "";
|
||||
attValue.Append(newPageHeight);
|
||||
mDOMIFrameElement->SetAttribute(attHeight,attValue);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// nsIInputStream interface
|
||||
NS_IMETHODIMP mozXMLTermStream::Available(PRUint32 *_retval)
|
||||
{
|
||||
if (!_retval)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*_retval = mUTF8Buffer.Length() - mUTF8Offset;
|
||||
|
||||
XMLT_LOG(mozXMLTermStream::Available,60,("retval=%d\n", *_retval));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTermStream::Read(char* buf, PRUint32 count,
|
||||
PRUint32* _retval)
|
||||
{
|
||||
XMLT_LOG(mozXMLTermStream::Read,60,("count=%d\n", count));
|
||||
|
||||
if (!_retval)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
PR_ASSERT(mUTF8Buffer.Length() >= mUTF8Offset);
|
||||
|
||||
PRUint32 remCount = mUTF8Buffer.Length() - mUTF8Offset;
|
||||
|
||||
if (remCount == 0) {
|
||||
// Empty buffer
|
||||
*_retval = 0;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (count >= remCount) {
|
||||
// Return entire remaining buffer
|
||||
*_retval = remCount;
|
||||
|
||||
} else {
|
||||
// Return only portion of buffer
|
||||
*_retval = count;
|
||||
}
|
||||
|
||||
// Copy portion of string
|
||||
mUTF8Buffer.ToCString(buf, *_retval, mUTF8Offset);
|
||||
|
||||
mUTF8Offset += *_retval;
|
||||
|
||||
XMLT_LOG(mozXMLTermStream::Read,61,("*retval=%d\n", *_retval));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Write Unicode string to stream (blocks until write is completed)
|
||||
* @param buf string to write
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_IMETHODIMP mozXMLTermStream::Write(const PRUnichar* buf)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermStream::Write,50,("\n"));
|
||||
|
||||
if (!buf)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsAutoString strBuf ( buf );
|
||||
|
||||
// Convert Unicode string to UTF8 and store in buffer
|
||||
char* utf8Str = strBuf.ToNewUTF8String();
|
||||
mUTF8Buffer = utf8Str;
|
||||
nsAllocator::Free(utf8Str);
|
||||
|
||||
mUTF8Offset = 0;
|
||||
|
||||
PRUint32 sourceOffset = 0;
|
||||
|
||||
while (mUTF8Offset < mUTF8Buffer.Length()) {
|
||||
PRUint32 remCount = mUTF8Buffer.Length() - mUTF8Offset;
|
||||
result = mStreamListener->OnDataAvailable(mChannel, mContext,
|
||||
this, sourceOffset, remCount);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
}
|
||||
|
||||
XMLT_LOG(mozXMLTermStream::Write,51,("returning mUTF8Offset=%d\n",
|
||||
mUTF8Offset));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
96
mozilla/extensions/xmlterm/base/mozXMLTermStream.h
Normal file
96
mozilla/extensions/xmlterm/base/mozXMLTermStream.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTermStream.h: declaration of mozXMLTermStream
|
||||
// which implements the mozIXMLTermStream interface
|
||||
// to display HTML/XML streams as documents
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nspr.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
#include "mozIXMLTermStream.h"
|
||||
|
||||
class mozXMLTermStream : public mozIXMLTermStream
|
||||
{
|
||||
public:
|
||||
|
||||
mozXMLTermStream();
|
||||
virtual ~mozXMLTermStream();
|
||||
|
||||
// nsISupports interface
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// nsIInputStream interface
|
||||
NS_IMETHOD Close(void);
|
||||
|
||||
NS_IMETHOD Available(PRUint32 *_retval);
|
||||
NS_IMETHOD Read(char * buf, PRUint32 count, PRUint32 *_retval);
|
||||
|
||||
// mozIXMLTermStream interface
|
||||
|
||||
// Open stream in specified frame, or in current frame if frameName is null
|
||||
NS_IMETHOD Open(nsIDOMWindow* aDOMWindow,
|
||||
const char* frameName,
|
||||
const char* contentURL,
|
||||
const char* contentType,
|
||||
PRInt32 maxResizeHeight);
|
||||
|
||||
// Write Unicode string to stream
|
||||
NS_IMETHOD Write(const PRUnichar* buf);
|
||||
|
||||
protected:
|
||||
|
||||
/** Adjusts height of frame displaying stream to fit content
|
||||
* @param maxHeight maximum height of resized frame (pixels)
|
||||
* (zero value implies no maximum)
|
||||
*/
|
||||
NS_IMETHOD SizeToContentHeight(PRInt32 maxHeight);
|
||||
|
||||
/** UTF8 data buffer to hold to be read by rendering engine */
|
||||
nsCString mUTF8Buffer;
|
||||
|
||||
/** offset at which to start reading the UTF8 data buffer */
|
||||
PRInt32 mUTF8Offset;
|
||||
|
||||
/** maximum frame height for resizing */
|
||||
PRInt32 mMaxResizeHeight;
|
||||
|
||||
/** DOM window in which to display stream */
|
||||
nsCOMPtr<nsIDOMWindow> mDOMWindow;
|
||||
|
||||
/** Frame element in which to display stream */
|
||||
nsCOMPtr<nsIDOMElement> mDOMIFrameElement;
|
||||
|
||||
/** Context for stream display (what's this??) */
|
||||
nsCOMPtr<nsISupports> mContext;
|
||||
|
||||
/** Load group for stream display (what's this??) */
|
||||
nsCOMPtr<nsILoadGroup> mLoadGroup;
|
||||
|
||||
/** Channel for stream display (what's this??) */
|
||||
nsCOMPtr<nsIChannel> mChannel;
|
||||
|
||||
/** Stream listener object */
|
||||
nsCOMPtr<nsIStreamListener> mStreamListener;
|
||||
};
|
||||
|
||||
454
mozilla/extensions/xmlterm/base/mozXMLTermUtils.cpp
Normal file
454
mozilla/extensions/xmlterm/base/mozXMLTermUtils.cpp
Normal file
@@ -0,0 +1,454 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTermUtils.cpp: XMLTerm utilities implementation
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nspr.h"
|
||||
#include "prlog.h"
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsIContentViewer.h"
|
||||
#include "nsIDocumentViewer.h"
|
||||
#include "nsIPresContext.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsIDeviceContext.h"
|
||||
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsIScriptContext.h"
|
||||
#include "nsIScriptContextOwner.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
#include "nsIDOMWindowCollection.h"
|
||||
#include "nsIDocument.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
#include "mozXMLTermUtils.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/** Gets presentation context for web shell
|
||||
* @param aWebShell web shell
|
||||
* @param aPresContext returned presentation context
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_EXPORT nsresult
|
||||
mozXMLTermUtils::GetWebShellPresContext(nsIWebShell* aWebShell,
|
||||
nsIPresContext** aPresContext)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermUtils::GetWebShellPresContext,30,("\n"));
|
||||
|
||||
if (!aPresContext)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*aPresContext = nsnull;
|
||||
|
||||
nsCOMPtr<nsIContentViewer> contViewer;
|
||||
result = aWebShell->GetContentViewer(getter_AddRefs(contViewer));
|
||||
if (NS_FAILED(result) || !contViewer)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIDocumentViewer> docViewer;
|
||||
result = contViewer->QueryInterface(NS_GET_IID(nsIDocumentViewer),
|
||||
(void**)getter_AddRefs(docViewer));
|
||||
if (NS_FAILED(result) || !docViewer)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIPresContext> presContext;
|
||||
result = docViewer->GetPresContext(*getter_AddRefs(presContext));
|
||||
if (NS_FAILED(result) || !presContext)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*aPresContext = presContext.get();
|
||||
NS_ADDREF(*aPresContext);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Gets DOM document for web shell
|
||||
* @param aWebShell web shell
|
||||
* @param aDOMDocument returned DOM document
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_EXPORT nsresult
|
||||
mozXMLTermUtils::GetWebShellDOMDocument(nsIWebShell* aWebShell,
|
||||
nsIDOMDocument** aDOMDocument)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermUtils::GetWebShellDOMDocument,30,("\n"));
|
||||
|
||||
if (!aDOMDocument)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*aDOMDocument = nsnull;
|
||||
|
||||
nsCOMPtr<nsIContentViewer> contViewer;
|
||||
result = aWebShell->GetContentViewer(getter_AddRefs(contViewer));
|
||||
if (NS_FAILED(result) || !contViewer)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIDocumentViewer> docViewer;
|
||||
result = contViewer->QueryInterface(NS_GET_IID(nsIDocumentViewer),
|
||||
(void**)getter_AddRefs(docViewer));
|
||||
if (NS_FAILED(result) || !docViewer)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIDocument> document;
|
||||
result = docViewer->GetDocument(*getter_AddRefs(document));
|
||||
|
||||
if (NS_FAILED(result) || !document)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIDOMDocument> domDocument = do_QueryInterface(document);
|
||||
if (!domDocument)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*aDOMDocument = domDocument.get();
|
||||
NS_ADDREF(*aDOMDocument);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Gets DOM window for web shell
|
||||
* @param aWebShell web shell
|
||||
* @param aDOMWindow returned DOM window (frame)
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_EXPORT nsresult
|
||||
mozXMLTermUtils::ConvertWebShellToDOMWindow(nsIWebShell* aWebShell,
|
||||
nsIDOMWindow** aDOMWindow)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermUtils::ConvertWebShellToDOMWindow,30,("\n"));
|
||||
|
||||
if (!aDOMWindow)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*aDOMWindow = nsnull;
|
||||
|
||||
nsCOMPtr<nsIScriptContextOwner> scriptContextOwner =
|
||||
do_QueryInterface(aWebShell);
|
||||
if (!scriptContextOwner)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIScriptGlobalObject> scriptGlobalObject;
|
||||
result = scriptContextOwner->GetScriptGlobalObject(getter_AddRefs(scriptGlobalObject));
|
||||
|
||||
if (NS_FAILED(result) || !scriptGlobalObject)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIDOMWindow> domWindow = do_QueryInterface(scriptGlobalObject);
|
||||
if (!domWindow)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*aDOMWindow = domWindow.get();
|
||||
NS_ADDREF(*aDOMWindow);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Gets web shell for DOM window
|
||||
* @param aDOMWindow DOM window (frame)
|
||||
* @param aWebShell returned web shell
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_EXPORT nsresult
|
||||
mozXMLTermUtils::ConvertDOMWindowToWebShell(nsIDOMWindow* aDOMWindow,
|
||||
nsIWebShell** aWebShell)
|
||||
{
|
||||
XMLT_LOG(mozXMLTermUtils::ConvertDOMWindowToWebShell,30,("\n"));
|
||||
|
||||
nsCOMPtr<nsIScriptGlobalObject> globalObject = do_QueryInterface(aDOMWindow);
|
||||
if (!globalObject)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
globalObject->GetWebShell(aWebShell);
|
||||
|
||||
if (!*aWebShell)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Locates named inner DOM window (frame) inside outer DOM window
|
||||
* @param outerDOMWindow outer DOM window (frame)
|
||||
* @param innerFrameName name of inner frame to be returned
|
||||
* @param innerDOMWindow returned inner DOM window (frame)
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_EXPORT nsresult
|
||||
mozXMLTermUtils::GetInnerDOMWindow(nsIDOMWindow* outerDOMWindow,
|
||||
const nsString& innerFrameName,
|
||||
nsIDOMWindow** innerDOMWindow)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermUtils::GetInnerDOMWindow,30,("\n"));
|
||||
|
||||
nsCOMPtr<nsIDOMWindowCollection> innerDOMWindowList;
|
||||
result = outerDOMWindow->GetFrames(getter_AddRefs(innerDOMWindowList));
|
||||
if (NS_FAILED(result) || !innerDOMWindowList)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
PRUint32 frameCount = 0;
|
||||
result = innerDOMWindowList->GetLength(&frameCount);
|
||||
XMLT_LOG(mozXMLTermUtils::GetInnerDOMWindow,31,("frameCount=%d\n",
|
||||
frameCount));
|
||||
|
||||
result = innerDOMWindowList->NamedItem(innerFrameName, innerDOMWindow);
|
||||
if (NS_FAILED(result) || !*innerDOMWindow)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Gets the scrollable view for presentation context
|
||||
* @param aPresContext presentation context
|
||||
* @param aScrollableView returned scrollable view
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_EXPORT nsresult
|
||||
mozXMLTermUtils::GetPresContextScrollableView(nsIPresContext* aPresContext,
|
||||
nsIScrollableView** aScrollableView)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermUtils::GetPresContextScrollableView,30,("\n"));
|
||||
|
||||
if (!aScrollableView)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*aScrollableView = nsnull;
|
||||
|
||||
nsCOMPtr<nsIPresShell> presShell;
|
||||
result = aPresContext->GetShell(getter_AddRefs(presShell));
|
||||
if (NS_FAILED(result) || !presShell)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIViewManager> viewManager;
|
||||
result = presShell->GetViewManager(getter_AddRefs(viewManager));
|
||||
if (NS_FAILED(result) || !viewManager)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return viewManager->GetRootScrollableView(aScrollableView);
|
||||
}
|
||||
|
||||
|
||||
/** Gets the device context for presentation context
|
||||
* @param aPresContext presentation context
|
||||
* @param aDeviceContext returned device context
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_EXPORT nsresult
|
||||
mozXMLTermUtils::GetPresContextDeviceContext(nsIPresContext* aPresContext,
|
||||
nsIDeviceContext** aDeviceContext)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermUtils::GetPresContextScrollableView,30,("\n"));
|
||||
|
||||
if (!aDeviceContext)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*aDeviceContext = nsnull;
|
||||
|
||||
nsCOMPtr<nsIPresShell> presShell;
|
||||
result = aPresContext->GetShell(getter_AddRefs(presShell));
|
||||
if (NS_FAILED(result) || !presShell)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIViewManager> viewManager;
|
||||
result = presShell->GetViewManager(getter_AddRefs(viewManager));
|
||||
if (NS_FAILED(result) || !viewManager)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIDeviceContext> deviceContext;
|
||||
result = viewManager->GetDeviceContext(*getter_AddRefs(deviceContext));
|
||||
if (NS_FAILED(result) || !deviceContext)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
*aDeviceContext = deviceContext.get();
|
||||
NS_ADDREF(*aDeviceContext);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Gets the script context for document
|
||||
* @param aDOMDocument document providing context
|
||||
* @param aScriptContext returned script context
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_EXPORT nsresult
|
||||
mozXMLTermUtils::GetScriptContext(nsIDOMDocument* aDOMDocument,
|
||||
nsIScriptContext** aScriptContext)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermUtils::GetScriptContext,20,("\n"));
|
||||
|
||||
nsCOMPtr<nsIDocument> doc ( do_QueryInterface(aDOMDocument) );
|
||||
if (!doc)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIScriptGlobalObject> scriptGlobalObject;
|
||||
result = doc->GetScriptGlobalObject(getter_AddRefs(scriptGlobalObject));
|
||||
|
||||
if (NS_FAILED(result) || !scriptGlobalObject)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return scriptGlobalObject->GetContext(aScriptContext);
|
||||
}
|
||||
|
||||
|
||||
/** Executes script in specified document's context.
|
||||
* @param aDOMDocument document providing context for script execution
|
||||
* @param aScript string to be executed
|
||||
* @param aOutput output string produced by script execution
|
||||
* @return NS_OK if script was valid and got executed properly
|
||||
*/
|
||||
NS_EXPORT nsresult
|
||||
mozXMLTermUtils::ExecuteScript(nsIDOMDocument* aDOMDocument,
|
||||
const nsString& aScript,
|
||||
nsString& aOutput)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
XMLT_LOG(mozXMLTermUtils::ExecuteScript,20,("\n"));
|
||||
|
||||
// Get document principal
|
||||
nsCOMPtr<nsIDocument> doc = do_QueryInterface(aDOMDocument);
|
||||
if (!doc)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIPrincipal> docPrincipal=dont_AddRef(doc->GetDocumentPrincipal());
|
||||
|
||||
// Get document script context
|
||||
nsCOMPtr<nsIScriptContext> scriptContext;
|
||||
result = GetScriptContext(aDOMDocument, getter_AddRefs(scriptContext));
|
||||
if (NS_FAILED(result) || !scriptContext)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Execute script
|
||||
PRBool isUndefined = PR_FALSE;
|
||||
nsString outputString = "";
|
||||
const char* URL = "";
|
||||
const char* version = "";
|
||||
result = scriptContext-> EvaluateString(aScript, (void *) nsnull,
|
||||
docPrincipal, URL, 0, version,
|
||||
aOutput, &isUndefined);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/** Returns a timestamp string containing the local time, if at least
|
||||
* deltaSec seconds have elapsed since the last timestamp. Otherwise,
|
||||
* a null string is returned.
|
||||
* @param deltaSec minimum elapsed seconds since last timestamp (>=0)
|
||||
* @param lastTime in/out parameter containing time of last timestamp
|
||||
* @param aTimeStamp returned timestamp string
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_IMETHODIMP mozXMLTermUtils::TimeStamp(PRInt32 deltaSec, PRTime& lastTime,
|
||||
nsString& aTimeStamp)
|
||||
{
|
||||
static const PRInt32 DATE_LEN = 19;
|
||||
PRTime deltaTime ;
|
||||
char dateStr[DATE_LEN+1];
|
||||
PRTime curTime, difTime;
|
||||
|
||||
curTime = PR_Now();
|
||||
LL_SUB(difTime, curTime, lastTime);
|
||||
|
||||
LL_I2L(deltaTime, deltaSec*1000000);
|
||||
if (LL_CMP(difTime, <, deltaTime)) {
|
||||
// Not enough time has elapsed for a new time stamp
|
||||
aTimeStamp = "";
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
lastTime = curTime;
|
||||
|
||||
// Current local time
|
||||
PRExplodedTime localTime;
|
||||
PR_ExplodeTime(curTime, PR_LocalTimeParameters, &localTime);
|
||||
|
||||
PRInt32 nWritten = PR_snprintf(dateStr, DATE_LEN+1,
|
||||
"%02d:%02d:%02d %02d/%02d/%04d",
|
||||
localTime.tm_hour, localTime.tm_min, localTime.tm_sec,
|
||||
localTime.tm_mday, localTime.tm_month+1, localTime.tm_year);
|
||||
|
||||
if (nWritten != DATE_LEN)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
XMLT_LOG(mozXMLTermUtils::LocalTime,99,("localTime=%s\n", dateStr));
|
||||
|
||||
aTimeStamp = dateStr;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Returns a string containing a 11-digit random cookie based upon the
|
||||
* current local time and the elapsed execution of the program.
|
||||
* @param aCookie returned cookie string
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
NS_IMETHODIMP mozXMLTermUtils::RandomCookie(nsString& aCookie)
|
||||
{
|
||||
// Current local time
|
||||
PRExplodedTime localTime;
|
||||
PR_ExplodeTime(PR_Now(), PR_LocalTimeParameters, &localTime);
|
||||
|
||||
PRInt32 randomNumberA = localTime.tm_sec*1000000+localTime.tm_usec;
|
||||
PRIntervalTime randomNumberB = PR_IntervalNow();
|
||||
|
||||
XMLT_LOG(mozXMLTermUtils::RandomCookie,30,("ranA=0x%x, ranB=0x%x\n",
|
||||
randomNumberA, randomNumberB));
|
||||
PR_ASSERT(randomNumberA >= 0);
|
||||
PR_ASSERT(randomNumberB >= 0);
|
||||
|
||||
static const char cookieDigits[17] = "0123456789abcdef";
|
||||
char cookie[12];
|
||||
int j;
|
||||
|
||||
for (j=0; j<6; j++) {
|
||||
cookie[j] = cookieDigits[randomNumberA%16];
|
||||
randomNumberA = randomNumberA/16;
|
||||
}
|
||||
for (j=6; j<11; j++) {
|
||||
cookie[j] = cookieDigits[randomNumberB%16];
|
||||
randomNumberB = randomNumberB/16;
|
||||
}
|
||||
cookie[11] = '\0';
|
||||
|
||||
aCookie = cookie;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
145
mozilla/extensions/xmlterm/base/mozXMLTermUtils.h
Normal file
145
mozilla/extensions/xmlterm/base/mozXMLTermUtils.h
Normal file
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTermUtils.h: XMLTerm utilities header
|
||||
|
||||
#ifndef _MOZXMLTERMUTILS_H
|
||||
|
||||
#define _MOZXMLTERMUTILS_H 1
|
||||
|
||||
#include "nscore.h"
|
||||
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsIWebShell.h"
|
||||
#include "nsIDOMWindow.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
|
||||
class mozXMLTermUtils
|
||||
{
|
||||
public:
|
||||
/** Gets presentation context for web shell
|
||||
* @param aWebShell web shell
|
||||
* @param aPresContext returned presentation context
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
GetWebShellPresContext(nsIWebShell* aWebShell,
|
||||
nsIPresContext** aPresContext);
|
||||
|
||||
/** Gets DOM document for web shell
|
||||
* @param aWebShell web shell
|
||||
* @param aDOMDocument returned DOM document
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
GetWebShellDOMDocument(nsIWebShell* aWebShell,
|
||||
nsIDOMDocument** aDOMDocument);
|
||||
|
||||
/** Gets DOM window for web shell
|
||||
* @param aWebShell web shell
|
||||
* @param aDOMWindow returned DOM window (frame)
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
ConvertWebShellToDOMWindow(nsIWebShell* aWebShell,
|
||||
nsIDOMWindow** aDOMWindow);
|
||||
|
||||
/** Gets web shell for DOM window
|
||||
* @param aDOMWindow DOM window (frame)
|
||||
* @param aWebShell returned web shell
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
ConvertDOMWindowToWebShell(nsIDOMWindow* aDOMWindow,
|
||||
nsIWebShell** aWebShell);
|
||||
|
||||
/** Locates named inner DOM window (frame) inside outer DOM window
|
||||
* @param outerDOMWindow outer DOM window (frame)
|
||||
* @param innerFrameName name of inner frame to be returned
|
||||
* @param innerDOMWindow returned inner DOM window (frame)
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
GetInnerDOMWindow(nsIDOMWindow* outerDOMWindow,
|
||||
const nsString& innerFrameName,
|
||||
nsIDOMWindow** innerDOMWindow);
|
||||
|
||||
/** Gets the scrollable view for presentation context
|
||||
* @param aPresContext presentation context
|
||||
* @param aScrollableView returned scrollable view
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
GetPresContextScrollableView(nsIPresContext* aPresContext,
|
||||
nsIScrollableView** aScrollableView);
|
||||
|
||||
/** Gets the device context for presentation context
|
||||
* @param aPresContext presentation context
|
||||
* @param aDeviceContext returned device context
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
GetPresContextDeviceContext(nsIPresContext* aPresContext,
|
||||
nsIDeviceContext** aDeviceContext);
|
||||
|
||||
/** Gets the script context for document
|
||||
* @param aDOMDocument document providing context
|
||||
* @param aScriptContext returned script context
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
GetScriptContext(nsIDOMDocument* aDOMDocument,
|
||||
nsIScriptContext** aScriptContext);
|
||||
|
||||
/** Executes script in specified document's context.
|
||||
* @param aDOMDocument document providing context for script execution
|
||||
* @param aScript string to be executed
|
||||
* @param aOutput output string produced by script execution
|
||||
* @return NS_OK if script was valid and got executed properly
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
ExecuteScript(nsIDOMDocument* aDOMDocument,
|
||||
const nsString& aScript,
|
||||
nsString& aOutput);
|
||||
|
||||
/** Returns a timestamp string containing the local time, if at least
|
||||
* deltaSec seconds have elapsed since the last timestamp. Otherwise,
|
||||
* a null string is returned.
|
||||
* @param deltaSec minimum elapsed seconds since last timestamp (>=0)
|
||||
* @param lastTime in/out parameter containing time of last timestamp
|
||||
* @param aTimeStamp returned timestamp string
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
TimeStamp(PRInt32 deltaSec, PRTime& lastTime,
|
||||
nsString& aTimeStamp);
|
||||
|
||||
/** Returns a string containing a 11-digit random cookie based upon the
|
||||
* current local time and the elapsed execution of the program.
|
||||
* @param aCookie returned cookie string
|
||||
* @return NS_OK on success
|
||||
*/
|
||||
static NS_EXPORT nsresult
|
||||
RandomCookie(nsString& aCookie);
|
||||
|
||||
};
|
||||
|
||||
#endif /* _MOZXMLTERMUTILS_H */
|
||||
770
mozilla/extensions/xmlterm/base/mozXMLTerminal.cpp
Normal file
770
mozilla/extensions/xmlterm/base/mozXMLTerminal.cpp
Normal file
@@ -0,0 +1,770 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTerminal.cpp: implementation of mozIXMLTerminal interface
|
||||
// to manage all XMLTerm operations.
|
||||
// Creates a new mozXMLTermSession object to manage session input/output.
|
||||
// Creates a mozLineTermAux object to access LineTerm operations.
|
||||
// Creates key/text/mouse/drag listener objects to handle user events.
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nspr.h"
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIDOMHTMLDocument.h"
|
||||
#include "nsIDocumentViewer.h"
|
||||
#include "nsIDocumentLoaderObserver.h"
|
||||
#include "nsIObserver.h"
|
||||
|
||||
#include "nsIPresContext.h"
|
||||
|
||||
#include "nsIDOMEventReceiver.h"
|
||||
#include "nsIDOMEventListener.h"
|
||||
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsISupportsPrimitives.h"
|
||||
|
||||
#include "nsWidgetsCID.h"
|
||||
#include "nsIClipboard.h"
|
||||
#include "nsITransferable.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
#include "mozXMLTermUtils.h"
|
||||
#include "mozXMLTerminal.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
|
||||
static NS_DEFINE_IID(kIXMLTerminalIID, MOZIXMLTERMINAL_IID);
|
||||
static NS_DEFINE_IID(kXMLTerminalCID, MOZXMLTERMINAL_CID);
|
||||
|
||||
static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID);
|
||||
static NS_DEFINE_CID(kCTransferableCID, NS_TRANSFERABLE_CID);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTerminal factory
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsresult
|
||||
NS_NewXMLTerminal(mozIXMLTerminal** aXMLTerminal)
|
||||
{
|
||||
NS_PRECONDITION(aXMLTerminal != nsnull, "null ptr");
|
||||
if (!aXMLTerminal)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aXMLTerminal = new mozXMLTerminal();
|
||||
if (! *aXMLTerminal)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(*aXMLTerminal);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozXMLTerminal implementation
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
mozXMLTerminal::mozXMLTerminal() :
|
||||
mInitialized(PR_FALSE),
|
||||
|
||||
mCookie(""),
|
||||
|
||||
mCommand(""),
|
||||
mPromptExpr(""),
|
||||
mFirstInput(""),
|
||||
|
||||
mXMLTermShell(nsnull),
|
||||
mWebShell(nsnull),
|
||||
mPresShell(nsnull),
|
||||
mDOMDocument(nsnull),
|
||||
|
||||
mXMLTermSession(nsnull),
|
||||
|
||||
mLineTermAux(nsnull),
|
||||
|
||||
mKeyListener(nsnull),
|
||||
mTextListener(nsnull),
|
||||
mMouseListener(nsnull),
|
||||
mDragListener(nsnull)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
mozXMLTerminal::~mozXMLTerminal()
|
||||
{
|
||||
if (mInitialized) {
|
||||
Finalize();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Implement AddRef and Release
|
||||
NS_IMPL_ADDREF(mozXMLTerminal)
|
||||
NS_IMPL_RELEASE(mozXMLTerminal)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTerminal::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if ( aIID.Equals(kISupportsIID)) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(mozIXMLTerminal*,this));
|
||||
|
||||
} else if ( aIID.Equals(mozIXMLTerminal::GetIID()) ) {
|
||||
*aInstancePtr = NS_STATIC_CAST(mozIXMLTerminal*,this);
|
||||
|
||||
} else if (aIID.Equals(nsIDocumentLoaderObserver::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDocumentLoaderObserver*,this);
|
||||
|
||||
} else if (aIID.Equals(nsIObserver::GetIID())) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIObserver*,this);
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_ADDREF_THIS();
|
||||
|
||||
XMLT_LOG(mozXMLTerminal::QueryInterface,20,("mRefCnt = %d\n", mRefCnt));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTerminal::GetCurrentEntryNumber(PRInt32 *aNumber)
|
||||
{
|
||||
if (mXMLTermSession) {
|
||||
return mXMLTermSession->GetCurrentEntryNumber(aNumber);
|
||||
} else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTerminal::GetHistory(PRInt32 *aHistory)
|
||||
{
|
||||
if (mXMLTermSession) {
|
||||
return mXMLTermSession->GetHistory(aHistory);
|
||||
} else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTerminal::SetHistory(PRInt32 aHistory)
|
||||
{
|
||||
if (mXMLTermSession) {
|
||||
return mXMLTermSession->SetHistory(aHistory);
|
||||
} else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTerminal::GetPrompt(PRUnichar **aPrompt)
|
||||
{
|
||||
if (mXMLTermSession) {
|
||||
return mXMLTermSession->GetPrompt(aPrompt);
|
||||
} else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozXMLTerminal::SetPrompt(const PRUnichar* aPrompt)
|
||||
{
|
||||
if (mXMLTermSession) {
|
||||
return mXMLTermSession->SetPrompt(aPrompt);
|
||||
} else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Initialize by starting load of Init page for XMLTerm
|
||||
NS_IMETHODIMP mozXMLTerminal::Init(nsIWebShell* aWebShell,
|
||||
mozIXMLTermShell* aXMLTermShell,
|
||||
const PRUnichar* aURL,
|
||||
const PRUnichar* args)
|
||||
{
|
||||
XMLT_LOG(mozXMLTerminal::Init,20,("\n"));
|
||||
|
||||
if (!aWebShell)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
if (mWebShell)
|
||||
return NS_ERROR_ALREADY_INITIALIZED;
|
||||
|
||||
mWebShell = aWebShell; // containing webshell; no addref
|
||||
|
||||
mXMLTermShell = aXMLTermShell; // containing xmlterm shell; no addref
|
||||
|
||||
nsresult result = NS_OK;
|
||||
|
||||
// NOTE: Need to parse args string!!!
|
||||
mCommand = "";
|
||||
mPromptExpr = "";
|
||||
mFirstInput = args;
|
||||
|
||||
// Initialization completed
|
||||
mInitialized = PR_TRUE;
|
||||
|
||||
if ((aURL != nsnull) && (*aURL != 0)) {
|
||||
// Load URL and activate XMLTerm after loading
|
||||
XMLT_LOG(mozXMLTerminal::Init,22,("setting DocLoaderObs\n"));
|
||||
|
||||
// About to create owning reference to this
|
||||
result = mWebShell->SetDocLoaderObserver((nsIDocumentLoaderObserver*)this);
|
||||
if (NS_FAILED(result))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
XMLT_LOG(mozXMLTerminal::Init,22,("done setting DocLoaderObs\n"));
|
||||
|
||||
// Load initial XMLterm background document
|
||||
nsAutoString urlString(aURL);
|
||||
|
||||
result = mWebShell->LoadURL(urlString.GetUnicode());
|
||||
if (NS_FAILED(result))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
} else {
|
||||
// Document already loaded; activate XMLTerm
|
||||
result = Activate();
|
||||
if (NS_FAILED(result))
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
XMLT_LOG(mozXMLTerminal::Init,21,("exiting\n"));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// De-initialize XMLTerminal
|
||||
NS_IMETHODIMP mozXMLTerminal::Finalize(void)
|
||||
{
|
||||
if (mXMLTermSession) {
|
||||
// Finalize XMLTermSession object and delete it (it is not ref. counted)
|
||||
mXMLTermSession->Finalize();
|
||||
delete mXMLTermSession;
|
||||
mXMLTermSession = nsnull;
|
||||
}
|
||||
|
||||
if (mDOMDocument) {
|
||||
// Release any event listeners for the document
|
||||
nsCOMPtr<nsIDOMEventReceiver> eventReceiver;
|
||||
nsresult result = mDOMDocument->QueryInterface(nsIDOMEventReceiver::GetIID(), getter_AddRefs(eventReceiver));
|
||||
|
||||
if (NS_SUCCEEDED(result) && eventReceiver) {
|
||||
if (mKeyListener) {
|
||||
eventReceiver->RemoveEventListenerByIID(mKeyListener,
|
||||
nsIDOMKeyListener::GetIID());
|
||||
mKeyListener = nsnull;
|
||||
}
|
||||
|
||||
if (mTextListener) {
|
||||
eventReceiver->RemoveEventListenerByIID(mTextListener,
|
||||
nsIDOMTextListener::GetIID());
|
||||
mTextListener = nsnull;
|
||||
}
|
||||
|
||||
if (mMouseListener) {
|
||||
eventReceiver->RemoveEventListenerByIID(mMouseListener,
|
||||
nsIDOMMouseListener::GetIID());
|
||||
mMouseListener = nsnull;
|
||||
}
|
||||
|
||||
if (mDragListener) {
|
||||
eventReceiver->RemoveEventListenerByIID(mDragListener,
|
||||
nsIDOMDragListener::GetIID());
|
||||
mDragListener = nsnull;
|
||||
}
|
||||
}
|
||||
mDOMDocument = nsnull;
|
||||
}
|
||||
|
||||
if (mLineTermAux) {
|
||||
// Finalize and release reference to LineTerm object owned by us
|
||||
mLineTermAux->CloseAux();
|
||||
mLineTermAux = nsnull;
|
||||
}
|
||||
|
||||
if (mWebShell) {
|
||||
// Stop observing document loading
|
||||
mWebShell->SetDocLoaderObserver((nsIDocumentLoaderObserver *)nsnull);
|
||||
mWebShell = nsnull;
|
||||
}
|
||||
|
||||
mPresShell = nsnull;
|
||||
mXMLTermShell = nsnull;
|
||||
|
||||
mInitialized = PR_FALSE;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Activates XMLterm and instantiates LineTerm;
|
||||
* called at the the end of Init page loading.
|
||||
*/
|
||||
NS_IMETHODIMP mozXMLTerminal::Activate(void)
|
||||
{
|
||||
nsresult result = NS_OK;
|
||||
|
||||
#if 0
|
||||
// TEMPORARY: Testing mozIXMLTermStream
|
||||
nsAutoString streamData = "<HTML><HEAD><TITLE>Stream Title</TITLE>"
|
||||
"<SCRIPT language='JavaScript'>"
|
||||
"function clik(){ dump('click\\n');return(false);}"
|
||||
"</SCRIPT></HEAD>"
|
||||
"<BODY><B>Stream Body "
|
||||
"<SPAN STYLE='color: blue' onClick='return clik();'>Clik</SPAN></B><BR>"
|
||||
"<TABLE WIDTH=720><TR><TD WIDTH=700 BGCOLOR=maroon> </TABLE>"
|
||||
"<BR>ABCD<BR>EFGH<BR>JKLM<BR>"
|
||||
"</BODY></HTML>";
|
||||
|
||||
nsCOMPtr<mozIXMLTermStream> stream;
|
||||
result = NS_NewXMLTermStream(getter_AddRefs(stream));
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozXMLTerminal::Activate: Failed to create stream\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMWindow> outerDOMWindow;
|
||||
result = mozXMLTermUtils::ConvertWebShellToDOMWindow(mWebShell,
|
||||
getter_AddRefs(outerDOMWindow));
|
||||
|
||||
if (NS_FAILED(result) || !outerDOMWindow)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
result = stream->Open(outerDOMWindow, "iframe1", "chrome://dummy",
|
||||
"text/html", 800);
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozXMLTerminal::Activate: Failed to open stream\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
result = stream->Write(streamData.GetUnicode());
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozXMLTerminal::Activate: Failed to write to stream\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
result = stream->Close();
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozXMLTerminal::Activate: Failed to close stream\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
XMLT_LOG(mozXMLTerminal::Activate,20,("\n"));
|
||||
|
||||
if (!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
PR_ASSERT(mWebShell != nsnull);
|
||||
|
||||
if ((mDOMDocument != nsnull) || (mPresShell != nsnull))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Get reference to DOMDocument
|
||||
nsCOMPtr<nsIDOMDocument> domDocument;
|
||||
result = mozXMLTermUtils::GetWebShellDOMDocument(mWebShell,
|
||||
getter_AddRefs(domDocument));
|
||||
|
||||
if (NS_FAILED(result) || !domDocument)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Get reference to presentation shell
|
||||
if (mPresShell != nsnull)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIPresContext> presContext;
|
||||
result = mozXMLTermUtils::GetWebShellPresContext(mWebShell,
|
||||
getter_AddRefs(presContext));
|
||||
if (NS_FAILED(result) || !presContext)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIPresShell> presShell;
|
||||
result = presContext->GetShell(getter_AddRefs(presShell));
|
||||
|
||||
if (NS_FAILED(result) || !presShell)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Save references to DOMDocument and presentation shell
|
||||
// (SVN: Should these be addref'ed and released in the destructor?)
|
||||
mDOMDocument = domDocument; // no addref
|
||||
mPresShell = presShell; // no addref
|
||||
|
||||
// Instantiate and initialize XMLTermSession object
|
||||
mXMLTermSession = new mozXMLTermSession();
|
||||
|
||||
if (!mXMLTermSession) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
result = mXMLTermSession->Init(this, mPresShell, mDOMDocument);
|
||||
if (NS_FAILED(result)) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to initialize XMLTermSession\n");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
// Instantiate LineTerm
|
||||
XMLT_LOG(mozXMLTerminal::Activate,22,("instantiating lineterm\n"));
|
||||
result = NS_NewLineTermAux(getter_AddRefs(mLineTermAux));
|
||||
if (NS_FAILED(result)) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to instantiate LineTermAux\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Open LineTerm to execute command
|
||||
// Non-owning reference to this; delete LineTerm before deleting self
|
||||
PRInt32 options = LTERM_NOSTDERR_FLAG;
|
||||
|
||||
XMLT_LOG(mozXMLTerminal::Activate,22,("Opening LineTerm\n"));
|
||||
nsCOMPtr<nsIObserver> anObserver = this;
|
||||
#ifdef NO_CALLBACK
|
||||
anObserver = nsnull;
|
||||
#endif
|
||||
nsAutoString cookie;
|
||||
result = mLineTermAux->OpenAux(mCommand.GetUnicode(),
|
||||
mPromptExpr.GetUnicode(),
|
||||
options, LTERM_DETERMINE_PROCESS,
|
||||
mDOMDocument, anObserver, cookie);
|
||||
|
||||
if (NS_FAILED(result)) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to open LineTermAux\n");
|
||||
return result;
|
||||
}
|
||||
XMLT_LOG(mozXMLTerminal::Activate,22,("Opened LineTerm\n"));
|
||||
|
||||
// Save cookie
|
||||
mCookie = cookie;
|
||||
|
||||
if (mFirstInput.Length() > 0) {
|
||||
// Send first input command line
|
||||
result = SendTextAux(mFirstInput);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
}
|
||||
|
||||
// Get the DOM event receiver for document
|
||||
nsCOMPtr<nsIDOMEventReceiver> eventReceiver;
|
||||
result = mDOMDocument->QueryInterface(nsIDOMEventReceiver::GetIID(),
|
||||
getter_AddRefs(eventReceiver));
|
||||
if (NS_FAILED(result)) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to get DOM receiver\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Create a key listener
|
||||
result = NS_NewXMLTermKeyListener(getter_AddRefs(mKeyListener), this);
|
||||
if (NS_OK != result) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to get key listener\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Register the key listener with the DOM event receiver
|
||||
result = eventReceiver->AddEventListenerByIID(mKeyListener,
|
||||
nsIDOMKeyListener::GetIID());
|
||||
|
||||
if (NS_FAILED(result)) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to register key listener\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Create a text listener
|
||||
result = NS_NewXMLTermTextListener(getter_AddRefs(mTextListener), this);
|
||||
if (NS_OK != result) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to get text listener\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Register the text listener with the DOM event receiver
|
||||
result = eventReceiver->AddEventListenerByIID(mTextListener,
|
||||
nsIDOMTextListener::GetIID());
|
||||
if (NS_FAILED(result)) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to register text listener\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Create a mouse listener
|
||||
result = NS_NewXMLTermMouseListener(getter_AddRefs(mMouseListener), this);
|
||||
if (NS_OK != result) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to get mouse listener\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Register the mouse listener with the DOM event receiver
|
||||
result = eventReceiver->AddEventListenerByIID(mMouseListener,
|
||||
nsIDOMMouseListener::GetIID());
|
||||
if (NS_FAILED(result)) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to register mouse listener\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Create a drag listener
|
||||
result = NS_NewXMLTermDragListener(getter_AddRefs(mDragListener), this);
|
||||
if (NS_OK != result) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to get drag listener\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Register the drag listener with the DOM event receiver
|
||||
result = eventReceiver->AddEventListenerByIID(mDragListener,
|
||||
nsIDOMDragListener::GetIID());
|
||||
if (NS_FAILED(result)) {
|
||||
XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to register drag listener\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// Transmit string to LineTerm (use saved cookie)
|
||||
NS_IMETHODIMP mozXMLTerminal::SendTextAux(const nsString& aString)
|
||||
{
|
||||
return SendText(aString, mCookie.GetUnicode());
|
||||
}
|
||||
|
||||
|
||||
// Transmit string to LineTerm
|
||||
NS_IMETHODIMP mozXMLTerminal::SendText(const nsString& aString,
|
||||
const PRUnichar* aCookie)
|
||||
{
|
||||
nsresult result;
|
||||
|
||||
if (!mLineTermAux)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Preprocess string and check if it is to be consumed
|
||||
PRBool consumed = false;
|
||||
result = mXMLTermSession->Preprocess(aString, consumed);
|
||||
|
||||
if (!consumed) {
|
||||
result = mLineTermAux->Write(aString.GetUnicode(), aCookie);
|
||||
if (NS_FAILED(result)) {
|
||||
// Close LineTerm
|
||||
mLineTermAux->Close(aCookie);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// Paste data from clipboard to terminal
|
||||
NS_IMETHODIMP mozXMLTerminal::Paste()
|
||||
{
|
||||
nsresult result;
|
||||
nsAutoString pasteString;
|
||||
|
||||
XMLT_LOG(mozXMLTerminal::Paste,20,("\n"));
|
||||
|
||||
// Get Clipboard service
|
||||
NS_WITH_SERVICE (nsIClipboard, clipboard, kCClipboardCID, &result);
|
||||
if ( NS_FAILED(result) )
|
||||
return result;
|
||||
|
||||
// Generic transferable for getting clipboard data
|
||||
nsCOMPtr<nsITransferable> trans;
|
||||
result = nsComponentManager::CreateInstance(kCTransferableCID, nsnull,
|
||||
nsITransferable::GetIID(),
|
||||
(void**) getter_AddRefs(trans));
|
||||
|
||||
if (NS_FAILED(result) || !trans)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// DataFlavors to get out of transferable
|
||||
trans->AddDataFlavor(kHTMLMime);
|
||||
trans->AddDataFlavor(kTextMime);
|
||||
|
||||
// Get data from clipboard
|
||||
result = clipboard->GetData(trans);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
char* bestFlavor = nsnull;
|
||||
nsCOMPtr<nsISupports> genericDataObj;
|
||||
PRUint32 objLen = 0;
|
||||
result = trans->GetAnyTransferData(&bestFlavor,
|
||||
getter_AddRefs(genericDataObj), &objLen);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
nsAutoString flavor ( bestFlavor );
|
||||
|
||||
char* temCStr = flavor.ToNewCString();
|
||||
XMLT_LOG(mozXMLTerminal::Paste,20,("flavour=%s\n", temCStr));
|
||||
nsAllocator::Free(temCStr);
|
||||
|
||||
if (flavor.Equals(kHTMLMime)) {
|
||||
nsCOMPtr<nsISupportsWString> textDataObj ( do_QueryInterface(genericDataObj) );
|
||||
if (textDataObj && objLen > 0) {
|
||||
PRUnichar* text = nsnull;
|
||||
textDataObj->ToString ( &text );
|
||||
pasteString.SetString ( text, objLen / 2 );
|
||||
result = SendTextAux(pasteString);
|
||||
}
|
||||
|
||||
} else if (flavor.Equals(kTextMime)) {
|
||||
nsCOMPtr<nsISupportsString> textDataObj ( do_QueryInterface(genericDataObj) );
|
||||
if (textDataObj && objLen > 0) {
|
||||
char* text = nsnull;
|
||||
textDataObj->ToString ( &text );
|
||||
pasteString.SetString ( text, objLen );
|
||||
result = SendTextAux(pasteString);
|
||||
}
|
||||
}
|
||||
|
||||
nsAllocator::Free(bestFlavor);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// Poll for readable data from LineTerm
|
||||
NS_IMETHODIMP mozXMLTerminal::Poll(void)
|
||||
{
|
||||
if (!mLineTermAux)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
XMLT_LOG(mozXMLTerminal::Poll,20,("\n"));
|
||||
|
||||
return mXMLTermSession->ReadAll(mLineTermAux);
|
||||
}
|
||||
|
||||
|
||||
// Handle callback from LineTerm when new input/output needs to be displayed
|
||||
NS_IMETHODIMP mozXMLTerminal::Observe(nsISupports *aSubject,
|
||||
const PRUnichar *aTopic,
|
||||
const PRUnichar *someData)
|
||||
{
|
||||
nsCOMPtr<mozILineTermAux> lineTermAux = do_QueryInterface(aSubject);
|
||||
PR_ASSERT(lineTermAux != nsnull);
|
||||
|
||||
return mXMLTermSession->ReadAll(lineTermAux);
|
||||
}
|
||||
|
||||
|
||||
// Returns document associated with XMLTerminal
|
||||
NS_IMETHODIMP mozXMLTerminal::GetDocument(nsIDOMDocument** aDoc)
|
||||
{
|
||||
if (!aDoc)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
*aDoc = nsnull;
|
||||
|
||||
NS_PRECONDITION(mDOMDocument, "bad state, null mDOMDocument");
|
||||
if (!mDOMDocument)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
return mDOMDocument->QueryInterface(nsIDOMDocument::GetIID(),
|
||||
(void **)aDoc);
|
||||
}
|
||||
|
||||
|
||||
// Returns presentation shell associated with XMLTerm
|
||||
NS_IMETHODIMP mozXMLTerminal::GetPresShell(nsIPresShell** aPresShell)
|
||||
{
|
||||
if (!aPresShell)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
*aPresShell = nsnull;
|
||||
|
||||
NS_PRECONDITION(mPresShell, "bad state, null mPresShell");
|
||||
if (!mPresShell)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
return mPresShell->QueryInterface(nsIPresShell::GetIID(),
|
||||
(void **)aPresShell);
|
||||
}
|
||||
|
||||
// nsIDocumentLoaderObserver methods
|
||||
NS_IMETHODIMP
|
||||
mozXMLTerminal::OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL,
|
||||
const char* aCommand)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTerminal::OnEndDocumentLoad(nsIDocumentLoader* loader, nsIChannel* channel,
|
||||
nsresult aStatus,
|
||||
nsIDocumentLoaderObserver * aObserver)
|
||||
{
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTerminal::OnStartURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
nsIContentViewer* aViewer)
|
||||
{
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTerminal::OnProgressURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel, PRUint32 aProgress,
|
||||
PRUint32 aProgressMax)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTerminal::OnStatusURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel, nsString& aMsg)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTerminal::OnEndURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel, nsresult aStatus)
|
||||
{
|
||||
XMLT_LOG(mozXMLTerminal::OnEndURLLoad,20,("\n"));
|
||||
|
||||
// Activate XMLTerm
|
||||
Activate();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozXMLTerminal::HandleUnknownContentType(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
const char *aContentType,
|
||||
const char *aCommand )
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
153
mozilla/extensions/xmlterm/base/mozXMLTerminal.h
Normal file
153
mozilla/extensions/xmlterm/base/mozXMLTerminal.h
Normal file
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozXMLTerminal.h: declaration of mozXMLTerminal
|
||||
// which implements the mozIXMLTerminal interface
|
||||
// to manage all XMLterm operations.
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nspr.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "mozXMLT.h"
|
||||
|
||||
#include "mozILineTermAux.h"
|
||||
#include "mozIXMLTerminal.h"
|
||||
#include "mozXMLTermSession.h"
|
||||
#include "mozXMLTermListeners.h"
|
||||
#include "mozIXMLTermStream.h"
|
||||
|
||||
|
||||
class mozXMLTerminal : public mozIXMLTerminal,
|
||||
public nsIDocumentLoaderObserver,
|
||||
public nsIObserver
|
||||
{
|
||||
public:
|
||||
|
||||
mozXMLTerminal();
|
||||
virtual ~mozXMLTerminal();
|
||||
|
||||
// nsISupports interface
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// mozIXMLTerminal interface
|
||||
|
||||
NS_IMETHOD Init(nsIWebShell* aWebShell,
|
||||
mozIXMLTermShell* aXMLTermShell,
|
||||
const PRUnichar* aURL,
|
||||
const PRUnichar* args);
|
||||
|
||||
NS_IMETHOD Finalize(void);
|
||||
NS_IMETHOD Poll(void);
|
||||
|
||||
NS_IMETHOD GetCurrentEntryNumber(PRInt32 *aNumber);
|
||||
|
||||
NS_IMETHOD GetHistory(PRInt32 *aHistory);
|
||||
NS_IMETHOD SetHistory(PRInt32 aHistory);
|
||||
NS_IMETHOD GetPrompt(PRUnichar **aPrompt);
|
||||
NS_IMETHOD SetPrompt(const PRUnichar* aPrompt);
|
||||
|
||||
NS_IMETHOD SendTextAux(const nsString& aString);
|
||||
NS_IMETHOD SendText(const nsString& aString, const PRUnichar* aCookie);
|
||||
|
||||
NS_IMETHOD Paste();
|
||||
|
||||
NS_IMETHOD GetDocument(nsIDOMDocument** aDoc);
|
||||
|
||||
NS_IMETHOD GetPresShell(nsIPresShell** aPresShell);
|
||||
|
||||
// nsIDocumentLoaderObserver interface
|
||||
NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL,
|
||||
const char* aCommand);
|
||||
|
||||
NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIChannel* channel,
|
||||
nsresult aStatus,
|
||||
nsIDocumentLoaderObserver * aObserver);
|
||||
|
||||
NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel,
|
||||
nsIContentViewer* aViewer);
|
||||
|
||||
NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRUint32 aProgress,
|
||||
PRUint32 aProgressMax);
|
||||
|
||||
NS_IMETHOD OnStatusURLLoad(nsIDocumentLoader* loader, nsIChannel* channel,
|
||||
nsString& aMsg);
|
||||
|
||||
NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel,
|
||||
nsresult aStatus);
|
||||
|
||||
NS_IMETHOD HandleUnknownContentType(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
const char *aContentType,
|
||||
const char *aCommand );
|
||||
|
||||
// nsIObserver interface
|
||||
NS_IMETHOD Observe(nsISupports *aSubject, const PRUnichar *aTopic,
|
||||
const PRUnichar *someData);
|
||||
|
||||
// Others
|
||||
NS_IMETHOD Activate(void);
|
||||
|
||||
protected:
|
||||
|
||||
/** object initialization flag */
|
||||
PRBool mInitialized;
|
||||
|
||||
/** cookie string used for authentication (stored in document.cookie) */
|
||||
nsString mCookie;
|
||||
|
||||
nsString mCommand;
|
||||
nsString mPromptExpr;
|
||||
|
||||
/** initial input string to be sent to LineTerm */
|
||||
nsString mFirstInput;
|
||||
|
||||
/** non-owning reference to containing XMLTermShell object */
|
||||
mozIXMLTermShell* mXMLTermShell;
|
||||
|
||||
/** non-owning reference to containing web shell */
|
||||
nsIWebShell* mWebShell;
|
||||
|
||||
/** non-owning (??) reference to presentation shell for XMLterm */
|
||||
nsIPresShell* mPresShell;
|
||||
|
||||
/** non-owning (??) reference to DOM document containing XMLterm */
|
||||
nsIDOMDocument* mDOMDocument;
|
||||
|
||||
/** XMLTermSession object created by us (not reference counted) */
|
||||
mozXMLTermSession* mXMLTermSession;
|
||||
|
||||
/** owning reference to LineTermAux object created by us */
|
||||
nsCOMPtr<mozILineTermAux> mLineTermAux;
|
||||
|
||||
/** owning referencing to key listener object created by us */
|
||||
nsCOMPtr<nsIDOMEventListener> mKeyListener;
|
||||
|
||||
/** owning referencing to text listener object created by us */
|
||||
nsCOMPtr<nsIDOMEventListener> mTextListener;
|
||||
|
||||
/** owning referencing to mouse listener object created by us */
|
||||
nsCOMPtr<nsIDOMEventListener> mMouseListener;
|
||||
|
||||
/** owning referencing to drag listener object created by us */
|
||||
nsCOMPtr<nsIDOMEventListener> mDragListener;
|
||||
|
||||
};
|
||||
512
mozilla/extensions/xmlterm/base/ptystream.c
Normal file
512
mozilla/extensions/xmlterm/base/ptystream.c
Normal file
@@ -0,0 +1,512 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* ptystream.c: pseudo-TTY stream implementation
|
||||
* CPP options:
|
||||
* LINUX: for Linux2.0/glibc
|
||||
* SOLARIS: for Solaris2.6
|
||||
* NOERRMSG: for suppressing all error messages
|
||||
* DEBUG: for printing some debugging output to STDERR
|
||||
*/
|
||||
|
||||
/* system header files */
|
||||
|
||||
|
||||
#include <termios.h>
|
||||
#include <signal.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/fcntl.h>
|
||||
|
||||
#ifdef LINUX
|
||||
#define __USE_BSD 1
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
/* public declarations */
|
||||
#include "ptystream.h"
|
||||
|
||||
/* private declarations */
|
||||
static int openPTY(struct ptys *ptyp, int noblock);
|
||||
static int attachToTTY(struct ptys *ptyp, int errfd, int noecho);
|
||||
static int setTTYAttr(int ttyFD, int noecho);
|
||||
static void pty_error(const char *errmsg, const char *errmsg2);
|
||||
|
||||
/* parameters */
|
||||
#define C_CTL_C '\003' /* ^C */
|
||||
#define C_CTL_D '\004' /* ^D */
|
||||
#define C_CTL_H '\010' /* ^H */
|
||||
#define C_CTL_O '\017' /* ^O */
|
||||
#define C_CTL_Q '\021' /* ^Q */
|
||||
#define C_CTL_R '\022' /* ^R */
|
||||
#define C_CTL_S '\023' /* ^S */
|
||||
#define C_CTL_U '\025' /* ^U */
|
||||
#define C_CTL_V '\026' /* ^V */
|
||||
#define C_CTL_W '\027' /* ^W */
|
||||
#define C_CTL_Y '\031' /* ^Y */
|
||||
#define C_CTL_Z '\032' /* ^Z */
|
||||
#define C_CTL_BSL '\034' /* ^\ */
|
||||
|
||||
/* Disable special character functions */
|
||||
#ifdef _POSIX_VDISABLE
|
||||
#define VDISABLE _POSIX_VDISABLE
|
||||
#else
|
||||
#define VDISABLE 255
|
||||
#endif
|
||||
|
||||
#define PTYCHAR1 "pqrstuvwxyzPQRSTUVWXYZ"
|
||||
#define PTYCHAR2 "0123456789abcdef"
|
||||
|
||||
|
||||
/* creates a new pseudo-TTY */
|
||||
int pty_create(struct ptys *ptyp, char *const argv[],
|
||||
int errfd, int noblock, int noecho, int noexport, int debug)
|
||||
{
|
||||
pid_t child_pid;
|
||||
int errfd2;
|
||||
|
||||
if (!ptyp) {
|
||||
pty_error("pty_create: NULL value for PTY structure", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Set debug flag */
|
||||
ptyp->debug = debug;
|
||||
|
||||
#ifdef DEBUG
|
||||
if (ptyp->debug)
|
||||
fprintf(stderr, "00-pty_create: errfd=%d, noblock=%d, noecho=%d, noexport=%d\n",
|
||||
errfd, noblock, noecho, noexport);
|
||||
#endif
|
||||
|
||||
/* Open PTY */
|
||||
if (openPTY(ptyp, noblock) == -1) return -1;
|
||||
|
||||
/* Set default TTY size */
|
||||
if (pty_resize(ptyp, 24, 80, 0, 0) != 0)
|
||||
return -1;
|
||||
|
||||
if (errfd >= -1) {
|
||||
/* No STDERR pipe */
|
||||
ptyp->errpipeFD = -1;
|
||||
errfd2 = errfd;
|
||||
|
||||
} else {
|
||||
/* Create pipe to handle STDERR output */
|
||||
int pipeFD[2];
|
||||
|
||||
if (pipe(pipeFD) == -1) {
|
||||
pty_error("pty_create: STDERR pipe creation failed", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Copy pipe file descriptors */
|
||||
ptyp->errpipeFD = pipeFD[0];
|
||||
errfd2 = pipeFD[1];
|
||||
}
|
||||
|
||||
/* Fork a child process (VFORK) */
|
||||
child_pid = vfork();
|
||||
if (child_pid < 0) {
|
||||
pty_error("pty_create: vfork failed", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ptyp->pid = child_pid;
|
||||
|
||||
#ifdef DEBUG
|
||||
if (ptyp->debug)
|
||||
fprintf(stderr, "00-pty_create: Fork child pid = %d, initially attached to %s\n",
|
||||
child_pid, ttyname(0));
|
||||
#endif
|
||||
|
||||
if (child_pid == 0) {
|
||||
/* Child process */
|
||||
|
||||
/* Attach child to slave TTY */
|
||||
if (attachToTTY(ptyp, errfd2, noecho) == -1) return -1;
|
||||
|
||||
/* Set default signal handling */
|
||||
signal(SIGINT, SIG_DFL);
|
||||
signal(SIGQUIT, SIG_DFL);
|
||||
signal(SIGCHLD, SIG_DFL);
|
||||
|
||||
/* Set ignore signal handling */
|
||||
signal(SIGTSTP, SIG_IGN);
|
||||
signal(SIGTTIN, SIG_IGN);
|
||||
signal(SIGTTOU, SIG_IGN);
|
||||
|
||||
if (argv != NULL) {
|
||||
/* Execute specified command with arguments */
|
||||
if (noexport)
|
||||
execve(argv[0], argv, NULL);
|
||||
else
|
||||
execvp(argv[0], argv);
|
||||
|
||||
pty_error("Error in executing command ", argv[0]);
|
||||
return -1;
|
||||
|
||||
} else {
|
||||
/* Execute $SHELL or /bin/sh by default */
|
||||
char *shell = (char *) getenv("SHELL");
|
||||
|
||||
if ((shell == NULL) || (*shell == '\0'))
|
||||
shell = "/bin/sh";
|
||||
|
||||
if (noexport)
|
||||
execle(shell, shell, NULL, NULL);
|
||||
else
|
||||
execlp(shell, shell, NULL);
|
||||
|
||||
pty_error("pty_create: Error in executing command ", shell);
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (errfd < -1) {
|
||||
/* Close write end of STDERR pipe in parent process */
|
||||
close(errfd2);
|
||||
}
|
||||
|
||||
/* Return from parent */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* closes a pseudo-TTY */
|
||||
int pty_close(struct ptys *ptyp)
|
||||
{
|
||||
if (!ptyp) {
|
||||
pty_error("pty_close: NULL value for PTY structure", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
kill(ptyp->pid, SIGKILL);
|
||||
ptyp->pid = 0;
|
||||
|
||||
close(ptyp->ptyFD);
|
||||
ptyp->ptyFD = -1;
|
||||
|
||||
if (ptyp->errpipeFD >= 0) {
|
||||
close(ptyp->errpipeFD);
|
||||
ptyp->errpipeFD = -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* resizes a pseudo-TTY */
|
||||
int pty_resize(struct ptys *ptyp, int rows, int cols,
|
||||
int xpix, int ypix)
|
||||
{
|
||||
struct winsize wsize;
|
||||
|
||||
if (!ptyp) {
|
||||
pty_error("pty_resize: NULL value for PTY structure", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ioctl(ptyp->ptyFD, TIOCGWINSZ, &wsize ) == -1) {
|
||||
pty_error("pty_resize: Failed to get TTY window size", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Set TTY window size */
|
||||
wsize.ws_row = (unsigned short) rows;
|
||||
wsize.ws_col = (unsigned short) cols;
|
||||
wsize.ws_xpixel = (unsigned short) xpix;
|
||||
wsize.ws_ypixel = (unsigned short) ypix;
|
||||
|
||||
if (ioctl(ptyp->ptyFD, TIOCSWINSZ, &wsize ) == -1) {
|
||||
pty_error("pty_resize: Failed to set TTY window size", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int openPTY(struct ptys *ptyp, int noblock)
|
||||
{
|
||||
char ptyName[PTYNAMELEN+1], ttyName[PTYNAMELEN+1];
|
||||
|
||||
int plen, tlen, ptyFD, letIndex, devIndex;
|
||||
|
||||
(void) strncpy(ptyName, "/dev/pty??", PTYNAMELEN+1);
|
||||
(void) strncpy(ttyName, "/dev/tty??", PTYNAMELEN+1);
|
||||
|
||||
plen = strlen(ptyName);
|
||||
tlen = strlen(ttyName);
|
||||
|
||||
assert(ptyp != NULL);
|
||||
assert(plen <= PTYNAMELEN);
|
||||
assert(tlen <= PTYNAMELEN);
|
||||
|
||||
ptyFD = -1;
|
||||
letIndex = 0;
|
||||
while (PTYCHAR1[letIndex] && (ptyFD == -1)) {
|
||||
ttyName[tlen - 2] =
|
||||
ptyName[plen - 2] = PTYCHAR1 [letIndex];
|
||||
|
||||
devIndex = 0;
|
||||
while (PTYCHAR2[devIndex] && (ptyFD == -1)) {
|
||||
ttyName [tlen - 1] =
|
||||
ptyName [plen - 1] = PTYCHAR2 [devIndex];
|
||||
|
||||
if ((ptyFD = open(ptyName, O_RDWR)) >= 0) {
|
||||
if (access(ttyName, R_OK | W_OK) != 0) {
|
||||
close(ptyFD);
|
||||
ptyFD = -1;
|
||||
}
|
||||
}
|
||||
devIndex++;
|
||||
}
|
||||
|
||||
letIndex++;
|
||||
}
|
||||
|
||||
if (ptyFD == -1) {
|
||||
pty_error("openPTY: Unable to open pseudo-tty", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (noblock) {
|
||||
/* Set non-blocking mode */
|
||||
fcntl(ptyFD, F_SETFL, O_NDELAY);
|
||||
}
|
||||
|
||||
strncpy(ptyp->ptydev, ptyName, PTYNAMELEN+1);
|
||||
strncpy(ptyp->ttydev, ttyName, PTYNAMELEN+1);
|
||||
|
||||
ptyp->ptyFD = ptyFD;
|
||||
|
||||
#ifdef DEBUG
|
||||
if (ptyp->debug)
|
||||
fprintf(stderr, "00-openPTY: Opened pty %s on fd %d\n", ptyName, ptyFD);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* attaches new process to slave TTY */
|
||||
static int attachToTTY(struct ptys *ptyp, int errfd, int noecho)
|
||||
{
|
||||
int ttyFD, fd, fdMax;
|
||||
pid_t sid;
|
||||
gid_t gid;
|
||||
unsigned int ttyMode = 0622;
|
||||
|
||||
assert(ptyp != NULL);
|
||||
|
||||
/* Create new session */
|
||||
sid = setsid();
|
||||
|
||||
#ifdef DEBUG
|
||||
if (ptyp->debug)
|
||||
fprintf(stderr, "00-attachToTTY: Returned %d from setsid\n", sid);
|
||||
#endif
|
||||
|
||||
if (sid < 0) {
|
||||
#ifndef NOERRMSG
|
||||
perror("attachToTTY");
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((ttyFD = open(ptyp->ttydev, O_RDWR)) < 0) {
|
||||
pty_error("attachToTTY: Unable to open slave tty ", ptyp->ttydev );
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
if (ptyp->debug)
|
||||
fprintf(stderr,"00-attachToTTY: Attaching process %d to TTY %s on fd %d\n",
|
||||
getpid(), ptyp->ttydev, ttyFD);
|
||||
#endif
|
||||
|
||||
/* Change TTY ownership and permissions*/
|
||||
gid = getgid();
|
||||
|
||||
fchown(ttyFD, getuid(), gid);
|
||||
fchmod(ttyFD, ttyMode);
|
||||
|
||||
/* Set TTY attributes (this actually seems to be harmful; so commented out!)
|
||||
*/
|
||||
/* if (setTTYAttr(ttyFD, noecho) == -1) return -1; */
|
||||
|
||||
/* Redirect to specified descriptor or to PTY */
|
||||
if (errfd >= 0) {
|
||||
/* Redirect STDERR to specified file descriptor */
|
||||
if (dup2(errfd, 2) == -1) {
|
||||
pty_error("attachToTTY: Failed dup2 for specified stderr", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* Redirect STDERR to PTY */
|
||||
if (dup2(ttyFD, 2) == -1) {
|
||||
pty_error("attachToTTY: Failed dup2 for default stderr", NULL);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Redirect STDIN and STDOUT to PTY */
|
||||
if (dup2(ttyFD, 0) == -1) {
|
||||
pty_error("attachToTTY: Failed dup2 for stdin", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (dup2(ttyFD, 1) == -1) {
|
||||
pty_error("attachToTTY: Failed dup2 for stdout", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Close all other file descriptors in child process */
|
||||
fdMax = sysconf(_SC_OPEN_MAX);
|
||||
for (fd = 3; fd < fdMax; fd++)
|
||||
close(fd);
|
||||
|
||||
/* Set process group */
|
||||
tcsetpgrp(0, sid);
|
||||
|
||||
/* close(open(ptyp->ttydev, O_RDWR, 0)); */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* sets slave TTY attributes (NOT USED) */
|
||||
static int setTTYAttr(int ttyFD, int noecho)
|
||||
{
|
||||
struct termios tios;
|
||||
|
||||
/* Get TTY attributes */
|
||||
if (tcgetattr(ttyFD, &tios ) == -1) {
|
||||
#ifndef NOERRMSG
|
||||
perror("setTTYAttr");
|
||||
#endif
|
||||
pty_error("setTTYattr: Failed to get TTY attributes", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* TERMIOS settings for TTY */
|
||||
tios.c_cc[VINTR] = C_CTL_C;
|
||||
tios.c_cc[VQUIT] = C_CTL_BSL;
|
||||
tios.c_cc[VERASE] = C_CTL_H;
|
||||
tios.c_cc[VKILL] = C_CTL_U;
|
||||
tios.c_cc[VEOF] = C_CTL_D;
|
||||
tios.c_cc[VEOL] = VDISABLE;
|
||||
tios.c_cc[VEOL2] = VDISABLE;
|
||||
#ifdef SOLARIS
|
||||
tios.c_cc[VSWTCH] = VDISABLE;
|
||||
#endif
|
||||
tios.c_cc[VSTART] = C_CTL_Q;
|
||||
tios.c_cc[VSTOP] = C_CTL_S;
|
||||
tios.c_cc[VSUSP] = C_CTL_Z;
|
||||
tios.c_cc[VREPRINT] = C_CTL_R;
|
||||
tios.c_cc[VDISCARD] = C_CTL_O;
|
||||
tios.c_cc[VWERASE] = C_CTL_W;
|
||||
tios.c_cc[VLNEXT] = C_CTL_V;
|
||||
|
||||
tios.c_cc[VMIN] = 1; /* Wait for at least 1 char of input */
|
||||
tios.c_cc[VTIME] = 0; /* Wait indefinitely (block) */
|
||||
|
||||
/* Input modes */
|
||||
tios.c_iflag &= ~IUCLC; /* Disable map of upper case input to lower*/
|
||||
tios.c_iflag &= ~IGNBRK; /* Do not ignore break */
|
||||
tios.c_iflag &= ~BRKINT; /* Do not signal interrupt on break either */
|
||||
|
||||
/* Output modes */
|
||||
tios.c_oflag &= ~OPOST; /* Disable output postprocessing */
|
||||
tios.c_oflag &= ~ONLCR; /* Disable mapping of NL to CR-NL on output */
|
||||
tios.c_oflag &= ~OLCUC; /* Disable map of lower case output to upper */
|
||||
/* No output delays */
|
||||
tios.c_oflag &= ~(NLDLY|CRDLY|TABDLY|BSDLY|VTDLY|FFDLY);
|
||||
|
||||
/* control modes */
|
||||
tios.c_cflag |= (CS8 | CREAD);
|
||||
|
||||
/* line discipline modes */
|
||||
if (noecho)
|
||||
tios.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHOKE | ECHONL | ECHOPRT |
|
||||
ECHOCTL); /* Disable echo */
|
||||
else
|
||||
tios.c_lflag |= (ECHO | ECHOE | ECHOK | ECHOKE | ECHONL | ECHOPRT |
|
||||
ECHOCTL); /* Enable echo */
|
||||
|
||||
tios.c_lflag |= ISIG; /* Enable signals */
|
||||
tios.c_lflag |= ICANON; /* Enable erase/kill and eof processing */
|
||||
|
||||
/* NOTE: tcsh does not echo to be turned off if TERM=xterm;
|
||||
setting TERM=dumb allows echo to be turned off,
|
||||
but command completion is turned off as well */
|
||||
|
||||
/* Set TTY attributes */
|
||||
cfsetospeed (&tios, B38400);
|
||||
cfsetispeed (&tios, B38400);
|
||||
|
||||
if (tcsetattr(ttyFD, TCSADRAIN, &tios ) == -1) {
|
||||
#ifndef NOERRMSG
|
||||
perror("setTTYAttr");
|
||||
#endif
|
||||
pty_error("setTTYattr: Failed to set TTY attributes", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* displays an error message, optionally concatenated with another */
|
||||
static void pty_error(const char *errmsg, const char *errmsg2) {
|
||||
|
||||
#ifndef NOERRMSG
|
||||
if (errmsg != NULL) {
|
||||
if (errmsg2 != NULL) {
|
||||
fprintf(stderr, "%s%s\n", errmsg, errmsg2);
|
||||
} else {
|
||||
fprintf(stderr, "%s\n", errmsg);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
92
mozilla/extensions/xmlterm/base/ptystream.h
Normal file
92
mozilla/extensions/xmlterm/base/ptystream.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* ptystream.h: pseudo-TTY stream header
|
||||
* (used by ltermPrivate.h)
|
||||
*/
|
||||
|
||||
#ifndef _PTYSTREAM_H
|
||||
|
||||
#define _PTYSTREAM_H 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define PTYNAMELEN 10 /* Length of PTY/TTY device name: /dev/pty?? */
|
||||
|
||||
struct ptys { /* PTY structure */
|
||||
|
||||
int ptyFD; /* PTY file descriptor (bi-directional) */
|
||||
int errpipeFD; /* stderr pipe file descriptor (-1, if none) */
|
||||
|
||||
long pid; /* PTY child PID */
|
||||
|
||||
int debug; /* Debugging flag */
|
||||
|
||||
char ptydev[PTYNAMELEN+1]; /* PTY (master) name */
|
||||
char ttydev[PTYNAMELEN+1]; /* TTY (slave) name */
|
||||
};
|
||||
|
||||
/* creates a new pseudo-TTY (PTY) and also a new process attached to
|
||||
* it to execute the command line contained in array ARGV.
|
||||
* The PTY details are stored in the PTY structure PTYP.
|
||||
* ERRFD is the file descriptor to which the STDERR output of the
|
||||
* child process is directed.
|
||||
* If ERRFD == -1, then the STDERR output is redirected to STDOUT.
|
||||
* If ERRFD == -2, then a new pipe is created and STDERR is redirected
|
||||
* through it.
|
||||
* If NOBLOCK is true, enable non-blocking I/O on PTY.
|
||||
* If NOECHO is true, tty echoing is turned off.
|
||||
* If NOEXPORT is true, then the current environment is not exported
|
||||
* to the new process.
|
||||
* If DEBUG is true, debugging messages are printed to STDERR.
|
||||
* Returns 0 on success and -1 on error.
|
||||
*/
|
||||
int pty_create(struct ptys *ptyp, char *const argv[],
|
||||
int errfd, int noblock, int noecho, int noexport, int debug);
|
||||
|
||||
/* resizes the PTY, returning 0 on success and -1 on error */
|
||||
int pty_resize(struct ptys *ptyp, int rows, int cols,
|
||||
int xpix, int ypix);
|
||||
|
||||
/* closes the PTY and kills the associated child process, if still alive.
|
||||
* Also close STDERR pipe, if open.
|
||||
* Returns 0 on success and -1 on error.
|
||||
*/
|
||||
int pty_close(struct ptys *ptyp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _PTYSTREAM_H */
|
||||
205
mozilla/extensions/xmlterm/base/tracelog.c
Normal file
205
mozilla/extensions/xmlterm/base/tracelog.c
Normal file
@@ -0,0 +1,205 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* tracelog.c: Tracing/logging module implementation
|
||||
*/
|
||||
|
||||
/* public declarations */
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "unistring.h"
|
||||
#include "tracelog.h"
|
||||
|
||||
/* private declarations */
|
||||
|
||||
/* TRACELOG global variable structure */
|
||||
TlogGlobal tlogGlobal;
|
||||
|
||||
/** Initializes all TRACELOG operations and sets filestream for trace/log
|
||||
* output. Setting filestream to NULL suppresses all output.
|
||||
* (documented in tracelog.h)
|
||||
*/
|
||||
void tlog_init(FILE* fileStream)
|
||||
{
|
||||
int imodule;
|
||||
|
||||
fprintf(stderr, "tlog_init:\n");
|
||||
|
||||
/* Error output stream */
|
||||
tlogGlobal.errorStream = fileStream;
|
||||
|
||||
/* Debugging is disabled initially */
|
||||
tlogGlobal.debugOn = 0;
|
||||
|
||||
for (imodule=0; imodule<TLOG_MAXMODULES; imodule++) {
|
||||
tlogGlobal.messageLevel[imodule] = 0;
|
||||
tlogGlobal.functionList[imodule] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** Sets TRACELOG display levels for module IMODULE
|
||||
* (documented in tracelog.h)
|
||||
* @return 0 on success, or -1 on error.
|
||||
*/
|
||||
int tlog_set_level(int imodule, int messageLevel, const char *functionList)
|
||||
{
|
||||
int j;
|
||||
|
||||
fprintf(stderr, "tlog_set_level:%d, %d\n", imodule, messageLevel);
|
||||
|
||||
if ((imodule < 0) || (imodule >= TLOG_MAXMODULES))
|
||||
return -1;
|
||||
|
||||
/* Message level */
|
||||
tlogGlobal.messageLevel[imodule] = messageLevel;
|
||||
|
||||
if (messageLevel > 0) {
|
||||
tlog_warning("tlog_set_level: module %d, messageLevel=%d\n",
|
||||
imodule, messageLevel);
|
||||
}
|
||||
|
||||
/* Free function list string */
|
||||
free(tlogGlobal.functionList[imodule]);
|
||||
|
||||
if (functionList == NULL) {
|
||||
tlogGlobal.functionList[imodule] = NULL;
|
||||
|
||||
} else {
|
||||
/* Duplicate function list string */
|
||||
int slen = strlen(functionList);
|
||||
char *stem;
|
||||
|
||||
if (slen > 1000) slen = 1000;
|
||||
|
||||
stem = malloc((unsigned int) slen+3);
|
||||
strncpy(&stem[1], functionList, (unsigned int) slen);
|
||||
stem[0] = ':';
|
||||
stem[slen+1] = ':';
|
||||
stem[slen+2] = '\0';
|
||||
|
||||
tlogGlobal.functionList[imodule] = stem;
|
||||
|
||||
if (messageLevel > 0) {
|
||||
tlog_warning("tlog_set_level: module %d, functionList=\"%s\"\n",
|
||||
imodule, tlogGlobal.functionList[imodule]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Turn on debugging only if needed */
|
||||
tlogGlobal.debugOn = 0;
|
||||
|
||||
if (tlogGlobal.errorStream != NULL) {
|
||||
for (j=0; j<TLOG_MAXMODULES; j++) {
|
||||
if ((tlogGlobal.messageLevel[j] > 0) ||
|
||||
(tlogGlobal.functionList != NULL))
|
||||
tlogGlobal.debugOn = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Determines whether trace/log message is to be displayed for specified
|
||||
* module at specified message level.
|
||||
* @return 1 (true) if message should be displayed, 0 otherwise
|
||||
*/
|
||||
int tlog_test(int imodule, char *procstr, int level)
|
||||
{
|
||||
if (tlogGlobal.errorStream == NULL)
|
||||
return 0;
|
||||
|
||||
if ((imodule < 0) || (imodule >= TLOG_MAXMODULES))
|
||||
return 0;
|
||||
|
||||
if ( (level%10 <= tlogGlobal.messageLevel[imodule]%10) &&
|
||||
( (level <= tlogGlobal.messageLevel[imodule]) ||
|
||||
((tlogGlobal.functionList[imodule] != NULL) &&
|
||||
( (strstr(tlogGlobal.functionList[imodule],procstr) != NULL) ||
|
||||
(strstr(procstr,tlogGlobal.functionList[imodule]) != NULL)) ) )) {
|
||||
/* Display message */
|
||||
fprintf(tlogGlobal.errorStream, "%s%2d: ", procstr, level);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Displays an error message on the TRACELOG filestream */
|
||||
void tlog_message(const char *format, ...)
|
||||
{
|
||||
va_list ap; /* pointer to variable length argument list */
|
||||
|
||||
if (tlogGlobal.errorStream == NULL)
|
||||
return;
|
||||
|
||||
va_start(ap, format); /* make ap point to first unnamed arg */
|
||||
vfprintf(tlogGlobal.errorStream, format, ap);
|
||||
va_end(ap); /* clean up */
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/** Displays a warning message on the TRACELOG filestream */
|
||||
void tlog_warning(const char *format, ...)
|
||||
{
|
||||
va_list ap; /* pointer to variable length argument list */
|
||||
|
||||
if ((tlogGlobal.errorStream == NULL) || !tlogGlobal.debugOn)
|
||||
return;
|
||||
|
||||
va_start(ap, format); /* make ap point to first unnamed arg */
|
||||
vfprintf(tlogGlobal.errorStream, format, ap);
|
||||
va_end(ap); /* clean up */
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
#ifdef _UNISTRING_H
|
||||
#define MAXCOL 1024 /* Maximum columns in line buffer */
|
||||
|
||||
/** Displays an Unicode message on the TRACELOG filestream */
|
||||
void tlog_unichar(const UNICHAR *buf, int count)
|
||||
{
|
||||
if (tlogGlobal.errorStream == NULL)
|
||||
return;
|
||||
|
||||
fprintf(tlogGlobal.errorStream, "U(%d): ", count);
|
||||
|
||||
ucsprint(tlogGlobal.errorStream, buf, count);
|
||||
|
||||
fprintf(tlogGlobal.errorStream, "\n");
|
||||
}
|
||||
#endif
|
||||
154
mozilla/extensions/xmlterm/base/tracelog.h
Normal file
154
mozilla/extensions/xmlterm/base/tracelog.h
Normal file
@@ -0,0 +1,154 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* tracelog.h: Tracing/logging module header
|
||||
* CPP options:
|
||||
* DEBUG: to enable debugging output
|
||||
* _UNISTRING_H: for unicode messages compatible with "unistring.h"
|
||||
*/
|
||||
|
||||
#ifndef _TRACELOG_H
|
||||
|
||||
#define _TRACELOG_H 1
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Trace/log macros (to be used after call to tlog_init to initialize):
|
||||
* TLOG_ERROR: error message macro, e.g.,
|
||||
* TLOG_ERROR(format, val1, val2);
|
||||
* TOG_WARNING: warning message macro, e.g.,
|
||||
* TLOG_WARNING(format, val1, val2);
|
||||
* TLOG_PRINT: message logging macro, e.g., (no terminating semicolon)
|
||||
* TLOG_PRINT(10,(format, val1, val2));
|
||||
* (if UNISTRING module is being used)
|
||||
* TLOG_UNICHAR: Unicode string logging macro, e.g., (no terminating semicolon)
|
||||
* TLOG_UNICHAR(10,(label,str,count));
|
||||
*/
|
||||
|
||||
/* Max. number of modules recognized by TRACELOG */
|
||||
# define TLOG_MAXMODULES 50
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Initializes all TRACELOG operations;
|
||||
* needs to be called before any other trace/log calls.
|
||||
*
|
||||
* FILESTREAM is the file stream to be used to print messages.
|
||||
*
|
||||
* Normally, only error messages are sent to FILESTREAM.
|
||||
* If FILESTREAM is null, all output, including error output, is suppressed.
|
||||
*/
|
||||
|
||||
void tlog_init(FILE* fileStream);
|
||||
|
||||
/** Set diagnostic message display level for module no. IMODULE.
|
||||
* (0 <= IMODULE < TLOG_MAXMODULES)
|
||||
*
|
||||
* MESSAGELEVEL (>=0) specifies the diagnostic message display level:
|
||||
* only diagnostic messages with level values >= MESSAGELEVEL are printed
|
||||
* (For example, level 10, 11, ...: outermost level;
|
||||
* level 20, 21, ...: next inner level;
|
||||
* ...
|
||||
* level 50, 51, ...: innermost level)
|
||||
*
|
||||
* The message SUBLEVEL threshold is defined as MESSAGELEVEL%10
|
||||
* (ranging from 0 to 9).
|
||||
* Only those diagnostic messages with sublevel values >= SUBLEVEL threshold
|
||||
* are displayed
|
||||
* Usually, the SUBLEVEL threshold values are interpreted as
|
||||
* 0 => print single message per selected procedure.
|
||||
* 1...9 => print only messages upto selected sublevel.
|
||||
*
|
||||
* Setting MESSAGELEVEL to zero and FUNCTIONLIST to null for all modules
|
||||
* disables debugging and printing of warning messages.
|
||||
* (This is the initial configuration following the call to lterm_init.)
|
||||
* Setting MESSAGELEVEL to 1 for atleast one module enables debugging and
|
||||
* causes warning messages for all modules to be printed.
|
||||
*
|
||||
* FUNCTIONLIST is a colon-separated string of function names, e.g.,
|
||||
* "func_a:func_b".
|
||||
* Trace/log messages for functions in this list are always output
|
||||
* if debugging is enabled provided the sublevel values exceed the threshold,
|
||||
* regardless of full message level values.
|
||||
* If FUNCTIONLIST contains a single method name without a class name, or a
|
||||
* class name without a method name, then the missing portion is assumed
|
||||
* to be wild-carded.
|
||||
*
|
||||
* Returns 0 on success, -1 otherwise (i.e., for invalid module numbers)
|
||||
*/
|
||||
|
||||
int tlog_set_level(int imodule, int messageLevel, const char *functionList);
|
||||
|
||||
int tlog_test(int imodule, char *procname, int level);
|
||||
void tlog_message(const char *format, ...);
|
||||
void tlog_warning(const char *format, ...);
|
||||
|
||||
/* TRACELOG global variables */
|
||||
typedef struct {
|
||||
FILE *errorStream; /* file stream for logging */
|
||||
int debugOn;
|
||||
int messageLevel[TLOG_MAXMODULES];
|
||||
char *functionList[TLOG_MAXMODULES]; /* list of functions to be debugged */
|
||||
} TlogGlobal;
|
||||
|
||||
extern TlogGlobal tlogGlobal;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#define TLOG_ERROR tlog_message
|
||||
|
||||
#define TLOG_WARNING tlog_warning
|
||||
|
||||
#define TLOG_PRINT(imodule,procname,level,args) \
|
||||
do { \
|
||||
if (tlogGlobal.debugOn && tlog_test(imodule,":" #procname ":",level)) { \
|
||||
tlog_message args; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#ifdef _UNISTRING_H
|
||||
void tlog_unichar(const UNICHAR *buf, int count);
|
||||
|
||||
#define TLOG_UNICHAR(imodule,procname,level,args) \
|
||||
do { \
|
||||
if (tlogGlobal.debugOn && tlog_test(imodule,":" #procname ":",level)) { \
|
||||
tlog_unichar args; \
|
||||
} \
|
||||
} while(0)
|
||||
#endif
|
||||
|
||||
#endif /* _TRACELOG_H */
|
||||
186
mozilla/extensions/xmlterm/base/unistring.c
Normal file
186
mozilla/extensions/xmlterm/base/unistring.c
Normal file
@@ -0,0 +1,186 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* unistring.c: Unicode string operations implementation */
|
||||
|
||||
/* public declarations */
|
||||
#include "unistring.h"
|
||||
|
||||
/* private declarations */
|
||||
|
||||
/** Encodes Unicode string US with NUS characters into UTF8 string S with
|
||||
* upto NS characters, returning the number of REMAINING Unicode characters
|
||||
* and the number of ENCODED Utf8 characters
|
||||
*/
|
||||
void ucstoutf8(const UNICHAR* us, int nus, char* s, int ns,
|
||||
int* remaining, int* encoded)
|
||||
{
|
||||
int j, k;
|
||||
|
||||
j = 0;
|
||||
k = 0;
|
||||
while ((j < ns) && (k < nus)) {
|
||||
UNICHAR uch = us[k++];
|
||||
|
||||
if (uch < 0x0080) {
|
||||
s[j++] = uch;
|
||||
|
||||
} else if (uch < 0x0800) {
|
||||
if (j >= ns-1) break;
|
||||
s[j++] = ((uch & 0x07C0) >> 6) | 0xC0;
|
||||
s[j++] = (uch & 0x003F) | 0x80;
|
||||
|
||||
} else {
|
||||
if (j >= ns-2) break;
|
||||
s[j++] = ((uch & 0xF000) >> 12) | 0xE0;
|
||||
s[j++] = ((uch & 0x0FC0) >> 6) | 0x80;
|
||||
s[j++] = (uch & 0x003F) | 0x80;
|
||||
}
|
||||
}
|
||||
|
||||
if (remaining)
|
||||
*remaining = nus - k;
|
||||
|
||||
if (encoded)
|
||||
*encoded = j;
|
||||
}
|
||||
|
||||
|
||||
/** Decodes UTF8 string S with NS characters to Unicode string US with
|
||||
* upto NUS characters, returning the number of REMAINING Utf8 characters
|
||||
* and the number of DECODED Unicode characters.
|
||||
* If skipNUL is non-zero, NUL input characters are skipped.
|
||||
* returns 0 if successful,
|
||||
* -1 if an error occurred during decoding
|
||||
*/
|
||||
int utf8toucs(const char* s, int ns, UNICHAR* us, int nus,
|
||||
int skipNUL, int* remaining, int* decoded)
|
||||
{
|
||||
int j, k;
|
||||
int retcode = 0;
|
||||
|
||||
j = 0;
|
||||
k = 0;
|
||||
while ((j < ns) && (k < nus)) {
|
||||
char ch = s[j];
|
||||
|
||||
if (0x80 & ch) {
|
||||
if (0x40 & ch) {
|
||||
if (0x20 & ch) {
|
||||
/* consume 3 */
|
||||
if (j >= ns-2) break;
|
||||
|
||||
if ( (s[j+1] & 0x40) || !(s[j+1] & 0x80) ||
|
||||
(s[j+2] & 0x40) || !(s[j+2] & 0x80) ) {
|
||||
retcode = -1;
|
||||
}
|
||||
|
||||
us[k++] = ((ch & 0x0F) << 12)
|
||||
| ((s[j+1] & 0x3F) << 6)
|
||||
| ( s[j+2] & 0x3F);
|
||||
|
||||
j += 3;
|
||||
|
||||
} else {
|
||||
/* consume 2 */
|
||||
if (j >= ns-1) break;
|
||||
|
||||
if ( (s[j+1] & 0x40) || !(s[j+1] & 0x80) ) {
|
||||
retcode = -1;
|
||||
}
|
||||
|
||||
us[k++] = ((ch & 0x1F) << 6)
|
||||
| ( s[j+1] & 0x3F);
|
||||
j += 2;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* consume 1 (error) */
|
||||
retcode = -1;
|
||||
j++;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* consume 1 */
|
||||
if (ch || !skipNUL) {
|
||||
us[k++] = ch;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
if (remaining)
|
||||
*remaining = ns - j;
|
||||
|
||||
if (decoded)
|
||||
*decoded = k;
|
||||
|
||||
return retcode;
|
||||
}
|
||||
|
||||
|
||||
/** Prints Unicode string US with NUS characters to file stream STREAM,
|
||||
* escaping non-printable ASCII characters and all non-ASCII characters
|
||||
*/
|
||||
void ucsprint(FILE* stream, const UNICHAR* us, int nus)
|
||||
{
|
||||
static const char hexDigits[17] = "0123456789abcdef";
|
||||
UNICHAR uch;
|
||||
int k;
|
||||
|
||||
for (k=0; k<nus; k++) {
|
||||
uch = us[k];
|
||||
|
||||
if (uch < U_SPACE) {
|
||||
/* ASCII control character */
|
||||
fprintf(stream, "^%c", (char) uch+U_ATSIGN);
|
||||
|
||||
} else if (uch == U_CARET) {
|
||||
/* Caret */
|
||||
fprintf(stream, "^^");
|
||||
|
||||
} else if (uch < U_DEL) {
|
||||
/* Printable ASCII character */
|
||||
fprintf(stream, "%c", (char) uch);
|
||||
|
||||
} else {
|
||||
/* DEL or non-ASCII character */
|
||||
char esc_str[8]="�";
|
||||
int j;
|
||||
for (j=5; j>1; j--) {
|
||||
esc_str[j] = hexDigits[uch%16];
|
||||
uch = uch / 16;
|
||||
}
|
||||
fprintf(stream, "%s", esc_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
277
mozilla/extensions/xmlterm/base/unistring.h
Normal file
277
mozilla/extensions/xmlterm/base/unistring.h
Normal file
@@ -0,0 +1,277 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* unistring.h: Unicode string operations header
|
||||
* (used by lineterm.h)
|
||||
* CPP options:
|
||||
* HAVE_WCSWCS: define is function wcswcs is available
|
||||
* HAVE_WCSSTR: define is function wcsstr is available
|
||||
*/
|
||||
|
||||
#ifndef _UNISTRING_H
|
||||
|
||||
#define _UNISTRING_H 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _WCHAR_H
|
||||
#include "wchar.h"
|
||||
#endif
|
||||
|
||||
#ifndef _STDIO_H
|
||||
#include "stdio.h"
|
||||
#endif
|
||||
|
||||
/* Unicode character type:
|
||||
* Uses the wchar_t implementation for moment.
|
||||
* Later we might implement a 16-bit UNICHAR type to save space
|
||||
*/
|
||||
|
||||
typedef wchar_t UNICHAR;
|
||||
|
||||
/* Unicode string functions:
|
||||
* use the wchar_t implementation for moment
|
||||
*/
|
||||
|
||||
/** Encodes Unicode string US with NUS characters into UTF8 string S with
|
||||
* upto NS characters, returning the number of REMAINING Unicode characters
|
||||
* and the number of ENCODED Utf8 characters
|
||||
*/
|
||||
void ucstoutf8(const UNICHAR* us, int nus, char* s, int ns,
|
||||
int* remaining, int* encoded);
|
||||
|
||||
/** Decodes UTF8 string S with NS characters to Unicode string US with
|
||||
* upto NUS characters, returning the number of REMAINING Utf8 characters
|
||||
* and the number of DECODED Unicode characters.
|
||||
* If skipNUL is non-zero, NUL input characters are skipped.
|
||||
* returns 0 if successful,
|
||||
* -1 if an error occurred during decoding
|
||||
*/
|
||||
int utf8toucs(const char* s, int ns, UNICHAR* us, int nus,
|
||||
int skipNUL, int* remaining, int* decoded);
|
||||
|
||||
/** Prints Unicode string US with NUS characters to file stream STREAM,
|
||||
* escaping non-printable ASCII characters and all non-ASCII characters
|
||||
*/
|
||||
void ucsprint(FILE* stream, const UNICHAR* us, int nus);
|
||||
|
||||
#define ucscpy wcscpy
|
||||
#define ucsncpy wcsncpy
|
||||
|
||||
#define ucscat wcscat
|
||||
#define ucsncat wcsncat
|
||||
|
||||
#define ucscmp wcscmp
|
||||
#define ucsncmp wcsncmp
|
||||
|
||||
#define ucschr wcschr
|
||||
#define ucsrchr wcsrchr
|
||||
|
||||
#define ucsspn wcsspn
|
||||
#define ucscspn wcscspn
|
||||
|
||||
#define ucspbrk wcspbrk
|
||||
|
||||
#ifdef HAVE_WCSWCS
|
||||
#define ucsucs wcswcs
|
||||
#else
|
||||
#ifdef HAVE_WCSSTR
|
||||
#define ucsucs wcsstr
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define ucslen wcslen
|
||||
|
||||
#define ucstok wcstok
|
||||
|
||||
|
||||
/* unsigned short constants */
|
||||
|
||||
#define U_NUL 0x00U
|
||||
|
||||
#define U_CTL_A 0x01U
|
||||
#define U_CTL_B 0x02U
|
||||
#define U_CTL_C 0x03U
|
||||
#define U_CTL_D 0x04U
|
||||
#define U_CTL_E 0x05U
|
||||
#define U_CTL_F 0x06U
|
||||
|
||||
#define U_BEL 0x07U /* ^G */
|
||||
#define U_BACKSPACE 0x08U /* ^H */
|
||||
#define U_TAB 0x09U /* ^I */
|
||||
#define U_LINEFEED 0x0AU /* ^J */
|
||||
|
||||
#define U_CTL_K 0x0BU
|
||||
#define U_CTL_L 0x0CU
|
||||
|
||||
#define U_CRETURN 0x0DU /* ^M */
|
||||
|
||||
#define U_CTL_N 0x0EU
|
||||
#define U_CTL_O 0x0FU
|
||||
#define U_CTL_P 0x10U
|
||||
#define U_CTL_Q 0x11U
|
||||
#define U_CTL_R 0x12U
|
||||
#define U_CTL_S 0x13U
|
||||
#define U_CTL_T 0x14U
|
||||
#define U_CTL_U 0x15U
|
||||
#define U_CTL_V 0x16U
|
||||
#define U_CTL_W 0x17U
|
||||
#define U_CTL_X 0x18U
|
||||
#define U_CTL_Y 0x19U
|
||||
#define U_CTL_Z 0x1AU
|
||||
|
||||
#define U_ESCAPE 0x1BU /* escape */
|
||||
|
||||
#define U_SPACE 0x20U /* space */
|
||||
#define U_EXCLAMATION 0x21U /* ! */
|
||||
#define U_DBLQUOTE 0x22U /* " */
|
||||
#define U_NUMBER 0x23U /* # */
|
||||
#define U_DOLLAR 0x24U /* $ */
|
||||
#define U_PERCENT 0x25U /* % */
|
||||
#define U_AMPERSAND 0x26U /* & */
|
||||
#define U_SNGLQUOTE 0x27U /* ' */
|
||||
#define U_LPAREN 0x28U /* ( */
|
||||
#define U_RPAREN 0x29U /* ) */
|
||||
|
||||
#define U_STAR 0x2AU /* * */
|
||||
#define U_PLUS 0x2BU /* + */
|
||||
#define U_COMMA 0x2CU /* , */
|
||||
#define U_DASH 0x2DU /* - */
|
||||
#define U_PERIOD 0x2EU /* . */
|
||||
#define U_SLASH 0x2FU /* / */
|
||||
|
||||
#define U_ZERO 0x30U /* 0 */
|
||||
#define U_ONE 0x31U /* 1 */
|
||||
#define U_TWO 0x32U /* 2 */
|
||||
#define U_THREE 0x33U /* 3 */
|
||||
#define U_FOUR 0x34U /* 4 */
|
||||
#define U_FIVE 0x35U /* 5 */
|
||||
#define U_SIX 0x36U /* 6 */
|
||||
#define U_SEVEN 0x37U /* 7 */
|
||||
#define U_EIGHT 0x38U /* 8 */
|
||||
#define U_NINE 0x39U /* 9 */
|
||||
|
||||
#define U_COLON 0x3AU /* : */
|
||||
#define U_SEMICOLON 0x3BU /* ; */
|
||||
#define U_LESSTHAN 0x3CU /* < */
|
||||
#define U_EQUALS 0x3DU /* = */
|
||||
#define U_GREATERTHAN 0x3EU /* > */
|
||||
#define U_QUERYMARK 0x3FU /* ? */
|
||||
|
||||
#define U_ATSIGN 0x40U /* @ */
|
||||
|
||||
#define U_A_CHAR 0x41U /* A */
|
||||
#define U_B_CHAR 0x42U /* B */
|
||||
#define U_C_CHAR 0x43U /* C */
|
||||
#define U_D_CHAR 0x44U /* D */
|
||||
#define U_E_CHAR 0x45U /* E */
|
||||
#define U_F_CHAR 0x46U /* F */
|
||||
#define U_G_CHAR 0x47U /* G */
|
||||
#define U_H_CHAR 0x48U /* H */
|
||||
#define U_I_CHAR 0x49U /* I */
|
||||
#define U_J_CHAR 0x4AU /* J */
|
||||
#define U_K_CHAR 0x4BU /* K */
|
||||
#define U_L_CHAR 0x4CU /* L */
|
||||
#define U_M_CHAR 0x4DU /* M */
|
||||
#define U_N_CHAR 0x4EU /* N */
|
||||
#define U_O_CHAR 0x4FU /* O */
|
||||
#define U_P_CHAR 0x50U /* P */
|
||||
#define U_Q_CHAR 0x51U /* Q */
|
||||
#define U_R_CHAR 0x52U /* R */
|
||||
#define U_S_CHAR 0x53U /* S */
|
||||
#define U_T_CHAR 0x54U /* T */
|
||||
#define U_U_CHAR 0x55U /* U */
|
||||
#define U_V_CHAR 0x56U /* V */
|
||||
#define U_W_CHAR 0x57U /* W */
|
||||
#define U_X_CHAR 0x58U /* X */
|
||||
#define U_Y_CHAR 0x59U /* Y */
|
||||
#define U_Z_CHAR 0x5AU /* Z */
|
||||
|
||||
#define U_LBRACKET 0x5BU /* [ */
|
||||
#define U_BACKSLASH 0x5CU /* \ */
|
||||
#define U_RBRACKET 0x5DU /* ] */
|
||||
|
||||
#define U_CARET 0x5EU /* ^ */
|
||||
#define U_UNDERSCORE 0x5FU /* _ */
|
||||
#define U_BACKQUOTE 0x60U /* ` */
|
||||
|
||||
#define U_a_CHAR 0x61U /* a */
|
||||
#define U_b_CHAR 0x62U /* b */
|
||||
#define U_c_CHAR 0x63U /* c */
|
||||
#define U_d_CHAR 0x64U /* d */
|
||||
#define U_e_CHAR 0x65U /* e */
|
||||
#define U_f_CHAR 0x66U /* f */
|
||||
#define U_g_CHAR 0x67U /* g */
|
||||
#define U_h_CHAR 0x68U /* h */
|
||||
#define U_i_CHAR 0x69U /* i */
|
||||
#define U_j_CHAR 0x6AU /* j */
|
||||
#define U_k_CHAR 0x6BU /* k */
|
||||
#define U_l_CHAR 0x6CU /* l */
|
||||
#define U_m_CHAR 0x6DU /* m */
|
||||
#define U_n_CHAR 0x6EU /* n */
|
||||
#define U_o_CHAR 0x6FU /* o */
|
||||
#define U_p_CHAR 0x70U /* p */
|
||||
#define U_q_CHAR 0x71U /* q */
|
||||
#define U_r_CHAR 0x72U /* r */
|
||||
#define U_s_CHAR 0x73U /* s */
|
||||
#define U_t_CHAR 0x74U /* t */
|
||||
#define U_u_CHAR 0x75U /* u */
|
||||
#define U_v_CHAR 0x76U /* v */
|
||||
#define U_w_CHAR 0x77U /* w */
|
||||
#define U_x_CHAR 0x78U /* x */
|
||||
#define U_y_CHAR 0x79U /* y */
|
||||
#define U_z_CHAR 0x7AU /* z */
|
||||
|
||||
#define U_LCURLY 0x7BU /* { */
|
||||
#define U_VERTBAR 0x7CU /* | */
|
||||
#define U_RCURLY 0x7DU /* } */
|
||||
|
||||
#define U_TILDE 0x7EU /* ~ */
|
||||
#define U_DEL 0x7FU /* delete */
|
||||
|
||||
#define U_LATIN1LO 0xA0U /* lowest Latin1 extension character */
|
||||
#define U_NOBRKSPACE 0xA0U /* no-break space */
|
||||
#define U_LATIN1HI 0xFFU /* highest Latin1 extension character */
|
||||
|
||||
#define IS_ASCII_LETTER(x) ( (((x) >= U_A_CHAR) && ((x) <= U_Z_CHAR)) || \
|
||||
(((x) >= U_a_CHAR) && ((x) <= U_z_CHAR)) )
|
||||
|
||||
#define IS_ASCII_DIGIT(x) ( ((x) >= U_ZERO) && ((x) <= U_NINE) )
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _UNISTRING_H */
|
||||
1
mozilla/extensions/xmlterm/config/README
Normal file
1
mozilla/extensions/xmlterm/config/README
Normal file
@@ -0,0 +1 @@
|
||||
config --- Configuration info and Make rules
|
||||
47
mozilla/extensions/xmlterm/config/autoconf.mk
Normal file
47
mozilla/extensions/xmlterm/config/autoconf.mk
Normal file
@@ -0,0 +1,47 @@
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# autoconf.mk: autoconf info for stand-alone LineTerm only
|
||||
|
||||
# C compiler
|
||||
CC = gcc
|
||||
|
||||
# C++ compiler
|
||||
CXX = c++
|
||||
|
||||
# Library archive creation command
|
||||
AR = ar cr $@
|
||||
|
||||
OS_INCLUDES =
|
||||
OS_CFLAGS =
|
||||
OS_CXXFLAGS =
|
||||
OS_LDFLAGS =
|
||||
93
mozilla/extensions/xmlterm/config/config.mk
Normal file
93
mozilla/extensions/xmlterm/config/config.mk
Normal file
@@ -0,0 +1,93 @@
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# config.mk: config info for stand-alone LineTerm only
|
||||
|
||||
# Options
|
||||
# DEBUG: debug option
|
||||
|
||||
# OS details
|
||||
OS_ARCH := $(subst /,_,$(shell uname -s))
|
||||
OS_RELEASE := $(shell uname -r)
|
||||
|
||||
ifneq (,$(filter Linux SunOS,$(OS_ARCH)))
|
||||
OS_VERS := $(suffix $(OS_RELEASE))
|
||||
OS_RELEASE := $(basename $(OS_RELEASE))
|
||||
endif
|
||||
|
||||
OS_CONFIG := $(OS_ARCH)$(OS_RELEASE)
|
||||
|
||||
ifeq ($(OS_ARCH),Linux)
|
||||
LIB_SUFFIX = a
|
||||
RANLIB = /usr/bin/ranlib
|
||||
endif
|
||||
|
||||
ifeq ($(OS_CONFIG),SunOS5)
|
||||
LIB_SUFFIX = a
|
||||
RANLIB = /bin/true
|
||||
endif
|
||||
|
||||
# C++ compiler
|
||||
CCC = $(CXX)
|
||||
|
||||
# OS flags
|
||||
OS_CFLAGS += $(PLATFORM_FLAGS)
|
||||
OS_CXXFLAGS += $(PLATFORM_FLAGS)
|
||||
OS_LDFLAGS +=
|
||||
|
||||
# Object directory
|
||||
OBJDIR = lib
|
||||
|
||||
# Library directory
|
||||
LIBS_DIR = -L$(topsrcdir)/dist/$(OBJDIR)
|
||||
|
||||
# Distribution includes
|
||||
LOCAL_INCLUDES += -I$(topsrcdir)/dist/include
|
||||
|
||||
# NSPR libraries
|
||||
NSPR_LIBS = -lnspr3
|
||||
|
||||
#
|
||||
# Debug option
|
||||
#
|
||||
ifdef DEBUG
|
||||
OPTIMIZER = -g
|
||||
DEFINES += -DDEBUG
|
||||
else
|
||||
OPTIMIZER =
|
||||
endif
|
||||
|
||||
INCLUDES = $(LOCAL_INCLUDES) $(OS_INCLUDES)
|
||||
|
||||
CFLAGS = $(OPTIMIZER) $(OS_CFLAGS) $(DEFINES) $(INCLUDES)
|
||||
CXXFLAGS = $(OPTIMIZER) $(OS_CXXFLAGS) $(DEFINES) $(INCLUDES)
|
||||
LDFLAGS = $(OS_LDFLAGS)
|
||||
157
mozilla/extensions/xmlterm/config/rules.mk
Normal file
157
mozilla/extensions/xmlterm/config/rules.mk
Normal file
@@ -0,0 +1,157 @@
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# rules.mk: Make rules for stand-alone LineTerm only
|
||||
|
||||
# CAUTION: Dependency checking is very limited.
|
||||
# For compilation, the only dependencies are on *.h files in the current
|
||||
# directory and in the distribution include directory.
|
||||
# When creating executables, there is additional dependency on
|
||||
# all *.a files in the distribution object directory.
|
||||
|
||||
ifndef LIBRARY
|
||||
ifdef LIBRARY_NAME
|
||||
LIBRARY := lib$(LIBRARY_NAME).$(LIB_SUFFIX)
|
||||
endif # LIBRARY_NAME
|
||||
endif # LIBRARY
|
||||
|
||||
ifdef PROGRAM
|
||||
PROGRAM := $(addprefix $(OBJDIR)/, $(PROGRAM))
|
||||
endif
|
||||
|
||||
ifdef SIMPLE_PROGRAMS
|
||||
SIMPLE_PROGRAMS := $(addprefix $(OBJDIR)/, $(SIMPLE_PROGRAMS))
|
||||
endif
|
||||
|
||||
ifdef LIBRARY
|
||||
LIBRARY := $(addprefix $(OBJDIR)/, $(LIBRARY))
|
||||
endif
|
||||
|
||||
ifndef OBJS
|
||||
OBJS = $(CSRCS:.c=.o) $(CPPSRCS:.cpp=.o)
|
||||
endif
|
||||
|
||||
OBJS := $(addprefix $(OBJDIR)/, $(OBJS))
|
||||
|
||||
ifdef DIRS
|
||||
LOOP_OVER_DIRS = \
|
||||
@for d in $(DIRS); do \
|
||||
if test -f $$d/Makefile; then \
|
||||
set -e; \
|
||||
echo "cd $$d; $(MAKE) $@"; \
|
||||
oldDir=`pwd`; \
|
||||
cd $$d; $(MAKE) $@; cd $$oldDir; \
|
||||
set +e; \
|
||||
else \
|
||||
echo "Skipping non-directory $$d..."; \
|
||||
fi; \
|
||||
done
|
||||
endif
|
||||
|
||||
ifndef PROGOBJS
|
||||
PROGOBJS = $(OBJS)
|
||||
endif
|
||||
|
||||
# Targets
|
||||
all: export libs progs
|
||||
|
||||
export: $(EXPORTS)
|
||||
ifneq (,$(EXPORTS))
|
||||
+for x in $^; do \
|
||||
rm $(topsrcdir)/dist/include/$$x; \
|
||||
echo ln -s `pwd`/$$x $(topsrcdir)/dist/include/$$x; \
|
||||
ln -s `pwd`/$$x $(topsrcdir)/dist/include/$$x; \
|
||||
done
|
||||
endif
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
libs: $(LIBRARY)
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
progs: $(SIMPLE_PROGRAMS)
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
clean:
|
||||
-rm $(OBJDIR)/*
|
||||
+$(LOOP_OVER_DIRS)
|
||||
|
||||
#
|
||||
# Turn on C++ linking if we have any .cpp files
|
||||
#
|
||||
ifdef CPPSRCS
|
||||
CPP_PROG_LINK = 1
|
||||
endif
|
||||
|
||||
# Create single executable program (with limited dependency checking)
|
||||
$(PROGRAM): $(PROGOBJS) $(wildcard $(topsrcdir)/dist/$(OBJDIR)/*.a)
|
||||
ifeq ($(CPP_PROG_LINK),1)
|
||||
$(CCC) -o $@ $(PROGOBJS) $(LDFLAGS) $(LIBS_DIR) $(LIBS))
|
||||
else
|
||||
$(CC) -o $@ $(PROGOBJS) $(LDFLAGS) $(LIBS_DIR) $(LIBS)
|
||||
endif
|
||||
|
||||
# Create multiple simple executable programs (with limited dependency checking)
|
||||
$(SIMPLE_PROGRAMS): $(OBJDIR)/%: $(OBJDIR)/%.o \
|
||||
$(wildcard $(topsrcdir)/dist/$(OBJDIR)/*.a)
|
||||
ifeq ($(CPP_PROG_LINK),1)
|
||||
$(CCC) -o $@ $< $(LDFLAGS) $(LIBS_DIR) $(LIBS))
|
||||
else
|
||||
$(CC) -o $@ $< $(LDFLAGS) $(LIBS_DIR) $(LIBS)
|
||||
endif
|
||||
|
||||
# Create library and export it
|
||||
$(LIBRARY): $(OBJS)
|
||||
$(AR) $(OBJS)
|
||||
$(RANLIB) $@
|
||||
-rm $(topsrcdir)/dist/$@
|
||||
ln -s `pwd`/$@ $(topsrcdir)/dist/$@
|
||||
|
||||
|
||||
# Compilation rules (with limited dependency checking)
|
||||
$(OBJDIR)/%.o: %.c $(wildcard *.h) $(wildcard $(topsrcdir)/dist/include/*.h)
|
||||
$(CC) -o $@ -c $(CFLAGS) $<
|
||||
|
||||
$(OBJDIR)/%.o: %.cpp $(wildcard *.h) $(wildcard $(topsrcdir)/dist/include/*.h)
|
||||
$(CCC) -o $@ -c $(CXXFLAGS) $<
|
||||
|
||||
|
||||
# Recognized suffixes
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .a .o .c .cpp .h .pl .class .java .html .mk .in
|
||||
|
||||
# Always recognized targets
|
||||
.PHONY: all clean clobber clobber_all export install libs
|
||||
|
||||
# OS configuration
|
||||
os_config:
|
||||
@echo "OS_ARCH = $(OS_ARCH), OS_CONFIG=$(OS_CONFIG)"
|
||||
@echo "OS_RELEASE=$(OS_RELEASE), OS_VERS=$(OS_VERS)"
|
||||
102
mozilla/extensions/xmlterm/config/xmlterm_config.mk
Normal file
102
mozilla/extensions/xmlterm/config/xmlterm_config.mk
Normal file
@@ -0,0 +1,102 @@
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# xmlterm_config.mk: XMLTERM-specific configuration options
|
||||
|
||||
# Options
|
||||
# STAND_ALONE: compile outside Mozilla/NSPR environment
|
||||
# DEBUG: debug option
|
||||
# NO_WORKAROUND: disables workarounds to expose bugs
|
||||
# USE_GTK_WIDGETS use GTK widget library
|
||||
# USE_NSPR_BASE: use basic NSPR API (excluding I/O and process creation)
|
||||
# USE_NSPR_IO: use NSPR I/O and process API instead of Unix API
|
||||
# NO_PTY: force use of pipes rather than PTY for process communication
|
||||
# NO_CALLBACK: do not use GTK callbacks to handle LineTerm output
|
||||
# (use polling instead)
|
||||
|
||||
ifdef NO_WORKAROUND
|
||||
DEFINES += -DNO_WORKAROUND
|
||||
endif
|
||||
|
||||
#
|
||||
# OS dependent options
|
||||
#
|
||||
ifneq (,$(filter-out Linux2.0 Linux2.2 SunOS5,$(OS_CONFIG)))
|
||||
# Unsupported platform for PTY; use pipes for process communication
|
||||
NO_PTY = 1
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH),Linux)
|
||||
DEFINES += -DLINUX -DHAVE_WCSSTR
|
||||
endif
|
||||
|
||||
ifeq ($(OS_CONFIG),SunOS5)
|
||||
DEFINES += -DSOLARIS -DHAVE_WCSWCS
|
||||
endif
|
||||
|
||||
ifeq ($(MOZ_WIDGET_TOOLKIT),gtk)
|
||||
USE_GTK_WIDGETS = 1
|
||||
endif
|
||||
|
||||
#
|
||||
# Netscape Portable Runtime options
|
||||
#
|
||||
ifndef STAND_ALONE
|
||||
# Use NSPR base
|
||||
USE_NSPR_BASE = 1
|
||||
endif
|
||||
|
||||
ifdef USE_GTK_WIDGETS
|
||||
DEFINES += -DUSE_GTK_WIDGETS
|
||||
else
|
||||
# No callback
|
||||
NO_CALLBACK = 1
|
||||
endif
|
||||
|
||||
ifdef USE_NSPR_IO
|
||||
DEFINES += -DUSE_NSPR_IO
|
||||
USE_NSPR_BASE = 1
|
||||
NO_CALLBACK = 1
|
||||
endif
|
||||
|
||||
ifdef USE_NSPR_BASE
|
||||
DEFINES += -DUSE_NSPR_BASE
|
||||
LIBS += $(NSPR_LIBS)
|
||||
endif
|
||||
|
||||
ifdef NO_PTY
|
||||
DEFINES += -DNO_PTY
|
||||
endif
|
||||
|
||||
ifdef NO_CALLBACK
|
||||
DEFINES += -DNO_CALLBACK
|
||||
endif
|
||||
1
mozilla/extensions/xmlterm/dist/README
vendored
Normal file
1
mozilla/extensions/xmlterm/dist/README
vendored
Normal file
@@ -0,0 +1 @@
|
||||
dist --- Include and library files for LineTerm only
|
||||
9
mozilla/extensions/xmlterm/doc/BUGS
Normal file
9
mozilla/extensions/xmlterm/doc/BUGS
Normal file
@@ -0,0 +1,9 @@
|
||||
Known bugs
|
||||
----------
|
||||
|
||||
10 Nov 1999
|
||||
|
||||
|
||||
1. Command line completion output duplicates command line
|
||||
|
||||
2. Early use of "xls -i" does not scroll properly
|
||||
31
mozilla/extensions/xmlterm/doc/FinalizeXPCOM
Normal file
31
mozilla/extensions/xmlterm/doc/FinalizeXPCOM
Normal file
@@ -0,0 +1,31 @@
|
||||
"Finalize tree" to break XPCOM cycles and have clean shutdowns
|
||||
--------------------------------------------------------------
|
||||
|
||||
XMLterm class embedding hierarchy
|
||||
=================================
|
||||
|
||||
mozXMLTermShell (or ../geckoterm/mozGeckoTerm)
|
||||
|
|
||||
|
|
||||
mozXMLTerminal
|
||||
+-----------------+----------------+
|
||||
| | |
|
||||
mozXMLTermSession mozLineTermAux mozXMLTermListeners
|
||||
| |
|
||||
| |
|
||||
mozXMLTermStream... (lineterm)
|
||||
|
||||
We would like to have clean shutdowns of an XMLterm, since we are using
|
||||
external resources, e.g., a shell process or an rlogin process. However, the
|
||||
XPCOM reference counting can hinder shutdowns, if there cycles. To avoid
|
||||
that, the XMLterm interfaces have a Finalize or Close method. A shutdown
|
||||
event triggers a call to the Finalize method of the root interface in the
|
||||
"Finalize tree". When the Finalize method of any interface is called, it
|
||||
first calls the Finalize methods of any child nodes in the Finalize tree, then
|
||||
releases all the XPCOM references it owns, de-initializes itself and quietly
|
||||
waits for its reference count to go to zero. In this "closed" state of the
|
||||
interface, any attempts use it result in an error return.
|
||||
|
||||
The destructor of an object simply checks if all its interfaces have been
|
||||
finalized, and calls the Finalize methods for any that have not been.
|
||||
--
|
||||
60
mozilla/extensions/xmlterm/doc/INSTALL.xmlterm
Normal file
60
mozilla/extensions/xmlterm/doc/INSTALL.xmlterm
Normal file
@@ -0,0 +1,60 @@
|
||||
XMLterm installation instructions for Linux binaries
|
||||
----------------------------------------------------
|
||||
|
||||
*NOTE* This work in progress. User beware!
|
||||
|
||||
*NOTE* Check the XMLterm web site <http://xmlterm.org> for updates.
|
||||
|
||||
19 Nov 1999
|
||||
|
||||
1. First obtain the Mozilla Linux binary tar file
|
||||
ftp://ftp.mozilla.org/pub/mozilla/releases/m11/mozilla-i686-pc-linux-gnu-M11.tar.gz"
|
||||
and untar it in any convenient location. This will create a
|
||||
directory named "package" containing the binaries.
|
||||
|
||||
2. Untar the XMLterm binary tar file "xmlterm-i686-pc-linux-gnu-M11.tar.gz"
|
||||
in the "package" directory created above.
|
||||
|
||||
3. Type the following command in the "package" directory:
|
||||
|
||||
./mozilla chrome://xmlterm/content/xmlterm.html
|
||||
|
||||
This should create an XMLTerm in the browser window. Then click on
|
||||
that window with the mouse to shift focus and start typing UNIX
|
||||
commands.
|
||||
|
||||
**NOTE**
|
||||
The command prompt is assumed to be terminated by one of the characters
|
||||
"#$%>?", followed by a space. If this is not the case, many features will
|
||||
not work. This restriction will be relaxed in the future.
|
||||
|
||||
4. To use the stand-alone XMLterm executable called "xmlterm",
|
||||
type the following command in the "package" directory:
|
||||
|
||||
./run-mozilla.sh xmlterm
|
||||
|
||||
(The Mozilla component registry may need to be updated by running the
|
||||
full browser using step 3 at least once before running "xmlterm".)
|
||||
|
||||
5. The command line can be edited using EMACS-style key bindings.
|
||||
Command completion should also work with TCSH and BASH, as should history
|
||||
recall.
|
||||
|
||||
6. By default, blue coloring is used to indicate clickable display elements.
|
||||
Note that the prompt and the input command line are clickable.
|
||||
(Of course, the appearance of XMLterm is completely configurable
|
||||
using the CSS stylesheet chrome://xmlterm/skin/default/xmlterm.css)
|
||||
|
||||
After typing one or two commands, click on the prompt string of any previous
|
||||
command to see what happens! Then click again on the same prompt string.
|
||||
Also click on "Hide all output" button at the top of the document.
|
||||
|
||||
Clicking on a previous command line (to the right of the prompt) re-executes
|
||||
the command.
|
||||
|
||||
7. The sample Perl script "xls", the iconic/hypertext version of the Unix
|
||||
"ls" command, is also installed in the "package" directory. Adding
|
||||
the "package" directory to your path should enable you to use the "xls"
|
||||
command.
|
||||
|
||||
--
|
||||
28
mozilla/extensions/xmlterm/doc/Implementation
Normal file
28
mozilla/extensions/xmlterm/doc/Implementation
Normal file
@@ -0,0 +1,28 @@
|
||||
Implementation issues
|
||||
---------------------
|
||||
|
||||
16 Sep 1999
|
||||
|
||||
- Slowness due to DOM reflows
|
||||
|
||||
- Cursor positioning problems
|
||||
|
||||
- Scrolling problems
|
||||
|
||||
- Finding a slot in the "Tasks/Tools" menu on the browser menu bar
|
||||
for an XMLterm menu with the following options:
|
||||
|
||||
shell
|
||||
rlogin
|
||||
telnet
|
||||
About XMLterm
|
||||
|
||||
This needs to be done using XUL overlays.
|
||||
|
||||
- Drag and drop implementation; integrating XMLterm with Gnome/KDE/CDE
|
||||
|
||||
- Full screen implementation; determining screen size
|
||||
|
||||
- Inline floating frames to display stream output
|
||||
|
||||
--
|
||||
602
mozilla/extensions/xmlterm/doc/MPL
Normal file
602
mozilla/extensions/xmlterm/doc/MPL
Normal file
@@ -0,0 +1,602 @@
|
||||
MOZILLA PUBLIC LICENSE
|
||||
Version 1.1
|
||||
---------
|
||||
|
||||
|
||||
1. Definitions.
|
||||
|
||||
1.0.1. "Commercial Use" means distribution or otherwise making
|
||||
the Covered Code available to a third party.
|
||||
|
||||
|
||||
1.1. ''Contributor'' means each entity that creates or
|
||||
contributes to the creation of Modifications.
|
||||
|
||||
|
||||
1.2. ''Contributor Version'' means the combination of the
|
||||
Original Code, prior Modifications used by a Contributor, and the
|
||||
Modifications made by that particular Contributor.
|
||||
|
||||
|
||||
1.3. ''Covered Code'' means the Original Code or Modifications or
|
||||
the combination
|
||||
|
||||
of the Original Code and Modifications, in each case including
|
||||
portions thereof.
|
||||
|
||||
1.4. ''Electronic Distribution Mechanism'' means a mechanism
|
||||
generally
|
||||
|
||||
accepted in the software development community for the electronic
|
||||
transfer of data.
|
||||
|
||||
1.5. ''Executable'' means Covered Code in any form other than
|
||||
Source Code.
|
||||
|
||||
1.6. ''Initial Developer'' means the individual or entity
|
||||
identified as the Initial Developer in the Source Code
|
||||
notice required by Exhibit A.
|
||||
|
||||
1.7. ''Larger Work'' means a work which combines Covered Code or
|
||||
portions thereof with code not governed by the terms of this
|
||||
License.
|
||||
|
||||
1.8. ''License'' means this document.
|
||||
|
||||
1.8.1. "Licensable" means having the right to grant, to the
|
||||
maximum extent possible, whether at the time of the initial grant
|
||||
or subsequently acquired, any and all of the rights conveyed
|
||||
herein.
|
||||
|
||||
1.9. ''Modifications'' means any addition to or deletion from the
|
||||
substance or structure of either the Original Code or any
|
||||
previous Modifications. When Covered Code is released as a series
|
||||
of files, a Modification is: A. Any addition to or deletion from
|
||||
the contents of a file containing Original Code or previous
|
||||
Modifications.
|
||||
|
||||
B. Any new file that contains any part of the Original Code
|
||||
or previous Modifications.
|
||||
|
||||
1.10. ''Original Code'' means Source Code of computer software
|
||||
code which is described in the Source Code notice required by
|
||||
Exhibit A as Original Code, and which, at the time of its release
|
||||
under this License is not already Covered Code governed by this
|
||||
License.
|
||||
|
||||
1.10.1. "Patent Claims" means any patent claim(s), now owned or
|
||||
hereafter acquired, including without limitation, method,
|
||||
process, and apparatus claims, in any patent Licensable by
|
||||
grantor.
|
||||
|
||||
1.11. ''Source Code'' means the preferred form of the Covered
|
||||
Code for making modifications to it, including all modules it
|
||||
contains, plus any associated interface definition files, scripts
|
||||
used to control compilation and installation of an Executable, or
|
||||
source code differential comparisons against either the Original
|
||||
Code or another well known, available Covered Code of the
|
||||
Contributor's choice. The Source Code can be in a compressed or
|
||||
archival form, provided the appropriate decompression or
|
||||
de-archiving software is widely available for no charge.
|
||||
|
||||
1.12. "You'' (or "Your") means an individual or a legal entity
|
||||
exercising rights under, and complying with all of the terms of,
|
||||
this License or a future version of this License issued under
|
||||
Section 6.1. For legal entities, "You'' includes any entity which
|
||||
controls, is controlled by, or is under common control with
|
||||
You. For purposes of this definition, "control'' means (a) the
|
||||
power, direct or indirect, to cause the direction or management
|
||||
of such entity, whether by contract or otherwise, or (b)
|
||||
ownership of more than fifty percent (50%) of the outstanding
|
||||
shares or beneficial ownership of such entity.
|
||||
|
||||
2. Source Code License.
|
||||
|
||||
2.1. The Initial Developer Grant. The Initial Developer hereby
|
||||
grants You a world-wide, royalty-free, non-exclusive license,
|
||||
subject to third party intellectual property claims: (a) under
|
||||
intellectual property rights (other than patent or trademark)
|
||||
Licensable by Initial Developer to use, reproduce, modify,
|
||||
display, perform, sublicense and distribute the Original Code (or
|
||||
portions thereof) with or without Modifications, and/or as part
|
||||
of a Larger Work; and
|
||||
|
||||
(b) under Patents Claims infringed by the making, using or
|
||||
selling of Original Code, to make, have made, use, practice,
|
||||
sell, and offer for sale, and/or otherwise dispose of the
|
||||
Original Code (or portions thereof).
|
||||
|
||||
(c) the licenses granted in this Section 2.1(a) and (b) are
|
||||
effective on the date Initial Developer first distributes
|
||||
Original Code under the terms of this License.
|
||||
|
||||
(d) Notwithstanding Section 2.1(b) above, no patent license
|
||||
is granted: 1) for code that You delete from the Original
|
||||
Code; 2) separate from the Original Code; or 3) for
|
||||
infringements caused by: i) the modification of the Original
|
||||
Code or ii) the combination of the Original Code with other
|
||||
software or devices.
|
||||
|
||||
2.2. Contributor Grant. Subject to third party intellectual
|
||||
property claims, each Contributor hereby grants You a world-wide,
|
||||
royalty-free, non-exclusive license
|
||||
|
||||
(a) under intellectual property rights (other than patent or
|
||||
trademark) Licensable by Contributor, to use, reproduce,
|
||||
modify, display, perform, sublicense and distribute the
|
||||
Modifications created by such Contributor (or portions
|
||||
thereof) either on an unmodified basis, with other
|
||||
Modifications, as Covered Code and/or as part of a Larger
|
||||
Work; and
|
||||
|
||||
(b) under Patent Claims infringed by the making, using, or
|
||||
selling of Modifications made by that Contributor either
|
||||
alone and/or in combination with its Contributor Version (or
|
||||
portions of such combination), to make, use, sell, offer for
|
||||
sale, have made, and/or otherwise dispose of: 1)
|
||||
Modifications made by that Contributor (or portions
|
||||
thereof); and 2) the combination of Modifications made by
|
||||
that Contributor with its Contributor Version (or portions
|
||||
of such combination).
|
||||
|
||||
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
|
||||
effective on the date Contributor first makes Commercial Use
|
||||
of the Covered Code.
|
||||
|
||||
(d) Notwithstanding Section 2.2(b) above, no patent license
|
||||
is granted: 1) for any code that Contributor has deleted from the
|
||||
Contributor Version; 2) separate from the Contributor Version; 3) for
|
||||
infringements caused by: i) third party modifications of Contributor
|
||||
Version or ii) the combination of Modifications made by that
|
||||
Contributor with other software (except as part of the Contributor
|
||||
Version) or other devices; or 4) under Patent Claims infringed by
|
||||
Covered Code in the absence of Modifications made by that Contributor.
|
||||
|
||||
3. Distribution Obligations.
|
||||
|
||||
3.1. Application of License. The Modifications which You create
|
||||
or to which You contribute are governed by the terms of this
|
||||
License, including without limitation Section 2.2. The Source
|
||||
Code version of Covered Code may be distributed only under the
|
||||
terms of this License or a future version of this License
|
||||
released under Section 6.1, and You must include a copy of this
|
||||
License with every copy of the Source Code You distribute. You
|
||||
may not offer or impose any terms on any Source Code version that
|
||||
alters or restricts the applicable version of this License or the
|
||||
recipients' rights hereunder. However, You may include an
|
||||
additional document offering the additional rights described in
|
||||
Section 3.5.
|
||||
|
||||
3.2. Availability of Source Code. Any Modification which You
|
||||
create or to which You contribute must be made available in
|
||||
Source Code form under the terms of this License either on the
|
||||
same media as an Executable version or via an accepted Electronic
|
||||
Distribution Mechanism to anyone to whom you made an Executable
|
||||
version available; and if made available via Electronic
|
||||
Distribution Mechanism, must remain available for at least twelve
|
||||
(12) months after the date it initially became available, or at
|
||||
least six (6) months after a subsequent version of that
|
||||
particular Modification has been made available to such
|
||||
recipients. You are responsible for ensuring that the Source Code
|
||||
version remains available even if the Electronic Distribution
|
||||
Mechanism is maintained by a third party.
|
||||
|
||||
3.3. Description of Modifications. You must cause all Covered
|
||||
Code to which You contribute to contain a file documenting the
|
||||
changes You made to create that Covered Code and the date of any
|
||||
change. You must include a prominent statement that the
|
||||
Modification is derived, directly or indirectly, from Original
|
||||
Code provided by the Initial Developer and including the name of
|
||||
the Initial Developer in (a) the Source Code, and (b) in any
|
||||
notice in an Executable version or related documentation in which
|
||||
You describe the origin or ownership of the Covered Code.
|
||||
|
||||
3.4. Intellectual Property Matters (a) Third Party Claims. If
|
||||
Contributor has knowledge that a license under a third
|
||||
party's intellectual property rights is required to exercise
|
||||
the rights granted by such Contributor under Sections 2.1 or
|
||||
2.2, Contributor must include a text file with the Source
|
||||
Code distribution titled "LEGAL'' which describes the claim
|
||||
and the party making the claim in sufficient detail that a
|
||||
recipient will know whom to contact. If Contributor obtains
|
||||
such knowledge after the Modification is made available as
|
||||
described in Section 3.2, Contributor shall promptly modify
|
||||
the LEGAL file in all copies Contributor makes available
|
||||
thereafter and shall take other steps (such as notifying
|
||||
appropriate mailing lists or newsgroups) reasonably
|
||||
calculated to inform those who received the Covered Code
|
||||
that new knowledge has been obtained.
|
||||
|
||||
(b) Contributor APIs. If Contributor's Modifications
|
||||
include an application programming interface and Contributor
|
||||
has knowledge of patent licenses which are reasonably
|
||||
necessary to implement that API, Contributor must also
|
||||
include this information in the LEGAL file.
|
||||
|
||||
(c) Representations. Contributor represents that,
|
||||
except as disclosed pursuant to Section 3.4(a) above,
|
||||
Contributor believes that Contributor's Modifications are
|
||||
Contributor's original creation(s) and/or Contributor has
|
||||
sufficient rights to grant the rights conveyed by this
|
||||
License.
|
||||
|
||||
3.5. Required Notices. You must duplicate the notice in Exhibit
|
||||
A in each file of the Source Code. If it is not possible to put
|
||||
such notice in a particular Source Code file due to its
|
||||
structure, then You must include such notice in a location (such
|
||||
as a relevant directory) where a user would be likely to look for
|
||||
such a notice. If You created one or more Modification(s) You
|
||||
may add your name as a Contributor to the notice described in
|
||||
Exhibit A. You must also duplicate this License in any
|
||||
documentation for the Source Code where You describe recipients'
|
||||
rights or ownership rights relating to Covered Code. You may
|
||||
choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of
|
||||
Covered Code. However, You may do so only on Your own behalf,
|
||||
and not on behalf of the Initial Developer or any
|
||||
Contributor. You must make it absolutely clear than any such
|
||||
warranty, support, indemnity or liability obligation is offered
|
||||
by You alone, and You hereby agree to indemnify the Initial
|
||||
Developer and every Contributor for any liability incurred by the
|
||||
Initial Developer or such Contributor as a result of warranty,
|
||||
support, indemnity or liability terms You offer.
|
||||
|
||||
3.6. Distribution of Executable Versions. You may distribute
|
||||
Covered Code in Executable form only if the requirements of
|
||||
Section 3.1-3.5 have been met for that Covered Code, and if You
|
||||
include a notice stating that the Source Code version of the
|
||||
Covered Code is available under the terms of this License,
|
||||
including a description of how and where You have fulfilled the
|
||||
obligations of Section 3.2. The notice must be conspicuously
|
||||
included in any notice in an Executable version, related
|
||||
documentation or collateral in which You describe recipients'
|
||||
rights relating to the Covered Code. You may distribute the
|
||||
Executable version of Covered Code or ownership rights under a
|
||||
license of Your choice, which may contain terms different from
|
||||
this License, provided that You are in compliance with the terms
|
||||
of this License and that the license for the Executable version
|
||||
does not attempt to limit or alter the recipient's rights in the
|
||||
Source Code version from the rights set forth in this License. If
|
||||
You distribute the Executable version under a different license
|
||||
You must make it absolutely clear that any terms which differ
|
||||
from this License are offered by You alone, not by the Initial
|
||||
Developer or any Contributor. You hereby agree to indemnify the
|
||||
Initial Developer and every Contributor for any liability
|
||||
incurred by the Initial Developer or such Contributor as a result
|
||||
of any such terms You offer.
|
||||
|
||||
3.7. Larger Works. You may create a Larger Work by combining
|
||||
Covered Code with other code not governed by the terms of this
|
||||
License and distribute the Larger Work as a single product. In
|
||||
such a case, You must make sure the requirements of this License
|
||||
are fulfilled for the Covered Code.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation.
|
||||
|
||||
If it is impossible for You to comply with any of the terms of
|
||||
this License with respect to some or all of the Covered Code due
|
||||
to statute, judicial order, or regulation then You must: (a)
|
||||
comply with the terms of this License to the maximum extent
|
||||
possible; and (b) describe the limitations and the code they
|
||||
affect. Such description must be included in the LEGAL file
|
||||
described in Section 3.4 and must be included with all
|
||||
distributions of the Source Code. Except to the extent
|
||||
prohibited by statute or regulation, such description must be
|
||||
sufficiently detailed for a recipient of ordinary skill to be
|
||||
able to understand it.
|
||||
|
||||
5. Application of this License.
|
||||
|
||||
This License applies to code to which the Initial Developer has
|
||||
attached the notice in Exhibit A and to related Covered Code.
|
||||
|
||||
6. Versions of the License.
|
||||
|
||||
6.1. New Versions. Netscape Communications Corporation
|
||||
(''Netscape'') may publish revised and/or new versions of the
|
||||
License from time to time. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
6.2. Effect of New Versions. Once Covered Code has been
|
||||
published under a particular version of the License, You may
|
||||
always continue to use it under the terms of that version. You
|
||||
may also choose to use such Covered Code under the terms of any
|
||||
subsequent version of the License published by Netscape. No one
|
||||
other than Netscape has the right to modify the terms applicable
|
||||
to Covered Code created under this License.
|
||||
|
||||
6.3. Derivative Works. If You create or use a modified version
|
||||
of this License (which you may only do in order to apply it to
|
||||
code which is not already Covered Code governed by this License),
|
||||
You must (a) rename Your license so that the phrases ''Mozilla'',
|
||||
''MOZILLAPL'', ''MOZPL'', ''Netscape'', "MPL", ''NPL'' or any
|
||||
confusingly similar phrase do not appear in your license (except
|
||||
to note that your license differs from this License) and (b)
|
||||
otherwise make it clear that Your version of the license contains
|
||||
terms which differ from the Mozilla Public License and Netscape
|
||||
Public License. (Filling in the name of the Initial Developer,
|
||||
Original Code or Contributor in the notice described in Exhibit A
|
||||
shall not of themselves be deemed to be modifications of this
|
||||
License.)
|
||||
|
||||
7. DISCLAIMER OF WARRANTY.
|
||||
|
||||
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS'' BASIS,
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
|
||||
INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE
|
||||
IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR
|
||||
NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
||||
OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE
|
||||
DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY
|
||||
OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN
|
||||
ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS
|
||||
AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
||||
|
||||
8. TERMINATION.
|
||||
|
||||
8.1. This License and the rights granted hereunder will
|
||||
terminate automatically if You fail to comply with terms herein
|
||||
and fail to cure such breach within 30 days of becoming aware of
|
||||
the breach. All sublicenses to the Covered Code which are
|
||||
properly granted shall survive any termination of this
|
||||
License. Provisions which, by their nature, must remain in effect
|
||||
beyond the termination of this License shall survive.
|
||||
|
||||
8.2. If You initiate litigation by asserting a patent
|
||||
infringement claim (excluding declatory judgment actions) against
|
||||
Initial Developer or a Contributor (the Initial Developer or
|
||||
Contributor against whom You file such action is referred to as
|
||||
"Participant") alleging that:
|
||||
|
||||
(a) such Participant's Contributor Version directly or indirectly
|
||||
infringes any patent, then any and all rights granted by such
|
||||
Participant to You under Sections 2.1 and/or 2.2 of this License
|
||||
shall, upon 60 days notice from Participant terminate
|
||||
prospectively, unless if within 60 days after receipt of notice
|
||||
You either: (i) agree in writing to pay Participant a mutually
|
||||
agreeable reasonable royalty for Your past and future use of
|
||||
Modifications made by such Participant, or (ii) withdraw Your
|
||||
litigation claim with respect to the Contributor Version against
|
||||
such Participant. If within 60 days of notice, a reasonable
|
||||
royalty and payment arrangement are not mutually agreed upon in
|
||||
writing by the parties or the litigation claim is not withdrawn,
|
||||
the rights granted by Participant to You under Sections 2.1
|
||||
and/or 2.2 automatically terminate at the expiration of the 60
|
||||
day notice period specified above.
|
||||
|
||||
(b) any software, hardware, or device, other than such
|
||||
Participant's Contributor Version, directly or indirectly
|
||||
infringes any patent, then any rights granted to You by such
|
||||
Participant under Sections 2.1(b) and 2.2(b) are revoked
|
||||
effective as of the date You first made, used, sold, distributed,
|
||||
or had made, Modifications made by that Participant.
|
||||
|
||||
8.3. If You assert a patent infringement claim against
|
||||
Participant alleging that such Participant's Contributor Version
|
||||
directly or indirectly infringes any patent where such claim is
|
||||
resolved (such as by license or settlement) prior to the
|
||||
initiation of patent infringement litigation, then the reasonable
|
||||
value of the licenses granted by such Participant under Sections
|
||||
2.1 or 2.2 shall be taken into account in determining the amount
|
||||
or value of any payment or license.
|
||||
|
||||
8.4. In the event of termination under Sections 8.1 or 8.2
|
||||
above, all end user license agreements (excluding distributors
|
||||
and resellers) which have been validly granted by You or any
|
||||
distributor hereunder prior to termination shall survive
|
||||
termination.
|
||||
|
||||
9. LIMITATION OF LIABILITY.
|
||||
|
||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
|
||||
INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
|
||||
COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE
|
||||
TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
|
||||
CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
|
||||
LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER
|
||||
FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES
|
||||
OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL
|
||||
NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING
|
||||
FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES,
|
||||
SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
10. U.S. GOVERNMENT END USERS.
|
||||
|
||||
The Covered Code is a ''commercial item,'' as that term is
|
||||
defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of
|
||||
''commercial computer software'' and ''commercial computer
|
||||
software documentation,'' as such terms are used in 48
|
||||
C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and
|
||||
48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all
|
||||
U.S. Government End Users acquire Covered Code with only those
|
||||
rights set forth herein.
|
||||
|
||||
11. MISCELLANEOUS.
|
||||
|
||||
This License represents the complete agreement concerning subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the
|
||||
extent necessary to make it enforceable. This License shall be
|
||||
governed by California law provisions (except to the extent
|
||||
applicable law, if any, provides otherwise), excluding its
|
||||
conflict-of-law provisions. With respect to disputes in which at
|
||||
least one party is a citizen of, or an entity chartered or
|
||||
registered to do business in the United States of America, any
|
||||
litigation relating to this License shall be subject to the
|
||||
jurisdiction of the Federal Courts of the Northern District of
|
||||
California, with venue lying in Santa Clara County, California,
|
||||
with the losing party responsible for costs, including without
|
||||
limitation, court costs and reasonable attorneys' fees and
|
||||
expenses. The application of the United Nations Convention on
|
||||
Contracts for the International Sale of Goods is expressly
|
||||
excluded. Any law or regulation which provides that the language
|
||||
of a contract shall be construed against the drafter shall not
|
||||
apply to this License.
|
||||
|
||||
12. RESPONSIBILITY FOR CLAIMS.
|
||||
|
||||
As between Initial Developer and the Contributors, each party is
|
||||
responsible for claims and damages arising, directly or
|
||||
indirectly, out of its utilization of rights under this License
|
||||
and You agree to work with Initial Developer and Contributors to
|
||||
distribute such responsibility on an equitable basis. Nothing
|
||||
herein is intended or shall be deemed to constitute any admission
|
||||
of liability.
|
||||
|
||||
13. MULTIPLE-LICENSED CODE.
|
||||
|
||||
Initial Developer may designate portions of the Covered Code as
|
||||
?Multiple-Licensed?. ?Multiple-Licensed? means that the Initial
|
||||
Developer permits you to utilize portions of the Covered Code
|
||||
under Your choice of the NPL or the alternative licenses, if any,
|
||||
specified by the Initial Developer in the file described in
|
||||
Exhibit A.
|
||||
|
||||
EXHIBIT A -Mozilla Public License.
|
||||
|
||||
``The contents of this file are subject to the Mozilla Public
|
||||
License Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License. You may obtain a copy of
|
||||
the License at http://www.mozilla.org/MPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS
|
||||
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
implied. See the License for the specific language governing
|
||||
rights and limitations under the License.
|
||||
|
||||
The Original Code is ______________________________________.
|
||||
|
||||
The Initial Developer of the Original Code is
|
||||
________________________. Portions created by
|
||||
______________________ are Copyright (C) ______
|
||||
_______________________. All Rights Reserved.
|
||||
|
||||
Contributor(s): ______________________________________.
|
||||
|
||||
Alternatively, the contents of this file may be used under the
|
||||
terms of the _____ license (the ?[___] License?), in which case
|
||||
the provisions of [______] License are applicable instead of
|
||||
those above. If you wish to allow use of your version of this
|
||||
file only under the terms of the [____] License and not to allow
|
||||
others to use your version of this file under the MPL, indicate
|
||||
your decision by deleting the provisions above and replace them
|
||||
with the notice and other provisions required by the [___]
|
||||
License. If you do not delete the provisions above, a recipient
|
||||
may use your version of this file under either the MPL or the
|
||||
[___] License."
|
||||
|
||||
[NOTE: The text of this Exhibit A may differ slightly from the
|
||||
text of the notices in the Source Code files of the Original
|
||||
Code. You should use the text of this Exhibit A rather than the
|
||||
text found in the Original Code Source Code for Your
|
||||
Modifications.]
|
||||
|
||||
----------------------------------------
|
||||
|
||||
AMENDMENTS
|
||||
|
||||
The Netscape Public License Version 1.1 ("NPL") consists of the
|
||||
Mozilla Public License Version 1.1 with the following Amendments,
|
||||
including Exhibit A-Netscape Public License. Files identified
|
||||
with "Exhibit A-Netscape Public License" are governed by the
|
||||
Netscape Public License Version 1.1.
|
||||
|
||||
Additional Terms applicable to the Netscape Public License.
|
||||
I. Effect. These additional terms described in this Netscape
|
||||
Public License -- Amendments shall apply to the Mozilla
|
||||
Communicator client code and to all Covered Code under this
|
||||
License.
|
||||
|
||||
II. ''Netscape's Branded Code'' means Covered Code that
|
||||
Netscape distributes and/or permits others to distribute
|
||||
under one or more trademark(s) which are controlled by
|
||||
Netscape but which are not licensed for use under this
|
||||
License.
|
||||
|
||||
III. Netscape and logo. This License does not grant any
|
||||
rights to use the trademarks "Netscape'', the "Netscape N
|
||||
and horizon'' logo or the "Netscape lighthouse" logo,
|
||||
"Netcenter", "Gecko", "Java" or "JavaScript", "Smart
|
||||
Browsing" even if such marks are included in the Original
|
||||
Code or Modifications.
|
||||
|
||||
IV. Inability to Comply Due to Contractual Obligation.
|
||||
Prior to licensing the Original Code under this License,
|
||||
Netscape has licensed third party code for use in Netscape's
|
||||
Branded Code. To the extent that Netscape is limited
|
||||
contractually from making such third party code available
|
||||
under this License, Netscape may choose to reintegrate such
|
||||
code into Covered Code without being required to distribute
|
||||
such code in Source Code form, even if such code would
|
||||
otherwise be considered ''Modifications'' under this
|
||||
License.
|
||||
|
||||
V. Use of Modifications and Covered Code by Initial
|
||||
Developer. V.1. In General. The obligations of Section 3
|
||||
apply to Netscape, except to the extent specified in this
|
||||
Amendment, Section V.2 and V.3.
|
||||
|
||||
V.2. Other Products. Netscape may include Covered Code
|
||||
in products other than the Netscape's Branded Code
|
||||
which are released by Netscape during the two (2) years
|
||||
following the release date of the Original Code,
|
||||
without such additional products becoming subject to
|
||||
the terms of this License, and may license such
|
||||
additional products on different terms from those
|
||||
contained in this License.
|
||||
|
||||
V.3. Alternative Licensing. Netscape may license the
|
||||
Source Code of Netscape's Branded Code, including
|
||||
Modifications incorporated therein, without such
|
||||
Netscape Branded Code becoming subject to the terms of
|
||||
this License, and may license such Netscape Branded
|
||||
Code on different terms from those contained in this
|
||||
License.
|
||||
|
||||
VI. Litigation. Notwithstanding the limitations of Section
|
||||
11 above, the provisions regarding litigation in Section
|
||||
11(a), (b) and (c) of the License shall apply to all
|
||||
disputes relating to this License.
|
||||
|
||||
EXHIBIT A-Netscape Public License.
|
||||
|
||||
''The contents of this file are subject to the Netscape
|
||||
Public License Version 1.1 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may
|
||||
obtain a copy of the License at http://www.mozilla.org/NPL/
|
||||
|
||||
Software distributed under the License is distributed on an
|
||||
"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
|
||||
or implied. See the License for the specific language
|
||||
governing rights and limitations under the License.
|
||||
|
||||
The Original Code is Mozilla Communicator client code,
|
||||
released March 31, 1998.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape
|
||||
are Copyright (C) 1998-1999 Netscape Communications
|
||||
Corporation. All Rights Reserved.
|
||||
|
||||
Contributor(s): ______________________________________.
|
||||
|
||||
Alternatively, the contents of this file may be used under
|
||||
the terms of the _____ license (the ?[___] License?), in
|
||||
which case the provisions of [______] License are applicable
|
||||
instead of those above. If you wish to allow use of your
|
||||
version of this file only under the terms of the [____]
|
||||
License and not to allow others to use your version of this
|
||||
file under the NPL, indicate your decision by deleting the
|
||||
provisions above and replace them with the notice and other
|
||||
provisions required by the [___] License. If you do not
|
||||
delete the provisions above, a recipient may use your
|
||||
version of this file under either the NPL or the [___]
|
||||
License."
|
||||
|
||||
|
||||
Copyright © 1998 The Mozilla Organization.
|
||||
36
mozilla/extensions/xmlterm/doc/Portability
Normal file
36
mozilla/extensions/xmlterm/doc/Portability
Normal file
@@ -0,0 +1,36 @@
|
||||
Portability issues
|
||||
---------------------
|
||||
|
||||
16 Sep 1999
|
||||
|
||||
Much of the XMLterm code is cross-platform. Implementation features that
|
||||
affect portability at the moment are:
|
||||
|
||||
1. Main event handling:
|
||||
By default, the present implementation of XMLterm directly uses a GTK
|
||||
call to set up a handler for XMLterm output events. This can be disabled
|
||||
by setting NO_CALLBACK=1 in the make command line, and calling the
|
||||
method mozIXMLTermShell::Poll() frequently to poll for readable output
|
||||
from LineTerm.
|
||||
(A better event/callback mechanism needs to be implemented.)
|
||||
|
||||
2. pseudo-TTY (PTY) operations:
|
||||
The PTY interface for XMLterm is currently implemented only for
|
||||
two platforms, Linux and Solaris. At some point, the PTY interface
|
||||
should be ported to most Unix platforms. On platforms where PTY
|
||||
operations are not implemented, the cross-platform NSPR process mechanism
|
||||
is used to create a "slave" process. However, this process uses NSPR
|
||||
pipes for communication, which prevents the use of terminal control
|
||||
characters such as the most usefule Control-C. (Is there a way around
|
||||
this restriction?)
|
||||
|
||||
What about Windows? It should be possible to use XMLterm even under Windows,
|
||||
using the NSPR process/pipe functions for communication and
|
||||
using the Cygwin utilities to simulate the Unix environment.
|
||||
|
||||
3. The lightweight GeckoTerm uses GTK.
|
||||
|
||||
4. The "unistring" module uses wchar functions which do not always have
|
||||
the same names.
|
||||
|
||||
--
|
||||
12
mozilla/extensions/xmlterm/doc/README
Normal file
12
mozilla/extensions/xmlterm/doc/README
Normal file
@@ -0,0 +1,12 @@
|
||||
doc --- Some implementation notes and documentation
|
||||
|
||||
This directory contains some rudimentary documentation and notes.
|
||||
See the README file in the "base" directory (../base/README) for a brief
|
||||
overview of XMLterm code architecture
|
||||
|
||||
For a discussion of XMLterm from the user's point of view, check the XMLterm
|
||||
home page at <http://xmlterm.org>.
|
||||
|
||||
Eventually, an XMLterm project page at mozilla.org
|
||||
<http://www.mozilla.org/projects/not-ready-yet/> will contain a description
|
||||
of XMLterm architecture from a Mozilla developer's point of view.
|
||||
22
mozilla/extensions/xmlterm/doc/SlowDOMBug
Normal file
22
mozilla/extensions/xmlterm/doc/SlowDOMBug
Normal file
@@ -0,0 +1,22 @@
|
||||
12 Sep 1999
|
||||
|
||||
Appending each output line separately, separated by <BR> elements, to a
|
||||
displayed HTML document seems to be rather slow. See the file
|
||||
base/mozXMLTermSession.cpp
|
||||
|
||||
As a workaround, multiple output lines are batched into a single <PRE>
|
||||
element. This will basically only work for plain text output, without markup.
|
||||
To disable this workaround and expose the "bug", create the XMLterm libraries
|
||||
as described in the INSTALL file. Then execute the following to make the
|
||||
"buggy" libraries:
|
||||
|
||||
cd base
|
||||
rm mozXMLTermSession.o
|
||||
make NO_WORKAROUND=1 mozXMLTermSession.o
|
||||
make libs
|
||||
|
||||
(If you are using the "gterm" executable, you will need to re-make it as
|
||||
well)
|
||||
|
||||
Now execute any command which produces several lines of output in an
|
||||
XMLterm window.
|
||||
19
mozilla/extensions/xmlterm/doc/XMLterm_LICENSE
Normal file
19
mozilla/extensions/xmlterm/doc/XMLterm_LICENSE
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
31
mozilla/extensions/xmlterm/doc/lineterm_LICENSE
Normal file
31
mozilla/extensions/xmlterm/doc/lineterm_LICENSE
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
109
mozilla/extensions/xmlterm/geckoterm/Makefile.in
Normal file
109
mozilla/extensions/xmlterm/geckoterm/Makefile.in
Normal file
@@ -0,0 +1,109 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# makefile for xmlterm/geckoterm directory (stand alone XMLterm)
|
||||
|
||||
ifdef STAND_ALONE
|
||||
DEPTH = ..
|
||||
topsrcdir = ..
|
||||
srcdir = .
|
||||
include $(topsrcdir)/config/autoconf.mk
|
||||
else
|
||||
DEPTH = ../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
endif
|
||||
|
||||
|
||||
# Debug option
|
||||
DEBUG = 1
|
||||
|
||||
# Program
|
||||
PROGRAM = xmlterm
|
||||
|
||||
# Exported header files
|
||||
EXPORTS = mozISimpleContainer.h
|
||||
|
||||
# Defines
|
||||
DEFINES = $(TK_CFLAGS)
|
||||
|
||||
# C++ source files
|
||||
CPPSRCS = nsSetupRegistry.cpp \
|
||||
mozSimpleContainer.cpp \
|
||||
mozGeckoTerm.cpp \
|
||||
nsTimer.cpp \
|
||||
$(NULL)
|
||||
|
||||
# Libraries to be linked
|
||||
GTK_GLUE = -lgtksuperwin
|
||||
|
||||
XP_DIST_LIBS = \
|
||||
-lraptorgfx \
|
||||
-lmozjs \
|
||||
-lxpcom \
|
||||
$(JSJ_LIB) \
|
||||
$(NULL)
|
||||
|
||||
XP_NS_UNDERBAR_CRAP = \
|
||||
$(MOZ_NECKO_UTIL_LIBS) \
|
||||
$(MOZ_TIMER_LIBS) \
|
||||
$(MOZ_WIDGET_SUPPORT_LIBS) \
|
||||
$(NULL)
|
||||
|
||||
XP_LIBS = \
|
||||
$(XP_NS_UNDERBAR_CRAP) \
|
||||
$(XP_DIST_LIBS) \
|
||||
$(NSPR_LIBS) \
|
||||
$(NULL)
|
||||
|
||||
ifdef DYNAMIC_LINK
|
||||
# NOTE: a soft link needs to be created for libxmlterm.so in dist/bin
|
||||
XMLTERM_LIBS = -lxmlterm
|
||||
else
|
||||
# Statically link the entire XMLTERM library
|
||||
XMLTERM_LIBS = ../base/libxmlterm.a
|
||||
endif
|
||||
|
||||
LIBS = \
|
||||
$(GTK_GLUE) \
|
||||
$(XP_LIBS) \
|
||||
$(TK_LIBS) \
|
||||
$(XMLTERM_LIBS) \
|
||||
$(NULL)
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include ../config/xmlterm_config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
24
mozilla/extensions/xmlterm/geckoterm/README
Normal file
24
mozilla/extensions/xmlterm/geckoterm/README
Normal file
@@ -0,0 +1,24 @@
|
||||
geckoterm --- Stand-alone version of XMLterm using Gecko
|
||||
|
||||
This directory contains the files used to create the stand-alone XMLterm
|
||||
executable, which runs independent of the browser. This would be the preferred
|
||||
way to use XMLterm, so that it runs as a separate process and will not
|
||||
crash if the browser does.
|
||||
|
||||
28 Nov 1999
|
||||
|
||||
FILES
|
||||
=====
|
||||
|
||||
mozGeckoTerm.cpp Main program for stand-alone "xmlterm" executable
|
||||
Uses GTK to create window
|
||||
Uses mozIXMLTerminal to create XMLterm
|
||||
Uses mozISimpleContainer for web shell container
|
||||
|
||||
mozISimpleContainer.h Simple WebShell container interface
|
||||
mozSimpleContainer.cpp Implementation of mozISimpleContainer
|
||||
|
||||
nsSetupRegistry.cpp Just a copy of viewer's nSetupRegistry
|
||||
nsTimer.cpp Implementation of timers using Gtk timer facility
|
||||
|
||||
--
|
||||
3
mozilla/extensions/xmlterm/geckoterm/default_prefs.js
Executable file
3
mozilla/extensions/xmlterm/geckoterm/default_prefs.js
Executable file
@@ -0,0 +1,3 @@
|
||||
# Mozilla User Preferences
|
||||
// This is a generated file!
|
||||
|
||||
5
mozilla/extensions/xmlterm/geckoterm/default_prefs.js.sav
Executable file
5
mozilla/extensions/xmlterm/geckoterm/default_prefs.js.sav
Executable file
@@ -0,0 +1,5 @@
|
||||
# Mozilla User Preferences
|
||||
// This is a generated file!
|
||||
pref("security.checkxpconnect", true);
|
||||
pref("security.policy.default.htmldocument.cookie", "sameOrigin");
|
||||
|
||||
337
mozilla/extensions/xmlterm/geckoterm/mozGeckoTerm.cpp
Normal file
337
mozilla/extensions/xmlterm/geckoterm/mozGeckoTerm.cpp
Normal file
@@ -0,0 +1,337 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozGeckoTerm.cpp: Stand-alone implementation of XMLterm using GTK
|
||||
// and the Mozilla Layout engine
|
||||
|
||||
#include "stdio.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#if 0 // USE_SUPERWIN
|
||||
#include "gtkmozarea.h"
|
||||
#include "gdksuperwin.h"
|
||||
#endif // USE_SUPERWIN
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#include "nsRepository.h"
|
||||
#include "nsIComponentManager.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIEventQueueService.h"
|
||||
#include "nsIPref.h"
|
||||
|
||||
#include "mozXMLTermUtils.h"
|
||||
#include "mozISimpleContainer.h"
|
||||
#include "mozIXMLTerminal.h"
|
||||
#include "mozIXMLTermStream.h"
|
||||
|
||||
#define XMLTERM_DLL "libxmlterm"MOZ_DLL_SUFFIX
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIEventQueueServiceIID, NS_IEVENTQUEUESERVICE_IID);
|
||||
static NS_DEFINE_IID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
|
||||
static NS_DEFINE_IID(kIPrefIID, NS_IPREF_IID);
|
||||
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
|
||||
static NS_DEFINE_IID(kLineTermCID, MOZLINETERM_CID);
|
||||
static NS_DEFINE_IID(kXMLTermShellCID, MOZXMLTERMSHELL_CID);
|
||||
|
||||
extern "C" void NS_SetupRegistry();
|
||||
|
||||
nsCOMPtr<mozISimpleContainer> gSimpleContainer = nsnull;
|
||||
nsCOMPtr<mozIXMLTerminal> gXMLTerminal = nsnull;
|
||||
|
||||
/** Processes thread events */
|
||||
static void event_processor_callback(gpointer data,
|
||||
gint source,
|
||||
GdkInputCondition condition)
|
||||
{
|
||||
nsIEventQueue *eventQueue = (nsIEventQueue*)data;
|
||||
eventQueue->ProcessPendingEvents();
|
||||
//fprintf(stderr, "event_processor_callback:\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static void event_processor_configure(GtkWidget *window,
|
||||
GdkEvent *event,
|
||||
GtkWidget *termWidget)
|
||||
{
|
||||
GtkAllocation *alloc = >K_WIDGET(termWidget)->allocation;
|
||||
|
||||
//fprintf(stderr, "event_processor_configure:\n");
|
||||
|
||||
// Resize web shell window
|
||||
gSimpleContainer->Resize(alloc->width, alloc->height);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/** Cleans up and exits */
|
||||
static gint event_processor_quit(gpointer data,
|
||||
gint source,
|
||||
GdkInputCondition condition)
|
||||
{
|
||||
fprintf(stderr, "event_processor_quit:\n");
|
||||
|
||||
if (gXMLTerminal) {
|
||||
// Finalize XMLTerm and release owning reference to it
|
||||
gXMLTerminal->Finalize();
|
||||
gXMLTerminal = nsnull;
|
||||
}
|
||||
|
||||
// Delete reference to container
|
||||
gSimpleContainer = nsnull;
|
||||
|
||||
gtk_main_quit();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
GtkWidget *mainWin = NULL;
|
||||
GtkWidget *vertBox = NULL;
|
||||
GtkWidget *horBox = NULL;
|
||||
GtkWidget *testButton = NULL;
|
||||
#if 0 // USE_SUPERWIN
|
||||
GdkSuperWin *termWidget = NULL;
|
||||
GtkWidget *mozArea;
|
||||
#else // USE_SUPERWIN
|
||||
GtkWidget *termWidget = NULL;
|
||||
#endif // !USE_SUPERWIN
|
||||
|
||||
nsIEventQueue *mEventQueue = nsnull;
|
||||
|
||||
nsresult result = NS_OK;
|
||||
|
||||
// Set up registry
|
||||
NS_SetupRegistry();
|
||||
|
||||
// Register XMLTermShell and LineTerm interfaces
|
||||
result = nsComponentManager::RegisterComponentLib(kLineTermCID,NULL,NULL,
|
||||
XMLTERM_DLL, PR_FALSE, PR_FALSE);
|
||||
printf("mozGeckoTerm: registered LineTerm, result=0x%x\n", result);
|
||||
|
||||
result = nsComponentManager::RegisterComponentLib(kXMLTermShellCID,NULL,NULL,
|
||||
XMLTERM_DLL, PR_FALSE, PR_FALSE);
|
||||
printf("mozGeckoTerm: registered XMLTermShell, result=0x%x\n", result);
|
||||
|
||||
// Get the event queue service
|
||||
NS_WITH_SERVICE(nsIEventQueueService, eventQService,
|
||||
kEventQueueServiceCID, &result);
|
||||
if (NS_FAILED(result)) {
|
||||
NS_ASSERTION("Could not obtain event queue service", PR_FALSE);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Get the event queue for the thread.
|
||||
result = eventQService->GetThreadEventQueue(PR_GetCurrentThread(),
|
||||
&mEventQueue);
|
||||
|
||||
if (!mEventQueue) {
|
||||
// Create the event queue for the thread
|
||||
result = eventQService->CreateThreadEventQueue();
|
||||
if (NS_FAILED(result)) {
|
||||
NS_ASSERTION("Could not create the thread event queue", PR_FALSE);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Get the event queue for the thread
|
||||
result = eventQService->GetThreadEventQueue(PR_GetCurrentThread(), &mEventQueue);
|
||||
if (NS_FAILED(result)) {
|
||||
NS_ASSERTION("Could not obtain the thread event queue", PR_FALSE);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// Creat pref object
|
||||
nsCOMPtr<nsIPref> mPref = nsnull;
|
||||
result = nsComponentManager::CreateInstance(kPrefCID, NULL,
|
||||
kIPrefIID, getter_AddRefs(mPref));
|
||||
if (NS_FAILED(result)) {
|
||||
NS_ASSERTION("Failed to create nsIPref object", PR_FALSE);
|
||||
return result;
|
||||
}
|
||||
|
||||
mPref->StartUp();
|
||||
mPref->ReadUserPrefs();
|
||||
|
||||
// Initialize GTK library
|
||||
gtk_set_locale();
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
gdk_rgb_init();
|
||||
|
||||
mainWin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_default_size( GTK_WINDOW(mainWin), 600, 400);
|
||||
gtk_window_set_title(GTK_WINDOW(mainWin), "XMLterm");
|
||||
|
||||
// VBox top level
|
||||
vertBox = gtk_vbox_new(FALSE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(mainWin), vertBox);
|
||||
gtk_widget_show(vertBox);
|
||||
|
||||
// HBox for toolbar
|
||||
horBox = gtk_hbox_new(FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(vertBox), horBox, FALSE, FALSE, 0);
|
||||
|
||||
testButton = gtk_button_new_with_label("Test");
|
||||
gtk_box_pack_start (GTK_BOX (horBox), testButton, FALSE, FALSE, 0);
|
||||
gtk_widget_show(testButton);
|
||||
|
||||
gtk_widget_show(horBox);
|
||||
|
||||
#if 0 // USE_SUPERWIN
|
||||
gtk_window_set_policy(GTK_WINDOW(mainWin), PR_TRUE, PR_TRUE, PR_FALSE);
|
||||
mozArea = gtk_mozarea_new();
|
||||
gtk_container_add(GTK_CONTAINER(mainWin), mozArea);
|
||||
gtk_widget_realize(GTK_WIDGET(mozArea));
|
||||
termWidget = GTK_MOZAREA(mozArea)->superwin;
|
||||
|
||||
#else // USE_SUPERWIN
|
||||
|
||||
// XMLterm layout widget
|
||||
termWidget = gtk_layout_new(NULL, NULL);
|
||||
GTK_WIDGET_SET_FLAGS(termWidget, GTK_CAN_FOCUS);
|
||||
gtk_widget_set_app_paintable(termWidget, TRUE);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(vertBox), termWidget, TRUE, TRUE, 0);
|
||||
gtk_widget_show_all(termWidget);
|
||||
|
||||
gtk_widget_show(mainWin);
|
||||
#endif // !USE_SUPERWIN
|
||||
|
||||
// Configure event handler
|
||||
gtk_signal_connect_after( GTK_OBJECT(mainWin), "configure_event",
|
||||
GTK_SIGNAL_FUNC(event_processor_configure),
|
||||
termWidget);
|
||||
|
||||
// Cleanup and exit when window is deleted
|
||||
gtk_signal_connect( GTK_OBJECT(mainWin), "delete_event",
|
||||
GTK_SIGNAL_FUNC(event_processor_quit),
|
||||
NULL);
|
||||
|
||||
// Check for input in the events queue file descriptor
|
||||
gdk_input_add(mEventQueue->GetEventQueueSelectFD(),
|
||||
GDK_INPUT_READ,
|
||||
event_processor_callback,
|
||||
mEventQueue);
|
||||
|
||||
// Create simple container
|
||||
result = NS_NewSimpleContainer(getter_AddRefs(gSimpleContainer));
|
||||
|
||||
if (NS_FAILED(result) || !gSimpleContainer) {
|
||||
return result; // Exit main program
|
||||
}
|
||||
|
||||
// Determine window dimensions
|
||||
GtkAllocation *alloc = >K_WIDGET(termWidget)->allocation;
|
||||
|
||||
// Initialize container to hold a web shell
|
||||
result = gSimpleContainer->Init((nsNativeWidget *) termWidget,
|
||||
alloc->width, alloc->height, mPref);
|
||||
|
||||
if (NS_FAILED(result)) {
|
||||
return result; // Exit main program
|
||||
}
|
||||
|
||||
// Get reference to web shell embedded in a simple container
|
||||
nsCOMPtr<nsIWebShell> webShell;
|
||||
result = gSimpleContainer->GetWebShell(*getter_AddRefs(webShell));
|
||||
|
||||
if (NS_FAILED(result) || !webShell) {
|
||||
return result; // Exit main program
|
||||
}
|
||||
|
||||
#if 0
|
||||
// TEMPORARY: Testing mozIXMLTermStream
|
||||
nsAutoString streamData = "<HTML><HEAD><TITLE>Stream Title</TITLE>"
|
||||
"<SCRIPT language='JavaScript'>"
|
||||
"function clik(){ dump('click\\n');return(false);}"
|
||||
"</SCRIPT></HEAD>"
|
||||
"<BODY><B>Stream Body "
|
||||
"<SPAN STYLE='color: blue' onClick='return clik();'>Clik</SPAN></B>"
|
||||
"</BODY></HTML>";
|
||||
|
||||
nsCOMPtr<mozIXMLTermStream> stream;
|
||||
result = NS_NewXMLTermStream(getter_AddRefs(stream));
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozGeckoTerm: Failed to create stream\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMWindow> outerDOMWindow;
|
||||
result = mozXMLTermUtils::ConvertWebShellToDOMWindow(webShell,
|
||||
getter_AddRefs(outerDOMWindow));
|
||||
|
||||
if (NS_FAILED(result) || !outerDOMWindow)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
result = stream->Open(outerDOMWindow, nsnull, "chrome://dummy", "text/html",
|
||||
0);
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozGeckoTerm: Failed to open stream\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
result = stream->Write(streamData.GetUnicode());
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozGeckoTerm: Failed to write to stream\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
result = stream->Close();
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozGeckoTerm: Failed to close stream\n");
|
||||
return result;
|
||||
}
|
||||
#else
|
||||
// Load initial XMLterm document
|
||||
result = gSimpleContainer->LoadURL(
|
||||
"chrome://xmlterm/content/xmlterm.html");
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
// Create an XMLTERM and attach to web shell
|
||||
result = NS_NewXMLTerminal(getter_AddRefs(gXMLTerminal));
|
||||
|
||||
if(!gXMLTerminal)
|
||||
result = NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
result = gXMLTerminal->Init(webShell, nsnull, nsnull);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Discard reference to web shell
|
||||
webShell = nsnull;
|
||||
|
||||
// GTK event loop
|
||||
gtk_main();
|
||||
|
||||
NS_IF_RELEASE(mEventQueue);
|
||||
|
||||
return 0;
|
||||
}
|
||||
318
mozilla/extensions/xmlterm/geckoterm/mozGeckoTerm.cpp.sav
Normal file
318
mozilla/extensions/xmlterm/geckoterm/mozGeckoTerm.cpp.sav
Normal file
@@ -0,0 +1,318 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozGeckoTerm.cpp: Stand-alone implementation of XMLterm using GTK
|
||||
// and the Mozilla Layout engine
|
||||
|
||||
#include "stdio.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#include "nsRepository.h"
|
||||
#include "nsIComponentManager.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIEventQueueService.h"
|
||||
#include "nsIPref.h"
|
||||
|
||||
#include "mozXMLTermUtils.h"
|
||||
#include "mozISimpleContainer.h"
|
||||
#include "mozIXMLTerminal.h"
|
||||
#include "mozIXMLTermStream.h"
|
||||
|
||||
#define XMLTERM_DLL "libxmlterm"MOZ_DLL_SUFFIX
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIEventQueueServiceIID, NS_IEVENTQUEUESERVICE_IID);
|
||||
static NS_DEFINE_IID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
|
||||
static NS_DEFINE_IID(kIPrefIID, NS_IPREF_IID);
|
||||
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
|
||||
static NS_DEFINE_IID(kLineTermCID, MOZLINETERM_CID);
|
||||
static NS_DEFINE_IID(kXMLTermShellCID, MOZXMLTERMSHELL_CID);
|
||||
|
||||
extern "C" void NS_SetupRegistry();
|
||||
|
||||
nsCOMPtr<mozISimpleContainer> gSimpleContainer = nsnull;
|
||||
nsCOMPtr<mozIXMLTerminal> gXMLTerminal = nsnull;
|
||||
|
||||
/** Processes thread events */
|
||||
static void event_processor_callback(gpointer data,
|
||||
gint source,
|
||||
GdkInputCondition condition)
|
||||
{
|
||||
nsIEventQueue *eventQueue = (nsIEventQueue*)data;
|
||||
eventQueue->ProcessPendingEvents();
|
||||
//fprintf(stderr, "event_processor_callback:\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static void event_processor_configure(GtkWidget *window,
|
||||
GdkEvent *event,
|
||||
GtkWidget *termWidget)
|
||||
{
|
||||
GtkAllocation *alloc = >K_WIDGET(termWidget)->allocation;
|
||||
|
||||
//fprintf(stderr, "event_processor_configure:\n");
|
||||
|
||||
// Resize web shell window
|
||||
gSimpleContainer->Resize(alloc->width, alloc->height);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/** Cleans up and exits */
|
||||
static gint event_processor_quit(gpointer data,
|
||||
gint source,
|
||||
GdkInputCondition condition)
|
||||
{
|
||||
fprintf(stderr, "event_processor_quit:\n");
|
||||
|
||||
if (gXMLTerminal) {
|
||||
// Finalize XMLTerm and release owning reference to it
|
||||
gXMLTerminal->Finalize();
|
||||
gXMLTerminal = nsnull;
|
||||
}
|
||||
|
||||
// Delete reference to container
|
||||
gSimpleContainer = nsnull;
|
||||
|
||||
gtk_main_quit();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
GtkWidget *mainWin = NULL;
|
||||
GtkWidget *vertBox = NULL;
|
||||
GtkWidget *horBox = NULL;
|
||||
GtkWidget *testButton = NULL;
|
||||
GtkWidget *termWidget = NULL;
|
||||
|
||||
nsIEventQueue *mEventQueue = nsnull;
|
||||
|
||||
nsresult result = NS_OK;
|
||||
|
||||
// Set up registry
|
||||
NS_SetupRegistry();
|
||||
|
||||
// Register XMLTermShell and LineTerm interfaces
|
||||
result = nsComponentManager::RegisterComponentLib(kLineTermCID,NULL,NULL,
|
||||
XMLTERM_DLL, PR_FALSE, PR_FALSE);
|
||||
printf("mozGeckoTerm: registered LineTerm, result=0x%x\n", result);
|
||||
|
||||
result = nsComponentManager::RegisterComponentLib(kXMLTermShellCID,NULL,NULL,
|
||||
XMLTERM_DLL, PR_FALSE, PR_FALSE);
|
||||
printf("mozGeckoTerm: registered XMLTermShell, result=0x%x\n", result);
|
||||
|
||||
// Get the event queue service
|
||||
NS_WITH_SERVICE(nsIEventQueueService, eventQService,
|
||||
kEventQueueServiceCID, &result);
|
||||
if (NS_FAILED(result)) {
|
||||
NS_ASSERTION("Could not obtain event queue service", PR_FALSE);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Get the event queue for the thread.
|
||||
result = eventQService->GetThreadEventQueue(PR_GetCurrentThread(),
|
||||
&mEventQueue);
|
||||
|
||||
if (!mEventQueue) {
|
||||
// Create the event queue for the thread
|
||||
result = eventQService->CreateThreadEventQueue();
|
||||
if (NS_FAILED(result)) {
|
||||
NS_ASSERTION("Could not create the thread event queue", PR_FALSE);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Get the event queue for the thread
|
||||
result = eventQService->GetThreadEventQueue(PR_GetCurrentThread(), &mEventQueue);
|
||||
if (NS_FAILED(result)) {
|
||||
NS_ASSERTION("Could not obtain the thread event queue", PR_FALSE);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// Creat pref object
|
||||
nsCOMPtr<nsIPref> mPref = nsnull;
|
||||
result = nsComponentManager::CreateInstance(kPrefCID, NULL,
|
||||
kIPrefIID, getter_AddRefs(mPref));
|
||||
if (NS_FAILED(result)) {
|
||||
NS_ASSERTION("Failed to create nsIPref object", PR_FALSE);
|
||||
return result;
|
||||
}
|
||||
|
||||
mPref->StartUp();
|
||||
mPref->ReadUserPrefs();
|
||||
|
||||
// Initialize GTK library
|
||||
gtk_set_locale();
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
gdk_rgb_init();
|
||||
|
||||
mainWin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_default_size( GTK_WINDOW(mainWin), 600, 400);
|
||||
gtk_window_set_title(GTK_WINDOW(mainWin), "XMLterm");
|
||||
|
||||
// VBox top level
|
||||
vertBox = gtk_vbox_new(FALSE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(mainWin), vertBox);
|
||||
gtk_widget_show(vertBox);
|
||||
|
||||
// HBox for toolbar
|
||||
horBox = gtk_hbox_new(FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(vertBox), horBox, FALSE, FALSE, 0);
|
||||
|
||||
testButton = gtk_button_new_with_label("Test");
|
||||
gtk_box_pack_start (GTK_BOX (horBox), testButton, FALSE, FALSE, 0);
|
||||
gtk_widget_show(testButton);
|
||||
|
||||
gtk_widget_show(horBox);
|
||||
|
||||
// XMLterm layout widget
|
||||
termWidget = gtk_layout_new(NULL, NULL);
|
||||
GTK_WIDGET_SET_FLAGS(termWidget, GTK_CAN_FOCUS);
|
||||
gtk_widget_set_app_paintable(termWidget, TRUE);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(vertBox), termWidget, TRUE, TRUE, 0);
|
||||
gtk_widget_show_all(termWidget);
|
||||
|
||||
gtk_widget_show(mainWin);
|
||||
|
||||
|
||||
// Configure event handler
|
||||
gtk_signal_connect_after( GTK_OBJECT(mainWin), "configure_event",
|
||||
GTK_SIGNAL_FUNC(event_processor_configure),
|
||||
termWidget);
|
||||
|
||||
// Cleanup and exit when window is deleted
|
||||
gtk_signal_connect( GTK_OBJECT(mainWin), "delete_event",
|
||||
GTK_SIGNAL_FUNC(event_processor_quit),
|
||||
NULL);
|
||||
|
||||
// Check for input in the events queue file descriptor
|
||||
gdk_input_add(mEventQueue->GetEventQueueSelectFD(),
|
||||
GDK_INPUT_READ,
|
||||
event_processor_callback,
|
||||
mEventQueue);
|
||||
|
||||
// Create simple container
|
||||
result = NS_NewSimpleContainer(getter_AddRefs(gSimpleContainer));
|
||||
|
||||
if (NS_FAILED(result) || !gSimpleContainer) {
|
||||
return result; // Exit main program
|
||||
}
|
||||
|
||||
// Determine window dimensions
|
||||
GtkAllocation *alloc = >K_WIDGET(termWidget)->allocation;
|
||||
|
||||
// Initialize container it to hold a web shell
|
||||
result = gSimpleContainer->Init((nsNativeWidget *) termWidget,
|
||||
alloc->width, alloc->height, mPref);
|
||||
|
||||
if (NS_FAILED(result)) {
|
||||
return result; // Exit main program
|
||||
}
|
||||
|
||||
// Get reference to web shell embedded in a simple container
|
||||
nsCOMPtr<nsIWebShell> webShell;
|
||||
result = gSimpleContainer->GetWebShell(*getter_AddRefs(webShell));
|
||||
|
||||
if (NS_FAILED(result) || !webShell) {
|
||||
return result; // Exit main program
|
||||
}
|
||||
|
||||
#if 0
|
||||
// TEMPORARY: Testing mozIXMLTermStream
|
||||
nsAutoString streamData = "<HTML><HEAD><TITLE>Stream Title</TITLE>"
|
||||
"<SCRIPT language='JavaScript'>"
|
||||
"function clik(){ dump('click\\n');return(false);}"
|
||||
"</SCRIPT></HEAD>"
|
||||
"<BODY><B>Stream Body "
|
||||
"<SPAN STYLE='color: blue' onClick='return clik();'>Clik</SPAN></B>"
|
||||
"</BODY></HTML>";
|
||||
|
||||
nsCOMPtr<mozIXMLTermStream> stream;
|
||||
result = NS_NewXMLTermStream(getter_AddRefs(stream));
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozGeckoTerm: Failed to create stream\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMWindow> outerDOMWindow;
|
||||
result = mozXMLTermUtils::ConvertWebShellToDOMWindow(webShell,
|
||||
getter_AddRefs(outerDOMWindow));
|
||||
|
||||
if (NS_FAILED(result) || !outerDOMWindow)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
result = stream->Open(outerDOMWindow, nsnull, "chrome://dummy", "text/html",
|
||||
0);
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozGeckoTerm: Failed to open stream\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
result = stream->Write(streamData.GetUnicode());
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozGeckoTerm: Failed to write to stream\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
result = stream->Close();
|
||||
if (NS_FAILED(result)) {
|
||||
fprintf(stderr, "mozGeckoTerm: Failed to close stream\n");
|
||||
return result;
|
||||
}
|
||||
#else
|
||||
// Load initial XMLterm document
|
||||
result = gSimpleContainer->LoadURL(
|
||||
"chrome://xmlterm/content/xmlterm.html");
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
// Create an XMLTERM and attach to web shell
|
||||
result = NS_NewXMLTerminal(getter_AddRefs(gXMLTerminal));
|
||||
|
||||
if(!gXMLTerminal)
|
||||
result = NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
result = gXMLTerminal->Init(webShell, nsnull, nsnull);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Discard reference to web shell
|
||||
webShell = nsnull;
|
||||
|
||||
// GTK event loop
|
||||
gtk_main();
|
||||
|
||||
NS_IF_RELEASE(mEventQueue);
|
||||
|
||||
return 0;
|
||||
}
|
||||
134
mozilla/extensions/xmlterm/geckoterm/mozISimpleContainer.h
Normal file
134
mozilla/extensions/xmlterm/geckoterm/mozISimpleContainer.h
Normal file
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozISimpleContainer.h: a simple WebShell container interface
|
||||
// for use in simple programs using the layout engine
|
||||
// (unregistered interface)
|
||||
|
||||
#ifndef mozISimpleContainer_h___
|
||||
#define mozISimpleContainer_h___
|
||||
|
||||
#include "nscore.h"
|
||||
|
||||
#include "nsISupports.h"
|
||||
#include "nsIWebShell.h"
|
||||
#include "nsIPref.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
|
||||
/* starting interface: mozISimpleContainer */
|
||||
|
||||
/* {0eb82bF0-43a2-11d3-8e76-006008948af5} */
|
||||
#define MOZISIMPLE_CONTAINER_IID_STR "0eb82bF0-43a2-11d3-8e76-006008948af5"
|
||||
#define MOZISIMPLE_CONTAINER_IID \
|
||||
{0x0eb82bF0, 0x43a2, 0x11d3, \
|
||||
{ 0x8e, 0x76, 0x00, 0x60, 0x08, 0x94, 0x8a, 0xf5 }}
|
||||
|
||||
class mozISimpleContainer : public nsIWebShellContainer {
|
||||
|
||||
public:
|
||||
NS_DEFINE_STATIC_IID_ACCESSOR(MOZISIMPLE_CONTAINER_IID)
|
||||
|
||||
// nsIWebShellContainer interface
|
||||
NS_IMETHOD WillLoadURL(nsIWebShell* aShell,
|
||||
const PRUnichar* aURL,
|
||||
nsLoadType aReason) = 0;
|
||||
|
||||
NS_IMETHOD BeginLoadURL(nsIWebShell* aShell,
|
||||
const PRUnichar* aURL) = 0;
|
||||
|
||||
|
||||
NS_IMETHOD ProgressLoadURL(nsIWebShell* aShell,
|
||||
const PRUnichar* aURL,
|
||||
PRInt32 aProgress,
|
||||
PRInt32 aProgressMax) = 0;
|
||||
|
||||
NS_IMETHOD EndLoadURL(nsIWebShell* aShell,
|
||||
const PRUnichar* aURL,
|
||||
nsresult aStatus) = 0;
|
||||
|
||||
NS_IMETHOD NewWebShell(PRUint32 aChromeMask,
|
||||
PRBool aVisible,
|
||||
nsIWebShell *&aNewWebShell) = 0;
|
||||
|
||||
NS_IMETHOD FindWebShellWithName(const PRUnichar* aName,
|
||||
nsIWebShell*& aResult) = 0;
|
||||
|
||||
NS_IMETHOD ContentShellAdded(nsIWebShell* aChildShell,
|
||||
nsIContent* frameNode) = 0;
|
||||
|
||||
NS_IMETHOD CreatePopup(nsIDOMElement* aElement,
|
||||
nsIDOMElement* aPopupContent,
|
||||
PRInt32 aXPos, PRInt32 aYPos,
|
||||
const nsString& aPopupType,
|
||||
const nsString& anAnchorAlignment,
|
||||
const nsString& aPopupAlignment,
|
||||
nsIDOMWindow* aWindow, nsIDOMWindow** outPopup) = 0;
|
||||
|
||||
NS_IMETHOD FocusAvailable(nsIWebShell* aFocusedWebShell,
|
||||
PRBool& aFocusTaken) = 0;
|
||||
|
||||
// other
|
||||
|
||||
/** Initializes simple container for native window widget
|
||||
* @param aNativeWidget native window widget (e.g., GtkWidget)
|
||||
* @param width window width (pixels)
|
||||
* @param height window height (pixels)
|
||||
* @param aPref preferences object
|
||||
*/
|
||||
NS_IMETHOD Init(nsNativeWidget aNativeWidget,
|
||||
PRInt32 width, PRInt32 height,
|
||||
nsIPref* aPref) = 0;
|
||||
|
||||
/** Resizes container to new dimensions
|
||||
* @param width new window width (pixels)
|
||||
* @param height new window height (pixels)
|
||||
*/
|
||||
NS_IMETHOD Resize(PRInt32 aWidth, PRInt32 aHeight) = 0;
|
||||
|
||||
/** Loads specified URL into container
|
||||
* @param aURL URL string
|
||||
*/
|
||||
NS_IMETHOD LoadURL(const char* aURL) = 0;
|
||||
|
||||
/** Gets web shell in container
|
||||
* @param aWebShell (output) web shell object
|
||||
*/
|
||||
NS_IMETHOD GetWebShell(nsIWebShell*& aWebShell) = 0;
|
||||
|
||||
/** Gets DOM document in container
|
||||
* @param aDocument (output) DOM document
|
||||
*/
|
||||
NS_IMETHOD GetDocument(nsIDOMDocument*& aDocument) = 0;
|
||||
|
||||
/** Gets presentation shell associated with container
|
||||
* @param aPresShell (output) presentation shell
|
||||
*/
|
||||
NS_IMETHOD GetPresShell(nsIPresShell*& aPresShell) = 0;
|
||||
};
|
||||
|
||||
#define MOZSIMPLE_CONTAINER_CID \
|
||||
{ /* 0eb82bF1-43a2-11d3-8e76-006008948af5 */ \
|
||||
0x0eb82bF1, 0x43a2, 0x11d3, \
|
||||
{0x8e, 0x76, 0x00, 0x60, 0x08, 0x94, 0x8a, 0xf5} }
|
||||
extern nsresult
|
||||
NS_NewSimpleContainer(mozISimpleContainer** aSimpleContainer);
|
||||
|
||||
#endif /* mozISimpleContainer_h___ */
|
||||
396
mozilla/extensions/xmlterm/geckoterm/mozSimpleContainer.cpp
Normal file
396
mozilla/extensions/xmlterm/geckoterm/mozSimpleContainer.cpp
Normal file
@@ -0,0 +1,396 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozSimpleContainer.cpp: Implements mozISimpleContainer
|
||||
// which provides a WebShell container for use in simple programs
|
||||
// using the layout engine
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#include "nsRepository.h"
|
||||
|
||||
#include "nsISupports.h"
|
||||
|
||||
#include "nsIWebShell.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIDocumentViewer.h"
|
||||
#include "nsIPresContext.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsIDocument.h"
|
||||
|
||||
#include "mozSimpleContainer.h"
|
||||
|
||||
|
||||
// Define Class IDs
|
||||
static NS_DEFINE_IID(kWebShellCID, NS_WEB_SHELL_CID);
|
||||
|
||||
// Define Interface IDs
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIWebShellIID, NS_IWEB_SHELL_IID);
|
||||
static NS_DEFINE_IID(kIDOMDocumentIID, NS_IDOMDOCUMENT_IID);
|
||||
static NS_DEFINE_IID(kIDocumentViewerIID, NS_IDOCUMENT_VIEWER_IID);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozSimpleContainer factory
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsresult
|
||||
NS_NewSimpleContainer(mozISimpleContainer** aSimpleContainer)
|
||||
{
|
||||
NS_PRECONDITION(aSimpleContainer != nsnull, "null ptr");
|
||||
if (!aSimpleContainer)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aSimpleContainer = new mozSimpleContainer();
|
||||
if (! *aSimpleContainer)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(*aSimpleContainer);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// mozSimpleContainer implementation
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
mozSimpleContainer::mozSimpleContainer() :
|
||||
mWebShell(nsnull)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
mozSimpleContainer::~mozSimpleContainer()
|
||||
{
|
||||
mWebShell = nsnull;
|
||||
}
|
||||
|
||||
#define NS_IMPL_ADDREF_TRACE(_class) \
|
||||
NS_IMETHODIMP_(nsrefcnt) _class::AddRef(void) \
|
||||
{ \
|
||||
NS_PRECONDITION(PRInt32(mRefCnt) >= 0, "illegal refcnt"); \
|
||||
++mRefCnt; \
|
||||
fprintf(stderr, "mozSimpleContainer:AddRef, mRefCnt=%d\n", mRefCnt); \
|
||||
return mRefCnt; \
|
||||
}
|
||||
|
||||
#define NS_IMPL_RELEASE_TRACE(_class) \
|
||||
NS_IMETHODIMP_(nsrefcnt) _class::Release(void) \
|
||||
{ \
|
||||
NS_PRECONDITION(0 != mRefCnt, "dup release"); \
|
||||
--mRefCnt; \
|
||||
fprintf(stderr, "mozSimpleContainer:Release, mRefCnt=%d\n", mRefCnt); \
|
||||
if (mRefCnt == 0) { \
|
||||
NS_DELETEXPCOM(this); \
|
||||
return 0; \
|
||||
} \
|
||||
return mRefCnt; \
|
||||
}
|
||||
|
||||
// Implement AddRef and Release
|
||||
NS_IMPL_ADDREF(mozSimpleContainer)
|
||||
NS_IMPL_RELEASE(mozSimpleContainer)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozSimpleContainer::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if ( aIID.Equals(kISupportsIID)) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(mozISimpleContainer*,this));
|
||||
|
||||
} else if ( aIID.Equals(mozISimpleContainer::GetIID()) ) {
|
||||
*aInstancePtr = NS_STATIC_CAST(mozISimpleContainer*,this);
|
||||
|
||||
} else if ( aIID.Equals(nsIWebShellContainer::GetIID()) ) {
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIWebShellContainer*,this);
|
||||
|
||||
} else {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_ADDREF_THIS();
|
||||
|
||||
fprintf(stderr, "mozSimpleContainer::QueryInterface, mRefCnt = %d\n", mRefCnt);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Initializes simple container for native window widget
|
||||
* @param aNativeWidget native window widget (e.g., GtkWidget)
|
||||
* @param width window width (pixels)
|
||||
* @param height window height (pixels)
|
||||
* @param aPref preferences object
|
||||
*/
|
||||
NS_IMETHODIMP mozSimpleContainer::Init(nsNativeWidget aNativeWidget,
|
||||
PRInt32 width, PRInt32 height,
|
||||
nsIPref* aPref)
|
||||
{
|
||||
// Create web shell and show it
|
||||
nsresult result = nsRepository::CreateInstance(kWebShellCID, nsnull,
|
||||
kIWebShellIID,
|
||||
getter_AddRefs(mWebShell));
|
||||
|
||||
if (NS_FAILED(result) || !mWebShell) {
|
||||
fprintf(stderr, "Failed to create create web shell\n");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
mWebShell->Init(aNativeWidget, 0, 0, width, height);
|
||||
|
||||
mWebShell->SetContainer(this);
|
||||
if (aPref) {
|
||||
mWebShell->SetPrefs(aPref);
|
||||
}
|
||||
mWebShell->Show();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozSimpleContainer::WillLoadURL(nsIWebShell* aShell, const PRUnichar* aURL, nsLoadType aReason)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozSimpleContainer::BeginLoadURL(nsIWebShell* aShell, const PRUnichar* aURL)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozSimpleContainer::ProgressLoadURL(nsIWebShell* aShell,
|
||||
const PRUnichar* aURL, PRInt32 aProgress, PRInt32 aProgressMax)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozSimpleContainer::EndLoadURL(nsIWebShell* aShell,
|
||||
const PRUnichar* aURL,
|
||||
nsresult aStatus)
|
||||
{
|
||||
nsCOMPtr<nsIDOMSelection> selection;
|
||||
nsresult result;
|
||||
|
||||
if (aShell == mWebShell.get()) {
|
||||
nsCOMPtr<nsIDOMDocument> domDoc;
|
||||
nsCOMPtr<nsIPresShell> presShell;
|
||||
|
||||
result = GetDocument(*getter_AddRefs(domDoc));
|
||||
if (NS_FAILED(result) || !domDoc) return result;
|
||||
|
||||
result = GetPresShell(*getter_AddRefs(presShell));
|
||||
if (NS_FAILED(result) || !presShell) return result;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozSimpleContainer::NewWebShell(PRUint32 aChromeMask,
|
||||
PRBool aVisible,
|
||||
nsIWebShell*& aNewWebShell)
|
||||
{
|
||||
aNewWebShell = nsnull;
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP mozSimpleContainer::FindWebShellWithName(const PRUnichar* aName,
|
||||
nsIWebShell*& aResult)
|
||||
{
|
||||
aResult = nsnull;
|
||||
nsString aNameStr(aName);
|
||||
|
||||
nsIWebShell *aWebShell;
|
||||
|
||||
if (NS_OK == GetWebShell(aWebShell)) {
|
||||
const PRUnichar *name;
|
||||
if (NS_OK == aWebShell->GetName(&name)) {
|
||||
if (aNameStr.Equals(name)) {
|
||||
aResult = aWebShell;
|
||||
NS_ADDREF(aResult);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (NS_OK == aWebShell->FindChildWithName(aName, aResult)) {
|
||||
if (nsnull != aResult) {
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozSimpleContainer::ContentShellAdded(nsIWebShell* aChildShell,
|
||||
nsIContent* frameNode)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozSimpleContainer::CreatePopup(nsIDOMElement* aElement,
|
||||
nsIDOMElement* aPopupContent,
|
||||
PRInt32 aXPos, PRInt32 aYPos,
|
||||
const nsString& aPopupType,
|
||||
const nsString& anAnchorAlignment,
|
||||
const nsString& aPopupAlignment,
|
||||
nsIDOMWindow* aWindow, nsIDOMWindow** outPopup)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozSimpleContainer::FocusAvailable(nsIWebShell* aFocusedWebShell,
|
||||
PRBool& aFocusTaken)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Resizes container to new dimensions
|
||||
* @param width new window width (pixels)
|
||||
* @param height new window height (pixels)
|
||||
*/
|
||||
NS_IMETHODIMP mozSimpleContainer::Resize(PRInt32 aWidth, PRInt32 aHeight)
|
||||
{
|
||||
if (!mWebShell) return NS_ERROR_FAILURE;
|
||||
|
||||
mWebShell->SetBounds(0, 0, aWidth, aHeight);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Loads specified URL into container
|
||||
* @param aURL URL string
|
||||
*/
|
||||
NS_IMETHODIMP mozSimpleContainer::LoadURL(const char* aURL)
|
||||
{
|
||||
if (!mWebShell) return NS_ERROR_FAILURE;
|
||||
|
||||
nsString aStr(aURL);
|
||||
mWebShell->LoadURL(aStr.GetUnicode());
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Gets web shell in container
|
||||
* @param aWebShell (output) web shell object
|
||||
*/
|
||||
NS_IMETHODIMP mozSimpleContainer::GetWebShell(nsIWebShell*& aWebShell)
|
||||
{
|
||||
aWebShell = mWebShell.get();
|
||||
NS_IF_ADDREF(aWebShell); // Add ref'ed; needs to be released
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Gets DOM document in container
|
||||
* @param aDocument (output) DOM document
|
||||
*/
|
||||
NS_IMETHODIMP mozSimpleContainer::GetDocument(nsIDOMDocument*& aDocument)
|
||||
{
|
||||
|
||||
aDocument = nsnull;
|
||||
|
||||
if (mWebShell) {
|
||||
nsIContentViewer* contViewer;
|
||||
mWebShell->GetContentViewer(&contViewer);
|
||||
|
||||
if (nsnull != contViewer) {
|
||||
nsIDocumentViewer* docViewer;
|
||||
if (NS_OK == contViewer->QueryInterface(kIDocumentViewerIID,
|
||||
(void**) &docViewer))
|
||||
{
|
||||
nsIDocument* vDoc;
|
||||
docViewer->GetDocument(vDoc);
|
||||
|
||||
if (nsnull != vDoc) {
|
||||
nsIDOMDocument* vDOMDoc;
|
||||
if (NS_OK == vDoc->QueryInterface(kIDOMDocumentIID,
|
||||
(void**) &vDOMDoc))
|
||||
{
|
||||
aDocument = vDOMDoc; // Add ref'ed; needs to be released
|
||||
}
|
||||
NS_RELEASE(vDoc);
|
||||
}
|
||||
|
||||
NS_RELEASE(docViewer);
|
||||
}
|
||||
|
||||
NS_RELEASE(contViewer);
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/** Gets presentation shell associated with container
|
||||
* @param aPresShell (output) presentation shell
|
||||
*/
|
||||
NS_IMETHODIMP mozSimpleContainer::GetPresShell(nsIPresShell*& aPresShell)
|
||||
{
|
||||
aPresShell = nsnull;
|
||||
|
||||
nsIPresShell* presShell = nsnull;
|
||||
|
||||
if (mWebShell) {
|
||||
nsIContentViewer* contViewer = nsnull;
|
||||
mWebShell->GetContentViewer(&contViewer);
|
||||
|
||||
if (nsnull != contViewer) {
|
||||
nsIDocumentViewer* docViewer = nsnull;
|
||||
contViewer->QueryInterface(kIDocumentViewerIID, (void**) &docViewer);
|
||||
|
||||
if (nsnull != docViewer) {
|
||||
nsIPresContext* presContext;
|
||||
docViewer->GetPresContext(presContext);
|
||||
|
||||
if (nsnull != presContext) {
|
||||
presContext->GetShell(&presShell); // Add ref'ed
|
||||
aPresShell = presShell;
|
||||
NS_RELEASE(presContext);
|
||||
}
|
||||
|
||||
NS_RELEASE(docViewer);
|
||||
}
|
||||
|
||||
NS_RELEASE(contViewer);
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
100
mozilla/extensions/xmlterm/geckoterm/mozSimpleContainer.h
Normal file
100
mozilla/extensions/xmlterm/geckoterm/mozSimpleContainer.h
Normal file
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is XMLterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
// mozSimpleContainer.h: declaration of mozSimpleContainer class
|
||||
// implementing mozISimpleContainer,
|
||||
// which provides a WebShell container for use in simple programs
|
||||
// using the layout engine
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#include "mozISimpleContainer.h"
|
||||
|
||||
class mozSimpleContainer : public mozISimpleContainer {
|
||||
|
||||
public:
|
||||
|
||||
mozSimpleContainer();
|
||||
virtual ~mozSimpleContainer();
|
||||
|
||||
// nsISupports
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// nsIWebShellContainer interface
|
||||
NS_IMETHOD WillLoadURL(nsIWebShell* aShell,
|
||||
const PRUnichar* aURL,
|
||||
nsLoadType aReason);
|
||||
|
||||
NS_IMETHOD BeginLoadURL(nsIWebShell* aShell,
|
||||
const PRUnichar* aURL);
|
||||
|
||||
|
||||
NS_IMETHOD ProgressLoadURL(nsIWebShell* aShell,
|
||||
const PRUnichar* aURL,
|
||||
PRInt32 aProgress,
|
||||
PRInt32 aProgressMax);
|
||||
|
||||
NS_IMETHOD EndLoadURL(nsIWebShell* aShell,
|
||||
const PRUnichar* aURL,
|
||||
nsresult aStatus);
|
||||
|
||||
NS_IMETHOD NewWebShell(PRUint32 aChromeMask,
|
||||
PRBool aVisible,
|
||||
nsIWebShell *&aNewWebShell);
|
||||
|
||||
NS_IMETHOD FindWebShellWithName(const PRUnichar* aName,
|
||||
nsIWebShell*& aResult);
|
||||
|
||||
NS_IMETHOD ContentShellAdded(nsIWebShell* aChildShell,
|
||||
nsIContent* frameNode);
|
||||
|
||||
NS_IMETHOD CreatePopup(nsIDOMElement* aElement,
|
||||
nsIDOMElement* aPopupContent,
|
||||
PRInt32 aXPos, PRInt32 aYPos,
|
||||
const nsString& aPopupType,
|
||||
const nsString& anAnchorAlignment,
|
||||
const nsString& aPopupAlignment,
|
||||
nsIDOMWindow* aWindow, nsIDOMWindow** outPopup);
|
||||
|
||||
NS_IMETHOD FocusAvailable(nsIWebShell* aFocusedWebShell,
|
||||
PRBool& aFocusTaken);
|
||||
|
||||
// other
|
||||
NS_IMETHOD Init(nsNativeWidget aNativeWidget,
|
||||
PRInt32 width, PRInt32 height,
|
||||
nsIPref* aPref);
|
||||
|
||||
NS_IMETHOD Resize(PRInt32 aWidth, PRInt32 aHeight);
|
||||
|
||||
NS_IMETHOD LoadURL(const char* aURL);
|
||||
|
||||
NS_IMETHOD GetWebShell(nsIWebShell*& aWebShell);
|
||||
|
||||
NS_IMETHOD GetDocument(nsIDOMDocument*& aDocument);
|
||||
|
||||
NS_IMETHOD GetPresShell(nsIPresShell*& aPresShell);
|
||||
|
||||
protected:
|
||||
|
||||
/** owning reference to web shell created by us */
|
||||
nsCOMPtr<nsIWebShell> mWebShell;
|
||||
|
||||
};
|
||||
23
mozilla/extensions/xmlterm/geckoterm/nsSetupRegistry.cpp
Normal file
23
mozilla/extensions/xmlterm/geckoterm/nsSetupRegistry.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS"
|
||||
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
||||
* the License for the specific language governing rights and limitations
|
||||
* under the License.
|
||||
*
|
||||
* The Original Code is Mozilla Communicator client code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are Copyright (C) 1998
|
||||
* Netscape Communications Corporation. All Rights Reserved.
|
||||
*/
|
||||
|
||||
// nsSetupRegistry.cpp: Just a copy of viewer's nSetupRegistry
|
||||
|
||||
#include "../../../webshell/tests/viewer/nsSetupRegistry.cpp"
|
||||
|
||||
198
mozilla/extensions/xmlterm/geckoterm/nsTimer.cpp
Normal file
198
mozilla/extensions/xmlterm/geckoterm/nsTimer.cpp
Normal file
@@ -0,0 +1,198 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
#include "nsITimer.h"
|
||||
#include "nsITimerCallback.h"
|
||||
#include "nsCRT.h"
|
||||
#include "prlog.h"
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
static NS_DEFINE_IID(kITimerIID, NS_ITIMER_IID);
|
||||
|
||||
extern "C" gint nsTimerExpired(gpointer aCallData);
|
||||
|
||||
/*
|
||||
* Implementation of timers using Gtk timer facility
|
||||
*/
|
||||
class TimerImpl : public nsITimer {
|
||||
public:
|
||||
|
||||
public:
|
||||
TimerImpl();
|
||||
virtual ~TimerImpl();
|
||||
|
||||
virtual nsresult Init(nsTimerCallbackFunc aFunc,
|
||||
void *aClosure,
|
||||
// PRBool aRepeat,
|
||||
PRUint32 aDelay);
|
||||
|
||||
virtual nsresult Init(nsITimerCallback *aCallback,
|
||||
// PRBool aRepeat,
|
||||
PRUint32 aDelay);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
virtual void Cancel();
|
||||
virtual PRUint32 GetDelay() { return mDelay; }
|
||||
virtual void SetDelay(PRUint32 aDelay) { mDelay=aDelay; };
|
||||
virtual void* GetClosure() { return mClosure; }
|
||||
|
||||
void FireTimeout();
|
||||
|
||||
private:
|
||||
nsresult Init(PRUint32 aDelay);
|
||||
|
||||
PRUint32 mDelay;
|
||||
nsTimerCallbackFunc mFunc;
|
||||
void *mClosure;
|
||||
nsITimerCallback *mCallback;
|
||||
// PRBool mRepeat;
|
||||
TimerImpl *mNext;
|
||||
guint mTimerId;
|
||||
};
|
||||
|
||||
void TimerImpl::FireTimeout()
|
||||
{
|
||||
if (mFunc != NULL) {
|
||||
(*mFunc)(this, mClosure);
|
||||
}
|
||||
else if (mCallback != NULL) {
|
||||
mCallback->Notify(this); // Fire the timer
|
||||
}
|
||||
|
||||
// Always repeating here
|
||||
|
||||
// if (mRepeat)
|
||||
// mTimerId = gtk_timeout_add(aDelay, nsTimerExpired, this);
|
||||
}
|
||||
|
||||
|
||||
TimerImpl::TimerImpl()
|
||||
{
|
||||
// printf("TimerImple::TimerImpl called for %p\n", this);
|
||||
NS_INIT_REFCNT();
|
||||
mFunc = NULL;
|
||||
mCallback = NULL;
|
||||
mNext = NULL;
|
||||
mTimerId = 0;
|
||||
mDelay = 0;
|
||||
mClosure = NULL;
|
||||
}
|
||||
|
||||
TimerImpl::~TimerImpl()
|
||||
{
|
||||
//printf("TimerImpl::~TimerImpl called for %p\n", this);
|
||||
Cancel();
|
||||
NS_IF_RELEASE(mCallback);
|
||||
}
|
||||
|
||||
nsresult
|
||||
TimerImpl::Init(nsTimerCallbackFunc aFunc,
|
||||
void *aClosure,
|
||||
// PRBool aRepeat,
|
||||
PRUint32 aDelay)
|
||||
{
|
||||
//printf("TimerImpl::Init called with func + closure for %p\n", this);
|
||||
mFunc = aFunc;
|
||||
mClosure = aClosure;
|
||||
// mRepeat = aRepeat;
|
||||
|
||||
// This is ancient debug code that is making it impossible to have timeouts
|
||||
// greater than 10 seconds. -re
|
||||
|
||||
// if ((aDelay > 10000) || (aDelay < 0)) {
|
||||
// printf("Timer::Init() called with bogus value \"%d\"! Not enabling timer.\n",
|
||||
// aDelay);
|
||||
// return Init(aDelay);
|
||||
// }
|
||||
|
||||
mTimerId = gtk_timeout_add(aDelay, nsTimerExpired, this);
|
||||
|
||||
return Init(aDelay);
|
||||
}
|
||||
|
||||
nsresult
|
||||
TimerImpl::Init(nsITimerCallback *aCallback,
|
||||
// PRBool aRepeat,
|
||||
PRUint32 aDelay)
|
||||
{
|
||||
//printf("TimerImpl::Init called with callback only for %p\n", this);
|
||||
mCallback = aCallback;
|
||||
NS_ADDREF(mCallback);
|
||||
// mRepeat = aRepeat;
|
||||
|
||||
// This is ancient debug code that is making it impossible to have timeouts
|
||||
// greater than 10 seconds. -re
|
||||
|
||||
// if ((aDelay > 10000) || (aDelay < 0)) {
|
||||
// printf("Timer::Init() called with bogus value \"%d\"! Not enabling timer.\n",
|
||||
// aDelay);
|
||||
// return Init(aDelay);
|
||||
// }
|
||||
|
||||
mTimerId = gtk_timeout_add(aDelay, nsTimerExpired, this);
|
||||
|
||||
return Init(aDelay);
|
||||
}
|
||||
|
||||
nsresult
|
||||
TimerImpl::Init(PRUint32 aDelay)
|
||||
{
|
||||
//printf("TimerImpl::Init called with delay %d only for %p\n", aDelay, this);
|
||||
|
||||
mDelay = aDelay;
|
||||
// NS_ADDREF(this);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(TimerImpl, kITimerIID)
|
||||
|
||||
|
||||
void
|
||||
TimerImpl::Cancel()
|
||||
{
|
||||
//printf("TimerImpl::Cancel called for %p\n", this);
|
||||
TimerImpl *me = this;
|
||||
if (mTimerId)
|
||||
gtk_timeout_remove(mTimerId);
|
||||
}
|
||||
|
||||
NS_GFXNONXP nsresult NS_NewTimer(nsITimer** aInstancePtrResult)
|
||||
{
|
||||
NS_PRECONDITION(nsnull != aInstancePtrResult, "null ptr");
|
||||
if (nsnull == aInstancePtrResult) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
TimerImpl *timer = new TimerImpl();
|
||||
if (nsnull == timer) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
return timer->QueryInterface(kITimerIID, (void **) aInstancePtrResult);
|
||||
}
|
||||
|
||||
gint nsTimerExpired(gpointer aCallData)
|
||||
{
|
||||
//printf("nsTimerExpired for %p\n", aCallData);
|
||||
TimerImpl* timer = (TimerImpl *)aCallData;
|
||||
timer->FireTimeout();
|
||||
return 0;
|
||||
}
|
||||
8
mozilla/extensions/xmlterm/geckoterm/remake
Executable file
8
mozilla/extensions/xmlterm/geckoterm/remake
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/csh
|
||||
|
||||
set echo
|
||||
|
||||
cd ../base
|
||||
make
|
||||
cd ../geckoterm
|
||||
rm xmlterm; make xmlterm
|
||||
65
mozilla/extensions/xmlterm/linetest/Makefile.in
Normal file
65
mozilla/extensions/xmlterm/linetest/Makefile.in
Normal file
@@ -0,0 +1,65 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# makefile for xmlterm/linetest directory
|
||||
|
||||
ifdef STAND_ALONE
|
||||
DEPTH = ..
|
||||
topsrcdir = ..
|
||||
srcdir = .
|
||||
include $(topsrcdir)/config/autoconf.mk
|
||||
else
|
||||
DEPTH = ../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
endif
|
||||
|
||||
|
||||
# Debug option
|
||||
DEBUG = 1
|
||||
|
||||
# Program
|
||||
SIMPLE_PROGRAMS = lterm ptytest testunistr
|
||||
|
||||
# Defines
|
||||
DEFINES =
|
||||
|
||||
# Libraries to be linked
|
||||
LIBS = -lncurses -lxmlterm -lpthread
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include ../config/xmlterm_config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
1
mozilla/extensions/xmlterm/linetest/README
Normal file
1
mozilla/extensions/xmlterm/linetest/README
Normal file
@@ -0,0 +1 @@
|
||||
linetest --- Test programs (for LineTerm only)
|
||||
557
mozilla/extensions/xmlterm/linetest/lterm.c
Normal file
557
mozilla/extensions/xmlterm/linetest/lterm.c
Normal file
@@ -0,0 +1,557 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* lterm.c: Test driver for LINETERM using NCURSES
|
||||
* CPP options:
|
||||
* LINUX: for Linux2.0/glibc
|
||||
* SOLARIS: for Solaris2.6
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <termios.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "curses.h"
|
||||
|
||||
#define _REENTRANT
|
||||
#include <pthread.h>
|
||||
|
||||
#ifdef SOLARIS
|
||||
#include <stropts.h>
|
||||
#include <poll.h>
|
||||
#endif
|
||||
|
||||
#ifdef LINUX
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/poll.h>
|
||||
typedef unsigned int nfds_t;
|
||||
#endif
|
||||
|
||||
#include "lineterm.h"
|
||||
#include "tracelog.h"
|
||||
|
||||
#define MAXPROMPT 256 /* Maximum length of prompt regexp */
|
||||
#define MAXCOL 4096 /* Maximum columns in line buffer */
|
||||
|
||||
/* (0,0) is upper lefthand corner of window */
|
||||
|
||||
/* Character attributes
|
||||
A_NORMAL Normal display (no highlight)
|
||||
A_STANDOUT Best highlighting mode of the terminal.
|
||||
A_UNDERLINE Underlining
|
||||
A_REVERSE Reverse video
|
||||
A_BLINK Blinking
|
||||
A_DIM Half bright
|
||||
A_BOLD Extra bright or bold
|
||||
A_PROTECT Protected mode
|
||||
A_INVIS Invisible or blank mode
|
||||
A_ALTCHARSET Alternate character set
|
||||
A_CHARTEXT Bit-mask to extract a character
|
||||
COLOR_PAIR(n) Color-pair number n
|
||||
*/
|
||||
|
||||
/* GLOBAL VARIABLES */
|
||||
static int lineFlag = 0;
|
||||
static int ptyFlag = 1;
|
||||
static int debugFlag = 0;
|
||||
static int ltermNumber = -1;
|
||||
static SCREEN *termScreen = NULL;
|
||||
static char *ttyDevice;
|
||||
static char *errDevice;
|
||||
|
||||
static struct termios tios; /* TERMIOS structure */
|
||||
|
||||
static void finish(int sig);
|
||||
static pthread_t output_handler_thread_ID;
|
||||
|
||||
static void *output_handler(void *arg);
|
||||
|
||||
static void input_handler(int *plterm);
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
FILE *inFile, *outFile;
|
||||
UNICHAR uregexp[MAXPROMPT+1];
|
||||
int argNo, options, processType, retValue;
|
||||
int remaining, decoded;
|
||||
int messageLevel;
|
||||
char *promptStr;
|
||||
char **commandArgs;
|
||||
char *defaultCommand[] = {(char *)getenv("SHELL"), "-i", NULL};
|
||||
|
||||
/* Process command line arguments */
|
||||
lineFlag = 0;
|
||||
ptyFlag = 1;
|
||||
debugFlag = 0;
|
||||
processType = LTERM_DETERMINE_PROCESS;
|
||||
ttyDevice = NULL;
|
||||
errDevice = NULL;
|
||||
promptStr = "#$%>?"; /* JUST A LIST OF DELIMITERS AT PRESENT */
|
||||
|
||||
lineFlag = 1; /* Temporary */
|
||||
|
||||
argNo = 1;
|
||||
while (argNo < argc) {
|
||||
|
||||
if ((strcmp(argv[argNo],"-h") == 0)||(strcmp(argv[argNo],"-help") == 0)) {
|
||||
fprintf(stderr, "Usage: %s [-help] [-line] [-nopty] [-debug] [-tcsh / -bash] [-tty /dev/ttyname] [-err /dev/ttyname] [-prompt <prompt>] <command> ...\n", argv[0]);
|
||||
exit(0);
|
||||
|
||||
} else if (strcmp(argv[argNo],"-line") == 0) {
|
||||
lineFlag = 1;
|
||||
argNo++;
|
||||
|
||||
} else if (strcmp(argv[argNo],"-nopty") == 0) {
|
||||
ptyFlag = 0;
|
||||
argNo++;
|
||||
|
||||
} else if (strcmp(argv[argNo],"-debug") == 0) {
|
||||
debugFlag = 1;
|
||||
argNo++;
|
||||
|
||||
} else if (strcmp(argv[argNo],"-bash") == 0) {
|
||||
processType = LTERM_BASH_PROCESS;
|
||||
argNo++;
|
||||
|
||||
} else if (strcmp(argv[argNo],"-tcsh") == 0) {
|
||||
processType = LTERM_TCSH_PROCESS;
|
||||
argNo++;
|
||||
|
||||
} else if (strcmp(argv[argNo],"-tty") == 0) {
|
||||
argNo++;
|
||||
if (argNo < argc) {
|
||||
ttyDevice = argv[argNo];
|
||||
argNo++;
|
||||
}
|
||||
|
||||
} else if (strcmp(argv[argNo],"-err") == 0) {
|
||||
argNo++;
|
||||
if (argNo < argc) {
|
||||
errDevice = argv[argNo];
|
||||
argNo++;
|
||||
}
|
||||
|
||||
} else if (strcmp(argv[argNo],"-prompt") == 0) {
|
||||
argNo++;
|
||||
if (argNo < argc) {
|
||||
promptStr = argv[argNo];
|
||||
argNo++;
|
||||
}
|
||||
|
||||
} else
|
||||
break;
|
||||
}
|
||||
|
||||
if (argNo < argc) {
|
||||
/* Execute specified command */
|
||||
commandArgs = argv + argNo;
|
||||
} else {
|
||||
/* Execute default shell */
|
||||
commandArgs = defaultCommand;
|
||||
}
|
||||
|
||||
/* Convert prompt string to Unicode */
|
||||
retValue = utf8toucs(promptStr, strlen(promptStr), uregexp, MAXPROMPT,
|
||||
0, &remaining, &decoded);
|
||||
if ((retValue < 0) || (remaining > 0)) {
|
||||
fprintf(stderr, "lterm: Error in decoding prompt string\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
assert(decoded <= MAXPROMPT);
|
||||
uregexp[decoded] = U_NUL;
|
||||
|
||||
if (debugFlag) {
|
||||
messageLevel = 98;
|
||||
} else {
|
||||
messageLevel = 1;
|
||||
}
|
||||
|
||||
if (errDevice != NULL) {
|
||||
/* Redirect debug STDERR output to specified device */
|
||||
int errfd = -1;
|
||||
if ( (errfd = open(errDevice, O_WRONLY)) == -1)
|
||||
perror("lterm");
|
||||
|
||||
if (dup2(errfd, 2) == -1) {
|
||||
fprintf(stderr, "lterm: Failed dup2 for specified stderr\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
fprintf(stderr, "\n\nlterm: Echoing %s output to %s\n",
|
||||
argv[0], errDevice);
|
||||
}
|
||||
|
||||
signal(SIGINT, finish); /* Interrupt handler */
|
||||
|
||||
if (lineFlag) {
|
||||
/* Line mode */
|
||||
|
||||
/* Get terminal attributes */
|
||||
if (tcgetattr(0, &tios) == -1) {
|
||||
fprintf(stderr, "lterm: Failed to get TTY attributes\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* Disable signals, canonical mode processing, and echo */
|
||||
tios.c_lflag &= ~(ISIG | ICANON | ECHO );
|
||||
|
||||
/* set MIN=1 and TIME=0 */
|
||||
tios.c_cc[VMIN] = 1;
|
||||
tios.c_cc[VTIME] = 0;
|
||||
|
||||
/* Set terminal attributes */
|
||||
if (tcsetattr(0, TCSAFLUSH, &tios) == -1) {
|
||||
fprintf(stderr, "lterm: Failed to set TTY attributes\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
} else {
|
||||
/* Screen mode */
|
||||
if (ttyDevice == NULL) {
|
||||
/* Initialize screen on controlling TTY */
|
||||
initscr();
|
||||
|
||||
} else {
|
||||
/* Initialize screen on specified TTY */
|
||||
if (errDevice != NULL)
|
||||
fprintf(stderr, "lterm-00: Opening xterm %s\n", ttyDevice);
|
||||
inFile = fopen( ttyDevice, "r");
|
||||
outFile = fopen( ttyDevice, "w");
|
||||
termScreen = newterm("xterm", outFile, inFile);
|
||||
set_term(termScreen);
|
||||
}
|
||||
|
||||
/* NCURSES screen settings */
|
||||
cbreak(); /* set terminal to raw (non-canonical) mode */
|
||||
noecho(); /* Disable terminal echo */
|
||||
nonl(); /* Do not translate newline */
|
||||
intrflush(stdscr, FALSE); /* Flush input on interrupt */
|
||||
keypad(stdscr, TRUE); /* Enable user keypad */
|
||||
|
||||
#ifdef NCURSES_MOUSE_VERSION
|
||||
mousemask(BUTTON1_CLICKED, NULL); /* Capture Button1 click events */
|
||||
#endif
|
||||
|
||||
clear(); /* Clear screen */
|
||||
}
|
||||
|
||||
/* Initialize LTERM operations */
|
||||
lterm_init(messageLevel);
|
||||
|
||||
if (errDevice != NULL) {
|
||||
tlog_message("lterm-00: Testing tlog_message\n");
|
||||
tlog_warning("lterm-00: Testing tlog_warning\n");
|
||||
fprintf(stderr, "lterm-00: ");
|
||||
tlog_unichar(uregexp, ucslen(uregexp));
|
||||
}
|
||||
|
||||
if (errDevice != NULL)
|
||||
fprintf(stderr, "lintest-00: Opening LTERM to execute %s\n", commandArgs[0]);
|
||||
|
||||
options = 0;
|
||||
if (!ptyFlag) options |= LTERM_NOPTY_FLAG;
|
||||
|
||||
// options |= LTERM_NOSTDERR_FLAG;
|
||||
|
||||
ltermNumber = lterm_new();
|
||||
retValue = lterm_open(ltermNumber, commandArgs, NULL, uregexp,
|
||||
options, processType, NULL, NULL);
|
||||
if (retValue < 0) {
|
||||
fprintf(stderr, "lterm: Error %d in opening LTERM\n", retValue);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Create output handler thread */
|
||||
retValue = pthread_create(&output_handler_thread_ID, NULL,
|
||||
output_handler, (void *) <ermNumber);
|
||||
if (retValue != 0) {
|
||||
fprintf(stderr, "lterm: Error %d in creating OUTPUT_HANDLER thread\n",
|
||||
retValue);
|
||||
finish(0);
|
||||
}
|
||||
|
||||
if (errDevice != NULL)
|
||||
fprintf(stderr, "lterm-00: Created OUTPUT_HANDLER thread\n");
|
||||
|
||||
/* Process input */
|
||||
input_handler(<ermNumber);
|
||||
|
||||
/* Join output handler thread */
|
||||
if (errDevice != NULL)
|
||||
fprintf(stderr, "lterm-00: Joining OUTPUT_HANDLER thread\n");
|
||||
|
||||
retValue = pthread_join(output_handler_thread_ID, NULL);
|
||||
if (retValue != 0) {
|
||||
fprintf(stderr, "lterm: Error %d in joining OUTPUT_HANDLER thread\n",
|
||||
retValue);
|
||||
finish(0);
|
||||
}
|
||||
|
||||
finish(0);
|
||||
}
|
||||
|
||||
void finish(int sig)
|
||||
{
|
||||
if (!lineFlag) {
|
||||
endwin(); /* Close window */
|
||||
if (termScreen != NULL)
|
||||
delscreen(termScreen);
|
||||
}
|
||||
|
||||
if (ltermNumber >= 0) {
|
||||
/* Close and delete LTERM */
|
||||
lterm_delete(ltermNumber);
|
||||
}
|
||||
|
||||
if (errDevice != NULL)
|
||||
fprintf(stderr, "finished-00: Finished\n");
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/** Output an Unicode message to specified file descriptor. */
|
||||
void writeUnicode(int fd, const UNICHAR *buf, int count)
|
||||
{
|
||||
char str[MAXCOL];
|
||||
int j, k;
|
||||
|
||||
k = 0;
|
||||
for (j=0; j<count; j++) {
|
||||
|
||||
if (k >= MAXCOL-4) {
|
||||
if (MAXCOL >= 4) {
|
||||
str[MAXCOL-4] = '.';
|
||||
str[MAXCOL-3] = '.';
|
||||
str[MAXCOL-2] = '.';
|
||||
}
|
||||
k = MAXCOL-1;
|
||||
break;
|
||||
}
|
||||
|
||||
/* TEMPORARY IMPLEMENTATION: just truncate Unicode to byte characters */
|
||||
str[k++] = buf[j];
|
||||
}
|
||||
|
||||
if (k == 0) return;
|
||||
|
||||
if (write(fd, str, k) != k) {
|
||||
fprintf(stderr, "writeUnicode: Error in writing to FD %d\n", fd);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** Output an Unicode message to specified output stream
|
||||
* if NOCONTROL is true, control characters are converted to printable
|
||||
* characters before output
|
||||
*/
|
||||
void printUnicode(FILE *outStream, const UNICHAR *buf, int count, int noControl)
|
||||
{
|
||||
char str[MAXCOL];
|
||||
int j, k;
|
||||
|
||||
k = 0;
|
||||
for (j=0; j<count; j++) {
|
||||
|
||||
if (k >= MAXCOL-4) {
|
||||
if (MAXCOL >= 4) {
|
||||
str[MAXCOL-4] = '.';
|
||||
str[MAXCOL-3] = '.';
|
||||
str[MAXCOL-2] = '.';
|
||||
}
|
||||
k = MAXCOL-1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!noControl && ((buf[j] < U_SPACE) || (buf[j] == U_DEL)) ) {
|
||||
/* Control character */
|
||||
str[k++] = U_CARET;
|
||||
str[k++] = buf[j]+U_ATSIGN;
|
||||
} else {
|
||||
/* Printable character */
|
||||
/* TEMPORARY IMPLEMENTATION: just truncate Unicode to byte characters */
|
||||
str[k++] = buf[j];
|
||||
}
|
||||
}
|
||||
|
||||
/* Insert terminating null character and display string */
|
||||
str[k++] = '\0';
|
||||
fprintf(outStream, "%s\n", str);
|
||||
}
|
||||
|
||||
|
||||
void input_handler(int *plterm)
|
||||
{
|
||||
char ch;
|
||||
UNICHAR uch;
|
||||
int n_written;
|
||||
|
||||
if (lineFlag) {
|
||||
|
||||
for (;;) {
|
||||
/* Read a character from TTY (raw mode) */
|
||||
ch = getchar();
|
||||
|
||||
if (ch == 0) {
|
||||
fprintf(stderr, "input_handler-00: NUL character read; terminating\n");
|
||||
break;
|
||||
}
|
||||
|
||||
uch = (UNICHAR) ch;
|
||||
n_written = lterm_write(*plterm, &uch, 1, LTERM_WRITE_PLAIN_INPUT);
|
||||
|
||||
/* Exit loop if TTY has been closed */
|
||||
if (n_written == -2) {
|
||||
if (errDevice != NULL)
|
||||
fprintf(stderr, "input_handler-00: pseudo-TTY has been closed\n", *plterm);
|
||||
break;
|
||||
}
|
||||
|
||||
if (n_written < 0) {
|
||||
fprintf(stderr, "input_handler: Error %d return from lterm_write\n",
|
||||
n_written);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Close LTERM */
|
||||
if (errDevice != NULL)
|
||||
fprintf(stderr, "input_handler-00: Closing LTERM %d\n", *plterm);
|
||||
|
||||
/* Close and delete LTERM */
|
||||
lterm_delete(*plterm);
|
||||
*plterm = -1;
|
||||
}
|
||||
|
||||
void *output_handler(void *arg)
|
||||
{
|
||||
int *plterm = (int *) arg;
|
||||
int timeout = -1;
|
||||
UNICHAR buf[MAXCOL];
|
||||
UNISTYLE style[MAXCOL];
|
||||
int n_read, opcodes, buf_row, buf_col, cursor_row, cursor_col;
|
||||
int xmax, ymax, x, y, c;
|
||||
MEVENT mev;
|
||||
|
||||
if (errDevice != NULL)
|
||||
fprintf(stderr, "output_handler-00: thread ID = %d, LTERM=%d\n",
|
||||
pthread_self(), *plterm);
|
||||
|
||||
if (!lineFlag) {
|
||||
/* Get screen size */
|
||||
getmaxyx(stdscr, ymax, xmax);
|
||||
|
||||
if (errDevice != NULL)
|
||||
fprintf(stderr, "output_handler-00: screen xmax = %d, ymax = %d\n",
|
||||
xmax,ymax);
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
n_read = lterm_read(*plterm, timeout, buf, MAXCOL,
|
||||
style, &opcodes,
|
||||
&buf_row, &buf_col, &cursor_row, &cursor_col);
|
||||
|
||||
if (n_read == -1) {
|
||||
fprintf(stderr, "output_handler: Error %d return from lterm_read\n",
|
||||
n_read);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Exit loop if TTY has been closed;
|
||||
* leave it to input handler to close the LTERM.
|
||||
*/
|
||||
if (n_read == -2) {
|
||||
if (errDevice != NULL)
|
||||
fprintf(stderr, "output_handler: pseudo-TTY has been closed\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (debugFlag) {
|
||||
fprintf(stderr, "output_handler-00: n_read=%d, opcodes=%x, buf_row/col=%d/%d, cursor_row/col=%d/%d\n",
|
||||
n_read, opcodes, buf_row, buf_col, cursor_row, cursor_col);
|
||||
fprintf(stderr, "output_handler-00: U(%d): ", n_read);
|
||||
printUnicode(stderr, buf, n_read, 1);
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
if (opcodes & LTERM_STREAMDATA_CODE) {
|
||||
/* Stream data */
|
||||
if (debugFlag)
|
||||
fprintf(stderr, "output_handler-00: STREAMDATA\n");
|
||||
|
||||
} else if (opcodes & LTERM_SCREENDATA_CODE) {
|
||||
/* Screen data */
|
||||
if (debugFlag)
|
||||
fprintf(stderr, "output_handler-00: SCREENDATA\n");
|
||||
|
||||
} else if (opcodes & LTERM_LINEDATA_CODE) {
|
||||
/* Line data */
|
||||
if (debugFlag)
|
||||
fprintf(stderr, "output_handler-00: LINEDATA\n");
|
||||
|
||||
if (lineFlag) {
|
||||
int j;
|
||||
write(1, "\033[2K", 4);
|
||||
write(1, "\r", 1);
|
||||
|
||||
if (opcodes & LTERM_META_CODE)
|
||||
write(1, "META", 4);
|
||||
|
||||
writeUnicode(1, buf, n_read);
|
||||
|
||||
for (j=0; j< (n_read-cursor_col); j++)
|
||||
write(1, "\033[D", 3);
|
||||
|
||||
if (opcodes & LTERM_BELL_CODE)
|
||||
write(1, "\007", 1);
|
||||
|
||||
if (opcodes & LTERM_CLEAR_CODE)
|
||||
write(1, "\033[H\033[2J", 7);
|
||||
|
||||
if (opcodes & LTERM_NEWLINE_CODE)
|
||||
write(1, "\n", 1);
|
||||
}
|
||||
|
||||
} else if (opcodes != 0) {
|
||||
fprintf(stderr, "output_handler: invalid opcodes %x\n", opcodes);
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
366
mozilla/extensions/xmlterm/linetest/ptytest.c
Normal file
366
mozilla/extensions/xmlterm/linetest/ptytest.c
Normal file
@@ -0,0 +1,366 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "MPL"); you may not use this file
|
||||
* except in compliance with the MPL. You may obtain a copy of
|
||||
* the MPL at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the MPL is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the MPL for the specific language governing
|
||||
* rights and limitations under the MPL.
|
||||
*
|
||||
* The Original Code is lineterm.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
* Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
* Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU General Public License (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of
|
||||
* those above. If you wish to allow use of your version of this
|
||||
* file only under the terms of the GPL and not to allow
|
||||
* others to use your version of this file under the MPL, indicate
|
||||
* your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
* If you do not delete the provisions above, a recipient
|
||||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*/
|
||||
|
||||
/* ptytest.c: Test driver for ptystream.c
|
||||
* CPP options:
|
||||
* LINUX: for Linux2.0/glibc
|
||||
* SOLARIS: for Solaris2.6
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <termios.h>
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef SOLARIS
|
||||
#include <stropts.h>
|
||||
#include <poll.h>
|
||||
#endif
|
||||
|
||||
#ifdef LINUX
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/poll.h>
|
||||
typedef unsigned int nfds_t;
|
||||
#endif
|
||||
|
||||
#include "ptystream.h"
|
||||
|
||||
static struct termios tios; /* TERMIOS structure */
|
||||
|
||||
void pipeTest(int argc, char *argv[]);
|
||||
void ptyTest(int argc, char *argv[]);
|
||||
|
||||
int echofd = -1;
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc < 4) {
|
||||
fprintf(stderr, "Usage: %s pty|pipe <echo-tty-name>|'' <shell-path> ...\n",
|
||||
argv[0]);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* Get terminal attributes */
|
||||
if (tcgetattr(0, &tios) == -1) {
|
||||
fprintf(stderr, "Failed to get TTY attributes\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* Disable signals, canonical mode processing, and echo */
|
||||
tios.c_lflag &= ~(ISIG | ICANON | ECHO );
|
||||
|
||||
/* set MIN=1 and TIME=0 */
|
||||
tios.c_cc[VMIN] = 1;
|
||||
tios.c_cc[VTIME] = 0;
|
||||
|
||||
/* Set terminal attributes */
|
||||
if (tcsetattr(0, TCSAFLUSH, &tios) == -1) {
|
||||
fprintf(stderr, "Failed to set TTY attributes\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if (strlen(argv[2]) > 0) {
|
||||
/* Open TTY for echoing */
|
||||
if ( (echofd = open(argv[2], O_WRONLY)) == -1)
|
||||
perror("ptytest");
|
||||
fprintf(stderr, "Echoing %s output to %s\n", argv[1], argv[2]);
|
||||
write( echofd, "Echoing PTYTEST output ...\n", 27);
|
||||
}
|
||||
|
||||
fprintf(stderr, "Type Control-@ (NUL) to terminate input\n");
|
||||
|
||||
if (strcmp(argv[1],"pipe") == 0) {
|
||||
pipeTest(argc-3, argv+3);
|
||||
} else {
|
||||
ptyTest(argc-3, argv+3);
|
||||
}
|
||||
|
||||
if (echofd >= 0) close(echofd);
|
||||
exit(0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* sends raw terminal input/output to a shell through a pseudo-TTY */
|
||||
void ptyTest(int argc, char *argv[])
|
||||
{
|
||||
struct pollfd pollFD[2];
|
||||
nfds_t nfds = 2;
|
||||
struct ptys ptyStruc;
|
||||
|
||||
unsigned char ch;
|
||||
int ptyFD, pollCode;
|
||||
ssize_t n_read, n_written;
|
||||
|
||||
char temstr[3] = "^@";
|
||||
|
||||
/* Create a PTY */
|
||||
if (pty_create(&ptyStruc,argv,-1,0,0,0,1) == -1) {
|
||||
fprintf(stderr, "PTY creation failed\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
ptyFD = ptyStruc.ptyFD;
|
||||
|
||||
/* fprintf(stderr, "Polling for input on fd=0 (%s) and fd=%d\n",
|
||||
ttyname(0), ptyFD ); */
|
||||
|
||||
/* Set up polling to read from parent STDIN and child STDOUT */
|
||||
pollFD[0].fd = 0;
|
||||
pollFD[0].events = POLLIN;
|
||||
pollFD[1].fd = ptyFD;
|
||||
pollFD[1].events = POLLIN;
|
||||
|
||||
while ( (pollCode=poll(pollFD,nfds,-1)) >= 0) {
|
||||
if (pollCode == 0) continue;
|
||||
pollCode = 0;
|
||||
|
||||
if (pollFD[0].revents != 0) {
|
||||
/* Read character from parent STDIN and write to child STDIN */
|
||||
ch = getchar();
|
||||
|
||||
/* Exit poll loop if a null (Control-@) is read */
|
||||
if (ch == 0) break;
|
||||
|
||||
if (write(ptyFD, &ch, 1) != 1) {
|
||||
fprintf(stderr, "Error in writing to child STDIN\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (pollFD[1].revents != 0) {
|
||||
/* Read character from child STDOUT and write to parent STDOUT */
|
||||
|
||||
if ( (n_read=read(ptyFD, &ch, 1)) < 0) {
|
||||
fprintf(stderr, "Error in reading from child STDOUT\n");
|
||||
if (echofd >= 0) close(echofd);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if (n_read == 0) { /* End of file */
|
||||
if (echofd >= 0) close(echofd);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (echofd >= 0) {
|
||||
/* Echo output to another TTY */
|
||||
if (ch == 0x7F) {
|
||||
write(echofd, "\\DEL", 4);
|
||||
} else if (ch == 0x1B) {
|
||||
write(echofd, "\\ESC", 4);
|
||||
} else if (ch < 0x20) {
|
||||
temstr[1]= ch+'@';
|
||||
write(echofd, temstr, 2);
|
||||
} else {
|
||||
write(echofd, &ch, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (write(1, &ch, 1) != 1) {
|
||||
fprintf(stderr, "Error in writing to parent STDOUT\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/*
|
||||
if (ioctl(1, I_FLUSH, FLUSHRW) == -1) {
|
||||
fprintf(stderr, "Error return from ioctl\n");
|
||||
exit(-1);
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (pollCode != 0) {
|
||||
fprintf(stderr, "Error return from poll\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* Close PTY */
|
||||
pty_close(&ptyStruc);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* sends raw terminal input/output to a shell through a pipe */
|
||||
void pipeTest(int argc, char *argv[])
|
||||
{
|
||||
struct pollfd pollFD[2];
|
||||
nfds_t nfds = 2;
|
||||
pid_t child_pid = -1; /* child process id */
|
||||
|
||||
unsigned char ch;
|
||||
int pipeFD[2], pipeIN, pipeOUT, procIN, procOUT;
|
||||
int pollCode;
|
||||
ssize_t n_read, n_written;
|
||||
|
||||
char temstr[3] = "^@";
|
||||
|
||||
/* Create process input pipe (assumed unidirectional) */
|
||||
if (pipe(pipeFD) == -1) {
|
||||
fprintf(stderr, "Input pipe creation failed\n");
|
||||
exit(-1);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr,"Created input pipe: %d %d\n", pipeFD[0], pipeFD[1]);
|
||||
#endif
|
||||
procIN = pipeFD[0];
|
||||
pipeIN = pipeFD[1];
|
||||
|
||||
/* Create process output pipe (assumed unidirectional) */
|
||||
if (pipe(pipeFD) == -1) {
|
||||
fprintf(stderr, "Output pipe creation failed\n");
|
||||
exit(-1);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr,"Created output pipe: %d %d\n", pipeFD[0], pipeFD[1]);
|
||||
#endif
|
||||
pipeOUT = pipeFD[0];
|
||||
procOUT = pipeFD[1];
|
||||
|
||||
/* Fork a child process */
|
||||
child_pid = fork();
|
||||
if (child_pid < 0) {
|
||||
fprintf(stderr, "Fork failed\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "Fork child process %d\n", child_pid);
|
||||
#endif
|
||||
|
||||
if (child_pid == 0) {
|
||||
/* Child process */
|
||||
|
||||
if (dup2(procIN, 0) == -1) {
|
||||
fprintf(stderr, "Dup2 failed for stdin of child\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if (dup2(procOUT, 1) == -1) {
|
||||
fprintf(stderr, "Dup2 failed for stdout of child\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
execvp(argv[0], argv);
|
||||
fprintf(stderr, "Exec failed for command %s\n", argv[0]);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* Set up polling to read from parent STDIN and child STDOUT */
|
||||
pollFD[0].fd = 0;
|
||||
pollFD[0].events = POLLIN;
|
||||
pollFD[1].fd = pipeOUT;
|
||||
pollFD[1].events = POLLIN;
|
||||
|
||||
while ( (pollCode=poll(pollFD,nfds,-1)) >= 0) {
|
||||
|
||||
if (pollFD[0].revents != 0) {
|
||||
/* Read character from parent STDIN and write to child STDIN */
|
||||
ch = getchar();
|
||||
|
||||
/* Exit poll loop if a null (Control-@) is read */
|
||||
if (ch == 0) break;
|
||||
|
||||
if (write(pipeIN, &ch, 1) != 1) {
|
||||
fprintf(stderr, "Error in writing to child STDIN\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (pollFD[1].revents != 0) {
|
||||
/* Read character from child STDOUT and write to parent STDOUT */
|
||||
|
||||
if ( (n_read=read(pipeOUT, &ch, 1)) < 0) {
|
||||
fprintf(stderr, "Error in reading from child STDOUT\n");
|
||||
if (echofd >= 0) close(echofd);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if (n_read == 0) { /* End of file */
|
||||
if (echofd >= 0) close(echofd);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (echofd >= 0) {
|
||||
/* Echo output to another TTY */
|
||||
if (ch == 0x7F) {
|
||||
write(echofd, "\\DEL", 4);
|
||||
} else if (ch == 0x1B) {
|
||||
write(echofd, "\\ESC", 4);
|
||||
} else if (ch < 0x20) {
|
||||
temstr[1]= ch+'@';
|
||||
write(echofd, temstr, 2);
|
||||
} else {
|
||||
write(echofd, &ch, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (write(1, &ch, 1) != 1) {
|
||||
fprintf(stderr, "Error in writing to parent STDOUT\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/*
|
||||
if (ioctl(1, I_FLUSH, FLUSHRW) == -1) {
|
||||
fprintf(stderr, "Error return from ioctl\n");
|
||||
exit(-1);
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (kill(child_pid, SIGKILL) == -1) {
|
||||
fprintf(stderr, "Error return from kill\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if (pollCode != 0) {
|
||||
fprintf(stderr, "Error return from poll\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* Close pipes (assumed unidirectional) */
|
||||
close(pipeIN);
|
||||
close(pipeOUT);
|
||||
close(procIN);
|
||||
close(procOUT);
|
||||
|
||||
}
|
||||
7
mozilla/extensions/xmlterm/linetest/remake
Executable file
7
mozilla/extensions/xmlterm/linetest/remake
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/csh
|
||||
set echo
|
||||
|
||||
pushd ../base
|
||||
make STAND_ALONE=1 export libs
|
||||
popd
|
||||
make STAND_ALONE=1 $*
|
||||
32
mozilla/extensions/xmlterm/linetest/temncurses.c
Normal file
32
mozilla/extensions/xmlterm/linetest/temncurses.c
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
/* Move cursor and display string */
|
||||
x = 2;
|
||||
y = 4;
|
||||
|
||||
/* if (scanf("%d %d", &y, &x) == EOF) break; */
|
||||
|
||||
/* Display string at specified location and advance cursor */
|
||||
mvaddnstr(y, x, "test 1", 6);
|
||||
|
||||
attron(A_BOLD);
|
||||
mvaddnstr(y, x+6, "test2 ", 6);
|
||||
attroff(A_BOLD);
|
||||
|
||||
refresh();
|
||||
|
||||
for (;;) {
|
||||
c = getch();
|
||||
if (c == KEY_MOUSE) {
|
||||
if (getmouse(&mev) == OK) {
|
||||
move(mev.y, mev.x);
|
||||
addnstr("MEV ", 4);
|
||||
refresh();
|
||||
|
||||
/* Delete top line, and move up (if +1, insert top line, move down) */
|
||||
move(0,0);
|
||||
insdelln(-1);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
138
mozilla/extensions/xmlterm/linetest/testunistr.c
Normal file
138
mozilla/extensions/xmlterm/linetest/testunistr.c
Normal file
@@ -0,0 +1,138 @@
|
||||
/* testunistr.c: Test driver for Unicode strings module unistring.c */
|
||||
|
||||
/* public declarations */
|
||||
#include "unistring.h"
|
||||
|
||||
#include "assert.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int argNo, ucs16_opt, utf8_opt, j;
|
||||
int result, remaining, encoded, decoded;
|
||||
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s (-ucs16 <unicode-hex-string>|-utf8 <utf8-hex-string>|<ascii-chars>)\n",
|
||||
argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ucs16_opt = 0;
|
||||
utf8_opt = 0;
|
||||
argNo = 1;
|
||||
|
||||
if (argc > 1) {
|
||||
argNo = 2;
|
||||
if (strcmp(argv[1],"-ucs16") == 0) {
|
||||
ucs16_opt = 1;
|
||||
} else if (strcmp(argv[1],"-utf8") == 0) {
|
||||
utf8_opt = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (ucs16_opt) {
|
||||
char* tems = argv[argNo];
|
||||
int nus = strlen(argv[argNo])/4;
|
||||
int ns = 3*nus;
|
||||
UNICHAR* us = (UNICHAR*) malloc((nus+1)*sizeof(UNICHAR));
|
||||
unsigned char* s = (unsigned char*) malloc(ns+1);
|
||||
char temus[5] = {0,0,0,0,0};
|
||||
|
||||
for (j=0; j<nus; j++) {
|
||||
temus[0] = tems[4*j];
|
||||
temus[1] = tems[4*j+1];
|
||||
temus[2] = tems[4*j+2];
|
||||
temus[3] = tems[4*j+3];
|
||||
sscanf(temus, "%x", &us[j]);
|
||||
}
|
||||
us[nus] = U_NUL;
|
||||
|
||||
ucsprint(stderr, us, nus);
|
||||
fprintf(stderr, "\n");
|
||||
|
||||
ucstoutf8(us, nus, s, ns, &remaining, &encoded);
|
||||
assert(encoded <= ns);
|
||||
ns = encoded;
|
||||
s[ns] = '\0';
|
||||
|
||||
printf("UTF8(%d)=0x", ns);
|
||||
for (j=0; j<ns; j++) {
|
||||
printf("%02x",s[j]);
|
||||
}
|
||||
printf(", remaining=%d\n", remaining);
|
||||
|
||||
result = utf8toucs(s, ns, us, nus, 0, &remaining, &decoded);
|
||||
assert(decoded <= nus);
|
||||
us[decoded] = U_NUL;
|
||||
|
||||
printf("UCS(%d)=0x", decoded);
|
||||
|
||||
for (j=0; j<decoded; j++) {
|
||||
printf("%04x",us[j]);
|
||||
}
|
||||
printf(", remaining=%d, result=%d\n", remaining, result);
|
||||
|
||||
free(us);
|
||||
free(s);
|
||||
|
||||
} else {
|
||||
char* tems = argv[argNo];
|
||||
int ns, nus;
|
||||
char* s;
|
||||
UNICHAR* us;
|
||||
|
||||
ns = (utf8_opt) ? strlen(argv[argNo])/2 : strlen(argv[argNo]);
|
||||
s = (char*) malloc(ns+1);
|
||||
nus = ns;
|
||||
us = (UNICHAR*) malloc((nus+1)*sizeof(UNICHAR));
|
||||
|
||||
if (utf8_opt) {
|
||||
char temstr[3] = {0,0,0};
|
||||
int ival;
|
||||
for (j=0; j<ns; j++) {
|
||||
temstr[0] = tems[2*j];
|
||||
temstr[1] = tems[2*j+1];
|
||||
sscanf(temstr, "%x", &ival);
|
||||
s[j] = (unsigned char) ival;
|
||||
}
|
||||
} else {
|
||||
for (j=0; j<ns; j++)
|
||||
s[j] = tems[j];
|
||||
}
|
||||
s[ns] = '\0';
|
||||
|
||||
result = utf8toucs(s, ns, us, nus, 0, &remaining, &decoded);
|
||||
assert(decoded <= nus);
|
||||
nus = decoded;
|
||||
us[nus] = U_NUL;
|
||||
|
||||
printf("UCS(%d)=0x", nus);
|
||||
|
||||
for (j=0; j<nus; j++) {
|
||||
printf("%04x",us[j]);
|
||||
}
|
||||
|
||||
printf(", remaining=%d, result=%d\n", remaining, result);
|
||||
|
||||
ucstoutf8(us, nus, s, ns, &remaining, &encoded);
|
||||
|
||||
assert(encoded <= ns);
|
||||
s[encoded] = '\0';
|
||||
|
||||
if (utf8_opt) {
|
||||
printf("UTF8(%d)=0x", encoded);
|
||||
|
||||
for (j=0; j<encoded; j++)
|
||||
printf("%02x", s[j]);
|
||||
|
||||
printf(", remaining=%d\n", remaining);
|
||||
|
||||
} else {
|
||||
printf("UTF8(%d)='%s', remaining=%d\n", encoded, s, remaining);
|
||||
}
|
||||
|
||||
free(us);
|
||||
free(s);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
34
mozilla/extensions/xmlterm/makemake
Executable file
34
mozilla/extensions/xmlterm/makemake
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/bin/csh
|
||||
# makemake: Dumb script to make Makefile from Makefile.in
|
||||
# (recursively, if -r is specified)
|
||||
# Usage: makemake [-r]
|
||||
|
||||
if ($# == 0) then
|
||||
set makelist = (./Makefile.in)
|
||||
else
|
||||
set makelist = (`find . -name Makefile.in -print`)
|
||||
endif
|
||||
|
||||
foreach makefile ($makelist)
|
||||
set dir=${makefile:h}
|
||||
pushd $dir
|
||||
|
||||
set wd=`pwd`
|
||||
echo $wd
|
||||
|
||||
set top_srcdir = ""
|
||||
while (${wd:t} != "mozilla")
|
||||
if ("$top_srcdir" == "") then
|
||||
set top_srcdir = ".."
|
||||
else
|
||||
set top_srcdir = "../$top_srcdir"
|
||||
endif
|
||||
set wd=${wd:h}
|
||||
end
|
||||
|
||||
/bin/cp Makefile.in Makefile
|
||||
globsub @srcdir@ @srcdir@ . Makefile
|
||||
globsub @top_srcdir@ @top_srcdir@ $top_srcdir Makefile
|
||||
|
||||
popd
|
||||
end
|
||||
45
mozilla/extensions/xmlterm/tests/DocStream.c
Normal file
45
mozilla/extensions/xmlterm/tests/DocStream.c
Normal file
@@ -0,0 +1,45 @@
|
||||
/* DocStream.c: Display complete HTML document using IFRAME */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
char ch;
|
||||
|
||||
/* XMLTerm escape sequence signalling start of a HTML document */
|
||||
printf("\033{0;1S\007");
|
||||
|
||||
printf(" <HTML><BODY> \
|
||||
<FORM> \
|
||||
<IMG align=center src='chrome://navigator/skin/animthrob_single.gif'> \
|
||||
<B>Please click a button</B> <BR> \
|
||||
<INPUT ID='button-b#' TYPE=button VALUE='Bold' \
|
||||
onClick=\"return clickXMLTerm('sendln','#','b')\"> \
|
||||
<INPUT ID='button-e#' TYPE=button VALUE='Emphasis' \
|
||||
onClick=\"return clickXMLTerm('sendln',#,'e')\"> \
|
||||
<INPUT ID='button-q#' TYPE=button VALUE='Quit' \
|
||||
onClick=\"return clickXMLTerm('sendln',#,'q')\"> \
|
||||
<BR></FORM> \
|
||||
</BODY></HTML>");
|
||||
|
||||
/* XMLTerm escape sequence signalling end of stream */
|
||||
printf("%c", '\0');
|
||||
|
||||
while((ch = getchar())){ /* Poll for data generated by button click events */
|
||||
switch (ch) {
|
||||
case 'b':
|
||||
printf("\033{S\007<B>Hello World!</B><BR> %c", '\0');
|
||||
break;
|
||||
case 'e':
|
||||
printf("\033{S\007<EM>Hello World!</EM><BR> %c", '\0');
|
||||
break;
|
||||
case 'q':
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
40
mozilla/extensions/xmlterm/tests/HelloWorld.c
Normal file
40
mozilla/extensions/xmlterm/tests/HelloWorld.c
Normal file
@@ -0,0 +1,40 @@
|
||||
/* HelloWorld.c: Simple demo program for "pagelets" */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
char ch;
|
||||
printf("\033{S\007"); /* XMLTerm escape sequence signalling start of HTML */
|
||||
|
||||
printf("<FORM> \
|
||||
<IMG align=center src='chrome://navigator/skin/animthrob_single.gif'> \
|
||||
<B>Please click a button</B> <BR> \
|
||||
<INPUT ID='button-b#' TYPE=button VALUE='Bold' \
|
||||
onClick=\"return clickXMLTerm('sendln','#','b')\"> \
|
||||
<INPUT ID='button-e#' TYPE=button VALUE='Emphasis' \
|
||||
onClick=\"return clickXMLTerm('sendln',#,'e')\"> \
|
||||
<INPUT ID='button-q#' TYPE=button VALUE='Quit' \
|
||||
onClick=\"return clickXMLTerm('sendln',#,'q')\"> \
|
||||
<BR></FORM>");
|
||||
|
||||
printf("%c", '\0'); /* XMLTerm escape sequence signalling end of HTML */
|
||||
|
||||
while((ch = getchar())){ /* Poll for data generated by button click events */
|
||||
switch (ch) {
|
||||
case 'b':
|
||||
printf("\033{S\007<B>Hello World!</B><BR> %c", '\0');
|
||||
break;
|
||||
case 'e':
|
||||
printf("\033{S\007<EM>Hello World!</EM><BR> %c", '\0');
|
||||
break;
|
||||
case 'q':
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
67
mozilla/extensions/xmlterm/tests/Makefile.in
Normal file
67
mozilla/extensions/xmlterm/tests/Makefile.in
Normal file
@@ -0,0 +1,67 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# makefile for xmlterm/tests directory
|
||||
|
||||
ifdef STAND_ALONE
|
||||
DEPTH = ..
|
||||
topsrcdir = ..
|
||||
srcdir = .
|
||||
include $(topsrcdir)/config/autoconf.mk
|
||||
else
|
||||
DEPTH = ../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
endif
|
||||
|
||||
# Debug option
|
||||
DEBUG = 1
|
||||
|
||||
# C Sources
|
||||
CSRCS = escape.c teststream.c HelloWorld.c DocStream.c
|
||||
|
||||
# Program
|
||||
SIMPLE_PROGRAMS = escape teststream HelloWorld DocStream
|
||||
|
||||
# Defines
|
||||
DEFINES =
|
||||
|
||||
# Libraries to be linked
|
||||
LIBS =
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include ../config/xmlterm_config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
1
mozilla/extensions/xmlterm/tests/README
Normal file
1
mozilla/extensions/xmlterm/tests/README
Normal file
@@ -0,0 +1 @@
|
||||
tests --- Test programs for XMLterm
|
||||
56
mozilla/extensions/xmlterm/tests/escape.c
Normal file
56
mozilla/extensions/xmlterm/tests/escape.c
Normal file
@@ -0,0 +1,56 @@
|
||||
/* escape.c: Generates XMLterm/LineTerm escape sequences */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int nparam, j;
|
||||
char *param1, *param2, *param3, *code, *sparam;
|
||||
|
||||
param1 = NULL;
|
||||
param2 = NULL;
|
||||
param3 = NULL;
|
||||
code = NULL;
|
||||
sparam = "";
|
||||
nparam = 0;
|
||||
|
||||
for (j=1; j<argc; j++) {
|
||||
if ((*argv[j] >= '0') && (*argv[j] <= '9')) {
|
||||
if (j == 1) {
|
||||
param1 = argv[j];
|
||||
nparam = 1;
|
||||
} else if (j == 2) {
|
||||
param2 = argv[j];
|
||||
nparam = 2;
|
||||
} else if (j == 3) {
|
||||
param3 = argv[j];
|
||||
nparam = 3;
|
||||
}
|
||||
} else if (code == NULL) {
|
||||
code = argv[j];
|
||||
} else {
|
||||
sparam = argv[j];
|
||||
}
|
||||
}
|
||||
|
||||
if (code == NULL) {
|
||||
fprintf(stderr, "Usage: %s [<param1> [<param2> [<param3>]]] <code-character> [<string-param>] \n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (nparam == 0) {
|
||||
fprintf(stderr, "ESC{%s%sBEL\n", code, sparam);
|
||||
fprintf(stdout, "\033{%s%s\007", code, sparam);
|
||||
} else if (nparam == 1) {
|
||||
fprintf(stderr, "ESC{%s%s%sBEL\n", param1, code, sparam);
|
||||
fprintf(stdout, "\033{%s%s%s\007", param1, code, sparam);
|
||||
} else if (nparam == 2) {
|
||||
fprintf(stderr, "ESC{%s;%s%s%sBEL\n", param1, param2, code, sparam);
|
||||
fprintf(stdout, "\033{%s;%s%s%s\007", param1, param2, code, sparam);
|
||||
} else {
|
||||
fprintf(stderr, "ESC{%s;%s;%s%s%sBEL\n", param1, param2, param3, code, sparam);
|
||||
fprintf(stdout, "\033{%s;%s;%s%s%s\007", param1, param2, param3, code, sparam);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
20
mozilla/extensions/xmlterm/tests/teststream.c
Normal file
20
mozilla/extensions/xmlterm/tests/teststream.c
Normal file
@@ -0,0 +1,20 @@
|
||||
/* teststream.c: Test driver to generate escaped stream data */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "Usage: %s <data-string> [<terminator-string>]\n",argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (argc > 2) {
|
||||
/* fprintf(stderr, "{ESCS%sBEL%s%s", argv[2], argv[1], argv[2]); */
|
||||
fprintf(stdout, "\033{S%s\007%s%s", argv[2], argv[1], argv[2]);
|
||||
|
||||
} else {
|
||||
fprintf(stdout, "\033{S\007%s%c", argv[1], '\0');
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
84
mozilla/extensions/xmlterm/tests/xls
Executable file
84
mozilla/extensions/xmlterm/tests/xls
Executable file
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/perl
|
||||
# xls: an XMLterm wrapper for the UNIX "ls" command
|
||||
# Usage: xls [-c|--cols] [-h|help] [-i||--iconic] [-w|--window]
|
||||
|
||||
use Cwd;
|
||||
use Getopt::Long;
|
||||
|
||||
Getopt::Long::config('bundling');
|
||||
|
||||
$options = "@ARGV";
|
||||
|
||||
&GetOptions("cols|c=i", "help|h!", "iconic|i!", "window|w!");
|
||||
|
||||
if ($opt_help) {
|
||||
print "Usage: xls [-c|--cols] [-i|--iconic] [-w|--window]\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
# Icon details
|
||||
#$imgdir="chrome://xmlterm/skin/default/images"
|
||||
$imgdir = "file:/usr/share/pixmaps/mc";
|
||||
|
||||
($img{'directory'}, $img{'executable'}, $img{'plainfile'}) =
|
||||
('i-directory.png', 'i-executable.png', 'i-regular.png');
|
||||
|
||||
$ncols = 5;
|
||||
$ncols = $opt_cols if ($opt_cols);
|
||||
|
||||
print "\e{S\a"; # HTML stream escape sequence
|
||||
print "<TABLE FRAME=none BORDER=0>";
|
||||
print "<COLGROUP COLSPAN=$ncols WIDTH=1*>";
|
||||
|
||||
$dir = cwd();
|
||||
$rowimg = "";
|
||||
$rowtxt = "";
|
||||
$nfile = 0;
|
||||
foreach $file (glob("$dir/*")) { # for each file in current directory
|
||||
if (-d $file) { # directory
|
||||
$filetype = "directory";
|
||||
$sendtxt = "cd $file; xls $options";
|
||||
$sendimg = "file:/usr/share/pixmaps/mc/i-directory.png";
|
||||
|
||||
} elsif (-x $file) { # executable
|
||||
$filetype = "executable";
|
||||
$sendtxt = "$file";
|
||||
|
||||
} else { # plain file
|
||||
$filetype = "plainfile";
|
||||
$sendtxt = "";
|
||||
}
|
||||
|
||||
@comps = split(m./.,$file);
|
||||
$tail = $comps[$#comps]; # file name
|
||||
|
||||
if ($opt_window) {
|
||||
$sendcmd = "createln";
|
||||
} else {
|
||||
$sendcmd = "sendln";
|
||||
}
|
||||
|
||||
$clickcmd = qq%onclick="return clickXMLTerm('$sendcmd',-1,'$sendtxt')"%;
|
||||
|
||||
$rowimg .= "<TD><IMG SRC='$imgdir/$img{$filetype}' $clickcmd>";
|
||||
$rowtxt .= "<TD><SPAN CLASS='$filetype' $clickcmd>";
|
||||
$rowtxt .= "$tail</SPAN>";
|
||||
$nfile++;
|
||||
|
||||
if (($nfile % $ncols) == 0) { # print complete table row
|
||||
print "<TR>$rowimg" if ($opt_iconic) ;
|
||||
print "<TR>$rowtxt";
|
||||
$rowimg = "";
|
||||
$rowtxt = "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (length($rowtxt) != 0) {
|
||||
print "<TR>$rowimg" if ($opt_iconic) ;
|
||||
print "<TR>$rowtxt";
|
||||
}
|
||||
|
||||
print "</TABLE>";
|
||||
print "\000"; # Terminate HTML stream
|
||||
|
||||
81
mozilla/extensions/xmlterm/tests/xls.csh
Executable file
81
mozilla/extensions/xmlterm/tests/xls.csh
Executable file
@@ -0,0 +1,81 @@
|
||||
#!/bin/csh
|
||||
# xls.csh: a C-shell XMLterm wrapper for the UNIX "ls" command
|
||||
# Usage: xls.csh [-i] [-x]
|
||||
|
||||
set files=(`/bin/ls -d $cwd/*`)
|
||||
set ncols=4
|
||||
|
||||
##set echocmd="/usr/bin/echo"
|
||||
set echocmd="/bin/echo -e"
|
||||
|
||||
set iconic=0
|
||||
set create=0
|
||||
|
||||
set options=""
|
||||
foreach arg ($*)
|
||||
switch ($arg)
|
||||
case "-i":
|
||||
set iconic=1
|
||||
set options=($options $arg)
|
||||
breaksw
|
||||
case "-c":
|
||||
set create=1
|
||||
set options=($options $arg)
|
||||
breaksw
|
||||
endsw
|
||||
end
|
||||
|
||||
$echocmd '\033{S\007\c'
|
||||
$echocmd '<TABLE FRAME=none BORDER=0>'
|
||||
$echocmd "<COLGROUP COLSPAN=$ncols WIDTH=1*>"
|
||||
|
||||
set rowimg=""
|
||||
set rowtxt=""
|
||||
set nfile=0
|
||||
foreach file ($files)
|
||||
if (-d $file) then #directory
|
||||
set filetype="directory"
|
||||
set sendtxt="cd $file; xls $options"
|
||||
set sendimg="file:/usr/share/pixmaps/mc/i-directory.png"
|
||||
# set sendimg="chrome://xmlterm/skin/default/images/ficon3.gif"
|
||||
else if (-x $file) then #executable
|
||||
set filetype="executable"
|
||||
set sendtxt="$file"
|
||||
set sendimg="file:/usr/share/pixmaps/mc/i-executable.png"
|
||||
else #plain file
|
||||
set filetype="plainfile"
|
||||
set sendtxt=""
|
||||
set sendimg="file:/usr/share/pixmaps/mc/i-regular.png"
|
||||
endif
|
||||
|
||||
set tail=${file:t}
|
||||
|
||||
if ($create) then
|
||||
set cmd="createln"
|
||||
else
|
||||
set cmd="sendln"
|
||||
endif
|
||||
set clickcmd="onclick="'"'"return clickXMLTerm('$cmd',-1,'$sendtxt')"'"'
|
||||
|
||||
set rowimg="${rowimg}<TD><IMG SRC='$sendimg' $clickcmd>"
|
||||
set rowtxt="${rowtxt}<TD><SPAN CLASS='$filetype' $clickcmd>"
|
||||
set rowtxt="${rowtxt}$tail<SPAN/>"
|
||||
@ nfile++
|
||||
|
||||
if (($nfile % $ncols) == 0) then
|
||||
if ($iconic) $echocmd "<TR>$rowimg"
|
||||
$echocmd "<TR>$rowtxt"
|
||||
set rowimg=""
|
||||
set rowtxt=""
|
||||
endif
|
||||
|
||||
end
|
||||
|
||||
if ("$rowtxt" != "") then
|
||||
if ($iconic) $echocmd "<TR>$rowimg"
|
||||
$echocmd "<TR>$rowtxt"
|
||||
endif
|
||||
|
||||
$echocmd '</TABLE>'
|
||||
$echocmd '\000\c'
|
||||
|
||||
57
mozilla/extensions/xmlterm/ui/Makefile.in
Normal file
57
mozilla/extensions/xmlterm/ui/Makefile.in
Normal file
@@ -0,0 +1,57 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# makefile for xmlterm/ui directory
|
||||
|
||||
ifdef STAND_ALONE
|
||||
DEPTH = .
|
||||
topsrcdir = .
|
||||
VPATH = .
|
||||
srcdir = .
|
||||
include $(topsrcdir)/config/autoconf.mk
|
||||
else
|
||||
DEPTH = ../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
srcdir = @srcdir@
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
endif
|
||||
|
||||
DIRS = content skin
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include ../config/xmlterm_config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
1
mozilla/extensions/xmlterm/ui/README
Normal file
1
mozilla/extensions/xmlterm/ui/README
Normal file
@@ -0,0 +1 @@
|
||||
ui --- User Interface stuff for XMLterm
|
||||
61
mozilla/extensions/xmlterm/ui/content/Makefile.in
Normal file
61
mozilla/extensions/xmlterm/ui/content/Makefile.in
Normal file
@@ -0,0 +1,61 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# makefile for xmlterm/ui/content directory
|
||||
|
||||
ifdef STAND_ALONE
|
||||
DEPTH = .
|
||||
topsrcdir = .
|
||||
VPATH = .
|
||||
srcdir = .
|
||||
include $(topsrcdir)/config/autoconf.mk
|
||||
else
|
||||
DEPTH = ../../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
srcdir = @srcdir@
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
endif
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include ../../config/xmlterm_config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
EXPORT_RESOURCE_CONTENT = \
|
||||
$(srcdir)/xmlterm.html \
|
||||
$(NULL)
|
||||
|
||||
install::
|
||||
$(INSTALL) $(EXPORT_RESOURCE_CONTENT) $(DIST)/bin/chrome/xmlterm/content/default
|
||||
5
mozilla/extensions/xmlterm/ui/content/README
Normal file
5
mozilla/extensions/xmlterm/ui/content/README
Normal file
@@ -0,0 +1,5 @@
|
||||
content --- XUL, Javascript, and HTML for user interface
|
||||
|
||||
xmlterm.html XMLterm startup file containing HTML and Javascript
|
||||
Uses mozIXMLTermShell to create XMLterm
|
||||
Uses ../skin/xmlterm.css for stylesheets
|
||||
239
mozilla/extensions/xmlterm/ui/content/xmlterm.html
Normal file
239
mozilla/extensions/xmlterm/ui/content/xmlterm.html
Normal file
@@ -0,0 +1,239 @@
|
||||
<!-- xmlterm.html: XMLterm startup page -->
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>XMLterm Test Page</TITLE>
|
||||
|
||||
<LINK TITLE="DefaultStyle" REL="stylesheet" TYPE="text/css"
|
||||
HREF="chrome://xmlterm/skin/xmlterm.css">
|
||||
|
||||
<SCRIPT language="JavaScript">
|
||||
|
||||
// Control display of all output elements
|
||||
function DisplayAllOutput(flag) {
|
||||
var outputElements = document.getElementsByName("output");
|
||||
for (i=0; i<outputElements.length; i++) {
|
||||
var outputElement = outputElements[i];
|
||||
outputElement.style.display = (flag) ? "block" : "none";
|
||||
}
|
||||
|
||||
var promptElements = document.getElementsByName("prompt");
|
||||
for (i=0; i<promptElements.length; i++) {
|
||||
promptElement = promptElements[i];
|
||||
promptElement.style.setProperty("text-decoration",
|
||||
(flag) ? "none" : "underline", "")
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
|
||||
// Click handler
|
||||
function clickXMLTerm(name, number, arg) {
|
||||
dump("clickXMLTerm("+name+","+number+","+arg+")\n");
|
||||
//dump("clickXMLTerm:document.cookie="+document.cookie+"\n");
|
||||
|
||||
if (name === "prompt") {
|
||||
var outputElement = document.getElementById("output"+number);
|
||||
var promptElement = document.getElementById("prompt"+number);
|
||||
//dump(promptElement.style.getPropertyValue("text-decoration"));
|
||||
|
||||
if (outputElement.style.display == "none") {
|
||||
outputElement.style.display = "block";
|
||||
promptElement.style.setProperty("text-decoration","none","");
|
||||
} else {
|
||||
outputElement.style.display = "none";
|
||||
promptElement.style.setProperty("text-decoration","underline","");
|
||||
}
|
||||
|
||||
} else if (name === "command") {
|
||||
var commandElement = document.getElementById(name+number);
|
||||
var command = commandElement.firstChild.data;
|
||||
dump("command = "+command+"\n\n");
|
||||
window.xmltermshell.SendText("\025"+command+"\n", document.cookie);
|
||||
|
||||
} else {
|
||||
|
||||
if ((number >= 0) &&
|
||||
(window.xmltermshell.currentEntryNumber != number)) {
|
||||
dump("NOT CURRENT COMMAND\n");
|
||||
return (false);
|
||||
}
|
||||
|
||||
|
||||
if (name == "directory") {
|
||||
var command = "ls: "+arg;
|
||||
dump("command = "+command+"\n\n");
|
||||
window.xmltermshell.SendText("\025"+command+"\n", document.cookie);
|
||||
|
||||
} else if (name == "executable") {
|
||||
var command = arg;
|
||||
dump("command = "+command+"\n\n");
|
||||
window.xmltermshell.SendText("\025"+command+"\n", document.cookie);
|
||||
|
||||
} else if (name == "send") {
|
||||
dump("send = "+arg+"\n");
|
||||
window.xmltermshell.SendText(arg, document.cookie);
|
||||
|
||||
} else if (name == "sendln") {
|
||||
dump("sendln = "+arg+"\n\n");
|
||||
window.xmltermshell.SendText("\025"+arg+"\n", document.cookie);
|
||||
|
||||
} else if (name == "createln") {
|
||||
dump("createln = "+arg+"\n\n");
|
||||
xmltermshell.NewXMLTermWindow(arg+"\n");
|
||||
}
|
||||
}
|
||||
|
||||
return (false);
|
||||
}
|
||||
|
||||
// Double Click handler
|
||||
function dblclickXMLTerm(name, number, arg) {
|
||||
dump("dblclickXMLTerm("+name+","+number+","+arg+")\n");
|
||||
return (false);
|
||||
}
|
||||
|
||||
// Set history buffer size
|
||||
function SetHistory() {
|
||||
var field = document.getElementById('HistoryValue');
|
||||
dump("SetHistory "+field.value+"\n");
|
||||
xmltermshell.history = field.value;
|
||||
field.value = xmltermshell.history;
|
||||
return (false);
|
||||
}
|
||||
|
||||
// Set prompt
|
||||
function SetPrompt() {
|
||||
var field = document.getElementById('PromptValue');
|
||||
dump("SetPrompt "+field.value+"\n");
|
||||
xmltermshell.prompt = field.value;
|
||||
return (false);
|
||||
}
|
||||
|
||||
// Create new XMLTerm window
|
||||
function CreateXMLTermWindow(firstcommand) {
|
||||
xmltermshell.NewXMLTermWindow(firstcommand);
|
||||
return (false);
|
||||
}
|
||||
|
||||
// onLoad event handler
|
||||
function LoadHandler() {
|
||||
dump("xmlterm: LoadHandler ... "+window.xmltermshell+"\n");
|
||||
|
||||
if (window.xmltermshell) {
|
||||
// XMLTerm already initialized
|
||||
return (false);
|
||||
}
|
||||
|
||||
dump("Trying to make an XMLTerm Shell through the component manager...\n");
|
||||
|
||||
var xmltshell = Components.classes["component://mozilla/xmlterm/xmltermshell"].createInstance();
|
||||
|
||||
dump("Interface xmltshell1 = " + xmltshell + "\n");
|
||||
|
||||
xmltshell = xmltshell.QueryInterface(Components.interfaces.mozIXMLTermShell);
|
||||
dump("Interface xmltshell2 = " + xmltshell + "\n");
|
||||
|
||||
if (!xmltshell) {
|
||||
dump("Failed to create XMLTerm shell\n");
|
||||
window.close();
|
||||
return;
|
||||
}
|
||||
|
||||
// Store the XMLTerm shell in the window
|
||||
window.xmltermshell = xmltshell;
|
||||
|
||||
// Content window same as current window
|
||||
var contentWindow = window;
|
||||
|
||||
// Initialize XMLTerm shell in content window with argvals
|
||||
window.xmltermshell.Init(contentWindow, "", "");
|
||||
|
||||
//dump("LoadHandler:"+document.cookie+"\n");
|
||||
|
||||
dump("contentWindow="+contentWindow+"\n");
|
||||
dump("document="+document+"\n");
|
||||
dump("documentElement="+document.documentElement+"\n");
|
||||
|
||||
// Set focus to appropriate frame
|
||||
contentWindow.focus();
|
||||
|
||||
//contentWindow.xmltermshell = xmltermshell;
|
||||
|
||||
//dump(contentWindow.xmltermshell);
|
||||
|
||||
return (false);
|
||||
|
||||
dump("[Main] "+window+"\n");
|
||||
dump(window.screenX+", "+window.screenY+"\n");
|
||||
dump(window.scrollX+", "+window.scrollY+"\n");
|
||||
dump(window.pageXOffset+", "+window.pageYOffset+"\n");
|
||||
|
||||
dump("IFRAME checks\n");
|
||||
var iframe = document.getElementById('iframe1');
|
||||
|
||||
dump("iframe="+iframe+"\n");
|
||||
|
||||
frames=document.frames;
|
||||
dump("frames="+frames+"\n");
|
||||
dump("frames.length="+frames.length+"\n");
|
||||
|
||||
framewin = frames[0];
|
||||
|
||||
dump("framewin="+framewin+"\n");
|
||||
dump("framewin.document="+framewin.document+"\n");
|
||||
|
||||
dump(framewin.screenX+", "+framewin.screenY+"\n");
|
||||
dump(framewin.scrollX+", "+framewin.scrollY+"\n");
|
||||
dump(framewin.pageXOffset+", "+framewin.pageYOffset+"\n");
|
||||
|
||||
var body = framewin.document.getElementsByTagName("BODY")[0];
|
||||
dump("body="+body+"\n");
|
||||
|
||||
var height= body.scrollHeight;
|
||||
dump("height="+height+"\n");
|
||||
|
||||
// iframe.height = 800;
|
||||
// iframe.width = 700;
|
||||
|
||||
// framewin.sizeToContent();
|
||||
|
||||
framewin.xmltshell = xmltshell;
|
||||
dump(framewin.xmltshell+"\n");
|
||||
|
||||
dump("xmlterm: LoadHandler completed\n");
|
||||
return (false);
|
||||
}
|
||||
|
||||
</SCRIPT>
|
||||
|
||||
</HEAD>
|
||||
|
||||
<BODY onLoad="return LoadHandler();">
|
||||
|
||||
<TABLE FRAME=none BORDER=0>
|
||||
<TBODY>
|
||||
<TR><TD ALIGN=center>
|
||||
<FORM NAME="XMLTERM form">
|
||||
<INPUT TYPE="button" VALUE="Show all output"
|
||||
onClick="return DisplayAllOutput(true);">
|
||||
<INPUT TYPE="button" VALUE="Hide all output"
|
||||
onClick="return DisplayAllOutput(false);">
|
||||
<INPUT TYPE="button" VALUE="New XMLterm"
|
||||
onClick="return CreateXMLTermWindow('');">
|
||||
<BR>
|
||||
History Buffer Size:
|
||||
<INPUT TYPE="text" ID="HistoryValue" VALUE="">
|
||||
<INPUT TYPE="button" VALUE="Set" onClick="return SetHistory();">
|
||||
</FORM>
|
||||
</TABLE>
|
||||
|
||||
<!--
|
||||
<IFRAME NAME="iframe1" SRC="file:///home/svn/xmlterm/doc/web/tem2.html"
|
||||
FRAMEBORDER=0 WIDTH="20" HEIGHT=60>
|
||||
</IFRAME>
|
||||
-->
|
||||
|
||||
<DIV CLASS="session" ID="session">
|
||||
</DIV>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
66
mozilla/extensions/xmlterm/ui/skin/Makefile.in
Normal file
66
mozilla/extensions/xmlterm/ui/skin/Makefile.in
Normal file
@@ -0,0 +1,66 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (the "MPL"); you may not use this file
|
||||
# except in compliance with the MPL. You may obtain a copy of
|
||||
# the MPL at http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the MPL is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the MPL for the specific language governing
|
||||
# rights and limitations under the MPL.
|
||||
#
|
||||
# The Original Code is lineterm.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Ramalingam Saravanan.
|
||||
# Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
|
||||
# Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU General Public License (the "GPL"), in which case
|
||||
# the provisions of the GPL are applicable instead of
|
||||
# those above. If you wish to allow use of your version of this
|
||||
# file only under the terms of the GPL and not to allow
|
||||
# others to use your version of this file under the MPL, indicate
|
||||
# your decision by deleting the provisions above and replace them
|
||||
# with the notice and other provisions required by the GPL.
|
||||
# If you do not delete the provisions above, a recipient
|
||||
# may use your version of this file under either the MPL or the
|
||||
# GPL.
|
||||
#
|
||||
|
||||
# makefile for xmlterm/ui/skin directory
|
||||
|
||||
ifdef STAND_ALONE
|
||||
DEPTH = .
|
||||
topsrcdir = .
|
||||
VPATH = .
|
||||
srcdir = .
|
||||
include $(topsrcdir)/config/autoconf.mk
|
||||
else
|
||||
DEPTH = ../../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
srcdir = @srcdir@
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
endif
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include ../../config/xmlterm_config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
EXPORT_RESOURCE_SKIN = \
|
||||
$(srcdir)/xmlterm.css \
|
||||
$(NULL)
|
||||
|
||||
EXPORT_RESOURCE_TOOLBAR = \
|
||||
$(srcdir)/images/ficon.gif \
|
||||
$(NULL)
|
||||
|
||||
install::
|
||||
$(INSTALL) $(EXPORT_RESOURCE_SKIN) $(DIST)/bin/chrome/xmlterm/skin/default
|
||||
$(INSTALL) $(EXPORT_RESOURCE_TOOLBAR) $(DIST)/bin/chrome/xmlterm/skin/default/images
|
||||
5
mozilla/extensions/xmlterm/ui/skin/README
Normal file
5
mozilla/extensions/xmlterm/ui/skin/README
Normal file
@@ -0,0 +1,5 @@
|
||||
skin --- CSS stylesheets and images for user interface
|
||||
|
||||
xmlterm.css Stylesheet for XMLterm startup file ../content/xmlterm.html
|
||||
|
||||
|
||||
1
mozilla/extensions/xmlterm/ui/skin/images/README
Normal file
1
mozilla/extensions/xmlterm/ui/skin/images/README
Normal file
@@ -0,0 +1 @@
|
||||
images --- Icons and images for user interface
|
||||
BIN
mozilla/extensions/xmlterm/ui/skin/images/ficon.gif
Normal file
BIN
mozilla/extensions/xmlterm/ui/skin/images/ficon.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 161 B |
19
mozilla/extensions/xmlterm/ui/skin/xmlterm.css
Normal file
19
mozilla/extensions/xmlterm/ui/skin/xmlterm.css
Normal file
@@ -0,0 +1,19 @@
|
||||
/* xmlterm.css: XMLterm default style sheet */
|
||||
|
||||
BODY { font-family: monaco, courier, elite, monospace;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
DIV, PRE, SPAN { margin: 0; padding-top: 0; padding-bottom: 0 }
|
||||
|
||||
PRE { font-family: monaco;
|
||||
line-height: 120% }
|
||||
|
||||
/* Input components */
|
||||
SPAN.prompt { color: blue }
|
||||
SPAN.command { color: blue }
|
||||
|
||||
/* Directory display */
|
||||
SPAN.plainfile { font-family: monaco}
|
||||
SPAN.directory { font-family: monaco; color: blue; cursor: hand }
|
||||
SPAN.executable { font-family: monaco; color: blue; cursor: hand }
|
||||
@@ -1,105 +0,0 @@
|
||||
/*
|
||||
The contents of this file are subject to the Mozilla Public
|
||||
License Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License. You may obtain a copy of
|
||||
the License at http://www.mozilla.org/MPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS
|
||||
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
implied. See the License for the specific language governing
|
||||
rights and limitations under the License.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#ifndef __JavaDOMGlobals_h__
|
||||
#define __JavaDOMGlobals_h__
|
||||
|
||||
#include "jni.h"
|
||||
#include "prclist.h"
|
||||
#include "nsError.h"
|
||||
|
||||
#ifdef ERROR
|
||||
#undef ERROR
|
||||
#endif
|
||||
|
||||
class nsISupports;
|
||||
class nsIDOMNode;
|
||||
struct PRLogModuleInfo;
|
||||
struct PRLock;
|
||||
|
||||
class JavaDOMGlobals {
|
||||
|
||||
public:
|
||||
static jclass attrClass;
|
||||
static jclass cDataSectionClass;
|
||||
static jclass commentClass;
|
||||
static jclass documentClass;
|
||||
static jclass documentFragmentClass;
|
||||
static jclass documentTypeClass;
|
||||
static jclass domImplementationClass;
|
||||
static jclass elementClass;
|
||||
static jclass entityClass;
|
||||
static jclass entityReferenceClass;
|
||||
static jclass namedNodeMapClass;
|
||||
static jclass nodeClass;
|
||||
static jclass nodeListClass;
|
||||
static jclass notationClass;
|
||||
static jclass processingInstructionClass;
|
||||
static jclass textClass;
|
||||
|
||||
static jfieldID nodePtrFID;
|
||||
static jfieldID nodeListPtrFID;
|
||||
static jfieldID domImplementationPtrFID;
|
||||
|
||||
static jfieldID nodeTypeAttributeFID;
|
||||
static jfieldID nodeTypeCDataSectionFID;
|
||||
static jfieldID nodeTypeCommentFID;
|
||||
static jfieldID nodeTypeDocumentFragmentFID;
|
||||
static jfieldID nodeTypeDocumentFID;
|
||||
static jfieldID nodeTypeDocumentTypeFID;
|
||||
static jfieldID nodeTypeElementFID;
|
||||
static jfieldID nodeTypeEntityFID;
|
||||
static jfieldID nodeTypeEntityReferenceFID;
|
||||
static jfieldID nodeTypeNotationFID;
|
||||
static jfieldID nodeTypeProcessingInstructionFID;
|
||||
static jfieldID nodeTypeTextFID;
|
||||
|
||||
static jclass domExceptionClass;
|
||||
static jmethodID domExceptionInitMID;
|
||||
static jclass runtimeExceptionClass;
|
||||
static jmethodID runtimeExceptionInitMID;
|
||||
|
||||
static const char* const DOM_EXCEPTION_MESSAGE[];
|
||||
|
||||
typedef enum ExceptionType { EXCEPTION_RUNTIME,
|
||||
EXCEPTION_DOM } ExceptionType;
|
||||
|
||||
static PRLogModuleInfo* log;
|
||||
static PRCList garbage;
|
||||
static PRLock* garbageLock;
|
||||
|
||||
static PRInt32 javaMaxInt;
|
||||
|
||||
static void Initialize(JNIEnv *env);
|
||||
static void Destroy(JNIEnv *env);
|
||||
static jobject CreateNodeSubtype(JNIEnv *env,
|
||||
nsIDOMNode *node);
|
||||
|
||||
static void AddToGarbage(nsISupports* domObject);
|
||||
static void TakeOutGarbage();
|
||||
|
||||
static void ThrowException(JNIEnv *env,
|
||||
const char * message = NULL,
|
||||
nsresult rv = NS_OK,
|
||||
ExceptionType exceptionType = EXCEPTION_RUNTIME);
|
||||
};
|
||||
|
||||
#endif /* __JavaDOMGlobals_h__ */
|
||||
Reference in New Issue
Block a user