diff options
| author | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-12-06 19:28:06 +0900 | 
|---|---|---|
| committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-12-06 19:28:06 +0900 | 
| commit | 00d4f92b717fbcbed6f9eee361975d6ee5380d59 (patch) | |
| tree | 043b5970d66e539e1fbf6dde03440d6569e34c4e /examples/irdemo.cpp | |
| parent | 2f53bfe61c8ee78ff36ac6c66ae714b01e407b33 (diff) | |
| download | arts-00d4f92b717fbcbed6f9eee361975d6ee5380d59.tar.gz arts-00d4f92b717fbcbed6f9eee361975d6ee5380d59.zip | |
Renaming of files in preparation for code style tools.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'examples/irdemo.cpp')
| -rw-r--r-- | examples/irdemo.cpp | 155 | 
1 files changed, 155 insertions, 0 deletions
| diff --git a/examples/irdemo.cpp b/examples/irdemo.cpp new file mode 100644 index 0000000..aedd832 --- /dev/null +++ b/examples/irdemo.cpp @@ -0,0 +1,155 @@ +    /* + +    Copyright (C) 1999 Stefan Westerfeld +                       stefan@space.twc.de + +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 2 of the License, or +    (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +    GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, write to the Free Software +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. + +    Permission is also granted to link this program with the Qt +    library, treating Qt like a library that normally accompanies the +    operating system kernel, whether or not that is in fact the case. + +    */ + +#include "common.h" + +#include <stdio.h> +#include <stdlib.h> +#include <vector> +#include <string> + +using namespace std; +using namespace Arts; + +static void printInterface(InterfaceDef id) +{ +	string inherit; +	if(id.inheritedInterfaces.size()) +	{ +		vector<string>::iterator ii; +		bool first = true; +		inherit = ": "; +		for(ii = id.inheritedInterfaces.begin(); ii != id.inheritedInterfaces.end(); ii++) +		{ +			if(!first) inherit +=","; +			first = false; +			inherit += (*ii)+" "; +		} +	} +	printf("interface %s %s{\n",id.name.c_str(),inherit.c_str()); +	// attributes, streams +	vector<AttributeDef>::iterator ai; +	for(ai = id.attributes.begin(); ai != id.attributes.end(); ai++) +	{ +		const AttributeDef& ad = *ai; +		if(ad.flags & attributeAttribute) +		{ +			/* readwrite */ +			if(ad.flags & (streamOut|streamIn) == (streamOut|streamIn)) +			{ +				printf("  attribute %s %s;\n",ad.type.c_str(), ad.name.c_str()); +			} +			else +			{ +				if(ad.flags & streamOut)  /* readable from outside */ +				{ +					printf("  readonly attribute %s %s;\n", +									ad.type.c_str(), ad.name.c_str()); +				} +				if(ad.flags & streamIn)  /* writeable from outside */ +				{ +					printf("  ?writeonly? attribute %s %s;\n", +									ad.type.c_str(), ad.name.c_str()); +				} +			} +		} +		if(ad.flags & attributeStream) +		{ +			const char *dir = (ad.flags & streamOut)?"out":"in"; +			const char *async = (ad.flags & streamAsync)?"async ":""; +			string type = ad.type; +			if(type == "float" && !(ad.flags & streamAsync)) type = "audio"; + +			printf("  %s%s %s stream %s;\n",async,dir, +									type.c_str(),ad.name.c_str()); +		} +	} + +	// methods +	vector<MethodDef>::iterator mi; +	for(mi = id.methods.begin();mi != id.methods.end(); mi++) +	{ +		MethodDef& md = *mi; +		printf("  %s %s(",md.type.c_str(),md.name.c_str()); + +		bool first = true; +		vector<ParamDef>::iterator pi; +		for(pi = md.signature.begin(); pi != md.signature.end(); pi++) +		{ +			ParamDef& pd = *pi; +			if(!first) printf(", "); +			printf("%s %s",pd.type.c_str(),pd.name.c_str()); +			first = false; +		} +		printf(");\n"); +	} +	printf("}\n"); +} + +/* + * This demo shows that you can find out what interface an object has and + * what types it needs to work without knowing anything but the object + * reference. + * + * The reason for that is that every object offers the _interfaceName + * _queryInterface and _queryType methods, which you can use to find out + * anything you need to know to talk to that object. + * + * Just pass this programm an MCOP object reference, and it will print out + * the corresponding interface. + * + * (TODO: one could make it print out all inherited interfaces and the + * types that are used in the interface, too. Ports, etc could be shown + * as well). + */ + +/** + * Interface repository demo - reasonable testcase: + * + *  - make sure artsd is running + *  - irdemo global:Arts_SimpleSoundServer + */ +int main(int argc, char **argv) +{ +	if(argc != 2) +	{ +		fprintf(stderr,"usage: %s <mcop reference>\n",argv[0]); +		exit(1); +	} + +	Dispatcher dispatcher; +	Object o = Reference(argv[1]); +	if(o.isNull()) +	{ +		fprintf(stderr,"can't connect to the object\n"); +		exit(1); +	} + +	string iname = o._interfaceName(); +	InterfaceDef idef = o._queryInterface(iname); +	printInterface(idef); + +	return 0; +} | 
