commit e686109
0uppy
·
2026-03-15 14:56:27 +0000 UTC
parent c33dfe0
Sent the previous commit with the formatting all borked bc havoc put everything aligned to the left I guess i gotta use foot if i want to cat the files and send them properly aligned to here -w-
1 files changed,
+242,
-245
+242,
-245
1@@ -25,437 +25,434 @@ static void setup_binds(void);
2 static void sync_window_visibility(void);
3
4 #define WHEN_PRESSED(state) \
5-do { if ((state) != WL_KEYBOARD_KEY_STATE_PRESSED) return; } while (0)
6+ do { if ((state) != WL_KEYBOARD_KEY_STATE_PRESSED) return; } while (0)
7
8 #define BIND_EVENT(time, value, state) \
9-(void)(time); (void)(value); \
10-WHEN_PRESSED(state);
11+ (void)(time); (void)(value); \
12+ WHEN_PRESSED(state);
13
14 #define BIND_ACTION(data, time, value, state) \
15-BIND_EVENT(time, value, state); \
16-if (!wm.sel_client) return; \
17-union arg* a = (data)
18+ BIND_EVENT(time, value, state); \
19+ if (!wm.sel_client) return; \
20+ union arg* a = (data)
21
22 /* read geometry from client window; returns true if successful */
23 static bool get_geometry(struct client *c, struct swc_rectangle *geom)
24 {
25-if (!c || !c->win)
26-return false;
27+ if (!c || !c->win)
28+ return false;
29
30-return swc_window_get_geometry(c->win, geom);
31+ return swc_window_get_geometry(c->win, geom);
32 }
33
34 /* adjust geometry fields and write back */
35 static void adjust_geom(struct client *c, int dx, int dy, int dw, int dh)
36 {
37-struct swc_rectangle geom;
38-if (!get_geometry(c, &geom)) return;
39+ struct swc_rectangle geom;
40+ if (!get_geometry(c, &geom)) return;
41
42-geom.x += dx;
43-geom.y += dy;
44+ geom.x += dx;
45+ geom.y += dy;
46
47-int new_w = (int)geom.width + dw;
48-int new_h = (int)geom.height + dh;
49-geom.width = (new_w < 1) ? 1 : (uint32_t)new_w;
50-geom.height = (new_h < 1) ? 1 : (uint32_t)new_h;
51+ int new_w = (int)geom.width + dw;
52+ int new_h = (int)geom.height + dh;
53+ geom.width = (new_w < 1) ? 1 : (uint32_t)new_w;
54+ geom.height = (new_h < 1) ? 1 : (uint32_t)new_h;
55
56-swc_window_set_geometry(c->win, &geom);
57+ swc_window_set_geometry(c->win, &geom);
58 }
59
60 struct wm wm;
61 const struct swc_manager manager = {
62-.new_screen = new_screen, .new_window = new_window, .new_device = new_devic
63-e,
64+ .new_screen = new_screen, .new_window = new_window, .new_device = new_device,
65 };
66 struct swc_window_handler window_handler = {
67-.destroy = on_win_destroy, .entered = on_win_entered,
68+ .destroy = on_win_destroy, .entered = on_win_entered,
69 };
70 struct swc_screen_handler screen_handler = {
71-.destroy = on_screen_destroy,
72+ .destroy = on_screen_destroy,
73 };
74
75 static struct client* get_focus_candidate(struct screen* s) {
76-struct client* c = first_client(s);
77-if (!c && s) c = first_client(NULL);
78-return c;
79+ struct client* c = first_client(s);
80+ if (!c && s) c = first_client(NULL);
81+ return c;
82 }
83
84 static void focus(struct client* c)
85 {
86-if (wm.sel_client && wm.sel_client != c) {
87-swc_window_set_border(wm.sel_client->win, cfg.border_col_normal, cf
88-g.border_width, 0, 0);
89-}
90-if (c) {
91-swc_window_set_border(c->win, cfg.border_col_active, cfg.border_wid
92-th, 0, 0);
93-}
94+ if (wm.sel_client && wm.sel_client != c) {
95+ swc_window_set_border(wm.sel_client->win, cfg.border_col_normal, cfg.border_width, 0, 0);
96+ }
97+ if (c) {
98+ swc_window_set_border(c->win, cfg.border_col_active, cfg.border_width, 0, 0);
99+ }
100
101-swc_window_focus(c ? c->win : NULL);
102-wm.sel_client = c;
103+ swc_window_focus(c ? c->win : NULL);
104+ wm.sel_client = c;
105 }
106
107 static struct client* first_client(struct screen* s)
108 {
109-struct client* c;
110+ struct client* c;
111
112-wl_list_for_each(c, &wm.clients, link) {
113-if (is_ws_client(c, s))
114-return c;
115-}
116+ wl_list_for_each(c, &wm.clients, link) {
117+ if (is_ws_client(c, s))
118+ return c;
119+ }
120
121-return NULL;
122+ return NULL;
123 }
124
125 static bool is_ws_client(const struct client* c, const struct screen* s)
126 {
127-return c && c->ws == wm.ws && (!s || c->scr == s);
128+ return c && c->ws == wm.ws && (!s || c->scr == s);
129 }
130
131 static void on_screen_destroy(void* data)
132 {
133-struct screen* s = data;
134+ struct screen* s = data;
135
136-if (!s)
137-return;
138+ if (!s)
139+ return;
140
141-wl_list_remove(&s->link);
142+ wl_list_remove(&s->link);
143
144-if (wm.sel_screen == s) {
145-wm.sel_screen = wl_list_empty(&wm.screens)
146-? NULL
147-: wl_container_of(wm.screens.next, wm.sel_screen, link);
148-}
149+ if (wm.sel_screen == s) {
150+ wm.sel_screen = wl_list_empty(&wm.screens)
151+ ? NULL
152+ : wl_container_of(wm.screens.next, wm.sel_screen, link);
153+ }
154
155-free(s);
156+ free(s);
157 }
158
159 static void on_win_destroy(void* data)
160 {
161-struct client* c = data;
162-if (!c) return;
163+ struct client* c = data;
164+ if (!c) return;
165
166-if (wm.sel_client == c)
167-wm.sel_client = NULL;
168+ if (wm.sel_client == c)
169+ wm.sel_client = NULL;
170
171-wl_list_remove(&c->link);
172-free(c);
173+ wl_list_remove(&c->link);
174+ free(c);
175
176-focus(get_focus_candidate(wm.sel_screen));
177+ focus(get_focus_candidate(wm.sel_screen));
178 }
179
180 static void on_win_entered(void* data)
181 {
182
183-struct client* c = data;
184-if (!is_ws_client(c, NULL))
185-return;
186+ struct client* c = data;
187+ if (!is_ws_client(c, NULL))
188+ return;
189
190-focus(c);
191+ focus(c);
192 }
193
194 static void setup(void)
195 {
196-/* display */
197-wm.dpy = wl_display_create();
198-if (!wm.dpy)
199-die(EXIT_FAILURE, "wl_display_create failed");
200-
201-/* variables */
202-wl_list_init(&wm.screens);
203-wl_list_init(&wm.clients);
204-
205-wm.sel_client = NULL;
206-wm.sel_screen = NULL;
207-wm.ws = 1;
208-
209-/* event loop */
210-wm.ev_loop = wl_display_get_event_loop(wm.dpy);
211-if (!swc_initialize(wm.dpy, wm.ev_loop, &manager))
212-die(EXIT_FAILURE, "swc_initialize failed\n");
213-
214-setup_binds();
215-
216-/* display socket */
217-const char* sock;
218-sock = wl_display_add_socket_auto(wm.dpy);
219-if (!sock)
220-die(EXIT_FAILURE, "wl_display_add_socket_auto failed\n");
221-
222-setenv("WAYLAND_DISPLAY", sock, 1);
223-_log(stderr, "WAYLAND_DISPLAY=%s\n", sock);
224-
225-/* signals */
226-signal(SIGINT, sig_handler);
227-signal(SIGTERM, sig_handler);
228-signal(SIGQUIT, sig_handler);
229+ /* display */
230+ wm.dpy = wl_display_create();
231+ if (!wm.dpy)
232+ die(EXIT_FAILURE, "wl_display_create failed");
233+
234+ /* variables */
235+ wl_list_init(&wm.screens);
236+ wl_list_init(&wm.clients);
237+
238+ wm.sel_client = NULL;
239+ wm.sel_screen = NULL;
240+ wm.ws = 1;
241+
242+ /* event loop */
243+ wm.ev_loop = wl_display_get_event_loop(wm.dpy);
244+ if (!swc_initialize(wm.dpy, wm.ev_loop, &manager))
245+ die(EXIT_FAILURE, "swc_initialize failed\n");
246+
247+ setup_binds();
248+
249+ /* display socket */
250+ const char* sock;
251+ sock = wl_display_add_socket_auto(wm.dpy);
252+ if (!sock)
253+ die(EXIT_FAILURE, "wl_display_add_socket_auto failed\n");
254+
255+ setenv("WAYLAND_DISPLAY", sock, 1);
256+ _log(stderr, "WAYLAND_DISPLAY=%s\n", sock);
257+
258+ /* signals */
259+ signal(SIGINT, sig_handler);
260+ signal(SIGTERM, sig_handler);
261+ signal(SIGQUIT, sig_handler);
262 }
263
264 static void setup_binds(void)
265 {
266-for (size_t i = 0; i < LENGTH(binds); i++) {
267-const struct bind* b = &binds[i];
268-swc_add_binding(b->type, b->mods, b->ksym, b->fn, (void*)&b->arg);
269-}
270+ for (size_t i = 0; i < LENGTH(binds); i++) {
271+ const struct bind* b = &binds[i];
272+ swc_add_binding(b->type, b->mods, b->ksym, b->fn, (void*)&b->arg);
273+ }
274 }
275
276 static void sync_window_visibility(void)
277 {
278-struct client* c;
279+ struct client* c;
280
281-wl_list_for_each(c, &wm.clients, link) {
282-if (c->ws == wm.ws)
283-swc_window_show(c->win);
284-else
285-swc_window_hide(c->win);
286-}
287+ wl_list_for_each(c, &wm.clients, link) {
288+ if (c->ws == wm.ws)
289+ swc_window_show(c->win);
290+ else
291+ swc_window_hide(c->win);
292+ }
293 }
294
295 /* focus next/prev helpers */
296 static void focus_walk_direction(bool forward)
297 {
298-if (wl_list_empty(&wm.clients)) return;
299+ if (wl_list_empty(&wm.clients)) return;
300
301-if (!is_ws_client(wm.sel_client, wm.sel_screen)) {
302-focus(get_focus_candidate(wm.sel_screen));
303-return;
304-}
305+ if (!is_ws_client(wm.sel_client, wm.sel_screen)) {
306+ focus(get_focus_candidate(wm.sel_screen));
307+ return;
308+ }
309
310-struct wl_list *start =
311-forward ? wm.sel_client->link.next
312-: wm.sel_client->link.prev;
313+ struct wl_list *start =
314+ forward ? wm.sel_client->link.next
315+ : wm.sel_client->link.prev;
316
317-struct wl_list *it = start;
318-struct client *c = NULL;
319+ struct wl_list *it = start;
320+ struct client *c = NULL;
321
322-do {
323-if (it == &wm.clients)
324-it = forward ? wm.clients.next : wm.clients.prev;
325+ do {
326+ if (it == &wm.clients)
327+ it = forward ? wm.clients.next : wm.clients.prev;
328
329-if (it == &wm.clients) break;
330+ if (it == &wm.clients) break;
331
332-c = wl_container_of(it, c, link);
333-if (is_ws_client(c, wm.sel_screen)) {
334-focus(c);
335-return;
336-}
337+ c = wl_container_of(it, c, link);
338+ if (is_ws_client(c, wm.sel_screen)) {
339+ focus(c);
340+ return;
341+ }
342
343-it = forward ? it->next : it->prev;
344-} while (it != start);
345+ it = forward ? it->next : it->prev;
346+ } while (it != start);
347
348-focus(get_focus_candidate(wm.sel_screen));
349+ focus(get_focus_candidate(wm.sel_screen));
350 }
351
352 void focus_next(void* data, uint32_t time, uint32_t value, uint32_t state)
353 {
354-(void)data; BIND_EVENT(time, value, state);
355-focus_walk_direction(true);
356+ (void)data; BIND_EVENT(time, value, state);
357+ focus_walk_direction(true);
358 }
359
360 void kill_sel(void* data, uint32_t time, uint32_t value, uint32_t state)
361 {
362-(void)data; BIND_EVENT(time, value, state);
363+ (void)data; BIND_EVENT(time, value, state);
364
365-if (wm.sel_client)
366-swc_window_close(wm.sel_client->win);
367+ if (wm.sel_client)
368+ swc_window_close(wm.sel_client->win);
369 }
370
371 void fullscreen(void* data, uint32_t time, uint32_t value, uint32_t state)
372 {
373-(void)data; BIND_EVENT(time, value, state);
374-if (!wm.sel_client) return;
375+ (void)data; BIND_EVENT(time, value, state);
376+ if (!wm.sel_client) return;
377
378-struct client *c = wm.sel_client;
379-struct swc_rectangle geom;
380+ struct client *c = wm.sel_client;
381+ struct swc_rectangle geom;
382
383-if (c->fullscreen) {
384-c->fullscreen = false;
385-swc_window_set_stacked(c->win);
386+ if (c->fullscreen) {
387+ c->fullscreen = false;
388+ swc_window_set_stacked(c->win);
389
390-if (c->w > 0 && c->h > 0) {
391-geom = (struct swc_rectangle){ c->x, c->y, c->w, c->h };
392-swc_window_set_geometry(c->win, &geom);
393-}
394-return;
395-}
396+ if (c->w > 0 && c->h > 0) {
397+ geom = (struct swc_rectangle){ c->x, c->y, c->w, c->h };
398+ swc_window_set_geometry(c->win, &geom);
399+ }
400+ return;
401+ }
402
403-if (!c->scr || !c->scr->scr) return;
404+ if (!c->scr || !c->scr->scr) return;
405
406-if (get_geometry(c, &geom)) {
407-c->x = geom.x;
408-c->y = geom.y;
409-c->w = geom.width;
410-c->h = geom.height;
411-}
412+ if (get_geometry(c, &geom)) {
413+ c->x = geom.x;
414+ c->y = geom.y;
415+ c->w = geom.width;
416+ c->h = geom.height;
417+ }
418
419-c->fullscreen = true;
420-swc_window_set_fullscreen(c->win, c->scr->scr);
421+ c->fullscreen = true;
422+ swc_window_set_fullscreen(c->win, c->scr->scr);
423 }
424
425 void kb_move_x(void* data, uint32_t time, uint32_t value, uint32_t state) {
426-BIND_ACTION(data, time, value, state);
427-adjust_geom(wm.sel_client, a->i, 0, 0, 0);
428+ BIND_ACTION(data, time, value, state);
429+ adjust_geom(wm.sel_client, a->i, 0, 0, 0);
430 }
431
432 void kb_move_y(void* data, uint32_t time, uint32_t value, uint32_t state) {
433-BIND_ACTION(data, time, value, state);
434-adjust_geom(wm.sel_client, 0, a->i, 0, 0);
435+ BIND_ACTION(data, time, value, state);
436+ adjust_geom(wm.sel_client, 0, a->i, 0, 0);
437 }
438
439 void kb_resize_width(void* data, uint32_t time, uint32_t value, uint32_t state) {
440-BIND_ACTION(data, time, value, state);
441-adjust_geom(wm.sel_client, 0, 0, a->i, 0);
442+ BIND_ACTION(data, time, value, state);
443+ adjust_geom(wm.sel_client, 0, 0, a->i, 0);
444 }
445
446 void kb_resize_height(void* data, uint32_t time, uint32_t value, uint32_t state) {
447-BIND_ACTION(data, time, value, state);
448-adjust_geom(wm.sel_client, 0, 0, 0, a->i);
449+ BIND_ACTION(data, time, value, state);
450+ adjust_geom(wm.sel_client, 0, 0, 0, a->i);
451 }
452
453 static void apply_grid_geometry(struct client *c, float x_frac, float w_frac) {
454-if (!c || !c->scr || !c->scr->scr) return;
455+ if (!c || !c->scr || !c->scr->scr) return;
456
457-struct swc_rectangle geom;
458-struct swc_rectangle *ug = &c->scr->scr->usable_geometry;
459+ struct swc_rectangle geom;
460+ struct swc_rectangle *ug = &c->scr->scr->usable_geometry;
461
462-geom.x = ug->x + (ug->width * x_frac);
463-geom.y = ug->y;
464-geom.width = ug->width * w_frac;
465-geom.height = ug->height;
466+ geom.x = ug->x + (ug->width * x_frac);
467+ geom.y = ug->y;
468+ geom.width = ug->width * w_frac;
469+ geom.height = ug->height;
470
471-swc_window_set_geometry(c->win, &geom);
472+ swc_window_set_geometry(c->win, &geom);
473 }
474
475 void center_window(void* data, uint32_t time, uint32_t value, uint32_t state) {
476-(void)data; BIND_EVENT(time, value, state);
477-if (!wm.sel_client->scr || !wm.sel_client->scr->scr) return;
478+ (void)data; BIND_EVENT(time, value, state);
479+ if (!wm.sel_client->scr || !wm.sel_client->scr->scr) return;
480
481-struct swc_rectangle geom;
482-if (!get_geometry(wm.sel_client, &geom)) return;
483+ struct swc_rectangle geom;
484+ if (!get_geometry(wm.sel_client, &geom)) return;
485
486-struct swc_rectangle *ug = &wm.sel_client->scr->scr->usable_geometry;
487-geom.x = ug->x + (ug->width - geom.width) / 2;
488-geom.y = ug->y + (ug->height - geom.height) / 2;
489+ struct swc_rectangle *ug = &wm.sel_client->scr->scr->usable_geometry;
490+ geom.x = ug->x + (ug->width - geom.width) / 2;
491+ geom.y = ug->y + (ug->height - geom.height) / 2;
492
493-swc_window_set_geometry(wm.sel_client->win, &geom);
494+ swc_window_set_geometry(wm.sel_client->win, &geom);
495 }
496
497 void snap_left_half(void* data, uint32_t time, uint32_t value, uint32_t state) {
498-(void)data; BIND_EVENT(time, value, state);
499-apply_grid_geometry(wm.sel_client, 0.0f, 0.5f);
500+ (void)data; BIND_EVENT(time, value, state);
501+ apply_grid_geometry(wm.sel_client, 0.0f, 0.5f);
502 }
503
504 void snap_right_half(void* data, uint32_t time, uint32_t value, uint32_t state) {
505-(void)data; BIND_EVENT(time, value, state);
506-apply_grid_geometry(wm.sel_client, 0.5f, 0.5f);
507+ (void)data; BIND_EVENT(time, value, state);
508+ apply_grid_geometry(wm.sel_client, 0.5f, 0.5f);
509 }
510
511 void new_screen(struct swc_screen* scr)
512 {
513-struct screen* s = calloc(1, sizeof(*s));
514-if (!s) die(EXIT_FAILURE, "new screen calloc failed");
515+ struct screen* s = calloc(1, sizeof(*s));
516+ if (!s) die(EXIT_FAILURE, "new screen calloc failed");
517
518-s->scr = scr;
519-wl_list_insert(&wm.screens, &s->link);
520+ s->scr = scr;
521+ wl_list_insert(&wm.screens, &s->link);
522
523-if (!wm.sel_screen) wm.sel_screen = s;
524+ if (!wm.sel_screen) wm.sel_screen = s;
525
526-swc_screen_set_handler(scr, &screen_handler, s);
527-_log(stderr, "new_screen=%p\n", (void*)scr);
528+ swc_screen_set_handler(scr, &screen_handler, s);
529+ _log(stderr, "new_screen=%p\n", (void*)scr);
530 }
531
532 void new_window(struct swc_window* win)
533 {
534-struct client* c = calloc(1, sizeof(*c));
535-if (!c) die(EXIT_FAILURE, "calloc client failed");
536+ struct client* c = calloc(1, sizeof(*c));
537+ if (!c) die(EXIT_FAILURE, "calloc client failed");
538
539-win->motion_throttle_ms = 1000 / cfg.motion_throttle_hz;
540-win->min_width = 1;
541-win->min_height = 1;
542+ win->motion_throttle_ms = 1000 / cfg.motion_throttle_hz;
543+ win->min_width = 1;
544+ win->min_height = 1;
545
546-c->win = win;
547-c->scr = wm.sel_screen;
548-c->ws = wm.ws;
549+ c->win = win;
550+ c->scr = wm.sel_screen;
551+ c->ws = wm.ws;
552
553-wl_list_insert(&wm.clients, &c->link);
554-swc_window_set_handler(win, &window_handler, c);
555-swc_window_set_stacked(win);
556+ wl_list_insert(&wm.clients, &c->link);
557+ swc_window_set_handler(win, &window_handler, c);
558+ swc_window_set_stacked(win);
559
560-int32_t cx = 0, cy = 0;
561-if (swc_cursor_position(&cx, &cy))
562-swc_window_set_position(win, cx / 256, cy / 256);
563+ int32_t cx = 0, cy = 0;
564+ if (swc_cursor_position(&cx, &cy))
565+ swc_window_set_position(win, cx / 256, cy / 256);
566
567-swc_window_show(win);
568-focus(c);
569+ swc_window_show(win);
570+ focus(c);
571
572-_log(stderr, "new_window=%p\n", (void*)win);
573+ _log(stderr, "new_window=%p\n", (void*)win);
574 }
575
576 void new_device(struct libinput_device* dev)
577 {
578-(void)dev;
579+ (void)dev;
580 }
581
582 void quit(void* data, uint32_t time, uint32_t value, uint32_t state)
583 {
584-(void)data; BIND_EVENT(time, value, state);
585-wl_display_terminate(wm.dpy);
586+ (void)data; BIND_EVENT(time, value, state);
587+ wl_display_terminate(wm.dpy);
588 }
589
590 void spawn(void* data, uint32_t time, uint32_t value, uint32_t state)
591 {
592-BIND_EVENT(time, value, state);
593+ BIND_EVENT(time, value, state);
594
595-pid_t pid = fork();
596-if (pid == 0) {
597-setsid();
598-if (fork() == 0) {
599-union arg* a = data;
600-char* const* cmd = (char* const*)a->v;
601+ pid_t pid = fork();
602+ if (pid == 0) {
603+ setsid();
604+ if (fork() == 0) {
605+ union arg* a = data;
606+ char* const* cmd = (char* const*)a->v;
607
608-execvp(cmd[0], cmd);
609-_exit(127);
610-}
611-_exit(0);
612-} else if (pid > 0) {
613-waitpid(pid, NULL, 0);
614-}
615+ execvp(cmd[0], cmd);
616+ _exit(127);
617+ }
618+ _exit(0);
619+ } else if (pid > 0) {
620+ waitpid(pid, NULL, 0);
621+ }
622 }
623
624 void workspace_goto(void* data, uint32_t time, uint32_t value, uint32_t state)
625 {
626-union arg* a = data;
627-BIND_EVENT(time, value, state);
628+ union arg* a = data;
629+ BIND_EVENT(time, value, state);
630
631-if (a->ui < 1 || a->ui > 9 || a->ui == wm.ws) return;
632+ if (a->ui < 1 || a->ui > 9 || a->ui == wm.ws) return;
633
634-wm.ws = a->ui;
635-sync_window_visibility();
636+ wm.ws = a->ui;
637+ sync_window_visibility();
638
639-focus(get_focus_candidate(wm.sel_screen));
640+ focus(get_focus_candidate(wm.sel_screen));
641 }
642
643 void workspace_moveto(void* data, uint32_t time, uint32_t value, uint32_t state)
644 {
645-BIND_ACTION(data, time, value, state);
646-if (a->ui < 1 || a->ui > 9 || wm.sel_client->ws == a->ui) return;
647+ BIND_ACTION(data, time, value, state);
648+ if (a->ui < 1 || a->ui > 9 || wm.sel_client->ws == a->ui) return;
649
650-struct client* c = wm.sel_client;
651-c->ws = a->ui;
652+ struct client* c = wm.sel_client;
653+ c->ws = a->ui;
654
655-if (c->ws == wm.ws)
656-swc_window_show(c->win);
657-else
658-swc_window_hide(c->win);
659+ if (c->ws == wm.ws)
660+ swc_window_show(c->win);
661+ else
662+ swc_window_hide(c->win);
663
664-focus(get_focus_candidate(wm.sel_screen));
665+ focus(get_focus_candidate(wm.sel_screen));
666 }
667
668 int main(void)
669 {
670-setup();
671-wl_display_run(wm.dpy);
672-swc_finalize();
673-wl_display_destroy(wm.dpy);
674-return EXIT_SUCCESS;
675+ setup();
676+ wl_display_run(wm.dpy);
677+ swc_finalize();
678+ wl_display_destroy(wm.dpy);
679+ return EXIT_SUCCESS;
680 }