diff --git a/src/syncterm/ripper.c b/src/syncterm/ripper.c index 52dcf46823a17fe852517e2208ab0029c7a1eec5..7f49943ee204133fc1a77ac6b7347a892b600551 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 00dcd8729f304b8c13304d33feef522f7679602b..2df473ea32bcbd64b5bf88ce05bc39f947818908 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 35722f7b8d05a9ccf6be213ad5cd7643890df862..bbb608a0145e0fe820a1709151e90ef94fceb7af 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; }