File: cmdservscript.c

package info (click to toggle)
xshipwars 1.32-5
  • links: PTS
  • area: main
  • in suites: potato
  • size: 17,176 kB
  • ctags: 6,357
  • sloc: ansic: 157,152; makefile: 226; sh: 75
file content (79 lines) | stat: -rw-r--r-- 1,583 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*




 */

#include "xsw.h"

int CmdServScript(char *arg)
{
	int i, n;
	char filename[PATH_MAX + NAME_MAX];
	char stringa[PATH_MAX + NAME_MAX + 256];
	char *strptr, *strptr2;

	char **argv = NULL;
	int argc = 0;


        /* Map file browser? */
        if((arg == NULL) ? 1 : (arg[0] == '\0'))
        {
	    XSWMapFB(NULL, PRI_FB_LOADOP_SERVER_SCRIPT);
	    return(0);
	}


	strncpy(filename, arg, PATH_MAX + NAME_MAX);
	filename[PATH_MAX + NAME_MAX - 1] = '\0';
        strptr = strchr(filename, ' ');
	if(strptr != NULL) *strptr = '\0';

	strptr2 = PathSubHome(filename);
	if(strptr2 != NULL)
	{
	    strncpy(filename, strptr2, PATH_MAX + NAME_MAX);
	    filename[PATH_MAX + NAME_MAX - 1] = '\0';
	}

	/* Get arguments if any. */
	strptr = strchr(arg, ' ');
	if(strptr != NULL)
	{
	    argv = ExecExplodeCommand(strptr, &argc);
	    if(argc < 0)
		argc = 0;
	}

	/* Set first argument to be that of the filename. */
	argc++;
	argv = (char **)realloc(argv, argc * sizeof(char *));
	if(argv == NULL)
	    argc = 0;
	for(i = argc - 1, n = 0; i > n; i--)
	    argv[i] = argv[i - 1];

	if((argv != NULL) && (argc >= 1))
	    argv[0] = StringCopyAlloc(filename);


	/* Start server script. */
	i = ServScriptStart(filename, argv, argc);
	if(ServScriptIsAllocated(i))
	{
	    sprintf(stringa, "Sending: %s...", filename);
	    MesgAdd(stringa, xsw_color.standard_text);
	}
	else
	{
            sprintf(stringa, "%s: Cannot send.", filename);
            MesgAdd(stringa, xsw_color.standard_text);
	}

	/* Do not deallocate argv, ServScript*() functions will do that */


	return(0);
}