From 0d8815f27410b4d1c3a4196183c5e6f18715e00c Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Wed, 25 Mar 2020 01:32:52 +0900 Subject: [PATCH] [qwaq] Handle debug events at the app level The debugger displays the source file but doesn't highlight the current line yet. --- ruamoko/qwaq/qwaq-app.h | 5 +++ ruamoko/qwaq/qwaq-app.r | 70 +++++++++++++++++++++++++----------- ruamoko/qwaq/qwaq-debugger.h | 1 + ruamoko/qwaq/qwaq-debugger.r | 10 ++++-- 4 files changed, 63 insertions(+), 23 deletions(-) diff --git a/ruamoko/qwaq/qwaq-app.h b/ruamoko/qwaq/qwaq-app.h index 40681d940..3facb0bc6 100644 --- a/ruamoko/qwaq/qwaq-app.h +++ b/ruamoko/qwaq/qwaq-app.h @@ -6,8 +6,10 @@ #include "event.h" #include "qwaq-rect.h" +@class Array; @class Group; @class TextContext; +@class View; @interface QwaqApplication: Object { @@ -19,9 +21,12 @@ TextContext *screen; Extent screenSize; int autocount; + + Array *debuggers; } -(Extent)size; -(TextContext *)screen; +-addView:(View *)view; -run; @end diff --git a/ruamoko/qwaq/qwaq-app.r b/ruamoko/qwaq/qwaq-app.r index aba239607..7a9e6ed97 100644 --- a/ruamoko/qwaq/qwaq-app.r +++ b/ruamoko/qwaq/qwaq-app.r @@ -6,6 +6,7 @@ int fence; #include "color.h" #include "qwaq-app.h" #include "qwaq-curses.h" +#include "qwaq-debugger.h" #include "qwaq-group.h" #include "qwaq-view.h" @@ -49,6 +50,8 @@ arp_end (void) [screen scrollok: 1]; [screen clear]; wrefresh (stdscr);//FIXME + + debuggers = [[Array array] retain]; return self; } @@ -69,32 +72,50 @@ arp_end (void) return self; } +-(Debugger *)find_debugger:(qdb_target_t) target +{ + Debugger *debugger; + + for (int i = [debuggers count]; i-- > 0; ) { + debugger = [debuggers objectAtIndex: i]; + if ([debugger debug_target].handle == target.handle) { + return debugger; + } + } + debugger = [[Debugger alloc] initWithTarget: target]; + [debuggers addObject: debugger]; + return debugger; +} + -handleEvent: (qwaq_event_t *) event { - if (event.what == qe_resize) { - Extent delta; - delta.width = event.resize.width - screenSize.width; - delta.height = event.resize.height - screenSize.height; + switch (event.what) { + case qe_resize: + Extent delta; + delta.width = event.resize.width - screenSize.width; + delta.height = event.resize.height - screenSize.height; - resizeterm (event.resize.width, event.resize.height); - [screen resizeTo: {event.resize.width, event.resize.height}]; - screenSize = [screen size]; - [objects resize: delta]; - [screen refresh]; - event.what = qe_none; - return self; + resizeterm (event.resize.width, event.resize.height); + [screen resizeTo: {event.resize.width, event.resize.height}]; + screenSize = [screen size]; + [objects resize: delta]; + [screen refresh]; + event.what = qe_none; + break; + case qe_key: + if (event.key.code == '\x18' || event.key.code == '\x11') { + endState = event.message.int_val; + event.what = qe_none; + } + break; + case qe_debug_event: + [[self find_debugger:{event.message.int_val}] handleDebugEvent]; + event.what = qe_none; + break; } - if (event.what == qe_key - && (event.key.code == '\x18' || event.key.code == '\x11')) { - event.what = qe_command; - event.message.int_val = qc_exit; + if (event.what != qe_none) { + [objects handleEvent: event]; } - if (event.what == qe_command - && (event.message.int_val == qc_exit - || event.message.int_val == qc_error)) { - endState = event.message.int_val;; - } - [objects handleEvent: event]; return self; } @@ -114,6 +135,13 @@ arp_end (void) } while (!endState); return self; } + +-addView:(View *)view +{ + [objects insertSelected: view]; + [screen refresh]; + return self; +} @end QwaqApplication *application; diff --git a/ruamoko/qwaq/qwaq-debugger.h b/ruamoko/qwaq/qwaq-debugger.h index 34809def2..2a1e3a2b3 100644 --- a/ruamoko/qwaq/qwaq-debugger.h +++ b/ruamoko/qwaq/qwaq-debugger.h @@ -18,6 +18,7 @@ Editor *current_file; qdb_target_t debug_target; } +-(qdb_target_t)debug_target; -initWithTarget:(qdb_target_t) target; -handleDebugEvent; @end diff --git a/ruamoko/qwaq/qwaq-debugger.r b/ruamoko/qwaq/qwaq-debugger.r index bd771c679..aea913dc8 100644 --- a/ruamoko/qwaq/qwaq-debugger.r +++ b/ruamoko/qwaq/qwaq-debugger.r @@ -1,5 +1,6 @@ #include +#include "qwaq-app.h" #include "qwaq-curses.h" #include "qwaq-debugger.h" #include "qwaq-editor.h" @@ -7,6 +8,10 @@ #include "qwaq-window.h" @implementation Debugger +-(qdb_target_t)debug_target +{ + return debug_target; +} -initWithTarget:(qdb_target_t) target { @@ -16,8 +21,8 @@ debug_target = target; files = [[Array array] retain]; - //FIXME need a window manager - source_window = [[Window alloc] initWithRect: getwrect (stdscr)]; + source_window = [[Window alloc] initWithRect: {nil, [application size]}]; + [application addView:source_window]; return self; } @@ -47,6 +52,7 @@ file_proxy = [[ProxyView alloc] initWithView: current_file]; //FIXME id? [source_window insertSelected: (View *) file_proxy]; + [source_window redraw]; } -handleDebugEvent