/* Parse a macro */ VyObject ParseMacro(VyParseTree* code){ /* Parse the function arguments */ VyParseTree* args = GetListData(code, 1); int numArguments = 0; char* error = NULL; Argument** arguments = ParseFunctionArguments(args, &numArguments, &error); if(error != NULL){ return ToObject(CreateError(error, code)); } /* Take the rest of the expressions in the lambda as code */ VyParseTree* exprList = MakeListTree(); int i; for(i = 2; i < ListTreeSize(code); i++){ AddToList(exprList, GetListData(code, i)); } /* Take variables from the current function scope and the local scope */ Scope* funcScope = GetCurrentFunctionScope(); Scope* localScope = GetLocalScope(); /* Make sure the local scope isn't the global scope */ if(localScope == GetGlobalScope()) { localScope = NULL; } /* Merge the two scopes to get the current function scope */ Scope* closureScope = MergeScopes(funcScope, localScope); /* Create the function from the data gathered */ VyMacro** mac = CreateMacro(arguments, numArguments, exprList, closureScope); return ToObject(mac); }
void ggTool::s_Save() { int pointNum = (int)m_points.size(); std::string output = "3d_points.csv"; std::string output_bu = "3d_points_backup.csv1"; // バックアップを保存する std::ofstream ofs(output_bu, std::ios::out); for (int i = 0; i < pointNum; i++) { cv::Point3f p = m_points[i].first; std::string str = m_points[i].second; ofs << p.x << "," << p.y << "," << p.z << "," << str << std::endl; } ofs.close(); // 更新版を保存する std::vector<PointWithComment> pts = GetListData(); ofs.open(output, std::ios::out); for (int i = 0; i < pointNum; i++) { cv::Point3f p = pts[i].first; std::string str = pts[i].second; ofs << p.x << "," << p.y << "," << p.z << "," << str << std::endl; } // 確認ボックス QMessageBox box; box.setText(QString::fromStdString("Saved following file.\n" + output)); box.exec(); }
void CMainWnd::GetBuffDataWorker() { if (IsEmpty()) return; KillTimer(this->GetHWnd(), GETDATATIMER); PCHAR data = GetListData(); if (data != NULL) { UINT bufSiz = strlen(data) * 2; PCHAR pBuff = (PCHAR)calloc(bufSiz, 1); UINT len = 0; while(data) { UINT datalen = lstrlen(data); if(bufSiz <= datalen + len) { UINT tmplen = bufSiz + (datalen * 2); PCHAR tmp = (PCHAR)realloc(pBuff, tmplen); if (tmp) { pBuff = tmp; bufSiz = tmplen; } else { break; } } strcpy(&pBuff[len], data); len += datalen; free(data); data = GetListData(); } this->addtoEdit(pBuff); free(pBuff); if (data) { OutputDebugString("<=================== data is Not Null!!! ====================>\n"); this->addtoEdit(data); free(data); } } SetTimer(this->GetHWnd(), GETDATATIMER, TIMERINTERVAL, NULL); }
/* Check and print errors */ int CheckAndPrintErrors(VyParseTree* tree){ int treeType = tree->type; int error = 0; if(treeType == TREE_LIST){ /* Check each element recursively */ int i; for(i = 0; i < ListTreeSize(tree); i++){ VyParseTree* next = GetListData(tree,i); /* Check the sub nodes for errors */ int listError = CheckAndPrintErrors(next); if(listError) error = 1; } } /* Check each piece of the ref */ else if(treeType == TREE_REF){ int objError = CheckAndPrintErrors(GetObj(tree)); int refError = CheckAndPrintErrors(GetRef(tree)); if(objError || refError) error = 1; } /* If it is an error, print the error */ else if(treeType == TREE_ERROR){ printf("\n\n"); printf("------- Parsing Error -------\n"); printf("Position: "); PrintPosition(tree->pos); printf("\n"); printf(tree->data->error.message); printf("\n-----------------------------"); error = 1; } return error; }
PWindow LocatWinByXY(PPoint pPoint) { PWindow pWinCurr = NULL; PWindow pWinParent = NULL; CList list; int iStackTop; InitList(&list); pWinCurr = pWinRoot; while(TRUE) { if(pWinCurr) { PushList(&list, pWinCurr); pWinCurr = pWinCurr->m_pLastSon; } else{ iStackTop = list.m_iListSize; if(iStackTop == -1) { break; } pWinCurr = GetListData(&list, iStackTop-1); RemoveListByData(&list, pWinCurr); if(PointInRect(pPoint, &pWinCurr->m_showRect)) { break; } pWinCurr = pWinCurr->m_pLast; } } DeletList(&list); return pWinCurr; }
void PrintListGeneric(VyParseTree* tree, char oDelim, char cDelim){ printf("%c", oDelim); /* Print each element recursively */ int i; for(i = 0; i < ListTreeSize(tree); i++){ VyParseTree* next = GetListData(tree,i); if(IsQuote(next)){ printf("'"); PrintParseTree(GetListData(next, 1)); } else if(IsSubstitution(next)){ if(IsSplicingSubstitution(next)){ printf("$@"); }else{ printf("$"); } PrintParseTree(GetListData(next, 1)); } else if(next->type == TREE_LIST){ VyParseTree* first = GetListData(next, 0); if(first->type == TREE_IDENT && StrEquals(GetStrData(first), "infix")){ PrintListGeneric(GetListData(next, 1), '{','}'); } else if(first->type == TREE_IDENT && StrEquals(GetStrData(first), "quote-substitutions")){ PrintListGeneric(GetListData(next, 1), '[',']'); }else{ PrintParseTree(next); } } else{ PrintParseTree(next); } } /* If it wasn't an empty list, remove the extra space generated by the item inside */ if(ListTreeSize(tree) > 0){ printf("\b"); } printf("%c ", cDelim); }