// brackets.cpp  CIS 205 C/C++ 04/17/2002

// This program returns the number and nesting level of { and } brackets in a diskfile.
// The name of the diskfile to be searched is given by a runtime parameter

/*
Sample interaction for brackets.txt containing {{}Hello}

C:\temp>brackets brackets.txt
Bracket Nesting Level: 0
Bracket Nesting Level: 1
Bracket Nesting Level: 2
Bracket Nesting Level: 1
Bracket Nesting Level: 0
Open Bracket Count: 2
Close Bracket Count: 2

*/

#include <iostream.h>
#include <fstream.h>

int main(int argc, char *argv[]) {

	int level = 0, openBracket = 0, closeBracket = 0;
	char ch;
	ifstream ptr;

	if(argc < 2) {
		cout << "usage: " << argv[0] << " filename.txt" << endl;
	}
	else {
		ptr.open(argv[1], ios::in);
		if (!ptr) { 
			cout << "Error. Can't open " << argv[1] << endl;
		}
		else {
			ptr.get(ch);
			while (!ptr.eof()) {
				if(ch == '{' || ch == '}') {
					cout << "Bracket Nesting Level: " << level << endl;
				}	
				if(ch=='{') {
					level++;
					openBracket++;					
				}
				else if(ch=='}') {
					level--;
					closeBracket++;
				}
				ptr.get(ch);
			}
			cout << "Bracket Nesting Level: " << level << endl;
			cout << "Open Bracket Count: " << openBracket << endl;
			cout << "Close Bracket Count: " << closeBracket << endl;
		}
		ptr.close();
	}

	return 0;

}