home *** CD-ROM | disk | FTP | other *** search
Wrap
/* ** $VER: CfgSortMail.thor 2.2a (1.10.95) ** by Eirik Nicolai Synnes ** ** Configuration editor for SortMail.thor ** ** ** Todo: Check MultiView version? ** */ options results mvopen = 0 system = ""; mailconf = ""; checkcc = 0; stats = 0; delusers = 0 msgactive = 0; mlcount = 0; dgcount = 0 /* Open Thor and BBSREAD ARexx ports' */ p=address()||' '||show('P',,);if pos('THOR.',p)>0 then thorport=word(substr(p,pos('THOR.',p)),1);else do;say 'No THOR port found!';exit(0);end if ~show('p', 'BBSREAD') then do; address command; "run >nil: `GetEnv THOR/THORPath`bin/LoadBBSRead"; "WaitForPort BBSREAD"; end address(thorport) /* See if another copy of CfgSortMail is already running */ if exists("T:CfgSortMail.tmp") then do REQUESTNOTIFY '"Another copy of CfgSortMail\nis probably running."' '"Continue|Abort"' if result = 0 then exit(0) end call open(tmp, "T:CfgSortMail.tmp", 'W'); call close(tmp) /* Find configuration file and read it*/ call open(pn, 'ENV:Thor/THORPATH') thorpath = readln(pn) call close(pn) if ~exists(thorpath'rexx') then cfgfile = 'ENV:Thor/SortMail.cfg' else do if exists(thorpath'rexx/SortMail.cfg') then cfgfile = thorpath'rexx/SortMail.cfg' else cfgfile = 'ENV:Thor/SortMail.cfg' end CURRENTSYSTEM STEM bbs if rc > 1 then do REQUESTNOTIFY '"'THOR.LASTERROR'"' '"_Abort"' exit(0) end if ~exists(cfgfile) then call cfgsetup(cfgfile) call readcfg /* See if the users reading a message */ trace off; CURRENTMSG curmsg; trace on if rc = 0 then msgactive = 1 mainmenu: /* Display main menu */ menulist.1 = 'Change e-mail conference 'system': 'mailconf menulist.2 = '' menulist.3 = 'Configure mailing lists' menulist.4 = 'Configure digests' menulist.5 = '' menulist.6 = 'Parse AmiNet RECENT updates: '; if aminet ~= 'AMINET' then menulist.6 = menulist.6'YES'; else menulist.6 = menulist.6'NO' menulist.7 = ' AmiNet RECENT to-address: '; if aminet ~= 'AMINET' then menulist.7 = menulist.7||aminet; else menulist.7 = menulist.7'NONE' menulist.8 = ' Delete AmiNet RECENT message '; if delaminet = 1 then menulist.8 = menulist.8'YES'; else menulist.8 = menulist.8'NO' menulist.9 = 'UUDecode Amiga Report: '; if amirep ~= 'AMIREP' then menulist.9 = menulist.9'YES'; else menulist.9 = menulist.9'NO' menulist.10 = ' Amiga Report from-address: '; if amirep ~= 'AMIREP' then menulist.10 = menulist.10||amirep; else menulist.10 = menulist.10'NONE' menulist.11 = 'UUDecode Amiga Link: '; if amilink ~= 'AMILINK' then menulist.11 = menulist.11'YES'; else menulist.11 = menulist.11'NO' menulist.12 = ' Amiga Link from-address: '; if amilink ~= 'AMILINK' then menulist.12 = menulist.12||amilink; else menulist.12 = menulist.12'NONE' menulist.13 = '' menulist.14 = 'Enable statistics: '; if stats = 1 then menulist.14 = menulist.14'YES'; else menulist.14 = menulist.14'NO' menulist.15 = 'Check comment fields: '; if checkcc = 1 then menulist.15 = menulist.15'YES'; else menulist.15 = menulist.15'NO' menulist.16 = 'Disable user adding: '; if delusers = 1 then menulist.16 = menulist.16'YES'; else menulist.16 = menulist.16'NO' menulist.17 = '' menulist.18 = 'HELP' menulist.count = 18 address(thorport) REQUESTLIST INSTEM menulist TITLE '"CfgSortMail 2.0 by Eirik Synnes"' SIZEGADGET if rc ~= 0 then do if exists("T:CfgSortMail.tmp") then do address(command) "Delete T:CfgSortMail.tmp QUIET" end exit(0) end choice = result /* Check user input */ select when choice = menulist.1 then do address(bbsread) GETBBSLIST STEM bbslist address(thorport) REQUESTLIST INSTEM bbslist TITLE '"Select system"' SIZEGADGET if rc ~= 0 then break tempsystem = result address(bbsread) GETCONFLIST BBSNAME '"'tempsystem'"' STEM conflist address(thorport) REQUESTLIST INSTEM conflist TITLE '"Select conference"' SIZEGADGET if rc ~= 0 then break mailconf = result system = tempsystem call writecfg(cfgfile) end when choice = menulist.3 then call cfgmaillist(curmsg.msgnr, cfgfile) when choice = menulist.4 then call cfgdigest(curmsg.msgnr, cfgfile) when choice = menulist.6 then do if aminet ~= 'AMINET' then do; aminet = 'AMINET'; call writecfg(cfgfile); end else do address(thorport) REQUESTSTRING '"AmiNet RECENT to-address"' ID '"aminet-daily@wunet.wustl.edu"' if rc = 0 then do; aminet = result; call writecfg(cfgfile); end end end when choice = menulist.7 then do address(thorport) REQUESTSTRING '"AmiNet RECENT to-address"' ID '"aminet-daily@wunet.wustl.edu"' if rc = 0 then do; aminet = result; call writecfg(cfgfile); end end when choice = menulist.8 then do if delaminet = 0 then delaminet = 1 else delaminet = 0 call writecfg(cfgfile) end when choice = menulist.9 then do if amirep ~= 'AMIREP' then do; amirep = 'AMIREP'; call writecfg(cfgfile); end else do address(thorport) REQUESTSTRING '"Amiga Report from-address"' ID '"jcompton@xnet.com"' if rc = 0 then do; amirep = result; call writecfg(cfgfile); end end end when choice = menulist.10 then do address(thorport) REQUESTSTRING '"Amiga Report from-address"' ID '"jcompton@xnet.com"' if rc = 0 then do; amirep = result; call writecfg(cfgfile); end end when choice = menulist.11 then do if amilink ~= 'AMILINK' then do; amilink = 'AMILINK'; call writecfg(cfgfile); end else do address(thorport) REQUESTSTRING '"Amiga Link from-address"' ID '"jcompton@xnet.com"' if rc = 0 then do; amilink = result; call writecfg(cfgfile); end end end when choice = menulist.12 then do address(thorport) REQUESTSTRING '"Amiga Link from-address"' ID '"jcompton@xnet.com"' if rc = 0 then do; amilink = result; call writecfg(cfgfile); end end when choice = menulist.14 then do if stats = 0 then stats = 1 else stats = 0 call writecfg(cfgfile) end when choice = menulist.15 then do if checkcc = 0 then checkcc = 1 else checkcc = 0 call writecfg(cfgfile) end when choice = menulist.16 then do if delusers = 0 then delusers = 1 else delusers = 0 call writecfg(cfgfile) end when choice = menulist.18 then do call help('MAIN') end otherwise nop end signal mainmenu /* ** Procedures */ help: procedure expose mvopen thorport thorpath parse arg node if node = 'MAIN' then page = 1 if node = 'CFGML' then page = 2 if node = 'CFGDG' then page = 3 if index(show('P',,), 'MV_SORTMAIL') = 0 then do address(thorport) GETGLOBALCONFIG STEM GLOBCFG /* Check version of MultiView? */ address(command) 'Run >NIL: MultiView FILE 'thorpath'Docs/SortMail.guide PORTNAME MV_SORTMAIL PUBSCREEN 'GLOBCFG.PUBSCREENNAME 'WaitForPort MV_SORTMAIL' if rc ~= 0 then do address(thorport) REQUESTNOTIFY '"Couldn''t start MultiView."' '"Sigh"' return end end address(MV_SORTMAIL) DOTRIGGERMETHOD CONTENTS do i = 1 to page; DOTRIGGERMETHOD NEXT; end return cfgmaillist: procedure expose bbs. system mailconf thorport mlcount mlist. dgcount digest. aminet delaminet amirep amilink checkcc stats delusers msgactive thorpath parse arg curmsg, cfgfile CDF_NOT_ON_BBS = '00008000'x /* This conference is not on the bbs. */ mlistmenu: menulist.1 = 'Add new mailing list' menulist.2 = 'Edit mailing list' menulist.3 = 'Delete mailing list' menulist.count = 3 address(thorport) REQUESTLIST INSTEM menulist TITLE '"Configure mailing lists"' SIZEGADGET if rc ~= 0 then return choice = result if choice = menulist.1 then signal addmlist if choice = menulist.2 then signal editmlist if choice = menulist.3 then signal delmlist signal mlistmenu addmlist: REQUESTSTRING TITLE '"Enter a conference name"' BT '"_Ok|_Cancel"' ID '"(ML) "' MAXCHARS 80 if rc ~= 0 then signal mlistmenu toconf = result toconf = strip(toconf) mlcount = mlcount + 1 mlist.mlcount.name = toconf toconfnr = mlcount mlist.toconfnr.addrcount = 0 mlist.toconfnr.namecount = 0 edit = 0 signal editmlistdata editmlist: if mlcount > 0 then do do n = 1 to mlcount; conflist.n = mlist.n.name; end conflist.count = mlcount REQUESTLIST INSTEM conflist TITLE '"Select a mailing list"' SIZEGADGET if rc ~= 0 then signal mlistmenu toconf = result do n = 1 to mlcount; if toconf = mlist.n.name then toconfnr = n; end end else do REQUESTNOTIFY '"There are no configured mailing lists."' '"_Abort"' signal mlistmenu end edit = 1 editmlistdata: if msgactive = 1 & bbs.CONFNAME = mailconf then do address(bbsread) READBRMESSAGE '"'system'"' '"'mailconf'"' curmsg HEADSTEM head TEXTSTEM text if rc ~= 0 then do address(thorport) REQUESTNOTIFY '"Couldn''t get info on active message:\n'BBSREAD.LASTERROR'"' '"_Abort"' return end address(thorport) end if mlist.toconfnr.replyaddr = 'MLIST.'toconfnr'.REPLYADDR' then do if text.REPLYADDR ~= 'TEXT.REPLYADDR' then mlist.toconfnr.replyaddr = text.REPLYADDR else if head.TOADDR ~= 'HEAD.TOADDR' then mlist.toconfnr.replyaddr = head.TOADDR end editmlistmenu: menulist.1 = 'Add to-address'; addaddr = 1; n = 2 do i = 1 to mlist.toconfnr.addrcount menulist.n = ' 'mlist.toconfnr.toaddr.i n = n + 1 end menulist.n = 'Add to-name'; addname = n; n = n + 1 do i = 1 to mlist.toconfnr.namecount menulist.n = ' 'mlist.toconfnr.toname.i n = n + 1 end if mlist.toconfnr.fromf = 'MLIST.'toconfnr'.FROMF' | mlist.toconfnr.fromf = '' then menulist.n = 'From field: NONE' else menulist.n = 'From field: 'mlist.toconfnr.fromf fromfield = n; n = n + 1 if mlist.toconfnr.replyaddr = 'MLIST.'toconfnr'.REPLYADDR' then menulist.n = 'Reply address: EDIT ME' else menulist.n = 'Reply address: 'mlist.toconfnr.replyaddr repaddr = n; n = n + 1 menulist.n = ''; n = n + 1 menulist.n = 'HELP' menulist.count = n REQUESTLIST INSTEM menulist TITLE '"'toconf'"' SIZEGADGET if rc ~= 0 then do if mlist.toconfnr.replyaddr = 'MLIST.'toconfnr'.REPLYADDR' then do REQUESTNOTIFY '"You should edit the reply address before exiting.\nAre you sure you want to exit?"' '"Yes|No"' if result = 0 then signal editmlistmenu end call writecfg(cfgfile) signal mlistmenu end choice = result select when choice = menulist.addaddr then do mlist.toconfnr.addrcount = mlist.toconfnr.addrcount + 1 addrs = mlist.toconfnr.addrcount if head.TOADDR ~= 'HEAD.TOADDR' then do mlist.toconfnr.toaddr.addrs = head.TOADDR addrid = mlist.toconfnr.toaddr.addrs end else addrid = '' REQUESTSTRING TITLE '"Enter a to-address"' BT '"_Ok|_Cancel"' ID '"'addrid'"' MAXCHARS 40 if rc ~= 0 then do mlist.toconfnr.addrcount = mlist.toconfnr.addrcount - 1 signal editmlistmenu end mlist.toconfnr.toaddr.addrs = result call writecfg(cfgfile) end when choice = menulist.addname then do mlist.toconfnr.namecount = mlist.toconfnr.namecount + 1 names = mlist.toconfnr.namecount if head.TONAME ~= 'HEAD.TONAME' then do mlist.toconfnr.toname.names = head.TOname nameid = mlist.toconfnr.toname.names end else nameid = '' REQUESTSTRING TITLE '"Enter a to-name"' BT '"_Ok|_Cancel"' ID '"'nameid'"' MAXCHARS 40 if rc ~= 0 then do mlist.toconfnr.namecount = mlist.toconfnr.namecount - 1 signal editmlistmenu end mlist.toconfnr.toname.names = result call writecfg(cfgfile) end when choice = menulist.repaddr then do if mlist.toconfnr.replyaddr = 'mlist.toconfnr.replyaddr' then repid = "" else repid = mlist.toconfnr.replyaddr REQUESTSTRING TITLE '"Enter a reply-address"' BT '"_Ok|_Cancel"' ID '"'repid'"' MAXCHARS 40 if rc ~= 0 then signal editmlistmenu mlist.toconfnr.replyaddr = result call writecfg(cfgfile) end when choice = menulist.fromfield then do fromfid = 'NONE' if msgactive = 1 & text.COMMENT.COUNT ~= 'TEXT.COMMENT.COUNT' & text.COMMENT.COUNT > 0 then do i = 1 to text.COMMENT.COUNT if upper(left(text.COMMENT.i, 4)) = "FROM" then do fromfid = subword(text.COMMENT.i, 2) end end fromfid = translate(fromfid, '<>', '()') i = pos("<", from) if i ~= 0 then do checkaddr = strip(substr(fromfid, i, pos('>', fromfid) - i), B, ' <>"') if pos("@", checkaddr) > 0 then do fromfid = checkaddr end end else fromfid = subword(strip(fromfid, B, ' "'), 1, 1) REQUESTSTRING TITLE '"NONE to disable"' BT '"_Ok|_Cancel"' ID '"'fromfid'"' MAXCHARS 40 if rc ~= 0 then signal editmlistmenu if result ~= 'NONE' then mlist.toconfnr.fromf = result else drop mlist.toconfnr.fromf call writecfg(cfgfile) end when choice = 'HELP' then do call help('CFGML') end otherwise do do i = 1 to mlist.toconfnr.addrcount if choice = mlist.toconfnr.toaddr.i then do REQUESTNOTIFY '"Do you want to edit\nor delete this item?"' '"Edit|Delete"' if result = 0 then do REQUESTNOTIFY '"Sure you want to remove\n'choice'\nas a search criteria?"' '"_Yes|_No"' if result = 1 then do k = 1 do j = 1 to mlist.toconfnr.addrcount if mlist.toconfnr.toaddr.j ~= choice then do mlist.toconfnr.toaddr.k = mlist.toconfnr.toaddr.j k = k + 1 end end mlist.toconfnr.addrcount = mlist.toconfnr.addrcount - 1 call writecfg(cfgfile) end end else do REQUESTSTRING TITLE '"Edit to-address"' BT '"_Ok|_Cancel"' ID '"'mlist.toconfnr.toaddr.i'"' MAXCHARS 40 if rc = 0 then do mlist.toconfnr.toaddr.i = result call writecfg(cfgfile) end end end end do i = 1 to mlist.toconfnr.namecount if choice = mlist.toconfnr.toname.i then do REQUESTNOTIFY '"Do you want to edit\nor delete this item?"' '"Edit|Delete"' if result = 0 then do REQUESTNOTIFY '"Do you want to remove\n'choice'\nas a search criteria?"' '"_Yes|_No"' if result = 1 then do k = 1 do j = 1 to mlist.toconfnr.namecount if mlist.toconfnr.toname.j ~= choice then do mlist.toconfnr.toname.k = mlist.toconfnr.toname.j k = k + 1 end end mlist.toconfnr.namecount = mlist.toconfnr.namecount - 1 call writecfg(cfgfile) end else do REQUESTSTRING TITLE '"Edit to-name"' BT '"_Ok|_Cancel"' ID '"'mlist.toconfnr.toname.i'"' MAXCHARS 40 if rc = 0 then do mlist.toconfnr.toname.i = result call writecfg(cfgfile) end end end end end end end signal editmlistmenu delmlist: if mlcount > 0 then do do n = 1 to mlcount; conflist.n = mlist.n.name; end conflist.count = mlcount REQUESTLIST INSTEM conflist TITLE '"Select a mailling list"' SIZEGADGET if rc ~= 0 then signal mlistmenu delconf = result REQUESTNOTIFY '"Do you want to remove this entry from\nSortMail''s configuration? (I will only\nstop sorting it, not delete the conference)"' "Yes|_No" if result = 0 then signal mlistmenu counter = 1 do n = 1 to mlcount if mlist.n.name = delconf then n = n + 1 mlist.counter.name = mlist.n.name if addrcount > 0 then do m = 1 to mlist.counter.addrcount mlist.counter.toaddr.m = mlist.n.toaddr.m end if namecount > 0 then do m = 1 to mlist.counter.namecount mlist.counter.toname.m = mlist.n.toname.m end mlist.counter.replyaddr = mlist.n.replyaddr counter = counter + 1 if counter > mlcount then leave end mlcount = mlcount - 1 call writecfg(cfgfile) end else do REQUESTNOTIFY '"There are no configured mailing lists."' '"_Abort"' end signal mlistmenu readcfg: procedure expose cfgfile system mailconf aminet delaminet amirep amilink checkcc mlist. digest. mlcount dgcount stats delusers thorpath /* Open and read configuration file */ call open(cf, cfgfile, 'R') do until eof(cf) subentry = "" entry = readln(cf) select when upper(entry) = "SYSTEM" then do until upper(subentry) = "END" subentry = readln(cf) select when upper(subword(subentry, 1, 1)) = 'BBS:' then system = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'CONF:' then mailconf = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'AMINET:' then aminet = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'DELAMINET:' then if upper(subword(subentry, 2, 1)) = 'YES' then delaminet = 1 when upper(subword(subentry, 1, 1)) = 'AMIREP:' then amirep = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'AMILINK:' then amilink = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'CHECKCC:' then if upper(subword(subentry, 2, 1)) = 'YES' then checkcc = 1 when upper(subword(subentry, 1, 1)) = 'STATISTICS:' then if upper(subword(subentry, 2, 1)) = 'YES' then stats = 1 when upper(subword(subentry, 1, 1)) = 'DELUSERS:' then if upper(subword(subentry, 2, 1)) = 'YES' then delusers = 1 otherwise nop end end when upper(entry) = "MAILLIST" then do mlcount = mlcount + 1 addrs = 0; names = 0 do until upper(subentry) = "END" subentry = readln(cf) select when upper(subword(subentry, 1, 1)) = 'LISTNAME:' then mlist.mlcount.name = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'TOADDR:' then do addrs = addrs + 1 mlist.mlcount.toaddr.addrs = subword(subentry, 2) end when upper(subword(subentry, 1, 1)) = 'TONAME:' then do names = names + 1 mlist.mlcount.toname.names = subword(subentry, 2) end when upper(subword(subentry, 1, 1)) = 'FROMFIELD:' then mlist.mlcount.fromf = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'REPLYADDR:' then mlist.mlcount.replyaddr = subword(subentry, 2) otherwise nop end mlist.mlcount.addrcount = addrs mlist.mlcount.namecount = names mlist.mlcount.fromfcount = fromfs end end when upper(entry) = "DIGEST" then do dgcount = dgcount + 1 addrs = 0; names = 0 digest.dgcount.deldigest = 0 do until upper(subentry) = "END" subentry = readln(cf) select when upper(subword(subentry, 1, 1)) = 'DIGESTNAME:' then digest.dgcount.name = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'TOADDR:' then do addrs = addrs + 1 digest.dgcount.toaddr.addrs = subword(subentry, 2) end when upper(subword(subentry, 1, 1)) = 'TONAME:' then do names = names + 1 digest.dgcount.toname.names = subword(subentry, 2) end when upper(subword(subentry, 1, 1)) = 'REPLYADDR:' then digest.dgcount.replyaddr = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'ENDSUBMSG:' then digest.dgcount.endsubmsg = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'ENDDIGEST:' then digest.dgcount.enddigest = subword(subentry, 2) when upper(subword(subentry, 1, 1)) = 'DELDIGEST:' then if upper(subword(subentry, 2, 1)) = 'YES' then digest.dgcount.deldigest = 1 otherwise nop end digest.dgcount.addrcount = addrs digest.dgcount.namecount = names end end otherwise nop end end call close(cf) return writecfg: procedure expose bbs. system mailconf aminet delaminet amirep amilink mlcount mlist. dgcount digest. checkcc stats delusers thorpath parse arg cfgfile call open(cf, cfgfile, 'W') call writeln(cf, 'SYSTEM') call writeln(cf, 'BBS: '||system) call writeln(cf, 'Conf: '||mailconf) if aminet ~= "AMINET" then call writeln(cf, 'AmiNet: '||aminet) if delaminet = 1 then call writeln(cf, 'DelAmiNet: YES') else call writeln(cf, 'DelAmiNet: NO') if amirep ~= "AMIREP" then call writeln(cf, 'AmiRep: '||amirep) if amilink ~= "AMILINK" then call writeln(cf, 'AmiLink: '||amilink) if checkcc = 1 then call writeln(cf, 'CheckCC: YES') else call writeln(cf, 'CheckCC: NO') if stats = 1 then call writeln(cf, 'Statistics: YES') else call writeln(cf, 'Statistics: NO') if delusers = 1 then call writeln(cf, 'DelUsers: YES') else call writeln(cf, 'DelUsers: NO') call writeln(cf, 'END') call writeln(cf, '') if mlcount > 0 then do n = 1 to mlcount call writeln(cf, 'MAILLIST') call writeln(cf, 'ListName: 'mlist.n.name) if mlist.n.addrcount > 0 then do m = 1 to mlist.n.addrcount call writeln(cf, 'ToAddr: 'mlist.n.toaddr.m) end if mlist.n.namecount > 0 then do m = 1 to mlist.n.namecount call writeln(cf, 'ToName: 'mlist.n.toname.m) end if mlist.n.fromf ~= 'MLIST.'n'.FROMF' then call writeln(cf, 'FromField: 'mlist.n.fromf) call writeln(cf, 'ReplyAddr: 'mlist.n.replyaddr) call writeln(cf, 'END') call writeln(cf, '') end if dgcount > 0 then do n = 1 to dgcount call writeln(cf, 'DIGEST') call writeln(cf, 'DigestName: 'digest.n.name) if digest.n.addrcount > 0 then do m = 1 to digest.n.addrcount call writeln(cf, 'ToAddr: 'digest.n.toaddr.m) end if digest.n.namecount > 0 then do m = 1 to digest.n.namecount call writeln(cf, 'ToName: 'digest.n.toname.m) end call writeln(cf, 'ReplyAddr: 'digest.n.replyaddr) call writeln(cf, 'EndSubMsg: 'digest.n.endsubmsg) if digest.n.enddigest ~= 'DIGEST.'n'.ENDDIGEST' then call writeln(cf, 'EndDigest: 'digest.n.enddigest) if digest.n.deldigest = 1 then call writeln(cf, 'DelDigest: YES') else call writeln(cf, 'DelDigest: NO') call writeln(cf, 'END') call writeln(cf, '') end call close(cf) if cfgfile = 'ENV:Thor/SortMail.cfg' then do address(command) 'Copy "'cfgfile'" "ENVARC:Thor/SortMail.cfg" QUIET' end return cfgsetup: procedure expose thorport bbs. aminet delaminet amirep amilink checkcc mlcount mlist. dgcount digest. stats delusers parse arg cfgfile if bbs.CONFNAME = "" then do address(thorport) REQUESTNOTIFY '"Please enter your Internet E-Mail\nconference before running this script."' '"Ok"' if exists("T:CfgSortMail.tmp") then do address(command) "Delete T:CfgSortMail.tmp QUIET" end exit(0) end address(thorport) REQUESTNOTIFY '"Is the current conference\n('bbs.BBSNAME': 'bbs.CONFNAME')\nyour Internet E-Mail conference?"' '"Yes|No"' if result = 0 then do if exists("T:CfgSortMail.tmp") then do address(command) "Delete T:CfgSortMail.tmp QUIET" end exit(0) end system = bbs.BBSNAME mailconf = bbs.CONFNAME call writecfg(cfgfile) return cfgdigest: procedure expose bbs. system mailconf thorport mlcount mlist. dgcount digest. aminet delaminet amirep amilink checkcc stats delusers thorpath parse arg curmsg, cfgfile CDF_NOT_ON_BBS = '00008000'x /* This conference is not on the bbs. */ if curmsg = 'CURMSG.MSGNR' then do address(thorport) REQUESTNOTIFY '"Digest configuration requires\nan active message."' '"I see"' return end address(bbsread) READBRMESSAGE '"'system'"' '"'mailconf'"' curmsg HEADSTEM head TEXTSTEM text if rc ~= 0 then do address(thorport) REQUESTNOTIFY '"'BBSREAD.LASTERROR'\nMake sure you have a\ndigest message active\nin the main window."' '"_Abort"' return end digestmenu: menulist.1 = 'Add new digest' menulist.2 = 'Edit digest' menulist.3 = 'Delete digest' menulist.4 = '' menulist.5 = 'HELP' menulist.count = 5 address(thorport) REQUESTLIST INSTEM menulist TITLE '"Configure digests"' SIZEGADGET if rc ~= 0 then return choice = result if choice = menulist.1 then signal adddigest if choice = menulist.2 then signal editdigest if choice = menulist.3 then signal deldigest if choice = menulist.5 then call help('CFGDG') signal digestmenu adddigest: REQUESTSTRING TITLE '"Enter a conference name"' BT '"_Ok|_Cancel"' ID '"(DG) "' MAXCHARS 80 if rc ~= 0 then signal digestmenu toconf = result toconf = strip(toconf) do n = 1 to dgcount if digest.n.name = toconf then do REQUESTNOTIFY '"A conference named '''toconf''' is already used\nfor digests. Please choose another name."' '"Ok"' signal adddigest end end dgcount = dgcount + 1 digest.dgcount.name = toconf toconfnr = dgcount digest.toconfnr.addrcount = 0 digest.toconfnr.namecount = 0 digest.toconfnr.addrcount = digest.toconfnr.addrcount + 1 addrs = digest.toconfnr.addrcount digest.toconfnr.toaddr.addrs = head.TOADDR digest.toconfnr.replyaddr = text.REPLYADDR edit = 0 signal editdigestdata editdigest: if dgcount > 0 then do do n = 1 to dgcount; conflist.n = digest.n.name; end conflist.count = dgcount REQUESTLIST INSTEM conflist TITLE '"Select a digest"' SIZEGADGET if rc ~= 0 then signal digestmenu toconf = result do n = 1 to dgcount; if toconf = digest.n.name then toconfnr = n; end end else do REQUESTNOTIFY '"There are no configured digests."' '"_Abort"' signal digestmenu end edit = 1 editdigestdata: if digest.toconfnr.replyaddr = 'TEXT.REPLYADDR' then replyid = head.FROMADDR else replyid = digest.toconfnr.replyaddr REQUESTSTRING TITLE '"Enter a reply-address"' BT '"_Ok|_Cancel"' ID '"'replyid'"' MAXCHARS 40 if rc ~= 0 then do if edit = 0 then dgcount = dgcount - 1 signal digestmenu end digest.toconfnr.replyaddr = result do n = 1 to text.TEXT.COUNT if upper(left(text.text.n, 6)) = 'FROM: ' then break end do n = n+1 to text.TEXT.COUNT if upper(left(text.text.n, 6)) = 'FROM: ' then break end n = n + 5 m = 1 do o = n-30 to n if left(text.text.o, 10) ~= 'TEXT.TEXT.' then do endmsg.m = text.TEXT.o m = m + 1 end end endmsg.count = n if edit = 1 then do REQUESTNOTIFY '"Do you want to edit the ''end of message''\nline? If yes, the 20 last lines from the\ncurrent message will be shown in a listview."' '"Yes|_No"' editeom = result end else editeom = 1 if editeom = 1 then do REQUESTLIST INSTEM endmsg TITLE '"Select ''end of message'' line"' SIZEGADGET if rc ~= 0 then do if edit ~= 1 then dgcount = dgcount - 1 signal digestmenu end digest.toconfnr.endsubmsg = result end REQUESTNOTIFY '"Do you want parsed digests to be deleted?\nWarning: Do NOT enable this until you are\ncertain the digests are parsed properly!"' '"Yes|_No|_Abort"' digest.toconfnr.deldigest = result if digest.toconfnr.deldigest = 0 then do if edit ~= 1 then dgcount = dgcount - 1 signal digestmenu end if digest.toconfnr.deldigest = 2 then digest.toconfnr.deldigest = 0 address(bbsread) CONFIGCONF '"'system'"' '"'toconf'"' SET c2x(CDF_NOT_ON_BBS) if rc ~= 0 then do address(thorport) REQUESTNOTIFY '"'BBSREAD.LASTERROR'"' '"_Abort"' end call writecfg(cfgfile) signal digestmenu deldigest: if dgcount > 0 then do do n = 1 to dgcount; conflist.n = digest.n.name; end conflist.count = dgcount REQUESTLIST INSTEM conflist TITLE '"Select a digest"' SIZEGADGET if rc ~= 0 then signal digestmenu delconf = result REQUESTNOTIFY '"Do you want to remove this entry from\nSortMail''s configuration? (I will only\nstop parsing, not delete the conference)"' "Yes|_No" if result = 0 then signal digestmenu counter = 1 do n = 1 to dgcount if digest.n.name = delconf then n = n + 1 digest.counter.name = digest.n.name if addrcount > 0 then do m = 1 to digest.counter.addrcount digest.counter.toaddr.m = digest.n.toaddr.m end if namecount > 0 then do m = 1 to digest.counter.namecount digest.counter.toname.m = digest.n.toname.m end digest.counter.replyaddr = digest.n.replyaddr digest.counter.endsubmsg = digest.n.endsubmsg digest.counter.enddigest = digest.n.enddigest digest.counter.deldigest = digest.n.deldigest counter = counter + 1 if counter > dgcount then leave end dgcount = dgcount - 1 call writecfg(cfgfile) end else do REQUESTNOTIFY '"There are no configured digests."' '"_Abort"' end signal digestmenu