/*******************************************************************************************************

The following code is the output produced from the Lab 1 literate program

This is produced by taking the code from section 1 and substituting the named code chunks into this.

This process is repeated until all the chunk references are filled.

For example:
	the reference <The main program 3> is replaced with the code in section 3:
	
	int main( )
	{
		<Variables of main 4>
		<Open and validate the input File 6>
		<Read the File into the stack 8>
		<Pop the words from the stack 10>i
		<Finish up 11>
	}
	
Where chunks have the same name they are collected in the order they appear into the final code.

This means that I can write the program in an order that makes sense as it is read and still get a 
program that compiles and executes.

For more detailed explanations see the cwebman pdf file.

*******************************************************************************************************/

#include <iostream> 
#include <fstream> 
using namespace std;
void push(char word[]);
char*pop();
bool isEmpty();
const int STACK_SIZE= 100;
const int WORD_SIZE= 20;
char stack[STACK_SIZE][WORD_SIZE];
int top= 0;
int main()
{
char filename[20];
ifstream fin;
char word[WORD_SIZE];
cerr<<"Please enter the name of the input file: ";
cin>>filename;
fin.open(filename);
if(!fin)
{
cerr<<"Error opening file "<<filename<<". Program will exit."<<endl;
return 0;
}
while(fin>>word){
push(word);
}
while(!isEmpty())cout<<pop()<<endl;
}
void push(char word[])
{
if(top==STACK_SIZE)return;
int i= 0;
do
{
stack[top][i]= word[i];
i++;
}
while(word[i]);
top++;
return;
}
char*pop()
{
return stack[--top];
}
bool isEmpty()
{
return top==0;
}
