File:  [Synchronet] / sbbs / sbbs2 / execmsg.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:37:52 2018 UTC (8 years, 3 months ago) by root
Branches: digitaldynamics, MAIN
CVS tags: v3_00c, v2_30b, HEAD
2.30b OS/2

#line 1 "EXECMSG.C"

/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */

#include "sbbs.h"
#include "cmdshell.h"

int execmsg(csi_t *csi)
{
	uchar	str[256],tmp2[128],*path,ch,*p;
	int 	s,file,x,y;
	long	i,j,k;		// Changes from ints - 03/25/96
	long	l;
	stats_t stats;
	node_t	node;
	file_t	f;
	time_t	t;
    csi_t   bin;


switch(*(csi->ip++)) {

	case CS_MSG_SELECT_AREA:
		csi->logic=LOGIC_FALSE;
		if(!usrgrps) return(0);
		while(online) {
			j=0;
			if(usrgrps>1) {
				sprintf(str,"%sMENU\\GRPS.*",text_dir);
				if(fexist(str))
					menu("GRPS");
				else {
					bputs(text[CfgGrpLstHdr]);
					for(i=0;i<usrgrps && !msgabort();i++) {
						if(i==curgrp)
							outchar('*');
						else outchar(SP);
						if(i<9) outchar(SP);
						if(i<99) outchar(SP);
						bprintf(text[CfgGrpLstFmt]
							,i+1,grp[usrgrp[i]]->lname); } }
				sprintf(str,text[JoinWhichGrp],curgrp+1);
				mnemonics(str);
				j=getnum(usrgrps);
				if((int)j==-1)
					return(0);
				if(!j)
					j=curgrp;
				else
					j--; }
			sprintf(str,"%sMENU\\SUBS%u.*",text_dir,usrgrp[j]+1);
			if(fexist(str)) {
				sprintf(str,"SUBS%u",usrgrp[j]+1);
				menu(str); }
			else {
				CLS;
				bprintf(text[SubLstHdr],grp[usrgrp[j]]->lname);
				for(i=0;i<usrsubs[j] && !msgabort();i++) {
					if(i==cursub[j]) outchar('*');
					else outchar(SP);
					sprintf(str,text[SubLstFmt],i+1
						,sub[usrsub[j][i]]->lname,nulstr
						,getposts(usrsub[j][i]));
					if(i<9) outchar(SP);
					if(i<99) outchar(SP);
					bputs(str); } }
			sprintf(str,text[JoinWhichSub],cursub[j]+1);
			mnemonics(str);
			i=getnum(usrsubs[j]);
			if((int)i==-1) {
				if(usrgrps==1)
					return(0);
				continue; }
			if(!i)
				i=cursub[j];
			else
				i--;
			curgrp=j;
			cursub[curgrp]=i;
			csi->logic=LOGIC_TRUE;
			return(0); }
		return(0);

	case CS_MSG_GET_SUB_NUM:

		if(useron.misc&COLDKEYS) {
			i=atoi(csi->str);
			if(i && usrgrps && i<=usrsubs[curgrp])
				cursub[curgrp]=i-1;
			return(0); }

		ch=getkey(K_UPPER);
		outchar(ch);
		if(usrgrps && (ch&0xf)*10<=usrsubs[curgrp] && (ch&0xf)) {
			i=(ch&0xf)*10;
			ch=getkey(K_UPPER);
			if(!isdigit(ch) && ch!=CR) {
				ungetkey(ch);
				cursub[curgrp]=(i/10)-1;
				return(0); }
			outchar(ch);
			if(ch==CR) {
				cursub[curgrp]=(i/10)-1;
				return(0); }
			logch(ch,0);
			i+=ch&0xf;
			if(i*10<=usrsubs[curgrp]) { 	/* 100+ subs */
				i*=10;
				ch=getkey(K_UPPER);
				if(!isdigit(ch) && ch!=CR) {
					ungetkey(ch);
					cursub[curgrp]=(i/10)-1;
					return(0); }
				outchar(ch);
				if(ch==CR) {
					cursub[curgrp]=(i/10)-1;
					return(0); }
				logch(ch,0);
				i+=ch&0xf; }
			if(i<=usrsubs[curgrp])
				cursub[curgrp]=i-1;
			return(0); }
		if((ch&0xf)<=usrsubs[curgrp] && (ch&0xf) && usrgrps)
			cursub[curgrp]=(ch&0xf)-1;
		return(0);

	case CS_MSG_GET_GRP_NUM:

		if(useron.misc&COLDKEYS) {
			i=atoi(csi->str);
			if(i && i<=usrgrps)
				curgrp=i-1;
			return(0); }

		ch=getkey(K_UPPER);
		outchar(ch);
		if((ch&0xf)*10<=usrgrps && (ch&0xf)) {
			i=(ch&0xf)*10;
			ch=getkey(K_UPPER);
			if(!isdigit(ch) && ch!=CR) {
				ungetkey(ch);
				curgrp=(i/10)-1;
				return(0); }
			outchar(ch);
			if(ch==CR) {
				curgrp=(i/10)-1;
				return(0); }
			logch(ch,0);
			i+=ch&0xf;
			if(i<=usrgrps)
				curgrp=i-1;
			return(0); }
		if((ch&0xf)<=usrgrps && (ch&0xf))
			curgrp=(ch&0xf)-1;
		return(0);

	case CS_MSG_SET_GROUP:
		csi->logic=LOGIC_TRUE;
		for(i=0;i<usrgrps;i++)
			if(!stricmp(grp[usrgrp[i]]->sname,csi->str))
				break;
		if(i<usrgrps)
			curgrp=i;
		else
			csi->logic=LOGIC_FALSE;
		return(0);

	case CS_MSG_SHOW_GROUPS:
		if(!usrgrps) return(0);
		sprintf(str,"%sMENU\\GRPS.*",text_dir);
		if(fexist(str)) {
			menu("GRPS");
			return(0); }
		bputs(text[GrpLstHdr]);
		for(i=0;i<usrgrps && !msgabort();i++) {
			if(i==curgrp)
				outchar('*');
			else outchar(SP);
			if(i<9) outchar(SP);
			bprintf(text[GrpLstFmt],i+1
				,grp[usrgrp[i]]->lname,nulstr,usrsubs[i]); }
		return(0);

	case CS_MSG_SHOW_SUBBOARDS:
		if(!usrgrps) return(0);
		sprintf(str,"%sMENU\\SUBS%u.*",text_dir,usrgrp[curgrp]+1);
		if(fexist(str)) {
			sprintf(str,"SUBS%u",usrgrp[curgrp]+1);
			menu(str);
			return(0); }
		CRLF;
		bprintf(text[SubLstHdr],grp[usrgrp[curgrp]]->lname);
		for(i=0;i<usrsubs[curgrp] && !msgabort();i++) {
			if(i==cursub[curgrp]) outchar('*');
			else outchar(SP);
			sprintf(str,text[SubLstFmt],i+1
				,sub[usrsub[curgrp][i]]->lname,nulstr
				,getposts(usrsub[curgrp][i]));
			if(i<9) outchar(SP);
			if(i<99) outchar(SP);
			bputs(str); }
		return(0);

	case CS_MSG_GROUP_UP:
		curgrp++;
		if(curgrp>=usrgrps)
			curgrp=0;
		return(0);
	case CS_MSG_GROUP_DOWN:
		if(!curgrp)
			curgrp=usrgrps-1;
		else curgrp--;
		return(0);
	case CS_MSG_SUBBOARD_UP:
		if(!usrgrps) return(0);
		cursub[curgrp]++;
		if(cursub[curgrp]>=usrsubs[curgrp])
			cursub[curgrp]=0;
		return(0);
	case CS_MSG_SUBBOARD_DOWN:
		if(!usrgrps) return(0);
		if(!cursub[curgrp])
			cursub[curgrp]=usrsubs[curgrp]-1;
		else cursub[curgrp]--;
		return(0);
	case CS_MSG_SET_AREA:
		csi->logic=LOGIC_TRUE;
		for(i=0;i<usrgrps;i++)
			for(j=0;j<usrsubs[i];j++)
				if(!stricmp(csi->str,sub[usrsub[i][j]]->code)) {
					curgrp=i;
					cursub[i]=j;
					return(0); }
		csi->logic=LOGIC_FALSE;
		return(0);
	case CS_MSG_READ:
		if(!usrgrps) return(0);
		csi->logic=scanposts(usrsub[curgrp][cursub[curgrp]],0,nulstr);
		return(0);
	case CS_MSG_POST:
		if(!usrgrps) return(0);
		csi->logic=LOGIC_FALSE;
		if(!chk_ar(sub[usrsub[curgrp][cursub[curgrp]]]->post_ar,useron)) {
			bputs(text[CantPostOnSub]);
			return(0); }
		csi->logic=!postmsg(usrsub[curgrp][cursub[curgrp]],0,0);
		return(0);
	case CS_MSG_QWK:
		qwk_sec();
		return(0);
	case CS_MSG_PTRS_CFG:
		new_scan_ptr_cfg();
		return(0);
	case CS_MSG_PTRS_REINIT:
		for(i=0;i<total_subs;i++) {
			sub[i]->ptr=sub_ptr[i];
			sub[i]->last=sub_last[i]; }
		bputs(text[MsgPtrsInitialized]);
		return(0);
	case CS_MSG_NEW_SCAN_CFG:
		new_scan_cfg(SUB_NSCAN);
		return(0);
	case CS_MSG_NEW_SCAN:
		scansubs(SCAN_NEW);
		return(0);
	case CS_MSG_NEW_SCAN_SUB:
		csi->logic=scanposts(usrsub[curgrp][cursub[curgrp]],SCAN_NEW,nulstr);
		return(0);
	case CS_MSG_NEW_SCAN_ALL:
		scanallsubs(SCAN_NEW);
		return(0);
	case CS_MSG_CONT_SCAN:
		scansubs(SCAN_NEW|SCAN_CONST);
		return(0);
	case CS_MSG_CONT_SCAN_ALL:
		scanallsubs(SCAN_NEW|SCAN_CONST);
		return(0);
	case CS_MSG_BROWSE_SCAN:
		scansubs(SCAN_NEW|SCAN_BACK);
		return(0);
	case CS_MSG_BROWSE_SCAN_ALL:
		scanallsubs(SCAN_BACK|SCAN_NEW);
		return(0);
	case CS_MSG_FIND_TEXT:
		scansubs(SCAN_FIND);
		return(0);
	case CS_MSG_FIND_TEXT_ALL:
		scanallsubs(SCAN_FIND);
		return(0);
	case CS_MSG_YOUR_SCAN_CFG:
		new_scan_cfg(SUB_SSCAN);
		return(0);
	case CS_MSG_YOUR_SCAN:
		scansubs(SCAN_TOYOU);
		return(0);
	case CS_MSG_YOUR_SCAN_ALL:
		scanallsubs(SCAN_TOYOU);
		return(0); }
errormsg(WHERE,ERR_CHK,"shell function",*(csi->ip-1));
return(0);
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.