xref: /onnv-gate/usr/src/lib/libcmd/i386/include/ast/cmd.h (revision 12068:08a39a083754)
14887Schin 
24887Schin /* : : generated by proto : : */
34887Schin /***********************************************************************
44887Schin *                                                                      *
54887Schin *               This software is part of the ast package               *
6*12068SRoger.Faulkner@Oracle.COM *          Copyright (c) 1992-2010 AT&T Intellectual Property          *
74887Schin *                      and is licensed under the                       *
84887Schin *                  Common Public License, Version 1.0                  *
98462SApril.Chin@Sun.COM *                    by AT&T Intellectual Property                     *
104887Schin *                                                                      *
114887Schin *                A copy of the License is available at                 *
124887Schin *            http://www.opensource.org/licenses/cpl1.0.txt             *
134887Schin *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
144887Schin *                                                                      *
154887Schin *              Information and Software Systems Research               *
164887Schin *                            AT&T Research                             *
174887Schin *                           Florham Park NJ                            *
184887Schin *                                                                      *
194887Schin *                 Glenn Fowler <gsf@research.att.com>                  *
204887Schin *                  David Korn <dgk@research.att.com>                   *
214887Schin *                                                                      *
224887Schin ***********************************************************************/
234887Schin 
244887Schin /*
254887Schin  * AT&T Research
264887Schin  *
274887Schin  * builtin cmd definitions
284887Schin  */
294887Schin 
304887Schin #ifndef _CMD_H
314887Schin #if !defined(__PROTO__)
324887Schin #include <prototyped.h>
334887Schin #endif
344887Schin #if !defined(__LINKAGE__)
354887Schin #define __LINKAGE__		/* 2004-08-11 transition */
364887Schin #endif
374887Schin 
384887Schin #define _CMD_H
394887Schin 
404887Schin #include <ast.h>
414887Schin #include <error.h>
424887Schin #include <stak.h>
438462SApril.Chin@Sun.COM #include <shcmd.h>
444887Schin 
454887Schin #define cmdinit			_cmd_init
464887Schin 
4710898Sroland.mainz@nrubsig.org #define ERROR_CALLBACK		ERROR_SET
4810898Sroland.mainz@nrubsig.org 
494887Schin #if _BLD_cmd && defined(__EXPORT__)
504887Schin #undef __MANGLE__
514887Schin #define __MANGLE__ __LINKAGE__		__EXPORT__
524887Schin #endif
534887Schin 
544887Schin #include <cmdext.h>
554887Schin 
564887Schin #undef __MANGLE__
574887Schin #define __MANGLE__ __LINKAGE__
584887Schin 
594887Schin #if defined(CMD_BUILTIN) && !defined(CMD_STANDALONE)
604887Schin #define CMD_STANDALONE	CMD_BUILTIN
614887Schin #endif
624887Schin 
634887Schin #ifdef CMD_STANDALONE
644887Schin 
658462SApril.Chin@Sun.COM #define CMD_CONTEXT(c)		((Shbltin_t*)0)
668462SApril.Chin@Sun.COM 
674887Schin #if CMD_DYNAMIC
684887Schin 
694887Schin #include <dlldefs.h>
704887Schin 
714887Schin #else
724887Schin 
734887Schin extern __MANGLE__ int CMD_STANDALONE __PROTO__((int, char**, __V_*));
744887Schin 
754887Schin #endif
764887Schin 
774887Schin #ifndef CMD_BUILTIN
784887Schin 
794887Schin /*
804887Schin  * command initialization
814887Schin  */
824887Schin 
834887Schin static int
__OTORP__(int argc;register char ** argv;__V_ * context;const char * catalog;int flags;)844887Schin cmdinit __PARAM__((int argc, register char** argv, __V_* context, const char* catalog, int flags), (argc, argv, context, catalog, flags)) __OTORP__(int argc; register char** argv; __V_* context; const char* catalog; int flags;){
854887Schin 	register char*	cp;
864887Schin 	register char*	pp;
874887Schin 
884887Schin 	if (cp = strrchr(argv[0], '/'))
894887Schin 		cp++;
904887Schin 	else
914887Schin 		cp = argv[0];
924887Schin 	if (pp = strrchr(cp, '_'))
934887Schin 		cp = pp + 1;
944887Schin 	error_info.id = cp;
954887Schin 	if (!error_info.catalog)
964887Schin 		error_info.catalog = (char*)catalog;
974887Schin 	opt_info.index = 0;
984887Schin 	if (context)
9910898Sroland.mainz@nrubsig.org 		error_info.flags |= flags & ~(ERROR_CALLBACK|ERROR_NOTIFY);
1004887Schin 	return 0;
1014887Schin }
1024887Schin 
1034887Schin #endif
1044887Schin 
1054887Schin int
__OTORP__(int argc;char ** argv;)1064887Schin main __PARAM__((int argc, char** argv), (argc, argv)) __OTORP__(int argc; char** argv;){
1074887Schin #if CMD_DYNAMIC
1084887Schin 	register char*	s;
1094887Schin 	register char*	t;
1104887Schin 	__V_*		dll;
1118462SApril.Chin@Sun.COM 	Shbltin_f	fun;
1124887Schin 	char		buf[64];
1134887Schin 
1144887Schin 	if (s = strrchr(argv[0], '/'))
1154887Schin 		s++;
1164887Schin 	else if (!(s = argv[0]))
1174887Schin 		return 127;
1184887Schin 	if ((t = strrchr(s, '_')) && *++t)
1194887Schin 		s = t;
1204887Schin 	buf[0] = '_';
1214887Schin 	buf[1] = 'b';
1224887Schin 	buf[2] = '_';
1234887Schin 	strncpy(buf + 3, s, sizeof(buf) - 4);
1244887Schin 	buf[sizeof(buf) - 1] = 0;
1254887Schin 	if (t = strchr(buf, '.'))
1264887Schin 		*t = 0;
1274887Schin 	for (;;)
1284887Schin 	{
1294887Schin 		if (dll = dlopen(NiL, RTLD_LAZY))
1304887Schin 		{
1318462SApril.Chin@Sun.COM 			if (fun = (Shbltin_f)dlsym(dll, buf + 1))
1324887Schin 				break;
1338462SApril.Chin@Sun.COM 			if (fun = (Shbltin_f)dlsym(dll, buf))
1344887Schin 				break;
1354887Schin 		}
136*12068SRoger.Faulkner@Oracle.COM 		if (dll = dllplug(NiL, "cmd", NiL, RTLD_LAZY, NiL, 0))
1374887Schin 		{
1388462SApril.Chin@Sun.COM 			if (fun = (Shbltin_f)dlsym(dll, buf + 1))
1394887Schin 				break;
1408462SApril.Chin@Sun.COM 			if (fun = (Shbltin_f)dlsym(dll, buf))
1414887Schin 				break;
1424887Schin 		}
1434887Schin 		return 127;
1444887Schin 	}
1454887Schin 	return (*fun)(argc, argv, NiL);
1464887Schin #else
1474887Schin 	return CMD_STANDALONE(argc, argv, NiL);
1484887Schin #endif
1494887Schin }
1504887Schin 
1514887Schin #else
1524887Schin 
1534887Schin #undef	cmdinit
1548462SApril.Chin@Sun.COM #ifdef _MSC_VER
1558462SApril.Chin@Sun.COM #define CMD_CONTEXT(p)		((Shbltin_t*)(p))
1564887Schin #define cmdinit(a,b,c,d,e)	do{if(_cmd_init(a,b,c,d,e))return -1;}while(0)
1578462SApril.Chin@Sun.COM #else
1588462SApril.Chin@Sun.COM #define CMD_CONTEXT(p)		(((p)&&((Shbltin_t*)(p))->version>=20071012&&((Shbltin_t*)(p))->version<20350101)?((Shbltin_t*)(p)):0)
1598462SApril.Chin@Sun.COM #define cmdinit(a,b,c,d,e)	do{if((c)&&!CMD_CONTEXT(c))c=0;if(_cmd_init(a,b,c,d,e))return -1;}while(0)
1604887Schin #endif
1614887Schin 
1624887Schin #if _BLD_cmd && defined(__EXPORT__)
1634887Schin #undef __MANGLE__
1644887Schin #define __MANGLE__ __LINKAGE__ __EXPORT__
1654887Schin #endif
1664887Schin 
1674887Schin extern __MANGLE__ int	_cmd_init __PROTO__((int, char**, __V_*, const char*, int));
1684887Schin 
1694887Schin #undef __MANGLE__
1704887Schin #define __MANGLE__ __LINKAGE__
1714887Schin 
1724887Schin #endif
1734887Schin 
1744887Schin #endif
175