1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "generate_java.h" 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "Type.h" 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <string.h> 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <stdio.h> 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <stdlib.h> 6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <string.h> 7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// ================================================= 9282e181b58cf72b6ca770dc7ca5f91f135444502Adam LesinskiVariableFactory::VariableFactory(const string& base) 10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski :m_base(base), 11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski m_index(0) 12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 15282e181b58cf72b6ca770dc7ca5f91f135444502Adam LesinskiVariable* 16282e181b58cf72b6ca770dc7ca5f91f135444502Adam LesinskiVariableFactory::Get(Type* type) 17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski char name[100]; 19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sprintf(name, "%s%d", m_base.c_str(), m_index); 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski m_index++; 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Variable* v = new Variable(type, name); 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski m_vars.push_back(v); 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return v; 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam LesinskiVariable* 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam LesinskiVariableFactory::Get(int index) 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return m_vars[index]; 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// ================================================= 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistring 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskigather_comments(extra_text_type* extra) 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string s; 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski while (extra) { 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (extra->which == SHORT_COMMENT) { 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski s += extra->data; 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski else if (extra->which == LONG_COMMENT) { 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski s += "/*"; 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski s += extra->data; 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski s += "*/"; 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski extra = extra->next; 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return s; 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistring 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiappend(const char* a, const char* b) 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string s = a; 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski s += b; 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return s; 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// ================================================= 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiint 61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskigenerate_java(const string& filename, const string& originalSrc, 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski interface_type* iface) 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Class* cl; 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (iface->document_item.item_type == INTERFACE_TYPE_BINDER) { 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cl = generate_binder_interface_class(iface); 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski else if (iface->document_item.item_type == INTERFACE_TYPE_RPC) { 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cl = generate_rpc_interface_class(iface); 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Document* document = new Document; 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski document->comment = ""; 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (iface->package) document->package = iface->package; 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski document->originalSrc = originalSrc; 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski document->classes.push_back(cl); 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// printf("outputting... filename=%s\n", filename.c_str()); 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FILE* to; 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (filename == "-") { 82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski to = stdout; 83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /* open file in binary mode to ensure that the tool produces the 85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * same output on all platforms !! 86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski to = fopen(filename.c_str(), "wb"); 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (to == NULL) { 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski fprintf(stderr, "unable to open %s for write\n", filename.c_str()); 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 1; 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski document->Write(to); 95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski fclose(to); 97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; 98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 100