From bd4612ea48ed8eb745ec6878c82ea52105a71651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net> Date: Tue, 16 Mar 2021 01:59:56 -0400 Subject: [PATCH] Suspend RIP processing for file transfers --- src/syncterm/ripper.c | 18 ++++++++++++++++++ src/syncterm/ripper.h | 1 + src/syncterm/term.c | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/src/syncterm/ripper.c b/src/syncterm/ripper.c index 52dcf46823..7f49943ee2 100644 --- a/src/syncterm/ripper.c +++ b/src/syncterm/ripper.c @@ -97,6 +97,7 @@ static uint8_t *ripbuf = NULL; static size_t ripbuf_size = 0; static size_t ripbuf_pos = 0; static size_t ripbufpos = 0; +static bool rip_suspended = false; static struct mouse_field *rip_pressed = NULL; @@ -13157,6 +13158,23 @@ init_rip(int enabled) } } +void +suspend_rip(bool suspend) +{ + if (suspend) { + if (rip.enabled) { + rip_suspended = true; + rip.enabled = false; + } + } + else { + if (rip_suspended) { + rip_suspended = false; + rip.enabled = true; + } + } +} + int rip_kbhit(void) { diff --git a/src/syncterm/ripper.h b/src/syncterm/ripper.h index 00dcd8729f..2df473ea32 100644 --- a/src/syncterm/ripper.h +++ b/src/syncterm/ripper.h @@ -5,5 +5,6 @@ void init_rip(int enabled); size_t parse_rip(BYTE *buf, unsigned blen, unsigned maxlen); int rip_getch(void); int rip_kbhit(void); +void suspend_rip(bool suspend); #endif diff --git a/src/syncterm/term.c b/src/syncterm/term.c index 35722f7b8d..bbb608a014 100644 --- a/src/syncterm/term.c +++ b/src/syncterm/term.c @@ -875,6 +875,7 @@ void begin_upload(struct bbslist *bbs, BOOL autozm, int lastch) } setvbuf(fp,NULL,_IOFBF,0x10000); + suspend_rip(true); if(autozm) zmodem_upload(bbs, fp, path); else { @@ -904,6 +905,7 @@ void begin_upload(struct bbslist *bbs, BOOL autozm, int lastch) break; } } + suspend_rip(false); uifcbail(); restorescreen(savscrn); freescreen(savscrn); @@ -941,6 +943,7 @@ void begin_download(struct bbslist *bbs) i=0; uifc.helpbuf="Select Protocol"; hold_update=FALSE; + suspend_rip(true); switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,NULL,"Protocol",opts)) { case -1: check_exit(FALSE); @@ -963,6 +966,7 @@ void begin_download(struct bbslist *bbs) xmodem_download(bbs, XMODEM|RECV,path); break; } + suspend_rip(false); hold_update=old_hold; uifcbail(); restorescreen(savscrn); @@ -2613,11 +2617,13 @@ BOOL doterm(struct bbslist *bbs) zrqbuf[++j]=0; if(j==sizeof(zrqinit)-1) { /* Have full sequence (Assumes zrinit and zrqinit are same length */ WRITE_OUTBUF(); + suspend_rip(true); if(!strcmp((char *)zrqbuf, (char *)zrqinit)) zmodem_download(bbs); else begin_upload(bbs, TRUE, inch); setup_mouse_events(&ms); + suspend_rip(false); zrqbuf[0]=0; remain=1; } -- GitLab