// // Programmer: Craig Stuart Sapp // Creation Date: Thu Nov 22 10:57:44 PST 2001 // Last Modified: Thu Nov 22 10:57:47 PST 2001 // Filename: ...museinfo/examples/all/humlink.cpp // Web Address: http://sig.sapp.org/examples/museinfo/humdrum/humlink.cpp // Syntax: C++; museinfo // // Description: Creates a linked list of humdrum data. // // Note: Not yet finished. // #include "humdrum.h" #include class Node { public: Node(void) { lastline.setSize(0); lastspine.setSize(0); nextline.setSize(0); nextspine.setSize(0); } void add(Node& newnode); Array lastline; Array lastspine; Array nextline; Array nextspine; }; void Node::add(Node& newnode) { int i; for (i=0; i ANode; typedef Array AANode; void processHumdrumFile(HumdrumFile& hfile, AANode& nodes, Array& lines); void printAnalysis (HumdrumFile& hfile, AANode& nodes, Array& lines); int hasSpineManip (HumdrumRecord& aRecord); void insertNullNode (int location, ANode& current); void processTransition (HumdrumRecord& aRecord, ANode& current, int& init, int& tinit); void processData (HumdrumRecord& aRecord, ANode& current, int line); void deleteNode (int index, ANode& current); int findLineBack (int currentline, int target, Array& lines); //////////////////////////////////////////////////////////////////////// int main(int argc, char** argv) { if (argc != 2) { cout << "Usage: " << argv[0] << " input-kern-file" << endl; exit(1); } AANode nodes; Array lines; HumdrumFile hfile(argv[1]); processHumdrumFile(hfile, nodes, lines); printAnalysis(hfile, nodes, lines); return 0; } //////////////////////////////////////////////////////////////////////// ////////////////////////////// // // printAnalysis -- // void printAnalysis(HumdrumFile& hfile, AANode& nodes, Array& lines) { int i, j, k; int hline; cout << "!! LASTLINE ANALYSIS ---------------" << endl; for (i=0; i& lines) { lines.setSize(0); nodes.setSize(0); ANode current; current.setSize(0); nodes.setSize(hfile.getNumLines()); nodes.setSize(0); int i, j, k; int init = 0; int tinit = 0; // first: assign last token values for (i=0; i=0; i--) { for (j=0; j& lines) { int i = currentline - 1; while (i>0 && lines[i] != target) { i--; } return i; } ////////////////////////////// // // processData -- // void processData(HumdrumRecord& aRecord, ANode& current, int line) { if (current.getSize() != aRecord.getFieldCount()) { cout << "ERROR in processData" << endl; exit(1); } int i; for (i=0; i 0) { init = 1; } } ////////////////////////////// // // deleteNode -- // void deleteNode(int index, ANode& current) { if (index == current.getSize() - 1) { current.setSize(current.getSize() - 1 ); return; } int i; for (i=index; ilocation; i--) { current[i] = current[i-1]; } current[location] = node; } cout << "Error in insert NULL" << endl; } ////////////////////////////// // // hasSpineManip -- // int hasSpineManip(HumdrumRecord& aRecord) { int i; for (i=0; i