|
|
1.1 root 1: /*
2: / syshs - host functions
3: */
4:
5: #include "osint.h"
6: #include "spitblks.h"
7:
8: extern WORD gblargc;
9: extern char *gblargv[];
10: extern char *uarg;
11: extern WORD cmdcnt;
12:
13: extern struct icblk ticblk;
14: extern struct scblk tscblk;
15:
16: extern WORD ic_type;
17: extern WORD sc_type;
18:
19: syshs()
20: {
21: WORD retval;
22: register struct icblk *icp = WA (struct icblk *);
23: register struct scblk *scp;
24:
25: /*
26: / If argument one is an integer ...
27: */
28: if ( icp->typ == ic_type )
29: switch( icp->val )
30: {
31:
32: /*
33: / HOST( 0 ) returns the -u command line option argument
34: */
35: case 0:
36: if ( uarg )
37: {
38: cpys2sc( uarg, 0, &tscblk, tscblk.len );
39: SET_XL( &tscblk );
40: return EXIT_3;
41: }
42: else
43: return EXIT_4;
44:
45: /*
46: / HOST( 1, "command" ) executes "command"
47: */
48: case 1:
49: scp = XL( struct scblk * );
50: if ( scp->typ == sc_type )
51: {
52: if ( scp->len != 0 )
53: dosys( scp );
54: return EXIT_4;
55: }
56: else
57: return EXIT_1;
58:
59: /*
60: / HOST( 2, n ) returns command line argument n
61: */
62: case 2:
63: icp = XL( struct icblk * );
64: if ( icp->typ == ic_type )
65: {
66: retval = arg2scb( icp->val, gblargc, gblargv, &tscblk );
67: if ( retval < 0 )
68: return EXIT_6;
69: if ( retval == 0 )
70: return EXIT_1;
71: SET_XL( &tscblk );
72: return EXIT_3;
73: }
74: else
75: return EXIT_1;
76:
77: /*
78: / HOST( 3 ) returns the command count
79: */
80: case 3:
81: if ( cmdcnt )
82: {
83: ticblk.val = cmdcnt;
84: SET_XR( &ticblk );
85: return EXIT_5;
86: }
87: else
88: return EXIT_6;
89:
90: /*
91: / HOST( 4, "env-var" ) returns the value of "env-var" from
92: / the environment.
93: */
94: case 4:
95: scp = XL( struct scblk * );
96: if ( scp->typ == sc_type )
97: {
98: if ( scp->len == 0 )
99: return EXIT_1;
100: if ( rdenv( scp, &tscblk ) < 0 )
101: return EXIT_6;
102: SET_XL( &tscblk );
103: return EXIT_3;
104: }
105: else
106: return EXIT_1;
107:
108: /*
109: / Any other integer value is an error
110: */
111: default:
112: return EXIT_1;
113: }
114:
115:
116: /*
117: / ... else just return the host string
118: */
119: else
120: {
121: gethost( &tscblk, TSCBLK_LENGTH );
122: if ( tscblk.len == 0 )
123: return EXIT_4;
124: SET_XL( &tscblk );
125: return EXIT_3;
126: }
127:
128: /*
129: / Control SHOULD NEVER GET HERE!!
130: */
131: return EXIT_1;
132: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.