1 diff -u -x CVS -x work -x core -x *.core -x #* -x *~ -x *.orig -x *.rej -I $Id.*$ -I $.+BSD.*$ defs.h.orig defs.h 2 --- defs.h.orig Tue Jun 22 01:43:19 2004 3 +++ defs.h Tue Jun 22 01:55:49 2004 4 @@ -1,8 +1,32 @@ 5 # 6 /* 7 * UNIX shell 8 + * 9 + * S. R. Bourne 10 + * Bell Telephone Laboratories 11 + * 12 */ 13 14 +#include <sys/types.h> 15 +#include <sys/stat.h> 16 +#include <sys/times.h> 17 +#include <sys/wait.h> 18 +#include <dirent.h> 19 +#include <errno.h> 20 +#include <fcntl.h> 21 +#include <setjmp.h> 22 +#include <signal.h> 23 +#include <stdlib.h> 24 +#include <string.h> 25 +#if defined(ULTRIX) 26 +#if (__FreeBSD_version - 0) >= 500005 27 +#include <ulimit.h> 28 +#else 29 +#include "ulimit.h" 30 +#endif 31 +#endif 32 +#include <unistd.h> 33 + 34 /* error exits from various parts of shell */ 35 #define ERROR 1 36 #define SYNBAD 2 37 @@ -51,11 +75,22 @@ 38 #define SYSNULL 16 39 #define SYSREAD 17 40 #define SYSTST 18 41 -#define SYSUMASK 19 42 +#define SYSUMASK 19 43 +#if defined(SYSIII) 44 +#define SYSNEWGRP 20 45 +#endif 46 +#if defined(ULTRIX) 47 +#define SYSULIMIT 21 48 +#endif 49 + 50 +#if defined(SYSIII) 51 +/* builtin table */ 52 +#define TEST 127 53 +#endif 54 55 /* used for input and output of shell */ 56 -#define INIO 10 57 -#define OTIO 11 58 +#define INIO 18 /* V7 - 10 */ 59 +#define OTIO 19 /* V7 - 11 */ 60 61 /*io nodes*/ 62 #define USERIO 10 63 @@ -77,35 +112,145 @@ 64 65 66 /* result type declarations */ 67 -#define alloc malloc 68 -ADDRESS alloc(); 69 -VOID addblok(); 70 -STRING make(); 71 -STRING movstr(); 72 -TREPTR cmd(); 73 -TREPTR makefork(); 74 -NAMPTR lookup(); 75 -VOID setname(); 76 -VOID setargs(); 77 -DOLPTR useargs(); 78 -REAL expr(); 79 -STRING catpath(); 80 -STRING getpath(); 81 -STRING *scan(); 82 -STRING mactrim(); 83 -STRING macro(); 84 -STRING execs(); 85 -VOID await(); 86 -VOID post(); 87 -STRING copyto(); 88 -VOID exname(); 89 -STRING staknam(); 90 -VOID printnam(); 91 -VOID printflg(); 92 -VOID prs(); 93 -VOID prc(); 94 -VOID getenv(); 95 -STRING *setenv(); 96 +/* args.c */ 97 +PROC INT options(INT, STRING *); 98 +PROC VOID setargs(STRING *); 99 +PROC DOLPTR freeargs(DOLPTR); 100 +PROC VOID clearup(VOID); 101 +PROC DOLPTR useargs(VOID); 102 +/* blok.c */ 103 +PROC ADDRESS alloc(POS); 104 +PROC VOID addblok(POS); 105 +#define free free_ 106 +PROC VOID free(BLKPTR); 107 +/* builtin.c */ 108 +#if defined(SYSIII) 109 +PROC VOID builtin(INT, INT, STRING *); 110 +#else /* V7 */ 111 +PROC INT builtin(INT, STRING *); 112 +#endif 113 +PROC VOID bfailed(CSTRING, CSTRING, CSTRING); 114 +/* cmd.c */ 115 +PROC TREPTR makefork(INT, TREPTR); 116 +PROC TREPTR cmd(INT, INT); 117 +/* error.c */ 118 +PROC VOID exitset(VOID); 119 +PROC VOID sigchk(VOID); 120 +PROC VOID failed(CSTRING, CSTRING); 121 +PROC VOID error(CSTRING); 122 +PROC VOID exitsh(INT); 123 +PROC VOID done(VOID); 124 +PROC VOID rmtemp(IOPTR); 125 +/* expand.c */ 126 +PROC INT expand(STRING, INT); 127 +PROC INT gmatch(STRING, STRING); 128 +PROC VOID makearg(ARGPTR); 129 +/* expr.c */ 130 +/* PROC REAL expr(); */ 131 +/* fault.c */ 132 +PROC VOID fault(INT); 133 +PROC VOID stdsigs(VOID); 134 +PROC SIGPTR ignsig(INT); 135 +PROC VOID getsig(INT); 136 +PROC VOID oldsigs(VOID); 137 +PROC VOID clrsig(INT); 138 +PROC VOID chktrap(VOID); 139 +/* io.c */ 140 +PROC VOID initf(UFD); 141 +PROC INT estabf(STRING); 142 +PROC VOID push(FILEPTR); 143 +PROC INT pop(VOID); 144 +PROC VOID chkpipe(INT *); 145 +PROC INT chkopen(CSTRING); 146 +#define rename rename_ 147 +PROC VOID rename(INT, INT); 148 +PROC INT create(STRING); 149 +PROC INT tmpfil(VOID); 150 +PROC VOID copy(IOPTR); 151 +/* macro.c */ 152 +PROC STRING macro(STRING); 153 +PROC VOID subst(INT, INT); 154 +/* main.c */ 155 +PROC VOID chkpr(INT); 156 +PROC VOID settmp(VOID); 157 +/* name.c */ 158 +PROC INT syslook(STRING, SYSTAB); 159 +PROC VOID setlist(ARGPTR, INT); 160 +#if defined(SYSIII) 161 +PROC INT setname(STRING, INT); 162 +#else /* V7 */ 163 +PROC VOID setname(STRING, INT); 164 +#endif 165 +PROC VOID replace(STRING *, CSTRING); 166 +PROC VOID dfault(NAMPTR, CSTRING); 167 +PROC VOID assign(NAMPTR, CSTRING); 168 +PROC INT readvar(STRING *); 169 +PROC VOID assnum(STRING *, INT); 170 +PROC STRING make(CSTRING); 171 +PROC NAMPTR lookup(CSTRING); 172 +PROC VOID namscan(VOID(*)(NAMPTR)); 173 +PROC VOID printnam(NAMPTR); 174 +PROC VOID exname(NAMPTR); 175 +PROC VOID printflg(NAMPTR); 176 +#define getenv getenv_ 177 +#if defined(SYSIII) 178 +PROC INT getenv(VOID); 179 +#else /* V7 */ 180 +PROC VOID getenv(VOID); 181 +#endif 182 +#define setenv setenv_ 183 +PROC STRING *setenv(VOID); 184 +/* print.c */ 185 +PROC VOID newline(VOID); 186 +PROC VOID blank(VOID); 187 +PROC VOID prp(VOID); 188 +PROC VOID prs(CSTRING); 189 +PROC VOID prc(INT); 190 +PROC VOID prt(CLOCK); 191 +PROC VOID prn(INT); 192 +PROC VOID prl(LONG); 193 +PROC VOID itos(INT); 194 +PROC VOID ltos(LONG); 195 +PROC INT stoi(CSTRING); 196 +/* service.c */ 197 +PROC VOID initio(IOPTR); 198 +#if defined(SYSIII) 199 +PROC CSTRING simple(CSTRING); 200 +#endif 201 +PROC CSTRING getpath(CSTRING); 202 +PROC INT pathopen(CSTRING, CSTRING); 203 +PROC CSTRING catpath(CSTRING, CSTRING); 204 +PROC VOID execa(STRING *); 205 +PROC VOID postclr(VOID); 206 +PROC VOID post(INT); 207 +#if defined(SYSIII) 208 +PROC VOID await(INT, INT); 209 +#else /* V7 */ 210 +PROC VOID await(INT); 211 +#endif 212 +PROC VOID trim(STRING); 213 +PROC STRING mactrim(STRING); 214 +PROC STRING *scan(INT); 215 +PROC INT getarg(COMPTR); 216 +/* setbrk.c */ 217 +PROC BYTPTR setbrk(INT); 218 +/* stak.c -> stak.h */ 219 +/* string.c */ 220 +PROC STRING movstr(CSTRING, STRING); 221 +PROC INT any(INT, CSTRING); 222 +PROC INT cf(CSTRING, CSTRING); 223 +PROC INT length(CSTRING); 224 +/* test.c */ 225 +#if defined(SYSIII) 226 +PROC INT test(INT, STRING *); 227 +#endif 228 +/* word.c */ 229 +PROC INT word(VOID); 230 +PROC INT nextc(INT); 231 +PROC INT readc(VOID); 232 +/* xec.c */ 233 +PROC INT execute(TREPTR, INT, INT *, INT *); 234 +PROC VOID execexp(STRING, UFD); 235 236 #define attrib(n,f) (n->namflg |= f) 237 #define round(a,b) (((int)((ADR(a)+b)-1))&~((b)-1)) 238 @@ -115,16 +260,20 @@ 239 #define assert(x) ; 240 241 /* temp files and io */ 242 -UFD output; 243 -INT ioset; 244 -IOPTR iotemp; /* files to be deleted sometime */ 245 -IOPTR iopend; /* documents waiting to be read at NL */ 246 +EXTERN UFD output; 247 +EXTERN INT ioset; 248 +EXTERN IOPTR iotemp; /* files to be deleted sometime */ 249 +EXTERN IOPTR iopend; /* documents waiting to be read at NL */ 250 +#if defined(SYSIII) 251 +EXTERN INT stripflg; 252 +#endif 253 +EXTERN BOOL nosubst; 254 255 /* substitution */ 256 -INT dolc; 257 -STRING *dolv; 258 -DOLPTR argfor; 259 -ARGPTR gchain; 260 +EXTERN INT dolc; 261 +EXTERN STRING *dolv; 262 +EXTERN DOLPTR argfor; 263 +EXTERN ARGPTR gchain; 264 265 /* stack */ 266 #define BLK(x) ((BLKPTR)(x)) 267 @@ -136,68 +285,77 @@ 268 #include "stak.h" 269 270 /* string constants */ 271 -MSG atline; 272 -MSG readmsg; 273 -MSG colon; 274 -MSG minus; 275 -MSG nullstr; 276 -MSG sptbnl; 277 -MSG unexpected; 278 -MSG endoffile; 279 -MSG synmsg; 280 +EXTERN CMSG atline; 281 +EXTERN CMSG readmsg; 282 +EXTERN CMSG colon; 283 +EXTERN CMSG minus; 284 +EXTERN CMSG nullstr; 285 +EXTERN CMSG sptbnl; 286 +EXTERN CMSG unexpected; 287 +EXTERN CMSG endoffile; 288 +EXTERN CMSG endofline; 289 +EXTERN CMSG synmsg; 290 291 /* name tree and words */ 292 -SYSTAB reserved; 293 -INT wdval; 294 -INT wdnum; 295 -ARGPTR wdarg; 296 -INT wdset; 297 -BOOL reserv; 298 +EXTERN SYSTAB reserved; 299 +EXTERN SYSTAB commands; 300 +#if defined(SYSIII) 301 +EXTERN SYSTAB builtins; 302 +#endif 303 +EXTERN INT wdval; 304 +EXTERN INT wdnum; 305 +EXTERN ARGPTR wdarg; 306 +EXTERN INT wdset; 307 +EXTERN BOOL reserv; 308 309 /* prompting */ 310 -MSG stdprompt; 311 -MSG supprompt; 312 -MSG profile; 313 +EXTERN CMSG stdprompt; 314 +EXTERN CMSG supprompt; 315 +EXTERN CMSG profile; 316 +#if defined(SYSIII) 317 +EXTERN CMSG sysprofile; 318 +#endif 319 320 /* built in names */ 321 -NAMNOD fngnod; 322 -NAMNOD ifsnod; 323 -NAMNOD homenod; 324 -NAMNOD mailnod; 325 -NAMNOD pathnod; 326 -NAMNOD ps1nod; 327 -NAMNOD ps2nod; 328 +EXTERN NAMNOD fngnod; 329 +EXTERN NAMNOD ifsnod; 330 +EXTERN NAMNOD homenod; 331 +EXTERN NAMNOD mailnod; 332 +EXTERN NAMNOD pathnod; 333 +EXTERN NAMNOD ps1nod; 334 +EXTERN NAMNOD ps2nod; 335 336 /* special names */ 337 -MSG flagadr; 338 -STRING cmdadr; 339 -STRING exitadr; 340 -STRING dolladr; 341 -STRING pcsadr; 342 -STRING pidadr; 343 +EXTERN MSG flagadr; 344 +EXTERN STRING cmdadr; 345 +EXTERN STRING exitadr; 346 +EXTERN STRING dolladr; 347 +EXTERN STRING pcsadr; 348 +EXTERN STRING pidadr; 349 350 -MSG defpath; 351 +EXTERN CMSG defpath; 352 353 /* names always present */ 354 -MSG mailname; 355 -MSG homename; 356 -MSG pathname; 357 -MSG fngname; 358 -MSG ifsname; 359 -MSG ps1name; 360 -MSG ps2name; 361 +EXTERN CMSG mailname; 362 +EXTERN CMSG homename; 363 +EXTERN CMSG pathname; 364 +EXTERN CMSG fngname; 365 +EXTERN CMSG ifsname; 366 +EXTERN CMSG ps1name; 367 +EXTERN CMSG ps2name; 368 369 /* transput */ 370 -CHAR tmpout[]; 371 -STRING tmpnam; 372 -INT serial; 373 +EXTERN CHAR tmpout[]; 374 +#define tmpnam tmpnam_ 375 +EXTERN STRING tmpnam; 376 +EXTERN INT serial; 377 #define TMPNAM 7 378 -FILE standin; 379 +EXTERN FILEPTR standin; 380 #define input (standin->fdes) 381 #define eof (standin->feof) 382 -INT peekc; 383 -STRING comdiv; 384 -MSG devnull; 385 +EXTERN INT peekc; 386 +EXTERN STRING comdiv; 387 +EXTERN CMSG devnull; 388 389 /* flags */ 390 #define noexec 01 391 @@ -211,77 +369,122 @@ 392 #define rshflg 0400 393 #define waiting 01000 394 #define stdflg 02000 395 +#define STDFLG 's' 396 +#define STDFLGLOC 4 397 #define execpr 04000 398 #define readpr 010000 399 #define keyflg 020000 400 -INT flags; 401 +EXTERN INT flags; 402 +#if defined(SYSIII) 403 +EXTERN BOOL rwait; 404 +EXTERN BOOL wasintr; /* used to tell if break or delete is hit 405 + while executing a wait */ 406 +#endif 407 408 /* error exits from various parts of shell */ 409 -#include <setjmp.h> 410 -jmp_buf subshell; 411 -jmp_buf errshell; 412 +EXTERN jmp_buf subshell; 413 +EXTERN jmp_buf errshell; 414 +#if defined(RENO) 415 +EXTERN jmp_buf INTbuf; 416 +#endif 417 418 /* fault handling */ 419 #include "brkincr.h" 420 -POS brkincr; 421 +EXTERN INT brkincr; 422 423 #define MINTRAP 0 424 -#define MAXTRAP 17 425 +#define MAXTRAP 33 426 427 -#define INTR 2 428 -#define QUIT 3 429 -#define MEMF 11 430 -#define ALARM 14 431 -#define KILL 15 432 +#define INTR SIGINT 433 +#define QUIT SIGQUIT 434 +#define MEMF SIGSEGV 435 +#define ALARM SIGALRM 436 +#define KILL SIGTERM 437 #define TRAPSET 2 438 #define SIGSET 4 439 #define SIGMOD 8 440 - 441 -VOID fault(); 442 -BOOL trapnote; 443 -STRING trapcom[]; 444 -BOOL trapflg[]; 445 +#if defined(SYSIII) 446 +#define SIGCAUGHT 16 447 +#endif 448 + 449 +EXTERN BOOL trapnote; 450 +EXTERN STRING trapcom[]; 451 +EXTERN BOOL trapflg[]; 452 +#if defined(RENO) 453 +EXTERN BOOL trapjmp[]; 454 +#endif 455 456 /* name tree and words */ 457 -STRING *environ; 458 -CHAR numbuf[]; 459 -MSG export; 460 -MSG readonly; 461 +EXTERN STRING *environ; 462 +EXTERN CHAR numbuf[]; 463 +EXTERN CMSG export; 464 +EXTERN CMSG readonly; 465 466 /* execflgs */ 467 -INT exitval; 468 -BOOL execbrk; 469 -INT loopcnt; 470 -INT breakcnt; 471 +EXTERN INT exitval; 472 +EXTERN BOOL execbrk; 473 +EXTERN INT loopcnt; 474 +EXTERN INT breakcnt; 475 476 /* messages */ 477 -MSG mailmsg; 478 -MSG coredump; 479 -MSG badopt; 480 -MSG badparam; 481 -MSG badsub; 482 -MSG nospace; 483 -MSG notfound; 484 -MSG badtrap; 485 -MSG baddir; 486 -MSG badshift; 487 -MSG illegal; 488 -MSG restricted; 489 -MSG execpmsg; 490 -MSG notid; 491 -MSG wtfailed; 492 -MSG badcreate; 493 -MSG piperr; 494 -MSG badopen; 495 -MSG badnum; 496 -MSG arglist; 497 -MSG txtbsy; 498 -MSG toobig; 499 -MSG badexec; 500 -MSG notfound; 501 -MSG badfile; 502 +EXTERN CMSG mailmsg; 503 +EXTERN CMSG coredump; 504 +EXTERN CMSG badopt; 505 +EXTERN CMSG badparam; 506 +#if defined(SYSIII) 507 +EXTERN CMSG unset; 508 +#endif 509 +EXTERN CMSG badsub; 510 +EXTERN CMSG nospace; 511 +EXTERN CMSG badtrap; 512 +EXTERN CMSG memfault; 513 +EXTERN CMSG baddir; 514 +EXTERN CMSG badshift; 515 +EXTERN CMSG illegal; 516 +EXTERN CMSG restricted; 517 +EXTERN CMSG execpmsg; 518 +EXTERN CMSG notid; 519 +EXTERN CMSG badulimit; 520 +EXTERN CMSG wtfailed; 521 +EXTERN CMSG badcreate; 522 +#if defined(SYSIII) 523 +EXTERN CMSG nofork; 524 +EXTERN CMSG noswap; 525 +#endif 526 +EXTERN CMSG piperr; 527 +EXTERN CMSG badopen; 528 +EXTERN CMSG badnum; 529 +EXTERN CMSG arglist; 530 +#if defined(SYSIII) 531 +EXTERN CMSG argcount; 532 +#endif 533 +EXTERN CMSG txtbsy; 534 +EXTERN CMSG toobig; 535 +EXTERN CMSG badexec; 536 +EXTERN CMSG notfound; 537 +EXTERN CMSG badfile; 538 +EXTERN CSTRING sysmsg[]; 539 +#if defined(RENO) 540 +EXTERN INT num_sysmsg; 541 +#endif 542 + 543 +#if defined(SYSIII) 544 +/* 'builtin' error messages */ 545 +EXTERN CMSG btest; 546 +EXTERN CMSG badop; 547 +#endif 548 + 549 +#if defined(SYSIII) 550 +/* fork constant */ 551 +#define FORKLIM 32 552 +#endif 553 + 554 +#if defined(SYSIII) || defined(RENO) 555 +/* comment delimeter */ 556 +#define COMCHAR '#' 557 +#endif 558 559 -address end[]; 560 +EXTERN address end[]; 561 562 #include "ctype.h" 563 564