Ticket #170: DSS_test.c

File DSS_test.c, 1.4 KB (added by guest, 17 years ago)

test program

Line 
1#include <os2safe.h>
2#define INCL_DOS
3 #define INCL_DOSERRORS
4 #include <os2.h>
5
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9
10 int main(VOID) {
11 STARTDATA sd = {0};
12 PSZ exePath = "CMD.EXE";
13 PSZ args = "/K";
14 APIRET rc = NO_ERROR; /* Return code */
15 PID pid = 0; /* PID returned */
16 ULONG ulSessID = 0; /* Session ID returned */
17 PCHAR env, pchEnvLast;
18 LONG lEnvSize, lNewEnvSize;
19 PPIB ppib;
20
21 DosGetInfoBlocks( NULL, &ppib );
22 pchEnvLast = ppib->pib_pchenv;
23 while( *pchEnvLast )
24 pchEnvLast += strlen( pchEnvLast ) + 1;
25
26 lEnvSize = pchEnvLast - ppib->pib_pchenv;
27 lNewEnvSize = lEnvSize + 100;
28 env = malloc( lNewEnvSize );
29 memset( env, 0, lNewEnvSize );
30 memcpy( env, ppib->pib_pchenv, lEnvSize );
31 strcpy( env + lEnvSize, "PETER=Weilbacher");
32
33 sd.Length = 60; // fill everything
34 sd.PgmName = exePath; // the executable
35 sd.PgmInputs = args; // the arguments (without the program name)
36 sd.Environment = env;
37
38 rc = DosStartSession(&sd, &ulSessID, &pid); /* Start the session */
39
40 free( env );
41
42 if (rc != NO_ERROR) {
43 printf ("DosStartSession error : return code = %u\n", rc);
44 return 1;
45 }
46
47 return NO_ERROR;
48 }