Skip to content
Snippets Groups Projects
Select Git revision
  • dd_msg_reader_list_personal_email_in_reverse_choose_msg_fix
  • dailybuild_linux-x64
  • dailybuild_win32
  • master default protected
  • sqlite
  • rip_abstraction
  • dailybuild_macos-armv8
  • dd_file_lister_filanem_in_desc_color
  • mode7
  • dd_msg_reader_are_you_there_warning_improvement
  • c23-playing
  • syncterm-1.3
  • syncterm-1.2
  • test-build
  • hide_remote_connection_with_telgate
  • 638-can-t-control-c-during-a-file-search
  • add_body_to_pager_email
  • mingw32-build
  • cryptlib-3.4.7
  • ree/mastermind
  • sbbs320d
  • syncterm-1.6
  • syncterm-1.5
  • syncterm-1.4
  • sbbs320b
  • syncterm-1.3
  • syncterm-1.2
  • syncterm-1.2rc6
  • syncterm-1.2rc5
  • push
  • syncterm-1.2rc4
  • syncterm-1.2rc2
  • syncterm-1.2rc1
  • sbbs319b
  • sbbs318b
  • goodbuild_linux-x64_Sep-01-2020
  • goodbuild_win32_Sep-01-2020
  • goodbuild_linux-x64_Aug-31-2020
  • goodbuild_win32_Aug-31-2020
  • goodbuild_win32_Aug-30-2020
40 results

execmisc.cpp

Blame
  • execmisc.cpp 40.93 KiB
    /* Synchronet miscellaneous command shell/module routines */
    
    /****************************************************************************
     * @format.tab-size 4		(Plain Text/Source Code File Header)			*
     * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
     *																			*
     * Copyright Rob Swindell - http://www.synchro.net/copyright.html			*
     *																			*
     * This program is free software; you can redistribute it and/or			*
     * modify it under the terms of the GNU General Public License				*
     * as published by the Free Software Foundation; either version 2			*
     * of the License, or (at your option) any later version.					*
     * See the GNU General Public License for more details: gpl.txt or			*
     * http://www.fsf.org/copyleft/gpl.html										*
     *																			*
     * For Synchronet coding style and modification guidelines, see				*
     * http://www.synchro.net/source.html										*
     *																			*
     * Note: If this box doesn't appear square, then you need to fix your tabs.	*
     ****************************************************************************/
    
    #include "sbbs.h"
    #include "cmdshell.h"
    #include "xpprintf.h"
    
    static char* format_string(sbbs_t* sbbs, csi_t* csi)
    {
    	char*		fmt;
    	void*		vp;
    	int32_t*	lp;
    	unsigned	i;
    	unsigned	args;
    
    	fmt=xp_asprintf_start((char*)csi->ip);
    	while(*(csi->ip++));	/* Find '\0' terminator */
    	args=*(csi->ip++); 		/* total args */
    	for(i=0;i<args;i++) {
    		if((vp=sbbs->getstrvar(csi,*(int32_t *)csi->ip))==NULL) {
    			if((lp=sbbs->getintvar(csi,*(int32_t *)csi->ip))==NULL)
    				fmt=xp_asprintf_next(fmt,XP_PRINTF_CONVERT|XP_PRINTF_TYPE_INT,0);
    			else
    				fmt=xp_asprintf_next(fmt,XP_PRINTF_CONVERT|XP_PRINTF_TYPE_INT,*lp); 
    		}
    		else
    			fmt=xp_asprintf_next(fmt,XP_PRINTF_CONVERT|XP_PRINTF_TYPE_CHARP,*(char **)vp);
    		csi->ip+=4; 
    	}
    	return xp_asprintf_end(fmt, NULL);
    }
    
    int sbbs_t::exec_misc(csi_t* csi, const char *path)
    {
    	char	str[512],tmp[512],buf[1025],ch,op,*p,**pp,**pp1,**pp2;
    	ushort	w;
    	uint 	i=0,j;
    	long	l;
    	int32_t	*lp=NULL,*lp1=NULL,*lp2=NULL;
    	void	*vp;
    	struct	dirent *de;
        struct  tm tm;
    	FILE*	fp;
    	DIR*	dp;
    
    	switch(*(csi->ip++)) {
    		case CS_VAR_INSTRUCTION:
    			switch(*(csi->ip++)) {	/* sub-op-code stored as next byte */
    				case PRINT_VAR:
    					pp=getstrvar(csi,*(int32_t *)csi->ip);
    					if(!pp || !*pp) {
    						lp=getintvar(csi,*(int32_t *)csi->ip);