netscape-revival
sun-java/classsrc/netscape/tools/jmc/CImplHeaderGen.java
// Copyright (c) 1995 Netscape Communications Corporation. All rights reserved.
package netscape.tools.jmc;
import netscape.tools.jmc.*;
import netscape.tools.jric.*;
import netscape.tools.ClassFileParser.*;
import java.io.*;
import java.util.Vector;
public
class CImplHeaderGen extends JMCGenerator {
public CImplHeaderGen(netscape.tools.jmc.Main global, ClassDef clazz) {
super(global, clazz);
}
protected String getFileName() {
return "M" + getImplName() + ".h";
}
protected String getHeaderString() {
return clazz.name + " module C-language header file\n * Generated by jmc";
}
protected void generateOutput() throws IOException {
int i;
Vector interfaces = getInterfaces(clazz);
String prefix = getImplName();
out.println("#ifndef _M" + prefix + "_H_");
out.println("#define _M" + prefix + "_H_\n");
out.println("#include \"M" + clazz.getPrefix() + ".h\"");
out.println("typedef struct " + getImplName()
+ "\t" + getImplName() + ";\n");
out.println("#ifdef __cplusplus");
out.println("extern \"C\" {");
out.println("#endif /* __cplusplus */\n");
for (i = interfaces.size() - 1; i >= 0; i--) {
ClassDef intf = (ClassDef)interfaces.elementAt(i);
for (int j = 0; j < intf.methods.length; j++) {
MethodDef method = intf.methods[j];
forwardDeclare(method);
}
}
out.println();
printBlockComment("Operations you must implement");
// GetInterface
out.println("JRI_PUBLIC_API(void*)");
out.println(prefix + "_GetInterface("
+ prefix + "* self, jint op, jint iid);\n");
// AddRef
out.println("JRI_PUBLIC_API(void)");
out.println(prefix + "_AddRef("
+ prefix + "* self, jint op);\n");
// Release
out.println("JRI_PUBLIC_API(void)");
out.println(prefix + "_Release("
+ prefix + "* self, jint op);\n");
// Description
out.println("JRI_PUBLIC_API(const char**)");
out.println(prefix + "_Description("
+ prefix + "* self, jint op);\n");
// Generate a prototype for each method
for (i = interfaces.size() - 1; i >= 0; i--) {
ClassDef intf = (ClassDef)interfaces.elementAt(i);
int j;
for (j = 0; j < intf.methods.length; j++) {
MethodDef method = intf.methods[j];
printMethodFunctionSig(prefix, method, j);
out.println(";\n");
}
}
printBlockComment("Factory Operations");
out.println("JRI_PUBLIC_API(" + prefix + "*)");
out.println(prefix + "Factory_Create(jint size);\n");
out.println("#ifdef __cplusplus");
out.println("} /* extern \"C\" */");
out.println("#endif /* __cplusplus */\n");
out.println("#endif /* _M" + prefix + "_H_ */");
}
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//
}