home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
k95source.tar.gz
/
k95source.tar
/
iksdc.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-04-21
|
4KB
|
139 lines
/***************************/
/* OS/2 API support */
/***************************/
#define OS2
#define INCL_DOS
#define INCL_VIO
#define INCL_BASE
#include <os2.h>
#undef COMMENT
/***************************/
/* Microsoft C runtime */
/***************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <process.h>
#include <signal.h>
#include <errno.h>
#include <io.h>
#include <direct.h>
#include <memory.h>
#include <sys/types.h>
#ifdef __IBMC__
#define off_t _dummy_off_t /* avoid warning */
#include <types.h>
#undef off_t
#else
#include <types.h>
#endif
#include <netinet/in.h>
#include <netdb.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
void _System addsockettolist(int socket);
void
cleanupsocket( int socket )
{
char * msg = "Unable to start Internet Kermit Service for OS/2\r\nClosing socket.\r\n\n";
sock_init();
addsockettolist( socket );
send(socket, msg, strlen(msg), 0);
soclose( socket );
}
int
main(int argc, char *argv[], char * envp[])
{
int socket=0;
int rc=0;
int i;
char * script=NULL;
char * p=NULL;
char cmdline[1024]="";
char loadpath[257]="";
RESULTCODES resultcodes;
STARTDATA sdata;
ULONG sessionid;
PID pid;
char achObjBuf[256] = {0}; /* Error data if DosStart fails */
#ifdef DEBUG
for ( i=0;i<argc;i++ )
printf("arg%d=%s\n",i,argv[i]);
#endif
if (argc < 2) {
printf("Usage: %s [<IKS command line parameters>] <socket>\n",
argv[0]);
if ( argc == 2 ) {
socket = atoi(argv[1]); /* required last parameter = socket */
cleanupsocket(socket);
}
DosExit(1,1);
} /* endif */
socket = atoi(argv[argc-1]); /* required last parameter = socket */
sprintf(cmdline, "-N X -# 132 -A %d",
socket, script);
for (i=1;i<argc-1;i++) { /* append additional parameters */
strcat(cmdline," ");
strcat(cmdline,argv[i]);
}
strcpy(loadpath, argv[0]);
p = loadpath + strlen(loadpath);
while ( *p != '\\' && *p != '/' )
p--;
*p = '\0';
printf("changing directory to %s\n",loadpath);
chdir(loadpath);
strcat(loadpath,"\\k2.exe");
printf("%s %s\n",loadpath,cmdline);
sdata.Length = sizeof(STARTDATA);
sdata.Related = SSF_RELATED_INDEPENDENT; /* start a Child for PID */
/* not SSF_RELATED_CHILD */
sdata.FgBg = SSF_FGBG_BACK; /* start session in foreground */
sdata.TraceOpt = SSF_TRACEOPT_NONE; /* No trace */
/* Start an OS/2 session using "CMD.EXE /K" */
sdata.PgmTitle = NULL;
sdata.PgmName = loadpath;
sdata.PgmInputs = cmdline; /* Keep session up */
sdata.TermQ = 0; /* No termination queue */
sdata.Environment = 0; /* No environment string */
sdata.InheritOpt = SSF_INHERTOPT_PARENT; /* Inherit parent's environ. */
sdata.SessionType = SSF_TYPE_WINDOWABLEVIO; /* Windowed VIO session */
sdata.IconFile = 0; /* No icon association */
sdata.PgmHandle = 0;
/* Open the session VISIBLE and MAXIMIZED */
sdata.PgmControl = SSF_CONTROL_VISIBLE | SSF_CONTROL_MINIMIZE;
sdata.InitXPos = 30; /* Initial window coordinates */
sdata.InitYPos = 40;
sdata.InitXSize = 200; /* Initial window size */
sdata.InitYSize = 140;
sdata.Reserved = 0;
sdata.ObjectBuffer = achObjBuf; /* Contains info if DosExecPgm fails */
sdata.ObjectBuffLen = (ULONG) sizeof(achObjBuf);
rc = DosStartSession(&sdata,&sessionid,&pid);
#ifdef DEBUG
printf("rc = %d :: %s\n",rc,achObjBuf);
#endif
if ( rc && rc != 457 ) {
printf("ERROR: Unable to start K2.EXE -- closing socket %d\n\n",socket);
cleanupsocket(socket);
}
return(rc);
}