+Wed Oct 13 17:51:17 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+ * Merge patch from Ben Collins to fix windowresizing in dselect
+
Tue Oct 12 17:15:08 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
* don't die if we can't open a package in dpkg-scanpackages, just print
#include <signal.h>
+#if defined(SIGWINCH) && defined(TIOCGWINSZ) && defined(NCURSES_VERSION)
+#define CAN_RESIZE 1
+#else
+#define CAN_RESIZE 0
+#endif
+
+#if CAN_RESIZE
+static RETSIGTYPE adjust(int sig);
+static int interrupted;
+#endif
+
struct helpmenuentry {
char key;
const struct helpmessage *msg;
stdout)) werr("stdout");
}
+#if CAN_RESIZE
+/*
+ * This uses functions that are "unsafe", but it seems to work on SunOS and
+ * Linux. The 'wrefresh(curscr)' is needed to force the refresh to start from
+ * the top of the screen -- some xterms mangle the bitmap while resizing.
+ *
+ * Borrowed from the ncurses example view.c
+ */
+static RETSIGTYPE adjust(int sig)
+{
+ if (waiting || sig == 0) {
+ struct winsize size;
+
+ if (ioctl(fileno(stdout), TIOCGWINSZ, &size) == 0) {
+ resizeterm(size.ws_row, size.ws_col);
+ wrefresh(curscr); /* Linux needs this */
+ show_all();
+ }
+ interrupted = FALSE;
+ } else {
+ interrupted = TRUE;
+ }
+ (void) signal(SIGWINCH, adjust); /* some systems need this */
+}
+#endif /* CAN_RESIZE */
+
/* These are called by C code, so need to have C calling convention */
extern "C" {
int main(int, const char *const *argv) {
jmp_buf ejbuf;
+#if CAN_RESIZE
+ (void) signal(SIGWINCH, adjust); /* arrange interrupts to resize */
+#endif
+
if (setjmp(ejbuf)) { /* expect warning about possible clobbering of argv */
cursesoff();
error_unwind(ehflag_bombout); exit(2);
if (debug) fprintf(debug,"packagelist[%p]::display() entering loop\n",this);
for (;;) {
+#if CAN_RESIZE
+ if (interrupted)
+ adjust(0);
+#endif
if (whatinfo_height) wcursyncup(whatinfowin);
if (doupdate() == ERR) ohshite("doupdate failed");
signallist= this;