/* Return the node addressed by LABEL in NODE (usually one of "Prev:", "Next:", "Up:", "File:", or "Node:". After a call to this function, the global INFO_PARSED_NODENAME and INFO_PARSED_FILENAME contain the information. */ void info_parse_label (char *label, NODE *node) { register int i; char *nodeline; /* Default answer to failure. */ save_nodename (NULL); save_filename (NULL); /* Find the label in the first line of this node. */ nodeline = node->contents; i = string_in_line (label, nodeline); if (i == -1) return; nodeline += i; nodeline += skip_whitespace (nodeline); info_parse_node (nodeline, PARSE_NODE_DFLT); }
void LLPreviewAnim::exportasdotAnim( void *userdata ) { LLPreviewAnim* self = (LLPreviewAnim*) userdata; const LLInventoryItem *item = self->getItem(); //LLVOAvatar* avatar = gAgent.getAvatarObject(); //LLMotion* motion = avatar->findMotion(item->getAssetUUID()); //LLKeyframeMotion* motionp = (LLKeyframeMotion*)motion; //if (motionp) { //U32 size = motionp->getFileSize(); //U8* buffer = new U8[size]; //LLDataPackerBinaryBuffer dp(buffer, size); //if(motionp->serialize(dp)) { std::string filename = item->getName() + ".animatn"; LLFilePicker& picker = LLFilePicker::instance(); if(!picker.getSaveFile( LLFilePicker::FFSAVE_ALL, filename.c_str() ) ) { // User canceled save. return; } std::string name = picker.getFirstFile(); std::string save_filename(name); LLAPRFile infile ; infile.open(save_filename.c_str(), LL_APR_WB, LLAPRFile::local); apr_file_t *fp = infile.getFileHandle(); if(fp)infile.write(self->mAnimBuffer, self->mAnimBufferSize); infile.close(); } //delete[] buffer; } //whole file imported from onyx thomas shikami gets credit for the exporter }
void info_parse_node (char *string, int flag) { register int i = 0; /* Default the answer. */ save_filename (NULL); save_nodename (NULL); /* Special case of nothing passed. Return nothing. */ if (!string || !*string) return; string += skip_whitespace (string); /* Check for (FILENAME)NODENAME. */ if (*string == '(') { int bcnt; int bfirst; i = 0; /* Advance past the opening paren. */ string++; /* Find the closing paren. Handle nested parens correctly. */ for (bcnt = 0, bfirst = -1; string[i]; i++) { if (string[i] == ')') { if (bcnt == 0) { bfirst = -1; break; } else if (!bfirst) bfirst = i; bcnt--; } else if (string[i] == '(') bcnt++; } if (bfirst >= 0) i = bfirst; /* Remember parsed filename. */ saven_filename (string, i); /* Point directly at the nodename. */ string += i; if (*string) string++; } /* Parse out nodename. */ i = skip_node_characters (string, flag); saven_nodename (string, i); canonicalize_whitespace (info_parsed_nodename); if (info_parsed_nodename && !*info_parsed_nodename) { free (info_parsed_nodename); info_parsed_nodename = NULL; } /* Parse ``(line ...)'' part of menus, if any. */ { char *rest = string + i; /* Advance only if it's not already at end of string. */ if (*rest) rest++; /* Skip any whitespace first, and then a newline in case the item was so long to contain the ``(line ...)'' string in the same physical line. */ while (whitespace(*rest)) rest++; if (*rest == '\n') { rest++; while (whitespace(*rest)) rest++; } /* Are we looking at an opening parenthesis? That can only mean we have a winner. :) */ if (strncmp (rest, "(line ", strlen ("(line ")) == 0) { rest += strlen ("(line "); info_parsed_line_number = strtol (rest, NULL, 0); } else info_parsed_line_number = 0; } }