Firenet

Check-in [7cb2f511ec]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Started JavaPlanner
Timelines: family | ancestors | NEWNET
Files: files | file ages | folders
SHA1:7cb2f511eccc640b7b3a49dd819942da7181ff4f
User & Date: jim 2016-01-06 14:21:29
Context
2016-01-06
14:21
Started JavaPlanner Leaf check-in: 7cb2f511ec user: jim tags: NEWNET
2016-01-03
11:01
QueFinder added & odetojoy show check-in: 9778542a31 user: jim tags: NEWNET
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Added JavaPlanner/Planning/CGen/Quote.java.



>
1
/* 	Quote GENERATION MODULE 	 	14 Feb 1998 Initial creation of Quote generator */  import java.io.*; import java.awt.*; import java.applet.*;  class Quote { 	public static FileOutputStream out_stream;		// Output file 		 	public long in_length; 	public String out_name;  	/***************************************************** 	* 	*  GENERATE ZIP source from site description 	* 	*	INPUT:	base	- site base node 	* 	*	OUTPUT:	TRUE if OK, FALSE if not 	* 	*****************************************************/ 	 	public Quote(AppletFrame win,node base) 	{ 		FileDialog fd; 		FileOutputStream out_stream;	// Output Stream 		PrintStream data_out;			// output data 		 		/*  (1) If Base == NULL quit now */ 		 		if( base == null ) 			return; 						 		/* (2) Open output file */ 		 		fd = new FileDialog(win,"Quote File",FileDialog.SAVE); 		fd.setFile("Quote.txt"); 		fd.show(); 		if( fd.getFile() == null ) 			return; 		win.applet.show(); 		 		// (3) Now Create the output print stream 		 		try{ out_stream = new FileOutputStream( fd.getDirectory() + fd.getFile() ); } 		catch( IOException io ) { return; } 		data_out = new PrintStream(out_stream); 					 		// (4) Now go through the nodes and generate the output data for each 		 		Qgen( base,1,data_out ); 		 		// (5) Close the files and exit 		try{ out_stream.close(); } 		catch( IOException i4 ) {  return; } 							 	}  	/**************************************************************** 	* 	*  node_generate( node n )	- Recursively generate code for LBU's and RELAY's 	* 	*	INPUT:	n	- Current node (generate children) 	* 	*	OUTPUT:	NONE 	*			Generate relay or siteXXX file 	* 	*****************************************************************/ 	 	int Qgen( node n,int item,PrintStream out ) 	{ 		int i; 		 		// (1) Generate the quote for this one  		 		n.select(); 		item = n.Qgen( item,out ); 		n.show(); 		 		// (2) Now generate children 		 		for(i=0; i<n.children.length; i++ ) 		{ 			if( n.children[i] != null ) 			{ 				n.select(); 				item = this.Qgen(n.children[i],item,out ); 				n.show(); 			} 		} 		return( item ); 	} }

Added JavaPlanner/Planning/CGen/cgen.java.

cannot compute difference between binary files

Added JavaPlanner/Planning/DrawSupport/Alert.java.

















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.applet.Applet;
import java.awt.*;
//import InfoDialog.*;

public class Alert
{
	public InfoDialog err;
	public static int init_psn = 50;
	
	public Alert( String name,String message)
	{
			Frame f = new Frame("");
			f.reshape(init_psn,init_psn,100, 100);
			init_psn += 10;
			err = new InfoDialog( f,name,message,true);
			if( err != null )
			{
				err.move(init_psn,init_psn);
				err.show();
			}
			f.dispose();
	}
}

Added JavaPlanner/Planning/DrawSupport/InfoDialog.java.



>
1
// This example is from the book _Java in a Nutshell_ by David Flanagan. // Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates. // You may study, use, modify, and distribute this example for any purpose. // This example is provided WITHOUT WARRANTY either expressed or implied.  import java.awt.*;  public class InfoDialog extends Dialog  { 	protected Button button; 	protected MultiLineLabel label; 	boolean dismissed = false; 	 	// Add MODAL flag !!! 	public InfoDialog( Frame parent,String title, String message,boolean modal) 	{ 		// Create a dialog with the specified title 		super(parent, title, modal); 		 		// Create and use a BorderLayout manager with specified margins 		this.setLayout(new BorderLayout(15, 15)); 		 		// Create the message component and add it to the window 		label = new MultiLineLabel(message, 20, 20); 		this.add("Center", label); 		 		// Create an Okay button in a Panel; add the Panel to the window 		// Use a FlowLayout to center the button and give it margins. 		button = new Button("OK"); 		Panel p = new Panel(); 		p.setLayout(new FlowLayout(FlowLayout.CENTER, 15, 15)); 		p.add(button); 		this.add("South", p); 		 		// Resize the window to the preferred size of its components 		this.pack(); 	} 	 	// Pop down the window when the button is clicked. 	public boolean action(Event e, Object arg) 	{ 		if (e.target == button)  		{ 			this.hide(); 			this.dispose(); 			dismissed = true; 			return true; 		} 		else return false; 	} 	 	// When the window gets the keyboard focus, give it to the button. 	// This allows keyboard shortcuts to pop down the dialog. 	public boolean gotFocus(Event e, Object arg)  	{ 		button.requestFocus(); 		return true; 	} 	 	public boolean done() 	{ 		return( dismissed ); 	} 	 }

Added JavaPlanner/Planning/DrawSupport/metric.java.



>
1
import java.applet.Applet; import java.awt.*;  /************************************************************ * *  METRIC - Helper object used to find minimum distance to connections between *		   nodes * ************************************************************/  public class metric  {  	public int x1,x2,y1,y2; 	 	 	// Here find the shortest of 16 possible connections between  	// the node n1 and node n2 	// Each has a box of size with the upper left corner = draw_x,draw_y 	// Make a connection point at the center of each side of the box 	 	public metric( node n1,node n2) 	{ 		int i,j; 		double d,min_d; 		double dx1,dx2,dy1,dy2; 		double dsize1,dsize2; 		 		//  Double loop to try all distances 		 		dx1 = 0.0; 		dy1 = 0.0; 		dx2 = 0.0; 		dy2 = 0.0; 		 		dsize1 = n1.size; 		dsize2 = n2.size; 		 		min_d = -1; 		for( i=0; i<4; i++ ) 		{ 			switch( i ) { 				 				case 0:	dx1 = (n1.draw_x + dsize1/2); 							dy1 = n1.draw_y; 							break; 							 				case 1:	dx1 = n1.draw_x; 							dy1 = (n1.draw_y + dsize1/2); 							break; 							 				case 2:	dx1 = (n1.draw_x + dsize1/2); 							dy1 = (n1.draw_y + dsize1); 							break; 							 				case 3:	dx1 = (n1.draw_x + dsize1); 							dy1 = (n1.draw_y + dsize1/2); 							break; 				} 				 			for( j=0; j<4; j++) 			{ 				switch( j ) { 					 					case 0:	dx2 = (double) n2.draw_x  + (double) dsize2/2; 								dy2 = (double) n2.draw_y; 								break; 								 					case 1:	dx2 = (double) n2.draw_x; 								dy2 = (double) n2.draw_y + (double) dsize2/2; 								break; 								 					case 2:	dx2 = (double) n2.draw_x  + (double) dsize2/2; 								dy2 = (double) n2.draw_y + (double) dsize2; 								break; 								 					case 3:	dx2 = (double) n2.draw_x + (double) dsize2; 								dy2 = (double) n2.draw_y + (double) dsize2/2; 								break; 				}  				// Now compute distance ** 2 (no need to take sqrt) 				 				d = ((dx1 - dx2)*(dx1 - dx2)) + ((dy1 - dy2)*(dy1 - dy2)); 				 				// Find the minimum 				 				if( min_d < 0 || min_d > d ) 				{ 					min_d = d; 					x1 = (int)(dx1 + 0.5); 					x2 = (int)(dx2 + 0.5); 					y1 = (int)(dy1 + 0.5); 					y2 = (int)(dy2 + 0.5); 				} 			} 		} 	} }

Added JavaPlanner/Planning/File/kvpToken.java.































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
/*

	Key value pair file tokenizer
	This extends the stream tokenizer
	
	9 Oct 97 Added UNGET KVP
*/

import java.io.*;
import java.util.Hashtable;

class kvpToken extends StreamTokenizer
{
	public Hashtable keys;
	
	public int key;				// Returned key number
	public String value;			// Returned value
	
	public boolean ungotten = false;
	
	public static final int KVP_BAD_KEY			=	-100;
	public static final int KVP_BAD_VALUE		=	-101;
	
	public static final int KVP_QUOTE			= 0x22;		// " character
	
	/*******************************************************
	*
	*  CONSTRUCTOR - Pass in INPUT Stream & key list
	*
	*	Set up for QUOTE = "
	*			WS      = 0x00 through 0x20
	*                     Word chrs 0x21 through 0x7F
	*			Parse numbers
	*			Comment = *
	*
	*******************************************************/
	
	public kvpToken( InputStream i,String key_list[] )
	{
		super( i );		// Normal setup
		
		// Now set quote and stuff
		
		this.quoteChar(KVP_QUOTE);
		this.whitespaceChars(0x00,0x20);
		this.wordChars(0x30,0x7f);
		this.parseNumbers();
		
		// Build the hashtable for the keys

		int j;
		Integer ky;		
		keys = new Hashtable(key_list.length);
		for( j=0; j<key_list.length; j++ )
		{
			ky = new Integer( j );
			try{ keys.put((Object)key_list[j],(Object)ky); }
			catch( NullPointerException np )
			{
				return;
			}
		}
		
		ungotten = false;		// No ungets
	}

	/*******************************************************
	*
	*  CONSTRUCTOR II - Pass in INPUT Stream 
	*
	*
	*******************************************************/
	
	public kvpToken( InputStream i )
	{
		super( i );		// Normal setup
	}

	/*******************************************************
	*
	*  initKeys(key_list)	- Initialize key list
	*
	*		INPUT:	key_list	- Key list for key value pair
	*
	*		OUTPUT:	NONE
	*				Hash table created
	*
	*******************************************************/
	
	public void initKeys( String key_list[] )
	{
		int j;
			
	// Now set quote and stuff
		
		this.quoteChar(KVP_QUOTE);
		this.whitespaceChars(0x00,0x20);
		this.wordChars(0x30,0x7f);
		this.parseNumbers();
		
		// Build the hashtable for the keys

		Integer ky;		
		keys = new Hashtable(key_list.length);
		for( j=0; j<key_list.length; j++ )
		{
			ky = new Integer( j );
			try{ keys.put((Object)key_list[j],(Object)ky); }
			catch( NullPointerException np )
			{
				return;
			}
		}
	}
	
	/*******************************************************
	*
	*  nextKvp()		- Get next key value pair
	*
	*	INPUT:	NONE	(assumed open stream)
	*
	*	OUTPUT:	TT_EOF if end of file hit
	*			Otherwise return key #
	*
	*******************************************************/
	
	public int nextKvp()
	{	
		Integer ky;
		int type;
		
		if( ungotten )
		{
			ungotten = false;		// Remove it then return old type
			return( key );
		}
			
		// Get the key token
		
		type = this.getToken();
		if( type != StreamTokenizer.TT_WORD )
			return( StreamTokenizer.TT_EOF );		// Failure return EOF
		
		// Find the key value
		
		try{ keys.contains( (Object)sval ); }
		catch( NullPointerException np) {
				return( StreamTokenizer.TT_EOF );
		}
		
		ky = (Integer)keys.get( (Object)sval );
		key = ky.intValue();
					
		// Get the value token 
		
		type = getToken();
		switch( type ) {
			
			case KVP_QUOTE:
			case StreamTokenizer.TT_NUMBER:
			case StreamTokenizer.TT_WORD:		return( key );
		
			default:		return( StreamTokenizer.TT_EOF );
		}
	}
	
	/*******************************************************
	*
	*  ungetKvp()		- Unget the last one
	*
	*	INPUT:	NONE	(assumed open stream)
	*
	*	OUTPUT:	Return last Key/Value pair
	*
	*******************************************************/
	
	public void ungetKvp()
	{	
		if( ungotten == false )
			ungotten = true;
	}
	
	/*******************************************************
	*
	*  getToken( )		- Return next token type from stream
	*
	*	INPUT:	token stream
	*
	*	OUTPUT:	Current token type
	*
	*******************************************************/
	
	public int getToken( )
	{
		// Do all the stuff needed to handle getting a token
		
			try{ this.nextToken(); }
			catch( IOException io ) 
			{
				return( StreamTokenizer.TT_EOF );
			}
			
			// We have one so return the type
			
			return( ttype );
	}
}

Added JavaPlanner/Planning/File/nodeStream.java.



>
1
/* *  PLOADER - Read the site plan from a text file *	This interperts a stream into nodes *      29 Sept 97 Psn correction for display offset *	  9 Oct 97 Use UNGET and just loop for data input *	  3 Nov 97 Add LBU type *	16-Feb-98 Add G2 type */  import java.io.*; import java.awt.*; import java.util.Date; import java.applet.Applet;  // This class returns nodes from an I/O stream  public class nodeStream extends kvpToken  {  	// Key value list for NODE type file 	 	public final String[] key_list = { 	"TYPE:", 											"LEVEL:", 											"PSNX:", 											"PSNY:", 											"CREATED:", 											"NAME:", 											"ADDRESS:", 											"PHONE:", 											"FAX:", 											"LOCATION:", 											"SYSTEM:", 											"UNIT:", 											"PERIOD:", 											"LTYPE:"}; 	public final int PL_TYPE		= 0; 	public final int PL_LEVEL		= 1; 	public final int PL_PSNX		= 2; 	public final int PL_PSNY		= 3; 	public final int PL_CREATED		= 4; 	public final int PL_NAME		= 5; 	public final int PL_ADDRESS		= 6; 	public final int PL_PHONE		= 7; 	public final int PL_FAX			= 8; 	public final int PL_LOCATION	= 9; 	public final int PL_SYSTEM		= 10; 	public final int PL_UNIT		= 11; 	public final int PL_PERIOD		= 12; 	public final int PL_LTYPE		= 13; 	 	public final String[] node_list = { "BASE",		// List of node types 											"RELAY", 											"LBU", 											"G1", 											"G2", 											"SITE" 		// MAKE LAST 										}; 										 	public node n;							// Returing node structure; 	public boolean ispushed = false;	// TRUE if there is a pushed value 	public Canvas dw;						// Applet canvas  	// Header values - read from SITE level 	private String sphone,sfax;		// Values from header 	private String saddress,sname; 	 	// Item header vars filled in by call to get head 	 	private int ntype;				// Node type 	private int unit,system;			// Node ID 	private int period;				// Node period 	private int ltype;				// Lbu type 	public int level;					// Site drawing level 	private int x,y;					// X,Y position 	 	// Node body vars 	 	private String location; 	 	 	/******************************************************* 	* 	*  CONSTRUCTOR - Pass node key list to kvpToken parent 	* 	*******************************************************/ 	 	public nodeStream( InputStream i ) 	{ 		super( i );		// Normal setup  		// Now set up key list 		 		this.initKeys(key_list); 		 	} 	 	/****************************************************** 	* 	*  INIT()	- Initialize for run 	* 	*	INPUT:	w		- Applet canvas from caller 	*			Read first record from file 	* 	*	OUTPUT:	FALSE if file not read correctly 	*			TRUE if ok and set local vars with header values 	* 	******************************************************/ 	 	public boolean init(Canvas w) 	{ 		int type; 		boolean run = true; 		 		// Init pushed stuff & lock in window 		 		ispushed = false; 		dw = w; 		 		// First get the first line - just ignore it  		 		if( this.getHeader() == -1 ) 			return( false ); 		 		// Now get the Site information 		 		while( run ) 		{ 			type = this.nextKvp(); 			switch( type ) { 				 				case PL_CREATED:			break;		// Just ignore 				 				case PL_NAME:				sname = this.sval; 											break; 											 				case PL_ADDRESS:			saddress = this.sval; 											break; 											 				case PL_PHONE:				sphone = this.sval; 											break; 											 				case PL_FAX:				sfax = this.sval; 											break; 											 				default:					this.ungetKvp(); 											run = false; 											break; 			} 		} 		 		return( true ); 	}  	/****************************************************** 	* 	*  getNode()	- Get next or pushed node 	* 	*	INPUT:	NONE	- Input from file 	* 	*	OUTPUT:	Node level for either just read or pushed node 	*			-1 if EOF or file failure 	*			NOTE: Node is this.n 	* 	******************************************************/ 	 	public int getNode() 	{ 		lbu l; 		relay r; 		G2 g; 		 			// Is this a pushed node ? 			// If pushed just return current stuff 			 		if( ispushed == true ) 		{ 			ispushed = false;			// Clear pushed 			return( level ); 		} 						 		// Build the node 		 		switch( this.getNitems() ) { 			 			case node.BASE:	n = new base(); 								break; 								 			case node.RELAY:	n = new relay(); 								break; 								 			case node.LBU:		n = new lbu(); 								break; 								 			case node.G1:		n = new G1(); 								break; 								 			case node.G2:		n = new G2(); 								break; 					 			case -1:			 			default:			return( -1 );		// EOF Exit 		} 		 		// Fill in node data 		 		// NOTE: Correct for origin offset 		n.create_full(x+node.org_x,y+node.org_y,system,unit,dw); 		n.site_name = sname; 		n.site_address = saddress; 		n.location = location; 		n.phone = sphone; 		n.fax = sfax; 		 		if( n instanceof lbu ) 		{ 			l = (lbu)n; 			l.period = period; 			l.lbu_type = ltype; 		} 				 		if( n instanceof relay ) 		{ 			r = (relay)n; 			r.relay_type = ltype; 		} 		if( n instanceof G2 ) 		{ 			g = (G2)n; 			g.g2_type = ltype; 		} 		 		return( level); 	} 	 	/******************************************************* 	* 	*  ungetNode()		- Push the last read node to allow re-read 	* 	*******************************************************/ 	 	public void ungetNode() 	{ 		if( n != null && ispushed != true ) 			ispushed = true; 	} 	 	/******************************************************* 	* 	*  getItem(kvpToken fp)				- Get all items at a node 	* 	*	INPUT:	NONE 	* 	*	OUTPUT:	Type of node or -1 if problem 	*			Put all the node values in instance vars 	* 	*******************************************************/ 	 	public int getNitems() 	{ 		int type; 		boolean run = true; 		 		// (1) Get the header information 		 		type = this.getHeader(); 		if( type == -1 ) 			return( -1 );			// Problem !!! 			 		// (2) Now get the location, system and unit codes 		 		while( run ) 		{ 			switch( this.nextKvp() ) { 				 				case PL_LOCATION:		location = this.sval; 										break; 										 				case PL_SYSTEM:		system = (int)this.nval; 										break; 										 				case PL_UNIT:			unit = (int)this.nval; 										break; 										 				case PL_PERIOD:		period = (int)this.nval; 										break; 										 				case PL_LTYPE:			ltype = (int)this.nval; 										break; 				 				// This will allow reads of files without PERIOD 				default:				this.ungetKvp(); 										run = false; 										break; 			} 		} 		return( type ); 	} 		 	/******************************************************* 	* 	*  getHeader(  )	- Fill in item header information 	* 	*	INPUT:	NONE 	* 	*	OUTPUT:	Type of node 	* 	********************************************************/ 	 	public int getHeader() 	{ 		boolean run = true; 		int type = -1; 		int item_count = 0; 		 		// Read the 4 header items and store in vars 		 		while( run ) 		{ 			type = this.nextKvp(); 			switch( type ) 			{ 				case PL_TYPE:		ntype = getNtype( this.sval ); 									if( ntype < 0 ) 											return( -1 );	// Bad type 									item_count++; 									break; 									 				case PL_LEVEL:		level = (int)this.nval; 									item_count++; 									break; 									 				case PL_PSNX:		x = (int)this.nval; 									item_count++; 									break; 									 				case PL_PSNY:		y = (int)this.nval; 									item_count++; 									break; 									 				default:			this.ungetKvp(); 									run = false; 									break; 			} 		} 			 			// Was everything read ? 			 			if( item_count == 4 ) 				return( ntype ); 			else 				return( -1 );		// Something was read twice 	} 	 	/******************************************************** 	* 	*  getNtype(String name)	- Return node type from name 	* 	*	INPUT:	Node type as a string 	* 	*	OUTPUT:	Node id number or -1 if not found 	* 	********************************************************/ 	 	public int getNtype( String name ) 	{ 		int i; 		 		for( i=0; i<node_list.length; i++ ) 		{ 			if( name.equals(node_list[i]) ) 				return( i ); 		} 		 		// Failure return -1 		 		return( -1 ); 	} } 			

Added JavaPlanner/Planning/File/ploader.java.



>
1
/* *  PLOADER - Read the site plan from a text file  	3 Nov 97 Handle LBU type's *	16-Feb-98 Add G2 type */  import java.io.*; import java.awt.*; import java.util.Date; import java.applet.Applet;  public class ploader  { 	public String name; 	public nodeStream fp; 	public node base = null; 	 	/******************************************************* 	* 	* CONSTRUCTOR - FIND THE FILE 	* 	*******************************************************/ 	 	public ploader(Frame f) 	{ 		FileDialog fd; 		String dir; 		 		// Get a file dialog 		 		fd = new FileDialog(f,"Load Plan",FileDialog.LOAD); 		fd.setFile("site_plan.txt"); 		fd.show(); 		name = fd.getFile(); 		dir = fd.getDirectory(); 		if( name != null ) 			f.setTitle( name ); 			 		name = dir + "/"+name;			// NOTE: NON-MAC type separators 	} 	 	public ploader(String nm) 	{ 		name = "Images/"+ nm;		// Just look in images 	} 	 	/****************************************************** 	* 	*  LOAD()		- This does the heavy lifting of doing a recursive descent 	*			          parser of the load file 	* 	*	INPUT:	Applet Canvas for display 	*			File name to be read 	* 	*	OUTPUT: BASE Station structure pointer or NULL if nothing done 	* 	*******************************************************/ 	 	public node load(Canvas win) 	{ 		FileInputStream is; 		 		// (1) If no file name just return null 		 		if( name == null ) 			return( null ); 			 		// (2) Ok, try to create the input stream for the file 		 		try{ is = new FileInputStream( name ); } 		catch( IOException io ) { return( null ); } 		 		// (3) Start node reader and if bad file exit now 		 		fp = new nodeStream( is); 		if( fp.init(win) == true ) 			this.getNode(fp,fp.level+1,null);			// Read in node tree 		 		// (5) Close the file and return if problem wipe data 		 		try{ is.close(); } 			catch(IOException io ){ base = null; } 			 		return( base ); 	} 	 	 	/******************************************************* 	* 	* getNode(nodeStream fp,int lev,node parent,)		- Parse file and build nodes 	* 	*	INPUT:	fp		- Open file 	*			lev		- Current depth in site 	*			parent	- Parent node 	* 	*	OUTPUT:	null if EOF hit 	*			Otherwise node make here 	*			Do all the nodes on on level 	*			NODE: Level is an instance var 	* 	*******************************************************/ 	 	node getNode( nodeStream fp, int lev, node parent) 	{ 		int level; 		node n = null; 		 		// Loop here to exhaust items at this level 		 		while( true ) 		{ 			level = fp.getNode(); 			if( level == -1 ) 				return( null );			// EOF or file problem 			 			// ********* Now decide what to do **** 			// If this is on the same level make it a sibling 			if( lev == level ) 			{ 				n = fp.n; 				fp.n.add_parent( parent ); 				if( parent != null ) 				{ 					parent.add_child( fp.n ); 					parent.show(); 				} 				else 					base = n;			// Attach base 			} 			 			// If this lower make it a child 			if( lev < level ) 			{ 				if( n == null ) 					return( null );			// Problem here !!!! 				 				fp.ungetNode();					// Push present node 				if( this.getNode( fp,(lev+1),n) == null ) 					return( n ); 			} 			 			// If higher then return current node and unget the last one 			 			if( lev > level ) 			{ 				fp.ungetNode(); 				return( n ); 			} 		} 	} } 	

Added JavaPlanner/Planning/File/psaver.java.



>
1
/* *  PSAVER - Save site plan to a text file 	26 Aug 97 - Store period 	 3 Nov 97	- Store LBU type 	 4 Nov 98 - Store RELAY type *	16-Feb-98 Add G2 type */  import java.io.*; import java.awt.*; import java.util.Date;  public class psaver  { 	public String name; 	 	// Very simple constructor get file for save 	 	public psaver(Frame f) 	{ 	 		FileDialog fd; 		String dir; 		 		// Get a file dialog 		 		fd = new FileDialog(f,"Save Plan",FileDialog.SAVE); 		fd.setFile("site_plan.txt"); 		fd.show(); 		name = fd.getFile(); 		dir = fd.getDirectory(); 		name = dir + "/"+name;			// NOTE: NON-MAC type separators 	} 	 	public boolean save( node base ) 	{ 		FileOutputStream os; 		PrintStream fp; 		 		// (1) If no file name just return false  		 		if( name == null ) 			return( false ); 			 		// (2) Ok, try to create the output stream for the file 		 		try{ os = new FileOutputStream( name ); } 		catch( IOException io ) { return( false ); } 		 		// (3) Build the print stream for the file  		 		fp = new PrintStream(os); 		 		// (4) Now print something  		 		this.print_plan(base,fp); 			 		//(x) Close the file and quit 		 		try{ os.close(); } 		catch( IOException io ) { return( false ); } 		 		return( true ); 	} 	 	/********************************************************* 	* 	*  MAIN PLAN PRINTING SECTION 	* 	*  INPUT: base		- Base node for system 	*		fp		- PrintStream object on open file 	* 	*  OUTPUT:	Print plan to output 	* 	*********************************************************/ 	 	public void print_plan(node base,PrintStream fp) 	{ 		Date d; 		String indent; 		 		// (1) Put out the header information for the site 		 		this.print_indent(0,"TYPE: SITE LEVEL: 0 PSNX: 0 PSNY: 0",fp); 		d = new Date(); 		this.print_indent(0, "CREATED: "+"\""+d.toLocaleString()+"\"",fp ); 		this.print_indent(0, "NAME:" +"\""+base.site_name+"\"",fp ); 		this.print_indent(0, "ADDRESS: "+"\""+base.site_address+"\"",fp); 		this.print_indent(0, "PHONE: "+ "\""+base.phone+"\"",fp ); 		this.print_indent(0, "FAX: " + "\""+base.fax+"\"",fp ); 		 		// (2) Base station information 		 		this.print_one_node(1,base,fp); 				 		// (3) Recursively print out the rest of the site 		 		print_node( 1,base,fp ); 	} 	 	/*********************************************************** 	* 	*  Print_node( int indent,node n,PrintStream fp ) 	* 	*  INPUT:	indent	- Present level of indent 	*		n		- Current parent node 	*		fp		- Current print stream 	* 	*  OUTPUT:	Print depth first node listing  	* 	************************************************************/ 	 	public void print_node( int indent, node n,PrintStream fp ) 	{ 		int i; 		node child; 		 		// (1) Move in an indent level 		 		indent++; 		 		// (2) Find any child nodes and print them 		 		for( i=0; i<n.children.length; i++ ) 		{ 			if( n.children[i] != null ) 			{ 				child = n.children[i]; 				 				// (3) Print out the type node at this level 				 				this.print_one_node(indent,child,fp );  				// (4) Recursively print this level 				 				print_node( indent,child,fp ); 			} 		} 	} 		 	/*********************************************************** 	* 	*  Print_one_node( int indent,node n,PrintStream fp ) 	* 	*  INPUT:	indent	- Present level of indent 	*		n		- Node to print 	*		fp		- Current print stream 	* 	*  OUTPUT:	Print this node at this indent  	* 	************************************************************/ 	 	public void print_one_node( int indent, node n,PrintStream fp ) 	{ 		lbu l; 		relay r; 		G2 g; 		 		// On the first line put out TYPE: XXX LEVEL: X PSN: XX YY  		this.print_indent( indent,"TYPE: "+n.node_name()+ 						" LEVEL: "+indent+" PSNX: "+n.cur_x+" PSNY: "+n.cur_y,fp ); 		this.print_indent( indent,"LOCATION: "+"\""+n.location+"\"",fp); 		this.print_indent( indent,"SYSTEM: "+n.system,fp); 		this.print_indent( indent,"UNIT: "+n.unit,fp); 		 		if( n instanceof lbu  )							// Output LBU stuff 		{ 			l = (lbu)n; 			this.print_indent( indent,"PERIOD: "+l.period,fp); 			this.print_indent( indent,"LTYPE: "+l.lbu_type,fp); 		} 		else if( n instanceof relay )					// Output Relay stuff 		{ 			r = (relay)n; 			this.print_indent( indent,"PERIOD: " + 1,fp); 			this.print_indent( indent,"LTYPE: "+r.relay_type,fp); 		} 		else if( n instanceof G2 ) 		{ 				g = (G2)n; 				this.print_indent(indent,"PERIOD: "+ 1,fp);	// Just put in a dummy 				this.print_indent( indent,"LTYPE: "+ g.g2_type ,fp); 		} 		else												// Everything else 		{ 			this.print_indent(indent,"PERIOD: "+ 1,fp);	// Just put in a dummy 			this.print_indent( indent,"LTYPE: "+ 0,fp); 		} 		 	} 	 	/********************************************************** 	* 	*  PRINT_INDENT(int level,String string, PrintStream fp) 	* 	*	INPUT:	level	- Indentation level 	*			string	- String for print 	*			fp		- Open print stream 	* 	*	OUTPUT:	Print indented string and NL 	* 	**********************************************************/ 		 	public void print_indent( int level,String string, PrintStream fp) 	{ 		int i; 		String indent; 		 		// Build the indent string 		 		indent = ""; 		for( i=0; i<level; i++ ) 			indent = indent + "\t"; 			 		// Output the string with a line return 		fp.print( indent+string ); 		fp.print("\r\n");				// DOS line termination 	} } 	

Added JavaPlanner/Planning/Icon .

Added JavaPlanner/Planning/Main/AppletFrame.java.



>
1
import java.applet.*; import java.awt.*;  /* 	  2 Feb-98		J.Schimpf	Add partial code generation menu option 	14-Feb-98		J.Schimpf	Add quote generator 	23-Feb-98		J.Schimpf	Fixes to get partial code gen working */  class AppletFrame extends Frame {  	MenuBar menubar; 	Menu file,edit,gen; 	MenuItem fnew,fopen,fclose,fsave,fquit; 	MenuItem code_base,code_gen,code_gen_partial; 	MenuItem quote_gen,quote_gen_partial; 	plan applet; 	boolean issaved = false; 	int w,h; 	cgen generator = null; 	int xpsn,ypsn; 	 	public AppletFrame( String title,int x,int y,int width,int height) 	{ 		// put the title on the frame & save the parameters 		 		super(title); 		 		xpsn = x; 		ypsn = y; 		w = width; 		h = height; 		  		// Put a menu bar with a quit button 				 		menubar = new MenuBar(); 		file = new Menu("File",true); 		menubar.add(file); 		 		file.add("New"); 		fnew = file.getItem(0);  		file.add("Open..."); 		fopen = file.getItem(1); 		file.addSeparator(); 		 		file.add("Close"); 		fclose = file.getItem(3); 		 		file.add("Save..."); 		fsave = file.getItem(4); 		file.addSeparator(); 		 		file.add("Quit"); 		fquit = file.getItem(6); 		 		edit = new Menu("Edit",true); 		menubar.add(edit); 		edit.add("Cut"); 		edit.add("Copy"); 		edit.add("Paste"); 		edit.add("Clear"); 		 		gen = new Menu("Generate",true);		// Generate menu 		menubar.add(gen); 		gen.add("Locate Protos...");			// Find protos 		code_base = gen.getItem(0); 		gen.addSeparator(); 		 		gen.add("Generate Code...");			// Generate code 		code_gen = gen.getItem(2);  		gen.add("Generate Partial Code...");	// Generate partial code 		code_gen_partial = gen.getItem(3);  		gen.addSeparator(); 		 		gen.add("Generate Quote..."); 		quote_gen = gen.getItem(5);  		gen.add("Generate Partial Quote..."); 		quote_gen_partial = gen.getItem(6); 		 		this.setMenuBar(menubar);  		// Lock in the prototypes 				 		generator = new cgen(this,1); 		if( generator.cgenProtoTest() == true )					 			code_gen.enable(); 		else 			generator = null; 		 		// Bring up the applet  		 		this.new_plan();	 		 	} 	 	/**************************************************************** 	* 	*  ACTION ROUTILNE 	* 	****************************************************************/	 	 	// Menu handler for this application 	 	public boolean action(Event e,Object arg) 	{ 		myCanvas c; 		 		if( e.target instanceof MenuItem) 		{ 			// Handle the various menu targets 			 			if( e.target == fquit ) System.exit(0);		// Quit 			 			if( e.target == fnew )							// New 			{ 				this.new_plan(); 				return( true ); 			} 			 			if( e.target == fclose )						// Close 			{ 				if( applet != null ) 				{ 					if( issaved == true ) 					{ 						applet.stop(); 						applet.destroy(); 						applet = null; 						fnew.enable(); 						fclose.disable(); 						fsave.disable(); 					} 					else 					{ 						Alert a = new Alert("Warning","Plan not saved"); 					} 				} 				return( true ); 			} 			 			if( e.target == fsave )						// Close 			{ 				plan p; 				node n; 				psaver s; 				 				p = (plan)applet; 				n = p.site_base; 				 				if( n == null ) 				{ 					Alert a = new Alert("Warning","Nothing to save"); 				} 				else 				{ 					s = new psaver(this); 					issaved = s.save( n ); 				} 				return( true ); 			} 			 			if( e.target == fopen )						// Open 			{ 				ploader pl; 				plan p; 				 				p = (plan)applet; 				 				if( p.site_base != null ) 				{ 					if( issaved == true ) 					{ 						p.site_base.delete_node(); 						p.site_base = null; 					} 					else 					{ 						Alert a = new Alert("Warning","Save present Plan"); 						return( true ); 					} 				} 				pl = new ploader( this ); 				c = applet.canvas; 				p.site_base = (base)pl.load((Canvas)c); 				if( p.site_base != null ) 				{ 					c.lock_base( p.site_base ); 					p.site_base.show(); 				} 				issaved = false; 				 				return( true ); 			} 			 			// GENERATE MENU ITEM 			 			if( e.target == code_base )				// Get new code base 			{ 				generator = new cgen( this ); 				if( generator.cgenProtoTest() == true )					 					code_gen.enable(); 				else 					generator = null; 				return( true ); 			} 			 			if( e.target == code_gen )					// Generate Code.... 			{ 				plan p = (plan)applet; 				 				if( generator == null ) 					generator = new cgen(this); 				if( generator != null && p.site_base != null ) 				{ 					generator.generate( p.site_base ); 					return( true ); 				} 			}  			if( e.target == code_gen_partial )		// Generate Partial Code.... 			{ 				plan p = (plan)applet; 				if( p.selected_node == null ) 				{ 					Alert a = new Alert("Note:","Select a starting point"); 					return( true ); 				} 				 				if( generator == null ) 					generator = new cgen(this); 				if( generator != null && p.selected_node != null ) 				{ 					generator.generate( p.selected_node ); 					p.selected_node.show(); 					p.selected_node = null; 					return( true ); 				} 			} 			 			if( e.target == quote_gen )					// Generate. Quote... 			{ 				plan p = (plan)applet; 				 				if( p.site_base != null ) 				{ 					new Quote( this, p.site_base ); 					return( true ); 				} 			} 			 			if( e.target == quote_gen_partial )			// Generate Partial Quote 			{ 				plan p = (plan)applet; 				if( p.selected_node == null ) 				{ 					Alert a = new Alert("Note:","Select a starting point"); 					return( true ); 				} 				 				if( p.selected_node != null ) 				{ 					new Quote( this,p.selected_node ); 					p.selected_node.show(); 					p.selected_node = null; 					return( true ); 				} 			} 		}  		return( false ); 	} 	 	/************************************************************** 	* 	*					SUPPORT ROUTINES 	* 	***************************************************************/  	/************************************************************** 	* 	*  NEW_PLAN	- put up a new planning window 	* 	***************************************************************/ 	 	public void new_plan() 	{ 		// Set up a new plan 		 		applet = new plan(); 		issaved = false; 		 		// Put the applet in the window 	 		this.add("Center",applet); 		this.reshape(xpsn,ypsn,w,h); 		this.show(); 	 		// Start the applet 	 		applet.init(); 		applet.start(); 		 		// Disable new but enable close/save 		 		fnew.disable(); 		fclose.enable(); 		fsave.enable(); 		code_base.enable(); 		if( generator != null ) 			code_gen.enable(); 		else 			code_gen.disable(); 		this.show();  	}  }

Added JavaPlanner/Planning/Main/Site3.java.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//
//  Site3.java
//  Site3
//
//  Created by Jim on 21/09/2006.
//  Copyright (c) 2006 __MyCompanyName__. All rights reserved.
//
//	For information on setting Java configuration information, including 
//	setting Java properties, refer to the documentation at
//		http://developer.apple.com/techpubs/java/java.html
//


//APP Shell for the PLAN applet

import java.util.Locale;
import java.util.ResourceBundle;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Site3 extends plan
{
	public static Dimension screen;
	                      
	public static void main(String args[])
	{
		Frame frame;                
		Splash s;
		int i;
		plan p;
		
		screen = Toolkit.getDefaultToolkit().getScreenSize();
		
		 p = new plan();
		 s = new Splash(5,p);
		 
		 p = null;
		 s = null;
			
		frame = new AppletFrame("PLAN",40,40,600,400);
	}
}



Added JavaPlanner/Planning/Main/Splash.java.















































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
// *** SPLASH SCREEN FOR STARTUP 

import java.applet.*;
import java.awt.*;
import java.util.Date;

class Splash extends Frame {

	Applet ap;
	node n;
	base site_base;
	myCanvas c;

	public Splash( int wait,Applet a)
	{
		// Build the frame
		
		super("");
		
		// Build the plan thing
		
		c = new myCanvas();
		ap = a;
		
		this.add("Center",c);
		
		this.reshape(40,40,600,400);
		this.show();
		
		site_base = (base)this.ssite_build((Canvas)c);
		c.lock_base( site_base );
		
		site_base.show();
		this.word_build( c );
		
		Date t = new Date();
		int n = t.getSeconds();
		
		n = n + wait;
		if( n >= 60 )
			n = n - 60;
			
		while( n != t.getSeconds() )
		{
			this.word_build( c );
			t = new Date();
		}
						
		this.dispose();
	}
	
	// Support functions for splash
	
	/********************************************************
	*
	*  SSITE_BUILD	- Build a site on the screen
	*
	*	NOTE: Site built then data from dump used for this file
	*	Return top of site
	*
	********************************************************/
	
	public node ssite_build(Canvas s)
	{
		node cnode;
		node pnode;
		node l1,l2,r;
		
		// (1) Build LBU 101 and all the G1's around it
		
		pnode = (node)new lbu();
		pnode.create( 521,93,1,s);
		
		cnode = (node)new G1();		// G1-1
		cnode.create(486,54,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		cnode = (node)new G1();		// G1-2
		cnode.create(537,49,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		cnode = (node)new G1();		// G1-3
		cnode.create(570,69,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		l1 = pnode;						// Save LBU 101

		// (2) Build LBU 102 and all the G1's around it
		
		pnode = (node)new lbu();
		pnode.create( 534,290,1,s);
		
		cnode = (node)new G1();		// G1-1
		cnode.create(507,347,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		cnode = (node)new G1();		// G1-2
		cnode.create(547,355,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		l2 = pnode;					// Save LBU 102
		
	// (3) Create relay station 50
	
		pnode = (node)new relay();
		pnode.create(433,217,1,s);
		
	// (4) Create relay station 51
	
		cnode = (node)new relay();
		cnode.create( 520,174,1,s);
		
	// (5) Attach LBU 101 & 102 to relay 51
	
		l1.add_parent( cnode );
		cnode.add_child( l1 );
		l2.add_parent( cnode );
		cnode.add_child( l2 );
	
	// (6) Attach 51 to relay 50
	
		pnode.add_child( cnode );
		cnode.add_parent( pnode );
	
	// (7) Save relay 50 and build LBU 103 and G1's
	
		r = pnode;

	// (8) Build LBU 101 and all the G1's around it
		
		pnode = (node)new lbu();
		pnode.create( 390,295,1,s);
		
		cnode = (node)new G1();		// G1-1
		cnode.create(352,346,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		cnode = (node)new G1();		// G1-2
		cnode.create(388,353,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		cnode = (node)new G1();		// G1-3
		cnode.create(429,348,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );
		
	// (9) Attach to relay node 
	
		r.add_child( pnode );
		pnode.add_parent( r );
		
		cnode = r;
	
	// (10) Build base station and attach relay
	
		pnode = (node)new base();
		pnode.create( 359,157,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		return( pnode );
	}		
	

	static final int MAIN_TITLEY = 90;
	static final int VER_TITLEY = 220;
	static final int SEC_TITLEY = 280;
	static final int CPY_TITLEY = 360;
	
	/*************************************************
	*
	*  WORD_BUILD(Applet s)	- Build the words on the screen
	*
	*	INPUT:	s	- Applet screen
	*
	*	OUTPUT:	Put the words on the screen
	*
	*************************************************/
	
	public void word_build(myCanvas s)
	{
		Graphics g = s.getGraphics();
		FontMetrics metric;
		Font f;
		
		// Put out the GPS words
		
		f = new Font("Helvetica",Font.PLAIN,36);
		metric = g.getFontMetrics( f );
		g.setColor(Color.red);
		g.setFont( f );
		g.drawString("G",50,MAIN_TITLEY);
		g.drawString("P",50,MAIN_TITLEY + metric.getHeight());
		g.drawString("S",50,MAIN_TITLEY + 2*metric.getHeight());
		
		g.setColor(Color.blue);
		g.drawString("roundhog",
					50 + metric.charWidth('G'),
					MAIN_TITLEY);
		g.drawString("lanning",
					50 + metric.charWidth('P'),
					MAIN_TITLEY + metric.getHeight());
		g.drawString("ystem",
					50 + metric.charWidth('S'),
					MAIN_TITLEY + 2*metric.getHeight());
					
		// Put out the Version information
		
		f = new Font("Helvetica",Font.PLAIN,24);
		g.setColor(Color.black);
		g.setFont(f );
		g.drawString(ap.getAppletInfo(),50,VER_TITLEY);
		
		// Put out other stuff

		f = new Font("Helvetica",Font.PLAIN,12);
		metric = g.getFontMetrics( f );
		g.setColor(Color.black);
		g.setFont(f );
		g.drawString("For design and code",50,SEC_TITLEY);
		g.drawString("generation of Nu-Metrics",
							50,SEC_TITLEY + metric.getHeight());
		g.drawString("RF Traffic Monitoring",
							50,SEC_TITLEY + 2*metric.getHeight());
		g.drawString("Systems",
							50,SEC_TITLEY + 3*metric.getHeight());
							
		// Put out copyright

		f = new Font("Helvetica",Font.PLAIN,12);
		metric = g.getFontMetrics( f );
		g.setColor(Color.black);
		g.drawString("Copyright 1997,98 Nu-Metrics",150,CPY_TITLEY);
		

	}


}
	

Added JavaPlanner/Planning/Main/myCanvas.java.



>
1
// Plan.java // 5 January 1998 myCanvas version  import java.applet.Applet; import java.awt.*;  /** Applet Plan.  *    *    *  @author   JHS  *  @version  1.0   	11 Nov 97	J.Schimpf	Fix system code creation on nodes  */   public class myCanvas extends Canvas { 	private base b; 	     /** Performs applet initialization.      */ 	public myCanvas() 	{ 		super(); 	} 	 	public void lock_base( base bb ) 	{ 		b = bb; 	} 	  	/************************************************** 	* 	*  PAINT ROUTINE 	* 	**************************************************/ 	 	public void paint( Graphics g ) 	{ 		Rectangle r = this.bounds(); 		 		g.setColor(this.getBackground()); 		g.fillRect(r.x,r.y,r.width,r.height);  		this.show();			// Show what we have done 		 		// This must be done or the menu items disappear 		 		if( b != null ) 			b.show(); 	} }  

Added JavaPlanner/Planning/Main/plan.java.













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
// Plan.java

import java.applet.Applet;
import java.awt.*;

/** Applet Plan.
 *  
 *  
 *  @author   JHS
 *  @version  1.0
 
	11 Nov 97	J.Schimpf	Fix system code creation on nodes
	31 Jan 98	J.Schimpf	Conversion to version 3.0
 */
 
public class plan extends java.applet.Applet
{
	///XXX
	public static final String NAME    = "FPlan";
	public static final String VERSION = "1.0";
	
	// Actions during run
	public static final int INFO = 0;	
	public static final int MOVE = 1;
	public static final int ADD = 2;
	public static final int DELETE = 3;
	public static final int CONNECT = 4;
	public static final int DISCONNECT = 5;
	public static final int SELECT = 6;
	
	// Unit types
	public static final int BASE = 0;
	public static final int RELAY = 1;
	public static final int LBU = 2;
	public static final int G1 = 3;
	public static final int G2 = 4;
        public static final int FBASE = 5;
	
	// Last selected item
	
	public node selected_node;	// Last selected node
	
	// Unit connection array 
	// This shows the allowable connections
	// First index is the parent i.e. Base,Relay,LBU
	//  Second index is the connected to index
	//  If TRUE connection is allowed, if FALSE NOT
	
	public boolean connection[][] = new boolean[6][6];		  
	public myCanvas canvas;
	private int canvas_width,canvas_height;
	
	private int last_x=0;
	private int last_y=0;
	private Scrollbar hbar,vbar;		// For scrolling
	private Panel barea;
	private Color current_color=Color.black;
	private Button clear_button;
	private Choice type_choices;
	private Choice action_choices;
	private node last_node,moved_node;
	private node pnode,cnode;			// For connections
	
//	private Button save_button;
//	private Button load_button;
	public base site_base = null;
        public fbase site_fbase = null;

    /** Performs applet initialization.
     */
	public void init()
	{
	
		// Set up connection table of allowable connections
		
		connection[BASE][BASE]		= false;	// BASE as parent
		connection[BASE][RELAY] 	= true;
		connection[BASE][LBU]		= true;
		connection[BASE][G1]		= false;
		connection[BASE][G2]		= false;
                connection[BASE][FBASE]         = false;
		
		connection[RELAY][BASE] 	= false;	// RELAY as parent
		connection[RELAY][RELAY] 	= true;
		connection[RELAY][LBU]		= true;
		connection[RELAY][G1]		= false;
		connection[RELAY][G2]		= true;		// Allow G2 -> RELAY connection
                connection[RELAY][FBASE]        = false;
		
		connection[LBU][BASE] 		= false;	// LBU as parent
		connection[LBU][RELAY]		= true;		// RELAY -> LBU connection
		connection[LBU][LBU]		= false;
		connection[LBU][G1]		= true;
		connection[LBU][G2]		= true;
                connection[LBU][FBASE]          = false;
		
		connection[G1][BASE] 		= false;	// G1 as parent
		connection[G1][RELAY] 		= false;
		connection[G1][LBU]		= false;
		connection[G1][G1]		= false;
		connection[G1][G2]		= false;
                connection[G1][FBASE]           = false;
		
		connection[G2][BASE] 		= false;	// G2 as parent
		connection[G2][RELAY] 		= false;
		connection[G2][LBU]		= false;
		connection[G2][G1]		= false;
		connection[G2][G2]		= false;
                connection[G2][FBASE]           = false;
				
                connection[FBASE][BASE]		= false;	// FBASE as parent
		connection[FBASE][RELAY] 	= false;
		connection[FBASE][LBU]		= false;
		connection[FBASE][G1]		= false;
		connection[FBASE][G2]		= false;
                connection[FBASE][FBASE]        = false;
                
		// Set the color background
		
		this.setBackground(Color.white);
		
		// Put on the scroll bars
		
		canvas = new myCanvas();
		hbar = new Scrollbar( Scrollbar.HORIZONTAL );
		vbar = new Scrollbar( Scrollbar.VERTICAL );
		this.setLayout( new BorderLayout(0,0));
		this.add("South",hbar);
		this.add("East",vbar);
		this.add("Center",canvas);
		
		// Create the buttons and add to the applet
		// Put them in a panel at the top of the screen
		
		barea = new Panel();
		this.add("North",barea);
		
		clear_button = new Button( "*REFRESH*");
		clear_button.setForeground(Color.black);
		clear_button.setBackground(Color.lightGray);
		barea.add(clear_button);

		// Create an action choice list
		
		action_choices = new Choice();
		action_choices.addItem( "INFO" );
		action_choices.addItem( "MOVE" );
		action_choices.addItem("ADD");
		action_choices.addItem( "DELETE" );
		action_choices.addItem( "CONNECT" );
		action_choices.addItem( "DISCONNECT" );
		action_choices.addItem( "SELECT" );
		action_choices.setForeground(Color.black);
		action_choices.setBackground(Color.lightGray);
		barea.add(action_choices);
	
		// Create a type choice list
		
		type_choices = new Choice();
		type_choices.addItem("BASE");
		type_choices.addItem( "RELAY" );
		type_choices.addItem( "LBU" );
		type_choices.addItem( "G1" );
		type_choices.addItem( "G2" );
                type_choices.addItem("FBASE");
		type_choices.setForeground(Color.black);
		type_choices.setBackground(Color.lightGray);
		barea.add(type_choices);
		
		last_node = null;
	}

	/**************************************************
	*
	*  RESHAPE ROUTINE - refits the scroll bars
	*
	**************************************************/
	
	public synchronized void reshape( int x,int y,
								int width,int height)
	{
		Canvas c;
		super.reshape( x,y,width,height );
		if( hbar == null || vbar == null )
			return;
		
		// Fix the scroll bars up
		
		Dimension hbar_size = hbar.size();
		Dimension vbar_size = vbar.size();
		canvas_width = width - vbar_size.width;
		canvas_height = height - hbar_size.height;
		
		hbar.setValues(node.org_x,canvas_width,0,1000-canvas_width);
		vbar.setValues(node.org_y,canvas_height,0,1000-canvas_height);
		
		hbar.setPageIncrement( canvas_width/2 );
		vbar.setPageIncrement( canvas_height/2 );
		
		c = (Canvas)canvas;
		this.update( c.getGraphics() );
	}
	
	/**************************************************
	*
	*  ACTION ROUTINE
	*
	**************************************************/
	
	// Called when user clicks a button or chooses a menu
	public boolean action( Event event,Object arg)
	{
		int scroll;
				
		if( event.target == clear_button )		// BUTTON
		{	
			this.show();
			if( site_base != null )
				site_base.show();
			return true;
		}
		
		if( event.target == type_choices )		// CHOICE
		{
			return true;
		}

		if( event.target == action_choices )		// CHOICE
		{
			return true;
		}
		
		
		return super.action(event,arg);			// NEITHER
	}
	
	/**************************************************
	*
	*  Event Handler ROUTINE
	*
	**************************************************/
	
	public boolean handleEvent( Event event)
	{
		int scroll;
		
		if( event.target == hbar )				// Horizontal scroll bar
		{
			switch( event.id ) {
				
				case Event.SCROLL_LINE_UP:
				case Event.SCROLL_PAGE_UP:
				case Event.SCROLL_LINE_DOWN:
				case Event.SCROLL_PAGE_DOWN:
				case Event.SCROLL_ABSOLUTE:
					scroll = ((Integer)event.arg).intValue();
					if( site_base != null )
					{
						site_base.clear();
						site_base.scroll_x( -1 * scroll );
						site_base.show();
					}
					return( true );
				}
			}					

		if( event.target == vbar )				// Verticle scroll bar
		{
			switch( event.id ) {
				
				case Event.SCROLL_LINE_UP:
				case Event.SCROLL_PAGE_UP:
				case Event.SCROLL_LINE_DOWN:
				case Event.SCROLL_PAGE_DOWN:
				case Event.SCROLL_ABSOLUTE:
					scroll = ((Integer)event.arg).intValue();
					if( site_base != null )
					{
						site_base.clear();
						site_base.scroll_y( -1 * scroll );
						site_base.show();
					}
					return( true );
				}
			}					

		return( super.handleEvent(event) );
	}
	
	/*************************************************
	*
	*  mouseDown() - Handle action based on mode of display
	*
	**************************************************/
	
	public boolean mouseDown( Event e, int x,int y)
	{
		int type;
		boolean result;
		boolean no_base;
		Dimension sz = barea.size();
		
		y = y - sz.height;
		
		// Set NO BASE true if we don't have a base station yet
		
		if( site_base == null )
			no_base = true;
		else
			no_base = false;
		if( selected_node != null )
			selected_node.show();
		
		type = action_choices.getSelectedIndex();
		
		// Note put little things in here to run in macro loops for easier
		// user interface
		
		switch( type ) {
		
			case ADD:		result = add_node(e,x,y);
							if( result == true )
							{
								// This little thing keeps from jumping to CONNECT
								// if we have only just created the base station
								// We only switch to CONNECt if there is a base station
								// and it wasn't just created
								if( site_base != null && no_base == false )
									action_choices.select("CONNECT");
							}
							return( result );
						
			case MOVE:		result = move_node(e,x,y);
							return( result );
						
			case DELETE: 	result = delete_node( e,x,y );
							if( result = true )
								action_choices.select("INFO");
							return( result );
							
			case CONNECT: 	result = connect_node( e,x,y );
							if( result == true )
								action_choices.select("ADD");
							return( result );
							
			case DISCONNECT:	result = disconnect_node(e,x,y );
								if( result = true )
									action_choices.select("CONNECT");
								return( result );
							
			case INFO:		result = info_node(e,x,y);
							return( result );
							
			case SELECT:	selected_node = site_base.locate_node(x,y);
							if( selected_node != null )
								selected_node.select();
							return( true );	
						
			default:	result = false;
		}
		return( false );
	}

	/*************************************************
	*
	*  add_node()	- Add a new node to list attach to last_node
	*
	**************************************************/
	
	public boolean add_node( Event e,int x,int y)
	{
		Alert err;
		relay r_node;
		lbu lbu_node;
		G2 g2_node;
		G1 g1_node;
		int type;
		
		// If LAST NODE exists then delete it
		
		if( last_node != null )
			last_node.delete_node();
			
		// Ok make the new one
		
		type = type_choices.getSelectedIndex();
		
		switch( type ) {
			
		case BASE:	if( site_base == null )
					{
						site_base = new base();
						site_base.create( x,y,		// Position
										site_base.system,		// Sys/unit code
										(Canvas)canvas);		// Window
						last_node = (node) site_base;
						last_node = null;
						
					}
					else
					{
						err = new Alert("ERROR",
							"BASE Station Already Created");
						last_node = null;
					}
					break;

		case RELAY:	if( site_base == null )
						{
							new Alert("ERROR","Create Base First");
							break;
						}
						r_node = new relay();
						r_node.create( x,y,		// Position
										site_base.system,	// Sys/unit code
										(Canvas)canvas);		// Window
						last_node = (node)r_node;
					break;

		case LBU:		if( site_base == null )
						{
							new Alert("ERROR","Create Base First");
							break;
						}
						lbu_node = new lbu();
						lbu_node.create( x,y,		// Position
										site_base.system,	// Sys/unit code
										(Canvas)canvas);		// Window
						last_node = (node)lbu_node;
					break;

		case G2:		if( site_base == null )
						{
							new Alert("ERROR","Create Base First");
							break;
						}
						g2_node = new G2();
						g2_node.create( x,y,		// Position
										site_base.system,	// Sys/unit code
										(Canvas)canvas);		// Window
						last_node = (node)g2_node;
					break;

		case G1:		if( site_base == null )
						{
							new Alert("ERROR","Create Base First");
							break;
						}
						g1_node = new G1();
						g1_node.create( x,y,		// Position
										site_base.system,	// Sys/unit code
										(Canvas)canvas);		// Window
						last_node = (node)g1_node;
					break;
		case FBASE:	if( site_fbase == null )
					{
						site_fbase = new fbase();
						site_fbase.create( x,y,		// Position
							site_fbase.system,		// Sys/unit code
                                                        (Canvas)canvas);		// Window
						
					}
					else
					{
						err = new Alert("ERROR",
							"FBASE Station Already Created");

					}
					break;

					
		default:	last_node = null;
					break;
		}
		
		if( last_node != null )
			return( true );
		else
			return( false );

	}
	
	/*************************************************
	*
	*  move_node()	- See if a node is under the cursor and move it
	*
	**************************************************/
	
	public boolean move_node( Event e,int x,int y)
	{
		node n = null;
		
		if( site_base != null )
		{
			n = site_base.locate_node(x,y);
			if( n == null )
			{
				if( last_node != null )
					n = last_node.locate_node(x,y);
			}
		}
		
		if( n != null )
		{
			moved_node = n;
			return( true );
		}
		
		moved_node = null;
		return( false );
	}

	/*************************************************
	*
	*  delete_node()	- Delete this node and all it's children
	*
	**************************************************/
	
	public boolean delete_node( Event e,int x,int y)
	{
		node n = null;
		
		if( site_base != null )
		{
			n = site_base.locate_node(x,y);
			if( n == null )
			{
				if( last_node != null )
					n = last_node.locate_node(x,y);
			}
		}
		
		if( n == null )
			return( false );		// Nothing to do
			
		// Ok we have something to do make this node and all it's children
		// disappear
		
		n.delete_node();
		if( n == site_base )
			site_base = null;
		if( n == last_node )
			last_node = null;
		if( n == moved_node )
			moved_node = null;
			
		n = null;
		return( true );
	}
	
	/*************************************************
	*
	*  CONNECT NODE	- Determine if this is the first or second pass
	*
	*	First pass just mark node selected (p,c node == NULL)
	*     Second pass determine if allowed and do connection
	*	NOTE:Return FALSE on first pass
	*
	**************************************************/
	
	public boolean connect_node( Event e,int x,int y)
	{
		// (1) First or second pass ?
		
		if( pnode == null && cnode == null )
		{
			if( site_base != null )
				pnode = site_base.locate_node(x,y);
			
			if( pnode == null )
				return( false );		// Nothing to do
			else
			{
				pnode.select();
				return( false );
			}
		}
		
		// (2) Second pass - get child node and determine if this is allowed
		// NOTE CHID node must belong to last_node 

		if( last_node != null )
					cnode = last_node.locate_node(x,y);
		
		if( cnode != null )
		{
			cnode.select();
			
		// Is this allowed ? 
			if( !connection[pnode.node_type()][cnode.node_type()] 	)
			{	
				Alert err;
				err = new Alert("WARNING","Connection not allowed");
				pnode.show();
				cnode.show();
				pnode = null;
				cnode = null;
				return( false );
			}
			
			if( cnode.parent != null )
			{	
				Alert err;
				err = new Alert("WARNING","Already connected");
				pnode.show();
				cnode.show();
				pnode = null;
				cnode = null;
				return( false );
			}
			
			pnode.add_child( cnode );
			cnode.add_parent( pnode );
			
			pnode.show();
			cnode.show();
			cnode = null;
			pnode = null;
			last_node = null;		// Disconnect it
			return( true );
		}
		
		return( false );
	}

	/*************************************************
	*
	*  DISCONNECT NODE	- Disconnect this node from present location
	*
	*	If we are on a node disconnect it from parent and
	*	attach it to last_node
	*
	**************************************************/
	
	public boolean disconnect_node( Event e,int x,int y)
	{
		// (1) Are we on a connected node ?
		
		if( site_base != null )
		{
				last_node = site_base.locate_node( x,y );
		
			if( last_node != null )
			{
				pnode = last_node.parent;
				last_node.clear();
				pnode.delete_child( last_node );
				last_node.delete_parent();
				pnode = null;
				last_node.show();
				return( true );
			}
		}			
		
		return( false );
	}
	
	/*************************************************
	*
	*  info_node()	- Get information on node & set it
	*
	**************************************************/
	
	public boolean info_node( Event e,int x,int y)
	{
		node n = null;
		
		if( site_base != null )
		{
			n = site_base.locate_node(x,y);
			if( n == null )
			{
				if( last_node != null )
					n = last_node.locate_node(x,y);
			}
		}
		
		if( n != null )		// We have a node get info
		{
			n.select();		// Show we have it
			n.info();
			n.show();		// Restore node
			return( true );
		}
		
		return( false );
	}
	

	/*************************************************
	*
	*  mouseDrag - If we have a moved_node then drag it
	*
	**************************************************/
	
	public boolean mouseDrag(Event e,int x, int y)
	{
		boolean result;
		node n;
		int type;
		
		// If not in MOVE then quit
		
		type = action_choices.getSelectedIndex();
		
		if( type != MOVE )
			return( false );

		// If we have a node nove it
		
		if( moved_node != null )
			moved_node.move_node(x,y);
			
		return( true );
	}
	
	/*************************************************
	*
	*  mouseUp - If we have a moved_node then restore it
	*
	**************************************************/
	
	public boolean mouseUp(Event e,int x, int y)
	{
		boolean result;
		node n;
		int type;
		
		// If not in MOVE then quit
		
		type = action_choices.getSelectedIndex();
		
		if( type != MOVE )
			return( false );

		// If we have a node restore it
		
		if( moved_node != null )
		{
			moved_node.show();
			moved_node = null;
		}
			
		return( true );
	}

	/**************************************************
	*
	*  PAINT ROUTINE
	*
	**************************************************/
	
	public void paint( Graphics g )
	{
	
		Rectangle r = this.bounds();
		
		g.setColor(this.getBackground());
		g.fillRect(r.x,r.y,r.width,r.height);
		
		// This must be done or the menu items disappear
		
		if( clear_button != null )
			clear_button.show();
		if( type_choices != null )
			type_choices.show();
		if( action_choices != null )
			action_choices.show();
		
		if( site_base != null )
			site_base.show();
		if( last_node != null )
			last_node.show();
			
		this.show();			// Show what we have done
	}

			
    /** Returns a text description of the applet.
     */
	public String getAppletInfo()
	{
		// Return a String containing author, version, copyright, 
		// and other information.
		
		return NAME + " Version " + VERSION;
	}
}


Added JavaPlanner/Planning/Nodes/Dialog/node_dialog.java.



>
1
import java.applet.Applet; import java.awt.*;  /*********************************************************** * *  This is the node information dialog * Remove LBU period (we have a special one for that) * ************************************************************/  public class node_dialog extends Frame  {  	// Window components 	 	TextField name; 	TextField address; 	TextField sys; 	TextField unit_num; 	TextField unit_location; 	TextField local_phone; 	TextField local_fax; 	Button ok; 	Button cancel; 	 	node n;							// Node we are working on 	 	public node_dialog(String title) 	{ 		// (1) Set title & layout 		 		super( title ); 		setLayout(new GridLayout(8,2)); 				 	} 	 	public boolean show( node me ) 	{ 		n = me; 		 		/* 1) With the node information build the textfields in the window */ 		 		add(new Label("Site Name: ")); 		name = new TextField(""+node.site_name);	// Row 1 		add( name );  		add( new Label("Site Address: "));		// Row 2 		address = new TextField(""+node.site_address); 		add( address ); 		 		add(new Label("System: "));				// ROW 3 		sys = new TextField(""+node.system,5); 		add( sys ); 		 		add(new Label("Unit: "));					// ROW 4	 		unit_num = new TextField(""+n.unit,5); 		add( unit_num );  		add(new Label("Location: "));				// ROW 5 		unit_location = new TextField(n.location,30); 		add(unit_location);  		add( new Label("Phone: "));				// ROW 6 		local_phone = new TextField(node.phone,16); 		add( local_phone ); 		 		add( new Label("FAX: "));					// ROW 7 		local_fax = new TextField(node.fax,16); 		add(local_fax); 		 		ok = new Button( "OK" );					// ROW 8 		cancel = new Button("CANCEL"); 		add(ok); 		add( cancel ); 		 		 		/* Display the thing at the normal position */ 		 		this.reshape(50,50,400,220); 		this.show(); 		return( true ); 	} 	 	// Called when user clicks a button or chooses a menu 	public boolean action( Event event,Object arg) 	{ 		int unit = 0; 		int save_unit;	 		 		if( event.target == cancel )	// CANCEL BUTTON 		{	 			this.dispose();				 			return(false); 		} 		 		if( event.target == ok ) 		{ 			// Ok, pull the fields and change them 			// Note first do the local fields 			// Check for duplicate unit # 			 			try{ unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; } 			 			save_unit = n.unit; 			if( unit != n.unit && n.setUnit( unit ) == false ) 			{ 					Alert a = new Alert("ERROR","Duplicate Unit #"); 					this.dispose(); 					return( false ); 			} 		 			n.location = unit_location.getText(); 			try{ n.unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; }  			//n.period = 1;					// DEFAULT value 			 			// Now do the node class fields 			 			node.site_name = name.getText(); 			node.site_address = address.getText(); 			 			try { node.system = Integer.parseInt( sys.getText() ); } 			catch( NumberFormatException x) { n.system = 0; } 			 			node.phone = local_phone.getText(); 			node.fax = local_fax.getText(); 			 			// Pitch the dialog and return with node re-written 			 			this.dispose(); 			 			n.show(); 			 			return( true ); 		} 		 		return( false ); 	} 	 	// Close window on click of GO-AWAY box 	 	public boolean handleEvent( Event e) 	{ 		if( e.id == Event.WINDOW_DESTROY ) 		{ 			this.dispose(); 			return( true ); 		} 		else 			return( super.handleEvent(e) );		// Let big brother do it 	}  } 

Added JavaPlanner/Planning/Nodes/Dialog/node_dialog_g2.java.



>
1
import java.applet.Applet; import java.awt.*;  /*********************************************************** * *  This is the node information dialog for the G2 *  Add LBU period *  20 Jan 98  Add WX LBU types * ************************************************************/  public class node_dialog_g2 extends Frame  {  	// Window components 	 	TextField name; 	TextField address; 	TextField sys; 	TextField unit_num; 	TextField unit_location; 	TextField local_phone; 	TextField local_fax; 	TextField G2_period; 	Button ok; 	Button cancel; 	Choice type; 	 	G2 n;							// Node we are working on 	 	public node_dialog_g2(String title) 	{ 		// (1) Set title & layout 		 		super( title ); 		setLayout(new GridLayout(9,2)); 				 	} 	 	public boolean show( node me ) 	{ 		n = (G2) me; 		 		/* 1) With the node information build the textfields in the window */ 		 		add(new Label("Site Name: ")); 		name = new TextField(""+node.site_name);	// Row 1 		add( name );  		add( new Label("Site Address: "));		// Row 2 		address = new TextField(""+node.site_address); 		add( address ); 		 		add(new Label("System: "));				// ROW 3 		sys = new TextField(""+node.system,5); 		add( sys ); 		 		add(new Label("Unit: "));					// ROW 4	 		unit_num = new TextField(""+n.unit,5); 		add( unit_num );  		add(new Label("Location: "));				// ROW 5 		unit_location = new TextField(n.location,30); 		add(unit_location);  		type = new Choice();						// ROW 6 		type.addItem("Standard"); 		type.addItem("Standard+WX"); 		add( new Label("G2 Type - Select")); 		type.select( n.g2_type); 		add( type ); 				 		add( new Label("Phone: "));				// ROW 7 		local_phone = new TextField(node.phone,16); 		add( local_phone ); 		 		add( new Label("FAX: "));					// ROW 8 		local_fax = new TextField(node.fax,16); 		add(local_fax); 		 		ok = new Button( "OK" );					// ROW 9 		cancel = new Button("CANCEL"); 		add(ok); 		add( cancel ); 		 		/* Display the thing at the normal position */ 		 		this.reshape(50,50,400,220); 		this.show(); 		return( true ); 	} 	 	// Called when user clicks a button or chooses a menu 	public boolean action( Event event,Object arg) 	{	 		int unit = 0; 		int save_unit;	 		if( event.target == cancel )		// CANCEL BUTTON 		{	 			this.dispose();				 			return(false); 		} 		 		if( event.target == ok ) 		{ 			n.clear();				// Remove the old one 			 			// Ok, pull the fields and change them 			// Note first do the local fields 			// Check for duplicate unit # 			 			try{ unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; } 			 			save_unit = n.unit; 			if( unit != n.unit && n.setUnit( unit ) == false ) 			{ 					Alert a = new Alert("ERROR","Duplicate Unit #"); 					this.dispose(); 					return( false ); 			} 		 			n.location = unit_location.getText(); 			try{ n.unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; }  			// Now do the node class fields 			 			node.site_name = name.getText(); 			node.site_address = address.getText(); 			 			try { node.system = Integer.parseInt( sys.getText() ); } 			catch( NumberFormatException x) { n.system = 0; } 			 			node.phone = local_phone.getText(); 			node.fax = local_fax.getText(); 			 			n.g2_type = type.getSelectedIndex(); 			 			// Pitch the dialog and return with node re-written 			 			this.dispose(); 			 			n.show(); 			 			return( true ); 		} 		 		return( false ); 	} 	 	// Close window on click of GO-AWAY box 	 	public boolean handleEvent( Event e) 	{ 		if( e.id == Event.WINDOW_DESTROY ) 		{ 			this.dispose(); 			return( true ); 		} 		else 			return( super.handleEvent(e) );		// Let big brother do it 	}  } 

Added JavaPlanner/Planning/Nodes/Dialog/node_dialog_lbu.java.



>
1
import java.applet.Applet; import java.awt.*;  /*********************************************************** * *  This is the node information dialog *  Add LBU period *  20 Jan 98  Add WX LBU types * ************************************************************/  public class node_dialog_lbu extends Frame  {  	// Window components 	 	TextField name; 	TextField address; 	TextField sys; 	TextField unit_num; 	TextField unit_location; 	TextField local_phone; 	TextField local_fax; 	TextField lbu_period; 	Button ok; 	Button cancel; 	Choice type; 	 	lbu n;							// Node we are working on 	 	public node_dialog_lbu(String title) 	{ 		// (1) Set title & layout 		 		super( title ); 		setLayout(new GridLayout(10,2)); 				 	} 	 	public boolean show( node me ) 	{ 		n = (lbu) me; 		 		/* 1) With the node information build the textfields in the window */ 		 		add(new Label("Site Name: ")); 		name = new TextField(""+node.site_name);	// Row 1 		add( name );  		add( new Label("Site Address: "));		// Row 2 		address = new TextField(""+node.site_address); 		add( address ); 		 		add(new Label("System: "));				// ROW 3 		sys = new TextField(""+node.system,5); 		add( sys ); 		 		add(new Label("Unit: "));					// ROW 4	 		unit_num = new TextField(""+n.unit,5); 		add( unit_num );  		add(new Label("Location: "));				// ROW 5 		unit_location = new TextField(n.location,30); 		add(unit_location);  		add(new Label("LBU Period: (Minutes) "));	// ROW 6 		lbu_period = new TextField(""+lbu.period,5); 		add( lbu_period ); 		 		type = new Choice();						// ROW 7 		type.addItem("Standard"); 		type.addItem( "Site+Base"); 		type.addItem( "Site+Base+Modem"); 		type.addItem("Standard+WX"); 		type.addItem( "Site+Base+WX"); 		type.addItem( "Site+Base+Modem+WX"); 		add( new Label("LBU Type - Select")); 		type.select( n.lbu_type); 		add( type ); 				 		add( new Label("Phone: "));				// ROW 8 		local_phone = new TextField(node.phone,16); 		add( local_phone ); 		 		add( new Label("FAX: "));					// ROW 9 		local_fax = new TextField(node.fax,16); 		add(local_fax); 		 		ok = new Button( "OK" );					// ROW 10 		cancel = new Button("CANCEL"); 		add(ok); 		add( cancel ); 		 		 		/* Display the thing at the normal position */ 		 		this.reshape(50,50,400,220); 		this.show(); 		return( true ); 	} 	 	// Called when user clicks a button or chooses a menu 	public boolean action( Event event,Object arg) 	{	 		int unit = 0; 		int save_unit;	 		if( event.target == cancel )		// CANCEL BUTTON 		{	 			this.dispose();				 			return(false); 		} 		 		if( event.target == ok ) 		{ 			n.clear();				// Remove the old one 			 			// Ok, pull the fields and change them 			// Note first do the local fields 			// Check for duplicate unit # 			 			try{ unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; } 			 			save_unit = n.unit; 			if( unit != n.unit && n.setUnit( unit ) == false ) 			{ 					Alert a = new Alert("ERROR","Duplicate Unit #"); 					this.dispose(); 					return( false ); 			} 		 			n.location = unit_location.getText(); 			try{ n.unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; }  			try{ lbu.period = Integer.parseInt( lbu_period.getText()); } 			catch( NumberFormatException x){ lbu.period = 1; } 			 			// Now do the node class fields 			 			node.site_name = name.getText(); 			node.site_address = address.getText(); 			 			try { node.system = Integer.parseInt( sys.getText() ); } 			catch( NumberFormatException x) { n.system = 0; } 			 			node.phone = local_phone.getText(); 			node.fax = local_fax.getText(); 			 			n.lbu_type = type.getSelectedIndex(); 			 			// Pitch the dialog and return with node re-written 			 			this.dispose(); 			 			n.show(); 			 			return( true ); 		} 		 		return( false ); 	} 	 	// Close window on click of GO-AWAY box 	 	public boolean handleEvent( Event e) 	{ 		if( e.id == Event.WINDOW_DESTROY ) 		{ 			this.dispose(); 			return( true ); 		} 		else 			return( super.handleEvent(e) );		// Let big brother do it 	}  } 

Added JavaPlanner/Planning/Nodes/Dialog/node_dialog_relay.java.



>
1
import java.applet.Applet; import java.awt.*;  /*********************************************************** * *  This is the node information dialog *  Add RELAY period * ************************************************************/  public class node_dialog_relay extends Frame  {  	// Window components 	 	TextField name; 	TextField address; 	TextField sys; 	TextField unit_num; 	TextField unit_location; 	TextField local_phone; 	TextField local_fax; 	Button ok; 	Button cancel; 	Choice type; 	 	relay n;							// Node we are working on 	 	public node_dialog_relay(String title) 	{ 		// (1) Set title & layout 		 		super( title ); 		setLayout(new GridLayout(9,2)); 				 	} 	 	public boolean show( node me ) 	{ 		n = (relay) me; 		 		/* 1) With the node information build the textfields in the window */ 		 		add(new Label("Site Name: ")); 		name = new TextField(""+node.site_name);	// Row 1 		add( name );  		add( new Label("Site Address: "));		// Row 2 		address = new TextField(""+node.site_address); 		add( address ); 		 		add(new Label("System: "));				// ROW 3 		sys = new TextField(""+node.system,5); 		add( sys ); 		 		add(new Label("Unit: "));					// ROW 4	 		unit_num = new TextField(""+n.unit,5); 		add( unit_num );  		add(new Label("Location: "));				// ROW 5 		unit_location = new TextField(n.location,30); 		add(unit_location); 		 		type = new Choice();						// ROW 6 		type.addItem("Standard"); 		type.addItem( "Relay+Modem"); 		type.addItem( "Base" ); 		add( new Label("RELAY Type - Select")); 		type.select( n.relay_type); 		add( type ); 				 		add( new Label("Phone: "));				// ROW 7 		local_phone = new TextField(node.phone,16); 		add( local_phone ); 		 		add( new Label("FAX: "));					// ROW 8 		local_fax = new TextField(node.fax,16); 		add(local_fax); 		 		ok = new Button( "OK" );					// ROW 9 		cancel = new Button("CANCEL"); 		add(ok); 		add( cancel ); 		 		 		/* Display the thing at the normal position */ 		 		this.reshape(50,50,400,220); 		this.show(); 		return( true ); 	} 	 	// Called when user clicks a button or chooses a menu 	public boolean action( Event event,Object arg) 	{	 		int unit = 0; 		int save_unit;	 		if( event.target == cancel )		// CANCEL BUTTON 		{	 			this.dispose(); 			n.show();				 			return(false); 		} 		 		if( event.target == ok ) 		{ 			// Ok, pull the fields and change them 			// Note first do the local fields 			// Check for duplicate unit # 			 			try{ unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; } 			 			save_unit = n.unit; 			if( unit != n.unit && n.setUnit( unit ) == false ) 			{ 					Alert a = new Alert("ERROR","Duplicate Unit #"); 					this.dispose(); 					return( false ); 			} 		 			n.location = unit_location.getText(); 			try{ n.unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; }  			// Now do the node class fields 			 			node.site_name = name.getText(); 			node.site_address = address.getText(); 			 			try { node.system = Integer.parseInt( sys.getText() ); } 			catch( NumberFormatException x) { n.system = 0; } 			 			node.phone = local_phone.getText(); 			node.fax = local_fax.getText(); 			 			n.relay_type = type.getSelectedIndex(); 			 			// Pitch the dialog and return with node re-written 			 			this.dispose(); 			 			n.clear(); 			n.show(); 			 			return( true ); 		} 		 		return( false ); 	} 	 	// Close window on click of GO-AWAY box 	 	public boolean handleEvent( Event e) 	{ 		if( e.id == Event.WINDOW_DESTROY ) 		{ 			this.dispose(); 			return( true ); 		} 		else 			return( super.handleEvent(e) );		// Let big brother do it 	} } 

Added JavaPlanner/Planning/Nodes/G1.java.



>
1
// G1.java  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * * G1 Object * 29 Sept 1997 Add translate for scroll * ************************************************************/  public class G1 extends node { 	 	public void create(int x,int y,int sys,Canvas win) 	{ 		this.create_full(x,y,sys,this.getUnit(),win); 	} 	 	public void create_full( int x,int y,int sys,int u,Canvas win) 	{		 		cur_x = x - org_x; 		cur_y = y - org_y; 		draw_x = x; 		draw_y = y; 		node.system = sys; 		unit = u; 		this.markUnit(); 		dw = win; 		size = 10; 				 		this.show(); 		 	}	  	public void draw_node( int type )  	{ 		Graphics g = dw.getGraphics(); 		String u_string; 		metric m;  		// (1) Set the color 		 		switch( type ) { 			 		case NORMAL:	g.setColor( Color.black ); 						break; 						 		case CLEAR:	g.setColor( dw.getBackground() ); 						break; 						 		case SELECTED: g.setColor( Color.gray ); 						break; 		} 		 		// (1a) Draw the connection to parent if any 		 		if( parent != null ) 		{ 			m = new metric( this,parent); 			g.drawLine( m.x1,m.y1,m.x2,m.y2); 		} 		 		 		// (2) Draw it 					 		g.drawOval(draw_x,draw_y,size,size); 		g.fillOval(draw_x,draw_y,size,size); 		g.drawString("G1",draw_x,draw_y-5); 		 		// (3) Do the unit #  		 		u_string = "" + unit; 		g.drawString( u_string,draw_x+size+2,draw_y+size/2); 		 	} 	 	/************************************************************ 	* 	*  DELETE_NDOE - This deletes this node and all it's children 	* 	*************************************************************/ 	 	public void delete_node( ) 	{ 		// Remove unit number from list 		 		this.removeUnit(  ); 		 		// Remove the data 		 		super.delete_node(); 	} 		 	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( node.G1 );		// 3 = G1 	}  	public String node_name() 	{ 		return( "G1" ); 	} 	 	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public int getUnit( ) 	{ 		int i; 	 		i =	this.low_getUnit(node.g_nums,1); 	 		return( i ); 	} 	 	public void markUnit( ) 	{ 		this.low_markUnit(this.unit,node.g_nums,1); 	} 	 	public void removeUnit( ) 	{ 		this.low_removeUnit(this.unit,node.g_nums,1); 	}  	public boolean setUnit( int num ) 	{ 		boolean result; 		 		result = low_setUnit( num,node.g_nums,1); 		return( result ); 	}  	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this G1 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		//this.Qprint(item+ " "," "," ","G1 UNIT - "+unit+" "+parent.location," ",out); 		this.Qprint(" ","1","G-1 UNIT "+unit,"Groundhog Wireless Volume Counter","1075",out); 		return( item+1); 	}  } 

Added JavaPlanner/Planning/Nodes/G2.java.



>
1
//G2.java  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * * G2 Object *  29 Sept 1997 Add translate for scroll *  14-Feb-98	Add Quote generator *  16-Feb-98   Add G2 types * ************************************************************/  public class G2 extends node {  	static public final int STANDARD = 0; 	static public final int WX = 1;  	public int g2_type = STANDARD;				// Type of G2 	 	public void create( int x,int y,int sys,Canvas win) 	{ 		this.create_full(x,y,sys,this.getUnit(),win);		 	} 		 	public void create_full( int x,int y,int sys,int u,Canvas win) 	{		 		cur_x = x - org_x; 		cur_y = y - org_y; 		draw_x = x; 		draw_y = y; 		node.system = sys; 		unit = u; 		this.markUnit(); 		dw = win; 		size = 15;		// New size of G2 				 		this.show(); 	}  	public void draw_node( int type )  	{ 		Graphics g = dw.getGraphics(); 		String u_string; 		metric m; 	 		// (1) Set the color 		 		switch( type ) { 			 		case NORMAL:	g.setColor( Color.black ); 						break; 						 		case CLEAR:	g.setColor( dw.getBackground() ); 						break; 						 		case SELECTED: g.setColor( Color.gray ); 						break; 		} 		 		// (1a) Draw the connection to parent if any 		 		if( parent != null ) 		{ 			m = new metric( this,parent); 			g.drawLine( m.x1,m.y1,m.x2,m.y2); 		} 		 		// (2) Draw it 					 		g.drawOval(draw_x,draw_y,size,size); 		g.fillOval(draw_x,draw_y,size,size); 		switch( g2_type ) 		{ 			case STANDARD:		g.drawString("G2",draw_x,draw_y-5); 								break; 								 			case WX:			g.drawString("G2-WX",draw_x,draw_y-5); 								break; 		} 		 		// (3) Do the unit #  		 		u_string = "" + unit; 		g.drawString( u_string,draw_x+size+2,draw_y+size/2); 		 	}  	/******************************************************************** 	* 	*  INFO	- Show dialog with node information to user 	* 	*  ALLOW IT TO BE CHANGED 	* 	*********************************************************************/ 	 	public void info() 	{ 		node_dialog_g2 n; 		String title; 		 		// (1) Build the title 		 		title = this.node_name(); 		 		title = title + unit; 		 		n = new node_dialog_g2(title); 		n.show(this); 	}  	/************************************************************ 	* 	*  DELETE_NDOE - This deletes this node and all it's children 	* 	*************************************************************/ 	 	public void delete_node( ) 	{ 		// Remove unit number from list 		 		this.removeUnit( ); 		 		// Remove the data 		 		super.delete_node(); 	} 	 	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( node.G2 );		// 4= G2 	}  	public String node_name() 	{ 		return( "G2" ); 	} 	 	public int get_g2_type( ) 	{ 		return( g2_type ); 	}  	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public int getUnit( ) 	{ 		int i; 	 		i =	this.low_getUnit(node.g_nums,1); 	 		return( i ); 	} 	 	public void markUnit( ) 	{ 		this.low_markUnit(this.unit,node.g_nums,1); 	} 	 	public void removeUnit( ) 	{ 		this.low_removeUnit(this.unit,node.g_nums,1); 	}  	public boolean setUnit( int num ) 	{ 		boolean result; 		 		result = low_setUnit( num,node.g_nums,1); 		return( result ); 	} 	 	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this G2 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		//this.Qprint(item+ " "," "," ","G2 UNIT - "+unit+" "+parent.location," ",out); 		switch( g2_type ) { 			 			case STANDARD:	this.Qprint(item+" ","1","G-2 UNIT "+unit, 								"Groundhog Wireless Volume Counter/Classifier","1895",out); 							break; 							 			case WX:		this.Qprint(item+" ","1","G-2 UNIT "+unit, 								"Groundhog Counter/Classifier with Weather","1995",out); 							break; 		} 							 		return( item+1); 	} } 

Added JavaPlanner/Planning/Nodes/base.java.



>
1
// Base.java  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * *  BASE - This is the base station object * 19 Sep 1997 Add translate to draw * ************************************************************/  public class base extends node {  	public void create( int x,int y,int sys,Canvas win) 	{ 		this.create_full(x,y,sys,200,win); 	} 	 	public void create_full( int x,int y,int sys,int u,Canvas win) 	{ 		int i; 				 		cur_x = x - org_x; 		cur_y = y - org_y; 		draw_x = x; 		draw_y = y; 		 		node.system = sys; 		unit = u; 		dw = win; 		size = 30; 		 		// Reset all the numbers 		 		for( i=0; i<node.g_nums.length; i++ ) 			node.g_nums[i] = false;  		for( i=0; i<node.l_nums.length; i++ ) 			node.l_nums[i] = false;  		for( i=0; i<node.r_nums.length; i++ ) 			node.r_nums[i] = false; 				 		this.show(); 		 	}  	/* This class actuallly draws the image 	     CLEAR is TRUE or FALSE 	     IF TRUE then draw the image in color 	     IF FALSE then clear the image 	*/  	public void draw_node( int type ) 	{ 		Graphics g = dw.getGraphics(); 		String u_string; 		metric m; 		FontMetrics fm; 		int x,y; 	 		// (1) Set the color 		 		switch( type ) { 			 		case NORMAL:	g.setColor( Color.red ); 						break; 						 		case CLEAR:	g.setColor( dw.getBackground() ); 						break; 						 		case SELECTED: g.setColor( Color.gray ); 						break; 		} 		 		// (1a) Draw the connection to parent if any 		 		if( parent != null ) 		{ 			m = new metric( this,parent); 			g.drawLine( m.x1,m.y1,m.x2,m.y2); 		} 		 		// (2) Draw it 		 		g.drawRect(draw_x,draw_y,size,size); 		g.drawString("BASE",draw_x,draw_y-5); 		 		// (3) Do the unit #  		 		fm = g.getFontMetrics(); 		u_string = "" + unit; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = draw_y + fm.getHeight() - 5; 		g.drawString( u_string,x,y); 		 		u_string = "" + system; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = y + fm.getHeight(); 		g.drawString( u_string,x,y); 		 	}			  	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( node.BASE );		// 0 = BASE 	} 	 	public String node_name() 	{ 		return( "BASE" ); 	}  	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public int getUnit( ) 	{ 		return( 200 ); 	} 	 	public void markUnit( ) 	{ 	} 	 	public void removeUnit( ) 	{ 	}  	public boolean setUnit( int num ) 	{ 		return( true ); 	} 	 	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this BASE 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	*			win	- Window for display stuff 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		this.Qprint(item+ " "," "," ","Base "+location," ",out); 		this.Qprint(" ","1","BSR-2","Base Station Repeater Cabinet","2100",out); 		this.Qprint(" ","1","SG-30","Solar Generator Panel 30W","690",out); 		this.Qprint(" ","50","AC-41N","Antenna Feed Line Cable","1.55",out); 		this.Qprint(" ","1","BA-03","Base Station Antenna 3dB","195",out); 		this.Qprint(" ","1","AT-20","Self Supporting Tower 20ft","390",out); 		this.Qprint(" ","1","BSM-2","Base Station Master Computer","5800",out); 		this.Qprint(" ","1","WDM","Wireless Data Management","1250",out); 		this.Qprint(" ","1","MRC-2","Master RFM/CPU Interface","150",out); 		this.Qprint(" ","1","RPM28.8","Remote Polling Modem","395",out);		 		return( item+1); 	}  } 

Added JavaPlanner/Planning/Nodes/fbase.java.

























































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
// FBase.java

import java.applet.Applet;
import java.awt.*;
import java.io.*;

/************************************************************
*
*  BASE - This is the base station object
* 19 Sep 1997 Add translate to draw
*
************************************************************/

public class fbase extends node {

	public void create( int x,int y,int sys,Canvas win)
	{
		this.create_full(x,y,sys,1,win);
	}
	
	public void create_full( int x,int y,int sys,int u,Canvas win)
	{
		int i;
				
		cur_x = x - org_x;
		cur_y = y - org_y;
		draw_x = x;
		draw_y = y;
		
		node.system = sys;
		unit = u;
		dw = win;
		size = 30;
		
		// Reset all the numbers
		
		for( i=0; i<node.node_nums.length; i++ )
			node.node_nums[i] = false;
				
		this.show();
		
	}

	/* This class actuallly draws the image
	     CLEAR is TRUE or FALSE
	     IF TRUE then draw the image in color
	     IF FALSE then clear the image
	*/

	public void draw_node( int type )
	{
		Graphics g = dw.getGraphics();
		String u_string;
		metric m;
		FontMetrics fm;
		int x,y;
	
		// (1) Set the color
		
		switch( type ) {
			
		case NORMAL:	g.setColor( Color.red );
						break;
						
		case CLEAR:	g.setColor( dw.getBackground() );
						break;
						
		case SELECTED: g.setColor( Color.gray );
						break;
		}
		
		// (1a) Draw the connection to parent if any
		
		if( parent != null )
		{
			m = new metric( this,parent);
			g.drawLine( m.x1,m.y1,m.x2,m.y2);
		}
		
		// (2) Draw it
		
		g.drawRect(draw_x,draw_y,size,size);
		g.drawString("FBASE",draw_x,draw_y-5);
		
		// (3) Do the unit # 
		
		fm = g.getFontMetrics();
		u_string = "" + unit;
		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2;
		y = draw_y + fm.getHeight() - 5;
		g.drawString( u_string,x,y);
		
		u_string = "" + system;
		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2;
		y = y + fm.getHeight();
		g.drawString( u_string,x,y);
		
	}			

	/***********************************************************
	*
	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one
	*
	***********************************************************/
	
	public int node_type()
	{
		return( node.FBASE );		// 0 = BASE
	}
	
	public String node_name()
	{
		return( "FBASE" );
	}

	/*********************************************************************
	*
	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units
	*
	**********************************************************************/
	
	public int getUnit( )
	{
		return( 1 );
	}
	
	public void markUnit( )
	{
	}
	
	public void removeUnit( )
	{
	}

	public boolean setUnit( int num )
	{
		return( true );
	}
	
	/*********************************************************************
	*
	*  QUOTE GENERATOR - Generate the stuff for this BASE
	*
	*	INPUT:	item	- Item count for this thing
	*			out	- Output file stream
	*			win	- Window for display stuff
	*
	*	OUTPUT:	Item number advanced
	*
	**********************************************************************/

	int Qgen( int item,PrintStream out )
	{
		// Write the stuff in the file
	/*	
		this.Qprint(item+ " "," "," ","Base "+location," ",out);
		this.Qprint(" ","1","BSR-2","Base Station Repeater Cabinet","2100",out);
		this.Qprint(" ","1","SG-30","Solar Generator Panel 30W","690",out);
		this.Qprint(" ","50","AC-41N","Antenna Feed Line Cable","1.55",out);
		this.Qprint(" ","1","BA-03","Base Station Antenna 3dB","195",out);
		this.Qprint(" ","1","AT-20","Self Supporting Tower 20ft","390",out);
		this.Qprint(" ","1","BSM-2","Base Station Master Computer","5800",out);
		this.Qprint(" ","1","WDM","Wireless Data Management","1250",out);
		this.Qprint(" ","1","MRC-2","Master RFM/CPU Interface","150",out);
		this.Qprint(" ","1","RPM28.8","Remote Polling Modem","395",out);		
		return( item+1);
*/
            return 0;
	}

}

Added JavaPlanner/Planning/Nodes/lbu.java.



>
1
// LBU.java  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * * LBU Local base unit object * 29 Sept 1997 Add translate for scroll *  8 Oct 97 Add special get info with period for LBU *  8 Oct 97 Make period class var for LBU's so they will all have the same *  3 Nov 97 Add TYPE to this item so it can show various types * 20 Jan 98 Add LBU with weather (WX) * ************************************************************/  public class lbu extends node {  	static public int period;			// Node period in minutes 	 	static public final int STANDARD = 0; 	static public final int SITE_BASE = 1; 	static public final int SITE_BASE_MODEM = 2; 	 	// Make types in order 	 	static public final int STANDARD_WX = 3; 	static public final int SITE_BASE_WX = 4; 	static public final int SITE_BASE_MODEM_WX = 5;  	public int lbu_type = lbu.STANDARD;					// Type of LBU 	 	public void create( int x,int y,int sys,Canvas win) 	{		 		this.create_full( x,y,sys,this.getUnit(),win);		 	} 	 	public void create_full( int x,int y,int sys,int u,Canvas win) 	{		 		cur_x = x - org_x; 		cur_y = y - org_y; 		draw_x = x; 		draw_y = y; 		node.system = sys; 		unit = u; 		this.markUnit(); 		dw = win; 		size = 30; 		period = 1;				// Set default period 				 		this.show(); 		 	} 		 	public void draw_node( int type )  	{ 		Graphics g = dw.getGraphics(); 		String u_string; 		metric m; 		FontMetrics fm; 		int x,y; 		String s; 		Color draw_color = Color.magenta; 		int stored_type = lbu_type; 		int i; 	 		// (1) Set the color 		 		switch( type ) { 			 		case NORMAL:	draw_color = Color.magenta; 						break; 						 		case CLEAR:	draw_color = dw.getBackground(); 						//lbu_type = SITE_BASE_MODEM; 						break; 						 		case SELECTED: draw_color = Color.gray; 						break; 		} 		 		g.setColor( draw_color );  		// (1a) Draw the connection to parent if any 		//  If NORMAL then change connection color on MODEM 		// units, on std unit leave magenta 		 		if( parent != null ) 		{ 			m = new metric( this,parent); 			if( type == NORMAL ) 			{ 				switch( lbu_type ) { 					 					case lbu.STANDARD: 					case lbu.STANDARD_WX:	break; 					 					default:	g.setColor( Color.green ); 				} 			} 				 			g.drawLine( m.x1,m.y1,m.x2,m.y2); 			g.setColor( draw_color ); 		} 				 		// (2) Draw it 		 		// Note depending on type put in 1 or 2 background offset 		// boxes to show BASE & BASE+MODEM 		 		i = lbu_type; 		if( lbu_type >= STANDARD_WX ) 		{ 			i = i - STANDARD_WX; 		} 		 		switch( i ) { 			 			case SITE_BASE:	g.drawRoundRect(draw_x,draw_y-2, 									size,size,20,20); 								break; 								 			case SITE_BASE_MODEM:g.drawRoundRect(draw_x,draw_y-2, 									size,size,20,20); 								   g.drawRoundRect(draw_x,draw_y-4, 									size,size,20,20); 									break; 		} 		 		g.drawRoundRect(draw_x,draw_y,size,size,20,20); 		 		if( location.length() == 0 ) 			g.drawString("LBU",draw_x,draw_y-5); 		else 		{ 			g.setColor( dw.getBackground() ); 			g.drawString("LBU",draw_x,draw_y-5); 			g.setColor( draw_color ); 			try{ s = location.substring(0,8); } 			catch( StringIndexOutOfBoundsException ob)  			{ s = location; } 			g.drawString(s,draw_x,draw_y - 5); 		} 		 		// Show a weather unit 		 		if( lbu_type >= STANDARD_WX ) 			g.drawString("WX",draw_x+5,draw_y+40);  		// (3) Do the unit #  		 		fm = g.getFontMetrics(); 		u_string = "" + unit; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = draw_y + fm.getHeight() - 4; 		g.drawString( u_string,x,y); 		 		u_string = "" + system; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = y + fm.getHeight(); 		g.drawString( u_string,x,y);  		lbu_type = stored_type; 	} 	 	/******************************************************************** 	* 	*  INFO	- Show dialog with node information to user 	* 	*  ALLOW IT TO BE CHANGED 	* 	*********************************************************************/ 	 	public void info() 	{ 		node_dialog_lbu n; 		String title; 		 		// (1) Build the title 		 		title = this.node_name(); 		 		title = title + unit; 		 		n = new node_dialog_lbu(title); 		n.show(this); 	} 	 	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( node.LBU );		// 2 = LBU 	} 	 	public String node_name() 	{ 		return( "LBU" ); 	} 	 	public int get_lbu_type( ) 	{ 		return( lbu_type ); 	} 	 	/************************************************************ 	* 	*  DELETE_NDOE - This deletes this node and all it's children 	* 	*************************************************************/ 	 	public void delete_node( ) 	{ 		// Remove unit number from list 		 		this.removeUnit(); 		 		// Remove the data 		 		super.delete_node(); 	} 		 	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public int getUnit( ) 	{ 		int i; 	 		i =	this.low_getUnit(node.l_nums,101); 	 		return( i ); 	} 	 	public void markUnit( ) 	{ 		this.low_markUnit(this.unit,node.l_nums,101); 	} 	 	public void removeUnit( ) 	{ 		this.low_removeUnit(this.unit,node.l_nums,101); 	}  	public boolean setUnit( int num ) 	{ 		boolean result; 		 		result = low_setUnit( num,node.l_nums,101); 		return( result ); 	}  	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this G2 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		this.Qprint(item+ " "," "," ","LBU "+location," ",out); 		this.Qprint(" ","1","BSR-2","Base Station Repeater Cabinet","2100",out); 		this.Qprint(" ","50","AC-41N","Antenna Feed Line Cable","1.55",out); 		this.Qprint(" ","1","SG-30","Solar Generator Panel 30W","690",out); 		this.Qprint(" ","1","BA-03","Base Station Antenna 3dB","195",out); 		this.Qprint(" ","1","AT-20","Self Supporting Tower 20ft","390",out); 		 		switch( lbu_type ) { 			 			case STANDARD: 			case SITE_BASE:			break;			// Nothing extra 			 			case SITE_BASE_MODEM:		this.Qprint(" ","1","RPM28.8","Remote Polling Modem","395",out); 										break; 			 			case STANDARD_WX:							 			case SITE_BASE_WX:			this.Qprint(" ","1","WX-1","Weather Station w/Precip","7200",out); 										break; 										 			case SITE_BASE_MODEM_WX:	this.Qprint(" ","1","RPM28.8","Remote Polling Modem","395",out); 										this.Qprint(" ","1","WX-1","Weather Station w/Precip","7200",out); 										break; 			} 		 		return( item+1 ); 	}  } 

Added JavaPlanner/Planning/Nodes/node.java.

cannot compute difference between binary files

Added JavaPlanner/Planning/Nodes/relay.java.



>
1
// Relay.java  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * * RELAY Relay object *  29 Sept 1997 Add translate for scroll *    4 Nov 1997 Add code to handle various types of RELAY's *                                                    STD *						        MODEM (really a base station) * ************************************************************/  public class relay extends node {  	static public final int RELAY_STANDARD	=0;		// Regular relay station 	static public final int RELAY_MODEM		=1;		// Station with modem 	static public final int RELAY_BASE		=2;		// Base station type 	 	public int relay_type = relay.RELAY_STANDARD;		// Relay type  	public void create( int x,int y,int sys,Canvas win) 	{ 		this.create_full( x,y,sys,this.getUnit(),win); 	} 	 	public void create_full( int x,int y,int sys,int u,Canvas win) 	{	 		draw_x = x; 		draw_y = y;	 		cur_x = x - org_x; 		cur_y = y - org_y; 		node.system = sys; 		unit = u; 		this.markUnit(); 		dw = win; 		size = 30; 				 		this.show(); 		 	} 		 	public void draw_node( int type )  	{ 		Graphics g = dw.getGraphics(); 		String u_string; 		metric m; 		FontMetrics fm; 		int x,y; 		String s; 		Color draw_color = Color.blue; 		int stored_type = relay_type;  		// (1) Set the color 		 		switch( type ) { 			 		case NORMAL:	draw_color = Color.blue; 						break; 						 		case CLEAR:	draw_color = dw.getBackground(); 						//relay_type = RELAY_MODEM; 						break; 						 		case SELECTED: draw_color = Color.gray; 						break; 		} 		g.setColor( draw_color ); 		 		// (1a) Draw the connection to parent if any 		 		if( parent != null ) 		{ 			m = new metric( this,parent); 			 			// Set color of connecting line depending on type in std draw 			 			if( type == NORMAL ) 			{ 				switch( relay_type ) { 					 					case relay.RELAY_STANDARD:	break; 					 					case relay.RELAY_MODEM:		g.setColor( Color.green ); 												break; 												 					case relay.RELAY_BASE:		g.setColor( Color.yellow ); 												break; 				} 			} 			g.drawLine( m.x1,m.y1,m.x2,m.y2); 			g.setColor( draw_color ); 		} 							 		// (2) Draw it  		// Note depending on type put in 1 or 2 background offset 		// boxes to show BASE & BASE+MODEM 		 		switch( relay_type ) { 		 			case RELAY_STANDARD:		g.drawOval(draw_x,draw_y,size,size); 										break; 			 			case RELAY_MODEM:			g.drawOval(draw_x,draw_y-2, 											size,size); 										g.drawOval(draw_x,draw_y-4, 											size,size); 										break; 								 			case RELAY_BASE:			g.drawRect(draw_x,draw_y,size,size); 										g.drawOval(draw_x,draw_y,size,size); 										break;  		} 					 		if( location.length() == 0 ) 			g.drawString("RELAY",draw_x,draw_y-5); 		else 		{ 			g.setColor( dw.getBackground() ); 			g.drawString("RELAY",draw_x,draw_y-5); 			g.setColor( draw_color ); 			try{ s = location.substring(0,8); } 			catch( StringIndexOutOfBoundsException ob)  			{ s = location; } 			g.drawString(s,draw_x,draw_y - 5); 		} 		 		// (3) Do the unit #  		 		fm = g.getFontMetrics(); 		u_string = "" + unit; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = draw_y + fm.getHeight() - 5; 		g.drawString( u_string,x,y); 		 		u_string = "" + system; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = y + fm.getHeight(); 		g.drawString( u_string,x,y);  		relay_type = stored_type; 	}  	/************************************************************ 	* 	*  DELETE_NDOE - This deletes this node and all it's children 	* 	*************************************************************/ 	 	public void delete_node( ) 	{ 		// Remove unit number from list 		 		this.removeUnit( ); 		 		// Remove the data 		 		super.delete_node(); 	} 	 	/******************************************************************** 	* 	*  INFO	- Show dialog with node information to user 	* 	*  ALLOW IT TO BE CHANGED 	* 	*********************************************************************/ 	 	public void info() 	{ 		node_dialog_relay n; 		String title; 		 		// (1) Build the title 		 		title = this.node_name(); 		 		title = title + unit; 		 		n = new node_dialog_relay(title); 		n.show(this); 	} 	 		 	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( node.RELAY );		// 1 = RELAY 	} 	 		public String node_name() 	{ 		return( "RELAY" ); 	} 	 	public int get_relay_type( ) 	{ 		return( relay_type ); 	}  	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public int getUnit( ) 	{ 		int i; 	 		i =	this.low_getUnit(node.r_nums,60); 	 		return( i ); 	} 	 	public void markUnit( ) 	{ 		this.low_markUnit(this.unit,node.r_nums,60); 	} 	 	public void removeUnit( ) 	{ 		this.low_removeUnit(this.unit,node.r_nums,60); 	}  	public boolean setUnit( int num ) 	{ 		boolean result; 		 		result = low_setUnit( num,node.r_nums,60); 		return( result ); 	}  	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this RELAY 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		this.Qprint(item+" "," "," ","Relay "+location," ",out); 		this.Qprint(" ","1","BSR-2","Base Station Repeater Cabinet","2100",out); 		this.Qprint(" ","1","SG-30","Solar Generator Panel 30W","690",out); 		this.Qprint(" ","50","AC-41N","Antenna Feed Line Cable","1.55",out); 		this.Qprint(" ","1","BA-03","Base Station Antenna 3dB","195",out); 		this.Qprint(" ","1","AT-20","Self Supporting Tower 20ft","390",out); 		switch( relay_type ) { 			 			case RELAY_MODEM:	this.Qprint(" ","1","RPM28.8", 									"Remote Polling Modem","395",out); 								break; 								 			case RELAY_BASE:		this.Qprint(" ","1","BSM-2","Base Station Master Computer","5800",out); 									this.Qprint(" ","1","WDM","Wireless Data Management","1250",out); 									this.Qprint(" ","1","MRC-2","Master RFM/CPU Interface","150",out); 									this.Qprint(" ","1","RPM28.8","Remote Polling Modem","395",out);		 									break; 		} 		return( item+1); 	}  }

Added JavaPlanner/Planning/Resources/Site3strings.properties.



































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
message=Hello World!
fileMenu=File
editMenu=Edit
newItem=New
openItem=Open...
closeItem=Close
saveItem=Save
saveAsItem=Save As...
undoItem=Undo
cutItem=Cut
copyItem=Copy
pasteItem=Paste
clearItem=Clear
selectAllItem=Select All
frameConstructor=Site3
appVersion=1.0
copyright=Copyright (c) 2016 Pandora Products. All rights reserved.

Added JavaPlanner/Planning/Resources/build.xml.



































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="UTF-8"?>
<project name="Site" default="jar" basedir=".">
    <property name="src" location="src"/>
    <property name="bin" location="bin"/>
    <property name="lib" location="lib"/>
    <property name="dist" location="dist"/>
    <property name="jarfile" location="${dist}/${ant.project.name}.jar"/>
    <property name="compile.debug" value="true"/>

    <fileset id="lib.jars" dir="${lib}">
        <include name="**/*.jar"/>
    </fileset>

    <path id="lib.path">
        <fileset refid="lib.jars"/>
    </path>

    <!-- Stub install target.  Install should depend on the 'jar' target,
         and copy the built objects to the 'dist' directory. -->
    <target name="install" description="Install jar" depends="jar">
    </target>

    <target name="compile" description="Compile code">
        <mkdir dir="${bin}"/>
        <mkdir dir="${lib}"/>
        <javac srcdir="${src}" destdir="${bin}"
               source="1.3" target="1.3"
               includeAntRuntime="no"
               classpathref="lib.path" debug="${compile.debug}">
        </javac>
    </target>

    <target name="jar" depends="compile" description="Build jar">
        <mkdir dir="${dist}"/>
        <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
            <!-- Merge library jars into final jar file -->
            <zipgroupfileset refid="lib.jars"/>
        </jar>
    </target>

    <target name="run" depends="jar" description="Run jar file">
        <java jar="${jarfile}" fork="yes" failonerror="true"/>
    </target>

    <target name="clean" description="Remove build and dist directories">
        <delete dir="${bin}"/>
        <delete dir="${dist}"/>
    </target>
</project>

Added JavaPlanner/Planning/Support/GifImage.java.

cannot compute difference between binary files

Added JavaPlanner/Planning/Support/GifImageException.java.



>
1
/*  * @(#)GifImageException.java    1.00    96/03/13  *  * Copyright (c) 1996 Tadashi Hamano All Rights Reserved.  *  * Permission to use, copy, modify, and distribute this software  * and its documentation for NON-COMMERCIAL purposes and without  * fee is hereby granted provided that this copyright notice  * appears in all copies.  *  * I SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS  * A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE  * OR ITS DRIVATIVES.  */  // This is based on "IOException" code. // Listed below is the original Copyright notice. /*  * @(#)IOException.java 1.10 95/08/09    *  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.  *  * Permission to use, copy, modify, and distribute this software  * and its documentation for NON-COMMERCIAL purposes and without  * fee is hereby granted provided that this copyright notice  * appears in all copies. Please refer to the file "copyright.html"  * for further important copyright and licensing information.  *  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.  */ // End of the original Copyright notice.  /**  * Signals that a GifImage exception has occurred.  * @see GifImage  * @version     1.00, 13 Mar 1996  */ public class GifImageException extends Exception {     /**      * Constructs a GifImageException with no detail message.      * A detail message is a String that describes this particular exception.      */     public GifImageException() {         super();     }      /**      * Constructs a GifImageException with the specified detail message.      * A detail message is a String that describes this particular exception.      * @param s the detail message      */     public GifImageException(String s) {         super(s);     } }

Added JavaPlanner/Planning/Support/MultiLineLabel.java.



>
1
// This example is from the book _Java in a Nutshell_ by David Flanagan. // Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates. // You may study, use, modify, and distribute this example for any purpose. // This example is provided WITHOUT WARRANTY either expressed or implied.  import java.awt.*; import java.util.*;  public class MultiLineLabel extends Canvas {     public static final int LEFT = 0; // Alignment constants     public static final int CENTER = 1;     public static final int RIGHT = 2;     protected String[] lines;         // The lines of text to display     protected int num_lines;          // The number of lines     protected int margin_width;       // Left and right margins     protected int margin_height;      // Top and bottom margins     protected int line_height;        // Total height of the font     protected int line_ascent;        // Font height above baseline     protected int[] line_widths;      // How wide each line is     protected int max_width;          // The width of the widest line     protected int alignment = LEFT;   // The alignment of the text.          // This method breaks a specified label up into an array of lines.     // It uses the StringTokenizer utility class.     protected void newLabel(String label) {         StringTokenizer t = new StringTokenizer(label, "\n");         num_lines = t.countTokens();         lines = new String[num_lines];         line_widths = new int[num_lines];         for(int i = 0; i < num_lines; i++) lines[i] = t.nextToken();     }          // This method figures out how the font is, and how wide each     // line of the label is, and how wide the widest line is.     protected void measure() {         FontMetrics fm = this.getFontMetrics(this.getFont());         // If we don't have font metrics yet, just return.         if (fm == null) return;                  line_height = fm.getHeight();         line_ascent = fm.getAscent();         max_width = 0;         for(int i = 0; i < num_lines; i++) {             line_widths[i] = fm.stringWidth(lines[i]);             if (line_widths[i] > max_width) max_width = line_widths[i];         }     }          // Here are four versions of the cosntrutor.     // Break the label up into separate lines, and save the other info.     public MultiLineLabel(String label, int margin_width, int margin_height,                   int alignment) {         newLabel(label);         this.margin_width = margin_width;         this.margin_height = margin_height;         this.alignment = alignment;     }     public MultiLineLabel(String label, int margin_width, int margin_height) {         this(label, margin_width, margin_height, LEFT);     }     public MultiLineLabel(String label, int alignment) {         this(label, 10, 10, alignment);     }     public MultiLineLabel(String label) {         this(label, 10, 10, LEFT);     }          // Methods to set the various attributes of the component     public void setLabel(String label) {         newLabel(label);         measure();         repaint();     }     public void setFont(Font f) {         super.setFont(f);         measure();         repaint();     }     public void setForeground(Color c) {          super.setForeground(c);          repaint();      }     public void setAlignment(int a) { alignment = a; repaint(); }     public void setMarginWidth(int mw) { margin_width = mw; repaint(); }     public void setMarginHeight(int mh) { margin_height = mh; repaint(); }     public int getAlignment() { return alignment; }     public int getMarginWidth() { return margin_width; }     public int getMarginHeight() { return margin_height; }          // This method is invoked after our Canvas is first created     // but before it can actually be displayed.  After we've     // invoked our superclass's addNotify() method, we have font     // metrics and can successfully call measure() to figure out     // how big the label is.     public void addNotify() { super.addNotify(); measure(); }          // This method is called by a layout manager when it wants to     // know how big we'd like to be.       public Dimension preferredSize() {         return new Dimension(max_width + 2*margin_width,                       num_lines * line_height + 2*margin_height);     }          // This method is called when the layout manager wants to know     // the bare minimum amount of space we need to get by.     public Dimension minimumSize() {         return new Dimension(max_width, num_lines * line_height);     }          // This method draws the label (applets use the same method).     // Note that it handles the margins and the alignment, but that     // it doesn't have to worry about the color or font--the superclass     // takes care of setting those in the Graphics object we're passed.     public void paint(Graphics g) {         int x, y;         Dimension d = this.size();         y = line_ascent + (d.height - num_lines * line_height)/2;         for(int i = 0; i < num_lines; i++, y += line_height) {             switch(alignment) {             case LEFT:                 x = margin_width; break;             case CENTER:             default:                 x = (d.width - line_widths[i])/2; break;             case RIGHT:                 x = d.width - margin_width - line_widths[i]; break;             }             g.drawString(lines[i], x, y);         }     } }

Added JavaPlanner/Planning/Support/Progress.java.



>
1
import java.applet.Applet; import java.awt.*; //import mlsoft.mct.*;  public class Progress extends Dialog { 	Frame f; 	double max_value; 	double fraction; 	 	public Progress( String name,int max,Frame w) 	{ 			// Connect it to the world 			 			super(w,name,false); 			 	    	max_value = max; 	    	fraction = 0.0; 	    	 	    	// Now add the components  	    	 		   	this.reshape(50,50,200,75); 		   	this.show(); 	    	this.update(0); 	} 	 	public void update( int val ) 	{ 		if( val > (int)max_value ) 	    	max_value = (double)val; 	    	 	    fraction = (double)val/max_value; 	    if( fraction >= 1.0 ) 	    	fraction = 1.0; 	    this.draw(); 	} 	 	void draw() 	{ 		Rectangle r; 		Graphics g; 		double val; 		 		// Get the area covered by this thing & the graphics 		 		r = new Rectangle(5,25,190,15); 		g = this.getGraphics(); 	    g.drawString("File Store Progress",10,60); 		 		// Now draw a black box around the edges & fill with white 		 		g.setColor( Color.white ); 		g.fillRect( r.x,r.y,r.width,r.height); 		g.setColor( Color.black ); 		g.drawRect( r.x,r.y,r.width,r.height); 		 		// Now draw a sized filled box as the bar 		 		val = (double)r.width * fraction; 		r.width = (int)(val + 0.5); 		 		g.setColor( Color.blue ); 		g.fillRect( r.x,r.y,r.width,r.height); 		this.show(); 	}  } 

Added JavaPlanner/Planning/Support/intergerf.java.



>
1
/* *  This is a formatted version of the integer output *  Simple for now later we can do C stuff * */  class Integerf {  	// This converts the string to a little endian version 	 	public String toString16fle( int i ) 	{ 		int msb,lsb; 		int val; 		String out; 		 		// Get the msb and lsb 		 		msb = 0xff & (i >> 8 ); 		lsb = 0xff & i; 		 		// Form a little endian version 		 		val = msb | (lsb << 8); 		 		out = this.toString16f(val); 		return( out ); 	} 		 	//*  Just add a formatted output class for HEX 	//   format is $XXXX 	 	public String toString16f( int i ) 	{ 		Integer val;		 		String out,part; 		 		// (1) Generate the HEX value note will be 4 or less digits 		 		i = 0xffff & i; 		val = new Integer( i ); 		part = val.toString(i,16); 		 		// (2) Now add the required number of 0's and put a $ on the front 		 		switch( part.length() ) { 			 			case 0:		out = "$0000"; 							break; 							 			case 1:		out = "$000" + part; 							break; 							 			case 2:		out = "$00" + part; 							break; 							 			case 3:		out = "$0" + part; 							break; 							 			case 4:		out = "$" + part; 							break; 							 			default:		out = "$####"; 							break; 		} 		 		out.toUpperCase(); 		 		return( out ); 	} }

Added JavaPlanner/Planning/Support/prog_bar.java.



>
1
/*  	Progress bar class */  import java.awt.*;  class prog_bar extends Panel { 	double max; 	double current; 	double fraction; 	 	void prog_bar() 	{ 		Graphics g; 		 		// Set background white and set current and MAX 		 		g = this.getGraphics(); 		this.setBackground( Color.white ); 		max = 100.0; 		current = 0.0; 		fraction = 0.0; 		 		// Now draw the box and stuff 		 		this.draw(); 	} 	 	void setMax( int val ) 	{ 		max = (double) val; 	} 	 	void setValue( int val ) 	{ 		Graphics g; 		 		// Calculate the fraction part we have now (note: if > 1.0 make 1.0) 		current = (double) val; 		fraction = current/max; 		if( fraction >= 1.0 ) 			fraction = 1.0; 			 		// Now draw the thing 		 		this.draw(); 	} 	 	void draw() 	{ 		Rectangle r; 		Graphics g; 		double val; 		 		// Get the area covered by this thing & the graphics 		 		r = this.bounds(); 		g = this.getGraphics(); 		 		// Now draw a black box around the edges & fill with white 		 		g.setColor( Color.white ); 		g.fillRect( r.x,r.y,r.width,r.height); 		g.setColor( Color.black ); 		g.drawRect( r.x,r.y,r.width,r.height); 		 		// Now draw a sized filled box as the bar 		 		val = (double)r.width * fraction; 		r.width = (int)(val + 0.5); 		 		g.setColor( Color.blue ); 		g.fillRect( r.x,r.y,r.width,r.height); 		this.show(); 	} }

Added JavaPlanner/build.xml.



















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="JavaPlanner" default="default" basedir=".">
    <description>Builds, tests, and runs the project JavaPlanner.</description>
    <import file="nbproject/build-impl.xml"/>
    <!--

    There exist several targets which are by default empty and which can be 
    used for execution of your tasks. These targets are usually executed 
    before and after some main targets. They are: 

      -pre-init:                 called before initialization of project properties
      -post-init:                called after initialization of project properties
      -pre-compile:              called before javac compilation
      -post-compile:             called after javac compilation
      -pre-compile-single:       called before javac compilation of single file
      -post-compile-single:      called after javac compilation of single file
      -pre-compile-test:         called before javac compilation of JUnit tests
      -post-compile-test:        called after javac compilation of JUnit tests
      -pre-compile-test-single:  called before javac compilation of single JUnit test
      -post-compile-test-single: called after javac compilation of single JUunit test
      -pre-jar:                  called before JAR building
      -post-jar:                 called after JAR building
      -post-clean:               called after cleaning build products

    (Targets beginning with '-' are not intended to be called on their own.)

    Example of inserting an obfuscator after compilation could look like this:

        <target name="-post-compile">
            <obfuscate>
                <fileset dir="${build.classes.dir}"/>
            </obfuscate>
        </target>

    For list of available properties check the imported 
    nbproject/build-impl.xml file. 


    Another way to customize the build is by overriding existing main targets.
    The targets of interest are: 

      -init-macrodef-javac:     defines macro for javac compilation
      -init-macrodef-junit:     defines macro for junit execution
      -init-macrodef-debug:     defines macro for class debugging
      -init-macrodef-java:      defines macro for class execution
      -do-jar:                  JAR building
      run:                      execution of project 
      -javadoc-build:           Javadoc generation
      test-report:              JUnit report generation

    An example of overriding the target for project execution could look like this:

        <target name="run" depends="JavaPlanner-impl.jar">
            <exec dir="bin" executable="launcher.exe">
                <arg file="${dist.jar}"/>
            </exec>
        </target>

    Notice that the overridden target depends on the jar target and not only on 
    the compile target as the regular run target does. Again, for a list of available 
    properties which you can use, check the target you are overriding in the
    nbproject/build-impl.xml file. 

    -->
</project>

Changes to Shows/QueFinder/QueFinder/QueFinder.xcodeproj/project.pbxproj.

9
10
11
12
13
14
15


16
17
18
19
20
21
22
..
34
35
36
37
38
39
40




41
42
43
44
45
46
47
..
85
86
87
88
89
90
91


92
93
94
95
96
97
98
...
119
120
121
122
123
124
125


















126
127
128
129
130
131
132
...
176
177
178
179
180
181
182

183
184
185

186
187
188
189
190
191
192
/* Begin PBXBuildFile section */
		3810F5C11C32B04900336A4E /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 3810F5C01C32B04900336A4E /* main.c */; };
		384794111C32B16500F859F1 /* waverdr.c in Sources */ = {isa = PBXBuildFile; fileRef = 3847940F1C32B16500F859F1 /* waverdr.c */; };
		384794BB1C35378700F859F1 /* PeakFinder.c in Sources */ = {isa = PBXBuildFile; fileRef = 384794B91C35378700F859F1 /* PeakFinder.c */; };
		384794C21C35542E00F859F1 /* Hdr.c in Sources */ = {isa = PBXBuildFile; fileRef = 384794C01C35542E00F859F1 /* Hdr.c */; };
		384794C71C35675500F859F1 /* Nodes.c in Sources */ = {isa = PBXBuildFile; fileRef = 384794C51C35675500F859F1 /* Nodes.c */; };
		384794C81C35675500F859F1 /* Nodes.h in Sources */ = {isa = PBXBuildFile; fileRef = 384794C61C35675500F859F1 /* Nodes.h */; };


/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
		3810F5BB1C32B04900336A4E /* CopyFiles */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = /usr/share/man/man1/;
................................................................................
		384794101C32B16500F859F1 /* waverdr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = waverdr.h; sourceTree = "<group>"; };
		384794B91C35378700F859F1 /* PeakFinder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PeakFinder.c; sourceTree = "<group>"; };
		384794BA1C35378700F859F1 /* PeakFinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = PeakFinder.h; sourceTree = "<group>"; };
		384794C01C35542E00F859F1 /* Hdr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Hdr.c; sourceTree = "<group>"; };
		384794C11C35542E00F859F1 /* Hdr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = Hdr.h; sourceTree = "<group>"; };
		384794C51C35675500F859F1 /* Nodes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Nodes.c; sourceTree = "<group>"; };
		384794C61C35675500F859F1 /* Nodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = Nodes.h; sourceTree = "<group>"; };




/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		3810F5BA1C32B04900336A4E /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
................................................................................
			name = Wave;
			path = ../../Wave;
			sourceTree = "<group>";
		};
		384794BD1C3553FF00F859F1 /* Support */ = {
			isa = PBXGroup;
			children = (


				384794C41C3565B000F859F1 /* Nodes */,
				384794BF1C35541B00F859F1 /* Header */,
				384794BE1C35540B00F859F1 /* Peak */,
				3847940E1C32B16500F859F1 /* Wave */,
			);
			name = Support;
			sourceTree = "<group>";
................................................................................
			isa = PBXGroup;
			children = (
				384794C51C35675500F859F1 /* Nodes.c */,
				384794C61C35675500F859F1 /* Nodes.h */,
			);
			name = Nodes;
			sourceTree = "<group>";


















		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		3810F5BC1C32B04900336A4E /* QueFinder */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 3810F5C41C32B04900336A4E /* Build configuration list for PBXNativeTarget "QueFinder" */;
................................................................................
/* End PBXProject section */

/* Begin PBXSourcesBuildPhase section */
		3810F5B91C32B04900336A4E /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (

				384794C81C35675500F859F1 /* Nodes.h in Sources */,
				384794BB1C35378700F859F1 /* PeakFinder.c in Sources */,
				3810F5C11C32B04900336A4E /* main.c in Sources */,

				384794C71C35675500F859F1 /* Nodes.c in Sources */,
				384794C21C35542E00F859F1 /* Hdr.c in Sources */,
				384794111C32B16500F859F1 /* waverdr.c in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */







>
>







 







>
>
>
>







 







>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>



>







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
..
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
..
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
...
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
...
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
/* Begin PBXBuildFile section */
		3810F5C11C32B04900336A4E /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 3810F5C01C32B04900336A4E /* main.c */; };
		384794111C32B16500F859F1 /* waverdr.c in Sources */ = {isa = PBXBuildFile; fileRef = 3847940F1C32B16500F859F1 /* waverdr.c */; };
		384794BB1C35378700F859F1 /* PeakFinder.c in Sources */ = {isa = PBXBuildFile; fileRef = 384794B91C35378700F859F1 /* PeakFinder.c */; };
		384794C21C35542E00F859F1 /* Hdr.c in Sources */ = {isa = PBXBuildFile; fileRef = 384794C01C35542E00F859F1 /* Hdr.c */; };
		384794C71C35675500F859F1 /* Nodes.c in Sources */ = {isa = PBXBuildFile; fileRef = 384794C51C35675500F859F1 /* Nodes.c */; };
		384794C81C35675500F859F1 /* Nodes.h in Sources */ = {isa = PBXBuildFile; fileRef = 384794C61C35675500F859F1 /* Nodes.h */; };
		38AEF00F1C3A789200E79ABE /* Plot.c in Sources */ = {isa = PBXBuildFile; fileRef = 38AEF00D1C3A789200E79ABE /* Plot.c */; };
		38AEF0131C3AAC7200E79ABE /* Correlation.c in Sources */ = {isa = PBXBuildFile; fileRef = 38AEF0111C3AAC7200E79ABE /* Correlation.c */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
		3810F5BB1C32B04900336A4E /* CopyFiles */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = /usr/share/man/man1/;
................................................................................
		384794101C32B16500F859F1 /* waverdr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = waverdr.h; sourceTree = "<group>"; };
		384794B91C35378700F859F1 /* PeakFinder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PeakFinder.c; sourceTree = "<group>"; };
		384794BA1C35378700F859F1 /* PeakFinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = PeakFinder.h; sourceTree = "<group>"; };
		384794C01C35542E00F859F1 /* Hdr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Hdr.c; sourceTree = "<group>"; };
		384794C11C35542E00F859F1 /* Hdr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = Hdr.h; sourceTree = "<group>"; };
		384794C51C35675500F859F1 /* Nodes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Nodes.c; sourceTree = "<group>"; };
		384794C61C35675500F859F1 /* Nodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = Nodes.h; sourceTree = "<group>"; };
		38AEF00D1C3A789200E79ABE /* Plot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Plot.c; sourceTree = "<group>"; };
		38AEF00E1C3A789200E79ABE /* Plot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Plot.h; sourceTree = "<group>"; };
		38AEF0111C3AAC7200E79ABE /* Correlation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Correlation.c; sourceTree = "<group>"; };
		38AEF0121C3AAC7200E79ABE /* Correlation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Correlation.h; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		3810F5BA1C32B04900336A4E /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
................................................................................
			name = Wave;
			path = ../../Wave;
			sourceTree = "<group>";
		};
		384794BD1C3553FF00F859F1 /* Support */ = {
			isa = PBXGroup;
			children = (
				38AEF0101C3AAC5600E79ABE /* Correlation */,
				38AEF00C1C3A787800E79ABE /* Plot */,
				384794C41C3565B000F859F1 /* Nodes */,
				384794BF1C35541B00F859F1 /* Header */,
				384794BE1C35540B00F859F1 /* Peak */,
				3847940E1C32B16500F859F1 /* Wave */,
			);
			name = Support;
			sourceTree = "<group>";
................................................................................
			isa = PBXGroup;
			children = (
				384794C51C35675500F859F1 /* Nodes.c */,
				384794C61C35675500F859F1 /* Nodes.h */,
			);
			name = Nodes;
			sourceTree = "<group>";
		};
		38AEF00C1C3A787800E79ABE /* Plot */ = {
			isa = PBXGroup;
			children = (
				38AEF00D1C3A789200E79ABE /* Plot.c */,
				38AEF00E1C3A789200E79ABE /* Plot.h */,
			);
			name = Plot;
			sourceTree = "<group>";
		};
		38AEF0101C3AAC5600E79ABE /* Correlation */ = {
			isa = PBXGroup;
			children = (
				38AEF0111C3AAC7200E79ABE /* Correlation.c */,
				38AEF0121C3AAC7200E79ABE /* Correlation.h */,
			);
			name = Correlation;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		3810F5BC1C32B04900336A4E /* QueFinder */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 3810F5C41C32B04900336A4E /* Build configuration list for PBXNativeTarget "QueFinder" */;
................................................................................
/* End PBXProject section */

/* Begin PBXSourcesBuildPhase section */
		3810F5B91C32B04900336A4E /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				38AEF0131C3AAC7200E79ABE /* Correlation.c in Sources */,
				384794C81C35675500F859F1 /* Nodes.h in Sources */,
				384794BB1C35378700F859F1 /* PeakFinder.c in Sources */,
				3810F5C11C32B04900336A4E /* main.c in Sources */,
				38AEF00F1C3A789200E79ABE /* Plot.c in Sources */,
				384794C71C35675500F859F1 /* Nodes.c in Sources */,
				384794C21C35542E00F859F1 /* Hdr.c in Sources */,
				384794111C32B16500F859F1 /* waverdr.c in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

Changes to Shows/QueFinder/QueFinder/QueFinder.xcodeproj/project.xcworkspace/xcuserdata/jim.xcuserdatad/UserInterfaceState.xcuserstate.

cannot compute difference between binary files

Changes to Shows/QueFinder/QueFinder/QueFinder.xcodeproj/xcuserdata/jim.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist.

22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
..
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
...
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
...
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
































276
277
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473268557.429143"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "59"
            endingLineNumber = "59"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
................................................................................
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473334761.754467"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "168"
            endingLineNumber = "168"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473268557.429143"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "154"
            endingLineNumber = "154"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
................................................................................
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473268557.429143"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "77"
            endingLineNumber = "77"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
................................................................................
            landmarkName = "GetNextNode()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "Yes"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473509969.60155"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "139"
            endingLineNumber = "139"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "Yes"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "../Wave/waverdr.c"
            timestampString = "473511229.857623"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "412"
            endingLineNumber = "412"
            landmarkName = "wave_find_data()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
































   </Breakpoints>
</Bucket>







|


|
|







 







|


|
|











|


|
|







 







|


|
|







 







|



|


|
|







|












>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
..
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
...
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
...
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604451.317491"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "61"
            endingLineNumber = "61"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
................................................................................
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604451.317491"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "177"
            endingLineNumber = "177"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604451.317491"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "161"
            endingLineNumber = "161"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
................................................................................
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604451.317491"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "79"
            endingLineNumber = "79"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
................................................................................
            landmarkName = "GetNextNode()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604451.317491"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "146"
            endingLineNumber = "146"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "../Wave/waverdr.c"
            timestampString = "473511229.857623"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "412"
            endingLineNumber = "412"
            landmarkName = "wave_find_data()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604435.181687"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "179"
            endingLineNumber = "179"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/Plot.c"
            timestampString = "473605353.016784"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "45"
            endingLineNumber = "45"
            landmarkName = "plotData()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
   </Breakpoints>
</Bucket>

Changes to Shows/QueFinder/QueFinder/QueFinder.xcodeproj/xcuserdata/jim.xcuserdatad/xcschemes/QueFinder.xcscheme.

67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
            isEnabled = "NO">
         </CommandLineArgument>
         <CommandLineArgument
            argument = "-i x.wav"
            isEnabled = "NO">
         </CommandLineArgument>
         <CommandLineArgument
            argument = "-i ode.wav -hdr ode.hdr -nodes 8 -o ode.json"
            isEnabled = "YES">
         </CommandLineArgument>
      </CommandLineArguments>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction







|







67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
            isEnabled = "NO">
         </CommandLineArgument>
         <CommandLineArgument
            argument = "-i x.wav"
            isEnabled = "NO">
         </CommandLineArgument>
         <CommandLineArgument
            argument = "-i ode.wav -hdr ode.hdr -nodes 8 -o ode.json -plt"
            isEnabled = "YES">
         </CommandLineArgument>
      </CommandLineArguments>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction

Changes to Shows/QueFinder/QueFinder/QueFinder/main.c.

16
17
18
19
20
21
22

23
24
25
26
27
28
29
..
40
41
42
43
44
45
46

47
48
49
50
51
52
53
...
124
125
126
127
128
129
130





131
132
133
134
135
136
137
...
162
163
164
165
166
167
168





169
170
171
172
173
174
175
...
192
193
194
195
196
197
198

199
200
201
202
203
204
205
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "waverdr.h"
#include "Hdr.h"
#include "Nodes.h"
#include "PeakFinder.h"



static int flag_srch(int argc,const char *argv[],
					char *flag,int get_value,
					char **rtn );
static void print_help(void);

................................................................................
	int count = 0;
	char inbuf[25];
	float threshold = 0.8;
	float width = 100.0;
	int n;
	int nodes;
	char *outfile;


	//------------------------------------------------------------------------------
	// (1) Handle input options
	
	if( flag_srch( argc,argv,"-v",0,&ptr) )		// Handle -v
	{
		print_help();
................................................................................
	}
	else
	{
		printf("*** ERROR NO Output Program File\n");
		print_help();
		return( - 1 );
	}






	//------------------------------------------------------------------------------
	// Process file
	// Read the data file

	buffer = (float *)calloc(2,sizeof(float) * ifile->frames);
	if( buffer != NULL )
................................................................................
				break;

		}

		// Run with current parameters
		base = ScanData(ifile,buffer,nlist,threshold,width);
		ScanDataOutput(base,nlist,hdr,outfile);






		ScanDataFree(base);
		FreeHeader(hdr);
		wave_close(ifile);
	}
	

................................................................................
	printf("QueFinder - Find Que's in WAV File %s %s\n",__DATE__,__TIME__);
	printf("SYNTAX: firewalker   -i <Wave IN> -o <Queue OUT>\n");
	printf("\n");
	printf("    -i <Audio IN>       Stereo WAV file for queuing\n");
	printf("    -nodes <# nodes>    # Firing nodes\n");
	printf("    -hdr <header file>  File with show data\n");
	printf("    -o  <output file>   Show output file\n");

	printf("    [-v]                Show this message and return\n");
	printf("\n");
}

/***********************************************************************
*
*  FLAG_SRCH(argc,argv,flag,get_value,&rtn )







>







 







>







 







>
>
>
>
>







 







>
>
>
>
>







 







>







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
..
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
...
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
...
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
...
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "waverdr.h"
#include "Hdr.h"
#include "Nodes.h"
#include "PeakFinder.h"
#include "Plot.h"


static int flag_srch(int argc,const char *argv[],
					char *flag,int get_value,
					char **rtn );
static void print_help(void);

................................................................................
	int count = 0;
	char inbuf[25];
	float threshold = 0.8;
	float width = 100.0;
	int n;
	int nodes;
	char *outfile;
	char plot = 0;

	//------------------------------------------------------------------------------
	// (1) Handle input options
	
	if( flag_srch( argc,argv,"-v",0,&ptr) )		// Handle -v
	{
		print_help();
................................................................................
	}
	else
	{
		printf("*** ERROR NO Output Program File\n");
		print_help();
		return( - 1 );
	}

	if( flag_srch( argc,argv,"-plt",0,&ptr) )		// Plot data generation
	{
		plot = 1;
	}

	//------------------------------------------------------------------------------
	// Process file
	// Read the data file

	buffer = (float *)calloc(2,sizeof(float) * ifile->frames);
	if( buffer != NULL )
................................................................................
				break;

		}

		// Run with current parameters
		base = ScanData(ifile,buffer,nlist,threshold,width);
		ScanDataOutput(base,nlist,hdr,outfile);

		if( plot)
		{
			plotData( 40*ifile->rate,1.0 * ifile->rate,buffer,base);
		}

		ScanDataFree(base);
		FreeHeader(hdr);
		wave_close(ifile);
	}
	

................................................................................
	printf("QueFinder - Find Que's in WAV File %s %s\n",__DATE__,__TIME__);
	printf("SYNTAX: firewalker   -i <Wave IN> -o <Queue OUT>\n");
	printf("\n");
	printf("    -i <Audio IN>       Stereo WAV file for queuing\n");
	printf("    -nodes <# nodes>    # Firing nodes\n");
	printf("    -hdr <header file>  File with show data\n");
	printf("    -o  <output file>   Show output file\n");
	printf("    -plt                Generate Plot files\n");
	printf("    [-v]                Show this message and return\n");
	printf("\n");
}

/***********************************************************************
*
*  FLAG_SRCH(argc,argv,flag,get_value,&rtn )

Changes to obj/marker.

1
This is a marker file to ensure directory is in Fossil
|
1
sfsfsd