Исходный код
do {
XLoop:
XNextEvent(dpy,&event);
switch(event.type) {
case ResizeRequest:
if (event.xresizerequest.window!=win_main)
goto XLoop;
resize_main:
xswa.event_mask&= ~ResizeRedirectMask;
XChangeWindowAttributes(dpy,win_main,CWEventMask, &xswa);
XSync(dpy,0); /* very important, otherwise we loop endlessly ! */
XResizeWindow(dpy, win_main,event.xresizerequest.width,event.xresizerequest.height);
XSync(dpy,0); /* very important, otherwise we loop endlessly ! */
xswa.event_mask|= ResizeRedirectMask;
XChangeWindowAttributes(dpy,win_main,CWEventMask, &xswa);
resize=1;
XSync(dpy,0); /* another one, just in case... */
goto redisplay;
case Expose:
if (event.xexpose.count|moving_button1|vmoving_button)
goto XLoop;
Что не так в исходном коде
С помощью меток и операторов перехода этот код самым бессердечным образом нарушает принципы структурного программирования.
Структурное программирование старо, как говно мамонта, даже я изучал его на первом курсе университета, а современные программисты должны просто его впитывать с материнским молоком.
Предполагаю, что код был написан программистом времён какого-нибудь фортрана, так как программисты часто притаскивают в новые продвинутые языки программирования какие-нибудь привычные им устаревшие подходы.
Переписывать этот код я не буду, просто запомни: использовать оператор goto
в любом языке программирования в любой ситуации — страшный грех.