int main(int ac, char **av) { gProgName = av[0]; if (ac < 2 || ac > 3) { usage(); return EXIT_FAILURE; } if (init(av[1], av[2]) < 0) return EXIT_FAILURE; if (writeSurface() < 0) return EXIT_FAILURE; return 0; }
void iom_file::writeAttr(XmlWriter &out, IomObject &obj,int attr) { int valueCount=obj->getAttrValueCount(attr); if(valueCount>0){ const XMLCh *val=obj->getAttrPrim(attr,0); // not a primitive? if(!val){ IomObject child=obj->getAttrObj(attr,0); // some special cases if(child->getTag()==tags::get_COORD()){ // COORD out.startElement(attr,0,0); writeCoord(out,child); out.endElement(/*attr*/); if(valueCount>1){ iom_issueerr("max one COORD value allowed"); } }else if(child->getTag()==tags::get_POLYLINE()){ // POLYLINE out.startElement(attr,0,0); writePolyline(out,child,false); out.endElement(/*attr*/); if(valueCount>1){ iom_issueerr("max one POLYLINE value allowed"); } }else if(child->getTag()==tags::get_MULTISURFACE()){ // MULTISURFACE out.startElement(attr,0,0); writeSurface(out,child); out.endElement(/*attr*/); if(valueCount>1){ iom_issueerr("max one MULTISURFACE value allowed"); } }else{ // normal case const XMLCh *ref=child->getRefOid(); bool isRef= ref ? true : false; // Reference-attribute or Role or EmbeddedLink? if(isRef){ const XMLCh *extref=0; const XMLCh *bid=0; XMLCh itoabuf[40]; const XMLCh *orderpos=0; if(ref){ if(child->getRefOrderPos()>0){ XMLString::binToText( child->getRefOrderPos(),itoabuf,sizeof(itoabuf)-1,10); orderpos=itoabuf; } } bid=child->getRefBid(); if(bid){ extref=ref; ref=0; } XmlWrtAttr refAttr[]={ XmlWrtAttr(ref ? ustrings::get_REF() :0, ref,true) ,XmlWrtAttr(extref ? ustrings::get_EXTREF() :0, extref,true) ,XmlWrtAttr(bid ? ustrings::get_BID() :0, bid,true) ,XmlWrtAttr(orderpos ? ustrings::get_ORDER_POS():0, orderpos) }; out.startElement(attr,refAttr,sizeof(refAttr)/sizeof(refAttr[0])); if(child->getAttrCount()>0){ out.startElement(child->getTag(),0,0); writeAttrs(out,child); out.endElement(/*child*/); } out.endElement(/*attr*/); if(valueCount>1){ iom_issueerr("max one reference value allowed"); } }else{ // struct out.startElement(attr,0,0); int valuei=0; while(1){ out.startElement(child->getTag(),0,0); writeAttrs(out,child); out.endElement(/*child*/); valuei++; if(valuei>=valueCount){ break; } child=obj->getAttrObj(attr,valuei); } out.endElement(/*attr*/); } } }else{ out.startElement(attr,0,0); out.characters(val); out.endElement(/*attr*/); if(valueCount>1){ iom_issueerr("max one primitive-type value allowed"); } } } }