@DECL
PNCopyAttrsToCPn(L("from"),L("to")) {
L("attrs") = pnvarnames(L("from"));
"pnpncopy.txt" << "attrs: " << pnname(L("from")) << ": " << L("attrs") << "\n";
while (L("attrs")[L("i")]) {
L("attr") = L("attrs")[ L("i") ];
L("val") = pnvar(L("from"),L("attr"));
pnmakevar(L("to"),L("attr"),L("val"));
L("i")++;
}
}
PNCopyAttrsToCon(L("pn"),L("con")) {
L("attrs") = pnvarnames(L("pn"));
while (L("attrs")[L("i")]) {
L("attr") = L("attrs")[ L("i") ];
"copyperson.txt" << " ==> " << L("attr") << "\n";
L("val") = pnvar(L("pn"),L("attr"));
L("type") = pnvartype(L("pn"),L("attr"));
if (L("type") == 0) {
addstrval(L("con"),L("attr"),L("val"));
} else if (L("type") == 1) {
addnumval(L("con"),L("attr"),L("val"));
}
L("i")++;
}
}
PNIncrement(L("node"),L("var")) {
L("val") = pnvar(L("node"),L("var"));
if (L("val")) {
pnreplaceval(L("node"),L("var"),L("val")+1);
} else {
pnmakevar(L("node"),L("var"),1);
}
}
AddTreeID(L("con"),L("node")) {
L("id") = pnvar(L("node"),"id");
if (L("id")) {
return 0;
}
pnmakevar(L("node"),"id",++G("tree id"));
L("path") = str(G("tree id"));
while (L("node")) {
while (L("node") && !pnup(L("node"))) {
L("node") = pnprev(L("node"));
}
if (L("node") && pnup(L("node"))) {
L("node") = pnup(L("node"));
if (L("node") != pnroot()) {
if (pnvar(L("node"),"id")) {
L("path") = str(pnvar(L("node"),"id")) + " " + L("path");
} else {
pnmakevar(L("node"),"id",++G("tree id"));
L("path") = str(G("tree id")) + " " + L("path");
}
}
}
}
addstrval(L("con"),"pn",L("path"));
}
TreeNodeID(L("nodes str")) {
L("tokens") = split(L("nodes str")," ");
L("len") = arraylength(L("tokens"));
L("node") = pnroot();
while (L("i") < L("len")) {
L("node") = pndown(L("node"));
L("id") = num(L("tokens")[L("i")]);
"tree.txt" << L("id") << "\n";
L("node") = TreeNodeWithID(L("node"),L("id"));
L("i")++;
}
return L("node");
}
TreeNodeWithID(L("node"),L("id")) {
"tree.txt" << "Looking for: " << pnname(L("node")) << " " << L("id") << "\n";
while (L("node")) {
"tree.txt" << " Node: " << pnname(L("node")) << " " << pnvar(L("node"),"id") << "\n";
if (pnvar(L("node"),"id") == L("id")) {
"tree.txt" << " Found: " << pnname(L("node")) << " " << L("id") << "\n";
return L("node");
}
L("node") = pnnext(L("node"));
}
}
MarkFired(L("node")) {
L("pn str") = strval(L("node"),"pn");
L("pn") = TreeNodeID(L("pn str"));
pnsetfired(L("pn"),1);
}
@@DECL