From 7ef34abba92fef44be4859c211cce7ba0727367b Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Fri, 28 Jun 2002 01:50:51 +0000 Subject: [PATCH] Added new command (E) to allow users to edit their posted messages on a specific sub-board (sysop configurable). Implemented support for SUB_DELLAST toggle option (allows deleting of last message only). Option has been in SCFG for a long time, but never implemented. --- src/sbbs3/readmsgs.cpp | 79 +++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 31 deletions(-) diff --git a/src/sbbs3/readmsgs.cpp b/src/sbbs3/readmsgs.cpp index d0319fd031..0603bad936 100644 --- a/src/sbbs3/readmsgs.cpp +++ b/src/sbbs3/readmsgs.cpp @@ -516,7 +516,7 @@ int sbbs_t::scanposts(uint subnum, long mode, char *find) ASYNC; bprintf(text[ReadingSub],ugrp,cfg.grp[cfg.sub[subnum]->grp]->sname ,usub,cfg.sub[subnum]->sname,curpost+1,posts); - sprintf(str,"ABCDFILMPQRTY?<>[]{}-+.,"); + sprintf(str,"ABCDEFILMPQRTY?<>[]{}-+.,"); if(sub_op(subnum)) strcat(str,"O"); reread=0; @@ -546,11 +546,8 @@ int sbbs_t::scanposts(uint subnum, long mode, char *find) bputs(text[CantPostOnSub]); break; } quotemsg(&msg,0); - if(post) - LFREE(post); - post=NULL; + FREE_AND_NULL(post); postmsg(subnum,&msg,WM_QUOTE); - // post=loadposts(&posts,subnum,0,lp); if(mode&SCAN_TOYOU) domsg=1; break; @@ -571,23 +568,32 @@ int sbbs_t::scanposts(uint subnum, long mode, char *find) break; case 'D': /* Delete message on sub-board */ domsg=0; - if(!sub_op(subnum) && !(cfg.sub[subnum]->misc&SUB_DEL)) { - bputs(text[CantDeletePosts]); - break; } if(!sub_op(subnum)) { + if(!(cfg.sub[subnum]->misc&SUB_DEL)) { + bputs(text[CantDeletePosts]); + domsg=0; + break; + } + if(cfg.sub[subnum]->misc&SUB_DELLAST && curpost!=(posts-1)) { + bputs("\1n\r\nCan only delete last message.\r\n"); + domsg=0; + break; + } if(stricmp(cfg.sub[subnum]->misc&SUB_NAME ? useron.name : useron.alias, msg.from) && stricmp(cfg.sub[subnum]->misc&SUB_NAME ? useron.name : useron.alias, msg.to)) { bprintf(text[YouDidntPostMsgN],curpost+1); - break; } } + break; + } + } if(msg.hdr.attr&MSG_PERMANENT) { bputs("\1n\r\nMessage is marked permanent.\r\n"); domsg=0; - break; } - if(post) - LFREE(post); - post=NULL; + break; + } + + FREE_AND_NULL(post); if(msg.total_hfields) smb_freemsgmem(&msg); @@ -617,7 +623,29 @@ int sbbs_t::scanposts(uint subnum, long mode, char *find) if(curpost>=posts-1) done=1; break; - + case 'E': /* edit last post */ + if(!sub_op(subnum)) { + if(!(cfg.sub[subnum]->misc&SUB_EDIT)) { + bputs("\1n\r\nCan't edit messages on this message base.\r\n"); + // bputs(text[CantDeletePosts]); + domsg=0; + break; + } + if(cfg.sub[subnum]->misc&SUB_EDITLAST && curpost!=(posts-1)) { + bputs("\1n\r\nCan only edit last message.\r\n"); + domsg=0; + break; + } + if(stricmp(cfg.sub[subnum]->misc&SUB_NAME + ? useron.name : useron.alias, msg.from)) { + bprintf(text[YouDidntPostMsgN],curpost+1); + domsg=0; + break; + } + } + FREE_AND_NULL(post); + editmsg(&msg,subnum); + break; case 'F': /* find text in messages */ domsg=0; bprintf(text[StartWithN],curpost+2); @@ -669,9 +697,8 @@ int sbbs_t::scanposts(uint subnum, long mode, char *find) bputs(text[Email]); if(!getstr(str,60,K_EDIT|K_AUTODEL)) break; - if(post) - LFREE(post); - post=NULL; + + FREE_AND_NULL(post); quotemsg(&msg,1); if(msg.from_net.type==NET_INTERNET && strchr(str,'@')) inetmail(str,msg.subj,WM_QUOTE|WM_NETMAIL); @@ -687,19 +714,15 @@ int sbbs_t::scanposts(uint subnum, long mode, char *find) else i=matchuser(&cfg,str,TRUE /* sysop_alias */); } email(i,str2,msg.subj,WM_EMAIL|WM_QUOTE); } } - // post=loadposts(&posts,subnum,0,lp); break; case 'P': /* Post message on sub-board */ domsg=0; if(!chk_ar(cfg.sub[subnum]->post_ar,&useron)) bputs(text[CantPostOnSub]); else { - if(post) - LFREE(post); - post=NULL; + FREE_AND_NULL(post); postmsg(subnum,0,0); - // post=loadposts(&posts,subnum,0,lp); - } + } break; case 'Q': /* Quit */ if(msg.total_hfields) @@ -765,11 +788,8 @@ int sbbs_t::scanposts(uint subnum, long mode, char *find) smb_unlockmsghdr(&smb,&msg); } break; case 'E': /* edit last post */ - if(post) - LFREE(post); - post=NULL; + FREE_AND_NULL(post); editmsg(&msg,subnum); - // post=loadposts(&posts,subnum,0,lp); break; case 'H': /* View message header */ msghdr(&msg); @@ -777,9 +797,7 @@ int sbbs_t::scanposts(uint subnum, long mode, char *find) break; case 'M': /* Move message */ domsg=0; - if(post) - LFREE(post); - post=NULL; + FREE_AND_NULL(post); if(msg.total_hfields) smb_freemsgmem(&msg); msg.total_hfields=0; @@ -794,7 +812,6 @@ int sbbs_t::scanposts(uint subnum, long mode, char *find) if((i=smb_putmsg(&smb,&msg))!=0) errormsg(WHERE,ERR_WRITE,smb.file,i); } smb_unlockmsghdr(&smb,&msg); - // post=loadposts(&posts,subnum,0,lp); break; case 'Q': -- GitLab