Rev 7037 | Rev 7227 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7037 | Rev 7050 | ||
---|---|---|---|
1 | #ifndef AUTOBUILD |
1 | #ifndef AUTOBUILD |
2 | ?include "lang.h--" |
2 | ?include "lang.h--" |
3 | #endif |
3 | #endif |
4 | 4 | ||
5 | #define MEMSIZE 4096*20 |
5 | #define MEMSIZE 4096*20 |
6 | #include "..\lib\mem.h" |
6 | #include "..\lib\mem.h" |
7 | #include "..\lib\strings.h" |
7 | #include "..\lib\strings.h" |
8 | #include "..\lib\list_box.h" |
8 | #include "..\lib\list_box.h" |
9 | #include "..\lib\clipboard.h" |
9 | #include "..\lib\clipboard.h" |
10 | #include "..\lib\gui.h" |
10 | #include "..\lib\gui.h" |
11 | #include "..\lib\obj\box_lib.h" |
11 | #include "..\lib\obj\box_lib.h" |
12 | 12 | ||
13 | #include "..\lib\patterns\select_list.h" |
13 | #include "..\lib\patterns\select_list.h" |
14 | 14 | ||
15 | 15 | ||
16 | //===================================================// |
16 | //===================================================// |
17 | // // |
17 | // // |
18 | // DATA // |
18 | // DATA // |
19 | // // |
19 | // // |
20 | //===================================================// |
20 | //===================================================// |
21 | 21 | ||
22 | ?define WINDOW_HEADER "Clipboard Viewer v1.02" |
22 | ?define WINDOW_HEADER "Clipboard Viewer v1.02" |
23 | ?define T_DELETE_LAST_SLOT "Delete last slot" |
23 | ?define T_DELETE_LAST_SLOT "Delete last slot" |
24 | ?define T_DELETE_ALL_SLOTS "Delete all slots" |
24 | ?define T_DELETE_ALL_SLOTS "Delete all slots" |
25 | ?define T_RESET_BUFFER_LOCK "Reset the lock buffer" |
25 | ?define T_RESET_BUFFER_LOCK "Reset the lock buffer" |
26 | ?define T_COLUMNS_TITLE "# | Data size | Data type | Contents" |
26 | ?define T_COLUMNS_TITLE "# | Data size | Data type | Contents" |
27 | ?define T_COLUMN_VIEW "View" |
27 | ?define T_COLUMN_VIEW "View" |
28 | ?define T_VIEW_OPTIONS "TEXT HEX" |
28 | ?define T_VIEW_OPTIONS "TEXT HEX" |
29 | ?define DEFAULT_SAVE_PATH "/tmp0/1/clipview.tmp" |
29 | ?define DEFAULT_SAVE_PATH "/tmp0/1/clipview.tmp" |
30 | char *data_type[] = { "Text", "Image", "RAW", "Unknown" }; |
30 | char *data_type[] = { "Text", "Image", "RAW", "Unknown" }; |
31 | 31 | ||
32 | enum { |
32 | enum { |
33 | BT_DELETE_LAST_SLOT = 10, |
33 | BT_DELETE_LAST_SLOT = 10, |
34 | BT_DELETE_ALL_SLOTS, |
34 | BT_DELETE_ALL_SLOTS, |
35 | BT_UNLOCK |
35 | BT_UNLOCK |
36 | }; |
36 | }; |
37 | 37 | ||
38 | #define PANEL_TOP_H 20 |
38 | #define PANEL_TOP_H 20 |
39 | #define PANEL_BOTTOM_H 30 |
39 | #define PANEL_BOTTOM_H 30 |
40 | #define LIST_PADDING 12 |
40 | #define LIST_PADDING 12 |
41 | 41 | ||
42 | proc_info Form; |
42 | proc_info Form; |
43 | 43 | ||
44 | //===================================================// |
44 | //===================================================// |
45 | // // |
45 | // // |
46 | // CODE // |
46 | // CODE // |
47 | // // |
47 | // // |
48 | //===================================================// |
48 | //===================================================// |
49 | 49 | ||
50 | void main() |
50 | void main() |
51 | { |
51 | { |
52 | int id; |
52 | int id; |
53 | SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER); |
53 | SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER); |
54 | load_dll(boxlib, #box_lib_init,0); |
54 | load_dll(boxlib, #box_lib_init,0); |
55 | loop() |
55 | loop() |
56 | { |
56 | { |
57 | WaitEventTimeout(10); |
57 | WaitEventTimeout(10); |
58 | switch(EAX & 0xFF) |
58 | switch(EAX & 0xFF) |
59 | { |
59 | { |
60 | case evMouse: |
60 | case evMouse: |
61 | SelectList_ProcessMouse(); |
61 | SelectList_ProcessMouse(); |
62 | break; |
62 | break; |
63 | 63 | ||
64 | case evButton: |
64 | case evButton: |
65 | id = GetButtonID(); |
65 | id = GetButtonID(); |
66 | if (id==1) ExitProcess(); |
66 | if (id==1) ExitProcess(); |
67 | if (id==BT_DELETE_LAST_SLOT) EventDeleteLastSlot(); |
67 | if (id==BT_DELETE_LAST_SLOT) EventDeleteLastSlot(); |
68 | if (id==BT_DELETE_ALL_SLOTS) EventDeleteAllSlots(); |
68 | if (id==BT_DELETE_ALL_SLOTS) EventDeleteAllSlots(); |
69 | if (id==BT_UNLOCK) EventResetBufferLock(); |
69 | if (id==BT_UNLOCK) EventResetBufferLock(); |
70 | if (id>=100) && (id<300) EventOpenAsText(id-100); |
70 | if (id>=100) && (id<300) EventOpenAsText(id-100); |
71 | if (id>=300) EventOpenAsHex(id-300); |
71 | if (id>=300) EventOpenAsHex(id-300); |
72 | break; |
72 | break; |
73 | 73 | ||
74 | case evKey: |
74 | case evKey: |
75 | GetKeys(); |
75 | GetKeys(); |
76 | if (select_list.ProcessKey(key_scancode)) ClipViewSelectListDraw(); |
76 | if (select_list.ProcessKey(key_scancode)) ClipViewSelectListDraw(); |
77 | break; |
77 | break; |
78 | 78 | ||
79 | case evReDraw: |
79 | case evReDraw: |
80 | system.color.get(); |
80 | system.color.get(); |
81 | DefineAndDrawWindow(screen.width-700/2,80,700,454+skin_height,0x73,0xE4DFE1,WINDOW_HEADER,0); |
81 | DefineAndDrawWindow(screen.width-700/2,80,700,454+skin_height,0x73,0xE4DFE1,WINDOW_HEADER,0); |
82 | GetProcessInfo(#Form, SelfInfo); |
82 | GetProcessInfo(#Form, SelfInfo); |
83 | IF (Form.status_window>=2) break; |
83 | IF (Form.status_window>=2) break; |
84 | if (Form.height < 200) { MoveSize(OLD,OLD,OLD,200); break; } |
84 | if (Form.height < 200) { MoveSize(OLD,OLD,OLD,200); break; } |
85 | if (Form.width < 570) { MoveSize(OLD,OLD,570,OLD); break; } |
85 | if (Form.width < 570) { MoveSize(OLD,OLD,570,OLD); break; } |
86 | SelectList_Init( |
86 | SelectList_Init( |
87 | LIST_PADDING, |
87 | LIST_PADDING, |
88 | LIST_PADDING+PANEL_TOP_H, |
88 | LIST_PADDING+PANEL_TOP_H, |
89 | Form.cwidth-LIST_PADDING-LIST_PADDING-scroll1.size_x, |
89 | Form.cwidth-LIST_PADDING-LIST_PADDING-scroll1.size_x, |
90 | Form.cheight-PANEL_BOTTOM_H-PANEL_TOP_H-LIST_PADDING-LIST_PADDING, |
90 | Form.cheight-PANEL_BOTTOM_H-PANEL_TOP_H-LIST_PADDING-LIST_PADDING, |
91 | true |
91 | true |
92 | ); |
92 | ); |
93 | DrawWindowContent(); |
93 | DrawWindowContent(); |
94 | break; |
94 | break; |
95 | 95 | ||
96 | default: |
96 | default: |
97 | if (Clipboard__GetSlotCount() > select_list.count) ClipViewSelectListDraw(); |
97 | if (Clipboard__GetSlotCount() > select_list.count) ClipViewSelectListDraw(); |
98 | break; |
98 | break; |
99 | } |
99 | } |
100 | } |
100 | } |
101 | } |
101 | } |
102 | 102 | ||
103 | void DrawWindowContent() |
103 | void DrawWindowContent() |
104 | { |
104 | { |
105 | int button_x = select_list.x; |
105 | int button_x = select_list.x; |
106 | DrawBar(0,0, Form.cwidth, PANEL_TOP_H, system.color.work); |
106 | DrawBar(0,0, Form.cwidth, PANEL_TOP_H, system.color.work); |
107 | DrawBar(0,Form.cheight-PANEL_BOTTOM_H, Form.cwidth, PANEL_BOTTOM_H, system.color.work); |
107 | DrawBar(0,Form.cheight-PANEL_BOTTOM_H, Form.cwidth, PANEL_BOTTOM_H, system.color.work); |
108 | DrawWideRectangle(select_list.x-LIST_PADDING, select_list.y-LIST_PADDING, LIST_PADDING*2+select_list.w+scroll1.size_x, LIST_PADDING*2+select_list.h, LIST_PADDING-2, system.color.work); |
108 | DrawWideRectangle(select_list.x-LIST_PADDING, select_list.y-LIST_PADDING, LIST_PADDING*2+select_list.w+scroll1.size_x, LIST_PADDING*2+select_list.h, LIST_PADDING-2, system.color.work); |
109 | button_x += DrawStandartCaptButton(button_x, select_list.y + select_list.h + 8, BT_DELETE_LAST_SLOT, T_DELETE_LAST_SLOT); |
109 | button_x += DrawStandartCaptButton(button_x, select_list.y + select_list.h + 8, BT_DELETE_LAST_SLOT, T_DELETE_LAST_SLOT); |
110 | button_x += DrawStandartCaptButton(button_x, select_list.y + select_list.h + 8, BT_DELETE_ALL_SLOTS, T_DELETE_ALL_SLOTS); |
110 | button_x += DrawStandartCaptButton(button_x, select_list.y + select_list.h + 8, BT_DELETE_ALL_SLOTS, T_DELETE_ALL_SLOTS); |
111 | button_x += DrawStandartCaptButton(button_x, select_list.y + select_list.h + 8, BT_UNLOCK, T_RESET_BUFFER_LOCK); |
111 | button_x += DrawStandartCaptButton(button_x, select_list.y + select_list.h + 8, BT_UNLOCK, T_RESET_BUFFER_LOCK); |
112 | WriteText(select_list.x+12, select_list.y - 23, select_list.font_type, system.color.work_text, T_COLUMNS_TITLE); |
112 | WriteText(select_list.x+12, select_list.y - 23, select_list.font_type, system.color.work_text, T_COLUMNS_TITLE); |
113 | WriteText(select_list.x+select_list.w-68, select_list.y - 23, select_list.font_type, system.color.work_text, T_COLUMN_VIEW); |
113 | WriteText(select_list.x+select_list.w-68, select_list.y - 23, select_list.font_type, system.color.work_text, T_COLUMN_VIEW); |
114 | ClipViewSelectListDraw(); |
114 | ClipViewSelectListDraw(); |
115 | SelectList_DrawBorder(); |
115 | SelectList_DrawBorder(); |
116 | } |
116 | } |
117 | 117 | ||
118 | dword slot_data; |
118 | dword slot_data; |
119 | struct clipboard_data |
119 | struct clipboard_data |
120 | { |
120 | { |
121 | dword size; |
121 | dword size; |
122 | dword type; |
122 | dword type; |
123 | dword encoding; |
123 | dword encoding; |
124 | dword content; |
124 | dword content; |
125 | dword content_offset; |
125 | dword content_offset; |
126 | } cdata; |
126 | } cdata; |
127 | 127 | ||
128 | void SelectList_DrawLine(dword i) |
128 | void SelectList_DrawLine(dword i) |
129 | { |
129 | { |
130 | int yyy, length, slot_data_type_number; |
130 | int yyy, length, slot_data_type_number; |
131 | dword line_text[2048]; |
131 | dword line_text[2048]; |
132 | dword size_kb; |
132 | dword size_kb; |
133 | dword text_color = 0; |
133 | dword text_color = 0; |
134 | 134 | ||
135 | slot_data = Clipboard__GetSlotData(select_list.first + i); |
135 | slot_data = Clipboard__GetSlotData(select_list.first + i); |
136 | cdata.size = ESDWORD[slot_data]; |
136 | cdata.size = ESDWORD[slot_data]; |
137 | cdata.type = ESDWORD[slot_data+4]; |
137 | cdata.type = ESDWORD[slot_data+4]; |
138 | if (cdata.type==SLOT_DATA_TYPE_TEXT) || (cdata.type==SLOT_DATA_TYPE_TEXT_BLOCK) |
138 | if (cdata.type==SLOT_DATA_TYPE_TEXT) || (cdata.type==SLOT_DATA_TYPE_TEXT_BLOCK) |
139 | cdata.content_offset = 12; |
139 | cdata.content_offset = 12; |
140 | else |
140 | else |
141 | cdata.content_offset = 8; |
141 | cdata.content_offset = 8; |
142 | cdata.content = slot_data + cdata.content_offset; |
142 | cdata.content = slot_data + cdata.content_offset; |
143 | 143 | ||
144 | yyy = i*select_list.item_h+select_list.y; |
144 | yyy = i*select_list.item_h+select_list.y; |
145 | WriteText(select_list.x+12, yyy+select_list.text_y, select_list.font_type, text_color, itoa(select_list.first + i)); |
145 | WriteText(select_list.x+12, yyy+select_list.text_y, select_list.font_type, text_color, itoa(select_list.first + i)); |
146 | size_kb = ConvertSizeToKb(cdata.size); |
146 | size_kb = ConvertSizeToKb(cdata.size); |
147 | WriteText(select_list.x+44, yyy+select_list.text_y, select_list.font_type, text_color, size_kb); |
147 | WriteText(select_list.x+44, yyy+select_list.text_y, select_list.font_type, text_color, size_kb); |
148 | slot_data_type_number = cdata.type; |
148 | slot_data_type_number = cdata.type; |
149 | WriteText(select_list.x+140, yyy+select_list.text_y, select_list.font_type, text_color, data_type[slot_data_type_number]); |
149 | WriteText(select_list.x+140, yyy+select_list.text_y, select_list.font_type, text_color, data_type[slot_data_type_number]); |
150 | WriteText(select_list.x+select_list.w - 88, yyy+select_list.text_y, select_list.font_type, 0x006597, T_VIEW_OPTIONS); |
150 | WriteText(select_list.x+select_list.w - 88, yyy+select_list.text_y, select_list.font_type, 0x006597, T_VIEW_OPTIONS); |
151 | DefineButton(select_list.x+select_list.w - 95, yyy, 50, select_list.item_h, 100+i+BT_HIDE, NULL); |
151 | DefineButton(select_list.x+select_list.w - 95, yyy, 50, select_list.item_h, 100+i+BT_HIDE, NULL); |
152 | DefineButton(select_list.x+select_list.w - 95 + 51, yyy, 40, select_list.item_h, 300+i+BT_HIDE, NULL); |
152 | DefineButton(select_list.x+select_list.w - 95 + 51, yyy, 40, select_list.item_h, 300+i+BT_HIDE, NULL); |
153 | 153 | ||
154 | length = select_list.w-236 - 95 / select_list.font_w - 2; |
154 | length = select_list.w-236 - 95 / select_list.font_w - 2; |
155 | if (cdata.size - cdata.content_offset < length) length = cdata.size - cdata.content_offset; |
155 | if (cdata.size - cdata.content_offset < length) length = cdata.size - cdata.content_offset; |
156 | memmov(#line_text, cdata.content, length); |
156 | memmov(#line_text, cdata.content, length); |
157 | replace_char(#line_text, 0, 31, length); // 31 is a dot |
157 | replace_char(#line_text, 0, 31, length); // 31 is a dot |
158 | WriteText(select_list.x+236, yyy+select_list.text_y, select_list.font_type, text_color, #line_text); |
158 | WriteText(select_list.x+236, yyy+select_list.text_y, select_list.font_type, text_color, #line_text); |
159 | } |
159 | } |
160 | - | ||
161 | - | ||
162 | - | ||
163 | replace_char(dword in_str, char from_char, to_char, int length) { |
- | |
164 | int i; |
- | |
165 | for (i=0; i |
- | |
166 | if (ESBYTE[in_str+i] == from_char) ESBYTE[in_str+i] = to_char; |
- | |
167 | } |
- | |
168 | ESBYTE[in_str+length]=0; |
- | |
169 | } |
- | |
170 | 160 | ||
171 | int SaveSlotContents(dword size, off) { |
161 | int SaveSlotContents(dword size, off) { |
172 | EAX = WriteFile(size, off, DEFAULT_SAVE_PATH); |
162 | EAX = WriteFile(size, off, DEFAULT_SAVE_PATH); |
173 | if (!EAX) |
163 | if (!EAX) |
174 | { |
164 | { |
175 | return true; |
165 | return true; |
176 | } |
166 | } |
177 | else { |
167 | else { |
178 | notify("'Can not create /tmp0/1/clipview.tmp\nPreview function is not available.' -E"); |
168 | notify("'Can not create /tmp0/1/clipview.tmp\nPreview function is not available.' -E"); |
179 | return false; |
169 | return false; |
180 | } |
170 | } |
181 | } |
171 | } |
182 | 172 | ||
183 | void ClipViewSelectListDraw() { |
173 | void ClipViewSelectListDraw() { |
184 | select_list.count = Clipboard__GetSlotCount(); |
174 | select_list.count = Clipboard__GetSlotCount(); |
185 | SelectList_Draw(); |
175 | SelectList_Draw(); |
186 | } |
176 | } |
187 | 177 | ||
188 | void SelectList_LineChanged() { |
178 | void SelectList_LineChanged() { |
189 | return; |
179 | return; |
190 | } |
180 | } |
191 | 181 | ||
192 | //===================================================// |
182 | //===================================================// |
193 | // // |
183 | // // |
194 | // EVENTS // |
184 | // EVENTS // |
195 | // // |
185 | // // |
196 | //===================================================// |
186 | //===================================================// |
197 | 187 | ||
198 | void EventDeleteLastSlot() |
188 | void EventDeleteLastSlot() |
199 | { |
189 | { |
200 | int i; |
190 | int i; |
201 | for (i=0; i |
191 | for (i=0; i |
202 | for (i=0; i |
192 | for (i=0; i |
203 | Clipboard__DeleteLastSlot(); |
193 | Clipboard__DeleteLastSlot(); |
204 | ClipViewSelectListDraw(); |
194 | ClipViewSelectListDraw(); |
205 | } |
195 | } |
206 | 196 | ||
207 | void EventDeleteAllSlots() |
197 | void EventDeleteAllSlots() |
208 | { |
198 | { |
209 | while (Clipboard__GetSlotCount()) Clipboard__DeleteLastSlot(); |
199 | while (Clipboard__GetSlotCount()) Clipboard__DeleteLastSlot(); |
210 | ClipViewSelectListDraw(); |
200 | ClipViewSelectListDraw(); |
211 | } |
201 | } |
212 | 202 | ||
213 | void EventResetBufferLock() { |
203 | void EventResetBufferLock() { |
214 | Clipboard__ResetBlockingBuffer(); |
204 | Clipboard__ResetBlockingBuffer(); |
215 | ClipViewSelectListDraw(); |
205 | ClipViewSelectListDraw(); |
216 | } |
206 | } |
217 | 207 | ||
218 | void EventOpenAsText(int slot_id) { |
208 | void EventOpenAsText(int slot_id) { |
219 | slot_data = Clipboard__GetSlotData(slot_id); |
209 | slot_data = Clipboard__GetSlotData(slot_id); |
220 | cdata.size = ESDWORD[slot_data]-12; |
210 | cdata.size = ESDWORD[slot_data]-12; |
221 | cdata.content = slot_data+12; |
211 | cdata.content = slot_data+12; |
222 | if (SaveSlotContents(cdata.size, cdata.content)) RunProgram("/sys/tinypad", DEFAULT_SAVE_PATH); |
212 | if (SaveSlotContents(cdata.size, cdata.content)) RunProgram("/sys/tinypad", DEFAULT_SAVE_PATH); |
223 | } |
213 | } |
224 | 214 | ||
225 | void EventOpenAsHex(int slot_id) { |
215 | void EventOpenAsHex(int slot_id) { |
226 | slot_data = Clipboard__GetSlotData(slot_id); |
216 | slot_data = Clipboard__GetSlotData(slot_id); |
227 | cdata.size = ESDWORD[slot_data]; |
217 | cdata.size = ESDWORD[slot_data]; |
228 | cdata.content = slot_data; |
218 | cdata.content = slot_data; |
229 | if (SaveSlotContents(cdata.size, cdata.content)) RunProgram("/sys/develop/heed", DEFAULT_SAVE_PATH); |
219 | if (SaveSlotContents(cdata.size, cdata.content)) RunProgram("/sys/develop/heed", DEFAULT_SAVE_PATH); |
230 | } |
220 | } |
231 | 221 | ||
232 | stop:>>>300)> |
222 | stop:>>>300)> |